Subversion Repositories pentevo

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. ;.Z80
  2. ;#INCLUDE "ALLVARS.ASH"
  3.  
  4. CI_INIT:    JP      _CI_INIT
  5. CI_IN:      JP      _CI_
  6. ;//CI_OUT
  7. CI_IOCTL:   JP      _IOCTL
  8.  
  9. ;               include kb_sh.a80;#INCLUDE "KB_SH.INC"
  10.  
  11. ;// TEMPORARY
  12. ;EXTRN        KB_ENCODE,KB_INIT,KB_SCAN,KB_GET_SHIFTS,KB_SET_RUS
  13.  
  14. ;// END OF TEMPORARY
  15.  
  16. _CI_INIT:    XOR     A
  17.              LD      (KS_UND),A
  18.              LD      (KS_UND+1),A
  19.              LD      (KS_UNDS),A
  20.              LD      (KS_UNDS1),A
  21.              JP      K_INIT
  22.  
  23. CI_CVT:      LD      D,A
  24.              BIT     _KS_ALT,E
  25.              SCF
  26.              RET     NZ
  27. CIC_2:       LD      D,A
  28.              BIT     7,A
  29.              JR      Z,CIC_1
  30.              RES     7,D
  31.              XOR     A
  32.              CALL    CI_ENC1
  33. CIC_21:      INC     L
  34.              JR      Z,CIC_2
  35.              JR      CIC_RETA
  36. CIC_1:       LD      HL,CIC_TBL-1
  37.              LD      B,-1
  38. CIC_L1:      INC     HL
  39.              INC     B
  40.              CP      (HL)
  41.              INC     HL
  42.              JR      C,CIC_L1
  43.              CP      (HL)
  44.              JR      NC,CIC_L1
  45.              LD      C,0
  46.              BIT     _KS_CTRL,E
  47.              LD      A,3
  48.              JR      NZ,CIC_ST
  49.              BIT     _KS_RUS,E
  50.              JR      Z,CIC_S1
  51.              LD      C,4
  52. CIC_S1:      BIT     _KS_SHFT,E
  53.              LD      A,1
  54.              JR      NZ,CIC_ST
  55.              INC     A
  56.              BIT     _KS_SHFT2,E
  57.              JR      NZ,CIC_ST
  58.              XOR     A
  59. CIC_ST:      OR      C
  60.              ADD     A,A
  61.              ADD     A,A
  62.              ADD     A,A
  63.              ADD     A,A
  64.              OR      B
  65.              CP      32H
  66.              JR      NZ,CIC_CTRL
  67.              LD      A,1FH
  68.              AND     D
  69.              RET
  70.  
  71. CIC_DOL_:    LD      A,D
  72.              BIT     _KS_CAPS,E
  73.              RET     Z
  74. CIC_DOS:     ADD     A,20H
  75.              RET
  76.  
  77. CIC_DOS_:    LD      A,D
  78.              BIT     _KS_CAPS,E
  79.              RET     NZ
  80.              JR      CIC_DOS
  81.  
  82. CIC_RET:     LD      A,D
  83. CIC_RETA:    OR      A
  84.              RET     NZ
  85.              SCF
  86.              RET
  87.  
  88. CIC_ENC:     CALL    CI_ENC
  89.              INC     L
  90.              JR      NZ,CIC_RETA
  91.              JR      CIC_2
  92.  
  93. CIC_CTRL:    CP      02H
  94.              JR      Z,CIC_DOL_
  95.              CP      12H
  96.              JR      Z,CIC_DOS_
  97.              LD      HL,CIC_TBL1
  98.              LD      BC,CIC_TBL1S
  99.              CPIR
  100.              JR      NZ,CIC_RET
  101.              LD      A,C
  102.              CP      8
  103.              JR      C,CIC_TRY
  104. CIC_3:       CALL    CI_ENC
  105.              JR      CIC_21
  106.  
  107. CIC_TRY:     PUSH    AF
  108.              OR      1
  109.              CALL    CIC_ENC
  110.              POP     HL
  111.              RES     0,H
  112.              JR      C,CIC_NOLIT
  113.              BIT     7,A
  114.              JR      NZ,CIC_LIT
  115.              CP      "A"
  116.              BIT     _KS_RUS,E
  117.              JR      Z,CIC_51
  118.              CP      "@"
  119. CIC_51:      JR      C,CIC_NOLIT
  120.              CP      0X5A+1;'Z'+1
  121.              BIT     _KS_RUS,E
  122.              JR      Z,CIC_5
  123.              CP      60H
  124. CIC_5:       JR      NC,CIC_NOLIT
  125. CIC_LIT:     LD      C,A
  126.              LD      A,E
  127.              AND 0X11;    _KS_SHFT<<1+_KS_CAPS<<1;(1 SHL _KS_SHFT)+(1 SHL _KS_CAPS)
  128.              LD      A,C
  129.              RET     PO
  130. CIC_4:       LD      A,H
  131.              JR      CIC_3
  132.  
  133. CIC_NOLIT:   OR      A
  134.              BIT     _KS_SHFT,E
  135.              JR      NZ,CIC_RETA
  136.              JR      CIC_4
  137.  
  138. CI_ENC:      INC     A
  139. CI_ENC1:     PUSH    DE
  140.              PUSH    AF
  141.              CALL    KB_ENCODE
  142.              POP     AF
  143.              PUSH    HL
  144.              LD      C,A
  145.              ADD     A,A
  146.              ADD     A,6
  147.              CALL    ADD_HL_A;##
  148.              LD      B,(HL)
  149.              INC     HL
  150.              LD      H,(HL)
  151.              LD      L,B
  152.              EX      (SP),HL
  153.              LD      A,C
  154.              SRL     A
  155.              SRL     A
  156.              CALL    ADD_HL_A
  157.              LD      A,C
  158.              AND     3
  159.              LD      B,A
  160.              LD      A,(HL)
  161.              JR      Z,CIE_1
  162. CIE_L1:      RRA
  163.              RRA
  164.              DJNZ    CIE_L1
  165. CIE_1:       AND     3
  166.              JR      Z,CIE_PROC
  167.              DEC     A
  168.         LD L,0
  169.              JR      Z,CIE_2
  170.              DEC     L
  171. CIE_2:       EX      (SP),HL
  172.              LD      A,(HL)
  173.              INC     HL
  174.              OR      A
  175.              JR      NZ,CIE_SCAN
  176.              LD      A,D
  177.              CP      "A"
  178.              JR      C,CIE_B2
  179.              CP      "a"
  180.              JR      C,CIE_B9
  181.              SUB     20H
  182. CIE_B9:      SUB     0X41-0X30;'A'-'0'
  183. CIE_B2:      SUB     "0"
  184. CIE_B1:      CALL    ADD_HL_A
  185.              LD      A,(HL)
  186. CIE_DONE:    POP     HL
  187.              POP     DE
  188.              JP      CIC_RETA
  189.  
  190. CIE_SCAN:    LD      C,A
  191.              BIT     7,C
  192.              JR      Z,CS__2
  193.              SCF
  194. CS__2:         RES     7,C
  195.              LD      E,C
  196.              LD      B,0
  197.              LD      A,D
  198.              CPIR
  199.              DEC     HL
  200.              JR      NZ,CIE_B3
  201.              LD      A,E
  202.              JR      CIE_B1
  203. CIE_B3:      JR      C,CIE_DONE
  204.              XOR     A
  205.              JR      CIE_DONE
  206. CIE_PROC:    POP     HL
  207.              LD      A,H
  208.              OR      L
  209.              JR      Z,CIE_INDIR
  210.              LD      A,D
  211.              CALL    INDIR
  212.              POP     DE
  213.              JP      CIC_RETA
  214.  
  215. CIE_INDIR:   LD      A,C
  216.              DEC     A
  217.              CALL    CI_ENC1
  218.              POP     DE
  219.              INC     L
  220.              DEC     L
  221.              RET     NZ
  222.              XOR     20H
  223.              JP      CIC_RETA
  224.  
  225. INDIR:       JP      (HL)
  226. CLE_NONE:    XOR     A
  227.              POP     DE
  228.              RET
  229.  
  230. CIC_TBL:     DB      0,0X20+1;   " "+1
  231.              DB      "0",0X39+1; '9'+1
  232.              DB      "A",0X5A+1; 'Z'+1
  233.              DB      "a",0X7A+1; 'Z'+1
  234.              DB      0,   255
  235.  
  236. CIC_TBL1:    DB      63H, 23H, 62H, 22H, 64H, 24H, 61H, 21H
  237.              DB      33H, 34H, 14H, 51H, 31H, 11H, 30H, 53H
  238.              DB      43H, 13H, 03H, 52H, 42H, 54H, 44H
  239. CIC_TBL1S    EQU     $-CIC_TBL1
  240.  
  241.  
  242. _RK_    BIT _FLEX_C,(IX-_FLAG)        ; READ KEY FOR CP/M
  243.         JR  Z,DO_CI
  244.         CALL _IOCTL
  245.         OR   A
  246.         JR  NZ,DO_CI
  247.         LD   A,1
  248.         RST  18H
  249.         PUSH AF
  250.         CALL CUR_AC;##
  251.         POP  AF
  252.         RST  18H
  253.         EI
  254.         CALL DO_CI
  255.         PUSH AF
  256.         LD   A,1
  257.         RST  18H
  258.         PUSH AF
  259.         CALL CUR_PA;##
  260.         POP  AF
  261.         RST  18H
  262.         EI
  263.         POP AF
  264.         RET
  265.  
  266. DO_CI:       EI
  267.              HALT
  268.              CALL    _CI_
  269.              LD      (IX-_KS_UND),0
  270.              LD      (IX-_KS_UNDS),0
  271.              RET
  272.  
  273. _CI_        
  274.                 LD      (IX-_TMP_W),1
  275. _CI1        
  276.                 LD      A,(KS_UND)
  277.              LD      (IX-_KS_UND),0
  278.              OR      A
  279.              RET     NZ
  280. _L1:         LD      E,(IX-_TMP_W)
  281.              CALL    KB_SCAN
  282.              OR      A
  283.              LD      A,0
  284.              SCF
  285.              RET     NZ
  286.              LD      A,E
  287.              XOR 0X10;    _KS_CAPS<<1;1 SHL _KS_CAPS
  288.              LD      E,A
  289.              LD      A,L
  290.              LD      (KS_UNDS1),A
  291. _1:          CALL    CI_CVT
  292.              LD      (IX-_KS_UND+1),E
  293.              LD      (IX-_KS_UNDS),D
  294.              RET     NC
  295.              LD      A,E
  296.              AND     _KS_CTRL<<1+_KS_ALT<<1;(1 SHL _KS_CTRL) + (1 SHL _KS_ALT)
  297.              CP      _KS_CTRL<<1+_KS_ALT<<1;(1 SHL _KS_CTRL) + (1 SHL _KS_ALT)
  298.              JR      Z,CHK_CA
  299.              CP      _KS_ALT<<1;1 SHL _KS_ALT
  300.              JR      Z,_L1_
  301.              LD      A,D
  302.              CP      "z"
  303.              JR      Z,RUS_LAT_SW
  304.              CP      "o"
  305.              JR      Z,TRY_RES
  306.              CP      "n"
  307.              JR      NZ,_2
  308.              LD      E,1
  309.              CALL    KB_SCAN
  310.              JR      _L1
  311. _2:          SUB     "p"
  312.              JR      C,_L1_
  313.              CP      0X5A-0X50+1;'Z'-'P'+1
  314.              JR      NC,_L1_
  315.              LD      HL,_CI_TAB
  316.              CALL    ADD_HL_A
  317.              LD      A,(HL)
  318.              OR      A
  319.              RET     NZ
  320. _L1_:        BIT     1,(IX-_TMP_W)
  321.              JR      Z,_L1
  322.              XOR     A
  323.              RET
  324.  
  325. CHK_CA:      LD      A,D
  326.              CP      0X2B+0X80;'+'+80H
  327.              JR      Z,CHK_TUR
  328.              CP      0X2D+0X80;'-'+80H
  329.              JR      Z,CHK_NOR
  330.              CP      0X2E+0X80;'.'+80H
  331.              JP      Z,0
  332.              CP      "y"
  333.              JR      NZ,_L1
  334.              JP      0
  335. CHK_TUR:     SET     3,(IX-_SYS_P)
  336.              JR      CT_SET
  337. CHK_NOR:     RES     3,(IX-_SYS_P)
  338. CT_SET:      CALL    SET_SYS;##
  339.              JR      _L1
  340.  
  341. TRY_RES:     BIT     _BREAK,(IX-_FLAG1)
  342.              JR      NZ,_L1_
  343.              JP      ENTR2;##
  344.  
  345. RUS_LAT_SW:
  346.              LD      A,14
  347.              BIT     _KS_RUS,E
  348.              RET     NZ
  349.              INC     A
  350.              RET
  351.  
  352. _CI_TAB:     DB      5,24,19,4,18,3,0,0,15,7
  353.  
  354. _IOCTL:      LD      (IX-_TMP_W),0
  355.              CALL    _CI1
  356.              JR      C,ST_KEY_NO
  357.              LD      (KS_UND),A
  358.              LD      A,-1
  359.              RET
  360. ST_KEY_NO:   XOR     A
  361.              RET
  362.  
  363.  
  364. SC2OLD:      LD      A,(KS_UNDS)
  365.              OR      A
  366.              LD      H,0
  367.              SCF
  368.              RET     Z
  369.              CP      "x"
  370.              JR      Z,IS_INS
  371.              CP      "a"
  372.              JR      C,S2O_1
  373.              CP      "o"
  374.              JR      NC,S2O_1
  375.              SUB     "a"
  376.              LD      HL,S20T_1
  377.              CALL    ADD_HL_A
  378.              LD      H,(HL)
  379.              LD      D,0C0H
  380.              RET
  381. S20T_1:      DB      3,0BH,13H,1BH,23H,24H,1CH,14H,0CH,4
  382.  
  383. S2O_1:       LD      HL,OLDSC_T
  384.              LD      BC,OLDSC_TL
  385.              CPIR
  386.              CALL    NZ,TRY_ALT
  387.              LD      A,OLDSC_TL
  388.              SUB     C
  389.              LD      H,A
  390. PAFRET:      LD      D,0
  391.              OR      A
  392.              BIT     _KS_SHFT,E
  393.              JR      Z,PFR_1
  394.              SET     7,D
  395.              RET
  396. PFR_1:       BIT     _KS_CTRL,E
  397.              RET     Z
  398.              SET     7,D
  399.              SET     6,D
  400.              RET
  401.  
  402. IS_INS:      LD      (IX-_KS_UND),"^"
  403.              LD      H,33H
  404.              RET
  405.  
  406. TRY_ALT:     LD      A,(KS_UNDS1)
  407.              LD      HL,OLDSC_T
  408.              LD      BC,OLDSC_TL
  409.              CPIR
  410.              RET     Z
  411.              POP     AF
  412.              LD      H,3FH
  413.              OR      A
  414.              RET
  415.  
  416. OLDSC_T:     DB      "AQ10P",0DH," ZSW29OL",0,"XDE38IKMCFR47UJNVGT56YHB"
  417.              DB      "qrpzs",9,0,0,8,1BH,0X2A+80H,0,0X2F+80H,",",0X2D+80H
  418.              DB      "?.",0X2B+80H,"[`=;]:",0X22,"_"
  419. OLDSC_TL     EQU     $-OLDSC_T
  420.  
  421. _RKNW_:       LD      (IX-_TMP_W),0
  422.              LD      A,(KS_UNDS)
  423.              OR      A
  424.              CALL    Z,DO_L1
  425.              LD      A,1
  426.              LD      C,0
  427.              JR      C,PAFRET
  428.              CALL    SC2OLD
  429.              LD      (IX-_KS_UNDS),0
  430.              LD      A,1
  431.              LD      C,0
  432.              JR      C,KNW_NO
  433.              XOR     A
  434.              LD      C,(IX-_KS_UND)
  435. KNW_NO:      LD      L,1
  436.              LD      (IX-_KS_UND),0
  437.              RET
  438.  
  439. DO_L1:       CALL    _L1
  440.              LD      (IX-_KS_UND),0
  441.              RET     C
  442.              LD      (KS_UND),A
  443.              RET
  444.  
  445. _KBT_        LD      (IX-_TMP_W),0
  446.              LD      A,(KS_UNDS)
  447.              OR      A
  448.              CALL    Z,DO_L1
  449.              LD      A,1
  450.              LD      L,A
  451.              LD      E,(IX-_KS_UND+1)
  452.              JR      C,PAFRET1
  453.              XOR     A
  454. PAFRET1:     JP      PAFRET
  455.  
  456. IBMKEYB_T:  JP      _KB_INT;##
  457.              JP      _RK_
  458.              JP      _IOCTL
  459.              JP      _RKNW_
  460.              JP      _KBT_
  461.              JP      KB_INIT
  462.