I/O Map
The PTC-701 uses no CDP1802 OUT/INP instructions for peripheral I/O. All I/O is memory-mapped through the AMI 9217MLB custom gate array at addresses 0x3F00-0x3FFF. The only native 1802 I/O is the Q line and EF flags used for bit-banged serial communication.
EF Flags and Q Line
Q |
Serial TX output (bit-banged RS-232 transmit via SEQ/REQ) |
EF1 |
AMI chip status (display/keyboard ready) |
EF2 |
Serial handshake (CTS/DSR) |
EF3 |
Keyboard/status flag |
EF4 |
Serial RX data input (bit-banged) + startup mode select |
MM58174AN Real-Time Clock (0x3F00-0x3F0F)
0x3F00 |
W | Test register (write only, not used) |
0x3F01 |
R | Tenths of seconds (0-9, read only) |
0x3F02 |
R/W | Seconds units (0-9) |
0x3F03 |
R/W | Seconds tens (0-5) |
0x3F04 |
R/W | Minutes units (0-9) |
0x3F05 |
R/W | Minutes tens (0-5) |
0x3F06 |
R/W | Hours units (0-9) |
0x3F07 |
R/W | Hours tens (0-2) |
0x3F08 |
R/W | Days units (0-9) |
0x3F09 |
R/W | Days tens (0-3) |
0x3F0A |
R/W | Day of week (1-7) |
0x3F0B |
R/W | Months units (0-9) |
0x3F0C |
R/W | Months tens (0-1) |
0x3F0D |
W | Leap year counter (0-3, write only) |
0x3F0E |
W | Stop/Start (0=stop, 1=run, write only) |
0x3F0F |
R/W | Interrupt control (0x00 = disabled) |
Keyboard (0x3F20-0x3F25, 0x3F82-0x3F83)
0x3F20-0x3F25 |
R | Keyboard scan buffer (6 columns × 8 bits, bit=1 means pressed, MSB scanned first) |
0x3F82 |
W | Keyboard column enable mask byte 1 (0xFF = all enabled) |
0x3F83 |
W | Keyboard column enable mask byte 2 (0xFF = all enabled) |
HD44780 Display (0x3F50, 0x3F60-0x3F63, 0x3F80)
0x3F50 |
W | HD44780 data register (RS=1) - character data writes |
0x3F60 |
W | Display timing/control register 1 (init: 0x10) |
0x3F62 |
W | Display timing/control register 2 (init: 0x02) |
0x3F63 |
W | Display timing/control register 3 (init: 0x02) |
0x3F80 |
W | HD44780 command register (RS=0) - e.g. 0x80=line 1, 0xC0=line 2, 0x01=clear |
AMI 9217MLB Control Registers (0x3F81-0x3FA1)
0x3F81 |
R/W | Interrupt cause (read) / ACK (write) - read returns cause code, write acknowledges interrupt |
0x3FA0 |
R | Status register - bit 0 = busy flag (polled before I/O operations) |
0x3FA1 |
W | Keyboard/interrupt control (bit 0 = keyboard scan interrupt enable, bit 3 = debounce/scan rate) |
Bank Select Registers (0x3FA2, 0x3FC0-0x3FC3)
0x3FA2 |
W | Bank select - window 1 (app ROM at 0x4000-0x5FFF). 7-bit page value, sliding window with 256-byte granularity. |
0x3FC0 |
W | Bank select - window 2, slot 0 (expansion RAM 0x8000-0x9FFF) |
0x3FC1 |
W | Bank select - window 2, slot 1 (expansion RAM 0xA000-0xBFFF) |
0x3FC2 |
W | Bank select - window 2, slot 2 (expansion RAM 0xC000-0xDFFF) |
0x3FC3 |
W | Bank select - window 2, slot 3 (expansion RAM 0xE000-0xFFFF) |
Serial/Power Control (0x3FF0-0x3FF1)
0x3FF0 |
W | Serial/power control (0x00 = reset/disable) |
0x3FF1 |
W | Serial/power control 2 |