1 // license:BSD-3-Clause
2 // copyright-holders:smf
3 #ifndef MAME_CPU_PSX_PSXDEFS_H
4 #define MAME_CPU_PSX_PSXDEFS_H
5 
6 #pragma once
7 
8 
9 #define PSXCPU_BYTE_EXTEND( a ) ( (int32_t)(int8_t)a )
10 #define PSXCPU_WORD_EXTEND( a ) ( (int32_t)(int16_t)a )
11 
12 #define INS_OP( op ) ( ( op >> 26 ) & 63 )
13 #define INS_RS( op ) ( ( op >> 21 ) & 31 )
14 #define INS_RT( op ) ( ( op >> 16 ) & 31 )
15 #define INS_IMMEDIATE( op ) ( op & 0xffff )
16 #define INS_TARGET( op ) ( op & 0x3ffffff )
17 #define INS_RD( op ) ( ( op >> 11 ) & 31 )
18 #define INS_SHAMT( op ) ( ( op >> 6 ) & 31 )
19 #define INS_FUNCT( op ) ( op & 63 )
20 #define INS_CODE( op ) ( ( op >> 6 ) & 0xfffff )
21 #define INS_CO( op ) ( ( op >> 25 ) & 1 )
22 #define INS_COFUN( op ) ( op & 0x1ffffff )
23 #define INS_CF( op ) ( op & 31 )
24 #define INS_BC( op ) ( ( op >> 16 ) & 1 )
25 #define INS_RT_REGIMM( op ) ( ( op >> 16 ) & 1 )
26 
27 #define OP_SPECIAL ( 0 )
28 #define OP_REGIMM ( 1 )
29 #define OP_J ( 2 )
30 #define OP_JAL ( 3 )
31 #define OP_BEQ ( 4 )
32 #define OP_BNE ( 5 )
33 #define OP_BLEZ ( 6 )
34 #define OP_BGTZ ( 7 )
35 #define OP_ADDI ( 8 )
36 #define OP_ADDIU ( 9 )
37 #define OP_SLTI ( 10 )
38 #define OP_SLTIU ( 11 )
39 #define OP_ANDI ( 12 )
40 #define OP_ORI ( 13 )
41 #define OP_XORI ( 14 )
42 #define OP_LUI ( 15 )
43 #define OP_COP0 ( 16 )
44 #define OP_COP1 ( 17 )
45 #define OP_COP2 ( 18 )
46 #define OP_COP3 ( 19 )
47 #define OP_LB ( 32 )
48 #define OP_LH ( 33 )
49 #define OP_LWL ( 34 )
50 #define OP_LW ( 35 )
51 #define OP_LBU ( 36 )
52 #define OP_LHU ( 37 )
53 #define OP_LWR ( 38 )
54 #define OP_SB ( 40 )
55 #define OP_SH ( 41 )
56 #define OP_SWL ( 42 )
57 #define OP_SW ( 43 )
58 #define OP_SWR ( 46 )
59 #define OP_LWC0 ( 48 )
60 #define OP_LWC1 ( 49 )
61 #define OP_LWC2 ( 50 )
62 #define OP_LWC3 ( 51 )
63 #define OP_SWC0 ( 56 )
64 #define OP_SWC1 ( 57 )
65 #define OP_SWC2 ( 58 )
66 #define OP_SWC3 ( 59 )
67 
68 /* OP_SPECIAL */
69 #define FUNCT_SLL ( 0 )
70 #define FUNCT_SRL ( 2 )
71 #define FUNCT_SRA ( 3 )
72 #define FUNCT_SLLV ( 4 )
73 #define FUNCT_SRLV ( 6 )
74 #define FUNCT_SRAV ( 7 )
75 #define FUNCT_JR ( 8 )
76 #define FUNCT_JALR ( 9 )
77 #define FUNCT_SYSCALL ( 12 )
78 #define FUNCT_BREAK ( 13 )
79 #define FUNCT_MFHI ( 16 )
80 #define FUNCT_MTHI ( 17 )
81 #define FUNCT_MFLO ( 18 )
82 #define FUNCT_MTLO ( 19 )
83 #define FUNCT_MULT ( 24 )
84 #define FUNCT_MULTU ( 25 )
85 #define FUNCT_DIV ( 26 )
86 #define FUNCT_DIVU ( 27 )
87 #define FUNCT_ADD ( 32 )
88 #define FUNCT_ADDU ( 33 )
89 #define FUNCT_SUB ( 34 )
90 #define FUNCT_SUBU ( 35 )
91 #define FUNCT_AND ( 36 )
92 #define FUNCT_OR ( 37 )
93 #define FUNCT_XOR ( 38 )
94 #define FUNCT_NOR ( 39 )
95 #define FUNCT_SLT ( 42 )
96 #define FUNCT_SLTU ( 43 )
97 
98 /* OP_REGIMM */
99 #define RT_BLTZ ( 0 )
100 #define RT_BGEZ ( 1 )
101 #define RT_BLTZAL ( 16 )
102 #define RT_BGEZAL ( 17 )
103 
104 /* OP_COP0/OP_COP1/OP_COP2 */
105 #define RS_MFC ( 0 )
106 #define RS_CFC ( 2 )
107 #define RS_MTC ( 4 )
108 #define RS_CTC ( 6 )
109 #define RS_BC ( 8 )
110 #define RS_BC_ALT ( 12 )
111 
112 /* BC_BC */
113 #define BC_BCF ( 0 )
114 #define BC_BCT ( 1 )
115 
116 /* OP_COP0 */
117 #define CF_TLBR ( 1 )
118 #define CF_TLBWI ( 2 )
119 #define CF_TLBWR ( 6 )
120 #define CF_TLBP ( 8 )
121 #define CF_RFE ( 16 )
122 
123 #endif // MAME_CPU_PSX_PSXDEFS_H
124