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¢