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

View File

@ -20,22 +20,15 @@ Kernel.Init2 sei
>LDYAI MSG.Init2
jsr PrintFYA
>LDYAI A2osX.MAIN
>LDYA PAKME.MAIN
>STYA ZPInBufPtr
>LDYAI CORE.Run
>STYA ZPOutBufPtr
jsr X.Unpak
* >LDYAI A2osX.MAIN
* >STYA ZPPtr1
* >LDYAI CORE.Run
* >STYA ZPPtr2
* >LDYAI A2osX.MAIN.S^$FFFF
* jsr Kernel.Move
sta SETWRITEAUX
>LDYAI A2osX.AUX
>LDYA PAKME.AUX
>STYA ZPInBufPtr
>LDYAI X.OSD
>STYA ZPOutBufPtr
@ -43,83 +36,37 @@ Kernel.Init2 sei
sta CLRWRITEAUX
* >LDYAI A2osX.AUX
* >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
>LDYA PAKME.GP
>STYA ZPInBufPtr
>LDYAI A2osX.SYSCALL
>STYA ZPOutBufPtr
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
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
>LDYAI A2osX.D2
>LDYA PAKME.D2
>STYA ZPInBufPtr
>LDYAI $D000
>STYA ZPOutBufPtr
jsr X.Unpak
* >LDYAI A2osX.D2
* >STYA ZPPtr1
* >LDYAI $D000
* >STYA ZPPtr2
* >LDYAI A2osX.D2.S^$FFFF
* jsr Kernel.Move
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
>LDYAI A2osX.D1
>LDYA PAKME.D1
>STYA ZPInBufPtr
>LDYAI $D000
>STYA ZPOutBufPtr
jsr X.Unpak
* >LDYAI A2osX.D1
* >STYA ZPPtr1
* >LDYAI $D000
* >STYA ZPPtr2
* >LDYAI A2osX.D1.S^$FFFF
* jsr Kernel.Move
>LDYAI A2osX.E0
>LDYA PAKME.E0
>STYA ZPInBufPtr
>LDYAI $E000
>STYA ZPOutBufPtr
jsr X.Unpak
* >LDYAI A2osX.E0
* >STYA ZPPtr1
* >LDYAI $E000
* >STYA ZPPtr2
* >LDYAI A2osX.E0.S^$FFFF
* jsr Kernel.Move
bit RROMBNK1
sta CLRALTZP
cli
@ -239,23 +186,6 @@ Kernel.Init3.Err
*--------------------------------------
* 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
jsr PrintFYA

View File

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