C64 UART16550A interface

(C) A. Fachat


This pages contains information on how to connect an UART 16550A to a 6502 system in general and a C64 system in particular.

Disclaimer

There is absolutely NO WARRANTY, neither expressed nor implied! Noone can be held responsible for any damage arising from the use or building of this interface or even from reading these pages! I do not claim nor guarantee that the hardware and software can be used for anything useful!

The UART 16550 is a RS232 interface chip that provides a 16 byte FIFO for the receiver and the transmitter. This allows a much larger interrupt latency time - the time between an interrupt being generated by the chip and the time it is served - as up to 16 characters can be stored by the chip already.

I wrote an article about this interface including some software for The Computer Journal (TCJ) that has been published in issue #80. The article can be read in c64ser.txt.

The Interface

The interface for the C64 is a board being put into the C64 instead of the SID sound chip. The SID chip itself is put into a socket on this board, providing the sound capabilities. Three additional connections have to be made between the board the the C64 mainboard. These are the /IRQ interrupt line, the A9 address line to divide the 1k SID address space into two halfs, and a /EN input that is either open (unconnected) or connected to GND by a switch. The connection to GND enables the interface.

So if you still have warranty on your C64, or don't know what a soldering iron is, please stop reading. You may just damage your computer.

The schematics are here in the usual GNUzipped postscript c64-uart.ps or PNG c64-uart.png file. The xfig source code is in c64-uart.fig.

The Software

For TCJ I wrote a small generic UART16550 device - well, I took the one from my GeckOS/A65 6502 operating system. However, the source can be read in c64-uart.a65. It uses the format of my own xa65 6502 cross assembler.

I have also written a patched C64 kernal to support this serial line interface. Unfortunately it comes completely with an IEEE488 interface code and other features, why I do only include the source here. The source file a C64 loadable file called BS-1.40.S89 and my atass assembler is needed to build the ROM replacement file. The source of the IEEE488 interface (which is at $DF**) should be ignored, though. The RS232 routines should be usable by all programs that use the standard kernal routines for device 2, but the speed goes up to 19200.