Subversion Repositories pentevo

Rev

Rev 627 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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