home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / DICT / DFKC / ZWH / CHCS / FRAM.ASM < prev    next >
Encoding:
Assembly Source File  |  1998-01-12  |  4.1 KB  |  218 lines

  1. ;
  2. ;               fram.asm
  3. ;
  4. .286
  5. code            segment
  6.         org     100h
  7.         assume  cs:code, ds:code
  8. ;
  9. begin:          jmp     start
  10. ;
  11. Ver             db      'CHCS 1.0'
  12. ;
  13. Psp             dw      ?
  14. Env             dw      ?
  15.         db      0
  16. ;
  17. Int16           proc    far
  18.         sti
  19.         cmp     ah, 80h
  20.         je      iCont0
  21.         cmp     ah, 81h
  22.         je      iQuit
  23. toOld:          jmp     dword ptr cs:Old16
  24. ;
  25. iQuit:          push    es
  26.         push    dx
  27.         push    cx
  28.         xor     dx, dx
  29.         mov     es, dx
  30.         mov     dx, word ptr cs:Old16
  31.         mov     cx, word ptr cs:Old16+2
  32.         cli
  33.         mov     es:[58h], dx
  34.         mov     es:[5ah], cx
  35.         sti
  36.         mov     ah, 49h
  37.         mov     es, cs:Psp
  38.         int     21h
  39.         pop     cx
  40.         pop     dx
  41.         pop     es
  42.         iret
  43. ;
  44. toRet0:         jmp     Ret0
  45. ;
  46. iCont0:         cmp     cl, 0
  47.         jne     toOld
  48. ;
  49.         pusha
  50.         push    ds
  51.         and     dx, 7f7fh
  52.         sub     dx, 2121h
  53.         mov     al, 94
  54.         mul     dh
  55.         xor     dh, dh
  56.         add     ax, dx               ; ax = c1*94 + c2
  57.         shl     ax, 1
  58.         lea     si, cs:FontStart
  59.         mov     di, bx
  60.         mov     bx, cs
  61.         add     ax, bx
  62.         mov     ds, ax
  63.         mov     cx, 10h
  64.         cld
  65.         rep     movsw
  66. Ret0:           pop     ds
  67.         popa
  68.         iret
  69. Int16           endp
  70. ;
  71. ;
  72. UseF16          db      0
  73. ;
  74. Old16           dd      ?
  75. ;
  76. FHandle         dw      0
  77. ;
  78. LoadFont:       mov     FHandle, ax
  79.         lea     dx, FontStart
  80.         mov     cx, 8
  81.         push    ds
  82. ;
  83. ldLoop:         push    cx
  84.         push    dx
  85.         mov     ah, 3fh              ; Read Font
  86.         mov     bx, cs:FHandle
  87.         mov     cx, 8000h
  88.         int     21h
  89.         pop     dx
  90.         mov     ax, ds
  91.         add     ax, 0800h
  92.         mov     ds, ax
  93.         pop     cx
  94.         loop    ldLoop
  95. ;
  96.         pop     ds
  97.         mov     ah, 3eh
  98.         mov     bx, FHandle
  99.         int     21h
  100. ;
  101.         mov     ax, 2516h
  102.         lea     dx, Int16
  103.         int     21h                    ; Set Interrupt
  104.         mov     ah, 49h
  105.         mov     es, Env
  106.         int     21h                    ; Free Environment
  107. ;
  108.         lea     dx, FontStart
  109.         mov     cl, 4
  110.         shr     dx, cl
  111.         inc     dx
  112.         add     dx, 4000h              ; Font =  256 KB
  113.         mov     ax, 3100h
  114.         int     21h
  115. ;
  116. PmtErr:         mov     ah, 9
  117.         int     21h
  118.         mov     ax, 4c01h
  119.         int     21h
  120. ;
  121.         db      100h dup(0)
  122. rStack          label   byte
  123. ;
  124. FontStart       label   byte
  125. ;
  126. NoPage          db      'fram: No enough memory !', 0dh, 0ah, '$'
  127. FnErr           db      'fram: gbj16 open error !', 0dh, 0ah, '$'
  128. ;
  129. Mark            db      13, 10, 9, 'CHCS'
  130. ;
  131. ReInst          db      'fram: System font has been loaded !', 0dh, 0ah, '$'
  132. ;
  133. NameOff         dw      ?
  134. Path            db      80 dup(?)
  135. Font            db      'gbj16', 0
  136. ;
  137. ;
  138. start:          lea     ax, rStack
  139.         mov     sp, ax
  140.         mov     ax, ds
  141.         mov     Psp, ax
  142.         mov     ax, ds:[2ch]
  143.         mov     Env, ax
  144.         xor     si, si
  145.         mov     ds, ax
  146. iLoop0:         cmp     word ptr [si], 0
  147.         je      iEnd0
  148.         inc     si
  149.         jmp     iLoop0
  150. iEnd0:          add     si, +4
  151.         lea     di, Path
  152. iLoop1:         lodsb
  153.         stosb
  154.         or      al, al
  155.         jz      iEnd1
  156.         cmp     al, '\'
  157.         jne     iLoop1
  158.         mov     es:NameOff, di
  159.         jmp     iLoop1
  160. iEnd1:          mov     ax, cs
  161.         mov     ds, ax
  162. ;
  163.         mov     bx, 81h
  164. fLoop0:         mov     al, cs:[bx]
  165.         inc     bx
  166.         cmp     al, ' '
  167.         je      fLoop0
  168.         cmp     al, 09h
  169.         je      fLoop0
  170.         cmp     al, 0dh
  171.         je      fEnd0
  172.         cmp     al, '/'
  173.         jne     fEnd0
  174.         mov     al, cs:[bx]
  175.         or      al, 20h
  176.         cmp     al, 'f'
  177.         jne     fEnd0
  178.         mov     UseF16, 1
  179.         mov     byte ptr Font+2, al
  180.         mov     byte ptr FnErr+8, al
  181. ;
  182. fEnd0:          mov     di, NameOff
  183.         lea     si, Font
  184. iLoop2:         lodsb
  185.         stosb
  186.         cmp     al, 0
  187.         jne     iLoop2
  188. ;
  189.         mov     ax, 3516h
  190.         int     21h
  191.         mov     word ptr Old16, bx
  192.         mov     word ptr Old16+2, es
  193. ;
  194.         mov     ax, 3f00h
  195.         int     16h
  196.         mov     di, bx
  197.         lea     si, Mark
  198.         mov     cx, 5
  199.         cld
  200.         repz    cmpsb
  201.         jnz     contu
  202.         lea     dx, ReInst
  203.         jmp     PmtErr
  204. ;
  205. contu:          mov     ax, 3d00h
  206.         lea     dx, Path
  207.         int     21h
  208.         jnb     cont3
  209.         lea     dx, FnErr
  210.         jmp     PmtErr
  211. ;
  212. cont3:          jmp     LoadFont
  213. ;
  214.         db      2 dup('CHCS 1.0')
  215. ;
  216. code            ends
  217.         end     begin
  218.