From ac6c1e206407c615619a46532a86636593f51e23 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Sat, 2 Sep 2023 17:47:59 +0300 Subject: [PATCH] ditch WASM support for now --- README.md | 2 ++ build.zig | 38 +++++++++++++++++++++++--------------- src/main.zig | 13 +++++++++---- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 5cd0a92..d3b363d 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,5 @@ Techinal reference: http://devernay.free.fr/hacks/chip8/C8TECH10.HTM ROM archive: https://johnearnest.github.io/chip8Archive/ Awesome chip8: https://chip-8.github.io/ + +// TODO: WASM support diff --git a/build.zig b/build.zig index 4bf5ac1..50fadb9 100644 --- a/build.zig +++ b/build.zig @@ -6,22 +6,30 @@ pub fn build(b: *std.Build) !void { const optimize = b.standardOptimizeOption(.{}); var raylib = rl.getModule(b, "raylib-zig"); var raylib_math = rl.math.getModule(b, "raylib-zig"); + + // TODO: Figure out how to build project for WASM. Tried to do it but standard memory allocators + // didn't work. + //web exports are completely separate - if (target.getOsTag() == .emscripten) { - const exe_lib = rl.compileForEmscripten(b, "chip8-zig", "src/main.zig", target, optimize); - exe_lib.addModule("raylib", raylib); - exe_lib.addModule("raylib-math", raylib_math); - const raylib_artifact = rl.getArtifact(b, target, optimize); - // Note that raylib itself is not actually added to the exe_lib output file, so it also needs to be linked with emscripten. - exe_lib.linkLibrary(raylib_artifact); - const link_step = try rl.linkWithEmscripten(b, &[_]*std.Build.Step.Compile{ exe_lib, raylib_artifact }); - b.getInstallStep().dependOn(&link_step.step); - const run_step = try rl.emscriptenRunStep(b); - run_step.step.dependOn(&link_step.step); - const run_option = b.step("run", "Run chip8-zig"); - run_option.dependOn(&run_step.step); - return; - } + // if (target.getOsTag() == .emscripten) { + // const exe_lib = rl.compileForEmscripten(b, "chip8-zig", "src/main.zig", target, optimize); + // exe_lib.addModule("raylib", raylib); + // exe_lib.addModule("raylib-math", raylib_math); + // + // const raylib_artifact = rl.getArtifact(b, target, optimize); + // // Note that raylib itself is not actually added to the exe_lib output file, so it also needs to be linked with emscripten. + // exe_lib.linkLibrary(raylib_artifact); + // + // const link_step = try rl.linkWithEmscripten(b, &[_]*std.Build.Step.Compile{ exe_lib, raylib_artifact }); + // b.getInstallStep().dependOn(&link_step.step); + // + // const run_step = try rl.emscriptenRunStep(b); + // run_step.step.dependOn(&link_step.step); + // + // const run_option = b.step("run", "Run chip8-zig"); + // run_option.dependOn(&run_step.step); + // return; + // } const exe = b.addExecutable(.{ .name = "chip8-zig", .root_source_file = .{ .path = "src/main.zig" }, .optimize = optimize, .target = target }); diff --git a/src/main.zig b/src/main.zig index e62d524..29dfa10 100755 --- a/src/main.zig +++ b/src/main.zig @@ -19,9 +19,13 @@ pub fn gen_sin_wave(wave: *rl.Wave, frequency: f32) void { } } +fn megabytes(amount: usize) usize { + return amount * 1024 * 1024; +} + pub fn main() anyerror!void { - var buffer: [8192]u8 = undefined; - var fba = std.heap.FixedBufferAllocator.init(&buffer); + var program_memory = try std.heap.page_allocator.alloc(u8, megabytes(1)); + var fba = std.heap.FixedBufferAllocator.init(program_memory); const allocator = fba.allocator(); var chip = try ChipContext.init(&allocator); @@ -48,13 +52,14 @@ pub fn main() anyerror!void { rl.setTargetFPS(60); const sample_rate = 44100; - var data = [1]i16{0} ** sample_rate; + var data = try allocator.alloc(i16, sample_rate); + defer allocator.free(data); var chip_wave = rl.Wave{ .frameCount = sample_rate, .sampleRate = sample_rate, .sampleSize = 16, .channels = 1, - .data = @ptrCast(&data), + .data = @ptrCast(data.ptr), }; gen_sin_wave(&chip_wave, 440); var chip_sound = rl.loadSoundFromWave(chip_wave);