Enable FnLock and FnCtrlSwap functionality

FN+ESC -> Toggle FnLock for F1-F12 row (suppresses ESC)
FN+RCTRL -> Toggle FnCtrlSwap (does not suppress RCTRL)
This commit is contained in:
Tobias Diedrich
2022-01-16 22:21:15 +01:00
parent 7b59505799
commit 7c3b45ad94
+92 -11
View File
@@ -278,6 +278,7 @@ keyRGUI EQU modifierState1.7 ; 231
keyFN EQU modifierState2.0 keyFN EQU modifierState2.0
stateFnLock EQU modifierState2.1 stateFnLock EQU modifierState2.1
stateFnCtrlSwap EQU modifierState2.2 stateFnCtrlSwap EQU modifierState2.2
stateHiddenESC EQU modifierState2.3
.CODE .CODE
@@ -719,12 +720,45 @@ _kbd_sense:
JMP _kbd_sense_row6 JMP _kbd_sense_row6
JMP _kbd_sense_row7 JMP _kbd_sense_row7
_key_get_fnrow:
B0BTS0 keyFN
JMP @F
B0BCLR FC
B0BTS0 stateFnLock
B0BSET FC
RET
@@:
B0BSET FC
B0BTS0 stateFnLock
B0BCLR FC
RET
_key_esc_clear:
B0BCLR keyESC
B0BCLR stateHiddenESC
RET
_key_esc_set:
B0BTS0 keyFN
JMP @F
B0BSET keyESC
RET
@@:
; Make sure we only toggle once until ESC is released
B0BTS0 stateHiddenESC
RET
B0BSET stateHiddenESC
; Toggle stateFnLock
MOV A, #0x02
XOR modifierState2, A
RET
_kbd_sense_row0: _kbd_sense_row0:
; DB keyESC, keyF4, keyNONUSBACKSLASH, keyNONE, keyG, keyH, keyF6, keyINTERNATIONAL4 ; DB keyESC, keyF4, keyNONUSBACKSLASH, keyNONE, keyG, keyH, keyF6, keyINTERNATIONAL4
B0BTS0 S0 B0BTS0 S0
B0BCLR keyESC CALL _key_esc_clear
B0BTS1 S0 B0BTS1 S0
B0BSET keyESC CALL _key_esc_set
B0BTS0 S1 B0BTS0 S1
B0BCLR keyF4 B0BCLR keyF4
B0BTS1 S1 B0BTS1 S1
@@ -794,7 +828,8 @@ _key_f3_clear:
B0BCLR keyVOLUMEUP B0BCLR keyVOLUMEUP
RET RET
_key_f3_set: _key_f3_set:
B0BTS0 keyFN CALL _key_get_fnrow
B0BTS0 FC
JMP @F JMP @F
B0BSET keyF3 B0BSET keyF3
RET RET
@@ -947,7 +982,8 @@ _key_f1_clear:
B0BCLR keyMUTE B0BCLR keyMUTE
RET RET
_key_f1_set: _key_f1_set:
B0BTS0 keyFN CALL _key_get_fnrow
B0BTS0 FC
JMP @F JMP @F
B0BSET keyF1 B0BSET keyF1
RET RET
@@ -960,7 +996,8 @@ _key_f2_clear:
B0BCLR keyVOLUMEDOWN B0BCLR keyVOLUMEDOWN
RET RET
_key_f2_set: _key_f2_set:
B0BTS0 keyFN CALL _key_get_fnrow
B0BTS0 FC
JMP @F JMP @F
B0BSET keyF2 B0BSET keyF2
RET RET
@@ -968,6 +1005,19 @@ _key_f2_set:
B0BSET keyVOLUMEDOWN B0BSET keyVOLUMEDOWN
RET RET
_key_lctrl_clear:
B0BTS0 stateFnCtrlSwap
B0BCLR keyFN
B0BTS1 stateFnCtrlSwap
B0BCLR keyLCTRL
RET
_key_lctrl_set:
B0BTS0 stateFnCtrlSwap
B0BSET keyFN
B0BTS1 stateFnCtrlSwap
B0BSET keyLCTRL
RET
_kbd_sense_row3: _kbd_sense_row3:
; DB keyGRAVE, keyF2, keyF1, keyLCTRL, key5, key6, keyEQUALS, keyF8 ; DB keyGRAVE, keyF2, keyF1, keyLCTRL, key5, key6, keyEQUALS, keyF8
B0BTS0 S0 B0BTS0 S0
@@ -983,9 +1033,9 @@ _kbd_sense_row3:
B0BTS1 S2 B0BTS1 S2
CALL _key_f1_set CALL _key_f1_set
B0BTS0 S3 B0BTS0 S3
B0BCLR keyLCTRL CALL _key_lctrl_clear
B0BTS1 S3 B0BTS1 S3
B0BSET keyLCTRL CALL _key_lctrl_set
B0BTS0 S4 B0BTS0 S4
B0BCLR key5 B0BCLR key5
B0BTS1 S4 B0BTS1 S4
@@ -1038,6 +1088,19 @@ _kbd_sense_row3:
B0BSET keyDELETE B0BSET keyDELETE
RET RET
_key_fn_clear:
B0BTS0 stateFnCtrlSwap
B0BCLR keyLCTRL
B0BTS1 stateFnCtrlSwap
B0BCLR keyFN
RET
_key_fn_set:
B0BTS0 stateFnCtrlSwap
B0BSET keyLCTRL
B0BTS1 stateFnCtrlSwap
B0BSET keyFN
RET
_kbd_sense_row4: _kbd_sense_row4:
; DB keyA, keyD, keyS, keyNONE, keyF, keyJ, keyK, keyL ; DB keyA, keyD, keyS, keyNONE, keyF, keyJ, keyK, keyL
B0BTS0 S0 B0BTS0 S0
@@ -1099,9 +1162,9 @@ _kbd_sense_row4:
B0BTS1 S13 B0BTS1 S13
B0BSET keyNONE B0BSET keyNONE
B0BTS0 S14 B0BTS0 S14
B0BCLR keyFN CALL _key_fn_clear
B0BTS1 S14 B0BTS1 S14
B0BSET keyFN CALL _key_fn_set
B0BTS0 S15 B0BTS0 S15
B0BCLR keyPRINTSCREEN B0BCLR keyPRINTSCREEN
B0BTS1 S15 B0BTS1 S15
@@ -1178,6 +1241,24 @@ _kbd_sense_row5:
B0BSET keyINSERT B0BSET keyINSERT
RET RET
_key_rctrl_clear:
B0BCLR keyRCTRL
RET
_key_rctrl_set:
B0BTS0 keyFN
JMP @F
B0BSET keyRCTRL
RET
@@:
; Make sure we only toggle once until RCTRL is released
B0BTS0 keyRCTRL
RET
B0BSET keyRCTRL
; Toggle stateFnCtrlSwap
MOV A, #0x04
XOR modifierState2, A
RET
_kbd_sense_row6: _kbd_sense_row6:
; DB keyZ, keyC, keyX, keyRCTRL, keyV, keyM, keyCOMMA, keyPERIOD ; DB keyZ, keyC, keyX, keyRCTRL, keyV, keyM, keyCOMMA, keyPERIOD
B0BTS0 S0 B0BTS0 S0
@@ -1193,9 +1274,9 @@ _kbd_sense_row6:
B0BTS1 S2 B0BTS1 S2
B0BSET keyX B0BSET keyX
B0BTS0 S3 B0BTS0 S3
B0BCLR keyRCTRL CALL _key_rctrl_clear
B0BTS1 S3 B0BTS1 S3
B0BSET keyRCTRL CALL _key_rctrl_set
B0BTS0 S4 B0BTS0 S4
B0BCLR keyV B0BCLR keyV
B0BTS1 S4 B0BTS1 S4