diff --git a/scripts/src/lib.lua b/scripts/src/lib.lua index 611ed2ae9d9..5fc9603849e 100644 --- a/scripts/src/lib.lua +++ b/scripts/src/lib.lua @@ -383,6 +383,8 @@ project "formats" MAME_DIR .. "src/lib/formats/upd765_dsk.h", MAME_DIR .. "src/lib/formats/vdk_dsk.c", MAME_DIR .. "src/lib/formats/vdk_dsk.h", + MAME_DIR .. "src/lib/formats/vector06_dsk.c", + MAME_DIR .. "src/lib/formats/vector06_dsk.h", MAME_DIR .. "src/lib/formats/victor9k_dsk.c", MAME_DIR .. "src/lib/formats/victor9k_dsk.h", MAME_DIR .. "src/lib/formats/vg5k_cas.c", diff --git a/src/lib/formats/vector06_dsk.c b/src/lib/formats/vector06_dsk.c new file mode 100644 index 00000000000..b423f4b7154 --- /dev/null +++ b/src/lib/formats/vector06_dsk.c @@ -0,0 +1,44 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + Vector 06 + + Disk image format + + TODO: + - Gap sizes + +***************************************************************************/ + +#include "vector06_dsk.h" + +vector06_format::vector06_format() : wd177x_format(formats) +{ +} + +const char *vector06_format::name() const +{ + return "vector06"; +} + +const char *vector06_format::description() const +{ + return "Vector 06 disk image"; +} + +const char *vector06_format::extensions() const +{ + return "fdd"; +} + +const vector06_format::format vector06_format::formats[] = +{ + { + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 5, 82, 2, 1024, {}, 1, {}, 80, 22, 24 + }, + {} +}; + +const floppy_format_type FLOPPY_VECTOR06_FORMAT = &floppy_image_format_creator; diff --git a/src/lib/formats/vector06_dsk.h b/src/lib/formats/vector06_dsk.h new file mode 100644 index 00000000000..cad2fa3ddf3 --- /dev/null +++ b/src/lib/formats/vector06_dsk.h @@ -0,0 +1,33 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + Vector 06 + + Disk image format + +***************************************************************************/ + +#pragma once + +#ifndef __VECTOR06_DSK_H__ +#define __VECTOR06_DSK_H__ + +#include "wd177x_dsk.h" + +class vector06_format : public wd177x_format +{ +public: + vector06_format(); + + virtual const char *name() const; + virtual const char *description() const; + virtual const char *extensions() const; + +private: + static const format formats[]; +}; + +extern const floppy_format_type FLOPPY_VECTOR06_FORMAT; + +#endif // __VECTOR06_DSK_H__ diff --git a/src/mess/drivers/vector06.c b/src/mess/drivers/vector06.c index 208a5feb15c..444692617a5 100644 --- a/src/mess/drivers/vector06.c +++ b/src/mess/drivers/vector06.c @@ -9,6 +9,7 @@ ****************************************************************************/ #include "includes/vector06.h" +#include "formats/vector06_dsk.h" /* Address maps */ @@ -23,10 +24,10 @@ static ADDRESS_MAP_START(vector06_io, AS_IO, 8, vector06_state) AM_RANGE( 0x00, 0x03) AM_READWRITE(vector06_8255_1_r, vector06_8255_1_w ) AM_RANGE( 0x04, 0x07) AM_READWRITE(vector06_8255_2_r, vector06_8255_2_w ) AM_RANGE( 0x0C, 0x0C) AM_WRITE(vector06_color_set) - AM_RANGE( 0x18, 0x18) AM_DEVREADWRITE("wd1793", fd1793_device, data_r, data_w) - AM_RANGE( 0x19, 0x19) AM_DEVREADWRITE("wd1793", fd1793_device, sector_r, sector_w) - AM_RANGE( 0x1A, 0x1A) AM_DEVREADWRITE("wd1793", fd1793_device, track_r, track_w) - AM_RANGE( 0x1B, 0x1B) AM_DEVREADWRITE("wd1793", fd1793_device, status_r, command_w) + AM_RANGE( 0x18, 0x18) AM_DEVREADWRITE("wd1793", fd1793_t, data_r, data_w) + AM_RANGE( 0x19, 0x19) AM_DEVREADWRITE("wd1793", fd1793_t, sector_r, sector_w) + AM_RANGE( 0x1a, 0x1a) AM_DEVREADWRITE("wd1793", fd1793_t, track_r, track_w) + AM_RANGE( 0x1b, 0x1b) AM_DEVREADWRITE("wd1793", fd1793_t, status_r, cmd_w) AM_RANGE( 0x1C, 0x1C) AM_WRITE(vector06_disc_w) ADDRESS_MAP_END @@ -119,21 +120,15 @@ static INPUT_PORTS_START( vector06 ) INPUT_PORTS_END -static LEGACY_FLOPPY_OPTIONS_START(vector) - LEGACY_FLOPPY_OPTION(vector, "fdd", "Vector disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([2]) - TRACKS([82]) - SECTORS([5]) - SECTOR_LENGTH([1024]) - FIRST_SECTOR_ID([1])) -LEGACY_FLOPPY_OPTIONS_END -static const floppy_interface vector_floppy_interface = -{ - FLOPPY_STANDARD_5_25_DSHD, - LEGACY_FLOPPY_OPTIONS_NAME(vector), - NULL -}; +FLOPPY_FORMATS_MEMBER( vector06_state::floppy_formats ) + FLOPPY_VECTOR06_FORMAT +FLOPPY_FORMATS_END + +static SLOT_INTERFACE_START( vector06_floppies ) + SLOT_INTERFACE("qd", FLOPPY_525_QD) +SLOT_INTERFACE_END + /* Machine driver */ static MACHINE_CONFIG_START( vector06, vector06_state ) @@ -176,11 +171,10 @@ static MACHINE_CONFIG_START( vector06, vector06_state ) MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED) - MCFG_DEVICE_ADD("wd1793", FD1793, 0) - MCFG_WD17XX_DEFAULT_DRIVE2_TAGS - MCFG_WD17XX_DDEN_CALLBACK(VCC) + MCFG_FD1793x_ADD("wd1793", XTAL_1MHz) - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(vector_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD("wd1793:0", vector06_floppies, "qd", vector06_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("wd1793:1", vector06_floppies, "qd", vector06_state::floppy_formats) /* cartridge */ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "vector06_cart") diff --git a/src/mess/includes/vector06.h b/src/mess/includes/vector06.h index a35e1467509..970965465ef 100644 --- a/src/mess/includes/vector06.h +++ b/src/mess/includes/vector06.h @@ -15,10 +15,9 @@ #include "sound/wave.h" #include "machine/i8255.h" #include "machine/ram.h" -#include "machine/wd17xx.h" +#include "machine/wd_fdc.h" #include "imagedev/cassette.h" #include "imagedev/flopdrv.h" -#include "formats/basicdsk.h" #include "bus/generic/slot.h" #include "bus/generic/carts.h" @@ -32,16 +31,22 @@ public: m_cassette(*this, "cassette"), m_cart(*this, "cartslot"), m_fdc(*this, "wd1793"), + m_floppy0(*this, "wd1793:0"), + m_floppy1(*this, "wd1793:1"), m_ppi(*this, "ppi8255"), m_ppi2(*this, "ppi8255_2"), m_ram(*this, RAM_TAG), m_palette(*this, "palette") { } + DECLARE_FLOPPY_FORMATS(floppy_formats); + required_device m_maincpu; required_device m_cassette; required_device m_cart; - required_device m_fdc; + required_device m_fdc; + required_device m_floppy0; + required_device m_floppy1; required_device m_ppi; required_device m_ppi2; required_device m_ram; diff --git a/src/mess/machine/vector06.c b/src/mess/machine/vector06.c index e0c436a6239..b6f4e353fed 100644 --- a/src/mess/machine/vector06.c +++ b/src/mess/machine/vector06.c @@ -138,10 +138,22 @@ TIMER_CALLBACK_MEMBER(vector06_state::reset_check_callback) WRITE8_MEMBER( vector06_state::vector06_disc_w ) { -// something here needs to turn the motor on + floppy_image_device *floppy = NULL; - m_fdc->set_side (BIT(data, 2) ^ 1); - m_fdc->set_drive(BIT(data, 0)); + switch (data & 0x01) + { + case 0: floppy = m_floppy0->get_device(); break; + case 1: floppy = m_floppy1->get_device(); break; + } + + m_fdc->set_floppy(floppy); + + if (floppy) + { + // something here needs to turn the motor on + floppy->mon_w(0); + floppy->ss_w(!BIT(data, 2)); + } } void vector06_state::machine_start()