Reese 3 years ago
parent 8a275107f6
commit cc1275a923

@ -1,22 +1,65 @@
Instruction set:
MOV =
ALU = --XXXXXX
ADD =
SUB
OR =
XOR =
AND =
NOT =
Instruction layout in RAM
OPCODE A B
XXXXXXRR;AAAAAAAA;BBBBBBBB
AB
R Indicates the value stored in A/B is a register
ALU INV = --XXXXXX
Same as ALU
Opcodes:
IMM =
ALU = 1XXXXY--
If Y is 1 invert output
ADD = -1000Y-- Add A to B output to ACC
SUB = -0100Y-- Sub A from B output to ACC
OR = -1100Y-- OR A and B output to ACC
XOR = -0010Y-- XOR A and B output to ACC
AND = -1010Y-- AND A and B output to ACC
JMP =
JNZ =
JGZ =
JLZ =
JEZ =
MOV = 010000-- Move A to B
JMP = 011000-- Jump to A ignore B(?)
A = 00100000
JNZ = 000100-- Jump if A is not zero to B
JGZ = 010100-- Jump if A is greater than zero to B
JLZ = 001100-- Jump if A is less than zero to B
JEZ = 011100-- Jump if A is zero to B
NOP = 001010-- Nothing!
DBL = 000010-- Blink a light
DBB = 010010-- Beep a beeper
HLT = 000001-- Haha die
Registers:
RAM = 1XXXXXXX R/W
-0000000 | -1111111
ACC = 01000000 R 8bit
A = 00100000 R/W 8bit
B = 01100000 R/W 8bit
C = 00010000 R/W 8bit
Special:
ZERO = 00000000 R 8bit
FULL = 00000001 R 8bit
DBGO = 00000010 W Debug output 8bit
DBGI = 00000011 R Debug input 8bit
PGCR = 00000100 R/W Program Counter 7bit
Example program (Human readable + binary):
OPCODE A B
MOV 1 A 01000001;00000001;00100000
MOV 1 B 01000001;00000001;01100000
MOV -100 C 01000001;11100100;00010000
MOV A DBGO 01000011;00100000;00000010
lop: 00101000;00000000;00000000
ADD A B 11000011;00100000;01100000
MOV A B 01000011;00100000;01100000
MOV ACC A 01000011;01000000;00100000
MOV A DBG0 01000011;00100000;00000010
ADD A C 11000011;00100000;00010000
JLZ ACC lop 00110010;01000000;00000101
HLT 00000100;00000000;00000000

Loading…
Cancel
Save