mirror of
https://github.com/holub/mame
synced 2025-10-07 01:16:22 +03:00
Converted Fujitsu MB3773 to be a MAME device
This commit is contained in:
parent
5fe704f9c5
commit
f1765e578b
@ -1,39 +1,116 @@
|
||||
/*
|
||||
* mb3773 - Power Supply Monitor with Watch Dog Timer
|
||||
*
|
||||
* Todo:
|
||||
* Calculate the timeout from parameters.
|
||||
*
|
||||
*/
|
||||
/***************************************************************************
|
||||
|
||||
Fujitsu MB3773
|
||||
|
||||
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 "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 )
|
||||
{
|
||||
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);
|
||||
reset_timer();
|
||||
state_save_register_global(machine, ck );
|
||||
mb3773_state *mb3773 = get_safe_token(device);
|
||||
|
||||
/* 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"
|
||||
|
@ -1,12 +1,35 @@
|
||||
/*
|
||||
* mb3773 - Power Supply Monitor with Watch Dog Timer
|
||||
*
|
||||
*/
|
||||
/***************************************************************************
|
||||
|
||||
#if !defined( MB3773_H )
|
||||
#define MB3773_H ( 1 )
|
||||
Fujistu MB3773
|
||||
|
||||
extern void mb3773_set_ck( UINT8 new_ck );
|
||||
extern void mb3773_init( running_machine *machine );
|
||||
Power Supply Monitor with Watch Dog Timer (i.e. Reset IC)
|
||||
|
||||
#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__ */
|
||||
|
@ -1133,7 +1133,8 @@ static UINT8 *taitofx1_eeprom2 = NULL;
|
||||
|
||||
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 );
|
||||
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) );
|
||||
|
||||
zn_driver_init(machine);
|
||||
mb3773_init(machine);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( coh1000ta )
|
||||
@ -1234,6 +1234,8 @@ static MACHINE_DRIVER_START( coh1000ta )
|
||||
MDRV_SOUND_ROUTE(0, "rspeaker", 0.25)
|
||||
MDRV_SOUND_ROUTE(1, "lspeaker", 1.0)
|
||||
MDRV_SOUND_ROUTE(2, "rspeaker", 1.0)
|
||||
|
||||
MDRV_MB3773_ADD("mb3773")
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
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) );
|
||||
|
||||
zn_driver_init(machine);
|
||||
mb3773_init(machine);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( coh1000tb )
|
||||
@ -1302,6 +1303,8 @@ static MACHINE_DRIVER_START( coh1000tb )
|
||||
|
||||
MDRV_MACHINE_RESET( coh1000tb )
|
||||
MDRV_NVRAM_HANDLER( coh1000tb )
|
||||
|
||||
MDRV_MB3773_ADD("mb3773")
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user