0100 ; CONSOLE KEY EXPANDER 0110 ; BY MATT LOVELESS AND MIKE EGGERS 0120 ; (c) 1987, ANTIC PUBLISHING 0130 ; EQUATES 0140 CONSOL = $D01F ;CONSOLE BUTTONS 0150 SKSTAT = $D20F ;SERIAL PORT/KEYBOARD STATUS 0160 VALRTRN = 212 ;LOCATION TO STORE USR RETURN VALUE 0170 SETVBV = $E45C ;SET VBI VECTOR 0180 SYSVBV = $E45F ;SYSTEM VBI 0190 XITVBV = $E462 ;EXIT VBI 0200 ; 0210 *= $0600 0220 LDA #$00 0230 STA FLAG ;ZERO THE FLAG 0240 PLA 0250 BNE INIT 0260 ; 0270 RTS 0280 INIT 0290 TAX 0300 PLA ;DISCARD HIGH BYTE AWAY 0310 PLA ;GET LOW BYTE 0320 STA BUTTON ;SAVE IT 0330 DEX ;COMPENSATE FOR REMOVING FIRST ARGUMENT 0340 BEQ GETVBI ;IF ALL PARAMETERS ARE OFF THEN BRANCH 0350 LOOP1 0360 PLA ;REMOVE BAD 0370 PLA ;VALUES WHICH 0380 DEX ;MIGHT OCCUR 0390 BNE LOOP1 ;IN THE USR CALL 0400 ; 0410 GETVBI 0420 BIT BUTTON 0430 BEQ VBIOFF ;OPTION #0 0440 ; 0450 BMI VBION ;OPTION #128 0460 ; 0470 ;OPTION #1 0480 ; 0490 LDA #$01 0500 STA FLAG 0510 ; 0520 VBION 0530 LDA #BUTTON/256 ;HIGH BYTE FOR USR RETURN 0540 STA VALRTRN+1 0550 LDA #BUTTON&255 ;LOW BYTE 0560 STA VALRTRN 0570 ; GRAB VBI 0580 LDX #VBI/256 ;HIGH BYTE 0590 LDY #VBI&255 ;LOW BYTE 0600 LDA #$07 ;DEFERRED VBI 0610 JSR SETVBV 0620 LDA #$00 0630 STA BUTTON 0640 RTS 0650 ; 0660 VBIOFF 0670 LDA #CONSOL/256 ;HIGH BYTE FOR USR 0680 STA VALRTRN+1 0690 LDA #CONSOL&255 ;LOW BYTE 0700 STA VALRTRN 0710 LDX #XITVBV/256 ;HIGH BYTE 0720 LDY #XITVBV&255 ;LOW BYTE 0730 LDA #$07 ;DEFERRED VBI 0740 JMP SETVBV ;ITS RTS WILL RETURN TO CARTRIDGE 0750 ; 0760 ; THE DEFERRED VBI VECTOR POINTS 0770 ; HERE. 0780 ; 0790 VBI 0800 LDA SKSTAT 0810 AND #$08 ;"AND-OUT" ALL BUT BIT-3 (SHIFT KEY) 0820 ORA CONSOL ;OR, IN CONSOLE KEYS 0830 EOR #$0F ;SWITCH THE LOWER NIBBLE. 0840 LDX FLAG 0850 BNE ZERO ;ARE WE IN LATCHED MODE? 0860 ;---YES 0870 TAX ;COPY A-REG INTO X-REG 0880 AND #$F7 ;AND OUT SHIFT VALUE 0890 BEQ EXIT ;IF NO CONSOLE KEYS THEN EXIT 0900 ; 0910 TXA ;ELSE RETURN ORIGINAL VALUE 0920 JMP STORE 0930 ZERO 0940 TAX 0950 AND #$F7 ;"AND-OUT" SHIFT VALUE 0960 BEQ STORE ;IF NO CONSOLE KEYS THEN STORE A ZERO 0970 ; 0980 TXA ;OTHERWISE STORE THE ORIGINAL VALUE 0990 ; 1000 STORE 1010 STA BUTTON 1020 EXIT 1030 JMP XITVBV 1040 ; 1050 FLAG 1060 .BYTE 0 1070 BUTTON 1080 .BYTE 0 1090 ; 1100 .END
Back to previous page