yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
spc700_cycles.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EMU_AUDIO_INTERNAL_SPC700_CYCLES_H
2#define YAZE_APP_EMU_AUDIO_INTERNAL_SPC700_CYCLES_H
3
4#include <cstdint>
5
6namespace yaze {
7namespace emu {
8
9// SPC700 opcode cycle counts
10// Reference: https://problemkaputt.de/fullsnes.htm#snesapucpu
11// Note: Some opcodes have variable cycles depending on page boundary crossing
12// These are baseline cycles; actual cycles may be higher
13constexpr int spc700_cycles[256] = {
14 // 0x00-0x0F
15 2, // 00 NOP
16 8, // 01 TCALL 0
17 4, // 02 SET1 dp, 0
18 5, // 03 BBS dp, 0, rel
19 3, // 04 OR A, dp
20 4, // 05 OR A, abs
21 3, // 06 OR A, (X)
22 6, // 07 OR A, (dp+X)
23 2, // 08 OR A, #imm
24 6, // 09 OR dp, dp
25 5, // 0A OR1 C, abs.bit
26 4, // 0B ASL dp
27 5, // 0C ASL abs
28 4, // 0D PUSH PSW
29 6, // 0E TSET1 abs
30 8, // 0F BRK
31
32 // 0x10-0x1F
33 2, // 10 BPL rel
34 8, // 11 TCALL 1
35 4, // 12 CLR1 dp, 0
36 5, // 13 BBC dp, 0, rel
37 4, // 14 OR A, dp+X
38 5, // 15 OR A, abs+X
39 5, // 16 OR A, abs+Y
40 6, // 17 OR A, (dp)+Y
41 5, // 18 OR dp, #imm
42 5, // 19 OR (X), (Y)
43 5, // 1A DECW dp
44 5, // 1B ASL dp+X
45 2, // 1C ASL A
46 2, // 1D DEC X
47 4, // 1E CMP X, abs
48 6, // 1F JMP (abs+X)
49
50 // 0x20-0x2F
51 2, // 20 CLRP
52 8, // 21 TCALL 2
53 4, // 22 SET1 dp, 1
54 5, // 23 BBS dp, 1, rel
55 3, // 24 AND A, dp
56 4, // 25 AND A, abs
57 3, // 26 AND A, (X)
58 6, // 27 AND A, (dp+X)
59 2, // 28 AND A, #imm
60 6, // 29 AND dp, dp
61 5, // 2A OR1 C, /abs.bit
62 4, // 2B ROL dp
63 5, // 2C ROL abs
64 4, // 2D PUSH A
65 5, // 2E CBNE dp, rel
66 4, // 2F BRA rel
67
68 // 0x30-0x3F
69 2, // 30 BMI rel
70 8, // 31 TCALL 3
71 4, // 32 CLR1 dp, 1
72 5, // 33 BBC dp, 1, rel
73 4, // 34 AND A, dp+X
74 5, // 35 AND A, abs+X
75 5, // 36 AND A, abs+Y
76 6, // 37 AND A, (dp)+Y
77 5, // 38 AND dp, #imm
78 5, // 39 AND (X), (Y)
79 5, // 3A INCW dp
80 5, // 3B ROL dp+X
81 2, // 3C ROL A
82 2, // 3D INC X
83 3, // 3E CMP X, dp
84 8, // 3F CALL abs
85
86 // 0x40-0x4F
87 2, // 40 SETP
88 8, // 41 TCALL 4
89 4, // 42 SET1 dp, 2
90 5, // 43 BBS dp, 2, rel
91 3, // 44 EOR A, dp
92 4, // 45 EOR A, abs
93 3, // 46 EOR A, (X)
94 6, // 47 EOR A, (dp+X)
95 2, // 48 EOR A, #imm
96 6, // 49 EOR dp, dp
97 4, // 4A AND1 C, abs.bit
98 4, // 4B LSR dp
99 5, // 4C LSR abs
100 4, // 4D PUSH X
101 6, // 4E TCLR1 abs
102 6, // 4F PCALL dp
103
104 // 0x50-0x5F
105 2, // 50 BVC rel
106 8, // 51 TCALL 5
107 4, // 52 CLR1 dp, 2
108 5, // 53 BBC dp, 2, rel
109 4, // 54 EOR A, dp+X
110 5, // 55 EOR A, abs+X
111 5, // 56 EOR A, abs+Y
112 6, // 57 EOR A, (dp)+Y
113 5, // 58 EOR dp, #imm
114 5, // 59 EOR (X), (Y)
115 4, // 5A CMPW YA, dp
116 5, // 5B LSR dp+X
117 2, // 5C LSR A
118 2, // 5D MOV X, A
119 4, // 5E CMP Y, abs
120 3, // 5F JMP abs
121
122 // 0x60-0x6F
123 2, // 60 CLRC
124 8, // 61 TCALL 6
125 4, // 62 SET1 dp, 3
126 5, // 63 BBS dp, 3, rel
127 3, // 64 CMP A, dp
128 4, // 65 CMP A, abs
129 3, // 66 CMP A, (X)
130 6, // 67 CMP A, (dp+X)
131 2, // 68 CMP A, #imm
132 6, // 69 CMP dp, dp
133 4, // 6A AND1 C, /abs.bit
134 4, // 6B ROR dp
135 5, // 6C ROR abs
136 4, // 6D PUSH Y
137 5, // 6E DBNZ dp, rel
138 5, // 6F RET
139
140 // 0x70-0x7F
141 2, // 70 BVS rel
142 8, // 71 TCALL 7
143 4, // 72 CLR1 dp, 3
144 5, // 73 BBC dp, 3, rel
145 4, // 74 CMP A, dp+X
146 5, // 75 CMP A, abs+X
147 5, // 76 CMP A, abs+Y
148 6, // 77 CMP A, (dp)+Y
149 5, // 78 CMP dp, #imm
150 5, // 79 CMP (X), (Y)
151 5, // 7A ADDW YA, dp
152 5, // 7B ROR dp+X
153 2, // 7C ROR A
154 2, // 7D MOV A, X
155 3, // 7E CMP Y, dp
156 6, // 7F RETI
157
158 // 0x80-0x8F
159 2, // 80 SETC
160 8, // 81 TCALL 8
161 4, // 82 SET1 dp, 4
162 5, // 83 BBS dp, 4, rel
163 3, // 84 ADC A, dp
164 4, // 85 ADC A, abs
165 3, // 86 ADC A, (X)
166 6, // 87 ADC A, (dp+X)
167 2, // 88 ADC A, #imm
168 6, // 89 ADC dp, dp
169 5, // 8A EOR1 C, abs.bit
170 4, // 8B DEC dp
171 5, // 8C DEC abs
172 2, // 8D MOV Y, #imm
173 4, // 8E POP PSW
174 5, // 8F MOV dp, #imm
175
176 // 0x90-0x9F
177 2, // 90 BCC rel
178 8, // 91 TCALL 9
179 4, // 92 CLR1 dp, 4
180 5, // 93 BBC dp, 4, rel
181 4, // 94 ADC A, dp+X
182 5, // 95 ADC A, abs+X
183 5, // 96 ADC A, abs+Y
184 6, // 97 ADC A, (dp)+Y
185 5, // 98 ADC dp, #imm
186 5, // 99 ADC (X), (Y)
187 5, // 9A SUBW YA, dp
188 5, // 9B DEC dp+X
189 2, // 9C DEC A
190 2, // 9D MOV X, SP
191 12, // 9E DIV YA, X
192 5, // 9F XCN A
193
194 // 0xA0-0xAF
195 3, // A0 EI
196 8, // A1 TCALL 10
197 4, // A2 SET1 dp, 5
198 5, // A3 BBS dp, 5, rel
199 3, // A4 SBC A, dp
200 4, // A5 SBC A, abs
201 3, // A6 SBC A, (X)
202 6, // A7 SBC A, (dp+X)
203 2, // A8 SBC A, #imm
204 6, // A9 SBC dp, dp
205 4, // AA MOV1 C, abs.bit
206 4, // AB INC dp
207 5, // AC INC abs
208 2, // AD CMP Y, #imm
209 4, // AE POP A
210 4, // AF MOV (X)+, A
211
212 // 0xB0-0xBF
213 2, // B0 BCS rel
214 8, // B1 TCALL 11
215 4, // B2 CLR1 dp, 5
216 5, // B3 BBC dp, 5, rel
217 4, // B4 SBC A, dp+X
218 5, // B5 SBC A, abs+X
219 5, // B6 SBC A, abs+Y
220 6, // B7 SBC A, (dp)+Y
221 5, // B8 SBC dp, #imm
222 5, // B9 SBC (X), (Y)
223 5, // BA MOVW YA, dp
224 5, // BB INC dp+X
225 2, // BC INC A
226 2, // BD MOV SP, X
227 3, // BE DAS A
228 4, // BF MOV A, (X)+
229
230 // 0xC0-0xCF
231 3, // C0 DI
232 8, // C1 TCALL 12
233 4, // C2 SET1 dp, 6
234 5, // C3 BBS dp, 6, rel
235 3, // C4 MOV dp, A
236 4, // C5 MOV abs, A
237 3, // C6 MOV (X), A
238 6, // C7 MOV (dp+X), A
239 2, // C8 CMP X, #imm
240 4, // C9 MOV abs, X
241 6, // CA MOV1 abs.bit, C
242 3, // CB MOV dp, Y
243 4, // CC MOV abs, Y
244 2, // CD MOV X, #imm
245 4, // CE POP X
246 9, // CF MUL YA
247
248 // 0xD0-0xDF
249 2, // D0 BNE rel
250 8, // D1 TCALL 13
251 4, // D2 CLR1 dp, 6
252 5, // D3 BBC dp, 6, rel
253 4, // D4 MOV dp+X, A
254 5, // D5 MOV abs+X, A
255 5, // D6 MOV abs+Y, A
256 6, // D7 MOV (dp)+Y, A
257 3, // D8 MOV dp, X
258 4, // D9 MOV dp+Y, X
259 5, // DA MOVW dp, YA
260 4, // DB MOV dp+X, Y
261 2, // DC DEC Y
262 2, // DD MOV A, Y
263 6, // DE CBNE dp+X, rel
264 3, // DF DAA A
265
266 // 0xE0-0xEF
267 2, // E0 CLRV
268 8, // E1 TCALL 14
269 4, // E2 SET1 dp, 7
270 5, // E3 BBS dp, 7, rel
271 3, // E4 MOV A, dp
272 4, // E5 MOV A, abs
273 3, // E6 MOV A, (X)
274 6, // E7 MOV A, (dp+X)
275 2, // E8 MOV A, #imm
276 4, // E9 MOV X, abs
277 5, // EA NOT1 abs.bit
278 3, // EB MOV Y, dp
279 4, // EC MOV Y, abs
280 3, // ED NOTC
281 4, // EE POP Y
282 3, // EF SLEEP
283
284 // 0xF0-0xFF
285 2, // F0 BEQ rel
286 8, // F1 TCALL 15
287 4, // F2 CLR1 dp, 7
288 5, // F3 BBC dp, 7, rel
289 4, // F4 MOV A, dp+X
290 5, // F5 MOV A, abs+X
291 5, // F6 MOV A, abs+Y
292 6, // F7 MOV A, (dp)+Y
293 3, // F8 MOV X, dp
294 4, // F9 MOV X, dp+Y
295 6, // FA MOV dp, dp
296 4, // FB MOV Y, dp+X
297 2, // FC INC Y
298 2, // FD MOV Y, A
299 4, // FE DBNZ Y, rel
300 3 // FF STOP
301};
302
303} // namespace emu
304} // namespace yaze
305
306#endif // YAZE_APP_EMU_AUDIO_INTERNAL_SPC700_CYCLES_H
307
constexpr int spc700_cycles[256]
Main namespace for the application.