6800/6809 Computer
Several months in the making, this is the most complex one of my 8-bit computers, using everything I’ve learned from the ones before it. It can take either a 6800 or 6809 CPU and has a modular peripheral bus where it has a multiply/divide accelerator, video generator and keyboard interface.
The base board is just the CPU sockets and a 'standard' split of 32KiB ROM and 32KiB RAM, though exactly 256 addresses are cut out of the RAM space, starting after the Direct Page, for the peripheral devices.
Then, there is a backplane for the peripheral 'cards'. This bus is meant to be compatible with both TTL and CMOS level devices, so a large amount of 74HCT buffers are present on the base board to convert the 6800’s TTL signaling to CMOS levels (including the data bus, which was interesting to try and figure out).
None of this is really that new, though. The peripherals is where it gets interesting and where most of the engineering work went.
Video Generator
Not only does the video generator output VGA, but it is also built without any modern components. It is based around the SCN2674 advanced video generator and SCN2670 character and graphics ROM and can output 63 rows by 30 columns of colored text and 'graphics' (which are just special characters).
Even better, the SCN2674 can be configured to output a signal which almost matches 640x480 VGA. Not quite, but my monitor accepts it. It even takes care of managing access to the display memory from the CPU. There are multiple ways to do it, but the simplest involves the CPU requesting the 2674 to execute a video memory access for it. Its the slowest option, but still plenty fast. Fast enough to fill the whole screen in a blink of the eye.
You can even pull this off with minimal logic if you just want black/white characters. Of course, I did not want to settle for that and added another video RAM IC for basic color support. Every character has a foreground and background color, 3-bits wide. 'Graphics' mode can be selected through another bit, and the final bit used to enable a underline effect. The 2674 can also generate a blinking cursor graphic, so of course I wired this up too.
Unfortunately, even on the third revision of this board, there is still some timing issues. The first column on the left of the screen is actually unusable, reducing the width of the screen to 'only' 63 characters. And character RAM and color/effects RAM are accessed with their addresses offset by one (since the output of one is latched and the other is not), and reads from the video memory do not work, so the 6800 needs to keep a complete copy of the screen contents in its RAM to be able to update screen contents arbitrarily. This wastes almost 4KiB of RAM.
Gate propagation delays are a problem too, offsetting color changes by a few pixels. If you tried to draw text with identical background and foreground colors, you’d expect to see a solid block of color, but actually, a faint black outline of the text is visible, visualizing the delay of one OR gate in particular, which I find interesting. This does not break the usablity of the video generator, though.
Hardware Multiply/Divide
One of the biggest flexes of this computer is its multiply/divide throughput, given to it by the dual CDP1855s. Each one of these chips can multiply and divide 8-bit numbers, but they can be daisy-chained for more power! In this case, I can multiply 16-bit numbers to a 32-bit result and divide a 32-bit number by a 16-bit number in less time than it takes the 6800 to execute two or three instructions. Insanely powerful for sure, but unfortunately a bit glitchy.
The bus timing requirements of the CDP1855s are not what I expected and so they are struggling from a severe case of hold violations on the 6800 bus. The only fix I’ve found this far is to cool the 6800 well to ensure better signal timings, which makes it work perfectly. The 6809 does not suffer from this problem, but also has a multiply instruction of its own which, while slower, gets rid of the overhead of having to communicate with the CDP1855s, though they are still useful for larger multiplications and all kinds of division.
Keyboard Interface (and persistent storage)
The final board holds the PS/2 keyboard interface, which has been put together using 74-series chips to shift in the data and raise an interrupt on every complete character. The 82C55 is for accessing the output of the shifter or even bitbanging data to the keyboard.
Persistent storage is also here as one of those 25Qxx serial flash ICs I like so much, providing 4MiB of space. It is also where the computer bootloads from, just like my 8085 computer, with the EPROM only containing a library of hardware driver routines and arithmetic subroutines.
The 7-segment-display is only for show, but not even visible as the board had to move from its intended position in the first slot to the backmost one, to use a different interrupt line for keyboard events. Unfortunately, this did not fully work to resolve the problem of the CPU sometimes not reading keyboard characters fast enough, leading to buffer overruns. It is rare, but it does occasionally drop key presses. This unfortunately did not pop up during unit testing as I used a fast microcontroller for this, which did not have that problem.
6809 Mode
One of the key features of this computer is that it can work with either a 6800 or 6809. Switching to the 6809 involves removing the 6800 and putting a 6809 in the second CPU socket and changing a jumper. The EROM also needs to be swapped on my board, but the revision on GitHub has another jumper for using the same EPROM for both. After that, the board can be powered up and will start executing the 6809 port of the same EPROM code, including all drivers and subroutines the 6800 version has.
6800 and 6809 software is separated in the persistent storage by forcing its most-significant address bit high in 6809 mode, splitting it in two for the two modes.
Pictures
Here is a few more photos of the computer in action.
Source files
As with all my computers, the source files for this project are public! This includes schematics, PCB layouts and software I wrote for it.
View on GitHub