Close
0%
0%

Thunderbird-yet another 68000 SBC

An easy-to-build and easy-to-understand single-board retro computer, perfect for overclocking and running the Fuzix OS!

Public Chat
Similar projects worth following
In a previous 68000 minimal homebrew project, I attempted to run Fuzix on the self-built system with only 128kB of SRAM (1991). Unfortunately, it didn't work due to a lack of memory. After some deliberation, I decided to design a new PCB with a 68HC000 cpu with a lot of memory (1 MB):
- Capable of running the Fuzix OS (https://www.fuzix.org).
- Simple to overclock.
- Easily to understand (no PAL/GAL etc).
- Low current (all CMOS).
- Easily to rebuild (only through hole components).
- And last but not least: KISS (Keep It Simple and Straightforward).

Specifications:
- MC68HC000-FN20 (@20 MHz).
- 1024 kB RAM (2xAS6C4008-55.)
- 128 kB EEPROM (2xW27C512-45.)
- 16550 UART @ 115200 baud (accessible only in supervisor mode).
- 100 Hz RC-oscillator (for task switching and simple timings).
- IDE interface (for CF-card).
- SD-card support.
- Low power: 150 mA @20Mhz.
- PCB 10x10 cm (4 layers).

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...

Read more »

BIOS-thunderbird.zip

Zip Archive - 48.83 kB - 01/01/2025 at 16:57

Download

68kTunderbird_rev0.zip

Gerberfiles

Zip Archive - 195.65 kB - 01/01/2025 at 15:39

Download

68kThunderbird_rev0.pdf

Schematic

Adobe Portable Document Format - 760.20 kB - 01/01/2025 at 11:28

Preview

  • 1 × MC68HC000-FN20 68000 CPU (PLCC68)
  • 2 × W27C512-45 64kB EEPROM
  • 2 × AS6C4008-55 512 kB SRAM
  • 1 × TL16C550 UART
  • 2 × 74HC139 Address decoder

View all 7 components

  • CF-card interface

    Steven03/02/2025 at 15:38 0 comments

    Introduction

    In homebrew retro computing, the CompactFlash (CF) card is very popular, but SD cards are also used. In Thunderbird, both can be used.

    CF/IDE-interface

    • Easy to connect: The CF card uses the well-known IDE interface, meaning it can be connected directly to the 8- or 16-bit bus.
    • Fast: It is fast due to the IDE interface. After issuing a few simple commands to read a sector, the BIOS only needs to read 512 bytes from the IO-port (Z80) or memory (68000).
    • Obsolete: CF cards are no longer widely used, but they can still be easily ordered online.


    SD-card

    • Widely used: Despite its limitations, the SD card remains widely used.
    • Easy to connect: Although the SD card operates at 3.3V, most adapters include a voltage converter to 5V. Because of the SPI interface, only four IO lines are needed (COPI, CIPO, CLK and CS). In the Thunderbird design, the spare input and output lines from the serial chip (TL16C550) are used for that task.
    • Slow: In homebrew retro computers, there is usually no dedicated SPI interface. It can be simulated via bit-banging, but this is very, very slow (about 10–20 KB/s). However, this is comparable to the speed of an old-school floppy disk. In Fuzix, it gives you the feeling of an old timesharing Unix machine. Every command takes its time to execute, but after all it works good.

    SD to 44 pin IDE interface

    On the internet, you can find inexpensive ($10) SD-to-IDE converters. These tiny boards accept either a full-size or microSD card and feature a 44-pin IDE interface. This fits perfectly into the Thunderbird design! I tested it on the board, and it worked flawlessly. The interface supports both 16-bit and 8-bit modes, with the latter being ideal for Z80 or 6502 designs.

    Micro SD to 2.5 44pin IDE Adapter Reader TF CARD to ide For Laptop -  Newegg.com

    CF-cardSD to IDESD-card
    Total system power (@20MHz):5V / 200mA5V / 190mA3.3V (5V with interface) / ??mA
    Interface:8/16 bits databus8/16 bits databusSPI
    Speed:700 KB/s800 KB/s10~20 KB/s (educated gess)


    Conclusion

    For me, the SD-to-IDE interface is a winner. Although there is a slight speed difference between the CF card and the SD-to-IDE interface, their speeds are approximately the same. However, since SD cards are more common, I prefer the SD-to-IDE interface.

  • Bugs & improvements

    Steven02/23/2025 at 18:25 0 comments

    Introduction

    In this log, bugs and potential improvements for the Thunderbird system are described. Fortunately, only minor bugs have been found so far.

    Bugs

    • The CF/IDE busy indicator LED is operating in reverse. When a CF/IDE adapter is inserted, the LED lights up immediately, and when the device is busy, the LED turns off. 

    Potential improvements

    • The Thunderbird system, with the CF card running at full speed, draws almost 240mA. Therefore, it is advisable to use a larger polyfuse of 350mA or 500mA instead of the 250mA fuse.
    • When reading a word from the IDE/CF card, the bytes must be swapped due to the little-endian/big-endian difference. This requires extra instructions, but a slight improvement can be achieved by handling it in hardware. Simply swap the low and high data lines at the CF/IDE interface.

View all 2 project logs

Enjoy this project?

Share

Discussions

Steven wrote 02/06/2025 at 18:10 point

Hi Soni, the SBC only draws about 100mA, so powering by a power bank is no problem. I have no intention to add a dedicated keyboard or screen to it. The whole idea is KISS; keep it simple. I use a macbook as “terminal”.  (Sometimes I use it on the kitchentable-off grid). You could use any (cheap) laptop / chromebook as a terminal, and powered by a USB232 it is “mobile” ;-) 

  Are you sure? yes | no

soni wrote 02/05/2025 at 19:37 point

Is possible make it mobility? Keyboard, power, screen?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates