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 ›