mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-09 15:29:29 +00:00
Kernel 0.93+
This commit is contained in:
parent
1431388c45
commit
8c9c506d61
|
@ -27,7 +27,9 @@ ZPFileStat .BS 2
|
||||||
ZPFullPath .BS 2
|
ZPFullPath .BS 2
|
||||||
ZPRelPath .BS 2
|
ZPRelPath .BS 2
|
||||||
|
|
||||||
ZPBufPtr .BS 2
|
ZPSrcBufPtr .BS 2
|
||||||
|
ZPDstBufPtr .BS 2
|
||||||
|
|
||||||
bAppend .BS 1
|
bAppend .BS 1
|
||||||
bRecurse .BS 1
|
bRecurse .BS 1
|
||||||
bPause .BS 1
|
bPause .BS 1
|
||||||
|
@ -137,15 +139,21 @@ CS.RUN >INC.G ArgIndex
|
||||||
sta ZPRelPath+1
|
sta ZPRelPath+1
|
||||||
|
|
||||||
jsr CS.RUN.OpenArc
|
jsr CS.RUN.OpenArc
|
||||||
bcs .99
|
.98 bcs .99
|
||||||
|
|
||||||
>LDYAI CHNK.SIZE
|
>LDYAI CHNK.SIZE
|
||||||
>SYSCALL getmem
|
>SYSCALL getmem
|
||||||
bcs .99
|
bcs .99
|
||||||
>STYA ZPBufPtr
|
>STYA ZPSrcBufPtr
|
||||||
>STYA.G Shunk
|
|
||||||
txa
|
txa
|
||||||
>STA.G hMem
|
>STA.G hSrcBuf
|
||||||
|
|
||||||
|
>LDYAI CHNK.SIZE
|
||||||
|
>SYSCALL getmem
|
||||||
|
bcs .98
|
||||||
|
>STYA ZPDstBufPtr
|
||||||
|
txa
|
||||||
|
>STA.G hDstBuf
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.LOOP ldy #S.PS.hStdIn
|
CS.RUN.LOOP ldy #S.PS.hStdIn
|
||||||
lda (pPS),y
|
lda (pPS),y
|
||||||
|
@ -278,7 +286,8 @@ CS.RUN.FILE jsr FilterMatch
|
||||||
|
|
||||||
bra .9
|
bra .9
|
||||||
|
|
||||||
.2 jsr CS.RUN.WriteArcData
|
.2 jsr CS.RUN.Pak
|
||||||
|
jsr CS.RUN.WriteArcData
|
||||||
bcc .1
|
bcc .1
|
||||||
|
|
||||||
.4 pha
|
.4 pha
|
||||||
|
@ -334,12 +343,12 @@ CS.RUN.OpenFile >PUSHWZ Aux type
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.ReadFile >PUSHWI CHNK.SIZE
|
CS.RUN.ReadFile >PUSHWI CHNK.SIZE
|
||||||
>PUSHW ZPBufPtr
|
>PUSHW ZPSrcBufPtr
|
||||||
>LDA.G hFile
|
>LDA.G hFile
|
||||||
>SYSCALL fread
|
>SYSCALL fread
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA.G Shunk+2
|
>STYA.G Shunk.SrcSize
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -351,6 +360,16 @@ CS.RUN.CloseFile
|
||||||
>STZ.G hFile
|
>STZ.G hFile
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CS.RUN.Pak >PUSHEA.G PAKSTAT
|
||||||
|
>PUSHW ZPDstBufPtr
|
||||||
|
>PUSHW.G Shunk.SrcSize
|
||||||
|
>PUSHW ZPSrcBufPtr
|
||||||
|
>LIBCALL hLIB,LIBPAK.Pak
|
||||||
|
>STYA.G Shunk.DstSize
|
||||||
|
txa
|
||||||
|
>STA.G Shunk.Alg
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
CS.RUN.OpenArc >PUSHWZ Aux type
|
CS.RUN.OpenArc >PUSHWZ Aux type
|
||||||
>PUSHBI $CF PAK
|
>PUSHBI $CF PAK
|
||||||
|
|
||||||
|
@ -381,7 +400,7 @@ CS.RUN.OpenArc >PUSHWZ Aux type
|
||||||
|
|
||||||
pha
|
pha
|
||||||
>PUSHWI 3
|
>PUSHWI 3
|
||||||
>PUSHW ZPBufPtr
|
>PUSHW ZPSrcBufPtr
|
||||||
pla
|
pla
|
||||||
>SYSCALL fread
|
>SYSCALL fread
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -392,7 +411,7 @@ CS.RUN.OpenArc >PUSHWZ Aux type
|
||||||
dey
|
dey
|
||||||
|
|
||||||
.2 lda ARC.Header,y
|
.2 lda ARC.Header,y
|
||||||
cmp (ZPBufPtr),y
|
cmp (ZPSrcBufPtr),y
|
||||||
bne .99
|
bne .99
|
||||||
dey
|
dey
|
||||||
bpl .2
|
bpl .2
|
||||||
|
@ -460,20 +479,20 @@ CS.RUN.WriteArcData
|
||||||
jsr CS.RUN.WriteArcByteA
|
jsr CS.RUN.WriteArcByteA
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
lda #CHNK.ALG.STORE
|
>LDA.G Shunk.DstSize
|
||||||
jsr CS.RUN.WriteArcByteA
|
jsr CS.RUN.WriteArcByteA
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>LDA.G Shunk+2 Len LO
|
>LDA.G Shunk.DstSize+1
|
||||||
jsr CS.RUN.WriteArcByteA
|
|
||||||
bcs .9 Len HI
|
|
||||||
|
|
||||||
>LDA.G Shunk+3
|
|
||||||
jsr CS.RUN.WriteArcByteA
|
jsr CS.RUN.WriteArcByteA
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>PUSHW.G Shunk+2
|
lda Shunk.Alg
|
||||||
>PUSHW ZPBufPtr
|
jsr CS.RUN.WriteArcByteA
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>PUSHW.G Shunk.DstSize
|
||||||
|
>PUSHW ZPDstBufPtr
|
||||||
>LDA.G hArcFile
|
>LDA.G hArcFile
|
||||||
>SYSCALL fwrite
|
>SYSCALL fwrite
|
||||||
.9 rts
|
.9 rts
|
||||||
|
@ -505,11 +524,15 @@ CS.QUIT jsr LeaveSubDir
|
||||||
beq .3
|
beq .3
|
||||||
>SYSCALL fclose
|
>SYSCALL fclose
|
||||||
|
|
||||||
.3 >LDA.G hMem
|
.3 >LDA.G hDstBuf
|
||||||
beq .4
|
beq .4
|
||||||
>SYSCALL FreeMem
|
>SYSCALL FreeMem
|
||||||
|
|
||||||
.4 lda hLIB
|
.4 >LDA.G hSrcBuf
|
||||||
|
beq .5
|
||||||
|
>SYSCALL FreeMem
|
||||||
|
|
||||||
|
.5 lda hLIB
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
>SYSCALL UnloadLib
|
>SYSCALL UnloadLib
|
||||||
|
@ -562,15 +585,19 @@ DS.START
|
||||||
ArgIndex .BS 1
|
ArgIndex .BS 1
|
||||||
ArcName .BS 1
|
ArcName .BS 1
|
||||||
hSrcFullPath .BS 1
|
hSrcFullPath .BS 1
|
||||||
hArcFile .BS 1
|
|
||||||
hFile .BS 1
|
|
||||||
hMem .BS 1
|
|
||||||
|
|
||||||
Shunk .BS 2 SrcPtr
|
hFile .BS 1
|
||||||
.BS 2 SrcSize
|
hArcFile .BS 1
|
||||||
.BS 2 DstPtr
|
|
||||||
.BS 2 DstSize
|
hSrcBuf .BS 1
|
||||||
|
hDstBuf .BS 1
|
||||||
|
|
||||||
|
Shunk.SrcSize .BS 2
|
||||||
|
Shunk.DstSize .BS 2
|
||||||
|
Shunk.Alg .BS 1
|
||||||
|
|
||||||
|
PAKSTAT .BS S.PAKSTAT
|
||||||
|
|
||||||
.INB USR/SRC/BIN/X.FILEENUM.G
|
.INB USR/SRC/BIN/X.FILEENUM.G
|
||||||
DS.END
|
DS.END
|
||||||
.ED
|
.ED
|
||||||
|
|
|
@ -2,11 +2,12 @@ NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
REPMAX .EQ 16
|
REP.MAX .EQ 16
|
||||||
STRINGMAX .EQ 16
|
STRING.MAX .EQ 16
|
||||||
|
BL.MAX .EQ 66
|
||||||
WSIZE .EQ 4096
|
WSIZE .EQ 4096
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PAK.B.STOREn .EQ %0
|
PAK.B.STRING .EQ %0
|
||||||
PAK.B.BYTE8 .EQ %0
|
PAK.B.BYTE8 .EQ %0
|
||||||
PAK.B.TOP8 .EQ %10
|
PAK.B.TOP8 .EQ %10
|
||||||
PAK.B.TOP16 .EQ %110
|
PAK.B.TOP16 .EQ %110
|
||||||
|
@ -22,7 +23,7 @@ PAK.B.BACKLINK .EQ %1
|
||||||
* TOP24 : 1110 xxx
|
* TOP24 : 1110 xxx
|
||||||
* REPn : 1111 xxxx (1-16)
|
* REPn : 1111 xxxx (1-16)
|
||||||
* }
|
* }
|
||||||
* BACKLINK : 1 !oooooooo !OOOO llllll (3-66)
|
* BACKLINK : 1 !BitCntWidePtr llllll (3-66)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Shunk Header :
|
* Shunk Header :
|
||||||
* WORD : Target UNCompressed Length
|
* WORD : Target UNCompressed Length
|
||||||
|
|
|
@ -9,15 +9,18 @@ CHNK.T.DIR .EQ 1
|
||||||
CHNK.T.FILE .EQ 2
|
CHNK.T.FILE .EQ 2
|
||||||
CHNK.T.DATA .EQ 128
|
CHNK.T.DATA .EQ 128
|
||||||
*
|
*
|
||||||
CHNK.TYPE .EQ 1 FILE/DIR
|
CHNK.FILE.TYPE .EQ 1
|
||||||
CHNK.AUXTYPE .EQ 2
|
CHNK.FILE.AUXT .EQ 2
|
||||||
CHNK.FNLEN .EQ 4
|
CHNK.FILE.FNLEN .EQ 4
|
||||||
*
|
*
|
||||||
CHNK.ALG .EQ 1 DATA
|
CHNK.DIR.FNLEN .EQ 1
|
||||||
CHNK.ALG.STORE .EQ 0
|
|
||||||
CHNK.ULEN .EQ 2
|
|
||||||
*
|
*
|
||||||
CHNK.CLEN .EQ 4
|
CHNK.DATA.ULEN .EQ 1
|
||||||
|
CHNK.DATA.T .EQ 3
|
||||||
|
CHNK.DATA.T.STORE .EQ 0
|
||||||
|
CHNK.DATA.T.PAK .EQ $C0
|
||||||
|
*
|
||||||
|
CHNK.DATA.PAK.TOPLEN .EQ 3
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE INC/PAK.I
|
SAVE INC/PAK.I
|
||||||
|
|
363
LIB/LIBPAK.S.txt
363
LIB/LIBPAK.S.txt
|
@ -10,8 +10,10 @@ NEW
|
||||||
.INB INC/LIBPAK.I
|
.INB INC/LIBPAK.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPSrcPtr .EQ ZPLIB
|
ZPSrcPtr .EQ ZPLIB
|
||||||
ZPSrcWPtr .EQ ZPLIB+2
|
ZPCnt .EQ ZPLIB+2
|
||||||
ZPCnt .EQ ZPLIB+4
|
ZPSrcBLPtr .EQ ZPLIB+4
|
||||||
|
ZPBLCnt .EQ ZPLIB+6
|
||||||
|
ZPCntTmp .EQ ZPLIB+8
|
||||||
|
|
||||||
ZPDstPtr .EQ ZPLIB+16
|
ZPDstPtr .EQ ZPLIB+16
|
||||||
ZPStatPtr .EQ ZPLIB+18
|
ZPStatPtr .EQ ZPLIB+18
|
||||||
|
@ -33,6 +35,8 @@ CS.START cld
|
||||||
.1 .DA LIB.LOAD
|
.1 .DA LIB.LOAD
|
||||||
.DA LIB.UNLOAD
|
.DA LIB.UNLOAD
|
||||||
.DA Pak
|
.DA Pak
|
||||||
|
L.MSG.Stats .DA MSG.Stats
|
||||||
|
L.MSG.Top24 .DA MSG.Top24
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
LIB.LOAD
|
LIB.LOAD
|
||||||
|
@ -40,12 +44,15 @@ LIB.UNLOAD clc
|
||||||
rts
|
rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # Pak
|
* # Pak
|
||||||
* **In:**
|
|
||||||
* ##ASM
|
* ##ASM
|
||||||
* PUSHW = S.PAKSTAT Ptr
|
* `>PUSHW StatPtr`
|
||||||
* PUSHW = Output Buffer Ptr
|
* `>PUSHW DstPtr`
|
||||||
* PUSHW = Input Buffer Len
|
* `>PUSHW SrcLen`
|
||||||
* PUSHW = Input Buffer Ptr
|
* `>PUSHW SrcPtr`
|
||||||
|
* `>LIBCALL hLIBPAK,Pak`
|
||||||
|
* ## RETURN VALUE
|
||||||
|
* CC, Y,A = CLEN
|
||||||
|
* CS, Pak failure
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
Pak >PULLW Pak.SrcPtr
|
Pak >PULLW Pak.SrcPtr
|
||||||
>PULLW Pak.SrcLen
|
>PULLW Pak.SrcLen
|
||||||
|
@ -60,7 +67,32 @@ Pak >PULLW Pak.SrcPtr
|
||||||
stz Pak.CntH,x
|
stz Pak.CntH,x
|
||||||
inx
|
inx
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
* Select best BL.BitCnt
|
||||||
|
|
||||||
|
ldx #8
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
lda Pak.SrcLen+1
|
||||||
|
beq .22
|
||||||
|
|
||||||
|
ldy #8
|
||||||
|
|
||||||
|
.2 asl
|
||||||
|
bcs .4
|
||||||
|
dey
|
||||||
|
bra .2
|
||||||
|
|
||||||
|
.22 lda Pak.SrcLen
|
||||||
|
|
||||||
|
.3 asl
|
||||||
|
bcs .4
|
||||||
|
dex
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.4 stx Pak.BL.BitCntL
|
||||||
|
sty Pak.BL.BitCntH
|
||||||
|
|
||||||
* PASS #1 : no store, update byte counters
|
* PASS #1 : no store, update byte counters
|
||||||
|
|
||||||
stz Pak.bPass2
|
stz Pak.bPass2
|
||||||
|
@ -69,8 +101,10 @@ Pak >PULLW Pak.SrcPtr
|
||||||
|
|
||||||
jsr Pak.Run
|
jsr Pak.Run
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr Pak.BuildTOPTable
|
jsr Pak.BuildTOPTable
|
||||||
|
|
||||||
|
jsr Pak.PrintStats
|
||||||
|
|
||||||
* PASS #2 : store with TOP bytes
|
* PASS #2 : store with TOP bytes
|
||||||
|
|
||||||
|
@ -84,31 +118,28 @@ Pak >PULLW Pak.SrcPtr
|
||||||
|
|
||||||
jsr Pak.Run
|
jsr Pak.Run
|
||||||
bcs .9
|
bcs .9
|
||||||
|
jsr Pak.PrintStats
|
||||||
|
|
||||||
ldy #S.PAKSHNK-1
|
ldy #S.PAKSHNK-1
|
||||||
|
|
||||||
.2 lda Pak.Shnk,y
|
.6 lda Pak.Shnk,y
|
||||||
|
|
||||||
dey
|
dey
|
||||||
bpl .2
|
bpl .6
|
||||||
|
|
||||||
ldy #S.PAKSTAT-1
|
ldy #S.PAKSTAT-1
|
||||||
|
|
||||||
.3 lda Pak.Stat,y
|
.7 lda Pak.Stat,y
|
||||||
sta (ZPStatPtr),y
|
sta (ZPStatPtr),y
|
||||||
dey
|
dey
|
||||||
bpl .3
|
bpl .7
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
|
||||||
|
|
||||||
.9 lda #E.OOM
|
.9 rts
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.InitPass >LDYA Pak.SrcPtr
|
Pak.InitPass >LDYA Pak.SrcPtr
|
||||||
>STYA ZPSrcPtr
|
>STYA ZPSrcPtr
|
||||||
>STYA Pak.WPtr
|
|
||||||
|
|
||||||
lda Pak.SrcLen
|
lda Pak.SrcLen
|
||||||
eor #$ff
|
eor #$ff
|
||||||
|
@ -117,8 +148,9 @@ Pak.InitPass >LDYA Pak.SrcPtr
|
||||||
lda Pak.SrcLen+1
|
lda Pak.SrcLen+1
|
||||||
eor #$ff
|
eor #$ff
|
||||||
sta Pak.SrcCnt+1
|
sta Pak.SrcCnt+1
|
||||||
|
|
||||||
stz Pak.RepCnt
|
sec
|
||||||
|
ror Pak.RepCnt
|
||||||
stz Pak.LastByte
|
stz Pak.LastByte
|
||||||
|
|
||||||
ldx #S.PAKSTAT.PASS1
|
ldx #S.PAKSTAT.PASS1
|
||||||
|
@ -135,168 +167,134 @@ Pak.InitPass >LDYA Pak.SrcPtr
|
||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.Run lda #$ff
|
Pak.Run
|
||||||
cmp Pak.SrcCnt+1 return 255 if not $ffxx
|
|
||||||
|
Pak.Run.1 inc Pak.SrcCnt
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda Pak.SrcCnt
|
inc Pak.SrcCnt+1
|
||||||
eor #$ff return !xx if $ffxx
|
|
||||||
beq .8 0 byte left...
|
beq .8 0 byte left...
|
||||||
|
|
||||||
.1 cmp #4 less than 4 chars, give up BL
|
.1 jsr Pak.ScanBL
|
||||||
bcc .4
|
bcs .4
|
||||||
|
|
||||||
sta Pak.MaxReadAhead
|
bit Pak.bPass2
|
||||||
stz Pak.BestBLLen
|
bpl .11
|
||||||
|
|
||||||
ldx #3
|
ldx #S.PAKSTAT.PASS1
|
||||||
|
jsr Pak.UpdateStats
|
||||||
.2 inx
|
jsr Pak.UpdateStats
|
||||||
jsr Pak.ScanBL
|
|
||||||
bcs .3
|
|
||||||
>STYA Pak.BestBL
|
|
||||||
stx Pak.BestBLLen
|
|
||||||
|
|
||||||
cpx Pak.MaxReadAhead
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
.3 lda Pak.BestBLLen
|
|
||||||
beq .4 NO BL found....
|
|
||||||
|
|
||||||
lda Pak.BestBL+1
|
|
||||||
ora #PAK.B.BACKLINK %1110 + Ofs.HI
|
|
||||||
jsr Pak.PutA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda Pak.BestBL get Ofs.LO
|
|
||||||
jsr Pak.PutA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda Pak.BestBLLen get back len
|
|
||||||
jsr Pak.PutA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda Pak.BestBLLen
|
|
||||||
jsr Pak.SrcForward
|
|
||||||
|
|
||||||
ldx #S.PAKSTAT.BL
|
|
||||||
jsr Pak.UpdateStats
|
jsr Pak.UpdateStats
|
||||||
|
|
||||||
bra Pak.Run
|
bra .3
|
||||||
|
|
||||||
.4 lda (ZPSrcPtr)
|
|
||||||
|
|
||||||
jsr Pak.PutA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda #1
|
.11 sec
|
||||||
jsr Pak.SrcForward
|
lda Pak.Out.PutBitC
|
||||||
|
|
||||||
bra Pak.Run
|
ldy Pak.BL.BitCntH
|
||||||
|
beq .2
|
||||||
|
|
||||||
.8 lda Pak.RepCnt do we have a pending REP ?
|
lda Pak.BestBL+1
|
||||||
beq .80
|
jsr Pak.Out.PutYBits
|
||||||
|
|
||||||
ora #PAK.B.REPn yes, add it
|
.2 ldy Pak.BL.BitCntL
|
||||||
jmp Pak.PutA.1
|
lda Pak.BestBL
|
||||||
|
jsr Pak.Out.PutYBits
|
||||||
|
|
||||||
.80 clc
|
ldy #6
|
||||||
.9 rts
|
lda Pak.BestBLLen
|
||||||
*--------------------------------------
|
jsr Pak.Out.PutYBits
|
||||||
Pak.SrcForward pha Len
|
|
||||||
|
lda Pak.BestBLLen
|
||||||
clc
|
clc
|
||||||
adc ZPSrcPtr
|
adc ZPSrcPtr
|
||||||
sta ZPSrcPtr
|
sta ZPSrcPtr
|
||||||
bcc .1
|
bcc .3
|
||||||
clc
|
|
||||||
inc ZPSrcPtr+1
|
inc ZPSrcPtr+1
|
||||||
|
|
||||||
.1 pla
|
.3 ldx #S.PAKSTAT.BL
|
||||||
|
jsr Pak.UpdateStats
|
||||||
|
|
||||||
|
lda Pak.BestBLLen
|
||||||
|
clc
|
||||||
adc Pak.SrcCnt
|
adc Pak.SrcCnt
|
||||||
sta Pak.SrcCnt
|
sta Pak.SrcCnt
|
||||||
bcc .2
|
bcc .1
|
||||||
inc Pak.SrcCnt+1
|
inc Pak.SrcCnt+1
|
||||||
|
bmi .1
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
.9 rts
|
||||||
|
|
||||||
.2 sec
|
.4 lda (ZPSrcPtr)
|
||||||
lda ZPSrcPtr
|
jsr Pak.PutA
|
||||||
sbc #WSIZE
|
|
||||||
tay
|
|
||||||
lda ZPSrcPtr+1
|
|
||||||
sbc /WSIZE
|
|
||||||
tax
|
|
||||||
|
|
||||||
cpy Pak.WPtr
|
inc ZPSrcPtr
|
||||||
sbc Pak.WPtr+1
|
bne Pak.Run.1
|
||||||
bcc .8
|
inc ZPSrcPtr+1
|
||||||
|
bra Pak.Run.1
|
||||||
sty Pak.WPtr
|
|
||||||
stx Pak.WPtr+1
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Scan between Pak.WPtr & ZPSrcPtr-A
|
Pak.ScanBL >LDYA Pak.SrcPtr
|
||||||
* Byte string at ZPSrcPtr (len A)
|
>LDYA ZPSrcBLPtr
|
||||||
* IN : X = Byte string length
|
|
||||||
* OUT : CC: Y,A=offset to BL
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.ScanBL stx Pak.WStrLen
|
|
||||||
|
|
||||||
sec
|
sec
|
||||||
lda ZPSrcPtr WLimit=ZPSrcPtr-WStrLen
|
ror Pak.bBLFound
|
||||||
sbc Pak.WStrLen
|
|
||||||
sta Pak.WLimit
|
|
||||||
|
|
||||||
lda ZPSrcPtr+1
|
.1 sec
|
||||||
sbc #0
|
lda ZPSrcBLPtr
|
||||||
sta Pak.WLimit+1
|
sbc ZPSrcPtr
|
||||||
|
sta ZPBLCnt
|
||||||
|
|
||||||
lda Pak.WLimit
|
lda ZPSrcBLPtr+1
|
||||||
sec
|
sbc ZPSrcPtr+1
|
||||||
sbc Pak.WPtr
|
sta ZPBLCnt+1 ZPSrcBLPtr < !BlCnt < ZPSrcPtr
|
||||||
eor #$ff
|
bcs .8 ZPSrcBLPtr = ZPSrcPtr, exit
|
||||||
sta Pak.Cnt
|
|
||||||
|
>LDYA ZPCnt
|
||||||
|
>STYA ZPCntTmp Stop at end of Src Data
|
||||||
|
|
||||||
|
ldy #0 ...or Y = BL.MAX
|
||||||
|
|
||||||
lda Pak.WLimit+1
|
.2 inc ZPBLCnt
|
||||||
sbc Pak.WPtr+1
|
bne .3
|
||||||
eor #$ff
|
|
||||||
sta Pak.Cnt+1
|
|
||||||
|
|
||||||
bcc .9 WLimit < Pak.WPtr
|
inc ZPBLCnt+1
|
||||||
|
beq .4 ZPSrcBLPtr = ZPSrcPtr
|
||||||
|
|
||||||
lda Pak.WPtr
|
.3 lda (ZPSrcPtr),y
|
||||||
sta ZPSrcWPtr
|
cmp (ZPSrcBLPtr),y
|
||||||
|
bne .4 End of string matching
|
||||||
|
|
||||||
lda Pak.WPtr+1
|
|
||||||
sta ZPSrcWPtr+1
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda (ZPSrcWPtr),y
|
|
||||||
cmp (ZPSrcPtr),y
|
|
||||||
bne .6
|
|
||||||
iny
|
iny
|
||||||
cpy Pak.WStrLen
|
cpy #BL.MAX
|
||||||
bne .1
|
beq .4 Max BL len
|
||||||
sec
|
|
||||||
lda ZPSrcPtr
|
|
||||||
sbc ZPSrcWPtr
|
|
||||||
tay
|
|
||||||
lda ZPSrcPtr+1
|
|
||||||
sbc ZPSrcWPtr+1
|
|
||||||
|
|
||||||
clc
|
inc ZPCntTmp
|
||||||
rts
|
bne .2
|
||||||
|
inc ZPCntTmp+1
|
||||||
|
bne .2 Last Src Data
|
||||||
|
|
||||||
.6 inc ZPSrcWPtr
|
.4 dey Adjust BL len Range
|
||||||
bne .7
|
dey (0 = 3 matching chars...etc..)
|
||||||
inc ZPSrcWPtr+1
|
|
||||||
|
|
||||||
.7 inc Pak.Cnt
|
bmi .5 not long enough
|
||||||
bne .1
|
|
||||||
inc Pak.Cnt+1
|
cpy Pak.BestBLLen
|
||||||
bne .1
|
bcs .5 not better ...
|
||||||
|
|
||||||
|
sty Pak.BestBLLen
|
||||||
|
>LDYA ZPBLCnt
|
||||||
|
>STYA Pak.BestBL
|
||||||
|
|
||||||
|
stz Pak.bBLFound
|
||||||
|
|
||||||
|
.5 inc ZPSrcBLPtr
|
||||||
|
bne .1
|
||||||
|
inc ZPSrcBLPtr+1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.8 rol Pak.bBLFound
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.BuildTOPTable
|
Pak.BuildTOPTable
|
||||||
|
@ -310,8 +308,8 @@ Pak.BuildTOPTable
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
|
|
||||||
.2 lda Pak.Cnt
|
.2 lda Pak.CntL,x
|
||||||
ora Pak.Cnt+1
|
ora Pak.CntH,x
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
stz Pak.bStop
|
stz Pak.bStop
|
||||||
|
@ -344,11 +342,28 @@ Pak.BuildTOPTable
|
||||||
cpy #24
|
cpy #24
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.8 sty Pak.TopCnt
|
.8 sty Pak.Shnk+S.PAKSHNK.TOPCNT
|
||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.PutA bit Pak.RepCnt
|
Pak.PutA bit Pak.bPass2
|
||||||
|
bmi Pak.PutA.2
|
||||||
|
|
||||||
|
tax
|
||||||
|
inc Pak.CntL,x
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
inc Pak.CntH,x
|
||||||
|
|
||||||
|
.1 ldx #S.PAKSTAT.PASS1
|
||||||
|
jsr Pak.UpdateStats
|
||||||
|
ldx #S.PAKSTAT.BYTE8
|
||||||
|
jsr Pak.UpdateStats
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
Pak.PutA.2 bit Pak.RepCnt
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
stz Pak.RepCnt LastByte invalid...
|
stz Pak.RepCnt LastByte invalid...
|
||||||
|
@ -375,7 +390,7 @@ Pak.PutA bit Pak.RepCnt
|
||||||
|
|
||||||
.3 inc Pak.RepCnt
|
.3 inc Pak.RepCnt
|
||||||
lda Pak.RepCnt
|
lda Pak.RepCnt
|
||||||
cmp #REPMAX
|
cmp #REP.MAX
|
||||||
bne .8
|
bne .8
|
||||||
|
|
||||||
dec
|
dec
|
||||||
|
@ -441,7 +456,7 @@ Pak.PutA.1 bit Pak.bPass2
|
||||||
Pak.Flush ldx Pak.StringLen
|
Pak.Flush ldx Pak.StringLen
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
lda #PAK.B.STOREn
|
lda #PAK.B.STRING
|
||||||
ldy #4
|
ldy #4
|
||||||
jsr Pak.Out.PutYBits
|
jsr Pak.Out.PutYBits
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -472,11 +487,43 @@ Pak.UpdateStats inc Pak.Stat,x
|
||||||
inc Pak.Stat+1,x
|
inc Pak.Stat+1,x
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
Pak.PrintStats ldx #14
|
||||||
|
|
||||||
|
.1 >PUSHW Pak.Stat,x
|
||||||
|
dex
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
>PUSHBI 16
|
||||||
|
>LDYA L.MSG.Stats
|
||||||
|
>SYSCALL printf
|
||||||
|
|
||||||
|
ldx #24
|
||||||
|
|
||||||
|
.2 >PUSHB Pak.Shnk+S.PAKSHNK.TOPCNT,x
|
||||||
|
dex
|
||||||
|
bpl .2
|
||||||
|
|
||||||
|
>PUSHBI 25
|
||||||
|
>LDYA L.MSG.Top24
|
||||||
|
>SYSCALL printf
|
||||||
|
>DEBUG
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* .INB USR/SRC/LIB/LIBPAK.S.IN
|
* .INB USR/SRC/LIB/LIBPAK.S.IN
|
||||||
.INB USR/SRC/LIB/LIBPAK.S.OUT
|
.INB USR/SRC/LIB/LIBPAK.S.OUT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
MSG.Stats .AS "\r\nPass 1 : %5D\r\n"
|
||||||
|
.AS "Pass 2 : %5D\r\n"
|
||||||
|
.AS "Byte 8 : %5D\r\n"
|
||||||
|
.AS "Top 8 : %5D\r\n"
|
||||||
|
.AS "Top 16 : %5D\r\n"
|
||||||
|
.AS "Top 24 : %5D\r\n"
|
||||||
|
.AS "Rep N : %5D\r\n"
|
||||||
|
.AZ "BLNK : %5D\r\n"
|
||||||
|
MSG.Top24 .AZ "Top24 : %d\r\n%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h\r\n"
|
||||||
TOP.Bits .DA #%10000,#%110000,#%1110000
|
TOP.Bits .DA #%10000,#%110000,#%1110000
|
||||||
TOP.BitCnt .DA #5,#6,#7
|
TOP.BitCnt .DA #5,#6,#7
|
||||||
TOP.Stat .DA #S.PAKSTAT.TOP8,S.PAKSTAT.TOP16,S.PAKSTAT.TOP24
|
TOP.Stat .DA #S.PAKSTAT.TOP8,S.PAKSTAT.TOP16,S.PAKSTAT.TOP24
|
||||||
|
@ -490,18 +537,22 @@ Pak.DstCnt .BS 2
|
||||||
Pak.RepCnt .BS 1
|
Pak.RepCnt .BS 1
|
||||||
Pak.LastByte .BS 1
|
Pak.LastByte .BS 1
|
||||||
|
|
||||||
Pak.StringLen .BS 1
|
Pak.BL.BitCntL .BS 1
|
||||||
Pak.StringBuf .BS STRINGMAX
|
Pak.BL.BitCntH .BS 1
|
||||||
|
|
||||||
|
Pak.bBLFound .BS 1
|
||||||
|
Pak.BestBLLen .BS 1
|
||||||
|
Pak.BestBL .BS 2
|
||||||
|
|
||||||
|
Pak.StringLen .BS 1
|
||||||
|
Pak.StringBuf .BS STRING.MAX
|
||||||
|
|
||||||
Pak.TopCnt .BS 1
|
|
||||||
Pak.Cnt .BS 2
|
Pak.Cnt .BS 2
|
||||||
Pak.bStop .BS 1
|
Pak.bStop .BS 1
|
||||||
|
|
||||||
Pak.bPass2 .BS 1
|
Pak.bPass2 .BS 1
|
||||||
Pak.MaxReadAhead .BS 1
|
Pak.MaxReadAhead .BS 1
|
||||||
|
|
||||||
Pak.BestBLLen .BS 1
|
|
||||||
Pak.BestBL .BS 2
|
|
||||||
Pak.WPtr .BS 2
|
Pak.WPtr .BS 2
|
||||||
Pak.WLimit .BS 2
|
Pak.WLimit .BS 2
|
||||||
Pak.WStrLen .BS 1
|
Pak.WStrLen .BS 1
|
||||||
|
|
|
@ -5,9 +5,9 @@ NEW
|
||||||
* ZPInBufPtr = Ptr to Shunk Data
|
* ZPInBufPtr = Ptr to Shunk Data
|
||||||
* ZPOutBufPtr = Ptr to Uncompressed Data
|
* ZPOutBufPtr = Ptr to Uncompressed Data
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* ZPnCnt = !ZPULen
|
||||||
* ZPPtr1
|
* ZPPtr1
|
||||||
* ZPPtr2
|
* ZPPtr2
|
||||||
* ZPnCnt = !ZPULen
|
|
||||||
* ZPInMask,ZPOutLastByte
|
* ZPInMask,ZPOutLastByte
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
X.Unpak lda (ZPInBufPtr) ULEN LO
|
X.Unpak lda (ZPInBufPtr) ULEN LO
|
||||||
|
@ -17,22 +17,45 @@ X.Unpak lda (ZPInBufPtr) ULEN LO
|
||||||
jsr X.Unpak.NextByte
|
jsr X.Unpak.NextByte
|
||||||
|
|
||||||
lda (ZPInBufPtr) ULEN HI
|
lda (ZPInBufPtr) ULEN HI
|
||||||
|
eor #$ff
|
||||||
sta ZPnCnt+1
|
sta ZPnCnt+1
|
||||||
|
|
||||||
jsr X.Unpak.NextByte
|
jsr X.Unpak.NextByte
|
||||||
|
|
||||||
lda (ZPInBufPtr) TOPLEN
|
lda (ZPInBufPtr) CHNK.DATA.T
|
||||||
|
beq X.Unpak.T.STORE
|
||||||
|
|
||||||
|
cmp #CHNK.DATA.T.PAK
|
||||||
|
beq X.Unpak.T.PAK
|
||||||
|
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
X.Unpak.T.STORE ldy #0 start at 1 to skip CHNK.DATA.T
|
||||||
|
|
||||||
|
.1 iny
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
inc ZPInBufPtr+1
|
||||||
|
|
||||||
|
.2 lda (ZPInBufPtr),y
|
||||||
|
jsr X.Unpak.PutByte.1
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
X.Unpak.T.PAK jsr X.Unpak.NextByte skip CHNK.DATA.T
|
||||||
|
|
||||||
|
lda (ZPInBufPtr) CHNK.DATA.PAK.TOPLEN
|
||||||
clc
|
clc
|
||||||
adc ZPInBufPtr skip TOP table
|
adc ZPInBufPtr skip TOP table
|
||||||
sta ZPPtr1
|
sta ZPPtr1
|
||||||
|
|
||||||
lda ZPInBufPtr+1
|
lda ZPInBufPtr+1 ZPInBufPtr = TOPs
|
||||||
adc #0
|
adc #0
|
||||||
sta ZPPtr1+1
|
sta ZPPtr1+1 ZPPtr1 = DATA
|
||||||
|
|
||||||
jsr X.Unpak.NextByte
|
|
||||||
|
|
||||||
lda #$80
|
lda #$80
|
||||||
sta ZPInMask
|
sta ZPInMask
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user