1 /*Snem 0.1 by Tom Walker
2 65816 emulation*/
3
4 #include <stdio.h>
5 #include "snes.h"
6
7 void updatecpumode();
8 int inwai=0;
9
10 reg a,x,y,s;
11 unsigned long pbr,dbr;
12 unsigned short pc,dp;
13 int skipz,setzf;
14 int ins;
15 extern int output;
16 extern int timetolive;
17 void (*opcodes[256][5])();
18 int cpumode;
19
20 /*Current opcode*/
21 unsigned char global_opcode;
22 /*Global cycles count*/
23 int cycles;
24
25 CPU_P p;
26
27
28 /*Temporary variables*/
29 unsigned long addr;
30
31 /*Addressing modes*/
absolute()32 static inline unsigned long absolute()
33 {
34 unsigned long temp=readmemw(pbr|pc); pc+=2;
35 return temp|dbr;
36 }
37
absolutex()38 static inline unsigned long absolutex()
39 {
40 unsigned long temp=(readmemw(pbr|pc))+x.w+dbr; pc+=2;
41 return temp;
42 }
43
absolutey()44 static inline unsigned long absolutey()
45 {
46 unsigned long temp=(readmemw(pbr|pc))+y.w+dbr; pc+=2;
47 return temp;
48 }
49
absolutelong()50 static inline unsigned long absolutelong()
51 {
52 unsigned long temp=readmemw(pbr|pc); pc+=2;
53 temp|=(snes_readmem(pbr|pc)<<16); pc++;
54 return temp;
55 }
56
absolutelongx()57 static inline unsigned long absolutelongx()
58 {
59 unsigned long temp=(readmemw(pbr|pc))+x.w; pc+=2;
60 temp+=(snes_readmem(pbr|pc)<<16); pc++;
61 return temp;
62 }
63
zeropage()64 static inline unsigned long zeropage() /*It's actually direct page, but I'm used to calling it zero page*/
65 {
66 unsigned long temp=snes_readmem(pbr|pc); pc++;
67 temp+=dp;
68 if (dp&0xFF) { cycles-=6; clockspc(6); }
69 return temp&0xFFFF;
70 }
71
zeropagex()72 static inline unsigned long zeropagex()
73 {
74 unsigned long temp=snes_readmem(pbr|pc)+x.w; pc++;
75 if (p.e) temp&=0xFF;
76 temp+=dp;
77 if (dp&0xFF) { cycles-=6; clockspc(6); }
78 return temp&0xFFFF;
79 }
80
zeropagey()81 static inline unsigned long zeropagey()
82 {
83 unsigned long temp=snes_readmem(pbr|pc)+y.w; pc++;
84 if (p.e) temp&=0xFF;
85 temp+=dp;
86 if (dp&0xFF) { cycles-=6; clockspc(6); }
87 return temp&0xFFFF;
88 }
89
stack()90 static inline unsigned long stack()
91 {
92 unsigned long temp=snes_readmem(pbr|pc); pc++;
93 temp+=s.w;
94 return temp&0xFFFF;
95 }
96
indirect()97 static inline unsigned long indirect()
98 {
99 unsigned long temp=(snes_readmem(pbr|pc)+dp)&0xFFFF; pc++;
100 return (readmemw(temp))+dbr;
101 }
102
indirectx()103 static inline unsigned long indirectx()
104 {
105 unsigned long temp=(snes_readmem(pbr|pc)+dp+x.w)&0xFFFF; pc++;
106 return (readmemw(temp))+dbr;
107 }
jindirectx()108 static inline unsigned long jindirectx() /*JSR (,x) uses PBR instead of DBR, and 2 byte address insted of 1 + dp*/
109 {
110 unsigned long temp=(snes_readmem(pbr|pc)+(snes_readmem((pbr|pc)+1)<<8)+x.w)+pbr; pc+=2;
111 return temp;
112 }
113
indirecty()114 static inline unsigned long indirecty()
115 {
116 unsigned long temp=(snes_readmem(pbr|pc)+dp)&0xFFFF; pc++;
117 return (readmemw(temp))+y.w+dbr;
118 }
sindirecty()119 static inline unsigned long sindirecty()
120 {
121 unsigned long temp=(snes_readmem(pbr|pc)+s.w)&0xFFFF; pc++;
122 return (readmemw(temp))+y.w+dbr;
123 }
124
indirectl()125 static inline unsigned long indirectl()
126 {
127 unsigned long temp=(snes_readmem(pbr|pc)+dp)&0xFFFF; pc++;
128 unsigned long address=readmemw(temp)|(snes_readmem(temp+2)<<16);
129 return address;
130 }
131
indirectly()132 static inline unsigned long indirectly()
133 {
134 unsigned long temp=(snes_readmem(pbr|pc)+dp)&0xFFFF; pc++;
135 unsigned long address=(readmemw(temp)|(snes_readmem(temp+2)<<16))+y.w;
136 return address;
137 }
138
139 /*Flag setting*/
140 #define setzn8(v) p.z=!(v); p.n=(v)&0x80
141 #define setzn16(v) p.z=!(v); p.n=(v)&0x8000
142
143 /*ADC/SBC macros*/
144 #define ADC8() tempw=a.b.l+temp+((p.c)?1:0); \
145 p.v=(!((a.b.l^temp)&0x80)&&((a.b.l^tempw)&0x80)); \
146 a.b.l=tempw&0xFF; \
147 setzn8(a.b.l); \
148 p.c=tempw&0x100;
149
150 #define ADC16() templ=a.w+tempw+((p.c)?1:0); \
151 p.v=(!((a.w^tempw)&0x8000)&&((a.w^templ)&0x8000)); \
152 a.w=templ&0xFFFF; \
153 setzn16(a.w); \
154 p.c=templ&0x10000;
155
156 #define ADCBCD8() \
157 tempw=(a.b.l&0xF)+(temp&0xF)+(p.c?1:0); \
158 if (tempw>9) \
159 { \
160 tempw+=6; \
161 } \
162 tempw+=((a.b.l&0xF0)+(temp&0xF0)); \
163 if (tempw>0x9F) \
164 { \
165 tempw+=0x60; \
166 } \
167 p.v=(!((a.b.l^temp)&0x80)&&((a.b.l^tempw)&0x80)); \
168 a.b.l=tempw&0xFF; \
169 setzn8(a.b.l); \
170 p.c=tempw>0xFF; \
171 cycles-=6; clockspc(6);
172
173 #define ADCBCD16() \
174 templ=(a.w&0xF)+(tempw&0xF)+(p.c?1:0); \
175 if (templ>9) \
176 { \
177 templ+=6; \
178 } \
179 templ+=((a.w&0xF0)+(tempw&0xF0)); \
180 if (templ>0x9F) \
181 { \
182 templ+=0x60; \
183 } \
184 templ+=((a.w&0xF00)+(tempw&0xF00)); \
185 if (templ>0x9FF) \
186 { \
187 templ+=0x600; \
188 } \
189 templ+=((a.w&0xF000)+(tempw&0xF000)); \
190 if (templ>0x9FFF) \
191 { \
192 templ+=0x6000; \
193 } \
194 p.v=(!((a.w^tempw)&0x8000)&&((a.w^templ)&0x8000)); \
195 a.w=templ&0xFFFF; \
196 setzn16(a.w); \
197 p.c=templ>0xFFFF; \
198 cycles-=6; clockspc(6);
199
200 #define SBC8() tempw=a.b.l-temp-((p.c)?0:1); \
201 p.v=(((a.b.l^temp)&0x80)&&((a.b.l^tempw)&0x80)); \
202 a.b.l=tempw&0xFF; \
203 setzn8(a.b.l); \
204 p.c=tempw<=0xFF;
205
206 #define SBC16() templ=a.w-tempw-((p.c)?0:1); \
207 p.v=(((a.w^tempw)&(a.w^templ))&0x8000); \
208 a.w=templ&0xFFFF; \
209 setzn16(a.w); \
210 p.c=templ<=0xFFFF;
211
212 #define SBCBCD8() \
213 tempw=(a.b.l&0xF)-(temp&0xF)-(p.c?0:1); \
214 if (tempw>9) \
215 { \
216 tempw-=6; \
217 } \
218 tempw+=((a.b.l&0xF0)-(temp&0xF0)); \
219 if (tempw>0x9F) \
220 { \
221 tempw-=0x60; \
222 } \
223 p.v=(((a.b.l^temp)&0x80)&&((a.b.l^tempw)&0x80)); \
224 a.b.l=tempw&0xFF; \
225 setzn8(a.b.l); \
226 p.c=tempw<=0xFF; \
227 cycles-=6; clockspc(6);
228
229 #define SBCBCD16() \
230 templ=(a.w&0xF)-(tempw&0xF)-(p.c?0:1); \
231 if (templ>9) \
232 { \
233 templ-=6; \
234 } \
235 templ+=((a.w&0xF0)-(tempw&0xF0)); \
236 if (templ>0x9F) \
237 { \
238 templ-=0x60; \
239 } \
240 templ+=((a.w&0xF00)-(tempw&0xF00)); \
241 if (templ>0x9FF) \
242 { \
243 templ-=0x600; \
244 } \
245 templ+=((a.w&0xF000)-(tempw&0xF000)); \
246 if (templ>0x9FFF) \
247 { \
248 templ-=0x6000; \
249 } \
250 p.v=(((a.w^tempw)&0x8000)&&((a.w^templ)&0x8000)); \
251 a.w=templ&0xFFFF; \
252 setzn16(a.w); \
253 p.c=templ<=0xFFFF; \
254 cycles-=6; clockspc(6);
255
256 /*Instructions*/
inca8()257 static inline void inca8()
258 {
259 snes_readmem(pbr|pc);
260 a.b.l++;
261 setzn8(a.b.l);
262 }
inca16()263 static inline void inca16()
264 {
265 snes_readmem(pbr|pc);
266 a.w++;
267 setzn16(a.w);
268 }
inx8()269 static inline void inx8()
270 {
271 snes_readmem(pbr|pc);
272 x.b.l++;
273 setzn8(x.b.l);
274 }
inx16()275 static inline void inx16()
276 {
277 snes_readmem(pbr|pc);
278 x.w++;
279 setzn16(x.w);
280 }
iny8()281 static inline void iny8()
282 {
283 snes_readmem(pbr|pc);
284 y.b.l++;
285 setzn8(y.b.l);
286 }
iny16()287 static inline void iny16()
288 {
289 snes_readmem(pbr|pc);
290 y.w++;
291 setzn16(y.w);
292 }
293
deca8()294 static inline void deca8()
295 {
296 snes_readmem(pbr|pc);
297 a.b.l--;
298 setzn8(a.b.l);
299 }
deca16()300 static inline void deca16()
301 {
302 snes_readmem(pbr|pc);
303 a.w--;
304 setzn16(a.w);
305 }
dex8()306 static inline void dex8()
307 {
308 snes_readmem(pbr|pc);
309 x.b.l--;
310 setzn8(x.b.l);
311 }
dex16()312 static inline void dex16()
313 {
314 snes_readmem(pbr|pc);
315 x.w--;
316 setzn16(x.w);
317 }
dey8()318 static inline void dey8()
319 {
320 snes_readmem(pbr|pc);
321 y.b.l--;
322 setzn8(y.b.l);
323 }
dey16()324 static inline void dey16()
325 {
326 snes_readmem(pbr|pc);
327 y.w--;
328 setzn16(y.w);
329 }
330
331 /*INC group*/
incZp8()332 static inline void incZp8()
333 {
334 unsigned char temp;
335 addr=zeropage();
336 temp=snes_readmem(addr);
337 cycles-=6; clockspc(6);
338 temp++;
339 setzn8(temp);
340 snes_writemem(addr,temp);
341 }
incZp16()342 static inline void incZp16()
343 {
344 unsigned short temp;
345 addr=zeropage();
346 temp=readmemw(addr);
347 cycles-=6; clockspc(6);
348 temp++;
349 setzn16(temp);
350 writememw2(addr,temp);
351 }
352
incZpx8()353 static inline void incZpx8()
354 {
355 unsigned char temp;
356 addr=zeropagex();
357 temp=snes_readmem(addr);
358 cycles-=6; clockspc(6);
359 temp++;
360 setzn8(temp);
361 snes_writemem(addr,temp);
362 }
incZpx16()363 static inline void incZpx16()
364 {
365 unsigned short temp;
366 addr=zeropagex();
367 temp=readmemw(addr);
368 cycles-=6; clockspc(6);
369 temp++;
370 setzn16(temp);
371 writememw2(addr,temp);
372 }
373
incAbs8()374 static inline void incAbs8()
375 {
376 unsigned char temp;
377 addr=absolute();
378 temp=snes_readmem(addr);
379 cycles-=6; clockspc(6);
380 temp++;
381 setzn8(temp);
382 snes_writemem(addr,temp);
383 }
incAbs16()384 static inline void incAbs16()
385 {
386 unsigned short temp;
387 addr=absolute();
388 temp=readmemw(addr);
389 cycles-=6; clockspc(6);
390 temp++;
391 setzn16(temp);
392 writememw2(addr,temp);
393 }
394
incAbsx8()395 static inline void incAbsx8()
396 {
397 unsigned char temp;
398 addr=absolutex();
399 temp=snes_readmem(addr);
400 cycles-=6; clockspc(6);
401 temp++;
402 setzn8(temp);
403 snes_writemem(addr,temp);
404 }
incAbsx16()405 static inline void incAbsx16()
406 {
407 unsigned short temp;
408 addr=absolutex();
409 temp=readmemw(addr);
410 cycles-=6; clockspc(6);
411 temp++;
412 setzn16(temp);
413 writememw2(addr,temp);
414 }
415
416 /*DEC group*/
decZp8()417 static inline void decZp8()
418 {
419 unsigned char temp;
420 addr=zeropage();
421 temp=snes_readmem(addr);
422 cycles-=6; clockspc(6);
423 temp--;
424 setzn8(temp);
425 snes_writemem(addr,temp);
426 }
decZp16()427 static inline void decZp16()
428 {
429 unsigned short temp;
430 addr=zeropage();
431 temp=readmemw(addr);
432 cycles-=6; clockspc(6);
433 temp--;
434 setzn16(temp);
435 writememw2(addr,temp);
436 }
437
decZpx8()438 static inline void decZpx8()
439 {
440 unsigned char temp;
441 addr=zeropagex();
442 temp=snes_readmem(addr);
443 cycles-=6; clockspc(6);
444 temp--;
445 setzn8(temp);
446 snes_writemem(addr,temp);
447 }
decZpx16()448 static inline void decZpx16()
449 {
450 unsigned short temp;
451 addr=zeropagex();
452 temp=readmemw(addr);
453 cycles-=6; clockspc(6);
454 temp--;
455 setzn16(temp);
456 writememw2(addr,temp);
457 }
458
decAbs8()459 static inline void decAbs8()
460 {
461 unsigned char temp;
462 addr=absolute();
463 temp=snes_readmem(addr);
464 cycles-=6; clockspc(6);
465 temp--;
466 setzn8(temp);
467 snes_writemem(addr,temp);
468 }
469
decAbs16()470 static inline void decAbs16()
471 {
472 unsigned short temp;
473 addr=absolute();
474 temp=readmemw(addr);
475 cycles-=6; clockspc(6);
476 temp--;
477 setzn16(temp);
478 writememw2(addr,temp);
479 }
480
decAbsx8()481 static inline void decAbsx8()
482 {
483 unsigned char temp;
484 addr=absolutex();
485 temp=snes_readmem(addr);
486 cycles-=6; clockspc(6);
487 temp--;
488 setzn8(temp);
489 snes_writemem(addr,temp);
490 }
491
decAbsx16()492 static inline void decAbsx16()
493 {
494 unsigned short temp;
495 addr=absolutex();
496 temp=readmemw(addr);
497 cycles-=6; clockspc(6);
498 temp--;
499 setzn16(temp);
500 writememw2(addr,temp);
501 }
502
503 /*Flag group*/
clc()504 static inline void clc()
505 {
506 snes_readmem(pbr|pc);
507 p.c=0;
508 }
cld()509 static inline void cld()
510 {
511 snes_readmem(pbr|pc);
512 p.d=0;
513 }
cli()514 static inline void cli()
515 {
516 snes_readmem(pbr|pc);
517 p.i=0;
518 }
clv()519 static inline void clv()
520 {
521 snes_readmem(pbr|pc);
522 p.v=0;
523 }
524
sec()525 static inline void sec()
526 {
527 snes_readmem(pbr|pc);
528 p.c=1;
529 }
sed()530 static inline void sed()
531 {
532 snes_readmem(pbr|pc);
533 p.d=1;
534 }
sei()535 static inline void sei()
536 {
537 snes_readmem(pbr|pc);
538 p.i=1;
539 }
540
xce()541 static inline void xce()
542 {
543 int temp=p.c;
544 p.c=p.e;
545 p.e=temp;
546 snes_readmem(pbr|pc);
547 updatecpumode();
548 }
549
sep()550 static inline void sep()
551 {
552 unsigned char temp=snes_readmem(pbr|pc); pc++;
553 if (temp&1) p.c=1;
554 if (temp&2) p.z=1;
555 if (temp&4) p.i=1;
556 if (temp&8) p.d=1;
557 if (temp&0x40) p.v=1;
558 if (temp&0x80) p.n=1;
559 if (!p.e)
560 {
561 if (temp&0x10) p.x=1;
562 if (temp&0x20) p.m=1;
563 updatecpumode();
564 }
565 }
566
rep()567 static inline void rep()
568 {
569 unsigned char temp=snes_readmem(pbr|pc); pc++;
570 if (temp&1) p.c=0;
571 if (temp&2) p.z=0;
572 if (temp&4) p.i=0;
573 if (temp&8) p.d=0;
574 if (temp&0x40) p.v=0;
575 if (temp&0x80) p.n=0;
576 if (!p.e)
577 {
578 if (temp&0x10) p.x=0;
579 if (temp&0x20) p.m=0;
580 updatecpumode();
581 }
582 }
583
584 /*Transfer group*/
tax8()585 static inline void tax8()
586 {
587 snes_readmem(pbr|pc);
588 x.b.l=a.b.l;
589 setzn8(x.b.l);
590 }
tay8()591 static inline void tay8()
592 {
593 snes_readmem(pbr|pc);
594 y.b.l=a.b.l;
595 setzn8(y.b.l);
596 }
txa8()597 static inline void txa8()
598 {
599 snes_readmem(pbr|pc);
600 a.b.l=x.b.l;
601 setzn8(a.b.l);
602 }
tya8()603 static inline void tya8()
604 {
605 snes_readmem(pbr|pc);
606 a.b.l=y.b.l;
607 setzn8(a.b.l);
608 }
tsx8()609 static inline void tsx8()
610 {
611 snes_readmem(pbr|pc);
612 x.b.l=s.b.l;
613 setzn8(x.b.l);
614 }
txs8()615 static inline void txs8()
616 {
617 snes_readmem(pbr|pc);
618 s.b.l=x.b.l;
619 // setzn8(s.b.l);
620 }
txy8()621 static inline void txy8()
622 {
623 snes_readmem(pbr|pc);
624 y.b.l=x.b.l;
625 setzn8(y.b.l);
626 }
tyx8()627 static inline void tyx8()
628 {
629 snes_readmem(pbr|pc);
630 x.b.l=y.b.l;
631 setzn8(x.b.l);
632 }
633
tax16()634 static inline void tax16()
635 {
636 snes_readmem(pbr|pc);
637 x.w=a.w;
638 setzn16(x.w);
639 }
tay16()640 static inline void tay16()
641 {
642 snes_readmem(pbr|pc);
643 y.w=a.w;
644 setzn16(y.w);
645 }
txa16()646 static inline void txa16()
647 {
648 snes_readmem(pbr|pc);
649 a.w=x.w;
650 setzn16(a.w);
651 }
tya16()652 static inline void tya16()
653 {
654 snes_readmem(pbr|pc);
655 a.w=y.w;
656 setzn16(a.w);
657 }
tsx16()658 static inline void tsx16()
659 {
660 snes_readmem(pbr|pc);
661 x.w=s.w;
662 setzn16(x.w);
663 }
txs16()664 static inline void txs16()
665 {
666 snes_readmem(pbr|pc);
667 s.w=x.w;
668 // setzn16(s.w);
669 }
txy16()670 static inline void txy16()
671 {
672 snes_readmem(pbr|pc);
673 y.w=x.w;
674 setzn16(y.w);
675 }
tyx16()676 static inline void tyx16()
677 {
678 snes_readmem(pbr|pc);
679 x.w=y.w;
680 setzn16(x.w);
681 }
682
683 /*LDX group*/
ldxImm8()684 static inline void ldxImm8()
685 {
686 x.b.l=snes_readmem(pbr|pc); pc++;
687 setzn8(x.b.l);
688 }
689
ldxZp8()690 static inline void ldxZp8()
691 {
692 addr=zeropage();
693 x.b.l=snes_readmem(addr);
694 setzn8(x.b.l);
695 }
696
ldxZpy8()697 static inline void ldxZpy8()
698 {
699 addr=zeropagey();
700 x.b.l=snes_readmem(addr);
701 setzn8(x.b.l);
702 }
703
ldxAbs8()704 static inline void ldxAbs8()
705 {
706 addr=absolute();
707 x.b.l=snes_readmem(addr);
708 setzn8(x.b.l);
709 }
ldxAbsy8()710 static inline void ldxAbsy8()
711 {
712 addr=absolutey();
713 x.b.l=snes_readmem(addr);
714 setzn8(x.b.l);
715 }
716
ldxImm16()717 static inline void ldxImm16()
718 {
719 x.w=readmemw(pbr|pc); pc+=2;
720 setzn16(x.w);
721 }
ldxZp16()722 static inline void ldxZp16()
723 {
724 addr=zeropage();
725 x.w=readmemw(addr);
726 setzn16(x.w);
727 }
ldxZpy16()728 static inline void ldxZpy16()
729 {
730 addr=zeropagey();
731 x.w=readmemw(addr);
732 setzn16(x.w);
733 }
ldxAbs16()734 static inline void ldxAbs16()
735 {
736 addr=absolute();
737 x.w=readmemw(addr);
738 setzn16(x.w);
739 }
ldxAbsy16()740 static inline void ldxAbsy16()
741 {
742 addr=absolutey();
743 x.w=readmemw(addr);
744 setzn16(x.w);
745 }
746
747 /*LDY group*/
ldyImm8()748 static inline void ldyImm8()
749 {
750 y.b.l=snes_readmem(pbr|pc); pc++;
751 setzn8(y.b.l);
752 }
ldyZp8()753 static inline void ldyZp8()
754 {
755 addr=zeropage();
756 y.b.l=snes_readmem(addr);
757 setzn8(y.b.l);
758 }
ldyZpx8()759 static inline void ldyZpx8()
760 {
761 addr=zeropagex();
762 y.b.l=snes_readmem(addr);
763 setzn8(y.b.l);
764 }
ldyAbs8()765 static inline void ldyAbs8()
766 {
767 addr=absolute();
768 y.b.l=snes_readmem(addr);
769 setzn8(y.b.l);
770 }
ldyAbsx8()771 static inline void ldyAbsx8()
772 {
773 addr=absolutex();
774 y.b.l=snes_readmem(addr);
775 setzn8(y.b.l);
776 }
777
ldyImm16()778 static inline void ldyImm16()
779 {
780 y.w=readmemw(pbr|pc);
781 pc+=2;
782 setzn16(y.w);
783 }
ldyZp16()784 static inline void ldyZp16()
785 {
786 addr=zeropage();
787 y.w=readmemw(addr);
788 setzn16(y.w);
789 }
ldyZpx16()790 static inline void ldyZpx16()
791 {
792 addr=zeropagex();
793 y.w=readmemw(addr);
794 setzn16(y.w);
795 }
ldyAbs16()796 static inline void ldyAbs16()
797 {
798 addr=absolute();
799 y.w=readmemw(addr);
800 setzn16(y.w);
801 }
ldyAbsx16()802 static inline void ldyAbsx16()
803 {
804 addr=absolutex();
805 y.w=readmemw(addr);
806 setzn16(y.w);
807 }
808
809 /*LDA group*/
ldaImm8()810 static inline void ldaImm8()
811 {
812 a.b.l=snes_readmem(pbr|pc); pc++;
813 setzn8(a.b.l);
814 }
ldaZp8()815 static inline void ldaZp8()
816 {
817 addr=zeropage();
818 a.b.l=snes_readmem(addr);
819 setzn8(a.b.l);
820 }
ldaZpx8()821 static inline void ldaZpx8()
822 {
823 addr=zeropagex();
824 a.b.l=snes_readmem(addr);
825 setzn8(a.b.l);
826 }
ldaSp8()827 static inline void ldaSp8()
828 {
829 addr=stack();
830 a.b.l=snes_readmem(addr);
831 setzn8(a.b.l);
832 }
ldaSIndirecty8()833 static inline void ldaSIndirecty8()
834 {
835 addr=sindirecty();
836 a.b.l=snes_readmem(addr);
837 setzn8(a.b.l);
838 }
ldaAbs8()839 static inline void ldaAbs8()
840 {
841 addr=absolute();
842 a.b.l=snes_readmem(addr);
843 setzn8(a.b.l);
844 }
ldaAbsx8()845 static inline void ldaAbsx8()
846 {
847 addr=absolutex();
848 a.b.l=snes_readmem(addr);
849 setzn8(a.b.l);
850 }
ldaAbsy8()851 static inline void ldaAbsy8()
852 {
853 addr=absolutey();
854 a.b.l=snes_readmem(addr);
855 setzn8(a.b.l);
856 }
ldaLong8()857 static inline void ldaLong8()
858 {
859 addr=absolutelong();
860 a.b.l=snes_readmem(addr);
861 setzn8(a.b.l);
862 }
ldaLongx8()863 static inline void ldaLongx8()
864 {
865 addr=absolutelongx();
866 a.b.l=snes_readmem(addr);
867 setzn8(a.b.l);
868 }
ldaIndirect8()869 static inline void ldaIndirect8()
870 {
871 addr=indirect();
872 a.b.l=snes_readmem(addr);
873 setzn8(a.b.l);
874 }
ldaIndirectx8()875 static inline void ldaIndirectx8()
876 {
877 addr=indirectx();
878 a.b.l=snes_readmem(addr);
879 setzn8(a.b.l);
880 }
ldaIndirecty8()881 static inline void ldaIndirecty8()
882 {
883 addr=indirecty();
884 a.b.l=snes_readmem(addr);
885 setzn8(a.b.l);
886 }
ldaIndirectLong8()887 static inline void ldaIndirectLong8()
888 {
889 addr=indirectl();
890 a.b.l=snes_readmem(addr);
891 setzn8(a.b.l);
892 }
ldaIndirectLongy8()893 static inline void ldaIndirectLongy8()
894 {
895 addr=indirectly();
896 a.b.l=snes_readmem(addr);
897 setzn8(a.b.l);
898 }
899
ldaImm16()900 static inline void ldaImm16()
901 {
902 a.w=readmemw(pbr|pc); pc+=2;
903 setzn16(a.w);
904 }
ldaZp16()905 static inline void ldaZp16()
906 {
907 addr=zeropage();
908 a.w=readmemw(addr);
909 setzn16(a.w);
910 }
ldaZpx16()911 static inline void ldaZpx16()
912 {
913 addr=zeropagex();
914 a.w=readmemw(addr);
915 setzn16(a.w);
916 }
ldaSp16()917 static inline void ldaSp16()
918 {
919 addr=stack();
920 a.w=readmemw(addr);
921 setzn16(a.w);
922 }
ldaSIndirecty16()923 static inline void ldaSIndirecty16()
924 {
925 addr=sindirecty();
926 a.w=readmemw(addr);
927 setzn16(a.w);
928 }
ldaAbs16()929 static inline void ldaAbs16()
930 {
931 addr=absolute();
932 a.w=readmemw(addr);
933 setzn16(a.w);
934 }
ldaAbsx16()935 static inline void ldaAbsx16()
936 {
937 addr=absolutex();
938 a.w=readmemw(addr);
939 setzn16(a.w);
940 }
ldaAbsy16()941 static inline void ldaAbsy16()
942 {
943 addr=absolutey();
944 a.w=readmemw(addr);
945 setzn16(a.w);
946 }
ldaLong16()947 static inline void ldaLong16()
948 {
949 addr=absolutelong();
950 a.w=readmemw(addr);
951 setzn16(a.w);
952 }
ldaLongx16()953 static inline void ldaLongx16()
954 {
955 addr=absolutelongx();
956 a.w=readmemw(addr);
957 setzn16(a.w);
958 }
ldaIndirect16()959 static inline void ldaIndirect16()
960 {
961 addr=indirect();
962 a.w=readmemw(addr);
963 setzn16(a.w);
964 }
ldaIndirectx16()965 static inline void ldaIndirectx16()
966 {
967 addr=indirectx();
968 a.w=readmemw(addr);
969 setzn16(a.w);
970 }
ldaIndirecty16()971 static inline void ldaIndirecty16()
972 {
973 addr=indirecty();
974 a.w=readmemw(addr);
975 setzn16(a.w);
976 }
ldaIndirectLong16()977 static inline void ldaIndirectLong16()
978 {
979 addr=indirectl();
980 a.w=readmemw(addr);
981 setzn16(a.w);
982 }
ldaIndirectLongy16()983 static inline void ldaIndirectLongy16()
984 {
985 addr=indirectly();
986 a.w=readmemw(addr);
987 setzn16(a.w);
988 }
989
990 /*STA group*/
staZp8()991 static inline void staZp8()
992 {
993 addr=zeropage();
994 snes_writemem(addr,a.b.l);
995 }
staZpx8()996 static inline void staZpx8()
997 {
998 addr=zeropagex();
999 snes_writemem(addr,a.b.l);
1000 }
staAbs8()1001 static inline void staAbs8()
1002 {
1003 addr=absolute();
1004 snes_writemem(addr,a.b.l);
1005 }
staAbsx8()1006 static inline void staAbsx8()
1007 {
1008 addr=absolutex();
1009 snes_writemem(addr,a.b.l);
1010 }
staAbsy8()1011 static inline void staAbsy8()
1012 {
1013 addr=absolutey();
1014 snes_writemem(addr,a.b.l);
1015 }
staLong8()1016 static inline void staLong8()
1017 {
1018 addr=absolutelong();
1019 snes_writemem(addr,a.b.l);
1020 }
staLongx8()1021 static inline void staLongx8()
1022 {
1023 addr=absolutelongx();
1024 snes_writemem(addr,a.b.l);
1025 }
staIndirect8()1026 static inline void staIndirect8()
1027 {
1028 addr=indirect();
1029 snes_writemem(addr,a.b.l);
1030 }
staIndirectx8()1031 static inline void staIndirectx8()
1032 {
1033 addr=indirectx();
1034 snes_writemem(addr,a.b.l);
1035 }
staIndirecty8()1036 static inline void staIndirecty8()
1037 {
1038 addr=indirecty();
1039 snes_writemem(addr,a.b.l);
1040 }
staIndirectLong8()1041 static inline void staIndirectLong8()
1042 {
1043 addr=indirectl();
1044 snes_writemem(addr,a.b.l);
1045 }
staIndirectLongy8()1046 static inline void staIndirectLongy8()
1047 {
1048 addr=indirectly();
1049 snes_writemem(addr,a.b.l);
1050 }
staSp8()1051 static inline void staSp8()
1052 {
1053 addr=stack();
1054 snes_writemem(addr,a.b.l);
1055 }
staSIndirecty8()1056 static inline void staSIndirecty8()
1057 {
1058 addr=sindirecty();
1059 snes_writemem(addr,a.b.l);
1060 }
1061
staZp16()1062 static inline void staZp16()
1063 {
1064 addr=zeropage();
1065 writememw(addr,a.w);
1066 }
staZpx16()1067 static inline void staZpx16()
1068 {
1069 addr=zeropagex();
1070 writememw(addr,a.w);
1071 }
staAbs16()1072 static inline void staAbs16()
1073 {
1074 addr=absolute();
1075 writememw(addr,a.w);
1076 }
staAbsx16()1077 static inline void staAbsx16()
1078 {
1079 addr=absolutex();
1080 writememw(addr,a.w);
1081 }
staAbsy16()1082 static inline void staAbsy16()
1083 {
1084 addr=absolutey();
1085 writememw(addr,a.w);
1086 }
staLong16()1087 static inline void staLong16()
1088 {
1089 addr=absolutelong();
1090 writememw(addr,a.w);
1091 }
staLongx16()1092 static inline void staLongx16()
1093 {
1094 addr=absolutelongx();
1095 writememw(addr,a.w);
1096 }
staIndirect16()1097 static inline void staIndirect16()
1098 {
1099 addr=indirect();
1100 writememw(addr,a.w);
1101 }
staIndirectx16()1102 static inline void staIndirectx16()
1103 {
1104 addr=indirectx();
1105 writememw(addr,a.w);
1106 }
staIndirecty16()1107 static inline void staIndirecty16()
1108 {
1109 addr=indirecty();
1110 writememw(addr,a.w);
1111 }
staIndirectLong16()1112 static inline void staIndirectLong16()
1113 {
1114 addr=indirectl();
1115 writememw(addr,a.w);
1116 }
staIndirectLongy16()1117 static inline void staIndirectLongy16()
1118 {
1119 addr=indirectly();
1120 writememw(addr,a.w);
1121 }
staSp16()1122 static inline void staSp16()
1123 {
1124 addr=stack();
1125 writememw(addr,a.w);
1126 }
staSIndirecty16()1127 static inline void staSIndirecty16()
1128 {
1129 addr=sindirecty();
1130 writememw(addr,a.w);
1131 }
1132
1133 /*STX group*/
stxZp8()1134 static inline void stxZp8()
1135 {
1136 addr=zeropage();
1137 snes_writemem(addr,x.b.l);
1138 }
stxZpy8()1139 static inline void stxZpy8()
1140 {
1141 addr=zeropagey();
1142 snes_writemem(addr,x.b.l);
1143 }
stxAbs8()1144 static inline void stxAbs8()
1145 {
1146 addr=absolute();
1147 snes_writemem(addr,x.b.l);
1148 }
1149
stxZp16()1150 static inline void stxZp16()
1151 {
1152 addr=zeropage();
1153 writememw(addr,x.w);
1154 }
stxZpy16()1155 static inline void stxZpy16()
1156 {
1157 addr=zeropagey();
1158 writememw(addr,x.w);
1159 }
stxAbs16()1160 static inline void stxAbs16()
1161 {
1162 addr=absolute();
1163 writememw(addr,x.w);
1164 }
1165
1166 /*STY group*/
styZp8()1167 static inline void styZp8()
1168 {
1169 addr=zeropage();
1170 snes_writemem(addr,y.b.l);
1171 }
styZpx8()1172 static inline void styZpx8()
1173 {
1174 addr=zeropagex();
1175 snes_writemem(addr,y.b.l);
1176 }
styAbs8()1177 static inline void styAbs8()
1178 {
1179 addr=absolute();
1180 snes_writemem(addr,y.b.l);
1181 }
1182
styZp16()1183 static inline void styZp16()
1184 {
1185 addr=zeropage();
1186 writememw(addr,y.w);
1187 }
styZpx16()1188 static inline void styZpx16()
1189 {
1190 addr=zeropagex();
1191 writememw(addr,y.w);
1192 }
styAbs16()1193 static inline void styAbs16()
1194 {
1195 addr=absolute();
1196 writememw(addr,y.w);
1197 }
1198
1199 /*STZ group*/
stzZp8()1200 static inline void stzZp8()
1201 {
1202 addr=zeropage();
1203 snes_writemem(addr,0);
1204 }
stzZpx8()1205 static inline void stzZpx8()
1206 {
1207 addr=zeropagex();
1208 snes_writemem(addr,0);
1209 }
stzAbs8()1210 static inline void stzAbs8()
1211 {
1212 addr=absolute();
1213 snes_writemem(addr,0);
1214 }
stzAbsx8()1215 static inline void stzAbsx8()
1216 {
1217 addr=absolutex();
1218 snes_writemem(addr,0);
1219 }
1220
stzZp16()1221 static inline void stzZp16()
1222 {
1223 addr=zeropage();
1224 writememw(addr,0);
1225 }
stzZpx16()1226 static inline void stzZpx16()
1227 {
1228 addr=zeropagex();
1229 writememw(addr,0);
1230 }
stzAbs16()1231 static inline void stzAbs16()
1232 {
1233 addr=absolute();
1234 writememw(addr,0);
1235 }
stzAbsx16()1236 static inline void stzAbsx16()
1237 {
1238 addr=absolutex();
1239 writememw(addr,0);
1240 }
1241
1242 /*ADC group*/
adcImm8()1243 static inline void adcImm8()
1244 {
1245 unsigned short tempw;
1246 unsigned char temp=snes_readmem(pbr|pc); pc++;
1247 if (p.d) { ADCBCD8(); } else { ADC8(); }
1248 }
adcZp8()1249 static inline void adcZp8()
1250 {
1251 unsigned short tempw;
1252 unsigned char temp;
1253 addr=zeropage();
1254 temp=snes_readmem(addr);
1255 if (p.d) { ADCBCD8(); } else { ADC8(); }
1256 }
adcZpx8()1257 static inline void adcZpx8()
1258 {
1259 unsigned short tempw;
1260 unsigned char temp;
1261 addr=zeropagex();
1262 temp=snes_readmem(addr);
1263 if (p.d) { ADCBCD8(); } else { ADC8(); }
1264 }
adcSp8()1265 static inline void adcSp8()
1266 {
1267 unsigned short tempw;
1268 unsigned char temp;
1269 addr=stack();
1270 temp=snes_readmem(addr);
1271 if (p.d) { ADCBCD8(); } else { ADC8(); }
1272 }
adcAbs8()1273 static inline void adcAbs8()
1274 {
1275 unsigned short tempw;
1276 unsigned char temp;
1277 addr=absolute();
1278 temp=snes_readmem(addr);
1279 if (p.d) { ADCBCD8(); } else { ADC8(); }
1280 }
adcAbsx8()1281 static inline void adcAbsx8()
1282 {
1283 unsigned short tempw;
1284 unsigned char temp;
1285 addr=absolutex();
1286 temp=snes_readmem(addr);
1287 if (p.d) { ADCBCD8(); } else { ADC8(); }
1288 }
adcAbsy8()1289 static inline void adcAbsy8()
1290 {
1291 unsigned short tempw;
1292 unsigned char temp;
1293 addr=absolutey();
1294 temp=snes_readmem(addr);
1295 if (p.d) { ADCBCD8(); } else { ADC8(); }
1296 }
adcLong8()1297 static inline void adcLong8()
1298 {
1299 unsigned short tempw;
1300 unsigned char temp;
1301 addr=absolutelong();
1302 temp=snes_readmem(addr);
1303 if (p.d) { ADCBCD8(); } else { ADC8(); }
1304 }
adcLongx8()1305 static inline void adcLongx8()
1306 {
1307 unsigned short tempw;
1308 unsigned char temp;
1309 addr=absolutelongx();
1310 temp=snes_readmem(addr);
1311 if (p.d) { ADCBCD8(); } else { ADC8(); }
1312 }
adcIndirect8()1313 static inline void adcIndirect8()
1314 {
1315 unsigned short tempw;
1316 unsigned char temp;
1317 addr=indirect();
1318 temp=snes_readmem(addr);
1319 if (p.d) { ADCBCD8(); } else { ADC8(); }
1320 }
adcIndirectx8()1321 static inline void adcIndirectx8()
1322 {
1323 unsigned short tempw;
1324 unsigned char temp;
1325 addr=indirectx();
1326 temp=snes_readmem(addr);
1327 if (p.d) { ADCBCD8(); } else { ADC8(); }
1328 }
adcIndirecty8()1329 static inline void adcIndirecty8()
1330 {
1331 unsigned short tempw;
1332 unsigned char temp;
1333 addr=indirecty();
1334 temp=snes_readmem(addr);
1335 if (p.d) { ADCBCD8(); } else { ADC8(); }
1336 }
adcsIndirecty8()1337 static inline void adcsIndirecty8()
1338 {
1339 unsigned short tempw;
1340 unsigned char temp;
1341 addr=sindirecty();
1342 temp=snes_readmem(addr);
1343 if (p.d) { ADCBCD8(); } else { ADC8(); }
1344 }
adcIndirectLong8()1345 static inline void adcIndirectLong8()
1346 {
1347 unsigned short tempw;
1348 unsigned char temp;
1349 addr=indirectl();
1350 temp=snes_readmem(addr);
1351 if (p.d) { ADCBCD8(); } else { ADC8(); }
1352 }
adcIndirectLongy8()1353 static inline void adcIndirectLongy8()
1354 {
1355 unsigned short tempw;
1356 unsigned char temp;
1357 addr=indirectly();
1358 temp=snes_readmem(addr);
1359 if (p.d) { ADCBCD8(); } else { ADC8(); }
1360 }
1361
adcImm16()1362 static inline void adcImm16()
1363 {
1364 unsigned long templ;
1365 unsigned short tempw;
1366 tempw=readmemw(pbr|pc); pc+=2;
1367 if (p.d) { ADCBCD16(); } else { ADC16(); }
1368 }
adcZp16()1369 static inline void adcZp16()
1370 {
1371 unsigned long templ;
1372 unsigned short tempw;
1373 addr=zeropage();
1374 tempw=readmemw(addr);
1375 if (p.d) { ADCBCD16(); } else { ADC16(); }
1376 }
adcZpx16()1377 static inline void adcZpx16()
1378 {
1379 unsigned long templ;
1380 unsigned short tempw;
1381 addr=zeropagex();
1382 tempw=readmemw(addr);
1383 if (p.d) { ADCBCD16(); } else { ADC16(); }
1384 }
adcSp16()1385 static inline void adcSp16()
1386 {
1387 unsigned long templ;
1388 unsigned short tempw;
1389 addr=stack();
1390 tempw=readmemw(addr);
1391 if (p.d) { ADCBCD16(); } else { ADC16(); }
1392 }
adcAbs16()1393 static inline void adcAbs16()
1394 {
1395 unsigned long templ;
1396 unsigned short tempw;
1397 addr=absolute();
1398 tempw=readmemw(addr);
1399 if (p.d) { ADCBCD16(); } else { ADC16(); }
1400 }
adcAbsx16()1401 static inline void adcAbsx16()
1402 {
1403 unsigned long templ;
1404 unsigned short tempw;
1405 addr=absolutex();
1406 tempw=readmemw(addr);
1407 if (p.d) { ADCBCD16(); } else { ADC16(); }
1408 }
adcAbsy16()1409 static inline void adcAbsy16()
1410 {
1411 unsigned long templ;
1412 unsigned short tempw;
1413 addr=absolutey();
1414 tempw=readmemw(addr);
1415 if (p.d) { ADCBCD16(); } else { ADC16(); }
1416 }
adcLong16()1417 static inline void adcLong16()
1418 {
1419 unsigned long templ;
1420 unsigned short tempw;
1421 addr=absolutelong();
1422 tempw=readmemw(addr);
1423 if (p.d) { ADCBCD16(); } else { ADC16(); }
1424 }
adcLongx16()1425 static inline void adcLongx16()
1426 {
1427 unsigned long templ;
1428 unsigned short tempw;
1429 addr=absolutelongx();
1430 tempw=readmemw(addr);
1431 if (p.d) { ADCBCD16(); } else { ADC16(); }
1432 }
adcIndirect16()1433 static inline void adcIndirect16()
1434 {
1435 unsigned long templ;
1436 unsigned short tempw;
1437 addr=indirect();
1438 tempw=readmemw(addr);
1439 if (p.d) { ADCBCD16(); } else { ADC16(); }
1440 }
adcIndirectx16()1441 static inline void adcIndirectx16()
1442 {
1443 unsigned long templ;
1444 unsigned short tempw;
1445 addr=indirectx();
1446 tempw=readmemw(addr);
1447 if (p.d) { ADCBCD16(); } else { ADC16(); }
1448 }
adcIndirecty16()1449 static inline void adcIndirecty16()
1450 {
1451 unsigned long templ;
1452 unsigned short tempw;
1453 addr=indirecty();
1454 tempw=readmemw(addr);
1455 if (p.d) { ADCBCD16(); } else { ADC16(); }
1456 }
adcsIndirecty16()1457 static inline void adcsIndirecty16()
1458 {
1459 unsigned long templ;
1460 unsigned short tempw;
1461 addr=sindirecty();
1462 tempw=readmemw(addr);
1463 if (p.d) { ADCBCD16(); } else { ADC16(); }
1464 }
adcIndirectLong16()1465 static inline void adcIndirectLong16()
1466 {
1467 unsigned long templ;
1468 unsigned short tempw;
1469 addr=indirectl();
1470 tempw=readmemw(addr);
1471 if (p.d) { ADCBCD16(); } else { ADC16(); }
1472 }
adcIndirectLongy16()1473 static inline void adcIndirectLongy16()
1474 {
1475 unsigned long templ;
1476 unsigned short tempw;
1477 addr=indirectly();
1478 tempw=readmemw(addr);
1479 if (p.d) { ADCBCD16(); } else { ADC16(); }
1480 }
1481
1482 /*SBC group*/
sbcImm8()1483 static inline void sbcImm8()
1484 {
1485 unsigned short tempw;
1486 unsigned char temp=snes_readmem(pbr|pc); pc++;
1487 if (p.d) { SBCBCD8(); } else { SBC8(); }
1488 }
sbcZp8()1489 static inline void sbcZp8()
1490 {
1491 unsigned short tempw;
1492 unsigned char temp;
1493 addr=zeropage();
1494 temp=snes_readmem(addr);
1495 if (p.d) { SBCBCD8(); } else { SBC8(); }
1496 }
sbcZpx8()1497 static inline void sbcZpx8()
1498 {
1499 unsigned short tempw;
1500 unsigned char temp;
1501 addr=zeropagex();
1502 temp=snes_readmem(addr);
1503 if (p.d) { SBCBCD8(); } else { SBC8(); }
1504 }
sbcSp8()1505 static inline void sbcSp8()
1506 {
1507 unsigned short tempw;
1508 unsigned char temp;
1509 addr=stack();
1510 temp=snes_readmem(addr);
1511 if (p.d) { SBCBCD8(); } else { SBC8(); }
1512 }
sbcAbs8()1513 static inline void sbcAbs8()
1514 {
1515 unsigned short tempw;
1516 unsigned char temp;
1517 addr=absolute();
1518 temp=snes_readmem(addr);
1519 if (p.d) { SBCBCD8(); } else { SBC8(); }
1520 }
sbcAbsx8()1521 static inline void sbcAbsx8()
1522 {
1523 unsigned short tempw;
1524 unsigned char temp;
1525 addr=absolutex();
1526 temp=snes_readmem(addr);
1527 if (p.d) { SBCBCD8(); } else { SBC8(); }
1528 }
sbcAbsy8()1529 static inline void sbcAbsy8()
1530 {
1531 unsigned short tempw;
1532 unsigned char temp;
1533 addr=absolutey();
1534 temp=snes_readmem(addr);
1535 if (p.d) { SBCBCD8(); } else { SBC8(); }
1536 }
sbcLong8()1537 static inline void sbcLong8()
1538 {
1539 unsigned short tempw;
1540 unsigned char temp;
1541 addr=absolutelong();
1542 temp=snes_readmem(addr);
1543 if (p.d) { SBCBCD8(); } else { SBC8(); }
1544 }
sbcLongx8()1545 static inline void sbcLongx8()
1546 {
1547 unsigned short tempw;
1548 unsigned char temp;
1549 addr=absolutelongx();
1550 temp=snes_readmem(addr);
1551 if (p.d) { SBCBCD8(); } else { SBC8(); }
1552 }
sbcIndirect8()1553 static inline void sbcIndirect8()
1554 {
1555 unsigned short tempw;
1556 unsigned char temp;
1557 addr=indirect();
1558 temp=snes_readmem(addr);
1559 if (p.d) { SBCBCD8(); } else { SBC8(); }
1560 }
sbcIndirectx8()1561 static inline void sbcIndirectx8()
1562 {
1563 unsigned short tempw;
1564 unsigned char temp;
1565 addr=indirectx();
1566 temp=snes_readmem(addr);
1567 if (p.d) { SBCBCD8(); } else { SBC8(); }
1568 }
sbcIndirecty8()1569 static inline void sbcIndirecty8()
1570 {
1571 unsigned short tempw;
1572 unsigned char temp;
1573 addr=indirecty();
1574 temp=snes_readmem(addr);
1575 if (p.d) { SBCBCD8(); } else { SBC8(); }
1576 }
sbcIndirectLong8()1577 static inline void sbcIndirectLong8()
1578 {
1579 unsigned short tempw;
1580 unsigned char temp;
1581 addr=indirectl();
1582 temp=snes_readmem(addr);
1583 if (p.d) { SBCBCD8(); } else { SBC8(); }
1584 }
sbcIndirectLongy8()1585 static inline void sbcIndirectLongy8()
1586 {
1587 unsigned short tempw;
1588 unsigned char temp;
1589 addr=indirectly();
1590 temp=snes_readmem(addr);
1591 if (p.d) { SBCBCD8(); } else { SBC8(); }
1592 }
1593
sbcImm16()1594 static inline void sbcImm16()
1595 {
1596 unsigned long templ;
1597 unsigned short tempw;
1598 tempw=readmemw(pbr|pc); pc+=2;
1599 if (p.d) { SBCBCD16(); } else { SBC16(); }
1600 }
sbcZp16()1601 static inline void sbcZp16()
1602 {
1603 unsigned long templ;
1604 unsigned short tempw;
1605 addr=zeropage();
1606 tempw=readmemw(addr);
1607 if (p.d) { SBCBCD16(); } else { SBC16(); }
1608 }
sbcZpx16()1609 static inline void sbcZpx16()
1610 {
1611 unsigned long templ;
1612 unsigned short tempw;
1613 addr=zeropagex();
1614 tempw=readmemw(addr);
1615 if (p.d) { SBCBCD16(); } else { SBC16(); }
1616 }
sbcSp16()1617 static inline void sbcSp16()
1618 {
1619 unsigned long templ;
1620 unsigned short tempw;
1621 addr=stack();
1622 tempw=readmemw(addr);
1623 if (p.d) { SBCBCD16(); } else { SBC16(); }
1624 }
sbcAbs16()1625 static inline void sbcAbs16()
1626 {
1627 unsigned long templ;
1628 unsigned short tempw;
1629 addr=absolute();
1630 tempw=readmemw(addr);
1631 if (p.d) { SBCBCD16(); } else { SBC16(); }
1632 }
sbcAbsx16()1633 static inline void sbcAbsx16()
1634 {
1635 unsigned long templ;
1636 unsigned short tempw;
1637 addr=absolutex();
1638 tempw=readmemw(addr);
1639 if (p.d) { SBCBCD16(); } else { SBC16(); }
1640 }
sbcAbsy16()1641 static inline void sbcAbsy16()
1642 {
1643 unsigned long templ;
1644 unsigned short tempw;
1645 addr=absolutey();
1646 tempw=readmemw(addr);
1647 if (p.d) { SBCBCD16(); } else { SBC16(); }
1648 }
sbcLong16()1649 static inline void sbcLong16()
1650 {
1651 unsigned long templ;
1652 unsigned short tempw;
1653 addr=absolutelong();
1654 tempw=readmemw(addr);
1655 if (p.d) { SBCBCD16(); } else { SBC16(); }
1656 }
sbcLongx16()1657 static inline void sbcLongx16()
1658 {
1659 unsigned long templ;
1660 unsigned short tempw;
1661 addr=absolutelongx();
1662 tempw=readmemw(addr);
1663 if (p.d) { SBCBCD16(); } else { SBC16(); }
1664 }
sbcIndirect16()1665 static inline void sbcIndirect16()
1666 {
1667 unsigned long templ;
1668 unsigned short tempw;
1669 addr=indirect();
1670 tempw=readmemw(addr);
1671 if (p.d) { SBCBCD16(); } else { SBC16(); }
1672 }
sbcIndirectx16()1673 static inline void sbcIndirectx16()
1674 {
1675 unsigned long templ;
1676 unsigned short tempw;
1677 addr=indirectx();
1678 tempw=readmemw(addr);
1679 if (p.d) { SBCBCD16(); } else { SBC16(); }
1680 }
sbcIndirecty16()1681 static inline void sbcIndirecty16()
1682 {
1683 unsigned long templ;
1684 unsigned short tempw;
1685 addr=indirecty();
1686 tempw=readmemw(addr);
1687 if (p.d) { SBCBCD16(); } else { SBC16(); }
1688 }
sbcIndirectLong16()1689 static inline void sbcIndirectLong16()
1690 {
1691 unsigned long templ;
1692 unsigned short tempw;
1693 addr=indirectl();
1694 tempw=readmemw(addr);
1695 if (p.d) { SBCBCD16(); } else { SBC16(); }
1696 }
sbcIndirectLongy16()1697 static inline void sbcIndirectLongy16()
1698 {
1699 unsigned long templ;
1700 unsigned short tempw;
1701 addr=indirectly();
1702 tempw=readmemw(addr);
1703 if (p.d) { SBCBCD16(); } else { SBC16(); }
1704 }
1705
1706 /*EOR group*/
eorImm8()1707 static inline void eorImm8()
1708 {
1709 a.b.l^=snes_readmem(pbr|pc); pc++;
1710 setzn8(a.b.l);
1711 }
eorZp8()1712 static inline void eorZp8()
1713 {
1714 addr=zeropage();
1715 a.b.l^=snes_readmem(addr);
1716 setzn8(a.b.l);
1717 }
eorZpx8()1718 static inline void eorZpx8()
1719 {
1720 addr=zeropagex();
1721 a.b.l^=snes_readmem(addr);
1722 setzn8(a.b.l);
1723 }
eorSp8()1724 static inline void eorSp8()
1725 {
1726 addr=stack();
1727 a.b.l^=snes_readmem(addr);
1728 setzn8(a.b.l);
1729 }
eorAbs8()1730 static inline void eorAbs8()
1731 {
1732 addr=absolute();
1733 a.b.l^=snes_readmem(addr);
1734 setzn8(a.b.l);
1735 }
eorAbsx8()1736 static inline void eorAbsx8()
1737 {
1738 addr=absolutex();
1739 a.b.l^=snes_readmem(addr);
1740 setzn8(a.b.l);
1741 }
eorAbsy8()1742 static inline void eorAbsy8()
1743 {
1744 addr=absolutey();
1745 a.b.l^=snes_readmem(addr);
1746 setzn8(a.b.l);
1747 }
eorLong8()1748 static inline void eorLong8()
1749 {
1750 addr=absolutelong();
1751 a.b.l^=snes_readmem(addr);
1752 setzn8(a.b.l);
1753 }
eorLongx8()1754 static inline void eorLongx8()
1755 {
1756 addr=absolutelongx();
1757 a.b.l^=snes_readmem(addr);
1758 setzn8(a.b.l);
1759 }
eorIndirect8()1760 static inline void eorIndirect8()
1761 {
1762 addr=indirect();
1763 a.b.l^=snes_readmem(addr);
1764 setzn8(a.b.l);
1765 }
eorIndirectx8()1766 static inline void eorIndirectx8()
1767 {
1768 addr=indirectx();
1769 a.b.l^=snes_readmem(addr);
1770 setzn8(a.b.l);
1771 }
1772
eorIndirecty8()1773 static inline void eorIndirecty8()
1774 {
1775 addr=indirecty();
1776 a.b.l^=snes_readmem(addr);
1777 setzn8(a.b.l);
1778 }
1779
eorIndirectLong8()1780 static inline void eorIndirectLong8()
1781 {
1782 addr=indirectl();
1783 a.b.l^=snes_readmem(addr);
1784 setzn8(a.b.l);
1785 }
1786
eorIndirectLongy8()1787 static inline void eorIndirectLongy8()
1788 {
1789 addr=indirectly();
1790 a.b.l^=snes_readmem(addr);
1791 setzn8(a.b.l);
1792 }
1793
eorImm16()1794 static inline void eorImm16()
1795 {
1796 a.w^=readmemw(pbr|pc); pc+=2;
1797 setzn16(a.w);
1798 }
1799
eorZp16()1800 static inline void eorZp16()
1801 {
1802 addr=zeropage();
1803 a.w^=readmemw(addr);
1804 setzn16(a.w);
1805 }
1806
eorZpx16()1807 static inline void eorZpx16()
1808 {
1809 addr=zeropagex();
1810 a.w^=readmemw(addr);
1811 setzn16(a.w);
1812 }
1813
eorSp16()1814 static inline void eorSp16()
1815 {
1816 addr=stack();
1817 a.w^=readmemw(addr);
1818 setzn16(a.w);
1819 }
1820
eorAbs16()1821 static inline void eorAbs16()
1822 {
1823 addr=absolute();
1824 a.w^=readmemw(addr);
1825 setzn16(a.w);
1826 }
1827
eorAbsx16()1828 static inline void eorAbsx16()
1829 {
1830 addr=absolutex();
1831 a.w^=readmemw(addr);
1832 setzn16(a.w);
1833 }
1834
eorAbsy16()1835 static inline void eorAbsy16()
1836 {
1837 addr=absolutey();
1838 a.w^=readmemw(addr);
1839 setzn16(a.w);
1840 }
1841
eorLong16()1842 static inline void eorLong16()
1843 {
1844 addr=absolutelong();
1845 a.w^=readmemw(addr);
1846 setzn16(a.w);
1847 }
1848
eorLongx16()1849 static inline void eorLongx16()
1850 {
1851 addr=absolutelongx();
1852 a.w^=readmemw(addr);
1853 setzn16(a.w);
1854 }
1855
eorIndirect16()1856 static inline void eorIndirect16()
1857 {
1858 addr=indirect();
1859 a.w^=readmemw(addr);
1860 setzn16(a.w);
1861 }
eorIndirectx16()1862 static inline void eorIndirectx16()
1863 {
1864 addr=indirectx();
1865 a.w^=readmemw(addr);
1866 setzn16(a.w);
1867 }
1868
eorIndirecty16()1869 static inline void eorIndirecty16()
1870 {
1871 addr=indirecty();
1872 a.w^=readmemw(addr);
1873 setzn16(a.w);
1874 }
1875
eorIndirectLong16()1876 static inline void eorIndirectLong16()
1877 {
1878 addr=indirectl();
1879 a.w^=readmemw(addr);
1880 setzn16(a.w);
1881 }
1882
eorIndirectLongy16()1883 static inline void eorIndirectLongy16()
1884 {
1885 addr=indirectly();
1886 a.w^=readmemw(addr);
1887 setzn16(a.w);
1888 }
1889
1890 /*AND group*/
andImm8()1891 static inline void andImm8()
1892 {
1893 a.b.l&=snes_readmem(pbr|pc); pc++;
1894 setzn8(a.b.l);
1895 }
andZp8()1896 static inline void andZp8()
1897 {
1898 addr=zeropage();
1899 a.b.l&=snes_readmem(addr);
1900 setzn8(a.b.l);
1901 }
andZpx8()1902 static inline void andZpx8()
1903 {
1904 addr=zeropagex();
1905 a.b.l&=snes_readmem(addr);
1906 setzn8(a.b.l);
1907 }
1908
andSp8()1909 static inline void andSp8()
1910 {
1911 addr=stack();
1912 a.b.l&=snes_readmem(addr);
1913 setzn8(a.b.l);
1914 }
andAbs8()1915 static inline void andAbs8()
1916 {
1917 addr=absolute();
1918 a.b.l&=snes_readmem(addr);
1919 setzn8(a.b.l);
1920 }
andAbsx8()1921 static inline void andAbsx8()
1922 {
1923 addr=absolutex();
1924 a.b.l&=snes_readmem(addr);
1925 setzn8(a.b.l);
1926 }
andAbsy8()1927 static inline void andAbsy8()
1928 {
1929 addr=absolutey();
1930 a.b.l&=snes_readmem(addr);
1931 setzn8(a.b.l);
1932 }
andLong8()1933 static inline void andLong8()
1934 {
1935 addr=absolutelong();
1936 a.b.l&=snes_readmem(addr);
1937 setzn8(a.b.l);
1938 }
andLongx8()1939 static inline void andLongx8()
1940 {
1941 addr=absolutelongx();
1942 a.b.l&=snes_readmem(addr);
1943 setzn8(a.b.l);
1944 }
andIndirect8()1945 static inline void andIndirect8()
1946 {
1947 addr=indirect();
1948 a.b.l&=snes_readmem(addr);
1949 setzn8(a.b.l);
1950 }
andIndirectx8()1951 static inline void andIndirectx8()
1952 {
1953 addr=indirectx();
1954 a.b.l&=snes_readmem(addr);
1955 setzn8(a.b.l);
1956 }
andIndirecty8()1957 static inline void andIndirecty8()
1958 {
1959 addr=indirecty();
1960 a.b.l&=snes_readmem(addr);
1961 setzn8(a.b.l);
1962 }
andIndirectLong8()1963 static inline void andIndirectLong8()
1964 {
1965 addr=indirectl();
1966 a.b.l&=snes_readmem(addr);
1967 setzn8(a.b.l);
1968 }
andIndirectLongy8()1969 static inline void andIndirectLongy8()
1970 {
1971 addr=indirectly();
1972 a.b.l&=snes_readmem(addr);
1973 setzn8(a.b.l);
1974 }
1975
andImm16()1976 static inline void andImm16()
1977 {
1978 a.w&=readmemw(pbr|pc); pc+=2;
1979 setzn16(a.w);
1980 }
andZp16()1981 static inline void andZp16()
1982 {
1983 addr=zeropage();
1984 a.w&=readmemw(addr);
1985 setzn16(a.w);
1986 }
andZpx16()1987 static inline void andZpx16()
1988 {
1989 addr=zeropagex();
1990 a.w&=readmemw(addr);
1991 setzn16(a.w);
1992 }
andSp16()1993 static inline void andSp16()
1994 {
1995 addr=stack();
1996 a.w&=readmemw(addr);
1997 setzn16(a.w);
1998 }
andAbs16()1999 static inline void andAbs16()
2000 {
2001 addr=absolute();
2002 a.w&=readmemw(addr);
2003 setzn16(a.w);
2004 }
andAbsx16()2005 static inline void andAbsx16()
2006 {
2007 addr=absolutex();
2008 a.w&=readmemw(addr);
2009 setzn16(a.w);
2010 }
andAbsy16()2011 static inline void andAbsy16()
2012 {
2013 addr=absolutey();
2014 a.w&=readmemw(addr);
2015 setzn16(a.w);
2016 }
andLong16()2017 static inline void andLong16()
2018 {
2019 addr=absolutelong();
2020 a.w&=readmemw(addr);
2021 setzn16(a.w);
2022 }
andLongx16()2023 static inline void andLongx16()
2024 {
2025 addr=absolutelongx();
2026 a.w&=readmemw(addr);
2027 setzn16(a.w);
2028 }
andIndirect16()2029 static inline void andIndirect16()
2030 {
2031 addr=indirect();
2032 a.w&=readmemw(addr);
2033 setzn16(a.w);
2034 }
andIndirectx16()2035 static inline void andIndirectx16()
2036 {
2037 addr=indirectx();
2038 a.w&=readmemw(addr);
2039 setzn16(a.w);
2040 }
andIndirecty16()2041 static inline void andIndirecty16()
2042 {
2043 addr=indirecty();
2044 a.w&=readmemw(addr);
2045 setzn16(a.w);
2046 }
andIndirectLong16()2047 static inline void andIndirectLong16()
2048 {
2049 addr=indirectl();
2050 a.w&=readmemw(addr);
2051 setzn16(a.w);
2052 }
andIndirectLongy16()2053 static inline void andIndirectLongy16()
2054 {
2055 addr=indirectly();
2056 a.w&=readmemw(addr);
2057 setzn16(a.w);
2058 }
2059
2060 /*ORA group*/
oraImm8()2061 static inline void oraImm8()
2062 {
2063 a.b.l|=snes_readmem(pbr|pc); pc++;
2064 setzn8(a.b.l);
2065 }
oraZp8()2066 static inline void oraZp8()
2067 {
2068 addr=zeropage();
2069 a.b.l|=snes_readmem(addr);
2070 setzn8(a.b.l);
2071 }
oraZpx8()2072 static inline void oraZpx8()
2073 {
2074 addr=zeropagex();
2075 a.b.l|=snes_readmem(addr);
2076 setzn8(a.b.l);
2077 }
oraSp8()2078 static inline void oraSp8()
2079 {
2080 addr=stack();
2081 a.b.l|=snes_readmem(addr);
2082 setzn8(a.b.l);
2083 }
oraAbs8()2084 static inline void oraAbs8()
2085 {
2086 addr=absolute();
2087 a.b.l|=snes_readmem(addr);
2088 setzn8(a.b.l);
2089 }
oraAbsx8()2090 static inline void oraAbsx8()
2091 {
2092 addr=absolutex();
2093 a.b.l|=snes_readmem(addr);
2094 setzn8(a.b.l);
2095 }
oraAbsy8()2096 static inline void oraAbsy8()
2097 {
2098 addr=absolutey();
2099 a.b.l|=snes_readmem(addr);
2100 setzn8(a.b.l);
2101 }
oraLong8()2102 static inline void oraLong8()
2103 {
2104 addr=absolutelong();
2105 a.b.l|=snes_readmem(addr);
2106 setzn8(a.b.l);
2107 }
oraLongx8()2108 static inline void oraLongx8()
2109 {
2110 addr=absolutelongx();
2111 a.b.l|=snes_readmem(addr);
2112 setzn8(a.b.l);
2113 }
oraIndirect8()2114 static inline void oraIndirect8()
2115 {
2116 addr=indirect();
2117 a.b.l|=snes_readmem(addr);
2118 setzn8(a.b.l);
2119 }
oraIndirectx8()2120 static inline void oraIndirectx8()
2121 {
2122 addr=indirectx();
2123 a.b.l|=snes_readmem(addr);
2124 setzn8(a.b.l);
2125 }
oraIndirecty8()2126 static inline void oraIndirecty8()
2127 {
2128 addr=indirecty();
2129 a.b.l|=snes_readmem(addr);
2130 setzn8(a.b.l);
2131 }
oraIndirectLong8()2132 static inline void oraIndirectLong8()
2133 {
2134 addr=indirectl();
2135 a.b.l|=snes_readmem(addr);
2136 setzn8(a.b.l);
2137 }
oraIndirectLongy8()2138 static inline void oraIndirectLongy8()
2139 {
2140 addr=indirectly();
2141 a.b.l|=snes_readmem(addr);
2142 setzn8(a.b.l);
2143 }
2144
oraImm16()2145 static inline void oraImm16()
2146 {
2147 a.w|=readmemw(pbr|pc); pc+=2;
2148 setzn16(a.w);
2149 }
oraZp16()2150 static inline void oraZp16()
2151 {
2152 addr=zeropage();
2153 a.w|=readmemw(addr);
2154 setzn16(a.w);
2155 }
oraZpx16()2156 static inline void oraZpx16()
2157 {
2158 addr=zeropagex();
2159 a.w|=readmemw(addr);
2160 setzn16(a.w);
2161 }
oraSp16()2162 static inline void oraSp16()
2163 {
2164 addr=stack();
2165 a.w|=readmemw(addr);
2166 setzn16(a.w);
2167 }
oraAbs16()2168 static inline void oraAbs16()
2169 {
2170 addr=absolute();
2171 a.w|=readmemw(addr);
2172 setzn16(a.w);
2173 }
oraAbsx16()2174 static inline void oraAbsx16()
2175 {
2176 addr=absolutex();
2177 a.w|=readmemw(addr);
2178 setzn16(a.w);
2179 }
oraAbsy16()2180 static inline void oraAbsy16()
2181 {
2182 addr=absolutey();
2183 a.w|=readmemw(addr);
2184 setzn16(a.w);
2185 }
oraLong16()2186 static inline void oraLong16()
2187 {
2188 addr=absolutelong();
2189 a.w|=readmemw(addr);
2190 setzn16(a.w);
2191 }
oraLongx16()2192 static inline void oraLongx16()
2193 {
2194 addr=absolutelongx();
2195 a.w|=readmemw(addr);
2196 setzn16(a.w);
2197 }
oraIndirect16()2198 static inline void oraIndirect16()
2199 {
2200 addr=indirect();
2201 a.w|=readmemw(addr);
2202 setzn16(a.w);
2203 }
oraIndirectx16()2204 static inline void oraIndirectx16()
2205 {
2206 addr=indirectx();
2207 a.w|=readmemw(addr);
2208 setzn16(a.w);
2209 }
oraIndirecty16()2210 static inline void oraIndirecty16()
2211 {
2212 addr=indirecty();
2213 a.w|=readmemw(addr);
2214 setzn16(a.w);
2215 }
oraIndirectLong16()2216 static inline void oraIndirectLong16()
2217 {
2218 addr=indirectl();
2219 a.w|=readmemw(addr);
2220 setzn16(a.w);
2221 }
oraIndirectLongy16()2222 static inline void oraIndirectLongy16()
2223 {
2224 addr=indirectly();
2225 a.w|=readmemw(addr);
2226 setzn16(a.w);
2227 }
2228
2229 /*BIT group*/
bitImm8()2230 static inline void bitImm8()
2231 {
2232 unsigned char temp=snes_readmem(pbr|pc); pc++;
2233 p.z=!(temp&a.b.l);
2234 }
bitImm16()2235 static inline void bitImm16()
2236 {
2237 unsigned short temp=readmemw(pbr|pc); pc+=2;
2238 p.z=!(temp&a.w);
2239 setzf=0;
2240 }
2241
bitZp8()2242 static inline void bitZp8()
2243 {
2244 unsigned char temp;
2245 addr=zeropage();
2246 temp=snes_readmem(addr);
2247 p.z=!(temp&a.b.l);
2248 p.v=temp&0x40;
2249 p.n=temp&0x80;
2250 }
bitZp16()2251 static inline void bitZp16()
2252 {
2253 unsigned short temp;
2254 addr=zeropage();
2255 temp=readmemw(addr);
2256 p.z=!(temp&a.w);
2257 p.v=temp&0x4000;
2258 p.n=temp&0x8000;
2259 }
2260
bitZpx8()2261 static inline void bitZpx8()
2262 {
2263 unsigned char temp;
2264 addr=zeropagex();
2265 temp=snes_readmem(addr);
2266 p.z=!(temp&a.b.l);
2267 p.v=temp&0x40;
2268 p.n=temp&0x80;
2269 }
bitZpx16()2270 static inline void bitZpx16()
2271 {
2272 unsigned short temp;
2273 addr=zeropagex();
2274 temp=readmemw(addr);
2275 p.z=!(temp&a.w);
2276 p.v=temp&0x4000;
2277 p.n=temp&0x8000;
2278 }
2279
bitAbs8()2280 static inline void bitAbs8()
2281 {
2282 unsigned char temp;
2283 addr=absolute();
2284 temp=snes_readmem(addr);
2285 p.z=!(temp&a.b.l);
2286 p.v=temp&0x40;
2287 p.n=temp&0x80;
2288 }
bitAbs16()2289 static inline void bitAbs16()
2290 {
2291 unsigned short temp;
2292 addr=absolute();
2293 temp=readmemw(addr);
2294 p.z=!(temp&a.w);
2295 p.v=temp&0x4000;
2296 p.n=temp&0x8000;
2297 }
2298
bitAbsx8()2299 static inline void bitAbsx8()
2300 {
2301 unsigned char temp;
2302 addr=absolutex();
2303 temp=snes_readmem(addr);
2304 p.z=!(temp&a.b.l);
2305 p.v=temp&0x40;
2306 p.n=temp&0x80;
2307 }
bitAbsx16()2308 static inline void bitAbsx16()
2309 {
2310 unsigned short temp;
2311 addr=absolutex();
2312 temp=readmemw(addr);
2313 p.z=!(temp&a.w);
2314 p.v=temp&0x4000;
2315 p.n=temp&0x8000;
2316 }
2317
2318 /*CMP group*/
cmpImm8()2319 static inline void cmpImm8()
2320 {
2321 unsigned char temp;
2322 temp=snes_readmem(pbr|pc); pc++;
2323 setzn8(a.b.l-temp);
2324 p.c=(a.b.l>=temp);
2325 }
cmpZp8()2326 static inline void cmpZp8()
2327 {
2328 unsigned char temp;
2329 addr=zeropage();
2330 temp=snes_readmem(addr);
2331 setzn8(a.b.l-temp);
2332 p.c=(a.b.l>=temp);
2333 }
cmpZpx8()2334 static inline void cmpZpx8()
2335 {
2336 unsigned char temp;
2337 addr=zeropagex();
2338 temp=snes_readmem(addr);
2339 setzn8(a.b.l-temp);
2340 p.c=(a.b.l>=temp);
2341 }
cmpSp8()2342 static inline void cmpSp8()
2343 {
2344 unsigned char temp;
2345 addr=stack();
2346 temp=snes_readmem(addr);
2347 setzn8(a.b.l-temp);
2348 p.c=(a.b.l>=temp);
2349 }
cmpAbs8()2350 static inline void cmpAbs8()
2351 {
2352 unsigned char temp;
2353 addr=absolute();
2354 temp=snes_readmem(addr);
2355 setzn8(a.b.l-temp);
2356 p.c=(a.b.l>=temp);
2357 }
cmpAbsx8()2358 static inline void cmpAbsx8()
2359 {
2360 unsigned char temp;
2361 addr=absolutex();
2362 temp=snes_readmem(addr);
2363 setzn8(a.b.l-temp);
2364 p.c=(a.b.l>=temp);
2365 }
cmpAbsy8()2366 static inline void cmpAbsy8()
2367 {
2368 unsigned char temp;
2369 addr=absolutey();
2370 temp=snes_readmem(addr);
2371 setzn8(a.b.l-temp);
2372 p.c=(a.b.l>=temp);
2373 }
cmpLong8()2374 static inline void cmpLong8()
2375 {
2376 unsigned char temp;
2377 addr=absolutelong();
2378 temp=snes_readmem(addr);
2379 setzn8(a.b.l-temp);
2380 p.c=(a.b.l>=temp);
2381 }
cmpLongx8()2382 static inline void cmpLongx8()
2383 {
2384 unsigned char temp;
2385 addr=absolutelongx();
2386 temp=snes_readmem(addr);
2387 setzn8(a.b.l-temp);
2388 p.c=(a.b.l>=temp);
2389 }
cmpIndirect8()2390 static inline void cmpIndirect8()
2391 {
2392 unsigned char temp;
2393 addr=indirect();
2394 temp=snes_readmem(addr);
2395 setzn8(a.b.l-temp);
2396 p.c=(a.b.l>=temp);
2397 }
cmpIndirectx8()2398