Subversion Repositories pentevo

Rev

Rev 627 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
627 savelij 1
 
1120 savelij 2
; LAST UPDATE: 18.10.2023 savelij
3
 
627 savelij 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
1120 savelij 161
           BIT  B_KS_NUM,(IX-_KS_ASH)
627 savelij 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,"?"
1120 savelij 190
;ED_tab "`;',.[]=",0X5C,"/" <")V0x5CB@H_+",0,"?"> 1
627 savelij 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