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