(MESS) use DEVCB2 for callbacks & run srcclean (nw)

This commit is contained in:
smf- 2012-10-19 14:37:11 +00:00
parent 088b56fab9
commit 6fe2c474c1
3 changed files with 450 additions and 467 deletions

View File

@ -2617,12 +2617,6 @@ static const rf5c68_interface rf5c68_intf =
towns_pcm_irq
};
static const FMSCSIinterface towns_scsi_config =
{
DEVCB_DRIVER_LINE_MEMBER(towns_state,towns_scsi_irq),
DEVCB_DRIVER_LINE_MEMBER(towns_state,towns_scsi_drq)
};
static const gfx_layout fnt_chars_16x16 =
{
16,16,
@ -2663,7 +2657,7 @@ static MACHINE_CONFIG_FRAGMENT( towns_base )
MCFG_CPU_IO_MAP(towns_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", towns_state, towns_vsync_irq)
// MCFG_MACHINE_RESET_OVERRIDE(towns_state,towns)
//MCFG_MACHINE_RESET_OVERRIDE(towns_state,towns)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -2706,7 +2700,9 @@ static MACHINE_CONFIG_FRAGMENT( towns_base )
MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_2)
MCFG_SCSIDEV_ADD("scsi:harddisk3", SCSIHD, SCSI_ID_3)
MCFG_SCSIDEV_ADD("scsi:harddisk4", SCSIHD, SCSI_ID_4)
MCFG_FMSCSI_ADD("scsi:fm",towns_scsi_config)
MCFG_FMSCSI_ADD("scsi:fm")
MCFG_FMSCSI_IRQ_HANDLER(DEVWRITELINE("^", towns_state, towns_scsi_irq))
MCFG_FMSCSI_DRQ_HANDLER(DEVWRITELINE("^", towns_state, towns_scsi_drq))
MCFG_UPD71071_ADD("dma_1",towns_dma_config)
MCFG_UPD71071_ADD("dma_2",towns_dma_config)
@ -2869,4 +2865,3 @@ COMP( 1992, fmtownshr,fmtowns, 0, townshr, towns, driver_device, 0, "Fujitsu"
COMP( 19??, fmtownssj,fmtowns, 0, townssj, towns, driver_device, 0, "Fujitsu", "FM-Towns II SJ", GAME_NOT_WORKING)
CONS( 1993, fmtmarty, 0, 0, marty, marty, driver_device, 0, "Fujitsu", "FM-Towns Marty", GAME_NOT_WORKING)
CONS( 1994, carmarty, fmtmarty, 0, marty, marty, driver_device, 0, "Fujitsu", "FM-Towns Car Marty", GAME_NOT_WORKING)

View File

@ -33,27 +33,14 @@
const device_type FMSCSI = &device_creator<fmscsi_device>;
void fmscsi_device::device_config_complete()
{
// copy static configuration if present
const FMSCSIinterface *intf = reinterpret_cast<const FMSCSIinterface *>(static_config());
if (intf != NULL)
*static_cast<FMSCSIinterface *>(this) = *intf;
// otherwise, initialize it to defaults
else
{
memset(&irq_callback,0,sizeof(irq_callback));
memset(&drq_callback,0,sizeof(drq_callback));
}
}
/*
* Device
*/
fmscsi_device::fmscsi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, FMSCSI, "FM-SCSI", tag, owner, clock)
: device_t(mconfig, FMSCSI, "FM-SCSI", tag, owner, clock),
m_irq_handler(*this),
m_drq_handler(*this)
{
}
@ -67,8 +54,8 @@ void fmscsi_device::device_start()
m_target = 0;
m_phase = SCSI_PHASE_BUS_FREE;
m_irq_func.resolve(irq_callback,*this);
m_drq_func.resolve(drq_callback,*this);
m_irq_handler.resolve_safe();
m_drq_handler.resolve_safe();
memset(m_SCSIdevices,0,sizeof(m_SCSIdevices));
@ -126,7 +113,7 @@ void fmscsi_device::device_timer(emu_timer &timer, device_timer_id id, int param
//logerror("FMSCSI: timer triggered: %i/%i\n",m_result_index,m_result_length);
if(m_output_lines & FMSCSI_LINE_DMAE)
{
m_drq_func(1);
m_drq_handler(1);
}
break;
case TIMER_PHASE:
@ -156,7 +143,7 @@ UINT8 fmscsi_device::fmscsi_data_r(void)
m_phase_timer->adjust(attotime::from_usec(800),SCSI_PHASE_STATUS);
if(m_output_lines & FMSCSI_LINE_DMAE)
{
m_drq_func(0);
m_drq_handler(0);
}
logerror("FMSCSI: Stopping transfer : (%i/%i)\n",m_result_index,m_result_length);
}
@ -220,7 +207,7 @@ void fmscsi_device::fmscsi_data_w(UINT8 data)
m_phase_timer->adjust(attotime::from_usec(800),SCSI_PHASE_STATUS);
if(m_output_lines & FMSCSI_LINE_DMAE)
{
m_drq_func(0);
m_drq_handler(0);
}
logerror("FMSCSI: Stopping transfer : (%i/%i)\n",m_result_index,m_result_length);
}
@ -331,7 +318,7 @@ void fmscsi_device::set_input_line(UINT8 line, UINT8 state)
if(m_output_lines & FMSCSI_LINE_IMSK && m_phase != SCSI_PHASE_DATAIN && m_phase != SCSI_PHASE_DATAOUT)
{
set_input_line(FMSCSI_LINE_INT,1);
m_irq_func(1);
m_irq_handler(1);
logerror("FMSCSI: IRQ high\n");
}
}
@ -340,7 +327,7 @@ void fmscsi_device::set_input_line(UINT8 line, UINT8 state)
if(m_output_lines & FMSCSI_LINE_IMSK && m_phase != SCSI_PHASE_DATAIN && m_phase != SCSI_PHASE_DATAOUT)
{
set_input_line(FMSCSI_LINE_INT,0);
m_irq_func(0);
m_irq_handler(0);
logerror("FMSCSI: IRQ low\n");
}
}

