Subversion Repositories Kolibri OS

Rev

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,$