0703 ; CHECK UP DOWN MOVE›0704 ; ------------------›0705 CHKUDM›0706 STY TEMP SAV HORIZ POS›0707 STX TEMP+1 SAV VERT POS›0708 JSR GETSCRN GET SCRN CHAR›0709 BNE Q10 CHAR THERE, SO EXIT›0710 LDX TEMP+1 GET VERT POS›0711 LDA TEMP GET HORIZ POS›0712 CLC SETUP FOR ADD›0713 ADC #4 PNT TO MIDDLE OF PLAYER›0714 TAY ›0715 JSR GETSCRN GET SCRN CHAR›0716 BNE Q10 CHAR THERE, SO EXIT›0717 LDX TEMP+1 GET VERT POS›0718 LDA TEMP GET HORIZ POS›0719 CLC SETUP FOR ADD›0720 ADC #6 PNT TO RIGHT SIDE OF PLAYER›0721 TAY ›0722 JSR GETSCRN GET SCRN CHAR›0723 Q10 RTS ›0724 ;›0725 ; CHECK LEFT RIGHT MOVE›0726 ; ---------------------›0727 CHKLRM STY TEMP SAVE HORIZ POS›0728 STX TEMP+1 SAVE VERT POS›0729 JSR GETSCRN GET SCRN CHAR›0730 BNE Q11 SOMETHING THERE, SO EXIT›0731 LDY TEMP GET HORIZ POS›0732 LDA TEMP+1 GET VERT POS›0733 CLC PREPARE FOR ADD›0734 ADC #7 PNT TO PLAYER BOTTOM LINE›0735 TAX ›0736 JSR GETSCRN GET SCRN CHAR›0737 Q11 RTS EXIT›0738 ;›0739 ; PUT MAN IMAGE IN PLAYER AREA›0740 ; ----------------------------›0741 PUTMAN LDX MANPICNO GET CURRENT MAN IMAGE #›0742 LDA #-8›0743 Q12 CLC ›0744 ADC #8 CALC›0745 DEX IMAGE›0746 BNE Q12 OFFSET›0747 ;›0748 TAY SET IMAGE OFFSET›0749 LDA #8 SET # OF BYTES IN IMAGE›0750 STA SIZE AND SAVE›0751 LDX MANPOSV GET CURRENT VERT POS›0752 ;›0753 Q13 LDA MANH1,Y GET MAN IMAGE BYTE›0754 STA PLR0,X PUT IN PLAYER AREA›0755 INX PNT TO NEXT PLAYER AREA BYTE›0756 INY PNT TO NEXT IMAGE BYTE›0757 DEC SIZE MORE TO MOVE ?›0758 BNE Q13 YES, SO MOVE THEM›0759 RTS ›0760 ;›0761 ; GET SCREEN CHAR›0762 ; ---------------›0763 ; ENTER WITH:›0764 ;›0765 ; REG X = SCAN LINE #›0766 ; REG Y = COLOR CLOCK #›0767 ;›0768 GETSCRN TXA GET LINE #›0769 SEC SETUP FOR SUBT›0770 SBC #$38 PNT TO PLAY AREA›0771 LSR A DIVIDE LINE # BY 8›0772 LSR A # OF LINES IN CHAR›0773 LSR A›0774 TAX AND SAVE›0775 TYA GET COL #›0776 SEC SETUP FOR SUBT›0777 SBC #$30 COMPENSATE FOR SCRN LEFT EDGE›0778 LSR A DIVIDE COL BY 4›0779 LSR A # OF COLS IN CHAR›0780 TAY AND SAVE›0781 LDA #DISP&255 GET PLAY AREA START (LO)›0782 STA DESADR ; & SAVE›0783 LDA #DISP/256 GET PLAY AREA START (HO)›0784 STA DESADR+1 ; & SAVE›0785 Q14 DEX IS LINE # 0 ?›0786 BMI Q15 YES, SO ADD COL VALUE›0787 CLC SETUP FOR ADD›0788 LDA DESADR GET PLAY AREA ADR (LO)›0789 ADC #M4LSIZE PNT TO NEXT LINE›0790 STA DESADR ; & SAVE›0791 LDA DESADR+1 GET PLAY AREA ADR (HO)›0792 ADC #0 ADD CARRY IF ANY›0793 STA DESADR+1 ; & SAVE›0794 JMP Q14 SEE IF LINES ACCOUNTED FOR›0795 ;›0796 Q15 TYA GET COL #›0797 CLC SETUP FOR ADD›0798 ADC DESADR ADD COL TO ADR (LO)›0799 STA DESADR ; & SAVE›0800 LDA #0›0801 ADC DESADR+1 ADD CARRY IF ANY TO HO ADR›0802 STA DESADR+1 ; & SAVE›0803 LDY #0 CLEAR INDEX›0804 LDA (DESADR),Y GET SCREEN CHAR›0805 RTS ELSE, EXIT›0806 ;›0807 ; MOVE DOG 1›0808 ; ----------›0809 ; DOG 1 ALIGNS ITSELF ON MAN'S HORIZ AXIS›0810 ; AND ATTACKS ON VERT AXIS›0811 ;›0812 MOVDOG1›0813 LDA #0›0814 STA DOGNO SET DOG 1 OFFSET›0815 JSR MOVDOGH MOVE DOG HORIZ›0816 BEQ CHKDOG1V NO MOVE, SO TRY VERTICAL›0817 RTS EXIT›0818 CHKDOG1V JSR CHKDOGV MOVE DOG VERTICAL›0819 RTS EXIT›0820 ;›0821 ; MOVE DOG 2›0822 ; ----------›0823 ; DOG 2 ALIGNS ITSELF ON MAN'S VERT AXIS›0824 ; AND ATTACKS ON HORIZ AXIS›0825 ;›0826 MOVDOG2›0827 LDA #1›0828 STA DOGNO SET DOG 2 OFFSET›0829 JSR CHKDOGV MOVE DOG VERT IF POSSIBLE›0830 BEQ CHKDOG2H NO MOVE, SO TRY HORIZ›0831 RTS ELSE, EXIT›0832 CHKDOG2H›0833 JSR MOVDOGH MOVE DOG HORIZ›0834 RTS EXIT›0835 ;›0836 ; MOVE DOG 3›0837 ; ----------›0838 ; DOG 3 MOVES ON VERT & HORIZ PLANES ON SAME TURN›0839 ; TO REACH THE MAN›0840 ;›0841 MOVDOG3›0842 LDA #2›0843 STA DOGNO SET DOG 3 OFFSET›0844 JSR MOVDOGH MOVE DOG HORIZ›0845 JSR CHKDOGV MOVE DOG 3 VERT IF POSSIBLE›0846 RTS EXIT›0847 ;›0848 ; MOVE DOG VERTICALLY›0849 ; -------------------›0850 CHKDOGV›0851 LDA #PLR1&255 GET 1ST DOG PLAY ADR (LO)›0852 STA DESADR ; & SAVE›0853 LDA #PLR1/256 GET 1ST DOG PLAY ADR (HO)›0854 STA DESADR+1 ; & SAVE›0855 LDY DOGNO GET CURRENT DOG #›0856 Q16 BEQ Q17 MATCH, SO START MOVE›0857 INC DESADR+1 ELSE, SET NEXT DOG PLAY AREA›0858 DEY SET Z FLAG IF MATCH›0859 JMP Q16 SEE IF MATCH NOW›0860 ;›0861 Q17 LDX DOGNO GET CURRENT DOG #›0862 LDA DOGPOSV,X GET DOG VERT POS›0863 CMP MANPOSV COMPARE WITH MAN VERT POS›0864 BNE Q18 NOT SAME, SO MOVE VERTICAL›0865 RTS SAME, SO EXIT›0866 Q18 BCS MOVDOGU MAN ABOVE, MOVE DOG UP›0867 MOVDOGD LDA DESADR›0868 PHA SAVE DOG PLAY AREA (LO)›0869 LDA DESADR+1›0870 PHA SAVE DOG PLAY AREA (HO)›0871 LDA DOGPOSH,X GET DOG HORIZ POS›0872 TAY ›0873 LDA DOGPOSV,X GET DOG VERT POS›0874 CLC SETUP ADD›0875 ADC #8 PNT TO LINE BELOW›0876 TAX ›0877 JSR CHKUDM CHECK FOR BRICKS›0878 BEQ Q19 NO BRICKS, SO CONTINUE›0879 PLA ›0880 PLA CLEAR STACK›0881 LDA #0 ELSE, SET Z FLAG(NO MOVE)›0882 RTS AND EXIT›0883 Q19 LDX DOGNO GET CURRENT DOG #›0884 PLA GET DOG PLAY ADR (HO)›0885 STA DESADR+1›0886 PLA GET DOG PLAY ADR (LO)›0887 STA DESADR›0888 LDY DOGPOSV,X GET LINE #›0889 STA (DESADR),Y BLANK AROUND OLD DOG›0890 INC DOGPOSV,X PNT TO NEW LINE›0891 INY ›0892 SHONEWD LDX #0 SET SRCE INDEX›0893 LDA #8 SET # OF BYTES IN DOG IMAGE›0894 STA SIZE SAVE # OF BYTES›0895 Q20 LDA DOGIMAGE,X GET DOG IMAGE BYTE›0896 STA (DESADR),Y PUT IN DOG PLAY AREA›0897 INX PNT TO NEXT PLAYER AREA BYTE›0898 INY PNT TO NEXT DOG IMAGE BYTE›0899 DEC SIZE MORE BYTES TO MOVE ?›0900 BNE Q20 YES›0901 LDA #1 NO, SET NZ FLAG(MOVE OCCURRED)›0902 RTS ›0903 ;›0904 MOVDOGU LDX DOGNO GET CURRENT DOG #›0905 LDA DESADR›0906 PHA SAVE DOG PLAY AREA (LO)›0907 LDA DESADR+1›0908 PHA SAVE DOG PLAY AREA (HO)›0909 LDA DOGPOSH,X GET DOG HORIZ POS›0910 TAY ›0911 LDA DOGPOSV,X GET DOG VERT POS›0912 TAX ›0913 DEX PNT TO LINE ABOVE›0914 JSR CHKUDM SEE IF ANY BRICKS›0915 BEQ Q21 NO BRICKS, SO OK›0916 PLA ›0917 PLA CLEAR STACK›0918 LDA #0 SET Z FLAG (NO MOVE)›0919 RTS ›0920 Q21 LDX DOGNO GET CURRENT DOG #›0921 PLA GET DOG PLAY ADR (HO)›0922 STA DESADR+1›0923 PLA GET DOG PLAY ADR (LO)›0924 STA DESADR›0925 DEC DOGPOSV,X PNT TO LINE ABOVE›0926 LDA DOGPOSV,X GET NEW LINE #›0927 PHA SAVE IT›0928 CLC SETUP ADD›0929 ADC #8 PNT TO END OF DOG›0930 TAY SET INDEX REG›0931 LDA #0 SET VALUE TO BLANK DOG CHAR›0932 STA (DESADR),Y BLANK AROUND OLD DOG›0933 PLA GET NEW LINE #›0934 TAY ›0935 JMP SHONEWD SHOW NEW DOG IMAGE›0936 ;›0937 ; MOVE DOG HORIZONTALLY›0938 ; ---------------------›0939 MOVDOGH›0940 LDX DOGNO GET CURRENT DOG #›0941 LDA DOGPOSH,X GET HORIZ POS›0942 CMP MANPOSH COMPARE WITH MAN'S HORIZ POS›0943 BNE Q22 NOT SAME, SO MOVE›0944 RTS ELSE, EXIT›0945 ;›0946 Q22 BCS MOVDOGL MAN TO LEFT, SO MOVE LEFT›0947 MOVDOGR LDA DOGPOSH,X GET DOG HORIZ POS›0948 CLC SETUP ADD›0949 ADC #8 PNT TO DOG RIGHT SIDE›0950 TAY SAVE IN INDEX›0951 JSR CHKBRKH CHECK FOR BRICKS THERE›0952 BEQ Q23 NO CHAR SO CONTINUE›0953 RTS CAN'T MOVE SO EXIT›0954 Q23 INC DOGPOSH,X SET COL TO RIGHT›0955 SAVDOGH LDA DOGPOSH,X GET NEW COL›0956 STA HPOSP1,X SET HARDWARE HORIZ POS›0957 RTS EXIT›0958 ;›0959 MOVDOGL LDY DOGPOSH,X GET DOG HORIZ POS›0960 DEY SET COL TO LEFT›0961 JSR CHKBRKH CHECK FOR BRICKS›0962 BEQ Q24 NO BRICKS, SO CONTINUE›0963 RTS ELSE, EXIT›0964 Q24 DEC DOGPOSH,X SET COL TO LEFT›0965 JMP SAVDOGH SET DOG HORIZ POS›0966 ;›0967 ; CHECK FOR BRICKS (HORIZ)›0968 ; ------------------------›0969 CHKBRKH STY TEMP+2 SAVE HORIZ POS TO CHECK›0970 LDA DOGPOSV,X GET DOG VERT POS›0971 TAX PUT IN INDEX REG›0972 JSR CHKLRM CHK IF MOVE OK›0973 PHP SAVE Z FLAG›0974 LDX DOGNO GET CURRENT DOG #›0975 PLP RESTORE Z FLAG›0976 RTS ELSE, CAN'T MOVE›0977 ;›0978 ; MOVE BLOCK OF DATA›0979 ; ------------------›0980 ; ENTER WITH:›0981 ; LOC 80,81 = DEST›0982 ; LOC 82,83 = SRCE›0983 ; LOC 84,85 = SIZE›0984 ;›0985 MOVE›0986 LDY #0›0987 Q25 LDA (SRCADR),Y GET SRCE CHAR›0988 STA (DESADR),Y MOVE TO DEST›0989 JSR BUMPSRC PNT TO NEXT SRCE ADR›0990 JSR BUMPDES PNT TO NEXT DEST ADR›0991 JSR DECSIZE MORE TO MOVE ?›0992 BNE Q25 YES, SO MOVE THEM›0993 RTS NO, SO EXIT›0994 ;›0995 ; FILL BLOCK OF MEMORY›0996 ; --------------------›0997 ; ENTER WITH:›0998 ; LOC 80,81 = DEST›0999 ; LOC 84,85 = SIZE›1000 ; REG X = FILL CHAR›1001 ;›1002 FILL›1003 TXA GET FILL CHAR›1004 LDY #0›1005 STA (DESADR),Y PUT CHAR IN MEMORY›1006 JSR BUMPDES PNT TO NEXT DEST ADR›1007 JSR DECSIZE MORE TO FILL ?›1008 BNE FILL YES, SO FILL THEM›1009 RTS NO, SO EXIT›1010 ;›1011 BUMPSRC›1012 CLC SETUP FOR ADD›1013 LDA SRCADR GET LO SRCE ADR›1014 ADC #1 ADJUST LO BYTE›1015 STA SRCADR SAVE LO SRCE ADR›1016 LDA SRCADR+1 GET HO SRCE ADR›1017 ADC #0 ADD CARRY IF ANY›1018 STA SRCADR+1 SAVE HO SRCE ADR›1019 ;›1020 RTS ›1021 ;›1022 BUMPDES›1023 CLC SETUP FOR ADD›1024 LDA DESADR GET LO DEST ADR›1025 ADC #1 ADJUST LO BYTE›1026 STA DESADR SAVE LO DEST ADR›1027 LDA DESADR+1 GET HO DEST ADR›1028 ADC #0 ADD CARRY IF ANY›1029 STA DESADR+1 SAVE HO DEST ADR›1030 RTS ›1031 ;›1032 DECSIZE›1033 SEC PREPARE FOR SUBTRACT›1034 LDA SIZE GET LO BYTE OF SIZE›1035 SBC #1 ADJUST LO SIZE BYTE›1036 STA SIZE SAVE LO SIZE›1037 BNE Q26 LO BYTE NOT 0, SO CONTINUE›1038 LDA SIZE+1 GET HO SIZE BYTE›1039 BNE Q27 NOT 0, SO CONTINUE›1040 RTS SIZE NOW 0, EXIT WITH Z FLAG›1041 Q26 LDA SIZE+1 GET HO BYTE OF SIZE›1042 Q27 SBC #0 ADJUST HO SIZE BYTE›1043 STA SIZE+1 SAVE HO SIZE BYTE›1044 LDA #1 SIZE NOT 0, SET NZ FLAG›1045 RTS EXIT›1046 ;›1047 ; MAIN DELAY›1048 ; ----------›1049 MDELAY LDX MDELHO GET DELAY HO VALUE›1050 LDY MDELLO GET DELAY LO VALUE›1051 Q28 DEY LO COUNT DONE ?›1052 BNE Q28 NO›1053 DEX LO COUNT DONE ?›1054 BNE Q28 NO›1055 RTS YES, SO EXIT›1056 ;›1057 ; CHECK IF MAN COLLIDED WITH DOG›1058 ; ------------------------------›1059 CHKMANOK›1060 LDA P0PL GET MAN/DOG COLLISION INDICATOR›1061 AND #$0E GET RID OF UNUSED BITS›1062 RTS EXIT WITH Z FLAG SET IF NO HITS›1063 ;›1064 ; UPDATE THE SCORE›1065 ; ----------------›1066 ;›1067 ; REG Y=VALUE TO ADD TO SCORE›1068 ;›1069 ADDSCORE LDA SCORE+1 GET 10,000 UNIT VALUE›1070 STA TEMP ; & SAVE›1071 ADDSCOR1 LDX #5 SET TO PNT TO LO DIGIT›1072 Q29 INC SCORE,X INC DIGIT›1073 LDA SCORE,X GET DIGIT›1074 CMP #$1A PAST '9' ?›1075 BNE Q30 NO, SO CONTINUE ADDING›1076 LDA #$10 YES, SO SET ATASCII 0›1077 STA SCORE,X SAVE DIGIT›1078 DEX PNT TO NEXT HIGHER DIGIT›1079 BPL Q29 IF WITHIN 6 DIGITS, CONTINUE›1080 Q30 DEY MORE TO ADD ?›1081 BNE ADDSCOR1 YES›1082 ;›1083 LDA TEMP GET ORIGINAL 10,000 UNIT VALUE›1084 CMP SCORE+1 HAS ANOTHER 10,000 BEEN REACHED?›1085 BEQ Q31 NO, SO EXIT›1086 LDA LIVES YES, SO GET # OF LIVES›1087 CMP #4 ALREADY HAVE MAXIMUM ?›1088 BEQ Q31 YES›1089 INC LIVES NO, SO ADD A LIFE›1090 JSR SHOWLIVS SHOW EXTRA LIFE ON SCRN›1091 Q31 RTS ELSE, EXIT›1092 ;›1093 ; SHOW LIVES REMAINING›1094 ; --------------------›1095 SHOWLIVS LDY #4 SET MAX # OF LIVES›1096 LDA #0›1097 Q32 STA SLINE+8,Y BLANK SCRN LIVES›1098 DEY MORE TO BLANK ?›1099 BNE Q32 YES›1100 ;›1101 LDY LIVES GET # OF LIVES›1102 BEQ Q33 NO LIVES LEFT, SO EXIT›1103 LDA #LC+PF2CMASK GET LIFE CHAR›1104 Q34 STA SLINE+8,Y PUT LIFE CHAR ON SCRN›1105 DEY MORE TO SHOW ?›1106 BNE Q34 YES›1107 Q33 RTS ›1108 ;›1109 ; SET NEXT LEVEL›1110 ; --------------›1111 SETNLEV LDA LEVEL GET CURRENT LEVEL›1112 AND #$0F MAKE IT BINARY›1113 CMP #7 HIGHEST LEVEL ?›1114 BEQ Q35 YES›1115 ;›1116 INC LEVEL NO, SO SET NEXT LEVEL›1117 Q35 LDA COLOR1 GET ORIG PLAYFIELD 1 COLOR›1118 PHA SAVE ON STACK›1119 LDA #5 SET # OF TIMES TO LOOP›1120 STA TEMP›1121 Q36 LDA #GREY+12 SET COLOR & LUMINANCE›1122 STA COLOR1›1123 ;›1124 LDA #$80›1125 STA AUDF1 SET FREQ›1126 LDA #$A6›1127 STA AUDC1 SET DISTORTION & VOLUME›1128 LDY #0 SET OUTER LOOP VAL›1129 LDX #0 SET INNER LOOP VAL›1130 JSR WAIT›1131 ;›1132 LDA #REDORG+6 SET NEW COLOR & LUMINANCE›1133 STA COLOR1›1134 ;›1135 LDA #$C0›1136 STA AUDF1 SET FREQ›1137 LDA #$A6›1138 STA AUDC1 SET DISTORTION & VOLUME›1139 LDY #0 SET OUTER LOOP VAL›1140 LDX #0 SET INNER LOOP VAL›1141 JSR WAIT›1142 ;›1143 DEC TEMP CHANGE COLORS AGAIN ?›1144 BNE Q36 YES›1145 ;›1146 PLA GET ORIG PLAYFIELD 1 COLOR›1147 STA COLOR1 RESTORE IT›1148 LDA #0›1149 STA AUDC1 SET 0 VOLUME›1150 RTS ›1151 ;›1152 WAIT TXA SAVE INNER LOOP VAL›1153 Q37 TAX GET INNER LOOP VAL›1154 Q38 DEX INNER LOOP DONE ?›1155 BNE Q38 NO›1156 DEY OUTER LOOP DONE ?›1157 BNE Q37 NO›1158 RTS ›1159 ;›1160 ; KILL MAN›1161 ; --------›1162 KILLMAN›1163 LDA #9 SET INITIAL FREQUENCY›1164 STA TEMP SAVE FREQ›1165 STA AUDF1 SET FREQUENCY›1166 LDA #$A0 SET INITIAL VOLUME›1167 STA VOLUME SAVE FOR LATER›1168 STA AUDC1 SET HARDWARE DIST & VOL›1169 LDA #5 SET # OF TIMES TO DO COLOR CHANGE›1170 Q39 PHA SAVE ON STACK›1171 LDX #$FF SET INITIAL COLOR›1172 Q40 LDY #$FF SET DELAY VALUE›1173 STX PCOLR0 SET MAN COLOR›1174 Q41 DEY DELAY›1175 BNE Q41›1176 LDA VOLUME GET VOLUME›1177 SEC SETUP SUBTRACT›1178 SBC #3 SET NEW VOLUME›1179 STA VOLUME ; & SAVE›1180 STA AUDC1 SET HARDWARE DIST & VOL›1181 DEX MORE COLORS ?›1182 BNE Q40 YES, SO SHOW THEM›1183 INC TEMP SET NEW FREQ›1184 LDA TEMP GET IT›1185 STA AUDF1 SET HARDWARE FREQ›1186 PLA GET COLOR CHANGE COUNT›1187 SEC SETUP FOR SUBTRACT›1188 SBC #1 SHOW COLOR CHANGE AGAIN ?›1189 BNE Q39 YES›1190 STA AUDC1 SET 0 VOLUME›1191 RTS ›1192 ;›1193 ; SETUP INITIAL BRICKS›1194 ; --------------------›1195 INITBRKS JSR CLSCRN CLEAR THE PLAY AREA›1196 JSR DRAWWALL DRAW LEFT/RIGHT WALL›1197 LDA #BC GET BRICK CHAR›1198 STA TEMP SAVE IT›1199 STA DISP+91 PUT BRICK ON SCREEN›1200 LDX #9 SET # OF BRICKS TO PUT ON SCRN›1201 LDA #FIRSTBR&255 GET LO ADR OF 1ST BRICK›1202 STA DESADR SAVE IT›1203 LDA #FIRSTBR/256 GET HO ADR OF 1ST BRICK›1204 STA DESADR+1 SAVE IT›1205 Q42 LDA #M4LSIZE SET AMT TO GET TO NEXT LINE›1206 JSR PUTSCRCH PUT BRICK ON SCRN›1207 DEX MORE BRICKS ?›1208 BNE Q42 YES›1209 RTS EXIT›1210 ;›1211 ; MOVE BRICK CHAR›1212 ; ---------------›1213 MOVBRICK LDA #0›1214 STA BSNDFLAG CLEAR BRICK SOUND FLAG›1215 LDA STRIG0 IS TRIG DOWN ?›1216 BNE Q43 NO, SO EXIT›1217 ;›1218 LDA #0 TRIG DOWN, SO›1219 STA ATRACT DISABLE ATTRACT MODE›1220 ;›1221 LDA MANPOSH GET MAN HORIZ POS›1222 AND #3 IS MAN AT START OF CHAR BYTE ?›1223 BNE Q43 NO, SO EXIT›1224 LDA MANPOSH GET MAN HORIZ POS›1225 SEC PREPARE FOR SUBT›1226 SBC #8 PNT TO CHAR BEFORE MAN›1227 TAY ›1228 STA TEMP+3 SAVE IN CASE ITS NEEDED›1229 LDX MANPOSV GET MAN VERT POS›1230 JSR GETSCRN GET CHAR THERE›1231 CMP #BC IS IT A BRICK ?›1232 BEQ Q44 YES, SO MOVE BRICK›1233 ;›1234 LDA MANPOSV GET VERT POS›1235 CLC SETUP ADD›1236 ADC #8 PNT 1 CHAR DOWN›1237 TAX SET VERT POS›1238 LDY TEMP+3 GET HORIZ POS›1239 JSR GETSCRN GET SCRN CHAR›1240 CMP #BC BRICK ?›1241 BNE Q43 NO, SO EXIT›1242 Q44 LDY #0 SET INDEX›1243 LDA #0 SET BLANK CHAR›1244 STA (DESADR),Y BLANK OLD BRICK CHAR›1245 LDA #BC GET BRICK CHAR›1246 LDY #1 SET INDEX FOR CHAR TO RIGHT›1247 STA (DESADR),Y PUT BRICK AT NEW LOC›1248 LDY #BRKPOINT GET POINTS FOR BRICK MOVE›1249 JSR ADDSCORE ADD TO SCORE›1250 DEC BMOVES REDUCE # OF BRICKS TO MOVE›1251 JSR BRKSND MAKE BRICK SOUND›1252 Q43 RTS ›1253 ;›1254 ; MAKE BRICK SOUND›1255 ; ----------------›1256 BRKSND LDA #$70 SET INITIAL VOL,DISTORTION›1257 STA VOLUME›1258 LDA #$08 SET FREQUENCY›1259 STA AUDF1›1260 Q45 LDA VOLUME›1261 STA AUDC1 SET VOL & DISTORTION›1262 LDY #5 SET OUTER LOOP COUNT›1263 Q46 LDX #$40 SET INNER LOOP COUNT›1264 Q47 DEX INNER LOOP DONE ?›1265 BNE Q47 NO›1266 DEY OUTER LOOP DONE ?›1267 BNE Q46 NO›1268 DEC VOLUME MORE SOUND ?›1269 LDA VOLUME›1270 CMP #$58›1271 BNE Q45 YES›1272 LDA #1›1273 STA BSNDFLAG BRICK MADE SOUND,SO SET FLAG›1274 RTS ›1275 ;›1276 ENDMSG .BYTE 39,33,45,37,0,47,54,37,50,255 ; "GAME OVER"›1277 ;›1278 ; SCORE LINE›1279 ; ----------›1280 SLINE .BYTE 0›1281 LEVEL .BYTE 0,0,0,0,0,0,0,0,0,0,0,0›1282 SCORE .BYTE 0,0,0,0,0,0,0›1283 ;›1284 SLEND = *›1285 ;›1286 DIGITS .BYTE 16,17,18,19,20,21,22,23,24,25›1287 ;›1288 LIFEPAT .BYTE $80,$90,$78,$3C,$1A,$38,$48,$48›1289 ;›1290 BRICKPAT .BYTE $AA,$82,$82,$AA,$AA,$82,$82,$AA›1291 ;›1292 WALLPAT .BYTE $FF,$99,$99,$99,$99,$99,$99,$FF›1293 ;›1294 ; HORIZ MOVING MAN IMAGES›1295 ; -----------------------›1296 MANH1 .BYTE $10,$10,$38,$7C,$BA,$48,$84,$82›1297 MANH2 .BYTE $10,$10,$38,$38,$78,$AC,$48,$44›1298 MANH3 .BYTE $10,$10,$38,$38,$38,$28,$28,$10›1299 MANH4 .BYTE $10,$10,$38,$7C,$BA,$38,$10,$28›1300 MANH5 .BYTE $10,$10,$38,$38,$7C,$38,$48,$48›1301 ;›1302 ; VERTICAL MOVING MAN IMAGES›1303 ; --------------------------›1304 .BYTE $80,$90,$78,$3C,$1A,$38,$48,$48›1305 .BYTE $00,$10,$FC,$3A,$18,$24,$24,$00›1306 .BYTE $00,$10,$FC,$3A,$18,$24,$24,$00›1307 .BYTE $02,$12,$3C,$78,$B0,$38,$24,$22›1308 ;›1309 ; DOG IMAGE›1310 ; ---------›1311 DOGIMAGE .BYTE $66,$95,$1C,$22,$36,$3E,$14,$36›1312 ;›1313 ; LEVEL CHARACTERISTICS TABLE›1314 ; ---------------------------›1315 ; EACH ENTRY CONSISTS OF:›1316 ;›1317 ; E1,E2,E3,E4›1318 ;›1319 ; E1 = NORMAL DOG MOVES / MAN MOVE›1320 ; E2 = MAN PULLING WALL DOG MOVES/MAN MOVE›1321 ; E3 = OUTER LOOP DELAY VALUE (MAIN LOOP)›1322 ; E4 = INNER LOOP DELAY VALUE (MAIN LOOP)›1323 ;›1324 LEVTBL .BYTE 8,8,12,0 LEVEL 1›1325 .BYTE 3,3,12,$80 LEVEL 2›1326 .BYTE 3,2,11,0 LEVEL 3›1327 .BYTE 2,2,11,0 LEVEL 4›1328 .BYTE 2,1,11,80 LEVEL 5›1329 .BYTE 2,1,11,$80 LEVEL 6›1330 .BYTE 2,1,10,0 LEVEL 7›1331 ;›1332 BMOVES *= *+1 # OF BRICKS TO BE MOVED›1333 BSNDFLAG *= *+1 0 IF NO BRICK SOUND MADE›1334 ; 1 IF BRICK SOUND MADE›1335 LIVES *= *+1 # OF LIVES REMAINING›1336 MDELHO *= *+1 MAIN DELAY HO VALUE›1337 MDELLO *= *+1 MAIN DELAY LO VALUE›1338 TEMP *= *+4 TEMPORARY WORK STORAGE›1339 VOLUME *= *+1 VOLUME FOR SOUNDS›1340 ;›1341 ; MAN VARIABLES›1342 ; -------------›1343 MANPICNO *= *+1 MAN'S CURRENT IMAGE #›1344 MANPOSH *= *+1 MAN'S CURRENT HORIZ POS›1345 MANPOSV *= *+1 MAN'S CURRENT VERT POS›1346 ;›1347 ; DOG VARIABLES›1348 ; -------------›1349 DOGPOSH = *›1350 DOG1POSH *= *+1 DOG 1 HORIZ POS›1351 DOG2POSH *= *+1 DOG 2 HORIZ POS›1352 DOG3POSH *= *+1 DOG 3 HORIZ POS›1353 ;›1354 DOGPOSV = *›1355 DOG1POSV *= *+1 DOG 1 VERT POS›1356 DOG2POSV *= *+1 DOG 2 VERT POS›1357 DOG3POSV *= *+1 DOG 3 VERT POS›1358 ;›1359 DOGFREQ1 *= *+1 # OF TIMES MAN MOVES BEFORE DOG DOES›1360 ; WHEN MAN NOT PULLING WALL›1361 DOGFREQ2 *= *+1 # OF TIMES MAN MOVES BEFORE DOG›1362 ; WHEN MAN PULLING WALL›1363 DOGMOVCT *= *+1 INDICATES WHEN DOG CAN MOVE›1364 DOGNO *= *+1 CURRENT DOG #›1365 ;›