View File

@ -30,23 +30,25 @@
#define FMSCSI_LINE_DMAE 0x02
#define FMSCSI_LINE_RST 0x01
struct FMSCSIinterface
{
devcb_write_line irq_callback; /* irq callback */
devcb_write_line drq_callback; /* drq callback */
};
#define MCFG_FMSCSI_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, FMSCSI, 0)
#define MCFG_FMSCSI_ADD(_tag, _intrf) \
MCFG_DEVICE_ADD(_tag, FMSCSI, 0) \
MCFG_DEVICE_CONFIG(_intrf)
#define MCFG_FMSCSI_IRQ_HANDLER(_devcb) \
devcb = &fmscsi_device::set_irq_handler(*device, DEVCB2_##_devcb); \
class fmscsi_device : public device_t,
public FMSCSIinterface
#define MCFG_FMSCSI_DRQ_HANDLER(_devcb) \
devcb = &fmscsi_device::set_drq_handler(*device, DEVCB2_##_devcb); \
class fmscsi_device : public device_t
{
public:
// construction/destruction
fmscsi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// static configuration helpers
template<class _Object> static devcb2_base &set_irq_handler(device_t &device, _Object object) { return downcast<fmscsi_device &>(device).m_irq_handler.set_callback(object); }
template<class _Object> static devcb2_base &set_drq_handler(device_t &device, _Object object) { return downcast<fmscsi_device &>(device).m_drq_handler.set_callback(object); }
// any publically accessible interfaces needed for runtime
UINT8 fmscsi_data_r(void);
void fmscsi_data_w(UINT8 data);
@ -67,7 +69,6 @@ protected:
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
virtual void device_config_complete();
private:
// internal device state goes here
@ -76,8 +77,8 @@ private:
int get_scsi_cmd_len(UINT8 cbyte);
devcb_resolved_write_line m_irq_func;
devcb_resolved_write_line m_drq_func;
devcb2_write_line m_irq_handler;
devcb2_write_line m_drq_handler;
scsihle_device* m_SCSIdevices[8];
UINT8 m_command[32];