Dumb8-CPU
Continuing my exploration of the lower-level world...
This project is the implementation of a CPU in a high-level language, C. It aims to have a reduced (minimalist) instruction set and still be Turing complete.
How to test
You can run a test program like that. I'll try making a developer's manual so one can make its own programs using the custom assembly here.
das is the Dumb8 Assembler, which converts .asm files to .bin CPU executables. dumb8 is the CPU emulator.
make
./das program.asm
./dumb8 program.bin
Technical specifications
- 8-bit processing unit
- RISC (reduced instruction set computer)
- 4 general purpose registers (labeled R0 to R3)
- 1 input port, 1 output port (via getchar and putchar)
- Turing-completeness: bitwise and arithmetic operations
Instruction set reference (for programmers)
; Move register RY to register RX
MOV RX, RY
; Arithmetic addition and substraction stored in RX
ADD RX, RY
SUB RX, RY
; Bitwise operations stored in RX
OR RX, RY
AND RX, RY
XOR RX, RY
; Output RX to screen
OUT RX
; Input RX from keyboard
IN RX
; Jump to memory offset ADDR (decimal)
JMP ADDR
; Jump to memory offset ADDR (decimal) if equal flag is set by previous comparison
JEQ ADDR
; Compare RX and RY, sets equal flag if true
CMP RX, RY
; No operation; does nothing
NOP
; Halts the processing unit
HLT
Known bugs
- R0 is not usable (confusion with NOP opcode 0 in memory)
Description
Languages
C
97.8%
Makefile
1.5%
Assembly
0.7%