Power supply
The power for this board is provided by the USB-to-Serial converter. A 250 mA polyfuse protects against damage in the event of a short circuit. A red LED indicator lights up when power is available.
Reset circuit
The reset signals are generated simply by a 10µF capacitor, which is charged through a 10k resistor. Two Schmitt trigger inverters (74HC14) are used to generate the positive and negative RESET-signals. Since both the 68000's /RESET and /HALT-signals are bidirectional (input and output), they are connected through a 4.7kΩ resistor.
Address decoding
In fact, the address decoding is arguably the most fascinating aspect of the design!
In the simplest 68000 designs, the EEPROM is fixed at address 0x0000. After a reset, the CPU expects the stack pointer and start address to be located at 0x0000 and 0x0004, respectively. All interrupt vectors are in the next 1kB till 0x03FF. If these vectors are fixed in EEPROM, it limits flexibility, especially when attempting to run the FUZIX OS.
A solution is to switch out the EEPROM and switch in the RAM after the first four read cycles. This is the exact purpose of the 74HC164. After a /RESET, all Q-outputs are initially low. The /AS signal is used as clock, and after four (16-bit) read cycles, the Q3 output goes high.
The 74HC139(a) is connected as an OR-gate (I used this complicated way because I didn't want to add an extra OR-chip and I had one decoder left.) The first four cycles the /E input is high, so all the /Y-outputs are high. The /Y0-ouput is connected to the A1-input of the second (b) address decoder, and thereby switching in the EEPROM in the first four read cycles.
After the four read cycles, the /E signal is low, and /Y0 begins to follow A21. From that point onward, the RAM is mapped to address 0x0000.
CF-card interface
For CF-card, we need different timings. First the /CS have to be activated, and then the /RD (of /WR). The /RD needs to de be activated before /CS becomes inactive. For EEPROM and RAM these timings are irrelevant, and may be simultaneous.
In the 68k-nano design (by Matt Sarnoff), I found a solution. In typical 68000 address decoding, the /AS-signal from the CPU is connected to the /E-input of the 74HC139 decoder. However, you can bypass the /AS-signal by grounding the /E-input. This causes the /Y0 to /Y3-outputs to become active earlier (before the /RD and /WR-signals). The downside is that one output signal is always active, even when there is no bus activity. I built the 68k-nano, and this works perfectly fine.
So pin 15 (/E-input) is grounded for the correct CF-card timing.
Warning: THE CF-CARD IS UNTESTED YET!
R/W-signals
The 68000 has a 16-bit bus, and the upper (odd) and lower (even) bytes can be read or written individually. Therfore four signals are required: /WR_even, /WR_odd, RD_even and /RD_odd. These can be generated using a 74HC32 (4 OR gates) and an inverter. However, a single 74HC139 can also generate these signals.
As you can see, the /AS signal is also used as enable input. This means that the /RD and /WR signals only become active when the /AS (address strobe) is active. In this way, the absence of /AS in the address decoding is compensated.
100Hz oscillator
For task switching and basic timing, a 100 Hz RC oscillator is added. A 100k resistor charges a 100nF capacitor, and the Schmitt trigger generates a clean square wave, which is connected to the RI input of the UART. This generates periodic interrupts.
While the RC combination is not highly precise, the capacitor can be selected to achieve the desired 100 Hz signal.
UART, IO and interrupts
The UART TL16C550 is an excellent chip. It features 2x16-byte receive and transmit buffers, four input and four output lines, and it can handle the 100 Hz interrupts for the CPU.
The SD-card interface is connected to it. In theory, a RTC module (DS3231) could also be connected (although this has not been tested yet). It cannot be used simultaneously with the SD card.
The UART has its own 11.059 MHz crystal, allowing the main CPU clock crystal to be replaced with a faster one for overclocking the board, without needing to modify the BIOS. At the cost of one extra component, the RS232 frequency is made independent from the main clock.
Another useful feature is the connection of the FC2 signal to CS1. This ensures that the UART is only accessible in supervisor mode, preventing user processes from altering the UART configuration. Keep this in mind if you're writing your own software!
RAM and EEPROM
Two AS6C4008 chips make up the 1MB of RAM, and two W27C512 chips provide the 128kB EEPROM. The connections are straightforward.
Similar projects
- #68000 minimal homebrew computer (1991)
- #68020 minimal homebrew computer (2023)
- 68k-nano (Matt Sarnoff)
Fuzix
This project is a work in progress. After designing the board, I modified the BIOS. My ultimate goal is to run #Fuzix OS on it. So far, I’ve successfully compiled it on the host machine and ported it to the new board. After loading the S-file, it runs quite stably using the SD card image. I plan to add CF card and RTC support, and I still need to figure out how to boot it directly from the SD or CF card.
Logs
In the future, I may write logs on the following topics:
- Overclocking the 68000 board
- Porting Fuzix to this board
- Using KiCad and autorouting
- Adding CF card support
- And more
By following this project, you’ll stay up to date with all developments!