Chapter 10: Commander X16 Programmer's Reference Guide

I/O Programming

There are two 65C22 "Versatile Interface Adapter" (VIA) I/O controllers in the system, VIA#1 at address $9F60 and VIA#2 at address $9F70. The IRQ out lines of VIA#1 is connected to the CPU's NMI line, while the IRQ out line of VIA#2 is connected to the CPU's IRQ line.

The-following tables describe the connections of the I/O pins:

VIA#1

Pin Name Description
PA0 PS2KDAT PS/2 DATA keyboard
PA1 PS2KCLK PS/2 CLK keyboard
PA2 NESLATCH NES LATCH (for all controllers)
PA3 NESCLK NES CLK (for all controllers)
PA4 NESDAT3 NES DATA (controller 3)
PA5 NESDAT2 NES DATA (controller 2)
PA6 NESDAT1 NES DATA (controller 1)
PA7 NESDAT0 NES DATA (controller 0)
PB0 PS2MDAT PS/2 DATA mouse
PB1 PS2MCLK PS/2 CLK mouse
PB2 I2CDATA I2C DATA
PB3 SERATNO Serial ATN out
PB4 SERCLKO Serial CLK out
PB5 SERDATAO Serial DATA out
PB6 SERCLKI Serial CLK in
PB7 SERDATAI Serial DATA in
CB2 I2CCLK I2C CLK

The KERNAL uses Timer 2 for timing transmissions on the Serial Bus.

VIA#2

The second VIA is completely unused by the system. All its 16 GPIOs and 4 handshake I/Os can be freely used.

I2C Bus

The Commander X16 contains an I2C bus, which is implemented through two pins of VIA#1. The system management controller (SMC) and the real-time clock (RTC) are connected through this bus. The KERNAL APIs i2c_read_byte and i2c_write_byte allow talking to these devices.

System Management Controller

The system management controller (SMC) is device $42 on the I2C bus. It controls the power and activity LEDs, and can be used to power down the system or inject RESET and NMI signals.

Register Value Description
$01 $00 Power off
$01 $01 Hard reboot
$02 $00 Inject RESET
$03 $00 Inject NMI
$04 $00..$FF Power LED brightness
$05 $00..$FF Activity LED brightness

Real-Time-Clock

The Commander X16 contains a battery-backed Microchip MCP7940N real-time-clock (RTC) chip as device $6F. It provide a real-time clock/calendar, two alarms and 64 bytes of RAM.

Register Description
$00 Clock seconds
$01 Clock minutes
$02 Clock hours
$03 Clock weekday
$04 Clock day
$05 Clock month
$06 Clock year
$07 Control
$08 Oscillator trim
$09 reserved
$0A Alarm 0 seconds
$0B Alarm 0 minutes
$0C Alarm 0 hours
$0D Alarm 0 weekday
$0E Alarm 0 day
$0F Alarm 0 month
$10 reserved
$11 Alarm 1 seconds
$12 Alarm 1 minutes
$13 Alarm 1 hours
$14 Alarm 1 weekday
$15 Alarm 1 day
$16 Alarm 1 month
$17 reserved
$18 Power-fail minutes
$19 Power-fail hours
$1A Power-fail day
$1B Power-fail month
$1C Power-up minutes
$1D Power-up hours
$1E Power-up day
$1F Power-up month
$20-$5F 64 Bytes SRAM

For more information, please refer to this device's datasheet.