mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-06-15 17:11:38 +03:00
114 lines
2.3 KiB
Plaintext
114 lines
2.3 KiB
Plaintext
Äåêîìïðåññîð Ìåäíîíîãîâà, èñïîëüçîâàâøèéñÿ, ïî-âèäèìîìó, â "׸ð-
|
|
íîì Âîðîíå", ëþáîïûòåí òåì,÷òî áèòîâûé ïîòîê â åãî ôîðìàòå îòñó-
|
|
òñòâóåò - íåñìîòðÿ íà îñíîâàííîå íà LZ ñæàòèå. Çà ñ÷¸ò ýòîãî ïî-
|
|
ëó÷åí íåêîòîðûé âûèãðûø â ñêîðîñòè è ïðîèãðûø â ïëîòíîñòè.
|
|
|
|
 òåêñòå êîììåíòàðèè: æ¸ëòûå - àâòîðñêèå, çåë¸íûå - ìîè.
|
|
|
|
;Äåêîìïðåññîð äëÿ v 3.01
|
|
;HL-îòêóäà DE-êóäà
|
|
;DLPCB DEFM "v301"
|
|
|
|
DELPZ PUSH DE
|
|
LD DE,DLPCB
|
|
LD BC,4
|
|
LDIR
|
|
POP DE
|
|
xpD0 LD A,(HL)
|
|
SRL A
|
|
JR NC,xpD1
|
|
CALL xpSUB ;short copy
|
|
RRA ;%AAAlenB1
|
|
RL B ; ^^^nopacked
|
|
AND 7
|
|
xpM2 JR NZ,xpNex ;len<=9
|
|
LD A,(HL) ;len>9
|
|
INC HL
|
|
xpNex LD C,(HL) ;disp (ñ ó÷¸òîì B)
|
|
INC HL
|
|
PUSH HL
|
|
LD H,D
|
|
LD L,E
|
|
SBC HL,BC
|
|
LD B,0
|
|
LD C,A
|
|
xpM1 INC BC
|
|
INC BC ;>=3
|
|
LDIR
|
|
POP HL
|
|
EX AF,AF'
|
|
JR Z,xpD0
|
|
JR NZ,xpDRR ;nocompr 1..7
|
|
|
|
xpD1 RRA
|
|
JR C,xpZ1
|
|
RRA
|
|
JR C,xpZ2
|
|
JR Z,xpDEND ;%xxxxx000
|
|
INC HL
|
|
xpDRR LD B,A ;nocompr 1..31
|
|
xpDL0 LD A,(HL)
|
|
INC HL
|
|
XOR (HL)
|
|
LD (DE),A
|
|
INC DE
|
|
DJNZ xpDL0
|
|
JR xpD0
|
|
|
|
xpZ2 SRL A ;%xxxxx100 ;repeat
|
|
JR C,xpZ2L
|
|
LD C,A
|
|
XOR A
|
|
EX AF,AF'
|
|
xpZ22 INC HL
|
|
PUSH HL
|
|
LD H,D
|
|
LD L,E
|
|
DEC HL
|
|
JR xpM1
|
|
|
|
xpZ2L CALL xpSUB ;%xxxX1100
|
|
RRA ; ^
|
|
RL B ;0/1
|
|
LD C,(HL)
|
|
JR xpZ22
|
|
|
|
xpZ1 SRL A ;%xxxxxx10
|
|
JR NC,xpTWO
|
|
LD C,A ;%xxxxx110 ;long copy
|
|
INC HL
|
|
LD A,(HL)
|
|
AND #1F
|
|
LD B,A
|
|
LD A,C
|
|
CALL xpSUB
|
|
OR A
|
|
JR xpM2
|
|
|
|
xpTWO INC A ;äâà áàéòà %xxxxx010
|
|
LD C,A ;=1..32
|
|
INC HL
|
|
PUSH HL
|
|
LD H,D
|
|
LD L,E
|
|
SBC HL,BC
|
|
LD C,2
|
|
LDIR
|
|
POP HL
|
|
JR xpD0
|
|
|
|
xpDEND LD HL,DLPCB ;%xxxxx000
|
|
LD C,4
|
|
LDIR
|
|
RET
|
|
|
|
xpSUB EX AF,AF' ;ïîìåñòèòü 3 ñò.áèòà òåêóùåãî áàéòà â A'
|
|
LD A,(HL)
|
|
RLCA
|
|
RLCA
|
|
RLCA
|
|
AND 7
|
|
EX AF,AF'
|
|
INC HL
|
|
RET
|
|
|