void GBARRInitRecord(struct GBA* gba) { if (!gba || !gba->rr) { return; } if (gba->rr->initFrom & INIT_FROM_SAVEGAME) { if (gba->rr->savedata) { gba->rr->savedata->close(gba->rr->savedata); } gba->rr->savedata = gba->rr->openSavedata(gba->rr, O_TRUNC | O_CREAT | O_WRONLY); GBASavedataClone(&gba->memory.savedata, gba->rr->savedata); gba->rr->savedata->close(gba->rr->savedata); gba->rr->savedata = gba->rr->openSavedata(gba->rr, O_RDONLY); GBASavedataMask(&gba->memory.savedata, gba->rr->savedata); } else { GBASavedataMask(&gba->memory.savedata, 0); } if (gba->rr->initFrom & INIT_FROM_SAVESTATE) { struct VFile* vf = gba->rr->openSavestate(gba->rr, O_TRUNC | O_CREAT | O_RDWR); GBASaveStateNamed(gba, vf, SAVESTATE_SAVEDATA); vf->close(vf); } else { ARMReset(gba->cpu); } }
bool retro_load_game(const struct retro_game_info* game) { if (game->data) { data = malloc(game->size); memcpy(data, game->data, game->size); rom = VFileFromMemory(data, game->size); } else { data = 0; rom = VFileOpen(game->path, O_RDONLY); } if (!rom) { return false; } if (!GBAIsROM(rom)) { return false; } savedata = malloc(SIZE_CART_FLASH1M); save = VFileFromMemory(savedata, SIZE_CART_FLASH1M); GBALoadROM(&gba, rom, save, game->path); GBAOverrideApplyDefaults(&gba); ARMReset(&cpu); return true; }
void retro_reset(void) { ARMReset(&cpu); if (rumbleCallback) { CircleBufferClear(&rumbleHistory); } }
void GBARRInitPlay(struct GBA* gba) { if (!gba || !gba->rr) { return; } if (gba->rr->initFrom & INIT_FROM_SAVEGAME) { if (gba->rr->savedata) { gba->rr->savedata->close(gba->rr->savedata); } gba->rr->savedata = gba->rr->openSavedata(gba->rr, O_RDONLY); GBASavedataMask(&gba->memory.savedata, gba->rr->savedata); } else { GBASavedataMask(&gba->memory.savedata, 0); } if (gba->rr->initFrom & INIT_FROM_SAVESTATE) { struct VFile* vf = gba->rr->openSavestate(gba->rr, O_RDONLY); GBALoadStateNamed(gba, vf, SAVESTATE_SCREENSHOT | SAVESTATE_SAVEDATA); vf->close(vf); } else { ARMReset(gba->cpu); } }
static void _reset(struct CLIDebugger* debugger, struct CLIDebugVector* dv) { UNUSED(dv); ARMReset(debugger->d.cpu); _printStatus(debugger, 0); }