align 4
dtext:
        ; eax x & y
        ; ebx font ( 0xX0000000 ) & color ( 0x00RRGGBB )
        ; ecx start of text
        ; edx length
        ; edi 1 force

        test   ebx,0x10000000
        jnz    dtext2

        pushad

        mov    esi, edx
        and    esi, 0xff
        test   esi, esi    ; zero length ?
        jnz    @f
        popad
        ret
      @@:
        align 4
      .letnew:

        push   eax ecx edx
        movzx  ebx,ax
        shr    eax,16
        movzx  edx,byte [ecx]
        mov    ecx,[esp+3*4+32-16]
        call   drawletter
        pop    edx ecx eax

        add    eax,6*65536

        inc    ecx
        dec    edx
        jnz    .letnew

        popad
        ret

align 4
drawletter:
;eax - x
;ebx - y
;ecx - color
;edx - ascii code
    pushad
    call  [disable_mouse]
    mov   esi,9
    lea   ebp,[0x3F600+8*edx+edx]
.symloop:
    push  esi
    mov   dl,byte [ebp]
    mov   esi,8
.pixloop:
    test  dl,1
    jz    .nopix
    call  [putpixel]
.nopix:
    shr   dl,1    
    inc   eax
    dec   esi
    jnz   .pixloop
    sub   eax,8
    inc   ebx
    inc   ebp
    pop   esi
    dec   esi
    jnz   .symloop
    popad
    ret  
        


dtext2:

        ; eax x & y
        ; ebx color
        ; ecx start of text
        ; edx length
        ; edi 1 force

        pushad

        mov    esi,edx
        and    esi,0xff
        test   esi,esi    ; zero length ?
        jnz    @f
        popad
        ret
      @@:

      align 4
      letnew2:

        push   ecx
        push   edx
        movzx  ebx,ax
        shr    eax,16
        movzx  edx,byte [ecx]
        mov    ecx,[esp+2*4+32-16]
        call   drawletter2
        shl    eax,16
        add    eax,ebx
        pop    edx
        pop    ecx

        inc    ecx
        dec    edx
        jnz    letnew2

        popad
        ret

align 4
drawletter2:
;eax - x
;ebx - y
;ecx - color
;edx - symbol
;edi - force?
;result - eax=eax+sym_size
    pushad
    call  [disable_mouse]
    shl   edx,1
    mov   esi,9
    lea   ebp,[0x3EC00+4*edx+edx+1]
.symloop:
    push  esi
    mov   dl,byte [ebp]
    xor   esi,esi
.pixloop:
    test  dl,1
    jz    .nopix
    call  [putpixel]
.nopix:
    shr   dl,1
    inc   esi
    inc   eax
    cmp   esi,8
    jl    .pixloop
    sub   eax,8
    inc   ebx
    pop   esi
    inc   ebp
    dec   esi
    jnz   .symloop
    movzx edx,byte [ebp-10]
    add   [esp+32-4],edx
    popad
    ret