;zamiast 'adc #2'› sta ofs+1›› lda ind ;IND=IND-OFS› sta _adr+1›* sec›ofs sbc #0 ;CLC ustawione› sta adr+1 ;czyli doda 1› lda ind+1› sta _adr+2› sbc #0› sta adr+2›››dep0 lda #0› tay› jsr gbit› bcs *+13›› lda adh0,y› bne *-9› lda adl0,y› jmp j3›› lda adh1,y› bne *-20› lda adl1,y›››j3 tay ;LEN=LEN+2› iny ;dla BPL -1› tya› sec› adc ind› sta ind› bcc *+4› inc ind+1››adr lda $ffff,y›_adr sta $ffff,y ;sta (ind),y› dey› bpl adr›› jmp tst›››*---------››gbit inc lic› bne g_› lda #tand› sta lic›stc lda $ffff› sta csh› inc stc+1› bne *+5› inc stc+2›g_ rol csh› rts››*------------›set_hv sta l0› stx l0+1›› clc› adc <576› sta h0› txa› adc >576› sta h0+1›› lda h0› clc› adc <576› sta l1› lda h0+1› adc >576› sta l1+1›› lda l1› clc› adc <576› sta h1› lda l1+1› adc >576› sta h1+1› rts››* generowanie kodow›* Shannon-Fano›*------------------››* TRE01 - stare pozycje›* TRE02 - dlugosci kodow››fano sty mx› jsr sort›› ldy #0› tya›cl sta (l0),y› sta (l1),y› sta (h0),y› sta (h1),y› iny› cpy mx› bne cl›› sta p ; code› sta p+1› sta err ; code increment› sta err+1› sta l ; last bit length› sta nxt›› ldy #0 ;tworzymy kod FANO›lp lda tre02,y ;if TRE02<>0 then SKP› beq skp›› lda p ;P=P+ERR› clc› adc err› sta p› lda p+1› adc err+1› sta p+1›› ldx tre02,y› cpx l› beq sp› stx l› lda lmsk-1,x› sta err› lda hmsk-1,x› sta err+1››sp lda p› sta tmp› lda p+1› sta tmp+1››* wstaw do drzewa›*----------------› lda tre01,y› sta val› ldx tre02,y› sty skp_+1›› lda #0 ;next link=0›_l1 dex› tay›bit asl tmp› rol tmp+1› bcs _1››_0 cpx #0› bne _s1› lda val› sta (l0),y› jmp skp_›_s1 lda (h0),y› bne _l1› inc nxt› lda nxt› sta (h0),y› jmp _l1››_1 cpx #0› bne _s2› lda val› sta (l1),y› jmp skp_›_s2 lda (h1),y› bne _l1› inc nxt› lda nxt› sta (h1),y› jmp _l1››skp_ ldy #0›skp iny› cpy mx› bne lp› rts››* SORT sortujemy match_len z HUFL+??›* i zapamietujemy stara kolejnosc›* wystepowania danych w TRE01››* VFAST›*------›sort jsr cnibl›› lda #0› ldy #15›c1 sta pom,y› dey› bpl c1› sta md+1› sta md_+1›› tay ; liczymy elementy›c2 ldx tre02,y› inc pom,x› iny› cpy mx› bne c2›› ldx #0 ; pozycje elementow›l2_ ldy #0 ; nie posortowanych›l2 txa ; do tablicy TRE01› cmp tre02,y ; dla celow PCK› bne s2›md_ sty tre01› inc md_+1›s2 iny› cpy mx› bne l2› inx› cpx #16› bne l2_›› ldx #0 ; sortuje›l_ ldy pom,x› beq s1›md stx tre02› inc md+1› dey› bne md›s1 inx› cpx #16› bne l_› rts››cnibl sta ld_bf+1 ;zamiana na nible› stx ld_bf+2 ;do TRE02›› ldy #0› ldx #0›ld_bf lda $ffff,x› pha ;starszy nibel› lsr @› lsr @› lsr @› lsr @› sta tre02,y› iny› pla› and #$f ;mlodszy nibel› sta tre02,y› inx› iny› cpy mx› bne ld_bf› rts››*-----›lmsk dta l($8000),l($4000),l($2000)› dta l($1000),l($800),l($400)› dta l($200),l($100),l($80)› dta l($40),l($20),l($10)› dta l(8),l(4),l(2),l(1)››hmsk dta h($8000),h($4000),h($2000)› dta h($1000),h($800),h($400)› dta h($200),h($100),h($80)› dta h($40),h($20),h($10)› dta h(8),h(4),h(2),h(1)››ratio brk›lng dta a(0)›lnght dta a(0)››