From 218dddf630e3563c3d3c4c1a91e53067cb79d620 Mon Sep 17 00:00:00 2001 From: wilbertpol Date: Sun, 4 Jun 2023 15:50:11 +0100 Subject: msx1_cart.xml: Add four Quick Disk interfaces (not working). (#11306) New NOT_WORKING software list additions (msx1_cart.xml) ------------------------------------------ DPQ-280 Quick Disk Drive DPQ-280 Quick Disk Drive (alt) QDM-01 Quick Disk Drive VY-0002 Quick Disk Drive --- hash/msx1_cart.xml | 67 ++++++++++++++++- scripts/src/bus.lua | 2 + src/devices/bus/msx/cart/cartridge.cpp | 2 + src/devices/bus/msx/cart/quickdisk.cpp | 124 +++++++++++++++++++++++++++++++ src/devices/bus/msx/cart/quickdisk.h | 12 +++ src/devices/bus/msx/cart/slotoptions.cpp | 1 + src/devices/bus/msx/cart/slotoptions.h | 1 + 7 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 src/devices/bus/msx/cart/quickdisk.cpp create mode 100644 src/devices/bus/msx/cart/quickdisk.h diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml index 03b2f58b32b..59221314067 100644 --- a/hash/msx1_cart.xml +++ b/hash/msx1_cart.xml @@ -11510,7 +11510,7 @@ kept for now until finding out what those bytes affect... - + Star Trek (Japan, alt) 1986 SEGA @@ -17968,6 +17968,67 @@ legacy FM implementations cannot find it. + + + + + DPQ-280 Quick Disk Drive + 1985 + Daewoo + + + + + + + + + + + + DPQ-280 Quick Disk Drive (alt) + 1985 + Daewoo + + + + + + + + + + + + + + QDM-01 Quick Disk Drive + 1985 + AVT + + + + + + + + + + + + VY-0002 Quick Disk Drive + 1985 + Philips + + + + + + + + + + @@ -18402,7 +18463,7 @@ legacy FM implementations cannot find it. - + Sensha Game (20210318) 2021 <homebrew> @@ -19707,7 +19768,7 @@ legacy FM implementations cannot find it. - + Transball (v1.3.2?, English, alt) 2016 <homebrew> diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 41894e6d422..0f8ada2b828 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1942,6 +1942,8 @@ if (BUSES["MSX_SLOT"]~=null) then MAME_DIR .. "src/devices/bus/msx/cart/msxdos2.h", MAME_DIR .. "src/devices/bus/msx/cart/nomapper.cpp", MAME_DIR .. "src/devices/bus/msx/cart/nomapper.h", + MAME_DIR .. "src/devices/bus/msx/cart/quickdisk.cpp", + MAME_DIR .. "src/devices/bus/msx/cart/quickdisk.h", MAME_DIR .. "src/devices/bus/msx/cart/ram.cpp", MAME_DIR .. "src/devices/bus/msx/cart/ram.h", MAME_DIR .. "src/devices/bus/msx/cart/rtype.cpp", diff --git a/src/devices/bus/msx/cart/cartridge.cpp b/src/devices/bus/msx/cart/cartridge.cpp index 37d400a8fe7..68acba6beb8 100644 --- a/src/devices/bus/msx/cart/cartridge.cpp +++ b/src/devices/bus/msx/cart/cartridge.cpp @@ -28,6 +28,7 @@ #include "msx_audio.h" #include "msxdos2.h" #include "nomapper.h" +#include "quickdisk.h" #include "ram.h" #include "rtype.h" #include "slotexpander.h" @@ -80,6 +81,7 @@ void msx_cart(device_slot_interface &device, bool is_in_subslot) device.option_add_internal(slotoptions::MSXDOS2E, MSX_CART_MSXDOS2E); device.option_add_internal(slotoptions::MSXWRITE, MSX_CART_MSXWRITE); device.option_add_internal(slotoptions::NOMAPPER, MSX_CART_NOMAPPER); + device.option_add_internal(slotoptions::QUICKDISK, MSX_CART_QUICKDISK); device.option_add_internal(slotoptions::RTYPE, MSX_CART_RTYPE); device.option_add_internal(slotoptions::SOUND_SNATCHER, MSX_CART_SOUND_SNATCHER); device.option_add_internal(slotoptions::SOUND_SDSNATCH, MSX_CART_SOUND_SDSNATCHER); diff --git a/src/devices/bus/msx/cart/quickdisk.cpp b/src/devices/bus/msx/cart/quickdisk.cpp new file mode 100644 index 00000000000..6fca9a8274b --- /dev/null +++ b/src/devices/bus/msx/cart/quickdisk.cpp @@ -0,0 +1,124 @@ +// license:BSD-3-Clause +// copyright-holders:Wilbert Pol +#include "emu.h" +#include "quickdisk.h" +#include "machine/z80sio.h" +/********************************************************************************** + +Emulation of MSX QuickDisk interfaces. + +All known MSX QuickDisk interfaces contain 8KB ROM, 2KB RAM, and are connected +to a Mitsumi QuickDisk drive. + +TODO: +- Implement a quick disk drive and connect it to the SIO. +- Dumps of MSX QuickDisks. + +**********************************************************************************/ + +//#define VERBOSE (1) +//#define LOG_OUTPUT_FUNC osd_printf_info +#include "logmacro.h" + +namespace +{ + +class msx_cart_quickdisk_device : public device_t, public msx_cart_interface +{ +public: + msx_cart_quickdisk_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, MSX_CART_QUICKDISK, tag, owner, clock) + , msx_cart_interface(mconfig, *this) + , m_sio(*this, "sio") + { } + + virtual std::error_condition initialize_cartridge(std::string &message) override; + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_start() override { } + virtual void device_add_mconfig(machine_config &config) override; + +private: + required_device m_sio; + + void rtsa_w(int state); + void rtsb_w(int state); + void dtra_w(int state); + void dtrb_w(int state); +}; + + +void msx_cart_quickdisk_device::device_add_mconfig(machine_config &config) +{ + Z80SIO(config, m_sio, 6.5_MHz_XTAL); + m_sio->out_int_callback().set(*this, FUNC(msx_cart_quickdisk_device::irq_out)); + m_sio->out_rtsa_callback().set(*this, FUNC(msx_cart_quickdisk_device::rtsa_w)); // RTSA - write enable + m_sio->out_rtsb_callback().set(*this, FUNC(msx_cart_quickdisk_device::rtsb_w)); // RTSB - mfm demodulator? + m_sio->out_dtra_callback().set(*this, FUNC(msx_cart_quickdisk_device::dtra_w)); // DTRA - not used + m_sio->out_dtrb_callback().set(*this, FUNC(msx_cart_quickdisk_device::dtrb_w)); // DTRB - motor on + // CTSA - media write protected + // CTSB - not used + // DCDA - media inserted + // DCDB - ready +} + + +std::error_condition msx_cart_quickdisk_device::initialize_cartridge(std::string &message) +{ + if (!cart_rom_region()) + { + message = "msx_cart_quickdisk_device: Required region 'rom' was not found."; + return image_error::INTERNAL; + } + + if (cart_rom_region()->bytes() != 0x2000) + { + message = "msx_cart_quickdisk_device: Region 'rom' has unsupported size."; + return image_error::INVALIDLENGTH; + } + + if (!cart_ram_region()) + { + message = "msx_cart_quickdisk_device: Required region 'ram' was not found."; + return image_error::INTERNAL; + } + + if (cart_ram_region()->bytes() != 0x800) + { + message = "msx_cart_quickdisk_device: Region 'ram' has unsupported size."; + return image_error::INVALIDLENGTH; + } + + page(1)->install_rom(0x4000, 0x5fff, cart_rom_region()->base()); + page(1)->install_read_handler(0x6000, 0x6003, emu::rw_delegate(m_sio, FUNC(z80sio_device::cd_ba_r))); + page(1)->install_write_handler(0x6000, 0x6003, emu::rw_delegate(m_sio, FUNC(z80sio_device::cd_ba_w))); + page(1)->install_ram(0x7000, 0x77ff, cart_ram_region()->base()); + + return std::error_condition(); +} + +void msx_cart_quickdisk_device::rtsa_w(int state) +{ + LOG("RTSA / write enable: %d\n", state); +} + +void msx_cart_quickdisk_device::rtsb_w(int state) +{ + LOG("RTSB / mfm demodulator: %d\n", state); +} + +void msx_cart_quickdisk_device::dtra_w(int state) +{ + LOG("DTRA / not used: %d\n", state); +} + +void msx_cart_quickdisk_device::dtrb_w(int state) +{ + LOG("DTRB / motor on: %d\n", state); +} + +} // anonymous namespace + +DEFINE_DEVICE_TYPE_PRIVATE(MSX_CART_QUICKDISK, msx_cart_interface, msx_cart_quickdisk_device, "msx_cart_quickdisk", "Quickdisk Interface") diff --git a/src/devices/bus/msx/cart/quickdisk.h b/src/devices/bus/msx/cart/quickdisk.h new file mode 100644 index 00000000000..3532a5a4b65 --- /dev/null +++ b/src/devices/bus/msx/cart/quickdisk.h @@ -0,0 +1,12 @@ +// license:BSD-3-Clause +// copyright-holders:Wilbert Pol +#ifndef MAME_BUS_MSX_CART_QUICKDISK_H +#define MAME_BUS_MSX_CART_QUICKDISK_H + +#pragma once + +#include "bus/msx/slot/cartridge.h" + +DECLARE_DEVICE_TYPE(MSX_CART_QUICKDISK, msx_cart_interface) + +#endif // MAME_BUS_MSX_CART_QUICKDISK_H diff --git a/src/devices/bus/msx/cart/slotoptions.cpp b/src/devices/bus/msx/cart/slotoptions.cpp index f61e75af625..208d3d4ade7 100644 --- a/src/devices/bus/msx/cart/slotoptions.cpp +++ b/src/devices/bus/msx/cart/slotoptions.cpp @@ -64,6 +64,7 @@ char const *const MSXDOS2J = "msxdos2j"; char const *const MSXDOS2E = "msxdos2e"; char const *const MSXWRITE = "msxwrite"; char const *const NOMAPPER = "nomapper"; +char const *const QUICKDISK = "quickdisk"; char const *const RAM16K = "ram16k"; char const *const RAM32K = "ram32k"; char const *const RAM48K = "ram48k"; diff --git a/src/devices/bus/msx/cart/slotoptions.h b/src/devices/bus/msx/cart/slotoptions.h index 64531e65fab..34c26d27915 100644 --- a/src/devices/bus/msx/cart/slotoptions.h +++ b/src/devices/bus/msx/cart/slotoptions.h @@ -67,6 +67,7 @@ extern char const *const MSXDOS2J; extern char const *const MSXDOS2E; extern char const *const MSXWRITE; extern char const *const NOMAPPER; +extern char const *const QUICKDISK; extern char const *const RAM16K; extern char const *const RAM32K; extern char const *const RAM48K; -- cgit v1.2.3