Fixed STAk and STRk bugs
This commit is contained in:
+15
-4
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user