debugging common code
authorAlyssa Rosenzweig <alyssa@backtick.town>
Thu, 7 Jul 2016 01:11:36 +0000 (18:11 -0700)
committerAlyssa Rosenzweig <alyssa@backtick.town>
Thu, 7 Jul 2016 01:11:36 +0000 (18:11 -0700)
src/CPU/debug.tosh [new file with mode: 0644]

diff --git a/src/CPU/debug.tosh b/src/CPU/debug.tosh
new file mode 100644 (file)
index 0000000..b90dec7
--- /dev/null
@@ -0,0 +1,155 @@
+define ; [comment]
+
+define-atomic format prg
+format prg 128
+
+define-atomic format prg 128
+delete all of oPRG
+set tmp to 1
+repeat 16384
+    add (join "0x" (item tmp of PRG-ROM)) to oPRG
+    change tmp by 1
+end
+set tmp to 1
+repeat 16384
+    add (join "0x" (item tmp of PRG-ROM)) to oPRG
+    change tmp by 1
+end
+
+define-atomic format prg 256
+delete all of oPRG
+set tmp to 1
+repeat 32768
+    add (join "0x" (item tmp of PRG-ROM)) to oPRG
+    change tmp by 1
+end
+
+define-atomic mapper read (addr)
+if addr > 32767 then
+    set M to item (addr - 32767) of oPRG
+else
+    if addr < 8192 then
+        set M to item (addr mod 2048 + 1) of RAM
+    else
+        if addr > 8192 and addr < 8200 then
+            read PPU register (addr - 8192)
+        else
+            if addr = 16406 then
+                read controller 1
+            end
+        end
+    end
+end
+
+define-atomic mapper write (addr) (value)
+if addr < 8192 then
+    replace item addr mod 2048 + 1 of RAM with value
+else
+    if addr > 8191 and addr < 8200 then
+        write PPU register (addr - 8192) value:  (value)
+    else
+        if addr = 16406 then
+            controller strobe (value)
+        else
+            if addr = 16404 then
+                OAM DMA (value)
+            else
+                if addr > 32768 then
+                    say "Writing to ROM isn't very nice, you know..."
+                end
+            end
+        end
+    end
+end
+
+define-atomic PLP
+set M to item M+1 of hex
+set flagN to <item ((join join "0x" (letter 1 of M) "8") + 1) of AND = 8>
+set flagV to <item ((join join "0x" (letter 1 of M) "4") + 1) of AND = 4>
+set flagB to <item ((join join "0x" (letter 1 of M) "1") + 1) of AND = 1>
+set flagD to <item ((join join "0x" (letter 2 of M) "8") + 1) of AND = 8>
+set flagI to <item ((join join "0x" (letter 2 of M) "4") + 1) of AND = 4>
+set flagZ to <item ((join join "0x" (letter 2 of M) "2") + 1) of AND = 2>
+set flagC to <item ((join join "0x" (letter 2 of M) "1") + 1) of AND = 1>
+
+define-atomic interrupt: vector [vector]
+mapper write (256 + S) ((PC - PC mod 256) / 256)
+set S to (S - 1) mod 256
+mapper write (256 + S) (PC mod 256)
+set S to (S - 1) mod 256
+set SR to 128 * flagN + 64 * flagV + 0 + 16 * flagB + 8 * flagD + 4 * flagI + 2 * flagZ + 1 * flagC
+mapper write (256 + S) (SR)
+set S to (S - 1) mod 256
+set flagI to 1
+mapper read (vector)
+set tmp to M
+mapper read (vector + 1)
+set PC to M * 256 + tmp
+
+when flag clicked
+set A to 0
+set X to 0
+set Y to 0
+set M to "0x24"
+PLP
+show variable A
+show variable X
+show variable Y
+show variable PC
+show variable SR
+show variable S
+set line to 1
+show variable line
+set S to "0xFD"
+mapper read 65532
+set PC to M
+mapper read 65533
+change PC by M * 256
+set PC to "0xC000"
+delete all of RAM
+repeat 2048
+    add "0" to RAM
+end
+initialize PPU
+
+when p key pressed
+step CPU
+set SR to item 128 * flagN + 64 * flagV + 32 + 16 * flagB + 8 * flagD + 4 * flagI + 2 * flagZ + 1 * flagC + 1 of hex
+change line by 1
+
+when f key pressed
+emulate frame
+emulate frame
+emulate frame
+emulate frame
+set line to 0
+show variable PC
+show variable opcode
+reset timer
+forever
+    emulate frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    skip frame
+    change line by 12
+    set opcode to line / timer
+end
+
+define-atomic step CPU
+if PC > 32767 then
+    set M to item (PC - 32767) of oPRG
+else
+    if PC < 8192 then
+        set M to item (PC mod 2048 + 1) of RAM
+    end
+end
This page took 0.044833 seconds and 4 git commands to generate.