Rev 635 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;LAST UPDATE: 03.02.2014 savelij
maintree EQU RARS
tree EQU (298-6)*4-4+maintree
bdlens EQU tree
ldlens EQU tree
ddlens EQU 298+ldlens
;rdlens=ddlens+48
tabend EQU ddlens+48+28
NEWBYTE
LD A,(IX)
RLA
INC IX
RET
dPPbr16
PUSH BC
JR NZ,dPPn16
;16=prev len copies-3
CALL LDA2
DEC HL
LD A,(HL)
INC HL
LD (dPPdupV),A
LD A,3
JR dPPfil
UNILDRAR
ADD HL,DE
LD (theEnd),HL;á ¬ HL ¥ 㦥!
;IX->DE
LD A,128
EX AF,AF'
NEWTREE
PUSH DE
CALL LDA2
LD HL,bdlens
LD E,19
dPPtetr LD B,4
CALL LDA18B
LD (HL),C
INC HL
DEC E
JR NZ,dPPtetr
;EXX
;PUSH DE
LD DE,19+1
CALL MKMAINTREE ;¤¥« ¥¬ ¨§ ¨å ¤¥à¥¢®
;POP DE
;EXX
LD BC,298+48+28 ;tabsize
LD HL,ldlens;UnpOldTable
dPP0 PUSH HL
CALL DEHUFFMAIN
POP HL
CP 16
JR NC,dPPbr16
;<16 delta from prev codelen tab
LD (HL),A
INC HL
DEC BC
JR dPPQ
dPPn16 CP 17
JR NZ,dPPn3b
;17=zerolens-3
LD B,3
LD A,B
dPPfilG CALL LDA18B
dPPfil ADD A,C
POP BC
dPPdupV := $+1
dPPdup0 LD (HL),0
INC HL
DEC BC
DEC A
JR NZ,dPPdup0
LD (dPPdupV),A
dPPQ LD A,B
OR C
JR NZ,dPP0
;EXX
;PUSH DE
LD DE,298+1
CALL MKMAINTREE ;¤¥« ¥¬ ¨§ ¨å ¤¥à¥¢®
LD HL,ddlens+49
LD DE,48+1
LD BC,tree
CALL MKTREE ;¤¥« ¥¬ ¨§ ¨å ¤¥à¥¢®
POP DE
;EXX
DEPK0
CALL DEHUFFMAIN
DEC H
JR NZ,yBYTE
SUB LOW (269)
JR Z,NEWTREE
JR C,len2
DEC A
;SUB 270
LD L,A
CP 8
CALL NC,EMMTPP
REPT 3
INC HL
ENDM
PUSH HL ;len
LD HL,tree
CALL DEHUFF
ADD A,-4
JR NC,EMBBTQ
LD L,1
ADC A,L
RRA
RL L
LD B,A
CALL EM_TPP
EMBBTQ INC HL
;NC
LD B,H
LD C,L
GPldir LD C,L
LD H,D
LD L,E
;OR A
SBC HL,BC
LD A,B
POP BC ;3..255
AND 0XE0
JR Z,$+3
INC C
;CALL UNILDIR
LDIR
GPq
;¨«¨ ¯à®áâ® BIT 7,D
theEnd := $+1
LD HL,0
SCF
SBC HL,DE
;LD A,H ;!
;ADD A,2;!
JR NC,DEPK0
RET
;LD A,(UNIpg)
;JP OUTME
;18=zerolens-11
dPPn3b
LD B,7
LD A,11
JR dPPfilG
yBYTE
LD A,L
LD (DE),A
INC DE
JR GPq
len2
;261..268=>-8..-1
ADD A,A
LD L,A
LD H,HIGH (tlen2);'tlen2
LD B,(HL) ;bits
INC L
LD L,(HL) ;N>>bits
CALL EM_TPP
LD C,2
PUSH BC
;CY
JR GPldir
DEHUFFMAIN
LD HL,maintree
DEHUFF
EX AF,AF'
ADD A,A
CALL Z,NEWBYTE
JR NC,$+4 ;®«ì
INC L ;¥¤¨¨æ
INC L;HL
EX AF,AF'
LD A,(HL)
INC L
LD H,(HL)
LD L,A
IF LOW (maintree&0X40)=0; IFN 'maintree&0X40
BIT 6,H
ELSE
IF LOW (maintree&0X80)=0; IFN 'maintree&0X80
BIT 7,H
ENDIF
ENDIF
JR NZ,DEHUFF
RET
;ᮧ¤ ¨¥ ¤¥à¥¢ . 㫨 - ¡®«¥¥ ª®à®âª¨¥ ¢¥âª¨
;á ç « ᮧ¤ îâáï ¢á¥ ¢¥âª¨ ¤«ï
;ᨬ¢®«®¢ á bitlen=1, ¯®â®¬ 2 ¨ â.¤. ¤® 15
;by Roman Petrov
MKMAINTREE
LD HL,ldlens ;¡ë«® ¯à®áâ® tree
ADD HL,DE
LD BC,maintree
MKTREE
PUSH BC
EXX
POP DE ; ç «® ¡ãä¥à
LD H,D
LD L,E
XOR A ;=0 ¯à¨§ ª ¢ë室
PUSH AF
INC A ;=1
PUSH HL
PUSH AF
LD C,A
MKTREE0 EXX ;HL=ª®.bitlens+1
LD B,D
LD C,E
;ADD HL,BC;㪠§. ¯®á«¥¤¨© bitlen
;OR A
SBC HL,BC;㪠§. 1© bitlen
EXX
MKTREE1 LD B,A
LD A,C
EXX
;CPDR ;BC=ç¨á«® «¨áâ쥢+1
CPIR
LD A,B
OR C
EXX
LD A,B
JR NZ,MKTREEY; ©¤¥ ᨬ¢®« á â ª¨¬ bitlen
INC C ;¥ ©¤¥ â ª®© ᨬ¢®«
JR NZ,MKTREE0
JR MTREEbug
MKTREE_DEEPER
INC DE ;®¢®¥ ¬¥áâ®
INC DE ;¤«ï
INC DE ;®¢ëå
INC DE ;㧫®¢
LD (HL),E
INC HL
LD (HL),D ;㪠§ â¥«ì ¤«ï "0"
LD H,D
LD L,E ; ¤à¥á ¤«ï "ª®¤+0"
INC A ;¤«¨ í⮣® ª®¤
PUSH HL ;§ ®á¨¬ íâ®
PUSH AF ;¢ á⥪
MKTREEY CP C
JR NZ,MKTREE_DEEPER ;¯®ª ¥ 㣫㡨¬áï ¤® 㦮© ¤«¨ë
;A=C
EXX
PUSH BC ; ⨮¬¥à «¨â¥à « +1
PUSH DE ;Q+1
EXX
MTREEbug
LD (MKhl),HL
POP HL
POP BC
;DEC BC ;®¬¥à «¨â¥à «
;LD (HL),C
;INC HL
;LD (HL),B ;ä®à¬¨à㥬 «¨áâ
SCF
SBC HL,BC
MKhl := $+1
LD (0),HL
LD C,A
POP AF
RET Z ;=0 ¯à¨§ ª ¢ë室
POP HL
INC HL
INC HL ;á«¥¤ãî騩 ᢮¡®¤ë© 㧥«
;A=¥£® £«ã¡¨
;DE= ¤à¥á ¬¥áâ ¤«ï ®¢ëå 㧫®¢
JR MKTREE1
EMMTPP
LD B,A
AND 3
OR 4
LD L,A
SRL B
SRL B
DEC B
EM_TPP EX AF,AF'
MLEN0 ADD A,A
CALL Z,NEWBYTE
ADC HL,HL
DJNZ MLEN0
EX AF,AF'
RET
LDA2 LD A,2
LDA
CP 9
JR NC,LDA915
LDA18 LD B,A
LDA18B
LD C,0
EX AF,AF'
LDA0 ADD A,A
CALL Z,NEWBYTE
RL C
DJNZ LDA0
EX AF,AF'
RET
LDA915
SUB 8
CALL LDA18
LD A,C
LD B,8
CALL LDA0-1
LD B,A
RET
; DISPLAY $
DUPL (HIGH ($)<<8)+0XF0-$,0; DUPL $+15/256<8+0XF0-$,0
; DISPLAY "=",$
tlen2
DB 2,0>>2
DB 2,4>>2
DB 3,8>>3
DB 4,16>>4
DB 5,32>>5
DB 6,64>>6
DB 6,128>>6
DB 6,192>>6