c64: Emulated the TIB Disc Drive DD-001 cartridge. [Curt Coder]

New working software list items
-------------------------------
c64_cart:
	Disc Drive DD-001 (v1.1) [Steve Gray], Disc Drive DD-001 (v1.0) [LHS]

c64_flop_misc:
	Games and Utility Disc (v1.1) [LHS]
This commit is contained in:
Curt Coder 2023-09-04 10:00:23 +03:00
parent cb09c70bcb
commit 27fdce1f58
9 changed files with 355 additions and 0 deletions

View File

@ -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">

View File

@ -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">

View File

@ -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",

View File

@ -1932,6 +1932,18 @@ if opt_tool(FORMATS, "TI99_DSK") then
}
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

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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

View File

@ -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;

View File

@ -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