summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/lib/formats/msx_dsk.c51
-rw-r--r--src/lib/formats/msx_dsk.h21
-rw-r--r--src/mess/drivers/msx.c209
-rw-r--r--src/mess/includes/msx.h19
-rw-r--r--src/mess/machine/msx.c24
-rw-r--r--src/mess/machine/msx_slot.c97
6 files changed, 328 insertions, 93 deletions
diff --git a/src/lib/formats/msx_dsk.c b/src/lib/formats/msx_dsk.c
index cfd623cc319..65c3ba6fcac 100644
--- a/src/lib/formats/msx_dsk.c
+++ b/src/lib/formats/msx_dsk.c
@@ -6,7 +6,7 @@
*********************************************************************/
-#include "msx_dsk.h"
+#include "formats/msx_dsk.h"
#include "formats/basicdsk.h"
LEGACY_FLOPPY_OPTIONS_START(msx)
@@ -23,3 +23,52 @@ LEGACY_FLOPPY_OPTIONS_START(msx)
SECTOR_LENGTH([512])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
+
+/********************************************************************/
+
+//msx_format::msx_format() : wd177x_format(formats)
+msx_format::msx_format() : upd765_format(formats)
+{
+}
+
+const char *msx_format::name() const
+{
+ return "msx";
+}
+
+const char *msx_format::description() const
+{
+ return "MSX disk image";
+}
+
+const char *msx_format::extensions() const
+{
+ return "dsk";
+}
+
+// Unverified gap sizes
+const msx_format::format msx_format::formats[] = {
+ { /* 3 1/2 inch single sided double density */
+ // 80x4e 12x00 3xf6 fc
+ // 26x4e 12x00 3xf5 fe 2x00 01 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 02 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 03 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 04 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 05 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 06 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 07 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 08 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 54x4e 12x00 3xf5 fe 2x00 09 02 f7 24x4e 12x00 3xf5 fb 512xe5 f7
+ // 1078x4e
+ floppy_image::FF_35, floppy_image::SSDD, floppy_image::MFM,
+ 2000, 9, 80, 1, 512, {}, 1, {}, 26, 24, 28, 80
+ },
+ { /* 3 1/2 inch double density */
+ floppy_image::FF_35, floppy_image::DSDD, floppy_image::MFM,
+ 2000, 9, 80, 2, 512, {}, 1, {}, 26, 24, 28, 80
+ },
+ {}
+};
+
+const floppy_format_type FLOPPY_MSX_FORMAT = &floppy_image_format_creator<msx_format>;
+
diff --git a/src/lib/formats/msx_dsk.h b/src/lib/formats/msx_dsk.h
index bd06127a333..57a9f73535d 100644
--- a/src/lib/formats/msx_dsk.h
+++ b/src/lib/formats/msx_dsk.h
@@ -15,4 +15,25 @@
LEGACY_FLOPPY_OPTIONS_EXTERN(msx);
+/**************************************************************************/
+
+#include "wd177x_dsk.h"
+#include "upd765_dsk.h"
+
+//class msx_format : public wd177x_format {
+class msx_format: public upd765_format {
+public:
+ msx_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_MSX_FORMAT;
+
+
#endif /* MSX_DSK_H */
diff --git a/src/mess/drivers/msx.c b/src/mess/drivers/msx.c
index 8e2a8cef537..e4b973d23d9 100644
--- a/src/mess/drivers/msx.c
+++ b/src/mess/drivers/msx.c
@@ -340,6 +340,8 @@ Panasonic FS-FD1A - TC8566AF
#include "includes/msx.h"
#include "bus/centronics/covox.h"
+#include "formats/dsk_dsk.h"
+
static ADDRESS_MAP_START ( msx_memory_map, AS_PROGRAM, 8, msx_state )
AM_RANGE( 0x0000, 0x1fff) AM_READ_BANK("bank1") AM_WRITE(msx_page0_w)
@@ -1067,18 +1069,6 @@ static const cassette_interface msx_cassette_interface =
NULL
};
-static const floppy_interface msx_floppy_interface =
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- FLOPPY_STANDARD_5_25_DSHD,
- LEGACY_FLOPPY_OPTIONS_NAME(msx),
- "floppy_5_25",
- NULL
-};
static MACHINE_CONFIG_FRAGMENT( msx_cartslot )
MCFG_CARTSLOT_ADD("cart1")
@@ -1096,6 +1086,64 @@ static MACHINE_CONFIG_FRAGMENT( msx_cartslot )
MCFG_CARTSLOT_UNLOAD(msx_state, msx_cart)
MACHINE_CONFIG_END
+FLOPPY_FORMATS_MEMBER( msx_state::floppy_formats )
+ FLOPPY_MSX_FORMAT
+FLOPPY_FORMATS_END
+
+static SLOT_INTERFACE_START( msx_floppies )
+ SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
+ SLOT_INTERFACE( "35ssdd", FLOPPY_35_SSDD )
+SLOT_INTERFACE_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_fd1793 )
+ MCFG_FD1793x_ADD("fdc", XTAL_4MHz / 4)
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_intrq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_drq_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_wd2793 )
+ // From NMS8245 schematics:
+ // READY + HLT - pulled high
+ // SSO/-ENMF + -DDEN + ENP + -5/8 - pulled low
+ MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
+ MCFG_WD_FDC_FORCE_READY
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_intrq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_drq_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_mb8877a )
+ MCFG_MB8877x_ADD("fdc", XTAL_4MHz / 4)
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_intrq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_drq_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_tc8566af )
+ // TODO: Implement TC8566AF, the fragment below is to keep the core happy
+ MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_intrq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_drq_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_microsol )
+ // TODO: Implement MICROSOL, the fragment below is to keep the core happy
+ MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_intrq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(msx_state, msx_wd179x_drq_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_1_35_ssdd_drive )
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35ssdd", msx_state::floppy_formats)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_1_35_dd_drive )
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_state::floppy_formats)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( msx_2_35_dd_drive )
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_state::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", msx_floppies, "35dd", msx_state::floppy_formats)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( msx, msx_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_10_738635MHz/3) /* 3.579545 MHz */
@@ -1140,12 +1188,6 @@ static MACHINE_CONFIG_START( msx, msx_state )
/* cassette */
MCFG_CASSETTE_ADD( "cassette", msx_cassette_interface )
- MCFG_FD1793_ADD("wd179x", msx_wd17xx_interface ) // TODO confirm type
-
- MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(msx_floppy_interface)
-
- MCFG_SOFTWARE_LIST_ADD("flop_list","msx1_flop")
-
MCFG_FRAGMENT_ADD(msx_cartslot)
/* Software lists */
@@ -1241,10 +1283,6 @@ static MACHINE_CONFIG_START( msx2, msx_state )
/* real time clock */
MCFG_DEVICE_ADD("rtc", RP5C01, XTAL_32_768kHz)
- MCFG_FD1793_ADD("wd179x", msx_wd17xx_interface ) // TODO confirm type
-
- MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(msx_floppy_interface)
-
MCFG_FRAGMENT_ADD(msx_cartslot)
/* Software lists */
@@ -1314,10 +1352,6 @@ static MACHINE_CONFIG_START( msx2p, msx_state )
/* real time clock */
MCFG_DEVICE_ADD("rtc", RP5C01, XTAL_32_768kHz)
- MCFG_FD1793_ADD("wd179x", msx_wd17xx_interface ) // TODO confirm type
-
- MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(msx_floppy_interface)
-
MCFG_FRAGMENT_ADD(msx_cartslot)
/* Software lists */
@@ -1617,7 +1651,10 @@ MSX_LAYOUT_END
static MACHINE_CONFIG_DERIVED( expertdp, msx_ntsc )
MCFG_MSX_LAYOUT(expertdp)
// AY8910/YM2149?
- // FDC: mb8877a, 1 3.5" DD drive
+ // FDC: mb8877a, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
+ MCFG_SOFTWARE_LIST_ADD("flop_list","msx1_flop")
// 2 Cartridge slots
// MSX Engine T7937A
MACHINE_CONFIG_END
@@ -1811,6 +1848,9 @@ static MACHINE_CONFIG_DERIVED( cf3300, msx_ntsc )
MCFG_MSX_LAYOUT(cf3300)
// AY8910/YM2149?
// FDC: mb8877a, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
+ MCFG_SOFTWARE_LIST_ADD("flop_list","msx1_flop")
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -2563,6 +2603,9 @@ static MACHINE_CONFIG_DERIVED( svi738, msx_pal )
MCFG_MSX_LAYOUT(svi738)
// AY8910
// FDC: wd1793, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_fd1793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
+ MCFG_SOFTWARE_LIST_ADD("flop_list","msx1_flop")
// 2 Cartridge slots
// builtin 80 columns card (V9938)
// RS-232C interface
@@ -2591,6 +2634,9 @@ static MACHINE_CONFIG_DERIVED( svi738sw, msx_pal )
MCFG_MSX_LAYOUT(svi738sw)
// AY8910
// FDC: wd2793, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
+ MCFG_SOFTWARE_LIST_ADD("flop_list","msx1_flop")
// 2 Cartridge slots
// builtin 80 columns card (V9938)
// RS-232C interface
@@ -2619,6 +2665,9 @@ static MACHINE_CONFIG_DERIVED( svi738pl, msx_pal )
MCFG_MSX_LAYOUT(svi738pl)
// AY8910
// FDC: wd2793, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
+ MCFG_SOFTWARE_LIST_ADD("flop_list","msx1_flop")
// 2 Cartridge slots
// builtin 80 columns card (V9938)
// RS-232C interface
@@ -3094,6 +3143,8 @@ static MACHINE_CONFIG_DERIVED( ax350, msx2_pal )
MCFG_MSX_LAYOUT(ax350)
// AY8910/YM2149?
// FDC: wd2793/tc8566af?, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -3128,6 +3179,8 @@ static MACHINE_CONFIG_DERIVED( ax370, msx2_pal )
MCFG_MSX_LAYOUT(ax370)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -3217,6 +3270,8 @@ static MACHINE_CONFIG_DERIVED( cpc400, msx2 )
MCFG_MSX_LAYOUT(cpc400)
// AY8910/YM2149?
// FDC: mb8877a, 1 3.5" DS?DD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -3249,6 +3304,8 @@ static MACHINE_CONFIG_DERIVED( cpc400s, msx2 )
MCFG_MSX_LAYOUT(cpc400s)
// YM2149 (in S-1985 MSX Engine)
// FDC: mb8877a, 1 3.5" DS?DD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -3279,7 +3336,9 @@ MSX_LAYOUT_END
static MACHINE_CONFIG_DERIVED( expert20, msx2_pal )
MCFG_MSX_LAYOUT(expert20)
// AY8910/YM2149?
- // FDC: wd2793/tc8566af?, 1? 3.5"? DS?DD drive
+ // FDC: microsol, 1? 3.5"? DS?DD drive
+ MCFG_FRAGMENT_ADD( msx_microsol )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -3306,6 +3365,8 @@ static MACHINE_CONFIG_DERIVED( mlg30, msx2 )
MCFG_MSX_LAYOUT(mlg30)
// AY8910/YM2149?
// FDC: wd2793/tc8566af?, 1 or 2? 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -3389,6 +3450,8 @@ static MACHINE_CONFIG_DERIVED( fs4600, msx2 )
MCFG_MSX_LAYOUT(fs4600)
// YM2149 (in S-1985 MSX Engine)
// FDC: mb8877a, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -3434,6 +3497,8 @@ static MACHINE_CONFIG_DERIVED( fs4700, msx2 )
MCFG_MSX_LAYOUT(fs4700)
// YM2149 (in S-1985 MSX Engine)
// FDC: mb8877a, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -3472,6 +3537,8 @@ static MACHINE_CONFIG_DERIVED( fs5000, msx2 )
MCFG_MSX_LAYOUT(fs5000)
// YM2149 (in S-1985 MSX Engine)
// FDC: wd2793, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -3511,6 +3578,8 @@ static MACHINE_CONFIG_DERIVED( fs5500, msx2 )
MCFG_MSX_LAYOUT(fs5500)
// YM2149 in (S-1985 MSX Engine)
// FDC: mb8877a, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_mb8877a )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -3604,6 +3673,8 @@ static MACHINE_CONFIG_DERIVED( fsa1f, msx2 )
MCFG_MSX_LAYOUT(fsa1f)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -3639,6 +3710,8 @@ static MACHINE_CONFIG_DERIVED( fsa1fm, msx2 )
MCFG_MSX_LAYOUT(fsa1fm)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// Integrated 1200baud modem
MACHINE_CONFIG_END
@@ -3756,6 +3829,8 @@ static MACHINE_CONFIG_DERIVED( nms8245, msx2_pal )
MCFG_MSX_LAYOUT(nms8245)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -3783,6 +3858,8 @@ static MACHINE_CONFIG_DERIVED( nms8245f, msx2_pal )
MCFG_MSX_LAYOUT(nms8245f)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -3813,6 +3890,8 @@ static MACHINE_CONFIG_DERIVED( nms8250, msx2_pal )
MCFG_MSX_LAYOUT(nms8250)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -3840,6 +3919,8 @@ static MACHINE_CONFIG_DERIVED( nms8250j, msx2 )
MCFG_MSX_LAYOUT(nms8250j)
// AY8910/YM2149?
// FDC: wd2793?, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -3868,6 +3949,8 @@ static MACHINE_CONFIG_DERIVED( nms8255, msx2_pal )
MCFG_MSX_LAYOUT(nms8255)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -3897,6 +3980,8 @@ static MACHINE_CONFIG_DERIVED( nms8280, msx2_pal )
MCFG_MSX_LAYOUT(nms8280)
// AY8910/YM2149?
// FDC: wd2793, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -3925,6 +4010,8 @@ static MACHINE_CONFIG_DERIVED( nms8280g, msx2_pal )
MCFG_MSX_LAYOUT(nms8280g)
// AY8910/YM2149?
// FDC: wd2793, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -3953,6 +4040,8 @@ static MACHINE_CONFIG_DERIVED( vg8230, msx2_pal )
MCFG_MSX_LAYOUT(vg8230)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -3982,6 +4071,8 @@ static MACHINE_CONFIG_DERIVED( vg8230j, msx2 )
MCFG_MSX_LAYOUT(vg8230j)
// AY8910/YM2149?
// FDC: wd2793?, 1 3.5" SSDD drive?
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4010,6 +4101,8 @@ static MACHINE_CONFIG_DERIVED( vg8235, msx2_pal )
MCFG_MSX_LAYOUT(vg8235)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -4039,6 +4132,8 @@ static MACHINE_CONFIG_DERIVED( vg8235f, msx2_pal )
MCFG_MSX_LAYOUT(vg8235f)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 3.5" SSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_ssdd_drive )
// 2 Cartridge slots
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -4068,6 +4163,8 @@ static MACHINE_CONFIG_DERIVED( vg8240, msx2_pal )
MCFG_MSX_LAYOUT(vg8240)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4118,6 +4215,8 @@ static MACHINE_CONFIG_DERIVED( mpc25fd, msx2 )
MCFG_MSX_LAYOUT(mpc25fd)
// YM2149 (in S-3527 MSX Engine)
// FDC: wd2793, 1 drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 1 Cartridge slot (slot 1)
// S-3527 MSX Engine
MACHINE_CONFIG_END
@@ -4174,7 +4273,9 @@ MSX_LAYOUT_END
static MACHINE_CONFIG_DERIVED( hotbit20, msx2_pal )
MCFG_MSX_LAYOUT(hotbit20)
// AY8910/YM2149?
- // FDC: wd2793/tc8566af, 1 or 2 drives?
+ // FDC: microsol, 1 or 2 drives?
+ MCFG_FRAGMENT_ADD( msx_microsol )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4266,6 +4367,8 @@ static MACHINE_CONFIG_DERIVED( hbf1xd, msx2 )
MCFG_MSX_LAYOUT(hbf1xd)
// YM2149 (in S-1895 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -4295,6 +4398,8 @@ static MACHINE_CONFIG_DERIVED( hbf1xdm2, msx2 )
MCFG_MSX_LAYOUT(hbf1xdm2)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4350,6 +4455,8 @@ static MACHINE_CONFIG_DERIVED( hbf500, msx2 )
MCFG_MSX_LAYOUT(hbf500)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4378,6 +4485,8 @@ static MACHINE_CONFIG_DERIVED( hbf500p, msx2_pal )
MCFG_MSX_LAYOUT(hbf500p)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 3 Cartridge slots or 2 Cartridge slots and 1 expansion slot ?
MACHINE_CONFIG_END
@@ -4405,6 +4514,8 @@ static MACHINE_CONFIG_DERIVED( hbf700d, msx2_pal )
MCFG_MSX_LAYOUT(hbf700d)
// YM2149 (in S-1985 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -4433,6 +4544,8 @@ static MACHINE_CONFIG_DERIVED( hbf700f, msx2_pal )
MCFG_MSX_LAYOUT(hbf700f)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -4460,6 +4573,8 @@ static MACHINE_CONFIG_DERIVED( hbf700p, msx2_pal )
MCFG_MSX_LAYOUT(hbf700p)
// YM2149 (in S-1985 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// S-1985 MSX Engine
MACHINE_CONFIG_END
@@ -4488,6 +4603,8 @@ static MACHINE_CONFIG_DERIVED( hbf700s, msx2_pal )
MCFG_MSX_LAYOUT(hbf700s)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -4519,6 +4636,8 @@ static MACHINE_CONFIG_DERIVED( hbf900, msx2 )
MCFG_MSX_LAYOUT(hbf900)
// AY8910/YM2149?
// FDC: wd2793, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -4550,6 +4669,8 @@ static MACHINE_CONFIG_DERIVED( hbf900a, msx2 )
MCFG_MSX_LAYOUT(hbf900a)
// AY8910/YM2149?
// FDC: wd2793, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
MACHINE_CONFIG_END
@@ -4672,6 +4793,8 @@ static MACHINE_CONFIG_DERIVED( hbg900ap, msx2_pal )
MCFG_MSX_LAYOUT(hbg900ap)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4704,6 +4827,8 @@ static MACHINE_CONFIG_DERIVED( hbg900p, msx2_pal )
MCFG_MSX_LAYOUT(hbg900p)
// AY8910/YM2149?
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4962,6 +5087,8 @@ static MACHINE_CONFIG_DERIVED( expert3i, msx2p )
MCFG_MSX_LAYOUT(expert3i)
// AY8910/YM2149?
// FDC: wd2793, 1 or 2? drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -4992,6 +5119,8 @@ static MACHINE_CONFIG_DERIVED( expert3t, msx2p )
MCFG_MSX_LAYOUT(expert3t)
// AY8910
// FDC: wd2793?, 1 or 2? drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 4 Cartridge/Expansion slots?
// FM/YM2413 built-in
MACHINE_CONFIG_END
@@ -5022,6 +5151,8 @@ static MACHINE_CONFIG_DERIVED( expertac, msx2p )
MCFG_MSX_LAYOUT(expertac)
// AY8910/YM2149?
// FDC: wd2793?, 1 or 2? drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -5085,6 +5216,8 @@ static MACHINE_CONFIG_DERIVED( fsa1fx, msx2p )
MCFG_MSX_LAYOUT(fsa1fx)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
MACHINE_CONFIG_END
@@ -5122,6 +5255,8 @@ static MACHINE_CONFIG_DERIVED( fsa1wsx, msx2p )
MCFG_MSX_LAYOUT(fsa1wsx)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
MACHINE_CONFIG_END
@@ -5160,6 +5295,8 @@ static MACHINE_CONFIG_DERIVED( fsa1wx, msx2p )
MCFG_MSX_LAYOUT(fsa1wx)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
MACHINE_CONFIG_END
@@ -5197,6 +5334,8 @@ static MACHINE_CONFIG_DERIVED( fsa1wxa, msx2p )
MCFG_MSX_LAYOUT(fsa1wxa)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots?
// FM built-in
MACHINE_CONFIG_END
@@ -5264,6 +5403,8 @@ static MACHINE_CONFIG_DERIVED( phc70fd, msx2p )
MCFG_MSX_LAYOUT(phc70fd)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
MACHINE_CONFIG_END
@@ -5300,6 +5441,8 @@ static MACHINE_CONFIG_DERIVED( phc70fd2, msx2p )
MCFG_MSX_LAYOUT(phc70fd2)
// AY8910/YM2149?
// FDC: tc8566af, 2 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_2_35_dd_drive )
// 2 Cartridge slots
// FM built-in
MACHINE_CONFIG_END
@@ -5338,6 +5481,8 @@ static MACHINE_CONFIG_DERIVED( hbf1xdj, msx2p )
MCFG_MSX_LAYOUT(hbf1xdj)
// YM2149 (in S-1985 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
// S-1985 MSX Engine
@@ -5377,6 +5522,8 @@ static MACHINE_CONFIG_DERIVED( hbf1xv, msx2p )
MCFG_MSX_LAYOUT(hbf1xv)
// YM2149 (in S-1985 MSX Engine)
// FDC: wd2793, 1 3.5" DSDD drives
+ MCFG_FRAGMENT_ADD( msx_wd2793 )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
// S-1985 MSX Engine
@@ -5440,6 +5587,8 @@ static MACHINE_CONFIG_DERIVED( fsa1gt, msx2 )
MCFG_MSX_LAYOUT(fsa1gt)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
// MIDI
@@ -5476,6 +5625,8 @@ static MACHINE_CONFIG_DERIVED( fsa1st, msx2 )
MCFG_MSX_LAYOUT(fsa1st)
// AY8910/YM2149?
// FDC: tc8566af, 1 3.5" DSDD drive
+ MCFG_FRAGMENT_ADD( msx_tc8566af )
+ MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
// 2 Cartridge slots
// FM built-in
MACHINE_CONFIG_END
diff --git a/src/mess/includes/msx.h b/src/mess/includes/msx.h
index a9d882414c3..f2a5319f94a 100644
--- a/src/mess/includes/msx.h
+++ b/src/mess/includes/msx.h
@@ -11,7 +11,6 @@
#include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "machine/rp5c01.h"
-#include "machine/wd17xx.h"
#include "machine/buffer.h"
#include "bus/centronics/ctronics.h"
#include "sound/ay8910.h"
@@ -30,6 +29,8 @@
//#include "osdepend.h"
#include "hashfile.h"
#include "includes/msx_slot.h"
+#include "machine/wd_fdc.h"
+#include "imagedev/floppy.h"
#define MSX_MAX_CARTS (2)
@@ -53,7 +54,10 @@ public:
m_k051649(*this, "k051649"),
m_dac(*this, "dac"),
m_rtc(*this, TC8521_TAG),
- m_wd179x(*this, "wd179x"),
+ m_fdc(*this, "fdc"),
+ m_floppy0(*this, "fdc:0"),
+ m_floppy1(*this, "fdc:1"),
+ m_floppy(NULL),
m_bank1(*this, "bank1"),
m_bank2(*this, "bank2"),
m_bank3(*this, "bank3"),
@@ -153,7 +157,12 @@ public:
optional_device<k051649_device> m_k051649;
required_device<dac_device> m_dac;
optional_device<rp5c01_device> m_rtc;
- optional_device<fd1793_device> m_wd179x;
+ optional_device<wd_fdc_analog_t> m_fdc;
+ optional_device<floppy_connector> m_floppy0;
+ optional_device<floppy_connector> m_floppy1;
+ floppy_image_device *m_floppy;
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+
DECLARE_READ8_MEMBER(msx_psg_port_a_r);
DECLARE_READ8_MEMBER(msx_psg_port_b_r);
DECLARE_WRITE8_MEMBER(msx_psg_port_a_w);
@@ -211,8 +220,4 @@ protected:
};
-/*----------- defined in machine/msx.c -----------*/
-
-extern const wd17xx_interface msx_wd17xx_interface;
-
#endif /* __MSX_H__ */
diff --git a/src/mess/machine/msx.c b/src/mess/machine/msx.c
index 810c7576d11..d6c6e988cb6 100644
--- a/src/mess/machine/msx.c
+++ b/src/mess/machine/msx.c
@@ -373,7 +373,7 @@ MACHINE_START_MEMBER(msx_state,msx)
MACHINE_START_MEMBER(msx_state,msx2)
{
m_port_c_old = 0xff;
- m_dsk_stat = 0x7f;
+ m_dsk_stat = 0x3f;
}
MACHINE_RESET_MEMBER(msx_state,msx)
@@ -689,28 +689,6 @@ WRITE_LINE_MEMBER( msx_state::msx_wd179x_drq_w )
m_dsk_stat |= 0x80;
}
-const wd17xx_interface msx_wd17xx_interface =
-{
- DEVCB_LINE_VCC,
- DEVCB_DRIVER_LINE_MEMBER(msx_state, msx_wd179x_intrq_w),
- DEVCB_DRIVER_LINE_MEMBER(msx_state, msx_wd179x_drq_w),
- {FLOPPY_0, FLOPPY_1, NULL, NULL}
-};
-
-LEGACY_FLOPPY_OPTIONS_START(msx)
- LEGACY_FLOPPY_OPTION(msx, "dsk", "MSX SS", basicdsk_identify_default, basicdsk_construct_default, NULL,
- HEADS([1])
- TRACKS([80])
- SECTORS([9])
- SECTOR_LENGTH([512])
- FIRST_SECTOR_ID([1]))
- LEGACY_FLOPPY_OPTION(msx, "dsk", "MSX DS", basicdsk_identify_default, basicdsk_construct_default, NULL,
- HEADS([2])
- TRACKS([80])
- SECTORS([9])
- SECTOR_LENGTH([512])
- FIRST_SECTOR_ID([1]))
-LEGACY_FLOPPY_OPTIONS_END
/*
** The PPI functions
diff --git a/src/mess/machine/msx_slot.c b/src/mess/machine/msx_slot.c
index d9f08e53068..a5ae53997a8 100644
--- a/src/mess/machine/msx_slot.c
+++ b/src/mess/machine/msx_slot.c
@@ -22,7 +22,6 @@
#include "machine/i8255.h"
#include "includes/msx_slot.h"
#include "includes/msx.h"
-#include "machine/wd17xx.h"
#include "sound/k051649.h"
#include "sound/2413intf.h"
#include "sound/dac.h"
@@ -1230,17 +1229,18 @@ MSX_SLOT_INIT(diskrom)
MSX_SLOT_RESET(diskrom)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- drvstate->m_wd179x->reset();
+ drvstate->m_fdc->soft_reset();
+ drvstate->m_fdc->dden_w(false);
}
READ8_MEMBER(msx_state::msx_diskrom_page1_r)
{
switch (offset)
{
- case 0: return m_wd179x->status_r (space, 0);
- case 1: return m_wd179x->track_r (space, 0);
- case 2: return m_wd179x->sector_r (space, 0);
- case 3: return m_wd179x->data_r (space, 0);
+ case 0: return m_fdc->status_r();
+ case 1: return m_fdc->track_r();
+ case 2: return m_fdc->sector_r();
+ case 3: return m_fdc->data_r();
case 7: return m_dsk_stat;
default:
return m_state[1]->m_mem[offset + 0x3ff8];
@@ -1254,13 +1254,13 @@ READ8_MEMBER(msx_state::msx_diskrom_page2_r)
switch (offset)
{
case 0x7f8:
- return m_wd179x->status_r (space, 0);
+ return m_fdc->status_r();
case 0x7f9:
- return m_wd179x->track_r (space, 0);
+ return m_fdc->track_r();
case 0x7fa:
- return m_wd179x->sector_r (space, 0);
+ return m_fdc->sector_r();
case 0x7fb:
- return m_wd179x->data_r (space, 0);
+ return m_fdc->data_r();
case 0x7ff:
return m_dsk_stat;
default:
@@ -1303,7 +1303,6 @@ MSX_SLOT_MAP(diskrom)
MSX_SLOT_WRITE(diskrom)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- address_space &space = drvstate->m_maincpu->space(AS_PROGRAM);
if (addr >= 0xa000 && addr < 0xc000)
{
addr -= 0x4000;
@@ -1311,23 +1310,42 @@ MSX_SLOT_WRITE(diskrom)
switch (addr)
{
case 0x7ff8:
- drvstate->m_wd179x->command_w (space, 0, val);
+ drvstate->m_fdc->cmd_w(val);
break;
case 0x7ff9:
- drvstate->m_wd179x->track_w (space, 0, val);
+ drvstate->m_fdc->track_w(val);
break;
case 0x7ffa:
- drvstate->m_wd179x->sector_w (space, 0, val);
+ drvstate->m_fdc->sector_w(val);
break;
case 0x7ffb:
- drvstate->m_wd179x->data_w (space, 0, val);
+ drvstate->m_fdc->data_w(val);
break;
case 0x7ffc:
- drvstate->m_wd179x->set_side (val & 1);
+ if (drvstate->m_floppy)
+ {
+ drvstate->m_floppy->ss_w(val & 1);
+ }
state->m_mem[0x3ffc] = val | 0xfe;
break;
case 0x7ffd:
- drvstate->m_wd179x->set_drive (val & 1);
+ switch (val & 3)
+ {
+ case 0: case 2:
+ drvstate->m_floppy = (drvstate->m_floppy0) ? drvstate->m_floppy0->get_device() : NULL;
+ break;
+ case 1:
+ drvstate->m_floppy = (drvstate->m_floppy1) ? drvstate->m_floppy1->get_device() : NULL;
+ break;
+ default:
+ drvstate->m_floppy = NULL;
+ }
+ if (drvstate->m_floppy)
+ {
+ drvstate->m_floppy->mon_w((val & 0x80) ? 0 : 1);
+ drvstate->m_floppy->ss_w(state->m_mem[0x3ffc] & 1);
+ }
+ drvstate->m_fdc->set_floppy(drvstate->m_floppy);
if ((state->m_mem[0x3ffd] ^ val) & 0x40)
{
set_led_status (machine, 0, !(val & 0x40));
@@ -1355,17 +1373,17 @@ MSX_SLOT_INIT(diskrom2)
MSX_SLOT_RESET(diskrom2)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- drvstate->m_wd179x->reset();
+ drvstate->m_fdc->reset();
}
READ8_MEMBER(msx_state::msx_diskrom2_page1_r)
{
switch (offset)
{
- case 0: return m_wd179x->status_r(space, 0);
- case 1: return m_wd179x->track_r(space, 0);
- case 2: return m_wd179x->sector_r(space, 0);
- case 3: return m_wd179x->data_r(space, 0);
+ case 0: return m_fdc->status_r();
+ case 1: return m_fdc->track_r();
+ case 2: return m_fdc->sector_r();
+ case 3: return m_fdc->data_r();
case 4: return m_dsk_stat;
default:
return m_state[1]->m_mem[offset + 0x3ff8];
@@ -1379,13 +1397,13 @@ READ8_MEMBER(msx_state::msx_diskrom2_page2_r)
switch (offset)
{
case 0x7b8:
- return m_wd179x->status_r (space, 0);
+ return m_fdc->status_r();
case 0x7b9:
- return m_wd179x->track_r (space, 0);
+ return m_fdc->track_r();
case 0x7ba:
- return m_wd179x->sector_r (space, 0);
+ return m_fdc->sector_r();
case 0x7bb:
- return m_wd179x->data_r (space, 0);
+ return m_fdc->data_r();
case 0x7bc:
return m_dsk_stat;
default:
@@ -1427,7 +1445,6 @@ MSX_SLOT_MAP(diskrom2)
MSX_SLOT_WRITE(diskrom2)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- address_space &space = drvstate->m_maincpu->space(AS_PROGRAM);
if (addr >= 0xa000 && addr < 0xc000)
{
addr -= 0x4000;
@@ -1435,21 +1452,35 @@ MSX_SLOT_WRITE(diskrom2)
switch (addr)
{
case 0x7fb8:
- drvstate->m_wd179x->command_w (space, 0, val);
+ drvstate->m_fdc->cmd_w(val);
break;
case 0x7fb9:
- drvstate->m_wd179x->track_w (space, 0, val);
+ drvstate->m_fdc->track_w(val);
break;
case 0x7fba:
- drvstate->m_wd179x->sector_w (space, 0, val);
+ drvstate->m_fdc->sector_w(val);
break;
case 0x7fbb:
- drvstate->m_wd179x->data_w (space, 0, val);
+ drvstate->m_fdc->data_w(val);
break;
case 0x7fbc:
- drvstate->m_wd179x->set_side (val & 1);
+ switch(val & 3)
+ {
+ case 1:
+ drvstate->m_floppy = (drvstate->m_floppy0) ? drvstate->m_floppy0->get_device() : NULL;
+ break;
+ case 2:
+ drvstate->m_floppy = (drvstate->m_floppy1) ? drvstate->m_floppy1->get_device() : NULL;
+ break;
+ default:
+ drvstate->m_floppy = NULL;
+ }
+ if (drvstate->m_floppy) {
+ drvstate->m_floppy->ss_w((val & 4) ? 1 : 0);
+ drvstate->m_floppy->mon_w((val & 8) ? 0 : 1);
+ }
state->m_mem[0x3fbc] = val | 0xfe;
- drvstate->m_wd179x->set_drive (val & 1);
+ drvstate->m_fdc->set_floppy(drvstate->m_floppy);
if ((state->m_mem[0x3fbc] ^ val) & 0x40)
{
set_led_status (machine, 0, !(val & 0x40));