Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-10-30 17:29:46 +01:00
parent 45fa33bd6d
commit f4762df90b
5 changed files with 215 additions and 140 deletions

Binary file not shown.

Binary file not shown.

View File

@ -19,22 +19,24 @@ CHUNK.MAX .EQ 32
ZS.START ZS.START
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
ZPSrcBufPtr .BS 2
ZPDstBufPtr .BS 2
ZPSrcFileSize .BS 2 ZPSrcFileSize .BS 2
ZPDstTableOfs .BS 2 ZPDstTableOfs .BS 2
hSrcFile .BS 1
hDstFile .BS 1
ZPChunkIndex .BS 1 ZPChunkIndex .BS 1
ZPChunkCnt .BS 1 ZPChunkCnt .BS 1
ZPChunkOfs .BS 2 ZPChunkOfs .BS 2
ZPChunkLen .BS 2 ZPChunkLen .BS 2
hSrcFile .BS 1 ZPChunkPakedLen .BS 2
hDstFile .BS 1 ZPChunkNewOfs .BS 2
bPause .BS 1 hSrcBuf .BS 1
hDstBuf .BS 1
ZPSrcBufPtr .BS 2
ZPDstBufPtr .BS 2
bPause .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -61,8 +63,7 @@ L.LIBPAK .DA LIBPAK
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.SRCFILE .DA MSG.SRCFILE L.MSG.SRCFILE .DA MSG.SRCFILE
L.MSG.CHUNK .DA MSG.CHUNK L.MSG.CHUNK .DA MSG.CHUNK
L.MSG.OK .DA MSG.OK L.MSG.PAKED .DA MSG.PAKED
L.MSG.ERR .DA MSG.ERR
L.MSG.E.IARC .DA MSG.E.IARC L.MSG.E.IARC .DA MSG.E.IARC
L.TAG .DA TAG L.TAG .DA TAG
.DA 0 .DA 0
@ -104,31 +105,62 @@ CS.RUN ldy #S.PS.ARGC
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN.START >PUSHB.G PAKME.HEADER+7 CS.RUN.START >PUSHW ZPDstTableOfs
>PUSHW ZPSrcFileSize >PUSHB.G PAKME.HEADER+7
>PUSHW.G PAKME.HEADER+5 >PUSHW.G PAKME.HEADER+5
>PUSHW ZPSrcFileSize
lda #1 lda #1
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
>PUSHBI 7 >PUSHBI 9
>LDYA L.MSG.SRCFILE >LDYA L.MSG.SRCFILE
>SYSCALL printf >SYSCALL printf
>LDYA ZPDstTableOfs
jsr CS.RUN.GetSrcBufYA
bcs CS.RUN.RTS
>PUSHBI SEEK.SET
>PUSHWZ
>PUSHWZ
lda hSrcFile
>SYSCALL fseek
bcs CS.RUN.RTS
>PUSHW ZPDstTableOfs
>PUSHW ZPSrcBufPtr
lda hSrcFile
>SYSCALL fread
bcs CS.RUN.RTS
>PUSHW ZPDstTableOfs
>PUSHW ZPSrcBufPtr
lda hDstFile
>SYSCALL fwrite
bcs CS.RUN.RTS
jsr CS.QUIT.BUF
jsr CS.RUN.WriteTable Write Fake table
bcc CS.RUN.LOOP
CS.RUN.RTS rts
*-------------------------------------- *--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
>SYSCALL feof >SYSCALL feof
bcs .9 bcs CS.RUN.RTS
tay tay
bne .1 bne .1
>SYSCALL GetChar >SYSCALL GetChar
bcs .9 bcs CS.RUN.RTS
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
beq .9 Abort.... beq CS.RUN.RTS Abort....
cmp #$13 Ctrl-S cmp #$13 Ctrl-S
bne .1 bne .1
@ -142,22 +174,47 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
bne CS.RUN.LOOP Pause... bne CS.RUN.LOOP Pause...
*-------------------------------------- *--------------------------------------
jsr CS.RUN.GetChunk jsr CS.RUN.GetChunk
bcs .9 bcs CS.RUN.RTS
>PUSHW ZPChunkLen >PUSHW ZPChunkLen
>PUSHW ZPChunkOfs >PUSHW ZPChunkOfs
>PUSHB ZPChunkIndex lda ZPChunkIndex
>PUSHBI 3 inc
>PUSHA
>PUSHBI 5
>LDYA L.MSG.CHUNK >LDYA L.MSG.CHUNK
>SYSCALL printf >SYSCALL printf
bcs .9
jsr CS.RUN.Pak
bcs .9
jsr CS.RUN.WritePak
bcs .9
>PUSHW ZPChunkNewOfs
>PUSHW ZPChunkPakedLen
>PUSHBI 4
>LDYA L.MSG.PAKED
>SYSCALL printf
bcs .9
jsr CS.QUIT.BUF
jsr CS.RUN.UpdateTable
inc ZPChunkIndex
dec ZPChunkCnt dec ZPChunkCnt
beq .8 beq .8
jmp CS.RUN.LOOP jmp CS.RUN.LOOP
.8 lda #0 .8 jsr CS.RUN.SeekTable
bcs .9
jsr CS.RUN.WriteTable Write modifid Table
bcs .9
lda #0
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -245,21 +302,16 @@ CS.RUN.CheckTAG >PUSHBI SEEK.SET
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetTable >PUSHBI SEEK.SET CS.RUN.GetTable >LDA.G PAKME.HEADER+8
>PUSHWZ
>LDA.G PAKME.HEADER+8
sec sec
>SBC.G PAKME.HEADER+5 >SBC.G PAKME.HEADER+5
sta ZPDstTableOfs+1 sta ZPDstTableOfs
pha
>LDA.G PAKME.HEADER+9 >LDA.G PAKME.HEADER+9
>SBC.G PAKME.HEADER+6 >SBC.G PAKME.HEADER+6
sta ZPDstTableOfs sta ZPDstTableOfs+1
ply
>PUSHYA jsr CS.RUN.SeekTable
lda hSrcFile
>SYSCALL fseek
bcs .9 bcs .9
>LDA.G PAKME.HEADER+7 >LDA.G PAKME.HEADER+7
@ -278,8 +330,6 @@ CS.RUN.GetTable >PUSHBI SEEK.SET
*-------------------------------------- *--------------------------------------
CS.RUN.GetChunk lda ZPChunkIndex CS.RUN.GetChunk lda ZPChunkIndex
inc ZPChunkIndex
asl asl
clc clc
adc #PAKME.TABLE+1 adc #PAKME.TABLE+1
@ -312,15 +362,26 @@ CS.RUN.GetChunk lda ZPChunkIndex
bcs .9 bcs .9
>LDA.G CHUNK.HEADER >LDA.G CHUNK.HEADER
* bne .90 bne .90
>LDA.G CHUNK.HEADER+1 >LDA.G CHUNK.HEADER+1
sta ZPChunkLen sta ZPChunkLen
pha
iny iny
lda (pData),y lda (pData),y
sta ZPChunkLen+1 sta ZPChunkLen+1
ply
clc jsr CS.RUN.GetSrcBufYA
bcs .9
>PUSHW ZPChunkLen
>PUSHW ZPSrcBufPtr
lda hSrcFile
>SYSCALL fread
bcs .9
* clc
rts rts
.90 lda #MLI.E.INCFF .90 lda #MLI.E.INCFF
@ -328,6 +389,89 @@ CS.RUN.GetChunk lda ZPChunkIndex
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetSrcBufYA
>SYSCALL getmem
bcs .9
stx hSrcBuf
>STYA ZPSrcBufPtr
.9 rts
*--------------------------------------
CS.RUN.Pak >LDYA ZPChunkLen
>SYSCALL getmem
bcs .9
stx hDstBuf
>STYA ZPDstBufPtr
>PUSHEA.G PAKSTAT
>PUSHW ZPDstBufPtr
>PUSHW ZPChunkLen
>PUSHW ZPSrcBufPtr
>LIBCALL hLIB,LIBPAK.Pak
bcs .9
>STYA ZPChunkPakedLen
.9 rts
*--------------------------------------
CS.RUN.SeekTable
>PUSHBI SEEK.SET
>PUSHWZ
>PUSHW ZPDstTableOfs
lda hSrcFile
>SYSCALL fseek
rts
*--------------------------------------
CS.RUN.WriteTable
lda ZPChunkCnt
asl
tay
lda #0
>PUSHYA
>PUSHEA.G PAKME.TABLE
lda hDstFile
>SYSCALL fwrite
rts
*--------------------------------------
CS.RUN.WritePak lda hDstFile
>SYSCALL ftell
bcs .9
>PULLW ZPChunkNewOfs
inc pStack
inc pStack
>PUSHW ZPChunkPakedLen
>PUSHW ZPDstBufPtr
lda hDstFile
>SYSCALL fwrite
.9 rts
*--------------------------------------
CS.RUN.UpdateTable
ldy #PAKME.HEADER+6
lda (pData),y
pha
dey
lda (pData),y
pha
lda ZPChunkIndex
asl
clc
adc #PAKME.TABLE
tay
pla
clc
adc ZPChunkNewOfs
sta (pData),y
iny
pla
adc ZPChunkNewOfs+1
sta (pData),y
rts
*--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
@ -339,15 +483,9 @@ CS.QUIT lda hDstFile
beq .3 beq .3
>SYSCALL fclose >SYSCALL fclose
.3 >LDA.G hDstBuf .3 jsr CS.QUIT.BUF
beq .4
>SYSCALL FreeMem
.4 >LDA.G hSrcBuf lda hLIB
beq .5
>SYSCALL FreeMem
.5 lda hLIB
beq .8 beq .8
>SYSCALL UnloadLib >SYSCALL UnloadLib
@ -355,13 +493,24 @@ CS.QUIT lda hDstFile
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT.BUF lda hDstBuf
beq .1
stz hDstBuf
>SYSCALL FreeMem
.1 lda hSrcBuf
beq .8
stz hSrcBuf
>SYSCALL FreeMem
.8 rts
*--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
MSG.USAGE .AZ "Usage : PAKME SourceBIN PackedBIN\r\n" MSG.USAGE .AZ "Usage : PAKME SourceBIN PackedBIN\r\n"
MSG.SRCFILE .AZ "Source File : %s, Org=$%H Size=%D, %d Chunks.\r\n" MSG.SRCFILE .AZ "Source File : %s, Size=%5D, Org=$%H, %d Chunks at $%H.\r\n"
MSG.CHUNK .AZ " Chunk #%02d : Ofs=%H, Len=%D\r\n" MSG.CHUNK .AZ " Chunk #%02d : Ofs=$%H, Len=%5D ... "
MSG.OK .AZ "[OK]" MSG.PAKED .AZ "PAKed : %5D Bytes, New Ofs=$%H\r\n"
MSG.ERR .AZ "[%h]\r\n"
MSG.E.IARC .AZ "Invalid/corrupt archive" MSG.E.IARC .AZ "Invalid/corrupt archive"
TAG .AZ "PAKME" TAG .AZ "PAKME"
*-------------------------------------- *--------------------------------------
@ -371,12 +520,6 @@ hLIB .BS 1
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
hSrcBuf .BS 1
hDstBuf .BS 1
Shunk.SrcSize .BS 2
Shunk.DstSize .BS 2
STATBUF .BS S.STAT STATBUF .BS S.STAT
PAKME.HEADER .BS 10 PAKME.HEADER .BS 10
PAKME.TABLE .BS CHUNK.MAX*2 PAKME.TABLE .BS CHUNK.MAX*2

