This commit is contained in:
xamidev
2024-10-19 21:25:45 +02:00
parent 7f8d48236a
commit 4b4a90a39a
4 changed files with 50 additions and 8 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
*.out *.out
dumb8

View File

@@ -1,10 +1,10 @@
# UnnamedCPU # Dumb8-CPU
Continuing my exploration of the lower-level world... 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. 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 ## 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. 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.
@@ -13,8 +13,48 @@ make
./a.out program.asm ./a.out program.asm
``` ```
# What I'd like to do ## Technical specifications
- Finish the instruction set implementation - 8-bit processing unit
- Implement input/output devices (like a serial output that could be redirected to the host terminal) - RISC (reduced instruction set computer)
- Re-do the CPU in a Hardware Description Language, or even better: with transistors IRL! (i probably won't waste my life doing that tho) - 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
```

3
cpu.c
View File

@@ -1,5 +1,5 @@
/* /*
* Unnamed 8-bit processing unit * Dumb8 8-bit processing unit
* Made by github.com/xamidev * Made by github.com/xamidev
* *
* This is free and unencumbered software released into the public domain. * This is free and unencumbered software released into the public domain.
@@ -74,6 +74,7 @@ CPU_t cpu;
void cpu_init() void cpu_init()
{ {
printf("Initializing Dumb8 CPU...\n");
cpu.pc = 0; cpu.pc = 0;
cpu.halted = false; cpu.halted = false;
cpu.equal_flag = false; cpu.equal_flag = false;

View File

@@ -1,5 +1,5 @@
all: all:
gcc -g *.c gcc -g *.c -o dumb8
clean: clean:
rm a.out rm a.out