?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.             DEVICE ZXSPECTRUM1024
  2. ;VERA
  3. ;INTRO and SETUP
  4. ;
  5. ;15.12.07
  6. ;18.04.08
  7. ;29.04.08
  8. ;17.05.08
  9. ;18.05.08
  10. ;19.05.08
  11. ;23.05.08
  12. ;6.07.08
  13. ;7.08.08
  14. ;23.08.08
  15. ;24.08.08 - мой д/р :)
  16. ;25.08.08
  17. ;26.08.08
  18.  
  19. GAME=#7286 ;старт игры
  20. KDEL=15    ;задержка автоповтора нажатия клавиши
  21. QLINE=9    ;кол-во пунктов меню
  22. QVALUE=7   ;кол-во изменяемых пунктов сетапа
  23. LEN=17     ;Длина линейки выделения пункта
  24. SET=23881  ;Адрес, где хранятся данные установок
  25.  
  26. ;Корректируемые ячейки (установки) в игре
  27. MOUSE   EQU #68C8 ;мышь
  28. ROLL    EQU #692D ;колесо
  29. SCANTYP EQU #69CF ;Джойстик/клава
  30. MSPEED  EQU #68C0 ;ускорение курсора
  31. MUSON   EQU #67FD ;музыка on/off
  32. SOUND   EQU #F8FD ;звуки on/off, PG_MAP
  33.  
  34. ;Страницы
  35. PG_MAP  EQU 1
  36. PG_MUZ  EQU 6
  37. PG_VIEW EQU 7
  38.  
  39. MUSIC   EQU #D35E-100 ;адрес мелодии (-100 т.к. заголовок отруб)
  40. MUSINI  EQU #D696     ;плеер инициализация
  41. PLAY    EQU MUSINI+2  ;проигрывание одного кванта мелодии
  42. MUTE    EQU MUSINI+5  ;заглушить музыку
  43.  
  44. ;Токены в тексте
  45. NCRD=1
  46. BOLD=2
  47. NORM=3
  48. LINE=4
  49. PAUS=5
  50. CLS=6
  51. BORDER=7
  52. LINK=8  ;ссылка на строку текста, токены в ссылках не работают!
  53. FATR=9  ;заполнить атрибуты экрана белым
  54. ;ENDL=9 ;конец линка
  55.  
  56. ;По токенам смотри метку TITRES
  57.  
  58. ;---
  59. ;       ORG GAME
  60. ;       RET
  61.  
  62.         ORG #6000
  63. begin
  64.         DISP #4040
  65.  
  66. IM2
  67.         PUSH IX,IY,HL,DE,BC,AF
  68.         EX AF,AF' ;'
  69.         EXX
  70.         PUSH HL,DE,BC,AF
  71.         LD A,(NUMPAGE)  ;Запоминаем номер текущ. стр.
  72.         LD (RST_PG+1),A
  73.  
  74.         LD A,PG_MUZ
  75.         CALL PAGE
  76.         CALL PLAY   ;проигрываем мелодию
  77.  
  78. RST_PG  LD A,0
  79.         CALL PAGE
  80. ;Выход из вторых прерываний
  81.         POP AF,BC,DE,HL
  82.         EX AF,AF' ;'
  83.         EXX
  84.         POP AF,BC,DE,HL,IY,IX
  85.         EI
  86.         RET
  87.  
  88. ;Начало работы интро
  89. INTRO
  90.  
  91. ;       CALL SETIM2
  92. ;       EI
  93. ;       LD A,PG_VIEW
  94. ;       CALL PAGE
  95. ;       LD HL,SCR
  96. ;       LD DE,#C000
  97. ;       LD BC,6912
  98. ;       LDIR
  99.  
  100.         DI
  101.         LD A,PG_MUZ
  102.         CALL PAGE
  103.         LD HL,MUSIC
  104.         CALL MUSINI
  105.  
  106.         LD A,PG_VIEW
  107.         CALL PAGE
  108.  
  109.         CALL SETIM2
  110.  
  111.         CALL FROMGAM
  112.  
  113.         LD HL,TITRES
  114.         CALL PRINTFX
  115.         JP TOGAME
  116.  
  117. ;Установка вектора IM2
  118. SETIM2
  119.         DI
  120.         LD HL,IMVEC ;адрес вектора прерываний
  121.         LD BC,256
  122.         LD D,H
  123.         LD E,B
  124.         LD (HL),IM2/256
  125.         LD A,H
  126.         LDIR
  127.         LD I,A
  128.         IM 2
  129.         EI
  130.         RET
  131.  
  132. ;Установка вектора IM1
  133. SETIM1
  134.         DI
  135.         LD IY,23610
  136.         LD A,63
  137.         LD I,A
  138.         IM 1
  139.         EI
  140.         RET
  141.  
  142. ;Печать текста с обработкой токенов
  143. PRINTFX
  144.         CALL PRTEXT
  145.         LD B,A
  146.         AND A
  147.         RET Z
  148.         DJNZ NFX2
  149.  
  150.         LD E,(HL)     ;новые координаты
  151.         INC HL
  152.         LD D,(HL)
  153. NFX1    INC HL
  154.         JR PRINTFX
  155.  
  156. NFX2    DJNZ NFX3
  157.         LD A,#0F      ;утолщенный
  158. NFX2_   LD (PRNMOD),A
  159.         JR PRINTFX
  160.  
  161. NFX3    DJNZ NFX4     ;нормальный
  162.         XOR A
  163.         JR NFX2_
  164.  
  165. NFX4    DJNZ NFX5
  166.         PUSH DE
  167.         LD E,(HL)     ;цветная линия
  168.                       ;E-атрибут
  169.         INC HL
  170.         LD D,(HL)     ;D-Y коорд.
  171.         PUSH HL
  172.         CALL LINE3
  173.         POP HL,DE
  174.         JR NFX1
  175.  
  176. NFX5    DJNZ NFX6    ;пауза
  177.         LD A,(HL)
  178.         CALL PAUSE
  179.         JR NFX1
  180.  
  181. NFX6    DJNZ NFX7    ;стирание экрана
  182.         LD A,(HL)    ;Y размер
  183.         LD (YSZ+1),A
  184.         LD C,A
  185.         INC HL
  186.         LD A,(HL)    ;X размер
  187.         LD (XSZ+1),A
  188.         LD B,A
  189.         INC HL
  190.         LD A,(HL)
  191.         LD (CSZ+1),A
  192.         INC HL
  193.         LD A,(HL)
  194.         LD (CSZ+2),A
  195.         PUSH DE,HL
  196.         CALL CHANX
  197.         CALL FILLATR
  198.         POP HL,DE
  199.         JR NFX1
  200.  
  201. NFX7    DJNZ NFX8    ;бордюр
  202.         LD A,(HL)
  203.         OUT (254),A
  204.         JR NFX1
  205.  
  206. NFX8    DJNZ NFX9
  207.         PUSH DE      ;ссылка на текст
  208.         LD E,(HL)    ;нужна для печати одинаковых строк
  209.         INC HL
  210.         LD D,(HL)
  211.         INC HL
  212.         EX DE,HL
  213.         LD B,D
  214.         LD C,E
  215.         POP DE
  216.         PUSH BC
  217.         CALL PRTEXT
  218.         POP HL
  219.         JR PRINTFX
  220.  
  221. NFX9    DJNZ NFX10   ;заполнение экрана атрибутом
  222.         CALL FILLATR
  223. NFX10   JR NFX1
  224.  
  225. ;Начало работы установок
  226. SETUPI
  227.         XOR A
  228.         LD (PRNMOD),A
  229.  
  230.         ;LD A,PG_VIEW
  231.         ;CALL PAGE
  232.  
  233.         CALL CHANX
  234.         CALL FILLATR
  235.  
  236.         LD DE,#0046
  237.         CALL LINE3
  238.  
  239.         LD DE,#0B43
  240.         CALL LINE3
  241.  
  242.         CALL LINE2
  243.  
  244.         LD DE,#0000
  245.         LD HL,TEXT3
  246.         CALL PRTEXT
  247.  
  248.         LD DE,#100B   ;D-X pix, E-Y znak
  249.         LD HL,TEXT0
  250.         CALL PRTEXT
  251.  
  252.         LD DE,#3C00
  253.         LD HL,TEXT1
  254.         CALL PRTEXT
  255.  
  256. REPRINT
  257.         CALL SET_TXT
  258.         LD DE,#B301
  259.         LD HL,TEXT2
  260.         CALL PRTEXT
  261.  
  262. ;Опрос клавиш
  263. KEYLP   HALT
  264.         LD BC,#BFFE
  265.         IN A,(C)
  266.         BIT 0,A
  267.         JR Z,ENTER
  268.  
  269.         LD B,#FE    ;CS
  270.         IN A,(C)
  271.         BIT 0,A
  272.         JR NZ,KEYLP2
  273.  
  274.         LD B,#EF
  275.         IN A,(C)
  276.         BIT 4,A
  277.         JP Z,DOWN
  278.  
  279.         BIT 3,A
  280.         JP Z,UP
  281.  
  282.         BIT 2,A
  283.         JP Z,RIGHT
  284.  
  285.         LD B,#F7
  286.         IN A,(C)
  287.         BIT 4,A
  288.         JR Z,LEFT
  289.  
  290. KEYLP2  LD A,KDEL
  291.         LD (PRKEY+1),A
  292.         JR KEYLP
  293.  
  294. ;Проверка на автоповтор
  295. PRKEY   LD A,KDEL
  296.         DEC A
  297.         RET Z        ;задержка кончилась
  298.         LD (PRKEY+1),A
  299.         CP KDEL-1
  300.         RET Z        ;нажали первый раз
  301.         POP BC       ;для корректировки SP
  302.         JR KEYLP
  303.  
  304. ENTER   LD A,(NUMLINE)
  305.         CP QVALUE
  306.         JP Z,SAVE_SETUP
  307. ENT_MOD JR C,RIGHT
  308.  
  309.         CALL FROMGAM ;Чтобы установки
  310.                      ;остались прежними
  311.  
  312. TOGAME
  313.         HALT
  314.         LD BC,#BFFE
  315.         IN A,(C)
  316.         BIT 0,A
  317.         JR Z,TOGAME
  318.  
  319.         LD A,PG_VIEW
  320.         CALL PAGE
  321.         CALL CHANX
  322.  
  323.         CALL SETIM1
  324.  
  325.         LD A,PG_MUZ
  326.         CALL PAGE
  327.         CALL MUTE
  328.  
  329. ;Корректируем игру
  330. ;в соответствии с установками
  331.         LD HL,SETUP+1
  332.         LD DE,4
  333.         LD A,(HL)
  334.         DEC A
  335.         CPL
  336.         LD (MOUSE),A ;255 - мышь есть, 0 - нет
  337.  
  338.         ADD HL,DE
  339.         LD A,(HL)
  340.         DEC A
  341.         JR Z,$+4
  342.         LD A,201  ;RET  нет колеса
  343.         LD (ROLL),A
  344.  
  345.         ADD HL,DE
  346.         LD A,(HL)
  347.         LD (SCANTYP),A
  348.         ADD HL,DE
  349.         ADD HL,DE
  350.  
  351.         LD A,(HL)
  352.         LD (MSPEED),A
  353.         ADD HL,DE
  354.  
  355.         LD A,(HL)
  356.         XOR 1
  357.         LD (MUSON),A
  358.  
  359.         LD A,PG_MAP
  360.         CALL PAGE
  361.         ADD HL,DE
  362.         LD A,(HL)
  363.         DEC A
  364.         JR Z,$+4
  365.         LD A,201  ;RET  нет звуков
  366.         LD (SOUND),A
  367.  
  368.         JP GAME   ;Стартуем игру!
  369.  
  370. LEFT
  371.         CALL PRKEY
  372.         LD C,-1
  373.         CALL CH_VALUE
  374. ;       CALL LINE
  375.         JP REPRINT
  376.  
  377. RIGHT
  378.         CALL PRKEY
  379.         LD C,1
  380.         CALL CH_VALUE
  381. ;       CALL LINE
  382.         JP REPRINT
  383.  
  384. UP
  385.         LD BC,#0101
  386.         JR DOWN+3
  387.  
  388. DOWN
  389.         LD BC,#FFFF
  390.         LD DE,(COORD)
  391.         CALL PRKEY
  392.         LD HL,(NUMLINE)
  393.         LD A,H
  394.         SUB B
  395.         LD H,A
  396.         LD A,L
  397.         SUB C
  398.         LD L,A
  399.         CP #FF
  400.         JP Z,KEYLP
  401.         CP QLINE
  402.         JP Z,KEYLP
  403.         LD (NUMLINE),HL
  404. ;       CALL SCR_ADR2
  405.         EX DE,HL
  406.         CALL LINE2+3
  407.         CALL LINE2
  408.         JP KEYLP
  409.  
  410. CH_VALUE
  411.         LD A,(NUMLINE)
  412.         LD B,A
  413.         ADD A,A
  414.         ADD A,A
  415.         LD HL,SETUP
  416.         LD E,A
  417.         LD D,0
  418.         ADD HL,DE
  419.         LD A,(HL)
  420.         INC HL
  421.         CP #FF
  422.         RET Z     ;не меняем значения
  423.         AND A
  424.         JR Z,VAL_01  ;меняем значение тригерно
  425.         DEC A
  426.         JR NZ,VAL_02
  427.  
  428. ;Меняем значение в диапазоне (MIN-MAX)
  429.         PUSH HL
  430.         LD A,(HL)
  431.         INC HL
  432.         LD E,(HL) ;MIN
  433.         INC HL
  434.         LD D,(HL) ;MAX
  435.         INC D
  436.         POP HL
  437.         ADD A,C
  438.         BIT 7,A
  439.         JR Z,POL
  440.         CP E
  441.         JR NC,POL1
  442.         LD A,RIGHT-2-ENT_MOD
  443.         LD (ENT_MOD+1),A
  444.         RET
  445.  
  446. POL     CP D
  447.         JR C,POL1
  448.         LD A,LEFT-2-ENT_MOD
  449.         LD (ENT_MOD+1),A
  450.         RET
  451. POL1    LD (HL),A
  452.         RET
  453.  
  454. ;Простой тригер
  455. VAL_01  LD A,(HL)
  456.         XOR 1
  457.         LD (HL),A
  458.         RET
  459.  
  460. ;Тригер меняется с кем-то
  461. VAL_02  LD A,(HL)
  462.         XOR 1
  463.         LD (HL),A
  464.         INC HL
  465.         LD E,(HL)
  466.         INC HL
  467.         LD D,(HL)
  468.         EX DE,HL
  469.         LD A,(HL)
  470.         XOR 1
  471.         LD (HL),A
  472.         RET
  473.  
  474. ;Переносим настройки из сетапа в текст
  475. SET_TXT
  476.         LD HL,TEXT2
  477.         LD DE,3
  478.         LD BC,SETUP
  479.         LD A,QVALUE
  480.  
  481. CHV_LP  EX AF,AF'
  482.        LD A,(BC)
  483.        CP 255
  484.        JR Z,CHV_LP2
  485.        DEC A
  486.        JR Z,NZBIT
  487.  
  488. ;Обычный тригер
  489.  
  490.        INC BC
  491.        LD A,(BC)
  492.        DEC BC
  493.        PUSH HL
  494.        INC HL
  495.        ADD A,192   ;Галочка/крестик
  496.        LD (HL),A
  497.        POP HL
  498. CHV_LP2 ADD HL,DE
  499.        INC BC,BC,BC,BC
  500.        EX AF,AF'
  501.         DEC A
  502.         JR NZ,CHV_LP
  503.         RET
  504.  
  505. ;Переменная в диапазоне
  506. NZBIT   PUSH HL
  507. ;       INC HL
  508.         INC BC
  509.         LD A,(BC)
  510.         DEC BC
  511.         AND A
  512.         JR Z,ZERO
  513.         BIT 7,A
  514.         JR Z,POLOJIT
  515.         NEG
  516.         LD (HL),"-"
  517.         JR POLOJIT+2
  518.  
  519. POLOJIT LD (HL),"+"
  520.         INC HL
  521.         ADD A,48
  522.         LD (HL),A
  523.         JR CHV_LP2-1
  524.  
  525. ZERO    LD (HL),32
  526.         INC HL
  527.         LD (HL),"0"
  528.         JR CHV_LP2-1
  529.  
  530. FILLATR
  531.         LD HL,#D800
  532.         LD DE,#D801
  533.         LD BC,767
  534.         LD (HL),7
  535.         LDIR
  536.         RET
  537.  
  538. ;Пауза
  539. PAUSE
  540.         LD B,A
  541. ANY_KEY HALT
  542.         XOR A
  543.         IN A,(#FE)
  544.         CPL
  545.         AND 31
  546.         JR NZ,KEY_PRS ;что-то нажали
  547.         DJNZ ANY_KEY
  548.         RET
  549.  
  550. PAUSE2
  551.         LD B,0
  552. ANYK    HALT
  553.         XOR A
  554.         IN A,(#FE)
  555.         CPL
  556.         AND 31
  557.         RET NZ    ;что-то нажали
  558.         DJNZ ANYK
  559.         RET
  560.  
  561. KEY_PRS POP BC
  562.         LD A,#BF
  563.         IN A,(#FE)
  564.         BIT 0,A
  565.         JP Z,SETUPI ;Enter
  566.         LD A,#7F
  567.         IN A,(#FE)
  568.         BIT 0,A
  569.         JP Z,TOGAME ;Пробел
  570.         PUSH BC
  571.         RET
  572.        
  573. ;E-атрибут
  574. ;D-Y
  575. LINE3
  576.         LD B,32
  577.         LD H,0
  578.         LD L,D
  579. LN3     CALL ATR_ADR
  580.         LD (HL),E
  581.         INC L
  582.         DJNZ $-2
  583.         RET
  584.  
  585. ;Инвертированная линия атрибутами
  586. LINE2
  587.         LD HL,(COORD) ;H-X,L-Y
  588.         CALL ATR_ADR
  589.         LD A,(HL)
  590.         LD C,A
  591.         AND 7
  592.         ADD A,A
  593.         ADD A,A
  594.         ADD A,A
  595.         LD E,A
  596.         LD A,C
  597.         AND 56
  598.         RRA
  599.         RRA
  600.         RRA
  601.         OR E
  602.         LD B,LEN
  603.         LD (HL),A
  604.         INC L
  605.         DJNZ $-2
  606.         RET
  607.  
  608. ;Печать текста пропорциональным шрифтом
  609. ;by SAM style, модификация для маски by axor
  610. ;IN DE-координаты (D-X пикс., E-Y знакоместа)
  611. ;   HL-текст
  612. ;1-12-токены (они не обязательны!)
  613. PRTEXT
  614.         PUSH DE
  615.         LD A,(HL)
  616.         AND A
  617.         JR NZ,PRT0
  618. PREX    POP DE
  619.         RET
  620. PRT0    INC HL
  621.         CP 13
  622.         JR C,PREX
  623.         JR NZ,PRT
  624.         POP DE
  625.         INC E
  626.         JR PRTEXT
  627. PRT     CALL print_symbol
  628.         JR PRTEXT+1
  629.  
  630. print_symbol
  631.         PUSH HL
  632.         PUSH DE
  633.         LD L,A
  634.         LD H,0
  635.         ADD HL,HL
  636.         ADD HL,HL
  637.         ADD HL,HL
  638.         LD BC,font-256  ; font.addr
  639.         ADD HL,BC
  640.  
  641.         LD B,(HL)       ;ширина буковки
  642.         LD C,B
  643.         LD A,255
  644.         SRL A
  645.         DJNZ $-2
  646.         LD B,C
  647.         LD (MASK+2),A   ;Маска буковки
  648.  
  649.         PUSH BC
  650.  
  651.         LD A,D          ;величина сдвига
  652.         AND 7
  653.         LD (sdwig+1),A
  654.  
  655.         XOR D           ;вычисление адреса на экране (de)
  656.         RRA
  657.         RRA
  658.         RRA
  659.         AND #1F
  660.         LD B,A
  661.         LD C,E
  662.         LD A,C
  663.         RRCA
  664.         RRCA
  665.         RRCA
  666.         AND #E0
  667.         OR B
  668.         LD E,A
  669.         LD A,C
  670.         AND #18
  671.         OR #C0
  672.         LD D,A
  673. ;---
  674.         INC D
  675.         INC HL
  676.  
  677.         LD A,7   ;высота буковки
  678. prn_1   EXA
  679.  
  680.         LD A,(HL)
  681. PRNMOD  RRCA    ;#0F/00 утолщение
  682.         OR (HL)
  683.         LD B,A
  684.  
  685.         PUSH HL
  686. MASK    LD HL,#00FF
  687.         LD C,0
  688. sdwig   LD A,0
  689.         AND A
  690.         JR Z,prn_3
  691. prn_2   SRL B
  692.         RR C
  693.         SCF
  694.         RR H
  695.         RR L
  696.         DEC A
  697.         JR NZ,prn_2
  698. prn_3   LD A,(DE)
  699.         AND H
  700.         OR B
  701.         LD (DE),A
  702.         INC E
  703.         LD A,(DE)
  704.         AND L
  705.         OR C
  706.         LD (DE),A
  707.         POP HL
  708.         DEC E
  709.         INC D
  710.         INC HL
  711.         EXA
  712.         DEC A
  713.         JR NZ,prn_1
  714.         POP BC
  715.         POP DE
  716.         POP HL
  717.         LD A,B    ;изменяем X (D) на ширину печати (B)
  718.         ADD A,D
  719.         LD D,A
  720.         RET
  721.  
  722. ;Координаты в знакоместах преобразует
  723. ;в реальный адрес экрана
  724. ;IN D-X, E-Y
  725. ;
  726. SCR_ADR LD A,E
  727.         AND 7
  728.         RRCA
  729.         RRCA
  730.         RRCA
  731.         ADD A,D
  732.         LD D,E
  733.         LD E,A
  734.         LD A,D
  735.         AND #18
  736.         OR #C0 ;#C0/#40
  737.         LD D,A
  738.         RET
  739.  
  740. SCR_ADR2
  741.         LD A,E
  742.         AND #18
  743.         ADD A,#C0
  744.         LD H,A
  745.         LD A,E
  746.         AND 7
  747.         RRCA
  748.         RRCA
  749.         RRCA
  750.         ADD A,D
  751.         LD L,A
  752.         RET
  753.  
  754. ;Из координат адрес в атрибутах
  755. ;H-X, L-Y
  756. ATR_ADR
  757.         LD A,H
  758.         ADD HL,HL
  759.         ADD HL,HL
  760.         ADD HL,HL
  761.         LD H,#36 ;#36, если экран с #C000
  762.                  ;#16, если с #4000
  763.         ADD HL,HL
  764.         ADD HL,HL
  765.         ADD A,L
  766.         LD L,A
  767.         RET
  768.  
  769. ;Чанковый метод стирания окна. 17 фаз
  770. ;DE - координаты, D-X, E-Y
  771. ;HL- адрес чанки 8*8 пикселей
  772. ;BC - размер окна, B - по Y, C - по X
  773. CHANX
  774.         LD A,17   ;кол-во фаз
  775.         LD HL,CHANKS
  776. LOOPch
  777.         PUSH AF
  778.  
  779. YSZ     LD B,24  ;Y-размер
  780. CSZ     LD DE,#0 ;координаты
  781. CHNK1
  782.         PUSH BC
  783.         PUSH DE
  784.         PUSH HL
  785.         CALL SCR_ADR
  786.  
  787.         LD B,(HL)
  788.         INC HL
  789.         LD C,(HL)
  790.         INC HL
  791.         LD A,(HL)
  792.         INC HL
  793.         LD L,(HL)
  794.         LD H,A
  795.  
  796. XSZ     LD A,32    ;X-размер
  797. CHN1
  798.         EX AF,AF' ;'
  799.         PUSH DE
  800.  
  801.         LD A,(DE)
  802.         AND B
  803.         LD (DE),A
  804.         INC D
  805.  
  806.         LD A,(DE)
  807.         AND C
  808.         LD (DE),A
  809.         INC D
  810.  
  811.         LD A,(DE)
  812.         AND H
  813.         LD (DE),A
  814.         INC D
  815.  
  816.         LD A,(DE)
  817.         AND L
  818.         LD (DE),A
  819.         INC D
  820. ;
  821.         LD A,(DE)
  822.         AND B
  823.         LD (DE),A
  824.         INC D
  825.  
  826.         LD A,(DE)
  827.         AND C
  828.         LD (DE),A
  829.         INC D
  830.  
  831.         LD A,(DE)
  832.         AND H
  833.         LD (DE),A
  834.         INC D
  835.  
  836.         LD A,(DE)
  837.         AND L
  838.         LD (DE),A
  839. ;
  840.         POP DE
  841.         EX AF,AF' ;'
  842.         INC E
  843.         DEC A
  844.         JR NZ,CHN1
  845.  
  846.         POP HL
  847.         POP DE
  848.         POP BC
  849.         INC E
  850.         DJNZ CHNK1
  851.  
  852.         INC HL,HL,HL,HL
  853.         POP AF
  854.         DEC A
  855.  
  856.         PUSH AF,HL
  857.  
  858.         BIT 2,A
  859.         CALL Z,FADE_OUT
  860.  
  861.         POP HL,AF
  862.  
  863.         HALT
  864.         HALT
  865.  
  866.         JR NZ,LOOPch
  867.  
  868. FADE_OUT
  869.         LD H,#5B+#80
  870.         LD L,0
  871. FOUT1   LD A,(HL)
  872.         AND %00111111
  873.         SRL A
  874.         LD (HL),A
  875.         DEC HL
  876.         BIT 3,H
  877.         JR NZ,FOUT1
  878.         RET
  879.  
  880. ;Копирование установок из игры
  881. ;для работы с ними
  882. ;HL - откуда копировать
  883. FROMGAM
  884.         LD HL,SET
  885.         LD A,QVALUE   ;кол-во переменных
  886.         LD DE,SETUP+1
  887. FRG1    LDI
  888.         INC DE
  889.         INC DE
  890.         INC DE
  891.         DEC A
  892.         JR NZ,FRG1
  893.         RET
  894.  
  895. ;Копирование установок в игру
  896. ;DE - куда копировать
  897. TOGAM
  898.         LD A,QVALUE   ;кол-во переменных
  899.         LD HL,SETUP+1
  900. TOG1    LDI
  901.         INC HL
  902.         INC HL
  903.         INC HL
  904.         DEC A
  905.         JR NZ,TOG1
  906.         RET
  907.  
  908. ;Работа с диском
  909. TRDOS
  910.         EX AF,AF' ;'
  911.         XOR A
  912.         LD (23823),A  ;Обнуляем код
  913.         LD (23824),A  ;ошибки TR-DOS
  914.         LD (23570),A  ;Блокируем поток
  915.         EX AF,AF' ;'
  916.         PUSH HL
  917.         LD HL,(23613)
  918.         LD (DOS_ERR+1),HL
  919.         LD HL,DOS_ERR ;Устанавливаем
  920.         EX (SP),HL    ;свой обработчик
  921.         LD (23613),SP
  922.         JP #3D13
  923. DOS_ERR LD HL,0
  924.         LD (23613),HL
  925.         LD A,6        ;Восстанавливаем
  926.         LD (23570),A  ;поток
  927.         LD A,(23838)
  928.         LD B,A
  929.         LD A,(23823)  ;Проверяем
  930.         AND A         ;была ли ошибка
  931.         RET Z
  932.         CP B
  933.         RET Z
  934.         INC A
  935.         RET Z
  936. ERR     LD B,10
  937.         LD A,2
  938.         OUT (254),A
  939.         HALT
  940.         DJNZ $-1
  941.         XOR A
  942.         OUT (254),A
  943.         RET
  944.  
  945. ERROR
  946.         CALL ERR
  947.         JP TOGAME
  948.  
  949. ;Сохранение установок
  950. SAVE_SETUP
  951.  
  952.         CALL SETIM1
  953.         LD A,PG_MUZ
  954.         CALL PAGE
  955.         CALL MUTE    ;выключаем музыку
  956.  
  957. ;Ищем файл
  958. ;       CALL FILE
  959.  
  960.         LD A,9
  961.         LD (23814),A
  962.  
  963.         LD C,#18
  964.         CALL TRDOS
  965.         JR NZ,ERROR
  966.         LD C,10
  967.         CALL TRDOS
  968.         LD A,C
  969.         INC C
  970.         JR Z,ERROR ;нет файла!
  971. ;Высчитываем адрес файла (сектор,дорожка)
  972.         LD C,8
  973.         CALL TRDOS
  974.  
  975. ;Читаем сектор
  976.         LD DE,(#5CDD+14)
  977.         LD BC,#0105
  978.         LD HL,BUFER
  979.         PUSH DE,HL
  980.         CALL TRDOS
  981.  
  982. ;Переносим установки
  983.         LD DE,BUFER+14
  984.         CALL TOGAM
  985.  
  986. ;Сохраняем сектор
  987.         POP HL,DE
  988.         LD BC,#0106
  989.         CALL TRDOS
  990.         JP TOGAME
  991.  
  992. ;FILE   LD HL,FILENAM
  993. ;       LD DE,#5CDD
  994. ;       LD BC,9
  995. ;       LD A,C
  996. ;       LD (23814),A
  997. ;       LDIR
  998. ;       RET
  999.  
  1000. ;FILENAM DB "VERA   B" ;Имя файла для сохранения
  1001.            ;123456789
  1002. ;Драйвер переключения страниц для 128-го
  1003. ;A-номер нужной страницы
  1004. PAGE
  1005.         PUSH BC
  1006.         LD (NUMPAGE),A
  1007. PG_     OR 16+8
  1008.         LD BC,#7FFD
  1009.         OUT (C),A
  1010.         POP BC
  1011.         RET
  1012. NUMPAGE DB 0
  1013.  
  1014. CHANKS  DW #FF77,#FFFF
  1015.         DW #FF77,#FFDD
  1016.         DW #FF77,#FF55
  1017.         DW #FF55,#FF55
  1018.         DW #FF55,#EE55
  1019.         DW #BB55,#EE55
  1020.         DW #BB55,#AA55
  1021.         DW #AA55,#AA55
  1022.         DW #AA55,#8855
  1023.         DW #2255,#0055
  1024.         DW #0055,#0055
  1025.         DW #0055,#0044
  1026.         DW #0011,#0044
  1027.         DW #0011,#0000
  1028.         DW #0010,#0000
  1029.         DW #0000,#0000
  1030.         DW #0000,#0000
  1031.  
  1032. TR0     DB "В е р а",0
  1033.  
  1034. TR1     DB "    Perspective",0
  1035.  
  1036. TR1_    DB "представляет игру",0
  1037.  
  1038. TR2     DB "    .pO,",0
  1039.  
  1040. TR3     DB "   iP  7p",0
  1041.  
  1042. TR4     DB "  .P    9;",0
  1043.  
  1044. TR5     DB "  d'   ,p",0
  1045.  
  1046. TR6     DB " i;  d6",0
  1047.  
  1048. TR7     DB ".D  89pPo",0
  1049.  
  1050. TR8     DB "iP 6'   7P",0
  1051.  
  1052. TR9     DB "d:      d'",0
  1053.  
  1054. TR10    DB "8;     8'",0
  1055.  
  1056. TR11    DB "Qp   oP",0
  1057.  
  1058. TR12    DB "  O:q6",0
  1059.  
  1060. TR14    DB "Художник",0
  1061.  
  1062. TR15    DB "Композиторы:",0
  1063.  
  1064. TR16    DB "Программисты:",0
  1065.  
  1066. TR17    DB "Авторы сценария:",0
  1067.  
  1068. TITRES
  1069. ;       DB BORDER,1
  1070.         DB PAUS,0
  1071.         DB PAUS,0
  1072.         DB PAUS,0
  1073.  
  1074.         DB CLS,24,32,0,0 ;код,Yразмер,Xразмер,Y,X
  1075.  
  1076.         DB PAUS,100
  1077.         DB BOLD
  1078.         DB NCRD,10,83
  1079.         DB LINK
  1080.         DW TR1
  1081.         DB NORM
  1082.         DB PAUS,4
  1083.         DB NCRD,10,83
  1084.         DB LINK
  1085.         DW TR1
  1086.  
  1087.         DB PAUS,200
  1088.  
  1089.         DB BOLD
  1090.         DB NCRD,11,83
  1091.         DB LINK
  1092.         DW TR1_
  1093.         DB NORM
  1094.         DB PAUS,4
  1095.         DB NCRD,11,83
  1096.         DB LINK
  1097.         DW TR1_
  1098.  
  1099.         DB PAUS,150
  1100.         DB CLS,24,32,0,0 ;код,Yразмер,Xразмер,Y,X
  1101.  
  1102.         DB BOLD
  1103.         DB NCRD,5,105
  1104.         DB LINK
  1105.         DW TR2
  1106.  
  1107.         DB NORM
  1108.         DB PAUS,4
  1109.         DB LINK
  1110.         DW TR2
  1111.  
  1112.         DB BOLD,PAUS,4
  1113.         DB NCRD,6,105
  1114.         DB LINK
  1115.         DW TR3
  1116.  
  1117.         DB NORM
  1118.         DB PAUS,4
  1119.         DB LINK
  1120.         DW TR3
  1121.  
  1122.         DB BOLD,PAUS,4
  1123.         DB NCRD,7,105
  1124.         DB LINK
  1125.         DW TR4
  1126.  
  1127.         DB NORM
  1128.         DB PAUS,4
  1129.         DB LINK
  1130.         DW TR4
  1131.  
  1132.         DB BOLD,PAUS,4
  1133.         DB NCRD,8,105
  1134.         DB LINK
  1135.         DW TR5
  1136.  
  1137.         DB NORM
  1138.         DB PAUS,4
  1139.         DB LINK
  1140.         DW TR5
  1141.  
  1142.         DB BOLD,PAUS,4
  1143.         DB NCRD,9,105
  1144.         DB LINK
  1145.         DW TR6
  1146.  
  1147.         DB NORM
  1148.         DB PAUS,4
  1149.         DB LINK
  1150.         DW TR6
  1151.  
  1152.         DB BOLD,PAUS,4
  1153.         DB NCRD,10,105
  1154.         DB LINK
  1155.         DW TR7
  1156.  
  1157.         DB NORM
  1158.         DB PAUS,4
  1159.         DB LINK
  1160.         DW TR7
  1161.  
  1162.         DB BOLD,PAUS,4
  1163.         DB NCRD,11,105
  1164.         DB LINK
  1165.         DW TR8
  1166.  
  1167.         DB NORM
  1168.         DB PAUS,4
  1169.         DB LINK
  1170.         DW TR8
  1171.  
  1172.         DB BOLD,PAUS,4
  1173.         DB NCRD,12,105
  1174.         DB LINK
  1175.         DW TR9
  1176.  
  1177.         DB NORM
  1178.         DB PAUS,4
  1179.         DB LINK
  1180.         DW TR9
  1181.  
  1182.         DB BOLD,PAUS,4
  1183.         DB NCRD,13,105
  1184.         DB LINK
  1185.         DW TR10
  1186.  
  1187.         DB NORM
  1188.         DB PAUS,4
  1189.         DB LINK
  1190.         DW TR10
  1191.  
  1192.         DB BOLD,PAUS,4
  1193.         DB NCRD,14,105
  1194.         DB LINK
  1195.         DW TR11
  1196.  
  1197.         DB NORM
  1198.         DB PAUS,4
  1199.         DB LINK
  1200.         DW TR11
  1201.  
  1202.         DB BOLD,PAUS,4
  1203.         DB NCRD,15,105
  1204.         DB LINK
  1205.         DW TR12
  1206.  
  1207.         DB NORM
  1208.         DB PAUS,4
  1209.         DB LINK
  1210.         DW TR12
  1211.  
  1212.         DB LINE,64+7,16
  1213.         DB BOLD
  1214.         DB NCRD,16,107
  1215.         DB LINK
  1216.         DW TR0
  1217.  
  1218.         DB NORM
  1219.         DB PAUS,4
  1220.         DB LINK
  1221.         DW TR0
  1222.  
  1223.         DB PAUS,0
  1224.         DB PAUS,0
  1225.         DB CLS,24,32,0,0
  1226.  
  1227.         DB NCRD,5,68
  1228.         DB "Enter - игровые настройки",13
  1229.         DB "  Space - перейти в игру"
  1230.  
  1231.         DB PAUS,100
  1232.  
  1233.         DB LINE,68,23 ;атрибутная полоса
  1234.         DB NCRD,23,83
  1235.         DB "www.vera.retropc.ru"
  1236.  
  1237.         DB PAUS,0
  1238.         DB CLS,24,32,0,0
  1239.  
  1240.         DB PAUS,50
  1241.  
  1242.         DB LINE,64+6,2
  1243.         DB LINE,64+6,5
  1244.         DB LINE,64+6,10
  1245.         DB LINE,64+6,16
  1246.         DB LINE,64+7,22
  1247.  
  1248.         DB BOLD
  1249.         DB NCRD,2,48
  1250.         DB LINK
  1251.         DW TR14
  1252.         DB PAUS,4
  1253.         DB NORM
  1254.         DB NCRD,2,48
  1255.         DB LINK
  1256.         DW TR14
  1257.  
  1258.         DB NCRD,3,72
  1259.         DB PAUS,30
  1260.         DB "Кирилл Каган (Surfin Bird)"
  1261.  
  1262.         DB PAUS,40
  1263.         DB BOLD
  1264.         DB NCRD,5,48
  1265.         DB LINK
  1266.         DW TR15
  1267.         DB NORM
  1268.         DB PAUS,4
  1269.         DB NCRD,5,48
  1270.         DB LINK
  1271.         DW TR15
  1272.  
  1273.         DB NCRD,6,72
  1274.         DB PAUS,30
  1275.         DB "Дмитрий Жемков (C-jeff)",13
  1276.         DB PAUS,30
  1277.         DB "Андрей Пеунов (Bedjamen)",13
  1278.         DB PAUS,30
  1279.         DB "n1k-o"
  1280.  
  1281.         DB PAUS,40
  1282.         DB BOLD
  1283.         DB NCRD,10,48
  1284.         DB LINK
  1285.         DW TR16
  1286.         DB NORM
  1287.         DB PAUS,4
  1288.         DB NCRD,10,48
  1289.         DB LINK
  1290.         DW TR16
  1291.  
  1292.         DB NCRD,11,72
  1293.         DB PAUS,30
  1294.         DB "Александр Шушков (Axor)",13
  1295.         DB PAUS,30
  1296.         DB "Александр Синяков (SAM style)",13
  1297.         DB PAUS,30
  1298.         DB "Сергей Бульба",13
  1299.         DB PAUS,30
  1300.         DB "Дмитрий Быстров (Alone Coder)"
  1301.  
  1302.         DB PAUS,40
  1303.         DB BOLD
  1304.         DB NCRD,16,48
  1305.         DB LINK
  1306.         DW TR17
  1307.         DB NORM
  1308.         DB PAUS,4
  1309.         DB NCRD,16,48
  1310.         DB LINK
  1311.         DW TR17
  1312.  
  1313.         DB NCRD,17,72
  1314.         DB PAUS,30
  1315.         DB "Владимир Сивов",13
  1316.         DB PAUS,30
  1317.         DB "Александр Разумов"
  1318.  
  1319.         DB PAUS,40
  1320.         DB BOLD
  1321.         DB NCRD,22,70
  1322.         DB LINK
  1323.         DW TR18
  1324.         DB NORM
  1325.         DB PAUS,4
  1326.         DB NCRD,22,70
  1327.         DB LINK
  1328.         DW TR18
  1329.  
  1330.         DB PAUS,0
  1331.         DB PAUS,0
  1332.         DB PAUS,0
  1333.  
  1334.         DB CLS,24,32,0,0
  1335.  
  1336.         DB PAUS,100
  1337.         DB NCRD,10,97
  1338.         DB LINE,64+7,10
  1339.         DB "Верьте в добро"
  1340.         DB PAUS,0
  1341.         DB PAUS,0
  1342.         DB CLS,24,32,0,0
  1343.         DB PAUS,0
  1344.         DB 0
  1345.  
  1346. TEXT0   DB "                  Клавиши в игре:",13
  1347.         DB "1 - вкл/выкл музыки",13
  1348.         DB "2 - вкл/выкл звуков",13
  1349.         DB "3 - вкл/выкл мыши",13
  1350.         DB "CS/SS/правая клавиша мыши - выкладывание вещи",13
  1351.         DB "C - центровка героя на экране",13
  1352.         DB "CS+3, CS+4 - листание вещей в мешке",13
  1353.         DB "Колесо мыши (ZXMC) - листание вещей в мешке",13
  1354. ;       DB "Клавиши управления курсором + М - скролл карты",13
  1355.         DB "Удержание \"Fire\" + направление - скролл карты"
  1356.         DB 13
  1357. ;       DB "Enter/клик в окне диалога - продолжение общения",13
  1358.         DB "Enter/клик во время диалога - следующая реплика",13
  1359.         DB "CS+1 - пропустить диалог",13
  1360.         DB 13
  1361.         DB "             "
  1362. TR18    DB "(c) 2003-2008, Perspective",0
  1363.  
  1364. TEXT1   DB "      Игровые настройки",13
  1365.         DB "Кемпстон мышь",13
  1366.         DB "Колесо мыши",13
  1367.         DB "Sinclair-джойстик",13
  1368.         DB "Клавиатура (Q,A,O,P,Sp)",13
  1369.         DB "Ускорение курсора",13
  1370.         DB "Музыка",13
  1371.         DB "Звуки",13
  1372.         DB "Сохранить и выйти",13
  1373.         DB "Выйти без изменений",0
  1374.  
  1375. TEXT2   DB "  ",13
  1376.         DB "  ",13
  1377.         DB "  ",13
  1378.         DB "  ",13
  1379.         DB "  ",13
  1380.         DB "  ",13
  1381.         DB "  ",0
  1382.  
  1383. TEXT3   DB "v.1.02",0 ;Версия сборки игры
  1384.        
  1385. ;Установки
  1386. ;Формат: 1-й байт 0 - значит меняется значение только 0/1
  1387. ;                 1 - значит меняется в диапазоне
  1388. ;                    второй байт - мин. значение
  1389. ;                    третий байт - макс. значен.
  1390. ;                 2 - значит меняется местами с
  1391. ;                     тригером по адресу 3,4 байтов
  1392. ; если байт=255 - значений нет
  1393. ; Само значение во 2-м байте
  1394.  
  1395. SETUP
  1396.         DB 0,0,0,0    ;мышь
  1397.         DB 0,0,0,0    ;колесо
  1398. STJ     DB 2,0        ;синклер
  1399.         DW STK+1
  1400. STK     DB 2,0        ;клавиатура
  1401.         DW STJ+1
  1402.         DB 1,0,-4,4   ;ускорение курсора
  1403.         DB 0,0,0,0    ;музыка
  1404.         DB 0,0,0,0    ;звуки
  1405.         DB #FF,0,0,0
  1406.         DB #FF,0,0,0
  1407.  
  1408. NUMLINE DB 0     ;Номер пункта
  1409. COORD   DW #0701 ;Координаты вывода пункта
  1410.  
  1411. font    INCBIN "Fontix4.C"
  1412.  
  1413. ;SCR    INCBIN "C:VeraTitl.C"
  1414.  
  1415. IMVEC   EQU ($/256+1)*256;вектор вторых прерываний
  1416.  
  1417. BUFER   EQU IMVEC+257
  1418.  
  1419.         ENT
  1420. end
  1421.  
  1422.         ORG INTRO
  1423.  
  1424.         DISPLAY "LEN=",(font+1664)-IM2
  1425.         DISPLAY "Старт интро ",INTRO
  1426.         ;ORG BUFER
  1427.         savebin "intro.c",begin,end-begin
  1428.