void gaelco_serial_device::device_start() { /* validate arguments */ assert(strlen(tag()) < 20); m_irq_handler.resolve_safe(); m_sync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gaelco_serial_device::link_cb), this)); /* register for save states */ //save_item(NAME(earom->offset)); //save_item(NAME(earom->data)); #ifdef SHARED_MEM_DRIVER m_sync_timer->adjust(attotime::zero,0,attotime::from_hz(SYNC_FREQ)); #endif m_os_shmem = osd_sharedmem_alloc(PATH_NAME, 0, sizeof(shmem_t)); if (m_os_shmem == NULL) { m_os_shmem = osd_sharedmem_alloc(PATH_NAME, 1, sizeof(shmem_t)); m_shmem = (shmem_t *) osd_sharedmem_ptr(m_os_shmem); m_in_ptr = &m_shmem->buf[0]; m_out_ptr = &m_shmem->buf[1]; } else { m_shmem = (shmem_t *) osd_sharedmem_ptr(m_os_shmem); m_in_ptr = &m_shmem->buf[1]; m_out_ptr = &m_shmem->buf[0]; } }
static DEVICE_START( gaelco_serial ) { gaelco_serial_state *state = get_token(device); const gaelco_serial_interface *intf = get_interface(device); /* validate arguments */ assert(device != NULL); assert(strlen(device->tag()) < 20); /* clear out CIA structure, and copy the interface */ memset(state, 0, sizeof(*state)); state->m_device = device; state->m_irq_func.resolve(intf->irq_func, *device); state->m_sync_timer = device->machine().scheduler().timer_alloc(FUNC(link_cb), state); /* register for save states */ //device->save_item(NAME(earom->offset)); //device->save_item(NAME(earom->data)); #ifdef SHARED_MEM_DRIVER state->m_sync_timer->adjust(attotime::zero,0,attotime::from_hz(SYNC_FREQ)); #endif state->m_os_shmem = osd_sharedmem_alloc(PATH_NAME, 0, sizeof(shmem_t)); if (state->m_os_shmem == NULL) { state->m_os_shmem = osd_sharedmem_alloc(PATH_NAME, 1, sizeof(shmem_t)); state->m_shmem = (shmem_t *) osd_sharedmem_ptr(state->m_os_shmem); state->m_in_ptr = &state->m_shmem->buf[0]; state->m_out_ptr = &state->m_shmem->buf[1]; } else { state->m_shmem = (shmem_t *) osd_sharedmem_ptr(state->m_os_shmem); state->m_in_ptr = &state->m_shmem->buf[1]; state->m_out_ptr = &state->m_shmem->buf[0]; } }