?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.         JP F_CUTh
  20.  
  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
  64.         ds 63 ;*B ..\TASK\w115.tsk
  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.  
  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
  158.         ;jr $
  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
  177.         ;im 2
  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
  211.         ;im 1
  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)
  214.         ld e,0
  215.         OS_SETSCREEN
  216.         ld de,RSTPAL
  217.         OS_SETPAL
  218.         ;OS_GETSCREENPAGES
  219. ;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
  220.         ld a,(user_scr0_high) ;ok
  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
  240. RSTPAL
  241.         STANDARDPAL
  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
  408.         savebin "br/br117.dat",begin,end-begin ;in current dir (not in dir of this source)
  409.