diff --git a/presets/nes/nesdefs.asm b/presets/nes/nesdefs.asm index 1cd0e785..554d5a86 100644 --- a/presets/nes/nesdefs.asm +++ b/presets/nes/nesdefs.asm @@ -109,11 +109,11 @@ NES_MIRR_QUAD = 8 ;;;;; NES_VECTORS - CPU vectors at end of address space MAC NES_VECTORS - seg Vectors - org $fffa - .word NMIHandler ;$fffa vblank nmi - .word Start ;$fffc reset - .word NMIHandler ;$fffe irq / brk (not used) + seg Vectors ; segment "Vectors" + org $fffa ; start at address $fffa + .word NMIHandler ; $fffa vblank nmi + .word Start ; $fffc reset + .word NMIHandler ; $fffe irq / brk ENDM ;;;;; PPU_SETADDR
- set 16-bit PPU address diff --git a/presets/nes/nesppu.asm b/presets/nes/nesppu.asm index 4ca893d6..a570dc77 100644 --- a/presets/nes/nesppu.asm +++ b/presets/nes/nesppu.asm @@ -2,22 +2,22 @@ ;;;;; SUBROUTINES ClearRAM: subroutine - lda #0 - tax + lda #0 ; A = 0 + tax ; X = 0 .clearRAM - sta $0,x - cpx #$fe ; don't clear last 2 bytes of stack - bcs .skipStack - sta $100,x + sta $0,x ; clear $0-$ff + cpx #$fe ; last 2 bytes of stack? + bcs .skipStack ; don't clear it + sta $100,x ; clear $100-$1fd .skipStack - ; skip $200-$2FF, used for OAM display list - sta $300,x - sta $400,x - sta $500,x - sta $600,x - sta $700,x - inx - bne .clearRAM + sta $200,x ; clear $200-$2ff + sta $300,x ; clear $300-$3ff + sta $400,x ; clear $400-$4ff + sta $500,x ; clear $500-$5ff + sta $600,x ; clear $600-$6ff + sta $700,x ; clear $700-$7ff + inx ; X = X + 1 + bne .clearRAM ; loop 256 times rts ; wait for VSYNC to start diff --git a/presets/nes/vrambuf.h b/presets/nes/vrambuf.h index c8ea28aa..e1bce93b 100644 --- a/presets/nes/vrambuf.h +++ b/presets/nes/vrambuf.h @@ -8,17 +8,11 @@ #define VBUFSIZE 128 // update buffer starts at $100 (stack page) -#define updbuf ((byte* const)0x100) +#define updbuf ((byte*)0x100) // index to end of buffer extern byte updptr; -// macro to add a multibyte header -#define VRAMBUF_PUT(addr,len,flags)\ - VRAMBUF_ADD(((addr) >> 8) | (flags));\ - VRAMBUF_ADD(addr);\ - VRAMBUF_ADD(len); - // macro to set a single byte in buffer #define VRAMBUF_SET(b)\ __A__ = (b);\ @@ -30,6 +24,9 @@ extern byte updptr; VRAMBUF_SET(b)\ asm("inc %v", updptr); +//#define VRAMBUF_SET(b) updbuf[updptr] = (b); +//#define VRAMBUF_ADD(b) VRAMBUF_SET(b); ++updptr + // add EOF marker to buffer (but don't increment pointer) void cendbuf(void); diff --git a/src/baseplatform.ts b/src/baseplatform.ts index fd7fa210..8a949f4e 100644 --- a/src/baseplatform.ts +++ b/src/baseplatform.ts @@ -73,6 +73,7 @@ export interface Platform { inspect?(ident:string) : string; disassemble?(addr:number, readfn:(addr:number)=>number) : DisasmLine; readAddress?(addr:number) : number; + readVRAMAddress?(addr:number) : number; setFrameRate?(fps:number) : void; getFrameRate?() : number; diff --git a/src/platform/nes.ts b/src/platform/nes.ts index 89185d60..5a7a82f9 100644 --- a/src/platform/nes.ts +++ b/src/platform/nes.ts @@ -233,6 +233,9 @@ const _JSNESPlatform = function(mainElement) { getRasterScanline() : number { return nes.ppu.scanline; } + readVRAMAddress(addr : number) : number { + return nes.ppu.vramMem[addr & 0x7fff]; + } getCPUState() { var c = nes.cpu.toJSON(); diff --git a/src/ui.ts b/src/ui.ts index dc87f852..57a3c2a8 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -210,6 +210,11 @@ function refreshWindowList() { return new Views.MemoryView(); }); } + if (platform.readVRAMAddress) { + addWindowItem("#memvram", "VRAM Browser", function() { + return new Views.VRAMMemoryView(); + }); + } if (current_project.segments) { addWindowItem("#memmap", "Memory Map", function() { return new Views.MemoryMapView(); diff --git a/src/views.ts b/src/views.ts index 2b82e4cd..fb5b977a 100644 --- a/src/views.ts +++ b/src/views.ts @@ -659,7 +659,7 @@ export class MemoryView implements ProjectView { for (var i=0; i