summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2019-07-16 21:47:01 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2019-07-16 21:55:56 +0100
commit7e74ffcde155bc8dc1177b507d80243f39ef688f (patch)
tree1d074e6d77e46f8285f46d57d9c9f5a2a7a9a45b
parentf1eb546264e578a0a7ab5c81247213fe223ac93d (diff)
New working software list additions
----------------------------------- dragon_cart: AMTOR/AX25 [David Linsley]
-rw-r--r--hash/dragon_cart.xml13
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--src/devices/bus/coco/dragon_amtor.cpp119
-rw-r--r--src/devices/bus/coco/dragon_amtor.h45
-rw-r--r--src/mame/drivers/dragon.cpp2
5 files changed, 181 insertions, 0 deletions
diff --git a/hash/dragon_cart.xml b/hash/dragon_cart.xml
index db170d7f2e8..900b6298ac5 100644
--- a/hash/dragon_cart.xml
+++ b/hash/dragon_cart.xml
@@ -25,6 +25,19 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
</part>
</software>
+ <software name="amtor" supported="no">
+ <description>AMTOR/AX25</description>
+ <year>1990</year>
+ <publisher>Grosvenor Software</publisher>
+ <info name="usage" value="EXEC 49152" />
+ <part name="cart" interface="coco_cart">
+ <feature name="slot" value="amtor" />
+ <dataarea name="rom" size="32768">
+ <rom name="ax25-amtor (1990) (grosvenor).rom" size="32768" crc="81ba0d4a" sha1="6ad86b5faa5ba07ad42256e96f1c798cd3f0ea5e"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="doodlbug">
<description>Doodle Bug</description>
<year>1982</year>
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index d77fe8c5d63..a023daf950a 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -3019,6 +3019,8 @@ if (BUSES["COCO"]~=null) then
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/dragon_amtor.cpp",
+ MAME_DIR .. "src/devices/bus/coco/dragon_amtor.h",
MAME_DIR .. "src/devices/bus/coco/dragon_fdc.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_fdc.h",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbsnd.cpp",
diff --git a/src/devices/bus/coco/dragon_amtor.cpp b/src/devices/bus/coco/dragon_amtor.cpp
new file mode 100644
index 00000000000..9805d408c1f
--- /dev/null
+++ b/src/devices/bus/coco/dragon_amtor.cpp
@@ -0,0 +1,119 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ BMKAX25/AMTOR for G6WHK
+
+ (c) 1990 Grosvenor Software
+
+ Left: AX25 EXEC 49152
+ Right: AMTOR EXEC 49152
+
+ Cartridge contains a single 32K ROM and a switch to select either AX25
+ or AMTOR, each taking 16K.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dragon_amtor.h"
+
+
+//-------------------------------------------------
+// ROM( amtor )
+//-------------------------------------------------
+
+ROM_START( amtor )
+ ROM_REGION(0x8000, "eprom", ROMREGION_ERASE00)
+ // this region is filled by cococart_slot_device::call_load()
+ROM_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DRAGON_AMTOR, dragon_amtor_device, "dragon_amtor", "Dragon Amtor Cartridge")
+
+//-------------------------------------------------
+// INPUT_PORTS( amtor )
+//-------------------------------------------------
+
+static INPUT_PORTS_START( amtor )
+ PORT_START("SWITCH")
+ PORT_CONFNAME( 0x01, 0x00, "Switch" )
+ PORT_CONFSETTING( 0x00, "AMTOR")
+ PORT_CONFSETTING( 0x01, "AX25")
+INPUT_PORTS_END
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dragon_amtor_device - constructor
+//-------------------------------------------------
+
+dragon_amtor_device::dragon_amtor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, DRAGON_AMTOR, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this)
+ , m_eprom(*this, "eprom")
+ , m_switch(*this, "SWITCH")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dragon_amtor_device::device_start()
+{
+}
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor dragon_amtor_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( amtor );
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *dragon_amtor_device::device_rom_region() const
+{
+ return ROM_NAME( amtor );
+}
+
+
+//-------------------------------------------------
+// dragon_amtor_device::get_cart_base
+//-------------------------------------------------
+
+uint8_t* dragon_amtor_device::get_cart_base()
+{
+ return m_eprom->base();
+}
+
+//-------------------------------------------------
+// dragon_amtor_device::get_cart_memregion
+//-------------------------------------------------
+
+memory_region* dragon_amtor_device::get_cart_memregion()
+{
+ return m_eprom;
+}
+
+//-------------------------------------------------
+// cts_read
+//-------------------------------------------------
+
+READ8_MEMBER(dragon_amtor_device::cts_read)
+{
+ offset = bitswap<16>(offset, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1);
+
+ return bitswap<8>(m_eprom->base()[(m_switch->read() << 14) | offset], 3, 2, 1, 0, 7, 6, 5, 4 );
+}
diff --git a/src/devices/bus/coco/dragon_amtor.h b/src/devices/bus/coco/dragon_amtor.h
new file mode 100644
index 00000000000..34cea662110
--- /dev/null
+++ b/src/devices/bus/coco/dragon_amtor.h
@@ -0,0 +1,45 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_DRAGON_AMTOR_H
+#define MAME_BUS_COCO_DRAGON_AMTOR_H
+
+#pragma once
+
+#include "cococart.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dragon_amtor_device
+
+class dragon_amtor_device :
+ public device_t,
+ public device_cococart_interface
+{
+public:
+ // construction/destruction
+ dragon_amtor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // optional information overrides
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual ioport_constructor device_input_ports() const override;
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual uint8_t* get_cart_base() override;
+ virtual memory_region* get_cart_memregion() override;
+
+ virtual DECLARE_READ8_MEMBER(cts_read) override;
+
+private:
+ required_memory_region m_eprom;
+ required_ioport m_switch;
+};
+
+
+// device type definitions
+DECLARE_DEVICE_TYPE(DRAGON_AMTOR, dragon_amtor_device)
+
+#endif // MAME_BUS_COCO_DRAGON_AMTOR_H
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp
index 10ec098e75b..eb7298cd1cd 100644
--- a/src/mame/drivers/dragon.cpp
+++ b/src/mame/drivers/dragon.cpp
@@ -20,6 +20,7 @@
#include "formats/sdf_dsk.h"
#include "imagedev/floppy.h"
+#include "bus/coco/dragon_amtor.h"
#include "bus/coco/dragon_fdc.h"
#include "bus/coco/dragon_jcbsnd.h"
#include "bus/coco/dragon_sprites.h"
@@ -176,6 +177,7 @@ void dragon_cart(device_slot_interface &device)
device.option_add("orch90", COCO_ORCH90);
device.option_add("gmc", COCO_PAK_GMC);
device.option_add("pak", COCO_PAK);
+ device.option_add_internal("amtor", DRAGON_AMTOR);
}
FLOPPY_FORMATS_MEMBER( dragon_alpha_state::dragon_formats )