summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2015-02-25 01:21:57 +0100
committer hap <happppp@users.noreply.github.com>2015-02-25 01:21:57 +0100
commitf09190e7f33285e2c3a52585c43456d293d5b7b7 (patch)
treeb1d35097bc864f1a0231ad7b025e2ff4550ac4ef
parent06cdbbca4e397716075d079ebbf1dab3a9be4089 (diff)
added support for defining a 7seg decoder table for AMI S2000
-rw-r--r--src/emu/cpu/amis2000/amis2000.h8
-rw-r--r--src/emu/cpu/amis2000/amis2000op.inc3
-rw-r--r--src/emu/cpu/tms0980/tms0980.c2
-rw-r--r--src/emu/cpu/tms0980/tms0980.h6
-rw-r--r--src/mess/drivers/tispeak.c3
5 files changed, 16 insertions, 6 deletions
diff --git a/src/emu/cpu/amis2000/amis2000.h b/src/emu/cpu/amis2000/amis2000.h
index dc5bce68d68..250ee6dcb8b 100644
--- a/src/emu/cpu/amis2000/amis2000.h
+++ b/src/emu/cpu/amis2000/amis2000.h
@@ -34,6 +34,11 @@
#define MCFG_AMI_S2152_FOUT_CB(_devcb) \
amis2000_base_device::set_write_f_callback(*device, DEVCB_##_devcb);
+// S2000 has a hardcoded 7seg table, that (unlike S2200) is officially
+// uncustomizable, but wildfire proves to be an exception to that rule.
+#define MCFG_AMI_S2000_7SEG_DECODER(_pla) \
+ amis2000_base_device::set_7seg_table(*device, _ptr);
+
class amis2000_base_device : public cpu_device
{
@@ -46,6 +51,7 @@ public:
, m_bu_bits(bu_bits)
, m_callstack_bits(callstack_bits)
, m_callstack_depth(callstack_depth)
+ , m_7seg_table(NULL)
, m_read_k(*this)
, m_read_i(*this)
, m_read_d(*this)
@@ -61,6 +67,7 @@ public:
template<class _Object> static devcb_base &set_write_d_callback(device_t &device, _Object object) { return downcast<amis2000_base_device &>(device).m_write_d.set_callback(object); }
template<class _Object> static devcb_base &set_write_a_callback(device_t &device, _Object object) { return downcast<amis2000_base_device &>(device).m_write_a.set_callback(object); }
template<class _Object> static devcb_base &set_write_f_callback(device_t &device, _Object object) { return downcast<amis2000_base_device &>(device).m_write_f.set_callback(object); }
+ static void set_7seg_table(device_t &device, const UINT8 *ptr) { downcast<amis2000_base_device &>(device).m_7seg_table = ptr; }
protected:
// device-level overrides
@@ -115,6 +122,7 @@ protected:
UINT16 m_a; // 13-bit a-pins latch (master strobe latch)
// i/o handlers
+ const UINT8 *m_7seg_table;
devcb_read8 m_read_k;
devcb_read8 m_read_i;
devcb_read8 m_read_d;
diff --git a/src/emu/cpu/amis2000/amis2000op.inc b/src/emu/cpu/amis2000/amis2000op.inc
index 694ff86d172..85f285e66bc 100644
--- a/src/emu/cpu/amis2000/amis2000op.inc
+++ b/src/emu/cpu/amis2000/amis2000op.inc
@@ -216,7 +216,8 @@ void amis2000_base_device::op_disn()
// 0-F digits in bit order [DP]abcdefg
0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b, 0x77, 0x1f, 0x4e, 0x3d, 0x4f, 0x47
};
- m_d = lut_segment_decoder[m_acc] | (m_carry ? 0x80 : 0x00);
+ const UINT8 *ptr = (m_7seg_table != NULL) ? m_7seg_table : lut_segment_decoder;
+ m_d = ptr[m_acc] | (m_carry ? 0x80 : 0x00);
d_latch_out(true);
}
diff --git a/src/emu/cpu/tms0980/tms0980.c b/src/emu/cpu/tms0980/tms0980.c
index a010d26c9ab..a81bbf6a886 100644
--- a/src/emu/cpu/tms0980/tms0980.c
+++ b/src/emu/cpu/tms0980/tms0980.c
@@ -821,7 +821,7 @@ void tms0270_cpu_device::read_opcode()
void tms1xxx_cpu_device::write_o_output(UINT8 index)
{
// a hardcoded table is supported if the output pla is unknown
- m_o = (c_output_pla == NULL) ? m_opla->read(index) : c_output_pla[index];
+ m_o = (m_output_pla_table == NULL) ? m_opla->read(index) : m_output_pla_table[index];
m_write_o(0, m_o & m_o_mask, 0xffff);
}
diff --git a/src/emu/cpu/tms0980/tms0980.h b/src/emu/cpu/tms0980/tms0980.h
index b429b5b7720..2a44449ba1d 100644
--- a/src/emu/cpu/tms0980/tms0980.h
+++ b/src/emu/cpu/tms0980/tms0980.h
@@ -64,7 +64,7 @@ public:
, m_pc_bits(pc_bits)
, m_byte_bits(byte_bits)
, m_x_bits(x_bits)
- , c_output_pla(NULL)
+ , m_output_pla_table(NULL)
, m_read_k(*this)
, m_write_o(*this)
, m_write_r(*this)
@@ -76,7 +76,7 @@ public:
template<class _Object> static devcb_base &set_write_o_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_o.set_callback(object); }
template<class _Object> static devcb_base &set_write_r_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_r.set_callback(object); }
template<class _Object> static devcb_base &set_power_off_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_power_off.set_callback(object); }
- static void set_output_pla(device_t &device, const UINT16 *output_pla) { downcast<tms1xxx_cpu_device &>(device).c_output_pla = output_pla; }
+ static void set_output_pla(device_t &device, const UINT16 *output_pla) { downcast<tms1xxx_cpu_device &>(device).m_output_pla_table = output_pla; }
protected:
// device-level overrides
@@ -185,7 +185,7 @@ protected:
address_space *m_program;
address_space *m_data;
- const UINT16 *c_output_pla;
+ const UINT16 *m_output_pla_table;
devcb_read8 m_read_k;
devcb_write16 m_write_o;
devcb_write16 m_write_r;
diff --git a/src/mess/drivers/tispeak.c b/src/mess/drivers/tispeak.c
index 8a74f1dd71d..c9868a754e3 100644
--- a/src/mess/drivers/tispeak.c
+++ b/src/mess/drivers/tispeak.c
@@ -171,7 +171,8 @@ Touch & Tell:
Touch & Tell (US), 1981
- MCU: CD8012*
- TMS51xx: 4KB CD2610
- - notes: MCU is TMS1100 instead of TMS0270
+ - notes: MCU is TMS1100 instead of TMS0270. CD8010 is seen in some devices
+ too, maybe an earlier version?
Touch & Tell (UK), 1981
- MCU: ?* (assume same as US version)