diff --git a/build.zig b/build.zig index 8d58041..2f7ba16 100644 --- a/build.zig +++ b/build.zig @@ -32,6 +32,24 @@ pub fn build(b: *std.Build) !void { const exe = b.addExecutable(.{ .name = "chip8-zig", .root_source_file = .{ .path = "src/main.zig" }, .optimize = optimize, .target = target }); + // Provide filenames of all files in 'src/ROMs' to program as options + { + var files = std.ArrayList([]const u8).init(b.allocator); + defer files.deinit(); + var options = b.addOptions(); + var dir = try std.fs.cwd().openIterableDir("src/ROMs", .{ }); + var it = dir.iterate(); + while (try it.next()) |file| { + if (file.kind != .file) { + continue; + } + try files.append(b.pathJoin(&.{"ROMs", file.name})); + } + + options.addOption([]const []const u8, "roms", files.items); + exe.addOptions("options", options); + } + raylib.addTo(b, exe, target, optimize); // rl.link(b, exe, target, optimize); diff --git a/src/ROMs/snek.ch8 b/src/ROMs/snek.ch8 new file mode 100644 index 0000000..ad5b7f1 Binary files /dev/null and b/src/ROMs/snek.ch8 differ diff --git a/src/main.zig b/src/main.zig index a49e15f..929e52c 100755 --- a/src/main.zig +++ b/src/main.zig @@ -7,11 +7,17 @@ const ChipContext = @import("chip.zig"); const RaylibChip = @import("raylib-chip.zig"); const GlobalContext = @import("./global-context.zig"); const MainScene = @import("./main-scene.zig"); +const options = @import("options"); fn megabytes(amount: usize) usize { return amount * 1024 * 1024; } +const ROM = struct { + name: []const u8, + data: []const u8, +}; + pub fn main() anyerror!void { const memory = try std.heap.page_allocator.alloc(u8, megabytes(5)); var fba = std.heap.FixedBufferAllocator.init(memory); @@ -30,7 +36,19 @@ pub fn main() anyerror!void { var main_scene = try MainScene.init(allocator, &ctx); defer main_scene.deinit(); - main_scene.chip.set_memory(0x200, @embedFile("ROMs/br8kout.ch8")); + comptime var roms = [1]ROM{ undefined } ** options.roms.len; + comptime { + var i = 0; + for (options.roms) |file| { + roms[i] = ROM{ + .name = file, + .data = @embedFile(file) + }; + i += 1; + } + } + + main_scene.chip.set_memory(0x200, roms[3].data); const font_size = 24; const font_ttf_default_numchars = 95; // TTF font generation default charset: 95 glyphs (ASCII 32..126)