forked from KolibriOS/kolibrios
New font engine in progress
git-svn-id: svn://kolibrios.org@2461 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
91f85b6476
commit
30883bfc24
@ -47,7 +47,7 @@ syscall_entry:
|
|||||||
; sti
|
; sti
|
||||||
push ecx
|
push ecx
|
||||||
xor ecx, ecx
|
xor ecx, ecx
|
||||||
mov cl, al
|
mov cl, al ; keep subfn# in ah
|
||||||
and cl, 7
|
and cl, 7
|
||||||
call dword [servetable3 + ecx * 4]
|
call dword [servetable3 + ecx * 4]
|
||||||
pop ecx
|
pop ecx
|
||||||
|
@ -141,6 +141,8 @@ diff10 "old font code size",dtext,$
|
|||||||
align 8
|
align 8
|
||||||
sdsh_data:
|
sdsh_data:
|
||||||
|
|
||||||
|
diff16 "sdsh_data : ",0,$
|
||||||
|
|
||||||
include 'fonts/sd_data.asm'
|
include 'fonts/sd_data.asm'
|
||||||
|
|
||||||
sdsh_code:
|
sdsh_code:
|
||||||
@ -154,6 +156,8 @@ sdsh_code:
|
|||||||
; then dl = single char to write
|
; then dl = single char to write
|
||||||
; else edx= pointer to asciiz-string
|
; else edx= pointer to asciiz-string
|
||||||
|
|
||||||
|
diff16 "draw_char : ",0,$
|
||||||
|
|
||||||
draw_char:
|
draw_char:
|
||||||
; font test
|
; font test
|
||||||
; bl=y; bh=x
|
; bl=y; bh=x
|
||||||
@ -164,6 +168,7 @@ draw_char:
|
|||||||
xor edi, edi
|
xor edi, edi
|
||||||
mov ebp, edi
|
mov ebp, edi
|
||||||
|
|
||||||
|
|
||||||
sdsh_draw_char:
|
sdsh_draw_char:
|
||||||
; eax = left side X
|
; eax = left side X
|
||||||
; ebx = bottom Y
|
; ebx = bottom Y
|
||||||
@ -175,21 +180,20 @@ sdsh_draw_char:
|
|||||||
push ebp
|
push ebp
|
||||||
shl ebp, 4
|
shl ebp, 4
|
||||||
add ebp, sdsh_data.info
|
add ebp, sdsh_data.info
|
||||||
call ch_checkscreen
|
; call ch_checkscreen
|
||||||
jb .exit
|
; jb .exit
|
||||||
call ch_checkwin
|
; call ch_checkwin
|
||||||
jc .exit
|
; jc .exit
|
||||||
xor ch, ch
|
|
||||||
mov edx, [ebp + 4] ; chartable addr
|
mov edx, [ebp + 4] ; chartable addr
|
||||||
mov cx, word[edx + ecx*2] ; tick info
|
mov cx, word[edx + ecx*2] ; tick info
|
||||||
mov edx, ecx
|
mov edx, ecx
|
||||||
and ecx, 7 ; cl = number of ticks
|
and ecx, 7 ; cl = number of ticks
|
||||||
jz .blank
|
jz .blank
|
||||||
shr edx, 4 ; offset in the chartable
|
shr edx, 4 ; offset in the chartable
|
||||||
add edx, [sdsh_data.chars] ; edx -> the char's ticklist
|
add edx, sdsh_data.chars ; edx -> the char's ticklist
|
||||||
.next_tick:
|
.next_tick:
|
||||||
call parse_tick
|
call parse_tick
|
||||||
add edx, 4
|
add edx, 2
|
||||||
dec cl
|
dec cl
|
||||||
jnz .next_tick
|
jnz .next_tick
|
||||||
.blank:
|
.blank:
|
||||||
@ -201,6 +205,7 @@ sdsh_draw_char:
|
|||||||
|
|
||||||
|
|
||||||
parse_tick:
|
parse_tick:
|
||||||
|
diff16 "parse_tick : ",0,$
|
||||||
; eax = left side X
|
; eax = left side X
|
||||||
; ebx = bottom Y
|
; ebx = bottom Y
|
||||||
; edx ->tickinfo
|
; edx ->tickinfo
|
||||||
@ -330,7 +335,7 @@ parse_tick:
|
|||||||
add dl, 8
|
add dl, 8
|
||||||
.lntick.both:
|
.lntick.both:
|
||||||
sub dl, 2 ; num_vertice = num_points - 2
|
sub dl, 2 ; num_vertice = num_points - 2
|
||||||
and cl, 0x18 ; two rotation bits
|
and cl, 0x18 ; two (lower) rotation bits
|
||||||
shr cl, 3
|
shr cl, 3
|
||||||
mov esi, sdsh_data.blank
|
mov esi, sdsh_data.blank
|
||||||
.draw:
|
.draw:
|
||||||
@ -350,86 +355,101 @@ parse_tick:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
diff16 "draw_tick : ",0,$
|
||||||
|
|
||||||
draw_tick:
|
draw_tick:
|
||||||
; eax = x-origin
|
; eax = x-origin
|
||||||
; ebx = y-origin
|
; ebx = y-origin
|
||||||
; edi = 0x0RRGGBB
|
; edi = 0x0RRGGBB
|
||||||
; cl = direction (0..7)
|
; cl = direction (0..7)
|
||||||
; dl = number of vertices (dl)
|
; dl = number of vertice (dl)
|
||||||
; esi -> tick bitfield
|
; esi -> tick bitfield
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
inc dl ; -- that's to count down to 0
|
|
||||||
call ch_putpixel ; the point of origin
|
call ch_putpixel ; the point of origin
|
||||||
and ecx, 7
|
and ecx, 7
|
||||||
call [.moves + ecx*4] ; basic vector
|
lea ebp, [.move000+ ecx*4]
|
||||||
|
call ebp ; basic vector
|
||||||
call ch_putpixel
|
call ch_putpixel
|
||||||
dec dl
|
and edx, 15
|
||||||
jz .done ; 2pix lines only
|
jz .done ; no vertex (2pix line)
|
||||||
mov esi, dword [esi] ; max 16 vertice bitfield limit
|
mov esi, dword [esi] ; 15 vertice will easily fit to 1dw
|
||||||
xchg esi, edx
|
xchg esi, edx
|
||||||
.move_and_draw:
|
.move_and_draw:
|
||||||
mov ch, dl
|
mov ch, dl
|
||||||
and ch, 3
|
and ch, 3
|
||||||
jz .moved
|
jz .moved
|
||||||
btc ecx, 8
|
dec ch
|
||||||
|
jz .1
|
||||||
|
dec ch
|
||||||
jz .2
|
jz .2
|
||||||
|
.3:
|
||||||
|
dec cl
|
||||||
.1:
|
.1:
|
||||||
dec cl ; right turns (1 and 3)
|
dec cl
|
||||||
and cl, 7
|
jmp .wipe_it
|
||||||
@@: btc ecx, 9 ; straight angle (3) ?
|
|
||||||
jc .1
|
|
||||||
jmp .moved
|
|
||||||
.2:
|
.2:
|
||||||
inc cl ; left turn (2)
|
inc cl
|
||||||
and cl, 7
|
.wipe_it:
|
||||||
btc ecx, 9 ; just to zero ah
|
and ecx, 7
|
||||||
.moved:
|
.moved:
|
||||||
call [.moves + ecx*4] ; go new way
|
diff16 "moved : ",0,$
|
||||||
|
lea ebp, [.move000+ ecx*4]
|
||||||
|
call ebp ; go new way
|
||||||
call ch_putpixel
|
call ch_putpixel
|
||||||
shr edx, 2
|
shr edx, 2
|
||||||
dec esi
|
dec esi
|
||||||
jnz .move_and_draw
|
jnz .move_and_draw
|
||||||
|
diff16 "done : ",0,$
|
||||||
.done:
|
.done:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; WARNING! The order matters! ------
|
||||||
|
align 4
|
||||||
|
diff16 "move000 : ",0,$
|
||||||
.move000:
|
.move000:
|
||||||
inc eax
|
inc eax
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
.move001:
|
.move001:
|
||||||
inc eax
|
inc eax
|
||||||
dec ebx
|
dec ebx
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
.move010:
|
.move010:
|
||||||
dec ebx
|
dec ebx
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
.move011:
|
.move011:
|
||||||
dec eax
|
dec eax
|
||||||
dec ebx
|
dec ebx
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
.move100:
|
.move100:
|
||||||
dec eax
|
dec eax
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
.move101:
|
.move101:
|
||||||
dec eax
|
dec eax
|
||||||
inc ebx
|
inc ebx
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
.move110:
|
.move110:
|
||||||
inc ebx
|
inc ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
diff10 "move111-move000 (must be 28!) : ",.move000,$
|
||||||
.move111:
|
.move111:
|
||||||
inc eax
|
inc eax
|
||||||
inc ebx
|
inc ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
;) ---------------
|
||||||
.moves dd .move000, .move001, .move010, .move011, .move100, .move101, .move110, .move111
|
|
||||||
|
|
||||||
;)
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
diff16 "checkscreen : ",0,$
|
||||||
ch_checkscreen:
|
ch_checkscreen:
|
||||||
cmp [Screen_Max_X], eax
|
cmp [Screen_Max_X], eax
|
||||||
jb .getout
|
jb .getout
|
||||||
@ -438,6 +458,7 @@ ch_checkscreen:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
diff16 "checkwin : ",0,$
|
||||||
ch_checkwin:
|
ch_checkwin:
|
||||||
; eax = x coordinate
|
; eax = x coordinate
|
||||||
; ebx = y coordinate
|
; ebx = y coordinate
|
||||||
@ -472,6 +493,7 @@ ch_checkwin:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
diff16 "ch_putpix : ",0,$
|
||||||
ch_putpixel:
|
ch_putpixel:
|
||||||
; eax = x coordinate
|
; eax = x coordinate
|
||||||
; ebx = y coordinate
|
; ebx = y coordinate
|
||||||
|
@ -99,6 +99,9 @@ align 4
|
|||||||
db 0x30 ; 30
|
db 0x30 ; 30
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
|
diff16 "sdsh_data.tick_table: ",0,$
|
||||||
|
|
||||||
.tick_table:
|
.tick_table:
|
||||||
.v1:
|
.v1:
|
||||||
; 32 33
|
; 32 33
|
||||||
@ -210,6 +213,9 @@ align 4
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
.table0:
|
.table0:
|
||||||
|
|
||||||
|
diff16 "sdsh_data.table0: ",0,$
|
||||||
|
|
||||||
times 33 dw 0
|
times 33 dw 0
|
||||||
dw (.ch0_33 -.chars)*16 + 2 ; #33 !
|
dw (.ch0_33 -.chars)*16 + 2 ; #33 !
|
||||||
dw (.ch0_34 -.chars)*16 + 2 ; #34 "
|
dw (.ch0_34 -.chars)*16 + 2 ; #34 "
|
||||||
@ -422,6 +428,9 @@ diff10 "check font0 table size: ", .table0, $
|
|||||||
|
|
||||||
; ----------------------------------------------------
|
; ----------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
|
diff16 "sdsh_data.chars: ",0,$
|
||||||
|
|
||||||
.chars:
|
.chars:
|
||||||
dw 0
|
dw 0
|
||||||
.ch0_33: ; !
|
.ch0_33: ; !
|
||||||
|
Loading…
Reference in New Issue
Block a user