
PROGRAM LISTING: 87-03/CONSOLE.M65
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