********* Welcome to Project 64! The goal of Project 64 is to preserve Commodore 64 related documents in electronic text format that might otherwise cease to exist with the rapid advancement of computer technology and declining interest in 8- bit computers on the part of the general population. If you would like to help by converting C64 related hardcopy documents to electronic texts please contact the manager of Project 64, Cris Berneburg, at <74171.2136@compuserve.com>. Extensive efforts were made to preserve the contents of the original document. However, certain portions, such as diagrams, program listings, and indexes may have been either altered or sacrificed due to the limitations of plain vanilla text. Diagrams may have been eliminated where ASCII-art was not feasible. Program listings may be missing display codes where substitutions were not possible. Tables of contents and indexes may have been changed from page number references to section number references. Please accept our apologies for these limitations, alterations, and possible omissions. Document names are limited to the 8.3 file convention of DOS. The first characters of the file name are an abbreviation of the original document name. The version number of the etext follows next. After that a letter may appear to indicate the particular source of the document. Finally, the document is given a .TXT extension. The author(s) of the original document and members of Project 64 make no representations about the accuracy or suitability of this material for any purpose. This etext is provided "as-is". Please refer to the warantee of the original document, if any, that may included in this etext. No other warantees, express or implied, are made to you as to the etext or any medium it may be on. Neither the author(s) nor the members of Project 64 will assume liability for damages either from the direct or indirect use of this etext or from the distribution of or modification to this etext. ********* The Project 64 etext of several Commodore 64 memory maps. Converted to etext by anonymous. The original etexts were transferred from ftp://arnold.hiof.no/programs and concatenated into one document. Commodore_64_IO_Maps.doc Commodore_64_Memory_Maps.txt Commodore_64_RAM_Memory_Map.doc Commodore_64_ROM_Memory_Map.doc Commodore_64_ROM_Memory_Map.txt 64MAP10.TXT, June 1996, etext #41. ********* The Project 64 etext of Commodore_64_IO_Maps.doc ********* ; Commodore 64 I/O Map ; V1.1 1 Jun 1994 COMMODORE 64 INPUT/OUTPUT ASSIGNMENTS HEX DECIMAL BITS DESCRIPTION 0000 0 7-0 MOS 6510 Data Direction Register (xx101111) Bit= 1: Output, Bit=0: Input, x=Don't Care 0001 1 MOS 6510 Micro-Processor On-Chip I/O Port 0 /LORAM Signal (0=Switch BASIC ROM Out) 1 /HIRAM Signal (0=Switch Kernal ROM Out) 2 /CHAREN Signal (0=Swith Char. ROM In) 3 Cassette Data Output Line 4 Cassette Switch Sense: 1 = Switch Closed 5 Cassette Motor Control O = ON, 1 = OFF 6-7 Undefined D000-D02E 53248-54271 MOS 6566 VIDEO INTERFACE CONTROLLER (VIC) D000 53248 Sprite 0 X Pos D001 53249 Sprite 0 Y Pos D002 53250 Sprite 1 X Pos D003 53251 Sprite 1 Y Pos D004 53252 Sprite 2 X Pos D005 53253 Sprite 2 Y Pos D006 53254 Sprite 3 X Pos D007 53255 Sprite 3 Y Pos D008 53256 Sprite 4 X Pos D009 53257 Sprite 4 Y Pos D00A 53258 Sprite 5 X Pos D00B 53259 Sprite 5 Y Pos D00C 53260 Sprite 6 X Pos D00D 53261 Sprite 6 Y Pos D00E 53262 Sprite 7 X Pos D00F 53263 Sprite 7 Y Pos D010 53264 Sprites 0-7 X Pos (msb of X coord.) D011 53265 VIC Control Register 7 Raster Compare: (Bit 8) See 53266 6 Extended Color Text Mode 1 = Enable 5 Bit Map Mode. 1 = Enable 4 Blank Screen to Border Color: 0 = Blank 3 Select 24/25 Row Text Display: 1 = 25 Rows 2-0 Smooth Scroll to Y Dot-Position (0-7) D012 53266 Read Raster / Write Raster Value for Compare IRQ D013 53267 Light-Pen Latch X Pos D014 53268 Light-Pen Latch Y Pos D015 53269 Sprite display Enable: 1 = Enable D016 53270 VIC Control Register 7-6 Unused 5 ALWAYS SET THIS BIT TO 0 ! 4 Multi-Color Mode: 1 = Enable (Text or Bit-Map) 3 Select 38/40 Column Text Display: 1 = 40 Cols 2-0 Smooth Scroll to X Pos D017 53271 Sprites 0-7 Expand 2x Vertical (Y) D018 53272 VIC Memory Control Register 7-4 Video Matrix Base Address (inside VIC) 3-1 Character Dot-Data Base Address (inside VIC) 0 Select upper/lower Character Set D019 53273 VIC Interrupt Flag Register (Bit = 1: IRQ Occurred) 7 Set on Any Enabled VIC IRQ Condition 3 Light-Pen Triggered IRQ Flag 2 Sprite to Sprite Collision IRQ Flag 1 Sprite to Background Collision IRQ Flag 0 Raster Compare IRQ Flag D01A 53274 IRQ Mask Register: 1 = Interrupt Enabled D01B 53275 Sprite to Background Display Priority: 1 = Sprite D01C 53276 Sprites 0-7 Multi-Color Mode Select: 1 = M.C.M. D01D 53277 Sprites 0-7 Expand 2x Horizontal (X) D01E 53278 Sprite to Sprite Collision Detect D01F 53279 Sprite to Background Collision Detect D020 53280 Border Color D021 53281 Background Color 0 D022 53282 Background Color 1 D023 53283 Background Color 2 D024 53284 Background Color 3 D025 53285 Sprite Multi-Color Register 0 D026 53286 Sprite Multi-Color Register 1 D027 53287 Sprite 0 Color D028 53288 Sprite 1 Color D029 53289 Sprite 2 Color D02A 53290 Sprite 3 Color D02B 53291 Sprite 4 Color D02C 53292 Sprite 5 Color D02D 53293 Sprite 6 Color D02E 53294 Sprite 7 Color D400-D7FF 54272-55295 MOS 6581 SOUND INTERFACE DEVICE (SID) D400 54272 Voice 1: Frequency Control - Low-Byte D401 54273 Voice 1: Frequency Control - High-Byte D402 54274 Voice 1: Pulse Waveform Width - Low-Byte D403 54275 7-4 Unused 3-0 Voice 1: Pulse Waveform Width - High-Nybble D404 54276 Voice 1: Control Register 7 Select Random Noise Waveform, 1 = On 6 Select Pulse Waveform, 1 = On 5 Select Sawtooth Waveform, 1 = On 4 Select Triangle Waveform, 1 = On 3 Test Bit: 1 = Disable Oscillator 1 2 Ring Modulate Osc. 1 with Osc. 3 Output, 1 = On 1 Synchronize Osc. 1 with Osc. 3 Frequency, 1 = On 0 Gate Bit: 1 = Start Att/Dec/Sus, 0 = Start Release D405 54277 Envelope Generator 1: Attack / Decay Cycle Control 7-4 Select Attack Cycle Duration: 0-15 3-0 Select Decay Cycle Duration: 0-15 D406 54278 Envelope Generator 1: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: 0-15 3-0 Select Release Cycle Duration: 0-15 D407 54279 Voice 2: Frequency Control - Low-Byte D408 54280 Voice 2: Frequency Control - High-Byte D409 54281 Voice 2: Pulse Waveform Width - Low-Byte D40A 54282 7-4 Unused 3-0 Voice 2: Pulse Waveform Width - High-Nybble D40B 54283 Voice 2: Control Register 7 Select Random Noise Waveform, 1 = On 6 Select Pulse Waveform, 1 = On 5 Select Sawtooth Waveform, 1 = On 4 Select Triangle Waveform, 1 = On 3 Test Bit: 1 = Disable Oscillator 1 2 Ring Modulate Osc. 2 with Osc. 1 Output, 1 = On 1 Synchronize Osc. 2 with Osc. 1 Frequency, 1 = On 0 Gate Bit: 1 = Start Att/Dec/Sus, 0 = Start Release D40C 54284 Envelope Generator 2: Attack / Decay Cycle Control 7-4 Select Attack Cycle Duration: O-15 3-0 Select Decay Cycle Duration: 0-15 D40D 54285 Envelope Generator 2: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: O-15 3-0 Select Release Cycle Duration: O-15 D40E 54286 Voice 3: Frequency Control - Low-Byte D40F 54287 Voice 3: Frequency Control - High-Byte D410 54288 Voice 3: Pulse Waveform Width - Low-Byte D411 54289 7-4 Unused 3-0 Voice 3: Pulse Waveform Width - High-Nybble D412 54290 Voice 3: Control Register 7 Select Random Noise Waveform, 1 = On 6 Select Pulse Waveform, 1 = On 5 Select Sawtooth Waveform, 1 = On 4 Select Triangle Waveform, 1 = On 3 Test Bit: 1 = Disable Oscillator 1 2 Ring Modulate Osc. 3 with Osc. 2 Output, 1 = On 1 Synchronize Osc. 3 with Osc. 2 Frequency, 1 = On 0 Gate Bit: 1 = Start Att/Dec/Sus, 0 = Start Release D413 54291 Envelope Generator 3: Attac/Decay Cycle Control 7-4 Select Attack Cycle Duration: 0-15 3-0 Select Decay Cycle Duration: 0-15 D414 54285 Envelope Generator 3: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: 0-15 3-0 Select Release Cycle Duration: 0-15 D415 54293 Filter Cutoff Frequency: Low-Nybble (Bits 2-0) D416 54294 Filter Cutoff Frequency: High-Byte D417 54295 Filter Resonance Control / Voice Input Control 7-4 Select Filter Resonance: 0-15 3 Filter External Input: 1 = Yes, 0 = No 2 Filter Voice 3 Output: 1 = Yes, 0 = No Filter Voice 2 Output: 1 = Yes, 0 = No 0 Filter Voice 1 Output: 1 = Yes, 0 = No D418 54296 Select Filter Mode and Volume 7 Cut-Off Voice 3 Output: 1 = Off, 0 = On 6 Select Filter High-Pass Mode: 1 = On 5 Select Filter Band-Pass Mode: 1 = On 4 Select Filter Low-Pass Mode: 1 = On 3-0 Select Output Volume: 0-15 D419 54297 Analog/Digital Converter: Game Paddle 1 (0-255) D41A 54298 Analog/Digital Converter Game Paddle 2 (0-255) D41B 54299 Oscillator 3 Random Number Generator D41C 54230 Envelope Generator 3 Output D500-D7FF 54528-55295 SID IMAGES D800-DBFF 55296-56319 Color RAM (Nybbles) DC00-DCFF 56320-56575 MOS 6526 Complex Interface Adapter (CIA) #1 DC00 56320 Data Port A (Keyboard, Joystick, Paddles, Light-Pen) 7-0 Write Keyboard Column Values for Keyboard Scan 7-6 Read Paddles on Port A / B (01 = Port A, 10 = Port B) 4 Joystick A Fire Button: 1 = Fire 3-2 Paddle Fire Buttons 3-0 Joystick A Direction (0-15) DC01 56321 Data Port B (Keyboard, Joystick, Paddles): Game Port 1 7-0 Read Keyboard Row Values for Keyboard Scan 7 Timer B Toggle/Pulse Output 6 Timer A: Toggle/Pulse Output 4 Joystick 1 Fire Button: 1 = Fire 3-2 Paddle Fire Buttons 3-0 Joystick 1 Direction DC02 56322 Data Direction Register - Port A (56320) DC03 56323 Data Direction Register - Port B (56321) DC04 56324 Timer A: Low-Byte DC05 56325 Timer A: High-Byte DC06 56326 Timer B: Low-Byte DC07 56327 Timer B: High-Byte DC08 56328 Time-of-Day Clock: 1/10 Seconds DC09 56329 Time-of-Day Clock: Seconds DC0A 56330 Time-of-Day Clock: Minutes DC0B 56331 Time-of-Day Clock: Hours + AM/PM Flag (Bit 7) DC0C 56332 Synchronous Serial I/O Data Buffer DC0D 56333 CIA Interrupt Control Register (Read IRQs/Write Mask) 7 IRQ Flag (1 = IRQ Occurred) / Set-Clear Flag 4 FLAG1 IRQ (Cassette Read / Serial Bus SRQ Input) 3 Serial Port Interrupt 2 Time-of-Day Clock Alarm Interrupt 1 Timer B Interrupt 0 Timer A Interrupt DC0E 56334 CIA Control Register A 7 Time-of-Day Clock Frequency: 1 = 50 Hz, 0 = 60 Hz 6 Serial Port I/O Mode Output, 0 = Input 5 Timer A Counts: 1 = CNT Signals, 0 = System 02 Clock 4 Force Load Timer A: 1 = Yes 3 Timer A Run Mode: 1 = One-Shot, 0 = Continuous 2 Timer A Output Mode to PB6: 1 = Toggle, 0 = Pulse 1 Timer A Output on PB6: 1 = Yes, 0 = No 0 Start/Stop Timer A: 1 = Start, 0 = Stop DC0F 56335 CIA Control Register B 7 Set Alarm/TOD-Clock: 1 = Alarm, 0 = Clock 6-5 Timer B Mode Select: 00 = Count System 02 Clock Pulses 01 = Count Positive CNT Transitions 10 = Count Timer A Underflow Pulses 11 = Count Timer A Underflows While CNT Positive 4-0 Same as CIA Control Reg. A - for Timer B DD00-DDFF 56576-56831 MOS 6526 Complex Interface Adapter (CIA) #2 DD00 56576 Data Port A (Serial Bus, RS-232, VIC Memory Control) 7 Serial Bus Data Input 6 Serial Bus Clock Pulse Input 5 Serial Bus Data Output 4 Serial Bus Clock Pulse Output 3 Serial Bus ATN Signal Output 2 RS-232 Data Output (User Port) 1-0 VIC Chip System Memory Bank Select (Default = 11) DD01 56577 Data Port B (User Port, RS-232) 7 User / RS-232 Data Set Ready 6 User / RS-232 Clear to Send 5 User 4 User / RS-232 Carrier Detect 3 User / RS-232 Ring Indicator 2 User / RS-232 Data Terminal Ready 1 User / RS-232 Request to Send 0 User / RS-232 Received Data DD02 56578 Data Direction Register - Port A DD03 56579 Data Direction Register - Port B DD04 56580 Timer A: Low-Byte DD05 56581 Timer A: High-Byte DD06 56582 Timer B: Low-Byte DD07 56583 Timer B: High-Byte DD08 56584 Time-of-Day Clock: 1/10 Seconds DD09 56585 Time-of-Day Clock: Seconds DD0A 56586 Time-of-Day Clock: Minutes DD0B 56587 Time-of-Day Clock: Hours + AM/PM Flag (Bit 7) DD0C 56588 Synchronous Serial I/O Data Buffer DD0D 56589 CIA Interrupt Control Register (Read NMls/Write Mask) 7 NMI Flag (1 = NMI Occurred) / Set-Clear Flag 4 FLAG1 NMI (User/RS-232 Received Data Input) 3 Serial Port Interrupt 1 Timer B Interrupt 0 Timer A Interrupt DD0E 56590 CIA Control Register A 7 Time-of-Day Clock Frequency: 1 = 50 Hz, 0 = 60 Hz 6 Serial Port I/O Mode Output, 0 = Input 5 Timer A Counts: 1 = CNT Signals, 0 = System 02 Clock 4 Force Load Timer A: 1 = Yes 3 Timer A Run Mode: 1 = One-Shot, 0 = Continuous 2 Timer A Output Mode to PB6: 1 = Toggle, 0 = Pulse 1 Timer A Output on PB6: 1 = Yes, 0 = No 0 Start/Stop Timer A: 1 = Start, 0 = Stop DD0F 56591 CIA Control Register B 7 Set Alarm/TOD-Clock: 1 = Alarm, 0 = Clock 6-5 Timer B Mode Select: 00 = Count System 02 Clock Pulses 01 = Count Positive CNT Transitions 10 = Count Timer A Underflow Pulses 11 = Count Timer A Underflows While CNT Positive 4-0 Same as CIA Control Reg. A - for Timer B DE00-DEFF 56832-57087 Reserved for Future I/O Expansion DF00-DFFF 57088-57343 Reserved for Future I/O Expansion ********* End of the Project 64 etext of Commodore_64_IO_Maps.doc ********* The Project 64 etext of Commodore_64_Memory_Maps.txt ********* COMMODORE 64 MEMORY MAPS ADDRESS LABEL HEX DEC DESCRIPTION ---------------------------------------------------------------------------- D6510 0000 0 6510 On-chip Data Direction Register. R6510 0001 1 6510 On-chip 8-bit Input/Output Register. TEMP 0002 2 Unused. Free for user programs. ADRAY1 0003-0004 3 Jump Vector: Convert FAC to Integer in (A/Y) ($B1AA). ADRAY2 0005-0006 5 Jump Vector: Convert Integer in (A/Y) to Floating point in (FAC); ($B391). CHARAC 0007 7 Search Character/Temporary Integer during INT. ENDCHR 0008 8 Flag: Scan for Quote at end of String. INTEGR 0007-0008 7 Temporary Integer during OR/AND. TRMPOS 0009 9 Screen Column for last TAB. VERCK 000A 10 Flag: 0 = Load, 1 = Verify. COUNT 000B 11 Input Buffer Pointer/Number of Subscripts. DIMFLG 000C 12 Flag: Default Array dimension. VALTYP 000D 13 Data type Flag: $00 = Numeric, $FF = String. INTFLG 000E 14 Data type Flag: $00 = Floating point, $80 = Integer. GARBFL 000F 15 Flag: DATA scan/List Quote/Garbage collection. SUBFLG 0010 16 Flag: Subscript reference/User Function call. INPFLG 0011 17 Input Flag: $00 = INPUT, $40 = GET, $98 = READ. TANSGN 0012 18 Flag: TAN sign/Comparative result. CHANNL 0013 19 File number of current Input Device. LINNUM 0014-0015 20 Temporary: Integer value. TEMPPT 0016 22 Pointer: Temporary String Stack. LASTPT 0017-0018 23 Last temporary String Address. TEMPST 0019-0021 25 Stack for temporary Strings. INDEX 0022-0025 34 Utility Pointer Area. INDEX1 0022-0023 34 First Utility Pointer. INDEX2 0024-0025 36 Secong Utility Pointer. RESHO 0026-002A 38 Floating point product of Multiply and Divide. TXTTAB 002B-002C 43 Pointer: Start of BASIC Text Area ($0801). VARTAB 002D-002E 45 Pointer: Start of BASIC Variables. ARYTAB 002F-0030 47 Pointer: Start of BASIC Arrays. STREND 0031-0032 49 Pointer: End of BASIC Arrays + 1. FRETOP 0033-0034 51 Pointer: Bottom of String space. FRESPC 0035-0036 53 Utility String Pointer. MEMSIZ 0037-0038 55 Pointer: Highest Address available to BASIC ($A000). CURLIN 0039-003A 57 Current BASIC Line number. OLDLIN 003B-003C 59 Previous BASIC Line number. OLDTXT 003D-003E 61 Pointer: BASIC Statement for CONT. DATLIN 003F-0040 63 Current DATA Line number. DATPTR 0041-0042 65 Pointer: Used by READ - current DATA Item Address. INPPTR 0043-0044 67 Pointer: Temporary storage of Pointer during INPUT Routine. VARNAM 0045-0046 69 Name of Variable being sought in Variable Table. VARPNT 0047-0048 71 Pointer: to value of (VARNAM) if Integer, to descriptor if String. FORPNT 0049-004A 73 Pointer: Index Variable for FOR/NEXT loop. VARTXT 004B-004C 75 Temporary storage for TXTPTR during READ, INPUT and GET. OPMASK 004D 77 Mask used during FRMEVL. TEMPF3 004E-0052 78 Temporary storage for FLPT value. FOUR6 0053 83 Length of String Variable during Garbege collection. JMPER 0054-0056 84 Jump Vector used in Function Evaluation - JMP followed by Address ($4C,$LB,$MB). TEMPF1 0057-005B 87 Temporary storage for FLPT value. TEMPF2 005C-0060 92 Temporary storage for FLPT value. FAC 0061-0066 97 Main Floating point Accumulator. FACEXP 0061 97 FAC Exponent. FACHO 0062-0065 98 FAC Mantissa. FACSGN 0066 102 FAC Sign. SGNFLG 0067 103 Pointer: Series Evaluation Constant. BITS 0068 104 Bit Overflow Area during normalisation Routine. AFAC 0069-006E 105 Auxiliary Floating point Accumulator. ARGEXP 0069 105 AFAC Exponent. ARGHO 006A-006D 106 AFAC Mantissa. ARGSGN 006E 110 AFAC Sign. ARISGN 006F 111 Sign of result of Arithmetic Evaluation. FACOV 0070 112 FAC low-order rounding. FBUFPT 0071-0072 113 Pointer: Used during CRUNCH/ASCII conversion. CHRGET 0073-008A 115 Subroutine: Get next Byte of BASIC Text. ,0073 INC $7A ,0082 BEQ $0073 ,0075 BNE $0079 ,0084 SEC ,0077 INC $7B ,0085 SBC #$30 ! ,0079 LDA $0801 ,0087 SEC ,007C CMP #$3A ,0088 SBC #$D0 ,007E BCS $008A ,008A RTS ,0080 CMP #$20 CHRGOT 0079 121 Entry to Get same Byte again. TXTPTR 007A-007B 122 Pointer: Current Byte of BASIC Text. RNDX 008B-008F 139 Floating RND Function Seed Value. STATUS 0090 144 Kernal I/O Status Word ST. STKEY 0091 145 Flag: $7F = STOP key. SVXT 0092 146 Timing Constant for Tape. VERCKK 0093 147 Flag: 0 = Load, 1 = Verify. C3PO 0094 148 Flag: Serial Bus - Output Character buffered. BSOUR 0095 149 Buffered Character for Serial Bus. SYNO 0096 150 Cassette Sync. number. TEMPX 0097 151 Temporary storage of X Register during CHRIN. TEMPY 0097 151 Temporary storage of Y Register during RS232 fetch. LDTND 0098 152 Number of Open Files/Index to File Table. DFLTN 0099 153 Default Input Device (0). DFLTO 009A 154 Default Output Device (3). PRTY 009B 155 Parity of Byte Output to Tape. DPSW 009C 156 Flag: Byte received from Tape. MSGFLG 009D 157 Flag: $00 = Program mode: Suppress Error Messages, $40 = Kernal Error Messages only, $80 = Direct mode: Full Error Messages. FNMIDX 009E 158 Index to Cassette File name/Header ID for Tape write. PTR1 009E 158 Tape Error log pass 1. PTR2 009F 159 Tape Error log pass 2. TIME 00A0-00A2 160 Real-time jiffy Clock (Updated by IRQ Interrupt approx. every 1/60 of Second); Update Routine: UDTIMK ($F69B). TSFCNT 00A3 163 Bit Counter Tape Read or Write/Serial Bus EOI (End Of Input) Flag. TBTCNT 00A4 164 Pulse Counter Tape Read or Write/Serial Bus shift Counter. CNTDN 00A5 165 Tape Synchronising count down. BUFPNT 00A6 166 Pointer: Tape I/O buffer. INBIT 00A7 167 RS232 temporary for received Bit/Tape temporary. BITC1 00A8 168 RS232 Input Bit count/Tape temporary. RINONE 00A9 169 RS232 Flag: Start Bit check/Tape temporary. RIDATA 00AA 170 RS232 Input Byte Buffer/Tape temporary. RIPRTY 00AB 171 RS232 Input parity/Tape temporary. SAL 00AC-00AD 172 Pointer: Tape Buffer/Screen scrolling. EAL 00AE-00AF 174 Tape End Address/End of Program. CMPO 00B0-00B1 176 Tape timing Constants. TAPE1 00B2-00B3 178 Pointer: Start Address of Tape Buffer ($033C). BITTS 00B4 180 RS232 Write bit count/Tape Read timing Flag. NXTBIT 00B5 181 RS232 Next Bit to send/Tape Read - End of Tape. RODATA 00B6 182 RS232 Output Byte Buffer/Tape Read Error Flag. FNLEN 00B7 183 Number of Characters in Filename. LA 00B8 184 Current File - Logical File number. SA 00B9 185 Current File - Secondary Address. FA 00BA 186 Current File - First Address (Device number). OPEN LA,FA,SA; OPEN 1,8,15,"I0":CLOSE 1 FNADR 00BB-00BC 187 Pointer: Current File name Address. ROPRTY 00BD 189 RS232 Output Parity/Tape Byte to be Input or Output. FSBLK 00BE 190 Tape Input/Output Block count. MYCH 00BF 191 Serial Word Buffer. CAS1 00C0 192 Tape Motor Switch. STAL 00C1-00C2 193 Start Address for LOAD and Cassette Write. MEMUSS 00C3-00C4 195 Pointer: Type 3 Tape LOAD and general use. LSTX 00C5 197 Matrix value of last Key pressed; No Key = $40. NDX 00C6 198 Number of Characters in Keyboard Buffer queue. RVS 00C7 199 Flag: Reverse On/Off; On = $01, Off = $00. INDX 00C8 200 Pointer: End of Line for Input (Used to suppress trailing spaces). LXSP 00C9-00CA 201 Cursor X/Y (Line/Column) position at start of Input. SFDX 00CB 203 Flag: Print shifted Characters. BLNSW 00CC 204 Flag: Cursor blink; $00 = Enabled, $01 = Disabled. BLNCT 00CD 205 Timer: Count down for Cursor blink toggle. GDBLN 00CE 206 Character under Cursor while Cursor Inverted. BLNON 00CF 207 Flag: Cursor Status; $00 = Off, $01 = On. CRSW 00D0 208 Flag: Input from Screen = $03, or Keyboard = $00. PNT 00D1-00D2 209 Pointer: Current Screen Line Address. PNTR 00D3 211 Cursor Column on current Line, including Wrap-round Line, if any. QTSW 00D4 212 Flag: Editor in Quote Mode; $00 = Not. LNMX 00D5 213 Current logical Line length: 39 or 79. TBLX 00D6 214 Current Screen Line number of Cursor. SCHAR 00D7 215 Screen value of current Input Character/Last Character Output. INSRT 00D8 216 Count of number of inserts outstanding. LDTB1 00D9-00F2 217 Screen Line link Table/Editor temporaries. High Byte of Line Screen Memory Location. USER 00F3-00F4 243 Pointer: Current Colour RAM Location. KEYTAB 00F5-00F6 245 Vector: Current Keyboard decoding Table. ($EB81) RIBUF 00F7-00F8 247 RS232 Input Buffer Pointer. ROBUF 00F9-00FA 249 RS232 Output Buffer Pointer. FREKZP 00FB-00FE 251 Free Zero Page space for User Programs. BASZPT 00FF 255 BASIC temporary Data Area. ASCWRK 00FF-010A 255 Assembly Area for Floating point to ASCII conversion. BAD 0100-013E 256 Tape Input Error log. STACK 0100-01FF 256 6510 Hardware Stack Area. BSTACK 013F-01FF 319 BASIC Stack Area. BUF 0200-0258 512 BASIC Input Buffer (Input Line from Screen). LAT 0259-0262 601 Kernal Table: Active logical File numbers. FAT 0263-026C 611 Kernal Table: Active File First Addresses (Device numbers). SAT 026D-0276 621 Kernal Table: Active File Secondary Addresses. KEYD 0277-0280 631 Keyboard Buffer Queue (FIFO). MEMSTR 0281-0282 641 Pointer: Bottom of Memory for Operating System ($0800). MEMSIZ 0283-0284 643 Pointer: Top of Memory for Operating System ($A000). TIMOUT 0285 645 Serial IEEE Bus timeout defeat Flag. COLOR 0286 646 Current Character Colour code. GDCOL 0287 647 Background Colour under Cursor. HIBASE 0288 648 High Byte of Screen Memory Address ($04). XMAX 0289 649 Maximum number of Bytes in Keyboard Buffer ($0A). RPTFLG 028A 650 Flag: Repeat keys; $00 = Cursors, INST/DEL & Space repeat, $40 no Keys repeat, $80 all Keys repeat ($00). KOUNT 028B 651 Repeat Key: Speed Counter ($04). DELAY 028C 652 Repeat Key: First repeat delay Counter ($10). SHFLAG 028D 653 Flag: Shift Keys: Bit 1 = Shift, Bit 2 = CBM, Bit 3 = CTRL; ($00 = None, $01 = Shift, etc.). LSTSHF 028E 654 Last Shift Key used for debouncing. KEYLOG 028F-0290 655 Vector: Routine to determine Keyboard table to use based on Shift Key Pattern ($EB48). MODE 0291 657 Flag: Upper/Lower Case change: $00 = Disabled, $80 = Enabled ($00). AUTODN 0292 658 Flag: Auto scroll down: $00 = Disabled ($00). M51CTR 0293 659 RS232 Pseudo 6551 control Register Image. M51CDR 0294 660 RS232 Pseudo 6551 command Register Image. M51AJB 0295-0296 661 RS232 Non-standard Bits/Second. RSSTAT 0297 663 RS232 Pseudo 6551 Status Register Image. BITNUM 0298 664 RS232 Number of Bits left to send. BAUDOF 0299-029A 665 RS232 Baud Rate; Full Bit time microseconds. RIDBE 029B 667 RS232 Index to End of Input Buffer. RIDBS 029C 668 RS232 Pointer: High Byte of Address of Input Buffer. RODBS 029D 669 RS232 Pointer: High Byte of Address of Output Buffer. RODBE 029E 670 RS232 Index to End of Output Buffer. IRQTMP 029F-02A0 671 Temporary store for IRQ Vector during Tape operations. ENABL 02A1 673 RS232 Enables. TODSNS 02A2 674 TOD sense during Tape I/O. TRDTMP 02A3 675 Temporary storage during Tape READ. TD1IRQ 02A4 676 Temporary D1IRQ Indicator during Tape READ. TLNIDX 02A5 677 Temporary for Line Index. TVSFLG 02A6 678 Flag: TV Standard: $00 = NTSC, $01 = PAL. TEMP 02A7-02FF 679 Unused. SPR11 02C0-02FE 704 Sprite #11 Data Area. (SCREEN + $03F8 + SPR number) POKE 1024+1016+0,11 to use Sprite#0 DATA from ($02C0-$02FE). IERROR 0300-0301 768 Vector: Indirect entry to BASIC Error Message, (X) points to Message ($E38B). IMAIN 0302-0303 770 Vector: Indirect entry to BASIC Input Line and Decode ($A483). ICRNCH 0304-0305 772 Vector: Indirect entry to BASIC Tokenise Routine ($A57C). IQPLOP 0306-0307 774 Vector: Indirect entry to BASIC LIST Routine ($A71A). IGONE 0308-0309 776 Vector: Indirect entry to BASIC Character dispatch Routine ($A7E4). IEVAL 030A-030B 778 Vector: Indirect entry to BASIC Token evaluation ($AE86). SAREG 030C 780 Storage for 6510 Accumulator during SYS. SXREG 030D 781 Storage for 6510 X-Register during SYS. SYREG 030E 782 Storage for 6510 Y-Register during SYS. SPREG 030F 783 Storage for 6510 Status Register during SYS. USRPOK 0310 784 USR Function JMP Instruction ($4C). USRADD 0311-0312 785 USR Address ($LB,$MB). TEMP 0313 787 Unused. CINV 0314-0315 788 Vector: Hardware IRQ Interrupt Address ($EA31). CNBINV 0316-0317 790 Vector: BRK Instruction Interrupt Address ($FE66). NMINV 0318-0319 792 Vector: Hardware NMI Interrupt Address ($FE47). IOPEN 031A-031B 794 Vector: Indirect entry to Kernal OPEN Routine ($F34A). ICLOSE 031C-031D 796 Vector: Indirect entry to Kernal CLOSE Routine ($F291). ICHKIN 031E-031F 798 Vector: Indirect entry to Kernal CHKIN Routine ($F20E). ICKOUT 0320-0321 800 Vector: Indirect entry to Kernal CHKOUT Routine ($F250). ICLRCH 0322-0323 802 Vector: Indirect entry to Kernal CLRCHN Routine ($F333). IBASIN 0324-0325 804 Vector: Indirect entry to Kernal CHRIN Routine ($F157). IBSOUT 0326-0327 806 Vector: Indirect entry to Kernal CHROUT Routine ($F1CA). ISTOP 0328-0329 808 Vector: Indirect entry to Kernal STOP Routine ($F6ED). IGETIN 032A-032B 810 Vector: Indirect entry to Kernal GETIN Routine ($F13E). ICLALL 032C-032D 812 Vector: Indirect entry to Kernal CLALL Routine ($F32F). USRCMD 032E-032F 814 User Defined Vector ($FE66). ILOAD 0330-0331 816 Vector: Indirect entry to Kernal LOAD Routine ($F4A5). ISAVE 0332-0333 818 Vector: Indirect entry to Kernal SAVE Routine ($F5ED). TEMP 0334-033B 820 Unused. TBUFFR 033C-03FB 828 Tape I/O Buffer. SPR13 0340-037E 832 Sprite #13. SPR14 0380-03BE 896 Sprite #14. SPR15 03C0-03FE 960 Sprite #15. TEMP 03FC-03FF 1020 Unused. VICSCN 0400-07E7 1024 Default Screen Video Matrix. TEMP 07E8-07F7 2024 Unused. SPNTRS 07F8-07FF 2040 Default Sprite Data Pointers. 0800-9FFF 2048 Normal BASIC Program space. 8000-9FFF 32768 Optional Cartridge ROM space. A000-BFFF 40960 BASIC ROM (Part) or 8 KB RAM. C000-CFFF 49152 4 KB RAM. D000-DFFF 53248 Input/Output Devices and Colour RAM or 4 KB RAM or Character ROM. D000-D02E 53248 6566 Video Interface Chip, VIC II. D400-D41C 54272 6581 Sound Interface Device, SID. D500-D7FF 54528 SID Images. D800-DBE7 55296 Colour RAM (Nybbles = 4 Bit RAM, LSB). DBE8-DBFF 56296 Unused Nybbles. DC00-DC0F 56320 6526 Complex Interface Adaptor, CIA. DD00-DD0F 56576 6526 Complex Interface Adaptor, CIA. E000-FFFF 57344 BASIC (Part)/Kernal ROM or 8 KB RAM. E000-E4FF 57344 BASIC ROM (Part) or RAM. E500-FFFF 58624 Kernal ROM or RAM. COMMODORE 64 INPUT/OUTPUT ASSIGNMENTS HEX DECIMAL BITS DESCRIPTION 0000 0 7-0 MOS 6510 Data Direction Register (xx101111) Bit= 1: Output, Bit=0: Input, x=Don't Care 0001 1 MOS 6510 Micro-Processor On-Chip I/O Port 0 /LORAM Signal (0=Switch BASIC ROM Out) 1 /HIRAM Signal (0=Switch Kernal ROM Out) 2 /CHAREN Signal (O=Swith Char. ROM In) 3 Cassette Data Output Line 4 Cassette Switch Sense: 1 = Switch Closed 5 Cassette Motor Control O = ON, 1 = OFF 6-7 Undefined D000-D02E 53248-54271 MOS 6566 VIDEO INTERFACE CONTROLLER (VIC) D000 53248 Sprite 0 X Pos D001 53249 Sprite 0 Y Pos D002 53250 Sprite 1 X Pos D003 53251 Sprite 1 Y Pos D004 53252 Sprite 2 X Pos D005 53253 Sprite 2 Y Pos D006 53254 Sprite 3 X Pos D007 53255 Sprite 3 Y Pos D008 53256 Sprite 4 X Pos D009 53257 Sprite 4 Y Pos D00A 53258 Sprite 5 X Pos D00B 53259 Sprite 5 Y Pos D00C 53260 Sprite 6 X Pos D00D 53261 Sprite 6 Y Pos D00E 53262 Sprite 7 X Pos D00F 53263 Sprite 7 Y Pos D010 53264 Sprites 0-7 X Pos (msb of X coord.) D011 53265 VIC Control Register 7 Raster Compare: (Bit 8) See 53266 6 Extended Color Text Mode 1 = Enable 5 Bit Map Mode. 1 = Enable 4 Blank Screen to Border Color: 0 = Blank 3 Select 24/25 Row Text Display: 1 = 25 Rows 2-0 Smooth Scroll to Y Dot-Position (0-7) D012 53266 Read Raster / Write Raster Value for Compare IRQ D013 53267 Light-Pen Latch X Pos D014 53268 Light-Pen Latch Y Pos D015 53269 Sprite display Enable: 1 = Enable D016 53270 VIC Control Register 7-6 Unused 5 ALWAYS SET THIS BIT TO 0 ! 4 Multi-Color Mode: 1 = Enable (Text or Bit-Map) 3 Select 38/40 Column Text Display: 1 = 40 Cols 2-0 Smooth Scroll to X Pos D017 53271 Sprites O-7 Expand 2x Vertical (Y) D018 53272 VIC Memory Control Register 7-4 Video Matrix Base Address (inside VIC) 3-1 Character Dot-Data Base Address (inside VIC) 0 Select upper/lower Character Set D019 53273 VIC Interrupt Flag Register (Bit = 1: IRQ Occurred) 7 Set on Any Enabled VIC IRQ Condition 3 Light-Pen Triggered IRQ Flag 2 Sprite to Sprite Collision IRQ Flag 1 Sprite to Background Collision IRQ Flag 0 Raster Compare IRQ Flag D01A 53274 IRQ Mask Register: 1 = Interrupt Enabled D01B 53275 Sprite to Background Display Priority: 1 = Sprite D01C 53276 Sprites O-7 Multi-Color Mode Select: 1 = M.C.M. D01D 53277 Sprites 0-7 Expand 2x Horizontal (X) D01E 53278 Sprite to Sprite Collision Detect D01F 53279 Sprite to Background Collision Detect D020 53280 Border Color D021 53281 Background Color 0 D022 53282 Background Color 1 D023 53283 Background Color 2 D024 53284 Background Color 3 D025 53285 Sprite Multi-Color Register 0 D026 53286 Sprite Multi-Color Register 1 D027 53287 Sprite 0 Color D028 53288 Sprite 1 Color D029 53289 Sprite 2 Color D02A 53290 Sprite 3 Color D02B 53291 Sprite 4 Color D02C 53292 Sprite 5 Color D02D 53293 Sprite 6 Color D02E 53294 Sprite 7 Color D400-D7FF 54272-55295 MOS 6581 SOUND INTERFACE DEVICE (SID) D400 54272 Voice 1: Frequency Control - Low-Byte D401 54273 Voice 1: Frequency Control - High-Byte D402 54274 Voice 1: Pulse Waveform Width - Low-Byte D403 54275 7-4 Unused 3-0 Voice 1: Pulse Waveform Width - High-Nybble D404 54276 Voice 1: Control Register 7 Select Random Noise Waveform, 1 = On 6 Select Pulse Waveform, 1 = On 5 Select Sawtooth Waveform, 1 = On 4 Select Triangle Waveform, 1 = On 3 Test Bit: 1 = Disable Oscillator 1 2 Ring Modulate Osc. 1 with Osc. 3 Output, 1 = On 1 Synchronize Osc. 1 with Osc. 3 Frequency, 1 = On 0 Gate Bit: 1 = Start Att/Dec/Sus, 0 = Start Release D405 54277 Envelope Generator 1: Attack / Decay Cycle Control 7-4 Select Attack Cycle Duration: 0-15 3-0 Select Decay Cycle Duration: 0-15 D406 54278 Envelope Generator 1: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: 0-15 3-0 Select Release Cycle Duration: 0-15 D407 54279 Voice 2: Frequency Control - Low-Byte D408 54280 Voice 2: Frequency Control - High-Byte D409 54281 Voice 2: Pulse Waveform Width - Low-Byte D40A 54282 7-4 Unused 3-0 Voice 2: Pulse Waveform Width - High-Nybble D40B 54283 Voice 2: Control Register 7 Select Random Noise Waveform, 1 = On 6 Select Pulse Waveform, 1 = On 5 Select Sawtooth Waveform, 1 = On 4 Select Triangle Waveform, 1 = On 3 Test Bit: 1 = Disable Oscillator 1 2 Ring Modulate Osc. 2 with Osc. 1 Output, 1 = On 1 Synchronize Osc. 2 with Osc. 1 Frequency, 1 = On 0 Gate Bit: 1 = Start Att/Dec/Sus, 0 = Start Release D40C 54284 Envelope Generator 2: Attack / Decay Cycle Control 7-4 Select Attack Cycle Duration: 0-15 3-0 Select Decay Cycle Duration: 0-15 D40D 54285 Envelope Generator 2: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: O-15 3-0 Select Release Cycle Duration: O-15 D40E 54286 Voice 3: Frequency Control - Low-Byte D40F 54287 Voice 3: Frequency Control - High-Byte D410 54288 Voice 3: Pulse Waveform Width - Low-Byte D411 54289 7-4 Unused 3-0 Voice 3: Pulse Waveform Width - High-Nybble D412 54290 Voice 3: Control Register 7 Select Random Noise Waveform, 1 = On 6 Select Pulse Waveform, 1 = On 5 Select Sawtooth Waveform, 1 = On 4 Select Triangle Waveform, 1 = On 3 Test Bit: 1 = Disable Oscillator 1 2 Ring Modulate Osc. 3 with Osc. 2 Output, 1 = On 1 Synchronize Osc. 3 with Osc. 2 Frequency, 1 = On 0 Gate Bit: 1 = Start Att/Dec/Sus, 0 = Start Release D413 54291 Envelope Generator 3: Attac/Decay Cycle Control 7-4 Select Attack Cycle Duration: 0-15 3-0 Select Decay Cycle Duration: 0-15 D414 54285 Envelope Generator 3: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: 0-15 3-0 Select Release Cycle Duration: 0-15 D415 54293 Filter Cutoff Frequency: Low-Nybble (Bits 2-0) D416 54294 Filter Cutoff Frequency: High-Byte D417 54295 Filter Resonance Control / Voice Input Control 7-4 Select Filter Resonance: 0-15 3 Filter External Input: 1 = Yes, 0 = No 2 Filter Voice 3 Output: 1 = Yes, 0 = No Filter Voice 2 Output: 1 = Yes, 0 = No 0 Filter Voice 1 Output: 1 = Yes, 0 = No D418 54296 Select Filter Mode and Volume 7 Cut-Off Voice 3 Output: 1 = Off, O = On 6 Select Filter High-Pass Mode: 1 = On 5 Select Filter Band-Pass Mode: 1 = On 4 Select Filter Low-Pass Mode: 1 = On 3-0 Select Output Volume: 0-15 D419 54297 Analog/Digital Converter: Game Paddle 1 (0-255) D41A 54298 Analog/Digital Converter Game Paddle 2 (0-255) D41B 54299 Oscillator 3 Random Number Generator D41C 54230 Envelope Generator 3 Output D500-D7FF 54528-55295 SID IMAGES D800-DBFF 55296-56319 Color RAM (Nybbles) DC00-DCFF 56320-56575 MOS 6526 Complex Interface Adapter (CIA) #1 DC00 56320 Data Port A (Keyboard, Joystick, Paddles, Light-Pen) 7-0 Write Keyboard Column Values for Keyboard Scan 7-6 Read Paddles on Port A / B (01 = Port A, 10 = Port B) 4 Joystick A Fire Button: 1 = Fire 3-2 Paddle Fire Buttons 3-0 Joystick A Direction (0-15) DC01 56321 Data Port B (Keyboard, Joystick, Paddles): Game Port 1 7-0 Read Keyboard Row Values for Keyboard Scan 7 Timer B Toggle/Pulse Output 6 Timer A: Toggle/Pulse Output 4 Joystick 1 Fire Button: 1 = Fire 3-2 Paddle Fire Buttons 3-0 Joystick 1 Direction DC02 56322 Data Direction Register - Port A (56320) DC03 56323 Data Direction Register - Port B (56321) DC04 56324 Timer A: Low-Byte DC05 56325 Timer A: High-Byte DC06 56326 Timer B: Low-Byte DC07 56327 Timer B: High-Byte DC08 56328 Time-of-Day Clock: 1/10 Seconds DC09 56329 Time-of-Day Clock: Seconds DC0A 56330 Time-of-Day Clock: Minutes DC0B 56331 Time-of-Day Clock: Hours + AM/PM Flag (Bit 7) DC0C 56332 Synchronous Serial I/O Data Buffer DC0D 56333 CIA Interrupt Control Register (Read IRQs/Write Mask) 7 IRQ Flag (1 = IRQ Occurred) / Set-Clear Flag 4 FLAG1 IRQ (Cassette Read / Serial Bus SRQ Input) 3 Serial Port Interrupt 2 Time-of-Day Clock Alarm Interrupt 1 Timer B Interrupt 0 Timer A Interrupt DC0E 56334 CIA Control Register A 7 Time-of-Day Clock Frequency: 1 = 50 Hz, 0 = 60 Hz 6 Serial Port I/O Mode Output, 0 = Input 5 Timer A Counts: 1 = CNT Signals, 0 = System 02 Clock 4 Force Load Timer A: 1 = Yes 3 Timer A Run Mode: 1 = One-Shot, 0 = Continuous 2 Timer A Output Mode to PB6: 1 = Toggle, 0 = Pulse 1 Timer A Output on PB6: 1 = Yes, 0 = No 0 Start/Stop Timer A: 1 = Start, 0 = Stop DC0F 56335 CIA Control Register B 7 Set Alarm/TOD-Clock: 1 = Alarm, 0 = Clock 6-5 Timer B Mode Select: 00 = Count System 02 Clock Pulses 01 = Count Positive CNT Transitions 10 = Count Timer A Underflow Pulses 11 = Count Timer A Underflows While CNT Positive 4-0 Same as CIA Control Reg. A - for Timer B DD00-DDFF 56576-56831 MOS 6526 Complex Interface Adapter (CIA) #2 DD00 56576 Data Port A (Serial Bus, RS-232, VIC Memory Control) 7 Serial Bus Data Input 6 Serial Bus Clock Pulse Input 5 Serial Bus Data Output 4 Serial Bus Clock Pulse Output 3 Serial Bus ATN Signal Output 2 RS-232 Data Output (User Port) 1-0 VIC Chip System Memory Bank Select (Default = 11) DD01 56577 Data Port B (User Port, RS-232) 7 User / RS-232 Data Set Ready 6 User / RS-232 Clear to Send 5 User 4 User / RS-232 Carrier Detect 3 User / RS-232 Ring Indicator 2 User / RS-232 Data Terminal Ready 1 User / RS-232 Request to Send 0 User / RS-232 Received Data DD02 56578 Data Direction Register - Port A DD03 56579 Data Direction Register - Port B DD04 56580 Timer A: Low-Byte DD05 56581 Timer A: High-Byte DD06 56582 Timer B: Low-Byte DD07 56583 Timer B: High-Byte DD08 56584 Time-of-Day Clock: 1/10 Seconds DD09 56585 Time-of-Day Clock: Seconds DD0A 56586 Time-of-Day Clock: Minutes DD0B 56587 Time-of-Day Clock: Hours + AM/PM Flag (Bit 7) DD0C 56588 Synchronous Serial I/O Data Buffer DD0D 56589 CIA Interrupt Control Register (Read NMls/Write Mask) 7 NMI Flag (1 = NMI Occurred) / Set-Clear Flag 4 FLAG1 NMI (User/RS-232 Received Data Input) 3 Serial Port Interrupt 1 Timer B Interrupt 0 Timer A Interrupt DD0E 56590 CIA Control Register A 7 Time-of-Day Clock Frequency: 1 = 50 Hz, 0 = 60 Hz 6 Serial Port I/O Mode Output, 0 = Input 5 Timer A Counts: 1 = CNT Signals, 0 = System 02 Clock 4 Force Load Timer A: 1 = Yes 3 Timer A Run Mode: 1 = One-Shot, 0 = Continuous 2 Timer A Output Mode to PB6: 1 = Toggle, 0 = Pulse 1 Timer A Output on PB6: 1 = Yes, 0 = No 0 Start/Stop Timer A: 1 = Start, 0 = Stop DD0F 56591 CIA Control Register B 7 Set Alarm/TOD-Clock: 1 = Alarm, 0 = Clock 6-5 Timer B Mode Select: 00 = Count System 02 Clock Pulses 01 = Count Positive CNT Transitions 10 = Count Timer A Underflow Pulses 11 = Count Timer A Underflows While CNT Positive 4-0 Same as CIA Control Reg. A - for Timer B DE00-DEFF 56832-57087 Reserved for Future I/O Expansion DF00-DFFF 57088-57343 Reserved for Future I/O Expansion ********* End of the Project 64 etext of Commodore_64_Memory_Maps.txt ********* The Project 64 etext of Commodore_64_RAM_Memory_Map.doc ********* ; Commodore 64 RAM Memory Map ; V1.2 1 sep 1994 LABEL HEX DECIMAL ADDRESS LOCATION DESCRIPTION ADRAY2 0005-0006 5-6 Jump Vector: Convert Integer--Floating CHARAC 0007 7 Search Character ENDCHR 0008 8 Flag: Scan for Quote at End of String TRMPOS 0009 9 Screen Column From Last TAB VERCK 000A 10 Flag: 0 = Load, 1 = Verify COUNT 000B 11 Input Buffer Pointer / No. of Subscripts DIMFLG 000C 12 Flag: Default Array DiMension VAUYP 000D 13 Data Type: $FF = String, $00 = Numeric INTFLG 000E 14 Data Type: $80 = Integer, $00 = Floating GARBFL 000F 15 Flag: DATA scan/LlST quote/Garbage Coll SUBFLG 0010 16 Flag: Subscript Ref / User Function Call INPFLG 0011 17 Flag: $00 = INPUT, $40 = GET, $98 = READ TANSGN 0012 18 Flag TAN sign / Comparison Result 0013 19 Flag: INPUT Prompt LINNUM 0014-0015 20-21 Temp: Integer Value TEMPPT 0016 22 Pointer Temporary String LASTPT 0017-0018 23-24 Last Temp String Address TEMPST 0019-0021 25-33 Stack for Temporary Strings INDEX 0022-002S 34-37 Utility Pointer Area RESHO 0026-002A 38-42 Floating-Point Product of Multiply TXTTAB 002B-002C 43-44 Pointer: Start of BASIC Text VARTAB 002D-002E 45-46 Pointer: Start of BASIC Variables ARYTAB 002F-0030 47-48 Pointer: Start of BASIC Arrays STREND 0031-0032 49-50 Pointer End of BASIC Arrays (+1) FRETOP 0033-0034 51-52 Pointer: Bottom of String Storage FRESPC 0035-0036 53-54 Utility String Pointer MEMSIZ 0037-0038 55-56 Pointer: Highest Address Used by BASIC CURLIN 0039-003A 57-58 Current BASIC Line Number OLDLIN 003B-003C 59-60 Previous BASIC Line Number OLDTXT 003D-003E 61-62 Pointer: BASIC Statement for CONT DATLIN 003F-0040 63-64 Current DATA Line Number DATPTR 0041-0042 65-66 Pointer: Current DATA Item Address INPPTR 0043-0044 67-68 Vector: INPUT Routine VARNAM 0045-0046 69-70 Current BASIC Variable Name VARPNT 0047-0048 71-72 Pointer: Current BASIC Variable Data FORPNT 0049-004A 73-74 Pointer: Index Variable for FOR/NEXT 004B-0060 75-96 Temp Pointer / Data Area FACEXP 0061 97 Floating-Point Accumulator #1: Exponent FACHO 0062-0065 98-101 Floating Accum. #1: Mantissa FACSGN 0066 102 Floating Accum. #1: Sign SGNFLG 0067 103 Pointer: Series Evaluation Constant BITS 0068 104 Floating -accum. #1: Overflow Digit ARGEXP 0069 105 Floating-Point Accumulator #2: Exponent ARGHO 006A-006D 106-109 Floating Accum. #2: Mantissa ARGSGN 006E 110 Floating Accum. #2: Sign ARISGN 006F 111 Sign Comparison Result: Accum. # 1 vs #2 FACOV 0070 112 Floating Accum. #1. Low-Order (Rounding) FBUFPT 0071-0072 113-114 Pointer: Cassette Buffer CHRGET 0073-008A 115-138 Subroutine: Get Next Byte of BASIC Text CHRGOT 0079 121 Entry to Get Same Byte of Text Again TXTPTR 007A-007B 122-123 Pointer: Current Byte of BASIC Text RNDX 008B-008F 139-143 Floating RND Function Seed Value STATUS 0090 144 Kernal l/O Status Word: ST STKEY 0091 145 Flag: STOP key / RVS key SVXT 0092 146 Timing Constant for Tape VERCK 0093 147 Flag: 0 = Load, 1 = Verify C3PO 0094 148 Flag: Serial Bus-Output Char. Buffered BSOUR 0095 149 Buffered Character for Serial Bus SYNO 0096 150 Cassette Sync No. 0097 151 Temp Data Area LDTND 0098 152 No. of Open Files / Index to File Table DFLTN 0099 153 Default Input Device (0) DFLTO 009A 154 Default Output (CMD) Device (3) PRTY 009B 155 Tape Character Parity PSW 009C 156 Flag: Tape Byte-Received MSGFLG 009D 157 Flag: $80 = Direct Mode, $00 = Program PTR1 009E 158 Tape Pass 1 Error Log PTR2 009F 159 Tape Pass 2 Error Log TIME 00A0-00A2 160-162 Real-Time Jiffy Clock (approx) 1/60 Sec 00A3-00A4 163-164 Temp Data Area CNTDN 00A5 165 Cassette Sync Countdown BUFPNT 00A6 166 Pointer: Tape l/O Buffer INBIT 00A7 167 RS-232 Input Bits / Cassette Temp BITCI 00A8 168 RS-232 Input Bit Count / Cassette Temp RINONE 00A9 169 RS-232 Flag: Check for Start Bit RIDATA 00AA 170 RS-232 Input Byte Buffer/Cassette Temp RIPRTY 00AB 171 RS-232 Input Parity / Cassette Short Cnt SAL 00AC-00AD 172-173 Pointer: Tape Buffer/ Screen Scrolling EAL 00AE-00AF 174-175 Tape End Addresses/End of Program CMP0 00B0-00B1 176-177 Tape Timing Constants TAPE1 00B2-00B3 178-179 Pointer: Start of Tape Buffer BITTS 00B4 180 RS-232 Out Bit Count / Cassette Temp NXTBIT 00B5 181 RS-232 Next Bit to Send/ Tape EOT Flag RODATA 00B6 182 RS-232 Out Byte Buffer FNLEN 00B7 183 Length of Current File Name LA 00B8 184 Current Logical File Number FA 00BA 186 Current Device Number FNADR 00BB-00BC 187-188 Pointer: Current File Name ROPRTY 00BD 189 RS-232 Out Parity / Cassette Temp FSBLK 00BE 190 Cassette Read / Write Block Count MYCH 00BF 191 Serial Word Buffer CAS1 00C0 192 Tape Motor Interlock STAL 00C1-00C2 193-194 I/O Start Address MEMUSS 00C3-00C4 195-196 Tape Load Temps LSTX 00C5 197 Current Key Pressed: CHR$(n) 0 = No Key NDX 00C6 198 No. of Chars. in Keyboard Buffer (Queue) RVS 00C7 199 Flag: Print Reverse Chars. -1=Yes, 0=No Used INDX 00C8 200 Pointer: End of Logical Line for INPUT LXSP 00C9-00CA 201-202 Cursor X-Y Pos. at Start of INPUT SFDX 00CB 203 Flag: Print Shifted Chars. BLNSW 00CC 204 Cursor Blink enable: 0 = Flash Cursor BLNCT 00CD 205 Timer: Countdown to Toggle Cursor GDBLN 00CE 206 Character Under Cursor BLNON 00CF 207 Flag: Last Cursor Blink On/Off CRSW 00D0 208 Flag: INPUT or GET from Keyboard PNT 00D1-00D2 209-210 Pointer: Current Screen Line Address PNTR 00D3 211 Cursor Column on Current Line QTSW 00D4 212 Flag: Editor in Quote Mode, $00 = NO LNMX 00D5 213 Physical Screen Line Length TBLX 00D6 214 Current Cursor Physical Line Number 00D7 215 Temp Data Area INSRT 00D8 216 Flag: Insert Mode, >0 = # INSTs LDTB1 00D9-00F2 217-242 Screen Line Link Table / Editor Temps USER 00F3-00F4 243-244 Pointer: Current Screen Color RAM loc. KEYTAB 00F5-00F6 24S-246 Vector Keyboard Decode Table RIBUF 00F7-00F8 247-248 RS-232 Input Buffer Pointer ROBUF 00F9-00FA 249-250 RS-232 Output Buffer Pointer FREKZP 00FB-00FE 251-254 Free 0-Page Space for User Programs BASZPT 00FF 255 BASIC Temp Data Area 0100-01FF 256-511 Micro-Processor System Stack Area 0100-010A 256-266 Floating to String Work Area BAD 0100-013E 256-318 Tape Input Error Log BUF 0200-02S8 512-600 System INPUT Buffer LAT 0259-0262 601-610 KERNAL Table: Active Logical File No's. FAT 0263-026C 611-620 KERNAL Table: Device No. for Each File SAT 026D-0276 621-630 KERNAL Table: Second Address Each File KEYD 0277-0280 631-640 Keyboard Buffer Queue (FIFO) MEMSTR 0281-0282 641-642 Pointer: Bottom of Memory for O.S. MEMSIZ 0283-0284 643-644 Pointer: Top of Memory for O.S. TIMOUT 0285 645 Flag: Kernal Variable for IEEE Timeout COLOR 0286 646 Current Character Color Code GDCOL 0287 647 Background Color Under Cursor HIBASE 0288 648 Top of Screen Memory (Page) XMAX 0289 649 Size of Keyboard Buffer RPTFLG 028A 650 Flag: REPEAT Key Used, $80 = Repeat KOUNT 028B 651 Repeat Speed Counter DELAY 028C 652 Repeat Delay Counter SHFLAG 028D 653 Flag: Keyb'rd SHIFT Key/CTRL Key/C= Key LSTSHF 028E 654 Last Keyboard Shift Pattern KEYLOG 028F-0290 655-656 Vector: Keyboard Table Setup MODE 0291 657 Flag: $00=Disable SHIFT Keys, $80 = Enable SHIFT Keys AUTODN 0292 658 Flag: Auto Scroll Down, 0 = ON M51CTR 0293 659 RS-232: 6551 Control Register Image MS1CDR 0294 660 RS-232: 6551 Command Register Image M51AJB 0295-0296 661-662 RS-232 Non-Standard BPS (Time/2-100) USA RSSTAT 0297 663 RS-232: 6551 Status Register Image BITNUM 0298 664 RS-232 Number of Bits Left to Send BAUDOF 0299-029A 665-666 RS-232 Baud Rate: Full Bit Time (us) RIDBE 029B 667 RS-232 Index to End of Input Buffer RIDBS 029C 668 RS-232 Start of Input Buffer (Page) RODBS 029D 669 RS-232 Start of Output Buffer (Page) RODBE 029E 670 RS-232 Index to End of Output Buffer IRQTMP 029F-02A0 671-672 Holds IRQ Vector During Tape I/O ENABL 02A1 673 RS-232 Enables 02A2 674 TOD Sense During Cassette I/O 02A3 675 Temp Storage For Cassette Read 02A4 676 Temp D1 IRQ Indicator For Cassette Read 02A5 677 Temp For Line Index 02A6 678 PAL/NTSC Flag, O= NTSC, 1 = PAL 02A7-02FF 679-767 Unused IERROR 0300-0301 768-769 Vector: Print BASIC Error Message IMAIN 0302-0303 770-771 Vector: BASIC Warm Start ICRNCH 0304-0305 772-773 Vector: Tokenize BASIC Text IQPLOP 0306-0307 774-775 Vector: BASIC Text LIST IGONE 0308-0309 776-777 Vector: BASIC Char. Dispatch IEVAL 030A-030B 778-779 Vector: BASIC Token Evaluation SAREG 030C 780 Storage for 6502 .A Register SXREG 030D 781 Storage for 5502 .X Register SYREG 030E 782 Storage for 6502 .Y Register SPREG 030F 783 Storage for 6502 .SP Register USRPOK 0310 784 USR Function Jump Instr (4C) USRADD 0311-0312 785-786 USR Address Low Byte / High Byte 0313 787 Unused CINV 0314-0315 788-789 Vector: Hardware Interrupt CBINV 0316-0317 790-791 Vector: BRK Instr. Interrupt NMINV 0318-0319 792-793 Vector: Non-Maskable Interrupt IOPEN 031A-031B 794-795 KERNAL OPEN Routine Vector ICLOSE 031C-031D 796-797 KERNAL CLOSE Routine Vector ICHKIN 031E-031F 798-799 KERNAL CHKIN Routine ICKOUT 0320-0321 800-801 KERNAL CHKOUT Routine ICLRCH 0322-0323 802-803 KERNAL CLRCHN Routine Vector IBASIN 0324-0325 804-805 KERNAL CHRIN Routine IBSOUT 0326-0327 806-807 KERNAL CHROUT Routine ISTOP 0328-0329 808-809 KERNAL STOP Routine Vector IGETIN 032A-032B 810-811 KERNAL GETIN Routine ICLALL 032C-032D 812-813 KERNAL CLALL Routine Vector USRCMD 032E-032F 814-815 User-Defined Vector ILOAD 0330 0331 813 817 KERNAL LOAD Routine ISAVE 0332-0333 818-819 KERNAL SAVE Routine Vector 0334-033B 820-827 Unused TBUFFR 033C-03FB 828-1019 Tape l/O Buffer 03FC-03FF 1020-1023 Unused VICSCN 0400-07FF 1024-2047 1024 Byte Screen Memory Area 0400-07E7 1024-2023 Video Matrix: 25 Lines X 40 Columns 07F8-07FF 2040-2047 Sprite Data Pointers 0800-9FFF 2048-40959 Normal BASIC Program Space 8000-9FFF 32768-40959 VSP Cartridge ROM -- 8192 Bytes A000-BFFF 40960-49151 BASIC ROM-8192 Bytes (or 8K RAM) C000-CFFF 49152-53247 RAM-4096 Bytes D000-DFFF 53248-57343 Input/Output Devices and Color RAM or Character Generator ROM or RAM-4096 Bytes E000-FFFF 57344-65535 KERNAL ROM -- 8192 Bytes (or 8K RAM) ********* End of the Project 64 etext of Commodore_64_RAM_Memory_Map.doc ********* The Project 64 etext of Commodore_64_ROM_Memory_Map.doc ********* ; Commodore 64 ROM Memory Map ; V1.2 1 Sep 1994 ; ; Data types in headers (for reassembler): ; ; DATA Misc data ; TEXT String terminated with 00 ; WORD Vectors in LO/HI byte pairs ; CHIP I/O Area ; EMPTY ROM containing FF's or AA's ; ; ; BASIC interpreter ROM ($A000 - $BFFF) ; a000 40960 - Restart Vectors WORD a00c 40972 stmdsp BASIC Command Vectors WORD a052 41042 fundsp BASIC Function Vectors WORD a080 41088 optab BASIC Operator Vectors WORD a09e 41118 reslst BASIC Command Keyword Table DATA a129 41257 msclst BASIC Misc. Keyword Table DATA a140 41280 oplist BASIC Operator Keyword Table DATA a14d 41293 funlst BASIC Function Keyword Table DATA a19e 41374 errtab Error Message Table DATA a328 41768 errptr Error Message Pointers WORD a364 41828 okk Misc. Messages TEXT a38a 41866 fndfor Find FOR/GOSUB Entry on Stack a3b8 41912 bltu Open Space in Memory a3fb 41979 getstk Check Stack Depth a408 41992 reason Check Memory Overlap a435 42037 omerr Output ?OUT OF MEMORY Error a437 42039 error Error Routine a469 42089 errfin Break Entry a474 42100 ready Restart BASIC a480 42112 main Input & Identify BASIC Line a49c 42140 main1 Get Line Number & Tokenise Text a4a2 42146 inslin Insert BASIC Text a533 42291 linkprg Rechain Lines a560 42336 inlin Input Line Into Buffer a579 42361 crunch Tokenise Input Buffer a613 42515 fndlin Search for Line Number a642 42562 scrtch Perform [new] a65e 42590 clear Perform [clr] a68e 42638 stxpt Reset TXTPTR a69c 42652 list Perform [list] a717 42775 qplop Handle LIST Character a742 42818 for Perform [for] a7ae 42926 newstt BASIC Warm Start a7c4 42948 ckeol Check End of Program a7e1 42977 gone Prepare to execute statement a7ed 42989 gone3 Perform BASIC Keyword a81d 43037 restor Perform [restore] a82c 43052 stop Perform [stop], [end], break a857 43095 cont Perform [cont] a871 43121 run Perform [run] a883 43139 gosub Perform [gosub] a8a0 43168 goto Perform [goto] a8d2 43218 return Perform [return] a8f8 43256 data Perform [data] a906 43270 datan Search for Next Statement / Line a928 43304 if Perform [if] a93b 43323 rem Perform [rem] a94b 43339 ongoto Perform [on] a96b 43371 linget Fetch linnum From BASIC a9a5 43429 let Perform [let] a9c4 43460 putint Assign Integer a9d6 43478 ptflpt Assign Floating Point a9d9 43481 putstr Assign String a9e3 43491 puttim Assign TI$ aa2c 43564 getspt Add Digit to FAC#1 aa80 43648 printn Perform [print]# aa86 43654 cmd Perform [cmd] aa9a 43674 strdon Print String From Memory aaa0 43680 print Perform [print] aab8 43704 varop Output Variable aad7 43735 crdo Output CR/LF aae8 43752 comprt Handle comma, TAB(, SPC( ab1e 43806 strout Output String ab3b 43835 outspc Output Format Character ab4d 43853 doagin Handle Bad Data ab7b 43899 get Perform [get] aba5 43941 inputn Perform [input#] abbf 43967 input Perform [input] abea 44010 bufful Read Input Buffer abf9 44025 qinlin Do Input Prompt ac06 44038 read Perform [read] ac35 44085 rdget General Purpose Read Routine acfc 44284 exint Input Error Messages TEXT ad1e 44318 next Perform [next] ad61 44385 donext Check Valid Loop ad8a 44426 frmnum Confirm Result ad9e 44446 frmevl Evaluate Expression in Text ae83 44675 eval Evaluate Single Term aea8 44712 pival Constant - pi DATA aead 44717 qdot Continue Expression aef1 44785 parchk Expression in Brackets aef7 44791 chkcls Confirm Character aef7 44791 - -test ')'- aefa 44794 - -test '('- aefd 44797 - -test comma- af08 44808 synerr Output ?SYNTAX Error af0d 44813 domin Set up NOT Function af14 44820 rsvvar Identify Reserved Variable af28 44840 isvar Search for Variable af48 44872 tisasc Convert TI to ASCII String afa7 44967 isfun Identify Function Type afb1 44977 strfun Evaluate String Function afd1 45009 numfun Evaluate Numeric Function afe6 45030 orop Perform [or], [and] b016 45078 dorel Perform <, =, > b01b 45083 numrel Numeric Comparison b02e 45102 strrel String Comparison b07e 45182 dim Perform [dim] b08b 45195 ptrget Identify Variable b0e7 45287 ordvar Locate Ordinary Variable b11d 45341 notfns Create New Variable b128 45352 notevl Create Variable b194 45460 aryget Allocate Array Pointer Space b1a5 45477 n32768 Constant 32768 in Flpt DATA b1aa 45482 facinx FAC#1 to Integer in (AC/YR) b1b2 45490 intidx Evaluate Text for Integer b1bf 45503 ayint FAC#1 to Positive Integer b1d1 45521 isary Get Array Parameters b218 45592 fndary Find Array b245 45637 bserr ?BAD SUBSCRIPT/?ILLEGAL QUANTITY b261 45665 notfdd Create Array b30e 45838 inlpn2 Locate Element in Array b34c 45900 umult Number of Bytes in Subscript b37d 45949 fre Perform [fre] b391 45969 givayf Convert Integer in (AC/YR) to Flpt b39e 45982 pos Perform [pos] b3a6 45990 errdir Confirm Program Mode b3e1 46049 getfnm Check Syntax of FN b3f4 46068 fndoer Perform [fn] b465 46181 strd Perform [str$] b487 46215 strlit Set Up String b4d5 46293 putnw1 Save String Descriptor b4f4 46324 getspa Allocate Space for String b526 46374 garbag Garbage Collection b5bd 46525 dvars Search for Next String b606 46598 grbpas Collect a String b63d 46653 cat Concatenate Two Strings b67a 46714 movins Store String in High RAM b6a3 46755 frestr Perform String Housekeeping b6db 46811 frefac Clean Descriptor Stack b6ec 46828 chrd Perform [chr$] b700 46848 leftd Perform [left$] b72c 46892 rightd Perform [right$] b737 46903 midd Perform [mid$] b761 46945 pream Pull sTring Parameters b77c 46972 len Perform [len] b782 46978 len1 Exit String Mode b78b 46987 asc Perform [asc] b79b 47003 gtbytc Evaluate Text to 1 Byte in XR b7ad 47021 val Perform [val] b7b5 47029 strval Convert ASCII String to Flpt b7eb 47083 getnum Get parameters for POKE/WAIT b7f7 47095 getadr Convert FAC#1 to Integer in LINNUM b80d 47117 peek Perform [peek] b824 47140 poke Perform [poke] b82d 47149 wait Perform [wait] b849 47177 faddh Add 0.5 to FAC#1 b850 47184 fsub Perform Subtraction b862 47202 fadd5 Normalise Addition b867 47207 fadd Perform Addition b947 47431 negfac 2's Complement FAC#1 b97e 47486 overr Output ?OVERFLOW Error b983 47491 mulshf Multiply by Zero Byte b9bc 47548 fone Table of Flpt Constants DATA b9ea 47594 log Perform [log] ba28 47656 fmult Perform Multiply ba59 47705 mulply Multiply by a Byte ba8c 47756 conupk Load FAC#2 From Memory bab7 47799 muldiv Test Both Accumulators bad4 47828 mldvex Overflow / Underflow bae2 47842 mul10 Multiply FAC#1 by 10 baf9 47865 tenc Constant 10 in Flpt DATA bafe 47870 div10 Divide FAC#1 by 10 bb07 47879 fdiv Divide FAC#2 by Flpt at (AC/YR) bb0f 47887 fdivt Divide FAC#2 by FAC#1 bba2 48034 movfm Load FAC#1 From Memory bbc7 48071 mov2f Store FAC#1 in Memory bbfc 48124 movfa Copy FAC#2 into FAC#1 bc0c 48140 movaf Copy FAC#1 into FAC#2 bc1b 48155 round Round FAC#1 bc2b 48171 sign Check Sign of FAC#1 bc39 48185 sgn Perform [sgn] bc58 48216 abs Perform [abs] bc5b 48219 fcomp Compare FAC#1 With Memory bc9b 48283 qint Convert FAC#1 to Integer bccc 48332 int Perform [int] bcf3 48371 fin Convert ASCII String to a Number in FAC#1 bdb3 48563 n0999 String Conversion Constants DATA bdc2 48578 inprt Output 'IN' and Line Number bddd 48605 fout Convert FAC#1 to ASCII String be68 48744 foutim Convert TI to String bf11 48913 fhalf Table of Constants DATA bf71 49009 sqr Perform [sqr] bf7b 49019 fpwrt Perform power ($) bfb4 49076 negop Negate FAC#1 bfbf 49087 logeb2 Table of Constants DATA bfed 49133 exp Perform [exp] ; ; ; C64 Kernal ROM ; e000 57344 (exp continues) EXP continued From BASIC ROM e043 57411 polyx Series Evaluation e08d 57485 rmulc Constants for RND DATA e097 57495 rnd Perform [rnd] e0f9 57593 bioerr Handle I/O Error in BASIC e10c 57612 bchout Output Character e112 57618 bchin Input Character e118 57624 bckout Set Up For Output e11e 57630 bckin Set Up For Input e124 57636 bgetin Get One Character e12a 57642 sys Perform [sys] e156 57686 savet Perform [save] e165 57701 verfyt Perform [verify / load] e1be 57790 opent Perform [open] e1c7 57799 closet Perform [close] e1d4 57812 slpara Get Parameters For LOAD/SAVE e200 57856 combyt Get Next One Byte Parameter e206 57862 deflt Check Default Parameters e20e 57870 cmmerr Check For Comma e219 57881 ocpara Get Parameters For OPEN/CLOSE e264 57956 cos Perform [cos] e26b 57963 sin Perform [sin] e2b4 58036 tan Perform [tan] e2e0 58080 pi2 Table of Trig Constants DATA ;e2e0 1.570796327 pi/2 ;e2e5 6.28318531 pi*2 ;e2ea 0.25 ;e2ef #05 (counter) ;e2f0 -14.3813907 ;e2f5 42.0077971 ;e2fa -76.7041703 ;e2ff 81.6052237 ;e304 -41.3417021 ;e309 6.28318531 e30e 58126 atn Perform [atn] e33e 58174 atncon Table of ATN Constants DATA ;e33e #0b (counter) ;e3ef -0.000684793912 ;e344 0.00485094216 ;e349 -0.161117018 ;e34e 0.034209638 ;e353 -0.0542791328 ;e358 0.0724571965 ;e35d -0.0898023954 ;e362 0.110932413 ;e367 -0.142839808 ;e36c 0.19999912 ;e371 -0.333333316 ;e376 1.00 e37b 58235 bassft BASIC Warm Start [RUNSTOP-RESTORE] e394 58260 init BASIC Cold Start e3a2 58274 initat CHRGET For Zero-page e3ba 58298 rndsed RND Seed For zero-page DATA ;e3b2 0.811635157 e3bf 58303 initcz Initialize BASIC RAM e422 58402 initms Output Power-Up Message e447 58439 bvtrs Table of BASIC Vectors (for 0300) WORD e453 58451 initv Initialize Vectors e45f 58463 words Power-Up Message DATA e4ad 58541 - Patch for BASIC Call to CHKOUT e4b7 58551 - Unused Bytes For Future Patches EMPTY e4da 58586 - Reset Character Colour e4e0 58592 - Pause After Finding Tape File e4ec 58604 - RS-232 Timing Table -- PAL DATA e500 58624 iobase Get I/O Address e505 58629 screen Get Screen Size e50a 58634 plot Put / Get Row And Column e518 58648 cint1 Initialize I/O e544 58692 - Clear Screen e566 58726 - Home Cursor e56c 58732 - Set Screen Pointers e59a 58778 - Set I/O Defaults (Unused Entry) e5a0 58784 - Set I/O Defaults e5b4 58804 lp2 Get Character From Keyboard Buffer e5ca 58826 - Input From Keyboard e632 58930 - Input From Screen or Keyboard e684 59012 - Quotes Test e691 59025 - Set Up Screen Print e6b6 59062 - Advance Cursor e6ed 59117 - Retreat Cursor e701 59137 - Back on to Previous Line e716 59158 - Output to Screen e72a 59178 - -unshifted characters- e7d4 59348 - -shifted characters- e87c 59516 - Go to Next Line e891 59537 - Output e8a1 59553 - Check Line Decrement e8b3 59571 - Check Line Increment e8cb 59595 - Set Colour Code e8da 59610 - Colour Code Table e8ea 59626 - Scroll Screen e965 59749 - Open A Space On The Screen e9c8 59848 - Move A Screen Line e9e0 59872 - Syncronise Colour Transfer e9f0 59888 - Set Start of Line e9ff 59903 - Clear Screen Line ea13 59923 - Print To Screen ea24 59940 - Syncronise Colour Pointer ea31 59953 - Main IRQ Entry Point ea87 60039 scnkey Scan Keyboard eadd 60125 - Process Key Image eb79 60281 - Pointers to Keyboard decoding tables WORD eb81 60289 - Keyboard 1 -- unshifted DATA ebc2 60354 - Keyboard 2 -- Shifted DATA ec03 60419 - Keyboard 3 -- Commodore DATA ec44 60484 - Graphics/Text Control ec78 60536 - Keyboard 4 -- Control DATA ecb9 60601 - Video Chip Setup Table DATA ece7 60647 - Shift-Run Equivalent ecf0 60656 - Low Byte Screen Line Addresses DATA ed09 60681 talk Send TALK Command on Serial Bus ed0c 60684 listn Send LISTEN Command on Serial Bus ed40 60736 - Send Data On Serial Bus edad 60845 - Flag Errors edad 60845 - Status #80 - device not present edb0 60848 - Status #03 - write timeout edb9 60857 second Send LISTEN Secondary Address edbe 60862 - Clear ATN edc7 60871 tksa Send TALK Secondary Address edcc 60876 - Wait For Clock eddd 60893 ciout Send Serial Deferred edef 60911 untlk Send UNTALK / UNLISTEN ee13 60947 acptr Receive From Serial Bus ee85 61061 - Serial Clock On ee8e 61070 - Serial Clock Off ee97 61079 - Serial Output 1 eea0 61088 - Serial Output 0 eea9 61097 - Get Serial Data And Clock In eeb3 61107 - Delay 1 ms eebb 61115 - RS-232 Send ef06 61190 - Send New RS-232 Byte ef2e 61230 - 'No DSR' / 'No CTS' Error ef39 61241 - Disable Timer ef4a 61258 - Compute Bit Count ef59 61273 - RS-232 Receive ef7e 61310 - Set Up To Receive ef90 61328 - Process RS-232 Byte efe1 61409 - Submit to RS-232 f00d 61453 - No DSR (Data Set Ready) Error f017 61463 - Send to RS-232 Buffer f04d 61517 - Input From RS-232 f086 61574 - Get From RS-232 f0a4 61604 - Serial Bus Idle f0bd 61629 - Table of Kernal I/O Messages DATA f12b 61739 - Print Message if Direct f12f 61743 - Print Message f13e 61758 getin Get a byte f157 61783 chrin Input a byte f199 61849 - Get From Tape / Serial / RS-232 f1ca 61898 chrout Output One Character f20e 61966 chkin Set Input Device f250 62032 chkout Set Output Device f291 62097 close Close File f30f 62223 - Find File f31f 62239 - Set File values f32f 62255 clall Abort All Files f333 62259 clrchn Restore Default I/O f34a 62282 open Open File f3d5 62421 - Send Secondary Address f409 62473 - Open RS-232 f49e 62622 load Load RAM f4b8 62648 - Load File From Serial Bus f533 62771 - Load File From Tape f5af 62927 - Print "SEARCHING" f5c1 62913 - Print Filename f5d2 62930 - Print "LOADING / VERIFYING" f5dd 62941 save Save RAM f5fa 62970 - Save to Serial Bus f659 63065 - Save to Tape f68f 63119 - Print "SAVING" f69b 63131 udtim Bump Clock f6dd 63197 rdtim Get Time f6e4 63204 settim Set Time f6ed 63213 stop Check STOP Key f6fb 63227 - Output I/O Error Messages f6fb 63227 - 'too many files' f6fe 63230 - 'file open' f701 63233 - 'file not open' f704 63236 - 'file not found' f707 63239 - 'device not present' f70a 63242 - 'not input file' f70d 63245 - 'not output file' f710 63248 - 'missing filename' f713 63251 - 'illegal device number' f72d 63277 - Find Any Tape Header f76a 63338 - Write Tape Header f7d0 63440 - Get Buffer Address f7d7 63447 - Set Buffer Stat / End Pointers f7ea 63466 - Find Specific Tape Header f80d 63501 - Bump Tape Pointer f817 63511 - Print "PRESS PLAY ON TAPE" f82e 63534 - Check Tape Status f838 63544 - Print "PRESS RECORD..." f841 63553 - Initiate Tape Read f864 63588 - Initiate Tape Write f875 63605 - Common Tape Code f8d0 63696 - Check Tape Stop f8e2 63714 - Set Read Timing f92c 63788 - Read Tape Bits fa60 64096 - Store Tape Characters fb8e 64398 - Reset Tape Pointer fb97 64407 - New Character Setup fba6 64422 - Send Tone to Tape fbc8 64456 - Write Data to Tape fbcd 64461 - IRQ Entry Point fc57 64599 - Write Tape Leader fc93 64659 - Restore Normal IRQ fcb8 64696 - Set IRQ Vector fcca 64714 - Kill Tape Motor fcd1 64721 - Check Read / Write Pointer fcdb 64731 - Bump Read / Write Pointer fce2 64738 - Power-Up RESET Entry fd02 64770 - Check For 8-ROM fd12 64786 - 8-ROM Mask '80CBM' DATA fd15 64789 restor Restore Kernal Vectors (at 0314) fd1a 64794 vector Change Vectors For User fd30 64816 - Kernal Reset Vectors WORD fd50 64848 ramtas Initialise System Constants fd9b 64923 - IRQ Vectors For Tape I/O WORD fda3 64931 ioinit Initialise I/O fddd 64989 - Enable Timer fdf9 65017 setnam Set Filename fe00 65024 setlfs Set Logical File Parameters fe07 65031 readst Get I/O Status Word fe18 65048 setmsg Control OS Messages fe21 65057 settmo Set IEEE Timeout fe25 65061 memtop Read / Set Top of Memory fe34 65076 membot Read / Set Bottom of Memory fe43 65091 - NMI Transfer Entry fe66 65126 - Warm Start Basic [BRK] febc 65212 - Exit Interrupt fec2 65218 - RS-232 Timing Table - NTSC DATA fed6 65238 - NMI RS-232 In ff07 65287 - NMI RS-232 Out ff43 65347 - Fake IRQ Entry ff48 65352 - IRQ Entry ff5b 65371 cint Initialize screen editor ff80 65408 - Kernal Version Number [03] DATA ; ; C64 Kernal Jump Table ; ff81 jmp $ff5b cint Init Editor & Video Chips ff84 jmp $fd23 ioinit Init I/O Devices, Ports & Timers ff87 jmp $fd50 ramtas Init Ram & Buffers ff8a jmp $fd15 restor Restore Vectors ff8d jmp $fd1a vector Change Vectors For User ff90 jmp $fe18 setmsg Control OS Messages ff93 jmp $edb9 secnd Send SA After Listen ff96 jmp $edc7 tksa Send SA After Talk ff99 jmp $fe25 memtop Set/Read System RAM Top ff9c jmp $fe34 membot Set/Read System RAM Bottom ff9f jmp $ea87 scnkey Scan Keyboard ffa2 jmp $fe21 settmo Set Timeout In IEEE ffa5 jmp $ee13 acptr Handshake Serial Byte In ffa8 jmp $eddd ciout Handshake Serial Byte Out ffab jmp $edef untalk Command Serial Bus UNTALK ffae jmp $edfe unlsn Command Serial Bus UNLISTEN ffb1 jmp $ed0c listn Command Serial Bus LISTEN ffb4 jmp $ed09 talk Command Serial Bus TALK ffb7 jmp $fe07 readss Read I/O Status Word ffba jmp $fe00 setlfs Set Logical File Parameters ffbd jmp $fdf9 setnam Set Filename ffc0 jmp ($031a) (iopen) Open Vector [f34a] ffc3 jmp ($031c) (iclose) Close Vector [f291] ffc6 jmp ($031e) (ichkin) Set Input [f20e] ffc9 jmp ($0320) (ichkout) Set Output [f250] ffcc jmp ($0322) (iclrch) Restore I/O Vector [f333] ffcf jmp ($0324) (ichrin) Input Vector, chrin [f157] ffd2 jmp ($0326) (ichrout) Output Vector, chrout [f1ca] ffd5 jmp $f49e load Load RAM From Device ffd8 jmp $f5dd save Save RAM To Device ffdb jmp $f6e4 settim Set Real-Time Clock ffde jmp $f6dd rdtim Read Real-Time Clock ffe1 jmp ($0328) (istop) Test-Stop Vector [f6ed] ffe4 jmp ($032a) (igetin) Get From Keyboad [f13e] ffe7 jmp ($032c) (iclall) Close All Channels And Files [f32f] ffea jmp $f69b udtim Increment Real-Time Clock ffed jmp $e505 screen Return Screen Organization fff0 jmp $e50a plot Read / Set Cursor X/Y Position fff3 jmp $e500 iobase Return I/O Base Address ;fff6 Vectors fff6 [5252] - fff8 [5942] SYSTEM ;fffa Transfer Vectors fffa [fe43] NMI fffc [fce2] RESET fffe [ff48] IRQ ********* End of the Project 64 etext of Commodore_64_ROM_Memory_Map.doc ********* The Project 64 etext of Commodore_64_ROM_Memory_Map.txt ********* ; ------ ; ; Commodore 64 ROM Memory Map ; ; BASIC interpreter ROM ($A000 - $BFFF) ; ; label address type comments restart = $a000 stmdsp = $a00c fundsp = $a052 optab = $a080 reslst = $a09e msclst = $a129 oplist = $a140 funlst = $a14d errtab = $a19e errptr = $a328 okk = $a364 fndfor = $a38a bltu = $a3b8 getstk = $a3fb reason = $a408 omerr = $a435 error = $a437 errfin = $a469 ready = $a474 main = $a480 main1 = $a49c inslin = $a4a2 linkprg = $a533 inlin = $a560 crunch = $a579 fndlin = $a613 scrtch = $a642 clear = $a65e stxpt = $a68e list = $a69c qplop = $a717 for = $a742 newstt = $a7ae ckeol = $a7c4 gone = $a7e1 gone3 = $a7ed restor = $a81d stop = $a82c cont = $a857 run = $a871 gosub = $a883 goto = $a8a0 return = $a8d2 data = $a8f8 datan = $a906 if = $a928 rem = $a93b ongoto = $a94b linget = $a96b let = $a9a5 putint = $a9c4 ptflpt = $a9d6 putstr = $a9d9 puttim = $a9e3 getspt = $aa2c printn = $aa80 cmd = $aa86 strdon = $aa9a print = $aaa0 varop = $aab8 crdo = $aad7 comprt = $aae8 strout = $ab1e outspc = $ab3b doagin = $ab4d get = $ab7b inputn = $aba5 input = $abbf bufful = $abea qinlin = $abf9 read = $ac06 rdget = $ac35 exint = $acfc next = $ad1e donext = $ad61 frmnum = $ad8a frmevl = $ad9e eval = $ae83 pival = $aea8 qdot = $aead parchk = $aef1 chkcls = $aef7 synerr = $af08 domin = $af0d rsvvar = $af14 isvar = $af28 tisasc = $af48 isfun = $afa7 strfun = $afb1 numfun = $afd1 orop = $afe6 dorel = $b016 numrel = $b01b strrel = $b02e dim = $b07e ptrget = $b08b ordvar = $b0e7 isletc = $b113 notfns = $b11d notevl = $b128 aryget = $b194 n32768 = $b1a5 data facinx = $b1aa intidx = $b1b2 ayint = $b1bf isary = $b1d1 fndary = $b218 bserr = $b245 notfdd = $b261 inlpn2 = $b30e umult = $b34c fre = $b37d givayf = $b391 pos = $b39e errdir = $b3a6 def = $b3b3 getfnm = $b3e1 fndoer = $b3f4 strd = $b465 strlit = $b487 putnw1 = $b4d5 getspa = $b4f4 garbag = $b526 dvars = $b5bd grbpas = $b606 cat = $b63d movins = $b67a frestr = $b6a3 frefac = $b6db chrd = $b6ec leftd = $b700 rightd = $b72c midd = $b737 pream = $b761 len = $b77c len1 = $b782 asc = $b78b gtbytc = $b79b val = $b7ad strval = $b7b5 getnum = $b7eb getadr = $b7f7 peek = $b80d poke = $b824 wait = $b82d faddh = $b849 fsub = $b850 fadd5 = $b862 fadd = $b867 negfac = $b947 overr = $b97e mulshf = $b983 fone = $b9bc data log = $b9ea fmult = $ba28 mulply = $ba59 conupk = $ba8c muldiv = $bab7 mldvex = $bad4 mul10 = $bae2 tenc = $baf9 data div10 = $bafe fdiv = $bb07 fdivt = $bb0f movfm = $bba2 mov2f = $bbc7 movfa = $bbfc movaf = $bc0c round = $bc1b sign = $bc2b sgn = $bc39 abs = $bc58 fcomp = $bc5b qint = $bc9b int = $bccc fin = $bcf3 n0999 = $bdb3 data inprt = $bdc2 fout = $bddd foutim = $be68 fhalf = $bf11 data sqr = $bf71 fpwrt = $bf7b negop = $bfb4 logeb2 = $bfbf data exp = $bfed ; ; ; C64 KERNEL ROM ; (exp = $e000 polyx = $e043 rmulc = $e08d data rnd = $e097 bioerr = $e0f9 bchout = $e10c bchin = $e112 bckout = $e118 bckin = $e11e bgetin = $e124 sys = $e12a savet = $e156 verfyt = $e165 opent = $e1be closet = $e1c7 slpara = $e1d4 combyt = $e200 deflt = $e206 cmmerr = $e20e ocpara = $e219 cos = $e264 sin = $e26b tan = $e2b4 pi2 = $e2e0 data atn = $e30e atncon = $e33e data bassft = $e37b init = $e394 initat = $e3a2 rndsed = $e3ba initcz = $e3bf initms = $e422 bvtrs = $e447 data initv = $e453 words = $e45f - = $e4ad - = $e4b7 illegal - = $e4da - = $e4e0 - = $e4ec data iobase = $e500 screen = $e505 plot = $e50a cint1 = $e518 - = $e544 - = $e566 - = $e56c = ; - = $e59a lp2 = $e5b4 - = $e5ca - = $e632 - = $e684 - = $e691 - = $e6b6 - = $e6ed - = $e701 - = $e716 - = $e87c - = $e891 - = $e8a1 - = $eacb - = $e8da - = $e8ea - = $e965 - = $e9c8 - = $e9e0 - = $e9f0 - = $e9ff - = $ea13 - = $ea24 - = $ea31 scnkey = $ea87 - = $eadd data - = $eb79 data - = $eb81 data - = $ebc2 data - = $ec03 - = $ec44 data - = $ec78 data - = $ecb9 - = $ece7 data - = $ecf0 talk = $ed09 - = $ed40 - = $edad second = $edb9 - = $edbe tksa = $edc7 - = $edcc ciout = $eddd untlk = $edef acptr = $ee13 - = $ee85 - = $ee8e - = $ee97 - = $eea0 - = $eea9 - = $eeb3 - = $eebb - = $ef06 - = $ef2e - = $ef39 - = $ef4a - = $ef59 - = $ef7e - = $ef90 - = $efe1 - = $f00d - = $f017 - = $f04d - = $f086 - = $f0a4 - = $f0bd - = $f128 getin = $f13e chrin = $f157 - = $f199 chrout = $f1ca chkin = $f20e chkout = $f250 close = $f291 - = $f30f - = $f31f clall = $f32f clrchn = $f333 open = $f34a - = $f3d5 - = $f409 load = $f49e ; ;-------------- ; save = $f5dd udtim = $f69b rdtim = $f6dd settim = $f6e4 stop = $f6ed restor = $fd15 vector = $fd1a ramtas = $fd50 ioinit = $fda3 setnam = $fdf9 setlfs = $fe00 readst = $fe07 setmsg = $fe18 settmo = $fe21 memtop = $fe25 membot = $fe34 cint = $fe58 ; ; ; C64 KERNEL call addresses ; acptr = $ffa5 chkin = $ffc6 chkout = $ffc9 chrin = $ffcf chrout = $ffd2 ciout = $ffa8 cint = $ff81 clall = $ffe7 close = $ffc3 clrchn = $ffcc getin = $ffe4 iobase = $fff3 ioinit = $ff84 listen = $ffb1 load = $ffd5 membot = $ff9c memtop = $ff99 open = $ffc0 plot = $fff0 ramtas = $ff87 rdtim = $ffde readst = $ffb7 restor = $ff8a save = $ffd8 scnkey = $ff9f screen = $ffed second = $ff93 setlfs = $ffba setmsg = $ff90 setnam = $ffbd settim = $ffdb settmo = $ffa2 stop = $ffe1 talk = $ffb4 tksa = $ff96 udtim = $ffea unlsn = $ffae untlk = $ffab vector = $ff8d ; ********* End of the Project 64 etext of Commodore_64_ROM_Memory_Map.txt ********* End of the Project 64 etext 64MAP10.TXT, several Commodore 64 memory maps. *********