mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +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
|
|
||||||
*
|
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"
|
||||||
|
@ -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__ */
|
||||||
|
@ -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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user