fix compiler warning
[drnoksnes] / dr65c816.s
1
2
3         .data
4         
5         
6 ;@ MASK_EMUL    MASK_MEM        MASK_INDEX              Jump Table
7 ;@ TRUE                 ?                       ?                               jumptable1              Mode 0 : M=1,X=1
8 ;@ FALSE                TRUE            TRUE                    jumptable1              Mode 0 : M=1,X=1
9 ;@ FALSE                TRUE            FALSE                   jumptable2              Mode 1 : M=1,X=0
10 ;@ FALSE                FALSE           TRUE                    jumptable4              Mode 3 : M=0,X=1
11 ;@ FALSE                FALSE           FALSE                   jumptable3              Mode 2 : M=0,X=0
12
13 opcodetable_lookup_addr opcodetable_lookup
14 opcodetable_lookup: 
15         .word jumptable3 ;@ 000
16         .word jumptable4 ;@ 001
17         .word jumptable2 ;@ 010
18         .word jumptable1 ;@ 011
19         .word jumptable1 ;@ 100
20         .word jumptable1 ;@ 101
21         .word jumptable1 ;@ 110
22         .word jumptable1 ;@ 111
23         
24 get_opcode_table:
25         ldr r0,opcodetable_lookup_addr
26         and r1,reg_f,MASK_EMUL  MASK_MEM        MASK_INDEX
27         ldr opcodes,[r0,r1,lsl#2]
28         mov pc,lr
29
30         
31         reg_a                           .req r5
32         reg_d_bank                      .req r5
33         reg_d                           .req r5
34         reg_p_bank                              .req r5
35         reg_x                           .req r5
36         reg_sp                          .req r5
37         reg_y                           .req r5
38         reg_f                           .req r5
39         reg_pc                          .req r5
40         cycles                          .req r5
41         cpu_context                     .req r5
42         opcodes                         .req r5
43
44         .equ BRKtriggered
45         .equ pc_base
46
47 .equ STATUS_SHIFTER,            24
48 .equ MASK_EMUL,                         (1<<(STATUS_SHIFTER-1))
49 .equ MASK_SHIFTER_CARRY,        (STATUS_SHIFTER+1)
50 .equ    MASK_CARRY,                     (1<<(STATUS_SHIFTER))  @ 0
51 .equ    MASK_ZERO,                      (2<<(STATUS_SHIFTER))  @ 1
52 .equ MASK_IRQ,                          (4<<(STATUS_SHIFTER))  @ 2
53 .equ MASK_DECIMAL,                      (8<<(STATUS_SHIFTER))  @ 3
54 .equ    MASK_INDEX,                     (16<<(STATUS_SHIFTER)) @ 4  @ 1
55 .equ    MASK_MEM,                       (32<<(STATUS_SHIFTER)) @ 5  @ 2
56 .equ    MASK_OVERFLOW,          (64<<(STATUS_SHIFTER)) @ 6  @ 4
57 .equ    MASK_NEG,                       (128<<(STATUS_SHIFTER))@ 7  @ 8
58
59 .macro prepare_c_call
60         stmfd sp!,{r12}
61 .endm
62
63 .macro restore_c_call
64         ldmfd sp!,{r12}
65 .endm
66
67 ;@push16 - saves a 16bit value onto stack
68 ;@ r0 = address 0x0000HHLL
69 ;@ r1 = data    0x0000HHLL
70 .macro push16
71         prepare_c_call
72         mov lr,pc
73         ldr pc,[cpu_context,#writemem16]  ;@ r0 = address  r1=data
74         restore_c_call
75 .endm
76
77 ;@push16 - saves a 8bit value onto stack
78 ;@ r0 = address 0x0000HHLL
79 ;@ r1 = data    0x0000HHLL
80 .macro push8
81         prepare_c_call
82         mov lr,pc
83         ldr pc,[cpu_context,#writemem8]  ;@ r0 = address  r1=data
84         restore_c_call
85 .endm
86
87 .macro mov_reg_sp_to_r0
88         mov r0,reg_sp
89 .endm
90
91 .macro push16_s24 reg
92         mov_reg_sp_to_r0
93         mov r1,\reg>>24
94         push16
95 .endm
96
97 .macro push16_s16 reg
98         mov_reg_sp_to_r0
99         mov r1,\reg>>16
100         push16
101 .endm
102
103 .macro push16_s8 reg
104         mov_reg_sp_to_r0
105         mov r1,\reg>>8
106         push16
107 .endm
108
109 .macro push16_s0 reg
110         mov_reg_sp_to_r0
111         mov r1,\reg>
112         push16
113 .endm
114
115 .macro push8_s24 reg
116         mov_reg_sp_to_r0
117         mov r1,\reg>>24
118         push8
119 .endm
120
121 .macro push8_s16 reg
122         mov_reg_sp_to_r0
123         mov r1,\reg>>16
124         push8
125 .endm
126
127 .macro push8_s8 reg
128         mov_reg_sp_to_r0
129         mov r1,\reg>>8
130         push8
131 .endm
132
133 .macro push8_s0 reg
134         mov_reg_sp_to_r0
135         mov r1,\reg>
136         push8
137 .endm
138
139 .macro pushPC
140         ldr r1,[cpu_context,#pc_base]
141         sub r1,reg_pc,r1
142         push16_s0
143 .endm
144
145 .macro getSnesFlags reg
146         sub \reg,[cpu_context,#snes_flag_lookup]
147         ldr \reg,[\reg,reg_f>>24]
148 .endm
149
150
151 .macro setIRQ
152         ;@ IRQ flag has ben raised
153 .endm
154
155 ;@ re-calculates reg_pc and pc_base
156 ;@ in: r0=new snes pc
157 ;@ out: r0=new arm pc
158 .macro setPCbase
159         prepare_c_call
160         mov lr,pc
161         ldr pc,[cpu_context,#rebase_pc]
162         restore_c_call
163         mov reg_pc,r0
164 .endm
165
166 .macro fetch cyc
167         subs cycles,cycles,#\cyc
168         ldrplb r0,[reg_pc],#1
169         ldrpl pc,[opcodes,r0, lsl #2]
170         bmi cpu_execute_end
171 .endm
172
173
174 cpu_execute:
175         ;@ load cpu context
176         ;@ check interupts
177         ;@ run opcodes
178
179 cpu_execute_end
180         ;@ cycle count has expired
181         ;@    This means that 
182         ;@              All cpu cycles requested have been used
183         ;@              NMI interupt has occurred
184         ;@                      IRQ interupt has occurred
185         ;@    Check which counter has expired
186         ;@      if normal cycle count then exit cpu emulation
187         ;@         this will only occur while NMI and IRQ ints are NOT pending
188         ;@      if NMI cycle count then raise NMI interrupt
189         ;@         then continue cpu emulation using IRQ cycle count (if any) otherwise use remaining cycle count
190         ;@         which would already be adjusted to remove NMI cycles used.
191         ;@         count between normal cycles and IRQ cycles.
192         ;@      if IRQ cycle count then raise IRQ interrupt.
193         ;@      
194         ;@ save cpu context
195         ;@ exit
196         
197
198         
199
200 jumptable1:             .long   Op00mod1
201                         .long   Op01M1mod1
202                         .long   Op02mod1
203                         .long   Op03M1mod1
204                         .long   Op04M1mod1
205                         .long   Op05M1mod1
206                         .long   Op06M1mod1
207                         .long   Op07M1mod1
208                         .long   Op08mod1
209                         .long   Op09M1mod1
210                         .long   Op0AM1mod1
211                         .long   Op0Bmod1
212                         .long   Op0CM1mod1
213                         .long   Op0DM1mod1
214                         .long   Op0EM1mod1
215                         .long   Op0FM1mod1
216                         .long   Op10mod1
217                         .long   Op11M1mod1
218                         .long   Op12M1mod1
219                         .long   Op13M1mod1
220                         .long   Op14M1mod1
221                         .long   Op15M1mod1
222                         .long   Op16M1mod1
223                         .long   Op17M1mod1
224                         .long   Op18mod1
225                         .long   Op19M1mod1
226                         .long   Op1AM1mod1
227                         .long   Op1Bmod1
228                         .long   Op1CM1mod1
229                         .long   Op1DM1mod1
230                         .long   Op1EM1mod1
231                         .long   Op1FM1mod1
232                         .long   Op20mod1
233                         .long   Op21M1mod1
234                         .long   Op22mod1
235                         .long   Op23M1mod1
236                         .long   Op24M1mod1
237                         .long   Op25M1mod1
238                         .long   Op26M1mod1
239                         .long   Op27M1mod1
240                         .long   Op28mod1
241                         .long   Op29M1mod1
242                         .long   Op2AM1mod1
243                         .long   Op2Bmod1
244                         .long   Op2CM1mod1
245                         .long   Op2DM1mod1
246                         .long   Op2EM1mod1
247                         .long   Op2FM1mod1
248                         .long   Op30mod1
249                         .long   Op31M1mod1
250                         .long   Op32M1mod1
251                         .long   Op33M1mod1
252                         .long   Op34M1mod1
253                         .long   Op35M1mod1
254                         .long   Op36M1mod1
255                         .long   Op37M1mod1
256                         .long   Op38mod1
257                         .long   Op39M1mod1
258                         .long   Op3AM1mod1
259                         .long   Op3Bmod1
260                         .long   Op3CM1mod1
261                         .long   Op3DM1mod1
262                         .long   Op3EM1mod1
263                         .long   Op3FM1mod1
264                         .long   Op40mod1
265                         .long   Op41M1mod1
266                         .long   Op42mod1
267                         .long   Op43M1mod1
268                         .long   Op44X1mod1
269                         .long   Op45M1mod1
270                         .long   Op46M1mod1
271                         .long   Op47M1mod1
272                         .long   Op48M1mod1
273                         .long   Op49M1mod1
274                         .long   Op4AM1mod1
275                         .long   Op4Bmod1
276                         .long   Op4Cmod1
277                         .long   Op4DM1mod1
278                         .long   Op4EM1mod1
279                         .long   Op4FM1mod1
280                         .long   Op50mod1
281                         .long   Op51M1mod1
282                         .long   Op52M1mod1
283                         .long   Op53M1mod1
284                         .long   Op54X1mod1
285                         .long   Op55M1mod1
286                         .long   Op56M1mod1
287                         .long   Op57M1mod1
288                         .long   Op58mod1
289                         .long   Op59M1mod1
290                         .long   Op5AX1mod1
291                         .long   Op5Bmod1
292                         .long   Op5Cmod1
293                         .long   Op5DM1mod1
294                         .long   Op5EM1mod1
295                         .long   Op5FM1mod1
296                         .long   Op60mod1
297                         .long   Op61M1mod1
298                         .long   Op62mod1
299                         .long   Op63M1mod1
300                         .long   Op64M1mod1
301                         .long   Op65M1mod1
302                         .long   Op66M1mod1
303                         .long   Op67M1mod1
304                         .long   Op68M1mod1
305                         .long   Op69M1mod1
306                         .long   Op6AM1mod1
307                         .long   Op6Bmod1
308                         .long   Op6Cmod1
309                         .long   Op6DM1mod1
310                         .long   Op6EM1mod1
311                         .long   Op6FM1mod1
312                         .long   Op70mod1
313                         .long   Op71M1mod1
314                         .long   Op72M1mod1
315                         .long   Op73M1mod1
316                         .long   Op74M1mod1
317                         .long   Op75M1mod1
318                         .long   Op76M1mod1
319                         .long   Op77M1mod1
320                         .long   Op78mod1
321                         .long   Op79M1mod1
322                         .long   Op7AX1mod1
323                         .long   Op7Bmod1
324                         .long   Op7Cmod1
325                         .long   Op7DM1mod1
326                         .long   Op7EM1mod1
327                         .long   Op7FM1mod1
328                         .long   Op80mod1
329                         .long   Op81M1mod1
330                         .long   Op82mod1
331                         .long   Op83M1mod1
332                         .long   Op84X1mod1
333                         .long   Op85M1mod1
334                         .long   Op86X1mod1
335                         .long   Op87M1mod1
336                         .long   Op88X1mod1
337                         .long   Op89M1mod1
338                         .long   Op8AM1mod1
339                         .long   Op8Bmod1
340                         .long   Op8CX1mod1
341                         .long   Op8DM1mod1
342                         .long   Op8EX1mod1
343                         .long   Op8FM1mod1
344                         .long   Op90mod1
345                         .long   Op91M1mod1
346                         .long   Op92M1mod1
347                         .long   Op93M1mod1
348                         .long   Op94X1mod1
349                         .long   Op95M1mod1
350                         .long   Op96X1mod1
351                         .long   Op97M1mod1
352                         .long   Op98M1mod1
353                         .long   Op99M1mod1
354                         .long   Op9Amod1
355                         .long   Op9BX1mod1
356                         .long   Op9CM1mod1
357                         .long   Op9DM1mod1
358                         .long   Op9EM1mod1
359                         .long   Op9FM1mod1
360                         .long   OpA0X1mod1
361                         .long   OpA1M1mod1
362                         .long   OpA2X1mod1
363                         .long   OpA3M1mod1
364                         .long   OpA4X1mod1
365                         .long   OpA5M1mod1
366                         .long   OpA6X1mod1
367                         .long   OpA7M1mod1
368                         .long   OpA8X1mod1
369                         .long   OpA9M1mod1
370                         .long   OpAAX1mod1
371                         .long   OpABmod1
372                         .long   OpACX1mod1
373                         .long   OpADM1mod1
374                         .long   OpAEX1mod1
375                         .long   OpAFM1mod1
376                         .long   OpB0mod1
377                         .long   OpB1M1mod1
378                         .long   OpB2M1mod1
379                         .long   OpB3M1mod1
380                         .long   OpB4X1mod1
381                         .long   OpB5M1mod1
382                         .long   OpB6X1mod1
383                         .long   OpB7M1mod1
384                         .long   OpB8mod1
385                         .long   OpB9M1mod1
386                         .long   OpBAX1mod1
387                         .long   OpBBX1mod1
388                         .long   OpBCX1mod1
389                         .long   OpBDM1mod1
390                         .long   OpBEX1mod1
391                         .long   OpBFM1mod1
392                         .long   OpC0X1mod1
393                         .long   OpC1M1mod1
394                         .long   OpC2mod1
395                         .long   OpC3M1mod1
396                         .long   OpC4X1mod1
397                         .long   OpC5M1mod1
398                         .long   OpC6M1mod1
399                         .long   OpC7M1mod1
400                         .long   OpC8X1mod1
401                         .long   OpC9M1mod1
402                         .long   OpCAX1mod1
403                         .long   OpCBmod1
404                         .long   OpCCX1mod1
405                         .long   OpCDM1mod1
406                         .long   OpCEM1mod1
407                         .long   OpCFM1mod1
408                         .long   OpD0mod1
409                         .long   OpD1M1mod1
410                         .long   OpD2M1mod1
411                         .long   OpD3M1mod1
412                         .long   OpD4mod1
413                         .long   OpD5M1mod1
414                         .long   OpD6M1mod1
415                         .long   OpD7M1mod1
416                         .long   OpD8mod1
417                         .long   OpD9M1mod1
418                         .long   OpDAX1mod1
419                         .long   OpDBmod1
420                         .long   OpDCmod1
421                         .long   OpDDM1mod1
422                         .long   OpDEM1mod1
423                         .long   OpDFM1mod1
424                         .long   OpE0X1mod1
425                         .long   OpE1M1mod1
426                         .long   OpE2mod1
427                         .long   OpE3M1mod1
428                         .long   OpE4X1mod1
429                         .long   OpE5M1mod1
430                         .long   OpE6M1mod1
431                         .long   OpE7M1mod1
432                         .long   OpE8X1mod1
433                         .long   OpE9M1mod1
434                         .long   OpEAmod1
435                         .long   OpEBmod1
436                         .long   OpECX1mod1
437                         .long   OpEDM1mod1
438                         .long   OpEEM1mod1
439                         .long   OpEFM1mod1
440                         .long   OpF0mod1
441                         .long   OpF1M1mod1
442                         .long   OpF2M1mod1
443                         .long   OpF3M1mod1
444                         .long   OpF4mod1
445                         .long   OpF5M1mod1
446                         .long   OpF6M1mod1
447                         .long   OpF7M1mod1
448                         .long   OpF8mod1
449                         .long   OpF9M1mod1
450                         .long   OpFAX1mod1
451                         .long   OpFBmod1
452                         .long   OpFCmod1
453                         .long   OpFDM1mod1
454                         .long   OpFEM1mod1
455                         .long   OpFFM1mod1
456                         
457                         
458 jumptable2:             .long   Op00mod2
459                         .long   Op01M1mod2
460                         .long   Op02mod2
461                         .long   Op03M1mod2
462                         .long   Op04M1mod2
463                         .long   Op05M1mod2
464                         .long   Op06M1mod2
465                         .long   Op07M1mod2
466                         .long   Op08mod2
467                         .long   Op09M1mod2
468                         .long   Op0AM1mod2
469                         .long   Op0Bmod2
470                         .long   Op0CM1mod2
471                         .long   Op0DM1mod2
472                         .long   Op0EM1mod2
473                         .long   Op0FM1mod2
474                         .long   Op10mod2
475                         .long   Op11M1mod2
476                         .long   Op12M1mod2
477                         .long   Op13M1mod2
478                         .long   Op14M1mod2
479                         .long   Op15M1mod2
480                         .long   Op16M1mod2
481                         .long   Op17M1mod2
482                         .long   Op18mod2
483                         .long   Op19M1mod2
484                         .long   Op1AM1mod2
485                         .long   Op1Bmod2
486                         .long   Op1CM1mod2
487                         .long   Op1DM1mod2
488                         .long   Op1EM1mod2
489                         .long   Op1FM1mod2
490                         .long   Op20mod2
491                         .long   Op21M1mod2
492                         .long   Op22mod2
493                         .long   Op23M1mod2
494                         .long   Op24M1mod2
495                         .long   Op25M1mod2
496                         .long   Op26M1mod2
497                         .long   Op27M1mod2
498                         .long   Op28mod2
499                         .long   Op29M1mod2
500                         .long   Op2AM1mod2
501                         .long   Op2Bmod2
502                         .long   Op2CM1mod2
503                         .long   Op2DM1mod2
504                         .long   Op2EM1mod2
505                         .long   Op2FM1mod2
506                         .long   Op30mod2
507                         .long   Op31M1mod2
508                         .long   Op32M1mod2
509                         .long   Op33M1mod2
510                         .long   Op34M1mod2
511                         .long   Op35M1mod2
512                         .long   Op36M1mod2
513                         .long   Op37M1mod2
514                         .long   Op38mod2
515                         .long   Op39M1mod2
516                         .long   Op3AM1mod2
517                         .long   Op3Bmod2
518                         .long   Op3CM1mod2
519                         .long   Op3DM1mod2
520                         .long   Op3EM1mod2
521                         .long   Op3FM1mod2
522                         .long   Op40mod2
523                         .long   Op41M1mod2
524                         .long   Op42mod2
525                         .long   Op43M1mod2
526                         .long   Op44X0mod2
527                         .long   Op45M1mod2
528                         .long   Op46M1mod2
529                         .long   Op47M1mod2
530                         .long   Op48M1mod2
531                         .long   Op49M1mod2
532                         .long   Op4AM1mod2
533                         .long   Op4Bmod2
534                         .long   Op4Cmod2
535                         .long   Op4DM1mod2
536                         .long   Op4EM1mod2
537                         .long   Op4FM1mod2
538                         .long   Op50mod2
539                         .long   Op51M1mod2
540                         .long   Op52M1mod2
541                         .long   Op53M1mod2
542                         .long   Op54X0mod2
543                         .long   Op55M1mod2
544                         .long   Op56M1mod2
545                         .long   Op57M1mod2
546                         .long   Op58mod2
547                         .long   Op59M1mod2
548                         .long   Op5AX0mod2
549                         .long   Op5Bmod2
550                         .long   Op5Cmod2
551                         .long   Op5DM1mod2
552                         .long   Op5EM1mod2
553                         .long   Op5FM1mod2
554                         .long   Op60mod2
555                         .long   Op61M1mod2
556                         .long   Op62mod2
557                         .long   Op63M1mod2
558                         .long   Op64M1mod2
559                         .long   Op65M1mod2
560                         .long   Op66M1mod2
561                         .long   Op67M1mod2
562                         .long   Op68M1mod2
563                         .long   Op69M1mod2
564                         .long   Op6AM1mod2
565                         .long   Op6Bmod2
566                         .long   Op6Cmod2
567                         .long   Op6DM1mod2
568                         .long   Op6EM1mod2
569                         .long   Op6FM1mod2
570                         .long   Op70mod2
571                         .long   Op71M1mod2
572                         .long   Op72M1mod2
573                         .long   Op73M1mod2
574                         .long   Op74M1mod2
575                         .long   Op75M1mod2
576                         .long   Op76M1mod2
577                         .long   Op77M1mod2
578                         .long   Op78mod2
579                         .long   Op79M1mod2
580                         .long   Op7AX0mod2
581                         .long   Op7Bmod2
582                         .long   Op7Cmod2
583                         .long   Op7DM1mod2
584                         .long   Op7EM1mod2
585                         .long   Op7FM1mod2
586                         .long   Op80mod2
587                         .long   Op81M1mod2
588                         .long   Op82mod2
589                         .long   Op83M1mod2
590                         .long   Op84X0mod2
591                         .long   Op85M1mod2
592                         .long   Op86X0mod2
593                         .long   Op87M1mod2
594                         .long   Op88X0mod2
595                         .long   Op89M1mod2
596                         .long   Op8AM1mod2
597                         .long   Op8Bmod2
598                         .long   Op8CX0mod2
599                         .long   Op8DM1mod2
600                         .long   Op8EX0mod2
601                         .long   Op8FM1mod2
602                         .long   Op90mod2
603                         .long   Op91M1mod2
604                         .long   Op92M1mod2
605                         .long   Op93M1mod2
606                         .long   Op94X0mod2
607                         .long   Op95M1mod2
608                         .long   Op96X0mod2
609                         .long   Op97M1mod2
610                         .long   Op98M1mod2
611                         .long   Op99M1mod2
612                         .long   Op9Amod2
613                         .long   Op9BX0mod2
614                         .long   Op9CM1mod2
615                         .long   Op9DM1mod2
616                         .long   Op9EM1mod2
617                         .long   Op9FM1mod2
618                         .long   OpA0X0mod2
619                         .long   OpA1M1mod2
620                         .long   OpA2X0mod2
621                         .long   OpA3M1mod2
622                         .long   OpA4X0mod2
623                         .long   OpA5M1mod2
624                         .long   OpA6X0mod2
625                         .long   OpA7M1mod2
626                         .long   OpA8X0mod2
627                         .long   OpA9M1mod2
628                         .long   OpAAX0mod2
629                         .long   OpABmod2
630                         .long   OpACX0mod2
631                         .long   OpADM1mod2
632                         .long   OpAEX0mod2
633                         .long   OpAFM1mod2
634                         .long   OpB0mod2
635                         .long   OpB1M1mod2
636                         .long   OpB2M1mod2
637                         .long   OpB3M1mod2
638                         .long   OpB4X0mod2
639                         .long   OpB5M1mod2
640                         .long   OpB6X0mod2
641                         .long   OpB7M1mod2
642                         .long   OpB8mod2
643                         .long   OpB9M1mod2
644                         .long   OpBAX0mod2
645                         .long   OpBBX0mod2
646                         .long   OpBCX0mod2
647                         .long   OpBDM1mod2
648                         .long   OpBEX0mod2
649                         .long   OpBFM1mod2
650                         .long   OpC0X0mod2
651                         .long   OpC1M1mod2
652                         .long   OpC2mod2
653                         .long   OpC3M1mod2
654                         .long   OpC4X0mod2
655                         .long   OpC5M1mod2
656                         .long   OpC6M1mod2
657                         .long   OpC7M1mod2
658                         .long   OpC8X0mod2
659                         .long   OpC9M1mod2
660                         .long   OpCAX0mod2
661                         .long   OpCBmod2
662                         .long   OpCCX0mod2
663                         .long   OpCDM1mod2
664                         .long   OpCEM1mod2
665                         .long   OpCFM1mod2
666                         .long   OpD0mod2
667                         .long   OpD1M1mod2
668                         .long   OpD2M1mod2
669                         .long   OpD3M1mod2
670                         .long   OpD4mod2
671                         .long   OpD5M1mod2
672                         .long   OpD6M1mod2
673                         .long   OpD7M1mod2
674                         .long   OpD8mod2
675                         .long   OpD9M1mod2
676                         .long   OpDAX0mod2
677                         .long   OpDBmod2
678                         .long   OpDCmod2
679                         .long   OpDDM1mod2
680                         .long   OpDEM1mod2
681                         .long   OpDFM1mod2
682                         .long   OpE0X0mod2
683                         .long   OpE1M1mod2
684                         .long   OpE2mod2
685                         .long   OpE3M1mod2
686                         .long   OpE4X0mod2
687                         .long   OpE5M1mod2
688                         .long   OpE6M1mod2
689                         .long   OpE7M1mod2
690                         .long   OpE8X0mod2
691                         .long   OpE9M1mod2
692                         .long   OpEAmod2
693                         .long   OpEBmod2
694                         .long   OpECX0mod2
695                         .long   OpEDM1mod2
696                         .long   OpEEM1mod2
697                         .long   OpEFM1mod2
698                         .long   OpF0mod2
699                         .long   OpF1M1mod2
700                         .long   OpF2M1mod2
701                         .long   OpF3M1mod2
702                         .long   OpF4mod2
703                         .long   OpF5M1mod2
704                         .long   OpF6M1mod2
705                         .long   OpF7M1mod2
706                         .long   OpF8mod2
707                         .long   OpF9M1mod2
708                         .long   OpFAX0mod2
709                         .long   OpFBmod2
710                         .long   OpFCmod2
711                         .long   OpFDM1mod2
712                         .long   OpFEM1mod2
713                         .long   OpFFM1mod2
714                         
715 jumptable3:             .long   Op00mod3
716                         .long   Op01M0mod3
717                         .long   Op02mod3
718                         .long   Op03M0mod3
719                         .long   Op04M0mod3
720                         .long   Op05M0mod3
721                         .long   Op06M0mod3
722                         .long   Op07M0mod3
723                         .long   Op08mod3
724                         .long   Op09M0mod3
725                         .long   Op0AM0mod3
726                         .long   Op0Bmod3
727                         .long   Op0CM0mod3
728                         .long   Op0DM0mod3
729                         .long   Op0EM0mod3
730                         .long   Op0FM0mod3
731                         .long   Op10mod3
732                         .long   Op11M0mod3
733                         .long   Op12M0mod3
734                         .long   Op13M0mod3
735                         .long   Op14M0mod3
736                         .long   Op15M0mod3
737                         .long   Op16M0mod3
738                         .long   Op17M0mod3
739                         .long   Op18mod3
740                         .long   Op19M0mod3
741                         .long   Op1AM0mod3
742                         .long   Op1Bmod3
743                         .long   Op1CM0mod3
744                         .long   Op1DM0mod3
745                         .long   Op1EM0mod3
746                         .long   Op1FM0mod3
747                         .long   Op20mod3
748                         .long   Op21M0mod3
749                         .long   Op22mod3
750                         .long   Op23M0mod3
751                         .long   Op24M0mod3
752                         .long   Op25M0mod3
753                         .long   Op26M0mod3
754                         .long   Op27M0mod3
755                         .long   Op28mod3
756                         .long   Op29M0mod3
757                         .long   Op2AM0mod3
758                         .long   Op2Bmod3
759                         .long   Op2CM0mod3
760                         .long   Op2DM0mod3
761                         .long   Op2EM0mod3
762                         .long   Op2FM0mod3
763                         .long   Op30mod3
764                         .long   Op31M0mod3
765                         .long   Op32M0mod3
766                         .long   Op33M0mod3
767                         .long   Op34M0mod3
768                         .long   Op35M0mod3
769                         .long   Op36M0mod3
770                         .long   Op37M0mod3
771                         .long   Op38mod3
772                         .long   Op39M0mod3
773                         .long   Op3AM0mod3
774                         .long   Op3Bmod3
775                         .long   Op3CM0mod3
776                         .long   Op3DM0mod3
777                         .long   Op3EM0mod3
778                         .long   Op3FM0mod3
779                         .long   Op40mod3
780                         .long   Op41M0mod3
781                         .long   Op42mod3
782                         .long   Op43M0mod3
783                         .long   Op44X0mod3
784                         .long   Op45M0mod3
785                         .long   Op46M0mod3
786                         .long   Op47M0mod3
787                         .long   Op48M0mod3
788                         .long   Op49M0mod3
789                         .long   Op4AM0mod3
790                         .long   Op4Bmod3
791                         .long   Op4Cmod3
792                         .long   Op4DM0mod3
793                         .long   Op4EM0mod3
794                         .long   Op4FM0mod3
795                         .long   Op50mod3
796                         .long   Op51M0mod3
797                         .long   Op52M0mod3
798                         .long   Op53M0mod3
799                         .long   Op54X0mod3
800                         .long   Op55M0mod3
801                         .long   Op56M0mod3
802                         .long   Op57M0mod3
803                         .long   Op58mod3
804                         .long   Op59M0mod3
805                         .long   Op5AX0mod3
806                         .long   Op5Bmod3
807                         .long   Op5Cmod3
808                         .long   Op5DM0mod3
809                         .long   Op5EM0mod3
810                         .long   Op5FM0mod3
811                         .long   Op60mod3
812                         .long   Op61M0mod3
813                         .long   Op62mod3
814                         .long   Op63M0mod3
815                         .long   Op64M0mod3
816                         .long   Op65M0mod3
817                         .long   Op66M0mod3
818                         .long   Op67M0mod3
819                         .long   Op68M0mod3
820                         .long   Op69M0mod3
821                         .long   Op6AM0mod3
822                         .long   Op6Bmod3
823                         .long   Op6Cmod3
824                         .long   Op6DM0mod3
825                         .long   Op6EM0mod3
826                         .long   Op6FM0mod3
827                         .long   Op70mod3
828                         .long   Op71M0mod3
829                         .long   Op72M0mod3
830                         .long   Op73M0mod3
831                         .long   Op74M0mod3
832                         .long   Op75M0mod3
833                         .long   Op76M0mod3
834                         .long   Op77M0mod3
835                         .long   Op78mod3
836                         .long   Op79M0mod3
837                         .long   Op7AX0mod3
838                         .long   Op7Bmod3
839                         .long   Op7Cmod3
840                         .long   Op7DM0mod3
841                         .long   Op7EM0mod3
842                         .long   Op7FM0mod3
843                         .long   Op80mod3
844                         .long   Op81M0mod3
845                         .long   Op82mod3
846                         .long   Op83M0mod3
847                         .long   Op84X0mod3
848                         .long   Op85M0mod3
849                         .long   Op86X0mod3
850                         .long   Op87M0mod3
851                         .long   Op88X0mod3
852                         .long   Op89M0mod3
853                         .long   Op8AM0mod3
854                         .long   Op8Bmod3
855                         .long   Op8CX0mod3
856                         .long   Op8DM0mod3
857                         .long   Op8EX0mod3
858                         .long   Op8FM0mod3
859                         .long   Op90mod3
860                         .long   Op91M0mod3
861                         .long   Op92M0mod3
862                         .long   Op93M0mod3
863                         .long   Op94X0mod3
864                         .long   Op95M0mod3
865                         .long   Op96X0mod3
866                         .long   Op97M0mod3
867                         .long   Op98M0mod3
868                         .long   Op99M0mod3
869                         .long   Op9Amod3
870                         .long   Op9BX0mod3
871                         .long   Op9CM0mod3
872                         .long   Op9DM0mod3
873                         .long   Op9EM0mod3
874                         .long   Op9FM0mod3
875                         .long   OpA0X0mod3
876                         .long   OpA1M0mod3
877                         .long   OpA2X0mod3
878                         .long   OpA3M0mod3
879                         .long   OpA4X0mod3
880                         .long   OpA5M0mod3
881                         .long   OpA6X0mod3
882                         .long   OpA7M0mod3
883                         .long   OpA8X0mod3
884                         .long   OpA9M0mod3
885                         .long   OpAAX0mod3
886                         .long   OpABmod3
887                         .long   OpACX0mod3
888                         .long   OpADM0mod3
889                         .long   OpAEX0mod3
890                         .long   OpAFM0mod3
891                         .long   OpB0mod3
892                         .long   OpB1M0mod3
893                         .long   OpB2M0mod3
894                         .long   OpB3M0mod3
895                         .long   OpB4X0mod3
896                         .long   OpB5M0mod3
897                         .long   OpB6X0mod3
898                         .long   OpB7M0mod3
899                         .long   OpB8mod3
900                         .long   OpB9M0mod3
901                         .long   OpBAX0mod3
902                         .long   OpBBX0mod3
903                         .long   OpBCX0mod3
904                         .long   OpBDM0mod3
905                         .long   OpBEX0mod3
906                         .long   OpBFM0mod3
907                         .long   OpC0X0mod3
908                         .long   OpC1M0mod3
909                         .long   OpC2mod3
910                         .long   OpC3M0mod3
911                         .long   OpC4X0mod3
912                         .long   OpC5M0mod3
913                         .long   OpC6M0mod3
914                         .long   OpC7M0mod3
915                         .long   OpC8X0mod3
916                         .long   OpC9M0mod3
917                         .long   OpCAX0mod3
918                         .long   OpCBmod3
919                         .long   OpCCX0mod3
920                         .long   OpCDM0mod3
921                         .long   OpCEM0mod3
922                         .long   OpCFM0mod3
923                         .long   OpD0mod3
924                         .long   OpD1M0mod3
925                         .long   OpD2M0mod3
926                         .long   OpD3M0mod3
927                         .long   OpD4mod3
928                         .long   OpD5M0mod3
929                         .long   OpD6M0mod3
930                         .long   OpD7M0mod3
931                         .long   OpD8mod3
932                         .long   OpD9M0mod3
933                         .long   OpDAX0mod3
934                         .long   OpDBmod3
935                         .long   OpDCmod3
936                         .long   OpDDM0mod3
937                         .long   OpDEM0mod3
938                         .long   OpDFM0mod3
939                         .long   OpE0X0mod3
940                         .long   OpE1M0mod3
941                         .long   OpE2mod3
942                         .long   OpE3M0mod3
943                         .long   OpE4X0mod3
944                         .long   OpE5M0mod3
945                         .long   OpE6M0mod3
946                         .long   OpE7M0mod3
947                         .long   OpE8X0mod3
948                         .long   OpE9M0mod3
949                         .long   OpEAmod3
950                         .long   OpEBmod3
951                         .long   OpECX0mod3
952                         .long   OpEDM0mod3
953                         .long   OpEEM0mod3
954                         .long   OpEFM0mod3
955                         .long   OpF0mod3
956                         .long   OpF1M0mod3
957                         .long   OpF2M0mod3
958                         .long   OpF3M0mod3
959                         .long   OpF4mod3
960                         .long   OpF5M0mod3
961                         .long   OpF6M0mod3
962                         .long   OpF7M0mod3
963                         .long   OpF8mod3
964                         .long   OpF9M0mod3
965                         .long   OpFAX0mod3
966                         .long   OpFBmod3
967                         .long   OpFCmod3
968                         .long   OpFDM0mod3
969                         .long   OpFEM0mod3
970                         .long   OpFFM0mod3
971                         
972 jumptable4:             .long   Op00mod4
973                         .long   Op01M0mod4
974                         .long   Op02mod4
975                         .long   Op03M0mod4
976                         .long   Op04M0mod4
977                         .long   Op05M0mod4
978                         .long   Op06M0mod4
979                         .long   Op07M0mod4
980                         .long   Op08mod4
981                         .long   Op09M0mod4
982                         .long   Op0AM0mod4
983                         .long   Op0Bmod4
984                         .long   Op0CM0mod4
985                         .long   Op0DM0mod4
986                         .long   Op0EM0mod4
987                         .long   Op0FM0mod4
988                         .long   Op10mod4
989                         .long   Op11M0mod4
990                         .long   Op12M0mod4
991                         .long   Op13M0mod4
992                         .long   Op14M0mod4
993                         .long   Op15M0mod4
994                         .long   Op16M0mod4
995                         .long   Op17M0mod4
996                         .long   Op18mod4
997                         .long   Op19M0mod4
998                         .long   Op1AM0mod4
999                         .long   Op1Bmod4
1000                         .long   Op1CM0mod4
1001                         .long   Op1DM0mod4
1002                         .long   Op1EM0mod4
1003                         .long   Op1FM0mod4
1004                         .long   Op20mod4
1005                         .long   Op21M0mod4
1006                         .long   Op22mod4
1007                         .long   Op23M0mod4
1008                         .long   Op24M0mod4
1009                         .long   Op25M0mod4
1010                         .long   Op26M0mod4
1011                         .long   Op27M0mod4
1012                         .long   Op28mod4
1013                         .long   Op29M0mod4
1014                         .long   Op2AM0mod4
1015                         .long   Op2Bmod4
1016                         .long   Op2CM0mod4
1017                         .long   Op2DM0mod4
1018                         .long   Op2EM0mod4
1019                         .long   Op2FM0mod4
1020                         .long   Op30mod4
1021                         .long   Op31M0mod4
1022                         .long   Op32M0mod4
1023                         .long   Op33M0mod4
1024                         .long   Op34M0mod4
1025                         .long   Op35M0mod4
1026                         .long   Op36M0mod4
1027                         .long   Op37M0mod4
1028                         .long   Op38mod4
1029                         .long   Op39M0mod4
1030                         .long   Op3AM0mod4
1031                         .long   Op3Bmod4
1032                         .long   Op3CM0mod4
1033                         .long   Op3DM0mod4
1034                         .long   Op3EM0mod4
1035                         .long   Op3FM0mod4
1036                         .long   Op40mod4
1037                         .long   Op41M0mod4
1038                         .long   Op42mod4
1039                         .long   Op43M0mod4
1040                         .long   Op44X1mod4
1041                         .long   Op45M0mod4
1042                         .long   Op46M0mod4
1043                         .long   Op47M0mod4
1044                         .long   Op48M0mod4
1045                         .long   Op49M0mod4
1046                         .long   Op4AM0mod4
1047                         .long   Op4Bmod4
1048                         .long   Op4Cmod4
1049                         .long   Op4DM0mod4
1050                         .long   Op4EM0mod4
1051                         .long   Op4FM0mod4
1052                         .long   Op50mod4
1053                         .long   Op51M0mod4
1054                         .long   Op52M0mod4
1055                         .long   Op53M0mod4
1056                         .long   Op54X1mod4
1057                         .long   Op55M0mod4
1058                         .long   Op56M0mod4
1059                         .long   Op57M0mod4
1060                         .long   Op58mod4
1061                         .long   Op59M0mod4
1062                         .long   Op5AX1mod4
1063                         .long   Op5Bmod4
1064                         .long   Op5Cmod4
1065                         .long   Op5DM0mod4
1066                         .long   Op5EM0mod4
1067                         .long   Op5FM0mod4
1068                         .long   Op60mod4
1069                         .long   Op61M0mod4
1070                         .long   Op62mod4
1071                         .long   Op63M0mod4
1072                         .long   Op64M0mod4
1073                         .long   Op65M0mod4
1074                         .long   Op66M0mod4
1075                         .long   Op67M0mod4
1076                         .long   Op68M0mod4
1077                         .long   Op69M0mod4
1078                         .long   Op6AM0mod4
1079                         .long   Op6Bmod4
1080                         .long   Op6Cmod4
1081                         .long   Op6DM0mod4
1082                         .long   Op6EM0mod4
1083                         .long   Op6FM0mod4
1084                         .long   Op70mod4
1085                         .long   Op71M0mod4
1086                         .long   Op72M0mod4
1087                         .long   Op73M0mod4
1088                         .long   Op74M0mod4
1089                         .long   Op75M0mod4
1090                         .long   Op76M0mod4
1091                         .long   Op77M0mod4
1092                         .long   Op78mod4
1093                         .long   Op79M0mod4
1094                         .long   Op7AX1mod4
1095                         .long   Op7Bmod4
1096                         .long   Op7Cmod4
1097                         .long   Op7DM0mod4
1098                         .long   Op7EM0mod4
1099                         .long   Op7FM0mod4
1100                         .long   Op80mod4
1101                         .long   Op81M0mod4
1102                         .long   Op82mod4
1103                         .long   Op83M0mod4
1104                         .long   Op84X1mod4
1105                         .long   Op85M0mod4
1106                         .long   Op86X1mod4
1107                         .long   Op87M0mod4
1108                         .long   Op88X1mod4
1109                         .long   Op89M0mod4
1110                         .long   Op8AM0mod4
1111                         .long   Op8Bmod4
1112                         .long   Op8CX1mod4
1113                         .long   Op8DM0mod4
1114                         .long   Op8EX1mod4
1115                         .long   Op8FM0mod4
1116                         .long   Op90mod4
1117                         .long   Op91M0mod4
1118                         .long   Op92M0mod4
1119                         .long   Op93M0mod4
1120                         .long   Op94X1mod4
1121                         .long   Op95M0mod4
1122                         .long   Op96X1mod4
1123                         .long   Op97M0mod4
1124                         .long   Op98M0mod4
1125                         .long   Op99M0mod4
1126                         .long   Op9Amod4
1127                         .long   Op9BX1mod4
1128                         .long   Op9CM0mod4
1129                         .long   Op9DM0mod4
1130                         .long   Op9EM0mod4
1131                         .long   Op9FM0mod4
1132                         .long   OpA0X1mod4
1133                         .long   OpA1M0mod4
1134                         .long   OpA2X1mod4
1135                         .long   OpA3M0mod4
1136                         .long   OpA4X1mod4
1137                         .long   OpA5M0mod4
1138                         .long   OpA6X1mod4
1139                         .long   OpA7M0mod4
1140                         .long   OpA8X1mod4
1141                         .long   OpA9M0mod4
1142                         .long   OpAAX1mod4
1143                         .long   OpABmod4
1144                         .long   OpACX1mod4
1145                         .long   OpADM0mod4
1146                         .long   OpAEX1mod4
1147                         .long   OpAFM0mod4
1148                         .long   OpB0mod4
1149                         .long   OpB1M0mod4
1150                         .long   OpB2M0mod4
1151                         .long   OpB3M0mod4
1152                         .long   OpB4X1mod4
1153                         .long   OpB5M0mod4
1154                         .long   OpB6X1mod4
1155                         .long   OpB7M0mod4
1156                         .long   OpB8mod4
1157                         .long   OpB9M0mod4
1158                         .long   OpBAX1mod4
1159                         .long   OpBBX1mod4
1160                         .long   OpBCX1mod4
1161                         .long   OpBDM0mod4
1162                         .long   OpBEX1mod4
1163                         .long   OpBFM0mod4
1164                         .long   OpC0X1mod4
1165                         .long   OpC1M0mod4
1166                         .long   OpC2mod4
1167                         .long   OpC3M0mod4
1168                         .long   OpC4X1mod4
1169                         .long   OpC5M0mod4
1170                         .long   OpC6M0mod4
1171                         .long   OpC7M0mod4
1172                         .long   OpC8X1mod4
1173                         .long   OpC9M0mod4
1174                         .long   OpCAX1mod4
1175                         .long   OpCBmod4
1176                         .long   OpCCX1mod4
1177                         .long   OpCDM0mod4
1178                         .long   OpCEM0mod4
1179                         .long   OpCFM0mod4
1180                         .long   OpD0mod4
1181                         .long   OpD1M0mod4
1182                         .long   OpD2M0mod4
1183                         .long   OpD3M0mod4
1184                         .long   OpD4mod4
1185                         .long   OpD5M0mod4
1186                         .long   OpD6M0mod4
1187                         .long   OpD7M0mod4
1188                         .long   OpD8mod4
1189                         .long   OpD9M0mod4
1190                         .long   OpDAX1mod4
1191                         .long   OpDBmod4
1192                         .long   OpDCmod4
1193                         .long   OpDDM0mod4
1194                         .long   OpDEM0mod4
1195                         .long   OpDFM0mod4
1196                         .long   OpE0X1mod4
1197                         .long   OpE1M0mod4
1198                         .long   OpE2mod4
1199                         .long   OpE3M0mod4
1200                         .long   OpE4X1mod4
1201                         .long   OpE5M0mod4
1202                         .long   OpE6M0mod4
1203                         .long   OpE7M0mod4
1204                         .long   OpE8X1mod4
1205                         .long   OpE9M0mod4
1206                         .long   OpEAmod4
1207                         .long   OpEBmod4
1208                         .long   OpECX1mod4
1209                         .long   OpEDM0mod4
1210                         .long   OpEEM0mod4
1211                         .long   OpEFM0mod4
1212                         .long   OpF0mod4
1213                         .long   OpF1M0mod4
1214                         .long   OpF2M0mod4
1215                         .long   OpF3M0mod4
1216                         .long   OpF4mod4
1217                         .long   OpF5M0mod4
1218                         .long   OpF6M0mod4
1219                         .long   OpF7M0mod4
1220                         .long   OpF8mod4
1221                         .long   OpF9M0mod4
1222                         .long   OpFAX1mod4
1223                         .long   OpFBmod4
1224                         .long   OpFCmod4
1225                         .long   OpFDM0mod4
1226                         .long   OpFEM0mod4
1227                         .long   OpFFM0mod4
1228                         
1229
1230 ;@ ##############################################
1231 ;@ BRK 
1232 ;@ ##############################################               
1233 Op00mod1:
1234 lbl00mod1:
1235         ;@ set BRK flag
1236         ;@ Only used by SuperFX emulation
1237         mov r0,#1
1238         strb r0,[cpu_context,#BRKTriggered]
1239                 
1240         tst reg_f, #MASK_EMUL
1241         bne 1f
1242
1243         push8_s0 reg_p_bank
1244         pushPC
1245         getSnesFlags r1
1246         push8_s0        
1247         clearFlag #MASK_DECIMAL
1248         SetIRQ
1249         bic reg_p_bank, reg_p_bank, #0xFF
1250         mov r0,0xE6
1251         orr r0,r0,0xFF00
1252         readmem16_s0
1253         setPCbase
1254         use_cycles 2
1255         b 2f
1256         
1257 1:
1258         pushPC
1259         getSnesFlags r1
1260         push8_s0        
1261         clearFlag #MASK_DECIMAL
1262         SetFlag #MASK_IRQ
1263         bic reg_p_bank, reg_p_bank, #0xFF
1264         mov r0,0xFE
1265         orr r0,r0,0xFF00
1266         readmem16_s0
1267         setPCbase
1268         use_cycles 1
1269 2:
1270         
1271                         
1272                         
1273