#include "Cartridge.hpp" #include #include #include const unsigned int HEADER_SIZE = 16u; #pragma pack(push, 1) struct Header { uint8_t string[4]; uint8_t prgSize; uint8_t chrSize; uint8_t flags6; uint8_t flags7; uint8_t flags8; uint8_t flags9; uint8_t flags10; uint8_t padding[5]; }; #pragma pack(pop) void Cartridge::Load(char const* filename) { std::ifstream file(filename, std::ios::binary); if (file.is_open()) { char buf[HEADER_SIZE]; file.read(buf, HEADER_SIZE); auto header = reinterpret_cast(buf); // Trainer if (header->flags6 & 0x4) { char trainerBuf[512]; file.read(trainerBuf, 512); } uint32_t prgSize = header->prgSize * 16384; prgROM.resize(prgSize); file.read(reinterpret_cast(prgROM.data()), prgSize); uint32_t chrSize = header->chrSize * 8192; if (chrSize > 0) { chrROM.resize(chrSize); file.read(reinterpret_cast(chrROM.data()), chrSize); } file.close(); } }