summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/coco/coco_xsid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/coco/coco_xsid.cpp')
-rw-r--r--src/devices/bus/coco/coco_xsid.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/devices/bus/coco/coco_xsid.cpp b/src/devices/bus/coco/coco_xsid.cpp
new file mode 100644
index 00000000000..ad1c9ee2a82
--- /dev/null
+++ b/src/devices/bus/coco/coco_xsid.cpp
@@ -0,0 +1,60 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ CoCo X SID
+
+ Uses X-SID V2.0: SID replacement for 6581/8580 with Audio Boost.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "coco_xsid.h"
+
+#include "sound/mos6581.h"
+
+#include "speaker.h"
+
+
+namespace {
+
+class coco_xsid_device : public device_t, public device_cococart_interface
+{
+ public:
+ // construction/destruction
+ coco_xsid_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, COCO_XSID, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_sid(*this, "mos8580")
+ {
+ }
+
+ protected:
+ virtual void device_start() override ATTR_COLD { }
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD
+ {
+ SPEAKER(config, "speaker").front_center();
+ MOS8580(config, m_sid, DERIVED_CLOCK(1, 1));
+ m_sid->add_route(ALL_OUTPUTS, "speaker", 1.0);
+ }
+
+ virtual u8 scs_read(offs_t offset) override
+ {
+ return m_sid->read(offset);
+ }
+
+ virtual void scs_write(offs_t offset, u8 data) override
+ {
+ m_sid->write(offset, data);
+ }
+
+ private:
+ required_device<mos8580_device> m_sid;
+};
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(COCO_XSID, device_cococart_interface, coco_xsid_device, "coco_xsid", "CoCo X-SID")