This commit is contained in:
Jeeves 2025-03-04 22:01:36 -07:00
parent 8cb37452fb
commit 43d7b290fd
3 changed files with 70 additions and 8 deletions

View file

@ -7,6 +7,16 @@ rs: Stack = .{ .s = undefined },
dev: [0x100]u8 = undefined,
pc: u16,
deo8: *const fn (*Uxn, *Stack, u8, u8) void = deo8Stub,
deo16: *const fn (*Uxn, *Stack, u8, u16) void = deo16Stub,
dei8: *const fn (*Uxn, *Stack, u8) void = dei8Stub,
dei16: *const fn (*Uxn, *Stack, u8) void = dei16Stub,
fn deo8Stub(_: *Uxn, _: *Stack, _: u8, _: u8) void {}
fn deo16Stub(_: *Uxn, _: *Stack, _: u8, _: u16) void {}
fn dei8Stub(_: *Uxn, _: *Stack, _: u8) void {}
fn dei16Stub(_: *Uxn, _: *Stack, _: u8) void {}
const Memory = struct {
m: [0x10000]u8,
@ -503,21 +513,29 @@ fn sta(self: *Uxn, stack: *Stack, comptime T: type, comptime keep: bool) void {
fn dei(self: *Uxn, stack: *Stack, comptime T: type, comptime keep: bool) void {
const d = if (keep) stack.peek(u8) else stack.pop(u8);
switch (T) {
u8 => self.dei8(self, stack, d),
u16 => self.dei16(self, stack, d),
else => @compileError("expected u8 or u16, got " + @typeName(T)),
}
stack.push(T, self.dev[d]);
}
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("v{X} d{X}\n", .{ v, d });
std.debug.print("DEO: dev {X}, val {X}\n", .{ d, v });
switch (T) {
u8 => self.dev[d] = v,
u8 => {
self.dev[d] = v;
self.deo8(self, stack, d, v);
},
u16 => {
self.dev[d] = @truncate(v >> 8);
self.dev[d +% 1] = @truncate(v & 0xFF);
self.deo16(self, stack, d, v);
},
else => unreachable,
else => @compileError("expected u8 or u16, got " + @typeName(T)),
}
}