Rev 109 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 109 | Rev 485 | ||
---|---|---|---|
1 | lang equ ru |
1 | lang equ ru |
2 | 2 | ||
3 | ; |
3 | ; |
4 | ; Assembler |
4 | ; Assembler |
5 | ; SMALL |
5 | ; SMALL |
6 | ; CODE |
6 | ; CODE |
7 | ; Graphics |
7 | ; Graphics |
8 | ; Libary |
8 | ; Libary |
9 | ; |
9 | ; |
10 | ; Ver 0.18 By Pavlushin Evgeni (RUSSIA) |
10 | ; Ver 0.18 By Pavlushin Evgeni (RUSSIA) |
11 | ; www.waptap@mail.ru |
11 | ; www.waptap@mail.ru |
12 | 12 | ||
13 | ;InfoList |
13 | ;InfoList |
14 | ;0.01 LoadImage |
14 | ;0.01 LoadImage |
15 | ;0.02 SetBmp |
15 | ;0.02 SetBmp |
16 | ;0.03 Bmptoimg, Setimg ~01.03.2004 |
16 | ;0.03 Bmptoimg, Setimg ~01.03.2004 |
17 | ;0.04 Bug deleted, copyimg ~03.05.2004 |
17 | ;0.04 Bug deleted, copyimg ~03.05.2004 |
18 | ;0.05 fullimg, collimg ~05.05.2004 |
18 | ;0.05 fullimg, collimg ~05.05.2004 |
19 | ;0.06 getimg ~09.05.2004 |
19 | ;0.06 getimg ~09.05.2004 |
20 | ;0.07 convbmp ~13.05.2004 |
20 | ;0.07 convbmp ~13.05.2004 |
21 | ;0.08 fps ~14.05.2004 |
21 | ;0.08 fps ~14.05.2004 |
22 | ;0.09 drawfbox ~03.06.2004 |
22 | ;0.09 drawfbox ~03.06.2004 |
23 | ;0.10 all macros optimized by Halyavin A., add at ~07.06.2004 |
23 | ;0.10 all macros optimized by Halyavin A., add at ~07.06.2004 |
24 | ;0.11 many macros optimized by Halyavin A., add at ~30.08.2004 |
24 | ;0.11 many macros optimized by Halyavin A., add at ~30.08.2004 |
25 | ;0.12 bmptoimg ~07.09.2004 |
25 | ;0.12 bmptoimg ~07.09.2004 |
26 | ;0.13 imgtoimg ~08.09.2004 |
26 | ;0.13 imgtoimg ~08.09.2004 |
27 | ;0.14 imgtoimg modify not brake bmp pict! ~09.09.2004 |
27 | ;0.14 imgtoimg modify not brake bmp pict! ~09.09.2004 |
28 | ;0.15 giftoimg, giftoani ~10.09.2004 |
28 | ;0.15 giftoimg, giftoani ~10.09.2004 |
29 | ;0.16 setframe, rgbtobgr, setbmp deleted ~20.09.2004 |
29 | ;0.16 setframe, rgbtobgr, setbmp deleted ~20.09.2004 |
30 | ;0.17 modification giftoimg, giftoani, getframeoff ~01.10.2004 |
30 | ;0.17 modification giftoimg, giftoani, getframeoff ~01.10.2004 |
31 | ;0.18 aframetoimg,aimgtoimg,frametoimg ~03.10.2004 |
31 | ;0.18 aframetoimg,aimgtoimg,frametoimg ~03.10.2004 |
32 | 32 | ||
33 | aframetoimg_use_count=0 |
33 | aframetoimg_use_count=0 |
34 | macro aframetoimg img, x, y, canvas,acol |
34 | macro aframetoimg img, x, y, canvas,acol |
35 | { |
35 | { |
36 | local loo,loo2,acolor |
36 | local loo,loo2,acolor |
37 | aframetoimg_use_count=aframetoimg_use_count+1 |
37 | aframetoimg_use_count=aframetoimg_use_count+1 |
38 | if aframetoimg_use_count = 1 |
38 | if aframetoimg_use_count = 1 |
39 | 39 | ||
40 | jmp end_aframetoimg_proc |
40 | jmp end_aframetoimg_proc |
41 | 41 | ||
42 | acolor dd 0 |
42 | acolor dd 0 |
43 | aframetoimg_proc: |
43 | aframetoimg_proc: |
44 | ;getout coord |
44 | ;getout coord |
45 | mov [acolor],ebp |
45 | mov [acolor],ebp |
46 | 46 | ||
47 | mov edx,ebx ;img ;xsize |
47 | mov edx,ebx ;img ;xsize |
48 | movzx eax,word [edx] |
48 | movzx eax,word [edx] |
49 | add eax,esi ;y cor |
49 | add eax,esi ;y cor |
50 | 50 | ||
51 | ; mov eax,esi ;y cor |
51 | ; mov eax,esi ;y cor |
52 | mul dword [ecx] ;canvas xsize |
52 | mul dword [ecx] ;canvas xsize |
53 | add eax,edi ;x cor |
53 | add eax,edi ;x cor |
54 | 54 | ||
55 | mov ebp,ebx ;img ;xsize |
55 | mov ebp,ebx ;img ;xsize |
56 | movzx edx,word [ebp] |
56 | movzx edx,word [ebp] |
57 | add eax,edx |
57 | add eax,edx |
58 | 58 | ||
59 | mov ebp,eax |
59 | mov ebp,eax |
60 | shl eax,1 |
60 | shl eax,1 |
61 | add ebp,eax |
61 | add ebp,eax |
62 | add ebp,ecx ;canvas+8;start |
62 | add ebp,ecx ;canvas+8;start |
63 | add ebp,8 |
63 | add ebp,8 |
64 | ;get img size |
64 | ;get img size |
65 | add ebx,4 |
65 | add ebx,4 |
66 | mov eax,ebx ;img ;xsize |
66 | mov eax,ebx ;img ;xsize |
67 | movzx esi,word [eax] |
67 | movzx esi,word [eax] |
68 | movzx edi,word [eax+2] |
68 | movzx edi,word [eax+2] |
69 | add ebx,4 |
69 | add ebx,4 |
70 | mov edx,ebx ;img+8 |
70 | mov edx,ebx ;img+8 |
71 | loo2: |
71 | loo2: |
72 | push esi |
72 | push esi |
73 | loo: |
73 | loo: |
74 | ;test on alpha color |
74 | ;test on alpha color |
75 | mov eax,[edx] |
75 | mov eax,[edx] |
76 | shl eax,8 |
76 | shl eax,8 |
77 | shr eax,8 |
77 | shr eax,8 |
78 | cmp eax,[acolor] |
78 | cmp eax,[acolor] |
79 | jne yx |
79 | jne yx |
80 | add edx,3 |
80 | add edx,3 |
81 | add ebp,3 |
81 | add ebp,3 |
82 | jmp nx |
82 | jmp nx |
83 | yx: |
83 | yx: |
84 | 84 | ||
85 | mov al,byte [edx] |
85 | mov al,byte [edx] |
86 | mov byte [ebp],al |
86 | mov byte [ebp],al |
87 | inc ebp |
87 | inc ebp |
88 | inc edx |
88 | inc edx |
89 | mov al,byte [edx] |
89 | mov al,byte [edx] |
90 | mov byte [ebp],al |
90 | mov byte [ebp],al |
91 | inc ebp |
91 | inc ebp |
92 | inc edx |
92 | inc edx |
93 | mov al,byte [edx] |
93 | mov al,byte [edx] |
94 | mov byte [ebp],al |
94 | mov byte [ebp],al |
95 | inc ebp |
95 | inc ebp |
96 | inc edx |
96 | inc edx |
97 | nx: |
97 | nx: |
98 | dec esi |
98 | dec esi |
99 | jnz loo |
99 | jnz loo |
100 | pop esi |
100 | pop esi |
101 | sub ebp,3 |
101 | sub ebp,3 |
102 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
102 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
103 | sub eax,esi |
103 | sub eax,esi |
104 | add ebp,eax |
104 | add ebp,eax |
105 | shl eax,1 |
105 | shl eax,1 |
106 | add ebp,eax |
106 | add ebp,eax |
107 | 107 | ||
108 | add ebp,3 |
108 | add ebp,3 |
109 | 109 | ||
110 | dec edi |
110 | dec edi |
111 | jnz loo2 |
111 | jnz loo2 |
112 | ret |
112 | ret |
113 | end_aframetoimg_proc: |
113 | end_aframetoimg_proc: |
114 | end if |
114 | end if |
115 | push img |
115 | push img |
116 | push canvas |
116 | push canvas |
117 | push x |
117 | push x |
118 | push y |
118 | push y |
119 | push acol |
119 | push acol |
120 | pop ebp |
120 | pop ebp |
121 | pop esi |
121 | pop esi |
122 | pop edi |
122 | pop edi |
123 | pop ecx |
123 | pop ecx |
124 | pop ebx |
124 | pop ebx |
125 | call aframetoimg_proc |
125 | call aframetoimg_proc |
126 | } |
126 | } |
127 | 127 | ||
128 | frametoimg_use_count=0 |
128 | frametoimg_use_count=0 |
129 | macro frametoimg img, x, y, canvas |
129 | macro frametoimg img, x, y, canvas |
130 | { |
130 | { |
131 | local loo,loo2 |
131 | local loo,loo2 |
132 | frametoimg_use_count=frametoimg_use_count+1 |
132 | frametoimg_use_count=frametoimg_use_count+1 |
133 | if frametoimg_use_count = 1 |
133 | if frametoimg_use_count = 1 |
134 | 134 | ||
135 | jmp end_frametoimg_proc |
135 | jmp end_frametoimg_proc |
136 | 136 | ||
137 | frametoimg_proc: |
137 | frametoimg_proc: |
138 | ;getout coord |
138 | ;getout coord |
139 | mov edx,ebx ;img ;xsize |
139 | mov edx,ebx ;img ;xsize |
140 | movzx eax,word [edx] |
140 | movzx eax,word [edx] |
141 | add eax,esi ;y cor |
141 | add eax,esi ;y cor |
142 | 142 | ||
143 | ; mov eax,esi ;y cor |
143 | ; mov eax,esi ;y cor |
144 | mul dword [ecx] ;canvas xsize |
144 | mul dword [ecx] ;canvas xsize |
145 | add eax,edi ;x cor |
145 | add eax,edi ;x cor |
146 | 146 | ||
147 | mov ebp,ebx ;img ;xsize |
147 | mov ebp,ebx ;img ;xsize |
148 | movzx edx,word [ebp] |
148 | movzx edx,word [ebp] |
149 | add eax,edx |
149 | add eax,edx |
150 | 150 | ||
151 | mov ebp,eax |
151 | mov ebp,eax |
152 | shl eax,1 |
152 | shl eax,1 |
153 | add ebp,eax |
153 | add ebp,eax |
154 | add ebp,ecx ;canvas+8;start |
154 | add ebp,ecx ;canvas+8;start |
155 | add ebp,8 |
155 | add ebp,8 |
156 | ;get img size |
156 | ;get img size |
157 | add ebx,4 |
157 | add ebx,4 |
158 | mov eax,ebx ;img ;xsize |
158 | mov eax,ebx ;img ;xsize |
159 | movzx esi,word [eax] |
159 | movzx esi,word [eax] |
160 | movzx edi,word [eax+2] |
160 | movzx edi,word [eax+2] |
161 | add ebx,4 |
161 | add ebx,4 |
162 | mov edx,ebx ;img+8 |
162 | mov edx,ebx ;img+8 |
163 | loo2: |
163 | loo2: |
164 | push esi |
164 | push esi |
165 | loo: |
165 | loo: |
166 | mov al,byte [edx] |
166 | mov al,byte [edx] |
167 | mov byte [ebp],al |
167 | mov byte [ebp],al |
168 | inc ebp |
168 | inc ebp |
169 | inc edx |
169 | inc edx |
170 | mov al,byte [edx] |
170 | mov al,byte [edx] |
171 | mov byte [ebp],al |
171 | mov byte [ebp],al |
172 | inc ebp |
172 | inc ebp |
173 | inc edx |
173 | inc edx |
174 | mov al,byte [edx] |
174 | mov al,byte [edx] |
175 | mov byte [ebp],al |
175 | mov byte [ebp],al |
176 | inc ebp |
176 | inc ebp |
177 | inc edx |
177 | inc edx |
178 | 178 | ||
179 | dec esi |
179 | dec esi |
180 | jnz loo |
180 | jnz loo |
181 | pop esi |
181 | pop esi |
182 | sub ebp,3 |
182 | sub ebp,3 |
183 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
183 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
184 | sub eax,esi |
184 | sub eax,esi |
185 | add ebp,eax |
185 | add ebp,eax |
186 | shl eax,1 |
186 | shl eax,1 |
187 | add ebp,eax |
187 | add ebp,eax |
188 | 188 | ||
189 | add ebp,3 |
189 | add ebp,3 |
190 | 190 | ||
191 | dec edi |
191 | dec edi |
192 | jnz loo2 |
192 | jnz loo2 |
193 | ret |
193 | ret |
194 | end_frametoimg_proc: |
194 | end_frametoimg_proc: |
195 | end if |
195 | end if |
196 | push img |
196 | push img |
197 | push canvas |
197 | push canvas |
198 | push x |
198 | push x |
199 | push y |
199 | push y |
200 | pop esi |
200 | pop esi |
201 | pop edi |
201 | pop edi |
202 | pop ecx |
202 | pop ecx |
203 | pop ebx |
203 | pop ebx |
204 | call frametoimg_proc |
204 | call frametoimg_proc |
205 | } |
205 | } |
206 | 206 | ||
207 | 207 | ||
208 | aimgtoimg_use_count=0 |
208 | aimgtoimg_use_count=0 |
209 | macro aimgtoimg img, x, y, canvas,acol |
209 | macro aimgtoimg img, x, y, canvas,acol |
210 | { |
210 | { |
211 | local loo,loo2,acolor |
211 | local loo,loo2,acolor |
212 | aimgtoimg_use_count=aimgtoimg_use_count+1 |
212 | aimgtoimg_use_count=aimgtoimg_use_count+1 |
213 | if aimgtoimg_use_count = 1 |
213 | if aimgtoimg_use_count = 1 |
214 | 214 | ||
215 | jmp end_aimgtoimg_proc |
215 | jmp end_aimgtoimg_proc |
216 | 216 | ||
217 | acolor dd 0 |
217 | acolor dd 0 |
218 | aimgtoimg_proc: |
218 | aimgtoimg_proc: |
219 | ;getout coord |
219 | ;getout coord |
220 | mov [acolor],ebp |
220 | mov [acolor],ebp |
221 | 221 | ||
222 | mov eax,esi ;y cor |
222 | mov eax,esi ;y cor |
223 | mul dword [ecx] ;canvas xsize |
223 | mul dword [ecx] ;canvas xsize |
224 | add eax,edi ;x cor |
224 | add eax,edi ;x cor |
225 | mov ebp,eax |
225 | mov ebp,eax |
226 | shl eax,1 |
226 | shl eax,1 |
227 | add ebp,eax |
227 | add ebp,eax |
228 | add ebp,ecx ;canvas+8;start |
228 | add ebp,ecx ;canvas+8;start |
229 | add ebp,8 |
229 | add ebp,8 |
230 | ;get img size |
230 | ;get img size |
231 | mov eax,ebx ;img ;xsize |
231 | mov eax,ebx ;img ;xsize |
232 | mov esi,[eax] |
232 | mov esi,[eax] |
233 | add ebx,4 |
233 | add ebx,4 |
234 | mov eax,ebx ; img+4 ;ysize |
234 | mov eax,ebx ; img+4 ;ysize |
235 | mov edi,[eax] |
235 | mov edi,[eax] |
236 | add ebx,4 |
236 | add ebx,4 |
237 | mov edx,ebx ;img+8 |
237 | mov edx,ebx ;img+8 |
238 | loo2: |
238 | loo2: |
239 | push esi |
239 | push esi |
240 | loo: |
240 | loo: |
241 | 241 | ||
242 | ;test on alpha color |
242 | ;test on alpha color |
243 | mov eax,[edx] |
243 | mov eax,[edx] |
244 | shl eax,8 |
244 | shl eax,8 |
245 | shr eax,8 |
245 | shr eax,8 |
246 | cmp eax,[acolor] |
246 | cmp eax,[acolor] |
247 | jne yx |
247 | jne yx |
248 | add edx,3 |
248 | add edx,3 |
249 | add ebp,3 |
249 | add ebp,3 |
250 | jmp nx |
250 | jmp nx |
251 | yx: |
251 | yx: |
252 | 252 | ||
253 | mov al,byte [edx] |
253 | mov al,byte [edx] |
254 | mov byte [ebp],al |
254 | mov byte [ebp],al |
255 | inc ebp |
255 | inc ebp |
256 | inc edx |
256 | inc edx |
257 | mov al,byte [edx] |
257 | mov al,byte [edx] |
258 | mov byte [ebp],al |
258 | mov byte [ebp],al |
259 | inc ebp |
259 | inc ebp |
260 | inc edx |
260 | inc edx |
261 | mov al,byte [edx] |
261 | mov al,byte [edx] |
262 | mov byte [ebp],al |
262 | mov byte [ebp],al |
263 | inc ebp |
263 | inc ebp |
264 | inc edx |
264 | inc edx |
265 | nx: |
265 | nx: |
266 | dec esi |
266 | dec esi |
267 | jnz loo |
267 | jnz loo |
268 | pop esi |
268 | pop esi |
269 | sub ebp,3 |
269 | sub ebp,3 |
270 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
270 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
271 | sub eax,esi |
271 | sub eax,esi |
272 | add ebp,eax |
272 | add ebp,eax |
273 | shl eax,1 |
273 | shl eax,1 |
274 | add ebp,eax |
274 | add ebp,eax |
275 | 275 | ||
276 | add ebp,3 |
276 | add ebp,3 |
277 | 277 | ||
278 | dec edi |
278 | dec edi |
279 | jnz loo2 |
279 | jnz loo2 |
280 | ret |
280 | ret |
281 | end_aimgtoimg_proc: |
281 | end_aimgtoimg_proc: |
282 | end if |
282 | end if |
283 | push img |
283 | push img |
284 | push canvas |
284 | push canvas |
285 | push x |
285 | push x |
286 | push y |
286 | push y |
287 | push acol |
287 | push acol |
288 | pop ebp |
288 | pop ebp |
289 | pop esi |
289 | pop esi |
290 | pop edi |
290 | pop edi |
291 | pop ecx |
291 | pop ecx |
292 | pop ebx |
292 | pop ebx |
293 | call aimgtoimg_proc |
293 | call aimgtoimg_proc |
294 | } |
294 | } |
295 | 295 | ||
296 | 296 | ||
297 | 297 | ||
298 | 298 | ||
299 | imgtoimg_use_count=0 |
299 | imgtoimg_use_count=0 |
300 | macro imgtoimg img, x, y, canvas |
300 | macro imgtoimg img, x, y, canvas |
301 | { |
301 | { |
302 | local loo,loo2 |
302 | local loo,loo2 |
303 | imgtoimg_use_count=imgtoimg_use_count+1 |
303 | imgtoimg_use_count=imgtoimg_use_count+1 |
304 | if imgtoimg_use_count = 1 |
304 | if imgtoimg_use_count = 1 |
305 | 305 | ||
306 | jmp end_imgtoimg_proc |
306 | jmp end_imgtoimg_proc |
307 | imgtoimg_proc: |
307 | imgtoimg_proc: |
308 | ;getout coord |
308 | ;getout coord |
309 | mov eax,esi ;y cor |
309 | mov eax,esi ;y cor |
310 | mul dword [ecx] ;canvas xsize |
310 | mul dword [ecx] ;canvas xsize |
311 | add eax,edi ;x cor |
311 | add eax,edi ;x cor |
312 | mov ebp,eax |
312 | mov ebp,eax |
313 | shl eax,1 |
313 | shl eax,1 |
314 | add ebp,eax |
314 | add ebp,eax |
315 | add ebp,ecx ;canvas+8;start |
315 | add ebp,ecx ;canvas+8;start |
316 | add ebp,8 |
316 | add ebp,8 |
317 | ;get img size |
317 | ;get img size |
318 | mov eax,ebx ;img ;xsize |
318 | mov eax,ebx ;img ;xsize |
319 | mov esi,[eax] |
319 | mov esi,[eax] |
320 | add ebx,4 |
320 | add ebx,4 |
321 | mov eax,ebx ; img+4 ;ysize |
321 | mov eax,ebx ; img+4 ;ysize |
322 | mov edi,[eax] |
322 | mov edi,[eax] |
323 | add ebx,4 |
323 | add ebx,4 |
324 | mov edx,ebx ;img+8 |
324 | mov edx,ebx ;img+8 |
325 | loo2: |
325 | loo2: |
326 | push esi |
326 | push esi |
327 | loo: |
327 | loo: |
328 | mov al,byte [edx] |
328 | mov al,byte [edx] |
329 | mov byte [ebp],al |
329 | mov byte [ebp],al |
330 | inc ebp |
330 | inc ebp |
331 | inc edx |
331 | inc edx |
332 | mov al,byte [edx] |
332 | mov al,byte [edx] |
333 | mov byte [ebp],al |
333 | mov byte [ebp],al |
334 | inc ebp |
334 | inc ebp |
335 | inc edx |
335 | inc edx |
336 | mov al,byte [edx] |
336 | mov al,byte [edx] |
337 | mov byte [ebp],al |
337 | mov byte [ebp],al |
338 | inc ebp |
338 | inc ebp |
339 | inc edx |
339 | inc edx |
340 | dec esi |
340 | dec esi |
341 | jnz loo |
341 | jnz loo |
342 | pop esi |
342 | pop esi |
343 | sub ebp,3 |
343 | sub ebp,3 |
344 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
344 | mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
345 | sub eax,esi |
345 | sub eax,esi |
346 | add ebp,eax |
346 | add ebp,eax |
347 | shl eax,1 |
347 | shl eax,1 |
348 | add ebp,eax |
348 | add ebp,eax |
349 | 349 | ||
350 | add ebp,3 |
350 | add ebp,3 |
351 | 351 | ||
352 | dec edi |
352 | dec edi |
353 | jnz loo2 |
353 | jnz loo2 |
354 | ret |
354 | ret |
355 | end_imgtoimg_proc: |
355 | end_imgtoimg_proc: |
356 | end if |
356 | end if |
357 | push img |
357 | push img |
358 | push canvas |
358 | push canvas |
359 | push x |
359 | push x |
360 | push y |
360 | push y |
361 | pop esi |
361 | pop esi |
362 | pop edi |
362 | pop edi |
363 | pop ecx |
363 | pop ecx |
364 | pop ebx |
364 | pop ebx |
365 | call imgtoimg_proc |
365 | call imgtoimg_proc |
366 | } |
366 | } |
367 | 367 | ||
368 | 368 | ||
369 | ;DrawBox |
369 | ;DrawBox |
370 | macro drawfbox x,y,xs,ys,color |
370 | macro drawfbox x,y,xs,ys,color |
371 | { |
371 | { |
372 | words2reg ebx,x,xs ;x*65536+xs |
372 | words2reg ebx,x,xs ;x*65536+xs |
373 | words2reg ecx,y,ys ;y*65536+ys |
373 | words2reg ecx,y,ys ;y*65536+ys |
374 | mov edx,color |
374 | mov edx,color |
375 | mov eax,13 |
375 | mov eax,13 |
376 | int 0x40 |
376 | mcall |
377 | } |
377 | } |
378 | 378 | ||
379 | ; FPS - Set Frame Per Second Display |
379 | ; FPS - Set Frame Per Second Display |
380 | fps_show_frequency=40 |
380 | fps_show_frequency=40 |
381 | macro fps x,y,color,delcolor |
381 | macro fps x,y,color,delcolor |
382 | { |
382 | { |
383 | local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt |
383 | local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt |
384 | local no_out_fps |
384 | local no_out_fps |
385 | jmp spdat |
385 | jmp spdat |
386 | savetime dd 0 |
386 | savetime dd 0 |
387 | fps_cntr dd 0 |
387 | fps_cntr dd 0 |
388 | fps dd 0 |
388 | fps dd 0 |
389 | ttt dd 0 |
389 | ttt dd 0 |
390 | spdat: |
390 | spdat: |
391 | get_time: |
391 | get_time: |
392 | mov eax,3 |
392 | mov eax,3 |
393 | int 0x40 |
393 | mcall |
394 | cmp eax,[savetime] |
394 | cmp eax,[savetime] |
395 | jne new_time |
395 | jne new_time |
396 | inc [fps_cntr] |
396 | inc [fps_cntr] |
397 | cmp dword [ttt],0 |
397 | cmp dword [ttt],0 |
398 | je out_fps |
398 | je out_fps |
399 | dec dword [ttt] |
399 | dec dword [ttt] |
400 | jmp no_out_fps |
400 | jmp no_out_fps |
401 | new_time: |
401 | new_time: |
402 | mov [savetime],eax |
402 | mov [savetime],eax |
403 | mov ebx,[fps_cntr] |
403 | mov ebx,[fps_cntr] |
404 | mov [fps],ebx |
404 | mov [fps],ebx |
405 | mov [fps_cntr],0 |
405 | mov [fps_cntr],0 |
406 | out_fps: |
406 | out_fps: |
407 | if ~(delcolor eq ) |
407 | if ~(delcolor eq ) |
408 | mov ebx,x*65536+36 |
408 | mov ebx,x*65536+36 |
409 | mov ecx,y*65536+7 |
409 | mov ecx,y*65536+7 |
410 | mov edx,delcolor |
410 | mov edx,delcolor |
411 | mov eax,13 |
411 | mov eax,13 |
412 | int 0x40 |
412 | mcall |
413 | end if |
413 | end if |
414 | mov dword [ttt],fps_show_frequency |
414 | mov dword [ttt],fps_show_frequency |
415 | mov eax,47 |
415 | mov eax,47 |
416 | mov ebx,6*65536 |
416 | mov ebx,6*65536 |
417 | ; mov bl,0 |
417 | ; mov bl,0 |
418 | mov edx,x*65536+y |
418 | mov edx,x*65536+y |
419 | mov esi,color |
419 | mov esi,color |
420 | mov ecx,[fps] |
420 | mov ecx,[fps] |
421 | int 0x40 |
421 | mcall |
422 | no_out_fps: |
422 | no_out_fps: |
423 | } |
423 | } |
424 | 424 | ||
425 | ; COLLIMG - Collusion image's |
425 | ; COLLIMG - Collusion image's |
426 | _1dbounce_count=0; |
426 | _1dbounce_count=0; |
427 | macro collimg img1_off,x1,y1,img2_off,x2,y2,otv |
427 | macro collimg img1_off,x1,y1,img2_off,x2,y2,otv |
428 | { |
428 | { |
429 | local bounce,exit,anot,bc,nbc |
429 | local bounce,exit,anot,bc,nbc |
430 | mov esi,[img1_off] ;xs1 |
430 | mov esi,[img1_off] ;xs1 |
431 | mov edi,[img2_off] ;ys2 |
431 | mov edi,[img2_off] ;ys2 |
432 | mov eax,x1 ; |
432 | mov eax,x1 ; |
433 | mov ebx,x2 ; |
433 | mov ebx,x2 ; |
434 | call _1dbounce |
434 | call _1dbounce |
435 | mov edx,ecx |
435 | mov edx,ecx |
436 | mov esi,[img1_off+4] ;ys1 |
436 | mov esi,[img1_off+4] ;ys1 |
437 | mov edi,[img2_off+4] ;ys2 |
437 | mov edi,[img2_off+4] ;ys2 |
438 | mov eax,y1 ; |
438 | mov eax,y1 ; |
439 | mov ebx,y2 ; |
439 | mov ebx,y2 ; |
440 | call _1dbounce |
440 | call _1dbounce |
441 | add edx,ecx |
441 | add edx,ecx |
442 | cmp edx,2 |
442 | cmp edx,2 |
443 | je bounce |
443 | je bounce |
444 | mov otv,0 |
444 | mov otv,0 |
445 | jmp exit |
445 | jmp exit |
446 | _1dbounce_count=_1dbounce_count+1 |
446 | _1dbounce_count=_1dbounce_count+1 |
447 | if _1dbounce_count = 1 |
447 | if _1dbounce_count = 1 |
448 | _1dbounce: |
448 | _1dbounce: |
449 | cmp ebx,eax |
449 | cmp ebx,eax |
450 | jb anot |
450 | jb anot |
451 | add eax,esi |
451 | add eax,esi |
452 | cmp eax,ebx |
452 | cmp eax,ebx |
453 | jbe nbc |
453 | jbe nbc |
454 | bc: |
454 | bc: |
455 | mov ecx,1 |
455 | mov ecx,1 |
456 | ret |
456 | ret |
457 | anot: |
457 | anot: |
458 | add ebx,edi |
458 | add ebx,edi |
459 | cmp ebx,eax |
459 | cmp ebx,eax |
460 | ja bc |
460 | ja bc |
461 | nbc: |
461 | nbc: |
462 | xor ecx,ecx |
462 | xor ecx,ecx |
463 | ret |
463 | ret |
464 | end if |
464 | end if |
465 | bounce: |
465 | bounce: |
466 | mov otv,1 |
466 | mov otv,1 |
467 | exit: |
467 | exit: |
468 | } |
468 | } |
469 | 469 | ||
470 | macro rgbtobgr image |
470 | macro rgbtobgr image |
471 | { |
471 | { |
472 | local loo |
472 | local loo |
473 | mov eax,[image] |
473 | mov eax,[image] |
474 | mul dword [image+4] |
474 | mul dword [image+4] |
475 | mov ecx,eax |
475 | mov ecx,eax |
476 | mov esi,image+8 |
476 | mov esi,image+8 |
477 | ; add esi,8 |
477 | ; add esi,8 |
478 | loo: |
478 | loo: |
479 | mov al,[esi] |
479 | mov al,[esi] |
480 | mov bl,[esi+2] |
480 | mov bl,[esi+2] |
481 | mov [esi],bl |
481 | mov [esi],bl |
482 | mov [esi+2],al |
482 | mov [esi+2],al |
483 | add esi,3 |
483 | add esi,3 |
484 | dec ecx |
484 | dec ecx |
485 | jnz loo |
485 | jnz loo |
486 | } |
486 | } |
487 | 487 | ||
488 | 488 | ||
489 | macro setimg x , y ,arg3 |
489 | macro setimg x , y ,arg3 |
490 | { |
490 | { |
491 | mov eax,7 |
491 | mov eax,7 |
492 | mov ebx,arg3 |
492 | mov ebx,arg3 |
493 | add ebx,8 |
493 | add ebx,8 |
494 | mov cx,[arg3] |
494 | mov cx,[arg3] |
495 | shl ecx,16 |
495 | shl ecx,16 |
496 | add cx,[arg3+4] |
496 | add cx,[arg3+4] |
497 | ; wordstoreg ecx,[arg3],[arg3+4] |
497 | ; wordstoreg ecx,[arg3],[arg3+4] |
498 | ; wordstoreg edx,x,y |
498 | ; wordstoreg edx,x,y |
499 | words2reg edx, x , y ;arg1*65536+arg2 |
499 | words2reg edx, x , y ;arg1*65536+arg2 |
500 | int 0x40 |
500 | mcall |
501 | } |
501 | } |
502 | 502 | ||
503 | macro setframe x , y ,arg3 |
503 | macro setframe x , y ,arg3 |
504 | { |
504 | { |
505 | mov eax,7 |
505 | mov eax,7 |
506 | mov ebx,arg3 |
506 | mov ebx,arg3 |
507 | add ebx,8 |
507 | add ebx,8 |
508 | words2reg edx, x , y ;arg1*65536+arg2 |
508 | words2reg edx, x , y ;arg1*65536+arg2 |
509 | add edx,dword [arg3] |
509 | add edx,dword [arg3] |
510 | mov ecx,dword [arg3+4] |
510 | mov ecx,dword [arg3+4] |
511 | int 0x40 |
511 | mcall |
512 | } |
512 | } |
513 | 513 | ||
514 | 514 | ||
515 | macro getimg imgsrc,x,y,xs,ys,imgdest |
515 | macro getimg imgsrc,x,y,xs,ys,imgdest |
516 | { |
516 | { |
517 | local cyc |
517 | local cyc |
518 | if xs eqtype 0 |
518 | if xs eqtype 0 |
519 | mov dword [imgdest],xs |
519 | mov dword [imgdest],xs |
520 | else |
520 | else |
521 | mov eax,xs |
521 | mov eax,xs |
522 | mov dword [imgdest],eax |
522 | mov dword [imgdest],eax |
523 | end if |
523 | end if |
524 | if ys eqtype 0 |
524 | if ys eqtype 0 |
525 | mov dword [imgdest+4],ys |
525 | mov dword [imgdest+4],ys |
526 | else |
526 | else |
527 | mov eax,ys |
527 | mov eax,ys |
528 | mov dword [imgdest+4],eax |
528 | mov dword [imgdest+4],eax |
529 | end if |
529 | end if |
530 | 530 | ||
531 | mov eax,dword [imgsrc] ;getx size |
531 | mov eax,dword [imgsrc] ;getx size |
532 | ; lea ecx,[eax+2*eax] |
532 | ; lea ecx,[eax+2*eax] |
533 | mov ecx,eax |
533 | mov ecx,eax |
534 | shl ecx,1 |
534 | shl ecx,1 |
535 | add ecx,eax |
535 | add ecx,eax |
536 | 536 | ||
537 | mov ebx,y |
537 | mov ebx,y |
538 | mul ebx |
538 | mul ebx |
539 | add eax,x |
539 | add eax,x |
540 | mov edx,ecx |
540 | mov edx,ecx |
541 | lea eax,[eax+2*eax] ;eax=offset on imsrc |
541 | lea eax,[eax+2*eax] ;eax=offset on imsrc |
542 | ; mov ebp,eax |
542 | ; mov ebp,eax |
543 | ; shl eax,1 |
543 | ; shl eax,1 |
544 | ; add eax,ebp |
544 | ; add eax,ebp |
545 | 545 | ||
546 | mov ecx,xs |
546 | mov ecx,xs |
547 | mov ebx,ys |
547 | mov ebx,ys |
548 | 548 | ||
549 | mov edi,8+imgdest |
549 | mov edi,8+imgdest |
550 | lea esi,[eax+8+imgsrc] |
550 | lea esi,[eax+8+imgsrc] |
551 | ; mov esi,eax |
551 | ; mov esi,eax |
552 | ; add esi,8 |
552 | ; add esi,8 |
553 | ; add esi,imgsrc |
553 | ; add esi,imgsrc |
554 | 554 | ||
555 | cld |
555 | cld |
556 | cyc: |
556 | cyc: |
557 | movsw |
557 | movsw |
558 | movsb |
558 | movsb |
559 | dec ecx |
559 | dec ecx |
560 | jne cyc |
560 | jne cyc |
561 | add esi,edx |
561 | add esi,edx |
562 | mov ecx,xs |
562 | mov ecx,xs |
563 | sub esi,ecx |
563 | sub esi,ecx |
564 | sub esi,ecx |
564 | sub esi,ecx |
565 | sub esi,ecx |
565 | sub esi,ecx |
566 | dec ebx |
566 | dec ebx |
567 | jne cyc |
567 | jne cyc |
568 | } |
568 | } |
569 | 569 | ||
570 | macro copyimg img2_off,img1_off |
570 | macro copyimg img2_off,img1_off |
571 | { |
571 | { |
572 | mov eax,dword [img1_off] |
572 | mov eax,dword [img1_off] |
573 | mov ebx,dword [img1_off+4] |
573 | mov ebx,dword [img1_off+4] |
574 | mul ebx |
574 | mul ebx |
575 | lea ecx,[eax+2*eax] |
575 | lea ecx,[eax+2*eax] |
576 | lea esi,[img1_off+8] |
576 | lea esi,[img1_off+8] |
577 | lea edi,[img2_off+8] |
577 | lea edi,[img2_off+8] |
578 | cld |
578 | cld |
579 | rep movsb |
579 | rep movsb |
580 | } |
580 | } |
581 | 581 | ||
582 | macro fullimg img_off,xs,ys,color |
582 | macro fullimg img_off,xs,ys,color |
583 | { |
583 | { |
584 | local cop |
584 | local cop |
585 | mov eax,xs |
585 | mov eax,xs |
586 | mov ebx,ys |
586 | mov ebx,ys |
587 | mov dword [img_off],eax |
587 | mov dword [img_off],eax |
588 | mov dword [img_off+4],ebx |
588 | mov dword [img_off+4],ebx |
589 | mul ebx |
589 | mul ebx |
590 | lea ebp,[eax+2*eax] |
590 | lea ebp,[eax+2*eax] |
591 | mov esi,color |
591 | mov esi,color |
592 | if color eqtype 0 |
592 | if color eqtype 0 |
593 | 6 |
593 | 6 |
594 | else |
594 | else |
595 | mov ecx,esi |
595 | mov ecx,esi |
596 | shr ecx,16 |
596 | shr ecx,16 |
597 | end if |
597 | end if |
598 | xor edi,edi |
598 | xor edi,edi |
599 | cop: |
599 | cop: |
600 | mov word [img_off+8+edi],si |
600 | mov word [img_off+8+edi],si |
601 | add edi,2 |
601 | add edi,2 |
602 | mov byte [img_off+8+edi],cl |
602 | mov byte [img_off+8+edi],cl |
603 | inc edi |
603 | inc edi |
604 | cmp edi,ebp |
604 | cmp edi,ebp |
605 | jne cop |
605 | jne cop |
606 | } |
606 | } |
607 | 607 | ||
608 | 608 | ||
609 | 609 | ||
610 | ; number of frame in ecx |
610 | ; number of frame in ecx |
611 | ; callculatin offset of raw data |
611 | ; callculatin offset of raw data |
612 | 612 | ||
613 | macro getframeoff num_of_frame,offset_of_animation,offset_of_frame |
613 | macro getframeoff num_of_frame,offset_of_animation,offset_of_frame |
614 | { |
614 | { |
615 | local loo,setpic |
615 | local loo,setpic |
616 | mov ebp,num_of_frame ;ecx |
616 | mov ebp,num_of_frame ;ecx |
617 | mov esi,offset_of_animation;Image |
617 | mov esi,offset_of_animation;Image |
618 | loo: |
618 | loo: |
619 | cmp ebp,0 |
619 | cmp ebp,0 |
620 | je setpic |
620 | je setpic |
621 | movzx eax,word [esi+4] |
621 | movzx eax,word [esi+4] |
622 | movzx ebx,word [esi+6] |
622 | movzx ebx,word [esi+6] |
623 | mul ebx ;dword [esi+4] |
623 | mul ebx ;dword [esi+4] |
624 | mov ebx,3 |
624 | mov ebx,3 |
625 | mul ebx |
625 | mul ebx |
626 | add eax,8 |
626 | add eax,8 |
627 | add esi,eax |
627 | add esi,eax |
628 | dec ebp |
628 | dec ebp |
629 | jmp loo |
629 | jmp loo |
630 | setpic: |
630 | setpic: |
631 | mov dword offset_of_frame,esi |
631 | mov dword offset_of_frame,esi |
632 | } |
632 | } |
633 | 633 | ||
634 | 634 | ||
635 | ; BMPTOIMG -Convert BMP format TO IMG format |
635 | ; BMPTOIMG -Convert BMP format TO IMG format |
636 | ; (SYNTAX) BMPTOIMG BMP_source_offset,IMG_dest_ofset |
636 | ; (SYNTAX) BMPTOIMG BMP_source_offset,IMG_dest_ofset |
637 | ; (SAMPLE) View BMPLS.ASM sample. |
637 | ; (SAMPLE) View BMPLS.ASM sample. |
638 | ; ( NOTE ) This is macros is not brake bmp structure! Tested in 32,8,4 bits |
638 | ; ( NOTE ) This is macros is not brake bmp structure! Tested in 32,8,4 bits |
639 | 639 | ||
640 | 640 | ||
641 | bmptoimg_data_area_count=0 |
641 | bmptoimg_data_area_count=0 |
642 | macro bmptoimg bmp_load_area,img_dest_area |
642 | macro bmptoimg bmp_load_area,img_dest_area |
643 | { |
643 | { |
644 | local fileinfo,string,end_bmp,nodix |
644 | local fileinfo,string,end_bmp,nodix |
645 | local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2 |
645 | local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2 |
646 | local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize |
646 | local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize |
647 | ;local qwe,bmpfn |
647 | ;local qwe,bmpfn |
648 | 648 | ||
649 | ; convert: |
649 | ; convert: |
650 | movzx eax,word [bmp_load_area+28] |
650 | movzx eax,word [bmp_load_area+28] |
651 | mul dword [bmp_load_area+18] |
651 | mul dword [bmp_load_area+18] |
652 | add eax,31 |
652 | add eax,31 |
653 | shr eax,5 |
653 | shr eax,5 |
654 | mov dword [bmptoimg_data_area_dwps],eax ;dwps-doublewords per string |
654 | mov dword [bmptoimg_data_area_dwps],eax ;dwps-doublewords per string |
655 | shl eax,2 |
655 | shl eax,2 |
656 | mov dword [bmptoimg_data_area_bps],eax ;bps-bytes per string |
656 | mov dword [bmptoimg_data_area_bps],eax ;bps-bytes per string |
657 | 657 | ||
658 | cmp dword [bmp_load_area+34],0 |
658 | cmp dword [bmp_load_area+34],0 |
659 | jne yespicsize ;if picture size is defined |
659 | jne yespicsize ;if picture size is defined |
660 | mul dword [bmp_load_area+22] |
660 | mul dword [bmp_load_area+22] |
661 | mov dword [bmp_load_area+34],eax |
661 | mov dword [bmp_load_area+34],eax |
662 | 662 | ||
663 | yespicsize: |
663 | yespicsize: |
664 | mov ebp,img_dest_area+8 |
664 | mov ebp,img_dest_area+8 |
665 | 665 | ||
666 | mov eax,bmp_load_area |
666 | mov eax,bmp_load_area |
667 | mov ebx,eax |
667 | mov ebx,eax |
668 | add ebx, [bmp_load_area+2];file size |
668 | add ebx, [bmp_load_area+2];file size |
669 | inc ebx |
669 | inc ebx |
670 | mov dword [bmptoimg_soi],ebx ;soi-start of image area for drawing |
670 | mov dword [bmptoimg_soi],ebx ;soi-start of image area for drawing |
671 | 671 | ||
672 | add eax, [bmp_load_area+10] |
672 | add eax, [bmp_load_area+10] |
673 | mov dword [bmptoimg_data_area_sop],eax ;sop-start of picture in file |
673 | mov dword [bmptoimg_data_area_sop],eax ;sop-start of picture in file |
674 | add eax, [bmp_load_area+34] |
674 | add eax, [bmp_load_area+34] |
675 | mov dword [bmptoimg_data_area_eop],eax ;eop-end of picture in file |
675 | mov dword [bmptoimg_data_area_eop],eax ;eop-end of picture in file |
676 | mov eax, [bmp_load_area+18] |
676 | mov eax, [bmp_load_area+18] |
677 | lea eax,[eax+2*eax] ;3x pixels in eax |
677 | lea eax,[eax+2*eax] ;3x pixels in eax |
678 | 678 | ||
679 | mov edi,dword [bmptoimg_soi] ;initializing |
679 | mov edi,dword [bmptoimg_soi] ;initializing |
680 | mov esi,dword [bmptoimg_data_area_eop] |
680 | mov esi,dword [bmptoimg_data_area_eop] |
681 | sub esi,dword [bmptoimg_data_area_bps] |
681 | sub esi,dword [bmptoimg_data_area_bps] |
682 | 682 | ||
683 | 683 | ||
684 | nextstring: |
684 | nextstring: |
685 | push edi |
685 | push edi |
686 | push ebp |
686 | push ebp |
687 | cmp word [bmp_load_area+28],24 |
687 | cmp word [bmp_load_area+28],24 |
688 | jne convertno32 |
688 | jne convertno32 |
689 | 689 | ||
690 | mov edi,ebp |
690 | mov edi,ebp |
691 | mov ecx,[bmptoimg_data_area_dwps] |
691 | mov ecx,[bmptoimg_data_area_dwps] |
692 | cld |
692 | cld |
693 | rep movsd |
693 | rep movsd |
694 | 694 | ||
695 | convert1: |
695 | convert1: |
696 | pop ebp |
696 | pop ebp |
697 | pop edi |
697 | pop edi |
698 | sub esi,dword [bmptoimg_data_area_bps] |
698 | sub esi,dword [bmptoimg_data_area_bps] |
699 | sub esi,dword [bmptoimg_data_area_bps] |
699 | sub esi,dword [bmptoimg_data_area_bps] |
700 | cmp esi,dword [bmptoimg_data_area_sop] |
700 | cmp esi,dword [bmptoimg_data_area_sop] |
701 | jb end_bmp |
701 | jb end_bmp |
702 | add edi,eax |
702 | add edi,eax |
703 | add ebp,eax |
703 | add ebp,eax |
704 | jmp nextstring |
704 | jmp nextstring |
705 | 705 | ||
706 | convertno32: |
706 | convertno32: |
707 | mov ebx,bmp_load_area |
707 | mov ebx,bmp_load_area |
708 | add ebx, [bmp_load_area+14] |
708 | add ebx, [bmp_load_area+14] |
709 | add ebx,14 ;start of color table |
709 | add ebx,14 ;start of color table |
710 | push esi |
710 | push esi |
711 | add esi,dword [bmptoimg_data_area_bps] |
711 | add esi,dword [bmptoimg_data_area_bps] |
712 | mov dword [bmptoimg_data_area_eos],esi |
712 | mov dword [bmptoimg_data_area_eos],esi |
713 | pop esi |
713 | pop esi |
714 | nextelem: |
714 | nextelem: |
715 | push eax |
715 | push eax |
716 | movzx eax,byte [esi] |
716 | movzx eax,byte [esi] |
717 | cmp word [bmp_load_area+28],4 |
717 | cmp word [bmp_load_area+28],4 |
718 | je convert4bpp |
718 | je convert4bpp |
719 | cmp word [bmp_load_area+28],1 |
719 | cmp word [bmp_load_area+28],1 |
720 | je convert1bpp |
720 | je convert1bpp |
721 | call converttable |
721 | call converttable |
722 | 722 | ||
723 | convert2: |
723 | convert2: |
724 | pop eax |
724 | pop eax |
725 | inc esi |
725 | inc esi |
726 | cmp esi,dword [bmptoimg_data_area_eos] |
726 | cmp esi,dword [bmptoimg_data_area_eos] |
727 | jae convert1 |
727 | jae convert1 |
728 | add edi,3 |
728 | add edi,3 |
729 | 729 | ||
730 | add ebp,3 |
730 | add ebp,3 |
731 | 731 | ||
732 | jmp nextelem |
732 | jmp nextelem |
733 | 733 | ||
734 | convert4bpp: |
734 | convert4bpp: |
735 | shl ax,4 |
735 | shl ax,4 |
736 | shr al,4 |
736 | shr al,4 |
737 | push ax |
737 | push ax |
738 | movzx eax,ah |
738 | movzx eax,ah |
739 | call converttable |
739 | call converttable |
740 | add edi,3 |
740 | add edi,3 |
741 | 741 | ||
742 | add ebp,3 |
742 | add ebp,3 |
743 | 743 | ||
744 | pop ax |
744 | pop ax |
745 | movzx eax,al |
745 | movzx eax,al |
746 | call converttable |
746 | call converttable |
747 | jmp convert2 |
747 | jmp convert2 |
748 | 748 | ||
749 | convert1bpp: |
749 | convert1bpp: |
750 | mov ecx,eax |
750 | mov ecx,eax |
751 | mov edx,7 |
751 | mov edx,7 |
752 | nextbit: |
752 | nextbit: |
753 | xor eax,eax |
753 | xor eax,eax |
754 | bt ecx,edx |
754 | bt ecx,edx |
755 | jnc noaddelem |
755 | jnc noaddelem |
756 | inc eax |
756 | inc eax |
757 | noaddelem: |
757 | noaddelem: |
758 | push edx |
758 | push edx |
759 | call converttable |
759 | call converttable |
760 | pop edx |
760 | pop edx |
761 | dec edx |
761 | dec edx |
762 | js convert2 |
762 | js convert2 |
763 | add edi,3 |
763 | add edi,3 |
764 | 764 | ||
765 | add ebp,3 |
765 | add ebp,3 |
766 | 766 | ||
767 | jmp nextbit |
767 | jmp nextbit |
768 | 768 | ||
769 | converttable: |
769 | converttable: |
770 | shl eax,2 |
770 | shl eax,2 |
771 | add eax,ebx |
771 | add eax,ebx |
772 | mov edx, dword [eax] |
772 | mov edx, dword [eax] |
773 | ; mov dword [edi],edx |
773 | ; mov dword [edi],edx |
774 | mov [ebp],edx |
774 | mov [ebp],edx |
775 | ret |
775 | ret |
776 | 776 | ||
777 | bmptoimg_data_area_count=bmptoimg_data_area_count+1 |
777 | bmptoimg_data_area_count=bmptoimg_data_area_count+1 |
778 | if bmptoimg_data_area_count = 1 |
778 | if bmptoimg_data_area_count = 1 |
779 | ; DATA AREA |
779 | ; DATA AREA |
780 | bmptoimg_soi dd 0 |
780 | bmptoimg_soi dd 0 |
781 | bmptoimg_data_area_bps dd 0 |
781 | bmptoimg_data_area_bps dd 0 |
782 | bmptoimg_data_area_dwps dd 0 |
782 | bmptoimg_data_area_dwps dd 0 |
783 | bmptoimg_data_area_sop dd 0 |
783 | bmptoimg_data_area_sop dd 0 |
784 | bmptoimg_data_area_eop dd 0 |
784 | bmptoimg_data_area_eop dd 0 |
785 | bmptoimg_data_area_eos dd 0 |
785 | bmptoimg_data_area_eos dd 0 |
786 | end if |
786 | end if |
787 | 787 | ||
788 | end_bmp: |
788 | end_bmp: |
789 | mov eax,dword [bmp_load_area+18] |
789 | mov eax,dword [bmp_load_area+18] |
790 | mov ebx,dword [bmp_load_area+22] |
790 | mov ebx,dword [bmp_load_area+22] |
791 | mov dword [img_dest_area],eax |
791 | mov dword [img_dest_area],eax |
792 | mov dword [img_dest_area+4],ebx |
792 | mov dword [img_dest_area+4],ebx |
793 | } |
793 | } |
794 | 794 | ||
795 | ; For convert RGB to BGR |
795 | ; For convert RGB to BGR |
796 | COLOR_ORDER equ MENUETOS |
796 | COLOR_ORDER equ MENUETOS |
797 | 797 | ||
798 | macro giftoani gifsrc,imgsrc,num_of_frames |
798 | macro giftoani gifsrc,imgsrc,num_of_frames |
799 | { |
799 | { |
800 | local hasharea, ReadGIF, nextblock,_null |
800 | local hasharea, ReadGIF, nextblock,_null |
801 | local globalColor, img_count, cur_info, img_start |
801 | local globalColor, img_count, cur_info, img_start |
802 | local codesize, compsize, bit_count, CC, EOI, Palette |
802 | local codesize, compsize, bit_count, CC, EOI, Palette |
803 | local block_ofs, table_ptr, gifmacend |
803 | local block_ofs, table_ptr, gifmacend |
804 | local no_gc, block_skip, no_comm, noextblock, uselocal |
804 | local no_gc, block_skip, no_comm, noextblock, uselocal |
805 | local setPal, filltable, reinit, cycle, zadd, noinc |
805 | local setPal, filltable, reinit, cycle, zadd, noinc |
806 | local notintable, er, zend, nxt, continue, ex, Gif_skipmap |
806 | local notintable, er, zend, nxt, continue, ex, Gif_skipmap |
807 | local Gif_get_sym, shift, nextbl, noblock, loop1, exx |
807 | local Gif_get_sym, shift, nextbl, noblock, loop1, exx |
808 | local Gif_output, next, loop2 |
808 | local Gif_output, next, loop2 |
809 | 809 | ||
810 | _null fix 0x1000 ; 0x1000 |
810 | _null fix 0x1000 ; 0x1000 |
811 | 811 | ||
812 | ; jmp sss |
812 | ; jmp sss |
813 | ; if defined gif_hash_offset |
813 | ; if defined gif_hash_offset |
814 | ; else |
814 | ; else |
815 | ; hasharea: |
815 | ; hasharea: |
816 | ; times 4096 dd 0 ;4096 |
816 | ; times 4096 dd 0 ;4096 |
817 | ; end if |
817 | ; end if |
818 | ;sss: |
818 | ;sss: |
819 | 819 | ||
820 | mov esi,gifsrc ;ª § ⥫ì ä ¨« ¢ ¯ ¬ï⨠|
820 | mov esi,gifsrc ;ª § ⥫ì ä ¨« ¢ ¯ ¬ï⨠|
821 | mov edi,imgsrc ;ª § ⥫ì ᯨ᮪ ª à⨮ª |
821 | mov edi,imgsrc ;ª § ⥫ì ᯨ᮪ ª à⨮ª |
822 | 822 | ||
823 | if defined gif_hash_offset |
823 | if defined gif_hash_offset |
824 | mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
824 | mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
825 | else |
825 | else |
826 | mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
826 | mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
827 | end if |
827 | end if |
828 | 828 | ||
829 | call ReadGIF |
829 | call ReadGIF |
830 | push ecx |
830 | push ecx |
831 | pop dword num_of_frames |
831 | pop dword num_of_frames |
832 | jmp gifmacend |
832 | jmp gifmacend |
833 | 833 | ||
834 | if defined gif_hash_offset |
834 | if defined gif_hash_offset |
835 | else |
835 | else |
836 | hasharea: |
836 | hasharea: |
837 | times 4096 dd 0 ;4096 |
837 | times 4096 dd 0 ;4096 |
838 | end if |
838 | end if |
839 | 839 | ||
840 | ReadGIF: |
840 | ReadGIF: |
841 | push esi edi |
841 | push esi edi |
842 | mov [table_ptr],eax |
842 | mov [table_ptr],eax |
843 | mov [cur_info],edi |
843 | mov [cur_info],edi |
844 | xor eax,eax |
844 | xor eax,eax |
845 | mov [globalColor],eax |
845 | mov [globalColor],eax |
846 | mov [img_count],eax |
846 | mov [img_count],eax |
847 | inc eax |
847 | inc eax |
848 | cmp dword[esi],'GIF8' |
848 | cmp dword[esi],'GIF8' |
849 | jne er ; signature |
849 | jne er ; signature |
850 | mov ecx,[esi+0xa] |
850 | mov ecx,[esi+0xa] |
851 | inc eax |
851 | inc eax |
852 | add esi,0xd |
852 | add esi,0xd |
853 | mov edi,esi |
853 | mov edi,esi |
854 | bt ecx,7 |
854 | bt ecx,7 |
855 | jnc nextblock |
855 | jnc nextblock |
856 | mov [globalColor],esi |
856 | mov [globalColor],esi |
857 | call Gif_skipmap |
857 | call Gif_skipmap |
858 | nextblock: |
858 | nextblock: |
859 | cmp byte[edi],0x21 |
859 | cmp byte[edi],0x21 |
860 | jne noextblock |
860 | jne noextblock |
861 | inc edi |
861 | inc edi |
862 | cmp byte[edi],0xf9 ; Graphic Control Ext |
862 | cmp byte[edi],0xf9 ; Graphic Control Ext |
863 | jne no_gc |
863 | jne no_gc |
864 | add edi,7 |
864 | add edi,7 |
865 | jmp nextblock |
865 | jmp nextblock |
866 | no_gc: |
866 | no_gc: |
867 | cmp byte[edi],0xfe ; Comment Ext |
867 | cmp byte[edi],0xfe ; Comment Ext |
868 | jne no_comm |
868 | jne no_comm |
869 | inc edi |
869 | inc edi |
870 | block_skip: |
870 | block_skip: |
871 | movzx eax,byte[edi] |
871 | movzx eax,byte[edi] |
872 | lea edi,[edi+eax+1] |
872 | lea edi,[edi+eax+1] |
873 | cmp byte[edi],0 |
873 | cmp byte[edi],0 |
874 | jnz block_skip |
874 | jnz block_skip |
875 | inc edi |
875 | inc edi |
876 | jmp nextblock |
876 | jmp nextblock |
877 | no_comm: |
877 | no_comm: |
878 | cmp byte[edi],0xff ; Application Ext |
878 | cmp byte[edi],0xff ; Application Ext |
879 | jne nextblock |
879 | jne nextblock |
880 | add edi,13 |
880 | add edi,13 |
881 | jmp block_skip |
881 | jmp block_skip |
882 | noextblock: |
882 | noextblock: |
883 | cmp byte[edi],0x2c ; image beginning |
883 | cmp byte[edi],0x2c ; image beginning |
884 | jne er |
884 | jne er |
885 | inc [img_count] |
885 | inc [img_count] |
886 | inc edi |
886 | inc edi |
887 | mov esi,[cur_info] |
887 | mov esi,[cur_info] |
888 | xchg esi,edi |
888 | xchg esi,edi |
889 | movsd |
889 | movsd |
890 | movsd |
890 | movsd |
891 | 891 | ||
892 | push edi |
892 | push edi |
893 | movzx ecx,word[esi] |
893 | movzx ecx,word[esi] |
894 | inc esi |
894 | inc esi |
895 | bt ecx,7 |
895 | bt ecx,7 |
896 | jc uselocal |
896 | jc uselocal |
897 | push [globalColor] |
897 | push [globalColor] |
898 | mov edi,esi |
898 | mov edi,esi |
899 | jmp setPal |
899 | jmp setPal |
900 | uselocal: |
900 | uselocal: |
901 | call Gif_skipmap |
901 | call Gif_skipmap |
902 | push esi |
902 | push esi |
903 | setPal: |
903 | setPal: |
904 | movzx ecx,byte[edi] |
904 | movzx ecx,byte[edi] |
905 | inc ecx |
905 | inc ecx |
906 | mov [codesize],ecx |
906 | mov [codesize],ecx |
907 | dec ecx |
907 | dec ecx |
908 | pop [Palette] |
908 | pop [Palette] |
909 | lea esi,[edi+1] |
909 | lea esi,[edi+1] |
910 | mov edi,[table_ptr] |
910 | mov edi,[table_ptr] |
911 | xor eax,eax |
911 | xor eax,eax |
912 | cld |
912 | cld |
913 | lodsb ; eax - block_count |
913 | lodsb ; eax - block_count |
914 | add eax,esi |
914 | add eax,esi |
915 | mov [block_ofs],eax |
915 | mov [block_ofs],eax |
916 | mov [bit_count],8 |
916 | mov [bit_count],8 |
917 | mov eax,1 |
917 | mov eax,1 |
918 | shl eax,cl |
918 | shl eax,cl |
919 | mov [CC],eax |
919 | mov [CC],eax |
920 | inc eax |
920 | inc eax |
921 | mov [EOI],eax |
921 | mov [EOI],eax |
922 | lea ecx,[eax-1] |
922 | lea ecx,[eax-1] |
923 | mov eax, _null shl 16 |
923 | mov eax, _null shl 16 |
924 | filltable: |
924 | filltable: |
925 | stosd |
925 | stosd |
926 | inc eax |
926 | inc eax |
927 | loop filltable |
927 | loop filltable |
928 | pop edi |
928 | pop edi |
929 | mov [img_start],edi |
929 | mov [img_start],edi |
930 | reinit: |
930 | reinit: |
931 | mov edx,[EOI] |
931 | mov edx,[EOI] |
932 | inc edx |
932 | inc edx |
933 | push [codesize] |
933 | push [codesize] |
934 | pop [compsize] |
934 | pop [compsize] |
935 | call Gif_get_sym |
935 | call Gif_get_sym |
936 | cmp eax,[CC] |
936 | cmp eax,[CC] |
937 | je reinit |
937 | je reinit |
938 | call Gif_output |
938 | call Gif_output |
939 | cycle: |
939 | cycle: |
940 | movzx ebx,ax |
940 | movzx ebx,ax |
941 | call Gif_get_sym |
941 | call Gif_get_sym |
942 | cmp eax,edx |
942 | cmp eax,edx |
943 | jae notintable |
943 | jae notintable |
944 | cmp eax,[CC] |
944 | cmp eax,[CC] |
945 | je reinit |
945 | je reinit |
946 | cmp eax,[EOI] |
946 | cmp eax,[EOI] |
947 | je zend |
947 | je zend |
948 | call Gif_output |
948 | call Gif_output |
949 | zadd: |
949 | zadd: |
950 | push eax |
950 | push eax |
951 | mov eax,[table_ptr] |
951 | mov eax,[table_ptr] |
952 | mov [eax+edx*4],ebx |
952 | mov [eax+edx*4],ebx |
953 | pop eax |
953 | pop eax |
954 | cmp edx,0xFFF |
954 | cmp edx,0xFFF |
955 | jae cycle |
955 | jae cycle |
956 | inc edx |
956 | inc edx |
957 | bsr ebx,edx |
957 | bsr ebx,edx |
958 | cmp ebx,[compsize] |
958 | cmp ebx,[compsize] |
959 | jne noinc |
959 | jne noinc |
960 | inc [compsize] |
960 | inc [compsize] |
961 | noinc: |
961 | noinc: |
962 | jmp cycle |
962 | jmp cycle |
963 | notintable: |
963 | notintable: |
964 | push eax |
964 | push eax |
965 | mov eax,ebx |
965 | mov eax,ebx |
966 | call Gif_output |
966 | call Gif_output |
967 | push ebx |
967 | push ebx |
968 | movzx eax,bx |
968 | movzx eax,bx |
969 | call Gif_output |
969 | call Gif_output |
970 | pop ebx eax |
970 | pop ebx eax |
971 | jmp zadd |
971 | jmp zadd |
972 | er: |
972 | er: |
973 | pop edi |
973 | pop edi |
974 | jmp ex |
974 | jmp ex |
975 | zend: |
975 | zend: |
976 | ; mov eax,[.cur_info] ; skip offset to next frame |
976 | ; mov eax,[.cur_info] ; skip offset to next frame |
977 | ; mov [eax],edi |
977 | ; mov [eax],edi |
978 | mov [cur_info],edi |
978 | mov [cur_info],edi |
979 | add esi,2 |
979 | add esi,2 |
980 | xchg esi,edi |
980 | xchg esi,edi |
981 | nxt: |
981 | nxt: |
982 | cmp byte[edi],0 |
982 | cmp byte[edi],0 |
983 | jnz continue |
983 | jnz continue |
984 | inc edi |
984 | inc edi |
985 | jmp nxt |
985 | jmp nxt |
986 | continue: |
986 | continue: |
987 | cmp byte[edi],0x3b ;read next frame |
987 | cmp byte[edi],0x3b ;read next frame |
988 | jne nextblock |
988 | jne nextblock |
989 | xor eax,eax |
989 | xor eax,eax |
990 | stosd |
990 | stosd |
991 | mov ecx,[img_count] |
991 | mov ecx,[img_count] |
992 | ex: |
992 | ex: |
993 | pop edi esi |
993 | pop edi esi |
994 | ret |
994 | ret |
995 | 995 | ||
996 | Gif_skipmap: |
996 | Gif_skipmap: |
997 | ; in: ecx - image descriptor, esi - pointer to colormap |
997 | ; in: ecx - image descriptor, esi - pointer to colormap |
998 | ; out: edi - pointer to area after colormap |
998 | ; out: edi - pointer to area after colormap |
999 | 999 | ||
1000 | and ecx,111b |
1000 | and ecx,111b |
1001 | inc ecx ; color map size |
1001 | inc ecx ; color map size |
1002 | mov ebx,1 |
1002 | mov ebx,1 |
1003 | shl ebx,cl |
1003 | shl ebx,cl |
1004 | lea ebx,[ebx*2+ebx] |
1004 | lea ebx,[ebx*2+ebx] |
1005 | lea edi,[esi+ebx] |
1005 | lea edi,[esi+ebx] |
1006 | ret |
1006 | ret |
1007 | 1007 | ||
1008 | Gif_get_sym: |
1008 | Gif_get_sym: |
1009 | mov ecx,[compsize] |
1009 | mov ecx,[compsize] |
1010 | push ecx |
1010 | push ecx |
1011 | xor eax,eax |
1011 | xor eax,eax |
1012 | shift: |
1012 | shift: |
1013 | ror byte[esi],1 |
1013 | ror byte[esi],1 |
1014 | rcr eax,1 |
1014 | rcr eax,1 |
1015 | dec [bit_count] |
1015 | dec [bit_count] |
1016 | jnz loop1 |
1016 | jnz loop1 |
1017 | inc esi |
1017 | inc esi |
1018 | cmp esi,[block_ofs] |
1018 | cmp esi,[block_ofs] |
1019 | jb noblock |
1019 | jb noblock |
1020 | push eax |
1020 | push eax |
1021 | xor eax,eax |
1021 | xor eax,eax |
1022 | lodsb |
1022 | lodsb |
1023 | test eax,eax |
1023 | test eax,eax |
1024 | jnz nextbl |
1024 | jnz nextbl |
1025 | mov eax,[EOI] |
1025 | mov eax,[EOI] |
1026 | sub esi,2 |
1026 | sub esi,2 |
1027 | add esp,8 |
1027 | add esp,8 |
1028 | jmp exx |
1028 | jmp exx |
1029 | nextbl: |
1029 | nextbl: |
1030 | add eax,esi |
1030 | add eax,esi |
1031 | mov [block_ofs],eax |
1031 | mov [block_ofs],eax |
1032 | pop eax |
1032 | pop eax |
1033 | noblock: |
1033 | noblock: |
1034 | mov [bit_count],8 |
1034 | mov [bit_count],8 |
1035 | loop1: |
1035 | loop1: |
1036 | loop shift |
1036 | loop shift |
1037 | pop ecx |
1037 | pop ecx |
1038 | rol eax,cl |
1038 | rol eax,cl |
1039 | exx: |
1039 | exx: |
1040 | xor ecx,ecx |
1040 | xor ecx,ecx |
1041 | ret |
1041 | ret |
1042 | 1042 | ||
1043 | Gif_output: |
1043 | Gif_output: |
1044 | push esi eax edx |
1044 | push esi eax edx |
1045 | mov edx,[table_ptr] |
1045 | mov edx,[table_ptr] |
1046 | next: |
1046 | next: |
1047 | push word[edx+eax*4] |
1047 | push word[edx+eax*4] |
1048 | mov ax,word[edx+eax*4+2] |
1048 | mov ax,word[edx+eax*4+2] |
1049 | inc ecx |
1049 | inc ecx |
1050 | cmp ax,_null |
1050 | cmp ax,_null |
1051 | jnz next |
1051 | jnz next |
1052 | shl ebx,16 |
1052 | shl ebx,16 |
1053 | mov bx,[esp] |
1053 | mov bx,[esp] |
1054 | loop2: |
1054 | loop2: |
1055 | pop ax |
1055 | pop ax |
1056 | 1056 | ||
1057 | lea esi,[eax+eax*2] |
1057 | lea esi,[eax+eax*2] |
1058 | add esi,[Palette] |
1058 | add esi,[Palette] |
1059 | 1059 | ||
1060 | if COLOR_ORDER eq MENUETOS |
1060 | if COLOR_ORDER eq MENUETOS |
1061 | mov esi,[esi] |
1061 | mov esi,[esi] |
1062 | bswap esi |
1062 | bswap esi |
1063 | shr esi,8 |
1063 | shr esi,8 |
1064 | mov [edi],esi |
1064 | mov [edi],esi |
1065 | add edi,3 |
1065 | add edi,3 |
1066 | else |
1066 | else |
1067 | movsw |
1067 | movsw |
1068 | movsb |
1068 | movsb |
1069 | end if |
1069 | end if |
1070 | 1070 | ||
1071 | loop loop2 |
1071 | loop loop2 |
1072 | pop edx eax esi |
1072 | pop edx eax esi |
1073 | ret |
1073 | ret |
1074 | 1074 | ||
1075 | globalColor dd 1 |
1075 | globalColor dd 1 |
1076 | img_count dd 1 |
1076 | img_count dd 1 |
1077 | cur_info dd 1 ; image table pointer |
1077 | cur_info dd 1 ; image table pointer |
1078 | img_start dd 1 |
1078 | img_start dd 1 |
1079 | codesize dd 1 |
1079 | codesize dd 1 |
1080 | compsize dd 1 |
1080 | compsize dd 1 |
1081 | bit_count dd 1 |
1081 | bit_count dd 1 |
1082 | CC dd 1 |
1082 | CC dd 1 |
1083 | EOI dd 1 |
1083 | EOI dd 1 |
1084 | Palette dd 1 |
1084 | Palette dd 1 |
1085 | block_ofs dd 1 |
1085 | block_ofs dd 1 |
1086 | table_ptr dd 1 |
1086 | table_ptr dd 1 |
1087 | 1087 | ||
1088 | gifmacend: |
1088 | gifmacend: |
1089 | } |
1089 | } |
1090 | 1090 | ||
1091 | 1091 | ||
1092 | 1092 | ||
1093 | macro giftoimg gifsrc,imgsrc |
1093 | macro giftoimg gifsrc,imgsrc |
1094 | { |
1094 | { |
1095 | local hasharea, ReadGIF, nextblock,_null |
1095 | local hasharea, ReadGIF, nextblock,_null |
1096 | local globalColor, img_count, cur_info, img_start |
1096 | local globalColor, img_count, cur_info, img_start |
1097 | local codesize, compsize, bit_count, CC, EOI, Palette |
1097 | local codesize, compsize, bit_count, CC, EOI, Palette |
1098 | local block_ofs, table_ptr, gifmacend |
1098 | local block_ofs, table_ptr, gifmacend |
1099 | local no_gc, block_skip, no_comm, noextblock, uselocal |
1099 | local no_gc, block_skip, no_comm, noextblock, uselocal |
1100 | local setPal, filltable, reinit, cycle, zadd, noinc |
1100 | local setPal, filltable, reinit, cycle, zadd, noinc |
1101 | local notintable, er, zend, nxt, continue, ex, Gif_skipmap |
1101 | local notintable, er, zend, nxt, continue, ex, Gif_skipmap |
1102 | local Gif_get_sym, shift, nextbl, noblock, loop1, exx |
1102 | local Gif_get_sym, shift, nextbl, noblock, loop1, exx |
1103 | local Gif_output, next, loop2 |
1103 | local Gif_output, next, loop2 |
1104 | 1104 | ||
1105 | _null fix 0x1000 ; 0x1000 |
1105 | _null fix 0x1000 ; 0x1000 |
1106 | 1106 | ||
1107 | mov esi,gifsrc ;ª § ⥫ì ä ¨« ¢ ¯ ¬ï⨠|
1107 | mov esi,gifsrc ;ª § ⥫ì ä ¨« ¢ ¯ ¬ï⨠|
1108 | mov edi,imgsrc ;ª § ⥫ì ᯨ᮪ ª à⨮ª |
1108 | mov edi,imgsrc ;ª § ⥫ì ᯨ᮪ ª à⨮ª |
1109 | 1109 | ||
1110 | if defined gif_hash_offset |
1110 | if defined gif_hash_offset |
1111 | mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
1111 | mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
1112 | else |
1112 | else |
1113 | mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
1113 | mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
1114 | end if |
1114 | end if |
1115 | 1115 | ||
1116 | call ReadGIF |
1116 | call ReadGIF |
1117 | jmp gifmacend |
1117 | jmp gifmacend |
1118 | 1118 | ||
1119 | if defined gif_hash_offset |
1119 | if defined gif_hash_offset |
1120 | else |
1120 | else |
1121 | hasharea: |
1121 | hasharea: |
1122 | times 4096 dd 0 ;4096 |
1122 | times 4096 dd 0 ;4096 |
1123 | end if |
1123 | end if |
1124 | 1124 | ||
1125 | ReadGIF: |
1125 | ReadGIF: |
1126 | push esi edi |
1126 | push esi edi |
1127 | mov [table_ptr],eax |
1127 | mov [table_ptr],eax |
1128 | mov [cur_info],edi |
1128 | mov [cur_info],edi |
1129 | xor eax,eax |
1129 | xor eax,eax |
1130 | mov [globalColor],eax |
1130 | mov [globalColor],eax |
1131 | mov [img_count],eax |
1131 | mov [img_count],eax |
1132 | inc eax |
1132 | inc eax |
1133 | cmp dword[esi],'GIF8' |
1133 | cmp dword[esi],'GIF8' |
1134 | jne er ; signature |
1134 | jne er ; signature |
1135 | mov ecx,[esi+0xa] |
1135 | mov ecx,[esi+0xa] |
1136 | inc eax |
1136 | inc eax |
1137 | add esi,0xd |
1137 | add esi,0xd |
1138 | mov edi,esi |
1138 | mov edi,esi |
1139 | bt ecx,7 |
1139 | bt ecx,7 |
1140 | jnc nextblock |
1140 | jnc nextblock |
1141 | mov [globalColor],esi |
1141 | mov [globalColor],esi |
1142 | call Gif_skipmap |
1142 | call Gif_skipmap |
1143 | nextblock: |
1143 | nextblock: |
1144 | cmp byte[edi],0x21 |
1144 | cmp byte[edi],0x21 |
1145 | jne noextblock |
1145 | jne noextblock |
1146 | inc edi |
1146 | inc edi |
1147 | cmp byte[edi],0xf9 ; Graphic Control Ext |
1147 | cmp byte[edi],0xf9 ; Graphic Control Ext |
1148 | jne no_gc |
1148 | jne no_gc |
1149 | add edi,7 |
1149 | add edi,7 |
1150 | jmp nextblock |
1150 | jmp nextblock |
1151 | no_gc: |
1151 | no_gc: |
1152 | cmp byte[edi],0xfe ; Comment Ext |
1152 | cmp byte[edi],0xfe ; Comment Ext |
1153 | jne no_comm |
1153 | jne no_comm |
1154 | inc edi |
1154 | inc edi |
1155 | block_skip: |
1155 | block_skip: |
1156 | movzx eax,byte[edi] |
1156 | movzx eax,byte[edi] |
1157 | lea edi,[edi+eax+1] |
1157 | lea edi,[edi+eax+1] |
1158 | cmp byte[edi],0 |
1158 | cmp byte[edi],0 |
1159 | jnz block_skip |
1159 | jnz block_skip |
1160 | inc edi |
1160 | inc edi |
1161 | jmp nextblock |
1161 | jmp nextblock |
1162 | no_comm: |
1162 | no_comm: |
1163 | cmp byte[edi],0xff ; Application Ext |
1163 | cmp byte[edi],0xff ; Application Ext |
1164 | jne nextblock |
1164 | jne nextblock |
1165 | add edi,13 |
1165 | add edi,13 |
1166 | jmp block_skip |
1166 | jmp block_skip |
1167 | noextblock: |
1167 | noextblock: |
1168 | cmp byte[edi],0x2c ; image beginning |
1168 | cmp byte[edi],0x2c ; image beginning |
1169 | jne er |
1169 | jne er |
1170 | inc [img_count] |
1170 | inc [img_count] |
1171 | inc edi |
1171 | inc edi |
1172 | mov esi,[cur_info] |
1172 | mov esi,[cur_info] |
1173 | xchg esi,edi |
1173 | xchg esi,edi |
1174 | ; movsd |
1174 | ; movsd |
1175 | ; movsd |
1175 | ; movsd |
1176 | 1176 | ||
1177 | mov bp,word[esi+4] |
1177 | mov bp,word[esi+4] |
1178 | movzx ebx,bp |
1178 | movzx ebx,bp |
1179 | mov [edi],ebx |
1179 | mov [edi],ebx |
1180 | 1180 | ||
1181 | mov bp,word[esi+6] |
1181 | mov bp,word[esi+6] |
1182 | movzx ebx,bp |
1182 | movzx ebx,bp |
1183 | mov [edi+4],ebx |
1183 | mov [edi+4],ebx |
1184 | 1184 | ||
1185 | add edi,8 |
1185 | add edi,8 |
1186 | add esi,8 |
1186 | add esi,8 |
1187 | 1187 | ||
1188 | push edi |
1188 | push edi |
1189 | movzx ecx,word[esi] |
1189 | movzx ecx,word[esi] |
1190 | inc esi |
1190 | inc esi |
1191 | bt ecx,7 |
1191 | bt ecx,7 |
1192 | jc uselocal |
1192 | jc uselocal |
1193 | push [globalColor] |
1193 | push [globalColor] |
1194 | mov edi,esi |
1194 | mov edi,esi |
1195 | jmp setPal |
1195 | jmp setPal |
1196 | uselocal: |
1196 | uselocal: |
1197 | call Gif_skipmap |
1197 | call Gif_skipmap |
1198 | push esi |
1198 | push esi |
1199 | setPal: |
1199 | setPal: |
1200 | movzx ecx,byte[edi] |
1200 | movzx ecx,byte[edi] |
1201 | inc ecx |
1201 | inc ecx |
1202 | mov [codesize],ecx |
1202 | mov [codesize],ecx |
1203 | dec ecx |
1203 | dec ecx |
1204 | pop [Palette] |
1204 | pop [Palette] |
1205 | lea esi,[edi+1] |
1205 | lea esi,[edi+1] |
1206 | mov edi,[table_ptr] |
1206 | mov edi,[table_ptr] |
1207 | xor eax,eax |
1207 | xor eax,eax |
1208 | cld |
1208 | cld |
1209 | lodsb ; eax - block_count |
1209 | lodsb ; eax - block_count |
1210 | add eax,esi |
1210 | add eax,esi |
1211 | mov [block_ofs],eax |
1211 | mov [block_ofs],eax |
1212 | mov [bit_count],8 |
1212 | mov [bit_count],8 |
1213 | mov eax,1 |
1213 | mov eax,1 |
1214 | shl eax,cl |
1214 | shl eax,cl |
1215 | mov [CC],eax |
1215 | mov [CC],eax |
1216 | inc eax |
1216 | inc eax |
1217 | mov [EOI],eax |
1217 | mov [EOI],eax |
1218 | lea ecx,[eax-1] |
1218 | lea ecx,[eax-1] |
1219 | mov eax, _null shl 16 |
1219 | mov eax, _null shl 16 |
1220 | filltable: |
1220 | filltable: |
1221 | stosd |
1221 | stosd |
1222 | inc eax |
1222 | inc eax |
1223 | loop filltable |
1223 | loop filltable |
1224 | pop edi |
1224 | pop edi |
1225 | mov [img_start],edi |
1225 | mov [img_start],edi |
1226 | reinit: |
1226 | reinit: |
1227 | mov edx,[EOI] |
1227 | mov edx,[EOI] |
1228 | inc edx |
1228 | inc edx |
1229 | push [codesize] |
1229 | push [codesize] |
1230 | pop [compsize] |
1230 | pop [compsize] |
1231 | call Gif_get_sym |
1231 | call Gif_get_sym |
1232 | cmp eax,[CC] |
1232 | cmp eax,[CC] |
1233 | je reinit |
1233 | je reinit |
1234 | call Gif_output |
1234 | call Gif_output |
1235 | cycle: |
1235 | cycle: |
1236 | movzx ebx,ax |
1236 | movzx ebx,ax |
1237 | call Gif_get_sym |
1237 | call Gif_get_sym |
1238 | cmp eax,edx |
1238 | cmp eax,edx |
1239 | jae notintable |
1239 | jae notintable |
1240 | cmp eax,[CC] |
1240 | cmp eax,[CC] |
1241 | je reinit |
1241 | je reinit |
1242 | cmp eax,[EOI] |
1242 | cmp eax,[EOI] |
1243 | je zend |
1243 | je zend |
1244 | call Gif_output |
1244 | call Gif_output |
1245 | zadd: |
1245 | zadd: |
1246 | push eax |
1246 | push eax |
1247 | mov eax,[table_ptr] |
1247 | mov eax,[table_ptr] |
1248 | mov [eax+edx*4],ebx |
1248 | mov [eax+edx*4],ebx |
1249 | pop eax |
1249 | pop eax |
1250 | cmp edx,0xFFF |
1250 | cmp edx,0xFFF |
1251 | jae cycle |
1251 | jae cycle |
1252 | inc edx |
1252 | inc edx |
1253 | bsr ebx,edx |
1253 | bsr ebx,edx |
1254 | cmp ebx,[compsize] |
1254 | cmp ebx,[compsize] |
1255 | jne noinc |
1255 | jne noinc |
1256 | inc [compsize] |
1256 | inc [compsize] |
1257 | noinc: |
1257 | noinc: |
1258 | jmp cycle |
1258 | jmp cycle |
1259 | notintable: |
1259 | notintable: |
1260 | push eax |
1260 | push eax |
1261 | mov eax,ebx |
1261 | mov eax,ebx |
1262 | call Gif_output |
1262 | call Gif_output |
1263 | push ebx |
1263 | push ebx |
1264 | movzx eax,bx |
1264 | movzx eax,bx |
1265 | call Gif_output |
1265 | call Gif_output |
1266 | pop ebx eax |
1266 | pop ebx eax |
1267 | jmp zadd |
1267 | jmp zadd |
1268 | er: |
1268 | er: |
1269 | pop edi |
1269 | pop edi |
1270 | jmp ex |
1270 | jmp ex |
1271 | zend: |
1271 | zend: |
1272 | ; mov eax,[.cur_info] ; skip offset to next frame |
1272 | ; mov eax,[.cur_info] ; skip offset to next frame |
1273 | ; mov [eax],edi |
1273 | ; mov [eax],edi |
1274 | mov [cur_info],edi |
1274 | mov [cur_info],edi |
1275 | add esi,2 |
1275 | add esi,2 |
1276 | xchg esi,edi |
1276 | xchg esi,edi |
1277 | nxt: |
1277 | nxt: |
1278 | cmp byte[edi],0 |
1278 | cmp byte[edi],0 |
1279 | jnz continue |
1279 | jnz continue |
1280 | inc edi |
1280 | inc edi |
1281 | jmp nxt |
1281 | jmp nxt |
1282 | continue: |
1282 | continue: |
1283 | ; cmp byte[edi],0x3b ;read next frame |
1283 | ; cmp byte[edi],0x3b ;read next frame |
1284 | ; jne nextblock |
1284 | ; jne nextblock |
1285 | xor eax,eax |
1285 | xor eax,eax |
1286 | stosd |
1286 | stosd |
1287 | mov ecx,[img_count] |
1287 | mov ecx,[img_count] |
1288 | ex: |
1288 | ex: |
1289 | pop edi esi |
1289 | pop edi esi |
1290 | ret |
1290 | ret |
1291 | 1291 | ||
1292 | Gif_skipmap: |
1292 | Gif_skipmap: |
1293 | ; in: ecx - image descriptor, esi - pointer to colormap |
1293 | ; in: ecx - image descriptor, esi - pointer to colormap |
1294 | ; out: edi - pointer to area after colormap |
1294 | ; out: edi - pointer to area after colormap |
1295 | 1295 | ||
1296 | and ecx,111b |
1296 | and ecx,111b |
1297 | inc ecx ; color map size |
1297 | inc ecx ; color map size |
1298 | mov ebx,1 |
1298 | mov ebx,1 |
1299 | shl ebx,cl |
1299 | shl ebx,cl |
1300 | lea ebx,[ebx*2+ebx] |
1300 | lea ebx,[ebx*2+ebx] |
1301 | lea edi,[esi+ebx] |
1301 | lea edi,[esi+ebx] |
1302 | ret |
1302 | ret |
1303 | 1303 | ||
1304 | Gif_get_sym: |
1304 | Gif_get_sym: |
1305 | mov ecx,[compsize] |
1305 | mov ecx,[compsize] |
1306 | push ecx |
1306 | push ecx |
1307 | xor eax,eax |
1307 | xor eax,eax |
1308 | shift: |
1308 | shift: |
1309 | ror byte[esi],1 |
1309 | ror byte[esi],1 |
1310 | rcr eax,1 |
1310 | rcr eax,1 |
1311 | dec [bit_count] |
1311 | dec [bit_count] |
1312 | jnz loop1 |
1312 | jnz loop1 |
1313 | inc esi |
1313 | inc esi |
1314 | cmp esi,[block_ofs] |
1314 | cmp esi,[block_ofs] |
1315 | jb noblock |
1315 | jb noblock |
1316 | push eax |
1316 | push eax |
1317 | xor eax,eax |
1317 | xor eax,eax |
1318 | lodsb |
1318 | lodsb |
1319 | test eax,eax |
1319 | test eax,eax |
1320 | jnz nextbl |
1320 | jnz nextbl |
1321 | mov eax,[EOI] |
1321 | mov eax,[EOI] |
1322 | sub esi,2 |
1322 | sub esi,2 |
1323 | add esp,8 |
1323 | add esp,8 |
1324 | jmp exx |
1324 | jmp exx |
1325 | nextbl: |
1325 | nextbl: |
1326 | add eax,esi |
1326 | add eax,esi |
1327 | mov [block_ofs],eax |
1327 | mov [block_ofs],eax |
1328 | pop eax |
1328 | pop eax |
1329 | noblock: |
1329 | noblock: |
1330 | mov [bit_count],8 |
1330 | mov [bit_count],8 |
1331 | loop1: |
1331 | loop1: |
1332 | loop shift |
1332 | loop shift |
1333 | pop ecx |
1333 | pop ecx |
1334 | rol eax,cl |
1334 | rol eax,cl |
1335 | exx: |
1335 | exx: |
1336 | xor ecx,ecx |
1336 | xor ecx,ecx |
1337 | ret |
1337 | ret |
1338 | 1338 | ||
1339 | Gif_output: |
1339 | Gif_output: |
1340 | push esi eax edx |
1340 | push esi eax edx |
1341 | mov edx,[table_ptr] |
1341 | mov edx,[table_ptr] |
1342 | next: |
1342 | next: |
1343 | push word[edx+eax*4] |
1343 | push word[edx+eax*4] |
1344 | mov ax,word[edx+eax*4+2] |
1344 | mov ax,word[edx+eax*4+2] |
1345 | inc ecx |
1345 | inc ecx |
1346 | cmp ax,_null |
1346 | cmp ax,_null |
1347 | jnz next |
1347 | jnz next |
1348 | shl ebx,16 |
1348 | shl ebx,16 |
1349 | mov bx,[esp] |
1349 | mov bx,[esp] |
1350 | loop2: |
1350 | loop2: |
1351 | pop ax |
1351 | pop ax |
1352 | 1352 | ||
1353 | lea esi,[eax+eax*2] |
1353 | lea esi,[eax+eax*2] |
1354 | add esi,[Palette] |
1354 | add esi,[Palette] |
1355 | 1355 | ||
1356 | if COLOR_ORDER eq MENUETOS |
1356 | if COLOR_ORDER eq MENUETOS |
1357 | mov esi,[esi] |
1357 | mov esi,[esi] |
1358 | bswap esi |
1358 | bswap esi |
1359 | shr esi,8 |
1359 | shr esi,8 |
1360 | mov [edi],esi |
1360 | mov [edi],esi |
1361 | add edi,3 |
1361 | add edi,3 |
1362 | else |
1362 | else |
1363 | movsw |
1363 | movsw |
1364 | movsb |
1364 | movsb |
1365 | end if |
1365 | end if |
1366 | 1366 | ||
1367 | loop loop2 |
1367 | loop loop2 |
1368 | pop edx eax esi |
1368 | pop edx eax esi |
1369 | ret |
1369 | ret |
1370 | 1370 | ||
1371 | globalColor dd 1 |
1371 | globalColor dd 1 |
1372 | img_count dd 1 |
1372 | img_count dd 1 |
1373 | cur_info dd 1 ; image table pointer |
1373 | cur_info dd 1 ; image table pointer |
1374 | img_start dd 1 |
1374 | img_start dd 1 |
1375 | codesize dd 1 |
1375 | codesize dd 1 |
1376 | compsize dd 1 |
1376 | compsize dd 1 |
1377 | bit_count dd 1 |
1377 | bit_count dd 1 |
1378 | CC dd 1 |
1378 | CC dd 1 |
1379 | EOI dd 1 |
1379 | EOI dd 1 |
1380 | Palette dd 1 |
1380 | Palette dd 1 |
1381 | block_ofs dd 1 |
1381 | block_ofs dd 1 |
1382 | table_ptr dd 1 |
1382 | table_ptr dd 1 |
1383 | 1383 | ||
1384 | gifmacend: |
1384 | gifmacend: |
1385 | } |
1385 | } |
1386 | - | ||
1387 | 1386 |