removing now unneeded dir from package
[drnoksnes] / spc700a.s
1
2         .DATA
3         
4 @  notaz's SPC700 Emulator v0.11 - Assembler Output
5
6 @ (c) Copyright 2006 notaz, All rights reserved.
7
8 @ this is a rewrite of spc700.cpp in ARM asm, inspired by other asm CPU cores like
9 @ Cyclone and DrZ80. It is meant to be used in Snes9x emulator ports for ARM platforms.
10
11 @ the code is released under Snes9x license. See spcgen.c or any other source file
12 @ from Snes9x source tree.
13
14 .text
15   .extern IAPU
16   .extern CPU @ for STOP and SLEEP
17   .extern S9xAPUGetByte
18   .extern S9xAPUSetByte
19   .extern S9xAPUGetByteZ
20   .extern S9xAPUSetByteZ
21
22   .global spc700_execute @ int cycles
23   .type spc700_execute, function
24   .global Spc700JumpTab
25
26   opcode  .req r3
27   cycles  .req r4
28   context .req r5
29   opcodes .req r6
30   spc_pc  .req r7
31   spc_ya  .req r8
32   spc_p   .req r9
33   spc_x   .req r10
34   spc_s   .req r11
35   spc_ram .req lr
36
37   .equ iapu_directpage,    0x00
38   .equ iapu_ram,           0x44
39   .equ iapu_extraram,      0x48
40   .equ iapu_allregs_load,  0x30
41   .equ iapu_allregs_save,  0x34
42
43   .equ flag_c,             0x01
44   .equ flag_z,             0x02
45   .equ flag_i,             0x04
46   .equ flag_h,             0x08
47   .equ flag_b,             0x10
48   .equ flag_d,             0x20
49   .equ flag_o,             0x40
50   .equ flag_n,             0x80
51
52 @ --------------------------- Framework --------------------------
53 spc700_execute: @ int cycles
54   stmfd sp!,{r4-r11,lr}
55   ldr   context,=IAPU               @ Pointer to SIAPU struct
56   mov   cycles,r0                   @ Cycles
57   add   r0,context,#iapu_allregs_load
58   ldmia r0,{opcodes,spc_pc,spc_ya,spc_p,spc_x,spc_ram}
59   uxtb  spc_s,spc_x,ror #8
60   and   spc_x,spc_x,#0xff
61
62   ldrb  opcode,[spc_pc],#1          @ Fetch first opcode
63   ldr   pc,[opcodes,opcode,lsl #2]  @ Jump to opcode handler
64
65
66 @ We come back here after execution
67 spc700End:
68   orr   spc_x,spc_x,spc_s,lsl #8
69   add   r0,context,#iapu_allregs_save
70   stmia r0,{spc_pc,spc_ya,spc_p,spc_x}
71   mov   r0,cycles
72   ldmfd sp!,{r4-r11,pc}
73
74   .ltorg
75
76
77
78 Apu00:
79   subs   cycles,cycles,#42
80   ldrgeb opcode,[spc_pc],#1
81   ldrge  pc,[opcodes,opcode,lsl #2]
82   b      spc700End
83
84
85 Apu01:
86   sub   r0,spc_pc,spc_ram
87   add   r1,spc_ram,spc_s
88   strb  r0,[r1,#0xff]
89   mov   r0,r0,lsr #8
90   strb  r0,[r1,#0x100]
91   sub   spc_s,spc_s,#2
92   uxtb  spc_s, spc_s
93   ldr   r0,[context,#iapu_extraram]
94   ldrh  r0,[r0,#0x1e]
95   add   spc_pc,spc_ram,r0
96   subs   cycles,cycles,#168
97   ldrgeb opcode,[spc_pc],#1
98   ldrge  pc,[opcodes,opcode,lsl #2]
99   b      spc700End
100
101
102 Apu02:
103   ldrb  r0,[spc_pc]
104   bl    S9xAPUGetByteZ
105   orr   r0,r0,#0x01
106   ldrb  r1,[spc_pc],#1
107   bl    S9xAPUSetByteZ
108   ldr   spc_ram,[context,#iapu_ram]
109   subs   cycles,cycles,#84
110   ldrgeb opcode,[spc_pc],#1
111   ldrge  pc,[opcodes,opcode,lsl #2]
112   b      spc700End
113
114
115 Apu03:
116   ldrb  r0,[spc_pc],#1
117   bl    S9xAPUGetByteZ
118   ldr   spc_ram,[context,#iapu_ram]
119   tst   r0,#0x01
120   addeq spc_pc,spc_pc,#1
121   ldrnesb r0,[spc_pc],#1
122   addne spc_pc,spc_pc,r0
123   subne cycles,cycles,#42
124   subs   cycles,cycles,#105
125   ldrgeb opcode,[spc_pc],#1
126   ldrge  pc,[opcodes,opcode,lsl #2]
127   b      spc700End
128
129
130 Apu04:
131   ldrb  r0,[spc_pc],#1
132   bl    S9xAPUGetByteZ
133   ldr   spc_ram,[context,#iapu_ram]
134   orr   spc_ya,spc_ya,r0
135   and   spc_p,spc_p,#0xff
136   orr   spc_p,spc_p,spc_ya,lsl #24
137   subs   cycles,cycles,#63
138   ldrgeb opcode,[spc_pc],#1
139   ldrge  pc,[opcodes,opcode,lsl #2]
140   b      spc700End
141
142
143 Apu05:
144   ldrb  r0,[spc_pc],#1
145   ldrb  r12,[spc_pc],#1
146   orr   r0,r0,r12,lsl #8
147   bl    S9xAPUGetByte
148   ldr   spc_ram,[context,#iapu_ram]
149   orr   spc_ya,spc_ya,r0
150   and   spc_p,spc_p,#0xff
151   orr   spc_p,spc_p,spc_ya,lsl #24
152   subs   cycles,cycles,#84
153   ldrgeb opcode,[spc_pc],#1
154   ldrge  pc,[opcodes,opcode,lsl #2]
155   b      spc700End
156
157
158 Apu06:
159   mov   r0,spc_x
160   bl    S9xAPUGetByteZ
161   ldr   spc_ram,[context,#iapu_ram]
162   orr   spc_ya,spc_ya,r0
163   and   spc_p,spc_p,#0xff
164   orr   spc_p,spc_p,spc_ya,lsl #24
165   subs   cycles,cycles,#63
166   ldrgeb opcode,[spc_pc],#1
167   ldrge  pc,[opcodes,opcode,lsl #2]
168   b      spc700End
169
170
171 Apu07:
172   ldrb  r0,[spc_pc],#1
173   add   r0,r0,spc_x
174   and   r0,r0,#0xff
175   ldr   r12,[context,#iapu_directpage]
176   ldrb  r0,[r12,r0]!
177   ldrb  r12,[r12,#1]
178   orr   r0,r0,r12,lsl #8
179   bl    S9xAPUGetByte
180   ldr   spc_ram,[context,#iapu_ram]
181   orr   spc_ya,spc_ya,r0
182   and   spc_p,spc_p,#0xff
183   orr   spc_p,spc_p,spc_ya,lsl #24
184   subs   cycles,cycles,#126
185   ldrgeb opcode,[spc_pc],#1
186   ldrge  pc,[opcodes,opcode,lsl #2]
187   b      spc700End
188
189
190 Apu08:
191   ldrb  r0,[spc_pc],#1
192   orr   spc_ya,spc_ya,r0
193   and   spc_p,spc_p,#0xff
194   orr   spc_p,spc_p,spc_ya,lsl #24
195   subs   cycles,cycles,#42
196   ldrgeb opcode,[spc_pc],#1
197   ldrge  pc,[opcodes,opcode,lsl #2]
198   b      spc700End
199
200
201 Apu09:
202   ldrb  r0,[spc_pc],#1
203   bl    S9xAPUGetByteZ
204   orr   spc_x,spc_x,r0,lsl #24 @ save from harm
205   ldrb  r0,[spc_pc]
206   bl    S9xAPUGetByteZ
207   orr   r0,r0,spc_x,lsr #24
208   and   spc_x,spc_x,#0xff
209   and   spc_p,spc_p,#0xff
210   orr   spc_p,spc_p,r0,lsl #24
211   ldrb  r1,[spc_pc],#1
212   bl    S9xAPUSetByteZ
213   ldr   spc_ram,[context,#iapu_ram]
214   subs   cycles,cycles,#126
215   ldrgeb opcode,[spc_pc],#1
216   ldrge  pc,[opcodes,opcode,lsl #2]
217   b      spc700End
218
219
220 Apu0A:
221   ldrb  r0,[spc_pc],#1
222   ldrb  r1,[spc_pc],#1
223   add   r0,r0,r1,lsl #8
224   mov   r1,r1,lsr #5
225   mov   r0,r0,lsl #19
226   mov   r0,r0,lsr #19
227   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
228   bl    S9xAPUGetByte
229   mov   r1,spc_x,lsr #29
230   and   spc_x,spc_x,#0xff
231   mov   r0,r0,lsr r1
232   tst   r0,#1
233   orrne spc_p,spc_p,#flag_c
234   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
235   subs   cycles,cycles,#105
236   ldrgeb opcode,[spc_pc],#1
237   ldrge  pc,[opcodes,opcode,lsl #2]
238   b      spc700End
239
240
241 Apu0B:
242   ldrb  r0,[spc_pc]
243   bl    S9xAPUGetByteZ
244   tst   r0,#0x80
245   orrne spc_p,spc_p,#flag_c
246   biceq spc_p,spc_p,#flag_c
247   mov   r0,r0,lsl #1
248   and   spc_p,spc_p,#0xff
249   orr   spc_p,spc_p,r0,lsl #24
250   ldrb  r1,[spc_pc],#1
251   bl    S9xAPUSetByteZ
252   ldr   spc_ram,[context,#iapu_ram]
253   subs   cycles,cycles,#84
254   ldrgeb opcode,[spc_pc],#1
255   ldrge  pc,[opcodes,opcode,lsl #2]
256   b      spc700End
257
258
259 Apu0C:
260   ldrb  r0,[spc_pc],#1
261   ldrb  r12,[spc_pc],#1
262   orr   r0,r0,r12,lsl #8
263   stmfd sp!,{r0}
264   bl    S9xAPUGetByte
265   tst   r0,#0x80
266   orrne spc_p,spc_p,#flag_c
267   biceq spc_p,spc_p,#flag_c
268   mov   r0,r0,lsl #1
269   and   spc_p,spc_p,#0xff
270   orr   spc_p,spc_p,r0,lsl #24
271   ldmfd sp!,{r1}
272   bl    S9xAPUSetByte
273   ldr   spc_ram,[context,#iapu_ram]
274   subs   cycles,cycles,#105
275   ldrgeb opcode,[spc_pc],#1
276   ldrge  pc,[opcodes,opcode,lsl #2]
277   b      spc700End
278
279
280 Apu0D:
281   mov   r0,spc_p,lsr #24
282   and   r1,r0,#0x80
283   tst   r0,r0
284   orreq r1,r1,#flag_z
285   and   spc_p,spc_p,#0x7d @ clear N & Z
286   orr   spc_p,spc_p,r1
287   add   r1,spc_ram,spc_s
288   strb  spc_p,[r1,#0x100]
289   sub   spc_s,spc_s,#1
290   orr   spc_p,spc_p,r0,lsl #24
291   subs   cycles,cycles,#84
292   ldrgeb opcode,[spc_pc],#1
293   ldrge  pc,[opcodes,opcode,lsl #2]
294   b      spc700End
295
296
297 Apu0E:
298   ldrb  r0,[spc_pc],#1
299   ldrb  r12,[spc_pc],#1
300   orr   r0,r0,r12,lsl #8
301   orr   spc_x,spc_x,r0,lsl #16 @ save from memhandler
302   bl    S9xAPUGetByte
303   and   r2,r0,spc_ya
304   and   spc_p,spc_p,#0xff
305   orr   spc_p,spc_p,r2,lsl #24
306   orr   r0,r0,spc_ya
307   mov   r1,spc_x,lsr #16
308   and   spc_x,spc_x,#0xff
309   bl    S9xAPUSetByte
310   ldr   spc_ram,[context,#iapu_ram]
311   subs   cycles,cycles,#126
312   ldrgeb opcode,[spc_pc],#1
313   ldrge  pc,[opcodes,opcode,lsl #2]
314   b      spc700End
315
316
317 Apu0F:
318   sub   r0,spc_pc,spc_ram
319   add   r1,spc_ram,spc_s
320   strb  r0,[r1,#0xff]
321   mov   r0,r0,lsr #8
322   strb  r0,[r1,#0x100]
323   sub   spc_s,spc_s,#2
324   mov   r0,spc_p,lsr #24
325   and   r1,r0,#0x80
326   tst   r0,r0
327   orrne r1,r1,#flag_z
328   and   spc_p,spc_p,#0x7d @ clear N & Z
329   orr   spc_p,spc_p,r1
330   add   r1,spc_ram,spc_s
331   strb  spc_p,[r1,#0x100]
332   sub   spc_s,spc_s,#1
333   orr   spc_p,spc_p,#flag_b
334   bic   spc_p,spc_p,#flag_i
335   ldr   r0,[context,#iapu_extraram]
336   ldrh  r0,[r0,#0x20]
337   add   spc_pc,spc_ram,r0
338   subs   cycles,cycles,#168
339   ldrgeb opcode,[spc_pc],#1
340   ldrge  pc,[opcodes,opcode,lsl #2]
341   b      spc700End
342
343
344 Apu10:
345   tst   spc_p,#0x80000000
346   addne spc_pc,spc_pc,#1
347   ldreqsb r0,[spc_pc],#1
348   addeq spc_pc,spc_pc,r0
349   subeq cycles,cycles,#42
350   subs   cycles,cycles,#42
351   ldrgeb opcode,[spc_pc],#1
352   ldrge  pc,[opcodes,opcode,lsl #2]
353   b      spc700End
354
355
356 Apu11:
357   sub   r0,spc_pc,spc_ram
358   add   r1,spc_ram,spc_s
359   strb  r0,[r1,#0xff]
360   mov   r0,r0,lsr #8
361   strb  r0,[r1,#0x100]
362   sub   spc_s,spc_s,#2
363   ldr   r0,[context,#iapu_extraram]
364   ldrh  r0,[r0,#0x1c]
365   add   spc_pc,spc_ram,r0
366   subs   cycles,cycles,#168
367   ldrgeb opcode,[spc_pc],#1
368   ldrge  pc,[opcodes,opcode,lsl #2]
369   b      spc700End
370
371
372 Apu12:
373   ldrb  r0,[spc_pc]
374   bl    S9xAPUGetByteZ
375   bic   r0,r0,#0x01
376   ldrb  r1,[spc_pc],#1
377   bl    S9xAPUSetByteZ
378   ldr   spc_ram,[context,#iapu_ram]
379   subs   cycles,cycles,#84
380   ldrgeb opcode,[spc_pc],#1
381   ldrge  pc,[opcodes,opcode,lsl #2]
382   b      spc700End
383
384
385 Apu13:
386   ldrb  r0,[spc_pc],#1
387   bl    S9xAPUGetByteZ
388   ldr   spc_ram,[context,#iapu_ram]
389   tst   r0,#0x01
390   addne spc_pc,spc_pc,#1
391   ldreqsb r0,[spc_pc],#1
392   addeq spc_pc,spc_pc,r0
393   subeq cycles,cycles,#42
394   subs   cycles,cycles,#105
395   ldrgeb opcode,[spc_pc],#1
396   ldrge  pc,[opcodes,opcode,lsl #2]
397   b      spc700End
398
399
400 Apu14:
401   ldrb  r0,[spc_pc],#1
402   add   r0,r0,spc_x
403   bl    S9xAPUGetByteZ
404   ldr   spc_ram,[context,#iapu_ram]
405   orr   spc_ya,spc_ya,r0
406   and   spc_p,spc_p,#0xff
407   orr   spc_p,spc_p,spc_ya,lsl #24
408   subs   cycles,cycles,#84
409   ldrgeb opcode,[spc_pc],#1
410   ldrge  pc,[opcodes,opcode,lsl #2]
411   b      spc700End
412
413
414 Apu15:
415   ldrb  r0,[spc_pc],#1
416   ldrb  r12,[spc_pc],#1
417   orr   r0,r0,r12,lsl #8
418   add   r0,r0,spc_x
419   bl    S9xAPUGetByte
420   ldr   spc_ram,[context,#iapu_ram]
421   orr   spc_ya,spc_ya,r0
422   and   spc_p,spc_p,#0xff
423   orr   spc_p,spc_p,spc_ya,lsl #24
424   subs   cycles,cycles,#105
425   ldrgeb opcode,[spc_pc],#1
426   ldrge  pc,[opcodes,opcode,lsl #2]
427   b      spc700End
428
429
430 Apu16:
431   ldrb  r0,[spc_pc],#1
432   ldrb  r12,[spc_pc],#1
433   orr   r0,r0,r12,lsl #8
434   add   r0,r0,spc_ya,lsr #8
435   bl    S9xAPUGetByte
436   ldr   spc_ram,[context,#iapu_ram]
437   orr   spc_ya,spc_ya,r0
438   and   spc_p,spc_p,#0xff
439   orr   spc_p,spc_p,spc_ya,lsl #24
440   subs   cycles,cycles,#105
441   ldrgeb opcode,[spc_pc],#1
442   ldrge  pc,[opcodes,opcode,lsl #2]
443   b      spc700End
444
445
446 Apu17:
447   ldrb  r0,[spc_pc],#1
448   ldr   r12,[context,#iapu_directpage]
449   ldrb  r0,[r12,r0]!
450   ldrb  r12,[r12,#1]
451   orr   r0,r0,r12,lsl #8
452   add   r0,r0,spc_ya,lsr #8
453   bl    S9xAPUGetByte
454   ldr   spc_ram,[context,#iapu_ram]
455   orr   spc_ya,spc_ya,r0
456   and   spc_p,spc_p,#0xff
457   orr   spc_p,spc_p,spc_ya,lsl #24
458   subs   cycles,cycles,#126
459   ldrgeb opcode,[spc_pc],#1
460   ldrge  pc,[opcodes,opcode,lsl #2]
461   b      spc700End
462
463
464 Apu18:
465   ldrb  r0,[spc_pc,#1]
466   bl    S9xAPUGetByteZ
467   ldrb  r1,[spc_pc],#1
468   orr   r0,r0,r1
469   and   spc_p,spc_p,#0xff
470   orr   spc_p,spc_p,r0,lsl #24
471   ldrb  r1,[spc_pc],#1
472   bl    S9xAPUSetByteZ
473   ldr   spc_ram,[context,#iapu_ram]
474   subs   cycles,cycles,#105
475   ldrgeb opcode,[spc_pc],#1
476   ldrge  pc,[opcodes,opcode,lsl #2]
477   b      spc700End
478
479
480 Apu19:
481   mov   r0,spc_x
482   bl    S9xAPUGetByteZ
483   orr   spc_x,spc_x,r0,lsl #24
484   mov   r0,spc_ya,lsr #8
485   bl    S9xAPUGetByteZ
486   orr   r0,r0,spc_x,lsr #24
487   and   spc_x,spc_x,#0xff
488   and   spc_p,spc_p,#0xff
489   orr   spc_p,spc_p,r0,lsl #24
490   mov   r1,spc_x
491   bl    S9xAPUSetByteZ
492   ldr   spc_ram,[context,#iapu_ram]
493   subs   cycles,cycles,#105
494   ldrgeb opcode,[spc_pc],#1
495   ldrge  pc,[opcodes,opcode,lsl #2]
496   b      spc700End
497
498
499 Apu1A:
500   ldrb  r0,[spc_pc]
501   bl    S9xAPUGetByteZ
502   stmfd sp!,{r0}
503   ldrb  r0,[spc_pc]
504   add   r0,r0,#1
505   bl    S9xAPUGetByteZ
506   ldmfd sp!,{r1}
507   orr   r1,r1,r0,lsl #8
508   sub   r0,r1,#1
509   and   spc_p,spc_p,#0xff
510   orr   spc_p,spc_p,r0,lsl #16
511   tst   r0,#0xff
512   orrne spc_p,spc_p,#0x01000000
513   stmfd sp!,{r0}
514   ldrb  r1,[spc_pc]
515   bl    S9xAPUSetByteZ
516   ldmfd sp!,{r0}
517   mov   r0,r0,lsr #8
518   ldrb  r1,[spc_pc],#1
519   add   r1,r1,#1
520   bl    S9xAPUSetByteZ
521   ldr   spc_ram,[context,#iapu_ram]
522   subs   cycles,cycles,#126
523   ldrgeb opcode,[spc_pc],#1
524   ldrge  pc,[opcodes,opcode,lsl #2]
525   b      spc700End
526
527
528 Apu1B:
529   ldrb  r0,[spc_pc],#1
530   add   r0,r0,spc_x
531   stmfd sp!,{r0}
532   bl    S9xAPUGetByteZ
533   tst   r0,#0x80
534   orrne spc_p,spc_p,#flag_c
535   biceq spc_p,spc_p,#flag_c
536   mov   r0,r0,lsl #1
537   and   spc_p,spc_p,#0xff
538   orr   spc_p,spc_p,r0,lsl #24
539   ldmfd sp!,{r1}
540   bl    S9xAPUSetByteZ
541   ldr   spc_ram,[context,#iapu_ram]
542   subs   cycles,cycles,#105
543   ldrgeb opcode,[spc_pc],#1
544   ldrge  pc,[opcodes,opcode,lsl #2]
545   b      spc700End
546
547
548 Apu1C:
549   tst   spc_ya,#0x80
550   orrne spc_p,spc_p,#flag_c
551   biceq spc_p,spc_p,#flag_c
552   and   r0,spc_ya,#0x7f
553   and   spc_ya,spc_ya,#0xff00
554   orr   spc_ya,spc_ya,r0,lsl #1
555   and   spc_p,spc_p,#0xff
556   orr   spc_p,spc_p,spc_ya,lsl #24
557   subs   cycles,cycles,#42
558   ldrgeb opcode,[spc_pc],#1
559   ldrge  pc,[opcodes,opcode,lsl #2]
560   b      spc700End
561
562
563 Apu1D:
564   sub   spc_x,spc_x,#1
565   and   spc_x,spc_x,#0xff
566   and   spc_p,spc_p,#0xff
567   orr   spc_p,spc_p,spc_x,lsl #24
568   subs   cycles,cycles,#42
569   ldrgeb opcode,[spc_pc],#1
570   ldrge  pc,[opcodes,opcode,lsl #2]
571   b      spc700End
572
573
574 Apu1E:
575   ldrb  r0,[spc_pc],#1
576   ldrb  r12,[spc_pc],#1
577   orr   r0,r0,r12,lsl #8
578   bl    S9xAPUGetByte
579   ldr   spc_ram,[context,#iapu_ram]
580   subs  r12,spc_x,r0
581   orrge spc_p,spc_p,#flag_c
582   biclt spc_p,spc_p,#flag_c
583   and   spc_p,spc_p,#0xff
584   orr   spc_p,spc_p,r12,lsl #24
585   subs   cycles,cycles,#84
586   ldrgeb opcode,[spc_pc],#1
587   ldrge  pc,[opcodes,opcode,lsl #2]
588   b      spc700End
589
590
591 Apu1F:
592   ldrb  r0,[spc_pc],#1
593   ldrb  r12,[spc_pc],#1
594   orr   r0,r0,r12,lsl #8
595   add   r0,r0,spc_x
596   sub   sp,sp,#8
597   str   r0,[sp,#4]
598   bl    S9xAPUGetByte
599   str   r0,[sp]
600   ldr   r0,[sp,#4]
601   add   r0,r0,#1
602   bl    S9xAPUGetByte
603   ldr   spc_ram,[context,#iapu_ram]
604   ldr   r1,[sp],#8
605   orr   r0,r1,r0,lsl #8
606   add   spc_pc,spc_ram,r0
607   subs   cycles,cycles,#126
608   ldrgeb opcode,[spc_pc],#1
609   ldrge  pc,[opcodes,opcode,lsl #2]
610   b      spc700End
611
612
613 Apu20:
614   bic   spc_p,spc_p,#flag_d
615   str   spc_ram,[context,#iapu_directpage]
616   subs   cycles,cycles,#42
617   ldrgeb opcode,[spc_pc],#1
618   ldrge  pc,[opcodes,opcode,lsl #2]
619   b      spc700End
620
621
622 Apu21:
623   sub   r0,spc_pc,spc_ram
624   add   r1,spc_ram,spc_s
625   strb  r0,[r1,#0xff]
626   mov   r0,r0,lsr #8
627   strb  r0,[r1,#0x100]
628   sub   spc_s,spc_s,#2
629   ldr   r0,[context,#iapu_extraram]
630   ldrh  r0,[r0,#0x1a]
631   add   spc_pc,spc_ram,r0
632   subs   cycles,cycles,#168
633   ldrgeb opcode,[spc_pc],#1
634   ldrge  pc,[opcodes,opcode,lsl #2]
635   b      spc700End
636
637
638 Apu22:
639   ldrb  r0,[spc_pc]
640   bl    S9xAPUGetByteZ
641   orr   r0,r0,#0x02
642   ldrb  r1,[spc_pc],#1
643   bl    S9xAPUSetByteZ
644   ldr   spc_ram,[context,#iapu_ram]
645   subs   cycles,cycles,#84
646   ldrgeb opcode,[spc_pc],#1
647   ldrge  pc,[opcodes,opcode,lsl #2]
648   b      spc700End
649
650
651 Apu23:
652   ldrb  r0,[spc_pc],#1
653   bl    S9xAPUGetByteZ
654   ldr   spc_ram,[context,#iapu_ram]
655   tst   r0,#0x02
656   addeq spc_pc,spc_pc,#1
657   ldrnesb r0,[spc_pc],#1
658   addne spc_pc,spc_pc,r0
659   subne cycles,cycles,#42
660   subs   cycles,cycles,#105
661   ldrgeb opcode,[spc_pc],#1
662   ldrge  pc,[opcodes,opcode,lsl #2]
663   b      spc700End
664
665
666 Apu24:
667   ldrb  r0,[spc_pc],#1
668   bl    S9xAPUGetByteZ
669   ldr   spc_ram,[context,#iapu_ram]
670   orr   r0,r0,#0xff00
671   and   spc_ya,spc_ya,r0
672   and   spc_p,spc_p,#0xff
673   orr   spc_p,spc_p,spc_ya,lsl #24
674   subs   cycles,cycles,#63
675   ldrgeb opcode,[spc_pc],#1
676   ldrge  pc,[opcodes,opcode,lsl #2]
677   b      spc700End
678
679
680 Apu25:
681   ldrb  r0,[spc_pc],#1
682   ldrb  r12,[spc_pc],#1
683   orr   r0,r0,r12,lsl #8
684   bl    S9xAPUGetByte
685   ldr   spc_ram,[context,#iapu_ram]
686   orr   r0,r0,#0xff00
687   and   spc_ya,spc_ya,r0
688   and   spc_p,spc_p,#0xff
689   orr   spc_p,spc_p,spc_ya,lsl #24
690   subs   cycles,cycles,#84
691   ldrgeb opcode,[spc_pc],#1
692   ldrge  pc,[opcodes,opcode,lsl #2]
693   b      spc700End
694
695
696 Apu26:
697   mov   r0,spc_x
698   bl    S9xAPUGetByteZ
699   ldr   spc_ram,[context,#iapu_ram]
700   orr   r0,r0,#0xff00
701   and   spc_ya,spc_ya,r0
702   and   spc_p,spc_p,#0xff
703   orr   spc_p,spc_p,spc_ya,lsl #24
704   subs   cycles,cycles,#63
705   ldrgeb opcode,[spc_pc],#1
706   ldrge  pc,[opcodes,opcode,lsl #2]
707   b      spc700End
708
709
710 Apu27:
711   ldrb  r0,[spc_pc],#1
712   add   r0,r0,spc_x
713   and   r0,r0,#0xff
714   ldr   r12,[context,#iapu_directpage]
715   ldrb  r0,[r12,r0]!
716   ldrb  r12,[r12,#1]
717   orr   r0,r0,r12,lsl #8
718   bl    S9xAPUGetByte
719   ldr   spc_ram,[context,#iapu_ram]
720   orr   r0,r0,#0xff00
721   and   spc_ya,spc_ya,r0
722   and   spc_p,spc_p,#0xff
723   orr   spc_p,spc_p,spc_ya,lsl #24
724   subs   cycles,cycles,#126
725   ldrgeb opcode,[spc_pc],#1
726   ldrge  pc,[opcodes,opcode,lsl #2]
727   b      spc700End
728
729
730 Apu28:
731   ldrb  r0,[spc_pc],#1
732   orr   r0,r0,#0xff00
733   and   spc_ya,spc_ya,r0
734   and   spc_p,spc_p,#0xff
735   orr   spc_p,spc_p,spc_ya,lsl #24
736   subs   cycles,cycles,#42
737   ldrgeb opcode,[spc_pc],#1
738   ldrge  pc,[opcodes,opcode,lsl #2]
739   b      spc700End
740
741
742 Apu29:
743   ldrb  r0,[spc_pc],#1
744   bl    S9xAPUGetByteZ
745   stmfd sp!,{r0}
746   ldrb  r0,[spc_pc]
747   bl    S9xAPUGetByteZ
748   ldmfd sp!,{r1}
749   and   r0,r0,r1
750   and   spc_p,spc_p,#0xff
751   orr   spc_p,spc_p,r0,lsl #24
752   ldrb  r1,[spc_pc],#1
753   bl    S9xAPUSetByteZ
754   ldr   spc_ram,[context,#iapu_ram]
755   subs   cycles,cycles,#126
756   ldrgeb opcode,[spc_pc],#1
757   ldrge  pc,[opcodes,opcode,lsl #2]
758   b      spc700End
759
760
761 Apu2A:
762   ldrb  r0,[spc_pc],#1
763   ldrb  r1,[spc_pc],#1
764   add   r0,r0,r1,lsl #8
765   mov   r1,r1,lsr #5
766   mov   r0,r0,lsl #19
767   mov   r0,r0,lsr #19
768   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
769   bl    S9xAPUGetByte
770   mov   r1,spc_x,lsr #29
771   and   spc_x,spc_x,#0xff
772   mov   r0,r0,lsr r1
773   tst   r0,#1
774   orreq spc_p,spc_p,#flag_c
775   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
776   subs   cycles,cycles,#105
777   ldrgeb opcode,[spc_pc],#1
778   ldrge  pc,[opcodes,opcode,lsl #2]
779   b      spc700End
780
781
782 Apu2B:
783   ldrb  r0,[spc_pc]
784   bl    S9xAPUGetByteZ
785   mov   r0,r0,lsl #1
786   tst   spc_p,#flag_c
787   orrne r0,r0,#1
788   tst   r0,#0x100
789   orrne spc_p,spc_p,#flag_c
790   biceq spc_p,spc_p,#flag_c
791   and   spc_p,spc_p,#0xff
792   orr   spc_p,spc_p,r0,lsl #24
793   ldrb  r1,[spc_pc],#1
794   bl    S9xAPUSetByteZ
795   ldr   spc_ram,[context,#iapu_ram]
796   subs   cycles,cycles,#84
797   ldrgeb opcode,[spc_pc],#1
798   ldrge  pc,[opcodes,opcode,lsl #2]
799   b      spc700End
800
801
802 Apu2C:
803   ldrb  r0,[spc_pc],#1
804   ldrb  r12,[spc_pc],#1
805   orr   r0,r0,r12,lsl #8
806   stmfd sp!,{r0}
807   bl    S9xAPUGetByte
808   mov   r0,r0,lsl #1
809   tst   spc_p,#flag_c
810   orrne r0,r0,#1
811   tst   r0,#0x100
812   orrne spc_p,spc_p,#flag_c
813   biceq spc_p,spc_p,#flag_c
814   and   spc_p,spc_p,#0xff
815   orr   spc_p,spc_p,r0,lsl #24
816   ldmfd sp!,{r1}
817   bl    S9xAPUSetByte
818   ldr   spc_ram,[context,#iapu_ram]
819   subs   cycles,cycles,#105
820   ldrgeb opcode,[spc_pc],#1
821   ldrge  pc,[opcodes,opcode,lsl #2]
822   b      spc700End
823
824
825 Apu2D:
826   add   r1,spc_ram,spc_s
827   strb  spc_ya,[r1,#0x100]
828   sub   spc_s,spc_s,#1
829   subs   cycles,cycles,#84
830   ldrgeb opcode,[spc_pc],#1
831   ldrge  pc,[opcodes,opcode,lsl #2]
832   b      spc700End
833
834
835 Apu2E:
836   ldrb  r0,[spc_pc],#1
837   bl    S9xAPUGetByteZ
838   ldr   spc_ram,[context,#iapu_ram]
839   and   r1,spc_ya,#0xff
840   cmp   r0,r1
841   addeq spc_pc,spc_pc,#1
842   ldrnesb r0,[spc_pc],#1
843   addne spc_pc,spc_pc,r0
844   subne cycles,cycles,#42
845   subs   cycles,cycles,#105
846   ldrgeb opcode,[spc_pc],#1
847   ldrge  pc,[opcodes,opcode,lsl #2]
848   b      spc700End
849
850
851 Apu2F:
852   ldrsb r0,[spc_pc],#1
853   add   spc_pc,spc_pc,r0
854   subs   cycles,cycles,#84
855   ldrgeb opcode,[spc_pc],#1
856   ldrge  pc,[opcodes,opcode,lsl #2]
857   b      spc700End
858
859
860 Apu30:
861   tst   spc_p,#0x80000000
862   addeq spc_pc,spc_pc,#1
863   ldrnesb r0,[spc_pc],#1
864   addne spc_pc,spc_pc,r0
865   subne cycles,cycles,#42
866   subs   cycles,cycles,#42
867   ldrgeb opcode,[spc_pc],#1
868   ldrge  pc,[opcodes,opcode,lsl #2]
869   b      spc700End
870
871
872 Apu31:
873   sub   r0,spc_pc,spc_ram
874   add   r1,spc_ram,spc_s
875   strb  r0,[r1,#0xff]
876   mov   r0,r0,lsr #8
877   strb  r0,[r1,#0x100]
878   sub   spc_s,spc_s,#2
879   ldr   r0,[context,#iapu_extraram]
880   ldrh  r0,[r0,#0x18]
881   add   spc_pc,spc_ram,r0
882   subs   cycles,cycles,#168
883   ldrgeb opcode,[spc_pc],#1
884   ldrge  pc,[opcodes,opcode,lsl #2]
885   b      spc700End
886
887
888 Apu32:
889   ldrb  r0,[spc_pc]
890   bl    S9xAPUGetByteZ
891   bic   r0,r0,#0x02
892   ldrb  r1,[spc_pc],#1
893   bl    S9xAPUSetByteZ
894   ldr   spc_ram,[context,#iapu_ram]
895   subs   cycles,cycles,#84
896   ldrgeb opcode,[spc_pc],#1
897   ldrge  pc,[opcodes,opcode,lsl #2]
898   b      spc700End
899
900
901 Apu33:
902   ldrb  r0,[spc_pc],#1
903   bl    S9xAPUGetByteZ
904   ldr   spc_ram,[context,#iapu_ram]
905   tst   r0,#0x02
906   addne spc_pc,spc_pc,#1
907   ldreqsb r0,[spc_pc],#1
908   addeq spc_pc,spc_pc,r0
909   subeq cycles,cycles,#42
910   subs   cycles,cycles,#105
911   ldrgeb opcode,[spc_pc],#1
912   ldrge  pc,[opcodes,opcode,lsl #2]
913   b      spc700End
914
915
916 Apu34:
917   ldrb  r0,[spc_pc],#1
918   add   r0,r0,spc_x
919   bl    S9xAPUGetByteZ
920   ldr   spc_ram,[context,#iapu_ram]
921   orr   r0,r0,#0xff00
922   and   spc_ya,spc_ya,r0
923   and   spc_p,spc_p,#0xff
924   orr   spc_p,spc_p,spc_ya,lsl #24
925   subs   cycles,cycles,#84
926   ldrgeb opcode,[spc_pc],#1
927   ldrge  pc,[opcodes,opcode,lsl #2]
928   b      spc700End
929
930
931 Apu35:
932   ldrb  r0,[spc_pc],#1
933   ldrb  r12,[spc_pc],#1
934   orr   r0,r0,r12,lsl #8
935   add   r0,r0,spc_x
936   bl    S9xAPUGetByte
937   ldr   spc_ram,[context,#iapu_ram]
938   orr   r0,r0,#0xff00
939   and   spc_ya,spc_ya,r0
940   and   spc_p,spc_p,#0xff
941   orr   spc_p,spc_p,spc_ya,lsl #24
942   subs   cycles,cycles,#105
943   ldrgeb opcode,[spc_pc],#1
944   ldrge  pc,[opcodes,opcode,lsl #2]
945   b      spc700End
946
947
948 Apu36:
949   ldrb  r0,[spc_pc],#1
950   ldrb  r12,[spc_pc],#1
951   orr   r0,r0,r12,lsl #8
952   add   r0,r0,spc_ya,lsr #8
953   bl    S9xAPUGetByte
954   ldr   spc_ram,[context,#iapu_ram]
955   orr   r0,r0,#0xff00
956   and   spc_ya,spc_ya,r0
957   and   spc_p,spc_p,#0xff
958   orr   spc_p,spc_p,spc_ya,lsl #24
959   subs   cycles,cycles,#105
960   ldrgeb opcode,[spc_pc],#1
961   ldrge  pc,[opcodes,opcode,lsl #2]
962   b      spc700End
963
964
965 Apu37:
966   ldrb  r0,[spc_pc],#1
967   ldr   r12,[context,#iapu_directpage]
968   ldrb  r0,[r12,r0]!
969   ldrb  r12,[r12,#1]
970   orr   r0,r0,r12,lsl #8
971   add   r0,r0,spc_ya,lsr #8
972   bl    S9xAPUGetByte
973   ldr   spc_ram,[context,#iapu_ram]
974   orr   r0,r0,#0xff00
975   and   spc_ya,spc_ya,r0
976   and   spc_p,spc_p,#0xff
977   orr   spc_p,spc_p,spc_ya,lsl #24
978   subs   cycles,cycles,#126
979   ldrgeb opcode,[spc_pc],#1
980   ldrge  pc,[opcodes,opcode,lsl #2]
981   b      spc700End
982
983
984 Apu38:
985   ldrb  r0,[spc_pc,#1]
986   bl    S9xAPUGetByteZ
987   ldrb  r1,[spc_pc],#2
988   and   r0,r0,r1
989   and   spc_p,spc_p,#0xff
990   orr   spc_p,spc_p,r0,lsl #24
991   ldrb  r1,[spc_pc,#-1]
992   bl    S9xAPUSetByteZ
993   ldr   spc_ram,[context,#iapu_ram]
994   subs   cycles,cycles,#105
995   ldrgeb opcode,[spc_pc],#1
996   ldrge  pc,[opcodes,opcode,lsl #2]
997   b      spc700End
998
999
1000 Apu39:
1001   mov   r0,spc_x
1002   bl    S9xAPUGetByteZ
1003   stmfd sp!,{r0}
1004   mov   r0,spc_ya,lsr #8
1005   bl    S9xAPUGetByteZ
1006   ldmfd sp!,{r1}
1007   and   r0,r0,r1
1008   and   spc_p,spc_p,#0xff
1009   orr   spc_p,spc_p,r0,lsl #24
1010   mov   r1,spc_x
1011   bl    S9xAPUSetByteZ
1012   ldr   spc_ram,[context,#iapu_ram]
1013   subs   cycles,cycles,#105
1014   ldrgeb opcode,[spc_pc],#1
1015   ldrge  pc,[opcodes,opcode,lsl #2]
1016   b      spc700End
1017
1018
1019 Apu3A:
1020   ldrb  r0,[spc_pc]
1021   bl    S9xAPUGetByteZ
1022   stmfd sp!,{r0}
1023   ldrb  r0,[spc_pc]
1024   add   r0,r0,#1
1025   bl    S9xAPUGetByteZ
1026   ldmfd sp!,{r1}
1027   orr   r1,r1,r0,lsl #8
1028   add   r0,r1,#1
1029   and   spc_p,spc_p,#0xff
1030   orr   spc_p,spc_p,r0,lsl #16
1031   tst   r0,#0xff
1032   orrne spc_p,spc_p,#0x01000000
1033   stmfd sp!,{r0}
1034   ldrb  r1,[spc_pc]
1035   bl    S9xAPUSetByteZ
1036   ldmfd sp!,{r0}
1037   mov   r0,r0,lsr #8
1038   ldrb  r1,[spc_pc],#1
1039   add   r1,r1,#1
1040   bl    S9xAPUSetByteZ
1041   ldr   spc_ram,[context,#iapu_ram]
1042   subs   cycles,cycles,#126
1043   ldrgeb opcode,[spc_pc],#1
1044   ldrge  pc,[opcodes,opcode,lsl #2]
1045   b      spc700End
1046
1047
1048 Apu3B:
1049   ldrb  r0,[spc_pc]
1050   add   r0,r0,spc_x
1051   bl    S9xAPUGetByteZ
1052   mov   r0,r0,lsl #1
1053   tst   spc_p,#flag_c
1054   orrne r0,r0,#1
1055   tst   r0,#0x100
1056   orrne spc_p,spc_p,#flag_c
1057   biceq spc_p,spc_p,#flag_c
1058   and   spc_p,spc_p,#0xff
1059   orr   spc_p,spc_p,r0,lsl #24
1060   ldrb  r1,[spc_pc],#1
1061   add   r1,r1,spc_x
1062   bl    S9xAPUSetByteZ
1063   ldr   spc_ram,[context,#iapu_ram]
1064   subs   cycles,cycles,#105
1065   ldrgeb opcode,[spc_pc],#1
1066   ldrge  pc,[opcodes,opcode,lsl #2]
1067   b      spc700End
1068
1069
1070 Apu3C:
1071   and   r0,spc_ya,#0xff
1072   mov   r0,r0,lsl #1
1073   tst   spc_p,#flag_c
1074   orrne r0,r0,#1
1075   tst   r0,#0x100
1076   orrne spc_p,spc_p,#flag_c
1077   biceq spc_p,spc_p,#flag_c
1078   and   spc_p,spc_p,#0xff
1079   orr   spc_p,spc_p,r0,lsl #24
1080   and   r0,r0,#0xff
1081   mov   spc_ya,spc_ya,lsr #8
1082   orr   spc_ya,r0,spc_ya,lsl #8
1083   subs   cycles,cycles,#42
1084   ldrgeb opcode,[spc_pc],#1
1085   ldrge  pc,[opcodes,opcode,lsl #2]
1086   b      spc700End
1087
1088
1089 Apu3D:
1090   add   spc_x,spc_x,#1
1091   and   spc_x,spc_x,#0xff
1092   and   spc_p,spc_p,#0xff
1093   orr   spc_p,spc_p,spc_x,lsl #24
1094   subs   cycles,cycles,#42
1095   ldrgeb opcode,[spc_pc],#1
1096   ldrge  pc,[opcodes,opcode,lsl #2]
1097   b      spc700End
1098
1099
1100 Apu3E:
1101   ldrb  r0,[spc_pc],#1
1102   bl    S9xAPUGetByteZ
1103   ldr   spc_ram,[context,#iapu_ram]
1104   subs  r12,spc_x,r0
1105   orrge spc_p,spc_p,#flag_c
1106   biclt spc_p,spc_p,#flag_c
1107   and   spc_p,spc_p,#0xff
1108   orr   spc_p,spc_p,r12,lsl #24
1109   subs   cycles,cycles,#63
1110   ldrgeb opcode,[spc_pc],#1
1111   ldrge  pc,[opcodes,opcode,lsl #2]
1112   b      spc700End
1113
1114
1115 Apu3F:
1116   ldrb  r2,[spc_pc],#1
1117   ldrb  r12,[spc_pc],#1
1118   orr   r2,r2,r12,lsl #8
1119   sub   r0,spc_pc,spc_ram
1120   add   r1,spc_ram,spc_s
1121   strb  r0,[r1,#0xff]
1122   mov   r0,r0,lsr #8
1123   strb  r0,[r1,#0x100]
1124   sub   spc_s,spc_s,#2
1125   add   spc_pc,spc_ram,r2
1126   subs   cycles,cycles,#168
1127   ldrgeb opcode,[spc_pc],#1
1128   ldrge  pc,[opcodes,opcode,lsl #2]
1129   b      spc700End
1130
1131
1132 Apu40:
1133   orr   spc_p,spc_p,#flag_d
1134   add   r0,spc_ram,#0x100
1135   str   r0,[context,#iapu_directpage]
1136   subs   cycles,cycles,#42
1137   ldrgeb opcode,[spc_pc],#1
1138   ldrge  pc,[opcodes,opcode,lsl #2]
1139   b      spc700End
1140
1141
1142 Apu41:
1143   sub   r0,spc_pc,spc_ram
1144   add   r1,spc_ram,spc_s
1145   strb  r0,[r1,#0xff]
1146   mov   r0,r0,lsr #8
1147   strb  r0,[r1,#0x100]
1148   sub   spc_s,spc_s,#2
1149   ldr   r0,[context,#iapu_extraram]
1150   ldrh  r0,[r0,#0x16]
1151   add   spc_pc,spc_ram,r0
1152   subs   cycles,cycles,#168
1153   ldrgeb opcode,[spc_pc],#1
1154   ldrge  pc,[opcodes,opcode,lsl #2]
1155   b      spc700End
1156
1157
1158 Apu42:
1159   ldrb  r0,[spc_pc]
1160   bl    S9xAPUGetByteZ
1161   orr   r0,r0,#0x04
1162   ldrb  r1,[spc_pc],#1
1163   bl    S9xAPUSetByteZ
1164   ldr   spc_ram,[context,#iapu_ram]
1165   subs   cycles,cycles,#84
1166   ldrgeb opcode,[spc_pc],#1
1167   ldrge  pc,[opcodes,opcode,lsl #2]
1168   b      spc700End
1169
1170
1171 Apu43:
1172   ldrb  r0,[spc_pc],#1
1173   bl    S9xAPUGetByteZ
1174   ldr   spc_ram,[context,#iapu_ram]
1175   tst   r0,#0x04
1176   addeq spc_pc,spc_pc,#1
1177   ldrnesb r0,[spc_pc],#1
1178   addne spc_pc,spc_pc,r0
1179   subne cycles,cycles,#42
1180   subs   cycles,cycles,#105
1181   ldrgeb opcode,[spc_pc],#1
1182   ldrge  pc,[opcodes,opcode,lsl #2]
1183   b      spc700End
1184
1185
1186 Apu44:
1187   ldrb  r0,[spc_pc],#1
1188   bl    S9xAPUGetByteZ
1189   ldr   spc_ram,[context,#iapu_ram]
1190   eor   spc_ya,spc_ya,r0
1191   and   spc_p,spc_p,#0xff
1192   orr   spc_p,spc_p,spc_ya,lsl #24
1193   subs   cycles,cycles,#63
1194   ldrgeb opcode,[spc_pc],#1
1195   ldrge  pc,[opcodes,opcode,lsl #2]
1196   b      spc700End
1197
1198
1199 Apu45:
1200   ldrb  r0,[spc_pc],#1
1201   ldrb  r12,[spc_pc],#1
1202   orr   r0,r0,r12,lsl #8
1203   bl    S9xAPUGetByte
1204   ldr   spc_ram,[context,#iapu_ram]
1205   eor   spc_ya,spc_ya,r0
1206   and   spc_p,spc_p,#0xff
1207   orr   spc_p,spc_p,spc_ya,lsl #24
1208   subs   cycles,cycles,#84
1209   ldrgeb opcode,[spc_pc],#1
1210   ldrge  pc,[opcodes,opcode,lsl #2]
1211   b      spc700End
1212
1213
1214 Apu46:
1215   mov   r0,spc_x
1216   bl    S9xAPUGetByteZ
1217   ldr   spc_ram,[context,#iapu_ram]
1218   eor   spc_ya,spc_ya,r0
1219   and   spc_p,spc_p,#0xff
1220   orr   spc_p,spc_p,spc_ya,lsl #24
1221   subs   cycles,cycles,#63
1222   ldrgeb opcode,[spc_pc],#1
1223   ldrge  pc,[opcodes,opcode,lsl #2]
1224   b      spc700End
1225
1226
1227 Apu47:
1228   ldrb  r0,[spc_pc],#1
1229   add   r0,r0,spc_x
1230   and   r0,r0,#0xff
1231   ldr   r12,[context,#iapu_directpage]
1232   ldrb  r0,[r12,r0]!
1233   ldrb  r12,[r12,#1]
1234   orr   r0,r0,r12,lsl #8
1235   bl    S9xAPUGetByte
1236   ldr   spc_ram,[context,#iapu_ram]
1237   eor   spc_ya,spc_ya,r0
1238   and   spc_p,spc_p,#0xff
1239   orr   spc_p,spc_p,spc_ya,lsl #24
1240   subs   cycles,cycles,#126
1241   ldrgeb opcode,[spc_pc],#1
1242   ldrge  pc,[opcodes,opcode,lsl #2]
1243   b      spc700End
1244
1245
1246 Apu48:
1247   ldrb  r0,[spc_pc],#1
1248   eor   spc_ya,spc_ya,r0
1249   and   spc_p,spc_p,#0xff
1250   orr   spc_p,spc_p,spc_ya,lsl #24
1251   subs   cycles,cycles,#42
1252   ldrgeb opcode,[spc_pc],#1
1253   ldrge  pc,[opcodes,opcode,lsl #2]
1254   b      spc700End
1255
1256
1257 Apu49:
1258   ldrb  r0,[spc_pc],#1
1259   bl    S9xAPUGetByteZ
1260   stmfd sp!,{r0}
1261   ldrb  r0,[spc_pc]
1262   bl    S9xAPUGetByteZ
1263   ldmfd sp!,{r1}
1264   eor   r0,r0,r1
1265   and   spc_p,spc_p,#0xff
1266   orr   spc_p,spc_p,r0,lsl #24
1267   ldrb  r1,[spc_pc],#1
1268   bl    S9xAPUSetByteZ
1269   ldr   spc_ram,[context,#iapu_ram]
1270   subs   cycles,cycles,#126
1271   ldrgeb opcode,[spc_pc],#1
1272   ldrge  pc,[opcodes,opcode,lsl #2]
1273   b      spc700End
1274
1275
1276 Apu4A:
1277   ldrb  r0,[spc_pc],#1
1278   ldrb  r1,[spc_pc],#1
1279   add   r0,r0,r1,lsl #8
1280   mov   r1,r1,lsr #5
1281   mov   r0,r0,lsl #19
1282   mov   r0,r0,lsr #19
1283   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
1284   bl    S9xAPUGetByte
1285   mov   r1,spc_x,lsr #29
1286   and   spc_x,spc_x,#0xff
1287   mov   r0,r0,lsr r1
1288   tst   r0,#1
1289   biceq spc_p,spc_p,#flag_c
1290   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
1291   subs   cycles,cycles,#84
1292   ldrgeb opcode,[spc_pc],#1
1293   ldrge  pc,[opcodes,opcode,lsl #2]
1294   b      spc700End
1295
1296
1297 Apu4B:
1298   ldrb  r0,[spc_pc]
1299   bl    S9xAPUGetByteZ
1300   tst   r0,#0x01
1301   orrne spc_p,spc_p,#flag_c
1302   biceq spc_p,spc_p,#flag_c
1303   mov   r0,r0,lsr #1
1304   and   spc_p,spc_p,#0xff
1305   orr   spc_p,spc_p,r0,lsl #24
1306   ldrb  r1,[spc_pc],#1
1307   bl    S9xAPUSetByteZ
1308   ldr   spc_ram,[context,#iapu_ram]
1309   subs   cycles,cycles,#84
1310   ldrgeb opcode,[spc_pc],#1
1311   ldrge  pc,[opcodes,opcode,lsl #2]
1312   b      spc700End
1313
1314
1315 Apu4C:
1316   ldrb  r0,[spc_pc],#1
1317   ldrb  r12,[spc_pc],#1
1318   orr   r0,r0,r12,lsl #8
1319   stmfd sp!,{r0}
1320   bl    S9xAPUGetByte
1321   tst   r0,#0x01
1322   orrne spc_p,spc_p,#flag_c
1323   biceq spc_p,spc_p,#flag_c
1324   mov   r0,r0,lsr #1
1325   and   spc_p,spc_p,#0xff
1326   orr   spc_p,spc_p,r0,lsl #24
1327   ldmfd sp!,{r1}
1328   bl    S9xAPUSetByte
1329   ldr   spc_ram,[context,#iapu_ram]
1330   subs   cycles,cycles,#105
1331   ldrgeb opcode,[spc_pc],#1
1332   ldrge  pc,[opcodes,opcode,lsl #2]
1333   b      spc700End
1334
1335
1336 Apu4D:
1337   add   r1,spc_ram,spc_s
1338   strb  spc_x,[r1,#0x100]
1339   sub   spc_s,spc_s,#1
1340   subs   cycles,cycles,#84
1341   ldrgeb opcode,[spc_pc],#1
1342   ldrge  pc,[opcodes,opcode,lsl #2]
1343   b      spc700End
1344
1345
1346 Apu4E:
1347   ldrb  r0,[spc_pc],#1
1348   ldrb  r12,[spc_pc],#1
1349   orr   r0,r0,r12,lsl #8
1350   orr   spc_x,spc_x,r0,lsl #16 @ save from memhandler
1351   bl    S9xAPUGetByte
1352   and   r2,r0,spc_ya
1353   and   spc_p,spc_p,#0xff
1354   orr   spc_p,spc_p,r2,lsl #24
1355   bic   r0,r0,spc_ya
1356   mov   r1,spc_x,lsr #16
1357   and   spc_x,spc_x,#0xff
1358   bl    S9xAPUSetByte
1359   ldr   spc_ram,[context,#iapu_ram]
1360   subs   cycles,cycles,#126
1361   ldrgeb opcode,[spc_pc],#1
1362   ldrge  pc,[opcodes,opcode,lsl #2]
1363   b      spc700End
1364
1365
1366 Apu4F:
1367   ldrb  r2,[spc_pc],#1
1368   sub   r0,spc_pc,spc_ram
1369   add   r1,spc_ram,spc_s
1370   strb  r0,[r1,#0xff]
1371   mov   r0,r0,lsr #8
1372   strb  r0,[r1,#0x100]
1373   sub   spc_s,spc_s,#2
1374   add   spc_pc,spc_ram,r2
1375   add   spc_pc,spc_pc,#0xff00
1376   subs   cycles,cycles,#126
1377   ldrgeb opcode,[spc_pc],#1
1378   ldrge  pc,[opcodes,opcode,lsl #2]
1379   b      spc700End
1380
1381
1382 Apu50:
1383   tst   spc_p,#0x00000040
1384   addne spc_pc,spc_pc,#1
1385   ldreqsb r0,[spc_pc],#1
1386   addeq spc_pc,spc_pc,r0
1387   subeq cycles,cycles,#42
1388   subs   cycles,cycles,#42
1389   ldrgeb opcode,[spc_pc],#1
1390   ldrge  pc,[opcodes,opcode,lsl #2]
1391   b      spc700End
1392
1393
1394 Apu51:
1395   sub   r0,spc_pc,spc_ram
1396   add   r1,spc_ram,spc_s
1397   strb  r0,[r1,#0xff]
1398   mov   r0,r0,lsr #8
1399   strb  r0,[r1,#0x100]
1400   sub   spc_s,spc_s,#2
1401   ldr   r0,[context,#iapu_extraram]
1402   ldrh  r0,[r0,#0x14]
1403   add   spc_pc,spc_ram,r0
1404   subs   cycles,cycles,#168
1405   ldrgeb opcode,[spc_pc],#1
1406   ldrge  pc,[opcodes,opcode,lsl #2]
1407   b      spc700End
1408
1409
1410 Apu52:
1411   ldrb  r0,[spc_pc]
1412   bl    S9xAPUGetByteZ
1413   bic   r0,r0,#0x04
1414   ldrb  r1,[spc_pc],#1
1415   bl    S9xAPUSetByteZ
1416   ldr   spc_ram,[context,#iapu_ram]
1417   subs   cycles,cycles,#84
1418   ldrgeb opcode,[spc_pc],#1
1419   ldrge  pc,[opcodes,opcode,lsl #2]
1420   b      spc700End
1421
1422
1423 Apu53:
1424   ldrb  r0,[spc_pc],#1
1425   bl    S9xAPUGetByteZ
1426   ldr   spc_ram,[context,#iapu_ram]
1427   tst   r0,#0x04
1428   addne spc_pc,spc_pc,#1
1429   ldreqsb r0,[spc_pc],#1
1430   addeq spc_pc,spc_pc,r0
1431   subeq cycles,cycles,#42
1432   subs   cycles,cycles,#105
1433   ldrgeb opcode,[spc_pc],#1
1434   ldrge  pc,[opcodes,opcode,lsl #2]
1435   b      spc700End
1436
1437
1438 Apu54:
1439   ldrb  r0,[spc_pc],#1
1440   add   r0,r0,spc_x
1441   bl    S9xAPUGetByteZ
1442   ldr   spc_ram,[context,#iapu_ram]
1443   eor   spc_ya,spc_ya,r0
1444   and   spc_p,spc_p,#0xff
1445   orr   spc_p,spc_p,spc_ya,lsl #24
1446   subs   cycles,cycles,#84
1447   ldrgeb opcode,[spc_pc],#1
1448   ldrge  pc,[opcodes,opcode,lsl #2]
1449   b      spc700End
1450
1451
1452 Apu55:
1453   ldrb  r0,[spc_pc],#1
1454   ldrb  r12,[spc_pc],#1
1455   orr   r0,r0,r12,lsl #8
1456   add   r0,r0,spc_x
1457   bl    S9xAPUGetByte
1458   ldr   spc_ram,[context,#iapu_ram]
1459   eor   spc_ya,spc_ya,r0
1460   and   spc_p,spc_p,#0xff
1461   orr   spc_p,spc_p,spc_ya,lsl #24
1462   subs   cycles,cycles,#105
1463   ldrgeb opcode,[spc_pc],#1
1464   ldrge  pc,[opcodes,opcode,lsl #2]
1465   b      spc700End
1466
1467
1468 Apu56:
1469   ldrb  r0,[spc_pc],#1
1470   ldrb  r12,[spc_pc],#1
1471   orr   r0,r0,r12,lsl #8
1472   add   r0,r0,spc_ya,lsr #8
1473   bl    S9xAPUGetByte
1474   ldr   spc_ram,[context,#iapu_ram]
1475   eor   spc_ya,spc_ya,r0
1476   and   spc_p,spc_p,#0xff
1477   orr   spc_p,spc_p,spc_ya,lsl #24
1478   subs   cycles,cycles,#105
1479   ldrgeb opcode,[spc_pc],#1
1480   ldrge  pc,[opcodes,opcode,lsl #2]
1481   b      spc700End
1482
1483
1484 Apu57:
1485   ldrb  r0,[spc_pc],#1
1486   ldr   r12,[context,#iapu_directpage]
1487   ldrb  r0,[r12,r0]!
1488   ldrb  r12,[r12,#1]
1489   orr   r0,r0,r12,lsl #8
1490   add   r0,r0,spc_ya,lsr #8
1491   bl    S9xAPUGetByte
1492   ldr   spc_ram,[context,#iapu_ram]
1493   eor   spc_ya,spc_ya,r0
1494   and   spc_p,spc_p,#0xff
1495   orr   spc_p,spc_p,spc_ya,lsl #24
1496   subs   cycles,cycles,#126
1497   ldrgeb opcode,[spc_pc],#1
1498   ldrge  pc,[opcodes,opcode,lsl #2]
1499   b      spc700End
1500
1501
1502 Apu58:
1503   ldrb  r0,[spc_pc,#1]
1504   bl    S9xAPUGetByteZ
1505   ldrb  r1,[spc_pc],#2
1506   eor   r0,r0,r1
1507   and   spc_p,spc_p,#0xff
1508   orr   spc_p,spc_p,r0,lsl #24
1509   ldrb  r1,[spc_pc,#-1]
1510   bl    S9xAPUSetByteZ
1511   ldr   spc_ram,[context,#iapu_ram]
1512   subs   cycles,cycles,#105
1513   ldrgeb opcode,[spc_pc],#1
1514   ldrge  pc,[opcodes,opcode,lsl #2]
1515   b      spc700End
1516
1517
1518 Apu59:
1519   mov   r0,spc_x
1520   bl    S9xAPUGetByteZ
1521   stmfd sp!,{r0}
1522   mov   r0,spc_ya,lsr #8
1523   bl    S9xAPUGetByteZ
1524   ldmfd sp!,{r1}
1525   eor   r0,r0,r1
1526   and   spc_p,spc_p,#0xff
1527   orr   spc_p,spc_p,r0,lsl #24
1528   mov   r1,spc_x
1529   bl    S9xAPUSetByteZ
1530   ldr   spc_ram,[context,#iapu_ram]
1531   subs   cycles,cycles,#105
1532   ldrgeb opcode,[spc_pc],#1
1533   ldrge  pc,[opcodes,opcode,lsl #2]
1534   b      spc700End
1535
1536
1537 Apu5A:
1538   ldrb  r0,[spc_pc]
1539   bl    S9xAPUGetByteZ
1540   stmfd sp!,{r0}
1541   ldrb  r0,[spc_pc],#1
1542   add   r0,r0,#1
1543   bl    S9xAPUGetByteZ
1544   ldr   spc_ram,[context,#iapu_ram]
1545   ldmfd sp!,{r1}
1546   orr   r1,r1,r0,lsl #8
1547   subs  r0,spc_ya,r1
1548   orrge spc_p,spc_p,#flag_c
1549   biclt spc_p,spc_p,#flag_c
1550   and   spc_p,spc_p,#0xff
1551   orr   spc_p,spc_p,r0,lsl #16
1552   tst   r0,#0xff
1553   orrne spc_p,spc_p,#0x01000000
1554   subs   cycles,cycles,#84
1555   ldrgeb opcode,[spc_pc],#1
1556   ldrge  pc,[opcodes,opcode,lsl #2]
1557   b      spc700End
1558
1559
1560 Apu5B:
1561   ldrb  r0,[spc_pc]
1562   add   r0,r0,spc_x
1563   bl    S9xAPUGetByteZ
1564   tst   r0,#0x01
1565   orrne spc_p,spc_p,#flag_c
1566   biceq spc_p,spc_p,#flag_c
1567   mov   r0,r0,lsr #1
1568   and   spc_p,spc_p,#0xff
1569   orr   spc_p,spc_p,r0,lsl #24
1570   ldrb  r1,[spc_pc],#1
1571   add   r1,r1,spc_x
1572   bl    S9xAPUSetByteZ
1573   ldr   spc_ram,[context,#iapu_ram]
1574   subs   cycles,cycles,#105
1575   ldrgeb opcode,[spc_pc],#1
1576   ldrge  pc,[opcodes,opcode,lsl #2]
1577   b      spc700End
1578
1579
1580 Apu5C:
1581   and   r0,spc_ya,#0xff
1582   tst   r0,#0x01
1583   orrne spc_p,spc_p,#flag_c
1584   biceq spc_p,spc_p,#flag_c
1585   mov   r0,r0,lsr #1
1586   and   spc_p,spc_p,#0xff
1587   orr   spc_p,spc_p,r0,lsl #24
1588   mov   spc_ya,spc_ya,lsr #8
1589   orr   spc_ya,r0,spc_ya,lsl #8
1590   subs   cycles,cycles,#42
1591   ldrgeb opcode,[spc_pc],#1
1592   ldrge  pc,[opcodes,opcode,lsl #2]
1593   b      spc700End
1594
1595
1596 Apu5D:
1597   and   spc_x,spc_ya,#0xff
1598   and   spc_p,spc_p,#0xff
1599   orr   spc_p,spc_p,spc_x,lsl #24
1600   subs   cycles,cycles,#42
1601   ldrgeb opcode,[spc_pc],#1
1602   ldrge  pc,[opcodes,opcode,lsl #2]
1603   b      spc700End
1604
1605
1606 Apu5E:
1607   ldrb  r0,[spc_pc],#1
1608   ldrb  r12,[spc_pc],#1
1609   orr   r0,r0,r12,lsl #8
1610   bl    S9xAPUGetByte
1611   ldr   spc_ram,[context,#iapu_ram]
1612   mov   r1,spc_ya,lsr #8
1613   subs  r12,r1,r0
1614   orrge spc_p,spc_p,#flag_c
1615   biclt spc_p,spc_p,#flag_c
1616   and   spc_p,spc_p,#0xff
1617   orr   spc_p,spc_p,r12,lsl #24
1618   subs   cycles,cycles,#84
1619   ldrgeb opcode,[spc_pc],#1
1620   ldrge  pc,[opcodes,opcode,lsl #2]
1621   b      spc700End
1622
1623
1624 Apu5F:
1625   ldrb  r0,[spc_pc],#1
1626   ldrb  r12,[spc_pc],#1
1627   orr   r0,r0,r12,lsl #8
1628   add   spc_pc,spc_ram,r0
1629   subs   cycles,cycles,#63
1630   ldrgeb opcode,[spc_pc],#1
1631   ldrge  pc,[opcodes,opcode,lsl #2]
1632   b      spc700End
1633
1634
1635 Apu60:
1636   bic   spc_p,spc_p,#flag_c
1637   subs   cycles,cycles,#42
1638   ldrgeb opcode,[spc_pc],#1
1639   ldrge  pc,[opcodes,opcode,lsl #2]
1640   b      spc700End
1641
1642
1643 Apu61:
1644   sub   r0,spc_pc,spc_ram
1645   add   r1,spc_ram,spc_s
1646   strb  r0,[r1,#0xff]
1647   mov   r0,r0,lsr #8
1648   strb  r0,[r1,#0x100]
1649   sub   spc_s,spc_s,#2
1650   ldr   r0,[context,#iapu_extraram]
1651   ldrh  r0,[r0,#0x12]
1652   add   spc_pc,spc_ram,r0
1653   subs   cycles,cycles,#168
1654   ldrgeb opcode,[spc_pc],#1
1655   ldrge  pc,[opcodes,opcode,lsl #2]
1656   b      spc700End
1657
1658
1659 Apu62:
1660   ldrb  r0,[spc_pc]
1661   bl    S9xAPUGetByteZ
1662   orr   r0,r0,#0x08
1663   ldrb  r1,[spc_pc],#1
1664   bl    S9xAPUSetByteZ
1665   ldr   spc_ram,[context,#iapu_ram]
1666   subs   cycles,cycles,#84
1667   ldrgeb opcode,[spc_pc],#1
1668   ldrge  pc,[opcodes,opcode,lsl #2]
1669   b      spc700End
1670
1671
1672 Apu63:
1673   ldrb  r0,[spc_pc],#1
1674   bl    S9xAPUGetByteZ
1675   ldr   spc_ram,[context,#iapu_ram]
1676   tst   r0,#0x08
1677   addeq spc_pc,spc_pc,#1
1678   ldrnesb r0,[spc_pc],#1
1679   addne spc_pc,spc_pc,r0
1680   subne cycles,cycles,#42
1681   subs   cycles,cycles,#105
1682   ldrgeb opcode,[spc_pc],#1
1683   ldrge  pc,[opcodes,opcode,lsl #2]
1684   b      spc700End
1685
1686
1687 Apu64:
1688   ldrb  r0,[spc_pc],#1
1689   bl    S9xAPUGetByteZ
1690   ldr   spc_ram,[context,#iapu_ram]
1691   and   r12,spc_ya,#0xff
1692   subs  r12,r12,r0
1693   orrge spc_p,spc_p,#flag_c
1694   biclt spc_p,spc_p,#flag_c
1695   and   spc_p,spc_p,#0xff
1696   orr   spc_p,spc_p,r12,lsl #24
1697   subs   cycles,cycles,#63
1698   ldrgeb opcode,[spc_pc],#1
1699   ldrge  pc,[opcodes,opcode,lsl #2]
1700   b      spc700End
1701
1702
1703 Apu65:
1704   ldrb  r0,[spc_pc],#1
1705   ldrb  r12,[spc_pc],#1
1706   orr   r0,r0,r12,lsl #8
1707   bl    S9xAPUGetByte
1708   ldr   spc_ram,[context,#iapu_ram]
1709   and   r12,spc_ya,#0xff
1710   subs  r12,r12,r0
1711   orrge spc_p,spc_p,#flag_c
1712   biclt spc_p,spc_p,#flag_c
1713   and   spc_p,spc_p,#0xff
1714   orr   spc_p,spc_p,r12,lsl #24
1715   subs   cycles,cycles,#84
1716   ldrgeb opcode,[spc_pc],#1
1717   ldrge  pc,[opcodes,opcode,lsl #2]
1718   b      spc700End
1719
1720
1721 Apu66:
1722   mov   r0,spc_x
1723   bl    S9xAPUGetByteZ
1724   ldr   spc_ram,[context,#iapu_ram]
1725   and   r12,spc_ya,#0xff
1726   subs  r12,r12,r0
1727   orrge spc_p,spc_p,#flag_c
1728   biclt spc_p,spc_p,#flag_c
1729   and   spc_p,spc_p,#0xff
1730   orr   spc_p,spc_p,r12,lsl #24
1731   subs   cycles,cycles,#63
1732   ldrgeb opcode,[spc_pc],#1
1733   ldrge  pc,[opcodes,opcode,lsl #2]
1734   b      spc700End
1735
1736
1737 Apu67:
1738   ldrb  r0,[spc_pc],#1
1739   add   r0,r0,spc_x
1740   and   r0,r0,#0xff
1741   ldr   r12,[context,#iapu_directpage]
1742   ldrb  r0,[r12,r0]!
1743   ldrb  r12,[r12,#1]
1744   orr   r0,r0,r12,lsl #8
1745   bl    S9xAPUGetByte
1746   ldr   spc_ram,[context,#iapu_ram]
1747   and   r12,spc_ya,#0xff
1748   subs  r12,r12,r0
1749   orrge spc_p,spc_p,#flag_c
1750   biclt spc_p,spc_p,#flag_c
1751   and   spc_p,spc_p,#0xff
1752   orr   spc_p,spc_p,r12,lsl #24
1753   subs   cycles,cycles,#126
1754   ldrgeb opcode,[spc_pc],#1
1755   ldrge  pc,[opcodes,opcode,lsl #2]
1756   b      spc700End
1757
1758
1759 Apu68:
1760   ldrb  r0,[spc_pc],#1
1761   and   r12,spc_ya,#0xff
1762   subs  r12,r12,r0
1763   orrge spc_p,spc_p,#flag_c
1764   biclt spc_p,spc_p,#flag_c
1765   and   spc_p,spc_p,#0xff
1766   orr   spc_p,spc_p,r12,lsl #24
1767   subs   cycles,cycles,#42
1768   ldrgeb opcode,[spc_pc],#1
1769   ldrge  pc,[opcodes,opcode,lsl #2]
1770   b      spc700End
1771
1772
1773 Apu69:
1774   ldrb  r0,[spc_pc],#1
1775   bl    S9xAPUGetByteZ
1776   orr   spc_x,spc_x,r0,lsl #24
1777   ldrb  r0,[spc_pc],#1
1778   bl    S9xAPUGetByteZ
1779   ldr   spc_ram,[context,#iapu_ram]
1780   mov   r1,spc_x,lsr #24
1781   subs  r12,r0,r1
1782   orrge spc_p,spc_p,#flag_c
1783   biclt spc_p,spc_p,#flag_c
1784   and   spc_p,spc_p,#0xff
1785   orr   spc_p,spc_p,r12,lsl #24
1786   and   spc_x,spc_x,#0xff
1787   subs   cycles,cycles,#126
1788   ldrgeb opcode,[spc_pc],#1
1789   ldrge  pc,[opcodes,opcode,lsl #2]
1790   b      spc700End
1791
1792
1793 Apu6A:
1794   ldrb  r0,[spc_pc],#1
1795   ldrb  r1,[spc_pc],#1
1796   add   r0,r0,r1,lsl #8
1797   mov   r1,r1,lsr #5
1798   mov   r0,r0,lsl #19
1799   mov   r0,r0,lsr #19
1800   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
1801   bl    S9xAPUGetByte
1802   mov   r1,spc_x,lsr #29
1803   and   spc_x,spc_x,#0xff
1804   mov   r0,r0,lsr r1
1805   tst   r0,#1
1806   bicne spc_p,spc_p,#flag_c
1807   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
1808   subs   cycles,cycles,#84
1809   ldrgeb opcode,[spc_pc],#1
1810   ldrge  pc,[opcodes,opcode,lsl #2]
1811   b      spc700End
1812
1813
1814 Apu6B:
1815   ldrb  r0,[spc_pc]
1816   bl    S9xAPUGetByteZ
1817   tst   spc_p,#flag_c
1818   orrne r0,r0,#0x100
1819   movs  r0,r0,lsr #1
1820   orrcs spc_p,spc_p,#flag_c
1821   biccc spc_p,spc_p,#flag_c
1822   and   spc_p,spc_p,#0xff
1823   orr   spc_p,spc_p,r0,lsl #24
1824   ldrb  r1,[spc_pc],#1
1825   bl    S9xAPUSetByteZ
1826   ldr   spc_ram,[context,#iapu_ram]
1827   subs   cycles,cycles,#84
1828   ldrgeb opcode,[spc_pc],#1
1829   ldrge  pc,[opcodes,opcode,lsl #2]
1830   b      spc700End
1831
1832
1833 Apu6C:
1834   ldrb  r0,[spc_pc],#1
1835   ldrb  r12,[spc_pc],#1
1836   orr   r0,r0,r12,lsl #8
1837   stmfd sp!,{r0}
1838   bl    S9xAPUGetByte
1839   tst   spc_p,#flag_c
1840   orrne r0,r0,#0x100
1841   movs  r0,r0,lsr #1
1842   orrcs spc_p,spc_p,#flag_c
1843   biccc spc_p,spc_p,#flag_c
1844   and   spc_p,spc_p,#0xff
1845   orr   spc_p,spc_p,r0,lsl #24
1846   ldmfd sp!,{r1}
1847   bl    S9xAPUSetByte
1848   ldr   spc_ram,[context,#iapu_ram]
1849   subs   cycles,cycles,#105
1850   ldrgeb opcode,[spc_pc],#1
1851   ldrge  pc,[opcodes,opcode,lsl #2]
1852   b      spc700End
1853
1854
1855 Apu6D:
1856   mov   r0,spc_ya,lsr #8
1857   add   r1,spc_ram,spc_s
1858   strb  r0,[r1,#0x100]
1859   sub   spc_s,spc_s,#1
1860   subs   cycles,cycles,#84
1861   ldrgeb opcode,[spc_pc],#1
1862   ldrge  pc,[opcodes,opcode,lsl #2]
1863   b      spc700End
1864
1865
1866 Apu6E:
1867   ldrb  r0,[spc_pc]
1868   bl    S9xAPUGetByteZ
1869   ldrb  r1,[spc_pc],#1
1870   sub   r0,r0,#1
1871   tst   r0,r0
1872   addeq spc_pc,spc_pc,#1
1873   ldrnesb r2,[spc_pc],#1
1874   addne spc_pc,spc_pc,r2
1875   subne cycles,cycles,#42
1876   bl    S9xAPUSetByteZ
1877   ldr   spc_ram,[context,#iapu_ram]
1878   subs   cycles,cycles,#105
1879   ldrgeb opcode,[spc_pc],#1
1880   ldrge  pc,[opcodes,opcode,lsl #2]
1881   b      spc700End
1882
1883
1884 Apu6F:
1885   add   spc_s,spc_s,#2
1886   add   r1,spc_ram,spc_s
1887   ldrb  r0,[r1,#0xff]
1888   ldrb  r1,[r1,#0x100]
1889   orr   r0,r0,r1,lsl #8
1890   add   spc_pc,spc_ram,r0
1891   subs   cycles,cycles,#105
1892   ldrgeb opcode,[spc_pc],#1
1893   ldrge  pc,[opcodes,opcode,lsl #2]
1894   b      spc700End
1895
1896
1897 Apu70:
1898   tst   spc_p,#0x00000040
1899   addeq spc_pc,spc_pc,#1
1900   ldrnesb r0,[spc_pc],#1
1901   addne spc_pc,spc_pc,r0
1902   subne cycles,cycles,#42
1903   subs   cycles,cycles,#42
1904   ldrgeb opcode,[spc_pc],#1
1905   ldrge  pc,[opcodes,opcode,lsl #2]
1906   b      spc700End
1907
1908
1909 Apu71:
1910   sub   r0,spc_pc,spc_ram
1911   add   r1,spc_ram,spc_s
1912   strb  r0,[r1,#0xff]
1913   mov   r0,r0,lsr #8
1914   strb  r0,[r1,#0x100]
1915   sub   spc_s,spc_s,#2
1916   ldr   r0,[context,#iapu_extraram]
1917   ldrh  r0,[r0,#0x10]
1918   add   spc_pc,spc_ram,r0
1919   subs   cycles,cycles,#168
1920   ldrgeb opcode,[spc_pc],#1
1921   ldrge  pc,[opcodes,opcode,lsl #2]
1922   b      spc700End
1923
1924
1925 Apu72:
1926   ldrb  r0,[spc_pc]
1927   bl    S9xAPUGetByteZ
1928   bic   r0,r0,#0x08
1929   ldrb  r1,[spc_pc],#1
1930   bl    S9xAPUSetByteZ
1931   ldr   spc_ram,[context,#iapu_ram]
1932   subs   cycles,cycles,#84
1933   ldrgeb opcode,[spc_pc],#1
1934   ldrge  pc,[opcodes,opcode,lsl #2]
1935   b      spc700End
1936
1937
1938 Apu73:
1939   ldrb  r0,[spc_pc],#1
1940   bl    S9xAPUGetByteZ
1941   ldr   spc_ram,[context,#iapu_ram]
1942   tst   r0,#0x08
1943   addne spc_pc,spc_pc,#1
1944   ldreqsb r0,[spc_pc],#1
1945   addeq spc_pc,spc_pc,r0
1946   subeq cycles,cycles,#42
1947   subs   cycles,cycles,#105
1948   ldrgeb opcode,[spc_pc],#1
1949   ldrge  pc,[opcodes,opcode,lsl #2]
1950   b      spc700End
1951
1952
1953 Apu74:
1954   ldrb  r0,[spc_pc],#1
1955   add   r0,r0,spc_x
1956   bl    S9xAPUGetByteZ
1957   ldr   spc_ram,[context,#iapu_ram]
1958   and   r12,spc_ya,#0xff
1959   subs  r12,r12,r0
1960   orrge spc_p,spc_p,#flag_c
1961   biclt spc_p,spc_p,#flag_c
1962   and   spc_p,spc_p,#0xff
1963   orr   spc_p,spc_p,r12,lsl #24
1964   subs   cycles,cycles,#84
1965   ldrgeb opcode,[spc_pc],#1
1966   ldrge  pc,[opcodes,opcode,lsl #2]
1967   b      spc700End
1968
1969
1970 Apu75:
1971   ldrb  r0,[spc_pc],#1
1972   ldrb  r12,[spc_pc],#1
1973   orr   r0,r0,r12,lsl #8
1974   add   r0,r0,spc_x
1975   bl    S9xAPUGetByte
1976   ldr   spc_ram,[context,#iapu_ram]
1977   and   r12,spc_ya,#0xff
1978   subs  r12,r12,r0
1979   orrge spc_p,spc_p,#flag_c
1980   biclt spc_p,spc_p,#flag_c
1981   and   spc_p,spc_p,#0xff
1982   orr   spc_p,spc_p,r12,lsl #24
1983   subs   cycles,cycles,#105
1984   ldrgeb opcode,[spc_pc],#1
1985   ldrge  pc,[opcodes,opcode,lsl #2]
1986   b      spc700End
1987
1988
1989 Apu76:
1990   ldrb  r0,[spc_pc],#1
1991   ldrb  r12,[spc_pc],#1
1992   orr   r0,r0,r12,lsl #8
1993   add   r0,r0,spc_ya,lsr #8
1994   bl    S9xAPUGetByte
1995   ldr   spc_ram,[context,#iapu_ram]
1996   and   r12,spc_ya,#0xff
1997   subs  r12,r12,r0
1998   orrge spc_p,spc_p,#flag_c
1999   biclt spc_p,spc_p,#flag_c
2000   and   spc_p,spc_p,#0xff
2001   orr   spc_p,spc_p,r12,lsl #24
2002   subs   cycles,cycles,#105
2003   ldrgeb opcode,[spc_pc],#1
2004   ldrge  pc,[opcodes,opcode,lsl #2]
2005   b      spc700End
2006
2007
2008 Apu77:
2009   ldrb  r0,[spc_pc],#1
2010   ldr   r12,[context,#iapu_directpage]
2011   ldrb  r0,[r12,r0]!
2012   ldrb  r12,[r12,#1]
2013   orr   r0,r0,r12,lsl #8
2014   add   r0,r0,spc_ya,lsr #8
2015   bl    S9xAPUGetByte
2016   ldr   spc_ram,[context,#iapu_ram]
2017   and   r12,spc_ya,#0xff
2018   subs  r12,r12,r0
2019   orrge spc_p,spc_p,#flag_c
2020   biclt spc_p,spc_p,#flag_c
2021   and   spc_p,spc_p,#0xff
2022   orr   spc_p,spc_p,r12,lsl #24
2023   subs   cycles,cycles,#126
2024   ldrgeb opcode,[spc_pc],#1
2025   ldrge  pc,[opcodes,opcode,lsl #2]
2026   b      spc700End
2027
2028
2029 Apu78:
2030   ldrb  r0,[spc_pc,#1]
2031   bl    S9xAPUGetByteZ
2032   ldr   spc_ram,[context,#iapu_ram]
2033   ldrb  r1,[spc_pc],#2
2034   subs  r12,r0,r1
2035   orrge spc_p,spc_p,#flag_c
2036   biclt spc_p,spc_p,#flag_c
2037   and   spc_p,spc_p,#0xff
2038   orr   spc_p,spc_p,r12,lsl #24
2039   subs   cycles,cycles,#105
2040   ldrgeb opcode,[spc_pc],#1
2041   ldrge  pc,[opcodes,opcode,lsl #2]
2042   b      spc700End
2043
2044
2045 Apu79:
2046   mov   r0,spc_x
2047   bl    S9xAPUGetByteZ
2048   orr   spc_x,spc_x,r0,lsl #24
2049   mov   r0,spc_ya,lsr #8
2050   bl    S9xAPUGetByteZ
2051   ldr   spc_ram,[context,#iapu_ram]
2052   mov   r1,spc_x,lsr #24
2053   subs  r12,r1,r0
2054   orrge spc_p,spc_p,#flag_c
2055   biclt spc_p,spc_p,#flag_c
2056   and   spc_p,spc_p,#0xff
2057   orr   spc_p,spc_p,r12,lsl #24
2058   and   spc_x,spc_x,#0xff
2059   subs   cycles,cycles,#105
2060   ldrgeb opcode,[spc_pc],#1
2061   ldrge  pc,[opcodes,opcode,lsl #2]
2062   b      spc700End
2063
2064
2065 Apu7A:
2066   ldrb  r0,[spc_pc]
2067   bl    S9xAPUGetByteZ
2068   stmfd sp!,{r0}
2069   ldrb  r0,[spc_pc],#1
2070   add   r0,r0,#1
2071   bl    S9xAPUGetByteZ
2072   ldr   spc_ram,[context,#iapu_ram]
2073   ldmfd sp!,{r1}
2074   orr   r1,r1,r0,lsl #8
2075   add   r0,spc_ya,r1
2076   movs  r2,r0,lsr #16
2077   orrne spc_p,spc_p,#flag_c
2078   biceq spc_p,spc_p,#flag_c
2079   bic   r2,r0,#0x00ff0000
2080   eor   r3,r1,r2
2081   eor   r12,spc_ya,r1
2082   mvn   r12,r12
2083   and   r12,r12,r3
2084   tst   r12,#0x8000
2085   orrne spc_p,spc_p,#flag_o
2086   biceq spc_p,spc_p,#flag_o
2087   eor   r12,r3,spc_ya
2088   tst   r12,#0x10
2089   orrne spc_p,spc_p,#flag_h
2090   biceq spc_p,spc_p,#flag_h
2091   mov   spc_ya,r2
2092   and   spc_p,spc_p,#0xff
2093   orr   spc_p,spc_p,spc_ya,lsl #16
2094   tst   spc_ya,#0xff
2095   orrne spc_p,spc_p,#0x01000000
2096   subs   cycles,cycles,#105
2097   ldrgeb opcode,[spc_pc],#1
2098   ldrge  pc,[opcodes,opcode,lsl #2]
2099   b      spc700End
2100
2101
2102 Apu7B:
2103   ldrb  r0,[spc_pc]
2104   add   r0,r0,spc_x
2105   bl    S9xAPUGetByteZ
2106   tst   spc_p,#flag_c
2107   orrne r0,r0,#0x100
2108   movs  r0,r0,lsr #1
2109   orrcs spc_p,spc_p,#flag_c
2110   biccc spc_p,spc_p,#flag_c
2111   and   spc_p,spc_p,#0xff
2112   orr   spc_p,spc_p,r0,lsl #24
2113   ldrb  r1,[spc_pc],#1
2114   add   r1,r1,spc_x
2115   bl    S9xAPUSetByteZ
2116   ldr   spc_ram,[context,#iapu_ram]
2117   subs   cycles,cycles,#105
2118   ldrgeb opcode,[spc_pc],#1
2119   ldrge  pc,[opcodes,opcode,lsl #2]
2120   b      spc700End
2121
2122
2123 Apu7C:
2124   and   r0,spc_ya,#0xff
2125   tst   spc_p,#flag_c
2126   orrne r0,r0,#0x100
2127   movs  r0,r0,lsr #1
2128   orrcs spc_p,spc_p,#flag_c
2129   biccc spc_p,spc_p,#flag_c
2130   and   spc_p,spc_p,#0xff
2131   orr   spc_p,spc_p,r0,lsl #24
2132   mov   spc_ya,spc_ya,lsr #8
2133   orr   spc_ya,r0,spc_ya,lsl #8
2134   subs   cycles,cycles,#42
2135   ldrgeb opcode,[spc_pc],#1
2136   ldrge  pc,[opcodes,opcode,lsl #2]
2137   b      spc700End
2138
2139
2140 Apu7D:
2141   and   spc_ya,spc_ya,#0xff00
2142   orr   spc_ya,spc_ya,spc_x
2143   and   spc_p,spc_p,#0xff
2144   orr   spc_p,spc_p,spc_ya,lsl #24
2145   subs   cycles,cycles,#42
2146   ldrgeb opcode,[spc_pc],#1
2147   ldrge  pc,[opcodes,opcode,lsl #2]
2148   b      spc700End
2149
2150
2151 Apu7E:
2152   ldrb  r0,[spc_pc],#1
2153   bl    S9xAPUGetByteZ
2154   ldr   spc_ram,[context,#iapu_ram]
2155   mov   r1,spc_ya,lsr #8
2156   subs  r12,r1,r0
2157   orrge spc_p,spc_p,#flag_c
2158   biclt spc_p,spc_p,#flag_c
2159   and   spc_p,spc_p,#0xff
2160   orr   spc_p,spc_p,r12,lsl #24
2161   subs   cycles,cycles,#63
2162   ldrgeb opcode,[spc_pc],#1
2163   ldrge  pc,[opcodes,opcode,lsl #2]
2164   b      spc700End
2165
2166
2167 Apu7F:
2168   add   spc_s,spc_s,#1
2169   add   spc_p,spc_ram,spc_s
2170   ldrb  spc_p,[spc_p,#0x100]
2171   and   r0,spc_p,#(flag_z|flag_n)
2172   eor   r0,r0,#flag_z
2173   orr   spc_p,spc_p,r0,lsl #24
2174   tst   spc_p,#flag_d
2175   addne r0,spc_ram,#0x100
2176   moveq r0,spc_ram
2177   str   r0,[context,#iapu_directpage]
2178   add   spc_s,spc_s,#2
2179   add   r1,spc_ram,spc_s
2180   ldrb  r0,[r1,#0xff]
2181   ldrb  r1,[r1,#0x100]
2182   orr   r0,r0,r1,lsl #8
2183   add   spc_pc,spc_ram,r0
2184   subs   cycles,cycles,#126
2185   ldrgeb opcode,[spc_pc],#1
2186   ldrge  pc,[opcodes,opcode,lsl #2]
2187   b      spc700End
2188
2189
2190 Apu80:
2191   orr   spc_p,spc_p,#flag_c
2192   subs   cycles,cycles,#42
2193   ldrgeb opcode,[spc_pc],#1
2194   ldrge  pc,[opcodes,opcode,lsl #2]
2195   b      spc700End
2196
2197
2198 Apu81:
2199   sub   r0,spc_pc,spc_ram
2200   add   r1,spc_ram,spc_s
2201   strb  r0,[r1,#0xff]
2202   mov   r0,r0,lsr #8
2203   strb  r0,[r1,#0x100]
2204   sub   spc_s,spc_s,#2
2205   ldr   r0,[context,#iapu_extraram]
2206   ldrh  r0,[r0,#0xe]
2207   add   spc_pc,spc_ram,r0
2208   subs   cycles,cycles,#168
2209   ldrgeb opcode,[spc_pc],#1
2210   ldrge  pc,[opcodes,opcode,lsl #2]
2211   b      spc700End
2212
2213
2214 Apu82:
2215   ldrb  r0,[spc_pc]
2216   bl    S9xAPUGetByteZ
2217   orr   r0,r0,#0x10
2218   ldrb  r1,[spc_pc],#1
2219   bl    S9xAPUSetByteZ
2220   ldr   spc_ram,[context,#iapu_ram]
2221   subs   cycles,cycles,#84
2222   ldrgeb opcode,[spc_pc],#1
2223   ldrge  pc,[opcodes,opcode,lsl #2]
2224   b      spc700End
2225
2226
2227 Apu83:
2228   ldrb  r0,[spc_pc],#1
2229   bl    S9xAPUGetByteZ
2230   ldr   spc_ram,[context,#iapu_ram]
2231   tst   r0,#0x10
2232   addeq spc_pc,spc_pc,#1
2233   ldrnesb r0,[spc_pc],#1
2234   addne spc_pc,spc_pc,r0
2235   subne cycles,cycles,#42
2236   subs   cycles,cycles,#105
2237   ldrgeb opcode,[spc_pc],#1
2238   ldrge  pc,[opcodes,opcode,lsl #2]
2239   b      spc700End
2240
2241
2242 Apu84:
2243   ldrb  r0,[spc_pc],#1
2244   bl    S9xAPUGetByteZ
2245   ldr   spc_ram,[context,#iapu_ram]
2246   and   r1,spc_ya,#0xff00
2247   and   spc_ya,spc_ya,#0xff
2248   eor   r3,spc_ya,r0
2249   add   spc_ya,spc_ya,r0
2250   tst   spc_p,#flag_c
2251   addne spc_ya,spc_ya,#1
2252   movs  r12,spc_ya,lsr #8
2253   orrne spc_p,spc_p,#flag_c
2254   biceq spc_p,spc_p,#flag_c
2255   eor   r12,spc_ya,r0
2256   bic   r12,r12,r3
2257   tst   r12,#0x80
2258   orrne spc_p,spc_p,#flag_o
2259   biceq spc_p,spc_p,#flag_o
2260   eor   r12,r3,spc_ya
2261   tst   r12,#0x10
2262   orrne spc_p,spc_p,#flag_h
2263   biceq spc_p,spc_p,#flag_h
2264   and   spc_p,spc_p,#0xff
2265   orr   spc_p,spc_p,spc_ya,lsl #24
2266   and   spc_ya,spc_ya,#0xff
2267   orr   spc_ya,spc_ya,r1
2268   subs   cycles,cycles,#63
2269   ldrgeb opcode,[spc_pc],#1
2270   ldrge  pc,[opcodes,opcode,lsl #2]
2271   b      spc700End
2272
2273
2274 Apu85:
2275   ldrb  r0,[spc_pc],#1
2276   ldrb  r12,[spc_pc],#1
2277   orr   r0,r0,r12,lsl #8
2278   bl    S9xAPUGetByte
2279   ldr   spc_ram,[context,#iapu_ram]
2280   and   r1,spc_ya,#0xff00
2281   and   spc_ya,spc_ya,#0xff
2282   eor   r3,spc_ya,r0
2283   add   spc_ya,spc_ya,r0
2284   tst   spc_p,#flag_c
2285   addne spc_ya,spc_ya,#1
2286   movs  r12,spc_ya,lsr #8
2287   orrne spc_p,spc_p,#flag_c
2288   biceq spc_p,spc_p,#flag_c
2289   eor   r12,spc_ya,r0
2290   bic   r12,r12,r3
2291   tst   r12,#0x80
2292   orrne spc_p,spc_p,#flag_o
2293   biceq spc_p,spc_p,#flag_o
2294   eor   r12,r3,spc_ya
2295   tst   r12,#0x10
2296   orrne spc_p,spc_p,#flag_h
2297   biceq spc_p,spc_p,#flag_h
2298   and   spc_p,spc_p,#0xff
2299   orr   spc_p,spc_p,spc_ya,lsl #24
2300   and   spc_ya,spc_ya,#0xff
2301   orr   spc_ya,spc_ya,r1
2302   subs   cycles,cycles,#84
2303   ldrgeb opcode,[spc_pc],#1
2304   ldrge  pc,[opcodes,opcode,lsl #2]
2305   b      spc700End
2306
2307
2308 Apu86:
2309   mov   r0,spc_x
2310   bl    S9xAPUGetByteZ
2311   ldr   spc_ram,[context,#iapu_ram]
2312   and   r1,spc_ya,#0xff00
2313   and   spc_ya,spc_ya,#0xff
2314   eor   r3,spc_ya,r0
2315   add   spc_ya,spc_ya,r0
2316   tst   spc_p,#flag_c
2317   addne spc_ya,spc_ya,#1
2318   movs  r12,spc_ya,lsr #8
2319   orrne spc_p,spc_p,#flag_c
2320   biceq spc_p,spc_p,#flag_c
2321   eor   r12,spc_ya,r0
2322   bic   r12,r12,r3
2323   tst   r12,#0x80
2324   orrne spc_p,spc_p,#flag_o
2325   biceq spc_p,spc_p,#flag_o
2326   eor   r12,r3,spc_ya
2327   tst   r12,#0x10
2328   orrne spc_p,spc_p,#flag_h
2329   biceq spc_p,spc_p,#flag_h
2330   and   spc_p,spc_p,#0xff
2331   orr   spc_p,spc_p,spc_ya,lsl #24
2332   and   spc_ya,spc_ya,#0xff
2333   orr   spc_ya,spc_ya,r1
2334   subs   cycles,cycles,#63
2335   ldrgeb opcode,[spc_pc],#1
2336   ldrge  pc,[opcodes,opcode,lsl #2]
2337   b      spc700End
2338
2339
2340 Apu87:
2341   ldrb  r0,[spc_pc],#1
2342   add   r0,r0,spc_x
2343   and   r0,r0,#0xff
2344   ldr   r12,[context,#iapu_directpage]
2345   ldrb  r0,[r12,r0]!
2346   ldrb  r12,[r12,#1]
2347   orr   r0,r0,r12,lsl #8
2348   bl    S9xAPUGetByte
2349   ldr   spc_ram,[context,#iapu_ram]
2350   and   r1,spc_ya,#0xff00
2351   and   spc_ya,spc_ya,#0xff
2352   eor   r3,spc_ya,r0
2353   add   spc_ya,spc_ya,r0
2354   tst   spc_p,#flag_c
2355   addne spc_ya,spc_ya,#1
2356   movs  r12,spc_ya,lsr #8
2357   orrne spc_p,spc_p,#flag_c
2358   biceq spc_p,spc_p,#flag_c
2359   eor   r12,spc_ya,r0
2360   bic   r12,r12,r3
2361   tst   r12,#0x80
2362   orrne spc_p,spc_p,#flag_o
2363   biceq spc_p,spc_p,#flag_o
2364   eor   r12,r3,spc_ya
2365   tst   r12,#0x10
2366   orrne spc_p,spc_p,#flag_h
2367   biceq spc_p,spc_p,#flag_h
2368   and   spc_p,spc_p,#0xff
2369   orr   spc_p,spc_p,spc_ya,lsl #24
2370   and   spc_ya,spc_ya,#0xff
2371   orr   spc_ya,spc_ya,r1
2372   subs   cycles,cycles,#126
2373   ldrgeb opcode,[spc_pc],#1
2374   ldrge  pc,[opcodes,opcode,lsl #2]
2375   b      spc700End
2376
2377
2378 Apu88:
2379   ldrb  r0,[spc_pc],#1
2380   and   r1,spc_ya,#0xff00
2381   and   spc_ya,spc_ya,#0xff
2382   eor   r3,spc_ya,r0
2383   add   spc_ya,spc_ya,r0
2384   tst   spc_p,#flag_c
2385   addne spc_ya,spc_ya,#1
2386   movs  r12,spc_ya,lsr #8
2387   orrne spc_p,spc_p,#flag_c
2388   biceq spc_p,spc_p,#flag_c
2389   eor   r12,spc_ya,r0
2390   bic   r12,r12,r3
2391   tst   r12,#0x80
2392   orrne spc_p,spc_p,#flag_o
2393   biceq spc_p,spc_p,#flag_o
2394   eor   r12,r3,spc_ya
2395   tst   r12,#0x10
2396   orrne spc_p,spc_p,#flag_h
2397   biceq spc_p,spc_p,#flag_h
2398   and   spc_p,spc_p,#0xff
2399   orr   spc_p,spc_p,spc_ya,lsl #24
2400   and   spc_ya,spc_ya,#0xff
2401   orr   spc_ya,spc_ya,r1
2402   subs   cycles,cycles,#42
2403   ldrgeb opcode,[spc_pc],#1
2404   ldrge  pc,[opcodes,opcode,lsl #2]
2405   b      spc700End
2406
2407
2408 Apu89:
2409   ldrb  r0,[spc_pc],#1
2410   bl    S9xAPUGetByteZ
2411   stmfd sp!,{r0}
2412   ldrb  r0,[spc_pc]
2413   bl    S9xAPUGetByteZ
2414   ldmfd sp!,{r1}
2415   eor   r3,r0,r1
2416   add   r0,r0,r1
2417   tst   spc_p,#flag_c
2418   addne r0,r0,#1
2419   movs  r12,r0,lsr #8
2420   orrne spc_p,spc_p,#flag_c
2421   biceq spc_p,spc_p,#flag_c
2422   eor   r12,r0,r1
2423   bic   r12,r12,r3
2424   tst   r12,#0x80
2425   orrne spc_p,spc_p,#flag_o
2426   biceq spc_p,spc_p,#flag_o
2427   eor   r12,r3,r0
2428   tst   r12,#0x10
2429   orrne spc_p,spc_p,#flag_h
2430   biceq spc_p,spc_p,#flag_h
2431   and   spc_p,spc_p,#0xff
2432   orr   spc_p,spc_p,r0,lsl #24
2433   ldrb  r1,[spc_pc],#1
2434   bl    S9xAPUSetByteZ
2435   ldr   spc_ram,[context,#iapu_ram]
2436   subs   cycles,cycles,#126
2437   ldrgeb opcode,[spc_pc],#1
2438   ldrge  pc,[opcodes,opcode,lsl #2]
2439   b      spc700End
2440
2441
2442 Apu8A:
2443   ldrb  r0,[spc_pc],#1
2444   ldrb  r1,[spc_pc],#1
2445   add   r0,r0,r1,lsl #8
2446   mov   r1,r1,lsr #5
2447   mov   r0,r0,lsl #19
2448   mov   r0,r0,lsr #19
2449   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
2450   bl    S9xAPUGetByte
2451   mov   r1,spc_x,lsr #29
2452   and   spc_x,spc_x,#0xff
2453   mov   r0,r0,lsr r1
2454   tst   r0,#1
2455   eorne spc_p,spc_p,#flag_c
2456   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
2457   subs   cycles,cycles,#105
2458   ldrgeb opcode,[spc_pc],#1
2459   ldrge  pc,[opcodes,opcode,lsl #2]
2460   b      spc700End
2461
2462
2463 Apu8B:
2464   ldrb  r0,[spc_pc]
2465   bl    S9xAPUGetByteZ
2466   sub   r0,r0,#1
2467   and   spc_p,spc_p,#0xff
2468   orr   spc_p,spc_p,r0,lsl #24
2469   ldrb  r1,[spc_pc],#1
2470   bl    S9xAPUSetByteZ
2471   ldr   spc_ram,[context,#iapu_ram]
2472   subs   cycles,cycles,#84
2473   ldrgeb opcode,[spc_pc],#1
2474   ldrge  pc,[opcodes,opcode,lsl #2]
2475   b      spc700End
2476
2477
2478 Apu8C:
2479   ldrb  r0,[spc_pc],#1
2480   ldrb  r12,[spc_pc],#1
2481   orr   r0,r0,r12,lsl #8
2482   stmfd sp!,{r0}
2483   bl    S9xAPUGetByte
2484   sub   r0,r0,#1
2485   and   spc_p,spc_p,#0xff
2486   orr   spc_p,spc_p,r0,lsl #24
2487   ldmfd sp!,{r1}
2488   bl    S9xAPUSetByte
2489   ldr   spc_ram,[context,#iapu_ram]
2490   subs   cycles,cycles,#105
2491   ldrgeb opcode,[spc_pc],#1
2492   ldrge  pc,[opcodes,opcode,lsl #2]
2493   b      spc700End
2494
2495
2496 Apu8D:
2497   ldrb  r0,[spc_pc],#1
2498   and   spc_ya,spc_ya,#0xff
2499   orr   spc_ya,spc_ya,r0,lsl #8
2500   and   spc_p,spc_p,#0xff
2501   orr   spc_p,spc_p,r0,lsl #24
2502   subs   cycles,cycles,#42
2503   ldrgeb opcode,[spc_pc],#1
2504   ldrge  pc,[opcodes,opcode,lsl #2]
2505   b      spc700End
2506
2507
2508 Apu8E:
2509   add   spc_s,spc_s,#1
2510   add   spc_p,spc_ram,spc_s
2511   ldrb  spc_p,[spc_p,#0x100]
2512   and   r0,spc_p,#(flag_z|flag_n)
2513   eor   r0,r0,#flag_z
2514   orr   spc_p,spc_p,r0,lsl #24
2515   tst   spc_p,#flag_d
2516   addne r0,spc_ram,#0x100
2517   moveq r0,spc_ram
2518   str   r0,[context,#iapu_directpage]
2519   subs   cycles,cycles,#84
2520   ldrgeb opcode,[spc_pc],#1
2521   ldrge  pc,[opcodes,opcode,lsl #2]
2522   b      spc700End
2523
2524
2525 Apu8F:
2526   ldrb  r0,[spc_pc],#1
2527   ldrb  r1,[spc_pc],#1
2528   bl    S9xAPUSetByteZ
2529   ldr   spc_ram,[context,#iapu_ram]
2530   subs   cycles,cycles,#105
2531   ldrgeb opcode,[spc_pc],#1
2532   ldrge  pc,[opcodes,opcode,lsl #2]
2533   b      spc700End
2534
2535
2536 Apu90:
2537   tst   spc_p,#0x00000001
2538   addne spc_pc,spc_pc,#1
2539   ldreqsb r0,[spc_pc],#1
2540   addeq spc_pc,spc_pc,r0
2541   subeq cycles,cycles,#42
2542   subs   cycles,cycles,#42
2543   ldrgeb opcode,[spc_pc],#1
2544   ldrge  pc,[opcodes,opcode,lsl #2]
2545   b      spc700End
2546
2547
2548 Apu91:
2549   sub   r0,spc_pc,spc_ram
2550   add   r1,spc_ram,spc_s
2551   strb  r0,[r1,#0xff]
2552   mov   r0,r0,lsr #8
2553   strb  r0,[r1,#0x100]
2554   sub   spc_s,spc_s,#2
2555   ldr   r0,[context,#iapu_extraram]
2556   ldrh  r0,[r0,#0xc]
2557   add   spc_pc,spc_ram,r0
2558   subs   cycles,cycles,#168
2559   ldrgeb opcode,[spc_pc],#1
2560   ldrge  pc,[opcodes,opcode,lsl #2]
2561   b      spc700End
2562
2563
2564 Apu92:
2565   ldrb  r0,[spc_pc]
2566   bl    S9xAPUGetByteZ
2567   bic   r0,r0,#0x10
2568   ldrb  r1,[spc_pc],#1
2569   bl    S9xAPUSetByteZ
2570   ldr   spc_ram,[context,#iapu_ram]
2571   subs   cycles,cycles,#84
2572   ldrgeb opcode,[spc_pc],#1
2573   ldrge  pc,[opcodes,opcode,lsl #2]
2574   b      spc700End
2575
2576
2577 Apu93:
2578   ldrb  r0,[spc_pc],#1
2579   bl    S9xAPUGetByteZ
2580   ldr   spc_ram,[context,#iapu_ram]
2581   tst   r0,#0x10
2582   addne spc_pc,spc_pc,#1
2583   ldreqsb r0,[spc_pc],#1
2584   addeq spc_pc,spc_pc,r0
2585   subeq cycles,cycles,#42
2586   subs   cycles,cycles,#105
2587   ldrgeb opcode,[spc_pc],#1
2588   ldrge  pc,[opcodes,opcode,lsl #2]
2589   b      spc700End
2590
2591
2592 Apu94:
2593   ldrb  r0,[spc_pc],#1
2594   add   r0,r0,spc_x
2595   bl    S9xAPUGetByteZ
2596   ldr   spc_ram,[context,#iapu_ram]
2597   and   r1,spc_ya,#0xff00
2598   and   spc_ya,spc_ya,#0xff
2599   eor   r3,spc_ya,r0
2600   add   spc_ya,spc_ya,r0
2601   tst   spc_p,#flag_c
2602   addne spc_ya,spc_ya,#1
2603   movs  r12,spc_ya,lsr #8
2604   orrne spc_p,spc_p,#flag_c
2605   biceq spc_p,spc_p,#flag_c
2606   eor   r12,spc_ya,r0
2607   bic   r12,r12,r3
2608   tst   r12,#0x80
2609   orrne spc_p,spc_p,#flag_o
2610   biceq spc_p,spc_p,#flag_o
2611   eor   r12,r3,spc_ya
2612   tst   r12,#0x10
2613   orrne spc_p,spc_p,#flag_h
2614   biceq spc_p,spc_p,#flag_h
2615   and   spc_p,spc_p,#0xff
2616   orr   spc_p,spc_p,spc_ya,lsl #24
2617   and   spc_ya,spc_ya,#0xff
2618   orr   spc_ya,spc_ya,r1
2619   subs   cycles,cycles,#84
2620   ldrgeb opcode,[spc_pc],#1
2621   ldrge  pc,[opcodes,opcode,lsl #2]
2622   b      spc700End
2623
2624
2625 Apu95:
2626   ldrb  r0,[spc_pc],#1
2627   ldrb  r12,[spc_pc],#1
2628   orr   r0,r0,r12,lsl #8
2629   add   r0,r0,spc_x
2630   bl    S9xAPUGetByte
2631   ldr   spc_ram,[context,#iapu_ram]
2632   and   r1,spc_ya,#0xff00
2633   and   spc_ya,spc_ya,#0xff
2634   eor   r3,spc_ya,r0
2635   add   spc_ya,spc_ya,r0
2636   tst   spc_p,#flag_c
2637   addne spc_ya,spc_ya,#1
2638   movs  r12,spc_ya,lsr #8
2639   orrne spc_p,spc_p,#flag_c
2640   biceq spc_p,spc_p,#flag_c
2641   eor   r12,spc_ya,r0
2642   bic   r12,r12,r3
2643   tst   r12,#0x80
2644   orrne spc_p,spc_p,#flag_o
2645   biceq spc_p,spc_p,#flag_o
2646   eor   r12,r3,spc_ya
2647   tst   r12,#0x10
2648   orrne spc_p,spc_p,#flag_h
2649   biceq spc_p,spc_p,#flag_h
2650   and   spc_p,spc_p,#0xff
2651   orr   spc_p,spc_p,spc_ya,lsl #24
2652   and   spc_ya,spc_ya,#0xff
2653   orr   spc_ya,spc_ya,r1
2654   subs   cycles,cycles,#105
2655   ldrgeb opcode,[spc_pc],#1
2656   ldrge  pc,[opcodes,opcode,lsl #2]
2657   b      spc700End
2658
2659
2660 Apu96:
2661   ldrb  r0,[spc_pc],#1
2662   ldrb  r12,[spc_pc],#1
2663   orr   r0,r0,r12,lsl #8
2664   add   r0,r0,spc_ya,lsr #8
2665   bl    S9xAPUGetByte
2666   ldr   spc_ram,[context,#iapu_ram]
2667   and   r1,spc_ya,#0xff00
2668   and   spc_ya,spc_ya,#0xff
2669   eor   r3,spc_ya,r0
2670   add   spc_ya,spc_ya,r0
2671   tst   spc_p,#flag_c
2672   addne spc_ya,spc_ya,#1
2673   movs  r12,spc_ya,lsr #8
2674   orrne spc_p,spc_p,#flag_c
2675   biceq spc_p,spc_p,#flag_c
2676   eor   r12,spc_ya,r0
2677   bic   r12,r12,r3
2678   tst   r12,#0x80
2679   orrne spc_p,spc_p,#flag_o
2680   biceq spc_p,spc_p,#flag_o
2681   eor   r12,r3,spc_ya
2682   tst   r12,#0x10
2683   orrne spc_p,spc_p,#flag_h
2684   biceq spc_p,spc_p,#flag_h
2685   and   spc_p,spc_p,#0xff
2686   orr   spc_p,spc_p,spc_ya,lsl #24
2687   and   spc_ya,spc_ya,#0xff
2688   orr   spc_ya,spc_ya,r1
2689   subs   cycles,cycles,#105
2690   ldrgeb opcode,[spc_pc],#1
2691   ldrge  pc,[opcodes,opcode,lsl #2]
2692   b      spc700End
2693
2694
2695 Apu97:
2696   ldrb  r0,[spc_pc],#1
2697   ldr   r12,[context,#iapu_directpage]
2698   ldrb  r0,[r12,r0]!
2699   ldrb  r12,[r12,#1]
2700   orr   r0,r0,r12,lsl #8
2701   add   r0,r0,spc_ya,lsr #8
2702   bl    S9xAPUGetByte
2703   ldr   spc_ram,[context,#iapu_ram]
2704   and   r1,spc_ya,#0xff00
2705   and   spc_ya,spc_ya,#0xff
2706   eor   r3,spc_ya,r0
2707   add   spc_ya,spc_ya,r0
2708   tst   spc_p,#flag_c
2709   addne spc_ya,spc_ya,#1
2710   movs  r12,spc_ya,lsr #8
2711   orrne spc_p,spc_p,#flag_c
2712   biceq spc_p,spc_p,#flag_c
2713   eor   r12,spc_ya,r0
2714   bic   r12,r12,r3
2715   tst   r12,#0x80
2716   orrne spc_p,spc_p,#flag_o
2717   biceq spc_p,spc_p,#flag_o
2718   eor   r12,r3,spc_ya
2719   tst   r12,#0x10
2720   orrne spc_p,spc_p,#flag_h
2721   biceq spc_p,spc_p,#flag_h
2722   and   spc_p,spc_p,#0xff
2723   orr   spc_p,spc_p,spc_ya,lsl #24
2724   and   spc_ya,spc_ya,#0xff
2725   orr   spc_ya,spc_ya,r1
2726   subs   cycles,cycles,#126
2727   ldrgeb opcode,[spc_pc],#1
2728   ldrge  pc,[opcodes,opcode,lsl #2]
2729   b      spc700End
2730
2731
2732 Apu98:
2733   ldrb  r0,[spc_pc,#1]
2734   bl    S9xAPUGetByteZ
2735   ldrb  r1,[spc_pc],#2
2736   eor   r3,r0,r1
2737   add   r0,r0,r1
2738   tst   spc_p,#flag_c
2739   addne r0,r0,#1
2740   movs  r12,r0,lsr #8
2741   orrne spc_p,spc_p,#flag_c
2742   biceq spc_p,spc_p,#flag_c
2743   eor   r12,r0,r1
2744   bic   r12,r12,r3
2745   tst   r12,#0x80
2746   orrne spc_p,spc_p,#flag_o
2747   biceq spc_p,spc_p,#flag_o
2748   eor   r12,r3,r0
2749   tst   r12,#0x10
2750   orrne spc_p,spc_p,#flag_h
2751   biceq spc_p,spc_p,#flag_h
2752   and   spc_p,spc_p,#0xff
2753   orr   spc_p,spc_p,r0,lsl #24
2754   ldrb  r1,[spc_pc,#-1]
2755   bl    S9xAPUSetByteZ
2756   ldr   spc_ram,[context,#iapu_ram]
2757   subs   cycles,cycles,#105
2758   ldrgeb opcode,[spc_pc],#1
2759   ldrge  pc,[opcodes,opcode,lsl #2]
2760   b      spc700End
2761
2762
2763 Apu99:
2764   mov   r0,spc_x
2765   bl    S9xAPUGetByteZ
2766   stmfd sp!,{r0}
2767   mov   r0,spc_ya,lsr #8
2768   bl    S9xAPUGetByteZ
2769   ldmfd sp!,{r1}
2770   eor   r3,r0,r1
2771   add   r0,r0,r1
2772   tst   spc_p,#flag_c
2773   addne r0,r0,#1
2774   movs  r12,r0,lsr #8
2775   orrne spc_p,spc_p,#flag_c
2776   biceq spc_p,spc_p,#flag_c
2777   eor   r12,r0,r1
2778   bic   r12,r12,r3
2779   tst   r12,#0x80
2780   orrne spc_p,spc_p,#flag_o
2781   biceq spc_p,spc_p,#flag_o
2782   eor   r12,r3,r0
2783   tst   r12,#0x10
2784   orrne spc_p,spc_p,#flag_h
2785   biceq spc_p,spc_p,#flag_h
2786   and   spc_p,spc_p,#0xff
2787   orr   spc_p,spc_p,r0,lsl #24
2788   mov   r1,spc_x
2789   bl    S9xAPUSetByteZ
2790   ldr   spc_ram,[context,#iapu_ram]
2791   subs   cycles,cycles,#105
2792   ldrgeb opcode,[spc_pc],#1
2793   ldrge  pc,[opcodes,opcode,lsl #2]
2794   b      spc700End
2795
2796
2797 Apu9A:
2798   ldrb  r0,[spc_pc]
2799   bl    S9xAPUGetByteZ
2800   stmfd sp!,{r0}
2801   ldrb  r0,[spc_pc],#1
2802   add   r0,r0,#1
2803   bl    S9xAPUGetByteZ
2804   ldr   spc_ram,[context,#iapu_ram]
2805   ldmfd sp!,{r1}
2806   orr   r1,r1,r0,lsl #8
2807   subs  r0,spc_ya,r1
2808   orrge spc_p,spc_p,#flag_c
2809   biclt spc_p,spc_p,#flag_c
2810   mov   r2,r0,lsl #16
2811   mov   r2,r2,lsr #16
2812   eor   r3,spc_ya,r2
2813   eor   r12,spc_ya,r1
2814   and   r12,r12,r3
2815   tst   r12,#0x8000
2816   orrne spc_p,spc_p,#flag_o
2817   biceq spc_p,spc_p,#flag_o
2818   eor   r12,r3,r1
2819   tst   r12,#0x10
2820   bicne spc_p,spc_p,#flag_h
2821   orreq spc_p,spc_p,#flag_h
2822   mov   spc_ya,r2
2823   and   spc_p,spc_p,#0xff
2824   orr   spc_p,spc_p,spc_ya,lsl #16
2825   tst   spc_ya,#0xff
2826   orrne spc_p,spc_p,#0x01000000
2827   subs   cycles,cycles,#105
2828   ldrgeb opcode,[spc_pc],#1
2829   ldrge  pc,[opcodes,opcode,lsl #2]
2830   b      spc700End
2831
2832
2833 Apu9B:
2834   ldrb  r0,[spc_pc]
2835   add   r0,r0,spc_x
2836   bl    S9xAPUGetByteZ
2837   sub   r0,r0,#1
2838   and   spc_p,spc_p,#0xff
2839   orr   spc_p,spc_p,r0,lsl #24
2840   ldrb  r1,[spc_pc],#1
2841   add   r1,r1,spc_x
2842   bl    S9xAPUSetByteZ
2843   ldr   spc_ram,[context,#iapu_ram]
2844   subs   cycles,cycles,#105
2845   ldrgeb opcode,[spc_pc],#1
2846   ldrge  pc,[opcodes,opcode,lsl #2]
2847   b      spc700End
2848
2849
2850 Apu9C:
2851   and   r0,spc_ya,#0xff
2852   sub   r0,r0,#1
2853   and   spc_p,spc_p,#0xff
2854   orr   spc_p,spc_p,r0,lsl #24
2855   and   r0,r0,#0xff
2856   mov   spc_ya,spc_ya,lsr #8
2857   orr   spc_ya,r0,spc_ya,lsl #8
2858   subs   cycles,cycles,#42
2859   ldrgeb opcode,[spc_pc],#1
2860   ldrge  pc,[opcodes,opcode,lsl #2]
2861   b      spc700End
2862
2863
2864 Apu9D:
2865   mov   spc_x,spc_s
2866   and   spc_p,spc_p,#0xff
2867   orr   spc_p,spc_p,spc_x,lsl #24
2868   subs   cycles,cycles,#42
2869   ldrgeb opcode,[spc_pc],#1
2870   ldrge  pc,[opcodes,opcode,lsl #2]
2871   b      spc700End
2872
2873
2874 Apu9E:
2875   tst   spc_x,spc_x @ div by 0?
2876   orreq spc_ya,spc_ya,#0xff00
2877   orreq spc_ya,spc_ya,#0x00ff
2878   orreq spc_p,spc_p,#flag_o
2879   beq   Apu9E_end
2880   bic   spc_p,spc_p,#flag_o
2881 @ Divide spc_ya by spc_x
2882   mov r3,#0
2883   mov r1,spc_x
2884
2885 @ Shift up divisor till it's just less than numerator
2886 divshift:
2887   cmp r1,spc_ya,lsr #1
2888   movls r1,r1,lsl #1
2889   bcc divshift
2890
2891 divloop:
2892   cmp spc_ya,r1
2893   adc r3,r3,r3 ;@ Double r3 and add 1 if carry set
2894   subcs spc_ya,spc_ya,r1
2895   teq r1,spc_x
2896   movne r1,r1,lsr #1
2897   bne divloop
2898
2899   and   spc_ya,spc_ya,#0xff
2900   and   r3,r3,#0xff
2901   orr   spc_ya,r3,spc_ya,lsl #8
2902 Apu9E_end:
2903   and   spc_p,spc_p,#0xff
2904   orr   spc_p,spc_p,spc_ya,lsl #24
2905   subs   cycles,cycles,#252
2906   ldrgeb opcode,[spc_pc],#1
2907   ldrge  pc,[opcodes,opcode,lsl #2]
2908   b      spc700End
2909
2910
2911 Apu9F:
2912   and   r0,spc_ya,#0xff
2913   mov   r1,r0,lsl #28
2914   orr   r0,r1,r0,lsl #20
2915   and   spc_ya,spc_ya,#0xff00
2916   orr   spc_ya,spc_ya,r0,lsr #24
2917   and   spc_p,spc_p,#0xff
2918   orr   spc_p,spc_p,spc_ya,lsl #24
2919   subs   cycles,cycles,#105
2920   ldrgeb opcode,[spc_pc],#1
2921   ldrge  pc,[opcodes,opcode,lsl #2]
2922   b      spc700End
2923
2924
2925 ApuA0:
2926   orr   spc_p,spc_p,#flag_i
2927   subs   cycles,cycles,#63
2928   ldrgeb opcode,[spc_pc],#1
2929   ldrge  pc,[opcodes,opcode,lsl #2]
2930   b      spc700End
2931
2932
2933 ApuA1:
2934   sub   r0,spc_pc,spc_ram
2935   add   r1,spc_ram,spc_s
2936   strb  r0,[r1,#0xff]
2937   mov   r0,r0,lsr #8
2938   strb  r0,[r1,#0x100]
2939   sub   spc_s,spc_s,#2
2940   ldr   r0,[context,#iapu_extraram]
2941   ldrh  r0,[r0,#0xa]
2942   add   spc_pc,spc_ram,r0
2943   subs   cycles,cycles,#168
2944   ldrgeb opcode,[spc_pc],#1
2945   ldrge  pc,[opcodes,opcode,lsl #2]
2946   b      spc700End
2947
2948
2949 ApuA2:
2950   ldrb  r0,[spc_pc]
2951   bl    S9xAPUGetByteZ
2952   orr   r0,r0,#0x20
2953   ldrb  r1,[spc_pc],#1
2954   bl    S9xAPUSetByteZ
2955   ldr   spc_ram,[context,#iapu_ram]
2956   subs   cycles,cycles,#84
2957   ldrgeb opcode,[spc_pc],#1
2958   ldrge  pc,[opcodes,opcode,lsl #2]
2959   b      spc700End
2960
2961
2962 ApuA3:
2963   ldrb  r0,[spc_pc],#1
2964   bl    S9xAPUGetByteZ
2965   ldr   spc_ram,[context,#iapu_ram]
2966   tst   r0,#0x20
2967   addeq spc_pc,spc_pc,#1
2968   ldrnesb r0,[spc_pc],#1
2969   addne spc_pc,spc_pc,r0
2970   subne cycles,cycles,#42
2971   subs   cycles,cycles,#105
2972   ldrgeb opcode,[spc_pc],#1
2973   ldrge  pc,[opcodes,opcode,lsl #2]
2974   b      spc700End
2975
2976
2977 ApuA4:
2978   ldrb  r0,[spc_pc],#1
2979   bl    S9xAPUGetByteZ
2980   ldr   spc_ram,[context,#iapu_ram]
2981   and   r1,spc_ya,#0xff00
2982   and   spc_ya,spc_ya,#0xff
2983   movs  r12,spc_p,lsr #1
2984   sbcs  r2,spc_ya,r0
2985   orrge spc_p,spc_p,#flag_c
2986   biclt spc_p,spc_p,#flag_c
2987   eor   r12,spc_ya,r2
2988   eor   r3,spc_ya,r0
2989   and   r12,r12,r3
2990   tst   r12,#0x80
2991   orrne spc_p,spc_p,#flag_o
2992   biceq spc_p,spc_p,#flag_o
2993   eor   r12,r3,r2
2994   tst   r12,#0x10
2995   orreq spc_p,spc_p,#flag_h
2996   bicne spc_p,spc_p,#flag_h
2997   mov   spc_ya,r2
2998   and   spc_p,spc_p,#0xff
2999   orr   spc_p,spc_p,spc_ya,lsl #24
3000   and   spc_ya,spc_ya,#0xff
3001   orr   spc_ya,spc_ya,r1
3002   subs   cycles,cycles,#63
3003   ldrgeb opcode,[spc_pc],#1
3004   ldrge  pc,[opcodes,opcode,lsl #2]
3005   b      spc700End
3006
3007
3008 ApuA5:
3009   ldrb  r0,[spc_pc],#1
3010   ldrb  r12,[spc_pc],#1
3011   orr   r0,r0,r12,lsl #8
3012   bl    S9xAPUGetByte
3013   ldr   spc_ram,[context,#iapu_ram]
3014   and   r1,spc_ya,#0xff00
3015   and   spc_ya,spc_ya,#0xff
3016   movs  r12,spc_p,lsr #1
3017   sbcs  r2,spc_ya,r0
3018   orrge spc_p,spc_p,#flag_c
3019   biclt spc_p,spc_p,#flag_c
3020   eor   r12,spc_ya,r2
3021   eor   r3,spc_ya,r0
3022   and   r12,r12,r3
3023   tst   r12,#0x80
3024   orrne spc_p,spc_p,#flag_o
3025   biceq spc_p,spc_p,#flag_o
3026   eor   r12,r3,r2
3027   tst   r12,#0x10
3028   orreq spc_p,spc_p,#flag_h
3029   bicne spc_p,spc_p,#flag_h
3030   mov   spc_ya,r2
3031   and   spc_p,spc_p,#0xff
3032   orr   spc_p,spc_p,spc_ya,lsl #24
3033   and   spc_ya,spc_ya,#0xff
3034   orr   spc_ya,spc_ya,r1
3035   subs   cycles,cycles,#84
3036   ldrgeb opcode,[spc_pc],#1
3037   ldrge  pc,[opcodes,opcode,lsl #2]
3038   b      spc700End
3039
3040
3041 ApuA6:
3042   mov   r0,spc_x
3043   bl    S9xAPUGetByteZ
3044   ldr   spc_ram,[context,#iapu_ram]
3045   and   r1,spc_ya,#0xff00
3046   and   spc_ya,spc_ya,#0xff
3047   movs  r12,spc_p,lsr #1
3048   sbcs  r2,spc_ya,r0
3049   orrge spc_p,spc_p,#flag_c
3050   biclt spc_p,spc_p,#flag_c
3051   eor   r12,spc_ya,r2
3052   eor   r3,spc_ya,r0
3053   and   r12,r12,r3
3054   tst   r12,#0x80
3055   orrne spc_p,spc_p,#flag_o
3056   biceq spc_p,spc_p,#flag_o
3057   eor   r12,r3,r2
3058   tst   r12,#0x10
3059   orreq spc_p,spc_p,#flag_h
3060   bicne spc_p,spc_p,#flag_h
3061   mov   spc_ya,r2
3062   and   spc_p,spc_p,#0xff
3063   orr   spc_p,spc_p,spc_ya,lsl #24
3064   and   spc_ya,spc_ya,#0xff
3065   orr   spc_ya,spc_ya,r1
3066   subs   cycles,cycles,#63
3067   ldrgeb opcode,[spc_pc],#1
3068   ldrge  pc,[opcodes,opcode,lsl #2]
3069   b      spc700End
3070
3071
3072 ApuA7:
3073   ldrb  r0,[spc_pc],#1
3074   add   r0,r0,spc_x
3075   and   r0,r0,#0xff
3076   ldr   r12,[context,#iapu_directpage]
3077   ldrb  r0,[r12,r0]!
3078   ldrb  r12,[r12,#1]
3079   orr   r0,r0,r12,lsl #8
3080   bl    S9xAPUGetByte
3081   ldr   spc_ram,[context,#iapu_ram]
3082   and   r1,spc_ya,#0xff00
3083   and   spc_ya,spc_ya,#0xff
3084   movs  r12,spc_p,lsr #1
3085   sbcs  r2,spc_ya,r0
3086   orrge spc_p,spc_p,#flag_c
3087   biclt spc_p,spc_p,#flag_c
3088   eor   r12,spc_ya,r2
3089   eor   r3,spc_ya,r0
3090   and   r12,r12,r3
3091   tst   r12,#0x80
3092   orrne spc_p,spc_p,#flag_o
3093   biceq spc_p,spc_p,#flag_o
3094   eor   r12,r3,r2
3095   tst   r12,#0x10
3096   orreq spc_p,spc_p,#flag_h
3097   bicne spc_p,spc_p,#flag_h
3098   mov   spc_ya,r2
3099   and   spc_p,spc_p,#0xff
3100   orr   spc_p,spc_p,spc_ya,lsl #24
3101   and   spc_ya,spc_ya,#0xff
3102   orr   spc_ya,spc_ya,r1
3103   subs   cycles,cycles,#126
3104   ldrgeb opcode,[spc_pc],#1
3105   ldrge  pc,[opcodes,opcode,lsl #2]
3106   b      spc700End
3107
3108
3109 ApuA8:
3110   ldrb  r0,[spc_pc],#1
3111   and   r1,spc_ya,#0xff00
3112   and   spc_ya,spc_ya,#0xff
3113   movs  r12,spc_p,lsr #1
3114   sbcs  r2,spc_ya,r0
3115   orrge spc_p,spc_p,#flag_c
3116   biclt spc_p,spc_p,#flag_c
3117   eor   r12,spc_ya,r2
3118   eor   r3,spc_ya,r0
3119   and   r12,r12,r3
3120   tst   r12,#0x80
3121   orrne spc_p,spc_p,#flag_o
3122   biceq spc_p,spc_p,#flag_o
3123   eor   r12,r3,r2
3124   tst   r12,#0x10
3125   orreq spc_p,spc_p,#flag_h
3126   bicne spc_p,spc_p,#flag_h
3127   mov   spc_ya,r2
3128   and   spc_p,spc_p,#0xff
3129   orr   spc_p,spc_p,spc_ya,lsl #24
3130   and   spc_ya,spc_ya,#0xff
3131   orr   spc_ya,spc_ya,r1
3132   subs   cycles,cycles,#42
3133   ldrgeb opcode,[spc_pc],#1
3134   ldrge  pc,[opcodes,opcode,lsl #2]
3135   b      spc700End
3136
3137
3138 ApuA9:
3139   ldrb  r0,[spc_pc],#1
3140   bl    S9xAPUGetByteZ
3141   stmfd sp!,{r0}
3142   ldrb  r0,[spc_pc]
3143   bl    S9xAPUGetByteZ
3144   ldmfd sp!,{r1}
3145   movs  r12,spc_p,lsr #1
3146   sbcs  r2,r0,r1
3147   orrge spc_p,spc_p,#flag_c
3148   biclt spc_p,spc_p,#flag_c
3149   eor   r12,r0,r2
3150   eor   r3,r0,r1
3151   and   r12,r12,r3
3152   tst   r12,#0x80
3153   orrne spc_p,spc_p,#flag_o
3154   biceq spc_p,spc_p,#flag_o
3155   eor   r12,r3,r2
3156   tst   r12,#0x10
3157   orreq spc_p,spc_p,#flag_h
3158   bicne spc_p,spc_p,#flag_h
3159   mov   r0,r2
3160   and   spc_p,spc_p,#0xff
3161   orr   spc_p,spc_p,r0,lsl #24
3162   ldrb  r1,[spc_pc],#1
3163   bl    S9xAPUSetByteZ
3164   ldr   spc_ram,[context,#iapu_ram]
3165   subs   cycles,cycles,#126
3166   ldrgeb opcode,[spc_pc],#1
3167   ldrge  pc,[opcodes,opcode,lsl #2]
3168   b      spc700End
3169
3170
3171 ApuAA:
3172   ldrb  r0,[spc_pc],#1
3173   ldrb  r1,[spc_pc],#1
3174   add   r0,r0,r1,lsl #8
3175   mov   r1,r1,lsr #5
3176   mov   r0,r0,lsl #19
3177   mov   r0,r0,lsr #19
3178   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
3179   bl    S9xAPUGetByte
3180   mov   r1,spc_x,lsr #29
3181   and   spc_x,spc_x,#0xff
3182   mov   r0,r0,lsr r1
3183   tst   r0,#1
3184   orrne spc_p,spc_p,#flag_c
3185   biceq spc_p,spc_p,#flag_c
3186   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
3187   subs   cycles,cycles,#84
3188   ldrgeb opcode,[spc_pc],#1
3189   ldrge  pc,[opcodes,opcode,lsl #2]
3190   b      spc700End
3191
3192
3193 ApuAB:
3194   ldrb  r0,[spc_pc]
3195   bl    S9xAPUGetByteZ
3196   add   r0,r0,#1
3197   and   spc_p,spc_p,#0xff
3198   orr   spc_p,spc_p,r0,lsl #24
3199   ldrb  r1,[spc_pc],#1
3200   bl    S9xAPUSetByteZ
3201   ldr   spc_ram,[context,#iapu_ram]
3202   subs   cycles,cycles,#84
3203   ldrgeb opcode,[spc_pc],#1
3204   ldrge  pc,[opcodes,opcode,lsl #2]
3205   b      spc700End
3206
3207
3208 ApuAC:
3209   ldrb  r0,[spc_pc],#1
3210   ldrb  r12,[spc_pc],#1
3211   orr   r0,r0,r12,lsl #8
3212   stmfd sp!,{r0}
3213   bl    S9xAPUGetByte
3214   add   r0,r0,#1
3215   and   spc_p,spc_p,#0xff
3216   orr   spc_p,spc_p,r0,lsl #24
3217   ldmfd sp!,{r1}
3218   bl    S9xAPUSetByte
3219   ldr   spc_ram,[context,#iapu_ram]
3220   subs   cycles,cycles,#105
3221   ldrgeb opcode,[spc_pc],#1
3222   ldrge  pc,[opcodes,opcode,lsl #2]
3223   b      spc700End
3224
3225
3226 ApuAD:
3227   ldrb  r0,[spc_pc],#1
3228   mov   r1,spc_ya,lsr #8
3229   subs  r12,r1,r0
3230   orrge spc_p,spc_p,#flag_c
3231   biclt spc_p,spc_p,#flag_c
3232   and   spc_p,spc_p,#0xff
3233   orr   spc_p,spc_p,r12,lsl #24
3234   subs   cycles,cycles,#42
3235   ldrgeb opcode,[spc_pc],#1
3236   ldrge  pc,[opcodes,opcode,lsl #2]
3237   b      spc700End
3238
3239
3240 ApuAE:
3241   add   spc_s,spc_s,#1
3242   add   r0,spc_ram,spc_s
3243   ldrb  r0,[r0,#0x100]
3244   and   spc_ya,spc_ya,#0xff00
3245   orr   spc_ya,spc_ya,r0
3246   subs   cycles,cycles,#84
3247   ldrgeb opcode,[spc_pc],#1
3248   ldrge  pc,[opcodes,opcode,lsl #2]
3249   b      spc700End
3250
3251
3252 ApuAF:
3253   mov   r0,spc_ya
3254   mov   r1,spc_x
3255   bl    S9xAPUSetByteZ
3256   ldr   spc_ram,[context,#iapu_ram]
3257   add   spc_x,spc_x,#1
3258   and   spc_x,spc_x,#0xff
3259   subs   cycles,cycles,#84
3260   ldrgeb opcode,[spc_pc],#1
3261   ldrge  pc,[opcodes,opcode,lsl #2]
3262   b      spc700End
3263
3264
3265 ApuB0:
3266   tst   spc_p,#0x00000001
3267   addeq spc_pc,spc_pc,#1
3268   ldrnesb r0,[spc_pc],#1
3269   addne spc_pc,spc_pc,r0
3270   subne cycles,cycles,#42
3271   subs   cycles,cycles,#42
3272   ldrgeb opcode,[spc_pc],#1
3273   ldrge  pc,[opcodes,opcode,lsl #2]
3274   b      spc700End
3275
3276
3277 ApuB1:
3278   sub   r0,spc_pc,spc_ram
3279   add   r1,spc_ram,spc_s
3280   strb  r0,[r1,#0xff]
3281   mov   r0,r0,lsr #8
3282   strb  r0,[r1,#0x100]
3283   sub   spc_s,spc_s,#2
3284   ldr   r0,[context,#iapu_extraram]
3285   ldrh  r0,[r0,#0x8]
3286   add   spc_pc,spc_ram,r0
3287   subs   cycles,cycles,#168
3288   ldrgeb opcode,[spc_pc],#1
3289   ldrge  pc,[opcodes,opcode,lsl #2]
3290   b      spc700End
3291
3292
3293 ApuB2:
3294   ldrb  r0,[spc_pc]
3295   bl    S9xAPUGetByteZ
3296   bic   r0,r0,#0x20
3297   ldrb  r1,[spc_pc],#1
3298   bl    S9xAPUSetByteZ
3299   ldr   spc_ram,[context,#iapu_ram]
3300   subs   cycles,cycles,#84
3301   ldrgeb opcode,[spc_pc],#1
3302   ldrge  pc,[opcodes,opcode,lsl #2]
3303   b      spc700End
3304
3305
3306 ApuB3:
3307   ldrb  r0,[spc_pc],#1
3308   bl    S9xAPUGetByteZ
3309   ldr   spc_ram,[context,#iapu_ram]
3310   tst   r0,#0x20
3311   addne spc_pc,spc_pc,#1
3312   ldreqsb r0,[spc_pc],#1
3313   addeq spc_pc,spc_pc,r0
3314   subeq cycles,cycles,#42
3315   subs   cycles,cycles,#105
3316   ldrgeb opcode,[spc_pc],#1
3317   ldrge  pc,[opcodes,opcode,lsl #2]
3318   b      spc700End
3319
3320
3321 ApuB4:
3322   ldrb  r0,[spc_pc],#1
3323   add   r0,r0,spc_x
3324   bl    S9xAPUGetByteZ
3325   ldr   spc_ram,[context,#iapu_ram]
3326   and   r1,spc_ya,#0xff00
3327   and   spc_ya,spc_ya,#0xff
3328   movs  r12,spc_p,lsr #1
3329   sbcs  r2,spc_ya,r0
3330   orrge spc_p,spc_p,#flag_c
3331   biclt spc_p,spc_p,#flag_c
3332   eor   r12,spc_ya,r2
3333   eor   r3,spc_ya,r0
3334   and   r12,r12,r3
3335   tst   r12,#0x80
3336   orrne spc_p,spc_p,#flag_o
3337   biceq spc_p,spc_p,#flag_o
3338   eor   r12,r3,r2
3339   tst   r12,#0x10
3340   orreq spc_p,spc_p,#flag_h
3341   bicne spc_p,spc_p,#flag_h
3342   mov   spc_ya,r2
3343   and   spc_p,spc_p,#0xff
3344   orr   spc_p,spc_p,spc_ya,lsl #24
3345   and   spc_ya,spc_ya,#0xff
3346   orr   spc_ya,spc_ya,r1
3347   subs   cycles,cycles,#84
3348   ldrgeb opcode,[spc_pc],#1
3349   ldrge  pc,[opcodes,opcode,lsl #2]
3350   b      spc700End
3351
3352
3353 ApuB5:
3354   ldrb  r0,[spc_pc],#1
3355   ldrb  r12,[spc_pc],#1
3356   orr   r0,r0,r12,lsl #8
3357   add   r0,r0,spc_x
3358   bl    S9xAPUGetByte
3359   ldr   spc_ram,[context,#iapu_ram]
3360   and   r1,spc_ya,#0xff00
3361   and   spc_ya,spc_ya,#0xff
3362   movs  r12,spc_p,lsr #1
3363   sbcs  r2,spc_ya,r0
3364   orrge spc_p,spc_p,#flag_c
3365   biclt spc_p,spc_p,#flag_c
3366   eor   r12,spc_ya,r2
3367   eor   r3,spc_ya,r0
3368   and   r12,r12,r3
3369   tst   r12,#0x80
3370   orrne spc_p,spc_p,#flag_o
3371   biceq spc_p,spc_p,#flag_o
3372   eor   r12,r3,r2
3373   tst   r12,#0x10
3374   orreq spc_p,spc_p,#flag_h
3375   bicne spc_p,spc_p,#flag_h
3376   mov   spc_ya,r2
3377   and   spc_p,spc_p,#0xff
3378   orr   spc_p,spc_p,spc_ya,lsl #24
3379   and   spc_ya,spc_ya,#0xff
3380   orr   spc_ya,spc_ya,r1
3381   subs   cycles,cycles,#105
3382   ldrgeb opcode,[spc_pc],#1
3383   ldrge  pc,[opcodes,opcode,lsl #2]
3384   b      spc700End
3385
3386
3387 ApuB6:
3388   ldrb  r0,[spc_pc],#1
3389   ldrb  r12,[spc_pc],#1
3390   orr   r0,r0,r12,lsl #8
3391   add   r0,r0,spc_ya,lsr #8
3392   bl    S9xAPUGetByte
3393   ldr   spc_ram,[context,#iapu_ram]
3394   and   r1,spc_ya,#0xff00
3395   and   spc_ya,spc_ya,#0xff
3396   movs  r12,spc_p,lsr #1
3397   sbcs  r2,spc_ya,r0
3398   orrge spc_p,spc_p,#flag_c
3399   biclt spc_p,spc_p,#flag_c
3400   eor   r12,spc_ya,r2
3401   eor   r3,spc_ya,r0
3402   and   r12,r12,r3
3403   tst   r12,#0x80
3404   orrne spc_p,spc_p,#flag_o
3405   biceq spc_p,spc_p,#flag_o
3406   eor   r12,r3,r2
3407   tst   r12,#0x10
3408   orreq spc_p,spc_p,#flag_h
3409   bicne spc_p,spc_p,#flag_h
3410   mov   spc_ya,r2
3411   and   spc_p,spc_p,#0xff
3412   orr   spc_p,spc_p,spc_ya,lsl #24
3413   and   spc_ya,spc_ya,#0xff
3414   orr   spc_ya,spc_ya,r1
3415   subs   cycles,cycles,#105
3416   ldrgeb opcode,[spc_pc],#1
3417   ldrge  pc,[opcodes,opcode,lsl #2]
3418   b      spc700End
3419
3420
3421 ApuB7:
3422   ldrb  r0,[spc_pc],#1
3423   ldr   r12,[context,#iapu_directpage]
3424   ldrb  r0,[r12,r0]!
3425   ldrb  r12,[r12,#1]
3426   orr   r0,r0,r12,lsl #8
3427   add   r0,r0,spc_ya,lsr #8
3428   bl    S9xAPUGetByte
3429   ldr   spc_ram,[context,#iapu_ram]
3430   and   r1,spc_ya,#0xff00
3431   and   spc_ya,spc_ya,#0xff
3432   movs  r12,spc_p,lsr #1
3433   sbcs  r2,spc_ya,r0
3434   orrge spc_p,spc_p,#flag_c
3435   biclt spc_p,spc_p,#flag_c
3436   eor   r12,spc_ya,r2
3437   eor   r3,spc_ya,r0
3438   and   r12,r12,r3
3439   tst   r12,#0x80
3440   orrne spc_p,spc_p,#flag_o
3441   biceq spc_p,spc_p,#flag_o
3442   eor   r12,r3,r2
3443   tst   r12,#0x10
3444   orreq spc_p,spc_p,#flag_h
3445   bicne spc_p,spc_p,#flag_h
3446   mov   spc_ya,r2
3447   and   spc_p,spc_p,#0xff
3448   orr   spc_p,spc_p,spc_ya,lsl #24
3449   and   spc_ya,spc_ya,#0xff
3450   orr   spc_ya,spc_ya,r1
3451   subs   cycles,cycles,#126
3452   ldrgeb opcode,[spc_pc],#1
3453   ldrge  pc,[opcodes,opcode,lsl #2]
3454   b      spc700End
3455
3456
3457 ApuB8:
3458   ldrb  r0,[spc_pc,#1]
3459   bl    S9xAPUGetByteZ
3460   ldrb  r1,[spc_pc],#2
3461   movs  r12,spc_p,lsr #1
3462   sbcs  r2,r0,r1
3463   orrge spc_p,spc_p,#flag_c
3464   biclt spc_p,spc_p,#flag_c
3465   eor   r12,r0,r2
3466   eor   r3,r0,r1
3467   and   r12,r12,r3
3468   tst   r12,#0x80
3469   orrne spc_p,spc_p,#flag_o
3470   biceq spc_p,spc_p,#flag_o
3471   eor   r12,r3,r2
3472   tst   r12,#0x10
3473   orreq spc_p,spc_p,#flag_h
3474   bicne spc_p,spc_p,#flag_h
3475   mov   r0,r2
3476   and   spc_p,spc_p,#0xff
3477   orr   spc_p,spc_p,r0,lsl #24
3478   ldrb  r1,[spc_pc,#-1]
3479   bl    S9xAPUSetByteZ
3480   ldr   spc_ram,[context,#iapu_ram]
3481   subs   cycles,cycles,#105
3482   ldrgeb opcode,[spc_pc],#1
3483   ldrge  pc,[opcodes,opcode,lsl #2]
3484   b      spc700End
3485
3486
3487 ApuB9:
3488   mov   r0,spc_x
3489   bl    S9xAPUGetByteZ
3490   stmfd sp!,{r0}
3491   mov   r0,spc_ya,lsr #8
3492   bl    S9xAPUGetByteZ
3493   ldmfd sp!,{r1}
3494   movs  r12,spc_p,lsr #1
3495   sbcs  r2,r0,r1
3496   orrge spc_p,spc_p,#flag_c
3497   biclt spc_p,spc_p,#flag_c
3498   eor   r12,r0,r2
3499   eor   r3,r0,r1
3500   and   r12,r12,r3
3501   tst   r12,#0x80
3502   orrne spc_p,spc_p,#flag_o
3503   biceq spc_p,spc_p,#flag_o
3504   eor   r12,r3,r2
3505   tst   r12,#0x10
3506   orreq spc_p,spc_p,#flag_h
3507   bicne spc_p,spc_p,#flag_h
3508   mov   r0,r2
3509   and   spc_p,spc_p,#0xff
3510   orr   spc_p,spc_p,r0,lsl #24
3511   mov   r1,spc_x
3512   bl    S9xAPUSetByteZ
3513   ldr   spc_ram,[context,#iapu_ram]
3514   subs   cycles,cycles,#105
3515   ldrgeb opcode,[spc_pc],#1
3516   ldrge  pc,[opcodes,opcode,lsl #2]
3517   b      spc700End
3518
3519
3520 ApuBA:
3521   ldrb  r0,[spc_pc]
3522   bl    S9xAPUGetByteZ
3523   mov   spc_ya,r0
3524   ldrb  r0,[spc_pc],#1
3525   add   r0,r0,#1
3526   bl    S9xAPUGetByteZ
3527   ldr   spc_ram,[context,#iapu_ram]
3528   orr   spc_ya,spc_ya,r0,lsl #8
3529   and   spc_p,spc_p,#0xff
3530   orr   spc_p,spc_p,spc_ya,lsl #16
3531   tst   spc_ya,#0xff
3532   orrne spc_p,spc_p,#0x01000000
3533   subs   cycles,cycles,#105
3534   ldrgeb opcode,[spc_pc],#1
3535   ldrge  pc,[opcodes,opcode,lsl #2]
3536   b      spc700End
3537
3538
3539 ApuBB:
3540   ldrb  r0,[spc_pc]
3541   add   r0,r0,spc_x
3542   bl    S9xAPUGetByteZ
3543   add   r0,r0,#1
3544   and   spc_p,spc_p,#0xff
3545   orr   spc_p,spc_p,r0,lsl #24
3546   ldrb  r1,[spc_pc],#1
3547   add   r1,r1,spc_x
3548   bl    S9xAPUSetByteZ
3549   ldr   spc_ram,[context,#iapu_ram]
3550   subs   cycles,cycles,#105
3551   ldrgeb opcode,[spc_pc],#1
3552   ldrge  pc,[opcodes,opcode,lsl #2]
3553   b      spc700End
3554
3555
3556 ApuBC:
3557   and   r0,spc_ya,#0xff
3558   add   r0,r0,#1
3559   and   spc_p,spc_p,#0xff
3560   orr   spc_p,spc_p,r0,lsl #24
3561   and   r0,r0,#0xff
3562   mov   spc_ya,spc_ya,lsr #8
3563   orr   spc_ya,r0,spc_ya,lsl #8
3564   subs   cycles,cycles,#42
3565   ldrgeb opcode,[spc_pc],#1
3566   ldrge  pc,[opcodes,opcode,lsl #2]
3567   b      spc700End
3568
3569
3570 ApuBD:
3571   mov   spc_s,spc_x
3572   subs   cycles,cycles,#42
3573   ldrgeb opcode,[spc_pc],#1
3574   ldrge  pc,[opcodes,opcode,lsl #2]
3575   b      spc700End
3576
3577
3578 ApuBE:
3579   and   r0,spc_ya,#0xff
3580   and   r1,spc_ya,#0x0f
3581   cmp   r1,#9
3582   subhi r0,r0,#6
3583   tstls spc_p,#flag_h
3584   subeq r0,r0,#6
3585   cmp   r0,#0x9f
3586   bhi   ApuBE_tens
3587   tst   spc_p,#flag_c
3588   beq   ApuBE_tens
3589   orr   spc_p,spc_p,#flag_c
3590   b     ApuBE_end
3591 ApuBE_tens:
3592   sub   r0,r0,#0x60
3593   bic   spc_p,spc_p,#flag_c
3594 ApuBE_end:
3595   and   spc_ya,spc_ya,#0xff00
3596   orr   spc_ya,spc_ya,r0
3597   and   spc_p,spc_p,#0xff
3598   orr   spc_p,spc_p,spc_ya,lsl #24
3599   subs   cycles,cycles,#63
3600   ldrgeb opcode,[spc_pc],#1
3601   ldrge  pc,[opcodes,opcode,lsl #2]
3602   b      spc700End
3603
3604
3605 ApuBF:
3606   mov   r0,spc_x
3607   bl    S9xAPUGetByteZ
3608   ldr   spc_ram,[context,#iapu_ram]
3609   and   spc_ya,spc_ya,#0xff00
3610   orr   spc_ya,spc_ya,r0
3611   add   spc_x,spc_x,#1
3612   and   spc_x,spc_x,#0xff
3613   and   spc_p,spc_p,#0xff
3614   orr   spc_p,spc_p,spc_ya,lsl #24
3615   subs   cycles,cycles,#84
3616   ldrgeb opcode,[spc_pc],#1
3617   ldrge  pc,[opcodes,opcode,lsl #2]
3618   b      spc700End
3619
3620
3621 ApuC0:
3622   bic   spc_p,spc_p,#flag_i
3623   subs   cycles,cycles,#63
3624   ldrgeb opcode,[spc_pc],#1
3625   ldrge  pc,[opcodes,opcode,lsl #2]
3626   b      spc700End
3627
3628
3629 ApuC1:
3630   sub   r0,spc_pc,spc_ram
3631   add   r1,spc_ram,spc_s
3632   strb  r0,[r1,#0xff]
3633   mov   r0,r0,lsr #8
3634   strb  r0,[r1,#0x100]
3635   sub   spc_s,spc_s,#2
3636   ldr   r0,[context,#iapu_extraram]
3637   ldrh  r0,[r0,#0x6]
3638   add   spc_pc,spc_ram,r0
3639   subs   cycles,cycles,#168
3640   ldrgeb opcode,[spc_pc],#1
3641   ldrge  pc,[opcodes,opcode,lsl #2]
3642   b      spc700End
3643
3644
3645 ApuC2:
3646   ldrb  r0,[spc_pc]
3647   bl    S9xAPUGetByteZ
3648   orr   r0,r0,#0x40
3649   ldrb  r1,[spc_pc],#1
3650   bl    S9xAPUSetByteZ
3651   ldr   spc_ram,[context,#iapu_ram]
3652   subs   cycles,cycles,#84
3653   ldrgeb opcode,[spc_pc],#1
3654   ldrge  pc,[opcodes,opcode,lsl #2]
3655   b      spc700End
3656
3657
3658 ApuC3:
3659   ldrb  r0,[spc_pc],#1
3660   bl    S9xAPUGetByteZ
3661   ldr   spc_ram,[context,#iapu_ram]
3662   tst   r0,#0x40
3663   addeq spc_pc,spc_pc,#1
3664   ldrnesb r0,[spc_pc],#1
3665   addne spc_pc,spc_pc,r0
3666   subne cycles,cycles,#42
3667   subs   cycles,cycles,#105
3668   ldrgeb opcode,[spc_pc],#1
3669   ldrge  pc,[opcodes,opcode,lsl #2]
3670   b      spc700End
3671
3672
3673 ApuC4:
3674   ldrb  r1,[spc_pc],#1
3675   mov   r0,spc_ya
3676   bl    S9xAPUSetByteZ
3677   ldr   spc_ram,[context,#iapu_ram]
3678   subs   cycles,cycles,#84
3679   ldrgeb opcode,[spc_pc],#1
3680   ldrge  pc,[opcodes,opcode,lsl #2]
3681   b      spc700End
3682
3683
3684 ApuC5:
3685   ldrb  r1,[spc_pc],#1
3686   ldrb  r12,[spc_pc],#1
3687   orr   r1,r1,r12,lsl #8
3688   mov   r0,spc_ya
3689   bl    S9xAPUSetByte
3690   ldr   spc_ram,[context,#iapu_ram]
3691   subs   cycles,cycles,#105
3692   ldrgeb opcode,[spc_pc],#1
3693   ldrge  pc,[opcodes,opcode,lsl #2]
3694   b      spc700End
3695
3696
3697 ApuC6:
3698   mov   r0,spc_ya
3699   mov   r1,spc_x
3700   bl    S9xAPUSetByteZ
3701   ldr   spc_ram,[context,#iapu_ram]
3702   subs   cycles,cycles,#84
3703   ldrgeb opcode,[spc_pc],#1
3704   ldrge  pc,[opcodes,opcode,lsl #2]
3705   b      spc700End
3706
3707
3708 ApuC7:
3709   ldrb  r1,[spc_pc],#1
3710   add   r1,r1,spc_x
3711   and   r1,r1,#0xff
3712   ldr   r12,[context,#iapu_directpage]
3713   ldrb  r1,[r12,r1]!
3714   ldrb  r12,[r12,#1]
3715   orr   r1,r1,r12,lsl #8
3716   mov   r0,spc_ya
3717   bl    S9xAPUSetByte
3718   ldr   spc_ram,[context,#iapu_ram]
3719   subs   cycles,cycles,#147
3720   ldrgeb opcode,[spc_pc],#1
3721   ldrge  pc,[opcodes,opcode,lsl #2]
3722   b      spc700End
3723
3724
3725 ApuC8:
3726   ldrb  r0,[spc_pc],#1
3727   subs  r12,spc_x,r0
3728   orrge spc_p,spc_p,#flag_c
3729   biclt spc_p,spc_p,#flag_c
3730   and   spc_p,spc_p,#0xff
3731   orr   spc_p,spc_p,r12,lsl #24
3732   subs   cycles,cycles,#42
3733   ldrgeb opcode,[spc_pc],#1
3734   ldrge  pc,[opcodes,opcode,lsl #2]
3735   b      spc700End
3736
3737
3738 ApuC9:
3739   ldrb  r1,[spc_pc],#1
3740   ldrb  r12,[spc_pc],#1
3741   orr   r1,r1,r12,lsl #8
3742   mov   r0,spc_x
3743   bl    S9xAPUSetByte
3744   ldr   spc_ram,[context,#iapu_ram]
3745   subs   cycles,cycles,#105
3746   ldrgeb opcode,[spc_pc],#1
3747   ldrge  pc,[opcodes,opcode,lsl #2]
3748   b      spc700End
3749
3750
3751 ApuCA:
3752   ldrb  r0,[spc_pc],#1
3753   ldrb  r1,[spc_pc],#1
3754   add   r0,r0,r1,lsl #8
3755   mov   r1,r1,lsr #5
3756   mov   r0,r0,lsl #19
3757   mov   r0,r0,lsr #19
3758   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
3759   stmfd sp!,{r0}
3760   bl    S9xAPUGetByte
3761   mov   r1,spc_x,lsr #29
3762   and   spc_x,spc_x,#0xff
3763   mov   r2,#1
3764   mov   r2,r2,lsl r1
3765   tst   spc_p,#flag_c
3766   orrne r0,r0,r2
3767   biceq r0,r0,r2
3768   ldmfd sp!,{r1}
3769   bl    S9xAPUSetByte
3770   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
3771   subs   cycles,cycles,#126
3772   ldrgeb opcode,[spc_pc],#1
3773   ldrge  pc,[opcodes,opcode,lsl #2]
3774   b      spc700End
3775
3776
3777 ApuCB:
3778   ldrb  r1,[spc_pc],#1
3779   mov   r0,spc_ya,lsr #8
3780   bl    S9xAPUSetByteZ
3781   ldr   spc_ram,[context,#iapu_ram]
3782   subs   cycles,cycles,#84
3783   ldrgeb opcode,[spc_pc],#1
3784   ldrge  pc,[opcodes,opcode,lsl #2]
3785   b      spc700End
3786
3787
3788 ApuCC:
3789   ldrb  r1,[spc_pc],#1
3790   ldrb  r12,[spc_pc],#1
3791   orr   r1,r1,r12,lsl #8
3792   mov   r0,spc_ya,lsr #8
3793   bl    S9xAPUSetByte
3794   ldr   spc_ram,[context,#iapu_ram]
3795   subs   cycles,cycles,#105
3796   ldrgeb opcode,[spc_pc],#1
3797   ldrge  pc,[opcodes,opcode,lsl #2]
3798   b      spc700End
3799
3800
3801 ApuCD:
3802   ldrb  spc_x,[spc_pc],#1
3803   and   spc_p,spc_p,#0xff
3804   orr   spc_p,spc_p,spc_x,lsl #24
3805   subs   cycles,cycles,#42
3806   ldrgeb opcode,[spc_pc],#1
3807   ldrge  pc,[opcodes,opcode,lsl #2]
3808   b      spc700End
3809
3810
3811 ApuCE:
3812   add   spc_s,spc_s,#1
3813   add   spc_x,spc_ram,spc_s
3814   ldrb  spc_x,[spc_x,#0x100]
3815   subs   cycles,cycles,#84
3816   ldrgeb opcode,[spc_pc],#1
3817   ldrge  pc,[opcodes,opcode,lsl #2]
3818   b      spc700End
3819
3820
3821 ApuCF:
3822   mov   r0,spc_ya,lsr #8
3823   and   spc_ya,spc_ya,#0xff
3824   mul   spc_ya,r0,spc_ya
3825   and   spc_p,spc_p,#0xff
3826   orr   spc_p,spc_p,spc_ya,lsl #16
3827   tst   spc_ya,#0xff
3828   orrne spc_p,spc_p,#0x01000000
3829   subs   cycles,cycles,#189
3830   ldrgeb opcode,[spc_pc],#1
3831   ldrge  pc,[opcodes,opcode,lsl #2]
3832   b      spc700End
3833
3834
3835 ApuD0:
3836   tst   spc_p,#0xFF000000
3837   addeq spc_pc,spc_pc,#1
3838   ldrnesb r0,[spc_pc],#1
3839   addne spc_pc,spc_pc,r0
3840   subne cycles,cycles,#42
3841   subs   cycles,cycles,#42
3842   ldrgeb opcode,[spc_pc],#1
3843   ldrge  pc,[opcodes,opcode,lsl #2]
3844   b      spc700End
3845
3846
3847 ApuD1:
3848   sub   r0,spc_pc,spc_ram
3849   add   r1,spc_ram,spc_s
3850   strb  r0,[r1,#0xff]
3851   mov   r0,r0,lsr #8
3852   strb  r0,[r1,#0x100]
3853   sub   spc_s,spc_s,#2
3854   ldr   r0,[context,#iapu_extraram]
3855   ldrh  r0,[r0,#0x4]
3856   add   spc_pc,spc_ram,r0
3857   subs   cycles,cycles,#168
3858   ldrgeb opcode,[spc_pc],#1
3859   ldrge  pc,[opcodes,opcode,lsl #2]
3860   b      spc700End
3861
3862
3863 ApuD2:
3864   ldrb  r0,[spc_pc]
3865   bl    S9xAPUGetByteZ
3866   bic   r0,r0,#0x40
3867   ldrb  r1,[spc_pc],#1
3868   bl    S9xAPUSetByteZ
3869   ldr   spc_ram,[context,#iapu_ram]
3870   subs   cycles,cycles,#84
3871   ldrgeb opcode,[spc_pc],#1
3872   ldrge  pc,[opcodes,opcode,lsl #2]
3873   b      spc700End
3874
3875
3876 ApuD3:
3877   ldrb  r0,[spc_pc],#1
3878   bl    S9xAPUGetByteZ
3879   ldr   spc_ram,[context,#iapu_ram]
3880   tst   r0,#0x40
3881   addne spc_pc,spc_pc,#1
3882   ldreqsb r0,[spc_pc],#1
3883   addeq spc_pc,spc_pc,r0
3884   subeq cycles,cycles,#42
3885   subs   cycles,cycles,#105
3886   ldrgeb opcode,[spc_pc],#1
3887   ldrge  pc,[opcodes,opcode,lsl #2]
3888   b      spc700End
3889
3890
3891 ApuD4:
3892   mov   r0,spc_ya
3893   ldrb  r1,[spc_pc],#1
3894   add   r1,r1,spc_x
3895   bl    S9xAPUSetByteZ
3896   ldr   spc_ram,[context,#iapu_ram]
3897   subs   cycles,cycles,#105
3898   ldrgeb opcode,[spc_pc],#1
3899   ldrge  pc,[opcodes,opcode,lsl #2]
3900   b      spc700End
3901
3902
3903 ApuD5:
3904   ldrb  r1,[spc_pc],#1
3905   ldrb  r12,[spc_pc],#1
3906   orr   r1,r1,r12,lsl #8
3907   add   r1,r1,spc_x
3908   mov   r0,spc_ya
3909   bl    S9xAPUSetByte
3910   ldr   spc_ram,[context,#iapu_ram]
3911   subs   cycles,cycles,#126
3912   ldrgeb opcode,[spc_pc],#1
3913   ldrge  pc,[opcodes,opcode,lsl #2]
3914   b      spc700End
3915
3916
3917 ApuD6:
3918   ldrb  r1,[spc_pc],#1
3919   ldrb  r12,[spc_pc],#1
3920   orr   r1,r1,r12,lsl #8
3921   add   r1,r1,spc_ya,lsr #8
3922   mov   r0,spc_ya
3923   bl    S9xAPUSetByte
3924   ldr   spc_ram,[context,#iapu_ram]
3925   subs   cycles,cycles,#126
3926   ldrgeb opcode,[spc_pc],#1
3927   ldrge  pc,[opcodes,opcode,lsl #2]
3928   b      spc700End
3929
3930
3931 ApuD7:
3932   ldrb  r1,[spc_pc],#1
3933   ldr   r12,[context,#iapu_directpage]
3934   ldrb  r1,[r12,r1]!
3935   ldrb  r12,[r12,#1]
3936   orr   r1,r1,r12,lsl #8
3937   add   r1,r1,spc_ya,lsr #8
3938   mov   r0,spc_ya
3939   bl    S9xAPUSetByte
3940   ldr   spc_ram,[context,#iapu_ram]
3941   subs   cycles,cycles,#147
3942   ldrgeb opcode,[spc_pc],#1
3943   ldrge  pc,[opcodes,opcode,lsl #2]
3944   b      spc700End
3945
3946
3947 ApuD8:
3948   ldrb  r1,[spc_pc],#1
3949   mov   r0,spc_x
3950   bl    S9xAPUSetByteZ
3951   ldr   spc_ram,[context,#iapu_ram]
3952   subs   cycles,cycles,#84
3953   ldrgeb opcode,[spc_pc],#1
3954   ldrge  pc,[opcodes,opcode,lsl #2]
3955   b      spc700End
3956
3957
3958 ApuD9:
3959   ldrb  r1,[spc_pc],#1
3960   add   r1,r1,spc_ya,lsr #8
3961   mov   r0,spc_x
3962   bl    S9xAPUSetByteZ
3963   ldr   spc_ram,[context,#iapu_ram]
3964   subs   cycles,cycles,#105
3965   ldrgeb opcode,[spc_pc],#1
3966   ldrge  pc,[opcodes,opcode,lsl #2]
3967   b      spc700End
3968
3969
3970 ApuDA:
3971   ldrb  r1,[spc_pc]
3972   mov   r0,spc_ya
3973   bl    S9xAPUSetByteZ
3974   ldrb  r1,[spc_pc],#1
3975   add   r1,r1,#1
3976   mov   r0,spc_ya,lsr #8
3977   bl    S9xAPUSetByteZ
3978   ldr   spc_ram,[context,#iapu_ram]
3979   subs   cycles,cycles,#84
3980   ldrgeb opcode,[spc_pc],#1
3981   ldrge  pc,[opcodes,opcode,lsl #2]
3982   b      spc700End
3983
3984
3985 ApuDB:
3986   ldrb  r1,[spc_pc],#1
3987   add   r1,r1,spc_x
3988   mov   r0,spc_ya,lsr #8
3989   bl    S9xAPUSetByteZ
3990   ldr   spc_ram,[context,#iapu_ram]
3991   subs   cycles,cycles,#105
3992   ldrgeb opcode,[spc_pc],#1
3993   ldrge  pc,[opcodes,opcode,lsl #2]
3994   b      spc700End
3995
3996
3997 ApuDC:
3998   mov   r0,spc_ya,lsr #8
3999   sub   r0,r0,#1
4000   and   r0,r0,#0xff
4001   and   spc_p,spc_p,#0xff
4002   orr   spc_p,spc_p,r0,lsl #24
4003   and   spc_ya,spc_ya,#0xff
4004   orr   spc_ya,spc_ya,r0,lsl #8
4005   subs   cycles,cycles,#42
4006   ldrgeb opcode,[spc_pc],#1
4007   ldrge  pc,[opcodes,opcode,lsl #2]
4008   b      spc700End
4009
4010
4011 ApuDD:
4012   and   spc_ya,spc_ya,#0xff00
4013   orr   spc_ya,spc_ya,spc_ya,lsr #8
4014   and   spc_p,spc_p,#0xff
4015   orr   spc_p,spc_p,spc_ya,lsl #24
4016   subs   cycles,cycles,#42
4017   ldrgeb opcode,[spc_pc],#1
4018   ldrge  pc,[opcodes,opcode,lsl #2]
4019   b      spc700End
4020
4021
4022 ApuDE:
4023   ldrb  r0,[spc_pc],#1
4024   add   r0,r0,spc_x
4025   bl    S9xAPUGetByteZ
4026   ldr   spc_ram,[context,#iapu_ram]
4027   and   r1,spc_ya,#0xff
4028   cmp   r0,r1
4029   addeq spc_pc,spc_pc,#1
4030   ldrnesb r0,[spc_pc],#1
4031   addne spc_pc,spc_pc,r0
4032   subne cycles,cycles,#42
4033   subs   cycles,cycles,#126
4034   ldrgeb opcode,[spc_pc],#1
4035   ldrge  pc,[opcodes,opcode,lsl #2]
4036   b      spc700End
4037
4038
4039 ApuDF:
4040   and   r0,spc_ya,#0xff
4041   and   r1,spc_ya,#0x0f
4042   cmp   r1,#9
4043   addhi r0,r0,#6
4044   bls   ApuDF_testHc
4045   cmphi r0,#0xf0
4046   orrhi spc_p,spc_p,#flag_c
4047   b     ApuDF_test2
4048 ApuDF_testHc:
4049   tst   spc_p,#flag_h
4050   addne r0,r0,#6
4051   beq   ApuDF_test2
4052   cmp   r0,#0xf0
4053   orrhi spc_p,spc_p,#flag_c
4054 ApuDF_test2:
4055   tst   spc_p,#flag_c
4056   addne r0,r0,#0x60
4057   bne   ApuDF_end
4058   cmp   r0,#0x9f
4059   addhi r0,r0,#0x60
4060   orrhi spc_p,spc_p,#flag_c
4061   bicls spc_p,spc_p,#flag_c
4062 ApuDF_end:
4063   and   spc_ya,spc_ya,#0xff00
4064   orr   spc_ya,spc_ya,r0
4065   and   spc_p,spc_p,#0xff
4066   orr   spc_p,spc_p,spc_ya,lsl #24
4067   subs   cycles,cycles,#63
4068   ldrgeb opcode,[spc_pc],#1
4069   ldrge  pc,[opcodes,opcode,lsl #2]
4070   b      spc700End
4071
4072
4073 ApuE0:
4074   bic   spc_p,spc_p,#(flag_o|flag_h)
4075   subs   cycles,cycles,#42
4076   ldrgeb opcode,[spc_pc],#1
4077   ldrge  pc,[opcodes,opcode,lsl #2]
4078   b      spc700End
4079
4080
4081 ApuE1:
4082   sub   r0,spc_pc,spc_ram
4083   add   r1,spc_ram,spc_s
4084   strb  r0,[r1,#0xff]
4085   mov   r0,r0,lsr #8
4086   strb  r0,[r1,#0x100]
4087   sub   spc_s,spc_s,#2
4088   ldr   r0,[context,#iapu_extraram]
4089   ldrh  r0,[r0,#0x2]
4090   add   spc_pc,spc_ram,r0
4091   subs   cycles,cycles,#168
4092   ldrgeb opcode,[spc_pc],#1
4093   ldrge  pc,[opcodes,opcode,lsl #2]
4094   b      spc700End
4095
4096
4097 ApuE2:
4098   ldrb  r0,[spc_pc]
4099   bl    S9xAPUGetByteZ
4100   orr   r0,r0,#0x80
4101   ldrb  r1,[spc_pc],#1
4102   bl    S9xAPUSetByteZ
4103   ldr   spc_ram,[context,#iapu_ram]
4104   subs   cycles,cycles,#84
4105   ldrgeb opcode,[spc_pc],#1
4106   ldrge  pc,[opcodes,opcode,lsl #2]
4107   b      spc700End
4108
4109
4110 ApuE3:
4111   ldrb  r0,[spc_pc],#1
4112   bl    S9xAPUGetByteZ
4113   ldr   spc_ram,[context,#iapu_ram]
4114   tst   r0,#0x80
4115   addeq spc_pc,spc_pc,#1
4116   ldrnesb r0,[spc_pc],#1
4117   addne spc_pc,spc_pc,r0
4118   subne cycles,cycles,#42
4119   subs   cycles,cycles,#105
4120   ldrgeb opcode,[spc_pc],#1
4121   ldrge  pc,[opcodes,opcode,lsl #2]
4122   b      spc700End
4123
4124
4125 ApuE4:
4126   ldrb  r0,[spc_pc],#1
4127   bl    S9xAPUGetByteZ
4128   ldr   spc_ram,[context,#iapu_ram]
4129   and   spc_ya,spc_ya,#0xff00
4130   orr   spc_ya,spc_ya,r0
4131   and   spc_p,spc_p,#0xff
4132   orr   spc_p,spc_p,spc_ya,lsl #24
4133   subs   cycles,cycles,#63
4134   ldrgeb opcode,[spc_pc],#1
4135   ldrge  pc,[opcodes,opcode,lsl #2]
4136   b      spc700End
4137
4138
4139 ApuE5:
4140   ldrb  r0,[spc_pc],#1
4141   ldrb  r12,[spc_pc],#1
4142   orr   r0,r0,r12,lsl #8
4143   bl    S9xAPUGetByte
4144   ldr   spc_ram,[context,#iapu_ram]
4145   and   spc_ya,spc_ya,#0xff00
4146   orr   spc_ya,spc_ya,r0
4147   and   spc_p,spc_p,#0xff
4148   orr   spc_p,spc_p,spc_ya,lsl #24
4149   subs   cycles,cycles,#84
4150   ldrgeb opcode,[spc_pc],#1
4151   ldrge  pc,[opcodes,opcode,lsl #2]
4152   b      spc700End
4153
4154
4155 ApuE6:
4156   mov   r0,spc_x
4157   bl    S9xAPUGetByteZ
4158   ldr   spc_ram,[context,#iapu_ram]
4159   and   spc_ya,spc_ya,#0xff00
4160   orr   spc_ya,spc_ya,r0
4161   and   spc_p,spc_p,#0xff
4162   orr   spc_p,spc_p,spc_ya,lsl #24
4163   subs   cycles,cycles,#63
4164   ldrgeb opcode,[spc_pc],#1
4165   ldrge  pc,[opcodes,opcode,lsl #2]
4166   b      spc700End
4167
4168
4169 ApuE7:
4170   ldrb  r0,[spc_pc],#1
4171   add   r0,r0,spc_x
4172   and   r0,r0,#0xff
4173   ldr   r12,[context,#iapu_directpage]
4174   ldrb  r0,[r12,r0]!
4175   ldrb  r12,[r12,#1]
4176   orr   r0,r0,r12,lsl #8
4177   bl    S9xAPUGetByte
4178   ldr   spc_ram,[context,#iapu_ram]
4179   and   spc_ya,spc_ya,#0xff00
4180   orr   spc_ya,spc_ya,r0
4181   and   spc_p,spc_p,#0xff
4182   orr   spc_p,spc_p,spc_ya,lsl #24
4183   subs   cycles,cycles,#126
4184   ldrgeb opcode,[spc_pc],#1
4185   ldrge  pc,[opcodes,opcode,lsl #2]
4186   b      spc700End
4187
4188
4189 ApuE8:
4190   ldrb  r0,[spc_pc],#1
4191   and   spc_ya,spc_ya,#0xff00
4192   orr   spc_ya,spc_ya,r0
4193   and   spc_p,spc_p,#0xff
4194   orr   spc_p,spc_p,spc_ya,lsl #24
4195   subs   cycles,cycles,#42
4196   ldrgeb opcode,[spc_pc],#1
4197   ldrge  pc,[opcodes,opcode,lsl #2]
4198   b      spc700End
4199
4200
4201 ApuE9:
4202   ldrb  r0,[spc_pc],#1
4203   ldrb  r12,[spc_pc],#1
4204   orr   r0,r0,r12,lsl #8
4205   bl    S9xAPUGetByte
4206   ldr   spc_ram,[context,#iapu_ram]
4207   mov   spc_x,r0
4208   and   spc_p,spc_p,#0xff
4209   orr   spc_p,spc_p,spc_x,lsl #24
4210   subs   cycles,cycles,#84
4211   ldrgeb opcode,[spc_pc],#1
4212   ldrge  pc,[opcodes,opcode,lsl #2]
4213   b      spc700End
4214
4215
4216 ApuEA:
4217   ldrb  r0,[spc_pc],#1
4218   ldrb  r1,[spc_pc],#1
4219   add   r0,r0,r1,lsl #8
4220   mov   r1,r1,lsr #5
4221   mov   r0,r0,lsl #19
4222   mov   r0,r0,lsr #19
4223   orr   spc_x,spc_x,r1,lsl #29 @ store membit where it can survive memhandler call
4224   stmfd sp!,{r0}
4225   bl    S9xAPUGetByte
4226   mov   r1,spc_x,lsr #29
4227   and   spc_x,spc_x,#0xff
4228   mov   r2,#1
4229   mov   r2,r2,lsl r1
4230   eor   r0,r0,r2
4231   ldmfd sp!,{r1}
4232   bl    S9xAPUSetByte
4233   ldr   spc_ram,[context,#iapu_ram] @ restore what memhandler(s) messed up
4234   subs   cycles,cycles,#105
4235   ldrgeb opcode,[spc_pc],#1
4236   ldrge  pc,[opcodes,opcode,lsl #2]
4237   b      spc700End
4238
4239
4240 ApuEB:
4241   ldrb  r0,[spc_pc],#1
4242   bl    S9xAPUGetByteZ
4243   ldr   spc_ram,[context,#iapu_ram]
4244   and   spc_ya,spc_ya,#0xff
4245   orr   spc_ya,spc_ya,r0,lsl #8
4246   and   spc_p,spc_p,#0xff
4247   orr   spc_p,spc_p,r0,lsl #24
4248   subs   cycles,cycles,#63
4249   ldrgeb opcode,[spc_pc],#1
4250   ldrge  pc,[opcodes,opcode,lsl #2]
4251   b      spc700End
4252
4253
4254 ApuEC:
4255   ldrb  r0,[spc_pc],#1
4256   ldrb  r12,[spc_pc],#1
4257   orr   r0,r0,r12,lsl #8
4258   bl    S9xAPUGetByte
4259   ldr   spc_ram,[context,#iapu_ram]
4260   and   spc_ya,spc_ya,#0xff
4261   orr   spc_ya,spc_ya,r0,lsl #8
4262   and   spc_p,spc_p,#0xff
4263   orr   spc_p,spc_p,r0,lsl #24
4264   subs   cycles,cycles,#84
4265   ldrgeb opcode,[spc_pc],#1
4266   ldrge  pc,[opcodes,opcode,lsl #2]
4267   b      spc700End
4268
4269
4270 ApuED:
4271   eor   spc_p,spc_p,#flag_c
4272   subs   cycles,cycles,#63
4273   ldrgeb opcode,[spc_pc],#1
4274   ldrge  pc,[opcodes,opcode,lsl #2]
4275   b      spc700End
4276
4277
4278 ApuEE:
4279   add   spc_s,spc_s,#1
4280   add   r0,spc_ram,spc_s
4281   ldrb  r0,[r0,#0x100]
4282   and   spc_ya,spc_ya,#0xff
4283   orr   spc_ya,spc_ya,r0,lsl #8
4284   subs   cycles,cycles,#84
4285   ldrgeb opcode,[spc_pc],#1
4286   ldrge  pc,[opcodes,opcode,lsl #2]
4287   b      spc700End
4288
4289
4290 ApuEF:
4291   ldr   r0,=CPU
4292   mov   r1,#0
4293   strb  r1,[r0,#122]
4294   subs   cycles,cycles,#63
4295   ldrgeb opcode,[spc_pc],#1
4296   ldrge  pc,[opcodes,opcode,lsl #2]
4297   b      spc700End
4298
4299
4300 ApuF0:
4301   tst   spc_p,#0xFF000000
4302   addne spc_pc,spc_pc,#1
4303   ldreqsb r0,[spc_pc],#1
4304   addeq spc_pc,spc_pc,r0
4305   subeq cycles,cycles,#42
4306   subs   cycles,cycles,#42
4307   ldrgeb opcode,[spc_pc],#1
4308   ldrge  pc,[opcodes,opcode,lsl #2]
4309   b      spc700End
4310
4311
4312 ApuF1:
4313   sub   r0,spc_pc,spc_ram
4314   add   r1,spc_ram,spc_s
4315   strb  r0,[r1,#0xff]
4316   mov   r0,r0,lsr #8
4317   strb  r0,[r1,#0x100]
4318   sub   spc_s,spc_s,#2
4319   ldr   r0,[context,#iapu_extraram]
4320   ldrh  r0,[r0,#0x0]
4321   add   spc_pc,spc_ram,r0
4322   subs   cycles,cycles,#168
4323   ldrgeb opcode,[spc_pc],#1
4324   ldrge  pc,[opcodes,opcode,lsl #2]
4325   b      spc700End
4326
4327
4328 ApuF2:
4329   ldrb  r0,[spc_pc]
4330   bl    S9xAPUGetByteZ
4331   bic   r0,r0,#0x80
4332   ldrb  r1,[spc_pc],#1
4333   bl    S9xAPUSetByteZ
4334   ldr   spc_ram,[context,#iapu_ram]
4335   subs   cycles,cycles,#84
4336   ldrgeb opcode,[spc_pc],#1
4337   ldrge  pc,[opcodes,opcode,lsl #2]
4338   b      spc700End
4339
4340
4341 ApuF3:
4342   ldrb  r0,[spc_pc],#1
4343   bl    S9xAPUGetByteZ
4344   ldr   spc_ram,[context,#iapu_ram]
4345   tst   r0,#0x80
4346   addne spc_pc,spc_pc,#1
4347   ldreqsb r0,[spc_pc],#1
4348   addeq spc_pc,spc_pc,r0
4349   subeq cycles,cycles,#42
4350   subs   cycles,cycles,#105
4351   ldrgeb opcode,[spc_pc],#1
4352   ldrge  pc,[opcodes,opcode,lsl #2]
4353   b      spc700End
4354
4355
4356 ApuF4:
4357   ldrb  r0,[spc_pc],#1
4358   add   r0,r0,spc_x
4359   bl    S9xAPUGetByteZ
4360   ldr   spc_ram,[context,#iapu_ram]
4361   and   spc_ya,spc_ya,#0xff00
4362   orr   spc_ya,spc_ya,r0
4363   and   spc_p,spc_p,#0xff
4364   orr   spc_p,spc_p,spc_ya,lsl #24
4365   subs   cycles,cycles,#84
4366   ldrgeb opcode,[spc_pc],#1
4367   ldrge  pc,[opcodes,opcode,lsl #2]
4368   b      spc700End
4369
4370
4371 ApuF5:
4372   ldrb  r0,[spc_pc],#1
4373   ldrb  r12,[spc_pc],#1
4374   orr   r0,r0,r12,lsl #8
4375   add   r0,r0,spc_x
4376   bl    S9xAPUGetByte
4377   ldr   spc_ram,[context,#iapu_ram]
4378   and   spc_ya,spc_ya,#0xff00
4379   orr   spc_ya,spc_ya,r0
4380   and   spc_p,spc_p,#0xff
4381   orr   spc_p,spc_p,spc_ya,lsl #24
4382   subs   cycles,cycles,#105
4383   ldrgeb opcode,[spc_pc],#1
4384   ldrge  pc,[opcodes,opcode,lsl #2]
4385   b      spc700End
4386
4387
4388 ApuF6:
4389   ldrb  r0,[spc_pc],#1
4390   ldrb  r12,[spc_pc],#1
4391   orr   r0,r0,r12,lsl #8
4392   add   r0,r0,spc_ya,lsr #8
4393   bl    S9xAPUGetByte
4394   ldr   spc_ram,[context,#iapu_ram]
4395   and   spc_ya,spc_ya,#0xff00
4396   orr   spc_ya,spc_ya,r0
4397   and   spc_p,spc_p,#0xff
4398   orr   spc_p,spc_p,spc_ya,lsl #24
4399   subs   cycles,cycles,#105
4400   ldrgeb opcode,[spc_pc],#1
4401   ldrge  pc,[opcodes,opcode,lsl #2]
4402   b      spc700End
4403
4404
4405 ApuF7:
4406   ldrb  r0,[spc_pc],#1
4407   ldr   r12,[context,#iapu_directpage]
4408   ldrb  r0,[r12,r0]!
4409   ldrb  r12,[r12,#1]
4410   orr   r0,r0,r12,lsl #8
4411   add   r0,r0,spc_ya,lsr #8
4412   bl    S9xAPUGetByte
4413   ldr   spc_ram,[context,#iapu_ram]
4414   and   spc_ya,spc_ya,#0xff00
4415   orr   spc_ya,spc_ya,r0
4416   and   spc_p,spc_p,#0xff
4417   orr   spc_p,spc_p,spc_ya,lsl #24
4418   subs   cycles,cycles,#126
4419   ldrgeb opcode,[spc_pc],#1
4420   ldrge  pc,[opcodes,opcode,lsl #2]
4421   b      spc700End
4422
4423
4424 ApuF8:
4425   ldrb  r0,[spc_pc],#1
4426   bl    S9xAPUGetByteZ
4427   ldr   spc_ram,[context,#iapu_ram]
4428   mov   spc_x,r0
4429   and   spc_p,spc_p,#0xff
4430   orr   spc_p,spc_p,spc_x,lsl #24
4431   subs   cycles,cycles,#63
4432   ldrgeb opcode,[spc_pc],#1
4433   ldrge  pc,[opcodes,opcode,lsl #2]
4434   b      spc700End
4435
4436
4437 ApuF9:
4438   ldrb  r0,[spc_pc],#1
4439   add   r0,r0,spc_ya,lsr #8
4440   bl    S9xAPUGetByteZ
4441   ldr   spc_ram,[context,#iapu_ram]
4442   mov   spc_x,r0
4443   and   spc_p,spc_p,#0xff
4444   orr   spc_p,spc_p,spc_x,lsl #24
4445   subs   cycles,cycles,#84
4446   ldrgeb opcode,[spc_pc],#1
4447   ldrge  pc,[opcodes,opcode,lsl #2]
4448   b      spc700End
4449
4450
4451 ApuFA:
4452   ldrb  r0,[spc_pc],#1
4453   bl    S9xAPUGetByteZ
4454   ldrb  r1,[spc_pc],#1
4455   bl    S9xAPUSetByteZ
4456   ldr   spc_ram,[context,#iapu_ram]
4457   subs   cycles,cycles,#105
4458   ldrgeb opcode,[spc_pc],#1
4459   ldrge  pc,[opcodes,opcode,lsl #2]
4460   b      spc700End
4461
4462
4463 ApuFB:
4464   ldrb  r0,[spc_pc],#1
4465   add   r0,r0,spc_x
4466   bl    S9xAPUGetByteZ
4467   ldr   spc_ram,[context,#iapu_ram]
4468   and   spc_ya,spc_ya,#0xff
4469   orr   spc_ya,spc_ya,r0,lsl #8
4470   and   spc_p,spc_p,#0xff
4471   orr   spc_p,spc_p,r0,lsl #24
4472   subs   cycles,cycles,#84
4473   ldrgeb opcode,[spc_pc],#1
4474   ldrge  pc,[opcodes,opcode,lsl #2]
4475   b      spc700End
4476
4477
4478 ApuFC:
4479   mov   r0,spc_ya,lsr #8
4480   add   r0,r0,#1
4481   and   r0,r0,#0xff
4482   and   spc_p,spc_p,#0xff
4483   orr   spc_p,spc_p,r0,lsl #24
4484   and   spc_ya,spc_ya,#0xff
4485   orr   spc_ya,spc_ya,r0,lsl #8
4486   subs   cycles,cycles,#42
4487   ldrgeb opcode,[spc_pc],#1
4488   ldrge  pc,[opcodes,opcode,lsl #2]
4489   b      spc700End
4490
4491
4492 ApuFD:
4493   and   spc_ya,spc_ya,#0xff
4494   orr   spc_ya,spc_ya,spc_ya,lsl #8
4495   and   spc_p,spc_p,#0xff
4496   orr   spc_p,spc_p,spc_ya,lsl #24
4497   subs   cycles,cycles,#42
4498   ldrgeb opcode,[spc_pc],#1
4499   ldrge  pc,[opcodes,opcode,lsl #2]
4500   b      spc700End
4501
4502
4503 ApuFE:
4504   sub   spc_ya,spc_ya,#0x100
4505   mov   spc_ya,spc_ya,lsl #16
4506   mov   spc_ya,spc_ya,lsr #16
4507   movs  r0,spc_ya,lsr #8
4508   addeq spc_pc,spc_pc,#1
4509   ldrnesb r0,[spc_pc],#1
4510   addne spc_pc,spc_pc,r0
4511   subne cycles,cycles,#42
4512   subs   cycles,cycles,#84
4513   ldrgeb opcode,[spc_pc],#1
4514   ldrge  pc,[opcodes,opcode,lsl #2]
4515   b      spc700End
4516
4517
4518 ApuFF:
4519   ldr   r0,=CPU
4520   mov   r1,#0
4521   strb  r1,[r0,#122]
4522   subs   cycles,cycles,#63
4523   ldrgeb opcode,[spc_pc],#1
4524   ldrge  pc,[opcodes,opcode,lsl #2]
4525   b      spc700End
4526
4527
4528 @ -------------------------- Jump Table --------------------------
4529 Spc700JumpTab:
4530   .long Apu00, Apu01, Apu02, Apu03, Apu04, Apu05, Apu06, Apu07 @ 00
4531   .long Apu08, Apu09, Apu0A, Apu0B, Apu0C, Apu0D, Apu0E, Apu0F @ 08
4532   .long Apu10, Apu11, Apu12, Apu13, Apu14, Apu15, Apu16, Apu17 @ 10
4533   .long Apu18, Apu19, Apu1A, Apu1B, Apu1C, Apu1D, Apu1E, Apu1F @ 18
4534   .long Apu20, Apu21, Apu22, Apu23, Apu24, Apu25, Apu26, Apu27 @ 20
4535   .long Apu28, Apu29, Apu2A, Apu2B, Apu2C, Apu2D, Apu2E, Apu2F @ 28
4536   .long Apu30, Apu31, Apu32, Apu33, Apu34, Apu35, Apu36, Apu37 @ 30
4537   .long Apu38, Apu39, Apu3A, Apu3B, Apu3C, Apu3D, Apu3E, Apu3F @ 38
4538   .long Apu40, Apu41, Apu42, Apu43, Apu44, Apu45, Apu46, Apu47 @ 40
4539   .long Apu48, Apu49, Apu4A, Apu4B, Apu4C, Apu4D, Apu4E, Apu4F @ 48
4540   .long Apu50, Apu51, Apu52, Apu53, Apu54, Apu55, Apu56, Apu57 @ 50
4541   .long Apu58, Apu59, Apu5A, Apu5B, Apu5C, Apu5D, Apu5E, Apu5F @ 58
4542   .long Apu60, Apu61, Apu62, Apu63, Apu64, Apu65, Apu66, Apu67 @ 60
4543   .long Apu68, Apu69, Apu6A, Apu6B, Apu6C, Apu6D, Apu6E, Apu6F @ 68
4544   .long Apu70, Apu71, Apu72, Apu73, Apu74, Apu75, Apu76, Apu77 @ 70
4545   .long Apu78, Apu79, Apu7A, Apu7B, Apu7C, Apu7D, Apu7E, Apu7F @ 78
4546   .long Apu80, Apu81, Apu82, Apu83, Apu84, Apu85, Apu86, Apu87 @ 80
4547   .long Apu88, Apu89, Apu8A, Apu8B, Apu8C, Apu8D, Apu8E, Apu8F @ 88
4548   .long Apu90, Apu91, Apu92, Apu93, Apu94, Apu95, Apu96, Apu97 @ 90
4549   .long Apu98, Apu99, Apu9A, Apu9B, Apu9C, Apu9D, Apu9E, Apu9F @ 98
4550   .long ApuA0, ApuA1, ApuA2, ApuA3, ApuA4, ApuA5, ApuA6, ApuA7 @ a0
4551   .long ApuA8, ApuA9, ApuAA, ApuAB, ApuAC, ApuAD, ApuAE, ApuAF @ a8
4552   .long ApuB0, ApuB1, ApuB2, ApuB3, ApuB4, ApuB5, ApuB6, ApuB7 @ b0
4553   .long ApuB8, ApuB9, ApuBA, ApuBB, ApuBC, ApuBD, ApuBE, ApuBF @ b8
4554   .long ApuC0, ApuC1, ApuC2, ApuC3, ApuC4, ApuC5, ApuC6, ApuC7 @ c0
4555   .long ApuC8, ApuC9, ApuCA, ApuCB, ApuCC, ApuCD, ApuCE, ApuCF @ c8
4556   .long ApuD0, ApuD1, ApuD2, ApuD3, ApuD4, ApuD5, ApuD6, ApuD7 @ d0
4557   .long ApuD8, ApuD9, ApuDA, ApuDB, ApuDC, ApuDD, ApuDE, ApuDF @ d8
4558   .long ApuE0, ApuE1, ApuE2, ApuE3, ApuE4, ApuE5, ApuE6, ApuE7 @ e0
4559   .long ApuE8, ApuE9, ApuEA, ApuEB, ApuEC, ApuED, ApuEE, ApuEF @ e8
4560   .long ApuF0, ApuF1, ApuF2, ApuF3, ApuF4, ApuF5, ApuF6, ApuF7 @ f0
4561   .long ApuF8, ApuF9, ApuFA, ApuFB, ApuFC, ApuFD, ApuFE, ApuFF @ f8