Close

Updated architecture & instruction set

A project log for DM-01: 8-bit 74xx computer

Designing and building my own 8-bit computer from scratch with 74xx (TTL) logic chips

ruud-van-falierRuud van Falier 05/08/2018 at 11:490 Comments

In the past weeks I have prototyped small parts of the computer, thought things over and realized that I had to make a few adjustments to the architecture and instruction set.

Let me start with the progress that was made with the circuit diagrams.  The following diagrams have been completed and some of them are tested:

The following changes have been made to the architecture:


The instruction set has a few new and updated instructions:

MOV [A,B,X,Y] [A,B,X,Y] Copy register N2 to register N1
MVI [A,B,X,Y] #value Copy immediate value to register N
LD [A,B,X,Y] $address Load register N with value at memory address
ST [A,B,X,Y] $address Store register N value at memory address
ADD [A, X, YN + B → N
ADC [A, X, YN + B + 1 → N
SUB [A, X, Y] N - B → N
SBC [A, X, Y] N - B - 1 → N
AND [A, X, Y] N & B → N
OR [A, X, Y] N | B → N
XOR [A, X, Y] N ⊕ B → N
NOT [A, X, Y] !NN
INC [A, X, Y] N + 1 →
DEC [A, X, Y] N - 1 →
SHL [A, X, Y] Shift all bits in register N to the left
SHR [A, X, Y] Shift all bits in register N to the right
RAL [A, X, Y] Rotate all bits in register N to the left
RAR [A, X, Y] Rotate all bits in register N to the right
CMP [A, X, Y]Compare register N to register B
JMP $address Jump to memory address
JZ $address Jump to memory address if zero flag is set
JNZ $address Jump to memory address if zero flag is not set
JC $address Jump to memory address if carry flag is set
JNC $address Jump to memory address if carry flag is not set
JEQ $address Jump to memory address if N = B
JLT $address Jump to memory address if N < B
JGT $address Jump to memory address if N > B
CALL $address Jump to subroutine at memory address
RET Return from subroutine
NOP Do nothing
HLT Halt execution
IN Load data from input into register A (needs to be worked out)
OUT [1, 2] [A, B, X, Y] Output data from register N2 on output N1
(1 = decimal display, 2 = serial output)

I'm currently waiting on more breadboards coming in for prototyping and slowly working out all the circuit diagrams in the meantime.

More updates coming soon!

Discussions