summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/cpc
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/cpc')
-rw-r--r--src/devices/bus/cpc/amdrum.cpp8
-rw-r--r--src/devices/bus/cpc/amdrum.h8
-rw-r--r--src/devices/bus/cpc/brunword4.cpp6
-rw-r--r--src/devices/bus/cpc/brunword4.h8
-rw-r--r--src/devices/bus/cpc/cpc_pds.cpp8
-rw-r--r--src/devices/bus/cpc/cpc_pds.h10
-rw-r--r--src/devices/bus/cpc/cpc_rom.cpp32
-rw-r--r--src/devices/bus/cpc/cpc_rom.h29
-rw-r--r--src/devices/bus/cpc/cpc_rs232.cpp20
-rw-r--r--src/devices/bus/cpc/cpc_rs232.h26
-rw-r--r--src/devices/bus/cpc/cpc_ssa1.cpp46
-rw-r--r--src/devices/bus/cpc/cpc_ssa1.h48
-rw-r--r--src/devices/bus/cpc/cpcexp.cpp37
-rw-r--r--src/devices/bus/cpc/cpcexp.h26
-rw-r--r--src/devices/bus/cpc/ddi1.cpp20
-rw-r--r--src/devices/bus/cpc/ddi1.h18
-rw-r--r--src/devices/bus/cpc/doubler.cpp6
-rw-r--r--src/devices/bus/cpc/doubler.h9
-rw-r--r--src/devices/bus/cpc/hd20.cpp12
-rw-r--r--src/devices/bus/cpc/hd20.h14
-rw-r--r--src/devices/bus/cpc/magicsound.cpp49
-rw-r--r--src/devices/bus/cpc/magicsound.h38
-rw-r--r--src/devices/bus/cpc/mface2.h10
-rw-r--r--src/devices/bus/cpc/musicmachine.cpp24
-rw-r--r--src/devices/bus/cpc/musicmachine.h16
-rw-r--r--src/devices/bus/cpc/playcity.cpp33
-rw-r--r--src/devices/bus/cpc/playcity.h28
-rw-r--r--src/devices/bus/cpc/smartwatch.cpp31
-rw-r--r--src/devices/bus/cpc/smartwatch.h15
-rw-r--r--src/devices/bus/cpc/symbfac2.cpp60
-rw-r--r--src/devices/bus/cpc/symbfac2.h26
-rw-r--r--src/devices/bus/cpc/transtape.cpp14
-rw-r--r--src/devices/bus/cpc/transtape.h14
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;