0100 ;BUTTERFINGERS 0110 ;BY KEVIN C. GEVATOSKY 0120 ;(c)1989, ANTIC PUBLISHING INC. 0130 ; 0140 DOSINI = $0C 0150 VKEYBD = $0208 ;KB int. vector. 0160 KBCODE = $D209 ;Current key. 0170 CH1 = $02F2 ;Prior key. 0180 CH = $02FC ;Last key. 0190 SH_CLR = 118 ;Key codes. 0200 CT_CLR = 182 0210 CT_SH_CLR = 246 0220 ; 0230 *= $0600 0240 ; 0250 ;This program provides two entry 0260 ;points so that it can be 0270 ;started from DOS or BASIC. 0280 ; 0290 START 0300 JMP INIT ;For DOS entry. 0310 NOP ;For BASIC entry 0320 PLA ;w/ X=USR(1540) 0330 ; 0340 ;Makes the program RESET-proof 0350 ; 0360 INIT 0370 LDA DOSINI ;Get current DOS 0380 STA NEW_INI+1 ;init address 0390 LDA DOSINI+1 ;and save in 0400 STA NEW_INI+2 ;new vector. 0410 LDA # <NEW_INI ;Put addr of 0420 STA DOSINI ;new vector in 0430 LDA # >NEW_INI ;old vector. 0440 STA DOSINI+1 0450 BNE SET_KBVEC ;(JUMP) 0460 ; 0470 NEW_INI 0480 JSR $FFFF ;New DOS init. 0490 ; 0500 ;Jump here on initialization or 0510 ;RESET to setup a new keyboard 0520 ;trap vector. 0530 ; 0540 SET_KBVEC 0550 SEI ;Kill IRQ's. 0560 LDA VKEYBD ;Save system KB 0570 STA SYSKBV ;interrupt addr 0580 LDA VKEYBD+1 ;replace w/the 0590 STA SYSKBV+1 ;addr to our 0600 LDA # <KEY_TRAP ;key-trap 0610 STA VKEYBD ;routine. 0620 LDA # >KEY_TRAP 0630 STA VKEYBD+1 0640 CLI ;Restore IRQ's. 0650 RTS 0660 ; 0670 ;Interrupt routine to replace 0680 ;SHFT+CLEAR and CTRL+CLEAR 0690 ;with SHFT+CTRL+CLEAR. 0700 ; 0710 KEY_TRAP 0720 PHA 0730 LDA KBCODE ;Get current key 0740 CMP #SH_CLR ;Filter out the 0750 BEQ GOT_YA ;standard clear 0760 ; 0770 CMP #CT_CLR ;screen keys. 0780 BEQ GOT_YA 0790 ; 0800 CMP #CT_SH_CLR ; Check for 0810 BNE GO_KB_INT ; our special 0820 ; key 0830 CLR_SCR ; combination 0840 LDA #SH_CLR 0850 STA CH ;Put clr-screen 0860 STA CH1 ;code for Editor 0870 GOT_YA 0880 PLA ;Return from the 0890 PLA ;interrupt. 0900 RTI 0910 ; 0920 GO_KB_INT 0930 PLA ;Pass all other 0940 JMP (SYSKBV) ;keys on to OS 0950 ; 0960 SYSKBV 0970 .DS 2 ;keybd handler. 0980 *= $02E0 ;DOS RUN address 0990 .WORD START 1000 .END
Back to previous page