jdah / jdh-8

An 8-bit minicomputer with a fully custom architecture
MIT License
1.29k stars 89 forks source link

JDH-8

A fully custom 8-bit minicomputer with a unique architecture.

BUILD SCREENSHOT PONG SCREENSHOT

The program above is running in the emulator, see programs/pong.asm for the source.

See the video on the design. \ and the video on the build.

Machine Description

Features

Instruction Set:

0: MW   reg, imm8/reg   -> reg = imm8/reg
1: LW   reg, [HL/imm16] -> reg = [HL/imm16]
2: SW   [HL/imm16], reg -> [HL/imm16] = reg
3: PUSH imm8/reg        -> [SP--] = imm8/reg
4: POP  reg             -> reg = [++SP]
5: LDA  [imm16]         -> HL = imm16
6: JNZ  imm8/reg        -> imm8/reg != 0 ? PC = HL : NOP
7: INB  reg, imm8/reg   -> reg = PORT[imm8/reg]
8: OUTB imm8/reg, reg   -> PORT[imm8/reg] = reg
9: ADD* reg, imm8/reg   -> reg = reg + imm8/reg
A: ADC* reg, imm8/reg   -> reg = reg + imm8/reg + c
B: AND  reg, imm8/reg   -> reg = reg & imm8/reg
C: OR   reg, imm8/reg   -> reg = reg | imm8/reg
D: NOR  reg, imm8/reg   -> reg = ~(reg | imm8/reg)
E: CMP* reg, imm8/reg   -> f = compare reg, imm8/reg (see below)
F: SBB* reg, imm8/reg   -> reg = reg - imm8/reg - b

*these instructions load the carry/borrow bits in the (F)lags register

Registers

A (0): GP register/arg 0
B (1): GP register/arg 1
C (2): GP register/arg 2
D (3): GP register/arg 3
L (4): GP register/(L)ow index register
H (5): GP register/(H)igh index register
Z (6): GP register/return value
F (7): flags (LSB to MSB)
    LESS
    EQUAL
    CARRY
    BORROW

See the spec for more information.

Schematic

The schematic requires a modified version of Logisim Evolution to view, see here. You will need to build it from source.

Toolchain

Compiling on POSIX systems

Compile with $ make

Compiling on Windows

  1. Install MSYS2 (msys2.org)
  2. Install MinGW-W64 from MSYS2
  3. Get 64-bit SDL2 development tools (libsdl.org)
  4. LIBPATH to your SDL location (Makefile automatically specifies C:/cdevlibs)
  5. Change CC and LD to the location of GCC (including the executable name) in your MinGW-W64 install or add gcc and ld to PATH
  6. Install xxd for Windows (https://sourceforge.net/projects/xxd-for-windows/)
  7. Change variable XXD in Makefile to the location of XXD (including the executable name) or add xxd to PATH
  8. Run mingw32-make inside project directory

Assembler (asm)

./bin/asm [-h] [--help] [-v] [--verbose] [-n] [--no-builtin-macros] [-o file] file

Emulator (emu)

./bin/emu [-m/--mod module] [-r/--run] [-l/--load file address] [ROM file]

Commands