Top secrets sources NedoPC pentevo

Rev

Rev 627 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


; LAST UPDATE: 18.10.2023 savelij

;#INCLUDE "ALLVARS.ASH"

_KB_INT:        RET

KB_INIT:       JP      _KB_INIT
KB_SCAN:       JP      _KB_SCAN
KB_ENCODE:     JP      _KB_ENCODE
KB_GET_SHIFTS: JP      _KB_GET_SH
KB_SET_RUS:    JP      _KB_SET_RUS

;#INCLUDE "KB_SH.INC"

KB_TIME         EQU K_5CNT;#DEFINE KB_TIME K_5CNT
_KB_TIME        EQU _K_5CNT;#DEFINE _KB_TIME _K_5CNT

;#PRAGMA LOCAL

;----------------------------------------
; LOCALS
_IN:      EX   AF,AF'
           LD   A,55H
           IN   A,(0FEH)
           EX   AF,AF'

           IN   A,(0FEH)
           RET

_IN        MACRO V
           LD   A,V
           CALL _IN
           ENDM

;----------------------------------------
; INIT KEYBOARD (STANDARD ENTRY)
_KB_INIT:  _IN  8
           LD   A,8AH
           IN   A,(0FEH)
           _IN  1
           CP   10H
           JR   NC,ABORT
           XOR  A
           RET
ABORT:     CALL PRN
           DB   1BH,"M1VE31 not installed",0DH,0AH,0
           DI
           HALT
;----------------------------------------
; SCAN KEYBOARD
; IN  E&1 - WAIT FOR SYM, E&2 - WAIT FOR SHIFTS
;
; RET A-FF NO,0-KEY, 1-SHIFT
;     L-CHAR/0

_KB_SCAN:
        BIT     _INTOF,(IX-_FLAG1)
        JR      Z,__NOCHECK
        LD      A,(IX-_TIME_C)
        CP      (IX-_KB_TIME)
        LD      (KB_TIME),A
        JR      Z,__NOALL
__NOCHECK:

           LD   BC,0FEH
           IN   A,(C)
           LD   B,40H
           IN   L,(C)
           LD   B,80H
           IN   H,(C)
           PUSH DE
           LD   DE,(KS_ASH)
           LD   (KS_ASH),HL
           OR   A
           SBC  HL,DE
           POP  DE
           JR   NZ,__SHIFT
           OR   A
           JR   NZ,__SYM
__NOALL:   INC  E
           DEC  E
           JR   NZ,_KB_SCAN
           LD   A,-1
__R1:      LD   L,0
__RET:     LD   DE,(KS_ASH)
_RET1:     EX   AF,AF'
           LD   A,D
           AND  15
           OR   E
           LD   E,A
           EX   AF,AF'

           RET

__SYM:     LD   L,A
           LD   A,0
           JR   __RET

__SHIFT:   OR   A
           JR   NZ,__SYM
           BIT  1,E
           JR   Z,_KB_SCAN
           LD   A,1
           JR   __R1

;-------------------------------

_KB_GET_SH:_IN  9
           LD   E,A
           _IN  49H
           LD   D,A
           LD   (KS_ASH),DE
           XOR  A
           JR   _RET1


;---------------------------------------
_KB_SET_RUS:
           OR   A
           LD   A,55H
           IN   A,(0FEH)
           LD   A,0BH
           JR   Z,KSR_1
           DEC  A
KSR_1:       IN   A,(0FEH)
           JP   _KB_GET_SH

;---------------------------------------
_KB_ENCODE:LD   HL,ENC_TABL
           XOR  A
           RET
ENC_TABL
        ENT_DEF ED_PROC,ED_CHAR,ED_CHAR,ED_CHAR
           ENT_DEF ED_PROC,ED_PROC,ED_PROC,ED_PROC
           ENT_DEF ED_PROC,ED_CHAR,ED_CHAR,ED_CHAR
           ENT_DEF ED_CHAR,ED_CHAR,ED_PROC,ED_PROC

           DB  0,0

           DW   PALT                         ; HI BIT ENCODER
           DW   TRP                          ; RUS      PUNCT
           DW   TRSP                         ; RUS+SHFT PUNCT
           DW   TRLET                        ; RUS      LETTER

           DW   0                            ; RUS+SHFT LETTER
           DW   NRET                         ;          OTHERS
           DW   NRET                         ; SHFT     OTHERS
           DW   NRET                         ; RUS      OTHERS

           DW   NRET                         ; RUS+SHFT OTHERS
           DW   TCCTRL                       ; CTRL     CONTROLL
           DW   TSDIG                        ; SHFT     DIGITS
           DW   TCDIG                        ; CTRL     DIGITS

           DW   TRSDIG                       ; RUS+SHFT DIGITS
           DW   TSP                          ; SHFT     PUNCT
           DW   PCP                          ; CTRL     PUNCT
           DW   NRET                         ; CTRL     OTHERS


PALT:      LD   L,-1
           BIT  B_KS_NUM,(IX-_KS_ASH)
           RET  NZ
           CP   "."
           JR   NZ,PALT_1
           LD   A,"y"
           RET
PALT_1:       CP   "0"
           RET  C
           CP   0X39+1;'9'+1
           RET  NC
           LD   HL,TALT-0X30;'0'
           CALL ADD_HL_A
           LD   A,(HL)
SRET:      LD   L,-1
           RET
NRET:      XOR  A
CRET:      LD   L,0
           RET
TALT:      DB   "xwqur",0,"svpt"

PCP:       CP   "@"
           JR   C,NRET
           AND  1FH
           LD   L,0
           RET

TRP:       DB 0X88,     "`;',.[]",0X5C,"(v|b`h",0X7F,0
;ED_tab "`;',.[]",0X5C <"(v|b`h", 127,0> 1
TRSP:      DB 0X8A,     "`;',.[]=",0X5C,"/",")V",0X5C,"B@H_+",0,"?"
;ED_tab "`;',.[]=",0X5C,"/" <")V0x5CB@H_+",0,"?"> 1
TRLET:     DB 0,        "fiswuapr{oldxt}zjkyegmc~nq"
;ED_tab "fiswuapr{oldxt}zjkyegmc~nq"
TCCTRL:    DB 0X81,     0X0D,0X0A
;ED_tab 0dh 0ah 1
TSDIG:     DB 0,        ")!@#$%^&*("
;ED_tab "")!@#$%^&*("
TCDIG:     DB 1,        "6",0X1E
;ED_tab "6" 1eh
TRSDIG:    DB 0,        "%!",0X22,"/$:,.;?"
;ED_tab "%!",0X22,"/$:,.;?"
TSP:       DB 0X0B,     "`;',.[]-=",0X5C,"/","~:",0X22,"<>{}_+|?"
;ED_tab "`;',.[]-=",0X5C,"/" "~:",0X22,"<>{}_+|?"