diff --git a/package.json b/package.json index e06994d..4e9853c 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.4", "@babel/preset-typescript": "^7.24.7", + "assemblyscript": "^0.27.29", "babel-loader": "^9.1.3", "http-server": "^14.1.1", "ts-loader": "^9.5.1", @@ -23,5 +24,11 @@ "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.0.4" + }, + "exports": { + ".": { + "import": "./build/release.js", + "types": "./build/release.d.ts" + } } -} +} \ No newline at end of file diff --git a/src/audio.ts b/src/audio.ts index 2cb68f4..4c80033 100644 --- a/src/audio.ts +++ b/src/audio.ts @@ -12,7 +12,7 @@ class Chip8Audio { this.volume = 0.1; } - startAudio(audioContext: AudioContext, volume: number) { + startAudio(audioContext: AudioContext, volume: number): void{ this.volume = volume; this.audioBrowserContext = audioContext; this.gainNode = this.audioBrowserContext.createGain(); @@ -20,7 +20,7 @@ class Chip8Audio { this.gainNode.gain.setValueAtTime(this.volume, this.audioBrowserContext.currentTime); } - startBeep() { + startBeep(): void { if(this.oscillator == null && this.audioBrowserContext && this.gainNode) { this.oscillator = this.audioBrowserContext.createOscillator(); this.oscillator.type = 'square'; @@ -30,7 +30,7 @@ class Chip8Audio { } } - stopBeep() { + stopBeep(): void { if(this.oscillator) { this.oscillator.stop(); this.oscillator = null; diff --git a/src/chip8Emulator.ts b/src/chip8Emulator.ts index 2ea1c96..2a2db19 100644 --- a/src/chip8Emulator.ts +++ b/src/chip8Emulator.ts @@ -6,7 +6,7 @@ import Chip8Audio from './audio' class Chip8Emulator { cpu: CPU; keyboard: Keyboard; - rom: Uint8Array; + rom: Uint8Array | null; audio: Chip8Audio; romLoaded: boolean; @@ -17,21 +17,21 @@ class Chip8Emulator { this.cpu = new CPU(this.keyboard, this.audio); - this.rom = new Uint8Array(); + this.rom = null; this.romLoaded = false; } - loadRom(rom: Uint8Array) { + loadRom(rom: Uint8Array): void { this.rom = rom; this.cpu.loadRom(this.rom); this.romLoaded = true; } - isRomLoaded() { + isRomLoaded(): boolean { return this.romLoaded; } - emulateCycle() { + emulateCycle():void { this.cpu.cycle(); } @@ -39,7 +39,7 @@ class Chip8Emulator { return this.cpu.getCPUStatus(); } - drawToCanvas(canvas: HTMLCanvasElement, size: number) { + drawToCanvas(canvas: HTMLCanvasElement, size: number): void { let ctx = canvas.getContext('2d') as CanvasRenderingContext2D; let width = 64*size; let height = 32*size; @@ -61,19 +61,19 @@ class Chip8Emulator { } } - setUserKey(userKey: number, key: number) { + setUserKey(userKey: number, key: number): void { this.keyboard.setUserKey(userKey, key); } - startAudio(audioContext: AudioContext, volume: number) { + startAudio(audioContext: AudioContext, volume: number): void { this.audio.startAudio(audioContext, volume); } - keyDownEvent(key: number) { + keyDownEvent(key: number): void { this.keyboard.userKeyPressedDown(key); } - keyUpEvent(key: number) { + keyUpEvent(key: number): void { this.keyboard.userKeyPressedUp(key); } } diff --git a/src/cpu.ts b/src/cpu.ts index 9141d1f..cd505cd 100644 --- a/src/cpu.ts +++ b/src/cpu.ts @@ -54,7 +54,7 @@ class CPU { this.setupFont(); } - clearRegisters() { + clearRegisters(): void { this.regs.fill(0); this.pc = 0x200; // Start of the program on normal programs this.indexReg = 0; @@ -65,16 +65,16 @@ class CPU { this.rng = new RNG(0); } - clearMemory() { + clearMemory(): void { this.memory.fill(0); } - clearDisplay() { + clearDisplay(): void { this.displayMemory.fill(0); } - private setupFont() { + private setupFont(): void { // Using address from 050 - 09F let addressFont = 0x050; @@ -101,9 +101,8 @@ class CPU { this.memory.set(characters, addressFont); } - public loadRom(rom: Uint8Array) { + public loadRom(rom: Uint8Array): void { // Loads a ROM into starting PC address - console.log(rom); for(let i = 0; i < rom.length; i++) { this.memory[this.pc+i] = rom[i]; } @@ -130,11 +129,11 @@ class CPU { return status; } - private incrementPC() { + private incrementPC(): void { this.pc += 2; } - public cycle() { + public cycle(): void { // Fetch opcode let firstOpcode: number = this.memory[this.pc]; let secondOpcode: number = this.memory[this.pc + 1]; diff --git a/src/keyboard.ts b/src/keyboard.ts index fe13ae6..0313403 100644 --- a/src/keyboard.ts +++ b/src/keyboard.ts @@ -18,22 +18,22 @@ class Keyboard { this.userKeyboardMap = new Map(); } - private setKey(key: number, pressed: boolean) { + private setKey(key: number, pressed: boolean): void { this.keys[key] = pressed ? 1 : 0; } - public setUserKey(userKey: number, key: number) { + public setUserKey(userKey: number, key: number): void { this.userKeyboardMap.set(userKey, key); } - public userKeyPressedDown(userKey: number) { - let keyVal: number = this.userKeyboardMap.get(userKey) ?? -1; - if(keyVal != -1) this.setKey(keyVal, true); + public userKeyPressedDown(userKey: number): void { + let keyVal: number | undefined = this.userKeyboardMap.get(userKey); + if(keyVal) this.setKey(keyVal, true); } - public userKeyPressedUp(userKey: number) { - let keyVal: number = this.userKeyboardMap.get(userKey) ?? -1; - if(keyVal != -1) this.setKey(keyVal, false); + public userKeyPressedUp(userKey: number): void { + let keyVal: number | undefined = this.userKeyboardMap.get(userKey); + if(keyVal) this.setKey(keyVal, false); } }