09       .OPT NO LIST›10 ;  SAVE #D1:KEYBDIRQ.M65›20 ;›30 ;›40 ;  LOAD #D1:CASSETTE.M65›50 ;›52       .PAGE "Keyboard IRQ Handler"›60 ;  *= $FC19›61        LIST  ›63       .LOCAL ›70 ;›80 ; Keyboard IRQ processing routines›0100 ; Note all references to f1, f2,›0110 ; etc. and LED's are to 1200xl.›0120 ; The code for these is in all›0130 ; xl/xe rom's even though the›0140 ; hardware is not.›0150 ;›0160 ; On the 1200xl, bits 2 and 3 of›0170 ; PortB control LED's 1 (kbd)›0180 ; and 2 (charset). LED's are on›0190 ; when bits are off.›0200 ;›0210 ; A program using 130xe bank›0220 ; switching should be unaffected›0230 ; as long as the OS is in ROM.›0240 ; A custom OS which accesses the›0250 ; 1200xl functions, however, may›0260 ; result in unwanted changes in›0270 ; PortB.›0280 ;›064537 KIR TXA       Save registers›064538   PHA ›064539   TYA ›064540   PHA ›064541   LDY PORTB   For led's›064544   LDA KBCODE  Is key same as›064547   CMP CH1     last accepted?›064550   BNE ?GOTKEY Go if not.›064552   LDX KEYDEL  Exit if bounce›064555   BNE ?RESET  time not done.›064557 ?GOTKEY LDX KEYDIS›064560   CMP #$83    Control f1?›064562   BNE ?NOTCF1›064564   TXA         Toggle keyboard›064565   EOR #$FF    disable flag.›064567   STA KEYDIS  Nonzero=kbd off›064570   BNE ?LED1ON Go if now off.›064572   TYA         PortB to a›064573   ORA #4      Set b2 (LED off)›064575   BNE ?GOTCF1 Go always.›064577 ?LED1ON TYA   PortB to a. Kill›064578   AND #$FB    bit2 (LED1 on)›064580 ?GOTCF1 TAY   New PortB to y›064581   BCS ?VALID  Go always›064583 ?NOTCF1 TXA   Recheck delay›064584   BNE ?EXIT   Go if not done›064586   LDA KBCODE  Get key again›064589   TAX         and copy in x›064590   CMP #159    Control 1?›064592   BNE ?HELP?›064594   LDA SSFLAG  Yes, toggle flag›064597   EOR #$FF    (nonzero=freeze)›064599   STA SSFLAG›064602   BCS ?VALID  Go always›064604 ?HELP? AND #$3F Mask Shft/Ctrl›064606   CMP #17     If not Help, go›064608   BNE ?SCREN? check others›064609 ;      else save actual›064610   STX HELPFG  key press here›064613   BEQ ?VALID  only. Go always.›064615 ?STOWIT STX CH Update user and›064618   STX CH1     last key reg's›064621 ?VALID LDA #3 Valid key exit.›064623   STA KEYDEL  Set bounce delay›064626   LDA #0      and kill attract›064628   STA ATRACT  mode›064630 ?RESET LDA KRPDEL Reset key›064633   STA SRTIMR  repeat timer›064636   LDA SDMCTL  Is screen on?›064639   BNE ?EXIT   If so, exit›064641   LDA DMASAV  Restore screen›064644   STA SDMCTL  on any keypress›064647 ?EXIT STY PORTB Enable led's›064650   PLA         Restore reg's›064651   TAY ›064652   PLA ›064653   TAX ›064654   PLA ›064655   RTI ›064656 ?SCREN? CPX #$84 Control f2?›064658   BEQ ?GOTCF2›064660   CPX #$94    Control f4?›064662   BNE ?STOWIT Go if not.›064664   LDA CHBAS   Else switch the›064667   LDX CHSALT  character sets›064670   STA CHSALT  Alt.=Old Active›064673   STX CHBAS   Active=Old Alt.›064676   CPX # >CHARSET2 Go if alt.›064678   BEQ ?LED2ON set now active›064680   TYA         PortB to a›064681   ORA #8      Set bit3›064683   TAY         Back to y›064684   BNE ?VALID  Go always.›064686 ?LED2ON TYA   PortB to a›064687   AND #$F7    Kill b3 (LED on)›064689   TAY         Back to y›064690   JMP ?VALID›064693 ?GOTCF2 LDA SDMCTL Toggle S:›064696   BEQ ?EXIT   Go if off›064698   STA DMASAV  Else save value›064701   LDA #0      for auto restore›064703   STA SDMCTL  and kill screen›064706   BEQ ?EXIT   Go always›064708 FDL PHA       Display list›064709   LDA COLOR2  interrupt code›064712    AEOR  COLRSH for fine scroll›064715    AAND  DRKMSK›064718   STA WSYNC›064721   STA COLPF1›064724   PLA ›064725   RTI ›064726   .BYTE 0,0   Unused bytes›