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 ;