diff --git a/src/main.zig b/src/main.zig index 0f5b1c8..ad70950 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,18 +1,32 @@ const std = @import("std"); +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", .{}); var buffer: [256]u8 = undefined; while (true) { std.debug.print("> ", .{}); const line = try input.readUntilDelimiterOrEof(&buffer, '\n'); - if (line == null) { - break; - } - - if (std.mem.eql(u8, line.?, "exit")) { - break; + const clean = std.mem.trim(u8, line.?, " \n\r"); + var it = std.mem.splitSequence(u8, clean, " "); + if (it.next()) |first_argument| { + if (std.mem.eql(u8, first_argument, "exit")) { + break; + } else if (std.mem.eql(u8, first_argument, "mem")) { + try handleMemoryCommand(&memory, &it); + } + } else { + // noop } } } + +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}); + } +} diff --git a/src/memory.zig b/src/memory.zig new file mode 100644 index 0000000..7d32bb5 --- /dev/null +++ b/src/memory.zig @@ -0,0 +1,15 @@ +const MEM_SIZE: usize = 1 * 1024 * 1024; // 1mb + +pub const Memory = struct { + data: [MEM_SIZE]u8, + + pub fn init() Memory { + return Memory{ + .data = [_]u8{0} ** MEM_SIZE, + }; + } + + pub fn readByte(self: *Memory, addr: u8) !u8 { + return self.data[addr]; + } +};