The meaning of numbers

I spent 3 or 4 years coding in assembler on the C64. I’ve been a retro fan of the machine for far longer now but haven’t really immersed myself in it like I did in the early to mid nineties.

Despite the time that has passed since then, and all that had happened, some things are still stuck in my brain and one of those things is the common hex locations used for various functions.

BASIC programmes were stored at $0801 so when you typed the following it was stored there in memory.

10 PRINT "HELLO WORLD"
20 GOTO 10

If you were programming in assembler you could create a BASIC programme to execute it like this, and it would run the assembler at $080d, the hex equivalent of 2061, and the next byte of memory after this BSSIC instruction.

10 SYS 2061

This all popped into my head when I saw my posting streak for my photo blog today.

Yay, 2061 days posting photos on inphotos.org.

Other numbers that live in my brain without thinking are $1000 and 4096 (where many sid tunes lived), or even $c000 and 49152. I have so many disks with chunks of code at $c000.

So, this is what those numbers mean to me. A nostalgic trip down memory lane.

Do you have a similar association with numbers from long ago?

Introduction to C64 demo coding

ozone
.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!