|I got my longest lasting chrismas present ever: My old Elf II computer. It still works, but it has gotten old. The bus connectors don't have good contacts anymore, the keys on the hexadecimal keyboard are worn out and my experiments long ago have left some occasional weird glitches. On a good day the old dog is as good as ever, but most of the time it's not really a pleasure to do something with it anymore.
High time for retirement, but not without a replacement. I'm going to take the old Elf apart and check all the soldering, clean up the dust of 41 years on the boards and the connectors, remove all remains of my old modifications and repair whatever needs to be repaired. And then I hopefully have a grandpa of a computer from the time when you could not just buy your next one in any store.
And today I have opened my 'present', a box full of electronic parts, plus a device to program microcontrollers and some microcontrollers to play around with. And now the replacement for the old Elf is taking shape on a breadboard. Just 6 ICs. The microprocessor, an 32k EEPROM, a 32k RAM, two simple logic ICs and a MAX232 for serial communication. On the breadboard I'm going to clock it with slowpoky 1.0 MHz, but the processor can officially go up to 5 MHz and was also often overclocked. Not bad for a processor from 1976 and memory access times are not an issue anymore as they were then.
And if you have read carefully, you may have noticed that there is no UART on the breadboard. So how is this little computer going to do serial communication? The MAX232 IC only shifts the voltages of the input and output signals, nothing more. The processor has some programmable I/O lines, like a microcontroller. The RS232 protocol is bit banged in software. At 1 MHz this will not be very fast, 300, maybe 600 baud, but it's going to be enough to hook it up to an old notebook with terminal emulation.
If everything goes the way I would like it to, I can have the breadboard version running in a few days and can have a small board made. This minimal computer will allow to test the old Elf's expansion boards more easily and also to test all expansions, one at a time, without having to build the entire thing on breadboards.
The name was a little hard to come up with. Elf III? Boring. Super Elf? That one already was taken 41 years ago. It was your fondness of puns and wordplay here that gave me the idea: Zwölf. In German 'Elf' has several meanings and Zwölf is then the logical name for something that comes after Elf.
Now what kind of expansions might a real zwölf need?
First, I'm going to throw out the EEPROM and replace it with a pin compatible RAM. So how is the Zwölf going to start up without a ROM? The old Elf did that the simplest way. The processor has a 'LOAD' operating mode, where it does nothing but wait for some external device to request DMA. When that request comes, the processor acts as a DMA controller, stores the byte in memory and waits for the next request. That external device was the hexadecimal keypad and hexadecimal display. You were able to enter and start a program without a shred of software involved. As a bonus, both the hex keypad and displays would act as regular I/O ports at runtime.
For the Zwölf I want something a little more modern. A cheap 8 bit PIC microcontroller enters LOAD mode and feeds the bytes from a tiny serial ROM to the processor after every reset. This way I can load a BIOS or bootloader and can still support all old Elf features, including the 'all RAM' memory configuration. PIC microcontrollers will also have to encode the new keypad and act as display drivers. Hexadecimal encoders/drivers are hard to get these days.
Then the Zwölf needs a little more memory. Let's say, 16 mb banked memory should be enough for an 8 bit processor. Old Elf only has 4k and I had to sell my childhood to the neighbor's kids to get them. Ever since then I have expanded the memory of every new computer to the brim. There is no such thing as enough memory. Ever. Before I really build that, I would first like to test this with the ProtoZwölf and the breadboard.
Graphics are going to be a bit boring. In 'old Elf mode' the Zwölf should use the ancient CDP1861 graphics chip. It's really great. Hook this thing up to the processor's bus and get instant graphics. Monochrome and quite low resolution, but graphics with a single IC. This IC is extremely hard to get. It's probably been out of production for 35 years and almost impossible to buy anymore. The one in the old Elf is off limits off course, but I still have two spares in perfectly new condition. It also bogs down the processor to 1.79 MHz, so it is only useful to stay compatible to the old Elf. The Zwölf should run a little faster when it's not trying to be compatible.
The problem is that there are no graphics generators around anymore that might be useful. An 8 bit processor can only move so many bytes over it's bus, so colors and resolution must stay within certain limits. Bottom line: There are only two graphics generators that are suitable and fairly easy to get: The Motorola MC6847 and the Texas Instruments TMS9918. I don't like the TMS9918's organization of the video memory. It essentially has no real linear pixel graphics mode. And I found a 6847 in my parts box, so that's going to be it.
Last, I'm going to need some I/O ports. Here the microcontrollers will have to help out again. I'm going to need PS/2 ports for a keyboard and a mouse. I also want to use a microcontroller as an IDE port for mass storage. IDE is easy to do and I can use it with real (old) hard disk drives as well as with SD memory cards. Add a UART for a serial port and a parallel port and we're done with I/O. Almost. Does anyone know a good 8 bit sound chip that is still available?
And why build one Zwölf when I can have three in one? Why not let one Zwölf execute the program, the next one does the I/= and all the hassle with the FAT32 file system and the third one does graphics. Multitasking, 3D graphics or a UI? No problem for a Zwölf with three processors. I just need a suitable interface between the processors. Shared memory buffers? Simple, but lots of discrete logic on the boards. Serial connections are easy to do, but the slowest option. My best bet right now is bidirectional parallel ports. Faster than serial and almost as easy to build, far less logic than shared memory.
Whew. What a rant. So how do you like the Zwölf? I'm going to have years of fun if I really want to build all that.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.