#ifndef PSXC_INSN_H_
|
|
#define PSXC_INSN_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "cpu.h"
|
|
|
|
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
|