diff --git a/presets/nes/ex0.asm b/presets/nes/ex0.asm
index b5020e42..26a90ce2 100644
--- a/presets/nes/ex0.asm
+++ b/presets/nes/ex0.asm
@@ -13,17 +13,19 @@
;;;;; START OF CODE
Start:
+; wait for PPU warmup; clear CPU RAM
NES_INIT ; set up stack pointer, turn off PPU
jsr WaitSync ; wait for VSYNC
jsr ClearRAM ; clear RAM
jsr WaitSync ; wait for VSYNC (and PPU warmup)
-
+; set palette
lda #$3f ; $3F -> A register
sta PPU_ADDR ; write high byte first
lda #$00 ; $00 -> A register
sta PPU_ADDR ; $3F00 -> PPU address
lda #$1c ; $1C = light blue color
sta PPU_DATA ; $1C -> PPU data
+; activate PPU graphics
lda #CTRL_NMI
sta PPU_CTRL ; enable NMI
lda #MASK_COLOR
diff --git a/presets/nes/ex1.asm b/presets/nes/ex1.asm
index 42574a67..678bd8a0 100644
--- a/presets/nes/ex1.asm
+++ b/presets/nes/ex1.asm
@@ -13,17 +13,21 @@
;;;;; START OF CODE
Start:
+; wait for PPU warmup; clear CPU RAM
NES_INIT ; set up stack pointer, turn off PPU
jsr WaitSync ; wait for VSYNC
jsr ClearRAM ; clear RAM
jsr WaitSync ; wait for VSYNC (and PPU warmup)
+; set palette and nametable VRAM
jsr SetPalette ; set palette colors
- jsr HelloVRAM ; set PPU video RAM
+ jsr HelloVRAM ; print message in name table
+; reset PPU address and scroll registers
lda #0
sta PPU_ADDR
sta PPU_ADDR ; PPU addr = $0000
sta PPU_SCROLL
- sta PPU_SCROLL ; scroll = $0000
+ sta PPU_SCROLL ; PPU scroll = $0000
+; activate PPU graphics
lda #CTRL_NMI
sta PPU_CTRL ; enable NMI
lda #MASK_BG
@@ -88,4 +92,3 @@ Palette:
org $10000
incbin "jroatch.chr"
-
diff --git a/presets/nes/ex2.asm b/presets/nes/ex2.asm
index f44c5806..381d90a4 100644
--- a/presets/nes/ex2.asm
+++ b/presets/nes/ex2.asm
@@ -15,18 +15,21 @@ ScrollPos word ; used during NMI
;;;;; START OF CODE
Start:
+; wait for PPU warmup; clear CPU RAM
NES_INIT ; set up stack pointer, turn off PPU
jsr WaitSync ; wait for VSYNC
jsr ClearRAM ; clear RAM
jsr WaitSync ; wait for VSYNC (and PPU warmup)
-
+; set palette and nametable VRAM
jsr SetPalette ; set palette colors
jsr FillVRAM ; set PPU video RAM
+; reset PPU address and scroll registers
lda #0
sta PPU_ADDR
sta PPU_ADDR ; PPU addr = $0000
sta PPU_SCROLL
sta PPU_SCROLL ; scroll = $0000
+; activate PPU graphics
lda #CTRL_NMI
sta PPU_CTRL ; enable NMI
lda #MASK_BG
@@ -41,7 +44,7 @@ FillVRAM: subroutine
.loop:
tya ; Y -> A
ora #$40 ; A = A OR $40
- sta PPU_DATA ; X -> PPU data port
+ sta PPU_DATA ; A -> PPU data port
inx ; X = X + 1
bne .loop ; repeat until 256 bytes
dey ; Y = Y - 1
diff --git a/presets/nes/ex3.asm b/presets/nes/ex3.asm
index bb83c58f..6f39e107 100644
--- a/presets/nes/ex3.asm
+++ b/presets/nes/ex3.asm
@@ -43,55 +43,53 @@ Start:
; fill video RAM
FillVRAM: subroutine
- PPU_SETADDR $2000
+ PPU_SETADDR $2000
ldy #$10
.loop:
- stx PPU_DATA
- inx
- bne .loop
- dey
- bne .loop
- rts
+ stx PPU_DATA ; X -> PPU data port
+ inx ; X = X + 1
+ bne .loop ; repeat until 256 bytes
+ dey ; Y = Y - 1
+ bne .loop ; repeat until Y is 0
+ rts ; return to caller
-;
+; initialize OAM data
InitSprites: subroutine
- lda #1
- ldx #0
+ lda #1 ; A = 1
+ ldx #0 ; X = 0
.loop
- sta SpriteBuf,x
- jsr NextRandom
- inx
- bne .loop
- rts
+ sta SpriteBuf,x ; store to OAM buffer
+ jsr NextRandom ; get next random number
+ inx ; X = X + 1
+ bne .loop ; loop until X wraps
+ rts ; return to caller
-;
+; move sprite data
MoveSprites: subroutine
- lda #1
- ldx #0
+ lda #1 ; A = 1
+ ldx #0 ; X = 0
.loop
- sta Temp1
- and #3
- clc
- adc SpriteBuf,x
- sta SpriteBuf,x
- lda Temp1
- jsr NextRandom
- inx
- bne .loop
- rts
+ sta Temp1 ; save A
+ and #3 ; keep lower 2 bits
+ clc ; clear carry before add
+ adc SpriteBuf,x ; add to sprite buffer
+ sta SpriteBuf,x ; store in sprite buffer
+ lda Temp1 ; restore A
+ jsr NextRandom ; get next random number
+ inx ; X = X + 1
+ bne .loop ; loop until X wraps
+ rts ; return to caller
; set palette colors
-
SetPalette: subroutine
- PPU_SETADDR $3f00
- ldx #32
+ PPU_SETADDR $3f00
.loop:
- lda Palette,y
- sta PPU_DATA
- iny
- dex
- bne .loop
- rts
+ lda Palette,y ; lookup byte in ROM
+ sta PPU_DATA ; store byte to PPU data
+ iny ; Y = Y + 1
+ cpy #32 ; is Y equal to 32?
+ bne .loop ; not yet, loop
+ rts ; return to caller
;;;;; COMMON SUBROUTINES
diff --git a/src/platform/nes.ts b/src/platform/nes.ts
index aa494da1..c8de1348 100644
--- a/src/platform/nes.ts
+++ b/src/platform/nes.ts
@@ -80,13 +80,13 @@ const _JSNESPlatform = function(mainElement) {
var frameindex = 0;
var ntvideo;
var ntlastbuf;
-
+
class JSNESPlatform extends Base6502Platform implements Platform {
getPresets() { return JSNES_PRESETS; }
start() {
- var self = this;
+ this.debugPCDelta = 1;
var debugbar = $("
").appendTo(mainElement);
audio = new SampleAudio(audioFrequency);
video = new RasterVideo(mainElement,256,224,{overscan:true});
@@ -99,7 +99,7 @@ const _JSNESPlatform = function(mainElement) {
// toggle buttons
$('