Detect ROM format

This commit is contained in:
wheremyfoodat 2022-10-01 03:22:20 +03:00
parent bef634114d
commit 7ba5c5a1bc
3 changed files with 19 additions and 5 deletions

View file

@ -50,7 +50,8 @@ public:
void run(); void run();
void runFrame(); void runFrame();
bool loadELF(std::filesystem::path& path); bool loadROM(const std::filesystem::path& path);
bool loadELF(const std::filesystem::path& path);
bool loadELF(std::ifstream& file); bool loadELF(std::ifstream& file);
void initGraphicsContext() { gpu.initGraphicsContext(); } void initGraphicsContext() { gpu.initGraphicsContext(); }
}; };

View file

@ -48,7 +48,20 @@ void Emulator::runFrame() {
cpu.runFrame(); cpu.runFrame();
} }
bool Emulator::loadELF(std::filesystem::path& path) { bool Emulator::loadROM(const std::filesystem::path& path) {
auto extension = path.extension();
if (extension == ".elf" || extension == ".axf")
return loadELF(path);
else if (extension == ".3ds")
Helpers::panic("3DS file");
else {
printf("Unknown file type\n");
return false;
}
}
bool Emulator::loadELF(const std::filesystem::path& path) {
loadedROM.open(path, std::ios_base::binary); // Open ROM in binary mode loadedROM.open(path, std::ios_base::binary); // Open ROM in binary mode
romType = ROMType::ELF; romType = ROMType::ELF;

View file

@ -9,10 +9,10 @@ int main (int argc, char *argv[]) {
emu.initGraphicsContext(); emu.initGraphicsContext();
auto elfPath = std::filesystem::current_path() / (argc > 1 ? argv[1] : "sm64.elf"); auto elfPath = std::filesystem::current_path() / (argc > 1 ? argv[1] : "Metroid2.3ds");
if (!emu.loadELF(elfPath)) { if (!emu.loadROM(elfPath)) {
// For some reason just .c_str() doesn't show the proper path // For some reason just .c_str() doesn't show the proper path
Helpers::panic("Failed to load ELF file: %s", elfPath.string().c_str()); Helpers::panic("Failed to load ROM file: %s", elfPath.string().c_str());
} }
emu.run(); emu.run();