#include #include #include #include #include "../../memory.h" #define GT1TOROM_MAJOR_VERSION "0.2" #define GT1TOROM_MINOR_VERSION "0" #define GT1TOROM_VERSION_STR "gt1torom v" GT1TOROM_MAJOR_VERSION "." GT1TOROM_MINOR_VERSION #define GT1_MAX_SIZE (1<<16) #define TRAMPOLINE_START 0x00FB uint8_t _gt1[GT1_MAX_SIZE]; bool writeRomDataWithTrampoline(const std::string& outputFilename0, const std::string& outputFilename1, std::ofstream& outfile0, std::ofstream& outfile1, uint16_t& startAddress, uint16_t size, bool _default) { uint16_t trampolineOffset = 0x0000; for(uint16_t i=0; i \n"); return 1; } std::string inputFilename = std::string(argv[1]); if(inputFilename.find(".gt1") == inputFilename.npos && inputFilename.find(".GT1") == inputFilename.npos) { fprintf(stderr, "Wrong file extension in %s : must be '.gt1'\n", inputFilename.c_str()); return 1; } // Check for gt1 file std::ifstream gt1file(inputFilename, std::ios::binary | std::ios::in); if(!gt1file.is_open()) { fprintf(stderr, "gt1torom : couldn't open %s GT1 file.\n", inputFilename.c_str()); return 1; } // Load gt1 file gt1file.read((char *)_gt1, GT1_MAX_SIZE); if(gt1file.bad()) { fprintf(stderr, "gt1torom : failed to read %s GT1 file.\n", inputFilename.c_str()); return 1; } uint16_t gt1Size = uint16_t(gt1file.gcount()); std::string outputFilename0 = std::string(argv[2]) + "_ti"; std::ofstream outfile0(outputFilename0, std::ios::binary | std::ios::out); if(!outfile0.is_open()) { fprintf(stderr, "gt1torom : failed to open '%s'\n", outputFilename0.c_str()); return 1; } std::string outputFilename1 = std::string(argv[2]) + "_td"; std::ofstream outfile1(outputFilename1, std::ios::binary | std::ios::out); if(!outfile1.is_open()) { fprintf(stderr, "gt1torom : failed to open '%s'\n", outputFilename1.c_str()); return 1; } // Handles hex numbers uint16_t startAddress = 0x0000; std::stringstream ss; ss << std::hex << argv[3]; ss >> startAddress; if(!writeRomDataWithTrampoline(outputFilename0, outputFilename1, outfile0, outfile1, startAddress, gt1Size, false)) return 1; if(!writeRomDataWithTrampoline(outputFilename0, outputFilename1, outfile0, outfile1, startAddress, TRAMPOLINE_START + 1 - LO_BYTE(startAddress), true)) return 1; fprintf(stderr, "%s success : next available address : 0x%04X\n", GT1TOROM_VERSION_STR, startAddress - 1); return 0; }