mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-28 10:52:33 +00:00
1558 lines
26 KiB
Plaintext
1558 lines
26 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
* ZPInBufPtr = Ptr to Uncompressed Data
|
||
* ZPOutBufPtr = Ptr to Shunk Data
|
||
* Y,A = ULEN
|
||
*--------------------------------------
|
||
* ZPInBufPtr
|
||
* ZPOutBufPtr
|
||
* ZPBackPtr
|
||
* ZPStrPtr
|
||
*--------------------------------------
|
||
X.Arc >STYA X.Arc.ShnkOut+S.ARCSHNK.ULEN
|
||
|
||
eor #$ff
|
||
sta X.Arc.nCnt+1
|
||
sta X.Arc.nCntOut+1
|
||
tya
|
||
eor #$ff
|
||
sta X.Arc.nCnt
|
||
sta X.Arc.nCntOut
|
||
|
||
stz X.Arc.ShnkOut+S.ARCSHNK.TBLBITS
|
||
stz X.Arc.ShnkOut+S.ARCSHNK.TBLBITS+1
|
||
|
||
>LDYA ZPInBufPtr
|
||
>STYA X.Arc.InBufPtr
|
||
>LDYA ZPOutBufPtr
|
||
>STYA X.Arc.OutBufPtr
|
||
|
||
jsr X.Arc.Reset Reset counters
|
||
* PASS #1
|
||
stz X.Arc.STRLen
|
||
|
||
jsr X.Arc.Run1
|
||
|
||
lda #32 4 Bytes header
|
||
sta X.Arc.TBits
|
||
sta X.Arc.BLBits
|
||
sta X.Arc.TBLBits
|
||
|
||
jsr X.Arc.ComputeTBits
|
||
|
||
lda X.Arc.BLL.Max
|
||
beq .1
|
||
|
||
jsr X.Arc.ComputeBLBits
|
||
jsr X.Arc.ComputeTBLBits
|
||
|
||
.1 .DO DBG
|
||
jsr X.Arc.PrintDBG1
|
||
jsr X.Arc.PrintDBG2
|
||
.FIN
|
||
|
||
jsr X.Arc.Select
|
||
bcs .9
|
||
|
||
sta X.Arc.Alg
|
||
* PASS #2
|
||
>LDYA X.Arc.InBufPtr
|
||
>STYA ZPInBufPtr
|
||
|
||
>LDYA X.Arc.nCntOut
|
||
>STYA X.Arc.nCnt
|
||
|
||
stz X.Arc.STRLen
|
||
|
||
jsr X.Arc.Out.Init2 Initialize properly for first "PutBit" Call
|
||
bcs .9
|
||
|
||
jsr X.Arc.Run2
|
||
bcs .9
|
||
|
||
.DO DBG
|
||
jsr X.Arc.ComputeDBG3 Get exact output bit count...
|
||
.FIN
|
||
|
||
jsr X.Arc.Close ...before sending last FULL byte
|
||
bcs .9
|
||
|
||
.DO DBG
|
||
jsr X.Arc.PrintDBG3
|
||
>DEBUG
|
||
.FIN
|
||
|
||
jsr X.Arc.RestorePtrs
|
||
|
||
>LDYA X.Arc.CLen
|
||
ldx X.Arc.Alg
|
||
clc
|
||
rts
|
||
|
||
.9 jsr X.Arc.RestorePtrs
|
||
|
||
>LDYA X.Arc.ShnkOut+S.ARCSHNK.ULEN
|
||
ldx #0
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.RestorePtrs
|
||
>LDYA X.Arc.InBufPtr
|
||
>STYA ZPInBufPtr
|
||
>LDYA X.Arc.OutBufPtr
|
||
>STYA ZPOutBufPtr
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.Reset ldx #X.Arc.ResetCnt
|
||
|
||
.1 stz X.Arc.ResetData-1,x
|
||
dex
|
||
bne .1
|
||
|
||
* ldx #0
|
||
|
||
.2 stz X.Arc.TopCntL,x
|
||
stz X.Arc.TopCntH,x
|
||
stz X.Arc.TopCntBLL,x
|
||
stz X.Arc.TopCntBLH,x
|
||
inx
|
||
bne .2
|
||
|
||
lda X.Arc.ShnkOut+S.ARCSHNK.ULEN+1
|
||
sta X.Arc.Bits+1
|
||
|
||
lda X.Arc.ShnkOut+S.ARCSHNK.ULEN
|
||
|
||
ldx #3
|
||
|
||
.3 asl
|
||
rol X.Arc.Bits+1
|
||
rol X.Arc.Bits+2
|
||
dex
|
||
bne .3
|
||
|
||
sta X.Arc.Bits
|
||
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.Run1 inc X.Arc.nCnt
|
||
bne .1
|
||
|
||
inc X.Arc.nCnt+1
|
||
beq X.Arc.StrStat 0 byte left, flush pending string
|
||
|
||
.1 jsr X.Arc.ScanBL
|
||
bcc .5
|
||
|
||
lda (ZPInBufPtr)
|
||
|
||
tax
|
||
inc X.Arc.TopCntBLL,x
|
||
bne .2
|
||
|
||
inc X.Arc.TopCntBLH,x
|
||
|
||
.2 inc X.Arc.TopCntL,x
|
||
bne .3
|
||
|
||
inc X.Arc.TopCntH,x
|
||
|
||
.3 inc X.Arc.STRLen
|
||
lda X.Arc.STRLen
|
||
cmp #STR.MAX
|
||
bcc .4
|
||
|
||
jsr X.Arc.StrStat Max Len string, flush
|
||
|
||
.4 inc ZPInBufPtr
|
||
bne X.Arc.Run1
|
||
|
||
inc ZPInBufPtr+1
|
||
bra X.Arc.Run1
|
||
*--------------------------------------
|
||
.5 jsr X.Arc.StrStat flush pending string
|
||
|
||
jsr X.Arc.BlStat
|
||
|
||
ldy X.Arc.BLLen
|
||
jsr X.Arc.StrSkipY
|
||
bcc .1
|
||
|
||
clc End Of InBuf
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.StrStat lda X.Arc.STRLen
|
||
tay
|
||
beq .8
|
||
|
||
cmp #STR.MIN
|
||
bcs .1
|
||
|
||
* clc
|
||
adc X.Arc.S.TB.Cnt
|
||
sta X.Arc.S.TB.Cnt
|
||
bcc .5
|
||
|
||
inc X.Arc.S.TB.Cnt+1
|
||
bra .5
|
||
|
||
.1 clc
|
||
adc X.Arc.STR.TB.Cnt
|
||
sta X.Arc.STR.TB.Cnt
|
||
bcc .2
|
||
|
||
inc X.Arc.STR.TB.Cnt+1
|
||
|
||
.2 lda X.Arc.STRLen
|
||
cmp X.Arc.STR.Max
|
||
bcc .3
|
||
|
||
sta X.Arc.STR.Max
|
||
|
||
.3 cmp #STR.MID
|
||
bcc .4
|
||
|
||
inc X.Arc.STR.LL.Cnt
|
||
bne .5
|
||
|
||
inc X.Arc.STR.LL.Cnt+1
|
||
bra .5
|
||
|
||
.4 inc X.Arc.STR.SL.Cnt
|
||
bne .5
|
||
|
||
inc X.Arc.STR.SL.Cnt+1
|
||
|
||
.5 ldy #0
|
||
|
||
.6 lda (ZPStrPtr),y
|
||
tax
|
||
|
||
inc X.Arc.TopCntL,x
|
||
bne .7
|
||
|
||
inc X.Arc.TopCntH,x
|
||
|
||
.7 iny
|
||
cpy X.Arc.STRLen
|
||
bne .6
|
||
|
||
stz X.Arc.STRLen
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
X.Arc.StrSkipY tya
|
||
clc
|
||
adc ZPInBufPtr
|
||
sta ZPInBufPtr
|
||
bcc .1
|
||
|
||
inc ZPInBufPtr+1
|
||
|
||
.1 tya
|
||
clc
|
||
adc X.Arc.nCnt
|
||
sta X.Arc.nCnt
|
||
bcc .8
|
||
|
||
inc X.Arc.nCnt+1
|
||
beq .8 CS
|
||
|
||
clc
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
X.Arc.BlStat lda X.Arc.BLLen
|
||
clc
|
||
adc X.Arc.BL.TB.Cnt
|
||
sta X.Arc.BL.TB.Cnt
|
||
bcc .10
|
||
|
||
inc X.Arc.BL.TB.Cnt+1
|
||
|
||
.10 lda X.Arc.BLLen
|
||
cmp X.Arc.BLL.Max
|
||
bcc .11
|
||
|
||
sta X.Arc.BLL.Max
|
||
|
||
.11 cmp #BLL.MID
|
||
bcc .12
|
||
|
||
inc X.Arc.BLL.LL.Cnt
|
||
bne .20
|
||
|
||
inc X.Arc.BLL.LL.Cnt+1
|
||
bra .20
|
||
|
||
.12 inc X.Arc.BLL.SL.Cnt
|
||
bne .20
|
||
|
||
inc X.Arc.BLL.SL.Cnt+1
|
||
* BLOFS
|
||
.20 >LDYA X.Arc.Ofs
|
||
cpy X.Arc.BLO.Max
|
||
pha
|
||
sbc X.Arc.BLO.Max+1
|
||
pla
|
||
bcc .21
|
||
|
||
>STYA X.Arc.BLO.Max
|
||
|
||
.21 jsr X.Arc.GetYABitCntInX
|
||
inc X.Arc.BLO.LO.cnt-1,x
|
||
bne .30
|
||
|
||
inc X.Arc.BLO.HI.cnt-1,x
|
||
|
||
.30 lda X.Arc.BLLen
|
||
|
||
.33 clc
|
||
adc X.Arc.Ofs
|
||
sta ZPBackPtr
|
||
lda #0
|
||
adc X.Arc.Ofs+1
|
||
sta ZPBackPtr+1
|
||
|
||
ldy #0
|
||
|
||
.34 lda (ZPBackPtr),y
|
||
tax
|
||
|
||
inc X.Arc.TopCntL,x
|
||
bne .35
|
||
|
||
inc X.Arc.TopCntH,x
|
||
|
||
.35 iny
|
||
cpy X.Arc.BLLen
|
||
bne .34
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
X.Arc.ComputeTBits
|
||
ldy #0
|
||
|
||
.1 stz X.Arc.Cnt Init best score to 0
|
||
stz X.Arc.Cnt+1
|
||
|
||
sec
|
||
ror X.Arc.bStop
|
||
|
||
ldx #0
|
||
|
||
.2 lda X.Arc.TopCntH,x
|
||
bne .20
|
||
|
||
lda X.Arc.TopCntL,x
|
||
cmp #TOP.MIN.CNT
|
||
bcc .3
|
||
|
||
.20 stz X.Arc.bStop
|
||
|
||
lda X.Arc.Cnt
|
||
cmp X.Arc.TopCntL,x is it better at X
|
||
lda X.Arc.Cnt+1
|
||
sbc X.Arc.TopCntH,x
|
||
bcs .3 not better or equal...
|
||
|
||
stx X.Arc.Best save new score index...
|
||
|
||
lda X.Arc.TopCntL,x
|
||
sta X.Arc.Cnt ...and value
|
||
lda X.Arc.TopCntH,x
|
||
sta X.Arc.Cnt+1
|
||
|
||
.3 inx
|
||
bne .2
|
||
|
||
bit X.Arc.bStop
|
||
bmi .6
|
||
|
||
ldx X.Arc.Best
|
||
lda X.Arc.TOP.Widths,y
|
||
clc
|
||
adc #ARC.B.RAWTOP.W add ARC.B.TOP bits
|
||
|
||
.4 pha
|
||
|
||
lda X.Arc.TopCntL,x
|
||
clc
|
||
adc X.Arc.TBits
|
||
sta X.Arc.TBits
|
||
|
||
lda X.Arc.TopCntH,x
|
||
adc X.Arc.TBits+1
|
||
sta X.Arc.TBits+1
|
||
bcc .5
|
||
|
||
inc X.Arc.TBits+2
|
||
|
||
.5 pla
|
||
dec
|
||
bne .4
|
||
|
||
lda X.Arc.Best
|
||
sta X.Arc.TopT,y
|
||
tax
|
||
stz X.Arc.TopCntL,x Discard this entry
|
||
stz X.Arc.TopCntH,x
|
||
iny
|
||
cpy #TOP.MAX
|
||
bne .1
|
||
|
||
.6 sty X.Arc.TopTSize
|
||
lda #0
|
||
ldx #8 Add Top Table Size
|
||
jsr X.Arc.AddXtYA2TBits
|
||
|
||
ldx #0
|
||
|
||
.7 lda X.Arc.TopCntL,x
|
||
tay
|
||
ora X.Arc.TopCntH,x
|
||
beq .10
|
||
|
||
lda X.Arc.TopCntH,x
|
||
|
||
phx
|
||
|
||
ldx #ARC.B.RAWTOP.W+8 add ARC.B.RAW bit
|
||
jsr X.Arc.AddXtYA2TBits
|
||
|
||
plx
|
||
|
||
.10 inx
|
||
bne .7
|
||
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.AddXtYA2TBits
|
||
pha
|
||
|
||
txa
|
||
beq .9
|
||
|
||
.1 tya
|
||
clc
|
||
adc X.Arc.TBits
|
||
sta X.Arc.TBits
|
||
|
||
pla
|
||
pha
|
||
|
||
adc X.Arc.TBits+1
|
||
sta X.Arc.TBits+1
|
||
bcc .2
|
||
|
||
inc X.Arc.TBits+2
|
||
|
||
.2 dex
|
||
bne .1
|
||
|
||
.9 pla
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.ComputeBLBits
|
||
lda X.Arc.STR.Max
|
||
beq .10
|
||
|
||
sec
|
||
sbc #STR.MID
|
||
bcc .10
|
||
|
||
bne .13
|
||
|
||
inc
|
||
|
||
.13 jsr X.Arc.GetABitCntInX
|
||
|
||
stx X.Arc.STR.Bits
|
||
|
||
.10 lda X.Arc.BLL.Max
|
||
beq .40
|
||
|
||
sec
|
||
sbc #BLL.MID
|
||
bcc .30
|
||
|
||
bne .12
|
||
|
||
inc
|
||
|
||
.12 jsr X.Arc.GetABitCntInX
|
||
stx X.Arc.BLL.Bits
|
||
|
||
.30 >LDYA X.Arc.BLO.Max
|
||
jsr X.Arc.GetYABitCntInX
|
||
stx X.Arc.BLO.Bits
|
||
*--------------------------------------
|
||
.40 ldx #ARC.B.PREFIX.W+8
|
||
>LDYA X.Arc.S.TB.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
|
||
ldx #8
|
||
>LDYA X.Arc.STR.TB.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
* SLEN
|
||
lda X.Arc.STR.Bits
|
||
bne .50
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTSTR.W
|
||
>LDYA X.Arc.STR.SL.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
bra .51
|
||
|
||
.50 clc
|
||
adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W
|
||
tax
|
||
>LDYA X.Arc.STR.LL.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTSTR.W
|
||
>LDYA X.Arc.STR.SL.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
* BLLEN
|
||
.51 lda X.Arc.BLL.Bits
|
||
bne .60
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTBLL.W
|
||
>LDYA X.Arc.BLL.SL.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
bra .61
|
||
|
||
.60 clc
|
||
adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W
|
||
tax
|
||
>LDYA X.Arc.BLL.LL.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTBLL.W
|
||
>LDYA X.Arc.BLL.SL.Cnt
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
* BLOFS
|
||
.61 ldx #12
|
||
|
||
.62 phx
|
||
|
||
ldy X.Arc.BLO.LO.cnt-1,x
|
||
lda X.Arc.BLO.HI.cnt-1,x
|
||
|
||
ldx X.Arc.BLO.Bits
|
||
|
||
jsr X.Arc.AddXtYA2BLBits
|
||
plx
|
||
dex
|
||
bne .62
|
||
|
||
rts
|
||
|
||
X.Arc.AddXtYA2BLBits
|
||
pha
|
||
|
||
txa
|
||
beq .9
|
||
|
||
.1 tya
|
||
clc
|
||
adc X.Arc.BLBits
|
||
sta X.Arc.BLBits
|
||
|
||
pla
|
||
pha
|
||
|
||
adc X.Arc.BLBits+1
|
||
sta X.Arc.BLBits+1
|
||
bcc .2
|
||
|
||
inc X.Arc.BLBits+2
|
||
|
||
.2 dex
|
||
bne .1
|
||
|
||
.9 pla
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.ComputeTBLBits
|
||
ldy #0
|
||
|
||
.1 stz X.Arc.Cnt Init best score to 0
|
||
stz X.Arc.Cnt+1
|
||
|
||
sec
|
||
ror X.Arc.bStop
|
||
|
||
ldx #0
|
||
|
||
.2 lda X.Arc.TopCntBLH,x
|
||
bne .20
|
||
|
||
lda X.Arc.TopCntBLL,x
|
||
cmp #TOP.MIN.CNT
|
||
bcc .3
|
||
|
||
.20 stz X.Arc.bStop
|
||
|
||
lda X.Arc.Cnt
|
||
cmp X.Arc.TopCntBLL,x is it better at X
|
||
lda X.Arc.Cnt+1
|
||
sbc X.Arc.TopCntBLH,x
|
||
bcs .3 not better or equal...
|
||
|
||
stx X.Arc.Best save new score index...
|
||
|
||
lda X.Arc.TopCntBLL,x
|
||
sta X.Arc.Cnt ...and value
|
||
lda X.Arc.TopCntBLH,x
|
||
sta X.Arc.Cnt+1
|
||
|
||
.3 inx
|
||
bne .2
|
||
|
||
bit X.Arc.bStop
|
||
bmi .6
|
||
|
||
ldx X.Arc.Best
|
||
lda X.Arc.TOP.Widths,y
|
||
clc
|
||
adc #ARC.B.RAWTOP.W add ARC.B.TOP bit
|
||
|
||
.4 pha
|
||
|
||
lda X.Arc.TopCntBLL,x
|
||
clc
|
||
adc X.Arc.TBLBits
|
||
sta X.Arc.TBLBits
|
||
|
||
lda X.Arc.TopCntBLH,x
|
||
adc X.Arc.TBLBits+1
|
||
sta X.Arc.TBLBits+1
|
||
bcc .5
|
||
|
||
inc X.Arc.TBLBits+2
|
||
|
||
.5 pla
|
||
dec
|
||
bne .4
|
||
|
||
lda X.Arc.Best
|
||
sta X.Arc.TopTBL,y
|
||
tax
|
||
stz X.Arc.TopCntBLL,x Discard this entry
|
||
stz X.Arc.TopCntBLH,x
|
||
iny
|
||
cpy #TOP.MAX
|
||
bne .1
|
||
|
||
.6 sty X.Arc.TopTBLSize
|
||
lda #0
|
||
ldx #8
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
|
||
ldx #0
|
||
|
||
.7 lda X.Arc.TopCntBLL,x
|
||
tay
|
||
ora X.Arc.TopCntBLH,x
|
||
beq .10
|
||
|
||
lda X.Arc.TopCntBLH,x
|
||
|
||
phx
|
||
|
||
ldx #ARC.B.RAWTOP.W+8 add ARC.B.RAW bit
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
|
||
plx
|
||
|
||
.10 inx
|
||
bne .7
|
||
|
||
X.Arc.ComputeBLBits4TBL
|
||
|
||
ldx #ARC.B.PREFIX.W add ARC.B.SINGLE bits
|
||
>LDYA X.Arc.S.TB.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
* SLEN
|
||
lda X.Arc.STR.Bits
|
||
bne .50
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTSTR.W
|
||
>LDYA X.Arc.STR.SL.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
bra .51
|
||
|
||
.50 clc
|
||
adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W
|
||
tax
|
||
>LDYA X.Arc.STR.LL.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTSTR.W
|
||
>LDYA X.Arc.STR.SL.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
* BLLEN
|
||
.51 lda X.Arc.BLL.Bits
|
||
bne .60
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTBLL.W
|
||
>LDYA X.Arc.BLL.SL.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
bra .61
|
||
|
||
.60 clc
|
||
adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W
|
||
tax
|
||
>LDYA X.Arc.BLL.LL.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
|
||
ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTBLL.W
|
||
>LDYA X.Arc.BLL.SL.Cnt
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
* BLOFS
|
||
.61 ldx #12
|
||
|
||
.62 phx
|
||
|
||
ldy X.Arc.BLO.LO.cnt-1,x
|
||
lda X.Arc.BLO.HI.cnt-1,x
|
||
|
||
ldx X.Arc.BLO.Bits
|
||
|
||
jsr X.Arc.AddXtYA2TBLBits
|
||
plx
|
||
dex
|
||
bne .62
|
||
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.AddXtYA2TBLBits
|
||
pha
|
||
|
||
txa
|
||
beq .9
|
||
|
||
.1 tya
|
||
clc
|
||
adc X.Arc.TBLBits
|
||
sta X.Arc.TBLBits
|
||
|
||
pla
|
||
pha
|
||
|
||
adc X.Arc.TBLBits+1
|
||
sta X.Arc.TBLBits+1
|
||
bcc .2
|
||
|
||
inc X.Arc.TBLBits+2
|
||
|
||
.2 dex
|
||
bne .1
|
||
|
||
.9 pla
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.Select stz X.Arc.bScanBL
|
||
|
||
ldx #0
|
||
ldy #4
|
||
|
||
.1 lda X.Arc.Bits,y
|
||
cmp X.Arc.Bits,x
|
||
lda X.Arc.Bits+1,y
|
||
sbc X.Arc.Bits+1,x
|
||
lda X.Arc.Bits+2,y
|
||
sbc X.Arc.Bits+2,x
|
||
bcs .2
|
||
|
||
tya
|
||
tax
|
||
|
||
.2 iny
|
||
iny
|
||
iny
|
||
iny
|
||
cpy #16
|
||
bne .1
|
||
|
||
* ldx #4
|
||
|
||
txa
|
||
beq .9 CS
|
||
|
||
lda #0
|
||
|
||
cpx #8 < BL,TBL ?
|
||
bcc .3 only T
|
||
|
||
lda X.Arc.BLL.Bits
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
ora X.Arc.BLO.Bits
|
||
sta X.Arc.ShnkOut+S.ARCSHNK.TBLBITS+1
|
||
|
||
lda X.Arc.STR.Bits
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
sta X.Arc.ShnkOut+S.ARCSHNK.TBLBITS
|
||
|
||
dec X.Arc.bScanBL
|
||
|
||
cpx #8 only BL ?
|
||
beq .8
|
||
|
||
bra .5 TBL
|
||
|
||
.3 ldy X.Arc.TopTSize
|
||
|
||
.4 lda X.Arc.TopT-1,y
|
||
sta X.Arc.ShnkOut+S.ARCSHNK.TOPBYTES-1,y
|
||
dey
|
||
bne .4
|
||
|
||
lda X.Arc.TopTSize
|
||
bra .7
|
||
|
||
.5 ldy X.Arc.TopTBLSize
|
||
|
||
.6 lda X.Arc.TopTBL-1,y
|
||
sta X.Arc.ShnkOut+S.ARCSHNK.TOPBYTES-1,y
|
||
dey
|
||
bne .6
|
||
|
||
lda X.Arc.TopTBLSize
|
||
|
||
.7 sta X.Arc.TopSize
|
||
lsr
|
||
tsb X.Arc.ShnkOut+S.ARCSHNK.TBLBITS
|
||
lda #0
|
||
ror
|
||
tsb X.Arc.ShnkOut+S.ARCSHNK.TBLBITS+1
|
||
|
||
.8 txa X=4,8 or 12
|
||
lsr
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #E.BUF
|
||
* sec
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.Out.Init2 ldy #0
|
||
|
||
.1 lda X.Arc.ShnkOut,y
|
||
jsr X.Arc.PutByte
|
||
bcs .9
|
||
|
||
iny
|
||
cpy #S.ARCSHNK.TOPBYTES
|
||
bne .1
|
||
|
||
ldx X.Arc.TopSize
|
||
beq .8
|
||
|
||
.2 lda X.Arc.ShnkOut,y
|
||
jsr X.Arc.PutByte
|
||
bcs .9
|
||
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
.8 lda #$80
|
||
sta X.Arc.OutMask
|
||
stz X.Arc.OutByte
|
||
|
||
clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
X.Arc.Run2
|
||
* >DEBUG
|
||
bit X.Arc.bScanBL
|
||
bmi X.Arc.Run2BLTBL
|
||
|
||
X.Arc.Run2T inc X.Arc.nCnt
|
||
bne .1
|
||
|
||
inc X.Arc.nCnt+1
|
||
beq .8 0 byte left...
|
||
|
||
.1 lda (ZPInBufPtr)
|
||
jsr X.Arc.PutByte8
|
||
bcs .9
|
||
|
||
inc ZPInBufPtr
|
||
bne X.Arc.Run2T
|
||
|
||
inc ZPInBufPtr+1
|
||
bra X.Arc.Run2T
|
||
|
||
.8 clc
|
||
.9 rts
|
||
|
||
X.Arc.Run2BLTBL inc X.Arc.nCnt
|
||
bne .1
|
||
|
||
inc X.Arc.nCnt+1
|
||
beq .8
|
||
|
||
.1 jsr X.Arc.ScanBL
|
||
bcc .5
|
||
|
||
lda X.Arc.STRLen
|
||
bne .2
|
||
|
||
lda ZPInBufPtr
|
||
sta ZPStrPtr
|
||
lda ZPInBufPtr+1
|
||
sta ZPStrPtr+1
|
||
|
||
inc X.Arc.STRLen
|
||
bra .3
|
||
|
||
.2 inc
|
||
sta X.Arc.STRLen
|
||
cmp #STR.MAX
|
||
bcc .3
|
||
|
||
jsr X.Arc.PutSTR
|
||
bcs .9
|
||
|
||
.3 inc ZPInBufPtr
|
||
bne X.Arc.Run2BLTBL
|
||
|
||
inc ZPInBufPtr+1
|
||
|
||
bra X.Arc.Run2BLTBL
|
||
*--------------------------------------
|
||
.5 jsr X.Arc.PutSTR
|
||
bcs .9
|
||
|
||
jsr X.Arc.PutBL
|
||
bcs .9
|
||
|
||
lda X.Arc.BLLen
|
||
clc
|
||
adc ZPInBufPtr
|
||
sta ZPInBufPtr
|
||
bcc .6
|
||
|
||
inc ZPInBufPtr+1
|
||
|
||
.6 lda X.Arc.BLLen
|
||
clc
|
||
adc X.Arc.nCnt
|
||
sta X.Arc.nCnt
|
||
bcc .1
|
||
|
||
inc X.Arc.nCnt+1
|
||
bmi .1
|
||
|
||
.8 jmp X.Arc.PutSTR
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
X.Arc.ScanBL lda ZPInBufPtr
|
||
sec
|
||
sbc #BLO.WINDOW
|
||
tax
|
||
|
||
lda ZPInBufPtr+1
|
||
sbc /BLO.WINDOW
|
||
pha
|
||
cpx X.Arc.InBufPtr
|
||
sbc X.Arc.InBufPtr+1
|
||
pla
|
||
bcs .10
|
||
|
||
ldx X.Arc.InBufPtr Start at beginning of Src buf
|
||
lda X.Arc.InBufPtr+1
|
||
|
||
.10 stx ZPBackPtr
|
||
sta ZPBackPtr+1
|
||
|
||
stz X.Arc.BLLen Nothing found yet
|
||
|
||
.1 lda ZPBackPtr
|
||
sec
|
||
sbc ZPInBufPtr
|
||
sta X.Arc.OfsWnCnt
|
||
|
||
lda ZPBackPtr+1
|
||
sbc ZPInBufPtr+1
|
||
sta X.Arc.OfsWnCnt+1 ZPBackPtr < !OfsWnCnt < ZPInBufPtr
|
||
bcs .8 ZPBackPtr = ZPInBufPtr, exit
|
||
|
||
>LDYA X.Arc.nCnt make sure not going past End Buffer
|
||
>STYA X.Arc.OfsBnCnt while reading ahead...
|
||
|
||
ldy #0 ...or Y = BL.MAX
|
||
|
||
.2 inc X.Arc.OfsWnCnt
|
||
bne .3
|
||
|
||
inc X.Arc.OfsWnCnt+1
|
||
beq .6 ZPBackPtr = ZPInBufPtr
|
||
|
||
.3 inc X.Arc.OfsBnCnt
|
||
bne .4
|
||
|
||
inc X.Arc.OfsBnCnt+1
|
||
beq .6 Last Src Data
|
||
|
||
.4 lda (ZPInBufPtr),y
|
||
cmp (ZPBackPtr),y
|
||
bne .6 End of string matching
|
||
|
||
.5 iny
|
||
cpy #BLL.MAX
|
||
bne .2 Max BL len
|
||
|
||
.6 cpy #BLL.MIN
|
||
bcc .7 not long enough
|
||
|
||
cpy X.Arc.BLLen
|
||
bcc .7 not better ...
|
||
* beq .7 !!! same...but closer !!!
|
||
|
||
sty X.Arc.BLLen
|
||
tya
|
||
clc
|
||
adc ZPBackPtr
|
||
sta X.Arc.Ofs
|
||
lda ZPBackPtr+1
|
||
adc #0
|
||
sta X.Arc.Ofs+1 Make X.Arc.Ofs pointing to the END
|
||
|
||
lda ZPInBufPtr
|
||
sec
|
||
sbc X.Arc.Ofs
|
||
sta X.Arc.Ofs
|
||
|
||
lda ZPInBufPtr+1
|
||
sbc X.Arc.Ofs+1
|
||
sta X.Arc.Ofs+1
|
||
|
||
.7 inc ZPBackPtr
|
||
bne .1
|
||
|
||
inc ZPBackPtr+1
|
||
bra .1
|
||
|
||
.8 lda X.Arc.BLLen exit with result flag in C
|
||
beq .9 no BL CS
|
||
|
||
clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
X.Arc.GetYABitCntInX
|
||
tax
|
||
beq .2
|
||
|
||
ldx #17 BitCnt = bc(A) + 8
|
||
|
||
.1 dex
|
||
asl
|
||
bcc .1
|
||
|
||
.9 rts
|
||
|
||
.2 tya BitCnt = bc(Y)
|
||
beq .9
|
||
*--------------------------------------
|
||
X.Arc.GetABitCntInX
|
||
ldx #9
|
||
|
||
.1 dex
|
||
asl
|
||
bcc .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.PutSTR lda X.Arc.STRLen
|
||
beq .8
|
||
|
||
cmp #STR.MIN
|
||
bcs .3
|
||
|
||
.1 ldx #ARC.B.PREFIX.W
|
||
lda #ARC.B.SINGLE
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
lda (ZPStrPtr)
|
||
jsr X.Arc.PutByte8
|
||
bcs .9
|
||
|
||
inc ZPStrPtr
|
||
bne .2
|
||
|
||
inc ZPStrPtr+1
|
||
|
||
.2 dec X.Arc.STRLen
|
||
bne .1
|
||
|
||
* clc
|
||
|
||
rts
|
||
*--------------------------------------
|
||
.3 ldx #ARC.B.PREFIX.W
|
||
lda #ARC.B.STRBL
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
ldx #ARC.B.STRBL.W
|
||
lda #ARC.B.STR
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
lda X.Arc.STR.Bits
|
||
beq .5
|
||
|
||
lda X.Arc.STRLen
|
||
cmp #STR.MID
|
||
bcc .4
|
||
|
||
ldx #ARC.B.LEN.W
|
||
lda #ARC.B.LONG.B
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
lda X.Arc.STRLen
|
||
sec
|
||
sbc #STR.MID
|
||
ldx X.Arc.STR.Bits
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
bra .6
|
||
*--------------------------------------
|
||
.4 ldx #ARC.B.LEN.W
|
||
lda #ARC.B.SHORT.B
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
.5 ldx #ARC.B.SHORTSTR.W
|
||
lda X.Arc.STRLen
|
||
sec
|
||
sbc #STR.MIN
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
.6 lda (ZPStrPtr)
|
||
jsr X.Arc.PutByte8
|
||
bcs .9
|
||
|
||
inc ZPStrPtr
|
||
bne .7
|
||
|
||
inc ZPStrPtr+1
|
||
|
||
.7 dec X.Arc.STRLen
|
||
bne .6
|
||
|
||
.8 clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
X.Arc.PutBL ldx #ARC.B.PREFIX.W
|
||
lda #ARC.B.STRBL
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
ldx #ARC.B.STRBL.W
|
||
lda #ARC.B.BL
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
* BLLen
|
||
lda X.Arc.BLL.Bits
|
||
beq .2 no long len...
|
||
|
||
lda X.Arc.BLLen
|
||
cmp #BLL.MID
|
||
bcc .1 this one is short
|
||
|
||
ldx #ARC.B.LEN.W
|
||
lda #ARC.B.LONG.B
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
lda X.Arc.BLLen
|
||
sec
|
||
sbc #BLL.MID
|
||
ldx X.Arc.BLL.Bits
|
||
jsr X.Arc.PutXBits
|
||
bcc .3
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
.1 ldx #ARC.B.LEN.W
|
||
lda #ARC.B.SHORT.B
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
.2 ldx #ARC.B.SHORTBLL.W
|
||
lda X.Arc.BLLen
|
||
sec
|
||
sbc #BLL.MIN
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
* BLOFS
|
||
.3 ldx X.Arc.BLO.Bits
|
||
cpx #9
|
||
bcc .4
|
||
|
||
txa
|
||
* sec
|
||
sbc #8
|
||
tax
|
||
lda X.Arc.Ofs+1
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
ldx #8
|
||
|
||
.4 lda X.Arc.Ofs
|
||
bra X.Arc.PutXBits
|
||
*--------------------------------------
|
||
X.Arc.PutByte8 ldy X.Arc.TopSize
|
||
beq .4 No TOP Table
|
||
|
||
dey Range 0-63
|
||
|
||
.1 cmp X.Arc.ShnkOut+S.ARCSHNK.TOPBYTES,y
|
||
beq .5
|
||
|
||
dey
|
||
bpl .1
|
||
|
||
tay
|
||
|
||
ldx #ARC.B.RAWTOP.W
|
||
lda #ARC.B.RAW
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
tya
|
||
|
||
.4 ldx #8
|
||
bra X.Arc.PutXBits
|
||
|
||
.9 rts
|
||
|
||
.5 ldx #ARC.B.RAWTOP.W
|
||
lda #ARC.B.TOP
|
||
jsr X.Arc.PutXBits
|
||
bcs .9
|
||
|
||
tya
|
||
|
||
and X.Arc.TOP.Masks,y
|
||
ora X.Arc.TOP.Bits,y
|
||
ldx X.Arc.TOP.Widths,y
|
||
*--------------------------------------
|
||
X.Arc.PutXBits phx
|
||
|
||
.1 cpx #8
|
||
beq .2
|
||
|
||
asl
|
||
inx
|
||
bra .1
|
||
|
||
.2 plx
|
||
|
||
.3 asl
|
||
|
||
pha
|
||
|
||
bcc .4
|
||
|
||
lda X.Arc.OutMask
|
||
tsb X.Arc.OutByte
|
||
|
||
.4 lsr X.Arc.OutMask
|
||
bcc .5
|
||
|
||
ror X.Arc.OutMask
|
||
|
||
lda X.Arc.OutByte
|
||
stz X.Arc.OutByte
|
||
|
||
jsr X.Arc.PutByte
|
||
|
||
.5 pla
|
||
bcs .9
|
||
|
||
dex
|
||
bne .3
|
||
|
||
* clc
|
||
|
||
rts
|
||
|
||
.9 lda #E.BUF
|
||
|
||
* sec
|
||
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.PutByte inc X.Arc.nCntOut
|
||
bne .1
|
||
|
||
inc X.Arc.nCntOut+1
|
||
beq .9
|
||
|
||
.1 sta (ZPOutBufPtr)
|
||
inc ZPOutBufPtr
|
||
bne .2
|
||
|
||
inc ZPOutBufPtr+1
|
||
|
||
.2 inc X.Arc.CLen
|
||
bne .8
|
||
|
||
inc X.Arc.CLen+1
|
||
|
||
.8 clc
|
||
rts
|
||
|
||
.9 lda #E.BUF
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
X.Arc.Close lda X.Arc.OutMask
|
||
bmi .8
|
||
|
||
lda X.Arc.OutByte
|
||
bra X.Arc.PutByte
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
.DO DBG
|
||
X.Arc.PrintDBG1 >PUSHW L.MSG.DBG1
|
||
|
||
>PUSHL X.Arc.Bits
|
||
>PUSHL X.Arc.TBits
|
||
>PUSHL X.Arc.BLBits
|
||
>PUSHL X.Arc.TBLBits
|
||
|
||
>PUSHB X.Arc.TopTSize
|
||
>PUSHB X.Arc.TopTBLSize
|
||
>PUSHB X.Arc.STR.Max
|
||
>PUSHB X.Arc.BLL.Max
|
||
>PUSHW X.Arc.BLO.Max
|
||
|
||
>PUSHBI 22
|
||
>SYSCALL2 PrintF
|
||
rts
|
||
|
||
X.Arc.PrintDBG2 >PUSHW L.MSG.DBG2
|
||
|
||
>PUSHW X.Arc.S.TB.Cnt
|
||
>PUSHW X.Arc.STR.TB.Cnt
|
||
>PUSHW X.Arc.BL.TB.Cnt
|
||
|
||
>PUSHW X.Arc.STR.SL.Cnt
|
||
>PUSHW X.Arc.STR.LL.Cnt
|
||
|
||
>PUSHBI ARC.B.SHORTSTR.W
|
||
>PUSHB X.Arc.STR.Bits
|
||
|
||
>PUSHW X.Arc.BLL.SL.Cnt
|
||
>PUSHW X.Arc.BLL.LL.Cnt
|
||
|
||
>PUSHBI ARC.B.SHORTBLL.W
|
||
>PUSHB X.Arc.BLL.Bits
|
||
>PUSHB X.Arc.BLO.Bits
|
||
|
||
ldx #0
|
||
|
||
.1 >PUSHB X.Arc.BLO.HI.cnt,x
|
||
>PUSHB X.Arc.BLO.LO.cnt,x
|
||
|
||
inx
|
||
cpx #12
|
||
bne .1
|
||
|
||
>PUSHBI 43
|
||
>SYSCALL2 PrintF
|
||
rts
|
||
|
||
X.Arc.ComputeDBG3
|
||
stz X.Arc.Bits+3
|
||
stz X.Arc.Bits+2
|
||
lda X.Arc.CLen+1
|
||
sta X.Arc.Bits+1
|
||
|
||
lda X.Arc.CLen
|
||
asl
|
||
rol X.Arc.Bits+1
|
||
rol X.Arc.Bits+2
|
||
asl
|
||
rol X.Arc.Bits+1
|
||
rol X.Arc.Bits+2
|
||
asl
|
||
rol X.Arc.Bits+1
|
||
rol X.Arc.Bits+2
|
||
sta X.Arc.Bits
|
||
|
||
ldx #0
|
||
|
||
lda X.Arc.OutMask
|
||
bmi .3
|
||
|
||
.1 inx
|
||
asl
|
||
bpl .1
|
||
|
||
.2 txa
|
||
clc
|
||
adc X.Arc.Bits
|
||
sta X.Arc.Bits
|
||
bcc .3
|
||
|
||
inc X.Arc.Bits+1
|
||
bne .3
|
||
|
||
inc X.Arc.Bits+2
|
||
|
||
.3 rts
|
||
|
||
X.Arc.PrintDBG3 >PUSHW L.MSG.DBG3
|
||
>PUSHL X.Arc.Bits
|
||
>PUSHW X.Arc.CLen
|
||
>PUSHB X.Arc.Alg
|
||
>PUSHBI 7
|
||
>SYSCALL2 PrintF
|
||
rts
|
||
.FIN
|
||
*--------------------------------------
|
||
CS.END
|
||
*--------------------------------------
|
||
* from 1 to 12 (1 to 4095)
|
||
*--------------------------------------
|
||
BLO.LenBits .DA #%11 bc= 1
|
||
.DA #%11 bc= 1
|
||
.DA #%11 bc= 3
|
||
.DA #%11 bc= 4 : Range 0..15 (4 bits ofs)
|
||
.DA #%10 bc= 5
|
||
.DA #%10 bc= 6
|
||
.DA #%10 bc= 7
|
||
.DA #%10 bc= 8 : Range 0..255 (8 bits ofs)
|
||
.DA #%0 bc= 9
|
||
.DA #%0 bc=10
|
||
.DA #%0 bc=11
|
||
.DA #%0 bc=12 : Range 0..4095 (12 bits ofs)
|
||
*--------------------------------------
|
||
X.Arc.TOP.Masks .DA #ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M
|
||
.DA #ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M
|
||
|
||
.DA #ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M
|
||
.DA #ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M
|
||
|
||
.DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M
|
||
.DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M
|
||
.DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M
|
||
.DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M
|
||
|
||
X.Arc.TOP.Widths
|
||
.DA #ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W
|
||
.DA #ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W
|
||
|
||
.DA #ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W
|
||
.DA #ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W
|
||
|
||
.DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W
|
||
.DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W
|
||
.DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W
|
||
.DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W
|
||
|
||
X.Arc.TOP.Bits .DA #ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B
|
||
.DA #ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B
|
||
|
||
.DA #ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B
|
||
.DA #ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B
|
||
|
||
.DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B
|
||
.DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B
|
||
.DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B
|
||
.DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B
|
||
*--------------------------------------
|
||
X.Arc.nCnt .BS 2
|
||
X.Arc.nCntOut .BS 2
|
||
X.Arc.InBufPtr .BS 2
|
||
X.Arc.OutBufPtr .BS 2
|
||
|
||
X.Arc.Best .EQ * ComputeXXXbits
|
||
X.Arc.STRLen .BS 1
|
||
X.Arc.BLLen .BS 1
|
||
X.Arc.bStop .EQ *
|
||
X.Arc.Ofs .BS 2
|
||
X.Arc.Cnt .EQ *
|
||
X.Arc.OfsWnCnt .BS 2
|
||
X.Arc.OfsBnCnt .BS 2
|
||
|
||
X.Arc.OutMask .BS 1
|
||
X.Arc.OutByte .BS 1
|
||
|
||
X.Arc.ShnkOut .BS S.ARCSHNK
|
||
*--------------------------------------
|
||
X.Arc.ResetData .EQ *
|
||
|
||
X.Arc.CLen .BS 2
|
||
X.Arc.Alg .BS 1
|
||
|
||
X.Arc.Bits .BS 4
|
||
X.Arc.TBits .BS 4
|
||
X.Arc.BLBits .BS 4
|
||
X.Arc.TBLBits .BS 4
|
||
|
||
X.Arc.TopT .BS TOP.MAX
|
||
X.Arc.TopTSize .BS 1
|
||
X.Arc.TopTBL .BS TOP.MAX
|
||
X.Arc.TopTBLSize .BS 1
|
||
|
||
X.Arc.S.TB.Cnt .BS 2
|
||
X.Arc.STR.TB.Cnt .BS 2
|
||
X.Arc.BL.TB.Cnt .BS 2
|
||
|
||
X.Arc.STR.Max .BS 1
|
||
X.Arc.STR.Bits .BS 1
|
||
X.Arc.STR.SL.Cnt .BS 2
|
||
X.Arc.STR.LL.Cnt .BS 2
|
||
|
||
X.Arc.TopSize .BS 1
|
||
X.Arc.bScanBL .BS 1
|
||
|
||
X.Arc.BLL.Max .BS 1
|
||
X.Arc.BLL.Bits .BS 1
|
||
X.Arc.BLL.SL.Cnt .BS 2
|
||
X.Arc.BLL.LL.Cnt .BS 2
|
||
|
||
X.Arc.BLO.Max .BS 2
|
||
X.Arc.BLO.Bits .BS 1
|
||
|
||
X.Arc.BLO.LO.cnt .BS 12
|
||
X.Arc.BLO.HI.cnt .BS 12
|
||
|
||
X.Arc.ResetCnt .EQ *-X.Arc.ResetData
|
||
*--------------------------------------
|
||
X.Arc.TopCntL .BS 256
|
||
X.Arc.TopCntH .BS 256
|
||
X.Arc.TopCntBLL .BS 256
|
||
X.Arc.TopCntBLH .BS 256
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/shared/x.arc.s
|
||
LOAD usr/src/bin/arc.s
|
||
ASM
|