void mc_init() { nMC_CPUControl0 = 0; nMC_CPUControl1 = 0; nMC_Watchdog = 0; nMC_SysID = 0; nMC_RPSSDiv = 0; nMC_RefCntPreload = 0; nMC_RefCnt = 0; nMC_GIO64ArbParam = 0; nMC_ArbCPUTime = 0; nMC_ArbBurstTime = 0; nMC_MemCfg0 = 0; nMC_MemCfg1 = 0; nMC_CPUMemAccCfg = 0; nMC_GIOMemAccCfg = 0; nMC_CPUErrorAddr = 0; nMC_CPUErrorStatus = 0; nMC_GIOErrorAddr = 0; nMC_GIOErrorStatus = 0; nMC_SysSemaphore = 0; nMC_GIOLock = 0; nMC_EISALock = 0; nMC_GIO64TransMask = 0; nMC_GIO64Subst = 0; nMC_DMAIntrCause = 0; nMC_DMAControl = 0; nMC_DMATLBEntry0Hi = 0; nMC_DMATLBEntry0Lo = 0; nMC_DMATLBEntry1Hi = 0; nMC_DMATLBEntry1Lo = 0; nMC_DMATLBEntry2Hi = 0; nMC_DMATLBEntry2Lo = 0; nMC_DMATLBEntry3Hi = 0; nMC_DMATLBEntry3Lo = 0; nMC_RPSSCounter = 0; nMC_DMAMemAddr = 0; nMC_DMAMemAddr = 0; nMC_DMALineCntWidth = 0; nMC_DMALineZoomStride = 0; nMC_DMAGIO64Addr = 0; nMC_DMAMode = 0; nMC_DMAZoomByteCnt = 0; tMC_UpdateTimer = timer_alloc( mc_update ); timer_adjust( tMC_UpdateTimer, TIME_IN_SEC(1.0/10000.0), 0, TIME_IN_SEC(1.0/10000.0) ); // if Indigo2, ID appropriately if (!strcmp(Machine->gamedrv->name, "ip244415")) { nMC_SysID = 0x11; // rev. B MC, EISA bus present } }
static void command_rawinput(void) { int parts; double current_time = timer_get_time(); static const char *position; #if 0 int i; double rate = TIME_IN_SEC(1); const char *s; char buf[256]; #endif if (state == STATE_READY) { /* beginning of a raw input command */ parts = 1; position = current_command->u.input_args.input_chars; wait_target = current_time; state = STATE_INCOMMAND; } else if (current_time > wait_target) { #if 0 do { /* process the next command */ while(!isspace(*position)) position++; /* look up the input to trigger */ for (i = 0; input_keywords[i].name; i++) { if (!strncmp(position, input_keywords[i].name, strlen(input_keywords[i].name))) break; } /* go to next command */ position = strchr(position, ','); if (position) position++; } while(position && !input_keywords[i].name); current_fake_input = input_keywords[i].name ? &input_keywords[i] : NULL; if (position) wait_target = current_time + rate; else state = STATE_READY; #endif } }
int pc_turbo_setup(int cpunum, int port, int mask, double off_speed, double on_speed) { struct pc_turbo_info *ti; ti = auto_malloc(sizeof(struct pc_turbo_info)); ti->cpunum = cpunum; ti->port = port; ti->mask = mask; ti->cur_val = -1; ti->off_speed = off_speed; ti->on_speed = on_speed; timer_pulse(TIME_IN_SEC(0.1), (int) ti, pc_turbo_callback); return 0; }
static int st100_sh_start(const struct MachineSound *msound) { int mixing_levels[6] = {25,25,25,25,25,25}; memset(&st100loc, 0, sizeof(st100loc)); st100loc.channel = mixer_allocate_channels(6, mixing_levels); mixer_set_volume(st100loc.channel,0); // bit 1 mixer_set_volume(st100loc.channel+1,0); // bit 2 mixer_set_volume(st100loc.channel+2,0); // bit 3 mixer_set_volume(st100loc.channel+3,0); // bit 4 mixer_set_volume(st100loc.channel+4,0); // bit 5 mixer_set_volume(st100loc.channel+5,0); // bit 6 mixer_play_sample_16(st100loc.channel,s100Waveb1, sizeof(s100Waveb1), ST100_FREQ1*sizeof(s100Waveb1), 1); mixer_play_sample_16(st100loc.channel+1,s100Waveb1, sizeof(s100Waveb1), ST100_FREQ2*sizeof(s100Waveb1), 1); mixer_play_sample_16(st100loc.channel+2,s100Waveb1, sizeof(s100Waveb1), ST100_FREQ3*sizeof(s100Waveb1), 1); mixer_play_sample_16(st100loc.channel+3,s100Waveb1, sizeof(s100Waveb1), ST100_FREQ4*sizeof(s100Waveb1), 1); st100loc.freqb5 = 0; mixer_play_sample_16(st100loc.channel+4,s100Waveb5, sizeof(s100Waveb5), (freqarb5[st100loc.freqb5])*sizeof(s100Waveb5), 1); st100loc.freqb6 = 0; mixer_play_sample_16(st100loc.channel+5,s100Waveb6, sizeof(s100Waveb6), (freqarb6[st100loc.freqb6])*sizeof(s100Waveb6), 1); timer_pulse(TIME_IN_SEC(0.02),0,changefr); return 0; }
void intelflash_write(int chip, UINT32 address, UINT32 data) { struct flash_chip *c; if( chip >= FLASH_CHIPS_MAX ) { logerror( "intelflash_write: invalid chip %d\n", chip ); return; } c = &chips[ chip ]; // logerror( "%08x: intelflash_write( %d, %08x, %08x )\n", activecpu_get_pc(), chip, address, data ); switch( c->flash_mode ) { case FM_NORMAL: case FM_READSTATUS: case FM_READID: case FM_READAMDID3: switch( data & 0xff ) { case 0xf0: case 0xff: // reset chip mode c->flash_mode = FM_NORMAL; break; case 0x90: // read ID c->flash_mode = FM_READID; break; case 0x40: case 0x10: // program c->flash_mode = FM_WRITEPART1; break; case 0x50: // clear status reg c->status = 0x80; c->flash_mode = FM_READSTATUS; break; case 0x20: // block erase c->flash_mode = FM_CLEARPART1; break; case 0x60: // set master lock c->flash_mode = FM_SETMASTER; break; case 0x70: // read status c->flash_mode = FM_READSTATUS; break; case 0xaa: // AMD ID select part 1 if( ( address & 0xffff ) == 0x555 ) { c->flash_mode = FM_READAMDID1; } break; default: logerror( "Unknown flash mode byte %x\n", data & 0xff ); break; } break; case FM_READAMDID1: if( ( address & 0xffff ) == 0x2aa && ( data & 0xff ) == 0x55 ) { c->flash_mode = FM_READAMDID2; } else { logerror( "unexpected %08x=%02x in FM_READAMDID1\n", address, data & 0xff ); c->flash_mode = FM_NORMAL; } break; case FM_READAMDID2: if( ( address & 0xffff ) == 0x555 && ( data & 0xff ) == 0x90 ) { c->flash_mode = FM_READAMDID3; } else if( ( address & 0xffff ) == 0x555 && ( data & 0xff ) == 0x80 ) { c->flash_mode = FM_ERASEAMD1; } else if( ( address & 0xffff ) == 0x555 && ( data & 0xff ) == 0xa0 ) { c->flash_mode = FM_BYTEPROGRAM; } else if( ( address & 0xffff ) == 0x555 && ( data & 0xff ) == 0xf0 ) { c->flash_mode = FM_NORMAL; } else { logerror( "unexpected %08x=%02x in FM_READAMDID2\n", address, data & 0xff ); c->flash_mode = FM_NORMAL; } break; case FM_ERASEAMD1: if( ( address & 0xffff ) == 0x555 && ( data & 0xff ) == 0xaa ) { c->flash_mode = FM_ERASEAMD2; } else { logerror( "unexpected %08x=%02x in FM_ERASEAMD1\n", address, data & 0xff ); } break; case FM_ERASEAMD2: if( ( address & 0xffff ) == 0x2aa && ( data & 0xff ) == 0x55 ) { c->flash_mode = FM_ERASEAMD3; } else { logerror( "unexpected %08x=%02x in FM_ERASEAMD2\n", address, data & 0xff ); } break; case FM_ERASEAMD3: if( ( address & 0xffff ) == 0x555 && ( data & 0xff ) == 0x10 ) { // chip erase memset( c->flash_memory, 0xff, c->size); c->status = 1 << 3; c->flash_mode = FM_ERASEAMD4; timer_adjust( c->timer, TIME_IN_SEC( 17 ), chip, 0 ); } else if( ( data & 0xff ) == 0x30 ) { // sector erase // clear the 64k block containing the current address to all 0xffs switch( c->bits ) { case 8: { UINT8 *flash_memory = c->flash_memory; memset( &flash_memory[ address & ~0xffff ], 0xff, 64 * 1024 ); } break; case 16: { UINT16 *flash_memory = c->flash_memory; memset( &flash_memory[ address & ~0x7fff ], 0xff, 64 * 1024 ); } break; } c->status = 1 << 3; c->flash_mode = FM_ERASEAMD4; timer_adjust( c->timer, TIME_IN_SEC( 1 ), chip, 0 ); } else { logerror( "unexpected %08x=%02x in FM_ERASEAMD3\n", address, data & 0xff ); } break; case FM_BYTEPROGRAM: switch( c->bits ) { case 8: { UINT8 *flash_memory = c->flash_memory; flash_memory[ address ] = data; } break; default: logerror( "FM_BYTEPROGRAM not supported when c->bits == %d\n", c->bits ); break; } c->flash_mode = FM_NORMAL; break; case FM_WRITEPART1: switch( c->bits ) { case 8: { UINT8 *flash_memory = c->flash_memory; flash_memory[ address ] = data; } break; case 16: { UINT16 *flash_memory = c->flash_memory; flash_memory[ address ] = data; } break; default: logerror( "FM_WRITEPART1 not supported when c->bits == %d\n", c->bits ); break; } c->status = 0x80; c->flash_mode = FM_READSTATUS; break; case FM_CLEARPART1: if( ( data & 0xff ) == 0xd0 ) { // clear the 64k block containing the current address to all 0xffs switch( c->bits ) { case 8: { UINT8 *flash_memory = c->flash_memory; memset( &flash_memory[ address & ~0xffff ], 0xff, 64 * 1024 ); } break; case 16: { UINT16 *flash_memory = c->flash_memory; memset( &flash_memory[ address & ~0x7fff ], 0xff, 64 * 1024 ); } break; default: logerror( "FM_CLEARPART1 not supported when c->bits == %d\n", c->bits ); break; } c->status = 0x00; c->flash_mode = FM_READSTATUS; timer_adjust( c->timer, TIME_IN_SEC( 1 ), chip, 0 ); break; } else { logerror( "unexpected %02x in FM_CLEARPART1\n", data & 0xff ); } break; case FM_SETMASTER: switch( data & 0xff ) { case 0xf1: c->flash_master_lock = 1; break; case 0xd0: c->flash_master_lock = 0; break; default: logerror( "unexpected %08x=%02x in FM_SETMASTER:\n", address, data & 0xff ); break; } c->flash_mode = FM_NORMAL; break; } }
void osd_update_video_and_audio(mame_display *display) { int i; double time_limit; double current_time; int cpunum; /* if the visible area has changed, update it */ if (display->changed_flags & GAME_VISIBLE_AREA_CHANGED) { ui_set_visible_area(display->game_visible_area.min_x, display->game_visible_area.min_y, display->game_visible_area.max_x, display->game_visible_area.max_y); } /* is this the first update? if so, eat it */ if (!seen_first_update) { seen_first_update = TRUE; return; } /* if we have already aborted or completed, our work is done */ if ((state == STATE_ABORTED) || (state == STATE_DONE)) return; /* have we hit the time limit? */ current_time = timer_get_time(); time_limit = (current_testcase.time_limit != 0.0) ? current_testcase.time_limit : TIME_IN_SEC(600); if (current_time > time_limit) { state = STATE_ABORTED; report_message(MSG_FAILURE, "Time limit of %.2f seconds exceeded", time_limit); return; } /* update the runtime hash */ if (0) { for (cpunum = 0; cpunum < cpu_gettotalcpu(); cpunum++) { runtime_hash *= 57; runtime_hash ^= cpunum_get_reg(cpunum, REG_PC); /* TODO - Add more registers? */ } } for (i = 0; i < sizeof(commands) / sizeof(commands[i]); i++) { if (current_command->command_type == commands[i].command_type) { commands[i].proc(); break; } } /* if we are ready for the next command, advance to it */ if (state == STATE_READY) { /* if we are at the end, and we are dumping screenshots, and we didn't * just dump a screenshot, dump one now */ if ((test_flags & MESSTEST_ALWAYS_DUMP_SCREENSHOT) && (current_command[0].command_type != MESSTEST_COMMAND_SCREENSHOT) && (current_command[1].command_type == MESSTEST_COMMAND_END)) { dump_screenshot(TRUE); } current_command++; } }
static void reset_timer( void ) { timer_adjust( watchdog_timer, TIME_IN_SEC( 5 ), 0, 0 ); }
static MACHINE_INIT( nitedrvr ) { timer_pulse(TIME_IN_SEC(0.693 * (180000 + (2 * 330)) * 1e-6), 0, nitedrvr_crash_toggle); }
int osd_update(mame_time emutime) { int i; double time_limit; double current_time; int cpunum; render_target_get_primitives(target); /* is this the first update? if so, eat it */ if (!seen_first_update) { seen_first_update = TRUE; goto done; } /* if we have already aborted or completed, our work is done */ if ((state == STATE_ABORTED) || (state == STATE_DONE)) { mame_schedule_exit(Machine); goto done; } /* have we hit the time limit? */ current_time = timer_get_time(); time_limit = (current_testcase.time_limit != 0.0) ? current_testcase.time_limit : TIME_IN_SEC(600); if (current_time > time_limit) { state = STATE_ABORTED; report_message(MSG_FAILURE, "Time limit of %.2f seconds exceeded", time_limit); goto done; } /* update the runtime hash */ if (0) { for (cpunum = 0; cpunum < cpu_gettotalcpu(); cpunum++) { runtime_hash *= 57; runtime_hash ^= cpunum_get_reg(cpunum, REG_PC); /* TODO - Add more registers? */ } } for (i = 0; i < sizeof(commands) / sizeof(commands[i]); i++) { if (current_command->command_type == commands[i].command_type) { commands[i].proc(); break; } } /* if we are ready for the next command, advance to it */ if (state == STATE_READY) { /* if we are at the end, and we are dumping screenshots, and we didn't * just dump a screenshot, dump one now */ if ((test_flags & MESSTEST_ALWAYS_DUMP_SCREENSHOT) && (current_command[0].command_type != MESSTEST_COMMAND_SCREENSHOT) && (current_command[1].command_type == MESSTEST_COMMAND_END)) { dump_screenshot(TRUE); } current_command++; } done: return FALSE; }
static MACHINE_RESET( nitedrvr ) { timer_pulse(TIME_IN_SEC(0.693 * (180000 + (2 * 330)) * 1e-6), 0, nitedrvr_crash_toggle); nitedrvr_register_machine_vars(); }