mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
tms1000: add read/write prefix to k/r/o devcb names
This commit is contained in:
parent
1c4c29aff6
commit
6fe19f4032
@ -110,7 +110,7 @@ void tms0270_cpu_device::dynamic_output()
|
||||
// standard O-output
|
||||
if (m_o_latch != m_o_latch_prev)
|
||||
{
|
||||
write_o_output(m_o_latch);
|
||||
write_o_reg(m_o_latch);
|
||||
m_o_latch_prev = m_o_latch;
|
||||
}
|
||||
}
|
||||
@ -118,7 +118,7 @@ void tms0270_cpu_device::dynamic_output()
|
||||
// standard R-output
|
||||
if (m_r != m_r_prev)
|
||||
{
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_r_output(m_r);
|
||||
m_r_prev = m_r;
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ protected:
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual void write_o_output(u8 index) override { tms1k_base_device::write_o_output(index); }
|
||||
virtual void write_o_reg(u8 index) override { tms1k_base_device::write_o_reg(index); }
|
||||
virtual u8 read_k_input() override;
|
||||
virtual void dynamic_output() override;
|
||||
|
||||
|
@ -113,11 +113,11 @@ void tms0970_cpu_device::device_reset()
|
||||
|
||||
|
||||
// i/o handling
|
||||
void tms0970_cpu_device::write_o_output(u8 index)
|
||||
void tms0970_cpu_device::write_o_reg(u8 index)
|
||||
{
|
||||
m_o_index = index;
|
||||
m_o = m_spla->read(index);
|
||||
m_write_o(m_o & m_o_mask);
|
||||
write_o_output(m_o);
|
||||
}
|
||||
|
||||
|
||||
@ -133,6 +133,6 @@ void tms0970_cpu_device::op_setr()
|
||||
void tms0970_cpu_device::op_tdo()
|
||||
{
|
||||
// TDO: transfer digits to output
|
||||
write_o_output(m_a & 0x7);
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_o_reg(m_a & 0x7);
|
||||
write_r_output(m_r);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual void write_o_output(u8 index) override;
|
||||
virtual void write_o_reg(u8 index) override;
|
||||
|
||||
virtual void op_setr() override;
|
||||
virtual void op_tdo() override;
|
||||
|
@ -258,5 +258,5 @@ void tms0980_cpu_device::op_sbl()
|
||||
void tms1980_cpu_device::op_tdo()
|
||||
{
|
||||
// TDO: transfer accumulator and status(not status_latch!) to O-output
|
||||
write_o_output(m_status << 4 | m_a);
|
||||
write_o_reg(m_status << 4 | m_a);
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ protected:
|
||||
// overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual void write_o_output(u8 index) override { tms1k_base_device::write_o_output(index); }
|
||||
virtual void write_o_reg(u8 index) override { tms1k_base_device::write_o_reg(index); }
|
||||
|
||||
virtual void op_setr() override { tms1k_base_device::op_setr(); }
|
||||
virtual void op_tdo() override;
|
||||
|
@ -80,7 +80,7 @@ void tms1100_cpu_device::op_setr()
|
||||
// TMS1100 manual simply says that X must be less than 4
|
||||
u8 index = BIT(m_x, m_x_bits - 1) << 4 | m_y;
|
||||
m_r = m_r | (1 << index);
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_r_output(m_r);
|
||||
}
|
||||
|
||||
void tms1100_cpu_device::op_rstr()
|
||||
@ -88,5 +88,5 @@ void tms1100_cpu_device::op_rstr()
|
||||
// RSTR: see SETR
|
||||
u8 index = BIT(m_x, m_x_bits - 1) << 4 | m_y;
|
||||
m_r = m_r & ~(1 << index);
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_r_output(m_r);
|
||||
}
|
||||
|
@ -86,14 +86,16 @@ tms1k_base_device::tms1k_base_device(const machine_config &mconfig, device_type
|
||||
m_byte_bits(byte_bits),
|
||||
m_x_bits(x_bits),
|
||||
m_stack_levels(stack_levels),
|
||||
m_output_pla_table(nullptr),
|
||||
m_read_k(*this),
|
||||
m_write_o(*this),
|
||||
m_write_r(*this),
|
||||
m_read_j(*this),
|
||||
m_read_r(*this),
|
||||
m_power_off(*this),
|
||||
m_read_ctl(*this),
|
||||
m_write_ctl(*this),
|
||||
m_write_pdc(*this),
|
||||
m_output_pla_table(nullptr),
|
||||
m_decode_micro(*this)
|
||||
{ }
|
||||
|
||||
@ -140,6 +142,8 @@ void tms1k_base_device::device_start()
|
||||
m_read_k.resolve_safe(0);
|
||||
m_write_o.resolve_safe();
|
||||
m_write_r.resolve_safe();
|
||||
m_read_j.resolve_safe(0);
|
||||
m_read_r.resolve_safe(0);
|
||||
m_power_off.resolve_safe();
|
||||
m_read_ctl.resolve_safe(0);
|
||||
m_write_ctl.resolve_safe();
|
||||
@ -281,9 +285,9 @@ void tms1k_base_device::device_reset()
|
||||
|
||||
// clear outputs
|
||||
m_r = 0;
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_o_output(0);
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_r_output(0);
|
||||
write_o_reg(0);
|
||||
write_r_output(0);
|
||||
m_power_off(0);
|
||||
}
|
||||
|
||||
@ -362,18 +366,12 @@ void tms1k_base_device::read_opcode()
|
||||
// i/o handling
|
||||
//-------------------------------------------------
|
||||
|
||||
void tms1k_base_device::write_o_output(u8 index)
|
||||
void tms1k_base_device::write_o_reg(u8 index)
|
||||
{
|
||||
// a hardcoded table is supported if the output pla is unknown
|
||||
m_o_index = index;
|
||||
m_o = (m_output_pla_table == nullptr) ? m_opla->read(index) : m_output_pla_table[index];
|
||||
m_write_o(m_o & m_o_mask);
|
||||
}
|
||||
|
||||
u8 tms1k_base_device::read_k_input()
|
||||
{
|
||||
// K1,2,4,8 (KC test pin is not emulated)
|
||||
return m_read_k() & 0xf;
|
||||
write_o_output(m_o);
|
||||
}
|
||||
|
||||
void tms1k_base_device::set_cki_bus()
|
||||
@ -544,26 +542,26 @@ void tms1k_base_device::op_setr()
|
||||
{
|
||||
// SETR: set one R-output line
|
||||
m_r = m_r | (1 << m_y);
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_r_output(m_r);
|
||||
}
|
||||
|
||||
void tms1k_base_device::op_rstr()
|
||||
{
|
||||
// RSTR: reset one R-output line
|
||||
m_r = m_r & ~(1 << m_y);
|
||||
m_write_r(m_r & m_r_mask);
|
||||
write_r_output(m_r);
|
||||
}
|
||||
|
||||
void tms1k_base_device::op_tdo()
|
||||
{
|
||||
// TDO: transfer accumulator and status latch to O-output
|
||||
write_o_output(m_status_latch << 4 | m_a);
|
||||
// TDO: transfer accumulator and status latch to O-register
|
||||
write_o_reg(m_status_latch << 4 | m_a);
|
||||
}
|
||||
|
||||
void tms1k_base_device::op_clo()
|
||||
{
|
||||
// CLO: clear O-output
|
||||
write_o_output(0);
|
||||
// CLO: clear O-register
|
||||
write_o_reg(0);
|
||||
}
|
||||
|
||||
void tms1k_base_device::op_ldx()
|
||||
|
@ -20,14 +20,14 @@
|
||||
class tms1k_base_device : public cpu_device
|
||||
{
|
||||
public:
|
||||
// K input pins
|
||||
auto k() { return m_read_k.bind(); }
|
||||
// common handlers
|
||||
auto read_k() { return m_read_k.bind(); } // K input pins
|
||||
auto write_o() { return m_write_o.bind(); } // O/Segment output pins
|
||||
auto write_r() { return m_write_r.bind(); } // R output pins (also called D on some chips)
|
||||
|
||||
// O/Segment output pins
|
||||
auto o() { return m_write_o.bind(); }
|
||||
|
||||
// R output pins (also called D on some chips)
|
||||
auto r() { return m_write_r.bind(); }
|
||||
// TMS2100 handlers
|
||||
auto read_j() { return m_read_j.bind(); } // J input pins
|
||||
auto read_r() { return m_read_r.bind(); } // R0-R3 input pins
|
||||
|
||||
// OFF request on TMS0980 and up
|
||||
auto power_off() { return m_power_off.bind(); }
|
||||
@ -144,8 +144,10 @@ protected:
|
||||
|
||||
void next_pc();
|
||||
|
||||
virtual void write_o_output(u8 index);
|
||||
virtual u8 read_k_input();
|
||||
virtual void write_o_reg(u8 index);
|
||||
virtual void write_o_output(u16 data) { m_write_o(data & m_o_mask); }
|
||||
virtual void write_r_output(u32 data) { m_write_r(data & m_r_mask); }
|
||||
virtual u8 read_k_input() { return m_read_k() & 0xf; }
|
||||
virtual void set_cki_bus();
|
||||
virtual void dynamic_output() { ; } // not used by default
|
||||
virtual void read_opcode();
|
||||
@ -240,14 +242,20 @@ protected:
|
||||
address_space *m_program;
|
||||
address_space *m_data;
|
||||
|
||||
const u16 *m_output_pla_table;
|
||||
devcb_read8 m_read_k;
|
||||
devcb_write16 m_write_o;
|
||||
devcb_write32 m_write_r;
|
||||
|
||||
devcb_read8 m_read_j;
|
||||
devcb_read8 m_read_r;
|
||||
|
||||
devcb_write_line m_power_off;
|
||||
|
||||
devcb_read8 m_read_ctl;
|
||||
devcb_write8 m_write_ctl;
|
||||
devcb_write_line m_write_pdc;
|
||||
|
||||
const u16 *m_output_pla_table;
|
||||
devcb_read32 m_decode_micro;
|
||||
|
||||
u32 m_o_mask;
|
||||
|
@ -22,7 +22,11 @@ Extra functions are controlled with the R register (not mapped to pins):
|
||||
- R24: enable interrupts
|
||||
|
||||
TODO:
|
||||
- x
|
||||
- timer interrupt
|
||||
- external interrupt (INT pin)
|
||||
- event counter (EC1 pin)
|
||||
- R0-R3 I/O, TRA opcode
|
||||
- A/D converter, TADM opcode
|
||||
|
||||
*/
|
||||
|
||||
@ -109,6 +113,14 @@ void tms2100_cpu_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
// i/o handling
|
||||
u8 tms2100_cpu_device::read_k_input()
|
||||
{
|
||||
// select K/J port with R16
|
||||
return (BIT(m_r, 16) ? m_read_j() : m_read_k()) & 0xf;
|
||||
}
|
||||
|
||||
|
||||
// opcode deviations
|
||||
void tms2100_cpu_device::op_tax()
|
||||
{
|
||||
|
@ -75,6 +75,8 @@ protected:
|
||||
|
||||
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
|
||||
|
||||
virtual u8 read_k_input() override;
|
||||
|
||||
virtual void op_tax() override;
|
||||
virtual void op_tra() override;
|
||||
virtual void op_tac() override;
|
||||
|
@ -4,10 +4,7 @@
|
||||
|
||||
TMS1000 family - TMS2400, TMS2470, TMS2600, TMS2670
|
||||
|
||||
TMS2400 is a TMS2100 with twice more memory (kind of like TMS1400 is to TMS1100)
|
||||
|
||||
TODO:
|
||||
- x
|
||||
TMS2400 is a TMS2100 with twice more memory (kind of how TMS1400 is to TMS1100)
|
||||
|
||||
*/
|
||||
|
||||
@ -70,7 +67,7 @@ void tms2400_cpu_device::device_reset()
|
||||
// opcode deviations
|
||||
void tms2400_cpu_device::op_ldx()
|
||||
{
|
||||
// LDX: value is still 3 bit even though X is 4 bit
|
||||
// LDX: value is still 3-bit even though X is 4-bit
|
||||
tms2100_cpu_device::op_ldx();
|
||||
m_x >>= 1;
|
||||
}
|
||||
|
@ -313,9 +313,9 @@ void sag_state::sag(machine_config &config)
|
||||
m_hmcs40_cpu->read_d().set(FUNC(sag_state::hmcs40_read_d));
|
||||
|
||||
TMS1670(config, m_tms1k_cpu, 0);
|
||||
m_tms1k_cpu->k().set(FUNC(sag_state::tms1k_read_k));
|
||||
m_tms1k_cpu->r().set(FUNC(sag_state::tms1k_write_r));
|
||||
m_tms1k_cpu->o().set(FUNC(sag_state::tms1k_write_o));
|
||||
m_tms1k_cpu->read_k().set(FUNC(sag_state::tms1k_read_k));
|
||||
m_tms1k_cpu->write_r().set(FUNC(sag_state::tms1k_write_r));
|
||||
m_tms1k_cpu->write_o().set(FUNC(sag_state::tms1k_write_o));
|
||||
|
||||
/* video hardware */
|
||||
PWM_DISPLAY(config, m_display).set_size(8+6, 14);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1329,9 +1329,9 @@ void tispeak_state::snmath(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
TMS0270(config, m_maincpu, MASTER_CLOCK/2);
|
||||
m_maincpu->k().set(FUNC(tispeak_state::snspell_read_k));
|
||||
m_maincpu->o().set(FUNC(tispeak_state::snmath_write_o));
|
||||
m_maincpu->r().set(FUNC(tispeak_state::snspell_write_r));
|
||||
m_maincpu->read_k().set(FUNC(tispeak_state::snspell_read_k));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::snmath_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispeak_state::snspell_write_r));
|
||||
|
||||
m_maincpu->read_ctl().set("tms5100", FUNC(tms5110_device::ctl_r));
|
||||
m_maincpu->write_ctl().set("tms5100", FUNC(tms5110_device::ctl_w));
|
||||
@ -1356,7 +1356,7 @@ void tispeak_state::sns_cd2801(machine_config &config)
|
||||
snmath(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->o().set(FUNC(tispeak_state::snspell_write_o));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::snspell_write_o));
|
||||
|
||||
config.set_default_layout(layout_snspell);
|
||||
|
||||
@ -1407,7 +1407,7 @@ void tispeak_state::snread(machine_config &config)
|
||||
snmath(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->o().set(FUNC(tispeak_state::snspell_write_o));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::snspell_write_o));
|
||||
|
||||
config.set_default_layout(layout_snread);
|
||||
|
||||
@ -1424,8 +1424,8 @@ void tispeak_state::lantrans(machine_config &config)
|
||||
snmath(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->o().set(FUNC(tispeak_state::snspell_write_o));
|
||||
m_maincpu->r().set(FUNC(tispeak_state::lantrans_write_r));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::snspell_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispeak_state::lantrans_write_r));
|
||||
|
||||
config.set_default_layout(layout_snread);
|
||||
|
||||
@ -1458,9 +1458,9 @@ void tispeak_state::snspellc(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
TMS1100(config, m_maincpu, MASTER_CLOCK/2);
|
||||
m_maincpu->k().set(FUNC(tispeak_state::snspellc_read_k));
|
||||
m_maincpu->o().set(FUNC(tispeak_state::snspellc_write_o));
|
||||
m_maincpu->r().set(FUNC(tispeak_state::snspellc_write_r));
|
||||
m_maincpu->read_k().set(FUNC(tispeak_state::snspellc_read_k));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::snspellc_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispeak_state::snspellc_write_r));
|
||||
|
||||
// no visual feedback!
|
||||
|
||||
@ -1492,9 +1492,9 @@ void tispeak_state::vocaid(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
TMS1100(config, m_maincpu, MASTER_CLOCK/2);
|
||||
m_maincpu->k().set(FUNC(tispeak_state::tntell_read_k));
|
||||
m_maincpu->o().set(FUNC(tispeak_state::snspellc_write_o));
|
||||
m_maincpu->r().set(FUNC(tispeak_state::snspellc_write_r));
|
||||
m_maincpu->read_k().set(FUNC(tispeak_state::tntell_read_k));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::snspellc_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispeak_state::snspellc_write_r));
|
||||
|
||||
TIMER(config, "ol_timer").configure_periodic(FUNC(tispeak_state::tntell_get_overlay), attotime::from_msec(50));
|
||||
config.set_default_layout(layout_tntell);
|
||||
@ -1523,9 +1523,9 @@ void tispeak_state::k28m2(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
TMS1400(config, m_maincpu, MASTER_CLOCK/2);
|
||||
m_maincpu->k().set(FUNC(tispeak_state::k28_read_k));
|
||||
m_maincpu->o().set(FUNC(tispeak_state::k28_write_o));
|
||||
m_maincpu->r().set(FUNC(tispeak_state::k28_write_r));
|
||||
m_maincpu->read_k().set(FUNC(tispeak_state::k28_read_k));
|
||||
m_maincpu->write_o().set(FUNC(tispeak_state::k28_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispeak_state::k28_write_r));
|
||||
|
||||
config.set_default_layout(layout_k28m2);
|
||||
|
||||
|
@ -328,16 +328,16 @@ void tispellb_state::rev1(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
TMS0270(config, m_maincpu, 350000); // approximation
|
||||
m_maincpu->k().set(FUNC(tispellb_state::main_read_k));
|
||||
m_maincpu->o().set(FUNC(tispellb_state::main_write_o));
|
||||
m_maincpu->r().set(FUNC(tispellb_state::main_write_r));
|
||||
m_maincpu->read_k().set(FUNC(tispellb_state::main_read_k));
|
||||
m_maincpu->write_o().set(FUNC(tispellb_state::main_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispellb_state::main_write_r));
|
||||
m_maincpu->read_ctl().set(FUNC(tispellb_state::rev1_ctl_r));
|
||||
m_maincpu->write_ctl().set(FUNC(tispellb_state::rev1_ctl_w));
|
||||
|
||||
TMS1980(config, m_subcpu, 350000); // approximation
|
||||
m_subcpu->k().set(FUNC(tispellb_state::sub_read_k));
|
||||
m_subcpu->o().set(FUNC(tispellb_state::sub_write_o));
|
||||
m_subcpu->r().set(FUNC(tispellb_state::sub_write_r));
|
||||
m_subcpu->read_k().set(FUNC(tispellb_state::sub_read_k));
|
||||
m_subcpu->write_o().set(FUNC(tispellb_state::sub_write_o));
|
||||
m_subcpu->write_r().set(FUNC(tispellb_state::sub_write_r));
|
||||
|
||||
config.set_perfect_quantum(m_maincpu);
|
||||
|
||||
@ -354,9 +354,9 @@ void tispellb_state::rev2(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
TMS0270(config, m_maincpu, 350000); // approximation
|
||||
m_maincpu->k().set(FUNC(tispellb_state::main_read_k));
|
||||
m_maincpu->o().set(FUNC(tispellb_state::rev2_write_o));
|
||||
m_maincpu->r().set(FUNC(tispellb_state::rev2_write_r));
|
||||
m_maincpu->read_k().set(FUNC(tispellb_state::main_read_k));
|
||||
m_maincpu->write_o().set(FUNC(tispellb_state::rev2_write_o));
|
||||
m_maincpu->write_r().set(FUNC(tispellb_state::rev2_write_r));
|
||||
m_maincpu->read_ctl().set(m_tms6100, FUNC(tms6100_device::data_r));
|
||||
m_maincpu->write_ctl().set(m_tms6100, FUNC(tms6100_device::add_w));
|
||||
|
||||
|
@ -448,9 +448,9 @@ void microvision_state::microvision(machine_config &config)
|
||||
TMS1100(config, m_tms1100, 0);
|
||||
m_tms1100->set_output_pla(microvision_output_pla[0]);
|
||||
m_tms1100->set_decode_micro().set(FUNC(microvision_state::tms1100_decode_micro));
|
||||
m_tms1100->k().set(FUNC(microvision_state::tms1100_k_r));
|
||||
m_tms1100->o().set(FUNC(microvision_state::tms1100_o_w));
|
||||
m_tms1100->r().set(FUNC(microvision_state::tms1100_r_w));
|
||||
m_tms1100->read_k().set(FUNC(microvision_state::tms1100_k_r));
|
||||
m_tms1100->write_o().set(FUNC(microvision_state::tms1100_o_w));
|
||||
m_tms1100->write_r().set(FUNC(microvision_state::tms1100_r_w));
|
||||
|
||||
I8021(config, m_i8021, 0);
|
||||
m_i8021->bus_in_cb().set(FUNC(microvision_state::i8021_p0_r));
|
||||
|
@ -197,9 +197,9 @@ void eva11_state::eva(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
TMS1000(config, m_maincpu, 640_kHz_XTAL/2); // from TMS5110A CPU CK
|
||||
m_maincpu->k().set(FUNC(eva11_state::read_k));
|
||||
m_maincpu->o().set(FUNC(eva11_state::write_o));
|
||||
m_maincpu->r().set(FUNC(eva11_state::write_r));
|
||||
m_maincpu->read_k().set(FUNC(eva11_state::read_k));
|
||||
m_maincpu->write_o().set(FUNC(eva11_state::write_o));
|
||||
m_maincpu->write_r().set(FUNC(eva11_state::write_r));
|
||||
|
||||
eva_sound(config);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user