summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/cpu/tms7000/tms70tb.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/cpu/tms7000/tms70tb.c')
-rw-r--r--trunk/src/emu/cpu/tms7000/tms70tb.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/tms7000/tms70tb.c b/trunk/src/emu/cpu/tms7000/tms70tb.c
new file mode 100644
index 00000000000..b82bfadf54f
--- /dev/null
+++ b/trunk/src/emu/cpu/tms7000/tms70tb.c
@@ -0,0 +1,124 @@
+/*****************************************************************************
+ *
+ * tms70tb.c (function table)
+ * Portable TMS7000 emulator (Texas Instruments 7000)
+ *
+ * Copyright 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.
+ *
+ *****************************************************************************/
+
+static void (*const opfn[0x100])(tms7000_state *cpustate) = {
+/* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7,
+ 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */
+
+/* 0x0X */ nop, idle, illegal, illegal, illegal, eint, dint, setc,
+ pop_st, stsp, rets, reti, illegal, ldsp, push_st, illegal,
+
+/* 0x1X */ illegal, illegal, mov_r2a, and_r2a, or_r2a, xor_r2a, btjo_r2a,btjz_r2a,
+ add_r2a, adc_r2a, sub_ra, sbb_ra, mpy_ra, cmp_ra, dac_r2a, dsb_r2a,
+
+/* 0x2X */ illegal, illegal, mov_i2a, and_i2a, or_i2a, xor_i2a, btjo_i2a,btjz_i2a,
+ add_i2a, adc_i2a, sub_ia, sbb_ia, mpy_ia, cmp_ia, dac_i2a, dsb_i2a,
+
+/* 0x3X */ illegal, illegal, mov_r2b, and_r2b, or_r2b, xor_r2b, btjo_r2b,btjz_r2b,
+ add_r2b, adc_r2b, sub_rb, sbb_rb, mpy_rb, cmp_rb, dac_r2b, dsb_r2b,
+
+/* 0x4X */ illegal, illegal, mov_r2r, and_r2r, or_r2r, xor_r2r, btjo_r2r,btjz_r2r,
+ add_r2r, adc_r2r, sub_rr, sbb_rr, mpy_rr, cmp_rr, dac_r2r, dsb_r2r,
+
+/* 0x5X */ illegal, illegal, mov_i2b, and_i2b, or_i2b, xor_i2b, btjo_i2b,btjz_i2b,
+ add_i2b, adc_i2b, sub_ib, sbb_ib, mpy_ib, cmp_ib, dac_i2b, dsb_i2b,
+
+/* 0x6X */ illegal, illegal, mov_b2a, and_b2a, or_b2a, xor_b2a, btjo_b2a,btjz_b2a,
+ add_b2a, adc_b2a, sub_ba, sbb_ba, mpy_ba, cmp_ba, dac_b2a, dsb_b2a,
+
+/* 0x7X */ illegal, illegal, mov_i2r, and_i2r, or_i2r, xor_i2r, btjo_i2r,btjz_i2r,
+ add_i2r, adc_i2r, sub_ir, sbb_ir, mpy_ir, cmp_ir, dac_i2r, dsb_i2r,
+
+/* 0x8X */ movp_p2a,illegal, movp_a2p,andp_a2p,orp_a2p, xorp_a2p,btjop_ap,btjzp_ap,
+ movd_imm,illegal, lda_dir, sta_dir, br_dir, cmpa_dir,call_dir,illegal,
+
+/* 0x9X */ illegal, movp_p2b,movp_b2p,andp_b2p,orp_b2p, xorp_b2p,btjop_bp,btjzp_bp,
+ movd_r, illegal, lda_ind, sta_ind, br_ind, cmpa_ind,call_ind,illegal,
+
+/* 0xAX */ illegal, illegal, movp_i2p,andp_i2p,orp_i2p, xorp_i2p,btjop_ip,btjzp_ip,
+ movd_inx,illegal, lda_inx, sta_inx, br_inx, cmpa_inx,call_inx,illegal,
+
+/* 0xBX */ clrc, illegal, dec_a, inc_a, inv_a, clr_a, xchb_a, swap_a,
+ push_a, pop_a, djnz_a, decd_a, rr_a, rrc_a, rl_a, rlc_a,
+
+/* 0xCX */ mov_a2b, tstb, dec_b, inc_b, inv_b, clr_b, xchb_b, swap_b,
+ push_b, pop_b, djnz_b, decd_b, rr_b, rrc_b, rl_b, rlc_b,
+
+/* 0xDX */ mov_a2r, mov_b2r, dec_r, inc_r, inv_r, clr_r, xchb_r, swap_r,
+ push_r, pop_r, djnz_r, decd_r, rr_r, rrc_r, rl_r, rlc_r,
+
+/* 0xEX */ jmp, j_jn, jeq, jc, jp, jpz, jne, jl,
+ trap_23, trap_22, trap_21, trap_20, trap_19, trap_18, trap_17, trap_16,
+
+/* 0xFX */ trap_15, trap_14, trap_13, trap_12, trap_11, trap_10, trap_9, trap_8,
+ trap_7, trap_6, trap_5, trap_4, trap_3, trap_2, trap_1, trap_0
+};
+
+static void (*const opfn_exl[0x100])(tms7000_state *cpustate) = {
+/* 0xX0, 0xX1, 0xX2, 0xX3, 0xX4, 0xX5, 0xX6, 0xX7,
+ 0xX8, 0xX9, 0xXA, 0xXB, 0xXC, 0xXD, 0xXE, 0xXF */
+
+/* 0x0X */ nop, idle, illegal, illegal, illegal, eint, dint, setc,
+ pop_st, stsp, rets, reti, illegal, ldsp, push_st, illegal,
+
+/* 0x1X */ illegal, illegal, mov_r2a, and_r2a, or_r2a, xor_r2a, btjo_r2a,btjz_r2a,
+ add_r2a, adc_r2a, sub_ra, sbb_ra, mpy_ra, cmp_ra, dac_r2a, dsb_r2a,
+
+/* 0x2X */ illegal, illegal, mov_i2a, and_i2a, or_i2a, xor_i2a, btjo_i2a,btjz_i2a,
+ add_i2a, adc_i2a, sub_ia, sbb_ia, mpy_ia, cmp_ia, dac_i2a, dsb_i2a,
+
+/* 0x3X */ illegal, illegal, mov_r2b, and_r2b, or_r2b, xor_r2b, btjo_r2b,btjz_r2b,
+ add_r2b, adc_r2b, sub_rb, sbb_rb, mpy_rb, cmp_rb, dac_r2b, dsb_r2b,
+
+/* 0x4X */ illegal, illegal, mov_r2r, and_r2r, or_r2r, xor_r2r, btjo_r2r,btjz_r2r,
+ add_r2r, adc_r2r, sub_rr, sbb_rr, mpy_rr, cmp_rr, dac_r2r, dsb_r2r,
+
+/* 0x5X */ illegal, illegal, mov_i2b, and_i2b, or_i2b, xor_i2b, btjo_i2b,btjz_i2b,
+ add_i2b, adc_i2b, sub_ib, sbb_ib, mpy_ib, cmp_ib, dac_i2b, dsb_i2b,
+
+/* 0x6X */ illegal, illegal, mov_b2a, and_b2a, or_b2a, xor_b2a, btjo_b2a,btjz_b2a,
+ add_b2a, adc_b2a, sub_ba, sbb_ba, mpy_ba, cmp_ba, dac_b2a, dsb_b2a,
+
+/* 0x7X */ illegal, illegal, mov_i2r, and_i2r, or_i2r, xor_i2r, btjo_i2r,btjz_i2r,
+ add_i2r, adc_i2r, sub_ir, sbb_ir, mpy_ir, cmp_ir, dac_i2r, dsb_i2r,
+
+/* 0x8X */ movp_p2a,illegal, movp_a2p,andp_a2p,orp_a2p, xorp_a2p,btjop_ap,btjzp_ap,
+ movd_imm,illegal, lda_dir, sta_dir, br_dir, cmpa_dir,call_dir,illegal,
+
+/* 0x9X */ illegal, movp_p2b,movp_b2p,andp_b2p,orp_b2p, xorp_b2p,btjop_bp,btjzp_bp,
+ movd_r, illegal, lda_ind, sta_ind, br_ind, cmpa_ind,call_ind,illegal,
+
+/* 0xAX */ illegal, illegal, movp_i2p,andp_i2p,orp_i2p, xorp_i2p,btjop_ip,btjzp_ip,
+ movd_inx,illegal, lda_inx, sta_inx, br_inx, cmpa_inx,call_inx,illegal,
+
+/* 0xBX */ clrc, illegal, dec_a, inc_a, inv_a, clr_a, xchb_a, swap_a,
+ push_a, pop_a, djnz_a, decd_a, rr_a, rrc_a, rl_a, rlc_a,
+
+/* 0xCX */ mov_a2b, tstb, dec_b, inc_b, inv_b, clr_b, xchb_b, swap_b,
+ push_b, pop_b, djnz_b, decd_b, rr_b, rrc_b, rl_b, rlc_b,
+
+/* 0xDX */ mov_a2r, mov_b2r, dec_r, inc_r, inv_r, clr_r, xchb_r, swap_r_exl,
+ push_r, pop_r, djnz_r, decd_r, rr_r, rrc_r, rl_r, rlc_r,
+
+/* 0xEX */ jmp, j_jn, jeq, jc, jp, jpz, jne, jl,
+ trap_23, trap_22, trap_21, trap_20, trap_19, trap_18, trap_17, trap_16,
+
+/* 0xFX */ trap_15, trap_14, trap_13, trap_12, trap_11, trap_10, trap_9, trap_8,
+ trap_7, trap_6, trap_5, trap_4, trap_3, trap_2, trap_1, trap_0
+};