From d37876bd20e16e49f9d0eb5e3d69b0ba2921e3ae Mon Sep 17 00:00:00 2001 From: tim lindner Date: Mon, 26 Oct 2020 01:42:18 -0700 Subject: [PATCH] bus/coco: Added Speech Systems Stereo Composer cartridge. (#7379) --- scripts/src/bus.lua | 34 ++++++----- src/devices/bus/coco/coco_multi.cpp | 29 +++++---- src/devices/bus/coco/coco_orch90.cpp | 43 +++++++------- src/devices/bus/coco/coco_stecomp.cpp | 86 +++++++++++++++++++++++++++ src/devices/bus/coco/coco_stecomp.h | 13 ++++ src/mame/drivers/coco12.cpp | 30 +++++----- src/mame/drivers/dragon.cpp | 30 +++++----- 7 files changed, 186 insertions(+), 79 deletions(-) create mode 100644 src/devices/bus/coco/coco_stecomp.cpp create mode 100644 src/devices/bus/coco/coco_stecomp.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 1816a481432..16d9f5a528b 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -3364,32 +3364,34 @@ end --------------------------------------------------- if (BUSES["COCO"]~=null) then files { - MAME_DIR .. "src/devices/bus/coco/cococart.cpp", - MAME_DIR .. "src/devices/bus/coco/cococart.h", - MAME_DIR .. "src/devices/bus/coco/coco_rs232.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_rs232.h", MAME_DIR .. "src/devices/bus/coco/coco_dcmodem.cpp", MAME_DIR .. "src/devices/bus/coco/coco_dcmodem.h", - MAME_DIR .. "src/devices/bus/coco/coco_orch90.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_orch90.h", - MAME_DIR .. "src/devices/bus/coco/coco_ram.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_ram.h", - MAME_DIR .. "src/devices/bus/coco/coco_ssc.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_ssc.h", - MAME_DIR .. "src/devices/bus/coco/coco_pak.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_pak.h", + MAME_DIR .. "src/devices/bus/coco/coco_dwsock.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_dwsock.h", MAME_DIR .. "src/devices/bus/coco/coco_fdc.cpp", MAME_DIR .. "src/devices/bus/coco/coco_fdc.h", MAME_DIR .. "src/devices/bus/coco/coco_gmc.cpp", MAME_DIR .. "src/devices/bus/coco/coco_gmc.h", MAME_DIR .. "src/devices/bus/coco/coco_multi.cpp", MAME_DIR .. "src/devices/bus/coco/coco_multi.h", - MAME_DIR .. "src/devices/bus/coco/coco_dwsock.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_dwsock.h", - MAME_DIR .. "src/devices/bus/coco/coco_t4426.cpp", - MAME_DIR .. "src/devices/bus/coco/coco_t4426.h", + MAME_DIR .. "src/devices/bus/coco/coco_orch90.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_orch90.h", + MAME_DIR .. "src/devices/bus/coco/coco_pak.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_pak.h", MAME_DIR .. "src/devices/bus/coco/coco_psg.cpp", MAME_DIR .. "src/devices/bus/coco/coco_psg.h", + MAME_DIR .. "src/devices/bus/coco/coco_ram.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_ram.h", + MAME_DIR .. "src/devices/bus/coco/coco_rs232.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_rs232.h", + MAME_DIR .. "src/devices/bus/coco/coco_ssc.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_ssc.h", + MAME_DIR .. "src/devices/bus/coco/coco_stecomp.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_stecomp.h", + MAME_DIR .. "src/devices/bus/coco/coco_t4426.cpp", + MAME_DIR .. "src/devices/bus/coco/coco_t4426.h", + MAME_DIR .. "src/devices/bus/coco/cococart.cpp", + MAME_DIR .. "src/devices/bus/coco/cococart.h", MAME_DIR .. "src/devices/bus/coco/dragon_amtor.cpp", MAME_DIR .. "src/devices/bus/coco/dragon_amtor.h", MAME_DIR .. "src/devices/bus/coco/dragon_fdc.cpp", diff --git a/src/devices/bus/coco/coco_multi.cpp b/src/devices/bus/coco/coco_multi.cpp index e35a7546a1a..ee7cbfb41c1 100644 --- a/src/devices/bus/coco/coco_multi.cpp +++ b/src/devices/bus/coco/coco_multi.cpp @@ -62,9 +62,10 @@ #include "coco_gmc.h" #include "coco_orch90.h" #include "coco_pak.h" +#include "coco_ram.h" #include "coco_rs232.h" #include "coco_ssc.h" -#include "coco_ram.h" +#include "coco_stecomp.h" #define SLOT1_TAG "slot1" #define SLOT2_TAG "slot2" @@ -161,28 +162,30 @@ namespace static void coco_cart_slot1_3(device_slot_interface &device) { - device.option_add("rs232", COCO_RS232); - device.option_add("dcmodem", COCO_DCMODEM); - device.option_add("orch90", COCO_ORCH90); - device.option_add("ssc", COCO_SSC); - device.option_add("ram", COCO_PAK_RAM); - device.option_add("games_master", COCO_PAK_GMC); device.option_add("banked_16k", COCO_PAK_BANKED); + device.option_add("dcmodem", COCO_DCMODEM); + device.option_add("games_master", COCO_PAK_GMC); + device.option_add("orch90", COCO_ORCH90); device.option_add("pak", COCO_PAK); + device.option_add("ram", COCO_PAK_RAM); + device.option_add("rs232", COCO_RS232); + device.option_add("ssc", COCO_SSC); + device.option_add("stecomp", COCO_STEREO_COMPOSER); } static void coco_cart_slot4(device_slot_interface &device) { + device.option_add("banked_16k", COCO_PAK_BANKED); device.option_add("cc2hdb1", COCO2_HDB1); device.option_add("cc3hdb1", COCO3_HDB1); - device.option_add("fdcv11", COCO_FDC_V11); - device.option_add("rs232", COCO_RS232); device.option_add("dcmodem", COCO_DCMODEM); - device.option_add("orch90", COCO_ORCH90); - device.option_add("ssc", COCO_SSC); - device.option_add("ram", COCO_PAK_RAM); + device.option_add("fdcv11", COCO_FDC_V11); device.option_add("games_master", COCO_PAK_GMC); - device.option_add("banked_16k", COCO_PAK_BANKED); + device.option_add("orch90", COCO_ORCH90); device.option_add("pak", COCO_PAK); + device.option_add("ram", COCO_PAK_RAM); + device.option_add("rs232", COCO_RS232); + device.option_add("ssc", COCO_SSC); + device.option_add("stecomp", COCO_STEREO_COMPOSER); } diff --git a/src/devices/bus/coco/coco_orch90.cpp b/src/devices/bus/coco/coco_orch90.cpp index df650ccff82..7d149f36a26 100644 --- a/src/devices/bus/coco/coco_orch90.cpp +++ b/src/devices/bus/coco/coco_orch90.cpp @@ -66,10 +66,10 @@ namespace { } + protected: // optional information overrides virtual void device_add_mconfig(machine_config &config) override; - protected: // device-level overrides virtual void device_start() override { @@ -108,31 +108,30 @@ namespace required_device m_ldac; required_device m_rdac; }; -}; -//************************************************************************** -// MACHINE AND ROM DECLARATIONS -//************************************************************************** + //************************************************************************** + // MACHINE AND ROM DECLARATIONS + //************************************************************************** + + void coco_orch90_device::device_add_mconfig(machine_config &config) + { + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + DAC_8BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // ls374.ic5 + r7 (8x20k) + r9 (8x10k) + DAC_8BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // ls374.ic4 + r6 (8x20k) + r8 (8x10k) + } + + //------------------------------------------------- + // cts_read + //------------------------------------------------- + + u8 coco_orch90_device::cts_read(offs_t offset) + { + return m_eprom->base()[offset & 0x1fff]; + } -void coco_orch90_device::device_add_mconfig(machine_config &config) -{ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - DAC_8BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // ls374.ic5 + r7 (8x20k) + r9 (8x10k) - DAC_8BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // ls374.ic4 + r6 (8x20k) + r8 (8x10k) } - -//------------------------------------------------- -// cts_read -//------------------------------------------------- - -u8 coco_orch90_device::cts_read(offs_t offset) -{ - return m_eprom->base()[offset & 0x1fff]; -} - - //************************************************************************** // DEVICE DECLARATION //************************************************************************** diff --git a/src/devices/bus/coco/coco_stecomp.cpp b/src/devices/bus/coco/coco_stecomp.cpp new file mode 100644 index 00000000000..bf9804a1211 --- /dev/null +++ b/src/devices/bus/coco/coco_stecomp.cpp @@ -0,0 +1,86 @@ +// license:BSD-3-Clause +// copyright-holders:tim lidnner +/*************************************************************************** + + coco_stecomp.cpp + + + Code for emulating The Stereo Composer by Speech Systems + + This cartridge is a simple sound cartridge. It had two 8-bit DACs + connected thru a PIA. It contained no ROM. + +***************************************************************************/ + +#include "emu.h" +#include "coco_stecomp.h" +#include "cococart.h" + +#include "sound/dac.h" +#include "speaker.h" +#include "machine/6821pia.h" + + +//************************************************************************** +// STEREO_COMPOSER DEVICE CLASS +//************************************************************************** + +namespace +{ + // ======================> coco_stereo_composer_device + + class coco_stereo_composer_device : + public device_t, + public device_cococart_interface + { + public: + // construction/destruction + coco_stereo_composer_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, COCO_STEREO_COMPOSER, tag, owner, clock) + , device_cococart_interface(mconfig, *this) + , m_pia(*this, "sc_pia") + , m_ldac(*this, "sc_ldac") + , m_rdac(*this, "sc_rdac") + { + } + + protected: + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + + // device-level overrides + virtual void device_start() override + { + // install handlers + install_readwrite_handler( 0xFF70, 0xFF73, read8sm_delegate(*m_pia, FUNC(pia6821_device::read)), write8sm_delegate(*m_pia, FUNC(pia6821_device::write))); + } + + private: + // internal state + required_device m_pia; + required_device m_ldac; + required_device m_rdac; + }; + + //************************************************************************** + // STEREO_COMPOSER MACHINE DECLARATIONS + //************************************************************************** + + void coco_stereo_composer_device::device_add_mconfig(machine_config &config) + { + SPEAKER(config, "sc_lspeaker").front_left(); + SPEAKER(config, "sc_rspeaker").front_right(); + DAC_8BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "sc_lspeaker", 0.5); + DAC_8BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "sc_rspeaker", 0.5); + + pia6821_device &pia(PIA6821(config, "sc_pia", 0)); + pia.writepa_handler().set("sc_ldac", FUNC(dac_byte_interface::data_w)); + pia.writepb_handler().set("sc_rdac", FUNC(dac_byte_interface::data_w)); + } +} + +//************************************************************************** +// DEVICE DECLARATION +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(COCO_STEREO_COMPOSER, device_cococart_interface, coco_stereo_composer_device, "coco_stereo_composer", "Speech Systems Stereo Composer") diff --git a/src/devices/bus/coco/coco_stecomp.h b/src/devices/bus/coco/coco_stecomp.h new file mode 100644 index 00000000000..a78c631b492 --- /dev/null +++ b/src/devices/bus/coco/coco_stecomp.h @@ -0,0 +1,13 @@ +// license:BSD-3-Clause +// copyright-holders:tim lindner +#ifndef MAME_BUS_COCO_COCO_STECOMP_H +#define MAME_BUS_COCO_COCO_STECOMP_H + +#pragma once + +#include "cococart.h" + +// device type definition +DECLARE_DEVICE_TYPE(COCO_STEREO_COMPOSER, device_cococart_interface) + +#endif // MAME_BUS_COCO_COCO_STECOMP_H diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp index 4de76feb4c9..df8a8c60d12 100644 --- a/src/mame/drivers/coco12.cpp +++ b/src/mame/drivers/coco12.cpp @@ -34,9 +34,10 @@ #include "bus/coco/coco_orch90.h" #include "bus/coco/coco_pak.h" #include "bus/coco/coco_psg.h" +#include "bus/coco/coco_ram.h" #include "bus/coco/coco_rs232.h" #include "bus/coco/coco_ssc.h" -#include "bus/coco/coco_ram.h" +#include "bus/coco/coco_stecomp.h" #include "bus/coco/coco_t4426.h" #include "cpu/m6809/m6809.h" @@ -405,22 +406,23 @@ INPUT_PORTS_END void coco_cart(device_slot_interface &device) { - device.option_add("fdc", COCO_FDC); - device.option_add("fdcv11", COCO_FDC_V11); + device.option_add("banked_16k", COCO_PAK_BANKED); device.option_add("cc2hdb1", COCO2_HDB1); device.option_add("cc3hdb1", COCO3_HDB1); - device.option_add("cp450_fdc", CP450_FDC); - device.option_add("cd6809_fdc", CD6809_FDC); - device.option_add("rs232", COCO_RS232); - device.option_add("dcmodem", COCO_DCMODEM); - device.option_add("orch90", COCO_ORCH90); - device.option_add("ssc", COCO_SSC); - device.option_add("ram", COCO_PAK_RAM); - device.option_add("games_master", COCO_PAK_GMC); - device.option_add("banked_16k", COCO_PAK_BANKED); - device.option_add("pak", COCO_PAK); - device.option_add("multi", COCO_MULTIPAK); device.option_add("ccpsg", COCO_PSG); + device.option_add("cd6809_fdc", CD6809_FDC); + device.option_add("cp450_fdc", CP450_FDC); + device.option_add("dcmodem", COCO_DCMODEM); + device.option_add("fdc", COCO_FDC); + device.option_add("fdcv11", COCO_FDC_V11); + device.option_add("games_master", COCO_PAK_GMC); + device.option_add("multi", COCO_MULTIPAK); + device.option_add("orch90", COCO_ORCH90); + device.option_add("pak", COCO_PAK); + device.option_add("ram", COCO_PAK_RAM); + device.option_add("rs232", COCO_RS232); + device.option_add("ssc", COCO_SSC); + device.option_add("stecomp", COCO_STEREO_COMPOSER); } //------------------------------------------------- diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp index 570716dd2da..07abe9ca8fc 100644 --- a/src/mame/drivers/dragon.cpp +++ b/src/mame/drivers/dragon.cpp @@ -23,17 +23,18 @@ #include "imagedev/floppy.h" #include "bus/rs232/rs232.h" +#include "bus/coco/coco_gmc.h" +#include "bus/coco/coco_orch90.h" +#include "bus/coco/coco_pak.h" +#include "bus/coco/coco_psg.h" +#include "bus/coco/coco_ram.h" +#include "bus/coco/coco_ssc.h" +#include "bus/coco/coco_stecomp.h" #include "bus/coco/dragon_amtor.h" #include "bus/coco/dragon_fdc.h" #include "bus/coco/dragon_jcbsnd.h" #include "bus/coco/dragon_jcbspch.h" #include "bus/coco/dragon_sprites.h" -#include "bus/coco/coco_pak.h" -#include "bus/coco/coco_ssc.h" -#include "bus/coco/coco_ram.h" -#include "bus/coco/coco_orch90.h" -#include "bus/coco/coco_gmc.h" -#include "bus/coco/coco_psg.h" //************************************************************************** @@ -205,19 +206,20 @@ INPUT_PORTS_END void dragon_cart(device_slot_interface &device) { + device.option_add_internal("amtor", DRAGON_AMTOR); + device.option_add("ccpsg", COCO_PSG); device.option_add("dragon_fdc", DRAGON_FDC); - device.option_add("premier_fdc", PREMIER_FDC); - device.option_add("sdtandy_fdc", SDTANDY_FDC); + device.option_add("gmc", COCO_PAK_GMC); device.option_add("jcbsnd", DRAGON_JCBSND); device.option_add("jcbspch", DRAGON_JCBSPCH); + device.option_add("orch90", COCO_ORCH90); + device.option_add("pak", COCO_PAK); + device.option_add("premier_fdc", PREMIER_FDC); + device.option_add("ram", COCO_PAK_RAM); + device.option_add("sdtandy_fdc", SDTANDY_FDC); device.option_add("sprites", DRAGON_SPRITES); device.option_add("ssc", COCO_SSC); - device.option_add("ram", COCO_PAK_RAM); - device.option_add("orch90", COCO_ORCH90); - device.option_add("gmc", COCO_PAK_GMC); - device.option_add("pak", COCO_PAK); - device.option_add("ccpsg", COCO_PSG); - device.option_add_internal("amtor", DRAGON_AMTOR); + device.option_add("stecomp", COCO_STEREO_COMPOSER); } FLOPPY_FORMATS_MEMBER( dragon_alpha_state::dragon_formats )