Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-10-04 17:47:26 +02:00
parent b9c6c178a9
commit 18f087ddcc
3 changed files with 157 additions and 135 deletions

Binary file not shown.

View File

@ -328,7 +328,7 @@ CS.RUN.REQUEST jsr Init.Timeout
jsr .8 jsr .8
bcc .1 bcc .1
tay inc
bne .99 bne .99
>SLEEP >SLEEP
jsr Wait.TimeOut jsr Wait.TimeOut

View File

@ -10,13 +10,14 @@ NEW
.INB INC/LIBPAK.I .INB INC/LIBPAK.I
*-------------------------------------- *--------------------------------------
ZPSrcPtr .EQ ZPLIB ZPSrcPtr .EQ ZPLIB
ZPCnt .EQ ZPLIB+2 ZPDstPtr .EQ ZPLIB+2
ZPSrcBLPtr .EQ ZPLIB+4 ZPStatPtr .EQ ZPLIB+4
ZPBLCnt .EQ ZPLIB+6
ZPCntTmp .EQ ZPLIB+8 ZPSrcBLPtr .EQ ZPLIB+8
ZPCnt .EQ ZPLIB+10
ZPBLCnt .EQ ZPLIB+12
ZPDstPtr .EQ ZPLIB+16
ZPStatPtr .EQ ZPLIB+18
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -110,8 +111,6 @@ Pak >PULLW Pak.SrcPtr
jsr Pak.Out.Init Initialize properly for first "PutBit" Call jsr Pak.Out.Init Initialize properly for first "PutBit" Call
stz Pak.StringLen
jsr Pak.Run jsr Pak.Run
bcs .9 bcs .9
@ -129,6 +128,111 @@ Pak >PULLW Pak.SrcPtr
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
Pak.Run >LDYA Pak.SrcPtr
>STYA ZPSrcPtr
lda Pak.Shnk+S.PAKSHNK.ULEN
eor #$ff
sta Pak.SrcCnt
sta Pak.DstCnt
lda Pak.Shnk+S.PAKSHNK.ULEN+1
eor #$ff
sta Pak.SrcCnt+1
sta Pak.DstCnt+1
sec
ror Pak.RepCnt
stz Pak.LastByte
ldx #S.PAKSTAT.PASS1
bit Pak.bPass2
bpl .1
inx
inx
.1 stz Pak.Stat,x Reset Stats
inx
cpx #S.PAKSTAT
bne .1
stz Pak.BL.Longest
stz Pak.BL.Farest
stz Pak.BL.Farest+1
Pak.Run.1 inc Pak.SrcCnt
bne .1
inc Pak.SrcCnt+1
beq .8 0 byte left...
.1 jsr Pak.ScanBL
bcs .4
ldx #S.PAKSTAT.BL
jsr Pak.UpdateStats
* jsr PrintBL
lda Pak.BestBLLen
cmp Pak.BL.Longest
bcc .10
sta Pak.BL.Longest
.10 bit Pak.bPass2
bmi .11
ldx #S.PAKSTAT.PASS1 Assume 1 BL worse case is 3 bytes
jsr Pak.UpdateStats
jsr Pak.UpdateStats
jsr Pak.UpdateStats
bra .3
.11 sec
lda Pak.Out.PutBitC
ldy Pak.BL.BitCntH
beq .2
lda Pak.BestBL+1
jsr Pak.Out.PutYBits
.2 ldy Pak.BL.BitCntL
lda Pak.BestBL
jsr Pak.Out.PutYBits
ldy #6
lda Pak.BestBLLen
jsr Pak.Out.PutYBits
lda Pak.BestBLLen
clc
adc ZPSrcPtr
sta ZPSrcPtr
bcc .3
inc ZPSrcPtr+1
.3 lda Pak.BestBLLen
clc
adc Pak.SrcCnt
sta Pak.SrcCnt
bcc .1
inc Pak.SrcCnt+1
bmi .1
.8 clc
.9 rts
.4 lda (ZPSrcPtr)
jsr Pak.PutA
inc ZPSrcPtr
bne Pak.Run.1
inc ZPSrcPtr+1
bra Pak.Run.1
*--------------------------------------
Pak.BuildTOPTable Pak.BuildTOPTable
ldy #0 ldy #0
@ -178,110 +282,15 @@ Pak.BuildTOPTable
rts rts
*-------------------------------------- *--------------------------------------
Pak.Run jsr Pak.InitPass Pak.ScanBL >LDYA Pak.SrcPtr Start at beginning of Src buf
Pak.Run.1 inc Pak.SrcCnt
bne .1
inc Pak.SrcCnt+1
beq .8 0 byte left...
.1 jsr Pak.ScanBL
bcs .4
bit Pak.bPass2
bmi .11
ldx #S.PAKSTAT.PASS1
jsr Pak.UpdateStats
jsr Pak.UpdateStats
jsr Pak.UpdateStats
bra .3
.11 sec
lda Pak.Out.PutBitC
ldy Pak.BL.BitCntH
beq .2
lda Pak.BestBL+1
jsr Pak.Out.PutYBits
.2 ldy Pak.BL.BitCntL
lda Pak.BestBL
jsr Pak.Out.PutYBits
ldy #6
lda Pak.BestBLLen
jsr Pak.Out.PutYBits
lda Pak.BestBLLen
clc
adc ZPSrcPtr
sta ZPSrcPtr
bcc .3
inc ZPSrcPtr+1
.3 ldx #S.PAKSTAT.BL
jsr Pak.UpdateStats
lda Pak.BestBLLen
clc
adc Pak.SrcCnt
sta Pak.SrcCnt
bcc .1
inc Pak.SrcCnt+1
bmi .1
.8 clc
.9 rts
.4 lda (ZPSrcPtr)
jsr Pak.PutA
inc ZPSrcPtr
bne Pak.Run.1
inc ZPSrcPtr+1
bra Pak.Run.1
*--------------------------------------
Pak.InitPass >LDYA Pak.SrcPtr
>STYA ZPSrcPtr
lda Pak.Shnk+S.PAKSHNK.ULEN
eor #$ff
sta Pak.SrcCnt
lda Pak.Shnk+S.PAKSHNK.ULEN+1
eor #$ff
sta Pak.SrcCnt+1
sec
ror Pak.RepCnt
stz Pak.LastByte
ldx #S.PAKSTAT.PASS1
bit Pak.bPass2
bpl .1
inx
inx
.1 stz Pak.Stat,x Reset Stats
inx
cpx #S.PAKSTAT
bne .1
rts
*--------------------------------------
Pak.ScanBL >LDYA Pak.SrcPtr
>STYA ZPSrcBLPtr >STYA ZPSrcBLPtr
sec sec
ror Pak.bBLFound ror Pak.bBLFound
stz Pak.BestBLLen
.1 sec .1 lda ZPSrcBLPtr
lda ZPSrcBLPtr sec
sbc ZPSrcPtr sbc ZPSrcPtr
sta ZPBLCnt sta ZPBLCnt
@ -290,8 +299,8 @@ Pak.ScanBL >LDYA Pak.SrcPtr
sta ZPBLCnt+1 ZPSrcBLPtr < !BlCnt < ZPSrcPtr sta ZPBLCnt+1 ZPSrcBLPtr < !BlCnt < ZPSrcPtr
bcs .8 ZPSrcBLPtr = ZPSrcPtr, exit bcs .8 ZPSrcBLPtr = ZPSrcPtr, exit
>LDYA ZPCnt >LDYA Pak.SrcCnt make sure not going past End Buffer
>STYA ZPCntTmp Stop at end of Src Data >STYA ZPCnt while reading ahead
ldy #0 ...or Y = BL.MAX ldy #0 ...or Y = BL.MAX
@ -309,9 +318,9 @@ Pak.ScanBL >LDYA Pak.SrcPtr
cpy #BL.MAX cpy #BL.MAX
beq .4 Max BL len beq .4 Max BL len
inc ZPCntTmp inc ZPCnt
bne .2 bne .2
inc ZPCntTmp+1 inc ZPCnt+1
bne .2 Last Src Data bne .2 Last Src Data
.4 dey Adjust BL len Range .4 dey Adjust BL len Range
@ -319,29 +328,30 @@ Pak.ScanBL >LDYA Pak.SrcPtr
dey dey
bmi .5 not long enough bmi .5 not long enough
cpy Pak.BestBLLen cpy Pak.BestBLLen
bcc .5 not better ... bcc .5 not better ...
beq .5 same... beq .5 same...
sty Pak.BestBLLen sty Pak.BestBLLen
>LDYA ZPBLCnt >LDYA ZPSrcBLPtr
>STYA Pak.BestBL >STYA Pak.BestBL
stz Pak.bBLFound stz Pak.bBLFound
jsr PrintBL
.5 inc ZPSrcBLPtr .5 inc ZPSrcBLPtr
bne .1 bne .1
inc ZPSrcBLPtr+1 inc ZPSrcBLPtr+1
bra .1 bra .1
.8 rol Pak.bBLFound .8 rol Pak.bBLFound
rts rts
*-------------------------------------- *--------------------------------------
PrintBl lda #'{' PrintBl >LDYA Pak.BestBL
>STYA ZPSrcBLPtr
lda #'{'
>SYSCALL putchar >SYSCALL putchar
ldy #0 ldy #0
@ -370,7 +380,7 @@ PrintBl lda #'{'
>SYSCALL putchar >SYSCALL putchar
lda #C.LF lda #C.LF
>SYSCALL putchar >SYSCALL putchar
>DEBUG
rts rts
*-------------------------------------- *--------------------------------------
Pak.PutA bit Pak.bPass2 Pak.PutA bit Pak.bPass2
@ -382,9 +392,7 @@ Pak.PutA bit Pak.bPass2
inc Pak.CntH,x inc Pak.CntH,x
.1 ldx #S.PAKSTAT.PASS1 .1 ldx #S.PAKSTAT.BYTE8
jsr Pak.UpdateStats
ldx #S.PAKSTAT.BYTE8
jsr Pak.UpdateStats jsr Pak.UpdateStats
clc clc
@ -441,7 +449,7 @@ Pak.PutA.2.Out ldy Pak.Shnk+S.PAKSHNK.TOPCNT
.1 cmp Pak.Shnk+S.PAKSHNK.TOPBYTES-1,y .1 cmp Pak.Shnk+S.PAKSHNK.TOPBYTES-1,y
beq .3 beq .3
dey dey
bpl .1 bne .1
ldx #S.PAKSTAT.BYTE8 ldx #S.PAKSTAT.BYTE8
jsr Pak.UpdateStats jsr Pak.UpdateStats
@ -449,7 +457,9 @@ Pak.PutA.2.Out ldy Pak.Shnk+S.PAKSHNK.TOPCNT
clc clc
jmp Pak.Out.PutCA jmp Pak.Out.PutCA
.3 tya Range 0-23 .3 dey Range 0-23
tya
lsr lsr
lsr lsr
lsr lsr
@ -462,7 +472,6 @@ Pak.PutA.2.Out ldy Pak.Shnk+S.PAKSHNK.TOPCNT
lda TOP.Stat,x lda TOP.Stat,x
tax tax
pla pla
jsr Pak.UpdateStats jsr Pak.UpdateStats
jmp Pak.Out.PutYBits jmp Pak.Out.PutYBits
*-------------------------------------- *--------------------------------------
@ -509,6 +518,8 @@ Pak.Out.Init lda Pak.Shnk+S.PAKSHNK.TOPCNT
cpy Pak.Shnk+S.PAKSHNK.TOPCNT cpy Pak.Shnk+S.PAKSHNK.TOPCNT
bne .1 bne .1
stz Pak.StringLen
lda #$80 lda #$80
sta Pak.Out.Mask sta Pak.Out.Mask
stz Pak.Out.Byte stz Pak.Out.Byte
@ -596,14 +607,22 @@ Pak.UpdateStats inc Pak.Stat,x
inc Pak.Stat+1,x inc Pak.Stat+1,x
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
Pak.PrintStats ldx #14 Pak.PrintStats lda Pak.BL.BitCntL
clc
adc Pak.BL.BitCntH
>PUSHA
lda Pak.BL.Longest
>PUSHA
ldx #14
.1 >PUSHW Pak.Stat,x .1 >PUSHW Pak.Stat,x
dex dex
dex dex
bpl .1 bpl .1
>PUSHBI 16 >PUSHBI 18
>LDYA L.MSG.Stats >LDYA L.MSG.Stats
>SYSCALL printf >SYSCALL printf
@ -628,7 +647,7 @@ MSG.Stats .AS "\r\nPass 1 : %5D\r\n"
.AS "Top 16 : %5D\r\n" .AS "Top 16 : %5D\r\n"
.AS "Top 24 : %5D\r\n" .AS "Top 24 : %5D\r\n"
.AS "Rep N : %5D\r\n" .AS "Rep N : %5D\r\n"
.AZ "BLNK : %5D\r\n" .AZ "BLNK : %5D, Longest : %d bytes, ptr witdh : %d bits\r\n"
MSG.Top24 .AZ "Top (%2d) : %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" MSG.Top24 .AZ "Top (%2d) : %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 #PAK.B.TOP8,PAK.B.TOP16,PAK.B.TOP24 TOP.Bits .DA #PAK.B.TOP8,PAK.B.TOP16,PAK.B.TOP24
TOP.BitCnt .DA #5,#6,#7 TOP.BitCnt .DA #5,#6,#7
@ -639,8 +658,10 @@ Pak.SrcPtr .BS 2
Pak.SrcCnt .BS 2 Pak.SrcCnt .BS 2
Pak.DstCnt .BS 2 Pak.DstCnt .BS 2
Pak.RepCnt .BS 1 Pak.bPass2 .BS 1
Pak.LastByte .BS 1
Pak.BL.Longest .BS 1
Pak.BL.Farest .BS 2
Pak.BL.BitCntL .BS 1 Pak.BL.BitCntL .BS 1
Pak.BL.BitCntH .BS 1 Pak.BL.BitCntH .BS 1
@ -649,13 +670,14 @@ Pak.bBLFound .BS 1
Pak.BestBLLen .BS 1 Pak.BestBLLen .BS 1
Pak.BestBL .BS 2 Pak.BestBL .BS 2
Pak.StringLen .BS 1
Pak.StringBuf .BS STRING.MAX
Pak.Cnt .BS 2 Pak.Cnt .BS 2
Pak.bStop .BS 1 Pak.bStop .BS 1
Pak.bPass2 .BS 1 Pak.RepCnt .BS 1
Pak.LastByte .BS 1
Pak.StringLen .BS 1
Pak.StringBuf .BS STRING.MAX
Pak.Out.Byte .BS 1 Pak.Out.Byte .BS 1
Pak.Out.Mask .BS 1 Pak.Out.Mask .BS 1