My Homebrew 8-bit Computer
A homebrew 8-bit computer with a backplane. Initially supporting the 6502 CPU, TMS9918A VDP and Dual AY-3-8910 PSG's. With plans to add support for Z80 and perhaps other CPUs in the future.
Current cards:
- 6502 CPU card
- Triple-mode clock card (based on James Sharman's design)
- RAM/ROM card (32KB of each)
- LCD display card (supports regulat character LCD and 12864B graphics LCD)
- TMS9918A display card (composite output)
- Dual AY-3-8910 sound card
Current breadboard circuits:
- NES controller
- PS/2 keyboard controller
All source code and schematics are available in this repository.
I have also included an emulator for this system. The emulator supports:
- Realtime execution of code (at 4MHz).
- Step through disassembled code with labels.
- Examine CPU and VDP registers, RAM and VRAM.
- Full support for all TMS9918A display modes. See my TMS9918 emulator here: https://github.com/visrealm/vrEmuTms9918
- Support for the dual AY-3-8910 audio.
Full details on the Emulator here: github.com/visrealm/hbc-56/emulator
- Ensure MAKE is available on your system and in your PATH
- Ensure ACME assembler is in your PATH
- For each path (basic, invaders, tests\tms, tests\sfx):
- Open a console to the path
- Type
make
(this will build the default program and run it in the emulator:
- Type
make all
to build and run all demos in the directory - Type
make <basefile>
(filename without extension) to build and run a specific demo eg:
cd code\6502\tests\tms
make tms9918gfx2test
Example: invaders
cd code\6502\invaders
acme -I ..\lib -I ..\kernel -o invaders.o -l invaders.o.lmap invaders.asm
Example: invaders
cd code\6502\invaders
..\..\..\emulator\bin\Hbc56Emu.exe --rom invaders.o
Example: basic
cd code\6502\basic
..\..\..\emulator\bin\Hbc56Emu.exe --keyboard --rom hbc56_mon.o
THe HBC-56 has 64KB addressable memory divided into RAM, ROM and IO as follows:
From | To | Purpose |
---|---|---|
$0000 | $7eff | RAM |
$7f00 | $7fff | I/O |
$8000 | $ffff | ROM |
The RAM and ROM is further divided by the HBC-56 Kernel:
From | To | Size | Purpose |
---|---|---|---|
$0000 | $00ff | 256 bytes | Zero page |
$0100 | $01ff | 256 bytes | Stack |
$0200 | $79ff | 30 kilobytes | User RAM |
$7a00 | $7eff | 1280 bytes | Kernel RAM |
$7f00 | $7fff | 256 bytes | I/O |
$8000 | $dfff | 24 kilobytes | User ROM |
$e000 | $ffff | 8 kilobytes | Kernel ROM |
This code is licensed under the MIT license