Classic Computer Magazine Archive 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