summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author npwoods <npwoods@alumni.carnegiemellon.edu>2017-05-14 21:15:59 -0400
committer GitHub <noreply@github.com>2017-05-14 21:15:59 -0400
commita46365d250b5b4113c96b1ecad35a667c51da3e4 (patch)
tree939ff2cb9ced60c8a9f2ba09880c71b19f0616f0 /src
parente9de4eef905debccbdfe12e6f79e9d89cd2e1bc0 (diff)
parent963efbea7724f15b5c6f151b703f6d4abd9fc981 (diff)
Merge pull request #2307 from tlindner/games_master_cartridge
Games Master Cartridge slot device for the Color Computer
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/coco/coco_gmc.cpp73
-rw-r--r--src/devices/bus/coco/coco_gmc.h32
-rw-r--r--src/devices/bus/coco/coco_multi.cpp3
-rw-r--r--src/mame/drivers/coco12.cpp2
-rw-r--r--src/mame/drivers/dragon.cpp1
5 files changed, 111 insertions, 0 deletions
diff --git a/src/devices/bus/coco/coco_gmc.cpp b/src/devices/bus/coco/coco_gmc.cpp
new file mode 100644
index 00000000000..5140e8cc1cf
--- /dev/null
+++ b/src/devices/bus/coco/coco_gmc.cpp
@@ -0,0 +1,73 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+/***************************************************************************
+
+ coco_gmc.cpp
+
+ Code for emulating the Games Master Cartridge. A banked switched ROM
+ cartridge with a SN76489AN programmable sound generator.
+
+ The ROM bank switching is exactly like the circuit developed for RoboCop
+ and Predator.
+
+ The SN76489AN is tied to address $FF41.
+
+ Cartridge by John Linville.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "coco_gmc.h"
+#include "speaker.h"
+
+#define SN76489AN_TAG "gmc_psg"
+
+static MACHINE_CONFIG_FRAGMENT(cocopak_gmc)
+ MCFG_SPEAKER_STANDARD_MONO("gmc_speaker")
+ MCFG_SOUND_ADD(SN76489AN_TAG, SN76489A, XTAL_4MHz)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "gmc_speaker", 1.0)
+MACHINE_CONFIG_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(COCO_PAK_GMC, coco_pak_gmc_device, "cocopakgmc", "CoCo Games Master Cartridge")
+
+//-------------------------------------------------
+// coco_pak_device - constructor
+//-------------------------------------------------
+
+coco_pak_gmc_device::coco_pak_gmc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : coco_pak_banked_device(mconfig, tag, owner, clock),
+ m_psg(*this, SN76489AN_TAG)
+{
+}
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor coco_pak_gmc_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( cocopak_gmc );
+}
+
+//-------------------------------------------------
+// write
+//-------------------------------------------------
+
+WRITE8_MEMBER(coco_pak_gmc_device::write)
+{
+ switch(offset)
+ {
+ case 0:
+ /* set the bank */
+ coco_pak_banked_device::write(space,offset,data,mem_mask);
+ break;
+ case 1:
+ m_psg->write(data);
+ break;
+ }
+}
diff --git a/src/devices/bus/coco/coco_gmc.h b/src/devices/bus/coco/coco_gmc.h
new file mode 100644
index 00000000000..df2dbb255c8
--- /dev/null
+++ b/src/devices/bus/coco/coco_gmc.h
@@ -0,0 +1,32 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+#ifndef MAME_DEVICES_BUS_COCO_COCO_GMC_H
+#define MAME_DEVICES_BUS_COCO_COCO_GMC_H
+
+#pragma once
+
+#include "coco_pak.h"
+#include "sound/sn76496.h"
+
+// ======================> coco_pak_banked_device
+
+class coco_pak_gmc_device :
+ public coco_pak_banked_device
+{
+public:
+ // construction/destruction
+ coco_pak_gmc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual machine_config_constructor device_mconfig_additions() const override;
+
+protected:
+ // device-level overrides
+ virtual DECLARE_WRITE8_MEMBER(write) override;
+private:
+ required_device<sn76489a_device> m_psg;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(COCO_PAK_GMC, coco_pak_gmc_device)
+
+#endif // MAME_DEVICES_BUS_COCO_COCO_GMC_H
diff --git a/src/devices/bus/coco/coco_multi.cpp b/src/devices/bus/coco/coco_multi.cpp
index 32813925984..257308ac3f5 100644
--- a/src/devices/bus/coco/coco_multi.cpp
+++ b/src/devices/bus/coco/coco_multi.cpp
@@ -57,6 +57,7 @@
#include "coco_multi.h"
#include "coco_232.h"
#include "coco_orch90.h"
+#include "coco_gmc.h"
#include "coco_pak.h"
#include "coco_fdc.h"
@@ -74,6 +75,7 @@
static SLOT_INTERFACE_START(coco_cart_slot1_3)
SLOT_INTERFACE("rs232", COCO_232)
SLOT_INTERFACE("orch90", COCO_ORCH90)
+ SLOT_INTERFACE("games_master", COCO_PAK_GMC)
SLOT_INTERFACE("banked_16k", COCO_PAK_BANKED)
SLOT_INTERFACE("pak", COCO_PAK)
SLOT_INTERFACE_END
@@ -82,6 +84,7 @@ static SLOT_INTERFACE_START(coco_cart_slot4)
SLOT_INTERFACE("fdcv11", COCO_FDC_V11)
SLOT_INTERFACE("rs232", COCO_232)
SLOT_INTERFACE("orch90", COCO_ORCH90)
+ SLOT_INTERFACE("games_master", COCO_PAK_GMC)
SLOT_INTERFACE("banked_16k", COCO_PAK_BANKED)
SLOT_INTERFACE("pak", COCO_PAK)
SLOT_INTERFACE_END
diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp
index 2baae4d8efb..c9713688e42 100644
--- a/src/mame/drivers/coco12.cpp
+++ b/src/mame/drivers/coco12.cpp
@@ -31,6 +31,7 @@
#include "bus/coco/coco_fdc.h"
#include "bus/coco/coco_multi.h"
#include "bus/coco/coco_orch90.h"
+#include "bus/coco/coco_gmc.h"
#include "bus/coco/coco_pak.h"
#include "bus/coco/coco_t4426.h"
@@ -252,6 +253,7 @@ SLOT_INTERFACE_START( coco_cart )
SLOT_INTERFACE("cp400_fdc", CP400_FDC)
SLOT_INTERFACE("rs232", COCO_232)
SLOT_INTERFACE("orch90", COCO_ORCH90)
+ SLOT_INTERFACE("games_master", COCO_PAK_GMC)
SLOT_INTERFACE("banked_16k", COCO_PAK_BANKED)
SLOT_INTERFACE("pak", COCO_PAK)
SLOT_INTERFACE("multi", COCO_MULTIPAK) MCFG_SLOT_OPTION_CLOCK("multi", DERIVED_CLOCK(1, 1))
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp
index 17fa1daa7ab..7e12cc894e0 100644
--- a/src/mame/drivers/dragon.cpp
+++ b/src/mame/drivers/dragon.cpp
@@ -16,6 +16,7 @@
#include "cpu/m6809/m6809.h"
#include "bus/coco/coco_232.h"
#include "bus/coco/coco_orch90.h"
+#include "bus/coco/coco_gmc.h"
#include "bus/coco/coco_pak.h"
#include "bus/coco/coco_fdc.h"
#include "bus/coco/coco_multi.h"