Add save as .prg for overlay files

This commit is contained in:
drmortalwombat 2024-01-27 09:37:48 +01:00
parent 7f51d6330e
commit b0dc6fdd1e
3 changed files with 41 additions and 7 deletions

View File

@ -1177,9 +1177,17 @@ bool Compiler::BuildLZO(const char* targetPath)
bool Compiler::WriteOutputFile(const char* targetPath, DiskImage * d64)
{
char prgPath[200], mapPath[200], asmPath[200], lblPath[200], intPath[200], bcsPath[200], dbjPath[200];
char basePath[200];
strcpy_s(basePath, targetPath);
int i = strlen(basePath);
while (i > 0 && basePath[i - 1] != '/' && basePath[i - 1] != '\\' && basePath[i - 1] != ':')
i--;
if (i > 0)
basePath[i] = 0;
strcpy_s(prgPath, targetPath);
int i = strlen(prgPath);
i = strlen(prgPath);
while (i > 0 && prgPath[i - 1] != '.')
i--;
if (i > 0)
@ -1213,7 +1221,7 @@ bool Compiler::WriteOutputFile(const char* targetPath, DiskImage * d64)
strcat_s(prgPath, "prg");
if (mCompilerOptions & COPT_VERBOSE)
printf("Writing <%s>\n", prgPath);
mLinker->WritePrgFile(prgPath);
mLinker->WritePrgFile(prgPath, basePath);
}
}
else if (mCompilerOptions & COPT_TARGET_CRT)

View File

@ -1174,7 +1174,7 @@ bool Linker::WriteXexFile(const char* filename)
return false;
}
bool Linker::WritePrgFile(const char* filename)
bool Linker::WritePrgFile(const char* filename, const char* pathname)
{
FILE* file;
fopen_s(&file, filename, "wb");
@ -1185,9 +1185,35 @@ bool Linker::WritePrgFile(const char* filename)
int done = fwrite(mMemory + mProgramStart - 2, 1, mProgramEnd - mProgramStart + 2, file);
fclose(file);
return done == mProgramEnd - mProgramStart + 2;
if (done == mProgramEnd - mProgramStart + 2)
{
for (int i = 0; i < mOverlays.Size(); i++)
{
char ofname[200];
strcpy_s(ofname, pathname);
strcat_s(ofname, mOverlays[i]->mIdent->mString);
strcat_s(ofname, ".prg");
fopen_s(&file, ofname, "wb");
if (file)
{
int b = mOverlays[i]->mBank;
int s = mCartridgeBankStart[b];
mCartridge[b][s - 2] = s & 0xff;
mCartridge[b][s - 1] = s >> 8;
fwrite(mCartridge[b] + s - 22, 1, mCartridgeBankEnd[b] - s + 2, file);
fclose(file);
}
else
return false;
}
return true;
}
}
return false;
}

View File

@ -266,7 +266,7 @@ public:
// void AddReference(const LinkerReference& ref);
bool WritePrgFile(DiskImage * image, const char* filename);
bool WritePrgFile(const char* filename);
bool WritePrgFile(const char* filename, const char * pathname);
bool WriteXexFile(const char* filename);
bool WriteMapFile(const char* filename);
bool WriteAsmFile(const char* filename, const char * version);