HIGH LOW 0000 iiii MOV A, imm4 0001 iiii MOV B, imm4 0010 dddd ALU operation -> ALU ; ALU operations on registers 0011 0000 MOV A, ALU ; Register operations? 0011 0001 MOV B, ALU 0010 MOV IX, AB 0011 MOV IY, AB 0100 MOV B, A 0101 MOV OUT, AB 0110 MOV IN, A 0111 MOV IN, B 1000 MOV SP, AB 1001 MOV A, A (NOP) 1010-1111: Unused 0100 ; IX operations 0100 dddd ; ALU operations on memory using IX 0x0: ADD [IX] 0x1: ADDC [IX] 0x2: SUB [IX] 0x3: SUBB [IX] 0x4: AND [IX] 0x5: OR [IX] 0x6: XOR [IX] 0x7: NOT [IX] 0x8: INCA [IX] 0x9: DECA [IX] 0xA: INCB [IX] 0xB: DECB [IX] 0xC: PASSA [IX] 0xD: PASSB [IX] 0100 1110 inc IX 0100 1111 dec IX 0101 dddd ; ALU operations on memory using IY 0110 0111 1000 1001 ; Memory operations 1001 0000 MOV AB, [IX] 1001 0001 MOV [IX], AB 0010 MOV [IX], ALU0 0011-0111: unused 1000 PUSH AB 1001 PUSH PC 1010-1101: unused 1110 POP IX 1111 POP AB # Absolute jumps: Set PC to IX/IY 1010 0000 JZ IX 1010 0001 JC IX 1010 0010 JNC IX 1010 0011 JMP IX 1010 0100 JNZ IX 1010 0101 JZ IY 1010 0110 JC IY 1010 0111 JNC IY 1010 1000 JMP IY 1010 1001 JNZ IY # Far jumps: Set CS to A, and PC to IX 1010 1010 JZ Far A:IX 1010 1011 JC Far A:IX 1010 1100 JNC Far A:IX 1010 1101 JMP Far A:IX 1010 1110 JMP Far A:IX # Immediate jumps: # Set PC to hhiiii00 # (top two PC bits unchanged, middle nibble supplied by imm4, bottom two zeroed) 1011 dddd JZ imm4 1100 dddd JC imm4 1101 dddd JNC imm4 1110 dddd JNZ imm4 1111 dddd JR imm4 # Decoder ROM Inputs: 0:7 Instruction 8 Carry flag 9 Zero flag 10 Reserved? Outputs: 0:3 SRC - 0000 AB - 0001 imm4 - 0010 ALUou - 0011 PC - 0100 Unused - 0101 Unused - 0110 Input - 0111 RAM - 1000-1111 4:7 DST - 0000 A - 0001 IX - 0010 B - 0011 ALU - 0100 AB - 0101 OUTPUT - 0110 SP - 0111 RAM - 1000-1111 8:9 PC_LOAD - 00 increment - 01 Index_register - 10 no advance - 11 imm4 10:11 INDEX_SELECT - 00 none - 01 IX - 10 IY - 11 SP 12:13 INDEX_INCDEC - 00 none - 01 IX - 10 IY - 11 SP 14: Direction - 0 increment - 1 decrement 16:19 ALUs0:3 20 ALUm 21:22 ALUclear - 00 ALU_NO_CLEAR - 01 ALUclearA - 10 ALUclearB - 11 ALU_NO_STORE 23 ALUcarry 24 Store_flags 25:26 RAM_Segment_select - 00 DS - 01 ES - 10 SS - 11 GS 26:32 unused