void MC6809::op(uint8 ireg)
{
- switch(ireg) {
- case 0x00: neg_di(); break;
- case 0x01: neg_di(); break;
- case 0x02: ngc_di(); break;
- case 0x03: com_di(); break;
- case 0x04: lsr_di(); break;
- case 0x05: lsr_di(); break;
- case 0x06: ror_di(); break;
- case 0x07: asr_di(); break;
- case 0x08: asl_di(); break;
- case 0x09: rol_di(); break;
- case 0x0a: dec_di(); break;
- case 0x0b: dcc_di(); break;
- case 0x0c: inc_di(); break;
- case 0x0d: tst_di(); break;
- case 0x0e: jmp_di(); break;
- case 0x0f: clr_di(); break;
-
- case 0x10: pref10(); break;
- case 0x11: pref11(); break;
- case 0x12: nop(); break;
- case 0x13: this->sync(); break;
- case 0x14: trap(); break;
- case 0x15: trap(); break;
- case 0x16: lbra(); break;
- case 0x17: lbsr(); break;
- case 0x18: aslcc_in(); break;
- case 0x19: daa(); break;
- case 0x1a: orcc(); break;
- case 0x1b: nop(); break;
- case 0x1c: andcc(); break;
- case 0x1d: sex(); break;
- case 0x1e: exg(); break;
- case 0x1f: tfr(); break;
-
- case 0x20: bra(); break;
- case 0x21: brn(); break;
- case 0x22: bhi(); break;
- case 0x23: bls(); break;
- case 0x24: bcc(); break;
- case 0x25: bcs(); break;
- case 0x26: bne(); break;
- case 0x27: beq(); break;
- case 0x28: bvc(); break;
- case 0x29: bvs(); break;
- case 0x2a: bpl(); break;
- case 0x2b: bmi(); break;
- case 0x2c: bge(); break;
- case 0x2d: blt(); break;
- case 0x2e: bgt(); break;
- case 0x2f: ble(); break;
-
- case 0x30: leax(); break;
- case 0x31: leay(); break;
- case 0x32: leas(); break;
- case 0x33: leau(); break;
- case 0x34: pshs(); break;
- case 0x35: puls(); break;
- case 0x36: pshu(); break;
- case 0x37: pulu(); break;
- case 0x38: andcc(); break;
- case 0x39: rts(); break;
- case 0x3a: abx(); break;
- case 0x3b: rti(); break;
- case 0x3c: cwai(); break;
- case 0x3d: mul(); break;
- case 0x3e: rst(); break;
- case 0x3f: swi(); break;
-
- case 0x40: nega(); break;
- case 0x41: nega(); break;
- case 0x42: ngca(); break;
- case 0x43: coma(); break;
- case 0x44: lsra(); break;
- case 0x45: lsra(); break;
- case 0x46: rora(); break;
- case 0x47: asra(); break;
- case 0x48: asla(); break;
- case 0x49: rola(); break;
- case 0x4a: deca(); break;
- case 0x4b: dcca(); break;
- case 0x4c: inca(); break;
- case 0x4d: tsta(); break;
- case 0x4e: clca(); break;
- case 0x4f: clra(); break;
-
- case 0x50: negb(); break;
- case 0x51: negb(); break;
- case 0x52: ngcb(); break;
- case 0x53: comb(); break;
- case 0x54: lsrb(); break;
- case 0x55: lsrb(); break;
- case 0x56: rorb(); break;
- case 0x57: asrb(); break;
- case 0x58: aslb(); break;
- case 0x59: rolb(); break;
- case 0x5a: decb(); break;
- case 0x5b: dccb(); break;
- case 0x5c: incb(); break;
- case 0x5d: tstb(); break;
- case 0x5e: clcb(); break;
- case 0x5f: clrb(); break;
-
- case 0x60: neg_ix(); break;
- case 0x61: neg_ix(); break;
- case 0x62: ngc_ix(); break;
- case 0x63: com_ix(); break;
- case 0x64: lsr_ix(); break;
- case 0x65: lsr_ix(); break;
- case 0x66: ror_ix(); break;
- case 0x67: asr_ix(); break;
- case 0x68: asl_ix(); break;
- case 0x69: rol_ix(); break;
- case 0x6a: dec_ix(); break;
- case 0x6b: dcc_ix(); break;
- case 0x6c: inc_ix(); break;
- case 0x6d: tst_ix(); break;
- case 0x6e: jmp_ix(); break;
- case 0x6f: clr_ix(); break;
-
- case 0x70: neg_ex(); break;
- case 0x71: neg_ex(); break;
- case 0x72: ngc_ex(); break;
- case 0x73: com_ex(); break;
- case 0x74: lsr_ex(); break;
- case 0x75: lsr_ex(); break;
- case 0x76: ror_ex(); break;
- case 0x77: asr_ex(); break;
- case 0x78: asl_ex(); break;
- case 0x79: rol_ex(); break;
- case 0x7a: dec_ex(); break;
- case 0x7b: dcc_ex(); break;
- case 0x7c: inc_ex(); break;
- case 0x7d: tst_ex(); break;
- case 0x7e: jmp_ex(); break;
- case 0x7f: clr_ex(); break;
-
- case 0x80: suba_im(); break;
- case 0x81: cmpa_im(); break;
- case 0x82: sbca_im(); break;
- case 0x83: subd_im(); break;
- case 0x84: anda_im(); break;
- case 0x85: bita_im(); break;
- case 0x86: lda_im(); break;
- case 0x87: flag8_im(); break;
- case 0x88: eora_im(); break;
- case 0x89: adca_im(); break;
- case 0x8a: ora_im(); break;
- case 0x8b: adda_im(); break;
- case 0x8c: cmpx_im(); break;
- case 0x8d: bsr(); break;
- case 0x8e: ldx_im(); break;
- case 0x8f: flag16_im(); break;
-
- case 0x90: suba_di(); break;
- case 0x91: cmpa_di(); break;
- case 0x92: sbca_di(); break;
- case 0x93: subd_di(); break;
- case 0x94: anda_di(); break;
- case 0x95: bita_di(); break;
- case 0x96: lda_di(); break;
- case 0x97: sta_di(); break;
- case 0x98: eora_di(); break;
- case 0x99: adca_di(); break;
- case 0x9a: ora_di(); break;
- case 0x9b: adda_di(); break;
- case 0x9c: cmpx_di(); break;
- case 0x9d: jsr_di(); break;
- case 0x9e: ldx_di(); break;
- case 0x9f: stx_di(); break;
-
- case 0xa0: suba_ix(); break;
- case 0xa1: cmpa_ix(); break;
- case 0xa2: sbca_ix(); break;
- case 0xa3: subd_ix(); break;
- case 0xa4: anda_ix(); break;
- case 0xa5: bita_ix(); break;
- case 0xa6: lda_ix(); break;
- case 0xa7: sta_ix(); break;
- case 0xa8: eora_ix(); break;
- case 0xa9: adca_ix(); break;
- case 0xaa: ora_ix(); break;
- case 0xab: adda_ix(); break;
- case 0xac: cmpx_ix(); break;
- case 0xad: jsr_ix(); break;
- case 0xae: ldx_ix(); break;
- case 0xaf: stx_ix(); break;
-
- case 0xb0: suba_ex(); break;
- case 0xb1: cmpa_ex(); break;
- case 0xb2: sbca_ex(); break;
- case 0xb3: subd_ex(); break;
- case 0xb4: anda_ex(); break;
- case 0xb5: bita_ex(); break;
- case 0xb6: lda_ex(); break;
- case 0xb7: sta_ex(); break;
- case 0xb8: eora_ex(); break;
- case 0xb9: adca_ex(); break;
- case 0xba: ora_ex(); break;
- case 0xbb: adda_ex(); break;
- case 0xbc: cmpx_ex(); break;
- case 0xbd: jsr_ex(); break;
- case 0xbe: ldx_ex(); break;
- case 0xbf: stx_ex(); break;
-
- case 0xc0: subb_im(); break;
- case 0xc1: cmpb_im(); break;
- case 0xc2: sbcb_im(); break;
- case 0xc3: addd_im(); break;
- case 0xc4: andb_im(); break;
- case 0xc5: bitb_im(); break;
- case 0xc6: ldb_im(); break;
- case 0xc7: flag8_im(); break;
- case 0xc8: eorb_im(); break;
- case 0xc9: adcb_im(); break;
- case 0xca: orb_im(); break;
- case 0xcb: addb_im(); break;
- case 0xcc: ldd_im(); break;
- case 0xcd: trap(); break;
-/* case 0xcd: std_im(); break; */
- case 0xce: ldu_im(); break;
- case 0xcf: flag16_im(); break;
-
- case 0xd0: subb_di(); break;
- case 0xd1: cmpb_di(); break;
- case 0xd2: sbcb_di(); break;
- case 0xd3: addd_di(); break;
- case 0xd4: andb_di(); break;
- case 0xd5: bitb_di(); break;
- case 0xd6: ldb_di(); break;
- case 0xd7: stb_di(); break;
- case 0xd8: eorb_di(); break;
- case 0xd9: adcb_di(); break;
- case 0xda: orb_di(); break;
- case 0xdb: addb_di(); break;
- case 0xdc: ldd_di(); break;
- case 0xdd: std_di(); break;
- case 0xde: ldu_di(); break;
- case 0xdf: stu_di(); break;
-
- case 0xe0: subb_ix(); break;
- case 0xe1: cmpb_ix(); break;
- case 0xe2: sbcb_ix(); break;
- case 0xe3: addd_ix(); break;
- case 0xe4: andb_ix(); break;
- case 0xe5: bitb_ix(); break;
- case 0xe6: ldb_ix(); break;
- case 0xe7: stb_ix(); break;
- case 0xe8: eorb_ix(); break;
- case 0xe9: adcb_ix(); break;
- case 0xea: orb_ix(); break;
- case 0xeb: addb_ix(); break;
- case 0xec: ldd_ix(); break;
- case 0xed: std_ix(); break;
- case 0xee: ldu_ix(); break;
- case 0xef: stu_ix(); break;
-
- case 0xf0: subb_ex(); break;
- case 0xf1: cmpb_ex(); break;
- case 0xf2: sbcb_ex(); break;
- case 0xf3: addd_ex(); break;
- case 0xf4: andb_ex(); break;
- case 0xf5: bitb_ex(); break;
- case 0xf6: ldb_ex(); break;
- case 0xf7: stb_ex(); break;
- case 0xf8: eorb_ex(); break;
- case 0xf9: adcb_ex(); break;
- case 0xfa: orb_ex(); break;
- case 0xfb: addb_ex(); break;
- case 0xfc: ldd_ex(); break;
- case 0xfd: std_ex(); break;
- case 0xfe: ldu_ex(); break;
- case 0xff: stu_ex(); break;
+ uint8 ireg_lo = ireg & 0x0f;
+ uint8 ireg_hi = (ireg & 0xf0) >> 4;
+ switch(ireg_hi) {
+ case 0x00:
+ switch(ireg) {
+ case 0x00: neg_di(); break;
+ case 0x01: neg_di(); break;
+ case 0x02: ngc_di(); break;
+ case 0x03: com_di(); break;
+ case 0x04: lsr_di(); break;
+ case 0x05: lsr_di(); break;
+ case 0x06: ror_di(); break;
+ case 0x07: asr_di(); break;
+ case 0x08: asl_di(); break;
+ case 0x09: rol_di(); break;
+ case 0x0a: dec_di(); break;
+ case 0x0b: dcc_di(); break;
+ case 0x0c: inc_di(); break;
+ case 0x0d: tst_di(); break;
+ case 0x0e: jmp_di(); break;
+ case 0x0f: clr_di(); break;
+ }
+ break;
+ case 0x01:
+ switch(ireg) {
+ case 0x10: pref10(); break;
+ case 0x11: pref11(); break;
+ case 0x12: nop(); break;
+ case 0x13: this->sync(); break;
+ case 0x14: trap(); break;
+ case 0x15: trap(); break;
+ case 0x16: lbra(); break;
+ case 0x17: lbsr(); break;
+ case 0x18: aslcc_in(); break;
+ case 0x19: daa(); break;
+ case 0x1a: orcc(); break;
+ case 0x1b: nop(); break;
+ case 0x1c: andcc(); break;
+ case 0x1d: sex(); break;
+ case 0x1e: exg(); break;
+ case 0x1f: tfr(); break;
+ }
+ break;
+ case 0x02:
+ switch(ireg){
+ case 0x20: bra(); break;
+ case 0x21: brn(); break;
+ case 0x22: bhi(); break;
+ case 0x23: bls(); break;
+ case 0x24: bcc(); break;
+ case 0x25: bcs(); break;
+ case 0x26: bne(); break;
+ case 0x27: beq(); break;
+ case 0x28: bvc(); break;
+ case 0x29: bvs(); break;
+ case 0x2a: bpl(); break;
+ case 0x2b: bmi(); break;
+ case 0x2c: bge(); break;
+ case 0x2d: blt(); break;
+ case 0x2e: bgt(); break;
+ case 0x2f: ble(); break;
+ }
+ break;
+ case 0x03:
+ switch(ireg){
+ case 0x30: leax(); break;
+ case 0x31: leay(); break;
+ case 0x32: leas(); break;
+ case 0x33: leau(); break;
+ case 0x34: pshs(); break;
+ case 0x35: puls(); break;
+ case 0x36: pshu(); break;
+ case 0x37: pulu(); break;
+ case 0x38: andcc(); break;
+ case 0x39: rts(); break;
+ case 0x3a: abx(); break;
+ case 0x3b: rti(); break;
+ case 0x3c: cwai(); break;
+ case 0x3d: mul(); break;
+ case 0x3e: rst(); break;
+ case 0x3f: swi(); break;
+ }
+ break;
+ case 0x04:
+ switch(ireg){
+ case 0x40: nega(); break;
+ case 0x41: nega(); break;
+ case 0x42: ngca(); break;
+ case 0x43: coma(); break;
+ case 0x44: lsra(); break;
+ case 0x45: lsra(); break;
+ case 0x46: rora(); break;
+ case 0x47: asra(); break;
+ case 0x48: asla(); break;
+ case 0x49: rola(); break;
+ case 0x4a: deca(); break;
+ case 0x4b: dcca(); break;
+ case 0x4c: inca(); break;
+ case 0x4d: tsta(); break;
+ case 0x4e: clca(); break;
+ case 0x4f: clra(); break;
+ }
+ break;
+ case 0x05:
+ switch(ireg){
+ case 0x50: negb(); break;
+ case 0x51: negb(); break;
+ case 0x52: ngcb(); break;
+ case 0x53: comb(); break;
+ case 0x54: lsrb(); break;
+ case 0x55: lsrb(); break;
+ case 0x56: rorb(); break;
+ case 0x57: asrb(); break;
+ case 0x58: aslb(); break;
+ case 0x59: rolb(); break;
+ case 0x5a: decb(); break;
+ case 0x5b: dccb(); break;
+ case 0x5c: incb(); break;
+ case 0x5d: tstb(); break;
+ case 0x5e: clcb(); break;
+ case 0x5f: clrb(); break;
+ }
+ break;
+ case 0x06:
+ switch(ireg){
+ case 0x60: neg_ix(); break;
+ case 0x61: neg_ix(); break;
+ case 0x62: ngc_ix(); break;
+ case 0x63: com_ix(); break;
+ case 0x64: lsr_ix(); break;
+ case 0x65: lsr_ix(); break;
+ case 0x66: ror_ix(); break;
+ case 0x67: asr_ix(); break;
+ case 0x68: asl_ix(); break;
+ case 0x69: rol_ix(); break;
+ case 0x6a: dec_ix(); break;
+ case 0x6b: dcc_ix(); break;
+ case 0x6c: inc_ix(); break;
+ case 0x6d: tst_ix(); break;
+ case 0x6e: jmp_ix(); break;
+ case 0x6f: clr_ix(); break;
+ }
+ break;
+ case 0x07:
+ switch(ireg){
+ case 0x70: neg_ex(); break;
+ case 0x71: neg_ex(); break;
+ case 0x72: ngc_ex(); break;
+ case 0x73: com_ex(); break;
+ case 0x74: lsr_ex(); break;
+ case 0x75: lsr_ex(); break;
+ case 0x76: ror_ex(); break;
+ case 0x77: asr_ex(); break;
+ case 0x78: asl_ex(); break;
+ case 0x79: rol_ex(); break;
+ case 0x7a: dec_ex(); break;
+ case 0x7b: dcc_ex(); break;
+ case 0x7c: inc_ex(); break;
+ case 0x7d: tst_ex(); break;
+ case 0x7e: jmp_ex(); break;
+ case 0x7f: clr_ex(); break;
+ }
+ break;
+ case 0x08:
+ switch(ireg){
+ case 0x80: suba_im(); break;
+ case 0x81: cmpa_im(); break;
+ case 0x82: sbca_im(); break;
+ case 0x83: subd_im(); break;
+ case 0x84: anda_im(); break;
+ case 0x85: bita_im(); break;
+ case 0x86: lda_im(); break;
+ case 0x87: flag8_im(); break;
+ case 0x88: eora_im(); break;
+ case 0x89: adca_im(); break;
+ case 0x8a: ora_im(); break;
+ case 0x8b: adda_im(); break;
+ case 0x8c: cmpx_im(); break;
+ case 0x8d: bsr(); break;
+ case 0x8e: ldx_im(); break;
+ case 0x8f: flag16_im(); break;
+ }
+ break;
+ case 0x09:
+ switch(ireg){
+ case 0x90: suba_di(); break;
+ case 0x91: cmpa_di(); break;
+ case 0x92: sbca_di(); break;
+ case 0x93: subd_di(); break;
+ case 0x94: anda_di(); break;
+ case 0x95: bita_di(); break;
+ case 0x96: lda_di(); break;
+ case 0x97: sta_di(); break;
+ case 0x98: eora_di(); break;
+ case 0x99: adca_di(); break;
+ case 0x9a: ora_di(); break;
+ case 0x9b: adda_di(); break;
+ case 0x9c: cmpx_di(); break;
+ case 0x9d: jsr_di(); break;
+ case 0x9e: ldx_di(); break;
+ case 0x9f: stx_di(); break;
+ }
+ break;
+ case 0x0a:
+ switch(ireg){
+ case 0xa0: suba_ix(); break;
+ case 0xa1: cmpa_ix(); break;
+ case 0xa2: sbca_ix(); break;
+ case 0xa3: subd_ix(); break;
+ case 0xa4: anda_ix(); break;
+ case 0xa5: bita_ix(); break;
+ case 0xa6: lda_ix(); break;
+ case 0xa7: sta_ix(); break;
+ case 0xa8: eora_ix(); break;
+ case 0xa9: adca_ix(); break;
+ case 0xaa: ora_ix(); break;
+ case 0xab: adda_ix(); break;
+ case 0xac: cmpx_ix(); break;
+ case 0xad: jsr_ix(); break;
+ case 0xae: ldx_ix(); break;
+ case 0xaf: stx_ix(); break;
+ }
+ break;
+ case 0x0b:
+ switch(ireg){
+ case 0xb0: suba_ex(); break;
+ case 0xb1: cmpa_ex(); break;
+ case 0xb2: sbca_ex(); break;
+ case 0xb3: subd_ex(); break;
+ case 0xb4: anda_ex(); break;
+ case 0xb5: bita_ex(); break;
+ case 0xb6: lda_ex(); break;
+ case 0xb7: sta_ex(); break;
+ case 0xb8: eora_ex(); break;
+ case 0xb9: adca_ex(); break;
+ case 0xba: ora_ex(); break;
+ case 0xbb: adda_ex(); break;
+ case 0xbc: cmpx_ex(); break;
+ case 0xbd: jsr_ex(); break;
+ case 0xbe: ldx_ex(); break;
+ case 0xbf: stx_ex(); break;
+ }
+ break;
+ case 0x0c:
+ switch(ireg){
+ case 0xc0: subb_im(); break;
+ case 0xc1: cmpb_im(); break;
+ case 0xc2: sbcb_im(); break;
+ case 0xc3: addd_im(); break;
+ case 0xc4: andb_im(); break;
+ case 0xc5: bitb_im(); break;
+ case 0xc6: ldb_im(); break;
+ case 0xc7: flag8_im(); break;
+ case 0xc8: eorb_im(); break;
+ case 0xc9: adcb_im(); break;
+ case 0xca: orb_im(); break;
+ case 0xcb: addb_im(); break;
+ case 0xcc: ldd_im(); break;
+ case 0xcd: trap(); break;
+ /* case 0xcd: std_im(); break; */
+ case 0xce: ldu_im(); break;
+ case 0xcf: flag16_im(); break;
+ }
+ break;
+ case 0x0d:
+ switch(ireg){
+ case 0xd0: subb_di(); break;
+ case 0xd1: cmpb_di(); break;
+ case 0xd2: sbcb_di(); break;
+ case 0xd3: addd_di(); break;
+ case 0xd4: andb_di(); break;
+ case 0xd5: bitb_di(); break;
+ case 0xd6: ldb_di(); break;
+ case 0xd7: stb_di(); break;
+ case 0xd8: eorb_di(); break;
+ case 0xd9: adcb_di(); break;
+ case 0xda: orb_di(); break;
+ case 0xdb: addb_di(); break;
+ case 0xdc: ldd_di(); break;
+ case 0xdd: std_di(); break;
+ case 0xde: ldu_di(); break;
+ case 0xdf: stu_di(); break;
+ }
+ break;
+ case 0x0e:
+ switch(ireg){
+ case 0xe0: subb_ix(); break;
+ case 0xe1: cmpb_ix(); break;
+ case 0xe2: sbcb_ix(); break;
+ case 0xe3: addd_ix(); break;
+ case 0xe4: andb_ix(); break;
+ case 0xe5: bitb_ix(); break;
+ case 0xe6: ldb_ix(); break;
+ case 0xe7: stb_ix(); break;
+ case 0xe8: eorb_ix(); break;
+ case 0xe9: adcb_ix(); break;
+ case 0xea: orb_ix(); break;
+ case 0xeb: addb_ix(); break;
+ case 0xec: ldd_ix(); break;
+ case 0xed: std_ix(); break;
+ case 0xee: ldu_ix(); break;
+ case 0xef: stu_ix(); break;
+ }
+ break;
+ case 0x0f:
+ switch(ireg){
+ case 0xf0: subb_ex(); break;
+ case 0xf1: cmpb_ex(); break;
+ case 0xf2: sbcb_ex(); break;
+ case 0xf3: addd_ex(); break;
+ case 0xf4: andb_ex(); break;
+ case 0xf5: bitb_ex(); break;
+ case 0xf6: ldb_ex(); break;
+ case 0xf7: stb_ex(); break;
+ case 0xf8: eorb_ex(); break;
+ case 0xf9: adcb_ex(); break;
+ case 0xfa: orb_ex(); break;
+ case 0xfb: addb_ex(); break;
+ case 0xfc: ldd_ex(); break;
+ case 0xfd: std_ex(); break;
+ case 0xfe: ldu_ex(); break;
+ case 0xff: stu_ex(); break;
+ }
+ break;
default: //__assume(0);
- trap(); break;
+ trap(); break;
}
};
inline void MC6809::fetch_effective_address()
{
uint8 postbyte = ROP_ARG(PCD);
- PC++;
+ uint8 postbyte_hi = (postbyte & 0xf0) >> 4;
+ uint8 postbyte_lo = postbyte & 0x0f;
+ uint16 reg_post;
+ PC++;
+#if 1
+ if(postbyte_hi < 8) { // $00-$7F
+ switch(postbyte_hi) {
+ case 0:
+ case 1:
+ reg_post = X;
+ break;
+ case 2:
+ case 3:
+ reg_post = Y;
+ break;
+ case 4:
+ case 5:
+ reg_post = U;
+ break;
+ case 6:
+ case 7:
+ reg_post = S;
+ break;
+ }
+ uint16 offset;
+ if((postbyte_hi & 0x01) == 0) { // +
+ offset = (uint16)postbyte_lo;
+ EA = reg_post + offset;
+ icount -= index_cycle_em[postbyte];
+ return;
+ } else { // -
+ EA = reg_post - 16 + (uint16)postbyte_lo;
+ icount -= index_cycle_em[postbyte];
+ return;
+ }
+ return;
+ } else { // $80-$FF
+
+ switch(postbyte) {
+ case 0x80: EA = X; X++; break;
+ case 0x81: EA = X; X += 2; break;
+ case 0x82: X--; EA = X; break;
+ case 0x83: X -= 2; EA = X; break;
+ case 0x84: EA = X; break;
+ case 0x85: EA = X + SIGNED(B); break;
+ case 0x86: EA = X + SIGNED(A); break;
+ case 0x87: EA = X + SIGNED(A); break; /* ILLEGAL*/
+ case 0x88: IMMBYTE(EA); EA = X + SIGNED(EA); break;
+ case 0x89: IMMWORD(EAP); EA += X; break;
+ case 0x8a: EA = PC; EA++; EA |= 0x00ff; break; /* IIError*/
+ case 0x8b: EA = X + D; break;
+ case 0x8c: IMMBYTE(EA); EA = PC + SIGNED(EA); break;
+ case 0x8d: IMMWORD(EAP); EA += PC; break;
+ case 0x8e: EA = 0xffff; break; /* ILLEGAL*/
+ case 0x8f: IMMWORD(EAP); break;
+
+ case 0x90: EA = X; X++; EAD = RM16(EAD); break; /* Indirect ,R+ not in my specs */
+ case 0x91: EA = X; X += 2; EAD = RM16(EAD); break;
+ case 0x92: X--; EA = X; EAD = RM16(EAD); break;
+ case 0x93: X -= 2; EA = X; EAD = RM16(EAD); break;
+ case 0x94: EA = X; EAD = RM16(EAD); break;
+ case 0x95: EA = X + SIGNED(B); EAD = RM16(EAD); break;
+ case 0x96: EA = X + SIGNED(A); EAD = RM16(EAD); break;
+ case 0x97: EA = X + SIGNED(A); EAD = RM16(EAD); break; /* ILLEGAL*/
+ case 0x98: IMMBYTE(EA); EA = X + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0x99: IMMWORD(EAP); EA += X; EAD = RM16(EAD); break;
+ case 0x9a: EA = PC; EA++; EA |= 0x00ff; EAD = RM16(EAD); break; /* ILLEGAL*/
+ case 0x9b: EA = X + D; EAD = RM16(EAD); break;
+ case 0x9c: IMMBYTE(EA); EA = PC + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0x9d: IMMWORD(EAP); EA += PC; EAD = RM16(EAD); break;
+ case 0x9e: EA = 0xffff; EAD = RM16(EAD); break; /* ILLEGAL*/
+ case 0x9f: IMMWORD(EAP); EAD = RM16(EAD); break;
+
+ case 0xa0: EA = Y; Y++; break;
+ case 0xa1: EA = Y; Y += 2; break;
+ case 0xa2: Y--; EA = Y; break;
+ case 0xa3: Y -= 2; EA = Y; break;
+ case 0xa4: EA = Y; break;
+ case 0xa5: EA = Y + SIGNED(B); break;
+ case 0xa6: EA = Y + SIGNED(A); break;
+ case 0xa7: EA = Y + SIGNED(A); break; /* ILLEGAL*/
+ case 0xa8: IMMBYTE(EA); EA = Y + SIGNED(EA); break;
+ case 0xa9: IMMWORD(EAP); EA += Y; break;
+ case 0xaa: EA = PC; EA++; EA |= 0x00ff; break; /* ILLEGAL*/
+ case 0xab: EA = Y + D; break;
+ case 0xac: IMMBYTE(EA); EA = PC + SIGNED(EA); break;
+ case 0xad: IMMWORD(EAP); EA += PC; break;
+ case 0xae: EA = 0xffff; break; /* ILLEGAL*/
+ case 0xaf: IMMWORD(EAP); break;
+
+ case 0xb0: EA = Y; Y++; EAD = RM16(EAD); break;
+ case 0xb1: EA = Y; Y += 2; EAD = RM16(EAD); break;
+ case 0xb2: Y--; EA = Y; EAD = RM16(EAD); break;
+ case 0xb3: Y -= 2; EA = Y; EAD = RM16(EAD); break;
+ case 0xb4: EA = Y; EAD = RM16(EAD); break;
+ case 0xb5: EA = Y + SIGNED(B); EAD = RM16(EAD); break;
+ case 0xb6: EA = Y + SIGNED(A); EAD = RM16(EAD); break;
+ case 0xb7: EA = Y + SIGNED(A); EAD = RM16(EAD); break; /* ILLEGAL*/
+ case 0xb8: IMMBYTE(EA); EA = Y + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0xb9: IMMWORD(EAP); EA += Y; EAD = RM16(EAD); break;
+ case 0xba: EA = PC; EA++; EA |= 0x00ff; EAD = RM16(EAD); break; /* ILLEGAL*/
+ case 0xbb: EA = Y + D; EAD = RM16(EAD); break;
+ case 0xbc: IMMBYTE(EA); EA = PC + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0xbd: IMMWORD(EAP); EA += PC; EAD = RM16(EAD); break;
+ case 0xbe: EA = 0xffff; EAD = RM16(EAD); break; /* ILLEGAL*/
+ case 0xbf: IMMWORD(EAP); EAD = RM16(EAD); break;
+
+ case 0xc0: EA = U; U++; break;
+ case 0xc1: EA = U; U += 2; break;
+ case 0xc2: U--; EA = U; break;
+ case 0xc3: U -= 2; EA = U; break;
+ case 0xc4: EA = U; break;
+ case 0xc5: EA = U + SIGNED(B); break;
+ case 0xc6: EA = U + SIGNED(A); break;
+ case 0xc7: EA = U + SIGNED(A); break; /*ILLEGAL*/
+ case 0xc8: IMMBYTE(EA); EA = U + SIGNED(EA); break;
+ case 0xc9: IMMWORD(EAP); EA += U; break;
+ case 0xca: EA = PC; EA++; EA |= 0x00ff; break; /*ILLEGAL*/
+ case 0xcb: EA = U + D; break;
+ case 0xcc: IMMBYTE(EA); EA = PC + SIGNED(EA); break;
+ case 0xcd: IMMWORD(EAP); EA += PC; break;
+ case 0xce: EA = 0xffff; break; /*ILLEGAL*/
+ case 0xcf: IMMWORD(EAP); break;
+
+ case 0xd0: EA = U; U++; EAD = RM16(EAD); break;
+ case 0xd1: EA = U; U += 2; EAD = RM16(EAD); break;
+ case 0xd2: U--; EA = U; EAD = RM16(EAD); break;
+ case 0xd3: U -= 2; EA = U; EAD = RM16(EAD); break;
+ case 0xd4: EA = U; EAD = RM16(EAD); break;
+ case 0xd5: EA = U + SIGNED(B); EAD = RM16(EAD); break;
+ case 0xd6: EA = U + SIGNED(A); EAD = RM16(EAD); break;
+ case 0xd7: EA = U + SIGNED(A); EAD = RM16(EAD); break; /*ILLEGAL*/
+ case 0xd8: IMMBYTE(EA); EA = U + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0xd9: IMMWORD(EAP); EA += U; EAD = RM16(EAD); break;
+ case 0xda: EA = PC; EA++; EA |= 0x00ff; EAD=RM16(EAD); break; /*ILLEGAL*/
+ case 0xdb: EA = U + D; EAD = RM16(EAD); break;
+ case 0xdc: IMMBYTE(EA); EA = PC + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0xdd: IMMWORD(EAP); EA += PC; EAD = RM16(EAD); break;
+ case 0xde: EA = 0xffff; EAD = RM16(EAD); break; /*ILLEGAL*/
+ case 0xdf: IMMWORD(EAP); EAD = RM16(EAD); break;
+
+ case 0xe0: EA = S; S++; break;
+ case 0xe1: EA = S; S += 2; break;
+ case 0xe2: S--; EA = S; break;
+ case 0xe3: S -= 2; EA = S; break;
+ case 0xe4: EA = S; break;
+ case 0xe5: EA = S + SIGNED(B); break;
+ case 0xe6: EA = S + SIGNED(A); break;
+ case 0xe7: EA = S + SIGNED(A); break; /*ILLEGAL*/
+ case 0xe8: IMMBYTE(EA); EA = S + SIGNED(EA); break;
+ case 0xe9: IMMWORD(EAP); EA += S; break;
+ case 0xea: EA = PC; EA++; EA |= 0x00ff; break; /*ILLEGAL*/
+ case 0xeb: EA = S + D; break;
+ case 0xec: IMMBYTE(EA); EA = PC + SIGNED(EA); break;
+ case 0xed: IMMWORD(EAP); EA += PC; break;
+ case 0xee: EA = 0xffff; break; /*ILLEGAL*/
+ case 0xef: IMMWORD(EAP); break;
+
+ case 0xf0: EA = S; S++; EAD = RM16(EAD); break;
+ case 0xf1: EA = S; S += 2; EAD = RM16(EAD); break;
+ case 0xf2: S--; EA = S; EAD = RM16(EAD); break;
+ case 0xf3: S -= 2; EA = S; EAD = RM16(EAD); break;
+ case 0xf4: EA = S; EAD = RM16(EAD); break;
+ case 0xf5: EA = S + SIGNED(B); EAD = RM16(EAD); break;
+ case 0xf6: EA = S + SIGNED(A); EAD = RM16(EAD); break;
+ case 0xf7: EA = S + SIGNED(A); EAD = RM16(EAD); break; /*ILLEGAL*/
+ case 0xf8: IMMBYTE(EA); EA = S + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0xf9: IMMWORD(EAP); EA += S; EAD = RM16(EAD); break;
+ case 0xfa: EA = PC; EA++; EA |= 0x00ff; EAD = RM16(EAD); break; /*ILLEGAL*/
+ case 0xfb: EA = S + D; EAD = RM16(EAD); break;
+ case 0xfc: IMMBYTE(EA); EA = PC + SIGNED(EA); EAD = RM16(EAD); break;
+ case 0xfd: IMMWORD(EAP); EA += PC; EAD = RM16(EAD); break;
+ case 0xfe: EA = 0xffff; EAD = RM16(EAD); break; /*ILLEGAL*/
+ case 0xff: IMMWORD(EAP); EAD = RM16(EAD); break;
+ default: //__assume(0);
+ EA = X; break;
+ }
+ icount -= index_cycle_em[postbyte];
+ return;
+ }
+#else
switch(postbyte) {
case 0x00: EA = X; break;
case 0x01: EA = X + 1; break;
EA = X; break;
}
icount -= index_cycle_em[postbyte];
+#endif
}
-void MC6809::illegal()
+inline void MC6809::illegal()
{
//logerror("MC6809: illegal opcode at %04x\n", PC);
}
/* $00 NEG direct ?**** */
-void MC6809::neg_di()
+inline void MC6809::neg_di()
{
uint16 r, t;
DIRBYTE(t);
/* $02 ILLEGAL, same as $03 */
/* $03 COM direct -**01 */
-void MC6809::com_di()
+inline void MC6809::com_di()
{
uint8 t;
DIRBYTE(t);
WM(EAD, t);
}
/* $02 NGC Direct (Undefined) */
-void MC6809::ngc_di(void)
+inline void MC6809::ngc_di(void)
{
if ((CC & CC_C) == 0) {
neg_di();
}
/* $04 LSR direct -0*-* */
-void MC6809::lsr_di()
+inline void MC6809::lsr_di()
{
uint8 t;
DIRBYTE(t);
/* $05 ILLEGAL, same as $04 */
/* $06 ROR direct -**-* */
-void MC6809::ror_di()
+inline void MC6809::ror_di()
{
uint8 t, r;
DIRBYTE(t);
}
/* $07 ASR direct ?**-* */
-void MC6809::asr_di()
+inline void MC6809::asr_di()
{
uint8 t;
DIRBYTE(t);
}
/* $08 ASL direct ?**** */
-void MC6809::asl_di()
+inline void MC6809::asl_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $09 ROL direct -**** */
-void MC6809::rol_di()
+inline void MC6809::rol_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $0A DEC direct -***- */
-void MC6809::dec_di()
+inline void MC6809::dec_di()
{
uint8 t;
DIRBYTE(t);
}
/* $0B DCC direct */
-void MC6809::dcc_di(void)
+inline void MC6809::dcc_di(void)
{
BYTE t, s;
DIRBYTE(t);
/* $OC INC direct -***- */
-void MC6809::inc_di()
+inline void MC6809::inc_di()
{
uint8 t;
DIRBYTE(t);
}
/* $OD TST direct -**0- */
-void MC6809::tst_di()
+inline void MC6809::tst_di()
{
uint8 t;
DIRBYTE(t);
}
/* $0E JMP direct ----- */
-void MC6809::jmp_di()
+inline void MC6809::jmp_di()
{
DIRECT;
PCD = EAD;
}
/* $0F CLR direct -0100 */
-void MC6809::clr_di()
+inline void MC6809::clr_di()
{
DIRECT;
(void)RM(EAD);
/* $11 FLAG */
/* $12 NOP inherent ----- */
-void MC6809::nop()
+inline void MC6809::nop()
{
;
}
/* $13 SYNC inherent ----- */
-void MC6809::sync()
+inline void MC6809::sync()
{
/* SYNC stops processing instructions until an interrupt request happens. */
/* This doesn't require the corresponding interrupt to be enabled: if it */
}
/* $14 trap(HALT) */
-void MC6809::trap()
+inline void MC6809::trap()
{
int_state |= MC6809_HALT; // HALTフラグ
// Debug: トラップ要因
/* $15 trap */
/* $16 LBRA relative ----- */
-void MC6809::lbra()
+inline void MC6809::lbra()
{
IMMWORD(EAP);
PC += EA;
}
/* $17 LBSR relative ----- */
-void MC6809::lbsr()
+inline void MC6809::lbsr()
{
IMMWORD(EAP);
PUSHWORD(pPC);
/* $18 ASLCC */
-void MC6809::aslcc_in()
+inline void MC6809::aslcc_in()
{
BYTE cc = CC;
if ((cc & CC_Z) != 0x00) //20100824 Fix
}
/* $19 DAA inherent (A) -**0* */
-void MC6809::daa()
+inline void MC6809::daa()
{
uint8 msn, lsn;
uint16 t, cf = 0;
}
/* $1A ORCC immediate ##### */
-void MC6809::orcc()
+inline void MC6809::orcc()
{
uint8 t;
IMMBYTE(t);
/* $1B ILLEGAL */
/* $1C ANDCC immediate ##### */
-void MC6809::andcc()
+inline void MC6809::andcc()
{
uint8 t;
IMMBYTE(t);
}
/* $1D SEX inherent -**-- */
-void MC6809::sex()
+inline void MC6809::sex()
{
uint16 t;
t = SIGNED(B);
}
/* $1E EXG inherent ----- */
-void MC6809::exg()
+inline void MC6809::exg()
{
uint16 t1, t2;
uint8 tb;
}
/* $1F TFR inherent ----- */
-void MC6809::tfr()
+inline void MC6809::tfr()
{
uint8 tb;
uint16 t;
}
/* $20 BRA relative ----- */
-void MC6809::bra()
+inline void MC6809::bra()
{
uint8 t;
IMMBYTE(t);
}
/* $21 BRN relative ----- */
-void MC6809::brn()
+inline void MC6809::brn()
{
uint8 t;
IMMBYTE(t);
}
/* $1021 LBRN relative ----- */
-void MC6809::lbrn()
+inline void MC6809::lbrn()
{
IMMWORD(EAP);
}
/* $22 BHI relative ----- */
-void MC6809::bhi()
+inline void MC6809::bhi()
{
BRANCH(!(CC & (CC_Z | CC_C)));
}
/* $1022 LBHI relative ----- */
-void MC6809::lbhi()
+inline void MC6809::lbhi()
{
LBRANCH(!(CC & (CC_Z | CC_C)));
}
/* $23 BLS relative ----- */
-void MC6809::bls()
+inline void MC6809::bls()
{
BRANCH((CC & (CC_Z | CC_C)));
}
/* $1023 LBLS relative ----- */
-void MC6809::lbls()
+inline void MC6809::lbls()
{
LBRANCH((CC & (CC_Z | CC_C)));
}
/* $24 BCC relative ----- */
-void MC6809::bcc()
+inline void MC6809::bcc()
{
BRANCH(!(CC & CC_C));
}
/* $1024 LBCC relative ----- */
-void MC6809::lbcc()
+inline void MC6809::lbcc()
{
LBRANCH(!(CC & CC_C));
}
/* $25 BCS relative ----- */
-void MC6809::bcs()
+inline void MC6809::bcs()
{
BRANCH((CC & CC_C));
}
/* $1025 LBCS relative ----- */
-void MC6809::lbcs()
+inline void MC6809::lbcs()
{
LBRANCH((CC & CC_C));
}
/* $26 BNE relative ----- */
-void MC6809::bne()
+inline void MC6809::bne()
{
BRANCH(!(CC & CC_Z));
}
/* $1026 LBNE relative ----- */
-void MC6809::lbne()
+inline void MC6809::lbne()
{
LBRANCH(!(CC & CC_Z));
}
/* $27 BEQ relative ----- */
-void MC6809::beq()
+inline void MC6809::beq()
{
BRANCH((CC & CC_Z));
}
/* $1027 LBEQ relative ----- */
-void MC6809::lbeq()
+inline void MC6809::lbeq()
{
LBRANCH((CC & CC_Z));
}
/* $28 BVC relative ----- */
-void MC6809::bvc()
+inline void MC6809::bvc()
{
BRANCH(!(CC & CC_V));
}
/* $1028 LBVC relative ----- */
-void MC6809::lbvc()
+inline void MC6809::lbvc()
{
LBRANCH(!(CC & CC_V));
}
/* $29 BVS relative ----- */
-void MC6809::bvs()
+inline void MC6809::bvs()
{
BRANCH((CC & CC_V));
}
/* $1029 LBVS relative ----- */
-void MC6809::lbvs()
+inline void MC6809::lbvs()
{
LBRANCH((CC & CC_V));
}
/* $2A BPL relative ----- */
-void MC6809::bpl()
+inline void MC6809::bpl()
{
BRANCH(!(CC & CC_N));
}
/* $102A LBPL relative ----- */
-void MC6809::lbpl()
+inline void MC6809::lbpl()
{
LBRANCH(!(CC & CC_N));
}
/* $2B BMI relative ----- */
-void MC6809::bmi()
+inline void MC6809::bmi()
{
BRANCH((CC & CC_N));
}
/* $102B LBMI relative ----- */
-void MC6809::lbmi()
+inline void MC6809::lbmi()
{
LBRANCH((CC & CC_N));
}
/* $2C BGE relative ----- */
-void MC6809::bge()
+inline void MC6809::bge()
{
BRANCH(!NXORV);
}
/* $102C LBGE relative ----- */
-void MC6809::lbge()
+inline void MC6809::lbge()
{
LBRANCH(!NXORV);
}
/* $2D BLT relative ----- */
-void MC6809::blt()
+inline void MC6809::blt()
{
BRANCH(NXORV);
}
/* $102D LBLT relative ----- */
-void MC6809::lblt()
+inline void MC6809::lblt()
{
LBRANCH(NXORV);
}
/* $2E BGT relative ----- */
-void MC6809::bgt()
+inline void MC6809::bgt()
{
BRANCH(!(NXORV || (CC & CC_Z)));
}
/* $102E LBGT relative ----- */
-void MC6809::lbgt()
+inline void MC6809::lbgt()
{
LBRANCH(!(NXORV || (CC & CC_Z)));
}
/* $2F BLE relative ----- */
-void MC6809::ble()
+inline void MC6809::ble()
{
BRANCH((NXORV || (CC & CC_Z)));
}
/* $102F LBLE relative ----- */
-void MC6809::lble()
+inline void MC6809::lble()
{
LBRANCH((NXORV || (CC & CC_Z)));
}
/* $30 LEAX indexed --*-- */
-void MC6809::leax()
+inline void MC6809::leax()
{
fetch_effective_address();
X = EA;
}
/* $31 LEAY indexed --*-- */
-void MC6809::leay()
+inline void MC6809::leay()
{
fetch_effective_address();
Y = EA;
}
/* $32 LEAS indexed ----- */
-void MC6809::leas()
+inline void MC6809::leas()
{
fetch_effective_address();
S = EA;
}
/* $33 LEAU indexed ----- */
-void MC6809::leau()
+inline void MC6809::leau()
{
fetch_effective_address();
U = EA;
}
/* $34 PSHS inherent ----- */
-void MC6809::pshs()
+inline void MC6809::pshs()
{
uint8 t;
IMMBYTE(t);
}
/* 35 PULS inherent ----- */
-void MC6809::puls()
+inline void MC6809::puls()
{
uint8 t;
IMMBYTE(t);
}
/* $36 PSHU inherent ----- */
-void MC6809::pshu()
+inline void MC6809::pshu()
{
uint8 t;
IMMBYTE(t);
}
/* 37 PULU inherent ----- */
-void MC6809::pulu()
+inline void MC6809::pulu()
{
uint8 t;
IMMBYTE(t);
/* $38 ILLEGAL */
/* $39 RTS inherent ----- */
-void MC6809::rts()
+inline void MC6809::rts()
{
PULLWORD(PCD);
}
/* $3A ABX inherent ----- */
-void MC6809::abx()
+inline void MC6809::abx()
{
X += B;
}
/* $3B RTI inherent ##### */
-void MC6809::rti()
+inline void MC6809::rti()
{
uint8 t;
PULLBYTE(CC);
}
/* $3C CWAI inherent ----1 */
-void MC6809::cwai()
+inline void MC6809::cwai()
{
uint8 t;
if ((int_state & MC6809_CWAI_IN) != 0) { // FIX 20130417
}
/* $3D MUL inherent --*-@ */
-void MC6809::mul()
+inline void MC6809::mul()
{
uint16 t;
t = A * B;
}
/* $3E RST */
-void MC6809::rst()
+inline void MC6809::rst()
{
reset();
}
/* $3F SWI (SWI2 SWI3) absolute indirect ----- */
-void MC6809::swi()
+inline void MC6809::swi()
{
CC |= CC_E; /* HJB 980225: save entire state */
PUSHWORD(pPC);
}
/* $103F SWI2 absolute indirect ----- */
-void MC6809::swi2()
+inline void MC6809::swi2()
{
CC |= CC_E; /* HJB 980225: save entire state */
PUSHWORD(pPC);
}
/* $113F SWI3 absolute indirect ----- */
-void MC6809::swi3()
+inline void MC6809::swi3()
{
CC |= CC_E; /* HJB 980225: save entire state */
PUSHWORD(pPC);
}
/* $40 NEGA inherent ?**** */
-void MC6809::nega()
+inline void MC6809::nega()
{
uint16 r;
r = -A;
/* $41 ILLEGAL, same as $40 */
/* $42 NGCA */
-void MC6809::ngca()
+inline void MC6809::ngca()
{
if ((CC & CC_C) == 0) {
nega();
}
/* $43 COMA inherent -**01 */
-void MC6809::coma()
+inline void MC6809::coma()
{
A = ~A;
CLR_NZV;
}
/* $44 LSRA inherent -0*-* */
-void MC6809::lsra()
+inline void MC6809::lsra()
{
CLR_NZC;
CC |= (A & CC_C);
/* $45 ILLEGAL, same as $44 */
/* $46 RORA inherent -**-* */
-void MC6809::rora()
+inline void MC6809::rora()
{
uint8 r;
uint8 t;
}
/* $47 ASRA inherent ?**-* */
-void MC6809::asra()
+inline void MC6809::asra()
{
CLR_NZC;
CC |= (A & CC_C);
}
/* $48 ASLA inherent ?**** */
-void MC6809::asla()
+inline void MC6809::asla()
{
uint16 r;
r = A << 1;
}
/* $49 ROLA inherent -**** */
-void MC6809::rola()
+inline void MC6809::rola()
{
uint16 t, r;
t = A & 0x00ff;
}
/* $4A DECA inherent -***- */
-void MC6809::deca()
+inline void MC6809::deca()
{
--A;
CLR_NZV;
}
/* $4B DCCA */
-void MC6809::dcca()
+inline void MC6809::dcca()
{
uint8 s;
// BYTE t = A;
}
/* $4C INCA inherent -***- */
-void MC6809::inca()
+inline void MC6809::inca()
{
++A;
CLR_NZV;
}
/* $4D TSTA inherent -**0- */
-void MC6809::tsta()
+inline void MC6809::tsta()
{
CLR_NZV;
SET_NZ8(A);
}
/* $4E CLCA */
-void MC6809::clca()
+inline void MC6809::clca()
{
A = 0;
CLR_NZV;
}
/* $4F CLRA inherent -0100 */
-void MC6809::clra()
+inline void MC6809::clra()
{
A = 0;
CLR_NZVC; SEZ;
}
/* $50 NEGB inherent ?**** */
-void MC6809::negb()
+inline void MC6809::negb()
{
uint16 r;
r = -B;
/* $51 ILLEGAL, same as $50 */
/* $52 NGCB */
-void MC6809::ngcb()
+inline void MC6809::ngcb()
{
if ((CC & CC_C) == 0) {
negb();
}
/* $53 COMB inherent -**01 */
-void MC6809::comb()
+inline void MC6809::comb()
{
B = ~B;
CLR_NZV;
}
/* $54 LSRB inherent -0*-* */
-void MC6809::lsrb()
+inline void MC6809::lsrb()
{
CLR_NZC;
CC |= (B & CC_C);
/* $55 ILLEGAL, same as $54 */
/* $56 RORB inherent -**-* */
-void MC6809::rorb()
+inline void MC6809::rorb()
{
uint8 r;
r = (CC & CC_C) << 7;
}
/* $57 ASRB inherent ?**-* */
-void MC6809::asrb()
+inline void MC6809::asrb()
{
CLR_NZC;
CC |= (B & CC_C);
}
/* $58 ASLB inherent ?**** */
-void MC6809::aslb()
+inline void MC6809::aslb()
{
uint16 r;
r = B << 1;
}
/* $59 ROLB inherent -**** */
-void MC6809::rolb()
+inline void MC6809::rolb()
{
uint16 t, r;
t = B;
}
/* $5A DECB inherent -***- */
-void MC6809::decb()
+inline void MC6809::decb()
{
--B;
CLR_NZV;
}
/* $5B DCCB */
-void MC6809::dccb()
+inline void MC6809::dccb()
{
BYTE s;
--B;
}
/* $5C INCB inherent -***- */
-void MC6809::incb()
+inline void MC6809::incb()
{
++B;
CLR_NZV;
}
/* $5D TSTB inherent -**0- */
-void MC6809::tstb()
+inline void MC6809::tstb()
{
CLR_NZV;
SET_NZ8(B);
}
/* $5E CLCB */
-void MC6809::clcb()
+inline void MC6809::clcb()
{
B = 0;
CLR_NZV;
}
/* $5F CLRB inherent -0100 */
-void MC6809::clrb()
+inline void MC6809::clrb()
{
B = 0;
CLR_NZVC; SEZ;
}
/* $60 NEG indexed ?**** */
-void MC6809::neg_ix()
+inline void MC6809::neg_ix()
{
uint16 r, t;
fetch_effective_address();
/* $61 ILLEGAL, same as $60 */
/* $62 NGC_IX */
-void MC6809::ngc_ix()
+inline void MC6809::ngc_ix()
{
if ((CC & CC_C) == 0) {
neg_ix();
}
/* $63 COM indexed -**01 */
-void MC6809::com_ix()
+inline void MC6809::com_ix()
{
uint8 t;
fetch_effective_address();
}
/* $64 LSR indexed -0*-* */
-void MC6809::lsr_ix()
+inline void MC6809::lsr_ix()
{
uint8 t;
fetch_effective_address();
/* $65 ILLEGAL, same as $64 */
/* $66 ROR indexed -**-* */
-void MC6809::ror_ix()
+inline void MC6809::ror_ix()
{
uint8 t, r;
fetch_effective_address();
}
/* $67 ASR indexed ?**-* */
-void MC6809::asr_ix()
+inline void MC6809::asr_ix()
{
uint8 t;
fetch_effective_address();
}
/* $68 ASL indexed ?**** */
-void MC6809::asl_ix()
+inline void MC6809::asl_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $69 ROL indexed -**** */
-void MC6809::rol_ix()
+inline void MC6809::rol_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $6A DEC indexed -***- */
-void MC6809::dec_ix()
+inline void MC6809::dec_ix()
{
uint8 t;
fetch_effective_address();
}
/* $6B ILLEGAL, same as $6A */
-void MC6809::dcc_ix()
+inline void MC6809::dcc_ix()
{
BYTE t, s;
fetch_effective_address();
}
/* $6C INC indexed -***- */
-void MC6809::inc_ix()
+inline void MC6809::inc_ix()
{
uint8 t;
fetch_effective_address();
}
/* $6D TST indexed -**0- */
-void MC6809::tst_ix()
+inline void MC6809::tst_ix()
{
uint8 t;
fetch_effective_address();
}
/* $6E JMP indexed ----- */
-void MC6809::jmp_ix()
+inline void MC6809::jmp_ix()
{
fetch_effective_address();
PCD = EAD;
}
/* $6F CLR indexed -0100 */
-void MC6809::clr_ix()
+inline void MC6809::clr_ix()
{
fetch_effective_address();
(void)RM(EAD);
}
/* $70 NEG extended ?**** */
-void MC6809::neg_ex()
+inline void MC6809::neg_ex()
{
uint16 r, t;
EXTBYTE(t); r = -t;
/* $71 ILLEGAL, same as $70 */
/* $72 NGC extended */
-void MC6809::ngc_ex()
+inline void MC6809::ngc_ex()
{
if ((CC & CC_C) == 0) {
neg_ex();
/* $73 COM extended -**01 */
-void MC6809::com_ex()
+inline void MC6809::com_ex()
{
uint8 t;
EXTBYTE(t); t = ~t;
}
/* $74 LSR extended -0*-* */
-void MC6809::lsr_ex()
+inline void MC6809::lsr_ex()
{
uint8 t;
EXTBYTE(t); CLR_NZC; CC |= (t & CC_C);
/* $75 ILLEGAL, same as $74 */
/* $76 ROR extended -**-* */
-void MC6809::ror_ex()
+inline void MC6809::ror_ex()
{
uint8 t, r;
EXTBYTE(t); r = (CC & CC_C) << 7;
}
/* $77 ASR extended ?**-* */
-void MC6809::asr_ex()
+inline void MC6809::asr_ex()
{
uint8 t;
EXTBYTE(t); CLR_NZC; CC |= (t & CC_C);
}
/* $78 ASL extended ?**** */
-void MC6809::asl_ex()
+inline void MC6809::asl_ex()
{
uint16 t, r;
EXTBYTE(t); r = t << 1;
}
/* $79 ROL extended -**** */
-void MC6809::rol_ex()
+inline void MC6809::rol_ex()
{
uint16 t, r;
EXTBYTE(t); r = (CC & CC_C) | (t << 1);
}
/* $7A DEC extended -***- */
-void MC6809::dec_ex()
+inline void MC6809::dec_ex()
{
uint8 t;
EXTBYTE(t); --t;
}
/* $7B DCC extended */
-void MC6809::dcc_ex()
+inline void MC6809::dcc_ex()
{
BYTE t, s;
EXTBYTE(t);
}
/* $7C INC extended -***- */
-void MC6809::inc_ex()
+inline void MC6809::inc_ex()
{
uint8 t;
EXTBYTE(t); ++t;
}
/* $7D TST extended -**0- */
-void MC6809::tst_ex()
+inline void MC6809::tst_ex()
{
uint8 t;
EXTBYTE(t); CLR_NZV; SET_NZ8(t);
}
/* $7E JMP extended ----- */
-void MC6809::jmp_ex()
+inline void MC6809::jmp_ex()
{
EXTENDED;
PCD = EAD;
}
/* $7F CLR extended -0100 */
-void MC6809::clr_ex()
+inline void MC6809::clr_ex()
{
EXTENDED;
(void)RM(EAD);
}
/* $80 SUBA immediate ?**** */
-void MC6809::suba_im()
+inline void MC6809::suba_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $81 CMPA immediate ?**** */
-void MC6809::cmpa_im()
+inline void MC6809::cmpa_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $82 SBCA immediate ?**** */
-void MC6809::sbca_im()
+inline void MC6809::sbca_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $83 SUBD (CMPD CMPU) immediate -**** */
-void MC6809::subd_im()
+inline void MC6809::subd_im()
{
uint32 r, d;
pair b;
}
/* $1083 CMPD immediate -**** */
-void MC6809::cmpd_im()
+inline void MC6809::cmpd_im()
{
uint32 r, d;
pair b;
}
/* $1183 CMPU immediate -**** */
-void MC6809::cmpu_im()
+inline void MC6809::cmpu_im()
{
uint32 r, d;
pair b;
}
/* $84 ANDA immediate -**0- */
-void MC6809::anda_im()
+inline void MC6809::anda_im()
{
uint8 t;
IMMBYTE(t);
}
/* $85 BITA immediate -**0- */
-void MC6809::bita_im()
+inline void MC6809::bita_im()
{
uint8 t, r;
IMMBYTE(t);
}
/* $86 LDA immediate -**0- */
-void MC6809::lda_im()
+inline void MC6809::lda_im()
{
IMMBYTE(A);
CLR_NZV;
/* is this a legal instruction? */
#if 0
/* $87 STA immediate -**0- in not used*/
-void MC6809::sta_im()
+inline void MC6809::sta_im()
{
CLR_NZV;
SET_NZ8(A);
/*
* $87 , $C7: FLAG8
*/
-void MC6809::flag8_im()
+inline void MC6809::flag8_im()
{
// 20111117
BYTE t;
#endif
/* $88 EORA immediate -**0- */
-void MC6809::eora_im()
+inline void MC6809::eora_im()
{
uint8 t;
IMMBYTE(t);
}
/* $89 ADCA immediate ***** */
-void MC6809::adca_im()
+inline void MC6809::adca_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $8A ORA immediate -**0- */
-void MC6809::ora_im()
+inline void MC6809::ora_im()
{
uint8 t;
IMMBYTE(t);
}
/* $8B ADDA immediate ***** */
-void MC6809::adda_im()
+inline void MC6809::adda_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $8C CMPX (CMPY CMPS) immediate -**** */
-void MC6809::cmpx_im()
+inline void MC6809::cmpx_im()
{
uint32 r, d;
pair b;
}
/* $108C CMPY immediate -**** */
-void MC6809::cmpy_im()
+inline void MC6809::cmpy_im()
{
uint32 r, d;
pair b;
}
/* $118C CMPS immediate -**** */
-void MC6809::cmps_im()
+inline void MC6809::cmps_im()
{
uint32 r, d;
pair b;
}
/* $8D BSR ----- */
-void MC6809::bsr()
+inline void MC6809::bsr()
{
uint8 t;
IMMBYTE(t);
}
/* $8E LDX (LDY) immediate -**0- */
-void MC6809::ldx_im()
+inline void MC6809::ldx_im()
{
IMMWORD(pX);
CLR_NZV;
}
/* $108E LDY immediate -**0- */
-void MC6809::ldy_im()
+inline void MC6809::ldy_im()
{
IMMWORD(pY);
CLR_NZV;
/* is this a legal instruction? */
#if 0
/* $8F STX (STY) immediate -**0- */
-void MC6809::stx_im()
+inline void MC6809::stx_im()
{
CLR_NZV;
SET_NZ16(X);
/*
* $8F , $CF: FLAG16
*/
-void MC6809::flag16_im()
+inline void MC6809::flag16_im()
{
pair t;
IMMWORD(t);
#endif
/* is this a legal instruction? */
/* $108F STY immediate -**0- */
-void MC6809::sty_im()
+inline void MC6809::sty_im()
{
CLR_NZV;
SET_NZ16(Y);
}
/* $90 SUBA direct ?**** */
-void MC6809::suba_di()
+inline void MC6809::suba_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $91 CMPA direct ?**** */
-void MC6809::cmpa_di()
+inline void MC6809::cmpa_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $92 SBCA direct ?**** */
-void MC6809::sbca_di()
+inline void MC6809::sbca_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $93 SUBD (CMPD CMPU) direct -**** */
-void MC6809::subd_di()
+inline void MC6809::subd_di()
{
uint32 r, d;
pair b;
}
/* $1093 CMPD direct -**** */
-void MC6809::cmpd_di()
+inline void MC6809::cmpd_di()
{
uint32 r, d;
pair b;
}
/* $1193 CMPU direct -**** */
-void MC6809::cmpu_di()
+inline void MC6809::cmpu_di()
{
uint32 r, d;
pair b;
}
/* $94 ANDA direct -**0- */
-void MC6809::anda_di()
+inline void MC6809::anda_di()
{
uint8 t;
DIRBYTE(t);
}
/* $95 BITA direct -**0- */
-void MC6809::bita_di()
+inline void MC6809::bita_di()
{
uint8 t, r;
DIRBYTE(t);
}
/* $96 LDA direct -**0- */
-void MC6809::lda_di()
+inline void MC6809::lda_di()
{
DIRBYTE(A);
CLR_NZV;
}
/* $97 STA direct -**0- */
-void MC6809::sta_di()
+inline void MC6809::sta_di()
{
CLR_NZV;
SET_NZ8(A);
}
/* $98 EORA direct -**0- */
-void MC6809::eora_di()
+inline void MC6809::eora_di()
{
uint8 t;
DIRBYTE(t);
}
/* $99 ADCA direct ***** */
-void MC6809::adca_di()
+inline void MC6809::adca_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $9A ORA direct -**0- */
-void MC6809::ora_di()
+inline void MC6809::ora_di()
{
uint8 t;
DIRBYTE(t);
}
/* $9B ADDA direct ***** */
-void MC6809::adda_di()
+inline void MC6809::adda_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $9C CMPX (CMPY CMPS) direct -**** */
-void MC6809::cmpx_di()
+inline void MC6809::cmpx_di()
{
uint32 r, d;
pair b;
}
/* $109C CMPY direct -**** */
-void MC6809::cmpy_di()
+inline void MC6809::cmpy_di()
{
uint32 r, d;
pair b;
}
/* $119C CMPS direct -**** */
-void MC6809::cmps_di()
+inline void MC6809::cmps_di()
{
uint32 r, d;
pair b;
}
/* $9D JSR direct ----- */
-void MC6809::jsr_di()
+inline void MC6809::jsr_di()
{
DIRECT;
PUSHWORD(pPC);
}
/* $9E LDX (LDY) direct -**0- */
-void MC6809::ldx_di()
+inline void MC6809::ldx_di()
{
DIRWORD(pX);
CLR_NZV;
}
/* $109E LDY direct -**0- */
-void MC6809::ldy_di()
+inline void MC6809::ldy_di()
{
DIRWORD(pY);
CLR_NZV;
}
/* $9F STX (STY) direct -**0- */
-void MC6809::stx_di()
+inline void MC6809::stx_di()
{
CLR_NZV;
SET_NZ16(X);
}
/* $109F STY direct -**0- */
-void MC6809::sty_di()
+inline void MC6809::sty_di()
{
CLR_NZV;
SET_NZ16(Y);
}
/* $a0 SUBA indexed ?**** */
-void MC6809::suba_ix()
+inline void MC6809::suba_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $a1 CMPA indexed ?**** */
-void MC6809::cmpa_ix()
+inline void MC6809::cmpa_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $a2 SBCA indexed ?**** */
-void MC6809::sbca_ix()
+inline void MC6809::sbca_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $a3 SUBD (CMPD CMPU) indexed -**** */
-void MC6809::subd_ix()
+inline void MC6809::subd_ix()
{
uint32 r, d;
pair b;
}
/* $10a3 CMPD indexed -**** */
-void MC6809::cmpd_ix()
+inline void MC6809::cmpd_ix()
{
uint32 r, d;
pair b;
}
/* $11a3 CMPU indexed -**** */
-void MC6809::cmpu_ix()
+inline void MC6809::cmpu_ix()
{
uint32 r;
pair b;
}
/* $a4 ANDA indexed -**0- */
-void MC6809::anda_ix()
+inline void MC6809::anda_ix()
{
fetch_effective_address();
A &= RM(EAD);
}
/* $a5 BITA indexed -**0- */
-void MC6809::bita_ix()
+inline void MC6809::bita_ix()
{
uint8 r;
fetch_effective_address();
}
/* $a6 LDA indexed -**0- */
-void MC6809::lda_ix()
+inline void MC6809::lda_ix()
{
fetch_effective_address();
A = RM(EAD);
}
/* $a7 STA indexed -**0- */
-void MC6809::sta_ix()
+inline void MC6809::sta_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $a8 EORA indexed -**0- */
-void MC6809::eora_ix()
+inline void MC6809::eora_ix()
{
fetch_effective_address();
A ^= RM(EAD);
}
/* $a9 ADCA indexed ***** */
-void MC6809::adca_ix()
+inline void MC6809::adca_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $aA ORA indexed -**0- */
-void MC6809::ora_ix()
+inline void MC6809::ora_ix()
{
fetch_effective_address();
A |= RM(EAD);
}
/* $aB ADDA indexed ***** */
-void MC6809::adda_ix()
+inline void MC6809::adda_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $aC CMPX (CMPY CMPS) indexed -**** */
-void MC6809::cmpx_ix()
+inline void MC6809::cmpx_ix()
{
uint32 r, d;
pair b;
}
/* $10aC CMPY indexed -**** */
-void MC6809::cmpy_ix()
+inline void MC6809::cmpy_ix()
{
uint32 r, d;
pair b;
}
/* $11aC CMPS indexed -**** */
-void MC6809::cmps_ix()
+inline void MC6809::cmps_ix()
{
uint32 r, d;
pair b;
}
/* $aD JSR indexed ----- */
-void MC6809::jsr_ix()
+inline void MC6809::jsr_ix()
{
fetch_effective_address();
PUSHWORD(pPC);
}
/* $aE LDX (LDY) indexed -**0- */
-void MC6809::ldx_ix()
+inline void MC6809::ldx_ix()
{
fetch_effective_address();
X = RM16(EAD);
}
/* $10aE LDY indexed -**0- */
-void MC6809::ldy_ix()
+inline void MC6809::ldy_ix()
{
fetch_effective_address();
Y = RM16(EAD);
}
/* $aF STX (STY) indexed -**0- */
-void MC6809::stx_ix()
+inline void MC6809::stx_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $10aF STY indexed -**0- */
-void MC6809::sty_ix()
+inline void MC6809::sty_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $b0 SUBA extended ?**** */
-void MC6809::suba_ex()
+inline void MC6809::suba_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $b1 CMPA extended ?**** */
-void MC6809::cmpa_ex()
+inline void MC6809::cmpa_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $b2 SBCA extended ?**** */
-void MC6809::sbca_ex()
+inline void MC6809::sbca_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $b3 SUBD (CMPD CMPU) extended -**** */
-void MC6809::subd_ex()
+inline void MC6809::subd_ex()
{
uint32 r, d;
pair b;
}
/* $10b3 CMPD extended -**** */
-void MC6809::cmpd_ex()
+inline void MC6809::cmpd_ex()
{
uint32 r, d;
pair b;
}
/* $11b3 CMPU extended -**** */
-void MC6809::cmpu_ex()
+inline void MC6809::cmpu_ex()
{
uint32 r, d;
pair b;
}
/* $b4 ANDA extended -**0- */
-void MC6809::anda_ex()
+inline void MC6809::anda_ex()
{
uint8 t;
EXTBYTE(t);
}
/* $b5 BITA extended -**0- */
-void MC6809::bita_ex()
+inline void MC6809::bita_ex()
{
uint8 t, r;
EXTBYTE(t);
}
/* $b6 LDA extended -**0- */
-void MC6809::lda_ex()
+inline void MC6809::lda_ex()
{
EXTBYTE(A);
CLR_NZV;
}
/* $b7 STA extended -**0- */
-void MC6809::sta_ex()
+inline void MC6809::sta_ex()
{
CLR_NZV;
SET_NZ8(A);
}
/* $b8 EORA extended -**0- */
-void MC6809::eora_ex()
+inline void MC6809::eora_ex()
{
uint8 t;
EXTBYTE(t);
}
/* $b9 ADCA extended ***** */
-void MC6809::adca_ex()
+inline void MC6809::adca_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $bA ORA extended -**0- */
-void MC6809::ora_ex()
+inline void MC6809::ora_ex()
{
uint8 t;
EXTBYTE(t);
}
/* $bB ADDA extended ***** */
-void MC6809::adda_ex()
+inline void MC6809::adda_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $bC CMPX (CMPY CMPS) extended -**** */
-void MC6809::cmpx_ex()
+inline void MC6809::cmpx_ex()
{
uint32 r, d;
pair b;
}
/* $10bC CMPY extended -**** */
-void MC6809::cmpy_ex()
+inline void MC6809::cmpy_ex()
{
uint32 r, d;
pair b;
}
/* $11bC CMPS extended -**** */
-void MC6809::cmps_ex()
+inline void MC6809::cmps_ex()
{
uint32 r, d;
pair b;
}
/* $bD JSR extended ----- */
-void MC6809::jsr_ex()
+inline void MC6809::jsr_ex()
{
EXTENDED;
PUSHWORD(pPC);
}
/* $bE LDX (LDY) extended -**0- */
-void MC6809::ldx_ex()
+inline void MC6809::ldx_ex()
{
EXTWORD(pX);
CLR_NZV;
}
/* $10bE LDY extended -**0- */
-void MC6809::ldy_ex()
+inline void MC6809::ldy_ex()
{
EXTWORD(pY);
CLR_NZV;
}
/* $bF STX (STY) extended -**0- */
-void MC6809::stx_ex()
+inline void MC6809::stx_ex()
{
CLR_NZV;
SET_NZ16(X);
}
/* $10bF STY extended -**0- */
-void MC6809::sty_ex()
+inline void MC6809::sty_ex()
{
CLR_NZV;
SET_NZ16(Y);
}
/* $c0 SUBB immediate ?**** */
-void MC6809::subb_im()
+inline void MC6809::subb_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $c1 CMPB immediate ?**** */
-void MC6809::cmpb_im()
+inline void MC6809::cmpb_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $c2 SBCB immediate ?**** */
-void MC6809::sbcb_im()
+inline void MC6809::sbcb_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $c3 ADDD immediate -**** */
-void MC6809::addd_im()
+inline void MC6809::addd_im()
{
uint32 r, d;
pair b;
}
/* $c4 ANDB immediate -**0- */
-void MC6809::andb_im()
+inline void MC6809::andb_im()
{
uint8 t;
IMMBYTE(t);
}
/* $c5 BITB immediate -**0- */
-void MC6809::bitb_im()
+inline void MC6809::bitb_im()
{
uint8 t, r;
IMMBYTE(t);
}
/* $c6 LDB immediate -**0- */
-void MC6809::ldb_im()
+inline void MC6809::ldb_im()
{
IMMBYTE(B);
CLR_NZV;
/* is this a legal instruction? */
/* $c7 STB immediate -**0- */
-void MC6809::stb_im()
+inline void MC6809::stb_im()
{
CLR_NZV;
SET_NZ8(B);
}
/* $c8 EORB immediate -**0- */
-void MC6809::eorb_im()
+inline void MC6809::eorb_im()
{
uint8 t;
IMMBYTE(t);
}
/* $c9 ADCB immediate ***** */
-void MC6809::adcb_im()
+inline void MC6809::adcb_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $cA ORB immediate -**0- */
-void MC6809::orb_im()
+inline void MC6809::orb_im()
{
uint8 t;
IMMBYTE(t);
}
/* $cB ADDB immediate ***** */
-void MC6809::addb_im()
+inline void MC6809::addb_im()
{
uint16 t, r;
IMMBYTE(t);
}
/* $cC LDD immediate -**0- */
-void MC6809::ldd_im()
+inline void MC6809::ldd_im()
{
IMMWORD(pD);
CLR_NZV;
/* is this a legal instruction? */
/* $cD STD immediate -**0- */
-void MC6809::std_im()
+inline void MC6809::std_im()
{
CLR_NZV;
SET_NZ16(D);
}
/* $cE LDU (LDS) immediate -**0- */
-void MC6809::ldu_im()
+inline void MC6809::ldu_im()
{
IMMWORD(pU);
CLR_NZV;
}
/* $10cE LDS immediate -**0- */
-void MC6809::lds_im()
+inline void MC6809::lds_im()
{
IMMWORD(pS);
CLR_NZV;
/* is this a legal instruction? */
/* $cF STU (STS) immediate -**0- */
-void MC6809::stu_im()
+inline void MC6809::stu_im()
{
CLR_NZV;
SET_NZ16(U);
/* is this a legal instruction? */
/* $10cF STS immediate -**0- */
-void MC6809::sts_im()
+inline void MC6809::sts_im()
{
CLR_NZV;
SET_NZ16(S);
}
/* $d0 SUBB direct ?**** */
-void MC6809::subb_di()
+inline void MC6809::subb_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $d1 CMPB direct ?**** */
-void MC6809::cmpb_di()
+inline void MC6809::cmpb_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $d2 SBCB direct ?**** */
-void MC6809::sbcb_di()
+inline void MC6809::sbcb_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $d3 ADDD direct -**** */
-void MC6809::addd_di()
+inline void MC6809::addd_di()
{
uint32 r, d;
pair b;
}
/* $d4 ANDB direct -**0- */
-void MC6809::andb_di()
+inline void MC6809::andb_di()
{
uint8 t;
DIRBYTE(t);
}
/* $d5 BITB direct -**0- */
-void MC6809::bitb_di()
+inline void MC6809::bitb_di()
{
uint8 t, r;
DIRBYTE(t);
}
/* $d6 LDB direct -**0- */
-void MC6809::ldb_di()
+inline void MC6809::ldb_di()
{
DIRBYTE(B);
CLR_NZV;
}
/* $d7 STB direct -**0- */
-void MC6809::stb_di()
+inline void MC6809::stb_di()
{
CLR_NZV;
SET_NZ8(B);
}
/* $d8 EORB direct -**0- */
-void MC6809::eorb_di()
+inline void MC6809::eorb_di()
{
uint8 t;
DIRBYTE(t);
}
/* $d9 ADCB direct ***** */
-void MC6809::adcb_di()
+inline void MC6809::adcb_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $dA ORB direct -**0- */
-void MC6809::orb_di()
+inline void MC6809::orb_di()
{
uint8 t;
DIRBYTE(t);
}
/* $dB ADDB direct ***** */
-void MC6809::addb_di()
+inline void MC6809::addb_di()
{
uint16 t, r;
DIRBYTE(t);
}
/* $dC LDD direct -**0- */
-void MC6809::ldd_di()
+inline void MC6809::ldd_di()
{
DIRWORD(pD);
CLR_NZV;
}
/* $dD STD direct -**0- */
-void MC6809::std_di()
+inline void MC6809::std_di()
{
CLR_NZV;
SET_NZ16(D);
}
/* $dE LDU (LDS) direct -**0- */
-void MC6809::ldu_di()
+inline void MC6809::ldu_di()
{
DIRWORD(pU);
CLR_NZV;
}
/* $10dE LDS direct -**0- */
-void MC6809::lds_di()
+inline void MC6809::lds_di()
{
DIRWORD(pS);
CLR_NZV;
}
/* $dF STU (STS) direct -**0- */
-void MC6809::stu_di()
+inline void MC6809::stu_di()
{
CLR_NZV;
SET_NZ16(U);
}
/* $10dF STS direct -**0- */
-void MC6809::sts_di()
+inline void MC6809::sts_di()
{
CLR_NZV;
SET_NZ16(S);
}
/* $e0 SUBB indexed ?**** */
-void MC6809::subb_ix()
+inline void MC6809::subb_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $e1 CMPB indexed ?**** */
-void MC6809::cmpb_ix()
+inline void MC6809::cmpb_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $e2 SBCB indexed ?**** */
-void MC6809::sbcb_ix()
+inline void MC6809::sbcb_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $e3 ADDD indexed -**** */
-void MC6809::addd_ix()
+inline void MC6809::addd_ix()
{
uint32 r, d;
pair b;
}
/* $e4 ANDB indexed -**0- */
-void MC6809::andb_ix()
+inline void MC6809::andb_ix()
{
fetch_effective_address();
B &= RM(EAD);
}
/* $e5 BITB indexed -**0- */
-void MC6809::bitb_ix()
+inline void MC6809::bitb_ix()
{
uint8 r;
fetch_effective_address();
}
/* $e6 LDB indexed -**0- */
-void MC6809::ldb_ix()
+inline void MC6809::ldb_ix()
{
fetch_effective_address();
B = RM(EAD);
}
/* $e7 STB indexed -**0- */
-void MC6809::stb_ix()
+inline void MC6809::stb_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $e8 EORB indexed -**0- */
-void MC6809::eorb_ix()
+inline void MC6809::eorb_ix()
{
fetch_effective_address();
B ^= RM(EAD);
}
/* $e9 ADCB indexed ***** */
-void MC6809::adcb_ix()
+inline void MC6809::adcb_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $eA ORB indexed -**0- */
-void MC6809::orb_ix()
+inline void MC6809::orb_ix()
{
fetch_effective_address();
B |= RM(EAD);
}
/* $eB ADDB indexed ***** */
-void MC6809::addb_ix()
+inline void MC6809::addb_ix()
{
uint16 t, r;
fetch_effective_address();
}
/* $eC LDD indexed -**0- */
-void MC6809::ldd_ix()
+inline void MC6809::ldd_ix()
{
fetch_effective_address();
D = RM16(EAD);
}
/* $eD STD indexed -**0- */
-void MC6809::std_ix()
+inline void MC6809::std_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $eE LDU (LDS) indexed -**0- */
-void MC6809::ldu_ix()
+inline void MC6809::ldu_ix()
{
fetch_effective_address();
U = RM16(EAD);
}
/* $10eE LDS indexed -**0- */
-void MC6809::lds_ix()
+inline void MC6809::lds_ix()
{
fetch_effective_address();
S = RM16(EAD);
}
/* $eF STU (STS) indexed -**0- */
-void MC6809::stu_ix()
+inline void MC6809::stu_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $10eF STS indexed -**0- */
-void MC6809::sts_ix()
+inline void MC6809::sts_ix()
{
fetch_effective_address();
CLR_NZV;
}
/* $f0 SUBB extended ?**** */
-void MC6809::subb_ex()
+inline void MC6809::subb_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $f1 CMPB extended ?**** */
-void MC6809::cmpb_ex()
+inline void MC6809::cmpb_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $f2 SBCB extended ?**** */
-void MC6809::sbcb_ex()
+inline void MC6809::sbcb_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $f3 ADDD extended -**** */
-void MC6809::addd_ex()
+inline void MC6809::addd_ex()
{
uint32 r, d;
pair b;
}
/* $f4 ANDB extended -**0- */
-void MC6809::andb_ex()
+inline void MC6809::andb_ex()
{
uint8 t;
EXTBYTE(t);
}
/* $f5 BITB extended -**0- */
-void MC6809::bitb_ex()
+inline void MC6809::bitb_ex()
{
uint8 t, r;
EXTBYTE(t);
}
/* $f6 LDB extended -**0- */
-void MC6809::ldb_ex()
+inline void MC6809::ldb_ex()
{
EXTBYTE(B);
CLR_NZV;
}
/* $f7 STB extended -**0- */
-void MC6809::stb_ex()
+inline void MC6809::stb_ex()
{
CLR_NZV;
SET_NZ8(B);
}
/* $f8 EORB extended -**0- */
-void MC6809::eorb_ex()
+inline void MC6809::eorb_ex()
{
uint8 t;
EXTBYTE(t);
}
/* $f9 ADCB extended ***** */
-void MC6809::adcb_ex()
+inline void MC6809::adcb_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $fA ORB extended -**0- */
-void MC6809::orb_ex()
+inline void MC6809::orb_ex()
{
uint8 t;
EXTBYTE(t);
}
/* $fB ADDB extended ***** */
-void MC6809::addb_ex()
+inline void MC6809::addb_ex()
{
uint16 t, r;
EXTBYTE(t);
}
/* $fC LDD extended -**0- */
-void MC6809::ldd_ex()
+inline void MC6809::ldd_ex()
{
EXTWORD(pD);
CLR_NZV;
}
/* $fD STD extended -**0- */
-void MC6809::std_ex()
+inline void MC6809::std_ex()
{
CLR_NZV;
SET_NZ16(D);
}
/* $fE LDU (LDS) extended -**0- */
-void MC6809::ldu_ex()
+inline void MC6809::ldu_ex()
{
EXTWORD(pU);
CLR_NZV;
}
/* $10fE LDS extended -**0- */
-void MC6809::lds_ex()
+inline void MC6809::lds_ex()
{
EXTWORD(pS);
CLR_NZV;
}
/* $fF STU (STS) extended -**0- */
-void MC6809::stu_ex()
+inline void MC6809::stu_ex()
{
CLR_NZV;
SET_NZ16(U);
}
/* $10fF STS extended -**0- */
-void MC6809::sts_ex()
+inline void MC6809::sts_ex()
{
CLR_NZV;
SET_NZ16(S);
/* $10xx opcodes */
-void MC6809::pref10()
+inline void MC6809::pref10()
{
uint8 ireg2 = ROP_ARG(PCD);
PC++;
}
/* $11xx opcodes */
-void MC6809::pref11()
+inline void MC6809::pref11()
{
uint8 ireg2 = ROP(PCD);
PC++;