C64 Memory Map

00006510 On-chip Data Direction Register
00016510 On-chip 8-bit Input/Output Register
0002Unused
0003-0004Jump Vector: Convert FAC to Integer in (A/Y) ($B1AA)
0005-0006Jump Vector: Convert Integer in (A/Y) to Floating point in (FAC); ($B391)
0007Search Character/Temporary Integer during INT
0008Flag: Scan for Quote at end of String
0007-0008Temporary Integer during OR/AND
0009Screen Column for last TAB
000AFlag: 0 = Load, 1 = Verify
000BInput Buffer Pointer/Number of Subscripts
000CFlag: Default Array dimension
000DData type Flag: $00 = Numeric, $FF = String
000EData type Flag: $00 = Floating point, $80 = Integer
000FFlag: DATA scan/List Quote/Garbage collection
0010Flag: Subscript reference/User Function call
0011Input Flag: $00 = INPUT, $40 = GET, $98 = READ
0012Flag: TAN sign/Comparative result
0013File number of current Input Device
0014-0015Temporary: Integer value
0016Pointer: Temporary String Stack
0017-0018Last temporary String Address
0019-0021Stack for temporary Strings
0022-0025Utility Pointer Area
0022-0023First Utility Pointer
0024-0025Secong Utility Pointer
0026-002AFloating point product of Multiply and Divide
002B-002CPointer: Start of BASIC Text Area ($0801)
002D-002EPointer: Start of BASIC Variables
002F-0030Pointer: Start of BASIC Arrays
0031-0032Pointer: End of BASIC Arrays + 1
0033-0034Pointer: Bottom of String space
0035-0036Utility String Pointer
0037-0038Pointer: Highest Address available to BASIC ($A000)
0039-003ACurrent BASIC Line number
003B-003CPrevious BASIC Line number
003D-003EPointer: BASIC Statement for CONT
003F-0040Current DATA Line number
0041-0042Pointer: Used by READ - current DATA Item Address
0043-0044Pointer: Temporary storage of Pointer during INPUT Routine
0045-0046Name of Variable being sought in Variable Table
0047-0048Pointer: to value of (VARNAM) if Integer, to descriptor if String
0049-004APointer: Index Variable for FOR/NEXT loop
004B-004CTemporary storage for TXTPTR during READ, INPUT and GET
004DMask used during FRMEVL
004E-0052Temporary storage for FLPT value
0053Length of String Variable during Garbege collection
0054-0056Jump Vector used in Function Evaluation
0057-005BTemporary storage for FLPT value
005C-0060Temporary storage for FLPT value
0061-0066Main Floating point Accumulator
0061FAC Exponent
0062-0065FAC Mantissa
0066FAC Sign
0067Pointer: Series Evaluation Constant
0068Bit Overflow Area during normalisation Routine
0069-006EAuxiliary Floating point Accumulator
0069AFAC Exponent
006A-006DAFAC Mantissa
006EAFAC Sign
006FSign of result of Arithmetic Evaluation
0070FAC low-order rounding
0071-0072Pointer: Used during CRUNCH/ASCII conversion
0073-008ASubroutine: Get next Byte of BASIC Text
0079Entry to Get same Byte again
007A-007BPointer: Current Byte of BASIC Text
008B-008FFloating RND Function Seed Value
0090Kernal I/O Status Word ST
0091Flag: $7F = STOP key
0092Timing Constant for Tape
0093Flag: 0 = Load, 1 = Verify
0094Flag: Serial Bus - Output Character buffered
0095Buffered Character for Serial Bus
0096Cassette Sync. number
0097Temporary storage of X Register during CHRIN
0097Temporary storage of Y Register during RS232 fetch
0098Number of Open Files/Index to File Table
0099Default Input Device (0)
009ADefault Output Device (3)
009BParity of Byte Output to Tape
009CFlag: Byte received from Tape
009DFlag: $00 = Program mode: Suppress Error Messages, $40 = Kernal Error Messages only, $80 = Direct mode: Full Error Messages
009EIndex to Cassette File name/Header ID for Tape write
009ETape Error log pass 1
009FTape Error log pass 2
00A0-00A2Real-time jiffy Clock (Updated by IRQ Interrupt approx. every 1/60 of Second); Update Routine: UDTIMK ($F69B)
00A3Bit Counter Tape Read or Write/Serial Bus EOI (End Of Input) Flag
00A4Pulse Counter Tape Read or Write/Serial Bus shift Counter
00A5Tape Synchronising count down
00A6Pointer: Tape I/O buffer
00A7RS232 temporary for received Bit/Tape temporary
00A8RS232 Input Bit count/Tape temporary
00A9RS232 Flag: Start Bit check/Tape temporary
00AARS232 Input Byte Buffer/Tape temporary
00ABRS232 Input parity/Tape temporary
00AC-00ADPointer: Tape Buffer/Screen scrolling
00AE-00AFTape End Address/End of Program
00B0-00B1Tape timing Constants
00B2-00B3Pointer: Start Address of Tape Buffer ($033C)
00B4RS232 Write bit count/Tape Read timing Flag
00B5RS232 Next Bit to send/Tape Read - End of Tape
00B6RS232 Output Byte Buffer/Tape Read Error Flag
00B7Number of Characters in Filename
00B8Current File - Logical File number
00B9Current File - Secondary Address
00BACurrent File - First Address (Device number)
00BB-00BCPointer: Current File name Address
00BDRS232 Output Parity/Tape Byte to be Input or Output
00BETape Input/Output Block count
00BFSerial Word Buffer
00C0Tape Motor Switch
00C1-00C2Start Address for LOAD and Cassette Write
00C3-00C4Pointer: Type 3 Tape LOAD and general use
00C5Matrix value of last Key pressed; No Key = $40
00C6Number of Characters in Keyboard Buffer queue
00C7Flag: Reverse On/Off; On = $01, Off = $00
00C8Pointer: End of Line for Input (Used to suppress trailing spaces)
00C9-00CACursor X/Y (Line/Column) position at start of Input
00CBFlag: Print shifted Characters
00CCFlag: Cursor blink; $00 = Enabled, $01 = Disabled
00CDTimer: Count down for Cursor blink toggle
00CECharacter under Cursor while Cursor Inverted
00CFFlag: Cursor Status; $00 = Off, $01 = On
00D0Flag: Input from Screen = $03, or Keyboard = $00
00D1-00D2Pointer: Current Screen Line Address
00D3Cursor Column on current Line, including Wrap-round Line, if any
00D4Flag: Editor in Quote Mode; $00 = Not
00D5Current logical Line length: 39 or 79
00D6Current Screen Line number of Cursor
00D7Screen value of current Input Character/Last Character Output
00D8Count of number of inserts outstanding
00D9-00F2Screen Line link Table/Editor temporaries. High Byte of Line Screen Memory Location
00F3-00F4Pointer: Current Colour RAM Location
00F5-00F6Vector: Current Keyboard decoding Table. ($EB81)
00F7-00F8RS232 Input Buffer Pointer
00F9-00FARS232 Output Buffer Pointer
00FB-00FEFree Zero Page space for User Programs
00FFBASIC temporary Data Area
00FF-010AAssembly Area for Floating point to ASCII conversion
0100-013ETape Input Error log
0100-01FF6510 Hardware Stack Area
013F-01FFBASIC Stack Area
0200-0258BASIC Input Buffer (Input Line from Screen)
0259-0262Kernal Table: Active logical File numbers
0263-026CKernal Table: Active File First Addresses (Device numbers)
026D-0276Kernal Table: Active File Secondary Addresses
0277-0280Keyboard Buffer Queue (FIFO)
0281-0282Pointer: Bottom of Memory for Operating System ($0800)
0283-0284Pointer: Top of Memory for Operating System ($A000)
0285Serial IEEE Bus timeout defeat Flag
0286Current Character Colour code
0287Background Colour under Cursor
0288High Byte of Screen Memory Address ($04)
0289Maximum number of Bytes in Keyboard Buffer ($0A)
028AFlag: Repeat keys; $00 = Cursors, INST/DEL & Space repeat, $40 no Keys repeat, $80 all Keys repeat ($00)
028BRepeat Key: Speed Counter ($04)
028CRepeat Key: First repeat delay Counter ($10)
028DFlag: Shift Keys: Bit 1 = Shift, Bit 2 = CBM, Bit 3 = CTRL; ($00 = None, $01 = Shift, etc.)
028ELast Shift Key used for debouncing
028F-0290Vector: Routine to determine Keyboard table to use based on Shift Key Pattern ($EB48)
0291Flag: Upper/Lower Case change: $00 = Disabled, $80 = Enabled ($00)
0292Flag: Auto scroll down: $00 = Disabled ($00)
0293RS232 Pseudo 6551 control Register Image
0294RS232 Pseudo 6551 command Register Image
0295-0296RS232 Non-standard Bits/Second
0297RS232 Pseudo 6551 Status Register Image
0298RS232 Number of Bits left to send
0299-029ARS232 Baud Rate; Full Bit time microseconds
029BRS232 Index to End of Input Buffer
029CRS232 Pointer: High Byte of Address of Input Buffer
029DRS232 Pointer: High Byte of Address of Output Buffer
029ERS232 Index to End of Output Buffer
029F-02A0Temporary store for IRQ Vector during Tape operations
02A1RS232 Enables
02A2TOD sense during Tape I/O
02A3Temporary storage during Tape READ
02A4Temporary D1IRQ Indicator during Tape READ
02A5Temporary for Line Index
02A6Flag: TV Standard: $00 = NTSC, $01 = PAL
02A7-02FFUnused
02C0-02FESprite #11 Data Area. (SCREEN + $03F8 + SPR number)
0300-0301Vector: Indirect entry to BASIC Error Message, (X) points to Message ($E38B)
0302-0303Vector: Indirect entry to BASIC Input Line and Decode ($A483)
0304-0305Vector: Indirect entry to BASIC Tokenise Routine ($A57C)
0306-0307Vector: Indirect entry to BASIC LIST Routine ($A71A)
0308-0309Vector: Indirect entry to BASIC Character dispatch Routine ($A7E4)
030A-030BVector: Indirect entry to BASIC Token evaluation ($AE86)
030CStorage for 6510 Accumulator during SYS
030DStorage for 6510 X-Register during SYS
030EStorage for 6510 Y-Register during SYS
030FStorage for 6510 Status Register during SYS
0310USR Function JMP Instruction ($4C)
0311-0312USR Address ($LB,$MB)
0313Unused
0314-0315Vector: Hardware IRQ Interrupt Address ($EA31)
0316-0317Vector: BRK Instruction Interrupt Address ($FE66)
0318-0319Vector: Hardware NMI Interrupt Address ($FE47)
031A-031BVector: Indirect entry to Kernal OPEN Routine ($F34A)
031C-031DVector: Indirect entry to Kernal CLOSE Routine ($F291)
031E-031FVector: Indirect entry to Kernal CHKIN Routine ($F20E)
0320-0321Vector: Indirect entry to Kernal CHKOUT Routine ($F250)
0322-0323Vector: Indirect entry to Kernal CLRCHN Routine ($F333)
0324-0325Vector: Indirect entry to Kernal CHRIN Routine ($F157)
0326-0327Vector: Indirect entry to Kernal CHROUT Routine ($F1CA)
0328-0329Vector: Indirect entry to Kernal STOP Routine ($F6ED)
032A-032BVector: Indirect entry to Kernal GETIN Routine ($F13E)
032C-032DVector: Indirect entry to Kernal CLALL Routine ($F32F)
032E-032FUser Defined Vector ($FE66)
0330-0331Vector: Indirect entry to Kernal LOAD Routine ($F4A5)
0332-0333Vector: Indirect entry to Kernal SAVE Routine ($F5ED)
0334-033BUnused
033C-03FBTape I/O Buffer
0340-037ESprite #13
0380-03BESprite #14
03C0-03FESprite #15
03FC-03FFUnused
0400-07E7Default Screen Video Matrix
07E8-07F7Unused
07F8-07FFDefault Sprite Data Pointers
 
0800-9FFFNormal BASIC Program space
8000-9FFFOptional Cartridge ROM space
A000-BFFFBASIC ROM (Part) or 8 KB RAM
C000-CFFF4 KB RAM
D000-DFFFInput/Output Devices and Colour RAM or 4 KB RAM or Character ROM
D000-D02E6566 Video Interface Chip, VIC II
D400-D41C6581 Sound Interface Device, SID
D500-D7FFSID Images
D800-DBE7Colour RAM (Nybbles = 4 Bit RAM, LSB)
DBE8-DBFF Unused
DC00-DC0F6526 Complex Interface Adaptor, CIA
DD00-DD0F6526 Complex Interface Adaptor, CIA
E000-FFFFBASIC (Part)/Kernal ROM or 8 KB RAM
E000-E4FFBASIC ROM (Part) or RAM
E500-FFFF  Kernal ROM or RAM