Previous 15994 Revisions Next

r8917 Friday 27th August, 2010 at 08:46:35 UTC by Miodrag Milanović
Forced usage of opcode table for m6809
[src/emu/cpu/m6809]6809tbl.c m6809.c

src/emu/cpu/m6809/m6809.c
r8916r8917
7474#include "debugger.h"
7575#include "m6809.h"
7676
77/* Enable big switch statement for the main opcodes */
78#ifndef BIG_SWITCH
79#define BIG_SWITCH  1
80#endif
81
8277#define VERBOSE 0
8378
8479#define LOG(x)   do { if (VERBOSE) logerror x; } while (0)
r8916r8917
508503
509504         m68_state->ireg = ROP(PCD);
510505         PC++;
511#if BIG_SWITCH
512            switch( m68_state->ireg )
513         {
514         case 0x00: neg_di(m68_state);    break;
515         case 0x01: neg_di(m68_state);    break;   /* undocumented */
516         case 0x02: IIError(m68_state);   break;
517         case 0x03: com_di(m68_state);    break;
518         case 0x04: lsr_di(m68_state);    break;
519         case 0x05: IIError(m68_state);   break;
520         case 0x06: ror_di(m68_state);    break;
521         case 0x07: asr_di(m68_state);    break;
522         case 0x08: asl_di(m68_state);    break;
523         case 0x09: rol_di(m68_state);    break;
524         case 0x0a: dec_di(m68_state);    break;
525         case 0x0b: IIError(m68_state);   break;
526         case 0x0c: inc_di(m68_state);    break;
527         case 0x0d: tst_di(m68_state);    break;
528         case 0x0e: jmp_di(m68_state);    break;
529         case 0x0f: clr_di(m68_state);    break;
530         case 0x10: pref10(m68_state);                break;
531         case 0x11: pref11(m68_state);                break;
532         case 0x12: nop(m68_state);       break;
533         case 0x13: sync(m68_state);       break;
534         case 0x14: IIError(m68_state);   break;
535         case 0x15: IIError(m68_state);   break;
536         case 0x16: lbra(m68_state);       break;
537         case 0x17: lbsr(m68_state);       break;
538         case 0x18: IIError(m68_state);   break;
539         case 0x19: daa(m68_state);       break;
540         case 0x1a: orcc(m68_state);       break;
541         case 0x1b: IIError(m68_state);   break;
542         case 0x1c: andcc(m68_state);     break;
543         case 0x1d: sex(m68_state);       break;
544         case 0x1e: exg(m68_state);       break;
545         case 0x1f: tfr(m68_state);       break;
546         case 0x20: bra(m68_state);       break;
547         case 0x21: brn(m68_state);       break;
548         case 0x22: bhi(m68_state);       break;
549         case 0x23: bls(m68_state);       break;
550         case 0x24: bcc(m68_state);       break;
551         case 0x25: bcs(m68_state);       break;
552         case 0x26: bne(m68_state);       break;
553         case 0x27: beq(m68_state);       break;
554         case 0x28: bvc(m68_state);       break;
555         case 0x29: bvs(m68_state);       break;
556         case 0x2a: bpl(m68_state);       break;
557         case 0x2b: bmi(m68_state);       break;
558         case 0x2c: bge(m68_state);       break;
559         case 0x2d: blt(m68_state);       break;
560         case 0x2e: bgt(m68_state);       break;
561         case 0x2f: ble(m68_state);       break;
562         case 0x30: leax(m68_state);       break;
563         case 0x31: leay(m68_state);       break;
564         case 0x32: leas(m68_state);       break;
565         case 0x33: leau(m68_state);       break;
566         case 0x34: pshs(m68_state);       break;
567         case 0x35: puls(m68_state);       break;
568         case 0x36: pshu(m68_state);       break;
569         case 0x37: pulu(m68_state);       break;
570         case 0x38: IIError(m68_state);   break;
571         case 0x39: rts(m68_state);       break;
572         case 0x3a: abx(m68_state);       break;
573         case 0x3b: rti(m68_state);       break;
574         case 0x3c: cwai(m68_state);       break;
575         case 0x3d: mul(m68_state);       break;
576         case 0x3e: IIError(m68_state);   break;
577         case 0x3f: swi(m68_state);       break;
578         case 0x40: nega(m68_state);       break;
579         case 0x41: IIError(m68_state);   break;
580         case 0x42: IIError(m68_state);   break;
581         case 0x43: coma(m68_state);       break;
582         case 0x44: lsra(m68_state);       break;
583         case 0x45: IIError(m68_state);   break;
584         case 0x46: rora(m68_state);       break;
585         case 0x47: asra(m68_state);       break;
586         case 0x48: asla(m68_state);       break;
587         case 0x49: rola(m68_state);       break;
588         case 0x4a: deca(m68_state);       break;
589         case 0x4b: IIError(m68_state);   break;
590         case 0x4c: inca(m68_state);       break;
591         case 0x4d: tsta(m68_state);       break;
592         case 0x4e: IIError(m68_state);   break;
593         case 0x4f: clra(m68_state);       break;
594         case 0x50: negb(m68_state);       break;
595         case 0x51: IIError(m68_state);   break;
596         case 0x52: IIError(m68_state);   break;
597         case 0x53: comb(m68_state);       break;
598         case 0x54: lsrb(m68_state);       break;
599         case 0x55: IIError(m68_state);   break;
600         case 0x56: rorb(m68_state);       break;
601         case 0x57: asrb(m68_state);       break;
602         case 0x58: aslb(m68_state);       break;
603         case 0x59: rolb(m68_state);       break;
604         case 0x5a: decb(m68_state);       break;
605         case 0x5b: IIError(m68_state);   break;
606         case 0x5c: incb(m68_state);       break;
607         case 0x5d: tstb(m68_state);       break;
608         case 0x5e: IIError(m68_state);   break;
609         case 0x5f: clrb(m68_state);       break;
610         case 0x60: neg_ix(m68_state);    break;
611         case 0x61: IIError(m68_state);   break;
612         case 0x62: IIError(m68_state);   break;
613         case 0x63: com_ix(m68_state);    break;
614         case 0x64: lsr_ix(m68_state);    break;
615         case 0x65: IIError(m68_state);   break;
616         case 0x66: ror_ix(m68_state);    break;
617         case 0x67: asr_ix(m68_state);    break;
618         case 0x68: asl_ix(m68_state);    break;
619         case 0x69: rol_ix(m68_state);    break;
620         case 0x6a: dec_ix(m68_state);    break;
621         case 0x6b: IIError(m68_state);   break;
622         case 0x6c: inc_ix(m68_state);    break;
623         case 0x6d: tst_ix(m68_state);    break;
624         case 0x6e: jmp_ix(m68_state);    break;
625         case 0x6f: clr_ix(m68_state);    break;
626         case 0x70: neg_ex(m68_state);    break;
627         case 0x71: IIError(m68_state);   break;
628         case 0x72: IIError(m68_state);   break;
629         case 0x73: com_ex(m68_state);    break;
630         case 0x74: lsr_ex(m68_state);    break;
631         case 0x75: IIError(m68_state);   break;
632         case 0x76: ror_ex(m68_state);    break;
633         case 0x77: asr_ex(m68_state);    break;
634         case 0x78: asl_ex(m68_state);    break;
635         case 0x79: rol_ex(m68_state);    break;
636         case 0x7a: dec_ex(m68_state);    break;
637         case 0x7b: IIError(m68_state);   break;
638         case 0x7c: inc_ex(m68_state);    break;
639         case 0x7d: tst_ex(m68_state);    break;
640         case 0x7e: jmp_ex(m68_state);    break;
641         case 0x7f: clr_ex(m68_state);    break;
642         case 0x80: suba_im(m68_state);   break;
643         case 0x81: cmpa_im(m68_state);   break;
644         case 0x82: sbca_im(m68_state);   break;
645         case 0x83: subd_im(m68_state);   break;
646         case 0x84: anda_im(m68_state);   break;
647         case 0x85: bita_im(m68_state);   break;
648         case 0x86: lda_im(m68_state);    break;
649         case 0x87: sta_im(m68_state);    break;
650         case 0x88: eora_im(m68_state);   break;
651         case 0x89: adca_im(m68_state);   break;
652         case 0x8a: ora_im(m68_state);    break;
653         case 0x8b: adda_im(m68_state);   break;
654         case 0x8c: cmpx_im(m68_state);   break;
655         case 0x8d: bsr(m68_state);       break;
656         case 0x8e: ldx_im(m68_state);    break;
657         case 0x8f: stx_im(m68_state);    break;
658         case 0x90: suba_di(m68_state);   break;
659         case 0x91: cmpa_di(m68_state);   break;
660         case 0x92: sbca_di(m68_state);   break;
661         case 0x93: subd_di(m68_state);   break;
662         case 0x94: anda_di(m68_state);   break;
663         case 0x95: bita_di(m68_state);   break;
664         case 0x96: lda_di(m68_state);    break;
665         case 0x97: sta_di(m68_state);    break;
666         case 0x98: eora_di(m68_state);   break;
667         case 0x99: adca_di(m68_state);   break;
668         case 0x9a: ora_di(m68_state);    break;
669         case 0x9b: adda_di(m68_state);   break;
670         case 0x9c: cmpx_di(m68_state);   break;
671         case 0x9d: jsr_di(m68_state);    break;
672         case 0x9e: ldx_di(m68_state);    break;
673         case 0x9f: stx_di(m68_state);    break;
674         case 0xa0: suba_ix(m68_state);   break;
675         case 0xa1: cmpa_ix(m68_state);   break;
676         case 0xa2: sbca_ix(m68_state);   break;
677         case 0xa3: subd_ix(m68_state);   break;
678         case 0xa4: anda_ix(m68_state);   break;
679         case 0xa5: bita_ix(m68_state);   break;
680         case 0xa6: lda_ix(m68_state);    break;
681         case 0xa7: sta_ix(m68_state);    break;
682         case 0xa8: eora_ix(m68_state);   break;
683         case 0xa9: adca_ix(m68_state);   break;
684         case 0xaa: ora_ix(m68_state);    break;
685         case 0xab: adda_ix(m68_state);   break;
686         case 0xac: cmpx_ix(m68_state);   break;
687         case 0xad: jsr_ix(m68_state);    break;
688         case 0xae: ldx_ix(m68_state);    break;
689         case 0xaf: stx_ix(m68_state);    break;
690         case 0xb0: suba_ex(m68_state);   break;
691         case 0xb1: cmpa_ex(m68_state);   break;
692         case 0xb2: sbca_ex(m68_state);   break;
693         case 0xb3: subd_ex(m68_state);   break;
694         case 0xb4: anda_ex(m68_state);   break;
695         case 0xb5: bita_ex(m68_state);   break;
696         case 0xb6: lda_ex(m68_state);    break;
697         case 0xb7: sta_ex(m68_state);    break;
698         case 0xb8: eora_ex(m68_state);   break;
699         case 0xb9: adca_ex(m68_state);   break;
700         case 0xba: ora_ex(m68_state);    break;
701         case 0xbb: adda_ex(m68_state);   break;
702         case 0xbc: cmpx_ex(m68_state);   break;
703         case 0xbd: jsr_ex(m68_state);    break;
704         case 0xbe: ldx_ex(m68_state);    break;
705         case 0xbf: stx_ex(m68_state);    break;
706         case 0xc0: subb_im(m68_state);   break;
707         case 0xc1: cmpb_im(m68_state);   break;
708         case 0xc2: sbcb_im(m68_state);   break;
709         case 0xc3: addd_im(m68_state);   break;
710         case 0xc4: andb_im(m68_state);   break;
711         case 0xc5: bitb_im(m68_state);   break;
712         case 0xc6: ldb_im(m68_state);    break;
713         case 0xc7: stb_im(m68_state);    break;
714         case 0xc8: eorb_im(m68_state);   break;
715         case 0xc9: adcb_im(m68_state);   break;
716         case 0xca: orb_im(m68_state);    break;
717         case 0xcb: addb_im(m68_state);   break;
718         case 0xcc: ldd_im(m68_state);    break;
719         case 0xcd: std_im(m68_state);    break;
720         case 0xce: ldu_im(m68_state);    break;
721         case 0xcf: stu_im(m68_state);    break;
722         case 0xd0: subb_di(m68_state);   break;
723         case 0xd1: cmpb_di(m68_state);   break;
724         case 0xd2: sbcb_di(m68_state);   break;
725         case 0xd3: addd_di(m68_state);   break;
726         case 0xd4: andb_di(m68_state);   break;
727         case 0xd5: bitb_di(m68_state);   break;
728         case 0xd6: ldb_di(m68_state);    break;
729         case 0xd7: stb_di(m68_state);    break;
730         case 0xd8: eorb_di(m68_state);   break;
731         case 0xd9: adcb_di(m68_state);   break;
732         case 0xda: orb_di(m68_state);    break;
733         case 0xdb: addb_di(m68_state);   break;
734         case 0xdc: ldd_di(m68_state);    break;
735         case 0xdd: std_di(m68_state);    break;
736         case 0xde: ldu_di(m68_state);    break;
737         case 0xdf: stu_di(m68_state);    break;
738         case 0xe0: subb_ix(m68_state);   break;
739         case 0xe1: cmpb_ix(m68_state);   break;
740         case 0xe2: sbcb_ix(m68_state);   break;
741         case 0xe3: addd_ix(m68_state);   break;
742         case 0xe4: andb_ix(m68_state);   break;
743         case 0xe5: bitb_ix(m68_state);   break;
744         case 0xe6: ldb_ix(m68_state);    break;
745         case 0xe7: stb_ix(m68_state);    break;
746         case 0xe8: eorb_ix(m68_state);   break;
747         case 0xe9: adcb_ix(m68_state);   break;
748         case 0xea: orb_ix(m68_state);    break;
749         case 0xeb: addb_ix(m68_state);   break;
750         case 0xec: ldd_ix(m68_state);    break;
751         case 0xed: std_ix(m68_state);    break;
752         case 0xee: ldu_ix(m68_state);    break;
753         case 0xef: stu_ix(m68_state);    break;
754         case 0xf0: subb_ex(m68_state);   break;
755         case 0xf1: cmpb_ex(m68_state);   break;
756         case 0xf2: sbcb_ex(m68_state);   break;
757         case 0xf3: addd_ex(m68_state);   break;
758         case 0xf4: andb_ex(m68_state);   break;
759         case 0xf5: bitb_ex(m68_state);   break;
760         case 0xf6: ldb_ex(m68_state);    break;
761         case 0xf7: stb_ex(m68_state);    break;
762         case 0xf8: eorb_ex(m68_state);   break;
763         case 0xf9: adcb_ex(m68_state);   break;
764         case 0xfa: orb_ex(m68_state);    break;
765         case 0xfb: addb_ex(m68_state);   break;
766         case 0xfc: ldd_ex(m68_state);    break;
767         case 0xfd: std_ex(m68_state);    break;
768         case 0xfe: ldu_ex(m68_state);    break;
769         case 0xff: stu_ex(m68_state);    break;
770         }
771#else
772                  (*m6809_main[m68_state->ireg])(m68_state);
773#endif    /* BIG_SWITCH */
774              m68_state->icount -= cycles1[m68_state->ireg];
506              (*m6809_main[m68_state->ireg])(m68_state);
507         m68_state->icount -= cycles1[m68_state->ireg];
775508
776509      } while( m68_state->icount > 0 );
777510
src/emu/cpu/m6809/6809tbl.c
r8916r8917
360360  /*F*/  5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6
361361};
362362
363#if (BIG_SWITCH==0)
364363static void (*const m6809_main[0x100])(m68_state_t *) = {
365364/*          0xX0,   0xX1,     0xX2,    0xX3,    0xX4,    0xX5,    0xX6,    0xX7,
366365            0xX8,   0xX9,     0xXA,    0xXB,    0xXC,    0xXD,    0xXE,    0xXF   */
r8916r8917
413412/* 0xFX */  subb_ex,cmpb_ex,sbcb_ex,addd_ex,andb_ex,bitb_ex,ldb_ex, stb_ex,
414413       eorb_ex,adcb_ex,orb_ex, addb_ex,ldd_ex, std_ex, ldu_ex, stu_ex
415414};
416#endif

Previous 15994 Revisions Next


© 1998-2018 The MESS Team