From ce859537944a9478d8f82927a6b443d2b8c5f0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Sun, 19 Jun 2022 16:09:10 +0100 Subject: [PATCH] feat: initial working WASM for web --- examples/web/chip_ahoyto.d.ts | 7 +++ examples/web/chip_ahoyto.js | 35 +++++++++++++-- examples/web/chip_ahoyto_bg.wasm | Bin 179355 -> 189592 bytes examples/web/chip_ahoyto_bg.wasm.d.ts | 3 ++ examples/web/index.html | 1 + examples/web/index.js | 61 ++++++++++++++++++++++++-- src/chip8_neo.rs | 4 ++ 7 files changed, 103 insertions(+), 8 deletions(-) diff --git a/examples/web/chip_ahoyto.d.ts b/examples/web/chip_ahoyto.d.ts index 629da9d..f8874e8 100644 --- a/examples/web/chip_ahoyto.d.ts +++ b/examples/web/chip_ahoyto.d.ts @@ -26,6 +26,10 @@ export class Chip8Neo { */ reset_hard_ws(): void; /** +* @returns {Uint8Array} +*/ + vram_ws(): Uint8Array; +/** */ clock_ws(): void; } @@ -41,8 +45,11 @@ export interface InitOutput { readonly chip8neo_load_rom_ws: (a: number, b: number, c: number) => void; readonly chip8neo_reset_ws: (a: number) => void; readonly chip8neo_reset_hard_ws: (a: number) => void; + readonly chip8neo_vram_ws: (a: number, b: number) => void; readonly chip8neo_clock_ws: (a: number) => void; readonly __wbindgen_malloc: (a: number) => number; + readonly __wbindgen_add_to_stack_pointer: (a: number) => number; + readonly __wbindgen_free: (a: number, b: number) => void; readonly __wbindgen_exn_store: (a: number) => void; } diff --git a/examples/web/chip_ahoyto.js b/examples/web/chip_ahoyto.js index ef9c5a4..a1dfc09 100644 --- a/examples/web/chip_ahoyto.js +++ b/examples/web/chip_ahoyto.js @@ -67,6 +67,18 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } +let cachedInt32Memory0; +function getInt32Memory0() { + if (cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} + +function getArrayU8FromWasm0(ptr, len) { + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); +} + function logError(f, args) { try { return f.apply(this, args); @@ -90,10 +102,6 @@ function handleError(f, args) { wasm.__wbindgen_exn_store(addHeapObject(e)); } } - -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} /** */ export class Chip8Classic { @@ -176,6 +184,24 @@ export class Chip8Neo { wasm.chip8neo_reset_hard_ws(this.ptr); } /** + * @returns {Uint8Array} + */ + vram_ws() { + try { + if (this.ptr == 0) throw new Error('Attempt to use a moved value'); + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertNum(this.ptr); + wasm.chip8neo_vram_ws(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var v0 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v0; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** */ clock_ws() { if (this.ptr == 0) throw new Error('Attempt to use a moved value'); @@ -341,6 +367,7 @@ function initMemory(imports, maybe_memory) { function finalizeInit(instance, module) { wasm = instance.exports; init.__wbindgen_wasm_module = module; + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); diff --git a/examples/web/chip_ahoyto_bg.wasm b/examples/web/chip_ahoyto_bg.wasm index 43dfb96327c653b8664d889c35069827ad856c3a..21dabefd9e3d00745f8db9023d32a4039529a271 100644 GIT binary patch delta 41761 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 delta 35345 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%0Au0!pz|Q;1 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 aXw#%)yO6bOw5SWtQim3$R7hbLtNTAcqApzk diff --git a/examples/web/chip_ahoyto_bg.wasm.d.ts b/examples/web/chip_ahoyto_bg.wasm.d.ts index 9d1e41a..9677a6d 100644 --- a/examples/web/chip_ahoyto_bg.wasm.d.ts +++ b/examples/web/chip_ahoyto_bg.wasm.d.ts @@ -8,6 +8,9 @@ export function chip8neo_new(): number; export function chip8neo_load_rom_ws(a: number, b: number, c: number): void; export function chip8neo_reset_ws(a: number): void; export function chip8neo_reset_hard_ws(a: number): void; +export function chip8neo_vram_ws(a: number, b: number): void; export function chip8neo_clock_ws(a: number): void; export function __wbindgen_malloc(a: number): number; +export function __wbindgen_add_to_stack_pointer(a: number): number; +export function __wbindgen_free(a: number, b: number): void; export function __wbindgen_exn_store(a: number): void; diff --git a/examples/web/index.html b/examples/web/index.html index b50d7ca..ca1964d 100644 --- a/examples/web/index.html +++ b/examples/web/index.html @@ -4,6 +4,7 @@ <title>CHIP-Ahoyto</title> </head> <body> + <canvas id="chip-canvas" width="960" height="480"></canvas> <script type="module" src="./index.js"></script> </body> </html> diff --git a/examples/web/index.js b/examples/web/index.js index 5dab7bf..a164b80 100644 --- a/examples/web/index.js +++ b/examples/web/index.js @@ -1,4 +1,19 @@ -import { default as wasm, Chip8Neo } from "./chip_ahoyto.js"; +import { + default as wasm, + Chip8Neo +} from "./chip_ahoyto.js"; + +const PIXEL_SET_COLOR = 0x50cb93ff; +const PIXEL_UNSET_COLOR = 0x1b1a17ff; + +const state = { + canvas: null, + canvasScaled: null, + canvasCtx: null, + canvasScaledCtx: null, + image: null, + videoBuff: null +}; (async () => { // initializes the WASM module, this is required @@ -7,8 +22,10 @@ import { default as wasm, Chip8Neo } from "./chip_ahoyto.js"; const ROM = "roms/ibm_logo.ch8"; - console.info("LOADED"); + console.info("System Loaded!"); + // loads the ROM data and converts it into the + // target u8 array bufffer const response = await fetch(ROM); const blob = await response.blob(); const arrayBuffer = await blob.arrayBuffer(); @@ -19,7 +36,43 @@ import { default as wasm, Chip8Neo } from "./chip_ahoyto.js"; chip8.reset_hard_ws(); chip8.load_rom_ws(data); - console.info(`Loaded ${ROM}`); + console.info(`ROM Loaded ${ROM}`); - chip8.clock_ws(); + initCanvas(); + + while (true) { + chip8.clock_ws(); + updateCanvas(chip8.vram_ws()); + + // hack + await new Promise((resolve, reject) => { + setTimeout(resolve, 100); + }) + } })(); + +const initCanvas = () => { + // initializes the off-screen canvas that is going to be + // used in the drawing proces + state.canvas = document.createElement("canvas"); + state.canvas.width = 64; + state.canvas.height = 32; + state.canvasCtx = state.canvas.getContext("2d"); + + state.canvasScaled = document.getElementById("chip-canvas"); + state.canvasScaledCtx = state.canvasScaled.getContext("2d"); + + state.canvasScaledCtx.scale(state.canvasScaled.width / state.canvas.width, state.canvasScaled.height / state.canvas.height); + state.canvasScaledCtx.imageSmoothingEnabled = false; + + state.image = state.canvasCtx.createImageData(state.canvas.width, state.canvas.height); + state.videoBuff = new DataView(state.image.data.buffer); +} + +const updateCanvas = (pixels) => { + for (let i = 0; i < pixels.length; i++) { + state.videoBuff.setUint32(i * 4, pixels[i] ? PIXEL_SET_COLOR : PIXEL_UNSET_COLOR); + } + state.canvasCtx.putImageData(state.image, 0, 0); + state.canvasScaledCtx.drawImage(state.canvas, 0, 0); +} diff --git a/src/chip8_neo.rs b/src/chip8_neo.rs index 730a15a..0b01cfa 100644 --- a/src/chip8_neo.rs +++ b/src/chip8_neo.rs @@ -378,6 +378,10 @@ impl Chip8Neo { self.reset_hard() } + pub fn vram_ws(&self) -> Vec<u8> { + self.vram() + } + pub fn clock_ws(&mut self) { self.clock() } -- GitLab