Fix overlay prg file save
This commit is contained in:
parent
2ad71ef867
commit
974688a8a5
|
@ -221,18 +221,16 @@ __asm getpch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int kbhit(void)
|
char kbhit(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
lda $c6
|
lda $c6
|
||||||
sta accu
|
sta accu
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int getche(void)
|
char getche(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
@ -243,13 +241,11 @@ int getche(void)
|
||||||
|
|
||||||
sta accu
|
sta accu
|
||||||
jsr putpch
|
jsr putpch
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int getch(void)
|
char getch(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
@ -259,23 +255,19 @@ int getch(void)
|
||||||
beq L1
|
beq L1
|
||||||
|
|
||||||
sta accu
|
sta accu
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int getchx(void)
|
char getchx(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
jsr getpch
|
jsr getpch
|
||||||
sta accu
|
sta accu
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void putch(int c)
|
void putch(char c)
|
||||||
{
|
{
|
||||||
__asm {
|
__asm {
|
||||||
lda c
|
lda c
|
||||||
|
@ -296,7 +288,7 @@ void textcursor(bool show)
|
||||||
*(char *)0xcc = show ? 0 : 1;
|
*(char *)0xcc = show ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gotoxy(int cx, int cy)
|
void gotoxy(char cx, char cy)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
@ -307,7 +299,7 @@ void gotoxy(int cx, int cy)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void textcolor(int c)
|
void textcolor(char c)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
@ -316,24 +308,20 @@ void textcolor(int c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int wherex(void)
|
char wherex(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
lda $d3
|
lda $d3
|
||||||
sta accu
|
sta accu
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int wherey(void)
|
char wherey(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
lda $d6
|
lda $d6
|
||||||
sta accu
|
sta accu
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,27 +43,27 @@ void dispmode80col(void);
|
||||||
#define PETSCII_F7 0x88
|
#define PETSCII_F7 0x88
|
||||||
#define PETSCII_F8 0x8c
|
#define PETSCII_F8 0x8c
|
||||||
|
|
||||||
int kbhit(void);
|
char kbhit(void);
|
||||||
|
|
||||||
int getche(void);
|
char getche(void);
|
||||||
|
|
||||||
int getch(void);
|
char getch(void);
|
||||||
|
|
||||||
// like getch but does not wait, returns zero if no
|
// like getch but does not wait, returns zero if no
|
||||||
// key is pressed
|
// key is pressed
|
||||||
int getchx(void);
|
char getchx(void);
|
||||||
|
|
||||||
void putch(int c);
|
void putch(char c);
|
||||||
|
|
||||||
void clrscr(void);
|
void clrscr(void);
|
||||||
|
|
||||||
void gotoxy(int x, int y);
|
void gotoxy(char x, char y);
|
||||||
|
|
||||||
void textcolor(int c);
|
void textcolor(char c);
|
||||||
|
|
||||||
int wherex(void);
|
char wherex(void);
|
||||||
|
|
||||||
int wherey(void);
|
char wherey(void);
|
||||||
|
|
||||||
// show or hide the text cursor
|
// show or hide the text cursor
|
||||||
|
|
||||||
|
|
|
@ -1097,6 +1097,7 @@ bool Compiler::GenerateCode(void)
|
||||||
if (mCompilerOptions & COPT_OPTIMIZE_BASIC)
|
if (mCompilerOptions & COPT_OPTIMIZE_BASIC)
|
||||||
{
|
{
|
||||||
mLinker->CombineSameConst();
|
mLinker->CombineSameConst();
|
||||||
|
mLinker->InlineSimpleJumps();
|
||||||
mLinker->CheckDirectJumps();
|
mLinker->CheckDirectJumps();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -390,6 +390,43 @@ bool Linker::Forwards(LinkerObject* pobj, LinkerObject* lobj)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Linker::InlineSimpleJumps(void)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < mObjects.Size(); i++)
|
||||||
|
{
|
||||||
|
LinkerObject* cobj(mObjects[i]);
|
||||||
|
if (cobj->mType == LOT_NATIVE_CODE)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < cobj->mReferences.Size(); j++)
|
||||||
|
{
|
||||||
|
LinkerReference* cref = cobj->mReferences[j];
|
||||||
|
if (cref->mOffset > 0 && cref->mOffset < cobj->mSize + 2 && (cref->mFlags & (LREF_HIGHBYTE | LREF_LOWBYTE)) == (LREF_HIGHBYTE | LREF_LOWBYTE))
|
||||||
|
{
|
||||||
|
if (cref->mRefObject->mType == LOT_NATIVE_CODE && cref->mRefObject->mSize == 3 &&
|
||||||
|
cobj->mSection == cref->mRefObject->mSection && cref->mRefOffset == 0 &&
|
||||||
|
cref->mRefObject->mData[0] == 0x4c)
|
||||||
|
{
|
||||||
|
LinkerObject* tobj(cref->mRefObject);
|
||||||
|
if (tobj->mReferences.Size())
|
||||||
|
{
|
||||||
|
cref->mRefObject = tobj->mReferences[0]->mRefObject;
|
||||||
|
cref->mRefOffset = tobj->mReferences[0]->mRefOffset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cobj->mData[cref->mOffset + 0] = tobj->mData[1];
|
||||||
|
cobj->mData[cref->mOffset + 1] = tobj->mData[2];
|
||||||
|
cref->mFlags = 0;
|
||||||
|
cref->mRefObject = cobj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Linker::CheckDirectJumps(void)
|
void Linker::CheckDirectJumps(void)
|
||||||
|
@ -1203,7 +1240,7 @@ bool Linker::WritePrgFile(const char* filename, const char* pathname)
|
||||||
mCartridge[b][s - 2] = s & 0xff;
|
mCartridge[b][s - 2] = s & 0xff;
|
||||||
mCartridge[b][s - 1] = s >> 8;
|
mCartridge[b][s - 1] = s >> 8;
|
||||||
|
|
||||||
fwrite(mCartridge[b] + s - 22, 1, mCartridgeBankEnd[b] - s + 2, file);
|
fwrite(mCartridge[b] + s - 2, 1, mCartridgeBankEnd[b] - s + 2, file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -301,6 +301,7 @@ public:
|
||||||
void CheckDirectJumps(void);
|
void CheckDirectJumps(void);
|
||||||
void CollectReferences(void);
|
void CollectReferences(void);
|
||||||
void CombineSameConst(void);
|
void CombineSameConst(void);
|
||||||
|
void InlineSimpleJumps(void);
|
||||||
void PatchReferences(bool inlays);
|
void PatchReferences(bool inlays);
|
||||||
void CopyObjects(bool inlays);
|
void CopyObjects(bool inlays);
|
||||||
void PlaceObjects(void);
|
void PlaceObjects(void);
|
||||||
|
|
|
@ -12733,7 +12733,7 @@ NativeCodeInstruction NativeCodeBasicBlock::DecodeNative(const InterInstruction*
|
||||||
linkerObject = lref->mRefObject;
|
linkerObject = lref->mRefObject;
|
||||||
address = lref->mRefOffset;
|
address = lref->mRefOffset;
|
||||||
}
|
}
|
||||||
else
|
else if (d.mType != ASMIT_JSR)
|
||||||
flags |= NCIF_VOLATILE;
|
flags |= NCIF_VOLATILE;
|
||||||
break;
|
break;
|
||||||
case ASMIM_ZERO_PAGE:
|
case ASMIM_ZERO_PAGE:
|
||||||
|
|
Loading…
Reference in New Issue