diff options
author | 2019-03-26 11:13:37 +1100 | |
---|---|---|
committer | 2019-03-26 11:13:37 +1100 | |
commit | 97b67170277437131adf6ed4d60139c172529e4f (patch) | |
tree | 7a5cbf608f191075f1612b1af15832c206a3fe2d /src/devices/bus/bbc | |
parent | b380514764cf857469bae61c11143a19f79a74c5 (diff) |
(nw) Clean up the mess on master
This effectively reverts b380514764cf857469bae61c11143a19f79a74c5 and
c24473ddff715ecec2e258a6eb38960cf8c8e98e, restoring the state at
598cd5227223c3b04ca31f0dbc1981256d9ea3ff.
Before pushing, please check that what you're about to push is sane.
Check your local commit log and ensure there isn't anything out-of-place
before pushing to mainline. When things like this happen, it wastes
everyone's time. I really don't need this in a week when real work⢠is
busting my balls and I'm behind where I want to be with preparing for
MAME release.
Diffstat (limited to 'src/devices/bus/bbc')
80 files changed, 2167 insertions, 368 deletions
diff --git a/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp b/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp index 43cabfdfec3..41e9bc0e8cb 100644 --- a/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp +++ b/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp @@ -92,18 +92,18 @@ void bbc_1mhzbus_slot_device::device_reset() // read //------------------------------------------------- -READ8_MEMBER(bbc_1mhzbus_slot_device::fred_r) +uint8_t bbc_1mhzbus_slot_device::fred_r(offs_t offset) { if (m_card) - return m_card->fred_r(space, offset); + return m_card->fred_r(offset); else return 0xff; } -READ8_MEMBER(bbc_1mhzbus_slot_device::jim_r) +uint8_t bbc_1mhzbus_slot_device::jim_r(offs_t offset) { if (m_card) - return m_card->jim_r(space, offset); + return m_card->jim_r(offset); else return 0xff; } @@ -112,16 +112,16 @@ READ8_MEMBER(bbc_1mhzbus_slot_device::jim_r) // write //------------------------------------------------- -WRITE8_MEMBER(bbc_1mhzbus_slot_device::fred_w) +void bbc_1mhzbus_slot_device::fred_w(offs_t offset, uint8_t data) { if (m_card) - m_card->fred_w(space, offset, data); + m_card->fred_w(offset, data); } -WRITE8_MEMBER(bbc_1mhzbus_slot_device::jim_w) +void bbc_1mhzbus_slot_device::jim_w(offs_t offset, uint8_t data) { if (m_card) - m_card->jim_w(space, offset, data); + m_card->jim_w(offset, data); } //------------------------------------------------- @@ -142,6 +142,7 @@ WRITE8_MEMBER(bbc_1mhzbus_slot_device::jim_w) //#include "graduate.h" #include "beebsid.h" //#include "prisma3.h" +#include "sprite.h" #include "cfa3000opt.h" @@ -161,6 +162,7 @@ void bbc_1mhzbus_devices(device_slot_interface &device) //device.option_add("graduate", BBC_GRADUATE); /* The Torch Graduate G400/G800 */ device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */ //device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */ + device.option_add("sprite", BBC_SPRITE); /* Logotron Sprite Board */ } void bbcm_1mhzbus_devices(device_slot_interface &device) @@ -183,5 +185,6 @@ void bbcm_1mhzbus_devices(device_slot_interface &device) //device.option_add("graduate", BBC_GRADUATE); /* The Torch Graduate G400/G800 */ device.option_add("beebsid", BBC_BEEBSID); /* BeebSID */ //device.option_add("prisma3", BBC_PRISMA3); /* PRISMA-3 - Millipede 1989 */ + device.option_add("sprite", BBC_SPRITE); /* Logotron Sprite Board */ device.option_add("cfa3000opt", CFA3000_OPT); /* Henson CFA 3000 Option Board */ } diff --git a/src/devices/bus/bbc/1mhzbus/1mhzbus.h b/src/devices/bus/bbc/1mhzbus/1mhzbus.h index ad435876bf0..80e48425973 100644 --- a/src/devices/bus/bbc/1mhzbus/1mhzbus.h +++ b/src/devices/bus/bbc/1mhzbus/1mhzbus.h @@ -107,10 +107,10 @@ public: auto irq_handler() { return m_irq_handler.bind(); } auto nmi_handler() { return m_nmi_handler.bind(); } - virtual DECLARE_READ8_MEMBER(fred_r); - virtual DECLARE_WRITE8_MEMBER(fred_w); - virtual DECLARE_READ8_MEMBER(jim_r); - virtual DECLARE_WRITE8_MEMBER(jim_w); + virtual uint8_t fred_r(offs_t offset); + virtual void fred_w(offs_t offset, uint8_t data); + virtual uint8_t jim_r(offs_t offset); + virtual void jim_w(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); } DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); } @@ -134,10 +134,10 @@ private: class device_bbc_1mhzbus_interface : public device_slot_card_interface { public: - virtual DECLARE_READ8_MEMBER(fred_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(fred_w) { } - virtual DECLARE_READ8_MEMBER(jim_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(jim_w) { } + virtual uint8_t fred_r(offs_t offset) { return 0xff; } + virtual void fred_w(offs_t offset, uint8_t data) { } + virtual uint8_t jim_r(offs_t offset) { return 0xff; } + virtual void jim_w(offs_t offset, uint8_t data) { } protected: device_bbc_1mhzbus_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/bbc/1mhzbus/beebsid.cpp b/src/devices/bus/bbc/1mhzbus/beebsid.cpp index c0e6ea62c46..d50449ede99 100644 --- a/src/devices/bus/bbc/1mhzbus/beebsid.cpp +++ b/src/devices/bus/bbc/1mhzbus/beebsid.cpp @@ -65,40 +65,40 @@ void bbc_beebsid_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_beebsid_device::fred_r) +uint8_t bbc_beebsid_device::fred_r(offs_t offset) { uint8_t data = 0xff; if (offset >= 0x20 && offset < 0x40) { - data = m_sid->read(space, offset); + data = m_sid->read(offset); } - data &= m_1mhzbus->fred_r(space, offset); + data &= m_1mhzbus->fred_r(offset); return data; } -WRITE8_MEMBER(bbc_beebsid_device::fred_w) +void bbc_beebsid_device::fred_w(offs_t offset, uint8_t data) { if (offset >= 0x20 && offset < 0x40) { - m_sid->write(space, offset, data); + m_sid->write(offset, data); } - m_1mhzbus->fred_w(space, offset, data); + m_1mhzbus->fred_w(offset, data); } -READ8_MEMBER(bbc_beebsid_device::jim_r) +uint8_t bbc_beebsid_device::jim_r(offs_t offset) { uint8_t data = 0xff; - data &= m_1mhzbus->jim_r(space, offset); + data &= m_1mhzbus->jim_r(offset); return data; } -WRITE8_MEMBER(bbc_beebsid_device::jim_w) +void bbc_beebsid_device::jim_w(offs_t offset, uint8_t data) { - m_1mhzbus->jim_w(space, offset, data); + m_1mhzbus->jim_w(offset, data); } diff --git a/src/devices/bus/bbc/1mhzbus/beebsid.h b/src/devices/bus/bbc/1mhzbus/beebsid.h index d78d5486c10..107e875abde 100644 --- a/src/devices/bus/bbc/1mhzbus/beebsid.h +++ b/src/devices/bus/bbc/1mhzbus/beebsid.h @@ -34,10 +34,10 @@ protected: // optional information overrides virtual void device_add_mconfig(machine_config &config) override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; - virtual DECLARE_READ8_MEMBER(jim_r) override; - virtual DECLARE_WRITE8_MEMBER(jim_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; + virtual uint8_t jim_r(offs_t offset) override; + virtual void jim_w(offs_t offset, uint8_t data) override; private: required_device<bbc_1mhzbus_slot_device> m_1mhzbus; diff --git a/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp b/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp index 0946d9cdf82..e5ac755e006 100644 --- a/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp +++ b/src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp @@ -98,7 +98,7 @@ void cfa3000_opt_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(cfa3000_opt_device::fred_r) +uint8_t cfa3000_opt_device::fred_r(offs_t offset) { uint8_t data = 0xff; diff --git a/src/devices/bus/bbc/1mhzbus/cfa3000opt.h b/src/devices/bus/bbc/1mhzbus/cfa3000opt.h index 5a4e413754b..64913e95604 100644 --- a/src/devices/bus/bbc/1mhzbus/cfa3000opt.h +++ b/src/devices/bus/bbc/1mhzbus/cfa3000opt.h @@ -35,7 +35,7 @@ protected: // optional information overrides virtual ioport_constructor device_input_ports() const override; - virtual DECLARE_READ8_MEMBER(fred_r) override; + virtual uint8_t fred_r(offs_t offset) override; private: required_ioport m_opt; diff --git a/src/devices/bus/bbc/1mhzbus/emrmidi.cpp b/src/devices/bus/bbc/1mhzbus/emrmidi.cpp index 9c7c036f44c..6cfbacf23da 100644 --- a/src/devices/bus/bbc/1mhzbus/emrmidi.cpp +++ b/src/devices/bus/bbc/1mhzbus/emrmidi.cpp @@ -81,23 +81,23 @@ void bbc_emrmidi_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_emrmidi_device::fred_r) +uint8_t bbc_emrmidi_device::fred_r(offs_t offset) { uint8_t data = 0xff; if (offset >= 0xf0 && offset < 0xf2) { - data = m_acia->read(space, offset & 1); + data = m_acia->read(offset & 1); } return data; } -WRITE8_MEMBER(bbc_emrmidi_device::fred_w) +void bbc_emrmidi_device::fred_w(offs_t offset, uint8_t data) { if (offset >= 0xf0 && offset < 0xf2) { - m_acia->write(space, offset & 1, data); + m_acia->write(offset & 1, data); } } diff --git a/src/devices/bus/bbc/1mhzbus/emrmidi.h b/src/devices/bus/bbc/1mhzbus/emrmidi.h index bbc41992948..341e487ce24 100644 --- a/src/devices/bus/bbc/1mhzbus/emrmidi.h +++ b/src/devices/bus/bbc/1mhzbus/emrmidi.h @@ -36,8 +36,8 @@ protected: // optional information overrides virtual void device_add_mconfig(machine_config &config) override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; private: DECLARE_WRITE_LINE_MEMBER(write_acia_clock); diff --git a/src/devices/bus/bbc/1mhzbus/ieee488.cpp b/src/devices/bus/bbc/1mhzbus/ieee488.cpp index 383ceef537b..3aae6fe2f54 100644 --- a/src/devices/bus/bbc/1mhzbus/ieee488.cpp +++ b/src/devices/bus/bbc/1mhzbus/ieee488.cpp @@ -54,7 +54,8 @@ ROM_END // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(bbc_ieee488_device::device_add_mconfig) +void bbc_ieee488_device::device_add_mconfig(machine_config &config) +{ TMS9914(config, m_tms9914, 5_MHz_XTAL); m_tms9914->int_write_cb().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w)); m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); @@ -67,23 +68,25 @@ MACHINE_CONFIG_START(bbc_ieee488_device::device_add_mconfig) 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)); - MCFG_IEEE488_BUS_ADD() - MCFG_IEEE488_EOI_CALLBACK(WRITELINE(m_tms9914, tms9914_device, eoi_w)) - MCFG_IEEE488_DAV_CALLBACK(WRITELINE(m_tms9914, tms9914_device, dav_w)) - MCFG_IEEE488_NRFD_CALLBACK(WRITELINE(m_tms9914, tms9914_device, nrfd_w)) - MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ndac_w)) - MCFG_IEEE488_IFC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ifc_w)) - MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(m_tms9914, tms9914_device, srq_w)) - MCFG_IEEE488_ATN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, atn_w)) - MCFG_IEEE488_REN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ren_w)) - MCFG_IEEE488_SLOT_ADD("ieee_dev", 0, cbm_ieee488_devices, nullptr) + + 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); BBC_1MHZBUS_SLOT(config, m_1mhzbus, DERIVED_CLOCK(1, 1), bbc_1mhzbus_devices, nullptr); m_1mhzbus->irq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w)); m_1mhzbus->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::nmi_w)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(bbc_b488_device::device_add_mconfig) +void bbc_b488_device::device_add_mconfig(machine_config &config) +{ TMS9914(config, m_tms9914, 5_MHz_XTAL); // TODO: verify clock m_tms9914->int_write_cb().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w)); m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); @@ -96,35 +99,37 @@ MACHINE_CONFIG_START(bbc_b488_device::device_add_mconfig) 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)); - MCFG_IEEE488_BUS_ADD() - MCFG_IEEE488_EOI_CALLBACK(WRITELINE(m_tms9914, tms9914_device, eoi_w)) - MCFG_IEEE488_DAV_CALLBACK(WRITELINE(m_tms9914, tms9914_device, dav_w)) - MCFG_IEEE488_NRFD_CALLBACK(WRITELINE(m_tms9914, tms9914_device, nrfd_w)) - MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ndac_w)) - MCFG_IEEE488_IFC_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ifc_w)) - MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(m_tms9914, tms9914_device, srq_w)) - MCFG_IEEE488_ATN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, atn_w)) - MCFG_IEEE488_REN_CALLBACK(WRITELINE(m_tms9914, tms9914_device, ren_w)) - MCFG_IEEE488_SLOT_ADD("ieee_dev", 0, cbm_ieee488_devices, nullptr) + + 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); // TODO: LED's for ATN, TALK, and DATA -MACHINE_CONFIG_END +} -//MACHINE_CONFIG_START(bbc_procyon_device::device_add_mconfig) +//void bbc_procyon_device::device_add_mconfig(machine_config &config) +//{ // TODO: Implement MC68488 - //MCFG_IEEE488_BUS_ADD() - //MCFG_IEEE488_EOI_CALLBACK(WRITELINE(m_mc68488, mc68488_device, eoi_w)) - //MCFG_IEEE488_DAV_CALLBACK(WRITELINE(m_mc68488, mc68488_device, dav_w)) - //MCFG_IEEE488_NRFD_CALLBACK(WRITELINE(m_mc68488, mc68488_device, nrfd_w)) - //MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(m_mc68488, mc68488_device, ndac_w)) - //MCFG_IEEE488_IFC_CALLBACK(WRITELINE(m_mc68488, mc68488_device, ifc_w)) - //MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(m_mc68488, mc68488_device, srq_w)) - //MCFG_IEEE488_ATN_CALLBACK(WRITELINE(m_mc68488, mc68488_device, atn_w)) - //MCFG_IEEE488_REN_CALLBACK(WRITELINE(m_mc68488, mc68488_device, ren_w)) - //MCFG_IEEE488_SLOT_ADD("ieee_dev", 0, cbm_ieee488_devices, nullptr) + //IEEE488(config, m_ieee); + //m_ieee->eoi_callback(m_mc68488, FUNC(mc68488_device::eoi_w)); + //m_ieee->dav_callback(m_mc68488, FUNC(mc68488_device::dav_w)); + //m_ieee->nrfd_callback(m_mc68488, FUNC(mc68488_device::nrfd_w)); + //m_ieee->ndac_callback(m_mc68488, FUNC(mc68488_device::ndac_w)); + //m_ieee->ifc_callback(m_mc68488, FUNC(mc68488_device::ifc_w)); + //m_ieee->srq_callback(m_mc68488, FUNC(mc68488_device::srq_w)); + //m_ieee->atn_callback(m_mc68488, FUNC(mc68488_device::atn_w)); + //m_ieee->ren_callback(m_mc68488, FUNC(mc68488_device::ren_w)); + //IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr); // TODO: LED's for Bus Active, Byte Out, and Byte In -//MACHINE_CONFIG_END +//} //------------------------------------------------- // rom_region - device-specific ROM region @@ -192,82 +197,82 @@ void bbc_b488_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_ieee488_device::fred_r) +uint8_t bbc_ieee488_device::fred_r(offs_t offset) { uint8_t data = 0xff; if (offset >= 0x20 && offset < 0x28) { - data = m_tms9914->reg8_r(space, offset & 0x07); + data = m_tms9914->read(offset & 0x07); } - data &= m_1mhzbus->fred_r(space, offset); + data &= m_1mhzbus->fred_r(offset); return data; } -WRITE8_MEMBER(bbc_ieee488_device::fred_w) +void bbc_ieee488_device::fred_w(offs_t offset, uint8_t data) { if (offset >= 0x20 && offset < 0x28) { - m_tms9914->reg8_w(space, offset & 0x07, data); + m_tms9914->write(offset & 0x07, data); } - m_1mhzbus->fred_w(space, offset, data); + m_1mhzbus->fred_w(offset, data); } -READ8_MEMBER(bbc_ieee488_device::jim_r) +uint8_t bbc_ieee488_device::jim_r(offs_t offset) { uint8_t data = 0xff; - data &= m_1mhzbus->jim_r(space, offset); + data &= m_1mhzbus->jim_r(offset); return data; } -WRITE8_MEMBER(bbc_ieee488_device::jim_w) +void bbc_ieee488_device::jim_w(offs_t offset, uint8_t data) { - m_1mhzbus->jim_w(space, offset, data); + m_1mhzbus->jim_w(offset, data); } -READ8_MEMBER(bbc_b488_device::fred_r) +uint8_t bbc_b488_device::fred_r(offs_t offset) { uint8_t data = 0xff; if (offset >= 0x20 && offset < 0x28) { - data = m_tms9914->reg8_r(space, offset & 0x07); + data = m_tms9914->read(offset & 0x07); } return data; } -WRITE8_MEMBER(bbc_b488_device::fred_w) +void bbc_b488_device::fred_w(offs_t offset, uint8_t data) { if (offset >= 0x20 && offset < 0x28) { - m_tms9914->reg8_w(space, offset & 0x07, data); + m_tms9914->write(offset & 0x07, data); } } -//READ8_MEMBER(bbc_procyon_device::fred_r) +//uint8_t bbc_procyon_device::fred_r(offs_t offset) //{ //uint8_t data = 0xff; //if (offset >= 0x20 && offset < 0x28) //{ - // data = mc68488_device->reg8_r(space, offset & 0x07); + // data = mc68488_device->read(offset & 0x07); //} //return data; //} -//WRITE8_MEMBER(bbc_procyon_device::fred_w) +//void bbc_procyon_device::fred_w(offs_t offset, uint8_t data) //{ //if (offset >= 0x20 && offset < 0x28) //{ - // mc68488_device->reg8_w(space, offset & 0x07, data); + // mc68488_device->write(offset & 0x07, data); //} //} diff --git a/src/devices/bus/bbc/1mhzbus/ieee488.h b/src/devices/bus/bbc/1mhzbus/ieee488.h index 05a9e60c928..9b810b4bf8d 100644 --- a/src/devices/bus/bbc/1mhzbus/ieee488.h +++ b/src/devices/bus/bbc/1mhzbus/ieee488.h @@ -42,10 +42,10 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; - virtual DECLARE_READ8_MEMBER(jim_r) override; - virtual DECLARE_WRITE8_MEMBER(jim_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; + virtual uint8_t jim_r(offs_t offset) override; + virtual void jim_w(offs_t offset, uint8_t data) override; private: required_device<ieee488_device> m_ieee; @@ -69,8 +69,8 @@ protected: // optional information overrides virtual void device_add_mconfig(machine_config &config) override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; private: required_device<ieee488_device> m_ieee; @@ -94,8 +94,8 @@ private: // virtual void device_add_mconfig(machine_config &config) override; // virtual const tiny_rom_entry *device_rom_region() const override; // -// virtual DECLARE_READ8_MEMBER(fred_r) override; -// virtual DECLARE_WRITE8_MEMBER(fred_w) override; +// virtual uint8_t fred_r(offs_t offset) override; +// virtual void fred_w(offs_t offset, uint8_t data) override; // //private: // required_device<ieee488_device> m_ieee; diff --git a/src/devices/bus/bbc/1mhzbus/m2000.cpp b/src/devices/bus/bbc/1mhzbus/m2000.cpp index 88a713d1ff8..8203cada22e 100644 --- a/src/devices/bus/bbc/1mhzbus/m2000.cpp +++ b/src/devices/bus/bbc/1mhzbus/m2000.cpp @@ -91,7 +91,7 @@ void bbc_m2000_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_m2000_device::fred_r) +uint8_t bbc_m2000_device::fred_r(offs_t offset) { uint8_t data = 0xff; @@ -100,59 +100,59 @@ READ8_MEMBER(bbc_m2000_device::fred_r) switch (offset & 0x06) { case 0x00: - data = m_acia1->read(space, offset & 1); + data = m_acia1->read(offset & 1); break; case 0x02: - data = m_acia2->read(space, offset & 1); + data = m_acia2->read(offset & 1); break; case 0x04: - data = m_acia3->read(space, offset & 1); + data = m_acia3->read(offset & 1); break; case 0x06: break; } } - data &= m_1mhzbus->fred_r(space, offset); + data &= m_1mhzbus->fred_r(offset); return data; } -WRITE8_MEMBER(bbc_m2000_device::fred_w) +void bbc_m2000_device::fred_w(offs_t offset, uint8_t data) { if (offset >= 0x08 && offset < 0x10) { switch (offset & 0x06) { case 0x00: - m_acia1->write(space, offset & 1, data); + m_acia1->write(offset & 1, data); break; case 0x02: - m_acia2->write(space, offset & 1, data); + m_acia2->write(offset & 1, data); break; case 0x04: - m_acia3->write(space, offset & 1, data); + m_acia3->write(offset & 1, data); break; case 0x06: break; } } - m_1mhzbus->fred_w(space, offset, data); + m_1mhzbus->fred_w(offset, data); } -READ8_MEMBER(bbc_m2000_device::jim_r) +uint8_t bbc_m2000_device::jim_r(offs_t offset) { uint8_t data = 0xff; - data &= m_1mhzbus->jim_r(space, offset); + data &= m_1mhzbus->jim_r(offset); return data; } -WRITE8_MEMBER(bbc_m2000_device::jim_w) +void bbc_m2000_device::jim_w(offs_t offset, uint8_t data) { - m_1mhzbus->jim_w(space, offset, data); + m_1mhzbus->jim_w(offset, data); } WRITE_LINE_MEMBER(bbc_m2000_device::write_acia_clock) diff --git a/src/devices/bus/bbc/1mhzbus/m2000.h b/src/devices/bus/bbc/1mhzbus/m2000.h index f476c92dac5..eeee1034a4e 100644 --- a/src/devices/bus/bbc/1mhzbus/m2000.h +++ b/src/devices/bus/bbc/1mhzbus/m2000.h @@ -38,10 +38,10 @@ protected: // optional information overrides virtual void device_add_mconfig(machine_config &config) override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; - virtual DECLARE_READ8_MEMBER(jim_r) override; - virtual DECLARE_WRITE8_MEMBER(jim_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; + virtual uint8_t jim_r(offs_t offset) override; + virtual void jim_w(offs_t offset, uint8_t data) override; private: DECLARE_WRITE_LINE_MEMBER(write_acia_clock); diff --git a/src/devices/bus/bbc/1mhzbus/opus3.cpp b/src/devices/bus/bbc/1mhzbus/opus3.cpp index 65a8a3134ec..77f21ac199a 100644 --- a/src/devices/bus/bbc/1mhzbus/opus3.cpp +++ b/src/devices/bus/bbc/1mhzbus/opus3.cpp @@ -159,7 +159,7 @@ void bbc_opusa_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_opus3_device::fred_r) +uint8_t bbc_opus3_device::fred_r(offs_t offset) { uint8_t data = 0xff; @@ -175,7 +175,7 @@ READ8_MEMBER(bbc_opus3_device::fred_r) return data; } -WRITE8_MEMBER(bbc_opus3_device::fred_w) +void bbc_opus3_device::fred_w(offs_t offset, uint8_t data) { floppy_image_device *floppy = nullptr; @@ -219,7 +219,7 @@ WRITE_LINE_MEMBER(bbc_opus3_device::fdc_drq_w) m_slot->nmi_w((m_fdc_drq && m_fdc_ie) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER(bbc_opus3_device::jim_r) +uint8_t bbc_opus3_device::jim_r(offs_t offset) { if ((m_ramdisk_page << 8) < m_ramdisk->size()) return m_ramdisk->read((m_ramdisk_page << 8) + offset); @@ -227,7 +227,7 @@ READ8_MEMBER(bbc_opus3_device::jim_r) return 0xff; } -WRITE8_MEMBER(bbc_opus3_device::jim_w) +void bbc_opus3_device::jim_w(offs_t offset, uint8_t data) { if ((m_ramdisk_page << 8) < m_ramdisk->size()) m_ramdisk->write((m_ramdisk_page << 8) + offset, data); diff --git a/src/devices/bus/bbc/1mhzbus/opus3.h b/src/devices/bus/bbc/1mhzbus/opus3.h index ef7a2174f5c..7d287f1622c 100644 --- a/src/devices/bus/bbc/1mhzbus/opus3.h +++ b/src/devices/bus/bbc/1mhzbus/opus3.h @@ -39,10 +39,10 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; - virtual DECLARE_READ8_MEMBER(jim_r) override; - virtual DECLARE_WRITE8_MEMBER(jim_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; + virtual uint8_t jim_r(offs_t offset) override; + virtual void jim_w(offs_t offset, uint8_t data) override; private: DECLARE_FLOPPY_FORMATS(floppy_formats); diff --git a/src/devices/bus/bbc/1mhzbus/sprite.cpp b/src/devices/bus/bbc/1mhzbus/sprite.cpp new file mode 100644 index 00000000000..ee7f5f292e7 --- /dev/null +++ b/src/devices/bus/bbc/1mhzbus/sprite.cpp @@ -0,0 +1,99 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Logotron Sprite Board + +**********************************************************************/ + + +#include "emu.h" +#include "sprite.h" +#include "screen.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_SPRITE, bbc_sprite_device, "bbc_sprite", "Logotron Sprite Board"); + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void bbc_sprite_device::device_add_mconfig(machine_config &config) +{ + TMS9129(config, m_vdp, 10.738635_MHz_XTAL); + m_vdp->int_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w)); + m_vdp->set_screen("screen"); + m_vdp->set_vram_size(0x4000); + + SCREEN(config, "screen", SCREEN_TYPE_RASTER); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_sprite_device - constructor +//------------------------------------------------- + +bbc_sprite_device::bbc_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_SPRITE, tag, owner, clock) + , device_bbc_1mhzbus_interface(mconfig, *this) + , m_vdp(*this, "vdp") +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_sprite_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void bbc_sprite_device::device_reset() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +uint8_t bbc_sprite_device::fred_r(offs_t offset) +{ + uint8_t data = 0xff; + + switch (offset) + { + case 0xa0: + data = m_vdp->vram_read(); + break; + case 0xa2: + data = m_vdp->register_read(); + break; + } + return data; +} + +void bbc_sprite_device::fred_w(offs_t offset, uint8_t data) +{ + switch (offset) + { + case 0xa1: + m_vdp->vram_write(data); + break; + case 0xa3: + m_vdp->register_write(data); + break; + } +} diff --git a/src/devices/bus/bbc/1mhzbus/sprite.h b/src/devices/bus/bbc/1mhzbus/sprite.h new file mode 100644 index 00000000000..02b0cff5dc2 --- /dev/null +++ b/src/devices/bus/bbc/1mhzbus/sprite.h @@ -0,0 +1,49 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Logotron Sprite Board + +**********************************************************************/ + + +#ifndef MAME_BUS_BBC_1MHZBUS_SPRITE_H +#define MAME_BUS_BBC_1MHZBUS_SPRITE_H + +#include "1mhzbus.h" +#include "video/tms9928a.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class bbc_sprite_device: + public device_t, + public device_bbc_1mhzbus_interface +{ +public: + // construction/destruction + bbc_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; + +private: + required_device<tms9129_device> m_vdp; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_SPRITE, bbc_sprite_device); + + +#endif /* MAME_BUS_BBC_1MHZBUS_SPRITE_H */ diff --git a/src/devices/bus/bbc/exp/exp.cpp b/src/devices/bus/bbc/exp/exp.cpp index d2a5cca3611..25f19746b72 100644 --- a/src/devices/bus/bbc/exp/exp.cpp +++ b/src/devices/bus/bbc/exp/exp.cpp @@ -97,26 +97,26 @@ void bbc_exp_slot_device::device_reset() // read //------------------------------------------------- -READ8_MEMBER(bbc_exp_slot_device::fred_r) +uint8_t bbc_exp_slot_device::fred_r(offs_t offset) { if (m_card) - return m_card->fred_r(space, offset); + return m_card->fred_r(offset); else return 0xff; } -READ8_MEMBER(bbc_exp_slot_device::jim_r) +uint8_t bbc_exp_slot_device::jim_r(offs_t offset) { if (m_card) - return m_card->jim_r(space, offset); + return m_card->jim_r(offset); else return 0xff; } -READ8_MEMBER(bbc_exp_slot_device::sheila_r) +uint8_t bbc_exp_slot_device::sheila_r(offs_t offset) { if (m_card) - return m_card->sheila_r(space, offset); + return m_card->sheila_r(offset); else return 0xfe; } @@ -125,32 +125,32 @@ READ8_MEMBER(bbc_exp_slot_device::sheila_r) // write //------------------------------------------------- -WRITE8_MEMBER(bbc_exp_slot_device::fred_w) +void bbc_exp_slot_device::fred_w(offs_t offset, uint8_t data) { if (m_card) - m_card->fred_w(space, offset, data); + m_card->fred_w(offset, data); } -WRITE8_MEMBER(bbc_exp_slot_device::jim_w) +void bbc_exp_slot_device::jim_w(offs_t offset, uint8_t data) { if (m_card) - m_card->jim_w(space, offset, data); + m_card->jim_w(offset, data); } -WRITE8_MEMBER(bbc_exp_slot_device::sheila_w) +void bbc_exp_slot_device::sheila_w(offs_t offset, uint8_t data) { if (m_card) - m_card->sheila_w(space, offset, data); + m_card->sheila_w(offset, data); } //------------------------------------------------- // pb_r //------------------------------------------------- -READ8_MEMBER(bbc_exp_slot_device::pb_r) +uint8_t bbc_exp_slot_device::pb_r() { if (m_card) - return 0x1f | m_card->pb_r(space, 0); + return 0x1f | m_card->pb_r(); else return 0xff; } @@ -160,10 +160,10 @@ READ8_MEMBER(bbc_exp_slot_device::pb_r) // pb_w //------------------------------------------------- -WRITE8_MEMBER(bbc_exp_slot_device::pb_w) +void bbc_exp_slot_device::pb_w(uint8_t data) { if (m_card) - m_card->pb_w(space, 0, data); + m_card->pb_w(data); } //------------------------------------------------- diff --git a/src/devices/bus/bbc/exp/exp.h b/src/devices/bus/bbc/exp/exp.h index 5269deb3900..ef1a0174b1a 100644 --- a/src/devices/bus/bbc/exp/exp.h +++ b/src/devices/bus/bbc/exp/exp.h @@ -75,12 +75,12 @@ public: auto cb1_handler() { return m_cb1_handler.bind(); } auto cb2_handler() { return m_cb2_handler.bind(); } - virtual DECLARE_READ8_MEMBER(fred_r); - virtual DECLARE_WRITE8_MEMBER(fred_w); - virtual DECLARE_READ8_MEMBER(jim_r); - virtual DECLARE_WRITE8_MEMBER(jim_w); - virtual DECLARE_READ8_MEMBER(sheila_r); - virtual DECLARE_WRITE8_MEMBER(sheila_w); + uint8_t fred_r(offs_t offset); + void fred_w(offs_t offset, uint8_t data); + uint8_t jim_r(offs_t offset); + void jim_w(offs_t offset, uint8_t data); + uint8_t sheila_r(offs_t offset); + void sheila_w(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); } DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); } @@ -89,8 +89,8 @@ public: DECLARE_WRITE_LINE_MEMBER(cb1_w) { m_cb1_handler(state); } DECLARE_WRITE_LINE_MEMBER(cb2_w) { m_cb2_handler(state); } - DECLARE_READ8_MEMBER(pb_r); - DECLARE_WRITE8_MEMBER(pb_w); + uint8_t pb_r(); + void pb_w(uint8_t data); protected: // device-level overrides @@ -114,15 +114,15 @@ private: class device_bbc_exp_interface : public device_slot_card_interface { public: - virtual DECLARE_READ8_MEMBER(fred_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(fred_w) { } - virtual DECLARE_READ8_MEMBER(jim_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(jim_w) { } - virtual DECLARE_READ8_MEMBER(sheila_r) { return 0xfe; } - virtual DECLARE_WRITE8_MEMBER(sheila_w) { } - - virtual DECLARE_READ8_MEMBER(pb_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(pb_w) { } + virtual uint8_t fred_r(offs_t offset) { return 0xff; } + virtual void fred_w(offs_t offset, uint8_t data) { } + virtual uint8_t jim_r(offs_t offset) { return 0xff; } + virtual void jim_w(offs_t offset, uint8_t data) { } + virtual uint8_t sheila_r(offs_t offset) { return 0xfe; } + virtual void sheila_w(offs_t offset, uint8_t data) { } + + virtual uint8_t pb_r() { return 0xff; } + virtual void pb_w(uint8_t data) { } protected: device_bbc_exp_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/bbc/exp/mertec.cpp b/src/devices/bus/bbc/exp/mertec.cpp index 8f896da0359..ab9dc3c2f6e 100644 --- a/src/devices/bus/bbc/exp/mertec.cpp +++ b/src/devices/bus/bbc/exp/mertec.cpp @@ -52,7 +52,7 @@ void bbc_mertec_device::device_add_mconfig(machine_config &config) //m_pia->irq_handler().set("irqs", FUNC(input_merger_device::in_w<0>)); /* adc */ - UPD7002(config, m_upd7002, 0); + UPD7002(config, m_upd7002, DERIVED_CLOCK(1, 8)); m_upd7002->set_get_analogue_callback(FUNC(bbc_mertec_device::get_analogue_input), this); m_upd7002->set_eoc_callback(FUNC(bbc_mertec_device::upd7002_eoc), this); @@ -114,52 +114,52 @@ void bbc_mertec_device::upd7002_eoc(int data) //m_via6522_0->write_cb1(data); } -READ8_MEMBER(bbc_mertec_device::fred_r) +uint8_t bbc_mertec_device::fred_r(offs_t offset) { - return m_2mhzbus->fred_r(space, offset); + return m_2mhzbus->fred_r(offset); } -WRITE8_MEMBER(bbc_mertec_device::fred_w) +void bbc_mertec_device::fred_w(offs_t offset, uint8_t data) { - m_2mhzbus->fred_w(space, offset, data); + m_2mhzbus->fred_w(offset, data); } -READ8_MEMBER(bbc_mertec_device::jim_r) +uint8_t bbc_mertec_device::jim_r(offs_t offset) { - return m_2mhzbus->jim_r(space, offset); + return m_2mhzbus->jim_r(offset); } -WRITE8_MEMBER(bbc_mertec_device::jim_w) +void bbc_mertec_device::jim_w(offs_t offset, uint8_t data) { - m_2mhzbus->jim_w(space, offset, data); + m_2mhzbus->jim_w(offset, data); } -READ8_MEMBER(bbc_mertec_device::sheila_r) +uint8_t bbc_mertec_device::sheila_r(offs_t offset) { uint8_t data = 0xfe; if (offset >= 0x18 && offset < 0x20) { - data = m_upd7002->read(space, offset & 0x03); + data = m_upd7002->read(offset & 0x03); } return data; } -WRITE8_MEMBER(bbc_mertec_device::sheila_w) +void bbc_mertec_device::sheila_w(offs_t offset, uint8_t data) { if (offset >= 0x18 && offset < 0x20) { - m_upd7002->write(space, offset & 0x03, data); + m_upd7002->write(offset & 0x03, data); } } -READ8_MEMBER(bbc_mertec_device::pb_r) +uint8_t bbc_mertec_device::pb_r() { - return m_userport->pb_r(space, 0); + return m_userport->pb_r(); } -WRITE8_MEMBER(bbc_mertec_device::pb_w) +void bbc_mertec_device::pb_w(uint8_t data) { - m_userport->pb_w(space, 0, data); + m_userport->pb_w(data); } diff --git a/src/devices/bus/bbc/exp/mertec.h b/src/devices/bus/bbc/exp/mertec.h index bd87c0d5398..33d71ab2ce9 100644 --- a/src/devices/bus/bbc/exp/mertec.h +++ b/src/devices/bus/bbc/exp/mertec.h @@ -40,15 +40,15 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(fred_r) override; - virtual DECLARE_WRITE8_MEMBER(fred_w) override; - virtual DECLARE_READ8_MEMBER(jim_r) override; - virtual DECLARE_WRITE8_MEMBER(jim_w) override; - virtual DECLARE_READ8_MEMBER(sheila_r) override; - virtual DECLARE_WRITE8_MEMBER(sheila_w) override; - - virtual DECLARE_READ8_MEMBER(pb_r) override; - virtual DECLARE_WRITE8_MEMBER(pb_w) override; + virtual uint8_t fred_r(offs_t offset) override; + virtual void fred_w(offs_t offset, uint8_t data) override; + virtual uint8_t jim_r(offs_t offset) override; + virtual void jim_w(offs_t offset, uint8_t data) override; + virtual uint8_t sheila_r(offs_t offset) override; + virtual void sheila_w(offs_t offset, uint8_t data) override; + + virtual uint8_t pb_r() override; + virtual void pb_w(uint8_t data) override; private: int get_analogue_input(int channel_number); diff --git a/src/devices/bus/bbc/fdc/acorn.cpp b/src/devices/bus/bbc/fdc/acorn.cpp index dd5d8f28559..0df7b38b076 100644 --- a/src/devices/bus/bbc/fdc/acorn.cpp +++ b/src/devices/bus/bbc/fdc/acorn.cpp @@ -166,30 +166,30 @@ void bbc_acorn1770_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_acorn8271_device::read) +uint8_t bbc_acorn8271_device::read(offs_t offset) { uint8_t data; if (offset & 0x04) { - data = m_fdc->data_r(space , 0); + data = m_fdc->data_r(); } else { - data = m_fdc->read(space, offset & 0x03); + data = m_fdc->read(offset & 0x03); } return data; } -WRITE8_MEMBER(bbc_acorn8271_device::write) +void bbc_acorn8271_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { - m_fdc->data_w(space, 0, data); + m_fdc->data_w(data); } else { - m_fdc->write(space, offset & 0x03, data); + m_fdc->write(offset & 0x03, data); } } @@ -207,7 +207,7 @@ WRITE_LINE_MEMBER(bbc_acorn8271_device::side_w) } -READ8_MEMBER(bbc_acorn1770_device::read) +uint8_t bbc_acorn1770_device::read(offs_t offset) { uint8_t data = 0xff; @@ -222,7 +222,7 @@ READ8_MEMBER(bbc_acorn1770_device::read) return data; } -WRITE8_MEMBER(bbc_acorn1770_device::write) +void bbc_acorn1770_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { diff --git a/src/devices/bus/bbc/fdc/acorn.h b/src/devices/bus/bbc/fdc/acorn.h index 951b7e33e1d..13b434b156b 100644 --- a/src/devices/bus/bbc/fdc/acorn.h +++ b/src/devices/bus/bbc/fdc/acorn.h @@ -42,8 +42,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: DECLARE_WRITE_LINE_MEMBER(motor_w); @@ -70,8 +70,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); diff --git a/src/devices/bus/bbc/fdc/ams.cpp b/src/devices/bus/bbc/fdc/ams.cpp index 02af01be5c5..db9eb7e3012 100644 --- a/src/devices/bus/bbc/fdc/ams.cpp +++ b/src/devices/bus/bbc/fdc/ams.cpp @@ -89,30 +89,30 @@ void bbc_ams3_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_ams3_device::read) +uint8_t bbc_ams3_device::read(offs_t offset) { uint8_t data; if (offset & 0x04) { - data = m_fdc->data_r(space , 0); + data = m_fdc->data_r(); } else { - data = m_fdc->read(space, offset & 0x03); + data = m_fdc->read(offset & 0x03); } return data; } -WRITE8_MEMBER(bbc_ams3_device::write) +void bbc_ams3_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { - m_fdc->data_w(space, 0, data); + m_fdc->data_w(data); } else { - m_fdc->write(space, offset & 0x03, data); + m_fdc->write(offset & 0x03, data); } } diff --git a/src/devices/bus/bbc/fdc/ams.h b/src/devices/bus/bbc/fdc/ams.h index a97a6b762c5..304666b5392 100644 --- a/src/devices/bus/bbc/fdc/ams.h +++ b/src/devices/bus/bbc/fdc/ams.h @@ -39,8 +39,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); diff --git a/src/devices/bus/bbc/fdc/cumana.cpp b/src/devices/bus/bbc/fdc/cumana.cpp index 23cecd3ebcf..f4490b1922d 100644 --- a/src/devices/bus/bbc/fdc/cumana.cpp +++ b/src/devices/bus/bbc/fdc/cumana.cpp @@ -137,7 +137,7 @@ void bbc_cumanafdc_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_cumanafdc_device::read) +uint8_t bbc_cumanafdc_device::read(offs_t offset) { uint8_t data; @@ -152,7 +152,7 @@ READ8_MEMBER(bbc_cumanafdc_device::read) return data; } -WRITE8_MEMBER(bbc_cumanafdc_device::write) +void bbc_cumanafdc_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { diff --git a/src/devices/bus/bbc/fdc/cumana.h b/src/devices/bus/bbc/fdc/cumana.h index 5b2439000ec..6e1a4f25011 100644 --- a/src/devices/bus/bbc/fdc/cumana.h +++ b/src/devices/bus/bbc/fdc/cumana.h @@ -39,8 +39,8 @@ protected: // device-level overrides virtual void device_start() override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; required_device<mb8877_device> m_fdc; required_device<floppy_connector> m_floppy0; diff --git a/src/devices/bus/bbc/fdc/cv1797.cpp b/src/devices/bus/bbc/fdc/cv1797.cpp index 98f54718c42..d14098a3fa3 100644 --- a/src/devices/bus/bbc/fdc/cv1797.cpp +++ b/src/devices/bus/bbc/fdc/cv1797.cpp @@ -100,7 +100,7 @@ void bbc_cv1797_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_cv1797_device::read) +uint8_t bbc_cv1797_device::read(offs_t offset) { uint8_t data; @@ -115,7 +115,7 @@ READ8_MEMBER(bbc_cv1797_device::read) return data; } -WRITE8_MEMBER(bbc_cv1797_device::write) +void bbc_cv1797_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { diff --git a/src/devices/bus/bbc/fdc/cv1797.h b/src/devices/bus/bbc/fdc/cv1797.h index a887a1b18a4..86207c8fcd0 100644 --- a/src/devices/bus/bbc/fdc/cv1797.h +++ b/src/devices/bus/bbc/fdc/cv1797.h @@ -40,8 +40,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: DECLARE_FLOPPY_FORMATS(floppy_formats); diff --git a/src/devices/bus/bbc/fdc/fdc.cpp b/src/devices/bus/bbc/fdc/fdc.cpp index 10f9131351f..2269bb3370a 100644 --- a/src/devices/bus/bbc/fdc/fdc.cpp +++ b/src/devices/bus/bbc/fdc/fdc.cpp @@ -89,10 +89,10 @@ void bbc_fdc_slot_device::device_reset() // read //------------------------------------------------- -READ8_MEMBER(bbc_fdc_slot_device::read) +uint8_t bbc_fdc_slot_device::read(offs_t offset) { if (m_card) - return m_card->read(space, offset); + return m_card->read(offset); else return 0xff; } @@ -101,10 +101,10 @@ READ8_MEMBER(bbc_fdc_slot_device::read) // write //------------------------------------------------- -WRITE8_MEMBER(bbc_fdc_slot_device::write) +void bbc_fdc_slot_device::write(offs_t offset, uint8_t data) { if (m_card) - m_card->write(space, offset, data); + m_card->write(offset, data); } //------------------------------------------------- diff --git a/src/devices/bus/bbc/fdc/fdc.h b/src/devices/bus/bbc/fdc/fdc.h index 0cc256961ee..3264172a25d 100644 --- a/src/devices/bus/bbc/fdc/fdc.h +++ b/src/devices/bus/bbc/fdc/fdc.h @@ -41,8 +41,8 @@ public: auto intrq_wr_callback() { return m_intrq_cb.bind(); } auto drq_wr_callback() { return m_drq_cb.bind(); } - virtual DECLARE_READ8_MEMBER(read); - virtual DECLARE_WRITE8_MEMBER(write); + uint8_t read(offs_t offset); + void write(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER( intrq_w ) { m_intrq_cb(state); } DECLARE_WRITE_LINE_MEMBER( drq_w) { m_drq_cb(state); } @@ -66,8 +66,8 @@ private: class device_bbc_fdc_interface : public device_slot_card_interface { public: - virtual DECLARE_READ8_MEMBER(read) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(write) { } + virtual uint8_t read(offs_t offset) { return 0xff; } + virtual void write(offs_t offset, uint8_t data) { } protected: device_bbc_fdc_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/bbc/fdc/microware.cpp b/src/devices/bus/bbc/fdc/microware.cpp index 29489af382c..477ac0f3f9e 100644 --- a/src/devices/bus/bbc/fdc/microware.cpp +++ b/src/devices/bus/bbc/fdc/microware.cpp @@ -101,7 +101,7 @@ void bbc_microware_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_microware_device::read) +uint8_t bbc_microware_device::read(offs_t offset) { uint8_t data; @@ -116,7 +116,7 @@ READ8_MEMBER(bbc_microware_device::read) return data; } -WRITE8_MEMBER(bbc_microware_device::write) +void bbc_microware_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { diff --git a/src/devices/bus/bbc/fdc/microware.h b/src/devices/bus/bbc/fdc/microware.h index 117159b407d..61c0cb358cf 100644 --- a/src/devices/bus/bbc/fdc/microware.h +++ b/src/devices/bus/bbc/fdc/microware.h @@ -42,8 +42,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: DECLARE_FLOPPY_FORMATS(floppy_formats); diff --git a/src/devices/bus/bbc/fdc/opus.cpp b/src/devices/bus/bbc/fdc/opus.cpp index f25de315c58..f6b07df6bcb 100644 --- a/src/devices/bus/bbc/fdc/opus.cpp +++ b/src/devices/bus/bbc/fdc/opus.cpp @@ -212,7 +212,7 @@ void bbc_opusfdc_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_opus8272_device::read) +uint8_t bbc_opus8272_device::read(offs_t offset) { uint8_t data = 0xff; @@ -227,20 +227,20 @@ READ8_MEMBER(bbc_opus8272_device::read) if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(1); if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(1); case 0x04: - data = m_fdc->msr_r(space, 0); + data = m_fdc->msr_r(); break; case 0x05: if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0); if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0); case 0x07: - data = m_fdc->fifo_r(space, 0); + data = m_fdc->fifo_r(); break; } return data; } -WRITE8_MEMBER(bbc_opus8272_device::write) +void bbc_opus8272_device::write(offs_t offset, uint8_t data) { floppy_image_device *floppy = nullptr; @@ -259,13 +259,13 @@ WRITE8_MEMBER(bbc_opus8272_device::write) if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0); if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0); case 0x07: - m_fdc->fifo_w(space, 0, data); + m_fdc->fifo_w(data); break; } } -READ8_MEMBER(bbc_opusfdc_device::read) +uint8_t bbc_opusfdc_device::read(offs_t offset) { uint8_t data; @@ -280,7 +280,7 @@ READ8_MEMBER(bbc_opusfdc_device::read) return data; } -WRITE8_MEMBER(bbc_opusfdc_device::write) +void bbc_opusfdc_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { diff --git a/src/devices/bus/bbc/fdc/opus.h b/src/devices/bus/bbc/fdc/opus.h index 721f3ebab5c..033fccc02c4 100644 --- a/src/devices/bus/bbc/fdc/opus.h +++ b/src/devices/bus/bbc/fdc/opus.h @@ -36,8 +36,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: required_device<i8272a_device> m_fdc; @@ -62,8 +62,8 @@ protected: // device-level overrides virtual void device_start() override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; required_device<wd_fdc_device_base> m_fdc; required_device<floppy_connector> m_floppy0; diff --git a/src/devices/bus/bbc/fdc/watford.cpp b/src/devices/bus/bbc/fdc/watford.cpp index b888840314f..4c3f31344ee 100644 --- a/src/devices/bus/bbc/fdc/watford.cpp +++ b/src/devices/bus/bbc/fdc/watford.cpp @@ -147,7 +147,7 @@ void bbc_weddb3_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_weddb2_device::read) +uint8_t bbc_weddb2_device::read(offs_t offset) { uint8_t data; @@ -162,7 +162,7 @@ READ8_MEMBER(bbc_weddb2_device::read) return data; } -WRITE8_MEMBER(bbc_weddb2_device::write) +void bbc_weddb2_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { @@ -192,7 +192,7 @@ WRITE8_MEMBER(bbc_weddb2_device::write) } } -READ8_MEMBER(bbc_weddb3_device::read) +uint8_t bbc_weddb3_device::read(offs_t offset) { uint8_t data; @@ -207,7 +207,7 @@ READ8_MEMBER(bbc_weddb3_device::read) return data; } -WRITE8_MEMBER(bbc_weddb3_device::write) +void bbc_weddb3_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { diff --git a/src/devices/bus/bbc/fdc/watford.h b/src/devices/bus/bbc/fdc/watford.h index 02bbf59f523..2f1cfa65c64 100644 --- a/src/devices/bus/bbc/fdc/watford.h +++ b/src/devices/bus/bbc/fdc/watford.h @@ -45,8 +45,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: required_device<wd_fdc_device_base> m_fdc; @@ -68,8 +68,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER(read) override; - virtual DECLARE_WRITE8_MEMBER(write) override; + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; private: required_device<wd_fdc_device_base> m_fdc; diff --git a/src/devices/bus/bbc/joyport/joyport.cpp b/src/devices/bus/bbc/joyport/joyport.cpp index 5ed3f8d2fff..0c1bae50ee2 100644 --- a/src/devices/bus/bbc/joyport/joyport.cpp +++ b/src/devices/bus/bbc/joyport/joyport.cpp @@ -91,11 +91,11 @@ void bbc_joyport_slot_device::device_reset() // pb_r //------------------------------------------------- -READ8_MEMBER(bbc_joyport_slot_device::pb_r) +uint8_t bbc_joyport_slot_device::pb_r() { // TODO: Joyport connected to PB0-PB4 only. PB5-PB7 are expansion port. if (m_device) - return 0xe0 | m_device->pb_r(space, 0); + return 0xe0 | m_device->pb_r(); else return 0xff; } @@ -105,10 +105,10 @@ READ8_MEMBER(bbc_joyport_slot_device::pb_r) // pb_w //------------------------------------------------- -WRITE8_MEMBER(bbc_joyport_slot_device::pb_w) +void bbc_joyport_slot_device::pb_w(uint8_t data) { if (m_device) - m_device->pb_w(space, 0, data); + m_device->pb_w(data); } diff --git a/src/devices/bus/bbc/joyport/joyport.h b/src/devices/bus/bbc/joyport/joyport.h index 572e41f7612..6abda62633d 100644 --- a/src/devices/bus/bbc/joyport/joyport.h +++ b/src/devices/bus/bbc/joyport/joyport.h @@ -64,8 +64,8 @@ public: DECLARE_WRITE_LINE_MEMBER(cb1_w) { m_cb1_handler(state); } DECLARE_WRITE_LINE_MEMBER(cb2_w) { m_cb2_handler(state); } - DECLARE_READ8_MEMBER(pb_r); - DECLARE_WRITE8_MEMBER(pb_w); + uint8_t pb_r(); + void pb_w(uint8_t data); protected: // device-level overrides @@ -86,8 +86,8 @@ private: class device_bbc_joyport_interface : public device_slot_card_interface { public: - virtual DECLARE_READ8_MEMBER(pb_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(pb_w) { } + virtual uint8_t pb_r() { return 0xff; } + virtual void pb_w(uint8_t data) { } protected: device_bbc_joyport_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/bbc/joyport/joystick.cpp b/src/devices/bus/bbc/joyport/joystick.cpp index 5f4047c13a3..d53186f118d 100644 --- a/src/devices/bus/bbc/joyport/joystick.cpp +++ b/src/devices/bus/bbc/joyport/joystick.cpp @@ -78,7 +78,7 @@ void bbcmc_joystick_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbcmc_joystick_device::pb_r) +uint8_t bbcmc_joystick_device::pb_r() { return m_joy->read(); } diff --git a/src/devices/bus/bbc/joyport/joystick.h b/src/devices/bus/bbc/joyport/joystick.h index 0e9cea22716..8d0cc5a0458 100644 --- a/src/devices/bus/bbc/joyport/joystick.h +++ b/src/devices/bus/bbc/joyport/joystick.h @@ -36,7 +36,7 @@ protected: virtual void device_start() override; virtual void device_reset() override; - virtual DECLARE_READ8_MEMBER(pb_r) override; + virtual uint8_t pb_r() override; private: required_ioport m_joy; diff --git a/src/devices/bus/bbc/rom/dfs.cpp b/src/devices/bus/bbc/rom/dfs.cpp new file mode 100644 index 00000000000..8a3aac6d588 --- /dev/null +++ b/src/devices/bus/bbc/rom/dfs.cpp @@ -0,0 +1,63 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro MRM E00 DFS emulation + + Comprises of 8K ROM and 2K/4K? RAM on a carrier board, with flying lead + to RW line to enable writing to RAM. + +***************************************************************************/ + +#include "emu.h" +#include "dfs.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_MRME00, bbc_mrme00_device, "bbc_mrme00", "BBC Micro MRM E00 DFS") + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_rom_device - constructor +//------------------------------------------------- + +bbc_mrme00_device::bbc_mrme00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_MRME00, tag, owner, clock) + , device_bbc_rom_interface(mconfig, *this) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_mrme00_device::device_start() +{ +} + +//------------------------------------------------- +// read +//------------------------------------------------- + +uint8_t bbc_mrme00_device::read(offs_t offset) +{ + if (offset < get_rom_size()) + return get_rom_base()[offset & (get_rom_size() - 1)]; + else + return get_ram_base()[offset & (get_ram_size() - 1)]; +} + +//------------------------------------------------- +// write +//------------------------------------------------- + +void bbc_mrme00_device::write(offs_t offset, uint8_t data) +{ + get_ram_base()[offset & (get_ram_size() - 1)] = data; +} diff --git a/src/devices/bus/bbc/rom/dfs.h b/src/devices/bus/bbc/rom/dfs.h new file mode 100644 index 00000000000..b76a7ab26ed --- /dev/null +++ b/src/devices/bus/bbc/rom/dfs.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro MRM E00 DFS emulation + +***************************************************************************/ + +#ifndef MAME_BUS_BBC_ROM_DFS_H +#define MAME_BUS_BBC_ROM_DFS_H + +#pragma once + +#include "slot.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_mrme00_device + +class bbc_mrme00_device : public device_t, + public device_bbc_rom_interface +{ +public: + // construction/destruction + bbc_mrme00_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; +}; + +// device type definition +DECLARE_DEVICE_TYPE(BBC_MRME00, bbc_mrme00_device) + + +#endif // MAME_BUS_BBC_ROM_DFS_H diff --git a/src/devices/bus/bbc/rom/pal.cpp b/src/devices/bus/bbc/rom/pal.cpp new file mode 100644 index 00000000000..51667f70955 --- /dev/null +++ b/src/devices/bus/bbc/rom/pal.cpp @@ -0,0 +1,312 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro PALPROM carrier boards + + Computer Concepts PALPROM carrier boards (PAL16R4): + These were the first to provide a 32K ROM banked into a 16K slot using + a PAL to perform the switching upon reads from pre-programmed zones. In + addition to being able to provide larger ROM based applications such + as Inter-Word and Inter-Base, it also served as copy protection since + the carrier board and PAL would have to be reproduced to support the + ROM. + Other publishers such as Beebug and PMS also used the carrier boards + and PAL provided by Computer Concepts. + + Watford Electronics PALPROM carrier boards (PAL16L8): + The PALPROM device provides a means of running 32K software within the + space allocated to a 16K sideways ROM whilst providing a good degree of + software protection. + Within a PALPROM, a 32K EPROM is divided into 4 banks of 8K. These are + arranged in a 3 plus 1 arrangement. Bank 0, which occupies &8000 to + &9FFF is permanently enabled, whilst banks 1 to 3, which occupy the + region &A000 to &BFFF, are swapped in one at a time. This swapping is + made by performing an access to a special switching zone, of which there + are 8 in total. Accessing a switching zone, which is 32 bytes in length + and aligned to start on a 32 byte boundary, selects a pre-specified bank + (1 to 3) + + P.R.E.S. PALPROM carrier boards: + This was based on the Computer Concepts carrier board. + + Instant Mini Office 2: + Not a PALPROM carrier board but a larger ROM carrier containing 4x32K + and TTL circuits to enable and page each ROM into 16K banks. + +***************************************************************************/ + +#include "emu.h" +#include "pal.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_CCIWORD, bbc_cciword_device, "bbc_cciword", "Computer Concepts 32K ROM Carrier (Inter-Word)") +DEFINE_DEVICE_TYPE(BBC_CCIBASE, bbc_ccibase_device, "bbc_ccibase", "Computer Concepts 64K ROM Carrier (Inter-Base)") +DEFINE_DEVICE_TYPE(BBC_CCISPELL, bbc_ccispell_device, "bbc_ccispell", "Computer Concepts 128K ROM Carrier (SpellMaster)") +DEFINE_DEVICE_TYPE(BBC_PALQST, bbc_palqst_device, "bbc_palqst", "Watford Electronics ROM Carrier (Quest Paint)") +DEFINE_DEVICE_TYPE(BBC_PALWAP, bbc_palwap_device, "bbc_palwap", "Watford Electronics ROM Carrier (Wapping Editor)") +DEFINE_DEVICE_TYPE(BBC_PALTED, bbc_palted_device, "bbc_palted", "Watford Electronics ROM Carrier (TED)") +DEFINE_DEVICE_TYPE(BBC_PALABEP, bbc_palabep_device, "bbc_palabep", "P.R.E.S. 32K ROM Carrier (ABE+)") +DEFINE_DEVICE_TYPE(BBC_PALABE, bbc_palabe_device, "bbc_palabe", "P.R.E.S. 32K ROM Carrier (ABE)") +DEFINE_DEVICE_TYPE(BBC_PALMO2, bbc_palmo2_device, "bbc_palmo2", "Instant Mini Office 2 ROM Carrier") + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_palprom_device - constructor +//------------------------------------------------- + +bbc_pal_device::bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , device_bbc_rom_interface(mconfig, *this) + , m_bank(0) +{ +} + +bbc_cciword_device::bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_CCIWORD, tag, owner, clock) +{ +} + +bbc_ccibase_device::bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_CCIBASE, tag, owner, clock) +{ +} + +bbc_ccispell_device::bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_CCISPELL, tag, owner, clock) +{ +} + +bbc_palqst_device::bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_PALQST, tag, owner, clock) +{ +} + +bbc_palwap_device::bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_PALWAP, tag, owner, clock) +{ +} + +bbc_palted_device::bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_PALTED, tag, owner, clock) +{ +} + +bbc_palabep_device::bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_PALABEP, tag, owner, clock) +{ +} + +bbc_palabe_device::bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_PALABE, tag, owner, clock) +{ +} + +bbc_palmo2_device::bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_pal_device(mconfig, BBC_PALMO2, tag, owner, clock) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_pal_device::device_start() +{ + save_item(NAME(m_bank)); +} + +//------------------------------------------------- +// read +//------------------------------------------------- + +uint8_t bbc_cciword_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Inter-Word */ + switch (offset & 0x3fe0) + { + case 0x0060: + case 0x3fc0: m_bank = 0; break; + case 0x0040: + case 0x3fa0: + case 0x3fe0: m_bank = 1; break; + } + } + + return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)]; +} + +uint8_t bbc_ccibase_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Inter-Base */ + switch (offset & 0x3fe0) + { + case 0x3f80: m_bank = 0; break; + case 0x3fa0: m_bank = 1; break; + case 0x3fc0: m_bank = 2; break; + case 0x3fe0: m_bank = 3; break; + } + } + + return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)]; +} + +uint8_t bbc_ccispell_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for SpellMaster */ + if (offset == 0x3fe0) + { + m_bank = 0; + } + else if (m_bank == 0) + { + switch (offset & 0x3fe0) + { + case 0x3fc0: m_bank = 1; break; + case 0x3fa0: m_bank = 2; break; + case 0x3f80: m_bank = 3; break; + case 0x3f60: m_bank = 4; break; + case 0x3f40: m_bank = 5; break; + case 0x3f20: m_bank = 6; break; + case 0x3f00: m_bank = 7; break; + } + } + } + + return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)]; +} + +uint8_t bbc_palqst_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Quest Paint and ConQuest */ + switch (offset & 0x3fe0) + { + case 0x0820: m_bank = 2; break; + case 0x11e0: m_bank = 1; break; + case 0x12c0: m_bank = 3; break; + case 0x1340: m_bank = 0; break; + } + } + + if (offset & 0x2000) + { + return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)]; + } + else + { + return get_rom_base()[offset & 0x1fff]; + } +} + +uint8_t bbc_palwap_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Wapping Editor */ + switch (offset & 0x3fe0) + { + case 0x1f00: m_bank = 0; break; + case 0x1f20: m_bank = 1; break; + case 0x1f40: m_bank = 2; break; + case 0x1f60: m_bank = 3; break; + case 0x1f80: m_bank = 4; break; + case 0x1fa0: m_bank = 5; break; + case 0x1fc0: m_bank = 6; break; + case 0x1fe0: m_bank = 7; break; + } + } + + if (offset & 0x2000) + { + return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)]; + } + else + { + return get_rom_base()[offset & 0x1fff]; + } +} + +uint8_t bbc_palted_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for TED */ + switch (offset & 0x3fe0) + { + case 0x1f80: m_bank = 0; break; + case 0x1fa0: m_bank = 1; break; + case 0x1fc0: m_bank = 2; break; + case 0x1fe0: m_bank = 3; break; + } + } + + if (offset & 0x2000) + { + return get_rom_base()[(offset & 0x1fff) | (m_bank << 13)]; + } + else + { + return get_rom_base()[offset & 0x1fff]; + } +} + +uint8_t bbc_palabep_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Advanced BASIC Editor Plus */ + switch (offset & 0x3ffc) + { + case 0x3ff8: m_bank = 0; break; + case 0x3ffc: m_bank = 1; break; + } + } + + return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)]; +} + +uint8_t bbc_palabe_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Advanced BASIC Editor */ + switch (offset & 0x3ffc) + { + case 0x3ff8: m_bank = 1; break; + case 0x3ffc: m_bank = 0; break; + } + } + + return get_rom_base()[(offset & 0x3fff) | (m_bank << 14)]; +} + +uint8_t bbc_palmo2_device::read(offs_t offset) +{ + if (!machine().side_effects_disabled()) + { + /* switching zones for Instant Mini Office 2 */ + switch (offset & 0x3ff0) + { + case 0x2000: m_bank = offset & 0x0f; break; + } + } + + return get_rom_base()[(offset & 0x3fff) | (m_bank << 13)]; +} diff --git a/src/devices/bus/bbc/rom/pal.h b/src/devices/bus/bbc/rom/pal.h new file mode 100644 index 00000000000..31c8dcd0d78 --- /dev/null +++ b/src/devices/bus/bbc/rom/pal.h @@ -0,0 +1,167 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro PALPROM carrier boards + +***************************************************************************/ + +#ifndef MAME_BUS_BBC_ROM_PAL_H +#define MAME_BUS_BBC_ROM_PAL_H + +#pragma once + +#include "slot.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_pal_device + +class bbc_pal_device : public device_t, + public device_bbc_rom_interface +{ +protected: + // construction/destruction + bbc_pal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + // device-level overrides + virtual void device_start() override; + + // device_bbc_rom_interface overrides + virtual uint32_t get_rom_size() override { return 0x4000; } + + uint8_t m_bank; +}; + +// ======================> bbc_cciword_device + +class bbc_cciword_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_cciword_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_ccibase_device + +class bbc_ccibase_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_ccibase_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_ccispell_device + +class bbc_ccispell_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_ccispell_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_palqst_device + +class bbc_palqst_device : public bbc_pal_device +{ +public: + bbc_palqst_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_palwap_device + +class bbc_palwap_device : public bbc_pal_device +{ +public: + bbc_palwap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_palted_device + +class bbc_palted_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_palted_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_palabep_device + +class bbc_palabep_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_palabep_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_palabe_device + +class bbc_palabe_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_palabe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// ======================> bbc_palmo2_device + +class bbc_palmo2_device : public bbc_pal_device +{ +public: + // construction/destruction + bbc_palmo2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_CCIWORD, bbc_cciword_device) +DECLARE_DEVICE_TYPE(BBC_CCIBASE, bbc_ccibase_device) +DECLARE_DEVICE_TYPE(BBC_CCISPELL, bbc_ccispell_device) +DECLARE_DEVICE_TYPE(BBC_PALQST, bbc_palqst_device) +DECLARE_DEVICE_TYPE(BBC_PALWAP, bbc_palwap_device) +DECLARE_DEVICE_TYPE(BBC_PALTED, bbc_palted_device) +DECLARE_DEVICE_TYPE(BBC_PALABEP, bbc_palabep_device) +DECLARE_DEVICE_TYPE(BBC_PALABE, bbc_palabe_device) +DECLARE_DEVICE_TYPE(BBC_PALMO2, bbc_palmo2_device) + + +#endif // MAME_BUS_BBC_ROM_PAL_H diff --git a/src/devices/bus/bbc/rom/ram.cpp b/src/devices/bus/bbc/rom/ram.cpp new file mode 100644 index 00000000000..0d626955812 --- /dev/null +++ b/src/devices/bus/bbc/rom/ram.cpp @@ -0,0 +1,57 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro Sideways RAM emulation + +***************************************************************************/ + +#include "emu.h" +#include "ram.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_RAM, bbc_ram_device, "bbc_ram", "BBC Micro Sideways RAM") + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_ram_device - constructor +//------------------------------------------------- + +bbc_ram_device::bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_RAM, tag, owner, clock) + , device_bbc_rom_interface(mconfig, *this) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_ram_device::device_start() +{ +} + +//------------------------------------------------- +// read +//------------------------------------------------- + +uint8_t bbc_ram_device::read(offs_t offset) +{ + return get_ram_base()[offset & (get_ram_size() - 1)]; +} + +//------------------------------------------------- +// write +//------------------------------------------------- + +void bbc_ram_device::write(offs_t offset, uint8_t data) +{ + get_ram_base()[offset & (get_ram_size() - 1)] = data; +} diff --git a/src/devices/bus/bbc/rom/ram.h b/src/devices/bus/bbc/rom/ram.h new file mode 100644 index 00000000000..85267147a35 --- /dev/null +++ b/src/devices/bus/bbc/rom/ram.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro Sideways RAM emulation + +***************************************************************************/ + +#ifndef MAME_BUS_BBC_ROM_RAM_H +#define MAME_BUS_BBC_ROM_RAM_H + +#pragma once + +#include "slot.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_ram_device + +class bbc_ram_device : public device_t, + public device_bbc_rom_interface +{ +public: + // construction/destruction + bbc_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; + virtual void write(offs_t offset, uint8_t data) override; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_RAM, bbc_ram_device) + +#endif // MAME_BUS_BBC_ROM_RAM_H diff --git a/src/devices/bus/bbc/rom/rom.cpp b/src/devices/bus/bbc/rom/rom.cpp new file mode 100644 index 00000000000..f798de11c6a --- /dev/null +++ b/src/devices/bus/bbc/rom/rom.cpp @@ -0,0 +1,50 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro Sideways ROM emulation + +***************************************************************************/ + +#include "emu.h" +#include "rom.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_ROM, bbc_rom_device, "bbc_rom", "BBC Micro Sideways ROM") + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_rom_device - constructor +//------------------------------------------------- + +bbc_rom_device::bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_ROM, tag, owner, clock) + , device_bbc_rom_interface(mconfig, *this) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_rom_device::device_start() +{ +} + +//------------------------------------------------- +// read +//------------------------------------------------- + +uint8_t bbc_rom_device::read(offs_t offset) +{ + uint32_t size = std::min((int32_t)get_rom_size(), 0x4000); + + return get_rom_base()[offset & (size - 1)]; +} diff --git a/src/devices/bus/bbc/rom/rom.h b/src/devices/bus/bbc/rom/rom.h new file mode 100644 index 00000000000..282e5471781 --- /dev/null +++ b/src/devices/bus/bbc/rom/rom.h @@ -0,0 +1,41 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + BBC Micro Sideways ROM emulation + +***************************************************************************/ + +#ifndef MAME_BUS_BBC_ROM_ROM_H +#define MAME_BUS_BBC_ROM_ROM_H + +#pragma once + +#include "slot.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_rom_device + +class bbc_rom_device : public device_t, + public device_bbc_rom_interface +{ +public: + // construction/destruction + bbc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; +}; + +// device type definition +DECLARE_DEVICE_TYPE(BBC_ROM, bbc_rom_device) + + +#endif // MAME_BUS_BBC_ROM_ROM_H diff --git a/src/devices/bus/bbc/rom/rtc.cpp b/src/devices/bus/bbc/rom/rtc.cpp new file mode 100644 index 00000000000..7d73c24b53e --- /dev/null +++ b/src/devices/bus/bbc/rom/rtc.cpp @@ -0,0 +1,124 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Solidisk Real Time Clock + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Solidisk_RTC.html + + PMS Genie Watch (RTC for the BBC) + +***************************************************************************/ + +#include "emu.h" +#include "rtc.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_STLRTC, bbc_stlrtc_device, "bbc_stlrtc", "Solidisk Real Time Clock") +DEFINE_DEVICE_TYPE(BBC_PMSRTC, bbc_pmsrtc_device, "bbc_pmsrtc", "PMS Genie Real Time Clock") + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void bbc_stlrtc_device::device_add_mconfig(machine_config &config) +{ + MC146818(config, m_rtc, 32.768_kHz_XTAL); // TODO: verify clock +} + +void bbc_pmsrtc_device::device_add_mconfig(machine_config &config) +{ + /* Dallas DS1216 SmartWatch RAM */ + DS1315(config, m_rtc, 0); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_stlrtc_device - constructor +//------------------------------------------------- + +bbc_stlrtc_device::bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_STLRTC, tag, owner, clock) + , device_bbc_rom_interface(mconfig, *this) + , m_rtc(*this, "rtc") +{ +} + +bbc_pmsrtc_device::bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_PMSRTC, tag, owner, clock) + , device_bbc_rom_interface(mconfig, *this) + , m_rtc(*this, "rtc") +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_stlrtc_device::device_start() +{ +} + +void bbc_pmsrtc_device::device_start() +{ +} + +//------------------------------------------------- +// read +//------------------------------------------------- + +uint8_t bbc_stlrtc_device::read(offs_t offset) +{ + uint8_t data = get_rom_base()[offset & 0x3fff]; + + switch (offset & 0x3fc0) + { + case 0x3e00: + data = m_rtc->read(1); + break; + case 0x3e40: + if (!machine().side_effects_disabled()) + m_rtc->write(0, data); + break; + case 0x3e80: + case 0x3ec0: + data = m_rtc->read(0); + break; + case 0x3f00: + case 0x3f40: + case 0x3f80: + case 0x3fc0: + if (!machine().side_effects_disabled()) + m_rtc->write(1, data); + break; + } + return data; +} + +uint8_t bbc_pmsrtc_device::read(offs_t offset) +{ + uint8_t data = get_rom_base()[offset & 0x1fff]; + + switch (offset) + { + case 0x00: + data |= m_rtc->read_0(); + break; + case 0x01: + data |= m_rtc->read_1(); + break; + case 0x04: + if (m_rtc->chip_enable()) + data = m_rtc->read_data() & 0x01; + break; + } + return data; +} diff --git a/src/devices/bus/bbc/rom/rtc.h b/src/devices/bus/bbc/rom/rtc.h new file mode 100644 index 00000000000..d37b2174b9b --- /dev/null +++ b/src/devices/bus/bbc/rom/rtc.h @@ -0,0 +1,72 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Solidisk Real Time Clock emulation + + PMS Genie Watch (RTC for the BBC) + +***************************************************************************/ + +#ifndef MAME_BUS_BBC_ROM_RTC_H +#define MAME_BUS_BBC_ROM_RTC_H + +#pragma once + +#include "slot.h" +#include "machine/mc146818.h" +#include "machine/ds1315.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_stlrtc_device + +class bbc_stlrtc_device : public device_t, + public device_bbc_rom_interface +{ +public: + // construction/destruction + bbc_stlrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_add_mconfig(machine_config &config) override; + + virtual void device_start() override; + + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; + +private: + required_device<mc146818_device> m_rtc; +}; + +// ======================> bbc_pmsrtc_device + +class bbc_pmsrtc_device : public device_t, + public device_bbc_rom_interface +{ +public: + // construction/destruction + bbc_pmsrtc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_add_mconfig(machine_config &config) override; + + virtual void device_start() override; + + // device_bbc_rom_interface overrides + virtual uint8_t read(offs_t offset) override; + +private: + required_device<ds1315_device> m_rtc; +}; + +// device type definition +DECLARE_DEVICE_TYPE(BBC_STLRTC, bbc_stlrtc_device) +DECLARE_DEVICE_TYPE(BBC_PMSRTC, bbc_pmsrtc_device) + +#endif // MAME_BUS_BBC_ROM_RTC_H diff --git a/src/devices/bus/bbc/rom/slot.cpp b/src/devices/bus/bbc/rom/slot.cpp new file mode 100644 index 00000000000..af8ae212d6d --- /dev/null +++ b/src/devices/bus/bbc/rom/slot.cpp @@ -0,0 +1,234 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************* + + BBC Micro ROM slot emulation + +*********************************************************************/ + +#include "emu.h" +#include "slot.h" + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_ROMSLOT16, bbc_romslot16_device, "bbc_romslot16", "BBC Micro 16K ROM Slot") +DEFINE_DEVICE_TYPE(BBC_ROMSLOT32, bbc_romslot32_device, "bbc_romslot32", "BBC Micro 32K ROM Slot") + + +//************************************************************************** +// DEVICE BBC_ROMSLOT CARD INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_bbc_rom_interface - constructor +//------------------------------------------------- + +device_bbc_rom_interface::device_bbc_rom_interface(const machine_config &mconfig, device_t &device) + : device_slot_card_interface(mconfig, device) + , m_rom(nullptr) + , m_rom_size(0) +{ +} + + +//------------------------------------------------- +// ~device_bbc_rom_interface - destructor +//------------------------------------------------- + +device_bbc_rom_interface::~device_bbc_rom_interface() +{ +} + +//------------------------------------------------- +// rom_alloc - alloc the space for the ROM +//------------------------------------------------- + +void device_bbc_rom_interface::rom_alloc(uint32_t size, const char *tag) +{ + if (m_rom == nullptr) + { + m_rom = device().machine().memory().region_alloc(std::string(tag).append(BBC_ROM_REGION_TAG).c_str(), size, 1, ENDIANNESS_LITTLE)->base(); + m_rom_size = size; + } +} + +//------------------------------------------------- +// ram_alloc - alloc the space for the RAM +//------------------------------------------------- + +void device_bbc_rom_interface::ram_alloc(uint32_t size) +{ + m_ram.resize(size); + device().save_item(NAME(m_ram)); +} + +//------------------------------------------------- +// nvram_alloc - alloc the space for the NVRAM +//------------------------------------------------- + +void device_bbc_rom_interface::nvram_alloc(uint32_t size) +{ + m_nvram.resize(size); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_romslot_device - constructor +//------------------------------------------------- +bbc_romslot_device::bbc_romslot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , device_image_interface(mconfig, *this) + , device_slot_interface(mconfig, *this) + , m_cart(nullptr) +{ +} + +bbc_romslot16_device::bbc_romslot16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_romslot_device(mconfig, BBC_ROMSLOT16, tag, owner, clock) +{ +} + +bbc_romslot32_device::bbc_romslot32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : bbc_romslot_device(mconfig, BBC_ROMSLOT32, tag, owner, clock) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_romslot_device::device_start() +{ + m_cart = dynamic_cast<device_bbc_rom_interface *>(get_card_device()); +} + + +//------------------------------------------------- +// call load +//------------------------------------------------- + +image_init_result bbc_romslot_device::call_load() +{ + if (m_cart) + { + uint32_t size = !loaded_through_softlist() ? length() : get_software_region_length("rom"); + + if (size % 0x2000) + { + seterror(IMAGE_ERROR_INVALIDIMAGE, "Invalid ROM size"); + return image_init_result::FAIL; + } + + m_cart->rom_alloc(size, tag()); + + if (!loaded_through_softlist()) + fread(m_cart->get_rom_base(), size); + else + memcpy(m_cart->get_rom_base(), get_software_region("rom"), size); + + if (get_software_region("ram")) + m_cart->ram_alloc(get_software_region_length("ram")); + + if (get_software_region("nvram")) + m_cart->nvram_alloc(get_software_region_length("nvram")); + } + + return image_init_result::PASS; +} + +//------------------------------------------------- +// call_unload +//------------------------------------------------- + +void bbc_romslot_device::call_unload() +{ + if (m_cart && m_cart->get_nvram_base() && m_cart->get_nvram_size()) + battery_save(m_cart->get_nvram_base(), m_cart->get_nvram_size()); +} + + +//------------------------------------------------- +// get default card software +//------------------------------------------------- + +std::string bbc_romslot_device::get_default_card_software(get_default_card_software_hook &hook) const +{ + return software_get_default_slot("rom"); +} + + +//------------------------------------------------- +// rom size +//------------------------------------------------- + +uint32_t bbc_romslot_device::get_rom_size() +{ + if (m_cart) + return m_cart->get_rom_size(); + else + return 0; +} + + +//------------------------------------------------- +// read - rom read +//------------------------------------------------- + +uint8_t bbc_romslot_device::read(offs_t offset) +{ + if (m_cart) + return m_cart->read(offset); + else + return 0xff; +} + + +//------------------------------------------------- +// write - rom write +//------------------------------------------------- + +void bbc_romslot_device::write(offs_t offset, uint8_t data) +{ + if (m_cart) + m_cart->write(offset, data); +} + + +//------------------------------------------------- +// SLOT_INTERFACE( bbc_rom ) +//------------------------------------------------- + +#include "rom.h" +#include "ram.h" +#include "dfs.h" +//#include "genie.h" +#include "pal.h" +//#include "replay.h" +#include "rtc.h" + + +void bbc_rom_devices(device_slot_interface &device) +{ + device.option_add_internal("rom", BBC_ROM); + device.option_add_internal("ram", BBC_RAM); + device.option_add_internal("cciword", BBC_CCIWORD); + device.option_add_internal("ccibase", BBC_CCIBASE); + device.option_add_internal("ccispell", BBC_CCISPELL); + device.option_add_internal("palqst", BBC_PALQST); + device.option_add_internal("palwap", BBC_PALWAP); + device.option_add_internal("palted", BBC_PALTED); + device.option_add_internal("palabep", BBC_PALABEP); + device.option_add_internal("palabe", BBC_PALABE); + device.option_add_internal("palmo2", BBC_PALMO2); + //device.option_add_internal("genie", BBC_PMSGENIE); + device.option_add_internal("mrme00", BBC_MRME00); + //device.option_add_internal("replay", BBC_REPLAY); + device.option_add_internal("stlrtc", BBC_STLRTC); + device.option_add_internal("pmsrtc", BBC_PMSRTC); +} diff --git a/src/devices/bus/bbc/rom/slot.h b/src/devices/bus/bbc/rom/slot.h new file mode 100644 index 00000000000..40818d9e619 --- /dev/null +++ b/src/devices/bus/bbc/rom/slot.h @@ -0,0 +1,155 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************* + + BBC Micro ROM slot emulation + +*********************************************************************/ + +#ifndef MAME_BUS_BBC_ROM_SLOT_H +#define MAME_BUS_BBC_ROM_SLOT_H + +#pragma once + +#include "softlist_dev.h" + + +#define BBC_ROM_REGION_TAG ":cart:rom" + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +// ======================> bbc_romslot_device + +class device_bbc_rom_interface; + +class bbc_romslot_device : public device_t, + public device_image_interface, + public device_slot_interface +{ +public: + // image-level overrides + virtual image_init_result call_load() override; + virtual void call_unload() override; + virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); } + + virtual iodevice_t image_type() const override { return IO_ROM; } + virtual bool is_readable() const override { return 1; } + virtual bool is_writeable() const override { return 0; } + virtual bool is_creatable() const override { return 0; } + virtual bool must_be_loaded() const override { return 0; } + virtual bool is_reset_on_load() const override { return 1; } + virtual const char *image_interface() const override { return "bbc_rom"; } + virtual const char *file_extensions() const override { return "rom,bin"; } + + // slot interface overrides + virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override; + + // reading and writing + uint8_t read(offs_t offset); + void write(offs_t offset, uint8_t data); + + uint32_t get_rom_size(); + uint32_t get_slot_size() const { return m_slot_size; } + +protected: + // construction/destruction + bbc_romslot_device(const machine_config &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock); + + // device-level overrides + virtual void device_start() override; + + uint32_t m_slot_size; + +private: + device_bbc_rom_interface* m_cart; +}; + +// ======================> bbc_romslot16_device + +class bbc_romslot16_device : public bbc_romslot_device +{ +public: + // construction/destruction + template <typename T> + bbc_romslot16_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, char const *default_option) + : bbc_romslot16_device(mconfig, tag, owner) + { + option_reset(); + slot_options(*this); + set_default_option(default_option); + set_fixed(false); + m_slot_size = 0x4000; + } + + bbc_romslot16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); +}; + +// ======================> bbc_romslot32_device + +class bbc_romslot32_device : public bbc_romslot_device +{ +public: + // construction/destruction + template <typename T> + bbc_romslot32_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, char const *default_option) + : bbc_romslot32_device(mconfig, tag, owner) + { + option_reset(); + slot_options(*this); + set_default_option(default_option); + set_fixed(false); + m_slot_size = 0x8000; + } + + bbc_romslot32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); +}; + + +// ======================> device_bbc_rom_interface + +class device_bbc_rom_interface : public device_slot_card_interface +{ +public: + // construction/destruction + virtual ~device_bbc_rom_interface(); + + // reading and writing + virtual uint8_t read(offs_t offset) { return 0xff; } + virtual void write(offs_t offset, uint8_t data) { m_device.logerror("unhandled ROM write to %04X = %02X\n", offset | 0x8000, data); } + + void rom_alloc(uint32_t size, const char *tag); + void ram_alloc(uint32_t size); + void nvram_alloc(uint32_t size); + + uint8_t* get_rom_base() { return m_rom; } + virtual uint32_t get_rom_size() { return m_rom_size; } + + uint8_t* get_ram_base() { return &m_ram[0]; } + uint32_t get_ram_size() { return m_ram.size(); } + + uint8_t* get_nvram_base() { return &m_nvram[0]; } + uint32_t get_nvram_size() { return m_nvram.size(); } + +protected: + device_bbc_rom_interface(const machine_config &mconfig, device_t &device); + + bbc_romslot_device *m_slot; + +private: + // internal state + uint8_t *m_rom; + uint32_t m_rom_size; + std::vector<uint8_t> m_ram; + std::vector<uint8_t> m_nvram; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_ROMSLOT16, bbc_romslot16_device) +DECLARE_DEVICE_TYPE(BBC_ROMSLOT32, bbc_romslot32_device) + +void bbc_rom_devices(device_slot_interface &device); + +#endif // MAME_BUS_BBC_ROM_SLOT_H diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp index 2ac1bf5fb15..602ea3c845a 100644 --- a/src/devices/bus/bbc/tube/tube.cpp +++ b/src/devices/bus/bbc/tube/tube.cpp @@ -92,10 +92,10 @@ void bbc_tube_slot_device::device_reset() // host_r //------------------------------------------------- -READ8_MEMBER(bbc_tube_slot_device::host_r) +uint8_t bbc_tube_slot_device::host_r(offs_t offset) { if (m_card) - return m_card->host_r(space, offset); + return m_card->host_r(offset); else return 0xfe; } @@ -104,14 +104,15 @@ READ8_MEMBER(bbc_tube_slot_device::host_r) // host_w //------------------------------------------------- -WRITE8_MEMBER(bbc_tube_slot_device::host_w) +void bbc_tube_slot_device::host_w(offs_t offset, uint8_t data) { if (m_card) - m_card->host_w(space, offset, data); + m_card->host_w(offset, data); } // slot devices +#include "tube_32016.h" #include "tube_6502.h" #include "tube_80186.h" #include "tube_80286.h" @@ -133,7 +134,7 @@ void bbc_tube_devices(device_slot_interface &device) { device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */ device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */ - //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ + device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */ device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */ //device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */ @@ -142,8 +143,8 @@ void bbc_tube_devices(device_slot_interface &device) //device.option_add("hdp68k", BBC_TUBE_HDP68K); /* Torch Unicorn (HDP68K) */ //device.option_add("x25", BBC_TUBE_X25); /* Econet X25 Gateway */ device.option_add("zep100", BBC_TUBE_ZEP100); /* Torch Z80 Communicator (ZEP100) (Torch) */ - //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Acorn 8271) */ - //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Acorn 1770) */ + //device.option_add("zep100l", BBC_TUBE_ZEP100L); /* Torch Z80 Communicator (ZEP100) (Model B) */ + //device.option_add("zep100w", BBC_TUBE_ZEP100W); /* Torch Z80 Communicator (ZEP100) (Model B+) */ /* Acorn ANC21 Universal 2nd Processor Unit */ device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ @@ -160,11 +161,12 @@ void bbc_extube_devices(device_slot_interface &device) { device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */ device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */ - //device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ + device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */ device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */ //device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */ //device.option_add("pmsb2p", BBC_TUBE_PMSB2P); /* PMS B2P-6502 */ + //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */ /* Acorn ANC21 Universal 2nd Processor Unit */ device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ @@ -181,7 +183,6 @@ void bbc_intube_devices(device_slot_interface &device) { device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ - //device.option_add("zep100m", BBC_TUBE_ZEP100M); /* Torch Z80 Communicator (ZEP100) (Master) */ //device.option_add("arm7", BBC_TUBE_ARM7); /* Sprow ARM7 co-processor */ device.option_add("rc6502", BBC_TUBE_RC6502); /* ReCo6502 (6502) */ device.option_add("rc65816", BBC_TUBE_RC65816); /* ReCo6502 (65816) */ @@ -196,6 +197,7 @@ void electron_tube_devices(device_slot_interface &device) { device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */ device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */ + device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */ device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */ device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */ device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */ diff --git a/src/devices/bus/bbc/tube/tube.h b/src/devices/bus/bbc/tube/tube.h index 954867f0b7f..e0d66907cb6 100644 --- a/src/devices/bus/bbc/tube/tube.h +++ b/src/devices/bus/bbc/tube/tube.h @@ -66,8 +66,8 @@ public: // callbacks auto irq_handler() { return m_irq_handler.bind(); } - DECLARE_READ8_MEMBER( host_r ); - DECLARE_WRITE8_MEMBER( host_w ); + uint8_t host_r(offs_t offset); + void host_w(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); } @@ -90,8 +90,8 @@ class device_bbc_tube_interface : public device_slot_card_interface { public: // reading and writing - virtual DECLARE_READ8_MEMBER(host_r) { return 0xfe; } - virtual DECLARE_WRITE8_MEMBER(host_w) { } + virtual uint8_t host_r(offs_t offset) { return 0xfe; } + virtual void host_w(offs_t offset, uint8_t data) { } protected: device_bbc_tube_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/bbc/tube/tube_32016.cpp b/src/devices/bus/bbc/tube/tube_32016.cpp new file mode 100644 index 00000000000..7b6ac355e42 --- /dev/null +++ b/src/devices/bus/bbc/tube/tube_32016.cpp @@ -0,0 +1,210 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Acorn ANC05 32016 2nd processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html + + Acorn ANC06 Cambridge Co-Processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html + + IC1 (ULA) TUBE + IC2 (MMU) NS32082 Not fitted + IC3 (CPU) NS32016 + IC4 (TCU) NS32201 + IC20 (FPU) NS32081 + +**********************************************************************/ + + +#include "emu.h" +#include "tube_32016.h" +#include "softlist_dev.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device, "bbc_tube_32016", "Acorn 32016 2nd processor") + + +//------------------------------------------------- +// ADDRESS_MAP( tube_32016_mem ) +//------------------------------------------------- + +void bbc_tube_32016_device::tube_32016_mem(address_map &map) +{ + map(0x000000, 0xffffff).rw(FUNC(bbc_tube_32016_device::read), FUNC(bbc_tube_32016_device::write)); + map(0xf90000, 0xf90001).portr("CONFIG"); + map(0xfffff0, 0xffffff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)).umask32(0x00ff); +} + +//------------------------------------------------- +// ROM( tube_32016 ) +//------------------------------------------------- + +ROM_START(tube_32016) + ROM_REGION(0x8000, "rom", 0) + ROM_DEFAULT_BIOS("200") + ROM_SYSTEM_BIOS(0, "200", "Pandora v2.00") + ROMX_LOAD("pan200lo.rom", 0x0000, 0x4000, CRC(b1980fd0) SHA1(8084f8896cd22953abefbd43c51e1a422b30e28d), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-764-02 Pandora Lo + ROMX_LOAD("pan200hi.rom", 0x0001, 0x4000, CRC(cab98d6b) SHA1(dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-763-02 Pandora Hi + ROM_SYSTEM_BIOS(1, "100", "Pandora v1.00") + ROMX_LOAD("pan100.rom", 0x0000, 0x8000, BAD_DUMP CRC(75333006) SHA1(996cd120103039390c9b979b16c327bb95da72e4), ROM_BIOS(1)) // 0201-763-01, 0201-764-01 Pandora + ROM_SYSTEM_BIOS(2, "061", "Pandora v0.61") + ROMX_LOAD("pan061lo.rom", 0x0000, 0x4000, CRC(6f801b35) SHA1(ce31f7c10603f3d15a06a8e32bde40df0639e446), ROM_SKIP(1) | ROM_BIOS(2)) + ROMX_LOAD("pan061hi.rom", 0x0001, 0x4000, CRC(c00b1ab0) SHA1(e6a705232278c518340ddc69ea51af91965fa332), ROM_SKIP(1) | ROM_BIOS(2)) +ROM_END + +//------------------------------------------------- +// INPUT_PORTS( tube_32016 ) +//------------------------------------------------- + +static INPUT_PORTS_START(tube_32016) + PORT_START("CONFIG") + PORT_DIPNAME(0x80, 0x80, "H") PORT_DIPLOCATION("LKS:1") + PORT_DIPSETTING(0x80, "FPU") + PORT_DIPSETTING(0x00, "No FPU") + + PORT_DIPNAME(0x40, 0x00, "G") PORT_DIPLOCATION("LKS:2") + PORT_DIPSETTING(0x40, "MMU") + PORT_DIPSETTING(0x00, "No MMU") + + PORT_DIPNAME(0x20, 0x00, "F") PORT_DIPLOCATION("LKS:3") + PORT_DIPSETTING(0x20, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x10, 0x00, "E") PORT_DIPLOCATION("LKS:4") + PORT_DIPSETTING(0x10, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x08, 0x00, "D") PORT_DIPLOCATION("LKS:5") + PORT_DIPSETTING(0x08, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x04, 0x00, "C") PORT_DIPLOCATION("LKS:6") + PORT_DIPSETTING(0x04, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x02, 0x00, "B") PORT_DIPLOCATION("LKS:7") + PORT_DIPSETTING(0x02, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") + + PORT_DIPNAME(0x01, 0x00, "A") PORT_DIPLOCATION("LKS:8") + PORT_DIPSETTING(0x01, "Reserved") + PORT_DIPSETTING(0x00, "Reserved") +INPUT_PORTS_END + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void bbc_tube_32016_device::device_add_mconfig(machine_config &config) +{ + NS32016(config, m_maincpu, 12_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_32016_device::tube_32016_mem); + + TUBE(config, m_ula); + m_ula->pnmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_ula->pirq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + /* internal ram */ + RAM(config, m_ram).set_default_size("1M").set_default_value(0); + + /* software lists */ + SOFTWARE_LIST(config, "flop_ls_32016").set_original("bbc_flop_32016"); +} + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +const tiny_rom_entry *bbc_tube_32016_device::device_rom_region() const +{ + return ROM_NAME( tube_32016 ); +} + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor bbc_tube_32016_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( tube_32016 ); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// bbc_tube_32016_device - constructor +//------------------------------------------------- + +bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, BBC_TUBE_32016, tag, owner, clock) + , device_bbc_tube_interface(mconfig, *this) + , m_maincpu(*this, "maincpu") + , m_ula(*this, "ula") + , m_ram(*this, "ram") + , m_rom(*this, "rom") + , m_rom_enabled(true) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void bbc_tube_32016_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void bbc_tube_32016_device::device_reset() +{ + m_rom_enabled = true; +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +uint8_t bbc_tube_32016_device::host_r(offs_t offset) +{ + return m_ula->host_r(offset); +} + +void bbc_tube_32016_device::host_w(offs_t offset, uint8_t data) +{ + m_ula->host_w(offset, data); +} + + +READ8_MEMBER(bbc_tube_32016_device::read) +{ + uint16_t data = 0xffff; + + if (m_rom_enabled) + data = m_rom->base()[offset & 0x3fff]; + else if (offset < m_ram->size()) + data = m_ram->pointer()[offset]; + + return data; +} + +WRITE8_MEMBER(bbc_tube_32016_device::write) +{ + /* clear ROM select on first write */ + if (!machine().side_effects_disabled()) m_rom_enabled = false; + + if (offset < m_ram->size()) + m_ram->pointer()[offset] = data; +} diff --git a/src/devices/bus/bbc/tube/tube_32016.h b/src/devices/bus/bbc/tube/tube_32016.h new file mode 100644 index 00000000000..864b8173703 --- /dev/null +++ b/src/devices/bus/bbc/tube/tube_32016.h @@ -0,0 +1,71 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/********************************************************************** + + Acorn ANC05 32016 2nd processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC05_320162ndproc.html + + Acorn ANC06 Cambridge Co-Processor + + http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC06_CamCoPro.html + +**********************************************************************/ + + +#ifndef MAME_BUS_BBC_TUBE_32016_H +#define MAME_BUS_BBC_TUBE_32016_H + +#include "tube.h" +#include "cpu/ns32000/ns32000.h" +#include "machine/ram.h" +#include "machine/tube.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bbc_tube_32016_device + +class bbc_tube_32016_device : + public device_t, + public device_bbc_tube_interface +{ +public: + // construction/destruction + bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // optional information overrides + 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; + + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; + +private: + required_device<ns32016_cpu_device> m_maincpu; + required_device<tube_device> m_ula; + required_device<ram_device> m_ram; + required_memory_region m_rom; + + DECLARE_READ8_MEMBER(read); + DECLARE_WRITE8_MEMBER(write); + + void tube_32016_mem(address_map &map); + + bool m_rom_enabled; +}; + + + +// device type definition +DECLARE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device) + + +#endif /* MAME_BUS_BBC_TUBE_32016_H */ diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index 8120ab16812..99852ca8d90 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -168,27 +168,27 @@ void bbc_tube_6502_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_6502_device::host_r) +uint8_t bbc_tube_6502_device::host_r(offs_t offset) { - return m_ula->host_r(space, offset); + return m_ula->host_r(offset); } -WRITE8_MEMBER(bbc_tube_6502_device::host_w) +void bbc_tube_6502_device::host_w(offs_t offset, uint8_t data) { - m_ula->host_w(space, offset, data); + m_ula->host_w(offset, data); } -READ8_MEMBER(bbc_tube_6502_device::tube_r) +uint8_t bbc_tube_6502_device::tube_r(offs_t offset) { // Disable ROM on first access if (!machine().side_effects_disabled()) m_bankdev->set_bank(1); - return m_ula->parasite_r(space, offset); + return m_ula->parasite_r(offset); } -WRITE8_MEMBER(bbc_tube_6502_device::tube_w) +void bbc_tube_6502_device::tube_w(offs_t offset, uint8_t data) { - m_ula->parasite_w(space, offset, data); + m_ula->parasite_w(offset, data); } diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h index 244eb9f2105..abb907ef3bd 100644 --- a/src/devices/bus/bbc/tube/tube_6502.h +++ b/src/devices/bus/bbc/tube/tube_6502.h @@ -52,11 +52,11 @@ protected: void add_common_devices(machine_config &config); - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; - virtual DECLARE_READ8_MEMBER( tube_r ); - virtual DECLARE_WRITE8_MEMBER( tube_w ); + virtual uint8_t tube_r(offs_t offset); + virtual void tube_w(offs_t offset, uint8_t data); required_device<cpu_device> m_maincpu; required_device<address_map_bank_device> m_bankdev; diff --git a/src/devices/bus/bbc/tube/tube_80186.cpp b/src/devices/bus/bbc/tube/tube_80186.cpp index 4721d48e534..85331ab1b2a 100644 --- a/src/devices/bus/bbc/tube/tube_80186.cpp +++ b/src/devices/bus/bbc/tube/tube_80186.cpp @@ -126,12 +126,12 @@ void bbc_tube_80186_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_80186_device::host_r) +uint8_t bbc_tube_80186_device::host_r(offs_t offset) { - return m_ula->host_r(space, offset); + return m_ula->host_r(offset); } -WRITE8_MEMBER(bbc_tube_80186_device::host_w) +void bbc_tube_80186_device::host_w(offs_t offset, uint8_t data) { - m_ula->host_w(space, offset, data); + m_ula->host_w(offset, data); } diff --git a/src/devices/bus/bbc/tube/tube_80186.h b/src/devices/bus/bbc/tube/tube_80186.h index 3081acbddac..42f757e75e4 100644 --- a/src/devices/bus/bbc/tube/tube_80186.h +++ b/src/devices/bus/bbc/tube/tube_80186.h @@ -40,8 +40,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; private: required_device<i80186_cpu_device> m_i80186; diff --git a/src/devices/bus/bbc/tube/tube_80286.cpp b/src/devices/bus/bbc/tube/tube_80286.cpp index f38761341f5..e8ff167d0fb 100644 --- a/src/devices/bus/bbc/tube/tube_80286.cpp +++ b/src/devices/bus/bbc/tube/tube_80286.cpp @@ -129,24 +129,25 @@ void bbc_tube_80286_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_80286_device::host_r) +uint8_t bbc_tube_80286_device::host_r(offs_t offset) { - return m_ula->host_r(space, offset); + return m_ula->host_r(offset); } -WRITE8_MEMBER(bbc_tube_80286_device::host_w) +void bbc_tube_80286_device::host_w(offs_t offset, uint8_t data) { - m_ula->host_w(space, offset, data); + m_ula->host_w(offset, data); } -READ8_MEMBER(bbc_tube_80286_device::disable_boot_rom) +uint8_t bbc_tube_80286_device::disable_boot_rom() { - m_i80286->space(AS_PROGRAM).install_ram(0xc0000, 0xfffff, m_ram->pointer() + 0xc0000); + if (!machine().side_effects_disabled()) + m_i80286->space(AS_PROGRAM).install_ram(0xc0000, 0xfffff, m_ram->pointer() + 0xc0000); return 0xff; } -WRITE8_MEMBER(bbc_tube_80286_device::irq_latch_w) +void bbc_tube_80286_device::irq_latch_w(uint8_t data) { m_irq_latch = data; } diff --git a/src/devices/bus/bbc/tube/tube_80286.h b/src/devices/bus/bbc/tube/tube_80286.h index da2d807477b..a6e952d6bf2 100644 --- a/src/devices/bus/bbc/tube/tube_80286.h +++ b/src/devices/bus/bbc/tube/tube_80286.h @@ -38,8 +38,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; private: uint8_t m_irq_latch; @@ -51,8 +51,8 @@ private: required_device<ram_device> m_ram; required_memory_region m_bootstrap; - DECLARE_READ8_MEMBER( disable_boot_rom ); - DECLARE_WRITE8_MEMBER( irq_latch_w ); + uint8_t disable_boot_rom(); + void irq_latch_w(uint8_t data); void tube_80286_io(address_map &map); void tube_80286_mem(address_map &map); diff --git a/src/devices/bus/bbc/tube/tube_arm.cpp b/src/devices/bus/bbc/tube/tube_arm.cpp index 444e188a657..463a82713be 100644 --- a/src/devices/bus/bbc/tube/tube_arm.cpp +++ b/src/devices/bus/bbc/tube/tube_arm.cpp @@ -120,18 +120,18 @@ void bbc_tube_arm_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_arm_device::host_r) +uint8_t bbc_tube_arm_device::host_r(offs_t offset) { - return m_ula->host_r(space, offset); + return m_ula->host_r(offset); } -WRITE8_MEMBER(bbc_tube_arm_device::host_w) +void bbc_tube_arm_device::host_w(offs_t offset, uint8_t data) { - m_ula->host_w(space, offset, data); + m_ula->host_w(offset, data); } -READ8_MEMBER(bbc_tube_arm_device::ram_r) +uint8_t bbc_tube_arm_device::ram_r(offs_t offset) { uint8_t data; @@ -143,7 +143,7 @@ READ8_MEMBER(bbc_tube_arm_device::ram_r) return data; } -WRITE8_MEMBER(bbc_tube_arm_device::ram_w) +void bbc_tube_arm_device::ram_w(offs_t offset, uint8_t data) { /* clear ROM select on first write */ if (!machine().side_effects_disabled()) m_rom_select = false; diff --git a/src/devices/bus/bbc/tube/tube_arm.h b/src/devices/bus/bbc/tube/tube_arm.h index 7b58d2b40bd..8470fec84ef 100644 --- a/src/devices/bus/bbc/tube/tube_arm.h +++ b/src/devices/bus/bbc/tube/tube_arm.h @@ -38,8 +38,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; private: required_device<arm_cpu_device> m_arm; @@ -49,8 +49,8 @@ private: bool m_rom_select; - DECLARE_READ8_MEMBER( ram_r ); - DECLARE_WRITE8_MEMBER( ram_w ); + uint8_t ram_r(offs_t offset); + void ram_w(offs_t offset, uint8_t data); void tube_arm_mem(address_map &map); }; diff --git a/src/devices/bus/bbc/tube/tube_casper.cpp b/src/devices/bus/bbc/tube/tube_casper.cpp index db84143f553..f6bb4bdce84 100644 --- a/src/devices/bus/bbc/tube/tube_casper.cpp +++ b/src/devices/bus/bbc/tube/tube_casper.cpp @@ -109,12 +109,12 @@ void bbc_tube_casper_device::device_start() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_casper_device::host_r) +uint8_t bbc_tube_casper_device::host_r(offs_t offset) { return m_via6522_0->read(offset & 0xf); } -WRITE8_MEMBER(bbc_tube_casper_device::host_w) +void bbc_tube_casper_device::host_w(offs_t offset, uint8_t data) { m_via6522_0->write(offset & 0xf, data); } diff --git a/src/devices/bus/bbc/tube/tube_casper.h b/src/devices/bus/bbc/tube/tube_casper.h index e464f4a8c68..965ac703355 100644 --- a/src/devices/bus/bbc/tube/tube_casper.h +++ b/src/devices/bus/bbc/tube/tube_casper.h @@ -36,8 +36,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; private: required_device<cpu_device> m_m68000; diff --git a/src/devices/bus/bbc/tube/tube_rc6502.cpp b/src/devices/bus/bbc/tube/tube_rc6502.cpp index 80061f8a5ca..c567be6f98a 100644 --- a/src/devices/bus/bbc/tube/tube_rc6502.cpp +++ b/src/devices/bus/bbc/tube/tube_rc6502.cpp @@ -233,23 +233,23 @@ void bbc_tube_rc6502_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_rc6502_device::host_r) +uint8_t bbc_tube_rc6502_device::host_r(offs_t offset) { - return m_ula->host_r(space, offset); + return m_ula->host_r(offset); } -WRITE8_MEMBER(bbc_tube_rc6502_device::host_w) +void bbc_tube_rc6502_device::host_w(offs_t offset, uint8_t data) { - m_ula->host_w(space, offset, data); + m_ula->host_w(offset, data); } -READ8_MEMBER(bbc_tube_rc6502_device::config_r) +uint8_t bbc_tube_rc6502_device::config_r() { return m_banknum; } -WRITE8_MEMBER(bbc_tube_rc6502_device::register_w) +void bbc_tube_rc6502_device::register_w(uint8_t data) { switch (data & 0x06) { diff --git a/src/devices/bus/bbc/tube/tube_rc6502.h b/src/devices/bus/bbc/tube/tube_rc6502.h index 77542cf4a45..eadb460cc96 100644 --- a/src/devices/bus/bbc/tube/tube_rc6502.h +++ b/src/devices/bus/bbc/tube/tube_rc6502.h @@ -47,11 +47,11 @@ protected: void add_common_devices(machine_config &config); - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; - DECLARE_READ8_MEMBER(config_r); - DECLARE_WRITE8_MEMBER(register_w); + uint8_t config_r(); + void register_w(uint8_t data); void tube_rc6502_bank(address_map &map); diff --git a/src/devices/bus/bbc/tube/tube_z80.cpp b/src/devices/bus/bbc/tube/tube_z80.cpp index cc6f87527bf..06e6931c7a3 100644 --- a/src/devices/bus/bbc/tube/tube_z80.cpp +++ b/src/devices/bus/bbc/tube/tube_z80.cpp @@ -134,18 +134,18 @@ void bbc_tube_z80_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_z80_device::host_r) +uint8_t bbc_tube_z80_device::host_r(offs_t offset) { - return m_ula->host_r(space, offset); + return m_ula->host_r(offset); } -WRITE8_MEMBER(bbc_tube_z80_device::host_w) +void bbc_tube_z80_device::host_w(offs_t offset, uint8_t data) { - m_ula->host_w(space, offset, data); + m_ula->host_w(offset, data); } -READ8_MEMBER(bbc_tube_z80_device::opcode_r) +uint8_t bbc_tube_z80_device::opcode_r(offs_t offset) { if (!machine().side_effects_disabled()) { @@ -158,7 +158,7 @@ READ8_MEMBER(bbc_tube_z80_device::opcode_r) } -READ8_MEMBER(bbc_tube_z80_device::mem_r) +uint8_t bbc_tube_z80_device::mem_r(offs_t offset) { uint8_t data; @@ -170,7 +170,7 @@ READ8_MEMBER(bbc_tube_z80_device::mem_r) return data; } -WRITE8_MEMBER(bbc_tube_z80_device::mem_w) +void bbc_tube_z80_device::mem_w(offs_t offset, uint8_t data) { m_ram->pointer()[offset] = data; } diff --git a/src/devices/bus/bbc/tube/tube_z80.h b/src/devices/bus/bbc/tube/tube_z80.h index e35dfa02ef4..536e506d43d 100644 --- a/src/devices/bus/bbc/tube/tube_z80.h +++ b/src/devices/bus/bbc/tube/tube_z80.h @@ -40,8 +40,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; private: IRQ_CALLBACK_MEMBER( irq_callback ); @@ -54,9 +54,9 @@ private: bool m_rom_enabled; - DECLARE_READ8_MEMBER( mem_r ); - DECLARE_WRITE8_MEMBER( mem_w ); - DECLARE_READ8_MEMBER( opcode_r ); + uint8_t mem_r(offs_t offset); + void mem_w(offs_t offset, uint8_t data); + uint8_t opcode_r(offs_t offset); void tube_z80_fetch(address_map &map); void tube_z80_io(address_map &map); diff --git a/src/devices/bus/bbc/tube/tube_zep100.cpp b/src/devices/bus/bbc/tube/tube_zep100.cpp index 6ec898bb705..f11f0af6415 100644 --- a/src/devices/bus/bbc/tube/tube_zep100.cpp +++ b/src/devices/bus/bbc/tube/tube_zep100.cpp @@ -146,12 +146,12 @@ void bbc_tube_zep100_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(bbc_tube_zep100_device::host_r) +uint8_t bbc_tube_zep100_device::host_r(offs_t offset) { return m_via->read(offset & 0x0f); } -WRITE8_MEMBER(bbc_tube_zep100_device::host_w) +void bbc_tube_zep100_device::host_w(offs_t offset, uint8_t data) { if (offset & 0x10) m_z80->reset(); @@ -160,7 +160,7 @@ WRITE8_MEMBER(bbc_tube_zep100_device::host_w) } -READ8_MEMBER(bbc_tube_zep100_device::mem_r) +uint8_t bbc_tube_zep100_device::mem_r(offs_t offset) { uint8_t data; @@ -172,13 +172,13 @@ READ8_MEMBER(bbc_tube_zep100_device::mem_r) return data; } -WRITE8_MEMBER(bbc_tube_zep100_device::mem_w) +void bbc_tube_zep100_device::mem_w(offs_t offset, uint8_t data) { m_ram->pointer()[offset] = data; } -READ8_MEMBER(bbc_tube_zep100_device::io_r) +uint8_t bbc_tube_zep100_device::io_r(offs_t offset) { uint8_t data = 0xff; @@ -190,23 +190,23 @@ READ8_MEMBER(bbc_tube_zep100_device::io_r) return data; } -WRITE8_MEMBER(bbc_tube_zep100_device::io_w) +void bbc_tube_zep100_device::io_w(offs_t offset, uint8_t data) { m_ppi->write(offset & 0x03, data); } -WRITE8_MEMBER(bbc_tube_zep100_device::via_pb_w) +void bbc_tube_zep100_device::via_pb_w(uint8_t data) { m_port_b = data; } -READ8_MEMBER(bbc_tube_zep100_device::ppi_pb_r) +uint8_t bbc_tube_zep100_device::ppi_pb_r() { return m_port_b; } -WRITE8_MEMBER(bbc_tube_zep100_device::ppi_pc_w) +void bbc_tube_zep100_device::ppi_pc_w(uint8_t data) { m_via->write_ca1(BIT(data, 7)); m_via->write_cb1(BIT(data, 1)); diff --git a/src/devices/bus/bbc/tube/tube_zep100.h b/src/devices/bus/bbc/tube/tube_zep100.h index 24b07ea4269..b7f881fcfac 100644 --- a/src/devices/bus/bbc/tube/tube_zep100.h +++ b/src/devices/bus/bbc/tube/tube_zep100.h @@ -43,8 +43,8 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_READ8_MEMBER( host_r ) override; - virtual DECLARE_WRITE8_MEMBER( host_w ) override; + virtual uint8_t host_r(offs_t offset) override; + virtual void host_w(offs_t offset, uint8_t data) override; bool m_rom_enabled; @@ -57,14 +57,14 @@ private: uint8_t m_port_b; - DECLARE_READ8_MEMBER( mem_r ); - DECLARE_WRITE8_MEMBER( mem_w ); - DECLARE_READ8_MEMBER( io_r ); - DECLARE_WRITE8_MEMBER( io_w ); + uint8_t mem_r(offs_t offset); + void mem_w(offs_t offset, uint8_t data); + uint8_t io_r(offs_t offset); + void io_w(offs_t offset, uint8_t data); - DECLARE_WRITE8_MEMBER( via_pb_w ); - DECLARE_READ8_MEMBER( ppi_pb_r ); - DECLARE_WRITE8_MEMBER( ppi_pc_w ); + void via_pb_w(uint8_t data); + uint8_t ppi_pb_r(); + void ppi_pc_w(uint8_t data); void tube_zep100_io(address_map &map); void tube_zep100_mem(address_map &map); diff --git a/src/devices/bus/bbc/userport/beebspch.cpp b/src/devices/bus/bbc/userport/beebspch.cpp index 291179b54c6..728d8ae6658 100644 --- a/src/devices/bus/bbc/userport/beebspch.cpp +++ b/src/devices/bus/bbc/userport/beebspch.cpp @@ -82,7 +82,7 @@ void bbc_beebspch_device::device_start() // IMPLEMENTATION //************************************************************************** -WRITE8_MEMBER(bbc_beebspch_device::pb_w) +void bbc_beebspch_device::pb_w(uint8_t data) { switch (data & 0xc0) { diff --git a/src/devices/bus/bbc/userport/beebspch.h b/src/devices/bus/bbc/userport/beebspch.h index 94c36b0cc84..79e6abf64ab 100644 --- a/src/devices/bus/bbc/userport/beebspch.h +++ b/src/devices/bus/bbc/userport/beebspch.h @@ -38,7 +38,7 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual DECLARE_WRITE8_MEMBER(pb_w) override; + virtual void pb_w(uint8_t data) override; private: required_device<sp0256_device> m_nsp; diff --git a/src/devices/bus/bbc/userport/cfa3000kbd.cpp b/src/devices/bus/bbc/userport/cfa3000kbd.cpp index d07d7b6dd2f..5b2d5586f56 100644 --- a/src/devices/bus/bbc/userport/cfa3000kbd.cpp +++ b/src/devices/bus/bbc/userport/cfa3000kbd.cpp @@ -113,7 +113,7 @@ void cfa3000_kbd_device::device_reset() // IMPLEMENTATION //************************************************************************** -READ8_MEMBER(cfa3000_kbd_device::pb_r) +uint8_t cfa3000_kbd_device::pb_r() { uint8_t data = 0x00; diff --git a/src/devices/bus/bbc/userport/cfa3000kbd.h b/src/devices/bus/bbc/userport/cfa3000kbd.h index 2ece3cbf380..ff9951399c8 100644 --- a/src/devices/bus/bbc/userport/cfa3000kbd.h +++ b/src/devices/bus/bbc/userport/cfa3000kbd.h @@ -36,7 +36,7 @@ protected: // optional information overrides virtual ioport_constructor device_input_ports() const override; - virtual DECLARE_READ8_MEMBER(pb_r) override; + virtual uint8_t pb_r() override; private: required_ioport_array<4> m_kbd; diff --git a/src/devices/bus/bbc/userport/pointer.cpp b/src/devices/bus/bbc/userport/pointer.cpp index 9a222388989..d8272766d98 100644 --- a/src/devices/bus/bbc/userport/pointer.cpp +++ b/src/devices/bus/bbc/userport/pointer.cpp @@ -261,17 +261,17 @@ TIMER_CALLBACK_MEMBER(bbc_pointer_device::pointer_poll) } } -READ8_MEMBER(bbc_amxmouse_device::pb_r) +uint8_t bbc_amxmouse_device::pb_r() { return (m_buttons->read() & 0xe0) | (m_xdir << 0) | (m_ydir << 2) | 0x1a; } -READ8_MEMBER(bbc_m512mouse_device::pb_r) +uint8_t bbc_m512mouse_device::pb_r() { return (m_buttons->read() & 0x07) | (m_xdir << 3) | (m_ydir << 4) | 0xe0; } -READ8_MEMBER(bbc_tracker_device::pb_r) +uint8_t bbc_tracker_device::pb_r() { return (m_buttons->read() & 0x07) | (m_xdir << 3) | (m_ydir << 4) | 0xe0; } diff --git a/src/devices/bus/bbc/userport/pointer.h b/src/devices/bus/bbc/userport/pointer.h index 5551a2c82dd..a6e1bd0a629 100644 --- a/src/devices/bus/bbc/userport/pointer.h +++ b/src/devices/bus/bbc/userport/pointer.h @@ -58,7 +58,7 @@ public: // construction/destruction bbc_amxmouse_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(pb_r) override; + uint8_t pb_r() override; // optional information overrides virtual ioport_constructor device_input_ports() const override; @@ -73,7 +73,7 @@ public: // construction/destruction bbc_m512mouse_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(pb_r) override; + uint8_t pb_r() override; // optional information overrides virtual ioport_constructor device_input_ports() const override; @@ -88,7 +88,7 @@ public: // construction/destruction bbc_tracker_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(pb_r) override; + uint8_t pb_r() override; // optional information overrides virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/bus/bbc/userport/userport.cpp b/src/devices/bus/bbc/userport/userport.cpp index a4610217651..601a6845801 100644 --- a/src/devices/bus/bbc/userport/userport.cpp +++ b/src/devices/bus/bbc/userport/userport.cpp @@ -89,10 +89,10 @@ void bbc_userport_slot_device::device_reset() // pb_r //------------------------------------------------- -READ8_MEMBER(bbc_userport_slot_device::pb_r) +uint8_t bbc_userport_slot_device::pb_r() { if (m_device) - return m_device->pb_r(space, 0); + return m_device->pb_r(); else return 0xff; } @@ -102,10 +102,10 @@ READ8_MEMBER(bbc_userport_slot_device::pb_r) // pb_w //------------------------------------------------- -WRITE8_MEMBER(bbc_userport_slot_device::pb_w) +void bbc_userport_slot_device::pb_w(uint8_t data) { if (m_device) - m_device->pb_w(space, 0, data); + m_device->pb_w(data); } diff --git a/src/devices/bus/bbc/userport/userport.h b/src/devices/bus/bbc/userport/userport.h index e2807146efe..e3040283a5a 100644 --- a/src/devices/bus/bbc/userport/userport.h +++ b/src/devices/bus/bbc/userport/userport.h @@ -64,8 +64,8 @@ public: DECLARE_WRITE_LINE_MEMBER(cb1_w) { m_cb1_handler(state); } DECLARE_WRITE_LINE_MEMBER(cb2_w) { m_cb2_handler(state); } - DECLARE_READ8_MEMBER(pb_r); - DECLARE_WRITE8_MEMBER(pb_w); + uint8_t pb_r(); + void pb_w(uint8_t data); protected: // device-level overrides @@ -88,8 +88,8 @@ public: // construction/destruction virtual ~device_bbc_userport_interface(); - virtual DECLARE_READ8_MEMBER(pb_r) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(pb_w) { } + virtual uint8_t pb_r() { return 0xff; } + virtual void pb_w(uint8_t data) { } protected: device_bbc_userport_interface(const machine_config &mconfig, device_t &device); |