The venerable Commodore 64, is there anything it can’t do? Like many 1980s computer platforms, direct access to memory and peripherals makes hacking easy and fun. In particular, you’ll find serial & parallel ports are ripe for experimentation, but the Commodore has its expansion/cartridge port, too, and [Frank Buss] decided to hook it up to a two-line character LCD.
Using the expansion port for this duty is a little unconventional. Unlike the parallel port, the expansion port doesn’t have a stable output, as such. The port contains the data lines of the 6510 CPU and thus updates whenever RAM is read or written to, rather then updating in a controlled fashion like a parallel port does. However, [Frank] found a way around this – the IO1 and IO2 lines go low when certain areas of memory are written to. By combining these with latch circuitry, it’s possible to gain up to 16 parallel output lines – more than enough to drive a simple HD44780 display! It’s a testament to the flexibility of 74-series logic.
It’s all built on a C64 cartridge proto-board of [Frank]’s own design, and effort was made to ensure the LCD works with BASIC for easy experimentation. It’s a tidy mod that could easily be built into a nice enclosure and perhaps used as the basis for an 8-bit automation project. Someone’s gotta top that Amiga 2000 running the school district HVAC, after all!
Memory mapped i/o. I have done it for many many years, starting with the vic-20 and working all the way to modern PC machines. He just doesn’t map very efficiently from the looks of it. A little more logic and you can get it down to one memory location rather than an 8 bit wide location. Always good to see someone working with the good old hardware though. You learn a lot that way.
Right, for some serious address decoding I would use a CPLD, as I’ve done in my Kerberos cartridge:
http://www.frank-buss.de/kerberos/index.html
This was just a simple example everyone can build themselves, because no HDL or programmer is needed for it., or soldering SMD parts.
for the c64, you just need a few logic gates to do address decoding really. CPLD just pretends to be a few logic gates I suppose.
Yes, with a CPLD you can implement a lot of logic gates, it is like the old GALs and PALs, but with more configurable logic. I thought about implementing a 8 bit read port as well, but this would require another latch, but with tri-state outputs, like a 74373. And then it would be nice if you could program if a pin is an output or an input, as it is possible with the user port and the 6522, but this would require even more gates. Would fit all in one CPLD easily, 16 IOs, even with some advanced techniques I read in some datasheets for ARM CPUs, where the bits in the IO register are mirrored to individual bytes (in addition to the one register with all bits), to allow changing individual bits without the need to read them first, should be no problem.
While in college (the class was Advanced Physics Lab), we hooked up AD converters to C64s directly to the address bus (through optical isolators). We then programmed in assembler and were able to get a data point every 10 ms. It was quite fun. We then measured the deceleration of a projectile the professor fired from a BB gun to determine its initial velocity.