home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / DICT / DFKC / ZWH / FCC / FCC.ASM next >
Encoding:
Assembly Source File  |  1998-01-13  |  6.2 KB  |  315 lines

  1. ;
  2. ;        ╔═══════════════════════════════════════╗
  3. ;        ║     Product No.002 of Pound Group     ║
  4. ;        ║        By He-Zhantao , THE E.D.       ║
  5. ;        ║     Copyright (c) 1994.12 Beijing     ║
  6. ;        ╚═══════════════════════════════════════╝
  7. ;
  8. ;Only for Chinese MS_DOS 6.21 using Chinese under other Chinese system
  9.  
  10.  
  11. .286
  12. .model tiny
  13. .code
  14.                org     100h    
  15.               
  16. start:        
  17.         jmp    begin
  18.     oldint16off    dw    0
  19.     oldint16seg    dw    0
  20.     forcechinese    db    0
  21.     force        db    0
  22.  
  23.     herc        db    0    ; 1 is herc
  24.     herc_sum    dw    0
  25.     herc_sum_1    dw    0
  26.     lastkeyoff    dw    0
  27.     chinese        equ    0f8h
  28.     english        equ    0f9h
  29.     int16entry:
  30.         cmp    ax,"PD"
  31.         jnz    isnottest
  32.         cmp    bx,"IN"
  33.         jnz    isset
  34.         mov    ax,"OK"
  35.         mov    bl,cs:[force]
  36.         iret
  37.     isset:
  38.         cmp    bx,"SF"
  39.         jz    setforce16
  40.         cmp    bx,"SN"
  41.         jnz    isnottest
  42.         mov    cs:[force],byte ptr 0
  43.         iret
  44.     setforce16:
  45.         mov    cs:[force],byte ptr 1
  46.         iret
  47.  
  48.  
  49.     isnottest:
  50.         push    es
  51.         push    di
  52.         push    si
  53.         ; if a000:0 rw b800:0 xx
  54.         call    need_check
  55.         jz      dout
  56.     needchinese:
  57.         
  58.         cmp    ax,0db00h
  59.         jnz    nextint16
  60.         cmp    cx,1
  61.         jnz    dout
  62.         cmp    dx,0
  63.         jnz    dout
  64.  
  65.         mov    ax,0
  66.         mov    dx,058h
  67.         mov    es:[bx+14h], word ptr 03a8h
  68.         pop    si
  69.         pop    di
  70.         pop    es
  71.         iret
  72.  
  73.     nextint16:
  74.         cmp    ax,0db80h
  75.         jnz    dout
  76.         cmp    cx,1
  77.         jnz    dout
  78.         mov    ax,0
  79.         mov    dx,58h
  80.         pop    si
  81.         pop    di
  82.         pop    es
  83.         iret
  84.     dout:
  85.         jmp    int16out
  86.     int16out:
  87.         pop    si
  88.         pop    di
  89.         pop    es
  90.  
  91.     directexit:
  92.         jmp    dword ptr cs:[oldint16off]
  93.  
  94. need_check    proc    near
  95.         pusha
  96.         cmp    cs:[herc],0
  97.         jz    isnot_hercvideo
  98.                 call    addall_herc
  99.         cmp    ax,cs:[herc_sum]
  100.         mov    cs:[herc_sum_1],ax
  101.         popa
  102.         ret
  103.     isnot_hercvideo:
  104.         push    ds
  105.         mov    ax,40h
  106.         mov    ds,ax
  107.         cmp    ds:[49h],byte ptr 3
  108.         ja    isgraph
  109.                 mov    ax,0a000h
  110.         mov    ds,ax
  111.         xor    ax,ax
  112.         add    ax,ds:[0]
  113.         add    ax,ds:[2000h]
  114.         add    ax,ds:[4000h]
  115.         add    ax,ds:[6000h]
  116.         add    ax,ds:[8000h]
  117.         add    ax,ds:[0a000h]
  118.         add    ax,ds:[0c000h]
  119.         add    ax,ds:[0e000h]
  120.         cmp    ax,0fff8h
  121.         pop    ds
  122.                 popa
  123.         ret
  124.     isgraph:
  125.         cmp    cs:[force],1
  126.                pop    ds
  127.         popa
  128.         ret
  129. need_check    endp
  130.  
  131. addall_herc    proc    near
  132.         push    ds
  133.                 push    bx
  134.         mov    bx,40h
  135.         mov    ds,bx
  136.         mov    bx,ds:[1ah]
  137.         cmp    bx,cs:[lastkeyoff]
  138.         mov    cs:[lastkeyoff],bx
  139.         jnz    nextcompadd
  140.         pop    bx
  141.         pop    ds
  142.         mov    ax,cs:[herc_sum_1]
  143.                 ret
  144.  
  145.     nextcompadd:
  146.         cmp    byte ptr ds:[bx],0dh
  147.         pop    bx
  148.         pop    ds
  149.         jz    needadd
  150.         mov    ax,cs:[herc_sum_1]
  151.                 ret
  152.     needadd:
  153.                 mov    ax,cs:[herc_sum_1]
  154.         mov    cs:[herc_sum],ax
  155.         push    si
  156.         push    ds
  157.         mov    ax,0b800h
  158.         mov    ds,ax
  159.         mov    si,08000h
  160.     nextadd:
  161.         dec    si
  162.         dec    si
  163.                 add     ax,ds:[si]
  164.         cmp    si,0
  165.         jnz    nextadd
  166.         pop    ds
  167.         pop    si
  168.         ret
  169. addall_herc    endp
  170.  
  171.     begin:
  172.         mov    ax,"PD"                 ; Reload test.
  173.         mov    bx,"IN"
  174.         int    16h
  175.         cmp    ax,"OK"
  176.         jnz    nomodiflag
  177.         mov    cs:[force],bl
  178.     nomodiflag:
  179.         mov    dx,offset copyright
  180.         call    setoutinfo    ; Copyright.
  181.  
  182.         mov    bl,cs:[80h]
  183.         xor    bh,bh
  184.         cmp    bl,0
  185.         jz    noprompt    ; Prompt
  186.  
  187.         add    bx,7fh
  188.         mov    bx,cs:[bx]
  189.         or    bx,02000h    ; upcase
  190.         cmp    bx,"?/"
  191.         jz    help
  192.         cmp    bx,"n/"
  193.         jz    force_act
  194.         cmp    bx,"f/"
  195.         jz    normal
  196.         jmp    noprompt
  197.     normal:
  198.         inc    cs:[forcechinese]    ; 2 is Normal
  199.     force_act:
  200.         inc    cs:[forcechinese]    ; 1 is Force
  201.     noprompt:
  202.         push    cs
  203.         pop    ds
  204.         mov    ax,"PD"                 ; Reload test.
  205.         mov    bx,"IN"
  206.         int    16h
  207.         cmp    ax,"OK"
  208.         jz    exist
  209.  
  210.         int    11h
  211.         and    al,030h
  212.         cmp    al,030h
  213.                 jnz    isnot_HERC
  214.         mov    cs:[herc],byte ptr 1    ; is HERC ?
  215.  
  216.         call    addall_herc        ; all herc checksum in ax
  217.         mov    cs:[herc_sum],ax
  218.  
  219.     isnot_HERC:
  220.          mov    ax,3516h
  221.          int    21h
  222.          mov    cs:[oldint16off],bx
  223.          mov    cs:[oldint16seg],es
  224.          mov    dx,offset int16entry
  225.          push    cs
  226.          pop    ds
  227.          mov    ax,2516h
  228.          int    21h
  229.          mov    dx,offset begin
  230.          add     dx,110h
  231.          mov    cl,4
  232.          shr    dx,cl
  233.          mov    ah,31h
  234.         int    21h
  235.     help:
  236.         mov    dx,offset helpinfo
  237.         jmp    outinfo
  238.     
  239.     exist:
  240.         mov    ax,"PD"
  241.         mov    bx,"SF"
  242.         cmp    cs:[forcechinese],byte ptr 2
  243.         jnz    ifitisforce
  244.         mov    bx,"SN"
  245.         int    16h
  246.         mov    dx,offset setnormalinfo
  247.         jmp    outinfo
  248.  
  249.     ifitisforce:
  250.         cmp    cs:[forcechinese],byte ptr 1
  251.         jnz    isnotsetforce
  252.     execset:
  253.         int    16h
  254.         mov    dx,offset setforceinfo
  255.         jmp    outinfo
  256.     isnotsetforce:
  257.         mov    dx,offset existinfo
  258.         jmp    outinfo
  259.  
  260.     outinfo:
  261.         call    setoutinfo
  262.         mov    ah,4ch
  263.         int    21h
  264. setoutinfo    proc    near
  265.                 push    cs
  266.         pop    ds
  267.         mov    ah,9
  268.         call    need_check
  269.         jz    english_system
  270.     nextstring:
  271.         inc    dx
  272.         mov    bx,dx
  273.         cmp    cs:[bx],byte ptr "$"
  274.         jnz    nextstring
  275.         inc    dx
  276.     english_system:
  277.         int    21h
  278.         ret
  279. setoutinfo    endp
  280.  
  281.         copyright     db   'Free Chinese COMMAND Copyright (c) 1994 HUST HaXing Co. He-Zhantao The E.D.',10,13
  282.                         db   '$'
  283.                    db   '┐¬╖┼╓╨╬─ COMMAND  ░µ╚¿╦∙╙╨ (c) 1994 ╗¬╓╨└φ╣ñ┤≤╤º╗¬╨╦╣½╦╛ ║╬╒╜╠╬ The E.D.',10,13
  284.                         db   '$'
  285.  
  286.     existinfo    db   'Hello, I have residented!',0dh,0ah
  287.             db   '$'
  288.                         db   '─·║├, FCC ╥╤╛¡╫ñ┴⌠ !',0dh,0ah
  289.                         db   '$'
  290.     helpinfo    db   '  /? for help ',0dh,0ah
  291.             db   '  /f for use Force Chinese MODE (any chinese system) ',0dh,0ah
  292.             db   '  /n for use AutoDetect MODE (some direct_video chinese system)',0dh,0ah
  293.             db   '  He Zhantao    010-8404488 call 18120 (Chinese) ',0dh,0ah
  294.             db   '  Min YiHua     027-7801940 call 7570 ',0dh,0ah
  295.             db   '  HUST HuaXing Co. 027-7877936  027-7801975 ',0dh,0ah
  296.             db   '  We have another Version of FCC can run under any DOS Version',0dh,0ah
  297.             db   '  Welcome call me. For OEM .' ,0dh,0ah
  298.             db   '$'
  299.             db   '  /? ░∩╓·╨┼╧ó ',0dh,0ah
  300.             db   '  /f ╔Φ╓├╬¬╟┐╓╞╓╨╬──ú╩╜ (╢╘╚╬╥Γ║║╫╓╧╡═│)',0dh,0ah
  301.             db   '  /n ╔Φ╓├╬¬╫╘╢»╩╢▒≡─ú╩╜ (╢╘╓º│╓╓▒╜╙╨┤╞┴║║╫╓╧╡═│╩╣╙├)',0dh,0ah
  302.             db   '  ╗¬╓╨└φ╣ñ┤≤╤º╗¬╨╦╣½╦╛ ║╬╒╜╠╬ 01-8404488 ║⌠ 18120 (║║) ',0dh,0ah
  303.             db   '  ╗¬╓╨└φ╣ñ┤≤╤º╗¬╨╦╣½╦╛ π╔╥╒╗¬ 027-7801940 ║⌠ 7570 ',0dh,0ah
  304.             db   '  ╗¬╓╨└φ╣ñ┤≤╤º╗¬╨╦╣½╦╛ 027-7877936  027-7801975 ',0dh,0ah
  305.             db   '  ╗╣╙╨┐╔╘┌╚╬╥Γ DOS ░µ▒╛╧┬╘╦╨╨╡─┐¬╖┼╓╨╬─ COMMAND !',0dh,0ah
  306.                         db   '  ╗╢╙¡┴¬╧╡, ╤░╟≤ OEM ║╧╫≈╗∩░Θ ',0dh,0ah
  307.             db   '$'
  308.  
  309.     setnormalinfo    db   'Free Chinese COMMAND set to Force Chinese MODE',0dh,0ah,'$'
  310.             db   '┐¬╖┼╓╨╬─ COMMAND ╔Φ╓├╬¬╟┐╓╞╓╨╬──ú╩╜ ',0dh,0ah,'$'
  311.     setforceinfo    db   'Free Chinese COMMAND set to AutoDetect MODE',0dh,0ah,'$'
  312.             db   '┐¬╖┼╓╨╬─ COMMAND ╔Φ╓├╬¬╫╘╢»╩╢▒≡─ú╩╜ ',0dh,0ah,'$'
  313.  
  314. end    start
  315.