summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/c64_cart.xml30
-rw-r--r--hash/c64_flop_misc.xml13
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--scripts/src/formats.lua12
-rw-r--r--src/devices/bus/c64/exp.cpp2
-rw-r--r--src/devices/bus/c64/tibdd001.cpp162
-rw-r--r--src/devices/bus/c64/tibdd001.h61
-rw-r--r--src/lib/formats/tibdd001_dsk.cpp40
-rw-r--r--src/lib/formats/tibdd001_dsk.h33
9 files changed, 355 insertions, 0 deletions
diff --git a/hash/c64_cart.xml b/hash/c64_cart.xml
index 32ce488af48..6e59f462358 100644
--- a/hash/c64_cart.xml
+++ b/hash/c64_cart.xml
@@ -7146,6 +7146,36 @@ license:CC0-1.0
</part>
</software>
+ <software name="tibdd001">
+ <description>Disc Drive DD-001 (v1.1)</description>
+ <year>1991</year>
+ <publisher>TIB</publisher>
+ <part name="cart" interface="c64_cart">
+ <feature name="slot" value="tibdd001" />
+ <feature name="game" value="1" />
+ <feature name="exrom" value="0" />
+
+ <dataarea name="roml" size="0x2000">
+ <rom name="rom_dd001_v1.1.bin" size="0x2000" crc="d266b628" sha1="24d178560dad3d955ebbe15f4274d966e031142d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tibdd001a" cloneof="tibdd001">
+ <description>Disc Drive DD-001 (v1.0)</description>
+ <year>1991</year>
+ <publisher>TIB</publisher>
+ <part name="cart" interface="c64_cart">
+ <feature name="slot" value="tibdd001" />
+ <feature name="game" value="1" />
+ <feature name="exrom" value="0" />
+
+ <dataarea name="roml" size="0x2000">
+ <rom name="rom_dd001_v1.0.bin" size="0x2000" crc="58f83983" sha1="f18cfb42c8e2c9152e18b129d01408f702271363"/>
+ </dataarea>
+ </part>
+ </software>
+
<!-- Dummy cartridge entries to allow requirement mappings from c64_flop -->
<software name="cpm">
diff --git a/hash/c64_flop_misc.xml b/hash/c64_flop_misc.xml
index 78c213428b1..9f98e3e569d 100644
--- a/hash/c64_flop_misc.xml
+++ b/hash/c64_flop_misc.xml
@@ -841,6 +841,19 @@ license:CC0-1.0
</part>
</software>
+ <software name="tibdd001">
+ <description>Games and Utility Disc (v1.1)</description>
+ <year>1991</year>
+ <publisher>TIB</publisher>
+ <sharedfeat name="requirement" value="c64_cart:tibdd001"/>
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="737280">
+ <rom name="dd001boot.img" size="737280" crc="a91cabd1" sha1="6a430a246978f9af418e5c6db618e5cb85affd4e"/>
+ </dataarea>
+ </part>
+ </software>
+
<!-- Demos -->
<software name="2ndreal">
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index a57b22de5bd..b542b290909 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -986,6 +986,8 @@ if (BUSES["C64"]~=null) then
MAME_DIR .. "src/devices/bus/c64/swiftlink.h",
MAME_DIR .. "src/devices/bus/c64/system3.cpp",
MAME_DIR .. "src/devices/bus/c64/system3.h",
+ MAME_DIR .. "src/devices/bus/c64/tibdd001.cpp",
+ MAME_DIR .. "src/devices/bus/c64/tibdd001.h",
MAME_DIR .. "src/devices/bus/c64/tdos.cpp",
MAME_DIR .. "src/devices/bus/c64/tdos.h",
MAME_DIR .. "src/devices/bus/c64/turbo232.cpp",
diff --git a/scripts/src/formats.lua b/scripts/src/formats.lua
index 190f326749a..536602c4c4f 100644
--- a/scripts/src/formats.lua
+++ b/scripts/src/formats.lua
@@ -1934,6 +1934,18 @@ end
--------------------------------------------------
--
+--@src/lib/formats/tibdd001_dsk.h,FORMATS["TIBDD001_DSK"] = true
+--------------------------------------------------
+
+if opt_tool(FORMATS, "TIBDD001_DSK") then
+ files {
+ MAME_DIR.. "src/lib/formats/tibdd001_dsk.cpp",
+ MAME_DIR.. "src/lib/formats/tibdd001_dsk.h",
+ }
+end
+
+--------------------------------------------------
+--
--@src/lib/formats/tiki100_dsk.h,FORMATS["TIKI100_DSK"] = true
--------------------------------------------------
diff --git a/src/devices/bus/c64/exp.cpp b/src/devices/bus/c64/exp.cpp
index e1c7c866a3e..0113d9f86ee 100644
--- a/src/devices/bus/c64/exp.cpp
+++ b/src/devices/bus/c64/exp.cpp
@@ -349,6 +349,7 @@ void c64_expansion_slot_device::set_passthrough()
#include "sw8k.h"
#include "swiftlink.h"
#include "system3.h"
+#include "tibdd001.h"
#include "tdos.h"
#include "turbo232.h"
#include "vizastar.h"
@@ -381,6 +382,7 @@ void c64_expansion_cards(device_slot_interface &device)
device.option_add("speakez", C64_SPEAKEASY);
device.option_add("supercpu", C64_SUPERCPU);
device.option_add("swiftlink", C64_SWIFTLINK);
+ device.option_add("tibdd001", C64_TIB_DD_001);
device.option_add("turbo232", C64_TURBO232);
device.option_add("buscard", C64_BUSCARD);
device.option_add("buscard2", C64_BUSCARD2);
diff --git a/src/devices/bus/c64/tibdd001.cpp b/src/devices/bus/c64/tibdd001.cpp
new file mode 100644
index 00000000000..a29013cf36a
--- /dev/null
+++ b/src/devices/bus/c64/tibdd001.cpp
@@ -0,0 +1,162 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ TIB Disc Drive DD-001 cartridge emulation
+
+**********************************************************************/
+
+/*
+
+ PCB Layout
+ ----------
+
+ |---------------|
+ | CN1 |
+ | |
+ | FDC |
+ | 16MHz|
+ | LS00 LS00 |
+ | ROM |
+ | |
+ |||||||||||||||
+
+Notes: (All ICs shown)
+ FDC - GoldStar GM82C765B Floppy Disk Subsystem Controller
+ ROM - Texas Instruments TMS2764JL-25 8Kx8 EPROM
+ CN1 - floppy connector
+
+*/
+
+#include "emu.h"
+#include "tibdd001.h"
+
+
+
+//**************************************************************************
+// MACROS/CONSTANTS
+//**************************************************************************
+
+#define GM82C765B_TAG "u4"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(C64_TIB_DD_001, c64_tib_dd_001_device, "c64_tibdd001", "C64 TIB Disc Drive DD-001 cartridge")
+
+
+static void tib_dd_001_floppies(device_slot_interface &device)
+{
+ device.option_add("35dd", FLOPPY_35_DD);
+}
+
+void c64_tib_dd_001_device::floppy_formats(format_registration &fr)
+{
+ fr.add_mfm_containers();
+ fr.add(FLOPPY_TIB_DD_001_FORMAT);
+}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void c64_tib_dd_001_device::device_add_mconfig(machine_config &config)
+{
+ WD37C65C(config, m_fdc, 16'000'000);
+ m_fdc->hdl_wr_callback().set(FUNC(c64_tib_dd_001_device::motor_w));
+
+ FLOPPY_CONNECTOR(config, m_floppy, tib_dd_001_floppies, "35dd", c64_tib_dd_001_device::floppy_formats, true).enable_sound(true);
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// c64_tib_dd_001_device - constructor
+//-------------------------------------------------
+
+c64_tib_dd_001_device::c64_tib_dd_001_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, C64_TIB_DD_001, tag, owner, clock),
+ device_c64_expansion_card_interface(mconfig, *this),
+ m_fdc(*this, GM82C765B_TAG),
+ m_floppy(*this, GM82C765B_TAG":0")
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void c64_tib_dd_001_device::device_start()
+{
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void c64_tib_dd_001_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// c64_cd_r - cartridge data read
+//-------------------------------------------------
+
+uint8_t c64_tib_dd_001_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+{
+ if (!roml)
+ {
+ data = m_roml[offset & 0x1fff];
+ }
+
+ if (sphi2 && !io1)
+ {
+ if (BIT(offset, 0))
+ {
+ data = m_fdc->fifo_r();
+ }
+ else
+ {
+ data = m_fdc->msr_r();
+ }
+ }
+
+ if (sphi2 && !io2)
+ {
+ m_fdc->reset();
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// c64_cd_w - cartridge data write
+//-------------------------------------------------
+
+void c64_tib_dd_001_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
+{
+ if (sphi2 && !io1)
+ {
+ if (BIT(offset, 0))
+ {
+ m_fdc->fifo_w(data);
+ }
+ }
+
+ if (sphi2 && !io2)
+ {
+ m_fdc->reset();
+ }
+}
diff --git a/src/devices/bus/c64/tibdd001.h b/src/devices/bus/c64/tibdd001.h
new file mode 100644
index 00000000000..ecad19b1d65
--- /dev/null
+++ b/src/devices/bus/c64/tibdd001.h
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ TIB Disc Drive DD-001 cartridge emulation
+
+**********************************************************************/
+
+#ifndef MAME_BUS_C64_TIB_DD_001_H
+#define MAME_BUS_C64_TIB_DD_001_H
+
+#pragma once
+
+
+#include "exp.h"
+#include "formats/tibdd001_dsk.h"
+#include "imagedev/floppy.h"
+#include "machine/upd765.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> c64_tib_dd_001_device
+
+class c64_tib_dd_001_device : public device_t,
+ public device_c64_expansion_card_interface
+{
+public:
+ // construction/destruction
+ c64_tib_dd_001_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // device_c64_expansion_card_interface overrides
+ virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+ virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
+
+private:
+ static void floppy_formats(format_registration &fr);
+
+ required_device<upd765_family_device> m_fdc;
+ required_device<floppy_connector> m_floppy;
+
+ void motor_w(int state) { m_floppy->get_device()->mon_w(!state); }
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(C64_TIB_DD_001, c64_tib_dd_001_device)
+
+
+#endif // MAME_BUS_C64_TIB_DD_001_H
diff --git a/src/lib/formats/tibdd001_dsk.cpp b/src/lib/formats/tibdd001_dsk.cpp
new file mode 100644
index 00000000000..4ff0a80c11d
--- /dev/null
+++ b/src/lib/formats/tibdd001_dsk.cpp
@@ -0,0 +1,40 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/*********************************************************************
+
+ formats/tibdd001_dsk.cpp
+
+ TIB Disc Drive DD-001 disk images
+
+*********************************************************************/
+
+#include "formats/tibdd001_dsk.h"
+
+tib_dd_001_format::tib_dd_001_format() : upd765_format(formats)
+{
+}
+
+const char *tib_dd_001_format::name() const
+{
+ return "tibdd001";
+}
+
+const char *tib_dd_001_format::description() const
+{
+ return "TIB Disc Drive DD-001 floppy disk image";
+}
+
+const char *tib_dd_001_format::extensions() const
+{
+ return "img";
+}
+
+const tib_dd_001_format::format tib_dd_001_format::formats[] = {
+ { /* 720K 3 1/2 inch double density */
+ floppy_image::FF_35, floppy_image::DSDD, floppy_image::MFM,
+ 2000, 9, 80, 2, 512, {}, 1, {}, 80, 50, 22, 80
+ },
+ {}
+};
+
+const tib_dd_001_format FLOPPY_TIB_DD_001_FORMAT;
diff --git a/src/lib/formats/tibdd001_dsk.h b/src/lib/formats/tibdd001_dsk.h
new file mode 100644
index 00000000000..2193d1569bc
--- /dev/null
+++ b/src/lib/formats/tibdd001_dsk.h
@@ -0,0 +1,33 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/*********************************************************************
+
+ formats/tibdd001_dsk.h
+
+ TIB Disc Drive DD-001 disk images
+
+*********************************************************************/
+#ifndef MAME_FORMATS_TIB_DD_001_DSK_H
+#define MAME_FORMATS_TIB_DD_001_DSK_H
+
+#pragma once
+
+#include "flopimg.h"
+#include "upd765_dsk.h"
+
+class tib_dd_001_format : public upd765_format
+{
+public:
+ tib_dd_001_format();
+
+ virtual const char *name() const override;
+ virtual const char *description() const override;
+ virtual const char *extensions() const override;
+
+private:
+ static const format formats[];
+};
+
+extern const tib_dd_001_format FLOPPY_TIB_DD_001_FORMAT;
+
+#endif // MAME_FORMATS_TIB_DD_001_DSK_H