home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / oricon / src / oak.asm < prev    next >
Assembly Source File  |  1990-06-14  |  29KB  |  1,604 lines

  1.     .286c
  2. _TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  3. _TEXT    ENDS
  4. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  5. _DATA    ENDS
  6. CONST    SEGMENT  WORD PUBLIC 'CONST'
  7. CONST    ENDS
  8. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  9. _BSS    ENDS
  10. DGROUP    GROUP    CONST,    _BSS,    _DATA
  11.  
  12.     ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  13.  
  14. _TEXT      SEGMENT
  15.  
  16. ;*******************************************
  17. ;*    ORICON40用にアセブルするなら
  18. ;*    LINE40を定義すること
  19. ;*    ゲェ失敗じゃ
  20. ;*    仮想VRAMがC800:1000以上に無い!
  21. ;*******************************************
  22. ;LINE40    equ    1
  23. ;*******************************************
  24.  
  25. TRUE    equ    1
  26. FALSE    equ    0
  27. ;
  28. ;キーアドレス
  29. ;
  30. sCAP    equ    55h
  31. sHIRA    equ    56h
  32. sKATA    equ    5Ah
  33.  
  34. sEIJI    equ    6Ah
  35. sEIKO    equ    6Fh
  36. sMUHEN    equ    57h
  37. sHENKAN    equ    58h
  38.  
  39. sKANJI    equ    59h
  40. sZENHAN    equ    71h
  41.  
  42. ;
  43. ;モ-ドフラグ
  44. ;
  45. mKANJI    equ    0002h
  46. mROMA    equ    0008h
  47. mZEN    equ    0020h
  48. mKATA    equ    0080h
  49. mHIRA    equ    0100h
  50.  
  51. ;
  52. ;  かな漢字変換用構造体定義
  53. ;
  54. Funcparm    struc
  55.     wFunc        dw    ?
  56.     wMode        dw    ?
  57.     lpKkname    dd    far
  58.     lpDataparm    dd    far
  59.     wHandle        dw    ?
  60.     Reserved_f    db    2 dup(0)
  61. Funcparm    ends
  62.  
  63. Kkname        struc
  64.     wLevel        dw    ?
  65.     rgchName    db    8 dup(?)
  66.     rgchVersion    db    4 dup(?)
  67.     rgchRevision    db    4 dup(?)
  68.     Reserved_k    db    14 dup(0)
  69. Kkname        ends
  70.  
  71. Dataparm    struc
  72.     wType        dw    0
  73.     wScan        dw    0
  74.     wAscii        dw    0
  75.     wStatus        dw    0
  76.  
  77.     cchResult    dw    0
  78.     lpchResult    dd    far
  79.  
  80.     cchMode        dw    0
  81.     lpchMode    dd    far
  82.     lpattrMode    dd    far
  83.  
  84.     cchSystem    dw    0
  85.     lpchSystem    dd    far
  86.     lpattrSystem    dd    far
  87.  
  88.     cchBuf        dw    0
  89.     lpchBuf        dd    far
  90.     lpattrBuf    dd    far
  91.     cchBufCursor    dw    0
  92.     cchBufAct    dw    0
  93.  
  94.     cchHomonym    dw    0
  95.     lpchHomonym    dd    far
  96.     cchHomonymAct    dw    0
  97.     cchHomonymTotal    dw    0
  98.     cchHomonymNum    dw    0
  99.  
  100.     fKanji        dw    ?
  101.     fNtype        dw    ?
  102.  
  103.     Reserved_d    db    16 dup(0)
  104. Dataparm    ends
  105.  
  106. ;
  107. ;
  108. ;
  109. MAX_X    equ    80
  110. ifdef    LINE40
  111.   MAX_Y    equ    39
  112. else
  113.   MAX_Y    equ    24
  114. endif
  115. ;
  116. ;  データ領域
  117. ;
  118.  
  119. fnc    Funcparm    <>
  120. knm    Kkname        <>
  121. dat    Dataparm    <>
  122. buf_size    equ    100
  123. buf        db    8 dup(buf_size dup(0))
  124. vct_90h        dd    far
  125. vct_91h        dd    far
  126. Slock        db    FALSE
  127. modeW        dw    0056h or 8000h
  128. modeB        dd    far
  129.         dd    far
  130. modeS        db    34h,41h, 21h,21h, ' ', 31h,51h, 3Eh,2Eh
  131. modeA        db    1,0,7,0,3,0,7,0        ;
  132.         db    1,0,7,0,3,0,7,0
  133.         db    0,0,7,0
  134.         db    1,0,7,0,3,0,7,0
  135.         db    1,0,7,0,3,0,7,0
  136. old_cchS    dw    0
  137.         db    4*buf_size dup(0)
  138. old_cchB    dw    0
  139.         db    4*buf_size dup(0)
  140. cchR_p        dw    0
  141. color        dd    0
  142. bak_xy        dw    0
  143. ent_xy        dw    0
  144. dmy_key        db    0
  145. k_kind        db    ?
  146. key_tbl        db    16 dup(?)
  147.  
  148. enc_cnt        dw    0        ;bug fixed at v1.00
  149. enc_str        db    7 dup (0)
  150.  
  151.  
  152. pf_key_tbl    db    01h,80h, 2,1Bh,'S'    ;PF1
  153.         db    02h,80h, 2,1Bh,'T'    ;PF2
  154.         db    03h,80h, 2,1Bh,'U'    ;PF3
  155.         db    04h,80h, 2,1Bh,'V'    ;PF4
  156.         db    05h,80h, 2,1Bh,'W'    ;PF5
  157.         db    06h,80h, 2,1Bh,'E'    ;PF6
  158.         db    07h,80h, 2,1Bh,'J'    ;PF7
  159.         db    08h,80h, 2,1Bh,'P'    ;PF8
  160.         db    09h,80h, 2,1Bh,'Q'    ;PF9
  161.         db    0ah,80h, 2,1Bh,'Z'    ;PF10
  162.  
  163.         db    0bh,80h, 2,1Bh,'S'    ;PF11
  164.         db    1dh,80h, 2,1Bh,'T'    ;PF12
  165.         db    21h,80h, 2,1Bh,'U'    ;PF13
  166.         db    22h,80h, 2,1Bh,'V'    ;PF14
  167.         db    23h,80h, 2,1Bh,'W'    ;PF15
  168.         db    24h,80h, 2,1Bh,'E'    ;PF16
  169.         db    25h,80h, 2,1Bh,'J'    ;PF17
  170.         db    26h,80h, 2,1Bh,'P'    ;PF18
  171.         db    27h,80h, 2,1Bh,'Q'    ;PF19
  172.         db    28h,80h, 2,1Bh,'Z'    ;PF20
  173.  
  174.         db    12h,00h, 2,1Bh,'P'    ;[INS]
  175.         db    7fh,00h, 2,1Bh,'V'    ;[DEL]
  176.         db    18h,80h, 0        ;[半角/全角]
  177.         db    1ch,80h, 0        ;[かな漢字]
  178.         db    0,0
  179.  
  180. o_msg    db    'FM-Towns FMR50 コンソ-ルシュミレ-タ v1.02',0Dh,0Ah
  181.     db    'Programmed by K.MIYAZAKI',0Dh,0Ah
  182.     db    'Asistant programmer N.YAMAZAKI',0Dh,0Ah,0Dh,0Ah
  183.     db    'FM-Towns OAK/2 フロントエンドプロセッサー v1.04',0Dh,0Ah
  184.     db    'Programmed by N.YAMAZAKI',0Dh,0Ah
  185.     db    'Investigated by K.MIYAZAKI Thanks a lot.',0Dh,0Ah
  186. o_msgL    equ    $-o_msg
  187.  
  188. t1_msg    db    '単語登録 '
  189.     db    '登録位置にカ-ソルを移動して実行キ-を押してください'
  190. t1_msgL    equ    $-t1_msg
  191. t1_atr    db    8 dup (8),t1_msgL-8 dup(1)
  192. t2_msg    db    '単語登録 '
  193.     db    '登録範囲を指定してください'
  194. t2_msgL    equ    $-t2_msg
  195. ;
  196. ;  かな漢字変換関数
  197. ;
  198. KKfunc    proc    near
  199.     push    es
  200.     push    ds
  201.     push    bx
  202.     push    cx
  203.     push    dx
  204.     push    si
  205.     push    di
  206.     mov    ax,cs
  207.     mov    ds,ax
  208.     mov    es,ax
  209.  
  210.     mov    ax,fnc.wFunc
  211.     mov    bx,offset fnc
  212.     mov    cx,offset fnc
  213.     mov    dx,offset fnc
  214.     mov    di,offset fnc
  215.     mov    si,offset fnc
  216.  
  217.     int    0EEh
  218.     pop    di
  219.     pop    si
  220.     pop    dx
  221.     pop    cx
  222.     pop    bx
  223.     pop    ds
  224.     pop    es
  225.     ret
  226. KKfunc    endp
  227.  
  228. KKOpen    proc    near
  229.     mov    fnc.wFunc,2
  230.     mov    fnc.wHandle,1
  231.     mov    ax,ds
  232.     mov    word ptr fnc.lpKkname,offset knm
  233.     mov    word ptr fnc.lpKkname+2,ax
  234.     mov    word ptr fnc.lpDataparm,offset dat
  235.     mov    word ptr fnc.lpDataparm+2,ax
  236.     mov    dat.wType,1    ;0にしてもシステムではやってくれない(バカ!)
  237.     call    KKfunc
  238.     ret
  239. KKOpen    endp
  240.  
  241. KKClose    proc    near
  242.     mov    fnc.wFunc,3
  243.     mov    fnc.wMode,0
  244.     mov    word ptr fnc.lpKkname,0
  245.     mov    word ptr fnc.lpKkname+2,0
  246.     mov    word ptr fnc.lpDataparm,0
  247.     mov    word ptr fnc.lpDataparm+2,0
  248.     call    KKfunc
  249.     ret
  250. KKClose    endp
  251.  
  252. KKInOut    proc    near
  253.     mov    fnc.wFunc,4
  254.     mov    fnc.wMode,0
  255.     mov    word ptr fnc.lpKkname,0
  256.     mov    word ptr fnc.lpKkname+2,0
  257.     mov    ax,ds
  258.     mov    word ptr fnc.lpDataparm,offset dat
  259.     mov    word ptr fnc.lpDataparm+2,ax
  260.  
  261.     mov    word ptr dat.lpchResult,offset buf[0]
  262.     mov    word ptr dat.lpchResult+2,ax
  263.     mov    word ptr dat.lpchMode,offset buf[1*buf_size]
  264.     mov    word ptr dat.lpchMode+2,ax
  265.     mov    word ptr dat.lpattrMode,offset buf[2*buf_size]
  266.     mov    word ptr dat.lpattrMode+2,ax
  267.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  268.     mov    word ptr dat.lpchSystem+2,ax
  269.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  270.     mov    word ptr dat.lpattrSystem+2,ax
  271.     mov    word ptr dat.lpchBuf,offset buf[5*buf_size]
  272.     mov    word ptr dat.lpchBuf+2,ax
  273.     mov    word ptr dat.lpattrBuf,offset buf[6*buf_size]
  274.     mov    word ptr dat.lpattrBuf+2,ax
  275.     mov    word ptr dat.lpchHomonym,offset buf[7*buf_size]
  276.     mov    word ptr dat.lpchHomonym+2,ax
  277.     call    KKfunc
  278.     ret
  279. KKInOut    endp
  280.  
  281. KKMode    proc    near
  282.     mov    fnc.wFunc,5
  283.     mov    word ptr fnc.lpKkname,0
  284.     mov    word ptr fnc.lpKkname+2,0
  285.     mov    ax,ds
  286.     mov    word ptr fnc.lpDataparm,offset dat
  287.     mov    word ptr fnc.lpDataparm+2,ax
  288.     call    KKfunc
  289.     ret
  290. KKMode    endp
  291.  
  292. KKTrans    proc    near
  293.     mov    fnc.wFunc,6
  294.     mov    fnc.wMode,0
  295.     mov    word ptr fnc.lpKkname,0
  296.     mov    word ptr fnc.lpKkname+2,0
  297.     mov    ax,ds
  298.     mov    word ptr fnc.lpDataparm,offset dat
  299.     mov    word ptr fnc.lpDataparm+2,ax
  300.     mov    fnc.wHandle,1
  301.  
  302.     mov    byte ptr dat.wScan,0
  303.     mov    byte ptr dat.wAscii,0
  304.     mov    byte ptr dat.wStatus,0
  305.     mov    word ptr dat.lpchMode,0
  306.     mov    word ptr dat.lpchMode+2,0
  307.     mov    word ptr dat.lpattrMode,0
  308.     mov    word ptr dat.lpattrMode+2,0
  309.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  310.     mov    word ptr dat.lpchSystem+2,ax
  311.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  312.     mov    word ptr dat.lpattrSystem+2,ax
  313. ;    mov    word ptr dat.lpchBuf,0
  314. ;    mov    word ptr dat.lpchBuf+2,0
  315. ;    mov    word ptr dat.lpattrBuf,0
  316. ;    mov    word ptr dat.lpattrBuf+2,0
  317.     mov    word ptr dat.lpchHomonym,0
  318.     mov    word ptr dat.lpchHomonym+2,0
  319.     call    KKfunc
  320.     ret
  321. KKTrans    endp
  322.  
  323. ;
  324. ;
  325. ;
  326.  
  327. get_vct90h    macro
  328.         push    es
  329.         push    bx
  330.         mov    ax,3590h
  331.         int    21h
  332.         mov    word ptr vct_90h,bx
  333.         mov    ax,es
  334.         mov    word ptr vct_90h+2,ax
  335.         pop    bx
  336.         pop    es
  337.         endm
  338.  
  339. set_vct90h    macro
  340.         push    ds
  341.         push    dx
  342.         mov    dx,word ptr vct_90h
  343.         mov    ax,word ptr vct_90h+2
  344.         mov    ds,ax
  345.         mov    ax,2590h
  346.         int    21h
  347.         pop    dx
  348.         pop    ds
  349.         endm
  350.  
  351. INT90H        macro
  352.         pushf
  353.         call    [vct_90h]
  354.         endm
  355.  
  356. KYB_check    macro
  357.         mov    ah,07h
  358.         INT90H
  359.         endm
  360.  
  361. KYB_read    macro    sw
  362.         mov    ah,09h
  363.         mov    al,sw
  364.         INT90H
  365.         endm
  366.  
  367. KYB_matrix    macro
  368.         mov    di,offset key_tbl
  369.         mov    ah,0Ah
  370.         INT90H
  371.         endm
  372.  
  373. KYB_KindKb    macro
  374.         mov    ah,0FAh
  375.         int    90h
  376.         endm
  377.  
  378. KYB_setShift    macro
  379.         mov    ah,0FCh
  380.         INT90H
  381.         endm
  382.  
  383. KYB_read2_s    proc     near
  384. kr2s_lp1:    call    KYBN_check
  385.         cmp    dh,0FFh
  386.         je    kr2s_lp1
  387.         mov    ax,0900h
  388.         INT90H
  389.                 push    ax
  390.                 push    bx
  391.                 push    cx
  392.                 push    dx
  393.                 mov    cl,bh
  394. kr2s_apn31:     mov     ah,07h
  395.                 INT90H
  396.                 cmp     dh,0ffh
  397.                 je      kr2s_apn4
  398.  
  399.             cmp     bh,cl
  400.                 jne     kr2s_apn4
  401.  
  402.                 cmp     bh,4dh        ;bug fixed at v0.99
  403.                 je      kr2s_apn32
  404.                 cmp     bh,4fh
  405.                 je      kr2s_apn32
  406.                 cmp     bh,50h
  407.                 je      kr2s_apn32
  408.                 cmp     bh,51h
  409.                 je      kr2s_apn32
  410.         cmp    bh,4Bh
  411.         je    kr2s_apn32
  412.         cmp    bh,4Eh
  413.         je    kr2s_apn32
  414.                 cmp     bh,48h
  415.                 je      kr2s_apn32
  416.                 cmp     bh,72h
  417.                 je      kr2s_apn32
  418.                 cmp     bh,73h
  419.                 jne     kr2s_apn4
  420.  
  421. kr2s_apn32:     mov     ax,0900h
  422.                 INT90H
  423.                 jmp     kr2s_apn31
  424. kr2s_apn4:      
  425.                 pop     dx
  426.                 pop    cx
  427.                 pop     bx
  428.                 pop     ax
  429.                 ret
  430. KYB_read2_s    endp
  431.  
  432. KYB_read2    macro
  433.         call KYB_read2_s
  434.         endm
  435.  
  436. key_test    macro    scan
  437.         test    key_tbl[scan/8],(1 shl (scan mod 8))
  438.         endm
  439.  
  440. key_break    macro    scan
  441.         local    lp
  442. lp:            KYB_matrix
  443.             key_test    scan
  444.             jnz    short lp
  445.         endm
  446.  
  447. putchar        macro    char
  448.         mov    ah,1Dh
  449.         mov    al,char
  450.         int    91h
  451.         endm
  452.  
  453. getatr        macro
  454.         mov    di,offset color
  455.         mov    ah,12h
  456.         int    91h
  457.         endm
  458.  
  459. setatr        macro
  460.         mov    di,offset color
  461.         mov    ah,11h
  462.         int    91h
  463.         endm
  464.  
  465. getcur        macro
  466.         mov    ah,0Eh
  467.         int    91h
  468.         endm
  469.  
  470. setcur        macro
  471.         mov    ah,0Dh
  472.         int    91h
  473.         endm
  474.  
  475. com_atr        macro
  476.           mov    di,offset color
  477.           mov    ah,10h
  478.         int    91h
  479.         xor    byte ptr[di+1],28h
  480.         mov    ah,0Fh
  481.         int    91h
  482.         endm
  483. ;
  484. ; sjisto
  485. ;  bx:shift jis 漢字コード
  486. ;<return> bx:jis 漢字コード
  487. ;
  488.  
  489. sjisto    proc    near
  490.     cmp    bh,9fh
  491.     jbe    sjto1
  492.     sub    bh,0B1h-071h
  493. sjto1:  sub    bh,071h
  494.     shl    bh,1
  495.     inc    bh
  496.     cmp    bl,7fh
  497.     jbe    sjto2
  498.     dec    bl
  499. sjto2:    cmp    bl,9eh
  500.     jb    sjto3
  501.     sub    bl,7dh
  502.     inc    bh
  503.     jmp    sjto5
  504. sjto3:    sub    bl,1fh
  505. sjto5:    ret
  506. sjisto    endp
  507.  
  508. ;
  509. ; iskanji
  510. ;  bl:shift jis (上位)
  511. ;<return> C flug=1:漢字コード
  512. ;
  513.  
  514. iskanji        proc    near
  515.         cmp    bl,81h
  516.         jb     short ik1_ed
  517.         cmp    bl,0A0h
  518.         jae    short ik1_sk1
  519.         ret
  520. ik1_sk1:    cmp    bl,0E0h
  521.         jb    short ik1_ed
  522.         cmp    bl,0FDh
  523.         jae    short ik1_ed
  524.         ret
  525. ik1_ed:        clc
  526.         ret
  527. iskanji     endp
  528.  
  529.  
  530.  
  531. putatr        proc    near
  532.         push    di
  533.         mov    al,28h            ;attribute
  534.         mov    ah,[di]            ;color
  535.  
  536.         cmp    ah,7            ;白=>紫反転
  537.         jne    ps_sk10
  538.         mov    ah,3
  539.         jmp    ps_sk12
  540. ps_sk10:    cmp    ah,8            ;黒強調=>緑反転
  541.         jne    short ps_sk11
  542.         mov    ah,4
  543.         jmp    ps_sk12
  544. ps_sk11:    and    ah,07
  545.         cmp    ah,1            ;青=>白反転
  546.         jne    short ps_sk12
  547.         mov    ah,7
  548.  
  549. ps_sk12:    mov    di,offset color
  550.         mov    word ptr[di+1],ax
  551.         mov    ah,11h
  552.         int    91h
  553.         pop    di
  554.         ret
  555. putatr        endp
  556.  
  557.  
  558. putstr        proc    near
  559.         push    bp
  560.         push    bx
  561.         push    dx    ;+4
  562.         push    si    ;+2
  563.         push    di    ;+0
  564.         mov    bp,sp
  565.  
  566.         mov    cx,[di]
  567.         mov    ax,[si]
  568.         sub    cx,ax
  569.         jbe    ps_2
  570.         inc    cx        ;bug fixed at v0.99
  571.         inc    cx        ;
  572.         inc    cx        ;漢字コード対策用
  573.         cmp    al,0        ;
  574.         je    ps1_sk0        ;
  575.         inc    al        ;
  576. ps1_sk0:    add    dl,al
  577.         lea    di,[si+2]
  578.         shl    ax,2
  579.         add    di,ax
  580. ps1_lp1:    cmp    dl,80
  581.         jbe    ps1_sk1
  582.         sub    dl,80
  583.         inc    dh
  584. ps1_sk1:    mov    ah,14h
  585.         int    91h
  586.         mov    ah,10h
  587.         int    91h
  588. ps1_sk11:    mov    [di+3],bl
  589.         mov    [di],bh
  590.         add    di,4
  591.         inc    dl
  592.         loop    ps1_lp1
  593.  
  594. ps_2:        mov    di,[bp]
  595.         mov    cx,[di]
  596.         or    cx,cx
  597.         jne    ps_sk01
  598.         jmp    ps_sk1
  599.  
  600. ps_sk01:    mov    di,offset color
  601.         mov    ah,12h
  602.         int    91h
  603.         push    word ptr[color+1]
  604.         mov    di,[bp]
  605.  
  606.         mov    dx,[bp+4]        ;bug fixed at v1.01
  607.         mov    si,word ptr[di+2]
  608.         mov    di,word ptr[di+6]
  609. ps_lp1:
  610.         cmp    dl,80        ;bug fixed at v1.01
  611.         jb    ps_sk09        ;
  612.         test    dl,01h        ;
  613.         jne    ps_sk08        ;
  614.         inc    dl        ;
  615. ps_sk08:    sub    dl,80        ;
  616.         inc    dh        ;
  617. ps_sk09:
  618.         call    putatr
  619.         inc    di
  620.         
  621.         mov    bl,[si]            ;char:bug fixed at v1.01
  622.         xor    bh,bh
  623.         call    iskanji
  624.         jnc    ps_sk120
  625.  
  626.         mov    bh,bl
  627.         inc    si
  628.         mov    bl,[si]
  629.         call    sjisto
  630.         push    bx
  631.         mov    bl,bh
  632.         mov    bh,1
  633.         mov    ax,1300h
  634.         int    91h
  635.         pop    bx
  636.         mov    bh,3
  637.         inc    dl
  638.         dec    cx
  639.         call    putatr
  640.         inc    di
  641.  
  642. ps_sk120:    mov    ax,1300h
  643.         int    91h
  644.         inc    si
  645.         inc    dl
  646.         loop    ps_lp1
  647.  
  648.         pop    word ptr[color+1]
  649.         mov    di,offset color
  650.         mov    ah,11h
  651.         int    91h
  652.  
  653. ps_sk1:        mov    di,[bp]
  654.         mov    si,[bp+2]
  655.         mov    ax,[di]
  656.         mov    cx,[si]
  657.         mov    [si],ax
  658.         sub    cx,ax
  659.         jbe    short ps_end
  660.         inc    cx        ;bug fixed at v0.99
  661.         inc    cx        ;
  662.         mov    dx,[bp+4]
  663.         add    dl,al
  664.         lea    di,[si+2]
  665.         shl    ax,2
  666.         add    di,ax
  667. ps_lp2:        cmp    dl,80
  668.         jbe    ps3_sk1
  669.         sub    dl,80
  670.         inc    dh
  671. ps3_sk1:    mov    bl,[di+3]
  672.         mov    bh,[di]
  673.         mov    ax,1300h
  674.         int    91h
  675.         push    [di+2]
  676.         mov    byte ptr[di+3],0
  677.         mov    ah,0Fh
  678.         int    91h
  679.         pop    [di+2]
  680.         add    di,4
  681.         inc    dl
  682.         loop    ps_lp2
  683.  
  684. ps_end:        pop    di
  685.         pop    si
  686.         pop    dx
  687.         pop    bx
  688.         pop    bp
  689.         ret
  690. putstr        endp
  691.  
  692.  
  693.  
  694. clrstr        proc    near
  695.         mov    cx,[si]
  696.         or    cx,cx
  697.         je    short cs_end
  698.  
  699.         inc    cx        ;bug fixed at v0.99
  700.         inc    cx        ;
  701.         push    bx
  702.         lea    di,[si+2]
  703. cs_lp2:        cmp    dl,80
  704.         jbe    cs3_sk1
  705.         sub    dl,80
  706.         inc    dh
  707. cs3_sk1:    mov    bl,[di+3]
  708.         mov    bh,[di]
  709.         mov    ax,1300h
  710.         int    91h
  711.         mov    byte ptr[di+3],0
  712.         mov    ah,0Fh
  713.         int    91h
  714.         add    di,4
  715.         inc    dl
  716.         loop    cs_lp2
  717.         pop    bx
  718. cs_end:        ret
  719. clrstr        endp
  720.  
  721.  
  722. mode_chg    proc    near
  723.  
  724.         push    di
  725.         push    ax
  726.         push    cx
  727.  
  728.         test    modeW,01h
  729.           jz    short krn_edsk0
  730.             mov        modeW,8055h
  731.             test    bl,02h
  732.             jz        short krn_edsk0
  733.               xor    modeW,0C0h
  734.  
  735. krn_edsk0:    test    modeW,0008h
  736.         jne    short krn_edsk1
  737.           test    modeW,180h
  738.           jz    short krn_edsk1
  739.           or    bl,02h
  740.           mov    al,bl
  741.          jmp    short krn_edsk2
  742.  
  743. krn_edsk1:      and    bl,0FDh
  744.           mov    al,bl
  745. krn_edsk2:      KYB_setShift
  746.  
  747.         test    modeW,0002h
  748.         je    short krnc_sk11
  749.           mov    word ptr modeS[0],4134h        ;'漢'
  750.          jmp    short krnc_sk2
  751. krnc_sk11:      mov    word ptr modeS[0],2121h        ;'  '
  752. krnc_sk2:    test    modeW,0008h
  753.         je    short krnc_sk21
  754.           mov    modeS[4],'R'
  755.          jmp    short krnc_sk3
  756. krnc_sk21:      mov    modeS[4],' '
  757. krnc_sk3:    test    modeW,0020h
  758.         je    short krnc_sk31
  759.           mov    word ptr modeS[2],3441h        ;'全'
  760.          jmp    short krnc_sk4
  761. krnc_sk31:      mov    word ptr modeS[2],2121h        ;'  '
  762. krnc_sk4:    test    modeW,0040h
  763.         je    short krnc_sk42
  764.           mov    word ptr modeS[5],5131h        ;'英'
  765.           test    bl,01h
  766.           je    short krnc_sk411
  767.             mov    word ptr modeS[7],6742h        ;'大'
  768.            jmp    short krnc_sk5
  769. krnc_sk411:        mov    word ptr modeS[7],2E3Eh        ;'小'
  770.            jmp    short krnc_sk5
  771. krnc_sk42:    test    modeW,0080h
  772.         je    short krnc_sk43
  773.           mov    word ptr modeS[5],2B25h        ;'カナ'
  774.           mov    word ptr modeS[7],4A25h
  775.          jmp    short krnc_sk5
  776. krnc_sk43:      mov    word ptr modeS[5],2B24h        ;'かな'
  777.           mov    word ptr modeS[7],4A24h
  778.  
  779. krnc_sk5:    mov    cx,9
  780.         mov    dl,72+80h
  781.         mov    di,offset modeB
  782.         mov    ax,1F01h
  783.         int    91h
  784.         mov    ax,modeW
  785.         mov    fnc.wMode,ax
  786.         call    KKMode
  787.  
  788.         pop    cx
  789.         pop    ax
  790.         pop    di
  791.         ret
  792. mode_chg    endp
  793.  
  794. ;
  795. ;
  796. ;
  797.  
  798. KYBN_check    proc    near
  799.         KYB_matrix
  800.         KYB_check
  801.         cmp    dh,0FFh
  802.         je    krn_sk1
  803.  
  804.         cmp    dh,80h        ;PF key?
  805.         jne    kcn_sk1
  806.  
  807. ;
  808. ; For oyayubi shift
  809. ;
  810.         cmp    bh,57h        ;
  811.         je    kcn_sk0
  812.         cmp    bh,58h        ;
  813.         jne    kcn_sk01
  814. kcn_sk0:    cmp    k_kind,1    ;JIS?
  815.         je    kcn_sk01
  816.               and    modeW,803Fh
  817.               or    modeW,100h
  818.         push    dx        ; Bug Fix By Ken
  819.         push    bx
  820.         call    mode_chg
  821.         pop    bx
  822.         pop    dx
  823.         jmp    kcn_sk2        ; Bug Fix at v1.03
  824. kcn_sk01:    jmp    kcn_sk3
  825.  
  826.  
  827. kcn_sk1:    test    modeW,0020h    ;全角?
  828.         jne    kcn_sk2
  829.         test    modeW,0040h    ;英数入力モード?
  830.         jne    kcn_sk3
  831.         test    modeW,0108h    ;ローマ字入力モード or ひらがな?
  832.         jne    kcn_sk2
  833.         jmp    kcn_sk3        ;かな入力モード and かたかな.
  834.  
  835. kcn_sk2:    mov    ah,0FFh        ;変換の必要有り
  836.         ret
  837. kcn_sk3:    mov    ah,0        ;変換の必要なし
  838.         ret
  839.  
  840.  
  841. ;
  842. ; For JIS keybord
  843. ;
  844. krn_sk1:      key_test    sCAP
  845.           jz    short krn_sk2
  846.             key_break    sCAP
  847.            jmp    krn_end1
  848.  
  849. krn_sk2:      key_test    sHIRA
  850.           jz    short krn_sk3
  851.             test    bl,10h        ;CTRL
  852.             jz    short krn_sk22
  853.               test    Slock,TRUE
  854.               jnz    krn_sk21
  855.               xor    modeW,0Ch
  856. krn_sk21:          key_break    sHIRA
  857.              jmp    krn_end1
  858. krn_sk22:          test    Slock,TRUE
  859.               jnz    krn_sk23
  860.               xor    modeW,140h
  861. krn_sk23:          test    modeW,100h
  862.               je    short krn_sk21
  863.                and    modeW,813Fh
  864.              jmp    short krn_sk21
  865. krn_sk3:      key_test    sKATA
  866.           jz    short krn_sk4
  867.               test    Slock,TRUE
  868.               jnz    krn_sk32
  869.             xor        modeW,80h
  870.             test    modeW,80h
  871.             je        short krn_sk31
  872.               and    modeW,80BFh
  873.              jmp    short krn_sk32
  874. krn_sk31:          and    modeW,803Fh
  875.               or    modeW,40h
  876. krn_sk32:          key_break    sKATA
  877.               jmp    krn_end1
  878.  
  879. ;
  880. ; For oyayubi shift keybord
  881. ;
  882. krn_sk4:
  883.           key_test    sEIJI
  884.           jz    short krn_sk5
  885.             test    bl,10h        ;CTRL
  886.             jz    short krn_sk42
  887.               test    Slock,TRUE
  888.               jnz    krn_sk41
  889.               xor    modeW,0Ch
  890. krn_sk41:          key_break    sEIJI
  891.              jmp    krn_end1
  892. krn_sk42:          test    Slock,TRUE
  893.               jnz    krn_sk41
  894.               and    modeW,803Fh
  895.               or        modeW,040h
  896.              jmp    short krn_sk41
  897.  
  898. krn_sk5:      key_test    sEIKO
  899.           jz    short krn_sk6
  900.             test    Slock,TRUE
  901.             jnz        krn_sk52
  902.             test    modeW,040h
  903.             jne        krn_sk52
  904.              and        modeW,803Fh
  905.              or        modeW,080h
  906. krn_sk52:        key_break    sKATA
  907.             jmp    short krn_end1
  908.  
  909. ;
  910. ;
  911. ;
  912. krn_sk6:      key_test    sZENHAN
  913.           jz    krn_sk7
  914.               test    Slock,TRUE
  915.               jnz    krn_sk61
  916.             xor    modeW,30h
  917. krn_sk61:          key_break    sZENHAN
  918.             jmp    krn_end1
  919. krn_sk7:      key_test    sKANJI
  920.           jz    short krn_end2
  921.               test    Slock,TRUE
  922.               jnz    krn_sk71
  923.             xor        modeW,03h
  924. krn_sk71:        key_break    sKANJI
  925.  
  926. krn_end1:    call    mode_chg
  927.         mov    dx,0FFFFh
  928.         mov    bh,0FFh
  929. krn_end2:    ret
  930. KYBN_check    endp
  931.  
  932.  
  933.  
  934. enter_word    proc    near
  935.  
  936.         test    modeW,01h
  937.         jz    short ew_ent
  938.         jmp    ew_end3
  939.  
  940. ew_ent:        push    bp
  941.         push    dx
  942.         push    bx
  943.         push    ax
  944.  
  945.         mov    Slock,TRUE
  946.     mov    ax,ds
  947.     mov    byte ptr dat.wType,1
  948.     mov    word ptr dat.lpchResult,offset buf[0]
  949.     mov    word ptr dat.lpchResult+2,ax
  950.     mov    dat.cchResult,0
  951.  
  952.         getcur
  953.         push    dx
  954.         mov    bp,sp
  955.         mov    bak_xy,dx
  956.  
  957.         mov    dx,1901h
  958.         mov    di,offset dat.cchSystem
  959.         mov    word ptr[di],t1_msgL
  960.         mov    word ptr[di+2],offset t1_msg
  961.         mov    word ptr[di+6],offset t1_atr
  962.         mov    si,offset old_cchS
  963.         call    putstr
  964.  
  965. ew_lp1:        mov    dx,bak_xy
  966.         setcur
  967.         KYB_read2
  968.         mov    dx,bak_xy
  969.         cmp    bh,4Fh        ;left
  970.         jne    ew_sk1
  971.           dec    dl
  972.           cmp    dl,1
  973.           jae    ew_sk01
  974.             mov    dl,MAX_X
  975. ew_sk01:      mov    ah,14h
  976.           int    91h
  977.           cmp    bh,3
  978.           jne    ew_sk51
  979.             dec    dl
  980.           jmp    ew_sk51
  981. ew_sk1:        cmp    bh,51h        ;right
  982.         jne    ew_sk2
  983.           inc    dl
  984.           cmp    dl,MAX_X
  985.           jbe    ew_sk5
  986.             mov    dl,1
  987.           jmp    ew_sk5
  988. ew_sk2:        cmp    bh,4Dh        ;up
  989.         jne    ew_sk3
  990.           dec    dh
  991.           cmp    dh,1
  992.           jae    ew_sk5
  993.             mov    dh,MAX_Y
  994.           jmp    ew_sk5
  995. ew_sk3:        cmp    bh,50h        ;down
  996.         jne    ew_sk4
  997.           inc    dh
  998.           cmp    dh,MAX_Y
  999.           jbe    ew_sk5
  1000.             mov    dh,1
  1001.           jmp    ew_sk5
  1002. ew_sk4:        cmp    bh,72h        ;[取消]
  1003.         jne    ew_sk41
  1004.         jmp    ew_end
  1005. ew_sk41:    cmp    bh,73h        ;[実行]
  1006.         je    ew_next1
  1007. ew_sk5:        mov    ah,14h
  1008.         int    91h
  1009.         cmp    bh,3
  1010.         jne    ew_sk51
  1011.           inc    dl
  1012. ew_sk51:    mov    bak_xy,dx
  1013.         jmp    ew_lp1
  1014.  
  1015. ew_next1:    mov    dx,bak_xy
  1016.         mov    ent_xy,dx
  1017.  
  1018.         mov    dx,1901h
  1019.         mov    di,offset dat.cchSystem
  1020.         mov    word ptr[di],t2_msgL
  1021.         mov    word ptr[di+2],offset t2_msg
  1022.         mov    word ptr[di+6],offset t1_atr
  1023.         mov    si,offset old_cchS
  1024.         call    putstr
  1025.  
  1026.         xor    cx,cx
  1027. ew_lp2:        mov    dx,bak_xy
  1028.         setcur
  1029.         KYB_read2
  1030.         mov    dx,bak_xy
  1031.           push    bx
  1032.           mov    di,word ptr dat.lpchResult
  1033.           add    di,cx
  1034.           mov    ah,14h
  1035.           int    91h
  1036.           test    bh,1
  1037.           jne    ew_sk73
  1038.           mov    [di],bl
  1039.           jmp    ew_sk6001
  1040.  
  1041. ew_sk73:      push    dx
  1042.           push    bx
  1043.           inc    dl
  1044.           mov    ah,14h
  1045.           int    91h
  1046.           pop    dx
  1047.           mov    dh,bl
  1048.           mov    ah,03
  1049.           int    0AFh
  1050.           xchg    dh,dl
  1051.           mov    [di],dx
  1052.           pop    dx
  1053. ew_sk6001:      pop    bx
  1054.  
  1055.         cmp    bh,4Fh        ;left
  1056.         jne    ew_sk7
  1057.           dec    dl
  1058.           dec    cx
  1059.           cmp    cx,0
  1060.           jns    ew_sk601
  1061.           inc    dl
  1062.           inc    cx
  1063.           jmp    ew_sk9
  1064. ew_sk601:      cmp    dl,1
  1065.           jae    ew_sk61
  1066.             mov    dl,MAX_X
  1067.             dec    dh
  1068. ew_sk61:      com_atr
  1069.           cmp    byte ptr[di],3
  1070.           jne    ew_sk62
  1071.             dec    dl
  1072.             dec    cx
  1073.             com_atr
  1074. ew_sk62:      jmp    ew_sk9
  1075. ew_sk7:        cmp    bh,51h        ;right
  1076.         jne    ew_sk8
  1077.           com_atr
  1078.           inc    dl
  1079.           inc    cx
  1080.           cmp    cx,buf_size
  1081.           jbe    ew_sk701
  1082.           dec    dl
  1083.           dec    cx
  1084.           com_atr
  1085.           jmp    ew_sk9
  1086. ew_sk701:      cmp    dl,MAX_X
  1087.           jbe    ew_sk71
  1088.             mov    dl,1
  1089.             inc    dh
  1090. ew_sk71:        mov    di,offset color
  1091.             mov    ah,10h
  1092.           int    91h
  1093.           cmp    byte ptr[di],3
  1094.           jne    ew_sk9
  1095.             xor    byte ptr[di+1],28h
  1096.             mov    ah,0Fh
  1097.             int    91h
  1098.             inc    dl
  1099.             inc    cx
  1100.           jmp    ew_sk9
  1101. ew_sk8:        cmp    bh,72h        ;[取消]
  1102.         jne    ew_sk81
  1103.         jmp    ew_end
  1104. ew_sk81:    cmp    bh,73h        ;[実行]
  1105.         je    ew_next2
  1106. ew_sk9:        mov    bak_xy,dx
  1107.         jmp    ew_lp2
  1108.  
  1109. ew_next2:    mov    dat.cchResult,cx
  1110.         mov    dx,ent_xy
  1111.         setcur
  1112. ew_lp3:        com_atr
  1113.         inc    dl
  1114.         cmp    dl,MAX_X
  1115.         jbe    ew_lp31
  1116.           mov    dl,1
  1117.           inc    dh
  1118. ew_lp31:    loop    ew_lp3
  1119.  
  1120.         cmp    dat.cchResult,0
  1121.         je    ew_end
  1122.         call    KKTrans
  1123.  
  1124. ew_lp4:        mov    dx,1901h
  1125.         mov    di,offset dat.cchSystem
  1126.         mov    si,offset old_cchS
  1127.         call    putstr
  1128.         mov    dx,ent_xy
  1129.         mov    di,offset dat.cchBuf
  1130.         mov    si,offset old_cchB
  1131.         call    putstr
  1132.         mov    dx,[bp]
  1133.         setcur
  1134.  
  1135.         KYB_read2
  1136.         mov    byte ptr dat.wType,0
  1137.         mov    byte ptr dat.wScan,bh
  1138.         mov    byte ptr dat.wAscii,dl
  1139.         mov    byte ptr dat.wStatus,bl
  1140.         call    KKInOut
  1141.         cmp    dat.cchSystem,0
  1142.         jne    ew_lp4
  1143.  
  1144. ew_end:        mov    dx,1901h
  1145.         mov    si,offset old_cchS
  1146.         call    clrstr
  1147.         mov    old_cchS,0
  1148.         mov    dx,ent_xy
  1149.         mov    si,offset old_cchB
  1150.         call    clrstr
  1151.         mov    old_cchB,0
  1152.     mov    dat.cchSystem,0
  1153.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  1154.     mov    word ptr dat.lpchSystem+2,ax
  1155.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  1156.     mov    word ptr dat.lpattrSystem+2,ax
  1157.  
  1158.         pop    dx
  1159.         setcur
  1160.         mov    Slock,FALSE
  1161.         pop    ax
  1162.         pop    bx
  1163.         pop    dx
  1164.         pop    bp
  1165. ew_end3:    ret
  1166. enter_word    endp
  1167.  
  1168. ;
  1169. ;
  1170. ;
  1171. key_bios    proc    far
  1172.         cmp    ah,09h        ;key_read
  1173.         je    b09_n
  1174.         cmp    ah,07h        ;key_check
  1175.         je    b07
  1176.         jmp    cs:[vct_90h]
  1177.  
  1178. b09_n:        jmp    b09
  1179.  
  1180. b07:        push    bp    ;+16
  1181.         push    es    ;+14
  1182.         push    ds    ;+12
  1183.         push    si    ;+10
  1184.         push    di    ;+8
  1185.         push    dx    ;+6
  1186.         push    cx    ;+4
  1187.         push    bx    ;+2
  1188.         push    ax    ;+0
  1189.         mov    bp,sp
  1190.         mov    ax,cs
  1191.         mov    ds,ax
  1192.         mov    es,ax
  1193.         sti
  1194.  
  1195.         cmp    dat.cchResult,0
  1196.         je    b07_sk11
  1197.         mov    cx,cchR_p
  1198.         cmp    cx,dat.cchResult
  1199.         jae    short b07_sk1
  1200.         mov    si,word ptr dat.lpchResult
  1201.         add    si,cchR_p
  1202.         xor    dh,dh
  1203.         mov    dl,[si]
  1204.         mov    bh,byte ptr dat.wScan    ;bug fixed at v1.01
  1205.         cmp    enc_cnt,0
  1206.         je    v101_fx1
  1207.         xor    bh,bh
  1208. v101_fx1:    mov    bl,byte ptr dat.wStatus
  1209.         mov    al,byte ptr dat.cchResult
  1210.         sub    al,byte ptr cchR_p
  1211.         jmp    b07_sk3
  1212.  
  1213. b07_sk1:    mov    cchR_p,0
  1214.         mov    dat.cchResult,0
  1215.         mov    al,0
  1216.         mov    dx,0FFFFh
  1217.         mov    bx,0FF00h
  1218.         jmp    b07_sk3
  1219.  
  1220. b07_sk11:    call    KYBN_check
  1221.         cmp    word ptr dat.cchBuf,0    ;未確定文字列があるか?
  1222.         jne    b07_sk2
  1223.         cmp    dh,0FFh
  1224.         je    b07_sk3
  1225.         cmp    dx,8015h    ;単語登録?
  1226.         jne    b07_sk12
  1227.         mov    ax,0900h
  1228.         INT90H
  1229.         call    enter_word
  1230.         mov    al,0
  1231.         mov    dx,0FFFFh
  1232.         mov    bx,0FF00h
  1233.         jmp    b07_sk3
  1234. b07_sk12:    cmp    ah,0FFh        ;変換の必要ありか?
  1235.         jne    b07_sk3        ;無い。
  1236.  
  1237. b07_sk2:    mov    al,1
  1238.         mov    bx,0
  1239.         mov    dx,0
  1240.  
  1241. b07_sk3:    mov    [bp],al
  1242.         mov    [bp+2],bx
  1243.         mov    [bp+6],dx
  1244.         jmp    kr_end23
  1245.  
  1246. b09:        push    bp    ;+16
  1247.         push    es    ;+14
  1248.         push    ds    ;+12
  1249.         push    si    ;+10
  1250.         push    di    ;+8
  1251.         push    dx    ;+6
  1252.         push    cx    ;+4
  1253.         push    bx    ;+2
  1254.         push    ax    ;+0
  1255.         mov    bp,sp
  1256.         mov    ax,cs
  1257.         mov    ds,ax
  1258.         mov    es,ax
  1259.         sti
  1260.  
  1261.         mov    cx,cchR_p
  1262.         cmp    cx,dat.cchResult
  1263.         jae    short kr_sk1
  1264.         mov    si,word ptr dat.lpchResult
  1265.         add    si,cx
  1266.         xor    dh,dh
  1267.         mov    dl,[si]
  1268.         mov    bh,byte ptr dat.wScan    ;bug fixed at v1.01
  1269.         cmp    enc_cnt,0
  1270.         je    v101_fx2
  1271.         xor    bh,bh
  1272.         dec    enc_cnt
  1273. v101_fx2:    mov    bl,byte ptr dat.wStatus
  1274.         mov    [bp+2],bx
  1275.         mov    [bp+6],dx
  1276.         inc    cchR_p
  1277.         jmp    kr_end23
  1278.  
  1279. kr_sk1:        mov    cchR_p,0
  1280.         mov    dat.cchResult,0
  1281.  
  1282.         getatr
  1283.         getcur
  1284.         mov    bak_xy,dx
  1285.  
  1286.         cmp    word ptr dat.cchSystem,0
  1287.         je    kr_sk101    ;bug fixed at v1.00
  1288.         mov    dx,1901h
  1289.         mov    di,offset dat.cchSystem
  1290.         mov    si,offset old_cchS
  1291.         call    putstr
  1292.  
  1293. kr_sk101:    cmp    word ptr dat.cchBuf,0    ;bug fixed at v1.01
  1294.         je    short kr_sk11
  1295.         mov    di,offset dat.cchBuf
  1296.         mov    si,offset old_cchB
  1297.         call    putstr
  1298.  
  1299.         mov    dx,bak_xy
  1300.         add    dl,byte ptr dat.cchBufCursor
  1301.         cmp    dl,80        ;bug fixed at v1.01
  1302.         jb    kr_sk11        ;
  1303.         test    dl,01h        ;
  1304.         jne    kr_sk102    ;
  1305.         inc    dl        ;
  1306. kr_sk102:    sub    dl,80        ;
  1307.         inc    dh        ;
  1308. kr_sk11:    setcur
  1309.  
  1310. kr_lp1:        call    KYBN_check
  1311.         cmp    dh,0FFh            ;No key in?
  1312.         jne    short kr_sk2        ;No.
  1313.         cmp    byte ptr[bp],1        ;No wait key in?
  1314.         jne    short kr_lp1        ;No.
  1315. kr_lp11:    cmp    word ptr dat.cchBuf,0
  1316.         jne    short kr_lp1
  1317.  
  1318. kr_lp12:
  1319.         cmp    bh,57h            ;変換,無変換を返さない
  1320.         je    kr_lp1            ;ようにした  by Ken
  1321.         cmp    bh,58h
  1322.         je    kr_lp1
  1323.         mov    [bp+2],bx
  1324.         mov    [bp+6],dx
  1325.         jmp    kr_end23
  1326.  
  1327. kr_sk2:        push    ax
  1328.         mov    ax,0900h        ;dummy read
  1329.         INT90H
  1330.         pop    ax
  1331.         cmp    word ptr dat.cchBuf,0    ;未確定文字列があるか?
  1332.         jne    kr_sk22
  1333.         cmp    dx,8015h    ;単語登録?
  1334.         jne    kr_sk21
  1335.         call    enter_word
  1336.         mov    dx,0FFFFh
  1337.         mov    bx,0FF00h
  1338.         jmp    kr_lp1
  1339. kr_sk21:    cmp    ah,0FFh        ;変換の必要ありか?
  1340.         jne    kr_lp12        ;無。
  1341.  
  1342. kr_sk22:    mov    byte ptr dat.wType,0
  1343.         mov    byte ptr dat.wScan,bh
  1344.         mov    byte ptr dat.wAscii,dl
  1345.         mov    byte ptr dat.wStatus,bl
  1346.  
  1347.         mov    si,offset enc_str    ;bug fixed at v1.00
  1348.         mov    enc_cnt,1
  1349.         mov    [si],dl
  1350.         inc    si
  1351.  
  1352. ;Bug Fixed by K.MIYAZAKI
  1353. ;   Thanks a lot!!
  1354. ;
  1355.                 mov     ah,1eh
  1356.                 cmp     bh,4dh
  1357.                 je      ken_apn2
  1358.                 mov     ah,1dh
  1359.                 cmp     bh,4fh
  1360.                 je      ken_apn2
  1361.                 mov     ah,1fh
  1362.                 cmp     bh,50h
  1363.                 je      ken_apn2
  1364.                 mov     ah,1ch
  1365.                 cmp     bh,51h
  1366.                 je      ken_apn2
  1367.  
  1368.         mov    ah,7Fh
  1369.         cmp    bh,4Bh
  1370.         je    ken_apn2
  1371.         mov    ah,0Bh
  1372.         cmp    bh,4Eh
  1373.         je    ken_apn2
  1374.  
  1375.                 mov     ah,1bh
  1376.                 cmp     bh,48h
  1377.                 je      ken_apn2
  1378.                 cmp     bh,72h
  1379.                 je      ken_apn2
  1380.                 cmp     bh,73h
  1381.                 je      ken_apn2    ;bug fixed at v1.04a
  1382.  
  1383.         cmp    dh,80h        ;bug fixed at v1.04a
  1384.         jne    ken_apn5    ;
  1385.         mov    ah,1Eh        ;
  1386.         cmp    bh,58h        ;
  1387.         je    ken_apn2    ;
  1388.         mov    ah,1Fh        ;
  1389.         cmp    bh,57h        ;
  1390.         jne    ken_apn5    ;
  1391.  
  1392.  
  1393. ken_apn2:
  1394.             cmp     old_cchS,0
  1395.                 jne     ken_apn3
  1396.                 cmp     old_cchB,0
  1397.                 jne     ken_apn3
  1398.                 jmp     kr_lp12
  1399. ken_apn3:       
  1400.                 mov     byte ptr dat.wAscii,ah
  1401.  
  1402.                 push    ax
  1403.                 push    bx
  1404.                 push    dx
  1405. ken_apn31:      mov     ah,07h
  1406.                 INT90H
  1407.                 cmp     dh,0ffh
  1408.                 je      ken_apn4
  1409.                 cmp     bh,byte ptr dat.wScan
  1410.                 jne     ken_apn4
  1411.                 mov     ax,0900h
  1412.                 INT90H
  1413.         mov    [si],dl        ;bug fixed at v1.00
  1414.         inc    si
  1415.         inc    enc_cnt
  1416.         jmp    ken_apn31
  1417.  
  1418. ken_apn4:       
  1419.                 pop     dx
  1420.                 pop     bx
  1421.                 pop     ax
  1422. ken_apn5:       
  1423. ;
  1424. ;
  1425. ;
  1426.  
  1427.         call    KKInOut
  1428.  
  1429.         cmp    [dat.cchResult],0    ;No result string?
  1430.         jne    kr_sk3            ;No.
  1431.  
  1432.         mov    dx,1901h
  1433.         mov    di,offset dat.cchSystem
  1434.         mov    si,offset old_cchS
  1435.         call    putstr
  1436.  
  1437.         mov    dx,bak_xy
  1438.         mov    di,offset dat.cchBuf
  1439.         mov    si,offset old_cchB
  1440.         call    putstr
  1441.  
  1442.         mov    dx,bak_xy
  1443.         add    dl,byte ptr dat.cchBufCursor
  1444.         cmp    dl,80        ;bug fixed at v1.01
  1445.         jb    kr_sk23        ;
  1446.         test    dl,01h        ;
  1447.         jne    kr_sk230    ;
  1448.         inc    dl        ;
  1449. kr_sk230:    sub    dl,80        ;
  1450.         inc    dh        ;
  1451. kr_sk23:    setcur
  1452.         jmp    kr_lp1
  1453.  
  1454. kr_sk3:
  1455.         cmp    dat.cchBuf,0        ;bug fixed at v1.00
  1456.         jne    kr_sk301
  1457.  
  1458.         mov    di,word ptr[dat.lpchResult]
  1459.         add    di,dat.cchResult
  1460.         dec    di
  1461.         mov    si,offset enc_str
  1462.         mov    cx,enc_cnt
  1463.  
  1464.         mov    al,byte ptr dat.wAscii    ;キーコードの復元が必要か?
  1465.         cmp    al,[di]
  1466.         jne    kr_sk301    ;No.
  1467.  
  1468.         repnz    movsb
  1469.         mov    cx,dat.cchResult
  1470.         add    cx,enc_cnt
  1471.         dec    cx
  1472.         mov    dat.cchResult,cx
  1473.  
  1474.  
  1475. kr_sk301:    mov    si,word ptr[dat.lpchResult]
  1476.         cmp    dl,[si]
  1477.         je    short kr_sk31
  1478.  
  1479. kr_sk4:        mov    dl,[si]        ;bug fixed at v1.01
  1480.         xor    dh,dh
  1481.         xor    bh,bh
  1482.  
  1483. kr_sk31:    mov    [bp+2],bx
  1484.         mov    [bp+6],dx
  1485.         jmp    kr_end1
  1486.  
  1487.         cmp    old_cchS,0
  1488.         je    kr_end1
  1489.         mov    dx,1901h
  1490.         mov    si,offset old_cchS
  1491.         call    clrstr
  1492.         mov    old_cchS,0
  1493. kr_end1:    cmp    old_cchB,0
  1494.         je    kr_end12
  1495.         mov    dx,bak_xy
  1496.         mov    si,offset old_cchB
  1497.         call    clrstr
  1498.         mov    old_cchB,0
  1499. kr_end12:    mov    dx,bak_xy
  1500.         setcur
  1501.  
  1502. kr_end2:    mov    cchR_p,1
  1503.         mov    ax,dat.cchResult    ;bug fixed at v1.01
  1504.         sub    ax,enc_cnt
  1505.         dec    ax
  1506.         jns    kr_end20
  1507.         xor    ax,ax
  1508. kr_end20:    mov    enc_cnt,ax
  1509. kr_end23:    pop    ax
  1510.         pop    bx
  1511.         pop    cx
  1512.         pop    dx
  1513.         pop    di
  1514.         pop    si
  1515.         pop    ds
  1516.         pop    es
  1517.         pop    bp
  1518.         xor    ah,ah
  1519.         iret
  1520. key_bios    endp
  1521.  
  1522. ;
  1523. ;
  1524. ;
  1525.         public    oak_set
  1526. oak_set        proc    near
  1527.         mov    ax,cs
  1528.         mov    ds,ax
  1529.         mov    es,ax
  1530.         mov    word ptr modeB[0],offset modeS    ;System line
  1531.         mov    word ptr modeB[2],ax
  1532.         mov    word ptr modeB[4],offset modeA
  1533.         mov    word ptr modeB[6],ax
  1534.         mov    ah,0
  1535.         int    91h
  1536.  
  1537.         mov    di,offset pf_key_tbl
  1538.         xor    cx,cx
  1539. key_set:    mov    dx,word ptr [di]
  1540.         cmp    dx,0
  1541.         je    key_st_e
  1542.         add    di,2
  1543.         mov    cl,[di]
  1544.         inc    di
  1545.         mov    ax,0E00h
  1546.         int    90h
  1547.         add    di,cx
  1548.         jmp    key_set
  1549. key_st_e:
  1550.         KYB_KindKb
  1551.         mov    k_kind,al
  1552.  
  1553.         call    KKOpen            ;oak/2 open
  1554.  
  1555.         mov    cx,o_msgL        ;opening mssege
  1556.         mov    di,offset o_msg
  1557.         mov    ah,1Eh
  1558.         int    91h
  1559.  
  1560.         mov    ax,0F900h        ; key bios status dsp off
  1561.         int    90h
  1562.  
  1563.         mov    cx,9            ;print mode
  1564.         mov    dl,72+80h
  1565.         mov    di,offset modeB
  1566.         mov    ax,1F01h
  1567.         int    91h
  1568.         mov    ah,07h            ;set shift mode
  1569.         int    90h
  1570.         mov    ax,modeW
  1571.         mov    fnc.wMode,ax
  1572.         call    KKMode
  1573.         mov    byte ptr dat.wType,0        ;リフレッシュ
  1574.         mov    byte ptr dat.wScan,0
  1575.         mov    byte ptr dat.wAscii,0
  1576.         mov    byte ptr dat.wStatus,0
  1577.         call    KKInOut
  1578.         mov    dat.cchResult,0
  1579.         mov    dat.cchSystem,0
  1580.         mov    dat.cchBuf,0
  1581.         mov    old_cchS,0
  1582.         mov    old_cchB,0
  1583.         mov    cchR_p,0
  1584.  
  1585.         get_vct90h
  1586.         mov    dx,offset key_bios
  1587.         mov    ax,2590h
  1588.         int    21h
  1589.  
  1590.         ret
  1591. oak_set        endp
  1592.  
  1593.         public    oak_reset
  1594. oak_reset    proc    near
  1595.         set_vct90h
  1596.         call    KKClose
  1597.         mov    ax,0F901h        ;ステータス表示on
  1598.         int    90h
  1599.         ret
  1600. oak_reset    endp
  1601.  
  1602. _TEXT    ENDS
  1603.         end
  1604.