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›