Login

Subversion Repositories NedoOS

Rev

Rev 922 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

        DEVICE ZXSPECTRUM1024
        include "../../_sdk/sys_h.asm"
_128=PROGSTART+3
swapimer=PROGSTART+6
ttexpgs=PROGSTART+0x100

LEVDAT  EQU     #79C0 ;адр. нач данных уровня
        ORG     LEVDAT
begin
DSCR    EQU 0xc000;#4000

;*D-
;********* Победа людей ****************

isRUNC  ; кодовый блок
         nop
         ;jr $
        ;LD A,0  ;люди
        LD A,1 ;кунги
        JP F_CUTh

;--------характеристики сторон-------(0)-обнулять вначале

;параметры играющего
;hTOWER DEFB 4 ;мак.число типов вооруж (1-4)
;hARC   DEFB 0 ;0-2 (0)
hHORSE  DEFB 1 ;0-3 (0)
hSHILD  DEFB 0 ;0-2 (0)
hBLADE  DEFB 1 ;0-2 (0)
hmaxC   DEFB 3 ;1-3 чиcло возможн иccл закл свящ
hmaxW   DEFB 3 ;1-3 число  --"-- закл волш

;дополнительные параметры играющего
hmaxB1  DEFB 2 ;макс число стандарт зданий (0 или 1-2)
hmaxB2  DEFB 4 ;maкc число доп эданий (0, 1-4)
hWALL   DEFB 17 ;0/17 - можно/нельзя строить стены

;параметры компьютера
kTOWER  DEFB 4 ;1-4
kARC    DEFB 0 ;0-2
kHORSE  DEFB 2 ;0-3
kSHILD  DEFB 1 ;0-2
kBLADE  DEFB 1 ;0-2
kmaxC   DEFB 3 ;1,3 чиcло иccл закл (0-нет свящ)
kmaxW   DEFB 3 ;1..3 чиcло иccл закл (0-нет волш)

;----------- параметры стратегии врага ----------------
;/wSTRATEG  (1.ед.изм - 8тик)
levMAX  DEFB 8   ;макс число народу в группе (для уровня) = 1..10
levDEL  DEFB 41  ;средн задержка межд сборами (для уровня) = 1..X
lev1ST  DEFB 221 ;нач задержка первого сбора = 1..
 ;Тип уровня 0 ;обычный
 ;Тип уровня 1 ;атакованый охранник становится атакующим
 ;Тип уровня 2 ;см. тип 1 + охранники иногда идут в атаку
levTYP  DEFB 0   ;тип уровня (0-обычный)
;-------- цветовые настройки -------
COLOR   DEFB #28 ;цвет поля

;-------- общие параметры уровня -----
MASTER  DEFB 0  ; кто играет 0/1 - люди?кунги
LEVEL   DEFB 15  ; номер уровня
MONEY   DEFB 0,0,3,0,0,0 ;деньги
WOOD    DEFB 0,0,0,5,0,0 ;леc
TASK_M  ;задание: 3 строки по 20+1 символов = 63
        ds 63 ;*B ..\TASK\w115.tsk
LEVRES  DEFB 0,0,0,43,0,0,127 ;текущее время прохождения

;------- используемые файлы -------

fsLAND  DEFB 2; 1-4
fsMUS   DEFB 0; 0-7


;****************** Инициализируемые переменные ****************
;--------------- (входят в описание каждого уровня) ------------
;/выбраные герои
SEL_T DEFB 0 ;0-none;1-один;2-6-group;7-кунг,8-здание
SEL_N DEFB 0,0,0,0,0,0 ;номера 6 выбр гер/зд

sel_en DEFB #FF ;выбранный враг-цель
sel_ti DEFB 0 ;время отображения цели

;/outLED
LED DEFB 4,3,4,3,4,3

;/putTX
_msg    DEFB #FF
pTX_AD  DEFW 0;WNAMES
TX_AD   DEFW 0;WNAMES
pTXdel  DEFB 0 ;t задержки на выв экcтр cообщ

