?login_element?

Subversion Repositories NedoOS

Rev

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

  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 $
  18.         ;LD A,0  ;люди
  19.         LD A,1 ;кунги
  20.         JP F_CUTh
  21.  
  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
  65.         ds 63 ;*B ..\TASK\w115.tsk
  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.  
  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
  178.         ;im 2
  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
  212.         ;im 1
  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)
  215.         ld e,0
  216.         OS_SETSCREEN
  217.         ld de,RSTPAL
  218.         OS_SETPAL
  219.         ;OS_GETSCREENPAGES
  220. ;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
  221.         ld a,(user_scr0_high) ;ok
  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
  241. RSTPAL
  242.         STANDARDPAL
  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
  409.         savebin "br/br217.dat",begin,end-begin ;in current dir (not in dir of this source)
  410.