Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-10-02 17:21:03 +02:00
parent 1431388c45
commit 8c9c506d61
5 changed files with 306 additions and 201 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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