Herring is an 8-bit computer built around the 65C02 CPU. It is designed as a backplane system. The backplane board is passive, providing only power, a reset switch, and system bus headers. The system bus is exposed as single-row 40-pin female headers using standard 0.1 inch pin pitch.
The base configuration has 8KB of ROM, 32KB of RAM and runs at a clock frequency between 1 and 12 MHz. The first serial port functions as the console, additional ports can be installed and used for other purposes. GPIO pins are available on the VIA board.
The memory map is set up in the following way:
- 0x0000 - 0x7FFF: 32KB RAM
- 0x8000 - 0x80FF: Serial port 1
- 0x8100 - 0x81FF: VIA 1 (GPIO chip)
- 0x8200 - 0x82FF: Serial port 2
- 0x8300 - 0x83FF: Optional peripheral
- 0x8400 - 0x84FF: Optional peripheral
- 0x8500 - 0x85FF: Optional peripheral
- 0xE000 - 0xFFFF: 8KB ROM
There's currently a large gap of unused address space between 0x8600 and 0xDFFF (about 23K). This could be used for additional RAM or ROM or for a peripheral in need of a larger address space such as a framebuffer video card. The memory map can be reconfigured by updating the GAL chip on the CPU board. See hardware/address_decoder_gal
.
Individual component boards are connected to the backplane via the 40-pin system bus. Most of the pins on the bus come directly from the 65C02 plus a few for peripheral support. They are mapped from left to right in the following order:
- VCC (5v regulated)
- GND
- D0
- D1
- D2
- D3
- D4
- D5
- D6
- D7
- A0
- A1
- A2
- A3
- A4
- A5
- A6
- A7
- A8
- A9
- A10
- A11
- A12
- A13
- A14
- A15
- RESB - Reset (Active low)
- CLK - System clock
- RWB - Read/write flag (Read = high, Write = low)
- IRQB - Interrupt request (Active low)
- DEC0 - Functions as the RAM write-enable pin
- DEC1 - Peripheral enable
- DEC2 - Peripheral enable
- DEC3 - Peripheral enable
- DEC4 - Peripheral enable
- DEC5 - Peripheral enable
- DEC6 - Peripheral enable
- DEC7 - Peripheral enable
- BE - Bus Enable (Active high)
- GND
Herring currently runs a simple monitor program from ROM that provides the basic peek, poke, jump commands as well as memory clearing and memory dumping. This monitor also functions as a bootloader, allowing new firmware to be copied into RAM from a host PC via serial port. I use a simple program on the PC to transfer firmware: https://github.com/crmaykish/ctt in this way.
All firmware development is done in C and uses the cc65 set of tools.
See https://hackaday.io/project/181802-herring-6502-computer for project logs and more details on the hardware.