solve merge conflict
This commit is contained in:
commit
607e58b7b5
2 changed files with 63 additions and 1 deletions
|
@ -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
61
src/uxn-instructions.zig
Normal 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 };
|
||||
}
|
Loading…
Add table
Reference in a new issue