Converted Fujitsu MB3773 to be a MAME device

This commit is contained in:
Fabio Priuli 2009-06-01 12:45:22 +00:00
parent 5fe704f9c5
commit f1765e578b
3 changed files with 135 additions and 32 deletions

View File

@ -1,39 +1,116 @@
/* /***************************************************************************
* mb3773 - Power Supply Monitor with Watch Dog Timer
* Fujitsu MB3773
* Todo:
* Calculate the timeout from parameters. Power Supply Monitor with Watch Dog Timer (i.e. Reset IC)
*
*/
Todo:
Calculate the timeout from parameters.
2009-06 Converted to be a device
***************************************************************************/
#include "driver.h" #include "driver.h"
#include "machine/mb3773.h" #include "mb3773.h"
static emu_timer *watchdog_timer; /***************************************************************************
static UINT8 ck = 0; TYPE DEFINITIONS
***************************************************************************/
typedef struct _mb3773_state mb3773_state;
struct _mb3773_state
{
emu_timer *watchdog_timer;
UINT8 ck;
};
/***************************************************************************
INLINE FUNCTIONS
***************************************************************************/
INLINE mb3773_state *get_safe_token(const device_config *device)
{
assert(device != NULL);
assert(device->token != NULL);
assert((device->type == MB3773));
return (mb3773_state *)device->token;
}
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
/*-------------------------------------------------
TIMER_CALLBACK( watchdog_timeout )
-------------------------------------------------*/
static TIMER_CALLBACK( watchdog_timeout ) static TIMER_CALLBACK( watchdog_timeout )
{ {
mame_schedule_soft_reset(machine); mame_schedule_soft_reset(machine);
} }
static void reset_timer( void ) /*-------------------------------------------------
reset_timer
-------------------------------------------------*/
static void reset_timer( const device_config *device )
{ {
timer_adjust_oneshot( watchdog_timer, ATTOTIME_IN_SEC( 5 ), 0 ); mb3773_state *mb3773 = get_safe_token(device);
timer_adjust_oneshot(mb3773->watchdog_timer, ATTOTIME_IN_SEC( 5 ), 0);
} }
void mb3773_set_ck( UINT8 new_ck ) /*-------------------------------------------------
mb3773_set_ck
-------------------------------------------------*/
WRITE8_DEVICE_HANDLER( mb3773_set_ck )
{ {
if( new_ck == 0 && ck != 0 ) mb3773_state *mb3773 = get_safe_token(device);
if( data == 0 && mb3773->ck != 0 )
{ {
reset_timer(); reset_timer(device);
} }
ck = new_ck; mb3773->ck = data;
} }
void mb3773_init( running_machine *machine ) /*-------------------------------------------------
DEVICE_START( mb3773 )
-------------------------------------------------*/
static DEVICE_START( mb3773 )
{ {
watchdog_timer = timer_alloc(machine, watchdog_timeout, NULL); mb3773_state *mb3773 = get_safe_token(device);
reset_timer();
state_save_register_global(machine, ck ); /* create the timer */
mb3773->watchdog_timer = timer_alloc(device->machine, watchdog_timeout, NULL);
reset_timer(device);
/* register for state saving */
state_save_register_global(device->machine, mb3773->ck);
} }
/*-------------------------------------------------
DEVICE_RESET( mb3773 )
-------------------------------------------------*/
static DEVICE_RESET( mb3773 )
{
mb3773_state *mb3773 = get_safe_token(device);
mb3773->ck = 0;
}
/*-------------------------------------------------
DEVICE_GET_INFO( mb3773 )
-------------------------------------------------*/
static const char *DEVTEMPLATE_SOURCE = __FILE__;
#define DEVTEMPLATE_ID(p,s) p##mb3773##s
#define DEVTEMPLATE_FEATURES DT_HAS_START | DT_HAS_RESET
#define DEVTEMPLATE_NAME "Fujistu MB3773"
#define DEVTEMPLATE_FAMILY "Fujistu Power Supply Monitor"
#define DEVTEMPLATE_CLASS DEVICE_CLASS_PERIPHERAL
#include "devtempl.h"

View File

