0,0 → 1,146 |
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 |