1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-06-08 08:33:32 +00:00

probe VRAM

This commit is contained in:
Steven Hugg 2019-08-26 23:17:07 -04:00
parent df7cff3693
commit 657303a1f6
6 changed files with 43 additions and 12 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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;
}
}
}