@ -1,12 +1,35 @@
/* /***************************************************************************
* mb3773 - Power Supply Monitor with Watch Dog Timer
*
*/
#if !defined( MB3773_H ) Fujistu MB3773
#define MB3773_H ( 1 )
extern void mb3773_set_ck( UINT8 new_ck ); Power Supply Monitor with Watch Dog Timer (i.e. Reset IC)
extern void mb3773_init( running_machine *machine );
#endif ***************************************************************************/
#ifndef __MB3773_H__
#define __MB3773_H__
/***************************************************************************
MACROS / CONSTANTS
***************************************************************************/
#define MB3773 DEVICE_GET_INFO_NAME(mb3773)
#define MDRV_MB3773_ADD(_tag) \
MDRV_DEVICE_ADD(_tag, MB3773, 0)
#define MDRV_MB3773_REMOVE(_tag) \
MDRV_DEVICE_REMOVE(_tag)
/***************************************************************************
PROTOTYPES
***************************************************************************/
/* device interface */
DEVICE_GET_INFO( mb3773 );
extern WRITE8_DEVICE_HANDLER( mb3773_set_ck );
#endif /* __MB3773_H__ */

View File

@ -1133,7 +1133,8 @@ static UINT8 *taitofx1_eeprom2 = NULL;
static WRITE32_HANDLER( bank_coh1000t_w ) static WRITE32_HANDLER( bank_coh1000t_w )
{ {
mb3773_set_ck( ( data & 0x20 ) >> 5 ); const device_config *mb3773 = devtag_get_device(space->machine, "mb3773");
mb3773_set_ck(mb3773, 0, (data & 0x20) >> 5);
verboselog( space->machine, 1, "bank_coh1000t_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); verboselog( space->machine, 1, "bank_coh1000t_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
memory_set_bankptr(space->machine, 1, memory_region( space->machine, "user2" ) + ( ( data & 3 ) * 0x800000 ) ); memory_set_bankptr(space->machine, 1, memory_region( space->machine, "user2" ) + ( ( data & 3 ) * 0x800000 ) );
} }
@ -1170,7 +1171,6 @@ static DRIVER_INIT( coh1000ta )
memory_install_readwrite32_handler( cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x1fbe0000, 0x1fbe0000 + ( taitofx1_eeprom_size1 - 1 ), 0, 0, (read32_space_func)SMH_BANK(2), (write32_space_func)SMH_BANK(2) ); memory_install_readwrite32_handler( cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x1fbe0000, 0x1fbe0000 + ( taitofx1_eeprom_size1 - 1 ), 0, 0, (read32_space_func)SMH_BANK(2), (write32_space_func)SMH_BANK(2) );
zn_driver_init(machine); zn_driver_init(machine);
mb3773_init(machine);
} }
static MACHINE_RESET( coh1000ta ) static MACHINE_RESET( coh1000ta )
@ -1234,6 +1234,8 @@ static MACHINE_DRIVER_START( coh1000ta )
MDRV_SOUND_ROUTE(0, "rspeaker", 0.25) MDRV_SOUND_ROUTE(0, "rspeaker", 0.25)
MDRV_SOUND_ROUTE(1, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "lspeaker", 1.0)
MDRV_SOUND_ROUTE(2, "rspeaker", 1.0) MDRV_SOUND_ROUTE(2, "rspeaker", 1.0)
MDRV_MB3773_ADD("mb3773")
MACHINE_DRIVER_END MACHINE_DRIVER_END
static WRITE32_HANDLER( taitofx1b_volume_w ) static WRITE32_HANDLER( taitofx1b_volume_w )
@ -1267,7 +1269,6 @@ static DRIVER_INIT( coh1000tb )
memory_install_readwrite32_handler( cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x1fbe0000, 0x1fbe0000 + ( taitofx1_eeprom_size2 - 1 ), 0, 0, (read32_space_func)SMH_BANK(3), (write32_space_func)SMH_BANK(3) ); memory_install_readwrite32_handler( cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x1fbe0000, 0x1fbe0000 + ( taitofx1_eeprom_size2 - 1 ), 0, 0, (read32_space_func)SMH_BANK(3), (write32_space_func)SMH_BANK(3) );
zn_driver_init(machine); zn_driver_init(machine);
mb3773_init(machine);
} }
static MACHINE_RESET( coh1000tb ) static MACHINE_RESET( coh1000tb )
@ -1302,6 +1303,8 @@ static MACHINE_DRIVER_START( coh1000tb )
MDRV_MACHINE_RESET( coh1000tb ) MDRV_MACHINE_RESET( coh1000tb )
MDRV_NVRAM_HANDLER( coh1000tb ) MDRV_NVRAM_HANDLER( coh1000tb )
MDRV_MB3773_ADD("mb3773")
MACHINE_DRIVER_END MACHINE_DRIVER_END
/* /*