const std = @import("std"); const Uxn = @import("uxn.zig"); // TODO combine with uxn.zig const UxnFmt = @import("uxn-instructions.zig"); pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); var args = try std.process.argsWithAllocator(allocator); defer args.deinit(); _ = args.next(); const rom_path = args.next(); if (rom_path) |path| { var file = try std.fs.cwd().openFile(path, .{}); defer file.close(); const rom = try file.readToEndAlloc(allocator, 0xFF00); defer allocator.free(rom); var uxn = Uxn{ .pc = 0x100 }; @memcpy(uxn.mem.m[0x100 .. rom.len + 0x100], rom); var running = true; while (running) { 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; }