View File

@ -20,22 +20,15 @@ Kernel.Init2 sei
>LDYAI MSG.Init2 >LDYAI MSG.Init2
jsr PrintFYA jsr PrintFYA
>LDYAI A2osX.MAIN >LDYA PAKME.MAIN
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI CORE.Run >LDYAI CORE.Run
>STYA ZPOutBufPtr >STYA ZPOutBufPtr
jsr X.Unpak jsr X.Unpak
* >LDYAI A2osX.MAIN
* >STYA ZPPtr1
* >LDYAI CORE.Run
* >STYA ZPPtr2
* >LDYAI A2osX.MAIN.S^$FFFF
* jsr Kernel.Move
sta SETWRITEAUX sta SETWRITEAUX
>LDYAI A2osX.AUX >LDYA PAKME.AUX
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI X.OSD >LDYAI X.OSD
>STYA ZPOutBufPtr >STYA ZPOutBufPtr
@ -43,83 +36,37 @@ Kernel.Init2 sei
sta CLRWRITEAUX sta CLRWRITEAUX
* >LDYAI A2osX.AUX >LDYA PAKME.GP
* >STYA A1L Src Start Address (MAIN)
* >LDYAI A2osX.GP
* >STYA A2L Src End Address (MAIN)
* >LDYAI X.OSD
* >STYA A4L Dst Address (AUX)
* sec Main To Aux
* jsr AuxMove
>LDYAI A2osX.GP
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI A2osX.SYSCALL >LDYAI A2osX.SYSCALL
>STYA ZPOutBufPtr >STYA ZPOutBufPtr
jsr X.Unpak jsr X.Unpak
* >LDYAI A2osX.GP
* >STYA ZPPtr1
* >LDYAI A2osX.SYSCALL
* >STYA ZPPtr2
* >LDYAI A2osX.GP.S^$FFFF
* jsr Kernel.Move
* >LDYAI A2osX.GPX
* >STYA A1L Src Start Address (MAIN)
* >LDYAI A2osX.D1
* >STYA A2L Src End Address (MAIN)
* >LDYAI A2osX.SYSCALL
* >STYA A4L Dst Address (AUX)
* sec Main To Aux
* jsr AuxMove
sta SETALTZP sta SETALTZP
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
>LDYAI A2osX.D2 >LDYA PAKME.D2
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI $D000 >LDYAI $D000
>STYA ZPOutBufPtr >STYA ZPOutBufPtr
jsr X.Unpak jsr X.Unpak
* >LDYAI A2osX.D2
* >STYA ZPPtr1
* >LDYAI $D000
* >STYA ZPPtr2
* >LDYAI A2osX.D2.S^$FFFF
* jsr Kernel.Move
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
>LDYAI A2osX.D1 >LDYA PAKME.D1
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI $D000 >LDYAI $D000
>STYA ZPOutBufPtr >STYA ZPOutBufPtr
jsr X.Unpak jsr X.Unpak
* >LDYAI A2osX.D1 >LDYA PAKME.E0
* >STYA ZPPtr1
* >LDYAI $D000
* >STYA ZPPtr2
* >LDYAI A2osX.D1.S^$FFFF
* jsr Kernel.Move
>LDYAI A2osX.E0
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI $E000 >LDYAI $E000
>STYA ZPOutBufPtr >STYA ZPOutBufPtr
jsr X.Unpak jsr X.Unpak
* >LDYAI A2osX.E0
* >STYA ZPPtr1
* >LDYAI $E000
* >STYA ZPPtr2
* >LDYAI A2osX.E0.S^$FFFF
* jsr Kernel.Move
bit RROMBNK1 bit RROMBNK1
sta CLRALTZP sta CLRALTZP
cli cli
@ -239,23 +186,6 @@ Kernel.Init3.Err
*-------------------------------------- *--------------------------------------
* INIT2 Subs * INIT2 Subs
*-------------------------------------- *--------------------------------------
*Kernel.Move >STYA ZPPtr3
* ldy #0
*.1 inc ZPPtr3
* bne .2
* inc ZPPtr3+1
* beq .9
*.2 lda (ZPPtr1),y
* sta (ZPPtr2),y
* iny
* bne .1
* inc ZPPtr1+1
* inc ZPPtr2+1
* bne .1
*.9 rts
*--------------------------------------
KConfigLoad >LDYAI MSG.KCREAD KConfigLoad >LDYAI MSG.KCREAD
jsr PrintFYA jsr PrintFYA

