diff options
author | Ivan Vangelista <mesgnet@yahoo.it> | 2014-01-08 18:11:54 +0000 |
---|---|---|
committer | Ivan Vangelista <mesgnet@yahoo.it> | 2014-01-08 18:11:54 +0000 |
commit | 233a37f1b211bd71eaa2c938c17654caabc1cca1 (patch) | |
tree | 060f04774fc75ca1e8b2f288129ca9282ee19231 /src | |
parent | 4548b75d5b12eb5814004d290beb00c16221f1dc (diff) |
Modernized beta disk device. Still needs updating to modern fdc.(nw)
Diffstat (limited to 'src')
-rw-r--r-- | src/mess/drivers/atm.c | 24 | ||||
-rw-r--r-- | src/mess/drivers/pentagon.c | 24 | ||||
-rw-r--r-- | src/mess/drivers/scorpion.c | 22 | ||||
-rw-r--r-- | src/mess/machine/beta.c | 217 | ||||
-rw-r--r-- | src/mess/machine/beta.h | 45 |
5 files changed, 139 insertions, 193 deletions
diff --git a/src/mess/drivers/atm.c b/src/mess/drivers/atm.c index 1c34714e68c..c352f764bf2 100644 --- a/src/mess/drivers/atm.c +++ b/src/mess/drivers/atm.c @@ -42,7 +42,7 @@ protected: required_memory_bank m_bank2; required_memory_bank m_bank3; required_memory_bank m_bank4; - required_device<device_t> m_beta; + required_device<beta_disk_device> m_beta; private: UINT8 *m_p_ram; @@ -54,12 +54,12 @@ DIRECT_UPDATE_MEMBER(atm_state::atm_direct) { UINT16 pc = m_maincpu->state_int(STATE_GENPCBASE); - if (m_beta->started() && betadisk_is_active(m_beta)) + if (m_beta->started() && m_beta->is_active()) { if (pc >= 0x4000) { m_ROMSelection = BIT(m_port_7ffd_data, 4); - betadisk_disable(m_beta); + m_beta->disable(); m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]); } } @@ -67,7 +67,7 @@ DIRECT_UPDATE_MEMBER(atm_state::atm_direct) { m_ROMSelection = 3; if (m_beta->started()) - betadisk_enable(m_beta); + m_beta->enable(); } if(address<=0x3fff) @@ -95,7 +95,7 @@ void atm_state::atm_update_memory() m_bank4->set_base(messram + ((m_port_7ffd_data & 0x07) * 0x4000)); - if (m_beta->started() && betadisk_is_active(m_beta) && !( m_port_7ffd_data & 0x10 ) ) + if (m_beta->started() && m_beta->is_active() && !( m_port_7ffd_data & 0x10 ) ) m_ROMSelection = 3; else /* ROM switching */ @@ -120,12 +120,12 @@ WRITE8_MEMBER(atm_state::atm_port_7ffd_w) static ADDRESS_MAP_START (atm_io, AS_IO, 8, atm_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x001f, 0x001f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_status_r,betadisk_command_w) AM_MIRROR(0xff00) - AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_track_r,betadisk_track_w) AM_MIRROR(0xff00) - AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_sector_r,betadisk_sector_w) AM_MIRROR(0xff00) - AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_data_r,betadisk_data_w) AM_MIRROR(0xff00) + AM_RANGE(0x001f, 0x001f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, status_r, command_w) AM_MIRROR(0xff00) + AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, track_r, track_w) AM_MIRROR(0xff00) + AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, sector_r, sector_w) AM_MIRROR(0xff00) + AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, data_r, data_w) AM_MIRROR(0xff00) AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff) - AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_state_r, betadisk_param_w) AM_MIRROR(0xff00) + AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, state_r, param_w) AM_MIRROR(0xff00) AM_RANGE(0x4000, 0x4000) AM_WRITE(atm_port_7ffd_w) AM_MIRROR(0x3ffd) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3ffd) AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE("ay8912", ay8910_device, data_r, address_w) AM_MIRROR(0x3ffd) @@ -142,8 +142,8 @@ MACHINE_RESET_MEMBER(atm_state,atm) if (m_beta->started()) { - betadisk_enable(m_beta); - betadisk_clear_status(m_beta); + m_beta->enable(); + m_beta->clear_status(); } space.set_direct_update_handler(direct_update_delegate(FUNC(atm_state::atm_direct), this)); diff --git a/src/mess/drivers/pentagon.c b/src/mess/drivers/pentagon.c index e95abd824bf..76cfb998b5b 100644 --- a/src/mess/drivers/pentagon.c +++ b/src/mess/drivers/pentagon.c @@ -30,7 +30,7 @@ protected: required_memory_bank m_bank2; required_memory_bank m_bank3; required_memory_bank m_bank4; - required_device<device_t> m_beta; + required_device<beta_disk_device> m_beta; private: UINT8 *m_p_ram; void pentagon_update_memory(); @@ -40,10 +40,10 @@ DIRECT_UPDATE_MEMBER(pentagon_state::pentagon_direct) { UINT16 pc = m_maincpu->pcbase(); - if (m_beta->started() && betadisk_is_active(m_beta) && (pc >= 0x4000)) + if (m_beta->started() && m_beta->is_active() && (pc >= 0x4000)) { m_ROMSelection = BIT(m_port_7ffd_data, 4); - betadisk_disable(m_beta); + m_beta->disable(); m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]); } else @@ -51,7 +51,7 @@ DIRECT_UPDATE_MEMBER(pentagon_state::pentagon_direct) { m_ROMSelection = 3; if (m_beta->started()) - betadisk_enable(m_beta); + m_beta->enable(); } if (address<=0x3fff) @@ -83,7 +83,7 @@ void pentagon_state::pentagon_update_memory() m_bank4->set_base(messram + ((m_port_7ffd_data & 0x07) * 0x4000)); - if (m_beta->started() && betadisk_is_active(m_beta) && !( m_port_7ffd_data & 0x10 ) ) + if (m_beta->started() && m_beta->is_active() && !( m_port_7ffd_data & 0x10 ) ) { /* GLUK */ if (strcmp(machine().system().name, "pent1024")==0) @@ -114,12 +114,12 @@ WRITE8_MEMBER(pentagon_state::pentagon_port_7ffd_w) static ADDRESS_MAP_START (pentagon_io, AS_IO, 8, pentagon_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x001f, 0x001f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_status_r,betadisk_command_w) AM_MIRROR(0xff00) - AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_track_r,betadisk_track_w) AM_MIRROR(0xff00) - AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_sector_r,betadisk_sector_w) AM_MIRROR(0xff00) - AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_data_r,betadisk_data_w) AM_MIRROR(0xff00) + AM_RANGE(0x001f, 0x001f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, status_r, command_w) AM_MIRROR(0xff00) + AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, track_r, track_w) AM_MIRROR(0xff00) + AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, sector_r, sector_w) AM_MIRROR(0xff00) + AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, data_r, data_w) AM_MIRROR(0xff00) AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff) - AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_state_r, betadisk_param_w) AM_MIRROR(0xff00) + AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, state_r, param_w) AM_MIRROR(0xff00) AM_RANGE(0x4000, 0x4000) AM_WRITE(pentagon_port_7ffd_w) AM_MIRROR(0x3ffd) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3ffd) AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE("ay8912", ay8910_device, data_r, address_w) AM_MIRROR(0x3ffd) @@ -136,8 +136,8 @@ MACHINE_RESET_MEMBER(pentagon_state,pentagon) if (m_beta->started()) { - betadisk_enable(m_beta); - betadisk_clear_status(m_beta); + m_beta->enable(); + m_beta->clear_status(); } space.set_direct_update_handler(direct_update_delegate(FUNC(pentagon_state::pentagon_direct), this)); diff --git a/src/mess/drivers/scorpion.c b/src/mess/drivers/scorpion.c index e75088fd82e..1405246c2dc 100644 --- a/src/mess/drivers/scorpion.c +++ b/src/mess/drivers/scorpion.c @@ -179,7 +179,7 @@ protected: required_memory_bank m_bank2; required_memory_bank m_bank3; required_memory_bank m_bank4; - required_device<device_t> m_beta; + required_device<beta_disk_device> m_beta; private: UINT8 *m_p_ram; void scorpion_update_memory(); @@ -257,10 +257,10 @@ DIRECT_UPDATE_MEMBER(scorpion_state::scorpion_direct) UINT16 pc = m_maincpu->device_t::safe_pcbase(); // works, but... m_ram_disabled_by_beta = 0; - if (betadisk_is_active(m_beta) && (pc >= 0x4000)) + if (m_beta->is_active() && (pc >= 0x4000)) { m_ROMSelection = BIT(m_port_7ffd_data, 4); - betadisk_disable(m_beta); + m_beta->disable(); m_ram_disabled_by_beta = 1; m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]); } @@ -268,7 +268,7 @@ DIRECT_UPDATE_MEMBER(scorpion_state::scorpion_direct) if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1)) { m_ROMSelection = 3; - betadisk_enable(m_beta); + m_beta->enable(); } if(address<=0x3fff) @@ -313,12 +313,12 @@ WRITE8_MEMBER(scorpion_state::scorpion_port_1ffd_w) static ADDRESS_MAP_START (scorpion_io, AS_IO, 8, scorpion_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x001f, 0x001f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_status_r,betadisk_command_w) AM_MIRROR(0xff00) - AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_track_r,betadisk_track_w) AM_MIRROR(0xff00) - AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_sector_r,betadisk_sector_w) AM_MIRROR(0xff00) - AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_data_r,betadisk_data_w) AM_MIRROR(0xff00) + AM_RANGE(0x001f, 0x001f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, status_r, command_w) AM_MIRROR(0xff00) + AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, track_r, track_w) AM_MIRROR(0xff00) + AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, sector_r, sector_w) AM_MIRROR(0xff00) + AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, data_r, data_w) AM_MIRROR(0xff00) AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff) - AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_state_r, betadisk_param_w) AM_MIRROR(0xff00) + AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, state_r, param_w) AM_MIRROR(0xff00) AM_RANGE(0x4000, 0x4000) AM_WRITE(scorpion_port_7ffd_w) AM_MIRROR(0x3ffd) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3ffd) AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE("ay8912", ay8910_device, data_r, address_w) AM_MIRROR(0x3ffd) @@ -336,8 +336,8 @@ MACHINE_RESET_MEMBER(scorpion_state,scorpion) space.install_read_bank(0x0000, 0x3fff, "bank1"); space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(scorpion_state::scorpion_0000_w),this)); - betadisk_disable(m_beta); - betadisk_clear_status(m_beta); + m_beta->disable(); + m_beta->clear_status(); space.set_direct_update_handler(direct_update_delegate(FUNC(scorpion_state::scorpion_direct), this)); memset(messram,0,256*1024); diff --git a/src/mess/machine/beta.c b/src/mess/machine/beta.c index 0ae7b0ff1a5..bc7488ab2be 100644 --- a/src/mess/machine/beta.c +++ b/src/mess/machine/beta.c @@ -12,193 +12,178 @@ #include "formats/trd_dsk.h" #include "machine/wd17xx.h" #include "machine/beta.h" -#include "devlegcy.h" + /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ -struct beta_disk_state -{ - UINT8 betadisk_status; - UINT8 betadisk_active; - - device_t *wd179x; -}; +const device_type BETA_DISK = &device_creator<beta_disk_device>; -/***************************************************************************** - INLINE FUNCTIONS -*****************************************************************************/ -INLINE beta_disk_state *get_safe_token(device_t *device) +beta_disk_device::beta_disk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, BETA_DISK, "Beta Disk Interface", tag, owner, clock, "betadisk", __FILE__), + m_betadisk_status(0), + m_betadisk_active(0) { - assert(device != NULL); - assert(device->type() == BETA_DISK); - - return (beta_disk_state *)downcast<beta_disk_device *>(device)->token(); } +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- -int betadisk_is_active(device_t *device) +void beta_disk_device::device_start() { - beta_disk_state *beta = get_safe_token(device); + astring tempstring; + + /* validate arguments */ + assert(tag() != NULL); - return beta->betadisk_active; + /* find our WD179x */ + tempstring.printf("%s:%s", tag(), "wd179x"); + m_wd179x = machine().device(tempstring); } -void betadisk_enable(device_t *device) -{ - beta_disk_state *beta = get_safe_token(device); +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- - beta->betadisk_active = 1; +void beta_disk_device::device_reset() +{ } -void betadisk_disable(device_t *device) +int beta_disk_device::is_active() { - beta_disk_state *beta = get_safe_token(device); - - beta->betadisk_active = 0; + return m_betadisk_active; } -void betadisk_clear_status(device_t *device) +void beta_disk_device::enable() { - beta_disk_state *beta = get_safe_token(device); + m_betadisk_active = 1; +} - beta->betadisk_status = 0; +void beta_disk_device::disable() +{ + m_betadisk_active = 0; } -static WRITE_LINE_DEVICE_HANDLER( betadisk_wd179x_intrq_w ) +void beta_disk_device::clear_status() { - beta_disk_state *beta = get_safe_token(device->owner()); + m_betadisk_status = 0; +} +static WRITE_LINE_DEVICE_HANDLER(wd179x_intrq_w) +{ + beta_disk_device *beta = dynamic_cast<beta_disk_device *>(device->owner()); + if (state) - beta->betadisk_status |= (1<<7); + beta->m_betadisk_status |= (1<<7); else - beta->betadisk_status &=~(1<<7); + beta->m_betadisk_status &=~(1<<7); } -static WRITE_LINE_DEVICE_HANDLER( betadisk_wd179x_drq_w ) +static WRITE_LINE_DEVICE_HANDLER(wd179x_drq_w) { - beta_disk_state *beta = get_safe_token(device->owner()); - + beta_disk_device *beta = dynamic_cast<beta_disk_device *>(device->owner()); + if (state) - beta->betadisk_status |= (1<<6); + beta->m_betadisk_status |= (1<<6); else - beta->betadisk_status &=~(1<<6); + beta->m_betadisk_status &=~(1<<6); } static const wd17xx_interface beta_wd17xx_interface = { DEVCB_NULL, - DEVCB_LINE(betadisk_wd179x_intrq_w), - DEVCB_LINE(betadisk_wd179x_drq_w), + DEVCB_LINE(wd179x_intrq_w), + DEVCB_LINE(wd179x_drq_w), {FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3} }; -READ8_DEVICE_HANDLER(betadisk_status_r) +READ8_MEMBER(beta_disk_device::status_r) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - return wd17xx_status_r(beta->wd179x, space, offset); + if (m_betadisk_active==1) { + return wd17xx_status_r(m_wd179x, space, offset); } else { return 0xff; } } -READ8_DEVICE_HANDLER(betadisk_track_r) +READ8_MEMBER(beta_disk_device::track_r) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - return wd17xx_track_r(beta->wd179x, space, offset); + if (m_betadisk_active==1) { + return wd17xx_track_r(m_wd179x, space, offset); } else { return 0xff; } } -READ8_DEVICE_HANDLER(betadisk_sector_r) +READ8_MEMBER(beta_disk_device::sector_r) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - return wd17xx_sector_r(beta->wd179x, space, offset); + if (m_betadisk_active==1) { + return wd17xx_sector_r(m_wd179x, space, offset); } else { return 0xff; } } -READ8_DEVICE_HANDLER(betadisk_data_r) +READ8_MEMBER(beta_disk_device::data_r) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - return wd17xx_data_r(beta->wd179x, space, offset); + if (m_betadisk_active==1) { + return wd17xx_data_r(m_wd179x, space, offset); } else { return 0xff; } } -READ8_DEVICE_HANDLER(betadisk_state_r) +READ8_MEMBER(beta_disk_device::state_r) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - return beta->betadisk_status; + if (m_betadisk_active==1) { + return m_betadisk_status; } else { return 0xff; } } -WRITE8_DEVICE_HANDLER(betadisk_param_w) +WRITE8_MEMBER(beta_disk_device::param_w) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - wd17xx_set_drive(beta->wd179x, data & 3); - wd17xx_set_side (beta->wd179x,(data & 0x10) ? 0 : 1 ); - wd17xx_dden_w(beta->wd179x, !BIT(data, 5)); + if (m_betadisk_active==1) { + wd17xx_set_drive(m_wd179x, data & 3); + wd17xx_set_side (m_wd179x,(data & 0x10) ? 0 : 1 ); + wd17xx_dden_w(m_wd179x, !BIT(data, 5)); if ((data & 0x04) == 0) // reset { - wd17xx_reset(beta->wd179x); + wd17xx_reset(m_wd179x); } - beta->betadisk_status = (data & 0x3f) | beta->betadisk_status; + m_betadisk_status = (data & 0x3f) | m_betadisk_status; } } -WRITE8_DEVICE_HANDLER(betadisk_command_w) +WRITE8_MEMBER(beta_disk_device::command_w) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - wd17xx_command_w(beta->wd179x, space, offset, data); + if (m_betadisk_active==1) { + wd17xx_command_w(m_wd179x, space, offset, data); } } -WRITE8_DEVICE_HANDLER(betadisk_track_w) +WRITE8_MEMBER(beta_disk_device::track_w) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - wd17xx_track_w(beta->wd179x, space, offset, data); + if (m_betadisk_active==1) { + wd17xx_track_w(m_wd179x, space, offset, data); } } -WRITE8_DEVICE_HANDLER(betadisk_sector_w) +WRITE8_MEMBER(beta_disk_device::sector_w) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - wd17xx_sector_w(beta->wd179x, space, offset, data); + if (m_betadisk_active==1) { + wd17xx_sector_w(m_wd179x, space, offset, data); } } -WRITE8_DEVICE_HANDLER(betadisk_data_w) +WRITE8_MEMBER(beta_disk_device::data_w) { - beta_disk_state *beta = get_safe_token(device); - - if (beta->betadisk_active==1) { - wd17xx_data_w(beta->wd179x, space, offset, data); + if (m_betadisk_active==1) { + wd17xx_data_w(m_wd179x, space, offset, data); } } @@ -302,48 +287,6 @@ ROM_START( beta_disk ) ROM_END -/*------------------------------------------------- - DEVICE_START( beta_disk ) --------------------------------------------------*/ - -static DEVICE_START( beta_disk ) -{ - beta_disk_state *beta = get_safe_token(device); - astring tempstring; - - /* validate arguments */ - assert(device->tag() != NULL); - - /* find our WD179x */ - tempstring.printf("%s:%s", device->tag(), "wd179x"); - beta->wd179x = device->machine().device(tempstring); -} - -const device_type BETA_DISK = &device_creator<beta_disk_device>; - -beta_disk_device::beta_disk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, BETA_DISK, "Beta Disk Interface", tag, owner, clock, "betadisk", __FILE__) -{ - m_token = global_alloc_clear(beta_disk_state); -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void beta_disk_device::device_start() -{ - DEVICE_START_NAME( beta_disk )(this); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void beta_disk_device::device_reset() -{ -} - //------------------------------------------------- // device_mconfig_additions - return a pointer to // the device's machine fragment diff --git a/src/mess/machine/beta.h b/src/mess/machine/beta.h index 6583dd39754..2acc2c708ef 100644 --- a/src/mess/machine/beta.h +++ b/src/mess/machine/beta.h @@ -11,30 +11,44 @@ #define __BETA_H__ -int betadisk_is_active(device_t *device); -void betadisk_enable(device_t *device); -void betadisk_disable(device_t *device); -void betadisk_clear_status(device_t *device); - #define BETA_DISK_TAG "beta" class beta_disk_device : public device_t { public: beta_disk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~beta_disk_device() { global_free(m_token); } - - // access to legacy token - void *token() const { assert(m_token != NULL); return m_token; } + ~beta_disk_device() {} + + DECLARE_READ8_MEMBER(status_r); + DECLARE_READ8_MEMBER(track_r); + DECLARE_READ8_MEMBER(sector_r); + DECLARE_READ8_MEMBER(data_r); + DECLARE_READ8_MEMBER(state_r); + + DECLARE_WRITE8_MEMBER(param_w); + DECLARE_WRITE8_MEMBER(command_w); + DECLARE_WRITE8_MEMBER(track_w); + DECLARE_WRITE8_MEMBER(sector_w); + DECLARE_WRITE8_MEMBER(data_w); + + int is_active(); + void enable(); + void disable(); + void clear_status(); + + UINT8 m_betadisk_status; + UINT8 m_betadisk_active; + protected: // device-level overrides virtual void device_start(); virtual void device_reset(); virtual const rom_entry *device_rom_region() const; virtual machine_config_constructor device_mconfig_additions() const; + private: // internal state - void *m_token; + device_t *m_wd179x; }; extern const device_type BETA_DISK; @@ -46,15 +60,4 @@ extern const device_type BETA_DISK; #define MCFG_BETA_DISK_REMOVE(_tag) \ MCFG_DEVICE_REMOVE(_tag) -DECLARE_READ8_DEVICE_HANDLER(betadisk_status_r); -DECLARE_READ8_DEVICE_HANDLER(betadisk_track_r); -DECLARE_READ8_DEVICE_HANDLER(betadisk_sector_r); -DECLARE_READ8_DEVICE_HANDLER(betadisk_data_r); -DECLARE_READ8_DEVICE_HANDLER(betadisk_state_r); - -DECLARE_WRITE8_DEVICE_HANDLER(betadisk_param_w); -DECLARE_WRITE8_DEVICE_HANDLER(betadisk_command_w); -DECLARE_WRITE8_DEVICE_HANDLER(betadisk_track_w); -DECLARE_WRITE8_DEVICE_HANDLER(betadisk_sector_w); -DECLARE_WRITE8_DEVICE_HANDLER(betadisk_data_w); #endif /* __BETA_H__ */ |