Mackerel 68k is a series of single-board computers based on the Motorola 68000. The goal of this project is to build a computer with each of the major processors in the family, from the 68008 through the 68040. Each iteration will add additional hardware peripherals, but the main software goal is to run Linux on every board.
See the Hackaday Project Page for more pictures, build logs, etc.
- Mackerel-08 Assembly
- How to Compile Code and Programmable Logic
- Building and Running uClinux (Mackerel-08 and Mackerel-10)
- Building and Running Linux v6.x (Mackerel-30)
Each of the following systems represents a chapter in the project. In total, four SBCs will be designed and built. Note: each chapter includes the hardware peripherals of the previous one. Only new requirements are listed for each board.
Status: Complete
- 68008 CPU (52-pin PLCC variant)
- 512 KB of Flash ROM, 3.5MB SRAM
- Dual serial ports, bit-banged SPI interface
- uClinux 4.4
Based on the original prototype hardare, this SBC combines the 52-pin PLCC MC68008, a 512KB Flash ROM, up to 3.5MB of SRAM, and a XR68C681 DUART on a single PCB. The DUART exposes two serial ports and three bit-banged SPI headers. One of these headers is currently used with an SD card breakout board to provide bulk storage.
Three 22V10 PLDs are used for address decoding, interrupt mapping, and DTACK generation. An expansion header breaks out address, data, and control lines to allow additional peripherals to be connected directly to the processor bus.
Although the 68008 is only rated to 8/10 MHz, the CPU runs reliably overclocked to 16 MHz.
The address space is mapped as follows:
- RAM: 0x000000 - 0x37FFFF (up to 3.5 MB)
- ROM: 0x380000 - 0x3FBFFF (496/512 KB usable)
- DUART: 0x3FC000 - 0x3DFFFF (8KB)
- Exp: 0x3FE000 - 0x3FFFFF (Expansion header, 8KB)
Mackerel-08 uses a 74HC595 shift register to create a BOOT signal for the first eight /AS cycles of the CPU after reset. This BOOT signal is used by the address decoder PLD to map the ROM to address 0x000000 long enough for the CPU to read the initial stack pointer and program counter vectors from ROM. RAM is mapped to 0x000000 after that.
Status: Complete
- 68000 or 68010 CPU
- Up to 16 MB of 30-pin DRAM
- IDE interface
- uClinux 4.4
Mackerel-10 is the second SBC in the project. It expands on the design of Mackerel-08 with a MC68010 CPU (or equivalent), the same XR68C681 DUART, 1MB of Flash ROM, 1MB of SRAM, up to 16 MB of DRAM, and an IDE drive interface. Two CPLDs act as the glue logic and DRAM controller for the board. The SRAM is optional and the address space can be filled almost entirely with DRAM.
The memory map looks like this:
- DRAM: 0x000000 - 0xEFFFFF (15MB)
- ROM: 0xF00000 - 0xFF4000 (not quite 1MB)
- I/O: 0xF40000 - 0xFFFFFF
Status: In Development
- 68030 CPU at 25 MHz
- 64 MB of 72-pin DRAM
- Ethernet interface (via SPI)
- Linux kernel v6.x with MMU support
Mackerel-30 is based on the 68030 CPU. It includes the DUART and IDE interface from Mackerel-10 and upgrades the DRAM controller to use a 72-pin SIMM. It also includes a MC68882 FPU.
Status: Planning
- 68040 CPU at 33 MHz
- 256 MB of 72-pin DRAM
- VGA display
- Linux v6.x + X server GUI
Every version of Mackerel runs a small bootloader program installed on the Flash ROM. This provides a simple set of debugging tools (peek, poke, memtest, etc.) as well as two methods for loading external code.
The bootloader can read program data coming in over the serial port (load
command) or it can read data from an SD card or IDE drive (boot
and ide
respectively). Either way, the program code gets loaded into RAM at address 0x400 and then the bootloader jumps to that address to start the execution.
Mackerel-08 and Mackerel-10 can run uClinux. This version dates from 2016 and runs Linux kernel version 4.4. The binary Linux image can be loaded from a bitbang SD card on Mackerel-08 and from an IDE drive on Mackerel-10.
In both versions, the Linux system is fairly minimal. There is an interactive bash-style shell, and a few basic programs. Mackerel-10 has an IDE driver and support for ext2 filesystems.
The bootloader and other bare-metal programs can be built with a standard m68k-elf cross-compiler. There is a script to build one from modern binutils and gcc in the tools folder.
I've been using this toolchain from Sourceforce to build uClinux. I have run this toolchain on modern Arch Linux and Debian 12 machines without issues.
My serial transfer tool is here. This is used in combination with the bootloader to transfer data (usually program code) into RAM.