From af3f2242cd532f20e93eaa4a8259a40ec7ff98ce Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Sat, 10 Aug 2013 11:20:58 +0000 Subject: [PATCH] apricotf.c: updated to use the new wd17xx --- src/mess/drivers/apricotf.c | 59 +++++++++++++++++------------------- src/mess/includes/apricotf.h | 15 ++++++--- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/src/mess/drivers/apricotf.c b/src/mess/drivers/apricotf.c index b89959f7487..304e71a74d8 100644 --- a/src/mess/drivers/apricotf.c +++ b/src/mess/drivers/apricotf.c @@ -122,14 +122,15 @@ WRITE8_MEMBER( f1_state::system_w ) break; case 1: // drive select - wd17xx_set_drive(m_fdc, !BIT(data, 0)); + m_fdc->set_floppy(BIT(data, 0) ? m_floppy0->get_device() : m_floppy1->get_device()); break; case 3: // drive head load break; case 5: // drive motor on - floppy_mon_w(m_floppy0, !BIT(data, 0)); + m_floppy0->get_device()->mon_w(!BIT(data, 0)); + m_floppy1->get_device()->mon_w(!BIT(data, 0)); break; case 7: // video lines (1=200, 0=256) @@ -153,6 +154,13 @@ WRITE8_MEMBER( f1_state::system_w ) } +void f1_state::machine_start() +{ + m_fdc->setup_intrq_cb(wd2793_t::line_cb(FUNC(f1_state::wd2797_intrq_w), this)); + m_fdc->setup_drq_cb(wd2793_t::line_cb(FUNC(f1_state::wd2797_drq_w), this)); +} + + //************************************************************************** // ADDRESS MAPS @@ -182,7 +190,7 @@ static ADDRESS_MAP_START( act_f1_io, AS_IO, 16, f1_state ) AM_RANGE(0x0010, 0x0017) AM_DEVREADWRITE8(Z80CTC_TAG, z80ctc_device, read, write, 0x00ff) AM_RANGE(0x0020, 0x0027) AM_DEVREADWRITE8(Z80SIO2_TAG, z80sio2_device, ba_cd_r, ba_cd_w, 0x00ff) // AM_RANGE(0x0030, 0x0031) AM_WRITE8(ctc_ack_w, 0x00ff) - AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8_LEGACY(WD2797_TAG, wd17xx_r, wd17xx_w, 0x00ff) + AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8(WD2797_TAG, wd2797_t, read, write, 0x00ff) // AM_RANGE(0x01e0, 0x01ff) winchester ADDRESS_MAP_END @@ -280,38 +288,22 @@ static Z80CTC_INTERFACE( ctc_intf ) //------------------------------------------------- -// wd17xx_interface fdc_intf +// floppy //------------------------------------------------- -static LEGACY_FLOPPY_OPTIONS_START( act ) - LEGACY_FLOPPY_OPTION( img2hd, "dsk", "2HD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([2]) - TRACKS([80]) - SECTORS([16]) - SECTOR_LENGTH([256]) - FIRST_SECTOR_ID([1])) -LEGACY_FLOPPY_OPTIONS_END - -static const floppy_interface act_floppy_interface = +void f1_state::wd2797_intrq_w(bool state) { - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - FLOPPY_STANDARD_3_5_DSDD, // Sony OA-D32W - LEGACY_FLOPPY_OPTIONS_NAME(act), - "floppy_3_5", - NULL -}; + m_maincpu->set_input_line(INPUT_LINE_NMI, state);} -static const wd17xx_interface fdc_intf = +void f1_state::wd2797_drq_w(bool state) { - DEVCB_NULL, - DEVCB_CPU_INPUT_LINE(I8086_TAG, INPUT_LINE_NMI), - DEVCB_CPU_INPUT_LINE(I8086_TAG, INPUT_LINE_TEST), // TODO inverted? - { FLOPPY_0, NULL, NULL, NULL } -}; + m_maincpu->set_input_line(INPUT_LINE_TEST, state); +} + +static SLOT_INTERFACE_START( apricotf_floppies ) + SLOT_INTERFACE( "d31v", SONY_OA_D31V ) + SLOT_INTERFACE( "d32w", SONY_OA_D32W ) +SLOT_INTERFACE_END //------------------------------------------------- @@ -355,9 +347,12 @@ static MACHINE_CONFIG_START( act_f1, f1_state ) MCFG_APRICOT_KEYBOARD_ADD(kb_intf) MCFG_Z80SIO2_ADD(Z80SIO2_TAG, 2500000, sio_intf) MCFG_Z80CTC_ADD(Z80CTC_TAG, 2500000, ctc_intf) - MCFG_WD2797_ADD(WD2797_TAG, fdc_intf) - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(act_floppy_interface) MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf) + + // floppy + MCFG_WD2797x_ADD(WD2797_TAG, XTAL_4MHz / 2 /* ? */) + MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":0", apricotf_floppies, "d32w", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":1", apricotf_floppies, "d32w", floppy_image_device::default_floppy_formats) MACHINE_CONFIG_END diff --git a/src/mess/includes/apricotf.h b/src/mess/includes/apricotf.h index 6a8ef9c4edd..d9c8c312b79 100644 --- a/src/mess/includes/apricotf.h +++ b/src/mess/includes/apricotf.h @@ -11,7 +11,7 @@ #include "imagedev/flopdrv.h" #include "machine/apricotkb.h" #include "machine/ctronics.h" -#include "machine/wd17xx.h" +#include "machine/wd_fdc.h" #include "machine/z80ctc.h" #include "machine/z80dart.h" #include "rendlay.h" @@ -46,7 +46,8 @@ public: m_ctc(*this, Z80CTC_TAG), m_sio(*this, Z80SIO2_TAG), m_fdc(*this, WD2797_TAG), - m_floppy0(*this, FLOPPY_0), + m_floppy0(*this, WD2797_TAG ":0"), + m_floppy1(*this, WD2797_TAG ":1"), m_centronics(*this, CENTRONICS_TAG), m_ctc_int(CLEAR_LINE), m_sio_int(CLEAR_LINE), @@ -54,11 +55,14 @@ public: m_p_paletteram(*this, "p_paletteram") { } + virtual void machine_start(); + required_device m_maincpu; required_device m_ctc; required_device m_sio; - required_device m_fdc; - required_device m_floppy0; + required_device m_fdc; + required_device m_floppy0; + required_device m_floppy1; required_device m_centronics; int m_ctc_int; int m_sio_int; @@ -75,6 +79,9 @@ public: DECLARE_WRITE_LINE_MEMBER( ctc_z1_w ); DECLARE_WRITE_LINE_MEMBER( ctc_z2_w ); + void wd2797_intrq_w(bool state); + void wd2797_drq_w(bool state); + int m_40_80; int m_200_256; };