summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2019-05-11 17:28:14 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2019-05-11 18:42:27 +0100
commite0f9fdf1f8fc47192e63e19e3ea017bd3bd3aafd (patch)
treee0a608ed4cc3fe5a45d045b0f68207307498b612
parentd4ab3c5549e54c58c6a0ba40453016572add8591 (diff)
dragon.cpp: Added Premier Sprites board.
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--src/devices/bus/coco/dragon_sprites.cpp118
-rw-r--r--src/devices/bus/coco/dragon_sprites.h48
-rw-r--r--src/mame/drivers/dragon.cpp2
4 files changed, 170 insertions, 0 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 6073feda2dc..75bcb53a8f8 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -2960,6 +2960,8 @@ if (BUSES["COCO"]~=null) then
MAME_DIR .. "src/devices/bus/coco/dragon_fdc.h",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbsnd.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbsnd.h",
+ MAME_DIR .. "src/devices/bus/coco/dragon_sprites.cpp",
+ MAME_DIR .. "src/devices/bus/coco/dragon_sprites.h",
}
end
diff --git a/src/devices/bus/coco/dragon_sprites.cpp b/src/devices/bus/coco/dragon_sprites.cpp
new file mode 100644
index 00000000000..c1f300b8259
--- /dev/null
+++ b/src/devices/bus/coco/dragon_sprites.cpp
@@ -0,0 +1,118 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Premier Microsystems Sprites
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dragon_sprites.h"
+#include "screen.h"
+
+
+ROM_START(dragon_sprites)
+ ROM_REGION(0x2000, "eprom", 0)
+ ROM_LOAD("sprites.rom", 0x0000, 0x2000, CRC(b8f54eaf) SHA1(f1288653a12ba9a17ef721d0f4867160c3ca341f))
+ROM_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DRAGON_SPRITES, dragon_sprites_device, "dragon_sprites", "Dragon Sprites")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dragon_sprites_device - constructor
+//-------------------------------------------------
+
+dragon_sprites_device::dragon_sprites_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, DRAGON_SPRITES, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_eprom(*this, "eprom")
+ , m_vdp(*this, "tms9929a")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dragon_sprites_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void dragon_sprites_device::device_add_mconfig(machine_config &config)
+{
+ /* video hardware */
+ TMS9929A(config, m_vdp, 10.738635_MHz_XTAL); // TODO: verify crystal, manual says 10.7MHz
+ m_vdp->set_screen("screen");
+ m_vdp->set_vram_size(0x4000);
+ m_vdp->int_callback().set(FUNC(dragon_sprites_device::nmi_w));
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER);
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *dragon_sprites_device::device_rom_region() const
+{
+ return ROM_NAME( dragon_sprites );
+}
+
+
+//-------------------------------------------------
+// cts_read
+//-------------------------------------------------
+
+READ8_MEMBER(dragon_sprites_device::cts_read)
+{
+ uint8_t data = 0x00;
+ switch (offset)
+ {
+ case 0x2000:
+ data = m_vdp->vram_read();
+ break;
+ case 0x2001:
+ data = m_vdp->register_read();
+ break;
+ default:
+ data = m_eprom->base()[offset & 0x1fff];
+ break;
+ }
+ return data;
+}
+
+
+//-------------------------------------------------
+// cts_write
+//-------------------------------------------------
+
+WRITE8_MEMBER(dragon_sprites_device::cts_write)
+{
+ switch (offset)
+ {
+ case 0x2000:
+ m_vdp->vram_write(data);
+ break;
+ case 0x2001:
+ m_vdp->register_write(data);
+ break;
+ };
+}
+
+
+WRITE_LINE_MEMBER(dragon_sprites_device::nmi_w)
+{
+ // set the NMI line
+ set_line_value(line::NMI, state);
+} \ No newline at end of file
diff --git a/src/devices/bus/coco/dragon_sprites.h b/src/devices/bus/coco/dragon_sprites.h
new file mode 100644
index 00000000000..6ff1d20f8ab
--- /dev/null
+++ b/src/devices/bus/coco/dragon_sprites.h
@@ -0,0 +1,48 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_DRAGON_SPRITES_H
+#define MAME_BUS_COCO_DRAGON_SPRITES_H
+
+#pragma once
+
+#include "cococart.h"
+#include "video/tms9928a.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dragon_sprites_device
+
+class dragon_sprites_device :
+ public device_t,
+ public device_cococart_interface
+{
+public:
+ // construction/destruction
+ dragon_sprites_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ virtual DECLARE_READ8_MEMBER(cts_read) override;
+ virtual DECLARE_WRITE8_MEMBER(cts_write) override;
+
+private:
+ required_memory_region m_eprom;
+ required_device<tms9929a_device> m_vdp;
+
+ DECLARE_WRITE_LINE_MEMBER(nmi_w);
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DRAGON_SPRITES, dragon_sprites_device)
+
+#endif // MAME_BUS_COCO_DRAGON_SPRITES_H
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp
index 84d6ce7c096..490d4e38d06 100644
--- a/src/mame/drivers/dragon.cpp
+++ b/src/mame/drivers/dragon.cpp
@@ -22,6 +22,7 @@
#include "bus/coco/dragon_fdc.h"
#include "bus/coco/dragon_jcbsnd.h"
+#include "bus/coco/dragon_sprites.h"
#include "bus/coco/coco_pak.h"
#include "bus/coco/coco_ssc.h"
#include "bus/coco/coco_orch90.h"
@@ -170,6 +171,7 @@ void dragon_cart(device_slot_interface &device)
device.option_add("premier_fdc", PREMIER_FDC);
device.option_add("sdtandy_fdc", SDTANDY_FDC);
device.option_add("jcbsnd", DRAGON_JCBSND);
+ device.option_add("sprites", DRAGON_SPRITES);
device.option_add("ssc", COCO_SSC);
device.option_add("orch90", COCO_ORCH90);
device.option_add("gmc", COCO_PAK_GMC);