mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-28 03:55:01 +00:00
Kernel 0.93+
This commit is contained in:
parent
cb8adcbb8b
commit
b7925394e5
Binary file not shown.
@ -9,10 +9,10 @@ WSIZE .EQ 4096
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PAK.B.STRING .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.000
|
||||||
PAK.B.TOP16 .EQ %110
|
PAK.B.TOP16 .EQ %110.000
|
||||||
PAK.B.TOP24 .EQ %1110
|
PAK.B.TOP24 .EQ %1110.000
|
||||||
PAK.B.REPn .EQ %1111
|
PAK.B.REPn .EQ %1111.0000
|
||||||
PAK.B.BACKLINK .EQ %1
|
PAK.B.BACKLINK .EQ %1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* STRINGn : 0 xxxx (1-16)
|
* STRINGn : 0 xxxx (1-16)
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
NEW
|
|
||||||
PREFIX
|
|
||||||
AUTO 4,1
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE USR/SRC/LIB/LIBPAK.S.AC
|
|
||||||
ASM
|
|
@ -1,63 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.In.Init >LDYA Pak.SrcPtr
|
|
||||||
>STYA ZPSrcPtr
|
|
||||||
|
|
||||||
lda Pak.Shnk+S.PAKSHNK.LEN
|
|
||||||
eor #$ff
|
|
||||||
sta Pak.SrcCnt
|
|
||||||
lda Pak.Shnk+S.PAKSHNK.LEN+1
|
|
||||||
eor #$ff
|
|
||||||
sta Pak.SrcCnt+1
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.In.GetRH lda #$ff
|
|
||||||
cmp Pak.SrcCnt+1 return 255 if not $ffxx
|
|
||||||
bne .1
|
|
||||||
lda Pak.SrcCnt
|
|
||||||
eor #$ff return !xx if $ffxx
|
|
||||||
.1 rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.In.MoveFWA clc
|
|
||||||
adc ZPSrcPtr
|
|
||||||
sta ZPSrcPtr
|
|
||||||
bcc .8
|
|
||||||
inc ZPSrcPtr+1
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.In.Get8Bits ldy #8
|
|
||||||
.HS 2C bit abs
|
|
||||||
Pak.In.Get4Bits ldy #4
|
|
||||||
lda #0 make sure to reset A before reading less than 8 bits only
|
|
||||||
.1 jsr Pak.In.GetBit and to exit with CC if even if 8 bits read
|
|
||||||
rol
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
rts always CC
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.In.GetBit ldx Pak.In.Mask
|
|
||||||
bne .1
|
|
||||||
jsr Pak.In.NxtByte
|
|
||||||
ldx #8
|
|
||||||
.1 dex
|
|
||||||
stx Pak.In.Mask
|
|
||||||
pha Don't trash A
|
|
||||||
lda (UnZPSrcPtr)
|
|
||||||
and Pak.In.BitMask,x
|
|
||||||
cmp #1 if 0:CC, i>0 CS
|
|
||||||
pla
|
|
||||||
rts Bit is in C
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.In.GetByte lda (UnZPSrcPtr)
|
|
||||||
Pak.In.NxtByte inc UnZPSrcPtr
|
|
||||||
bne .8
|
|
||||||
inc UnZPSrcPtr+1
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE USR/SRC/LIB/LIBPAK.S.IN
|
|
||||||
LOAD USR/SRC/LIB/LIBPAK.S
|
|
||||||
ASM
|
|
@ -1,133 +0,0 @@
|
|||||||
NEW
|
|
||||||
PREFIX
|
|
||||||
AUTO 4,1
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
* Sliding Window = 4096
|
|
||||||
*--------------------------------------
|
|
||||||
WSIZE .EQ 4096 power of 2
|
|
||||||
*--------------------------------------
|
|
||||||
* Output BITSTREAM :
|
|
||||||
* 0 : Lit (8)
|
|
||||||
* 1 : Copy, L (4), P.HI (4), P.LO (8)
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.LZ jsr Pak.In.Init Init SrcPtr,SrcCnt
|
|
||||||
jsr Pak.Out.Init
|
|
||||||
|
|
||||||
* future optimization, make P grows from 2 to 12 while increasing W size
|
|
||||||
* lda #2 Ptr width starts at 2 bits
|
|
||||||
* sta Pak.LZ.PWidth
|
|
||||||
* lda #%00000011 Ptr Mask Starts at %000000000011
|
|
||||||
* sta Pak.LZ.PMaskLO
|
|
||||||
* stz Pak.LZ.PMaskHI
|
|
||||||
lda #$ff
|
|
||||||
sta Pak.LZ.WCnt
|
|
||||||
sta Pak.LZ.WCnt+1 WCnt=!0
|
|
||||||
|
|
||||||
.1 jsr Pak.In.GetRH Z if EOF
|
|
||||||
beq .80
|
|
||||||
cmp #3
|
|
||||||
bcc .8 no more than 2 bytes left....store
|
|
||||||
cmp #19 more than 18 bytes left, limit to 18
|
|
||||||
bcc .2
|
|
||||||
lda #18
|
|
||||||
.2 tax X = Read ahead max size
|
|
||||||
lda ZPSrcPtr make ZPSrcWPtr=ZPSrcPtr
|
|
||||||
sta ZPSrcWPtr
|
|
||||||
lda ZPSrcPtr
|
|
||||||
sta ZPSrcWPtr
|
|
||||||
lda Pak.LZ.WCnt
|
|
||||||
sta ZPCnt
|
|
||||||
lda Pak.LZ.WCnt+1
|
|
||||||
sta ZPCnt+1
|
|
||||||
stz Pak.LZ.BestLen
|
|
||||||
.3 inc ZPCnt
|
|
||||||
bne .4
|
|
||||||
inc ZPCnt+1
|
|
||||||
beq .7 reached begining of window....store
|
|
||||||
lda ZPSrcWPtr make ZPSrcWPtr-=1
|
|
||||||
sec
|
|
||||||
sbc #1
|
|
||||||
sta ZPSrcWPtr
|
|
||||||
bcs .4
|
|
||||||
dec ZPSrcWPtr+1
|
|
||||||
.4 ldy #0
|
|
||||||
phx save Read ahead max size
|
|
||||||
|
|
||||||
.5 lda (ZPSrcPtr),y Try to find a match
|
|
||||||
cmp (ZPSrcWPtr),y
|
|
||||||
bne .6
|
|
||||||
iny
|
|
||||||
dex don't exceed 18 or Src Buffer
|
|
||||||
bne .5
|
|
||||||
.6 plx get back Read ahead max size
|
|
||||||
|
|
||||||
cpy #3 matched a least 3 chars ?
|
|
||||||
bcc .3 no....try one char back in Wnd
|
|
||||||
cpy Pak.LZ.BestLen better than last match ?
|
|
||||||
bcc .3 no....try one char back in Wnd
|
|
||||||
sty Pak.LZ.BestLen
|
|
||||||
lda ZPSrcWPtr
|
|
||||||
sta Pak.LZ.BestPtr
|
|
||||||
lda ZPSrcWPtr+1
|
|
||||||
sta Pak.LZ.BestPtr+1
|
|
||||||
bra .3
|
|
||||||
.7 lda Pak.LZ.BestLen do we match something ?
|
|
||||||
beq .8
|
|
||||||
lda Pak.LZ.BestPtr
|
|
||||||
sec
|
|
||||||
sbc ZPSrcPtr
|
|
||||||
sta Pak.LZ.BestPtr
|
|
||||||
lda Pak.LZ.BestPtr+1
|
|
||||||
sbc ZPSrcPtr+1
|
|
||||||
sta Pak.LZ.BestPtr+1
|
|
||||||
tya get len
|
|
||||||
dec Adjust range 0-15
|
|
||||||
dec
|
|
||||||
dec
|
|
||||||
ora Pak.LZ.BestPtr+1 merge with P.HI
|
|
||||||
sec
|
|
||||||
jsr Pak.Out.PutCA Put 9 bits 1+LLLL+PPPP
|
|
||||||
bcs .99
|
|
||||||
lda Pak.LZ.BestPtr Put 8 bits pppppppp
|
|
||||||
jsr Pak.Out.PutA
|
|
||||||
bcs .99
|
|
||||||
tya
|
|
||||||
bra .81
|
|
||||||
.8 lda (ZPSrcPtr)
|
|
||||||
clc
|
|
||||||
jsr Pak.Out.PutCA Put 9 bits 0+xxxxxxxx
|
|
||||||
bcs .99
|
|
||||||
lda #1
|
|
||||||
.81 jsr Pak.In.MoveFWA
|
|
||||||
tya
|
|
||||||
jsr LZ.MoveWndY
|
|
||||||
bra .3
|
|
||||||
bra .71
|
|
||||||
.80 clc
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
Unpak.LZ
|
|
||||||
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
LZ.MoveWndY tya
|
|
||||||
sec
|
|
||||||
sbc Pak.LZ.WCnt
|
|
||||||
tax
|
|
||||||
lda #0
|
|
||||||
sbc Pak.LZ.WCnt+1
|
|
||||||
cpx #WSIZE^$FF
|
|
||||||
sbc /WSIZE^$FF
|
|
||||||
bcs .1
|
|
||||||
ldx #WSIZE^$FF
|
|
||||||
lda /WSIZE^$FF
|
|
||||||
.1 stx Pak.LZ.WCnt
|
|
||||||
sta Pak.LZ.WCnt+1
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE USR/SRC/LIB/LIBPAK.S.LZ
|
|
||||||
ASM
|
|
@ -1,85 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.Out.Init lda #$80
|
|
||||||
sta Pak.Out.Mask
|
|
||||||
stz Pak.Out.Byte
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.Out.Close bit Pak.Out.Mask
|
|
||||||
bmi .8
|
|
||||||
lda Pak.Out.Byte
|
|
||||||
jmp Pak.Out.PutByte
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.Out.PutCA jsr Pak.Out.PutBitC
|
|
||||||
bcs Pak.Out.Put.rts
|
|
||||||
|
|
||||||
Pak.Out.PutA ldy #8
|
|
||||||
|
|
||||||
.1 asl
|
|
||||||
jsr Pak.Out.PutBitC
|
|
||||||
bcs Pak.Out.Put.rts
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
Pak.Out.Put.rts rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.Out.PutYBits
|
|
||||||
asl
|
|
||||||
jsr Pak.Out.PutBitC
|
|
||||||
bcs .9
|
|
||||||
dey
|
|
||||||
bne Pak.Out.PutYBits
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.Out.PutBitC pha
|
|
||||||
|
|
||||||
bcc .1
|
|
||||||
lda Pak.Out.Mask
|
|
||||||
tsb Pak.Out.Byte
|
|
||||||
clc
|
|
||||||
.1 lsr Pak.Out.Mask
|
|
||||||
bne .8
|
|
||||||
jsr Pak.Out.PutByte
|
|
||||||
bcs .9
|
|
||||||
jsr Pak.Out.Init
|
|
||||||
.8 pla
|
|
||||||
* clc
|
|
||||||
rts
|
|
||||||
.9 pla
|
|
||||||
* sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
Pak.Out.PutByte inc Pak.DstCnt
|
|
||||||
bne .1
|
|
||||||
inc Pak.DstCnt+1
|
|
||||||
beq .9
|
|
||||||
.1 bit Pak.bPass2
|
|
||||||
bmi .6
|
|
||||||
phx
|
|
||||||
tax
|
|
||||||
inc Pak.CntL,x
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc Pak.CntH,x
|
|
||||||
.2 plx
|
|
||||||
bra .7
|
|
||||||
.6 sta (ZPDstPtr)
|
|
||||||
|
|
||||||
inc ZPDstPtr
|
|
||||||
bne .2
|
|
||||||
inc ZPDstPtr+1
|
|
||||||
.7 inc Pak.Stat+S.PAKSTAT.PASS2,x
|
|
||||||
bne .8
|
|
||||||
inc Pak.Stat+S.PAKSTAT.PASS2+1,x
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE USR/SRC/LIB/LIBPAK.S.OUT
|
|
||||||
LOAD USR/SRC/LIB/LIBPAK.S
|
|
||||||
ASM
|
|
334
LIB/LIBPAK.S.txt
334
LIB/LIBPAK.S.txt
@ -55,7 +55,7 @@ LIB.UNLOAD clc
|
|||||||
* CS, Pak failure
|
* CS, Pak failure
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
Pak >PULLW Pak.SrcPtr
|
Pak >PULLW Pak.SrcPtr
|
||||||
>PULLW Pak.SrcLen
|
>PULLW Pak.Shnk+S.PAKSHNK.ULEN
|
||||||
>PULLW ZPDstPtr
|
>PULLW ZPDstPtr
|
||||||
>PULLW ZPStatPtr
|
>PULLW ZPStatPtr
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ Pak >PULLW Pak.SrcPtr
|
|||||||
ldx #8
|
ldx #8
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
lda Pak.SrcLen+1
|
lda Pak.Shnk+S.PAKSHNK.ULEN+1
|
||||||
beq .22
|
beq .22
|
||||||
|
|
||||||
ldy #8
|
ldy #8
|
||||||
@ -83,7 +83,7 @@ Pak >PULLW Pak.SrcPtr
|
|||||||
dey
|
dey
|
||||||
bra .2
|
bra .2
|
||||||
|
|
||||||
.22 lda Pak.SrcLen
|
.22 lda Pak.Shnk+S.PAKSHNK.ULEN
|
||||||
|
|
||||||
.3 asl
|
.3 asl
|
||||||
bcs .4
|
bcs .4
|
||||||
@ -97,8 +97,6 @@ Pak >PULLW Pak.SrcPtr
|
|||||||
|
|
||||||
stz Pak.bPass2
|
stz Pak.bPass2
|
||||||
|
|
||||||
jsr Pak.InitPass
|
|
||||||
|
|
||||||
jsr Pak.Run
|
jsr Pak.Run
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
@ -110,23 +108,15 @@ Pak >PULLW Pak.SrcPtr
|
|||||||
|
|
||||||
dec Pak.bPass2
|
dec Pak.bPass2
|
||||||
|
|
||||||
jsr Pak.InitPass
|
|
||||||
|
|
||||||
jsr Pak.Out.Init Initialize properly for first "PutBit" Call
|
jsr Pak.Out.Init Initialize properly for first "PutBit" Call
|
||||||
|
|
||||||
stz Pak.StringLen
|
stz Pak.StringLen
|
||||||
|
|
||||||
jsr Pak.Run
|
jsr Pak.Run
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr Pak.PrintStats
|
jsr Pak.PrintStats
|
||||||
|
|
||||||
ldy #S.PAKSHNK-1
|
|
||||||
|
|
||||||
.6 lda Pak.Shnk,y
|
|
||||||
|
|
||||||
dey
|
|
||||||
bpl .6
|
|
||||||
|
|
||||||
ldy #S.PAKSTAT-1
|
ldy #S.PAKSTAT-1
|
||||||
|
|
||||||
.7 lda Pak.Stat,y
|
.7 lda Pak.Stat,y
|
||||||
@ -134,40 +124,61 @@ Pak >PULLW Pak.SrcPtr
|
|||||||
dey
|
dey
|
||||||
bpl .7
|
bpl .7
|
||||||
|
|
||||||
|
>LDYA Pak.Stat+S.PAKSTAT.PASS2
|
||||||
clc
|
clc
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.InitPass >LDYA Pak.SrcPtr
|
Pak.BuildTOPTable
|
||||||
>STYA ZPSrcPtr
|
ldy #0
|
||||||
|
|
||||||
lda Pak.SrcLen
|
.1 stz Pak.Cnt Init best score to 0
|
||||||
eor #$ff
|
stz Pak.Cnt+1
|
||||||
sta Pak.SrcCnt
|
|
||||||
|
|
||||||
lda Pak.SrcLen+1
|
|
||||||
eor #$ff
|
|
||||||
sta Pak.SrcCnt+1
|
|
||||||
|
|
||||||
sec
|
sec
|
||||||
ror Pak.RepCnt
|
ror Pak.bStop
|
||||||
stz Pak.LastByte
|
|
||||||
|
|
||||||
ldx #S.PAKSTAT.PASS1
|
ldx #0
|
||||||
bit Pak.bPass2
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
inx
|
.2 lda Pak.CntL,x
|
||||||
inx
|
ora Pak.CntH,x
|
||||||
|
beq .3
|
||||||
|
|
||||||
.1 stz Pak.Stat,x Reset Stats
|
stz Pak.bStop
|
||||||
inx
|
|
||||||
cpx #S.PAKSTAT
|
lda Pak.Cnt
|
||||||
|
cmp Pak.CntL,x is it better at X
|
||||||
|
lda Pak.Cnt+1
|
||||||
|
sbc Pak.CntH,x
|
||||||
|
bcs .3 not better or equal...
|
||||||
|
|
||||||
|
stx Pak.LastByte save new score index...
|
||||||
|
|
||||||
|
lda Pak.CntL,x
|
||||||
|
sta Pak.Cnt ...and value
|
||||||
|
lda Pak.CntH,x
|
||||||
|
sta Pak.Cnt+1
|
||||||
|
|
||||||
|
.3 inx
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
bit Pak.bStop
|
||||||
|
bmi .8
|
||||||
|
|
||||||
|
lda Pak.LastByte
|
||||||
|
sta Pak.Shnk+S.PAKSHNK.TOPBYTES,y
|
||||||
|
tax
|
||||||
|
stz Pak.CntL,x Discard this entry
|
||||||
|
stz Pak.CntH,x
|
||||||
|
iny
|
||||||
|
cpy #24
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
.8 sty Pak.Shnk+S.PAKSHNK.TOPCNT
|
||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.Run
|
Pak.Run jsr Pak.InitPass
|
||||||
|
|
||||||
Pak.Run.1 inc Pak.SrcCnt
|
Pak.Run.1 inc Pak.SrcCnt
|
||||||
bne .1
|
bne .1
|
||||||
@ -179,7 +190,7 @@ Pak.Run.1 inc Pak.SrcCnt
|
|||||||
bcs .4
|
bcs .4
|
||||||
|
|
||||||
bit Pak.bPass2
|
bit Pak.bPass2
|
||||||
bpl .11
|
bmi .11
|
||||||
|
|
||||||
ldx #S.PAKSTAT.PASS1
|
ldx #S.PAKSTAT.PASS1
|
||||||
jsr Pak.UpdateStats
|
jsr Pak.UpdateStats
|
||||||
@ -234,8 +245,37 @@ Pak.Run.1 inc Pak.SrcCnt
|
|||||||
inc ZPSrcPtr+1
|
inc ZPSrcPtr+1
|
||||||
bra Pak.Run.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
|
||||||
>LDYA ZPSrcBLPtr
|
>STYA ZPSrcBLPtr
|
||||||
|
|
||||||
sec
|
sec
|
||||||
ror Pak.bBLFound
|
ror Pak.bBLFound
|
||||||
@ -276,11 +316,13 @@ Pak.ScanBL >LDYA Pak.SrcPtr
|
|||||||
|
|
||||||
.4 dey Adjust BL len Range
|
.4 dey Adjust BL len Range
|
||||||
dey (0 = 3 matching chars...etc..)
|
dey (0 = 3 matching chars...etc..)
|
||||||
|
dey
|
||||||
|
|
||||||
bmi .5 not long enough
|
bmi .5 not long enough
|
||||||
|
|
||||||
cpy Pak.BestBLLen
|
cpy Pak.BestBLLen
|
||||||
bcs .5 not better ...
|
bcc .5 not better ...
|
||||||
|
beq .5 same...
|
||||||
|
|
||||||
sty Pak.BestBLLen
|
sty Pak.BestBLLen
|
||||||
>LDYA ZPBLCnt
|
>LDYA ZPBLCnt
|
||||||
@ -288,6 +330,8 @@ Pak.ScanBL >LDYA Pak.SrcPtr
|
|||||||
|
|
||||||
stz Pak.bBLFound
|
stz Pak.bBLFound
|
||||||
|
|
||||||
|
jsr PrintBL
|
||||||
|
|
||||||
.5 inc ZPSrcBLPtr
|
.5 inc ZPSrcBLPtr
|
||||||
bne .1
|
bne .1
|
||||||
inc ZPSrcBLPtr+1
|
inc ZPSrcBLPtr+1
|
||||||
@ -297,53 +341,36 @@ Pak.ScanBL >LDYA Pak.SrcPtr
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.BuildTOPTable
|
PrintBl lda #'{'
|
||||||
|
>SYSCALL putchar
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
|
ldx Pak.BestBLLen
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
|
||||||
.1 stz Pak.Cnt Init best score to 0
|
.40 lda (ZPSrcBLPtr),y
|
||||||
stz Pak.Cnt+1
|
phy
|
||||||
|
phx
|
||||||
|
cmp #C.SPACE
|
||||||
|
bcs .41
|
||||||
|
|
||||||
sec
|
lda #'_'
|
||||||
ror Pak.bStop
|
.41 >SYSCALL putchar
|
||||||
|
plx
|
||||||
ldx #0
|
ply
|
||||||
|
|
||||||
.2 lda Pak.CntL,x
|
|
||||||
ora Pak.CntH,x
|
|
||||||
beq .3
|
|
||||||
|
|
||||||
stz Pak.bStop
|
|
||||||
|
|
||||||
lda Pak.Cnt
|
|
||||||
cmp Pak.CntL,x is it better at X
|
|
||||||
lda Pak.Cnt+1
|
|
||||||
sbc Pak.CntH,x
|
|
||||||
bcs .3 not better or equal...
|
|
||||||
|
|
||||||
stx Pak.In.Byte save new score index...
|
|
||||||
|
|
||||||
lda Pak.CntL,x
|
|
||||||
sta Pak.Cnt ...and value
|
|
||||||
lda Pak.CntH,x
|
|
||||||
sta Pak.Cnt+1
|
|
||||||
|
|
||||||
.3 inx
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
bit Pak.bStop
|
|
||||||
bmi .8
|
|
||||||
|
|
||||||
lda Pak.In.Byte
|
|
||||||
sta Pak.Shnk+S.PAKSHNK.TOPBYTES,y
|
|
||||||
tax
|
|
||||||
stz Pak.CntL,x Discard this entry
|
|
||||||
stz Pak.CntH,x
|
|
||||||
iny
|
iny
|
||||||
cpy #24
|
dex
|
||||||
bne .1
|
bne .40
|
||||||
|
|
||||||
.8 sty Pak.Shnk+S.PAKSHNK.TOPCNT
|
|
||||||
|
|
||||||
|
lda #'}'
|
||||||
|
>SYSCALL putchar
|
||||||
|
lda #C.CR
|
||||||
|
>SYSCALL putchar
|
||||||
|
lda #C.LF
|
||||||
|
>SYSCALL putchar
|
||||||
|
>DEBUG
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.PutA bit Pak.bPass2
|
Pak.PutA bit Pak.bPass2
|
||||||
@ -363,12 +390,14 @@ Pak.PutA bit Pak.bPass2
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
Pak.PutA.2 bit Pak.RepCnt
|
Pak.PutA.2 bra Pak.PutA.2.Out
|
||||||
|
|
||||||
|
bit Pak.RepCnt
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
stz Pak.RepCnt LastByte invalid...
|
stz Pak.RepCnt LastByte invalid...
|
||||||
sta Pak.LastByte
|
sta Pak.LastByte
|
||||||
bra Pak.PutA.1 send first byte.
|
bra Pak.PutA.2.Out send first byte.
|
||||||
|
|
||||||
.1 cmp Pak.LastByte
|
.1 cmp Pak.LastByte
|
||||||
beq .3
|
beq .3
|
||||||
@ -378,7 +407,7 @@ Pak.PutA.2 bit Pak.RepCnt
|
|||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
ora #PAK.B.REPn yes, send it
|
ora #PAK.B.REPn yes, send it
|
||||||
jsr Pak.PutA.1
|
jsr Pak.PutA.2.Out
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldx #S.PAKSTAT.REPN
|
ldx #S.PAKSTAT.REPN
|
||||||
@ -386,7 +415,7 @@ Pak.PutA.2 bit Pak.RepCnt
|
|||||||
stz Pak.RepCnt
|
stz Pak.RepCnt
|
||||||
|
|
||||||
.2 lda Pak.LastByte
|
.2 lda Pak.LastByte
|
||||||
bra Pak.PutA.1
|
bra Pak.PutA.2.Out
|
||||||
|
|
||||||
.3 inc Pak.RepCnt
|
.3 inc Pak.RepCnt
|
||||||
lda Pak.RepCnt
|
lda Pak.RepCnt
|
||||||
@ -395,7 +424,7 @@ Pak.PutA.2 bit Pak.RepCnt
|
|||||||
|
|
||||||
dec
|
dec
|
||||||
ora #PAK.B.REPn
|
ora #PAK.B.REPn
|
||||||
jsr Pak.PutA.1
|
jsr Pak.PutA.2.Out
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
@ -407,23 +436,7 @@ Pak.PutA.2 bit Pak.RepCnt
|
|||||||
.8 clc
|
.8 clc
|
||||||
.9 rts
|
.9 rts
|
||||||
|
|
||||||
Pak.PutA.1 bit Pak.bPass2
|
Pak.PutA.2.Out ldy Pak.Shnk+S.PAKSHNK.TOPCNT
|
||||||
bmi .10
|
|
||||||
|
|
||||||
tax
|
|
||||||
inc Pak.CntL,x
|
|
||||||
bne .11
|
|
||||||
inc Pak.CntH,x
|
|
||||||
|
|
||||||
.11 inc Pak.Stat+S.PAKSTAT.PASS1
|
|
||||||
bne .12
|
|
||||||
inc Pak.Stat+S.PAKSTAT.PASS1+1
|
|
||||||
.12 clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
* Pak.PutA.1 PASS #2
|
|
||||||
|
|
||||||
.10 ldy #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
|
||||||
@ -440,7 +453,7 @@ Pak.PutA.1 bit Pak.bPass2
|
|||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
tax
|
tax Range 0-2
|
||||||
tya
|
tya
|
||||||
and #7
|
and #7
|
||||||
ora TOP.Bits,x
|
ora TOP.Bits,x
|
||||||
@ -482,6 +495,102 @@ Pak.Flush ldx Pak.StringLen
|
|||||||
.8 clc
|
.8 clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
Pak.Out.Init lda Pak.Shnk+S.PAKSHNK.TOPCNT
|
||||||
|
jsr Pak.Out.PutByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.1 lda Pak.Shnk+S.PAKSHNK.TOPBYTES
|
||||||
|
jsr Pak.Out.PutByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
iny
|
||||||
|
cpy Pak.Shnk+S.PAKSHNK.TOPCNT
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
lda #$80
|
||||||
|
sta Pak.Out.Mask
|
||||||
|
stz Pak.Out.Byte
|
||||||
|
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
Pak.Out.Close bit Pak.Out.Mask
|
||||||
|
bmi .8
|
||||||
|
lda Pak.Out.Byte
|
||||||
|
jmp Pak.Out.PutByte
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
Pak.Out.PutCA jsr Pak.Out.PutBitC
|
||||||
|
bcs Pak.Out.Put.rts
|
||||||
|
|
||||||
|
ldy #8
|
||||||
|
|
||||||
|
.1 asl
|
||||||
|
jsr Pak.Out.PutBitC
|
||||||
|
bcs Pak.Out.Put.rts
|
||||||
|
dey
|
||||||
|
bne .1
|
||||||
|
Pak.Out.Put.rts rts
|
||||||
|
*--------------------------------------
|
||||||
|
Pak.Out.PutYBits
|
||||||
|
asl
|
||||||
|
jsr Pak.Out.PutBitC
|
||||||
|
bcs .9
|
||||||
|
dey
|
||||||
|
bne Pak.Out.PutYBits
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
Pak.Out.PutBitC pha
|
||||||
|
|
||||||
|
bcc .1
|
||||||
|
lda Pak.Out.Mask
|
||||||
|
tsb Pak.Out.Byte
|
||||||
|
|
||||||
|
.1 lsr Pak.Out.Mask
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
ror Pak.Out.Mask
|
||||||
|
|
||||||
|
jsr Pak.Out.PutByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.8 pla
|
||||||
|
* clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 pla
|
||||||
|
* sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
Pak.Out.PutByte inc Pak.DstCnt
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
inc Pak.DstCnt+1
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
.1 sta (ZPDstPtr)
|
||||||
|
|
||||||
|
inc ZPDstPtr
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
inc ZPDstPtr+1
|
||||||
|
|
||||||
|
.2 inc Pak.Stat+S.PAKSTAT.PASS2
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
inc Pak.Stat+S.PAKSTAT.PASS2+1
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
Pak.UpdateStats inc Pak.Stat,x
|
Pak.UpdateStats inc Pak.Stat,x
|
||||||
bne .8
|
bne .8
|
||||||
inc Pak.Stat+1,x
|
inc Pak.Stat+1,x
|
||||||
@ -507,12 +616,9 @@ Pak.PrintStats ldx #14
|
|||||||
>PUSHBI 25
|
>PUSHBI 25
|
||||||
>LDYA L.MSG.Top24
|
>LDYA L.MSG.Top24
|
||||||
>SYSCALL printf
|
>SYSCALL printf
|
||||||
>DEBUG
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* .INB USR/SRC/LIB/LIBPAK.S.IN
|
|
||||||
.INB USR/SRC/LIB/LIBPAK.S.OUT
|
|
||||||
*--------------------------------------
|
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MSG.Stats .AS "\r\nPass 1 : %5D\r\n"
|
MSG.Stats .AS "\r\nPass 1 : %5D\r\n"
|
||||||
@ -523,13 +629,12 @@ MSG.Stats .AS "\r\nPass 1 : %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\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"
|
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 #%10000,#%110000,#%1110000
|
TOP.Bits .DA #PAK.B.TOP8,PAK.B.TOP16,PAK.B.TOP24
|
||||||
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
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.SrcPtr .BS 2
|
Pak.SrcPtr .BS 2
|
||||||
Pak.SrcLen .BS 2
|
|
||||||
|
|
||||||
Pak.SrcCnt .BS 2
|
Pak.SrcCnt .BS 2
|
||||||
Pak.DstCnt .BS 2
|
Pak.DstCnt .BS 2
|
||||||
@ -551,14 +656,6 @@ 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.WPtr .BS 2
|
|
||||||
Pak.WLimit .BS 2
|
|
||||||
Pak.WStrLen .BS 1
|
|
||||||
|
|
||||||
Pak.In.Byte .BS 1
|
|
||||||
Pak.In.Mask .BS 1
|
|
||||||
|
|
||||||
Pak.Out.Byte .BS 1
|
Pak.Out.Byte .BS 1
|
||||||
Pak.Out.Mask .BS 1
|
Pak.Out.Mask .BS 1
|
||||||
@ -568,7 +665,6 @@ Pak.CntH .BS 256
|
|||||||
Pak.Shnk .BS S.PAKSHNK
|
Pak.Shnk .BS S.PAKSHNK
|
||||||
Pak.Stat .BS S.PAKSTAT
|
Pak.Stat .BS S.PAKSTAT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Pak.In.BitMask .HS 8040201008040201
|
|
||||||
MAN
|
MAN
|
||||||
SAVE USR/SRC/LIB/LIBPAK.S
|
SAVE USR/SRC/LIB/LIBPAK.S
|
||||||
ASM
|
ASM
|
||||||
|
Loading…
Reference in New Issue
Block a user