diff options
-rw-r--r-- | hash/c64_cart.xml | 30 | ||||
-rw-r--r-- | hash/c64_flop_misc.xml | 13 | ||||
-rw-r--r-- | scripts/src/bus.lua | 2 | ||||
-rw-r--r-- | scripts/src/formats.lua | 12 | ||||
-rw-r--r-- | src/devices/bus/c64/exp.cpp | 2 | ||||
-rw-r--r-- | src/devices/bus/c64/tibdd001.cpp | 162 | ||||
-rw-r--r-- | src/devices/bus/c64/tibdd001.h | 61 | ||||
-rw-r--r-- | src/lib/formats/tibdd001_dsk.cpp | 40 | ||||
-rw-r--r-- | src/lib/formats/tibdd001_dsk.h | 33 |
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 |