0001 0000 ; ************************************************* 0002 0000 ; dekompilace hry CIHLY pro PMD-85 0003 0000 ; 31.12.2012 provedena korekce adresy 1. řady cihel 0004 0000 ; 20.09.2013 formální úpravy textu 0005 0000 ; opraven odskok na adresu 6000h při stisku STOP 0006 0000 ; kontrola provedena na binární úrovni 0007 0000 ; ************************************************* 0008 0000 0009 0000 ; ************************** 0010 0000 ; proměnné a procedury BIOSu 0011 0000 ; ************************** 0012 0000 0013 0000 prnpos .equ 0c03eh ; adresa pro tisk 0014 0000 rombios .equ 8000h ; adresa ROM 0015 0000 prnchr .equ 8500h ; adresa rutiny pro tisk znaku 0016 0000 0017 0000 ; *************** 0018 0000 ; herní konstanty 0019 0000 ; *************** 0020 0000 0021 0000 inivuz .equ 16h ; výchozí pozice vozíku vpravo 0022 0000 inimic .equ 17h ; výchozí pozice míčku 0023 0000 maxvuz .equ 2ch ; max. pozice vozíku vpravo 0024 0000 vyscih .equ 12 ; výška cihly v pixelech 0025 0000 frefal .equ 15 ; výška míčku při rozjezdu 0026 0000 zasvys .equ 22h ; výška míčků v zásobníku 0027 0000 pocmic .equ 3 ; počet míčků do hry 0028 0000 0029 0000 vidvuz .equ 0f8h ; high byte adresy vozíku ve vram 0030 0000 vidlog .equ 0c224h ; adresa loga ve vram 0031 0000 vidhdtx .equ 0c602h ; adresa header textu 0032 0000 ofset1y .equ 0c800h ; ofset míčku pro liché výšky 0033 0000 ofset2y .equ 0c880h ; ofset míčku pro sudé výšky 0034 0000 layer1 .equ 0cc80h ; adresa 1. řady cihel 0035 0000 layer2 .equ 0d100h ; adresa 2. řady cihel 0036 0000 layer3 .equ 0d580h ; adresa 3. řady cihel 0037 0000 layer4 .equ 0da00h ; adresa 4. řady cihel 0038 0000 0039 1000 .org 1000h 0040 1000 0041 1000 ; *************** 0042 1000 ; úvodní sekvence 0043 1000 ; *************** 0044 1000 0045 1000 21 00 00 lxi h,0 0046 1003 22 9A 12 shld score 0047 1006 22 9C 12 shld hiscor 0048 1009 21 3E 13 lxi h,hdtxmx 0049 100C 36 30 mvi m,30h 0050 100E 23 inx h 0051 100F 36 30 mvi m,30h 0052 1011 23 inx h 0053 1012 36 30 mvi m,30h 0054 1014 C3 58 13 jmp goplay 0055 1017 0056 1017 ; ********************************************** 0057 1017 ; "nakreslí" byte do vram a řeší okraj obrazovky 0058 1017 ; ********************************************** 0059 1017 0060 1017 23 drawci: inx h 0061 1018 7D mov a,l 0062 1019 E6 3F ani 3fh 0063 101B FE 30 cpi 30h 0064 101D C0 rnz 0065 101E F1 pop psw 0066 101F C9 ret 0067 1020 0068 1020 ; ************************************************* 0069 1020 ; nakreslí 1 mikrořádek z řady cihel počínaje plnou 0070 1020 ; ************************************************* 0071 1020 0072 1020 36 3C drawml: mvi m,3ch 0073 1022 CD 17 10 call drawci 0074 1025 36 3F mvi m,3fh 0075 1027 CD 17 10 call drawci 0076 102A 36 3F mvi m,3fh 0077 102C CD 17 10 drawcl: call drawci 0078 102F 36 3F mvi m,3fh 0079 1031 CD 17 10 call drawci 0080 1034 C3 20 10 jmp drawml 0081 1037 0082 1037 ; ***************************************************** 0083 1037 ; nakreslí 1 mikrořádek z řady cihel počínaje poloviční 0084 1037 ; ***************************************************** 0085 1037 0086 1037 36 3C drawpl: mvi m,3ch 0087 1039 C3 2C 10 jmp drawcl 0088 103C 0089 103C ; ********************************** 0090 103C ; nakreslí řadu cihel počínaje plnou 0091 103C ; ********************************** 0092 103C 0093 103C 06 0C drawli: mvi b,vyscih 0094 103E CD 20 10 drawl1: call drawml 0095 1041 11 10 00 lxi d,16 ; přírůstek adresy vram 0096 1044 19 dad d ; na konci vram 0097 1045 05 dcr b 0098 1046 C2 3E 10 jnz drawl1 0099 1049 C9 ret 0100 104A 0101 104A ; ************************************** 0102 104A ; nakreslí řadu cihel počínaje poloviční 0103 104A ; ************************************** 0104 104A 0105 104A 06 0C drawsu: mvi b,vyscih 0106 104C CD 37 10 draws1: call drawpl 0107 104F 11 10 00 lxi d,16 0108 1052 19 dad d 0109 1053 05 dcr b 0110 1054 C2 4C 10 jnz draws1 0111 1057 C9 ret 0112 1058 0113 1058 ; ********************* 0114 1058 ; vykreslí 4 řady cihel 0115 1058 ; ********************* 0116 1058 0117 1058 21 80 CC mkwall: lxi h,layer1 0118 105B CD 3C 10 call drawli 0119 105E 21 00 D1 lxi h,layer2 0120 1061 CD 4A 10 call drawsu 0121 1064 21 80 D5 lxi h,layer3 0122 1067 CD 3C 10 call drawli 0123 106A 21 00 DA lxi h,layer4 0124 106D C3 4A 10 jmp drawsu 0125 1070 0126 1070 ; ************ 0127 1070 ; pouze vektor 0128 1070 ; ************ 0129 1070 0130 1070 C3 DA 10 jmp shwmic 0131 1073 0132 1073 ; ************************************* 0133 1073 ; testy klávesnice + překreslení vozíku 0134 1073 ; ************************************* 0135 1073 0136 1073 CD 12 11 ovlada: call clrvuz 0137 1076 3E 04 mvi a,4 0138 1078 D3 F4 out 0f4h 0139 107A DB F5 in 0f5h 0140 107C 47 mov b,a 0141 107D E6 20 ani 20h ; test SHIFTu 0142 107F 3E FF mvi a,-1 0143 1081 CA 93 10 jz movvuz ; go left 0144 1084 78 mov a,b 0145 1085 E6 10 ani 10h ; test klávesy V 0146 1087 3E 01 mvi a,+1 0147 1089 CA 93 10 jz movvuz ; go right 0148 108C 78 mov a,b 0149 108D E6 40 ani 40h ; test STOP 0150 108F CA 00 80 jz rombios 0151 1092 AF xra a ; vozík bez pohybu 0152 1093 47 movvuz: mov b,a 0153 1094 3A A6 12 lda adrvuz 0154 1097 80 add b 0155 1098 FA A6 10 jm shwvuz 0156 109B FE 2C cpi maxvuz 0157 109D CA A6 10 jz shwvuz 0158 10A0 32 A6 12 sta adrvuz 0159 10A3 C3 A6 10 jmp shwvuz 0160 10A6 0161 10A6 ; *************************** 0162 10A6 ; rutina pro zobrazení vozíku 0163 10A6 ; *************************** 0164 10A6 0165 10A6 3A A6 12 shwvuz: lda adrvuz 0166 10A9 6F mov l,a 0167 10AA 26 F8 mvi h,vidvuz ; high adresa do vram 0168 10AC 11 B3 12 lxi d,shpvuz 0169 10AF 06 07 mvi b,7 ; počet mikroline 0170 10B1 0E 04 shwvu1: mvi c,4 ; byte na mikroline 0171 10B3 1A shwvu2: ldax d 0172 10B4 77 mov m,a 0173 10B5 13 inx d 0174 10B6 23 inx h 0175 10B7 0D dcr c 0176 10B8 C2 B3 10 jnz shwvu2 0177 10BB D5 push d 0178 10BC 11 3C 00 lxi d,60 0179 10BF 19 dad d 0180 10C0 D1 pop d 0181 10C1 05 dcr b 0182 10C2 C2 B1 10 jnz shwvu1 0183 10C5 C9 ret 0184 10C6 0185 10C6 ; ***************************** 0186 10C6 ; výpočet adresy ve vram dle HL 0187 10C6 ; ***************************** 0188 10C6 0189 10C6 7C mk_adr: mov a,h 0190 10C7 B7 ora a 0191 10C8 1F rar 0192 10C9 DA D3 10 jc mk_ads 0193 10CC 84 add h 0194 10CD 67 mov h,a 0195 10CE 01 00 C8 lxi b,ofset1y 0196 10D1 09 dad b 0197 10D2 C9 ret 0198 10D3 0199 10D3 84 mk_ads: add h 0200 10D4 67 mov h,a 0201 10D5 01 80 C8 lxi b,ofset2y 0202 10D8 09 dad b 0203 10D9 C9 ret 0204 10DA 0205 10DA ; **************************************** 0206 10DA ; zobrazení míčku na nové vypočtené pozici 0207 10DA ; **************************************** 0208 10DA 0209 10DA 3A 9F 12 shwmic: lda mic_cx 0210 10DD 6F mov l,a 0211 10DE 3A A3 12 lda mic_cy 0212 10E1 67 mov h,a 0213 10E2 CD C6 10 call mk_adr 0214 10E5 11 40 00 lxi d,64 0215 10E8 36 1E mvi m,1eh ; .xxxx. 0216 10EA 19 dad d ; xxx.xx 0217 10EB 36 37 mvi m,37h ; xxx..x 0218 10ED 19 dad d ; xxx..x 0219 10EE 36 27 mvi m,27h ; xxx.xx 0220 10F0 19 dad d ; .xxxx. 0221 10F1 36 27 mvi m,27h 0222 10F3 19 dad d 0223 10F4 36 37 mvi m,37h 0224 10F6 19 dad d 0225 10F7 36 1E mvi m,1eh 0226 10F9 C9 ret 0227 10FA 0228 10FA ; ****************************** 0229 10FA ; vymazání míčku na staré pozici 0230 10FA ; ****************************** 0231 10FA 0232 10FA 3A 9E 12 clrmic: lda mic_lx 0233 10FD 6F mov l,a 0234 10FE 3A A2 12 lda mic_ly 0235 1101 67 mov h,a 0236 1102 CD C6 10 call mk_adr 0237 1105 11 40 00 lxi d,64 0238 1108 06 06 mvi b,6 0239 110A 36 00 clrmi1: mvi m,0 0240 110C 19 dad d 0241 110D 05 dcr b 0242 110E C2 0A 11 jnz clrmi1 0243 1111 C9 ret 0244 1112 0245 1112 ; ************ 0246 1112 ; vymaže vozík 0247 1112 ; ************ 0248 1112 0249 1112 11 3C 00 clrvuz: lxi d,60 0250 1115 06 07 mvi b,7 0251 1117 3A A6 12 lda adrvuz 0252 111A 6F mov l,a 0253 111B 26 F8 mvi h,vidvuz 0254 111D 0E 04 clrvu1: mvi c,4 0255 111F 36 00 clrvu2: mvi m,0 0256 1121 23 inx h 0257 1122 0D dcr c 0258 1123 C2 1F 11 jnz clrvu2 0259 1126 19 dad d 0260 1127 05 dcr b 0261 1128 C2 1D 11 jnz clrvu1 0262 112B C9 ret 0263 112C 0264 112C ; ********************************************* 0265 112C ; překreslení míčku + řešení stínových registrů 0266 112C ; ********************************************* 0267 112C 0268 112C CD FA 10 micmov: call clrmic 0269 112F CD DA 10 call shwmic 0270 1132 3A 9F 12 lda mic_cx ; vypočtená nová X pozice 0271 1135 32 9E 12 sta mic_lx ; do last x-coord. 0272 1138 3A A3 12 lda mic_cy ; dtto pro y-coord. 0273 113B 32 A2 12 sta mic_ly 0274 113E 3A A1 12 lda mic_nx ; překlopit dX 0275 1141 32 A0 12 sta mic_dx 0276 1144 C9 ret 0277 1145 0278 1145 ; ************************************************ 0279 1145 ; nakreslí zásobník míčků a nastaví počet "životů" 0280 1145 ; ************************************************ 0281 1145 0282 1145 AF zasobn: xra a 0283 1146 32 A5 12 zasob1: sta nummic 0284 1149 87 add a 0285 114A 32 9F 12 sta mic_cx 0286 114D 3E 22 mvi a,zasvys 0287 114F 32 A3 12 sta mic_cy 0288 1152 CD DA 10 call shwmic 0289 1155 3A A5 12 lda nummic 0290 1158 3C inr a 0291 1159 FE 03 cpi pocmic ; počet míčků do hry 0292 115B C2 46 11 jnz zasob1 0293 115E C9 ret 0294 115F 0295 115F ; *************************************** 0296 115F ; přepočet souřadnic staré + delta = nové 0297 115F ; *************************************** 0298 115F 0299 115F 3A 9E 12 comput: lda mic_lx 0300 1162 47 mov b,a 0301 1163 3A A0 12 lda mic_dx 0302 1166 21 A1 12 lxi h,mic_nx 0303 1169 80 add b 0304 116A C2 72 11 jnz compu1 0305 116D 36 01 mvi m,1 ; odraz od levého okraje 0306 116F C3 79 11 jmp compu2 0307 1172 0308 1172 FE 2F compu1: cpi 2fh 0309 1174 C2 79 11 jnz compu2 0310 1177 36 FF mvi m,-1 ; odraz od pravého okraje 0311 1179 0312 1179 32 9F 12 compu2: sta mic_cx 0313 117C 4F mov c,a 0314 117D 3A A2 12 lda mic_ly 0315 1180 47 mov b,a 0316 1181 3A A4 12 lda mic_dy 0317 1184 80 add b 0318 1185 32 A3 12 sta mic_cy 0319 1188 C2 96 11 jnz compu4 0320 118B 3E FF mvi a,-1 ; odraz od horního okraje 0321 118D 32 A7 12 sta mic_ny 0322 1190 3E 01 compu3: mvi a,1 0323 1192 32 A4 12 sta mic_dy 0324 1195 C9 ret 0325 1196 0326 1196 FE 1F compu4: cpi 1fh 0327 1198 C0 rnz 0328 1199 3A A6 12 lda adrvuz 0329 119C 3D dcr a 0330 119D B9 cmp c 0331 119E F2 B4 11 compu5: jp netref 0332 11A1 C6 04 compu6: adi 4 0333 11A3 B9 cmp c 0334 11A4 FA B4 11 jm netref 0335 11A7 3E FF mvi a,-1 ; míček se odrazil od vozíku 0336 11A9 32 A4 12 sta mic_dy ; a půjde nahoru 0337 11AC 3E 01 mvi a,1 0338 11AE 32 A7 12 sta mic_ny 0339 11B1 C3 E1 11 jmp odpal 0340 11B4 0341 11B4 ; ******************* 0342 11B4 ; míček jsem netrefil 0343 11B4 ; ******************* 0344 11B4 0345 11B4 CD FA 10 netref: call clrmic 0346 11B7 3A A5 12 lda nummic 0347 11BA 87 add a ; výpočet pozice v "zásobníku" 0348 11BB 32 9E 12 sta mic_lx 0349 11BE 21 A2 12 lxi h,mic_ly 0350 11C1 36 22 mvi m,22h 0351 11C3 FA CF 12 jm waitK0 0352 11C6 3A A5 12 lda nummic ; ubrat míček 0353 11C9 3D dcr a 0354 11CA 32 A5 12 sta nummic 0355 11CD 3E 17 mvi a,17h 0356 11CF 32 9F 12 sta mic_cx 0357 11D2 3E 0E mvi a,0eh 0358 11D4 32 A3 12 sta mic_cy 0359 11D7 3E 01 mvi a,1 ; míček bude padat dolů 0360 11D9 32 A4 12 sta mic_dy 0361 11DC AF xra a 0362 11DD 32 A1 12 sta mic_nx ; příprava dx=0 0363 11E0 C9 ret 0364 11E1 0365 11E1 ; *********************************** 0366 11E1 ; test úhlu dopadu a odrazu na vozíku 0367 11E1 ; *********************************** 0368 11E1 0369 11E1 3A A6 12 odpal: lda adrvuz 0370 11E4 47 mov b,a 0371 11E5 3A 9F 12 lda mic_cx 0372 11E8 90 sub b 0373 11E9 06 FF mvi b,-1 0374 11EB FE 02 cpi 2 0375 11ED FA F2 11 jm odpal2 0376 11F0 06 01 mvi b,1 0377 11F2 78 odpal2: mov a,b 0378 11F3 32 A1 12 sta mic_nx 0379 11F6 C9 ret 0380 11F7 0381 11F7 ; ********************** 0382 11F7 ; test na náraz do cihly 0383 11F7 ; ********************** 0384 11F7 0385 11F7 3A 9F 12 cihtst: lda mic_cx 0386 11FA 6F mov l,a 0387 11FB 3A A3 12 lda mic_cy 0388 11FE 67 mov h,a 0389 11FF CD C6 10 call mk_adr 0390 1202 7E mov a,m 0391 1203 A7 ana a 0392 1204 C8 rz ; míček letí dál 0393 1205 11 D0 07 lxi d,7d0h 0394 1208 CD 20 14 call sncrsh ; jinak chirp 0395 120B 7E cihts2: mov a,m 0396 120C FE 3C cpi 3ch ; a test na cihlu 0397 120E CA 16 12 jz cihts3 0398 1211 2D dcr l ; ta cihla tu musí někde být.. 0399 1212 7E mov a,m 0400 1213 C3 0B 12 jmp cihts2 0401 1216 0402 1216 11 C0 FF cihts3: lxi d,-64 0403 1219 19 cihts4: dad d ; najít horní hranu cihly 0404 121A 7E mov a,m 0405 121B FE 3C cpi 3ch 0406 121D CA 19 12 jz cihts4 0407 1220 0408 1220 11 40 00 lxi d,64 ; vymazání cihly z obrazovky 0409 1223 19 cihts5: dad d 0410 1224 E5 push h 0411 1225 36 00 mvi m,0 0412 1227 23 inx h 0413 1228 7E mov a,m 0414 1229 FE 3F cpi 3fh 0415 122B C2 3B 12 jnz cihts7 0416 122E 36 00 cihts6: mvi m,0 0417 1230 23 inx h 0418 1231 7E mov a,m 0419 1232 FE 3F cpi 3fh 0420 1234 CA 2E 12 jz cihts6 0421 1237 E1 pop h 0422 1238 C3 23 12 jmp cihts5 ; odmazat další mikrořádek cihly 0423 123B 0424 123B E1 cihts7: pop h 0425 123C 3A A7 12 lda mic_ny 0426 123F 32 A4 12 sta mic_dy 0427 1242 CD 5F 11 call comput 0428 1245 CD 16 13 call incbod 0429 1248 2A 9A 12 lhld score 0430 124B 23 inx h 0431 124C 22 9A 12 shld score 0432 124F 3A A8 12 lda baloon 0433 1252 3C inr a 0434 1253 32 A8 12 sta baloon 0435 1256 FE 2F cpi 2fh ; sejmul jsem téměř všechny míčky? 0436 1258 FA F7 11 jm cihtst 0437 125B 0438 125B ; ********************************** 0439 125B ; závěrečná scéna s vyjížděním míčků 0440 125B ; ********************************** 0441 125B 0442 125B 3A A5 12 dojezd: lda nummic 0443 125E 3D dcr a 0444 125F 32 A5 12 sta nummic 0445 1262 3C inr a 0446 1263 87 add a 0447 1264 FA 91 13 jm nxtcol ; konec scénky 0448 1267 32 9E 12 sta mic_lx 0449 126A 3E 22 mvi a,zasvys 0450 126C 32 A2 12 sta mic_ly 0451 126F 06 0A mvi b,10 ; 10 stupňů ke zlaté 0452 1271 3A 9E 12 dojez2: lda mic_lx 0453 1274 3C inr a 0454 1275 32 9F 12 sta mic_cx 0455 1278 3A A2 12 lda mic_ly 0456 127B 3D dcr a 0457 127C 32 A3 12 sta mic_cy 0458 127F C5 push b 0459 1280 CD 2C 11 call micmov 0460 1283 CD 16 13 call incbod 0461 1286 CD EC 13 call beeper 0462 1289 CD EC 13 call beeper 0463 128C CD EC 13 call beeper 0464 128F CD EC 13 call beeper 0465 1292 C1 pop b 0466 1293 05 dcr b 0467 1294 C2 71 12 jnz dojez2 0468 1297 C3 5B 12 jmp dojezd 0469 129A 0470 129A 00 00 score: .dw 0 ; score 0471 129C 00 00 hiscor: .dw 0 ; hi score 0472 129E 00 mic_lx: .db 0 ; stará X pozice míčku 0473 129F 00 mic_cx: .db 0 ; nová X pozice míčku 0474 12A0 00 mic_dx: .db 0 ; přírůstek šířky míčku 0475 12A1 00 mic_nx: .db 0 ; nová hodnota mic_dx 0476 12A2 00 mic_ly: .db 0 ; stará hodn. výšky míčku 0477 12A3 00 mic_cy: .db 0 ; nová hodn. výšky míčku 0478 12A4 00 mic_dy .db 0 ; přírůstek výšky míčku 0479 12A5 00 nummic: .db 0 ; počet zbývajících míčků 0480 12A6 00 adrvuz: .db 0 ; x-ová pozice vozíku 0481 12A7 00 mic_ny .db 0 ; nová hodnota mic_dy 0482 12A8 00 baloon: .db 0 ; počet zničených míčků 0483 12A9 00 00 p_sped: .dw 0 ; ukaz. do tab. rychlostí 0484 12AB 00 00 speed: .dw 0 ; aktuální rychlost 0485 12AD 0486 12AD ; *************************************** 0487 12AD ; tabulka rychlostí v jednotlivých kolech 0488 12AD ; *************************************** 0489 12AD 0490 12AD E8 EE F4 F6 t_sped: .db 0e8h,0eeh,0f4h,0f6h,0f8h,0fdh 0490 12B1 F8 FD 0491 12B3 0492 12B3 ; ************** 0493 12B3 ; obrázek vozíku 0494 12B3 ; ************** 0495 12B3 0496 12B3 3C 3F 3F 0F shpvuz: .db 3ch,3fh,3fh,0fh 0497 12B7 16 15 15 1D .db 16h,15h,15h,1dh 0498 12BB 2F 2A 2A 3A .db 2fh,2ah,2ah,3ah 0499 12BF 07 00 00 38 .db 07h,00h,00h,38h 0500 12C3 07 00 00 38 .db 07h,00h,00h,38h 0501 12C7 0E 00 00 1C .db 0eh,00h,00h,1ch 0502 12CB 0C 00 00 0C .db 0ch,00h,00h,0ch 0503 12CF 0504 12CF ; ..xxxxxxxxxxxxxxxxxxxx.. 0505 12CF ; .xx.x.x.x.x.x.x.x.x.xxx. 0506 12CF ; xxxx.x.x.x.x.x.x.x.x.xxx 0507 12CF ; xxx..................xxx 0508 12CF ; xxx..................xxx 0509 12CF ; .xxx................xxx. 0510 12CF ; ..xx................xx.. 0511 12CF 0512 12CF ; ****************** 0513 12CF ; čekání na stisk K0 0514 12CF ; ****************** 0515 12CF 0516 12CF AF waitK0: xra a 0517 12D0 D3 F4 out 0f4h 0518 12D2 DB F5 in 0f5h 0519 12D4 E6 01 ani 1 0520 12D6 C2 CF 12 jnz waitK0 0521 12D9 C3 58 13 jmp goplay 0522 12DC 0523 12DC ; ************** 0524 12DC ; zobrazení loga 0525 12DC ; ************** 0526 12DC 0527 12DC 21 24 C2 shwlog: lxi h,vidlog 0528 12DF 01 F6 12 lxi b,shplog 0529 12E2 16 10 mvi d,16 0530 12E4 0A shwlop: ldax b 0531 12E5 77 mov m,a 0532 12E6 03 inx b 0533 12E7 23 inx h 0534 12E8 0A ldax b 0535 12E9 77 mov m,a 0536 12EA 03 inx b 0537 12EB D5 push d 0538 12EC 11 3F 00 lxi d,63 0539 12EF 19 dad d 0540 12F0 D1 pop d 0541 12F1 15 dcr d 0542 12F2 C2 E4 12 jnz shwlop 0543 12F5 C9 ret 0544 12F6 0545 12F6 ; **** 0546 12F6 ; logo 0547 12F6 ; **** 0548 12F6 0549 12F6 3F 01 shplog: .db 3fh,01h ; xxxxxxx..... 0550 12F8 02 02 .db 02h,02h ; .x.....x.... 0551 12FA 02 02 .db 02h,02h ; .x.....x.... 0552 12FC 3A 0F .db 3ah,0fh ; .x.xxxxxxx.. 0553 12FE 12 12 .db 12h,12h ; .x..x..x..x. 0554 1300 12 12 .db 12h,12h ; .x..x..x..x. 0555 1302 12 21 .db 12h,21h ; .x..x.x....x 0556 1304 3E 20 .db 3eh,20h ; .xxxxx.....x 0557 1306 12 21 .db 12h,21h ; .x..x.x....x 0558 1308 12 22 .db 12h,22h ; .x..x..x...x 0559 130A 12 24 .db 12h,24h ; .x..x...x..x 0560 130C 12 24 .db 12h,24h ; .x..x...x..x 0561 130E 12 24 .db 12h,24h ; .x..x...x..x 0562 1310 10 10 .db 10h,10h ; ....x.....x. 0563 1312 10 10 .db 10h,10h ; ....x.....x. 0564 1314 38 0F .db 38h,0fh ; ...xxxxxxx.. 0565 1316 0566 1316 ; ********************************* 0567 1316 ; přidá 10 bodů ke SCORE a vytiskne 0568 1316 ; ********************************* 0569 1316 0570 1316 21 2E 13 incbod: lxi h,hdtxin 0571 1319 7E incbol: mov a,m 0572 131A 34 inr m 0573 131B FE 39 cpi 39h 0574 131D C2 43 13 jnz prnhea 0575 1320 36 30 mvi m,30h 0576 1322 2B dcx h 0577 1323 C3 19 13 jmp incbol 0578 1326 0579 1326 ; ********************* 0580 1326 ; header text během hry 0581 1326 ; ********************* 0582 1326 0583 1326 53 43 4F 52 hdtext: .db "SCORE 00" 0583 132A 45 20 30 30 0584 132E 30 30 20 20 hdtxin: .db "00 HIGH " 0584 1332 20 48 49 47 0584 1336 48 20 0585 1338 53 43 4F 52 hdtxma: .db "SCORE " 0585 133C 45 20 0586 133E 30 30 30 30 hdtxmx: .db "0000",0dh 0586 1342 0D 0587 1343 0588 1343 ; ******************** 0589 1343 ; vytiskne header text 0590 1343 ; ******************** 0591 1343 0592 1343 21 02 C6 prnhea: lxi h,vidhdtx 0593 1346 22 3E C0 shld prnpos 0594 1349 21 26 13 lxi h,hdtext 0595 134C 7E mov a,m 0596 134D CD 00 85 prnhdl: call prnchr 0597 1350 23 inx h 0598 1351 7E mov a,m 0599 1352 FE 0D cpi 0dh 0600 1354 C2 4D 13 jnz prnhdl 0601 1357 C9 ret 0602 1358 0603 1358 ; ******************* 0604 1358 ; vlastní začátek hry 0605 1358 ; ******************* 0606 1358 0607 1358 21 AC 12 goplay: lxi h,t_sped-1 0608 135B 22 A9 12 shld p_sped 0609 135E 2A 9A 12 lhld score 0610 1361 EB xchg 0611 1362 2A 9C 12 lhld hiscor 0612 1365 7D mov a,l 0613 1366 93 sub e 0614 1367 7C mov a,h 0615 1368 9A sbb d 0616 1369 F2 80 13 jp skiphi 0617 136C EB xchg 0618 136D 22 9C 12 shld hiscor 0619 1370 0620 1370 11 26 13 lxi d,hdtext ; zkopírovat SCORE 0621 1373 21 38 13 lxi h,hdtxma ; do HIGH SCORE 0622 1376 06 0A mvi b,10 0623 1378 1A cpyhgh: ldax d 0624 1379 77 mov m,a 0625 137A 13 inx d 0626 137B 23 inx h 0627 137C 05 dcr b 0628 137D C2 78 13 jnz cpyhgh 0629 1380 0630 1380 21 00 00 skiphi: lxi h,0 0631 1383 22 9A 12 shld score 0632 1386 21 2E 13 lxi h,hdtxin 0633 1389 36 30 mvi m,30h 0634 138B 2B dcx h 0635 138C 36 30 mvi m,30h 0636 138E 2B dcx h 0637 138F 36 30 mvi m,30h 0638 1391 0639 1391 AF nxtcol: xra a ; vstupní bod z předch. kola 0640 1392 32 A8 12 sta baloon 0641 1395 32 9F 12 sta mic_cx 0642 1398 32 A0 12 sta mic_dx ; míček padá dolů (dx=0) 0643 139B 32 A1 12 sta mic_nx 0644 139E 32 A3 12 sta mic_cy 0645 13A1 32 A5 12 sta nummic 0646 13A4 3E 01 mvi a,1 0647 13A6 32 A4 12 sta mic_dy ; míček bude padat dolů (dy=1) 0648 13A9 32 A7 12 sta mic_ny 0649 13AC 3E 0F mvi a,frefal ; z default výšky po rozjezdu 0650 13AE 32 A2 12 sta mic_ly 0651 13B1 3E 16 mvi a,inivuz ; výchozí pozice vozíku 0652 13B3 32 A6 12 sta adrvuz 0653 13B6 3E 17 mvi a,inimic ; výchozí pozice míčku 0654 13B8 32 9E 12 sta mic_lx 0655 13BB 3E 1C mvi a,1ch ; vymazat obrazovku 0656 13BD CD 00 85 call prnchr 0657 13C0 2A A9 12 lhld p_sped ; načíst rychlost pro další kolo 0658 13C3 23 inx h 0659 13C4 22 A9 12 shld p_sped 0660 13C7 66 mov h,m 0661 13C8 22 AB 12 shld speed ; a uložit do zpožďovače 0662 13CB CD 45 11 call zasobn ; vytvoří zásobník míčků 0663 13CE CD 58 10 call mkwall ; nakreslí 4 řady cihel 0664 13D1 CD DC 12 call shwlog ; zobrazí logo 0665 13D4 0666 13D4 ; ************************* 0667 13D4 ; hrací smyčka - jedno kolo 0668 13D4 ; ************************* 0669 13D4 0670 13D4 CD 5F 11 smycka: call comput 0671 13D7 CD F7 11 call cihtst 0672 13DA CD 2C 11 call micmov ; jen překreslení 0673 13DD CD 73 10 call ovlada 0674 13E0 CD EC 13 call beeper 0675 13E3 CD 73 10 call ovlada 0676 13E6 CD FC 13 call pauser 0677 13E9 C3 D4 13 jmp smycka 0678 13EC 0679 13EC ; **************************** 0680 13EC ; dle výšky míčku generuje tón 0681 13EC ; **************************** 0682 13EC 0683 13EC 2A A2 12 beeper: lhld mic_ly 0684 13EF 26 00 mvi h,0 0685 13F1 11 30 14 lxi d,t_tone 0686 13F4 19 dad d 0687 13F5 5E mov e,m 0688 13F6 2A AB 12 lhld speed 0689 13F9 C3 0C 14 jmp tongen 0690 13FC 0691 13FC ; ************************** 0692 13FC ; symetrická pauza k beeperu 0693 13FC ; ************************** 0694 13FC 0695 13FC 2A AB 12 pauser: lhld speed 0696 13FF 11 C8 00 lxi d,0c8h 0697 1402 43 pause1: mov b,e 0698 1403 05 pause2: dcr b 0699 1404 C2 03 14 jnz pause2 0700 1407 19 dad d 0701 1408 D2 02 14 jnc pause1 0702 140B C9 ret 0703 140C 0704 140C ; *************** 0705 140C ; generování tónu 0706 140C ; *************** 0707 140C 0708 140C 0E 00 tongen: mvi c,0 0709 140E 16 00 mvi d,0 0710 1410 43 tonge1: mov b,e 0711 1411 05 tonge2: dcr b 0712 1412 C2 11 14 jnz tonge2 0713 1415 79 mov a,c 0714 1416 EE 04 xri 4 0715 1418 4F mov c,a 0716 1419 D3 F6 out 0f6h 0717 141B 19 dad d 0718 141C D2 10 14 jnc tonge1 0719 141F C9 ret 0720 1420 0721 1420 ; ************************** 0722 1420 ; crash zvuk s délkou dle DE 0723 1420 ; ************************** 0724 1420 0725 1420 01 00 80 sncrsh: lxi b,rombios 0726 1423 0A sncrlo: ldax b 0727 1424 E6 04 ani 4 0728 1426 D3 F6 out 0f6h 0729 1428 1B dcx d 0730 1429 03 inx b 0731 142A 7A mov a,d 0732 142B B3 ora e 0733 142C C2 23 14 jnz sncrlo 0734 142F C9 ret 0735 1430 0736 1430 ; ********************************** 0737 1430 ; tabulka výšek tónů dle výšky míčku 0738 1430 ; ********************************** 0739 1430 0740 1430 64 67 6A 6D t_tone: .db 064h,067h,06ah,06dh 0741 1434 70 74 77 7A .db 070h,074h,077h,07ah 0742 1438 7E 82 85 89 .db 07eh,082h,085h,089h 0743 143C 8D 92 96 9A .db 08dh,092h,096h,09ah 0744 1440 9F A3 A8 AD .db 09fh,0a3h,0a8h,0adh 0745 1444 B2 B7 BD C2 .db 0b2h,0b7h,0bdh,0c2h 0746 1448 C8 CE D4 DA .db 0c8h,0ceh,0d4h,0dah 0747 144C E0 E7 EE F5 .db 0e0h,0e7h,0eeh,0f5h 0748 1450 FA FF FF .db 0fah,0ffh,0ffh 0749 1453 0750 1453 .end