diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/formats/smx_dsk.c | 10 | ||||
-rw-r--r-- | src/mess/drivers/orion.c | 65 | ||||
-rw-r--r-- | src/mess/includes/orion.h | 9 | ||||
-rw-r--r-- | src/mess/machine/orion.c | 52 |
4 files changed, 61 insertions, 75 deletions
diff --git a/src/lib/formats/smx_dsk.c b/src/lib/formats/smx_dsk.c index 98057aef107..ecb1370b506 100644 --- a/src/lib/formats/smx_dsk.c +++ b/src/lib/formats/smx_dsk.c @@ -53,21 +53,25 @@ const char *smx_format::name() const const char *smx_format::description() const { - return "Specialist MX disk image"; + return "Specialist MX/Orion/B2M disk image"; } const char *smx_format::extensions() const { - return "odi,cpm"; + return "odi,cpm,img"; } // Unverified gap sizes const smx_format::format smx_format::formats[] = { - { // 720K 5.25 inch + { // Specialist MX/Orion/B2M disk image floppy_image::FF_525, floppy_image::DSQD, 2000, 5, 80, 2, 1024, {}, 1, {}, 100, 22, 20 }, + { // Lucksian Key Orion disk image + floppy_image::FF_525, floppy_image::DSQD, + 2000, 9, 80, 2, 512, {}, 1, {}, 100, 22, 20 + }, {} }; diff --git a/src/mess/drivers/orion.c b/src/mess/drivers/orion.c index daea6f441b6..23e64391177 100644 --- a/src/mess/drivers/orion.c +++ b/src/mess/drivers/orion.c @@ -15,11 +15,9 @@ #include "sound/speaker.h" #include "sound/wave.h" #include "machine/mc146818.h" -#include "machine/wd17xx.h" -#include "imagedev/flopdrv.h" -#include "formats/basicdsk.h" #include "imagedev/cassette.h" #include "imagedev/cartslot.h" +#include "formats/smx_dsk.h" #include "formats/rk_cas.h" #include "includes/orion.h" #include "machine/ram.h" @@ -87,41 +85,13 @@ static const cassette_interface orion_cassette_interface = NULL }; -static LEGACY_FLOPPY_OPTIONS_START(orion) - LEGACY_FLOPPY_OPTION(orion, "odi,img", "Orion disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([2]) - TRACKS([80]) - SECTORS([5]) - SECTOR_LENGTH([1024]) - FIRST_SECTOR_ID([1])) - LEGACY_FLOPPY_OPTION(orion_lk, "odi,img", "Lucksian Key Orion disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([2]) - TRACKS([80]) - SECTORS([9]) - SECTOR_LENGTH([512]) - FIRST_SECTOR_ID([1])) -LEGACY_FLOPPY_OPTIONS_END - -static const wd17xx_interface orion_wd17xx_interface = -{ - DEVCB_LINE_VCC, - DEVCB_NULL, - DEVCB_NULL, - { FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3 } -}; +FLOPPY_FORMATS_MEMBER( orion_state::orion_floppy_formats ) + FLOPPY_SMX_FORMAT +FLOPPY_FORMATS_END -static const floppy_interface orion_floppy_interface = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - FLOPPY_STANDARD_5_25_DSHD, - LEGACY_FLOPPY_OPTIONS_NAME(orion), - NULL, - NULL -}; +static SLOT_INTERFACE_START( orion_floppies ) + SLOT_INTERFACE( "525qd", FLOPPY_525_QD ) +SLOT_INTERFACE_END /* Machine driver */ static MACHINE_CONFIG_START( orion128, orion_state ) @@ -155,9 +125,12 @@ static MACHINE_CONFIG_START( orion128, orion_state ) MCFG_CASSETTE_ADD( CASSETTE_TAG, orion_cassette_interface ) - MCFG_FD1793_ADD("wd1793", orion_wd17xx_interface ) + MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8) - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(orion_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD("fd0", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd1", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd2", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd3", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) MCFG_CARTSLOT_ADD("cart") @@ -218,9 +191,12 @@ static MACHINE_CONFIG_START( orionz80, orion_state ) MCFG_CASSETTE_ADD( CASSETTE_TAG, orion_cassette_interface ) - MCFG_FD1793_ADD("wd1793", orion_wd17xx_interface ) + MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8) - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(orion_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD("fd0", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd1", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd2", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd3", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) MCFG_CARTSLOT_ADD("cart") @@ -271,9 +247,12 @@ static MACHINE_CONFIG_START( orionpro, orion_state ) MCFG_CASSETTE_ADD( CASSETTE_TAG, orion_cassette_interface ) - MCFG_FD1793_ADD("wd1793", orion_wd17xx_interface ) + MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8) - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(orion_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD("fd0", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd1", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd2", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fd3", orion_floppies, "525qd", 0, orion_state::orion_floppy_formats) MCFG_CARTSLOT_ADD("cart") diff --git a/src/mess/includes/orion.h b/src/mess/includes/orion.h index bd90f177f7c..98f48791c14 100644 --- a/src/mess/includes/orion.h +++ b/src/mess/includes/orion.h @@ -7,6 +7,7 @@ #ifndef ORION_H_ #define ORION_H_ +#include "machine/wd_fdc.h" #include "includes/radio86.h" #include "machine/i8255.h" @@ -14,7 +15,9 @@ class orion_state : public radio86_state { public: orion_state(const machine_config &mconfig, device_type type, const char *tag) - : radio86_state(mconfig, type, tag) { } + : radio86_state(mconfig, type, tag), + m_fdc(*this, "fd1793") + { } UINT8 m_orion128_video_mode; UINT8 m_orion128_video_page; @@ -34,6 +37,9 @@ public: UINT8 m_orionpro_128_page; UINT8 m_orionpro_rom2_segment; UINT8 m_orionpro_dispatcher; + + required_device<fd1793_t> m_fdc; + DECLARE_READ8_MEMBER(orion128_system_r); DECLARE_WRITE8_MEMBER(orion128_system_w); DECLARE_READ8_MEMBER(orion128_romdisk_r); @@ -67,6 +73,7 @@ public: DECLARE_READ8_MEMBER(orion_romdisk_porta_r); DECLARE_WRITE8_MEMBER(orion_romdisk_portb_w); DECLARE_WRITE8_MEMBER(orion_romdisk_portc_w); + DECLARE_FLOPPY_FORMATS( orion_floppy_formats ); }; /*----------- defined in machine/orion.c -----------*/ diff --git a/src/mess/machine/orion.c b/src/mess/machine/orion.c index 3405c0fd298..8b45ab024f0 100644 --- a/src/mess/machine/orion.c +++ b/src/mess/machine/orion.c @@ -12,7 +12,6 @@ #include "cpu/i8085/i8085.h" #include "imagedev/cassette.h" #include "machine/mc146818.h" -#include "machine/wd17xx.h" #include "sound/speaker.h" #include "sound/ay8910.h" #include "includes/orion.h" @@ -165,44 +164,45 @@ MACHINE_RESET_MEMBER(orion_state,orion128) WRITE8_MEMBER(orion_state::orion_disk_control_w) { - device_t *fdc = machine().device("wd1793"); + static const char *names[] = { "fd0", "fd1", "fd2", "fd3"}; + floppy_image_device *floppy = NULL; + floppy_connector *con = machine().device<floppy_connector>(names[data & 3]); + if(con) + floppy = con->get_device(); - wd17xx_set_side(fdc,((data & 0x10) >> 4) ^ 1); - wd17xx_set_drive(fdc,data & 3); + m_fdc->set_floppy(floppy); + floppy->mon_w(0); + floppy->ss_w(((data & 0x10) >> 4) ^ 1); } READ8_MEMBER(orion_state::orion128_floppy_r) { - device_t *fdc = machine().device("wd1793"); - switch(offset) { case 0x0 : - case 0x10 : return wd17xx_status_r(fdc,space, 0); + case 0x10 : return m_fdc->status_r(space, 0); case 0x1 : - case 0x11 : return wd17xx_track_r(fdc,space, 0); + case 0x11 : return m_fdc->track_r(space, 0); case 0x2 : - case 0x12 : return wd17xx_sector_r(fdc,space, 0); + case 0x12 : return m_fdc->sector_r(space, 0); case 0x3 : - case 0x13 : return wd17xx_data_r(fdc,space, 0); + case 0x13 : return m_fdc->data_r(space, 0); } return 0xff; } WRITE8_MEMBER(orion_state::orion128_floppy_w) { - device_t *fdc = machine().device("wd1793"); - switch(offset) { case 0x0 : - case 0x10 : wd17xx_command_w(fdc,space, 0,data); break; + case 0x10 : m_fdc->cmd_w(space, 0,data); break; case 0x1 : - case 0x11 : wd17xx_track_w(fdc,space, 0,data);break; + case 0x11 : m_fdc->track_w(space, 0,data);break; case 0x2 : - case 0x12 : wd17xx_sector_w(fdc,space, 0,data);break; + case 0x12 : m_fdc->sector_w(space, 0,data);break; case 0x3 : - case 0x13 : wd17xx_data_w(fdc,space, 0,data);break; + case 0x13 : m_fdc->data_w(space, 0,data);break; case 0x4 : case 0x14 : case 0x20 : orion_disk_control_w(space, offset, data);break; @@ -541,8 +541,6 @@ MACHINE_RESET_MEMBER(orion_state,orionpro) READ8_MEMBER(orion_state::orionpro_io_r) { - device_t *fdc = machine().device("wd1793"); - switch (offset & 0xff) { case 0x00 : return 0x56; @@ -552,10 +550,10 @@ READ8_MEMBER(orion_state::orionpro_io_r) case 0x08 : return m_orionpro_page; case 0x09 : return m_orionpro_rom2_segment; case 0x0a : return m_orionpro_dispatcher; - case 0x10 : return wd17xx_status_r(fdc,space, 0); - case 0x11 : return wd17xx_track_r(fdc,space, 0); - case 0x12 : return wd17xx_sector_r(fdc,space, 0); - case 0x13 : return wd17xx_data_r(fdc,space, 0); + case 0x10 : return m_fdc->status_r(space, 0); + case 0x11 : return m_fdc->track_r(space, 0); + case 0x12 : return m_fdc->sector_r(space, 0); + case 0x13 : return m_fdc->data_r(space, 0); case 0x18 : case 0x19 : case 0x1a : @@ -575,8 +573,6 @@ READ8_MEMBER(orion_state::orionpro_io_r) WRITE8_MEMBER(orion_state::orionpro_io_w) { - device_t *fdc = machine().device("wd1793"); - switch (offset & 0xff) { case 0x04 : m_orionpro_ram0_segment = data; orionpro_bank_switch(machine()); break; @@ -585,10 +581,10 @@ WRITE8_MEMBER(orion_state::orionpro_io_w) case 0x08 : m_orionpro_page = data; orionpro_bank_switch(machine()); break; case 0x09 : m_orionpro_rom2_segment = data; orionpro_bank_switch(machine()); break; case 0x0a : m_orionpro_dispatcher = data; orionpro_bank_switch(machine()); break; - case 0x10 : wd17xx_command_w(fdc,space, 0,data); break; - case 0x11 : wd17xx_track_w(fdc,space, 0,data);break; - case 0x12 : wd17xx_sector_w(fdc,space, 0,data);break; - case 0x13 : wd17xx_data_w(fdc,space, 0,data);break; + case 0x10 : m_fdc->cmd_w(space, 0,data); break; + case 0x11 : m_fdc->track_w(space, 0,data);break; + case 0x12 : m_fdc->sector_w(space, 0,data);break; + case 0x13 : m_fdc->data_w(space, 0,data);break; case 0x14 : orion_disk_control_w(space, 9, data);break; case 0x18 : case 0x19 : |