mirror of
https://github.com/A2osX/A2osX.git
synced 2025-03-28 05:34:05 +00:00
Kernel 0.93+
This commit is contained in:
parent
b9c6c178a9
commit
18f087ddcc
Binary file not shown.
@ -328,7 +328,7 @@ CS.RUN.REQUEST jsr Init.Timeout
|
||||
|
||||
jsr .8
|
||||
bcc .1
|
||||
tay
|
||||
inc
|
||||
bne .99
|
||||
>SLEEP
|
||||
jsr Wait.TimeOut
|
||||
|
290
LIB/LIBPAK.S.txt
290
LIB/LIBPAK.S.txt
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user