diff options
author | Nigel Barnes <Pernod70@users.noreply.github.com> | 2020-03-03 19:27:56 +0000 |
---|---|---|
committer | Nigel Barnes <Pernod70@users.noreply.github.com> | 2020-03-03 19:40:23 +0000 |
commit | a1a70c4357c4ee87e7492a4cd2f62306f7965cd5 (patch) | |
tree | f545da0e0a8ba1b43e9cb00c2c22a415696969a1 | |
parent | 89edcc3ea4de545fc385ab11f60d27eb450b5e98 (diff) |
cms6502: Cleanups and promoted to working.
- Corrected M4 ROM ordering.
- Added IEEE controller card.
-rw-r--r-- | scripts/src/bus.lua | 2 | ||||
-rw-r--r-- | src/devices/bus/acorn/bus.cpp | 2 | ||||
-rw-r--r-- | src/devices/bus/acorn/cms/4080term.cpp | 2 | ||||
-rw-r--r-- | src/devices/bus/acorn/cms/fdc.cpp | 27 | ||||
-rw-r--r-- | src/devices/bus/acorn/cms/fdc.h | 2 | ||||
-rw-r--r-- | src/devices/bus/acorn/cms/ieee.cpp | 89 | ||||
-rw-r--r-- | src/devices/bus/acorn/cms/ieee.h | 48 | ||||
-rw-r--r-- | src/mame/drivers/cms.cpp | 61 |
8 files changed, 190 insertions, 43 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 87b372b9e50..522b9a07fb1 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -125,6 +125,8 @@ if (BUSES["ACORN"]~=null) then MAME_DIR .. "src/devices/bus/acorn/cms/fdc.h", MAME_DIR .. "src/devices/bus/acorn/cms/hires.cpp", MAME_DIR .. "src/devices/bus/acorn/cms/hires.h", + MAME_DIR .. "src/devices/bus/acorn/cms/ieee.cpp", + MAME_DIR .. "src/devices/bus/acorn/cms/ieee.h", MAME_DIR .. "src/devices/bus/acorn/system/32k.cpp", MAME_DIR .. "src/devices/bus/acorn/system/32k.h", MAME_DIR .. "src/devices/bus/acorn/system/8k.cpp", diff --git a/src/devices/bus/acorn/bus.cpp b/src/devices/bus/acorn/bus.cpp index 9bbbf1e7fac..55f332e6581 100644 --- a/src/devices/bus/acorn/bus.cpp +++ b/src/devices/bus/acorn/bus.cpp @@ -159,6 +159,7 @@ void device_acorn_bus_interface::interface_pre_start() #include "cms/4080term.h" #include "cms/fdc.h" #include "cms/hires.h" +#include "cms/ieee.h" void acorn_bus_devices(device_slot_interface &device) { @@ -187,4 +188,5 @@ void cms_bus_devices(device_slot_interface &device) device.option_add("4080term", CMS_4080TERM); /* CMS 40/80 Video Terminal Card */ device.option_add("fdc", CMS_FDC); /* CMS Floppy Disc Controller */ device.option_add("hires", CMS_HIRES); /* CMS High Resolution Colour Graphics Card */ + device.option_add("ieee", CMS_IEEE); /* CMS IEEE Interface */ } diff --git a/src/devices/bus/acorn/cms/4080term.cpp b/src/devices/bus/acorn/cms/4080term.cpp index f5ae26633e5..104f70bb60d 100644 --- a/src/devices/bus/acorn/cms/4080term.cpp +++ b/src/devices/bus/acorn/cms/4080term.cpp @@ -78,7 +78,7 @@ void cms_4080term_device::device_add_mconfig(machine_config &config) m_screen->set_screen_update("ef9345", FUNC(ef9345_device::screen_update)); GFXDECODE(config, "gfxdecode", "palette", gfx_cms_4080term); - PALETTE(config, "palette").set_entries(8); + PALETTE(config, "palette", palette_device::RGB_3BIT); EF9345(config, m_ef9345, 0); m_ef9345->set_screen("screen"); diff --git a/src/devices/bus/acorn/cms/fdc.cpp b/src/devices/bus/acorn/cms/fdc.cpp index 1d2c81dabf5..16cabac444a 100644 --- a/src/devices/bus/acorn/cms/fdc.cpp +++ b/src/devices/bus/acorn/cms/fdc.cpp @@ -24,7 +24,8 @@ DEFINE_DEVICE_TYPE(CMS_FDC, cms_fdc_device, "cms_fdc", "CMS Floppy Disc Controll //------------------------------------------------- FLOPPY_FORMATS_MEMBER(cms_fdc_device::floppy_formats ) - FLOPPY_ACORN_SSD_FORMAT + FLOPPY_ACORN_SSD_FORMAT, + FLOPPY_ACORN_DSD_FORMAT FLOPPY_FORMATS_END static void cms_floppies(device_slot_interface &device) @@ -39,14 +40,9 @@ static void cms_floppies(device_slot_interface &device) void cms_fdc_device::device_add_mconfig(machine_config &config) { WD1770(config, m_fdc, 8_MHz_XTAL); - //m_fdc->intrq_wr_callback().set(FUNC(cms_fdc_device::bus_irq_w)); - //m_fdc->drq_wr_callback().set(FUNC(cms_fdc_device::bus_nmi_w)); - FLOPPY_CONNECTOR(config, m_floppy[0], cms_floppies, "35dd", floppy_formats); - m_floppy[0]->enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy[1], cms_floppies, "35dd", floppy_formats); - m_floppy[1]->enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy[2], cms_floppies, nullptr, floppy_formats); - m_floppy[2]->enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[0], cms_floppies, "35dd", floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[1], cms_floppies, "35dd", floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[2], cms_floppies, nullptr, floppy_formats).enable_sound(true); } @@ -90,14 +86,13 @@ READ8_MEMBER(cms_fdc_device::wd1770_state_r) data |= m_fdc->intrq_r() << 6; data |= m_fdc->drq_r() << 7; - logerror("floppy state %02x\n", data); + return data; } WRITE8_MEMBER(cms_fdc_device::wd1770_control_w) { floppy_image_device *floppy = nullptr; - logerror("floppy control %02x\n", data); // bit 0, 1, 2: drive select if (BIT(data, 0)) floppy = m_floppy[0]->get_device(); @@ -112,13 +107,3 @@ WRITE8_MEMBER(cms_fdc_device::wd1770_control_w) // bit 7: density ?? m_fdc->dden_w(BIT(data, 7)); } - -WRITE_LINE_MEMBER(cms_fdc_device::bus_nmi_w) -{ - m_bus->nmi_w(state); -} - -WRITE_LINE_MEMBER(cms_fdc_device::bus_irq_w) -{ - m_bus->irq_w(state); -} diff --git a/src/devices/bus/acorn/cms/fdc.h b/src/devices/bus/acorn/cms/fdc.h index 4795eaab18a..64bb921bba7 100644 --- a/src/devices/bus/acorn/cms/fdc.h +++ b/src/devices/bus/acorn/cms/fdc.h @@ -41,8 +41,6 @@ protected: private: DECLARE_READ8_MEMBER(wd1770_state_r); DECLARE_WRITE8_MEMBER(wd1770_control_w); - DECLARE_WRITE_LINE_MEMBER(bus_irq_w); - DECLARE_WRITE_LINE_MEMBER(bus_nmi_w); required_device<wd_fdc_device_base> m_fdc; required_device_array<floppy_connector, 3> m_floppy; diff --git a/src/devices/bus/acorn/cms/ieee.cpp b/src/devices/bus/acorn/cms/ieee.cpp new file mode 100644 index 00000000000..06d9b47f0dd --- /dev/null +++ b/src/devices/bus/acorn/cms/ieee.cpp @@ -0,0 +1,89 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + CMS IEEE Controller Board + +**********************************************************************/ + + +#include "emu.h" +#include "ieee.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(CMS_IEEE, cms_ieee_device, "cms_ieee", "CMS IEEE Controller Board"); + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void cms_ieee_device::device_add_mconfig(machine_config &config) +{ + TMS9914(config, m_tms9914, 4_MHz_XTAL); // TODO: verify clock + m_tms9914->int_write_cb().set(FUNC(cms_ieee_device::bus_irq_w)); + m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); + m_tms9914->dio_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w)); + m_tms9914->eoi_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_eoi_w)); + m_tms9914->dav_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dav_w)); + m_tms9914->nrfd_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_nrfd_w)); + m_tms9914->ndac_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ndac_w)); + m_tms9914->ifc_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ifc_w)); + m_tms9914->srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w)); + m_tms9914->atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w)); + m_tms9914->ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w)); + + IEEE488(config, m_ieee); + m_ieee->eoi_callback().set(m_tms9914, FUNC(tms9914_device::eoi_w)); + m_ieee->dav_callback().set(m_tms9914, FUNC(tms9914_device::dav_w)); + m_ieee->nrfd_callback().set(m_tms9914, FUNC(tms9914_device::nrfd_w)); + m_ieee->ndac_callback().set(m_tms9914, FUNC(tms9914_device::ndac_w)); + m_ieee->ifc_callback().set(m_tms9914, FUNC(tms9914_device::ifc_w)); + m_ieee->srq_callback().set(m_tms9914, FUNC(tms9914_device::srq_w)); + m_ieee->atn_callback().set(m_tms9914, FUNC(tms9914_device::atn_w)); + m_ieee->ren_callback().set(m_tms9914, FUNC(tms9914_device::ren_w)); + IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// cms_ieee_device - constructor +//------------------------------------------------- + +cms_ieee_device::cms_ieee_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, CMS_IEEE, tag, owner, clock) + , device_acorn_bus_interface(mconfig, *this) + , m_ieee(*this, IEEE488_TAG) + , m_tms9914(*this, "hpib") +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void cms_ieee_device::device_start() +{ + address_space &space = m_bus->memspace(); + + space.install_readwrite_handler(0xfc60, 0xfc6f, read8sm_delegate(*m_tms9914, FUNC(tms9914_device::read)), write8sm_delegate(*m_tms9914, FUNC(tms9914_device::write))); +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +WRITE_LINE_MEMBER(cms_ieee_device::bus_irq_w) +{ + m_bus->irq_w(state); +} diff --git a/src/devices/bus/acorn/cms/ieee.h b/src/devices/bus/acorn/cms/ieee.h new file mode 100644 index 00000000000..48352d4a100 --- /dev/null +++ b/src/devices/bus/acorn/cms/ieee.h @@ -0,0 +1,48 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + CMS IEEE Controller Board + +**********************************************************************/ + + +#ifndef MAME_BUS_ACORN_CMS_IEEE_H +#define MAME_BUS_ACORN_CMS_IEEE_H + +#include "bus/acorn/bus.h" +#include "bus/ieee488/ieee488.h" +#include "machine/tms9914.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class cms_ieee_device: + public device_t, + public device_acorn_bus_interface +{ +public: + // construction/destruction + cms_ieee_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + +private: + DECLARE_WRITE_LINE_MEMBER(bus_irq_w); + + required_device<ieee488_device> m_ieee; + required_device<tms9914_device> m_tms9914; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(CMS_IEEE, cms_ieee_device); + + +#endif /* MAME_BUS_ACORN_CMS_IEEE_H */ diff --git a/src/mame/drivers/cms.cpp b/src/mame/drivers/cms.cpp index 3f83032791c..5b081ec3554 100644 --- a/src/mame/drivers/cms.cpp +++ b/src/mame/drivers/cms.cpp @@ -18,6 +18,30 @@ - Analogue Digital Interface Board (CMS00092 A/D I/O) - Floppy Disk Controller + System I/O Allocation + &FA00-&FBFF Advanced graphics card + &FC00-&FC0F CPU card VIA + &FC10-&FC1F GDP card control register + &FC20-&FC2F GDP card colour register + &FC30-&FC3F Real-Time-Clock registers + &FC40-&FC4F Disc controller registers + &FC50-&FC5F Disc controller drive select register + &FC60-&FC6F IEEE controller card + &FC70-&FC7F Memory select register (on CPU card) + &FC80-&FC8F VIA1 on VIB card + &FC90-&FC9F VIA2 on VIB card + &FCA0-&FCAF VIA3 on VIB card + &FCB0-&FCBF VIA4 on VIB card (Printer interface) + &FCC0-&FCCF Analogue card ADC + &FCD0-&FCDF Analogue card DAC + &FCE0-&FCEF Analogue card VIA + &FCF0-&FCFF Serial Interface on VIB card + &FD00-&FD1F Reserved + &FD20-&FD2F 40/80 column card video processor + &FD30-&FD3F 40/80 column card VIA (printer interface) + &FD40-&FD4F 40/80 column card serial interface + &FD50-&FD5F Reserved for future I/O cards + ****************************************************************************/ #include "emu.h" @@ -40,11 +64,8 @@ public: , m_irqs(*this, "irqs") , m_bus(*this, "bus") , m_map_select(0) - , m_page_select(0) { } - //DECLARE_INPUT_CHANGED_MEMBER(trigger_reset); - void cms6502(machine_config &config); protected: @@ -67,11 +88,10 @@ private: required_device<input_merger_device> m_irqs; required_device<acorn_bus_device> m_bus; - void cms_bank(address_map &map); void cms6502_mem(address_map &map); uint8_t m_map_select; - uint8_t m_page_select; + uint8_t m_page_select[4]; uint8_t m_rtc_data[0x10]; int m_rtc_reg; @@ -101,23 +121,18 @@ void cms_state::cms6502_mem(address_map &map) WRITE8_MEMBER(cms_state::map_select_w) { - m_map_select = (data & 0x03) << 2; - logerror("map select %02x\n", data); - //if (m_map_select == 0x00) - // m_bank1->set_entry(m_page_select); - //else - m_bank1->set_entry(m_map_select); + m_map_select = data & 0x03; + m_bank1->set_entry((m_map_select << 2) | m_page_select[m_map_select]); } WRITE8_MEMBER(cms_state::page_select_w) { - logerror("page select %02x\n", data); - m_page_select = data & 0x03; + /* 27513 in socket M4 (map 0) */ if (m_map_select == 0x00) { - m_page_select = data & 0x03; - m_bank1->set_entry(m_page_select); + m_page_select[m_map_select] = data & 0x03; } + m_bank1->set_entry((m_map_select << 2) | m_page_select[m_map_select]); } @@ -137,11 +152,20 @@ void cms_state::machine_start() m_rtc_timer = timer_alloc(); m_rtc_timer->adjust(attotime::zero, 0, attotime(1, 0)); + + /* register for save states */ + save_item(NAME(m_map_select)); + save_item(NAME(m_page_select)); } void cms_state::machine_reset() { + m_map_select = 0x00; + for (int i = 0; i < 4; i++) + { + m_page_select[i] = 0x00; + } m_bank1->set_entry(0); } @@ -271,7 +295,6 @@ void cms_state::cms6502(machine_config &config) INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); VIA6522(config, m_via, 1_MHz_XTAL); - //m_via->cb2_handler().set(FUNC(cms_state::cass_w)); m_via->irq_handler().set("irqs", FUNC(input_merger_device::in_w<0>)); /* 7 Slot Backplane */ @@ -300,8 +323,8 @@ ROM_START( cms6502 ) /* Socket M4 27513 */ ROM_LOAD("basic.m4", 0x00000, 0x4000, CRC(e27b6146) SHA1(ae89ee695bed6f49402f009ded16ad3a36f64c28)) ROM_LOAD("dfs-1.4.m4", 0x04000, 0x4000, CRC(0743ddb5) SHA1(cd61956a10510a6954cba9ba17f70c2991e81d9b)) - ROM_LOAD("simon-2.02.m4", 0x08000, 0x4000, CRC(d1f1b633) SHA1(991c3691a70f45fff3c828c8c0a0906b9f5e34fc)) - ROM_LOAD("multi-basic.m4", 0x0c000, 0x4000, CRC(fb785563) SHA1(9f97582ba0b82f314008bf95eacb00e7bced3cac)) + ROM_LOAD("multi-basic.m4", 0x08000, 0x4000, CRC(fb785563) SHA1(9f97582ba0b82f314008bf95eacb00e7bced3cac)) + ROM_LOAD("simon-2.02.m4", 0x0c000, 0x4000, CRC(d1f1b633) SHA1(991c3691a70f45fff3c828c8c0a0906b9f5e34fc)) /* Socket M3 empty */ /* Socket M2 27128 */ ROM_LOAD("gdp.m2", 0x20000, 0x4000, CRC(f545293b) SHA1(532c45ac4661643c6c6f633d504ef72e800cc900)) @@ -315,4 +338,4 @@ ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1986, cms6502, 0, 0, cms6502, cms, cms_state, empty_init, "Cambridge Microprocessor Systems", "CMS 6502 Development System", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) +COMP( 1986, cms6502, 0, 0, cms6502, cms, cms_state, empty_init, "Cambridge Microprocessor Systems", "CMS 6502 Development System", MACHINE_NO_SOUND_HW ) |