void MyPS2Application::Update() { // Tell DMAC to send previous graphics data to Graphics Synthesiser (GS) VIFDynamicDMA.Fire(); // Read the control pad into data buffer pad_update(PAD_0); // Check for exit condition if((pad[0].buttons & PAD_START)&&(pad[0].buttons & PAD_SELECT)) quitting_ = true; // State Handler switch (game_state) { case INTRO: Intro(); break; case MENU: Menu(); break; case GAME: Game(); break; case GAME_OVER: GameOver(); break; } DSP0.HandleAudio(); DSP1.HandleAudio(); }
void ogc_input__update(void) { int i; int num = 0; /* update inputs */ PAD_ScanPads(); #ifdef HW_RVL WPAD_ScanPads(); if (WPAD_ButtonsHeld(0) & WPAD_BUTTON_HOME) { /* do additional check here to prevent bad controller configuration */ ConfigRequested = 1; return; } #endif for (i=0; i<MAX_DEVICES; i++) { input.pad[i] = 0; if (input.dev[i] != NO_DEVICE) { if (config.input[num].device == 0) pad_update(config.input[num].port, i); #ifdef HW_RVL else if (config.input[num].device > 0) wpad_update(config.input[num].port,i, config.input[num].device - 1); #endif num ++; } } }
void ogc_input__update(void) { /* reset inputs */ coleco.keypad[0] |= 0xf0; coleco.keypad[1] |= 0xf0; input.pad[0] = 0; input.pad[1] = 0; input.system = 0; pad_update(); #ifdef HW_RVL wpad_update(); #endif }
void show_fatal_error(void) { if (fatal_error) { int sx, sy, ex, ey; int width = uifont_get_string_width(fatal_error_message); int update = 1; sx = (SCR_WIDTH - width) >> 1; sy = (SCR_HEIGHT - FONTSIZE) >> 1; ex = sx + width; ey = sy + (FONTSIZE - 1); video_set_mode(32); load_background(WP_LOGO); while (Loop != LOOP_EXIT) { if (update) { show_background(); small_icon_shadow(6, 3, UI_COLOR(UI_PAL_TITLE), ICON_SYSTEM); uifont_print_shadow(32, 5, UI_COLOR(UI_PAL_TITLE), TEXT(FATAL_ERROR)); draw_dialog(sx - FONTSIZE/2, sy - FONTSIZE/2, ex + FONTSIZE/2, ey + FONTSIZE/2); uifont_print_shadow_center(sy, UI_COLOR(UI_PAL_SELECT), fatal_error_message); update = draw_battery_status(1); update |= draw_volume_status(1); video_flip_screen(1); } else { update = draw_battery_status(0); update |= draw_volume_status(0); video_wait_vsync(); } pad_update(); if (pad_pressed(PSP_CTRL_ANY)) break; } pad_wait_clear(); fatal_error = 0; } }
int osd_keyboard(void) { psp_update_keys(); # if 0 //LUDO: TO_BE_DONE ! /* switch autofire */ autofireon ^= 1; /* update inputs */ pad_update(); #ifdef HW_RVL wpad_update(); #endif return cart_reload; # else return 0; # endif }
int adhocSelect(void) { int top = 0; int rows = 11; int currentState = PSP_LISTING; int prev_max = 0; int update = 1; unsigned char mac[6]; char name[64]; char temp[64]; char title[32]; sprintf(title, "AdHoc - %s", game_name); msg_screen_init(WP_LOGO, ICON_SYSTEM, title); while (1) { pad_update(); msg_set_text_color(0xffff); switch (currentState) { case PSP_LISTING: Server = 0; if (update) { msg_screen_init(WP_LOGO, ICON_SYSTEM, title); msg_printf(TEXT(SELECT_A_SERVER_TO_CONNECT_TO)); msg_printf("\n"); DisplayPspList(top, rows); update = 0; } if (pad_pressed(PSP_CTRL_UP)) { if (pos > 0) pos--; update = 1; } else if (pad_pressed(PSP_CTRL_DOWN)) { if (pos < max - 1) pos++; update = 1; } else if (pad_pressed(PSP_CTRL_CIRCLE)) { if (GetPspEntry(mac, name) > 0) { if (strcmp(name, g_matchingData) == 0) { currentState = PSP_SELECTING; sceNetAdhocMatchingSelectTarget(matchingId, mac, 0, NULL); update = 1; } } } else if (pad_pressed(PSP_CTRL_TRIANGLE)) { msg_set_text_color(0xffffffff); adhocDisconnect(); pad_wait_clear(); return -1; } if (matchChanged) { if (g_matchEvent == MATCHING_SELECTED) { memcpy(mac, g_mac, 6); strcpy(name, g_matchOptData); currentState = PSP_SELECTED; } update = 1; } break; case PSP_SELECTING: if (update) { msg_screen_init(WP_LOGO, ICON_SYSTEM, title); sceNetEtherNtostr(mac, temp); msg_printf(TEXT(WAITING_FOR_x_TO_ACCEPT_THE_CONNECTION), temp); msg_printf(TEXT(TO_CANCEL_PRESS_CROSS)); update = 0; } if (pad_pressed(PSP_CTRL_CROSS)) { sceNetAdhocMatchingCancelTarget(matchingId, mac); currentState = PSP_LISTING; update = 1; } if (matchChanged) { switch (g_matchEvent) { case MATCHING_SELECTED: sceNetAdhocMatchingCancelTarget(matchingId, mac); break; case MATCHING_ESTABLISHED: currentState = PSP_ESTABLISHED; break; case MATCHING_REJECTED: currentState = PSP_LISTING; break; } update = 1; } break; case PSP_SELECTED: Server = 1; if (update) { msg_screen_init(WP_LOGO, ICON_SYSTEM, title); sceNetEtherNtostr(mac, temp); msg_printf(TEXT(x_HAS_REQUESTED_A_CONNECTION), temp); msg_printf(TEXT(TO_ACCEPT_THE_CONNECTION_PRESS_CIRCLE_TO_CANCEL_PRESS_CIRCLE)); update = 0; } if (pad_pressed(PSP_CTRL_CROSS)) { sceNetAdhocMatchingCancelTarget(matchingId, mac); currentState = PSP_LISTING; update = 1; } else if (pad_pressed(PSP_CTRL_CIRCLE)) { sceNetAdhocMatchingSelectTarget(matchingId, mac, 0, NULL); currentState = PSP_WAIT_EST; update = 1; } if (matchChanged) { if (g_matchEvent == MATCHING_CANCELED) { currentState = PSP_LISTING; } update = 1; } break; case PSP_WAIT_EST: if (matchChanged) { if (g_matchEvent == MATCHING_ESTABLISHED) { currentState = PSP_ESTABLISHED; } update = 1; } break; } matchChanged = 0; if (currentState == PSP_ESTABLISHED) break; if (top > max - rows) top = max - rows; if (top < 0) top = 0; if (pos >= top + rows) top = pos - rows + 1; if (pos < top) top = pos; if (max != prev_max) { prev_max = max; update = 1; } sceDisplayWaitVblankStart(); } msg_set_text_color(0xffffffff); if (Server) sceWlanGetEtherAddr(mac); sceNetEtherNtostr(mac, temp); g_ssid[0] = temp[ 9]; g_ssid[1] = temp[10]; g_ssid[2] = temp[12]; g_ssid[3] = temp[13]; g_ssid[4] = temp[15]; g_ssid[5] = temp[16]; g_ssid[6] = '\0'; return adhocStartP2P(); }
int main(void) { // Make sure these four lines are put first since some of the // other classes need the managers to be initialised so they // can pick up the correct data. SPS2Manager.Initialise(4096); // 4096 * 4K Pages = 16MB Total VIFStaticDMA.Initialise(3072); // 1536 * 4K Pages = 6MB Static DMA VIFDynamicDMA.Initialise(256); // 256 * 4K Pages * 2 Buffers = // 2MB Dynamic DMA Pipeline.Initialise(); // Initialise graphics pipline class // Initialise Lighting // Three lights and Ambient light // Direction vector Colour Pipeline.SetLight1(Vector4( 0.0f, 0.5f, -1.0f, 0.0f), Vector4( 0.0f, 0.0f, 128.0f, 0.0f)); Pipeline.SetLight2(Vector4( 1.0f, -0.5f, -1.0f, 0.0f), Vector4( 0.0f, 128.0f, 0.0f, 0.0f)); Pipeline.SetLight3(Vector4( -1.0f, -0.5f, -1.0f, 0.0f), Vector4( 128.0f, 0.0f, 0.0f, 0.0f)); // Colour Pipeline.SetAmbient(Vector4(50.0f,50.0f,50.0f,50.0f)); // Terrain to render CTerrain Terrain; // Performance timer - call after SPS2Manager.Initialise() CTimer Timer; // Set up audio devices AudioDevice DSP0(0); // Set up music in sound buffer 0 SoundSample music("go_cart", &DSP0); // Play the music! music.Play(); // Initialise control pad 0 if(!pad_init(PAD_0, PAD_INIT_LOCK | PAD_INIT_ANALOGUE | PAD_INIT_PRESSURE)) { printf("Failed to initialise control pad\n"); pad_cleanup(PAD_0); exit(0); } enable_actuator(0, 1, 1); // Initialise the VU1 manager class CVU1MicroProgram VU1MicroCode(&VU_vu1code_start, &VU_vu1code_end); // Upload the microcode VU1MicroCode.Upload(); // Register our signal function for every possible signal (i.e. ctrl + c) for(int sig=0; sig<128; sig++) signal(sig, sig_handle); // Set up the DMA packet to clear the screen. We want to clear to blue. SPS2Manager.InitScreenClear(0, 0x25, 0x50); // Set Up Camera -------------------------------------------------------------- Pipeline.PositionCamera(Vector4(0.0f, 55.0f, 80.0f, 1.0f), Vector4(0.0f, 40.0f, 0.0f, 1.0f)); // Load in texture and models ---------------------------------------------- // Set up asset loader AssetManager assetManager; assetManager.Initialize(); // Terrain texture CTexture* terrainTexture = assetManager.GetTexture("terrain"); // Set up game manager GameManager* gameManager = new GameManager; gameManager->Initialize(); // The main Render loop ------------------------------------------------------- while(g_bLoop) { // Process Audio DSP0.HandleAudio(); VIFDynamicDMA.Fire(); // Update Control Pad pad_update(PAD_0); Pipeline.Update(0, 0, 0, 0, 0); // Logic g_bLoop = gameManager->Logic(); // Render SPS2Manager.BeginScene(); // Render terrain AssetManager::GetSingleton().LoadTexture(terrainTexture); Matrix4x4 matWorld, matTrans, matScale; matTrans.Translation(0.0f, -30.0f, 0.0f); matScale.Scaling(20.0f); matWorld = matScale * matTrans; Terrain.SetWorldMatrix(matWorld); Terrain.Render(); // Render scene gameManager->Render(); SPS2Manager.EndScene(); // Dump screenshot if requested if(pad[0].pressed & PAD_R2)SPS2Manager.ScreenShot(); } // Shutdown Audio DSP0.Close(); // Shutdown control pad set_actuator(0, 0, 0); pad_cleanup(PAD_0); // Shutdown game manager gameManager->Shutdown(); // Shutdown asset manager assetManager.Shutdown(); return 0; }
void bios_select(int flag) { int sel = 0, rows = 13, top = 0; int i, prev_sel, update = 1; int old_bios = neogeo_bios; if (!bios_check(flag)) return; if (neogeo_bios == -1) { sel = 0; while (sel < BIOS_MAX) { if (bios_exist[sel]) break; sel++; } } else sel = neogeo_bios; if (top > BIOS_MAX - rows) top = BIOS_MAX - rows; if (top < 0) top = 0; if (sel >= BIOS_MAX) sel = 0; if (sel < 0) sel = BIOS_MAX - 1; if (sel >= top + rows) top = sel - rows + 1; if (sel < top) top = sel; pad_wait_clear(); load_background(BG_DEFAULT); ui_popup_reset(); while (1) { if (update) { int width = uifont_get_string_width(TEXT(SELECT_BIOS_AND_PRESS_CIRCLE_BUTTON)); show_background(); small_icon(8, 3, UI_COLOR(UI_PAL_TITLE), ICON_SYSTEM); uifont_print(36, 5, UI_COLOR(UI_PAL_TITLE), TEXT(BIOS_SELECT_MENU)); uifont_print(477 - width, 271 - 16, UI_COLOR(UI_PAL_SELECT), TEXT(SELECT_BIOS_AND_PRESS_CIRCLE_BUTTON)); if (sel != 0) uifont_print(118, 24, UI_COLOR(UI_PAL_SELECT), FONT_UPTRIANGLE); for (i = 0; i < rows; i++) { if (top + i >= BIOS_MAX) break; if (top + i == sel) { uifont_print(12, 40 + i * 17, UI_COLOR(UI_PAL_SELECT), FONT_RIGHTTRIANGLE); uifont_print(32, 40 + i * 17, UI_COLOR(UI_PAL_SELECT), bios_name[top + i]); } else { if (bios_exist[top + i]) uifont_print(32, 40 + i * 17, UI_COLOR(UI_PAL_NORMAL), bios_name[top + i]); else uifont_print(32, 40 + i * 17, COLOR_DARKGRAY, bios_name[top + i]); } } if (sel + rows < BIOS_MAX) uifont_print(118, 260, UI_COLOR(UI_PAL_SELECT), FONT_DOWNTRIANGLE); update = draw_battery_status(1); update |= ui_show_popup(1); video_flip_screen(1); } else { update = draw_battery_status(0); update |= ui_show_popup(0); video_wait_vsync(); } prev_sel = sel; if (pad_pressed(PSP_CTRL_UP)) { if (sel > 0) { if (bios_exist[sel - 1]) { sel--; } else { for (i = sel - 2; i >= 0; i--) if (bios_exist[i]) break; if (i != -1) sel = i; } } } else if (pad_pressed(PSP_CTRL_DOWN)) { if (sel < BIOS_MAX - 1) { if (bios_exist[sel + 1]) { sel++; } else { for (i = sel + 2; i < BIOS_MAX; i++) if (bios_exist[i]) break; if (i != BIOS_MAX) sel = i; } } } else if (pad_pressed(PSP_CTRL_CIRCLE)) { neogeo_bios = sel; break; } if (top > BIOS_MAX - rows) top = BIOS_MAX - rows; if (top < 0) top = 0; if (sel >= BIOS_MAX) sel = 0; if (sel < 0) sel = BIOS_MAX - 1; if (sel >= top + rows) top = sel - rows + 1; if (sel < top) top = sel; if (prev_sel != sel) update = 1; pad_update(); if (Loop == LOOP_EXIT) break; } pad_wait_clear(); ui_popup_reset(); if (flag) load_background(WP_LOGO); else load_background(WP_FILER); #ifdef ADHOC if (flag != 2) #endif { if (old_bios != neogeo_bios) { if (!flag) ui_popup(TEXT(ALL_NVRAM_FILES_ARE_REMOVED)); delete_files("nvram", ".nv"); } } }
void psxRcntUpdate() { #ifdef DEBUG_ANALYSIS dbg_anacnt_psxRcntUpdate++; #endif pcsx4all_prof_start_with_pause(PCSX4ALL_PROF_COUNTERS,PCSX4ALL_PROF_CPU); u32 cycle; cycle = psxRegs.cycle; #ifdef USE_EXTRA_IO_CYCLES // CHUI: Añado ResetIoCycle para permite que en el proximo salto entre en psxBranchTest ResetIoCycle(); #endif // rcnt 0. if( cycle - rcnts[0].cycleStart >= rcnts[0].cycle ) { psxRcntReset( 0 ); } // rcnt 1. if( cycle - rcnts[1].cycleStart >= rcnts[1].cycle ) { psxRcntReset( 1 ); } // rcnt 2. if( cycle - rcnts[2].cycleStart >= rcnts[2].cycle ) { psxRcntReset( 2 ); } // rcnt base. if( cycle - rcnts[3].cycleStart >= rcnts[3].cycle ) { psxRcntReset( 3 ); spuSyncCount++; hSyncCount++; // Update spu. if( spuSyncCount >= SPU_UPD_INTERVAL ) { spuSyncCount = 0; SPU_async(); } /* // For the best times. :D // VSync irq. if( hSyncCount == VBlankStart[Config.PsxType] ) { setIrq( 0x01 ); } */ // Update lace. (with InuYasha fix) if( hSyncCount >= (Config.VSyncWA ? UDIV(HSyncTotal[Config.PsxType],BIAS) : HSyncTotal[Config.PsxType]) ) { #ifdef DEBUG_BIOS dbg("UpdateLace"); #endif hSyncCount = 0; setIrq( 0x01 ); GPU_updateLace(); pad_update(); #ifdef DEBUG_END_FRAME { static unsigned _endframe_=0; static unsigned _frametime_[DEBUG_END_FRAME+1]; _frametime_[_endframe_]=(get_ticks() #ifndef TIME_IN_MSEC /1000 #endif ); _endframe_++; if (_endframe_>DEBUG_END_FRAME) { unsigned i; for(i=1;i<_endframe_;i++) printf("FRAME %u = %u msec\n",i,_frametime_[i]-_frametime_[i-1]); pcsx4all_exit(); } } #endif if ((toSaveState)&&(SaveState_filename)) { toSaveState=0; SaveState(SaveState_filename); if (toExit) pcsx4all_exit(); } if ((toLoadState)&&(SaveState_filename)) { toLoadState=0; LoadState(SaveState_filename); pcsx4all_prof_reset(); #ifdef PROFILER_PCSX4ALL _pcsx4all_prof_end(PCSX4ALL_PROF_CPU,0); #endif pcsx4all_prof_start(PCSX4ALL_PROF_CPU); psxCpu->Execute(); pcsx4all_prof_end(PCSX4ALL_PROF_CPU); pcsx4all_exit(); } } } pcsx4all_prof_end_with_resume(PCSX4ALL_PROF_COUNTERS,PCSX4ALL_PROF_CPU); }