diff --git a/src/baseplatform.ts b/src/baseplatform.ts index 4de640f7..d62e7fa5 100644 --- a/src/baseplatform.ts +++ b/src/baseplatform.ts @@ -89,6 +89,7 @@ export interface Platform { disassemble?(addr:number, readfn:(addr:number)=>number) : DisasmLine; readAddress?(addr:number) : number; readVRAMAddress?(addr:number) : number; + setFrameRate?(fps:number) : void; getFrameRate?() : number; @@ -108,7 +109,6 @@ export interface Platform { getOriginPC?() : number; newCodeAnalyzer?() : CodeAnalyzer; - setRecorder?(recorder : EmuRecorder) : void; advance?(novideo? : boolean) : void; showHelp?(tool:string, ident?:string) : void; @@ -218,6 +218,7 @@ export abstract class BaseDebugPlatform extends BasePlatform { debugTargetClock : number = 0; debugClock : number = 0; breakpoints : BreakpointList = new BreakpointList(); + frameCount : number = 0; abstract getCPUState() : CpuState; abstract readAddress(addr:number) : number; @@ -246,6 +247,7 @@ export abstract class BaseDebugPlatform extends BasePlatform { this.debugClock = 0; this.onBreakpointHit = null; this.clearBreakpoint('debug'); + this.frameCount = 0; } setDebugCondition(debugCond : DebugCondition) { this.setBreakpoint('debug', debugCond); @@ -275,6 +277,7 @@ export abstract class BaseDebugPlatform extends BasePlatform { this.debugClock = 0; } } + this.frameCount++; } pollControls() { } @@ -355,6 +358,12 @@ export abstract class BaseDebugPlatform extends BasePlatform { } }); } + runToVsync() { + var frame0 = this.frameCount; + this.runEval( () : boolean => { + return this.frameCount > frame0; + }); + } } ////// 6502 diff --git a/src/recorder.ts b/src/recorder.ts index 5f5feb81..6d505540 100644 --- a/src/recorder.ts +++ b/src/recorder.ts @@ -288,3 +288,5 @@ export class ProbeRecorder implements ProbeAll { } +// TODO: handle runToVsync() without erasing entire frame +