Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;.Z80
  3. KEY_SCAN: XOR A
  4.           IN A,(0FEH)
  5.           OR 0E0H
  6.           INC A
  7.           RET Z
  8.           LD L,-8                            ;INITIAL KEY VALUE
  9.           LD DE,0                            ;INITIALISE DE - NO KEY, NO SHIFTS
  10.           LD BC,0FEFEH                       ;C-PORT ADRESS, D-COUNTER
  11. KEY_LINE: IN A,(C)                           ;READ KEYBOARD
  12.           CPL
  13.           AND 1FH                            ;MASK FOR RESPONCE BITS
  14.           JR Z,KEY_DONE                      ;IF NO KEY PRESSED - DOWN
  15.           LD H,A                             ;HOLD VALUE TO H
  16.           LD A,L                             ;RESTORE INITIAL KEY VALUE
  17. LP2:      ADD A,8H                           ;REPEATEDLY SUBTRACT 8 FROM
  18.           SRL H                              ;THE PRESENTS KEY VALUE UNTIL A
  19.           JR NC,LP2                          ;KEY-BIT IS FOUND
  20.           OR A
  21.           JR NZ,NO_CS
  22.           SET _K_CS,E
  23.           JR NO_DN
  24.  
  25. NO_CS:    CP 0FH
  26.           JR NZ,NO_SS
  27.           SET _K_SS,E
  28.           JR NO_DN
  29.  
  30. NO_SS:    LD D,A
  31. NO_DN:    INC H
  32.           DEC H
  33.           JR NZ,LP2                          ;IF MORE THE ONE KEY PRESSED - PASS BACK
  34. KEY_DONE: INC L                              ;KEY VALUE ADJUST FOR NEXT SCANNING LINE
  35.           RLC B                              ;NEXT KEYBOARD LINE
  36.           JR C,KEY_LINE                      ;REPEAT FOR ALL LINES
  37.           LD A,D                             ;FIRST KEY VALUE
  38.           OR E
  39.           RET
  40.  
  41. K_STA:  DB 40H, 80H
  42.  
  43. K_ST1:  DB 3,4,0BH,0CH,13H,14H,1BH,1CH,23H,24H  ; CS
  44. K_ST1S  EQU $-K_ST1
  45.  
  46. K_ST2:  DB 4,5,8,0CH,0DH,0EH,10H,14H,16H,17H,18H,1EH,1FH,20H,26H,27H ; SS
  47. K_ST2S  EQU $-K_ST2
  48. K_STAS  EQU $-K_STA
  49.  
  50. KEYBOARD_: DEC (IX-_K_5CNT)
  51.         RET P
  52.         LD  (IX-_K_5CNT),0
  53.         CALL KEY_SCAN
  54.         CP  (IX-_K_LAST)
  55.         JR  Z,K_OLD
  56. ;----- TESTING FOR UNBALANCED EXTEND KEY
  57.         LD  B,(IX-_K_BUF)
  58.         LD  (IX-_K_BUF),-1
  59.         INC B
  60.         LD  D,A                       ; SAVE FOR LATER
  61.         LD  C,3FH
  62.         JR  Z,K_NOBUF
  63.         DEC B
  64.         AND C                         ; KEY IN BUF
  65.         JR  Z,K_ORED
  66.         XOR B
  67.         AND C
  68.         JR  Z,K_ORED
  69.         LD  A,B
  70.         AND C
  71.         JR  Z,K_ORED
  72.         LD  A,B
  73.         AND 0C0H
  74.         OR  C
  75.         JR  K_SBUF
  76.  
  77. K_ORED: LD  A,B
  78.         OR  D
  79.         JR  K_NXT
  80.  
  81. K_NOBUF:LD  A,(FLAG)                  ; MASK ALREADY SETED SHIFT'S BIT
  82.         CPL
  83.         OR  C                         ; C STILL 3FH
  84.         AND D
  85.         LD  HL,K_STA                  ; IT'S MAY BE UNBALANCED EXTEND KEY?
  86.         LD  BC,K_STAS
  87.         CPIR
  88.         LD  A,D
  89.         JR  NZ,K_NXT                  ; NO - PROCESS IT IN ORDER CASE
  90. K_SBUF: LD  (K_BUF),A                 ; ELSE - REMEMBER IT & PROCESS LATER
  91.         RET
  92. ;----- END OF TEST
  93.  
  94. K_NXT:  LD  B,A
  95.         LD  A,(KEY_DEL)
  96.         LD  (K_CNT),A
  97.         LD  (IX-_K_5CNT),5
  98.         LD  A,B
  99.         AND 3FH
  100.         JR  Z,K_STAT                  ; NO KEY (ONLY SHIFT)- SET STATUS
  101.         XOR (IX-_K_LAST)
  102.         AND 3FH                       ; KEY THE SAME?
  103.         JR  NZ,K_DONE1                ; NO (JUST PRESSED) - DON'T CHANGE STAT
  104. K_STAT: LD  A,(FLAG)                  ; ELSE SET IT
  105.         XOR B
  106.         AND 3FH
  107.         XOR B
  108.         LD  (FLAG),A
  109. K_DONE1:LD  (IX-_K_LAST),B
  110.         JR  K_DONE
  111.  
  112. K_OLD:  BIT 7,(IX-_K_CNT)
  113.         RET NZ
  114.         DEC (IX-_K_CNT)
  115.         RET NZ
  116.         LD  A,(KEY_REP)
  117.         LD  (K_CNT),A
  118. K_DONE: LD  A,(FLAG)
  119.         AND 0C0H
  120.         XOR (IX-_K_LAST)
  121.         JP P,KE_NOH
  122.         LD HL,K_ST1
  123.         LD C,K_ST1S
  124.         LD D,40
  125.         JR K_1
  126.  
  127. KE_NOH: BIT _K_SS,A
  128.         JR  Z,K_PUT
  129.         LD  D,40+K_ST1S
  130.         LD  HL,K_ST2
  131.         LD  C,K_ST2S
  132. K_1:    LD  B,0
  133.         AND 3FH
  134.         CPIR
  135.         JR  NZ,K_PUT
  136.         LD  A,D
  137.         ADD A,C
  138. K_PUT:  OR  A
  139.         RET Z
  140.         LD  B,A
  141.         CP  2FH                      ; IS CAPS LOCK ?
  142.         JR  NZ,K_CL
  143.         LD  (IX-_K_CNT),80H          ; YES - PASSIVATE REPEATOR
  144.         LD  A,(FLAG)
  145.         XOR 10H                      ; IS _CAPS BIT !!!!!!
  146.         LD  (FLAG),A
  147.         XOR A
  148.         RET
  149.  
  150. K_CL:   CP  2BH                      ; IS ALT ?
  151.         JR  NZ,K_AT
  152.         LD  (IX-_K_CNT),80H          ; YES - PASSIVATE REPEATOR
  153.         JR  K_OK
  154.  
  155. K_AT:   CP  7                        ; IS SPACE
  156.         JR  NZ,K_OK
  157.         BIT _BREAK,(IX-_FLAG1)
  158.         JR  NZ,K_OK
  159.         LD  A,(FLAG)
  160.         OR  3EH
  161.         INC A
  162.         JR  NZ,K_OK
  163.         LD  A,3
  164.         RST 18H
  165. ;        LD  HL,BIOS+3
  166. ;        LD  (ENT_ADR),HL
  167.         JP   ENTR2
  168.  
  169. K_OK:  LD   A,(TAIL)
  170.        CP   MAXQUI
  171.        LD  HL,(BEEP_T)
  172.        JP   Z,BEEP
  173.        LD   HL,BEGQUI
  174.        CALL  ADD_HL_A
  175.        INC  (IX-_TAIL)
  176.        LD   (HL),B
  177.                 LD HL,(BEEP_K)
  178.                 JP   BEEP
  179.  
  180. _RK:   BIT _FLEX_C,(IX-_FLAG)        ; READ KEY FOR CP/M
  181.         JR  Z,READ_W
  182.         CALL _SK
  183.         JR  NZ,RD_KI
  184.         LD   A,1
  185.         RST  18H
  186.         PUSH AF
  187.         CALL CUR_AC
  188.         POP  AF
  189.         RST  18H
  190.         EI
  191.         CALL READ_W
  192.         PUSH AF
  193.         LD   A,1
  194.         RST  18H
  195.         PUSH AF
  196.         CALL CUR_PA
  197.         POP  AF
  198.         RST  18H
  199.         EI
  200.         POP AF
  201.         RET
  202.  
  203.  
  204. READ_W:CALL STAT_K
  205.        OR   A
  206.        JR   Z,READ_W
  207. RD_KI: CALL POPKEY
  208.        CALL K_ENCODE
  209.        RET
  210.  
  211. POPKEY:LD   HL,BEGQUI+1
  212.        LD   DE,BEGQUI
  213.        DEC  (IX-_TAIL)
  214.        LD   A,(DE)
  215.        LD   BC,MAXQUI-1
  216.        LDIR
  217.        RET
  218.  
  219. STK_1: CALL POPKEY
  220. STAT_K_
  221. _SK:   LD   A,(TAIL)
  222.        OR   A
  223.        RET  Z
  224.        LD   A,(BEGQUI)
  225.        CALL K_ENCODE
  226.        OR A
  227.        JR Z,STK_1
  228.        LD   A,0FFH
  229.        RET
  230.  
  231. _RKNW
  232. READ_KNW: LD A,(TAIL)           ; READ KEY (NO WAIT)
  233.        OR A                      ; OUT: KEY AVAILABLE: A-0
  234.        LD A,1                    ;       C-CHAR, H-SCAN, L-KB. TYPE (0 FOR SINC)
  235.        JR Z,RKNW                 ;       D-KEYB FLAGS (2 HI BIT)
  236.        CALL POPKEY               ;      NO KEY AVAILABLE: A-1
  237.        PUSH AF                   ;       D-KEYB FLAGS (2 HI BIT)
  238.        CALL K_ENCODE
  239.        LD  C,A
  240.        POP HL
  241.        XOR A
  242. RKNW:  LD  L,0
  243.        LD  D,(IX-_FLAG)
  244.        RET
  245.  
  246. _KBT
  247. KB_TYP_
  248.         LD A,(TAIL)              ; READ KEYB TYPE (L) & FLAGS (D)
  249.         OR A                     ; & KEY AVAIL. (A-0 AV, A-1 NO AV.)
  250.         LD A,1
  251.         JR Z,RKNW
  252.         XOR A
  253.         JR RKNW
  254.  
  255. K_ENCODE:
  256.         LD E,A
  257.         LD HL,KT_MAIN
  258.         CALL ADD_HL_A
  259.         LD A,(HL)
  260.         OR A
  261.         SCF
  262.         RET Z
  263.         CP ' '
  264.         RET Z
  265.         CP 0DH
  266.         JR NZ,KEN_2
  267.         LD A,(FLAG)
  268.         OR 3EH
  269.         INC A
  270.         LD A,0DH
  271.         RET NZ
  272.         LD A,0AH
  273.         RET
  274. KEN_2:  LD D,0
  275.         EX AF,AF'
  276.        LD A,E
  277.        BIT _RUS,(IX-_FLAG)
  278.        JR Z,IS_NREXT
  279.        CP 3AH
  280.        JR C,IS_NREXT
  281.        SUB 3AH
  282.        LD HL,KT_RUS
  283.        CALL ADD_HL_A
  284.        LD A,(HL)
  285.        EX AF,AF'
  286.         JR IS_REXT
  287. IS_NREXT:CP 28H
  288.         JR NC,IS_EXT
  289.         DEC A
  290.         AND 6
  291.         CP 2
  292.         JR NZ,IS_LIT
  293.         INC D
  294. IS_LIT: INC D
  295. IS_EXT: INC D
  296. IS_REXT:LD A,(FLAG)
  297.         AND 0C0H
  298.         RRA
  299.         RRA
  300.         RRA
  301.         RRA
  302.         ADD A,D
  303.         LD HL,KT_JMP
  304.         CALL ADD_HL_A
  305.         LD A,(HL)
  306.         CALL ADD_HL_A
  307.         EX AF,AF'
  308.        OR A
  309.        JP (HL)
  310.  
  311. ;DK      MACRO PAR
  312. ;        IRP MRK,<PAR>
  313. ;         DB  MRK-$
  314. ;        ENDM
  315. ;       ENDM
  316.  
  317. KT_JMP;  DUPL 0X10,0
  318. ;        DK <<K_CRET>,<K_ERET>,<K_CRET>,<K_RET>>
  319. ;         DK <<K_LOCK>,<K_LOCK>,<K_SYML>,<K_SYMN>>
  320. ;         DK <<K_CAPS>,<K_?LIT>,<K_CAPS>,<K_SYMN>>
  321. ;         DK <<K_LOCK>,<K_LOCK>,<K_CTRL>,<K_LOCK>>
  322.          DB LOW (K_CRET-$),LOW (K_ERET-$-1),LOW (K_CRET-$-2),LOW (K_RET-$-3)
  323.         DB LOW (K_LOCK-$),LOW (K_LOCK-$-1),LOW (K_SYML-$-2),LOW (K_SYMN-$-3)
  324.         DB LOW (K_CAPS-$),LOW (K__LIT-$-1),LOW (K_CAPS-$-2),LOW (K_SYMN-$-3)
  325.         DB LOW (K_LOCK-$),LOW (K_LOCK-$-1),LOW (K_CTRL-$-2),LOW (K_LOCK-$-3)
  326.  
  327. K_LOCK: XOR A
  328.        SCF
  329. K_RET:  RET
  330.  
  331. K_CAPS: XOR 20H
  332. K_CRET: BIT _CAPS,(IX-_FLAG)
  333.        RET Z
  334.        XOR 20H
  335.        RET
  336.  
  337. K_CTRL: AND 1FH
  338.        RET
  339.  
  340. K_SYMN: SUB 10H
  341.         CP  0X22
  342.         JR  Z,KSN_1
  343.         CP  " "
  344.         RET NZ
  345.         LD  A,"_"
  346.         RET
  347.  
  348. KSN_1:  LD  A,"@"
  349.        RET
  350.  
  351. K__LIT: SUB "("
  352.        CP 2
  353.        JR NC,K_LOCK
  354.        ADD A,A
  355.        ADD A,"["
  356.        RET
  357.  
  358. K_ERET: OR A
  359.        RET P
  360.        LD A,0EH
  361.        BIT _RUS,(IX-_FLAG)
  362.        RET NZ
  363.        INC A
  364.        RET
  365.  
  366. K_SYML: SUB "A"
  367.        LD HL,KT_SYM
  368.        CALL ADD_HL_A
  369.        LD A,(HL)
  370.        OR A
  371.        RET NZ
  372.        SCF
  373.        RET
  374.  
  375. ; TABLES
  376. KT_MAIN:DB 0,"AQ10P",0DH," "
  377.        DB "ZSW29OL",0
  378.        DB "XDE38IKM"
  379.        DB "CFR47UJN"
  380.        DB "VGT56YHB"
  381.        DB 18H,13H,5,80H,4,9,0,0,8,1BH
  382.        DB "*^/,-?.+(`=;):",0X22,"_"
  383. KT_RUS: DB 5BH,5FH,"=;",5DH,5EH,40H,5CH
  384. KT_SYM: DB "~*?",0X5C,0,"{}^",0,"-+=.,;",0X22,0,"<|>]/",0,"`[:"
  385.  
  386. SPKEYB_T        JP KEYBOARD_;   LOC_C13         ; -58=5F67
  387.                 JP _RK; LOC_D0B         ; -7F=5F40
  388.                 JP STAT_K_;     SUB_D50
  389.                 JP READ_KNW;    LOC_D61
  390.                 JP KB_TYP_;     LOC_D79
  391.                 RET
  392.