1 #ifndef _MIPS_H
2 #define _MIPS_H
3 
4 #include "osd_cpu.h"
5 
6 enum
7 {
8 	MIPS_PC = 1, MIPS_OC,
9 	MIPS_HI, MIPS_LO,
10 	MIPS_R0, MIPS_R1,
11 	MIPS_R2, MIPS_R3,
12 	MIPS_R4, MIPS_R5,
13 	MIPS_R6, MIPS_R7,
14 	MIPS_R8, MIPS_R9,
15 	MIPS_R10, MIPS_R11,
16 	MIPS_R12, MIPS_R13,
17 	MIPS_R14, MIPS_R15,
18 	MIPS_R16, MIPS_R17,
19 	MIPS_R18, MIPS_R19,
20 	MIPS_R20, MIPS_R21,
21 	MIPS_R22, MIPS_R23,
22 	MIPS_R24, MIPS_R25,
23 	MIPS_R26, MIPS_R27,
24 	MIPS_R28, MIPS_R29,
25 	MIPS_R30, MIPS_R31,
26 	MIPS_CP0R0, MIPS_CP0R1,
27 	MIPS_CP0R2, MIPS_CP0R3,
28 	MIPS_CP0R4, MIPS_CP0R5,
29 	MIPS_CP0R6, MIPS_CP0R7,
30 	MIPS_CP0R8, MIPS_CP0R9,
31 	MIPS_CP0R10, MIPS_CP0R11,
32 	MIPS_CP0R12, MIPS_CP0R13,
33 	MIPS_CP0R14, MIPS_CP0R15,
34 	MIPS_CP0R16, MIPS_CP0R17,
35 	MIPS_CP0R18, MIPS_CP0R19,
36 	MIPS_CP0R20, MIPS_CP0R21,
37 	MIPS_CP0R22, MIPS_CP0R23,
38 	MIPS_CP0R24, MIPS_CP0R25,
39 	MIPS_CP0R26, MIPS_CP0R27,
40 	MIPS_CP0R28, MIPS_CP0R29,
41 	MIPS_CP0R30, MIPS_CP0R31
42 };
43 
44 extern int mips_ICount;
45 
46 #define MIPS_INT_NONE	( 0 )
47 #define MIPS_INT1	( 1 )
48 #define MIPS_INT2	( 2 )
49 #define MIPS_INT3	( 4 )
50 #define MIPS_INT4	( 8 )
51 #define MIPS_INT5	( 16 )
52 #define MIPS_INT6	( 32 )
53 #define MIPS_INT7	( 64 )
54 #define MIPS_INT8	( 128 )
55 
56 #define MIPS_BYTE_EXTEND( a ) ( (INT32)(INT8)a )
57 #define MIPS_WORD_EXTEND( a ) ( (INT32)(INT16)a )
58 
59 #define INS_OP( op ) ( ( op >> 26 ) & 63 )
60 #define INS_RS( op ) ( ( op >> 21 ) & 31 )
61 #define INS_RT( op ) ( ( op >> 16 ) & 31 )
62 #define INS_IMMEDIATE( op ) ( op & 0xffff )
63 #define INS_TARGET( op ) ( op & 0x3ffffff )
64 #define INS_RD( op ) ( ( op >> 11 ) & 31 )
65 #define INS_SHAMT( op ) ( ( op >> 6 ) & 31 )
66 #define INS_FUNCT( op ) ( op & 63 )
67 #define INS_CODE( op ) ( ( op >> 6 ) & 0xfffff )
68 #define INS_CO( op ) ( ( op >> 25 ) & 1 )
69 #define INS_COFUN( op ) ( op & 0x1ffffff )
70 #define INS_CF( op ) ( op & 63 )
71 
72 #define GTE_OP( op ) ( op & 0x1f01bff )
73 #define GTE_SF( op ) ( ( op >> 19 ) & 1 )
74 #define GTE_MX( op ) ( ( op >> 17 ) & 3 )
75 #define GTE_V( op ) ( ( op >> 15 ) & 3 )
76 #define GTE_CV( op ) ( ( op >> 13 ) & 3 )
77 #define GTE_LM( op ) ( ( op >> 10 ) & 1 )
78 
79 #define OP_SPECIAL ( 0 )
80 #define OP_REGIMM ( 1 )
81 #define OP_J ( 2 )
82 #define OP_JAL ( 3 )
83 #define OP_BEQ ( 4 )
84 #define OP_BNE ( 5 )
85 #define OP_BLEZ ( 6 )
86 #define OP_BGTZ ( 7 )
87 #define OP_ADDI ( 8 )
88 #define OP_ADDIU ( 9 )
89 #define OP_SLTI ( 10 )
90 #define OP_SLTIU ( 11 )
91 #define OP_ANDI ( 12 )
92 #define OP_ORI ( 13 )
93 #define OP_XORI ( 14 )
94 #define OP_LUI ( 15 )
95 #define OP_COP0 ( 16 )
96 #define OP_COP1 ( 17 )
97 #define OP_COP2 ( 18 )
98 #define OP_LB ( 32 )
99 #define OP_LH ( 33 )
100 #define OP_LWL ( 34 )
101 #define OP_LW ( 35 )
102 #define OP_LBU ( 36 )
103 #define OP_LHU ( 37 )
104 #define OP_LWR ( 38 )
105 #define OP_SB ( 40 )
106 #define OP_SH ( 41 )
107 #define OP_SWL ( 42 )
108 #define OP_SW ( 43 )
109 #define OP_SWR ( 46 )
110 #define OP_LWC1 ( 49 )
111 #define OP_LWC2 ( 50 )
112 #define OP_SWC1 ( 57 )
113 #define OP_SWC2 ( 58 )
114 
115 /* OP_SPECIAL */
116 #define FUNCT_SLL ( 0 )
117 #define FUNCT_SRL ( 2 )
118 #define FUNCT_SRA ( 3 )
119 #define FUNCT_SLLV ( 4 )
120 #define FUNCT_SRLV ( 6 )
121 #define FUNCT_SRAV ( 7 )
122 #define FUNCT_JR ( 8 )
123 #define FUNCT_JALR ( 9 )
124 #define FUNCT_SYSCALL ( 12 )
125 #define FUNCT_BREAK ( 13 )
126 #define FUNCT_MFHI ( 16 )
127 #define FUNCT_MTHI ( 17 )
128 #define FUNCT_MFLO ( 18 )
129 #define FUNCT_MTLO ( 19 )
130 #define FUNCT_MULT ( 24 )
131 #define FUNCT_MULTU ( 25 )
132 #define FUNCT_DIV ( 26 )
133 #define FUNCT_DIVU ( 27 )
134 #define FUNCT_ADD ( 32 )
135 #define FUNCT_ADDU ( 33 )
136 #define FUNCT_SUB ( 34 )
137 #define FUNCT_SUBU ( 35 )
138 #define FUNCT_AND ( 36 )
139 #define FUNCT_OR ( 37 )
140 #define FUNCT_XOR ( 38 )
141 #define FUNCT_NOR ( 39 )
142 #define FUNCT_SLT ( 42 )
143 #define FUNCT_SLTU ( 43 )
144 
145 /* OP_REGIMM */
146 #define RT_BLTZ ( 0 )
147 #define RT_BGEZ ( 1 )
148 #define RT_BLTZAL ( 16 )
149 #define RT_BGEZAL ( 17 )
150 
151 /* OP_COP0/OP_COP1/OP_COP2 */
152 #define RS_MFC ( 0 )
153 #define RS_CFC ( 2 )
154 #define RS_MTC ( 4 )
155 #define RS_CTC ( 6 )
156 #define RS_BC ( 8 )
157 
158 /* RS_BC */
159 #define RT_BCF ( 0 )
160 #define RT_BCT ( 1 )
161 
162 /* OP_COP0 */
163 #define CF_RFE ( 16 )
164 
165 #ifdef MSB_FIRST
166 #define READ_LONG(a)		  (READ_WORD(a+2)<<16)|READ_WORD(a)
167 #else
168 #define READ_LONG(a)          (*(UINT32 *)(a))
169 #endif
170 
171 #define cpu_readop32(A)     READ_LONG(&OP_ROM[A])
172 extern void mips_stop( void );
173 
174 extern void mips_reset(void *param);
175 extern void mips_exit(void);
176 extern int mips_execute(int cycles);
177 extern unsigned mips_get_context(void *dst);
178 extern void mips_set_context(void *src);
179 extern unsigned mips_get_pc(void);
180 extern unsigned mips_get_op_counter( void );
181 extern void mips_set_pc(unsigned val);
182 extern unsigned mips_get_sp(void);
183 extern void mips_set_sp(unsigned val);
184 extern unsigned mips_get_reg(int regnum);
185 extern void mips_set_reg(int regnum, unsigned val);
186 extern void mips_set_nmi_line(int linestate);
187 extern void mips_set_irq_line(int irqline, int linestate);
188 extern void mips_set_irq_callback(int (*callback)(int irqline));
189 extern const char *mips_info(void *context, int regnum);
190 extern unsigned mips_dasm(char *buffer, unsigned pc);
191 
192 #endif
193