rdos/lib/opcode80.asm

143 lines
3.8 KiB
NASM
Raw Normal View History

2019-10-23 00:24:51 +02:00
; BYTE name length
; n BYTES name
; BYTE opcode template (variable parts zero)
;
; BYTE operand 1
; BYTE operand 2
; operand types:
; 0x00 none
; 0x1n reg8, opcode |= (reg8 << n)
; 0x2n reg16, opcode |= (reg8 << n)
2019-10-25 15:14:15 +02:00
; 0x3n reg16b, opcode |= (reg8 << n)
; 0x7n 3-bit number, opcode |= (num << n)
2019-10-23 00:24:51 +02:00
; 0x80 imm8, encoded as extra byte
; 0x81 imm16, encoded as extra word
2019-10-25 15:14:15 +02:00
registers:
.reg8:
db "B", 0
db "C", 0
db "D", 0
db "E", 0
db "H", 0
db "L", 0
db "M", 0
db 0
.reg16:
db "BC", 0
db "DE", 0
db "HL", 0
db "SP", 0
db 0
.reg16b:
db "BC", 0
db "DE", 0
db "HL", 0
db "AF", 0
db 0
.end:
db 0
2019-10-23 00:24:51 +02:00
opcodes:
2019-10-25 15:14:15 +02:00
; Data movement
2019-10-23 00:24:51 +02:00
db 3, "MOV", 0b01000000, 0x13, 0x10
db 3, "MVI", 0b00000110, 0x13, 0x80
db 3, "LXI", 0b00000001, 0x24, 0x81
db 3, "LDA", 0b00111010, 0x81, 0x00
db 3, "STA", 0b00110010, 0x81, 0x00
db 4, "LHLD", 0b00101010, 0x81, 0x00
db 4, "SHLD", 0b00100010, 0x81, 0x00
db 4, "LDAX", 0b00001010, 0x24, 0x00
db 4, "STAX", 0b00000010, 0x24, 0x00
db 4, "XCHG", 0b11101011, 0x00, 0x00
2019-10-25 15:14:15 +02:00
; Addition / Subtraction
2019-10-23 00:24:51 +02:00
db 3, "ADD", 0b10000000, 0x10, 0x00
db 3, "ADI", 0b11000110, 0x80, 0x00
db 3, "ADC", 0b10001000, 0x10, 0x00
db 3, "ACI", 0b11001110, 0x80, 0x00
db 3, "SUB", 0b10010000, 0x10, 0x00
db 3, "SUI", 0b11010110, 0x80, 0x00
db 3, "SBB", 0b10011000, 0x10, 0x00
db 3, "SBI", 0b11011110, 0x80, 0x00
db 3, "INR", 0b00000100, 0x13, 0x00
db 3, "DCR", 0b00000101, 0x13, 0x00
db 3, "INX", 0b00000011, 0x24, 0x00
db 3, "DCX", 0b00001011, 0x24, 0x00
db 3, "DAD", 0b00001001, 0x24, 0x00
2019-10-25 15:14:15 +02:00
; BCD
2019-10-23 00:24:51 +02:00
db 3, "DAA", 0b00100111, 0x00, 0x00
2019-10-25 15:14:15 +02:00
; Bitwise operations
2019-10-23 00:24:51 +02:00
db 3, "ANA", 0b10100000, 0x10, 0x00
db 3, "ANI", 0b11100110, 0x80, 0x00
db 3, "ORA", 0b10110000, 0x10, 0x00
db 3, "ORI", 0b11110110, 0x80, 0x00
db 3, "XRA", 0b10101000, 0x10, 0x00
db 3, "XRI", 0b11101110, 0x80, 0x00
db 3, "CMP", 0b10111000, 0x10, 0x00
db 3, "CPI", 0b11111110, 0x80, 0x00
2019-10-25 15:14:15 +02:00
; Rotate
2019-10-23 00:24:51 +02:00
db 3, "RLC", 0b00000111, 0x00, 0x00
db 3, "RRC", 0b00001111, 0x00, 0x00
db 3, "RAL", 0b00010111, 0x00, 0x00
db 3, "RAR", 0b00011111, 0x00, 0x00
2019-10-25 15:14:15 +02:00
; Complement
2019-10-23 00:24:51 +02:00
db 3, "CMA", 0b00101111, 0x00, 0x00
db 3, "CMC", 0b00111111, 0x00, 0x00
db 3, "STC", 0b00110111, 0x00, 0x00
2019-10-25 15:14:15 +02:00
; Jump
2019-10-23 00:24:51 +02:00
db 3, "JMP", 0b11000011, 0x81, 0x00
db 3, "JNZ", 0b11000010, 0x81, 0x00
db 2, "JZ", 0b11001010, 0x81, 0x00
db 3, "JNC", 0b11010010, 0x81, 0x00
db 2, "JC", 0b11011010, 0x81, 0x00
db 3, "JPO", 0b11100010, 0x81, 0x00
db 3, "JPE", 0b11101010, 0x81, 0x00
db 2, "JP", 0b11110010, 0x81, 0x00
db 2, "JM", 0b11111010, 0x81, 0x00
2019-10-25 15:14:15 +02:00
; Call
2019-10-23 00:24:51 +02:00
db 4, "CALL", 0b11001101, 0x81, 0x00
db 3, "CNZ", 0b11000100, 0x81, 0x00
db 2, "CZ", 0b11001100, 0x81, 0x00
db 3, "CNC", 0b11010100, 0x81, 0x00
db 2, "CC", 0b11011100, 0x81, 0x00
db 3, "CPO", 0b11100100, 0x81, 0x00
db 3, "CPE", 0b11101100, 0x81, 0x00
db 2, "CP", 0b11110100, 0x81, 0x00
db 2, "CM", 0b11111100, 0x81, 0x00
2019-10-25 15:14:15 +02:00
; Return
2019-10-23 00:24:51 +02:00
db 3, "RET", 0b11001001, 0x00, 0x00
db 3, "RNZ", 0b11000000, 0x00, 0x00
db 2, "RZ", 0b11001000, 0x00, 0x00
db 3, "RNC", 0b11010000, 0x00, 0x00
db 2, "RC", 0b11011000, 0x00, 0x00
db 3, "RPO", 0b11100000, 0x00, 0x00
db 3, "RPE", 0b11101000, 0x00, 0x00
db 2, "RP", 0b11110000, 0x00, 0x00
db 2, "RM", 0b11111000, 0x00, 0x00
2019-10-25 15:14:15 +02:00
db 3, "RST", 0b11000111, 0x73, 0x00
2019-10-23 00:24:51 +02:00
db 4, "PCHL", 0b11101001, 0x00, 0x00
2019-10-25 15:14:15 +02:00
db 4, "PUSH", 0b11000101, 0x34, 0x00
db 3, "POP", 0b11000001, 0x34, 0x00
2019-10-23 00:24:51 +02:00
db 4, "XTHL", 0b11100011, 0x00, 0x00
db 4, "SPHL", 0b11111001, 0x00, 0x00
db 2, "IN", 0b11011011, 0x80, 0x00
db 3, "OUT", 0b11010011, 0x80, 0x00
db 2, "EI", 0b11111011, 0x00, 0x00
db 2, "DI", 0b11110011, 0x00, 0x00
db 3, "HLT", 0b01110110, 0x00, 0x00
db 3, "NOP", 0b00000000, 0x00, 0x00
db 0