diff options
author | 2019-05-11 17:28:14 +0100 | |
---|---|---|
committer | 2019-05-11 18:42:27 +0100 | |
commit | e0f9fdf1f8fc47192e63e19e3ea017bd3bd3aafd (patch) | |
tree | e0a608ed4cc3fe5a45d045b0f68207307498b612 | |
parent | d4ab3c5549e54c58c6a0ba40453016572add8591 (diff) |
dragon.cpp: Added Premier Sprites board.
-rw-r--r-- | scripts/src/bus.lua | 2 | ||||
-rw-r--r-- | src/devices/bus/coco/dragon_sprites.cpp | 118 | ||||
-rw-r--r-- | src/devices/bus/coco/dragon_sprites.h | 48 | ||||
-rw-r--r-- | src/mame/drivers/dragon.cpp | 2 |
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); |