Subversion Repositories pentevo

Rev

Rev 635 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
635 savelij 1
 
2
;LAST UPDATE: 03.02.2014 savelij
3
 
4
maintree        EQU RARS
5
tree            EQU (298-6)*4-4+maintree
6
bdlens          EQU tree
7
ldlens          EQU tree
8
ddlens          EQU 298+ldlens
9
;rdlens=ddlens+48
10
tabend          EQU ddlens+48+28
11
NEWBYTE
12
        LD      A,(IX)
13
        RLA    
14
        INC     IX
15
        RET    
16
dPPbr16
17
        PUSH    BC
18
        JR      NZ,dPPn16
19
;16=prev len copies-3
20
        CALL    LDA2
21
        DEC     HL
22
        LD      A,(HL)
23
        INC     HL
24
        LD      (dPPdupV),A
25
        LD      A,3
26
        JR      dPPfil
27
UNILDRAR
28
        ADD     HL,DE
29
        LD      (theEnd),HL;ᠬ HL �� �㦥�!
30
;IX->DE
31
        LD      A,128
32
        EX AF,AF'      
33
NEWTREE
34
       PUSH     DE
35
        CALL    LDA2
36
        LD      HL,bdlens
37
       LD       E,19
38
dPPtetr LD      B,4
39
        CALL    LDA18B
40
        LD      (HL),C
41
        INC     HL
42
       DEC      E
43
        JR      NZ,dPPtetr
44
      ;EXX
45
      ;PUSH DE
46
        LD      DE,19+1
47
        CALL    MKMAINTREE ;������ �� ��� ��ॢ�
48
      ;POP DE
49
      ;EXX
50
        LD      BC,298+48+28 ;tabsize
51
        LD      HL,ldlens;UnpOldTable
52
dPP0   PUSH     HL
53
        CALL    DEHUFFMAIN
54
       POP      HL
55
        CP      16
56
       JR       NC,dPPbr16
57
;<16 delta from prev codelen tab
58
        LD      (HL),A
59
        INC     HL
60
        DEC     BC
61
        JR      dPPQ
62
dPPn16  CP      17
63
        JR      NZ,dPPn3b
64
;17=zerolens-3
65
        LD      B,3
66
        LD      A,B
67
dPPfilG CALL    LDA18B
68
dPPfil  ADD     A,C
69
        POP     BC
70
dPPdupV := $+1
71
dPPdup0 LD      (HL),0
72
        INC     HL
73
        DEC     BC
74
        DEC     A
75
        JR      NZ,dPPdup0
76
        LD      (dPPdupV),A
77
dPPQ    LD      A,B
78
        OR      C
79
        JR      NZ,dPP0
80
      ;EXX
81
      ;PUSH DE
82
        LD      DE,298+1
83
        CALL    MKMAINTREE ;������ �� ��� ��ॢ�
84
        LD      HL,ddlens+49
85
        LD      DE,48+1
86
        LD      BC,tree
87
        CALL    MKTREE ;������ �� ��� ��ॢ�
88
       POP      DE
89
      ;EXX
90
DEPK0
91
        CALL    DEHUFFMAIN
92
        DEC     H
93
       JR       NZ,yBYTE
94
       SUB      LOW (269)
95
       JR       Z,NEWTREE
96
       JR       C,len2
97
       DEC      A
98
       ;SUB 270
99
        LD      L,A
100
        CP      8
101
       CALL     NC,EMMTPP
102
                REPT 3
103
        INC     HL
104
                ENDM
105
       PUSH     HL ;len
106
        LD      HL,tree
107
        CALL    DEHUFF
108
        ADD     A,-4
109
       JR       NC,EMBBTQ
110
        LD      L,1
111
        ADC     A,L
112
        RRA    
113
        RL      L
114
        LD      B,A
115
       CALL     EM_TPP
116
EMBBTQ  INC     HL
117
       ;NC
118
        LD      B,H
119
        LD C,L
120
GPldir  LD      C,L
121
        LD      H,D
122
        LD L,E
123
       ;OR A
124
        SBC     HL,BC
125
        LD      A,B
126
       POP      BC ;3..255
127
        AND     0XE0
128
        JR      Z,$+3
129
        INC     C
130
      ;CALL UNILDIR
131
        LDIR   
132
GPq
133
;��� ���� BIT 7,D
134
theEnd := $+1
135
        LD      HL,0
136
       SCF     
137
        SBC     HL,DE
138
     ;LD A,H ;!
139
     ;ADD A,2;!
140
       JR       NC,DEPK0
141
        RET    
142
      ;LD A,(UNIpg)
143
      ;JP OUTME
144
;18=zerolens-11
145
dPPn3b
146
        LD      B,7
147
        LD      A,11
148
        JR      dPPfilG
149
yBYTE
150
       LD       A,L
151
        LD      (DE),A
152
        INC     DE
153
        JR      GPq
154
len2
155
;261..268=>-8..-1
156
       ADD      A,A
157
       LD       L,A
158
        LD      H,HIGH (tlen2);'tlen2
159
        LD      B,(HL) ;bits
160
        INC     L
161
        LD      L,(HL) ;N>>bits
162
        CALL    EM_TPP
163
        LD      C,2
164
       PUSH     BC
165
       ;CY
166
       JR       GPldir
167
 
168
DEHUFFMAIN
169
        LD      HL,maintree
170
DEHUFF
171
       EX AF,AF'       
172
        ADD     A,A
