diff --git a/src/uxn.zig b/src/uxn.zig index 9a7d283..c81e3cf 100644 --- a/src/uxn.zig +++ b/src/uxn.zig @@ -99,7 +99,12 @@ pub fn eval(self: *Uxn) bool { 0x1E => eor(&self.ws, u8, false), // EOR 0x1F => sft(&self.ws, u8, false), // SFT - 0x20 => {}, // JCI + 0x20 => { + if (self.ws.pop(u8) != 0) + self.pc +%= 2 + self.mem.peek(u16, self.pc +% 1) + else + self.pc +%= 2; + }, // JCI 0x21 => inc(&self.ws, u16, false), // INC2 0x22 => pop(&self.ws, u16, false), // POP2 0x23 => nip(&self.ws, u16, false), // NIP2 @@ -132,7 +137,9 @@ pub fn eval(self: *Uxn) bool { 0x3E => eor(&self.ws, u16, false), // EOR2 0x3F => sft(&self.ws, u16, false), // SFT2 - 0x40 => {}, // JMI + 0x40 => { + self.pc +%= 2 + self.mem.peek(u16, self.pc +% 1); + }, // JMI 0x41 => inc(&self.rs, u8, false), // INCr 0x42 => pop(&self.rs, u8, false), // POPr 0x43 => nip(&self.rs, u8, false), // NIPr @@ -498,9 +505,10 @@ fn dei(self: *Uxn, stack: *Stack, comptime T: type, comptime keep: bool) void { } fn deo(self: *Uxn, stack: *Stack, comptime T: type, comptime keep: bool) void { + std.debug.print("DEO: {any} ", .{stack.s}); const d = if (keep) stack.peek(u8) else stack.pop(u8); const v = if (keep) stack.peek(T) else stack.pop(T); - std.debug.print("DEO: v{X} d{X}\n", .{ v, d }); + std.debug.print("v{X} d{X}\n", .{ v, d }); switch (T) { u8 => self.dev[d] = v, u16 => {