diff --git a/javatari.js b/javatari.js index 67d15ccb..8f5767e4 160000 --- a/javatari.js +++ b/javatari.js @@ -1 +1 @@ -Subproject commit 67d15ccb4940c0049fcd6444a72316148056e5b3 +Subproject commit 8f5767e4ca9a759d759e9a09677d649d58f6aff7 diff --git a/src/baseplatform.ts b/src/baseplatform.ts index ebf361b7..d3fdbf21 100644 --- a/src/baseplatform.ts +++ b/src/baseplatform.ts @@ -21,7 +21,7 @@ export interface CpuState { }; export interface EmuState { c:CpuState, // CPU state - b?:number[] // RAM + b?:number[] // RAM (TODO: not for vcs) }; export interface EmuControlsState { } diff --git a/src/platform/vcs.ts b/src/platform/vcs.ts index 59dc2aee..6e40cb57 100644 --- a/src/platform/vcs.ts +++ b/src/platform/vcs.ts @@ -49,7 +49,6 @@ Javatari.AUDIO_BUFFER_SIZE = 256; class VCSPlatform { - current_output; recorder : EmuRecorder; paused : boolean = true; @@ -70,7 +69,6 @@ class VCSPlatform { loadROM(title, data) { Javatari.loadROM(title, data); - this.current_output = data; // TODO: use bus } getOpcodeMetadata(opcode, offset) { @@ -155,9 +153,11 @@ class VCSPlatform { loadControlsState(state) { Javatari.room.console.loadControlsState(state); } - // TODO: load/save controls state readAddress(addr) { - return this.current_output[addr & 0xfff]; // TODO: use bus to read + return Javatari.room.console.readAddress(addr); + } + writeAddress(addr,value) { + Javatari.room.console.writeAddress(addr,value); } runUntilReturn() { var depth = 1; diff --git a/src/platform/vector.ts b/src/platform/vector.ts index ded29326..1a13e79f 100644 --- a/src/platform/vector.ts +++ b/src/platform/vector.ts @@ -106,8 +106,12 @@ var AtariVectorPlatform = function(mainElement) { dvg = new DVGBWStateMachine(bus, video, 0x4000); audio = newPOKEYAudio(); video.create(); - timer = new AnimationTimer(60, function() { - video.clear(); + timer = new AnimationTimer(60, this.nextFrame.bind(this)); + setKeyboardFromMap(video, switches, ASTEROIDS_KEYCODE_MAP); + } + + this.advance = function(novideo) { + if (!novideo) video.clear(); var debugCond = self.getDebugCallback(); clock = 0; for (var i=0; i { } }); assert.equal(platform.saveState().p.SA, 0xff ^ 0x40); + assert.equal(60, platform.readAddress(0x80)); // player x pos }); it('Should run nes', () => { var platform = testPlatform('nes', 'shoot2.c.rom', 70, (platform, frameno) => { if (frameno == 60) { - keycallback(Keys.VK_Z.c, Keys.VK_Z.c, 1); + keycallback(Keys.VK_LEFT.c, Keys.VK_LEFT.c, 1); } }); - assert.equal(65, platform.saveControlsState().c1[0]); + assert.equal(120-10, platform.readAddress(0x41d)); // player x pos }); + it('Should run vicdual', () => { + var platform = testPlatform('vicdual', 'snake1.c.rom', 70, (platform, frameno) => { + if (frameno == 60) { + keycallback(Keys.VK_DOWN.c, Keys.VK_DOWN.c, 1); + } + }); + }); + + it('Should run mw8080bw', () => { + var platform = testPlatform('mw8080bw', 'game2.c.rom', 70, (platform, frameno) => { + if (frameno == 60) { + keycallback(Keys.VK_LEFT.c, Keys.VK_LEFT.c, 1); + } + }); + assert.equal(96-9*2, platform.readAddress(0x2006)); // player x pos + }); + + it('Should run galaxian', () => { + var platform = testPlatform('galaxian-scramble', 'shoot2.c.rom', 70, (platform, frameno) => { + if (frameno == 60) { + keycallback(Keys.VK_LEFT.c, Keys.VK_LEFT.c, 1); + } + }); + assert.equal(112-10, platform.readAddress(0x4074)); // player x pos + }); + + it('Should run vector', () => { + var platform = testPlatform('vector-z80color', 'game.c.rom', 70, (platform, frameno) => { + if (frameno == 60) { + keycallback(Keys.VK_UP.c, Keys.VK_UP.c, 1); + } + }); + }); + + it('Should run williams', () => { + var platform = testPlatform('williams-z80', 'game1.c.rom', 70, (platform, frameno) => { + if (frameno == 60) { + keycallback(Keys.VK_LEFT.c, Keys.VK_LEFT.c, 1); + } + }); + }); +/* + it('Should run sound_williams', () => { + var platform = testPlatform('sound_williams-z80', 'swave.c.rom', 70, (platform, frameno) => { + if (frameno == 60) { + keycallback(Keys.VK_2.c, Keys.VK_2.c, 1); + } + }); + }); +*/ }); + diff --git a/test/roms/galaxian-scramble/shoot2.c.rom b/test/roms/galaxian-scramble/shoot2.c.rom new file mode 100644 index 00000000..dbb47839 Binary files /dev/null and b/test/roms/galaxian-scramble/shoot2.c.rom differ diff --git a/test/roms/mw8080bw/game2.c.rom b/test/roms/mw8080bw/game2.c.rom new file mode 100644 index 00000000..15e86618 Binary files /dev/null and b/test/roms/mw8080bw/game2.c.rom differ diff --git a/test/roms/sound_williams-z80/swave.c.rom b/test/roms/sound_williams-z80/swave.c.rom new file mode 100644 index 00000000..a86a4fc7 Binary files /dev/null and b/test/roms/sound_williams-z80/swave.c.rom differ diff --git a/test/roms/vector-z80color/game.c.rom b/test/roms/vector-z80color/game.c.rom new file mode 100644 index 00000000..14fcf524 Binary files /dev/null and b/test/roms/vector-z80color/game.c.rom differ diff --git a/test/roms/vicdual/snake1.c.rom b/test/roms/vicdual/snake1.c.rom new file mode 100644 index 00000000..f1963ba2 Binary files /dev/null and b/test/roms/vicdual/snake1.c.rom differ diff --git a/test/roms/williams-z80/game1.c.rom b/test/roms/williams-z80/game1.c.rom new file mode 100644 index 00000000..31fc5281 Binary files /dev/null and b/test/roms/williams-z80/game1.c.rom differ