The C64 Serial _PORT_
The C64 Kernal does have routines that implement a serial port
using certain pins on the C64 User Port. But if you don't mind
writing your own driver then theoretically speaking all you
need to implement a bidirectional serial port is two bits on a
port with the capability of defining one as input and the other
as output (the input bit should be capable of generating an
interrupt), and a ground reference. And if you want RS-232C
signal levels (many computers and other serial devices are
just fine with TTL level signals) you need to add a RS-232
driver and receiver to the interface. Back then that meant
the 1488 and 1489. Today you have the ADM202,MAX202 and the
LT1181.
There is a problem with the C64 RS-232 Kernal routines. It
turns out that the time they take to process one bit plus the
timer value for one 1200 baud bit time was slightly more than
one 1200 baud bit time. By the 8th bit, the timer interrupt is
happening more than 1/2 bit time late, missing a bit. This is why
in the early days (before 1985) people had to set the serial
port speed to 1210 baud in order to receive reliably at 1200
baud. And of course you really needed two stop bit time to
to prepare for the next byte. I really believe that our group
wrote the first serial driver to allow the C64 to run full
speed at 1200 baud.
If you don't need interrupt driven serial routines, we use
to do our software development on the Stratus and then download
to the C64s in our offices using a serial cable that plugged into
one of the joystick ports. Software in the C64 would bit-bang
the joystick port at 9600 baud (with the screen blanked).
The C64 Serial _BUS_
All fast serial disk software for the C64 can actually be
traced back to those clever C64 users in Germany, they did it
first. I reverse engineered the Epyx cartridge about 1985.
Yes, bits were transfered two at a time with another line used
to to signal "ready to receive a byte". I do remember that the
intrabyte transfer time for two bits was 10 clock cycles. That
doesn't include any of the byte setup time. We were loading
just over 50K in less than 15 seconds.
The real trick to fast disk routines without blanking the screen
was knowing not ask for a byte to be transfered from the disk
when the video chip was drawing every 8th scan line. In the C64,
the video chip causes a DMA at the end of every 8th scan line
to access video ram and get the information for the next 8 lines.
This tristates the 6510 for 40 clock cycles and no instructions
can be executed.
Just my $.02
--Doug
====================================================
Doug Coward dcoward(a)pressstart.com (work)
Sr. Software Eng. mranalog(a)home.com (home)
Press Start Inc.
http://www.pressstart.com
Sunnyvale,CA
Curator
Analog Computer Museum and History Center
http://www.best.com/~dcoward/analog
====================================================