solve merge conflict

This commit is contained in:
Jeeves 2025-03-03 19:28:28 -07:00
commit 607e58b7b5
2 changed files with 63 additions and 1 deletions

View file

@ -1,6 +1,7 @@
const std = @import("std");
const Uxn = @import("uxn.zig");
const UxnFmt = @import("uxn-instructions.zig");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
@ -23,7 +24,7 @@ pub fn main() !void {
var running = true;
while (running) {
std.debug.print("{any} {X}\n", .{ uxn.pc, uxn.mem.m[uxn.pc] });
std.debug.print("pc={X} code={X} op={s}\n", .{ uxn.pc, uxn.mem.m[uxn.pc], UxnFmt.fmtInstrs(uxn.mem.m[uxn.pc .. uxn.pc +% 1]) });
if (uxn.eval()) running = false;
}
} else return error.NoRom;

61
src/uxn-instructions.zig Normal file
View file

@ -0,0 +1,61 @@
const std = @import("std");
pub fn formatInstruction(
bytes: []const u8,
comptime fmt: []const u8,
options: std.fmt.FormatOptions,
writer: anytype,
) !void {
_ = fmt;
_ = options;
std.debug.assert(bytes.len == 1);
switch (bytes[0] & 0x1F) {
0x00 => switch (bytes[0]) {
0x00 => try writer.writeAll("BRK"),
0x20 => try writer.writeAll("JCI"),
0x40 => try writer.writeAll("JMI"),
0x60 => try writer.writeAll("JSI"),
0x80, 0xA0 => try writer.writeAll("LIT"),
else => unreachable,
},
0x01 => try writer.writeAll("INC"),
0x02 => try writer.writeAll("POP"),
0x03 => try writer.writeAll("NIP"),
0x04 => try writer.writeAll("SWP"),
0x05 => try writer.writeAll("ROT"),
0x06 => try writer.writeAll("DUP"),
0x07 => try writer.writeAll("OVR"),
0x08 => try writer.writeAll("EQU"),
0x09 => try writer.writeAll("NEQ"),
0x0A => try writer.writeAll("GTH"),
0x0B => try writer.writeAll("LTH"),
0x0C => try writer.writeAll("JMP"),
0x0D => try writer.writeAll("JCN"),
0x0E => try writer.writeAll("JSR"),
0x0F => try writer.writeAll("STH"),
0x10 => try writer.writeAll("LDZ"),
0x11 => try writer.writeAll("STZ"),
0x12 => try writer.writeAll("LDR"),
0x13 => try writer.writeAll("STR"),
0x14 => try writer.writeAll("LDA"),
0x15 => try writer.writeAll("STA"),
0x16 => try writer.writeAll("DEI"),
0x17 => try writer.writeAll("DEO"),
0x18 => try writer.writeAll("ADD"),
0x19 => try writer.writeAll("SUB"),
0x1A => try writer.writeAll("MUL"),
0x1B => try writer.writeAll("DIV"),
0x1C => try writer.writeAll("AND"),
0x1D => try writer.writeAll("ORA"),
0x1E => try writer.writeAll("EOR"),
0x1F => try writer.writeAll("SFT"),
else => unreachable,
}
if (bytes[0] & 0x20 == 0x20) try writer.writeByte('2');
if (bytes[0] & 0x40 == 0x40) try writer.writeByte('k');
if (bytes[0] & 0x80 == 0x80) try writer.writeByte('r');
}
pub fn fmtInstrs(bytes: []const u8) std.fmt.Formatter(formatInstruction) {
return .{ .data = bytes };
}