Add kernal banking for plus/4 kernalio.c
This commit is contained in:
parent
17ec90cfe7
commit
759a701df8
|
@ -16,7 +16,18 @@ void krnio_setbnk(char filebank, char namebank)
|
||||||
#pragma native(krnio_setbnk)
|
#pragma native(krnio_setbnk)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void krnio_setnam(const char * name)
|
#if defined(__PLUS4__)
|
||||||
|
#pragma code(lowcode)
|
||||||
|
#define BANKIN sta 0xff3e
|
||||||
|
#define BANKOUT sta 0xff3f
|
||||||
|
#define BANKINLINE __noinline
|
||||||
|
#else
|
||||||
|
#define BANKIN
|
||||||
|
#define BANKOUT
|
||||||
|
#define BANKINLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BANKINLINE void krnio_setnam(const char * name)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
@ -31,26 +42,30 @@ void krnio_setnam(const char * name)
|
||||||
tya
|
tya
|
||||||
W1: ldx name
|
W1: ldx name
|
||||||
ldy name + 1
|
ldy name + 1
|
||||||
|
BANKIN
|
||||||
jsr $ffbd // setnam
|
jsr $ffbd // setnam
|
||||||
|
BANKOUT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma native(krnio_setnam)
|
#pragma native(krnio_setnam)
|
||||||
|
|
||||||
void krnio_setnam_n(const char * name, char len)
|
BANKINLINE void krnio_setnam_n(const char * name, char len)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
lda len
|
lda len
|
||||||
ldx name
|
ldx name
|
||||||
ldy name + 1
|
ldy name + 1
|
||||||
|
BANKIN
|
||||||
jsr $ffbd // setnam
|
jsr $ffbd // setnam
|
||||||
|
BANKOUT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma native(krnio_setnam_n)
|
#pragma native(krnio_setnam_n)
|
||||||
|
|
||||||
bool krnio_open(char fnum, char device, char channel)
|
BANKINLINE bool krnio_open(char fnum, char device, char channel)
|
||||||
{
|
{
|
||||||
krnio_pstatus[fnum] = KRNIO_OK;
|
krnio_pstatus[fnum] = KRNIO_OK;
|
||||||
|
|
||||||
|
@ -60,6 +75,8 @@ bool krnio_open(char fnum, char device, char channel)
|
||||||
sta accu
|
sta accu
|
||||||
sta accu + 1
|
sta accu + 1
|
||||||
|
|
||||||
|
BANKIN
|
||||||
|
|
||||||
lda fnum
|
lda fnum
|
||||||
ldx device
|
ldx device
|
||||||
ldy channel
|
ldy channel
|
||||||
|
@ -74,6 +91,8 @@ bool krnio_open(char fnum, char device, char channel)
|
||||||
W1:
|
W1:
|
||||||
lda #1
|
lda #1
|
||||||
sta accu
|
sta accu
|
||||||
|
|
||||||
|
BANKOUT
|
||||||
E2:
|
E2:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -81,22 +100,26 @@ bool krnio_open(char fnum, char device, char channel)
|
||||||
|
|
||||||
#pragma native(krnio_open)
|
#pragma native(krnio_open)
|
||||||
|
|
||||||
void krnio_close(char fnum)
|
BANKINLINE void krnio_close(char fnum)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
lda fnum
|
lda fnum
|
||||||
jsr $ffc3 // close
|
jsr $ffc3 // close
|
||||||
|
BANKOUT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma native(krnio_close)
|
#pragma native(krnio_close)
|
||||||
|
|
||||||
krnioerr krnio_status(void)
|
BANKINLINE krnioerr krnio_status(void)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
jsr $ffb7 // readst
|
jsr $ffb7 // readst
|
||||||
|
BANKOUT
|
||||||
sta accu
|
sta accu
|
||||||
lda #0
|
lda #0
|
||||||
sta accu + 1
|
sta accu + 1
|
||||||
|
@ -106,10 +129,11 @@ krnioerr krnio_status(void)
|
||||||
#pragma native(krnio_status)
|
#pragma native(krnio_status)
|
||||||
|
|
||||||
|
|
||||||
bool krnio_load(char fnum, char device, char channel)
|
BANKINLINE bool krnio_load(char fnum, char device, char channel)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
lda fnum
|
lda fnum
|
||||||
ldx device
|
ldx device
|
||||||
ldy channel
|
ldy channel
|
||||||
|
@ -119,6 +143,7 @@ bool krnio_load(char fnum, char device, char channel)
|
||||||
ldx #0
|
ldx #0
|
||||||
ldy #0
|
ldy #0
|
||||||
jsr $FFD5 // load
|
jsr $FFD5 // load
|
||||||
|
BANKOUT
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
rol
|
rol
|
||||||
|
@ -129,10 +154,11 @@ bool krnio_load(char fnum, char device, char channel)
|
||||||
|
|
||||||
#pragma native(krnio_load)
|
#pragma native(krnio_load)
|
||||||
|
|
||||||
bool krnio_save(char device, const char* start, const char* end)
|
BANKINLINE bool krnio_save(char device, const char* start, const char* end)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
lda #0
|
lda #0
|
||||||
ldx device
|
ldx device
|
||||||
ldy #0
|
ldy #0
|
||||||
|
@ -143,6 +169,8 @@ bool krnio_save(char device, const char* start, const char* end)
|
||||||
ldy end+1
|
ldy end+1
|
||||||
jsr $FFD8 // save
|
jsr $FFD8 // save
|
||||||
|
|
||||||
|
BANKOUT
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
rol
|
rol
|
||||||
eor #1
|
eor #1
|
||||||
|
@ -152,12 +180,14 @@ bool krnio_save(char device, const char* start, const char* end)
|
||||||
|
|
||||||
#pragma native(krnio_save)
|
#pragma native(krnio_save)
|
||||||
|
|
||||||
bool krnio_chkout(char fnum)
|
BANKINLINE bool krnio_chkout(char fnum)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
ldx fnum
|
ldx fnum
|
||||||
jsr $ffc9 // chkout
|
jsr $ffc9 // chkout
|
||||||
|
BANKOUT
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
rol
|
rol
|
||||||
|
@ -168,12 +198,14 @@ bool krnio_chkout(char fnum)
|
||||||
|
|
||||||
#pragma native(krnio_chkout)
|
#pragma native(krnio_chkout)
|
||||||
|
|
||||||
bool krnio_chkin(char fnum)
|
BANKINLINE bool krnio_chkin(char fnum)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
ldx fnum
|
ldx fnum
|
||||||
jsr $ffc6 // chkin
|
jsr $ffc6 // chkin
|
||||||
|
BANKOUT
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
rol
|
rol
|
||||||
|
@ -184,39 +216,49 @@ bool krnio_chkin(char fnum)
|
||||||
|
|
||||||
#pragma native(krnio_chkin)
|
#pragma native(krnio_chkin)
|
||||||
|
|
||||||
void krnio_clrchn(void)
|
BANKINLINE void krnio_clrchn(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
jsr $ffcc // clrchn
|
jsr $ffcc // clrchn
|
||||||
|
BANKOUT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma native(krnio_clrchn)
|
#pragma native(krnio_clrchn)
|
||||||
|
|
||||||
bool krnio_chrout(char ch)
|
BANKINLINE bool krnio_chrout(char ch)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
lda ch
|
lda ch
|
||||||
jsr $ffd2 // chrout
|
jsr $ffd2 // chrout
|
||||||
sta accu
|
sta accu
|
||||||
|
BANKOUT
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma native(krnio_chrout)
|
#pragma native(krnio_chrout)
|
||||||
|
|
||||||
char krnio_chrin(void)
|
BANKINLINE char krnio_chrin(void)
|
||||||
{
|
{
|
||||||
return __asm
|
return __asm
|
||||||
{
|
{
|
||||||
|
BANKIN
|
||||||
jsr $ffcf // chrin
|
jsr $ffcf // chrin
|
||||||
sta accu
|
sta accu
|
||||||
|
BANKOUT
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma native(krnio_chrin)
|
#pragma native(krnio_chrin)
|
||||||
|
|
||||||
|
#if defined(__PLUS4__)
|
||||||
|
#pragma code(code)
|
||||||
|
#endif
|
||||||
|
|
||||||
int krnio_getch(char fnum)
|
int krnio_getch(char fnum)
|
||||||
{
|
{
|
||||||
if (krnio_pstatus[fnum] == KRNIO_EOF)
|
if (krnio_pstatus[fnum] == KRNIO_EOF)
|
||||||
|
|
|
@ -552,12 +552,12 @@ bool Compiler::GenerateCode(void)
|
||||||
if (mCompilerOptions & COPT_NATIVE)
|
if (mCompilerOptions & COPT_NATIVE)
|
||||||
{
|
{
|
||||||
regionStartup = mLinker->AddRegion(identStartup, 0x1001, 0x1080);
|
regionStartup = mLinker->AddRegion(identStartup, 0x1001, 0x1080);
|
||||||
regionLowcode = mLinker->AddRegion(identLowcode, 0x1080, 0x1100);
|
regionLowcode = mLinker->AddRegion(identLowcode, 0x1080, 0x1180);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
regionStartup = mLinker->AddRegion(identStartup, 0x1001, 0x1080);
|
regionStartup = mLinker->AddRegion(identStartup, 0x1001, 0x1080);
|
||||||
regionLowcode = mLinker->AddRegion(identLowcode, 0x1080, 0x1000);
|
regionLowcode = mLinker->AddRegion(identLowcode, 0x1080, 0x1180);
|
||||||
}
|
}
|
||||||
regionLowcode->mSections.Push(mCompilationUnits->mSectionLowCode);
|
regionLowcode->mSections.Push(mCompilationUnits->mSectionLowCode);
|
||||||
break;
|
break;
|
||||||
|
@ -633,6 +633,8 @@ bool Compiler::GenerateCode(void)
|
||||||
regionBytecode = mLinker->AddRegion(identBytecode, 0x1d00, 0x1e00);
|
regionBytecode = mLinker->AddRegion(identBytecode, 0x1d00, 0x1e00);
|
||||||
break;
|
break;
|
||||||
case TMACH_PLUS4:
|
case TMACH_PLUS4:
|
||||||
|
regionBytecode = mLinker->AddRegion(identBytecode, 0x1200, 0x1300);
|
||||||
|
break;
|
||||||
case TMACH_VIC20:
|
case TMACH_VIC20:
|
||||||
regionBytecode = mLinker->AddRegion(identBytecode, 0x1100, 0x1200);
|
regionBytecode = mLinker->AddRegion(identBytecode, 0x1100, 0x1200);
|
||||||
break;
|
break;
|
||||||
|
@ -698,7 +700,7 @@ bool Compiler::GenerateCode(void)
|
||||||
regionMain = mLinker->AddRegion(identMain, 0x1e00, 0xc000);
|
regionMain = mLinker->AddRegion(identMain, 0x1e00, 0xc000);
|
||||||
break;
|
break;
|
||||||
case TMACH_PLUS4:
|
case TMACH_PLUS4:
|
||||||
regionMain = mLinker->AddRegion(identMain, 0x1200, 0xfc00);
|
regionMain = mLinker->AddRegion(identMain, 0x1300, 0xfc00);
|
||||||
break;
|
break;
|
||||||
case TMACH_VIC20:
|
case TMACH_VIC20:
|
||||||
regionMain = mLinker->AddRegion(identMain, 0x1200, 0x1e00);
|
regionMain = mLinker->AddRegion(identMain, 0x1200, 0x1e00);
|
||||||
|
@ -753,7 +755,7 @@ bool Compiler::GenerateCode(void)
|
||||||
regionMain = mLinker->AddRegion(identMain, 0x1c80, 0xc000);
|
regionMain = mLinker->AddRegion(identMain, 0x1c80, 0xc000);
|
||||||
break;
|
break;
|
||||||
case TMACH_PLUS4:
|
case TMACH_PLUS4:
|
||||||
regionMain = mLinker->AddRegion(identMain, 0x1100, 0xfc00);
|
regionMain = mLinker->AddRegion(identMain, 0x1180, 0xfc00);
|
||||||
break;
|
break;
|
||||||
case TMACH_VIC20:
|
case TMACH_VIC20:
|
||||||
regionMain = mLinker->AddRegion(identMain, 0x1080, 0x1e00);
|
regionMain = mLinker->AddRegion(identMain, 0x1080, 0x1e00);
|
||||||
|
|
Loading…
Reference in New Issue