From 7772cfc363281e0383390c561661d38399e6b758 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Wed, 8 May 2019 10:42:24 +0200 Subject: cgenie: Add more DOS versions to the floppy, confirm fdc type and xtal --- src/devices/bus/cgenie/expansion/floppy.cpp | 46 ++++++++++++++++++----------- src/devices/bus/cgenie/expansion/floppy.h | 2 +- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/devices/bus/cgenie/expansion/floppy.cpp b/src/devices/bus/cgenie/expansion/floppy.cpp index 331fdfd207e..2cf4595ec03 100644 --- a/src/devices/bus/cgenie/expansion/floppy.cpp +++ b/src/devices/bus/cgenie/expansion/floppy.cpp @@ -5,7 +5,6 @@ EACA Colour Genie Floppy Disc Controller TODO: - - What's the exact FD1793 model? - How does it turn off the motor? - What's the source of the timer and the exact timings? @@ -33,10 +32,10 @@ DEFINE_DEVICE_TYPE(CGENIE_FDC, cgenie_fdc_device, "cgenie_fdc", "Colour Genie FD void cgenie_fdc_device::mmio(address_map &map) { map(0xe0, 0xe3).mirror(0x10).rw(FUNC(cgenie_fdc_device::irq_r), FUNC(cgenie_fdc_device::select_w)); - map(0xec, 0xec).mirror(0x10).r("fd1793", FUNC(fd1793_device::status_r)).w(FUNC(cgenie_fdc_device::command_w)); - map(0xed, 0xed).mirror(0x10).rw("fd1793", FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); - map(0xee, 0xee).mirror(0x10).rw("fd1793", FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); - map(0xef, 0xef).mirror(0x10).rw("fd1793", FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0xec, 0xec).mirror(0x10).r("wd2793", FUNC(wd2793_device::status_r)).w(FUNC(cgenie_fdc_device::command_w)); + map(0xed, 0xed).mirror(0x10).rw("wd2793", FUNC(wd2793_device::track_r), FUNC(wd2793_device::track_w)); + map(0xee, 0xee).mirror(0x10).rw("wd2793", FUNC(wd2793_device::sector_r), FUNC(wd2793_device::sector_w)); + map(0xef, 0xef).mirror(0x10).rw("wd2793", FUNC(wd2793_device::data_r), FUNC(wd2793_device::data_w)); } FLOPPY_FORMATS_MEMBER( cgenie_fdc_device::floppy_formats ) @@ -58,8 +57,21 @@ static void cgenie_floppies(device_slot_interface &device) //------------------------------------------------- ROM_START( cgenie_fdc ) - ROM_REGION(0x3000, "software", 0) - ROM_LOAD("cgdos.rom", 0x0000, 0x2000, CRC(2a96cf74) SHA1(6dcac110f87897e1ee7521aefbb3d77a14815893)) + ROM_REGION(0x2000, "software", 0) + ROM_DEFAULT_BIOS("unk1") + + // from cgemu + ROM_SYSTEM_BIOS(0, "unk1", "Unknown 1") + ROMX_LOAD("cgdos.rom", 0x0000, 0x2000, CRC(2a96cf74) SHA1(6dcac110f87897e1ee7521aefbb3d77a14815893), ROM_BIOS(0)) + + // can't read label + ROM_SYSTEM_BIOS(1, "unk2", "Unknown 2") + ROMX_LOAD("cgdos_a.c", 0x0000, 0x1000, CRC(6164e9d1) SHA1(c42ab4e73173893918abc871d01b63a3030cf6cc), ROM_BIOS(1)) + ROMX_LOAD("cgdos_a.d", 0x1000, 0x1000, CRC(b09eb5d1) SHA1(80db78f665a488ad8cbffea696274b53fb90e492), ROM_BIOS(1)) + + // typed in from source code + ROM_SYSTEM_BIOS(2, "v2", "Version 2") + ROMX_LOAD("cgdos-v2.rom", 0x0000, 0x2000, BAD_DUMP CRC(9dace9c1) SHA1(513fef9fea81bee8f5edcf831095e90941e7cd69), ROM_BIOS(2)) ROM_END const tiny_rom_entry *cgenie_fdc_device::device_rom_region() const @@ -74,13 +86,13 @@ const tiny_rom_entry *cgenie_fdc_device::device_rom_region() const MACHINE_CONFIG_START(cgenie_fdc_device::device_add_mconfig) TIMER(config, "timer").configure_periodic(FUNC(cgenie_fdc_device::timer_callback), attotime::from_msec(25)); - FD1793(config, m_fdc, 1_MHz_XTAL); + WD2793(config, m_fdc, 4_MHz_XTAL / 4); m_fdc->intrq_wr_callback().set(FUNC(cgenie_fdc_device::intrq_w)); - FLOPPY_CONNECTOR(config, "fd1793:0", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats); - FLOPPY_CONNECTOR(config, "fd1793:1", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats); - FLOPPY_CONNECTOR(config, "fd1793:2", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats); - FLOPPY_CONNECTOR(config, "fd1793:3", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats); + FLOPPY_CONNECTOR(config, "wd2793:0", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats); + FLOPPY_CONNECTOR(config, "wd2793:1", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats); + FLOPPY_CONNECTOR(config, "wd2793:2", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats); + FLOPPY_CONNECTOR(config, "wd2793:3", cgenie_floppies, nullptr, cgenie_fdc_device::floppy_formats); // SOFTWARE_LIST(config, "floppy_list").set_original("cgenie_flop"); @@ -103,11 +115,11 @@ MACHINE_CONFIG_END cgenie_fdc_device::cgenie_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CGENIE_FDC, tag, owner, clock), device_cg_exp_interface(mconfig, *this), - m_fdc(*this, "fd1793"), - m_floppy0(*this, "fd1793:0"), - m_floppy1(*this, "fd1793:1"), - m_floppy2(*this, "fd1793:2"), - m_floppy3(*this, "fd1793:3"), + m_fdc(*this, "wd2793"), + m_floppy0(*this, "wd2793:0"), + m_floppy1(*this, "wd2793:1"), + m_floppy2(*this, "wd2793:2"), + m_floppy3(*this, "wd2793:3"), m_socket(*this, "socket"), m_floppy(nullptr), m_irq_status(0) diff --git a/src/devices/bus/cgenie/expansion/floppy.h b/src/devices/bus/cgenie/expansion/floppy.h index 033709a24fd..1b6dbf5268b 100644 --- a/src/devices/bus/cgenie/expansion/floppy.h +++ b/src/devices/bus/cgenie/expansion/floppy.h @@ -51,7 +51,7 @@ private: DECLARE_FLOPPY_FORMATS(floppy_formats); - required_device m_fdc; + required_device m_fdc; required_device m_floppy0; required_device m_floppy1; required_device m_floppy2; -- cgit v1.2.3