kolibrios-fun/contrib/other/font_conv/convert.asm

146 lines
2.2 KiB
NASM
Raw Normal View History

use16
org $100
;==============================================================================
macro fopen { ; DX = filename
mov ax,$3D00
int $21
}
macro fclose { ; BX = file handle
mov ah,$3E
int $21
}
macro fread { ; BX = file handle, CX = count, DX = buffer
mov ah,$3F
int $21
}
macro fwrite { ; BX = file handle, CX = count, DX = buffer
mov ah,$40
int $21
}
;==============================================================================
; /////////////// char.mt ///////////////
mov dx,_font1_in
fopen
jc exit
xchg ax,bx
mov cx,$5000
mov dx,_buf
fread
jc exit
fclose
;---------------------------------------
mov bx,_buf+8
xor si,si
mov di,_buf
mov cl,1
xor al,al
cld
@@:
cmp byte[bx+si],$20
je .sp
or al,cl
.sp:
inc si
shl cl,1
cmp cl,00100000b
jne @b
mov cl,1
stosb
xor al,al
add si,3
cmp si,8*9
jb @b
xor si,si
add bx,8*10
cmp di,_buf+$900
jb @b
;---------------------------------------
mov dx,_font1_out
xor cx,cx
mov ah,$3C ; create
int $21
jc exit
xchg ax,bx
mov cx,$900
mov dx,_buf
fwrite
jc exit
fclose
; /////////////// char2.mt ///////////////
mov dx,_font2_in
fopen
jc exit
xchg ax,bx
mov cx,$6500
mov dx,_buf
fread
jc exit
fclose
;---------------------------------------
mov bx,_buf+10
mov di,_buf
cld
newchar:
; width of character
mov al, 8
cmp byte [bx-4], ' '
jz @f
mov al, [bx-4]
sub al, '0'-1
@@:
stosb
; character itself
xor si, si
charloop:
xor al, al
mov cl, 1
@@:
cmp byte[bx+si],$20
je .sp2
or al,cl
.sp2:
inc si
shl cl,1
cmp cl,10000000b
jne @b
stosb
add si,3
cmp si,10*9
jb charloop
add bx,10*10
cmp di,_buf+$A00
jb newchar
;---------------------------------------
mov dx,_font2_out
xor cx,cx
mov ah,$3C ; create
int $21
jc exit
xchg ax,bx
mov cx,$A00
mov dx,_buf
fwrite
jc exit
fclose
exit:
ret
;==============================================================================
_font1_in db 'char.txt',0
_font1_out db 'char.mt',0
_font2_in db 'char2.txt',0
_font2_out db 'char2.mt',0
_buf: rb $6500