From e3fdfd72fc951af7a78ea3649aeadab274c53c73 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sat, 15 Mar 2014 19:52:34 +0000 Subject: [PATCH] finished modernizing isa nw) --- src/emu/bus/isa/adlib.c | 20 +++---- src/emu/bus/isa/adlib.h | 5 ++ src/emu/bus/isa/gblaster.c | 26 ++++++--- src/emu/bus/isa/gblaster.h | 7 +++ src/emu/bus/isa/hdc.c | 29 ++++------ src/emu/bus/isa/hdc.h | 3 +- src/emu/bus/isa/isa.c | 107 ----------------------------------- src/emu/bus/isa/isa.h | 4 -- src/emu/bus/isa/mc1502_fdc.c | 22 +++---- src/emu/bus/isa/mc1502_fdc.h | 3 +- src/emu/bus/isa/p1_fdc.c | 18 ++---- src/emu/bus/isa/p1_fdc.h | 3 +- src/emu/bus/isa/sblaster.c | 48 +++++++++------- src/emu/bus/isa/sblaster.h | 14 +++++ 14 files changed, 111 insertions(+), 198 deletions(-) diff --git a/src/emu/bus/isa/adlib.c b/src/emu/bus/isa/adlib.c index de59cb48fe8..1368bf302c1 100644 --- a/src/emu/bus/isa/adlib.c +++ b/src/emu/bus/isa/adlib.c @@ -7,7 +7,6 @@ #include "emu.h" #include "adlib.h" #include "sound/speaker.h" -#include "sound/3812intf.h" #define ym3812_StdClock 3579545 @@ -17,26 +16,22 @@ static MACHINE_CONFIG_FRAGMENT( adlib_config ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 3.00) MACHINE_CONFIG_END -static READ8_DEVICE_HANDLER( ym3812_16_r ) +READ8_MEMBER( isa8_adlib_device::ym3812_16_r ) { - ym3812_device *ym3812 = (ym3812_device *) device; - UINT8 retVal = 0xff; switch(offset) { - case 0 : retVal = ym3812->status_port_r( space, offset ); break; + case 0 : retVal = m_ym3812->status_port_r( space, offset ); break; } return retVal; } -static WRITE8_DEVICE_HANDLER( ym3812_16_w ) +WRITE8_MEMBER( isa8_adlib_device::ym3812_16_w ) { - ym3812_device *ym3812 = (ym3812_device *) device; - switch(offset) { - case 0 : ym3812->control_port_w( space, offset, data ); break; - case 1 : ym3812->write_port_w( space, offset, data ); break; + case 0 : m_ym3812->control_port_w( space, offset, data ); break; + case 1 : m_ym3812->write_port_w( space, offset, data ); break; } } @@ -66,7 +61,8 @@ machine_config_constructor isa8_adlib_device::device_mconfig_additions() const isa8_adlib_device::isa8_adlib_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, ISA8_ADLIB, "Ad Lib Sound Card", tag, owner, clock, "isa_adlib", __FILE__), - device_isa8_card_interface( mconfig, *this ) + device_isa8_card_interface( mconfig, *this ), + m_ym3812(*this, "ym3812") { } @@ -77,7 +73,7 @@ isa8_adlib_device::isa8_adlib_device(const machine_config &mconfig, const char * void isa8_adlib_device::device_start() { set_isa_device(); - m_isa->install_device(subdevice("ym3812"), 0x0388, 0x0389, 0, 0, FUNC(ym3812_16_r), FUNC(ym3812_16_w) ); + m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate( FUNC(isa8_adlib_device::ym3812_16_r), this ), write8_delegate( FUNC(isa8_adlib_device::ym3812_16_w), this ) ); } //------------------------------------------------- diff --git a/src/emu/bus/isa/adlib.h b/src/emu/bus/isa/adlib.h index 7f773112b78..cdfe854f01b 100644 --- a/src/emu/bus/isa/adlib.h +++ b/src/emu/bus/isa/adlib.h @@ -5,6 +5,7 @@ #include "emu.h" #include "isa.h" +#include "sound/3812intf.h" //************************************************************************** // TYPE DEFINITIONS @@ -22,12 +23,16 @@ public: // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; + + DECLARE_READ8_MEMBER(ym3812_16_r); + DECLARE_WRITE8_MEMBER(ym3812_16_w); protected: // device-level overrides virtual void device_start(); virtual void device_reset(); private: // internal state + required_device m_ym3812; }; diff --git a/src/emu/bus/isa/gblaster.c b/src/emu/bus/isa/gblaster.c index bde6d1b36ce..1f644c704e5 100644 --- a/src/emu/bus/isa/gblaster.c +++ b/src/emu/bus/isa/gblaster.c @@ -7,7 +7,6 @@ #include "emu.h" #include "gblaster.h" #include "sound/speaker.h" -#include "sound/saa1099.h" /* creative labs game blaster (CMS creative music system) @@ -25,17 +24,26 @@ static MACHINE_CONFIG_FRAGMENT( game_blaster_config ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -static READ8_DEVICE_HANDLER( saa1099_16_r ) +READ8_MEMBER( isa8_gblaster_device::saa1099_16_r ) { return 0xff; } -static WRITE8_DEVICE_HANDLER( saa1099_16_w ) +WRITE8_MEMBER( isa8_gblaster_device::saa1099_1_16_w ) { switch(offset) { - case 0 : dynamic_cast(device)->saa1099_control_w( space, offset, data ); break; - case 1 : dynamic_cast(device)->saa1099_data_w( space, offset, data ); break; + case 0 : m_saa1099_1->saa1099_control_w( space, offset, data ); break; + case 1 : m_saa1099_1->saa1099_data_w( space, offset, data ); break; + } +} + +WRITE8_MEMBER( isa8_gblaster_device::saa1099_2_16_w ) +{ + switch(offset) + { + case 0 : m_saa1099_2->saa1099_control_w( space, offset, data ); break; + case 1 : m_saa1099_2->saa1099_data_w( space, offset, data ); break; } } @@ -65,7 +73,9 @@ machine_config_constructor isa8_gblaster_device::device_mconfig_additions() cons isa8_gblaster_device::isa8_gblaster_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, ISA8_GAME_BLASTER, "Game Blaster Sound Card", tag, owner, clock, "isa_gblaster", __FILE__), - device_isa8_card_interface(mconfig, *this) + device_isa8_card_interface(mconfig, *this), + m_saa1099_1(*this, "saa1099.1"), + m_saa1099_2(*this, "saa1099.2") { } @@ -76,8 +86,8 @@ isa8_gblaster_device::isa8_gblaster_device(const machine_config &mconfig, const void isa8_gblaster_device::device_start() { set_isa_device(); - m_isa->install_device(subdevice("saa1099.1"), 0x0220, 0x0221, 0, 0, FUNC(saa1099_16_r), FUNC(saa1099_16_w) ); - m_isa->install_device(subdevice("saa1099.2"), 0x0222, 0x0223, 0, 0, FUNC(saa1099_16_r), FUNC(saa1099_16_w) ); + m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_1_16_w), this ) ); + m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_2_16_w), this ) ); } //------------------------------------------------- diff --git a/src/emu/bus/isa/gblaster.h b/src/emu/bus/isa/gblaster.h index b846ee0f81a..ba11f51f680 100644 --- a/src/emu/bus/isa/gblaster.h +++ b/src/emu/bus/isa/gblaster.h @@ -5,6 +5,7 @@ #include "emu.h" #include "isa.h" +#include "sound/saa1099.h" //************************************************************************** // TYPE DEFINITIONS @@ -22,12 +23,18 @@ public: // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; + + DECLARE_READ8_MEMBER(saa1099_16_r); + DECLARE_WRITE8_MEMBER(saa1099_1_16_w); + DECLARE_WRITE8_MEMBER(saa1099_2_16_w); protected: // device-level overrides virtual void device_start(); virtual void device_reset(); private: // internal state + required_device m_saa1099_1; + required_device m_saa1099_2; }; diff --git a/src/emu/bus/isa/hdc.c b/src/emu/bus/isa/hdc.c index 658f9e857ad..762b9465a15 100644 --- a/src/emu/bus/isa/hdc.c +++ b/src/emu/bus/isa/hdc.c @@ -110,9 +110,6 @@ static const char *const hdc_command_names[] = NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL /* 0xF8-0xFF */ }; -static DECLARE_READ8_DEVICE_HANDLER(pc_HDC_r); -static DECLARE_WRITE8_DEVICE_HANDLER(pc_HDC_w); - static MACHINE_CONFIG_FRAGMENT( hdc_config ) MCFG_HARDDISK_ADD("primary") MCFG_HARDDISK_ADD("slave") @@ -171,7 +168,7 @@ void isa8_hdc_device::device_start() { set_isa_device(); m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "hdc", "hdc"); - m_isa->install_device(this, 0x0320, 0x0323, 0, 0, FUNC(pc_HDC_r), FUNC(pc_HDC_w) ); + m_isa->install_device(0x0320, 0x0323, 0, 0, read8_delegate( FUNC(isa8_hdc_device::pc_hdc_r), this ), write8_delegate( FUNC(isa8_hdc_device::pc_hdc_w), this ) ); m_isa->set_dma_channel(3, this, FALSE); buffer = auto_alloc_array(machine(), UINT8, 17*4*512); timer = machine().scheduler().timer_alloc(FUNC(pc_hdc_command), this); @@ -781,37 +778,35 @@ UINT8 isa8_hdc_device::pc_hdc_dipswitch_r() * hard disk controller * *************************************************************************/ -static READ8_DEVICE_HANDLER(pc_HDC_r ) +READ8_MEMBER( isa8_hdc_device::pc_hdc_r ) { UINT8 data = 0xff; - isa8_hdc_device *hdc = downcast(device); switch( offset ) { - case 0: data = hdc->pc_hdc_data_r(); break; - case 1: data = hdc->pc_hdc_status_r(); break; - case 2: data = hdc->pc_hdc_dipswitch_r(); break; + case 0: data = pc_hdc_data_r(); break; + case 1: data = pc_hdc_status_r(); break; + case 2: data = pc_hdc_dipswitch_r(); break; case 3: break; } if (LOG_HDC_CALL) - logerror("%s pc_HDC_r(): offs=%d result=0x%02x\n", space.machine().describe_context(), offset, data); + logerror("%s pc_hdc_r(): offs=%d result=0x%02x\n", machine().describe_context(), offset, data); return data; } -static WRITE8_DEVICE_HANDLER( pc_HDC_w ) +WRITE8_MEMBER( isa8_hdc_device::pc_hdc_w ) { - isa8_hdc_device *hdc = downcast(device); if (LOG_HDC_CALL) - logerror("%s pc_HDC_w(): offs=%d data=0x%02x\n", space.machine().describe_context(), offset, data); + logerror("%s pc_hdc_w(): offs=%d data=0x%02x\n", machine().describe_context(), offset, data); switch( offset ) { - case 0: hdc->pc_hdc_data_w(data); break; - case 1: hdc->pc_hdc_reset_w(data); break; - case 2: hdc->pc_hdc_select_w(data); break; - case 3: hdc->pc_hdc_control_w(data); break; + case 0: pc_hdc_data_w(data); break; + case 1: pc_hdc_reset_w(data); break; + case 2: pc_hdc_select_w(data); break; + case 3: pc_hdc_control_w(data); break; } } diff --git a/src/emu/bus/isa/hdc.h b/src/emu/bus/isa/hdc.h index 35e9a0feb8a..b10cf0b0630 100644 --- a/src/emu/bus/isa/hdc.h +++ b/src/emu/bus/isa/hdc.h @@ -29,7 +29,8 @@ public: // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; virtual const rom_entry *device_rom_region() const; - + DECLARE_READ8_MEMBER(pc_hdc_r); + DECLARE_WRITE8_MEMBER(pc_hdc_w); protected: // device-level overrides virtual void device_start(); diff --git a/src/emu/bus/isa/isa.c b/src/emu/bus/isa/isa.c index 9dc1c05b3f8..3d4a2bc898f 100644 --- a/src/emu/bus/isa/isa.c +++ b/src/emu/bus/isa/isa.c @@ -261,53 +261,6 @@ void isa8_device::device_reset() } -void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_space_func rhandler, const char* rhandler_name, write8_space_func whandler, const char *whandler_name) -{ - int buswidth; - address_space *space; - - if (spacenum == AS_IO) - { - space = m_iospace; - buswidth = m_iowidth; - } - else if (spacenum == AS_PROGRAM) - { - space = m_prgspace; - buswidth = m_prgwidth; - } - else - { - fatalerror("Unknown space passed to isa8_device::install_space!\n"); - } - - switch(buswidth) - { - case 8: - space->install_legacy_readwrite_handler(start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0); - break; - case 16: - space->install_legacy_readwrite_handler(start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0xffff); - break; - case 32: - if ((start % 4) == 0) { - if ((end-start)==1) { - space->install_legacy_readwrite_handler(start, end+2, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0x0000ffff); - } else { - space->install_legacy_readwrite_handler(start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0xffffffff); - } - } else { - // we handle just misalligned by 2 - space->install_legacy_readwrite_handler(start-2, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0xffff0000); - } - break; - default: - fatalerror("ISA8: Bus width %d not supported\n", buswidth); - break; - } -} - - void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) { int buswidth; @@ -355,71 +308,11 @@ void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t } -void isa8_device::install_space(address_spacenum spacenum, device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_device_func rhandler, const char* rhandler_name, write8_device_func whandler, const char *whandler_name) -{ - int buswidth; - address_space *space; - - if (spacenum == AS_IO) - { - space = m_iospace; - buswidth = m_iowidth; - } - else if (spacenum == AS_PROGRAM) - { - space = m_prgspace; - buswidth = m_prgwidth; - } - else - { - fatalerror("Unknown space passed to isa8_device::install_space!\n"); - } - - switch(buswidth) - { - case 8: - space->install_legacy_readwrite_handler(*dev, start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0); - break; - case 16: - space->install_legacy_readwrite_handler(*dev, start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0xffff); - break; - case 32: - if ((start % 4) == 0) { - if ((end-start)==1) { - space->install_legacy_readwrite_handler(*dev, start, end+2, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0x0000ffff); - } else { - space->install_legacy_readwrite_handler(*dev, start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0xffffffff); - } - } else { - // we handle just misalligned by 2 - space->install_legacy_readwrite_handler(*dev, start-2, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name,0xffff0000); - } - break; - default: - fatalerror("ISA8: Bus width %d not supported\n", buswidth); - break; - } -} - - void isa8_device::install_memory(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) { install_space(AS_PROGRAM, start, end, mask, mirror, rhandler, whandler); } - -void isa8_device::install_device(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_device_func rhandler, const char* rhandler_name, write8_device_func whandler, const char *whandler_name) -{ - install_space(AS_IO, dev, start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name); -} - - -void isa8_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_space_func rhandler, const char* rhandler_name, write8_space_func whandler, const char *whandler_name) -{ - install_space(AS_IO, start, end, mask, mirror, rhandler, rhandler_name, whandler, whandler_name); -} - - void isa8_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) { install_space(AS_IO, start, end, mask, mirror, rhandler, whandler); diff --git a/src/emu/bus/isa/isa.h b/src/emu/bus/isa/isa.h index 8a991804243..775e8c259a3 100644 --- a/src/emu/bus/isa/isa.h +++ b/src/emu/bus/isa/isa.h @@ -168,9 +168,7 @@ public: } } - ATTR_DEPRECATED void install_device(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_device_func rhandler, const char* rhandler_name, write8_device_func whandler, const char *whandler_name); void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); - ATTR_DEPRECATED void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_space_func rhandler, const char* rhandler_name, write8_space_func whandler, const char *whandler_name); template void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(class address_map &map, device_t &device), int bits = 8, UINT64 unitmask = U64(0xffffffffffffffff)) { m_iospace->install_device(addrstart, addrend, device, map, bits, unitmask); @@ -212,8 +210,6 @@ public: const address_space_config m_program_config, m_io_config, m_program16_config, m_io16_config; protected: - ATTR_DEPRECATED void install_space(address_spacenum spacenum, device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_device_func rhandler, const char* rhandler_name, write8_device_func whandler, const char *whandler_name); - ATTR_DEPRECATED void install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_space_func rhandler, const char* rhandler_name, write8_space_func whandler, const char *whandler_name); void install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); // device-level overrides diff --git a/src/emu/bus/isa/mc1502_fdc.c b/src/emu/bus/isa/mc1502_fdc.c index 6fbf87681f7..64f21be86c8 100644 --- a/src/emu/bus/isa/mc1502_fdc.c +++ b/src/emu/bus/isa/mc1502_fdc.c @@ -34,9 +34,6 @@ const device_type MC1502_FDC = &device_creator; -static DECLARE_READ8_DEVICE_HANDLER(mc1502_FDC_r); -static DECLARE_WRITE8_DEVICE_HANDLER(mc1502_FDC_w); - FLOPPY_FORMATS_MEMBER( mc1502_fdc_device::floppy_formats ) FLOPPY_PC_FORMAT, FLOPPY_DSK_FORMAT @@ -155,28 +152,25 @@ void mc1502_fdc_device::mc1502_fdc_irq_drq(bool state) maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); } -static READ8_DEVICE_HANDLER( mc1502_FDC_r ) +READ8_MEMBER( mc1502_fdc_device::mc1502_fdc_r ) { UINT8 data = 0xff; - mc1502_fdc_device *fdc = downcast(device); switch( offset ) { - case 0: data = fdc->mc1502_wd17xx_aux_r(); break; - case 8: data = fdc->mc1502_wd17xx_drq_r(); break; - case 10: data = fdc->mc1502_wd17xx_motor_r(); break; + case 0: data = mc1502_wd17xx_aux_r(); break; + case 8: data = mc1502_wd17xx_drq_r(); break; + case 10: data = mc1502_wd17xx_motor_r(); break; } return data; } -static WRITE8_DEVICE_HANDLER( mc1502_FDC_w ) +WRITE8_MEMBER( mc1502_fdc_device::mc1502_fdc_w ) { - mc1502_fdc_device *fdc = downcast(device); - switch( offset ) { - case 0: fdc->mc1502_wd17xx_aux_w(data); break; + case 0: mc1502_wd17xx_aux_w(data); break; } } @@ -215,13 +209,13 @@ void mc1502_fdc_device::device_start() m_isa->install_device(0x010c, 0x010f, 0, 0, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(this, 0x0100, 0x010b, 0, 0, FUNC(mc1502_FDC_r), FUNC(mc1502_FDC_w) ); + m_isa->install_device(0x0100, 0x010b, 0, 0, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); // BIOS 5.31, 5.33 /* m_isa->install_device(0x010c, 0x010f, 0, 0, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(this, 0x0100, 0x010b, 0, 0, FUNC(mc1502_FDC_r), FUNC(mc1502_FDC_w) ); + m_isa->install_device(0x0100, 0x010b, 0, 0, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); */ m_fdc->setup_drq_cb(fd1793_t::line_cb(FUNC(mc1502_fdc_device::mc1502_fdc_irq_drq), this)); m_fdc->setup_intrq_cb(fd1793_t::line_cb(FUNC(mc1502_fdc_device::mc1502_fdc_irq_drq), this)); diff --git a/src/emu/bus/isa/mc1502_fdc.h b/src/emu/bus/isa/mc1502_fdc.h index 8454eb88b5d..467912c3851 100644 --- a/src/emu/bus/isa/mc1502_fdc.h +++ b/src/emu/bus/isa/mc1502_fdc.h @@ -38,7 +38,8 @@ public: DECLARE_FLOPPY_FORMATS( floppy_formats ); TIMER_CALLBACK_MEMBER( motor_callback ); - + DECLARE_READ8_MEMBER(mc1502_fdc_r); + DECLARE_WRITE8_MEMBER(mc1502_fdc_w); protected: // device-level overrides virtual void device_start(); diff --git a/src/emu/bus/isa/p1_fdc.c b/src/emu/bus/isa/p1_fdc.c index 6035b677463..1d1d12d1514 100644 --- a/src/emu/bus/isa/p1_fdc.c +++ b/src/emu/bus/isa/p1_fdc.c @@ -34,9 +34,6 @@ const device_type P1_FDC = &device_creator; -static DECLARE_READ8_DEVICE_HANDLER(p1_FDC_r); -static DECLARE_WRITE8_DEVICE_HANDLER(p1_FDC_w); - FLOPPY_FORMATS_MEMBER( p1_fdc_device::floppy_formats ) FLOPPY_PC_FORMAT, FLOPPY_DSK_FORMAT @@ -152,27 +149,24 @@ void p1_fdc_device::p1_fdc_irq_drq(bool state) maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); } -static READ8_DEVICE_HANDLER( p1_FDC_r ) +READ8_MEMBER( p1_fdc_device::p1_fdc_r ) { UINT8 data = 0xff; - p1_fdc_device *fdc = downcast(device); switch( offset ) { - case 0: data = fdc->p1_wd17xx_aux_r(); break; - case 2: data = fdc->p1_wd17xx_motor_r(); break; + case 0: data = p1_wd17xx_aux_r(); break; + case 2: data = p1_wd17xx_motor_r(); break; } return data; } -static WRITE8_DEVICE_HANDLER( p1_FDC_w ) +WRITE8_MEMBER( p1_fdc_device::p1_fdc_w ) { - p1_fdc_device *fdc = downcast(device); - switch( offset ) { - case 0: fdc->p1_wd17xx_aux_w(data); break; + case 0: p1_wd17xx_aux_w(data); break; } } @@ -199,7 +193,7 @@ void p1_fdc_device::device_start() m_isa->install_device(0x00c0, 0x00c3, 0, 0, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(this, 0x00c4, 0x00c7, 0, 0, FUNC(p1_FDC_r), FUNC(p1_FDC_w) ); + m_isa->install_device(0x00c4, 0x00c7, 0, 0, read8_delegate( FUNC(p1_fdc_device::p1_fdc_r), this ), write8_delegate( FUNC(p1_fdc_device::p1_fdc_w), this ) ); m_fdc->setup_drq_cb(fd1793_t::line_cb(FUNC(p1_fdc_device::p1_fdc_irq_drq), this)); m_fdc->setup_intrq_cb(fd1793_t::line_cb(FUNC(p1_fdc_device::p1_fdc_irq_drq), this)); } diff --git a/src/emu/bus/isa/p1_fdc.h b/src/emu/bus/isa/p1_fdc.h index b85a6812b99..732a2391d9a 100644 --- a/src/emu/bus/isa/p1_fdc.h +++ b/src/emu/bus/isa/p1_fdc.h @@ -36,7 +36,8 @@ public: virtual const rom_entry *device_rom_region() const; DECLARE_FLOPPY_FORMATS( floppy_formats ); - + DECLARE_READ8_MEMBER(p1_fdc_r); + DECLARE_WRITE8_MEMBER(p1_fdc_w); protected: // device-level overrides virtual void device_start(); diff --git a/src/emu/bus/isa/sblaster.c b/src/emu/bus/isa/sblaster.c index 5046e90ecef..1d69bf31bee 100644 --- a/src/emu/bus/isa/sblaster.c +++ b/src/emu/bus/isa/sblaster.c @@ -11,9 +11,7 @@ #include "sblaster.h" #include "sound/speaker.h" -#include "sound/3812intf.h" #include "sound/262intf.h" -#include "sound/saa1099.h" #include "sound/dac.h" #include "machine/pic8259.h" @@ -122,40 +120,45 @@ static MACHINE_CONFIG_FRAGMENT( sblaster_16_config ) MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout") MACHINE_CONFIG_END -static READ8_DEVICE_HANDLER( ym3812_16_r ) +READ8_MEMBER( sb8_device::ym3812_16_r ) { - ym3812_device *ym3812 = (ym3812_device *) device; - UINT8 retVal = 0xff; switch(offset) { - case 0 : retVal = ym3812->status_port_r( space, offset ); break; + case 0 : retVal = m_ym3812->status_port_r( space, offset ); break; } return retVal; } -static WRITE8_DEVICE_HANDLER( ym3812_16_w ) +WRITE8_MEMBER( sb8_device::ym3812_16_w ) { - ym3812_device *ym3812 = (ym3812_device *) device; - switch(offset) { - case 0 : ym3812->control_port_w( space, offset, data ); break; - case 1 : ym3812->write_port_w( space, offset, data ); break; + case 0 : m_ym3812->control_port_w( space, offset, data ); break; + case 1 : m_ym3812->write_port_w( space, offset, data ); break; } } -static READ8_DEVICE_HANDLER( saa1099_16_r ) +READ8_MEMBER( isa8_sblaster1_0_device::saa1099_16_r ) { return 0xff; } -static WRITE8_DEVICE_HANDLER( saa1099_16_w ) +WRITE8_MEMBER( isa8_sblaster1_0_device::saa1099_1_16_w ) { switch(offset) { - case 0 : dynamic_cast(device)->saa1099_control_w( space, offset, data ); break; - case 1 : dynamic_cast(device)->saa1099_data_w( space, offset, data ); break; + case 0 : m_saa1099_1->saa1099_control_w( space, offset, data ); break; + case 1 : m_saa1099_1->saa1099_data_w( space, offset, data ); break; + } +} + +WRITE8_MEMBER( isa8_sblaster1_0_device::saa1099_2_16_w ) +{ + switch(offset) + { + case 0 : m_saa1099_2->saa1099_control_w( space, offset, data ); break; + case 1 : m_saa1099_2->saa1099_data_w( space, offset, data ); break; } } @@ -1107,7 +1110,8 @@ sb_device::sb_device(const machine_config &mconfig, device_type type, const char sb8_device::sb8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, UINT32 clock, const char *name, const char *shortname, const char *source) : sb_device(mconfig, type, tag, owner, clock, name, shortname, source), - device_isa8_card_interface(mconfig, *this) + device_isa8_card_interface(mconfig, *this), + m_ym3812(*this, "ym3812") { } @@ -1122,7 +1126,9 @@ sb16_device::sb16_device(const machine_config &mconfig, device_type type, const //------------------------------------------------- isa8_sblaster1_0_device::isa8_sblaster1_0_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - sb8_device(mconfig, ISA8_SOUND_BLASTER_1_0, tag, owner, clock, "Sound Blaster 1.0", "isa_sblaster1_0", __FILE__) + sb8_device(mconfig, ISA8_SOUND_BLASTER_1_0, tag, owner, clock, "Sound Blaster 1.0", "isa_sblaster1_0", __FILE__), + m_saa1099_1(*this, "saa1099.1"), + m_saa1099_2(*this, "saa1099.2") { } @@ -1157,8 +1163,8 @@ void sb8_device::device_start() } else { - m_isa->install_device(subdevice("ym3812"), 0x0388, 0x0389, 0, 0, FUNC(ym3812_16_r), FUNC(ym3812_16_w) ); - m_isa->install_device(subdevice("ym3812"), 0x0228, 0x0229, 0, 0, FUNC(ym3812_16_r), FUNC(ym3812_16_w) ); + m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); } m_timer = timer_alloc(0, NULL); @@ -1183,8 +1189,8 @@ void isa8_sblaster1_0_device::device_start() { set_isa_device(); // 1.0 always has the SAA1099s for CMS back-compatibility - m_isa->install_device(subdevice("saa1099.1"), 0x0220, 0x0221, 0, 0, FUNC(saa1099_16_r), FUNC(saa1099_16_w) ); - m_isa->install_device(subdevice("saa1099.2"), 0x0222, 0x0223, 0, 0, FUNC(saa1099_16_r), FUNC(saa1099_16_w) ); + m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_1_16_w), this ) ); + m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_2_16_w), this ) ); m_isa->set_dma_channel(1, this, FALSE); m_dsp.version = 0x0105; sb8_device::device_start(); diff --git a/src/emu/bus/isa/sblaster.h b/src/emu/bus/isa/sblaster.h index 7772f94cb62..1666f9e667f 100644 --- a/src/emu/bus/isa/sblaster.h +++ b/src/emu/bus/isa/sblaster.h @@ -7,6 +7,8 @@ #include "isa.h" #include "sound/dac.h" #include "bus/pc_joy/pc_joy.h" +#include "sound/3812intf.h" +#include "sound/saa1099.h" #define SIXTEENBIT 0x01 #define STEREO 0x02 @@ -155,12 +157,17 @@ class sb8_device : public sb_device, public: // construction/destruction sb8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, UINT32 clock, const char *name, const char *shortname, const char *source); + + DECLARE_READ8_MEMBER(ym3812_16_r); + DECLARE_WRITE8_MEMBER(ym3812_16_w); protected: virtual void device_start(); virtual void drq_w(int state) { m_isa->drq1_w(state); } virtual void irq_w(int state, int source) { m_isa->irq5_w(state); } virtual UINT8 dack_r(int line) { return sb_device::dack_r(line); } virtual void dack_w(int line, UINT8 data) { sb_device::dack_w(line, data); } +private: + required_device m_ym3812; }; class isa8_sblaster1_0_device : public sb8_device @@ -171,11 +178,18 @@ public: // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; + + DECLARE_READ8_MEMBER(saa1099_16_r); + DECLARE_WRITE8_MEMBER(saa1099_1_16_w); + DECLARE_WRITE8_MEMBER(saa1099_2_16_w); protected: // device-level overrides virtual void device_start(); private: // internal state + required_device m_saa1099_1; + required_device m_saa1099_2; + }; class isa8_sblaster1_5_device : public sb8_device