From 8d54e078c7d914c1a44aef5ee5f40ed7594fb794 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Sat, 28 Oct 2023 17:30:29 +0100 Subject: bus/electron: Only select ROMSEL when upper nibble is clear. bus/electron/m2105: Use SPEECHROM device to map the speech PHROM. --- src/devices/bus/electron/elksd128.cpp | 2 +- src/devices/bus/electron/elksd64.cpp | 2 +- src/devices/bus/electron/m2105.cpp | 24 ++++++++++-------------- src/devices/bus/electron/plus1.cpp | 9 +++++---- src/devices/bus/electron/plus1.h | 6 +++--- src/devices/bus/electron/plus2.cpp | 2 +- src/devices/bus/electron/plus3.cpp | 2 +- src/devices/bus/electron/pwrjoy.cpp | 2 +- src/devices/bus/electron/rombox.cpp | 2 +- src/devices/bus/electron/romboxp.cpp | 2 +- src/devices/bus/electron/sidewndr.cpp | 2 +- 11 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/devices/bus/electron/elksd128.cpp b/src/devices/bus/electron/elksd128.cpp index 302144bb343..d57fb07dfff 100644 --- a/src/devices/bus/electron/elksd128.cpp +++ b/src/devices/bus/electron/elksd128.cpp @@ -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; } diff --git a/src/devices/bus/electron/elksd64.cpp b/src/devices/bus/electron/elksd64.cpp index c76c9a8c685..033f0aceb4d 100644 --- a/src/devices/bus/electron/elksd64.cpp +++ b/src/devices/bus/electron/elksd64.cpp @@ -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; } diff --git a/src/devices/bus/electron/m2105.cpp b/src/devices/bus/electron/m2105.cpp index 35ba1e40e13..25f9e60a73f 100644 --- a/src/devices/bus/electron/m2105.cpp +++ b/src/devices/bus/electron/m2105.cpp @@ -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; } diff --git a/src/devices/bus/electron/plus1.cpp b/src/devices/bus/electron/plus1.cpp index beab518a738..ee507f8c963 100644 --- a/src/devices/bus/electron/plus1.cpp +++ b/src/devices/bus/electron/plus1.cpp @@ -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; } diff --git a/src/devices/bus/electron/plus1.h b/src/devices/bus/electron/plus1.h index d9113e1ba8e..1ec722d066d 100644 --- a/src/devices/bus/electron/plus1.h +++ b/src/devices/bus/electron/plus1.h @@ -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; diff --git a/src/devices/bus/electron/plus2.cpp b/src/devices/bus/electron/plus2.cpp index 92a549cb30d..92a9599dfb0 100644 --- a/src/devices/bus/electron/plus2.cpp +++ b/src/devices/bus/electron/plus2.cpp @@ -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; } diff --git a/src/devices/bus/electron/plus3.cpp b/src/devices/bus/electron/plus3.cpp index 2e656fa6ed5..b378fc5d4cc 100644 --- a/src/devices/bus/electron/plus3.cpp +++ b/src/devices/bus/electron/plus3.cpp @@ -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; } diff --git a/src/devices/bus/electron/pwrjoy.cpp b/src/devices/bus/electron/pwrjoy.cpp index 1ff7ab79566..5848edae648 100644 --- a/src/devices/bus/electron/pwrjoy.cpp +++ b/src/devices/bus/electron/pwrjoy.cpp @@ -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; } diff --git a/src/devices/bus/electron/rombox.cpp b/src/devices/bus/electron/rombox.cpp index 1e5de5eb143..704a7eeb7e4 100644 --- a/src/devices/bus/electron/rombox.cpp +++ b/src/devices/bus/electron/rombox.cpp @@ -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; } diff --git a/src/devices/bus/electron/romboxp.cpp b/src/devices/bus/electron/romboxp.cpp index 1ef3413acdd..e489849ec73 100644 --- a/src/devices/bus/electron/romboxp.cpp +++ b/src/devices/bus/electron/romboxp.cpp @@ -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; } diff --git a/src/devices/bus/electron/sidewndr.cpp b/src/devices/bus/electron/sidewndr.cpp index da32ac872bc..d3d0d61955e 100644 --- a/src/devices/bus/electron/sidewndr.cpp +++ b/src/devices/bus/electron/sidewndr.cpp @@ -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; } -- cgit v1.2.3