diff --git a/src/emu/cpu/hd6309/6309ops.c b/src/emu/cpu/hd6309/6309ops.c index 3894d49404c..f06a1036339 100644 --- a/src/emu/cpu/hd6309/6309ops.c +++ b/src/emu/cpu/hd6309/6309ops.c @@ -12,7 +12,9 @@ HNZVC */ -INLINE void illegal( void ) +#define OP_HANDLER(_name) INLINE void _name (m68_state_t *m68_state) + +OP_HANDLER( illegal ) { LOG(("HD6309: illegal opcode at %04x\nVectoring to [$fff0]\n",PC)); @@ -27,7 +29,7 @@ INLINE void illegal( void ) { PUSHBYTE(F); PUSHBYTE(E); - hd6309_ICount -= 2; + m68_icount -= 2; } PUSHBYTE(B); @@ -38,20 +40,20 @@ INLINE void illegal( void ) CHANGE_PC; } -static void IIError(void) +static void IIError(m68_state_t *m68_state) { SEII; // Set illegal Instruction Flag - illegal(); // Vector to Trap handler + illegal(m68_state); // Vector to Trap handler } -static void DZError(void) +static void DZError(m68_state_t *m68_state) { SEDZ; // Set Division by Zero Flag - illegal(); // Vector to Trap handler + illegal(m68_state); // Vector to Trap handler } /* $00 NEG direct ?**** */ -INLINE void neg_di( void ) +OP_HANDLER( neg_di ) { UINT16 r,t; DIRBYTE(t); @@ -62,7 +64,7 @@ INLINE void neg_di( void ) } /* $01 OIM direct ?**** */ -INLINE void oim_di( void ) +OP_HANDLER( oim_di ) { UINT8 r,t,im; IMMBYTE(im); @@ -74,7 +76,7 @@ INLINE void oim_di( void ) } /* $02 AIM direct */ -INLINE void aim_di( void ) +OP_HANDLER( aim_di ) { UINT8 r,t,im; IMMBYTE(im); @@ -86,7 +88,7 @@ INLINE void aim_di( void ) } /* $03 COM direct -**01 */ -INLINE void com_di( void ) +OP_HANDLER( com_di ) { UINT8 t; DIRBYTE(t); @@ -98,7 +100,7 @@ INLINE void com_di( void ) } /* $04 LSR direct -0*-* */ -INLINE void lsr_di( void ) +OP_HANDLER( lsr_di ) { UINT8 t; DIRBYTE(t); @@ -110,7 +112,7 @@ INLINE void lsr_di( void ) } /* $05 EIM direct */ -INLINE void eim_di( void ) +OP_HANDLER( eim_di ) { UINT8 r,t,im; IMMBYTE(im); @@ -122,7 +124,7 @@ INLINE void eim_di( void ) } /* $06 ROR direct -**-* */ -INLINE void ror_di( void ) +OP_HANDLER( ror_di ) { UINT8 t,r; DIRBYTE(t); @@ -135,7 +137,7 @@ INLINE void ror_di( void ) } /* $07 ASR direct ?**-* */ -INLINE void asr_di( void ) +OP_HANDLER( asr_di ) { UINT8 t; DIRBYTE(t); @@ -147,7 +149,7 @@ INLINE void asr_di( void ) } /* $08 ASL direct ?**** */ -INLINE void asl_di( void ) +OP_HANDLER( asl_di ) { UINT16 t,r; DIRBYTE(t); @@ -158,7 +160,7 @@ INLINE void asl_di( void ) } /* $09 ROL direct -**** */ -INLINE void rol_di( void ) +OP_HANDLER( rol_di ) { UINT16 t,r; DIRBYTE(t); @@ -169,7 +171,7 @@ INLINE void rol_di( void ) } /* $0A DEC direct -***- */ -INLINE void dec_di( void ) +OP_HANDLER( dec_di ) { UINT8 t; DIRBYTE(t); @@ -180,7 +182,7 @@ INLINE void dec_di( void ) } /* $0B TIM direct */ -INLINE void tim_di( void ) +OP_HANDLER( tim_di ) { UINT8 r,t,im; IMMBYTE(im); @@ -191,7 +193,7 @@ INLINE void tim_di( void ) } /* $OC INC direct -***- */ -INLINE void inc_di( void ) +OP_HANDLER( inc_di ) { UINT8 t; DIRBYTE(t); @@ -202,7 +204,7 @@ INLINE void inc_di( void ) } /* $OD TST direct -**0- */ -INLINE void tst_di( void ) +OP_HANDLER( tst_di ) { UINT8 t; DIRBYTE(t); @@ -211,7 +213,7 @@ INLINE void tst_di( void ) } /* $0E JMP direct ----- */ -INLINE void jmp_di( void ) +OP_HANDLER( jmp_di ) { DIRECT; PCD = EAD; @@ -219,7 +221,7 @@ INLINE void jmp_di( void ) } /* $0F CLR direct -0100 */ -INLINE void clr_di( void ) +OP_HANDLER( clr_di ) { UINT32 dummy; DIRECT; @@ -234,27 +236,27 @@ INLINE void clr_di( void ) /* $11 FLAG */ /* $12 NOP inherent ----- */ -INLINE void nop( void ) +OP_HANDLER( nop ) { ; } /* $13 SYNC inherent ----- */ -INLINE void sync( void ) +OP_HANDLER( sync ) { /* SYNC stops processing instructions until an interrupt request happens. */ /* This doesn't require the corresponding interrupt to be enabled: if it */ /* is disabled, execution continues with the next instruction. */ - hd6309.int_state |= HD6309_SYNC; /* HJB 990227 */ - CHECK_IRQ_LINES(); - /* if HD6309_SYNC has not been cleared by CHECK_IRQ_LINES(), + m68_state->int_state |= M6809_SYNC; /* HJB 990227 */ + CHECK_IRQ_LINES(m68_state); + /* if M6809_SYNC has not been cleared by CHECK_IRQ_LINES(m68_state), * stop execution until the interrupt lines change. */ - if( hd6309.int_state & HD6309_SYNC ) - if (hd6309_ICount > 0) hd6309_ICount = 0; + if( m68_state->int_state & M6809_SYNC ) + if (m68_icount > 0) m68_icount = 0; } /* $14 sexw inherent */ -INLINE void sexw( void ) +OP_HANDLER( sexw ) { PAIR q; q.d = SIGNED_16(W); @@ -268,19 +270,19 @@ INLINE void sexw( void ) /* $15 ILLEGAL */ /* $16 LBRA relative ----- */ -INLINE void lbra( void ) +OP_HANDLER( lbra ) { IMMWORD(ea); PC += EA; CHANGE_PC; if ( EA == 0xfffd ) /* EHC 980508 speed up busy loop */ - if ( hd6309_ICount > 0) - hd6309_ICount = 0; + if ( m68_icount > 0) + m68_icount = 0; } /* $17 LBSR relative ----- */ -INLINE void lbsr( void ) +OP_HANDLER( lbsr ) { IMMWORD(ea); PUSHWORD(pPC); @@ -291,7 +293,7 @@ INLINE void lbsr( void ) /* $18 ILLEGAL */ /* $19 DAA inherent (A) -**0* */ -INLINE void daa( void ) +OP_HANDLER( daa ) { UINT8 msn, lsn; UINT16 t, cf = 0; @@ -306,27 +308,27 @@ INLINE void daa( void ) } /* $1A ORCC immediate ##### */ -INLINE void orcc( void ) +OP_HANDLER( orcc ) { UINT8 t; IMMBYTE(t); CC |= t; - CHECK_IRQ_LINES(); /* HJB 990116 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ } /* $1B ILLEGAL */ /* $1C ANDCC immediate ##### */ -INLINE void andcc( void ) +OP_HANDLER( andcc ) { UINT8 t; IMMBYTE(t); CC &= t; - CHECK_IRQ_LINES(); /* HJB 990116 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ } /* $1D SEX inherent -**0- */ -INLINE void sex( void ) +OP_HANDLER( sex ) { UINT16 t; t = SIGNED(B); @@ -335,7 +337,7 @@ INLINE void sex( void ) SET_NZ16(t); } -INLINE void exg( void ) +OP_HANDLER( exg ) { UINT16 t1,t2; UINT8 tb; @@ -423,7 +425,7 @@ INLINE void exg( void ) } /* $1F TFR inherent ----- */ -INLINE void tfr( void ) +OP_HANDLER( tfr ) { UINT8 tb; UINT16 t; @@ -475,7 +477,7 @@ INLINE void tfr( void ) } /* $20 BRA relative ----- */ -INLINE void bra( void ) +OP_HANDLER( bra ) { UINT8 t; IMMBYTE(t); @@ -483,186 +485,186 @@ INLINE void bra( void ) CHANGE_PC; /* JB 970823 - speed up busy loops */ if( t == 0xfe ) - if( hd6309_ICount > 0 ) hd6309_ICount = 0; + if( m68_icount > 0 ) m68_icount = 0; } /* $21 BRN relative ----- */ -INLINE void brn( void ) +OP_HANDLER( brn ) { UINT8 t; IMMBYTE(t); } /* $1021 LBRN relative ----- */ -INLINE void lbrn( void ) +OP_HANDLER( lbrn ) { IMMWORD(ea); } /* $22 BHI relative ----- */ -INLINE void bhi( void ) +OP_HANDLER( bhi ) { BRANCH( !(CC & (CC_Z|CC_C)) ); } /* $1022 LBHI relative ----- */ -INLINE void lbhi( void ) +OP_HANDLER( lbhi ) { LBRANCH( !(CC & (CC_Z|CC_C)) ); } /* $23 BLS relative ----- */ -INLINE void bls( void ) +OP_HANDLER( bls ) { BRANCH( (CC & (CC_Z|CC_C)) ); } /* $1023 LBLS relative ----- */ -INLINE void lbls( void ) +OP_HANDLER( lbls ) { LBRANCH( (CC&(CC_Z|CC_C)) ); } /* $24 BCC relative ----- */ -INLINE void bcc( void ) +OP_HANDLER( bcc ) { BRANCH( !(CC&CC_C) ); } /* $1024 LBCC relative ----- */ -INLINE void lbcc( void ) +OP_HANDLER( lbcc ) { LBRANCH( !(CC&CC_C) ); } /* $25 BCS relative ----- */ -INLINE void bcs( void ) +OP_HANDLER( bcs ) { BRANCH( (CC&CC_C) ); } /* $1025 LBCS relative ----- */ -INLINE void lbcs( void ) +OP_HANDLER( lbcs ) { LBRANCH( (CC&CC_C) ); } /* $26 BNE relative ----- */ -INLINE void bne( void ) +OP_HANDLER( bne ) { BRANCH( !(CC&CC_Z) ); } /* $1026 LBNE relative ----- */ -INLINE void lbne( void ) +OP_HANDLER( lbne ) { LBRANCH( !(CC&CC_Z) ); } /* $27 BEQ relative ----- */ -INLINE void beq( void ) +OP_HANDLER( beq ) { BRANCH( (CC&CC_Z) ); } /* $1027 LBEQ relative ----- */ -INLINE void lbeq( void ) +OP_HANDLER( lbeq ) { LBRANCH( (CC&CC_Z) ); } /* $28 BVC relative ----- */ -INLINE void bvc( void ) +OP_HANDLER( bvc ) { BRANCH( !(CC&CC_V) ); } /* $1028 LBVC relative ----- */ -INLINE void lbvc( void ) +OP_HANDLER( lbvc ) { LBRANCH( !(CC&CC_V) ); } /* $29 BVS relative ----- */ -INLINE void bvs( void ) +OP_HANDLER( bvs ) { BRANCH( (CC&CC_V) ); } /* $1029 LBVS relative ----- */ -INLINE void lbvs( void ) +OP_HANDLER( lbvs ) { LBRANCH( (CC&CC_V) ); } /* $2A BPL relative ----- */ -INLINE void bpl( void ) +OP_HANDLER( bpl ) { BRANCH( !(CC&CC_N) ); } /* $102A LBPL relative ----- */ -INLINE void lbpl( void ) +OP_HANDLER( lbpl ) { LBRANCH( !(CC&CC_N) ); } /* $2B BMI relative ----- */ -INLINE void bmi( void ) +OP_HANDLER( bmi ) { BRANCH( (CC&CC_N) ); } /* $102B LBMI relative ----- */ -INLINE void lbmi( void ) +OP_HANDLER( lbmi ) { LBRANCH( (CC&CC_N) ); } /* $2C BGE relative ----- */ -INLINE void bge( void ) +OP_HANDLER( bge ) { BRANCH( !NXORV ); } /* $102C LBGE relative ----- */ -INLINE void lbge( void ) +OP_HANDLER( lbge ) { LBRANCH( !NXORV ); } /* $2D BLT relative ----- */ -INLINE void blt( void ) +OP_HANDLER( blt ) { BRANCH( NXORV ); } /* $102D LBLT relative ----- */ -INLINE void lblt( void ) +OP_HANDLER( lblt ) { LBRANCH( NXORV ); } /* $2E BGT relative ----- */ -INLINE void bgt( void ) +OP_HANDLER( bgt ) { BRANCH( !(NXORV || (CC&CC_Z)) ); } /* $102E LBGT relative ----- */ -INLINE void lbgt( void ) +OP_HANDLER( lbgt ) { LBRANCH( !(NXORV || (CC&CC_Z)) ); } /* $2F BLE relative ----- */ -INLINE void ble( void ) +OP_HANDLER( ble ) { BRANCH( (NXORV || (CC&CC_Z)) ); } /* $102F LBLE relative ----- */ -INLINE void lble( void ) +OP_HANDLER( lble ) { LBRANCH( (NXORV || (CC&CC_Z)) ); } @@ -710,7 +712,7 @@ INLINE void lble( void ) /* $1030 addr_r r1 + r2 -> r2 */ -INLINE void addr_r( void ) +OP_HANDLER( addr_r ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -743,7 +745,7 @@ INLINE void addr_r( void ) } } -INLINE void adcr( void ) +OP_HANDLER( adcr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -777,7 +779,7 @@ INLINE void adcr( void ) } /* $1032 SUBR r1 - r2 -> r2 */ -INLINE void subr( void ) +OP_HANDLER( subr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -810,7 +812,7 @@ INLINE void subr( void ) } /* $1033 SBCR r1 - r2 - C -> r2 */ -INLINE void sbcr( void ) +OP_HANDLER( sbcr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -843,7 +845,7 @@ INLINE void sbcr( void ) } /* $1034 ANDR r1 & r2 -> r2 */ -INLINE void andr( void ) +OP_HANDLER( andr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -876,7 +878,7 @@ INLINE void andr( void ) } /* $1035 ORR r1 | r2 -> r2 */ -INLINE void orr( void ) +OP_HANDLER( orr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -909,7 +911,7 @@ INLINE void orr( void ) } /* $1036 EORR r1 ^ r2 -> r2 */ -INLINE void eorr( void ) +OP_HANDLER( eorr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -942,7 +944,7 @@ INLINE void eorr( void ) } /* $1037 CMPR r1 - r2 */ -INLINE void cmpr( void ) +OP_HANDLER( cmpr ) { UINT8 tb, z8 = 0; UINT16 z16 = 0, r8; @@ -968,7 +970,7 @@ INLINE void cmpr( void ) } /* $1138 TFM R0+,R1+ */ -INLINE void tfmpp( void ) +OP_HANDLER( tfmpp ) { UINT8 tb, srcValue = 0; @@ -982,7 +984,7 @@ INLINE void tfmpp( void ) case 2: srcValue = RM(Y++); break; case 3: srcValue = RM(U++); break; case 4: srcValue = RM(S++); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } switch(tb&15) { @@ -991,7 +993,7 @@ INLINE void tfmpp( void ) case 2: WM(Y++, srcValue); break; case 3: WM(U++, srcValue); break; case 4: WM(S++, srcValue); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } PCD = PCD - 3; @@ -999,11 +1001,11 @@ INLINE void tfmpp( void ) W--; } else - hd6309_ICount -= 6; /* Needs six aditional cycles to get the 6+3n */ + m68_icount -= 6; /* Needs six aditional cycles to get the 6+3n */ } /* $1139 TFM R0-,R1- */ -INLINE void tfmmm( void ) +OP_HANDLER( tfmmm ) { UINT8 tb, srcValue = 0; @@ -1017,7 +1019,7 @@ INLINE void tfmmm( void ) case 2: srcValue = RM(Y--); break; case 3: srcValue = RM(U--); break; case 4: srcValue = RM(S--); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } switch(tb&15) { @@ -1026,7 +1028,7 @@ INLINE void tfmmm( void ) case 2: WM(Y--, srcValue); break; case 3: WM(U--, srcValue); break; case 4: WM(S--, srcValue); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } PCD = PCD - 3; @@ -1034,11 +1036,11 @@ INLINE void tfmmm( void ) W--; } else - hd6309_ICount -= 6; /* Needs six aditional cycles to get the 6+3n */ + m68_icount -= 6; /* Needs six aditional cycles to get the 6+3n */ } /* $113A TFM R0+,R1 */ -INLINE void tfmpc( void ) +OP_HANDLER( tfmpc ) { UINT8 tb, srcValue = 0; @@ -1052,7 +1054,7 @@ INLINE void tfmpc( void ) case 2: srcValue = RM(Y++); break; case 3: srcValue = RM(U++); break; case 4: srcValue = RM(S++); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } switch(tb&15) { @@ -1061,7 +1063,7 @@ INLINE void tfmpc( void ) case 2: WM(Y, srcValue); break; case 3: WM(U, srcValue); break; case 4: WM(S, srcValue); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } PCD = PCD - 3; @@ -1069,11 +1071,11 @@ INLINE void tfmpc( void ) W--; } else - hd6309_ICount -= 6; /* Needs six aditional cycles to get the 6+3n */ + m68_icount -= 6; /* Needs six aditional cycles to get the 6+3n */ } /* $113B TFM R0,R1+ */ -INLINE void tfmcp( void ) +OP_HANDLER( tfmcp ) { UINT8 tb, srcValue = 0; @@ -1087,7 +1089,7 @@ INLINE void tfmcp( void ) case 2: srcValue = RM(Y); break; case 3: srcValue = RM(U); break; case 4: srcValue = RM(S); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } switch(tb&15) { @@ -1096,7 +1098,7 @@ INLINE void tfmcp( void ) case 2: WM(Y++, srcValue); break; case 3: WM(U++, srcValue); break; case 4: WM(S++, srcValue); break; - default: IIError(); return; break; /* reg PC thru F */ + default: IIError(m68_state); return; break; /* reg PC thru F */ } PCD = PCD - 3; @@ -1104,163 +1106,163 @@ INLINE void tfmcp( void ) W--; } else - hd6309_ICount -= 6; /* Needs six aditional cycles to get the 6+3n */ + m68_icount -= 6; /* Needs six aditional cycles to get the 6+3n */ } /* $30 LEAX indexed --*-- */ -INLINE void leax( void ) +OP_HANDLER( leax ) { - fetch_effective_address(); + fetch_effective_address(m68_state); X = EA; CLR_Z; SET_Z(X); } /* $31 LEAY indexed --*-- */ -INLINE void leay( void ) +OP_HANDLER( leay ) { - fetch_effective_address(); + fetch_effective_address(m68_state); Y = EA; CLR_Z; SET_Z(Y); } /* $32 LEAS indexed ----- */ -INLINE void leas( void ) +OP_HANDLER( leas ) { - fetch_effective_address(); + fetch_effective_address(m68_state); S = EA; - hd6309.int_state |= HD6309_LDS; + m68_state->int_state |= M6809_LDS; } /* $33 LEAU indexed ----- */ -INLINE void leau( void ) +OP_HANDLER( leau ) { - fetch_effective_address(); + fetch_effective_address(m68_state); U = EA; } /* $34 PSHS inherent ----- */ -INLINE void pshs( void ) +OP_HANDLER( pshs ) { UINT8 t; IMMBYTE(t); - if( t&0x80 ) { PUSHWORD(pPC); hd6309_ICount -= 2; } - if( t&0x40 ) { PUSHWORD(pU); hd6309_ICount -= 2; } - if( t&0x20 ) { PUSHWORD(pY); hd6309_ICount -= 2; } - if( t&0x10 ) { PUSHWORD(pX); hd6309_ICount -= 2; } - if( t&0x08 ) { PUSHBYTE(DP); hd6309_ICount -= 1; } - if( t&0x04 ) { PUSHBYTE(B); hd6309_ICount -= 1; } - if( t&0x02 ) { PUSHBYTE(A); hd6309_ICount -= 1; } - if( t&0x01 ) { PUSHBYTE(CC); hd6309_ICount -= 1; } + if( t&0x80 ) { PUSHWORD(pPC); m68_icount -= 2; } + if( t&0x40 ) { PUSHWORD(pU); m68_icount -= 2; } + if( t&0x20 ) { PUSHWORD(pY); m68_icount -= 2; } + if( t&0x10 ) { PUSHWORD(pX); m68_icount -= 2; } + if( t&0x08 ) { PUSHBYTE(DP); m68_icount -= 1; } + if( t&0x04 ) { PUSHBYTE(B); m68_icount -= 1; } + if( t&0x02 ) { PUSHBYTE(A); m68_icount -= 1; } + if( t&0x01 ) { PUSHBYTE(CC); m68_icount -= 1; } } /* $1038 PSHSW inherent ----- */ -INLINE void pshsw( void ) +OP_HANDLER( pshsw ) { PUSHWORD(pW); } /* $103a PSHUW inherent ----- */ -INLINE void pshuw( void ) +OP_HANDLER( pshuw ) { PSHUWORD(pW); } /* $35 PULS inherent ----- */ -INLINE void puls( void ) +OP_HANDLER( puls ) { UINT8 t; IMMBYTE(t); - if( t&0x01 ) { PULLBYTE(CC); hd6309_ICount -= 1; } - if( t&0x02 ) { PULLBYTE(A); hd6309_ICount -= 1; } - if( t&0x04 ) { PULLBYTE(B); hd6309_ICount -= 1; } - if( t&0x08 ) { PULLBYTE(DP); hd6309_ICount -= 1; } - if( t&0x10 ) { PULLWORD(XD); hd6309_ICount -= 2; } - if( t&0x20 ) { PULLWORD(YD); hd6309_ICount -= 2; } - if( t&0x40 ) { PULLWORD(UD); hd6309_ICount -= 2; } - if( t&0x80 ) { PULLWORD(PCD); CHANGE_PC; hd6309_ICount -= 2; } + if( t&0x01 ) { PULLBYTE(CC); m68_icount -= 1; } + if( t&0x02 ) { PULLBYTE(A); m68_icount -= 1; } + if( t&0x04 ) { PULLBYTE(B); m68_icount -= 1; } + if( t&0x08 ) { PULLBYTE(DP); m68_icount -= 1; } + if( t&0x10 ) { PULLWORD(XD); m68_icount -= 2; } + if( t&0x20 ) { PULLWORD(YD); m68_icount -= 2; } + if( t&0x40 ) { PULLWORD(UD); m68_icount -= 2; } + if( t&0x80 ) { PULLWORD(PCD); CHANGE_PC; m68_icount -= 2; } /* HJB 990225: moved check after all PULLs */ - if( t&0x01 ) { CHECK_IRQ_LINES(); } + if( t&0x01 ) { CHECK_IRQ_LINES(m68_state); } } /* $1039 PULSW inherent ----- */ -INLINE void pulsw( void ) +OP_HANDLER( pulsw ) { PULLWORD(W); } /* $103b PULUW inherent ----- */ -INLINE void puluw( void ) +OP_HANDLER( puluw ) { PULUWORD(W); } /* $36 PSHU inherent ----- */ -INLINE void pshu( void ) +OP_HANDLER( pshu ) { UINT8 t; IMMBYTE(t); - if( t&0x80 ) { PSHUWORD(pPC); hd6309_ICount -= 2; } - if( t&0x40 ) { PSHUWORD(pS); hd6309_ICount -= 2; } - if( t&0x20 ) { PSHUWORD(pY); hd6309_ICount -= 2; } - if( t&0x10 ) { PSHUWORD(pX); hd6309_ICount -= 2; } - if( t&0x08 ) { PSHUBYTE(DP); hd6309_ICount -= 1; } - if( t&0x04 ) { PSHUBYTE(B); hd6309_ICount -= 1; } - if( t&0x02 ) { PSHUBYTE(A); hd6309_ICount -= 1; } - if( t&0x01 ) { PSHUBYTE(CC); hd6309_ICount -= 1; } + if( t&0x80 ) { PSHUWORD(pPC); m68_icount -= 2; } + if( t&0x40 ) { PSHUWORD(pS); m68_icount -= 2; } + if( t&0x20 ) { PSHUWORD(pY); m68_icount -= 2; } + if( t&0x10 ) { PSHUWORD(pX); m68_icount -= 2; } + if( t&0x08 ) { PSHUBYTE(DP); m68_icount -= 1; } + if( t&0x04 ) { PSHUBYTE(B); m68_icount -= 1; } + if( t&0x02 ) { PSHUBYTE(A); m68_icount -= 1; } + if( t&0x01 ) { PSHUBYTE(CC); m68_icount -= 1; } } /* 37 PULU inherent ----- */ -INLINE void pulu( void ) +OP_HANDLER( pulu ) { UINT8 t; IMMBYTE(t); - if( t&0x01 ) { PULUBYTE(CC); hd6309_ICount -= 1; } - if( t&0x02 ) { PULUBYTE(A); hd6309_ICount -= 1; } - if( t&0x04 ) { PULUBYTE(B); hd6309_ICount -= 1; } - if( t&0x08 ) { PULUBYTE(DP); hd6309_ICount -= 1; } - if( t&0x10 ) { PULUWORD(XD); hd6309_ICount -= 2; } - if( t&0x20 ) { PULUWORD(YD); hd6309_ICount -= 2; } - if( t&0x40 ) { PULUWORD(SD); hd6309_ICount -= 2; } - if( t&0x80 ) { PULUWORD(PCD); CHANGE_PC; hd6309_ICount -= 2; } + if( t&0x01 ) { PULUBYTE(CC); m68_icount -= 1; } + if( t&0x02 ) { PULUBYTE(A); m68_icount -= 1; } + if( t&0x04 ) { PULUBYTE(B); m68_icount -= 1; } + if( t&0x08 ) { PULUBYTE(DP); m68_icount -= 1; } + if( t&0x10 ) { PULUWORD(XD); m68_icount -= 2; } + if( t&0x20 ) { PULUWORD(YD); m68_icount -= 2; } + if( t&0x40 ) { PULUWORD(SD); m68_icount -= 2; } + if( t&0x80 ) { PULUWORD(PCD); CHANGE_PC; m68_icount -= 2; } /* HJB 990225: moved check after all PULLs */ - if( t&0x01 ) { CHECK_IRQ_LINES(); } + if( t&0x01 ) { CHECK_IRQ_LINES(m68_state); } } /* $38 ILLEGAL */ /* $39 RTS inherent ----- */ -INLINE void rts( void ) +OP_HANDLER( rts ) { PULLWORD(PCD); CHANGE_PC; } /* $3A ABX inherent ----- */ -INLINE void abx( void ) +OP_HANDLER( abx ) { X += B; } /* $3B RTI inherent ##### */ -INLINE void rti( void ) +OP_HANDLER( rti ) { UINT8 t; PULLBYTE(CC); t = CC & CC_E; /* HJB 990225: entire state saved? */ if(t) { - hd6309_ICount -= 9; + m68_icount -= 9; PULLBYTE(A); PULLBYTE(B); if ( MD & MD_EM ) { PULLBYTE(E); PULLBYTE(F); - hd6309_ICount -= 2; + m68_icount -= 2; } PULLBYTE(DP); PULLWORD(XD); @@ -1269,11 +1271,11 @@ INLINE void rti( void ) } PULLWORD(PCD); CHANGE_PC; - CHECK_IRQ_LINES(); /* HJB 990116 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ } /* $3C CWAI inherent ----1 */ -INLINE void cwai( void ) +OP_HANDLER( cwai ) { UINT8 t; IMMBYTE(t); @@ -1297,15 +1299,15 @@ INLINE void cwai( void ) PUSHBYTE(B); PUSHBYTE(A); PUSHBYTE(CC); - hd6309.int_state |= HD6309_CWAI; /* HJB 990228 */ - CHECK_IRQ_LINES(); /* HJB 990116 */ - if( hd6309.int_state & HD6309_CWAI ) - if( hd6309_ICount > 0 ) - hd6309_ICount = 0; + m68_state->int_state |= M6809_CWAI; /* HJB 990228 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ + if( m68_state->int_state & M6809_CWAI ) + if( m68_icount > 0 ) + m68_icount = 0; } /* $3D MUL inherent --*-@ */ -INLINE void mul( void ) +OP_HANDLER( mul ) { UINT16 t; t = A * B; @@ -1316,7 +1318,7 @@ INLINE void mul( void ) /* $3E ILLEGAL */ /* $3F SWI (SWI2 SWI3) absolute indirect ----- */ -INLINE void swi( void ) +OP_HANDLER( swi ) { CC |= CC_E; /* HJB 980225: save entire state */ PUSHWORD(pPC); @@ -1343,12 +1345,9 @@ INLINE void swi( void ) #define decodePB_src(n) (((n) >> 3) & 0x07) #define decodePB_dst(n) (((n) >> 0) & 0x07) -static UINT8 dummy_byte; -static unsigned char *const regTable[4] = { &(CC), &(A), &(B), &dummy_byte }; - static const UINT8 bitTable[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; -INLINE void band( void ) +OP_HANDLER( band ) { UINT8 pb; UINT16 db; @@ -1357,15 +1356,15 @@ INLINE void band( void ) DIRBYTE(db); - if ( ( *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) && ( db & bitTable[decodePB_src(pb)] )) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + if ( ( *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) && ( db & bitTable[decodePB_src(pb)] )) + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1131 BIAND */ -INLINE void biand( void ) +OP_HANDLER( biand ) { UINT8 pb; UINT16 db; @@ -1374,15 +1373,15 @@ INLINE void biand( void ) DIRBYTE(db); - if ( ( *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) && ( (~db) & bitTable[decodePB_src(pb)] )) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + if ( ( *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) && ( (~db) & bitTable[decodePB_src(pb)] )) + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1132 BOR */ -INLINE void bor( void ) +OP_HANDLER( bor ) { UINT8 pb; UINT16 db; @@ -1391,15 +1390,15 @@ INLINE void bor( void ) DIRBYTE(db); - if ( ( *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) || ( db & bitTable[decodePB_src(pb)] )) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + if ( ( *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) || ( db & bitTable[decodePB_src(pb)] )) + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1133 BIOR */ -INLINE void bior( void ) +OP_HANDLER( bior ) { UINT8 pb; UINT16 db; @@ -1408,15 +1407,15 @@ INLINE void bior( void ) DIRBYTE(db); - if ( ( *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) || ( (~db) & bitTable[decodePB_src(pb)] )) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + if ( ( *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) || ( (~db) & bitTable[decodePB_src(pb)] )) + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1134 BEOR */ -INLINE void beor( void ) +OP_HANDLER( beor ) { UINT8 pb; UINT16 db; @@ -1426,18 +1425,18 @@ INLINE void beor( void ) DIRBYTE(db); - tReg = *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)]; + tReg = *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)]; tMem = db & bitTable[decodePB_src(pb)]; if ( (tReg || tMem ) && !(tReg && tMem) ) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1135 BIEOR */ -INLINE void bieor( void ) +OP_HANDLER( bieor ) { UINT8 pb; UINT16 db; @@ -1447,18 +1446,18 @@ INLINE void bieor( void ) DIRBYTE(db); - tReg = *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)]; + tReg = *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)]; tMem = (~db) & bitTable[decodePB_src(pb)]; if ( (tReg || tMem ) && !(tReg && tMem) ) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1133 LDBT */ -INLINE void ldbt( void ) +OP_HANDLER( ldbt ) { UINT8 pb; UINT16 db; @@ -1468,14 +1467,14 @@ INLINE void ldbt( void ) DIRBYTE(db); if ( ( db & bitTable[decodePB_src(pb)] ) ) - *(regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; + *(m68_state->regTable[decodePB_tReg(pb)]) |= bitTable[decodePB_dst(pb)]; else - *(regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); + *(m68_state->regTable[decodePB_tReg(pb)]) &= (~bitTable[decodePB_dst(pb)]); } /* $1134 STBT */ -INLINE void stbt( void ) +OP_HANDLER( stbt ) { UINT8 pb; UINT16 db; @@ -1484,14 +1483,14 @@ INLINE void stbt( void ) DIRBYTE(db); - if ( ( *(regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) ) + if ( ( *(m68_state->regTable[decodePB_tReg(pb)]) & bitTable[decodePB_dst(pb)] ) ) WM( EAD, db | bitTable[decodePB_src(pb)] ); else WM( EAD, db & (~bitTable[decodePB_src(pb)]) ); } /* $103F SWI2 absolute indirect ----- */ -INLINE void swi2( void ) +OP_HANDLER( swi2 ) { CC |= CC_E; /* HJB 980225: save entire state */ PUSHWORD(pPC); @@ -1512,7 +1511,7 @@ INLINE void swi2( void ) } /* $113F SWI3 absolute indirect ----- */ -INLINE void swi3( void ) +OP_HANDLER( swi3 ) { CC |= CC_E; /* HJB 980225: save entire state */ PUSHWORD(pPC); @@ -1533,7 +1532,7 @@ INLINE void swi3( void ) } /* $40 NEGA inherent ?**** */ -INLINE void nega( void ) +OP_HANDLER( nega ) { UINT16 r; r = -A; @@ -1547,7 +1546,7 @@ INLINE void nega( void ) /* $42 ILLEGAL */ /* $43 COMA inherent -**01 */ -INLINE void coma( void ) +OP_HANDLER( coma ) { A = ~A; CLR_NZV; @@ -1556,7 +1555,7 @@ INLINE void coma( void ) } /* $44 LSRA inherent -0*-* */ -INLINE void lsra( void ) +OP_HANDLER( lsra ) { CLR_NZC; CC |= (A & CC_C); @@ -1567,7 +1566,7 @@ INLINE void lsra( void ) /* $45 ILLEGAL */ /* $46 RORA inherent -**-* */ -INLINE void rora( void ) +OP_HANDLER( rora ) { UINT8 r; r = (CC & CC_C) << 7; @@ -1579,7 +1578,7 @@ INLINE void rora( void ) } /* $47 ASRA inherent ?**-* */ -INLINE void asra( void ) +OP_HANDLER( asra ) { CLR_NZC; CC |= (A & CC_C); @@ -1588,7 +1587,7 @@ INLINE void asra( void ) } /* $48 ASLA inherent ?**** */ -INLINE void asla( void ) +OP_HANDLER( asla ) { UINT16 r; r = A << 1; @@ -1598,7 +1597,7 @@ INLINE void asla( void ) } /* $49 ROLA inherent -**** */ -INLINE void rola( void ) +OP_HANDLER( rola ) { UINT16 t,r; t = A; @@ -1608,7 +1607,7 @@ INLINE void rola( void ) } /* $4A DECA inherent -***- */ -INLINE void deca( void ) +OP_HANDLER( deca ) { --A; CLR_NZV; @@ -1618,7 +1617,7 @@ INLINE void deca( void ) /* $4B ILLEGAL */ /* $4C INCA inherent -***- */ -INLINE void inca( void ) +OP_HANDLER( inca ) { ++A; CLR_NZV; @@ -1626,7 +1625,7 @@ INLINE void inca( void ) } /* $4D TSTA inherent -**0- */ -INLINE void tsta( void ) +OP_HANDLER( tsta ) { CLR_NZV; SET_NZ8(A); @@ -1635,14 +1634,14 @@ INLINE void tsta( void ) /* $4E ILLEGAL */ /* $4F CLRA inherent -0100 */ -INLINE void clra( void ) +OP_HANDLER( clra ) { A = 0; CLR_NZVC; SEZ; } /* $50 NEGB inherent ?**** */ -INLINE void negb( void ) +OP_HANDLER( negb ) { UINT16 r; r = -B; @@ -1652,7 +1651,7 @@ INLINE void negb( void ) } /* $1040 NEGD inherent ?**** */ -INLINE void negd( void ) +OP_HANDLER( negd ) { UINT32 r; r = -D; @@ -1666,7 +1665,7 @@ INLINE void negd( void ) /* $52 ILLEGAL */ /* $53 COMB inherent -**01 */ -INLINE void comb( void ) +OP_HANDLER( comb ) { B = ~B; CLR_NZV; @@ -1675,7 +1674,7 @@ INLINE void comb( void ) } /* $1143 COME inherent -**01 */ -INLINE void come( void ) +OP_HANDLER( come ) { E = ~E; CLR_NZV; @@ -1684,7 +1683,7 @@ INLINE void come( void ) } /* $1153 COMF inherent -**01 */ -INLINE void comf( void ) +OP_HANDLER( comf ) { F = ~F; CLR_NZV; @@ -1693,7 +1692,7 @@ INLINE void comf( void ) } /* $1043 COMD inherent -**01 */ -INLINE void comd( void ) +OP_HANDLER( comd ) { D = ~D; CLR_NZV; @@ -1702,7 +1701,7 @@ INLINE void comd( void ) } /* $1053 COMW inherent -**01 */ -INLINE void comw( void ) +OP_HANDLER( comw ) { W = ~W; CLR_NZV; @@ -1711,7 +1710,7 @@ INLINE void comw( void ) } /* $54 LSRB inherent -0*-* */ -INLINE void lsrb( void ) +OP_HANDLER( lsrb ) { CLR_NZC; CC |= (B & CC_C); @@ -1720,7 +1719,7 @@ INLINE void lsrb( void ) } /* $1044 LSRD inherent -0*-* */ -INLINE void lsrd( void ) +OP_HANDLER( lsrd ) { CLR_NZC; CC |= (B & CC_C); @@ -1729,7 +1728,7 @@ INLINE void lsrd( void ) } /* $1054 LSRW inherent -0*-* */ -INLINE void lsrw( void ) +OP_HANDLER( lsrw ) { CLR_NZC; CC |= (F & CC_C); @@ -1740,7 +1739,7 @@ INLINE void lsrw( void ) /* $55 ILLEGAL */ /* $56 RORB inherent -**-* */ -INLINE void rorb( void ) +OP_HANDLER( rorb ) { UINT8 r; r = (CC & CC_C) << 7; @@ -1752,7 +1751,7 @@ INLINE void rorb( void ) } /* $1046 RORD inherent -**-* */ -INLINE void rord( void ) +OP_HANDLER( rord ) { UINT16 r; r = (CC & CC_C) << 15; @@ -1764,7 +1763,7 @@ INLINE void rord( void ) } /* $1056 RORW inherent -**-* */ -INLINE void rorw( void ) +OP_HANDLER( rorw ) { UINT16 r; r = (CC & CC_C) << 15; @@ -1776,7 +1775,7 @@ INLINE void rorw( void ) } /* $57 ASRB inherent ?**-* */ -INLINE void asrb( void ) +OP_HANDLER( asrb ) { CLR_NZC; CC |= (B & CC_C); @@ -1785,7 +1784,7 @@ INLINE void asrb( void ) } /* $1047 ASRD inherent ?**-* */ -INLINE void asrd( void ) +OP_HANDLER( asrd ) { CLR_NZC; CC |= (D & CC_C); @@ -1794,7 +1793,7 @@ INLINE void asrd( void ) } /* $58 ASLB inherent ?**** */ -INLINE void aslb( void ) +OP_HANDLER( aslb ) { UINT16 r; r = B << 1; @@ -1804,7 +1803,7 @@ INLINE void aslb( void ) } /* $1048 ASLD inherent ?**** */ -INLINE void asld( void ) +OP_HANDLER( asld ) { UINT32 r; r = D << 1; @@ -1814,7 +1813,7 @@ INLINE void asld( void ) } /* $59 ROLB inherent -**** */ -INLINE void rolb( void ) +OP_HANDLER( rolb ) { UINT16 t,r; t = B; @@ -1826,7 +1825,7 @@ INLINE void rolb( void ) } /* $1049 ROLD inherent -**** */ -INLINE void rold( void ) +OP_HANDLER( rold ) { UINT32 t,r; t = D; @@ -1838,7 +1837,7 @@ INLINE void rold( void ) } /* $1059 ROLW inherent -**** */ -INLINE void rolw( void ) +OP_HANDLER( rolw ) { UINT32 t,r; t = W; @@ -1850,7 +1849,7 @@ INLINE void rolw( void ) } /* $5A DECB inherent -***- */ -INLINE void decb( void ) +OP_HANDLER( decb ) { --B; CLR_NZV; @@ -1858,7 +1857,7 @@ INLINE void decb( void ) } /* $114a DECE inherent -***- */ -INLINE void dece( void ) +OP_HANDLER( dece ) { --E; CLR_NZV; @@ -1866,7 +1865,7 @@ INLINE void dece( void ) } /* $115a DECF inherent -***- */ -INLINE void decf( void ) +OP_HANDLER( decf ) { --F; CLR_NZV; @@ -1874,7 +1873,7 @@ INLINE void decf( void ) } /* $104a DECD inherent -***- */ -INLINE void decd( void ) +OP_HANDLER( decd ) { UINT32 r; r = D - 1; @@ -1884,7 +1883,7 @@ INLINE void decd( void ) } /* $105a DECW inherent -***- */ -INLINE void decw( void ) +OP_HANDLER( decw ) { UINT32 r; r = W - 1; @@ -1896,7 +1895,7 @@ INLINE void decw( void ) /* $5B ILLEGAL */ /* $5C INCB inherent -***- */ -INLINE void incb( void ) +OP_HANDLER( incb ) { ++B; CLR_NZV; @@ -1904,7 +1903,7 @@ INLINE void incb( void ) } /* $114c INCE inherent -***- */ -INLINE void ince( void ) +OP_HANDLER( ince ) { ++E; CLR_NZV; @@ -1912,7 +1911,7 @@ INLINE void ince( void ) } /* $115c INCF inherent -***- */ -INLINE void incf( void ) +OP_HANDLER( incf ) { ++F; CLR_NZV; @@ -1920,7 +1919,7 @@ INLINE void incf( void ) } /* $104c INCD inherent -***- */ -INLINE void incd( void ) +OP_HANDLER( incd ) { UINT32 r; r = D + 1; @@ -1930,7 +1929,7 @@ INLINE void incd( void ) } /* $105c INCW inherent -***- */ -INLINE void incw( void ) +OP_HANDLER( incw ) { UINT32 r; r = W + 1; @@ -1940,35 +1939,35 @@ INLINE void incw( void ) } /* $5D TSTB inherent -**0- */ -INLINE void tstb( void ) +OP_HANDLER( tstb ) { CLR_NZV; SET_NZ8(B); } /* $104d TSTD inherent -**0- */ -INLINE void tstd( void ) +OP_HANDLER( tstd ) { CLR_NZV; SET_NZ16(D); } /* $105d TSTW inherent -**0- */ -INLINE void tstw( void ) +OP_HANDLER( tstw ) { CLR_NZV; SET_NZ16(W); } /* $114d TSTE inherent -**0- */ -INLINE void tste( void ) +OP_HANDLER( tste ) { CLR_NZV; SET_NZ8(E); } /* $115d TSTF inherent -**0- */ -INLINE void tstf( void ) +OP_HANDLER( tstf ) { CLR_NZV; SET_NZ8(F); @@ -1977,45 +1976,45 @@ INLINE void tstf( void ) /* $5E ILLEGAL */ /* $5F CLRB inherent -0100 */ -INLINE void clrb( void ) +OP_HANDLER( clrb ) { B = 0; CLR_NZVC; SEZ; } /* $104f CLRD inherent -0100 */ -INLINE void clrd( void ) +OP_HANDLER( clrd ) { D = 0; CLR_NZVC; SEZ; } /* $114f CLRE inherent -0100 */ -INLINE void clre( void ) +OP_HANDLER( clre ) { E = 0; CLR_NZVC; SEZ; } /* $115f CLRF inherent -0100 */ -INLINE void clrf( void ) +OP_HANDLER( clrf ) { F = 0; CLR_NZVC; SEZ; } /* $105f CLRW inherent -0100 */ -INLINE void clrw( void ) +OP_HANDLER( clrw ) { W = 0; CLR_NZVC; SEZ; } /* $60 NEG indexed ?**** */ -INLINE void neg_ix( void ) +OP_HANDLER( neg_ix ) { UINT16 r,t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r=-t; CLR_NZVC; @@ -2024,11 +2023,11 @@ INLINE void neg_ix( void ) } /* $61 OIM indexed */ -INLINE void oim_ix( void ) +OP_HANDLER( oim_ix ) { UINT8 r,im; IMMBYTE(im); - fetch_effective_address(); + fetch_effective_address(m68_state); r = im | RM(EAD); CLR_NZV; SET_NZ8(r); @@ -2036,11 +2035,11 @@ INLINE void oim_ix( void ) } /* $62 AIM indexed */ -INLINE void aim_ix( void ) +OP_HANDLER( aim_ix ) { UINT8 r,im; IMMBYTE(im); - fetch_effective_address(); + fetch_effective_address(m68_state); r = im & RM(EAD); CLR_NZV; SET_NZ8(r); @@ -2048,10 +2047,10 @@ INLINE void aim_ix( void ) } /* $63 COM indexed -**01 */ -INLINE void com_ix( void ) +OP_HANDLER( com_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = ~RM(EAD); CLR_NZV; SET_NZ8(t); @@ -2060,10 +2059,10 @@ INLINE void com_ix( void ) } /* $64 LSR indexed -0*-* */ -INLINE void lsr_ix( void ) +OP_HANDLER( lsr_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); CLR_NZC; CC |= (t & CC_C); @@ -2072,21 +2071,21 @@ INLINE void lsr_ix( void ) } /* $65 EIM indexed */ -INLINE void eim_ix( void ) +OP_HANDLER( eim_ix ) { UINT8 r,im; IMMBYTE(im); - fetch_effective_address(); + fetch_effective_address(m68_state); r = im ^ RM(EAD); CLR_NZV; SET_NZ8(r); WM(EAD,r); } /* $66 ROR indexed -**-* */ -INLINE void ror_ix( void ) +OP_HANDLER( ror_ix ) { UINT8 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); r = (CC & CC_C) << 7; CLR_NZC; @@ -2096,10 +2095,10 @@ INLINE void ror_ix( void ) } /* $67 ASR indexed ?**-* */ -INLINE void asr_ix( void ) +OP_HANDLER( asr_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); CLR_NZC; CC |= (t & CC_C); @@ -2109,10 +2108,10 @@ INLINE void asr_ix( void ) } /* $68 ASL indexed ?**** */ -INLINE void asl_ix( void ) +OP_HANDLER( asl_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); r = t << 1; CLR_NZVC; @@ -2121,10 +2120,10 @@ INLINE void asl_ix( void ) } /* $69 ROL indexed -**** */ -INLINE void rol_ix( void ) +OP_HANDLER( rol_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); r = CC & CC_C; r |= t << 1; @@ -2134,21 +2133,21 @@ INLINE void rol_ix( void ) } /* $6A DEC indexed -***- */ -INLINE void dec_ix( void ) +OP_HANDLER( dec_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD) - 1; CLR_NZV; SET_FLAGS8D(t); WM(EAD,t); } /* $6B TIM indexed */ -INLINE void tim_ix( void ) +OP_HANDLER( tim_ix ) { UINT8 r,im,m; IMMBYTE(im); - fetch_effective_address(); + fetch_effective_address(m68_state); m = RM(EAD); r = im & m; CLR_NZV; @@ -2156,45 +2155,45 @@ INLINE void tim_ix( void ) } /* $6C INC indexed -***- */ -INLINE void inc_ix( void ) +OP_HANDLER( inc_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD) + 1; CLR_NZV; SET_FLAGS8I(t); WM(EAD,t); } /* $6D TST indexed -**0- */ -INLINE void tst_ix( void ) +OP_HANDLER( tst_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); CLR_NZV; SET_NZ8(t); } /* $6E JMP indexed ----- */ -INLINE void jmp_ix( void ) +OP_HANDLER( jmp_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); PCD = EAD; CHANGE_PC; } /* $6F CLR indexed -0100 */ -INLINE void clr_ix( void ) +OP_HANDLER( clr_ix ) { UINT32 dummy; - fetch_effective_address(); + fetch_effective_address(m68_state); dummy = RM(EAD); WM(EAD,0); CLR_NZVC; SEZ; } /* $70 NEG extended ?**** */ -INLINE void neg_ex( void ) +OP_HANDLER( neg_ex ) { UINT16 r,t; EXTBYTE(t); r=-t; @@ -2203,7 +2202,7 @@ INLINE void neg_ex( void ) } /* $71 OIM extended */ -INLINE void oim_ex( void ) +OP_HANDLER( oim_ex ) { UINT8 r,t,im; IMMBYTE(im); @@ -2215,7 +2214,7 @@ INLINE void oim_ex( void ) } /* $72 AIM extended */ -INLINE void aim_ex( void ) +OP_HANDLER( aim_ex ) { UINT8 r,t,im; IMMBYTE(im); @@ -2227,7 +2226,7 @@ INLINE void aim_ex( void ) } /* $73 COM extended -**01 */ -INLINE void com_ex( void ) +OP_HANDLER( com_ex ) { UINT8 t; EXTBYTE(t); t = ~t; @@ -2236,7 +2235,7 @@ INLINE void com_ex( void ) } /* $74 LSR extended -0*-* */ -INLINE void lsr_ex( void ) +OP_HANDLER( lsr_ex ) { UINT8 t; EXTBYTE(t); CLR_NZC; CC |= (t & CC_C); @@ -2245,7 +2244,7 @@ INLINE void lsr_ex( void ) } /* $75 EIM extended */ -INLINE void eim_ex( void ) +OP_HANDLER( eim_ex ) { UINT8 r,t,im; IMMBYTE(im); @@ -2257,7 +2256,7 @@ INLINE void eim_ex( void ) } /* $76 ROR extended -**-* */ -INLINE void ror_ex( void ) +OP_HANDLER( ror_ex ) { UINT8 t,r; EXTBYTE(t); r=(CC & CC_C) << 7; @@ -2267,7 +2266,7 @@ INLINE void ror_ex( void ) } /* $77 ASR extended ?**-* */ -INLINE void asr_ex( void ) +OP_HANDLER( asr_ex ) { UINT8 t; EXTBYTE(t); CLR_NZC; CC |= (t & CC_C); @@ -2277,7 +2276,7 @@ INLINE void asr_ex( void ) } /* $78 ASL extended ?**** */ -INLINE void asl_ex( void ) +OP_HANDLER( asl_ex ) { UINT16 t,r; EXTBYTE(t); r=t<<1; @@ -2286,7 +2285,7 @@ INLINE void asl_ex( void ) } /* $79 ROL extended -**** */ -INLINE void rol_ex( void ) +OP_HANDLER( rol_ex ) { UINT16 t,r; EXTBYTE(t); r = (CC & CC_C) | (t << 1); @@ -2295,7 +2294,7 @@ INLINE void rol_ex( void ) } /* $7A DEC extended -***- */ -INLINE void dec_ex( void ) +OP_HANDLER( dec_ex ) { UINT8 t; EXTBYTE(t); --t; @@ -2304,7 +2303,7 @@ INLINE void dec_ex( void ) } /* $7B TIM extended */ -INLINE void tim_ex( void ) +OP_HANDLER( tim_ex ) { UINT8 r,t,im; IMMBYTE(im); @@ -2315,7 +2314,7 @@ INLINE void tim_ex( void ) } /* $7C INC extended -***- */ -INLINE void inc_ex( void ) +OP_HANDLER( inc_ex ) { UINT8 t; EXTBYTE(t); ++t; @@ -2324,14 +2323,14 @@ INLINE void inc_ex( void ) } /* $7D TST extended -**0- */ -INLINE void tst_ex( void ) +OP_HANDLER( tst_ex ) { UINT8 t; EXTBYTE(t); CLR_NZV; SET_NZ8(t); } /* $7E JMP extended ----- */ -INLINE void jmp_ex( void ) +OP_HANDLER( jmp_ex ) { EXTENDED; PCD = EAD; @@ -2339,7 +2338,7 @@ INLINE void jmp_ex( void ) } /* $7F CLR extended -0100 */ -INLINE void clr_ex( void ) +OP_HANDLER( clr_ex ) { UINT32 dummy; EXTENDED; @@ -2349,7 +2348,7 @@ INLINE void clr_ex( void ) } /* $80 SUBA immediate ?**** */ -INLINE void suba_im( void ) +OP_HANDLER( suba_im ) { UINT16 t,r; IMMBYTE(t); @@ -2360,7 +2359,7 @@ INLINE void suba_im( void ) } /* $81 CMPA immediate ?**** */ -INLINE void cmpa_im( void ) +OP_HANDLER( cmpa_im ) { UINT16 t,r; IMMBYTE(t); @@ -2370,7 +2369,7 @@ INLINE void cmpa_im( void ) } /* $82 SBCA immediate ?**** */ -INLINE void sbca_im( void ) +OP_HANDLER( sbca_im ) { UINT16 t,r; IMMBYTE(t); @@ -2381,7 +2380,7 @@ INLINE void sbca_im( void ) } /* $83 SUBD (CMPD CMPU) immediate -**** */ -INLINE void subd_im( void ) +OP_HANDLER( subd_im ) { UINT32 r,d; PAIR b; @@ -2394,7 +2393,7 @@ INLINE void subd_im( void ) } /* $1080 SUBW immediate -**** */ -INLINE void subw_im( void ) +OP_HANDLER( subw_im ) { UINT32 r,d; PAIR b; @@ -2407,7 +2406,7 @@ INLINE void subw_im( void ) } /* $1083 CMPD immediate -**** */ -INLINE void cmpd_im( void ) +OP_HANDLER( cmpd_im ) { UINT32 r,d; PAIR b; @@ -2419,7 +2418,7 @@ INLINE void cmpd_im( void ) } /* $1081 CMPW immediate -**** */ -INLINE void cmpw_im( void ) +OP_HANDLER( cmpw_im ) { UINT32 r,d; PAIR b; @@ -2431,7 +2430,7 @@ INLINE void cmpw_im( void ) } /* $1183 CMPU immediate -**** */ -INLINE void cmpu_im( void ) +OP_HANDLER( cmpu_im ) { UINT32 r, d; PAIR b; @@ -2443,7 +2442,7 @@ INLINE void cmpu_im( void ) } /* $84 ANDA immediate -**0- */ -INLINE void anda_im( void ) +OP_HANDLER( anda_im ) { UINT8 t; IMMBYTE(t); @@ -2453,7 +2452,7 @@ INLINE void anda_im( void ) } /* $85 BITA immediate -**0- */ -INLINE void bita_im( void ) +OP_HANDLER( bita_im ) { UINT8 t,r; IMMBYTE(t); @@ -2463,7 +2462,7 @@ INLINE void bita_im( void ) } /* $86 LDA immediate -**0- */ -INLINE void lda_im( void ) +OP_HANDLER( lda_im ) { IMMBYTE(A); CLR_NZV; @@ -2471,7 +2470,7 @@ INLINE void lda_im( void ) } /* $88 EORA immediate -**0- */ -INLINE void eora_im( void ) +OP_HANDLER( eora_im ) { UINT8 t; IMMBYTE(t); @@ -2481,7 +2480,7 @@ INLINE void eora_im( void ) } /* $89 ADCA immediate ***** */ -INLINE void adca_im( void ) +OP_HANDLER( adca_im ) { UINT16 t,r; IMMBYTE(t); @@ -2493,7 +2492,7 @@ INLINE void adca_im( void ) } /* $8A ORA immediate -**0- */ -INLINE void ora_im( void ) +OP_HANDLER( ora_im ) { UINT8 t; IMMBYTE(t); @@ -2503,7 +2502,7 @@ INLINE void ora_im( void ) } /* $8B ADDA immediate ***** */ -INLINE void adda_im( void ) +OP_HANDLER( adda_im ) { UINT16 t,r; IMMBYTE(t); @@ -2515,7 +2514,7 @@ INLINE void adda_im( void ) } /* $8C CMPX (CMPY CMPS) immediate -**** */ -INLINE void cmpx_im( void ) +OP_HANDLER( cmpx_im ) { UINT32 r,d; PAIR b; @@ -2527,7 +2526,7 @@ INLINE void cmpx_im( void ) } /* $108C CMPY immediate -**** */ -INLINE void cmpy_im( void ) +OP_HANDLER( cmpy_im ) { UINT32 r,d; PAIR b; @@ -2539,7 +2538,7 @@ INLINE void cmpy_im( void ) } /* $118C CMPS immediate -**** */ -INLINE void cmps_im( void ) +OP_HANDLER( cmps_im ) { UINT32 r,d; PAIR b; @@ -2551,7 +2550,7 @@ INLINE void cmps_im( void ) } /* $8D BSR ----- */ -INLINE void bsr( void ) +OP_HANDLER( bsr ) { UINT8 t; IMMBYTE(t); @@ -2561,7 +2560,7 @@ INLINE void bsr( void ) } /* $8E LDX (LDY) immediate -**0- */ -INLINE void ldx_im( void ) +OP_HANDLER( ldx_im ) { IMMWORD(pX); CLR_NZV; @@ -2569,7 +2568,7 @@ INLINE void ldx_im( void ) } /* $CD LDQ immediate -**0- */ -INLINE void ldq_im( void ) +OP_HANDLER( ldq_im ) { PAIR q; @@ -2582,7 +2581,7 @@ INLINE void ldq_im( void ) } /* $108E LDY immediate -**0- */ -INLINE void ldy_im( void ) +OP_HANDLER( ldy_im ) { IMMWORD(pY); CLR_NZV; @@ -2590,7 +2589,7 @@ INLINE void ldy_im( void ) } /* $118f MULD immediate */ -INLINE void muld_im( void ) +OP_HANDLER( muld_im ) { PAIR t, q; @@ -2603,7 +2602,7 @@ INLINE void muld_im( void ) } /* $118d DIVD immediate */ -INLINE void divd_im( void ) +OP_HANDLER( divd_im ) { UINT8 t; INT16 v, oldD; @@ -2639,13 +2638,13 @@ INLINE void divd_im( void ) } else { - hd6309_ICount -= 8; - DZError(); + m68_icount -= 8; + DZError(m68_state); } } /* $118e DIVQ immediate */ -INLINE void divq_im( void ) +OP_HANDLER( divq_im ) { PAIR t,q, oldQ; INT32 v; @@ -2687,11 +2686,11 @@ INLINE void divq_im( void ) } } else - DZError(); + DZError(m68_state); } /* $90 SUBA direct ?**** */ -INLINE void suba_di( void ) +OP_HANDLER( suba_di ) { UINT16 t,r; DIRBYTE(t); @@ -2702,7 +2701,7 @@ INLINE void suba_di( void ) } /* $91 CMPA direct ?**** */ -INLINE void cmpa_di( void ) +OP_HANDLER( cmpa_di ) { UINT16 t,r; DIRBYTE(t); @@ -2712,7 +2711,7 @@ INLINE void cmpa_di( void ) } /* $92 SBCA direct ?**** */ -INLINE void sbca_di( void ) +OP_HANDLER( sbca_di ) { UINT16 t,r; DIRBYTE(t); @@ -2723,7 +2722,7 @@ INLINE void sbca_di( void ) } /* $93 SUBD (CMPD CMPU) direct -**** */ -INLINE void subd_di( void ) +OP_HANDLER( subd_di ) { UINT32 r,d; PAIR b; @@ -2736,7 +2735,7 @@ INLINE void subd_di( void ) } /* $1090 SUBW direct -**** */ -INLINE void subw_di( void ) +OP_HANDLER( subw_di ) { UINT32 r,d; PAIR b; @@ -2749,7 +2748,7 @@ INLINE void subw_di( void ) } /* $1093 CMPD direct -**** */ -INLINE void cmpd_di( void ) +OP_HANDLER( cmpd_di ) { UINT32 r,d; PAIR b; @@ -2761,7 +2760,7 @@ INLINE void cmpd_di( void ) } /* $1091 CMPW direct -**** */ -INLINE void cmpw_di( void ) +OP_HANDLER( cmpw_di ) { UINT32 r,d; PAIR b; @@ -2773,7 +2772,7 @@ INLINE void cmpw_di( void ) } /* $1193 CMPU direct -**** */ -INLINE void cmpu_di( void ) +OP_HANDLER( cmpu_di ) { UINT32 r,d; PAIR b; @@ -2785,7 +2784,7 @@ INLINE void cmpu_di( void ) } /* $94 ANDA direct -**0- */ -INLINE void anda_di( void ) +OP_HANDLER( anda_di ) { UINT8 t; DIRBYTE(t); @@ -2795,7 +2794,7 @@ INLINE void anda_di( void ) } /* $95 BITA direct -**0- */ -INLINE void bita_di( void ) +OP_HANDLER( bita_di ) { UINT8 t,r; DIRBYTE(t); @@ -2805,7 +2804,7 @@ INLINE void bita_di( void ) } /* $96 LDA direct -**0- */ -INLINE void lda_di( void ) +OP_HANDLER( lda_di ) { DIRBYTE(A); CLR_NZV; @@ -2813,7 +2812,7 @@ INLINE void lda_di( void ) } /* $97 STA direct -**0- */ -INLINE void sta_di( void ) +OP_HANDLER( sta_di ) { CLR_NZV; SET_NZ8(A); @@ -2822,7 +2821,7 @@ INLINE void sta_di( void ) } /* $98 EORA direct -**0- */ -INLINE void eora_di( void ) +OP_HANDLER( eora_di ) { UINT8 t; DIRBYTE(t); @@ -2832,7 +2831,7 @@ INLINE void eora_di( void ) } /* $99 ADCA direct ***** */ -INLINE void adca_di( void ) +OP_HANDLER( adca_di ) { UINT16 t,r; DIRBYTE(t); @@ -2844,7 +2843,7 @@ INLINE void adca_di( void ) } /* $9A ORA direct -**0- */ -INLINE void ora_di( void ) +OP_HANDLER( ora_di ) { UINT8 t; DIRBYTE(t); @@ -2854,7 +2853,7 @@ INLINE void ora_di( void ) } /* $9B ADDA direct ***** */ -INLINE void adda_di( void ) +OP_HANDLER( adda_di ) { UINT16 t,r; DIRBYTE(t); @@ -2866,7 +2865,7 @@ INLINE void adda_di( void ) } /* $9C CMPX (CMPY CMPS) direct -**** */ -INLINE void cmpx_di( void ) +OP_HANDLER( cmpx_di ) { UINT32 r,d; PAIR b; @@ -2878,7 +2877,7 @@ INLINE void cmpx_di( void ) } /* $109C CMPY direct -**** */ -INLINE void cmpy_di( void ) +OP_HANDLER( cmpy_di ) { UINT32 r,d; PAIR b; @@ -2890,7 +2889,7 @@ INLINE void cmpy_di( void ) } /* $119C CMPS direct -**** */ -INLINE void cmps_di( void ) +OP_HANDLER( cmps_di ) { UINT32 r,d; PAIR b; @@ -2902,7 +2901,7 @@ INLINE void cmps_di( void ) } /* $9D JSR direct ----- */ -INLINE void jsr_di( void ) +OP_HANDLER( jsr_di ) { DIRECT; PUSHWORD(pPC); @@ -2911,7 +2910,7 @@ INLINE void jsr_di( void ) } /* $9E LDX (LDY) direct -**0- */ -INLINE void ldx_di( void ) +OP_HANDLER( ldx_di ) { DIRWORD(pX); CLR_NZV; @@ -2919,7 +2918,7 @@ INLINE void ldx_di( void ) } /* $119f MULD direct -**0- */ -INLINE void muld_di( void ) +OP_HANDLER( muld_di ) { PAIR t,q; @@ -2933,7 +2932,7 @@ INLINE void muld_di( void ) } /* $119d DIVD direct -**0- */ -INLINE void divd_di( void ) +OP_HANDLER( divd_di ) { UINT8 t; INT16 v, oldD; @@ -2969,13 +2968,13 @@ INLINE void divd_di( void ) } else { - hd6309_ICount -= 8; - DZError(); + m68_icount -= 8; + DZError(m68_state); } } /* $119e DIVQ direct -**0- */ -INLINE void divq_di( void ) +OP_HANDLER( divq_di ) { PAIR t,q, oldQ; INT32 v; @@ -3017,10 +3016,10 @@ INLINE void divq_di( void ) } } else - DZError(); + DZError(m68_state); } /* $10dc LDQ direct -**0- */ -INLINE void ldq_di( void ) +OP_HANDLER( ldq_di ) { PAIR q; @@ -3033,7 +3032,7 @@ INLINE void ldq_di( void ) } /* $109E LDY direct -**0- */ -INLINE void ldy_di( void ) +OP_HANDLER( ldy_di ) { DIRWORD(pY); CLR_NZV; @@ -3041,7 +3040,7 @@ INLINE void ldy_di( void ) } /* $9F STX (STY) direct -**0- */ -INLINE void stx_di( void ) +OP_HANDLER( stx_di ) { CLR_NZV; SET_NZ16(X); @@ -3050,7 +3049,7 @@ INLINE void stx_di( void ) } /* $10dd STQ direct -**0- */ -INLINE void stq_di( void ) +OP_HANDLER( stq_di ) { PAIR q; @@ -3064,7 +3063,7 @@ INLINE void stq_di( void ) } /* $109F STY direct -**0- */ -INLINE void sty_di( void ) +OP_HANDLER( sty_di ) { CLR_NZV; SET_NZ16(Y); @@ -3073,10 +3072,10 @@ INLINE void sty_di( void ) } /* $a0 SUBA indexed ?**** */ -INLINE void suba_ix( void ) +OP_HANDLER( suba_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A - t; CLR_NZVC; @@ -3085,10 +3084,10 @@ INLINE void suba_ix( void ) } /* $a1 CMPA indexed ?**** */ -INLINE void cmpa_ix( void ) +OP_HANDLER( cmpa_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A - t; CLR_NZVC; @@ -3096,10 +3095,10 @@ INLINE void cmpa_ix( void ) } /* $a2 SBCA indexed ?**** */ -INLINE void sbca_ix( void ) +OP_HANDLER( sbca_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A - t - (CC & CC_C); CLR_NZVC; @@ -3108,11 +3107,11 @@ INLINE void sbca_ix( void ) } /* $a3 SUBD (CMPD CMPU) indexed -**** */ -INLINE void subd_ix( void ) +OP_HANDLER( subd_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = D; r = d - b.d; @@ -3122,11 +3121,11 @@ INLINE void subd_ix( void ) } /* $10a0 SUBW indexed -**** */ -INLINE void subw_ix( void ) +OP_HANDLER( subw_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = W; r = d - b.d; @@ -3136,11 +3135,11 @@ INLINE void subw_ix( void ) } /* $10a3 CMPD indexed -**** */ -INLINE void cmpd_ix( void ) +OP_HANDLER( cmpd_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = D; r = d - b.d; @@ -3149,11 +3148,11 @@ INLINE void cmpd_ix( void ) } /* $10a1 CMPW indexed -**** */ -INLINE void cmpw_ix( void ) +OP_HANDLER( cmpw_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = W; r = d - b.d; @@ -3162,11 +3161,11 @@ INLINE void cmpw_ix( void ) } /* $11a3 CMPU indexed -**** */ -INLINE void cmpu_ix( void ) +OP_HANDLER( cmpu_ix ) { UINT32 r; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); r = U - b.d; CLR_NZVC; @@ -3174,56 +3173,56 @@ INLINE void cmpu_ix( void ) } /* $a4 ANDA indexed -**0- */ -INLINE void anda_ix( void ) +OP_HANDLER( anda_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A &= RM(EAD); CLR_NZV; SET_NZ8(A); } /* $a5 BITA indexed -**0- */ -INLINE void bita_ix( void ) +OP_HANDLER( bita_ix ) { UINT8 r; - fetch_effective_address(); + fetch_effective_address(m68_state); r = A & RM(EAD); CLR_NZV; SET_NZ8(r); } /* $a6 LDA indexed -**0- */ -INLINE void lda_ix( void ) +OP_HANDLER( lda_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A = RM(EAD); CLR_NZV; SET_NZ8(A); } /* $a7 STA indexed -**0- */ -INLINE void sta_ix( void ) +OP_HANDLER( sta_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ8(A); WM(EAD,A); } /* $a8 EORA indexed -**0- */ -INLINE void eora_ix( void ) +OP_HANDLER( eora_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A ^= RM(EAD); CLR_NZV; SET_NZ8(A); } /* $a9 ADCA indexed ***** */ -INLINE void adca_ix( void ) +OP_HANDLER( adca_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A + t + (CC & CC_C); CLR_HNZVC; @@ -3233,19 +3232,19 @@ INLINE void adca_ix( void ) } /* $aA ORA indexed -**0- */ -INLINE void ora_ix( void ) +OP_HANDLER( ora_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A |= RM(EAD); CLR_NZV; SET_NZ8(A); } /* $aB ADDA indexed ***** */ -INLINE void adda_ix( void ) +OP_HANDLER( adda_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A + t; CLR_HNZVC; @@ -3255,11 +3254,11 @@ INLINE void adda_ix( void ) } /* $aC CMPX (CMPY CMPS) indexed -**** */ -INLINE void cmpx_ix( void ) +OP_HANDLER( cmpx_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = X; r = d - b.d; @@ -3268,11 +3267,11 @@ INLINE void cmpx_ix( void ) } /* $10aC CMPY indexed -**** */ -INLINE void cmpy_ix( void ) +OP_HANDLER( cmpy_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = Y; r = d - b.d; @@ -3281,11 +3280,11 @@ INLINE void cmpy_ix( void ) } /* $11aC CMPS indexed -**** */ -INLINE void cmps_ix( void ) +OP_HANDLER( cmps_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = S; r = d - b.d; @@ -3294,30 +3293,30 @@ INLINE void cmps_ix( void ) } /* $aD JSR indexed ----- */ -INLINE void jsr_ix( void ) +OP_HANDLER( jsr_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); PUSHWORD(pPC); PCD = EAD; CHANGE_PC; } /* $aE LDX (LDY) indexed -**0- */ -INLINE void ldx_ix( void ) +OP_HANDLER( ldx_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); X=RM16(EAD); CLR_NZV; SET_NZ16(X); } /* $11af MULD indexed -**0- */ -INLINE void muld_ix( void ) +OP_HANDLER( muld_ix ) { PAIR q; UINT16 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM16(EAD); q.d = (INT16) D * (INT16)t; @@ -3328,12 +3327,12 @@ INLINE void muld_ix( void ) } /* $11ad DIVD indexed -**0- */ -INLINE void divd_ix( void ) +OP_HANDLER( divd_ix ) { UINT8 t; INT16 v, oldD; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); if( t != 0 ) @@ -3365,18 +3364,18 @@ INLINE void divd_ix( void ) } else { - hd6309_ICount -= 8; - DZError(); + m68_icount -= 8; + DZError(m68_state); } } /* $11ae DIVQ indexed -**0- */ -INLINE void divq_ix( void ) +OP_HANDLER( divq_ix ) { PAIR t,q, oldQ; INT32 v; - fetch_effective_address(); + fetch_effective_address(m68_state); t.w.l=RM16(EAD); q.w.h = D; @@ -3414,15 +3413,15 @@ INLINE void divq_ix( void ) } } else - DZError(); + DZError(m68_state); } /* $10ec LDQ indexed -**0- */ -INLINE void ldq_ix( void ) +OP_HANDLER( ldq_ix ) { PAIR q; - fetch_effective_address(); + fetch_effective_address(m68_state); q.d=RM32(EAD); D = q.w.h; W = q.w.l; @@ -3432,31 +3431,31 @@ INLINE void ldq_ix( void ) } /* $10aE LDY indexed -**0- */ -INLINE void ldy_ix( void ) +OP_HANDLER( ldy_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); Y=RM16(EAD); CLR_NZV; SET_NZ16(Y); } /* $aF STX (STY) indexed -**0- */ -INLINE void stx_ix( void ) +OP_HANDLER( stx_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(X); WM16(EAD,&pX); } /* $10ed STQ indexed -**0- */ -INLINE void stq_ix( void ) +OP_HANDLER( stq_ix ) { PAIR q; q.w.h = D; q.w.l = W; - fetch_effective_address(); + fetch_effective_address(m68_state); WM32(EAD,&q); CLR_NZV; SET_N8(A); @@ -3464,16 +3463,16 @@ INLINE void stq_ix( void ) } /* $10aF STY indexed -**0- */ -INLINE void sty_ix( void ) +OP_HANDLER( sty_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(Y); WM16(EAD,&pY); } /* $b0 SUBA extended ?**** */ -INLINE void suba_ex( void ) +OP_HANDLER( suba_ex ) { UINT16 t,r; EXTBYTE(t); @@ -3484,7 +3483,7 @@ INLINE void suba_ex( void ) } /* $b1 CMPA extended ?**** */ -INLINE void cmpa_ex( void ) +OP_HANDLER( cmpa_ex ) { UINT16 t,r; EXTBYTE(t); @@ -3494,7 +3493,7 @@ INLINE void cmpa_ex( void ) } /* $b2 SBCA extended ?**** */ -INLINE void sbca_ex( void ) +OP_HANDLER( sbca_ex ) { UINT16 t,r; EXTBYTE(t); @@ -3505,7 +3504,7 @@ INLINE void sbca_ex( void ) } /* $b3 SUBD (CMPD CMPU) extended -**** */ -INLINE void subd_ex( void ) +OP_HANDLER( subd_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3518,7 +3517,7 @@ INLINE void subd_ex( void ) } /* $10b0 SUBW extended -**** */ -INLINE void subw_ex( void ) +OP_HANDLER( subw_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3531,7 +3530,7 @@ INLINE void subw_ex( void ) } /* $10b3 CMPD extended -**** */ -INLINE void cmpd_ex( void ) +OP_HANDLER( cmpd_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3543,7 +3542,7 @@ INLINE void cmpd_ex( void ) } /* $10b1 CMPW extended -**** */ -INLINE void cmpw_ex( void ) +OP_HANDLER( cmpw_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3555,7 +3554,7 @@ INLINE void cmpw_ex( void ) } /* $11b3 CMPU extended -**** */ -INLINE void cmpu_ex( void ) +OP_HANDLER( cmpu_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3567,7 +3566,7 @@ INLINE void cmpu_ex( void ) } /* $b4 ANDA extended -**0- */ -INLINE void anda_ex( void ) +OP_HANDLER( anda_ex ) { UINT8 t; EXTBYTE(t); @@ -3577,7 +3576,7 @@ INLINE void anda_ex( void ) } /* $b5 BITA extended -**0- */ -INLINE void bita_ex( void ) +OP_HANDLER( bita_ex ) { UINT8 t,r; EXTBYTE(t); @@ -3586,7 +3585,7 @@ INLINE void bita_ex( void ) } /* $b6 LDA extended -**0- */ -INLINE void lda_ex( void ) +OP_HANDLER( lda_ex ) { EXTBYTE(A); CLR_NZV; @@ -3594,7 +3593,7 @@ INLINE void lda_ex( void ) } /* $b7 STA extended -**0- */ -INLINE void sta_ex( void ) +OP_HANDLER( sta_ex ) { CLR_NZV; SET_NZ8(A); @@ -3603,7 +3602,7 @@ INLINE void sta_ex( void ) } /* $b8 EORA extended -**0- */ -INLINE void eora_ex( void ) +OP_HANDLER( eora_ex ) { UINT8 t; EXTBYTE(t); @@ -3613,7 +3612,7 @@ INLINE void eora_ex( void ) } /* $b9 ADCA extended ***** */ -INLINE void adca_ex( void ) +OP_HANDLER( adca_ex ) { UINT16 t,r; EXTBYTE(t); @@ -3625,7 +3624,7 @@ INLINE void adca_ex( void ) } /* $bA ORA extended -**0- */ -INLINE void ora_ex( void ) +OP_HANDLER( ora_ex ) { UINT8 t; EXTBYTE(t); @@ -3635,7 +3634,7 @@ INLINE void ora_ex( void ) } /* $bB ADDA extended ***** */ -INLINE void adda_ex( void ) +OP_HANDLER( adda_ex ) { UINT16 t,r; EXTBYTE(t); @@ -3647,7 +3646,7 @@ INLINE void adda_ex( void ) } /* $bC CMPX (CMPY CMPS) extended -**** */ -INLINE void cmpx_ex( void ) +OP_HANDLER( cmpx_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3659,7 +3658,7 @@ INLINE void cmpx_ex( void ) } /* $10bC CMPY extended -**** */ -INLINE void cmpy_ex( void ) +OP_HANDLER( cmpy_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3671,7 +3670,7 @@ INLINE void cmpy_ex( void ) } /* $11bC CMPS extended -**** */ -INLINE void cmps_ex( void ) +OP_HANDLER( cmps_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -3683,7 +3682,7 @@ INLINE void cmps_ex( void ) } /* $bD JSR extended ----- */ -INLINE void jsr_ex( void ) +OP_HANDLER( jsr_ex ) { EXTENDED; PUSHWORD(pPC); @@ -3692,7 +3691,7 @@ INLINE void jsr_ex( void ) } /* $bE LDX (LDY) extended -**0- */ -INLINE void ldx_ex( void ) +OP_HANDLER( ldx_ex ) { EXTWORD(pX); CLR_NZV; @@ -3700,7 +3699,7 @@ INLINE void ldx_ex( void ) } /* $11bf MULD extended -**0- */ -INLINE void muld_ex( void ) +OP_HANDLER( muld_ex ) { PAIR t, q; @@ -3714,7 +3713,7 @@ INLINE void muld_ex( void ) } /* $11bd DIVD extended -**0- */ -INLINE void divd_ex( void ) +OP_HANDLER( divd_ex ) { UINT8 t; INT16 v, oldD; @@ -3750,13 +3749,13 @@ INLINE void divd_ex( void ) } else { - hd6309_ICount -= 8; - DZError(); + m68_icount -= 8; + DZError(m68_state); } } /* $11be DIVQ extended -**0- */ -INLINE void divq_ex( void ) +OP_HANDLER( divq_ex ) { PAIR t,q, oldQ; INT32 v; @@ -3798,11 +3797,11 @@ INLINE void divq_ex( void ) } } else - DZError(); + DZError(m68_state); } /* $10fc LDQ extended -**0- */ -INLINE void ldq_ex( void ) +OP_HANDLER( ldq_ex ) { PAIR q; @@ -3815,7 +3814,7 @@ INLINE void ldq_ex( void ) } /* $10bE LDY extended -**0- */ -INLINE void ldy_ex( void ) +OP_HANDLER( ldy_ex ) { EXTWORD(pY); CLR_NZV; @@ -3823,7 +3822,7 @@ INLINE void ldy_ex( void ) } /* $bF STX (STY) extended -**0- */ -INLINE void stx_ex( void ) +OP_HANDLER( stx_ex ) { CLR_NZV; SET_NZ16(X); @@ -3832,7 +3831,7 @@ INLINE void stx_ex( void ) } /* $10fd STQ extended -**0- */ -INLINE void stq_ex( void ) +OP_HANDLER( stq_ex ) { PAIR q; @@ -3846,7 +3845,7 @@ INLINE void stq_ex( void ) } /* $10bF STY extended -**0- */ -INLINE void sty_ex( void ) +OP_HANDLER( sty_ex ) { CLR_NZV; SET_NZ16(Y); @@ -3855,7 +3854,7 @@ INLINE void sty_ex( void ) } /* $c0 SUBB immediate ?**** */ -INLINE void subb_im( void ) +OP_HANDLER( subb_im ) { UINT16 t,r; IMMBYTE(t); @@ -3866,7 +3865,7 @@ INLINE void subb_im( void ) } /* $1180 SUBE immediate ?**** */ -INLINE void sube_im( void ) +OP_HANDLER( sube_im ) { UINT16 t,r; IMMBYTE(t); @@ -3877,7 +3876,7 @@ INLINE void sube_im( void ) } /* $11C0 SUBF immediate ?**** */ -INLINE void subf_im( void ) +OP_HANDLER( subf_im ) { UINT16 t,r; IMMBYTE(t); @@ -3888,7 +3887,7 @@ INLINE void subf_im( void ) } /* $c1 CMPB immediate ?**** */ -INLINE void cmpb_im( void ) +OP_HANDLER( cmpb_im ) { UINT16 t,r; IMMBYTE(t); @@ -3897,7 +3896,7 @@ INLINE void cmpb_im( void ) } /* $1181 CMPE immediate ?**** */ -INLINE void cmpe_im( void ) +OP_HANDLER( cmpe_im ) { UINT16 t,r; IMMBYTE(t); @@ -3906,7 +3905,7 @@ INLINE void cmpe_im( void ) } /* $11C1 CMPF immediate ?**** */ -INLINE void cmpf_im( void ) +OP_HANDLER( cmpf_im ) { UINT16 t,r; IMMBYTE(t); @@ -3915,7 +3914,7 @@ INLINE void cmpf_im( void ) } /* $c2 SBCB immediate ?**** */ -INLINE void sbcb_im( void ) +OP_HANDLER( sbcb_im ) { UINT16 t,r; IMMBYTE(t); @@ -3926,7 +3925,7 @@ INLINE void sbcb_im( void ) } /* $1082 SBCD immediate ?**** */ -INLINE void sbcd_im( void ) +OP_HANDLER( sbcd_im ) { PAIR t; UINT32 r; @@ -3938,7 +3937,7 @@ INLINE void sbcd_im( void ) } /* $c3 ADDD immediate -**** */ -INLINE void addd_im( void ) +OP_HANDLER( addd_im ) { UINT32 r,d; PAIR b; @@ -3951,7 +3950,7 @@ INLINE void addd_im( void ) } /* $108b ADDW immediate -**** */ -INLINE void addw_im( void ) +OP_HANDLER( addw_im ) { UINT32 r,d; PAIR b; @@ -3964,7 +3963,7 @@ INLINE void addw_im( void ) } /* $118b ADDE immediate -**** */ -INLINE void adde_im( void ) +OP_HANDLER( adde_im ) { UINT16 t,r; IMMBYTE(t); @@ -3976,7 +3975,7 @@ INLINE void adde_im( void ) } /* $11Cb ADDF immediate -**** */ -INLINE void addf_im( void ) +OP_HANDLER( addf_im ) { UINT16 t,r; IMMBYTE(t); @@ -3988,7 +3987,7 @@ INLINE void addf_im( void ) } /* $c4 ANDB immediate -**0- */ -INLINE void andb_im( void ) +OP_HANDLER( andb_im ) { UINT8 t; IMMBYTE(t); @@ -3998,7 +3997,7 @@ INLINE void andb_im( void ) } /* $1084 ANDD immediate -**0- */ -INLINE void andd_im( void ) +OP_HANDLER( andd_im ) { PAIR t; IMMWORD(t); @@ -4008,7 +4007,7 @@ INLINE void andd_im( void ) } /* $c5 BITB immediate -**0- */ -INLINE void bitb_im( void ) +OP_HANDLER( bitb_im ) { UINT8 t,r; IMMBYTE(t); @@ -4018,7 +4017,7 @@ INLINE void bitb_im( void ) } /* $1085 BITD immediate -**0- */ -INLINE void bitd_im( void ) +OP_HANDLER( bitd_im ) { PAIR t; UINT16 r; @@ -4029,7 +4028,7 @@ INLINE void bitd_im( void ) } /* $113c BITMD immediate -**0- */ -INLINE void bitmd_im( void ) +OP_HANDLER( bitmd_im ) { /* The following is from Darren A. @@ -4053,7 +4052,7 @@ INLINE void bitmd_im( void ) } /* $c6 LDB immediate -**0- */ -INLINE void ldb_im( void ) +OP_HANDLER( ldb_im ) { IMMBYTE(B); CLR_NZV; @@ -4061,14 +4060,14 @@ INLINE void ldb_im( void ) } /* $113d LDMD immediate -**0- */ -INLINE void ldmd_im( void ) +OP_HANDLER( ldmd_im ) { IMMBYTE(MD); - UpdateState(); + UpdateState(m68_state); } /* $1186 LDE immediate -**0- */ -INLINE void lde_im( void ) +OP_HANDLER( lde_im ) { IMMBYTE(E); CLR_NZV; @@ -4076,7 +4075,7 @@ INLINE void lde_im( void ) } /* $11C6 LDF immediate -**0- */ -INLINE void ldf_im( void ) +OP_HANDLER( ldf_im ) { IMMBYTE(F); CLR_NZV; @@ -4084,7 +4083,7 @@ INLINE void ldf_im( void ) } /* $c8 EORB immediate -**0- */ -INLINE void eorb_im( void ) +OP_HANDLER( eorb_im ) { UINT8 t; IMMBYTE(t); @@ -4094,7 +4093,7 @@ INLINE void eorb_im( void ) } /* $1088 EORD immediate -**0- */ -INLINE void eord_im( void ) +OP_HANDLER( eord_im ) { PAIR t; IMMWORD(t); @@ -4104,7 +4103,7 @@ INLINE void eord_im( void ) } /* $c9 ADCB immediate ***** */ -INLINE void adcb_im( void ) +OP_HANDLER( adcb_im ) { UINT16 t,r; IMMBYTE(t); @@ -4116,7 +4115,7 @@ INLINE void adcb_im( void ) } /* $1089 ADCD immediate ***** */ -INLINE void adcd_im( void ) +OP_HANDLER( adcd_im ) { PAIR t; UINT32 r; @@ -4128,7 +4127,7 @@ INLINE void adcd_im( void ) } /* $cA ORB immediate -**0- */ -INLINE void orb_im( void ) +OP_HANDLER( orb_im ) { UINT8 t; IMMBYTE(t); @@ -4138,7 +4137,7 @@ INLINE void orb_im( void ) } /* $108a ORD immediate -**0- */ -INLINE void ord_im( void ) +OP_HANDLER( ord_im ) { PAIR t; IMMWORD(t); @@ -4148,7 +4147,7 @@ INLINE void ord_im( void ) } /* $cB ADDB immediate ***** */ -INLINE void addb_im( void ) +OP_HANDLER( addb_im ) { UINT16 t,r; IMMBYTE(t); @@ -4160,7 +4159,7 @@ INLINE void addb_im( void ) } /* $cC LDD immediate -**0- */ -INLINE void ldd_im( void ) +OP_HANDLER( ldd_im ) { PAIR t; @@ -4171,7 +4170,7 @@ INLINE void ldd_im( void ) } /* $1086 LDW immediate -**0- */ -INLINE void ldw_im( void ) +OP_HANDLER( ldw_im ) { PAIR t; IMMWORD(t); @@ -4181,7 +4180,7 @@ INLINE void ldw_im( void ) } /* $cE LDU (LDS) immediate -**0- */ -INLINE void ldu_im( void ) +OP_HANDLER( ldu_im ) { IMMWORD(pU); CLR_NZV; @@ -4189,16 +4188,16 @@ INLINE void ldu_im( void ) } /* $10cE LDS immediate -**0- */ -INLINE void lds_im( void ) +OP_HANDLER( lds_im ) { IMMWORD(pS); CLR_NZV; SET_NZ16(S); - hd6309.int_state |= HD6309_LDS; + m68_state->int_state |= M6809_LDS; } /* $d0 SUBB direct ?**** */ -INLINE void subb_di( void ) +OP_HANDLER( subb_di ) { UINT16 t,r; DIRBYTE(t); @@ -4209,7 +4208,7 @@ INLINE void subb_di( void ) } /* $1190 SUBE direct ?**** */ -INLINE void sube_di( void ) +OP_HANDLER( sube_di ) { UINT16 t,r; DIRBYTE(t); @@ -4220,7 +4219,7 @@ INLINE void sube_di( void ) } /* $11d0 SUBF direct ?**** */ -INLINE void subf_di( void ) +OP_HANDLER( subf_di ) { UINT16 t,r; DIRBYTE(t); @@ -4231,7 +4230,7 @@ INLINE void subf_di( void ) } /* $d1 CMPB direct ?**** */ -INLINE void cmpb_di( void ) +OP_HANDLER( cmpb_di ) { UINT16 t,r; DIRBYTE(t); @@ -4241,7 +4240,7 @@ INLINE void cmpb_di( void ) } /* $1191 CMPE direct ?**** */ -INLINE void cmpe_di( void ) +OP_HANDLER( cmpe_di ) { UINT16 t,r; DIRBYTE(t); @@ -4251,7 +4250,7 @@ INLINE void cmpe_di( void ) } /* $11D1 CMPF direct ?**** */ -INLINE void cmpf_di( void ) +OP_HANDLER( cmpf_di ) { UINT16 t,r; DIRBYTE(t); @@ -4261,7 +4260,7 @@ INLINE void cmpf_di( void ) } /* $d2 SBCB direct ?**** */ -INLINE void sbcb_di( void ) +OP_HANDLER( sbcb_di ) { UINT16 t,r; DIRBYTE(t); @@ -4272,7 +4271,7 @@ INLINE void sbcb_di( void ) } /* $1092 SBCD direct ?**** */ -INLINE void sbcd_di( void ) +OP_HANDLER( sbcd_di ) { PAIR t; UINT32 r; @@ -4284,7 +4283,7 @@ INLINE void sbcd_di( void ) } /* $d3 ADDD direct -**** */ -INLINE void addd_di( void ) +OP_HANDLER( addd_di ) { UINT32 r,d; PAIR b; @@ -4297,7 +4296,7 @@ INLINE void addd_di( void ) } /* $109b ADDW direct -**** */ -INLINE void addw_di( void ) +OP_HANDLER( addw_di ) { UINT32 r,d; PAIR b; @@ -4310,7 +4309,7 @@ INLINE void addw_di( void ) } /* $119b ADDE direct -**** */ -INLINE void adde_di( void ) +OP_HANDLER( adde_di ) { UINT16 t,r; DIRBYTE(t); @@ -4322,7 +4321,7 @@ INLINE void adde_di( void ) } /* $11db ADDF direct -**** */ -INLINE void addf_di( void ) +OP_HANDLER( addf_di ) { UINT16 t,r; DIRBYTE(t); @@ -4334,7 +4333,7 @@ INLINE void addf_di( void ) } /* $d4 ANDB direct -**0- */ -INLINE void andb_di( void ) +OP_HANDLER( andb_di ) { UINT8 t; DIRBYTE(t); @@ -4344,7 +4343,7 @@ INLINE void andb_di( void ) } /* $1094 ANDD direct -**0- */ -INLINE void andd_di( void ) +OP_HANDLER( andd_di ) { PAIR t; DIRWORD(t); @@ -4354,7 +4353,7 @@ INLINE void andd_di( void ) } /* $d5 BITB direct -**0- */ -INLINE void bitb_di( void ) +OP_HANDLER( bitb_di ) { UINT8 t,r; DIRBYTE(t); @@ -4364,7 +4363,7 @@ INLINE void bitb_di( void ) } /* $1095 BITD direct -**0- */ -INLINE void bitd_di( void ) +OP_HANDLER( bitd_di ) { PAIR t; UINT16 r; @@ -4375,7 +4374,7 @@ INLINE void bitd_di( void ) } /* $d6 LDB direct -**0- */ -INLINE void ldb_di( void ) +OP_HANDLER( ldb_di ) { DIRBYTE(B); CLR_NZV; @@ -4383,7 +4382,7 @@ INLINE void ldb_di( void ) } /* $1196 LDE direct -**0- */ -INLINE void lde_di( void ) +OP_HANDLER( lde_di ) { DIRBYTE(E); CLR_NZV; @@ -4391,7 +4390,7 @@ INLINE void lde_di( void ) } /* $11d6 LDF direct -**0- */ -INLINE void ldf_di( void ) +OP_HANDLER( ldf_di ) { DIRBYTE(F); CLR_NZV; @@ -4399,7 +4398,7 @@ INLINE void ldf_di( void ) } /* $d7 STB direct -**0- */ -INLINE void stb_di( void ) +OP_HANDLER( stb_di ) { CLR_NZV; SET_NZ8(B); @@ -4408,7 +4407,7 @@ INLINE void stb_di( void ) } /* $1197 STE direct -**0- */ -INLINE void ste_di( void ) +OP_HANDLER( ste_di ) { CLR_NZV; SET_NZ8(E); @@ -4417,7 +4416,7 @@ INLINE void ste_di( void ) } /* $11D7 STF direct -**0- */ -INLINE void stf_di( void ) +OP_HANDLER( stf_di ) { CLR_NZV; SET_NZ8(F); @@ -4426,7 +4425,7 @@ INLINE void stf_di( void ) } /* $d8 EORB direct -**0- */ -INLINE void eorb_di( void ) +OP_HANDLER( eorb_di ) { UINT8 t; DIRBYTE(t); @@ -4436,7 +4435,7 @@ INLINE void eorb_di( void ) } /* $1098 EORD direct -**0- */ -INLINE void eord_di( void ) +OP_HANDLER( eord_di ) { PAIR t; DIRWORD(t); @@ -4446,7 +4445,7 @@ INLINE void eord_di( void ) } /* $d9 ADCB direct ***** */ -INLINE void adcb_di( void ) +OP_HANDLER( adcb_di ) { UINT16 t,r; DIRBYTE(t); @@ -4458,7 +4457,7 @@ INLINE void adcb_di( void ) } /* $1099 adcd direct ***** */ -INLINE void adcd_di( void ) +OP_HANDLER( adcd_di ) { UINT32 r; PAIR t; @@ -4471,7 +4470,7 @@ INLINE void adcd_di( void ) } /* $dA ORB direct -**0- */ -INLINE void orb_di( void ) +OP_HANDLER( orb_di ) { UINT8 t; DIRBYTE(t); @@ -4481,7 +4480,7 @@ INLINE void orb_di( void ) } /* $109a ORD direct -**0- */ -INLINE void ord_di( void ) +OP_HANDLER( ord_di ) { PAIR t; DIRWORD(t); @@ -4491,7 +4490,7 @@ INLINE void ord_di( void ) } /* $dB ADDB direct ***** */ -INLINE void addb_di( void ) +OP_HANDLER( addb_di ) { UINT16 t,r; DIRBYTE(t); @@ -4503,7 +4502,7 @@ INLINE void addb_di( void ) } /* $dC LDD direct -**0- */ -INLINE void ldd_di( void ) +OP_HANDLER( ldd_di ) { PAIR t; DIRWORD(t); @@ -4513,7 +4512,7 @@ INLINE void ldd_di( void ) } /* $1096 LDW direct -**0- */ -INLINE void ldw_di( void ) +OP_HANDLER( ldw_di ) { PAIR t; DIRWORD(t); @@ -4523,7 +4522,7 @@ INLINE void ldw_di( void ) } /* $dD STD direct -**0- */ -INLINE void std_di( void ) +OP_HANDLER( std_di ) { CLR_NZV; SET_NZ16(D); @@ -4532,7 +4531,7 @@ INLINE void std_di( void ) } /* $1097 STW direct -**0- */ -INLINE void stw_di( void ) +OP_HANDLER( stw_di ) { CLR_NZV; SET_NZ16(W); @@ -4541,7 +4540,7 @@ INLINE void stw_di( void ) } /* $dE LDU (LDS) direct -**0- */ -INLINE void ldu_di( void ) +OP_HANDLER( ldu_di ) { DIRWORD(pU); CLR_NZV; @@ -4549,16 +4548,16 @@ INLINE void ldu_di( void ) } /* $10dE LDS direct -**0- */ -INLINE void lds_di( void ) +OP_HANDLER( lds_di ) { DIRWORD(pS); CLR_NZV; SET_NZ16(S); - hd6309.int_state |= HD6309_LDS; + m68_state->int_state |= M6809_LDS; } /* $dF STU (STS) direct -**0- */ -INLINE void stu_di( void ) +OP_HANDLER( stu_di ) { CLR_NZV; SET_NZ16(U); @@ -4567,7 +4566,7 @@ INLINE void stu_di( void ) } /* $10dF STS direct -**0- */ -INLINE void sts_di( void ) +OP_HANDLER( sts_di ) { CLR_NZV; SET_NZ16(S); @@ -4576,10 +4575,10 @@ INLINE void sts_di( void ) } /* $e0 SUBB indexed ?**** */ -INLINE void subb_ix( void ) +OP_HANDLER( subb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B - t; CLR_NZVC; @@ -4588,10 +4587,10 @@ INLINE void subb_ix( void ) } /* $11a0 SUBE indexed ?**** */ -INLINE void sube_ix( void ) +OP_HANDLER( sube_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = E - t; CLR_NZVC; @@ -4600,10 +4599,10 @@ INLINE void sube_ix( void ) } /* $11e0 SUBF indexed ?**** */ -INLINE void subf_ix( void ) +OP_HANDLER( subf_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = F - t; CLR_NZVC; @@ -4612,10 +4611,10 @@ INLINE void subf_ix( void ) } /* $e1 CMPB indexed ?**** */ -INLINE void cmpb_ix( void ) +OP_HANDLER( cmpb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B - t; CLR_NZVC; @@ -4623,10 +4622,10 @@ INLINE void cmpb_ix( void ) } /* $11a1 CMPE indexed ?**** */ -INLINE void cmpe_ix( void ) +OP_HANDLER( cmpe_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = E - t; CLR_NZVC; @@ -4634,10 +4633,10 @@ INLINE void cmpe_ix( void ) } /* $11e1 CMPF indexed ?**** */ -INLINE void cmpf_ix( void ) +OP_HANDLER( cmpf_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = F - t; CLR_NZVC; @@ -4645,10 +4644,10 @@ INLINE void cmpf_ix( void ) } /* $e2 SBCB indexed ?**** */ -INLINE void sbcb_ix( void ) +OP_HANDLER( sbcb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B - t - (CC & CC_C); CLR_NZVC; @@ -4657,10 +4656,10 @@ INLINE void sbcb_ix( void ) } /* $10a2 SBCD indexed ?**** */ -INLINE void sbcd_ix( void ) +OP_HANDLER( sbcd_ix ) { UINT32 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM16(EAD); r = D - t - (CC & CC_C); CLR_NZVC; @@ -4669,11 +4668,11 @@ INLINE void sbcd_ix( void ) } /* $e3 ADDD indexed -**** */ -INLINE void addd_ix( void ) +OP_HANDLER( addd_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = D; r = d + b.d; @@ -4683,11 +4682,11 @@ INLINE void addd_ix( void ) } /* $10ab ADDW indexed -**** */ -INLINE void addw_ix( void ) +OP_HANDLER( addw_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = W; r = d + b.d; @@ -4697,10 +4696,10 @@ INLINE void addw_ix( void ) } /* $11ab ADDE indexed -**** */ -INLINE void adde_ix( void ) +OP_HANDLER( adde_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = E + t; CLR_HNZVC; @@ -4710,10 +4709,10 @@ INLINE void adde_ix( void ) } /* $11eb ADDF indexed -**** */ -INLINE void addf_ix( void ) +OP_HANDLER( addf_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = F + t; CLR_HNZVC; @@ -4723,120 +4722,120 @@ INLINE void addf_ix( void ) } /* $e4 ANDB indexed -**0- */ -INLINE void andb_ix( void ) +OP_HANDLER( andb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B &= RM(EAD); CLR_NZV; SET_NZ8(B); } /* $10a4 ANDD indexed -**0- */ -INLINE void andd_ix( void ) +OP_HANDLER( andd_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); D &= RM16(EAD); CLR_NZV; SET_NZ16(D); } /* $e5 BITB indexed -**0- */ -INLINE void bitb_ix( void ) +OP_HANDLER( bitb_ix ) { UINT8 r; - fetch_effective_address(); + fetch_effective_address(m68_state); r = B & RM(EAD); CLR_NZV; SET_NZ8(r); } /* $10a5 BITD indexed -**0- */ -INLINE void bitd_ix( void ) +OP_HANDLER( bitd_ix ) { UINT16 r; - fetch_effective_address(); + fetch_effective_address(m68_state); r = D & RM16(EAD); CLR_NZV; SET_NZ16(r); } /* $e6 LDB indexed -**0- */ -INLINE void ldb_ix( void ) +OP_HANDLER( ldb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B = RM(EAD); CLR_NZV; SET_NZ8(B); } /* $11a6 LDE indexed -**0- */ -INLINE void lde_ix( void ) +OP_HANDLER( lde_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); E = RM(EAD); CLR_NZV; SET_NZ8(E); } /* $11e6 LDF indexed -**0- */ -INLINE void ldf_ix( void ) +OP_HANDLER( ldf_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); F = RM(EAD); CLR_NZV; SET_NZ8(F); } /* $e7 STB indexed -**0- */ -INLINE void stb_ix( void ) +OP_HANDLER( stb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ8(B); WM(EAD,B); } /* $11a7 STE indexed -**0- */ -INLINE void ste_ix( void ) +OP_HANDLER( ste_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ8(E); WM(EAD,E); } /* $11e7 STF indexed -**0- */ -INLINE void stf_ix( void ) +OP_HANDLER( stf_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ8(F); WM(EAD,F); } /* $e8 EORB indexed -**0- */ -INLINE void eorb_ix( void ) +OP_HANDLER( eorb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B ^= RM(EAD); CLR_NZV; SET_NZ8(B); } /* $10a8 EORD indexed -**0- */ -INLINE void eord_ix( void ) +OP_HANDLER( eord_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); D ^= RM16(EAD); CLR_NZV; SET_NZ16(D); } /* $e9 ADCB indexed ***** */ -INLINE void adcb_ix( void ) +OP_HANDLER( adcb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B + t + (CC & CC_C); CLR_HNZVC; @@ -4846,11 +4845,11 @@ INLINE void adcb_ix( void ) } /* $10a9 ADCD indexed ***** */ -INLINE void adcd_ix( void ) +OP_HANDLER( adcd_ix ) { UINT32 r; PAIR t; - fetch_effective_address(); + fetch_effective_address(m68_state); t.d = RM16(EAD); r = D + t.d + (CC & CC_C); CLR_NZVC; @@ -4859,28 +4858,28 @@ INLINE void adcd_ix( void ) } /* $eA ORB indexed -**0- */ -INLINE void orb_ix( void ) +OP_HANDLER( orb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B |= RM(EAD); CLR_NZV; SET_NZ8(B); } /* $10aa ORD indexed -**0- */ -INLINE void ord_ix( void ) +OP_HANDLER( ord_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); D |= RM16(EAD); CLR_NZV; SET_NZ16(D); } /* $eB ADDB indexed ***** */ -INLINE void addb_ix( void ) +OP_HANDLER( addb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B + t; CLR_HNZVC; @@ -4890,78 +4889,78 @@ INLINE void addb_ix( void ) } /* $eC LDD indexed -**0- */ -INLINE void ldd_ix( void ) +OP_HANDLER( ldd_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); D=RM16(EAD); CLR_NZV; SET_NZ16(D); } /* $10a6 LDW indexed -**0- */ -INLINE void ldw_ix( void ) +OP_HANDLER( ldw_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); W=RM16(EAD); CLR_NZV; SET_NZ16(W); } /* $eD STD indexed -**0- */ -INLINE void std_ix( void ) +OP_HANDLER( std_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(D); WM16(EAD,&pD); } /* $10a7 STW indexed -**0- */ -INLINE void stw_ix( void ) +OP_HANDLER( stw_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(W); WM16(EAD,&pW); } /* $eE LDU (LDS) indexed -**0- */ -INLINE void ldu_ix( void ) +OP_HANDLER( ldu_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); U=RM16(EAD); CLR_NZV; SET_NZ16(U); } /* $10eE LDS indexed -**0- */ -INLINE void lds_ix( void ) +OP_HANDLER( lds_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); S=RM16(EAD); CLR_NZV; SET_NZ16(S); - hd6309.int_state |= HD6309_LDS; + m68_state->int_state |= M6809_LDS; } /* $eF STU (STS) indexed -**0- */ -INLINE void stu_ix( void ) +OP_HANDLER( stu_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(U); WM16(EAD,&pU); } /* $10eF STS indexed -**0- */ -INLINE void sts_ix( void ) +OP_HANDLER( sts_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(S); WM16(EAD,&pS); } /* $f0 SUBB extended ?**** */ -INLINE void subb_ex( void ) +OP_HANDLER( subb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -4972,7 +4971,7 @@ INLINE void subb_ex( void ) } /* $11b0 SUBE extended ?**** */ -INLINE void sube_ex( void ) +OP_HANDLER( sube_ex ) { UINT16 t,r; EXTBYTE(t); @@ -4983,7 +4982,7 @@ INLINE void sube_ex( void ) } /* $11f0 SUBF extended ?**** */ -INLINE void subf_ex( void ) +OP_HANDLER( subf_ex ) { UINT16 t,r; EXTBYTE(t); @@ -4994,7 +4993,7 @@ INLINE void subf_ex( void ) } /* $f1 CMPB extended ?**** */ -INLINE void cmpb_ex( void ) +OP_HANDLER( cmpb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5004,7 +5003,7 @@ INLINE void cmpb_ex( void ) } /* $11b1 CMPE extended ?**** */ -INLINE void cmpe_ex( void ) +OP_HANDLER( cmpe_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5014,7 +5013,7 @@ INLINE void cmpe_ex( void ) } /* $11f1 CMPF extended ?**** */ -INLINE void cmpf_ex( void ) +OP_HANDLER( cmpf_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5024,7 +5023,7 @@ INLINE void cmpf_ex( void ) } /* $f2 SBCB extended ?**** */ -INLINE void sbcb_ex( void ) +OP_HANDLER( sbcb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5035,7 +5034,7 @@ INLINE void sbcb_ex( void ) } /* $10b2 SBCD extended ?**** */ -INLINE void sbcd_ex( void ) +OP_HANDLER( sbcd_ex ) { PAIR t = {{0,}}; UINT32 r; @@ -5048,7 +5047,7 @@ INLINE void sbcd_ex( void ) } /* $f3 ADDD extended -**** */ -INLINE void addd_ex( void ) +OP_HANDLER( addd_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -5061,7 +5060,7 @@ INLINE void addd_ex( void ) } /* $10bb ADDW extended -**** */ -INLINE void addw_ex( void ) +OP_HANDLER( addw_ex ) { UINT32 r,d; PAIR b = {{0,}}; @@ -5074,7 +5073,7 @@ INLINE void addw_ex( void ) } /* $11bb ADDE extended -**** */ -INLINE void adde_ex( void ) +OP_HANDLER( adde_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5086,7 +5085,7 @@ INLINE void adde_ex( void ) } /* $11fb ADDF extended -**** */ -INLINE void addf_ex( void ) +OP_HANDLER( addf_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5098,7 +5097,7 @@ INLINE void addf_ex( void ) } /* $f4 ANDB extended -**0- */ -INLINE void andb_ex( void ) +OP_HANDLER( andb_ex ) { UINT8 t; EXTBYTE(t); @@ -5108,7 +5107,7 @@ INLINE void andb_ex( void ) } /* $10b4 ANDD extended -**0- */ -INLINE void andd_ex( void ) +OP_HANDLER( andd_ex ) { PAIR t = {{0,}}; EXTWORD(t); @@ -5118,7 +5117,7 @@ INLINE void andd_ex( void ) } /* $f5 BITB extended -**0- */ -INLINE void bitb_ex( void ) +OP_HANDLER( bitb_ex ) { UINT8 t,r; EXTBYTE(t); @@ -5128,7 +5127,7 @@ INLINE void bitb_ex( void ) } /* $10b5 BITD extended -**0- */ -INLINE void bitd_ex( void ) +OP_HANDLER( bitd_ex ) { PAIR t = {{0,}}; UINT8 r; @@ -5139,7 +5138,7 @@ INLINE void bitd_ex( void ) } /* $f6 LDB extended -**0- */ -INLINE void ldb_ex( void ) +OP_HANDLER( ldb_ex ) { EXTBYTE(B); CLR_NZV; @@ -5147,7 +5146,7 @@ INLINE void ldb_ex( void ) } /* $11b6 LDE extended -**0- */ -INLINE void lde_ex( void ) +OP_HANDLER( lde_ex ) { EXTBYTE(E); CLR_NZV; @@ -5155,7 +5154,7 @@ INLINE void lde_ex( void ) } /* $11f6 LDF extended -**0- */ -INLINE void ldf_ex( void ) +OP_HANDLER( ldf_ex ) { EXTBYTE(F); CLR_NZV; @@ -5163,7 +5162,7 @@ INLINE void ldf_ex( void ) } /* $f7 STB extended -**0- */ -INLINE void stb_ex( void ) +OP_HANDLER( stb_ex ) { CLR_NZV; SET_NZ8(B); @@ -5172,7 +5171,7 @@ INLINE void stb_ex( void ) } /* $11b7 STE extended -**0- */ -INLINE void ste_ex( void ) +OP_HANDLER( ste_ex ) { CLR_NZV; SET_NZ8(E); @@ -5181,7 +5180,7 @@ INLINE void ste_ex( void ) } /* $11f7 STF extended -**0- */ -INLINE void stf_ex( void ) +OP_HANDLER( stf_ex ) { CLR_NZV; SET_NZ8(F); @@ -5190,7 +5189,7 @@ INLINE void stf_ex( void ) } /* $f8 EORB extended -**0- */ -INLINE void eorb_ex( void ) +OP_HANDLER( eorb_ex ) { UINT8 t; EXTBYTE(t); @@ -5200,7 +5199,7 @@ INLINE void eorb_ex( void ) } /* $10b8 EORD extended -**0- */ -INLINE void eord_ex( void ) +OP_HANDLER( eord_ex ) { PAIR t = {{0,}}; EXTWORD(t); @@ -5210,7 +5209,7 @@ INLINE void eord_ex( void ) } /* $f9 ADCB extended ***** */ -INLINE void adcb_ex( void ) +OP_HANDLER( adcb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5222,7 +5221,7 @@ INLINE void adcb_ex( void ) } /* $10b9 ADCD extended ***** */ -INLINE void adcd_ex( void ) +OP_HANDLER( adcd_ex ) { UINT32 r; PAIR t; @@ -5234,7 +5233,7 @@ INLINE void adcd_ex( void ) } /* $fA ORB extended -**0- */ -INLINE void orb_ex( void ) +OP_HANDLER( orb_ex ) { UINT8 t; EXTBYTE(t); @@ -5244,7 +5243,7 @@ INLINE void orb_ex( void ) } /* $10ba ORD extended -**0- */ -INLINE void ord_ex( void ) +OP_HANDLER( ord_ex ) { PAIR t = {{0,}}; EXTWORD(t); @@ -5254,7 +5253,7 @@ INLINE void ord_ex( void ) } /* $fB ADDB extended ***** */ -INLINE void addb_ex( void ) +OP_HANDLER( addb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -5266,7 +5265,7 @@ INLINE void addb_ex( void ) } /* $fC LDD extended -**0- */ -INLINE void ldd_ex( void ) +OP_HANDLER( ldd_ex ) { EXTWORD(pD); CLR_NZV; @@ -5274,7 +5273,7 @@ INLINE void ldd_ex( void ) } /* $10b6 LDW extended -**0- */ -INLINE void ldw_ex( void ) +OP_HANDLER( ldw_ex ) { EXTWORD(pW); CLR_NZV; @@ -5282,7 +5281,7 @@ INLINE void ldw_ex( void ) } /* $fD STD extended -**0- */ -INLINE void std_ex( void ) +OP_HANDLER( std_ex ) { CLR_NZV; SET_NZ16(D); @@ -5291,7 +5290,7 @@ INLINE void std_ex( void ) } /* $10b7 STW extended -**0- */ -INLINE void stw_ex( void ) +OP_HANDLER( stw_ex ) { CLR_NZV; SET_NZ16(W); @@ -5300,7 +5299,7 @@ INLINE void stw_ex( void ) } /* $fE LDU (LDS) extended -**0- */ -INLINE void ldu_ex( void ) +OP_HANDLER( ldu_ex ) { EXTWORD(pU); CLR_NZV; @@ -5308,16 +5307,16 @@ INLINE void ldu_ex( void ) } /* $10fE LDS extended -**0- */ -INLINE void lds_ex( void ) +OP_HANDLER( lds_ex ) { EXTWORD(pS); CLR_NZV; SET_NZ16(S); - hd6309.int_state |= HD6309_LDS; + m68_state->int_state |= M6809_LDS; } /* $fF STU (STS) extended -**0- */ -INLINE void stu_ex( void ) +OP_HANDLER( stu_ex ) { CLR_NZV; SET_NZ16(U); @@ -5326,7 +5325,7 @@ INLINE void stu_ex( void ) } /* $10fF STS extended -**0- */ -INLINE void sts_ex( void ) +OP_HANDLER( sts_ex ) { CLR_NZV; SET_NZ16(S); @@ -5335,265 +5334,265 @@ INLINE void sts_ex( void ) } /* $10xx opcodes */ -INLINE void pref10( void ) +OP_HANDLER( pref10 ) { UINT8 ireg2 = ROP(PCD); PC++; -#ifdef BIG_SWITCH +#if BIG_SWITCH switch( ireg2 ) { - case 0x21: lbrn(); break; - case 0x22: lbhi(); break; - case 0x23: lbls(); break; - case 0x24: lbcc(); break; - case 0x25: lbcs(); break; - case 0x26: lbne(); break; - case 0x27: lbeq(); break; - case 0x28: lbvc(); break; - case 0x29: lbvs(); break; - case 0x2a: lbpl(); break; - case 0x2b: lbmi(); break; - case 0x2c: lbge(); break; - case 0x2d: lblt(); break; - case 0x2e: lbgt(); break; - case 0x2f: lble(); break; + case 0x21: lbrn(m68_state); break; + case 0x22: lbhi(m68_state); break; + case 0x23: lbls(m68_state); break; + case 0x24: lbcc(m68_state); break; + case 0x25: lbcs(m68_state); break; + case 0x26: lbne(m68_state); break; + case 0x27: lbeq(m68_state); break; + case 0x28: lbvc(m68_state); break; + case 0x29: lbvs(m68_state); break; + case 0x2a: lbpl(m68_state); break; + case 0x2b: lbmi(m68_state); break; + case 0x2c: lbge(m68_state); break; + case 0x2d: lblt(m68_state); break; + case 0x2e: lbgt(m68_state); break; + case 0x2f: lble(m68_state); break; - case 0x30: addr_r(); break; - case 0x31: adcr(); break; - case 0x32: subr(); break; - case 0x33: sbcr(); break; - case 0x34: andr(); break; - case 0x35: orr(); break; - case 0x36: eorr(); break; - case 0x37: cmpr(); break; - case 0x38: pshsw(); break; - case 0x39: pulsw(); break; - case 0x3a: pshuw(); break; - case 0x3b: puluw(); break; - case 0x3f: swi2(); break; + case 0x30: addr_r(m68_state); break; + case 0x31: adcr(m68_state); break; + case 0x32: subr(m68_state); break; + case 0x33: sbcr(m68_state); break; + case 0x34: andr(m68_state); break; + case 0x35: orr(m68_state); break; + case 0x36: eorr(m68_state); break; + case 0x37: cmpr(m68_state); break; + case 0x38: pshsw(m68_state); break; + case 0x39: pulsw(m68_state); break; + case 0x3a: pshuw(m68_state); break; + case 0x3b: puluw(m68_state); break; + case 0x3f: swi2(m68_state); break; - case 0x40: negd(); break; - case 0x43: comd(); break; - case 0x44: lsrd(); break; - case 0x46: rord(); break; - case 0x47: asrd(); break; - case 0x48: asld(); break; - case 0x49: rold(); break; - case 0x4a: decd(); break; - case 0x4c: incd(); break; - case 0x4d: tstd(); break; - case 0x4f: clrd(); break; + case 0x40: negd(m68_state); break; + case 0x43: comd(m68_state); break; + case 0x44: lsrd(m68_state); break; + case 0x46: rord(m68_state); break; + case 0x47: asrd(m68_state); break; + case 0x48: asld(m68_state); break; + case 0x49: rold(m68_state); break; + case 0x4a: decd(m68_state); break; + case 0x4c: incd(m68_state); break; + case 0x4d: tstd(m68_state); break; + case 0x4f: clrd(m68_state); break; - case 0x53: comw(); break; - case 0x54: lsrw(); break; - case 0x56: rorw(); break; - case 0x59: rolw(); break; - case 0x5a: decw(); break; - case 0x5c: incw(); break; - case 0x5d: tstw(); break; - case 0x5f: clrw(); break; + case 0x53: comw(m68_state); break; + case 0x54: lsrw(m68_state); break; + case 0x56: rorw(m68_state); break; + case 0x59: rolw(m68_state); break; + case 0x5a: decw(m68_state); break; + case 0x5c: incw(m68_state); break; + case 0x5d: tstw(m68_state); break; + case 0x5f: clrw(m68_state); break; - case 0x80: subw_im(); break; - case 0x81: cmpw_im(); break; - case 0x82: sbcd_im(); break; - case 0x83: cmpd_im(); break; - case 0x84: andd_im(); break; - case 0x85: bitd_im(); break; - case 0x86: ldw_im(); break; - case 0x88: eord_im(); break; - case 0x89: adcd_im(); break; - case 0x8a: ord_im(); break; - case 0x8b: addw_im(); break; - case 0x8c: cmpy_im(); break; - case 0x8e: ldy_im(); break; + case 0x80: subw_im(m68_state); break; + case 0x81: cmpw_im(m68_state); break; + case 0x82: sbcd_im(m68_state); break; + case 0x83: cmpd_im(m68_state); break; + case 0x84: andd_im(m68_state); break; + case 0x85: bitd_im(m68_state); break; + case 0x86: ldw_im(m68_state); break; + case 0x88: eord_im(m68_state); break; + case 0x89: adcd_im(m68_state); break; + case 0x8a: ord_im(m68_state); break; + case 0x8b: addw_im(m68_state); break; + case 0x8c: cmpy_im(m68_state); break; + case 0x8e: ldy_im(m68_state); break; - case 0x90: subw_di(); break; - case 0x91: cmpw_di(); break; - case 0x92: sbcd_di(); break; - case 0x93: cmpd_di(); break; - case 0x94: andd_di(); break; - case 0x95: bitd_di(); break; - case 0x96: ldw_di(); break; - case 0x97: stw_di(); break; - case 0x98: eord_di(); break; - case 0x99: adcd_di(); break; - case 0x9a: ord_di(); break; - case 0x9b: addw_di(); break; - case 0x9c: cmpy_di(); break; - case 0x9e: ldy_di(); break; - case 0x9f: sty_di(); break; + case 0x90: subw_di(m68_state); break; + case 0x91: cmpw_di(m68_state); break; + case 0x92: sbcd_di(m68_state); break; + case 0x93: cmpd_di(m68_state); break; + case 0x94: andd_di(m68_state); break; + case 0x95: bitd_di(m68_state); break; + case 0x96: ldw_di(m68_state); break; + case 0x97: stw_di(m68_state); break; + case 0x98: eord_di(m68_state); break; + case 0x99: adcd_di(m68_state); break; + case 0x9a: ord_di(m68_state); break; + case 0x9b: addw_di(m68_state); break; + case 0x9c: cmpy_di(m68_state); break; + case 0x9e: ldy_di(m68_state); break; + case 0x9f: sty_di(m68_state); break; - case 0xa0: subw_ix(); break; - case 0xa1: cmpw_ix(); break; - case 0xa2: sbcd_ix(); break; - case 0xa3: cmpd_ix(); break; - case 0xa4: andd_ix(); break; - case 0xa5: bitd_ix(); break; - case 0xa6: ldw_ix(); break; - case 0xa7: stw_ix(); break; - case 0xa8: eord_ix(); break; - case 0xa9: adcd_ix(); break; - case 0xaa: ord_ix(); break; - case 0xab: addw_ix(); break; - case 0xac: cmpy_ix(); break; - case 0xae: ldy_ix(); break; - case 0xaf: sty_ix(); break; + case 0xa0: subw_ix(m68_state); break; + case 0xa1: cmpw_ix(m68_state); break; + case 0xa2: sbcd_ix(m68_state); break; + case 0xa3: cmpd_ix(m68_state); break; + case 0xa4: andd_ix(m68_state); break; + case 0xa5: bitd_ix(m68_state); break; + case 0xa6: ldw_ix(m68_state); break; + case 0xa7: stw_ix(m68_state); break; + case 0xa8: eord_ix(m68_state); break; + case 0xa9: adcd_ix(m68_state); break; + case 0xaa: ord_ix(m68_state); break; + case 0xab: addw_ix(m68_state); break; + case 0xac: cmpy_ix(m68_state); break; + case 0xae: ldy_ix(m68_state); break; + case 0xaf: sty_ix(m68_state); break; - case 0xb0: subw_ex(); break; - case 0xb1: cmpw_ex(); break; - case 0xb2: sbcd_ex(); break; - case 0xb3: cmpd_ex(); break; - case 0xb4: andd_ex(); break; - case 0xb5: bitd_ex(); break; - case 0xb6: ldw_ex(); break; - case 0xb7: stw_ex(); break; - case 0xb8: eord_ex(); break; - case 0xb9: adcd_ex(); break; - case 0xba: ord_ex(); break; - case 0xbb: addw_ex(); break; - case 0xbc: cmpy_ex(); break; - case 0xbe: ldy_ex(); break; - case 0xbf: sty_ex(); break; + case 0xb0: subw_ex(m68_state); break; + case 0xb1: cmpw_ex(m68_state); break; + case 0xb2: sbcd_ex(m68_state); break; + case 0xb3: cmpd_ex(m68_state); break; + case 0xb4: andd_ex(m68_state); break; + case 0xb5: bitd_ex(m68_state); break; + case 0xb6: ldw_ex(m68_state); break; + case 0xb7: stw_ex(m68_state); break; + case 0xb8: eord_ex(m68_state); break; + case 0xb9: adcd_ex(m68_state); break; + case 0xba: ord_ex(m68_state); break; + case 0xbb: addw_ex(m68_state); break; + case 0xbc: cmpy_ex(m68_state); break; + case 0xbe: ldy_ex(m68_state); break; + case 0xbf: sty_ex(m68_state); break; - case 0xce: lds_im(); break; + case 0xce: lds_im(m68_state); break; - case 0xdc: ldq_di(); break; - case 0xdd: stq_di(); break; - case 0xde: lds_di(); break; - case 0xdf: sts_di(); break; + case 0xdc: ldq_di(m68_state); break; + case 0xdd: stq_di(m68_state); break; + case 0xde: lds_di(m68_state); break; + case 0xdf: sts_di(m68_state); break; - case 0xec: ldq_ix(); break; - case 0xed: stq_ix(); break; - case 0xee: lds_ix(); break; - case 0xef: sts_ix(); break; + case 0xec: ldq_ix(m68_state); break; + case 0xed: stq_ix(m68_state); break; + case 0xee: lds_ix(m68_state); break; + case 0xef: sts_ix(m68_state); break; - case 0xfc: ldq_ex(); break; - case 0xfd: stq_ex(); break; - case 0xfe: lds_ex(); break; - case 0xff: sts_ex(); break; + case 0xfc: ldq_ex(m68_state); break; + case 0xfd: stq_ex(m68_state); break; + case 0xfe: lds_ex(m68_state); break; + case 0xff: sts_ex(m68_state); break; - default: IIError(); break; + default: IIError(m68_state); break; } #else - (*hd6309_page01[ireg2])(); + (*hd6309_page01[ireg2])(m68_state); #endif /* BIG_SWITCH */ - hd6309_ICount -= cycle_counts_page01[ireg2]; + m68_icount -= cycle_counts_page01[ireg2]; } /* $11xx opcodes */ -INLINE void pref11( void ) +OP_HANDLER( pref11 ) { UINT8 ireg2 = ROP(PCD); PC++; -#ifdef BIG_SWITCH +#if BIG_SWITCH switch( ireg2 ) { - case 0x30: band(); break; - case 0x31: biand(); break; - case 0x32: bor(); break; - case 0x33: bior(); break; - case 0x34: beor(); break; - case 0x35: bieor(); break; - case 0x36: ldbt(); break; - case 0x37: stbt(); break; - case 0x38: tfmpp(); break; /* Timing for TFM is actually 6+3n. */ - case 0x39: tfmmm(); break; /* To avoid saving the state, I decided */ - case 0x3a: tfmpc(); break; /* to push the initial 6 cycles to the end */ - case 0x3b: tfmcp(); break; /* We will soon see how this fairs! */ - case 0x3c: bitmd_im(); break; - case 0x3d: ldmd_im(); break; - case 0x3f: swi3(); break; + case 0x30: band(m68_state); break; + case 0x31: biand(m68_state); break; + case 0x32: bor(m68_state); break; + case 0x33: bior(m68_state); break; + case 0x34: beor(m68_state); break; + case 0x35: bieor(m68_state); break; + case 0x36: ldbt(m68_state); break; + case 0x37: stbt(m68_state); break; + case 0x38: tfmpp(m68_state); break; /* Timing for TFM is actually 6+3n. */ + case 0x39: tfmmm(m68_state); break; /* To avoid saving the state, I decided */ + case 0x3a: tfmpc(m68_state); break; /* to push the initial 6 cycles to the end */ + case 0x3b: tfmcp(m68_state); break; /* We will soon see how this fairs! */ + case 0x3c: bitmd_im(m68_state); break; + case 0x3d: ldmd_im(m68_state); break; + case 0x3f: swi3(m68_state); break; - case 0x43: come(); break; - case 0x4a: dece(); break; - case 0x4c: ince(); break; - case 0x4d: tste(); break; - case 0x4f: clre(); break; + case 0x43: come(m68_state); break; + case 0x4a: dece(m68_state); break; + case 0x4c: ince(m68_state); break; + case 0x4d: tste(m68_state); break; + case 0x4f: clre(m68_state); break; - case 0x53: comf(); break; - case 0x5a: decf(); break; - case 0x5c: incf(); break; - case 0x5d: tstf(); break; - case 0x5f: clrf(); break; + case 0x53: comf(m68_state); break; + case 0x5a: decf(m68_state); break; + case 0x5c: incf(m68_state); break; + case 0x5d: tstf(m68_state); break; + case 0x5f: clrf(m68_state); break; - case 0x80: sube_im(); break; - case 0x81: cmpe_im(); break; - case 0x83: cmpu_im(); break; - case 0x86: lde_im(); break; - case 0x8b: adde_im(); break; - case 0x8c: cmps_im(); break; - case 0x8d: divd_im(); break; - case 0x8e: divq_im(); break; - case 0x8f: muld_im(); break; + case 0x80: sube_im(m68_state); break; + case 0x81: cmpe_im(m68_state); break; + case 0x83: cmpu_im(m68_state); break; + case 0x86: lde_im(m68_state); break; + case 0x8b: adde_im(m68_state); break; + case 0x8c: cmps_im(m68_state); break; + case 0x8d: divd_im(m68_state); break; + case 0x8e: divq_im(m68_state); break; + case 0x8f: muld_im(m68_state); break; - case 0x90: sube_di(); break; - case 0x91: cmpe_di(); break; - case 0x93: cmpu_di(); break; - case 0x96: lde_di(); break; - case 0x97: ste_di(); break; - case 0x9b: adde_di(); break; - case 0x9c: cmps_di(); break; - case 0x9d: divd_di(); break; - case 0x9e: divq_di(); break; - case 0x9f: muld_di(); break; + case 0x90: sube_di(m68_state); break; + case 0x91: cmpe_di(m68_state); break; + case 0x93: cmpu_di(m68_state); break; + case 0x96: lde_di(m68_state); break; + case 0x97: ste_di(m68_state); break; + case 0x9b: adde_di(m68_state); break; + case 0x9c: cmps_di(m68_state); break; + case 0x9d: divd_di(m68_state); break; + case 0x9e: divq_di(m68_state); break; + case 0x9f: muld_di(m68_state); break; - case 0xa0: sube_ix(); break; - case 0xa1: cmpe_ix(); break; - case 0xa3: cmpu_ix(); break; - case 0xa6: lde_ix(); break; - case 0xa7: ste_ix(); break; - case 0xab: adde_ix(); break; - case 0xac: cmps_ix(); break; - case 0xad: divd_ix(); break; - case 0xae: divq_ix(); break; - case 0xaf: muld_ix(); break; + case 0xa0: sube_ix(m68_state); break; + case 0xa1: cmpe_ix(m68_state); break; + case 0xa3: cmpu_ix(m68_state); break; + case 0xa6: lde_ix(m68_state); break; + case 0xa7: ste_ix(m68_state); break; + case 0xab: adde_ix(m68_state); break; + case 0xac: cmps_ix(m68_state); break; + case 0xad: divd_ix(m68_state); break; + case 0xae: divq_ix(m68_state); break; + case 0xaf: muld_ix(m68_state); break; - case 0xb0: sube_ex(); break; - case 0xb1: cmpe_ex(); break; - case 0xb3: cmpu_ex(); break; - case 0xb6: lde_ex(); break; - case 0xb7: ste_ex(); break; - case 0xbb: adde_ex(); break; - case 0xbc: cmps_ex(); break; - case 0xbd: divd_ex(); break; - case 0xbe: divq_ex(); break; - case 0xbf: muld_ex(); break; + case 0xb0: sube_ex(m68_state); break; + case 0xb1: cmpe_ex(m68_state); break; + case 0xb3: cmpu_ex(m68_state); break; + case 0xb6: lde_ex(m68_state); break; + case 0xb7: ste_ex(m68_state); break; + case 0xbb: adde_ex(m68_state); break; + case 0xbc: cmps_ex(m68_state); break; + case 0xbd: divd_ex(m68_state); break; + case 0xbe: divq_ex(m68_state); break; + case 0xbf: muld_ex(m68_state); break; - case 0xc0: subf_im(); break; - case 0xc1: cmpf_im(); break; - case 0xc6: ldf_im(); break; - case 0xcb: addf_im(); break; + case 0xc0: subf_im(m68_state); break; + case 0xc1: cmpf_im(m68_state); break; + case 0xc6: ldf_im(m68_state); break; + case 0xcb: addf_im(m68_state); break; - case 0xd0: subf_di(); break; - case 0xd1: cmpf_di(); break; - case 0xd6: ldf_di(); break; - case 0xd7: stf_di(); break; - case 0xdb: addf_di(); break; + case 0xd0: subf_di(m68_state); break; + case 0xd1: cmpf_di(m68_state); break; + case 0xd6: ldf_di(m68_state); break; + case 0xd7: stf_di(m68_state); break; + case 0xdb: addf_di(m68_state); break; - case 0xe0: subf_ix(); break; - case 0xe1: cmpf_ix(); break; - case 0xe6: ldf_ix(); break; - case 0xe7: stf_ix(); break; - case 0xeb: addf_ix(); break; + case 0xe0: subf_ix(m68_state); break; + case 0xe1: cmpf_ix(m68_state); break; + case 0xe6: ldf_ix(m68_state); break; + case 0xe7: stf_ix(m68_state); break; + case 0xeb: addf_ix(m68_state); break; - case 0xf0: subf_ex(); break; - case 0xf1: cmpf_ex(); break; - case 0xf6: ldf_ex(); break; - case 0xf7: stf_ex(); break; - case 0xfb: addf_ex(); break; + case 0xf0: subf_ex(m68_state); break; + case 0xf1: cmpf_ex(m68_state); break; + case 0xf6: ldf_ex(m68_state); break; + case 0xf7: stf_ex(m68_state); break; + case 0xfb: addf_ex(m68_state); break; - default: IIError(); break; + default: IIError(m68_state); break; } #else - (*hd6309_page11[ireg2])(); + (*hd6309_page11[ireg2])(m68_state); #endif /* BIG_SWITCH */ - hd6309_ICount -= cycle_counts_page11[ireg2]; + m68_icount -= cycle_counts_page11[ireg2]; } diff --git a/src/emu/cpu/hd6309/6309tbl.c b/src/emu/cpu/hd6309/6309tbl.c index bc531bcccd5..4ae82172247 100644 --- a/src/emu/cpu/hd6309/6309tbl.c +++ b/src/emu/cpu/hd6309/6309tbl.c @@ -1,443 +1,443 @@ -INLINE void illegal( void ); -INLINE void neg_di( void ); -INLINE void oim_di( void ); -INLINE void aim_di( void ); -INLINE void com_di( void ); -INLINE void lsr_di( void ); -INLINE void eim_di( void ); -INLINE void ror_di( void ); -INLINE void asr_di( void ); -INLINE void asl_di( void ); -INLINE void rol_di( void ); -INLINE void dec_di( void ); -INLINE void tim_di( void ); -INLINE void inc_di( void ); -INLINE void tst_di( void ); -INLINE void jmp_di( void ); -INLINE void clr_di( void ); -INLINE void nop( void ); -INLINE void sync( void ); -INLINE void sexw( void ); -INLINE void lbra( void ); -INLINE void lbsr( void ); -INLINE void daa( void ); -INLINE void daa( void ); -INLINE void orcc( void ); -INLINE void andcc( void ); -INLINE void sex( void ); -INLINE void exg( void ); -INLINE void tfr( void ); -INLINE void bra( void ); -INLINE void brn( void ); -INLINE void lbrn( void ); -INLINE void bhi( void ); -INLINE void lbhi( void ); -INLINE void bls( void ); -INLINE void lbls( void ); -INLINE void bcc( void ); -INLINE void lbcc( void ); -INLINE void bcs( void ); -INLINE void lbcs( void ); -INLINE void bne( void ); -INLINE void lbne( void ); -INLINE void beq( void ); -INLINE void lbeq( void ); -INLINE void bvc( void ); -INLINE void lbvc( void ); -INLINE void bvs( void ); -INLINE void lbvs( void ); -INLINE void bpl( void ); -INLINE void lbpl( void ); -INLINE void bmi( void ); -INLINE void lbmi( void ); -INLINE void bge( void ); -INLINE void lbge( void ); -INLINE void blt( void ); -INLINE void lblt( void ); -INLINE void bgt( void ); -INLINE void lbgt( void ); -INLINE void ble( void ); -INLINE void lble( void ); -INLINE void addr_r( void ); -INLINE void adcr( void ); -INLINE void subr( void ); -INLINE void sbcr( void ); -INLINE void andr( void ); -INLINE void orr( void ); -INLINE void eorr( void ); -INLINE void cmpr( void ); -INLINE void tfmpp( void ); -INLINE void tfmmm( void ); -INLINE void tfmpc( void ); -INLINE void tfmcp( void ); -INLINE void bitmd_im( void ); -INLINE void leax( void ); -INLINE void leay( void ); -INLINE void leas( void ); -INLINE void leau( void ); -INLINE void pshs( void ); -INLINE void ldmd_im( void ); -INLINE void pshsw( void ); -INLINE void pshuw( void ); -INLINE void puls( void ); -INLINE void pulsw( void ); -INLINE void puluw( void ); -INLINE void pshu( void ); -INLINE void pulu( void ); -INLINE void rts( void ); -INLINE void abx( void ); -INLINE void rti( void ); -INLINE void cwai( void ); -INLINE void bitd_di( void ); -INLINE void bitd_ix( void ); -INLINE void bitd_ex( void ); -INLINE void mul( void ); -INLINE void swi( void ); -INLINE void band( void ); -INLINE void bitd_im( void ); -INLINE void biand( void ); -INLINE void bor( void ); -INLINE void bior( void ); -INLINE void beor( void ); -INLINE void bieor( void ); -INLINE void ldbt( void ); -INLINE void stbt( void ); -INLINE void swi2( void ); -INLINE void swi3( void ); -INLINE void nega( void ); -INLINE void coma( void ); -INLINE void lsra( void ); -INLINE void rora( void ); -INLINE void asra( void ); -INLINE void asla( void ); -INLINE void rola( void ); -INLINE void deca( void ); -INLINE void inca( void ); -INLINE void tsta( void ); -INLINE void clra( void ); -INLINE void negb( void ); -INLINE void negd( void ); -INLINE void comb( void ); -INLINE void come( void ); -INLINE void comf( void ); -INLINE void comd( void ); -INLINE void comw( void ); -INLINE void lsrb( void ); -INLINE void lsrd( void ); -INLINE void lsrw( void ); -INLINE void rorb( void ); -INLINE void rord( void ); -INLINE void rorw( void ); -INLINE void asrb( void ); -INLINE void asrd( void ); -INLINE void aslb( void ); -INLINE void asld( void ); -INLINE void rolb( void ); -INLINE void rold( void ); -INLINE void rolw( void ); -INLINE void decb( void ); -INLINE void dece( void ); -INLINE void decf( void ); -INLINE void decd( void ); -INLINE void decw( void ); -INLINE void incb( void ); -INLINE void ince( void ); -INLINE void incf( void ); -INLINE void incd( void ); -INLINE void incw( void ); -INLINE void tstb( void ); -INLINE void tstd( void ); -INLINE void tstw( void ); -INLINE void tste( void ); -INLINE void tstf( void ); -INLINE void clrb( void ); -INLINE void clrd( void ); -INLINE void clre( void ); -INLINE void clrf( void ); -INLINE void clrw( void ); -INLINE void neg_ix( void ); -INLINE void oim_ix( void ); -INLINE void aim_ix( void ); -INLINE void com_ix( void ); -INLINE void lsr_ix( void ); -INLINE void eim_ix( void ); -INLINE void ror_ix( void ); -INLINE void asr_ix( void ); -INLINE void asl_ix( void ); -INLINE void rol_ix( void ); -INLINE void dec_ix( void ); -INLINE void tim_ix( void ); -INLINE void inc_ix( void ); -INLINE void tst_ix( void ); -INLINE void jmp_ix( void ); -INLINE void clr_ix( void ); -INLINE void neg_ex( void ); -INLINE void oim_ex( void ); -INLINE void aim_ex( void ); -INLINE void com_ex( void ); -INLINE void lsr_ex( void ); -INLINE void eim_ex( void ); -INLINE void ror_ex( void ); -INLINE void asr_ex( void ); -INLINE void asl_ex( void ); -INLINE void rol_ex( void ); -INLINE void dec_ex( void ); -INLINE void tim_ex( void ); -INLINE void inc_ex( void ); -INLINE void tst_ex( void ); -INLINE void jmp_ex( void ); -INLINE void clr_ex( void ); -INLINE void suba_im( void ); -INLINE void cmpa_im( void ); -INLINE void sbca_im( void ); -INLINE void subd_im( void ); -INLINE void subw_im( void ); -INLINE void cmpd_im( void ); -INLINE void cmpw_im( void ); -INLINE void cmpu_im( void ); -INLINE void anda_im( void ); -INLINE void bita_im( void ); -INLINE void lda_im( void ); -INLINE void eora_im( void ); -INLINE void adca_im( void ); -INLINE void ora_im( void ); -INLINE void adda_im( void ); -INLINE void cmpx_im( void ); -INLINE void cmpy_im( void ); -INLINE void cmps_im( void ); -INLINE void bsr( void ); -INLINE void ldx_im( void ); -INLINE void ldq_im( void ); -INLINE void ldy_im( void ); -INLINE void suba_di( void ); -INLINE void cmpa_di( void ); -INLINE void sbca_di( void ); -INLINE void subd_di( void ); -INLINE void subw_di( void ); -INLINE void cmpd_di( void ); -INLINE void cmpw_di( void ); -INLINE void cmpu_di( void ); -INLINE void anda_di( void ); -INLINE void bita_di( void ); -INLINE void lda_di( void ); -INLINE void sta_di( void ); -INLINE void eora_di( void ); -INLINE void adca_di( void ); -INLINE void ora_di( void ); -INLINE void adda_di( void ); -INLINE void cmpx_di( void ); -INLINE void cmpy_di( void ); -INLINE void cmps_di( void ); -INLINE void jsr_di( void ); -INLINE void ldx_di( void ); -INLINE void muld_di( void ); -INLINE void divd_im( void ); -INLINE void divq_im( void ); -INLINE void muld_im( void ); -INLINE void divd_di( void ); -INLINE void divq_di( void ); -INLINE void ldq_di( void ); -INLINE void ldy_di( void ); -INLINE void stx_di( void ); -INLINE void stq_di( void ); -INLINE void sty_di( void ); -INLINE void suba_ix( void ); -INLINE void cmpa_ix( void ); -INLINE void sbca_ix( void ); -INLINE void subd_ix( void ); -INLINE void subw_ix( void ); -INLINE void cmpd_ix( void ); -INLINE void cmpw_ix( void ); -INLINE void cmpu_ix( void ); -INLINE void anda_ix( void ); -INLINE void bita_ix( void ); -INLINE void lda_ix( void ); -INLINE void sta_ix( void ); -INLINE void eora_ix( void ); -INLINE void adca_ix( void ); -INLINE void ora_ix( void ); -INLINE void adda_ix( void ); -INLINE void cmpx_ix( void ); -INLINE void cmpy_ix( void ); -INLINE void cmps_ix( void ); -INLINE void jsr_ix( void ); -INLINE void ldx_ix( void ); -INLINE void muld_ix( void ); -INLINE void divd_ix( void ); -INLINE void divq_ix( void ); -INLINE void ldq_ix( void ); -INLINE void ldy_ix( void ); -INLINE void stx_ix( void ); -INLINE void stq_ix( void ); -INLINE void sty_ix( void ); -INLINE void suba_ex( void ); -INLINE void cmpa_ex( void ); -INLINE void sbca_ex( void ); -INLINE void subd_ex( void ); -INLINE void subw_ex( void ); -INLINE void cmpd_ex( void ); -INLINE void cmpw_ex( void ); -INLINE void cmpu_ex( void ); -INLINE void anda_ex( void ); -INLINE void bita_ex( void ); -INLINE void lda_ex( void ); -INLINE void sta_ex( void ); -INLINE void eora_ex( void ); -INLINE void adca_ex( void ); -INLINE void ora_ex( void ); -INLINE void adda_ex( void ); -INLINE void cmpx_ex( void ); -INLINE void cmpy_ex( void ); -INLINE void cmps_ex( void ); -INLINE void jsr_ex( void ); -INLINE void ldx_ex( void ); -INLINE void muld_ex( void ); -INLINE void divd_ex( void ); -INLINE void divq_ex( void ); -INLINE void ldq_ex( void ); -INLINE void ldy_ex( void ); -INLINE void stx_ex( void ); -INLINE void stq_ex( void ); -INLINE void sty_ex( void ); -INLINE void subb_im( void ); -INLINE void sube_im( void ); -INLINE void subf_im( void ); -INLINE void cmpb_im( void ); -INLINE void cmpe_im( void ); -INLINE void cmpf_im( void ); -INLINE void sbcb_im( void ); -INLINE void sbcd_im( void ); -INLINE void addd_im( void ); -INLINE void addw_im( void ); -INLINE void adde_im( void ); -INLINE void addf_im( void ); -INLINE void andb_im( void ); -INLINE void andd_im( void ); -INLINE void bitb_im( void ); -INLINE void ldb_im( void ); -INLINE void lde_im( void ); -INLINE void ldf_im( void ); -INLINE void eorb_im( void ); -INLINE void eord_im( void ); -INLINE void adcb_im( void ); -INLINE void adcd_im( void ); -INLINE void orb_im( void ); -INLINE void ord_im( void ); -INLINE void addb_im( void ); -INLINE void ldd_im( void ); -INLINE void ldw_im( void ); -INLINE void ldu_im( void ); -INLINE void lds_im( void ); -INLINE void subb_di( void ); -INLINE void sube_di( void ); -INLINE void subf_di( void ); -INLINE void cmpb_di( void ); -INLINE void cmpe_di( void ); -INLINE void cmpf_di( void ); -INLINE void sbcb_di( void ); -INLINE void sbcd_di( void ); -INLINE void addd_di( void ); -INLINE void addw_di( void ); -INLINE void adde_di( void ); -INLINE void addf_di( void ); -INLINE void andb_di( void ); -INLINE void andd_di( void ); -INLINE void bitb_di( void ); -INLINE void ldb_di( void ); -INLINE void lde_di( void ); -INLINE void ldf_di( void ); -INLINE void stb_di( void ); -INLINE void ste_di( void ); -INLINE void stf_di( void ); -INLINE void eorb_di( void ); -INLINE void eord_di( void ); -INLINE void adcb_di( void ); -INLINE void adcd_di( void ); -INLINE void orb_di( void ); -INLINE void ord_di( void ); -INLINE void addb_di( void ); -INLINE void ldd_di( void ); -INLINE void ldw_di( void ); -INLINE void std_di( void ); -INLINE void stw_di( void ); -INLINE void ldu_di( void ); -INLINE void lds_di( void ); -INLINE void stu_di( void ); -INLINE void sts_di( void ); -INLINE void subb_ix( void ); -INLINE void sube_ix( void ); -INLINE void subf_ix( void ); -INLINE void cmpb_ix( void ); -INLINE void cmpe_ix( void ); -INLINE void cmpf_ix( void ); -INLINE void sbcb_ix( void ); -INLINE void sbcd_ix( void ); -INLINE void addd_ix( void ); -INLINE void addw_ix( void ); -INLINE void adde_ix( void ); -INLINE void addf_ix( void ); -INLINE void andb_ix( void ); -INLINE void andd_ix( void ); -INLINE void bitb_ix( void ); -INLINE void ldb_ix( void ); -INLINE void lde_ix( void ); -INLINE void ldf_ix( void ); -INLINE void stb_ix( void ); -INLINE void ste_ix( void ); -INLINE void stf_ix( void ); -INLINE void eorb_ix( void ); -INLINE void eord_ix( void ); -INLINE void adcb_ix( void ); -INLINE void adcd_ix( void ); -INLINE void orb_ix( void ); -INLINE void ord_ix( void ); -INLINE void addb_ix( void ); -INLINE void ldd_ix( void ); -INLINE void ldw_ix( void ); -INLINE void std_ix( void ); -INLINE void stw_ix( void ); -INLINE void ldu_ix( void ); -INLINE void lds_ix( void ); -INLINE void stu_ix( void ); -INLINE void sts_ix( void ); -INLINE void subb_ex( void ); -INLINE void sube_ex( void ); -INLINE void subf_ex( void ); -INLINE void cmpb_ex( void ); -INLINE void cmpe_ex( void ); -INLINE void cmpf_ex( void ); -INLINE void sbcb_ex( void ); -INLINE void sbcd_ex( void ); -INLINE void addd_ex( void ); -INLINE void addw_ex( void ); -INLINE void adde_ex( void ); -INLINE void addf_ex( void ); -INLINE void andb_ex( void ); -INLINE void andd_ex( void ); -INLINE void bitb_ex( void ); -INLINE void ldb_ex( void ); -INLINE void lde_ex( void ); -INLINE void ldf_ex( void ); -INLINE void stb_ex( void ); -INLINE void ste_ex( void ); -INLINE void stf_ex( void ); -INLINE void eorb_ex( void ); -INLINE void eord_ex( void ); -INLINE void adcb_ex( void ); -INLINE void adcd_ex( void ); -INLINE void orb_ex( void ); -INLINE void ord_ex( void ); -INLINE void addb_ex( void ); -INLINE void ldd_ex( void ); -INLINE void ldw_ex( void ); -INLINE void std_ex( void ); -INLINE void stw_ex( void ); -INLINE void ldu_ex( void ); -INLINE void lds_ex( void ); -INLINE void stu_ex( void ); -INLINE void sts_ex( void ); -INLINE void pref10( void ); -INLINE void pref11( void ); +INLINE void abx(m68_state_t *m68_state); +INLINE void adca_di(m68_state_t *m68_state); +INLINE void adca_ex(m68_state_t *m68_state); +INLINE void adca_im(m68_state_t *m68_state); +INLINE void adca_ix(m68_state_t *m68_state); +INLINE void adcb_di(m68_state_t *m68_state); +INLINE void adcb_ex(m68_state_t *m68_state); +INLINE void adcb_im(m68_state_t *m68_state); +INLINE void adcb_ix(m68_state_t *m68_state); +INLINE void adcd_di(m68_state_t *m68_state); +INLINE void adcd_ex(m68_state_t *m68_state); +INLINE void adcd_im(m68_state_t *m68_state); +INLINE void adcd_ix(m68_state_t *m68_state); +INLINE void adcr(m68_state_t *m68_state); +INLINE void adda_di(m68_state_t *m68_state); +INLINE void adda_ex(m68_state_t *m68_state); +INLINE void adda_im(m68_state_t *m68_state); +INLINE void adda_ix(m68_state_t *m68_state); +INLINE void addb_di(m68_state_t *m68_state); +INLINE void addb_ex(m68_state_t *m68_state); +INLINE void addb_im(m68_state_t *m68_state); +INLINE void addb_ix(m68_state_t *m68_state); +INLINE void addd_di(m68_state_t *m68_state); +INLINE void addd_ex(m68_state_t *m68_state); +INLINE void addd_im(m68_state_t *m68_state); +INLINE void addd_ix(m68_state_t *m68_state); +INLINE void adde_di(m68_state_t *m68_state); +INLINE void adde_ex(m68_state_t *m68_state); +INLINE void adde_im(m68_state_t *m68_state); +INLINE void adde_ix(m68_state_t *m68_state); +INLINE void addf_di(m68_state_t *m68_state); +INLINE void addf_ex(m68_state_t *m68_state); +INLINE void addf_im(m68_state_t *m68_state); +INLINE void addf_ix(m68_state_t *m68_state); +INLINE void addr_r(m68_state_t *m68_state); +INLINE void addw_di(m68_state_t *m68_state); +INLINE void addw_ex(m68_state_t *m68_state); +INLINE void addw_im(m68_state_t *m68_state); +INLINE void addw_ix(m68_state_t *m68_state); +INLINE void aim_di(m68_state_t *m68_state); +INLINE void aim_ex(m68_state_t *m68_state); +INLINE void aim_ix(m68_state_t *m68_state); +INLINE void anda_di(m68_state_t *m68_state); +INLINE void anda_ex(m68_state_t *m68_state); +INLINE void anda_im(m68_state_t *m68_state); +INLINE void anda_ix(m68_state_t *m68_state); +INLINE void andb_di(m68_state_t *m68_state); +INLINE void andb_ex(m68_state_t *m68_state); +INLINE void andb_im(m68_state_t *m68_state); +INLINE void andb_ix(m68_state_t *m68_state); +INLINE void andcc(m68_state_t *m68_state); +INLINE void andd_di(m68_state_t *m68_state); +INLINE void andd_ex(m68_state_t *m68_state); +INLINE void andd_im(m68_state_t *m68_state); +INLINE void andd_ix(m68_state_t *m68_state); +INLINE void andr(m68_state_t *m68_state); +INLINE void asla(m68_state_t *m68_state); +INLINE void aslb(m68_state_t *m68_state); +INLINE void asl_di(m68_state_t *m68_state); +INLINE void asld(m68_state_t *m68_state); +INLINE void asl_ex(m68_state_t *m68_state); +INLINE void asl_ix(m68_state_t *m68_state); +INLINE void asra(m68_state_t *m68_state); +INLINE void asrb(m68_state_t *m68_state); +INLINE void asr_di(m68_state_t *m68_state); +INLINE void asrd(m68_state_t *m68_state); +INLINE void asr_ex(m68_state_t *m68_state); +INLINE void asr_ix(m68_state_t *m68_state); +INLINE void band(m68_state_t *m68_state); +INLINE void bcc(m68_state_t *m68_state); +INLINE void bcs(m68_state_t *m68_state); +INLINE void beor(m68_state_t *m68_state); +INLINE void beq(m68_state_t *m68_state); +INLINE void bge(m68_state_t *m68_state); +INLINE void bgt(m68_state_t *m68_state); +INLINE void bhi(m68_state_t *m68_state); +INLINE void biand(m68_state_t *m68_state); +INLINE void bieor(m68_state_t *m68_state); +INLINE void bior(m68_state_t *m68_state); +INLINE void bita_di(m68_state_t *m68_state); +INLINE void bita_ex(m68_state_t *m68_state); +INLINE void bita_im(m68_state_t *m68_state); +INLINE void bita_ix(m68_state_t *m68_state); +INLINE void bitb_di(m68_state_t *m68_state); +INLINE void bitb_ex(m68_state_t *m68_state); +INLINE void bitb_im(m68_state_t *m68_state); +INLINE void bitb_ix(m68_state_t *m68_state); +INLINE void bitd_di(m68_state_t *m68_state); +INLINE void bitd_ex(m68_state_t *m68_state); +INLINE void bitd_im(m68_state_t *m68_state); +INLINE void bitd_ix(m68_state_t *m68_state); +INLINE void bitmd_im(m68_state_t *m68_state); +INLINE void ble(m68_state_t *m68_state); +INLINE void bls(m68_state_t *m68_state); +INLINE void blt(m68_state_t *m68_state); +INLINE void bmi(m68_state_t *m68_state); +INLINE void bne(m68_state_t *m68_state); +INLINE void bor(m68_state_t *m68_state); +INLINE void bpl(m68_state_t *m68_state); +INLINE void bra(m68_state_t *m68_state); +INLINE void brn(m68_state_t *m68_state); +INLINE void bsr(m68_state_t *m68_state); +INLINE void bvc(m68_state_t *m68_state); +INLINE void bvs(m68_state_t *m68_state); +INLINE void clra(m68_state_t *m68_state); +INLINE void clrb(m68_state_t *m68_state); +INLINE void clr_di(m68_state_t *m68_state); +INLINE void clrd(m68_state_t *m68_state); +INLINE void clre(m68_state_t *m68_state); +INLINE void clr_ex(m68_state_t *m68_state); +INLINE void clrf(m68_state_t *m68_state); +INLINE void clr_ix(m68_state_t *m68_state); +INLINE void clrw(m68_state_t *m68_state); +INLINE void cmpa_di(m68_state_t *m68_state); +INLINE void cmpa_ex(m68_state_t *m68_state); +INLINE void cmpa_im(m68_state_t *m68_state); +INLINE void cmpa_ix(m68_state_t *m68_state); +INLINE void cmpb_di(m68_state_t *m68_state); +INLINE void cmpb_ex(m68_state_t *m68_state); +INLINE void cmpb_im(m68_state_t *m68_state); +INLINE void cmpb_ix(m68_state_t *m68_state); +INLINE void cmpd_di(m68_state_t *m68_state); +INLINE void cmpd_ex(m68_state_t *m68_state); +INLINE void cmpd_im(m68_state_t *m68_state); +INLINE void cmpd_ix(m68_state_t *m68_state); +INLINE void cmpe_di(m68_state_t *m68_state); +INLINE void cmpe_ex(m68_state_t *m68_state); +INLINE void cmpe_im(m68_state_t *m68_state); +INLINE void cmpe_ix(m68_state_t *m68_state); +INLINE void cmpf_di(m68_state_t *m68_state); +INLINE void cmpf_ex(m68_state_t *m68_state); +INLINE void cmpf_im(m68_state_t *m68_state); +INLINE void cmpf_ix(m68_state_t *m68_state); +INLINE void cmpr(m68_state_t *m68_state); +INLINE void cmps_di(m68_state_t *m68_state); +INLINE void cmps_ex(m68_state_t *m68_state); +INLINE void cmps_im(m68_state_t *m68_state); +INLINE void cmps_ix(m68_state_t *m68_state); +INLINE void cmpu_di(m68_state_t *m68_state); +INLINE void cmpu_ex(m68_state_t *m68_state); +INLINE void cmpu_im(m68_state_t *m68_state); +INLINE void cmpu_ix(m68_state_t *m68_state); +INLINE void cmpw_di(m68_state_t *m68_state); +INLINE void cmpw_ex(m68_state_t *m68_state); +INLINE void cmpw_im(m68_state_t *m68_state); +INLINE void cmpw_ix(m68_state_t *m68_state); +INLINE void cmpx_di(m68_state_t *m68_state); +INLINE void cmpx_ex(m68_state_t *m68_state); +INLINE void cmpx_im(m68_state_t *m68_state); +INLINE void cmpx_ix(m68_state_t *m68_state); +INLINE void cmpy_di(m68_state_t *m68_state); +INLINE void cmpy_ex(m68_state_t *m68_state); +INLINE void cmpy_im(m68_state_t *m68_state); +INLINE void cmpy_ix(m68_state_t *m68_state); +INLINE void coma(m68_state_t *m68_state); +INLINE void comb(m68_state_t *m68_state); +INLINE void com_di(m68_state_t *m68_state); +INLINE void comd(m68_state_t *m68_state); +INLINE void come(m68_state_t *m68_state); +INLINE void com_ex(m68_state_t *m68_state); +INLINE void comf(m68_state_t *m68_state); +INLINE void com_ix(m68_state_t *m68_state); +INLINE void comw(m68_state_t *m68_state); +INLINE void cwai(m68_state_t *m68_state); +INLINE void daa(m68_state_t *m68_state); +INLINE void daa(m68_state_t *m68_state); +INLINE void deca(m68_state_t *m68_state); +INLINE void decb(m68_state_t *m68_state); +INLINE void dec_di(m68_state_t *m68_state); +INLINE void decd(m68_state_t *m68_state); +INLINE void dece(m68_state_t *m68_state); +INLINE void dec_ex(m68_state_t *m68_state); +INLINE void decf(m68_state_t *m68_state); +INLINE void dec_ix(m68_state_t *m68_state); +INLINE void decw(m68_state_t *m68_state); +INLINE void divd_di(m68_state_t *m68_state); +INLINE void divd_ex(m68_state_t *m68_state); +INLINE void divd_im(m68_state_t *m68_state); +INLINE void divd_ix(m68_state_t *m68_state); +INLINE void divq_di(m68_state_t *m68_state); +INLINE void divq_ex(m68_state_t *m68_state); +INLINE void divq_im(m68_state_t *m68_state); +INLINE void divq_ix(m68_state_t *m68_state); +INLINE void eim_di(m68_state_t *m68_state); +INLINE void eim_ex(m68_state_t *m68_state); +INLINE void eim_ix(m68_state_t *m68_state); +INLINE void eora_di(m68_state_t *m68_state); +INLINE void eora_ex(m68_state_t *m68_state); +INLINE void eora_im(m68_state_t *m68_state); +INLINE void eora_ix(m68_state_t *m68_state); +INLINE void eorb_di(m68_state_t *m68_state); +INLINE void eorb_ex(m68_state_t *m68_state); +INLINE void eorb_im(m68_state_t *m68_state); +INLINE void eorb_ix(m68_state_t *m68_state); +INLINE void eord_di(m68_state_t *m68_state); +INLINE void eord_ex(m68_state_t *m68_state); +INLINE void eord_im(m68_state_t *m68_state); +INLINE void eord_ix(m68_state_t *m68_state); +INLINE void eorr(m68_state_t *m68_state); +INLINE void exg(m68_state_t *m68_state); +INLINE void illegal(m68_state_t *m68_state); +INLINE void inca(m68_state_t *m68_state); +INLINE void incb(m68_state_t *m68_state); +INLINE void inc_di(m68_state_t *m68_state); +INLINE void incd(m68_state_t *m68_state); +INLINE void ince(m68_state_t *m68_state); +INLINE void inc_ex(m68_state_t *m68_state); +INLINE void incf(m68_state_t *m68_state); +INLINE void inc_ix(m68_state_t *m68_state); +INLINE void incw(m68_state_t *m68_state); +INLINE void jmp_di(m68_state_t *m68_state); +INLINE void jmp_ex(m68_state_t *m68_state); +INLINE void jmp_ix(m68_state_t *m68_state); +INLINE void jsr_di(m68_state_t *m68_state); +INLINE void jsr_ex(m68_state_t *m68_state); +INLINE void jsr_ix(m68_state_t *m68_state); +INLINE void lbcc(m68_state_t *m68_state); +INLINE void lbcs(m68_state_t *m68_state); +INLINE void lbeq(m68_state_t *m68_state); +INLINE void lbge(m68_state_t *m68_state); +INLINE void lbgt(m68_state_t *m68_state); +INLINE void lbhi(m68_state_t *m68_state); +INLINE void lble(m68_state_t *m68_state); +INLINE void lbls(m68_state_t *m68_state); +INLINE void lblt(m68_state_t *m68_state); +INLINE void lbmi(m68_state_t *m68_state); +INLINE void lbne(m68_state_t *m68_state); +INLINE void lbpl(m68_state_t *m68_state); +INLINE void lbra(m68_state_t *m68_state); +INLINE void lbrn(m68_state_t *m68_state); +INLINE void lbsr(m68_state_t *m68_state); +INLINE void lbvc(m68_state_t *m68_state); +INLINE void lbvs(m68_state_t *m68_state); +INLINE void lda_di(m68_state_t *m68_state); +INLINE void lda_ex(m68_state_t *m68_state); +INLINE void lda_im(m68_state_t *m68_state); +INLINE void lda_ix(m68_state_t *m68_state); +INLINE void ldb_di(m68_state_t *m68_state); +INLINE void ldb_ex(m68_state_t *m68_state); +INLINE void ldb_im(m68_state_t *m68_state); +INLINE void ldb_ix(m68_state_t *m68_state); +INLINE void ldbt(m68_state_t *m68_state); +INLINE void ldd_di(m68_state_t *m68_state); +INLINE void ldd_ex(m68_state_t *m68_state); +INLINE void ldd_im(m68_state_t *m68_state); +INLINE void ldd_ix(m68_state_t *m68_state); +INLINE void lde_di(m68_state_t *m68_state); +INLINE void lde_ex(m68_state_t *m68_state); +INLINE void lde_im(m68_state_t *m68_state); +INLINE void lde_ix(m68_state_t *m68_state); +INLINE void ldf_di(m68_state_t *m68_state); +INLINE void ldf_ex(m68_state_t *m68_state); +INLINE void ldf_im(m68_state_t *m68_state); +INLINE void ldf_ix(m68_state_t *m68_state); +INLINE void ldmd_im(m68_state_t *m68_state); +INLINE void ldq_di(m68_state_t *m68_state); +INLINE void ldq_ex(m68_state_t *m68_state); +INLINE void ldq_im(m68_state_t *m68_state); +INLINE void ldq_ix(m68_state_t *m68_state); +INLINE void lds_di(m68_state_t *m68_state); +INLINE void lds_ex(m68_state_t *m68_state); +INLINE void lds_im(m68_state_t *m68_state); +INLINE void lds_ix(m68_state_t *m68_state); +INLINE void ldu_di(m68_state_t *m68_state); +INLINE void ldu_ex(m68_state_t *m68_state); +INLINE void ldu_im(m68_state_t *m68_state); +INLINE void ldu_ix(m68_state_t *m68_state); +INLINE void ldw_di(m68_state_t *m68_state); +INLINE void ldw_ex(m68_state_t *m68_state); +INLINE void ldw_im(m68_state_t *m68_state); +INLINE void ldw_ix(m68_state_t *m68_state); +INLINE void ldx_di(m68_state_t *m68_state); +INLINE void ldx_ex(m68_state_t *m68_state); +INLINE void ldx_im(m68_state_t *m68_state); +INLINE void ldx_ix(m68_state_t *m68_state); +INLINE void ldy_di(m68_state_t *m68_state); +INLINE void ldy_ex(m68_state_t *m68_state); +INLINE void ldy_im(m68_state_t *m68_state); +INLINE void ldy_ix(m68_state_t *m68_state); +INLINE void leas(m68_state_t *m68_state); +INLINE void leau(m68_state_t *m68_state); +INLINE void leax(m68_state_t *m68_state); +INLINE void leay(m68_state_t *m68_state); +INLINE void lsra(m68_state_t *m68_state); +INLINE void lsrb(m68_state_t *m68_state); +INLINE void lsr_di(m68_state_t *m68_state); +INLINE void lsrd(m68_state_t *m68_state); +INLINE void lsr_ex(m68_state_t *m68_state); +INLINE void lsr_ix(m68_state_t *m68_state); +INLINE void lsrw(m68_state_t *m68_state); +INLINE void muld_di(m68_state_t *m68_state); +INLINE void muld_ex(m68_state_t *m68_state); +INLINE void muld_im(m68_state_t *m68_state); +INLINE void muld_ix(m68_state_t *m68_state); +INLINE void mul(m68_state_t *m68_state); +INLINE void nega(m68_state_t *m68_state); +INLINE void negb(m68_state_t *m68_state); +INLINE void neg_di(m68_state_t *m68_state); +INLINE void negd(m68_state_t *m68_state); +INLINE void neg_ex(m68_state_t *m68_state); +INLINE void neg_ix(m68_state_t *m68_state); +INLINE void nop(m68_state_t *m68_state); +INLINE void oim_di(m68_state_t *m68_state); +INLINE void oim_ex(m68_state_t *m68_state); +INLINE void oim_ix(m68_state_t *m68_state); +INLINE void ora_di(m68_state_t *m68_state); +INLINE void ora_ex(m68_state_t *m68_state); +INLINE void ora_im(m68_state_t *m68_state); +INLINE void ora_ix(m68_state_t *m68_state); +INLINE void orb_di(m68_state_t *m68_state); +INLINE void orb_ex(m68_state_t *m68_state); +INLINE void orb_im(m68_state_t *m68_state); +INLINE void orb_ix(m68_state_t *m68_state); +INLINE void orcc(m68_state_t *m68_state); +INLINE void ord_di(m68_state_t *m68_state); +INLINE void ord_ex(m68_state_t *m68_state); +INLINE void ord_im(m68_state_t *m68_state); +INLINE void ord_ix(m68_state_t *m68_state); +INLINE void orr(m68_state_t *m68_state); +INLINE void pref10(m68_state_t *m68_state); +INLINE void pref11(m68_state_t *m68_state); +INLINE void pshs(m68_state_t *m68_state); +INLINE void pshsw(m68_state_t *m68_state); +INLINE void pshu(m68_state_t *m68_state); +INLINE void pshuw(m68_state_t *m68_state); +INLINE void puls(m68_state_t *m68_state); +INLINE void pulsw(m68_state_t *m68_state); +INLINE void pulu(m68_state_t *m68_state); +INLINE void puluw(m68_state_t *m68_state); +INLINE void rola(m68_state_t *m68_state); +INLINE void rolb(m68_state_t *m68_state); +INLINE void rol_di(m68_state_t *m68_state); +INLINE void rold(m68_state_t *m68_state); +INLINE void rol_ex(m68_state_t *m68_state); +INLINE void rol_ix(m68_state_t *m68_state); +INLINE void rolw(m68_state_t *m68_state); +INLINE void rora(m68_state_t *m68_state); +INLINE void rorb(m68_state_t *m68_state); +INLINE void ror_di(m68_state_t *m68_state); +INLINE void rord(m68_state_t *m68_state); +INLINE void ror_ex(m68_state_t *m68_state); +INLINE void ror_ix(m68_state_t *m68_state); +INLINE void rorw(m68_state_t *m68_state); +INLINE void rti(m68_state_t *m68_state); +INLINE void rts(m68_state_t *m68_state); +INLINE void sbca_di(m68_state_t *m68_state); +INLINE void sbca_ex(m68_state_t *m68_state); +INLINE void sbca_im(m68_state_t *m68_state); +INLINE void sbca_ix(m68_state_t *m68_state); +INLINE void sbcb_di(m68_state_t *m68_state); +INLINE void sbcb_ex(m68_state_t *m68_state); +INLINE void sbcb_im(m68_state_t *m68_state); +INLINE void sbcb_ix(m68_state_t *m68_state); +INLINE void sbcd_di(m68_state_t *m68_state); +INLINE void sbcd_ex(m68_state_t *m68_state); +INLINE void sbcd_im(m68_state_t *m68_state); +INLINE void sbcd_ix(m68_state_t *m68_state); +INLINE void sbcr(m68_state_t *m68_state); +INLINE void sex(m68_state_t *m68_state); +INLINE void sexw(m68_state_t *m68_state); +INLINE void sta_di(m68_state_t *m68_state); +INLINE void sta_ex(m68_state_t *m68_state); +INLINE void sta_ix(m68_state_t *m68_state); +INLINE void stb_di(m68_state_t *m68_state); +INLINE void stb_ex(m68_state_t *m68_state); +INLINE void stb_ix(m68_state_t *m68_state); +INLINE void stbt(m68_state_t *m68_state); +INLINE void std_di(m68_state_t *m68_state); +INLINE void std_ex(m68_state_t *m68_state); +INLINE void std_ix(m68_state_t *m68_state); +INLINE void ste_di(m68_state_t *m68_state); +INLINE void ste_ex(m68_state_t *m68_state); +INLINE void ste_ix(m68_state_t *m68_state); +INLINE void stf_di(m68_state_t *m68_state); +INLINE void stf_ex(m68_state_t *m68_state); +INLINE void stf_ix(m68_state_t *m68_state); +INLINE void stq_di(m68_state_t *m68_state); +INLINE void stq_ex(m68_state_t *m68_state); +INLINE void stq_ix(m68_state_t *m68_state); +INLINE void sts_di(m68_state_t *m68_state); +INLINE void sts_ex(m68_state_t *m68_state); +INLINE void sts_ix(m68_state_t *m68_state); +INLINE void stu_di(m68_state_t *m68_state); +INLINE void stu_ex(m68_state_t *m68_state); +INLINE void stu_ix(m68_state_t *m68_state); +INLINE void stw_di(m68_state_t *m68_state); +INLINE void stw_ex(m68_state_t *m68_state); +INLINE void stw_ix(m68_state_t *m68_state); +INLINE void stx_di(m68_state_t *m68_state); +INLINE void stx_ex(m68_state_t *m68_state); +INLINE void stx_ix(m68_state_t *m68_state); +INLINE void sty_di(m68_state_t *m68_state); +INLINE void sty_ex(m68_state_t *m68_state); +INLINE void sty_ix(m68_state_t *m68_state); +INLINE void suba_di(m68_state_t *m68_state); +INLINE void suba_ex(m68_state_t *m68_state); +INLINE void suba_im(m68_state_t *m68_state); +INLINE void suba_ix(m68_state_t *m68_state); +INLINE void subb_di(m68_state_t *m68_state); +INLINE void subb_ex(m68_state_t *m68_state); +INLINE void subb_im(m68_state_t *m68_state); +INLINE void subb_ix(m68_state_t *m68_state); +INLINE void subd_di(m68_state_t *m68_state); +INLINE void subd_ex(m68_state_t *m68_state); +INLINE void subd_im(m68_state_t *m68_state); +INLINE void subd_ix(m68_state_t *m68_state); +INLINE void sube_di(m68_state_t *m68_state); +INLINE void sube_ex(m68_state_t *m68_state); +INLINE void sube_im(m68_state_t *m68_state); +INLINE void sube_ix(m68_state_t *m68_state); +INLINE void subf_di(m68_state_t *m68_state); +INLINE void subf_ex(m68_state_t *m68_state); +INLINE void subf_im(m68_state_t *m68_state); +INLINE void subf_ix(m68_state_t *m68_state); +INLINE void subr(m68_state_t *m68_state); +INLINE void subw_di(m68_state_t *m68_state); +INLINE void subw_ex(m68_state_t *m68_state); +INLINE void subw_im(m68_state_t *m68_state); +INLINE void subw_ix(m68_state_t *m68_state); +INLINE void swi2(m68_state_t *m68_state); +INLINE void swi3(m68_state_t *m68_state); +INLINE void swi(m68_state_t *m68_state); +INLINE void sync(m68_state_t *m68_state); +INLINE void tfmcp(m68_state_t *m68_state); +INLINE void tfmmm(m68_state_t *m68_state); +INLINE void tfmpc(m68_state_t *m68_state); +INLINE void tfmpp(m68_state_t *m68_state); +INLINE void tfr(m68_state_t *m68_state); +INLINE void tim_di(m68_state_t *m68_state); +INLINE void tim_ex(m68_state_t *m68_state); +INLINE void tim_ix(m68_state_t *m68_state); +INLINE void tsta(m68_state_t *m68_state); +INLINE void tstb(m68_state_t *m68_state); +INLINE void tst_di(m68_state_t *m68_state); +INLINE void tstd(m68_state_t *m68_state); +INLINE void tste(m68_state_t *m68_state); +INLINE void tst_ex(m68_state_t *m68_state); +INLINE void tstf(m68_state_t *m68_state); +INLINE void tst_ix(m68_state_t *m68_state); +INLINE void tstw(m68_state_t *m68_state); static const UINT8 flags8i[256]= /* increment */ { @@ -650,9 +650,9 @@ static const UINT8 ccounts_page11_na[256] = /* Cycle Counts Page 11, Native 6 /* 0xFX */ 5, 5, IIP1, IIP1, IIP1, IIP1, 5, 5, IIP1, IIP1, IIP1, 5, IIP1, IIP1, IIP1, IIP1 }; -#ifndef BIG_SWITCH +#if !BIG_SWITCH -static void (*const hd6309_main[0x100])(void) = { +static void (*const hd6309_main[0x100])(m68_state_t *) = { /* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ @@ -705,7 +705,7 @@ static void (*const hd6309_main[0x100])(void) = { eorb_ex, adcb_ex, orb_ex, addb_ex, ldd_ex, std_ex, ldu_ex, stu_ex }; -static void (*const hd6309_page01[0x100])(void) = { +static void (*const hd6309_page01[0x100])(m68_state_t *) = { /* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ @@ -757,7 +757,7 @@ static void (*const hd6309_page01[0x100])(void) = { /* 0xFX */ IIError, IIError, IIError, IIError, IIError, IIError, IIError, IIError, IIError, IIError, IIError, IIError, ldq_ex, stq_ex, lds_ex, sts_ex }; -static void (*const hd6309_page11[0x100])(void) = { +static void (*const hd6309_page11[0x100])(m68_state_t *) = { /* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ diff --git a/src/emu/cpu/hd6309/hd6309.c b/src/emu/cpu/hd6309/hd6309.c index 28cf19bb473..06baf68d7cb 100644 --- a/src/emu/cpu/hd6309/hd6309.c +++ b/src/emu/cpu/hd6309/hd6309.c @@ -117,26 +117,20 @@ #define false 0 #endif -extern CPU_DISASSEMBLE( hd6309 ); - -/*#define BIG_SWITCH*/ - -static void CHECK_IRQ_LINES( void ); -static void IIError(void); -static void DZError(void); - -INLINE void fetch_effective_address( void ); +#define BIG_SWITCH 0 /* 6309 Registers */ -typedef struct +typedef struct _m68_state_t m68_state_t; +struct _m68_state_t { PAIR pc; /* Program counter */ PAIR ppc; /* Previous program counter */ - PAIR d,w; /* Accumlator d and w (ab = d, ef = w, abef = q) */ + PAIR d; /* Accumlator d and w (ab = d, ef = w, abef = q) */ + PAIR w; PAIR dp; /* Direct Page register (page in MSB) */ PAIR u, s; /* Stack pointers */ PAIR x, y; /* Index registers */ - PAIR v; /* New 6309 register */ + PAIR v; /* New 6309 register */ UINT8 cc; UINT8 md; /* Special mode register */ UINT8 ireg; /* First opcode */ @@ -146,7 +140,16 @@ typedef struct const device_config *device; UINT8 int_state; /* SYNC and CWAI flags */ UINT8 nmi_state; -} hd6309_Regs; + + UINT8 dummy_byte; + UINT8 *regTable[4]; +}; + +static void CHECK_IRQ_LINES( m68_state_t *m68_state ); +static void IIError(m68_state_t *m68_state); +static void DZError(m68_state_t *m68_state); + +INLINE void fetch_effective_address( m68_state_t *m68_state ); /* flag bits in the cc register */ #define CC_C 0x01 /* Carry */ @@ -164,68 +167,58 @@ typedef struct #define MD_II 0x40 /* Illegal instruction */ #define MD_DZ 0x80 /* Division by zero */ -/* 6309 registers */ -static hd6309_Regs hd6309; -//static int hd6309_slapstic = 0; +#define pPPC m68_state->ppc +#define pPC m68_state->pc +#define pU m68_state->u +#define pS m68_state->s +#define pX m68_state->x +#define pY m68_state->y +#define pD m68_state->d -#define pPPC hd6309.ppc -#define pPC hd6309.pc -#define pU hd6309.u -#define pS hd6309.s -#define pX hd6309.x -#define pY hd6309.y -#define pV hd6309.v -/*#define pQ hd6309.q*/ -#define pD hd6309.d -#define pW hd6309.w -#define pZ hd6309.z +#define pV m68_state->v +#define pW m68_state->w -#define PPC hd6309.ppc.w.l -#define PC hd6309.pc.w.l -#define PCD hd6309.pc.d -#define U hd6309.u.w.l -#define UD hd6309.u.d -#define S hd6309.s.w.l -#define SD hd6309.s.d -#define X hd6309.x.w.l -#define XD hd6309.x.d -#define Y hd6309.y.w.l -#define YD hd6309.y.d -#define V hd6309.v.w.l -#define VD hd6309.v.d -#define D hd6309.d.w.l -#define A hd6309.d.b.h -#define B hd6309.d.b.l -#define W hd6309.w.w.l -#define E hd6309.w.b.h -#define F hd6309.w.b.l -#define DP hd6309.dp.b.h -#define DPD hd6309.dp.d -#define CC hd6309.cc -#define MD hd6309.md +/* #define pQ m68_state->q */ +/* #define pZ m68_state->z */ + +#define PPC m68_state->ppc.w.l +#define PC m68_state->pc.w.l +#define PCD m68_state->pc.d +#define U m68_state->u.w.l +#define UD m68_state->u.d +#define S m68_state->s.w.l +#define SD m68_state->s.d +#define X m68_state->x.w.l +#define XD m68_state->x.d +#define Y m68_state->y.w.l +#define YD m68_state->y.d +#define V m68_state->v.w.l +#define VD m68_state->v.d +#define D m68_state->d.w.l +#define A m68_state->d.b.h +#define B m68_state->d.b.l +#define W m68_state->w.w.l +#define E m68_state->w.b.h +#define F m68_state->w.b.l +#define DP m68_state->dp.b.h +#define DPD m68_state->dp.d +#define CC m68_state->cc +#define MD m68_state->md static PAIR ea; /* effective address */ #define EA ea.w.l #define EAD ea.d #define CHANGE_PC change_pc(PCD) -#if 0 -#define CHANGE_PC { \ - if( hd6309_slapstic ) \ - cpu_setOPbase16(PCD); \ - else \ - change_pc(PCD); \ - } -#endif -#define HD6309_CWAI 8 /* set when CWAI is waiting for an interrupt */ -#define HD6309_SYNC 16 /* set when SYNC is waiting for an interrupt */ -#define HD6309_LDS 32 /* set when LDS occured at least once */ +#define M6809_CWAI 8 /* set when CWAI is waiting for an interrupt */ +#define M6809_SYNC 16 /* set when SYNC is waiting for an interrupt */ +#define M6809_LDS 32 /* set when LDS occured at least once */ /* public globals */ -static int hd6309_ICount; +static int m68_icount; -/* these are re-defined in hd6309.h TO RAM, ROM or functions in cpuintrf.c */ +/* these are re-defined in m68_state->h TO RAM, ROM or functions in cpuintrf.c */ #define RM(mAddr) HD6309_RDMEM(mAddr) #define WM(mAddr,Value) HD6309_WRMEM(mAddr,Value) #define ROP(mAddr) HD6309_RDOP(mAddr) @@ -287,6 +280,7 @@ static UINT8 const *index_cycle; /* for treating an unsigned byte as a signed word */ #define SIGNED(b) ((UINT16)(b&0x80?b|0xff00:b)) + /* for treating an unsigned short as a signed long */ #define SIGNED_16(b) ((UINT32)(b&0x8000?b|0xffff0000:b)) @@ -324,9 +318,10 @@ static UINT8 const *index_cycle; /* macros for convenience */ #define DIRBYTE(b) {DIRECT;b=RM(EAD);} #define DIRWORD(w) {DIRECT;w.d=RM16(EAD);} -#define DIRLONG(lng) {DIRECT;lng.w.h=RM16(EAD);lng.w.l=RM16(EAD+2);} #define EXTBYTE(b) {EXTENDED;b=RM(EAD);} #define EXTWORD(w) {EXTENDED;w.d=RM16(EAD);} + +#define DIRLONG(lng) {DIRECT;lng.w.h=RM16(EAD);lng.w.l=RM16(EAD+2);} #define EXTLONG(lng) {EXTENDED;lng.w.h=RM16(EAD);lng.w.l=RM16(EAD+2);} /* includes the static function prototypes and other tables */ @@ -349,48 +344,44 @@ static UINT8 const *index_cycle; if( f ) \ { \ if( !(MD & MD_EM) ) \ - hd6309_ICount -= 1; \ + m68_icount -= 1; \ PC += t.w.l; \ CHANGE_PC; \ } \ } -INLINE UINT32 RM16( UINT32 mAddr ); -INLINE UINT32 RM16( UINT32 mAddr ) +INLINE UINT32 RM16( UINT32 Addr ) { - UINT32 result = RM(mAddr) << 8; - return result | RM((mAddr+1)&0xffff); + UINT32 result = RM(Addr) << 8; + return result | RM((Addr+1)&0xffff); } -INLINE UINT32 RM32( UINT32 mAddr ); -INLINE UINT32 RM32( UINT32 mAddr ) +INLINE UINT32 RM32( UINT32 Addr ) { - UINT32 result = RM(mAddr) << 24; - result += RM(mAddr+1) << 16; - result += RM(mAddr+2) << 8; - result += RM(mAddr+3); + UINT32 result = RM(Addr) << 24; + result += RM(Addr+1) << 16; + result += RM(Addr+2) << 8; + result += RM(Addr+3); return result; } -INLINE void WM16( UINT32 mAddr, PAIR *p ); -INLINE void WM16( UINT32 mAddr, PAIR *p ) +INLINE void WM16( UINT32 Addr, PAIR *p ) { - WM( mAddr, p->b.h ); - WM( (mAddr+1)&0xffff, p->b.l ); + WM( Addr, p->b.h ); + WM( (Addr+1)&0xffff, p->b.l ); } -INLINE void WM32( UINT32 mAddr, PAIR *p ); -INLINE void WM32( UINT32 mAddr, PAIR *p ) +INLINE void WM32( UINT32 Addr, PAIR *p ) { - WM( mAddr, p->b.h3 ); - WM( (mAddr+1)&0xffff, p->b.h2 ); - WM( (mAddr+2)&0xffff, p->b.h ); - WM( (mAddr+3)&0xffff, p->b.l ); + WM( Addr, p->b.h3 ); + WM( (Addr+1)&0xffff, p->b.h2 ); + WM( (Addr+2)&0xffff, p->b.h ); + WM( (Addr+3)&0xffff, p->b.l ); } -static void UpdateState(void) +static void UpdateState(m68_state_t *m68_state) { - if ( hd6309.md & MD_EM ) + if ( m68_state->md & MD_EM ) { cycle_counts_page0 = ccounts_page0_na; cycle_counts_page01 = ccounts_page01_na; @@ -406,19 +397,19 @@ static void UpdateState(void) } } -static void CHECK_IRQ_LINES( void ) +static void CHECK_IRQ_LINES( m68_state_t *m68_state ) { - if( hd6309.irq_state[HD6309_IRQ_LINE] != CLEAR_LINE || - hd6309.irq_state[HD6309_FIRQ_LINE] != CLEAR_LINE ) - hd6309.int_state &= ~HD6309_SYNC; /* clear SYNC flag */ - if( hd6309.irq_state[HD6309_FIRQ_LINE]!=CLEAR_LINE && !(CC & CC_IF)) + if( m68_state->irq_state[HD6309_IRQ_LINE] != CLEAR_LINE || + m68_state->irq_state[HD6309_FIRQ_LINE] != CLEAR_LINE ) + m68_state->int_state &= ~M6809_SYNC; /* clear SYNC flag */ + if( m68_state->irq_state[HD6309_FIRQ_LINE]!=CLEAR_LINE && !(CC & CC_IF)) { /* fast IRQ */ /* HJB 990225: state already saved by CWAI? */ - if( hd6309.int_state & HD6309_CWAI ) + if( m68_state->int_state & M6809_CWAI ) { - hd6309.int_state &= ~HD6309_CWAI; - hd6309.extra_cycles += 7; /* subtract +7 cycles */ + m68_state->int_state &= ~M6809_CWAI; + m68_state->extra_cycles += 7; /* subtract +7 cycles */ } else { @@ -434,35 +425,35 @@ static void CHECK_IRQ_LINES( void ) { PUSHBYTE(F); PUSHBYTE(E); - hd6309.extra_cycles += 2; /* subtract +2 cycles */ + m68_state->extra_cycles += 2; /* subtract +2 cycles */ } PUSHBYTE(B); PUSHBYTE(A); PUSHBYTE(CC); - hd6309.extra_cycles += 19; /* subtract +19 cycles */ + m68_state->extra_cycles += 19; /* subtract +19 cycles */ } else { CC &= ~CC_E; /* save 'short' state */ PUSHWORD(pPC); PUSHBYTE(CC); - hd6309.extra_cycles += 10; /* subtract +10 cycles */ + m68_state->extra_cycles += 10; /* subtract +10 cycles */ } } CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */ PCD=RM16(0xfff6); CHANGE_PC; - (void)(*hd6309.irq_callback)(hd6309.device, HD6309_FIRQ_LINE); + (void)(*m68_state->irq_callback)(m68_state->device, HD6309_FIRQ_LINE); } else - if( hd6309.irq_state[HD6309_IRQ_LINE]!=CLEAR_LINE && !(CC & CC_II) ) + if( m68_state->irq_state[HD6309_IRQ_LINE]!=CLEAR_LINE && !(CC & CC_II) ) { /* standard IRQ */ /* HJB 990225: state already saved by CWAI? */ - if( hd6309.int_state & HD6309_CWAI ) + if( m68_state->int_state & M6809_CWAI ) { - hd6309.int_state &= ~HD6309_CWAI; /* clear CWAI flag */ - hd6309.extra_cycles += 7; /* subtract +7 cycles */ + m68_state->int_state &= ~M6809_CWAI; /* clear CWAI flag */ + m68_state->extra_cycles += 7; /* subtract +7 cycles */ } else { @@ -476,27 +467,34 @@ static void CHECK_IRQ_LINES( void ) { PUSHBYTE(F); PUSHBYTE(E); - hd6309.extra_cycles += 2; /* subtract +2 cycles */ + m68_state->extra_cycles += 2; /* subtract +2 cycles */ } PUSHBYTE(B); PUSHBYTE(A); PUSHBYTE(CC); - hd6309.extra_cycles += 19; /* subtract +19 cycles */ + m68_state->extra_cycles += 19; /* subtract +19 cycles */ } CC |= CC_II; /* inhibit IRQ */ PCD=RM16(0xfff8); CHANGE_PC; - (void)(*hd6309.irq_callback)(hd6309.device, HD6309_IRQ_LINE); + (void)(*m68_state->irq_callback)(m68_state->device, HD6309_IRQ_LINE); } + } +/**************************************************************************** + * includes the actual opcode implementations + ****************************************************************************/ +#include "6309ops.c" + + + /**************************************************************************** * Get all registers in given buffer ****************************************************************************/ + static CPU_GET_CONTEXT( hd6309 ) { - if( dst ) - *(hd6309_Regs*)dst = hd6309; } /**************************************************************************** @@ -504,23 +502,39 @@ static CPU_GET_CONTEXT( hd6309 ) ****************************************************************************/ static CPU_SET_CONTEXT( hd6309 ) { - if( src ) - hd6309 = *(hd6309_Regs*)src; + m68_state_t *m68_state = src; + CHANGE_PC; - CHECK_IRQ_LINES(); - UpdateState(); + CHECK_IRQ_LINES(m68_state); + UpdateState(m68_state); } static STATE_POSTLOAD( hd6309_postload ) { - UpdateState(); + const device_config *device = param; + m68_state_t *m68_state = device->token; + + UpdateState(m68_state); } + +/****************************************************************************/ +/* Reset registers to their initial values */ +/****************************************************************************/ static CPU_INIT( hd6309 ) { - hd6309.irq_callback = irqcallback; - hd6309.device = device; + m68_state_t *m68_state = device->token; + + m68_state->irq_callback = irqcallback; + m68_state->device = device; + + /* setup regtable */ + + m68_state->regTable[0] = &(CC); + m68_state->regTable[1] = &(A); + m68_state->regTable[2] = &(B); + m68_state->regTable[3] = &m68_state->dummy_byte; state_save_register_item("hd6309", index, PC); state_save_register_item("hd6309", index, U); @@ -531,11 +545,11 @@ static CPU_INIT( hd6309 ) state_save_register_item("hd6309", index, DP); state_save_register_item("hd6309", index, CC); state_save_register_item("hd6309", index, MD); - state_save_register_postload(device->machine, hd6309_postload, NULL); - state_save_register_item("hd6309", index, hd6309.int_state); - state_save_register_item("hd6309", index, hd6309.nmi_state); - state_save_register_item("hd6309", index, hd6309.irq_state[0]); - state_save_register_item("hd6309", index, hd6309.irq_state[1]); + state_save_register_postload(device->machine, hd6309_postload, (void *) device); + state_save_register_item("hd6309", index, m68_state->int_state); + state_save_register_item("hd6309", index, m68_state->nmi_state); + state_save_register_item("hd6309", index, m68_state->irq_state[0]); + state_save_register_item("hd6309", index, m68_state->irq_state[1]); } /****************************************************************************/ @@ -543,10 +557,13 @@ static CPU_INIT( hd6309 ) /****************************************************************************/ static CPU_RESET( hd6309 ) { - hd6309.int_state = 0; - hd6309.nmi_state = CLEAR_LINE; - hd6309.irq_state[0] = CLEAR_LINE; - hd6309.irq_state[0] = CLEAR_LINE; + m68_state_t *m68_state = device->token; + + m68_state->int_state = 0; + m68_state->nmi_state = CLEAR_LINE; + m68_state->irq_state[0] = CLEAR_LINE; + /*FIXME: BUG ?*/ + m68_state->irq_state[0] = CLEAR_LINE; DPD = 0; /* Reset direct page register */ @@ -556,7 +573,7 @@ static CPU_RESET( hd6309 ) PCD = RM16(0xfffe); CHANGE_PC; - UpdateState(); + UpdateState(m68_state); } static CPU_EXIT( hd6309 ) @@ -564,28 +581,27 @@ static CPU_EXIT( hd6309 ) /* nothing to do ? */ } -/* Generate interrupts */ /**************************************************************************** * Set IRQ line state ****************************************************************************/ -static void set_irq_line(int irqline, int state) +static void set_irq_line(m68_state_t *m68_state, int irqline, int state) { if (irqline == INPUT_LINE_NMI) { - if (hd6309.nmi_state == state) return; - hd6309.nmi_state = state; + if (m68_state->nmi_state == state) return; + m68_state->nmi_state = state; LOG(("HD6309#%d set_irq_line (NMI) %d (PC=%4.4X)\n", cpunum_get_active(), state, pPC.d)); if( state == CLEAR_LINE ) return; /* if the stack was not yet initialized */ - if( !(hd6309.int_state & HD6309_LDS) ) return; + if( !(m68_state->int_state & M6809_LDS) ) return; - hd6309.int_state &= ~HD6309_SYNC; + m68_state->int_state &= ~M6809_SYNC; /* HJB 990225: state already saved by CWAI? */ - if( hd6309.int_state & HD6309_CWAI ) + if( m68_state->int_state & M6809_CWAI ) { - hd6309.int_state &= ~HD6309_CWAI; - hd6309.extra_cycles += 7; /* subtract +7 cycles next time */ + m68_state->int_state &= ~M6809_CWAI; + m68_state->extra_cycles += 7; /* subtract +7 cycles next time */ } else { @@ -599,13 +615,13 @@ static void set_irq_line(int irqline, int state) { PUSHBYTE(F); PUSHBYTE(E); - hd6309.extra_cycles += 2; /* subtract +2 cycles */ + m68_state->extra_cycles += 2; /* subtract +2 cycles */ } PUSHBYTE(B); PUSHBYTE(A); PUSHBYTE(CC); - hd6309.extra_cycles += 19; /* subtract +19 cycles next time */ + m68_state->extra_cycles += 19; /* subtract +19 cycles next time */ } CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */ PCD = RM16(0xfffc); @@ -614,25 +630,24 @@ static void set_irq_line(int irqline, int state) else if (irqline < 2) { LOG(("HD6309#%d set_irq_line %d, %d (PC=%4.4X)\n", cpunum_get_active(), irqline, state, pPC.d)); - hd6309.irq_state[irqline] = state; + m68_state->irq_state[irqline] = state; if (state == CLEAR_LINE) return; - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); } } -/* includes the actual opcode implementations */ -#include "6309ops.c" - /* execute instructions on this CPU until icount expires */ static CPU_EXECUTE( hd6309 ) /* NS 970908 */ { - hd6309_ICount = cycles - hd6309.extra_cycles; - hd6309.extra_cycles = 0; + m68_state_t *m68_state = device->token; + + m68_icount = cycles - m68_state->extra_cycles; + m68_state->extra_cycles = 0; - if (hd6309.int_state & (HD6309_CWAI | HD6309_SYNC)) + if (m68_state->int_state & (M6809_CWAI | M6809_SYNC)) { debugger_instruction_hook(device->machine, PCD); - hd6309_ICount = 0; + m68_icount = 0; } else { @@ -642,285 +657,284 @@ static CPU_EXECUTE( hd6309 ) /* NS 970908 */ debugger_instruction_hook(device->machine, PCD); - hd6309.ireg = ROP(PCD); + m68_state->ireg = ROP(PCD); PC++; - -#ifdef BIG_SWITCH - switch( hd6309.ireg ) +#if BIG_SWITCH + switch( m68_state->ireg ) { - case 0x00: neg_di(); break; - case 0x01: oim_di(); break; - case 0x02: aim_di(); break; - case 0x03: com_di(); break; - case 0x04: lsr_di(); break; - case 0x05: eim_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: tim_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: sync(); break; - case 0x14: sexw(); break; - case 0x15: IIError(); break; - case 0x16: lbra(); break; - case 0x17: lbsr(); break; - case 0x18: IIError(); break; - case 0x19: daa(); break; - case 0x1a: orcc(); break; - case 0x1b: IIError(); 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: IIError(); break; - case 0x39: rts(); break; - case 0x3a: abx(); break; - case 0x3b: rti(); break; - case 0x3c: cwai(); break; - case 0x3d: mul(); break; - case 0x3e: IIError(); break; - case 0x3f: swi(); break; - case 0x40: nega(); break; - case 0x41: IIError(); break; - case 0x42: IIError(); break; - case 0x43: coma(); break; - case 0x44: lsra(); break; - case 0x45: IIError(); break; - case 0x46: rora(); break; - case 0x47: asra(); break; - case 0x48: asla(); break; - case 0x49: rola(); break; - case 0x4a: deca(); break; - case 0x4b: IIError(); break; - case 0x4c: inca(); break; - case 0x4d: tsta(); break; - case 0x4e: IIError(); break; - case 0x4f: clra(); break; - case 0x50: negb(); break; - case 0x51: IIError(); break; - case 0x52: IIError(); break; - case 0x53: comb(); break; - case 0x54: lsrb(); break; - case 0x55: IIError(); break; - case 0x56: rorb(); break; - case 0x57: asrb(); break; - case 0x58: aslb(); break; - case 0x59: rolb(); break; - case 0x5a: decb(); break; - case 0x5b: IIError(); break; - case 0x5c: incb(); break; - case 0x5d: tstb(); break; - case 0x5e: IIError(); break; - case 0x5f: clrb(); break; - case 0x60: neg_ix(); break; - case 0x61: oim_ix(); break; - case 0x62: aim_ix(); break; - case 0x63: com_ix(); break; - case 0x64: lsr_ix(); break; - case 0x65: eim_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: tim_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: oim_ex(); break; - case 0x72: aim_ex(); break; - case 0x73: com_ex(); break; - case 0x74: lsr_ex(); break; - case 0x75: eim_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: tim_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: IIError(); 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: IIError(); 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: IIError(); 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: ldq_im(); break; /* in m6809 was std_im */ - case 0xce: ldu_im(); break; - case 0xcf: IIError(); 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; + case 0x00: neg_di(m68_state); break; + case 0x01: oim_di(m68_state); break; + case 0x02: aim_di(m68_state); break; + case 0x03: com_di(m68_state); break; + case 0x04: lsr_di(m68_state); break; + case 0x05: eim_di(m68_state); break; + case 0x06: ror_di(m68_state); break; + case 0x07: asr_di(m68_state); break; + case 0x08: asl_di(m68_state); break; + case 0x09: rol_di(m68_state); break; + case 0x0a: dec_di(m68_state); break; + case 0x0b: tim_di(m68_state); break; + case 0x0c: inc_di(m68_state); break; + case 0x0d: tst_di(m68_state); break; + case 0x0e: jmp_di(m68_state); break; + case 0x0f: clr_di(m68_state); break; + case 0x10: pref10(m68_state); break; + case 0x11: pref11(m68_state); break; + case 0x12: nop(m68_state); break; + case 0x13: sync(m68_state); break; + case 0x14: sexw(m68_state); break; + case 0x15: IIError(m68_state); break; + case 0x16: lbra(m68_state); break; + case 0x17: lbsr(m68_state); break; + case 0x18: IIError(m68_state); break; + case 0x19: daa(m68_state); break; + case 0x1a: orcc(m68_state); break; + case 0x1b: IIError(m68_state); break; + case 0x1c: andcc(m68_state); break; + case 0x1d: sex(m68_state); break; + case 0x1e: exg(m68_state); break; + case 0x1f: tfr(m68_state); break; + case 0x20: bra(m68_state); break; + case 0x21: brn(m68_state); break; + case 0x22: bhi(m68_state); break; + case 0x23: bls(m68_state); break; + case 0x24: bcc(m68_state); break; + case 0x25: bcs(m68_state); break; + case 0x26: bne(m68_state); break; + case 0x27: beq(m68_state); break; + case 0x28: bvc(m68_state); break; + case 0x29: bvs(m68_state); break; + case 0x2a: bpl(m68_state); break; + case 0x2b: bmi(m68_state); break; + case 0x2c: bge(m68_state); break; + case 0x2d: blt(m68_state); break; + case 0x2e: bgt(m68_state); break; + case 0x2f: ble(m68_state); break; + case 0x30: leax(m68_state); break; + case 0x31: leay(m68_state); break; + case 0x32: leas(m68_state); break; + case 0x33: leau(m68_state); break; + case 0x34: pshs(m68_state); break; + case 0x35: puls(m68_state); break; + case 0x36: pshu(m68_state); break; + case 0x37: pulu(m68_state); break; + case 0x38: IIError(m68_state); break; + case 0x39: rts(m68_state); break; + case 0x3a: abx(m68_state); break; + case 0x3b: rti(m68_state); break; + case 0x3c: cwai(m68_state); break; + case 0x3d: mul(m68_state); break; + case 0x3e: IIError(m68_state); break; + case 0x3f: swi(m68_state); break; + case 0x40: nega(m68_state); break; + case 0x41: IIError(m68_state); break; + case 0x42: IIError(m68_state); break; + case 0x43: coma(m68_state); break; + case 0x44: lsra(m68_state); break; + case 0x45: IIError(m68_state); break; + case 0x46: rora(m68_state); break; + case 0x47: asra(m68_state); break; + case 0x48: asla(m68_state); break; + case 0x49: rola(m68_state); break; + case 0x4a: deca(m68_state); break; + case 0x4b: IIError(m68_state); break; + case 0x4c: inca(m68_state); break; + case 0x4d: tsta(m68_state); break; + case 0x4e: IIError(m68_state); break; + case 0x4f: clra(m68_state); break; + case 0x50: negb(m68_state); break; + case 0x51: IIError(m68_state); break; + case 0x52: IIError(m68_state); break; + case 0x53: comb(m68_state); break; + case 0x54: lsrb(m68_state); break; + case 0x55: IIError(m68_state); break; + case 0x56: rorb(m68_state); break; + case 0x57: asrb(m68_state); break; + case 0x58: aslb(m68_state); break; + case 0x59: rolb(m68_state); break; + case 0x5a: decb(m68_state); break; + case 0x5b: IIError(m68_state); break; + case 0x5c: incb(m68_state); break; + case 0x5d: tstb(m68_state); break; + case 0x5e: IIError(m68_state); break; + case 0x5f: clrb(m68_state); break; + case 0x60: neg_ix(m68_state); break; + case 0x61: oim_ix(m68_state); break; + case 0x62: aim_ix(m68_state); break; + case 0x63: com_ix(m68_state); break; + case 0x64: lsr_ix(m68_state); break; + case 0x65: eim_ix(m68_state); break; + case 0x66: ror_ix(m68_state); break; + case 0x67: asr_ix(m68_state); break; + case 0x68: asl_ix(m68_state); break; + case 0x69: rol_ix(m68_state); break; + case 0x6a: dec_ix(m68_state); break; + case 0x6b: tim_ix(m68_state); break; + case 0x6c: inc_ix(m68_state); break; + case 0x6d: tst_ix(m68_state); break; + case 0x6e: jmp_ix(m68_state); break; + case 0x6f: clr_ix(m68_state); break; + case 0x70: neg_ex(m68_state); break; + case 0x71: oim_ex(m68_state); break; + case 0x72: aim_ex(m68_state); break; + case 0x73: com_ex(m68_state); break; + case 0x74: lsr_ex(m68_state); break; + case 0x75: eim_ex(m68_state); break; + case 0x76: ror_ex(m68_state); break; + case 0x77: asr_ex(m68_state); break; + case 0x78: asl_ex(m68_state); break; + case 0x79: rol_ex(m68_state); break; + case 0x7a: dec_ex(m68_state); break; + case 0x7b: tim_ex(m68_state); break; + case 0x7c: inc_ex(m68_state); break; + case 0x7d: tst_ex(m68_state); break; + case 0x7e: jmp_ex(m68_state); break; + case 0x7f: clr_ex(m68_state); break; + case 0x80: suba_im(m68_state); break; + case 0x81: cmpa_im(m68_state); break; + case 0x82: sbca_im(m68_state); break; + case 0x83: subd_im(m68_state); break; + case 0x84: anda_im(m68_state); break; + case 0x85: bita_im(m68_state); break; + case 0x86: lda_im(m68_state); break; + case 0x87: IIError(m68_state); break; + case 0x88: eora_im(m68_state); break; + case 0x89: adca_im(m68_state); break; + case 0x8a: ora_im(m68_state); break; + case 0x8b: adda_im(m68_state); break; + case 0x8c: cmpx_im(m68_state); break; + case 0x8d: bsr(m68_state); break; + case 0x8e: ldx_im(m68_state); break; + case 0x8f: IIError(m68_state); break; + case 0x90: suba_di(m68_state); break; + case 0x91: cmpa_di(m68_state); break; + case 0x92: sbca_di(m68_state); break; + case 0x93: subd_di(m68_state); break; + case 0x94: anda_di(m68_state); break; + case 0x95: bita_di(m68_state); break; + case 0x96: lda_di(m68_state); break; + case 0x97: sta_di(m68_state); break; + case 0x98: eora_di(m68_state); break; + case 0x99: adca_di(m68_state); break; + case 0x9a: ora_di(m68_state); break; + case 0x9b: adda_di(m68_state); break; + case 0x9c: cmpx_di(m68_state); break; + case 0x9d: jsr_di(m68_state); break; + case 0x9e: ldx_di(m68_state); break; + case 0x9f: stx_di(m68_state); break; + case 0xa0: suba_ix(m68_state); break; + case 0xa1: cmpa_ix(m68_state); break; + case 0xa2: sbca_ix(m68_state); break; + case 0xa3: subd_ix(m68_state); break; + case 0xa4: anda_ix(m68_state); break; + case 0xa5: bita_ix(m68_state); break; + case 0xa6: lda_ix(m68_state); break; + case 0xa7: sta_ix(m68_state); break; + case 0xa8: eora_ix(m68_state); break; + case 0xa9: adca_ix(m68_state); break; + case 0xaa: ora_ix(m68_state); break; + case 0xab: adda_ix(m68_state); break; + case 0xac: cmpx_ix(m68_state); break; + case 0xad: jsr_ix(m68_state); break; + case 0xae: ldx_ix(m68_state); break; + case 0xaf: stx_ix(m68_state); break; + case 0xb0: suba_ex(m68_state); break; + case 0xb1: cmpa_ex(m68_state); break; + case 0xb2: sbca_ex(m68_state); break; + case 0xb3: subd_ex(m68_state); break; + case 0xb4: anda_ex(m68_state); break; + case 0xb5: bita_ex(m68_state); break; + case 0xb6: lda_ex(m68_state); break; + case 0xb7: sta_ex(m68_state); break; + case 0xb8: eora_ex(m68_state); break; + case 0xb9: adca_ex(m68_state); break; + case 0xba: ora_ex(m68_state); break; + case 0xbb: adda_ex(m68_state); break; + case 0xbc: cmpx_ex(m68_state); break; + case 0xbd: jsr_ex(m68_state); break; + case 0xbe: ldx_ex(m68_state); break; + case 0xbf: stx_ex(m68_state); break; + case 0xc0: subb_im(m68_state); break; + case 0xc1: cmpb_im(m68_state); break; + case 0xc2: sbcb_im(m68_state); break; + case 0xc3: addd_im(m68_state); break; + case 0xc4: andb_im(m68_state); break; + case 0xc5: bitb_im(m68_state); break; + case 0xc6: ldb_im(m68_state); break; + case 0xc7: IIError(m68_state); break; + case 0xc8: eorb_im(m68_state); break; + case 0xc9: adcb_im(m68_state); break; + case 0xca: orb_im(m68_state); break; + case 0xcb: addb_im(m68_state); break; + case 0xcc: ldd_im(m68_state); break; + case 0xcd: ldq_im(m68_state); break; /* in m6809 was std_im */ + case 0xce: ldu_im(m68_state); break; + case 0xcf: IIError(m68_state); break; + case 0xd0: subb_di(m68_state); break; + case 0xd1: cmpb_di(m68_state); break; + case 0xd2: sbcb_di(m68_state); break; + case 0xd3: addd_di(m68_state); break; + case 0xd4: andb_di(m68_state); break; + case 0xd5: bitb_di(m68_state); break; + case 0xd6: ldb_di(m68_state); break; + case 0xd7: stb_di(m68_state); break; + case 0xd8: eorb_di(m68_state); break; + case 0xd9: adcb_di(m68_state); break; + case 0xda: orb_di(m68_state); break; + case 0xdb: addb_di(m68_state); break; + case 0xdc: ldd_di(m68_state); break; + case 0xdd: std_di(m68_state); break; + case 0xde: ldu_di(m68_state); break; + case 0xdf: stu_di(m68_state); break; + case 0xe0: subb_ix(m68_state); break; + case 0xe1: cmpb_ix(m68_state); break; + case 0xe2: sbcb_ix(m68_state); break; + case 0xe3: addd_ix(m68_state); break; + case 0xe4: andb_ix(m68_state); break; + case 0xe5: bitb_ix(m68_state); break; + case 0xe6: ldb_ix(m68_state); break; + case 0xe7: stb_ix(m68_state); break; + case 0xe8: eorb_ix(m68_state); break; + case 0xe9: adcb_ix(m68_state); break; + case 0xea: orb_ix(m68_state); break; + case 0xeb: addb_ix(m68_state); break; + case 0xec: ldd_ix(m68_state); break; + case 0xed: std_ix(m68_state); break; + case 0xee: ldu_ix(m68_state); break; + case 0xef: stu_ix(m68_state); break; + case 0xf0: subb_ex(m68_state); break; + case 0xf1: cmpb_ex(m68_state); break; + case 0xf2: sbcb_ex(m68_state); break; + case 0xf3: addd_ex(m68_state); break; + case 0xf4: andb_ex(m68_state); break; + case 0xf5: bitb_ex(m68_state); break; + case 0xf6: ldb_ex(m68_state); break; + case 0xf7: stb_ex(m68_state); break; + case 0xf8: eorb_ex(m68_state); break; + case 0xf9: adcb_ex(m68_state); break; + case 0xfa: orb_ex(m68_state); break; + case 0xfb: addb_ex(m68_state); break; + case 0xfc: ldd_ex(m68_state); break; + case 0xfd: std_ex(m68_state); break; + case 0xfe: ldu_ex(m68_state); break; + case 0xff: stu_ex(m68_state); break; } #else - (*hd6309_main[hd6309.ireg])(); + (*hd6309_main[m68_state->ireg])(m68_state); #endif /* BIG_SWITCH */ - hd6309_ICount -= cycle_counts_page0[hd6309.ireg]; + m68_icount -= cycle_counts_page0[m68_state->ireg]; - } while( hd6309_ICount > 0 ); + } while( m68_icount > 0 ); - hd6309_ICount -= hd6309.extra_cycles; - hd6309.extra_cycles = 0; + m68_icount -= m68_state->extra_cycles; + m68_state->extra_cycles = 0; } - return cycles - hd6309_ICount; /* NS 970908 */ + return cycles - m68_icount; /* NS 970908 */ } -INLINE void fetch_effective_address( void ) +INLINE void fetch_effective_address( m68_state_t *m68_state ) { UINT8 postbyte = ROP_ARG(PCD); PC++; @@ -1082,7 +1096,7 @@ INLINE void fetch_effective_address( void ) case 0x90: EA=W; EAD=RM16(EAD); break; case 0x91: EA=X; X+=2; EAD=RM16(EAD); break; - case 0x92: IIError(); break; + case 0x92: IIError(m68_state); 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; @@ -1116,7 +1130,7 @@ INLINE void fetch_effective_address( void ) case 0xb0: IMMWORD(ea); EA+=W; EAD=RM16(EAD); break; case 0xb1: EA=Y; Y+=2; EAD=RM16(EAD); break; - case 0xb2: IIError(); break; + case 0xb2: IIError(m68_state); 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; @@ -1129,7 +1143,7 @@ INLINE void fetch_effective_address( void ) case 0xbc: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); break; case 0xbd: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); break; case 0xbe: EA=Y+W; EAD=RM16(EAD); break; - case 0xbf: IIError(); break; + case 0xbf: IIError(m68_state); break; case 0xc0: EA=U; U++; break; case 0xc1: EA=U; U+=2; break; @@ -1150,7 +1164,7 @@ INLINE void fetch_effective_address( void ) case 0xd0: EA=W; W+=2; EAD=RM16(EAD); break; case 0xd1: EA=U; U+=2; EAD=RM16(EAD); break; - case 0xd2: IIError(); break; + case 0xd2: IIError(m68_state); 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; @@ -1163,7 +1177,7 @@ INLINE void fetch_effective_address( void ) case 0xdc: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); break; case 0xdd: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); break; case 0xde: EA=U+W; EAD=RM16(EAD); break; - case 0xdf: IIError(); break; + case 0xdf: IIError(m68_state); break; case 0xe0: EA=S; S++; break; case 0xe1: EA=S; S+=2; break; @@ -1184,7 +1198,7 @@ INLINE void fetch_effective_address( void ) case 0xf0: W-=2; EA=W; EAD=RM16(EAD); break; case 0xf1: EA=S; S+=2; EAD=RM16(EAD); break; - case 0xf2: IIError(); break; + case 0xf2: IIError(m68_state); 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; @@ -1197,10 +1211,10 @@ INLINE void fetch_effective_address( void ) case 0xfc: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); break; case 0xfd: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); break; case 0xfe: EA=S+W; EAD=RM16(EAD); break; - case 0xff: IIError(); break; + case 0xff: IIError(m68_state); break; } - hd6309_ICount -= index_cycle[postbyte]; + m68_icount -= index_cycle[postbyte]; } @@ -1210,19 +1224,21 @@ INLINE void fetch_effective_address( void ) static CPU_SET_INFO( hd6309 ) { + m68_state_t *m68_state = device->token; + switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + HD6309_IRQ_LINE: set_irq_line(HD6309_IRQ_LINE, info->i); break; - case CPUINFO_INT_INPUT_STATE + HD6309_FIRQ_LINE:set_irq_line(HD6309_FIRQ_LINE, info->i); break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(INPUT_LINE_NMI, info->i); break; + case CPUINFO_INT_INPUT_STATE + HD6309_IRQ_LINE: set_irq_line(m68_state, HD6309_IRQ_LINE, info->i); break; + case CPUINFO_INT_INPUT_STATE + HD6309_FIRQ_LINE:set_irq_line(m68_state, HD6309_FIRQ_LINE, info->i); break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(m68_state, INPUT_LINE_NMI, info->i); break; case CPUINFO_INT_PC: case CPUINFO_INT_REGISTER + HD6309_PC: PC = info->i; CHANGE_PC; break; case CPUINFO_INT_SP: case CPUINFO_INT_REGISTER + HD6309_S: S = info->i; break; - case CPUINFO_INT_REGISTER + HD6309_CC: CC = info->i; CHECK_IRQ_LINES(); break; - case CPUINFO_INT_REGISTER + HD6309_MD: MD = info->i; UpdateState(); break; + case CPUINFO_INT_REGISTER + HD6309_CC: CC = info->i; CHECK_IRQ_LINES(m68_state); break; + case CPUINFO_INT_REGISTER + HD6309_MD: MD = info->i; UpdateState(m68_state); break; case CPUINFO_INT_REGISTER + HD6309_U: U = info->i; break; case CPUINFO_INT_REGISTER + HD6309_A: A = info->i; break; case CPUINFO_INT_REGISTER + HD6309_B: B = info->i; break; @@ -1243,10 +1259,12 @@ static CPU_SET_INFO( hd6309 ) CPU_GET_INFO( hd6309 ) { + m68_state_t *m68_state = device ? device->token : NULL; + switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(hd6309); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(m68_state_t); break; case CPUINFO_INT_INPUT_LINES: info->i = 2; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -1267,9 +1285,9 @@ CPU_GET_INFO( hd6309 ) case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; - case CPUINFO_INT_INPUT_STATE + HD6309_IRQ_LINE: info->i = hd6309.irq_state[HD6309_IRQ_LINE]; break; - case CPUINFO_INT_INPUT_STATE + HD6309_FIRQ_LINE:info->i = hd6309.irq_state[HD6309_FIRQ_LINE]; break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = hd6309.nmi_state; break; + case CPUINFO_INT_INPUT_STATE + HD6309_IRQ_LINE: info->i = m68_state->irq_state[HD6309_IRQ_LINE]; break; + case CPUINFO_INT_INPUT_STATE + HD6309_FIRQ_LINE:info->i = m68_state->irq_state[HD6309_FIRQ_LINE]; break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = m68_state->nmi_state; break; case CPUINFO_INT_PREVIOUSPC: info->i = PPC; break; @@ -1299,7 +1317,7 @@ CPU_GET_INFO( hd6309 ) case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(hd6309); break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(hd6309); break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &hd6309_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68_icount; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "HD6309"); break; @@ -1310,33 +1328,33 @@ CPU_GET_INFO( hd6309 ) case CPUINFO_STR_FLAGS: sprintf(info->s, "%c%c%c%c%c%c%c%c (MD:%c%c%c%c)", - hd6309.cc & 0x80 ? 'E':'.', - hd6309.cc & 0x40 ? 'F':'.', - hd6309.cc & 0x20 ? 'H':'.', - hd6309.cc & 0x10 ? 'I':'.', - hd6309.cc & 0x08 ? 'N':'.', - hd6309.cc & 0x04 ? 'Z':'.', - hd6309.cc & 0x02 ? 'V':'.', - hd6309.cc & 0x01 ? 'C':'.', + m68_state->cc & 0x80 ? 'E':'.', + m68_state->cc & 0x40 ? 'F':'.', + m68_state->cc & 0x20 ? 'H':'.', + m68_state->cc & 0x10 ? 'I':'.', + m68_state->cc & 0x08 ? 'N':'.', + m68_state->cc & 0x04 ? 'Z':'.', + m68_state->cc & 0x02 ? 'V':'.', + m68_state->cc & 0x01 ? 'C':'.', - hd6309.md & 0x80 ? 'E':'e', - hd6309.md & 0x40 ? 'F':'f', - hd6309.md & 0x02 ? 'I':'i', - hd6309.md & 0x01 ? 'Z':'z'); + m68_state->md & 0x80 ? 'E':'e', + m68_state->md & 0x40 ? 'F':'f', + m68_state->md & 0x02 ? 'I':'i', + m68_state->md & 0x01 ? 'Z':'z'); break; - case CPUINFO_STR_REGISTER + HD6309_PC: sprintf(info->s, "PC:%04X", hd6309.pc.w.l); break; - case CPUINFO_STR_REGISTER + HD6309_S: sprintf(info->s, "S:%04X", hd6309.s.w.l); break; - case CPUINFO_STR_REGISTER + HD6309_CC: sprintf(info->s, "CC:%02X", hd6309.cc); break; - case CPUINFO_STR_REGISTER + HD6309_MD: sprintf(info->s, "MD:%02X", hd6309.md); break; - case CPUINFO_STR_REGISTER + HD6309_U: sprintf(info->s, "U:%04X", hd6309.u.w.l); break; - case CPUINFO_STR_REGISTER + HD6309_A: sprintf(info->s, "A:%02X", hd6309.d.b.h); break; - case CPUINFO_STR_REGISTER + HD6309_B: sprintf(info->s, "B:%02X", hd6309.d.b.l); break; - case CPUINFO_STR_REGISTER + HD6309_E: sprintf(info->s, "E:%02X", hd6309.w.b.h); break; - case CPUINFO_STR_REGISTER + HD6309_F: sprintf(info->s, "F:%02X", hd6309.w.b.l); break; - case CPUINFO_STR_REGISTER + HD6309_X: sprintf(info->s, "X:%04X", hd6309.x.w.l); break; - case CPUINFO_STR_REGISTER + HD6309_Y: sprintf(info->s, "Y:%04X", hd6309.y.w.l); break; - case CPUINFO_STR_REGISTER + HD6309_V: sprintf(info->s, "V:%04X", hd6309.v.w.l); break; - case CPUINFO_STR_REGISTER + HD6309_DP: sprintf(info->s, "DP:%02X", hd6309.dp.b.h); break; + case CPUINFO_STR_REGISTER + HD6309_PC: sprintf(info->s, "PC:%04X", m68_state->pc.w.l); break; + case CPUINFO_STR_REGISTER + HD6309_S: sprintf(info->s, "S:%04X", m68_state->s.w.l); break; + case CPUINFO_STR_REGISTER + HD6309_CC: sprintf(info->s, "CC:%02X", m68_state->cc); break; + case CPUINFO_STR_REGISTER + HD6309_MD: sprintf(info->s, "MD:%02X", m68_state->md); break; + case CPUINFO_STR_REGISTER + HD6309_U: sprintf(info->s, "U:%04X", m68_state->u.w.l); break; + case CPUINFO_STR_REGISTER + HD6309_A: sprintf(info->s, "A:%02X", m68_state->d.b.h); break; + case CPUINFO_STR_REGISTER + HD6309_B: sprintf(info->s, "B:%02X", m68_state->d.b.l); break; + case CPUINFO_STR_REGISTER + HD6309_E: sprintf(info->s, "E:%02X", m68_state->w.b.h); break; + case CPUINFO_STR_REGISTER + HD6309_F: sprintf(info->s, "F:%02X", m68_state->w.b.l); break; + case CPUINFO_STR_REGISTER + HD6309_X: sprintf(info->s, "X:%04X", m68_state->x.w.l); break; + case CPUINFO_STR_REGISTER + HD6309_Y: sprintf(info->s, "Y:%04X", m68_state->y.w.l); break; + case CPUINFO_STR_REGISTER + HD6309_V: sprintf(info->s, "V:%04X", m68_state->v.w.l); break; + case CPUINFO_STR_REGISTER + HD6309_DP: sprintf(info->s, "DP:%02X", m68_state->dp.b.h); break; } } diff --git a/src/emu/cpu/hd6309/hd6309.h b/src/emu/cpu/hd6309/hd6309.h index 30df269d95b..c1d8e0979f7 100644 --- a/src/emu/cpu/hd6309/hd6309.h +++ b/src/emu/cpu/hd6309/hd6309.h @@ -52,4 +52,6 @@ CPU_GET_INFO( hd6309 ); # define TRUE (!FALSE) #endif +CPU_DISASSEMBLE( hd6309 ); + #endif /* __HD6309_H__ */ diff --git a/src/emu/cpu/m6800/6800ops.c b/src/emu/cpu/m6800/6800ops.c index a974b550745..18e7de53b1d 100644 --- a/src/emu/cpu/m6800/6800ops.c +++ b/src/emu/cpu/m6800/6800ops.c @@ -13,16 +13,18 @@ HNZVC */ -//INLINE void illegal( void ) -static void illegal( void ) +#define OP_HANDLER(_name) INLINE void _name (m68_state_t *m68_state) + +//OP_HANDLER( illegal ) +OP_HANDLER( illegal ) { logerror("m6800: illegal opcode: address %04X, op %02X\n",PC,(int) M_RDOP_ARG(PC)&0xFF); } /* HD63701 only */ #if (HAS_HD63701) -//INLINE void trap( void ) -static void trap( void ) +//OP_HANDLER( trap ) +OP_HANDLER( trap ) { logerror("m6800: illegal opcode: address %04X, op %02X\n",PC,(int) M_RDOP_ARG(PC)&0xFF); TAKE_TRAP; @@ -32,7 +34,7 @@ static void trap( void ) /* $00 ILLEGAL */ /* $01 NOP */ -INLINE void nop( void ) +OP_HANDLER( nop ) { } @@ -41,7 +43,7 @@ INLINE void nop( void ) /* $03 ILLEGAL */ /* $04 LSRD inherent -0*-* */ -INLINE void lsrd (void) +OP_HANDLER( lsrd ) { UINT16 t; CLR_NZC; t = D; CC|=(t&0x0001); @@ -49,7 +51,7 @@ INLINE void lsrd (void) } /* $05 ASLD inherent ?**** */ -INLINE void asld (void) +OP_HANDLER( asld ) { int r; UINT16 t; @@ -59,75 +61,75 @@ INLINE void asld (void) } /* $06 TAP inherent ##### */ -INLINE void tap (void) +OP_HANDLER( tap ) { CC=A; ONE_MORE_INSN(); - CHECK_IRQ_LINES(); /* HJB 990417 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990417 */ } /* $07 TPA inherent ----- */ -INLINE void tpa (void) +OP_HANDLER( tpa ) { A=CC; } /* $08 INX inherent --*-- */ -INLINE void inx (void) +OP_HANDLER( inx ) { ++X; CLR_Z; SET_Z16(X); } /* $09 DEX inherent --*-- */ -INLINE void dex (void) +OP_HANDLER( dex ) { --X; CLR_Z; SET_Z16(X); } /* $0a CLV */ -INLINE void clv (void) +OP_HANDLER( clv ) { CLV; } /* $0b SEV */ -INLINE void sev (void) +OP_HANDLER( sev ) { SEV; } /* $0c CLC */ -INLINE void clc (void) +OP_HANDLER( clc ) { CLC; } /* $0d SEC */ -INLINE void sec (void) +OP_HANDLER( sec ) { SEC; } /* $0e CLI */ -INLINE void cli (void) +OP_HANDLER( cli ) { CLI; ONE_MORE_INSN(); - CHECK_IRQ_LINES(); /* HJB 990417 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990417 */ } /* $0f SEI */ -INLINE void sei (void) +OP_HANDLER( sei ) { SEI; ONE_MORE_INSN(); - CHECK_IRQ_LINES(); /* HJB 990417 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990417 */ } /* $10 SBA inherent -**** */ -INLINE void sba (void) +OP_HANDLER( sba ) { UINT16 t; t=A-B; @@ -136,7 +138,7 @@ INLINE void sba (void) } /* $11 CBA inherent -**** */ -INLINE void cba (void) +OP_HANDLER( cba ) { UINT16 t; t=A-B; @@ -144,13 +146,13 @@ INLINE void cba (void) } /* $12 ILLEGAL */ -INLINE void undoc1 (void) +OP_HANDLER( undoc1 ) { X += RM( S + 1 ); } /* $13 ILLEGAL */ -INLINE void undoc2 (void) +OP_HANDLER( undoc2 ) { X += RM( S + 1 ); } @@ -161,21 +163,21 @@ INLINE void undoc2 (void) /* $15 ILLEGAL */ /* $16 TAB inherent -**0- */ -INLINE void tab (void) +OP_HANDLER( tab ) { B=A; CLR_NZV; SET_NZ8(B); } /* $17 TBA inherent -**0- */ -INLINE void tba (void) +OP_HANDLER( tba ) { A=B; CLR_NZV; SET_NZ8(A); } /* $18 XGDX inherent ----- */ /* HD63701YO only */ -INLINE void xgdx( void ) +OP_HANDLER( xgdx ) { UINT16 t = X; X = D; @@ -183,7 +185,7 @@ INLINE void xgdx( void ) } /* $19 DAA inherent (A) -**0* */ -INLINE void daa( void ) +OP_HANDLER( daa ) { UINT8 msn, lsn; UINT16 t, cf = 0; @@ -201,16 +203,16 @@ INLINE void daa( void ) #if (HAS_HD63701) /* $1a SLP */ /* HD63701YO only */ -INLINE void slp (void) +OP_HANDLER( slp ) { /* wait for next IRQ (same as waiting of wai) */ - m68xx.wai_state |= HD63701_SLP; + m68_state->wai_state |= M6800_SLP; EAT_CYCLES; } #endif /* $1b ABA inherent ***** */ -INLINE void aba (void) +OP_HANDLER( aba ) { UINT16 t; t=A+B; @@ -227,188 +229,190 @@ INLINE void aba (void) /* $1f ILLEGAL */ /* $20 BRA relative ----- */ -INLINE void bra( void ) +OP_HANDLER( bra ) { UINT8 t; - IMMBYTE(t);PC+=SIGNED(t);CHANGE_PC(); + IMMBYTE(t); + PC+=SIGNED(t); + CHANGE_PC(); /* speed up busy loops */ if (t==0xfe) EAT_CYCLES; } /* $21 BRN relative ----- */ -INLINE void brn( void ) +OP_HANDLER( brn ) { UINT8 t; IMMBYTE(t); } /* $22 BHI relative ----- */ -INLINE void bhi( void ) +OP_HANDLER( bhi ) { UINT8 t; BRANCH(!(CC&0x05)); } /* $23 BLS relative ----- */ -INLINE void bls( void ) +OP_HANDLER( bls ) { UINT8 t; BRANCH(CC&0x05); } /* $24 BCC relative ----- */ -INLINE void bcc( void ) +OP_HANDLER( bcc ) { UINT8 t; BRANCH(!(CC&0x01)); } /* $25 BCS relative ----- */ -INLINE void bcs( void ) +OP_HANDLER( bcs ) { UINT8 t; BRANCH(CC&0x01); } /* $26 BNE relative ----- */ -INLINE void bne( void ) +OP_HANDLER( bne ) { UINT8 t; BRANCH(!(CC&0x04)); } /* $27 BEQ relative ----- */ -INLINE void beq( void ) +OP_HANDLER( beq ) { UINT8 t; BRANCH(CC&0x04); } /* $28 BVC relative ----- */ -INLINE void bvc( void ) +OP_HANDLER( bvc ) { UINT8 t; BRANCH(!(CC&0x02)); } /* $29 BVS relative ----- */ -INLINE void bvs( void ) +OP_HANDLER( bvs ) { UINT8 t; BRANCH(CC&0x02); } /* $2a BPL relative ----- */ -INLINE void bpl( void ) +OP_HANDLER( bpl ) { UINT8 t; BRANCH(!(CC&0x08)); } /* $2b BMI relative ----- */ -INLINE void bmi( void ) +OP_HANDLER( bmi ) { UINT8 t; BRANCH(CC&0x08); } /* $2c BGE relative ----- */ -INLINE void bge( void ) +OP_HANDLER( bge ) { UINT8 t; BRANCH(!NXORV); } /* $2d BLT relative ----- */ -INLINE void blt( void ) +OP_HANDLER( blt ) { UINT8 t; BRANCH(NXORV); } /* $2e BGT relative ----- */ -INLINE void bgt( void ) +OP_HANDLER( bgt ) { UINT8 t; BRANCH(!(NXORV||CC&0x04)); } /* $2f BLE relative ----- */ -INLINE void ble( void ) +OP_HANDLER( ble ) { UINT8 t; BRANCH(NXORV||CC&0x04); } /* $30 TSX inherent ----- */ -INLINE void tsx (void) +OP_HANDLER( tsx ) { X = ( S + 1 ); } /* $31 INS inherent ----- */ -INLINE void ins (void) +OP_HANDLER( ins ) { ++S; } /* $32 PULA inherent ----- */ -INLINE void pula (void) +OP_HANDLER( pula ) { - PULLBYTE(m68xx.d.b.h); + PULLBYTE(m68_state->d.b.h); } /* $33 PULB inherent ----- */ -INLINE void pulb (void) +OP_HANDLER( pulb ) { - PULLBYTE(m68xx.d.b.l); + PULLBYTE(m68_state->d.b.l); } /* $34 DES inherent ----- */ -INLINE void des (void) +OP_HANDLER( des ) { --S; } /* $35 TXS inherent ----- */ -INLINE void txs (void) +OP_HANDLER( txs ) { S = ( X - 1 ); } /* $36 PSHA inherent ----- */ -INLINE void psha (void) +OP_HANDLER( psha ) { - PUSHBYTE(m68xx.d.b.h); + PUSHBYTE(m68_state->d.b.h); } /* $37 PSHB inherent ----- */ -INLINE void pshb (void) +OP_HANDLER( pshb ) { - PUSHBYTE(m68xx.d.b.l); + PUSHBYTE(m68_state->d.b.l); } /* $38 PULX inherent ----- */ -INLINE void pulx (void) +OP_HANDLER( pulx ) { PULLWORD(pX); } /* $39 RTS inherent ----- */ -INLINE void rts( void ) +OP_HANDLER( rts ) { PULLWORD(pPC); CHANGE_PC(); } /* $3a ABX inherent ----- */ -INLINE void abx( void ) +OP_HANDLER( abx ) { X += B; } /* $3b RTI inherent ##### */ -INLINE void rti( void ) +OP_HANDLER( rti ) { PULLBYTE(CC); PULLBYTE(B); @@ -416,43 +420,44 @@ INLINE void rti( void ) PULLWORD(pX); PULLWORD(pPC); CHANGE_PC(); - CHECK_IRQ_LINES(); /* HJB 990417 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990417 */ } /* $3c PSHX inherent ----- */ -INLINE void pshx (void) +OP_HANDLER( pshx ) { PUSHWORD(pX); } /* $3d MUL inherent --*-@ */ -INLINE void mul( void ) +OP_HANDLER( mul ) { UINT16 t; t=A*B; - CLR_C; if(t&0x80) SEC; + CLR_C; + if(t&0x80) SEC; D=t; } /* $3e WAI inherent ----- */ -INLINE void wai( void ) +OP_HANDLER( wai ) { /* * WAI stacks the entire machine state on the * hardware stack, then waits for an interrupt. */ - m68xx.wai_state |= M6800_WAI; + m68_state->wai_state |= M6800_WAI; PUSHWORD(pPC); PUSHWORD(pX); PUSHBYTE(A); PUSHBYTE(B); PUSHBYTE(CC); - CHECK_IRQ_LINES(); - if (m68xx.wai_state & M6800_WAI) EAT_CYCLES; + CHECK_IRQ_LINES(m68_state); + if (m68_state->wai_state & M6800_WAI) EAT_CYCLES; } /* $3f SWI absolute indirect ----- */ -INLINE void swi( void ) +OP_HANDLER( swi ) { PUSHWORD(pPC); PUSHWORD(pX); @@ -465,7 +470,7 @@ INLINE void swi( void ) } /* $40 NEGA inherent ?**** */ -INLINE void nega( void ) +OP_HANDLER( nega ) { UINT16 r; r=-A; @@ -478,14 +483,14 @@ INLINE void nega( void ) /* $42 ILLEGAL */ /* $43 COMA inherent -**01 */ -INLINE void coma( void ) +OP_HANDLER( coma ) { A = ~A; CLR_NZV; SET_NZ8(A); SEC; } /* $44 LSRA inherent -0*-* */ -INLINE void lsra( void ) +OP_HANDLER( lsra ) { CLR_NZC; CC|=(A&0x01); A>>=1; SET_Z8(A); @@ -494,7 +499,7 @@ INLINE void lsra( void ) /* $45 ILLEGAL */ /* $46 RORA inherent -**-* */ -INLINE void rora( void ) +OP_HANDLER( rora ) { UINT8 r; r=(CC&0x01)<<7; @@ -504,7 +509,7 @@ INLINE void rora( void ) } /* $47 ASRA inherent ?**-* */ -INLINE void asra( void ) +OP_HANDLER( asra ) { CLR_NZC; CC|=(A&0x01); A>>=1; A|=((A&0x40)<<1); @@ -512,7 +517,7 @@ INLINE void asra( void ) } /* $48 ASLA inherent ?**** */ -INLINE void asla( void ) +OP_HANDLER( asla ) { UINT16 r; r=A<<1; @@ -521,7 +526,7 @@ INLINE void asla( void ) } /* $49 ROLA inherent -**** */ -INLINE void rola( void ) +OP_HANDLER( rola ) { UINT16 t,r; t = A; r = CC&0x01; r |= t<<1; @@ -530,7 +535,7 @@ INLINE void rola( void ) } /* $4a DECA inherent -***- */ -INLINE void deca( void ) +OP_HANDLER( deca ) { --A; CLR_NZV; SET_FLAGS8D(A); @@ -539,14 +544,14 @@ INLINE void deca( void ) /* $4b ILLEGAL */ /* $4c INCA inherent -***- */ -INLINE void inca( void ) +OP_HANDLER( inca ) { ++A; CLR_NZV; SET_FLAGS8I(A); } /* $4d TSTA inherent -**0- */ -INLINE void tsta( void ) +OP_HANDLER( tsta ) { CLR_NZVC; SET_NZ8(A); } @@ -554,14 +559,14 @@ INLINE void tsta( void ) /* $4e ILLEGAL */ /* $4f CLRA inherent -0100 */ -INLINE void clra( void ) +OP_HANDLER( clra ) { A=0; CLR_NZVC; SEZ; } /* $50 NEGB inherent ?**** */ -INLINE void negb( void ) +OP_HANDLER( negb ) { UINT16 r; r=-B; @@ -574,14 +579,14 @@ INLINE void negb( void ) /* $52 ILLEGAL */ /* $53 COMB inherent -**01 */ -INLINE void comb( void ) +OP_HANDLER( comb ) { B = ~B; CLR_NZV; SET_NZ8(B); SEC; } /* $54 LSRB inherent -0*-* */ -INLINE void lsrb( void ) +OP_HANDLER( lsrb ) { CLR_NZC; CC|=(B&0x01); B>>=1; SET_Z8(B); @@ -590,7 +595,7 @@ INLINE void lsrb( void ) /* $55 ILLEGAL */ /* $56 RORB inherent -**-* */ -INLINE void rorb( void ) +OP_HANDLER( rorb ) { UINT8 r; r=(CC&0x01)<<7; @@ -600,7 +605,7 @@ INLINE void rorb( void ) } /* $57 ASRB inherent ?**-* */ -INLINE void asrb( void ) +OP_HANDLER( asrb ) { CLR_NZC; CC|=(B&0x01); B>>=1; B|=((B&0x40)<<1); @@ -608,7 +613,7 @@ INLINE void asrb( void ) } /* $58 ASLB inherent ?**** */ -INLINE void aslb( void ) +OP_HANDLER( aslb ) { UINT16 r; r=B<<1; @@ -617,7 +622,7 @@ INLINE void aslb( void ) } /* $59 ROLB inherent -**** */ -INLINE void rolb( void ) +OP_HANDLER( rolb ) { UINT16 t,r; t = B; r = CC&0x01; r |= t<<1; @@ -626,7 +631,7 @@ INLINE void rolb( void ) } /* $5a DECB inherent -***- */ -INLINE void decb( void ) +OP_HANDLER( decb ) { --B; CLR_NZV; SET_FLAGS8D(B); @@ -635,14 +640,14 @@ INLINE void decb( void ) /* $5b ILLEGAL */ /* $5c INCB inherent -***- */ -INLINE void incb( void ) +OP_HANDLER( incb ) { ++B; CLR_NZV; SET_FLAGS8I(B); } /* $5d TSTB inherent -**0- */ -INLINE void tstb( void ) +OP_HANDLER( tstb ) { CLR_NZVC; SET_NZ8(B); } @@ -650,14 +655,14 @@ INLINE void tstb( void ) /* $5e ILLEGAL */ /* $5f CLRB inherent -0100 */ -INLINE void clrb( void ) +OP_HANDLER( clrb ) { B=0; CLR_NZVC; SEZ; } /* $60 NEG indexed ?**** */ -INLINE void neg_ix( void ) +OP_HANDLER( neg_ix ) { UINT16 r,t; IDXBYTE(t); r=-t; @@ -666,7 +671,7 @@ INLINE void neg_ix( void ) } /* $61 AIM --**0- */ /* HD63701YO only */ -INLINE void aim_ix( void ) +OP_HANDLER( aim_ix ) { UINT8 t, r; IMMBYTE(t); @@ -677,7 +682,7 @@ INLINE void aim_ix( void ) } /* $62 OIM --**0- */ /* HD63701YO only */ -INLINE void oim_ix( void ) +OP_HANDLER( oim_ix ) { UINT8 t, r; IMMBYTE(t); @@ -688,7 +693,7 @@ INLINE void oim_ix( void ) } /* $63 COM indexed -**01 */ -INLINE void com_ix( void ) +OP_HANDLER( com_ix ) { UINT8 t; IDXBYTE(t); t = ~t; @@ -697,7 +702,7 @@ INLINE void com_ix( void ) } /* $64 LSR indexed -0*-* */ -INLINE void lsr_ix( void ) +OP_HANDLER( lsr_ix ) { UINT8 t; IDXBYTE(t); CLR_NZC; CC|=(t&0x01); @@ -706,7 +711,7 @@ INLINE void lsr_ix( void ) } /* $65 EIM --**0- */ /* HD63701YO only */ -INLINE void eim_ix( void ) +OP_HANDLER( eim_ix ) { UINT8 t, r; IMMBYTE(t); @@ -717,7 +722,7 @@ INLINE void eim_ix( void ) } /* $66 ROR indexed -**-* */ -INLINE void ror_ix( void ) +OP_HANDLER( ror_ix ) { UINT8 t,r; IDXBYTE(t); r=(CC&0x01)<<7; @@ -727,7 +732,7 @@ INLINE void ror_ix( void ) } /* $67 ASR indexed ?**-* */ -INLINE void asr_ix( void ) +OP_HANDLER( asr_ix ) { UINT8 t; IDXBYTE(t); CLR_NZC; CC|=(t&0x01); @@ -737,7 +742,7 @@ INLINE void asr_ix( void ) } /* $68 ASL indexed ?**** */ -INLINE void asl_ix( void ) +OP_HANDLER( asl_ix ) { UINT16 t,r; IDXBYTE(t); r=t<<1; @@ -746,7 +751,7 @@ INLINE void asl_ix( void ) } /* $69 ROL indexed -**** */ -INLINE void rol_ix( void ) +OP_HANDLER( rol_ix ) { UINT16 t,r; IDXBYTE(t); r = CC&0x01; r |= t<<1; @@ -755,7 +760,7 @@ INLINE void rol_ix( void ) } /* $6a DEC indexed -***- */ -INLINE void dec_ix( void ) +OP_HANDLER( dec_ix ) { UINT8 t; IDXBYTE(t); --t; @@ -764,7 +769,7 @@ INLINE void dec_ix( void ) } /* $6b TIM --**0- */ /* HD63701YO only */ -INLINE void tim_ix( void ) +OP_HANDLER( tim_ix ) { UINT8 t, r; IMMBYTE(t); @@ -774,7 +779,7 @@ INLINE void tim_ix( void ) } /* $6c INC indexed -***- */ -INLINE void inc_ix( void ) +OP_HANDLER( inc_ix ) { UINT8 t; IDXBYTE(t); ++t; @@ -783,27 +788,27 @@ INLINE void inc_ix( void ) } /* $6d TST indexed -**0- */ -INLINE void tst_ix( void ) +OP_HANDLER( tst_ix ) { UINT8 t; IDXBYTE(t); CLR_NZVC; SET_NZ8(t); } /* $6e JMP indexed ----- */ -INLINE void jmp_ix( void ) +OP_HANDLER( jmp_ix ) { INDEXED; PC=EA; CHANGE_PC(); } /* $6f CLR indexed -0100 */ -INLINE void clr_ix( void ) +OP_HANDLER( clr_ix ) { INDEXED; WM(EAD,0); CLR_NZVC; SEZ; } /* $70 NEG extended ?**** */ -INLINE void neg_ex( void ) +OP_HANDLER( neg_ex ) { UINT16 r,t; EXTBYTE(t); r=-t; @@ -812,7 +817,7 @@ INLINE void neg_ex( void ) } /* $71 AIM --**0- */ /* HD63701YO only */ -INLINE void aim_di( void ) +OP_HANDLER( aim_di ) { UINT8 t, r; IMMBYTE(t); @@ -823,7 +828,7 @@ INLINE void aim_di( void ) } /* $72 OIM --**0- */ /* HD63701YO only */ -INLINE void oim_di( void ) +OP_HANDLER( oim_di ) { UINT8 t, r; IMMBYTE(t); @@ -834,7 +839,7 @@ INLINE void oim_di( void ) } /* $73 COM extended -**01 */ -INLINE void com_ex( void ) +OP_HANDLER( com_ex ) { UINT8 t; EXTBYTE(t); t = ~t; @@ -843,7 +848,7 @@ INLINE void com_ex( void ) } /* $74 LSR extended -0*-* */ -INLINE void lsr_ex( void ) +OP_HANDLER( lsr_ex ) { UINT8 t; EXTBYTE(t); @@ -855,7 +860,7 @@ INLINE void lsr_ex( void ) } /* $75 EIM --**0- */ /* HD63701YO only */ -INLINE void eim_di( void ) +OP_HANDLER( eim_di ) { UINT8 t, r; IMMBYTE(t); @@ -866,7 +871,7 @@ INLINE void eim_di( void ) } /* $76 ROR extended -**-* */ -INLINE void ror_ex( void ) +OP_HANDLER( ror_ex ) { UINT8 t,r; EXTBYTE(t); r=(CC&0x01)<<7; @@ -876,7 +881,7 @@ INLINE void ror_ex( void ) } /* $77 ASR extended ?**-* */ -INLINE void asr_ex( void ) +OP_HANDLER( asr_ex ) { UINT8 t; EXTBYTE(t); CLR_NZC; CC|=(t&0x01); @@ -886,7 +891,7 @@ INLINE void asr_ex( void ) } /* $78 ASL extended ?**** */ -INLINE void asl_ex( void ) +OP_HANDLER( asl_ex ) { UINT16 t,r; EXTBYTE(t); r=t<<1; @@ -895,7 +900,7 @@ INLINE void asl_ex( void ) } /* $79 ROL extended -**** */ -INLINE void rol_ex( void ) +OP_HANDLER( rol_ex ) { UINT16 t,r; EXTBYTE(t); r = CC&0x01; r |= t<<1; @@ -904,7 +909,7 @@ INLINE void rol_ex( void ) } /* $7a DEC extended -***- */ -INLINE void dec_ex( void ) +OP_HANDLER( dec_ex ) { UINT8 t; EXTBYTE(t); --t; @@ -913,7 +918,7 @@ INLINE void dec_ex( void ) } /* $7b TIM --**0- */ /* HD63701YO only */ -INLINE void tim_di( void ) +OP_HANDLER( tim_di ) { UINT8 t, r; IMMBYTE(t); @@ -923,7 +928,7 @@ INLINE void tim_di( void ) } /* $7c INC extended -***- */ -INLINE void inc_ex( void ) +OP_HANDLER( inc_ex ) { UINT8 t; EXTBYTE(t); ++t; @@ -932,27 +937,27 @@ INLINE void inc_ex( void ) } /* $7d TST extended -**0- */ -INLINE void tst_ex( void ) +OP_HANDLER( tst_ex ) { UINT8 t; EXTBYTE(t); CLR_NZVC; SET_NZ8(t); } /* $7e JMP extended ----- */ -INLINE void jmp_ex( void ) +OP_HANDLER( jmp_ex ) { EXTENDED; PC=EA; CHANGE_PC(); /* TS 971002 */ } /* $7f CLR extended -0100 */ -INLINE void clr_ex( void ) +OP_HANDLER( clr_ex ) { EXTENDED; WM(EAD,0); CLR_NZVC; SEZ; } /* $80 SUBA immediate ?**** */ -INLINE void suba_im( void ) +OP_HANDLER( suba_im ) { UINT16 t,r; IMMBYTE(t); r = A-t; @@ -961,7 +966,7 @@ INLINE void suba_im( void ) } /* $81 CMPA immediate ?**** */ -INLINE void cmpa_im( void ) +OP_HANDLER( cmpa_im ) { UINT16 t,r; IMMBYTE(t); r = A-t; @@ -969,7 +974,7 @@ INLINE void cmpa_im( void ) } /* $82 SBCA immediate ?**** */ -INLINE void sbca_im( void ) +OP_HANDLER( sbca_im ) { UINT16 t,r; IMMBYTE(t); r = A-t-(CC&0x01); @@ -978,7 +983,7 @@ INLINE void sbca_im( void ) } /* $83 SUBD immediate -**** */ -INLINE void subd_im( void ) +OP_HANDLER( subd_im ) { UINT32 r,d; PAIR b; @@ -991,7 +996,7 @@ INLINE void subd_im( void ) } /* $84 ANDA immediate -**0- */ -INLINE void anda_im( void ) +OP_HANDLER( anda_im ) { UINT8 t; IMMBYTE(t); A &= t; @@ -999,7 +1004,7 @@ INLINE void anda_im( void ) } /* $85 BITA immediate -**0- */ -INLINE void bita_im( void ) +OP_HANDLER( bita_im ) { UINT8 t,r; IMMBYTE(t); r = A&t; @@ -1007,7 +1012,7 @@ INLINE void bita_im( void ) } /* $86 LDA immediate -**0- */ -INLINE void lda_im( void ) +OP_HANDLER( lda_im ) { IMMBYTE(A); CLR_NZV; SET_NZ8(A); @@ -1015,14 +1020,14 @@ INLINE void lda_im( void ) /* is this a legal instruction? */ /* $87 STA immediate -**0- */ -INLINE void sta_im( void ) +OP_HANDLER( sta_im ) { CLR_NZV; SET_NZ8(A); IMM8; WM(EAD,A); } /* $88 EORA immediate -**0- */ -INLINE void eora_im( void ) +OP_HANDLER( eora_im ) { UINT8 t; IMMBYTE(t); A ^= t; @@ -1030,7 +1035,7 @@ INLINE void eora_im( void ) } /* $89 ADCA immediate ***** */ -INLINE void adca_im( void ) +OP_HANDLER( adca_im ) { UINT16 t,r; IMMBYTE(t); r = A+t+(CC&0x01); @@ -1039,7 +1044,7 @@ INLINE void adca_im( void ) } /* $8a ORA immediate -**0- */ -INLINE void ora_im( void ) +OP_HANDLER( ora_im ) { UINT8 t; IMMBYTE(t); A |= t; @@ -1047,7 +1052,7 @@ INLINE void ora_im( void ) } /* $8b ADDA immediate ***** */ -INLINE void adda_im( void ) +OP_HANDLER( adda_im ) { UINT16 t,r; IMMBYTE(t); r = A+t; @@ -1056,7 +1061,7 @@ INLINE void adda_im( void ) } /* $8c CMPX immediate -***- */ -INLINE void cmpx_im( void ) +OP_HANDLER( cmpx_im ) { UINT32 r,d; PAIR b; @@ -1068,7 +1073,7 @@ INLINE void cmpx_im( void ) } /* $8c CPX immediate -**** (6803) */ -INLINE void cpx_im( void ) +OP_HANDLER( cpx_im ) { UINT32 r,d; PAIR b; @@ -1080,7 +1085,7 @@ INLINE void cpx_im( void ) /* $8d BSR ----- */ -INLINE void bsr( void ) +OP_HANDLER( bsr ) { UINT8 t; IMMBYTE(t); @@ -1090,24 +1095,24 @@ INLINE void bsr( void ) } /* $8e LDS immediate -**0- */ -INLINE void lds_im( void ) +OP_HANDLER( lds_im ) { - IMMWORD(m68xx.s); + IMMWORD(m68_state->s); CLR_NZV; SET_NZ16(S); } /* $8f STS immediate -**0- */ -INLINE void sts_im( void ) +OP_HANDLER( sts_im ) { CLR_NZV; SET_NZ16(S); IMM16; - WM16(EAD,&m68xx.s); + WM16(EAD,&m68_state->s); } /* $90 SUBA direct ?**** */ -INLINE void suba_di( void ) +OP_HANDLER( suba_di ) { UINT16 t,r; DIRBYTE(t); r = A-t; @@ -1116,7 +1121,7 @@ INLINE void suba_di( void ) } /* $91 CMPA direct ?**** */ -INLINE void cmpa_di( void ) +OP_HANDLER( cmpa_di ) { UINT16 t,r; DIRBYTE(t); r = A-t; @@ -1124,7 +1129,7 @@ INLINE void cmpa_di( void ) } /* $92 SBCA direct ?**** */ -INLINE void sbca_di( void ) +OP_HANDLER( sbca_di ) { UINT16 t,r; DIRBYTE(t); r = A-t-(CC&0x01); @@ -1133,7 +1138,7 @@ INLINE void sbca_di( void ) } /* $93 SUBD direct -**** */ -INLINE void subd_di( void ) +OP_HANDLER( subd_di ) { UINT32 r,d; PAIR b; @@ -1146,7 +1151,7 @@ INLINE void subd_di( void ) } /* $94 ANDA direct -**0- */ -INLINE void anda_di( void ) +OP_HANDLER( anda_di ) { UINT8 t; DIRBYTE(t); A &= t; @@ -1154,7 +1159,7 @@ INLINE void anda_di( void ) } /* $95 BITA direct -**0- */ -INLINE void bita_di( void ) +OP_HANDLER( bita_di ) { UINT8 t,r; DIRBYTE(t); r = A&t; @@ -1162,55 +1167,68 @@ INLINE void bita_di( void ) } /* $96 LDA direct -**0- */ -INLINE void lda_di( void ) +OP_HANDLER( lda_di ) { DIRBYTE(A); - CLR_NZV; SET_NZ8(A); + CLR_NZV; + SET_NZ8(A); } /* $97 STA direct -**0- */ -INLINE void sta_di( void ) +OP_HANDLER( sta_di ) { - CLR_NZV; SET_NZ8(A); - DIRECT; WM(EAD,A); + CLR_NZV; + SET_NZ8(A); + DIRECT; + WM(EAD,A); } /* $98 EORA direct -**0- */ -INLINE void eora_di( void ) +OP_HANDLER( eora_di ) { UINT8 t; - DIRBYTE(t); A ^= t; - CLR_NZV; SET_NZ8(A); + DIRBYTE(t); + A ^= t; + CLR_NZV; + SET_NZ8(A); } /* $99 ADCA direct ***** */ -INLINE void adca_di( void ) +OP_HANDLER( adca_di ) { UINT16 t,r; - DIRBYTE(t); r = A+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r); + DIRBYTE(t); + r = A+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(A,t,r); + SET_H(A,t,r); A = r; } /* $9a ORA direct -**0- */ -INLINE void ora_di( void ) +OP_HANDLER( ora_di ) { UINT8 t; - DIRBYTE(t); A |= t; - CLR_NZV; SET_NZ8(A); + DIRBYTE(t); + A |= t; + CLR_NZV; + SET_NZ8(A); } /* $9b ADDA direct ***** */ -INLINE void adda_di( void ) +OP_HANDLER( adda_di ) { UINT16 t,r; - DIRBYTE(t); r = A+t; - CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r); + DIRBYTE(t); + r = A + t; + CLR_HNZVC; + SET_FLAGS8(A,t,r); + SET_H(A,t,r); A = r; } /* $9c CMPX direct -***- */ -INLINE void cmpx_di( void ) +OP_HANDLER( cmpx_di ) { UINT32 r,d; PAIR b; @@ -1218,74 +1236,82 @@ INLINE void cmpx_di( void ) d = X; r = d - b.d; CLR_NZV; - SET_NZ16(r); SET_V16(d,b.d,r); + SET_NZ16(r); + SET_V16(d,b.d,r); } /* $9c CPX direct -**** (6803) */ -INLINE void cpx_di( void ) +OP_HANDLER( cpx_di ) { UINT32 r,d; PAIR b; DIRWORD(b); d = X; r = d - b.d; - CLR_NZVC; SET_FLAGS16(d,b.d,r); + CLR_NZVC; + SET_FLAGS16(d,b.d,r); } /* $9d JSR direct ----- */ -INLINE void jsr_di( void ) +OP_HANDLER( jsr_di ) { DIRECT; PUSHWORD(pPC); - PC = EA; + PC = EA; CHANGE_PC(); } /* $9e LDS direct -**0- */ -INLINE void lds_di( void ) +OP_HANDLER( lds_di ) { - DIRWORD(m68xx.s); + DIRWORD(m68_state->s); CLR_NZV; SET_NZ16(S); } /* $9f STS direct -**0- */ -INLINE void sts_di( void ) +OP_HANDLER( sts_di ) { CLR_NZV; SET_NZ16(S); DIRECT; - WM16(EAD,&m68xx.s); + WM16(EAD,&m68_state->s); } /* $a0 SUBA indexed ?**** */ -INLINE void suba_ix( void ) +OP_HANDLER( suba_ix ) { UINT16 t,r; - IDXBYTE(t); r = A-t; - CLR_NZVC; SET_FLAGS8(A,t,r); + IDXBYTE(t); + r = A - t; + CLR_NZVC; + SET_FLAGS8(A,t,r); A = r; } /* $a1 CMPA indexed ?**** */ -INLINE void cmpa_ix( void ) +OP_HANDLER( cmpa_ix ) { UINT16 t,r; - IDXBYTE(t); r = A-t; - CLR_NZVC; SET_FLAGS8(A,t,r); + IDXBYTE(t); + r = A - t; + CLR_NZVC; + SET_FLAGS8(A,t,r); } /* $a2 SBCA indexed ?**** */ -INLINE void sbca_ix( void ) +OP_HANDLER( sbca_ix ) { UINT16 t,r; - IDXBYTE(t); r = A-t-(CC&0x01); - CLR_NZVC; SET_FLAGS8(A,t,r); + IDXBYTE(t); + r = A - t - (CC&0x01); + CLR_NZVC; + SET_FLAGS8(A,t,r); A = r; } /* $a3 SUBD indexed -**** */ -INLINE void subd_ix( void ) +OP_HANDLER( subd_ix ) { UINT32 r,d; PAIR b; @@ -1298,71 +1324,86 @@ INLINE void subd_ix( void ) } /* $a4 ANDA indexed -**0- */ -INLINE void anda_ix( void ) +OP_HANDLER( anda_ix ) { UINT8 t; IDXBYTE(t); A &= t; - CLR_NZV; SET_NZ8(A); + CLR_NZV; + SET_NZ8(A); } /* $a5 BITA indexed -**0- */ -INLINE void bita_ix( void ) +OP_HANDLER( bita_ix ) { UINT8 t,r; IDXBYTE(t); r = A&t; - CLR_NZV; SET_NZ8(r); + CLR_NZV; + SET_NZ8(r); } /* $a6 LDA indexed -**0- */ -INLINE void lda_ix( void ) +OP_HANDLER( lda_ix ) { IDXBYTE(A); - CLR_NZV; SET_NZ8(A); + CLR_NZV; + SET_NZ8(A); } /* $a7 STA indexed -**0- */ -INLINE void sta_ix( void ) +OP_HANDLER( sta_ix ) { - CLR_NZV; SET_NZ8(A); - INDEXED; WM(EAD,A); + CLR_NZV; + SET_NZ8(A); + INDEXED; + WM(EAD,A); } /* $a8 EORA indexed -**0- */ -INLINE void eora_ix( void ) +OP_HANDLER( eora_ix ) { UINT8 t; - IDXBYTE(t); A ^= t; - CLR_NZV; SET_NZ8(A); + IDXBYTE(t); + A ^= t; + CLR_NZV; + SET_NZ8(A); } /* $a9 ADCA indexed ***** */ -INLINE void adca_ix( void ) +OP_HANDLER( adca_ix ) { UINT16 t,r; - IDXBYTE(t); r = A+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r); + IDXBYTE(t); + r = A + t + (CC&0x01); + CLR_HNZVC; + SET_FLAGS8(A,t,r); + SET_H(A,t,r); A = r; } /* $aa ORA indexed -**0- */ -INLINE void ora_ix( void ) +OP_HANDLER( ora_ix ) { UINT8 t; - IDXBYTE(t); A |= t; - CLR_NZV; SET_NZ8(A); + IDXBYTE(t); + A |= t; + CLR_NZV; + SET_NZ8(A); } /* $ab ADDA indexed ***** */ -INLINE void adda_ix( void ) +OP_HANDLER( adda_ix ) { UINT16 t,r; - IDXBYTE(t); r = A+t; - CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r); + IDXBYTE(t); + r = A+t; + CLR_HNZVC; + SET_FLAGS8(A,t,r); + SET_H(A,t,r); A = r; } /* $ac CMPX indexed -***- */ -INLINE void cmpx_ix( void ) +OP_HANDLER( cmpx_ix ) { UINT32 r,d; PAIR b; @@ -1370,74 +1411,82 @@ INLINE void cmpx_ix( void ) d = X; r = d - b.d; CLR_NZV; - SET_NZ16(r); SET_V16(d,b.d,r); + SET_NZ16(r); + SET_V16(d,b.d,r); } /* $ac CPX indexed -**** (6803)*/ -INLINE void cpx_ix( void ) +OP_HANDLER( cpx_ix ) { UINT32 r,d; PAIR b; IDXWORD(b); d = X; r = d - b.d; - CLR_NZVC; SET_FLAGS16(d,b.d,r); + CLR_NZVC; + SET_FLAGS16(d,b.d,r); } /* $ad JSR indexed ----- */ -INLINE void jsr_ix( void ) +OP_HANDLER( jsr_ix ) { INDEXED; PUSHWORD(pPC); - PC = EA; + PC = EA; CHANGE_PC(); } /* $ae LDS indexed -**0- */ -INLINE void lds_ix( void ) +OP_HANDLER( lds_ix ) { - IDXWORD(m68xx.s); + IDXWORD(m68_state->s); CLR_NZV; SET_NZ16(S); } /* $af STS indexed -**0- */ -INLINE void sts_ix( void ) +OP_HANDLER( sts_ix ) { CLR_NZV; SET_NZ16(S); INDEXED; - WM16(EAD,&m68xx.s); + WM16(EAD,&m68_state->s); } /* $b0 SUBA extended ?**** */ -INLINE void suba_ex( void ) +OP_HANDLER( suba_ex ) { UINT16 t,r; - EXTBYTE(t); r = A-t; - CLR_NZVC; SET_FLAGS8(A,t,r); + EXTBYTE(t); + r = A - t; + CLR_NZVC; + SET_FLAGS8(A,t,r); A = r; } /* $b1 CMPA extended ?**** */ -INLINE void cmpa_ex( void ) +OP_HANDLER( cmpa_ex ) { UINT16 t,r; - EXTBYTE(t); r = A-t; - CLR_NZVC; SET_FLAGS8(A,t,r); + EXTBYTE(t); + r = A-t; + CLR_NZVC; + SET_FLAGS8(A,t,r); } /* $b2 SBCA extended ?**** */ -INLINE void sbca_ex( void ) +OP_HANDLER( sbca_ex ) { UINT16 t,r; - EXTBYTE(t); r = A-t-(CC&0x01); - CLR_NZVC; SET_FLAGS8(A,t,r); + EXTBYTE(t); + r = A-t-(CC&0x01); + CLR_NZVC; + SET_FLAGS8(A,t,r); A = r; } /* $b3 SUBD extended -**** */ -INLINE void subd_ex( void ) +OP_HANDLER( subd_ex ) { UINT32 r,d; PAIR b; @@ -1450,71 +1499,88 @@ INLINE void subd_ex( void ) } /* $b4 ANDA extended -**0- */ -INLINE void anda_ex( void ) +OP_HANDLER( anda_ex ) { UINT8 t; - EXTBYTE(t); A &= t; - CLR_NZV; SET_NZ8(A); + EXTBYTE(t); + A &= t; + CLR_NZV; + SET_NZ8(A); } /* $b5 BITA extended -**0- */ -INLINE void bita_ex( void ) +OP_HANDLER( bita_ex ) { UINT8 t,r; - EXTBYTE(t); r = A&t; - CLR_NZV; SET_NZ8(r); + EXTBYTE(t); + r = A&t; + CLR_NZV; + SET_NZ8(r); } /* $b6 LDA extended -**0- */ -INLINE void lda_ex( void ) +OP_HANDLER( lda_ex ) { EXTBYTE(A); - CLR_NZV; SET_NZ8(A); + CLR_NZV; + SET_NZ8(A); } /* $b7 STA extended -**0- */ -INLINE void sta_ex( void ) +OP_HANDLER( sta_ex ) { - CLR_NZV; SET_NZ8(A); - EXTENDED; WM(EAD,A); + CLR_NZV; + SET_NZ8(A); + EXTENDED; + WM(EAD,A); } /* $b8 EORA extended -**0- */ -INLINE void eora_ex( void ) +OP_HANDLER( eora_ex ) { UINT8 t; - EXTBYTE(t); A ^= t; - CLR_NZV; SET_NZ8(A); + EXTBYTE(t); + A ^= t; + CLR_NZV; + SET_NZ8(A); } /* $b9 ADCA extended ***** */ -INLINE void adca_ex( void ) +OP_HANDLER( adca_ex ) { UINT16 t,r; - EXTBYTE(t); r = A+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r); + EXTBYTE(t); + r = A+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(A,t,r); + SET_H(A,t,r); A = r; } /* $ba ORA extended -**0- */ -INLINE void ora_ex( void ) +OP_HANDLER( ora_ex ) { UINT8 t; - EXTBYTE(t); A |= t; - CLR_NZV; SET_NZ8(A); + EXTBYTE(t); + A |= t; + CLR_NZV; + SET_NZ8(A); } /* $bb ADDA extended ***** */ -INLINE void adda_ex( void ) +OP_HANDLER( adda_ex ) { UINT16 t,r; - EXTBYTE(t); r = A+t; - CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r); + EXTBYTE(t); + r = A+t; + CLR_HNZVC; + SET_FLAGS8(A,t,r); + SET_H(A,t,r); A = r; } /* $bc CMPX extended -***- */ -INLINE void cmpx_ex( void ) +OP_HANDLER( cmpx_ex ) { UINT32 r,d; PAIR b; @@ -1522,74 +1588,82 @@ INLINE void cmpx_ex( void ) d = X; r = d - b.d; CLR_NZV; - SET_NZ16(r); SET_V16(d,b.d,r); + SET_NZ16(r); + SET_V16(d,b.d,r); } /* $bc CPX extended -**** (6803) */ -INLINE void cpx_ex( void ) +OP_HANDLER( cpx_ex ) { UINT32 r,d; PAIR b; EXTWORD(b); d = X; r = d - b.d; - CLR_NZVC; SET_FLAGS16(d,b.d,r); + CLR_NZVC; + SET_FLAGS16(d,b.d,r); } /* $bd JSR extended ----- */ -INLINE void jsr_ex( void ) +OP_HANDLER( jsr_ex ) { EXTENDED; PUSHWORD(pPC); - PC = EA; + PC = EA; CHANGE_PC(); } /* $be LDS extended -**0- */ -INLINE void lds_ex( void ) +OP_HANDLER( lds_ex ) { - EXTWORD(m68xx.s); + EXTWORD(m68_state->s); CLR_NZV; SET_NZ16(S); } /* $bf STS extended -**0- */ -INLINE void sts_ex( void ) +OP_HANDLER( sts_ex ) { CLR_NZV; SET_NZ16(S); EXTENDED; - WM16(EAD,&m68xx.s); + WM16(EAD,&m68_state->s); } /* $c0 SUBB immediate ?**** */ -INLINE void subb_im( void ) +OP_HANDLER( subb_im ) { UINT16 t,r; - IMMBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + IMMBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $c1 CMPB immediate ?**** */ -INLINE void cmpb_im( void ) +OP_HANDLER( cmpb_im ) { UINT16 t,r; - IMMBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + IMMBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); } /* $c2 SBCB immediate ?**** */ -INLINE void sbcb_im( void ) +OP_HANDLER( sbcb_im ) { UINT16 t,r; - IMMBYTE(t); r = B-t-(CC&0x01); - CLR_NZVC; SET_FLAGS8(B,t,r); + IMMBYTE(t); + r = B-t-(CC&0x01); + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $c3 ADDD immediate -**** */ -INLINE void addd_im( void ) +OP_HANDLER( addd_im ) { UINT32 r,d; PAIR b; @@ -1602,133 +1676,156 @@ INLINE void addd_im( void ) } /* $c4 ANDB immediate -**0- */ -INLINE void andb_im( void ) +OP_HANDLER( andb_im ) { UINT8 t; - IMMBYTE(t); B &= t; - CLR_NZV; SET_NZ8(B); + IMMBYTE(t); + B &= t; + CLR_NZV; + SET_NZ8(B); } /* $c5 BITB immediate -**0- */ -INLINE void bitb_im( void ) +OP_HANDLER( bitb_im ) { UINT8 t,r; - IMMBYTE(t); r = B&t; - CLR_NZV; SET_NZ8(r); + IMMBYTE(t); + r = B&t; + CLR_NZV; + SET_NZ8(r); } /* $c6 LDB immediate -**0- */ -INLINE void ldb_im( void ) +OP_HANDLER( ldb_im ) { IMMBYTE(B); - CLR_NZV; SET_NZ8(B); + CLR_NZV; + SET_NZ8(B); } /* is this a legal instruction? */ /* $c7 STB immediate -**0- */ -INLINE void stb_im( void ) +OP_HANDLER( stb_im ) { - CLR_NZV; SET_NZ8(B); - IMM8; WM(EAD,B); + CLR_NZV; + SET_NZ8(B); + IMM8; + WM(EAD,B); } /* $c8 EORB immediate -**0- */ -INLINE void eorb_im( void ) +OP_HANDLER( eorb_im ) { UINT8 t; - IMMBYTE(t); B ^= t; - CLR_NZV; SET_NZ8(B); + IMMBYTE(t); + B ^= t; + CLR_NZV; + SET_NZ8(B); } /* $c9 ADCB immediate ***** */ -INLINE void adcb_im( void ) +OP_HANDLER( adcb_im ) { UINT16 t,r; - IMMBYTE(t); r = B+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + IMMBYTE(t); + r = B+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $ca ORB immediate -**0- */ -INLINE void orb_im( void ) +OP_HANDLER( orb_im ) { UINT8 t; - IMMBYTE(t); B |= t; - CLR_NZV; SET_NZ8(B); + IMMBYTE(t); + B |= t; + CLR_NZV; + SET_NZ8(B); } /* $cb ADDB immediate ***** */ -INLINE void addb_im( void ) +OP_HANDLER( addb_im ) { UINT16 t,r; - IMMBYTE(t); r = B+t; - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + IMMBYTE(t); + r = B+t; + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $CC LDD immediate -**0- */ -INLINE void ldd_im( void ) +OP_HANDLER( ldd_im ) { - IMMWORD(m68xx.d); + IMMWORD(m68_state->d); CLR_NZV; SET_NZ16(D); } /* is this a legal instruction? */ /* $cd STD immediate -**0- */ -INLINE void std_im( void ) +OP_HANDLER( std_im ) { IMM16; CLR_NZV; SET_NZ16(D); - WM16(EAD,&m68xx.d); + WM16(EAD,&m68_state->d); } /* $ce LDX immediate -**0- */ -INLINE void ldx_im( void ) +OP_HANDLER( ldx_im ) { - IMMWORD(m68xx.x); + IMMWORD(m68_state->x); CLR_NZV; SET_NZ16(X); } /* $cf STX immediate -**0- */ -INLINE void stx_im( void ) +OP_HANDLER( stx_im ) { CLR_NZV; SET_NZ16(X); IMM16; - WM16(EAD,&m68xx.x); + WM16(EAD,&m68_state->x); } /* $d0 SUBB direct ?**** */ -INLINE void subb_di( void ) +OP_HANDLER( subb_di ) { UINT16 t,r; - DIRBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + DIRBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $d1 CMPB direct ?**** */ -INLINE void cmpb_di( void ) +OP_HANDLER( cmpb_di ) { UINT16 t,r; - DIRBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + DIRBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); } /* $d2 SBCB direct ?**** */ -INLINE void sbcb_di( void ) +OP_HANDLER( sbcb_di ) { UINT16 t,r; - DIRBYTE(t); r = B-t-(CC&0x01); - CLR_NZVC; SET_FLAGS8(B,t,r); + DIRBYTE(t); + r = B-t-(CC&0x01); + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $d3 ADDD direct -**** */ -INLINE void addd_di( void ) +OP_HANDLER( addd_di ) { UINT32 r,d; PAIR b; @@ -1741,131 +1838,154 @@ INLINE void addd_di( void ) } /* $d4 ANDB direct -**0- */ -INLINE void andb_di( void ) +OP_HANDLER( andb_di ) { UINT8 t; - DIRBYTE(t); B &= t; - CLR_NZV; SET_NZ8(B); + DIRBYTE(t); + B &= t; + CLR_NZV; + SET_NZ8(B); } /* $d5 BITB direct -**0- */ -INLINE void bitb_di( void ) +OP_HANDLER( bitb_di ) { UINT8 t,r; - DIRBYTE(t); r = B&t; - CLR_NZV; SET_NZ8(r); + DIRBYTE(t); + r = B&t; + CLR_NZV; + SET_NZ8(r); } /* $d6 LDB direct -**0- */ -INLINE void ldb_di( void ) +OP_HANDLER( ldb_di ) { DIRBYTE(B); - CLR_NZV; SET_NZ8(B); + CLR_NZV; + SET_NZ8(B); } /* $d7 STB direct -**0- */ -INLINE void stb_di( void ) +OP_HANDLER( stb_di ) { - CLR_NZV; SET_NZ8(B); - DIRECT; WM(EAD,B); + CLR_NZV; + SET_NZ8(B); + DIRECT; + WM(EAD,B); } /* $d8 EORB direct -**0- */ -INLINE void eorb_di( void ) +OP_HANDLER( eorb_di ) { UINT8 t; - DIRBYTE(t); B ^= t; - CLR_NZV; SET_NZ8(B); + DIRBYTE(t); + B ^= t; + CLR_NZV; + SET_NZ8(B); } /* $d9 ADCB direct ***** */ -INLINE void adcb_di( void ) +OP_HANDLER( adcb_di ) { UINT16 t,r; - DIRBYTE(t); r = B+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + DIRBYTE(t); + r = B+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $da ORB direct -**0- */ -INLINE void orb_di( void ) +OP_HANDLER( orb_di ) { UINT8 t; - DIRBYTE(t); B |= t; - CLR_NZV; SET_NZ8(B); + DIRBYTE(t); + B |= t; + CLR_NZV; + SET_NZ8(B); } /* $db ADDB direct ***** */ -INLINE void addb_di( void ) +OP_HANDLER( addb_di ) { UINT16 t,r; - DIRBYTE(t); r = B+t; - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + DIRBYTE(t); + r = B+t; + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $dc LDD direct -**0- */ -INLINE void ldd_di( void ) +OP_HANDLER( ldd_di ) { - DIRWORD(m68xx.d); + DIRWORD(m68_state->d); CLR_NZV; SET_NZ16(D); } /* $dd STD direct -**0- */ -INLINE void std_di( void ) +OP_HANDLER( std_di ) { DIRECT; CLR_NZV; SET_NZ16(D); - WM16(EAD,&m68xx.d); + WM16(EAD,&m68_state->d); } /* $de LDX direct -**0- */ -INLINE void ldx_di( void ) +OP_HANDLER( ldx_di ) { - DIRWORD(m68xx.x); + DIRWORD(m68_state->x); CLR_NZV; SET_NZ16(X); } /* $dF STX direct -**0- */ -INLINE void stx_di( void ) +OP_HANDLER( stx_di ) { CLR_NZV; SET_NZ16(X); DIRECT; - WM16(EAD,&m68xx.x); + WM16(EAD,&m68_state->x); } /* $e0 SUBB indexed ?**** */ -INLINE void subb_ix( void ) +OP_HANDLER( subb_ix ) { UINT16 t,r; - IDXBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + IDXBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $e1 CMPB indexed ?**** */ -INLINE void cmpb_ix( void ) +OP_HANDLER( cmpb_ix ) { UINT16 t,r; - IDXBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + IDXBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); } /* $e2 SBCB indexed ?**** */ -INLINE void sbcb_ix( void ) +OP_HANDLER( sbcb_ix ) { UINT16 t,r; - IDXBYTE(t); r = B-t-(CC&0x01); - CLR_NZVC; SET_FLAGS8(B,t,r); + IDXBYTE(t); + r = B-t-(CC&0x01); + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $e3 ADDD indexed -**** */ -INLINE void addd_ix( void ) +OP_HANDLER( addd_ix ) { UINT32 r,d; PAIR b; @@ -1878,140 +1998,166 @@ INLINE void addd_ix( void ) } /* $e4 ANDB indexed -**0- */ -INLINE void andb_ix( void ) +OP_HANDLER( andb_ix ) { UINT8 t; - IDXBYTE(t); B &= t; - CLR_NZV; SET_NZ8(B); + IDXBYTE(t); + B &= t; + CLR_NZV; + SET_NZ8(B); } /* $e5 BITB indexed -**0- */ -INLINE void bitb_ix( void ) +OP_HANDLER( bitb_ix ) { UINT8 t,r; - IDXBYTE(t); r = B&t; - CLR_NZV; SET_NZ8(r); + IDXBYTE(t); + r = B&t; + CLR_NZV; + SET_NZ8(r); } /* $e6 LDB indexed -**0- */ -INLINE void ldb_ix( void ) +OP_HANDLER( ldb_ix ) { IDXBYTE(B); - CLR_NZV; SET_NZ8(B); + CLR_NZV; + SET_NZ8(B); } /* $e7 STB indexed -**0- */ -INLINE void stb_ix( void ) +OP_HANDLER( stb_ix ) { - CLR_NZV; SET_NZ8(B); - INDEXED; WM(EAD,B); + CLR_NZV; + SET_NZ8(B); + INDEXED; + WM(EAD,B); } /* $e8 EORB indexed -**0- */ -INLINE void eorb_ix( void ) +OP_HANDLER( eorb_ix ) { UINT8 t; - IDXBYTE(t); B ^= t; - CLR_NZV; SET_NZ8(B); + IDXBYTE(t); + B ^= t; + CLR_NZV; + SET_NZ8(B); } /* $e9 ADCB indexed ***** */ -INLINE void adcb_ix( void ) +OP_HANDLER( adcb_ix ) { UINT16 t,r; - IDXBYTE(t); r = B+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + IDXBYTE(t); + r = B+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $ea ORB indexed -**0- */ -INLINE void orb_ix( void ) +OP_HANDLER( orb_ix ) { UINT8 t; - IDXBYTE(t); B |= t; - CLR_NZV; SET_NZ8(B); + IDXBYTE(t); + B |= t; + CLR_NZV; + SET_NZ8(B); } /* $eb ADDB indexed ***** */ -INLINE void addb_ix( void ) +OP_HANDLER( addb_ix ) { UINT16 t,r; - IDXBYTE(t); r = B+t; - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + IDXBYTE(t); + r = B+t; + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $ec LDD indexed -**0- */ -INLINE void ldd_ix( void ) +OP_HANDLER( ldd_ix ) { - IDXWORD(m68xx.d); + IDXWORD(m68_state->d); CLR_NZV; SET_NZ16(D); } /* $ec ADCX immediate -**** NSC8105 only. Flags are a guess - copied from addb_im() */ -INLINE void adcx_im( void ) +OP_HANDLER( adcx_im ) { UINT16 t,r; - IMMBYTE(t); r = X+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(X,t,r); SET_H(X,t,r); + IMMBYTE(t); + r = X+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(X,t,r); + SET_H(X,t,r); X = r; } /* $ed STD indexed -**0- */ -INLINE void std_ix( void ) +OP_HANDLER( std_ix ) { INDEXED; CLR_NZV; SET_NZ16(D); - WM16(EAD,&m68xx.d); + WM16(EAD,&m68_state->d); } /* $ee LDX indexed -**0- */ -INLINE void ldx_ix( void ) +OP_HANDLER( ldx_ix ) { - IDXWORD(m68xx.x); + IDXWORD(m68_state->x); CLR_NZV; SET_NZ16(X); } /* $ef STX indexed -**0- */ -INLINE void stx_ix( void ) +OP_HANDLER( stx_ix ) { CLR_NZV; SET_NZ16(X); INDEXED; - WM16(EAD,&m68xx.x); + WM16(EAD,&m68_state->x); } /* $f0 SUBB extended ?**** */ -INLINE void subb_ex( void ) +OP_HANDLER( subb_ex ) { UINT16 t,r; - EXTBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + EXTBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $f1 CMPB extended ?**** */ -INLINE void cmpb_ex( void ) +OP_HANDLER( cmpb_ex ) { UINT16 t,r; - EXTBYTE(t); r = B-t; - CLR_NZVC; SET_FLAGS8(B,t,r); + EXTBYTE(t); + r = B-t; + CLR_NZVC; + SET_FLAGS8(B,t,r); } /* $f2 SBCB extended ?**** */ -INLINE void sbcb_ex( void ) +OP_HANDLER( sbcb_ex ) { UINT16 t,r; - EXTBYTE(t); r = B-t-(CC&0x01); - CLR_NZVC; SET_FLAGS8(B,t,r); + EXTBYTE(t); + r = B-t-(CC&0x01); + CLR_NZVC; + SET_FLAGS8(B,t,r); B = r; } /* $f3 ADDD extended -**** */ -INLINE void addd_ex( void ) +OP_HANDLER( addd_ex ) { UINT32 r,d; PAIR b; @@ -2024,7 +2170,7 @@ INLINE void addd_ex( void ) } /* $f4 ANDB extended -**0- */ -INLINE void andb_ex( void ) +OP_HANDLER( andb_ex ) { UINT8 t; EXTBYTE(t); @@ -2034,7 +2180,7 @@ INLINE void andb_ex( void ) } /* $f5 BITB extended -**0- */ -INLINE void bitb_ex( void ) +OP_HANDLER( bitb_ex ) { UINT8 t,r; EXTBYTE(t); @@ -2044,7 +2190,7 @@ INLINE void bitb_ex( void ) } /* $f6 LDB extended -**0- */ -INLINE void ldb_ex( void ) +OP_HANDLER( ldb_ex ) { EXTBYTE(B); CLR_NZV; @@ -2052,56 +2198,68 @@ INLINE void ldb_ex( void ) } /* $f7 STB extended -**0- */ -INLINE void stb_ex( void ) +OP_HANDLER( stb_ex ) { - CLR_NZV; SET_NZ8(B); - EXTENDED; WM(EAD,B); + CLR_NZV; + SET_NZ8(B); + EXTENDED; + WM(EAD,B); } /* $f8 EORB extended -**0- */ -INLINE void eorb_ex( void ) +OP_HANDLER( eorb_ex ) { UINT8 t; - EXTBYTE(t); B ^= t; - CLR_NZV; SET_NZ8(B); + EXTBYTE(t); + B ^= t; + CLR_NZV; + SET_NZ8(B); } /* $f9 ADCB extended ***** */ -INLINE void adcb_ex( void ) +OP_HANDLER( adcb_ex ) { UINT16 t,r; - EXTBYTE(t); r = B+t+(CC&0x01); - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + EXTBYTE(t); + r = B+t+(CC&0x01); + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $fa ORB extended -**0- */ -INLINE void orb_ex( void ) +OP_HANDLER( orb_ex ) { UINT8 t; - EXTBYTE(t); B |= t; - CLR_NZV; SET_NZ8(B); + EXTBYTE(t); + B |= t; + CLR_NZV; + SET_NZ8(B); } /* $fb ADDB extended ***** */ -INLINE void addb_ex( void ) +OP_HANDLER( addb_ex ) { UINT16 t,r; - EXTBYTE(t); r = B+t; - CLR_HNZVC; SET_FLAGS8(B,t,r); SET_H(B,t,r); + EXTBYTE(t); + r = B+t; + CLR_HNZVC; + SET_FLAGS8(B,t,r); + SET_H(B,t,r); B = r; } /* $fc LDD extended -**0- */ -INLINE void ldd_ex( void ) +OP_HANDLER( ldd_ex ) { - EXTWORD(m68xx.d); + EXTWORD(m68_state->d); CLR_NZV; SET_NZ16(D); } /* $fc ADDX extended -**** NSC8105 only. Flags are a guess */ -INLINE void addx_ex( void ) +OP_HANDLER( addx_ex ) { UINT32 r,d; PAIR b; @@ -2114,27 +2272,27 @@ INLINE void addx_ex( void ) } /* $fd STD extended -**0- */ -INLINE void std_ex( void ) +OP_HANDLER( std_ex ) { EXTENDED; CLR_NZV; SET_NZ16(D); - WM16(EAD,&m68xx.d); + WM16(EAD,&m68_state->d); } /* $fe LDX extended -**0- */ -INLINE void ldx_ex( void ) +OP_HANDLER( ldx_ex ) { - EXTWORD(m68xx.x); + EXTWORD(m68_state->x); CLR_NZV; SET_NZ16(X); } /* $ff STX extended -**0- */ -INLINE void stx_ex( void ) +OP_HANDLER( stx_ex ) { CLR_NZV; SET_NZ16(X); EXTENDED; - WM16(EAD,&m68xx.x); + WM16(EAD,&m68_state->x); } diff --git a/src/emu/cpu/m6800/6800tbl.c b/src/emu/cpu/m6800/6800tbl.c index a7f7e5cbb57..afc2cc8bd57 100644 --- a/src/emu/cpu/m6800/6800tbl.c +++ b/src/emu/cpu/m6800/6800tbl.c @@ -1,257 +1,255 @@ -INLINE void aba(void); -INLINE void abx(void); -INLINE void adca_di(void); -INLINE void adca_ex(void); -INLINE void adca_im(void); -INLINE void adca_ix(void); -INLINE void adcb_di(void); -INLINE void adcb_ex(void); -INLINE void adcb_im(void); -INLINE void adcb_ix(void); -INLINE void adcx_im(void); -INLINE void adda_di(void); -INLINE void adda_ex(void); -INLINE void adda_im(void); -INLINE void adda_ix(void); -INLINE void addb_di(void); -INLINE void addb_ex(void); -INLINE void addb_im(void); -INLINE void addb_ix(void); -INLINE void addd_di(void); -INLINE void addd_ex(void); -INLINE void addx_ex(void); -INLINE void addd_im(void); -INLINE void addd_ix(void); -INLINE void aim_di(void); -INLINE void aim_ix(void); -INLINE void anda_di(void); -INLINE void anda_ex(void); -INLINE void anda_im(void); -INLINE void anda_ix(void); -INLINE void andb_di(void); -INLINE void andb_ex(void); -INLINE void andb_im(void); -INLINE void andb_ix(void); -INLINE void asl_ex(void); -INLINE void asl_ix(void); -INLINE void asla(void); -INLINE void aslb(void); -INLINE void asld(void); -INLINE void asr_ex(void); -INLINE void asr_ix(void); -INLINE void asra(void); -INLINE void asrb(void); -INLINE void bcc(void); -INLINE void bcs(void); -INLINE void beq(void); -INLINE void bge(void); -INLINE void bgt(void); -INLINE void bhi(void); -INLINE void bita_di(void); -INLINE void bita_ex(void); -INLINE void bita_im(void); -INLINE void bita_ix(void); -INLINE void bitb_di(void); -INLINE void bitb_ex(void); -INLINE void bitb_im(void); -INLINE void bitb_ix(void); -INLINE void ble(void); -INLINE void bls(void); -INLINE void blt(void); -INLINE void bmi(void); -INLINE void bne(void); -INLINE void bpl(void); -INLINE void bra(void); -INLINE void brn(void); -INLINE void bsr(void); -INLINE void bvc(void); -INLINE void bvs(void); -INLINE void cba(void); -INLINE void clc(void); -INLINE void cli(void); -INLINE void clr_ex(void); -INLINE void clr_ix(void); -INLINE void clra(void); -INLINE void clrb(void); -INLINE void clv(void); -INLINE void cmpa_di(void); -INLINE void cmpa_ex(void); -INLINE void cmpa_im(void); -INLINE void cmpa_ix(void); -INLINE void cmpb_di(void); -INLINE void cmpb_ex(void); -INLINE void cmpb_im(void); -INLINE void cmpb_ix(void); -INLINE void cmpx_di(void); -INLINE void cmpx_ex(void); -INLINE void cmpx_im(void); -INLINE void cmpx_ix(void); -INLINE void com_ex(void); -INLINE void com_ix(void); -INLINE void coma(void); -INLINE void comb(void); -INLINE void daa(void); -INLINE void dec_ex(void); -INLINE void dec_ix(void); -INLINE void deca(void); -INLINE void decb(void); -INLINE void des(void); -INLINE void dex(void); -INLINE void eim_di(void); -INLINE void eim_ix(void); -INLINE void eora_di(void); -INLINE void eora_ex(void); -INLINE void eora_im(void); -INLINE void eora_ix(void); -INLINE void eorb_di(void); -INLINE void eorb_ex(void); -INLINE void eorb_im(void); -INLINE void eorb_ix(void); -//INLINE void illegal(void); -static void illegal(void); -INLINE void inc_ex(void); -INLINE void inc_ix(void); -INLINE void inca(void); -INLINE void incb(void); -INLINE void ins(void); -INLINE void inx(void); -INLINE void jmp_ex(void); -INLINE void jmp_ix(void); -INLINE void jsr_di(void); -INLINE void jsr_ex(void); -INLINE void jsr_ix(void); -INLINE void lda_di(void); -INLINE void lda_ex(void); -INLINE void lda_im(void); -INLINE void lda_ix(void); -INLINE void ldb_di(void); -INLINE void ldb_ex(void); -INLINE void ldb_im(void); -INLINE void ldb_ix(void); -INLINE void ldd_di(void); -INLINE void ldd_ex(void); -INLINE void ldd_im(void); -INLINE void ldd_ix(void); -INLINE void lds_di(void); -INLINE void lds_ex(void); -INLINE void lds_im(void); -INLINE void lds_ix(void); -INLINE void ldx_di(void); -INLINE void ldx_ex(void); -INLINE void ldx_im(void); -INLINE void ldx_ix(void); -INLINE void lsr_ex(void); -INLINE void lsr_ix(void); -INLINE void lsra(void); -INLINE void lsrb(void); -INLINE void lsrd(void); -INLINE void mul(void); -INLINE void neg_ex(void); -INLINE void neg_ix(void); -INLINE void nega(void); -INLINE void negb(void); -INLINE void nop(void); -INLINE void oim_di(void); -INLINE void oim_ix(void); -INLINE void ora_di(void); -INLINE void ora_ex(void); -INLINE void ora_im(void); -INLINE void ora_ix(void); -INLINE void orb_di(void); -INLINE void orb_ex(void); -INLINE void orb_im(void); -INLINE void orb_ix(void); -INLINE void psha(void); -INLINE void pshb(void); -INLINE void pshx(void); -INLINE void pula(void); -INLINE void pulb(void); -INLINE void pulx(void); -INLINE void rol_ex(void); -INLINE void rol_ix(void); -INLINE void rola(void); -INLINE void rolb(void); -INLINE void ror_ex(void); -INLINE void ror_ix(void); -INLINE void rora(void); -INLINE void rorb(void); -INLINE void rti(void); -INLINE void rts(void); -INLINE void sba(void); -INLINE void sbca_di(void); -INLINE void sbca_ex(void); -INLINE void sbca_im(void); -INLINE void sbca_ix(void); -INLINE void sbcb_di(void); -INLINE void sbcb_ex(void); -INLINE void sbcb_im(void); -INLINE void sbcb_ix(void); -INLINE void sec(void); -INLINE void sei(void); -INLINE void sev(void); +INLINE void aba(m68_state_t *m68_state); +INLINE void abx(m68_state_t *m68_state); +INLINE void adca_di(m68_state_t *m68_state); +INLINE void adca_ex(m68_state_t *m68_state); +INLINE void adca_im(m68_state_t *m68_state); +INLINE void adca_ix(m68_state_t *m68_state); +INLINE void adcb_di(m68_state_t *m68_state); +INLINE void adcb_ex(m68_state_t *m68_state); +INLINE void adcb_im(m68_state_t *m68_state); +INLINE void adcb_ix(m68_state_t *m68_state); +INLINE void adcx_im(m68_state_t *m68_state); +INLINE void adda_di(m68_state_t *m68_state); +INLINE void adda_ex(m68_state_t *m68_state); +INLINE void adda_im(m68_state_t *m68_state); +INLINE void adda_ix(m68_state_t *m68_state); +INLINE void addb_di(m68_state_t *m68_state); +INLINE void addb_ex(m68_state_t *m68_state); +INLINE void addb_im(m68_state_t *m68_state); +INLINE void addb_ix(m68_state_t *m68_state); +INLINE void addd_di(m68_state_t *m68_state); +INLINE void addd_ex(m68_state_t *m68_state); +INLINE void addx_ex(m68_state_t *m68_state); +INLINE void addd_im(m68_state_t *m68_state); +INLINE void addd_ix(m68_state_t *m68_state); +INLINE void aim_di(m68_state_t *m68_state); +INLINE void aim_ix(m68_state_t *m68_state); +INLINE void anda_di(m68_state_t *m68_state); +INLINE void anda_ex(m68_state_t *m68_state); +INLINE void anda_im(m68_state_t *m68_state); +INLINE void anda_ix(m68_state_t *m68_state); +INLINE void andb_di(m68_state_t *m68_state); +INLINE void andb_ex(m68_state_t *m68_state); +INLINE void andb_im(m68_state_t *m68_state); +INLINE void andb_ix(m68_state_t *m68_state); +INLINE void asl_ex(m68_state_t *m68_state); +INLINE void asl_ix(m68_state_t *m68_state); +INLINE void asla(m68_state_t *m68_state); +INLINE void aslb(m68_state_t *m68_state); +INLINE void asld(m68_state_t *m68_state); +INLINE void asr_ex(m68_state_t *m68_state); +INLINE void asr_ix(m68_state_t *m68_state); +INLINE void asra(m68_state_t *m68_state); +INLINE void asrb(m68_state_t *m68_state); +INLINE void bcc(m68_state_t *m68_state); +INLINE void bcs(m68_state_t *m68_state); +INLINE void beq(m68_state_t *m68_state); +INLINE void bge(m68_state_t *m68_state); +INLINE void bgt(m68_state_t *m68_state); +INLINE void bhi(m68_state_t *m68_state); +INLINE void bita_di(m68_state_t *m68_state); +INLINE void bita_ex(m68_state_t *m68_state); +INLINE void bita_im(m68_state_t *m68_state); +INLINE void bita_ix(m68_state_t *m68_state); +INLINE void bitb_di(m68_state_t *m68_state); +INLINE void bitb_ex(m68_state_t *m68_state); +INLINE void bitb_im(m68_state_t *m68_state); +INLINE void bitb_ix(m68_state_t *m68_state); +INLINE void ble(m68_state_t *m68_state); +INLINE void bls(m68_state_t *m68_state); +INLINE void blt(m68_state_t *m68_state); +INLINE void bmi(m68_state_t *m68_state); +INLINE void bne(m68_state_t *m68_state); +INLINE void bpl(m68_state_t *m68_state); +INLINE void bra(m68_state_t *m68_state); +INLINE void brn(m68_state_t *m68_state); +INLINE void bsr(m68_state_t *m68_state); +INLINE void bvc(m68_state_t *m68_state); +INLINE void bvs(m68_state_t *m68_state); +INLINE void cba(m68_state_t *m68_state); +INLINE void clc(m68_state_t *m68_state); +INLINE void cli(m68_state_t *m68_state); +INLINE void clr_ex(m68_state_t *m68_state); +INLINE void clr_ix(m68_state_t *m68_state); +INLINE void clra(m68_state_t *m68_state); +INLINE void clrb(m68_state_t *m68_state); +INLINE void clv(m68_state_t *m68_state); +INLINE void cmpa_di(m68_state_t *m68_state); +INLINE void cmpa_ex(m68_state_t *m68_state); +INLINE void cmpa_im(m68_state_t *m68_state); +INLINE void cmpa_ix(m68_state_t *m68_state); +INLINE void cmpb_di(m68_state_t *m68_state); +INLINE void cmpb_ex(m68_state_t *m68_state); +INLINE void cmpb_im(m68_state_t *m68_state); +INLINE void cmpb_ix(m68_state_t *m68_state); +INLINE void cmpx_di(m68_state_t *m68_state); +INLINE void cmpx_ex(m68_state_t *m68_state); +INLINE void cmpx_im(m68_state_t *m68_state); +INLINE void cmpx_ix(m68_state_t *m68_state); +INLINE void com_ex(m68_state_t *m68_state); +INLINE void com_ix(m68_state_t *m68_state); +INLINE void coma(m68_state_t *m68_state); +INLINE void comb(m68_state_t *m68_state); +INLINE void daa(m68_state_t *m68_state); +INLINE void dec_ex(m68_state_t *m68_state); +INLINE void dec_ix(m68_state_t *m68_state); +INLINE void deca(m68_state_t *m68_state); +INLINE void decb(m68_state_t *m68_state); +INLINE void des(m68_state_t *m68_state); +INLINE void dex(m68_state_t *m68_state); +INLINE void eim_di(m68_state_t *m68_state); +INLINE void eim_ix(m68_state_t *m68_state); +INLINE void eora_di(m68_state_t *m68_state); +INLINE void eora_ex(m68_state_t *m68_state); +INLINE void eora_im(m68_state_t *m68_state); +INLINE void eora_ix(m68_state_t *m68_state); +INLINE void eorb_di(m68_state_t *m68_state); +INLINE void eorb_ex(m68_state_t *m68_state); +INLINE void eorb_im(m68_state_t *m68_state); +INLINE void eorb_ix(m68_state_t *m68_state); +INLINE void illegal(m68_state_t *m68_state); +INLINE void inc_ex(m68_state_t *m68_state); +INLINE void inc_ix(m68_state_t *m68_state); +INLINE void inca(m68_state_t *m68_state); +INLINE void incb(m68_state_t *m68_state); +INLINE void ins(m68_state_t *m68_state); +INLINE void inx(m68_state_t *m68_state); +INLINE void jmp_ex(m68_state_t *m68_state); +INLINE void jmp_ix(m68_state_t *m68_state); +INLINE void jsr_di(m68_state_t *m68_state); +INLINE void jsr_ex(m68_state_t *m68_state); +INLINE void jsr_ix(m68_state_t *m68_state); +INLINE void lda_di(m68_state_t *m68_state); +INLINE void lda_ex(m68_state_t *m68_state); +INLINE void lda_im(m68_state_t *m68_state); +INLINE void lda_ix(m68_state_t *m68_state); +INLINE void ldb_di(m68_state_t *m68_state); +INLINE void ldb_ex(m68_state_t *m68_state); +INLINE void ldb_im(m68_state_t *m68_state); +INLINE void ldb_ix(m68_state_t *m68_state); +INLINE void ldd_di(m68_state_t *m68_state); +INLINE void ldd_ex(m68_state_t *m68_state); +INLINE void ldd_im(m68_state_t *m68_state); +INLINE void ldd_ix(m68_state_t *m68_state); +INLINE void lds_di(m68_state_t *m68_state); +INLINE void lds_ex(m68_state_t *m68_state); +INLINE void lds_im(m68_state_t *m68_state); +INLINE void lds_ix(m68_state_t *m68_state); +INLINE void ldx_di(m68_state_t *m68_state); +INLINE void ldx_ex(m68_state_t *m68_state); +INLINE void ldx_im(m68_state_t *m68_state); +INLINE void ldx_ix(m68_state_t *m68_state); +INLINE void lsr_ex(m68_state_t *m68_state); +INLINE void lsr_ix(m68_state_t *m68_state); +INLINE void lsra(m68_state_t *m68_state); +INLINE void lsrb(m68_state_t *m68_state); +INLINE void lsrd(m68_state_t *m68_state); +INLINE void mul(m68_state_t *m68_state); +INLINE void neg_ex(m68_state_t *m68_state); +INLINE void neg_ix(m68_state_t *m68_state); +INLINE void nega(m68_state_t *m68_state); +INLINE void negb(m68_state_t *m68_state); +INLINE void nop(m68_state_t *m68_state); +INLINE void oim_di(m68_state_t *m68_state); +INLINE void oim_ix(m68_state_t *m68_state); +INLINE void ora_di(m68_state_t *m68_state); +INLINE void ora_ex(m68_state_t *m68_state); +INLINE void ora_im(m68_state_t *m68_state); +INLINE void ora_ix(m68_state_t *m68_state); +INLINE void orb_di(m68_state_t *m68_state); +INLINE void orb_ex(m68_state_t *m68_state); +INLINE void orb_im(m68_state_t *m68_state); +INLINE void orb_ix(m68_state_t *m68_state); +INLINE void psha(m68_state_t *m68_state); +INLINE void pshb(m68_state_t *m68_state); +INLINE void pshx(m68_state_t *m68_state); +INLINE void pula(m68_state_t *m68_state); +INLINE void pulb(m68_state_t *m68_state); +INLINE void pulx(m68_state_t *m68_state); +INLINE void rol_ex(m68_state_t *m68_state); +INLINE void rol_ix(m68_state_t *m68_state); +INLINE void rola(m68_state_t *m68_state); +INLINE void rolb(m68_state_t *m68_state); +INLINE void ror_ex(m68_state_t *m68_state); +INLINE void ror_ix(m68_state_t *m68_state); +INLINE void rora(m68_state_t *m68_state); +INLINE void rorb(m68_state_t *m68_state); +INLINE void rti(m68_state_t *m68_state); +INLINE void rts(m68_state_t *m68_state); +INLINE void sba(m68_state_t *m68_state); +INLINE void sbca_di(m68_state_t *m68_state); +INLINE void sbca_ex(m68_state_t *m68_state); +INLINE void sbca_im(m68_state_t *m68_state); +INLINE void sbca_ix(m68_state_t *m68_state); +INLINE void sbcb_di(m68_state_t *m68_state); +INLINE void sbcb_ex(m68_state_t *m68_state); +INLINE void sbcb_im(m68_state_t *m68_state); +INLINE void sbcb_ix(m68_state_t *m68_state); +INLINE void sec(m68_state_t *m68_state); +INLINE void sei(m68_state_t *m68_state); +INLINE void sev(m68_state_t *m68_state); #if (HAS_HD63701) -INLINE void slp(void); +INLINE void slp(m68_state_t *m68_state); #endif -INLINE void sta_di(void); -INLINE void sta_ex(void); -INLINE void sta_im(void); -INLINE void sta_ix(void); -INLINE void stb_di(void); -INLINE void stb_ex(void); -INLINE void stb_im(void); -INLINE void stb_ix(void); -INLINE void std_di(void); -INLINE void std_ex(void); -INLINE void std_im(void); -INLINE void std_ix(void); -INLINE void sts_di(void); -INLINE void sts_ex(void); -INLINE void sts_im(void); -INLINE void sts_ix(void); -INLINE void stx_di(void); -INLINE void stx_ex(void); -INLINE void stx_im(void); -INLINE void stx_ix(void); -INLINE void suba_di(void); -INLINE void suba_ex(void); -INLINE void suba_im(void); -INLINE void suba_ix(void); -INLINE void subb_di(void); -INLINE void subb_ex(void); -INLINE void subb_im(void); -INLINE void subb_ix(void); -INLINE void subd_di(void); -INLINE void subd_ex(void); -INLINE void subd_im(void); -INLINE void subd_ix(void); -INLINE void swi(void); -INLINE void tab(void); -INLINE void tap(void); -INLINE void tba(void); -INLINE void tim_di(void); -INLINE void tim_ix(void); -INLINE void tpa(void); -INLINE void tst_ex(void); -INLINE void tst_ix(void); -INLINE void tsta(void); -INLINE void tstb(void); -INLINE void tsx(void); -INLINE void txs(void); -INLINE void undoc1(void); -INLINE void undoc2(void); -INLINE void wai(void); -INLINE void xgdx(void); +INLINE void sta_di(m68_state_t *m68_state); +INLINE void sta_ex(m68_state_t *m68_state); +INLINE void sta_im(m68_state_t *m68_state); +INLINE void sta_ix(m68_state_t *m68_state); +INLINE void stb_di(m68_state_t *m68_state); +INLINE void stb_ex(m68_state_t *m68_state); +INLINE void stb_im(m68_state_t *m68_state); +INLINE void stb_ix(m68_state_t *m68_state); +INLINE void std_di(m68_state_t *m68_state); +INLINE void std_ex(m68_state_t *m68_state); +INLINE void std_im(m68_state_t *m68_state); +INLINE void std_ix(m68_state_t *m68_state); +INLINE void sts_di(m68_state_t *m68_state); +INLINE void sts_ex(m68_state_t *m68_state); +INLINE void sts_im(m68_state_t *m68_state); +INLINE void sts_ix(m68_state_t *m68_state); +INLINE void stx_di(m68_state_t *m68_state); +INLINE void stx_ex(m68_state_t *m68_state); +INLINE void stx_im(m68_state_t *m68_state); +INLINE void stx_ix(m68_state_t *m68_state); +INLINE void suba_di(m68_state_t *m68_state); +INLINE void suba_ex(m68_state_t *m68_state); +INLINE void suba_im(m68_state_t *m68_state); +INLINE void suba_ix(m68_state_t *m68_state); +INLINE void subb_di(m68_state_t *m68_state); +INLINE void subb_ex(m68_state_t *m68_state); +INLINE void subb_im(m68_state_t *m68_state); +INLINE void subb_ix(m68_state_t *m68_state); +INLINE void subd_di(m68_state_t *m68_state); +INLINE void subd_ex(m68_state_t *m68_state); +INLINE void subd_im(m68_state_t *m68_state); +INLINE void subd_ix(m68_state_t *m68_state); +INLINE void swi(m68_state_t *m68_state); +INLINE void tab(m68_state_t *m68_state); +INLINE void tap(m68_state_t *m68_state); +INLINE void tba(m68_state_t *m68_state); +INLINE void tim_di(m68_state_t *m68_state); +INLINE void tim_ix(m68_state_t *m68_state); +INLINE void tpa(m68_state_t *m68_state); +INLINE void tst_ex(m68_state_t *m68_state); +INLINE void tst_ix(m68_state_t *m68_state); +INLINE void tsta(m68_state_t *m68_state); +INLINE void tstb(m68_state_t *m68_state); +INLINE void tsx(m68_state_t *m68_state); +INLINE void txs(m68_state_t *m68_state); +INLINE void undoc1(m68_state_t *m68_state); +INLINE void undoc2(m68_state_t *m68_state); +INLINE void wai(m68_state_t *m68_state); +INLINE void xgdx(m68_state_t *m68_state); -INLINE void cpx_di(void); -INLINE void cpx_ex(void); -INLINE void cpx_im(void); -INLINE void cpx_ix(void); +INLINE void cpx_di(m68_state_t *m68_state); +INLINE void cpx_ex(m68_state_t *m68_state); +INLINE void cpx_im(m68_state_t *m68_state); +INLINE void cpx_ix(m68_state_t *m68_state); #if (HAS_HD63701) -//INLINE void trap(void); -static void trap(void); +INLINE void trap(m68_state_t *m68_state); #endif -static void (*const m6800_insn[0x100])(void) = { +static void (*const m6800_insn[0x100])(m68_state_t *m68_state) = { illegal,nop, illegal,illegal,illegal,illegal,tap, tpa, inx, dex, clv, sev, clc, sec, cli, sei, sba, cba, illegal,illegal,illegal,illegal,tab, tba, @@ -287,7 +285,7 @@ eorb_ex,adcb_ex,orb_ex, addb_ex,illegal,illegal,ldx_ex, stx_ex }; #if (HAS_M6801||HAS_M6803) -static void (*const m6803_insn[0x100])(void) = { +static void (*const m6803_insn[0x100])(m68_state_t *m68_state) = { illegal,nop, illegal,illegal,lsrd, asld, tap, tpa, inx, dex, clv, sev, clc, sec, cli, sei, sba, cba, illegal,illegal,illegal,illegal,tab, tba, @@ -324,7 +322,7 @@ eorb_ex,adcb_ex,orb_ex, addb_ex,ldd_ex, std_ex, ldx_ex, stx_ex #endif #if (HAS_HD63701) -static void (*const hd63701_insn[0x100])(void) = { +static void (*const hd63701_insn[0x100])(m68_state_t *m68_state) = { trap ,nop, trap ,trap ,lsrd, asld, tap, tpa, inx, dex, clv, sev, clc, sec, cli, sei, sba, cba, undoc1, undoc2, trap ,trap ,tab, tba, @@ -361,7 +359,7 @@ eorb_ex,adcb_ex,orb_ex, addb_ex,ldd_ex, std_ex, ldx_ex, stx_ex #endif #if (HAS_NSC8105) -static void (*const nsc8105_insn[0x100])(void) = { +static void (*const nsc8105_insn[0x100])(m68_state_t *m68_state) = { illegal,illegal,nop, illegal,illegal,tap, illegal,tpa, inx, clv, dex, sev, clc, cli, sec, sei, sba, illegal,cba, illegal,illegal,tab, illegal,tba, diff --git a/src/emu/cpu/m6800/m6800.c b/src/emu/cpu/m6800/m6800.c index c082a06b107..e5e364c1ec6 100644 --- a/src/emu/cpu/m6800/m6800.c +++ b/src/emu/cpu/m6800/m6800.c @@ -96,7 +96,8 @@ enum #endif /* 6800 Registers */ -typedef struct +typedef struct _m68_state_t m68_state_t; +struct _m68_state_t { // int subtype; /* CPU subtype */ PAIR ppc; /* Previous program counter */ @@ -113,7 +114,7 @@ typedef struct cpu_irq_callback irq_callback; const device_config *device; int extra_cycles; /* cycles used for interrupts */ - void (* const * insn)(void); /* instruction table */ + void (* const * insn)(m68_state_t *); /* instruction table */ const UINT8 *cycles; /* clock cycle of instruction table */ /* internal registers */ UINT8 port1_ddr; @@ -136,55 +137,78 @@ typedef struct UINT8 trcsr, rmcr, rdr, tdr, rsr, tsr; int rxbits, txbits, txstate, trcsr_read, tx; + int icount; + int latch09; + PAIR timer_over; -} m6800_Regs; + emu_timer *m6800_rx_timer; + emu_timer *m6800_tx_timer; + PAIR ea; /* effective address */ -/* 680x registers */ -static m6800_Regs m68xx; +}; -static emu_timer *m6800_rx_timer; -static emu_timer *m6800_tx_timer; +static void *token; /* for READ8/WRITE8 handlers */ -#define pPPC m68xx.ppc -#define pPC m68xx.pc -#define pS m68xx.s -#define pX m68xx.x -#define pD m68xx.d +#if 0 +static void hd63701_trap_pc(m68_state_t *m68_state); +#endif -#define PC m68xx.pc.w.l -#define PCD m68xx.pc.d -#define S m68xx.s.w.l -#define SD m68xx.s.d -#define X m68xx.x.w.l -#define D m68xx.d.w.l -#define A m68xx.d.b.h -#define B m68xx.d.b.l -#define CC m68xx.cc +#define pPPC m68_state->ppc +#define pPC m68_state->pc +#define pS m68_state->s +#define pX m68_state->x +#define pD m68_state->d -#define CT m68xx.counter.w.l -#define CTH m68xx.counter.w.h -#define CTD m68xx.counter.d -#define OC m68xx.output_compare.w.l -#define OCH m68xx.output_compare.w.h -#define OCD m68xx.output_compare.d -#define TOH m68xx.timer_over.w.l -#define TOD m68xx.timer_over.d +#define PC m68_state->pc.w.l +#define PCD m68_state->pc.d +#define S m68_state->s.w.l +#define SD m68_state->s.d +#define X m68_state->x.w.l +#define D m68_state->d.w.l +#define A m68_state->d.b.h +#define B m68_state->d.b.l +#define CC m68_state->cc -static PAIR ea; /* effective address */ -#define EAD ea.d -#define EA ea.w.l +#define CT m68_state->counter.w.l +#define CTH m68_state->counter.w.h +#define CTD m68_state->counter.d +#define OC m68_state->output_compare.w.l +#define OCH m68_state->output_compare.w.h +#define OCD m68_state->output_compare.d +#define TOH m68_state->timer_over.w.l +#define TOD m68_state->timer_over.d -/* public globals */ -static int m6800_ICount; +#define EAD m68_state->ea.d +#define EA m68_state->ea.w.l /* point of next timer event */ static UINT32 timer_next; -/* DS -- THESE ARE RE-DEFINED IN m68xx.h TO RAM, ROM or FUNCTIONS IN cpuintrf.c */ -#define RM M6800_RDMEM -#define WM M6800_WRMEM -#define M_RDOP M6800_RDOP -#define M_RDOP_ARG M6800_RDOP_ARG +/* memory interface */ + +/****************************************************************************/ +/* Read a byte from given memory location */ +/****************************************************************************/ +#define RM(Addr) ((unsigned)program_read_byte_8be(Addr)) + +/****************************************************************************/ +/* Write a byte to given memory location */ +/****************************************************************************/ +#define WM(Addr,Value) (program_write_byte_8be(Addr,Value)) + +/****************************************************************************/ +/* M6800_RDOP() is identical to M6800_RDMEM() except it is used for reading */ +/* opcodes. In case of system with memory mapped I/O, this function can be */ +/* used to greatly speed up emulation */ +/****************************************************************************/ +#define M_RDOP(Addr) ((unsigned)cpu_readop(Addr)) + +/****************************************************************************/ +/* M6800_RDOP_ARG() is identical to M6800_RDOP() but it's used for reading */ +/* opcode arguments. This difference can be used to support systems that */ +/* use different encoding mechanisms for opcodes and opcode arguments */ +/****************************************************************************/ +#define M_RDOP_ARG(Addr) ((unsigned)cpu_readop_arg(Addr)) /* macros to access memory */ #define IMMBYTE(b) b = M_RDOP_ARG(PCD); PC++ @@ -196,7 +220,7 @@ static UINT32 timer_next; #define PULLWORD(w) S++; w.d = RM(SD)<<8; S++; w.d |= RM(SD) #define MODIFIED_tcsr { \ - m68xx.irq2 = (m68xx.tcsr&(m68xx.tcsr<<3))&(TCSR_ICF|TCSR_OCF|TCSR_TOF); \ + m68_state->irq2 = (m68_state->tcsr&(m68_state->tcsr<<3))&(TCSR_ICF|TCSR_OCF|TCSR_TOF); \ } #define SET_TIMER_EVENT { \ @@ -204,7 +228,7 @@ static UINT32 timer_next; } /* cleanup high-word of counters */ -#define CLEANUP_conters { \ +#define CLEANUP_COUNTERS() { \ OCH -= CTH; \ TOH -= CTH; \ CTH = 0; \ @@ -250,11 +274,11 @@ enum }; /* take interrupt */ -#define TAKE_ICI ENTER_INTERRUPT("M6800#%d take ICI\n",0xfff6) -#define TAKE_OCI ENTER_INTERRUPT("M6800#%d take OCI\n",0xfff4) -#define TAKE_TOI ENTER_INTERRUPT("M6800#%d take TOI\n",0xfff2) -#define TAKE_SCI ENTER_INTERRUPT("M6800#%d take SCI\n",0xfff0) -#define TAKE_TRAP ENTER_INTERRUPT("M6800#%d take TRAP\n",0xffee) +#define TAKE_ICI enter_interrupt(m68_state, "M6800#%d take ICI\n",0xfff6) +#define TAKE_OCI enter_interrupt(m68_state, "M6800#%d take OCI\n",0xfff4) +#define TAKE_TOI enter_interrupt(m68_state, "M6800#%d take TOI\n",0xfff2) +#define TAKE_SCI enter_interrupt(m68_state, "M6800#%d take SCI\n",0xfff0) +#define TAKE_TRAP enter_interrupt(m68_state, "M6800#%d take TRAP\n",0xffee) /* operate one instruction for */ #define ONE_MORE_INSN() { \ @@ -263,23 +287,8 @@ enum debugger_instruction_hook(Machine, PCD); \ ireg=M_RDOP(PCD); \ PC++; \ - (*m68xx.insn[ireg])(); \ - INCREMENT_COUNTER(m68xx.cycles[ireg]); \ -} - -/* check the IRQ lines for pending interrupts */ -#define CHECK_IRQ_LINES() { \ - if( !(CC & 0x10) ) \ - { \ - if( m68xx.irq_state[M6800_IRQ_LINE] != CLEAR_LINE ) \ - { /* standard IRQ */ \ - ENTER_INTERRUPT("M6800#%d take IRQ1\n",0xfff8); \ - if( m68xx.irq_callback ) \ - (void)(*m68xx.irq_callback)(m68xx.device, M6800_IRQ_LINE); \ - } \ - else \ - m6800_check_irq2(); \ - } \ + (*m68_state->insn[ireg])(m68_state); \ + increment_counter(m68_state, m68_state->cycles[ireg]); \ } /* CC masks HI NZVC @@ -359,7 +368,7 @@ static const UINT8 flags8d[256]= /* decrement */ #define DIRECT IMMBYTE(EAD) #define IMM8 EA=PC++ #define IMM16 {EA=PC;PC+=2;} -#define EXTENDED IMMWORD(ea) +#define EXTENDED IMMWORD(m68_state->ea) #define INDEXED {EA=X+(UINT8)M_RDOP_ARG(PCD);PC++;} /* macros to set status flags */ @@ -389,26 +398,6 @@ static const UINT8 flags8d[256]= /* decrement */ #define TCSR_OCF 0x40 #define TCSR_ICF 0x80 -#define INCREMENT_COUNTER(amount) \ -{ \ - m6800_ICount -= amount; \ - CTD += amount; \ - if( CTD >= timer_next) \ - check_timer_event(); \ -} - -#define EAT_CYCLES \ -{ \ - int cycles_to_eat; \ - \ - cycles_to_eat = timer_next - CTD; \ - if( cycles_to_eat > m6800_ICount) cycles_to_eat = m6800_ICount; \ - if (cycles_to_eat > 0) \ - { \ - INCREMENT_COUNTER(cycles_to_eat); \ - } \ -} - /* macros for convenience */ #define DIRBYTE(b) {DIRECT;b=RM(EAD);} #define DIRWORD(w) {DIRECT;w.d=RM16(EAD);} @@ -419,10 +408,13 @@ static const UINT8 flags8d[256]= /* decrement */ #define IDXWORD(w) {INDEXED;w.d=RM16(EAD);} /* Macros for branch instructions */ -#define CHANGE_PC() change_pc(PCD) -#define BRANCH(f) {IMMBYTE(t);if(f){PC+=SIGNED(t);CHANGE_PC();}} +#define CHANGE_PC(m68_state) change_pc(PCD) +#define BRANCH(f) {IMMBYTE(t);if(f){PC+=SIGNED(t);CHANGE_PC(m68_state);}} #define NXORV ((CC&0x08)^((CC&0x02)<<2)) +#define M6800_WAI 8 /* set when WAI is waiting for an interrupt */ +#define M6800_SLP 0x10 /* HD63701 only */ + /* Note: we use 99 cycles here for invalid opcodes so that we don't */ /* hang in an infinite loop if we hit one */ static const UINT8 cycles_6800[] = @@ -509,6 +501,18 @@ static const UINT8 cycles_nsc8105[] = /*F*/ 4, 4, 4,99, 4, 4, 4, 5, 4, 4, 4, 4, 4, 5,99, 6 }; +#define EAT_CYCLES \ +{ \ + int cycles_to_eat; \ + \ + cycles_to_eat = timer_next - CTD; \ + if( cycles_to_eat > m68_state->icount) cycles_to_eat = m68_state->icount; \ + if (cycles_to_eat > 0) \ + { \ + increment_counter(m68_state, cycles_to_eat); \ + } \ +} + INLINE UINT32 RM16( UINT32 Addr ) { UINT32 result = RM(Addr) << 8; @@ -522,14 +526,14 @@ INLINE void WM16( UINT32 Addr, PAIR *p ) } /* IRQ enter */ -static void ENTER_INTERRUPT(const char *message,UINT16 irq_vector) +static void enter_interrupt(m68_state_t *m68_state, const char *message,UINT16 irq_vector) { LOG((message, cpunum_get_active())); - if( m68xx.wai_state & (M6800_WAI|M6800_SLP) ) + if( m68_state->wai_state & (M6800_WAI|M6800_SLP) ) { - if( m68xx.wai_state & M6800_WAI ) - m68xx.extra_cycles += 4; - m68xx.wai_state &= ~(M6800_WAI|M6800_SLP); + if( m68_state->wai_state & M6800_WAI ) + m68_state->extra_cycles += 4; + m68_state->wai_state &= ~(M6800_WAI|M6800_SLP); } else { @@ -538,48 +542,67 @@ static void ENTER_INTERRUPT(const char *message,UINT16 irq_vector) PUSHBYTE(A); PUSHBYTE(B); PUSHBYTE(CC); - m68xx.extra_cycles += 12; + m68_state->extra_cycles += 12; } SEI; PCD = RM16( irq_vector ); - CHANGE_PC(); + CHANGE_PC(m68_state); } -static void m6800_check_irq2(void) + + +static void m6800_check_irq2(m68_state_t *m68_state) { - if ((m68xx.tcsr & (TCSR_EICI|TCSR_ICF)) == (TCSR_EICI|TCSR_ICF)) + if ((m68_state->tcsr & (TCSR_EICI|TCSR_ICF)) == (TCSR_EICI|TCSR_ICF)) { TAKE_ICI; - if( m68xx.irq_callback ) - (void)(*m68xx.irq_callback)(m68xx.device, M6800_TIN_LINE); + if( m68_state->irq_callback ) + (void)(*m68_state->irq_callback)(m68_state->device, M6800_TIN_LINE); } - else if ((m68xx.tcsr & (TCSR_EOCI|TCSR_OCF)) == (TCSR_EOCI|TCSR_OCF)) + else if ((m68_state->tcsr & (TCSR_EOCI|TCSR_OCF)) == (TCSR_EOCI|TCSR_OCF)) { TAKE_OCI; } - else if ((m68xx.tcsr & (TCSR_ETOI|TCSR_TOF)) == (TCSR_ETOI|TCSR_TOF)) + else if ((m68_state->tcsr & (TCSR_ETOI|TCSR_TOF)) == (TCSR_ETOI|TCSR_TOF)) { TAKE_TOI; } - else if (((m68xx.trcsr & (M6800_TRCSR_RIE|M6800_TRCSR_RDRF)) == (M6800_TRCSR_RIE|M6800_TRCSR_RDRF)) || - ((m68xx.trcsr & (M6800_TRCSR_RIE|M6800_TRCSR_ORFE)) == (M6800_TRCSR_RIE|M6800_TRCSR_ORFE)) || - ((m68xx.trcsr & (M6800_TRCSR_TIE|M6800_TRCSR_TDRE)) == (M6800_TRCSR_TIE|M6800_TRCSR_TDRE))) + else if (((m68_state->trcsr & (M6800_TRCSR_RIE|M6800_TRCSR_RDRF)) == (M6800_TRCSR_RIE|M6800_TRCSR_RDRF)) || + ((m68_state->trcsr & (M6800_TRCSR_RIE|M6800_TRCSR_ORFE)) == (M6800_TRCSR_RIE|M6800_TRCSR_ORFE)) || + ((m68_state->trcsr & (M6800_TRCSR_TIE|M6800_TRCSR_TDRE)) == (M6800_TRCSR_TIE|M6800_TRCSR_TDRE))) { TAKE_SCI; } } + +/* check the IRQ lines for pending interrupts */ +INLINE void CHECK_IRQ_LINES(m68_state_t *m68_state) +{ + if( !(CC & 0x10) ) + { + if( m68_state->irq_state[M6800_IRQ_LINE] != CLEAR_LINE ) + { /* standard IRQ */ + enter_interrupt(m68_state, "M6800#%d take IRQ1n",0xfff8); + if( m68_state->irq_callback ) + (void)(*m68_state->irq_callback)(m68_state->device, M6800_IRQ_LINE); + } + else + m6800_check_irq2(m68_state); + } +} + /* check OCI or TOI */ -static void check_timer_event(void) +static void check_timer_event(m68_state_t *m68_state) { /* OCI */ if( CTD >= OCD) { OCH++; // next IRQ point - m68xx.tcsr |= TCSR_OCF; - m68xx.pending_tcsr |= TCSR_OCF; + m68_state->tcsr |= TCSR_OCF; + m68_state->pending_tcsr |= TCSR_OCF; MODIFIED_tcsr; - if ( !(CC & 0x10) && (m68xx.tcsr & TCSR_EOCI)) + if ( !(CC & 0x10) && (m68_state->tcsr & TCSR_EOCI)) TAKE_OCI; } /* TOI */ @@ -587,18 +610,26 @@ static void check_timer_event(void) { TOH++; // next IRQ point #if 0 - CLEANUP_conters; + CLEANUP_COUNTERS(); #endif - m68xx.tcsr |= TCSR_TOF; - m68xx.pending_tcsr |= TCSR_TOF; + m68_state->tcsr |= TCSR_TOF; + m68_state->pending_tcsr |= TCSR_TOF; MODIFIED_tcsr; - if ( !(CC & 0x10) && (m68xx.tcsr & TCSR_ETOI)) + if ( !(CC & 0x10) && (m68_state->tcsr & TCSR_ETOI)) TAKE_TOI; } /* set next event */ SET_TIMER_EVENT; } +INLINE void increment_counter(m68_state_t *m68_state, int amount) +{ + m68_state->icount -= amount; + CTD += amount; + if( CTD >= timer_next) + check_timer_event(m68_state); +} + /* include the opcode prototypes and function pointer tables */ #include "6800tbl.c" @@ -606,18 +637,18 @@ static void check_timer_event(void) #include "6800ops.c" #if (HAS_M6801||HAS_M6803||HAS_HD63701) -static void m6800_tx(int value) +static void m6800_tx(m68_state_t *m68_state, int value) { - m68xx.port2_data = (m68xx.port2_data & 0xef) | (value << 4); + m68_state->port2_data = (m68_state->port2_data & 0xef) | (value << 4); - if(m68xx.port2_ddr == 0xff) - io_write_byte_8be(M6803_PORT2,m68xx.port2_data); + if(m68_state->port2_ddr == 0xff) + io_write_byte_8be(M6803_PORT2,m68_state->port2_data); else - io_write_byte_8be(M6803_PORT2,(m68xx.port2_data & m68xx.port2_ddr) - | (io_read_byte_8be(M6803_PORT2) & (m68xx.port2_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT2,(m68_state->port2_data & m68_state->port2_ddr) + | (io_read_byte_8be(M6803_PORT2) & (m68_state->port2_ddr ^ 0xff))); } -static int m6800_rx(void) +static int m6800_rx(m68_state_t *m68_state) { return (io_read_byte_8be(M6803_PORT2) & M6800_PORT2_IO3) >> 3; } @@ -625,143 +656,145 @@ static int m6800_rx(void) static TIMER_CALLBACK(m6800_tx_tick) { int cpunum = param; + m68_state_t *m68_state = ptr; - if (m68xx.trcsr & M6800_TRCSR_TE) + if (m68_state->trcsr & M6800_TRCSR_TE) { // force Port 2 bit 4 as output - m68xx.port2_ddr |= M6800_PORT2_IO4; + m68_state->port2_ddr |= M6800_PORT2_IO4; - switch (m68xx.txstate) + switch (m68_state->txstate) { case M6800_TX_STATE_INIT: - m68xx.tx = 1; - m68xx.txbits++; + m68_state->tx = 1; + m68_state->txbits++; - if (m68xx.txbits == 10) + if (m68_state->txbits == 10) { - m68xx.txstate = M6800_TX_STATE_READY; - m68xx.txbits = M6800_SERIAL_START; + m68_state->txstate = M6800_TX_STATE_READY; + m68_state->txbits = M6800_SERIAL_START; } break; case M6800_TX_STATE_READY: - switch (m68xx.txbits) + switch (m68_state->txbits) { case M6800_SERIAL_START: - if (m68xx.trcsr & M6800_TRCSR_TDRE) + if (m68_state->trcsr & M6800_TRCSR_TDRE) { // transmit buffer is empty, send consecutive '1's - m68xx.tx = 1; + m68_state->tx = 1; } else { // transmit buffer is full, send data // load TDR to shift register - m68xx.tsr = m68xx.tdr; + m68_state->tsr = m68_state->tdr; // transmit buffer is empty, set TDRE flag - m68xx.trcsr |= M6800_TRCSR_TDRE; + m68_state->trcsr |= M6800_TRCSR_TDRE; // send start bit '0' - m68xx.tx = 0; + m68_state->tx = 0; - m68xx.txbits++; + m68_state->txbits++; } break; case M6800_SERIAL_STOP: // send stop bit '1' - m68xx.tx = 1; + m68_state->tx = 1; cpu_push_context(machine->cpu[cpunum]); - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); cpu_pop_context(); - m68xx.txbits = M6800_SERIAL_START; + m68_state->txbits = M6800_SERIAL_START; break; default: // send data bit '0' or '1' - m68xx.tx = m68xx.tsr & 0x01; + m68_state->tx = m68_state->tsr & 0x01; // shift transmit register - m68xx.tsr >>= 1; + m68_state->tsr >>= 1; - m68xx.txbits++; + m68_state->txbits++; break; } break; } } - m6800_tx(m68xx.tx); + m6800_tx(m68_state, m68_state->tx); } static TIMER_CALLBACK(m6800_rx_tick) { int cpunum = param; - - if (m68xx.trcsr & M6800_TRCSR_RE) + m68_state_t *m68_state =ptr; + + if (m68_state->trcsr & M6800_TRCSR_RE) { - if (m68xx.trcsr & M6800_TRCSR_WU) + if (m68_state->trcsr & M6800_TRCSR_WU) { // wait for 10 bits of '1' - if (m6800_rx() == 1) + if (m6800_rx(m68_state) == 1) { - m68xx.rxbits++; + m68_state->rxbits++; - if (m68xx.rxbits == 10) + if (m68_state->rxbits == 10) { - m68xx.trcsr &= ~M6800_TRCSR_WU; - m68xx.rxbits = M6800_SERIAL_START; + m68_state->trcsr &= ~M6800_TRCSR_WU; + m68_state->rxbits = M6800_SERIAL_START; } } else { - m68xx.rxbits = M6800_SERIAL_START; + m68_state->rxbits = M6800_SERIAL_START; } } else { // receive data - switch (m68xx.rxbits) + switch (m68_state->rxbits) { case M6800_SERIAL_START: - if (m6800_rx() == 0) + if (m6800_rx(m68_state) == 0) { // start bit found - m68xx.rxbits++; + m68_state->rxbits++; } break; case M6800_SERIAL_STOP: - if (m6800_rx() == 1) + if (m6800_rx(m68_state) == 1) { - if (m68xx.trcsr & M6800_TRCSR_RDRF) + if (m68_state->trcsr & M6800_TRCSR_RDRF) { // overrun error - m68xx.trcsr |= M6800_TRCSR_ORFE; + m68_state->trcsr |= M6800_TRCSR_ORFE; cpu_push_context(machine->cpu[cpunum]); - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); cpu_pop_context(); } else { - if (!(m68xx.trcsr & M6800_TRCSR_ORFE)) + if (!(m68_state->trcsr & M6800_TRCSR_ORFE)) { // transfer data into receive register - m68xx.rdr = m68xx.rsr; + m68_state->rdr = m68_state->rsr; // set RDRF flag - m68xx.trcsr |= M6800_TRCSR_RDRF; + m68_state->trcsr |= M6800_TRCSR_RDRF; cpu_push_context(machine->cpu[cpunum]); - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); cpu_pop_context(); } } @@ -770,31 +803,31 @@ static TIMER_CALLBACK(m6800_rx_tick) { // framing error - if (!(m68xx.trcsr & M6800_TRCSR_ORFE)) + if (!(m68_state->trcsr & M6800_TRCSR_ORFE)) { // transfer unframed data into receive register - m68xx.rdr = m68xx.rsr; + m68_state->rdr = m68_state->rsr; } - m68xx.trcsr |= M6800_TRCSR_ORFE; - m68xx.trcsr &= ~M6800_TRCSR_RDRF; + m68_state->trcsr |= M6800_TRCSR_ORFE; + m68_state->trcsr &= ~M6800_TRCSR_RDRF; cpu_push_context(machine->cpu[cpunum]); - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); cpu_pop_context(); } - m68xx.rxbits = M6800_SERIAL_START; + m68_state->rxbits = M6800_SERIAL_START; break; default: // shift receive register - m68xx.rsr >>= 1; + m68_state->rsr >>= 1; // receive bit into register - m68xx.rsr |= (m6800_rx() << 7); + m68_state->rsr |= (m6800_rx(m68_state) << 7); - m68xx.rxbits++; + m68_state->rxbits++; break; } } @@ -805,91 +838,94 @@ static TIMER_CALLBACK(m6800_rx_tick) /**************************************************************************** * Reset registers to their initial values ****************************************************************************/ -static void state_register(const char *type, int index) +static void state_register(m68_state_t *m68_state, const char *type, int index) { - state_save_register_item(type, index, m68xx.ppc.w.l); - state_save_register_item(type, index, m68xx.pc.w.l); - state_save_register_item(type, index, m68xx.s.w.l); - state_save_register_item(type, index, m68xx.x.w.l); - state_save_register_item(type, index, m68xx.d.w.l); - state_save_register_item(type, index, m68xx.cc); - state_save_register_item(type, index, m68xx.wai_state); - state_save_register_item(type, index, m68xx.nmi_state); - state_save_register_item_array(type, index, m68xx.irq_state); - state_save_register_item(type, index, m68xx.ic_eddge); + state_save_register_item(type, index, m68_state->ppc.w.l); + state_save_register_item(type, index, m68_state->pc.w.l); + state_save_register_item(type, index, m68_state->s.w.l); + state_save_register_item(type, index, m68_state->x.w.l); + state_save_register_item(type, index, m68_state->d.w.l); + state_save_register_item(type, index, m68_state->cc); + state_save_register_item(type, index, m68_state->wai_state); + state_save_register_item(type, index, m68_state->nmi_state); + state_save_register_item_array(type, index, m68_state->irq_state); + state_save_register_item(type, index, m68_state->ic_eddge); - state_save_register_item(type, index, m68xx.port1_ddr); - state_save_register_item(type, index, m68xx.port2_ddr); - state_save_register_item(type, index, m68xx.port3_ddr); - state_save_register_item(type, index, m68xx.port4_ddr); - state_save_register_item(type, index, m68xx.port1_data); - state_save_register_item(type, index, m68xx.port2_data); - state_save_register_item(type, index, m68xx.port3_data); - state_save_register_item(type, index, m68xx.port4_data); - state_save_register_item(type, index, m68xx.tcsr); - state_save_register_item(type, index, m68xx.pending_tcsr); - state_save_register_item(type, index, m68xx.irq2); - state_save_register_item(type, index, m68xx.ram_ctrl); + state_save_register_item(type, index, m68_state->port1_ddr); + state_save_register_item(type, index, m68_state->port2_ddr); + state_save_register_item(type, index, m68_state->port3_ddr); + state_save_register_item(type, index, m68_state->port4_ddr); + state_save_register_item(type, index, m68_state->port1_data); + state_save_register_item(type, index, m68_state->port2_data); + state_save_register_item(type, index, m68_state->port3_data); + state_save_register_item(type, index, m68_state->port4_data); + state_save_register_item(type, index, m68_state->tcsr); + state_save_register_item(type, index, m68_state->pending_tcsr); + state_save_register_item(type, index, m68_state->irq2); + state_save_register_item(type, index, m68_state->ram_ctrl); - state_save_register_item(type, index, m68xx.counter.d); - state_save_register_item(type, index, m68xx.output_compare.d); - state_save_register_item(type, index, m68xx.input_capture); - state_save_register_item(type, index, m68xx.timer_over.d); + state_save_register_item(type, index, m68_state->counter.d); + state_save_register_item(type, index, m68_state->output_compare.d); + state_save_register_item(type, index, m68_state->input_capture); + state_save_register_item(type, index, m68_state->timer_over.d); - state_save_register_item(type, index, m68xx.clock); - state_save_register_item(type, index, m68xx.trcsr); - state_save_register_item(type, index, m68xx.rmcr); - state_save_register_item(type, index, m68xx.rdr); - state_save_register_item(type, index, m68xx.tdr); - state_save_register_item(type, index, m68xx.rsr); - state_save_register_item(type, index, m68xx.tsr); - state_save_register_item(type, index, m68xx.rxbits); - state_save_register_item(type, index, m68xx.txbits); - state_save_register_item(type, index, m68xx.txstate); - state_save_register_item(type, index, m68xx.trcsr_read); - state_save_register_item(type, index, m68xx.tx); + state_save_register_item(type, index, m68_state->clock); + state_save_register_item(type, index, m68_state->trcsr); + state_save_register_item(type, index, m68_state->rmcr); + state_save_register_item(type, index, m68_state->rdr); + state_save_register_item(type, index, m68_state->tdr); + state_save_register_item(type, index, m68_state->rsr); + state_save_register_item(type, index, m68_state->tsr); + state_save_register_item(type, index, m68_state->rxbits); + state_save_register_item(type, index, m68_state->txbits); + state_save_register_item(type, index, m68_state->txstate); + state_save_register_item(type, index, m68_state->trcsr_read); + state_save_register_item(type, index, m68_state->tx); } static CPU_INIT( m6800 ) { -// m68xx.subtype = SUBTYPE_M6800; - m68xx.insn = m6800_insn; - m68xx.cycles = cycles_6800; - m68xx.irq_callback = irqcallback; - m68xx.device = device; - state_register("m6800", index); + m68_state_t *m68_state = device->token; +// m68_state->subtype = SUBTYPE_M6800; + m68_state->insn = m6800_insn; + m68_state->cycles = cycles_6800; + m68_state->irq_callback = irqcallback; + m68_state->device = device; + state_register(m68_state, "m6800", index); } static CPU_RESET( m6800 ) { + m68_state_t *m68_state = device->token; + SEI; /* IRQ disabled */ PCD = RM16( 0xfffe ); - CHANGE_PC(); + CHANGE_PC(m68_state); - m68xx.wai_state = 0; - m68xx.nmi_state = 0; - m68xx.irq_state[M6800_IRQ_LINE] = 0; - m68xx.irq_state[M6800_TIN_LINE] = 0; - m68xx.ic_eddge = 0; + m68_state->wai_state = 0; + m68_state->nmi_state = 0; + m68_state->irq_state[M6800_IRQ_LINE] = 0; + m68_state->irq_state[M6800_TIN_LINE] = 0; + m68_state->ic_eddge = 0; - m68xx.port1_ddr = 0x00; - m68xx.port2_ddr = 0x00; + m68_state->port1_ddr = 0x00; + m68_state->port2_ddr = 0x00; /* TODO: on reset port 2 should be read to determine the operating mode (bits 0-2) */ - m68xx.tcsr = 0x00; - m68xx.pending_tcsr = 0x00; - m68xx.irq2 = 0; + m68_state->tcsr = 0x00; + m68_state->pending_tcsr = 0x00; + m68_state->irq2 = 0; CTD = 0x0000; OCD = 0xffff; TOD = 0xffff; - m68xx.ram_ctrl |= 0x40; + m68_state->ram_ctrl |= 0x40; - m68xx.trcsr = M6800_TRCSR_TDRE; - m68xx.rmcr = 0; - if (m6800_rx_timer) timer_enable(m6800_rx_timer, 0); - if (m6800_tx_timer) timer_enable(m6800_tx_timer, 0); - m68xx.txstate = M6800_TX_STATE_INIT; - m68xx.txbits = m68xx.rxbits = 0; - m68xx.trcsr_read = 0; + m68_state->trcsr = M6800_TRCSR_TDRE; + m68_state->rmcr = 0; + if (m68_state->m6800_rx_timer) timer_enable(m68_state->m6800_rx_timer, 0); + if (m68_state->m6800_tx_timer) timer_enable(m68_state->m6800_tx_timer, 0); + m68_state->txstate = M6800_TX_STATE_INIT; + m68_state->txbits = m68_state->rxbits = 0; + m68_state->trcsr_read = 0; } /**************************************************************************** @@ -905,8 +941,6 @@ static CPU_EXIT( m6800 ) ****************************************************************************/ static CPU_GET_CONTEXT( m6800 ) { - if( dst ) - *(m6800_Regs*)dst = m68xx; } @@ -915,32 +949,33 @@ static CPU_GET_CONTEXT( m6800 ) ****************************************************************************/ static CPU_SET_CONTEXT( m6800 ) { - if( src ) - m68xx = *(m6800_Regs*)src; - CHANGE_PC(); - CHECK_IRQ_LINES(); /* HJB 990417 */ + m68_state_t *m68_state = src; + + token = src; + CHANGE_PC(m68_state); + CHECK_IRQ_LINES(m68_state); /* HJB 990417 */ } -static void set_irq_line(int irqline, int state) +static void set_irq_line(m68_state_t *m68_state, int irqline, int state) { if (irqline == INPUT_LINE_NMI) { - if (m68xx.nmi_state == state) return; + if (m68_state->nmi_state == state) return; LOG(("M6800#%d set_nmi_line %d \n", cpunum_get_active(), state)); - m68xx.nmi_state = state; + m68_state->nmi_state = state; if (state == CLEAR_LINE) return; /* NMI */ - ENTER_INTERRUPT("M6800#%d take NMI\n",0xfffc); + enter_interrupt(m68_state, "M6800#%d take NMI\n",0xfffc); } else { int eddge; - if (m68xx.irq_state[irqline] == state) return; + if (m68_state->irq_state[irqline] == state) return; LOG(("M6800#%d set_irq_line %d,%d\n", cpunum_get_active(), irqline, state)); - m68xx.irq_state[irqline] = state; + m68_state->irq_state[irqline] = state; switch(irqline) { @@ -949,20 +984,287 @@ static void set_irq_line(int irqline, int state) break; case M6800_TIN_LINE: eddge = (state == CLEAR_LINE ) ? 2 : 0; - if( ((m68xx.tcsr&TCSR_IEDG) ^ (state==CLEAR_LINE ? TCSR_IEDG : 0))==0 ) + if( ((m68_state->tcsr&TCSR_IEDG) ^ (state==CLEAR_LINE ? TCSR_IEDG : 0))==0 ) return; /* active edge in */ - m68xx.tcsr |= TCSR_ICF; - m68xx.pending_tcsr |= TCSR_ICF; - m68xx.input_capture = CT; + m68_state->tcsr |= TCSR_ICF; + m68_state->pending_tcsr |= TCSR_ICF; + m68_state->input_capture = CT; MODIFIED_tcsr; if( !(CC & 0x10) ) - m6800_check_irq2(); + m6800_check_irq2(m68_state); break; default: return; } - CHECK_IRQ_LINES(); /* HJB 990417 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990417 */ + } +} + +/**************************************************************************** + * Execute one instruction + ****************************************************************************/ + +INLINE void m6800_execute_one(m68_state_t *m68_state, UINT8 ireg) +{ + switch( ireg ) + { + case 0x00: illegal(m68_state); break; + case 0x01: nop(m68_state); break; + case 0x02: illegal(m68_state); break; + case 0x03: illegal(m68_state); break; + case 0x04: illegal(m68_state); break; + case 0x05: illegal(m68_state); break; + case 0x06: tap(m68_state); break; + case 0x07: tpa(m68_state); break; + case 0x08: inx(m68_state); break; + case 0x09: dex(m68_state); break; + case 0x0A: CLV; break; + case 0x0B: SEV; break; + case 0x0C: CLC; break; + case 0x0D: SEC; break; + case 0x0E: cli(m68_state); break; + case 0x0F: sei(m68_state); break; + case 0x10: sba(m68_state); break; + case 0x11: cba(m68_state); break; + case 0x12: illegal(m68_state); break; + case 0x13: illegal(m68_state); break; + case 0x14: illegal(m68_state); break; + case 0x15: illegal(m68_state); break; + case 0x16: tab(m68_state); break; + case 0x17: tba(m68_state); break; + case 0x18: illegal(m68_state); break; + case 0x19: daa(m68_state); break; + case 0x1a: illegal(m68_state); break; + case 0x1b: aba(m68_state); break; + case 0x1c: illegal(m68_state); break; + case 0x1d: illegal(m68_state); break; + case 0x1e: illegal(m68_state); break; + case 0x1f: illegal(m68_state); break; + case 0x20: bra(m68_state); break; + case 0x21: brn(m68_state); break; + case 0x22: bhi(m68_state); break; + case 0x23: bls(m68_state); break; + case 0x24: bcc(m68_state); break; + case 0x25: bcs(m68_state); break; + case 0x26: bne(m68_state); break; + case 0x27: beq(m68_state); break; + case 0x28: bvc(m68_state); break; + case 0x29: bvs(m68_state); break; + case 0x2a: bpl(m68_state); break; + case 0x2b: bmi(m68_state); break; + case 0x2c: bge(m68_state); break; + case 0x2d: blt(m68_state); break; + case 0x2e: bgt(m68_state); break; + case 0x2f: ble(m68_state); break; + case 0x30: tsx(m68_state); break; + case 0x31: ins(m68_state); break; + case 0x32: pula(m68_state); break; + case 0x33: pulb(m68_state); break; + case 0x34: des(m68_state); break; + case 0x35: txs(m68_state); break; + case 0x36: psha(m68_state); break; + case 0x37: pshb(m68_state); break; + case 0x38: illegal(m68_state); break; + case 0x39: rts(m68_state); break; + case 0x3a: illegal(m68_state); break; + case 0x3b: rti(m68_state); break; + case 0x3c: illegal(m68_state); break; + case 0x3d: illegal(m68_state); break; + case 0x3e: wai(m68_state); break; + case 0x3f: swi(m68_state); break; + case 0x40: nega(m68_state); break; + case 0x41: illegal(m68_state); break; + case 0x42: illegal(m68_state); break; + case 0x43: coma(m68_state); break; + case 0x44: lsra(m68_state); break; + case 0x45: illegal(m68_state); break; + case 0x46: rora(m68_state); break; + case 0x47: asra(m68_state); break; + case 0x48: asla(m68_state); break; + case 0x49: rola(m68_state); break; + case 0x4a: deca(m68_state); break; + case 0x4b: illegal(m68_state); break; + case 0x4c: inca(m68_state); break; + case 0x4d: tsta(m68_state); break; + case 0x4e: illegal(m68_state); break; + case 0x4f: clra(m68_state); break; + case 0x50: negb(m68_state); break; + case 0x51: illegal(m68_state); break; + case 0x52: illegal(m68_state); break; + case 0x53: comb(m68_state); break; + case 0x54: lsrb(m68_state); break; + case 0x55: illegal(m68_state); break; + case 0x56: rorb(m68_state); break; + case 0x57: asrb(m68_state); break; + case 0x58: aslb(m68_state); break; + case 0x59: rolb(m68_state); break; + case 0x5a: decb(m68_state); break; + case 0x5b: illegal(m68_state); break; + case 0x5c: incb(m68_state); break; + case 0x5d: tstb(m68_state); break; + case 0x5e: illegal(m68_state); break; + case 0x5f: clrb(m68_state); break; + case 0x60: neg_ix(m68_state); break; + case 0x61: illegal(m68_state); break; + case 0x62: illegal(m68_state); break; + case 0x63: com_ix(m68_state); break; + case 0x64: lsr_ix(m68_state); break; + case 0x65: illegal(m68_state); break; + case 0x66: ror_ix(m68_state); break; + case 0x67: asr_ix(m68_state); break; + case 0x68: asl_ix(m68_state); break; + case 0x69: rol_ix(m68_state); break; + case 0x6a: dec_ix(m68_state); break; + case 0x6b: illegal(m68_state); break; + case 0x6c: inc_ix(m68_state); break; + case 0x6d: tst_ix(m68_state); break; + case 0x6e: jmp_ix(m68_state); break; + case 0x6f: clr_ix(m68_state); break; + case 0x70: neg_ex(m68_state); break; + case 0x71: illegal(m68_state); break; + case 0x72: illegal(m68_state); break; + case 0x73: com_ex(m68_state); break; + case 0x74: lsr_ex(m68_state); break; + case 0x75: illegal(m68_state); break; + case 0x76: ror_ex(m68_state); break; + case 0x77: asr_ex(m68_state); break; + case 0x78: asl_ex(m68_state); break; + case 0x79: rol_ex(m68_state); break; + case 0x7a: dec_ex(m68_state); break; + case 0x7b: illegal(m68_state); break; + case 0x7c: inc_ex(m68_state); break; + case 0x7d: tst_ex(m68_state); break; + case 0x7e: jmp_ex(m68_state); break; + case 0x7f: clr_ex(m68_state); break; + case 0x80: suba_im(m68_state); break; + case 0x81: cmpa_im(m68_state); break; + case 0x82: sbca_im(m68_state); break; + case 0x83: illegal(m68_state); break; + case 0x84: anda_im(m68_state); break; + case 0x85: bita_im(m68_state); break; + case 0x86: lda_im(m68_state); break; + case 0x87: sta_im(m68_state); break; + case 0x88: eora_im(m68_state); break; + case 0x89: adca_im(m68_state); break; + case 0x8a: ora_im(m68_state); break; + case 0x8b: adda_im(m68_state); break; + case 0x8c: cmpx_im(m68_state); break; + case 0x8d: bsr(m68_state); break; + case 0x8e: lds_im(m68_state); break; + case 0x8f: sts_im(m68_state); /* orthogonality */ break; + case 0x90: suba_di(m68_state); break; + case 0x91: cmpa_di(m68_state); break; + case 0x92: sbca_di(m68_state); break; + case 0x93: illegal(m68_state); break; + case 0x94: anda_di(m68_state); break; + case 0x95: bita_di(m68_state); break; + case 0x96: lda_di(m68_state); break; + case 0x97: sta_di(m68_state); break; + case 0x98: eora_di(m68_state); break; + case 0x99: adca_di(m68_state); break; + case 0x9a: ora_di(m68_state); break; + case 0x9b: adda_di(m68_state); break; + case 0x9c: cmpx_di(m68_state); break; + case 0x9d: jsr_di(m68_state); break; + case 0x9e: lds_di(m68_state); break; + case 0x9f: sts_di(m68_state); break; + case 0xa0: suba_ix(m68_state); break; + case 0xa1: cmpa_ix(m68_state); break; + case 0xa2: sbca_ix(m68_state); break; + case 0xa3: illegal(m68_state); break; + case 0xa4: anda_ix(m68_state); break; + case 0xa5: bita_ix(m68_state); break; + case 0xa6: lda_ix(m68_state); break; + case 0xa7: sta_ix(m68_state); break; + case 0xa8: eora_ix(m68_state); break; + case 0xa9: adca_ix(m68_state); break; + case 0xaa: ora_ix(m68_state); break; + case 0xab: adda_ix(m68_state); break; + case 0xac: cmpx_ix(m68_state); break; + case 0xad: jsr_ix(m68_state); break; + case 0xae: lds_ix(m68_state); break; + case 0xaf: sts_ix(m68_state); break; + case 0xb0: suba_ex(m68_state); break; + case 0xb1: cmpa_ex(m68_state); break; + case 0xb2: sbca_ex(m68_state); break; + case 0xb3: illegal(m68_state); break; + case 0xb4: anda_ex(m68_state); break; + case 0xb5: bita_ex(m68_state); break; + case 0xb6: lda_ex(m68_state); break; + case 0xb7: sta_ex(m68_state); break; + case 0xb8: eora_ex(m68_state); break; + case 0xb9: adca_ex(m68_state); break; + case 0xba: ora_ex(m68_state); break; + case 0xbb: adda_ex(m68_state); break; + case 0xbc: cmpx_ex(m68_state); break; + case 0xbd: jsr_ex(m68_state); break; + case 0xbe: lds_ex(m68_state); break; + case 0xbf: sts_ex(m68_state); break; + case 0xc0: subb_im(m68_state); break; + case 0xc1: cmpb_im(m68_state); break; + case 0xc2: sbcb_im(m68_state); break; + case 0xc3: illegal(m68_state); break; + case 0xc4: andb_im(m68_state); break; + case 0xc5: bitb_im(m68_state); break; + case 0xc6: ldb_im(m68_state); break; + case 0xc7: stb_im(m68_state); break; + case 0xc8: eorb_im(m68_state); break; + case 0xc9: adcb_im(m68_state); break; + case 0xca: orb_im(m68_state); break; + case 0xcb: addb_im(m68_state); break; + case 0xcc: illegal(m68_state); break; + case 0xcd: illegal(m68_state); break; + case 0xce: ldx_im(m68_state); break; + case 0xcf: stx_im(m68_state); break; + case 0xd0: subb_di(m68_state); break; + case 0xd1: cmpb_di(m68_state); break; + case 0xd2: sbcb_di(m68_state); break; + case 0xd3: illegal(m68_state); break; + case 0xd4: andb_di(m68_state); break; + case 0xd5: bitb_di(m68_state); break; + case 0xd6: ldb_di(m68_state); break; + case 0xd7: stb_di(m68_state); break; + case 0xd8: eorb_di(m68_state); break; + case 0xd9: adcb_di(m68_state); break; + case 0xda: orb_di(m68_state); break; + case 0xdb: addb_di(m68_state); break; + case 0xdc: illegal(m68_state); break; + case 0xdd: illegal(m68_state); break; + case 0xde: ldx_di(m68_state); break; + case 0xdf: stx_di(m68_state); break; + case 0xe0: subb_ix(m68_state); break; + case 0xe1: cmpb_ix(m68_state); break; + case 0xe2: sbcb_ix(m68_state); break; + case 0xe3: illegal(m68_state); break; + case 0xe4: andb_ix(m68_state); break; + case 0xe5: bitb_ix(m68_state); break; + case 0xe6: ldb_ix(m68_state); break; + case 0xe7: stb_ix(m68_state); break; + case 0xe8: eorb_ix(m68_state); break; + case 0xe9: adcb_ix(m68_state); break; + case 0xea: orb_ix(m68_state); break; + case 0xeb: addb_ix(m68_state); break; + case 0xec: illegal(m68_state); break; + case 0xed: illegal(m68_state); break; + case 0xee: ldx_ix(m68_state); break; + case 0xef: stx_ix(m68_state); break; + case 0xf0: subb_ex(m68_state); break; + case 0xf1: cmpb_ex(m68_state); break; + case 0xf2: sbcb_ex(m68_state); break; + case 0xf3: illegal(m68_state); break; + case 0xf4: andb_ex(m68_state); break; + case 0xf5: bitb_ex(m68_state); break; + case 0xf6: ldb_ex(m68_state); break; + case 0xf7: stb_ex(m68_state); break; + case 0xf8: eorb_ex(m68_state); break; + case 0xf9: adcb_ex(m68_state); break; + case 0xfa: orb_ex(m68_state); break; + case 0xfb: addb_ex(m68_state); break; + case 0xfc: addx_ex(m68_state); break; + case 0xfd: illegal(m68_state); break; + case 0xfe: ldx_ex(m68_state); break; + case 0xff: stx_ex(m68_state); break; } } @@ -971,16 +1273,17 @@ static void set_irq_line(int irqline, int state) ****************************************************************************/ static CPU_EXECUTE( m6800 ) { + m68_state_t *m68_state = device->token; UINT8 ireg; - m6800_ICount = cycles; + m68_state->icount = cycles; - CLEANUP_conters; - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + CLEANUP_COUNTERS(); + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; do { - if( m68xx.wai_state & M6800_WAI ) + if( m68_state->wai_state & M6800_WAI ) { EAT_CYCLES; } @@ -990,274 +1293,15 @@ static CPU_EXECUTE( m6800 ) debugger_instruction_hook(device->machine, PCD); ireg=M_RDOP(PCD); PC++; - - switch( ireg ) - { - case 0x00: illegal(); break; - case 0x01: nop(); break; - case 0x02: illegal(); break; - case 0x03: illegal(); break; - case 0x04: illegal(); break; - case 0x05: illegal(); break; - case 0x06: tap(); break; - case 0x07: tpa(); break; - case 0x08: inx(); break; - case 0x09: dex(); break; - case 0x0A: CLV; break; - case 0x0B: SEV; break; - case 0x0C: CLC; break; - case 0x0D: SEC; break; - case 0x0E: cli(); break; - case 0x0F: sei(); break; - case 0x10: sba(); break; - case 0x11: cba(); break; - case 0x12: illegal(); break; - case 0x13: illegal(); break; - case 0x14: illegal(); break; - case 0x15: illegal(); break; - case 0x16: tab(); break; - case 0x17: tba(); break; - case 0x18: illegal(); break; - case 0x19: daa(); break; - case 0x1a: illegal(); break; - case 0x1b: aba(); break; - case 0x1c: illegal(); break; - case 0x1d: illegal(); break; - case 0x1e: illegal(); break; - case 0x1f: illegal(); 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: tsx(); break; - case 0x31: ins(); break; - case 0x32: pula(); break; - case 0x33: pulb(); break; - case 0x34: des(); break; - case 0x35: txs(); break; - case 0x36: psha(); break; - case 0x37: pshb(); break; - case 0x38: illegal(); break; - case 0x39: rts(); break; - case 0x3a: illegal(); break; - case 0x3b: rti(); break; - case 0x3c: illegal(); break; - case 0x3d: illegal(); break; - case 0x3e: wai(); break; - case 0x3f: swi(); break; - case 0x40: nega(); break; - case 0x41: illegal(); break; - case 0x42: illegal(); break; - case 0x43: coma(); break; - case 0x44: lsra(); break; - case 0x45: illegal(); break; - case 0x46: rora(); break; - case 0x47: asra(); break; - case 0x48: asla(); break; - case 0x49: rola(); break; - case 0x4a: deca(); break; - case 0x4b: illegal(); break; - case 0x4c: inca(); break; - case 0x4d: tsta(); break; - case 0x4e: illegal(); break; - case 0x4f: clra(); break; - case 0x50: negb(); break; - case 0x51: illegal(); break; - case 0x52: illegal(); break; - case 0x53: comb(); break; - case 0x54: lsrb(); break; - case 0x55: illegal(); break; - case 0x56: rorb(); break; - case 0x57: asrb(); break; - case 0x58: aslb(); break; - case 0x59: rolb(); break; - case 0x5a: decb(); break; - case 0x5b: illegal(); break; - case 0x5c: incb(); break; - case 0x5d: tstb(); break; - case 0x5e: illegal(); break; - case 0x5f: clrb(); break; - case 0x60: neg_ix(); break; - case 0x61: illegal(); break; - case 0x62: illegal(); break; - case 0x63: com_ix(); break; - case 0x64: lsr_ix(); break; - case 0x65: illegal(); 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: illegal(); 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: illegal(); break; - case 0x72: illegal(); break; - case 0x73: com_ex(); break; - case 0x74: lsr_ex(); break; - case 0x75: illegal(); 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: illegal(); 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: illegal(); break; - case 0x84: anda_im(); break; - case 0x85: bita_im(); break; - case 0x86: lda_im(); break; - case 0x87: sta_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: lds_im(); break; - case 0x8f: sts_im(); /* orthogonality */ break; - case 0x90: suba_di(); break; - case 0x91: cmpa_di(); break; - case 0x92: sbca_di(); break; - case 0x93: illegal(); 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: lds_di(); break; - case 0x9f: sts_di(); break; - case 0xa0: suba_ix(); break; - case 0xa1: cmpa_ix(); break; - case 0xa2: sbca_ix(); break; - case 0xa3: illegal(); 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: lds_ix(); break; - case 0xaf: sts_ix(); break; - case 0xb0: suba_ex(); break; - case 0xb1: cmpa_ex(); break; - case 0xb2: sbca_ex(); break; - case 0xb3: illegal(); 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: lds_ex(); break; - case 0xbf: sts_ex(); break; - case 0xc0: subb_im(); break; - case 0xc1: cmpb_im(); break; - case 0xc2: sbcb_im(); break; - case 0xc3: illegal(); break; - case 0xc4: andb_im(); break; - case 0xc5: bitb_im(); break; - case 0xc6: ldb_im(); break; - case 0xc7: stb_im(); break; - case 0xc8: eorb_im(); break; - case 0xc9: adcb_im(); break; - case 0xca: orb_im(); break; - case 0xcb: addb_im(); break; - case 0xcc: illegal(); break; - case 0xcd: illegal(); break; - case 0xce: ldx_im(); break; - case 0xcf: stx_im(); break; - case 0xd0: subb_di(); break; - case 0xd1: cmpb_di(); break; - case 0xd2: sbcb_di(); break; - case 0xd3: illegal(); 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: illegal(); break; - case 0xdd: illegal(); break; - case 0xde: ldx_di(); break; - case 0xdf: stx_di(); break; - case 0xe0: subb_ix(); break; - case 0xe1: cmpb_ix(); break; - case 0xe2: sbcb_ix(); break; - case 0xe3: illegal(); 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: illegal(); break; - case 0xed: illegal(); break; - case 0xee: ldx_ix(); break; - case 0xef: stx_ix(); break; - case 0xf0: subb_ex(); break; - case 0xf1: cmpb_ex(); break; - case 0xf2: sbcb_ex(); break; - case 0xf3: illegal(); 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: addx_ex(); break; - case 0xfd: illegal(); break; - case 0xfe: ldx_ex(); break; - case 0xff: stx_ex(); break; - } - INCREMENT_COUNTER(cycles_6800[ireg]); + m6800_execute_one(m68_state, ireg); + increment_counter(m68_state, cycles_6800[ireg]); } - } while( m6800_ICount>0 ); + } while( m68_state->icount>0 ); - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; - return cycles - m6800_ICount; + return cycles - m68_state->icount; } /**************************************************************************** @@ -1266,17 +1310,18 @@ static CPU_EXECUTE( m6800 ) #if (HAS_M6801) static CPU_INIT( m6801 ) { -// m68xx.subtype = SUBTYPE_M6801; - m68xx.insn = m6803_insn; - m68xx.cycles = cycles_6803; - m68xx.irq_callback = irqcallback; - m68xx.device = device; + m68_state_t *m68_state = device->token; +// m68_state->subtype = SUBTYPE_M6801; + m68_state->insn = m6803_insn; + m68_state->cycles = cycles_6803; + m68_state->irq_callback = irqcallback; + m68_state->device = device; - m68xx.clock = clock; - m6800_rx_timer = timer_alloc(m6800_rx_tick, NULL); - m6800_tx_timer = timer_alloc(m6800_tx_tick, NULL); + m68_state->clock = clock; + m68_state->m6800_rx_timer = timer_alloc(m6800_rx_tick, m68_state); + m68_state->m6800_tx_timer = timer_alloc(m6800_tx_tick, m68_state); - state_register("m6801", index); + state_register(m68_state, "m6801", index); } #endif @@ -1286,12 +1331,13 @@ static CPU_INIT( m6801 ) #if (HAS_M6802) static CPU_INIT( m6802 ) { -// m68xx.subtype = SUBTYPE_M6802; - m68xx.insn = m6800_insn; - m68xx.cycles = cycles_6800; - m68xx.irq_callback = irqcallback; - m68xx.device = device; - state_register("m6802", index); + m68_state_t *m68_state = device->token; + // m68_state->subtype = SUBTYPE_M6802; + m68_state->insn = m6800_insn; + m68_state->cycles = cycles_6800; + m68_state->irq_callback = irqcallback; + m68_state->device = device; + state_register(m68_state, "m6802", index); } #endif @@ -1301,36 +1347,305 @@ static CPU_INIT( m6802 ) #if (HAS_M6803) static CPU_INIT( m6803 ) { -// m68xx.subtype = SUBTYPE_M6803; - m68xx.insn = m6803_insn; - m68xx.cycles = cycles_6803; - m68xx.irq_callback = irqcallback; - m68xx.device = device; + m68_state_t *m68_state = device->token; + // m68_state->subtype = SUBTYPE_M6803; + m68_state->insn = m6803_insn; + m68_state->cycles = cycles_6803; + m68_state->irq_callback = irqcallback; + m68_state->device = device; - m68xx.clock = clock; - m6800_rx_timer = timer_alloc(m6800_rx_tick, NULL); - m6800_tx_timer = timer_alloc(m6800_tx_tick, NULL); + m68_state->clock = clock; + m68_state->m6800_rx_timer = timer_alloc(m6800_rx_tick, m68_state); + m68_state->m6800_tx_timer = timer_alloc(m6800_tx_tick, m68_state); - state_register("m6803", index); + state_register(m68_state, "m6803", index); } #endif +/**************************************************************************** + * Execute one instruction + ****************************************************************************/ + +INLINE void m6803_execute_one(m68_state_t *m68_state, UINT8 ireg) +{ + switch( ireg ) + { + case 0x00: illegal(m68_state); break; + case 0x01: nop(m68_state); break; + case 0x02: illegal(m68_state); break; + case 0x03: illegal(m68_state); break; + case 0x04: lsrd(m68_state); /* 6803 only */; break; + case 0x05: asld(m68_state); /* 6803 only */; break; + case 0x06: tap(m68_state); break; + case 0x07: tpa(m68_state); break; + case 0x08: inx(m68_state); break; + case 0x09: dex(m68_state); break; + case 0x0A: CLV; break; + case 0x0B: SEV; break; + case 0x0C: CLC; break; + case 0x0D: SEC; break; + case 0x0E: cli(m68_state); break; + case 0x0F: sei(m68_state); break; + case 0x10: sba(m68_state); break; + case 0x11: cba(m68_state); break; + case 0x12: illegal(m68_state); break; + case 0x13: illegal(m68_state); break; + case 0x14: illegal(m68_state); break; + case 0x15: illegal(m68_state); break; + case 0x16: tab(m68_state); break; + case 0x17: tba(m68_state); break; + case 0x18: illegal(m68_state); break; + case 0x19: daa(m68_state); break; + case 0x1a: illegal(m68_state); break; + case 0x1b: aba(m68_state); break; + case 0x1c: illegal(m68_state); break; + case 0x1d: illegal(m68_state); break; + case 0x1e: illegal(m68_state); break; + case 0x1f: illegal(m68_state); break; + case 0x20: bra(m68_state); break; + case 0x21: brn(m68_state); break; + case 0x22: bhi(m68_state); break; + case 0x23: bls(m68_state); break; + case 0x24: bcc(m68_state); break; + case 0x25: bcs(m68_state); break; + case 0x26: bne(m68_state); break; + case 0x27: beq(m68_state); break; + case 0x28: bvc(m68_state); break; + case 0x29: bvs(m68_state); break; + case 0x2a: bpl(m68_state); break; + case 0x2b: bmi(m68_state); break; + case 0x2c: bge(m68_state); break; + case 0x2d: blt(m68_state); break; + case 0x2e: bgt(m68_state); break; + case 0x2f: ble(m68_state); break; + case 0x30: tsx(m68_state); break; + case 0x31: ins(m68_state); break; + case 0x32: pula(m68_state); break; + case 0x33: pulb(m68_state); break; + case 0x34: des(m68_state); break; + case 0x35: txs(m68_state); break; + case 0x36: psha(m68_state); break; + case 0x37: pshb(m68_state); break; + case 0x38: pulx(m68_state); /* 6803 only */ break; + case 0x39: rts(m68_state); break; + case 0x3a: abx(m68_state); /* 6803 only */ break; + case 0x3b: rti(m68_state); break; + case 0x3c: pshx(m68_state); /* 6803 only */ break; + case 0x3d: mul(m68_state); /* 6803 only */ break; + case 0x3e: wai(m68_state); break; + case 0x3f: swi(m68_state); break; + case 0x40: nega(m68_state); break; + case 0x41: illegal(m68_state); break; + case 0x42: illegal(m68_state); break; + case 0x43: coma(m68_state); break; + case 0x44: lsra(m68_state); break; + case 0x45: illegal(m68_state); break; + case 0x46: rora(m68_state); break; + case 0x47: asra(m68_state); break; + case 0x48: asla(m68_state); break; + case 0x49: rola(m68_state); break; + case 0x4a: deca(m68_state); break; + case 0x4b: illegal(m68_state); break; + case 0x4c: inca(m68_state); break; + case 0x4d: tsta(m68_state); break; + case 0x4e: illegal(m68_state); break; + case 0x4f: clra(m68_state); break; + case 0x50: negb(m68_state); break; + case 0x51: illegal(m68_state); break; + case 0x52: illegal(m68_state); break; + case 0x53: comb(m68_state); break; + case 0x54: lsrb(m68_state); break; + case 0x55: illegal(m68_state); break; + case 0x56: rorb(m68_state); break; + case 0x57: asrb(m68_state); break; + case 0x58: aslb(m68_state); break; + case 0x59: rolb(m68_state); break; + case 0x5a: decb(m68_state); break; + case 0x5b: illegal(m68_state); break; + case 0x5c: incb(m68_state); break; + case 0x5d: tstb(m68_state); break; + case 0x5e: illegal(m68_state); break; + case 0x5f: clrb(m68_state); break; + case 0x60: neg_ix(m68_state); break; + case 0x61: illegal(m68_state); break; + case 0x62: illegal(m68_state); break; + case 0x63: com_ix(m68_state); break; + case 0x64: lsr_ix(m68_state); break; + case 0x65: illegal(m68_state); break; + case 0x66: ror_ix(m68_state); break; + case 0x67: asr_ix(m68_state); break; + case 0x68: asl_ix(m68_state); break; + case 0x69: rol_ix(m68_state); break; + case 0x6a: dec_ix(m68_state); break; + case 0x6b: illegal(m68_state); break; + case 0x6c: inc_ix(m68_state); break; + case 0x6d: tst_ix(m68_state); break; + case 0x6e: jmp_ix(m68_state); break; + case 0x6f: clr_ix(m68_state); break; + case 0x70: neg_ex(m68_state); break; + case 0x71: illegal(m68_state); break; + case 0x72: illegal(m68_state); break; + case 0x73: com_ex(m68_state); break; + case 0x74: lsr_ex(m68_state); break; + case 0x75: illegal(m68_state); break; + case 0x76: ror_ex(m68_state); break; + case 0x77: asr_ex(m68_state); break; + case 0x78: asl_ex(m68_state); break; + case 0x79: rol_ex(m68_state); break; + case 0x7a: dec_ex(m68_state); break; + case 0x7b: illegal(m68_state); break; + case 0x7c: inc_ex(m68_state); break; + case 0x7d: tst_ex(m68_state); break; + case 0x7e: jmp_ex(m68_state); break; + case 0x7f: clr_ex(m68_state); break; + case 0x80: suba_im(m68_state); break; + case 0x81: cmpa_im(m68_state); break; + case 0x82: sbca_im(m68_state); break; + case 0x83: subd_im(m68_state); /* 6803 only */ break; + case 0x84: anda_im(m68_state); break; + case 0x85: bita_im(m68_state); break; + case 0x86: lda_im(m68_state); break; + case 0x87: sta_im(m68_state); break; + case 0x88: eora_im(m68_state); break; + case 0x89: adca_im(m68_state); break; + case 0x8a: ora_im(m68_state); break; + case 0x8b: adda_im(m68_state); break; + case 0x8c: cpx_im(m68_state); /* 6803 difference */ break; + case 0x8d: bsr(m68_state); break; + case 0x8e: lds_im(m68_state); break; + case 0x8f: sts_im(m68_state); /* orthogonality */ break; + case 0x90: suba_di(m68_state); break; + case 0x91: cmpa_di(m68_state); break; + case 0x92: sbca_di(m68_state); break; + case 0x93: subd_di(m68_state); /* 6803 only */ break; + case 0x94: anda_di(m68_state); break; + case 0x95: bita_di(m68_state); break; + case 0x96: lda_di(m68_state); break; + case 0x97: sta_di(m68_state); break; + case 0x98: eora_di(m68_state); break; + case 0x99: adca_di(m68_state); break; + case 0x9a: ora_di(m68_state); break; + case 0x9b: adda_di(m68_state); break; + case 0x9c: cpx_di(m68_state); /* 6803 difference */ break; + case 0x9d: jsr_di(m68_state); break; + case 0x9e: lds_di(m68_state); break; + case 0x9f: sts_di(m68_state); break; + case 0xa0: suba_ix(m68_state); break; + case 0xa1: cmpa_ix(m68_state); break; + case 0xa2: sbca_ix(m68_state); break; + case 0xa3: subd_ix(m68_state); /* 6803 only */ break; + case 0xa4: anda_ix(m68_state); break; + case 0xa5: bita_ix(m68_state); break; + case 0xa6: lda_ix(m68_state); break; + case 0xa7: sta_ix(m68_state); break; + case 0xa8: eora_ix(m68_state); break; + case 0xa9: adca_ix(m68_state); break; + case 0xaa: ora_ix(m68_state); break; + case 0xab: adda_ix(m68_state); break; + case 0xac: cpx_ix(m68_state); /* 6803 difference */ break; + case 0xad: jsr_ix(m68_state); break; + case 0xae: lds_ix(m68_state); break; + case 0xaf: sts_ix(m68_state); break; + case 0xb0: suba_ex(m68_state); break; + case 0xb1: cmpa_ex(m68_state); break; + case 0xb2: sbca_ex(m68_state); break; + case 0xb3: subd_ex(m68_state); /* 6803 only */ break; + case 0xb4: anda_ex(m68_state); break; + case 0xb5: bita_ex(m68_state); break; + case 0xb6: lda_ex(m68_state); break; + case 0xb7: sta_ex(m68_state); break; + case 0xb8: eora_ex(m68_state); break; + case 0xb9: adca_ex(m68_state); break; + case 0xba: ora_ex(m68_state); break; + case 0xbb: adda_ex(m68_state); break; + case 0xbc: cpx_ex(m68_state); /* 6803 difference */ break; + case 0xbd: jsr_ex(m68_state); break; + case 0xbe: lds_ex(m68_state); break; + case 0xbf: sts_ex(m68_state); break; + case 0xc0: subb_im(m68_state); break; + case 0xc1: cmpb_im(m68_state); break; + case 0xc2: sbcb_im(m68_state); break; + case 0xc3: addd_im(m68_state); /* 6803 only */ break; + case 0xc4: andb_im(m68_state); break; + case 0xc5: bitb_im(m68_state); break; + case 0xc6: ldb_im(m68_state); break; + case 0xc7: stb_im(m68_state); break; + case 0xc8: eorb_im(m68_state); break; + case 0xc9: adcb_im(m68_state); break; + case 0xca: orb_im(m68_state); break; + case 0xcb: addb_im(m68_state); break; + case 0xcc: ldd_im(m68_state); /* 6803 only */ break; + case 0xcd: std_im(m68_state); /* 6803 only -- orthogonality */ break; + case 0xce: ldx_im(m68_state); break; + case 0xcf: stx_im(m68_state); break; + case 0xd0: subb_di(m68_state); break; + case 0xd1: cmpb_di(m68_state); break; + case 0xd2: sbcb_di(m68_state); break; + case 0xd3: addd_di(m68_state); /* 6803 only */ break; + case 0xd4: andb_di(m68_state); break; + case 0xd5: bitb_di(m68_state); break; + case 0xd6: ldb_di(m68_state); break; + case 0xd7: stb_di(m68_state); break; + case 0xd8: eorb_di(m68_state); break; + case 0xd9: adcb_di(m68_state); break; + case 0xda: orb_di(m68_state); break; + case 0xdb: addb_di(m68_state); break; + case 0xdc: ldd_di(m68_state); /* 6803 only */ break; + case 0xdd: std_di(m68_state); /* 6803 only */ break; + case 0xde: ldx_di(m68_state); break; + case 0xdf: stx_di(m68_state); break; + case 0xe0: subb_ix(m68_state); break; + case 0xe1: cmpb_ix(m68_state); break; + case 0xe2: sbcb_ix(m68_state); break; + case 0xe3: addd_ix(m68_state); /* 6803 only */ break; + case 0xe4: andb_ix(m68_state); break; + case 0xe5: bitb_ix(m68_state); break; + case 0xe6: ldb_ix(m68_state); break; + case 0xe7: stb_ix(m68_state); break; + case 0xe8: eorb_ix(m68_state); break; + case 0xe9: adcb_ix(m68_state); break; + case 0xea: orb_ix(m68_state); break; + case 0xeb: addb_ix(m68_state); break; + case 0xec: ldd_ix(m68_state); /* 6803 only */ break; + case 0xed: std_ix(m68_state); /* 6803 only */ break; + case 0xee: ldx_ix(m68_state); break; + case 0xef: stx_ix(m68_state); break; + case 0xf0: subb_ex(m68_state); break; + case 0xf1: cmpb_ex(m68_state); break; + case 0xf2: sbcb_ex(m68_state); break; + case 0xf3: addd_ex(m68_state); /* 6803 only */ break; + case 0xf4: andb_ex(m68_state); break; + case 0xf5: bitb_ex(m68_state); break; + case 0xf6: ldb_ex(m68_state); break; + case 0xf7: stb_ex(m68_state); break; + case 0xf8: eorb_ex(m68_state); break; + case 0xf9: adcb_ex(m68_state); break; + case 0xfa: orb_ex(m68_state); break; + case 0xfb: addb_ex(m68_state); break; + case 0xfc: ldd_ex(m68_state); /* 6803 only */ break; + case 0xfd: std_ex(m68_state); /* 6803 only */ break; + case 0xfe: ldx_ex(m68_state); break; + case 0xff: stx_ex(m68_state); break; + } +} + /**************************************************************************** * Execute cycles CPU cycles. Return number of cycles really executed ****************************************************************************/ #if (HAS_M6803||HAS_M6801) static CPU_EXECUTE( m6803 ) { + m68_state_t *m68_state = device->token; UINT8 ireg; - m6800_ICount = cycles; + m68_state->icount = cycles; - CLEANUP_conters; - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + CLEANUP_COUNTERS(); + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; do { - if( m68xx.wai_state & M6800_WAI ) + if( m68_state->wai_state & M6800_WAI ) { EAT_CYCLES; } @@ -1340,274 +1655,15 @@ static CPU_EXECUTE( m6803 ) debugger_instruction_hook(device->machine, PCD); ireg=M_RDOP(PCD); PC++; - - switch( ireg ) - { - case 0x00: illegal(); break; - case 0x01: nop(); break; - case 0x02: illegal(); break; - case 0x03: illegal(); break; - case 0x04: lsrd(); /* 6803 only */; break; - case 0x05: asld(); /* 6803 only */; break; - case 0x06: tap(); break; - case 0x07: tpa(); break; - case 0x08: inx(); break; - case 0x09: dex(); break; - case 0x0A: CLV; break; - case 0x0B: SEV; break; - case 0x0C: CLC; break; - case 0x0D: SEC; break; - case 0x0E: cli(); break; - case 0x0F: sei(); break; - case 0x10: sba(); break; - case 0x11: cba(); break; - case 0x12: illegal(); break; - case 0x13: illegal(); break; - case 0x14: illegal(); break; - case 0x15: illegal(); break; - case 0x16: tab(); break; - case 0x17: tba(); break; - case 0x18: illegal(); break; - case 0x19: daa(); break; - case 0x1a: illegal(); break; - case 0x1b: aba(); break; - case 0x1c: illegal(); break; - case 0x1d: illegal(); break; - case 0x1e: illegal(); break; - case 0x1f: illegal(); 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: tsx(); break; - case 0x31: ins(); break; - case 0x32: pula(); break; - case 0x33: pulb(); break; - case 0x34: des(); break; - case 0x35: txs(); break; - case 0x36: psha(); break; - case 0x37: pshb(); break; - case 0x38: pulx(); /* 6803 only */ break; - case 0x39: rts(); break; - case 0x3a: abx(); /* 6803 only */ break; - case 0x3b: rti(); break; - case 0x3c: pshx(); /* 6803 only */ break; - case 0x3d: mul(); /* 6803 only */ break; - case 0x3e: wai(); break; - case 0x3f: swi(); break; - case 0x40: nega(); break; - case 0x41: illegal(); break; - case 0x42: illegal(); break; - case 0x43: coma(); break; - case 0x44: lsra(); break; - case 0x45: illegal(); break; - case 0x46: rora(); break; - case 0x47: asra(); break; - case 0x48: asla(); break; - case 0x49: rola(); break; - case 0x4a: deca(); break; - case 0x4b: illegal(); break; - case 0x4c: inca(); break; - case 0x4d: tsta(); break; - case 0x4e: illegal(); break; - case 0x4f: clra(); break; - case 0x50: negb(); break; - case 0x51: illegal(); break; - case 0x52: illegal(); break; - case 0x53: comb(); break; - case 0x54: lsrb(); break; - case 0x55: illegal(); break; - case 0x56: rorb(); break; - case 0x57: asrb(); break; - case 0x58: aslb(); break; - case 0x59: rolb(); break; - case 0x5a: decb(); break; - case 0x5b: illegal(); break; - case 0x5c: incb(); break; - case 0x5d: tstb(); break; - case 0x5e: illegal(); break; - case 0x5f: clrb(); break; - case 0x60: neg_ix(); break; - case 0x61: illegal(); break; - case 0x62: illegal(); break; - case 0x63: com_ix(); break; - case 0x64: lsr_ix(); break; - case 0x65: illegal(); 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: illegal(); 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: illegal(); break; - case 0x72: illegal(); break; - case 0x73: com_ex(); break; - case 0x74: lsr_ex(); break; - case 0x75: illegal(); 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: illegal(); 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(); /* 6803 only */ break; - case 0x84: anda_im(); break; - case 0x85: bita_im(); break; - case 0x86: lda_im(); break; - case 0x87: sta_im(); break; - case 0x88: eora_im(); break; - case 0x89: adca_im(); break; - case 0x8a: ora_im(); break; - case 0x8b: adda_im(); break; - case 0x8c: cpx_im(); /* 6803 difference */ break; - case 0x8d: bsr(); break; - case 0x8e: lds_im(); break; - case 0x8f: sts_im(); /* orthogonality */ break; - case 0x90: suba_di(); break; - case 0x91: cmpa_di(); break; - case 0x92: sbca_di(); break; - case 0x93: subd_di(); /* 6803 only */ 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: cpx_di(); /* 6803 difference */ break; - case 0x9d: jsr_di(); break; - case 0x9e: lds_di(); break; - case 0x9f: sts_di(); break; - case 0xa0: suba_ix(); break; - case 0xa1: cmpa_ix(); break; - case 0xa2: sbca_ix(); break; - case 0xa3: subd_ix(); /* 6803 only */ 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: cpx_ix(); /* 6803 difference */ break; - case 0xad: jsr_ix(); break; - case 0xae: lds_ix(); break; - case 0xaf: sts_ix(); break; - case 0xb0: suba_ex(); break; - case 0xb1: cmpa_ex(); break; - case 0xb2: sbca_ex(); break; - case 0xb3: subd_ex(); /* 6803 only */ 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: cpx_ex(); /* 6803 difference */ break; - case 0xbd: jsr_ex(); break; - case 0xbe: lds_ex(); break; - case 0xbf: sts_ex(); break; - case 0xc0: subb_im(); break; - case 0xc1: cmpb_im(); break; - case 0xc2: sbcb_im(); break; - case 0xc3: addd_im(); /* 6803 only */ break; - case 0xc4: andb_im(); break; - case 0xc5: bitb_im(); break; - case 0xc6: ldb_im(); break; - case 0xc7: stb_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(); /* 6803 only */ break; - case 0xcd: std_im(); /* 6803 only -- orthogonality */ break; - case 0xce: ldx_im(); break; - case 0xcf: stx_im(); break; - case 0xd0: subb_di(); break; - case 0xd1: cmpb_di(); break; - case 0xd2: sbcb_di(); break; - case 0xd3: addd_di(); /* 6803 only */ 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(); /* 6803 only */ break; - case 0xdd: std_di(); /* 6803 only */ break; - case 0xde: ldx_di(); break; - case 0xdf: stx_di(); break; - case 0xe0: subb_ix(); break; - case 0xe1: cmpb_ix(); break; - case 0xe2: sbcb_ix(); break; - case 0xe3: addd_ix(); /* 6803 only */ 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(); /* 6803 only */ break; - case 0xed: std_ix(); /* 6803 only */ break; - case 0xee: ldx_ix(); break; - case 0xef: stx_ix(); break; - case 0xf0: subb_ex(); break; - case 0xf1: cmpb_ex(); break; - case 0xf2: sbcb_ex(); break; - case 0xf3: addd_ex(); /* 6803 only */ 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(); /* 6803 only */ break; - case 0xfd: std_ex(); /* 6803 only */ break; - case 0xfe: ldx_ex(); break; - case 0xff: stx_ex(); break; - } - INCREMENT_COUNTER(cycles_6803[ireg]); + m6803_execute_one(m68_state, ireg); + increment_counter(m68_state, cycles_6803[ireg]); } - } while( m6800_ICount>0 ); + } while( m68_state->icount>0 ); - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; - return cycles - m6800_ICount; + return cycles - m68_state->icount; } #endif @@ -1630,12 +1686,13 @@ ADDRESS_MAP_END #if (HAS_M6808) static CPU_INIT( m6808 ) { -// m68xx.subtype = SUBTYPE_M6808; - m68xx.insn = m6800_insn; - m68xx.cycles = cycles_6800; - m68xx.irq_callback = irqcallback; - m68xx.device = device; - state_register("m6808", index); + m68_state_t *m68_state = device->token; + // m68_state->subtype = SUBTYPE_M6808; + m68_state->insn = m6800_insn; + m68_state->cycles = cycles_6800; + m68_state->irq_callback = irqcallback; + m68_state->device = device; + state_register(m68_state, "m6808", index); } #endif @@ -1646,33 +1703,303 @@ static CPU_INIT( m6808 ) static CPU_INIT( hd63701 ) { -// m68xx.subtype = SUBTYPE_HD63701; - m68xx.insn = hd63701_insn; - m68xx.cycles = cycles_63701; - m68xx.irq_callback = irqcallback; - m68xx.device = device; + m68_state_t *m68_state = device->token; + // m68_state->subtype = SUBTYPE_HD63701; + m68_state->insn = hd63701_insn; + m68_state->cycles = cycles_63701; + m68_state->irq_callback = irqcallback; + m68_state->device = device; - m68xx.clock = clock; - m6800_rx_timer = timer_alloc(m6800_rx_tick, NULL); - m6800_tx_timer = timer_alloc(m6800_tx_tick, NULL); + m68_state->clock = clock; + m68_state->m6800_rx_timer = timer_alloc(m6800_rx_tick, m68_state); + m68_state->m6800_tx_timer = timer_alloc(m6800_tx_tick, m68_state); - state_register("hd63701", index); + state_register(m68_state, "hd63701", index); } + +/**************************************************************************** + * Execute one instruction + ****************************************************************************/ + +INLINE void hd63071_execute_one(m68_state_t *m68_state, UINT8 ireg) +{ + switch( ireg ) + { + case 0x00: trap(m68_state); break; + case 0x01: nop(m68_state); break; + case 0x02: trap(m68_state); break; + case 0x03: trap(m68_state); break; + case 0x04: lsrd(m68_state); /* 6803 only */; break; + case 0x05: asld(m68_state); /* 6803 only */; break; + case 0x06: tap(m68_state); break; + case 0x07: tpa(m68_state); break; + case 0x08: inx(m68_state); break; + case 0x09: dex(m68_state); break; + case 0x0A: CLV; break; + case 0x0B: SEV; break; + case 0x0C: CLC; break; + case 0x0D: SEC; break; + case 0x0E: cli(m68_state); break; + case 0x0F: sei(m68_state); break; + case 0x10: sba(m68_state); break; + case 0x11: cba(m68_state); break; + case 0x12: undoc1(m68_state); break; + case 0x13: undoc2(m68_state); break; + case 0x14: trap(m68_state); break; + case 0x15: trap(m68_state); break; + case 0x16: tab(m68_state); break; + case 0x17: tba(m68_state); break; + case 0x18: xgdx(m68_state); /* HD63701YO only */; break; + case 0x19: daa(m68_state); break; + case 0x1a: slp(m68_state); break; + case 0x1b: aba(m68_state); break; + case 0x1c: trap(m68_state); break; + case 0x1d: trap(m68_state); break; + case 0x1e: trap(m68_state); break; + case 0x1f: trap(m68_state); break; + case 0x20: bra(m68_state); break; + case 0x21: brn(m68_state); break; + case 0x22: bhi(m68_state); break; + case 0x23: bls(m68_state); break; + case 0x24: bcc(m68_state); break; + case 0x25: bcs(m68_state); break; + case 0x26: bne(m68_state); break; + case 0x27: beq(m68_state); break; + case 0x28: bvc(m68_state); break; + case 0x29: bvs(m68_state); break; + case 0x2a: bpl(m68_state); break; + case 0x2b: bmi(m68_state); break; + case 0x2c: bge(m68_state); break; + case 0x2d: blt(m68_state); break; + case 0x2e: bgt(m68_state); break; + case 0x2f: ble(m68_state); break; + case 0x30: tsx(m68_state); break; + case 0x31: ins(m68_state); break; + case 0x32: pula(m68_state); break; + case 0x33: pulb(m68_state); break; + case 0x34: des(m68_state); break; + case 0x35: txs(m68_state); break; + case 0x36: psha(m68_state); break; + case 0x37: pshb(m68_state); break; + case 0x38: pulx(m68_state); /* 6803 only */ break; + case 0x39: rts(m68_state); break; + case 0x3a: abx(m68_state); /* 6803 only */ break; + case 0x3b: rti(m68_state); break; + case 0x3c: pshx(m68_state); /* 6803 only */ break; + case 0x3d: mul(m68_state); /* 6803 only */ break; + case 0x3e: wai(m68_state); break; + case 0x3f: swi(m68_state); break; + case 0x40: nega(m68_state); break; + case 0x41: trap(m68_state); break; + case 0x42: trap(m68_state); break; + case 0x43: coma(m68_state); break; + case 0x44: lsra(m68_state); break; + case 0x45: trap(m68_state); break; + case 0x46: rora(m68_state); break; + case 0x47: asra(m68_state); break; + case 0x48: asla(m68_state); break; + case 0x49: rola(m68_state); break; + case 0x4a: deca(m68_state); break; + case 0x4b: trap(m68_state); break; + case 0x4c: inca(m68_state); break; + case 0x4d: tsta(m68_state); break; + case 0x4e: trap(m68_state); break; + case 0x4f: clra(m68_state); break; + case 0x50: negb(m68_state); break; + case 0x51: trap(m68_state); break; + case 0x52: trap(m68_state); break; + case 0x53: comb(m68_state); break; + case 0x54: lsrb(m68_state); break; + case 0x55: trap(m68_state); break; + case 0x56: rorb(m68_state); break; + case 0x57: asrb(m68_state); break; + case 0x58: aslb(m68_state); break; + case 0x59: rolb(m68_state); break; + case 0x5a: decb(m68_state); break; + case 0x5b: trap(m68_state); break; + case 0x5c: incb(m68_state); break; + case 0x5d: tstb(m68_state); break; + case 0x5e: trap(m68_state); break; + case 0x5f: clrb(m68_state); break; + case 0x60: neg_ix(m68_state); break; + case 0x61: aim_ix(m68_state); /* HD63701YO only */; break; + case 0x62: oim_ix(m68_state); /* HD63701YO only */; break; + case 0x63: com_ix(m68_state); break; + case 0x64: lsr_ix(m68_state); break; + case 0x65: eim_ix(m68_state); /* HD63701YO only */; break; + case 0x66: ror_ix(m68_state); break; + case 0x67: asr_ix(m68_state); break; + case 0x68: asl_ix(m68_state); break; + case 0x69: rol_ix(m68_state); break; + case 0x6a: dec_ix(m68_state); break; + case 0x6b: tim_ix(m68_state); /* HD63701YO only */; break; + case 0x6c: inc_ix(m68_state); break; + case 0x6d: tst_ix(m68_state); break; + case 0x6e: jmp_ix(m68_state); break; + case 0x6f: clr_ix(m68_state); break; + case 0x70: neg_ex(m68_state); break; + case 0x71: aim_di(m68_state); /* HD63701YO only */; break; + case 0x72: oim_di(m68_state); /* HD63701YO only */; break; + case 0x73: com_ex(m68_state); break; + case 0x74: lsr_ex(m68_state); break; + case 0x75: eim_di(m68_state); /* HD63701YO only */; break; + case 0x76: ror_ex(m68_state); break; + case 0x77: asr_ex(m68_state); break; + case 0x78: asl_ex(m68_state); break; + case 0x79: rol_ex(m68_state); break; + case 0x7a: dec_ex(m68_state); break; + case 0x7b: tim_di(m68_state); /* HD63701YO only */; break; + case 0x7c: inc_ex(m68_state); break; + case 0x7d: tst_ex(m68_state); break; + case 0x7e: jmp_ex(m68_state); break; + case 0x7f: clr_ex(m68_state); break; + case 0x80: suba_im(m68_state); break; + case 0x81: cmpa_im(m68_state); break; + case 0x82: sbca_im(m68_state); break; + case 0x83: subd_im(m68_state); /* 6803 only */ break; + case 0x84: anda_im(m68_state); break; + case 0x85: bita_im(m68_state); break; + case 0x86: lda_im(m68_state); break; + case 0x87: sta_im(m68_state); break; + case 0x88: eora_im(m68_state); break; + case 0x89: adca_im(m68_state); break; + case 0x8a: ora_im(m68_state); break; + case 0x8b: adda_im(m68_state); break; + case 0x8c: cpx_im(m68_state); /* 6803 difference */ break; + case 0x8d: bsr(m68_state); break; + case 0x8e: lds_im(m68_state); break; + case 0x8f: sts_im(m68_state); /* orthogonality */ break; + case 0x90: suba_di(m68_state); break; + case 0x91: cmpa_di(m68_state); break; + case 0x92: sbca_di(m68_state); break; + case 0x93: subd_di(m68_state); /* 6803 only */ break; + case 0x94: anda_di(m68_state); break; + case 0x95: bita_di(m68_state); break; + case 0x96: lda_di(m68_state); break; + case 0x97: sta_di(m68_state); break; + case 0x98: eora_di(m68_state); break; + case 0x99: adca_di(m68_state); break; + case 0x9a: ora_di(m68_state); break; + case 0x9b: adda_di(m68_state); break; + case 0x9c: cpx_di(m68_state); /* 6803 difference */ break; + case 0x9d: jsr_di(m68_state); break; + case 0x9e: lds_di(m68_state); break; + case 0x9f: sts_di(m68_state); break; + case 0xa0: suba_ix(m68_state); break; + case 0xa1: cmpa_ix(m68_state); break; + case 0xa2: sbca_ix(m68_state); break; + case 0xa3: subd_ix(m68_state); /* 6803 only */ break; + case 0xa4: anda_ix(m68_state); break; + case 0xa5: bita_ix(m68_state); break; + case 0xa6: lda_ix(m68_state); break; + case 0xa7: sta_ix(m68_state); break; + case 0xa8: eora_ix(m68_state); break; + case 0xa9: adca_ix(m68_state); break; + case 0xaa: ora_ix(m68_state); break; + case 0xab: adda_ix(m68_state); break; + case 0xac: cpx_ix(m68_state); /* 6803 difference */ break; + case 0xad: jsr_ix(m68_state); break; + case 0xae: lds_ix(m68_state); break; + case 0xaf: sts_ix(m68_state); break; + case 0xb0: suba_ex(m68_state); break; + case 0xb1: cmpa_ex(m68_state); break; + case 0xb2: sbca_ex(m68_state); break; + case 0xb3: subd_ex(m68_state); /* 6803 only */ break; + case 0xb4: anda_ex(m68_state); break; + case 0xb5: bita_ex(m68_state); break; + case 0xb6: lda_ex(m68_state); break; + case 0xb7: sta_ex(m68_state); break; + case 0xb8: eora_ex(m68_state); break; + case 0xb9: adca_ex(m68_state); break; + case 0xba: ora_ex(m68_state); break; + case 0xbb: adda_ex(m68_state); break; + case 0xbc: cpx_ex(m68_state); /* 6803 difference */ break; + case 0xbd: jsr_ex(m68_state); break; + case 0xbe: lds_ex(m68_state); break; + case 0xbf: sts_ex(m68_state); break; + case 0xc0: subb_im(m68_state); break; + case 0xc1: cmpb_im(m68_state); break; + case 0xc2: sbcb_im(m68_state); break; + case 0xc3: addd_im(m68_state); /* 6803 only */ break; + case 0xc4: andb_im(m68_state); break; + case 0xc5: bitb_im(m68_state); break; + case 0xc6: ldb_im(m68_state); break; + case 0xc7: stb_im(m68_state); break; + case 0xc8: eorb_im(m68_state); break; + case 0xc9: adcb_im(m68_state); break; + case 0xca: orb_im(m68_state); break; + case 0xcb: addb_im(m68_state); break; + case 0xcc: ldd_im(m68_state); /* 6803 only */ break; + case 0xcd: std_im(m68_state); /* 6803 only -- orthogonality */ break; + case 0xce: ldx_im(m68_state); break; + case 0xcf: stx_im(m68_state); break; + case 0xd0: subb_di(m68_state); break; + case 0xd1: cmpb_di(m68_state); break; + case 0xd2: sbcb_di(m68_state); break; + case 0xd3: addd_di(m68_state); /* 6803 only */ break; + case 0xd4: andb_di(m68_state); break; + case 0xd5: bitb_di(m68_state); break; + case 0xd6: ldb_di(m68_state); break; + case 0xd7: stb_di(m68_state); break; + case 0xd8: eorb_di(m68_state); break; + case 0xd9: adcb_di(m68_state); break; + case 0xda: orb_di(m68_state); break; + case 0xdb: addb_di(m68_state); break; + case 0xdc: ldd_di(m68_state); /* 6803 only */ break; + case 0xdd: std_di(m68_state); /* 6803 only */ break; + case 0xde: ldx_di(m68_state); break; + case 0xdf: stx_di(m68_state); break; + case 0xe0: subb_ix(m68_state); break; + case 0xe1: cmpb_ix(m68_state); break; + case 0xe2: sbcb_ix(m68_state); break; + case 0xe3: addd_ix(m68_state); /* 6803 only */ break; + case 0xe4: andb_ix(m68_state); break; + case 0xe5: bitb_ix(m68_state); break; + case 0xe6: ldb_ix(m68_state); break; + case 0xe7: stb_ix(m68_state); break; + case 0xe8: eorb_ix(m68_state); break; + case 0xe9: adcb_ix(m68_state); break; + case 0xea: orb_ix(m68_state); break; + case 0xeb: addb_ix(m68_state); break; + case 0xec: ldd_ix(m68_state); /* 6803 only */ break; + case 0xed: std_ix(m68_state); /* 6803 only */ break; + case 0xee: ldx_ix(m68_state); break; + case 0xef: stx_ix(m68_state); break; + case 0xf0: subb_ex(m68_state); break; + case 0xf1: cmpb_ex(m68_state); break; + case 0xf2: sbcb_ex(m68_state); break; + case 0xf3: addd_ex(m68_state); /* 6803 only */ break; + case 0xf4: andb_ex(m68_state); break; + case 0xf5: bitb_ex(m68_state); break; + case 0xf6: ldb_ex(m68_state); break; + case 0xf7: stb_ex(m68_state); break; + case 0xf8: eorb_ex(m68_state); break; + case 0xf9: adcb_ex(m68_state); break; + case 0xfa: orb_ex(m68_state); break; + case 0xfb: addb_ex(m68_state); break; + case 0xfc: ldd_ex(m68_state); /* 6803 only */ break; + case 0xfd: std_ex(m68_state); /* 6803 only */ break; + case 0xfe: ldx_ex(m68_state); break; + case 0xff: stx_ex(m68_state); break; + } +} + /**************************************************************************** * Execute cycles CPU cycles. Return number of cycles really executed ****************************************************************************/ static CPU_EXECUTE( hd63701 ) { + m68_state_t *m68_state = device->token; UINT8 ireg; - m6800_ICount = cycles; + m68_state->icount = cycles; - CLEANUP_conters; - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + CLEANUP_COUNTERS(); + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; do { - if( m68xx.wai_state & (HD63701_WAI|HD63701_SLP) ) + if( m68_state->wai_state & (M6800_WAI|M6800_SLP) ) { EAT_CYCLES; } @@ -1682,287 +2009,30 @@ static CPU_EXECUTE( hd63701 ) debugger_instruction_hook(device->machine, PCD); ireg=M_RDOP(PCD); PC++; - - switch( ireg ) - { - case 0x00: trap(); break; - case 0x01: nop(); break; - case 0x02: trap(); break; - case 0x03: trap(); break; - case 0x04: lsrd(); /* 6803 only */; break; - case 0x05: asld(); /* 6803 only */; break; - case 0x06: tap(); break; - case 0x07: tpa(); break; - case 0x08: inx(); break; - case 0x09: dex(); break; - case 0x0A: CLV; break; - case 0x0B: SEV; break; - case 0x0C: CLC; break; - case 0x0D: SEC; break; - case 0x0E: cli(); break; - case 0x0F: sei(); break; - case 0x10: sba(); break; - case 0x11: cba(); break; - case 0x12: undoc1(); break; - case 0x13: undoc2(); break; - case 0x14: trap(); break; - case 0x15: trap(); break; - case 0x16: tab(); break; - case 0x17: tba(); break; - case 0x18: xgdx(); /* HD63701YO only */; break; - case 0x19: daa(); break; - case 0x1a: slp(); break; - case 0x1b: aba(); break; - case 0x1c: trap(); break; - case 0x1d: trap(); break; - case 0x1e: trap(); break; - case 0x1f: trap(); 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: tsx(); break; - case 0x31: ins(); break; - case 0x32: pula(); break; - case 0x33: pulb(); break; - case 0x34: des(); break; - case 0x35: txs(); break; - case 0x36: psha(); break; - case 0x37: pshb(); break; - case 0x38: pulx(); /* 6803 only */ break; - case 0x39: rts(); break; - case 0x3a: abx(); /* 6803 only */ break; - case 0x3b: rti(); break; - case 0x3c: pshx(); /* 6803 only */ break; - case 0x3d: mul(); /* 6803 only */ break; - case 0x3e: wai(); break; - case 0x3f: swi(); break; - case 0x40: nega(); break; - case 0x41: trap(); break; - case 0x42: trap(); break; - case 0x43: coma(); break; - case 0x44: lsra(); break; - case 0x45: trap(); break; - case 0x46: rora(); break; - case 0x47: asra(); break; - case 0x48: asla(); break; - case 0x49: rola(); break; - case 0x4a: deca(); break; - case 0x4b: trap(); break; - case 0x4c: inca(); break; - case 0x4d: tsta(); break; - case 0x4e: trap(); break; - case 0x4f: clra(); break; - case 0x50: negb(); break; - case 0x51: trap(); break; - case 0x52: trap(); break; - case 0x53: comb(); break; - case 0x54: lsrb(); break; - case 0x55: trap(); break; - case 0x56: rorb(); break; - case 0x57: asrb(); break; - case 0x58: aslb(); break; - case 0x59: rolb(); break; - case 0x5a: decb(); break; - case 0x5b: trap(); break; - case 0x5c: incb(); break; - case 0x5d: tstb(); break; - case 0x5e: trap(); break; - case 0x5f: clrb(); break; - case 0x60: neg_ix(); break; - case 0x61: aim_ix(); /* HD63701YO only */; break; - case 0x62: oim_ix(); /* HD63701YO only */; break; - case 0x63: com_ix(); break; - case 0x64: lsr_ix(); break; - case 0x65: eim_ix(); /* HD63701YO only */; 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: tim_ix(); /* HD63701YO only */; 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: aim_di(); /* HD63701YO only */; break; - case 0x72: oim_di(); /* HD63701YO only */; break; - case 0x73: com_ex(); break; - case 0x74: lsr_ex(); break; - case 0x75: eim_di(); /* HD63701YO only */; 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: tim_di(); /* HD63701YO only */; 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(); /* 6803 only */ break; - case 0x84: anda_im(); break; - case 0x85: bita_im(); break; - case 0x86: lda_im(); break; - case 0x87: sta_im(); break; - case 0x88: eora_im(); break; - case 0x89: adca_im(); break; - case 0x8a: ora_im(); break; - case 0x8b: adda_im(); break; - case 0x8c: cpx_im(); /* 6803 difference */ break; - case 0x8d: bsr(); break; - case 0x8e: lds_im(); break; - case 0x8f: sts_im(); /* orthogonality */ break; - case 0x90: suba_di(); break; - case 0x91: cmpa_di(); break; - case 0x92: sbca_di(); break; - case 0x93: subd_di(); /* 6803 only */ 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: cpx_di(); /* 6803 difference */ break; - case 0x9d: jsr_di(); break; - case 0x9e: lds_di(); break; - case 0x9f: sts_di(); break; - case 0xa0: suba_ix(); break; - case 0xa1: cmpa_ix(); break; - case 0xa2: sbca_ix(); break; - case 0xa3: subd_ix(); /* 6803 only */ 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: cpx_ix(); /* 6803 difference */ break; - case 0xad: jsr_ix(); break; - case 0xae: lds_ix(); break; - case 0xaf: sts_ix(); break; - case 0xb0: suba_ex(); break; - case 0xb1: cmpa_ex(); break; - case 0xb2: sbca_ex(); break; - case 0xb3: subd_ex(); /* 6803 only */ 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: cpx_ex(); /* 6803 difference */ break; - case 0xbd: jsr_ex(); break; - case 0xbe: lds_ex(); break; - case 0xbf: sts_ex(); break; - case 0xc0: subb_im(); break; - case 0xc1: cmpb_im(); break; - case 0xc2: sbcb_im(); break; - case 0xc3: addd_im(); /* 6803 only */ break; - case 0xc4: andb_im(); break; - case 0xc5: bitb_im(); break; - case 0xc6: ldb_im(); break; - case 0xc7: stb_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(); /* 6803 only */ break; - case 0xcd: std_im(); /* 6803 only -- orthogonality */ break; - case 0xce: ldx_im(); break; - case 0xcf: stx_im(); break; - case 0xd0: subb_di(); break; - case 0xd1: cmpb_di(); break; - case 0xd2: sbcb_di(); break; - case 0xd3: addd_di(); /* 6803 only */ 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(); /* 6803 only */ break; - case 0xdd: std_di(); /* 6803 only */ break; - case 0xde: ldx_di(); break; - case 0xdf: stx_di(); break; - case 0xe0: subb_ix(); break; - case 0xe1: cmpb_ix(); break; - case 0xe2: sbcb_ix(); break; - case 0xe3: addd_ix(); /* 6803 only */ 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(); /* 6803 only */ break; - case 0xed: std_ix(); /* 6803 only */ break; - case 0xee: ldx_ix(); break; - case 0xef: stx_ix(); break; - case 0xf0: subb_ex(); break; - case 0xf1: cmpb_ex(); break; - case 0xf2: sbcb_ex(); break; - case 0xf3: addd_ex(); /* 6803 only */ 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(); /* 6803 only */ break; - case 0xfd: std_ex(); /* 6803 only */ break; - case 0xfe: ldx_ex(); break; - case 0xff: stx_ex(); break; - } - INCREMENT_COUNTER(cycles_63701[ireg]); + hd63071_execute_one(m68_state, ireg); + increment_counter(m68_state, cycles_63701[ireg]); } - } while( m6800_ICount>0 ); + } while( m68_state->icount>0 ); - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; - return cycles - m6800_ICount; + return cycles - m68_state->icount; } /* - if change_pc() direccted these areas ,Call hd63701_trap_pc(). + if change_pc(m68_state) direccted these areas ,Call hd63701_trap_pc(m68_state). 'mode' is selected by the sense of p2.0,p2.1,and p2.3 at reset timming. mode 0,1,2,4,6 : $0000-$001f mode 5 : $0000-$001f,$0200-$efff mode 7 : $0000-$001f,$0100-$efff */ -void hd63701_trap_pc(void) +#if 0 +static void hd63701_trap_pc(m68_state_t *m68_state) { TAKE_TRAP; } +#endif static READ8_HANDLER( m6803_internal_registers_r ); static WRITE8_HANDLER( m6803_internal_registers_w ); @@ -1985,26 +2055,296 @@ WRITE8_HANDLER( hd63701_internal_registers_w ) #if (HAS_NSC8105) static CPU_INIT( nsc8105 ) { -// m68xx.subtype = SUBTYPE_NSC8105; - m68xx.insn = nsc8105_insn; - m68xx.cycles = cycles_nsc8105; - state_register("nsc8105", index); + m68_state_t *m68_state = device->token; + // m68_state->subtype = SUBTYPE_NSC8105; + m68_state->insn = nsc8105_insn; + m68_state->cycles = cycles_nsc8105; + state_register(m68_state, "nsc8105", index); } + +/**************************************************************************** + * Execute one instruction + ****************************************************************************/ + +INLINE void nsc8105_execute_one(m68_state_t *m68_state, UINT8 ireg) +{ + switch( ireg ) + { + case 0x00: illegal(m68_state); break; + case 0x01: illegal(m68_state); break; + case 0x02: nop(m68_state); break; + case 0x03: illegal(m68_state); break; + case 0x04: illegal(m68_state); break; + case 0x05: tap(m68_state); break; + case 0x06: illegal(m68_state); break; + case 0x07: tpa(m68_state); break; + case 0x08: inx(m68_state); break; + case 0x09: CLV; break; + case 0x0a: dex(m68_state); break; + case 0x0b: SEV; break; + case 0x0c: CLC; break; + case 0x0d: cli(m68_state); break; + case 0x0e: SEC; break; + case 0x0f: sei(m68_state); break; + case 0x10: sba(m68_state); break; + case 0x11: illegal(m68_state); break; + case 0x12: cba(m68_state); break; + case 0x13: illegal(m68_state); break; + case 0x14: illegal(m68_state); break; + case 0x15: tab(m68_state); break; + case 0x16: illegal(m68_state); break; + case 0x17: tba(m68_state); break; + case 0x18: illegal(m68_state); break; + case 0x19: illegal(m68_state); break; + case 0x1a: daa(m68_state); break; + case 0x1b: aba(m68_state); break; + case 0x1c: illegal(m68_state); break; + case 0x1d: illegal(m68_state); break; + case 0x1e: illegal(m68_state); break; + case 0x1f: illegal(m68_state); break; + case 0x20: bra(m68_state); break; + case 0x21: bhi(m68_state); break; + case 0x22: brn(m68_state); break; + case 0x23: bls(m68_state); break; + case 0x24: bcc(m68_state); break; + case 0x25: bne(m68_state); break; + case 0x26: bcs(m68_state); break; + case 0x27: beq(m68_state); break; + case 0x28: bvc(m68_state); break; + case 0x29: bpl(m68_state); break; + case 0x2a: bvs(m68_state); break; + case 0x2b: bmi(m68_state); break; + case 0x2c: bge(m68_state); break; + case 0x2d: bgt(m68_state); break; + case 0x2e: blt(m68_state); break; + case 0x2f: ble(m68_state); break; + case 0x30: tsx(m68_state); break; + case 0x31: pula(m68_state); break; + case 0x32: ins(m68_state); break; + case 0x33: pulb(m68_state); break; + case 0x34: des(m68_state); break; + case 0x35: psha(m68_state); break; + case 0x36: txs(m68_state); break; + case 0x37: pshb(m68_state); break; + case 0x38: illegal(m68_state); break; + case 0x39: illegal(m68_state); break; + case 0x3a: rts(m68_state); break; + case 0x3b: rti(m68_state); break; + case 0x3c: illegal(m68_state); break; + case 0x3d: wai(m68_state); break; + case 0x3e: illegal(m68_state); break; + case 0x3f: swi(m68_state); break; + case 0x40: suba_im(m68_state); break; + case 0x41: sbca_im(m68_state); break; + case 0x42: cmpa_im(m68_state); break; + case 0x43: illegal(m68_state); break; + case 0x44: anda_im(m68_state); break; + case 0x45: lda_im(m68_state); break; + case 0x46: bita_im(m68_state); break; + case 0x47: sta_im(m68_state); break; + case 0x48: eora_im(m68_state); break; + case 0x49: ora_im(m68_state); break; + case 0x4a: adca_im(m68_state); break; + case 0x4b: adda_im(m68_state); break; + case 0x4c: cmpx_im(m68_state); break; + case 0x4d: lds_im(m68_state); break; + case 0x4e: bsr(m68_state); break; + case 0x4f: sts_im(m68_state); /* orthogonality */ break; + case 0x50: suba_di(m68_state); break; + case 0x51: sbca_di(m68_state); break; + case 0x52: cmpa_di(m68_state); break; + case 0x53: illegal(m68_state); break; + case 0x54: anda_di(m68_state); break; + case 0x55: lda_di(m68_state); break; + case 0x56: bita_di(m68_state); break; + case 0x57: sta_di(m68_state); break; + case 0x58: eora_di(m68_state); break; + case 0x59: ora_di(m68_state); break; + case 0x5a: adca_di(m68_state); break; + case 0x5b: adda_di(m68_state); break; + case 0x5c: cmpx_di(m68_state); break; + case 0x5d: lds_di(m68_state); break; + case 0x5e: jsr_di(m68_state); break; + case 0x5f: sts_di(m68_state); break; + case 0x60: suba_ix(m68_state); break; + case 0x61: sbca_ix(m68_state); break; + case 0x62: cmpa_ix(m68_state); break; + case 0x63: illegal(m68_state); break; + case 0x64: anda_ix(m68_state); break; + case 0x65: lda_ix(m68_state); break; + case 0x66: bita_ix(m68_state); break; + case 0x67: sta_ix(m68_state); break; + case 0x68: eora_ix(m68_state); break; + case 0x69: ora_ix(m68_state); break; + case 0x6a: adca_ix(m68_state); break; + case 0x6b: adda_ix(m68_state); break; + case 0x6c: cmpx_ix(m68_state); break; + case 0x6d: lds_ix(m68_state); break; + case 0x6e: jsr_ix(m68_state); break; + case 0x6f: sts_ix(m68_state); break; + case 0x70: suba_ex(m68_state); break; + case 0x71: sbca_ex(m68_state); break; + case 0x72: cmpa_ex(m68_state); break; + case 0x73: illegal(m68_state); break; + case 0x74: anda_ex(m68_state); break; + case 0x75: lda_ex(m68_state); break; + case 0x76: bita_ex(m68_state); break; + case 0x77: sta_ex(m68_state); break; + case 0x78: eora_ex(m68_state); break; + case 0x79: ora_ex(m68_state); break; + case 0x7a: adca_ex(m68_state); break; + case 0x7b: adda_ex(m68_state); break; + case 0x7c: cmpx_ex(m68_state); break; + case 0x7d: lds_ex(m68_state); break; + case 0x7e: jsr_ex(m68_state); break; + case 0x7f: sts_ex(m68_state); break; + case 0x80: nega(m68_state); break; + case 0x81: illegal(m68_state); break; + case 0x82: illegal(m68_state); break; + case 0x83: coma(m68_state); break; + case 0x84: lsra(m68_state); break; + case 0x85: rora(m68_state); break; + case 0x86: illegal(m68_state); break; + case 0x87: asra(m68_state); break; + case 0x88: asla(m68_state); break; + case 0x89: deca(m68_state); break; + case 0x8a: rola(m68_state); break; + case 0x8b: illegal(m68_state); break; + case 0x8c: inca(m68_state); break; + case 0x8d: illegal(m68_state); break; + case 0x8e: tsta(m68_state); break; + case 0x8f: clra(m68_state); break; + case 0x90: negb(m68_state); break; + case 0x91: illegal(m68_state); break; + case 0x92: illegal(m68_state); break; + case 0x93: comb(m68_state); break; + case 0x94: lsrb(m68_state); break; + case 0x95: rorb(m68_state); break; + case 0x96: illegal(m68_state); break; + case 0x97: asrb(m68_state); break; + case 0x98: aslb(m68_state); break; + case 0x99: decb(m68_state); break; + case 0x9a: rolb(m68_state); break; + case 0x9b: illegal(m68_state); break; + case 0x9c: incb(m68_state); break; + case 0x9d: illegal(m68_state); break; + case 0x9e: tstb(m68_state); break; + case 0x9f: clrb(m68_state); break; + case 0xa0: neg_ix(m68_state); break; + case 0xa1: illegal(m68_state); break; + case 0xa2: illegal(m68_state); break; + case 0xa3: com_ix(m68_state); break; + case 0xa4: lsr_ix(m68_state); break; + case 0xa5: ror_ix(m68_state); break; + case 0xa6: illegal(m68_state); break; + case 0xa7: asr_ix(m68_state); break; + case 0xa8: asl_ix(m68_state); break; + case 0xa9: dec_ix(m68_state); break; + case 0xaa: rol_ix(m68_state); break; + case 0xab: illegal(m68_state); break; + case 0xac: inc_ix(m68_state); break; + case 0xad: jmp_ix(m68_state); break; + case 0xae: tst_ix(m68_state); break; + case 0xaf: clr_ix(m68_state); break; + case 0xb0: neg_ex(m68_state); break; + case 0xb1: illegal(m68_state); break; + case 0xb2: illegal(m68_state); break; + case 0xb3: com_ex(m68_state); break; + case 0xb4: lsr_ex(m68_state); break; + case 0xb5: ror_ex(m68_state); break; + case 0xb6: illegal(m68_state); break; + case 0xb7: asr_ex(m68_state); break; + case 0xb8: asl_ex(m68_state); break; + case 0xb9: dec_ex(m68_state); break; + case 0xba: rol_ex(m68_state); break; + case 0xbb: illegal(m68_state); break; + case 0xbc: inc_ex(m68_state); break; + case 0xbd: jmp_ex(m68_state); break; + case 0xbe: tst_ex(m68_state); break; + case 0xbf: clr_ex(m68_state); break; + case 0xc0: subb_im(m68_state); break; + case 0xc1: sbcb_im(m68_state); break; + case 0xc2: cmpb_im(m68_state); break; + case 0xc3: illegal(m68_state); break; + case 0xc4: andb_im(m68_state); break; + case 0xc5: ldb_im(m68_state); break; + case 0xc6: bitb_im(m68_state); break; + case 0xc7: stb_im(m68_state); break; + case 0xc8: eorb_im(m68_state); break; + case 0xc9: orb_im(m68_state); break; + case 0xca: adcb_im(m68_state); break; + case 0xcb: addb_im(m68_state); break; + case 0xcc: illegal(m68_state); break; + case 0xcd: ldx_im(m68_state); break; + case 0xce: illegal(m68_state); break; + case 0xcf: stx_im(m68_state); break; + case 0xd0: subb_di(m68_state); break; + case 0xd1: sbcb_di(m68_state); break; + case 0xd2: cmpb_di(m68_state); break; + case 0xd3: illegal(m68_state); break; + case 0xd4: andb_di(m68_state); break; + case 0xd5: ldb_di(m68_state); break; + case 0xd6: bitb_di(m68_state); break; + case 0xd7: stb_di(m68_state); break; + case 0xd8: eorb_di(m68_state); break; + case 0xd9: orb_di(m68_state); break; + case 0xda: adcb_di(m68_state); break; + case 0xdb: addb_di(m68_state); break; + case 0xdc: illegal(m68_state); break; + case 0xdd: ldx_di(m68_state); break; + case 0xde: illegal(m68_state); break; + case 0xdf: stx_di(m68_state); break; + case 0xe0: subb_ix(m68_state); break; + case 0xe1: sbcb_ix(m68_state); break; + case 0xe2: cmpb_ix(m68_state); break; + case 0xe3: illegal(m68_state); break; + case 0xe4: andb_ix(m68_state); break; + case 0xe5: ldb_ix(m68_state); break; + case 0xe6: bitb_ix(m68_state); break; + case 0xe7: stb_ix(m68_state); break; + case 0xe8: eorb_ix(m68_state); break; + case 0xe9: orb_ix(m68_state); break; + case 0xea: adcb_ix(m68_state); break; + case 0xeb: addb_ix(m68_state); break; + case 0xec: adcx_im(m68_state); break; /* NSC8105 only */ + case 0xed: ldx_ix(m68_state); break; + case 0xee: illegal(m68_state); break; + case 0xef: stx_ix(m68_state); break; + case 0xf0: subb_ex(m68_state); break; + case 0xf1: sbcb_ex(m68_state); break; + case 0xf2: cmpb_ex(m68_state); break; + case 0xf3: illegal(m68_state); break; + case 0xf4: andb_ex(m68_state); break; + case 0xf5: ldb_ex(m68_state); break; + case 0xf6: bitb_ex(m68_state); break; + case 0xf7: stb_ex(m68_state); break; + case 0xf8: eorb_ex(m68_state); break; + case 0xf9: orb_ex(m68_state); break; + case 0xfa: adcb_ex(m68_state); break; + case 0xfb: addb_ex(m68_state); break; + case 0xfc: addx_ex(m68_state); break; + case 0xfd: ldx_ex(m68_state); break; + case 0xfe: illegal(m68_state); break; + case 0xff: stx_ex(m68_state); break; + } +} + /**************************************************************************** * Execute cycles CPU cycles. Return number of cycles really executed ****************************************************************************/ static CPU_EXECUTE( nsc8105 ) { + m68_state_t *m68_state = device->token; UINT8 ireg; - m6800_ICount = cycles; + m68_state->icount = cycles; - CLEANUP_conters; - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + CLEANUP_COUNTERS(); + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; do { - if( m68xx.wai_state & NSC8105_WAI ) + if( m68_state->wai_state & M6800_WAI ) { EAT_CYCLES; } @@ -2014,274 +2354,15 @@ static CPU_EXECUTE( nsc8105 ) debugger_instruction_hook(device->machine, PCD); ireg=M_RDOP(PCD); PC++; - - switch( ireg ) - { - case 0x00: illegal(); break; - case 0x01: illegal(); break; - case 0x02: nop(); break; - case 0x03: illegal(); break; - case 0x04: illegal(); break; - case 0x05: tap(); break; - case 0x06: illegal(); break; - case 0x07: tpa(); break; - case 0x08: inx(); break; - case 0x09: CLV; break; - case 0x0a: dex(); break; - case 0x0b: SEV; break; - case 0x0c: CLC; break; - case 0x0d: cli(); break; - case 0x0e: SEC; break; - case 0x0f: sei(); break; - case 0x10: sba(); break; - case 0x11: illegal(); break; - case 0x12: cba(); break; - case 0x13: illegal(); break; - case 0x14: illegal(); break; - case 0x15: tab(); break; - case 0x16: illegal(); break; - case 0x17: tba(); break; - case 0x18: illegal(); break; - case 0x19: illegal(); break; - case 0x1a: daa(); break; - case 0x1b: aba(); break; - case 0x1c: illegal(); break; - case 0x1d: illegal(); break; - case 0x1e: illegal(); break; - case 0x1f: illegal(); break; - case 0x20: bra(); break; - case 0x21: bhi(); break; - case 0x22: brn(); break; - case 0x23: bls(); break; - case 0x24: bcc(); break; - case 0x25: bne(); break; - case 0x26: bcs(); break; - case 0x27: beq(); break; - case 0x28: bvc(); break; - case 0x29: bpl(); break; - case 0x2a: bvs(); break; - case 0x2b: bmi(); break; - case 0x2c: bge(); break; - case 0x2d: bgt(); break; - case 0x2e: blt(); break; - case 0x2f: ble(); break; - case 0x30: tsx(); break; - case 0x31: pula(); break; - case 0x32: ins(); break; - case 0x33: pulb(); break; - case 0x34: des(); break; - case 0x35: psha(); break; - case 0x36: txs(); break; - case 0x37: pshb(); break; - case 0x38: illegal(); break; - case 0x39: illegal(); break; - case 0x3a: rts(); break; - case 0x3b: rti(); break; - case 0x3c: illegal(); break; - case 0x3d: wai(); break; - case 0x3e: illegal(); break; - case 0x3f: swi(); break; - case 0x40: suba_im(); break; - case 0x41: sbca_im(); break; - case 0x42: cmpa_im(); break; - case 0x43: illegal(); break; - case 0x44: anda_im(); break; - case 0x45: lda_im(); break; - case 0x46: bita_im(); break; - case 0x47: sta_im(); break; - case 0x48: eora_im(); break; - case 0x49: ora_im(); break; - case 0x4a: adca_im(); break; - case 0x4b: adda_im(); break; - case 0x4c: cmpx_im(); break; - case 0x4d: lds_im(); break; - case 0x4e: bsr(); break; - case 0x4f: sts_im(); /* orthogonality */ break; - case 0x50: suba_di(); break; - case 0x51: sbca_di(); break; - case 0x52: cmpa_di(); break; - case 0x53: illegal(); break; - case 0x54: anda_di(); break; - case 0x55: lda_di(); break; - case 0x56: bita_di(); break; - case 0x57: sta_di(); break; - case 0x58: eora_di(); break; - case 0x59: ora_di(); break; - case 0x5a: adca_di(); break; - case 0x5b: adda_di(); break; - case 0x5c: cmpx_di(); break; - case 0x5d: lds_di(); break; - case 0x5e: jsr_di(); break; - case 0x5f: sts_di(); break; - case 0x60: suba_ix(); break; - case 0x61: sbca_ix(); break; - case 0x62: cmpa_ix(); break; - case 0x63: illegal(); break; - case 0x64: anda_ix(); break; - case 0x65: lda_ix(); break; - case 0x66: bita_ix(); break; - case 0x67: sta_ix(); break; - case 0x68: eora_ix(); break; - case 0x69: ora_ix(); break; - case 0x6a: adca_ix(); break; - case 0x6b: adda_ix(); break; - case 0x6c: cmpx_ix(); break; - case 0x6d: lds_ix(); break; - case 0x6e: jsr_ix(); break; - case 0x6f: sts_ix(); break; - case 0x70: suba_ex(); break; - case 0x71: sbca_ex(); break; - case 0x72: cmpa_ex(); break; - case 0x73: illegal(); break; - case 0x74: anda_ex(); break; - case 0x75: lda_ex(); break; - case 0x76: bita_ex(); break; - case 0x77: sta_ex(); break; - case 0x78: eora_ex(); break; - case 0x79: ora_ex(); break; - case 0x7a: adca_ex(); break; - case 0x7b: adda_ex(); break; - case 0x7c: cmpx_ex(); break; - case 0x7d: lds_ex(); break; - case 0x7e: jsr_ex(); break; - case 0x7f: sts_ex(); break; - case 0x80: nega(); break; - case 0x81: illegal(); break; - case 0x82: illegal(); break; - case 0x83: coma(); break; - case 0x84: lsra(); break; - case 0x85: rora(); break; - case 0x86: illegal(); break; - case 0x87: asra(); break; - case 0x88: asla(); break; - case 0x89: deca(); break; - case 0x8a: rola(); break; - case 0x8b: illegal(); break; - case 0x8c: inca(); break; - case 0x8d: illegal(); break; - case 0x8e: tsta(); break; - case 0x8f: clra(); break; - case 0x90: negb(); break; - case 0x91: illegal(); break; - case 0x92: illegal(); break; - case 0x93: comb(); break; - case 0x94: lsrb(); break; - case 0x95: rorb(); break; - case 0x96: illegal(); break; - case 0x97: asrb(); break; - case 0x98: aslb(); break; - case 0x99: decb(); break; - case 0x9a: rolb(); break; - case 0x9b: illegal(); break; - case 0x9c: incb(); break; - case 0x9d: illegal(); break; - case 0x9e: tstb(); break; - case 0x9f: clrb(); break; - case 0xa0: neg_ix(); break; - case 0xa1: illegal(); break; - case 0xa2: illegal(); break; - case 0xa3: com_ix(); break; - case 0xa4: lsr_ix(); break; - case 0xa5: ror_ix(); break; - case 0xa6: illegal(); break; - case 0xa7: asr_ix(); break; - case 0xa8: asl_ix(); break; - case 0xa9: dec_ix(); break; - case 0xaa: rol_ix(); break; - case 0xab: illegal(); break; - case 0xac: inc_ix(); break; - case 0xad: jmp_ix(); break; - case 0xae: tst_ix(); break; - case 0xaf: clr_ix(); break; - case 0xb0: neg_ex(); break; - case 0xb1: illegal(); break; - case 0xb2: illegal(); break; - case 0xb3: com_ex(); break; - case 0xb4: lsr_ex(); break; - case 0xb5: ror_ex(); break; - case 0xb6: illegal(); break; - case 0xb7: asr_ex(); break; - case 0xb8: asl_ex(); break; - case 0xb9: dec_ex(); break; - case 0xba: rol_ex(); break; - case 0xbb: illegal(); break; - case 0xbc: inc_ex(); break; - case 0xbd: jmp_ex(); break; - case 0xbe: tst_ex(); break; - case 0xbf: clr_ex(); break; - case 0xc0: subb_im(); break; - case 0xc1: sbcb_im(); break; - case 0xc2: cmpb_im(); break; - case 0xc3: illegal(); break; - case 0xc4: andb_im(); break; - case 0xc5: ldb_im(); break; - case 0xc6: bitb_im(); break; - case 0xc7: stb_im(); break; - case 0xc8: eorb_im(); break; - case 0xc9: orb_im(); break; - case 0xca: adcb_im(); break; - case 0xcb: addb_im(); break; - case 0xcc: illegal(); break; - case 0xcd: ldx_im(); break; - case 0xce: illegal(); break; - case 0xcf: stx_im(); break; - case 0xd0: subb_di(); break; - case 0xd1: sbcb_di(); break; - case 0xd2: cmpb_di(); break; - case 0xd3: illegal(); break; - case 0xd4: andb_di(); break; - case 0xd5: ldb_di(); break; - case 0xd6: bitb_di(); break; - case 0xd7: stb_di(); break; - case 0xd8: eorb_di(); break; - case 0xd9: orb_di(); break; - case 0xda: adcb_di(); break; - case 0xdb: addb_di(); break; - case 0xdc: illegal(); break; - case 0xdd: ldx_di(); break; - case 0xde: illegal(); break; - case 0xdf: stx_di(); break; - case 0xe0: subb_ix(); break; - case 0xe1: sbcb_ix(); break; - case 0xe2: cmpb_ix(); break; - case 0xe3: illegal(); break; - case 0xe4: andb_ix(); break; - case 0xe5: ldb_ix(); break; - case 0xe6: bitb_ix(); break; - case 0xe7: stb_ix(); break; - case 0xe8: eorb_ix(); break; - case 0xe9: orb_ix(); break; - case 0xea: adcb_ix(); break; - case 0xeb: addb_ix(); break; - case 0xec: adcx_im(); break; /* NSC8105 only */ - case 0xed: ldx_ix(); break; - case 0xee: illegal(); break; - case 0xef: stx_ix(); break; - case 0xf0: subb_ex(); break; - case 0xf1: sbcb_ex(); break; - case 0xf2: cmpb_ex(); break; - case 0xf3: illegal(); break; - case 0xf4: andb_ex(); break; - case 0xf5: ldb_ex(); break; - case 0xf6: bitb_ex(); break; - case 0xf7: stb_ex(); break; - case 0xf8: eorb_ex(); break; - case 0xf9: orb_ex(); break; - case 0xfa: adcb_ex(); break; - case 0xfb: addb_ex(); break; - case 0xfc: addx_ex(); break; - case 0xfd: ldx_ex(); break; - case 0xfe: illegal(); break; - case 0xff: stx_ex(); break; - } - INCREMENT_COUNTER(cycles_nsc8105[ireg]); + nsc8105_execute_one(m68_state, ireg); + increment_counter(m68_state, cycles_nsc8105[ireg]); } - } while( m6800_ICount>0 ); + } while( m68_state->icount>0 ); - INCREMENT_COUNTER(m68xx.extra_cycles); - m68xx.extra_cycles = 0; + increment_counter(m68_state, m68_state->extra_cycles); + m68_state->extra_cycles = 0; - return cycles - m6800_ICount; + return cycles - m68_state->icount; } #endif @@ -2290,83 +2371,84 @@ static CPU_EXECUTE( nsc8105 ) static READ8_HANDLER( m6803_internal_registers_r ) { + m68_state_t *m68_state = token; switch (offset) { case 0x00: - return m68xx.port1_ddr; + return m68_state->port1_ddr; case 0x01: - return m68xx.port2_ddr; + return m68_state->port2_ddr; case 0x02: - return (io_read_byte_8be(M6803_PORT1) & (m68xx.port1_ddr ^ 0xff)) - | (m68xx.port1_data & m68xx.port1_ddr); + return (io_read_byte_8be(M6803_PORT1) & (m68_state->port1_ddr ^ 0xff)) + | (m68_state->port1_data & m68_state->port1_ddr); case 0x03: - return (io_read_byte_8be(M6803_PORT2) & (m68xx.port2_ddr ^ 0xff)) - | (m68xx.port2_data & m68xx.port2_ddr); + return (io_read_byte_8be(M6803_PORT2) & (m68_state->port2_ddr ^ 0xff)) + | (m68_state->port2_data & m68_state->port2_ddr); case 0x04: - return m68xx.port3_ddr; + return m68_state->port3_ddr; case 0x05: - return m68xx.port4_ddr; + return m68_state->port4_ddr; case 0x06: - return (io_read_byte_8be(M6803_PORT3) & (m68xx.port3_ddr ^ 0xff)) - | (m68xx.port3_data & m68xx.port3_ddr); + return (io_read_byte_8be(M6803_PORT3) & (m68_state->port3_ddr ^ 0xff)) + | (m68_state->port3_data & m68_state->port3_ddr); case 0x07: - return (io_read_byte_8be(M6803_PORT4) & (m68xx.port4_ddr ^ 0xff)) - | (m68xx.port4_data & m68xx.port4_ddr); + return (io_read_byte_8be(M6803_PORT4) & (m68_state->port4_ddr ^ 0xff)) + | (m68_state->port4_data & m68_state->port4_ddr); case 0x08: - m68xx.pending_tcsr = 0; - return m68xx.tcsr; + m68_state->pending_tcsr = 0; + return m68_state->tcsr; case 0x09: - if(!(m68xx.pending_tcsr&TCSR_TOF)) + if(!(m68_state->pending_tcsr&TCSR_TOF)) { - m68xx.tcsr &= ~TCSR_TOF; + m68_state->tcsr &= ~TCSR_TOF; MODIFIED_tcsr; } - return m68xx.counter.b.h; + return m68_state->counter.b.h; case 0x0a: - return m68xx.counter.b.l; + return m68_state->counter.b.l; case 0x0b: - if(!(m68xx.pending_tcsr&TCSR_OCF)) + if(!(m68_state->pending_tcsr&TCSR_OCF)) { - m68xx.tcsr &= ~TCSR_OCF; + m68_state->tcsr &= ~TCSR_OCF; MODIFIED_tcsr; } - return m68xx.output_compare.b.h; + return m68_state->output_compare.b.h; case 0x0c: - if(!(m68xx.pending_tcsr&TCSR_OCF)) + if(!(m68_state->pending_tcsr&TCSR_OCF)) { - m68xx.tcsr &= ~TCSR_OCF; + m68_state->tcsr &= ~TCSR_OCF; MODIFIED_tcsr; } - return m68xx.output_compare.b.l; + return m68_state->output_compare.b.l; case 0x0d: - if(!(m68xx.pending_tcsr&TCSR_ICF)) + if(!(m68_state->pending_tcsr&TCSR_ICF)) { - m68xx.tcsr &= ~TCSR_ICF; + m68_state->tcsr &= ~TCSR_ICF; MODIFIED_tcsr; } - return (m68xx.input_capture >> 0) & 0xff; + return (m68_state->input_capture >> 0) & 0xff; case 0x0e: - return (m68xx.input_capture >> 8) & 0xff; + return (m68_state->input_capture >> 8) & 0xff; case 0x0f: logerror("CPU #%d PC %04x: warning - read from unsupported register %02x\n",cpunum_get_active(),cpu_get_pc(machine->activecpu),offset); return 0; case 0x10: - return m68xx.rmcr; + return m68_state->rmcr; case 0x11: - m68xx.trcsr_read = 1; - return m68xx.trcsr; + m68_state->trcsr_read = 1; + return m68_state->trcsr; case 0x12: - if (m68xx.trcsr_read) + if (m68_state->trcsr_read) { - m68xx.trcsr_read = 0; - m68xx.trcsr = m68xx.trcsr & 0x3f; + m68_state->trcsr_read = 0; + m68_state->trcsr = m68_state->trcsr & 0x3f; } - return m68xx.rdr; + return m68_state->rdr; case 0x13: - return m68xx.tdr; + return m68_state->tdr; case 0x14: logerror("CPU #%d PC %04x: read RAM control register\n",cpunum_get_active(),cpu_get_pc(machine->activecpu)); - return m68xx.ram_ctrl; + return m68_state->ram_ctrl; case 0x15: case 0x16: case 0x17: @@ -2386,125 +2468,125 @@ static READ8_HANDLER( m6803_internal_registers_r ) static WRITE8_HANDLER( m6803_internal_registers_w ) { - static int latch09; + m68_state_t *m68_state = token; switch (offset) { case 0x00: - if (m68xx.port1_ddr != data) + if (m68_state->port1_ddr != data) { - m68xx.port1_ddr = data; - if(m68xx.port1_ddr == 0xff) - io_write_byte_8be(M6803_PORT1,m68xx.port1_data); + m68_state->port1_ddr = data; + if(m68_state->port1_ddr == 0xff) + io_write_byte_8be(M6803_PORT1,m68_state->port1_data); else - io_write_byte_8be(M6803_PORT1,(m68xx.port1_data & m68xx.port1_ddr) - | (io_read_byte_8be(M6803_PORT1) & (m68xx.port1_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT1,(m68_state->port1_data & m68_state->port1_ddr) + | (io_read_byte_8be(M6803_PORT1) & (m68_state->port1_ddr ^ 0xff))); } break; case 0x01: - if (m68xx.port2_ddr != data) + if (m68_state->port2_ddr != data) { - m68xx.port2_ddr = data; - if(m68xx.port2_ddr == 0xff) - io_write_byte_8be(M6803_PORT2,m68xx.port2_data); + m68_state->port2_ddr = data; + if(m68_state->port2_ddr == 0xff) + io_write_byte_8be(M6803_PORT2,m68_state->port2_data); else - io_write_byte_8be(M6803_PORT2,(m68xx.port2_data & m68xx.port2_ddr) - | (io_read_byte_8be(M6803_PORT2) & (m68xx.port2_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT2,(m68_state->port2_data & m68_state->port2_ddr) + | (io_read_byte_8be(M6803_PORT2) & (m68_state->port2_ddr ^ 0xff))); - if (m68xx.port2_ddr & 2) + if (m68_state->port2_ddr & 2) logerror("CPU #%d PC %04x: warning - port 2 bit 1 set as output (OLVL) - not supported\n",cpunum_get_active(),cpu_get_pc(machine->activecpu)); } break; case 0x02: - m68xx.port1_data = data; - if(m68xx.port1_ddr == 0xff) - io_write_byte_8be(M6803_PORT1,m68xx.port1_data); + m68_state->port1_data = data; + if(m68_state->port1_ddr == 0xff) + io_write_byte_8be(M6803_PORT1,m68_state->port1_data); else - io_write_byte_8be(M6803_PORT1,(m68xx.port1_data & m68xx.port1_ddr) - | (io_read_byte_8be(M6803_PORT1) & (m68xx.port1_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT1,(m68_state->port1_data & m68_state->port1_ddr) + | (io_read_byte_8be(M6803_PORT1) & (m68_state->port1_ddr ^ 0xff))); break; case 0x03: - if (m68xx.trcsr & M6800_TRCSR_TE) + if (m68_state->trcsr & M6800_TRCSR_TE) { - m68xx.port2_data = (data & 0xef) | (m68xx.tx << 4); + m68_state->port2_data = (data & 0xef) | (m68_state->tx << 4); } else { - m68xx.port2_data = data; + m68_state->port2_data = data; } - if(m68xx.port2_ddr == 0xff) - io_write_byte_8be(M6803_PORT2,m68xx.port2_data); + if(m68_state->port2_ddr == 0xff) + io_write_byte_8be(M6803_PORT2,m68_state->port2_data); else - io_write_byte_8be(M6803_PORT2,(m68xx.port2_data & m68xx.port2_ddr) - | (io_read_byte_8be(M6803_PORT2) & (m68xx.port2_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT2,(m68_state->port2_data & m68_state->port2_ddr) + | (io_read_byte_8be(M6803_PORT2) & (m68_state->port2_ddr ^ 0xff))); break; case 0x04: - if (m68xx.port3_ddr != data) + if (m68_state->port3_ddr != data) { - m68xx.port3_ddr = data; - if(m68xx.port3_ddr == 0xff) - io_write_byte_8be(M6803_PORT3,m68xx.port3_data); + m68_state->port3_ddr = data; + if(m68_state->port3_ddr == 0xff) + io_write_byte_8be(M6803_PORT3,m68_state->port3_data); else - io_write_byte_8be(M6803_PORT3,(m68xx.port3_data & m68xx.port3_ddr) - | (io_read_byte_8be(M6803_PORT3) & (m68xx.port3_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT3,(m68_state->port3_data & m68_state->port3_ddr) + | (io_read_byte_8be(M6803_PORT3) & (m68_state->port3_ddr ^ 0xff))); } break; case 0x05: - if (m68xx.port4_ddr != data) + if (m68_state->port4_ddr != data) { - m68xx.port4_ddr = data; - if(m68xx.port4_ddr == 0xff) - io_write_byte_8be(M6803_PORT4,m68xx.port4_data); + m68_state->port4_ddr = data; + if(m68_state->port4_ddr == 0xff) + io_write_byte_8be(M6803_PORT4,m68_state->port4_data); else - io_write_byte_8be(M6803_PORT4,(m68xx.port4_data & m68xx.port4_ddr) - | (io_read_byte_8be(M6803_PORT4) & (m68xx.port4_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT4,(m68_state->port4_data & m68_state->port4_ddr) + | (io_read_byte_8be(M6803_PORT4) & (m68_state->port4_ddr ^ 0xff))); } break; case 0x06: - m68xx.port3_data = data; - if(m68xx.port3_ddr == 0xff) - io_write_byte_8be(M6803_PORT3,m68xx.port3_data); + m68_state->port3_data = data; + if(m68_state->port3_ddr == 0xff) + io_write_byte_8be(M6803_PORT3,m68_state->port3_data); else - io_write_byte_8be(M6803_PORT3,(m68xx.port3_data & m68xx.port3_ddr) - | (io_read_byte_8be(M6803_PORT3) & (m68xx.port3_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT3,(m68_state->port3_data & m68_state->port3_ddr) + | (io_read_byte_8be(M6803_PORT3) & (m68_state->port3_ddr ^ 0xff))); break; case 0x07: - m68xx.port4_data = data; - if(m68xx.port4_ddr == 0xff) - io_write_byte_8be(M6803_PORT4,m68xx.port4_data); + m68_state->port4_data = data; + if(m68_state->port4_ddr == 0xff) + io_write_byte_8be(M6803_PORT4,m68_state->port4_data); else - io_write_byte_8be(M6803_PORT4,(m68xx.port4_data & m68xx.port4_ddr) - | (io_read_byte_8be(M6803_PORT4) & (m68xx.port4_ddr ^ 0xff))); + io_write_byte_8be(M6803_PORT4,(m68_state->port4_data & m68_state->port4_ddr) + | (io_read_byte_8be(M6803_PORT4) & (m68_state->port4_ddr ^ 0xff))); break; case 0x08: - m68xx.tcsr = data; - m68xx.pending_tcsr &= m68xx.tcsr; + m68_state->tcsr = data; + m68_state->pending_tcsr &= m68_state->tcsr; MODIFIED_tcsr; if( !(CC & 0x10) ) - m6800_check_irq2(); + m6800_check_irq2(m68_state); break; case 0x09: - latch09 = data & 0xff; /* 6301 only */ + m68_state->latch09 = data & 0xff; /* 6301 only */ CT = 0xfff8; TOH = CTH; MODIFIED_counters; break; case 0x0a: /* 6301 only */ - CT = (latch09 << 8) | (data & 0xff); + CT = (m68_state->latch09 << 8) | (data & 0xff); TOH = CTH; MODIFIED_counters; break; case 0x0b: - if( m68xx.output_compare.b.h != data) + if( m68_state->output_compare.b.h != data) { - m68xx.output_compare.b.h = data; + m68_state->output_compare.b.h = data; MODIFIED_counters; } break; case 0x0c: - if( m68xx.output_compare.b.l != data) + if( m68_state->output_compare.b.l != data) { - m68xx.output_compare.b.l = data; + m68_state->output_compare.b.l = data; MODIFIED_counters; } break; @@ -2517,45 +2599,45 @@ static WRITE8_HANDLER( m6803_internal_registers_w ) logerror("CPU #%d PC %04x: warning - write %02x to unsupported internal register %02x\n",cpunum_get_active(),cpu_get_pc(machine->activecpu),data,offset); break; case 0x10: - m68xx.rmcr = data & 0x0f; + m68_state->rmcr = data & 0x0f; - switch ((m68xx.rmcr & M6800_RMCR_CC_MASK) >> 2) + switch ((m68_state->rmcr & M6800_RMCR_CC_MASK) >> 2) { case 0: case 3: // not implemented - timer_enable(m6800_rx_timer, 0); - timer_enable(m6800_tx_timer, 0); + timer_enable(m68_state->m6800_rx_timer, 0); + timer_enable(m68_state->m6800_tx_timer, 0); break; case 1: case 2: { - int divisor = M6800_RMCR_SS[m68xx.rmcr & M6800_RMCR_SS_MASK]; + int divisor = M6800_RMCR_SS[m68_state->rmcr & M6800_RMCR_SS_MASK]; - timer_adjust_periodic(m6800_rx_timer, attotime_zero, cpunum_get_active(), ATTOTIME_IN_HZ(m68xx.clock / divisor)); - timer_adjust_periodic(m6800_tx_timer, attotime_zero, cpunum_get_active(), ATTOTIME_IN_HZ(m68xx.clock / divisor)); + timer_adjust_periodic(m68_state->m6800_rx_timer, attotime_zero, cpunum_get_active(), ATTOTIME_IN_HZ(m68_state->clock / divisor)); + timer_adjust_periodic(m68_state->m6800_tx_timer, attotime_zero, cpunum_get_active(), ATTOTIME_IN_HZ(m68_state->clock / divisor)); } break; } break; case 0x11: - if ((data & M6800_TRCSR_TE) && !(m68xx.trcsr & M6800_TRCSR_TE)) + if ((data & M6800_TRCSR_TE) && !(m68_state->trcsr & M6800_TRCSR_TE)) { - m68xx.txstate = M6800_TX_STATE_INIT; + m68_state->txstate = M6800_TX_STATE_INIT; } - m68xx.trcsr = (m68xx.trcsr & 0xe0) | (data & 0x1f); + m68_state->trcsr = (m68_state->trcsr & 0xe0) | (data & 0x1f); break; case 0x13: - if (m68xx.trcsr_read) + if (m68_state->trcsr_read) { - m68xx.trcsr_read = 0; - m68xx.trcsr &= ~M6800_TRCSR_TDRE; + m68_state->trcsr_read = 0; + m68_state->trcsr &= ~M6800_TRCSR_TDRE; } - m68xx.tdr = data; + m68_state->tdr = data; break; case 0x14: logerror("CPU #%d PC %04x: write %02x to RAM control register\n",cpunum_get_active(),cpu_get_pc(machine->activecpu),data); - m68xx.ram_ctrl = data; + m68_state->ram_ctrl = data; break; case 0x15: case 0x16: @@ -2582,21 +2664,23 @@ static WRITE8_HANDLER( m6803_internal_registers_w ) static CPU_SET_INFO( m6800 ) { + m68_state_t *m68_state = device->token; + switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + M6800_IRQ_LINE: set_irq_line(M6800_IRQ_LINE, info->i); break; - case CPUINFO_INT_INPUT_STATE + M6800_TIN_LINE: set_irq_line(M6800_TIN_LINE, info->i); break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(INPUT_LINE_NMI, info->i); break; + case CPUINFO_INT_INPUT_STATE + M6800_IRQ_LINE: set_irq_line(m68_state, M6800_IRQ_LINE, info->i); break; + case CPUINFO_INT_INPUT_STATE + M6800_TIN_LINE: set_irq_line(m68_state, M6800_TIN_LINE, info->i); break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(m68_state, INPUT_LINE_NMI, info->i); break; - case CPUINFO_INT_PC: PC = info->i; CHANGE_PC(); break; - case CPUINFO_INT_REGISTER + M6800_PC: m68xx.pc.w.l = info->i; break; + case CPUINFO_INT_PC: PC = info->i; CHANGE_PC(m68_state); break; + case CPUINFO_INT_REGISTER + M6800_PC: m68_state->pc.w.l = info->i; break; case CPUINFO_INT_SP: S = info->i; break; - case CPUINFO_INT_REGISTER + M6800_S: m68xx.s.w.l = info->i; break; - case CPUINFO_INT_REGISTER + M6800_CC: m68xx.cc = info->i; break; - case CPUINFO_INT_REGISTER + M6800_A: m68xx.d.b.h = info->i; break; - case CPUINFO_INT_REGISTER + M6800_B: m68xx.d.b.l = info->i; break; - case CPUINFO_INT_REGISTER + M6800_X: m68xx.x.w.l = info->i; break; + case CPUINFO_INT_REGISTER + M6800_S: m68_state->s.w.l = info->i; break; + case CPUINFO_INT_REGISTER + M6800_CC: m68_state->cc = info->i; break; + case CPUINFO_INT_REGISTER + M6800_A: m68_state->d.b.h = info->i; break; + case CPUINFO_INT_REGISTER + M6800_B: m68_state->d.b.l = info->i; break; + case CPUINFO_INT_REGISTER + M6800_X: m68_state->x.w.l = info->i; break; } } @@ -2608,10 +2692,11 @@ static CPU_SET_INFO( m6800 ) CPU_GET_INFO( m6800 ) { + m68_state_t *m68_state = device ? device->token : NULL; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(m68xx); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(m68_state_t); break; case CPUINFO_INT_INPUT_LINES: info->i = 2; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -2632,21 +2717,21 @@ CPU_GET_INFO( m6800 ) case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; - case CPUINFO_INT_INPUT_STATE + M6800_IRQ_LINE: info->i = m68xx.irq_state[M6800_IRQ_LINE]; break; - case CPUINFO_INT_INPUT_STATE + M6800_TIN_LINE: info->i = m68xx.irq_state[M6800_TIN_LINE]; break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = m68xx.nmi_state; break; + case CPUINFO_INT_INPUT_STATE + M6800_IRQ_LINE: info->i = m68_state->irq_state[M6800_IRQ_LINE]; break; + case CPUINFO_INT_INPUT_STATE + M6800_TIN_LINE: info->i = m68_state->irq_state[M6800_TIN_LINE]; break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = m68_state->nmi_state; break; - case CPUINFO_INT_PREVIOUSPC: info->i = m68xx.ppc.w.l; break; + case CPUINFO_INT_PREVIOUSPC: info->i = m68_state->ppc.w.l; break; case CPUINFO_INT_PC: info->i = PC; break; - case CPUINFO_INT_REGISTER + M6800_PC: info->i = m68xx.pc.w.l; break; + case CPUINFO_INT_REGISTER + M6800_PC: info->i = m68_state->pc.w.l; break; case CPUINFO_INT_SP: info->i = S; break; - case CPUINFO_INT_REGISTER + M6800_S: info->i = m68xx.s.w.l; break; - case CPUINFO_INT_REGISTER + M6800_CC: info->i = m68xx.cc; break; - case CPUINFO_INT_REGISTER + M6800_A: info->i = m68xx.d.b.h; break; - case CPUINFO_INT_REGISTER + M6800_B: info->i = m68xx.d.b.l; break; - case CPUINFO_INT_REGISTER + M6800_X: info->i = m68xx.x.w.l; break; - case CPUINFO_INT_REGISTER + M6800_WAI_STATE: info->i = m68xx.wai_state; break; + case CPUINFO_INT_REGISTER + M6800_S: info->i = m68_state->s.w.l; break; + case CPUINFO_INT_REGISTER + M6800_CC: info->i = m68_state->cc; break; + case CPUINFO_INT_REGISTER + M6800_A: info->i = m68_state->d.b.h; break; + case CPUINFO_INT_REGISTER + M6800_B: info->i = m68_state->d.b.l; break; + case CPUINFO_INT_REGISTER + M6800_X: info->i = m68_state->x.w.l; break; + case CPUINFO_INT_REGISTER + M6800_WAI_STATE: info->i = m68_state->wai_state; break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(m6800); break; @@ -2658,7 +2743,7 @@ CPU_GET_INFO( m6800 ) case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(m6800); break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(m6800); break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m6800_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68_state->icount; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "M6800"); break; @@ -2669,23 +2754,23 @@ CPU_GET_INFO( m6800 ) case CPUINFO_STR_FLAGS: sprintf(info->s, "%c%c%c%c%c%c%c%c", - m68xx.cc & 0x80 ? '?':'.', - m68xx.cc & 0x40 ? '?':'.', - m68xx.cc & 0x20 ? 'H':'.', - m68xx.cc & 0x10 ? 'I':'.', - m68xx.cc & 0x08 ? 'N':'.', - m68xx.cc & 0x04 ? 'Z':'.', - m68xx.cc & 0x02 ? 'V':'.', - m68xx.cc & 0x01 ? 'C':'.'); + m68_state->cc & 0x80 ? '?':'.', + m68_state->cc & 0x40 ? '?':'.', + m68_state->cc & 0x20 ? 'H':'.', + m68_state->cc & 0x10 ? 'I':'.', + m68_state->cc & 0x08 ? 'N':'.', + m68_state->cc & 0x04 ? 'Z':'.', + m68_state->cc & 0x02 ? 'V':'.', + m68_state->cc & 0x01 ? 'C':'.'); break; - case CPUINFO_STR_REGISTER + M6800_A: sprintf(info->s, "A:%02X", m68xx.d.b.h); break; - case CPUINFO_STR_REGISTER + M6800_B: sprintf(info->s, "B:%02X", m68xx.d.b.l); break; - case CPUINFO_STR_REGISTER + M6800_PC: sprintf(info->s, "PC:%04X", m68xx.pc.w.l); break; - case CPUINFO_STR_REGISTER + M6800_S: sprintf(info->s, "S:%04X", m68xx.s.w.l); break; - case CPUINFO_STR_REGISTER + M6800_X: sprintf(info->s, "X:%04X", m68xx.x.w.l); break; - case CPUINFO_STR_REGISTER + M6800_CC: sprintf(info->s, "CC:%02X", m68xx.cc); break; - case CPUINFO_STR_REGISTER + M6800_WAI_STATE: sprintf(info->s, "WAI:%X", m68xx.wai_state); break; + case CPUINFO_STR_REGISTER + M6800_A: sprintf(info->s, "A:%02X", m68_state->d.b.h); break; + case CPUINFO_STR_REGISTER + M6800_B: sprintf(info->s, "B:%02X", m68_state->d.b.l); break; + case CPUINFO_STR_REGISTER + M6800_PC: sprintf(info->s, "PC:%04X", m68_state->pc.w.l); break; + case CPUINFO_STR_REGISTER + M6800_S: sprintf(info->s, "S:%04X", m68_state->s.w.l); break; + case CPUINFO_STR_REGISTER + M6800_X: sprintf(info->s, "X:%04X", m68_state->x.w.l); break; + case CPUINFO_STR_REGISTER + M6800_CC: sprintf(info->s, "CC:%02X", m68_state->cc); break; + case CPUINFO_STR_REGISTER + M6800_WAI_STATE: sprintf(info->s, "WAI:%X", m68_state->wai_state); break; } } diff --git a/src/emu/cpu/m6800/m6800.h b/src/emu/cpu/m6800/m6800.h index 8fcbb0af643..608e68a1ac1 100644 --- a/src/emu/cpu/m6800/m6800.h +++ b/src/emu/cpu/m6800/m6800.h @@ -13,19 +13,91 @@ enum M6800_WAI_STATE }; -#define M6800_WAI 8 /* set when WAI is waiting for an interrupt */ -#define M6800_SLP 0x10 /* HD63701 only */ - - -#define M6800_IRQ_LINE 0 /* IRQ line number */ -#define M6800_TIN_LINE 1 /* P20/Tin Input Capture line (eddge sense) */ +enum +{ + M6800_IRQ_LINE = 0, /* IRQ line number */ + M6800_TIN_LINE /* P20/Tin Input Capture line (eddge sense) */ /* Active eddge is selecrable by internal reg. */ /* raise eddge : CLEAR_LINE -> ASSERT_LINE */ /* fall eddge : ASSERT_LINE -> CLEAR_LINE */ /* it is usuali to use PULSE_LINE state */ +}; -extern CPU_GET_INFO( m6800 ); +#if (HAS_M6801||HAS_M6803||HAS_HD63701) +/* By default, on a port write port bits which are not set as output in the DDR */ +/* are set to the value returned by a read from the same port. If you need to */ +/* know the DDR for e.g. port 1, do m6803_internal_registers_r(M6801_DDR1) */ +enum +{ + M6803_DDR1 = 0x00, + M6803_DDR2 = 0x01, + M6803_DDR3 = 0x04, + M6803_DDR4 = 0x05 +}; + +enum +{ + M6803_PORT1 = 0x100, + M6803_PORT2, + M6803_PORT3, + M6803_PORT4 +}; +#endif + +CPU_GET_INFO( m6800 ); + +#if (HAS_M6801) +CPU_GET_INFO( m6801 ); +#endif + +#if (HAS_M6802) +CPU_GET_INFO( m6802 ); +#endif + +#if (HAS_M6803) +CPU_GET_INFO( m6803 ); +#endif + +#if (HAS_M6808) +CPU_GET_INFO( m6808 ); +#endif + +#if (HAS_HD63701) +CPU_GET_INFO( hd63701 ); + +/* FIMXE: these should be replaced to use m6803 ones */ +#define HD63701_DDR1 M6803_DDR1 +#define HD63701_DDR2 M6803_DDR2 +#define HD63701_DDR3 M6803_DDR3 +#define HD63701_DDR4 M6803_DDR4 + +#define HD63701_PORT1 M6803_PORT1 +#define HD63701_PORT2 M6803_PORT2 +#define HD63701_PORT3 M6803_PORT3 +#define HD63701_PORT4 M6803_PORT4 + +READ8_HANDLER( hd63701_internal_registers_r ); +WRITE8_HANDLER( hd63701_internal_registers_w ); + +#endif + +#if (HAS_NSC8105) +CPU_GET_INFO( nsc8105 ); +#endif + + +CPU_DISASSEMBLE( m6800 ); +CPU_DISASSEMBLE( m6801 ); +CPU_DISASSEMBLE( m6802 ); +CPU_DISASSEMBLE( m6803 ); +CPU_DISASSEMBLE( m6808 ); +CPU_DISASSEMBLE( hd63701 ); +CPU_DISASSEMBLE( nsc8105 ); + + +#if 0 +/* Wonder if we need it */ /**************************************************************************** * For now make the 6801 using the m6800 variables and functions ****************************************************************************/ @@ -144,8 +216,6 @@ extern CPU_GET_INFO( m6808 ); extern CPU_GET_INFO( hd63701 ); -void hd63701_trap_pc(void); - #define HD63701_DDR1 M6803_DDR1 #define HD63701_DDR2 M6803_DDR2 #define HD63701_DDR3 M6803_DDR3 @@ -182,44 +252,6 @@ WRITE8_HANDLER( hd63701_internal_registers_w ); extern CPU_GET_INFO( nsc8105 ); #endif -/****************************************************************************/ -/* Read a byte from given memory location */ -/****************************************************************************/ -/* ASG 971005 -- changed to program_read_byte_8/program_write_byte_8 */ -#define M6800_RDMEM(Addr) ((unsigned)program_read_byte_8be(Addr)) -/****************************************************************************/ -/* Write a byte to given memory location */ -/****************************************************************************/ -#define M6800_WRMEM(Addr,Value) (program_write_byte_8be(Addr,Value)) - -/****************************************************************************/ -/* M6800_RDOP() is identical to M6800_RDMEM() except it is used for reading */ -/* opcodes. In case of system with memory mapped I/O, this function can be */ -/* used to greatly speed up emulation */ -/****************************************************************************/ -#define M6800_RDOP(Addr) ((unsigned)cpu_readop(Addr)) - -/****************************************************************************/ -/* M6800_RDOP_ARG() is identical to M6800_RDOP() but it's used for reading */ -/* opcode arguments. This difference can be used to support systems that */ -/* use different encoding mechanisms for opcodes and opcode arguments */ -/****************************************************************************/ -#define M6800_RDOP_ARG(Addr) ((unsigned)cpu_readop_arg(Addr)) - -#ifndef FALSE -# define FALSE 0 #endif -#ifndef TRUE -# define TRUE (!FALSE) -#endif - -CPU_DISASSEMBLE( m6800 ); -CPU_DISASSEMBLE( m6801 ); -CPU_DISASSEMBLE( m6802 ); -CPU_DISASSEMBLE( m6803 ); -CPU_DISASSEMBLE( m6808 ); -CPU_DISASSEMBLE( hd63701 ); -CPU_DISASSEMBLE( nsc8105 ); - #endif /* __M6800_H__ */ diff --git a/src/emu/cpu/m6805/6805ops.c b/src/emu/cpu/m6805/6805ops.c index 3ad923cc88f..e7d45e47ec6 100644 --- a/src/emu/cpu/m6805/6805ops.c +++ b/src/emu/cpu/m6805/6805ops.c @@ -13,13 +13,17 @@ HNZC */ -static void illegal( void ) +#define OP_HANDLER(_name) INLINE void _name (void /*m68_state_t *m68_state*/) + +#define OP_HANDLER_BIT(_name) INLINE void _name (/*m68_state_t *m68_state,*/ UINT8 bit) + +OP_HANDLER( illegal ) { logerror("M6805: illegal opcode\n"); } /* $00/$02/$04/$06/$08/$0A/$0C/$0E BRSET direct,relative ---- */ -INLINE void brset (UINT8 bit) +OP_HANDLER_BIT( brset ) { UINT8 t,r; DIRBYTE(r); @@ -41,7 +45,7 @@ INLINE void brset (UINT8 bit) } /* $01/$03/$05/$07/$09/$0B/$0D/$0F BRCLR direct,relative ---- */ -INLINE void brclr (UINT8 bit) +OP_HANDLER_BIT( brclr ) { UINT8 t,r; DIRBYTE(r); @@ -63,7 +67,7 @@ INLINE void brclr (UINT8 bit) } /* $10/$12/$14/$16/$18/$1A/$1C/$1E BSET direct ---- */ -INLINE void bset (UINT8 bit) +OP_HANDLER_BIT( bset ) { UINT8 t,r; DIRBYTE(t); r=t|bit; @@ -71,7 +75,7 @@ INLINE void bset (UINT8 bit) } /* $11/$13/$15/$17/$19/$1B/$1D/$1F BCLR direct ---- */ -INLINE void bclr (UINT8 bit) +OP_HANDLER_BIT( bclr) { UINT8 t,r; DIRBYTE(t); r=t&(~bit); @@ -79,10 +83,11 @@ INLINE void bclr (UINT8 bit) } /* $20 BRA relative ---- */ -INLINE void bra( void ) +OP_HANDLER( bra ) { UINT8 t; - IMMBYTE(t);PC+=SIGNED(t); + IMMBYTE(t); + PC+=SIGNED(t); if (t==0xfe) { /* speed up busy loops */ @@ -92,86 +97,86 @@ INLINE void bra( void ) } /* $21 BRN relative ---- */ -INLINE void brn( void ) +OP_HANDLER( brn ) { UINT8 t; IMMBYTE(t); } /* $22 BHI relative ---- */ -INLINE void bhi( void ) +OP_HANDLER( bhi ) { BRANCH( !(CC&(CFLAG|ZFLAG)) ); } /* $23 BLS relative ---- */ -INLINE void bls( void ) +OP_HANDLER( bls ) { BRANCH( CC&(CFLAG|ZFLAG) ); } /* $24 BCC relative ---- */ -INLINE void bcc( void ) +OP_HANDLER( bcc ) { BRANCH( !(CC&CFLAG) ); } /* $25 BCS relative ---- */ -INLINE void bcs( void ) +OP_HANDLER( bcs ) { BRANCH( CC&CFLAG ); } /* $26 BNE relative ---- */ -INLINE void bne( void ) +OP_HANDLER( bne ) { BRANCH( !(CC&ZFLAG) ); } /* $27 BEQ relative ---- */ -INLINE void beq( void ) +OP_HANDLER( beq ) { BRANCH( CC&ZFLAG ); } /* $28 BHCC relative ---- */ -INLINE void bhcc( void ) +OP_HANDLER( bhcc ) { BRANCH( !(CC&HFLAG) ); } /* $29 BHCS relative ---- */ -INLINE void bhcs( void ) +OP_HANDLER( bhcs ) { BRANCH( CC&HFLAG ); } /* $2a BPL relative ---- */ -INLINE void bpl( void ) +OP_HANDLER( bpl ) { BRANCH( !(CC&NFLAG) ); } /* $2b BMI relative ---- */ -INLINE void bmi( void ) +OP_HANDLER( bmi ) { BRANCH( CC&NFLAG ); } /* $2c BMC relative ---- */ -INLINE void bmc( void ) +OP_HANDLER( bmc ) { BRANCH( !(CC&IFLAG) ); } /* $2d BMS relative ---- */ -INLINE void bms( void ) +OP_HANDLER( bms ) { BRANCH( CC&IFLAG ); } /* $2e BIL relative ---- */ -INLINE void bil( void ) +OP_HANDLER( bil ) { if(SUBTYPE==SUBTYPE_HD63705) { @@ -184,7 +189,7 @@ INLINE void bil( void ) } /* $2f BIH relative ---- */ -INLINE void bih( void ) +OP_HANDLER( bih ) { if(SUBTYPE==SUBTYPE_HD63705) { @@ -197,12 +202,14 @@ INLINE void bih( void ) } /* $30 NEG direct -*** */ -INLINE void neg_di( void ) +OP_HANDLER( neg_di ) { UINT8 t; UINT16 r; - DIRBYTE(t); r=-t; - CLR_NZC; SET_FLAGS8(0,t,r); + DIRBYTE(t); + r=-t; + CLR_NZC; + SET_FLAGS8(0,t,r); WM(EAD,r); } @@ -211,16 +218,19 @@ INLINE void neg_di( void ) /* $32 ILLEGAL */ /* $33 COM direct -**1 */ -INLINE void com_di( void ) +OP_HANDLER( com_di ) { UINT8 t; - DIRBYTE(t); t = ~t; - CLR_NZ; SET_NZ8(t); SEC; + DIRBYTE(t); + t = ~t; + CLR_NZ; + SET_NZ8(t); + SEC; WM(EAD,t); } /* $34 LSR direct -0** */ -INLINE void lsr_di( void ) +OP_HANDLER( lsr_di ) { UINT8 t; DIRBYTE(t); @@ -234,7 +244,7 @@ INLINE void lsr_di( void ) /* $35 ILLEGAL */ /* $36 ROR direct -*** */ -INLINE void ror_di( void ) +OP_HANDLER( ror_di ) { UINT8 t,r; DIRBYTE(t); @@ -247,7 +257,7 @@ INLINE void ror_di( void ) } /* $37 ASR direct ?*** */ -INLINE void asr_di( void ) +OP_HANDLER( asr_di ) { UINT8 t; DIRBYTE(t); @@ -258,7 +268,7 @@ INLINE void asr_di( void ) } /* $38 LSL direct ?*** */ -INLINE void lsl_di( void ) +OP_HANDLER( lsl_di ) { UINT8 t; UINT16 r; @@ -270,7 +280,7 @@ INLINE void lsl_di( void ) } /* $39 ROL direct -*** */ -INLINE void rol_di( void ) +OP_HANDLER( rol_di ) { UINT16 t,r; DIRBYTE(t); @@ -282,7 +292,7 @@ INLINE void rol_di( void ) } /* $3a DEC direct -**- */ -INLINE void dec_di( void ) +OP_HANDLER( dec_di ) { UINT8 t; DIRBYTE(t); @@ -294,7 +304,7 @@ INLINE void dec_di( void ) /* $3b ILLEGAL */ /* $3c INC direct -**- */ -INLINE void inc_di( void ) +OP_HANDLER( inc_di ) { UINT8 t; DIRBYTE(t); @@ -304,7 +314,7 @@ INLINE void inc_di( void ) } /* $3d TST direct -**- */ -INLINE void tst_di( void ) +OP_HANDLER( tst_di ) { UINT8 t; DIRBYTE(t); @@ -314,7 +324,7 @@ INLINE void tst_di( void ) /* $3e ILLEGAL */ /* $3f CLR direct -0100 */ -INLINE void clr_di( void ) +OP_HANDLER( clr_di ) { DIRECT; CLR_NZC; SEZ; @@ -322,7 +332,7 @@ INLINE void clr_di( void ) } /* $40 NEGA inherent ?*** */ -INLINE void nega( void ) +OP_HANDLER( nega ) { UINT16 r; r = -A; @@ -335,7 +345,7 @@ INLINE void nega( void ) /* $42 ILLEGAL */ /* $43 COMA inherent -**1 */ -INLINE void coma( void ) +OP_HANDLER( coma ) { A = ~A; CLR_NZ; @@ -344,7 +354,7 @@ INLINE void coma( void ) } /* $44 LSRA inherent -0** */ -INLINE void lsra( void ) +OP_HANDLER( lsra ) { CLR_NZC; CC |= (A & 0x01); @@ -355,7 +365,7 @@ INLINE void lsra( void ) /* $45 ILLEGAL */ /* $46 RORA inherent -*** */ -INLINE void rora( void ) +OP_HANDLER( rora ) { UINT8 r; r = (CC & 0x01) << 7; @@ -367,7 +377,7 @@ INLINE void rora( void ) } /* $47 ASRA inherent ?*** */ -INLINE void asra( void ) +OP_HANDLER( asra ) { CLR_NZC; CC |= (A & 0x01); @@ -376,7 +386,7 @@ INLINE void asra( void ) } /* $48 LSLA inherent ?*** */ -INLINE void lsla( void ) +OP_HANDLER( lsla ) { UINT16 r; r = A << 1; @@ -386,7 +396,7 @@ INLINE void lsla( void ) } /* $49 ROLA inherent -*** */ -INLINE void rola( void ) +OP_HANDLER( rola ) { UINT16 t,r; t = A; @@ -398,7 +408,7 @@ INLINE void rola( void ) } /* $4a DECA inherent -**- */ -INLINE void deca( void ) +OP_HANDLER( deca ) { --A; CLR_NZ; @@ -408,7 +418,7 @@ INLINE void deca( void ) /* $4b ILLEGAL */ /* $4c INCA inherent -**- */ -INLINE void inca( void ) +OP_HANDLER( inca ) { ++A; CLR_NZ; @@ -416,7 +426,7 @@ INLINE void inca( void ) } /* $4d TSTA inherent -**- */ -INLINE void tsta( void ) +OP_HANDLER( tsta ) { CLR_NZ; SET_NZ8(A); @@ -425,7 +435,7 @@ INLINE void tsta( void ) /* $4e ILLEGAL */ /* $4f CLRA inherent -010 */ -INLINE void clra( void ) +OP_HANDLER( clra ) { A = 0; CLR_NZ; @@ -433,7 +443,7 @@ INLINE void clra( void ) } /* $50 NEGX inherent ?*** */ -INLINE void negx( void ) +OP_HANDLER( negx ) { UINT16 r; r = -X; @@ -447,7 +457,7 @@ INLINE void negx( void ) /* $52 ILLEGAL */ /* $53 COMX inherent -**1 */ -INLINE void comx( void ) +OP_HANDLER( comx ) { X = ~X; CLR_NZ; @@ -456,7 +466,7 @@ INLINE void comx( void ) } /* $54 LSRX inherent -0** */ -INLINE void lsrx( void ) +OP_HANDLER( lsrx ) { CLR_NZC; CC |= (X & 0x01); @@ -467,7 +477,7 @@ INLINE void lsrx( void ) /* $55 ILLEGAL */ /* $56 RORX inherent -*** */ -INLINE void rorx( void ) +OP_HANDLER( rorx ) { UINT8 r; r = (CC & 0x01) << 7; @@ -479,7 +489,7 @@ INLINE void rorx( void ) } /* $57 ASRX inherent ?*** */ -INLINE void asrx( void ) +OP_HANDLER( asrx ) { CLR_NZC; CC |= (X & 0x01); @@ -488,7 +498,7 @@ INLINE void asrx( void ) } /* $58 ASLX inherent ?*** */ -INLINE void aslx( void ) +OP_HANDLER( aslx ) { UINT16 r; r = X << 1; @@ -498,7 +508,7 @@ INLINE void aslx( void ) } /* $59 ROLX inherent -*** */ -INLINE void rolx( void ) +OP_HANDLER( rolx ) { UINT16 t,r; t = X; @@ -510,7 +520,7 @@ INLINE void rolx( void ) } /* $5a DECX inherent -**- */ -INLINE void decx( void ) +OP_HANDLER( decx ) { --X; CLR_NZ; @@ -520,7 +530,7 @@ INLINE void decx( void ) /* $5b ILLEGAL */ /* $5c INCX inherent -**- */ -INLINE void incx( void ) +OP_HANDLER( incx ) { ++X; CLR_NZ; @@ -528,7 +538,7 @@ INLINE void incx( void ) } /* $5d TSTX inherent -**- */ -INLINE void tstx( void ) +OP_HANDLER( tstx ) { CLR_NZ; SET_NZ8(X); @@ -537,7 +547,7 @@ INLINE void tstx( void ) /* $5e ILLEGAL */ /* $5f CLRX inherent -010 */ -INLINE void clrx( void ) +OP_HANDLER( clrx ) { X = 0; CLR_NZC; @@ -545,7 +555,7 @@ INLINE void clrx( void ) } /* $60 NEG indexed, 1 byte offset -*** */ -INLINE void neg_ix1( void ) +OP_HANDLER( neg_ix1 ) { UINT8 t; UINT16 r; @@ -559,7 +569,7 @@ INLINE void neg_ix1( void ) /* $62 ILLEGAL */ /* $63 COM indexed, 1 byte offset -**1 */ -INLINE void com_ix1( void ) +OP_HANDLER( com_ix1 ) { UINT8 t; IDX1BYTE(t); t = ~t; @@ -568,7 +578,7 @@ INLINE void com_ix1( void ) } /* $64 LSR indexed, 1 byte offset -0** */ -INLINE void lsr_ix1( void ) +OP_HANDLER( lsr_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -582,7 +592,7 @@ INLINE void lsr_ix1( void ) /* $65 ILLEGAL */ /* $66 ROR indexed, 1 byte offset -*** */ -INLINE void ror_ix1( void ) +OP_HANDLER( ror_ix1 ) { UINT8 t,r; IDX1BYTE(t); @@ -595,7 +605,7 @@ INLINE void ror_ix1( void ) } /* $67 ASR indexed, 1 byte offset ?*** */ -INLINE void asr_ix1( void ) +OP_HANDLER( asr_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -606,7 +616,7 @@ INLINE void asr_ix1( void ) } /* $68 LSL indexed, 1 byte offset ?*** */ -INLINE void lsl_ix1( void ) +OP_HANDLER( lsl_ix1 ) { UINT8 t; UINT16 r; @@ -618,7 +628,7 @@ INLINE void lsl_ix1( void ) } /* $69 ROL indexed, 1 byte offset -*** */ -INLINE void rol_ix1( void ) +OP_HANDLER( rol_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -630,7 +640,7 @@ INLINE void rol_ix1( void ) } /* $6a DEC indexed, 1 byte offset -**- */ -INLINE void dec_ix1( void ) +OP_HANDLER( dec_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -642,7 +652,7 @@ INLINE void dec_ix1( void ) /* $6b ILLEGAL */ /* $6c INC indexed, 1 byte offset -**- */ -INLINE void inc_ix1( void ) +OP_HANDLER( inc_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -652,7 +662,7 @@ INLINE void inc_ix1( void ) } /* $6d TST indexed, 1 byte offset -**- */ -INLINE void tst_ix1( void ) +OP_HANDLER( tst_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -662,7 +672,7 @@ INLINE void tst_ix1( void ) /* $6e ILLEGAL */ /* $6f CLR indexed, 1 byte offset -0100 */ -INLINE void clr_ix1( void ) +OP_HANDLER( clr_ix1 ) { INDEXED1; CLR_NZC; SEZ; @@ -670,7 +680,7 @@ INLINE void clr_ix1( void ) } /* $70 NEG indexed -*** */ -INLINE void neg_ix( void ) +OP_HANDLER( neg_ix ) { UINT8 t; UINT16 r; @@ -684,7 +694,7 @@ INLINE void neg_ix( void ) /* $72 ILLEGAL */ /* $73 COM indexed -**1 */ -INLINE void com_ix( void ) +OP_HANDLER( com_ix ) { UINT8 t; IDXBYTE(t); t = ~t; @@ -693,7 +703,7 @@ INLINE void com_ix( void ) } /* $74 LSR indexed -0** */ -INLINE void lsr_ix( void ) +OP_HANDLER( lsr_ix ) { UINT8 t; IDXBYTE(t); @@ -707,7 +717,7 @@ INLINE void lsr_ix( void ) /* $75 ILLEGAL */ /* $76 ROR indexed -*** */ -INLINE void ror_ix( void ) +OP_HANDLER( ror_ix ) { UINT8 t,r; IDXBYTE(t); @@ -720,7 +730,7 @@ INLINE void ror_ix( void ) } /* $77 ASR indexed ?*** */ -INLINE void asr_ix( void ) +OP_HANDLER( asr_ix ) { UINT8 t; IDXBYTE(t); @@ -732,7 +742,7 @@ INLINE void asr_ix( void ) } /* $78 LSL indexed ?*** */ -INLINE void lsl_ix( void ) +OP_HANDLER( lsl_ix ) { UINT8 t; UINT16 r; @@ -742,7 +752,7 @@ INLINE void lsl_ix( void ) } /* $79 ROL indexed -*** */ -INLINE void rol_ix( void ) +OP_HANDLER( rol_ix ) { UINT16 t,r; IDXBYTE(t); @@ -754,7 +764,7 @@ INLINE void rol_ix( void ) } /* $7a DEC indexed -**- */ -INLINE void dec_ix( void ) +OP_HANDLER( dec_ix ) { UINT8 t; IDXBYTE(t); @@ -766,7 +776,7 @@ INLINE void dec_ix( void ) /* $7b ILLEGAL */ /* $7c INC indexed -**- */ -INLINE void inc_ix( void ) +OP_HANDLER( inc_ix ) { UINT8 t; IDXBYTE(t); @@ -776,7 +786,7 @@ INLINE void inc_ix( void ) } /* $7d TST indexed -**- */ -INLINE void tst_ix( void ) +OP_HANDLER( tst_ix ) { UINT8 t; IDXBYTE(t); @@ -786,7 +796,7 @@ INLINE void tst_ix( void ) /* $7e ILLEGAL */ /* $7f CLR indexed -0100 */ -INLINE void clr_ix( void ) +OP_HANDLER( clr_ix ) { INDEXED; CLR_NZC; SEZ; @@ -794,7 +804,7 @@ INLINE void clr_ix( void ) } /* $80 RTI inherent #### */ -INLINE void rti( void ) +OP_HANDLER( rti ) { PULLBYTE(CC); PULLBYTE(A); @@ -808,7 +818,7 @@ INLINE void rti( void ) } /* $81 RTS inherent ---- */ -INLINE void rts( void ) +OP_HANDLER( rts ) { PULLWORD(pPC); change_pc(PC); @@ -817,7 +827,7 @@ INLINE void rts( void ) /* $82 ILLEGAL */ /* $83 SWI absolute indirect ---- */ -INLINE void swi( void ) +OP_HANDLER( swi ) { PUSHWORD(m6805.pc); PUSHBYTE(m6805.x); @@ -867,7 +877,7 @@ INLINE void swi( void ) /* $96 ILLEGAL */ /* $97 TAX inherent ---- */ -INLINE void tax (void) +OP_HANDLER( tax ) { X = A; } @@ -881,26 +891,26 @@ INLINE void tax (void) /* $9B SEI */ /* $9C RSP inherent ---- */ -INLINE void rsp (void) +OP_HANDLER( rsp ) { S = SP_MASK; } /* $9D NOP inherent ---- */ -INLINE void nop (void) +OP_HANDLER( nop ) { } /* $9E ILLEGAL */ /* $9F TXA inherent ---- */ -INLINE void txa (void) +OP_HANDLER( txa ) { A = X; } /* $a0 SUBA immediate ?*** */ -INLINE void suba_im( void ) +OP_HANDLER( suba_im ) { UINT16 t,r; IMMBYTE(t); @@ -911,7 +921,7 @@ INLINE void suba_im( void ) } /* $a1 CMPA immediate ?*** */ -INLINE void cmpa_im( void ) +OP_HANDLER( cmpa_im ) { UINT16 t,r; IMMBYTE(t); @@ -921,7 +931,7 @@ INLINE void cmpa_im( void ) } /* $a2 SBCA immediate ?*** */ -INLINE void sbca_im( void ) +OP_HANDLER( sbca_im ) { UINT16 t,r; IMMBYTE(t); @@ -932,7 +942,7 @@ INLINE void sbca_im( void ) } /* $a3 CPX immediate -*** */ -INLINE void cpx_im( void ) +OP_HANDLER( cpx_im ) { UINT16 t,r; IMMBYTE(t); @@ -942,7 +952,7 @@ INLINE void cpx_im( void ) } /* $a4 ANDA immediate -**- */ -INLINE void anda_im( void ) +OP_HANDLER( anda_im ) { UINT8 t; IMMBYTE(t); @@ -952,7 +962,7 @@ INLINE void anda_im( void ) } /* $a5 BITA immediate -**- */ -INLINE void bita_im( void ) +OP_HANDLER( bita_im ) { UINT8 t,r; IMMBYTE(t); @@ -962,7 +972,7 @@ INLINE void bita_im( void ) } /* $a6 LDA immediate -**- */ -INLINE void lda_im( void ) +OP_HANDLER( lda_im ) { IMMBYTE(A); CLR_NZ; @@ -972,7 +982,7 @@ INLINE void lda_im( void ) /* $a7 ILLEGAL */ /* $a8 EORA immediate -**- */ -INLINE void eora_im( void ) +OP_HANDLER( eora_im ) { UINT8 t; IMMBYTE(t); @@ -982,7 +992,7 @@ INLINE void eora_im( void ) } /* $a9 ADCA immediate **** */ -INLINE void adca_im( void ) +OP_HANDLER( adca_im ) { UINT16 t,r; IMMBYTE(t); @@ -994,7 +1004,7 @@ INLINE void adca_im( void ) } /* $aa ORA immediate -**- */ -INLINE void ora_im( void ) +OP_HANDLER( ora_im ) { UINT8 t; IMMBYTE(t); @@ -1004,7 +1014,7 @@ INLINE void ora_im( void ) } /* $ab ADDA immediate **** */ -INLINE void adda_im( void ) +OP_HANDLER( adda_im ) { UINT16 t,r; IMMBYTE(t); @@ -1018,7 +1028,7 @@ INLINE void adda_im( void ) /* $ac ILLEGAL */ /* $ad BSR ---- */ -INLINE void bsr( void ) +OP_HANDLER( bsr ) { UINT8 t; IMMBYTE(t); @@ -1027,7 +1037,7 @@ INLINE void bsr( void ) } /* $ae LDX immediate -**- */ -INLINE void ldx_im( void ) +OP_HANDLER( ldx_im ) { IMMBYTE(X); CLR_NZ; @@ -1037,7 +1047,7 @@ INLINE void ldx_im( void ) /* $af ILLEGAL */ /* $b0 SUBA direct ?*** */ -INLINE void suba_di( void ) +OP_HANDLER( suba_di ) { UINT16 t,r; DIRBYTE(t); @@ -1048,7 +1058,7 @@ INLINE void suba_di( void ) } /* $b1 CMPA direct ?*** */ -INLINE void cmpa_di( void ) +OP_HANDLER( cmpa_di ) { UINT16 t,r; DIRBYTE(t); @@ -1058,7 +1068,7 @@ INLINE void cmpa_di( void ) } /* $b2 SBCA direct ?*** */ -INLINE void sbca_di( void ) +OP_HANDLER( sbca_di ) { UINT16 t,r; DIRBYTE(t); @@ -1069,7 +1079,7 @@ INLINE void sbca_di( void ) } /* $b3 CPX direct -*** */ -INLINE void cpx_di( void ) +OP_HANDLER( cpx_di ) { UINT16 t,r; DIRBYTE(t); @@ -1079,7 +1089,7 @@ INLINE void cpx_di( void ) } /* $b4 ANDA direct -**- */ -INLINE void anda_di( void ) +OP_HANDLER( anda_di ) { UINT8 t; DIRBYTE(t); @@ -1089,7 +1099,7 @@ INLINE void anda_di( void ) } /* $b5 BITA direct -**- */ -INLINE void bita_di( void ) +OP_HANDLER( bita_di ) { UINT8 t,r; DIRBYTE(t); @@ -1099,7 +1109,7 @@ INLINE void bita_di( void ) } /* $b6 LDA direct -**- */ -INLINE void lda_di( void ) +OP_HANDLER( lda_di ) { DIRBYTE(A); CLR_NZ; @@ -1107,7 +1117,7 @@ INLINE void lda_di( void ) } /* $b7 STA direct -**- */ -INLINE void sta_di( void ) +OP_HANDLER( sta_di ) { CLR_NZ; SET_NZ8(A); @@ -1116,7 +1126,7 @@ INLINE void sta_di( void ) } /* $b8 EORA direct -**- */ -INLINE void eora_di( void ) +OP_HANDLER( eora_di ) { UINT8 t; DIRBYTE(t); @@ -1126,7 +1136,7 @@ INLINE void eora_di( void ) } /* $b9 ADCA direct **** */ -INLINE void adca_di( void ) +OP_HANDLER( adca_di ) { UINT16 t,r; DIRBYTE(t); @@ -1138,7 +1148,7 @@ INLINE void adca_di( void ) } /* $ba ORA direct -**- */ -INLINE void ora_di( void ) +OP_HANDLER( ora_di ) { UINT8 t; DIRBYTE(t); @@ -1148,7 +1158,7 @@ INLINE void ora_di( void ) } /* $bb ADDA direct **** */ -INLINE void adda_di( void ) +OP_HANDLER( adda_di ) { UINT16 t,r; DIRBYTE(t); @@ -1160,7 +1170,7 @@ INLINE void adda_di( void ) } /* $bc JMP direct -*** */ -INLINE void jmp_di( void ) +OP_HANDLER( jmp_di ) { DIRECT; PC = EA; @@ -1168,7 +1178,7 @@ INLINE void jmp_di( void ) } /* $bd JSR direct ---- */ -INLINE void jsr_di( void ) +OP_HANDLER( jsr_di ) { DIRECT; PUSHWORD(m6805.pc); @@ -1177,7 +1187,7 @@ INLINE void jsr_di( void ) } /* $be LDX direct -**- */ -INLINE void ldx_di( void ) +OP_HANDLER( ldx_di ) { DIRBYTE(X); CLR_NZ; @@ -1185,7 +1195,7 @@ INLINE void ldx_di( void ) } /* $bf STX direct -**- */ -INLINE void stx_di( void ) +OP_HANDLER( stx_di ) { CLR_NZ; SET_NZ8(X); @@ -1194,7 +1204,7 @@ INLINE void stx_di( void ) } /* $c0 SUBA extended ?*** */ -INLINE void suba_ex( void ) +OP_HANDLER( suba_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1205,7 +1215,7 @@ INLINE void suba_ex( void ) } /* $c1 CMPA extended ?*** */ -INLINE void cmpa_ex( void ) +OP_HANDLER( cmpa_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1215,7 +1225,7 @@ INLINE void cmpa_ex( void ) } /* $c2 SBCA extended ?*** */ -INLINE void sbca_ex( void ) +OP_HANDLER( sbca_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1226,7 +1236,7 @@ INLINE void sbca_ex( void ) } /* $c3 CPX extended -*** */ -INLINE void cpx_ex( void ) +OP_HANDLER( cpx_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1236,7 +1246,7 @@ INLINE void cpx_ex( void ) } /* $c4 ANDA extended -**- */ -INLINE void anda_ex( void ) +OP_HANDLER( anda_ex ) { UINT8 t; EXTBYTE(t); @@ -1246,7 +1256,7 @@ INLINE void anda_ex( void ) } /* $c5 BITA extended -**- */ -INLINE void bita_ex( void ) +OP_HANDLER( bita_ex ) { UINT8 t,r; EXTBYTE(t); @@ -1256,7 +1266,7 @@ INLINE void bita_ex( void ) } /* $c6 LDA extended -**- */ -INLINE void lda_ex( void ) +OP_HANDLER( lda_ex ) { EXTBYTE(A); CLR_NZ; @@ -1264,7 +1274,7 @@ INLINE void lda_ex( void ) } /* $c7 STA extended -**- */ -INLINE void sta_ex( void ) +OP_HANDLER( sta_ex ) { CLR_NZ; SET_NZ8(A); @@ -1273,7 +1283,7 @@ INLINE void sta_ex( void ) } /* $c8 EORA extended -**- */ -INLINE void eora_ex( void ) +OP_HANDLER( eora_ex ) { UINT8 t; EXTBYTE(t); @@ -1283,7 +1293,7 @@ INLINE void eora_ex( void ) } /* $c9 ADCA extended **** */ -INLINE void adca_ex( void ) +OP_HANDLER( adca_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1295,7 +1305,7 @@ INLINE void adca_ex( void ) } /* $ca ORA extended -**- */ -INLINE void ora_ex( void ) +OP_HANDLER( ora_ex ) { UINT8 t; EXTBYTE(t); @@ -1305,7 +1315,7 @@ INLINE void ora_ex( void ) } /* $cb ADDA extended **** */ -INLINE void adda_ex( void ) +OP_HANDLER( adda_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1317,7 +1327,7 @@ INLINE void adda_ex( void ) } /* $cc JMP extended -*** */ -INLINE void jmp_ex( void ) +OP_HANDLER( jmp_ex ) { EXTENDED; PC = EA; @@ -1325,7 +1335,7 @@ INLINE void jmp_ex( void ) } /* $cd JSR extended ---- */ -INLINE void jsr_ex( void ) +OP_HANDLER( jsr_ex ) { EXTENDED; PUSHWORD(m6805.pc); @@ -1334,7 +1344,7 @@ INLINE void jsr_ex( void ) } /* $ce LDX extended -**- */ -INLINE void ldx_ex( void ) +OP_HANDLER( ldx_ex ) { EXTBYTE(X); CLR_NZ; @@ -1342,7 +1352,7 @@ INLINE void ldx_ex( void ) } /* $cf STX extended -**- */ -INLINE void stx_ex( void ) +OP_HANDLER( stx_ex ) { CLR_NZ; SET_NZ8(X); @@ -1351,7 +1361,7 @@ INLINE void stx_ex( void ) } /* $d0 SUBA indexed, 2 byte offset ?*** */ -INLINE void suba_ix2( void ) +OP_HANDLER( suba_ix2 ) { UINT16 t,r; IDX2BYTE(t); @@ -1362,7 +1372,7 @@ INLINE void suba_ix2( void ) } /* $d1 CMPA indexed, 2 byte offset ?*** */ -INLINE void cmpa_ix2( void ) +OP_HANDLER( cmpa_ix2 ) { UINT16 t,r; IDX2BYTE(t); @@ -1372,7 +1382,7 @@ INLINE void cmpa_ix2( void ) } /* $d2 SBCA indexed, 2 byte offset ?*** */ -INLINE void sbca_ix2( void ) +OP_HANDLER( sbca_ix2 ) { UINT16 t,r; IDX2BYTE(t); @@ -1383,7 +1393,7 @@ INLINE void sbca_ix2( void ) } /* $d3 CPX indexed, 2 byte offset -*** */ -INLINE void cpx_ix2( void ) +OP_HANDLER( cpx_ix2 ) { UINT16 t,r; IDX2BYTE(t); @@ -1393,7 +1403,7 @@ INLINE void cpx_ix2( void ) } /* $d4 ANDA indexed, 2 byte offset -**- */ -INLINE void anda_ix2( void ) +OP_HANDLER( anda_ix2 ) { UINT8 t; IDX2BYTE(t); @@ -1403,7 +1413,7 @@ INLINE void anda_ix2( void ) } /* $d5 BITA indexed, 2 byte offset -**- */ -INLINE void bita_ix2( void ) +OP_HANDLER( bita_ix2 ) { UINT8 t,r; IDX2BYTE(t); @@ -1413,7 +1423,7 @@ INLINE void bita_ix2( void ) } /* $d6 LDA indexed, 2 byte offset -**- */ -INLINE void lda_ix2( void ) +OP_HANDLER( lda_ix2 ) { IDX2BYTE(A); CLR_NZ; @@ -1421,7 +1431,7 @@ INLINE void lda_ix2( void ) } /* $d7 STA indexed, 2 byte offset -**- */ -INLINE void sta_ix2( void ) +OP_HANDLER( sta_ix2 ) { CLR_NZ; SET_NZ8(A); @@ -1430,7 +1440,7 @@ INLINE void sta_ix2( void ) } /* $d8 EORA indexed, 2 byte offset -**- */ -INLINE void eora_ix2( void ) +OP_HANDLER( eora_ix2 ) { UINT8 t; IDX2BYTE(t); @@ -1440,7 +1450,7 @@ INLINE void eora_ix2( void ) } /* $d9 ADCA indexed, 2 byte offset **** */ -INLINE void adca_ix2( void ) +OP_HANDLER( adca_ix2 ) { UINT16 t,r; IDX2BYTE(t); @@ -1452,7 +1462,7 @@ INLINE void adca_ix2( void ) } /* $da ORA indexed, 2 byte offset -**- */ -INLINE void ora_ix2( void ) +OP_HANDLER( ora_ix2 ) { UINT8 t; IDX2BYTE(t); @@ -1462,7 +1472,7 @@ INLINE void ora_ix2( void ) } /* $db ADDA indexed, 2 byte offset **** */ -INLINE void adda_ix2( void ) +OP_HANDLER( adda_ix2 ) { UINT16 t,r; IDX2BYTE(t); @@ -1474,7 +1484,7 @@ INLINE void adda_ix2( void ) } /* $dc JMP indexed, 2 byte offset -*** */ -INLINE void jmp_ix2( void ) +OP_HANDLER( jmp_ix2 ) { INDEXED2; PC = EA; @@ -1482,7 +1492,7 @@ INLINE void jmp_ix2( void ) } /* $dd JSR indexed, 2 byte offset ---- */ -INLINE void jsr_ix2( void ) +OP_HANDLER( jsr_ix2 ) { INDEXED2; PUSHWORD(m6805.pc); @@ -1491,7 +1501,7 @@ INLINE void jsr_ix2( void ) } /* $de LDX indexed, 2 byte offset -**- */ -INLINE void ldx_ix2( void ) +OP_HANDLER( ldx_ix2 ) { IDX2BYTE(X); CLR_NZ; @@ -1499,7 +1509,7 @@ INLINE void ldx_ix2( void ) } /* $df STX indexed, 2 byte offset -**- */ -INLINE void stx_ix2( void ) +OP_HANDLER( stx_ix2 ) { CLR_NZ; SET_NZ8(X); @@ -1508,7 +1518,7 @@ INLINE void stx_ix2( void ) } /* $e0 SUBA indexed, 1 byte offset ?*** */ -INLINE void suba_ix1( void ) +OP_HANDLER( suba_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -1519,7 +1529,7 @@ INLINE void suba_ix1( void ) } /* $e1 CMPA indexed, 1 byte offset ?*** */ -INLINE void cmpa_ix1( void ) +OP_HANDLER( cmpa_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -1529,7 +1539,7 @@ INLINE void cmpa_ix1( void ) } /* $e2 SBCA indexed, 1 byte offset ?*** */ -INLINE void sbca_ix1( void ) +OP_HANDLER( sbca_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -1540,7 +1550,7 @@ INLINE void sbca_ix1( void ) } /* $e3 CPX indexed, 1 byte offset -*** */ -INLINE void cpx_ix1( void ) +OP_HANDLER( cpx_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -1550,7 +1560,7 @@ INLINE void cpx_ix1( void ) } /* $e4 ANDA indexed, 1 byte offset -**- */ -INLINE void anda_ix1( void ) +OP_HANDLER( anda_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -1560,7 +1570,7 @@ INLINE void anda_ix1( void ) } /* $e5 BITA indexed, 1 byte offset -**- */ -INLINE void bita_ix1( void ) +OP_HANDLER( bita_ix1 ) { UINT8 t,r; IDX1BYTE(t); @@ -1570,7 +1580,7 @@ INLINE void bita_ix1( void ) } /* $e6 LDA indexed, 1 byte offset -**- */ -INLINE void lda_ix1( void ) +OP_HANDLER( lda_ix1 ) { IDX1BYTE(A); CLR_NZ; @@ -1578,7 +1588,7 @@ INLINE void lda_ix1( void ) } /* $e7 STA indexed, 1 byte offset -**- */ -INLINE void sta_ix1( void ) +OP_HANDLER( sta_ix1 ) { CLR_NZ; SET_NZ8(A); @@ -1587,7 +1597,7 @@ INLINE void sta_ix1( void ) } /* $e8 EORA indexed, 1 byte offset -**- */ -INLINE void eora_ix1( void ) +OP_HANDLER( eora_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -1597,7 +1607,7 @@ INLINE void eora_ix1( void ) } /* $e9 ADCA indexed, 1 byte offset **** */ -INLINE void adca_ix1( void ) +OP_HANDLER( adca_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -1609,7 +1619,7 @@ INLINE void adca_ix1( void ) } /* $ea ORA indexed, 1 byte offset -**- */ -INLINE void ora_ix1( void ) +OP_HANDLER( ora_ix1 ) { UINT8 t; IDX1BYTE(t); @@ -1619,7 +1629,7 @@ INLINE void ora_ix1( void ) } /* $eb ADDA indexed, 1 byte offset **** */ -INLINE void adda_ix1( void ) +OP_HANDLER( adda_ix1 ) { UINT16 t,r; IDX1BYTE(t); @@ -1631,7 +1641,7 @@ INLINE void adda_ix1( void ) } /* $ec JMP indexed, 1 byte offset -*** */ -INLINE void jmp_ix1( void ) +OP_HANDLER( jmp_ix1 ) { INDEXED1; PC = EA; @@ -1639,7 +1649,7 @@ INLINE void jmp_ix1( void ) } /* $ed JSR indexed, 1 byte offset ---- */ -INLINE void jsr_ix1( void ) +OP_HANDLER( jsr_ix1 ) { INDEXED1; PUSHWORD(m6805.pc); @@ -1648,7 +1658,7 @@ INLINE void jsr_ix1( void ) } /* $ee LDX indexed, 1 byte offset -**- */ -INLINE void ldx_ix1( void ) +OP_HANDLER( ldx_ix1 ) { IDX1BYTE(X); CLR_NZ; @@ -1656,7 +1666,7 @@ INLINE void ldx_ix1( void ) } /* $ef STX indexed, 1 byte offset -**- */ -INLINE void stx_ix1( void ) +OP_HANDLER( stx_ix1 ) { CLR_NZ; SET_NZ8(X); @@ -1665,7 +1675,7 @@ INLINE void stx_ix1( void ) } /* $f0 SUBA indexed ?*** */ -INLINE void suba_ix( void ) +OP_HANDLER( suba_ix ) { UINT16 t,r; IDXBYTE(t); @@ -1676,7 +1686,7 @@ INLINE void suba_ix( void ) } /* $f1 CMPA indexed ?*** */ -INLINE void cmpa_ix( void ) +OP_HANDLER( cmpa_ix ) { UINT16 t,r; IDXBYTE(t); @@ -1686,7 +1696,7 @@ INLINE void cmpa_ix( void ) } /* $f2 SBCA indexed ?*** */ -INLINE void sbca_ix( void ) +OP_HANDLER( sbca_ix ) { UINT16 t,r; IDXBYTE(t); @@ -1697,7 +1707,7 @@ INLINE void sbca_ix( void ) } /* $f3 CPX indexed -*** */ -INLINE void cpx_ix( void ) +OP_HANDLER( cpx_ix ) { UINT16 t,r; IDXBYTE(t); @@ -1707,7 +1717,7 @@ INLINE void cpx_ix( void ) } /* $f4 ANDA indexed -**- */ -INLINE void anda_ix( void ) +OP_HANDLER( anda_ix ) { UINT8 t; IDXBYTE(t); @@ -1717,7 +1727,7 @@ INLINE void anda_ix( void ) } /* $f5 BITA indexed -**- */ -INLINE void bita_ix( void ) +OP_HANDLER( bita_ix ) { UINT8 t,r; IDXBYTE(t); @@ -1727,7 +1737,7 @@ INLINE void bita_ix( void ) } /* $f6 LDA indexed -**- */ -INLINE void lda_ix( void ) +OP_HANDLER( lda_ix ) { IDXBYTE(A); CLR_NZ; @@ -1735,7 +1745,7 @@ INLINE void lda_ix( void ) } /* $f7 STA indexed -**- */ -INLINE void sta_ix( void ) +OP_HANDLER( sta_ix ) { CLR_NZ; SET_NZ8(A); @@ -1744,7 +1754,7 @@ INLINE void sta_ix( void ) } /* $f8 EORA indexed -**- */ -INLINE void eora_ix( void ) +OP_HANDLER( eora_ix ) { UINT8 t; IDXBYTE(t); @@ -1754,7 +1764,7 @@ INLINE void eora_ix( void ) } /* $f9 ADCA indexed **** */ -INLINE void adca_ix( void ) +OP_HANDLER( adca_ix ) { UINT16 t,r; IDXBYTE(t); @@ -1766,7 +1776,7 @@ INLINE void adca_ix( void ) } /* $fa ORA indexed -**- */ -INLINE void ora_ix( void ) +OP_HANDLER( ora_ix ) { UINT8 t; IDXBYTE(t); @@ -1776,7 +1786,7 @@ INLINE void ora_ix( void ) } /* $fb ADDA indexed **** */ -INLINE void adda_ix( void ) +OP_HANDLER( adda_ix ) { UINT16 t,r; IDXBYTE(t); @@ -1788,7 +1798,7 @@ INLINE void adda_ix( void ) } /* $fc JMP indexed -*** */ -INLINE void jmp_ix( void ) +OP_HANDLER( jmp_ix ) { INDEXED; PC = EA; @@ -1796,7 +1806,7 @@ INLINE void jmp_ix( void ) } /* $fd JSR indexed ---- */ -INLINE void jsr_ix( void ) +OP_HANDLER( jsr_ix ) { INDEXED; PUSHWORD(m6805.pc); @@ -1805,7 +1815,7 @@ INLINE void jsr_ix( void ) } /* $fe LDX indexed -**- */ -INLINE void ldx_ix( void ) +OP_HANDLER( ldx_ix ) { IDXBYTE(X); CLR_NZ; @@ -1813,7 +1823,7 @@ INLINE void ldx_ix( void ) } /* $ff STX indexed -**- */ -INLINE void stx_ix( void ) +OP_HANDLER( stx_ix ) { CLR_NZ; SET_NZ8(X); diff --git a/src/emu/cpu/m6809/6809ops.c b/src/emu/cpu/m6809/6809ops.c index 39d5e5fea8f..79612bb639c 100644 --- a/src/emu/cpu/m6809/6809ops.c +++ b/src/emu/cpu/m6809/6809ops.c @@ -12,17 +12,19 @@ HNZVC */ +#define OP_HANDLER(_name) INLINE void _name (m68_state_t *m68_state) + #ifdef NEW -static void illegal( void ) +static void illegal ) #else -INLINE void illegal( void ) +OP_HANDLER( illegal ) #endif { logerror("M6809: illegal opcode at %04x\n",PC); } /* $00 NEG direct ?**** */ -INLINE void neg_di( void ) +OP_HANDLER( neg_di ) { UINT16 r,t; DIRBYTE(t); @@ -37,7 +39,7 @@ INLINE void neg_di( void ) /* $02 ILLEGAL */ /* $03 COM direct -**01 */ -INLINE void com_di( void ) +OP_HANDLER( com_di ) { UINT8 t; DIRBYTE(t); @@ -49,7 +51,7 @@ INLINE void com_di( void ) } /* $04 LSR direct -0*-* */ -INLINE void lsr_di( void ) +OP_HANDLER( lsr_di ) { UINT8 t; DIRBYTE(t); @@ -63,7 +65,7 @@ INLINE void lsr_di( void ) /* $05 ILLEGAL */ /* $06 ROR direct -**-* */ -INLINE void ror_di( void ) +OP_HANDLER( ror_di ) { UINT8 t,r; DIRBYTE(t); @@ -76,7 +78,7 @@ INLINE void ror_di( void ) } /* $07 ASR direct ?**-* */ -INLINE void asr_di( void ) +OP_HANDLER( asr_di ) { UINT8 t; DIRBYTE(t); @@ -88,7 +90,7 @@ INLINE void asr_di( void ) } /* $08 ASL direct ?**** */ -INLINE void asl_di( void ) +OP_HANDLER( asl_di ) { UINT16 t,r; DIRBYTE(t); @@ -99,7 +101,7 @@ INLINE void asl_di( void ) } /* $09 ROL direct -**** */ -INLINE void rol_di( void ) +OP_HANDLER( rol_di ) { UINT16 t,r; DIRBYTE(t); @@ -110,7 +112,7 @@ INLINE void rol_di( void ) } /* $0A DEC direct -***- */ -INLINE void dec_di( void ) +OP_HANDLER( dec_di ) { UINT8 t; DIRBYTE(t); @@ -123,7 +125,7 @@ INLINE void dec_di( void ) /* $0B ILLEGAL */ /* $OC INC direct -***- */ -INLINE void inc_di( void ) +OP_HANDLER( inc_di ) { UINT8 t; DIRBYTE(t); @@ -134,7 +136,7 @@ INLINE void inc_di( void ) } /* $OD TST direct -**0- */ -INLINE void tst_di( void ) +OP_HANDLER( tst_di ) { UINT8 t; DIRBYTE(t); @@ -143,7 +145,7 @@ INLINE void tst_di( void ) } /* $0E JMP direct ----- */ -INLINE void jmp_di( void ) +OP_HANDLER( jmp_di ) { DIRECT; PCD = EAD; @@ -151,7 +153,7 @@ INLINE void jmp_di( void ) } /* $0F CLR direct -0100 */ -INLINE void clr_di( void ) +OP_HANDLER( clr_di ) { DIRECT; (void)RM(EAD); @@ -165,23 +167,23 @@ INLINE void clr_di( void ) /* $11 FLAG */ /* $12 NOP inherent ----- */ -INLINE void nop( void ) +OP_HANDLER( nop ) { ; } /* $13 SYNC inherent ----- */ -INLINE void sync( void ) +OP_HANDLER( sync ) { /* SYNC stops processing instructions until an interrupt request happens. */ /* This doesn't require the corresponding interrupt to be enabled: if it */ /* is disabled, execution continues with the next instruction. */ - m6809.int_state |= M6809_SYNC; /* HJB 990227 */ - CHECK_IRQ_LINES(); - /* if M6809_SYNC has not been cleared by CHECK_IRQ_LINES(), + m68_state->int_state |= M6809_SYNC; /* HJB 990227 */ + CHECK_IRQ_LINES(m68_state); + /* if M6809_SYNC has not been cleared by CHECK_IRQ_LINES(m68_state), * stop execution until the interrupt lines change. */ - if( m6809.int_state & M6809_SYNC ) - if (m6809_ICount > 0) m6809_ICount = 0; + if( m68_state->int_state & M6809_SYNC ) + if (m68_icount > 0) m68_icount = 0; } /* $14 ILLEGAL */ @@ -189,19 +191,19 @@ INLINE void sync( void ) /* $15 ILLEGAL */ /* $16 LBRA relative ----- */ -INLINE void lbra( void ) +OP_HANDLER( lbra ) { IMMWORD(ea); PC += EA; CHANGE_PC; if ( EA == 0xfffd ) /* EHC 980508 speed up busy loop */ - if ( m6809_ICount > 0) - m6809_ICount = 0; + if ( m68_icount > 0) + m68_icount = 0; } /* $17 LBSR relative ----- */ -INLINE void lbsr( void ) +OP_HANDLER( lbsr ) { IMMWORD(ea); PUSHWORD(pPC); @@ -212,7 +214,7 @@ INLINE void lbsr( void ) /* $18 ILLEGAL */ /* $19 DAA inherent (A) -**0* */ -INLINE void daa( void ) +OP_HANDLER( daa ) { UINT8 msn, lsn; UINT16 t, cf = 0; @@ -227,27 +229,27 @@ INLINE void daa( void ) } /* $1A ORCC immediate ##### */ -INLINE void orcc( void ) +OP_HANDLER( orcc ) { UINT8 t; IMMBYTE(t); CC |= t; - CHECK_IRQ_LINES(); /* HJB 990116 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ } /* $1B ILLEGAL */ /* $1C ANDCC immediate ##### */ -INLINE void andcc( void ) +OP_HANDLER( andcc ) { UINT8 t; IMMBYTE(t); CC &= t; - CHECK_IRQ_LINES(); /* HJB 990116 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ } /* $1D SEX inherent -**-- */ -INLINE void sex( void ) +OP_HANDLER( sex ) { UINT16 t; t = SIGNED(B); @@ -258,7 +260,7 @@ INLINE void sex( void ) } /* $1E EXG inherent ----- */ -INLINE void exg( void ) +OP_HANDLER( exg ) { UINT16 t1,t2; UINT8 tb; @@ -325,7 +327,7 @@ INLINE void exg( void ) } /* $1F TFR inherent ----- */ -INLINE void tfr( void ) +OP_HANDLER( tfr ) { UINT8 tb; UINT16 t; @@ -367,7 +369,7 @@ INLINE void tfr( void ) } /* $20 BRA relative ----- */ -INLINE void bra( void ) +OP_HANDLER( bra ) { UINT8 t; IMMBYTE(t); @@ -375,313 +377,313 @@ INLINE void bra( void ) CHANGE_PC; /* JB 970823 - speed up busy loops */ if( t == 0xfe ) - if( m6809_ICount > 0 ) m6809_ICount = 0; + if( m68_icount > 0 ) m68_icount = 0; } /* $21 BRN relative ----- */ -INLINE void brn( void ) +OP_HANDLER( brn ) { UINT8 t; IMMBYTE(t); } /* $1021 LBRN relative ----- */ -INLINE void lbrn( void ) +OP_HANDLER( lbrn ) { IMMWORD(ea); } /* $22 BHI relative ----- */ -INLINE void bhi( void ) +OP_HANDLER( bhi ) { BRANCH( !(CC & (CC_Z|CC_C)) ); } /* $1022 LBHI relative ----- */ -INLINE void lbhi( void ) +OP_HANDLER( lbhi ) { LBRANCH( !(CC & (CC_Z|CC_C)) ); } /* $23 BLS relative ----- */ -INLINE void bls( void ) +OP_HANDLER( bls ) { BRANCH( (CC & (CC_Z|CC_C)) ); } /* $1023 LBLS relative ----- */ -INLINE void lbls( void ) +OP_HANDLER( lbls ) { LBRANCH( (CC&(CC_Z|CC_C)) ); } /* $24 BCC relative ----- */ -INLINE void bcc( void ) +OP_HANDLER( bcc ) { BRANCH( !(CC&CC_C) ); } /* $1024 LBCC relative ----- */ -INLINE void lbcc( void ) +OP_HANDLER( lbcc ) { LBRANCH( !(CC&CC_C) ); } /* $25 BCS relative ----- */ -INLINE void bcs( void ) +OP_HANDLER( bcs ) { BRANCH( (CC&CC_C) ); } /* $1025 LBCS relative ----- */ -INLINE void lbcs( void ) +OP_HANDLER( lbcs ) { LBRANCH( (CC&CC_C) ); } /* $26 BNE relative ----- */ -INLINE void bne( void ) +OP_HANDLER( bne ) { BRANCH( !(CC&CC_Z) ); } /* $1026 LBNE relative ----- */ -INLINE void lbne( void ) +OP_HANDLER( lbne ) { LBRANCH( !(CC&CC_Z) ); } /* $27 BEQ relative ----- */ -INLINE void beq( void ) +OP_HANDLER( beq ) { BRANCH( (CC&CC_Z) ); } /* $1027 LBEQ relative ----- */ -INLINE void lbeq( void ) +OP_HANDLER( lbeq ) { LBRANCH( (CC&CC_Z) ); } /* $28 BVC relative ----- */ -INLINE void bvc( void ) +OP_HANDLER( bvc ) { BRANCH( !(CC&CC_V) ); } /* $1028 LBVC relative ----- */ -INLINE void lbvc( void ) +OP_HANDLER( lbvc ) { LBRANCH( !(CC&CC_V) ); } /* $29 BVS relative ----- */ -INLINE void bvs( void ) +OP_HANDLER( bvs ) { BRANCH( (CC&CC_V) ); } /* $1029 LBVS relative ----- */ -INLINE void lbvs( void ) +OP_HANDLER( lbvs ) { LBRANCH( (CC&CC_V) ); } /* $2A BPL relative ----- */ -INLINE void bpl( void ) +OP_HANDLER( bpl ) { BRANCH( !(CC&CC_N) ); } /* $102A LBPL relative ----- */ -INLINE void lbpl( void ) +OP_HANDLER( lbpl ) { LBRANCH( !(CC&CC_N) ); } /* $2B BMI relative ----- */ -INLINE void bmi( void ) +OP_HANDLER( bmi ) { BRANCH( (CC&CC_N) ); } /* $102B LBMI relative ----- */ -INLINE void lbmi( void ) +OP_HANDLER( lbmi ) { LBRANCH( (CC&CC_N) ); } /* $2C BGE relative ----- */ -INLINE void bge( void ) +OP_HANDLER( bge ) { BRANCH( !NXORV ); } /* $102C LBGE relative ----- */ -INLINE void lbge( void ) +OP_HANDLER( lbge ) { LBRANCH( !NXORV ); } /* $2D BLT relative ----- */ -INLINE void blt( void ) +OP_HANDLER( blt ) { BRANCH( NXORV ); } /* $102D LBLT relative ----- */ -INLINE void lblt( void ) +OP_HANDLER( lblt ) { LBRANCH( NXORV ); } /* $2E BGT relative ----- */ -INLINE void bgt( void ) +OP_HANDLER( bgt ) { BRANCH( !(NXORV || (CC&CC_Z)) ); } /* $102E LBGT relative ----- */ -INLINE void lbgt( void ) +OP_HANDLER( lbgt ) { LBRANCH( !(NXORV || (CC&CC_Z)) ); } /* $2F BLE relative ----- */ -INLINE void ble( void ) +OP_HANDLER( ble ) { BRANCH( (NXORV || (CC&CC_Z)) ); } /* $102F LBLE relative ----- */ -INLINE void lble( void ) +OP_HANDLER( lble ) { LBRANCH( (NXORV || (CC&CC_Z)) ); } /* $30 LEAX indexed --*-- */ -INLINE void leax( void ) +OP_HANDLER( leax ) { - fetch_effective_address(); + fetch_effective_address(m68_state); X = EA; CLR_Z; SET_Z(X); } /* $31 LEAY indexed --*-- */ -INLINE void leay( void ) +OP_HANDLER( leay ) { - fetch_effective_address(); + fetch_effective_address(m68_state); Y = EA; CLR_Z; SET_Z(Y); } /* $32 LEAS indexed ----- */ -INLINE void leas( void ) +OP_HANDLER( leas ) { - fetch_effective_address(); + fetch_effective_address(m68_state); S = EA; - m6809.int_state |= M6809_LDS; + m68_state->int_state |= M6809_LDS; } /* $33 LEAU indexed ----- */ -INLINE void leau( void ) +OP_HANDLER( leau ) { - fetch_effective_address(); + fetch_effective_address(m68_state); U = EA; } /* $34 PSHS inherent ----- */ -INLINE void pshs( void ) +OP_HANDLER( pshs ) { UINT8 t; IMMBYTE(t); - if( t&0x80 ) { PUSHWORD(pPC); m6809_ICount -= 2; } - if( t&0x40 ) { PUSHWORD(pU); m6809_ICount -= 2; } - if( t&0x20 ) { PUSHWORD(pY); m6809_ICount -= 2; } - if( t&0x10 ) { PUSHWORD(pX); m6809_ICount -= 2; } - if( t&0x08 ) { PUSHBYTE(DP); m6809_ICount -= 1; } - if( t&0x04 ) { PUSHBYTE(B); m6809_ICount -= 1; } - if( t&0x02 ) { PUSHBYTE(A); m6809_ICount -= 1; } - if( t&0x01 ) { PUSHBYTE(CC); m6809_ICount -= 1; } + if( t&0x80 ) { PUSHWORD(pPC); m68_icount -= 2; } + if( t&0x40 ) { PUSHWORD(pU); m68_icount -= 2; } + if( t&0x20 ) { PUSHWORD(pY); m68_icount -= 2; } + if( t&0x10 ) { PUSHWORD(pX); m68_icount -= 2; } + if( t&0x08 ) { PUSHBYTE(DP); m68_icount -= 1; } + if( t&0x04 ) { PUSHBYTE(B); m68_icount -= 1; } + if( t&0x02 ) { PUSHBYTE(A); m68_icount -= 1; } + if( t&0x01 ) { PUSHBYTE(CC); m68_icount -= 1; } } /* 35 PULS inherent ----- */ -INLINE void puls( void ) +OP_HANDLER( puls ) { UINT8 t; IMMBYTE(t); - if( t&0x01 ) { PULLBYTE(CC); m6809_ICount -= 1; } - if( t&0x02 ) { PULLBYTE(A); m6809_ICount -= 1; } - if( t&0x04 ) { PULLBYTE(B); m6809_ICount -= 1; } - if( t&0x08 ) { PULLBYTE(DP); m6809_ICount -= 1; } - if( t&0x10 ) { PULLWORD(XD); m6809_ICount -= 2; } - if( t&0x20 ) { PULLWORD(YD); m6809_ICount -= 2; } - if( t&0x40 ) { PULLWORD(UD); m6809_ICount -= 2; } - if( t&0x80 ) { PULLWORD(PCD); CHANGE_PC; m6809_ICount -= 2; } + if( t&0x01 ) { PULLBYTE(CC); m68_icount -= 1; } + if( t&0x02 ) { PULLBYTE(A); m68_icount -= 1; } + if( t&0x04 ) { PULLBYTE(B); m68_icount -= 1; } + if( t&0x08 ) { PULLBYTE(DP); m68_icount -= 1; } + if( t&0x10 ) { PULLWORD(XD); m68_icount -= 2; } + if( t&0x20 ) { PULLWORD(YD); m68_icount -= 2; } + if( t&0x40 ) { PULLWORD(UD); m68_icount -= 2; } + if( t&0x80 ) { PULLWORD(PCD); CHANGE_PC; m68_icount -= 2; } /* HJB 990225: moved check after all PULLs */ - if( t&0x01 ) { CHECK_IRQ_LINES(); } + if( t&0x01 ) { CHECK_IRQ_LINES(m68_state); } } /* $36 PSHU inherent ----- */ -INLINE void pshu( void ) +OP_HANDLER( pshu ) { UINT8 t; IMMBYTE(t); - if( t&0x80 ) { PSHUWORD(pPC); m6809_ICount -= 2; } - if( t&0x40 ) { PSHUWORD(pS); m6809_ICount -= 2; } - if( t&0x20 ) { PSHUWORD(pY); m6809_ICount -= 2; } - if( t&0x10 ) { PSHUWORD(pX); m6809_ICount -= 2; } - if( t&0x08 ) { PSHUBYTE(DP); m6809_ICount -= 1; } - if( t&0x04 ) { PSHUBYTE(B); m6809_ICount -= 1; } - if( t&0x02 ) { PSHUBYTE(A); m6809_ICount -= 1; } - if( t&0x01 ) { PSHUBYTE(CC); m6809_ICount -= 1; } + if( t&0x80 ) { PSHUWORD(pPC); m68_icount -= 2; } + if( t&0x40 ) { PSHUWORD(pS); m68_icount -= 2; } + if( t&0x20 ) { PSHUWORD(pY); m68_icount -= 2; } + if( t&0x10 ) { PSHUWORD(pX); m68_icount -= 2; } + if( t&0x08 ) { PSHUBYTE(DP); m68_icount -= 1; } + if( t&0x04 ) { PSHUBYTE(B); m68_icount -= 1; } + if( t&0x02 ) { PSHUBYTE(A); m68_icount -= 1; } + if( t&0x01 ) { PSHUBYTE(CC); m68_icount -= 1; } } /* 37 PULU inherent ----- */ -INLINE void pulu( void ) +OP_HANDLER( pulu ) { UINT8 t; IMMBYTE(t); - if( t&0x01 ) { PULUBYTE(CC); m6809_ICount -= 1; } - if( t&0x02 ) { PULUBYTE(A); m6809_ICount -= 1; } - if( t&0x04 ) { PULUBYTE(B); m6809_ICount -= 1; } - if( t&0x08 ) { PULUBYTE(DP); m6809_ICount -= 1; } - if( t&0x10 ) { PULUWORD(XD); m6809_ICount -= 2; } - if( t&0x20 ) { PULUWORD(YD); m6809_ICount -= 2; } - if( t&0x40 ) { PULUWORD(SD); m6809_ICount -= 2; } - if( t&0x80 ) { PULUWORD(PCD); CHANGE_PC; m6809_ICount -= 2; } + if( t&0x01 ) { PULUBYTE(CC); m68_icount -= 1; } + if( t&0x02 ) { PULUBYTE(A); m68_icount -= 1; } + if( t&0x04 ) { PULUBYTE(B); m68_icount -= 1; } + if( t&0x08 ) { PULUBYTE(DP); m68_icount -= 1; } + if( t&0x10 ) { PULUWORD(XD); m68_icount -= 2; } + if( t&0x20 ) { PULUWORD(YD); m68_icount -= 2; } + if( t&0x40 ) { PULUWORD(SD); m68_icount -= 2; } + if( t&0x80 ) { PULUWORD(PCD); CHANGE_PC; m68_icount -= 2; } /* HJB 990225: moved check after all PULLs */ - if( t&0x01 ) { CHECK_IRQ_LINES(); } + if( t&0x01 ) { CHECK_IRQ_LINES(m68_state); } } /* $38 ILLEGAL */ /* $39 RTS inherent ----- */ -INLINE void rts( void ) +OP_HANDLER( rts ) { PULLWORD(PCD); CHANGE_PC; } /* $3A ABX inherent ----- */ -INLINE void abx( void ) +OP_HANDLER( abx ) { X += B; } /* $3B RTI inherent ##### */ -INLINE void rti( void ) +OP_HANDLER( rti ) { UINT8 t; PULLBYTE(CC); t = CC & CC_E; /* HJB 990225: entire state saved? */ if(t) { - m6809_ICount -= 9; + m68_icount -= 9; PULLBYTE(A); PULLBYTE(B); PULLBYTE(DP); @@ -691,11 +693,11 @@ INLINE void rti( void ) } PULLWORD(PCD); CHANGE_PC; - CHECK_IRQ_LINES(); /* HJB 990116 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ } /* $3C CWAI inherent ----1 */ -INLINE void cwai( void ) +OP_HANDLER( cwai ) { UINT8 t; IMMBYTE(t); @@ -714,15 +716,15 @@ INLINE void cwai( void ) PUSHBYTE(B); PUSHBYTE(A); PUSHBYTE(CC); - m6809.int_state |= M6809_CWAI; /* HJB 990228 */ - CHECK_IRQ_LINES(); /* HJB 990116 */ - if( m6809.int_state & M6809_CWAI ) - if( m6809_ICount > 0 ) - m6809_ICount = 0; + m68_state->int_state |= M6809_CWAI; /* HJB 990228 */ + CHECK_IRQ_LINES(m68_state); /* HJB 990116 */ + if( m68_state->int_state & M6809_CWAI ) + if( m68_icount > 0 ) + m68_icount = 0; } /* $3D MUL inherent --*-@ */ -INLINE void mul( void ) +OP_HANDLER( mul ) { UINT16 t; t = A * B; @@ -733,7 +735,7 @@ INLINE void mul( void ) /* $3E ILLEGAL */ /* $3F SWI (SWI2 SWI3) absolute indirect ----- */ -INLINE void swi( void ) +OP_HANDLER( swi ) { CC |= CC_E; /* HJB 980225: save entire state */ PUSHWORD(pPC); @@ -750,7 +752,7 @@ INLINE void swi( void ) } /* $103F SWI2 absolute indirect ----- */ -INLINE void swi2( void ) +OP_HANDLER( swi2 ) { CC |= CC_E; /* HJB 980225: save entire state */ PUSHWORD(pPC); @@ -766,7 +768,7 @@ INLINE void swi2( void ) } /* $113F SWI3 absolute indirect ----- */ -INLINE void swi3( void ) +OP_HANDLER( swi3 ) { CC |= CC_E; /* HJB 980225: save entire state */ PUSHWORD(pPC); @@ -782,7 +784,7 @@ INLINE void swi3( void ) } /* $40 NEGA inherent ?**** */ -INLINE void nega( void ) +OP_HANDLER( nega ) { UINT16 r; r = -A; @@ -796,7 +798,7 @@ INLINE void nega( void ) /* $42 ILLEGAL */ /* $43 COMA inherent -**01 */ -INLINE void coma( void ) +OP_HANDLER( coma ) { A = ~A; CLR_NZV; @@ -805,7 +807,7 @@ INLINE void coma( void ) } /* $44 LSRA inherent -0*-* */ -INLINE void lsra( void ) +OP_HANDLER( lsra ) { CLR_NZC; CC |= (A & CC_C); @@ -816,7 +818,7 @@ INLINE void lsra( void ) /* $45 ILLEGAL */ /* $46 RORA inherent -**-* */ -INLINE void rora( void ) +OP_HANDLER( rora ) { UINT8 r; r = (CC & CC_C) << 7; @@ -828,7 +830,7 @@ INLINE void rora( void ) } /* $47 ASRA inherent ?**-* */ -INLINE void asra( void ) +OP_HANDLER( asra ) { CLR_NZC; CC |= (A & CC_C); @@ -837,7 +839,7 @@ INLINE void asra( void ) } /* $48 ASLA inherent ?**** */ -INLINE void asla( void ) +OP_HANDLER( asla ) { UINT16 r; r = A << 1; @@ -847,7 +849,7 @@ INLINE void asla( void ) } /* $49 ROLA inherent -**** */ -INLINE void rola( void ) +OP_HANDLER( rola ) { UINT16 t,r; t = A; @@ -857,7 +859,7 @@ INLINE void rola( void ) } /* $4A DECA inherent -***- */ -INLINE void deca( void ) +OP_HANDLER( deca ) { --A; CLR_NZV; @@ -867,7 +869,7 @@ INLINE void deca( void ) /* $4B ILLEGAL */ /* $4C INCA inherent -***- */ -INLINE void inca( void ) +OP_HANDLER( inca ) { ++A; CLR_NZV; @@ -875,7 +877,7 @@ INLINE void inca( void ) } /* $4D TSTA inherent -**0- */ -INLINE void tsta( void ) +OP_HANDLER( tsta ) { CLR_NZV; SET_NZ8(A); @@ -884,14 +886,14 @@ INLINE void tsta( void ) /* $4E ILLEGAL */ /* $4F CLRA inherent -0100 */ -INLINE void clra( void ) +OP_HANDLER( clra ) { A = 0; CLR_NZVC; SEZ; } /* $50 NEGB inherent ?**** */ -INLINE void negb( void ) +OP_HANDLER( negb ) { UINT16 r; r = -B; @@ -905,7 +907,7 @@ INLINE void negb( void ) /* $52 ILLEGAL */ /* $53 COMB inherent -**01 */ -INLINE void comb( void ) +OP_HANDLER( comb ) { B = ~B; CLR_NZV; @@ -914,7 +916,7 @@ INLINE void comb( void ) } /* $54 LSRB inherent -0*-* */ -INLINE void lsrb( void ) +OP_HANDLER( lsrb ) { CLR_NZC; CC |= (B & CC_C); @@ -925,7 +927,7 @@ INLINE void lsrb( void ) /* $55 ILLEGAL */ /* $56 RORB inherent -**-* */ -INLINE void rorb( void ) +OP_HANDLER( rorb ) { UINT8 r; r = (CC & CC_C) << 7; @@ -937,7 +939,7 @@ INLINE void rorb( void ) } /* $57 ASRB inherent ?**-* */ -INLINE void asrb( void ) +OP_HANDLER( asrb ) { CLR_NZC; CC |= (B & CC_C); @@ -946,7 +948,7 @@ INLINE void asrb( void ) } /* $58 ASLB inherent ?**** */ -INLINE void aslb( void ) +OP_HANDLER( aslb ) { UINT16 r; r = B << 1; @@ -956,7 +958,7 @@ INLINE void aslb( void ) } /* $59 ROLB inherent -**** */ -INLINE void rolb( void ) +OP_HANDLER( rolb ) { UINT16 t,r; t = B; @@ -968,7 +970,7 @@ INLINE void rolb( void ) } /* $5A DECB inherent -***- */ -INLINE void decb( void ) +OP_HANDLER( decb ) { --B; CLR_NZV; @@ -978,7 +980,7 @@ INLINE void decb( void ) /* $5B ILLEGAL */ /* $5C INCB inherent -***- */ -INLINE void incb( void ) +OP_HANDLER( incb ) { ++B; CLR_NZV; @@ -986,7 +988,7 @@ INLINE void incb( void ) } /* $5D TSTB inherent -**0- */ -INLINE void tstb( void ) +OP_HANDLER( tstb ) { CLR_NZV; SET_NZ8(B); @@ -995,17 +997,17 @@ INLINE void tstb( void ) /* $5E ILLEGAL */ /* $5F CLRB inherent -0100 */ -INLINE void clrb( void ) +OP_HANDLER( clrb ) { B = 0; CLR_NZVC; SEZ; } /* $60 NEG indexed ?**** */ -INLINE void neg_ix( void ) +OP_HANDLER( neg_ix ) { UINT16 r,t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r=-t; CLR_NZVC; @@ -1018,10 +1020,10 @@ INLINE void neg_ix( void ) /* $62 ILLEGAL */ /* $63 COM indexed -**01 */ -INLINE void com_ix( void ) +OP_HANDLER( com_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = ~RM(EAD); CLR_NZV; SET_NZ8(t); @@ -1030,10 +1032,10 @@ INLINE void com_ix( void ) } /* $64 LSR indexed -0*-* */ -INLINE void lsr_ix( void ) +OP_HANDLER( lsr_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); CLR_NZC; CC |= (t & CC_C); @@ -1044,10 +1046,10 @@ INLINE void lsr_ix( void ) /* $65 ILLEGAL */ /* $66 ROR indexed -**-* */ -INLINE void ror_ix( void ) +OP_HANDLER( ror_ix ) { UINT8 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); r = (CC & CC_C) << 7; CLR_NZC; @@ -1057,10 +1059,10 @@ INLINE void ror_ix( void ) } /* $67 ASR indexed ?**-* */ -INLINE void asr_ix( void ) +OP_HANDLER( asr_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); CLR_NZC; CC |= (t & CC_C); @@ -1070,10 +1072,10 @@ INLINE void asr_ix( void ) } /* $68 ASL indexed ?**** */ -INLINE void asl_ix( void ) +OP_HANDLER( asl_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); r = t << 1; CLR_NZVC; @@ -1082,10 +1084,10 @@ INLINE void asl_ix( void ) } /* $69 ROL indexed -**** */ -INLINE void rol_ix( void ) +OP_HANDLER( rol_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t=RM(EAD); r = CC & CC_C; r |= t << 1; @@ -1095,10 +1097,10 @@ INLINE void rol_ix( void ) } /* $6A DEC indexed -***- */ -INLINE void dec_ix( void ) +OP_HANDLER( dec_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD) - 1; CLR_NZV; SET_FLAGS8D(t); WM(EAD,t); @@ -1107,44 +1109,44 @@ INLINE void dec_ix( void ) /* $6B ILLEGAL */ /* $6C INC indexed -***- */ -INLINE void inc_ix( void ) +OP_HANDLER( inc_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD) + 1; CLR_NZV; SET_FLAGS8I(t); WM(EAD,t); } /* $6D TST indexed -**0- */ -INLINE void tst_ix( void ) +OP_HANDLER( tst_ix ) { UINT8 t; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); CLR_NZV; SET_NZ8(t); } /* $6E JMP indexed ----- */ -INLINE void jmp_ix( void ) +OP_HANDLER( jmp_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); PCD = EAD; CHANGE_PC; } /* $6F CLR indexed -0100 */ -INLINE void clr_ix( void ) +OP_HANDLER( clr_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); (void)RM(EAD); WM(EAD,0); CLR_NZVC; SEZ; } /* $70 NEG extended ?**** */ -INLINE void neg_ex( void ) +OP_HANDLER( neg_ex ) { UINT16 r,t; EXTBYTE(t); r=-t; @@ -1157,7 +1159,7 @@ INLINE void neg_ex( void ) /* $72 ILLEGAL */ /* $73 COM extended -**01 */ -INLINE void com_ex( void ) +OP_HANDLER( com_ex ) { UINT8 t; EXTBYTE(t); t = ~t; @@ -1166,7 +1168,7 @@ INLINE void com_ex( void ) } /* $74 LSR extended -0*-* */ -INLINE void lsr_ex( void ) +OP_HANDLER( lsr_ex ) { UINT8 t; EXTBYTE(t); CLR_NZC; CC |= (t & CC_C); @@ -1177,7 +1179,7 @@ INLINE void lsr_ex( void ) /* $75 ILLEGAL */ /* $76 ROR extended -**-* */ -INLINE void ror_ex( void ) +OP_HANDLER( ror_ex ) { UINT8 t,r; EXTBYTE(t); r=(CC & CC_C) << 7; @@ -1187,7 +1189,7 @@ INLINE void ror_ex( void ) } /* $77 ASR extended ?**-* */ -INLINE void asr_ex( void ) +OP_HANDLER( asr_ex ) { UINT8 t; EXTBYTE(t); CLR_NZC; CC |= (t & CC_C); @@ -1197,7 +1199,7 @@ INLINE void asr_ex( void ) } /* $78 ASL extended ?**** */ -INLINE void asl_ex( void ) +OP_HANDLER( asl_ex ) { UINT16 t,r; EXTBYTE(t); r=t<<1; @@ -1206,7 +1208,7 @@ INLINE void asl_ex( void ) } /* $79 ROL extended -**** */ -INLINE void rol_ex( void ) +OP_HANDLER( rol_ex ) { UINT16 t,r; EXTBYTE(t); r = (CC & CC_C) | (t << 1); @@ -1215,7 +1217,7 @@ INLINE void rol_ex( void ) } /* $7A DEC extended -***- */ -INLINE void dec_ex( void ) +OP_HANDLER( dec_ex ) { UINT8 t; EXTBYTE(t); --t; @@ -1226,7 +1228,7 @@ INLINE void dec_ex( void ) /* $7B ILLEGAL */ /* $7C INC extended -***- */ -INLINE void inc_ex( void ) +OP_HANDLER( inc_ex ) { UINT8 t; EXTBYTE(t); ++t; @@ -1235,14 +1237,14 @@ INLINE void inc_ex( void ) } /* $7D TST extended -**0- */ -INLINE void tst_ex( void ) +OP_HANDLER( tst_ex ) { UINT8 t; EXTBYTE(t); CLR_NZV; SET_NZ8(t); } /* $7E JMP extended ----- */ -INLINE void jmp_ex( void ) +OP_HANDLER( jmp_ex ) { EXTENDED; PCD = EAD; @@ -1250,7 +1252,7 @@ INLINE void jmp_ex( void ) } /* $7F CLR extended -0100 */ -INLINE void clr_ex( void ) +OP_HANDLER( clr_ex ) { EXTENDED; (void)RM(EAD); @@ -1259,7 +1261,7 @@ INLINE void clr_ex( void ) } /* $80 SUBA immediate ?**** */ -INLINE void suba_im( void ) +OP_HANDLER( suba_im ) { UINT16 t,r; IMMBYTE(t); @@ -1270,7 +1272,7 @@ INLINE void suba_im( void ) } /* $81 CMPA immediate ?**** */ -INLINE void cmpa_im( void ) +OP_HANDLER( cmpa_im ) { UINT16 t,r; IMMBYTE(t); @@ -1280,7 +1282,7 @@ INLINE void cmpa_im( void ) } /* $82 SBCA immediate ?**** */ -INLINE void sbca_im( void ) +OP_HANDLER( sbca_im ) { UINT16 t,r; IMMBYTE(t); @@ -1291,7 +1293,7 @@ INLINE void sbca_im( void ) } /* $83 SUBD (CMPD CMPU) immediate -**** */ -INLINE void subd_im( void ) +OP_HANDLER( subd_im ) { UINT32 r,d; PAIR b; @@ -1304,7 +1306,7 @@ INLINE void subd_im( void ) } /* $1083 CMPD immediate -**** */ -INLINE void cmpd_im( void ) +OP_HANDLER( cmpd_im ) { UINT32 r,d; PAIR b; @@ -1316,7 +1318,7 @@ INLINE void cmpd_im( void ) } /* $1183 CMPU immediate -**** */ -INLINE void cmpu_im( void ) +OP_HANDLER( cmpu_im ) { UINT32 r, d; PAIR b; @@ -1328,7 +1330,7 @@ INLINE void cmpu_im( void ) } /* $84 ANDA immediate -**0- */ -INLINE void anda_im( void ) +OP_HANDLER( anda_im ) { UINT8 t; IMMBYTE(t); @@ -1338,7 +1340,7 @@ INLINE void anda_im( void ) } /* $85 BITA immediate -**0- */ -INLINE void bita_im( void ) +OP_HANDLER( bita_im ) { UINT8 t,r; IMMBYTE(t); @@ -1348,7 +1350,7 @@ INLINE void bita_im( void ) } /* $86 LDA immediate -**0- */ -INLINE void lda_im( void ) +OP_HANDLER( lda_im ) { IMMBYTE(A); CLR_NZV; @@ -1357,7 +1359,7 @@ INLINE void lda_im( void ) /* is this a legal instruction? */ /* $87 STA immediate -**0- */ -INLINE void sta_im( void ) +OP_HANDLER( sta_im ) { CLR_NZV; SET_NZ8(A); @@ -1366,7 +1368,7 @@ INLINE void sta_im( void ) } /* $88 EORA immediate -**0- */ -INLINE void eora_im( void ) +OP_HANDLER( eora_im ) { UINT8 t; IMMBYTE(t); @@ -1376,7 +1378,7 @@ INLINE void eora_im( void ) } /* $89 ADCA immediate ***** */ -INLINE void adca_im( void ) +OP_HANDLER( adca_im ) { UINT16 t,r; IMMBYTE(t); @@ -1388,7 +1390,7 @@ INLINE void adca_im( void ) } /* $8A ORA immediate -**0- */ -INLINE void ora_im( void ) +OP_HANDLER( ora_im ) { UINT8 t; IMMBYTE(t); @@ -1398,7 +1400,7 @@ INLINE void ora_im( void ) } /* $8B ADDA immediate ***** */ -INLINE void adda_im( void ) +OP_HANDLER( adda_im ) { UINT16 t,r; IMMBYTE(t); @@ -1410,7 +1412,7 @@ INLINE void adda_im( void ) } /* $8C CMPX (CMPY CMPS) immediate -**** */ -INLINE void cmpx_im( void ) +OP_HANDLER( cmpx_im ) { UINT32 r,d; PAIR b; @@ -1422,7 +1424,7 @@ INLINE void cmpx_im( void ) } /* $108C CMPY immediate -**** */ -INLINE void cmpy_im( void ) +OP_HANDLER( cmpy_im ) { UINT32 r,d; PAIR b; @@ -1434,7 +1436,7 @@ INLINE void cmpy_im( void ) } /* $118C CMPS immediate -**** */ -INLINE void cmps_im( void ) +OP_HANDLER( cmps_im ) { UINT32 r,d; PAIR b; @@ -1446,7 +1448,7 @@ INLINE void cmps_im( void ) } /* $8D BSR ----- */ -INLINE void bsr( void ) +OP_HANDLER( bsr ) { UINT8 t; IMMBYTE(t); @@ -1456,7 +1458,7 @@ INLINE void bsr( void ) } /* $8E LDX (LDY) immediate -**0- */ -INLINE void ldx_im( void ) +OP_HANDLER( ldx_im ) { IMMWORD(pX); CLR_NZV; @@ -1464,7 +1466,7 @@ INLINE void ldx_im( void ) } /* $108E LDY immediate -**0- */ -INLINE void ldy_im( void ) +OP_HANDLER( ldy_im ) { IMMWORD(pY); CLR_NZV; @@ -1473,7 +1475,7 @@ INLINE void ldy_im( void ) /* is this a legal instruction? */ /* $8F STX (STY) immediate -**0- */ -INLINE void stx_im( void ) +OP_HANDLER( stx_im ) { CLR_NZV; SET_NZ16(X); @@ -1483,7 +1485,7 @@ INLINE void stx_im( void ) /* is this a legal instruction? */ /* $108F STY immediate -**0- */ -INLINE void sty_im( void ) +OP_HANDLER( sty_im ) { CLR_NZV; SET_NZ16(Y); @@ -1492,7 +1494,7 @@ INLINE void sty_im( void ) } /* $90 SUBA direct ?**** */ -INLINE void suba_di( void ) +OP_HANDLER( suba_di ) { UINT16 t,r; DIRBYTE(t); @@ -1503,7 +1505,7 @@ INLINE void suba_di( void ) } /* $91 CMPA direct ?**** */ -INLINE void cmpa_di( void ) +OP_HANDLER( cmpa_di ) { UINT16 t,r; DIRBYTE(t); @@ -1513,7 +1515,7 @@ INLINE void cmpa_di( void ) } /* $92 SBCA direct ?**** */ -INLINE void sbca_di( void ) +OP_HANDLER( sbca_di ) { UINT16 t,r; DIRBYTE(t); @@ -1524,7 +1526,7 @@ INLINE void sbca_di( void ) } /* $93 SUBD (CMPD CMPU) direct -**** */ -INLINE void subd_di( void ) +OP_HANDLER( subd_di ) { UINT32 r,d; PAIR b; @@ -1537,7 +1539,7 @@ INLINE void subd_di( void ) } /* $1093 CMPD direct -**** */ -INLINE void cmpd_di( void ) +OP_HANDLER( cmpd_di ) { UINT32 r,d; PAIR b; @@ -1549,7 +1551,7 @@ INLINE void cmpd_di( void ) } /* $1193 CMPU direct -**** */ -INLINE void cmpu_di( void ) +OP_HANDLER( cmpu_di ) { UINT32 r,d; PAIR b; @@ -1561,7 +1563,7 @@ INLINE void cmpu_di( void ) } /* $94 ANDA direct -**0- */ -INLINE void anda_di( void ) +OP_HANDLER( anda_di ) { UINT8 t; DIRBYTE(t); @@ -1571,7 +1573,7 @@ INLINE void anda_di( void ) } /* $95 BITA direct -**0- */ -INLINE void bita_di( void ) +OP_HANDLER( bita_di ) { UINT8 t,r; DIRBYTE(t); @@ -1581,7 +1583,7 @@ INLINE void bita_di( void ) } /* $96 LDA direct -**0- */ -INLINE void lda_di( void ) +OP_HANDLER( lda_di ) { DIRBYTE(A); CLR_NZV; @@ -1589,7 +1591,7 @@ INLINE void lda_di( void ) } /* $97 STA direct -**0- */ -INLINE void sta_di( void ) +OP_HANDLER( sta_di ) { CLR_NZV; SET_NZ8(A); @@ -1598,7 +1600,7 @@ INLINE void sta_di( void ) } /* $98 EORA direct -**0- */ -INLINE void eora_di( void ) +OP_HANDLER( eora_di ) { UINT8 t; DIRBYTE(t); @@ -1608,7 +1610,7 @@ INLINE void eora_di( void ) } /* $99 ADCA direct ***** */ -INLINE void adca_di( void ) +OP_HANDLER( adca_di ) { UINT16 t,r; DIRBYTE(t); @@ -1620,7 +1622,7 @@ INLINE void adca_di( void ) } /* $9A ORA direct -**0- */ -INLINE void ora_di( void ) +OP_HANDLER( ora_di ) { UINT8 t; DIRBYTE(t); @@ -1630,7 +1632,7 @@ INLINE void ora_di( void ) } /* $9B ADDA direct ***** */ -INLINE void adda_di( void ) +OP_HANDLER( adda_di ) { UINT16 t,r; DIRBYTE(t); @@ -1642,7 +1644,7 @@ INLINE void adda_di( void ) } /* $9C CMPX (CMPY CMPS) direct -**** */ -INLINE void cmpx_di( void ) +OP_HANDLER( cmpx_di ) { UINT32 r,d; PAIR b; @@ -1654,7 +1656,7 @@ INLINE void cmpx_di( void ) } /* $109C CMPY direct -**** */ -INLINE void cmpy_di( void ) +OP_HANDLER( cmpy_di ) { UINT32 r,d; PAIR b; @@ -1666,7 +1668,7 @@ INLINE void cmpy_di( void ) } /* $119C CMPS direct -**** */ -INLINE void cmps_di( void ) +OP_HANDLER( cmps_di ) { UINT32 r,d; PAIR b; @@ -1678,7 +1680,7 @@ INLINE void cmps_di( void ) } /* $9D JSR direct ----- */ -INLINE void jsr_di( void ) +OP_HANDLER( jsr_di ) { DIRECT; PUSHWORD(pPC); @@ -1687,7 +1689,7 @@ INLINE void jsr_di( void ) } /* $9E LDX (LDY) direct -**0- */ -INLINE void ldx_di( void ) +OP_HANDLER( ldx_di ) { DIRWORD(pX); CLR_NZV; @@ -1695,7 +1697,7 @@ INLINE void ldx_di( void ) } /* $109E LDY direct -**0- */ -INLINE void ldy_di( void ) +OP_HANDLER( ldy_di ) { DIRWORD(pY); CLR_NZV; @@ -1703,7 +1705,7 @@ INLINE void ldy_di( void ) } /* $9F STX (STY) direct -**0- */ -INLINE void stx_di( void ) +OP_HANDLER( stx_di ) { CLR_NZV; SET_NZ16(X); @@ -1712,7 +1714,7 @@ INLINE void stx_di( void ) } /* $109F STY direct -**0- */ -INLINE void sty_di( void ) +OP_HANDLER( sty_di ) { CLR_NZV; SET_NZ16(Y); @@ -1721,10 +1723,10 @@ INLINE void sty_di( void ) } /* $a0 SUBA indexed ?**** */ -INLINE void suba_ix( void ) +OP_HANDLER( suba_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A - t; CLR_NZVC; @@ -1733,10 +1735,10 @@ INLINE void suba_ix( void ) } /* $a1 CMPA indexed ?**** */ -INLINE void cmpa_ix( void ) +OP_HANDLER( cmpa_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A - t; CLR_NZVC; @@ -1744,10 +1746,10 @@ INLINE void cmpa_ix( void ) } /* $a2 SBCA indexed ?**** */ -INLINE void sbca_ix( void ) +OP_HANDLER( sbca_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A - t - (CC & CC_C); CLR_NZVC; @@ -1756,11 +1758,11 @@ INLINE void sbca_ix( void ) } /* $a3 SUBD (CMPD CMPU) indexed -**** */ -INLINE void subd_ix( void ) +OP_HANDLER( subd_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = D; r = d - b.d; @@ -1770,11 +1772,11 @@ INLINE void subd_ix( void ) } /* $10a3 CMPD indexed -**** */ -INLINE void cmpd_ix( void ) +OP_HANDLER( cmpd_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = D; r = d - b.d; @@ -1783,11 +1785,11 @@ INLINE void cmpd_ix( void ) } /* $11a3 CMPU indexed -**** */ -INLINE void cmpu_ix( void ) +OP_HANDLER( cmpu_ix ) { UINT32 r; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); r = U - b.d; CLR_NZVC; @@ -1795,56 +1797,56 @@ INLINE void cmpu_ix( void ) } /* $a4 ANDA indexed -**0- */ -INLINE void anda_ix( void ) +OP_HANDLER( anda_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A &= RM(EAD); CLR_NZV; SET_NZ8(A); } /* $a5 BITA indexed -**0- */ -INLINE void bita_ix( void ) +OP_HANDLER( bita_ix ) { UINT8 r; - fetch_effective_address(); + fetch_effective_address(m68_state); r = A & RM(EAD); CLR_NZV; SET_NZ8(r); } /* $a6 LDA indexed -**0- */ -INLINE void lda_ix( void ) +OP_HANDLER( lda_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A = RM(EAD); CLR_NZV; SET_NZ8(A); } /* $a7 STA indexed -**0- */ -INLINE void sta_ix( void ) +OP_HANDLER( sta_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ8(A); WM(EAD,A); } /* $a8 EORA indexed -**0- */ -INLINE void eora_ix( void ) +OP_HANDLER( eora_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A ^= RM(EAD); CLR_NZV; SET_NZ8(A); } /* $a9 ADCA indexed ***** */ -INLINE void adca_ix( void ) +OP_HANDLER( adca_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A + t + (CC & CC_C); CLR_HNZVC; @@ -1854,19 +1856,19 @@ INLINE void adca_ix( void ) } /* $aA ORA indexed -**0- */ -INLINE void ora_ix( void ) +OP_HANDLER( ora_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); A |= RM(EAD); CLR_NZV; SET_NZ8(A); } /* $aB ADDA indexed ***** */ -INLINE void adda_ix( void ) +OP_HANDLER( adda_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = A + t; CLR_HNZVC; @@ -1876,11 +1878,11 @@ INLINE void adda_ix( void ) } /* $aC CMPX (CMPY CMPS) indexed -**** */ -INLINE void cmpx_ix( void ) +OP_HANDLER( cmpx_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = X; r = d - b.d; @@ -1889,11 +1891,11 @@ INLINE void cmpx_ix( void ) } /* $10aC CMPY indexed -**** */ -INLINE void cmpy_ix( void ) +OP_HANDLER( cmpy_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = Y; r = d - b.d; @@ -1902,11 +1904,11 @@ INLINE void cmpy_ix( void ) } /* $11aC CMPS indexed -**** */ -INLINE void cmps_ix( void ) +OP_HANDLER( cmps_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = S; r = d - b.d; @@ -1915,52 +1917,52 @@ INLINE void cmps_ix( void ) } /* $aD JSR indexed ----- */ -INLINE void jsr_ix( void ) +OP_HANDLER( jsr_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); PUSHWORD(pPC); PCD = EAD; CHANGE_PC; } /* $aE LDX (LDY) indexed -**0- */ -INLINE void ldx_ix( void ) +OP_HANDLER( ldx_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); X=RM16(EAD); CLR_NZV; SET_NZ16(X); } /* $10aE LDY indexed -**0- */ -INLINE void ldy_ix( void ) +OP_HANDLER( ldy_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); Y=RM16(EAD); CLR_NZV; SET_NZ16(Y); } /* $aF STX (STY) indexed -**0- */ -INLINE void stx_ix( void ) +OP_HANDLER( stx_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(X); WM16(EAD,&pX); } /* $10aF STY indexed -**0- */ -INLINE void sty_ix( void ) +OP_HANDLER( sty_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(Y); WM16(EAD,&pY); } /* $b0 SUBA extended ?**** */ -INLINE void suba_ex( void ) +OP_HANDLER( suba_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1971,7 +1973,7 @@ INLINE void suba_ex( void ) } /* $b1 CMPA extended ?**** */ -INLINE void cmpa_ex( void ) +OP_HANDLER( cmpa_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1981,7 +1983,7 @@ INLINE void cmpa_ex( void ) } /* $b2 SBCA extended ?**** */ -INLINE void sbca_ex( void ) +OP_HANDLER( sbca_ex ) { UINT16 t,r; EXTBYTE(t); @@ -1992,7 +1994,7 @@ INLINE void sbca_ex( void ) } /* $b3 SUBD (CMPD CMPU) extended -**** */ -INLINE void subd_ex( void ) +OP_HANDLER( subd_ex ) { UINT32 r,d; PAIR b; @@ -2005,7 +2007,7 @@ INLINE void subd_ex( void ) } /* $10b3 CMPD extended -**** */ -INLINE void cmpd_ex( void ) +OP_HANDLER( cmpd_ex ) { UINT32 r,d; PAIR b; @@ -2017,7 +2019,7 @@ INLINE void cmpd_ex( void ) } /* $11b3 CMPU extended -**** */ -INLINE void cmpu_ex( void ) +OP_HANDLER( cmpu_ex ) { UINT32 r,d; PAIR b; @@ -2029,7 +2031,7 @@ INLINE void cmpu_ex( void ) } /* $b4 ANDA extended -**0- */ -INLINE void anda_ex( void ) +OP_HANDLER( anda_ex ) { UINT8 t; EXTBYTE(t); @@ -2039,7 +2041,7 @@ INLINE void anda_ex( void ) } /* $b5 BITA extended -**0- */ -INLINE void bita_ex( void ) +OP_HANDLER( bita_ex ) { UINT8 t,r; EXTBYTE(t); @@ -2048,7 +2050,7 @@ INLINE void bita_ex( void ) } /* $b6 LDA extended -**0- */ -INLINE void lda_ex( void ) +OP_HANDLER( lda_ex ) { EXTBYTE(A); CLR_NZV; @@ -2056,7 +2058,7 @@ INLINE void lda_ex( void ) } /* $b7 STA extended -**0- */ -INLINE void sta_ex( void ) +OP_HANDLER( sta_ex ) { CLR_NZV; SET_NZ8(A); @@ -2065,7 +2067,7 @@ INLINE void sta_ex( void ) } /* $b8 EORA extended -**0- */ -INLINE void eora_ex( void ) +OP_HANDLER( eora_ex ) { UINT8 t; EXTBYTE(t); @@ -2075,7 +2077,7 @@ INLINE void eora_ex( void ) } /* $b9 ADCA extended ***** */ -INLINE void adca_ex( void ) +OP_HANDLER( adca_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2087,7 +2089,7 @@ INLINE void adca_ex( void ) } /* $bA ORA extended -**0- */ -INLINE void ora_ex( void ) +OP_HANDLER( ora_ex ) { UINT8 t; EXTBYTE(t); @@ -2097,7 +2099,7 @@ INLINE void ora_ex( void ) } /* $bB ADDA extended ***** */ -INLINE void adda_ex( void ) +OP_HANDLER( adda_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2109,7 +2111,7 @@ INLINE void adda_ex( void ) } /* $bC CMPX (CMPY CMPS) extended -**** */ -INLINE void cmpx_ex( void ) +OP_HANDLER( cmpx_ex ) { UINT32 r,d; PAIR b; @@ -2121,7 +2123,7 @@ INLINE void cmpx_ex( void ) } /* $10bC CMPY extended -**** */ -INLINE void cmpy_ex( void ) +OP_HANDLER( cmpy_ex ) { UINT32 r,d; PAIR b; @@ -2133,7 +2135,7 @@ INLINE void cmpy_ex( void ) } /* $11bC CMPS extended -**** */ -INLINE void cmps_ex( void ) +OP_HANDLER( cmps_ex ) { UINT32 r,d; PAIR b; @@ -2145,7 +2147,7 @@ INLINE void cmps_ex( void ) } /* $bD JSR extended ----- */ -INLINE void jsr_ex( void ) +OP_HANDLER( jsr_ex ) { EXTENDED; PUSHWORD(pPC); @@ -2154,7 +2156,7 @@ INLINE void jsr_ex( void ) } /* $bE LDX (LDY) extended -**0- */ -INLINE void ldx_ex( void ) +OP_HANDLER( ldx_ex ) { EXTWORD(pX); CLR_NZV; @@ -2162,7 +2164,7 @@ INLINE void ldx_ex( void ) } /* $10bE LDY extended -**0- */ -INLINE void ldy_ex( void ) +OP_HANDLER( ldy_ex ) { EXTWORD(pY); CLR_NZV; @@ -2170,7 +2172,7 @@ INLINE void ldy_ex( void ) } /* $bF STX (STY) extended -**0- */ -INLINE void stx_ex( void ) +OP_HANDLER( stx_ex ) { CLR_NZV; SET_NZ16(X); @@ -2179,7 +2181,7 @@ INLINE void stx_ex( void ) } /* $10bF STY extended -**0- */ -INLINE void sty_ex( void ) +OP_HANDLER( sty_ex ) { CLR_NZV; SET_NZ16(Y); @@ -2188,7 +2190,7 @@ INLINE void sty_ex( void ) } /* $c0 SUBB immediate ?**** */ -INLINE void subb_im( void ) +OP_HANDLER( subb_im ) { UINT16 t,r; IMMBYTE(t); @@ -2199,7 +2201,7 @@ INLINE void subb_im( void ) } /* $c1 CMPB immediate ?**** */ -INLINE void cmpb_im( void ) +OP_HANDLER( cmpb_im ) { UINT16 t,r; IMMBYTE(t); @@ -2208,7 +2210,7 @@ INLINE void cmpb_im( void ) } /* $c2 SBCB immediate ?**** */ -INLINE void sbcb_im( void ) +OP_HANDLER( sbcb_im ) { UINT16 t,r; IMMBYTE(t); @@ -2219,7 +2221,7 @@ INLINE void sbcb_im( void ) } /* $c3 ADDD immediate -**** */ -INLINE void addd_im( void ) +OP_HANDLER( addd_im ) { UINT32 r,d; PAIR b; @@ -2232,7 +2234,7 @@ INLINE void addd_im( void ) } /* $c4 ANDB immediate -**0- */ -INLINE void andb_im( void ) +OP_HANDLER( andb_im ) { UINT8 t; IMMBYTE(t); @@ -2242,7 +2244,7 @@ INLINE void andb_im( void ) } /* $c5 BITB immediate -**0- */ -INLINE void bitb_im( void ) +OP_HANDLER( bitb_im ) { UINT8 t,r; IMMBYTE(t); @@ -2252,7 +2254,7 @@ INLINE void bitb_im( void ) } /* $c6 LDB immediate -**0- */ -INLINE void ldb_im( void ) +OP_HANDLER( ldb_im ) { IMMBYTE(B); CLR_NZV; @@ -2261,7 +2263,7 @@ INLINE void ldb_im( void ) /* is this a legal instruction? */ /* $c7 STB immediate -**0- */ -INLINE void stb_im( void ) +OP_HANDLER( stb_im ) { CLR_NZV; SET_NZ8(B); @@ -2270,7 +2272,7 @@ INLINE void stb_im( void ) } /* $c8 EORB immediate -**0- */ -INLINE void eorb_im( void ) +OP_HANDLER( eorb_im ) { UINT8 t; IMMBYTE(t); @@ -2280,7 +2282,7 @@ INLINE void eorb_im( void ) } /* $c9 ADCB immediate ***** */ -INLINE void adcb_im( void ) +OP_HANDLER( adcb_im ) { UINT16 t,r; IMMBYTE(t); @@ -2292,7 +2294,7 @@ INLINE void adcb_im( void ) } /* $cA ORB immediate -**0- */ -INLINE void orb_im( void ) +OP_HANDLER( orb_im ) { UINT8 t; IMMBYTE(t); @@ -2302,7 +2304,7 @@ INLINE void orb_im( void ) } /* $cB ADDB immediate ***** */ -INLINE void addb_im( void ) +OP_HANDLER( addb_im ) { UINT16 t,r; IMMBYTE(t); @@ -2314,7 +2316,7 @@ INLINE void addb_im( void ) } /* $cC LDD immediate -**0- */ -INLINE void ldd_im( void ) +OP_HANDLER( ldd_im ) { IMMWORD(pD); CLR_NZV; @@ -2323,7 +2325,7 @@ INLINE void ldd_im( void ) /* is this a legal instruction? */ /* $cD STD immediate -**0- */ -INLINE void std_im( void ) +OP_HANDLER( std_im ) { CLR_NZV; SET_NZ16(D); @@ -2332,7 +2334,7 @@ INLINE void std_im( void ) } /* $cE LDU (LDS) immediate -**0- */ -INLINE void ldu_im( void ) +OP_HANDLER( ldu_im ) { IMMWORD(pU); CLR_NZV; @@ -2340,17 +2342,17 @@ INLINE void ldu_im( void ) } /* $10cE LDS immediate -**0- */ -INLINE void lds_im( void ) +OP_HANDLER( lds_im ) { IMMWORD(pS); CLR_NZV; SET_NZ16(S); - m6809.int_state |= M6809_LDS; + m68_state->int_state |= M6809_LDS; } /* is this a legal instruction? */ /* $cF STU (STS) immediate -**0- */ -INLINE void stu_im( void ) +OP_HANDLER( stu_im ) { CLR_NZV; SET_NZ16(U); @@ -2360,7 +2362,7 @@ INLINE void stu_im( void ) /* is this a legal instruction? */ /* $10cF STS immediate -**0- */ -INLINE void sts_im( void ) +OP_HANDLER( sts_im ) { CLR_NZV; SET_NZ16(S); @@ -2369,7 +2371,7 @@ INLINE void sts_im( void ) } /* $d0 SUBB direct ?**** */ -INLINE void subb_di( void ) +OP_HANDLER( subb_di ) { UINT16 t,r; DIRBYTE(t); @@ -2380,7 +2382,7 @@ INLINE void subb_di( void ) } /* $d1 CMPB direct ?**** */ -INLINE void cmpb_di( void ) +OP_HANDLER( cmpb_di ) { UINT16 t,r; DIRBYTE(t); @@ -2390,7 +2392,7 @@ INLINE void cmpb_di( void ) } /* $d2 SBCB direct ?**** */ -INLINE void sbcb_di( void ) +OP_HANDLER( sbcb_di ) { UINT16 t,r; DIRBYTE(t); @@ -2401,7 +2403,7 @@ INLINE void sbcb_di( void ) } /* $d3 ADDD direct -**** */ -INLINE void addd_di( void ) +OP_HANDLER( addd_di ) { UINT32 r,d; PAIR b; @@ -2414,7 +2416,7 @@ INLINE void addd_di( void ) } /* $d4 ANDB direct -**0- */ -INLINE void andb_di( void ) +OP_HANDLER( andb_di ) { UINT8 t; DIRBYTE(t); @@ -2424,7 +2426,7 @@ INLINE void andb_di( void ) } /* $d5 BITB direct -**0- */ -INLINE void bitb_di( void ) +OP_HANDLER( bitb_di ) { UINT8 t,r; DIRBYTE(t); @@ -2434,7 +2436,7 @@ INLINE void bitb_di( void ) } /* $d6 LDB direct -**0- */ -INLINE void ldb_di( void ) +OP_HANDLER( ldb_di ) { DIRBYTE(B); CLR_NZV; @@ -2442,7 +2444,7 @@ INLINE void ldb_di( void ) } /* $d7 STB direct -**0- */ -INLINE void stb_di( void ) +OP_HANDLER( stb_di ) { CLR_NZV; SET_NZ8(B); @@ -2451,7 +2453,7 @@ INLINE void stb_di( void ) } /* $d8 EORB direct -**0- */ -INLINE void eorb_di( void ) +OP_HANDLER( eorb_di ) { UINT8 t; DIRBYTE(t); @@ -2461,7 +2463,7 @@ INLINE void eorb_di( void ) } /* $d9 ADCB direct ***** */ -INLINE void adcb_di( void ) +OP_HANDLER( adcb_di ) { UINT16 t,r; DIRBYTE(t); @@ -2473,7 +2475,7 @@ INLINE void adcb_di( void ) } /* $dA ORB direct -**0- */ -INLINE void orb_di( void ) +OP_HANDLER( orb_di ) { UINT8 t; DIRBYTE(t); @@ -2483,7 +2485,7 @@ INLINE void orb_di( void ) } /* $dB ADDB direct ***** */ -INLINE void addb_di( void ) +OP_HANDLER( addb_di ) { UINT16 t,r; DIRBYTE(t); @@ -2495,7 +2497,7 @@ INLINE void addb_di( void ) } /* $dC LDD direct -**0- */ -INLINE void ldd_di( void ) +OP_HANDLER( ldd_di ) { DIRWORD(pD); CLR_NZV; @@ -2503,7 +2505,7 @@ INLINE void ldd_di( void ) } /* $dD STD direct -**0- */ -INLINE void std_di( void ) +OP_HANDLER( std_di ) { CLR_NZV; SET_NZ16(D); @@ -2512,7 +2514,7 @@ INLINE void std_di( void ) } /* $dE LDU (LDS) direct -**0- */ -INLINE void ldu_di( void ) +OP_HANDLER( ldu_di ) { DIRWORD(pU); CLR_NZV; @@ -2520,16 +2522,16 @@ INLINE void ldu_di( void ) } /* $10dE LDS direct -**0- */ -INLINE void lds_di( void ) +OP_HANDLER( lds_di ) { DIRWORD(pS); CLR_NZV; SET_NZ16(S); - m6809.int_state |= M6809_LDS; + m68_state->int_state |= M6809_LDS; } /* $dF STU (STS) direct -**0- */ -INLINE void stu_di( void ) +OP_HANDLER( stu_di ) { CLR_NZV; SET_NZ16(U); @@ -2538,7 +2540,7 @@ INLINE void stu_di( void ) } /* $10dF STS direct -**0- */ -INLINE void sts_di( void ) +OP_HANDLER( sts_di ) { CLR_NZV; SET_NZ16(S); @@ -2547,10 +2549,10 @@ INLINE void sts_di( void ) } /* $e0 SUBB indexed ?**** */ -INLINE void subb_ix( void ) +OP_HANDLER( subb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B - t; CLR_NZVC; @@ -2559,10 +2561,10 @@ INLINE void subb_ix( void ) } /* $e1 CMPB indexed ?**** */ -INLINE void cmpb_ix( void ) +OP_HANDLER( cmpb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B - t; CLR_NZVC; @@ -2570,10 +2572,10 @@ INLINE void cmpb_ix( void ) } /* $e2 SBCB indexed ?**** */ -INLINE void sbcb_ix( void ) +OP_HANDLER( sbcb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B - t - (CC & CC_C); CLR_NZVC; @@ -2582,11 +2584,11 @@ INLINE void sbcb_ix( void ) } /* $e3 ADDD indexed -**** */ -INLINE void addd_ix( void ) +OP_HANDLER( addd_ix ) { UINT32 r,d; PAIR b; - fetch_effective_address(); + fetch_effective_address(m68_state); b.d=RM16(EAD); d = D; r = d + b.d; @@ -2596,56 +2598,56 @@ INLINE void addd_ix( void ) } /* $e4 ANDB indexed -**0- */ -INLINE void andb_ix( void ) +OP_HANDLER( andb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B &= RM(EAD); CLR_NZV; SET_NZ8(B); } /* $e5 BITB indexed -**0- */ -INLINE void bitb_ix( void ) +OP_HANDLER( bitb_ix ) { UINT8 r; - fetch_effective_address(); + fetch_effective_address(m68_state); r = B & RM(EAD); CLR_NZV; SET_NZ8(r); } /* $e6 LDB indexed -**0- */ -INLINE void ldb_ix( void ) +OP_HANDLER( ldb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B = RM(EAD); CLR_NZV; SET_NZ8(B); } /* $e7 STB indexed -**0- */ -INLINE void stb_ix( void ) +OP_HANDLER( stb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ8(B); WM(EAD,B); } /* $e8 EORB indexed -**0- */ -INLINE void eorb_ix( void ) +OP_HANDLER( eorb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B ^= RM(EAD); CLR_NZV; SET_NZ8(B); } /* $e9 ADCB indexed ***** */ -INLINE void adcb_ix( void ) +OP_HANDLER( adcb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B + t + (CC & CC_C); CLR_HNZVC; @@ -2655,19 +2657,19 @@ INLINE void adcb_ix( void ) } /* $eA ORB indexed -**0- */ -INLINE void orb_ix( void ) +OP_HANDLER( orb_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); B |= RM(EAD); CLR_NZV; SET_NZ8(B); } /* $eB ADDB indexed ***** */ -INLINE void addb_ix( void ) +OP_HANDLER( addb_ix ) { UINT16 t,r; - fetch_effective_address(); + fetch_effective_address(m68_state); t = RM(EAD); r = B + t; CLR_HNZVC; @@ -2677,61 +2679,61 @@ INLINE void addb_ix( void ) } /* $eC LDD indexed -**0- */ -INLINE void ldd_ix( void ) +OP_HANDLER( ldd_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); D=RM16(EAD); CLR_NZV; SET_NZ16(D); } /* $eD STD indexed -**0- */ -INLINE void std_ix( void ) +OP_HANDLER( std_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(D); WM16(EAD,&pD); } /* $eE LDU (LDS) indexed -**0- */ -INLINE void ldu_ix( void ) +OP_HANDLER( ldu_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); U=RM16(EAD); CLR_NZV; SET_NZ16(U); } /* $10eE LDS indexed -**0- */ -INLINE void lds_ix( void ) +OP_HANDLER( lds_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); S=RM16(EAD); CLR_NZV; SET_NZ16(S); - m6809.int_state |= M6809_LDS; + m68_state->int_state |= M6809_LDS; } /* $eF STU (STS) indexed -**0- */ -INLINE void stu_ix( void ) +OP_HANDLER( stu_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(U); WM16(EAD,&pU); } /* $10eF STS indexed -**0- */ -INLINE void sts_ix( void ) +OP_HANDLER( sts_ix ) { - fetch_effective_address(); + fetch_effective_address(m68_state); CLR_NZV; SET_NZ16(S); WM16(EAD,&pS); } /* $f0 SUBB extended ?**** */ -INLINE void subb_ex( void ) +OP_HANDLER( subb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2742,7 +2744,7 @@ INLINE void subb_ex( void ) } /* $f1 CMPB extended ?**** */ -INLINE void cmpb_ex( void ) +OP_HANDLER( cmpb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2752,7 +2754,7 @@ INLINE void cmpb_ex( void ) } /* $f2 SBCB extended ?**** */ -INLINE void sbcb_ex( void ) +OP_HANDLER( sbcb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2763,7 +2765,7 @@ INLINE void sbcb_ex( void ) } /* $f3 ADDD extended -**** */ -INLINE void addd_ex( void ) +OP_HANDLER( addd_ex ) { UINT32 r,d; PAIR b; @@ -2776,7 +2778,7 @@ INLINE void addd_ex( void ) } /* $f4 ANDB extended -**0- */ -INLINE void andb_ex( void ) +OP_HANDLER( andb_ex ) { UINT8 t; EXTBYTE(t); @@ -2786,7 +2788,7 @@ INLINE void andb_ex( void ) } /* $f5 BITB extended -**0- */ -INLINE void bitb_ex( void ) +OP_HANDLER( bitb_ex ) { UINT8 t,r; EXTBYTE(t); @@ -2796,7 +2798,7 @@ INLINE void bitb_ex( void ) } /* $f6 LDB extended -**0- */ -INLINE void ldb_ex( void ) +OP_HANDLER( ldb_ex ) { EXTBYTE(B); CLR_NZV; @@ -2804,7 +2806,7 @@ INLINE void ldb_ex( void ) } /* $f7 STB extended -**0- */ -INLINE void stb_ex( void ) +OP_HANDLER( stb_ex ) { CLR_NZV; SET_NZ8(B); @@ -2813,7 +2815,7 @@ INLINE void stb_ex( void ) } /* $f8 EORB extended -**0- */ -INLINE void eorb_ex( void ) +OP_HANDLER( eorb_ex ) { UINT8 t; EXTBYTE(t); @@ -2823,7 +2825,7 @@ INLINE void eorb_ex( void ) } /* $f9 ADCB extended ***** */ -INLINE void adcb_ex( void ) +OP_HANDLER( adcb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2835,7 +2837,7 @@ INLINE void adcb_ex( void ) } /* $fA ORB extended -**0- */ -INLINE void orb_ex( void ) +OP_HANDLER( orb_ex ) { UINT8 t; EXTBYTE(t); @@ -2845,7 +2847,7 @@ INLINE void orb_ex( void ) } /* $fB ADDB extended ***** */ -INLINE void addb_ex( void ) +OP_HANDLER( addb_ex ) { UINT16 t,r; EXTBYTE(t); @@ -2857,7 +2859,7 @@ INLINE void addb_ex( void ) } /* $fC LDD extended -**0- */ -INLINE void ldd_ex( void ) +OP_HANDLER( ldd_ex ) { EXTWORD(pD); CLR_NZV; @@ -2865,7 +2867,7 @@ INLINE void ldd_ex( void ) } /* $fD STD extended -**0- */ -INLINE void std_ex( void ) +OP_HANDLER( std_ex ) { CLR_NZV; SET_NZ16(D); @@ -2874,7 +2876,7 @@ INLINE void std_ex( void ) } /* $fE LDU (LDS) extended -**0- */ -INLINE void ldu_ex( void ) +OP_HANDLER( ldu_ex ) { EXTWORD(pU); CLR_NZV; @@ -2882,16 +2884,16 @@ INLINE void ldu_ex( void ) } /* $10fE LDS extended -**0- */ -INLINE void lds_ex( void ) +OP_HANDLER( lds_ex ) { EXTWORD(pS); CLR_NZV; SET_NZ16(S); - m6809.int_state |= M6809_LDS; + m68_state->int_state |= M6809_LDS; } /* $fF STU (STS) extended -**0- */ -INLINE void stu_ex( void ) +OP_HANDLER( stu_ex ) { CLR_NZV; SET_NZ16(U); @@ -2900,7 +2902,7 @@ INLINE void stu_ex( void ) } /* $10fF STS extended -**0- */ -INLINE void sts_ex( void ) +OP_HANDLER( sts_ex ) { CLR_NZV; SET_NZ16(S); @@ -2909,88 +2911,88 @@ INLINE void sts_ex( void ) } /* $10xx opcodes */ -INLINE void pref10( void ) +OP_HANDLER( pref10 ) { UINT8 ireg2 = ROP(PCD); PC++; switch( ireg2 ) { - case 0x21: lbrn(); m6809_ICount-=5; break; - case 0x22: lbhi(); m6809_ICount-=5; break; - case 0x23: lbls(); m6809_ICount-=5; break; - case 0x24: lbcc(); m6809_ICount-=5; break; - case 0x25: lbcs(); m6809_ICount-=5; break; - case 0x26: lbne(); m6809_ICount-=5; break; - case 0x27: lbeq(); m6809_ICount-=5; break; - case 0x28: lbvc(); m6809_ICount-=5; break; - case 0x29: lbvs(); m6809_ICount-=5; break; - case 0x2a: lbpl(); m6809_ICount-=5; break; - case 0x2b: lbmi(); m6809_ICount-=5; break; - case 0x2c: lbge(); m6809_ICount-=5; break; - case 0x2d: lblt(); m6809_ICount-=5; break; - case 0x2e: lbgt(); m6809_ICount-=5; break; - case 0x2f: lble(); m6809_ICount-=5; break; + case 0x21: lbrn(m68_state); m68_icount-=5; break; + case 0x22: lbhi(m68_state); m68_icount-=5; break; + case 0x23: lbls(m68_state); m68_icount-=5; break; + case 0x24: lbcc(m68_state); m68_icount-=5; break; + case 0x25: lbcs(m68_state); m68_icount-=5; break; + case 0x26: lbne(m68_state); m68_icount-=5; break; + case 0x27: lbeq(m68_state); m68_icount-=5; break; + case 0x28: lbvc(m68_state); m68_icount-=5; break; + case 0x29: lbvs(m68_state); m68_icount-=5; break; + case 0x2a: lbpl(m68_state); m68_icount-=5; break; + case 0x2b: lbmi(m68_state); m68_icount-=5; break; + case 0x2c: lbge(m68_state); m68_icount-=5; break; + case 0x2d: lblt(m68_state); m68_icount-=5; break; + case 0x2e: lbgt(m68_state); m68_icount-=5; break; + case 0x2f: lble(m68_state); m68_icount-=5; break; - case 0x3f: swi2(); m6809_ICount-=20; break; + case 0x3f: swi2(m68_state); m68_icount-=20; break; - case 0x83: cmpd_im(); m6809_ICount-=5; break; - case 0x8c: cmpy_im(); m6809_ICount-=5; break; - case 0x8e: ldy_im(); m6809_ICount-=4; break; - case 0x8f: sty_im(); m6809_ICount-=4; break; + case 0x83: cmpd_im(m68_state); m68_icount-=5; break; + case 0x8c: cmpy_im(m68_state); m68_icount-=5; break; + case 0x8e: ldy_im(m68_state); m68_icount-=4; break; + case 0x8f: sty_im(m68_state); m68_icount-=4; break; - case 0x93: cmpd_di(); m6809_ICount-=7; break; - case 0x9c: cmpy_di(); m6809_ICount-=7; break; - case 0x9e: ldy_di(); m6809_ICount-=6; break; - case 0x9f: sty_di(); m6809_ICount-=6; break; + case 0x93: cmpd_di(m68_state); m68_icount-=7; break; + case 0x9c: cmpy_di(m68_state); m68_icount-=7; break; + case 0x9e: ldy_di(m68_state); m68_icount-=6; break; + case 0x9f: sty_di(m68_state); m68_icount-=6; break; - case 0xa3: cmpd_ix(); m6809_ICount-=7; break; - case 0xac: cmpy_ix(); m6809_ICount-=7; break; - case 0xae: ldy_ix(); m6809_ICount-=6; break; - case 0xaf: sty_ix(); m6809_ICount-=6; break; + case 0xa3: cmpd_ix(m68_state); m68_icount-=7; break; + case 0xac: cmpy_ix(m68_state); m68_icount-=7; break; + case 0xae: ldy_ix(m68_state); m68_icount-=6; break; + case 0xaf: sty_ix(m68_state); m68_icount-=6; break; - case 0xb3: cmpd_ex(); m6809_ICount-=8; break; - case 0xbc: cmpy_ex(); m6809_ICount-=8; break; - case 0xbe: ldy_ex(); m6809_ICount-=7; break; - case 0xbf: sty_ex(); m6809_ICount-=7; break; + case 0xb3: cmpd_ex(m68_state); m68_icount-=8; break; + case 0xbc: cmpy_ex(m68_state); m68_icount-=8; break; + case 0xbe: ldy_ex(m68_state); m68_icount-=7; break; + case 0xbf: sty_ex(m68_state); m68_icount-=7; break; - case 0xce: lds_im(); m6809_ICount-=4; break; - case 0xcf: sts_im(); m6809_ICount-=4; break; + case 0xce: lds_im(m68_state); m68_icount-=4; break; + case 0xcf: sts_im(m68_state); m68_icount-=4; break; - case 0xde: lds_di(); m6809_ICount-=6; break; - case 0xdf: sts_di(); m6809_ICount-=6; break; + case 0xde: lds_di(m68_state); m68_icount-=6; break; + case 0xdf: sts_di(m68_state); m68_icount-=6; break; - case 0xee: lds_ix(); m6809_ICount-=6; break; - case 0xef: sts_ix(); m6809_ICount-=6; break; + case 0xee: lds_ix(m68_state); m68_icount-=6; break; + case 0xef: sts_ix(m68_state); m68_icount-=6; break; - case 0xfe: lds_ex(); m6809_ICount-=7; break; - case 0xff: sts_ex(); m6809_ICount-=7; break; + case 0xfe: lds_ex(m68_state); m68_icount-=7; break; + case 0xff: sts_ex(m68_state); m68_icount-=7; break; - default: illegal(); break; + default: illegal(m68_state); break; } } /* $11xx opcodes */ -INLINE void pref11( void ) +OP_HANDLER( pref11 ) { UINT8 ireg2 = ROP(PCD); PC++; switch( ireg2 ) { - case 0x3f: swi3(); m6809_ICount-=20; break; + case 0x3f: swi3(m68_state); m68_icount-=20; break; - case 0x83: cmpu_im(); m6809_ICount-=5; break; - case 0x8c: cmps_im(); m6809_ICount-=5; break; + case 0x83: cmpu_im(m68_state); m68_icount-=5; break; + case 0x8c: cmps_im(m68_state); m68_icount-=5; break; - case 0x93: cmpu_di(); m6809_ICount-=7; break; - case 0x9c: cmps_di(); m6809_ICount-=7; break; + case 0x93: cmpu_di(m68_state); m68_icount-=7; break; + case 0x9c: cmps_di(m68_state); m68_icount-=7; break; - case 0xa3: cmpu_ix(); m6809_ICount-=7; break; - case 0xac: cmps_ix(); m6809_ICount-=7; break; + case 0xa3: cmpu_ix(m68_state); m68_icount-=7; break; + case 0xac: cmps_ix(m68_state); m68_icount-=7; break; - case 0xb3: cmpu_ex(); m6809_ICount-=8; break; - case 0xbc: cmps_ex(); m6809_ICount-=8; break; + case 0xb3: cmpu_ex(m68_state); m68_icount-=8; break; + case 0xbc: cmps_ex(m68_state); m68_icount-=8; break; - default: illegal(); break; + default: illegal(m68_state); break; } } diff --git a/src/emu/cpu/m6809/6809tbl.c b/src/emu/cpu/m6809/6809tbl.c index b0b6bcd3660..acf1efd97e2 100644 --- a/src/emu/cpu/m6809/6809tbl.c +++ b/src/emu/cpu/m6809/6809tbl.c @@ -1,316 +1,416 @@ -INLINE void abx(void); -INLINE void adca_di(void); -INLINE void adca_ex(void); -INLINE void adca_im(void); -INLINE void adca_ix(void); -INLINE void adcb_di(void); -INLINE void adcb_ex(void); -INLINE void adcb_im(void); -INLINE void adcb_ix(void); -INLINE void adda_di(void); -INLINE void adda_ex(void); -INLINE void adda_im(void); -INLINE void adda_ix(void); -INLINE void addb_di(void); -INLINE void addb_ex(void); -INLINE void addb_im(void); -INLINE void addb_ix(void); -INLINE void addd_di(void); -INLINE void addd_ex(void); -INLINE void addd_im(void); -INLINE void addd_ix(void); -INLINE void anda_di(void); -INLINE void anda_ex(void); -INLINE void anda_im(void); -INLINE void anda_ix(void); -INLINE void andb_di(void); -INLINE void andb_ex(void); -INLINE void andb_im(void); -INLINE void andb_ix(void); -INLINE void andcc(void); -INLINE void asl_di(void); -INLINE void asl_ex(void); -INLINE void asl_ix(void); -INLINE void asla(void); -INLINE void aslb(void); -INLINE void asr_di(void); -INLINE void asr_ex(void); -INLINE void asr_ix(void); -INLINE void asra(void); -INLINE void asrb(void); -INLINE void bcc(void); -INLINE void bcs(void); -INLINE void beq(void); -INLINE void bge(void); -INLINE void bgt(void); -INLINE void bhi(void); -INLINE void bita_di(void); -INLINE void bita_ex(void); -INLINE void bita_im(void); -INLINE void bita_ix(void); -INLINE void bitb_di(void); -INLINE void bitb_ex(void); -INLINE void bitb_im(void); -INLINE void bitb_ix(void); -INLINE void ble(void); -INLINE void bls(void); -INLINE void blt(void); -INLINE void bmi(void); -INLINE void bne(void); -INLINE void bpl(void); -INLINE void bra(void); -INLINE void brn(void); -INLINE void bsr(void); -INLINE void bvc(void); -INLINE void bvs(void); -INLINE void clr_di(void); -INLINE void clr_ex(void); -INLINE void clr_ix(void); -INLINE void clra(void); -INLINE void clrb(void); -INLINE void cmpa_di(void); -INLINE void cmpa_ex(void); -INLINE void cmpa_im(void); -INLINE void cmpa_ix(void); -INLINE void cmpb_di(void); -INLINE void cmpb_ex(void); -INLINE void cmpb_im(void); -INLINE void cmpb_ix(void); -INLINE void cmpd_di(void); -INLINE void cmpd_ex(void); -INLINE void cmpd_im(void); -INLINE void cmpd_ix(void); -INLINE void cmps_di(void); -INLINE void cmps_ex(void); -INLINE void cmps_im(void); -INLINE void cmps_ix(void); -INLINE void cmpu_di(void); -INLINE void cmpu_ex(void); -INLINE void cmpu_im(void); -INLINE void cmpu_ix(void); -INLINE void cmpx_di(void); -INLINE void cmpx_ex(void); -INLINE void cmpx_im(void); -INLINE void cmpx_ix(void); -INLINE void cmpy_di(void); -INLINE void cmpy_ex(void); -INLINE void cmpy_im(void); -INLINE void cmpy_ix(void); -INLINE void com_di(void); -INLINE void com_ex(void); -INLINE void com_ix(void); -INLINE void coma(void); -INLINE void comb(void); -INLINE void cwai(void); -INLINE void daa(void); -INLINE void dec_di(void); -INLINE void dec_ex(void); -INLINE void dec_ix(void); -INLINE void deca(void); -INLINE void decb(void); -INLINE void eora_di(void); -INLINE void eora_ex(void); -INLINE void eora_im(void); -INLINE void eora_ix(void); -INLINE void eorb_di(void); -INLINE void eorb_ex(void); -INLINE void eorb_im(void); -INLINE void eorb_ix(void); -INLINE void exg(void); -INLINE void illegal(void); -INLINE void inc_di(void); -INLINE void inc_ex(void); -INLINE void inc_ix(void); -INLINE void inca(void); -INLINE void incb(void); -INLINE void jmp_di(void); -INLINE void jmp_ex(void); -INLINE void jmp_ix(void); -INLINE void jsr_di(void); -INLINE void jsr_ex(void); -INLINE void jsr_ix(void); -INLINE void lbcc(void); -INLINE void lbcs(void); -INLINE void lbeq(void); -INLINE void lbge(void); -INLINE void lbgt(void); -INLINE void lbhi(void); -INLINE void lble(void); -INLINE void lbls(void); -INLINE void lblt(void); -INLINE void lbmi(void); -INLINE void lbne(void); -INLINE void lbpl(void); -INLINE void lbra(void); -INLINE void lbrn(void); -INLINE void lbsr(void); -INLINE void lbvc(void); -INLINE void lbvs(void); -INLINE void lda_di(void); -INLINE void lda_ex(void); -INLINE void lda_im(void); -INLINE void lda_ix(void); -INLINE void ldb_di(void); -INLINE void ldb_ex(void); -INLINE void ldb_im(void); -INLINE void ldb_ix(void); -INLINE void ldd_di(void); -INLINE void ldd_ex(void); -INLINE void ldd_im(void); -INLINE void ldd_ix(void); -INLINE void lds_di(void); -INLINE void lds_ex(void); -INLINE void lds_im(void); -INLINE void lds_ix(void); -INLINE void ldu_di(void); -INLINE void ldu_ex(void); -INLINE void ldu_im(void); -INLINE void ldu_ix(void); -INLINE void ldx_di(void); -INLINE void ldx_ex(void); -INLINE void ldx_im(void); -INLINE void ldx_ix(void); -INLINE void ldy_di(void); -INLINE void ldy_ex(void); -INLINE void ldy_im(void); -INLINE void ldy_ix(void); -INLINE void leas(void); -INLINE void leau(void); -INLINE void leax(void); -INLINE void leay(void); -INLINE void lsr_di(void); -INLINE void lsr_ex(void); -INLINE void lsr_ix(void); -INLINE void lsra(void); -INLINE void lsrb(void); -INLINE void mul(void); -INLINE void neg_di(void); -INLINE void neg_ex(void); -INLINE void neg_ix(void); -INLINE void nega(void); -INLINE void negb(void); -INLINE void nop(void); -INLINE void ora_di(void); -INLINE void ora_ex(void); -INLINE void ora_im(void); -INLINE void ora_ix(void); -INLINE void orb_di(void); -INLINE void orb_ex(void); -INLINE void orb_im(void); -INLINE void orb_ix(void); -INLINE void orcc(void); -INLINE void pshs(void); -INLINE void pshu(void); -INLINE void puls(void); -INLINE void pulu(void); -INLINE void rol_di(void); -INLINE void rol_ex(void); -INLINE void rol_ix(void); -INLINE void rola(void); -INLINE void rolb(void); -INLINE void ror_di(void); -INLINE void ror_ex(void); -INLINE void ror_ix(void); -INLINE void rora(void); -INLINE void rorb(void); -INLINE void rti(void); -INLINE void rts(void); -INLINE void sbca_di(void); -INLINE void sbca_ex(void); -INLINE void sbca_im(void); -INLINE void sbca_ix(void); -INLINE void sbcb_di(void); -INLINE void sbcb_ex(void); -INLINE void sbcb_im(void); -INLINE void sbcb_ix(void); -INLINE void sex(void); -INLINE void sta_di(void); -INLINE void sta_ex(void); -INLINE void sta_im(void); -INLINE void sta_ix(void); -INLINE void stb_di(void); -INLINE void stb_ex(void); -INLINE void stb_im(void); -INLINE void stb_ix(void); -INLINE void std_di(void); -INLINE void std_ex(void); -INLINE void std_im(void); -INLINE void std_ix(void); -INLINE void sts_di(void); -INLINE void sts_ex(void); -INLINE void sts_im(void); -INLINE void sts_ix(void); -INLINE void stu_di(void); -INLINE void stu_ex(void); -INLINE void stu_im(void); -INLINE void stu_ix(void); -INLINE void stx_di(void); -INLINE void stx_ex(void); -INLINE void stx_im(void); -INLINE void stx_ix(void); -INLINE void sty_di(void); -INLINE void sty_ex(void); -INLINE void sty_im(void); -INLINE void sty_ix(void); -INLINE void suba_di(void); -INLINE void suba_ex(void); -INLINE void suba_im(void); -INLINE void suba_ix(void); -INLINE void subb_di(void); -INLINE void subb_ex(void); -INLINE void subb_im(void); -INLINE void subb_ix(void); -INLINE void subd_di(void); -INLINE void subd_ex(void); -INLINE void subd_im(void); -INLINE void subd_ix(void); -INLINE void swi(void); -INLINE void swi2(void); -INLINE void swi3(void); -INLINE void sync(void); -INLINE void tfr(void); -INLINE void tst_di(void); -INLINE void tst_ex(void); -INLINE void tst_ix(void); -INLINE void tsta(void); -INLINE void tstb(void); +INLINE void abx(m68_state_t *m68_state); +INLINE void adca_di(m68_state_t *m68_state); +INLINE void adca_ex(m68_state_t *m68_state); +INLINE void adca_im(m68_state_t *m68_state); +INLINE void adca_ix(m68_state_t *m68_state); +INLINE void adcb_di(m68_state_t *m68_state); +INLINE void adcb_ex(m68_state_t *m68_state); +INLINE void adcb_im(m68_state_t *m68_state); +INLINE void adcb_ix(m68_state_t *m68_state); +INLINE void adda_di(m68_state_t *m68_state); +INLINE void adda_ex(m68_state_t *m68_state); +INLINE void adda_im(m68_state_t *m68_state); +INLINE void adda_ix(m68_state_t *m68_state); +INLINE void addb_di(m68_state_t *m68_state); +INLINE void addb_ex(m68_state_t *m68_state); +INLINE void addb_im(m68_state_t *m68_state); +INLINE void addb_ix(m68_state_t *m68_state); +INLINE void addd_di(m68_state_t *m68_state); +INLINE void addd_ex(m68_state_t *m68_state); +INLINE void addd_im(m68_state_t *m68_state); +INLINE void addd_ix(m68_state_t *m68_state); +INLINE void anda_di(m68_state_t *m68_state); +INLINE void anda_ex(m68_state_t *m68_state); +INLINE void anda_im(m68_state_t *m68_state); +INLINE void anda_ix(m68_state_t *m68_state); +INLINE void andb_di(m68_state_t *m68_state); +INLINE void andb_ex(m68_state_t *m68_state); +INLINE void andb_im(m68_state_t *m68_state); +INLINE void andb_ix(m68_state_t *m68_state); +INLINE void andcc(m68_state_t *m68_state); +INLINE void asla(m68_state_t *m68_state); +INLINE void aslb(m68_state_t *m68_state); +INLINE void asl_di(m68_state_t *m68_state); +INLINE void asl_ex(m68_state_t *m68_state); +INLINE void asl_ix(m68_state_t *m68_state); +INLINE void asra(m68_state_t *m68_state); +INLINE void asrb(m68_state_t *m68_state); +INLINE void asr_di(m68_state_t *m68_state); +INLINE void asr_ex(m68_state_t *m68_state); +INLINE void asr_ix(m68_state_t *m68_state); +INLINE void bcc(m68_state_t *m68_state); +INLINE void bcs(m68_state_t *m68_state); +INLINE void beq(m68_state_t *m68_state); +INLINE void bge(m68_state_t *m68_state); +INLINE void bgt(m68_state_t *m68_state); +INLINE void bhi(m68_state_t *m68_state); +INLINE void bita_di(m68_state_t *m68_state); +INLINE void bita_ex(m68_state_t *m68_state); +INLINE void bita_im(m68_state_t *m68_state); +INLINE void bita_ix(m68_state_t *m68_state); +INLINE void bitb_di(m68_state_t *m68_state); +INLINE void bitb_ex(m68_state_t *m68_state); +INLINE void bitb_im(m68_state_t *m68_state); +INLINE void bitb_ix(m68_state_t *m68_state); +INLINE void ble(m68_state_t *m68_state); +INLINE void bls(m68_state_t *m68_state); +INLINE void blt(m68_state_t *m68_state); +INLINE void bmi(m68_state_t *m68_state); +INLINE void bne(m68_state_t *m68_state); +INLINE void bpl(m68_state_t *m68_state); +INLINE void bra(m68_state_t *m68_state); +INLINE void brn(m68_state_t *m68_state); +INLINE void bsr(m68_state_t *m68_state); +INLINE void bvc(m68_state_t *m68_state); +INLINE void bvs(m68_state_t *m68_state); +INLINE void clra(m68_state_t *m68_state); +INLINE void clrb(m68_state_t *m68_state); +INLINE void clr_di(m68_state_t *m68_state); +INLINE void clr_ex(m68_state_t *m68_state); +INLINE void clr_ix(m68_state_t *m68_state); +INLINE void cmpa_di(m68_state_t *m68_state); +INLINE void cmpa_ex(m68_state_t *m68_state); +INLINE void cmpa_im(m68_state_t *m68_state); +INLINE void cmpa_ix(m68_state_t *m68_state); +INLINE void cmpb_di(m68_state_t *m68_state); +INLINE void cmpb_ex(m68_state_t *m68_state); +INLINE void cmpb_im(m68_state_t *m68_state); +INLINE void cmpb_ix(m68_state_t *m68_state); +INLINE void cmpd_di(m68_state_t *m68_state); +INLINE void cmpd_ex(m68_state_t *m68_state); +INLINE void cmpd_im(m68_state_t *m68_state); +INLINE void cmpd_ix(m68_state_t *m68_state); +INLINE void cmps_di(m68_state_t *m68_state); +INLINE void cmps_ex(m68_state_t *m68_state); +INLINE void cmps_im(m68_state_t *m68_state); +INLINE void cmps_ix(m68_state_t *m68_state); +INLINE void cmpu_di(m68_state_t *m68_state); +INLINE void cmpu_ex(m68_state_t *m68_state); +INLINE void cmpu_im(m68_state_t *m68_state); +INLINE void cmpu_ix(m68_state_t *m68_state); +INLINE void cmpx_di(m68_state_t *m68_state); +INLINE void cmpx_ex(m68_state_t *m68_state); +INLINE void cmpx_im(m68_state_t *m68_state); +INLINE void cmpx_ix(m68_state_t *m68_state); +INLINE void cmpy_di(m68_state_t *m68_state); +INLINE void cmpy_ex(m68_state_t *m68_state); +INLINE void cmpy_im(m68_state_t *m68_state); +INLINE void cmpy_ix(m68_state_t *m68_state); +INLINE void coma(m68_state_t *m68_state); +INLINE void comb(m68_state_t *m68_state); +INLINE void com_di(m68_state_t *m68_state); +INLINE void com_ex(m68_state_t *m68_state); +INLINE void com_ix(m68_state_t *m68_state); +INLINE void cwai(m68_state_t *m68_state); +INLINE void daa(m68_state_t *m68_state); +INLINE void deca(m68_state_t *m68_state); +INLINE void decb(m68_state_t *m68_state); +INLINE void dec_di(m68_state_t *m68_state); +INLINE void dec_ex(m68_state_t *m68_state); +INLINE void dec_ix(m68_state_t *m68_state); +INLINE void eora_di(m68_state_t *m68_state); +INLINE void eora_ex(m68_state_t *m68_state); +INLINE void eora_im(m68_state_t *m68_state); +INLINE void eora_ix(m68_state_t *m68_state); +INLINE void eorb_di(m68_state_t *m68_state); +INLINE void eorb_ex(m68_state_t *m68_state); +INLINE void eorb_im(m68_state_t *m68_state); +INLINE void eorb_ix(m68_state_t *m68_state); +INLINE void exg(m68_state_t *m68_state); +INLINE void illegal(m68_state_t *m68_state); +INLINE void inca(m68_state_t *m68_state); +INLINE void incb(m68_state_t *m68_state); +INLINE void inc_di(m68_state_t *m68_state); +INLINE void inc_ex(m68_state_t *m68_state); +INLINE void inc_ix(m68_state_t *m68_state); +INLINE void jmp_di(m68_state_t *m68_state); +INLINE void jmp_ex(m68_state_t *m68_state); +INLINE void jmp_ix(m68_state_t *m68_state); +INLINE void jsr_di(m68_state_t *m68_state); +INLINE void jsr_ex(m68_state_t *m68_state); +INLINE void jsr_ix(m68_state_t *m68_state); +INLINE void lbcc(m68_state_t *m68_state); +INLINE void lbcs(m68_state_t *m68_state); +INLINE void lbeq(m68_state_t *m68_state); +INLINE void lbge(m68_state_t *m68_state); +INLINE void lbgt(m68_state_t *m68_state); +INLINE void lbhi(m68_state_t *m68_state); +INLINE void lble(m68_state_t *m68_state); +INLINE void lbls(m68_state_t *m68_state); +INLINE void lblt(m68_state_t *m68_state); +INLINE void lbmi(m68_state_t *m68_state); +INLINE void lbne(m68_state_t *m68_state); +INLINE void lbpl(m68_state_t *m68_state); +INLINE void lbra(m68_state_t *m68_state); +INLINE void lbrn(m68_state_t *m68_state); +INLINE void lbsr(m68_state_t *m68_state); +INLINE void lbvc(m68_state_t *m68_state); +INLINE void lbvs(m68_state_t *m68_state); +INLINE void lda_di(m68_state_t *m68_state); +INLINE void lda_ex(m68_state_t *m68_state); +INLINE void lda_im(m68_state_t *m68_state); +INLINE void lda_ix(m68_state_t *m68_state); +INLINE void ldb_di(m68_state_t *m68_state); +INLINE void ldb_ex(m68_state_t *m68_state); +INLINE void ldb_im(m68_state_t *m68_state); +INLINE void ldb_ix(m68_state_t *m68_state); +INLINE void ldd_di(m68_state_t *m68_state); +INLINE void ldd_ex(m68_state_t *m68_state); +INLINE void ldd_im(m68_state_t *m68_state); +INLINE void ldd_ix(m68_state_t *m68_state); +INLINE void lds_di(m68_state_t *m68_state); +INLINE void lds_ex(m68_state_t *m68_state); +INLINE void lds_im(m68_state_t *m68_state); +INLINE void lds_ix(m68_state_t *m68_state); +INLINE void ldu_di(m68_state_t *m68_state); +INLINE void ldu_ex(m68_state_t *m68_state); +INLINE void ldu_im(m68_state_t *m68_state); +INLINE void ldu_ix(m68_state_t *m68_state); +INLINE void ldx_di(m68_state_t *m68_state); +INLINE void ldx_ex(m68_state_t *m68_state); +INLINE void ldx_im(m68_state_t *m68_state); +INLINE void ldx_ix(m68_state_t *m68_state); +INLINE void ldy_di(m68_state_t *m68_state); +INLINE void ldy_ex(m68_state_t *m68_state); +INLINE void ldy_im(m68_state_t *m68_state); +INLINE void ldy_ix(m68_state_t *m68_state); +INLINE void leas(m68_state_t *m68_state); +INLINE void leau(m68_state_t *m68_state); +INLINE void leax(m68_state_t *m68_state); +INLINE void leay(m68_state_t *m68_state); +INLINE void lsra(m68_state_t *m68_state); +INLINE void lsrb(m68_state_t *m68_state); +INLINE void lsr_di(m68_state_t *m68_state); +INLINE void lsr_ex(m68_state_t *m68_state); +INLINE void lsr_ix(m68_state_t *m68_state); +INLINE void mul(m68_state_t *m68_state); +INLINE void nega(m68_state_t *m68_state); +INLINE void negb(m68_state_t *m68_state); +INLINE void neg_di(m68_state_t *m68_state); +INLINE void neg_ex(m68_state_t *m68_state); +INLINE void neg_ix(m68_state_t *m68_state); +INLINE void nop(m68_state_t *m68_state); +INLINE void ora_di(m68_state_t *m68_state); +INLINE void ora_ex(m68_state_t *m68_state); +INLINE void ora_im(m68_state_t *m68_state); +INLINE void ora_ix(m68_state_t *m68_state); +INLINE void orb_di(m68_state_t *m68_state); +INLINE void orb_ex(m68_state_t *m68_state); +INLINE void orb_im(m68_state_t *m68_state); +INLINE void orb_ix(m68_state_t *m68_state); +INLINE void orcc(m68_state_t *m68_state); +INLINE void pref10(m68_state_t *m68_state); +INLINE void pref11(m68_state_t *m68_state); +INLINE void pshs(m68_state_t *m68_state); +INLINE void pshu(m68_state_t *m68_state); +INLINE void puls(m68_state_t *m68_state); +INLINE void pulu(m68_state_t *m68_state); +INLINE void rola(m68_state_t *m68_state); +INLINE void rolb(m68_state_t *m68_state); +INLINE void rol_di(m68_state_t *m68_state); +INLINE void rol_ex(m68_state_t *m68_state); +INLINE void rol_ix(m68_state_t *m68_state); +INLINE void rora(m68_state_t *m68_state); +INLINE void rorb(m68_state_t *m68_state); +INLINE void ror_di(m68_state_t *m68_state); +INLINE void ror_ex(m68_state_t *m68_state); +INLINE void ror_ix(m68_state_t *m68_state); +INLINE void rti(m68_state_t *m68_state); +INLINE void rts(m68_state_t *m68_state); +INLINE void sbca_di(m68_state_t *m68_state); +INLINE void sbca_ex(m68_state_t *m68_state); +INLINE void sbca_im(m68_state_t *m68_state); +INLINE void sbca_ix(m68_state_t *m68_state); +INLINE void sbcb_di(m68_state_t *m68_state); +INLINE void sbcb_ex(m68_state_t *m68_state); +INLINE void sbcb_im(m68_state_t *m68_state); +INLINE void sbcb_ix(m68_state_t *m68_state); +INLINE void sex(m68_state_t *m68_state); +INLINE void sta_di(m68_state_t *m68_state); +INLINE void sta_ex(m68_state_t *m68_state); +INLINE void sta_im(m68_state_t *m68_state); +INLINE void sta_ix(m68_state_t *m68_state); +INLINE void stb_di(m68_state_t *m68_state); +INLINE void stb_ex(m68_state_t *m68_state); +INLINE void stb_im(m68_state_t *m68_state); +INLINE void stb_ix(m68_state_t *m68_state); +INLINE void std_di(m68_state_t *m68_state); +INLINE void std_ex(m68_state_t *m68_state); +INLINE void std_im(m68_state_t *m68_state); +INLINE void std_ix(m68_state_t *m68_state); +INLINE void sts_di(m68_state_t *m68_state); +INLINE void sts_ex(m68_state_t *m68_state); +INLINE void sts_im(m68_state_t *m68_state); +INLINE void sts_ix(m68_state_t *m68_state); +INLINE void stu_di(m68_state_t *m68_state); +INLINE void stu_ex(m68_state_t *m68_state); +INLINE void stu_im(m68_state_t *m68_state); +INLINE void stu_ix(m68_state_t *m68_state); +INLINE void stx_di(m68_state_t *m68_state); +INLINE void stx_ex(m68_state_t *m68_state); +INLINE void stx_im(m68_state_t *m68_state); +INLINE void stx_ix(m68_state_t *m68_state); +INLINE void sty_di(m68_state_t *m68_state); +INLINE void sty_ex(m68_state_t *m68_state); +INLINE void sty_im(m68_state_t *m68_state); +INLINE void sty_ix(m68_state_t *m68_state); +INLINE void suba_di(m68_state_t *m68_state); +INLINE void suba_ex(m68_state_t *m68_state); +INLINE void suba_im(m68_state_t *m68_state); +INLINE void suba_ix(m68_state_t *m68_state); +INLINE void subb_di(m68_state_t *m68_state); +INLINE void subb_ex(m68_state_t *m68_state); +INLINE void subb_im(m68_state_t *m68_state); +INLINE void subb_ix(m68_state_t *m68_state); +INLINE void subd_di(m68_state_t *m68_state); +INLINE void subd_ex(m68_state_t *m68_state); +INLINE void subd_im(m68_state_t *m68_state); +INLINE void subd_ix(m68_state_t *m68_state); +INLINE void swi2(m68_state_t *m68_state); +INLINE void swi3(m68_state_t *m68_state); +INLINE void swi(m68_state_t *m68_state); +INLINE void sync(m68_state_t *m68_state); +INLINE void tfr(m68_state_t *m68_state); +INLINE void tsta(m68_state_t *m68_state); +INLINE void tstb(m68_state_t *m68_state); +INLINE void tst_di(m68_state_t *m68_state); +INLINE void tst_ex(m68_state_t *m68_state); +INLINE void tst_ix(m68_state_t *m68_state); -INLINE void pref10(void); -INLINE void pref11(void); +static const UINT8 flags8i[256]= /* increment */ +{ +CC_Z,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +CC_N|CC_V,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N +}; +static const UINT8 flags8d[256]= /* decrement */ +{ +CC_Z,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,CC_V, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, +CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N +}; + +/* FIXME: Cycles differ slighly from hd6309 emulation */ +static const UINT8 index_cycle_em[256] = { /* Index Loopup cycle counts */ +/* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ + +/* 0x0X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x1X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x2X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x3X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x4X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x5X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x6X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x7X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 0x8X */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 5, +/* 0x9X */ 5, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8, +/* 0xAX */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 5, +/* 0xBX */ 5, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8, +/* 0xCX */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 3, +/* 0xDX */ 5, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8, +/* 0xEX */ 2, 3, 2, 3, 0, 1, 1, 0, 1, 4, 0, 4, 1, 5, 0, 5, +/* 0xFX */ 4, 6, 5, 6, 3, 4, 4, 0, 4, 7, 0, 7, 4, 8, 0, 8 +}; + +/* timings for 1-byte opcodes */ +static const UINT8 cycles1[] = +{ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + /*0*/ 6, 6, 2, 6, 6, 2, 6, 6, 6, 6, 6, 2, 6, 6, 3, 6, + /*1*/ 0, 0, 2, 4, 2, 2, 5, 9, 2, 2, 3, 2, 3, 2, 8, 6, + /*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + /*3*/ 4, 4, 4, 4, 5, 5, 5, 5, 2, 5, 3, 6,20,11, 2,19, + /*4*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /*5*/ 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /*6*/ 6, 2, 2, 6, 6, 2, 6, 6, 6, 6, 6, 2, 6, 6, 3, 6, + /*7*/ 7, 2, 2, 7, 7, 2, 7, 7, 7, 7, 7, 2, 7, 7, 4, 7, + /*8*/ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 3, 2, + /*9*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, + /*A*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, + /*B*/ 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 7, 8, 6, 6, + /*C*/ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, + /*D*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, + /*E*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, + /*F*/ 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 +}; #if (BIG_SWITCH==0) -static void (*const m6809_main[0x100])(void) = { - neg_di, neg_di, illegal,com_di, lsr_di, illegal,ror_di, asr_di, /* 00 */ - asl_di, rol_di, dec_di, illegal,inc_di, tst_di, jmp_di, clr_di, - pref10, pref11, nop, sync, illegal,illegal,lbra, lbsr, /* 10 */ - illegal,daa, orcc, illegal,andcc, sex, exg, tfr, - bra, brn, bhi, bls, bcc, bcs, bne, beq, /* 20 */ - bvc, bvs, bpl, bmi, bge, blt, bgt, ble, - leax, leay, leas, leau, pshs, puls, pshu, pulu, /* 30 */ - illegal,rts, abx, rti, cwai, mul, illegal,swi, - nega, illegal,illegal,coma, lsra, illegal,rora, asra, /* 40 */ - asla, rola, deca, illegal,inca, tsta, illegal,clra, - negb, illegal,illegal,comb, lsrb, illegal,rorb, asrb, /* 50 */ - aslb, rolb, decb, illegal,incb, tstb, illegal,clrb, - neg_ix, illegal,illegal,com_ix, lsr_ix, illegal,ror_ix, asr_ix, /* 60 */ - asl_ix, rol_ix, dec_ix, illegal,inc_ix, tst_ix, jmp_ix, clr_ix, - neg_ex, illegal,illegal,com_ex, lsr_ex, illegal,ror_ex, asr_ex, /* 70 */ - asl_ex, rol_ex, dec_ex, illegal,inc_ex, tst_ex, jmp_ex, clr_ex, - suba_im,cmpa_im,sbca_im,subd_im,anda_im,bita_im,lda_im, sta_im, /* 80 */ - eora_im,adca_im,ora_im, adda_im,cmpx_im,bsr, ldx_im, stx_im, - suba_di,cmpa_di,sbca_di,subd_di,anda_di,bita_di,lda_di, sta_di, /* 90 */ - eora_di,adca_di,ora_di, adda_di,cmpx_di,jsr_di, ldx_di, stx_di, - suba_ix,cmpa_ix,sbca_ix,subd_ix,anda_ix,bita_ix,lda_ix, sta_ix, /* a0 */ - eora_ix,adca_ix,ora_ix, adda_ix,cmpx_ix,jsr_ix, ldx_ix, stx_ix, - suba_ex,cmpa_ex,sbca_ex,subd_ex,anda_ex,bita_ex,lda_ex, sta_ex, /* b0 */ - eora_ex,adca_ex,ora_ex, adda_ex,cmpx_ex,jsr_ex, ldx_ex, stx_ex, - subb_im,cmpb_im,sbcb_im,addd_im,andb_im,bitb_im,ldb_im, stb_im, /* c0 */ - eorb_im,adcb_im,orb_im, addb_im,ldd_im, std_im, ldu_im, stu_im, - subb_di,cmpb_di,sbcb_di,addd_di,andb_di,bitb_di,ldb_di, stb_di, /* d0 */ - eorb_di,adcb_di,orb_di, addb_di,ldd_di, std_di, ldu_di, stu_di, - subb_ix,cmpb_ix,sbcb_ix,addd_ix,andb_ix,bitb_ix,ldb_ix, stb_ix, /* e0 */ - eorb_ix,adcb_ix,orb_ix, addb_ix,ldd_ix, std_ix, ldu_ix, stu_ix, - subb_ex,cmpb_ex,sbcb_ex,addd_ex,andb_ex,bitb_ex,ldb_ex, stb_ex, /* f0 */ - eorb_ex,adcb_ex,orb_ex, addb_ex,ldd_ex, std_ex, ldu_ex, stu_ex +static void (*const m6809_main[0x100])(m68_state_t *) = { +/* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7, + 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */ + +/* 0x0X */ neg_di, neg_di, illegal,com_di, lsr_di, illegal,ror_di, asr_di, + asl_di, rol_di, dec_di, illegal,inc_di, tst_di, jmp_di, clr_di, + +/* 0x1X */ pref10, pref11, nop, sync, illegal,illegal,lbra, lbsr, + illegal,daa, orcc, illegal,andcc, sex, exg, tfr, + +/* 0x2X */ bra, brn, bhi, bls, bcc, bcs, bne, beq, + bvc, bvs, bpl, bmi, bge, blt, bgt, ble, + +/* 0x3X */ leax, leay, leas, leau, pshs, puls, pshu, pulu, + illegal,rts, abx, rti, cwai, mul, illegal,swi, + +/* 0x4X */ nega, illegal,illegal,coma, lsra, illegal,rora, asra, + asla, rola, deca, illegal,inca, tsta, illegal,clra, + +/* 0x5X */ negb, illegal,illegal,comb, lsrb, illegal,rorb, asrb, + aslb, rolb, decb, illegal,incb, tstb, illegal,clrb, + +/* 0x6X */ neg_ix, illegal,illegal,com_ix, lsr_ix, illegal,ror_ix, asr_ix, + asl_ix, rol_ix, dec_ix, illegal,inc_ix, tst_ix, jmp_ix, clr_ix, + +/* 0x7X */ neg_ex, illegal,illegal,com_ex, lsr_ex, illegal,ror_ex, asr_ex, + asl_ex, rol_ex, dec_ex, illegal,inc_ex, tst_ex, jmp_ex, clr_ex, + +/* 0x8X */ suba_im,cmpa_im,sbca_im,subd_im,anda_im,bita_im,lda_im, sta_im, + eora_im,adca_im,ora_im, adda_im,cmpx_im,bsr, ldx_im, stx_im, + +/* 0x9X */ suba_di,cmpa_di,sbca_di,subd_di,anda_di,bita_di,lda_di, sta_di, + eora_di,adca_di,ora_di, adda_di,cmpx_di,jsr_di, ldx_di, stx_di, + +/* 0xAX */ suba_ix,cmpa_ix,sbca_ix,subd_ix,anda_ix,bita_ix,lda_ix, sta_ix, + eora_ix,adca_ix,ora_ix, adda_ix,cmpx_ix,jsr_ix, ldx_ix, stx_ix, + +/* 0xBX */ suba_ex,cmpa_ex,sbca_ex,subd_ex,anda_ex,bita_ex,lda_ex, sta_ex, + eora_ex,adca_ex,ora_ex, adda_ex,cmpx_ex,jsr_ex, ldx_ex, stx_ex, + +/* 0xCX */ subb_im,cmpb_im,sbcb_im,addd_im,andb_im,bitb_im,ldb_im, stb_im, + eorb_im,adcb_im,orb_im, addb_im,ldd_im, std_im, ldu_im, stu_im, + +/* 0xDX */ subb_di,cmpb_di,sbcb_di,addd_di,andb_di,bitb_di,ldb_di, stb_di, + eorb_di,adcb_di,orb_di, addb_di,ldd_di, std_di, ldu_di, stu_di, + +/* 0xEX */ subb_ix,cmpb_ix,sbcb_ix,addd_ix,andb_ix,bitb_ix,ldb_ix, stb_ix, + eorb_ix,adcb_ix,orb_ix, addb_ix,ldd_ix, std_ix, ldu_ix, stu_ix, + +/* 0xFX */ subb_ex,cmpb_ex,sbcb_ex,addd_ex,andb_ex,bitb_ex,ldb_ex, stb_ex, + eorb_ex,adcb_ex,orb_ex, addb_ex,ldd_ex, std_ex, ldu_ex, stu_ex }; #endif diff --git a/src/emu/cpu/m6809/m6809.c b/src/emu/cpu/m6809/m6809.c index 3f6a560b39f..51afa98f417 100644 --- a/src/emu/cpu/m6809/m6809.c +++ b/src/emu/cpu/m6809/m6809.c @@ -82,17 +82,13 @@ #define LOG(x) do { if (VERBOSE) logerror x; } while (0) -extern CPU_DISASSEMBLE( m6809 ); - - -INLINE void fetch_effective_address( void ); - /* 6809 Registers */ -typedef struct +typedef struct _m68_state_t m68_state_t; +struct _m68_state_t { PAIR pc; /* Program counter */ PAIR ppc; /* Previous program counter */ - PAIR d; /* Accumulator a and b */ + PAIR d; /* Accumulator a and b */ PAIR dp; /* Direct Page register (page in MSB) */ PAIR u, s; /* Stack pointers */ PAIR x, y; /* Index registers */ @@ -104,11 +100,11 @@ typedef struct const device_config *device; UINT8 int_state; /* SYNC and CWAI flags */ UINT8 nmi_state; -} m6809_Regs; +}; /* flag bits in the cc register */ -#define CC_C 0x01 /* Carry */ -#define CC_V 0x02 /* Overflow */ +#define CC_C 0x01 /* Carry */ +#define CC_V 0x02 /* Overflow */ #define CC_Z 0x04 /* Zero */ #define CC_N 0x08 /* Negative */ #define CC_II 0x10 /* Inhibit IRQ */ @@ -116,34 +112,31 @@ typedef struct #define CC_IF 0x40 /* Inhibit FIRQ */ #define CC_E 0x80 /* entire state pushed */ -/* 6809 registers */ -static m6809_Regs m6809; +#define pPPC m68_state->ppc +#define pPC m68_state->pc +#define pU m68_state->u +#define pS m68_state->s +#define pX m68_state->x +#define pY m68_state->y +#define pD m68_state->d -#define pPPC m6809.ppc -#define pPC m6809.pc -#define pU m6809.u -#define pS m6809.s -#define pX m6809.x -#define pY m6809.y -#define pD m6809.d - -#define PPC m6809.ppc.w.l -#define PC m6809.pc.w.l -#define PCD m6809.pc.d -#define U m6809.u.w.l -#define UD m6809.u.d -#define S m6809.s.w.l -#define SD m6809.s.d -#define X m6809.x.w.l -#define XD m6809.x.d -#define Y m6809.y.w.l -#define YD m6809.y.d -#define D m6809.d.w.l -#define A m6809.d.b.h -#define B m6809.d.b.l -#define DP m6809.dp.b.h -#define DPD m6809.dp.d -#define CC m6809.cc +#define PPC m68_state->ppc.w.l +#define PC m68_state->pc.w.l +#define PCD m68_state->pc.d +#define U m68_state->u.w.l +#define UD m68_state->u.d +#define S m68_state->s.w.l +#define SD m68_state->s.d +#define X m68_state->x.w.l +#define XD m68_state->x.d +#define Y m68_state->y.w.l +#define YD m68_state->y.d +#define D m68_state->d.w.l +#define A m68_state->d.b.h +#define B m68_state->d.b.l +#define DP m68_state->dp.b.h +#define DPD m68_state->dp.d +#define CC m68_state->cc static PAIR ea; /* effective address */ #define EA ea.w.l @@ -155,64 +148,11 @@ static PAIR ea; /* effective address */ #define M6809_SYNC 16 /* set when SYNC is waiting for an interrupt */ #define M6809_LDS 32 /* set when LDS occured at least once */ -#define CHECK_IRQ_LINES() \ - if( m6809.irq_state[M6809_IRQ_LINE] != CLEAR_LINE || \ - m6809.irq_state[M6809_FIRQ_LINE] != CLEAR_LINE ) \ - m6809.int_state &= ~M6809_SYNC; /* clear SYNC flag */ \ - if( m6809.irq_state[M6809_FIRQ_LINE]!=CLEAR_LINE && !(CC & CC_IF) ) \ - { \ - /* fast IRQ */ \ - /* HJB 990225: state already saved by CWAI? */ \ - if( m6809.int_state & M6809_CWAI ) \ - { \ - m6809.int_state &= ~M6809_CWAI; /* clear CWAI */ \ - m6809.extra_cycles += 7; /* subtract +7 cycles */ \ - } \ - else \ - { \ - CC &= ~CC_E; /* save 'short' state */ \ - PUSHWORD(pPC); \ - PUSHBYTE(CC); \ - m6809.extra_cycles += 10; /* subtract +10 cycles */ \ - } \ - CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */ \ - PCD=RM16(0xfff6); \ - CHANGE_PC; \ - (void)(*m6809.irq_callback)(m6809.device, M6809_FIRQ_LINE); \ - } \ - else \ - if( m6809.irq_state[M6809_IRQ_LINE]!=CLEAR_LINE && !(CC & CC_II) ) \ - { \ - /* standard IRQ */ \ - /* HJB 990225: state already saved by CWAI? */ \ - if( m6809.int_state & M6809_CWAI ) \ - { \ - m6809.int_state &= ~M6809_CWAI; /* clear CWAI flag */ \ - m6809.extra_cycles += 7; /* subtract +7 cycles */ \ - } \ - else \ - { \ - CC |= CC_E; /* save entire state */ \ - PUSHWORD(pPC); \ - PUSHWORD(pU); \ - PUSHWORD(pY); \ - PUSHWORD(pX); \ - PUSHBYTE(DP); \ - PUSHBYTE(B); \ - PUSHBYTE(A); \ - PUSHBYTE(CC); \ - m6809.extra_cycles += 19; /* subtract +19 cycles */ \ - } \ - CC |= CC_II; /* inhibit IRQ */ \ - PCD=RM16(0xfff8); \ - CHANGE_PC; \ - (void)(*m6809.irq_callback)(m6809.device, M6809_IRQ_LINE); \ - } /* public globals */ -static int m6809_ICount; +static int m68_icount; -/* these are re-defined in m6809.h TO RAM, ROM or functions in cpuintrf.c */ +/* these are re-defined in m68_state->h TO RAM, ROM or functions in cpuintrf.c */ #define RM(Addr) M6809_RDMEM(Addr) #define WM(Addr,Value) M6809_WRMEM(Addr,Value) #define ROP(Addr) M6809_RDOP(Addr) @@ -253,44 +193,6 @@ static int m6809_ICount; #define SET_V8(a,b,r) CC|=(((a^b^r^(r>>1))&0x80)>>6) #define SET_V16(a,b,r) CC|=(((a^b^r^(r>>1))&0x8000)>>14) -static const UINT8 flags8i[256]= /* increment */ -{ -CC_Z,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -CC_N|CC_V,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N -}; -static const UINT8 flags8d[256]= /* decrement */ -{ -CC_Z,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,CC_V, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N, -CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N -}; #define SET_FLAGS8I(a) {CC|=flags8i[(a)&0xff];} #define SET_FLAGS8D(a) {CC|=flags8d[(a)&0xff];} @@ -300,6 +202,8 @@ CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N #define SET_FLAGS8(a,b,r) {SET_N8(r);SET_Z8(r);SET_V8(a,b,r);SET_C8(r);} #define SET_FLAGS16(a,b,r) {SET_N16(r);SET_Z16(r);SET_V16(a,b,r);SET_C16(r);} +#define NXORV ((CC&CC_N)^((CC&CC_V)<<2)) + /* for treating an unsigned byte as a signed word */ #define SIGNED(b) ((UINT16)(b&0x80?b|0xff00:b)) @@ -346,39 +250,15 @@ CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N IMMWORD(t); \ if( f ) \ { \ - m6809_ICount -= 1; \ + m68_icount -= 1; \ PC += t.w.l; \ CHANGE_PC; \ } \ } -#define NXORV ((CC&CC_N)^((CC&CC_V)<<2)) - /* macros for setting/getting registers in TFR/EXG instructions */ -#if (!BIG_SWITCH) -/* timings for 1-byte opcodes */ -static const UINT8 cycles1[] = -{ - /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ - /*0*/ 6, 0, 0, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 6, 3, 6, - /*1*/ 0, 0, 2, 4, 0, 0, 5, 9, 0, 2, 3, 0, 3, 2, 8, 6, - /*2*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - /*3*/ 4, 4, 4, 4, 5, 5, 5, 5, 0, 5, 3, 6,20,11, 0,19, - /*4*/ 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, - /*5*/ 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, - /*6*/ 6, 0, 0, 6, 6, 0, 6, 6, 6, 6, 6, 0, 6, 6, 3, 6, - /*7*/ 7, 0, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 4, 7, - /*8*/ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 4, 7, 3, 0, - /*9*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, - /*A*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, - /*B*/ 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 7, 8, 6, 6, - /*C*/ 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 3, 3, - /*D*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, - /*E*/ 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, - /*F*/ 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6 -}; -#endif +INLINE void fetch_effective_address( m68_state_t *m68_state ); INLINE UINT32 RM16( UINT32 Addr ) { @@ -392,13 +272,75 @@ INLINE void WM16( UINT32 Addr, PAIR *p ) WM( (Addr+1)&0xffff, p->b.l ); } +static void UpdateState(m68_state_t *m68_state) +{ + /* compatibility with 6309 */ +} + +static void CHECK_IRQ_LINES(m68_state_t *m68_state) +{ + if( m68_state->irq_state[M6809_IRQ_LINE] != CLEAR_LINE || + m68_state->irq_state[M6809_FIRQ_LINE] != CLEAR_LINE ) + m68_state->int_state &= ~M6809_SYNC; /* clear SYNC flag */ + if( m68_state->irq_state[M6809_FIRQ_LINE]!=CLEAR_LINE && !(CC & CC_IF) ) + { + /* fast IRQ */ + /* HJB 990225: state already saved by CWAI? */ + if( m68_state->int_state & M6809_CWAI ) + { + m68_state->int_state &= ~M6809_CWAI; /* clear CWAI */ + m68_state->extra_cycles += 7; /* subtract +7 cycles */ + } + else + { + CC &= ~CC_E; /* save 'short' state */ + PUSHWORD(pPC); + PUSHBYTE(CC); + m68_state->extra_cycles += 10; /* subtract +10 cycles */ + } + CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */ + PCD=RM16(0xfff6); + CHANGE_PC; + (void)(*m68_state->irq_callback)(m68_state->device, M6809_FIRQ_LINE); + } + else + if( m68_state->irq_state[M6809_IRQ_LINE]!=CLEAR_LINE && !(CC & CC_II) ) + { + /* standard IRQ */ + /* HJB 990225: state already saved by CWAI? */ + if( m68_state->int_state & M6809_CWAI ) + { + m68_state->int_state &= ~M6809_CWAI; /* clear CWAI flag */ + m68_state->extra_cycles += 7; /* subtract +7 cycles */ + } + else + { + CC |= CC_E; /* save entire state */ + PUSHWORD(pPC); + PUSHWORD(pU); + PUSHWORD(pY); + PUSHWORD(pX); + PUSHBYTE(DP); + PUSHBYTE(B); + PUSHBYTE(A); + PUSHBYTE(CC); + m68_state->extra_cycles += 19; /* subtract +19 cycles */ + } + CC |= CC_II; /* inhibit IRQ */ + PCD=RM16(0xfff8); + CHANGE_PC; + (void)(*m68_state->irq_callback)(m68_state->device, M6809_IRQ_LINE); + } +} + + + /**************************************************************************** * Get all registers in given buffer ****************************************************************************/ + static CPU_GET_CONTEXT( m6809 ) { - if( dst ) - *(m6809_Regs*)dst = m6809; } /**************************************************************************** @@ -406,11 +348,12 @@ static CPU_GET_CONTEXT( m6809 ) ****************************************************************************/ static CPU_SET_CONTEXT( m6809 ) { - if( src ) - m6809 = *(m6809_Regs*)src; + m68_state_t *m68_state = src; CHANGE_PC; - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); + UpdateState(m68_state); + } @@ -419,6 +362,11 @@ static CPU_SET_CONTEXT( m6809 ) /****************************************************************************/ static CPU_INIT( m6809 ) { + m68_state_t *m68_state = device->token; + + m68_state->irq_callback = irqcallback; + m68_state->device = device; + state_save_register_item("m6809", index, PC); state_save_register_item("m6809", index, PPC); state_save_register_item("m6809", index, D); @@ -428,20 +376,23 @@ static CPU_INIT( m6809 ) state_save_register_item("m6809", index, X); state_save_register_item("m6809", index, Y); state_save_register_item("m6809", index, CC); - state_save_register_item_array("m6809", index, m6809.irq_state); - state_save_register_item("m6809", index, m6809.int_state); - state_save_register_item("m6809", index, m6809.nmi_state); + state_save_register_item_array("m6809", index, m68_state->irq_state); + state_save_register_item("m6809", index, m68_state->int_state); + state_save_register_item("m6809", index, m68_state->nmi_state); - m6809.irq_callback = irqcallback; - m6809.device = device; } +/****************************************************************************/ +/* Reset registers to their initial values */ +/****************************************************************************/ static CPU_RESET( m6809 ) { - m6809.int_state = 0; - m6809.nmi_state = CLEAR_LINE; - m6809.irq_state[0] = CLEAR_LINE; - m6809.irq_state[1] = CLEAR_LINE; + m68_state_t *m68_state = device->token; + + m68_state->int_state = 0; + m68_state->nmi_state = CLEAR_LINE; + m68_state->irq_state[0] = CLEAR_LINE; + m68_state->irq_state[1] = CLEAR_LINE; DPD = 0; /* Reset direct page register */ @@ -450,6 +401,7 @@ static CPU_RESET( m6809 ) PCD = RM16(0xfffe); CHANGE_PC; + UpdateState(m68_state); } static CPU_EXIT( m6809 ) @@ -457,28 +409,27 @@ static CPU_EXIT( m6809 ) /* nothing to do ? */ } -/* Generate interrupts */ /**************************************************************************** * Set IRQ line state ****************************************************************************/ -static void set_irq_line(int irqline, int state) +static void set_irq_line(m68_state_t *m68_state, int irqline, int state) { if (irqline == INPUT_LINE_NMI) { - if (m6809.nmi_state == state) return; - m6809.nmi_state = state; + if (m68_state->nmi_state == state) return; + m68_state->nmi_state = state; LOG(("M6809#%d set_irq_line (NMI) %d\n", cpunum_get_active(), state)); if( state == CLEAR_LINE ) return; /* if the stack was not yet initialized */ - if( !(m6809.int_state & M6809_LDS) ) return; + if( !(m68_state->int_state & M6809_LDS) ) return; - m6809.int_state &= ~M6809_SYNC; + m68_state->int_state &= ~M6809_SYNC; /* HJB 990225: state already saved by CWAI? */ - if( m6809.int_state & M6809_CWAI ) + if( m68_state->int_state & M6809_CWAI ) { - m6809.int_state &= ~M6809_CWAI; - m6809.extra_cycles += 7; /* subtract +7 cycles next time */ + m68_state->int_state &= ~M6809_CWAI; + m68_state->extra_cycles += 7; /* subtract +7 cycles next time */ } else { @@ -491,7 +442,7 @@ static void set_irq_line(int irqline, int state) PUSHBYTE(B); PUSHBYTE(A); PUSHBYTE(CC); - m6809.extra_cycles += 19; /* subtract +19 cycles next time */ + m68_state->extra_cycles += 19; /* subtract +19 cycles next time */ } CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */ PCD = RM16(0xfffc); @@ -500,9 +451,9 @@ static void set_irq_line(int irqline, int state) else if (irqline < 2) { LOG(("M6809#%d set_irq_line %d, %d\n", cpunum_get_active(), irqline, state)); - m6809.irq_state[irqline] = state; + m68_state->irq_state[irqline] = state; if (state == CLEAR_LINE) return; - CHECK_IRQ_LINES(); + CHECK_IRQ_LINES(m68_state); } } @@ -515,13 +466,15 @@ static void set_irq_line(int irqline, int state) /* execute instructions on this CPU until icount expires */ static CPU_EXECUTE( m6809 ) /* NS 970908 */ { - m6809_ICount = cycles - m6809.extra_cycles; - m6809.extra_cycles = 0; + m68_state_t *m68_state = device->token; + + m68_icount = cycles - m68_state->extra_cycles; + m68_state->extra_cycles = 0; - if (m6809.int_state & (M6809_CWAI | M6809_SYNC)) + if (m68_state->int_state & (M6809_CWAI | M6809_SYNC)) { debugger_instruction_hook(device->machine, PCD); - m6809_ICount = 0; + m68_icount = 0; } else { @@ -531,583 +484,585 @@ static CPU_EXECUTE( m6809 ) /* NS 970908 */ debugger_instruction_hook(device->machine, PCD); - m6809.ireg = ROP(PCD); + m68_state->ireg = ROP(PCD); PC++; #if BIG_SWITCH - switch( m6809.ireg ) + switch( m68_state->ireg ) { - case 0x00: neg_di(); m6809_ICount-= 6; break; - case 0x01: neg_di(); m6809_ICount-= 6; break; /* undocumented */ - case 0x02: illegal(); m6809_ICount-= 2; break; - case 0x03: com_di(); m6809_ICount-= 6; break; - case 0x04: lsr_di(); m6809_ICount-= 6; break; - case 0x05: illegal(); m6809_ICount-= 2; break; - case 0x06: ror_di(); m6809_ICount-= 6; break; - case 0x07: asr_di(); m6809_ICount-= 6; break; - case 0x08: asl_di(); m6809_ICount-= 6; break; - case 0x09: rol_di(); m6809_ICount-= 6; break; - case 0x0a: dec_di(); m6809_ICount-= 6; break; - case 0x0b: illegal(); m6809_ICount-= 2; break; - case 0x0c: inc_di(); m6809_ICount-= 6; break; - case 0x0d: tst_di(); m6809_ICount-= 6; break; - case 0x0e: jmp_di(); m6809_ICount-= 3; break; - case 0x0f: clr_di(); m6809_ICount-= 6; break; - case 0x10: pref10(); break; - case 0x11: pref11(); break; - case 0x12: nop(); m6809_ICount-= 2; break; - case 0x13: sync(); m6809_ICount-= 4; break; - case 0x14: illegal(); m6809_ICount-= 2; break; - case 0x15: illegal(); m6809_ICount-= 2; break; - case 0x16: lbra(); m6809_ICount-= 5; break; - case 0x17: lbsr(); m6809_ICount-= 9; break; - case 0x18: illegal(); m6809_ICount-= 2; break; - case 0x19: daa(); m6809_ICount-= 2; break; - case 0x1a: orcc(); m6809_ICount-= 3; break; - case 0x1b: illegal(); m6809_ICount-= 2; break; - case 0x1c: andcc(); m6809_ICount-= 3; break; - case 0x1d: sex(); m6809_ICount-= 2; break; - case 0x1e: exg(); m6809_ICount-= 8; break; - case 0x1f: tfr(); m6809_ICount-= 6; break; - case 0x20: bra(); m6809_ICount-= 3; break; - case 0x21: brn(); m6809_ICount-= 3; break; - case 0x22: bhi(); m6809_ICount-= 3; break; - case 0x23: bls(); m6809_ICount-= 3; break; - case 0x24: bcc(); m6809_ICount-= 3; break; - case 0x25: bcs(); m6809_ICount-= 3; break; - case 0x26: bne(); m6809_ICount-= 3; break; - case 0x27: beq(); m6809_ICount-= 3; break; - case 0x28: bvc(); m6809_ICount-= 3; break; - case 0x29: bvs(); m6809_ICount-= 3; break; - case 0x2a: bpl(); m6809_ICount-= 3; break; - case 0x2b: bmi(); m6809_ICount-= 3; break; - case 0x2c: bge(); m6809_ICount-= 3; break; - case 0x2d: blt(); m6809_ICount-= 3; break; - case 0x2e: bgt(); m6809_ICount-= 3; break; - case 0x2f: ble(); m6809_ICount-= 3; break; - case 0x30: leax(); m6809_ICount-= 4; break; - case 0x31: leay(); m6809_ICount-= 4; break; - case 0x32: leas(); m6809_ICount-= 4; break; - case 0x33: leau(); m6809_ICount-= 4; break; - case 0x34: pshs(); m6809_ICount-= 5; break; - case 0x35: puls(); m6809_ICount-= 5; break; - case 0x36: pshu(); m6809_ICount-= 5; break; - case 0x37: pulu(); m6809_ICount-= 5; break; - case 0x38: illegal(); m6809_ICount-= 2; break; - case 0x39: rts(); m6809_ICount-= 5; break; - case 0x3a: abx(); m6809_ICount-= 3; break; - case 0x3b: rti(); m6809_ICount-= 6; break; - case 0x3c: cwai(); m6809_ICount-=20; break; - case 0x3d: mul(); m6809_ICount-=11; break; - case 0x3e: illegal(); m6809_ICount-= 2; break; - case 0x3f: swi(); m6809_ICount-=19; break; - case 0x40: nega(); m6809_ICount-= 2; break; - case 0x41: illegal(); m6809_ICount-= 2; break; - case 0x42: illegal(); m6809_ICount-= 2; break; - case 0x43: coma(); m6809_ICount-= 2; break; - case 0x44: lsra(); m6809_ICount-= 2; break; - case 0x45: illegal(); m6809_ICount-= 2; break; - case 0x46: rora(); m6809_ICount-= 2; break; - case 0x47: asra(); m6809_ICount-= 2; break; - case 0x48: asla(); m6809_ICount-= 2; break; - case 0x49: rola(); m6809_ICount-= 2; break; - case 0x4a: deca(); m6809_ICount-= 2; break; - case 0x4b: illegal(); m6809_ICount-= 2; break; - case 0x4c: inca(); m6809_ICount-= 2; break; - case 0x4d: tsta(); m6809_ICount-= 2; break; - case 0x4e: illegal(); m6809_ICount-= 2; break; - case 0x4f: clra(); m6809_ICount-= 2; break; - case 0x50: negb(); m6809_ICount-= 2; break; - case 0x51: illegal(); m6809_ICount-= 2; break; - case 0x52: illegal(); m6809_ICount-= 2; break; - case 0x53: comb(); m6809_ICount-= 2; break; - case 0x54: lsrb(); m6809_ICount-= 2; break; - case 0x55: illegal(); m6809_ICount-= 2; break; - case 0x56: rorb(); m6809_ICount-= 2; break; - case 0x57: asrb(); m6809_ICount-= 2; break; - case 0x58: aslb(); m6809_ICount-= 2; break; - case 0x59: rolb(); m6809_ICount-= 2; break; - case 0x5a: decb(); m6809_ICount-= 2; break; - case 0x5b: illegal(); m6809_ICount-= 2; break; - case 0x5c: incb(); m6809_ICount-= 2; break; - case 0x5d: tstb(); m6809_ICount-= 2; break; - case 0x5e: illegal(); m6809_ICount-= 2; break; - case 0x5f: clrb(); m6809_ICount-= 2; break; - case 0x60: neg_ix(); m6809_ICount-= 6; break; - case 0x61: illegal(); m6809_ICount-= 2; break; - case 0x62: illegal(); m6809_ICount-= 2; break; - case 0x63: com_ix(); m6809_ICount-= 6; break; - case 0x64: lsr_ix(); m6809_ICount-= 6; break; - case 0x65: illegal(); m6809_ICount-= 2; break; - case 0x66: ror_ix(); m6809_ICount-= 6; break; - case 0x67: asr_ix(); m6809_ICount-= 6; break; - case 0x68: asl_ix(); m6809_ICount-= 6; break; - case 0x69: rol_ix(); m6809_ICount-= 6; break; - case 0x6a: dec_ix(); m6809_ICount-= 6; break; - case 0x6b: illegal(); m6809_ICount-= 2; break; - case 0x6c: inc_ix(); m6809_ICount-= 6; break; - case 0x6d: tst_ix(); m6809_ICount-= 6; break; - case 0x6e: jmp_ix(); m6809_ICount-= 3; break; - case 0x6f: clr_ix(); m6809_ICount-= 6; break; - case 0x70: neg_ex(); m6809_ICount-= 7; break; - case 0x71: illegal(); m6809_ICount-= 2; break; - case 0x72: illegal(); m6809_ICount-= 2; break; - case 0x73: com_ex(); m6809_ICount-= 7; break; - case 0x74: lsr_ex(); m6809_ICount-= 7; break; - case 0x75: illegal(); m6809_ICount-= 2; break; - case 0x76: ror_ex(); m6809_ICount-= 7; break; - case 0x77: asr_ex(); m6809_ICount-= 7; break; - case 0x78: asl_ex(); m6809_ICount-= 7; break; - case 0x79: rol_ex(); m6809_ICount-= 7; break; - case 0x7a: dec_ex(); m6809_ICount-= 7; break; - case 0x7b: illegal(); m6809_ICount-= 2; break; - case 0x7c: inc_ex(); m6809_ICount-= 7; break; - case 0x7d: tst_ex(); m6809_ICount-= 7; break; - case 0x7e: jmp_ex(); m6809_ICount-= 4; break; - case 0x7f: clr_ex(); m6809_ICount-= 7; break; - case 0x80: suba_im(); m6809_ICount-= 2; break; - case 0x81: cmpa_im(); m6809_ICount-= 2; break; - case 0x82: sbca_im(); m6809_ICount-= 2; break; - case 0x83: subd_im(); m6809_ICount-= 4; break; - case 0x84: anda_im(); m6809_ICount-= 2; break; - case 0x85: bita_im(); m6809_ICount-= 2; break; - case 0x86: lda_im(); m6809_ICount-= 2; break; - case 0x87: sta_im(); m6809_ICount-= 2; break; - case 0x88: eora_im(); m6809_ICount-= 2; break; - case 0x89: adca_im(); m6809_ICount-= 2; break; - case 0x8a: ora_im(); m6809_ICount-= 2; break; - case 0x8b: adda_im(); m6809_ICount-= 2; break; - case 0x8c: cmpx_im(); m6809_ICount-= 4; break; - case 0x8d: bsr(); m6809_ICount-= 7; break; - case 0x8e: ldx_im(); m6809_ICount-= 3; break; - case 0x8f: stx_im(); m6809_ICount-= 2; break; - case 0x90: suba_di(); m6809_ICount-= 4; break; - case 0x91: cmpa_di(); m6809_ICount-= 4; break; - case 0x92: sbca_di(); m6809_ICount-= 4; break; - case 0x93: subd_di(); m6809_ICount-= 6; break; - case 0x94: anda_di(); m6809_ICount-= 4; break; - case 0x95: bita_di(); m6809_ICount-= 4; break; - case 0x96: lda_di(); m6809_ICount-= 4; break; - case 0x97: sta_di(); m6809_ICount-= 4; break; - case 0x98: eora_di(); m6809_ICount-= 4; break; - case 0x99: adca_di(); m6809_ICount-= 4; break; - case 0x9a: ora_di(); m6809_ICount-= 4; break; - case 0x9b: adda_di(); m6809_ICount-= 4; break; - case 0x9c: cmpx_di(); m6809_ICount-= 6; break; - case 0x9d: jsr_di(); m6809_ICount-= 7; break; - case 0x9e: ldx_di(); m6809_ICount-= 5; break; - case 0x9f: stx_di(); m6809_ICount-= 5; break; - case 0xa0: suba_ix(); m6809_ICount-= 4; break; - case 0xa1: cmpa_ix(); m6809_ICount-= 4; break; - case 0xa2: sbca_ix(); m6809_ICount-= 4; break; - case 0xa3: subd_ix(); m6809_ICount-= 6; break; - case 0xa4: anda_ix(); m6809_ICount-= 4; break; - case 0xa5: bita_ix(); m6809_ICount-= 4; break; - case 0xa6: lda_ix(); m6809_ICount-= 4; break; - case 0xa7: sta_ix(); m6809_ICount-= 4; break; - case 0xa8: eora_ix(); m6809_ICount-= 4; break; - case 0xa9: adca_ix(); m6809_ICount-= 4; break; - case 0xaa: ora_ix(); m6809_ICount-= 4; break; - case 0xab: adda_ix(); m6809_ICount-= 4; break; - case 0xac: cmpx_ix(); m6809_ICount-= 6; break; - case 0xad: jsr_ix(); m6809_ICount-= 7; break; - case 0xae: ldx_ix(); m6809_ICount-= 5; break; - case 0xaf: stx_ix(); m6809_ICount-= 5; break; - case 0xb0: suba_ex(); m6809_ICount-= 5; break; - case 0xb1: cmpa_ex(); m6809_ICount-= 5; break; - case 0xb2: sbca_ex(); m6809_ICount-= 5; break; - case 0xb3: subd_ex(); m6809_ICount-= 7; break; - case 0xb4: anda_ex(); m6809_ICount-= 5; break; - case 0xb5: bita_ex(); m6809_ICount-= 5; break; - case 0xb6: lda_ex(); m6809_ICount-= 5; break; - case 0xb7: sta_ex(); m6809_ICount-= 5; break; - case 0xb8: eora_ex(); m6809_ICount-= 5; break; - case 0xb9: adca_ex(); m6809_ICount-= 5; break; - case 0xba: ora_ex(); m6809_ICount-= 5; break; - case 0xbb: adda_ex(); m6809_ICount-= 5; break; - case 0xbc: cmpx_ex(); m6809_ICount-= 7; break; - case 0xbd: jsr_ex(); m6809_ICount-= 8; break; - case 0xbe: ldx_ex(); m6809_ICount-= 6; break; - case 0xbf: stx_ex(); m6809_ICount-= 6; break; - case 0xc0: subb_im(); m6809_ICount-= 2; break; - case 0xc1: cmpb_im(); m6809_ICount-= 2; break; - case 0xc2: sbcb_im(); m6809_ICount-= 2; break; - case 0xc3: addd_im(); m6809_ICount-= 4; break; - case 0xc4: andb_im(); m6809_ICount-= 2; break; - case 0xc5: bitb_im(); m6809_ICount-= 2; break; - case 0xc6: ldb_im(); m6809_ICount-= 2; break; - case 0xc7: stb_im(); m6809_ICount-= 2; break; - case 0xc8: eorb_im(); m6809_ICount-= 2; break; - case 0xc9: adcb_im(); m6809_ICount-= 2; break; - case 0xca: orb_im(); m6809_ICount-= 2; break; - case 0xcb: addb_im(); m6809_ICount-= 2; break; - case 0xcc: ldd_im(); m6809_ICount-= 3; break; - case 0xcd: std_im(); m6809_ICount-= 2; break; - case 0xce: ldu_im(); m6809_ICount-= 3; break; - case 0xcf: stu_im(); m6809_ICount-= 3; break; - case 0xd0: subb_di(); m6809_ICount-= 4; break; - case 0xd1: cmpb_di(); m6809_ICount-= 4; break; - case 0xd2: sbcb_di(); m6809_ICount-= 4; break; - case 0xd3: addd_di(); m6809_ICount-= 6; break; - case 0xd4: andb_di(); m6809_ICount-= 4; break; - case 0xd5: bitb_di(); m6809_ICount-= 4; break; - case 0xd6: ldb_di(); m6809_ICount-= 4; break; - case 0xd7: stb_di(); m6809_ICount-= 4; break; - case 0xd8: eorb_di(); m6809_ICount-= 4; break; - case 0xd9: adcb_di(); m6809_ICount-= 4; break; - case 0xda: orb_di(); m6809_ICount-= 4; break; - case 0xdb: addb_di(); m6809_ICount-= 4; break; - case 0xdc: ldd_di(); m6809_ICount-= 5; break; - case 0xdd: std_di(); m6809_ICount-= 5; break; - case 0xde: ldu_di(); m6809_ICount-= 5; break; - case 0xdf: stu_di(); m6809_ICount-= 5; break; - case 0xe0: subb_ix(); m6809_ICount-= 4; break; - case 0xe1: cmpb_ix(); m6809_ICount-= 4; break; - case 0xe2: sbcb_ix(); m6809_ICount-= 4; break; - case 0xe3: addd_ix(); m6809_ICount-= 6; break; - case 0xe4: andb_ix(); m6809_ICount-= 4; break; - case 0xe5: bitb_ix(); m6809_ICount-= 4; break; - case 0xe6: ldb_ix(); m6809_ICount-= 4; break; - case 0xe7: stb_ix(); m6809_ICount-= 4; break; - case 0xe8: eorb_ix(); m6809_ICount-= 4; break; - case 0xe9: adcb_ix(); m6809_ICount-= 4; break; - case 0xea: orb_ix(); m6809_ICount-= 4; break; - case 0xeb: addb_ix(); m6809_ICount-= 4; break; - case 0xec: ldd_ix(); m6809_ICount-= 5; break; - case 0xed: std_ix(); m6809_ICount-= 5; break; - case 0xee: ldu_ix(); m6809_ICount-= 5; break; - case 0xef: stu_ix(); m6809_ICount-= 5; break; - case 0xf0: subb_ex(); m6809_ICount-= 5; break; - case 0xf1: cmpb_ex(); m6809_ICount-= 5; break; - case 0xf2: sbcb_ex(); m6809_ICount-= 5; break; - case 0xf3: addd_ex(); m6809_ICount-= 7; break; - case 0xf4: andb_ex(); m6809_ICount-= 5; break; - case 0xf5: bitb_ex(); m6809_ICount-= 5; break; - case 0xf6: ldb_ex(); m6809_ICount-= 5; break; - case 0xf7: stb_ex(); m6809_ICount-= 5; break; - case 0xf8: eorb_ex(); m6809_ICount-= 5; break; - case 0xf9: adcb_ex(); m6809_ICount-= 5; break; - case 0xfa: orb_ex(); m6809_ICount-= 5; break; - case 0xfb: addb_ex(); m6809_ICount-= 5; break; - case 0xfc: ldd_ex(); m6809_ICount-= 6; break; - case 0xfd: std_ex(); m6809_ICount-= 6; break; - case 0xfe: ldu_ex(); m6809_ICount-= 6; break; - case 0xff: stu_ex(); m6809_ICount-= 6; break; + case 0x00: neg_di(m68_state); break; + case 0x01: neg_di(m68_state); break; /* undocumented */ + case 0x02: illegal(m68_state); break; + case 0x03: com_di(m68_state); break; + case 0x04: lsr_di(m68_state); break; + case 0x05: illegal(m68_state); break; + case 0x06: ror_di(m68_state); break; + case 0x07: asr_di(m68_state); break; + case 0x08: asl_di(m68_state); break; + case 0x09: rol_di(m68_state); break; + case 0x0a: dec_di(m68_state); break; + case 0x0b: illegal(m68_state); break; + case 0x0c: inc_di(m68_state); break; + case 0x0d: tst_di(m68_state); break; + case 0x0e: jmp_di(m68_state); break; + case 0x0f: clr_di(m68_state); break; + case 0x10: pref10(m68_state); break; + case 0x11: pref11(m68_state); break; + case 0x12: nop(m68_state); break; + case 0x13: sync(m68_state); break; + case 0x14: illegal(m68_state); break; + case 0x15: illegal(m68_state); break; + case 0x16: lbra(m68_state); break; + case 0x17: lbsr(m68_state); break; + case 0x18: illegal(m68_state); break; + case 0x19: daa(m68_state); break; + case 0x1a: orcc(m68_state); break; + case 0x1b: illegal(m68_state); break; + case 0x1c: andcc(m68_state); break; + case 0x1d: sex(m68_state); break; + case 0x1e: exg(m68_state); break; + case 0x1f: tfr(m68_state); break; + case 0x20: bra(m68_state); break; + case 0x21: brn(m68_state); break; + case 0x22: bhi(m68_state); break; + case 0x23: bls(m68_state); break; + case 0x24: bcc(m68_state); break; + case 0x25: bcs(m68_state); break; + case 0x26: bne(m68_state); break; + case 0x27: beq(m68_state); break; + case 0x28: bvc(m68_state); break; + case 0x29: bvs(m68_state); break; + case 0x2a: bpl(m68_state); break; + case 0x2b: bmi(m68_state); break; + case 0x2c: bge(m68_state); break; + case 0x2d: blt(m68_state); break; + case 0x2e: bgt(m68_state); break; + case 0x2f: ble(m68_state); break; + case 0x30: leax(m68_state); break; + case 0x31: leay(m68_state); break; + case 0x32: leas(m68_state); break; + case 0x33: leau(m68_state); break; + case 0x34: pshs(m68_state); break; + case 0x35: puls(m68_state); break; + case 0x36: pshu(m68_state); break; + case 0x37: pulu(m68_state); break; + case 0x38: illegal(m68_state); break; + case 0x39: rts(m68_state); break; + case 0x3a: abx(m68_state); break; + case 0x3b: rti(m68_state); break; + case 0x3c: cwai(m68_state); break; + case 0x3d: mul(m68_state); break; + case 0x3e: illegal(m68_state); break; + case 0x3f: swi(m68_state); break; + case 0x40: nega(m68_state); break; + case 0x41: illegal(m68_state); break; + case 0x42: illegal(m68_state); break; + case 0x43: coma(m68_state); break; + case 0x44: lsra(m68_state); break; + case 0x45: illegal(m68_state); break; + case 0x46: rora(m68_state); break; + case 0x47: asra(m68_state); break; + case 0x48: asla(m68_state); break; + case 0x49: rola(m68_state); break; + case 0x4a: deca(m68_state); break; + case 0x4b: illegal(m68_state); break; + case 0x4c: inca(m68_state); break; + case 0x4d: tsta(m68_state); break; + case 0x4e: illegal(m68_state); break; + case 0x4f: clra(m68_state); break; + case 0x50: negb(m68_state); break; + case 0x51: illegal(m68_state); break; + case 0x52: illegal(m68_state); break; + case 0x53: comb(m68_state); break; + case 0x54: lsrb(m68_state); break; + case 0x55: illegal(m68_state); break; + case 0x56: rorb(m68_state); break; + case 0x57: asrb(m68_state); break; + case 0x58: aslb(m68_state); break; + case 0x59: rolb(m68_state); break; + case 0x5a: decb(m68_state); break; + case 0x5b: illegal(m68_state); break; + case 0x5c: incb(m68_state); break; + case 0x5d: tstb(m68_state); break; + case 0x5e: illegal(m68_state); break; + case 0x5f: clrb(m68_state); break; + case 0x60: neg_ix(m68_state); break; + case 0x61: illegal(m68_state); break; + case 0x62: illegal(m68_state); break; + case 0x63: com_ix(m68_state); break; + case 0x64: lsr_ix(m68_state); break; + case 0x65: illegal(m68_state); break; + case 0x66: ror_ix(m68_state); break; + case 0x67: asr_ix(m68_state); break; + case 0x68: asl_ix(m68_state); break; + case 0x69: rol_ix(m68_state); break; + case 0x6a: dec_ix(m68_state); break; + case 0x6b: illegal(m68_state); break; + case 0x6c: inc_ix(m68_state); break; + case 0x6d: tst_ix(m68_state); break; + case 0x6e: jmp_ix(m68_state); break; + case 0x6f: clr_ix(m68_state); break; + case 0x70: neg_ex(m68_state); break; + case 0x71: illegal(m68_state); break; + case 0x72: illegal(m68_state); break; + case 0x73: com_ex(m68_state); break; + case 0x74: lsr_ex(m68_state); break; + case 0x75: illegal(m68_state); break; + case 0x76: ror_ex(m68_state); break; + case 0x77: asr_ex(m68_state); break; + case 0x78: asl_ex(m68_state); break; + case 0x79: rol_ex(m68_state); break; + case 0x7a: dec_ex(m68_state); break; + case 0x7b: illegal(m68_state); break; + case 0x7c: inc_ex(m68_state); break; + case 0x7d: tst_ex(m68_state); break; + case 0x7e: jmp_ex(m68_state); break; + case 0x7f: clr_ex(m68_state); break; + case 0x80: suba_im(m68_state); break; + case 0x81: cmpa_im(m68_state); break; + case 0x82: sbca_im(m68_state); break; + case 0x83: subd_im(m68_state); break; + case 0x84: anda_im(m68_state); break; + case 0x85: bita_im(m68_state); break; + case 0x86: lda_im(m68_state); break; + case 0x87: sta_im(m68_state); break; + case 0x88: eora_im(m68_state); break; + case 0x89: adca_im(m68_state); break; + case 0x8a: ora_im(m68_state); break; + case 0x8b: adda_im(m68_state); break; + case 0x8c: cmpx_im(m68_state); break; + case 0x8d: bsr(m68_state); break; + case 0x8e: ldx_im(m68_state); break; + case 0x8f: stx_im(m68_state); break; + case 0x90: suba_di(m68_state); break; + case 0x91: cmpa_di(m68_state); break; + case 0x92: sbca_di(m68_state); break; + case 0x93: subd_di(m68_state); break; + case 0x94: anda_di(m68_state); break; + case 0x95: bita_di(m68_state); break; + case 0x96: lda_di(m68_state); break; + case 0x97: sta_di(m68_state); break; + case 0x98: eora_di(m68_state); break; + case 0x99: adca_di(m68_state); break; + case 0x9a: ora_di(m68_state); break; + case 0x9b: adda_di(m68_state); break; + case 0x9c: cmpx_di(m68_state); break; + case 0x9d: jsr_di(m68_state); break; + case 0x9e: ldx_di(m68_state); break; + case 0x9f: stx_di(m68_state); break; + case 0xa0: suba_ix(m68_state); break; + case 0xa1: cmpa_ix(m68_state); break; + case 0xa2: sbca_ix(m68_state); break; + case 0xa3: subd_ix(m68_state); break; + case 0xa4: anda_ix(m68_state); break; + case 0xa5: bita_ix(m68_state); break; + case 0xa6: lda_ix(m68_state); break; + case 0xa7: sta_ix(m68_state); break; + case 0xa8: eora_ix(m68_state); break; + case 0xa9: adca_ix(m68_state); break; + case 0xaa: ora_ix(m68_state); break; + case 0xab: adda_ix(m68_state); break; + case 0xac: cmpx_ix(m68_state); break; + case 0xad: jsr_ix(m68_state); break; + case 0xae: ldx_ix(m68_state); break; + case 0xaf: stx_ix(m68_state); break; + case 0xb0: suba_ex(m68_state); break; + case 0xb1: cmpa_ex(m68_state); break; + case 0xb2: sbca_ex(m68_state); break; + case 0xb3: subd_ex(m68_state); break; + case 0xb4: anda_ex(m68_state); break; + case 0xb5: bita_ex(m68_state); break; + case 0xb6: lda_ex(m68_state); break; + case 0xb7: sta_ex(m68_state); break; + case 0xb8: eora_ex(m68_state); break; + case 0xb9: adca_ex(m68_state); break; + case 0xba: ora_ex(m68_state); break; + case 0xbb: adda_ex(m68_state); break; + case 0xbc: cmpx_ex(m68_state); break; + case 0xbd: jsr_ex(m68_state); break; + case 0xbe: ldx_ex(m68_state); break; + case 0xbf: stx_ex(m68_state); break; + case 0xc0: subb_im(m68_state); break; + case 0xc1: cmpb_im(m68_state); break; + case 0xc2: sbcb_im(m68_state); break; + case 0xc3: addd_im(m68_state); break; + case 0xc4: andb_im(m68_state); break; + case 0xc5: bitb_im(m68_state); break; + case 0xc6: ldb_im(m68_state); break; + case 0xc7: stb_im(m68_state); break; + case 0xc8: eorb_im(m68_state); break; + case 0xc9: adcb_im(m68_state); break; + case 0xca: orb_im(m68_state); break; + case 0xcb: addb_im(m68_state); break; + case 0xcc: ldd_im(m68_state); break; + case 0xcd: std_im(m68_state); break; + case 0xce: ldu_im(m68_state); break; + case 0xcf: stu_im(m68_state); break; + case 0xd0: subb_di(m68_state); break; + case 0xd1: cmpb_di(m68_state); break; + case 0xd2: sbcb_di(m68_state); break; + case 0xd3: addd_di(m68_state); break; + case 0xd4: andb_di(m68_state); break; + case 0xd5: bitb_di(m68_state); break; + case 0xd6: ldb_di(m68_state); break; + case 0xd7: stb_di(m68_state); break; + case 0xd8: eorb_di(m68_state); break; + case 0xd9: adcb_di(m68_state); break; + case 0xda: orb_di(m68_state); break; + case 0xdb: addb_di(m68_state); break; + case 0xdc: ldd_di(m68_state); break; + case 0xdd: std_di(m68_state); break; + case 0xde: ldu_di(m68_state); break; + case 0xdf: stu_di(m68_state); break; + case 0xe0: subb_ix(m68_state); break; + case 0xe1: cmpb_ix(m68_state); break; + case 0xe2: sbcb_ix(m68_state); break; + case 0xe3: addd_ix(m68_state); break; + case 0xe4: andb_ix(m68_state); break; + case 0xe5: bitb_ix(m68_state); break; + case 0xe6: ldb_ix(m68_state); break; + case 0xe7: stb_ix(m68_state); break; + case 0xe8: eorb_ix(m68_state); break; + case 0xe9: adcb_ix(m68_state); break; + case 0xea: orb_ix(m68_state); break; + case 0xeb: addb_ix(m68_state); break; + case 0xec: ldd_ix(m68_state); break; + case 0xed: std_ix(m68_state); break; + case 0xee: ldu_ix(m68_state); break; + case 0xef: stu_ix(m68_state); break; + case 0xf0: subb_ex(m68_state); break; + case 0xf1: cmpb_ex(m68_state); break; + case 0xf2: sbcb_ex(m68_state); break; + case 0xf3: addd_ex(m68_state); break; + case 0xf4: andb_ex(m68_state); break; + case 0xf5: bitb_ex(m68_state); break; + case 0xf6: ldb_ex(m68_state); break; + case 0xf7: stb_ex(m68_state); break; + case 0xf8: eorb_ex(m68_state); break; + case 0xf9: adcb_ex(m68_state); break; + case 0xfa: orb_ex(m68_state); break; + case 0xfb: addb_ex(m68_state); break; + case 0xfc: ldd_ex(m68_state); break; + case 0xfd: std_ex(m68_state); break; + case 0xfe: ldu_ex(m68_state); break; + case 0xff: stu_ex(m68_state); break; } #else - (*m6809_main[m6809.ireg])(); - m6809_ICount -= cycles1[m6809.ireg]; + (*m6809_main[m68_state->ireg])(m68_state); #endif + m68_icount -= cycles1[m68_state->ireg]; - } while( m6809_ICount > 0 ); + } while( m68_icount > 0 ); - m6809_ICount -= m6809.extra_cycles; - m6809.extra_cycles = 0; + m68_icount -= m68_state->extra_cycles; + m68_state->extra_cycles = 0; } - return cycles - m6809_ICount; /* NS 970908 */ + return cycles - m68_icount; /* NS 970908 */ } -INLINE void fetch_effective_address( void ) +INLINE void fetch_effective_address( m68_state_t *m68_state ) { UINT8 postbyte = ROP_ARG(PCD); PC++; switch(postbyte) { - case 0x00: EA=X; m6809_ICount-=1; break; - case 0x01: EA=X+1; m6809_ICount-=1; break; - case 0x02: EA=X+2; m6809_ICount-=1; break; - case 0x03: EA=X+3; m6809_ICount-=1; break; - case 0x04: EA=X+4; m6809_ICount-=1; break; - case 0x05: EA=X+5; m6809_ICount-=1; break; - case 0x06: EA=X+6; m6809_ICount-=1; break; - case 0x07: EA=X+7; m6809_ICount-=1; break; - case 0x08: EA=X+8; m6809_ICount-=1; break; - case 0x09: EA=X+9; m6809_ICount-=1; break; - case 0x0a: EA=X+10; m6809_ICount-=1; break; - case 0x0b: EA=X+11; m6809_ICount-=1; break; - case 0x0c: EA=X+12; m6809_ICount-=1; break; - case 0x0d: EA=X+13; m6809_ICount-=1; break; - case 0x0e: EA=X+14; m6809_ICount-=1; break; - case 0x0f: EA=X+15; m6809_ICount-=1; break; + case 0x00: EA=X; break; + case 0x01: EA=X+1; break; + case 0x02: EA=X+2; break; + case 0x03: EA=X+3; break; + case 0x04: EA=X+4; break; + case 0x05: EA=X+5; break; + case 0x06: EA=X+6; break; + case 0x07: EA=X+7; break; + case 0x08: EA=X+8; break; + case 0x09: EA=X+9; break; + case 0x0a: EA=X+10; break; + case 0x0b: EA=X+11; break; + case 0x0c: EA=X+12; break; + case 0x0d: EA=X+13; break; + case 0x0e: EA=X+14; break; + case 0x0f: EA=X+15; break; - case 0x10: EA=X-16; m6809_ICount-=1; break; - case 0x11: EA=X-15; m6809_ICount-=1; break; - case 0x12: EA=X-14; m6809_ICount-=1; break; - case 0x13: EA=X-13; m6809_ICount-=1; break; - case 0x14: EA=X-12; m6809_ICount-=1; break; - case 0x15: EA=X-11; m6809_ICount-=1; break; - case 0x16: EA=X-10; m6809_ICount-=1; break; - case 0x17: EA=X-9; m6809_ICount-=1; break; - case 0x18: EA=X-8; m6809_ICount-=1; break; - case 0x19: EA=X-7; m6809_ICount-=1; break; - case 0x1a: EA=X-6; m6809_ICount-=1; break; - case 0x1b: EA=X-5; m6809_ICount-=1; break; - case 0x1c: EA=X-4; m6809_ICount-=1; break; - case 0x1d: EA=X-3; m6809_ICount-=1; break; - case 0x1e: EA=X-2; m6809_ICount-=1; break; - case 0x1f: EA=X-1; m6809_ICount-=1; break; + case 0x10: EA=X-16; break; + case 0x11: EA=X-15; break; + case 0x12: EA=X-14; break; + case 0x13: EA=X-13; break; + case 0x14: EA=X-12; break; + case 0x15: EA=X-11; break; + case 0x16: EA=X-10; break; + case 0x17: EA=X-9; break; + case 0x18: EA=X-8; break; + case 0x19: EA=X-7; break; + case 0x1a: EA=X-6; break; + case 0x1b: EA=X-5; break; + case 0x1c: EA=X-4; break; + case 0x1d: EA=X-3; break; + case 0x1e: EA=X-2; break; + case 0x1f: EA=X-1; break; - case 0x20: EA=Y; m6809_ICount-=1; break; - case 0x21: EA=Y+1; m6809_ICount-=1; break; - case 0x22: EA=Y+2; m6809_ICount-=1; break; - case 0x23: EA=Y+3; m6809_ICount-=1; break; - case 0x24: EA=Y+4; m6809_ICount-=1; break; - case 0x25: EA=Y+5; m6809_ICount-=1; break; - case 0x26: EA=Y+6; m6809_ICount-=1; break; - case 0x27: EA=Y+7; m6809_ICount-=1; break; - case 0x28: EA=Y+8; m6809_ICount-=1; break; - case 0x29: EA=Y+9; m6809_ICount-=1; break; - case 0x2a: EA=Y+10; m6809_ICount-=1; break; - case 0x2b: EA=Y+11; m6809_ICount-=1; break; - case 0x2c: EA=Y+12; m6809_ICount-=1; break; - case 0x2d: EA=Y+13; m6809_ICount-=1; break; - case 0x2e: EA=Y+14; m6809_ICount-=1; break; - case 0x2f: EA=Y+15; m6809_ICount-=1; break; + case 0x20: EA=Y; break; + case 0x21: EA=Y+1; break; + case 0x22: EA=Y+2; break; + case 0x23: EA=Y+3; break; + case 0x24: EA=Y+4; break; + case 0x25: EA=Y+5; break; + case 0x26: EA=Y+6; break; + case 0x27: EA=Y+7; break; + case 0x28: EA=Y+8; break; + case 0x29: EA=Y+9; break; + case 0x2a: EA=Y+10; break; + case 0x2b: EA=Y+11; break; + case 0x2c: EA=Y+12; break; + case 0x2d: EA=Y+13; break; + case 0x2e: EA=Y+14; break; + case 0x2f: EA=Y+15; break; - case 0x30: EA=Y-16; m6809_ICount-=1; break; - case 0x31: EA=Y-15; m6809_ICount-=1; break; - case 0x32: EA=Y-14; m6809_ICount-=1; break; - case 0x33: EA=Y-13; m6809_ICount-=1; break; - case 0x34: EA=Y-12; m6809_ICount-=1; break; - case 0x35: EA=Y-11; m6809_ICount-=1; break; - case 0x36: EA=Y-10; m6809_ICount-=1; break; - case 0x37: EA=Y-9; m6809_ICount-=1; break; - case 0x38: EA=Y-8; m6809_ICount-=1; break; - case 0x39: EA=Y-7; m6809_ICount-=1; break; - case 0x3a: EA=Y-6; m6809_ICount-=1; break; - case 0x3b: EA=Y-5; m6809_ICount-=1; break; - case 0x3c: EA=Y-4; m6809_ICount-=1; break; - case 0x3d: EA=Y-3; m6809_ICount-=1; break; - case 0x3e: EA=Y-2; m6809_ICount-=1; break; - case 0x3f: EA=Y-1; m6809_ICount-=1; break; + case 0x30: EA=Y-16; break; + case 0x31: EA=Y-15; break; + case 0x32: EA=Y-14; break; + case 0x33: EA=Y-13; break; + case 0x34: EA=Y-12; break; + case 0x35: EA=Y-11; break; + case 0x36: EA=Y-10; break; + case 0x37: EA=Y-9; break; + case 0x38: EA=Y-8; break; + case 0x39: EA=Y-7; break; + case 0x3a: EA=Y-6; break; + case 0x3b: EA=Y-5; break; + case 0x3c: EA=Y-4; break; + case 0x3d: EA=Y-3; break; + case 0x3e: EA=Y-2; break; + case 0x3f: EA=Y-1; break; - case 0x40: EA=U; m6809_ICount-=1; break; - case 0x41: EA=U+1; m6809_ICount-=1; break; - case 0x42: EA=U+2; m6809_ICount-=1; break; - case 0x43: EA=U+3; m6809_ICount-=1; break; - case 0x44: EA=U+4; m6809_ICount-=1; break; - case 0x45: EA=U+5; m6809_ICount-=1; break; - case 0x46: EA=U+6; m6809_ICount-=1; break; - case 0x47: EA=U+7; m6809_ICount-=1; break; - case 0x48: EA=U+8; m6809_ICount-=1; break; - case 0x49: EA=U+9; m6809_ICount-=1; break; - case 0x4a: EA=U+10; m6809_ICount-=1; break; - case 0x4b: EA=U+11; m6809_ICount-=1; break; - case 0x4c: EA=U+12; m6809_ICount-=1; break; - case 0x4d: EA=U+13; m6809_ICount-=1; break; - case 0x4e: EA=U+14; m6809_ICount-=1; break; - case 0x4f: EA=U+15; m6809_ICount-=1; break; + case 0x40: EA=U; break; + case 0x41: EA=U+1; break; + case 0x42: EA=U+2; break; + case 0x43: EA=U+3; break; + case 0x44: EA=U+4; break; + case 0x45: EA=U+5; break; + case 0x46: EA=U+6; break; + case 0x47: EA=U+7; break; + case 0x48: EA=U+8; break; + case 0x49: EA=U+9; break; + case 0x4a: EA=U+10; break; + case 0x4b: EA=U+11; break; + case 0x4c: EA=U+12; break; + case 0x4d: EA=U+13; break; + case 0x4e: EA=U+14; break; + case 0x4f: EA=U+15; break; - case 0x50: EA=U-16; m6809_ICount-=1; break; - case 0x51: EA=U-15; m6809_ICount-=1; break; - case 0x52: EA=U-14; m6809_ICount-=1; break; - case 0x53: EA=U-13; m6809_ICount-=1; break; - case 0x54: EA=U-12; m6809_ICount-=1; break; - case 0x55: EA=U-11; m6809_ICount-=1; break; - case 0x56: EA=U-10; m6809_ICount-=1; break; - case 0x57: EA=U-9; m6809_ICount-=1; break; - case 0x58: EA=U-8; m6809_ICount-=1; break; - case 0x59: EA=U-7; m6809_ICount-=1; break; - case 0x5a: EA=U-6; m6809_ICount-=1; break; - case 0x5b: EA=U-5; m6809_ICount-=1; break; - case 0x5c: EA=U-4; m6809_ICount-=1; break; - case 0x5d: EA=U-3; m6809_ICount-=1; break; - case 0x5e: EA=U-2; m6809_ICount-=1; break; - case 0x5f: EA=U-1; m6809_ICount-=1; break; + case 0x50: EA=U-16; break; + case 0x51: EA=U-15; break; + case 0x52: EA=U-14; break; + case 0x53: EA=U-13; break; + case 0x54: EA=U-12; break; + case 0x55: EA=U-11; break; + case 0x56: EA=U-10; break; + case 0x57: EA=U-9; break; + case 0x58: EA=U-8; break; + case 0x59: EA=U-7; break; + case 0x5a: EA=U-6; break; + case 0x5b: EA=U-5; break; + case 0x5c: EA=U-4; break; + case 0x5d: EA=U-3; break; + case 0x5e: EA=U-2; break; + case 0x5f: EA=U-1; break; - case 0x60: EA=S; m6809_ICount-=1; break; - case 0x61: EA=S+1; m6809_ICount-=1; break; - case 0x62: EA=S+2; m6809_ICount-=1; break; - case 0x63: EA=S+3; m6809_ICount-=1; break; - case 0x64: EA=S+4; m6809_ICount-=1; break; - case 0x65: EA=S+5; m6809_ICount-=1; break; - case 0x66: EA=S+6; m6809_ICount-=1; break; - case 0x67: EA=S+7; m6809_ICount-=1; break; - case 0x68: EA=S+8; m6809_ICount-=1; break; - case 0x69: EA=S+9; m6809_ICount-=1; break; - case 0x6a: EA=S+10; m6809_ICount-=1; break; - case 0x6b: EA=S+11; m6809_ICount-=1; break; - case 0x6c: EA=S+12; m6809_ICount-=1; break; - case 0x6d: EA=S+13; m6809_ICount-=1; break; - case 0x6e: EA=S+14; m6809_ICount-=1; break; - case 0x6f: EA=S+15; m6809_ICount-=1; break; + case 0x60: EA=S; break; + case 0x61: EA=S+1; break; + case 0x62: EA=S+2; break; + case 0x63: EA=S+3; break; + case 0x64: EA=S+4; break; + case 0x65: EA=S+5; break; + case 0x66: EA=S+6; break; + case 0x67: EA=S+7; break; + case 0x68: EA=S+8; break; + case 0x69: EA=S+9; break; + case 0x6a: EA=S+10; break; + case 0x6b: EA=S+11; break; + case 0x6c: EA=S+12; break; + case 0x6d: EA=S+13; break; + case 0x6e: EA=S+14; break; + case 0x6f: EA=S+15; break; - case 0x70: EA=S-16; m6809_ICount-=1; break; - case 0x71: EA=S-15; m6809_ICount-=1; break; - case 0x72: EA=S-14; m6809_ICount-=1; break; - case 0x73: EA=S-13; m6809_ICount-=1; break; - case 0x74: EA=S-12; m6809_ICount-=1; break; - case 0x75: EA=S-11; m6809_ICount-=1; break; - case 0x76: EA=S-10; m6809_ICount-=1; break; - case 0x77: EA=S-9; m6809_ICount-=1; break; - case 0x78: EA=S-8; m6809_ICount-=1; break; - case 0x79: EA=S-7; m6809_ICount-=1; break; - case 0x7a: EA=S-6; m6809_ICount-=1; break; - case 0x7b: EA=S-5; m6809_ICount-=1; break; - case 0x7c: EA=S-4; m6809_ICount-=1; break; - case 0x7d: EA=S-3; m6809_ICount-=1; break; - case 0x7e: EA=S-2; m6809_ICount-=1; break; - case 0x7f: EA=S-1; m6809_ICount-=1; break; + case 0x70: EA=S-16; break; + case 0x71: EA=S-15; break; + case 0x72: EA=S-14; break; + case 0x73: EA=S-13; break; + case 0x74: EA=S-12; break; + case 0x75: EA=S-11; break; + case 0x76: EA=S-10; break; + case 0x77: EA=S-9; break; + case 0x78: EA=S-8; break; + case 0x79: EA=S-7; break; + case 0x7a: EA=S-6; break; + case 0x7b: EA=S-5; break; + case 0x7c: EA=S-4; break; + case 0x7d: EA=S-3; break; + case 0x7e: EA=S-2; break; + case 0x7f: EA=S-1; break; - case 0x80: EA=X; X++; m6809_ICount-=2; break; - case 0x81: EA=X; X+=2; m6809_ICount-=3; break; - case 0x82: X--; EA=X; m6809_ICount-=2; break; - case 0x83: X-=2; EA=X; m6809_ICount-=3; break; - case 0x84: EA=X; break; - case 0x85: EA=X+SIGNED(B); m6809_ICount-=1; break; - case 0x86: EA=X+SIGNED(A); m6809_ICount-=1; break; - case 0x87: EA=0; break; /* ILLEGAL*/ - case 0x88: IMMBYTE(EA); EA=X+SIGNED(EA); m6809_ICount-=1; break; /* this is a hack to make Vectrex work. It should be m6809_ICount-=1. Dunno where the cycle was lost :( */ - case 0x89: IMMWORD(ea); EA+=X; m6809_ICount-=4; break; - case 0x8a: EA=0; break; /* ILLEGAL*/ - case 0x8b: EA=X+D; m6809_ICount-=4; break; - case 0x8c: IMMBYTE(EA); EA=PC+SIGNED(EA); m6809_ICount-=1; break; - case 0x8d: IMMWORD(ea); EA+=PC; m6809_ICount-=5; break; - case 0x8e: EA=0; break; /* ILLEGAL*/ - case 0x8f: IMMWORD(ea); m6809_ICount-=5; break; + 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=0; break; /* ILLEGAL*/ + case 0x88: IMMBYTE(EA); EA=X+SIGNED(EA); break; /* this is a hack to make Vectrex work. It should be m68_icount-=1. Dunno where the cycle was lost :( */ + case 0x89: IMMWORD(ea); EA+=X; break; + case 0x8a: EA=0; break; /* ILLEGAL*/ + case 0x8b: EA=X+D; break; + case 0x8c: IMMBYTE(EA); EA=PC+SIGNED(EA); break; + case 0x8d: IMMWORD(ea); EA+=PC; break; + case 0x8e: EA=0; break; /* ILLEGAL*/ + case 0x8f: IMMWORD(ea); break; - case 0x90: EA=X; X++; EAD=RM16(EAD); m6809_ICount-=5; break; /* Indirect ,R+ not in my specs */ - case 0x91: EA=X; X+=2; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0x92: X--; EA=X; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0x93: X-=2; EA=X; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0x94: EA=X; EAD=RM16(EAD); m6809_ICount-=3; break; - case 0x95: EA=X+SIGNED(B); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0x96: EA=X+SIGNED(A); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0x97: EA=0; break; /* ILLEGAL*/ - case 0x98: IMMBYTE(EA); EA=X+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0x99: IMMWORD(ea); EA+=X; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0x9a: EA=0; break; /* ILLEGAL*/ - case 0x9b: EA=X+D; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0x9c: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0x9d: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); m6809_ICount-=8; break; - case 0x9e: EA=0; break; /* ILLEGAL*/ - case 0x9f: IMMWORD(ea); EAD=RM16(EAD); m6809_ICount-=8; 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=0; break; /* ILLEGAL*/ + case 0x98: IMMBYTE(EA); EA=X+SIGNED(EA); EAD=RM16(EAD); break; + case 0x99: IMMWORD(ea); EA+=X; EAD=RM16(EAD); break; + case 0x9a: EA=0; 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(ea); EA+=PC; EAD=RM16(EAD); break; + case 0x9e: EA=0; break; /* ILLEGAL*/ + case 0x9f: IMMWORD(ea); EAD=RM16(EAD); break; - case 0xa0: EA=Y; Y++; m6809_ICount-=2; break; - case 0xa1: EA=Y; Y+=2; m6809_ICount-=3; break; - case 0xa2: Y--; EA=Y; m6809_ICount-=2; break; - case 0xa3: Y-=2; EA=Y; m6809_ICount-=3; break; - case 0xa4: EA=Y; break; - case 0xa5: EA=Y+SIGNED(B); m6809_ICount-=1; break; - case 0xa6: EA=Y+SIGNED(A); m6809_ICount-=1; break; - case 0xa7: EA=0; break; /* ILLEGAL*/ - case 0xa8: IMMBYTE(EA); EA=Y+SIGNED(EA); m6809_ICount-=1; break; - case 0xa9: IMMWORD(ea); EA+=Y; m6809_ICount-=4; break; - case 0xaa: EA=0; break; /* ILLEGAL*/ - case 0xab: EA=Y+D; m6809_ICount-=4; break; - case 0xac: IMMBYTE(EA); EA=PC+SIGNED(EA); m6809_ICount-=1; break; - case 0xad: IMMWORD(ea); EA+=PC; m6809_ICount-=5; break; - case 0xae: EA=0; break; /* ILLEGAL*/ - case 0xaf: IMMWORD(ea); m6809_ICount-=5; 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=0; break; /* ILLEGAL*/ + case 0xa8: IMMBYTE(EA); EA=Y+SIGNED(EA); break; + case 0xa9: IMMWORD(ea); EA+=Y; break; + case 0xaa: EA=0; break; /* ILLEGAL*/ + case 0xab: EA=Y+D; break; + case 0xac: IMMBYTE(EA); EA=PC+SIGNED(EA); break; + case 0xad: IMMWORD(ea); EA+=PC; break; + case 0xae: EA=0; break; /* ILLEGAL*/ + case 0xaf: IMMWORD(ea); break; - case 0xb0: EA=Y; Y++; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0xb1: EA=Y; Y+=2; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0xb2: Y--; EA=Y; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0xb3: Y-=2; EA=Y; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0xb4: EA=Y; EAD=RM16(EAD); m6809_ICount-=3; break; - case 0xb5: EA=Y+SIGNED(B); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xb6: EA=Y+SIGNED(A); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xb7: EA=0; break; /* ILLEGAL*/ - case 0xb8: IMMBYTE(EA); EA=Y+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xb9: IMMWORD(ea); EA+=Y; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0xba: EA=0; break; /* ILLEGAL*/ - case 0xbb: EA=Y+D; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0xbc: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xbd: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); m6809_ICount-=8; break; - case 0xbe: EA=0; break; /* ILLEGAL*/ - case 0xbf: IMMWORD(ea); EAD=RM16(EAD); m6809_ICount-=8; 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=0; break; /* ILLEGAL*/ + case 0xb8: IMMBYTE(EA); EA=Y+SIGNED(EA); EAD=RM16(EAD); break; + case 0xb9: IMMWORD(ea); EA+=Y; EAD=RM16(EAD); break; + case 0xba: EA=0; 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(ea); EA+=PC; EAD=RM16(EAD); break; + case 0xbe: EA=0; break; /* ILLEGAL*/ + case 0xbf: IMMWORD(ea); EAD=RM16(EAD); break; - case 0xc0: EA=U; U++; m6809_ICount-=2; break; - case 0xc1: EA=U; U+=2; m6809_ICount-=3; break; - case 0xc2: U--; EA=U; m6809_ICount-=2; break; - case 0xc3: U-=2; EA=U; m6809_ICount-=3; break; - case 0xc4: EA=U; break; - case 0xc5: EA=U+SIGNED(B); m6809_ICount-=1; break; - case 0xc6: EA=U+SIGNED(A); m6809_ICount-=1; break; - case 0xc7: EA=0; break; /*ILLEGAL*/ - case 0xc8: IMMBYTE(EA); EA=U+SIGNED(EA); m6809_ICount-=1; break; - case 0xc9: IMMWORD(ea); EA+=U; m6809_ICount-=4; break; - case 0xca: EA=0; break; /*ILLEGAL*/ - case 0xcb: EA=U+D; m6809_ICount-=4; break; - case 0xcc: IMMBYTE(EA); EA=PC+SIGNED(EA); m6809_ICount-=1; break; - case 0xcd: IMMWORD(ea); EA+=PC; m6809_ICount-=5; break; - case 0xce: EA=0; break; /*ILLEGAL*/ - case 0xcf: IMMWORD(ea); m6809_ICount-=5; 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=0; break; /*ILLEGAL*/ + case 0xc8: IMMBYTE(EA); EA=U+SIGNED(EA); break; + case 0xc9: IMMWORD(ea); EA+=U; break; + case 0xca: EA=0; break; /*ILLEGAL*/ + case 0xcb: EA=U+D; break; + case 0xcc: IMMBYTE(EA); EA=PC+SIGNED(EA); break; + case 0xcd: IMMWORD(ea); EA+=PC; break; + case 0xce: EA=0; break; /*ILLEGAL*/ + case 0xcf: IMMWORD(ea); break; - case 0xd0: EA=U; U++; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0xd1: EA=U; U+=2; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0xd2: U--; EA=U; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0xd3: U-=2; EA=U; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0xd4: EA=U; EAD=RM16(EAD); m6809_ICount-=3; break; - case 0xd5: EA=U+SIGNED(B); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xd6: EA=U+SIGNED(A); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xd7: EA=0; break; /*ILLEGAL*/ - case 0xd8: IMMBYTE(EA); EA=U+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xd9: IMMWORD(ea); EA+=U; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0xda: EA=0; break; /*ILLEGAL*/ - case 0xdb: EA=U+D; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0xdc: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xdd: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); m6809_ICount-=8; break; - case 0xde: EA=0; break; /*ILLEGAL*/ - case 0xdf: IMMWORD(ea); EAD=RM16(EAD); m6809_ICount-=8; 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=0; break; /*ILLEGAL*/ + case 0xd8: IMMBYTE(EA); EA=U+SIGNED(EA); EAD=RM16(EAD); break; + case 0xd9: IMMWORD(ea); EA+=U; EAD=RM16(EAD); break; + case 0xda: EA=0; 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(ea); EA+=PC; EAD=RM16(EAD); break; + case 0xde: EA=0; break; /*ILLEGAL*/ + case 0xdf: IMMWORD(ea); EAD=RM16(EAD); break; - case 0xe0: EA=S; S++; m6809_ICount-=2; break; - case 0xe1: EA=S; S+=2; m6809_ICount-=3; break; - case 0xe2: S--; EA=S; m6809_ICount-=2; break; - case 0xe3: S-=2; EA=S; m6809_ICount-=3; break; - case 0xe4: EA=S; break; - case 0xe5: EA=S+SIGNED(B); m6809_ICount-=1; break; - case 0xe6: EA=S+SIGNED(A); m6809_ICount-=1; break; - case 0xe7: EA=0; break; /*ILLEGAL*/ - case 0xe8: IMMBYTE(EA); EA=S+SIGNED(EA); m6809_ICount-=1; break; - case 0xe9: IMMWORD(ea); EA+=S; m6809_ICount-=4; break; - case 0xea: EA=0; break; /*ILLEGAL*/ - case 0xeb: EA=S+D; m6809_ICount-=4; break; - case 0xec: IMMBYTE(EA); EA=PC+SIGNED(EA); m6809_ICount-=1; break; - case 0xed: IMMWORD(ea); EA+=PC; m6809_ICount-=5; break; - case 0xee: EA=0; break; /*ILLEGAL*/ - case 0xef: IMMWORD(ea); m6809_ICount-=5; 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=0; break; /*ILLEGAL*/ + case 0xe8: IMMBYTE(EA); EA=S+SIGNED(EA); break; + case 0xe9: IMMWORD(ea); EA+=S; break; + case 0xea: EA=0; break; /*ILLEGAL*/ + case 0xeb: EA=S+D; break; + case 0xec: IMMBYTE(EA); EA=PC+SIGNED(EA); break; + case 0xed: IMMWORD(ea); EA+=PC; break; + case 0xee: EA=0; break; /*ILLEGAL*/ + case 0xef: IMMWORD(ea); break; - case 0xf0: EA=S; S++; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0xf1: EA=S; S+=2; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0xf2: S--; EA=S; EAD=RM16(EAD); m6809_ICount-=5; break; - case 0xf3: S-=2; EA=S; EAD=RM16(EAD); m6809_ICount-=6; break; - case 0xf4: EA=S; EAD=RM16(EAD); m6809_ICount-=3; break; - case 0xf5: EA=S+SIGNED(B); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xf6: EA=S+SIGNED(A); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xf7: EA=0; break; /*ILLEGAL*/ - case 0xf8: IMMBYTE(EA); EA=S+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xf9: IMMWORD(ea); EA+=S; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0xfa: EA=0; break; /*ILLEGAL*/ - case 0xfb: EA=S+D; EAD=RM16(EAD); m6809_ICount-=7; break; - case 0xfc: IMMBYTE(EA); EA=PC+SIGNED(EA); EAD=RM16(EAD); m6809_ICount-=4; break; - case 0xfd: IMMWORD(ea); EA+=PC; EAD=RM16(EAD); m6809_ICount-=8; break; - case 0xfe: EA=0; break; /*ILLEGAL*/ - case 0xff: IMMWORD(ea); EAD=RM16(EAD); m6809_ICount-=8; 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=0; break; /*ILLEGAL*/ + case 0xf8: IMMBYTE(EA); EA=S+SIGNED(EA); EAD=RM16(EAD); break; + case 0xf9: IMMWORD(ea); EA+=S; EAD=RM16(EAD); break; + case 0xfa: EA=0; 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(ea); EA+=PC; EAD=RM16(EAD); break; + case 0xfe: EA=0; break; /*ILLEGAL*/ + case 0xff: IMMWORD(ea); EAD=RM16(EAD); break; } + m68_icount -= index_cycle_em[postbyte]; } - /************************************************************************** * Generic set_info **************************************************************************/ static CPU_SET_INFO( m6809 ) { + m68_state_t *m68_state = device->token; + switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + M6809_IRQ_LINE: set_irq_line(M6809_IRQ_LINE, info->i); break; - case CPUINFO_INT_INPUT_STATE + M6809_FIRQ_LINE: set_irq_line(M6809_FIRQ_LINE, info->i); break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(INPUT_LINE_NMI, info->i); break; + case CPUINFO_INT_INPUT_STATE + M6809_IRQ_LINE: set_irq_line(m68_state, M6809_IRQ_LINE, info->i); break; + case CPUINFO_INT_INPUT_STATE + M6809_FIRQ_LINE: set_irq_line(m68_state, M6809_FIRQ_LINE, info->i); break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(m68_state, INPUT_LINE_NMI, info->i); break; case CPUINFO_INT_PC: case CPUINFO_INT_REGISTER + M6809_PC: PC = info->i; CHANGE_PC; break; case CPUINFO_INT_SP: case CPUINFO_INT_REGISTER + M6809_S: S = info->i; break; - case CPUINFO_INT_REGISTER + M6809_CC: CC = info->i; CHECK_IRQ_LINES(); break; + case CPUINFO_INT_REGISTER + M6809_CC: CC = info->i; CHECK_IRQ_LINES(m68_state); break; case CPUINFO_INT_REGISTER + M6809_U: U = info->i; break; case CPUINFO_INT_REGISTER + M6809_A: A = info->i; break; case CPUINFO_INT_REGISTER + M6809_B: B = info->i; break; @@ -1125,10 +1080,12 @@ static CPU_SET_INFO( m6809 ) CPU_GET_INFO( m6809 ) { + m68_state_t *m68_state = (device != NULL) ? device->token : NULL; + switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(m6809); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(m68_state_t); break; case CPUINFO_INT_INPUT_LINES: info->i = 2; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -1149,9 +1106,9 @@ CPU_GET_INFO( m6809 ) case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; - case CPUINFO_INT_INPUT_STATE + M6809_IRQ_LINE: info->i = m6809.irq_state[M6809_IRQ_LINE]; break; - case CPUINFO_INT_INPUT_STATE + M6809_FIRQ_LINE: info->i = m6809.irq_state[M6809_FIRQ_LINE]; break; - case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = m6809.nmi_state; break; + case CPUINFO_INT_INPUT_STATE + M6809_IRQ_LINE: info->i = m68_state->irq_state[M6809_IRQ_LINE]; break; + case CPUINFO_INT_INPUT_STATE + M6809_FIRQ_LINE: info->i = m68_state->irq_state[M6809_FIRQ_LINE]; break; + case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = m68_state->nmi_state; break; case CPUINFO_INT_PREVIOUSPC: info->i = PPC; break; @@ -1177,7 +1134,7 @@ CPU_GET_INFO( m6809 ) case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(m6809); break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(m6809); break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m6809_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68_icount; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "M6809"); break; @@ -1188,25 +1145,25 @@ CPU_GET_INFO( m6809 ) case CPUINFO_STR_FLAGS: sprintf(info->s, "%c%c%c%c%c%c%c%c", - m6809.cc & 0x80 ? 'E':'.', - m6809.cc & 0x40 ? 'F':'.', - m6809.cc & 0x20 ? 'H':'.', - m6809.cc & 0x10 ? 'I':'.', - m6809.cc & 0x08 ? 'N':'.', - m6809.cc & 0x04 ? 'Z':'.', - m6809.cc & 0x02 ? 'V':'.', - m6809.cc & 0x01 ? 'C':'.'); + m68_state->cc & 0x80 ? 'E':'.', + m68_state->cc & 0x40 ? 'F':'.', + m68_state->cc & 0x20 ? 'H':'.', + m68_state->cc & 0x10 ? 'I':'.', + m68_state->cc & 0x08 ? 'N':'.', + m68_state->cc & 0x04 ? 'Z':'.', + m68_state->cc & 0x02 ? 'V':'.', + m68_state->cc & 0x01 ? 'C':'.'); break; - case CPUINFO_STR_REGISTER + M6809_PC: sprintf(info->s, "PC:%04X", m6809.pc.w.l); break; - case CPUINFO_STR_REGISTER + M6809_S: sprintf(info->s, "S:%04X", m6809.s.w.l); break; - case CPUINFO_STR_REGISTER + M6809_CC: sprintf(info->s, "CC:%02X", m6809.cc); break; - case CPUINFO_STR_REGISTER + M6809_U: sprintf(info->s, "U:%04X", m6809.u.w.l); break; - case CPUINFO_STR_REGISTER + M6809_A: sprintf(info->s, "A:%02X", m6809.d.b.h); break; - case CPUINFO_STR_REGISTER + M6809_B: sprintf(info->s, "B:%02X", m6809.d.b.l); break; - case CPUINFO_STR_REGISTER + M6809_X: sprintf(info->s, "X:%04X", m6809.x.w.l); break; - case CPUINFO_STR_REGISTER + M6809_Y: sprintf(info->s, "Y:%04X", m6809.y.w.l); break; - case CPUINFO_STR_REGISTER + M6809_DP: sprintf(info->s, "DP:%02X", m6809.dp.b.h); break; + case CPUINFO_STR_REGISTER + M6809_PC: sprintf(info->s, "PC:%04X", m68_state->pc.w.l); break; + case CPUINFO_STR_REGISTER + M6809_S: sprintf(info->s, "S:%04X", m68_state->s.w.l); break; + case CPUINFO_STR_REGISTER + M6809_CC: sprintf(info->s, "CC:%02X", m68_state->cc); break; + case CPUINFO_STR_REGISTER + M6809_U: sprintf(info->s, "U:%04X", m68_state->u.w.l); break; + case CPUINFO_STR_REGISTER + M6809_A: sprintf(info->s, "A:%02X", m68_state->d.b.h); break; + case CPUINFO_STR_REGISTER + M6809_B: sprintf(info->s, "B:%02X", m68_state->d.b.l); break; + case CPUINFO_STR_REGISTER + M6809_X: sprintf(info->s, "X:%04X", m68_state->x.w.l); break; + case CPUINFO_STR_REGISTER + M6809_Y: sprintf(info->s, "Y:%04X", m68_state->y.w.l); break; + case CPUINFO_STR_REGISTER + M6809_DP: sprintf(info->s, "DP:%02X", m68_state->dp.b.h); break; } } diff --git a/src/emu/cpu/m6809/m6809.h b/src/emu/cpu/m6809/m6809.h index 1b6c7972989..f5b72fb2e5f 100644 --- a/src/emu/cpu/m6809/m6809.h +++ b/src/emu/cpu/m6809/m6809.h @@ -51,4 +51,6 @@ CPU_GET_INFO( m6809e ); # define TRUE (!FALSE) #endif +CPU_DISASSEMBLE( m6809 ); + #endif /* __M6809_H__ */