bool GBLoadROM(struct GB* gb, struct VFile* vf) { GBUnloadROM(gb); gb->romVf = vf; gb->pristineRomSize = vf->size(vf); vf->seek(vf, 0, SEEK_SET); #ifdef _3DS gb->pristineRom = 0; if (gb->pristineRomSize <= romBufferSize) { gb->pristineRom = romBuffer; vf->read(vf, romBuffer, gb->pristineRomSize); } #else gb->pristineRom = vf->map(vf, gb->pristineRomSize, MAP_READ); #endif if (!gb->pristineRom) { return false; } gb->yankedRomSize = 0; gb->memory.rom = gb->pristineRom; gb->memory.romSize = gb->pristineRomSize; gb->romCrc32 = doCrc32(gb->memory.rom, gb->memory.romSize); // TODO: error check return true; }
void GBDestroy(struct GB* gb) { GBUnloadROM(gb); if (gb->biosVf) { gb->biosVf->close(gb->biosVf); gb->biosVf = 0; } GBMemoryDeinit(gb); GBVideoDeinit(&gb->video); GBSIODeinit(&gb->sio); }
void GBDestroy(struct GB* gb) { GBUnloadROM(gb); GBMemoryDeinit(gb); }