From 8ea88188b604f42e77ab9e929587f80601e5da85 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 28 Aug 2023 13:13:45 +0200 Subject: Implement INC instructions and fix add/sub/mul behaviour --- src/main.c | 13 ++++++++++--- src/uxn-core.s | 39 ++++++++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/main.c b/src/main.c index 315292e..f70fbe9 100644 --- a/src/main.c +++ b/src/main.c @@ -43,7 +43,7 @@ void init_uxn() { // Initialize uxn. u32 fill = 0; - dma_fill(uxn_ram, fill, 0x10300, 3); + dma_fill(uxn_ram, fill, sizeof(uxn_ram), 3); // uxn_boot(u, uxn_ram, uxn_dei, uxn_deo); // Copy rom to VM. @@ -52,13 +52,20 @@ init_uxn() { // ADD test. 0x80, 0x04, 0x80, 0x08, 0x18, // #04 #08 ADD -> 0c 0xa0, 0x00, 0x04, 0xa0, 0x00, 0x08, 0x38, // #0004 #0008 ADD2 -> 000c + 0xa0, 0x00, 0xff, 0xa0, 0x00, 0x02, 0x38, // #00ff #0002 ADD2 -> 0101 // SUB test. - 0x80, 0x08, 0x80, 0x03, 0x19, // #08 #03 ADD -> 05 - 0xa0, 0x00, 0x08, 0xa0, 0x00, 0x03, 0x39, // #0008 #0003 ADD2 -> 0005 + 0x80, 0x08, 0x80, 0x03, 0x19, // #08 #03 SUB -> 05 + 0xa0, 0x00, 0x08, 0xa0, 0x00, 0x03, 0x39, // #0008 #0003 SUB2 -> 0005 + 0xa0, 0x01, 0x01, 0xa0, 0x00, 0x02, 0x39, // #0008 #0003 SUB2 -> 00ff // MUL test. 0x80, 0x03, 0x80, 0x04, 0x1a, // #03 #04 MUL -> 0c 0xa0, 0x00, 0x03, 0xa0, 0x00, 0x04, 0x3a, // #0003 #0004 MUL2 -> 000c 0xa0, 0x00, 0xff, 0xa0, 0x00, 0x02, 0x3a, // #00ff #0002 MUL2 -> 01fe + // INC test. + 0x80, 0x09, 0x01, // #09 INC -> 0a + 0xa0, 0x00, 0x09, 0x21, // #0009 INC2 -> 000a + 0xa0, 0x00, 0xff, 0x21, // #0009 INC2 -> 0100 + 0xa0, 0x00, 0xff, 0x21, 0x21 // #0009 INC2 INC2 -> 0101 }; memcpy(uxn_ram + PAGE_PROGRAM, uxn_rom, sizeof(uxn_rom)); } diff --git a/src/uxn-core.s b/src/uxn-core.s index e35707f..95afc1a 100644 --- a/src/uxn-core.s +++ b/src/uxn-core.s @@ -79,9 +79,19 @@ lit2r: b uxn_decode inc: + ldrb r3, [r1, #-1]! + add r3, #1 + strb r3, [r1], #1 b uxn_decode inc2: + ldrb r3, [r1, #-1]! + ldrb r5, [r1, #-1]! + orr r3, r3, r5, lsl #8 + add r3, r3, #1 + strb r3, [r1, #1] + lsr r3, #8 + strb r3, [r1], #2 b uxn_decode pop: @@ -226,14 +236,14 @@ add: add2: ldrb r3, [r1, #-1]! ldrb r5, [r1, #-1]! - orr r3, r5, r3, lsl #8 + orr r3, r3, r5, lsl #8 ldrb r4, [r1, #-1]! ldrb r5, [r1, #-1]! - orr r4, r5, r4, lsl #8 + orr r4, r4, r5, lsl #8 add r3, r3, r4 - strb r3, [r1], #1 + strb r3, [r1, #1] lsr r3, #8 - strb r3, [r1], #1 + strb r3, [r1], #2 b uxn_decode sub: @@ -246,14 +256,14 @@ sub: sub2: ldrb r3, [r1, #-1]! ldrb r5, [r1, #-1]! - orr r3, r5, r3, lsl #8 + orr r3, r3, r5, lsl #8 ldrb r4, [r1, #-1]! ldrb r5, [r1, #-1]! - orr r4, r5, r4, lsl #8 + orr r4, r4, r5, lsl #8 sub r3, r4, r3 - strb r3, [r1], #1 + strb r3, [r1, #1] lsr r3, #8 - strb r3, [r1], #1 + strb r3, [r1], #2 b uxn_decode mul: @@ -266,15 +276,14 @@ mul: mul2: ldrb r3, [r1, #-1]! ldrb r5, [r1, #-1]! - orr r3, r5, r3, lsl #8 + orr r3, r3, r5, lsl #8 ldrb r4, [r1, #-1]! ldrb r5, [r1, #-1]! - orr r4, r5, r4, lsl #8 - mul r5, r3, r4 - lsr r3, r5, #24 - strb r3, [r1], #1 - lsr r5, #16 - strb r5, [r1], #1 + orr r4, r4, r5, lsl #8 + mul r3, r3, r4 + strb r3, [r1, #1] + lsr r3, #8 + strb r3, [r1], #2 b uxn_decode div: -- cgit v1.2.1