Subversion Repositories pentevo

Rev

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