; 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 (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 O X Pos D001 53249 Sprite O 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: O = 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 O 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 O 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: O-15 3-0 Select Decay Cycle Duration: 0-15 D406 54278 Envelope Generator 1: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: O-15 3-0 Select Release Cycle Duration: O-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: O-15 3-0 Select Decay Cycle Duration: 0-15 D414 54285 Envelope Generator 3: Sustain / Release Cycle Control 7-4 Select Sustain Cycle Duration: O-15 3-0 Select Release Cycle Duration: O-15 D415 54293 Filter Cutoff Frequency: Low-Nybble (Bits 2-O) 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 (O-255) D41A 54298 Analog/Digital Converter Game Paddle 2 (O-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-O 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 DEOO-DEFF 56832-57087 Reserved for Future I/O Expansion DFOO-DFFF 57088-57343 Reserved for Future I/O Expansion