bus/electron: Only select ROMSEL when upper nibble is clear.

bus/electron/m2105: Use SPEECHROM device to map the speech PHROM.
This commit is contained in:
Nigel Barnes 2023-10-28 17:30:29 +01:00
parent 1fc11b4e6f
commit 8d54e078c7
11 changed files with 26 additions and 29 deletions

View File

@ -274,7 +274,7 @@ void electron_elksd128_device::expbus_w(offs_t offset, uint8_t data)
break;
case 0xfe:
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -151,7 +151,7 @@ void electron_elksd64_device::expbus_w(offs_t offset, uint8_t data)
break;
case 0xfe:
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -49,8 +49,8 @@ ROM_START( m2105 )
ROMX_LOAD("sk01-pc-207l-1.ic24", 0x8000, 0x4000, CRC(0850bcea) SHA1(270e7a31e69e1454cfb70ced23a50f5d97efe4d5), ROM_BIOS(2))
ROMX_LOAD("sk02-pc-207l-1.ic24", 0xc000, 0x4000, CRC(d8b9143f) SHA1(4e132c7a6dae4caf7203139b51882706d508c449), ROM_BIOS(2))
ROM_REGION(0x4000, "tms6100", 0)
ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6))
ROM_REGION(0x40000, "vsm", ROMREGION_ERASE00)
ROM_LOAD("cm62024.bin", 0x3c000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6))
ROM_END
@ -65,9 +65,9 @@ void electron_m2105_device::device_add_mconfig(machine_config &config)
INPUT_MERGER_ANY_HIGH(config, "irqs").output_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w));
MOS6522(config, m_via[0], DERIVED_CLOCK(1, 16));
m_via[0]->readpa_handler().set("tms5220", FUNC(tms5220_device::status_r));
m_via[0]->writepa_handler().set("tms5220", FUNC(tms5220_device::data_w));
m_via[0]->writepb_handler().set("tms5220", FUNC(tms5220_device::combined_rsq_wsq_w)).mask(0x03);
m_via[0]->readpa_handler().set("vsp", FUNC(tms5220_device::status_r));
m_via[0]->writepa_handler().set("vsp", FUNC(tms5220_device::data_w));
m_via[0]->writepb_handler().set("vsp", FUNC(tms5220_device::combined_rsq_wsq_w)).mask(0x03);
//m_via[0]->writepb_handler().set().bit(5); SPK ENABLE
//m_via[0]->writepb_handler().set().bit(6); SND ENABLE
m_via[0]->cb1_handler().set(m_via[0], FUNC(via6522_device::write_pb4));
@ -114,19 +114,15 @@ void electron_m2105_device::device_add_mconfig(machine_config &config)
output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
centronics.set_output_latch(latch);
TMS6100(config, "tms6100", 640000/4);
SPEECHROM(config, "vsm", 0).set_reverse_bit_order(true);
tms5220_device &tms(TMS5220(config, "tms5220", 640000));
tms5220_device &tms(TMS5220(config, "vsp", 640000));
tms.set_speechrom_tag("vsm");
tms.ready_cb().set(m_via[0], FUNC(via6522_device::write_ca1));
tms.ready_cb().append(m_via[0], FUNC(via6522_device::write_pb2));
tms.irq_cb().set(m_via[0], FUNC(via6522_device::write_ca2));
tms.irq_cb().append(m_via[0], FUNC(via6522_device::write_pb3));
tms.m0_cb().set("tms6100", FUNC(tms6100_device::m0_w));
tms.m1_cb().set("tms6100", FUNC(tms6100_device::m1_w));
tms.addr_cb().set("tms6100", FUNC(tms6100_device::add_w));
tms.data_cb().set("tms6100", FUNC(tms6100_device::data_line_r));
tms.romclk_cb().set("tms6100", FUNC(tms6100_device::clk_w));
tms.add_route(ALL_OUTPUTS, "mono", 1.0);
tms.add_route(ALL_OUTPUTS, "mono", 0.5);
SPEAKER(config, "mono").front_center();
}
@ -261,7 +257,7 @@ void electron_m2105_device::expbus_w(offs_t offset, uint8_t data)
break;
case 0xfe:
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -65,7 +65,7 @@ ROM_START( ap6 )
ROM_SYSTEM_BIOS(1, "ap6", "RH Plus 1 1.33")
ROMX_LOAD("ap6v133t.rom", 0x0000, 0x4000, CRC(364591eb) SHA1(316a25aeeda0266dae510eea52324b087875740f), ROM_BIOS(1))
ROM_END
ROM_END
//-------------------------------------------------
// INPUT_PORTS( plus1 )
@ -108,7 +108,6 @@ void electron_plus1_device::device_add_mconfig(machine_config &config)
m_centronics->set_output_latch(latch);
/* adc */
BBC_ANALOGUE_SLOT(config, m_analogue, bbc_analogue_devices, "acornjoy");
ADC0844(config, m_adc);
m_adc->intr_callback().set([this](int state) { m_adc_ready = !state; });
m_adc->ch1_callback().set([this]() { return m_analogue->ch_r(0); });
@ -116,6 +115,8 @@ void electron_plus1_device::device_add_mconfig(machine_config &config)
m_adc->ch3_callback().set([this]() { return m_analogue->ch_r(2); });
m_adc->ch4_callback().set([this]() { return m_analogue->ch_r(3); });
BBC_ANALOGUE_SLOT(config, m_analogue, bbc_analogue_devices, "acornjoy");
/* cartridges */
ELECTRON_CARTSLOT(config, m_cart_sk1, DERIVED_CLOCK(1, 1), electron_cart, nullptr);
m_cart_sk1->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>));
@ -198,7 +199,7 @@ electron_ap1_device::electron_ap1_device(const machine_config &mconfig, const ch
{
}
electron_ap6_device::electron_ap6_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
electron_ap6_device::electron_ap6_device(const machine_config &mconfig, const char* tag, device_t* owner, uint32_t clock)
: electron_plus1_device(mconfig, ELECTRON_AP6, tag, owner, clock)
, m_rom(*this, "rom%u", 1)
, m_links(*this, "LINKS")
@ -403,7 +404,7 @@ void electron_plus1_device::expbus_w(offs_t offset, uint8_t data)
break;
case 0xfe:
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -62,7 +62,7 @@ protected:
class electron_ap1_device : public electron_plus1_device
{
public:
electron_ap1_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
electron_ap1_device(const machine_config &mconfig, const char* tag, device_t* owner, uint32_t clock);
protected:
// optional information overrides
@ -73,14 +73,14 @@ protected:
class electron_ap6_device : public electron_plus1_device
{
public:
electron_ap6_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
electron_ap6_device(const machine_config &mconfig, const char* tag, device_t* owner, uint32_t clock);
protected:
// device_t implementation
virtual void device_start() override;
// optional information overrides
virtual void device_add_mconfig(machine_config& config) override;
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry* device_rom_region() const override;
virtual ioport_constructor device_input_ports() const override;

View File

@ -208,7 +208,7 @@ void electron_plus2_device::expbus_w(offs_t offset, uint8_t data)
break;
case 0xfe:
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -165,7 +165,7 @@ void electron_plus3_device::expbus_w(offs_t offset, uint8_t data)
{
m_fdc->write(offset & 0x03, data);
}
else if (offset == 0xfe05)
else if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -104,7 +104,7 @@ uint8_t electron_pwrjoy_device::expbus_r(offs_t offset)
void electron_pwrjoy_device::expbus_w(offs_t offset, uint8_t data)
{
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -168,7 +168,7 @@ void electron_rombox_device::expbus_w(offs_t offset, uint8_t data)
{
m_exp->expbus_w(offset, data);
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -308,7 +308,7 @@ void electron_romboxp_device::expbus_w(offs_t offset, uint8_t data)
break;
case 0xfe:
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}

View File

@ -157,7 +157,7 @@ void electron_sidewndr_device::expbus_w(offs_t offset, uint8_t data)
{
m_exp->expbus_w(offset, data);
if (offset == 0xfe05)
if ((offset == 0xfe05) && !(data & 0xf0))
{
m_romsel = data & 0x0f;
}