#ifndef PSXC_INSN_H_ #define PSXC_INSN_H_ #include "cpu.h" #include typedef enum { SPECIAL = 0x00, BCONDZ = 0x01, J = 0x02, JAL = 0x03, BEQ = 0x04, BNE = 0x05, BLEZ = 0x06, BGTZ = 0x07, ADDI = 0x08, ADDIU = 0x09, SLTI = 0x0a, SLTIU = 0x0b, ANDI = 0x0c, ORI = 0x0d, XORI = 0x0e, LUI = 0x0f, COP0 = 0x10, COP1 = 0x11, COP2 = 0x12, COP3 = 0x13, LB = 0x20, LH = 0x21, LWL = 0x22, LW = 0x23, LBU = 0x24, LHU = 0x25, LWR = 0x26, SB = 0x28, SH = 0x29, SWL = 0x2a, SW = 0x2b, SWR = 0x2e, LWC0 = 0x30, LWC1 = 0x31, LWC2 = 0x32, LWC3 = 0x33, SWC0 = 0x38, SWC1 = 0x39, SWC2 = 0x3a, SWC3 = 0x3b, } op_primary_t; typedef enum { SLL = 0x00, SRL = 0x02, SRA = 0x03, SLLV = 0x04, SRLV = 0x06, SRAV = 0x07, JR = 0x08, JALR = 0x09, SYSCALL = 0x0c, BREAK = 0x0d, MFHI = 0x10, MTHI = 0x11, MFLO = 0x12, MTLO = 0x13, MULT = 0x18, MULTU = 0x19, DIV = 0x1a, DIVU = 0x1b, ADD = 0x20, ADDU = 0x21, SUB = 0x22, SUBU = 0x23, AND = 0x24, OR = 0x25, XOR = 0x26, NOR = 0x27, SLT = 0x2a, SLTU = 0x2b, } op_secondary_t; typedef void (*cpu_insn_handler)(cpu_t *, uint32_t); void insn_execute(cpu_t *cpu, uint32_t insn); #endif