Rev 922 | Details | Compare with Previous | Last modification | View Log
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 228 | demige | 1 | DEVICE ZXSPECTRUM1024 |
| 2 | include "../../_sdk/sys_h.asm" |
||
| 3 | _128=PROGSTART+3 |
||
| 4 | swapimer=PROGSTART+6 |
||
| 5 | ttexpgs=PROGSTART+0x100 |
||
| 6 | |||
| 7 | LEVDAT EQU #79C0 ;адр. нач данных уровня |
||
| 8 | ORG LEVDAT |
||
| 9 | begin |
||
| 10 | DSCR EQU 0xc000;#4000 |
||
| 11 | |||
| 12 | ;*D- |
||
| 13 | ;********* Победа людей **************** |
||
| 14 | |||
| 15 | isRUNC ; кодовый блок |
||
| 16 | nop |
||
| 17 | ;jr $ |
||
| 230 | alone | 18 | ;LD A,0 ;люди |
| 228 | demige | 19 | LD A,1 ;кунги |
| 20 | JP F_CUTh |
||
| 21 | |||
| 230 | alone | 22 | ;--------характеристики сторон-------(0)-обнулять вначале |
| 23 | |||
| 24 | ;параметры играющего |
||
| 25 | ;hTOWER DEFB 4 ;мак.число типов вооруж (1-4) |
||
| 26 | ;hARC DEFB 0 ;0-2 (0) |
||
| 27 | hHORSE DEFB 1 ;0-3 (0) |
||
| 28 | hSHILD DEFB 0 ;0-2 (0) |
||
| 29 | hBLADE DEFB 1 ;0-2 (0) |
||
| 30 | hmaxC DEFB 3 ;1-3 чиcло возможн иccл закл свящ |
||
| 31 | hmaxW DEFB 3 ;1-3 число --"-- закл волш |
||
| 32 | |||
| 33 | ;дополнительные параметры играющего |
||
| 34 | hmaxB1 DEFB 2 ;макс число стандарт зданий (0 или 1-2) |
||
| 35 | hmaxB2 DEFB 4 ;maкc число доп эданий (0, 1-4) |
||
| 36 | hWALL DEFB 17 ;0/17 - можно/нельзя строить стены |
||
| 37 | |||
| 38 | ;параметры компьютера |
||
| 39 | kTOWER DEFB 4 ;1-4 |
||
| 40 | kARC DEFB 0 ;0-2 |
||
| 41 | kHORSE DEFB 2 ;0-3 |
||
| 42 | kSHILD DEFB 1 ;0-2 |
||
| 43 | kBLADE DEFB 1 ;0-2 |
||
| 44 | kmaxC DEFB 3 ;1,3 чиcло иccл закл (0-нет свящ) |
||
| 45 | kmaxW DEFB 3 ;1..3 чиcло иccл закл (0-нет волш) |
||
| 46 | |||
| 47 | ;----------- параметры стратегии врага ---------------- |
||
| 48 | ;/wSTRATEG (1.ед.изм - 8тик) |
||
| 49 | levMAX DEFB 8 ;макс число народу в группе (для уровня) = 1..10 |
||
| 50 | levDEL DEFB 41 ;средн задержка межд сборами (для уровня) = 1..X |
||
| 51 | lev1ST DEFB 221 ;нач задержка первого сбора = 1.. |
||
| 52 | ;Тип уровня 0 ;обычный |
||
| 53 | ;Тип уровня 1 ;атакованый охранник становится атакующим |
||
| 54 | ;Тип уровня 2 ;см. тип 1 + охранники иногда идут в атаку |
||
| 55 | levTYP DEFB 0 ;тип уровня (0-обычный) |
||
| 56 | ;-------- цветовые настройки ------- |
||
| 57 | COLOR DEFB #28 ;цвет поля |
||
| 58 | |||
| 59 | ;-------- общие параметры уровня ----- |
||
| 60 | MASTER DEFB 0 ; кто играет 0/1 - люди?кунги |
||
| 61 | LEVEL DEFB 15 ; номер уровня |
||
| 62 | MONEY DEFB 0,0,3,0,0,0 ;деньги |
||
| 63 | WOOD DEFB 0,0,0,5,0,0 ;леc |
||
| 64 | TASK_M ;задание: 3 строки по 20+1 символов = 63 |
||
| 231 | alone | 65 | ds 63 ;*B ..\TASK\w115.tsk |
| 230 | alone | 66 | LEVRES DEFB 0,0,0,43,0,0,127 ;текущее время прохождения |
| 67 | |||
| 68 | ;------- используемые файлы ------- |
||
| 69 | |||
| 70 | fsLAND DEFB 2; 1-4 |
||
| 71 | fsMUS DEFB 0; 0-7 |
||
| 72 | |||
| 73 | |||
| 74 | ;****************** Инициализируемые переменные **************** |
||
| 75 | ;--------------- (входят в описание каждого уровня) ------------ |
||
| 76 | ;/выбраные герои |
||
| 77 | SEL_T DEFB 0 ;0-none;1-один;2-6-group;7-кунг,8-здание |
||
| 78 | SEL_N DEFB 0,0,0,0,0,0 ;номера 6 выбр гер/зд |
||
| 79 | |||
| 80 | sel_en DEFB #FF ;выбранный враг-цель |
||
| 81 | sel_ti DEFB 0 ;время отображения цели |
||
| 82 | |||
| 83 | ;/outLED |
||
| 84 | LED DEFB 4,3,4,3,4,3 |
||
| 85 | |||
| 86 | ;/putTX |
||
| 87 | _msg DEFB #FF |
||
| 88 | pTX_AD DEFW 0;WNAMES |
||
| 89 | TX_AD DEFW 0;WNAMES |
||
| 90 | pTXdel DEFB 0 ;t задержки на выв экcтр cообщ |
||
| 91 | |||
| 92 | ;/M_PLAT |
||
| 93 | isPLAT DEFB 0; 0/1-есть/нет площадки |
||
| 94 | szPLAT DEFB 0; размер площадки под стр-во (1..3, 0-нет) |
||
| 95 | bcPLAT DEFW 0; размеры |
||
| 96 | adPLAT DEFW 0; позиция in ATR |
||
| 97 | waPLAT DEFB 0; если стена - 1 |
||
| 98 | |||
| 99 | ;/PAUSE |
||
| 100 | onPAUS DEFB 1 ;0-включить паузу |
||
| 101 | |||
| 102 | ;/SOUNDn |
||
| 103 | NOTA DEFW se ;текущ нота <---- ПРЕРЫВАНИЕ ПИШЕТ СЮДА |
||
| 104 | se DEFW #FFFF ;конст |
||
| 105 | levSND DEFB 0 ;0-макс громкость |
||
| 106 | sIY56 DEFW 0 ;координаты снарядов |
||
| 107 | priv_S DEFB 0 ;текущ приоритет (0-нет мелодии) |
||
| 108 | NOTA2 DEFW se ;нота новой мелодии |
||
| 109 | priv_2 DEFB 0 ;нов приор |
||
| 110 | |||
| 111 | ;/STRATEG - variables |
||
| 112 | pntX DEFB 32 ;-коорд т.сбора |
||
| 113 | pntY DEFB 31 ;-/ |
||
| 114 | pntNUM DEFB 0 ;-число оставшихся до конца сбора воинов (0-конец сбора, 255-нов сбор) |
||
| 115 | pntDEL DEFB 22 ;-время до нач.след сбора/задержка на пр-во воина |
||
| 116 | pntTAR DEFB #FF ;-объект атаки (0-101 - воины, #80.. -здания, #FF-нет) |
||
| 117 | pntUNI DEFB 0 ;-отряд разнородный/однородный (0/member typ) |
||
| 118 | pntEN DEFB 0,0,0,0,0,0 |
||
| 119 | ;-разреш пр-во вида (3..8) (0-нет) |
||
| 120 | pntMAN DEFB 0 ;тип пораждаемого воина |
||
| 121 | |||
| 122 | ;/isEND |
||
| 123 | END_1 DEFB 0 ;0/1/2-none/нет врагов/нет людей |
||
| 124 | END_2 DEFB 0 ;не0-князь вошёл в пещеру |
||
| 125 | TheEND DEFB 0 ;0/1/2-none/победа людей/победа врагов (устанавл в _cLOOP) |
||
| 126 | |||
| 228 | demige | 127 | if 1==1 |
| 128 | ;надо загрузить brfinal.dat и странички |
||
| 129 | ;*P0; |
||
| 130 | ; ORG #C000 |
||
| 131 | ;*B ..\INTRO\FLICK.LPZ\WANIu_0.LPZ |
||
| 132 | ;*P1; |
||
| 133 | ; ORG #C000 |
||
| 134 | ;*B ..\INTRO\FLICK.LPZ\WANIu_1.LPZ |
||
| 135 | ;*P3; |
||
| 136 | ; ORG #C000 |
||
| 137 | ;*B ..\INTRO\FLICK.LPZ\WANIv_0.LPZ |
||
| 138 | ;*P4; |
||
| 139 | ; ORG #C000 |
||
| 140 | ;*B ..\INTRO\FLICK.LPZ\WANIv_1.LPZ |
||
| 141 | ;*P6; |
||
| 142 | ; ORG #C000 |
||
| 143 | ;*B ..\INTRO\FLICK.LPZ\WANIw_0.LPZ |
||
| 144 | ;*P7; |
||
| 145 | ; ORG #C000 |
||
| 146 | ;*B ..\INTRO\FLICK.LPZ\WANIw_1.LPZ |
||
| 147 | loader |
||
| 148 | |||
| 149 | ld hl,texfilename |
||
| 150 | ld de,0x8000 ;addr |
||
| 151 | ld b,7 |
||
| 152 | getttexpgs0 |
||
| 153 | push bc |
||
| 154 | ld a,(hl) |
||
| 155 | call _128 |
||
| 156 | inc hl |
||
| 157 | push hl |
||
| 158 | push de ;addr |
||
| 159 | ex de,hl |
||
| 160 | OS_OPENHANDLE |
||
| 161 | pop de ;addr |
||
| 162 | push bc |
||
| 163 | ;ld de,0xc000 ;addr |
||
| 164 | ld hl,0x4000 ;size |
||
| 165 | OS_READHANDLE |
||
| 166 | pop bc |
||
| 167 | OS_CLOSEHANDLE |
||
| 168 | |||
| 169 | pop hl |
||
| 170 | ld b,1 |
||
| 171 | xor a |
||
| 172 | cpir ;after 0 |
||
| 173 | pop bc |
||
| 174 | ld de,0xc000 ;addr |
||
| 175 | djnz getttexpgs0 |
||
| 176 | |||
| 177 | call swapimer |
||
| 230 | alone | 178 | ;im 2 |
| 228 | demige | 179 | |
| 180 | pop af |
||
| 181 | ld (0x8000),a |
||
| 182 | |||
| 183 | jp 0x8001 |
||
| 184 | |||
| 185 | texfilename |
||
| 186 | db 0,"brfinal.dat",0 |
||
| 187 | db 0,"branix_0.dat",0 |
||
| 188 | db 1,"branix_1.dat",0 |
||
| 189 | db 3,"braniy_0.dat",0 |
||
| 190 | db 4,"braniy_1.dat",0 |
||
| 191 | db 6,"braniz_0.dat",0 |
||
| 192 | db 7,"braniz_1.dat",0 |
||
| 193 | |||
| 194 | endif |
||
| 195 | |||
| 196 | Sc1 |
||
| 197 | incbin "../barkov/w_end_k.scr" |
||
| 198 | Sc2 |
||
| 199 | incbin "../barkov/w_end2.scr" |
||
| 200 | |||
| 201 | F_CUTh ;DI |
||
| 202 | ;IM 1 |
||
| 203 | LD SP,LEVDAT-2 |
||
| 204 | LD B,A |
||
| 205 | PUSH BC |
||
| 206 | CALL OFFD |
||
| 207 | xor a |
||
| 208 | CALL _128 |
||
| 209 | |||
| 210 | if 1==1 |
||
| 211 | call swapimer |
||
| 230 | alone | 212 | ;im 1 |
| 278 | alone | 213 | ld e,3 |
| 214 | OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode) |
||
| 228 | demige | 215 | ld e,0 |
| 216 | OS_SETSCREEN |
||
| 278 | alone | 217 | ld de,RSTPAL |
| 218 | OS_SETPAL |
||
| 544 | alone | 219 | ;OS_GETSCREENPAGES |
| 228 | demige | 220 | ;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая) |
| 555 | alone | 221 | ld a,(user_scr0_high) ;ok |
| 228 | demige | 222 | SETPG32KHIGH |
| 223 | endif |
||
| 224 | |||
| 225 | LD HL,Sc1 |
||
| 226 | CALL COPYAT |
||
| 227 | |||
| 228 | ;пробел? |
||
| 229 | lggP LD BC,#7FFE |
||
| 230 | IN A,(C) |
||
| 231 | AND %1 |
||
| 232 | JR NZ,lggP |
||
| 233 | |||
| 234 | CALL OFFD |
||
| 235 | |||
| 236 | LD HL,Sc2 |
||
| 237 | CALL COPYAT |
||
| 238 | |||
| 239 | if 1==1 |
||
| 240 | jp loader |
||
| 278 | alone | 241 | RSTPAL |
| 242 | STANDARDPAL |
||
| 228 | demige | 243 | |
| 244 | else |
||
| 245 | |||
| 246 | CALL A_or_B |
||
| 247 | LD (tDRIVE),A |
||
| 248 | CALL OFFD |
||
| 249 | ;чтение трек 0, сек 9 по 23845 |
||
| 250 | A009 EQU 23845 |
||
| 251 | L1st CALL TR000 |
||
| 252 | LD DE,#09 |
||
| 253 | LD B,1 |
||
| 254 | LD HL,A009 |
||
| 255 | PUSH HL |
||
| 256 | CALL D_READ ;загр. табл.ф-лов |
||
| 257 | POP HL |
||
| 258 | JR C,L1st |
||
| 259 | ;проверка метки диска D1,BB |
||
| 260 | LD A,(HL) |
||
| 261 | CP #D1 |
||
| 262 | JR NZ,L1st |
||
| 263 | INC HL |
||
| 264 | LD A,(HL) |
||
| 265 | CP #BB |
||
| 266 | JR NZ,L1st |
||
| 267 | ;перенос т.ф-лов |
||
| 268 | POP BC |
||
| 269 | LD A,(tDRIVE) |
||
| 270 | JP A009+2 |
||
| 271 | endif |
||
| 272 | |||
| 273 | if 1==0 |
||
| 274 | ;------------------- вспом п/п |
||
| 275 | |||
| 276 | A_or_B ;возвр: 0/1 - A/B |
||
| 277 | NOP |
||
| 278 | LD BC,#7FFE |
||
| 279 | IN A,(C) |
||
| 280 | AND %10000 |
||
| 281 | LD A,1 |
||
| 282 | RET Z |
||
| 283 | LD B,#FD |
||
| 284 | IN A,(C) |
||
| 285 | AND %1 |
||
| 286 | RET Z |
||
| 287 | JR NZ,A_or_B |
||
| 288 | endif |
||
| 289 | |||
| 290 | if 1==0 |
||
| 291 | ;TODO fix |
||
| 292 | _128 LD A,%10000 |
||
| 293 | LD BC,#7FFD |
||
| 294 | OUT (C),A |
||
| 295 | RET |
||
| 296 | endif |
||
| 297 | |||
| 298 | OFFD LD DE,DSCR+#1AFE |
||
| 299 | PUSH DE |
||
| 300 | POP HL |
||
| 301 | INC HL |
||
| 302 | LD BC,768 |
||
| 303 | LD (HL),0 |
||
| 304 | LDDR |
||
| 305 | LD BC,6143 |
||
| 306 | LD (HL),255 |
||
| 307 | LDDR |
||
| 308 | RET |
||
| 309 | |||
| 310 | COPYAT ;из HL |
||
| 311 | LD BC,6912 |
||
| 312 | LD DE,DSCR |
||
| 313 | LDIR |
||
| 314 | RET |
||
| 315 | |||
| 316 | if 1==0 |
||
| 317 | ;-------tr/dos |
||
| 318 | RG_DOS LD IX,#2A53 ;выв в рег TRDOS (out (C),A:ret) |
||
| 319 | JR DOS |
||
| 320 | |||
| 321 | DOS PUSH IX |
||
| 322 | JP #3D2E |
||
| 323 | |||
| 324 | POS ;позиционир трек |
||
| 325 | LD C,#3C |
||
| 326 | LD A,(SIDE) |
||
| 327 | OR A |
||
| 328 | JR Z,DW_SID |
||
| 329 | RES 4,C |
||
| 330 | DW_SID LD A,(tDRIVE) |
||
| 331 | OR C |
||
| 332 | LD C,#FF |
||
| 333 | CALL RG_DOS |
||
| 334 | LD A,D |
||
| 335 | LD C,#7F |
||
| 336 | CALL RG_DOS |
||
| 337 | LD A,#18 |
||
| 338 | LD IX,#2F57 ;вып ком TRDOS |
||
| 339 | JP DOS |
||
| 340 | |||
| 341 | RD_SCT LD BC,RD_SCT ;по этому адресу = 1 |
||
| 342 | PUSH BC |
||
| 343 | LD BC,#17F |
||
| 344 | LD IX,#2090 ;чтение сектора из п/п форматирования(портит#5cd6) |
||
| 345 | JR DOS |
||
| 346 | |||
| 347 | TR000 CALL TR00 ;иниц дисковода + задержка |
||
| 348 | CALL TR00 |
||
| 349 | CALL TR00 |
||
| 350 | TR00 DI |
||
| 351 | LD D,0 |
||
| 352 | CALL POS |
||
| 353 | LD IX,#2F65 ;ld a,8:jr 2f57 |
||
| 354 | JR DOS |
||
| 355 | |||
| 356 | tDRIVE DEFB 0 |
||
| 357 | SIDE DEFB 0 |
||
| 358 | |||
| 359 | D_READ DI ;E-sec,D-trk,B-sec.num,HL-mem.adr |
||
| 360 | CALL POS |
||
| 361 | LD A,(#5CD6) |
||
| 362 | EX AF,AF' |
||
| 363 | NXT_S DEFB #DD |
||
| 364 | LD L,#3 ;retry.num |
||
| 365 | NXT_SC PUSH HL |
||
| 366 | PUSH BC |
||
| 367 | NXC_C1 PUSH IX |
||
| 368 | LD C,#5F |
||
| 369 | LD A,E |
||
| 370 | CALL RG_DOS |
||
| 371 | CALL RD_SCT |
||
| 372 | DI |
||
| 373 | LD HL,#5CD6 |
||
| 374 | EX AF,AF' |
||
| 375 | CP (HL) |
||
| 376 | POP IX |
||
| 377 | JR Z,GOOD |
||
| 378 | LD (HL),A |
||
| 379 | DEFB #DD |
||
| 380 | DEC L |
||
| 381 | POP BC |
||
| 382 | POP HL |
||
| 383 | JR Z,ERR_RW |
||
| 384 | EX AF,AF' |
||
| 385 | JR NXT_SC |
||
| 386 | GOOD POP BC |
||
| 387 | POP HL |
||
| 388 | EX AF,AF' |
||
| 389 | GOOD1 INC E |
||
| 390 | LD A,E |
||
| 391 | CP #F9 |
||
| 392 | JR C,OLD_TR |
||
| 393 | LD E,#F4 |
||
| 394 | INC D |
||
| 395 | CALL POS |
||
| 396 | OLD_TR INC H |
||
| 397 | INC H |
||
| 398 | INC H |
||
| 399 | INC H |
||
| 400 | DJNZ NXT_S |
||
| 401 | XOR A |
||
| 402 | RET |
||
| 403 | |||
| 404 | ERR_RW SCF |
||
| 405 | RET |
||
| 406 | |||
| 407 | endif |
||
| 408 | end |
||
| 930 | alone | 409 | savebin "br/br217.dat",begin,end-begin ;in current dir (not in dir of this source) |