ô > KBDSEL/src  ô Background keyboard driver : (OSBYTE=&FFF4:OSARGS=&FFDA 2"EVNTV=&220:KEYV=&228:INSV=&22A <usb_D=&FCF8:usb_S=&FCF9 F kbd%=1 P: Z!Þ mcode% &300:load%=&FFFF08C0 d ã P=0 ¸ 1 nP%=load%:O%=mcode% x[OPT P*2+4 ‚.usb_NoKbd Œ#BRK:EQUB 255:EQUS "No kbd?":BRK –:   .exec% ª$LDX #&A8:LDY #0:LDA #1:JSR &FFDA ´&LDA (&A8),Y:CMP #—"0":BCC usb_Init ¾€ #15:STA usb_Port È: Ò .usb_Init ÜJSR usb_Flush:LDX #0 æ.usb_InitLp ðLDA usb_Cmd,X:JSR usb_Wr úINX:CPX #10:BNE usb_InitLp JSR usb_Rd:€ #8:PHP #JSR usb_Flush:PLP:BNE usb_NoKbd PHP:SEI:LDX #1 ".usb_InitLp2 ,LDA KEYV,X:STA oldKEYV+1,X 6"LDA usb_Vectors+0,X:STA KEYV,X @#LDA usb_Vectors+2,X:STA EVNTV,X JDEX:BPL usb_InitLp2 T!PLP:LDA #14:LDX #4:JMP OSBYTE ^.usb_Vectors hEQUW usb_KEY:EQUW usb_EVNT r: |".usb_Flush :BIT usb_D:LDX #16 †$.usb_FlushLp:DEX:BNE usb_FlushLp BIT usb_S:BPL usb_Flush:RTS š: ¤4.usb_Wr:BIT &FF:BMI usb_Wr2:BIT usb_S:BVS usb_Wr ®.usb_Wr2:STA usb_D:RTS ¸4.usb_Rd:BIT &FF:BMI usb_Rd2:BIT usb_S:BMI usb_Rd Â#.usb_Rd2:LDA usb_D:.usb_bye:RTS Ì: Ö .usb_KEY àBVS oldKEYV:BCS oldKEYV êLJSR oldKEYV:BMI usb_bye:BVS usb_bye :\ oldKEYV Shift or Ctrl pressed ôNLDA kbd_modify:BIT kbd_modify:RTS :\ Set A and flags from Shift/Ctrl þ .oldKEYV  JMP 0 :  .usb_EVNT &8CMP #4:BNE usb_bye :\ Not VSync 0: :?LDA #&84:JSR usb_Wr:LDA #13:JSR usb_Wr :\ Device Read Data D5JSR usb_Rd:CLC:BEQ kbd_flush:CMP #9:BCS kbd_flush N:JSR usb_Rd:JSR usb_Rd:TAY :\ Y=modifiers XDJSR usb_Rd:JSR usb_Rd:CMP #&FF :\ A=keypress, set NE+CC b.kbd_flush lBPHP:JSR usb_Flush:PLP:BCS kbd_exit :\ Not our data packet v: € .kbd_exit HRTS R: \.kbd_repeat f>LDA &E7:BEQ kbd_exit :\ Repeat disabled pDDEC &E7:BEQ P%+6:DEC &E7:BNE kbd_exit :\ Countdown not reached zMLDA &255:STA &E7 :\ Copy KeyRepeat to KeyCountdown „FLDA kbd_lastK:BNE kbd_keypress :\ Insert another keypress Ž: ˜.kbd_convert ¢CMP #&39:BNE kbd_notcaps ¬1LDA &25A:‚ #16:STA &25A:RTS :\ CAPS ¶.kbd_notcaps À:SEC:SBC #4:CMP #&64:BCS kbd_exit :\ No keypress Ê1ADC #—"A":CMP #—"[":BCC kbd_tab :\ Letter Ô2SBC #42:CMP #—"9"+1:BCC kbd_tab :\ Digit ÞTAX:LDA kbd_keytable-58,X è2BNE kbd_tab:LDA &26B :\ TAB ò .kbd_tab ü6CMP #—"!":BCC kbd_exit :\ ctrls+spc BCMP #127:BEQ kbd_done:BCS kbd_topset :\ DEL and topbit keys 8CMP #—"_":BCS kbd_misc :\ &5F and &60 4CMP #—"A":BCS kbd_alpha :\ Letters $ .kbd_misc .7BIT kbd_modify:BVC kbd_noshift :\ No SHIFT 8B€ #&1F:TAX:LDA kbd_shift,X :\ Get shifted character B.kbd_noshift LECMP #—"@":BCS kbd_ctrl:RTS :\ If alpha, check for Ctrl V.kbd_topset `>CMP #&E0:BCC kbd_top1 :\ Not keypad keys jDBNE kbd_keypad:LDA #&CD :\ Special case for KRet t.kbd_keypad ~ALDX &27E:BNE kbd_keypad1:SBC #&D0:SEC :\ If base=0, use '0' ˆ.kbd_keypad1 ’DSBC #&F0:CLC:ADC &27E:CLC:RTS :\ Translate keypad keys œ .kbd_top1 ¦8BIT kbd_modify:BVC kbd_top2:‚ #16 :\ Apply SHIFT ° .kbd_top2 º7BIT kbd_modify:BPL kbd_top3:‚ #32 :\ Apply CTRL Ä .kbd_top3 Î CLC:RTS Ø.kbd_alpha âCMP #—"[":BCS tab_alpha2 ì3ROR A:‚ &25A:€ #&EF:‚ &25A:ROL A :\ Apply CAPS ö.tab_alpha2 8BIT kbd_modify:BVC kbd_ctrl:‚ #32 :\ Apply SHIFT  .kbd_ctrl 7BIT kbd_modify:BPL kbd_done:€ #31 :\ Apply CTRL  .kbd_done ( CLC:RTS 2: < .usb_Cmd F.usb_SCS:EQUB &10:EQUB 13 P.usb_IPH:EQUB &91:EQUB 13 Z.usb_QP2:EQUB &2C:EQUB 13 d.usb_SC0:EQUB &86:EQUB &20 n.usb_Port:EQUB &00:EQUB 13 x: ‚.kbd_shift Œ:EQUS À"~!@~$%&""()*+<_>?)!@#$%^&*(*:<+>?",kbd%=0):\ US –:EQUS À"~!@~$%&@()*+<_>?)!""`$%^&*(*:<+>?",kbd%=1):\ UK  ;EQUS À"_!@~$%&*()*+<=>?_!""#$%&'()*+<+>?",kbd%=2):\ BBC ª.kbd_keytable ´+EQUB 48:EQUB 13:EQUB 27:EQUB 127:EQUB 0 ¾'EQUS À" -=[]\#;'`,./*",kbd%=0):\ US È'EQUS À" -=[]\#;'`,./*",kbd%=1):\ UK Ò(EQUS À" -\[]\^;:`,./*",kbd%=2):\ BBC ÜKEQUB &81:EQUB &82:EQUB &83:EQUB &84:EQUB &85:EQUB &86:EQUB &87:EQUB &88 æKEQUB &89:EQUB &CA:EQUB &CB:EQUB &CC:EQUB &80:EQUB &E3:EQUB &8A:EQUB &CD ðKEQUB &C8:EQUB &9F:EQUB &7F:EQUB &8B:EQUB &9E:EQUB &8D:EQUB &8C:EQUB &8E úKEQUB &8F:EQUB &E2:EQUB &EF:EQUB &EA:EQUB &ED:EQUB &EB:EQUB &E0:EQUB &F1 KEQUB &F2:EQUB &F3:EQUB &F4:EQUB &F5:EQUB &F6:EQUB &F7:EQUB &F8:EQUB &F9 9EQUB &F0:EQUB &EE:EQUS "\":EQUB &C1:EQUB &C0:EQUB &FD : "".kbd_lastK:BRK:.kbd_modify:BRK ,: 6] @)í:ç (P%€&FFFF)>&B00:ñ"Code overrun":à Jñ"Save with:" TDñ"*SAVE USBKBD ";~mcode%;" ";~O%;" ";~exec%„&FFFF0000;" ";~load% ÿ