View File

@ -22,12 +22,13 @@ NEW
.INB USR/SRC/SHARED/X.PRINTF.S .INB USR/SRC/SHARED/X.PRINTF.S
.INB USR/SRC/SHARED/X.UNPAK.S .INB USR/SRC/SHARED/X.UNPAK.S
PAKME.Table .DA A2osX.MAIN PAKME.Table
.DA A2osX.AUX PAKME.MAIN .DA A2osX.MAIN
.DA A2osX.GP PAKME.AUX .DA A2osX.AUX
.DA A2osX.D1 PAKME.GP .DA A2osX.GP
.DA A2osX.D2 PAKME.D1 .DA A2osX.D1
.DA A2osX.E0 PAKME.D2 .DA A2osX.D2
PAKME.E0 .DA A2osX.E0
A2osX.MAIN .DA #0 A2osX.MAIN .DA #0
.DA A2osX.MAIN.S .DA A2osX.MAIN.S
@ -56,9 +57,7 @@ A2osX.GP .DA #0
.PH A2osX.SYSCALL .PH A2osX.SYSCALL
.INB USR/SRC/SYS/KERNEL.S.GP .INB USR/SRC/SYS/KERNEL.S.GP
.EP .EP
*A2osX.GPX .PH A2osX.SYSCALL
* .INB USR/SRC/SYS/KERNEL.S.GPX
* .EP
A2osX.D1 .DA #0 A2osX.D1 .DA #0
.DA A2osX.D1.S .DA A2osX.D1.S
.PH $D000 .PH $D000
@ -72,6 +71,7 @@ A2osX.D1 .DA #0
.INB USR/SRC/SYS/KERNEL.S.FIO .INB USR/SRC/SYS/KERNEL.S.FIO
.INB USR/SRC/SYS/KERNEL.S.PFT .INB USR/SRC/SYS/KERNEL.S.PFT
.EP .EP
A2osX.D2 .DA #0 A2osX.D2 .DA #0
.DA A2osX.D2.S .DA A2osX.D2.S
.PH $D000 .PH $D000
@ -83,6 +83,7 @@ A2osX.D2 .DA #0
.INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.ENV .INB USR/SRC/SYS/KERNEL.S.ENV
.EP .EP
A2osX.E0 .DA #0 A2osX.E0 .DA #0
.DA A2osX.E0.S .DA A2osX.E0.S
.PH $E000 .PH $E000
@ -109,6 +110,7 @@ DevMgr.FreeMem .EQ *
.LIST OFF .LIST OFF
.EP .EP
A2osX.E0.E .EQ * A2osX.E0.E .EQ *
*-------------------------------------- *--------------------------------------
.AS "PAKME" TAG .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG