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

  1. ;
  2. ;               init.asm
  3. ;
  4. code            segment byte public 'CODE'
  5.         assume  cs:code, ds:code
  6. ;
  7. include         xcs.mac
  8. ;
  9.         public          StrCpy
  10.         public          StrCat
  11.         public          StrChr
  12.         public          main
  13. ;
  14.         extrn           ChcsPsp:word
  15.         extrn           ChcsEnv:word
  16.         extrn           OldInt08:dword
  17.         extrn           OldInt09:dword
  18.         extrn           OldInt10:dword
  19.         extrn           OldInt13:dword
  20.         extrn           OldInt16:dword
  21.         extrn           OldInt1c:dword
  22.         extrn           NewInt08:far
  23.         extrn           NewInt09:far
  24.         extrn           NewInt10:far
  25.         extrn           NewInt13:far
  26.         extrn           NewInt16:far
  27.         extrn           NewInt1c:far
  28.         extrn           PushBackStr:near
  29.         extrn           ISentries
  30.         extrn           Ascii:far
  31.         extrn           QuWei:far
  32.         extrn           FuHao:far
  33.         extrn           ver:near
  34. ;
  35.         extrn           F8x8:dword
  36.         extrn           F8x14:dword
  37.         extrn           F8x16:dword
  38.         extrn           TextVRamSEG:word
  39.         extrn           ScrBuf:word
  40.         extrn           mode:byte
  41.         extrn           bAttr:byte
  42.         extrn           nAttr:byte
  43.         extrn           kAttr:byte
  44.         extrn           sAttr:byte
  45.         extrn           eAttr:byte
  46.         extrn           TimeOut:word
  47.         extrn           CurTextMode:byte
  48.         extrn           inGrCursor:byte
  49.         extrn           ClockSwitch:byte
  50.         extrn           CharTable:byte
  51.         extrn           VideoCard:byte
  52.         extrn           Vi600x16:byte
  53. ;
  54. StrCpy          proc    near
  55. ;
  56. ;       IN:     [bp+4] = destin
  57. ;               [bp+6] = source
  58. ;
  59.         push    bp
  60.         mov     bp, sp
  61.         push    si
  62.         push    di
  63.         mov     si, [bp+6]
  64.         mov     di, [bp+4]
  65. scLoop0:        mov     al, [si]
  66.         inc     si
  67.         mov     [di], al
  68.         inc     di
  69.         or      al, al
  70.         jnz     scLoop0
  71.         pop     di
  72.         pop     si
  73.         pop     bp
  74.         ret
  75. StrCpy          endp
  76. ;
  77. StrCat          proc    near
  78. ;
  79. ;       IN:     [bp+4] = destin
  80. ;               [bp+6] = source
  81. ;
  82.         push    bp
  83.         mov     bp, sp
  84.         push    si
  85.         push    di
  86.         mov     si, [bp+6]
  87.         mov     di, [bp+4]
  88. scLoop1:        cmp     byte ptr [di], 0
  89.         je      scLoop0
  90.         inc     di
  91.         jmp     scLoop1
  92. ;
  93. StrCat          endp
  94. ;
  95. StrChr          proc    near
  96. ;
  97. ;       IN:     [bp+4] = string
  98. ;               [bp+6] = char
  99. ;
  100.         push    bp
  101.         mov     bp, sp
  102.         push    si
  103.         mov     si, [bp+4]
  104.         mov     al, [bp+6]
  105. scLoop2:        mov     ah, [si]
  106.         inc     si
  107.         or      ah, ah
  108.         jz      scNoMatch
  109.         cmp     al, ah
  110.         jne     scLoop2
  111.         mov     al, 1
  112.         jmp     StrChrRet0
  113. ;
  114. scNoMatch:      mov     al, 0
  115. StrChrRet0:     pop     si
  116.         pop     bp
  117.         ret
  118. StrChr          endp
  119. ;
  120. TSREnd          label   byte
  121. ;
  122. code            ends
  123. ;
  124. ;               Templiary Part :
  125. ;
  126. data            segment para public 'DATA'
  127. ;
  128. ChcsMark        db      0dh,0ah,9, 'CHCS'
  129. startp          dw      0
  130. endpt           dw      0
  131. Handle          dw      0
  132. Sorry           db      'chcsvga: Sorry, VGA/SVGA card not found !'
  133.         db      0dh, 0ah, '$'
  134. BadMapFile      db      'chcsvga: Character map file open error !'
  135.         db      0dh, 0ah, '$'
  136. ReInst          db      'chcsvga: CHCS ╓╨╬─╧╡═│╥╤╫░╚δ !', 0dh, 0ah, '$'
  137. ;
  138. Login           db      'login',0dh,0
  139. ;
  140. dMark           db      'DIGITS',0
  141. sMark           db      'SYMBOLS',0
  142. nMark           db      'NUMPADS',0
  143. ;
  144. bcMark          db      'BACKCOLOR',0
  145. ncMark          db      'NAMECOLOR',0
  146. kcMark          db      'KEYCOLOR',0
  147. scMark          db      'SAMECOLOR',0
  148. ecMark          db      'SELECOLOR',0
  149. ;
  150. timMark         db      'TIMEOUT',0
  151. xmMark          db      'TEXTMODE',0
  152. ;
  153. cursorMark      db      'CURSORTYPE', 0
  154. clockMark       db      'CLOCK', 0
  155. vicardMark      db      'VIDEOCARD', 0
  156. ;
  157. VModeTable      label   byte
  158. ;
  159. ;               No.1    800x600x16      No.2    1024x768x16
  160. ;               No.3    640x400x256     No.4    640x480x256
  161. ;               No.5    800x600x256     No.6    1024x768x256
  162. ;               No.7    0               No.8    0
  163. ;
  164. ;       0.      Standard VGA :
  165.         db      8 dup(0)
  166. ;       1.      1Standard VESA :
  167.         db      6ah, 04h, 00h, 01h, 03h, 05h, 0, 0
  168. ;       2.      Trident Super VGA :
  169.         db      5bh, 5fh, 5ch, 5dh, 00h, 62h, 0, 0
  170. ;       3.      Paradise Super VGA :
  171.         db      58h, 5dh, 5eh, 5fh, 5ch, 00h, 0, 0
  172. ;       4.      ATI Super VGA :
  173.         db      53h, 55h, 61h, 62h, 63h, 00h, 0, 0
  174. ;       5.      Chips Super VGA :
  175.         db      6ah, 72h, 78h, 79h, 7ch, 7eh, 0, 0
  176. ;       6.      Video 7 Super VGA :
  177.         db      62h, 65h, 66h, 67h, 69h, 00h, 0, 0
  178. ;       7.      Geona Super VGA :
  179.         db      6ah, 5fh, 7eh, 00h, 00h, 00h, 0, 0
  180. ;       8.      Tseng Labs Super VGA :
  181.         db      29h, 37h, 00h, 2eh, 30h, 38h, 0, 0
  182. ;
  183. NameOff         dw      0
  184. Path            db      88 dup(?)
  185. CfgFile         db      'chcs.ini', 0
  186. BufLine         db      88 dup(?)
  187. ;
  188. data            ends
  189. ;
  190. code            segment byte public 'CODE'
  191.         assume  cs:code, ds:data, ss:stack
  192. ;
  193. LoadBiosFont    proc    near
  194.         push    bp
  195.         push    ds
  196.         mov     ax, cs
  197.         mov     ds, ax
  198.         mov     ax, 1130h
  199.         mov     bh, 3
  200.         int     10h
  201.         mov     word ptr F8x8, bp
  202.         mov     word ptr F8x8+2, es
  203.         mov     ax, 1130h
  204.         mov     bh, 2
  205.         int     10h
  206.         mov     word ptr F8x14, bp
  207.         mov     word ptr F8x14+2, es
  208.         mov     ax, 1130h
  209.         mov     bh, 6
  210.         int     10h
  211.         mov     word ptr F8x16, bp
  212.         mov     word ptr F8x16+2, es
  213.         pop     ds
  214.         pop     bp
  215.         ret
  216. LoadBiosFont    endp
  217. ;
  218. ResetBiosKey    proc    near
  219.         cli
  220.         push    es
  221.         xor     ax, ax
  222.         mov     es, ax
  223.         mov     byte ptr es:[41ah], 1eh
  224.         mov     byte ptr es:[41ch], 1eh
  225.         pop     es
  226.         sti
  227.         ret
  228. ResetBiosKey    endp
  229. ;
  230. TestVGA         proc    near
  231.         mov     ax, 1a00h
  232.         int     10h
  233.         cmp     al, 1ah
  234.         jne     noVGA
  235.         cmp     bl, 7
  236.         je      MonoVGA
  237.         cmp     bl, 8
  238.         je      ColorVGA
  239. MonoVGA:        mov     cs:TextVRamSEG, 0b000h
  240. noVGA:          mov     al, 0
  241.         ret
  242. ;
  243. ColorVGA:       mov     cs:TextVRamSEG, 0b800h
  244.         mov     al, 1
  245.         ret
  246. TestVGA         endp
  247. ;
  248. CloseFile       proc    near
  249.         mov     ah, 3eh
  250.         mov     bx, Handle
  251.         int     21h
  252.         ret
  253. CloseFile       endp
  254. ;
  255. LoadCharMap     proc    near
  256.         push    ds
  257.         mov     ax, 3d00h
  258.         mov     dx, NameOff
  259.         int     21h
  260.         jnc     LdChCont0
  261.         lea     dx, Path
  262.         mov     ax, 3d00h
  263.         int     21h
  264.         jc      BadCharMap
  265. LdChCont0:      mov     bx, ax
  266.         push    cs
  267.         pop     ds
  268.         mov     ah, 3fh
  269.         mov     cx, 257
  270.         lea     dx, CharTable
  271.         int     21h
  272.         jc      BadCharMap
  273.         mov     ah, 3eh
  274.         int     21h
  275.         jc      BadCharMap
  276.         pop     ds
  277.         ret
  278. ;
  279. BadCharMap:     pop     ds
  280.         mov     ah, 09h
  281.         lea     dx, BadMapFile
  282.         int     21h
  283.         mov     ax, 4cffh
  284.         int     21h
  285. ;
  286. LoadCharMap     endp
  287. ;
  288. ReadFile        proc    near
  289. ;
  290. ;       IN:     ds:dx = Path
  291. ;
  292.         push    ds
  293.         mov     ax, ds
  294.         mov     es, ax
  295.         mov     ax, 3d00h
  296.         int     21h
  297.         jc      rfError
  298.         mov     es:Handle, ax
  299.         mov     bx, ax
  300.         mov     ax, cs
  301.         mov     ds, ax
  302.         mov     ah, 3fh
  303.         lea     dx, ScrBuf
  304.         mov     cx, 4096
  305.         int     21h
  306.         mov     es:endpt, ax
  307.         jnc     rfCont0
  308.         pop     ds
  309.         call    CloseFile
  310.         mov     al, 0
  311.         ret
  312. ;
  313. rfCont0:        mov     al, 1
  314.         pop     ds
  315.         ret
  316. rfError:        mov     al, 0
  317.         pop     ds
  318.         ret
  319. ReadFile        endp
  320. ;
  321. ReadLine        proc    near
  322.         push    es
  323.         push    ds
  324.         push    si
  325.         push    di
  326.         mov     ax, ds
  327.         mov     es, ax
  328.         lea     di, BufLine
  329.         mov     ax, cs
  330.         mov     ds, ax
  331.         lea     si, ScrBuf
  332.         mov     bx, es:startp
  333.         add     si, bx
  334.         xor     cx, cx
  335.         cld
  336. rlLoop:         lodsb
  337.         inc     bx
  338.         cmp     bx, es:endpt
  339.         jae     rlCont0
  340.         or      al, al
  341.         jz      rlEnd0
  342.         cmp     al, 0dh
  343.         je      rlLoop
  344.         cmp     al, 0ah
  345.         je      rlEnd0
  346.         cmp     cx, 88
  347.         jae     rlLoop
  348.         cmp     al, 'a'
  349.         jb      rlSave
  350.         cmp     al, 'z'
  351.         ja      rlSave
  352.         and     al, 5fh
  353. rlSave:         stosb
  354.         inc     cx
  355.         cmp     bx, es:endpt
  356.         jb      rlLoop
  357. rlCont0:        cmp     cx, 0
  358.         jne     rlEnd0
  359.         mov     al, 0
  360.         jmp     rlExit
  361. ;
  362. rlEnd0:         mov     byte ptr es:[di], 0
  363.         mov     word ptr es:startp, bx
  364.         mov     al, 1
  365. rlExit:         pop     di
  366.         pop     si
  367.         pop     ds
  368.         pop     es
  369.         ret
  370. ReadLine        endp
  371. ;
  372. TransByte       proc    near
  373. ;
  374. ;       IN:     dl = NumChar
  375. ;               bh = '$' ... Hex
  376. ;       OUT:    dl = Value
  377. ;
  378.         xor     dh, dh
  379.         cmp     dl, '0'
  380.         jb      tbExit0
  381.         cmp     dl, '9'
  382.         jbe     tbDigit
  383.         cmp     bh, '$'
  384.         jne     tbExit0
  385.         cmp     dl, 'A'
  386.         jb      tbExit0
  387.         cmp     dl, 'F'
  388.         ja      tbExit0
  389.         sub     dl, ('A'- 10)
  390.         jmp     tbExit1
  391. tbDigit:        sub     dl, '0'
  392. tbExit1:        clc
  393.         ret
  394. tbExit0:        stc
  395.         ret
  396. TransByte       endp
  397. ;
  398. SearchVar       proc    near
  399. ;
  400. ;       IN:     di = Mark Str
  401. ;               bh = Trans Char
  402. ;       OUT:    ax = Value
  403. ;               CF flag = 0 ... Ok
  404. ;               CF flag = 1 ... Fail
  405. ;
  406.         push    si
  407.         lea     si, BufLine
  408.         cld
  409. svLoop0:        lodsb
  410.         cmp     al, ' '
  411.         je      svLoop0
  412.         cmp     al, 09h
  413.         je      svLoop0
  414.         cmp     al, 0
  415.         je      svExit0
  416.         mov     ah, [di]
  417.         or      ah, ah
  418.         je      svLoop1
  419.         cmp     al, ah
  420.         jne     svExit0
  421.         inc     di
  422.         jmp     svLoop0
  423. ;
  424. svLoop1:        lodsb
  425.         cmp     al, ' '
  426.         je      svLoop1
  427.         cmp     al, 09h
  428.         je      svLoop1
  429.         cmp     al, '='
  430.         je      svLoop1
  431.         mov     bl, 10
  432.         cmp     bh, '$'
  433.         jne     svSkipHex
  434.         mov     bl, 16
  435. svSkipHex:      cmp     al, bh
  436.         je      svCont0
  437.         cmp     bh, ' '
  438.         jne     svExit0
  439.         dec     si
  440. svCont0:        xor     ax, ax
  441.         xor     dh, dh
  442.         mov     dl, [si]
  443.         or      dl, dl
  444.         jz      svExit0
  445.         call    TransByte
  446.         jc      svExit0
  447.         mov     ax, dx
  448.         mov     dl, [si+1]
  449.         or      dl, dl
  450.         je      svSave
  451.         cmp     dl, ' '
  452.         je      svSave
  453.         call    TransByte
  454.         jc      svExit0
  455.         mul     bl
  456.         add     ax, dx
  457.         mov     dl, [si+2]
  458.         or      dl, dl
  459.         je      svSave
  460.         cmp     dl, ' '
  461.         je      svSave
  462.         call    TransByte
  463.         jc      svExit0
  464.         mul     bl
  465.         add     ax, dx
  466. svSave:         clc
  467.         jmp     svExit
  468. svExit0:        stc
  469. svExit:         pop     si
  470.         ret
  471. SearchVar       endp
  472. ;               ;;;;;;;;;;;;;;;;;;;;;
  473. ReadConfig      proc    near
  474.         lea     dx, CfgFile
  475.         call    ReadFile
  476.         or      al, al
  477.         jnz     toGetVars
  478.         lea     dx, Path
  479.         call    ReadFile
  480.         or      al, al
  481.         jnz     toGetVars
  482.         ret
  483. ;
  484. SearchVarLoop:  lea     bx, BufLine
  485.         cmp     byte ptr [bx], '#'
  486.         jne     toGetDmode
  487. toGetVars:      jmp     toReadLine
  488. ;
  489. toGetDmode:     lea     di, dMark
  490.         mov     bh, 'D'
  491.         call    SearchVar
  492.         jc      toGetSmode
  493.         cmp     ax, 9
  494.         jae     inValidDmode
  495.         mov     byte ptr cs:mode.dmode, al
  496. inValidDmode:   jmp     toReadLine
  497. ;
  498. toGetSmode:     lea     di, sMark
  499.         mov     bh, 'S'
  500.         call    SearchVar
  501.         jc      toGetPmode
  502.         cmp     ax, 1
  503.         ja      inValidSmode
  504.         mov     byte ptr cs:mode.smode, al
  505. inValidSmode:   jmp     toReadLine
  506. ;
  507. toGetPmode:     lea     di, nMark
  508.         mov     bh, 'P'
  509.         call    SearchVar
  510.         jc      toGetBackColor
  511.         cmp     ax, 5
  512.         ja      inValidPmode
  513.         mov     byte ptr cs:mode.pmode, al
  514. inValidPmode:   jmp     toReadLine
  515. ;
  516. toGetBackColor: lea     di, bcMark
  517.         mov     bh, ' '
  518.         call    SearchVar
  519.         jc      toGetNameColor
  520.         cmp     ax, 7
  521.         ja      inValidbAttr
  522.         mov     cl, 4
  523.         shl     al, cl
  524.         mov     byte ptr cs:bAttr, al
  525. inValidbAttr:   jmp     toReadLine
  526. ;
  527. toGetNameColor: lea     di, ncMark
  528.         mov     bh, ' '
  529.         call    SearchVar
  530.         jc      toGetKeyColor
  531.         cmp     ax, 0fh
  532.         ja      inValidnAttr
  533.         mov     byte ptr cs:nAttr, al
  534. inValidnAttr:   jmp     toReadLine
  535. ;
  536. toGetKeyColor:  lea     di, kcMark
  537.         mov     bh, ' '
  538.         call    SearchVar
  539.         jc      toGetSameColor
  540.         cmp     ax, 0fh
  541.         ja      inValidkAttr
  542.         mov     byte ptr cs:kAttr, al
  543. inValidkAttr:   jmp     toReadLine
  544. ;
  545. toGetSameColor: lea     di, scMark
  546.         mov     bh, ' '
  547.         call    SearchVar
  548.         jc      toGetSeleColor
  549.         cmp     ax, 0fh
  550.         ja      inValidsAttr
  551.         mov     byte ptr cs:sAttr, al
  552. inValidsAttr:   jmp     toReadLine
  553. ;
  554. toGetSeleColor: lea     di, ecMark
  555.         mov     bh, ' '
  556.         call    SearchVar
  557.         jc      toGetTimeOut
  558.         cmp     ax, 0fh
  559.         ja      inValideAttr
  560.         mov     byte ptr cs:eAttr, al
  561. inValideAttr:   jmp     toReadLine
  562. ;
  563. toGetTimeOut:   lea     di, timMark
  564.         mov     bh, ' '
  565.         call    SearchVar
  566.         jc      toGetTextMode
  567.         mov     word ptr cs:TimeOut, ax
  568.         jmp     toReadLine
  569. ;
  570. toGetTextMode:  lea     di, xmMark
  571.         mov     bh, ' '
  572.         call    SearchVar
  573.         jc      toGetCursor
  574.         cmp     ax, 3
  575.         ja      invalidTxMode
  576.         mov     byte ptr cs:CurTextMode, al
  577. invalidTxMode:  jmp     toReadLine
  578. ;
  579. toGetCursor:    lea     di, cursorMark
  580.         mov     bh, ' '
  581.         call    SearchVar
  582.         jc      toGetClock
  583.         cmp     ax, 1
  584.         ja      invalidCursor
  585.         mov     byte ptr cs:inGrCursor, al
  586. invalidCursor:  jmp     toReadLine
  587. ;
  588. toGetClock:     lea     di, clockMark
  589.         mov     bh, ' '
  590.         call    SearchVar
  591.         jc      toGetViCard
  592.         cmp     ax, 1
  593.         ja      invalidClock
  594.         mov     byte ptr cs:ClockSwitch, al
  595. invalidClock:   jmp     toReadLine
  596. ;
  597. toGetViCard:    lea     di, vicardMark
  598.         mov     bh, ' '
  599.         call    SearchVar
  600.         jc      toReadLine
  601.         cmp     al, 7
  602.         ja      toReadLine
  603. ;
  604.         mov     byte ptr cs:VideoCard, al
  605.         push    es
  606.         mov     bl, al
  607.         mov     ax, cs
  608.         mov     es, ax
  609.         lea     si, VModeTable
  610.         xor     bh, bh
  611.         shl     bx, 1
  612.         shl     bx, 1
  613.         shl     bx, 1
  614.         add     si, bx
  615.         lea     di, Vi600x16
  616.         mov     cx, 8
  617.         cld
  618.         rep     movsb
  619.         pop     es
  620.         jmp     toReadLine
  621. ;
  622. toReadLine:     call    ReadLine
  623.         or      al,al
  624.         jz      ReadCfgEnd
  625.         jmp     SearchVarLoop
  626. ;
  627. ReadCfgEnd:     call    CloseFile
  628.         ret
  629. ReadConfig      endp
  630. ;
  631. GetPath         proc    near
  632.         push    ds
  633.         mov     ax, ds
  634.         mov     es, ax
  635.         lea     di, Path
  636.         mov     ax, cs:ChcsEnv
  637.         mov     ds, ax
  638.         xor     si, si
  639. GetPathLoop0:   cmp     word ptr [si], 0
  640.         je      GetPathEnd0
  641.         inc     si
  642.         jmp     GetPathLoop0
  643. ;
  644. GetPathEnd0:    add     si, +4
  645.         cld
  646. GetPathLoop1:   lodsb
  647.         stosb
  648.         or      al, al
  649.         jz      GetPathEnd1
  650.         cmp     al, '\'
  651.         jne     GetPathLoop1
  652.         mov     es:NameOff, di
  653.         jmp     GetPathLoop1
  654. ;
  655. GetPathEnd1:    mov     di, es:NameOff
  656.         mov     ax, cs:ChcsPsp
  657.         mov     ds, ax
  658.         mov     si, 81h
  659.         cld
  660. CmdLineLoop0:   lodsb
  661.         cmp     al, 0dh
  662.         je      CmdLineEnd
  663.         cmp     al, ' '
  664.         je      CmdLineLoop0
  665.         cmp     al, 09h
  666.         je      CmdLineLoop0
  667.         cmp     al, '/'
  668.         jne     CmdLineEnd
  669.         lodsb
  670.         and     al, 5fh
  671.         cmp     al, 'C'
  672.         jne     CmdLineEnd
  673.         lodsb
  674.         cmp     al, ':'
  675.         jne     CmdLineEnd
  676.         mov     cx, 13
  677. CmdLineLoop1:   lodsb
  678.         cmp     al, '.'
  679.         jb      CmdLineCont0
  680.         stosb
  681.         loop    CmdLineLoop1
  682. CmdLineCont0:   xor     al, al
  683.         stosb
  684.         mov     ax, data
  685.         mov     ds, ax
  686.         call    LoadCharMap
  687. ;
  688. CmdLineEnd:     pop     ds
  689.         mov     di, NameOff
  690.         lea     si, CfgFile
  691.         cld
  692. GetPathLoop2:   lodsb
  693.         stosb
  694.         or      al, al
  695.         jnz     GetPathLoop2
  696.         ret
  697. GetPath         endp
  698. ;
  699. prVer           proc    near
  700.         push    ds
  701.         push    cs
  702.         pop     ds
  703.         lea     dx, ver
  704.         mov     ah, 09h
  705.         int     21h
  706.         pop     ds
  707.         ret
  708. prVer           endp
  709. ;
  710.         assume  cs:code, ds:data, ss:stack
  711. main            proc    far
  712.         mov     ax, ds
  713.         mov     cs:ChcsPsp, ax
  714.         mov     ax, ds:[2ch]
  715.         mov     cs:ChcsEnv, ax
  716. ;
  717.         mov     ax, data
  718.         mov     ds, ax
  719. ;
  720.         call    TestVGA
  721.         or      al, al
  722.         jnz     mainCont0
  723.         lea     dx, Sorry
  724. Error:          mov     ah, 09h
  725.         int     21h
  726.         mov     ax, 4c01h
  727.         int     21h
  728. ;
  729. mainCont0:      mov     ax, 3508h
  730.         int     21h
  731.         mov     word ptr cs:OldInt08+2, es
  732.         mov     word ptr cs:OldInt08, bx
  733.         mov     ax, 3509h
  734.         int     21h
  735.         mov     word ptr cs:OldInt09+2, es
  736.         mov     word ptr cs:OldInt09, bx
  737.         mov     ax, 3510h
  738.         int     21h
  739.         mov     word ptr cs:OldInt10+2, es
  740.         mov     word ptr cs:OldInt10, bx
  741.         mov     ax, 3513h
  742.         int     21h
  743.         mov     word ptr cs:OldInt13+2, es
  744.         mov     word ptr cs:OldInt13, bx
  745.         mov     ax, 3516h
  746.         int     21h
  747.         mov     word ptr cs:OldInt16+2, es
  748.         mov     word ptr cs:OldInt16, bx
  749.         mov     ax, 351ch
  750.         int     21h
  751.         mov     word ptr cs:OldInt1c+2, es
  752.         mov     word ptr cs:OldInt1c, bx
  753. ;
  754.         mov     ax, 3f00h
  755.         int     16h
  756.         mov     di, bx
  757.         lea     si, ChcsMark
  758.         mov     cx, 5
  759.         cld
  760.         repz    cmpsb
  761.         jnz     mainCont1
  762.         lea     dx, ReInst
  763.         jmp     Error
  764. ;
  765. mainCont1:      call    LoadBiosFont
  766. ;                call    ResetBiosKey
  767. ;
  768. ;                mov     ax, 6
  769. ;                push    ax
  770. ;                lea     ax, Login
  771. ;                push    ax
  772. ;                call    PushBackStr
  773. ;                add     sp, +4
  774. ;
  775.         call    GetPath
  776.         call    ReadConfig
  777. ;
  778.         mov     ax, cs
  779.         mov     ds, ax
  780.         mov     ax, 2508h
  781.         lea     dx, NewInt08
  782.         int     21h
  783.         mov     ax, 2509h
  784.         lea     dx, NewInt09
  785.         int     21h
  786.         mov     ax, 2510h
  787.         lea     dx, NewInt10
  788.         int     21h
  789.         mov     ax, 2513h
  790.         lea     dx, NewInt13
  791.         int     21h
  792.         mov     ax, 2516h
  793.         lea     dx, NewInt16
  794.         int     21h
  795.         mov     ax, 251ch
  796.         lea     dx, NewInt1c
  797.         int     21h
  798.         cmp     CurTextMode, 3
  799.         jne     toVMode3
  800.         mov     CurTextMode, 0
  801.         mov     ax, 0006h
  802.         jmp     InitCRT
  803. toVMode3:       mov     ax, 0003h
  804. InitCRT:        int     10h
  805. ;                call    prVer
  806.         lea     dx, TSREnd
  807.         add     dx, 100h
  808.         mov     cl, 4
  809.         shr     dx, cl
  810.         inc     dx
  811.         mov     ax, 3100h
  812.         int     21h
  813. main            endp
  814. ;
  815. code            ends
  816. ;
  817. stack           segment para STACK 'STACK'
  818.         db      64 dup('CHCS 1.0')
  819. stack           ends
  820. ;
  821.         end     main
  822.