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