I just joined the forum today, plz no flame about me copying them. Besides, I've no idea if my thing is turing-complete.
I made a CPU that has various inputs and outputs. Below I'll put some information about the CPU, it's assembly code, as well as how to compile that to machine language.
This was heavily inspired by, please don't ban me for this, Ben Eater from YouTube (URL KILLER 5000) in his teaching playlist about computers.
It can only handle 32 'words' of ROM and RAM and can't run factorio yet.
blueprint
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
photo
[img]
[/img]
- picture.png (2.61 MiB) Viewed 2064 times
Summary of how it runs
All outputs and inputs should be with the signal '1'.
It will start at ROM address 0, and try to read a command. It will always assume the program starts at ROM address 0.
Maximum of 32 'words' of ROM and RAM.
User has to provide their own ROM, RAM, and decoder for output.
The CPU writes RAM by first sending an address to the address buffer, the RAM data out will then flash the pink/magenta signal along with the continuously changing 1 signal. The CPU wants the ram to write to the RAM address the value of signal 1 when the magenta flash happens.
It will start at ROM address 0, and try to read a command. It will always assume the program starts at ROM address 0.
Maximum of 32 'words' of ROM and RAM.
User has to provide their own ROM, RAM, and decoder for output.
The CPU writes RAM by first sending an address to the address buffer, the RAM data out will then flash the pink/magenta signal along with the continuously changing 1 signal. The CPU wants the ram to write to the RAM address the value of signal 1 when the magenta flash happens.
Fast and Dirty Assembly Rundown
If there is demand I can change the cpu to use 256 or 512 'words' of ROM and RAM, but no one will ever need more than 32 words of RAM...TideCPU1 Assembly, Machine Code:
Machine Code: Assembly: Description:
32 + Argument MOV A [ROM] Moves [ROM] address to A
64 + Argument MOV A [RAM] Moves [RAM] address to A
96 + Argument MOV [RAM] A Moves A to [RAM] address
128 MOV B A Moves A to B
160 ADD A B Adds B to A sum will be in A
192 + Argument JMP [ROM] Jumps to [ROM] address
224 OUT A Moves A out
256 + Argument JGB [ROM] Jumps to [ROM] address if A ≥ B
288 MOV AUX A Moves A to AUX
320 MOV A AUX Moves AUX to A
Example:
Line:
CODE:
0 MOV A var0
1 MOV B A
2 MOV A var1
3 ADD A B
4 OUT A
5 JMP Line1
DATA:
6 var0 = 1
7 var1 = 3
Compiled:
0 32 + 6 (where var0 is at)
1 128
2 32 + 7 (where var1 is at)
3 160
4 224
5 192 + 1 (line 1, so add 1)
6 1 (data for var0)
7 3 (data for var1)
Machine Code: Assembly: Description:
32 + Argument MOV A [ROM] Moves [ROM] address to A
64 + Argument MOV A [RAM] Moves [RAM] address to A
96 + Argument MOV [RAM] A Moves A to [RAM] address
128 MOV B A Moves A to B
160 ADD A B Adds B to A sum will be in A
192 + Argument JMP [ROM] Jumps to [ROM] address
224 OUT A Moves A out
256 + Argument JGB [ROM] Jumps to [ROM] address if A ≥ B
288 MOV AUX A Moves A to AUX
320 MOV A AUX Moves AUX to A
Example:
Line:
CODE:
0 MOV A var0
1 MOV B A
2 MOV A var1
3 ADD A B
4 OUT A
5 JMP Line1
DATA:
6 var0 = 1
7 var1 = 3
Compiled:
0 32 + 6 (where var0 is at)
1 128
2 32 + 7 (where var1 is at)
3 160
4 224
5 192 + 1 (line 1, so add 1)
6 1 (data for var0)
7 3 (data for var1)
Sorry people I love, it was against policy to put links in my post.
Feel free to ask questions. No, I won't make a C compiler for my architecture.