summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/m6800/6800ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/m6800/6800ops.c')
-rw-r--r--src/emu/cpu/m6800/6800ops.c2140
1 files changed, 2140 insertions, 0 deletions
diff --git a/src/emu/cpu/m6800/6800ops.c b/src/emu/cpu/m6800/6800ops.c
new file mode 100644
index 00000000000..b964547c010
--- /dev/null
+++ b/src/emu/cpu/m6800/6800ops.c
@@ -0,0 +1,2140 @@
+
+/*
+
+HNZVC
+
+? = undefined
+* = affected
+- = unaffected
+0 = cleared
+1 = set
+# = ccr directly affected by instruction
+@ = special - carry set if bit 7 is set
+
+*/
+
+//INLINE void illegal( void )
+static void illegal( void )
+{
+ logerror("M6808: 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 )
+{
+ logerror("M6808: illegal opcode: address %04X, op %02X\n",PC,(int) M_RDOP_ARG(PC)&0xFF);
+ TAKE_TRAP;
+}
+#endif
+
+/* $00 ILLEGAL */
+
+/* $01 NOP */
+INLINE void nop( void )
+{
+}
+
+/* $02 ILLEGAL */
+
+/* $03 ILLEGAL */
+
+/* $04 LSRD inherent -0*-* */
+INLINE void lsrd (void)
+{
+ UINT16 t;
+ CLR_NZC; t = D; CC|=(t&0x0001);
+ t>>=1; SET_Z16(t); D=t;
+}
+
+/* $05 ASLD inherent ?**** */
+INLINE void asld (void)
+{
+ int r;
+ UINT16 t;
+ t = D; r=t<<1;
+ CLR_NZVC; SET_FLAGS16(t,t,r);
+ D=r;
+}
+
+/* $06 TAP inherent ##### */
+INLINE void tap (void)
+{
+ CC=A;
+ ONE_MORE_INSN();
+ CHECK_IRQ_LINES(); /* HJB 990417 */
+}
+
+/* $07 TPA inherent ----- */
+INLINE void tpa (void)
+{
+ A=CC;
+}
+
+/* $08 INX inherent --*-- */
+INLINE void inx (void)
+{
+ ++X;
+ CLR_Z; SET_Z16(X);
+}
+
+/* $09 DEX inherent --*-- */
+INLINE void dex (void)
+{
+ --X;
+ CLR_Z; SET_Z16(X);
+}
+
+/* $0a CLV */
+INLINE void clv (void)
+{
+ CLV;
+}
+
+/* $0b SEV */
+INLINE void sev (void)
+{
+ SEV;
+}
+
+/* $0c CLC */
+INLINE void clc (void)
+{
+ CLC;
+}
+
+/* $0d SEC */
+INLINE void sec (void)
+{
+ SEC;
+}
+
+/* $0e CLI */
+INLINE void cli (void)
+{
+ CLI;
+ ONE_MORE_INSN();
+ CHECK_IRQ_LINES(); /* HJB 990417 */
+}
+
+/* $0f SEI */
+INLINE void sei (void)
+{
+ SEI;
+ ONE_MORE_INSN();
+ CHECK_IRQ_LINES(); /* HJB 990417 */
+}
+
+/* $10 SBA inherent -**** */
+INLINE void sba (void)
+{
+ UINT16 t;
+ t=A-B;
+ CLR_NZVC; SET_FLAGS8(A,B,t);
+ A=t;
+}
+
+/* $11 CBA inherent -**** */
+INLINE void cba (void)
+{
+ UINT16 t;
+ t=A-B;
+ CLR_NZVC; SET_FLAGS8(A,B,t);
+}
+
+/* $12 ILLEGAL */
+INLINE void undoc1 (void)
+{
+ X += RM( S + 1 );
+}
+
+/* $13 ILLEGAL */
+INLINE void undoc2 (void)
+{
+ X += RM( S + 1 );
+}
+
+
+/* $14 ILLEGAL */
+
+/* $15 ILLEGAL */
+
+/* $16 TAB inherent -**0- */
+INLINE void tab (void)
+{
+ B=A;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $17 TBA inherent -**0- */
+INLINE void tba (void)
+{
+ A=B;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $18 XGDX inherent ----- */ /* HD63701YO only */
+INLINE void xgdx( void )
+{
+ UINT16 t = X;
+ X = D;
+ D=t;
+}
+
+/* $19 DAA inherent (A) -**0* */
+INLINE void daa( void )
+{
+ UINT8 msn, lsn;
+ UINT16 t, cf = 0;
+ msn=A & 0xf0; lsn=A & 0x0f;
+ if( lsn>0x09 || CC&0x20 ) cf |= 0x06;
+ if( msn>0x80 && lsn>0x09 ) cf |= 0x60;
+ if( msn>0x90 || CC&0x01 ) cf |= 0x60;
+ t = cf + A;
+ CLR_NZV; /* keep carry from previous operation */
+ SET_NZ8((UINT8)t); SET_C8(t);
+ A = t;
+}
+
+/* $1a ILLEGAL */
+
+#if (HAS_HD63701)
+/* $1a SLP */ /* HD63701YO only */
+INLINE void slp (void)
+{
+ /* wait for next IRQ (same as waiting of wai) */
+ m6808.wai_state |= HD63701_SLP;
+ EAT_CYCLES;
+}
+#endif
+
+/* $1b ABA inherent ***** */
+INLINE void aba (void)
+{
+ UINT16 t;
+ t=A+B;
+ CLR_HNZVC; SET_FLAGS8(A,B,t); SET_H(A,B,t);
+ A=t;
+}
+
+/* $1c ILLEGAL */
+
+/* $1d ILLEGAL */
+
+/* $1e ILLEGAL */
+
+/* $1f ILLEGAL */
+
+/* $20 BRA relative ----- */
+INLINE void bra( void )
+{
+ UINT8 t;
+ IMMBYTE(t);PC+=SIGNED(t);CHANGE_PC();
+ /* speed up busy loops */
+ if (t==0xfe) EAT_CYCLES;
+}
+
+/* $21 BRN relative ----- */
+INLINE void brn( void )
+{
+ UINT8 t;
+ IMMBYTE(t);
+}
+
+/* $22 BHI relative ----- */
+INLINE void bhi( void )
+{
+ UINT8 t;
+ BRANCH(!(CC&0x05));
+}
+
+/* $23 BLS relative ----- */
+INLINE void bls( void )
+{
+ UINT8 t;
+ BRANCH(CC&0x05);
+}
+
+/* $24 BCC relative ----- */
+INLINE void bcc( void )
+{
+ UINT8 t;
+ BRANCH(!(CC&0x01));
+}
+
+/* $25 BCS relative ----- */
+INLINE void bcs( void )
+{
+ UINT8 t;
+ BRANCH(CC&0x01);
+}
+
+/* $26 BNE relative ----- */
+INLINE void bne( void )
+{
+ UINT8 t;
+ BRANCH(!(CC&0x04));
+}
+
+/* $27 BEQ relative ----- */
+INLINE void beq( void )
+{
+ UINT8 t;
+ BRANCH(CC&0x04);
+}
+
+/* $28 BVC relative ----- */
+INLINE void bvc( void )
+{
+ UINT8 t;
+ BRANCH(!(CC&0x02));
+}
+
+/* $29 BVS relative ----- */
+INLINE void bvs( void )
+{
+ UINT8 t;
+ BRANCH(CC&0x02);
+}
+
+/* $2a BPL relative ----- */
+INLINE void bpl( void )
+{
+ UINT8 t;
+ BRANCH(!(CC&0x08));
+}
+
+/* $2b BMI relative ----- */
+INLINE void bmi( void )
+{
+ UINT8 t;
+ BRANCH(CC&0x08);
+}
+
+/* $2c BGE relative ----- */
+INLINE void bge( void )
+{
+ UINT8 t;
+ BRANCH(!NXORV);
+}
+
+/* $2d BLT relative ----- */
+INLINE void blt( void )
+{
+ UINT8 t;
+ BRANCH(NXORV);
+}
+
+/* $2e BGT relative ----- */
+INLINE void bgt( void )
+{
+ UINT8 t;
+ BRANCH(!(NXORV||CC&0x04));
+}
+
+/* $2f BLE relative ----- */
+INLINE void ble( void )
+{
+ UINT8 t;
+ BRANCH(NXORV||CC&0x04);
+}
+
+/* $30 TSX inherent ----- */
+INLINE void tsx (void)
+{
+ X = ( S + 1 );
+}
+
+/* $31 INS inherent ----- */
+INLINE void ins (void)
+{
+ ++S;
+}
+
+/* $32 PULA inherent ----- */
+INLINE void pula (void)
+{
+ PULLBYTE(m6808.d.b.h);
+}
+
+/* $33 PULB inherent ----- */
+INLINE void pulb (void)
+{
+ PULLBYTE(m6808.d.b.l);
+}
+
+/* $34 DES inherent ----- */
+INLINE void des (void)
+{
+ --S;
+}
+
+/* $35 TXS inherent ----- */
+INLINE void txs (void)
+{
+ S = ( X - 1 );
+}
+
+/* $36 PSHA inherent ----- */
+INLINE void psha (void)
+{
+ PUSHBYTE(m6808.d.b.h);
+}
+
+/* $37 PSHB inherent ----- */
+INLINE void pshb (void)
+{
+ PUSHBYTE(m6808.d.b.l);
+}
+
+/* $38 PULX inherent ----- */
+INLINE void pulx (void)
+{
+ PULLWORD(pX);
+}
+
+/* $39 RTS inherent ----- */
+INLINE void rts( void )
+{
+ PULLWORD(pPC);
+ CHANGE_PC();
+}
+
+/* $3a ABX inherent ----- */
+INLINE void abx( void )
+{
+ X += B;
+}
+
+/* $3b RTI inherent ##### */
+INLINE void rti( void )
+{
+ PULLBYTE(CC);
+ PULLBYTE(B);
+ PULLBYTE(A);
+ PULLWORD(pX);
+ PULLWORD(pPC);
+ CHANGE_PC();
+ CHECK_IRQ_LINES(); /* HJB 990417 */
+}
+
+/* $3c PSHX inherent ----- */
+INLINE void pshx (void)
+{
+ PUSHWORD(pX);
+}
+
+/* $3d MUL inherent --*-@ */
+INLINE void mul( void )
+{
+ UINT16 t;
+ t=A*B;
+ CLR_C; if(t&0x80) SEC;
+ D=t;
+}
+
+/* $3e WAI inherent ----- */
+INLINE void wai( void )
+{
+ /*
+ * WAI stacks the entire machine state on the
+ * hardware stack, then waits for an interrupt.
+ */
+ m6808.wai_state |= M6800_WAI;
+ PUSHWORD(pPC);
+ PUSHWORD(pX);
+ PUSHBYTE(A);
+ PUSHBYTE(B);
+ PUSHBYTE(CC);
+ CHECK_IRQ_LINES();
+ if (m6808.wai_state & M6800_WAI) EAT_CYCLES;
+}
+
+/* $3f SWI absolute indirect ----- */
+INLINE void swi( void )
+{
+ PUSHWORD(pPC);
+ PUSHWORD(pX);
+ PUSHBYTE(A);
+ PUSHBYTE(B);
+ PUSHBYTE(CC);
+ SEI;
+ PCD = RM16(0xfffa);
+ CHANGE_PC();
+}
+
+/* $40 NEGA inherent ?**** */
+INLINE void nega( void )
+{
+ UINT16 r;
+ r=-A;
+ CLR_NZVC; SET_FLAGS8(0,A,r);
+ A=r;
+}
+
+/* $41 ILLEGAL */
+
+/* $42 ILLEGAL */
+
+/* $43 COMA inherent -**01 */
+INLINE void coma( void )
+{
+ A = ~A;
+ CLR_NZV; SET_NZ8(A); SEC;
+}
+
+/* $44 LSRA inherent -0*-* */
+INLINE void lsra( void )
+{
+ CLR_NZC; CC|=(A&0x01);
+ A>>=1; SET_Z8(A);
+}
+
+/* $45 ILLEGAL */
+
+/* $46 RORA inherent -**-* */
+INLINE void rora( void )
+{
+ UINT8 r;
+ r=(CC&0x01)<<7;
+ CLR_NZC; CC|=(A&0x01);
+ r |= A>>1; SET_NZ8(r);
+ A=r;
+}
+
+/* $47 ASRA inherent ?**-* */
+INLINE void asra( void )
+{
+ CLR_NZC; CC|=(A&0x01);
+ A>>=1; A|=((A&0x40)<<1);
+ SET_NZ8(A);
+}
+
+/* $48 ASLA inherent ?**** */
+INLINE void asla( void )
+{
+ UINT16 r;
+ r=A<<1;
+ CLR_NZVC; SET_FLAGS8(A,A,r);
+ A=r;
+}
+
+/* $49 ROLA inherent -**** */
+INLINE void rola( void )
+{
+ UINT16 t,r;
+ t = A; r = CC&0x01; r |= t<<1;
+ CLR_NZVC; SET_FLAGS8(t,t,r);
+ A=r;
+}
+
+/* $4a DECA inherent -***- */
+INLINE void deca( void )
+{
+ --A;
+ CLR_NZV; SET_FLAGS8D(A);
+}
+
+/* $4b ILLEGAL */
+
+/* $4c INCA inherent -***- */
+INLINE void inca( void )
+{
+ ++A;
+ CLR_NZV; SET_FLAGS8I(A);
+}
+
+/* $4d TSTA inherent -**0- */
+INLINE void tsta( void )
+{
+ CLR_NZVC; SET_NZ8(A);
+}
+
+/* $4e ILLEGAL */
+
+/* $4f CLRA inherent -0100 */
+INLINE void clra( void )
+{
+ A=0;
+ CLR_NZVC; SEZ;
+}
+
+/* $50 NEGB inherent ?**** */
+INLINE void negb( void )
+{
+ UINT16 r;
+ r=-B;
+ CLR_NZVC; SET_FLAGS8(0,B,r);
+ B=r;
+}
+
+/* $51 ILLEGAL */
+
+/* $52 ILLEGAL */
+
+/* $53 COMB inherent -**01 */
+INLINE void comb( void )
+{
+ B = ~B;
+ CLR_NZV; SET_NZ8(B); SEC;
+}
+
+/* $54 LSRB inherent -0*-* */
+INLINE void lsrb( void )
+{
+ CLR_NZC; CC|=(B&0x01);
+ B>>=1; SET_Z8(B);
+}
+
+/* $55 ILLEGAL */
+
+/* $56 RORB inherent -**-* */
+INLINE void rorb( void )
+{
+ UINT8 r;
+ r=(CC&0x01)<<7;
+ CLR_NZC; CC|=(B&0x01);
+ r |= B>>1; SET_NZ8(r);
+ B=r;
+}
+
+/* $57 ASRB inherent ?**-* */
+INLINE void asrb( void )
+{
+ CLR_NZC; CC|=(B&0x01);
+ B>>=1; B|=((B&0x40)<<1);
+ SET_NZ8(B);
+}
+
+/* $58 ASLB inherent ?**** */
+INLINE void aslb( void )
+{
+ UINT16 r;
+ r=B<<1;
+ CLR_NZVC; SET_FLAGS8(B,B,r);
+ B=r;
+}
+
+/* $59 ROLB inherent -**** */
+INLINE void rolb( void )
+{
+ UINT16 t,r;
+ t = B; r = CC&0x01; r |= t<<1;
+ CLR_NZVC; SET_FLAGS8(t,t,r);
+ B=r;
+}
+
+/* $5a DECB inherent -***- */
+INLINE void decb( void )
+{
+ --B;
+ CLR_NZV; SET_FLAGS8D(B);
+}
+
+/* $5b ILLEGAL */
+
+/* $5c INCB inherent -***- */
+INLINE void incb( void )
+{
+ ++B;
+ CLR_NZV; SET_FLAGS8I(B);
+}
+
+/* $5d TSTB inherent -**0- */
+INLINE void tstb( void )
+{
+ CLR_NZVC; SET_NZ8(B);
+}
+
+/* $5e ILLEGAL */
+
+/* $5f CLRB inherent -0100 */
+INLINE void clrb( void )
+{
+ B=0;
+ CLR_NZVC; SEZ;
+}
+
+/* $60 NEG indexed ?**** */
+INLINE void neg_ix( void )
+{
+ UINT16 r,t;
+ IDXBYTE(t); r=-t;
+ CLR_NZVC; SET_FLAGS8(0,t,r);
+ WM(EAD,r);
+}
+
+/* $61 AIM --**0- */ /* HD63701YO only */
+INLINE void aim_ix( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ IDXBYTE(r);
+ r &= t;
+ CLR_NZV; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $62 OIM --**0- */ /* HD63701YO only */
+INLINE void oim_ix( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ IDXBYTE(r);
+ r |= t;
+ CLR_NZV; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $63 COM indexed -**01 */
+INLINE void com_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); t = ~t;
+ CLR_NZV; SET_NZ8(t); SEC;
+ WM(EAD,t);
+}
+
+/* $64 LSR indexed -0*-* */
+INLINE void lsr_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); CLR_NZC; CC|=(t&0x01);
+ t>>=1; SET_Z8(t);
+ WM(EAD,t);
+}
+
+/* $65 EIM --**0- */ /* HD63701YO only */
+INLINE void eim_ix( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ IDXBYTE(r);
+ r ^= t;
+ CLR_NZV; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $66 ROR indexed -**-* */
+INLINE void ror_ix( void )
+{
+ UINT8 t,r;
+ IDXBYTE(t); r=(CC&0x01)<<7;
+ CLR_NZC; CC|=(t&0x01);
+ r |= t>>1; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $67 ASR indexed ?**-* */
+INLINE void asr_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); CLR_NZC; CC|=(t&0x01);
+ t>>=1; t|=((t&0x40)<<1);
+ SET_NZ8(t);
+ WM(EAD,t);
+}
+
+/* $68 ASL indexed ?**** */
+INLINE void asl_ix( void )
+{
+ UINT16 t,r;
+ IDXBYTE(t); r=t<<1;
+ CLR_NZVC; SET_FLAGS8(t,t,r);
+ WM(EAD,r);
+}
+
+/* $69 ROL indexed -**** */
+INLINE void rol_ix( void )
+{
+ UINT16 t,r;
+ IDXBYTE(t); r = CC&0x01; r |= t<<1;
+ CLR_NZVC; SET_FLAGS8(t,t,r);
+ WM(EAD,r);
+}
+
+/* $6a DEC indexed -***- */
+INLINE void dec_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); --t;
+ CLR_NZV; SET_FLAGS8D(t);
+ WM(EAD,t);
+}
+
+/* $6b TIM --**0- */ /* HD63701YO only */
+INLINE void tim_ix( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ IDXBYTE(r);
+ r &= t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $6c INC indexed -***- */
+INLINE void inc_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); ++t;
+ CLR_NZV; SET_FLAGS8I(t);
+ WM(EAD,t);
+}
+
+/* $6d TST indexed -**0- */
+INLINE void tst_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); CLR_NZVC; SET_NZ8(t);
+}
+
+/* $6e JMP indexed ----- */
+INLINE void jmp_ix( void )
+{
+ INDEXED; PC=EA; CHANGE_PC();
+}
+
+/* $6f CLR indexed -0100 */
+INLINE void clr_ix( void )
+{
+ INDEXED; WM(EAD,0);
+ CLR_NZVC; SEZ;
+}
+
+/* $70 NEG extended ?**** */
+INLINE void neg_ex( void )
+{
+ UINT16 r,t;
+ EXTBYTE(t); r=-t;
+ CLR_NZVC; SET_FLAGS8(0,t,r);
+ WM(EAD,r);
+}
+
+/* $71 AIM --**0- */ /* HD63701YO only */
+INLINE void aim_di( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ DIRBYTE(r);
+ r &= t;
+ CLR_NZV; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $72 OIM --**0- */ /* HD63701YO only */
+INLINE void oim_di( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ DIRBYTE(r);
+ r |= t;
+ CLR_NZV; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $73 COM extended -**01 */
+INLINE void com_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); t = ~t;
+ CLR_NZV; SET_NZ8(t); SEC;
+ WM(EAD,t);
+}
+
+/* $74 LSR extended -0*-* */
+INLINE void lsr_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t);
+ CLR_NZC;
+ CC|=(t&0x01);
+ t>>=1;
+ SET_Z8(t);
+ WM(EAD,t);
+}
+
+/* $75 EIM --**0- */ /* HD63701YO only */
+INLINE void eim_di( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ DIRBYTE(r);
+ r ^= t;
+ CLR_NZV; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $76 ROR extended -**-* */
+INLINE void ror_ex( void )
+{
+ UINT8 t,r;
+ EXTBYTE(t); r=(CC&0x01)<<7;
+ CLR_NZC; CC|=(t&0x01);
+ r |= t>>1; SET_NZ8(r);
+ WM(EAD,r);
+}
+
+/* $77 ASR extended ?**-* */
+INLINE void asr_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); CLR_NZC; CC|=(t&0x01);
+ t>>=1; t|=((t&0x40)<<1);
+ SET_NZ8(t);
+ WM(EAD,t);
+}
+
+/* $78 ASL extended ?**** */
+INLINE void asl_ex( void )
+{
+ UINT16 t,r;
+ EXTBYTE(t); r=t<<1;
+ CLR_NZVC; SET_FLAGS8(t,t,r);
+ WM(EAD,r);
+}
+
+/* $79 ROL extended -**** */
+INLINE void rol_ex( void )
+{
+ UINT16 t,r;
+ EXTBYTE(t); r = CC&0x01; r |= t<<1;
+ CLR_NZVC; SET_FLAGS8(t,t,r);
+ WM(EAD,r);
+}
+
+/* $7a DEC extended -***- */
+INLINE void dec_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); --t;
+ CLR_NZV; SET_FLAGS8D(t);
+ WM(EAD,t);
+}
+
+/* $7b TIM --**0- */ /* HD63701YO only */
+INLINE void tim_di( void )
+{
+ UINT8 t, r;
+ IMMBYTE(t);
+ DIRBYTE(r);
+ r &= t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $7c INC extended -***- */
+INLINE void inc_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); ++t;
+ CLR_NZV; SET_FLAGS8I(t);
+ WM(EAD,t);
+}
+
+/* $7d TST extended -**0- */
+INLINE void tst_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); CLR_NZVC; SET_NZ8(t);
+}
+
+/* $7e JMP extended ----- */
+INLINE void jmp_ex( void )
+{
+ EXTENDED; PC=EA; CHANGE_PC(); /* TS 971002 */
+}
+
+/* $7f CLR extended -0100 */
+INLINE void clr_ex( void )
+{
+ EXTENDED; WM(EAD,0);
+ CLR_NZVC; SEZ;
+}
+
+/* $80 SUBA immediate ?**** */
+INLINE void suba_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+ A = r;
+}
+
+/* $81 CMPA immediate ?**** */
+INLINE void cmpa_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+}
+
+/* $82 SBCA immediate ?**** */
+INLINE void sbca_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = A-t-(CC&0x01);
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+ A = r;
+}
+
+/* $83 SUBD immediate -**** */
+INLINE void subd_im( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ IMMWORD(b);
+ d = D;
+ r = d - b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D = r;
+}
+
+/* $84 ANDA immediate -**0- */
+INLINE void anda_im( void )
+{
+ UINT8 t;
+ IMMBYTE(t); A &= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $85 BITA immediate -**0- */
+INLINE void bita_im( void )
+{
+ UINT8 t,r;
+ IMMBYTE(t); r = A&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $86 LDA immediate -**0- */
+INLINE void lda_im( void )
+{
+ IMMBYTE(A);
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* is this a legal instruction? */
+/* $87 STA immediate -**0- */
+INLINE void sta_im( void )
+{
+ CLR_NZV; SET_NZ8(A);
+ IMM8; WM(EAD,A);
+}
+
+/* $88 EORA immediate -**0- */
+INLINE void eora_im( void )
+{
+ UINT8 t;
+ IMMBYTE(t); A ^= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $89 ADCA immediate ***** */
+INLINE void adca_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = A+t+(CC&0x01);
+ CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r);
+ A = r;
+}
+
+/* $8a ORA immediate -**0- */
+INLINE void ora_im( void )
+{
+ UINT8 t;
+ IMMBYTE(t); A |= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $8b ADDA immediate ***** */
+INLINE void adda_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = A+t;
+ CLR_HNZVC; SET_FLAGS8(A,t,r); SET_H(A,t,r);
+ A = r;
+}
+
+/* $8c CMPX immediate -***- */
+INLINE void cmpx_im( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ IMMWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZV;
+ SET_NZ16(r); SET_V16(d,b.d,r);
+}
+
+/* $8c CPX immediate -**** (6803) */
+INLINE void cpx_im( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ IMMWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZVC; SET_FLAGS16(d,b.d,r);
+}
+
+
+/* $8d BSR ----- */
+INLINE void bsr( void )
+{
+ UINT8 t;
+ IMMBYTE(t);
+ PUSHWORD(pPC);
+ PC += SIGNED(t);
+ CHANGE_PC(); /* TS 971002 */
+}
+
+/* $8e LDS immediate -**0- */
+INLINE void lds_im( void )
+{
+ IMMWORD(m6808.s);
+ CLR_NZV;
+ SET_NZ16(S);
+}
+
+/* $8f STS immediate -**0- */
+INLINE void sts_im( void )
+{
+ CLR_NZV;
+ SET_NZ16(S);
+ IMM16;
+ WM16(EAD,&m6808.s);
+}
+
+/* $90 SUBA direct ?**** */
+INLINE void suba_di( void )
+{
+ UINT16 t,r;
+ DIRBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+ A = r;
+}
+
+/* $91 CMPA direct ?**** */
+INLINE void cmpa_di( void )
+{
+ UINT16 t,r;
+ DIRBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+}
+
+/* $92 SBCA direct ?**** */
+INLINE void sbca_di( void )
+{
+ UINT16 t,r;
+ DIRBYTE(t); r = A-t-(CC&0x01);
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+ A = r;
+}
+
+/* $93 SUBD direct -**** */
+INLINE void subd_di( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ DIRWORD(b);
+ d = D;
+ r = d - b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D=r;
+}
+
+/* $94 ANDA direct -**0- */
+INLINE void anda_di( void )
+{
+ UINT8 t;
+ DIRBYTE(t); A &= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $95 BITA direct -**0- */
+INLINE void bita_di( void )
+{
+ UINT8 t,r;
+ DIRBYTE(t); r = A&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $96 LDA direct -**0- */
+INLINE void lda_di( void )
+{
+ DIRBYTE(A);
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $97 STA direct -**0- */
+INLINE void sta_di( void )
+{
+ CLR_NZV; SET_NZ8(A);
+ DIRECT; WM(EAD,A);
+}
+
+/* $98 EORA direct -**0- */
+INLINE void eora_di( void )
+{
+ UINT8 t;
+ DIRBYTE(t); A ^= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $99 ADCA direct ***** */
+INLINE void adca_di( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ DIRBYTE(t); A |= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $9b ADDA direct ***** */
+INLINE void adda_di( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ DIRWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZV;
+ SET_NZ16(r); SET_V16(d,b.d,r);
+}
+
+/* $9c CPX direct -**** (6803) */
+INLINE void cpx_di( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ DIRWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZVC; SET_FLAGS16(d,b.d,r);
+}
+
+/* $9d JSR direct ----- */
+INLINE void jsr_di( void )
+{
+ DIRECT;
+ PUSHWORD(pPC);
+ PC = EA;
+ CHANGE_PC();
+}
+
+/* $9e LDS direct -**0- */
+INLINE void lds_di( void )
+{
+ DIRWORD(m6808.s);
+ CLR_NZV;
+ SET_NZ16(S);
+}
+
+/* $9f STS direct -**0- */
+INLINE void sts_di( void )
+{
+ CLR_NZV;
+ SET_NZ16(S);
+ DIRECT;
+ WM16(EAD,&m6808.s);
+}
+
+/* $a0 SUBA indexed ?**** */
+INLINE void suba_ix( void )
+{
+ UINT16 t,r;
+ IDXBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+ A = r;
+}
+
+/* $a1 CMPA indexed ?**** */
+INLINE void cmpa_ix( void )
+{
+ UINT16 t,r;
+ IDXBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+}
+
+/* $a2 SBCA indexed ?**** */
+INLINE void sbca_ix( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ IDXWORD(b);
+ d = D;
+ r = d - b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D = r;
+}
+
+/* $a4 ANDA indexed -**0- */
+INLINE void anda_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); A &= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $a5 BITA indexed -**0- */
+INLINE void bita_ix( void )
+{
+ UINT8 t,r;
+ IDXBYTE(t); r = A&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $a6 LDA indexed -**0- */
+INLINE void lda_ix( void )
+{
+ IDXBYTE(A);
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $a7 STA indexed -**0- */
+INLINE void sta_ix( void )
+{
+ CLR_NZV; SET_NZ8(A);
+ INDEXED; WM(EAD,A);
+}
+
+/* $a8 EORA indexed -**0- */
+INLINE void eora_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); A ^= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $a9 ADCA indexed ***** */
+INLINE void adca_ix( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ IDXBYTE(t); A |= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $ab ADDA indexed ***** */
+INLINE void adda_ix( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ IDXWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZV;
+ SET_NZ16(r); SET_V16(d,b.d,r);
+}
+
+/* $ac CPX indexed -**** (6803)*/
+INLINE void cpx_ix( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ IDXWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZVC; SET_FLAGS16(d,b.d,r);
+}
+
+/* $ad JSR indexed ----- */
+INLINE void jsr_ix( void )
+{
+ INDEXED;
+ PUSHWORD(pPC);
+ PC = EA;
+ CHANGE_PC();
+}
+
+/* $ae LDS indexed -**0- */
+INLINE void lds_ix( void )
+{
+ IDXWORD(m6808.s);
+ CLR_NZV;
+ SET_NZ16(S);
+}
+
+/* $af STS indexed -**0- */
+INLINE void sts_ix( void )
+{
+ CLR_NZV;
+ SET_NZ16(S);
+ INDEXED;
+ WM16(EAD,&m6808.s);
+}
+
+/* $b0 SUBA extended ?**** */
+INLINE void suba_ex( void )
+{
+ UINT16 t,r;
+ EXTBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+ A = r;
+}
+
+/* $b1 CMPA extended ?**** */
+INLINE void cmpa_ex( void )
+{
+ UINT16 t,r;
+ EXTBYTE(t); r = A-t;
+ CLR_NZVC; SET_FLAGS8(A,t,r);
+}
+
+/* $b2 SBCA extended ?**** */
+INLINE void sbca_ex( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ EXTWORD(b);
+ d = D;
+ r = d - b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D=r;
+}
+
+/* $b4 ANDA extended -**0- */
+INLINE void anda_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); A &= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $b5 BITA extended -**0- */
+INLINE void bita_ex( void )
+{
+ UINT8 t,r;
+ EXTBYTE(t); r = A&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $b6 LDA extended -**0- */
+INLINE void lda_ex( void )
+{
+ EXTBYTE(A);
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $b7 STA extended -**0- */
+INLINE void sta_ex( void )
+{
+ CLR_NZV; SET_NZ8(A);
+ EXTENDED; WM(EAD,A);
+}
+
+/* $b8 EORA extended -**0- */
+INLINE void eora_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); A ^= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $b9 ADCA extended ***** */
+INLINE void adca_ex( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ EXTBYTE(t); A |= t;
+ CLR_NZV; SET_NZ8(A);
+}
+
+/* $bb ADDA extended ***** */
+INLINE void adda_ex( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ EXTWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZV;
+ SET_NZ16(r); SET_V16(d,b.d,r);
+}
+
+/* $bc CPX extended -**** (6803) */
+INLINE void cpx_ex( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ EXTWORD(b);
+ d = X;
+ r = d - b.d;
+ CLR_NZVC; SET_FLAGS16(d,b.d,r);
+}
+
+/* $bd JSR extended ----- */
+INLINE void jsr_ex( void )
+{
+ EXTENDED;
+ PUSHWORD(pPC);
+ PC = EA;
+ CHANGE_PC();
+}
+
+/* $be LDS extended -**0- */
+INLINE void lds_ex( void )
+{
+ EXTWORD(m6808.s);
+ CLR_NZV;
+ SET_NZ16(S);
+}
+
+/* $bf STS extended -**0- */
+INLINE void sts_ex( void )
+{
+ CLR_NZV;
+ SET_NZ16(S);
+ EXTENDED;
+ WM16(EAD,&m6808.s);
+}
+
+/* $c0 SUBB immediate ?**** */
+INLINE void subb_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+ B = r;
+}
+
+/* $c1 CMPB immediate ?**** */
+INLINE void cmpb_im( void )
+{
+ UINT16 t,r;
+ IMMBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+}
+
+/* $c2 SBCB immediate ?**** */
+INLINE void sbcb_im( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ IMMWORD(b);
+ d = D;
+ r = d + b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D = r;
+}
+
+/* $c4 ANDB immediate -**0- */
+INLINE void andb_im( void )
+{
+ UINT8 t;
+ IMMBYTE(t); B &= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $c5 BITB immediate -**0- */
+INLINE void bitb_im( void )
+{
+ UINT8 t,r;
+ IMMBYTE(t); r = B&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $c6 LDB immediate -**0- */
+INLINE void ldb_im( void )
+{
+ IMMBYTE(B);
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* is this a legal instruction? */
+/* $c7 STB immediate -**0- */
+INLINE void stb_im( void )
+{
+ CLR_NZV; SET_NZ8(B);
+ IMM8; WM(EAD,B);
+}
+
+/* $c8 EORB immediate -**0- */
+INLINE void eorb_im( void )
+{
+ UINT8 t;
+ IMMBYTE(t); B ^= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $c9 ADCB immediate ***** */
+INLINE void adcb_im( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ IMMBYTE(t); B |= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $cb ADDB immediate ***** */
+INLINE void addb_im( void )
+{
+ UINT16 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 )
+{
+ IMMWORD(m6808.d);
+ CLR_NZV;
+ SET_NZ16(D);
+}
+
+/* is this a legal instruction? */
+/* $cd STD immediate -**0- */
+INLINE void std_im( void )
+{
+ IMM16;
+ CLR_NZV;
+ SET_NZ16(D);
+ WM16(EAD,&m6808.d);
+}
+
+/* $ce LDX immediate -**0- */
+INLINE void ldx_im( void )
+{
+ IMMWORD(m6808.x);
+ CLR_NZV;
+ SET_NZ16(X);
+}
+
+/* $cf STX immediate -**0- */
+INLINE void stx_im( void )
+{
+ CLR_NZV;
+ SET_NZ16(X);
+ IMM16;
+ WM16(EAD,&m6808.x);
+}
+
+/* $d0 SUBB direct ?**** */
+INLINE void subb_di( void )
+{
+ UINT16 t,r;
+ DIRBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+ B = r;
+}
+
+/* $d1 CMPB direct ?**** */
+INLINE void cmpb_di( void )
+{
+ UINT16 t,r;
+ DIRBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+}
+
+/* $d2 SBCB direct ?**** */
+INLINE void sbcb_di( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ DIRWORD(b);
+ d = D;
+ r = d + b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D = r;
+}
+
+/* $d4 ANDB direct -**0- */
+INLINE void andb_di( void )
+{
+ UINT8 t;
+ DIRBYTE(t); B &= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $d5 BITB direct -**0- */
+INLINE void bitb_di( void )
+{
+ UINT8 t,r;
+ DIRBYTE(t); r = B&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $d6 LDB direct -**0- */
+INLINE void ldb_di( void )
+{
+ DIRBYTE(B);
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $d7 STB direct -**0- */
+INLINE void stb_di( void )
+{
+ CLR_NZV; SET_NZ8(B);
+ DIRECT; WM(EAD,B);
+}
+
+/* $d8 EORB direct -**0- */
+INLINE void eorb_di( void )
+{
+ UINT8 t;
+ DIRBYTE(t); B ^= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $d9 ADCB direct ***** */
+INLINE void adcb_di( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ DIRBYTE(t); B |= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $db ADDB direct ***** */
+INLINE void addb_di( void )
+{
+ UINT16 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 )
+{
+ DIRWORD(m6808.d);
+ CLR_NZV;
+ SET_NZ16(D);
+}
+
+/* $dd STD direct -**0- */
+INLINE void std_di( void )
+{
+ DIRECT;
+ CLR_NZV;
+ SET_NZ16(D);
+ WM16(EAD,&m6808.d);
+}
+
+/* $de LDX direct -**0- */
+INLINE void ldx_di( void )
+{
+ DIRWORD(m6808.x);
+ CLR_NZV;
+ SET_NZ16(X);
+}
+
+/* $dF STX direct -**0- */
+INLINE void stx_di( void )
+{
+ CLR_NZV;
+ SET_NZ16(X);
+ DIRECT;
+ WM16(EAD,&m6808.x);
+}
+
+/* $e0 SUBB indexed ?**** */
+INLINE void subb_ix( void )
+{
+ UINT16 t,r;
+ IDXBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+ B = r;
+}
+
+/* $e1 CMPB indexed ?**** */
+INLINE void cmpb_ix( void )
+{
+ UINT16 t,r;
+ IDXBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+}
+
+/* $e2 SBCB indexed ?**** */
+INLINE void sbcb_ix( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ IDXWORD(b);
+ d = D;
+ r = d + b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D = r;
+}
+
+/* $e4 ANDB indexed -**0- */
+INLINE void andb_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); B &= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $e5 BITB indexed -**0- */
+INLINE void bitb_ix( void )
+{
+ UINT8 t,r;
+ IDXBYTE(t); r = B&t;
+ CLR_NZV; SET_NZ8(r);
+}
+
+/* $e6 LDB indexed -**0- */
+INLINE void ldb_ix( void )
+{
+ IDXBYTE(B);
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $e7 STB indexed -**0- */
+INLINE void stb_ix( void )
+{
+ CLR_NZV; SET_NZ8(B);
+ INDEXED; WM(EAD,B);
+}
+
+/* $e8 EORB indexed -**0- */
+INLINE void eorb_ix( void )
+{
+ UINT8 t;
+ IDXBYTE(t); B ^= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $e9 ADCB indexed ***** */
+INLINE void adcb_ix( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ IDXBYTE(t); B |= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $eb ADDB indexed ***** */
+INLINE void addb_ix( void )
+{
+ UINT16 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 )
+{
+ IDXWORD(m6808.d);
+ CLR_NZV;
+ SET_NZ16(D);
+}
+
+/* $ec ADCX immediate -**** NSC8105 only. Flags are a guess - copied from addb_im() */
+INLINE void adcx_im( void )
+{
+ UINT16 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 )
+{
+ INDEXED;
+ CLR_NZV;
+ SET_NZ16(D);
+ WM16(EAD,&m6808.d);
+}
+
+/* $ee LDX indexed -**0- */
+INLINE void ldx_ix( void )
+{
+ IDXWORD(m6808.x);
+ CLR_NZV;
+ SET_NZ16(X);
+}
+
+/* $ef STX indexed -**0- */
+INLINE void stx_ix( void )
+{
+ CLR_NZV;
+ SET_NZ16(X);
+ INDEXED;
+ WM16(EAD,&m6808.x);
+}
+
+/* $f0 SUBB extended ?**** */
+INLINE void subb_ex( void )
+{
+ UINT16 t,r;
+ EXTBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+ B = r;
+}
+
+/* $f1 CMPB extended ?**** */
+INLINE void cmpb_ex( void )
+{
+ UINT16 t,r;
+ EXTBYTE(t); r = B-t;
+ CLR_NZVC; SET_FLAGS8(B,t,r);
+}
+
+/* $f2 SBCB extended ?**** */
+INLINE void sbcb_ex( void )
+{
+ UINT16 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 )
+{
+ UINT32 r,d;
+ PAIR b;
+ EXTWORD(b);
+ d = D;
+ r = d + b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ D = r;
+}
+
+/* $f4 ANDB extended -**0- */
+INLINE void andb_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t);
+ B &= t;
+ CLR_NZV;
+ SET_NZ8(B);
+}
+
+/* $f5 BITB extended -**0- */
+INLINE void bitb_ex( void )
+{
+ UINT8 t,r;
+ EXTBYTE(t);
+ r = B & t;
+ CLR_NZV;
+ SET_NZ8(r);
+}
+
+/* $f6 LDB extended -**0- */
+INLINE void ldb_ex( void )
+{
+ EXTBYTE(B);
+ CLR_NZV;
+ SET_NZ8(B);
+}
+
+/* $f7 STB extended -**0- */
+INLINE void stb_ex( void )
+{
+ CLR_NZV; SET_NZ8(B);
+ EXTENDED; WM(EAD,B);
+}
+
+/* $f8 EORB extended -**0- */
+INLINE void eorb_ex( void )
+{
+ UINT8 t;
+ EXTBYTE(t); B ^= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $f9 ADCB extended ***** */
+INLINE void adcb_ex( void )
+{
+ UINT16 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 )
+{
+ UINT8 t;
+ EXTBYTE(t); B |= t;
+ CLR_NZV; SET_NZ8(B);
+}
+
+/* $fb ADDB extended ***** */
+INLINE void addb_ex( void )
+{
+ UINT16 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 )
+{
+ EXTWORD(m6808.d);
+ CLR_NZV;
+ SET_NZ16(D);
+}
+
+/* $fc ADDX extended -**** NSC8105 only. Flags are a guess */
+INLINE void addx_ex( void )
+{
+ UINT32 r,d;
+ PAIR b;
+ EXTWORD(b);
+ d = X;
+ r = d + b.d;
+ CLR_NZVC;
+ SET_FLAGS16(d,b.d,r);
+ X = r;
+}
+
+/* $fd STD extended -**0- */
+INLINE void std_ex( void )
+{
+ EXTENDED;
+ CLR_NZV;
+ SET_NZ16(D);
+ WM16(EAD,&m6808.d);
+}
+
+/* $fe LDX extended -**0- */
+INLINE void ldx_ex( void )
+{
+ EXTWORD(m6808.x);
+ CLR_NZV;
+ SET_NZ16(X);
+}
+
+/* $ff STX extended -**0- */
+INLINE void stx_ex( void )
+{
+ CLR_NZV;
+ SET_NZ16(X);
+ EXTENDED;
+ WM16(EAD,&m6808.x);
+}