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. ;#INCLUDE "ALLVARS.ASH"
  5.  
  6. _KB_INT:        RET
  7.  
  8. KB_INIT:       JP      _KB_INIT
  9. KB_SCAN:       JP      _KB_SCAN
  10. KB_ENCODE:     JP      _KB_ENCODE
  11. KB_GET_SHIFTS: JP      _KB_GET_SH
  12. KB_SET_RUS:    JP      _KB_SET_RUS
  13.  
  14. ;#INCLUDE "KB_SH.INC"
  15.  
  16. KB_TIME         EQU K_5CNT;#DEFINE KB_TIME K_5CNT
  17. _KB_TIME        EQU _K_5CNT;#DEFINE _KB_TIME _K_5CNT
  18.  
  19. ;#PRAGMA LOCAL
  20.  
  21. ;----------------------------------------
  22. ; LOCALS
  23. _IN:      EX   AF,AF'
  24.           LD   A,55H
  25.           IN   A,(0FEH)
  26.           EX   AF,AF'
  27.            IN   A,(0FEH)
  28.            RET
  29.  
  30. _IN        MACRO V
  31.            LD   A,V
  32.            CALL _IN
  33.            ENDM
  34.  
  35. ;----------------------------------------
  36. ; INIT KEYBOARD (STANDARD ENTRY)
  37. _KB_INIT:  _IN  8
  38.            LD   A,8AH
  39.            IN   A,(0FEH)
  40.            _IN  1
  41.            CP   10H
  42.            JR   NC,ABORT
  43.            XOR  A
  44.            RET
  45. ABORT:     CALL PRN
  46.            DB   1BH,"M1VE31 not installed",0DH,0AH,0
  47.            DI
  48.            HALT
  49. ;----------------------------------------
  50. ; SCAN KEYBOARD
  51. ; IN  E&1 - WAIT FOR SYM, E&2 - WAIT FOR SHIFTS
  52. ;
  53. ; RET A-FF NO,0-KEY, 1-SHIFT
  54. ;     L-CHAR/0
  55.  
  56. _KB_SCAN:
  57.         BIT     _INTOF,(IX-_FLAG1)
  58.         JR      Z,__NOCHECK
  59.         LD      A,(IX-_TIME_C)
  60.         CP      (IX-_KB_TIME)
  61.         LD      (KB_TIME),A
  62.         JR      Z,__NOALL
  63. __NOCHECK:
  64.  
  65.            LD   BC,0FEH
  66.            IN   A,(C)
  67.            LD   B,40H
  68.            IN   L,(C)
  69.            LD   B,80H
  70.            IN   H,(C)
  71.            PUSH DE
  72.            LD   DE,(KS_ASH)
  73.            LD   (KS_ASH),HL
  74.            OR   A
  75.            SBC  HL,DE
  76.            POP  DE
  77.            JR   NZ,__SHIFT
  78.            OR   A
  79.            JR   NZ,__SYM
  80. __NOALL:   INC  E
  81.            DEC  E
  82.            JR   NZ,_KB_SCAN
  83.            LD   A,-1
  84. __R1:      LD   L,0
  85. __RET:     LD   DE,(KS_ASH)
  86. _RET1:     EX   AF,AF'
  87.           LD   A,D
  88.           AND  15
  89.           OR   E
  90.           LD   E,A
  91.           EX   AF,AF'
  92.            RET
  93.  
  94. __SYM:     LD   L,A
  95.            LD   A,0
  96.            JR   __RET
  97.  
  98. __SHIFT:   OR   A
  99.            JR   NZ,__SYM
  100.            BIT  1,E
  101.            JR   Z,_KB_SCAN
  102.            LD   A,1
  103.            JR   __R1
  104.  
  105. ;-------------------------------
  106.  
  107. _KB_GET_SH:_IN  9
  108.            LD   E,A
  109.            _IN  49H
  110.            LD   D,A
  111.            LD   (KS_ASH),DE
  112.            XOR  A
  113.            JR   _RET1
  114.  
  115.  
  116. ;---------------------------------------
  117. _KB_SET_RUS:
  118.            OR   A
  119.            LD   A,55H
  120.            IN   A,(0FEH)
  121.            LD   A,0BH
  122.            JR   Z,KSR_1
  123.            DEC  A
  124. KSR_1:       IN   A,(0FEH)
  125.            JP   _KB_GET_SH
  126.  
  127. ;---------------------------------------
  128. _KB_ENCODE:LD   HL,ENC_TABL
  129.            XOR  A
  130.            RET
  131. ENC_TABL
  132.         ENT_DEF ED_PROC,ED_CHAR,ED_CHAR,ED_CHAR
  133.            ENT_DEF ED_PROC,ED_PROC,ED_PROC,ED_PROC
  134.            ENT_DEF ED_PROC,ED_CHAR,ED_CHAR,ED_CHAR
  135.            ENT_DEF ED_CHAR,ED_CHAR,ED_PROC,ED_PROC
  136.  
  137.            DB  0,0
  138.  
  139.            DW   PALT                         ; HI BIT ENCODER
  140.            DW   TRP                          ; RUS      PUNCT
  141.            DW   TRSP                         ; RUS+SHFT PUNCT
  142.            DW   TRLET                        ; RUS      LETTER
  143.  
  144.            DW   0                            ; RUS+SHFT LETTER
  145.            DW   NRET                         ;          OTHERS
  146.            DW   NRET                         ; SHFT     OTHERS
  147.            DW   NRET                         ; RUS      OTHERS
  148.  
  149.            DW   NRET                         ; RUS+SHFT OTHERS
  150.            DW   TCCTRL                       ; CTRL     CONTROLL
  151.            DW   TSDIG                        ; SHFT     DIGITS
  152.            DW   TCDIG                        ; CTRL     DIGITS
  153.  
  154.            DW   TRSDIG                       ; RUS+SHFT DIGITS
  155.            DW   TSP                          ; SHFT     PUNCT
  156.            DW   PCP                          ; CTRL     PUNCT
  157.            DW   NRET                         ; CTRL     OTHERS
  158.  
  159.  
  160. PALT:      LD   L,-1
  161.            BIT  B_KS_NUM,(IX-_KS_ASH)
  162.            RET  NZ
  163.            CP   "."
  164.            JR   NZ,PALT_1
  165.            LD   A,"y"
  166.            RET
  167. PALT_1:       CP   "0"
  168.            RET  C
  169.            CP   0X39+1;'9'+1
  170.            RET  NC
  171.            LD   HL,TALT-0X30;'0'
  172.            CALL ADD_HL_A
  173.            LD   A,(HL)
  174. SRET:      LD   L,-1
  175.            RET
  176. NRET:      XOR  A
  177. CRET:      LD   L,0
  178.            RET
  179. TALT:      DB   "xwqur",0,"svpt"
  180.  
  181. PCP:       CP   "@"
  182.            JR   C,NRET
  183.            AND  1FH
  184.            LD   L,0
  185.            RET
  186.  
  187. TRP:       DB 0X88,     "`;',.[]",0X5C,"(v|b`h",0X7F,0
  188. ;ED_tab "`;',.[]",0X5C <"(v|b`h", 127,0> 1
  189. TRSP:      DB 0X8A,     "`;',.[]=",0X5C,"/",")V",0X5C,"B@H_+",0,"?"
  190. ;ED_tab "`;',.[]=",0X5C,"/" <")V0x5CB@H_+",0,"?"> 1
  191. TRLET:     DB 0,        "fiswuapr{oldxt}zjkyegmc~nq"
  192. ;ED_tab "fiswuapr{oldxt}zjkyegmc~nq"
  193. TCCTRL:    DB 0X81,     0X0D,0X0A
  194. ;ED_tab 0dh 0ah 1
  195. TSDIG:     DB 0,        ")!@#$%^&*("
  196. ;ED_tab "")!@#$%^&*("
  197. TCDIG:     DB 1,        "6",0X1E
  198. ;ED_tab "6" 1eh
  199. TRSDIG:    DB 0,        "%!",0X22,"/$:,.;?"
  200. ;ED_tab "%!",0X22,"/$:,.;?"
  201. TSP:       DB 0X0B,     "`;',.[]-=",0X5C,"/","~:",0X22,"<>{}_+|?"
  202. ;ED_tab "`;',.[]-=",0X5C,"/" "~:",0X22,"<>{}_+|?"
  203.