void Tetrimino::mainloop() { while (true){ switch (OptionData::tetriminoStatus){ case OptionData::MENULOOP: menuloop(); break; case OptionData::GAMELOOP: gameloop(); break; case OptionData::QUIT: return; } } }
int main(int argc, char *argv[]) { /* curses initialization */ initscr(); // start_color(); cbreak(); noecho(); keypad(stdscr, TRUE); // init_pair(1, COLOR_YELLOW, COLOR_BLACK); /*************************************/ clear(); menuloop(); endwin(); return 0; }
// Main function int main(int argc, char **argv) { int battimeout = 0; char fpstxt[16]; // Open debug files PokeDebugFOut = fopen("dbg_stdout.txt", "w"); PokeDebugFErr = fopen("dbg_stderr.txt", "w"); // Init video PokeDPrint(POKEMSG_OUT, "%s\n\n", AppName); PokeMini_InitDirs(argv[0], NULL); CommandLineInit(); CommandLine.low_battery = 2; // PSP can report battery status CommandLineConfFile("pokemini.cfg", "pokemini_psp.cfg", CustomConf); JoystickSetup("PSP", 0, 30000, PSP_KeysNames, 16, PSP_KeysMapping); // PSP Init and set screen PSP_Init(); setup_screen(); // Create emulator and load test roms PokeDPrint(POKEMSG_OUT, "Starting emulator...\n"); PokeMini_Create(POKEMINI_GENSOUND | POKEMINI_AUTOBATT, 0); // Setup palette and LCD mode PokeMini_VideoPalette_Init(PokeMini_RGB16, 1); PokeMini_VideoPalette_Index(CommandLine.palette, CommandLine.custompal, CommandLine.lcdcontrast, CommandLine.lcdbright); PokeMini_ApplyChanges(); // Load stuff PokeMini_UseDefaultCallbacks(); if (!PokeMini_LoadFromCommandLines("Using FreeBIOS", "EEPROM data will be discarded!")) { UI_Status = UI_STATUS_MENU; } // Enable sound & init UI PokeDPrint(POKEMSG_OUT, "Running emulator...\n"); UIMenu_Init(); enablesound(CommandLine.sound); sceCtrlSetSamplingCycle(0); sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); // Emulator's loop u64 tickcurr; u64 fpsticknext,fpstickres = (u64)sceRtcGetTickResolution(); u64 frmticknext, frmtickres = (u64)sceRtcGetTickResolution() / 36; sceRtcGetCurrentTick(&tickcurr); fpsticknext = tickcurr + fpstickres; frmticknext = tickcurr + frmtickres; int fps = 72, fpscnt = 0; strcpy(fpstxt, ""); while (emurunning) { // Emulate 2 frames PokeMini_EmulateFrame(); PokeMini_EmulateFrame(); if (RequireSoundSync) { while (MinxAudio_SyncWithAudio()) sceKernelDelayThread(1000); } else { do { sceRtcGetCurrentTick(&tickcurr); sceKernelDelayThread(1000); } while (tickcurr < frmticknext); frmticknext = tickcurr + frmtickres; // Aprox 36 times per sec } // Screen rendering PSP_ClearDraw(); if (PokeMini_Rumbling) { PokeMini_VideoBlit((uint16_t *)PSP_DrawVideo + pm_offset + PokeMini_GenRumbleOffset(512), 512); } else { PokeMini_VideoBlit((uint16_t *)PSP_DrawVideo + pm_offset, 512); } LCDDirty = 0; // Display FPS counter if (clc_displayfps) { sceRtcGetCurrentTick(&tickcurr); if (tickcurr >= fpsticknext) { fpsticknext = tickcurr + fpstickres; fps = fpscnt; fpscnt = 0; sprintf(fpstxt, "%i FPS", fps); } else fpscnt++; UIDraw_String_16((uint16_t *)PSP_DrawVideo, 512, 4, 4, 10, fpstxt, UI_Font1_Pal16); } // Handle keys HandleKeys(); // Menu if (UI_Status == UI_STATUS_MENU) menuloop(); // Wait VSync & Render (72 Hz) PSP_Flip(); // Check battery if (battimeout <= 0) { PokeMini_LowPower(scePowerIsLowBattery()); battimeout = 600; } else battimeout--; } // Stop sound & free UI enablesound(0); UIMenu_Destroy(); // Save Stuff PokeMini_SaveFromCommandLines(1); // Terminate... PokeDPrint(POKEMSG_OUT, "Shutdown emulator...\n"); PokeMini_VideoPalette_Free(); PokeMini_Destroy(); // Close debug files fclose(PokeDebugFOut); fclose(PokeDebugFErr); // PSP Quit PSP_Quit(); return 0; }
// Main function int main(int argc, char **argv) { SDL_Joystick *joy; SDL_Event event; // Process arguments printf("%s\n\n", AppName); PokeMini_InitDirs(argv[0], NULL); CommandLineInit(); CommandLineConfFile("pokemini.cfg", NULL, NULL); if (!CommandLineArgs(argc, argv, NULL)) { PrintHelpUsage(stdout); return 1; } JoystickSetup("WIZ", 0, 0, WIZ_KeysNames, 16, WIZ_KeysMapping); // Initialize SDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } joy = SDL_JoystickOpen(0); atexit(SDL_Quit); // Clean up on exit // Set video spec and check if is supported if (!PokeMini_SetVideo((TPokeMini_VideoSpec *)&PokeMini_Video3x3, 16, CommandLine.lcdfilter, CommandLine.lcdmode)) { fprintf(stderr, "Couldn't set video spec\n"); exit(1); } UIMenu_SetDisplay(288, 192, PokeMini_BGR16, (uint8_t *)PokeMini_BG3, (uint16_t *)PokeMini_BG3_PalBGR16, (uint32_t *)PokeMini_BG3_PalBGR32); // Initialize the display screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE); // SDL_HWSURFACE | SDL_DOUBLEBUF if (screen == NULL) { fprintf(stderr, "Couldn't set video mode: %s\n", SDL_GetError()); exit(1); } PixPitch = screen->pitch / 2; ScOffP = (24 * PixPitch) + 16; // Initialize the sound SDL_AudioSpec audfmt; audfmt.freq = 44100; audfmt.format = AUDIO_U8; audfmt.channels = 1; audfmt.samples = SOUNDBUFFER; audfmt.callback = emulatorsound; audfmt.userdata = NULL; // Open the audio device if (SDL_OpenAudio(&audfmt, NULL) < 0) { fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); fprintf(stderr, "Audio will be disabled\n"); AudioEnabled = 0; } else { AudioEnabled = 1; } // Disable key repeat and hide cursor SDL_EnableKeyRepeat(0, 0); SDL_ShowCursor(SDL_DISABLE); // Initialize the emulator printf("Starting emulator...\n"); if (!PokeMini_Create(0, PMSOUNDBUFF)) { fprintf(stderr, "Error while initializing emulator.\n"); } // Setup palette and LCD mode PokeMini_VideoPalette_Init(PokeMini_BGR16, 1); PokeMini_VideoPalette_Index(CommandLine.palette, CommandLine.custompal, CommandLine.lcdcontrast, CommandLine.lcdbright); PokeMini_ApplyChanges(); // Load stuff PokeMini_UseDefaultCallbacks(); if (!PokeMini_LoadFromCommandLines("Using FreeBIOS", "EEPROM data will be discarded!")) { UI_Status = UI_STATUS_MENU; } // Enable sound & init UI printf("Starting emulator...\n"); UIMenu_Init(); enablesound(CommandLine.sound); // Emulator's loop unsigned long time, NewTickSync = 0; while (emurunning) { // Emulate and syncronize if (RequireSoundSync) { PokeMini_EmulateFrame(); // Sleep a little in the hope to free a few samples while (MinxAudio_SyncWithAudio()) SDL_Delay(1); } else { time = SDL_GetTicks(); PokeMini_EmulateFrame(); do { SDL_Delay(1); // This lower CPU usage time = SDL_GetTicks(); } while (time < NewTickSync); NewTickSync = time + 13; // Aprox 72 times per sec } // Screen rendering SDL_FillRect(screen, NULL, 0); if (SDL_LockSurface(screen) == 0) { // Render the menu or the game screen if (PokeMini_Rumbling) { PokeMini_VideoBlit((uint16_t *)screen->pixels + ScOffP + PokeMini_GenRumbleOffset(PixPitch), PixPitch); } else { PokeMini_VideoBlit((uint16_t *)screen->pixels + ScOffP, PixPitch); } LCDDirty = 0; // Unlock surface SDL_UnlockSurface(screen); SDL_Flip(screen); } // Handle events while (SDL_PollEvent(&event)) handleevents(&event); // Menu if (UI_Status == UI_STATUS_MENU) menuloop(); } // Disable sound & free UI enablesound(0); UIMenu_Destroy(); // Save Stuff PokeMini_SaveFromCommandLines(1); // Close joystick if (joy) SDL_JoystickClose(joy); // Terminate... printf("Shutdown emulator...\n"); PokeMini_VideoPalette_Free(); PokeMini_Destroy(); return 0; }