diff options
Diffstat (limited to 'src/devices/bus/cpc')
33 files changed, 318 insertions, 431 deletions
diff --git a/src/devices/bus/cpc/amdrum.cpp b/src/devices/bus/cpc/amdrum.cpp index 587577edf52..26345f48bc9 100644 --- a/src/devices/bus/cpc/amdrum.cpp +++ b/src/devices/bus/cpc/amdrum.cpp @@ -9,7 +9,6 @@ #include "emu.h" #include "amdrum.h" -#include "sound/volt_reg.h" #include "speaker.h" @@ -24,9 +23,6 @@ void cpc_amdrum_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "speaker").front_center(); ZN428E(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); - voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); - vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); - vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); // no pass-through } @@ -51,7 +47,7 @@ void cpc_amdrum_device::device_start() { m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_write_handler(0xff00,0xffff,write8_delegate(FUNC(cpc_amdrum_device::dac_w),this)); + space.install_write_handler(0xff00,0xffff, write8smo_delegate(*this, FUNC(cpc_amdrum_device::dac_w))); } //------------------------------------------------- @@ -63,7 +59,7 @@ void cpc_amdrum_device::device_reset() // TODO } -WRITE8_MEMBER(cpc_amdrum_device::dac_w) +void cpc_amdrum_device::dac_w(uint8_t data) { m_dac->write(data); } diff --git a/src/devices/bus/cpc/amdrum.h b/src/devices/bus/cpc/amdrum.h index 360f1228c09..ecd8cf75c92 100644 --- a/src/devices/bus/cpc/amdrum.h +++ b/src/devices/bus/cpc/amdrum.h @@ -27,15 +27,15 @@ public: // construction/destruction cpc_amdrum_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER(dac_w); + void dac_w(uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/brunword4.cpp b/src/devices/bus/cpc/brunword4.cpp index db5e8e1b57d..c28433b281a 100644 --- a/src/devices/bus/cpc/brunword4.cpp +++ b/src/devices/bus/cpc/brunword4.cpp @@ -74,7 +74,7 @@ void cpc_brunword4_device::device_start() { m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_brunword4_device::rombank_w),this)); + space.install_write_handler(0xdf00,0xdfff, write8smo_delegate(*this, FUNC(cpc_brunword4_device::rombank_w))); } void cpc_brunword4_device::device_reset() @@ -82,7 +82,7 @@ void cpc_brunword4_device::device_reset() m_rombank_active = false; } -WRITE8_MEMBER(cpc_brunword4_device::rombank_w) +void cpc_brunword4_device::rombank_w(uint8_t data) { if((data & 0xc0) == 0xc0 && (data & 0x04) == 0) { @@ -95,7 +95,7 @@ WRITE8_MEMBER(cpc_brunword4_device::rombank_w) m_rombank_active = false; return; } - m_slot->rom_select(space,0,data & 0x3f); // repeats every 64 ROMs, this breaks upper cart ROM selection on the Plus + m_slot->rom_select(data & 0x3f); // repeats every 64 ROMs, this breaks upper cart ROM selection on the Plus } void cpc_brunword4_device::set_mapping(uint8_t type) diff --git a/src/devices/bus/cpc/brunword4.h b/src/devices/bus/cpc/brunword4.h index 66d5cdebab5..5af03c2ff98 100644 --- a/src/devices/bus/cpc/brunword4.h +++ b/src/devices/bus/cpc/brunword4.h @@ -20,15 +20,15 @@ public: cpc_brunword4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; - DECLARE_WRITE8_MEMBER(rombank_w); + void rombank_w(uint8_t data); virtual void set_mapping(uint8_t type) override; protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/cpc_pds.cpp b/src/devices/bus/cpc/cpc_pds.cpp index 0509ab866dc..411b0b6e575 100644 --- a/src/devices/bus/cpc/cpc_pds.cpp +++ b/src/devices/bus/cpc/cpc_pds.cpp @@ -33,7 +33,7 @@ cpc_pds_device::cpc_pds_device(const machine_config &mconfig, const char *tag, d device_t(mconfig, CPC_PDS, tag, owner, clock), device_cpc_expansion_card_interface(mconfig, *this), m_slot(nullptr), - m_pio(*this,"pio") + m_pio(*this, "pio") { } @@ -46,7 +46,7 @@ void cpc_pds_device::device_start() m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_readwrite_handler(0xfbec,0xfbef,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); + space.install_readwrite_handler(0xfbec,0xfbef, read8sm_delegate(*this, FUNC(cpc_pds_device::pio_r)), write8sm_delegate(*this, FUNC(cpc_pds_device::pio_w))); } //------------------------------------------------- @@ -59,12 +59,12 @@ void cpc_pds_device::device_reset() } -READ8_MEMBER(cpc_pds_device::pio_r) +uint8_t cpc_pds_device::pio_r(offs_t offset) { return m_pio->read(offset); } -WRITE8_MEMBER(cpc_pds_device::pio_w) +void cpc_pds_device::pio_w(offs_t offset, uint8_t data) { m_pio->write(offset,data); } diff --git a/src/devices/bus/cpc/cpc_pds.h b/src/devices/bus/cpc/cpc_pds.h index 5908a5a75c7..03572bb07e0 100644 --- a/src/devices/bus/cpc/cpc_pds.h +++ b/src/devices/bus/cpc/cpc_pds.h @@ -36,16 +36,16 @@ public: // construction/destruction cpc_pds_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(pio_r); - DECLARE_WRITE8_MEMBER(pio_w); + uint8_t pio_r(offs_t offset); + void pio_w(offs_t offset, uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/cpc_rom.cpp b/src/devices/bus/cpc/cpc_rom.cpp index 69bd7f80035..fee8cf3fdca 100644 --- a/src/devices/bus/cpc/cpc_rom.cpp +++ b/src/devices/bus/cpc/cpc_rom.cpp @@ -9,6 +9,9 @@ #include "emu.h" #include "cpc_rom.h" +#include <tuple> + + DEFINE_DEVICE_TYPE(CPC_ROM, cpc_rom_device, "cpc_rom", "CPC ROM Box") void cpc_exp_cards(device_slot_interface &device); @@ -76,7 +79,7 @@ DEFINE_DEVICE_TYPE(CPC_ROMSLOT, cpc_rom_image_device, "cpc_rom_image", "CPC ROM cpc_rom_image_device::cpc_rom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_ROMSLOT, tag, owner, clock) - , device_image_interface(mconfig, *this) + , device_rom_image_interface(mconfig, *this) , m_base(nullptr) { } @@ -101,23 +104,18 @@ void cpc_rom_image_device::device_start() /*------------------------------------------------- DEVICE_IMAGE_LOAD( rom ) -------------------------------------------------*/ -image_init_result cpc_rom_image_device::call_load() +std::pair<std::error_condition, std::string> cpc_rom_image_device::call_load() { - device_image_interface* image = this; - uint64_t size = image->length(); - - m_base = std::make_unique<uint8_t[]>(16384); - if(size <= 16384) - { - image->fread(m_base.get(),size); - } - else - { - image->fseek(size-16384,SEEK_SET); - image->fread(m_base.get(),16384); - } - - return image_init_result::PASS; + uint64_t const total = length(); + size_t const size = std::min<uint64_t>(total, 16384); + + std::error_condition err; + size_t actual; + std::tie(err, m_base, actual) = read_at(image_core_file(), total - size, size); + if (!err && (actual != size)) + err = std::errc::io_error; + + return std::make_pair(err, std::string()); } diff --git a/src/devices/bus/cpc/cpc_rom.h b/src/devices/bus/cpc/cpc_rom.h index 67e88cf6137..0e6faa0c11d 100644 --- a/src/devices/bus/cpc/cpc_rom.h +++ b/src/devices/bus/cpc/cpc_rom.h @@ -12,37 +12,32 @@ #pragma once #include "cpcexp.h" +#include "imagedev/cartrom.h" /*** ROM image device ***/ // ======================> cpc_rom_image_device -class cpc_rom_image_device : public device_t, public device_image_interface +class cpc_rom_image_device : public device_t, public device_rom_image_interface { public: // construction/destruction cpc_rom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual ~cpc_rom_image_device(); - // image-level overrides - virtual image_init_result call_load() override; + // device_image_interface implementation + virtual std::pair<std::error_condition, std::string> call_load() override; virtual void call_unload() override; - 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 "cpc_rom"; } - virtual const char *file_extensions() const override { return "rom,bin"; } + virtual bool is_reset_on_load() const noexcept override { return true; } + virtual const char *image_interface() const noexcept override { return "cpc_rom"; } + virtual const char *file_extensions() const noexcept override { return "rom,bin"; } uint8_t* base() { return m_base.get(); } protected: - // device-level overrides - virtual void device_start() override; + // device_t implementation + virtual void device_start() override ATTR_COLD; private: std::unique_ptr<uint8_t[]> m_base; @@ -66,11 +61,11 @@ public: protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: required_device_array<cpc_rom_image_device, 8> m_rom; diff --git a/src/devices/bus/cpc/cpc_rs232.cpp b/src/devices/bus/cpc/cpc_rs232.cpp index 40fc0853539..e3be3af93d3 100644 --- a/src/devices/bus/cpc/cpc_rs232.cpp +++ b/src/devices/bus/cpc/cpc_rs232.cpp @@ -52,7 +52,7 @@ void cpc_rs232_device::device_add_mconfig(machine_config &config) m_rs232->rxd_handler().set(m_dart, FUNC(z80dart_device::rxa_w)); m_rs232->dcd_handler().set(m_dart, FUNC(z80dart_device::dcda_w)); m_rs232->cts_handler().set(m_dart, FUNC(z80dart_device::ctsa_w)); -// m_rs232->ri_handler().set(m_dart, FUNC(z80dart_device::ria_w)); + m_rs232->ri_handler().set(m_dart, FUNC(z80dart_device::ria_w)); // pass-through cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); @@ -106,8 +106,8 @@ void cpc_rs232_device::device_start() m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_readwrite_handler(0xfadc,0xfadf,read8_delegate(FUNC(cpc_rs232_device::dart_r),this),write8_delegate(FUNC(cpc_rs232_device::dart_w),this)); - space.install_readwrite_handler(0xfbdc,0xfbdf,read8_delegate(FUNC(cpc_rs232_device::pit_r),this),write8_delegate(FUNC(cpc_rs232_device::pit_w),this)); + space.install_readwrite_handler(0xfadc,0xfadf, read8sm_delegate(*this, FUNC(cpc_rs232_device::dart_r)), write8sm_delegate(*this, FUNC(cpc_rs232_device::dart_w))); + space.install_readwrite_handler(0xfbdc,0xfbdf, read8sm_delegate(*this, FUNC(cpc_rs232_device::pit_r)), write8sm_delegate(*this, FUNC(cpc_rs232_device::pit_w))); } //------------------------------------------------- @@ -119,38 +119,38 @@ void cpc_rs232_device::device_reset() } -WRITE_LINE_MEMBER(cpc_rs232_device::pit_out0_w) +void cpc_rs232_device::pit_out0_w(int state) { m_dart->txca_w(state); } -WRITE_LINE_MEMBER(cpc_rs232_device::pit_out1_w) +void cpc_rs232_device::pit_out1_w(int state) { m_dart->rxca_w(state); } -WRITE_LINE_MEMBER(cpc_rs232_device::pit_out2_w) +void cpc_rs232_device::pit_out2_w(int state) { m_dart->txcb_w(state); m_dart->rxcb_w(state); } -READ8_MEMBER(cpc_rs232_device::dart_r) +uint8_t cpc_rs232_device::dart_r(offs_t offset) { return m_dart->ba_cd_r(offset); } -WRITE8_MEMBER(cpc_rs232_device::dart_w) +void cpc_rs232_device::dart_w(offs_t offset, uint8_t data) { m_dart->ba_cd_w(offset,data); } -READ8_MEMBER(cpc_rs232_device::pit_r) +uint8_t cpc_rs232_device::pit_r(offs_t offset) { return m_pit->read(offset); } -WRITE8_MEMBER(cpc_rs232_device::pit_w) +void cpc_rs232_device::pit_w(offs_t offset, uint8_t data) { m_pit->write(offset,data); } diff --git a/src/devices/bus/cpc/cpc_rs232.h b/src/devices/bus/cpc/cpc_rs232.h index 56e7ccd8b4f..08d56074593 100644 --- a/src/devices/bus/cpc/cpc_rs232.h +++ b/src/devices/bus/cpc/cpc_rs232.h @@ -12,7 +12,7 @@ #pragma once #include "cpcexp.h" -#include "machine/z80dart.h" +#include "machine/z80sio.h" #include "machine/pit8253.h" #include "bus/rs232/rs232.h" @@ -22,30 +22,30 @@ public: // construction/destruction cpc_rs232_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(dart_r); - DECLARE_WRITE8_MEMBER(dart_w); - DECLARE_READ8_MEMBER(pit_r); - DECLARE_WRITE8_MEMBER(pit_w); + uint8_t dart_r(offs_t offset); + void dart_w(offs_t offset, uint8_t data); + uint8_t pit_r(offs_t offset); + void pit_w(offs_t offset, uint8_t data); protected: cpc_rs232_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; - virtual void device_reset() override; - virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; required_device<pit8253_device> m_pit; required_device<z80dart_device> m_dart; required_device<rs232_port_device> m_rs232; private: - DECLARE_WRITE_LINE_MEMBER(pit_out0_w); - DECLARE_WRITE_LINE_MEMBER(pit_out1_w); - DECLARE_WRITE_LINE_MEMBER(pit_out2_w); + void pit_out0_w(int state); + void pit_out1_w(int state); + void pit_out2_w(int state); cpc_expansion_slot_device *m_slot; }; @@ -57,7 +57,7 @@ public: cpc_ams_rs232_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; // device type definition diff --git a/src/devices/bus/cpc/cpc_ssa1.cpp b/src/devices/bus/cpc/cpc_ssa1.cpp index bdfedce16ed..eab90d6831d 100644 --- a/src/devices/bus/cpc/cpc_ssa1.cpp +++ b/src/devices/bus/cpc/cpc_ssa1.cpp @@ -26,61 +26,41 @@ DEFINE_DEVICE_TYPE(CPC_DKSPEECH, cpc_dkspeech_device, "cpc_dkspeech", "DK'Tronic // device I/O handlers //------------------------------------------------- -READ8_MEMBER(cpc_ssa1_device::ssa1_r) +uint8_t cpc_ssa1_device::ssa1_r() { uint8_t ret = 0xff; - if(get_sby() == 0) + if(!m_sp0256_device->sby_r()) ret &= ~0x80; - if(get_lrq() != 0) + if(m_sp0256_device->lrq_r()) ret &= ~0x40; return ret; } -WRITE8_MEMBER(cpc_ssa1_device::ssa1_w) +void cpc_ssa1_device::ssa1_w(uint8_t data) { m_sp0256_device->ald_w(data); } -READ8_MEMBER(cpc_dkspeech_device::dkspeech_r) +uint8_t cpc_dkspeech_device::dkspeech_r() { uint8_t ret = 0xff; // SBY is not connected - if(get_lrq() != 0) + if(m_sp0256_device->lrq_r()) ret &= ~0x80; return ret; } -WRITE8_MEMBER(cpc_dkspeech_device::dkspeech_w) +void cpc_dkspeech_device::dkspeech_w(uint8_t data) { m_sp0256_device->ald_w(data & 0x3f); } -WRITE_LINE_MEMBER(cpc_ssa1_device::lrq_cb) -{ - set_lrq(state); -} - -WRITE_LINE_MEMBER(cpc_ssa1_device::sby_cb) -{ - set_sby(state); -} - -WRITE_LINE_MEMBER(cpc_dkspeech_device::lrq_cb) -{ - set_lrq(state); -} - -WRITE_LINE_MEMBER(cpc_dkspeech_device::sby_cb) -{ - set_sby(state); -} - //------------------------------------------------- // Device ROM definition //------------------------------------------------- @@ -119,8 +99,6 @@ void cpc_ssa1_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); SP0256(config, m_sp0256_device, XTAL(3'120'000)); - m_sp0256_device->data_request_callback().set(FUNC(cpc_ssa1_device::lrq_cb)); - m_sp0256_device->standby_callback().set(FUNC(cpc_ssa1_device::sby_cb)); m_sp0256_device->add_route(ALL_OUTPUTS, "mono", 1.00); // pass-through @@ -134,8 +112,6 @@ void cpc_dkspeech_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); SP0256(config, m_sp0256_device, DERIVED_CLOCK(1, 1)); // uses the CPC's clock from pin 50 of the expansion port - m_sp0256_device->data_request_callback().set(FUNC(cpc_dkspeech_device::lrq_cb)); - m_sp0256_device->standby_callback().set(FUNC(cpc_dkspeech_device::sby_cb)); m_sp0256_device->add_route(ALL_OUTPUTS, "mono", 1.00); // pass-through @@ -153,7 +129,6 @@ void cpc_dkspeech_device::device_add_mconfig(machine_config &config) cpc_ssa1_device::cpc_ssa1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_SSA1, tag, owner, clock), device_cpc_expansion_card_interface(mconfig, *this), m_slot(nullptr), m_rom(nullptr), - m_lrq(1), m_sby(0), m_sp0256_device(*this,"sp0256") { } @@ -161,7 +136,6 @@ cpc_ssa1_device::cpc_ssa1_device(const machine_config &mconfig, const char *tag, cpc_dkspeech_device::cpc_dkspeech_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_DKSPEECH, tag, owner, clock), device_cpc_expansion_card_interface(mconfig, *this), m_slot(nullptr), m_rom(nullptr), - m_lrq(1), m_sby(0), m_sp0256_device(*this,"sp0256") { } @@ -177,8 +151,8 @@ void cpc_ssa1_device::device_start() m_rom = memregion("sp0256")->base(); - space.install_readwrite_handler(0xfaee,0xfaee,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); - space.install_readwrite_handler(0xfbee,0xfbee,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); + space.install_readwrite_handler(0xfaee,0xfaee, read8smo_delegate(*this, FUNC(cpc_ssa1_device::ssa1_r)), write8smo_delegate(*this, FUNC(cpc_ssa1_device::ssa1_w))); + space.install_readwrite_handler(0xfbee,0xfbee, read8smo_delegate(*this, FUNC(cpc_ssa1_device::ssa1_r)), write8smo_delegate(*this, FUNC(cpc_ssa1_device::ssa1_w))); } void cpc_dkspeech_device::device_start() @@ -188,7 +162,7 @@ void cpc_dkspeech_device::device_start() m_rom = memregion("sp0256")->base(); - space.install_readwrite_handler(0xfbfe,0xfbfe,read8_delegate(FUNC(cpc_dkspeech_device::dkspeech_r),this),write8_delegate(FUNC(cpc_dkspeech_device::dkspeech_w),this)); + space.install_readwrite_handler(0xfbfe,0xfbfe, read8smo_delegate(*this, FUNC(cpc_dkspeech_device::dkspeech_r)), write8smo_delegate(*this, FUNC(cpc_dkspeech_device::dkspeech_w))); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/cpc_ssa1.h b/src/devices/bus/cpc/cpc_ssa1.h index 0fb2c7a0e87..9ec7c2e1202 100644 --- a/src/devices/bus/cpc/cpc_ssa1.h +++ b/src/devices/bus/cpc/cpc_ssa1.h @@ -56,33 +56,21 @@ public: // construction/destruction cpc_ssa1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void set_lrq(uint8_t state) { m_lrq = state; } - uint8_t get_lrq() { return m_lrq; } - void set_sby(uint8_t state) { m_sby = state; } - uint8_t get_sby() { return m_sby; } - - DECLARE_READ8_MEMBER(ssa1_r); - DECLARE_WRITE8_MEMBER(ssa1_w); + uint8_t ssa1_r(); + void ssa1_w(uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - DECLARE_WRITE_LINE_MEMBER(lrq_cb); - DECLARE_WRITE_LINE_MEMBER(sby_cb); - cpc_expansion_slot_device *m_slot; - uint8_t *m_rom; - uint8_t m_lrq; - uint8_t m_sby; - required_device<sp0256_device> m_sp0256_device; }; @@ -93,33 +81,21 @@ public: // construction/destruction cpc_dkspeech_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void set_lrq(uint8_t state) { m_lrq = state; } - uint8_t get_lrq() { return m_lrq; } - void set_sby(uint8_t state) { m_sby = state; } - uint8_t get_sby() { return m_sby; } - - DECLARE_READ8_MEMBER(dkspeech_r); - DECLARE_WRITE8_MEMBER(dkspeech_w); + uint8_t dkspeech_r(); + void dkspeech_w(uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - DECLARE_WRITE_LINE_MEMBER(lrq_cb); - DECLARE_WRITE_LINE_MEMBER(sby_cb); - cpc_expansion_slot_device *m_slot; - uint8_t *m_rom; - uint8_t m_lrq; - uint8_t m_sby; - required_device<sp0256_device> m_sp0256_device; }; diff --git a/src/devices/bus/cpc/cpcexp.cpp b/src/devices/bus/cpc/cpcexp.cpp index 3f9f04e89ea..c625ed4689e 100644 --- a/src/devices/bus/cpc/cpcexp.cpp +++ b/src/devices/bus/cpc/cpcexp.cpp @@ -25,7 +25,7 @@ DEFINE_DEVICE_TYPE(CPC_EXPANSION_SLOT, cpc_expansion_slot_device, "cpc_expansion device_cpc_expansion_card_interface::device_cpc_expansion_card_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig,device) + : device_interface(device, "cpcexp") , m_rom_sel(0) { } @@ -43,7 +43,7 @@ device_cpc_expansion_card_interface::~device_cpc_expansion_card_interface() cpc_expansion_slot_device::cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_EXPANSION_SLOT, tag, owner, clock) - , device_slot_interface(mconfig, *this) + , device_single_card_slot_interface<device_cpc_expansion_card_interface>(mconfig, *this) , m_cpu(*this, finder_base::DUMMY_TAG) , m_out_irq_cb(*this) , m_out_nmi_cb(*this) @@ -64,14 +64,7 @@ cpc_expansion_slot_device::~cpc_expansion_slot_device() void cpc_expansion_slot_device::device_start() { - m_card = dynamic_cast<device_cpc_expansion_card_interface *>(get_card_device()); - - // resolve callbacks - m_out_irq_cb.resolve_safe(); - m_out_nmi_cb.resolve_safe(); - m_out_reset_cb.resolve_safe(); - m_out_romdis_cb.resolve_safe(); - m_out_rom_select.resolve_safe(); + m_card = get_card_device(); } //------------------------------------------------- @@ -83,25 +76,17 @@ void cpc_expansion_slot_device::device_start() void cpc_expansion_slot_device::device_config_complete() { // for passthrough connectors, use the parent slot's CPU tag - if ((m_cpu.finder_tag() == finder_base::DUMMY_TAG) && (dynamic_cast<device_cpc_expansion_card_interface *>(owner()) != nullptr)) + if ((m_cpu.finder_tag() == finder_base::DUMMY_TAG) && dynamic_cast<device_cpc_expansion_card_interface *>(owner())) { - auto parent = dynamic_cast<cpc_expansion_slot_device *>(owner()->owner()); - if (parent != nullptr) + auto const parent = dynamic_cast<cpc_expansion_slot_device *>(owner()->owner()); + if (parent) m_cpu.set_tag(parent->m_cpu); } } -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cpc_expansion_slot_device::device_reset() -{ -} - -WRITE_LINE_MEMBER( cpc_expansion_slot_device::irq_w ) { m_out_irq_cb(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::nmi_w ) { m_out_nmi_cb(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::reset_w ) { m_out_reset_cb(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::romdis_w ) { m_out_romdis_cb(state); } -WRITE8_MEMBER( cpc_expansion_slot_device::rom_select ) { m_out_rom_select(data); } +void cpc_expansion_slot_device::irq_w(int state) { m_out_irq_cb(state); } +void cpc_expansion_slot_device::nmi_w(int state) { m_out_nmi_cb(state); } +void cpc_expansion_slot_device::reset_w(int state) { m_out_reset_cb(state); } +void cpc_expansion_slot_device::romdis_w(int state) { m_out_romdis_cb(state); } +void cpc_expansion_slot_device::rom_select(uint8_t data) { m_out_rom_select(data); } diff --git a/src/devices/bus/cpc/cpcexp.h b/src/devices/bus/cpc/cpcexp.h index 51796dc7edd..7fed2af89e4 100644 --- a/src/devices/bus/cpc/cpcexp.h +++ b/src/devices/bus/cpc/cpcexp.h @@ -56,7 +56,7 @@ // ======================> device_cpc_expansion_card_interface // class representing interface-specific live cpc_expansion card -class device_cpc_expansion_card_interface : public device_slot_card_interface +class device_cpc_expansion_card_interface : public device_interface { public: enum @@ -71,8 +71,8 @@ public: // reset virtual void cpc_reset_w() { } - virtual WRITE_LINE_MEMBER( cursor_w ) { } - virtual WRITE_LINE_MEMBER( romen_w ) { } + virtual void cursor_w(int state) { } + virtual void romen_w(int state) { } void set_rom_bank(uint8_t sel) { m_rom_sel = sel; } // tell device the currently selected ROM uint8_t get_rom_bank() { return m_rom_sel; } @@ -88,8 +88,7 @@ private: // ======================> cpc_expansion_slot_device -class cpc_expansion_slot_device : public device_t, - public device_slot_interface +class cpc_expansion_slot_device : public device_t, public device_single_card_slot_interface<device_cpc_expansion_card_interface> { public: // construction/destruction @@ -113,24 +112,23 @@ public: auto romdis_callback() { return m_out_romdis_cb.bind(); } auto rom_select_callback() { return m_out_rom_select.bind(); } - DECLARE_WRITE_LINE_MEMBER( irq_w ); - DECLARE_WRITE_LINE_MEMBER( nmi_w ); - DECLARE_WRITE_LINE_MEMBER( reset_w ); - DECLARE_WRITE_LINE_MEMBER( romdis_w ); - DECLARE_WRITE8_MEMBER( rom_select ); + void irq_w(int state); + void nmi_w(int state); + void reset_w(int state); + void romdis_w(int state); + void rom_select(uint8_t data); void set_rom_bank(uint8_t sel) { if(m_card) m_card->set_rom_bank(sel); } // tell device the currently selected ROM void set_mapping(uint8_t type) { if(m_card) m_card->set_mapping(type); } // tell device to enable any ROM or RAM mapping - DECLARE_WRITE_LINE_MEMBER( cursor_w ) { if(m_card) m_card->cursor_w(state); } // pass on CRTC Cursor signal - DECLARE_WRITE_LINE_MEMBER( romen_w ) { if(m_card) m_card->romen_w(state); } // pass on /ROMEN signal + void cursor_w(int state) { if(m_card) m_card->cursor_w(state); } // pass on CRTC Cursor signal + void romen_w(int state) { if(m_card) m_card->romen_w(state); } // pass on /ROMEN signal cpu_device &cpu() const { return *m_cpu; } protected: // device-level overrides virtual void device_config_complete() override; - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; required_device<cpu_device> m_cpu; diff --git a/src/devices/bus/cpc/ddi1.cpp b/src/devices/bus/cpc/ddi1.cpp index 76e09d36f34..7deaa49eabd 100644 --- a/src/devices/bus/cpc/ddi1.cpp +++ b/src/devices/bus/cpc/ddi1.cpp @@ -6,7 +6,7 @@ #include "emu.h" #include "ddi1.h" -#include "softlist.h" +#include "softlist_dev.h" void cpc_exp_cards(device_slot_interface &device); @@ -43,7 +43,7 @@ const tiny_rom_entry *cpc_ddi1_device::device_rom_region() const void cpc_ddi1_device::device_add_mconfig(machine_config &config) { UPD765A(config, m_fdc, DERIVED_CLOCK(1, 1), true, true); // pin 50 clock multiplied to 8 MHz, then divided back down through SMC FDC9229BT - FLOPPY_CONNECTOR(config, m_connector, ddi1_floppies, "3ssdd", floppy_image_device::default_floppy_formats); + FLOPPY_CONNECTOR(config, m_connector, ddi1_floppies, "3ssdd", floppy_image_device::default_mfm_floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("cpc_flop"); // pass-through @@ -75,9 +75,9 @@ void cpc_ddi1_device::device_start() m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_write_handler(0xfa7e,0xfa7f,write8_delegate(FUNC(cpc_ddi1_device::motor_w),this)); - space.install_readwrite_handler(0xfb7e,0xfb7f,read8_delegate(FUNC(cpc_ddi1_device::fdc_r),this),write8_delegate(FUNC(cpc_ddi1_device::fdc_w),this)); - space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_ddi1_device::rombank_w),this)); + space.install_write_handler(0xfa7e,0xfa7f, write8sm_delegate(*this, FUNC(cpc_ddi1_device::motor_w))); + space.install_readwrite_handler(0xfb7e,0xfb7f, read8sm_delegate(*this, FUNC(cpc_ddi1_device::fdc_r)), write8sm_delegate(*this, FUNC(cpc_ddi1_device::fdc_w))); + space.install_write_handler(0xdf00,0xdfff, write8smo_delegate(*this, FUNC(cpc_ddi1_device::rombank_w))); } //------------------------------------------------- @@ -89,7 +89,7 @@ void cpc_ddi1_device::device_reset() m_rom_active = false; } -WRITE8_MEMBER(cpc_ddi1_device::motor_w) +void cpc_ddi1_device::motor_w(offs_t offset, uint8_t data) { switch(offset) { @@ -111,7 +111,7 @@ WRITE8_MEMBER(cpc_ddi1_device::motor_w) } } -WRITE8_MEMBER(cpc_ddi1_device::fdc_w) +void cpc_ddi1_device::fdc_w(offs_t offset, uint8_t data) { switch(offset) { @@ -121,7 +121,7 @@ WRITE8_MEMBER(cpc_ddi1_device::fdc_w) } } -READ8_MEMBER(cpc_ddi1_device::fdc_r) +uint8_t cpc_ddi1_device::fdc_r(offs_t offset) { uint8_t data = 0xff; @@ -137,13 +137,13 @@ READ8_MEMBER(cpc_ddi1_device::fdc_r) return data; } -WRITE8_MEMBER(cpc_ddi1_device::rombank_w) +void cpc_ddi1_device::rombank_w(uint8_t data) { if(data == 0x07) m_rom_active = true; else m_rom_active = false; - m_slot->rom_select(space,0,data); + m_slot->rom_select(data); } void cpc_ddi1_device::set_mapping(uint8_t type) diff --git a/src/devices/bus/cpc/ddi1.h b/src/devices/bus/cpc/ddi1.h index 6e07813c7a2..a61abce55cf 100644 --- a/src/devices/bus/cpc/ddi1.h +++ b/src/devices/bus/cpc/ddi1.h @@ -23,21 +23,21 @@ public: // construction/destruction cpc_ddi1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER(motor_w); - DECLARE_WRITE8_MEMBER(fdc_w); - DECLARE_READ8_MEMBER(fdc_r); - DECLARE_WRITE8_MEMBER(rombank_w); + void motor_w(offs_t offset, uint8_t data); + void fdc_w(offs_t offset, uint8_t data); + uint8_t fdc_r(offs_t offset); + void rombank_w(uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual void set_mapping(uint8_t type) override; - virtual WRITE_LINE_MEMBER( romen_w ) override { m_romen = state; } + virtual void romen_w(int state) override { m_romen = state; } private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/doubler.cpp b/src/devices/bus/cpc/doubler.cpp index e9ed2e5b5f4..68c7a51899e 100644 --- a/src/devices/bus/cpc/doubler.cpp +++ b/src/devices/bus/cpc/doubler.cpp @@ -9,6 +9,8 @@ #include "emu.h" #include "doubler.h" +#include "formats/tzx_cas.h" + //************************************************************************** // DEVICE DEFINITIONS //************************************************************************** @@ -46,7 +48,7 @@ void cpc_doubler_device::device_start() { m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_read_handler(0xf0e0,0xf0e0,read8_delegate(FUNC(cpc_doubler_device::ext_tape_r),this)); + space.install_read_handler(0xf0e0,0xf0e0, read8smo_delegate(*this, FUNC(cpc_doubler_device::ext_tape_r))); } //------------------------------------------------- @@ -58,7 +60,7 @@ void cpc_doubler_device::device_reset() // TODO } -READ8_MEMBER(cpc_doubler_device::ext_tape_r) +uint8_t cpc_doubler_device::ext_tape_r() { uint8_t data = 0; if(m_tape->input() > 0.03) diff --git a/src/devices/bus/cpc/doubler.h b/src/devices/bus/cpc/doubler.h index 2cba51baaee..7fa696ae514 100644 --- a/src/devices/bus/cpc/doubler.h +++ b/src/devices/bus/cpc/doubler.h @@ -15,7 +15,6 @@ #include "cpcexp.h" #include "imagedev/cassette.h" -#include "formats/tzx_cas.h" class cpc_doubler_device : public device_t, public device_cpc_expansion_card_interface @@ -24,15 +23,15 @@ public: // construction/destruction cpc_doubler_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(ext_tape_r); + uint8_t ext_tape_r(); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/hd20.cpp b/src/devices/bus/cpc/hd20.cpp index c13ffca6b4b..ae9751f3c51 100644 --- a/src/devices/bus/cpc/hd20.cpp +++ b/src/devices/bus/cpc/hd20.cpp @@ -46,7 +46,7 @@ const tiny_rom_entry *cpc_hd20_device::device_rom_region() const cpc_hd20_device::cpc_hd20_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_HD20, tag, owner, clock), device_cpc_expansion_card_interface(mconfig, *this), m_slot(nullptr), - m_hdc(*this,"hdc") + m_hdc(*this, "hdc") { } @@ -58,8 +58,8 @@ void cpc_hd20_device::device_start() { m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_write_handler(0xfbe0,0xfbe4,write8_delegate(FUNC(cpc_hd20_device::hdc_w),this)); - space.install_read_handler(0xfbe0,0xfbe4,read8_delegate(FUNC(cpc_hd20_device::hdc_r),this)); + space.install_write_handler(0xfbe0,0xfbe4, write8sm_delegate(*this, FUNC(cpc_hd20_device::hdc_w))); + space.install_read_handler(0xfbe0,0xfbe4, read8sm_delegate(*this, FUNC(cpc_hd20_device::hdc_r))); } //------------------------------------------------- @@ -71,7 +71,7 @@ void cpc_hd20_device::device_reset() // TODO } -READ8_MEMBER(cpc_hd20_device::hdc_r) +uint8_t cpc_hd20_device::hdc_r(offs_t offset) { uint8_t ret = 0x00; @@ -95,7 +95,7 @@ READ8_MEMBER(cpc_hd20_device::hdc_r) return ret; } -WRITE8_MEMBER(cpc_hd20_device::hdc_w) +void cpc_hd20_device::hdc_w(offs_t offset, uint8_t data) { switch(offset) { @@ -117,7 +117,7 @@ WRITE8_MEMBER(cpc_hd20_device::hdc_w) } } -WRITE_LINE_MEMBER(cpc_hd20_device::irq_w) +void cpc_hd20_device::irq_w(int state) { // if(state) // m_hdc->set_ready(); diff --git a/src/devices/bus/cpc/hd20.h b/src/devices/bus/cpc/hd20.h index a0379dbd831..ac88d18875c 100644 --- a/src/devices/bus/cpc/hd20.h +++ b/src/devices/bus/cpc/hd20.h @@ -26,20 +26,20 @@ public: // construction/destruction cpc_hd20_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(hdc_r); - DECLARE_WRITE8_MEMBER(hdc_w); + uint8_t hdc_r(offs_t offset); + void hdc_w(offs_t offset, uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; private: - DECLARE_WRITE_LINE_MEMBER(irq_w); + void irq_w(int state); cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/magicsound.cpp b/src/devices/bus/cpc/magicsound.cpp index 1a85915dca1..23828254aac 100644 --- a/src/devices/bus/cpc/magicsound.cpp +++ b/src/devices/bus/cpc/magicsound.cpp @@ -9,7 +9,6 @@ #include "emu.h" #include "magicsound.h" -#include "sound/volt_reg.h" #include "speaker.h" @@ -59,9 +58,6 @@ void al_magicsound_device::device_add_mconfig(machine_config &config) SPEAKER(config, "speaker").front_center(); DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC - voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); - vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); - vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); // no pass-through(?) } @@ -89,17 +85,14 @@ void al_magicsound_device::device_start() { m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_readwrite_handler(0xf8d0,0xf8df,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); - space.install_write_handler(0xf9d0,0xf9df,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); - space.install_write_handler(0xfad0,0xfadf,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); - space.install_write_handler(0xfbd0,0xfbdf,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); + space.install_readwrite_handler(0xf8d0,0xf8df, read8sm_delegate(*this, FUNC(al_magicsound_device::dmac_r)), write8sm_delegate(*this, FUNC(al_magicsound_device::dmac_w))); + space.install_write_handler(0xf9d0,0xf9df, write8sm_delegate(*this, FUNC(al_magicsound_device::timer_w))); + space.install_write_handler(0xfad0,0xfadf, write8sm_delegate(*this, FUNC(al_magicsound_device::volume_w))); + space.install_write_handler(0xfbd0,0xfbdf, write8sm_delegate(*this, FUNC(al_magicsound_device::mapper_w))); m_ramptr = machine().device<ram_device>(":" RAM_TAG); - for(int x=0;x<4;x++) - { - save_item(NAME(m_output[x]),x); - } + save_item(NAME(m_output)); } //------------------------------------------------- @@ -113,17 +106,17 @@ void al_magicsound_device::device_reset() set_timer_gate(false); } -READ8_MEMBER(al_magicsound_device::dmac_r) +uint8_t al_magicsound_device::dmac_r(offs_t offset) { return m_dmac->read(offset); } -WRITE8_MEMBER(al_magicsound_device::dmac_w) +void al_magicsound_device::dmac_w(offs_t offset, uint8_t data) { m_dmac->write(offset,data); } -WRITE8_MEMBER(al_magicsound_device::timer_w) +void al_magicsound_device::timer_w(offs_t offset, uint8_t data) { // can both PITs be selected at the same time? if(offset & 0x08) @@ -132,12 +125,12 @@ WRITE8_MEMBER(al_magicsound_device::timer_w) m_timer2->write(offset & 0x03,data); } -WRITE8_MEMBER(al_magicsound_device::volume_w) +void al_magicsound_device::volume_w(offs_t offset, uint8_t data) { m_volume[offset & 0x03] = data & 0x3f; } -WRITE8_MEMBER(al_magicsound_device::mapper_w) +void al_magicsound_device::mapper_w(offs_t offset, uint8_t data) { uint8_t channel = (offset & 0x0c) >> 2; uint8_t page = offset & 0x03; @@ -145,24 +138,24 @@ WRITE8_MEMBER(al_magicsound_device::mapper_w) set_timer_gate(true); } -WRITE_LINE_MEMBER(al_magicsound_device::da0_w) +void al_magicsound_device::da0_w(int state) { m_dac->write(m_output[m_current_output++]); if(m_current_output > 3) m_current_output = 0; } -WRITE_LINE_MEMBER(al_magicsound_device::dack0_w) { m_dack[0] = state; } -WRITE_LINE_MEMBER(al_magicsound_device::dack1_w) { m_dack[1] = state; } -WRITE_LINE_MEMBER(al_magicsound_device::dack2_w) { m_dack[2] = state; } -WRITE_LINE_MEMBER(al_magicsound_device::dack3_w) { m_dack[3] = state; } +void al_magicsound_device::dack0_w(int state) { m_dack[0] = state; } +void al_magicsound_device::dack1_w(int state) { m_dack[1] = state; } +void al_magicsound_device::dack2_w(int state) { m_dack[2] = state; } +void al_magicsound_device::dack3_w(int state) { m_dack[3] = state; } -WRITE_LINE_MEMBER(al_magicsound_device::sam0_w) { m_current_channel = 0; if(m_dack[0] && state) m_dmac->dreq0_w(1); } -WRITE_LINE_MEMBER(al_magicsound_device::sam1_w) { m_current_channel = 1; if(m_dack[1] && state) m_dmac->dreq1_w(1); } -WRITE_LINE_MEMBER(al_magicsound_device::sam2_w) { m_current_channel = 2; if(m_dack[2] && state) m_dmac->dreq2_w(1); } -WRITE_LINE_MEMBER(al_magicsound_device::sam3_w) { m_current_channel = 3; if(m_dack[3] && state) m_dmac->dreq3_w(1); } +void al_magicsound_device::sam0_w(int state) { m_current_channel = 0; if(m_dack[0] && state) m_dmac->dreq0_w(1); } +void al_magicsound_device::sam1_w(int state) { m_current_channel = 1; if(m_dack[1] && state) m_dmac->dreq1_w(1); } +void al_magicsound_device::sam2_w(int state) { m_current_channel = 2; if(m_dack[2] && state) m_dmac->dreq2_w(1); } +void al_magicsound_device::sam3_w(int state) { m_current_channel = 3; if(m_dack[3] && state) m_dmac->dreq3_w(1); } -READ8_MEMBER(al_magicsound_device::dma_read_byte) +uint8_t al_magicsound_device::dma_read_byte(offs_t offset) { uint8_t ret = 0xff; uint8_t page = (offset & 0xc000) >> 14; @@ -172,7 +165,7 @@ READ8_MEMBER(al_magicsound_device::dma_read_byte) return ret; } -WRITE8_MEMBER(al_magicsound_device::dma_write_byte) +void al_magicsound_device::dma_write_byte(uint8_t data) { m_output[m_current_channel] = data; } diff --git a/src/devices/bus/cpc/magicsound.h b/src/devices/bus/cpc/magicsound.h index b90bbf4e897..162ef1f7c86 100644 --- a/src/devices/bus/cpc/magicsound.h +++ b/src/devices/bus/cpc/magicsound.h @@ -41,32 +41,32 @@ public: // construction/destruction al_magicsound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(dmac_r); - DECLARE_WRITE8_MEMBER(dmac_w); - DECLARE_WRITE8_MEMBER(timer_w); - DECLARE_WRITE8_MEMBER(volume_w); - DECLARE_WRITE8_MEMBER(mapper_w); + uint8_t dmac_r(offs_t offset); + void dmac_w(offs_t offset, uint8_t data); + void timer_w(offs_t offset, uint8_t data); + void volume_w(offs_t offset, uint8_t data); + void mapper_w(offs_t offset, uint8_t data); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - DECLARE_WRITE_LINE_MEMBER(da0_w); - DECLARE_READ8_MEMBER(dma_read_byte); - DECLARE_WRITE8_MEMBER(dma_write_byte); - DECLARE_WRITE_LINE_MEMBER(dack0_w); - DECLARE_WRITE_LINE_MEMBER(dack1_w); - DECLARE_WRITE_LINE_MEMBER(dack2_w); - DECLARE_WRITE_LINE_MEMBER(dack3_w); - DECLARE_WRITE_LINE_MEMBER(sam0_w); - DECLARE_WRITE_LINE_MEMBER(sam1_w); - DECLARE_WRITE_LINE_MEMBER(sam2_w); - DECLARE_WRITE_LINE_MEMBER(sam3_w); + void da0_w(int state); + uint8_t dma_read_byte(offs_t offset); + void dma_write_byte(uint8_t data); + void dack0_w(int state); + void dack1_w(int state); + void dack2_w(int state); + void dack3_w(int state); + void sam0_w(int state); + void sam1_w(int state); + void sam2_w(int state); + void sam3_w(int state); cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/mface2.h b/src/devices/bus/cpc/mface2.h index ba230b917c6..0893d36634a 100644 --- a/src/devices/bus/cpc/mface2.h +++ b/src/devices/bus/cpc/mface2.h @@ -47,13 +47,13 @@ public: protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual ioport_constructor device_input_ports() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/musicmachine.cpp b/src/devices/bus/cpc/musicmachine.cpp index 4d43f20c1fe..83c5bef8dfc 100644 --- a/src/devices/bus/cpc/musicmachine.cpp +++ b/src/devices/bus/cpc/musicmachine.cpp @@ -2,13 +2,12 @@ // copyright-holders:Barry Rodewald /* * The Music Machine - MIDI and sampling expansion - * by Ram Electronics + * by Ram Electronics Ltd */ #include "emu.h" #include "musicmachine.h" -#include "sound/volt_reg.h" #include "bus/midi/midi.h" #include "machine/clock.h" #include "speaker.h" @@ -17,7 +16,7 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(CPC_MUSICMACHINE, cpc_musicmachine_device, "cpcmusic", "The Music Machine") +DEFINE_DEVICE_TYPE(CPC_MUSICMACHINE, cpc_musicmachine_device, "cpcmusic", "The Music Machine (CPC)") void cpc_musicmachine_device::device_add_mconfig(machine_config &config) @@ -31,9 +30,6 @@ void cpc_musicmachine_device::device_add_mconfig(machine_config &config) SPEAKER(config, "speaker").front_center(); ZN429E(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.2); - voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); - vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); - vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); // no pass-through } @@ -61,9 +57,9 @@ void cpc_musicmachine_device::device_start() m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_write_handler(0xf8e8,0xf8e8,write8_delegate(FUNC(cpc_musicmachine_device::irqsel_w),this)); - space.install_readwrite_handler(0xf8ec,0xf8ef,read8_delegate(FUNC(cpc_musicmachine_device::acia_r), this),write8_delegate(FUNC(cpc_musicmachine_device::acia_w),this)); - space.install_write_handler(0xf8f0,0xf8f0,write8_delegate(FUNC(cpc_musicmachine_device::dac_w),this)); + space.install_write_handler(0xf8e8,0xf8e8, write8smo_delegate(*this, FUNC(cpc_musicmachine_device::irqsel_w))); + space.install_readwrite_handler(0xf8ec,0xf8ef, read8sm_delegate(*this, FUNC(cpc_musicmachine_device::acia_r)), write8sm_delegate(*this, FUNC(cpc_musicmachine_device::acia_w))); + space.install_write_handler(0xf8f0,0xf8f0, write8smo_delegate(*this, FUNC(cpc_musicmachine_device::dac_w))); // 0xf8f4 - ADC read8_delegate // 0xf8f8 - ADC start } @@ -77,12 +73,12 @@ void cpc_musicmachine_device::device_reset() // TODO } -WRITE8_MEMBER(cpc_musicmachine_device::dac_w) +void cpc_musicmachine_device::dac_w(uint8_t data) { m_dac->write(data); } -READ8_MEMBER(cpc_musicmachine_device::acia_r) +uint8_t cpc_musicmachine_device::acia_r(offs_t offset) { uint8_t ret = 0; @@ -99,7 +95,7 @@ READ8_MEMBER(cpc_musicmachine_device::acia_r) return ret; } -WRITE8_MEMBER(cpc_musicmachine_device::acia_w) +void cpc_musicmachine_device::acia_w(offs_t offset, uint8_t data) { switch(offset) { @@ -112,7 +108,7 @@ WRITE8_MEMBER(cpc_musicmachine_device::acia_w) } } -WRITE8_MEMBER(cpc_musicmachine_device::irqsel_w) +void cpc_musicmachine_device::irqsel_w(uint8_t data) { if(data == 0x01) m_irq_select = true; @@ -120,7 +116,7 @@ WRITE8_MEMBER(cpc_musicmachine_device::irqsel_w) m_irq_select = false; } -WRITE_LINE_MEMBER(cpc_musicmachine_device::irq_w) +void cpc_musicmachine_device::irq_w(int state) { if(m_irq_select) m_slot->nmi_w(state); diff --git a/src/devices/bus/cpc/musicmachine.h b/src/devices/bus/cpc/musicmachine.h index 511eb19aa02..aea3d6ab9d1 100644 --- a/src/devices/bus/cpc/musicmachine.h +++ b/src/devices/bus/cpc/musicmachine.h @@ -23,21 +23,21 @@ public: // construction/destruction cpc_musicmachine_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER(dac_w); - DECLARE_READ8_MEMBER(acia_r); - DECLARE_WRITE8_MEMBER(acia_w); - DECLARE_WRITE8_MEMBER(irqsel_w); - DECLARE_WRITE_LINE_MEMBER(irq_w); + void dac_w(uint8_t data); + uint8_t acia_r(offs_t offset); + void acia_w(offs_t offset, uint8_t data); + void irqsel_w(uint8_t data); + void irq_w(int state); void write_acia_clock(u8 data) { m_acia->write_txc(data); m_acia->write_rxc(data); } protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp index 7d444abb03b..a2429242f43 100644 --- a/src/devices/bus/cpc/playcity.cpp +++ b/src/devices/bus/cpc/playcity.cpp @@ -31,12 +31,11 @@ void cpc_playcity_device::device_add_mconfig(machine_config &config) m_ctc->zc_callback<2>().set(m_ctc, FUNC(z80ctc_device::trg3)); m_ctc->intr_callback().set(FUNC(cpc_playcity_device::ctc_intr_cb)); - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); + SPEAKER(config, "speaker", 2).front(); YMZ294(config, m_ymz1, DERIVED_CLOCK(1, 1)); // when timer is not set, operates at 4MHz (interally divided by 2, so equivalent to the ST) - m_ymz1->add_route(ALL_OUTPUTS, "rspeaker", 0.30); + m_ymz1->add_route(ALL_OUTPUTS, "speaker", 0.30, 1); YMZ294(config, m_ymz2, DERIVED_CLOCK(1, 1)); - m_ymz2->add_route(ALL_OUTPUTS, "lspeaker", 0.30); + m_ymz2->add_route(ALL_OUTPUTS, "speaker", 0.30, 0); // pass-through cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); @@ -69,11 +68,11 @@ void cpc_playcity_device::device_start() m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_readwrite_handler(0xf880,0xf883,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this)); - space.install_readwrite_handler(0xf884,0xf884,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this)); - space.install_readwrite_handler(0xf888,0xf888,read8_delegate(FUNC(cpc_playcity_device::ymz2_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz2_data_w),this)); - space.install_write_handler(0xf984,0xf984,write8_delegate(FUNC(cpc_playcity_device::ymz1_address_w),this)); - space.install_write_handler(0xf988,0xf988,write8_delegate(FUNC(cpc_playcity_device::ymz2_address_w),this)); + space.install_readwrite_handler(0xf880,0xf883, read8sm_delegate(*this, FUNC(cpc_playcity_device::ctc_r)), write8sm_delegate(*this, FUNC(cpc_playcity_device::ctc_w))); + space.install_readwrite_handler(0xf884,0xf884, read8smo_delegate(*this, FUNC(cpc_playcity_device::ymz1_data_r)), write8smo_delegate(*this, FUNC(cpc_playcity_device::ymz1_data_w))); + space.install_readwrite_handler(0xf888,0xf888, read8smo_delegate(*this, FUNC(cpc_playcity_device::ymz2_data_r)), write8smo_delegate(*this, FUNC(cpc_playcity_device::ymz2_data_w))); + space.install_write_handler(0xf984,0xf984, write8smo_delegate(*this, FUNC(cpc_playcity_device::ymz1_address_w))); + space.install_write_handler(0xf988,0xf988, write8smo_delegate(*this, FUNC(cpc_playcity_device::ymz2_address_w))); } //------------------------------------------------- @@ -85,44 +84,44 @@ void cpc_playcity_device::device_reset() } -READ8_MEMBER(cpc_playcity_device::ctc_r) +uint8_t cpc_playcity_device::ctc_r(offs_t offset) { return m_ctc->read(offset); } -WRITE8_MEMBER(cpc_playcity_device::ctc_w) +void cpc_playcity_device::ctc_w(offs_t offset, uint8_t data) { m_ctc->write(offset,data); if(offset == 0) update_ymz_clock(); } -WRITE8_MEMBER(cpc_playcity_device::ymz1_address_w) +void cpc_playcity_device::ymz1_address_w(uint8_t data) { m_ymz1->address_w(data); } -WRITE8_MEMBER(cpc_playcity_device::ymz2_address_w) +void cpc_playcity_device::ymz2_address_w(uint8_t data) { m_ymz2->address_w(data); } -WRITE8_MEMBER(cpc_playcity_device::ymz1_data_w) +void cpc_playcity_device::ymz1_data_w(uint8_t data) { m_ymz1->data_w(data); } -WRITE8_MEMBER(cpc_playcity_device::ymz2_data_w) +void cpc_playcity_device::ymz2_data_w(uint8_t data) { m_ymz2->data_w(data); } -READ8_MEMBER(cpc_playcity_device::ymz1_data_r) +uint8_t cpc_playcity_device::ymz1_data_r() { return m_ymz1->data_r(); } -READ8_MEMBER(cpc_playcity_device::ymz2_data_r) +uint8_t cpc_playcity_device::ymz2_data_r() { return m_ymz2->data_r(); } diff --git a/src/devices/bus/cpc/playcity.h b/src/devices/bus/cpc/playcity.h index e01c055aee5..0424220aadc 100644 --- a/src/devices/bus/cpc/playcity.h +++ b/src/devices/bus/cpc/playcity.h @@ -30,28 +30,28 @@ public: // construction/destruction cpc_playcity_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(ctc_r); - DECLARE_WRITE8_MEMBER(ctc_w); - DECLARE_WRITE8_MEMBER(ymz1_address_w); - DECLARE_WRITE8_MEMBER(ymz2_address_w); - DECLARE_WRITE8_MEMBER(ymz1_data_w); - DECLARE_WRITE8_MEMBER(ymz2_data_w); - DECLARE_READ8_MEMBER(ymz1_data_r); - DECLARE_READ8_MEMBER(ymz2_data_r); + uint8_t ctc_r(offs_t offset); + void ctc_w(offs_t offset, uint8_t data); + void ymz1_address_w(uint8_t data); + void ymz2_address_w(uint8_t data); + void ymz1_data_w(uint8_t data); + void ymz2_data_w(uint8_t data); + uint8_t ymz1_data_r(); + uint8_t ymz2_data_r(); - virtual WRITE_LINE_MEMBER(cursor_w) override { m_ctc->trg1(state); } + virtual void cursor_w(int state) override { m_ctc->trg1(state); } protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - DECLARE_WRITE_LINE_MEMBER(ctc_zc1_cb) { if(state) { m_slot->nmi_w(1); m_slot->nmi_w(0); } } - DECLARE_WRITE_LINE_MEMBER(ctc_intr_cb) { m_slot->irq_w(state); } + void ctc_zc1_cb(int state) { if(state) { m_slot->nmi_w(1); m_slot->nmi_w(0); } } + void ctc_intr_cb(int state) { m_slot->irq_w(state); } cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/smartwatch.cpp b/src/devices/bus/cpc/smartwatch.cpp index 272b7ca953e..4b2aa04cd10 100644 --- a/src/devices/bus/cpc/smartwatch.cpp +++ b/src/devices/bus/cpc/smartwatch.cpp @@ -4,9 +4,6 @@ Dobbertin Smartwatch Created: 23/2/2015 - - TODO: setting the time (requires the DS1315 core to be able to do this, - at the moment it just reads the current time) */ #include "emu.h" @@ -21,8 +18,7 @@ DEFINE_DEVICE_TYPE(CPC_SMARTWATCH, cpc_smartwatch_device, "cpc_smartwatch", "Dob void cpc_smartwatch_device::device_add_mconfig(machine_config &config) { - DS1315(config, m_rtc, 0); - // no pass-through (?) + DS1216E(config, m_rtc); } @@ -63,26 +59,17 @@ void cpc_smartwatch_device::device_start() void cpc_smartwatch_device::device_reset() { address_space &space = m_slot->cpu().space(AS_PROGRAM); - space.install_read_handler(0xc000,0xc001,read8_delegate(FUNC(cpc_smartwatch_device::rtc_w),this)); - space.install_read_handler(0xc004,0xc004,read8_delegate(FUNC(cpc_smartwatch_device::rtc_r),this)); + // FIXME: should cover the whole ROM address decode range + space.install_read_handler(0xc000,0xc004, read8sm_delegate(*this, FUNC(cpc_smartwatch_device::rtc_r))); m_bank = membank(":bank7"); } -READ8_MEMBER(cpc_smartwatch_device::rtc_w) -{ - uint8_t* bank = (uint8_t*)m_bank->base(); - if (!machine().side_effects_disabled()) - { - if(offset & 1) - m_rtc->read_1(); - else - m_rtc->read_0(); - } - return bank[offset & 1]; -} - -READ8_MEMBER(cpc_smartwatch_device::rtc_r) +uint8_t cpc_smartwatch_device::rtc_r(offs_t offset) { uint8_t* bank = (uint8_t*)m_bank->base(); - return ((bank[(offset & 1)+4]) & 0xfe) | (m_rtc->read_data() & 0x01); + if (m_rtc->ceo_r()) + return m_rtc->read(offset); + else + m_rtc->read(offset); + return bank[offset]; } diff --git a/src/devices/bus/cpc/smartwatch.h b/src/devices/bus/cpc/smartwatch.h index dbde5f58377..3c9959f6590 100644 --- a/src/devices/bus/cpc/smartwatch.h +++ b/src/devices/bus/cpc/smartwatch.h @@ -15,7 +15,7 @@ #pragma once #include "cpcexp.h" -#include "machine/ds1315.h" +#include "machine/ds1215.h" class cpc_smartwatch_device : public device_t, public device_cpc_expansion_card_interface { @@ -23,22 +23,21 @@ public: // construction/destruction cpc_smartwatch_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(rtc_w); - DECLARE_READ8_MEMBER(rtc_r); + uint8_t rtc_r(offs_t offset); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; - required_device<ds1315_device> m_rtc; + required_device<ds1216e_device> m_rtc; memory_bank* m_bank; }; diff --git a/src/devices/bus/cpc/symbfac2.cpp b/src/devices/bus/cpc/symbfac2.cpp index a59a73bf72e..f79fe5b029d 100644 --- a/src/devices/bus/cpc/symbfac2.cpp +++ b/src/devices/bus/cpc/symbfac2.cpp @@ -30,17 +30,17 @@ DEFINE_DEVICE_TYPE(CPC_SYMBIFACE2, cpc_symbiface2_device, "cpc_symf2", "SYMBiFAC static INPUT_PORTS_START(cpc_symbiface2) PORT_START("sf2_mouse_x") - PORT_BIT(0x3f , 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_REVERSE PORT_PLAYER(1) PORT_CODE(MOUSECODE_X) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) + PORT_BIT(0x3f , 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_REVERSE PORT_PLAYER(1) PORT_CODE(MOUSECODE_X) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) PORT_START("sf2_mouse_y") - PORT_BIT(0x3f , 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_PLAYER(1) PORT_CODE(MOUSECODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) + PORT_BIT(0x3f , 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_PLAYER(1) PORT_CODE(MOUSECODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) PORT_START("sf2_mouse_buttons") - PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse left button") PORT_CODE(MOUSECODE_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) - PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse right button") PORT_CODE(MOUSECODE_BUTTON3) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) - PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse middle button") PORT_CODE(MOUSECODE_BUTTON2) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) - PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse back button") PORT_CODE(MOUSECODE_BUTTON4) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) - PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse forward button") PORT_CODE(MOUSECODE_BUTTON5) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_symbiface2_device,mouse_change_x,0) + PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse left button") PORT_CODE(MOUSECODE_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) + PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse right button") PORT_CODE(MOUSECODE_BUTTON3) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) + PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse middle button") PORT_CODE(MOUSECODE_BUTTON2) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) + PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse back button") PORT_CODE(MOUSECODE_BUTTON4) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) + PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("PS/2 Mouse forward button") PORT_CODE(MOUSECODE_BUTTON5) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_symbiface2_device::mouse_change_x), 0) // TODO: mouse scroll wheel support // PORT_START("sf2_mouse_scroll") @@ -90,11 +90,12 @@ void cpc_symbiface2_device::device_start() { m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); address_space &space = m_slot->cpu().space(AS_IO); - space.install_readwrite_handler(0xfd00,0xfd07,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this)); - space.install_readwrite_handler(0xfd08,0xfd0f,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this)); - space.install_read_handler(0xfd10,0xfd10,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this)); - space.install_readwrite_handler(0xfd14,0xfd15,read8_delegate(FUNC(cpc_symbiface2_device::rtc_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rtc_w),this)); - space.install_readwrite_handler(0xfd17,0xfd17,read8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_w),this)); + space.install_readwrite_handler(0xfd00,0xfd07, read8sm_delegate(*this, FUNC(cpc_symbiface2_device::ide_cs1_r)), write8sm_delegate(*this, FUNC(cpc_symbiface2_device::ide_cs1_w))); + space.install_readwrite_handler(0xfd08,0xfd0f, read8sm_delegate(*this, FUNC(cpc_symbiface2_device::ide_cs0_r)), write8sm_delegate(*this, FUNC(cpc_symbiface2_device::ide_cs0_w))); + space.install_read_handler(0xfd10,0xfd10, read8smo_delegate(*this, FUNC(cpc_symbiface2_device::mouse_r))); + space.install_readwrite_handler(0xfd14,0xfd14, read8smo_delegate(m_rtc, FUNC(mc146818_device::data_r)), write8smo_delegate(m_rtc, FUNC(mc146818_device::data_w))); + space.install_write_handler(0xfd15,0xfd15, write8smo_delegate(m_rtc, FUNC(mc146818_device::address_w))); + space.install_readwrite_handler(0xfd17,0xfd17, read8smo_delegate(*this, FUNC(cpc_symbiface2_device::rom_rewrite_r)), write8smo_delegate(*this, FUNC(cpc_symbiface2_device::rom_rewrite_w))); // set up ROM space (these can be writable, when mapped to &4000, or completely disabled, allowing the built-in ROMs to be visible) // 32 banks of 16kB (512kB) @@ -120,7 +121,7 @@ void cpc_symbiface2_device::device_reset() // IDE controller (custom) // #FD00-07 - CS1 // #FD08-0F - CS0 -READ8_MEMBER(cpc_symbiface2_device::ide_cs0_r) +uint8_t cpc_symbiface2_device::ide_cs0_r(offs_t offset) { // data is returned in words, so it must be buffered if(offset == 0x00) // data register @@ -133,41 +134,32 @@ READ8_MEMBER(cpc_symbiface2_device::ide_cs0_r) else { m_iohigh = true; - m_ide_data = m_ide->read_cs0(offset); + m_ide_data = m_ide->cs0_r(offset); return m_ide_data & 0xff; } } else - return m_ide->read_cs0(offset); + return m_ide->cs0_r(offset); } -WRITE8_MEMBER(cpc_symbiface2_device::ide_cs0_w) +void cpc_symbiface2_device::ide_cs0_w(offs_t offset, uint8_t data) { - m_ide->write_cs0(offset, data); + m_ide->cs0_w(offset, data); } -READ8_MEMBER(cpc_symbiface2_device::ide_cs1_r) +uint8_t cpc_symbiface2_device::ide_cs1_r(offs_t offset) { - return m_ide->read_cs1(offset); + return m_ide->cs1_r(offset); } -WRITE8_MEMBER(cpc_symbiface2_device::ide_cs1_w) +void cpc_symbiface2_device::ide_cs1_w(offs_t offset, uint8_t data) { - m_ide->write_cs1(offset, data); + m_ide->cs1_w(offset, data); } // RTC (Dallas DS1287A) // #FD15 (write only) register select // #FD14 (read/write) read from or write into selected register -READ8_MEMBER(cpc_symbiface2_device::rtc_r) -{ - return m_rtc->read(~offset & 0x01); -} - -WRITE8_MEMBER(cpc_symbiface2_device::rtc_w) -{ - m_rtc->write(~offset & 0x01, data); -} // PS/2 Mouse connector // #FD10 (read only) read mouse status @@ -193,7 +185,7 @@ WRITE8_MEMBER(cpc_symbiface2_device::rtc_w) D[bit4] = backward button D[bit5] = 1 -> D[bit0-4] = scroll wheel offset (signed) */ -READ8_MEMBER(cpc_symbiface2_device::mouse_r) +uint8_t cpc_symbiface2_device::mouse_r() { uint8_t ret = 0; int input; @@ -247,11 +239,11 @@ INPUT_CHANGED_MEMBER(cpc_symbiface2_device::mouse_change_buttons) } // #FD17 (read) - map currently selected ROM to 0x4000 for read/write -READ8_MEMBER(cpc_symbiface2_device::rom_rewrite_r) +uint8_t cpc_symbiface2_device::rom_rewrite_r() { uint8_t bank = get_rom_bank(); - if(bank >= 32) + if(bank >= 32 || machine().side_effects_disabled()) return 0xff; m_4xxx_ptr_r = (uint8_t*)machine().root_device().membank("bank3")->base(); @@ -267,7 +259,7 @@ READ8_MEMBER(cpc_symbiface2_device::rom_rewrite_r) } // #FD17 (write) - unmap selected ROM at 0x4000 -WRITE8_MEMBER(cpc_symbiface2_device::rom_rewrite_w) +void cpc_symbiface2_device::rom_rewrite_w(uint8_t data) { machine().root_device().membank("bank3")->set_base(m_4xxx_ptr_r); machine().root_device().membank("bank4")->set_base(m_6xxx_ptr_r); diff --git a/src/devices/bus/cpc/symbfac2.h b/src/devices/bus/cpc/symbfac2.h index df490907a90..941c2814542 100644 --- a/src/devices/bus/cpc/symbfac2.h +++ b/src/devices/bus/cpc/symbfac2.h @@ -12,7 +12,7 @@ #pragma once #include "cpcexp.h" -#include "machine/ataintf.h" +#include "bus/ata/ataintf.h" #include "machine/ds128x.h" #include "machine/nvram.h" @@ -23,15 +23,13 @@ public: // construction/destruction cpc_symbiface2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER(ide_cs0_r); - DECLARE_WRITE8_MEMBER(ide_cs0_w); - DECLARE_READ8_MEMBER(ide_cs1_r); - DECLARE_WRITE8_MEMBER(ide_cs1_w); - DECLARE_READ8_MEMBER(rtc_r); - DECLARE_WRITE8_MEMBER(rtc_w); - DECLARE_READ8_MEMBER(mouse_r); - DECLARE_READ8_MEMBER(rom_rewrite_r); - DECLARE_WRITE8_MEMBER(rom_rewrite_w); + uint8_t ide_cs0_r(offs_t offset); + void ide_cs0_w(offs_t offset, uint8_t data); + uint8_t ide_cs1_r(offs_t offset); + void ide_cs1_w(offs_t offset, uint8_t data); + uint8_t mouse_r(); + uint8_t rom_rewrite_r(); + void rom_rewrite_w(uint8_t data); DECLARE_INPUT_CHANGED_MEMBER(mouse_change_x); DECLARE_INPUT_CHANGED_MEMBER(mouse_change_y); DECLARE_INPUT_CHANGED_MEMBER(mouse_change_buttons); @@ -47,12 +45,12 @@ public: protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; diff --git a/src/devices/bus/cpc/transtape.cpp b/src/devices/bus/cpc/transtape.cpp index 78ec1f15c72..08c3ca84d71 100644 --- a/src/devices/bus/cpc/transtape.cpp +++ b/src/devices/bus/cpc/transtape.cpp @@ -29,8 +29,8 @@ const tiny_rom_entry *cpc_transtape_device::device_rom_region() const static INPUT_PORTS_START(cpc_transtape) PORT_START("transtape") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Red Button") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_transtape_device,button_red_w,0) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Black Button") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF,cpc_transtape_device,button_black_w,0) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Red Button") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_transtape_device::button_red_w), 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Black Button") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(cpc_transtape_device::button_black_w), 0) INPUT_PORTS_END ioport_constructor cpc_transtape_device::device_input_ports() const @@ -63,8 +63,8 @@ void cpc_transtape_device::device_start() m_ram = make_unique_clear<uint8_t[]>(0x2000); - m_space->install_write_handler(0xfbf0,0xfbf0,write8_delegate(FUNC(cpc_transtape_device::output_w),this)); - m_space->install_read_handler(0xfbff,0xfbff,read8_delegate(FUNC(cpc_transtape_device::input_r),this)); + m_space->install_write_handler(0xfbf0,0xfbf0, write8smo_delegate(*this, FUNC(cpc_transtape_device::output_w))); + m_space->install_read_handler(0xfbff,0xfbff, read8smo_delegate(*this, FUNC(cpc_transtape_device::input_r))); } //------------------------------------------------- @@ -117,17 +117,17 @@ INPUT_CHANGED_MEMBER(cpc_transtape_device::button_black_w) } } -READ8_MEMBER(cpc_transtape_device::input_r) +uint8_t cpc_transtape_device::input_r() { // TODO return 0x80; } -WRITE8_MEMBER(cpc_transtape_device::output_w) +void cpc_transtape_device::output_w(uint8_t data) { // TODO m_output = data; - m_slot->rom_select(space,0,get_rom_bank()); // trigger rethink + m_slot->rom_select(get_rom_bank()); // trigger rethink } void cpc_transtape_device::set_mapping(uint8_t type) diff --git a/src/devices/bus/cpc/transtape.h b/src/devices/bus/cpc/transtape.h index 6b7e4539023..aba5e1dfd38 100644 --- a/src/devices/bus/cpc/transtape.h +++ b/src/devices/bus/cpc/transtape.h @@ -22,21 +22,21 @@ public: cpc_transtape_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; virtual void set_mapping(uint8_t type) override; - virtual WRITE_LINE_MEMBER( romen_w ) override { m_romen = state; } + virtual void romen_w(int state) override { m_romen = state; } - DECLARE_READ8_MEMBER(input_r); - DECLARE_WRITE8_MEMBER(output_w); + uint8_t input_r(); + void output_w(uint8_t data); DECLARE_INPUT_CHANGED_MEMBER(button_red_w); DECLARE_INPUT_CHANGED_MEMBER(button_black_w); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; private: cpc_expansion_slot_device *m_slot; |