I had recently rebuilt the EX-80+ 80 column card from MK Datentechnik Berlin from 1984, and this under quite difficult conditions, as I reported here before. One advantage of this card is that it also supports CP/M 2.2, or the Commodore CP/M module.
Both alone are a fine thing, but together the whole thing is a powerful combination.
Why is it possible?
The CP/M operating system, respectively its applications are pretty much all designed to work with an 80 characters per line representation. The C64, however, has only 40 characters per line. With this many applications are not really fun.
There are software solutions that can display 80 characters per line by halving the single characters, but the readability suffers a lot.
Therefore, the first hardware extensions came onto the market quite quickly at that time, which were supposed to solve this problem. However, these cards were quite expensive at that time and a monitor was always needed. The TV sets at that time were not able to process the digital composite signal.
In addition, the cards were all proprietary solutions. They were mutually incompatible. Programs written for card A did not run on card B, and so on.
And there was rarely anything more than the usual text processing. Some had address management, but that was it.
But even the programs that were developed for the 40 character display almost never ran on the 80 column cards. At the latest when writing directly into the screen memory, which most programs did, it was over.
So these cards had a short shadowy existence and disappeared quite fast.
Now one has today substantially more possibilities, which are also in the comparison to at that time, substantially more inexpensive.
Thus one can put much, which was built up in former times with discrete TTL technology on large and expensive boards, today in appropriate CPLD technology and save much money and place.
Therefore the goal was to get the whole thing into a module case for the C64.
Without SMD, of course, it is no longer possible at this size. But I wanted to use largely standard components and not go to the smallest designs. Everything should be solderable for a halfway ambitious hobbyist. Therefore no BGA or QFN. And also not smaller than 0603. The CPLD may be the biggest challenge for most, but actually with a halfway usable soldering iron and a good tip (which should not be too small, by the way, bigger is better here) and a lot of flux such a component can be soldered quite easily.
I also wanted to avoid a double-sided assembly, because that poses problems for some, and is also more expensive if you want to have this done by one of the well-known board manufacturers.
I also wanted to avoid multilayers as much as possible to keep the costs as low as possible.
Therefore I decided to develop two boards, which can be piggybacked on each other, once the 80 column board, which can be used alone, and additionally the Z80 board with its own CPLD.
And I think I have developed a quite usable approach here, especially since it disappears completely into a cartridge case. On the left side only a small hole has to be drilled for the additional video output.
For this I decided to use a 3.5″ jack for space reasons. A cinch connection would not have fit from the height.
There are a few DIP switches, with which the cards can be switched on or off and the memory management for the Z80 part is configured. So only the CP/M part or only the 80 columns can be used without disassembling the card. However, one would then have to provide another opening when installing it in a case.
The first thing I had to do was to put all the TTL logic into a CPLD. Since I knew the board and how it works almost by heart from the previous attempts, the conversion to VHDL was done quite quickly. Even though there are a lot of components on the board, the logic behind it is quite simple and didn’t really need much VHDL code.
By the way, writing HDL (Hardware Description Languages) code has nothing to do with programming. A CPLD or FPGA is not an Arduino that is programmed with a high-level language. It is about developing logical terms.
And this is often much more difficult and time-consuming than simply plugging a few TTL components together. Because you also have to know how these components work and then describe their function in a simplified way.
It may be that for laymen the code looks like a programming language at first sight. But at a closer look they are only constructs, which occur in some “words” also in programming languages and have a completely different meaning.
Most of the work afterwards is in optimising the timing. That’s why the first prototype was a hybrid. The board was almost completely built in TTL, but additionally equipped with a CPLD that took over the first rudimentary tasks. So the board could stay in the C64 all the time and I could take measurements and reproduce the logical function blocks bit by bit in VHDL.
As a precaution, I had planned for a possible additional oscillator, which was not needed after all. The existing quartz with 14.318MHZ was sufficient as a clock source. This serves as the DOT clock and is also used for the internal clock of the CPLD.
The frequency of 14,318 comes from the resolution, frame rate, and the time it takes for the electron beam to return to the beginning of the next line. Even though modern TFT screens are used today, this technology dates back to a time when cathode ray tubes were still state of the art.
After I had adjusted the code and timing so far, it was time for the next prototype. All TTL components, except one, are now reproduced in a CPLD. The only remaining component is the inverter at the output. This also serves as protection. In case of doubt it is easier and cheaper to change it than the CPLD.
Instead of the original 74LS05, I chose a 74LS06. This one is still easily available in large quantities, while the 74LS05 is sometimes hard to find.
This prototype was already much smaller and would have fit into a cartridge case, at least in terms of width.
I have performed all the necessary tests with it so far. I also tested the whole thing on the popular 5.6″ TFT display, which can be used wonderfully as a replacement for the picture tube in a Commodore SX-64.
I enabled the Y/C (S-Video) input on the display and connected an additional cable. Unfortunately, I am still missing the necessary socket, which was currently not available. Therefore I soldered two crocodile clips for testing. Not optimal, but it must be enough for a first test.
As you can see, even on this small display, the 80 character display is very sharp and clear and wonderful to read.
Not yet small enough
The next step was now to shrink the card so that it would fit into a cartridge case. And the Z80 card should be integrated as well.
And additionally an opening must be provided in the center, for the appropriate screw connection of the housing, which also consumes space again.
Now I could have done everything completely in SMD. But I was aware that this would mean an increased effort for some then when flashing. So I decided for a compromise and chose EEPROMs in PLCC format. To get more space for the tracks, I had to choose sockets in SMD design.
The MC6845P is also available in a CMOS version as PLCC version. But there were two obstacles. On the one hand this would have been a 44 pin PLCC, which is shorter, but not really narrower. But the number of traces would have remained the same, and especially the space needed for these traces.
And this chip is more difficult to get and much more expensive than the MC6845P, which is available very cheaply now. So I decided to continue using this chip.
All other components were made in SMD, which further saved space. These measures, as well as the use of a jack socket as a replacement for the RCA socket, were sufficient to fit everything on a board that was small enough to be installed in an appropriate housing.
There is still something missing
Instead of putting the components for the Z80 part on the backside somehow, I simply designed a second small board, which is plugged onto the display adapter.
By clever placement of the components and the use of very small, but easy to get pin headers, a correspondingly low height could be achieved.
So the whole thing consists of two individual boards. One is the actual 80-column board, which can also be operated individually. The Z80 CPU board is an extension that can be plugged in, but does not have to be.
In addition, there is the 8MHz version of my CP/M cartridge, as a small Piggyback module, which can simply be plugged onto the 80 column card.
When assembled, the card is so compact that it fits easily into a cartridge case. Only a small hole has to be drilled on the left side for the video output.
I have designed this as a 3.5″ jack socket. The advantage is on the one hand the size, and on the other hand the availability of ready-made adapters in the accessories trade.
I had previously developed the whole thing as a 3D model and adapted the PCBs accordingly so that everything would fit without any problems.
I would then post the project on GitHub soon, if there is any interest at all. Let’s see if there is any feedback in the comments section.
For my friends I have put everything for download in the internal area.
I’m currently thinking about whether I should maybe make a version for the Commodore SX-64. But then as an internal version for installation, which would be ideal in combination with the 5.6″ TFT display.
But I’m not sure yet whether I should develop a plug-on solution or directly a replacement board, similar to my well-known dual-disk controller for the SX-64, which replaces the original Commodore disk controller board.