173
        CALL    Z,NEWBYTE
174
        JR      NC,$+4 ;����
175
        INC     L  ;������
176
        INC     L;HL
177
       EX AF,AF'       
178
        LD      A,(HL)
179
        INC     L
180
        LD      H,(HL)
181
        LD      L,A
182
                IF LOW (maintree&0X40)=0;       IFN     'maintree&0X40
183
       BIT      6,H
184
       ELSE    
185
                IF LOW (maintree&0X80)=0;       IFN     'maintree&0X80
186
       BIT      7,H
187
       ENDIF   
188
       ENDIF   
189
       JR       NZ,DEHUFF
190
        RET    
191
 
192
;ᮧ����� ��ॢ�. �㫨 - ����� ���⪨� ��⪨
193
;᭠砫� ᮧ������ �� ��⪨ ���
194
;ᨬ����� � bitlen=1, ��⮬ 2 � �.�. �� 15
195
;by Roman Petrov
196
MKMAINTREE
197
        LD      HL,ldlens ;�뫮 ���� tree
198
        ADD     HL,DE
199
        LD      BC,maintree
200
MKTREE
201
        PUSH    BC
202
        EXX    
203
        POP     DE ;��砫� ����
204
        LD      H,D
205
        LD      L,E
206
        XOR     A ;=0 �ਧ��� ��室�
207
        PUSH    AF
208
        INC     A ;=1
209
        PUSH    HL
210
        PUSH    AF
211
        LD      C,A
212
MKTREE0 EXX          ;HL=���.bitlens+1
213
        LD      B,D
214
        LD      C,E
215
       ;ADD HL,BC;㪠�.�� ��᫥���� bitlen
216
      ;OR A
217
       SBC      HL,BC;㪠�.�� 1� bitlen
218
        EXX    
219
MKTREE1 LD      B,A
220
        LD      A,C
221
        EXX    
222
       ;CPDR ;BC=�᫮ ����쥢+1
223
       CPIR    
224
        LD      A,B
225
        OR      C
226
        EXX    
227
        LD      A,B
228
        JR      NZ,MKTREEY;������ ᨬ��� � ⠪�� bitlen
229
        INC     C ;�� ������ ⠪�� ᨬ���
230
       JR       NZ,MKTREE0
231
       JR       MTREEbug
232
MKTREE_DEEPER
233
        INC     DE ;����� ����
234
        INC     DE ;���
235
        INC     DE ;�����
236
        INC     DE ;㧫��
237
        LD      (HL),E
238
        INC     HL
239
        LD      (HL),D ;㪠��⥫� ��� "0"
240
        LD      H,D
241
        LD      L,E ;���� ��� "���+0"
242
        INC     A  ;����� �⮣� ����
243
        PUSH    HL ;����ᨬ ��
244
        PUSH    AF ;� �⥪
245
MKTREEY CP      C
246
        JR      NZ,MKTREE_DEEPER ;���� �� 㣫㡨��� �� �㦭�� �����
247
       ;A=C
248
        EXX    
249
        PUSH    BC ;��⨭���� ���ࠫ�+1
250
       PUSH     DE ;Q+1
251
        EXX    
252
MTREEbug
253
       LD       (MKhl),HL
254
       POP      HL
255
        POP     BC
256
       ;DEC BC ;����� ���ࠫ�
257
       ;LD (HL),C
258
       ;INC HL
259
       ;LD (HL),B ;�ନ�㥬 ����
260
       SCF     
261
       SBC      HL,BC
262
MKhl := $+1
263
       LD       (0),HL
264
        LD      C,A
265
        POP     AF
266
        RET     Z ;=0 �ਧ��� ��室�
267
        POP     HL
268
        INC     HL
269
        INC     HL ;᫥���騩 ᢮����� 㧥�
270
           ;A=��� ��㡨��
271
           ;DE=���� ���� ��� ����� 㧫��
272
        JR      MKTREE1
273
 
274
EMMTPP
275
        LD      B,A
276
        AND     3
277
        OR      4
278
        LD      L,A
279
        SRL     B
280
        SRL B
281
        DEC     B
282
EM_TPP  EX AF,AF'      
283
MLEN0   ADD     A,A
284
        CALL    Z,NEWBYTE
285
        ADC     HL,HL
286
       DJNZ     MLEN0
287
        EX AF,AF'      
288
        RET    
289
 
290
LDA2    LD      A,2
291
LDA
292
        CP      9
293
        JR      NC,LDA915
294
LDA18   LD      B,A
295
LDA18B
296
        LD      C,0
297
        EX AF,AF'      
298
LDA0    ADD     A,A
299
        CALL    Z,NEWBYTE
300
        RL      C
301
        DJNZ    LDA0
302
        EX AF,AF'      
303
        RET    
304
LDA915
305
        SUB     8
306
        CALL    LDA18
307
        LD      A,C
308
        LD      B,8
309
        CALL    LDA0-1
310
        LD      B,A
311
        RET    
312
 
313
;        DISPLAY        $
314
                DUPL (HIGH ($)<<8)+0XF0-$,0;            DUPL $+15/256<8+0XF0-$,0
315
;        DISPLAY        "=",$
316
tlen2
317
        DB      2,0>>2
318
        DB      2,4>>2
319
        DB      3,8>>3
320
        DB      4,16>>4
321
        DB      5,32>>5
322
        DB      6,64>>6
323
        DB      6,128>>6
324
        DB      6,192>>6
325