From 9afc23da8cda2dd1380e4282ead882375ea3a5ec Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 28 Aug 2023 20:18:47 +0200 Subject: Add relative store str/str2 ops --- src/main.c | 8 ++++++-- src/uxn-core.s | 29 +++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main.c b/src/main.c index 6c65153..6a7b7cd 100644 --- a/src/main.c +++ b/src/main.c @@ -129,7 +129,10 @@ init_uxn() { // LDR / SRT 0xa0, 0xab, 0xcd, 0x80, 0xfb, 0x12, 0xa0, 0xab, 0xcd, 0x80, 0xfb, 0x32, - 0x80, 1, 0x12, 0x00, 0xaa, 0xbb, + 0x80, 1, 0x12, 0xa0, 0xaa, 0xbb, + 0xa0, 0xff, 0xee, 0x80, 0xfa, 0x33, + 0x80, 0xff, 0x80, 1, 0x13, 0xa0, 0xaa, 0xbb, + 0xa0, 0xff, 0xee, 0x80, 1, 0x33, 0xa0, 0xaa, 0xbb, }; memcpy(uxn_ram + PAGE_PROGRAM, uxn_rom, sizeof(uxn_rom)); } @@ -186,6 +189,8 @@ main(void) { io_ports[i] = 0; } + uxn_eval_asm(PAGE_PROGRAM); + txt_printf("ROM"); for (size_t i = 0; i < 64; i++) { if (i % 8 == 0) { @@ -195,7 +200,6 @@ main(void) { } txt_printf("\n\n"); - uxn_eval_asm(PAGE_PROGRAM); txt_printf("WST ("); txt_printf("SIZE: %d)", wst_ptr - (uintptr_t)wst); for (size_t i = 0; i < 64; i++) { diff --git a/src/uxn-core.s b/src/uxn-core.s index 7d5eb69..0e5cdbc 100644 --- a/src/uxn-core.s +++ b/src/uxn-core.s @@ -100,15 +100,15 @@ uxn_ret: strb \a, [r2], #2 .endm -.macro zsave8 val, off - strb \val, [r7, \off] +.macro zsave8 a, off + strb \a, [r7, \off] .endm -.macro zsave16 val, off +.macro zsave16 a, off add \off, r7 - strb \val, [\off, #1] - lsr \val, #8 - strb \val, [\off] + strb \a, [\off, #1] + lsr \a, #8 + strb \a, [\off] .endm .macro zload8 dst, off @@ -119,6 +119,17 @@ uxn_ret: ldrb \dst, [r0, \off] .endm +.macro rsave8 a, off + strb \a, [r0, \off] +.endm + +.macro rsave16 a, off + adds \off, r0 + strb \a, [\off, #1] + lsr \a, #8 + strb \a, [\off] +.endm + @ OP table op_table: .word brk @ 0x00 @@ -642,9 +653,15 @@ ldr2: b uxn_decode str: + wpop8s r4 + wpop8 r3 + rsave8 r3, r4 b uxn_decode str2: + wpop8s r4 + wpop16 r3, r5 + rsave16 r3, r4 b uxn_decode lda: -- cgit v1.2.1