Ejemplo n.º 1
0
void mm58167_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
	m_milliseconds++;

	if (m_milliseconds >= 999)
	{
		advance_seconds();
		m_milliseconds = 0;
	}

	m_regs[R_CNT_MILLISECONDS] = make_bcd(m_milliseconds % 10);
	m_regs[R_CNT_HUNDTENTHS] = make_bcd(m_milliseconds / 10);
}
Ejemplo n.º 2
0
static DEVICE_START(timekeeper)
{
	timekeeper_state *c = get_safe_token(device);
	emu_timer *timer;
	attotime duration;
	mame_system_time systime;

	/* validate some basic stuff */
	assert(device != NULL);
//  assert(device->static_config != NULL);
	assert(device->inline_config == NULL);
	assert(device->machine != NULL);
	assert(device->machine->config != NULL);

	mame_get_base_datetime(device->machine, &systime);

	c->device = device;
	c->control = 0;
	c->seconds = make_bcd( systime.local_time.second );
	c->minutes = make_bcd( systime.local_time.minute );
	c->hours = make_bcd( systime.local_time.hour );
	c->day = make_bcd( systime.local_time.weekday + 1 );
	c->date = make_bcd( systime.local_time.mday );
	c->month = make_bcd( systime.local_time.month + 1 );
	c->year = make_bcd( systime.local_time.year % 100 );
	c->century = make_bcd( systime.local_time.year / 100 );
	c->data = auto_alloc_array( device->machine, UINT8, c->size );

	c->default_data = device->region;
	if (c->default_data != NULL)
	{
		assert( device->regionbytes == c->size );
	}

	state_save_register_device_item( device, 0, c->control );
	state_save_register_device_item( device, 0, c->seconds );
	state_save_register_device_item( device, 0, c->minutes );
	state_save_register_device_item( device, 0, c->hours );
	state_save_register_device_item( device, 0, c->day );
	state_save_register_device_item( device, 0, c->date );
	state_save_register_device_item( device, 0, c->month );
	state_save_register_device_item( device, 0, c->year );
	state_save_register_device_item( device, 0, c->century );
	state_save_register_device_item_pointer( device, 0, c->data, c->size );

	timer = timer_alloc( device->machine, timekeeper_tick, c );
	duration = ATTOTIME_IN_SEC(1);
	timer_adjust_periodic( timer, duration, 0, duration );
}
Ejemplo n.º 3
0
void mm58167_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
{
	m_regs[R_CNT_SECONDS] = make_bcd(second);			// seconds (BCD)
	m_regs[R_CNT_MINUTES] = make_bcd(minute);			// minutes (BCD)
	m_regs[R_CNT_HOURS] = make_bcd(hour);				// hour (BCD)
	m_regs[R_CNT_DAYOFWEEK] = make_bcd(day_of_week);	// day of the week (BCD)
	m_regs[R_CNT_DAYOFMONTH] = make_bcd(day);			// day of the month (BCD)
	m_regs[R_CNT_MONTH] = make_bcd(month);				// month (BCD)
}
Ejemplo n.º 4
0
void timekeeper_device::device_start()
{
	system_time systime;

	/* validate some basic stuff */
	assert(this != NULL);

	machine().base_datetime(systime);

	m_control = 0;
	m_seconds = make_bcd( systime.local_time.second );
	m_minutes = make_bcd( systime.local_time.minute );
	m_hours = make_bcd( systime.local_time.hour );
	m_day = make_bcd( systime.local_time.weekday + 1 );
	m_date = make_bcd( systime.local_time.mday );
	m_month = make_bcd( systime.local_time.month + 1 );
	m_year = make_bcd( systime.local_time.year % 100 );
	m_century = make_bcd( systime.local_time.year / 100 );
	m_data = auto_alloc_array( machine(), UINT8, m_size );

	m_default_data = *region();
	if (m_default_data)
	{
		assert( region()->bytes() == m_size );
	}

	save_item( NAME(m_control) );
	save_item( NAME(m_seconds) );
	save_item( NAME(m_minutes) );
	save_item( NAME(m_hours) );
	save_item( NAME(m_day) );
	save_item( NAME(m_date) );
	save_item( NAME(m_month) );
	save_item( NAME(m_year) );
	save_item( NAME(m_century) );
	save_pointer( NAME(m_data), m_size );

	emu_timer *timer = timer_alloc();
	timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
}
Ejemplo n.º 5
0
void TimeKeeperInit(INT32 type, UINT8 *data)
{
	DebugDev_TimeKprInitted = 1;
	
	time_t rawtime;
	struct tm *timeinfo;
	
	Chip.type = type;

	switch( Chip.type )
	{
	case TIMEKEEPER_M48T02:
		Chip.offset_control = 0x7f8;
		Chip.offset_seconds = 0x7f9;
		Chip.offset_minutes = 0x7fa;
		Chip.offset_hours = 0x7fb;
		Chip.offset_day = 0x7fc;
		Chip.offset_date = 0x7fd;
		Chip.offset_month = 0x7fe;
		Chip.offset_year = 0x7ff;
		Chip.offset_century = -1;
		Chip.offset_flags = -1;
		Chip.size = 0x800;
		break;
	case TIMEKEEPER_M48T35:
		Chip.offset_control = 0x7ff8;
		Chip.offset_seconds = 0x7ff9;
		Chip.offset_minutes = 0x7ffa;
		Chip.offset_hours = 0x7ffb;
		Chip.offset_day = 0x7ffc;
		Chip.offset_date = 0x7ffd;
		Chip.offset_month = 0x7ffe;
		Chip.offset_year = 0x7fff;
		Chip.offset_century = -1;
		Chip.offset_flags = -1;
		Chip.size = 0x8000;	
		break;
	case TIMEKEEPER_M48T37:
		Chip.offset_control = 0x7ff8;
		Chip.offset_seconds = 0x7ff9;
		Chip.offset_minutes = 0x7ffa;
		Chip.offset_hours = 0x7ffb;
		Chip.offset_day = 0x7ffc;
		Chip.offset_date = 0x7ffd;
		Chip.offset_month = 0x7ffe;
		Chip.offset_year = 0x7fff;
		Chip.offset_century = 0x7ff1;
		Chip.offset_flags = 0x7ff0;
		Chip.size = 0x8000;	
		break;
	case TIMEKEEPER_M48T58:
		Chip.offset_control = 0x1ff8;
		Chip.offset_seconds = 0x1ff9;
		Chip.offset_minutes = 0x1ffa;
		Chip.offset_hours = 0x1ffb;
		Chip.offset_day = 0x1ffc;
		Chip.offset_date = 0x1ffd;
		Chip.offset_month = 0x1ffe;
		Chip.offset_year = 0x1fff;
		Chip.offset_century = -1;
		Chip.offset_flags = -1;
		Chip.size = 0x2000;
		break;
	case TIMEKEEPER_MK48T08:
		Chip.offset_control = 0x1ff8;
		Chip.offset_seconds = 0x1ff9;
		Chip.offset_minutes = 0x1ffa;
		Chip.offset_hours = 0x1ffb;
		Chip.offset_day = 0x1ffc;
		Chip.offset_date = 0x1ffd;
		Chip.offset_month = 0x1ffe;
		Chip.offset_year = 0x1fff;
		Chip.offset_century = 0x1ff1;
		Chip.offset_flags = 0x1ff0;
		Chip.size = 0x2000;
		break;
	}

	if( data == NULL )
	{
		data = (UINT8*)malloc(Chip.size);
		memset(data, 0xff, Chip.size );
		AllocatedOwnDataArea = 1;
	}
	Chip.data = data;

	time(&rawtime);
	timeinfo = localtime(&rawtime);
	
	Chip.control = 0;
	Chip.seconds = make_bcd(timeinfo->tm_sec);
	Chip.minutes = make_bcd(timeinfo->tm_min);
	Chip.hours = make_bcd(timeinfo->tm_hour);
	Chip.day = make_bcd(timeinfo->tm_wday + 1 );
	Chip.date = make_bcd(timeinfo->tm_mday );
	Chip.month = make_bcd(timeinfo->tm_mon + 1 );
	Chip.year = make_bcd(timeinfo->tm_year % 100 );
	Chip.century = make_bcd(timeinfo->tm_year / 100 );
}
Ejemplo n.º 6
0
void timekeeper_init( int chip, int type, UINT8 *data )
{
	mame_timer *timer;
	mame_time duration;
	mame_system_time systime;
	struct timekeeper_chip *c;

	if( chip >= MAX_TIMEKEEPER_CHIPS )
	{
		logerror( "timekeeper_init( %d ) invalid chip\n", chip );
		return;
	}
	c = &timekeeper[ chip ];

	c->type = type;

	switch( c->type )
	{
	case TIMEKEEPER_M48T02:
		c->offset_control = 0x7f8;
		c->offset_seconds = 0x7f9;
		c->offset_minutes = 0x7fa;
		c->offset_hours = 0x7fb;
		c->offset_day = 0x7fc;
		c->offset_date = 0x7fd;
		c->offset_month = 0x7fe;
		c->offset_year = 0x7ff;
		c->offset_century = -1;
		c->offset_flags = -1;
		c->size = 0x800;
		break;
	case TIMEKEEPER_M48T58:
		c->offset_control = 0x1ff8;
		c->offset_seconds = 0x1ff9;
		c->offset_minutes = 0x1ffa;
		c->offset_hours = 0x1ffb;
		c->offset_day = 0x1ffc;
		c->offset_date = 0x1ffd;
		c->offset_month = 0x1ffe;
		c->offset_year = 0x1fff;
		c->offset_century = -1;
		c->offset_flags = -1;
		c->size = 0x2000;
		break;
	case TIMEKEEPER_MK48T08:
		c->offset_control = 0x1ff8;
		c->offset_seconds = 0x1ff9;
		c->offset_minutes = 0x1ffa;
		c->offset_hours = 0x1ffb;
		c->offset_day = 0x1ffc;
		c->offset_date = 0x1ffd;
		c->offset_month = 0x1ffe;
		c->offset_year = 0x1fff;
		c->offset_century = 0x1ff1;
		c->offset_flags = 0x1ff0;
		c->size = 0x2000;
		break;
	}

	if( data == NULL )
	{
		data = auto_malloc( c->size );
		memset( data, 0xff, c->size );
	}
	c->data = data;

	mame_get_base_datetime(Machine, &systime);

	c->control = 0;
	c->seconds = make_bcd( systime.local_time.second );
	c->minutes = make_bcd( systime.local_time.minute );
	c->hours = make_bcd( systime.local_time.hour );
	c->day = make_bcd( systime.local_time.weekday + 1 );
	c->date = make_bcd( systime.local_time.mday );
	c->month = make_bcd( systime.local_time.month + 1 );
	c->year = make_bcd( systime.local_time.year % 100 );
	c->century = make_bcd( systime.local_time.year / 100 );

	state_save_register_item( "timekeeper", chip, c->control );
	state_save_register_item( "timekeeper", chip, c->seconds );
	state_save_register_item( "timekeeper", chip, c->minutes );
	state_save_register_item( "timekeeper", chip, c->hours );
	state_save_register_item( "timekeeper", chip, c->day );
	state_save_register_item( "timekeeper", chip, c->date );
	state_save_register_item( "timekeeper", chip, c->month );
	state_save_register_item( "timekeeper", chip, c->year );
	state_save_register_item( "timekeeper", chip, c->century );
	state_save_register_item_pointer( "timekeeper", chip, c->data, c->size );

	timer = mame_timer_alloc( timekeeper_tick );
	duration = make_mame_time( 1, 0 );
	mame_timer_adjust( timer, duration, chip, duration );
}