Subversion Repositories NedoOS

Rev

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)