add docs
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
*.out
|
*.out
|
||||||
|
dumb8
|
||||||
|
|||||||
52
README.md
52
README.md
@@ -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
3
cpu.c
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user