0100 ; LIGHT GUN DETECTOR›0110 ; BY MATTHEW RATCLIFF›0120 ; (c)1988, ANTIC PUBLISHING›0130 *= $5000›0140 .OPT OBJ›0150 ;›0160 LPENH = 564›0170 LPENV = 565›0180 STICK0 = 632›0190 GUNHERE = 14 ; Reading on port with gun›0200 GUNFIRE = 15 ; Gunport=15 when trigger pressed›0210 GUNPORT = $0600 ; Store gun port index here›0220 ;›0230 ; GUNDET -Look for the light gun›0240 ; don't return until found.›0250 ; When found, return the port›0260 ; number of the gun in the›0270 ; X register, and put it›0280 ; in the GUNPORT memory location›0290 ; NOTE:›0300 ; Detect LOW to HIGH on joystick›0310 ; ports since the OS on XL/XE's›0320 ; copy ports 0 & 1 to 2 & 3.›0330 ; On 400/800, any port 0-3›0340 ; is valid for gun.›0350 ;›0360 GUNDET›0370 LDX #0 ; First port›0380 WAIT›0390 LDA STICK0,X›0400 CMP #GUNHERE›0410 BEQ GUNFOUND›0420 ;›0430 INX ›0440 CPX #3›0450 BNE WAIT›0460 ;›0470 BEQ GUNDET›0480 ;›0490 GUNFOUND›0500 STX GUNPORT›0510 RTS ›0520 ;›0530 ; GUNREAD - A successful GUNDET›0540 ; is assumed, and GUNPORT RAM›0550 ; register is set to the proper›0560 ; joystick port for reading›0570 ; the light gun.›0580 ;›0590 ; On Exit:›0600 ; X = LPENH›0610 ; Y = LPENV›0620 ; A = STICk(GUNPORT)›0630 ; Zero flag is SET if the›0640 ; trigger is being pressed.›0650 ;›0660 GUNREAD›0670 LDX GUNPORT›0680 LDA STICK0,X›0690 LDX LPENH›0700 LDY LPENV›0710 CMP #GUNFIRE›0720 RTS ›0730 ;›0740 ; A simple test routine›0750 ; to use from DDT.›0760 ; The first BRK occurs after›0770 ; the gun is detected.›0780 ; At this BRK inspect›0790 ; the X register for the proper›0800 ; port number. Continue program›0810 ; from there. The next break›0820 ; occurs when the trigger is›0830 ; pressed.›0840 ;›0850 *= $6000›0860 GUNTEST›0870 JSR GUNDET›0880 BRK ›0890 ;›0900 SHOOTEMUP›0910 JSR GUNREAD›0920 BNE SHOOTEMUP›0930 ;›0940 BRK ›