summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/tms7000/tms70op.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/tms7000/tms70op.c')
-rw-r--r--src/emu/cpu/tms7000/tms70op.c3958
1 files changed, 3958 insertions, 0 deletions
diff --git a/src/emu/cpu/tms7000/tms70op.c b/src/emu/cpu/tms7000/tms70op.c
new file mode 100644
index 00000000000..15ff2c58968
--- /dev/null
+++ b/src/emu/cpu/tms7000/tms70op.c
@@ -0,0 +1,3958 @@
+/*****************************************************************************
+ *
+ * tms70op.c (Op code functions)
+ * Portable TMS7000 emulator (Texas Instruments 7000)
+ *
+ * Copyright (c) 2001 tim lindner, all rights reserved.
+ *
+ * - This source code is released as freeware for non-commercial purposes.
+ * - You are free to use and redistribute this code in modified or
+ * unmodified form, provided you list me in the credits.
+ * - If you modify this source code, you must add a notice to each modified
+ * source file that it has been changed. If you're a nice person, you
+ * will clearly mark each change too. :)
+ * - If you wish to use this for commercial purposes, please contact me at
+ * tlindner@macmess.org
+ * - This entire notice must remain in the source code.
+ *
+ *****************************************************************************/
+
+//SJE: Changed all references to ICount to icount (to match MAME requirements)
+
+#include "cpuintrf.h"
+
+static void illegal( void )
+{
+ /* This is a guess */
+ tms7000_icount -= 4;
+}
+
+static void adc_b2a( void )
+{
+ UINT16 t;
+
+ t = RDA + RDB + GET_C;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void adc_r2a( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) + RDA + GET_C;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void adc_r2b( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) + RDB + GET_C;
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void adc_r2r( void )
+{
+ UINT16 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = RM(i)+RM(j) + GET_C;
+ WM(j,t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void adc_i2a( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v + RDA + GET_C;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void adc_i2b( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v + RDB + GET_C;
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void adc_i2r( void )
+{
+ UINT16 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = i+RM(j) + GET_C;
+ WM(j,t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void add_b2a( void )
+{
+ UINT16 t;
+
+ t = RDA + RDB;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void add_r2a( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) + RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void add_r2b( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) + RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void add_r2r( void )
+{
+ UINT16 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = RM(i)+RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void add_i2a( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v + RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void add_i2b( void )
+{
+ UINT16 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v + RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void add_i2r( void )
+{
+ UINT16 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = i+RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void and_b2a( void )
+{
+ UINT8 t;
+
+ t = RDA & RDB;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void and_r2a( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) & RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void and_r2b( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) & RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void and_r2r( void )
+{
+ UINT8 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = RM(i) & RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void and_i2a( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v & RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void and_i2b( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v & RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void and_i2r( void )
+{
+ UINT8 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = i & RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void andp_a2p( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+ t = RDA & RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void andp_b2p( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+ t = RDB & RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+
+static void movp_i2p( void )
+{
+ UINT8 i,v;
+
+ IMMBYTE(i);
+ IMMBYTE(v);
+ WM( 0x0100+v, i);
+
+ CLR_NZC;
+ SET_N8(i);
+ SET_Z8(i);
+
+ tms7000_icount -= 11;
+}
+
+static void andp_i2p( void )
+{
+ UINT8 t;
+ UINT8 i,v;
+
+ IMMBYTE(i);
+ IMMBYTE(v);
+ t = i & RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+
+static void br_dir( void )
+{
+ PAIR p;
+
+ IMMWORD( p );
+ pPC = p.d;
+ CHANGE_PC;
+ tms7000_icount -= 10;
+}
+
+static void br_ind( void )
+{
+ UINT8 v;
+
+ IMMBYTE( v );
+ PC.w.l = RRF16(v);
+
+ tms7000_icount -= 9;
+}
+
+static void br_inx( void )
+{
+ PAIR p;
+
+ IMMWORD( p );
+ pPC = p.w.l + RDB;
+ CHANGE_PC;
+ tms7000_icount -= 12;
+}
+
+static void btjo_b2a( void )
+{
+ UINT8 t;
+
+ t = RDB & RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE( j );
+ pPC += j;
+ tms7000_icount -= 9;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 7;
+ }
+ CHANGE_PC;
+}
+
+static void btjo_r2a( void )
+{
+ UINT8 t,r;
+
+ IMMBYTE( r );
+ t = RM( r ) & RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE( j );
+ pPC += j;
+ tms7000_icount -= 9;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 7;
+ }
+ CHANGE_PC;
+}
+
+static void btjo_r2b( void )
+{
+ UINT8 t,r;
+
+ IMMBYTE(r);
+ t = RM(r) & RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 12;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 10;
+ }
+ CHANGE_PC;
+}
+
+static void btjo_r2r( void )
+{
+ UINT8 t,r,s;
+
+ IMMBYTE(r);
+ IMMBYTE(s);
+ t = RM(r) & RM(s);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 14;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 12;
+ }
+ CHANGE_PC;
+}
+
+static void btjo_i2a( void )
+{
+ UINT8 t,r;
+
+ IMMBYTE(r);
+ t = r & RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 11;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 9;
+ }
+ CHANGE_PC;
+}
+
+static void btjo_i2b( void )
+{
+ UINT8 t,i;
+
+ IMMBYTE(i);
+ t = i & RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 11;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 9;
+ }
+ CHANGE_PC;
+}
+
+static void btjo_i2r( void )
+{
+ UINT8 t,i,r;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+ t = i & RM(r);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 13;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 11;
+ }
+ CHANGE_PC;
+}
+
+static void btjop_ap( void )
+{
+ UINT8 t,p;
+
+ IMMBYTE(p);
+
+ t = RM(0x100+p) & RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 13;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 11;
+ }
+ CHANGE_PC;
+}
+
+static void btjop_bp( void )
+{
+ UINT8 t,p;
+
+ IMMBYTE(p);
+
+ t = RM(0x100+p) & RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 12;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 10;
+ }
+ CHANGE_PC;
+}
+
+static void btjop_ip( void )
+{
+ UINT8 t,p,i;
+
+ IMMBYTE(i);
+ IMMBYTE(p);
+
+ t = RM(0x100+p) & i;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 14;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 12;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_b2a( void )
+{
+ UINT8 t;
+
+ t = RDB & ~RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE( j );
+ pPC += j;
+ tms7000_icount -= 9;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 7;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_r2a( void )
+{
+ UINT8 t,r;
+
+ IMMBYTE( r );
+ t = RM( r ) & ~RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE( j );
+ pPC += j;
+ tms7000_icount -= 9;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 7;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_r2b( void )
+{
+ UINT8 t,r;
+
+ IMMBYTE(r);
+ t = RM(r) & ~RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 12;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 10;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_r2r( void )
+{
+ UINT8 t,r,s;
+
+ IMMBYTE(r);
+ IMMBYTE(s);
+ t = RM(r) & ~RM(s);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 14;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 12;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_i2a( void )
+{
+ UINT8 t,r;
+
+ IMMBYTE(r);
+ t = r & ~RDA;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 11;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 9;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_i2b( void )
+{
+ UINT8 t,i;
+
+ IMMBYTE(i);
+ t = i & ~RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 11;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 9;
+ }
+ CHANGE_PC;
+}
+
+static void btjz_i2r( void )
+{
+ UINT8 t,i,r;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+ t = i & ~RM(r);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 13;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 11;
+ }
+ CHANGE_PC;
+}
+
+static void btjzp_ap( void )
+{
+ UINT8 t,p;
+
+ IMMBYTE(p);
+
+ t = RDA & ~RM(0x100+p);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 13;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 11;
+ }
+ CHANGE_PC;
+}
+
+static void btjzp_bp( void )
+{
+ UINT8 t,p;
+
+ IMMBYTE(p);
+
+ t = RDB & ~RM(0x100+p);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 12;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 10;
+ }
+ CHANGE_PC;
+}
+
+static void btjzp_ip( void )
+{
+ UINT8 t,p,i;
+
+ IMMBYTE(i);
+ IMMBYTE(p);
+
+ t = i & ~RM(0x100+p);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if(t != 0)
+ {
+ INT8 j;
+
+ SIMMBYTE(j);
+ pPC += j;
+ tms7000_icount -= 14;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 12;
+ }
+ CHANGE_PC;
+}
+
+static void call_dir( void )
+{
+ PAIR tPC;
+
+ IMMWORD( tPC );
+ PUSHWORD( PC );
+ pPC = tPC.d;
+ CHANGE_PC;
+
+ tms7000_icount -= 14;
+}
+
+static void call_ind( void )
+{
+ UINT8 v;
+
+ IMMBYTE( v );
+ PUSHWORD( PC );
+ PC.w.l = RRF16(v);
+
+ tms7000_icount -= 13;
+}
+
+static void call_inx( void )
+{
+ PAIR tPC;
+
+ IMMWORD( tPC );
+ PUSHWORD( PC );
+ pPC = tPC.w.l + RDB;
+ CHANGE_PC;
+ tms7000_icount -= 16;
+}
+
+static void clr_a( void )
+{
+ WRA(0);
+ tms7000_icount -= 5;
+}
+
+static void clr_b( void )
+{
+ WRB(0);
+ tms7000_icount -= 5;
+}
+
+static void clr_r( void )
+{
+ UINT8 r;
+
+ IMMBYTE(r);
+ WM(r,0);
+ tms7000_icount -= 7;
+}
+
+static void clrc( void )
+{
+ UINT8 a;
+
+ a = RDA;
+
+ CLR_NZC;
+ SET_N8(a);
+ SET_Z8(a);
+
+ tms7000_icount -= 6;
+}
+
+static void cmp_ba( void )
+{
+ UINT16 t;
+
+ t = RDA - RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 5;
+}
+
+static void cmp_ra( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RDA - RM(r);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 8;
+}
+
+static void cmp_rb( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RDB - RM(r);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 8;
+}
+
+static void cmp_rr( void )
+{
+ UINT16 t;
+ UINT8 r,s;
+
+ IMMBYTE(r);
+ IMMBYTE(s);
+ t = RM(s) - RM(r);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 10;
+}
+
+static void cmp_ia( void )
+{
+ UINT16 t;
+ UINT8 i;
+
+ IMMBYTE(i);
+ t = RDA - i;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 7;
+}
+
+static void cmp_ib( void )
+{
+ UINT16 t;
+ UINT8 i;
+
+ IMMBYTE(i);
+ t = RDB - i;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 7;
+}
+
+static void cmp_ir( void )
+{
+ UINT16 t;
+ UINT8 i,r;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+ t = RM(r) - i;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 9;
+}
+
+static void cmpa_dir( void )
+{
+ UINT16 t;
+ PAIR i;
+
+ IMMWORD( i );
+ t = RDA - RM(i.w.l);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 12;
+}
+
+static void cmpa_ind( void )
+{
+ UINT16 t;
+ PAIR p;
+ INT8 i;
+
+ IMMBYTE(i);
+ p.w.l = RRF16(i);
+ t = RDA - RM(p.w.l);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 11;
+}
+
+static void cmpa_inx( void )
+{
+ UINT16 t;
+ PAIR i;
+
+ IMMWORD( i );
+ t = RDA - RM(i.w.l + RDB);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t==0 )
+ SETC;
+ else
+ SET_C8( ~t );
+
+ tms7000_icount -= 14;
+}
+
+static void dac_b2a( void )
+{
+ UINT16 t;
+
+ t = bcd_add( RDA, RDB );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void dac_r2a( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ t = bcd_add( RDA, RM(r) );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void dac_r2b( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ t = bcd_add( RDB, RM(r) );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void dac_r2r( void )
+{
+ UINT8 r,s;
+ UINT16 t;
+
+ IMMBYTE(s);
+ IMMBYTE(r);
+
+ t = bcd_add( RM(s), RM(r) );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 12;
+}
+
+static void dac_i2a( void )
+{
+ UINT8 i;
+ UINT16 t;
+
+ IMMBYTE(i);
+
+ t = bcd_add( i, RDA );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void dac_i2b( void )
+{
+ UINT8 i;
+ UINT16 t;
+
+ IMMBYTE(i);
+
+ t = bcd_add( i, RDB );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void dac_i2r( void )
+{
+ UINT8 i,r;
+ UINT16 t;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+
+ t = bcd_add( i, RM(r) );
+
+ if (pSR & SR_C)
+ t = bcd_add( t, 1 );
+
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+
+static void dec_a( void )
+{
+ UINT16 t;
+
+ t = RDA - 1;
+
+ WRA( t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+ SET_C8(~t);
+
+ tms7000_icount -= 5;
+}
+
+static void dec_b( void )
+{
+ UINT16 t;
+
+ t = RDB - 1;
+
+ WRB( t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+ SET_C8(~t);
+
+ tms7000_icount -= 5;
+}
+
+static void dec_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t = RM(r) - 1;
+
+ WM( r, t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+ SET_C8(~t);
+
+ tms7000_icount -= 7;
+}
+
+static void decd_a( void )
+{
+ PAIR t;
+
+ t.w.h = 0;
+ t.w.l = RRF16(0);
+ t.d -= 1;
+ WRF16(0,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ SET_C16(~(t.d));
+
+ tms7000_icount -= 9;
+}
+
+static void decd_b( void )
+{
+ PAIR t;
+
+ t.w.h = 0;
+ t.w.l = RRF16(1);
+ t.d -= 1;
+ WRF16(1,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ SET_C16(~(t.d));
+
+ tms7000_icount -= 9;
+}
+
+static void decd_r( void )
+{
+ UINT8 r;
+ PAIR t;
+
+ IMMBYTE(r);
+ t.w.h = 0;
+ t.w.l = RRF16(r);
+ t.d -= 1;
+ WRF16(r,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ SET_C16(~(t.d));
+
+ tms7000_icount -= 11;
+}
+
+static void dint( void )
+{
+ CLR_NZCI;
+ tms7000_icount -= 5;
+}
+
+static void djnz_a( void )
+{
+ UINT16 t;
+
+ t = RDA - 1;
+
+ WRA( t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t != 0 )
+ {
+ INT8 s;
+
+ SIMMBYTE(s);
+ pPC += s;
+ tms7000_icount -= 7;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 2;
+ }
+ CHANGE_PC;
+}
+
+static void djnz_b( void )
+{
+ UINT16 t;
+
+ t = RDB - 1;
+
+ WRB( t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t != 0 )
+ {
+ INT8 s;
+
+ SIMMBYTE(s);
+ pPC += s;
+ tms7000_icount -= 7;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 2;
+ }
+ CHANGE_PC;
+}
+
+static void djnz_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t = RM(r) - 1;
+
+ WM(r,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ if( t != 0 )
+ {
+ INT8 s;
+
+ SIMMBYTE(s);
+ pPC += s;
+ tms7000_icount -= 9;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 3;
+ }
+ CHANGE_PC;
+}
+
+static void dsb_b2a( void )
+{
+ UINT16 t;
+
+ t = bcd_sub( RDA, RDB );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void dsb_r2a( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ t = bcd_sub( RDA, RM(r) );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void dsb_r2b( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ t = bcd_sub( RDB, RM(r) );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void dsb_r2r( void )
+{
+ UINT8 r,s;
+ UINT16 t;
+
+ IMMBYTE(s);
+ IMMBYTE(r);
+
+ t = bcd_sub( RM(s), RM(r) );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 12;
+}
+
+static void dsb_i2a( void )
+{
+ UINT8 i;
+ UINT16 t;
+
+ IMMBYTE(i);
+
+ t = bcd_sub( RDA, i );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void dsb_i2b( void )
+{
+ UINT8 i;
+ UINT16 t;
+
+ IMMBYTE(i);
+
+ t = bcd_sub( RDB, i );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void dsb_i2r( void )
+{
+ UINT8 r,i;
+ UINT16 t;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+
+ t = bcd_sub( RM(r), i );
+
+ if( !(pSR & SR_C) )
+ t = bcd_sub( t, 1 );
+
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+
+static void eint( void )
+{
+ pSR |= (SR_N|SR_Z|SR_C|SR_I);
+ tms7000_icount -= 5;
+ tms7000_check_IRQ_lines();
+}
+
+static void idle( void )
+{
+ tms7000.idle_state = 1;
+ tms7000_icount -= 6;
+}
+
+static void inc_a( void )
+{
+ UINT16 t;
+
+ t = RDA + 1;
+
+ WRA( t );
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void inc_b( void )
+{
+ UINT16 t;
+
+ t = RDB + 1;
+
+ WRB( t );
+
+ CLR_NZC;
+ SET_C8(t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void inc_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t = RM(r) + 1;
+
+ WM( r, t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+ SET_C8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void inv_a( void )
+{
+ UINT16 t;
+
+ t = ~(RDA);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void inv_b( void )
+{
+ UINT16 t;
+
+ t = ~(RDA);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void inv_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t = ~(RM(r));
+
+ WM( r, t );
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void jc( void )
+{
+ if( pSR & SR_C )
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+}
+
+static void jeq( void )
+{
+ if( pSR & SR_Z )
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+}
+
+static void jl( void )
+{
+ if( pSR & SR_C )
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+ else
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+}
+
+static void jmp( void )
+{
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+}
+
+static void j_jn( void )
+{
+ if( pSR & SR_N )
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+
+}
+
+static void jne( void )
+{
+ if( pSR & SR_Z )
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+ else
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+}
+
+static void jp( void )
+{
+ if( pSR & (SR_Z|SR_N) )
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+ else
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+}
+
+static void jpz( void )
+{
+ if ((pSR & SR_N) == 0 && (pSR & SR_Z) != 0)
+ {
+ INT8 s;
+
+ SIMMBYTE( s );
+ pPC += s;
+ CHANGE_PC;
+ tms7000_icount -= 7;
+ }
+ else
+ {
+ pPC++;
+ tms7000_icount -= 5;
+ }
+}
+
+static void lda_dir( void )
+{
+ UINT16 t;
+ PAIR i;
+
+ IMMWORD( i );
+ t = RM(i.w.l);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+
+static void lda_ind( void )
+{
+ UINT16 t;
+ PAIR p;
+ INT8 i;
+
+ IMMBYTE(i);
+ p.w.l=RRF16(i);
+ t = RM(p.w.l);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void lda_inx( void )
+{
+ UINT16 t;
+ PAIR i;
+
+ IMMWORD( i );
+ t = RM(i.w.l + RDB);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 13;
+}
+
+static void ldsp( void )
+{
+ pSP = RDB;
+ tms7000_icount -= 5;
+}
+
+static void mov_a2b( void )
+{
+ UINT16 t;
+
+ t = RDA;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void mov_b2a( void )
+{
+ UINT16 t;
+
+ t = RDB;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+
+static void mov_a2r( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ t = RDA;
+ WM(r,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void mov_b2r( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ t = RDB;
+ WM(r,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void mov_r2a( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+ t = RM(r);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void mov_r2b( void )
+{
+ UINT8 r;
+ UINT16 t;
+
+ IMMBYTE(r);
+ t = RM(r);
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void mov_r2r( void )
+{
+ UINT8 r,s;
+ UINT16 t;
+
+ IMMBYTE(r);
+ IMMBYTE(s);
+ t = RM(r);
+ WM(s,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void mov_i2a( void )
+{
+ UINT16 t;
+
+ IMMBYTE(t);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void mov_i2b( void )
+{
+ UINT16 t;
+
+ IMMBYTE(t);
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void mov_i2r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(t);
+ IMMBYTE(r);
+ WM(r,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void movd_imm( void )
+{
+ PAIR t;
+ UINT8 r;
+
+ IMMWORD(t);
+ IMMBYTE(r);
+ WRF16(r,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 15;
+
+}
+
+static void movd_r( void )
+{
+ PAIR t;
+ UINT8 r,s;
+
+ IMMBYTE(r);
+ IMMBYTE(s);
+ t.w.l = RRF16(r);
+ WRF16(s,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 14;
+
+}
+
+static void movd_inx( void )
+{
+ PAIR t;
+ UINT8 r;
+
+ IMMWORD(t);
+ t.w.l += RDB;
+ IMMBYTE(r);
+ WRF16(r,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 17;
+}
+
+static void movp_a2p( void )
+{
+ UINT8 p;
+ UINT16 t;
+
+ IMMBYTE(p);
+ t=RDA;
+ WM( 0x0100+p,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void movp_b2p( void )
+{
+ UINT8 p;
+ UINT16 t;
+
+ IMMBYTE(p);
+ t=RDB;
+ WM( 0x0100+p,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+#if 0
+/* this appears to be unused */
+static void movp_r2p( void )
+{
+ UINT8 p,r;
+ UINT16 t;
+
+ IMMBYTE(r);
+ IMMBYTE(p);
+ t=RM(r);
+ WM( 0x0100+p,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+#endif
+
+static void movp_p2a( void )
+{
+ UINT8 p;
+ UINT16 t;
+
+ IMMBYTE(p);
+ t=RM(0x0100+p);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void movp_p2b( void )
+{
+ UINT8 p;
+ UINT16 t;
+
+ IMMBYTE(p);
+ t=RM(0x0100+p);
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void mpy_ba( void )
+{
+ PAIR t;
+
+ t.w.l = RDA * RDB;
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 43;
+
+}
+
+static void mpy_ra( void )
+{
+ PAIR t;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t.w.l = RDA * RM(r);
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 46;
+
+}
+
+static void mpy_rb( void )
+{
+ PAIR t;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t.w.l = RDB * RM(r);
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 46;
+
+}
+
+static void mpy_rr( void )
+{
+ PAIR t;
+ UINT8 r,s;
+
+ IMMBYTE(r);
+ IMMBYTE(s);
+
+ t.w.l = RM(s) * RM(r);
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 48;
+
+}
+
+static void mpy_ia( void )
+{
+ PAIR t;
+ UINT8 i;
+
+ IMMBYTE(i);
+
+ t.w.l = RDA * i;
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 45;
+
+}
+
+static void mpy_ib( void )
+{
+ PAIR t;
+ UINT8 i;
+
+ IMMBYTE(i);
+
+ t.w.l = RDB * i;
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 45;
+
+}
+
+static void mpy_ir( void )
+{
+ PAIR t;
+ UINT8 i,r;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+
+ t.w.l = RM(r) * i;
+
+ WRF16(0x01,t);
+
+ CLR_NZC;
+ SET_N8(t.b.h);
+ SET_Z8(t.b.h);
+
+ tms7000_icount -= 47;
+
+}
+
+static void nop( void )
+{
+ tms7000_icount -= 4;
+}
+
+static void or_b2a( void )
+{
+ UINT8 t;
+
+ t = RDA | RDB;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void or_r2a( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) | RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void or_r2b( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) | RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void or_r2r( void )
+{
+ UINT8 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = RM(i) | RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void or_i2a( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v | RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void or_i2b( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v | RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void or_i2r( void )
+{
+ UINT8 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = i | RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void orp_a2p( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+ t = RDA | RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void orp_b2p( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+ t = RDB | RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void orp_i2p( void )
+{
+ UINT8 t;
+ UINT8 i,v;
+
+ IMMBYTE(i);
+ IMMBYTE(v);
+ t = i | RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+
+static void pop_a( void )
+{
+ UINT16 t;
+
+ PULLBYTE(t);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void pop_b( void )
+{
+ UINT16 t;
+
+ PULLBYTE(t);
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void pop_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ PULLBYTE(t);
+ WM(r,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void pop_st( void )
+{
+ UINT16 t;
+
+ PULLBYTE(t);
+ pSR = t;
+
+ tms7000_icount -= 6;
+}
+
+static void push_a( void )
+{
+ UINT16 t;
+
+ t = RDA;
+ PUSHBYTE(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void push_b( void )
+{
+ UINT16 t;
+
+ t = RDB;
+ PUSHBYTE(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void push_r( void )
+{
+ UINT16 t;
+ INT8 r;
+
+ IMMBYTE(r);
+ t = RM(r);
+ PUSHBYTE(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void push_st( void )
+{
+ UINT16 t;
+ t = pSR;
+ PUSHBYTE(t);
+
+ tms7000_icount -= 6;
+}
+
+static void reti( void )
+{
+ PULLWORD( PC );
+ PULLBYTE( pSR );
+
+ tms7000_icount -= 9;
+ tms7000_check_IRQ_lines();
+}
+
+static void rets( void )
+{
+ PULLWORD( PC );
+ tms7000_icount -= 7;
+}
+
+static void rl_a( void )
+{
+ UINT16 t;
+
+ t = RDA << 1;
+
+ CLR_NZC;
+ SET_C8(t);
+
+ if( pSR & SR_C )
+ t |= 0x01;
+
+ SET_N8(t);
+ SET_Z8(t);
+ WRA(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rl_b( void )
+{
+ UINT16 t;
+
+ t = RDB << 1;
+
+ CLR_NZC;
+ SET_C8(t);
+
+ if( pSR & SR_C )
+ t |= 0x01;
+
+ SET_N8(t);
+ SET_Z8(t);
+ WRB(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rl_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RM(r) << 1;
+
+ CLR_NZC;
+ SET_C8(t);
+
+ if( pSR & SR_C )
+ t |= 0x01;
+
+ SET_N8(t);
+ SET_Z8(t);
+ WM(r,t);
+
+ tms7000_icount -= 7;
+}
+
+static void rlc_a( void )
+{
+ UINT16 t;
+ int old_carry;
+
+ old_carry = (pSR & SR_C);
+
+ t = RDA << 1;
+
+ CLR_NZC;
+ SET_C8(t);
+
+ if( old_carry )
+ t |= 0x01;
+
+ SET_N8(t);
+ SET_Z8(t);
+ WRA(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rlc_b( void )
+{
+ UINT16 t;
+ int old_carry;
+
+ old_carry = (pSR & SR_C);
+
+ t = RDB << 1;
+
+ CLR_NZC;
+ SET_C8(t);
+
+ if( old_carry )
+ t |= 0x01;
+
+ SET_N8(t);
+ SET_Z8(t);
+ WRB(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rlc_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+ int old_carry;
+
+ old_carry = (pSR & SR_C);
+
+ IMMBYTE(r);
+ t = RM(r) << 1;
+
+ CLR_NZC;
+ SET_C8(t);
+
+ if( old_carry )
+ t |= 0x01;
+
+ SET_N8(t);
+ SET_Z8(t);
+ WM(r,t);
+
+ tms7000_icount -= 7;
+}
+
+static void rr_a( void )
+{
+ UINT16 t;
+ int old_bit0;
+
+ t = RDA;
+
+ old_bit0 = t & 0x0001;
+ t = t >> 1;
+
+ CLR_NZC;
+
+ if( old_bit0 )
+ {
+ SETC;
+ t |= 0x80;
+ }
+
+ SET_N8(t);
+ SET_Z8(t);
+
+ WRA(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rr_b( void )
+{
+ UINT16 t;
+ int old_bit0;
+
+ t = RDB;
+
+ old_bit0 = t & 0x0001;
+ t = t >> 1;
+
+ CLR_NZC;
+
+ if( old_bit0 )
+ {
+ SETC;
+ t |= 0x80;
+ }
+
+ SET_N8(t);
+ SET_Z8(t);
+
+ WRB(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rr_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ int old_bit0;
+
+ IMMBYTE(r);
+ t = RM(r);
+
+ old_bit0 = t & 0x0001;
+ t = t >> 1;
+
+ CLR_NZC;
+
+ if( old_bit0 )
+ {
+ SETC;
+ t |= 0x80;
+ }
+
+ SET_N8(t);
+ SET_Z8(t);
+
+ WM(r,t);
+
+ tms7000_icount -= 7;
+}
+
+static void rrc_a( void )
+{
+ UINT16 t;
+ int old_bit0;
+
+ t = RDA;
+
+ old_bit0 = t & 0x0001;
+ /* Place carry bit in 9th position */
+ t |= ((pSR & SR_C) << 1);
+ t = t >> 1;
+
+ CLR_NZC;
+
+ if( old_bit0 )
+ SETC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ WRA(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rrc_b( void )
+{
+ UINT16 t;
+ int old_bit0;
+
+ t = RDB;
+
+ old_bit0 = t & 0x0001;
+ /* Place carry bit in 9th position */
+ t |= ((pSR & SR_C) << 1);
+ t = t >> 1;
+
+ CLR_NZC;
+
+ if( old_bit0 )
+ SETC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ WRB(t);
+
+ tms7000_icount -= 5;
+}
+
+static void rrc_r( void )
+{
+ UINT16 t;
+ UINT8 r;
+ int old_bit0;
+
+ IMMBYTE(r);
+ t = RM(r);
+
+ old_bit0 = t & 0x0001;
+ /* Place carry bit in 9th position */
+ t |= ((pSR & SR_C) << 1);
+ t = t >> 1;
+
+ CLR_NZC;
+
+ if( old_bit0 )
+ SETC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ WM(r,t);
+
+ tms7000_icount -= 7;
+}
+
+static void sbb_ba( void )
+{
+ UINT16 t;
+
+ t = RDA - RDB - ((pSR & SR_C) ? 0 : 1);
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void sbb_ra( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RDA - RM(r) - ((pSR & SR_C) ? 0 : 1);
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void sbb_rb( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RDB - RM(r) - ((pSR & SR_C) ? 0 : 1);
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void sbb_rr( void )
+{
+ UINT16 t;
+ UINT8 r,s;
+
+ IMMBYTE(s);
+ IMMBYTE(r);
+ t = RM(r) - RM(s) - ((pSR & SR_C) ? 0 : 1);
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void sbb_ia( void )
+{
+ UINT16 t;
+ UINT8 i;
+
+ IMMBYTE(i);
+ t = RDA - i - ((pSR & SR_C) ? 0 : 1);
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void sbb_ib( void )
+{
+ UINT16 t;
+ UINT8 i;
+
+ IMMBYTE(i);
+ t = RDB - i - ((pSR & SR_C) ? 0 : 1);
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void sbb_ir( void )
+{
+ UINT16 t;
+ UINT8 r,i;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+ t = RM(r) - i - ((pSR & SR_C) ? 0 : 1);
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void setc( void )
+{
+ CLR_NZC;
+ pSR |= (SR_C|SR_Z);
+
+ tms7000_icount -= 5;
+}
+
+static void sta_dir( void )
+{
+ UINT16 t;
+ PAIR i;
+
+ t = RDA;
+ IMMWORD( i );
+
+ WM(i.w.l,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}
+
+static void sta_ind( void )
+{
+ UINT16 t;
+ PAIR p;
+ INT8 r;
+
+ IMMBYTE(r);
+ p.w.l = RRF16(r);
+ t = RDA;
+ WM(p.w.l,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void sta_inx( void )
+{
+ UINT16 t;
+ PAIR i;
+
+ IMMWORD( i );
+ t = RDA;
+ WM(i.w.l+RDB,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 13;
+}
+
+static void stsp( void )
+{
+ WRB(pSP);
+
+ tms7000_icount -= 6;
+}
+
+static void sub_ba( void )
+{
+ UINT16 t;
+
+ t = RDA - RDB;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void sub_ra( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RDA - RM(r);
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void sub_rb( void )
+{
+ UINT16 t;
+ UINT8 r;
+
+ IMMBYTE(r);
+ t = RDB - RM(r);
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void sub_rr( void )
+{
+ UINT16 t;
+ UINT8 r,s;
+
+ IMMBYTE(s);
+ IMMBYTE(r);
+ t = RM(r) - RM(s);
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void sub_ia( void )
+{
+ UINT16 t;
+ UINT8 i;
+
+ IMMBYTE(i);
+ t = RDA - i;
+ WRA(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void sub_ib( void )
+{
+ UINT16 t;
+ UINT8 i;
+
+ IMMBYTE(i);
+ t = RDB - i;
+ WRB(t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void sub_ir( void )
+{
+ UINT16 t;
+ UINT8 r,i;
+
+ IMMBYTE(i);
+ IMMBYTE(r);
+ t = RM(r) - i;
+ WM(r,t);
+
+ CLR_NZC;
+ SET_C8(~t);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void trap_0( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfffe);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_1( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfffc);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_2( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfffa);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_3( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfff8);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_4( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfff6);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_5( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfff4);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_6( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfff2);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_7( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xfff0);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_8( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffee);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_9( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffec);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_10( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffea);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_11( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffe8);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_12( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffe6);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_13( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffe4);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_14( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffe2);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_15( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffe0);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_16( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffde);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_17( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffdc);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_18( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffda);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_19( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffd8);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_20( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffd6);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_21( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffd4);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_22( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffd2);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void trap_23( void )
+{
+ PUSHWORD( PC );
+ pPC = RM16(0xffd0);
+ CHANGE_PC;
+ tms7000_icount -= 14;
+}
+
+static void swap_a( void )
+{
+ UINT8 a,b;
+ UINT16 t;
+
+ a = b = RDA;
+
+ a <<= 4;
+ b >>= 4;
+ t = a+b;
+
+ WRA(t);
+
+ CLR_NZC;
+
+ pSR|=((t&0x0001)<<7);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -=8;
+}
+
+static void swap_b( void )
+{
+ UINT8 a,b;
+ UINT16 t;
+
+ a = b = RDB;
+
+ a <<= 4;
+ b >>= 4;
+ t = a+b;
+
+ WRB(t);
+
+ CLR_NZC;
+
+ pSR|=((t&0x0001)<<7);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -=8;
+}
+
+static void swap_r( void )
+{
+ UINT8 a,b,r;
+ UINT16 t;
+
+ IMMBYTE(r);
+ a = b = RM(r);
+
+ a <<= 4;
+ b >>= 4;
+ t = a+b;
+
+ WM(r,t);
+
+ CLR_NZC;
+
+ pSR|=((t&0x0001)<<7);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -=8;
+}
+
+static void swap_r_exl( void )
+{
+ UINT8 a,b,r;
+ UINT16 t;
+
+ IMMBYTE(r);
+
+ if (r == 0)
+ { /* opcode D7 00 (LVDP) mostly equivalent to MOVP P46,A??? (timings must
+ be different, possibly the microcode polls the state of the VDP RDY
+ line prior to doing the transfer) */
+ t=RM(0x012e);
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9; /* ?????? */
+ }
+ else
+ { /* stright swap Rn instruction */
+ a = b = RM(r);
+
+ a <<= 4;
+ b >>= 4;
+ t = a+b;
+
+ WM(r,t);
+
+ CLR_NZC;
+
+ pSR|=((t&0x0001)<<7);
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -=8;
+ }
+}
+
+static void tstb( void )
+{
+ UINT16 t;
+
+ t=RDB;
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void xchb_a( void )
+{
+ UINT16 t,u;
+
+ t = RDB;
+ u = RDA;
+
+ WRA(t);
+ WRB(u);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void xchb_b( void )
+{
+ UINT16 t;
+/* UINT16 u; */
+
+ t = RDB;
+/* u = RDB; */
+
+/* WRB(t); */
+/* WRB(u); */
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 6;
+}
+
+static void xchb_r( void )
+{
+ UINT16 t,u;
+ UINT8 r;
+
+ IMMBYTE(r);
+
+ t = RDB;
+ u = RM(r);
+
+ WRA(t);
+ WRB(u);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void xor_b2a( void )
+{
+ UINT8 t;
+
+ t = RDA ^ RDB;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 5;
+}
+
+static void xor_r2a( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) ^ RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void xor_r2b( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = RM(v) ^ RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 8;
+}
+
+static void xor_r2r( void )
+{
+ UINT8 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = RM(i) ^ RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void xor_i2a( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v ^ RDA;
+ WRA(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void xor_i2b( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+
+ t = v ^ RDB;
+ WRB(t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 7;
+}
+
+static void xor_i2r( void )
+{
+ UINT8 t;
+ UINT8 i,j;
+
+ IMMBYTE(i);
+ IMMBYTE(j);
+
+ t = i ^ RM(j);
+ WM(j,t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void xorp_a2p( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+ t = RDA ^ RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 10;
+}
+
+static void xorp_b2p( void )
+{
+ UINT8 t;
+ UINT8 v;
+
+ IMMBYTE(v);
+ t = RDB ^ RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 9;
+}
+
+static void xorp_i2p( void )
+{
+ UINT8 t;
+ UINT8 i,v;
+
+ IMMBYTE(i);
+ IMMBYTE(v);
+ t = i ^ RM( 0x0100 + v);
+ WM( 0x0100+v, t);
+
+ CLR_NZC;
+ SET_N8(t);
+ SET_Z8(t);
+
+ tms7000_icount -= 11;
+}