From 27cae568fc439284a6e313eb6ef742fd4351e915 Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Sat, 25 Aug 2018 22:00:45 -0400 Subject: [PATCH] "implements Platform" for classes; fixed DASM unresolved w/ mult files --- index.html | 2 -- src/baseplatform.ts | 22 ++++++++++++---------- src/platform/apple2.ts | 7 ++++--- src/platform/coleco.ts | 2 +- src/platform/galaxian.ts | 2 +- src/platform/mw8080bw.ts | 2 +- src/platform/nes.ts | 12 ++++++++++-- src/platform/vcs.ts | 2 +- src/platform/vicdual.ts | 2 +- src/ui.ts | 6 +++--- src/worker/workermain.js | 8 ++++++-- 11 files changed, 40 insertions(+), 27 deletions(-) diff --git a/index.html b/index.html index 8576ee5e..5f6c0587 100644 --- a/index.html +++ b/index.html @@ -148,8 +148,6 @@ if (window.location.host.endsWith('8bitworkshop.com')) { - - diff --git a/src/baseplatform.ts b/src/baseplatform.ts index 0b4c6cbe..597d2f29 100644 --- a/src/baseplatform.ts +++ b/src/baseplatform.ts @@ -40,12 +40,18 @@ export interface Platform { pause() : void; resume() : void; loadROM(title:string, rom:any); // TODO: Uint8Array + + loadState?(state : EmuState) : void; + saveState?() : EmuState; + loadControlsState?(state : EmuControlsState) : void; + saveControlsState?() : EmuControlsState; inspect?(ident:string) : void; disassemble?(addr:number, readfn:(addr:number)=>number) : DisasmLine; readAddress?(addr:number) : number; setFrameRate?(fps:number) : void; getFrameRate?() : number; + setupDebug?(debugfn : (state)=>void) : void; clearDebug?() : void; step?() : void; @@ -54,22 +60,18 @@ export interface Platform { runUntilReturn?() : void; stepBack?() : void; runEval?(evalfunc/* : DebugEvalCondition*/) : void; + getDebugCallback?() : any; // TODO getOpcodeMetadata?(opcode:number, offset:number) : OpcodeMetadata; //TODO - loadState?(state : EmuState) : void; - saveState?() : EmuState; - getDebugCallback?() : any; // TODO getSP?() : number; getOriginPC?() : number; - newCodeAnalyzer() : CodeAnalyzer; + newCodeAnalyzer?() : CodeAnalyzer; - getDebugCategories() : string[]; - getDebugInfo(category:string, state:EmuState) : string; + getDebugCategories?() : string[]; + getDebugInfo?(category:string, state:EmuState) : string; setRecorder?(recorder : EmuRecorder) : void; advance?(novideo? : boolean) : void; - loadControlsState?(state : EmuControlsState) : void; - saveControlsState?() : EmuControlsState; } export interface Preset { @@ -584,7 +586,6 @@ export abstract class Base6809Platform extends BaseZ80Platform { declare var FS, ENV, Module; // mame emscripten -// TODO: make class export abstract class BaseMAMEPlatform { loaded = false; @@ -801,12 +802,13 @@ export abstract class BaseMAMEPlatform { return state; } +/* saveState() { this.luareset(); this.luacall('mamedbg.printstate()'); return this.preserveState(); } - +*/ initlua() { if (!this.initluavars) { this.luacall(this.luadebugscript); diff --git a/src/platform/apple2.ts b/src/platform/apple2.ts index 99a2456f..7b6a03de 100644 --- a/src/platform/apple2.ts +++ b/src/platform/apple2.ts @@ -1,6 +1,6 @@ "use strict"; -import { Platform, Base6502Platform, BaseMAMEPlatform, getOpcodeMetadata_6502 } from "../baseplatform"; +import { Platform, Base6502Platform, BaseMAMEPlatform, getOpcodeMetadata_6502, getToolForFilename_6502 } from "../baseplatform"; import { PLATFORMS, RAM, newAddressDecoder, padBytes, noise, setKeyboardFromMap, AnimationTimer, RasterVideo, Keys, makeKeycodeMap, dumpRAM } from "../emu"; import { hex, lzgmini } from "../util"; import { SampleAudio } from "../audio"; @@ -52,7 +52,7 @@ const _Apple2Platform = function(mainElement) { var bank2rdoffset=0, bank2wroffset=0; var grparams : AppleGRParams; - class Apple2Platform extends Base6502Platform { + class Apple2Platform extends Base6502Platform implements Platform { getPresets() { return APPLE2_PRESETS; @@ -1025,7 +1025,7 @@ const APPLEIIGO_LZG = [ /// MAME support -class Apple2MAMEPlatform extends BaseMAMEPlatform { +class Apple2MAMEPlatform extends BaseMAMEPlatform implements Platform { start () { this.startModule(this.mainElement, { @@ -1045,6 +1045,7 @@ class Apple2MAMEPlatform extends BaseMAMEPlatform { getOpcodeMetadata = getOpcodeMetadata_6502; getDefaultExtension () { return ".c"; }; + getToolForFilename = getToolForFilename_6502; getPresets () { return APPLE2_PRESETS; } diff --git a/src/platform/coleco.ts b/src/platform/coleco.ts index 658ea96c..ba89b58b 100644 --- a/src/platform/coleco.ts +++ b/src/platform/coleco.ts @@ -33,7 +33,7 @@ var ColecoVision_PRESETS = [ /// MAME support -class ColecoVisionMAMEPlatform extends BaseMAMEPlatform { +class ColecoVisionMAMEPlatform extends BaseMAMEPlatform implements Platform { start() { this.startModule(this.mainElement, { diff --git a/src/platform/galaxian.ts b/src/platform/galaxian.ts index c3820ba2..e01af170 100644 --- a/src/platform/galaxian.ts +++ b/src/platform/galaxian.ts @@ -200,7 +200,7 @@ const _GalaxianPlatform = function(mainElement, options) { 0x510000, 0xae0000 // blue ]; - class GalaxianPlatform extends BaseZ80Platform { + class GalaxianPlatform extends BaseZ80Platform implements Platform { getPresets() { return GALAXIAN_PRESETS; diff --git a/src/platform/mw8080bw.ts b/src/platform/mw8080bw.ts index 09f11d0e..f5025584 100644 --- a/src/platform/mw8080bw.ts +++ b/src/platform/mw8080bw.ts @@ -39,7 +39,7 @@ const _Midway8080BWPlatform = function(mainElement) { [Keys.VK_2, 1, 0x2], ]); - class Midway8080BWPlatform extends BaseZ80Platform { + class Midway8080BWPlatform extends BaseZ80Platform implements Platform { getPresets() { return MW8080BW_PRESETS; diff --git a/src/platform/nes.ts b/src/platform/nes.ts index e8e60f74..8ba93532 100644 --- a/src/platform/nes.ts +++ b/src/platform/nes.ts @@ -71,7 +71,7 @@ const _JSNESPlatform = function(mainElement) { var frameindex = 0; var nsamples = 0; - class JSNESPlatform extends Base6502Platform { + class JSNESPlatform extends Base6502Platform implements Platform { debugPCDelta = 1; getPresets() { return JSNES_PRESETS; } @@ -299,7 +299,7 @@ const _JSNESPlatform = function(mainElement) { /// MAME support -class NESMAMEPlatform extends BaseMAMEPlatform { +class NESMAMEPlatform extends BaseMAMEPlatform implements Platform { // = function(mainElement, lzgRom, romSize) { lzgRom; romSize; @@ -319,6 +319,14 @@ class NESMAMEPlatform extends BaseMAMEPlatform { }); } + loadROM(title, data) { + this.loadROMFile(data); + this.loadRegion(":nes_slot:cart:prg_rom", data.slice(0x10, 0x8010)); + if (data.length > 0x8010) + this.loadRegion(":nes_slot:cart:chr_rom", data.slice(0x8010, 0xa010)); + } + + getPresets() { return JSNES_PRESETS; } getOpcodeMetadata = getOpcodeMetadata_6502; getToolForFilename = getToolForFilename_6502; getDefaultExtension() { return ".c"; }; diff --git a/src/platform/vcs.ts b/src/platform/vcs.ts index 2f24b3a4..548c2d8c 100644 --- a/src/platform/vcs.ts +++ b/src/platform/vcs.ts @@ -240,7 +240,7 @@ function nonegstr(n) { /////////////// -class VCSMAMEPlatform extends BaseMAMEPlatform { +class VCSMAMEPlatform extends BaseMAMEPlatform implements Platform { // MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK_NTSC, 228, 26, 26 + 160 + 16, 262, 24 , 24 + 192 + 31 ) diff --git a/src/platform/vicdual.ts b/src/platform/vicdual.ts index 6eba640a..4c28359d 100644 --- a/src/platform/vicdual.ts +++ b/src/platform/vicdual.ts @@ -97,7 +97,7 @@ const _VicDualPlatform = function(mainElement) { [Keys.VK_5, 3, 0x8], ]); - class VicDualPlatform extends BaseZ80Platform { + class VicDualPlatform extends BaseZ80Platform implements Platform { getPresets() { return VICDUAL_PRESETS; diff --git a/src/ui.ts b/src/ui.ts index 89eede9c..fb5f87f4 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -74,9 +74,9 @@ function inspectVariable(ed, name) { // TODO: ed? function getCurrentPresetTitle() : string { if (!current_preset_entry) - return "ROM"; + return main_file_id || "ROM"; else - return current_preset_entry.title || current_preset_entry.name || "ROM"; + return current_preset_entry.title || current_preset_entry.name || main_file_id || "ROM"; } function setLastPreset(id:string) { @@ -325,7 +325,7 @@ function _shareEmbedLink(e) { new ClipboardJS(".btn"); }); loadScript('lib/liblzg.js', () => { - // TODO: Module is bad var name + // TODO: Module is bad var name (conflicts with MAME) var lzgrom = compressLZG( window['Module'], current_output ); window['Module'] = null; // so we load it again next time var lzgb64 = btoa(byteArrayToString(lzgrom)); diff --git a/src/worker/workermain.js b/src/worker/workermain.js index f8f1bd9f..02a275b7 100644 --- a/src/worker/workermain.js +++ b/src/worker/workermain.js @@ -544,12 +544,13 @@ function parseDASMListing(code, unresolved, mainFilename) { }); } } - // TODO: check filename too // TODO: better symbol test (word boundaries) + // TODO: ignore IFCONST and IFNCONST usage for (var key in unresolved) { var pos = restline ? restline.indexOf(key) : line.indexOf(key); if (pos >= 0) { errors.push({ + path:filename, line:linenum, msg:"Unresolved symbol '" + key + "'" }); @@ -577,7 +578,10 @@ function assembleDASM(step) { function match_fn(s) { var matches = re_usl.exec(s); if (matches) { - unresolved[matches[1]] = 0; + var key = matches[1]; + if (key != 'NO_ILLEGAL_OPCODES') { // TODO + unresolved[matches[1]] = 0; + } } else if (s.startsWith("Warning:")) { errors.push({line:1, msg:s.substr(9)}); }