Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. use16
  2. org $100
  3.  
  4. ;==============================================================================
  5.  
  6. macro fopen { ; DX = filename
  7.   mov   ax,$3D00
  8.   int   $21
  9. }
  10.  
  11. macro fclose { ; BX = file handle
  12.   mov   ah,$3E
  13.   int   $21
  14. }
  15.  
  16. macro fread { ; BX = file handle, CX = count, DX = buffer
  17.   mov   ah,$3F
  18.   int   $21
  19. }
  20.  
  21. macro fwrite { ; BX = file handle, CX = count, DX = buffer
  22.   mov   ah,$40
  23.   int   $21
  24. }
  25.  
  26. ;==============================================================================
  27.  
  28. ; /////////////// char.mt ///////////////
  29.  
  30.         mov     dx,_font1_in
  31.                 fopen
  32.         jc      exit
  33.         xchg    ax,bx
  34.         mov     cx,$5000
  35.         mov     dx,_buf
  36.                 fread
  37.         jc      exit
  38.                 fclose
  39. ;---------------------------------------
  40.         mov     bx,_buf+8
  41.         xor     si,si
  42.         mov     di,_buf
  43.         mov     cl,1
  44.         xor     al,al
  45.         cld
  46.     @@:
  47.         cmp     byte[bx+si],$20
  48.         je      .sp
  49.         or      al,cl
  50.     .sp:
  51.         inc     si
  52.         shl     cl,1
  53.         cmp     cl,00100000b
  54.         jne     @b
  55.         mov     cl,1
  56.         stosb
  57.         xor     al,al
  58.         add     si,3
  59.         cmp     si,8*9
  60.         jb      @b
  61.         xor     si,si
  62.         add     bx,8*10
  63.         cmp     di,_buf+$900
  64.         jb      @b
  65. ;---------------------------------------
  66.         mov     dx,_font1_out
  67.         xor     cx,cx
  68.         mov     ah,$3C ; create
  69.         int     $21
  70.         jc      exit
  71.         xchg    ax,bx
  72.         mov     cx,$900
  73.         mov     dx,_buf
  74.                 fwrite
  75.         jc      exit
  76.                 fclose
  77.  
  78. ; /////////////// char2.mt ///////////////
  79.  
  80.         mov     dx,_font2_in
  81.                 fopen
  82.         jc      exit
  83.         xchg    ax,bx
  84.         mov     cx,$6500
  85.         mov     dx,_buf
  86.                 fread
  87.         jc      exit
  88.                 fclose
  89. ;---------------------------------------
  90.         mov     bx,_buf+10
  91.         mov     di,_buf
  92.         cld
  93. newchar:
  94. ; width of character
  95.         mov     al, 8
  96.         cmp     byte [bx-4], ' '
  97.         jz      @f
  98.         mov     al, [bx-4]
  99.         sub     al, '0'-1
  100.     @@:
  101.         stosb
  102. ; character itself
  103.         xor     si, si
  104. charloop:
  105.         xor     al, al
  106.         mov     cl, 1
  107.     @@:
  108.         cmp     byte[bx+si],$20
  109.         je      .sp2
  110.         or      al,cl
  111.     .sp2:
  112.         inc     si
  113.         shl     cl,1
  114.         cmp     cl,10000000b
  115.         jne     @b
  116.         stosb
  117.         add     si,3
  118.         cmp     si,10*9
  119.         jb      charloop
  120.         add     bx,10*10
  121.         cmp     di,_buf+$A00
  122.         jb      newchar
  123. ;---------------------------------------
  124.         mov     dx,_font2_out
  125.         xor     cx,cx
  126.         mov     ah,$3C ; create
  127.         int     $21
  128.         jc      exit
  129.         xchg    ax,bx
  130.         mov     cx,$A00
  131.         mov     dx,_buf
  132.                 fwrite
  133.         jc      exit
  134.                 fclose
  135.  
  136.   exit:
  137.         ret
  138.  
  139. ;==============================================================================
  140.  
  141. _font1_in db 'char.txt',0
  142. _font1_out db 'char.mt',0
  143. _font2_in db 'char2.txt',0
  144. _font2_out db 'char2.mt',0
  145.  
  146. _buf: rb $6500