diff options
author | cracyc <cracyc@users.noreply.github.com> | 2015-09-28 16:14:53 -0500 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2015-09-28 16:14:53 -0500 |
commit | c400248728c831b2bcdca3382780a07422d025e5 (patch) | |
tree | 643a7dd57cb35bbae0d11896255838f940e6433d /src/mess | |
parent | f73fe4cda85b04102f5b834b793eb61df5250e19 (diff) |
i8271: modernize [Carl]
Diffstat (limited to 'src/mess')
-rw-r--r-- | src/mess/drivers/atom.c | 43 | ||||
-rw-r--r-- | src/mess/drivers/bbc.c | 21 | ||||
-rw-r--r-- | src/mess/drivers/imds2.c | 48 | ||||
-rw-r--r-- | src/mess/includes/atom.h | 6 | ||||
-rw-r--r-- | src/mess/includes/bbc.h | 1 | ||||
-rw-r--r-- | src/mess/includes/imds2.h | 5 | ||||
-rw-r--r-- | src/mess/machine/bbc.c | 6 |
7 files changed, 68 insertions, 62 deletions
diff --git a/src/mess/drivers/atom.c b/src/mess/drivers/atom.c index 88d142d15c4..9403c7c62e5 100644 --- a/src/mess/drivers/atom.c +++ b/src/mess/drivers/atom.c @@ -247,7 +247,7 @@ READ8_MEMBER( atomeb_state::dos_r ) static ADDRESS_MAP_START( atom_mem, AS_PROGRAM, 8, atom_state ) AM_RANGE(0x0000, 0x09ff) AM_RAM - AM_RANGE(0x0a00, 0x0a03) AM_MIRROR(0x1f8) AM_DEVREADWRITE(I8271_TAG, i8271_device, read, write) + AM_RANGE(0x0a00, 0x0a03) AM_MIRROR(0x1f8) AM_DEVICE(I8271_TAG, i8271_device, map) AM_RANGE(0x0a04, 0x0a04) AM_MIRROR(0x1f8) AM_DEVREADWRITE(I8271_TAG, i8271_device, data_r, data_w) AM_RANGE(0x0a05, 0x7fff) AM_RAM AM_RANGE(0x8000, 0x97ff) AM_RAM AM_SHARE("video_ram") @@ -583,30 +583,11 @@ WRITE_LINE_MEMBER( atom_state::atom_8271_interrupt_callback ) m_previous_i8271_int_state = state; } -/*------------------------------------------------- - LEGACY_FLOPPY_OPTIONS( atom ) --------------------------------------------------*/ - -static LEGACY_FLOPPY_OPTIONS_START( atom ) - LEGACY_FLOPPY_OPTION(atom, "dsk,40t", "Atom disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([1]) - TRACKS([40]) - SECTORS([10]) - SECTOR_LENGTH([256]) - FIRST_SECTOR_ID([0])) -LEGACY_FLOPPY_OPTIONS_END - -/*------------------------------------------------- - floppy_interface atom_floppy_interface --------------------------------------------------*/ - -static const floppy_interface atom_floppy_interface = +WRITE_LINE_MEMBER( atom_state::motor_w ) { - FLOPPY_STANDARD_5_25_SSDD_40, - LEGACY_FLOPPY_OPTIONS_NAME(atom), - "floppy_5_25" -}; - + m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(!state); + m_fdc->subdevice<floppy_connector>("1")->get_device()->mon_w(!state); +} TIMER_DEVICE_CALLBACK_MEMBER(atom_state::cassette_output_tick) { @@ -687,6 +668,13 @@ int atom_state::load_cart(device_image_interface &image, generic_slot_device *sl return IMAGE_INIT_PASS; } +static SLOT_INTERFACE_START(atom_floppies) + SLOT_INTERFACE("525sssd", FLOPPY_525_SSSD) +SLOT_INTERFACE_END + +FLOPPY_FORMATS_MEMBER(atom_state::floppy_formats) + FLOPPY_ATOM_FORMAT +FLOPPY_FORMATS_END /*------------------------------------------------- MACHINE_DRIVER( atom ) @@ -722,10 +710,11 @@ static MACHINE_CONFIG_START( atom, atom_state ) MCFG_I8255_IN_PORTC_CB(READ8(atom_state, ppi_pc_r)) MCFG_I8255_OUT_PORTC_CB(WRITE8(atom_state, ppi_pc_w)) - MCFG_DEVICE_ADD(I8271_TAG, I8271, 0) + MCFG_DEVICE_ADD(I8271_TAG, I8271 , 0) MCFG_I8271_IRQ_CALLBACK(WRITELINE(atom_state, atom_8271_interrupt_callback)) - MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1) - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(atom_floppy_interface) + MCFG_I8271_HDL_CALLBACK(WRITELINE(atom_state, motor_w)) + MCFG_FLOPPY_DRIVE_ADD(I8271_TAG ":0", atom_floppies, "525sssd", atom_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(I8271_TAG ":1", atom_floppies, "525sssd", atom_state::floppy_formats) MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer") MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1)) diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c index 8c6815c3eb7..437e6545cb1 100644 --- a/src/mess/drivers/bbc.c +++ b/src/mess/drivers/bbc.c @@ -194,8 +194,8 @@ static ADDRESS_MAP_START( bbcb_mem, AS_PROGRAM, 8, bbc_state ) AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ /* W: fe30-fe3f 84LS161 Paged ROM selector */ - AM_RANGE(0xfe80, 0xfe83) AM_DEVREADWRITE("i8271", i8271_device, read, write) /* fe80-fe9f 8271 FDC Floppy disc controller */ - AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, dack_r, dack_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ + AM_RANGE(0xfe80, 0xfe83) AM_DEVICE("i8271" , i8271_device, map) /* fe80-fe9f 8271 FDC Floppy disc controller */ + AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, data_r, data_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END @@ -635,13 +635,6 @@ WRITE_LINE_MEMBER(bbc_state::bbcb_acia6850_irq_w) } -static const floppy_interface bbc_floppy_interface = -{ - FLOPPY_STANDARD_5_25_DSDD, - LEGACY_FLOPPY_OPTIONS_NAME(bbc), - "floppy_5_25" -}; - FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_525sd ) FLOPPY_BBC_SSD_525_FORMAT, FLOPPY_BBC_DSD_525_FORMAT @@ -824,11 +817,11 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* fdc */ - MCFG_DEVICE_ADD("i8271", I8271, 0) + MCFG_DEVICE_ADD("i8271" , I8271 , 0) MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, bbc_i8271_interrupt)) - MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1) - - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface) + MCFG_I8271_HDL_CALLBACK(WRITELINE(bbc_state, motor_w)) + MCFG_FLOPPY_DRIVE_ADD("i8271:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_525sd) + MCFG_FLOPPY_DRIVE_ADD("i8271:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_525sd) /* software lists */ MCFG_DEVICE_REMOVE("cass_ls_a") @@ -844,8 +837,6 @@ static MACHINE_CONFIG_DERIVED(bbcb1770, bbcb) /* fdc */ MCFG_DEVICE_REMOVE("i8271") - MCFG_DEVICE_REMOVE(FLOPPY_0) - MCFG_DEVICE_REMOVE(FLOPPY_1) MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) diff --git a/src/mess/drivers/imds2.c b/src/mess/drivers/imds2.c index 4db7ffd7555..aae8a4506f7 100644 --- a/src/mess/drivers/imds2.c +++ b/src/mess/drivers/imds2.c @@ -140,7 +140,7 @@ static ADDRESS_MAP_START(ioc_io_map , AS_IO , 8 , imds2_state) AM_RANGE(0x90 , 0x9f) AM_READ(imds2_kb_read) AM_RANGE(0xa0 , 0xaf) AM_READ(imds2_ioc_status_r) AM_RANGE(0xb0 , 0xbf) AM_READ(imds2_ioc_dbbin_r) - AM_RANGE(0xc0 , 0xcf) AM_DEVREADWRITE("iocfdc" , i8271_device , read , write) + AM_RANGE(0xc0 , 0xcf) AM_DEVICE("iocfdc" , i8271_device, map) AM_RANGE(0xd0 , 0xdf) AM_DEVREADWRITE("ioccrtc" , i8275_device , read , write) AM_RANGE(0xe0 , 0xef) AM_DEVREADWRITE("ioctimer" , pit8253_device , read , write); // DMA controller range doesn't extend to 0xff because register 0xfd needs to be read as 0xff @@ -171,11 +171,12 @@ imds2_state::imds2_state(const machine_config &mconfig, device_type type, const m_iocbeep(*this , "iocbeep"), m_ioctimer(*this , "ioctimer"), m_iocfdc(*this , "iocfdc"), + m_flop0(*this, "iocfdc:0"), + m_flop1(*this, "iocfdc:1"), m_iocpio(*this , "iocpio"), m_kbcpu(*this , "kbcpu"), m_palette(*this , "palette"), m_gfxdecode(*this, "gfxdecode"), - m_floppy0(*this , FLOPPY_0), m_centronics(*this , "centronics"), m_io_key0(*this , "KEY0"), m_io_key1(*this , "KEY1"), @@ -551,6 +552,17 @@ I8275_DRAW_CHARACTER_MEMBER(imds2_state::crtc_display_pixels) } } +int imds2_state::floppy_load(floppy_image_device *dev) +{ + dev->mon_w(0); + return IMAGE_INIT_PASS; +} + +void imds2_state::floppy_unload(floppy_image_device *dev) +{ + dev->mon_w(1); +} + void imds2_state::driver_start() { // Allocate 64k for IPC RAM @@ -566,8 +578,11 @@ void imds2_state::driver_start() void imds2_state::machine_start() { - m_floppy0->floppy_mon_w(0); - m_floppy0->floppy_drive_set_ready_state(1 , 0); + // As far as I can tell from the schmatic, there's no software motor control + m_flop0->get_device()->setup_load_cb(floppy_image_device::load_cb(FUNC(imds2_state::floppy_load), this)); + m_flop0->get_device()->setup_unload_cb(floppy_image_device::unload_cb(FUNC(imds2_state::floppy_unload), this)); + m_flop1->get_device()->setup_load_cb(floppy_image_device::load_cb(FUNC(imds2_state::floppy_load), this)); + m_flop1->get_device()->setup_unload_cb(floppy_image_device::unload_cb(FUNC(imds2_state::floppy_unload), this)); } void imds2_state::video_start() @@ -580,6 +595,10 @@ void imds2_state::machine_reset() m_iocbeep->set_frequency(IOC_BEEP_FREQ); m_ipc_control = 0x00; m_ipc_ioc_status = 0x0f; + m_flop0->get_device()->mon_w(!m_flop0->get_device()->exists()); + m_flop1->get_device()->mon_w(!m_flop1->get_device()->exists()); + + m_iocfdc->set_rate(500000); // The IMD images show a rate of 500kbps } bool imds2_state::imds2_in_ipc_rom(offs_t offset) const @@ -737,15 +756,9 @@ static GFXDECODE_START(imds2) GFXDECODE_ENTRY("gfx1" , 0x0000 , imds2_charlayout , 0 , 1) GFXDECODE_END -static LEGACY_FLOPPY_OPTIONS_START(imds2) -LEGACY_FLOPPY_OPTIONS_END - -static const floppy_interface imds2_floppy_interface = -{ - FLOPPY_STANDARD_8_SSSD, - LEGACY_FLOPPY_OPTIONS_NAME(imds2), - "floppy_8" -}; +static SLOT_INTERFACE_START( imds2_floppies ) + SLOT_INTERFACE( "8sssd", FLOPPY_8_SSSD ) +SLOT_INTERFACE_END static MACHINE_CONFIG_START(imds2 , imds2_state) MCFG_CPU_ADD("ipccpu" , I8085A , IPC_XTAL_Y2 / 2) // 4 MHz @@ -805,8 +818,8 @@ static MACHINE_CONFIG_START(imds2 , imds2_state) MCFG_I8257_OUT_HRQ_CB(WRITELINE(imds2_state, imds2_hrq_w)) MCFG_I8257_IN_MEMR_CB(READ8(imds2_state , imds2_ioc_mem_r)) MCFG_I8257_OUT_MEMW_CB(WRITE8(imds2_state , imds2_ioc_mem_w)) - MCFG_I8257_IN_IOR_1_CB(DEVREAD8("iocfdc" , i8271_device , dack_r)) - MCFG_I8257_OUT_IOW_1_CB(DEVWRITE8("iocfdc" , i8271_device , dack_w)) + MCFG_I8257_IN_IOR_1_CB(DEVREAD8("iocfdc" , i8271_device , data_r)) + MCFG_I8257_OUT_IOW_1_CB(DEVWRITE8("iocfdc" , i8271_device , data_w)) MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("ioccrtc" , i8275_device , dack_w)) MCFG_DEVICE_ADD("ioctimer" , PIT8253 , 0) @@ -816,9 +829,8 @@ static MACHINE_CONFIG_START(imds2 , imds2_state) MCFG_DEVICE_ADD("iocfdc" , I8271 , IOC_XTAL_Y1 / 2) MCFG_I8271_DRQ_CALLBACK(DEVWRITELINE("iocdma" , i8257_device , dreq1_w)) - MCFG_I8271_FLOPPIES(FLOPPY_0 , FLOPPY_1) - - MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, imds2_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD("iocfdc:0", imds2_floppies, "8sssd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("iocfdc:1", imds2_floppies, "8sssd", floppy_image_device::default_floppy_formats) MCFG_CPU_ADD("iocpio" , I8041 , IOC_XTAL_Y3) MCFG_CPU_IO_MAP(pio_io_map) diff --git a/src/mess/includes/atom.h b/src/mess/includes/atom.h index 62992b67469..bd7b2427897 100644 --- a/src/mess/includes/atom.h +++ b/src/mess/includes/atom.h @@ -13,7 +13,7 @@ #include "machine/ram.h" #include "imagedev/snapquik.h" #include "formats/atom_tap.h" -#include "formats/basicdsk.h" +#include "formats/atom_dsk.h" #include "formats/uef_cas.h" #include "bus/centronics/ctronics.h" #include "machine/6522via.h" @@ -46,6 +46,7 @@ public: m_maincpu(*this, SY6502_TAG), m_vdg(*this, MC6847_TAG), m_cassette(*this, "cassette"), + m_fdc(*this, I8271_TAG), m_centronics(*this, CENTRONICS_TAG), m_speaker(*this, "speaker"), m_cart(*this, "cartslot"), @@ -67,6 +68,7 @@ public: required_device<cpu_device> m_maincpu; required_device<mc6847_base_device> m_vdg; required_device<cassette_image_device> m_cassette; + optional_device<i8271_device> m_fdc; required_device<centronics_device> m_centronics; required_device<speaker_sound_device> m_speaker; optional_device<generic_slot_device> m_cart; @@ -95,6 +97,7 @@ public: DECLARE_READ8_MEMBER( vdg_videoram_r ); DECLARE_INPUT_CHANGED_MEMBER( trigger_reset ); DECLARE_WRITE_LINE_MEMBER( atom_8271_interrupt_callback ); + DECLARE_WRITE_LINE_MEMBER( motor_w ); /* video state */ required_shared_ptr<UINT8> m_video_ram; @@ -109,6 +112,7 @@ public: /* devices */ int m_previous_i8271_int_state; + DECLARE_FLOPPY_FORMATS(floppy_formats); TIMER_DEVICE_CALLBACK_MEMBER(cassette_output_tick); int load_cart(device_image_interface &image, generic_slot_device *slot); diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h index 9f5dcb19327..5b8e56d25e5 100644 --- a/src/mess/includes/bbc.h +++ b/src/mess/includes/bbc.h @@ -167,6 +167,7 @@ public: DECLARE_WRITE_LINE_MEMBER(write_cts_serial); DECLARE_INPUT_CHANGED_MEMBER( trigger_reset ); DECLARE_WRITE_LINE_MEMBER(bbc_i8271_interrupt); + DECLARE_WRITE_LINE_MEMBER(motor_w); UPD7002_GET_ANALOGUE(BBC_get_analogue_input); UPD7002_EOC(BBC_uPD7002_EOC); diff --git a/src/mess/includes/imds2.h b/src/mess/includes/imds2.h index 2b7b20de074..298b808be82 100644 --- a/src/mess/includes/imds2.h +++ b/src/mess/includes/imds2.h @@ -79,11 +79,12 @@ class imds2_state : public driver_device required_device<beep_device> m_iocbeep; required_device<pit8253_device> m_ioctimer; required_device<i8271_device> m_iocfdc; + required_device<floppy_connector> m_flop0; + required_device<floppy_connector> m_flop1; required_device<i8041_device> m_iocpio; required_device<i8741_device> m_kbcpu; required_device<palette_device> m_palette; required_device<gfxdecode_device> m_gfxdecode; - required_device<legacy_floppy_image_device> m_floppy0; required_device<centronics_device> m_centronics; required_ioport m_io_key0; required_ioport m_io_key1; @@ -101,6 +102,8 @@ class imds2_state : public driver_device void imds2_update_beeper(void); void imds2_update_printer(void); + int floppy_load(floppy_image_device *dev); + void floppy_unload(floppy_image_device *dev); // IPC control port UINT8 m_ipc_control; diff --git a/src/mess/machine/bbc.c b/src/mess/machine/bbc.c index 88ced246f43..3ffefc8a585 100644 --- a/src/mess/machine/bbc.c +++ b/src/mess/machine/bbc.c @@ -1439,6 +1439,12 @@ WRITE_LINE_MEMBER(bbc_state::bbc_i8271_interrupt) m_previous_i8271_int_state = state; } +WRITE_LINE_MEMBER(bbc_state::motor_w) +{ + m_i8271->subdevice<floppy_connector>("0")->get_device()->mon_w(!state); + m_i8271->subdevice<floppy_connector>("1")->get_device()->mon_w(!state); +} + /************************************** WD1770 disc control function |