diff options
-rw-r--r-- | src/lib/formats/msx_dsk.c | 51 | ||||
-rw-r--r-- | src/lib/formats/msx_dsk.h | 21 | ||||
-rw-r--r-- | src/mess/drivers/msx.c | 209 | ||||
-rw-r--r-- | src/mess/includes/msx.h | 19 | ||||
-rw-r--r-- | src/mess/machine/msx.c | 24 | ||||
-rw-r--r-- | src/mess/machine/msx_slot.c | 97 |
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)); |