
.C:2101 A9 3A LDA #$3A .C:2103 CD 12 D0 CMP $D012 .C:2106 D0 FB BNE $2103 .C:2108 A2 09 LDX #$09 .C:210a CA DEX .C:210b D0 FD BNE $210A .C:210d A2 00 LDX #$00 .C:210f BD 00 09 LDA $0900,X .C:2112 8D 21 D0 STA $D021 .C:2115 8D 20 D0 STA $D020 .C:2118 BC 00 0A LDY $0A00,X .C:211b 88 DEY .C:211c 10 FD BPL $211B .C:211e E8 INX .C:211f E0 65 CPX #$65 .C:2121 D0 EC BNE $210F .C:2123 A2 01 LDX #$01 .C:2125 CA DEX .C:2126 D0 FD BNE $2125 .C:2128 A9 00 LDA #$00 .C:212a 8D 20 D0 STA $D020 .C:212d AD 21 D0 LDA $D021
So, who knows what’s happening above? Come on, it’ll come back to you if you look at the screenshot! I found a great tutorial on C64 demo coding. Unfortunately it’s a 404 now, but Google cached it and I downloaded it here for safe keeping: intro-to-programming-c64-demos.html
Look for the part on $d012
$d012 might be the most important address of them all, when it comes to demo programming on the C-64. $d012 has two different functions:
* When read, it returns the number of the current raster line.
* When written, it is used to set the number of the line where the next raster interrupt will occur.We’ll get back to raster interrupts later. You need to know about $d012 to understand them, so pay attention to the stuff in this section! The first item above is interesting, but it may not be obvious why it is interesting.
The current raster line is the line that is currently being redrawn on your screen. The whole screen is redrawn 50 times per second. Each time it is redrawn from top to bottom, from the left to the right. So, if you want something to happen 50 times per second, all you have to do is to check the current value of $d012, and when it reaches a certain value, call the routine that performs the desired task. When finished, go back to checking $d012.
That blew me away when I found out about that. You could literally change the background colour of the screen halfway down the screen, have multiple text and graphics modes, use more than the default 8 hardware sprites. The PC was disappointing in comparison.
That code above is for Justin who reminded me that Vice has an ASM monitor!