;
 
;
 
;   0                                   4
 
;   5                                   1
 
; ┌─────────────────────────────────────────────┐
 
; │                                             │
 
; │ e   1 2 3 4 5 6 7 8 9 0 1 2  p s p  . . .   │07
 
; │                                             │
 
; │ ` 1 2 3 4 5 6 7 8 9 0 - = <  i h u  n / * - │
 
; │ t Q W E R T Y U I O P [ ] \  d e d  7 8 9   │
 
; │ c A S D F G H J K L ; '   e         4 5 6 + │
 
; │ s Z X C V B N M , . /     s        1 2 3   │
 
; │ c w a       s       a w m c  <  >  0   . e │
 
; │                                             │
 
; │─────────────────────────────────────────────│
 
; │ Raw data:                                   │16
 
; │  00 00 00 00 00 00 00 00 00 00 00 00 00 00  │17
 
; │                                             │
 
; │ Трёхкратное нажатие <ESC> - выход из теста  │19
 
; └─────────────────────────────────────────────┘
 
;
 
;
 
;--------------------------------------
 
;
 
.EQU    TPSK_PTR        =0
 
.EQU    TPSK_TEMP       =1
 
.EQU    TPSK_COUNT      =2
 
.EQU    TPSK_FLAGS      =3
 
.EQU    TPSK_LEDS       =4
 
;
 
;--------------------------------------
 
;
 
;TESTPS2KEYB_NOEXIT:
 
;        GETMEM  5
 
;        STH     TPSK_FLAGS,FF
 
;
 
;        LDIZ    WIND_T_PS2K*2
 
;        CALL    WINDOW
 
;        RJMP    T_PSK00
 
;
 
; - - - - - - - - - - - - - - - - - - -
 
;
 
TESTPS2KEYB:
 
        GETMEM  5
 
        STH     TPSK_FLAGS,NULL
 
 
 
        LDIZ    WIND_T_PS2K*2
 
        CALL    WINDOW
 
        LDIZ    MLMSG_TPS2K_0*2
 
        RCALL   SCR_PRINTMLSTR
 
T_PSK00:LDI     TEMP,$80
 
        STH     TPSK_LEDS,TEMP
 
 
 
        LDIZ    MSG_TPS2K_1*2
 
        RCALL   SCR_PRINTSTRZ
 
        LDI     DATA,$C4        ;"─"
 
        LDI     COUNT,45
 
        RCALL   SCR_FILL_CHAR
 
 
 
        LDIZ    MEGABUFFER+16
 
T_PSK01:ST      -Z,NULL
 
        TST     ZL
 
        BRNE    T_PSK01
 
        STS     PS2K_RAW_READY,NULL
 
        STH     TPSK_PTR,NULL
 
 
 
T_PSK10:
 
        LDS     DATA,PS2K_RAW_READY
 
        TST     DATA
 
        BREQ    T_PSK11
 
        LDS     DATA,PS2K_RAW_CODE
 
        RCALL   T_PSK80
 
T_PSK11:
 
        LDH     DATA,TPSK_LEDS
 
        SBRS    DATA,7
 
        RJMP    T_PSK1L
 
        ANDI    DATA,$07
 
        STH     TPSK_LEDS,DATA
 
        LDI     DATA,$ED
 
        RCALL   T_PSK80
 
        RCALL   PS2K_SEND_BYTE
 
        BREQ    T_PSK1_SETLED_FAIL
 
        RCALL   PS2K_RECEIVE_BYTE
 
        BREQ    T_PSK1_SETLED_FAIL
 
        RCALL   T_PSK80
 
        CPI     DATA,$FA
 
        BRNE    T_PSK1_SETLED_FAIL
 
        LDH     DATA,TPSK_LEDS
 
        RCALL   T_PSK80
 
        RCALL   PS2K_SEND_BYTE
 
        BREQ    T_PSK1_SETLED_FAIL
 
        RCALL   PS2K_RECEIVE_BYTE
 
        BREQ    T_PSK1_SETLED_FAIL
 
        RCALL   T_PSK80
 
        CPI     DATA,$FA
 
        BRNE    T_PSK1_SETLED_FAIL
 
        RCALL   T_PSK7_SHOW_LEDS
 
T_PSK1_SETLED_FAIL:
 
 
 
T_PSK1L:
 
        LDS     TEMP,PS2K_KEY_FLAGS
 
        SBRS    TEMP,PS2K_BIT_READY
 
        RJMP    T_PSK10
 
;
 
        STS     PS2K_KEY_FLAGS,NULL
 
        LDS     DATA,PS2K_KEY_CODE
 
        STH     TPSK_TEMP,TEMP
 
 
 
        LDH     COUNT,TPSK_FLAGS
 
;        TST     COUNT
 
;        BRMI    T_PSK21
 
        SBRS    TEMP,PS2K_BIT_RELEASE
 
        RJMP    T_PSK21
 
        SBRC    TEMP,PS2K_BIT_EXTKEY
 
        RJMP    T_PSK22
 
        CPI     DATA,KEY_ESC
 
        BRNE    T_PSK22
 
        INC     COUNT
 
        STH     TPSK_FLAGS,COUNT
 
        CPI     COUNT,3
 
        BRCS    T_PSK21
 
 
 
        RCALL   SCR_KBDSETLED
 
        FREEMEM 5
 
        RET
 
;
 
T_PSK22:STH     TPSK_FLAGS,NULL
 
T_PSK21:SBRC    TEMP,PS2K_BIT_EXTKEY
 
        RJMP    T_PSK12
 
        SBRC    TEMP,PS2K_BIT_RELEASE
 
        RJMP    T_PSK26
 
 
 
        LDH     XL,TPSK_LEDS
 
        LDI     XH,$01
 
        CPI     DATA,KEY_SCROLLLOCK
 
        BRNE    T_PSK23
 
        EOR     XL,XH
 
        ORI     XL,$80
 
T_PSK23:LSL     XH
 
        CPI     DATA,KEY_NUMLOCK
 
        BRNE    T_PSK24
 
        EOR     XL,XH
 
        ORI     XL,$80
 
T_PSK24:LSL     XH
 
        CPI     DATA,KEY_CAPSLOCK
 
        BRNE    T_PSK25
 
        EOR     XL,XH
 
        ORI     XL,$80
 
T_PSK25:STH     TPSK_LEDS,XL
 
T_PSK26:
 
 
 
        CPI     DATA,$83        ;F7
 
        BRNE    T_PSK12
 
        LDI     XL,(9<<3)|0
 
        RJMP    T_PSK14
 
T_PSK12:CPI     DATA,$84        ;SysReg
 
        BRNE    T_PSK13
 
        LDI     XL,(15<<3)|0
 
        RJMP    T_PSK14
 
T_PSK13:
 
        CPI     DATA,$80
 
        BRCC    T_PSK10_A
 
        LSL     DATA
 
        SBRC    TEMP,PS2K_BIT_EXTKEY
 
        ORI     DATA,$01
 
        LDIZ    TPSK_TAB*2
 
        ADD     ZL,DATA
 
        ADC     ZH,NULL
 
        LPM     XL,Z
 
        TST     XL
 
        BREQ    T_PSK10_A
 
T_PSK14:MOV     XH,XL
 
        ANDI    XH,0B00000111
 
        TST     XH
 
        BREQ    T_PSK15
 
        INC     XH
 
T_PSK15:LSR     XL
 
        LSR     XL
 
        ANDI    XL,0B00111110
 
        CPI     XL,36
 
        BRCS    T_PSK16
 
        INC     XL
 
T_PSK16:CPI     XL,30
 
        BRCS    T_PSK17
 
        INC     XL
 
T_PSK17:ADDI    XL,3
 
        ADDI    XH,7
 
        RCALL   SCR_SET_CURSOR
 
        LDH     DATA,TPSK_TEMP
 
        LDI     TEMP,$AE
 
        SBRC    DATA,PS2K_BIT_RELEASE
 
        LDI     TEMP,$D1
 
        LDI     COUNT,1
 
        RCALL   SCR_FILL_ATTR
 
T_PSK10_A:
 
        RJMP    T_PSK10
 
;
 
;
 
T_PSK80:PUSH    DATA
 
        STS     PS2K_RAW_READY,NULL
 
 
 
        LDH     ZL,TPSK_PTR
 
        LDI     ZH,HIGH(MEGABUFFER)
 
        ST      Z+,DATA
 
        ANDI    ZL,$0F
 
        STH     TPSK_PTR,ZL
 
 
 
        ANDI    FLAGS1,0B11111100       ;!!!
 
        LDI     XL,5
 
        LDI     XH,17
 
        RCALL   SCR_SET_CURSOR
 
        LDH     ZL,TPSK_PTR
 
        INC     ZL
 
        LDI     COUNT,13
 
 
 
T_PSK81:STH     TPSK_COUNT,COUNT
 
        LDI     ZH,HIGH(MEGABUFFER)
 
        INC     ZL
 
        ANDI    ZL,$0F
 
        STH     TPSK_TEMP,ZL
 
        LD      DATA,Z
 
        PUSH    DATA
 
        LDI     TEMP,$0E
 
        CPI     DATA,$E0
 
        BREQ    T_PSK82
 
        CPI     DATA,$E1
 
        BREQ    T_PSK82
 
        LDI     TEMP,$0D
 
        CPI     DATA,$F0
 
        BREQ    T_PSK82
 
        LDI     TEMP,$0B
 
        CPI     DATA,$ED
 
        BREQ    T_PSK82
 
        LDI     TEMP,$0A
 
        CPI     DATA,$85
 
        BRCC    T_PSK82
 
        LDI     TEMP,$0F
 
T_PSK82:RCALL   SCR_SET_ATTR
 
        LDI     DATA,$20
 
        RCALL   SCR_PUTCHAR
 
        POP     DATA
 
        LDH     COUNT,TPSK_COUNT
 
        TST     COUNT
 
        BREQ    T_PSK83
 
        RCALL   HEXBYTE
 
        LDH     ZL,TPSK_TEMP
 
        LDH     COUNT,TPSK_COUNT
 
        DEC     COUNT
 
        RJMP    T_PSK81
 
T_PSK83:
 
        ORI     FLAGS1,0B00000010       ;!!!
 
        CALL    HEXBYTE
 
        LDI     DATA,$20
 
        CALL    PUTCHAR
 
 
 
        POP     DATA
 
        RET
 
;
 
;
 
T_PSK7_SHOW_LEDS:
 
        LDI     XL,41
 
        LDI     XH,7
 
        RCALL   SCR_SET_CURSOR
 
        LDH     DATA,TPSK_LEDS
 
        LDI     TEMP,$DC
 
        SBRS    DATA,1
 
        LDI     TEMP,$D0
 
        LDI     COUNT,2
 
        RCALL   SCR_FILL_ATTR
 
        LDH     DATA,TPSK_LEDS
 
        LDI     TEMP,$DC
 
        SBRS    DATA,2
 
        LDI     TEMP,$D0
 
        LDI     COUNT,2
 
        RCALL   SCR_FILL_ATTR
 
        LDH     DATA,TPSK_LEDS
 
        LDI     TEMP,$DC
 
        SBRS    DATA,0
 
        LDI     TEMP,$D0
 
        LDI     COUNT,2
 
        RJMP    SCR_FILL_ATTR
 
;
 
;--------------------------------------
 
;
 
WIND_T_PS2K:
 
        .DB     3,5,47,16,$DF,$01
 
;
 
;--------------------------------------
 
;
 
TPSK_TAB:
 
        .DB     0        , 0            ;00
 
        .DB     (11<<3)|0, 0            ;01
 
        .DB     0        , 0            ;02
 
        .DB     ( 7<<3)|0, 0            ;03
 
        .DB     ( 5<<3)|0, 0            ;04
 
        .DB     ( 3<<3)|0, 0            ;05
 
        .DB     ( 4<<3)|0, 0            ;06
 
        .DB     (14<<3)|0, 0            ;07
 
        .DB     0        , 0            ;08
 
        .DB     (12<<3)|0, 0            ;09
 
        .DB     (10<<3)|0, 0            ;0A
 
        .DB     ( 8<<3)|0, 0            ;0B
 
        .DB     ( 6<<3)|0, 0            ;0C
 
        .DB     ( 1<<3)|2, 0            ;0D
 
        .DB     ( 1<<3)|1, 0            ;0E
 
        .DB     0        , 0            ;0F
 
        .DB     0        , 0            ;10
 
        .DB     ( 3<<3)|5, (11<<3)|5    ;11
 
        .DB     ( 1<<3)|4, 0            ;12
 
        .DB     0        , 0            ;13
 
        .DB     ( 1<<3)|5, (14<<3)|5    ;14
 
        .DB     ( 2<<3)|2, 0            ;15
 
        .DB     ( 2<<3)|1, 0            ;16
 
        .DB     0        , 0            ;17
 
        .DB     0        , 0            ;18
 
        .DB     0        , 0            ;19
 
        .DB     ( 2<<3)|4, 0            ;1A
 
        .DB     ( 3<<3)|3, 0            ;1B
 
        .DB     ( 2<<3)|3, 0            ;1C
 
        .DB     ( 3<<3)|2, 0            ;1D
 
        .DB     ( 3<<3)|1, 0            ;1E
 
        .DB     0        , ( 2<<3)|5    ;1F
 
        .DB     0        , 0            ;20
 
        .DB     ( 4<<3)|4, 0            ;21
 
        .DB     ( 3<<3)|4, 0            ;22
 
        .DB     ( 4<<3)|3, 0            ;23
 
        .DB     ( 4<<3)|2, 0            ;24
 
        .DB     ( 5<<3)|1, 0            ;25
 
        .DB     ( 4<<3)|1, 0            ;26
 
        .DB     0        , (12<<3)|5    ;27
 
        .DB     0        , 0            ;28
 
        .DB     ( 7<<3)|5, 0            ;29
 
        .DB     ( 5<<3)|4, 0            ;2A
 
        .DB     ( 5<<3)|3, 0            ;2B
 
        .DB     ( 6<<3)|2, 0            ;2C
 
        .DB     ( 5<<3)|2, 0            ;2D
 
        .DB     ( 6<<3)|1, 0            ;2E
 
        .DB     0        , (13<<3)|5    ;2F
 
        .DB     0        , 0            ;30
 
        .DB     ( 7<<3)|4, 0            ;31
 
        .DB     ( 6<<3)|4, 0            ;32
 
        .DB     ( 7<<3)|3, 0            ;33
 
        .DB     ( 6<<3)|3, 0            ;34
 
        .DB     ( 7<<3)|2, 0            ;35
 
        .DB     ( 7<<3)|1, 0            ;36
 
        .DB     0        , 0            ;37
 
        .DB     0        , 0            ;38
 
        .DB     0        , 0            ;39
 
        .DB     ( 8<<3)|4, 0            ;3A
 
        .DB     ( 8<<3)|3, 0            ;3B
 
        .DB     ( 8<<3)|2, 0            ;3C
 
        .DB     ( 8<<3)|1, 0            ;3D
 
        .DB     ( 9<<3)|1, 0            ;3E
 
        .DB     0        , 0            ;3F
 
        .DB     0        , 0            ;40
 
        .DB     ( 9<<3)|4, 0            ;41
 
        .DB     ( 9<<3)|3, 0            ;42
 
        .DB     ( 9<<3)|2, 0            ;43
 
        .DB     (10<<3)|2, 0            ;44
 
        .DB     (11<<3)|1, 0            ;45
 
        .DB     (10<<3)|1, 0            ;46
 
        .DB     0        , 0            ;47
 
        .DB     0        , 0            ;48
 
        .DB     (10<<3)|4, 0            ;49
 
        .DB     (11<<3)|4, (19<<3)|1    ;4A
 
        .DB     (10<<3)|3, 0            ;4B
 
        .DB     (11<<3)|3, 0            ;4C
 
        .DB     (11<<3)|2, 0            ;4D
 
        .DB     (12<<3)|1, 0            ;4E
 
        .DB     0        , 0            ;4F
 
        .DB     0        , 0            ;50
 
        .DB     0        , 0            ;51
 
        .DB     (12<<3)|3, 0            ;52
 
        .DB     0        , 0            ;53
 
        .DB     (12<<3)|2, 0            ;54
 
        .DB     (13<<3)|1, 0            ;55
 
        .DB     0        , 0            ;56
 
        .DB     0        , 0            ;57
 
        .DB     ( 1<<3)|3, 0            ;58
 
        .DB     (14<<3)|4, 0            ;59
 
        .DB     (14<<3)|3, (21<<3)|5    ;5A
 
        .DB     (13<<3)|2, 0            ;5B
 
        .DB     0        , 0            ;5C
 
        .DB     (14<<3)|2, 0            ;5D
 
        .DB     0        , 0            ;5E
 
        .DB     0        , 0            ;5F
 
        .DB     0        , 0            ;60
 
        .DB     0        , 0            ;61
 
        .DB     0        , 0            ;62
 
        .DB     0        , 0            ;63
 
        .DB     0        , 0            ;64
 
        .DB     0        , 0            ;65
 
        .DB     (14<<3)|1, 0            ;66
 
        .DB     0        , 0            ;67
 
        .DB     0        , 0            ;68
 
        .DB     (18<<3)|4, (16<<3)|2    ;69
 
        .DB     0        , 0            ;6A
 
        .DB     (18<<3)|3, (15<<3)|5    ;6B
 
        .DB     (18<<3)|2, (16<<3)|1    ;6C
 
        .DB     0        , 0            ;6D
 
        .DB     0        , 0            ;6E
 
        .DB     0        , 0            ;6F
 
        .DB     (18<<3)|5, (15<<3)|1    ;70
 
        .DB     (20<<3)|5, (15<<3)|2    ;71
 
        .DB     (19<<3)|4, (16<<3)|5    ;72
 
        .DB     (19<<3)|3, 0            ;73
 
        .DB     (20<<3)|3, (17<<3)|5    ;74
 
        .DB     (19<<3)|2, (16<<3)|4    ;75
 
        .DB     ( 1<<3)|0, 0            ;76
 
        .DB     (18<<3)|1, 0            ;77
 
        .DB     (13<<3)|0, 0            ;78
 
        .DB     (21<<3)|3, 0            ;79
 
        .DB     (20<<3)|4, (17<<3)|2    ;7A
 
        .DB     (21<<3)|1, 0            ;7B
 
        .DB     (20<<3)|1, (15<<3)|0    ;7C
 
        .DB     (20<<3)|2, (17<<3)|1    ;7D
 
        .DB     (16<<3)|0, (17<<3)|0    ;7E
 
        .DB     0        , 0            ;7F
 
;
 
;--------------------------------------
 
;