Rev 627 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1120 | savelij | 1 | |
2 | ; LAST UPDATE: 18.10.2023 savelij |
||
3 | |||
627 | savelij | 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 |
||
1120 | savelij | 27 | BIT B_KS_ALT,E |
627 | savelij | 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 |
||
1120 | savelij | 39 | |
627 | savelij | 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 |
||
1120 | savelij | 50 | BIT B_KS_CTRL,E |
627 | savelij | 51 | LD A,3 |
52 | JR NZ,CIC_ST |
||
1120 | savelij | 53 | BIT B_KS_RUS,E |
627 | savelij | 54 | JR Z,CIC_S1 |
55 | LD C,4 |
||
1120 | savelij | 56 | CIC_S1: BIT B_KS_SHFT,E |
627 | savelij | 57 | LD A,1 |
58 | JR NZ,CIC_ST |
||
59 | INC A |
||
1120 | savelij | 60 | BIT B_KS_SHFT2,E |
627 | savelij | 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 |
||
1120 | savelij | 76 | BIT B_KS_CAPS,E |
627 | savelij | 77 | RET Z |
78 | CIC_DOS: ADD A,20H |
||
79 | RET |
||
80 | |||
81 | CIC_DOS_: LD A,D |
||
1120 | savelij | 82 | BIT B_KS_CAPS,E |
627 | savelij | 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" |
||
1120 | savelij | 120 | BIT B_KS_RUS,E |
627 | savelij | 121 | JR Z,CIC_51 |
122 | CP "@" |
||
123 | CIC_51: JR C,CIC_NOLIT |
||
124 | CP 0X5A+1;'Z'+1 |
||
1120 | savelij | 125 | BIT B_KS_RUS,E |
627 | savelij | 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 |
||
1120 | savelij | 138 | BIT B_KS_SHFT,E |
627 | savelij | 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 |
||
1120 | savelij | 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) |
||
627 | savelij | 302 | JR Z,CHK_CA |
1120 | savelij | 303 | CP B_KS_ALT<<1;1 SHL _KS_ALT |
627 | savelij | 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 |
||
1120 | savelij | 351 | BIT B_KS_RUS,E |
627 | savelij | 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 |
||
1120 | savelij | 396 | BIT B_KS_SHFT,E |
627 | savelij | 397 | JR Z,PFR_1 |
398 | SET 7,D |
||
399 | RET |
||
1120 | savelij | 400 | PFR_1: BIT B_KS_CTRL,E |
627 | savelij | 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 |