diff --git a/src/main.zig b/src/main.zig index ad70950..cb10264 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4,7 +4,11 @@ const mem = @import("memory.zig"); pub fn main() !void { var memory = mem.Memory.init(); var input = std.io.getStdIn().reader(); - std.debug.print("MI-HA-RU (386) REPL\nType 'exit' to quit.\n", .{}); + std.debug.print( + \\MI-HA-RU (386) REPL + \\Type 'exit' to quit. + \\ + , .{}); var buffer: [256]u8 = undefined; while (true) { std.debug.print("> ", .{}); @@ -25,8 +29,28 @@ pub fn main() !void { fn handleMemoryCommand(memory: *mem.Memory, it: anytype) !void { if (it.next()) |next_argument| { - const addr = try std.fmt.parseUnsigned(u8, next_argument, 10); - const value = try memory.readByte(addr); - std.debug.print("{}\n", .{value}); + if (std.mem.eql(u8, next_argument, "read")) { + if (it.next()) |address| { + const addr = try std.fmt.parseUnsigned(u8, address, 10); + const value = try memory.readByte(addr); + std.debug.print( + \\MEM @ {}: {} + \\ + , .{ addr, value }); + } + } else if (std.mem.eql(u8, next_argument, "write")) { + const maybe_addr = it.next(); + const maybe_value = it.next(); + if (maybe_addr == null or maybe_value == null) { + std.debug.print( + \\Invalid arguments. Usage: mem write + \\ + , .{}); + } else { + const addr = try std.fmt.parseUnsigned(u8, maybe_addr.?, 10); + const value = try std.fmt.parseUnsigned(u8, maybe_value.?, 10); + _ = try memory.writeByte(addr, value); + } + } } } diff --git a/src/memory.zig b/src/memory.zig index 7d32bb5..f9fe603 100644 --- a/src/memory.zig +++ b/src/memory.zig @@ -12,4 +12,8 @@ pub const Memory = struct { pub fn readByte(self: *Memory, addr: u8) !u8 { return self.data[addr]; } + + pub fn writeByte(self: *Memory, addr: u8, value: u8) !void { + self.data[addr] = value; + } };