0 ;FIRESQ:ALLOWS WIZARD/JOYSTICK1 10 ;TO FIRE A MISSILE 20 ; 30 FIRESQ LDA SQFLAG ;LOAD FLAG FOR MISSILE FIRED 40 CMP #1 ;IF=1 THEN OK TO FIRE 50 BEQ SQ0 60 RTS 70 SQ0 LDA $0285 ;LOAD TRIGGER 80 BEQ SQ1 90 RTS 0100 SQ1 LDA $0279 ;LOAD JOYSTICK VALUE 0110 ;DETERMINE DIRECTION THAT MISSILE IS TO MOVE 0120 CMP #7 0130 BEQ PLACESQ 0140 CMP #11 0150 BEQ PLACESQ 0160 CMP #13 0170 BEQ PLACESQ 0180 CMP #14 0190 BEQ PLACESQ 0200 RTS 0210 PLACESQ STA DIRFLAG ;SAVE DIRECTION MISSILE IS MOVING 0220 STA SQFLAG ;SET FLAG FOR MISSILE FIRED 0230 LDY P0 ;LOAD HORIZ POS OF MISSILE 0240 STY MISP1 ;SAVE AS HORIZ POS OF MAN 0250 STY $D004 0260 CLC 0270 LDA TOP1+1 ;VERT START OF MAN 0280 ADC #4 ;FIND MIDDLE OF MAN 0290 STA MIS2 ;SAVE AS VERT POS OF MISSILE 0300 TAX 0310 LDA MIS,X 0320 ORA #3 ;MISSILE DRAWING 0330 STA MIS,X ;DISPLAY MISSILE 0340 RTS 0341 ; 0342 ;MOVESQ:LOADS VARIABLE OF MISSILE 0343 ;DIRECTION AND DETERMINES WHICH 0344 ;DIRECTION TO MOVE MISSILE 0345 ; 0350 MOVESQ BNE MQ711 0360 LDA DIRFLAG,X ;LOAD DIECTION MISSILE IS MOVING 0370 ;DETERMINE WHICH DIRECTION TO MOVE 0380 CMP #7 0390 BEQ MQ7 0400 CMP #11 0410 BEQ MQ11 0420 CMP #13 0430 BEQ MQ13 0440 CMP #14 0450 BEQ MQ14 0460 RTS 0461 ; 0462 ;MQ7:MOVES MISSILE RIGHT 0470 MQ7 LDA MISP1,X ;LOAD HORIZ POS 0480 CMP #195 ;CMP WITH RIGHT LIMIT 0490 BCC MQ7OK ;IF < THEN MOVE MISSILE 0500 MQ711 LDA MIS2,X ;VERT POS OF MISSILE 0510 TAY 0520 LDA MIS,Y ;LOAD DRAWING IN MISSILE MEMORY 0530 AND T7 ;USE "AND" TO TURN OFF 0540 STA MIS,Y ;BITS OF MISSILE 0550 LDA #1 ;RESET FLAGS TO 0560 STA SQFLAG,X ;ALLOW ANOTHER 0570 STA DIRFLAG,X ;MISSILE TO BE FIRED 0580 RTS 0590 MQ7OK INC MISP1,X ;ADD 1 TO HORIZ POS OF MISSILE 0600 MQ72 LDA MISP1,X ;LOAD NEW POS 0610 LDY #0 ;CLEAR Y 0620 STA (HPOST),Y ;SAVE IN HORIZ REGISTER 0630 RTS 0631 ; 0632 ;MQ11:MOVES MISSILE LEFT 0633 ; 0640 MQ11 LDA MISP1,X ;HORIZ POS OF MISSILE 0650 CMP #60 ;IS IT AT LEFT LIMIT 0660 BCS MQ11OK ;IF AT LIMIT 0670 JMP MQ711 ;JMP TO REMOVE MISSILE 0680 MQ11OK DEC MISP1,X ;ELSE SUB1 FROM HORIZ POS 0690 JMP MQ72 ;JMP TO SAVE NEW POS 0691 ; 0692 ;MQ13:MOVES MISSILE UP 0693 ; 0700 MQ13 LDA MIS2,X ;VERT POS OF MISSILE 0710 CMP #207 ;IS IT AT LOWER LIMIT 0720 BEQ MQ711 ;IF YES THEN REMOVE MISSILE 0730 INC MIS2,X ;ELSE SET NEW POS 0740 LDA MIS2,X 0750 TAX 0760 LDA MIS-1,X ;LOAD OLD POS 0770 AND T7 ;USE "AND" TO CLEAR BITS 0780 STA MIS-1,X ;SAVE NEW VALUE 0790 LDA MIS,X ;LOAD VALUE IN NEW POS 0800 ORA T8 ;USE "OR" TO TURN ON MISSILE BITS 0810 STA MIS,X ;SAVE NEW VALUE 0820 RTS 0821 ; 0822 ;MQ14:MOVES MISSILE DOWN 0823 ; 0830 MQ14 LDA MIS2,X ;MISSILE VERT POS 0840 CMP #32 ;IS IT AT UPPER LIMIT 0850 BEQ MQ711 ;IF YES THEN REMOVE 0860 DEC MIS2,X ;ELSE SET NEW POS 0870 LDA MIS2,X 0880 TAX 0890 LDA MIS+1,X ;LOAD VALUE AT OLD POS 0900 AND T7 ;CLEAR BITS OF MISSILE 0910 STA MIS+1,X ;SAVE NEW VALUE 0920 LDA MIS,X ;LOAD VALUE IN NEW POS 0930 ORA T8 ;USE "OR" TO TURN ON MISSILE BITS 0940 STA MIS,X ;SAVE NEW VALUE 0950 RTS 0951 ; 0952 ;WVAR:SETS VARIABLES TO ALLOW 0953 ;WIZARD TO SHOOT MISSILE 0954 ; 0960 WVAR LDA #3 ;MISSILE DRAWING 0970 STA T8 0980 LDA #252 ;VALUE TO CLEAR BITS 0990 STA T7 ;0 AND 1 IN MISSILE MEMORY 1000 LDA #$D0 ;HORIZ REGISTER 1010 STA HPOST+1 ;FOR MISSILE 1020 LDA #$04 1030 STA HPOST 1040 RTS 1041 ; 1042 ;TVAR:SETS VARIABLES TO ALLOW 1043 ;TROLL TO SHOOT MISSILE 1044 ; 1050 TVAR LDA #192 ;VALUE OF 1060 STA T8 ;MISSILE DRAWING 1070 LDA #63 ;VALUE TO CLEAR BITS 1080 STA T7 ;7AND6 OF MISSILE MEMORY 1090 LDA #$D0 ;HORIZ REGISTER 1100 STA HPOST+1 ;FOR MISSILE 1110 LDA #$07 1120 STA HPOST 1130 RTS