Subversion Repositories pentevo

Rev

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

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