;/M_PLAT
isPLAT  DEFB 0; 0/1-есть/нет площадки
szPLAT  DEFB 0; размер площадки под стр-во (1..3, 0-нет)
bcPLAT  DEFW 0; размеры
adPLAT  DEFW 0; позиция in ATR
waPLAT  DEFB 0; если стена - 1

;/PAUSE
onPAUS  DEFB 1 ;0-включить паузу

;/SOUNDn
NOTA    DEFW se ;текущ нота <---- ПРЕРЫВАНИЕ ПИШЕТ СЮДА
se      DEFW #FFFF ;конст
levSND  DEFB 0 ;0-макс громкость
sIY56   DEFW 0 ;координаты снарядов
priv_S  DEFB 0 ;текущ приоритет (0-нет мелодии)
NOTA2   DEFW se ;нота новой мелодии
priv_2  DEFB 0  ;нов приор

;/STRATEG - variables
pntX    DEFB 32  ;-коорд т.сбора
pntY    DEFB 31  ;-/
pntNUM  DEFB 0   ;-число оставшихся до конца сбора воинов (0-конец сбора, 255-нов сбор)
pntDEL  DEFB 22  ;-время до нач.след сбора/задержка на пр-во воина
pntTAR  DEFB #FF ;-объект атаки (0-101 - воины, #80.. -здания, #FF-нет)
pntUNI  DEFB 0   ;-отряд разнородный/однородный (0/member typ)
pntEN   DEFB 0,0,0,0,0,0
                 ;-разреш пр-во вида (3..8) (0-нет)
pntMAN  DEFB 0   ;тип пораждаемого воина

;/isEND
END_1   DEFB 0  ;0/1/2-none/нет врагов/нет людей
END_2   DEFB 0  ;не0-князь вошёл в пещеру
TheEND  DEFB 0  ;0/1/2-none/победа людей/победа врагов (устанавл в _cLOOP)

        if 1==1
;надо загрузить brfinal.dat и странички
;*P0;
;        ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIu_0.LPZ
;*P1;
;        ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIu_1.LPZ
;*P3;
;        ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIv_0.LPZ
;*P4;
;        ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIv_1.LPZ
;*P6;
;        ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIw_0.LPZ
;*P7;
;        ORG #C000
;*B ..\INTRO\FLICK.LPZ\WANIw_1.LPZ
loader

        ld hl,texfilename
        ld de,0x8000 ;addr
        ld b,7
getttexpgs0
        push bc
         ld a,(hl)
         call _128
        inc hl
        push hl
        push de ;addr
        ex de,hl
        OS_OPENHANDLE
        pop de ;addr
        push bc
        ;ld de,0xc000 ;addr
        ld hl,0x4000 ;size
        OS_READHANDLE
        pop bc
        OS_CLOSEHANDLE
               
        pop hl
        ld b,1
        xor a
        cpir ;after 0
        pop bc
        ld de,0xc000 ;addr
        djnz getttexpgs0

        call swapimer
        ;im 2
       
        pop af
        ld (0x8000),a

        jp 0x8001
       
texfilename
        db 0,"brfinal.dat",0
        db 0,"branix_0.dat",0
        db 1,"branix_1.dat",0
        db 3,"braniy_0.dat",0
        db 4,"braniy_1.dat",0
        db 6,"braniz_0.dat",0
        db 7,"braniz_1.dat",0

        endif

Sc1
        incbin "../barkov/w_end_k.scr"
Sc2
        incbin "../barkov/w_end2.scr"

F_CUTh  ;DI
        ;IM 1
        LD SP,LEVDAT-2
        LD B,A
        PUSH BC
        CALL OFFD
         xor a
        CALL _128
       
        if 1==1
        call swapimer
        ;im 1
        ld e,3
        OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
        ld e,0
        OS_SETSCREEN
        ld de,RSTPAL
        OS_SETPAL
        ;OS_GETSCREENPAGES
;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
        ld a,(user_scr0_high) ;ok
        SETPG32KHIGH
        endif

        LD HL,Sc1
        CALL COPYAT

        ;пробел?
lggP    LD BC,#7FFE
        IN A,(C)
        AND %1
        JR NZ,lggP

        CALL OFFD

        LD HL,Sc2
        CALL COPYAT

        if 1==1
        jp loader
