Fix OAM DMA
[ScratchNES.git] / src / PPU / PPU.tosh
index 39a9a4b..52ccd82 100644 (file)
@@ -36,27 +36,38 @@ end
 ; "TODO: evaluate sprites in secondary OAM"
 ; "TODO: buggy sprite overflow flag"
 
-define-atomic fast phosphorus paint
+define-atomic emulate 3 PPU cycles
+change mX by 3
+set pen color to ((<not item mX of evaluation line = -1> * 16000000 + <not item (mX + 1) of evaluation line = -1> * 16000000 + <not item (mX + 2) of evaluation line = -1> * 16000000) * 0.33)
+change x by 3
+
+define-atomic emulate frame
 go to x: -128 y: 128
-set Y to -1
+set mY to -1
 pen down
 repeat 224
-       change Y by 1
-       evaluate sprites scanline:  (Y)
+       change mY by 1
+       evaluate sprites scanline:  (mY)
        set x to -128
-       set X to 1
-       repeat 80
-               change X by 3
-               set pen color to ((<not item X of evaluation line = -1> * 16000000 + <not item (X + 1) of evaluation line = -1> * 16000000 + <not item (X + 2) of evaluation line = -1> * 16000000) * 0.33)
-               change x by 3
-       end
-       set PPU vblank? to 1
-       if PPU generate NMI = 1 then
-               interrupt: vector "0xFFFA"
+       set mX to 1
+       repeat until mX > 255
+                step CPU
+                repeat cycles
+                    emulate 3 PPU cycles
+                end
+                set cycles to 0
        end
-       change y by -1
+               change y by -1
 end
 pen up
+set PPU vblank? to 1
+if PPU generate NMI = 1 then
+        interrupt: vector "0xFFFA"
+end
+repeat until cycles > 2380
+    step CPU
+end
+set cycles to 0
 
 define initialize PPU
 pen up
@@ -143,9 +154,9 @@ else
 end
 
 define OAM DMA (pagebase)
-set temp to 1
+set temp to 0
 repeat 256
-       mapper read (pagebase + temp)
+       mapper read ( (256*pagebase) + PPU OAMADDR + temp)
        replace item temp of OAM with M
        change temp by 1
 end
This page took 0.025005 seconds and 4 git commands to generate.