Page 00

C64 Zero Page
AddressLenNameDescriptionDefault
00001D65106510 On-Chip I/O DATA Direction Register
Bit 0 Direction of Bit 0 on I/O Port. Default = 1 Output
Bit 1 Direction of Bit 1 on I/O Port. Default = 1 Output
Bit 2 Direction of Bit 2 on I/O Port. Default = 1 Output
Bit 3 Direction of Bit 3 on I/O Port. Default = 1 Output
Bit 4 Direction of Bit 4 on I/O Port. Default = 0 Input
Bit 5 Direction of Bit 5 on I/O Port. Default = 1 Output
Bit 6 Direction of Bit 6 on I/O Port. Not used
Bit 7 Direction of Bit 7 on I/O Port. Not used
0xEF
00011R65106510 On-Chip I/O Port
Bit 0 LORAM. Selects ROM/RAM at 0xA000. 1=Basic, 0=RAM
Bit 1 HIRAM. Selects ROM/RAM at 0xE000, 1=Kernal, 0=RAM
Bit 2 CHAREN. Selects Character ROM or I/O devices. 1=I/O, 0=ROM
Bit 3 Cassette Data Output line
Bit 4 Cassette switch sense. Reads 0=button pressed, 1=not pressed
Bit 5 Cassette Motor Control. 1=Motor on, 0=Motor off
Bit 6 Not used, not connected on 6510
Bit 7 Not used, not connected on 6510
0x37
00021Unused
00032ADRAY1Vector to routine to convert Number from Floating Point to Signed Integer0xB1AA
00052ADRAY2Vector to routine to convert Number from Integer to Floating Point0xB391
0007Used by BASIC and/or Kernal
000A1VERCKFlag: LOAD or VERIFY
00 LOAD
01-FF VERIFY
000BUsed by BASIC and/or Kernal
002B2TXTTABPointer to start of BASIC program text0x0801
002D2VARTABPointer to start of BASIC Variable storage areaEnd of program +1
002F2ARYTABPointer to start of array variable area
00312STRENDEnd of Basic array storage (+1), Start of free ram
00332FRETOPPointer to bottom of string text area
Grows downwards from end of BASIC area
00352FRESPCTemp pointer for strings
00372BASMEMSIZHighest address used by basic
RS232 device can reduce this by 512 bytes for it's buffers
0x9FFF
0039Used by BASIC
0090Used by Kernal
00CC1BLNSWCursor Blink Enable
00 Cursor is on
01-FF Cursor is off
00CDUsed by Kernal
00F72RIBUFRS232 Input Buffer Pointer
00xx for no buffer, allocate on input, any other value buffer exists
00F92ROBUFRS232 Output Buffer Pointer
00xx for no buffer, allocate on output, any other value buffer exists
00FB4FREKZP4 free bytes of Zero Page for User Programs
Guaranteed BASIC will not use these 4 bytes
00FF12BASZPTBASIC temp data area for floating point to ASCII conversion
Runs into start of page 1, free for use if conversions not needed

The C64 uses the 6510 Microprocessor, a variant of the 6502. The main difference is that this Microprocessor contains a built-in 8-bit I/O port, with 6 pins exposed on the 6510. This port is mapped into memory at addresses 0000 & 0001.