Example #1
0
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);
	}
}
Example #2
0
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;
}
Example #3
0
void retro_reset(void) {
	ARMReset(&cpu);

	if (rumbleCallback) {
		CircleBufferClear(&rumbleHistory);
	}
}
Example #4
0
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);
	}
}
Example #5
0
static void _reset(struct CLIDebugger* debugger, struct CLIDebugVector* dv) {
	UNUSED(dv);
	ARMReset(debugger->d.cpu);
	_printStatus(debugger, 0);
}