Fixed STAk and STRk bugs

This commit is contained in:
JJ Bliss
2026-04-29 16:46:40 -04:00
parent 31b6beae5c
commit c2b83959c4
+15 -4
View File
@@ -1058,9 +1058,16 @@ export fn uxn_step(state: *uxn) (done | error) = {
push_to_stack(ldr_inst.ret, val, state); push_to_stack(ldr_inst.ret, val, state);
// /* STR */ OPC(0x13,POx(a,0) GOT(y),POK(pc + (Sint8)a, y, 0xffff)) // /* STR */ OPC(0x13,POx(a,0) GOT(y),POK(pc + (Sint8)a, y, 0xffff))
case let str_inst: STR => case let str_inst: STR =>
let reladdr = (pop_from_stack(str_inst.keep, str_inst.ret, false, state): u16): i8; let reladdr = (pop_or_get(normal_op{short = false, keep = str_inst.keep, ret = str_inst.ret}, 0, state): u16 & 0x00FF): u8: i8;
let addr: u16 = (state.pc: u32: i32 + reladdr): u16; let addr: u16 = (state.pc: u32: i32 + reladdr): u16;
let val = pop_from_stack(str_inst.keep, str_inst.ret, str_inst.short, state); let val = if(str_inst.short){
let low = pop_or_get(normal_op{short = false, keep = str_inst.keep, ret = str_inst.ret}, 1, state): u8;
let high = pop_or_get(normal_op{short = false, keep = str_inst.keep, ret = str_inst.ret}, 2, state): u8;
yield short_from_bytes(high,low);
}else{
yield pop_or_get(str_inst, 1, state): u8;
};
match (val) { match (val) {
case let b: u8 => case let b: u8 =>
state.ram[addr] = b; state.ram[addr] = b;
@@ -1082,8 +1089,12 @@ export fn uxn_step(state: *uxn) (done | error) = {
push_to_stack(lda_inst.ret, val, state); push_to_stack(lda_inst.ret, val, state);
// /* STA */ OPC(0x15,POx(a,1) GOT(y),POK(a, y, 0xffff)) // /* STA */ OPC(0x15,POx(a,1) GOT(y),POK(a, y, 0xffff))
case let sta_inst: STA => case let sta_inst: STA =>
let addr: u16 = pop_from_stack(sta_inst.keep, sta_inst.ret, true, state): u16; let addr: u16 = pop_or_get(normal_op{short = true, keep = sta_inst.keep, ret = sta_inst.ret}, 0, state): u16 ;
let val = pop_from_stack(sta_inst.keep, sta_inst.ret, sta_inst.short, state); let val = if(sta_inst.short){
yield pop_or_get(sta_inst, 1, state): u16;
}else{
yield pop_or_get(sta_inst, 2, state): u8;
};
match (val) { match (val) {
case let b: u8 => case let b: u8 =>
state.ram[addr] = b; state.ram[addr] = b;