RSTPAL
        STANDARDPAL

        else

        CALL A_or_B
        LD (tDRIVE),A
        CALL OFFD
        ;чтение трек 0, сек 9 по 23845
A009    EQU     23845
L1st    CALL TR000
        LD DE,#09
        LD B,1
        LD HL,A009
        PUSH HL
        CALL D_READ ;загр. табл.ф-лов
        POP HL
        JR C,L1st
        ;проверка метки диска D1,BB
        LD A,(HL)
        CP #D1
        JR NZ,L1st
        INC HL
        LD A,(HL)
        CP #BB
        JR NZ,L1st
        ;перенос т.ф-лов
        POP BC
        LD A,(tDRIVE)
        JP A009+2
        endif

        if 1==0
;------------------- вспом п/п

A_or_B  ;возвр: 0/1 - A/B
        NOP
        LD BC,#7FFE
        IN A,(C)
        AND %10000
        LD A,1
        RET Z
        LD B,#FD
        IN A,(C)
        AND %1
        RET Z
        JR NZ,A_or_B
        endif

        if 1==0
;TODO fix
_128    LD A,%10000
        LD      BC,#7FFD
        OUT     (C),A
        RET
        endif

OFFD    LD      DE,DSCR+#1AFE
        PUSH DE
        POP HL
        INC HL
        LD      BC,768
        LD      (HL),0
        LDDR
        LD      BC,6143
        LD      (HL),255
        LDDR
        RET

COPYAT  ;из HL
        LD      BC,6912
        LD      DE,DSCR
        LDIR
        RET

        if 1==0
;-------tr/dos
RG_DOS  LD      IX,#2A53 ;выв в рег TRDOS (out (C),A:ret)
        JR      DOS

DOS     PUSH    IX
        JP      #3D2E

POS     ;позиционир трек
        LD C,#3C
        LD A,(SIDE)
        OR A
        JR      Z,DW_SID
        RES     4,C
DW_SID  LD A,(tDRIVE)
        OR C
        LD      C,#FF
        CALL    RG_DOS
        LD      A,D
        LD      C,#7F
        CALL    RG_DOS
        LD      A,#18
        LD      IX,#2F57 ;вып ком TRDOS
        JP DOS

RD_SCT  LD      BC,RD_SCT ;по этому адресу = 1
        PUSH    BC
        LD      BC,#17F
        LD      IX,#2090  ;чтение сектора из п/п форматирования(портит#5cd6)
        JR      DOS

TR000   CALL TR00 ;иниц дисковода + задержка
        CALL TR00
        CALL TR00
TR00    DI
        LD      D,0
        CALL    POS
        LD      IX,#2F65 ;ld a,8:jr 2f57
        JR      DOS

tDRIVE  DEFB 0
SIDE    DEFB 0

D_READ  DI ;E-sec,D-trk,B-sec.num,HL-mem.adr
        CALL    POS
        LD      A,(#5CD6)
        EX      AF,AF'
NXT_S   DEFB    #DD
        LD      L,#3 ;retry.num
NXT_SC  PUSH    HL
        PUSH    BC
NXC_C1  PUSH    IX
        LD      C,#5F
        LD      A,E
        CALL    RG_DOS
        CALL    RD_SCT
        DI
        LD      HL,#5CD6
        EX      AF,AF'

        CP      (HL)
        POP     IX
        JR      Z,GOOD
        LD      (HL),A
        DEFB    #DD
        DEC     L
        POP     BC
        POP     HL
        JR      Z,ERR_RW
        EX      AF,AF'
        JR      NXT_SC
GOOD    POP     BC
        POP     HL
        EX      AF,AF'

GOOD1   INC     E
        LD      A,E
        CP      #F9
        JR      C,OLD_TR
        LD      E,#F4
        INC     D
        CALL    POS
OLD_TR  INC     H
        INC     H
        INC     H
        INC     H
        DJNZ    NXT_S
        XOR     A
        RET

ERR_RW  SCF
        RET

        endif
end
        savebin "br/br217.dat",begin,end-begin ;in current dir (not in dir of this source)