Rev 2318 | Rev 2321 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2318 | Rev 2320 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 2318 $ |
8 | $Revision: 2320 $ |
9 | 9 | ||
10 | ; // Alver 22.06.2008 // { |
10 | ; // Alver 22.06.2008 // { |
11 | align 4 |
11 | align 4 |
Line 168... | Line 168... | ||
168 | jc .exit |
168 | jc .exit |
169 | xor ch, ch |
169 | xor ch, ch |
170 | mov edx, [ebp + 4] ; chartable addr |
170 | mov edx, [ebp + 4] ; chartable addr |
171 | mov cx, word[edx + ecx*2] ; tick info |
171 | mov cx, word[edx + ecx*2] ; tick info |
172 | mov edx, ecx |
172 | mov edx, ecx |
173 | and ecx, 15 ; cl = number of ticks |
173 | and ecx, 7 ; cl = number of ticks |
174 | jz .blank |
174 | jz .blank |
175 | shr edx, 4 ; offset in the chartable |
175 | shr edx, 4 ; offset in the chartable |
176 | add edx, [sdsh_data.chars] ; edx -> the char's ticklist |
176 | add edx, [sdsh_data.chars] ; edx -> the char's ticklist |
177 | .next_tick: |
177 | .next_tick: |
178 | call parse_tick |
178 | call parse_tick |
Line 189... | Line 189... | ||
189 | ; eax = left side X |
189 | ; eax = left side X |
190 | ; ebx = bottom Y |
190 | ; ebx = bottom Y |
191 | ; edx ->tickinfo |
191 | ; edx ->tickinfo |
192 | ; edi = color 0x0RRGGBB |
192 | ; edi = color 0x0RRGGBB |
193 | ; ebp = font's header |
193 | ; ebp = font's header |
194 | popad |
194 | pushad |
195 | xor ecx, ecx |
195 | xor ecx, ecx |
196 | mov dx, word[edx] |
196 | mov dx, word[edx] |
197 | mov cl, dl |
197 | mov cl, dl |
198 | test dl, 0xE0 ; ticks #32..255 |
198 | test dl, 0xE0 ; ticks #32..255 |
199 | jz .lntick.short |
199 | jz .lntick.short |
200 | cmp dl, 0xE0 |
200 | cmp dl, 0xE0 |
201 | jae .lntick.long |
201 | jae .lntick.long |
202 | cmp dl, 0xC0 |
202 | cmp dl, 0xC0 |
203 | jae .cstick |
203 | jae .cstick |
204 | .gptick: |
204 | .gptick: |
- | 205 | push edx |
|
- | 206 | mov cl, dh |
|
- | 207 | shr cl, 3 ; orig.# |
|
- | 208 | mov edx, [ebp+8] ; orig. table |
|
- | 209 | mov ch, byte[edx+ecx] ; orig. coords |
|
- | 210 | pop edx |
|
- | 211 | mov cl, dh |
|
205 | mov cl, dh ; three rotation bits |
212 | and cl, 7 ; three rotation bits |
- | 213 | and edx, 0xFF |
|
206 | and cl, 7 |
214 | sub dl, 32 |
- | 215 | test dl, (sdsh_data.v5-sdsh_data.v1) |
|
- | 216 | jae .gptick.2 |
|
- | 217 | .gptick.1: |
|
- | 218 | mov esi, sdsh_data.tick_table |
|
- | 219 | add esi, edx ; the tickfield |
|
- | 220 | inc dh |
|
- | 221 | sub dl, 2 ; .v1 |
|
- | 222 | jb .gptick.done |
|
- | 223 | inc dh |
|
- | 224 | sub dl, 8 ; .v2 |
|
- | 225 | jb .gptick.done |
|
- | 226 | inc dh |
|
- | 227 | sub dl, 8 ; .v3 |
|
- | 228 | jb .gptick.done |
|
- | 229 | inc dh |
|
- | 230 | jmp .gptick.done ; .v4 |
|
- | 231 | .gptick.2: |
|
- | 232 | sub dl, (sdsh_data.v5-sdsh_data.v1) |
|
- | 233 | jae .gptick.3 |
|
- | 234 | mov esi, sdsh_data.v5 |
|
- | 235 | add esi, edx*2 ; 2-byte tickfield |
|
- | 236 | mov dh, 5 |
|
- | 237 | sub dl, 8 ; .v5 |
|
- | 238 | jb .gptick.done |
|
- | 239 | inc dh |
|
- | 240 | sub dl, 8 ; .v6 |
|
- | 241 | jb .gptick.done |
|
- | 242 | inc dh |
|
- | 243 | sub dl, 8 ; .v7 |
|
- | 244 | jb .gptick.done |
|
- | 245 | inc dh |
|
- | 246 | jmp .gptick.done ; .v8 |
|
- | 247 | .gptick.3: |
|
- | 248 | sub dl, (sdsh_data.v9-sdsh_data.v5) |
|
- | 249 | jae .gptick.4 |
|
- | 250 | mov esi, sdsh_data.v9 |
|
- | 251 | lea esi,[esi+edx*2+edx] ; 3-byte tickfield |
|
207 | mov dh, ... - origin |
252 | mov dh, 9 |
208 | mov dl, .... - num_vertices!! |
253 | sub dl, 4 ; .v9 |
- | 254 | jb .gptick.done |
|
- | 255 | inc dh |
|
- | 256 | sub dl, 4 ; .v10 |
|
- | 257 | jb .gptick.done |
|
- | 258 | inc dh |
|
- | 259 | sub dl, 4 ; .v11 |
|
- | 260 | jb .gptick.done |
|
- | 261 | inc dh |
|
- | 262 | jmp .gptick.done ; .v12 |
|
- | 263 | .gptick.4: |
|
- | 264 | sub dl, (sdsh_data.v13-sdsh_data.v9) |
|
- | 265 | jae .gptick.5 |
|
209 | mov esi, ... - tickfield?? |
266 | mov esi, sdsh_data.v13 |
- | 267 | lea esi,[esi+edx*2+edx] ; 3-byte tickfield |
|
- | 268 | mov dh, 13 |
|
- | 269 | sub dl, 4 ; .v13 |
|
- | 270 | jb .gptick.done |
|
- | 271 | inc dh |
|
- | 272 | sub dl, 4 ; .v14 |
|
- | 273 | jb .gptick.done |
|
- | 274 | inc dh |
|
- | 275 | sub dl, 4 ; .v15 |
|
- | 276 | jb .gptick.done |
|
- | 277 | inc dh |
|
- | 278 | jmp .gptick.done ; .v16 |
|
- | 279 | .gptick.unknown: |
|
- | 280 | jmp .exit |
|
- | 281 | .gptick.done: |
|
- | 282 | mov dl, dh ; dl = numvert |
|
- | 283 | mov dh, ch ; dh = orig.xy |
|
- | 284 | call draw_tick |
|
210 | jmp .draw |
285 | jmp .exit |
Line 211... | Line 286... | ||
211 | 286 | ||
212 | .cstick: |
287 | .cstick: |
213 | and cl, 4 |
288 | and cl, 4 |
214 | shr cl, 2 ; only one rotational bit |
289 | shr cl, 2 ; only one rotational bit |
Line 239... | Line 314... | ||
239 | test dl, 1 |
314 | test dl, 1 |
240 | jnz .ritick.1 |
315 | jnz .ritick.1 |
241 | .ritick.0: |
316 | .ritick.0: |
242 | mov cl, dh ; y |
317 | mov cl, dh ; y |
243 | and cl, 0x0F |
318 | and cl, 0x0F |
244 | and ebx, ecx |
319 | sub ebx, ecx |
245 | mov cl, dh |
320 | mov cl, dh |
246 | shr cl, 4 ; x |
321 | shr cl, 4 ; x |
247 | and eax, ecx |
322 | add eax, ecx |
248 | call ch_putpixel |
323 | call ch_putpixel |
249 | jmp .exit |
324 | jmp .exit |
250 | .ritick.1: |
325 | .ritick.1: |
251 | mov esi, sdsh_data.ri1 ; 8pix-ring |
326 | mov esi, sdsh_data.ri1 ; 8pix-ring |
252 | mov dl, 4 |
327 | mov dl, 4 |
- | 328 | xor cl, cl |
|
253 | jmp .draw |
329 | jmp .draw |
Line 254... | Line 330... | ||
254 | 330 | ||
255 | .lntick.short: |
331 | .lntick.short: |
256 | test dl, 0x06 ; ticks #0, 1 are reserved for |
332 | test dl, 0x06 ; ticks #0, 1 are reserved for |
Line 264... | Line 340... | ||
264 | sub dl, 2 ; num_vertice = num_points - 2 |
340 | sub dl, 2 ; num_vertice = num_points - 2 |
265 | and cl, 0x18 ; two rotation bits |
341 | and cl, 0x18 ; two rotation bits |
266 | shr cl, 3 |
342 | shr cl, 3 |
267 | mov esi, sdsh_data.blank |
343 | mov esi, sdsh_data.blank |
268 | .draw: |
344 | .draw: |
- | 345 | ; cl = rot; dl = numvert; dh = orig.xy |
|
269 | push ecx |
346 | push ecx |
270 | mov cl, dh ; y |
347 | mov cl, dh ; y |
271 | and cl, 0x0F |
348 | and cl, 0x0F |
272 | and ebx, ecx |
349 | sub ebx, ecx |
273 | mov cl, dh |
350 | mov cl, dh |
274 | shr cl, 4 ; x |
351 | shr cl, 4 ; x |
275 | and eax, ecx |
352 | add eax, ecx |
276 | pop ecx |
353 | pop ecx |
277 | call draw_tick |
354 | call draw_tick |
- | 355 | .gptick.5: |
|
278 | .exit: |
356 | .exit: |
279 | popad |
357 | popad |
280 | ret |
358 | ret |
Line 281... | Line -... | ||
281 | - | ||
282 | - | ||
283 | - | ||
284 | 359 | ||
285 | 360 | ||
286 | 361 | ||
287 | draw_tick: |
362 | draw_tick: |
288 | ; eax = x-origin |
363 | ; eax = x-origin |
289 | ; ebx = y-origin |
364 | ; ebx = y-origin |
290 | ; edi = 0x0RRGGBB |
365 | ; edi = 0x0RRGGBB |
Line 291... | Line 366... | ||
291 | ; cl = direction (0..7) |
366 | ; cl = direction (0..7) |
- | 367 | ; dl = number of vertices (dl) |
|
292 | ; ch = number of vertices |
368 | ; esi -> tick bitfield |
293 | ; edx -> tick bitfield |
369 | |
294 | 370 | pushad |
|
295 | pushad |
371 | inc dl ; -- that's to count down to 0 |
296 | call putchpixel ; point 0 |
372 | call ch_putpixel ; the point of origin |
- | 373 | and ecx, 7 |
|
- | 374 | call [.moves + ecx*4] ; basic vector |
|
297 | xor ecx, ecx |
375 | call ch_putpixel |
298 | mov edx, ecx |
376 | dec dl |
299 | mov dl, byte[esi] |
377 | jz .done ; 2pix lines only |
300 | and dl, 7 |
378 | mov esi, dword [esi] ; max 16 vertice bitfield limit |
301 | mov cl, 3 |
379 | xchg esi, edx |
302 | .move_and_draw: |
- | |
303 | xor dh, dh |
380 | .move_and_draw: |
304 | call [.moves + edx*4] |
381 | mov ch, dl |
305 | call putchpixel |
382 | and ch, 3 |
- | 383 | jz .moved |
|
306 | 384 | btc ch, 0 |
|
- | 385 | jz .2 |
|
307 | shl edx, 5 ; prepare to move the old value to dh |
386 | .1: |
308 | bt [esi], ecx |
387 | dec cl ; right turns (1 and 3) |
- | 388 | and cl, 7 |
|
- | 389 | @@: btc ch, 1 ; straight angle (3) ? |
|
309 | 390 | jc .1 |
|
- | 391 | jmp .moved |
|
310 | rol edx, 1 |
392 | .2: |
311 | inc ecx |
393 | inc cl ; left turn (2) |
312 | bt [esi], ecx |
394 | and cl, 7 |
313 | rol edx, 1 |
395 | btc ch, 1 ; just to zero ah |
314 | inc ecx |
396 | .moved: |
315 | bt [esi], ecx |
397 | call [.moves + ecx*4] ; go new way |
316 | rol edx, 1 |
398 | call ch_putpixel |
317 | inc ecx |
399 | shr edx, 2 |
318 | xor dh, dl |
400 | dec esi |
Line 319... | Line 401... | ||
319 | jnz .move_and_draw ; any step-back means the end |
401 | jnz .move_and_draw |
320 | .done: |
402 | .done: |
321 | popad |
403 | popad |
322 | ret |
404 | ret |
323 | 405 | ||
324 | .move000: |
406 | .move000: |
325 | inc eax |
407 | inc eax |
326 | ret |
408 | ret |
327 | .move001: |
409 | .move001: |
328 | inc eax |
410 | inc eax |
329 | inc ebx |
411 | dec ebx |
330 | ret |
412 | ret |
331 | .move010: |
413 | .move010: |
332 | inc ebx |
414 | dec ebx |
333 | ret |
415 | ret |
334 | .move011: |
416 | .move011: |
335 | dec eax |
417 | dec eax |
336 | inc ebx |
418 | dec ebx |
337 | ret |
419 | ret |
338 | .move111: |
420 | .move100: |
339 | dec eax |
421 | dec eax |
340 | ret |
422 | ret |
341 | .move110: |
423 | .move101: |
342 | dec eax |
424 | dec eax |
343 | dec ebx |
425 | inc ebx |
344 | ret |
- | |
345 | .move101: |
426 | ret |
- | 427 | .move110: |
|
346 | dec ebx |
428 | inc ebx |
Line 347... | Line 429... | ||
347 | ret |
429 | ret |
348 | .move100: |
430 | .move111: |
Line 405... | Line 487... | ||
405 | imul edx, [BytesPerScanLine] |
487 | imul edx, [BytesPerScanLine] |
406 | lea edx, [edx+eax*4] |
488 | lea edx, [edx+eax*4] |
407 | mov [LFB_BASE+edx], edi |
489 | mov [LFB_BASE+edx], edi |
408 | pop edx |
490 | pop edx |
409 | ret |
491 | ret |
410 | - | ||
411 | ;) |
492 | ;) |
Line 412... | Line -... | ||
412 | - | ||
413 | - | ||
414 | - | ||
415 | 493 | ||
416 | ;diff16 "font code end ",0,$ |
494 | ;diff16 "font code end ",0,$ |