mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-06-08 08:33:32 +00:00
probe VRAM
This commit is contained in:
parent
df7cff3693
commit
657303a1f6
|
@ -198,7 +198,12 @@ export interface ProbeIO {
|
|||
logIOWrite(address:number, value:number);
|
||||
}
|
||||
|
||||
export interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO {
|
||||
export interface ProbeVRAM {
|
||||
logVRAMRead(address:number, value:number);
|
||||
logVRAMWrite(address:number, value:number);
|
||||
}
|
||||
|
||||
export interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO, ProbeVRAM {
|
||||
}
|
||||
|
||||
export class NullProbe implements ProbeAll {
|
||||
|
@ -211,6 +216,8 @@ export class NullProbe implements ProbeAll {
|
|||
logWrite() {}
|
||||
logIORead() {}
|
||||
logIOWrite() {}
|
||||
logVRAMRead() {}
|
||||
logVRAMWrite() {}
|
||||
}
|
||||
|
||||
/// CONVENIENCE
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
import { Z80, Z80State } from "../cpu/ZilogZ80";
|
||||
import { BasicScanlineMachine, Bus } from "../devices";
|
||||
import { BasicScanlineMachine, Bus, ProbeAll } from "../devices";
|
||||
import { newAddressDecoder, newKeyboardHandler } from "../emu";
|
||||
import { TssChannelAdapter } from "../audio";
|
||||
import { TMS9918A } from "../video/tms9918a";
|
||||
|
@ -48,6 +48,11 @@ export abstract class BaseZ80VDPBasedMachine extends BasicScanlineMachine {
|
|||
this.vdp = this.newVDP(this.pixels, cru, true);
|
||||
}
|
||||
|
||||
connectProbe(probe: ProbeAll) : void {
|
||||
super.connectProbe(probe);
|
||||
this.vdp.probe = probe || this.nullProbe;
|
||||
}
|
||||
|
||||
newVDP(frameData, cru, flicker) {
|
||||
return new TMS9918A(frameData, cru, flicker);
|
||||
}
|
||||
|
|
|
@ -145,16 +145,22 @@ class JSNESPlatform extends Base6502Platform implements Platform, Probeable {
|
|||
this.probe.logClocks(cycles);
|
||||
return cycles;
|
||||
}
|
||||
var old_endScanline = this.nes.ppu.endScanline.bind(this.nes.ppu);
|
||||
var old_startFrame = this.nes.ppu.startFrame.bind(this.nes.ppu);
|
||||
this.nes.ppu.endScanline = () => {
|
||||
var ppu = this.nes.ppu;
|
||||
var old_endScanline = ppu.endScanline.bind(ppu);
|
||||
var old_startFrame = ppu.startFrame.bind(ppu);
|
||||
var old_writeMem = ppu.writeMem.bind(ppu);
|
||||
ppu.endScanline = () => {
|
||||
old_endScanline();
|
||||
this.probe.logNewScanline();
|
||||
}
|
||||
this.nes.ppu.startFrame = () => {
|
||||
ppu.startFrame = () => {
|
||||
old_startFrame();
|
||||
this.probe.logNewFrame();
|
||||
}
|
||||
ppu.writeMem = (a,v) => {
|
||||
old_writeMem(a,v);
|
||||
this.probe.logVRAMWrite(a,v);
|
||||
}
|
||||
|
||||
this.timer = new AnimationTimer(60, this.nextFrame.bind(this));
|
||||
// set keyboard map
|
||||
|
|
|
@ -186,10 +186,12 @@ export enum ProbeFlags {
|
|||
CLOCKS = 0x00000000,
|
||||
EXECUTE = 0x01000000,
|
||||
MEM_READ = 0x02000000,
|
||||
MEM_WRITE = 0x04000000,
|
||||
IO_READ = 0x08000000,
|
||||
IO_WRITE = 0x10000000,
|
||||
INTERRUPT = 0x20000000,
|
||||
MEM_WRITE = 0x03000000,
|
||||
IO_READ = 0x04000000,
|
||||
IO_WRITE = 0x05000000,
|
||||
VRAM_READ = 0x06000000,
|
||||
VRAM_WRITE = 0x07000000,
|
||||
INTERRUPT = 0x08000000,
|
||||
SCANLINE = 0x7e000000,
|
||||
FRAME = 0x7f000000,
|
||||
}
|
||||
|
@ -277,6 +279,12 @@ export class ProbeRecorder implements ProbeAll {
|
|||
logIOWrite(address:number, value:number) {
|
||||
this.log(address | ProbeFlags.IO_WRITE);
|
||||
}
|
||||
logVRAMRead(address:number, value:number) {
|
||||
this.log(address | ProbeFlags.VRAM_READ);
|
||||
}
|
||||
logVRAMWrite(address:number, value:number) {
|
||||
this.log(address | ProbeFlags.VRAM_WRITE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
'use strict';
|
||||
/*
|
||||
* js99'er - TI-99/4A emulator written in JavaScript
|
||||
*
|
||||
|
@ -11,6 +10,7 @@
|
|||
*/
|
||||
|
||||
import { hex, lpad, RGBA } from "../util";
|
||||
import { ProbeVRAM, NullProbe } from "../devices";
|
||||
|
||||
enum TMS9918A_Mode {
|
||||
GRAPHICS = 0,
|
||||
|
@ -31,6 +31,7 @@ export class TMS9918A {
|
|||
|
||||
cru : { setVDPInterrupt: (b:boolean) => void };
|
||||
enableFlicker : boolean;
|
||||
probe : ProbeVRAM = new NullProbe();
|
||||
|
||||
ram = new Uint8Array(16384); // VDP RAM
|
||||
registers = new Uint8Array(8);
|
||||
|
@ -492,6 +493,7 @@ export class TMS9918A {
|
|||
}
|
||||
|
||||
writeData(i:number) {
|
||||
this.probe.logVRAMWrite(this.addressRegister, i);
|
||||
this.ram[this.addressRegister++] = i;
|
||||
this.prefetchByte = i;
|
||||
this.addressRegister &= this.ramMask;
|
||||
|
@ -512,6 +514,7 @@ export class TMS9918A {
|
|||
readData() : number {
|
||||
var i = this.prefetchByte;
|
||||
this.prefetchByte = this.ram[this.addressRegister++];
|
||||
this.probe.logVRAMRead(this.addressRegister-1, this.prefetchByte);
|
||||
this.addressRegister &= this.ramMask;
|
||||
this.latch = false;
|
||||
return i;
|
||||
|
|
|
@ -1049,8 +1049,10 @@ abstract class ProbeBitmapViewBase extends ProbeViewBase {
|
|||
case ProbeFlags.MEM_WRITE: return 0x010180;
|
||||
case ProbeFlags.IO_READ: return 0x018080;
|
||||
case ProbeFlags.IO_WRITE: return 0xc00180;
|
||||
case ProbeFlags.VRAM_READ: return 0x018080;
|
||||
case ProbeFlags.VRAM_WRITE: return 0xc00180;
|
||||
case ProbeFlags.INTERRUPT: return 0xc0c001;
|
||||
default: return 0;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user