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); }
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 ); }
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) }
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)); }
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 ); }
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 ); }