The Commodore 64 Programmer’s Reference Guide contains a memory map with a complete description of the zeropage and system variables used by KERNAL and BASIC, but now that we have the original source, we know there are three typos in this table.
C3P0
The first one is the symbol at address $94. Here is the full page from the Programmer’s Reference Guide:
If you look closely, the symbol at $94 is C3PO
, with a capital Oh.
But it should end in a zero. Here is the original source:
This is a printout of the original assembly log from 1983:
On the kind of printer Commodore was using, there is no way to tell a 0
from an O
. Here is the whole page for context:
The Commodore Serial Bus library uses C3P0
to buffer a byte that is supposed to be sent to the bus – similar to the zero page location R2D2
located at address $A3. Here is some code that uses the two:
So yes, the two symbol names are references to the Star Wars characters C-3PO and R2-D2. It is unknown why the former is spelled with a zero in the source, but the typo in the Programmer’s Reference Guide is very forgivable.
Disappointingly, the R2D2
symbol is not mentioned in the Programmer’s Reference Guide – $A3 is just part of a “Temp Data Area”:
BUFPT
The next typo is the symbol at address $A6, the tape buffer pointer:
The Reference Guide calls it BUFPNT
, but it is in fact called BUFPT
.
LSXP
And the final typo is the symbol at $C9:
The correct spelling is LSXP
:
In fact, in the source, the two bytes have individual labels, LSXP
and LSTP
. LSXP
is the cursor line, and LSTP
the cursor column in the context of inputting text, shadowing the zero page addresses TBLX
(line) and PNTR
(column). The following table summarizes this:
Generic | Input | |
---|---|---|
Column | PNTR |
LSTP |
Line | TBLX |
LSXP |
It is confusing that the symbols for the Y coordinates each contain an X
. It is unclear what these symbol names are supposed to mean in the first place – if you have any idea, please share them in the comments!
There is also CDBLN vs GDBLN ($CE).
My bad, this seems to be a typo in Lee Davison’s disassembly.
Last Position and Last X Position? Maybe the line number was kept in the X register in some significant place?