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
bcc .1
tay
inc
bne .99
>SLEEP
jsr Wait.TimeOut

View File

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