┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                "ИНФОРКОМ" 121019, Москва, Г-19, а/я 16                ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                         В     Н О М Е Р Е :                           ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                                       ┤
│    ОТ РЕДАКЦИИ                                                   1    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    СПЕКТРУМ В ШКОЛЕ                   Ульянов А.М.               3    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    ПРОФЕССИОНАЛЬНЫЙ ПОДХОД                                            ┤
│    Определение базового адреса                                        ┤
│      релоцируемой программы           Сергей Рюмик               8    ┤
│    Автоматизация создания                                             ┤
│      релоцируемых программ   Дмитрий Козлов, Николай Шустов      9    ┤
│    Архивация, компрессия, сжатие      Сергей Симонович          16    ┤
│    О введении стардарта                                               ┤
│      на программы для ZX-Spectrum     SigN                      23    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    ВОЗВРАЩАЯСЬ К НАПЕЧАТАННОМУ                                        ┤
│    Загрузчик для часов                Сергей Сурков             25    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    ЧИТАТЕЛЬ - ЧИТАТЕЛЮ                                                ┤
│    Нестандартный                                                      ┤
│      загрузчик со счетчиком           Штурхолев С.И.            26    ┤
│    Полезные советы                    Александр Исаков          33    ┤
│    KEMPSTON-MOUSE                     М.Свечков, К.Мехедов      36    ┤
│    Несколько устройств                                                ┤
│      для Вашего "Спектрума"           Александр Минеев          40    ┤
│    Опыт работы с "BLAST"              Вячеслав Солдатов         41    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    ЭТЮДЫ                                                        42    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    МАЛЕНЬКИЕ ХИТРОСТИ                                                 ┤
│    Нюанс в использовании                                              ┤
│      команд переброски                IWN                       49    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    ФОРУМ                                                        50    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    ПЕРЕКРЕСТОК                                                        ┤
│      Adventure Games                                            56    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    РОЛЕВЫЕ ИГРЫ                                                       ┤
│    Система правил AD&D (продолжение)  Сергей Симонович          60    ┤
│    Проект RPG          (продолжение)  Сергей Симонович          69    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    СОВЕТЫ ЭКСПЕРТА                                                    ┤
│    SHADOWFIRE                         Андрей Латенков           72    ┤
│    DEFENDERS OF THE CROWN        Ю.Белевцев, А.Барышенко        76    ┤
│    MONTI-PLAYER SOCCER MANAGER        Александр Нероев          78    ┤
│    SORCERER LORD                      Александр Нероев          83    ┤
│    SOLDIER OF FORTUNE                 Рустам Сагитдинов         85    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    КОМПЬЮТЕРНАЯ НОВЕЛЛА                                               ┤
│    Мечи и магия (HERO QUEST)          Александр Нероев          87    ┤
│    ZOMBI                              Алексей Дубровин          90    ┤
│ ───────────────────────────────────────────────────────────────────── ┤
│    АВТОРСКАЯ ПРОГРАММА                                          92    ┤
│                                                                       ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 3 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │  ET e(n)=0: LET j(n)=0: LET l(n)= ┤
│                                 ┤ │  0: NEXT n                        ┤
│                                 ┤ │    55 FOR i=0 TO h                ┤
│                                 ┤ │    60 FOR n=1 TO c                ┤
│                                 ┤ │    65 LET x=(b(n)-a(n))/h*i+a(n)  ┤
│                                 ┤ │    66 LET y=(p(n)-o(n))/h*i+o(n)  ┤
│                                 ┤ │    67 LET x1=(d(n)-g(n))/h*i+g(n) ┤
└─────────────────────────────────┘ │    68 LET y1=(s(n)-r(n))/h*i+r(n) ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    70 PLOT x,y: DRAW (x1-x),(y1-y ┤
│    Сегодня мы  предлагаем матери-    )                                ┤
│ ал,  который может пригодиться на      72 PLOT f(n),e(n): DRAW (j(n)- ┤
│ уроках  информатики.  Он  поможет    f(n)),(l(n)-e(n))                ┤
│ при изучении  операторов  Бейсика      74 LET f(n)=x: LET j(n)=x1: LE ┤
│ PLOT  и DRAW.  Эта программа наг-    T e(n)=y: LET l(n)=y1            ┤
│ лядно продемонстрирует, как, нап-      90 NEXT n: PAUSE 10            ┤
│ ример,  буква "А", изображенная в     100 NEXT i                      ┤
│ виде отрезков прямых,  у  Вас  на     110 PAUSE 0: GO TO 50           ┤
│ глазах  превратится  в букву "Б".     400 LET z=0: LET q=0            ┤
│ Можно изображать и более  сложные     410 FOR n=1 TO c                ┤
│ рисунки   (см.  рисунки  в  конце     420 GO SUB 800: BORDER 0: LET a ┤
│ статьи),  тогда эффект "эволюции"    (n)=z: LET o(n)=q                ┤
│ выглядит более зрелищно. В общем,     430 GO SUB 800: BORDER 7: LET g ┤
│ даем слово нашему корреспонденту.    (n)=z: LET r(n)=q                ┤
│                                       440 PLOT a(n),o(n): DRAW g(n)-a ┤
│ (С) Ульянов А.М.,                    (n),r(n)-o(n)                    ┤
│             г.Великие Луки, 1995.     450 NEXT n                      ┤
│                                       455 CLS                         ┤
│    Предлагаю небольшую  программу     460 FOR n=1 TO c                ┤
│ для создания  динамически  меняю-     470 GO SUB 800: BORDER 0: LET b ┤
│ щихся рисунков.  Принцип - такой.    (n)=z: LET p(n)=q                ┤
│ Два разных изображения  составля-     480 GO SUB 800: BORDER 7: LET d ┤
│ ются из отрезков или точек (точку    (n)=z: LET s(n)=q                ┤
│ ведь тоже можно представить,  как     490 PLOT b(n),p(n): DRAW d(n)-b ┤
│ отрезок, у которого совпадают на-    (n),s(n)-p(n)                    ┤
│ чальная и  конечная  координаты).     500 NEXT n                      ┤
│ Затем  запускается программа и Вы     510 RETURN                      ┤
│ видите,  как   одно   изображение     800 IF INKEY$="6" THEN  LET z=z ┤
│ плавно "перетекает" в другое. Вот    -(z>0): GO TO 900                ┤
│ Бейсик-программа,  которая позво-     810 IF INKEY$="7" THEN  LET z=z ┤
│ лит задать два изображения и пос-    +(z<255): GO TO 900              ┤
│ мотреть процесс превращения одно-     820 IF INKEY$="9" THEN  LET q=q ┤
│ го  в  другое   (Бейсик-программа    -(q>0): GO TO 900                ┤
│ приводится   с  непринципиальными     830 IF INKEY$="8" THEN  LET q=q ┤
│ изменениями).                        +(q<175): GO TO 900              ┤
│                                       840 IF INKEY$="0" THEN  GO TO 1 ┤
│     1 BORDER 7: PAPER 7: INK 0: C    000                              ┤
│  LS : LET zz=0: LET qq=0              860 GO TO 800                   ┤
│     5 OVER 1                          900 PLOT z,q: PLOT zz,qq: PRINT ┤
│    10 INPUT "NUMBER of LINES: ";c      OVER 0;AT 0,2;"   ";AT 0,0;"x= ┤
│    12 DIM f(c): DIM e(c): DIM j(c    ";z;AT 0,18;"   ";AT 0,16;"y=";q ┤
│  ): DIM l(c)                          910 LET zz=z: LET qq=q          ┤
│    15 DIM a(c): DIM b(c): DIM g(c     920 GO TO 800                   ┤
│  ): DIM d(c)                         1000 FOR v=1 TO 20: NEXT v: RETU ┤
│    17 DIM o(c): DIM p(c): DIM r(c    RN                               ┤
│  ): DIM s(c)                                                          ┤
│    19 GO SUB 400                       После запуска программы в  от- ┤
│    50 CLS : INPUT "STEP: ";h        вет  на  запрос "NUMBER OF LINES" ┤
│    53 FOR n=1 TO c: LET f(n)=0: L   введите количество  отрезков,  из ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 4 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                  С П Е К Т Р У М     В     Ш К О Л Е                  ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ которых Вы будете строить изобра-      Строка 10 - ввод числа отобра- ┤
│ жения (обычно 3-10).  После ввода   жаемых отрезков.                  ┤
│ экран  очистится.  Попробуйте те-      12-17 -  Создается  место  для ┤
│ перь понажимать клавиши  управле-   массивов координат точек отрезков ┤
│ ния   SINCLAIR-джойстиком   ("6"-   и ряда промежуточных изображений. ┤
│ "9"). Вы увидите точечный курсор,      19 - в этой строке выполняется ┤
│ который  будет задавать начальную   подпрограмма GO SUB 400,  которая ┤
│ координату отрезка. Вверху экрана   задает начальное и конечное изоб- ┤
│ отображаются  текущие  координаты   ражения.                          ┤
│ курсора.  Установите курсор в же-      50 -  ввод числа промежуточных ┤
│ лаемое место и нажмите "0".  Бор-   изображений. После   того,    как ┤
│ дюр станет черным - это будет на-   исходные изображения будут заданы ┤
│ чало   отрезка.  Теперь  отметьте   и отработаны, программу можно ос- ┤
│ курсором конец  отрезка  и  опять   тановить. А  чтобы  при следующем ┤
│ нажмите "0" - отрезок появится на   запуске не повторять утомительный ┤
│ экране. Для получения ломаной ли-   процесс ввода изображений,  можно ┤
│ нии  нажмите  "0" еще раз - тогда   запустить программу именно с этой ┤
│ начало следующего отрезка  совпа-   строки: GO TO 50.                 ┤
│ дет  с концом предыдущего.  Когда      55-100 -  эта часть программы, ┤
│ будет  исчерпано  заданное  число   непосредственно создающая  преоб- ┤
│ отрезков,  экран опять очистится.   разование изображений.            ┤
│ Теперь Вы должны  аналогично  за-      Строка 110  зацикливает  прог- ┤
│ дать второй рисунок.  После того,   рамму - Вы можете еще раз посмот- ┤
│ как оба рисунка будут заданы, эк-   реть эффект  преобразования с но- ┤
│ ран  вновь  очистится  и появится   вым значением промежуточных изоб- ┤
│ новый запрос "STEP" - надо ввести   ражений STEP.                     ┤
│ число (10-20) промежуточных изоб-      400-510 -  подпрограмма  ввода ┤
│ ражений, которые будут рассчитаны   изображений. Содержит  две части: ┤
│ программой  при  переходе  от на-   410-450 - ввод  первого  рисунка; ┤
│ чального  рисунка  к   конечному.   460-500 - ввод второго рисунка.   ┤
│ Нажмите ENTER  и  Вы увидите про-      800-1000 - подпрограмма опроса ┤
│ цесс эволюции одного  изображения   клавиш SINCLAIR-джойстика.        ┤
│ в другое.                                                             ┤
│    Назначение некоторых  перемен-                                     ┤
│ ных в программе. С - число отрез-        Комментарий ИНФОРКОМА.       ┤
│ ков,  из которых строятся фигуры.                                     ┤
│ При построении фигур переменная z      Как и любая  Бейсик-программа, ┤
│ определяет  координату курсора по   в которой происходят многочислен- ┤
│ горизонтали, а q - по вертикали.    ные вычисления,  да  еще  графика ┤
│    a(n) -  координата  Х   начала   при  помощи PLOT-DRAW,  эта прог- ┤
│ n-ного отрезка 1-й фигуры;          рамма  также  имеет  сравнительно ┤
│    o(n) -  координата  Y   начала   низкое быстродействие. Применение ┤
│ n-ного отрезка 1-й фигуры;          компилятора "TOBOS  FP"  позволит ┤
│    g(n) -  координата   Х   конца   значительно  улучшить  скоростные ┤
│ n-ного отрезка 1-й фигуры;          характеристики  программы.  После ┤
│    r(n) -  координата   Y   конца   компиляции Вы убедитесь,  что те- ┤
│ n-ного отрезка 1-й фигуры;          перь можно увеличить число проме- ┤
│    b(n), p(n), d(n), s(n) - то же   жуточных  изображений  с  5-10 до ┤
│ для второй фигуры соответственно.   30-60. При этом эволюция происхо- ┤
│    f(n), e(n), j(n) и l(n) - рас-   дит достаточно плавно и быстро.   ┤
│ четные координаты для  построения      Однако при практическом выпол- ┤
│ промежуточного изображения n-ного   нении    компиляции   приведенной ┤
│ отрезка.                            программы выявились  и  некоторые ┤
│    Назначение   некоторых   строк   недостатки.  Так, например, прак- ┤
│ программы.                          тически невозможно набрать  зара- ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 5 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                  С П Е К Т Р У М     В     Ш К О Л Е                  ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ нее  заданную  фигуру без ошибок,    : LET e(n+1)=y: LET l(n+1)=y1    ┤
│ при ошибке же приходится останав-      90 NEXT n: PAUSE 10: IF i=0 TH ┤
│ ливать программу и повторять весь    EN  PRINT #0;"        Press any  ┤
│ процесс сначала.  Поэтому предла-    key...": PAUSE 0: INPUT ;        ┤
│ гаем следующий вариант. Программу     100 NEXT i                      ┤
│ для ввода изображений сделаем  на     110 GO TO 51                    ┤
│ Бейсике,  а для просмотра эффекта     400 LET z=0: LET q=0            ┤
│ - откомпилируем только  ту  часть     410 FOR n=0 TO c-1              ┤
│ программы, которая для этого нуж-     420 GO SUB 800: BORDER 0: POKE  ┤
│ на. Для передачи же данных из од-    (adr+4*n),z: POKE (adr+4*n+1),q: ┤
│ ной  программы в другую будем ис-     LET x=z: LET y=q                ┤
│ пользовать не массивы переменных,     430 GO SUB 800: BORDER 7: POKE  ┤
│ а  непосредственно  память компь-    (adr+4*n+2),z: POKE (adr+4*n+3), ┤
│ ютера (при помощи POKE и PEEK).      q: LET x1=z: LET y1=q            ┤
│                                       440 PLOT x,y: DRAW (x1-x),(y1-y ┤
│    Итак, программа    для   ввода    )                                ┤
│ изображений. В основном она соот-     450 NEXT n                      ┤
│ ветствует  изначальному варианту,     455 CLS                         ┤
│ за исключением хранения данных.       460 FOR n=1 TO c                ┤
│                                       470 GO SUB 800: BORDER 0: POKE  ┤
│     1 BORDER 7: PAPER 7: INK 0: C    (adr+4*c+4*n),z: POKE (adr+4*c+4 ┤
│  LEAR 34999: LET adr=35000: LET z    *n+1),q: LET x=z: LET y=q        ┤
│  z=0: LET qq=0: OVER 1                480 GO SUB 800: BORDER 7: POKE  ┤
│    10 INPUT "NUMBER of LINES: ";c    (adr+4*c+4*n+2),z: POKE (adr+4*c ┤
│  : POKE adr,c: LET adr=adr+1         +4*n+3),q: LET x1=z: LET y1=q    ┤
│    19 GO SUB 400                      490 PLOT x,y: DRAW (x1-x),(y1-y ┤
│    20 SAVE "data"CODE (adr-1),2*4    )                                ┤
│  *c+1                                 500 NEXT n                      ┤
│    50 LET adr=35000: LET c=PEEK a     510 RETURN                      ┤
│  dr: LET adr=adr+1                    800 IF INKEY$="6" THEN  LET z=z ┤
│    51 INPUT "STEP: ";h: CLS : OVE    -(z>0): GO TO 900                ┤
│  R 1                                  810 IF INKEY$="7" THEN  LET z=z ┤
│    52 DIM f(c): DIM e(c): DIM j(c    +(z<255): GO TO 900              ┤
│  ): DIM l(c)                          820 IF INKEY$="9" THEN  LET q=q ┤
│    53 REM  FOR n=1 TO c: LET f(n)    -(q>0): GO TO 900                ┤
│  =0: LET e(n)=0: LET j(n)=0: LET      830 IF INKEY$="8" THEN  LET q=q ┤
│  l(n)=0: NEXT n                      +(q<175): GO TO 900              ┤
│    55 FOR i=0 TO h                    840 IF INKEY$="0" THEN  GO TO 1 ┤
│    60 FOR n=0 TO c-1                 000                              ┤
│    65 LET x=(PEEK (adr+4*c+4*n)-P     860 GO TO 800                   ┤
│  EEK (adr+4*n))/h*i+PEEK (adr+4*n     900 PLOT z,q: PLOT zz,qq: PRINT ┤
│  )                                     OVER 0;AT 0,2;"   ";AT 0,0;"x= ┤
│    66 LET y=(PEEK (adr+4*c+4*n+1)    ";z;AT 0,18;"   ";AT 0,16;"y=";q ┤
│  -PEEK (adr+4*n+1))/h*i+PEEK (adr     910 LET zz=z: LET qq=q          ┤
│  +4*n+1)                              920 GO TO 800                   ┤
│    67 LET x1=(PEEK (adr+4*c+4*n+2    1000 POKE adr,z: POKE (adr+1),q: ┤
│  )-PEEK (adr+4*n+2))/h*i+PEEK (ad     LET adr=adr+2: FOR v=1 TO 20: N ┤
│  r+4*n+2)                            EXT v: RETURN                    ┤
│    68 LET y1=(PEEK (adr+4*c+4*n+3                                     ┤
│  )-PEEK (adr+4*n+3))/h*i+PEEK (ad      Массив данных  располагается в ┤
│  r+4*n+3)                           памяти,  начиная с адреса  35000. ┤
│    70 PLOT f(n+1),e(n+1): DRAW (j   Первый  байт хранит NUMBER OF LI- ┤
│  (n+1)-f(n+1)),(l(n+1)-e(n+1))      NES. С адреса 35001 группами по 4 ┤
│    72 PLOT x,y: DRAW (x1-x),(y1-y   байта  хранятся  координаты X и Y ┤
│  )                                  начала и конца отрезков в следую- ┤
│    74 LET f(n+1)=x: LET j(n+1)=x1   щем порядке:                      ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 6 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                  С П Е К Т Р У М     В     Ш К О Л Е                  ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    X-коорд. начала 1-го отрезка;       70 PLOT x,y: DRAW (x1-x),(y1-y ┤
│    Y-коорд. начала 1-го отрезка;     )                                ┤
│    X-коорд. конца 1-го отрезка;        72 PLOT f(n+1),e(n+1): DRAW (j ┤
│    Y-коорд. конца 1-го отрезка;      (n+1)-f(n+1)),(l(n+1)-e(n+1))    ┤
│                                        74 LET f(n+1)=x: LET j(n+1)=x1 ┤
│    Далее - то  же  для  остальных    : LET e(n+1)=y: LET l(n+1)=y1    ┤
│ отрезков  первой фигуры;  далее -      90 NEXT n: PAUSE 1: IF i=0 THE ┤
│ все повторяется для второй  фигу-    N  PRINT #0;"        Press any k ┤
│ ры.                                  ey...": PAUSE 0: INPUT ;         ┤
│    После   завершения   рисования     100 NEXT i                      ┤
│ обоих  фигур (заполнения кодового     110 GO TO 51                    ┤
│ массива с заявленным  числом  от-                                     ┤
│ резков) в  строке  20 будет выдан      Теперь откомпилируем ее в  ад- ┤
│ результат - Вы  можете  сохранить   рес  45000 при помощи компилятора ┤
│ его для использования в будущем.    "TOBOS":                          ┤
│    Затем происходит  переход   на                                     ┤
│ программу  просмотра - строку 50.      CLEAR 44999                    ┤
│    Если кодовый массив  не  зада-      LOAD "TOBOS"CODE 53000         ┤
│ вался непосредственно, а был заг-      RANDOMIZE USR 53000            ┤
│ ружен с внешнего носителя,  то Вы                                     ┤
│ можете запустить программу с этой      На экране  увидим примерно та- ┤
│ строки RUN 50 (а не GO TO 50, так   кой результат:                    ┤
│ как  очистка  всех  переменных на                                     ┤
│ страшна,  поскольку данные сохра-      RUN  > RANDOMIZE USR 45000     ┤
│ няются в блоке кодов).  Эта часть      SAVE > CODE 45000,1112         ┤
│ программы  позволит   просмотреть                                     ┤
│ промежуточные   изображения  так,      Сохраните    откомпилированный ┤
│ как это делает исходная программа   блок кодов.                       ┤
│ (однако  и  так же медленно,  как      Сделайте теперь  CLEAR 34999 и ┤
│ исходная программа).                загрузите блок данных,  набранный ┤
│    Для более  быстрого  просмотра   ранее: LOAD "data"CODE 35000.     ┤
│ наберем и откомпилируем специаль-      Теперь можно ускоренно увидеть ┤
│ ную программу:                      процесс эволюции одного изображе- ┤
│                                     ния в другое, запустив откомпили- ┤
│    50 BORDER 7: PAPER 7: INK 0: C   рованный блок:  при помощи RANDO- ┤
│  LS : LET adr=35000: LET c=PEEK a   MIZE USR 45000.  Можете наблюдать ┤
│  dr: LET adr=adr+1                  процесс, вводя по запросу различ- ┤
│    51 INPUT "STEP: ";h: CLS : OVE   ное  число  промежуточных  этапов ┤
│  R 1                                STEP.                             ┤
│    52 DIM f(c): DIM e(c): DIM j(c                                     ┤
│  ): DIM l(c)                           И последнее.  Чтобы Вам  инте- ┤
│    55 FOR i=0 TO h                  реснее было работать,  мы предла- ┤
│    60 FOR n=0 TO c-1                гаем  уже  закодированный  массив ┤
│    65 LET x=(PEEK (adr+4*c+4*n)-P   данных. После его ввода и запуска ┤
│  EEK (adr+4*n))/h*i+PEEK (adr+4*n   Вы  сможете  наглядно  посмотреть ┤
│  )                                  процесс эволюции: рыбья голова на ┤
│    66 LET y=(PEEK (adr+4*c+4*n+1)   Ваших глазах превратится в голову ┤
│  -PEEK (adr+4*n+1))/h*i+PEEK (adr   птицы (см.  рисунки на  следующей ┤
│  +4*n+1)                            странице).                        ┤
│    67 LET x1=(PEEK (adr+4*c+4*n+2                                     ┤
│  )-PEEK (adr+4*n+2))/h*i+PEEK (ad   88B8: 1F 9F 6F AD 64 AD 64 B1 :40 ┤
│  r+4*n+2)                           88C0: 4A B1 4A A8 29 A8 29 99 :C8 ┤
│    68 LET y1=(PEEK (adr+4*c+4*n+3   88C8: 1D 99 1D B5 19 B5 19 C4 :83 ┤
│  )-PEEK (adr+4*n+3))/h*i+PEEK (ad   88D0: 13 C4 13 C4 98 C4 98 A2 :9C ┤
│  r+4*n+3)                           88D8: 88 A2 88 73 82 73 82 4B :47 ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 7 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                  С П Е К Т Р У М     В     Ш К О Л Е                  ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│ 88E0: 72 4B 72 40 6A 40 6A 53 :3E   8998: 64 7C 88 84 88 84 88 88 :29 ┤
│ 88E8: 61 53 61 66 53 66 53 6E :65   89A0: 80 88 80 84 77 84 77 7C :23 ┤
│ 88F0: 47 6E 47 6E 3E 6E 3E 62 :2E   89A8: 77 7C 77 78 80 78 80 7C :07 ┤
│ 88F8: 38 62 38 4F 46 4F 46 39 :B5   89B0: 88 00 00 00 00 00 00 00 :C1 ┤
│ 8900: 4C 39 4C 3A 45 3A 45 65 :BD                                     ┤
│ 8908: 2A 65 2A 99 1D 40 6A 35 :DF      Конечно, приведенный  алгоритм ┤
│ 8910: 61 35 61 51 51 51 51 33 :07   не претендует на истину в послед- ┤
│ 8918: 57 33 57 39 4C 69 75 6F :54   ней инстанции. К тому же, неплохо ┤
│ 8920: 75 6F 75 72 6E 72 6E 6F :31   было бы еще более ускорить работу ┤
│ 8928: 67 6F 67 69 67 69 67 66 :F4   программы  - но сделать это можно ┤
│ 8930: 6E 66 6E 69 75 BC 71 BE :C4   только полностью перейдя  на  ма- ┤
│ 8938: 58 BE 58 AF 44 AF 44 9C :B1   шинный код.  Возможно, кто-нибудь ┤
│ 8940: 3B 9C 3B 7E 40 78 39 80 :CA   из читателей  сделает  на  основе ┤
│ 8948: 21 80 21 CD 21 CD 21 CD :3C   этой  идеи полноценную программу, ┤
│ 8950: 93 CD 93 9E AB 9E AB 74 :D2   с полноценным  редактором  рисун- ┤
│ 8958: A6 74 A6 50 92 50 92 48 :AD   ков,  с возможностью "отката" при ┤
│ 8960: 87 48 87 53 80 53 80 56 :3B   неверно  введенных   координатах. ┤
│ 8968: 70 56 70 73 62 73 62 5C :2D   Или  этот  эффект  украсит чью-то ┤
│ 8970: 5D 5C 5D 58 50 59 64 39 :AD   авторскую  программу  или  найдет ┤
│ 8978: 5B 39 5B 41 55 41 55 58 :74   какое-то другое отражение.        ┤
│ 8980: 50 58 50 6A 46 6A 46 78 :D9                                     ┤
│ 8988: 39 48 87 30 77 30 77 2A :91             *     *     *           ┤
│ 8990: 55 2A 55 37 64 37 64 59 :7C                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 8 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Когда-то мы, как бы невзначай,   дание несложных  кодовых  блоков, ┤
│ подкинули читателям идею передел-   не  требующих составления таблицы ┤
│ ки  программы  MEMORY  EDITOR для   адресов. Цель - определение базо- ┤
│ обеспечения ее релоцируемости. Мы   вого  адреса,  который определяет ┤
│ и сами не ожидали,  что эта мысль   адрес загрузки и старта  кодового ┤
│ вызовет целую лавину писем (неко-   блока.                            ┤
│ торые  из них были опубликованы),      Вторая -  предназначена   тем, ┤
│ после чего  посчитали,  что  тема   кто  разрабатывает  более сложные ┤
│ эта  исчерпана.  Оказалось - нет!   программы,  в которых одним базо- ┤
│ Творческая мысль  не  зациклилась   вым  адресом  не обойтись - нужна ┤
│ на конкретной программе,  а расп-   адресная таблица.                 ┤
│ равив  могучие  крылья,  взлетела      Авторы этих материалов сделали ┤
│ ввысь. Предлагаем сегодня  внима-   мощный прорыв в создании  релоци- ┤
│ нию наших читателей две работы на   руемых программ.  С удовольствием ┤
│ тему перемещаемости программ.       предлагаем читателям эти  замеча- ┤
│    Первая - ориентирована на соз-   тельные работы.                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│   Определение базового адреса   ┤ │ тельно, в этом случае по  команде ┤
│     релоцируемой  программы     ┤ │ POP HL  в регистровую пару HL за- ┤
│ ─────────────────────────────── ┤ │ пишется адрес возврата,  то  есть ┤
│  (С) Сергей Рюмик,              ┤ │ базовый адрес, а затем на него же ┤
│           г.Чернигов-34, 1995.  ┤ │ и передастся управление по коман- ┤
└─────────────────────────────────┘ │ де безусловного перехода JP (HL). ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    После просмотра ПЗУ  "Спектрум ┤
│    Хочу поделиться своими  иссле-   48" была  обнаружена  искомая об- ┤
│ дованиями.                          ласть:                            ┤
│    Возможно, кому-то это уменьшит                                     ┤
│ на  пару байтов головную боль.  В        #1FC3  CD 30 25 CALL #2530   ┤
│ ZX-РЕВЮ  неоднократно  приводился        #1FC6  E1       POP  HL      ┤
│ прием  для  определения  базового        #1FC7  C8       RET  Z       ┤
│ адреса  релоцируемых  (перемещае-        #1FC8  E9       JP   (HL)    ┤
│ мых)  программ.  Он заключается в                                     ┤
│ следующем:                             Подпрограмма  #2530   содержит ┤
│                                     проверку BIT 7,(IY+1).            ┤
│         CD 7C 00  CALL #007C           Ложку дегтя в стройную систему ┤
│         3B        DEC  SP           подбросила команда   RET  Z,  так ┤
│         3B        DEC  SP           некстати вклинившаяся  между  POP ┤
│         E1        POP  HL           HL и JP (HL). За это для гаранти- ┤
│                                     рованного определения    базового ┤
│    Подпрограмма  #007C   содержит   адреса придется  заплатить  двумя ┤
│ один  RET,  после чего отложенное   лишними байтами, однозначно сбра- ┤
│ значение базового адреса снимает-   сывающими флаг Z.                 ┤
│ ся со стека в регистр HL.              Итого: 5 байтов в процедуре. А ┤
│    Этот прием  широко  применялся   можно ли еще меньше? Можно, что и ┤
│ еще в знаменитом пакете  процедур   показано в таблице (см. на следу- ┤
│ SUPERCODE (CP Software, 1983).      ющей странице).                   ┤
│    Однако, если бы в ПЗУ  "Спект-                                     ┤
│ рума" нашлась  последовательность         Примечания к таблице.       ┤
│ байтов:                                                               ┤
│                                        1. Для  точки входа #1FC5 пер- ┤
│        ADR  E1  POP  HL             вый байт интерпретируется как ко- ┤
│             E9  JP   (HL)           манда DEC H.                      ┤
│                                        2. Для процедуры 3 при запуске ┤
│ то для определения базового адре-   из Бейсика содержимое аккумулято- ┤
│ са можно было бы  обойтись  всего   ра  А изменяется в зависимости от ┤
│ тремя байтами: CALL ADR. Действи-   адреса запуска.                   ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 9 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│┌───┬───────────────────────┬───────┬────────┬────────────┬───────────┐┤
││ N │ Процедура определения │ Длина │Базовый │Используемые│Ограничения│┤
││   │   базового адреса     │       │ адрес  │  регистры  │           │┤
│├───┼───────────────────────┼───────┼────────┼────────────┼───────────┤┤
││ 1 │ADR  CD7C00  CALL #007C│       │        │            │           │┤
││   │     3B      DEC  SP   │   6   │        │            │           │┤
││   │     3B      DEC  SP   │ байтов│HL=ADR+3│    HL      │    нет    │┤
││   │     E1      POP  HL   │       │        │            │           │┤
│├───┼───────────────────────┼───────┼────────┼────────────┼───────────┤┤
││ 2 │ADR  2600    LD   H.#00│   5   │        │            │           │┤
││   │     CDC51F  CALL #1FC5│ байтов│HL=ADR+5│    HL      │    нет    │┤
││   │          или          │       │        │            │           │┤
││   │ADR  AF      XOR  A    │   5   │        │            │           │┤
││   │     3D      DEC  A    │ байтов│HL=ADR+5│   A, HL    │    нет    │┤
││   │     CDC61F  CALL #1FC6│       │        │            │           │┤
│├───┼───────────────────────┼───────┼────────┼────────────┼───────────┤┤
││ 3 │ADR  3D      DEC  A    │   4   │        │            │           │┤
││   │     CDC61F  CALL #1FC6│ байта │HL=ADR+4│   A, HL    │  A<>#01   │┤
││   │          или          │       │        │            │           │┤
││   │ADR  3C      INC  A    │   4   │        │            │           │┤
││   │     CDC61F  CALL #1FC6│ байта │HL=ADR+4│   A, HL    │  A<>#FF   │┤
│├───┼───────────────────────┼───────┼────────┼────────────┼───────────┤┤
││ 4 │ADR  CDC31F  CALL #1FC3│3 байта│HL=ADR+3│   HL, IY   │BIT 7,     │┤
││   │          или          │       │        │            │   (IY+1)>0│┤
││   │ADR  CDC51F  CALL #1FC5│3 байта│HL=ADR+3│     HL     │  H<>#01   │┤
│├───┼───────────────────────┼───────┼────────┼────────────┼───────────┤┤
││ 5 │ADR  C5      PUSH BC   │   2   │        │            │           │┤
││   │     E1      POP  HL   │ байта │ HL=ADR │   BC, HL   │При запуске│┤
││   │          или          │       │        │            │           │┤
││   │ADR  60      LD   H,B  │   2   │        │            │из Бейсика.│┤
││   │     69      LD   L,C  │ байта │ HL=ADR │   BC, HL   │           │┤
│├───┼───────────────────────┼───────┼────────┼────────────┼───────────┤┤
││ 6 │ADR при запуске кодовых│       │        │            │           │┤
││   │программ  из Бейсика  в│  ---  │ BC=ADR │     BC     │При запуске│┤
││   │регистровой паре ВС пе-│       │        │            │из Бейсика.│┤
││   │редается адрес запуска │       │        │            │           │┤
│└───┴───────────────────────┴───────┴────────┴────────────┴───────────┘┤
│    3. Для процедуры 4 при запуске   тоже  могут воспользоваться этими ┤
│ из Бейсика в ячейке (IY+1) -  это   процедурами, так как прошивки ПЗУ ┤
│ переменная  FLAGS 23611 (#5C3B) -   Бейсика для 48К и 128К по адресам ┤
│ бит 7  при  выполнении  программы   #1FC3-#1FC8 совпадают.            ┤
│ всегда установлен в "1".                                              ┤
│    4. Владельцы  "Спектрум   128"             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│     Автоматизация создания      ┤ │ автоматического  создания релоци- ┤
│     релоцируемых  программ      ┤ │ руемых программ уже давно бродила ┤
│ ──────────────────────────────  ┤ │ в наших головах.  И вот, наконец, ┤
│  (C) Дмитрий Козлов, Николай    ┤ │ ей надоело там бродить:  на  свет ┤
│      Шустов, Н.Новгород, 1994.  ┤ │ появился  RPMU (Relocatable Prog- ┤
└─────────────────────────────────┘ │ ram Make Utility).  Но  на  самом ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ деле это громкое название не сов- ┤
│    В первом  номере  "ZX-РЕВЮ" за   сем точно отражает ее  возможнос- ┤
│ 1994 год  ИНФОРКОМ  бросил  клич:   ти.  Программу, которую Вы хотите ┤
│ "Все   на  создание  релоцируемой   сделать перемещаемой,  Вам все же ┤
│ версии  MEMORY  EDITOR-а!".  Идея   придется писать самим.  Но Вы мо- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 10 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ жете не ломать голову, руки, ноги   проблемы,  готовые  свалиться  на ┤
│ и другие части тела в поисках от-   Вашу голову.                      ┤
│ вета на вопрос: "Куда бы засунуть      Очевидно, что  больших и серь- ┤
│ этот CALL ?". Ведь ужасно обидно,   езных программ таким  путем  соз- ┤
│ что есть  команда  относительного   дать нельзя.  Поэтому в большинс- ┤
│ перехода JR, но нет команды отно-   тве случаев  используется  другой ┤
│ сительного  вызова  подпрограммы,   подход,  примерами реализации ко- ┤
│ что-нибудь вроде CALLR...           торого могут  служить  такие  из- ┤
│    "Да, а собственно к чему  весь   вестные  программы,  как  GENS  и ┤
│ этот  сыр-бор вокруг релоцируемых   MONS.  В них к исполняемому  коду ┤
│ (слово-то какое выдумали!)  прог-   добавлены   таблица  настройки  и ┤
│ рамм?"   -   скажет  какой-нибудь   специальная процедура, которая по ┤
│ пользователь SPECCY, с трудом от-   этой таблице осуществляет привяз- ┤
│ рываясь от экрана, на котором его   ку программы к  конкретным  адре- ┤
│ СOBRA MK III,   после  тяжелых  и   сам.  Метод, конечно, хороший, но ┤
│ продолжительных боев,  добила на-   создавать таблицу настройки вруч- ┤
│ конец-то несчастный PHYTON. Но те   ную  довольно утомительно.  Может ┤
│ люди,   которые   используют  ZX-   быть из-за всех этих сложностей и ┤
│ SPECTRUM не  только  как  игровую   написано  так  мало  релоцируемых ┤
│ приставку  к  телевизору,  не раз   программ.                         ┤
│ кусали себе  локти,  пытаясь  ис-      Вот мы  и подумали:  "А почему ┤
│ пользовать  две  утилиты одновре-   бы не свалить все заботы по  соз- ┤
│ менно,  которые  используют   для   данию   настроечной   таблицы  на ┤
│ своей работы одни и те же адреса.   SINCLAIR?".  Это была наша первая ┤
│ Однако, если бы эти программы бы-   гениальная идея. Она нам понрави- ┤
│ ли релоцируемыми (слово-то  какое   лась и мы подумали: "А как же вы- ┤
│ замечательное!), таких проблем не   делить те байты,  которые необхо- ┤
│ возникало бы.                       димо  изменить,  чтобы  программа ┤
│    Как Вы знаете,  есть два  пути   смогла  работать в других адресах ┤
│ создания  релоцируемых  программ.   ОЗУ?".  И тут нас осенила  вторая ┤
│ Первый - это писать ее перемещае-   гениальная   идея:  "А  ведь  это ┤
│ мой с самого начала,  то есть от-   очень просто узнать,  если  срав- ┤
│ казаться от команд,  использующих   нить  между  собой два экземпляра ┤
│ абсолютную адресацию:  CALL addr,   одной и той же программы, ассемб- ┤
│ JP  addr,  LD  reg_pair,(addr)  и   лированных  по  разным адресам (с ┤
│ т.п. (где  addr  - адрес чего-ни-   разными   значениями    директивы ┤
│ будь в Вашей программе). Если от-   ORG).  И  по  этим данным таблица ┤
│ носительного  смещения JR не хва-   строится элементарно!".           ┤
│ тает,  то приходится  организовы-      Это послужило отправной точкой ┤
│ вать цепочки JR-ов, где первый JR   для написания нашей программы. То ┤
│ указывает на второй,  тот на сле-   что получилось Вы можете  увидеть ┤
│ дующий  и  т.д.  И это еще не все   ниже:                             ┤
│                                                                       ┤
│    ;              Relocatable Program Make  Utility                   ┤
│    ;                Copyright 1994 by LEGION SOFT                     ┤
│    ;                      v1.00  APR-01-94                            ┤
│                                                                       ┤
│                   ORG     30000                                       ┤
│    ;--------------------------------------------------------------    ┤
│    PART3          JR      START                                       ┤
│    ;--------------------------------------------------------------    ┤
│    ORG1           DEFW    0               ; значение ORG 1-го экз.    ┤
│    ADR1           DEFW    0               ; адрес 1-го экземпляра     ┤
│    ADR2           DEFW    0               ; адрес 2-го экземпляра     ┤
│    LEN            DEFW    0               ; длина экземпляра          ┤
│    ;--------------------------------------------------------------    ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 11 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    START          LD      HL,(ORG1)       ;                           ┤
│                   LD      BC,OFFSET       ;  подготовительные         ┤
│                   ADD     HL,BC           ;                           ┤
│                   LD      B,H             ;      операции             ┤
│                   LD      C,L             ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   EXX                     ; сохраняем HL' для кор-    ┤
│                   PUSH    HL              ; ректного возврата в       ┤
│                                           ;         BASIC             ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      BC,(LEN)        ;  по адресу CD_LEN :       ┤
│                   LD      (CD_LEN),BC     ;   длина экземпляра        ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      HL,P1_LEN-OFFSET;   по адресу SC_LEN :      ┤
│                   ADD     HL,BC           ;  длина экземпляра +       ┤
│                   LD      (SC_LEN),HL     ;   скорректированная       ┤
│                                           ;     длина PART1           ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      HL,(ADR2)       ;                           ┤
│                   LD      DE,(ADR1)       ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   PUSH    HL              ; в IX - адрес начала       ┤
│                   POP     IX              ;     настроечной           ┤
│                   ADD     IX,BC           ;       таблицы             ┤
│    ;--------------------------------------------------------------    ┤
│    LOOP3          LD      A,(DE)          ; основной цикл поиска      ┤
│                   CP      (HL)            ;    различающихся          ┤
│                   JR      Z,NXT_B         ;       байтов              ┤
│    ;--------------------------------------------------------------    ┤
│                   PUSH    HL              ;                           ┤
│                   EXX                     ;                           ┤
│                   POP     HL              ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      E,(HL)          ;                           ┤
│                   INC     HL              ; в DE - корректируемое     ┤
│                   LD      D,(HL)          ;        значение           ┤
│    ;--------------------------------------------------------------    ┤
│                   EX      DE,HL           ;                           ┤
│                   OR      A               ;                           ┤
│                   SBC     HL,BC           ;        ну вот,            ┤
│                   EX      DE,HL           ;    скорректировали !      ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      (HL),D          ;                           ┤
│                   DEC     HL              ;    и  запихали его        ┤
│                   LD      (HL),E          ;        обратно            ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      DE,(ADR2)       ;     в HL - значение       ┤
│                   OR      A               ;       смещения до         ┤
│                   SBC     HL,DE           ;   скорректированного      ┤
│                   LD      DE,P1_LEN-OFFSET                            ┤
│                   ADD     HL,DE           ;        значения           ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      (IX+0),L        ;                           ┤
│                   LD      (IX+1),H        ;                           ┤
│                   INC     IX              ;     в таблицу его !       ┤
│                   INC     IX              ;                           ┤
│    ;--------------------------------------------------------------    ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 12 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   EXX                     ;       пропускаем          ┤
│                   LDI                     ;     1 (один) байт         ┤
│    ;--------------------------------------------------------------    ┤
│    NXT_B          LDI                     ;     следующий байт        ┤
│                   JP      PE,LOOP3        ;   ( пока есть такой )     ┤
│    ;--------------------------------------------------------------    ┤
│                   PUSH    IX              ;                           ┤
│                   POP     DE              ;                           ┤
│                   XOR     A               ;     нулевое слово -       ┤
│                   LD      (DE),A          ;      в  таблицу           ┤
│                   INC     DE              ;   (это маркер конца)      ┤
│                   LD      (DE),A          ;                           ┤
│                   INC     DE              ;    DE - за таблицей       ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      HL,PART2        ;    добавили  PART2        ┤
│                   LD      BC,P2_LEN       ;     в конец файла         ┤
│                   LDIR                    ;                           ┤
│                   PUSH    DE              ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      DE,(ADR2)       ;                           ┤
│                   DEC     DE              ;    добавили PART1         ┤
│                   LD      HL,P1_END-1     ;    в начало файла         ┤
│                   LD      BC,P1_LEN       ;                           ┤
│                   LDDR                    ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   INC     DE              ;                           ┤
│                   POP     HL              ;    в HL - суммарная       ┤
│                   OR      A               ;          длина            ┤
│                   SBC     HL,DE           ;        программы          ┤
│    ;--------------------------------------------------------------    ┤
│                   EX      (SP),HL         ;       ее - в стек,        ┤
│                                           ;    HL'- восстановили      ┤
│    ;--------------------------------------------------------------    ┤
│                   EXX                     ; в BC-суммарная длина      ┤
│                   POP     BC              ;       программы           ┤
│                   RET                     ;         все !             ┤
│    ;--------------------------------------------------------------    ┤
│    ; Вызов программы: LET A=USR 3Е4,  в A после возврата -            ┤
│    ; суммарная длина программы. Адрес начала: ADR2-P1_LEN             ┤
│                                                                       ┤
│    _RET           EQU     #007C           ; адрес RET в ПЗУ           ┤
│    ;--------------------------------------------------------------    ┤
│    PART1          LD      A,I             ;  сохраняем состояние      ┤
│                   PUSH    AF              ;  триггера прерываний      ┤
│                   DI                      ;       (*)                 ┤
│    ;--------------------------------------------------------------    ┤
│                   CALL    _RET            ;      (**)                 ┤
│    ;--------------------------------------------------------------    ┤
│    LABEL                                                              ┤
│    OFFSET         EQU     LABEL-PART1                                 ┤
│    ;--------------------------------------------------------------    ┤
│                   DEC     SP              ;   вместе с (**)           ┤
│                   DEC     SP              ; определили адрес LABEL    ┤
│                   POP     BC              ;      в BC его !           ┤
│    ;--------------------------------------------------------------    ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 13 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    SC_LEN         EQU     $+1             ; SC_LEN=адрес данных       ┤
│                   LD      HL,0            ; этой ( <-- ) команды      ┤
│                   ADD     HL,BC           ; т.о. HL=адрес таблицы     ┤
│    ;--------------------------------------------------------------    ┤
│    LOOP1          LD      E,(HL)          ;                           ┤
│                   INC     HL              ;                           ┤
│                   LD      D,(HL)          ;    DE = смещение из       ┤
│                   INC     HL              ;         таблицы           ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      A,D             ;                           ┤
│                   OR      E               ;    конец таблицы ?        ┤
│                   PUSH    HL              ;  <-- (***)                ┤
│                   RET     Z               ;      если да,             ┤
│                                           ; то в результате (***)     ┤
│                                           ;   переход на PART2,       ┤
│                                           ; иначе просто сохранили    ┤
│                                           ;          HL               ┤
│    ;--------------------------------------------------------------    ┤
│                   EX      DE,HL           ;                           ┤
│                   ADD     HL,BC           ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      E,(HL)          ;                           ┤
│                   INC     HL              ; в DE - корректируемое     ┤
│                   LD      D,(HL)          ;       значение            ┤
│    ;--------------------------------------------------------------    ┤
│                   EX      DE,HL           ;                           ┤
│                   ADD     HL,BC           ;       ну вот,             ┤
│                   EX      DE,HL           ;   скорректировали !       ┤
│    ;--------------------------------------------------------------    ┤
│                   LD      (HL),D          ;  и  запихали его          ┤
│                   DEC     HL              ;       обратно             ┤
│                   LD      (HL),E          ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                   POP     HL              ;                           ┤
│                   JR      LOOP1           ;    закрутили цикл         ┤
│    ;--------------------------------------------------------------    ┤
│    P1_END                                 ;                           ┤
│    P1_LEN         EQU     P1_END-PART1    ;                           ┤
│    ;--------------------------------------------------------------    ┤
│                                                                       ┤
│    ;    (*) необходимо  запретить прерывания, т.к. если процедура     ┤
│    ;     их обработки будет вызвана между возвратом из _RET и/или     ┤
│    ;     DEC-ами SP, то адрес LABEL будет безвозвратно потерян...     ┤
│    ;                              (Аплодисменты. Зрители рыдают.)     ┤
│    ; Дело в том, что после возврата из подпрограммы _RET адрес        ┤
│    ; LABEL лежит по адресу SP-2, а при вызове процедуры обработки     ┤
│    ; прерываний адрес возврата будет записан туда же...               ┤
│    ;--------------------------------------------------------------    ┤
│    PART2          LD      HL,-OFFSET      ;      DE - адрес           ┤
│                   ADD     HL,DE           ;    загрузки файла,        ┤
│                   LD      DE,P1_LEN       ;      HL - начало          ┤
│                   EX      DE,HL           ;    кода настроенной       ┤
│                   ADD     HL,DE           ;        программы          ┤
│    ;--------------------------------------------------------------    ┤
│    CD_LEN         EQU     $+1             ;   аналогичный трюк        ┤
│                   LD      BC,0            ;       см. выше            ┤
│    ;--------------------------------------------------------------    ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 14 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   LDIR                    ;адрес начала свободного    ┤
│                   LD      B,D             ;    пространства за        ┤
│                   LD      C,E             ; настроенной программой    ┤
│    ;--------------------------------------------------------------    ┤
│                   POP     AF                                          ┤
│                   RET     PO                                          ┤
│                   EI                                                  ┤
│                   RET                                                 ┤
│    ;--------------------------------------------------------------    ┤
│    P2_END                                                             ┤
│    P2_LEN         EQU     P2_END-PART2                                ┤
│    ;--------------------------------------------------------------    ┤
│                                                                       ┤
│    К сему мы хотим  сказать,  что     310 STOP                        ┤
│ главным  критерием  при написании     999 REM *********************** ┤
│ этой  программы  был  минимальный    1000 RANDOMIZE D                 ┤
│ размер  части,  присоединяемой  к    1010 POKE A,PEEK VAL "xx" : POKE ┤
│ настраиваемому коду (т.е.  размер     A+SGN PI,PEEK VAL "xx+1"        ┤
│ PART1  и  PART2).  Именно поэтому    1020 RETURN                      ┤
│ эти фрагменты получились не  сов-                                     ┤
│ сем читабельными.                      Примечание: xx - адрес систем- ┤
│    Для облегчения работы с  нашей   ной переменной SEED.              ┤
│ процедурой  мы состряпали неболь-                                     ┤
│ шой BASIC-интерфейс:                   Мы старались  не привязываться ┤
│                                     к конкретному накопителю, поэтому ┤
│    10 REM *** RPMU Interface ****   не вставили в BASIC-программу ко- ┤
│    20 GO TO VAL"100"                манд выгрузки полученного и  заг- ┤
│    30 BORDER NOT  PI:  PAPER  NOT   рузки исходных файлов. Единствен- ┤
│  PI: INK VAL"7"                     ная накопителезависимая (извините ┤
│    40 CLEAR VAL"29999"              за  выражение) команда - это LOAD ┤
│    50 LOAD "RPMU.COM" CODE VAL"3E   в строке 50.  Поэтому если Вы ис- ┤
│  4"                                 пользуете  не ленту,  а какое-ни- ┤
│    60 PRINT "RMPU v1.00 installed   будь  другое  внешнее  устройство ┤
│  ."'"Use memory from 30300."        (например,   дисковод,   принтер, ┤
│    70 STOP                          плоттер, мышь или настольную лам- ┤
│    99 REM ***********************   пу), то замените команду загрузки ┤
│   100 CLS                           "RMPU.COM" на нужную. Кстати, за- ┤
│   110 INPUT "BLOCK1 ORG value : "   пись НАШЕЙ  BASIC-программы необ- ┤
│  ;D                                 ходимо производить командой: SAVE ┤
│   120 A=VAL"30002":GO SUB VAL"1E3   "RMPU" LINE 30  (или аналогичной, ┤
│  "                                  которую "понимает"  Ваш  DOS  или ┤
│   130 INPUT "BLOCK1 loading addre   Микродрайв).                      ┤
│  ss: ";B1A                                                            ┤
│   140 A=A+VAL"2":LET D=B2A:GO SUB      Ну а  теперь  рассказ  о самом ┤
│   VAL"1E3"                          интересном:  как же  пользоваться ┤
│   150 INPUT "BLOCK2 loading addre   тем,  что мы тут накропали. Итак, ┤
│  ss: ";D                            чтобы получить релоцируемую прог- ┤
│   160 A=A+VAL"2":GO SUB VAL"1E3"    рамму нужно:                      ┤
│   170 INPUT "Length of BLOCKs : "      1. Откомпилировать Ваш ассемб- ┤
│  ;D                                 лерный  файл  с  двумя различными ┤
│   180 A=A+VAL"2":GO SUB VAL"1E3"    значениями  ORG,  причем  у  этих ┤
│   190 LET D=USR VAL"3E4"            значений   должны   отличаться  и ┤
│   200 PRINT "Adjusting complited.   младшие байты.  После этого необ- ┤
│  "                                  ходимо  запомнить (а кому трудно, ┤
│   300 PRINT "Use SAVE ""name"" CO   записать) длину полученного  кода ┤
│  DE ";B1A-VAL"36";",";D             и  значение ORG одного из блоков. ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 15 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ Потом  эти  значения  потребуются   нию  этот  способ подходит только ┤
│ для работы RMPU.                    для  опытных  пользователей,   но ┤
│    2. Отгрузить полученные модули   другого пути на наш взгляд нет.   ┤
│ на внешний носитель.                                                  ┤
│    3. Загрузить RPMU.                  Наконец, несколько слов еще об ┤
│    4. После  того,  как  появится   одном   варианте    использования ┤
│ сообщение:  "RMPU  v1.00  instal-   предлагаемой программы. На компь- ┤
│ led..."  загрузить  Ваши модули в   ютере IBM PC есть очень  интерес- ┤
│ свободную память.                   ная возможность организации своих ┤
│    5. Запустить RPMU командой RUN   процедур - OBJ файлы.  Нечто  по- ┤
│ и чистосердечно ответить на  воп-   добное можно попытаться сделать и ┤
│ росы  программы,  введя ранее за-   на SPECCY. Тут поможет предложен- ┤
│ помненные значения и адреса  заг-   ная Вами идея КЕРНАЛЯ. Делать это ┤
│ рузки.                              надо примерно так:                ┤
│    6. Сообщение: "Adjusting comp-      - Вы   создаете  свои  кодовые ┤
│ lited." известит Вас о  том,  что   процедуры так,  чтобы они  "обща- ┤
│ настройка   закончена  и  готовую   лись"  между  собой  только через ┤
│ программу  можно   сохранить   на   КЕРНАЛЬ.                          ┤
│ внешнем носителе. Для выгрузки на      - Каждая   процедура  делается ┤
│ ленту надо использовать указанную   перемещаемой при помощи RPMU.     ┤
│ команду  (если у Вас другой носи-      - Программа, которая должна их ┤
│ тель,  то скорректируйте ее соот-   использовать,  сама загружает эти ┤
│ ветствующим образом).               процедуры  в память (причем в лю- ┤
│    Итак, Вы получили релоцируемую   бой комбинации) и запускает наст- ┤
│ версию некоторой программы.  Воз-   ройщик.  Затем  адреса размещения ┤
│ никает резонный вопрос: "А как же   процедур заносятся в определенные ┤
│ ей пользоваться?" Все очень прос-   ячейки КЕРНАЛЯ.                   ┤
│ то. Загружаете ее в память:            Таким образом Вы полуавтомати- ┤
│                                     чески   можете   создать  кодовую ┤
│       LOAD "name" CODE addr         часть будущей программы  даже  из ┤
│                                     BASICа.  Это будет выглядеть при- ┤
│    И запускаете: LET A=USR addr     мерно так:                        ┤
│    Программа вернется в BASIC и в                                     ┤
│ результате  в  переменной A будет      10 DATA "NAME1", "NAME2", ...  ┤
│ адрес первой свободной ячейки па-      20 CLEAR 29999 : LET ADR=3E4   ┤
│ мяти, а по адресу addr разместит-      30 FOR I=1 TO NOF :  REM NOF - ┤
│ ся  Ваша  настроенная  программа.   оличество   подключаемых  файлов. ┤
│ Теперь  Вы  можете  запускать  ее   десь  должны  находиться  строки, ┤
│ обычной командой:                   оторые  отвечают за запись адреса ┤
│                                     ачала очередной  процедуры  (т.е. ┤
│        RANDOMIZE USR addr           DR ) в КЕРНАЛЬ.                   ┤
│                                        80 READ N$                     ┤
│    Обратите внимание,  что  полу-      90 LOAD N$ CODE ADR : LET ADR= ┤
│ ченная  программа содержит только    USR ADR                          ┤
│ то,  что Вы написали. Процедура и     100 NEXT I                      ┤
│ таблица настройки удалены так как                                     ┤
│ они больше не нужны.                   Мы понимаем,  что предложенная ┤
│                                     идея не  отличается  особой  эле- ┤
│    Теперь нам хотелось бы остано-   гантностью,  но  ведь  это только ┤
│ виться  на  модификации программ,   идея. И может быть кто-то, опира- ┤
│ для которых у Вас  нет  исходного   ясь на нее,  создаст что-то дейс- ┤
│ текста (пример: Memory Editor). В   твительно стоящее.                ┤
│ этом случае  придется  воспользо-                                     ┤
│ ваться  директивой  "T"  монитора             *     *     *           ┤
│ MONS для его получения. К сожале-                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 16 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │    А на  повестке дня сегодня ра- ┤
│  Архивация, компрессия, сжатие  ┤ │ бота  мультимедийных  систем.  На ┤
│ ─────────────────────────────── ┤ │ одном лазерном диске записывают и ┤
│   (C) Сергей Симонович, 1994.   ┤ │ программу и двадцатидвухканальную ┤
│                                 ┤ │ стереомузыку и видеоряд и все это ┤
└─────────────────────────────────┘ │ надо мгновенно считывать в компь- ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ ютер,  преобразовывать и выдавать ┤
│    "...В пятом  выпуске "ZX-РЕВЮ"   в  РЕАЛЬНОМ  ВРЕМЕНИ,  т.е.  так, ┤
│ в рассказе о  фирме  Level  9  Вы   чтобы пользователь не замечал за- ┤
│ упомянули,  что программисты при-   держек  в  видеофрагментах  из-за ┤
│ думали специальную систему, кото-   того, что дисковод медленно пере- ┤
│ рая позволяет сжимать и уплотнять   дает  информацию   в   компьютер. ┤
│ тексты.  Скажите, не пробовали ли   Здесь  без очень "крутых" методов ┤
│ Вы разобраться,  как работает эта   сжатия просто нечего  делать.  Не ┤
│ система. Может быть, были попытки   хватает  никакой скорости переда- ┤
│ удачного  "взлома" словарей в иг-   чи.                               ┤
│ рах фирмы L9?" -  спрашивает  нас      Вот так и получается, что воп- ┤
│ Илья Ползунов из Казани.            росы компрессии информации, с ко- ┤
│    Нет, Илья, как-то руки не дош-   торыми  каждый "синклерист" стал- ┤
│ ли до "раскрутки" этих программ в   кивается уже на первых шагах жиз- ┤
│ такой постановке вопроса,  но вот   ни,  нарисовав  первые картинки в ┤
│ о том, каким образом производится   ARTSTUDIO и  вставив  их  в  свою ┤
│ компрессия данных в общем случае,   БЕЙСИК-программу,     оказываются ┤
│ у нас есть,  что рассказать,  тем   очень важными,  интересными и  до ┤
│ более, что эти вопросы достаточно   сих пор до конца нерешенными.     ┤
│ актуальны для программистов.                                          ┤
│    Во-первых, удачные   алгоритмы             Два подхода.            ┤
│ компрессии и декомпрессии  данных                                     ┤
│ позволяют  значительно  увеличить      Конечно существует   множество ┤
│ размеры программы,  которую можно   разных методов компрессии данных. ┤
│ за  один прием загрузить в компь-   Но  если взглянуть в их суть,  то ┤
│ ютер и запустить. Это ведь только   можно выделить два основных  нап- ┤
│ в пословице говорится,  что крат-   равления.    Первое   направление ┤
│ кость - сестра  таланта.  А  куда   представляют разнообразные  мето- ┤
│ деваться  обычным людям,  то есть   ды,  основанные  на использовании ┤
│ таким бесталанным,  как большинс-   длин последовательностей повторя- ┤
│ тво из нас?  Нам приходится брать   ющихся  данных  (метод  RLE - Run ┤
│ не талантом,  а усердием, то есть   Length Encoding).  Второе направ- ┤
│ объемом.  Вот  и получается,  что   ление связано с использованием не ┤
│ чем больший объем мы "втолкнем" в   длины  повторяющихся  данных,   а ┤
│ компьютерную  программу  за  один   частоты их повторения и эти мето- ┤
│ раз,  тем выше наши шансы прибли-   ды строятся на алгоритме, носящем ┤
│ зиться к лучшим образцам, исходя-   имя Хафмана (Huffman).            ┤
│ щим от  одаренных  корифеев.  Тем                                     ┤
│ лучше  будет наша графика,  инте-        1. Классический подход.      ┤
│ реснее текст, богаче музыка.                                          ┤
│    Во-вторых, важна проблема ско-      Классический, давно  известный ┤
│ рости обмена информацией  с  дис-   подход основан на том,  что  если ┤
│ ком.  Быстрее  загрузить  с  него   некоторый  символ "X" повторяется ┤
│ сжатую информацию,  а  потом  де-   подряд "N" раз,  то вместо  того, ┤
│ компрессировать ее в памяти,  чем   чтобы  расходовать на него N бай- ┤
│ долго-долго качать рыхлые файлы.    тов,  лучше сначала дать сам сим- ┤
│    В третьих,  вопросы коммуника-   вол  X,  а  потом  дать его число ┤
│ ции. Через модем просто не приня-   повторов N.  Это,  конечно, самый ┤
│ то  работать  с неархивированными   простой  прием  и он может давать ┤
│ данными.  Это  расточительство  и   как очень хорошие,  так  и  очень ┤
│ времени и денег и рабочего прост-   плохие   результаты.   Рассмотрим ┤
│ ранства.                            таблицу 1 (на след.странице).     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 17 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                         Таблица 1                     ┤
│  QQQQQQQQQQQQQQQQQQQQ  20,"Q"                                2   10%  ┤
│  AAAAAAAAAAQQQQQQQBBB  10,"A",7,"Q",3,"B"                    6   30%  ┤
│  ABBCCCDDDDEEEEEFFFFF  1,"A",2,"B",3,"C",4,"D",5,"E",5,"F"  12   60%  ┤
│  QAQAQAQAQAQAQAQAQAQA  1,"Q",1,"A",1,"Q",1,"A".....и т.д.   40  200%  ┤
│                                                                       ┤
│    Вы видите,  что  чем   длиннее      Можно сколь  угодно  спорить о ┤
│ последовательность  повторяющихся   том,  какой  коэффициент  повтора ┤
│ символов,  тем сильнее эффект  от   лучше.  Мы, например считаем, что ┤
│ компрессии.  Зато  в тех случаях,   учитывая особенность "синклеровс- ┤
│ когда символы  выступают  по-оди-   кого"  экрана совсем неплох коэф- ┤
│ ночке, после компрессии возникает   фициент повтора 31. Конечно, вни- ┤
│ лишний дополнительный байт, из-за   мательный  читатель  может  спро- ┤
│ которого  никакой  пользы,  кроме   сить, а какой смысл в таком коэф- ┤
│ вреда от компрессии нет.            фициенте, если 255 занимает ту же ┤
│    Кстати, здесь  возникает и еще   длину,  что и 31?  Но у числа  31 ┤
│ один интересный смежный вопрос, а   есть еще в запасе три старших би- ┤
│ сколько  разрядов  (байтов) отда-   та и,  если крепко подумать и су- ┤
│ вать числу повторов?                меть их мудро применить, например ┤
│    Простейшее решение  -  сделать   в работе со спрайтами или  "окна- ┤
│ так,  чтобы  максимальным  числом   ми",  то  у  коэффициента 31 есть ┤
│ повторов было 255 и тогда на этот   определенное право на жизнь.      ┤
│ параметр уйдет один байт.  Но как      Но, как бы там ни было,  а ма- ┤
│ быть с тем, что нередко количест-   тематики, занимавшиеся этой проб- ┤
│ во повторов бывает и больше? Тог-   лемой,  все за нас решили и  даже ┤
│ да   придется   записывать  число   вывели  и  строго научно доказали ┤
│ дважды.  Например,  пусть  у  нас   теорему,  которая гласит примерно ┤
│ буква  Q  повторяется  подряд 300   следующее:   какой  бы  алгоритм, ┤
│ раз.  В этом случае результат ра-   связанный с учетом повторов  сим- ┤
│ боты архиватора будет таким:        волов  Вы  ни  придумали,  всегда ┤
│                                     можно найти такую  последователь- ┤
│          255,"Q",45,"Q"             ность,  на  которой  Ваш алгоритм ┤
│                                     даст результирующий файл, больший ┤
│    Представим себе,  что нам надо   по длине, чем исходный.           ┤
│ заархивировать весь экран (6  3/4      Но из этой теоремы  можно  вы- ┤
│ килобайтов).  Тогда даже при том,   вести два следствия, одну гипоте- ┤
│ что он весь будет чистым, нам все   зу и один вывод.                  ┤
│ равно  придется  израсходовать 54      Следствие 1 (обратное). Всегда ┤
│ байта                               можно найти такой файл,  на кото- ┤
│                                     ром Ваш алгоритм будет самым наи- ┤
│  255,0,255,0,255,0...и так 27 раз   лучшим.                           ┤
│                                        Следствие 2.  Если файл "прог- ┤
│    А вот если бы мы счетчик  пов-   нать"  через  алгоритм  несколько ┤
│ торов  выражали бы не одноразряд-   раз, то результат каждого следую- ┤
│ ным числом,  а двуразрядным, то в   щего "прогона" после первого  бу- ┤
│ нем можно было бы разместить от 0   дет  все  хуже и хуже.  Проверьте ┤
│ до 65535 целых чисел  и тогда ре-   это сами с  помощью  карандаша  и ┤
│ зультат компрессии чистого экрана   бумаги                            ┤
│ укладывался бы всего в три байта:      Гипотеза. Если  Вы  прогоняете ┤
│                                     свой  файл через некий компрессор ┤
│    27,0,0                           несколько раз и с каждым прогоном ┤
│                                     результат все хуже и хуже, значит ┤
│    Зато с другой стороны, если бы   есть вероятность,  что компрессор ┤
│ Вы  "нарвались"  при таком методе   построен на методе RLE.           ┤
│ компрессии на  последовательность      Вывод. Если Вы разработали ме- ┤
│ QAQAQAQA..  (таб.1),  то получили   тод  типа RLE и доказываете своим ┤
│ бы в результате не 20,  а 60 бай-   друзьям, что он лучше, чем чей-то ┤
│ тов - катастрофа!                   другой, то это говорит о недоста- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 18 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ точной  математической  воспитан-      Затем эта таблица используется ┤
│ ности.  Нет здесь лучших или худ-   для создания так называемого дво- ┤
│ ших методов.  Есть методы,  лучше   ичного дерева. (Двоичное дерево - ┤
│ или  хуже приспособленные к конк-   это ветвящаяся структура, у кото- ┤
│ ретным условиям. Один лучше рабо-   рой из каждого узла исходят толь- ┤
│ тает с текстами,  другой с рыхлой   ко две ветви). Это дерево исполь- ┤
│ графикой, третий - с плотной гра-   зуется для генерации нового  сжа- ┤
│ фикой,   а   четвертый  -  еще  с   того кода:                        ┤
│ чем-то.                                                               ┤
│                                              0  /\   1                ┤
│         2. Метод Хафмана.                     /    \                  ┤
│                                             A     0 /\  1             ┤
│    Алгоритм Хафмана  основан   на                 /    \              ┤
│ том наблюдении, что в большинстве                C  0 /  \  1         ┤
│ файлов разные символы встречаются                   /      \          ┤
│ с  разной частотой и поэтому рас-                  D        B         ┤
│ ходовать на каждый из них по рав-                                     ┤
│ ному  количеству  памяти (то есть                Рис. 1               ┤
│ по восемь битов) было бы расточи-                                     ┤
│ тельностью. Алгоритм так изменяет      Левые ветви   дерева  помечены ┤
│ систему кодирования, что для час-   кодом 0, а правые - 1. Имея такое ┤
│ то  повторяющихся  символов можно   дерево, легко найти код для любо- ┤
│ обойтись   одним-двумя    битами,   го символа,  если идти от вершины ┤
│ правда в качестве расплаты за это   к нужному символу.  Итак, в нашем ┤
│ приходится отдавать редко  встре-   случае алгоритм выглядит так:     ┤
│ чающимся  символам по 10,  а то и      Если символ равен "А",  то ему ┤
│ по 15 и даже по  двадцать  битов.   присваивается  двоичный  ноль,  в ┤
│ Поскольку   редко   встречающиеся   противном   случае  -  единица  и ┤
│ символы встречаются по  определе-   рассматривается  следующий   бит. ┤
│ нию редко, то их увеличенная дли-   Если символ - "C",  то он получит ┤
│ на оказывает небольшое влияние на   код 10,  в противном случае - 11. ┤
│ размеры  файла,  зато укороченные   Если символ равен "D", то его код ┤
│ часто встречающиеся  символы  со-   - 110, в противном случае - 111.  ┤
│ лидно уменьшают его размер.            Обратите внимание  на то,  что ┤
│    Проще всего рассмотреть  алго-   хотя в алгоритме  Хафмана  разные ┤
│ ритм Хафмана на простейшем приме-   символы  будут иметь разную бито- ┤
│ ре,  представленном  на  рис.  1.   вую длину, не надо иметь никакого ┤
│ Предположим, что нам надо заархи-   разделителя  между символами.  Вы ┤
│ вировать   следующую   символьную   можете  сами  это  увидеть,  если ┤
│ последовательность:    "AAABCCD".   возьмете любую последовательность ┤
│ Без архивации эта  последователь-   нулей и единиц и попробуете деко- ┤
│ ность заняла бы 7 байтов. С архи-   дировать  ее  с  помощью  дерева, ┤
│ вацией по методу RLE она выгляде-   представленного на рис. 1. Напри- ┤
│ ла бы, как:                         мер, последовательность           ┤
│                                                                       ┤
│      3,"A",1,"B",2,"C",1,"D"                0001111111010110          ┤
│                                                                       ┤
│ то есть  возросла бы до 8-ми бай-   даст Вам текст "AAABBCCD".        ┤
│ тов,  а  алгоритм  Хафмана  может                                     ┤
│ сократить  ее  почти до двух бай-        0 0 0 111 111 10 10 110      ┤
│ тов, и вот как это происходит.           A A A  B   B   C  C  D       ┤
│    Прежде всего,   отметим,   что                                     ┤
│ разные символы встречаются в  на-      а рассмотренный   нами    выше ┤
│ шем тексте по-разному. Чаще всего   текст "AAABCCD" займет всего лишь ┤
│ присутствует  буква  "А".   Можно   13 битов (а это меньше двух  бай- ┤
│ составить таблицу частот:           тов)                              ┤
│                                           A A A  B   C   C   D        ┤
│    A-3     B-1     C-2     D-3            0 0 0 111  10  10 110       ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 19 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Как видите, результат довольно   соответствия)  достаточно   стан- ┤
│ впечатляющ.  Но не спешите  радо-   дартны,  то можно таблицу к файлу ┤
│ ваться,  еще  не все проблемы ис-   не прикладывать,  а перед  сжатым ┤
│ черпаны.                            файлом давать один байт,  в кото- ┤
│                                     ром цифра указывает на то,  каким ┤
│         2.1. Замечание-1.           методом (по какому дереву архиви- ┤
│                                     ровался файл).                    ┤
│    Первая проблема состоит в том,      В этом  случае компрессирующая ┤
│ что  на разных файлах метод может   программа может проверить на  Ва- ┤
│ генерировать разные двоичные  де-   шем  файле несколько разных мето- ┤
│ ревья.  И действительно, Вы пони-   дов,  посмотреть, какой будет эф- ┤
│ маете,  например,  что в  русских   фективнее (скорость от компрессо- ┤
│ текстах   самая  высокая  частота   ра не требуется),  припишет к вы- ┤
│ повтора у буквы "а" и  она  будет   ходному  файлу  префиксный байт и ┤
│ стоять  у вершины дерева и ей бу-   потом осуществит саму  архивацию. ┤
│ дет присвоен код, равный двоично-   Декомпрессирующая   программа  по ┤
│ му  нулю.  А  вот  в англоязычных   первому байту определит каким ме- ┤
│ текстах,  например,  самая частая   тодом была произведена компрессия ┤
│ буква  - это "e" и этот код будет   и,  поскольку таблицы стандартны, ┤
│ присвоен ей. А если Ваш файл - не   произведет  декодирование.   Этот ┤
│ текст,  а  какая-нибудь арифмети-   прием всем хорош,  но только сами ┤
│ ческая  таблица,  то   там   чаще   понимаете,   сколько   лет  может ┤
│ встречается  цифра  "ноль",  а  в   пройти,  пока то или иное предло- ┤
│ файлах графики  чаще  встречаются   жение оформится в качестве общеп- ┤
│ коды "0" и "255".  Представляете,   ризнанного стандарта. Хотя в рам- ┤
│ что будет, если программа-декомп-   ках  программ  одного  автора или ┤
│ рессор  не  будет  знать ничего о   одной  фирмы  этим   пользоваться ┤
│ том, каким двоичным деревом коди-   вполне можно.                     ┤
│ ровался  Ваш файл?  Ничего она не                                     ┤
│ разархивирует, так как понятия не           2.2. Замечание-2.         ┤
│ имеет каким символам (кодам)  со-                                     ┤
│ ответствуют  0,  10,  110,  111 и      В описанном   нами   алгоритме ┤
│ т.д.                                очень большая проблема связана  с ┤
│    Первое решение приходит в  го-   определением конца файла. Как де- ┤
│ лову просто: в самом начале архи-   компрессирующая программа поймет, ┤
│ вированного файла надо записывать   что  файл закончен?  Какой маркер ┤
│ само  дерево,  с помощью которого   поставить в финале?               ┤
│ проходила архивация. Но здесь си-      Первый вариант связан опять же ┤
│ дит ловушка. Ведь если мы архиви-   с возможностью создания специаль- ┤
│ ровали файл  длиной  8  байтов  и   ного хэдера, который записывается ┤
│ сжали его до 2-х байтов, а теперь   перед файлом и в котором указано, ┤
│ к нему приложим справочную табли-   сколько  битов должен иметь файл. ┤
│ цу  длиной  еще  байтов 8-10,  то   Декомпрессирующая программа рабо- ┤
│ ценность от нашей архивации будет   тает  только с этим числом и ни с ┤
│ отрицательной.  Таким образом, на   одним битом больше.               ┤
│ коротких файлах такой метод  Хаф-      Второй вариант  -  изящнее.  В ┤
│ мана ничего не даст и чем длиннее   качестве   маркера   используется ┤
│ файл, тем лучше будет эффект.       символ,  который  не может встре- ┤
│    Второе решение   может   быть,   чаться в файле.  Так, например, в ┤
│ например,  таким.  Мы можем иметь   текстовых  файлах  не  может быть ┤
│ несколько "стандартных" деревьев.   символов больше 127,  поэтому лю- ┤
│ Первое,  например,  для файлов  -   бой  такой  символ будет маркером ┤
│ экранов.  Второе - для англоязыч-   конца  файла.  Но,  к  сожалению, ┤
│ ных текстов. Третье - для русско-   очень  редко  можно заранее знать ┤
│ язычных текстов.  Четвертое - для   точно,  что таких-то или таких-то ┤
│ блоков машинного кода  и  т.д.  и   символов  не  может быть в файле. ┤
│ т.п.  Если  эти  деревья (таблицы   Например,  если Вы делаете  комп- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 20 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ рессор  общего назначения,  то он     2.3.1.  Вариант N1 (простой).   ┤
│ должен работать с чем  угодно,  а                                     ┤
│ не  только  с  текстами.  Как  же      Договоримся, что мы как бы ра- ┤
│ быть, например, с графикой, в ко-   зобъем все символы  нашего  файла ┤
│ торой возможны любые коды от 0 до   на группы по числу битов в номере ┤
│ 255?  В этом случае вводят допол-   символа.  И будем  строить  новое ┤
│ нительный  фальшсимвол  - 256-ой.   представление  двоичного числа из ┤
│ Он будет самым редковстречающимся   двух половинок.  Левая  половинка ┤
│ в файле и может быть в нем встре-   указывает  на номер группы Вашего ┤
│ чен только один раз. В силу своей   числа - сколько  единичек  слева, ┤
│ редкости,  он будет самым длинным   таков и номер группы.  Правая по- ┤
│ и для его записи будет  использо-   ловина - указывает на место числа ┤
│ вана  весьма длинная битовая пос-   в этой группе.  Обратимся к конк- ┤
│ ледовательность, но поскольку это   ретным примерам.                  ┤
│ происходит только один раз,  то в                                     ┤
│ этом и нет ничего страшного. Хотя      Пример 1.  Символ N5. В двоич- ┤
│ старый  принцип  остается в дейс-   ной форме 5=101.  Длина - три би- ┤
│ твии:  "На коротких файлах  алго-   та.  Это число из третьей группы, ┤
│ ритм теряет эффективность".         в которую входят числа 4...7. По- ┤
│                                     рядковый номер числа в  группе  - ┤
│         2.3. Замечание-3.           001  (номер  000 - у числа 4).  В ┤
│                                     итоге мы  имеем  следующее  новое ┤
│    Внимательный читатель  мог  бы   представление:                    ┤
│ поймать нас и еще на одной  неле-                                     ┤
│ пице.  Рассмотрим  наше дерево на              5 = 111 001            ┤
│ рис.  1. В соответствии с ним, мы              /         \            ┤
│ можем  получить таблицу соответс-    номер группы     номер в группе  ┤
│ твия:                                                                 ┤
│              A - 0                     Пример 2. Символ N10. В двоич- ┤
│              C - 10                 ной форме 10=1010. Длина - четыре ┤
│              D - 110                бита.  Число из четвертой группы, ┤
│              .......                в  которую  входят  числа 8...15. ┤
│                                     Порядковый номер в группе - 0010. ┤
│ И если бы мы не закончили с  сим-   В  итоге  имеем  следующее предс- ┤
│ волом "B" (111),  а работали бы с   тавление:                         ┤
│ набором из  многих  символов,  то              10 = 1111 0010         ┤
│ получили  бы  чепуху примерно та-                                     ┤
│ кую:                                   Пример 3. Символ N44. В двоич- ┤
│        4-ый символ - 1110           ной  форме 44 = 101100 - число из ┤
│        5-ый символ - 11110          6-ой группы (от 32 до 63). Поряд- ┤
│        6-ой символ - 111110         ковый  номер  в  группе  - 12-ый, ┤
│        ....................         т.е. в двоичной форме - 001100. В ┤
│                                     итоге  получаем  следующее предс- ┤
│    Нетрудно догадаться, что 255-й   тавление:                         ┤
│ символ  имел бы у нас длину в 255              44 = 111111 001100     ┤
│ битов (32 байта!!!!), а это свело                                     ┤
│ бы   на  "нет"  все  преимущества      На запись символа ушло 12  би- ┤
│ компрессии.                         тов.  Это  и есть наша "расплата" ┤
│    С этой  проблемой  нужно расп-   за то, что мы самые частые симво- ┤
│ равляться  применением   какой-то   лы  кодировали  всего  лишь одним ┤
│ иной  системы двоичного кодирова-   битом.                            ┤
│ ния. Оговоримся сразу, что их мо-      Если Вы внимательно рассмотре- ┤
│ жет быть немало. Вы можете и сами   ли наши примеры,  то легко можете ┤
│ поломать голову,  может быть при-   сформулировать правило,  по кото- ┤
│ думаете что-либо интересное. А мы   рому производится перекодирование ┤
│ Вам дадим здесь  пару  вариантов.   из  обычной  двоичной  системы  в ┤
│ Один простой и один сложный.        рассмотренную нами:               ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 21 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│   1) Берется двоичное число.        го пять байтов. Может быть, это и ┤
│   2) Первая  единица в нем заме-    расточительно,  но ведь  на  этот ┤
│няется на "0".                       "символ" можно подвешивать совсем ┤
│   3) Слева к числу приписывается    не только один  символ,  а  целую ┤
│столько единиц,  сколько битов  в    группу символов.  Так,  например, ┤
│исходном числе.                      Вы  можете  считать,  что   часто ┤
│                                     встречающаяся  последовательность ┤
│   Теперь посмотрим, как работает    "ZX-Spectrum" - это как бы 256-ой ┤
│декомпрессирующая      программа.    символ.   Слово   "компьютер"   - ┤
│Пусть на нее поступила произволь-    257-ой символ и т.д.  и т.п.  Вот ┤
│ная   последовательность   битов,    так   и  составляются  словари  в ┤
│например:                            компьютерных играх.               ┤
│                                                                       ┤
│ 110101010001110011111010101010              2.3.2. Вариант N2         ┤
│        - всего 30 битов                  (рекуррентная система).      ┤
│                                                                       ┤
│   Количество ведущих единиц ука-       Этот вариант модернизации дво- ┤
│зывает  на  длину двоичного кода.    ичной системы  несколько  послож- ┤
│Режем текст по ведущим единицам.     нее,  чем  предыдущий,  но у него ┤
│                                     есть свои преимущества.  Так,  на ┤
│    1101,0,10,10,0,0,111001,         больших  символьных  наборах  (от ┤
│         11110101,10,10              512 разных символов и выше)  этот ┤
│                                     вариант более эффективен.         ┤
│   А теперь  вместо двоичных зна-                                      ┤
│чений поставим порядковые  номера    Номер символа       Представление ┤
│символов:                                                              ┤
│                                        0                   0          ┤
│      3,0,1,1,0,0,5,12,1,1              1                   10         ┤
│       - всего 10 символов              2                   1100       ┤
│                                        3                   1101       ┤
│   Как видите, декодирование про-       4                   1110000    ┤
│исходит  вполне однозначно и нес-       5                   1110001    ┤
│ложно.  Можно и оценить эффектив-       6                   1110010    ┤
│ность  компрессии - 10 символов у       7                   1110011    ┤
│нас хранились в 30 битах (пример-       ............................   ┤
│но в 4-х байтах). Это очень хоро-                                      ┤
│шая эффективность.                      Рассмотрим, например,   как  в ┤
│   Что можно сказать об этой сис-    этой системе образуется  двоичное ┤
│теме?                                представление для числа 5.        ┤
│   Во-первых, можно  сразу  отме-       Все начинается с обычной  дво- ┤
│тить,  что для записи 255-го сим-    ичной формы 5=101.  Далее берется ┤
│вола нам потребуются вместо обыч-    первый бит (1), а последние 2 би- ┤
│ных восьми битов целых  16  и  мы    та  (01)  откладываются в остаток ┤
│можем  только уповать на то,  что    r[5] Измеряется длина  этого  ос- ┤
│такой символ в файле будет редок.    татка l(r[5]). Она равна 2 битам. ┤
│   Во-вторых, можно  отметить еще    Между первой единицей и  остатком ┤
│одну интересную деталь. Мы теперь    записывается  рекуррентное предс- ┤
│можем  иметь  дело и с 256-ым и с    тавление числа 2 - p{2}.          ┤
│500-ым и с любым другим символом.                                      ┤
│Наши коды не ограничены стандарт-    p(5) = 1 + p{l(r[5])} + r[5] =    ┤
│ной длиной одного байта и  потому                      = 1 + p(2) + 01 ┤
│мы можем иметь в нашем символьном                                      ┤
│наборе  хоть  миллион   символов.    p(2) = 1 + p{l(r[1])} + 0 =       ┤
│Поскольку  один миллион - это 2 в                       = 1 + p(1) + 0 ┤
│двадцатой степени,  то для записи    p(1) = 10                         ┤
│миллионного  символа нам потребу-                                      ┤
│ется 2*20=40 битов,  то есть все-    Итого: p(5)=1 1 10 0 01 = 1110001 ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 22 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Еще один пример рассмотрим для          3. А что же дальше?        ┤
│ числа 10.                                                             ┤
│                                        На том,  о  чем мы рассказали, ┤
│         10 DEC = 1010 BIN           исследования,  конечно,  не оста- ┤
│                                     навливаются  и  сейчас в основном ┤
│ p(10) = 1 +p{l(r[10])} + r[10] =    исследования идут по двум направ- ┤
│                  = 1 + p(3) + 010   лениям.  Первое направление - это ┤
│                                     интеллектуализация   архиваторов. ┤
│ p(3) = 1 + p{l(r[1])} + 1 =         Делая несколько проходов по комп- ┤
│                    = 1 + p(1) + 1   рессируемому файлу,  они выбирают ┤
│ p(1) = 10                           наиболее   эффективный  алгоритм, ┤
│                                     пригодный именно для этого файла. ┤
│ Итого:p(10)=1 1 10 1 010=11101010      Второе направление - разработ- ┤
│                                     ка   новых  технологий  архивации ┤
│    Теперь для числа 17.             данных,  для которых не требуется ┤
│                                     100%-ное  соответствие  между ис- ┤
│        17 DEC = 10001 BIN           ходным и результирующим  файлами. ┤
│                                     К ним,  например, относятся став- ┤
│    p(17) = 1 + p(4) + 0001          шие популярными в последнее время ┤
│    p(4)  = 1 + p(2) + 00            JPEG и MPEG-технологии.           ┤
│    p(2)  = 1 + p(1) + 0                Все методы, о которых мы гово- ┤
│    p(1)  = 10                       рили в  этой  статье  выше,  дают ┤
│                                     100%-ную надежность воспроизведе- ┤
│    Итого: p(17) = 111100000001      ния исходного текста при разархи- ┤
│                                     вации.  Да  ведь  иначе и нельзя, ┤
│    Подведем первые итоги:           если имеешь дело с текстом, доку- ┤
│ ────────────┬────────┬───────────   ментом,  программой,  таблицей  и ┤
│ N символа по│Кол-во  │Вариант N1    т.п.  Но, как оказывается, далеко ┤
│ мере убыва- │битов на│(справочно)   не  все  файлы требуют безусловно ┤
│ ния частоты │символ  │              100%-ной  точности  воспроизведе- ┤
│ появления   │        │              ния.  Так,  например,  графика во ┤
│ ────────────┼────────┼───────────   многих случаях может  иметь  пог- ┤
│       0     │   1    │     1        решности  (шумы),  особенно  если ┤
│       1     │   2    │     2        она взята со сканера или видеока- ┤
│      2,3    │   4    │     4        меры.  Звук,  музыка  тоже  могут ┤
│      4-7    │   7    │     6        иметь незначительные погрешности, ┤
│      8-15   │   8    │     8        которые  не  сильно  ухудшают ка- ┤
│     16-31   │  12    │    10        чество материала и не портят впе- ┤
│     32-63   │  13    │    12        чатления от программы,  но позво- ┤
│     64-127  │  14    │    14        ляют  значительно  поднять  плот- ┤
│     128-255 │  15    │    16        ность архивации.  Обычно в JPEG и ┤
│ ────────────┴────────┴───────────   MPEG - методах пользователю  пре- ┤
│                                     доставляется  право выбрать,  что ┤
│    Выводы: Вы видите на  конкрет-   ему дороже -  качество  и  надеж- ┤
│ ных   примерах  (и,  кстати,  это   ность или объем.  Выигрывая в од- ┤
│ подтверждается исследованиями ма-   ном,  пользователь проигрывает  в ┤
│ тематиков),  что  при малом коли-   другом,  а оптимум выбирает в со- ┤
│ честве символов в наборе  вариант   ответствии с тем, какая перед ним ┤
│ N1  является  более  эффективным.   стоит задача.                     ┤
│ Для  наборов  128...512  символов      Все это сейчас только начинает ┤
│ эти   системы  примерно  равны  и   развиваться и Вы можете сами поп- ┤
│ здесь трудно что-то улучшить.  Но   робовать придумать что-либо инте- ┤
│ для очень больших наборов,  в ко-   ресное  и  испытать  свои идеи на ┤
│ торых тысячи  кодируемых  элемен-   "ZX-Спектруме".                   ┤
│ тов, по-видимому нет более эффек-                                     ┤
│ тивных систем,  чем  предложенная             *     *     *           ┤
│ здесь рекуррентная система.                                           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 23 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│       О введении стардарта      ┤ │    2. Стандартные   средства  ZX- ┤
│   на программы для ZX-Spectrum  ┤ │ Spectrum 128К.                    ┤
│  ────────────────────────────── ┤ │    Помимо   средств   ZX-Spectrum ┤
│   (C) SigN,     г.Москва, 1995. ┤ │ 48К,  к стандартным средствам ZX- ┤
└─────────────────────────────────┘ │ Spectrum 128К относятся:          ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    - дополнительные 80К ОЗУ;      ┤
│    Практически каждый,  кто более      - порт   переключения  страниц ┤
│ или  менее  долго  работал  с ZX-   ОЗУ #7FFD;                        ┤
│ Spectrum, сталкивался с проблема-      - дополнительное ПЗУ ZX-Spect- ┤
│ ми совместимости. Многие часы бы-   rum 128К;                         ┤
│ ли  потрачены  синклеристами   на      - дополнительный   графический ┤
│ приведение   своих  Спектрумов  в   экран;                            ┤
│ конфигурацию, наиболее приближен-      - музыкальный сопроцессор (мо- ┤
│ ную к фирменной. Никто не отрица-   жет отсутствовать).               ┤
│ ет,  что для обеспечения нормаль-                                     ┤
│ ной  работы  уже написанных прог-      При использовании дополнитель- ┤
│ рамм это просто  необходимо.  Тем   ного  ПЗУ,  дополнительного   ОЗУ ┤
│ не менее, зададимся вопросом, что   и/или  музыкального  сопроцессора ┤
│ же можно сделать для совместимос-   ZXX-программа обязана  непосредс- ┤
│ ти с различными версиями Спектру-   твенно   и  независимо  проверить ┤
│ ма программ,  которые будут напи-   доступность этих средств.         ┤
│ саны  в  будущем.  Для этих целей                                     ┤
│ предлагается проект стандарта ZXX      3. Стандартные   средства  TR- ┤
│ (ZX eXtension),  описанный в этой   DOS.                              ┤
│ статье.  Программа, удовлетворяю-      К стандартным относятся следу- ┤
│ щая  требованиям  стандарта  ZXX,   ющие способы   взаимодействия   с ┤
│ будет  нормально  выполняться  на   TR-DOS:                           ┤
│ всех  компьютерах  стандарта  ZXX      - посредством USR  15616,  USR ┤
│ (насколько известно автору,  тре-   15619 - из программ на BASIC;     ┤
│ бованиям стандарта ZXX удовлетво-      - посредством  CALL  #3D13   с ┤
│ ряют   все   Спектрум-совместимые   С=0-12, 14, 18-20, 22 (см. ZX-РЕ- ┤
│ компьютеры).  В  программах стан-   ВЮ-93, N1-2) - из программ на ас- ┤
│ дарта ZXX разрешено использование   семблере.                         ┤
│ только перечисленных ниже средств                                     ┤
│ ZX-Spectrum (в частности,  запре-      4. Использование нестандартных ┤
│ щается обращение к портам,  кроме   средств (расширений).             ┤
│ перечисленных ниже).                   Вот, наконец,  и то, для чего, ┤
│                                     в основном, и был предложен стан- ┤
│    1. Стандартные  средства   ZX-   дарт ZXX.  В последнее время поя- ┤
│ Spectrum 48K.                       вилось  несколько  вариантов  ZX- ┤
│    К стандартным  средствам   ZX-   совместимых компьютеров  (ZX-PRO- ┤
│ Spectrum 48К относятся:             FI, ATM-TURBO  и  ATM-TURBO-2)  с ┤
│    - 48К ОЗУ;                       дополнительными     возможностями ┤
│    - ПЗУ  с  прошивкой  1982  или   (расширениями) в режиме ZX-Spect- ┤
│ 1990 г.  (т.е.  в  ZXX-программах   rum (в частности,  дополнительной ┤
│ запрещено  использование программ   памятью (кстати, о дополнительной ┤
│ ПЗУ,  выполняющихся по-разному  в   памяти: для   человека,  умеющего ┤
│ этих прошивках);                    держать в руках паяльник, переде- ┤
│    - графический экран;             лать Спектрум-128  в Спектрум-256 ┤
│    - порт бордюра #XXFE (вывод, Х   не должно представлять существен- ┤
│ - обозначает любую HEX-цифру);      ных проблем)).  Тем не менее, эти ┤
│    - порт клавиатуры #XXFE (ввод);  расширения (а, значит, и програм- ┤
│    - аппаратные прерывания с час-   мы, их   использующие),  явно  не ┤
│ тотой 50  Гц и длительностью сиг-   совместимы, а программистов,  же- ┤
│ нала INT,  варьирующейся в преде-   лающих писать программы для одно- ┤
│ лах от 5 до 20 мкс;                 го и только одного типа компьюте- ┤
│    - порт KEMPSTON-джойстика #XX1F  ра, как   правило,   мало.  Этим, ┤
│ (ввод,  может  отсутствовать).      по-видимому, объясняется    столь ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 24 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ малое количество   программ,  ис-      Здесь MASK  -  маска  модулей, ┤
│ пользующих эти расширения. С дру-   которые  предполагается инсталли- ┤
│ гой стороны, в процессе превраще-   ровать (см.  ниже), а DESTINATION ┤
│ ния Спектрума  в   полупрофессио-   -  адрес инсталляции.  После инс- ┤
│ нальный компьютер  (о  чем  очень   талляции регистры A, H, L и F мо- ┤
│ много говорилось в последнее вре-   гут  изменить свое значение,  ре- ┤
│ мя в ZX-РЕВЮ) эти возможности бы-   гистр BC содержит маску фактичес- ┤
│ ли бы очень кстати.                 ки  инсталлированных  модулей,  а ┤
│                                     регистр DE - адрес первой свобод- ┤
│    Для решения   этой    проблемы   ной ячейки памяти после инсталли- ┤
│ предлагается    подход,   который   рованного драйвера.               ┤
│ прекрасно зарекомендовал себя  на                                     ┤
│ IBM PC-совместимых  компьютерах -      4.3. Вызов функций драйвера.   ┤
│ использование драйверов (в данном      Драйвер расширения состоит  из ┤
│ случае - драйверов расширений).     модулей с номерами от #00 до #0F. ┤
│    Драйвером расширения называет-   Для вызова функций  всех  модулей ┤
│ ся файл, в котором находятся про-   драйвера служит единственная точ- ┤
│ цедуры,  обеспечивающие   взаимо-   ка входа,  равная адресу его инс- ┤
│ действие программ стандарта ZXX с   талляции. Код  вызываемого модуля ┤
│ расширениями.  Этот файл уникален   драйвера помещается в  старшие  4 ┤
│ для каждой конфигурации компьюте-   бита регистра С, код функции это- ┤
│ ра,  но един  для  всех  программ   го модуля - в младшие 4 бита  ре- ┤
│ стандарта ZXX. Во время инициали-   гистра С.  После выполнения функ- ┤
│ зации  программа  пытается  найти   ции в   аккумуляторе    находится ┤
│ драйвер расширения (файл с именем   возвращенное этой функцией значе- ┤
│ "ZXXBIOS"). Если драйвер присутс-   ние,  а содержимое регистров B,C, ┤
│ твует, то ZXX-программа загружает   D,E,H,L и F может быть изменено.  ┤
│ его в любое место  памяти  и  ис-                                     ┤
│ пользует   для  взаимодействия  с      Модуль совместимости    (#00). ┤
│ расширением,  в противном  случае   MASK=#0001. C=#0X.                ┤
│ считается,  что  данный компьютер      C=#00                          ┤
│ не имеет расширения.                   Функция обеспечения  совмести- ┤
│                                     мости  с  ZX-Spectrum 128К.  Если ┤
│    4.1. Определение  версии стан-   конфигурация компьютера позволяет ┤
│ дарта ZXX,  которой соответствует   устанавливать  защелку  совмести- ┤
│ драйвер.                            мости  с  ZX-Spectrum  128К,   то ┤
│    Номер версии   стандарта  ZXX,   функция  делает  это и возвращает ┤
│ которой  соответствует   драйвер,   #00, в противном случае - возвра- ┤
│ хранится  в  первых  двух  байтах   щает #FF.                         ┤
│ файла "ZXXBIOS". Описываемой вер-      С=#0E/#0F                      ┤
│ сии  стандарта предлагается прис-      TURBO ON/OFF: в зависимости от ┤
│ воить номер 1.0 (#0100).            С  устанавливает  или  сбрасывает ┤
│                                     режим  TURBO и возвращает #00.  В ┤
│    4.2. Инсталляция драйвера.       случае невозможности - возвращает ┤
│    ZXX-программа, которой необхо-   #FF.                              ┤
│ дим драйвер   расширения,  должна                                     ┤
│ произвести следующие действия:         Модуль   расширенной    памяти ┤
│    - загрузить  файл "ZXXBIOS" по   (#01). MASK=#0002. C=#1X.         ┤
│ адресу #4000 (размер этого  файла      Предполагается, что  компьютер ┤
│ не должен превышать 6912 байтов);   содержит NPG страниц  расширенной ┤
│    - запустить процедуру  инстал-   памяти размером 16К каждая (вклю- ┤
│ ляции драйвера:                     чая страницы  ZX-Spectrum  128К), ┤
│                                     которые  могут быть "впечатаны" с ┤
│    LD   BC,MASK                     адреса #С000.  Соответствие между ┤
│    LD   DE,DESTINATION              номерами страниц ZX-Spectrum 128К ┤
│    CALL #4002                       и драйвера расширения следующее:  ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 25 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            П Р О Ф Е С С И О Н А Л Ь Н Ы Й     П О Д Х О Д            ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╔═══════╤═══════╦═══════╤═══════╗      С=#12, А=#ХХ (0<=А<NPG)        ┤
│ ║ ZX-Sp │Драйвер║ ZX-Sp │Драйвер║      "Впечатывание" страницы  номер ┤
│ ╟───────┼───────╫───────┼───────╢   А.   Производит    "впечатывание" ┤
│ ║   0   │   0   ║   4   │   3   ║   страницы  с  номером  А  с адреса ┤
│ ║   1   │   1   ║   5   │   -   ║   #С000 и возвращает текущее значе- ┤
│ ║   2   │   -   ║   6   │   4   ║   ние, выведенное в порт #7FFD.     ┤
│ ║   3   │   2   ║   7   │   5   ║                                     ┤
│ ╚═══════╧═══════╩═══════╧═══════╝      Стандарт на  функции  модулей, ┤
│                                     перечисленных ниже,  в  настоящее ┤
│    Если предполагается  использо-   время не разработан.              ┤
│ вать этот модуль, то драйвер дол-                                     ┤
│ жен быть загружен в область памя-      Модуль   расширенной   графики ┤
│ ти до #С000.                        (#02). MASK=#0004. C=#2X.         ┤
│    С=#10                               Модуль    принтера      (#03). ┤
│    Определение количества доступ-   MASK=#0008. C=#3X.                ┤
│ ных страниц NPG. Возвращает NPG.       Модуль  программатора   (#04). ┤
│    С=#11, А=#ХХ                     MASK=#0010. C=#4X.                ┤
│    Установка состояния      порта      Модуль    ZX-модема     (#05). ┤
│ #7FFD. Биты  3-7 регистра А запо-   MASK=#0020. C=#5X.                ┤
│ минаются для дальнейшего вывода в                                     ┤
│ порт #7FFD.                                   *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│       В О З В Р А Щ А Я С Ь     К     Н А П Е Ч А Т А Н Н О М У       ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │  VAL t$(8)*16                     ┤
│       Загрузчик для часов       ┤ │    60 RANDOMIZE USR 64239         ┤
│    ──────────────────────────   ┤ │    70 INPUT "Enter timer (hh:mm): ┤
│     (С) Сергей Сурков, 1994.    ┤ │  "''t$                            ┤
│                                 ┤ │    80 IF LEN t$<>5 THEN  CLS : GO ┤
└─────────────────────────────────┘ │   TO 70                           ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    90 IF t$(1 TO 2)>"12" OR t$(1  ┤
│    В ZX-РЕВЮ-94, N2 (стр.11) была    TO 2)<"01" OR t$(4 TO 5)>"59" OR ┤
│ опубликована программа, выводящая     t$(4 TO 5)<"00" THEN  CLS : GO  ┤
│ на экран  часы.  Мне  кажется,  к    TO 70                            ┤
│ этим часам подошел бы  загрузчик,     100 POKE 64254,VAL t$(1)*16+VAL ┤
│ который бы исчезал после введения     t$(2): POKE 64253,VAL t$(4)*16+ ┤
│ текущего времени и  таймера.  Вот    VAL t$(5)                        ┤
│ листинг такого загрузчика:            110 CLS                         ┤
│                                       120 PRINT #0;"'USR 64246' - sto ┤
│     5 INK 0: PAPER 0: BORDER 0: C    p the clock": PAUSE 0            ┤
│  LEAR 63988                           130 POKE 23627,PEEK 23635: POKE ┤
│    10 LOAD "clock"CODE                23628,PEEK 23636                ┤
│    15 INK 7: CLS                      140 RUN                         ┤
│    20 INPUT "Enter current time (                                     ┤
│  hh:mm:ss):"''t$                       Удаление Бейсик-программы про- ┤
│    25 IF LEN t$<>8 THEN  CLS : GO   исходит следующим образом.  В 130 ┤
│   TO 20                             строке   в  системную  переменную ┤
│    30 IF t$(1 TO 2)>"12" OR t$(1    VARS (адреса переменных) заносит- ┤
│  TO 2)<"01" OR t$(4 TO 5)>"59" OR   ся  значение  PROG  (начало  Бей- ┤
│   t$(4 TO 5)<"00" OR t$(7 TO 8)>"   сик-программы).  При исполнении в ┤
│  59" OR t$(7 TO 8)<"00" THEN  CLS   140 строке команды RUN происходит ┤
│   : GO TO 20                        очистка  области  переменных:   в ┤
│    40 CLS                           данном   случае  затирается  сама ┤
│    50 POKE 64252,VAL t$(1)*16+VAL   Бейсик-программа.                 ┤
│   t$(2): POKE 64251,VAL t$(4)*16+                                     ┤
│  VAL t$(5): POKE 64250,VAL t$(7)+             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 26 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│          Нестандартный          ┤ │    Программа   включает   таблицу ┤
│     загрузчик со счетчиком      ┤ │ (системную  область)   по  адресу ┤
│ ─────────────────────────────── ┤ │ #FC16 - #FC89.                    ┤
│  (С) Штурхолев С.И.,            ┤ │                                   ┤
│           Читинская обл. 1994.  ┤ │    #FC16-#FC19  -  STR$  значений ┤
└─────────────────────────────────┘ │ счетчика (единицы...тысячи).      ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    #FC1A -  флаг запрета/разреше- ┤
│    Существует  загрузчик   блоков   ния включения счетчика.           ┤
│ машинных кодов с заголовком,  при      #FC1B-#FC1C - адрес счетчика в ┤
│ котором на  экран выводится изоб-   таблице.                          ┤
│ ражение четырехзначного счетчика,      #FC1D-#FC31 - адрес счетчика в ┤
│ показывающего,  сколько  осталось   дисплейном файле.                 ┤
│ до конца загрузки программы. Зна-      #FC21-#FC31 - хэдер.           ┤
│ чения счетчика уменьшаются от ка-      #FC32-#FC89 -   шаблоны   цифр ┤
│ кого-то значения до  нуля.  Цифры   счетчика  (стандартно,  по 8 байт ┤
│ сменяются  как в спидометре авто-   на символ); всего - 11 цифр, сле- ┤
│ мобиля или в счетчике ленты  маг-   дующих: 0-1-2-3-4-5-6-7-8-9-0.    ┤
│ нитофона - счетчик состоит как бы                                     ┤
│ из вращающихся дисков с  цифрами.      Сама процедура загрузки по ад- ┤
│ Результат работы придает загружа-   ресу  #FC8A  в  основе   содержит ┤
│ емой программе определенный  вес.   программу LD-BYTES из ПЗУ,  кото- ┤
│ Многие игры с кассет,  записанных   рая была подробно описана  в  РЕ- ┤
│ в С.Петербурге имеют  такой  заг-   ВЮ-93  N1-2  (стр.  13).  Отличия ┤
│ рузчик. После  взлома   обнаружи-   незначительны. Все  адреса   даны ┤
│ лось, что процедура загрузки бло-   для новой процедуры.              ┤
│ ка кодов с заголовком имеет вид:                                      ┤
│                                     FC8A  LD-BYTES  INC  D            ┤
│    #FE81       XOR  A               FC8B            EX   AF,AF'       ┤
│      .         LD   (#FC1A),A       FC8C            DEC  D            ┤
│      .         LD   IX,#FC21        FC8D            DI                ┤
│      .         LD   DE,#0011                                          ┤
│      .         XOR  A                  Далее, для   того,  чтобы  при ┤
│      .         SCF                  загрузке хэдера   не    включался ┤
│      .         CALL #FC8A           счетчик, введены строки:          ┤
│      .         JR   NC,#FE81                                          ┤
│      .         CALL #FE0F           FC8E            EXX               ┤
│      .         LD   A,#01           FC8F            LD   C,#00        ┤
│      .         LD   (#FC1A),A       FC91            EXX               ┤
│      .         LD   IX,(#FC2E)                                        ┤
│      .         LD   DE,(#FC2C)         Далее опять  аналогично ПЗУ:   ┤
│      .         LD   A,#FF                                             ┤
│      .         SCF                  FC92            LD   A,#0A        ┤
│      .         CALL #FC8A           FC94            OUT  (#FE),A      ┤
│      .         JR   NC,#FEAC        FC96            IN   A,(#FE)      ┤
│      .         EI                   FC98            RRA               ┤
│      .         RET                  FC99            AND  #20          ┤
│    #FEAC       JP   #053F           FC9B            OR   #00          ┤
│                                     FC9D            LD   C,A          ┤
│    Загрузка блока кодов без заго-   FC9E            CP   A            ┤
│ ловка осуществляется  нестандарт-   FC9F  LD-BREAK  RET  NZ           ┤
│ ной  процедурой  по адресу #FC8A.   FCA0  LD-START  CALL LD-EDGE-1    ┤
│ При первом ее вызове  считывается   FCA3            JR   NC,LD-BREAK  ┤
│ хэдер в адрес #FC21.  При следую-   FCA5            LD   HL,#0415     ┤
│ щем - загружается  массив  кодов.   FCA8  LD-WAIT   DJNZ LD-WAIT      ┤
│ Эта  процедура  (#FC8A) похожа на   FCAA            DEC  HL           ┤
│ процедуру загрузки ПЗУ  LD_BYTES,   FCAB            LD   A,H          ┤
│ (#0556 или 01366),  но есть опре-   FCAC            OR   L            ┤
│ деленные различия.                  FCAD            JR   NZ,LD-WAIT   ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 27 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ FCAF            CALL LD-EDGE-2      FD09            CP   B            ┤
│ FCB2            JR   NC,LD-BREAK    FD0A            RL   L            ┤
│ FCB4  LD-LEADER LD   B,#9C          FD0C            LD   B,#B0        ┤
│ FCB6            CALL LD-EDGE-2      FD0E            JP   NC,LD-8-BITS ┤
│ FCB9            JR   NC,LD-BREAK    FD11            LD   A,H          ┤
│ FCBB            LD   A,#C6          FD12            XOR  L            ┤
│ FCBD            CP   B              FD13            LD   H,A          ┤
│ FCBE            JR   NC,LD-START    FD14            LD   A,D          ┤
│ FCC0            INC  H              FD15            OR   E            ┤
│ FCC1            JR   NZ,LD-LEADER   FD16            JR   NZ,LD-LOOP   ┤
│ FCC3  LD-SYNC   LD   B,#C9          FD18            LD   A,H          ┤
│ FCC5            CALL LD-EDGE-1      FD19            CP   #01          ┤
│ FCC8            JR   NC,LD-BREAK    FD1B            RET               ┤
│ FCCA            LD   A,B                                              ┤
│ FCCB            CP   #D4               Программы LD-EDGE-2  и  LD-ED- ┤
│ FCCD            JR   NC,LD-SYNC     GE-1 изменены следующим образом:  ┤
│ FCCF            CALL LD-EDGE-1                                        ┤
│ FCD2            RET  NC             FD1C  LD-EDGE-2 CALL LD-EDGE-1    ┤
│                                     FD1F            RET  NC           ┤
│    Опять, для   того,  чтобы  при   FD20  LD-EDGE-1 JP   PICTO        ┤
│ загрузке  хэдера   не   включался   FD23            INC  B            ┤
│ счетчик, поставлен выключатель:     FD24            RET  Z            ┤
│                                     FD25            LD   A,#7F        ┤
│ FCD3            EXX                 FD27            IN   A,(#FE)      ┤
│ FCD4            LD   A,(#FC1A)      FD29            RRA               ┤
│ FCD7            LD   C,A            FD2A            RET  NC           ┤
│ FCD8            LD   (#FC1F),A      FD2B            XOR  C            ┤
│ FCDB            EXX                 FD2C            AND  #20          ┤
│                                     FD2E            JR   Z,LD-SAMPLE  ┤
│    Далее - аналогично ПЗУ:                                            ┤
│                                        Описание работы LD-SAMPLE так- ┤
│ FCDC            LD   H,#00          же можно найти в указанном ZX-РЕ- ┤
│ FCDE            LD   B,#B0          ВЮ. Отличия:                      ┤
│ FCE0            JR   LD-MARKER                                        ┤
│ FCE2  LD-LOOP   EX   AF,AF'         FD30            LD   A,C          ┤
│ FCE3            JR   NZ,LD-FLAG     FD31            CPL               ┤
│ FCE5            JR   NC,LD-VERIFY   FD32            LD   C,A          ┤
│ FCE7            LD   (IX+0),L       FD33            LD   (#5AFE),A    ┤
│ FCEA            JR   LD-NEXT        FD36            LD   (#5AFF),A    ┤
│ FCEC  LD-FLAG   RL   C                                                ┤
│ FCEE            XOR  L              - если  в  отведенное время фронт ┤
│ FCEF            RET  NZ             импульса  найден,   инвертируются ┤
│ FCF0            LD   A,C            все биты на противоположные и вы- ┤
│ FCF1            RRA                 дается  значение  аккумулятора  в ┤
│ FCF2            LD   C,A            две  последние  ячейки атрибутов. ┤
│ FCF3            INC  DE             Это приводит к тому, что при заг- ┤
│ FCF4            JR   LD-DEC         рузке  в двух последних знакомес- ┤
│ FCF6  LD-VERIFY LD   A,(IX+0)       тах можно наблюдать полосы,  ана- ┤
│ FCF9            XOR  L              логичные  бордюрным  (сам  бордюр ┤
│ FCFA            RET  NZ             при загрузке остается черным).    ┤
│ FCFB  LD-NEXT   INC  IX                Далее:                         ┤
│ FCFD  LD-DEC    DEC  DE                                               ┤
│ FCFE            EX   AF,AF'         FD39            SCF               ┤
│ FCFF            LD   B,#B2          FD3A            RET               ┤
│ FD01  LD-MARKER LD   L,#01          FD3B  PICTO     EXX               ┤
│ FD03  LD-8-BITS CALL LD-EDGE-2      FD3C            LD   A,C          ┤
│ FD06            RET  NC             FD3D            OR   A            ┤
│ FD07            LD   A,#CB          FD3E            JR   Z,LD-DELAY   ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 28 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ - если  в  С ноль,  то счетчик не   FD70            INC  E            ┤
│ включать.  Иначе - проверка поло-   FD71            INC  H            ┤
│ жения счетчика:                     FD72            LD   A,(DE)       ┤
│                                     FD73            LD   (HL),A       ┤
│ FD40            LD   HL,#FC1F       FD74            INC  E            ┤
│ FD43            DEC  (HL)           FD75            INC  H            ┤
│ FD44            LD   A,(HL)         FD76            LD   A,(DE)       ┤
│ FD45            JR   Z,SHET         FD77            LD   (HL),A       ┤
│                                     FD78            INC  E            ┤
│    Далее происходит включение ат-   FD79            INC  H            ┤
│ рибутов счетчика,  а в HL - адрес   FD7A            LD   A,(DE)       ┤
│ счетчика в таблице:                 FD7B            LD   (HL),A       ┤
│                                     FD7C            EXX               ┤
│ FD47            CP   #05            FD7D            JP   LD-SAMPLE    ┤
│ FD49            JR   NC,ATT-R                                         ┤
│ FD4B            LD   HL,#FC1B          Далее -  фрагмент осуществляю- ┤
│                                     щий задержку в 358 тактов процес- ┤
│    Теперь переход   на  адреса  в   сора:                             ┤
│ дисплейном файле:                                                     ┤
│                                     FD80  LD-DELAY  LD   B,#17        ┤
│ FD4E            INC  (HL)           FD82  WAIT-1    DJNZ WAIT-1       ┤
│ FD4F            INC  L              FD84            LD   A,#00        ┤
│ FD50            INC  L              FD86            NEG               ┤
│ FD51            DEC  (HL)           FD88            AND  A            ┤
│ FD52            LD   HL,(#FC1B)     FD89            EXX               ┤
│                                     FD8A            JP   LD-SAMPLE    ┤
│    Дальнейшая часть вычисляет ад-                                     ┤
│ рес печатаемой цифры:                  Затем - установка атрибутов  в ┤
│                                     знакоместах счетчика:             ┤
│ FD55            LD   A,(HL)                                           ┤
│ FD56            ADD  A,#32          FD8D  ATT-R     LD   A,#47        ┤
│ FD58            LD   E,A            FD8F            LD   (#5AFA),A    ┤
│ FD59            LD   D,#FC          FD92            LD   (#5AFB),A    ┤
│                                     FD95            LD   (#5AFC),A    ┤
│    Следующий фрагмент рисует шаб-   FD98            LD   (#5AFD),A    ┤
│ лон, лежащий в таблице по адресам   FD9B            INC  HL           ┤
│ #FC32 - #FC89:                      FD9C            INC  HL           ┤
│                                     FD9D            LD   B,#0D        ┤
│ FD5B            LD   HL,(#FC1D)     FD9F            JP   WAIT-1       ┤
│ FD5E            LD   A,(DE)                                           ┤
│ FD5F            LD   (HL),A            Далее следует процедура SHET:  ┤
│ FD60            INC  E                                                ┤
│ FD61            INC  H              FDA2  SHET      LD   B,#4F        ┤
│ FD62            LD   A,(DE)         FDA4            LD   DE,(#FC16)   ┤
│ FD63            LD   (HL),A         FDA8            LD   HL,(#FC18)   ┤
│ FD64            INC  E              FDAB            DEC  E            ┤
│ FD65            INC  H              FDAC            JP   P,DES        ┤
│ FD66            LD   A,(DE)         FDAF            LD   E,B          ┤
│ FD67            LD   (HL),A         FDB0            DEC  D            ┤
│ FD68            INC  E              FDB1            LD   B,#05        ┤
│ FD69            INC  H              FDB3  WAIT-2    DJNZ WAIT-2       ┤
│ FD6A            LD   A,(DE)         FDB5            LD   A,(HL)       ┤
│ FD6B            LD   (HL),A         FDB6            JP   END          ┤
│ FD6C            INC  E              FDB9  DES       LD   A,D          ┤
│ FD6D            INC  H              FDBA            AND  #07          ┤
│ FD6E            LD   A,(DE)         FDBC            JP   Z,SOT-1      ┤
│ FD6F            LD   (HL),A         FDBF            DEC  D            ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 29 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                                       ┤
│                      Алгоритм работы процедуры SHET.                  ┤
│                                                                       ┤
│              ┌───────────────────────────────────────────────┐        ┤
│              │              загрузка в В - #4F               │        ┤
│              │ (значение в таблице начала отсчета счетчика)  │        ┤
│              │в DE - десятки и единицы; в HL - тысячи и сотни│        ┤
│              └───────────────────────┬───────────────────────┘        ┤
│              ┌───────────────────────┴───────────────────────┐        ┤
│       ┌──────┤             Уменьшение единиц (Е)             ├───┐    ┤
│       │    -0└───────────────────────────────────────────────┘=0 │    ┤
│       │                              ┌───────────────────────────┘    ┤
│       │      ┌───────────────────────┴───────────────────────┐        ┤
│       │      │ в Е - #4F и уменьшили десятки на единицу (D)  ├─────┐  ┤
│       │      └───────────────────────────────────────────────┘ВЫХОД│  ┤
│       └──────────────────────────────┐                             │  ┤
│  ┌────────┐  ┌───────────────────────┴───────────────────────┐     │  ┤
│  │задержка│  │  проверили десятки (D) на стабилизацию цифры  │     │  ┤
│  │ на 14  ├──┤  (AND #07  - 8, 16, 24, 32, 40, 48, 56, 72,   ├───┐ │  ┤
│  │ тактов │ДА│    78, 80 - начало каждой цифры в таблице)    │НЕТ│ │  ┤
│  └────┬───┘  └───────────────────────────────────────────────┘   │ │  ┤
│       │                              ┌───────────────────────────┘ │  ┤
│       │      ┌───────────────────────┴───────────────────────┐     │  ┤
│       ├──────┤уменьш. десятки (D) на 1 и провер. на достиж. 0├───┐ │  ┤
│       │    -0└───────────────────────────────────────────────┘=0 │ │  ┤
│       │                              ┌───────────────────────────┘ │  ┤
│       │      ┌───────────────────────┴───────────────────────┐     │  ┤
│       │      │ в регистр D - #4F и уменьшили сотни (L) на 1  ├─────┤  ┤
│       │      └───────────────────────────────────────────────┘ВЫХОД│  ┤
│       └──────────────────────────────┐                             │  ┤
│  ┌────────┐  ┌───────────────────────┴───────────────────────┐     │  ┤
│  │задержка├──┤провер. сотни (L) на стабилизацию цифры (8-80) ├───┐ │  ┤
│  │ на 14  │ДА└───────────────────────────────────────────────┘НЕТ│ │  ┤
│  │ тактов │                          ┌───────────────────────────┘ │  ┤
│  └────┬───┘  ┌───────────────────────┴───────────────────────┐     │  ┤
│       ├──────┤уменьш. сотни (L) на 1 и проверили на достиж. 0├───┐ │  ┤
│       │    -0└───────────────────────────────────────────────┘=0 │ │  ┤
│       │                              ┌───────────────────────────┘ │  ┤
│       │      ┌───────────────────────┴───────────────────────┐     │  ┤
│       │      │ в регистр L - #4F и уменьшили сотни (Н) на 1  ├─────┤  ┤
│       │      └───────────────────────────────────────────────┘ВЫХОД│  ┤
│       └──────────────────────────────┐                             │  ┤
│              ┌───────────────────────┴───────────────────────┐     │  ┤
│       ┌──────┤провер. тысячи (Н) на стабилизацию цифры (8-80)├───┐ │  ┤
│       │    ДА└───────────────────────────────────────────────┘НЕТ│ │  ┤
│       │                              ┌───────────────────────────┘ │  ┤
│       │      ┌───────────────────────┴───────────────────────┐     │  ┤
│       │      │        уменьшили тысячи на единицу (Н)        ├─────┤  ┤
│       │      └───────────────────────────────────────────────┘ВЫХОД│  ┤
│       └─────────────────────────┐         ┌────────────────────────┘  ┤
│              ┌──────────────────┴─────────┴──────────────────┐        ┤
│              │     установили исходные данные в таблице:     │        ┤
│              │ 1. Новые знач. счетчика в таблицу #FC16-#FC19 │        ┤
│              │ 2. В ячейку #FC1B - #FC15                     │        ┤
│              │ 3. В ячейку #FC1D - #50FE                     │        ┤
│              │ 4. В ячейку #FC1F - 4                         │        ┤
│              └───────────────────────────────────────────────┘        ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 30 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ FDC0            JP   P,SOT-2           Регистр DE  также  загружается ┤
│ FDC3            LD   D,B            из таблицы,  а  в  ВС - заносится ┤
│ FDC4            DEC  L              число, соответствующее десятично- ┤
│ FDC5            LD   A,(#8000)      му 1000:                          ┤
│ FDC8            LD   A,(#8000)                                        ┤
│ FDCB            LD   A,(#8000)      FE1A            LD   DE,#FC19     ┤
│ FDCE            JP   END            FE1D  LOOP-2    LD   A,#FF        ┤
│ FDD1  SOT-1     LD   A,(HL)         FE1F            LD   BC,#03E8     ┤
│ FDD2            LD   A,(HL)                                           ┤
│ FDD3  SOT-2     LD   A,L               Повтором получаем в А 0,  1, 2 ┤
│ FDD4            AND  #07            и т.д.:                           ┤
│ FDD6            JP   Z,HANDR-1                                        ┤
│ FDD9            DEC  L              FE22  LOOP-1    INC  A            ┤
│ FDDA            JP   P,HANDR-2      FE23            OR   A            ┤
│ FDDD            LD   L,B            FE24            SBC  HL,BC        ┤
│ FDDE            DEC  H              FE26            JR   NC,LOOP-1    ┤
│ FDDF            NEG                                                   ┤
│ FDE1            JP   END               После сложения  и умножения на ┤
│ FDE4  HANDR-1   LD   A,(HL)         8, кладем это значение в таблицу: ┤
│ FDE5            LD   A,(HL)                                           ┤
│ FDE6  HANDR-2   LD   A,H            FE28            ADD  HL,BC        ┤
│ FDE7            AND  #07            FE29            ADD  A,A          ┤
│ FDE9            JR   Z,END          FE2A            ADD  A,A          ┤
│ FDEB            DEC  H              FE2B            ADD  A,A          ┤
│ FDEC  END       LD   (#FC16),DE     FE2C            LD   (DE),A       ┤
│ FDF0            LD   (#FC18),HL                                       ┤
│ FDF3            LD   HL,#FC15          Умножаем HL на 10:             ┤
│ FDF6            LD   (#FC1B),HL                                       ┤
│ FDF9            LD   HL,#50FE       FE2D            LD   C,L          ┤
│ FDFC            LD   (#FC1D),HL     FE2E            LD   B,H          ┤
│ FDFF            LD   A,#40          FE2F            ADD  HL,HL        ┤
│ FE01            LD   (#FC1F),A      FE30            ADD  HL,HL        ┤
│ FE04            NEG                 FE31            ADD  HL,BC        ┤
│ FE06            NEG                 FE32            ADD  HL,HL        ┤
│ FE08            NEG                                                   ┤
│ FE0A            AND  A                 Переход к  следующей  ячейке и ┤
│ FE0B            EXX                 повтор, если не конец:            ┤
│ FE0C            JP   LD-SAMPLE                                        ┤
│                                     FE33            DEC  DE           ┤
│    В приведенной  процедуре  SHET   FE34            LD   A,E          ┤
│ настолько  точно просчитаны такты   FE35            CP   #15          ┤
│ выполнения,  что она работает  не   FE37            JR   NZ,LOOP-2    ┤
│ хуже процедуры ПЗУ.  Если просчи-   FE39            RET               ┤
│ тать все ветви выхода  программы,                                     ┤
│ то будет 358 тактов.                   Чтобы сменить цифру в  счетчи- ┤
│    Расчет значений счетчика  про-   ке, обозначающую   1  байт,  надо ┤
│ изводится следующим образом. Дли-   сделать 32 вызова процедуры  рас- ┤
│ на программы  в  HL  берется   из   чета значения счетчика.           ┤
│ считанного в таблицу хэдера,  за-      С началом  загрузки программой ┤
│ тем это значение делится на 32:     блока кодов включаются атрибуты в ┤
│                                     правом нижнем углу,  затем с каж- ┤
│ FE0F            LD   HL,(#FC2C)     дым  вызовом  процедуры   LD-EDGE ┤
│ FE12  WAIT-3    LD   B,#05          происходит  смена положения счет- ┤
│ FE14            SRL  H              чика. Так происходит до тех  пор, ┤
│ FE16            RR   L              пока блок кодов не загрузится и в ┤
│ FE18            DJNZ WAIT-3         счетчике не будет "0000".         ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 31 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│      Комментарий ИНФОРКОМА.         error".  Это происходит через ад- ┤
│                                     рес #FE66.  В том варианте, кото- ┤
│    Загрузчик со счетчиком,  кото-   рый приведен в статье, управление ┤
│ рый привел Сергей Штурхолев иног-   передается  на  начало программы, ┤
│ да встречается в  западных  прог-   из-за этого  блокировалась  оста- ┤
│ раммах,  правда, при внимательном   новка загрузки   нажатием  BREAK. ┤
│ анализе листинга видны  некоторые   Если Вам все же необходимо забло- ┤
│ изменения, однако они непринципи-   кировать клавишу BREAK  при  заг- ┤
│ альны. Нам, в частности, при под-   рузке как хэдера, так и основного ┤
│ готовке материала к печати, попа-   блока кодов, можете сделать заме- ┤
│ лась под руку игра "GUN  RUNNER",   ну соответственно:                ┤
│ снабженная таким загрузчиком.                                         ┤
│    Теория - дело хорошее, но пос-   FE4A          JR   NC,#FE3A       ┤
│ мотрим, как же можно использовать                                     ┤
│ такой загрузчик на практике.  Ос-   FE62          JR   NC,#FE3A       ┤
│ новная  процедура загрузчика рас-                                     ┤
│ положена с адреса  #FE81.  Мы  же      Принципиальным моментом  явля- ┤
│ для  получения  более компактного   ется введение  перед командой RET ┤
│ блока расположим эту процедуру  с   команды EI -  без  нее  программа ┤
│ адреса #FE3A. Эту процедуру с ус-   "виснет" при возврате в Бейсик.   ┤
│ пехом можно  использовать  вместо      Следующий не  менее  принципи- ┤
│ LOAD ""CODE, выполняя вместо него   альный момент - это сохранение на ┤
│ RANDOMIZE USR ADR и придавая, та-   стеке значения регистра  HL  аль- ┤
│ ким  образом,  "определенный вес"   тернативного набора перед вызовом ┤
│ своей программе.  Правда при этом   процедуры #FE3A.  Иначе возврат в ┤
│ необходимо соблюсти некоторые мо-   Бейсик будет невозможен. Выполне- ┤
│ менты, о которых мы и хотим расс-   но это может быть так:            ┤
│ казать.  Прежде  всего - сама ос-                                     ┤
│ новная процедура #FE3A  (сравните   FE69            EXX               ┤
│ с листингом в начале статьи):       FE6A            PUSH HL           ┤
│                                     FE6B            EXX               ┤
│ FE3A            XOR  A              FE6C            CALL #FE3A        ┤
│ FE3B            LD   (#FC1A),A      FE6F            EXX               ┤
│ FE3E            LD   IX,#FC21       FE70            POP  HL           ┤
│ FE42            LD   DE,#0011       FE71            EXX               ┤
│ FE45            XOR  A              FE72            RET               ┤
│ FE46            SCF                                                   ┤
│ FE47            CALL #FC8A             Теперь для  порядка  в  начале ┤
│ FE4A            JR   NC,#FE66       программы (перед таблицей) поста- ┤
│ FE4C            CALL #FE0F          вим:                              ┤
│ FE4F            LD   A,#01                                            ┤
│ FE51            LD   (#FC1A),A      FC13            JP   #FE69        ┤
│ FE54            LD   IX,(#FC2E)                                       ┤
│ FE58            LD   DE,(#FC2C)     и можно считать, что дело сделано.┤
│ FE5C            LD   A,#FF                                            ┤
│ FE5E            SCF                    Ниже приведен полный дамп бло- ┤
│ FE5F            CALL #FC8A          ка  кодов загрузчика со всеми не- ┤
│ FE62            JR   NC,#FE66       обходимыми подпрограммами, табли- ┤
│ FE64            EI                  цами и прочими вещами. Он начина- ┤
│ FE65            RET                 ется с адреса 64531 и имеет длину ┤
│ FE66            JP   #0806          608  байт.  Вы можете убедиться в ┤
│                                     том,  что он практически не отли- ┤
│    После первого  вызова подпрог-   чается от того варианта,  о кото- ┤
│ раммы #FC8A (считывания хэдера) в   ром рассказал наш корреспондент.  ┤
│ случае  неудачи программа перехо-      Теперь в Бейсик-загрузчике лю- ┤
│ дит на процедуру ПЗУ,  вызывающую   бой  Вашей  программы  Вы сможете ┤
│ печать  сообщения  "Tape  loading   первой  строкой  поставить:  LOAD ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 32 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ""CODE - загрузится код приведен-   FCC3: 06 C9 CD 20 FD 30 D5 78 :F5 ┤
│ ного загрузчика,  а затем  каждую   FCCB: FE D4 30 F4 CD 20 FD D0 :77 ┤
│ следующую   команду  LOAD  ""CODE   FCD3: D9 3A 1A FC 4F 32 1F FC :94 ┤
│ можно заменить на  RANDOMIZE  USR   FCDB: D9 26 00 06 B0 18 1F 08 :CB ┤
│ 64531. Теперь при загрузке блоков   FCE3: 20 07 30 0F DD 75 00 18 :AF ┤
│ кодов бордюр будет черным,  а  на   FCEB: 0F CB 11 AD C0 79 1F 4F :26 ┤
│ экране  будет изображение счетчи-   FCF3: 13 18 07 DD 7E 00 AD C0 :E9 ┤
│ ка,  показывающего, сколько оста-   FCFB: DD 23 1B 08 06 B2 2E 01 :01 ┤
│ лось до конца загрузки. На рисун-   FD03: CD 1C FD D0 3E CB B8 CB :42 ┤
│ ке приведено изображение экрана в   FD0B: 15 06 B0 D2 03 FD 7C AD :CE ┤
│ момент загрузки на него  картинки   FD13: 67 7A B3 20 CA 7C FE 01 :09 ┤
│ (счетчик - внизу справа):           FD1B: C9 CD 20 FD D0 C3 3B FD :96 ┤
│                                     FD23: 04 C8 3E 7F DB FE 1F D0 :71 ┤
│                                     FD2B: A9 E6 20 28 F3 79 2F 4F :E9 ┤
│                                     FD33: 32 FE 5A 32 FF 5A 37 C9 :45 ┤
│                                     FD3B: D9 79 B7 28 40 21 1F FC :E5 ┤
│                                     FD43: 35 7E 28 5B FE 05 30 42 :EB ┤
│                                     FD4B: 21 1B FC 34 2C 2C 35 2A :6B ┤
│                                     FD53: 1B FC 7E C6 32 5F 16 FC :4E ┤
│                                     FD5B: 2A 1D FC 1A 77 1C 24 1A :86 ┤
│                                     FD63: 77 1C 24 1A 77 1C 24 1A :02 ┤
│                                     FD6B: 77 1C 24 1A 77 1C 24 1A :0A ┤
│                                     FD73: 77 1C 24 1A 77 1C 24 1A :12 ┤
│                                     FD7B: 77 D9 C3 23 FD 06 17 10 :D8 ┤
│                                     FD83: FE 3E 00 ED 44 A7 D9 C3 :30 ┤
│                                     FD8B: 23 FD 3E 47 32 FA 5A 32 :E5 ┤
│                                     FD93: FB 5A 32 FC 5A 32 FD 5A :F6 ┤
│                                     FD9B: 23 23 06 0D C3 82 FD 06 :39 ┤
│                                     FDA3: 4F ED 5B 16 FC 2A 18 FC :87 ┤
│                                     FDAB: 1D F2 B9 FD 58 15 06 05 :E5 ┤
│    Итак, полный дамп блока  кодов   FDB3: 10 FE 7E C3 EC FD 7A E6 :48 ┤
│ загрузчика с контрольными суммами   FDBB: 07 CA D1 FD 15 F2 D3 FD :2E ┤
│ в конце каждой  строки.  Как  его   FDC3: 50 2D 3A 00 80 3A 00 80 :B1 ┤
│ использовать - Вы уже знаете.       FDCB: 3A 00 80 C3 EC FD 7E 7E :2A ┤
│                                     FDD3: 7D E6 07 CA E4 FD 2D F2 :04 ┤
│ FC13: C3 69 FE 48 48 48 48 00 :59   FDDB: E6 FD 68 25 ED 44 C3 EC :28 ┤
│ FC1B: 00 00 00 00 00 00 00 00 :17   FDE3: FD 7E 7E 7C E6 07 28 01 :6B ┤
│ FC23: 00 00 00 00 00 00 00 00 :1F   FDEB: 25 ED 53 16 FC 22 18 FC :95 ┤
│ FC2B: 00 00 00 00 00 00 00 FE :25   FDF3: 21 15 FC 22 1B FC 21 FE :7A ┤
│ FC33: C6 BA BA BA BA C6 FE FE :9F   FDFB: 50 22 1D FC 3E 40 32 1F :52 ┤
│ FC3B: EE CE EE EE EE 82 FE FE :3B   FE03: FC ED 44 ED 44 ED 44 A7 :37 ┤
│ FC43: C6 BA F6 EE DE 82 FE FE :FF   FE0B: D9 C3 23 FD 2A 2C FC 06 :1D ┤
│ FC4B: 82 F6 E6 FA BA C6 FE FE :1B   FE13: 05 CB 3C CB 1D 10 FA 11 :20 ┤
│ FC53: F6 E6 D6 B6 82 F6 FE FE :2B   FE1B: 19 FC 3E FF 01 E8 03 3C :93 ┤
│ FC5B: 82 BE 86 FA BA C6 FE FE :93   FE23: B7 ED 42 30 FA 09 87 87 :48 ┤
│ FC63: E6 DE 86 BA BA C6 FE FE :DF   FE2B: 87 12 4D 44 29 29 09 29 :D7 ┤
│ FC6B: 82 FA F6 F6 EE EE FE FE :A7   FE33: 1B 7B FE 15 20 E4 C9 AF :56 ┤
│ FC73: C6 BA C6 BA BA C6 FE FE :EB   FE3B: 32 1A FC DD 21 21 FC 11 :AD ┤
│ FC7B: C6 BA BA C2 FA C6 FE FE :2F   FE43: 11 00 AF 37 CD 8A FC 30 :BB ┤
│ FC83: C6 BA BA BA BA C6 FE 14 :05   FE4B: 1A CD 0F FE 3E 01 32 1A :C8 ┤
│ FC8B: 08 15 F3 D9 0E 00 D9 3E :95   FE53: FC DD 2A 2E FC ED 5B 2C :F2 ┤
│ FC93: 0A D3 FE DB FE 1F E6 20 :68   FE5B: FC 3E FF 37 CD 8A FC 30 :4C ┤
│ FC9B: F6 00 4F BF C0 CD 20 FD :45   FE63: 02 FB C9 C3 06 08 D9 E5 :B6 ┤
│ FCA3: 30 FA 21 15 04 10 FE 2B :3C   FE6B: D9 CD 3A FE D9 E1 D9 C9 :A3 ┤
│ FCAB: 7C B5 20 F9 CD 1C FD 30 :07                                     ┤
│ FCB3: EB 06 9C CD 1C FD 30 E4 :36             *     *     *           ┤
│ FCBB: 3E C6 B8 30 E0 24 20 F1 :B8                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 33 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ вызов подпрограмм  TR-DOS  данный ┤
│         Полезные советы         ┤ │ способом используется в двух мес- ┤
│ ─────────────────────────────── ┤ │ тах:                              ┤
│  (C) Александр Исаков,          ┤ │                                   ┤
│                 г.Нарва, 1995.  ┤ │    49876  DD E5     PUSH IX       ┤
└─────────────────────────────────┘ │    49878  C3 2F 3D  JP   15663    ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘                                   ┤
│    В. Толстой из г. Петрозаводска   то есть  в этом месте все сделано ┤
│ спрашивает, почему на его  компь-   корректно. Другой фрагмент  прог- ┤
│ ютере не работает DCU 2.02, 2.12,   раммы выглядит так:               ┤
│ 2.31 (ZX-РЕВЮ-94,  N4, стр.22). У                                     ┤
│ меня тоже  не работали все версии      60595  21 30 3D  LD   HL,15664 ┤
│ DCU выше 2.01. Мне кажется, что я      60598  E3        EX   (SP),HL  ┤
│ знаю, в  чем  дело  и могу помочь      60599  C3 DF EE  JP   61151    ┤
│ ему и некоторым другим синклерис-                                     ┤
│ там.                                Найдите с  помощью программ MONS4 ┤
│    Дело в  том,  что  для  вызова   иди DISK-DOCTOR данный стринг,  и ┤
│ подпрограмм TR-DOS есть специаль-   замените в нем #30 на #2F. Теперь ┤
│ ная точка входа по  адресу  15663   программа будет работать на любом ┤
│ (#3D2F). При  обращении через нее   компьютере.                       ┤
│ сначала помещают  на  стек  адрес      Так же  выглядит   аналогичный ┤
│ нужной подпрограммы,  а затем де-   фрагмент и  в  других версиях.  В ┤
│ лают переход по адресу 15663.  По   DCU 2.21:                         ┤
│ этому адресу   находится  команда      60849  21 30 3D  LD   HL,15664 ┤
│ NOP, а за ней  RET.  Переключение      60852  E3        EX   (SP),HL  ┤
│ на ПЗУ  TR-DOS требует некоторого      60853  C3 DD EF  JP   61405    ┤
│ времени, причем это время различ-                                     ┤
│ но  для разных экземпляров компь-   В DCU 2.12:                       ┤
│ ютеров даже одного типа,  так как      61311  21 30 3D  LD   HL,15664 ┤
│ время  задержки распространения у      61314  E3        EX   (SP),HL  ┤
│ применяемых  в  них   микросхемах      61315  C3 A7 F1  JP   61863    ┤
│ имеет  некоторый  разброс.  Между                                     ┤
│ прочим,  если бы этот параметр  у      Кстати, если   выбросить    из ┤
│ них не был,  как правило,  значи-   программы  все  лишнее,  а  затем ┤
│ тельно лучше указанного  в  спра-   сжать ее каким-нибудь  компрессо- ┤
│ вочниках,  то  большинство  наших   ром    (рекомендую   "RAM-PACKER" ┤
│ самоделок не работало бы  вообще.   Д.Степаненко,   текст    которого ┤
│ Команда NOP нужна для обеспечения   опубликован  в  журнале  "ZX+еще" ┤
│ задержки работы программы на  это   N1),  то программа на диске может ┤
│ время.                              стать несколько короче. "Лишним", ┤
│    В DCU же версий 2.02 и выше (а   например,   являются   упражнения ┤
│ также и  в некоторых других прог-   г.Родионова  в употреблении креп- ┤
│ раммах) используется  переход  по   ких  английских  выражений,  что, ┤
│ адресу 15664 (#3D30), то есть не-   по-моему, не делает ему чести при ┤
│ посредственно на   команду   RET.   всем моем к нему уважении,  как к ┤
│ Большинство компьютеров  при этом   программисту.   После  проведения ┤
│ нормально работают,  но  не  все.   данных операций размер  DCU  2.21 ┤
│ Если Ваша машина оказалась именно   сократился  у меня с 61 до 54,  а ┤
│ такой, то  возьмите   MONS4   или   DCU 2.31 с 59 до 47 секторов.     ┤
│ что-нибудь подобное,   найдите  в                                     ┤
│ программе все JP и CALL по адресу      Хочу также  поделиться некото- ┤
│ 15664 и уменьшите адрес на едини-   рым опытом по  вопросу,  рассмот- ┤
│ цу - скорее  всего,  после  этого   ренному  в  статье  Д.Пьянкова  и ┤
│ Ваши неприятности исчезнут.         С.Машарина   "Опыт    русификации ┤
│    Например, в программе DCU 2.31   программ" в ZX-FORUM  на стр.123. ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 34 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ Я делаю это несколько иначе.  Для      В некоторых случаях может ока- ┤
│ поиска символьного набора и  эле-   заться удобнее просматривать файл ┤
│ ментов графики я использую следу-   блоками длиной по 4К.  Для  этого ┤
│ ющую программу:                     нужно изменить  в  программе одну ┤
│                                     строку и добавить две новые:      ┤
│     30 INPUT "address: ";adr                                          ┤
│     40 LET x=adr                      55 FOR n=0 TO 2048 STEP 2048    ┤
│     50 FOR a=16384 TO 16415           60 FOR b=a+n TO a+n+224 STEP 32 ┤
│     60 FOR b=a TO a+224 STEP 32      105 NEXT n                       ┤
│     70 FOR c=b TO b+1792 STEP 256                                     ┤
│     80 POKE c,PEEK x                   Таким способом я русифицировал ┤
│     90 LET x=x+1: NEXT c            "геркулес".   Рисовать   символы, ┤
│    100 NEXT b                       имея на  экране  весь  символьный ┤
│    110 NEXT a                       набор   одновременно,   оказалось ┤
│    120 PRINT #0;x;" ";              очень удобно.  Точно таким же об- ┤
│    130 PAUSE 0                      разом  я  редактировал символьный ┤
│    140 GO TO 50                     набор  принтера   "IBM-PROPRINTER ┤
│                                     II". Только символы на экране при ┤
│    Эта программа выводит содержи-   этом оказались расположенными го- ┤
│ мое памяти с заданного адреса  на   ризонтально, да еще и задом-напе- ┤
│ экран в  его верхнюю треть верти-   ред. Для того,  чтобы они приняли ┤
│ кальными колонками, то есть длина   более удобное положение, пришлось ┤
│ блока, который  можно  видеть од-   изменить несколько строк:         ┤
│ новременно, составляет 2К. В ниж-                                     ┤
│ ней части  экрана выводится адрес      55 FOR n=2048 TO 0 STEP -2048  ┤
│ начала следующего блока,  который      60 FOR  b=a+n+224  TO a+n STEP ┤
│ будет выведен  на экран при нажа-   -32                               ┤
│ тии любой клавиши.  Когда найдете      70 FOR c=b+1792 TO b STEP -256 ┤
│ то, что  Вам  требуется,  нажмите                                     ┤
│ BREAK. Затем  содержимое   экрана      В таком виде программа начина- ┤
│ можно записать на диск,  отредак-   ет рисовать колонки снизу вверх.  ┤
│ тировать в ARTSTUDIO и  поместить      Ну и,  уж  если  речь  зашла о ┤
│ на прежнее  место при помощи этой   принтерах, то хочу предложить еще ┤
│ же программы,  поменяв  предвари-   одну программу,  написанную  моим ┤
│ тельно местами переменные в стро-   сыном Андреем, которому тогда бы- ┤
│ ке 80.                              ло 15 лет.  Она предназначена для ┤
│    Использование   полноэкранного   тех, кто  пользуется   редактором ┤
│ редактора,  по-моему,  удобнее  и   TLW2.                             ┤
│ нагляднее,  чем редактора фонтов.      Этот редактор предназначен для ┤
│ Для  большего   удобства   хорошо   работы с принтером, имеющим коди- ┤
│ включить  шахматное поле и зафик-   ровку КОИ-7.  Но   очень   многие ┤
│ сировать его,  установив  в  меню   принтеры ее не имеют.  Предлагае- ┤
│ атрибутов  опцию  Bright-Transpa-   мая программа перекодирует  посы- ┤
│ rent.  Тогда  удобнее  ориентиро-   лаемые на  принтер  коды из коди- ┤
│ ваться в группах по 8 байтов. Ес-   ровки КОИ-7 в альтернативную.  Ее ┤
│ ли в этот блок попадет кроме гра-   можно разместить  в любом свобод- ┤
│ фики и еще что-то - ничего страш-   ном месте памяти  и  вызвать  как ┤
│ ного.  Просто не трогайте при ре-   подпрограмму из драйвера принтера ┤
│ дактировании ничего лишнего.        непосредственно перед  обращением ┤
│    Конечно, работает    программа   к порту.  Код печатаемого символа ┤
│ медленно  и уровень предоставляе-   при этом находится в регистре А.  ┤
│ мых ей пользователю удобств  бли-      Для работы  с  этой программой ┤
│ зок  к нулевому,  но зато в Вашем   нужно поместить в таблице УКП ко- ┤
│ распоряжении  остается   максимум   ды: рус.  - 253,  лат. - 254. Они ┤
│ памяти.                             служат для включения и выключения ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 35 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│  00010        PUSH AF      ;Сохранение регистра А на стеке.           ┤
│  00020        LD   A,(UK)  ;Проверка состояния флага UK               ┤
│  00030        CP   0       ;  (управляющий код - символ).             ┤
│  00040        JR   Z,X2    ;Переход на Х2, если он сброшен.           ┤
│  00050        XOR  A       ;Сброс флага, если он установлен           ┤
│  00060 X1     LD   (UK),A  ;  и выход с восстановлением А.            ┤
│  00070        JR   X6      ;                                          ┤
│  00080 X2     POP  AF      ;Восстановление А                          ┤
│  00090        PUSH AF      ;  с сохранением его на стеке.             ┤
│  00100        CP   27      ;Установка флага UK                        ┤
│  00110        JR   NZ,X3   ;  если в А код 27.                        ┤
│  00120        LD   A,1     ;                                          ┤
│  00130        JR   X1      ;                                          ┤
│  00140 X3     CP   253     ;Установка или сброс флага RUS             ┤
│  00150        JR   NZ,X4   ;  (русский - латинский)                   ┤
│  00160        LD   A,1     ;  если в А 253 или 254.                   ┤
│  00170        JR   X5      ;                                          ┤
│  00180 X4     CP   254     ;                                          ┤
│  00190        JR   NZ,X7   ;                                          ┤
│  00200        XOR  A       ;                                          ┤
│  00210 X5     LD   (RUS),A ;                                          ┤
│  00220        POP  AF      ;Уменьшение SP для того, чтобы произошел   ┤
│                            ;  возврат не в драйвер принтера, а сразу  ┤
│                            ;  в редактор без печати кодов 253 и 254.  ┤
│  00230 X6     POP  AF      ;Выход с восстановлением А.                ┤
│  00240        RET          ;                                          ┤
│  00250 X7     LD   A,(RUS) ;Проверка флага RUS и переход к программе  ┤
│  00260        CP   1       ;  перекодирования, если он равен 1,       ┤
│  00270        JR   Z,X8    ;  в противном случае - выход              ┤
│  00280        JR   X6      ;  с восстановлением А.                    ┤
│  00290 X8     POP  AF      ;                                          ┤
│  00300        PUSH BC      ;Сохранение регистров на стеке.            ┤
│  00310        PUSH DE      ;                                          ┤
│  00320        PUSH HL      ;                                          ┤
│  00330        PUSH AF      ;                                          ┤
│  00340        LD   HL,KOI7 ;Загрузка в регистры                       ┤
│  00350        LD   DE,ALT  ;  адресов                                 ┤
│  00360        LD   B,63    ;  и длины таблиц.                         ┤
│  00370 X9     LD   A,(HL)  ;Сравнение числа в А с числом              ┤
│  00380        LD   C,A     ;  в таблице KOI-7.                        ┤
│  00390        POP  AF      ;                                          ┤
│  00400        PUSH AF      ;                                          ┤
│  00410        CP   C       ;                                          ┤
│  00420        JR   NZ,X10  ;Загрузка соответствующего числа           ┤
│  00430        POP  AF      ;  из таблицы ALT при равенстве            ┤
│  00440        LD   A,(DE)  ;  или переход к следующему числу.         ┤
│  00450        JR   X11     ;                                          ┤
│  00460 X10    INC  HL      ;                                          ┤
│  00470        INC  DE      ;                                          ┤
│  00480        DJNZ X9      ;                                          ┤
│  00490        POP  AF      ;                                          ┤
│  00500 X11    POP  HL      ;Выход с восстановлением регистров.        ┤
│  00510        POP  DE      ;                                          ┤
│  00520        POP  BC      ;                                          ┤
│  00530        RET          ;                                          ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 36 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│  00540 RUS    DEFB 0       ;Флаг "РУССКИЙ - ЛАТИНСКИЙ".               ┤
│  00550 UK     DEFB 0       ;Флаг "УПРАВЛЯЮЩИЙ КОД - СИМВОЛ".          ┤
│  00560 KOI7   DEFB 97,98,119,103,100,101,118,122,105,106              ┤
│  00570        DEFB 107,108,109,110,111,112,114,115,116,117            ┤
│  00580        DEFB 102,104,99,126,123,125,121,120,124,96              ┤
│  00590        DEFB 113,65,66,87,71,68,69,86,90,73                     ┤
│  00600        DEFB 74,75,76,77,78,79,80,82,83,84                      ┤
│  00610        DEFB 85,70,72,67,94,91,93,95,89,88                      ┤
│  00620        DEFB 92,64,81                                           ┤
│  00630 ALT    DEFB 128,129,130,131,132,133,134,135,136,137            ┤
│  00640        DEFB 138,139,140,141,142,143,144,145,146,147            ┤
│  00650        DEFB 148,149,150,151,152,153,155,156,157,158            ┤
│  00660        DEFB 159,160,161,162,163,164,165,166,167,168            ┤
│  00670        DEFB 169,170,171,172,173,174,175,224,225,226            ┤
│  00680        DEFB 227,228,229,230,231,232,233,234,235,236            ┤
│  00690        DEFB 237,238,239                                        ┤
│                                                                       ┤
│ режима перекодировки.   Для  пра-      Ассемблировать программу лучше ┤
│ вильного использования команд уп-   всего под адрес 47793.  При  этом ┤
│ равления принтером в любом режиме   на 213  байтов  (длина программы) ┤
│ не перекодируется один байт после   сокращается адресное   пространс- ┤
│ кода 27.  Если требуется включить   тво, отводимое  под редактируемый ┤
│ в текст команду принтера у  кото-   текст, поэтому не забудьте внести ┤
│ рой третий байт больше 64,  нужно   новый адрес   вершины  текстового ┤
│ заранее перейти в латинский алфа-   файла в адреса  65193  (#FEA9)  и ┤
│ вит.                                65252 (#FEE4).  До  изменения там ┤
│    При необходимости  работать  с   должно быть число 48000 (#BB80).  ┤
│ "основной", "болгарской" кодиров-                                     ┤
│ кой  или КОИ-8,  достаточно заме-             *     *     *           ┤
│ нить вторую таблицу.                                                  ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │    Схема интерфейса мыши показана ┤
│         KEMPSTON-MOUSE          ┤ │ на следующей странице. Микросхема ┤
│ ─────────────────────────────── ┤ │ D1-D4,  D7, оптопары и дискретные ┤
│  (С) М.Свечков (схема),         ┤ │ элементы  входят  в  состав   "ММ ┤
│      К.Мехедов (программа),     ┤ │ 8031".  D5,  D6,  D8  - это новые ┤
│              респ. Крым, 1995.  ┤ │ элементы,  которые   подключаются ┤
└─────────────────────────────────┘ │ навесным   монтажом  к  имеющейся ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ плате и располагаются внутри кор- ┤
│    За рубежом   наибольшее  расп-   пуса   мыши.   Нумерация  выводов ┤
│ ространение  получили  мыши  двух   разъема - для вилки РП15-9Ш.  Ли- ┤
│ типов:  AMX и KEMPSTON.  Нам уда-   нии  PD0-PD4 подключаются к порту ┤
│ лось   эмулировать    конструкцию   с адресом 223 DEC (#DF).  В край- ┤
│ KEMPSTON-MOUSE, опираясь на рабо-   нем   случае  можно  использовать ┤
│ ту драйвера мыши из программы AR-   порт KEMPSTON-джойстика (#1F), но ┤
│ TIST-2.                             тогда  при  работе с программами, ┤
│                                     которые     управляются     KEMP- ┤
│    Предлагаемое устройство собра-   STON-джойстиком,  мышь надо будет ┤
│ но на базе "МАНИПУЛЯТОРа ММ 8031"   отключать.  Чтобы отключение про- ┤
│ для компьютера "КОРВЕТ".  В край-   исходило  безболезненно,  сигналы ┤
│ нем случае, можно взять мышь пас-   A8,  A10 лучше снимать не прямо с ┤
│ сивного типа,  имеющую только оп-   шины адреса,  а через буфер. Мик- ┤
│ топары и триггеры Шмитта (D1),  а   росхема К555КП14 (D8) использует- ┤
│ остальную схему собрать отдельно.   ся в случае, если порт инвертиру- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 37 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│ ет принимаемый    сигнал   (KEMP-      А10=0 -  порт  Х  (счетчик D3, ┤
│ STON-порт в 1-м "Ленинграде").  В   триггер D5.1);                    ┤
│ противном  случае  она заменяется      А10=1 - порт Y (D4, D5.2 соот- ┤
│ на К555КП11 (или К555КП16),  узел   ветственно).                      ┤
│ инвертора  на  D2.4 исключается и      Как иллюстрация   предлагается ┤
│ сигнал на PD4 идет прямо с вывода   драйвер для   обслуживания  KEMP- ┤
│ 4 микросхемы D6.                    STON-MOUSE. Он представляет собой ┤
│    Программно мышь   опрашивается   своеобразный гибрид:   работая  с ┤
│ по трем портам:                     мышью, выдает  информацию  анало- ┤
│    1. 64229 (#FADF) - кнопки.       гично джойстику  -  какие  кнопки ┤
│    2. 64479 (#FBDF) - коорд. Х.     нажаты и в какую сторону произво- ┤
│    3. 65503 (#FFDF) - коорд. Y.     дится движение.   Вычислением  же ┤
│                                     текущих координат курсора  должна ┤
│    Для схемы младший байт (#DF) -   заниматься вызывающая  программа. ┤
│ это уже упомянутый адрес порта, а   При вызове этого драйвера  компь- ┤
│ старший  определяет снимаемую ин-   ютер зацикливается  до  тех  пор, ┤
│ формацию с мыши. Мультиплексор D8   пока не будет произведено  движе- ┤
│ управляется  с шины адреса линией   ние мыши  либо изменено состояние ┤
│ А8 - кнопки/координаты:  при А8=0   ее кнопок.  Выход  по   изменению ┤
│ (#FADF)  опрашиваются кнопки (SB1   состояния  кнопок (а не просто по ┤
│ - ВВОД,  SB2 - ОТМЕНА).  При А8=1   факту их нажатия)  позволяет  ис- ┤
│ подключаются порты координат, ко-   пользовать драйвер  в  программах ┤
│ торые, в свою очередь, выбираются   типа графического  редактора:  Вы ┤
│ линией  А10  (мультиплексоры  D6,   постоянно удерживаете   какую-ни- ┤
│ D7):                                будь кнопку мыши (например, функ- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 38 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ цию "рисовать")  и выход из драй-      3-я (координата Y):            ┤
│ вера происходит только  когда  Вы         0 - движение по Y вниз;     ┤
│ изменяете положение   мыши.  Если         1 - движение по Y вверх.    ┤
│ такой вариант Вам  не  нужен,  то                                     ┤
│ перед использованием     драйвера      Ячейки 2 и 3 используются  как ┤
│ нужно просто проверить  состояние   счетчики срабатываний    датчиков ┤
│ кнопок и продолжать работу только   мыши по соответствующим координа- ┤
│ если они не нажаты. В своей рабо-   там. Движение  считается произве- ┤
│ те драйвер  использует три распо-   денным, если датчик сработал  оп- ┤
│ ложенных подряд  ячейки   памяти,   ределенное количество раз.  Чувс- ┤
│ которые одновременно  дают инфор-   твительность драйвера можно регу- ┤
│ мацию по выходе из него:            лировать в  пределах 1-126 сраба- ┤
│                                     тываний датчика.                  ┤
│    1-я (состояние кнопок):             Если по  выходе  из драйвера в ┤
│       0 - не нажаты;                ячейках 2 или 3 число не 0  и  не ┤
│       1 - нажата кнопка ВВОД;       1, то значит в данном цикле рабо- ┤
│       2 - нажата кнопка ОТМЕНА;     ты движения по координатам не бы- ┤
│       3 - нажаты обе кнопки.        ло. Перед  самым  первым  вызовом ┤
│    2-я (координата Х):              драйвера в ячейки 2 и  3  следует ┤
│       0 - движение по Х влево;      занести число 128.                ┤
│       1 - движение по Х вправо.        Ниже приведен текст драйвера.  ┤
│ ═════════════════════════════════════════════════════════════════════ ┤
│                                                                       ┤
│       ORG  30000    ;                                                 ┤
│       LD   HL,31000 ;Адрес первой используемой ячейки памяти.         ┤
│       LD   BC,64223 ;В ВС адрес порта состояния кнопок.               ┤
│       IN   A,(C)    ;                                                 ┤
│       CPL           ;Инвертируем полученный байт, потому что нажатой  ┤
│                     ; кнопке соответствует 0, ; а отпущенной - 1.     ┤
│       AND  3        ;Выделяем 2 младших бита.                         ┤
│       LD   (HL),A   ;Запоминаем в 1-й яч. начальное состояние кнопок. ┤
│       LD   BC,64479 ;В ВС адрес порта координаты Х.                   ┤
│       IN   A,(C)    ;                                                 ┤
│       LD   D,A      ;Запоминаем в D текущее состояние порта Х.        ┤
│       LD   BC,65503 ;В ВС адрес порта координаты Y.                   ┤
│       IN   A,(C)    ;                                                 ┤
│       LD   E,A      ;Запоминаем в Е текущее состояние порта Y.        ┤
│       CALL NEW      ;Вызываем подпрограмму начальной установки        ┤
│       CALL NEW      ; ячеек 2 и 3.                                    ┤
│       DEC  HL       ;Возвращаем HL к ячейке 1.                        ┤
│ REP   DEC  HL       ;                                                 ┤
│       LD   BC,64223 ;Повторяем опрос кнопок.                          ┤
│       IN   A,(C)    ;                                                 ┤
│       CPL           ;                                                 ┤
│       AND  3        ;                                                 ┤
│       CP   (HL)     ;Сравниваем новое состояние с запомненным в яч.1. ┤
│       JR   Z,CONT   ;Продолжение работы, если состояние не изменилось.┤
│       LD   (HL),A   ;Иначе - запоминаем новое состояние               ┤
│       RET           ; и возврат.                                      ┤
│ CONT  LD   BC,64479 ;Опрос порта Х.                                   ┤
│       IN   A,(C)    ;                                                 ┤
│       LD   B,D      ;                                                 ┤
│       LD   D,A      ;                                                 ┤
│       CALL MOVE     ;Вызов подпрограммы анализа портов координат; в   ┤
│                     ; В - предыдущее состояние порта, в А - текущее.  ┤
│       LD   BC,65503 ;Опрос порта Y.                                   ┤
│       IN   A,(C)    ;                                                 ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 39 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│       LD   B,E      ;                                                 ┤
│       LD   E,A      ;                                                 ┤
│       CALL MOVE     ;                                                 ┤
│       LD   A,(HL)   ;Проверка ячейки 3.                               ┤
│       AND  #FE      ;Отбрасываем 0-й бит.                             ┤
│       RET  Z        ;Возврат, если в ячейке 0 или 1.                  ┤
│       DEC  HL       ;В HL - адрес ячейки 2.                           ┤
│       LD   A,#FE    ;                                                 ┤
│       AND  (HL)     ;                                                 ┤
│       RET  Z        ;Возврат, если в ней 0 или 1.                     ┤
│       JR   REP      ;Повторение цикла опроса состояния мыши.          ┤
│ NEW   INC  HL       ;Подпрограмма начальной установки ячеек 2 и 3;    ┤
│       LD   A,#FE    ; если в ячейке 0 или 1, значит при предыдущем    ┤
│       AND  (HL)     ; вызове драйвера происходило движение по         ┤
│       RET  NZ       ; данной координате и теперь в соответствующую    ┤
│       LD   A,128    ; ячейку нужно занести исходное значение          ┤
│       LD   (HL),A   ; счетчика перемещений - 128.                     ┤
│       RET           ;                                                 ┤
│ MOVE  INC  HL       ;Подпрограмма сравнения текущего (А) и            ┤
│       CP   B        ; предыдущего (В) состояния портов координат.     ┤
│       RET  Z        ;Возврат, если состояние не изменилось.           ┤
│       SUB  B        ;Определяем, увеличилось или уменьшилось          ┤
│                     ; число, читаемое из порта.                       ┤
│       JR   C,SMAL   ;Переход на SMALL, если число уменьшилось.        ┤
│       AND  16       ;Проверяем значение 4-го бита разности.           ┤
│       JR   NZ,MINUS ;Если включен, значит произошло переключение с    ┤
│                     ; 0 на 31 (т.е. число увеличилось, но движение    ┤
│                     ; идет в сторону уменьшения - переход на MINUS.   ┤
│ PLUS  INC  (HL)     ;Увеличиваем значение счетчика.                   ┤
│       LD   A,132    ;Проверяем, достигло ли значение счетчика 132     ┤
│       CP   (HL)     ; (4 срабатывания датчика мыши; изменяя число 132 ┤
│                     ; можно регулировать чувствительность мыши при    ┤
│                     ; увеличении координаты).                         ┤
│       RET  NZ       ;Возврат, если не достигло.                       ┤
│       LD   A,1      ;Иначе - в соответствующую яч. записываем число   ┤
│       LD   (HL),A   ; 1 (произошло движение в сторону увеличения)     ┤
│       RET           ; и возврат.                                      ┤
│ SMAL  CPL           ;Если текущее значение порта меньше предыдущего,  ┤
│                     ; то получим значение разности по модулю          ┤
│       INC  A        ; и действуем аналогично варианту увеличения      ┤
│       AND  16       ; значения порта.                                 ┤
│       JR   NZ,PLUS  ;                                                 ┤
│ MINUS DEC  (HL)     ;                                                 ┤
│       LD   A,124    ;Число 124 - аналогично числу 132 у метки PLUS    ┤
│       CP   (HL)     ; определяет чувствительность при уменьшении      ┤
│       RET  NZ       ; координаты.                                     ┤
│       XOR  A        ;                                                 ┤
│       LD   (HL),A   ;           ╔════════════════════════════════════ ┤
│ ════════════════════════════════╝   ┌─────────────────────────────┐   ┤
│                                     │   334370, Республика Крым,  │   ┤
│    Длина драйвера = 118 байтов.     │ пгт.Раздольное, пр-т 30 лет │   ┤
│                                     │     Победы, д.7, кв.5.      │   ┤
│   Те, у кого появились вопросы по   │      Свечкову Михаилу.      │   ┤
│ предложенному  интерфейсу,  могут   └─────────────────────────────┘   ┤
│ обратиться к автору по следующему                                     ┤
│ адресу:                                      *     *     *            ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 40 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ (C) Артур Артамонов,              ┤
│      Несколько устройств        ┤ │              г.Червоноград, 1994. ┤
│     для Вашего "Спектрума"      ┤ │                                   ┤
│                                 ┤ │    Предлагаю два  варианта   уст- ┤
└─────────────────────────────────┘ │ ройства "AUTOFIRE" для Спектрума. ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘                                   ┤
│ (С) Александр Минеев,                                                 ┤
│              г.Владивосток, 1995.                                     ┤
│                                                                       ┤
│    Предлагаю вниманию   читателей                                     ┤
│ две схемы,  навеянные  общением с                                     ┤
│ IBM PC и появившиеся в результате                                     ┤
│ желания перетащить   на  Спектрум                                     ┤
│ всякие полезные,  или по  крайней                                     ┤
│ мере привычные вещи.                                                  ┤
│    Первая схема позволяет  выпол-                                     ┤
│ нить  "сброс"  компьютера так же,                                     ┤
│ как это происходит на IBM при од-                                     ┤
│ новременном  нажатии  на  клавиши                                     ┤
│ ALT-CTRL-DEL. На  Спектруме   это                                     ┤
│ произойдет при  одновременном на-                                     ┤
│ жатии на клавиши  1-2-3.  Сигналы                                     ┤
│ KD1-KD3 и A11 берутся с этих кла-                                     ┤
│ виш.                                                                  ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                        (С) О.В.Закревский,            ┤
│                                                       г.Москва, 1995. ┤
│    Весьма полезно  бывает  замед-                                     ┤
│ лить работу  компьютера в некото-      Системный разъем   может  быть ┤
│ рых игрушках.  В SETUPе PC  можно   очень  аккуратно  реализован  для ┤
│ замедлить работу  компьютера в 2,   любого компьютера. Для этого дос- ┤
│ 4, ...  32 раза.  Следующая схема   таточно сделать небольшую  плату, ┤
│ позволяет сделать то же самое для   на  которой расположится панелька ┤
│ Спектрума. Скважность   импульсов   для процессора Z80 и  разъем,  на ┤
│ на выходе можно изменять резисто-   который выведены все сигналы про- ┤
│ ром R1 от 1.003 до 200.  При  за-   цессора. Эта плата устанавливает- ┤
│ медлении в 200 раз в игрушках хо-   ся  в панельку для процессора Z80 ┤
│ рошо видно, как сделаны перелива-   на основной плате. Получится сис- ┤
│ ющиеся надписи,  как организовано   темный разъем  без единого прово- ┤
│ движение спрайтов и другие  инте-   да. Это конечно в простейшем  ва- ┤
│ ресные вещи.                        рианте. На  этой  же  плате можно ┤
│                                     расположить и буферные  элементы, ┤
│                                     музыкальный сопроцессор и т.д.    ┤
│                                        Однако,  у   многих    моделей ┤
│                                     компьютеров процессор  установлен ┤
│                                     не на панельке, а запаян в плату. ┤
│                                     Кроме того, свое ограничение нак- ┤
│                                     ладывает конструктив,  из-за чего ┤
│                                     провода все же могут понадобиться ┤
│                                     для  установки системного разъема ┤
│                                     в подходящем месте корпуса.       ┤
│                                               *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 41 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                   Ч И Т А Т Е Л Ь - Ч И Т А Т Е Л Ю                   ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ ду содержимым ВС и тем,  что даст ┤
│      Опыт работы с "BLAST"      ┤ │ USR - нет.                        ┤
│ ─────────────────────────────── ┤ │                                   ┤
│ (C) Вячеслав Солдатов (RenSoft) ┤ │    3. Не   все  переменные  можно ┤
│          Приморский край, 1994. ┤ │ объявлять,  как  целые  (командой ┤
└─────────────────────────────────┘ │ REM ! INT). Так, объявив перемен- ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ ную J - целой,  использовав ее  в ┤
│    Я сейчас работаю над стратеги-   цикле  FOR-NEXT,  а затем снова в ┤
│ ческой игрой "Разрушители", клас-   цикле,  в любом месте  программы, ┤
│ са "Rebel Star".  Скоро она будет   Вы  получите сообщение "3,  Subs- ┤
│ готова, и я собираюсь выслать эк-   cript wrong" - ошибочный  индекс. ┤
│ земпляр для дистрибуции.            Если же не объявлять как INT,  то ┤
│                                     все О.К.  Это же сообщение иногда ┤
│    А пока  пишу  вот  о чем.  Эту   появляется  при считывании опера- ┤
│ программу я написал  на  Бейсике,   торами READ - DATA.  Причем, мас- ┤
│ но критические точки обрабатывают   сивов и близко нет,  а ведь в ин- ┤
│ подпрограммы в машинных кодах. Но   терпретаторе - все работает.      ┤
│ все-таки  я решил откомпилировать                                     ┤
│ Бейсик-часть  (а  она  составляет      4. Встроенные операторы, начи- ┤
│ примерно 15К).  "TOBOS-FP", о ко-   нающиеся с REM & -  не  работают. ┤
│ тором Вы писали в РЕВЮ, отказался   Даже, если после REM написать аб- ┤
│ компилировать команды типа RANDO-   ракадабру, BLAST молча  проглотит ┤
│ MIZE USR ...,  так  что  пришлось   ее без всяких последствий. А поп- ┤
│ обратиться   к  наиболее  мощному   робуйте написать что-нибудь  нес- ┤
│ компилятору BLAST,  и работать  с   тандартное после  REM  !  - и при ┤
│ ним, пользуясь Вашей инструкцией.   компиляции вылезет ошибка,  а при ┤
│ Но, к сожалению, нашлись довольно   прогоне это  передастся для обра- ┤
│ существенные  отличия от инструк-   ботки Бейсик-интерпретатору.      ┤
│ ции.  Хотя  это,  может  быть,  и                                     ┤
│ следствие работы хаккера, снявше-      Но, несмотря на все эти недос- ┤
│ го защиту с программы.              татки, я  бы  рекомендовал   всем ┤
│                                     этот компилятор. Быстродействие у ┤
│    Вот наиболее  существенные не-   программы  очень  высокое,  можно ┤
│ достатки.                           по много раз вставлять  директивы ┤
│                                     REM ! PCODE и REM ! MACHINE CODE. ┤
│    1. Если,   вызвав  при  помощи   А ведь программа в ПИ-кодах полу- ┤
│ RANDOMIZE USR подпрограмму в  ма-   чается еще короче, чем на Бейсике ┤
│ шинных кодах, в ней испортить ре-   (если  не  считать процедур RST). ┤
│ гистр IX,  то программа зависнет.   При аварийной остановке (или пос- ┤
│ Так что, кроме IY и HL', надо бе-   ле  BREAK)  можно распечатать при ┤
│ речь еще и IX. В частности, прог-   помощи PRINT значения всех  пере- ┤
│ рамма зависает, если подпрограмма   менных  с теми именами,  с какими ┤
│ в  машинных  кодах  обращается  к   они были в Бейсике.  Также  выво- ┤
│ процедуре ПЗУ BEEPER (#03B5), так   дится  номер  строки,  в  которой ┤
│ как  в ней  используется  команда   произошла ошибка или остановка. В ┤
│ JP (IX).                            общем, программа произвела прият- ┤
│                                     ное впечатление.                  ┤
│    2. Строка M=USR ADR (M - любая                                     ┤
│ переменная,  ADR  - любое выраже-      Было бы очень интересно,  если ┤
│ ние), например B=USR 55200, всег-   кто-нибудь  прокомментировал  эти ┤
│ да присваивает переменной отрица-   проблемы,   хотелось  бы  узнать, ┤
│ тельное значение. То есть, если в   сталкивался ли кто-нибудь с  ана- ┤
│ Бейсик  можно  передать  какое-то   логичными проблемами?             ┤
│ значение из машинного кода,  зас-                                     ┤
│ лав это число в ВС и дав RET,  то             *     *     *           ┤
│ BLAST это не поймет. И связи меж-                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 42 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │    00380        EX   DE,HL        ┤
│                                 ┤ │    00390        LD   BC,32*256+8  ┤
│                                 ┤ │    00400        LD   HL,#401F     ┤
│                                 ┤ │    00410        LD   A,(CICL)     ┤
│                                 ┤ │    00420 LOOP1  PUSH AF           ┤
└─────────────────────────────────┘ │    00430        PUSH BC           ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    00440        PUSH HL           ┤
│    (С) Олег Янковский,                 00450        LD   C,A          ┤
│           Хабаровский край, 1994.      00460        LD   A,(DE)       ┤
│                                        00470        AND  C            ┤
│    Предлагаю разновидность  бегу-      00480        CPL               ┤
│ щей строки,  работающей по преры-      00490        CP   255          ┤
│ ваниям  IM 2.   Я  сократил  свою      00500 LOOP2  RL   (HL)         ┤
│ программу после того,  как прочи-      00510        DEC  HL           ┤
│ тал статью о бегущей строке М.Ти-      00520        DJNZ LOOP2        ┤
│ това,   опубликованную  в  ZX-РЕ-      00530        POP  HL           ┤
│ ВЮ-94, N1, стр.48.                     00540        POP  BC           ┤
│    Бегущая строка   (б/с)   может      00550        POP  AF           ┤
│ размещаться в любом месте  экрана      00560        INC  H            ┤
│ и иметь любой по ширине размер (в      00570        INC  DE           ┤
│ знакоместах).                          00580        DEC  C            ┤
│                                        00590        JR   NZ,LOOP1     ┤
│    00010 ;BY OLEG YANKOVSKIY 1994      00600        RRCA              ┤
│    00020        ORG  40000             00610        LD   (CICL),A     ┤
│    00030        DI                     00620        CP   #80          ┤
│    00040        LD   A,#80             00630        CALL Z,NEW        ┤
│    00050        LD   (CICL),A          00640 END    POP  HL           ┤
│    00060        LD   HL,(POS1)         00650        POP  DE           ┤
│    00070        LD   (POS),HL          00660        POP  BC           ┤
│    00080        LD   A,#30             00670        POP  AF           ┤
│    00090        LD   I,A               00680        JP   56           ┤
│    00100        IM   2                 00690 NEW    LD   HL,(POS)     ┤
│    00110        EI                     00700        INC  HL           ┤
│    00120        RET                    00710        LD   A,(HL)       ┤
│    00130 CONT   ORG 41000              00720        OR   A            ┤
│    00140        DI                     00730        JR   Z,NOV        ┤
│    00150        LD   A,#30             00740        LD   (POS),HL     ┤
│    00160        LD   I,A               00750        RET               ┤
│    00170        IM   2                 00760 NOV    LD   HL,(POS1)    ┤
│    00180        EI                     00770        LD   (POS),HL     ┤
│    00190        RET                    00780        POP  HL           ┤
│    00200 STOP   ORG 42000              00790        JR   END          ┤
│    00210        DI                     00800 CICL   DEFB #80          ┤
│    00220        IM   0                 00810 POS    DEFW MES          ┤
│    00230        EI                     00820 POS1   DEFW MES          ┤
│    00240        RET                    00830 MES    DEFM "By Oleg "   ┤
│   --------------------------           00840        DEFM "Yankovskiy" ┤
│    00250        ORG 60208              00850        DEFM " 1994   "   ┤
│    00260        PUSH AF                00860        DEFB 0            ┤
│    00270        PUSH BC                                               ┤
│    00280        PUSH DE                Строки с 20 по 120 - это  ини- ┤
│    00290        PUSH HL             циализация б/с;  с  130  по 190 - ┤
│    00300        LD   HL,(POS)       продолжают выполнение б/с,  оста- ┤
│    00310        LD   L,(HL)         новленной процедурой STOP (строки ┤
│    00320        LD   H,0            с 200 по 240). Сама программа б/с ┤
│    00330        ADD  HL,HL          начинается со строки 250. В стро- ┤
│    00340        ADD  HL,HL          ке 390 задается число,  вычисляе- ┤
│    00350        ADD  HL,HL          мое по  формуле,  в  которой 32 - ┤
│    00360        LD   DE,(#5C36)     ширина окна б/с,  а в 400  строке ┤
│    00370        ADD  HL,DE          число #401F - адрес вывода б/с на ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 43 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ экран. Сообщение,  выводимое б/с,   программа  обработки   прерывания ┤
│ задается в  строках 830-860.  Оно   расположится  как  раз  с  адреса ┤
│ обязательно должно  заканчиваться   #986С  (39020).  Адреса  процедур ┤
│ кодом 0. Если Вы используете сим-   CONT  и STOP будут соответственно ┤
│ вольный набор ПЗУ,  то б/с  можно   39006 и 39015.                    ┤
│ дополнить   следующими   строками                                     ┤
│ (для получения утолщенного  шриф-      Параметры измененного    блока ┤
│ та):                                кодов будут следующими:           ┤
│                                                                       ┤
│    00451        PUSH AF                Start of object: #984A (38986) ┤
│    00452        RLA                    Length         : #009E (00158) ┤
│    00453        OR   C                 Executes       : #984A (38986) ┤
│    00454        LD   C,A                                              ┤
│    00455        POP  AF                Шестнадцатиричный  дамп  блока ┤
│                                     для тестирования б/с:             ┤
│    Следует сказать несколько слов                                     ┤
│ по поводу  запуска  прерываний  2   984A: F3 3E 80 32 C8 98 2A CB :1A ┤
│ рода. В строках 80 и 150 задается   9852: 98 22 C9 98 3E 03 ED 47 :7A ┤
│ старший байт адреса,  то есть при   985A: ED 5E FB C9 F3 3E 03 ED :22 ┤
│ прерывании произойдет  переход по   9862: 47 ED 5E FB C9 F3 ED 46 :76 ┤
│ адресу, заданному в #30FF. Там (в   986A: FB C9 F5 C5 D5 E5 2A C9 :2D ┤
│ ПЗУ) будет считан адрес #EB30, то   9872: 98 6E 26 00 29 29 29 ED :9E ┤
│ есть 60208.  В связи с таким спо-   987A: 5B 36 5C 19 EB 01 08 20 :2C ┤
│ собом запуска,  эта  программа не   9882: 21 1F 40 3A C8 98 F5 C5 :EE ┤
│ пойдет на компьютерах,  в которых   988A: E5 4F F5 17 B1 4F F1 1A :6D ┤
│ некорректно обрабатываются преры-   9892: A1 2F FE FF CB 16 2B 10 :13 ┤
│ вания 2 рода - для  них  придется   989A: FB E1 C1 F1 24 13 0D 20 :24 ┤
│ организовывать 257-байтовый буфер   98A2: E5 0F 32 C8 98 FE 80 CC :0A ┤
│ в свободной области  памяти  так,   98AA: B3 98 E1 D1 C1 F1 C3 38 :EC ┤
│ как это обычно делается для обес-   98B2: 00 2A C9 98 23 7E B7 28 :55 ┤
│ печения совместимости (см. напри-   98BA: 04 22 C9 98 C9 2A CB 98 :2F ┤
│ мер, ZX-РЕВЮ-94, N4, стр.52).       98C2: 22 C9 98 E1 18 E4 80 CD :07 ┤
│    Кроме того,  при  тестировании   98CA: 98 CD 98 42 79 20 4F 6C :F5 ┤
│ неудобен тот факт,  что программа   98D2: 65 67 20 59 61 6E 6B 6F :58 ┤
│ состоит фактически   из   четырех   98DA: 76 73 6B 69 79 20 31 39 :32 ┤
│ кусков (с  адресов 40000,  41000,   98E2: 39 34 20 20 20 00 00 00 :47 ┤
│ 42000 и 60208).  Последний  блок,                                     ┤
│ кстати, совпадает с кодами широко      (С) Сергей Каминский,          ┤
│ распространенного ассемблера  ZE-                      г.Минск, 1995. ┤
│ US, из-за чего становится затруд-                                     ┤
│ нительно его   использование.   С      Предлагаю программу, выполняю- ┤
│ целью создания  компактного блока   щую   спрайтовый   скроллинг  для ┤
│ кодов можем порекомендовать  сле-   спрайтов размером 2х2 знакоместа. ┤
│ дующие изменения:                   По  существу это бегущая строка с ┤
│                                     символами  повышенного  качества. ┤
│    00020        ORG  38986          Такая  строка  смотрится  гораздо ┤
│    00080        LD   A,#03          приятнее,  чем   предложенная   в ┤
│    00150        LD   A,#03          ZX-РЕВЮ-94,  N1,  стр.48. Правда, ┤
│    00130 ;                          для нее нужен специально  сформи- ┤
│    00140 CONT   DI                  рованный   символьный   набор   в ┤
│    00200 ;                          спрайтовом формате,  но, я думаю, ┤
│    00210 STOP   DI                  что у каждого пользователя, кото- ┤
│    00250 ;                          рый немного разбирается с кодами, ┤
│                                     найдется спрайт-editor, в котором ┤
│    В ячейке #03FF ПЗУ будет  счи-   можно нарисовать все буквы и сос- ┤
│ тан адрес #986C, а адрес в единс-   тавить  из  них символьный набор. ┤
│ твенной директиве ORG в 20 строке   Последний   будет   иметь   длину ┤
│ рассчитан   таким   образом,  что   768*4=3072 байта.                 ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 44 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    00001 ; SPRITE SCROLL               00560        JR   NZ,NEXTA     ┤
│    00002 ; (C) MASTSOFT'1994           00570        LD   HL,TEXT      ┤
│    00010        ORG  40000             00580        LD   (TEXTP),HL   ┤
│    00020        ENT                    00590        JR   NEXTB        ┤
│    00030        CALL INIT              00600 NEXTA  INC  HL           ┤
│    00040        CALL SCROLL            00610        LD   (TEXTP),HL   ┤
│    00050        RET                    00620 NEXTB  SUB  32           ┤
│    00060 INIT   LD   HL,BUF1           00630        LD   H,0          ┤
│    00070        LD   DE,BUF1+1         00640        LD   L,A          ┤
│    00080        LD   BC,31             00650        ADD  HL,HL        ┤
│    00090        LD   (HL),0            00660        ADD  HL,HL        ┤
│    00100        LDIR                   00670        ADD  HL,HL        ┤
│    00110        LD   HL,TEXT           00680        ADD  HL,HL        ┤
│    00120        LD   (TEXTP),HL        00690        ADD  HL,HL        ┤
│    00130        LD   HL,41000          00700        LD   DE,(FONT)    ┤
│    00140        LD   (FONT),HL         00710        ADD  HL,DE        ┤
│    00150        LD   A,16              00720        LD   DE,BUF1      ┤
│    00160        LD   (COL),A           00730        LD   BC,32        ┤
│    00170        RET                    00740        LDIR              ┤
│    00180 SCROLL LD   A,(COL)           00750        RET               ┤
│    00190        CP   0                 00760 COL    DEFB 16           ┤
│    00200        JR   Z,LDCOL           00770 TEXTP  DEFW TEXT         ┤
│    00210        DEC  A                 00780 FONT   DEFW 41000        ┤
│    00220        LD   (COL),A           00790 BUF1   DEFS 32           ┤
│    00230        JR   NEXT              00800 TEXT   DEFM "Copyright"  ┤
│    00240 LDCOL  CALL LDIRB             00810        DEFM " by "       ┤
│    00250        LD   A,16              00820        DEFM "MASTSOFT "  ┤
│    00260        LD   (COL),A           00830        DEFM "1994"       ┤
│    00270 NEXT   LD   HL,#50DF          00840        DEFB 255          ┤
│    00280        LD   IX,BUF1+1                                        ┤
│    00290        LD   B,2               Start of object: #9C40 (40000) ┤
│    00300 LOOP   PUSH BC                Length         : #00D7 (00215) ┤
│    00310        PUSH HL                Executes       : #9C40 (40000) ┤
│    00320        LD   B,8                                              ┤
│    00330 LOOP1  PUSH BC                Остается только добавить,  как ┤
│    00340        PUSH HL             запускать этот  блок  из  Бейсика ┤
│    00350        RL   (IX+0)         (подсказка для начинающих):       ┤
│    00360        RL   (IX-1)                                           ┤
│    00370        LD   B,32              10 RANDOMIZE USR 40000:        ┤
│    00380 LOOP2  RL   (HL)                REM Инициализация переменных ┤
│    00390        DEC  HL                20 RANDOMIZE USR 40003:        ┤
│    00400        DJNZ LOOP2                  REM Скроллинг на 1 пиксел ┤
│    00410        POP  HL                30 PAUSE 1: GO TO 20           ┤
│    00420        POP  BC                                               ┤
│    00430        INC  IX                Да, кстати, не забудьте загру- ┤
│    00440        INC  IX             зить  Ваш символьный набор по ад- ┤
│    00450        INC  H              ресу 41000 или по  тому,  который ┤
│    00460        DJNZ LOOP1          будет   установлен  в  переменной ┤
│    00470        POP  HL             FONT.                             ┤
│    00480        POP  BC                                               ┤
│    00490        LD   DE,#20            Несколько слов хотим  добавить ┤
│    00500        ADD  HL,DE          все же  по поводу символьного на- ┤
│    00510        DJNZ LOOP           бора. Конструирование его при по- ┤
│    00520        RET                 мощи редактора спрайтов по нашему ┤
│    00530 LDIRB  LD   HL,(TEXTP)     мнению  неудобно.  Поэтому  можно ┤
│    00540        LD   A,(HL)         поступить проще. Сначала, при по- ┤
│    00550        CP   #FF            мощи ARTSTUDIO,  изображаем   все ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 45 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ символы   символьного   набора  в    4: GO SUB 20: NEXT d             ┤
│ масштабе 2х1,  начиная  с  левого    1010 FOR d=18432 TO 18528 STEP 6 ┤
│ верхнего угла экрана так, как это    4: GO SUB 20: NEXT d             ┤
│ показано на рисунке (в меню  Text    2000 SAVE "fnt"CODE 41000,768*4  ┤
│ включены  опции:  Double  height,                                     ┤
│ Double  width,  Snap  hrz.,  Snap      После старта загружается  кар- ┤
│ vrt):                               тинка "fnt.scr", затем начинается ┤
│                                     процесс формирования из нее  сим- ┤
│                                     вольного набора в спрайтовом фор- ┤
│                                     мате. После чего готовый символь- ┤
│                                     ный  набор будет сохранен в файле ┤
│                                     "fnt" CODE 41000,3072.            ┤
│                                        И, в  заключение,  как обычно, ┤
│                                     шестнадцатиричный дамп блока  ко- ┤
│                                     дов.                              ┤
│                                                                       ┤
│                                     9C40: CD 47 9C CD 66 9C C9 21 :45 ┤
│                                     9C48: DC 9C 11 DD 9C 01 1F 00 :06 ┤
│                                     9C50: 36 00 ED B0 21 FC 9C 22 :9A ┤
│                                     9C58: D8 9C 21 28 A0 22 DA 9C :E9 ┤
│                                     9C60: 3E 10 32 D7 9C C9 3A D7 :C9 ┤
│                                     9C68: 9C FE 00 28 06 3D 32 D7 :12 ┤
│                                     9C70: 9C 18 08 CD AB 9C 3E 10 :2A ┤
│                                     9C78: 32 D7 9C 21 DF 50 DD 21 :07 ┤
│    Этот рисунок берем за  основу.   9C80: DD 9C 06 02 C5 E5 06 08 :55 ┤
│ Теперь можно редактировать каждый   9C88: C5 E5 DD CB 00 16 DD CB :34 ┤
│ символ на экране,  пользуясь  лу-   9C90: FF 16 06 20 CB 16 2B 10 :83 ┤
│ пой.  Надо только следить за соб-   9C98: FB E1 C1 DD 23 DD 23 24 :F5 ┤
│ людением границ  символов,  чтобы   9CA0: 10 E6 E1 C1 11 20 00 19 :1E ┤
│ не  выйти ненароком за 16х16 пик-   9CA8: 10 DA C9 2A D8 9C 7E FE :11 ┤
│ селов.  Уместно, по-видимому, бу-   9CB0: FF 20 08 21 FC 9C 22 D8 :26 ┤
│ дет включение сетки (Grid) разме-   9CB8: 9C 18 04 23 22 D8 9C D6 :9B ┤
│ ром 2х2. После того, как все сим-   9CC0: 20 26 00 6F 29 29 29 29 :B5 ┤
│ волы,  благодаря Вашим стараниям,   9CC8: 29 ED 5B DA 9C 19 11 DC :51 ┤
│ приобретут желаемый вид, сохрани-   9CD0: 9C 01 20 00 ED B0 C9 10 :9F ┤
│ те  рисунок  под именем,  скажем,   9CD8: FC 9C 28 A0 00 00 00 00 :D4 ┤
│ "fnt.scr".                          9CE0: 00 00 00 00 00 00 00 00 :7C ┤
│    Теперь потребуется   несложный   9CE8: 00 00 00 00 00 00 00 00 :84 ┤
│ перекодировщик для преобразования   9CF0: 00 00 00 00 00 00 00 00 :8C ┤
│ экранного файла в символьный  на-   9CF8: 00 00 00 00 43 6F 70 79 :2F ┤
│ бор спрайтового формата. Вот он:    9D00: 72 69 67 68 74 20 62 79 :B6 ┤
│                                     9D08: 20 4D 41 53 54 53 4F 46 :E2 ┤
│     2 BORDER 7: PAPER 7: INK 0: C   9D10: 54 20 31 39 39 34 FF 00 :F7 ┤
│  LEAR 40999: GO TO 100                                                ┤
│    20 FOR c=d TO d+31 STEP 2           (С) Юрий Алехин,               ┤
│    22 FOR b=c TO d+31*2 STEP 32                    г.Запорожье, 1995. ┤
│    24 FOR a=b TO b+7*256 STEP 256                                     ┤
│    26 LET x=PEEK a: POKE e,x: LET      Предлагаю пятиканальный  гене- ┤
│   e=e+1: LET x=PEEK (a+1): POKE e   ратор звука.                      ┤
│  ,x: LET e=e+1: POKE a,0: POKE (a      С адреса  MUS=31000 должен на- ┤
│  +1),0                              ходиться блок данных. Группы по 5 ┤
│    28 NEXT a: NEXT b: NEXT c: RET   байтов: значение  частоты  для  1 ┤
│  URN                                канала, затем для 2 и т.д.        ┤
│   100 LET e=41000                      Выход из программы происходит, ┤
│   200 LOAD "fnt.scr"CODE 16384      если в 1  канале  встретился  код ┤
│  1000 FOR d=16384 TO 16576 STEP 6   255.                              ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 46 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    00010        ORG  40000             00590        OUT  (254),A      ┤
│    00020        ENT                    00600 ET3    DEC  (IX+3)       ┤
│    00030 MUS    EQU  31000             00610        LD   A,(IX+3)     ┤
│    00040        LD   HL,MUS            00620        JR   NZ,ET4       ┤
│    00050        CALL NEXT              00630        LD   A,24         ┤
│    00060        RET                    00640        OUT  (254),A      ┤
│    00070 ;                             00650        LD   A,(V4)       ┤
│    00080 NEXT   LD   A,(HL)            00660        LD   (IX+3),A     ┤
│    00090        CP   255               00670        XOR  A            ┤
│    00100        RET  Z                 00680        OUT  (254),A      ┤
│    00110        LD   (V1),A            00690 ET4    DEC  (IX+4)       ┤
│    00120        INC  HL                00700        LD   A,(IX+4)     ┤
│    00130        LD   A,(HL)            00710        JR   NZ,ET5       ┤
│    00140        LD   (V2),A            00720        LD   A,24         ┤
│    00150        INC  HL                00730        OUT  (254),A      ┤
│    00160        LD   A,(HL)            00740        LD   A,(V5)       ┤
│    00170        LD   (V3),A            00750        LD   (IX+4),A     ┤
│    00180        INC  HL                00760        XOR  A            ┤
│    00190        LD   A,(HL)            00770        OUT  (254),A      ┤
│    00200        LD   (V4),A            00780 ET5    DEC  HL           ┤
│    00210        INC  HL                00790        LD   A,H          ┤
│    00220        LD   A,(HL)            00800        OR   L            ┤
│    00230        LD   (V5),A            00810        JR   NZ,LOOP      ┤
│    00240        INC  HL                00820        EI                ┤
│    00250        PUSH HL                00830        RET               ┤
│    00260        CALL BEEP              00840 ;                        ┤
│    00270        POP  HL                00850 V1     DEFB 0            ┤
│    00280        JP   NEXT              00860 V2     DEFB 0            ┤
│    00290 ;                             00870 V3     DEFB 0            ┤
│    00300 BEEP   DI                     00880 V4     DEFB 0            ┤
│    00310        LD   IX,COUNT          00890 V5     DEFB 0            ┤
│    00320        LD   HL,(TIME)         00900 TIME   DEFB 9            ┤
│    00330 LOOP   DEC  (IX+0)            00910        DEFB 9            ┤
│    00340        LD   A,(IX+0)          00920 COUNT  DEFB 0            ┤
│    00350        JR   NZ,ET1            00930        DEFB 0            ┤
│    00360        LD   A,24              00940        DEFB 0            ┤
│    00370        OUT  (254),A           00950        DEFB 0            ┤
│    00380        LD   A,(V1)            00960        DEFB 0            ┤
│    00390        LD   (IX+0),A                                         ┤
│    00400        XOR  A                 Start of object: #9C40 (40000) ┤
│    00410        OUT  (254),A           Length         : #00AF (00175) ┤
│    00420 ET1    DEC  (IX+1)            Executes       : #9C40 (40000) ┤
│    00430        LD   A,(IX+1)                                         ┤
│    00440        JR   NZ,ET2            Шестнадцатиричный дамп блока:  ┤
│    00450        LD   A,24                                             ┤
│    00460        OUT  (254),A        9C40: 21 18 79 CD 47 9C C9 7E :85 ┤
│    00470        LD   A,(V2)         9C48: FE FF C8 32 E3 9C 23 7E :FB ┤
│    00480        LD   (IX+1),A       9C50: 32 E4 9C 23 7E 32 E5 9C :F2 ┤
│    00490        XOR  A              9C58: 23 7E 32 E6 9C 23 7E 32 :1C ┤
│    00500        OUT  (254),A        9C60: E7 9C 23 E5 CD 6B 9C E1 :3C ┤
│    00510 ET2    DEC  (IX+2)         9C68: C3 47 9C F3 DD 21 EA 9C :21 ┤
│    00520        LD   A,(IX+2)       9C70: 2A E8 9C DD 35 00 DD 7E :27 ┤
│    00530        JR   NZ,ET3         9C78: 00 20 0D 3E 18 D3 FE 3A :A2 ┤
│    00540        LD   A,24           9C80: E3 9C DD 77 00 AF D3 FE :6F ┤
│    00550        OUT  (254),A        9C88: DD 35 01 DD 7E 01 20 0D :C0 ┤
│    00560        LD   A,(V3)         9C90: 3E 18 D3 FE 3A E4 9C DD :EA ┤
│    00570        LD   (IX+2),A       9C98: 77 01 AF D3 FE DD 35 02 :40 ┤
│    00580        XOR  A              9CA0: DD 7E 02 20 0D 3E 18 D3 :EF ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 47 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ 9CA8: FE 3A E5 9C DD 77 02 AF :02   одной ноты и вызывать ее, исполь- ┤
│ 9CB0: D3 FE DD 35 03 DD 7E 03 :90   зуя счетчик прерываний. Если пой- ┤
│ 9CB8: 20 0D 3E 18 D3 FE 3A E6 :C8   ти еще дальше,  то стоит подумать ┤
│ 9CC0: 9C DD 77 03 AF D3 FE DD :AC   о том,  как  кодировать мелодию - ┤
│ 9CC8: 35 04 DD 7E 04 20 0D 3E :67   это уже отдельная проблема,  но в ┤
│ 9CD0: 18 D3 FE 3A E7 9C DD 77 :66   результате может получиться пяти- ┤
│ 9CD8: 04 AF D3 FE 2B 7C B5 20 :74   канальный музыкальный редактор... ┤
│ 9CE0: 92 FB C9 00 00 00 00 00 :D2   В общем,  Вы видите,  что процесс ┤
│ 9CE8: 09 09 00 00 00 00 00 00 :96   совершенствования бесконечен. А в ┤
│                                     основе его  все же останется блок ┤
│    Кстати, тестирование можно вы-   кодов, который предложил Юрий.    ┤
│ полнить, загрузив по адресу 31000                                     ┤
│ произвольный  блок кодов (или еще                                     ┤
│ проще:  обнулить второй и  третий      Следующее письмо  мы  адресуем ┤
│ байты блока кодов, то есть задать   владельцам 128К компьютеров.      ┤
│ MUS=0).  При этом, правда, вместо                                     ┤
│ мелодии  будет нечто неопределен-   (C) М.Л.Плетнев (UGL SOFT LTD),   ┤
│ ное,  но можно  примерно  оценить      г.Великие Луки, Псковская обл. ┤
│ генерируемый звук.                                                    ┤
│    В приведенной программе  оста-      Предлагаю Вашему  вниманию до- ┤
│ новка  происходит  только в конце   работанную  процедуру  "Занавес", ┤
│ мелодии,  в  том   случае,   если   опубликованную в ZX-РЕВЮ-94,  N4, ┤
│ встречен   код  255.  Если  пойти   стр.38. Доработанная версия,  мне ┤
│ дальше,  то стоит подумать о том,   кажется, больше  похожа  на зана- ┤
│ как сделать  остановку по нажатию   вес. Сначала  штора   опускается, ┤
│ любой клавиши,  а не только после   затем за  шторой  "рисуется" кар- ┤
│ проигрывания всей мелодии, а так-   тинка, штора поднимается и - кар- ┤
│ же о том, как зациклить воспроиз-   тинка на  экране.  Скорость шторы ┤
│ ведение. Кроме того, неплохо было   можно регулировать в широких пре- ┤
│ бы использовать предложенный  ге-   делах, изменяя число в строке 70. ┤
│ нератор с  прерываниями  2 рода -   Чем больше число, тем больше ско- ┤
│ для этого надо выделить  в  подп-   рость. Цвет   шторы   задается  в ┤
│ рограмму  процедуру  проигрывания   строках 80 и 90.                  ┤
│ ═════════════════════════════════════════════════════════════════════ ┤
│      00010        ORG  40000       ;                                  ┤
│      00020        ENT              ;                                  ┤
│      00030 PORT   EQU  #7FFD       ;Порт управления страницами.       ┤
│      00040 SCR    EQU  #4000       ;Видео-ОЗУ.                        ┤
│      00050 SCR2   EQU  #C000       ;Второе видео-ОЗУ.                 ┤
│      00060 PIC    EQU  #E000       ;Адрес картинки.                   ┤
│      00070 TIM    EQU  30          ;Скорость шторы.                   ┤
│      00080 COLORP EQU  9           ;Цвет шторы (PAPER).               ┤
│      00090 COLORB EQU  1           ;Цвет шторы (BORDER).              ┤
│      00100        DI               ;                                  ┤
│      00110        LD   HL,SCR      ;Делаем экран черным.              ┤
│      00120        LD   DE,SCR+1    ;                                  ┤
│      00130        LD   BC,#1AFF    ;                                  ┤
│      00140        LD   (HL),L      ;                                  ┤
│      00150        LDIR             ;                                  ┤
│      00160        XOR  A           ;                                  ┤
│      00170        OUT  (#FE),A     ;                                  ┤
│      00180        LD   BC,PORT     ;                                  ┤
│      00190        LD   A,#17       ;                                  ┤
│      00200        OUT  (C),A       ;                                  ┤
│      00210        LD   HL,SCR2     ;Штора - синяя.                    ┤
│      00220        LD   DE,SCR2+1   ;                                  ┤
│      00230        LD   BC,#1AFF    ;                                  ┤
│      00240        LD   (HL),COLORP ;                                  ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 48 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│      00250        LDIR             ;                                  ┤
│      00260 ; ++++++++++++ Закрываем штору ++++++++++++                ┤
│      00270        LD   BC,PORT     ;                                  ┤
│      00280        LD   A,#10       ;                                  ┤
│      00290        OUT  (C),A       ;                                  ┤
│      00300        LD   HL,1        ;                                  ┤
│      00310 L1     EI               ;Ждем кадровый импульс.            ┤
│      00320        HALT             ;                                  ┤
│      00330        DI               ;                                  ┤
│      00340        LD   A,COLORB    ;Рисуем штору.                     ┤
│      00350        OUT  (#FE),A     ;                                  ┤
│      00360        LD   A,#18       ;                                  ┤
│      00370        OUT  (C),A       ;                                  ┤
│      00380        PUSH HL          ;Ждем                              ┤
│      00390        POP  DE          ;(в HL - время).                   ┤
│      00400 L2     DEC  DE          ;                                  ┤
│      00410        LD   A,D         ;                                  ┤
│      00420        OR   E           ;                                  ┤
│      00430        JR   NZ,L2       ;                                  ┤
│      00440        XOR  A           ;Рисуем пустоту.                   ┤
│      00450        OUT  (#FE),A     ;                                  ┤
│      00460        LD   A,#10       ;                                  ┤
│      00470        OUT  (C),A       ;                                  ┤
│      00480        LD   DE,TIM      ;Увеличиваем время.                ┤
│      00490        ADD  HL,DE       ;                                  ┤
│      00500        LD   A,H         ;                                  ┤
│      00510        CP   9           ;Если штора не закрыта,            ┤
│      00520        JR   NZ,L1       ;то повтор.                        ┤
│      00530        LD   A,COLORB    ;                                  ┤
│      00540        OUT  (#FE),A     ;                                  ┤
│      00550        LD   A,#18       ;                                  ┤
│      00560        OUT  (C),A       ;                                  ┤
│      00570        LD   HL,PIC      ;"Кидаем" картинку                 ┤
│      00580        LD   DE,SCR      ;под штору.                        ┤
│      00590        LD   BC,#1B00    ;                                  ┤
│      00600        LDIR             ;                                  ┤
│      00610 ; ++++++++++++ Открываем штору ++++++++++++                ┤
│      00620        LD   BC,PORT     ;                                  ┤
│      00630        LD   HL,#900     ;                                  ┤
│      00640 L3     EI               ;Ждем кадровый импульс.            ┤
│      00650        HALT             ;                                  ┤
│      00660        DI               ;                                  ┤
│      00670        LD   A,COLORB    ;Рисуем штору.                     ┤
│      00680        OUT  (#FE),A     ;                                  ┤
│      00690        LD   A,#18       ;                                  ┤
│      00700        OUT  (C),A       ;                                  ┤
│      00710        PUSH HL          ;Ждем                              ┤
│      00720        POP  DE          ;(в HL - время).                   ┤
│      00730 L4     DEC  DE          ;                                  ┤
│      00740        LD   A,D         ;                                  ┤
│      00750        OR   E           ;                                  ┤
│      00760        JR   NZ,L4       ;                                  ┤
│      00770        XOR  A           ;Рисуем картинку.                  ┤
│      00780        OUT  (#FE),A     ;                                  ┤
│      00790        LD   A,#10       ;                                  ┤
│      00800        OUT  (C),A       ;                                  ┤
│      00810        LD   DE,TIM      ;Уменьшаем время.                  ┤
│      00820        OR   A           ;                                  ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 49 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Э Т Ю Д Ы                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│      00830        SBC  HL,DE       ;                                  ┤
│      00840        LD   A,H         ;                                  ┤
│      00850        OR   L           ;Если штора открыта,               ┤
│      00860        JR   Z,L5        ;то переход.                       ┤
│      00870        LD   A,H         ;Иначе - повторяем.                ┤
│      00880        CP   #FF         ;                                  ┤
│      00890        JR   NZ,L3       ;                                  ┤
│      00900 L5     EI               ;Выход из процедуры.               ┤
│      00910        RET              ;                                  ┤
│                                   ╔══════════════════════════════════ ┤
│   Start of object: #9C40 (40000)  ║ 9C90: 3E 01 D3 FE 3E 18 ED 79 :F8 ┤
│   Length         : #0093 (00147)  ║ 9C98: 21 00 E0 11 00 40 01 00 :87 ┤
│   Executes       : #9C40 (40000)  ║ 9CA0: 1B ED B0 01 FD 7F 21 00 :92 ┤
│ ══════════════════════════════════╝ 9CA8: 09 FB 76 F3 3E 01 D3 FE :C1 ┤
│                                     9CB0: 3E 18 ED 79 E5 D1 1B 7A :53 ┤
│    Шестнадцатиричный  дамп  прог-   9CB8: B3 20 FB AF D3 FE 3E 10 :F0 ┤
│ раммы:                              9CC0: ED 79 11 1E 00 B7 ED 52 :E7 ┤
│                                     9CC8: 7C B5 28 05 7C FE FF 20 :5B ┤
│ 9C40: F3 21 00 40 11 01 40 01 :83   9CD0: D8 FB C9 00 00 00 00 00 :08 ┤
│ 9C48: FF 1A 75 ED B0 AF D3 FE :8F                                     ┤
│ 9C50: 01 FD 7F 3E 17 ED 79 21 :45      М.Л.Плетнев просит  напечатать ┤
│ 9C58: 00 C0 11 01 C0 01 FF 1A :A0   его телефон и надеется, что у не- ┤
│ 9C60: 36 09 ED B0 01 FD 7F 3E :93   го появятся новые друзья:         ┤
│ 9C68: 10 ED 79 21 01 00 FB 76 :0D                                     ┤
│ 9C70: F3 3E 01 D3 FE 3E 18 ED :52             (53) 3-03-90            ┤
│ 9C78: 79 E5 D1 1B 7A B3 20 FB :A6    г.Великие Луки, Псковская обл.   ┤
│ 9C80: AF D3 FE 3E 10 ED 79 11 :61                                     ┤
│ 9C88: 1E 00 19 7C FE 09 20 DE :DC             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                 М А Л Е Н Ь К И Е    Х И Т Р О С Т И                  ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│      Нюанс в использовании      ┤ │ MIZE USR 32768 выполнится очистка ┤
│        команд переброски        ┤ │ памяти не по адресам #8000-#FFFF, ┤
│ ─────────────────────────────── ┤ │ а всего лишь #7000-#800А.         ┤
│  (С) IWN,    Н.Новгород, 1995.  ┤ │    Это происходит потому,  что  N ┤
└─────────────────────────────────┘ │ раз процессор считывает из памяти ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ код команды  LDIR  (#ED  #B0),  и ┤
│    Сообщаю один  интересный  фак-   последний раз  - #00 #В0 (то есть ┤
│ тик. Команды   блоковых  операций   NOP и OR B, которые и выполняет), ┤
│ микропроцессора Z80 (LDIR,  LDDR,   а затем - команду RET.            ┤
│ CPIR, CPDR  и им подобные) считы-      При этом  возникает   огромное ┤
│ ваются процессором  из  памяти  в   поле  для  экспериментов  на тему ┤
│ каждом цикле выполнения,  то есть   защиты, "извращенных" методов пе- ┤
│ так же, как и простые команды.      реброски  блоков,  когда блок при ┤
│    Пример:                          переброске накладывается  на  уже ┤
│                                     переброшенную свою часть, которая ┤
│    8000  210070  LD   HL,#7000      модифицировала    команду    LDIR ┤
│    8003  110170  LD   DE,#7001      (LDDR),  заменив ее, например, на ┤
│    8006  01FF8F  LD   BC,#8FFF      LDDR (LDIR) или  на  какой-нибудь ┤
│    8009  75      LD   (HL),L        JP (например #18 #В0).            ┤
│    800A  EDBO    LDIR                                                 ┤
│    800C  C9      RET                   Примечание: к  сожалению,   не ┤
│                                     было возможности  проверить  этот ┤
│    Если при вызове этой программы   факт на советских аналогах Z80.   ┤
│ стек  установлен  ниже  #7000 или                                     ┤
│ выше #9000,  то по команде RANDO-             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 50 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ ТУРБО-режим.  Я  использую 3 мик- ┤
│                                 ┤ │ росхемы и  "кусочек",  оставшийся ┤
│                                 ┤ │ от порта #FF. На плате нужно сде- ┤
│                                 ┤ │ лать один разрыв. Проводник, иду- ┤
│                                 ┤ │ щий от на 6 вывод CPU нужно отор- ┤
│                                 ┤ │ вать и  подать  его  на  2  вывод ┤
│                                 ┤ │ КП11', а на процессор подать сиг- ┤
│                                 ┤ │ нал  с  этого  же  мультиплексора ┤
│                                 ┤ │ КП11', с 4 вывода.  Все остальное ┤
└─────────────────────────────────┘ │ - как в "Пентагоне-128".          ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘                                   ┤
│    ИФК: Сегодняшний  ФОРУМ мы на-                                     ┤
│ чинаем с аппаратного обеспечения.                                     ┤
│ Мы рады, что стали получать боль-                                     ┤
│ ше писем  на  эту  тему.  Значит,                                     ┤
│ полнее сможем удовлетворить инте-                                     ┤
│ ресы наших дорогих  читателей.  В                                     ┤
│ ZX-РЕВЮ-94, N5, на стр.47 мы при-                                     ┤
│ водили материал  Дмитрия  Жаркова                                     ┤
│ из Мордовии.  Дмитрий прислал но-                                     ┤
│ вое письмо.                                                           ┤
│    КОРР: В  прошлом письме я при-                                     ┤
│ водил схему адресного  дешифрато-                                     ┤
│ ра, но, как мне показалось потом,                                     ┤
│ "не очень", хотя эта схема у меня                                     ┤
│ работала   более  полугода.  Хочу                                     ┤
│ привести несколько отличающуюся:                                      ┤
│                                                                       ┤
│                                                                       ┤
│                                     ********************************* ┤
│                                                                       ┤
│                                        ИФК: В  ZX-РЕВЮ-94,   N4,   на ┤
│                                     стр.20  С.Салманов делился своими ┤
│                                     впечатлениями об ускоренной рабо- ┤
│                                     те  своего "Краснодара 48К".  Вот ┤
│                                     что,  в связи с этим  пишет  Н.В. ┤
│                                     Бруев из Воркуты.                 ┤
│    При этом адрес А13  нужно  по-      КОРР: В моей практике убыстре- ┤
│ дать на  ВС2 музыкального процес-   ние  работы  ZX-Spectrum наблюда- ┤
│ сора. При этом можно использовать   лось в основном из-за  того,  что ┤
│ все режимы музыкального процессо-   сигнал  INT на процессор формиро- ┤
│ ра (хотя, я пока что не знаю, за-   вался не ЛН1, а ТЛ1, что приводи- ┤
│ чем).                               ло  к  раздвоению или размножению ┤
│    Также хочу  сказать,  что порт   импульсов INT и,  вследствие это- ┤
│ #FF в своем компьютере  я  сделал   го,  к ускорению работы программы ┤
│ на  микросхеме ИР23,  а не на АП6   и  исполнения  музыки,  так   как ┤
│ (честно скажу, что "подглядел" ее   обычно управление AY идет по пре- ┤
│ у С.Зонова в его "Скорпионе").  В   рываниям.  При  контроле  сигнала ┤
│ моем "Пентагоне-128"  я  подвесил   осциллографом  на  16  выводе Z80 ┤
│ 1533ИР23 на аналогичную микросхе-   можно заметить,  что обычно после ┤
│ му - буфер чтения данных из  ОЗУ.   основного  импульса  через 4-6 мс ┤
│ "Открываю"  микросхему  во  время   идет еще один  отрицательный  им- ┤
│ вывода атрибутов из ОЗУ.            пульс меньшей амплитуды,  но дос- ┤
│    Дешифрация порта #FF стандарт-   таточной для того, чтобы Z80 при- ┤
│ ная,  скажем, та, что приводилась   нял его к обработке.              ┤
│ в  РЕВЮ.  Только  микросхему ИР23   ********************************* ┤
│ монтировать на другую ИР23 гораз-                                     ┤
│ до проще,  чем АП6 где-нибудь ря-      ИФК: Теперь от аппаратных  дел ┤
│ дом. Но это так, к слову.           переходим к программам. И начнем, ┤
│    Еще, в "Пентагоне-128", хотя и   по логике,  с простого, то есть с ┤
│ не только в  нем,  можно  сделать   Бейсика.                          ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 51 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Ф О Р У М                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Давно известны  способы сокра-   VAL "число", а также 0 на NOP PI, ┤
│ щения объема БЕЙСИКа, такие, нап-   1 - на SGN PI,  с целью  экономии ┤
│ ример, как 1=SGN PI или 0=NOT PI.   памяти.  Об  этом  напоминает наш ┤
│ Но во многих программах Вам,  на-   читатель Е.В.Любимов из  Новокуз- ┤
│ верное,  попадались выражения ти-   нецка.                            ┤
│ па: LET a = BIN. Если Вы сделаете      Все это хорошо,  только помни- ┤
│ PRINT a,  то распечатается 0. Так   те,  что  "бесплатных пирожных не ┤
│ что же это - новый способ  сокра-   бывает".  Экономия памяти отрица- ┤
│ щения памяти? Ведь вместо NOT PI,   тельно сказывается на быстродейс- ┤
│ расходующего  два  байта,   можно   твии,  поэтому решайте,  что  для ┤
│ применять BIN, тогда расход памя-   Вас предпочтительнее. Так, напри- ┤
│ ти уменьшится на один байт? Пись-   мер, при адаптации Бейсик-загруз- ┤
│ ма  с  такими открытиями приходят   чика под диск бывает важен каждый ┤
│ от начинающих программистов.        байт,  и совершенно не имеет зна- ┤
│    Уважаемые  друзья.   Проясняем   чение  его  (загрузчика)  быстро- ┤
│ ситуацию.  Выражение BIN занимает   действие. В этом случае использо- ┤
│ в  памяти  не один,  а семь (!!!)   вание приемов  по экономии памяти ┤
│ байтов, так как после него следу-   оправдано и иногда является прос- ┤
│ ет обычный для числа код 14, а за   то  необходимым.  В  то же время, ┤
│ ним еще  пять  нулей.  Вы  можете   при работе программы,  написанной ┤
│ убедиться в этом,  набрав простую   на Бейсике,  играющему совершенно ┤
│ программу из одной строки:          безразлично,  сколько  места  она ┤
│    10 PRINT NOT PI                  занимает:  20К или 22К - в памяти ┤
│ Сохранив ее  на  ленте или диске,   компьютера  все  равно   остается ┤
│ Вы убедитесь,  что ее длина равна   достаточно места, да и разница во ┤
│ 8 байтов, а программа:              времени загрузки (с  магнитофона) ┤
│    10 PRINT BIN                     не  столь велика.  А вот недоста- ┤
│ имеет длину  13  байтов.  Кстати,   точное быстродействие  этой  Бей- ┤
│ столько же, сколько программа:      сик-программы пользователь вынуж- ┤
│    10 PRINT 0                       ден будет ощущать постоянно.  Так ┤
│ то есть Вы ничего не экономите на   что наш совет: не злоупотребляйте ┤
│ "BIN"  вместо  "0" и теряете по 5   экономией памяти и не превращайте ┤
│ байтов  на  каждом  "BIN"  вместо   этот  процесс  в  "экономию  ради ┤
│ "NOT PI". Так что, пожалуйста, не   экономии".                        ┤
│ "экономьте" память  таким  спосо-                                     ┤
│ бом.                                ********************************* ┤
│    А вот "PI" не имеет после себя                                     ┤
│ кода 14 и 5-байтового  эквивален-      ИФК: Максим Титов из Краснояр- ┤
│ та,  поэтому  можете для экономии   ска  вносит  свой  вклад в вечную ┤
│ смело  пользоваться  им  во  всех   проблему  "защиты-взлома"  -   он ┤
│ комбинациях, которые только суме-   предлагает способ защиты от нажа- ┤
│ ете  придумать.  Так  для  записи   тия кнопки MAGIC.                 ┤
│ числа  1  обычно используют конс-      КОРР: Почему  бы  не   сделать ┤
│ трукцию SGN PI, числа 3 - INT PI.   так:                              ┤
│ Они  занимают по два байта вместо           ...                       ┤
│ семи.  Но  можно  сэкономить  еще      LD    A,(23552)                ┤
│ один,  если речь идет об операто-      CP    201                      ┤
│ рах INK,  PAPER и т.п., поскольку      RET   NZ                       ┤
│ им  все  равно,  с какими числами      ; MAGIC нажали!!!              ┤
│ работать - целыми  или  нет.  Они           ...                       ┤
│ ведь округляют аргумент.  Так что   и постоянно вызывать данную  про- ┤
│ вместо INK 3 или PAPER  3  приме-   цедуру.  Если  MAGIC не нажимали, ┤
│ няйте INK PI или PAPER PI.          последует  возврат  в  вызывающую ┤
│    В пакете машиннокодовых проце-   программу,  иначе...  Нужно  лишь ┤
│ дур SUPERCODE  есть процедура под   проверку   вызывать    регулярно, ┤
│ номером 100. Она называется COMP-   встроив ее,  например, в прерыва- ┤
│ RESS NUMBER  и предназначена спе-   ние.                              ┤
│ циально для замены всех чисел  на   ********************************* ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 52 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Ф О Р У М                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    ИФК: И,  в завершение "систем-   тупной только   после  выполнения ┤
│ ных дел",  приводим вопрос Сергея   основных миссий. Миссия считается ┤
│ Гуляева из респ.Коми:  "Нет ли  у   выполненной, если выполнено зада- ┤
│ кого-нибудь описания пакета LASER   ние на 90-100% и самолет посажен. ┤
│ GENIUS?". К его просьбе присоеди-      Цель в  "завоевании" - уничто- ┤
│ няются многие другие читатели,  а   жение любых  вражеских  целей.  В ┤
│ также ИНФОРКОМ.                     зависимости от результатов Вашего ┤
│ *********************************   вылета подводится   итог   боевых ┤
│                                     действий и   выдается  процентное ┤
│              И Г Р Ы                соотношение оставшихся сил и  мо- ┤
│                                     ральный уровень обеих сторон. Еще ┤
│    ИФК: Целый  каскад  советов по   одна особенность миссии -  погод- ┤
│ разным  играм  прислал  Александр   ные условия       устанавливаются ┤
│ Нероев из Челябинска.               компьютером, хотя  Вы  можете  их ┤
│    КОРР:                            изменить.                         ┤
│    SIM CITY.                           5. Уровень  сложности  зависит ┤
│    1. Можно превращать все  озера   не  от Вашего рейтинга,  а от эс- ┤
│ и заливы в землю.  Для этого надо   кадрильи,  в которой  вы  сражае- ┤
│ застроить  их  чем-либо  и  потом   тесь.                             ┤
│ устроить пожар.  После того,  как      6. О  миссиях.  Самая  простая ┤
│ Вы уберете пепел,  водоем превра-   миссия -  бой с двумя МИГами.  Вы ┤
│ щается в сушу.                      можете взять много топлива и  ра- ┤
│    2. Если  у  Вас нет денег,  Вы   кет, после  уничтожения МИГов Вас ┤
│ можете бесплатно  построить  один   не атакуют,  если Вы не нападаете ┤
│ сегмент дороги или линии электро-   на вражеские цели, иначе Вас ата- ┤
│ передач на водоеме.                 куют непрерывно.  Вторая по слож- ┤
│    3. Если  весь год держать уро-   ности миссия - WATCH TOWER. Здесь ┤
│ вень налогов низким,  Ваша  попу-   тоже хватает топлива и ракет. Ос- ┤
│ лярность будет  очень  высока.  В   тальные три   миссии  практически ┤
│ конце года  можно  резко  поднять   одинаковы, однако   миссия   TANK ┤
│ налог до  20%  и,  получив налог,   BUSTERS бывает очень легкой (тан- ┤
│ снизить его опять. Так можно лег-   ковые батальоны, как правило, на- ┤
│ ко и быстро зарабатывать деньги.    ходятся на Вашей территории).     ┤
│    4. Если у здания (неважно, ка-      7. Горючее расходуется в мень- ┤
│ кого) выгрызть   кусок  и  начать   ших количествах  на больших высо- ┤
│ строить другие здания на его тер-   тах:                              ┤
│ ритории, может    произойти   что      Расход топлива при n% тяги     ┤
│ угодно. При этом программа  часто   Высота  99%   100%   100%(реверс) ┤
│ сбрасывается.                         0      3     4      14          ┤
│    5. При   большом    количестве   16384    1     2       7          ┤
│ электростанций некоторые  из  них   32768    1     1       3          ┤
│ перестают вырабатывать   электри-      8. Если стрелять из  пушки  по ┤
│ чество.                             наземным целям,   то  при  каждом ┤
│    F16 COMBAT PILOT.                взрыве увеличивается  на  единицу ┤
│    1. Чтобы установить нужное во-   число сбитых МИГов.               ┤
│ оружение, надо выбрать его в ниж-      BISMARK.                       ┤
│ нем меню, а затем подвести курсор      1. Существует маршрут,  по ко- ┤
│ к  тем  подвескам,  на которые Вы   торому можно провести линкор,  не ┤
│ хотите его установить,  и  нажать   сделав ни одного выстрела.        ┤
│ ОГОНЬ.                                 2. В  ночное  время  противник ┤
│    2. Очень  важную  роль  в игре   подходит на расстояние около  500 ┤
│ имеет масса самолета, так как са-   футов, что упрощает его уничтоже- ┤
│ молет с  полной загрузкой весит в   ние.                              ┤
│ два раза больше, чем пустой.           FALKLANDS'82.                  ┤
│    3. В описании допущена ошибка:      Не рекомендую  атаковать  про- ┤
│ высший рейтинг - TOP-GAN.           тивника пехотными частями.  Лучше ┤
│    4. Существует  миссия CONQUEST   использовать  танки,  артиллерию, ┤
│ (завоевание). Она становится дос-   корабли и самолеты.               ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 53 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Ф О Р У М                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    NETHER EARTH.                    Ставьте на них и Вы легко выигра- ┤
│    1. Всю игру можно пройти одним   ете миллиарды!                    ┤
│ роботом,  управляя им  непосредс-   ********************************* ┤
│ твенно.                                                               ┤
│    2. Если  во  дворе  взорванной      ИФК: Несколько советов по игре ┤
│ базы или завода поставить робота,   LASER SQUAD прислал Алексей Бесе- ┤
│ то через  12  часов  по  местному   дин из г.Чита.                    ┤
│ времени руины превратятся в базу.      КОРР: 1)  Как уже говорилось в ┤
│    STAR FOX.                        ZX-РЕВЮ,  если у бойца  останется ┤
│    1. Не  все  знают,  как запра-   больше 30 act.points, то он будет ┤
│ виться от Fuel  ship.  Для  этого   готов к появлению солдата.  Коли- ┤
│ при переопределении клавиш и зап-   чество минимальной энергии, кото- ┤
│ росе о вводе  клавиши  для  ПАУЗЫ   рое должно остаться  после  хода, ┤
│ введите,  например,  "4". Теперь,   чтобы среагировал солдат, показа- ┤
│ если Вам встретится топливный ко-   но в режиме SELECT под  количест- ┤
│ рабль, затормозите и нажмите "4".   вом  энергии  маленькими буквами. ┤
│ Клавиша "3" в любом случае - ПАУ-   Заметьте: оно у всех разное.      ┤
│ ЗА.                                    2) У убитого человека Вы може- ┤
│    2. Для  стыковки с Mather ship   те взять оставшееся у него воору- ┤
│ найдите его на планете, подлетите   жение, правда,  иногда  некоторое ┤
│ к нему, чтобы было выдано сообще-   повреждается. Для   того,   чтобы ┤
│ ние "Mather ship in docking  ran-   это сделать,  встаньте  в позицию ┤
│ ge", затормозите и развернитесь к   убитого солдата и подайте команду ┤
│ кораблю кормой.  Далее все проис-   PICK UP. Что интересно, Вы можете ┤
│ ходит автоматически.                взять даже  покойного   товарища, ┤
│    KINGDOM OF GRAIN.                если у Вас хватает сил и места.   ┤
│    Используя команду  "Д",  можно      3) Если Вы встретитесь лицом к ┤
│ начать  отдачу  приказов  заново.   лицу  с  противником,  Вы  можете ┤
│ При этом меняется цена земли. Ис-   вступить в рукопашный бой. Конеч- ┤
│ пользуя это,  можно выгодно поку-   но  же,  вступать  в бой следует, ┤
│ пать и продавать землю.             держа что-нибудь в руке (лучше  - ┤
│    MONOPOLY.                        нож).  Рукопашный  бой начинается ┤
│    За недостающую  до   синдиката   сразу же,  как Вы пойдете на про- ┤
│ карточку  компьютер  готов отдать   тивника.   Сбоку  появится  исход ┤
│ все  свое  состояние!   Используя   боя: Ваше оружие, повреждения Ва- ┤
│ этот  "жучек",  очень легко выиг-   ши  и противника - DAMAGE.  Руко- ┤
│ рать.                               пашный бой дает  малый  эффект  и ┤
│    KUNG FU.                         пользоваться  им  следует  лишь в ┤
│    Игра не имеет конца: после то-   крайних случаях.                  ┤
│ го,  как Вы пройдете 255 уровень,   ********************************* ┤
│ начнется нулевой уровень и т.д.                                       ┤
│    BATMAN 3.                           ИФК: Игорь Комаров из Иркутска ┤
│    В 1 и 5  частях  врагов  можно   пишет об игре QUAZATRON.          ┤
│ сбивать гарпуном.                      ИФК: Сообщаю   любителям  этой ┤
│    В 3 части смысл следующий:  Вы   программы, что всего им предстоит ┤
│ выбираете три   любых   предмета,   очистить восемь городов.  Вот они ┤
│ снизу пишется,  сколько среди них   (по порядку):  QUAZATRON, BEEBAT- ┤
│ искомых компонентов.  Как  только   RON,  COMMODO,  AMSTRADOS, SPECT- ┤
│ Вы найдете все три - игра выигра-   RON, ATARILIX, AMIGOS и, наконец, ┤
│ на.                                 IBMOS. Любители всяких "конграть- ┤
│    Если Вы  не  хотите вступать в   юлейшенсов"   будут,    наверное, ┤
│ бой с противником, спуститесь или   расстроены:  после очистки Айбиэ- ┤
│ поднимитесь на  три  этажа - враг   моса Вам сразу же предложат пора- ┤
│ исчезнет.                           ботать над Квазатроном.           ┤
│    MONTE CARLO CASINO.                 Могу также сообщить,  что  все ┤
│    При игре  в  рулетку некоторые   текстовые сообщения программы на- ┤
│ цифры   выпадают   очень   часто.   ходятся в  первом  кодовом  блоке ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 54 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Ф О Р У М                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ "q"CODE   25001,9351.  Чтобы  они                                     ┤
│ приняли более читаемый вид,  надо                                     ┤
│ после  загрузки этого блока обра-                                     ┤
│ ботать его следующей Бейсик-прог-                                     ┤
│ раммой:                                                               ┤
│                                                                       ┤
│    10 FOR n=25001 TO 34352                                            ┤
│    20 LET p=PEEK N+55                                                 ┤
│    30 IF P>255 THEN LET p=255                                         ┤
│    40 POKE n,p                                                        ┤
│    50 NEXT n                                                          ┤
│    60 BEEP 1,0: STOP                                                  ┤
│                                                                       ┤
│    Просматривать   же   сообщения                                     ┤
│ можно любым  монитором  (хотя  бы                                     ┤
│ TURBO-90,  он, наверняка, под ру-                                     ┤
│ кой у настоящего хаккера).                                            ┤
│                                     Это меня   очень  заинтересовало. ┤
│    ИФК: Предыдущего корреспонден-   Что это значит?  Или  кроме  трех ┤
│ та  дополняет MINISTR OLEG из Че-   имеющихся  у меня есть еще уровни ┤
│ лябинска.                           к этой программе?  Или  что  имел ┤
│    КОРР: Совет  любителям прыгать   ввиду  хаккер Стингер, делая этот ┤
│ на стены в QUAZATRON:  не  пытай-   загрузчик?                        ┤
│ тесь делать этого, если у Вас нет      Напрашивается мысль:  если  Вы ┤
│ CYBONIK MK-2 и мощного шасси. PO-   умеете изменять поле действий,  и ┤
│ KES   для   этой  игры:  58243,0:   при этом дополнительный (или Ваш) ┤
│ 58244,0:    58245,0:     58267,0:   блок назвать "LASQ BL4" то он бу- ┤
│ 58268,0:  58269,0. Вставив их, Вы   дет  загружен при нажатии клавиши ┤
│ можете не опасаться DISRUPTORа, и   "5".                              ┤
│ вместо  DISRUPTOR  SHIELDS  иметь      Можем  предложить   измененную ┤
│ что-то другое.                      базу для LASER SQUAD:             ┤
│ *********************************                                     ┤
│                                                                       ┤
│    ИФК: NAN  &  BIV  из г. Ковдор                                     ┤
│ Мурманской области в своем письме                                     ┤
│ пишут об игре STAR RADERS II.                                         ┤
│    КОРР: Если  у  Вас   кончается                                     ┤
│ топливо, а все остальное в поряд-                                     ┤
│ ке то можно заправиться от  звез-                                     ┤
│ ды.  Делается это так:  направить                                     ┤
│ путь на звезду,  начать перелет и                                     ┤
│ когда по экрану пойдут круги, на-                                     ┤
│ жать BREAK SPACE. При прибытии на                                     ┤
│ звезду Вас выбросит сразу на кар-                                     ┤
│ ту галактики.  Теперь  Вам  нужно                                     ┤
│ быстро  навести путь на ближайшую   ********************************* ┤
│ цель или планету и улететь.  Топ-                                     ┤
│ ливо  уже  будет заправлено  пол-      ИФК: Андрей  Рубин  из  Москвы ┤
│ ностью.  Самое главное  -  делать   сообщает о  том,  что  вместе  со ┤
│ это как можно быстрее.              своим другом Игорем Летягиным они ┤
│                                     нашли "жучок" на  2  уровне  игры ┤
│    ИФК: NAN & BIV  пишут также  о   ZYNAPS.                           ┤
│ LASER SQUAD.                           КОРР: После того,  как Вы про- ┤
│    КОРР: Работая  на  48Кб компь-   летите зону метеоритов,  появятся ┤
│ ютере после надписи "SORRI..."  я   красные корабли и откроют  огонь. ┤
│ нажал на MAGIC и посмотрел отгру-   Не спешите их сбивать,  а старай- ┤
│ женный файл при помощи  DISK-DOC-   тесь увернуться от  их  снарядов. ┤
│ TOR:                                Так "вертитесь" около одной мину- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 55 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                               Ф О Р У М                               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ты, пока не кончится время, отве-   клавиатуре.  Такой "жучок" есть в ┤
│ денное на  данный уровень.  Затем   игре DOMINATOR.  После процедуры, ┤
│ "краснявок" сменят   два   кораб-   описанной  выше,  появляется над- ┤
│ ля-"матки". Точно так же они поя-   пись  "CHEAT  ON".  Какие  именно ┤
│ вились бы  после  прохода   всего   клавиши  надо нажать - установить ┤
│ уровня (пролет  через  метеориты,   не удалось.  То же самое и в игре ┤
│ сражения и т.п.). Но учтите: если   DRAGON BREED (R-TYPE 2).          ┤
│ Вы собьете  хоть один красный ко-   ********************************* ┤
│ рабль - снова полетят метеориты и                                     ┤
│ Вам придется  проходить через все      ИФК: Мы продолжаем публиковать ┤
│ "прелести" уровня.                  адреса наших  корреспондентов  по ┤
│ *********************************   их просьбе.                       ┤
│                                        КОРР: В  рубрике  ФОРУМ увидел ┤
│    ИФК: Сергей Бодров из г.Чебок-   несколько адресов тех,  кто увле- ┤
│ сары пишет об игре FIGHTER BOMBER   кается адвентюрными играми. Неко- ┤
│ F19.                                торым из них я обязательно  напи- ┤
│    КОРР: Я нашел способ уничтоже-   шу. Но меня огорчило то, что пока ┤
│ ния наземных целей. Для этого на-   я не встретил  ни  одного  адреса ┤
│ до приземлиться   на   расстоянии   человека, интересующегося  жанром ┤
│ около 1-2 миль, потом подъехать и   STRATEGY. Поэтому прошу опублико- ┤
│ спокойно ее расстрелять.  Замечу,   вать мой   адрес  -  может  быть, ┤
│ что самолет может сесть на  любом   кто-нибудь откликнется.           ┤
│ ровном месте.                        ┌─────────────────────────────┐  ┤
│    ИФК: Да,  ни один враг,  нахо-    │      420033, г.Казань,      │  ┤
│ дясь в здравом уме и трезвом рас-    │    ул.Фрунзе, д.19,кв.39    │  ┤
│ судке  не  сможет предположить от    │      Салахов Ленар М.       │  ┤
│ Вас такого  подвоха!  И  ни  один    └─────────────────────────────┘  ┤
│ создатель программ. Вот уж, воис-                                     ┤
│ тину,  нет предела фантазии наших      КОРР: По просьбе читателей мо- ┤
│ отечественных пользователей Спек-   гу предоставить программы по  ма- ┤
│ трума!                              тематике и отдельным ее темам, по ┤
│ *********************************   иностранным  языкам:   испанский, ┤
│                                     французский, шведский, эсперанто, ┤
│    ИФК: Максим Титов из Краснояр-   иврит и др.  а также программы по ┤
│ ска уточняет сведения о MASK-III.   сопромату, кинематике и др.       ┤
│    КОРР: Эксперт  Положевец  Л.В.    ┌─────────────────────────────┐  ┤
│ указал, что  4-й  пароль  в  игре    │   620072, г.Екатеринбург,   │  ┤
│ MASK-III не работает,  но это  не    │    ул.Высоцкого, 10-384,    │  ┤
│ так. В  программе  есть небольшой    │    Сагитдинову Рустаму.     │  ┤
│ жучок: бегущая строка,  где сооб-    └─────────────────────────────┘  ┤
│ щается пароль,   выдает  не  весь                                     ┤
│ код. Настоящий код: PETALS OF DO-      КОРР: Обращаюсь ко  всем,  кто ┤
│ OM. Это   удалось  выяснить  лишь   занимается  адаптацией игр и сис- ┤
│ немного поломав  программу.  Есть   темных   программ   TAPE-DISK   и ┤
│ еще небольшой "прикольчик":  если   DISK-TAPE: если   хотите  обмени- ┤
│ перед телепортом,  ведущим на го-   ваться информацией по  программи- ┤
│ лубую землю,  включить PENETRATOR   рованию и новыми программами, пи- ┤
│ и телепортироваться  -   получите   шите:                             ┤
│ бесконечную защиту!                  ┌─────────────────────────────┐  ┤
│ *********************************    │     634034, г.Томск-34,     │  ┤
│                                      │  ул.Нахимова, д.20, кв.102  │  ┤
│    ИФК: Юрий Андрианов из Нижего-    │           T.A.W.            │  ┤
│ родской  обл.  сообщает,  что  во    └─────────────────────────────┘  ┤
│ многих  программах  есть "жучки".   или звоните:                      ┤
│    КОРР: Для их экспресс-поиска я           (382-2) 44-63-65, Андрей. ┤
│ делаю следующее:  загружаю  игру,                                     ┤
│ запускаю ее,  а затем пытаюсь на-   ********************************* ┤
│ жать одновременно все клавиши  на                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 56 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ MORGUE CASTLE  прислал  нам  М.Ю. ┤
│                                 ┤ │ Бордуков из Вязьмы.               ┤
│                                 ┤ │                                   ┤
│                                 ┤ │    После старта  игры в инвентаре ┤
│                                 ┤ │ находятся шесть заклинаний:  SEED ┤
│                                 ┤ │ SPELL,  FIRE  SPELL,  YOHO SPELL, ┤
│                                 ┤ │ LYCANTHROPE SPELL,  WICKED  QUEEN ┤
│                                 ┤ │ SPELL, LIGHT SQUARED SPELL. Стар- ┤
│                                 ┤ │ туете Вы в поле,  рядом с замком, ┤
│                                 ┤ │ окруженным рвом с водой,  подъем- ┤
│                                 ┤ │ ный  мост  поднят.  Командой  DIG ┤
│                                 ┤ │ можно  выкопать  звезду  -  STAR. ┤
│                                 ┤ │ Просматривая код программы, я по- ┤
│                                 ┤ │ нял,  что  Вашей задачей является ┤
└─────────────────────────────────┘ │ найти    тринадцать    магических ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ звезд, и выложить их в пустом де- ┤
│    Похоже, наш  новый  раздел   -   реве,  или рядом с ним - точно не ┤
│ ПЕРЕКРЕСТОК понравился читателям.   знаю.                             ┤
│ И  увеличившийся  поток  писем  в      Вы можете спуститься в ров (GO ┤
│ этот  раздел  - лучшее тому подт-   MOAT).  Там Вы обнаружите речного ┤
│ верждение.  Нас этот  факт  очень   монстра,  который мирно спит. Дав ┤
│ обрадовал,  ведь такое количество   команду "SWIM DOWN",  Вы попадете ┤
│ писем свидетельствует о неугасаю-   в новую локацию,  но при этом то- ┤
│ щем интересе читательской аудито-   нете.  Выбраться  изо  рва можно, ┤
│ рии к  адвентюрным  играм.  Итак,   разбудив монстра (WAKE MONSTER) - ┤
│ перед  Вами  -  очередной  выпуск   он выкидывает Вас обратно в поле. ┤
│ ПЕРЕКРЕСТКА.                        Опустить  подъемный  мост  можно, ┤
│                                     произнеся  заклинание  SEED (CAST ┤
│    Илья Плотников   отвечает   на   SEED),  после чего можно идти  на ┤
│ вопросы  по  адвентюрам,  которые   подъемный мост (GO DRAWBRIDGE).   ┤
│ были  заданы  нашими читателями в      Если с  моста  Вы  пойдете  на ┤
│ прошлых номерах.  Вот что он  пи-   восток,   то  попадете  в  замок. ┤
│ шет:                                Здесь на стене расположен  старый ┤
│    "С огромным восторгом встретил   деревянный рычаг. Потянув за него ┤
│ Вашу новую  рубрику  ПЕРЕКРЕСТОК.   (PULL LEVER),  Вы поднимите подъ- ┤
│ Думаю,  не только я,  но и многие   емный мост;  рычаг при этом лома- ┤
│ Ваши читатели. Это отличный пода-   ется,  а к Вам в инвентарь добав- ┤
│ рок  для всех любителей адвентюр.   ляется кусок дерева (PIECE OF WO- ┤
│ С удовольствием  присоединяюсь  к   OD).                              ┤
│ соратникам под вашим деревом."         Пройдя отсюда  на  восток,  Вы ┤
│    Далее, Илья подробно  отвечает   окажетесь во дворе  замка.  Здесь ┤
│ на большинство вопросов, поднятых   стоит волшебный фонтан (MAGIC FO- ┤
│ нашими читателями.  Но, в связи с   UNTAIN), обследовав который, мож- ┤
│ тем, что на часть вопросов ответы   но узнать,  что он имеет два эта- ┤
│ уже получены,  мы публикуем здесь   жа.  Также во дворе  можно  найти ┤
│ только новые ответы. В частности,   кирпич (FIRE BRICK),  и проникаю- ┤
│ Сергей Беляков  просил  помощи  в   щее   заклинание    (PERMEABILITY ┤
│ программе RED HAWK:  после выхода   SPELL),  подобрав  которое  можно ┤
│ из больницы  надо  отправиться  в   отправится на юг.                 ┤
│ редакцию  газеты  "Труба",  и на-      В этой локации, если постучать ┤
│ няться  фотографом-криминалистом.   по стене (KNOCK WALL),  компьютер ┤
│ Затем,   попросить   у  редактора   сообщит  о  том,  что Вы услышали ┤
│ пленку, и отправиться за сюжетами   глухой стук, а это значит, что за ┤
│ для  снимков  (искать  преступле-   стенами  имеются помещения.  Про- ┤
│ ния).                               никнуть в них можно,  если разру- ┤
│    Совет Сергею  Колотову по игре   шить  стены ударом (HIT),  причем ┤
│ THE  HOBBIT:  попробуй   ответить   после этой команды  следует  ука- ┤
│ Горлуму не "MAN",а "HUMAN".         зать   направление   удара.  Если ┤
│                                     стукнуть вниз,  то Вы провалитесь ┤
│    Отчет о  большой   проделанной   в логово дракона. Он охраняет еще ┤
│ работе  в  игре SORCERER OF CLAY-   одну звезду,  но взять ее Вам  не ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 57 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                         П Е Р Е К Р Е С Т О К                         ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ дадут,  так  как  дракон  съедает   ти в фонтан  ("GO FOUNTAIN"). Там ┤
│ Вас, как только увидит.             тоже  лежит звезда,  но Вам сооб- ┤
│    Ударив в южную стену, Вы попа-   щат,  что  Вы   чувствуете   себя ┤
│ дете  на  склад.  Здесь   имеется   странно.  Посмотрев в зеркало, Вы ┤
│ звезда и довольно интересная над-   увидите, что Вам не 31, а 20 лет, ┤
│ пись на стене:  "STAIRWAY CONDEM-   а  в инвентаре прибавляется пред- ┤
│ NED" (лестница в нерабочем состо-   мет WATER DROPLET  (капля  воды). ┤
│ янии).  В текстовом окне эта над-   Выбросить ее не удается,  и через ┤
│ пись почему-то выглядит так:"STA-   несколько ходов Вы погибаете, еще ┤
│ IRWAY CONDEMED".  Вниз ведут сту-   не родившись.                     ┤
│ пени,  спустившись по которым, Вы      В фонтане   можно  залезть  на ┤
│ столкнетесь с разъяренной крысой.   центральную колонну ("GO  CENTRE- ┤
│ Если  применить  здесь заклинание   PIECE").  Там Вы увидите DARK AIR ┤
│ "LYCANTHROPE",  то она скроется в   SHAFT (темная воздушная труба)  и ┤
│ дыре.  Вы  можете  последовать за   WATER OUTLET (водяной сток).      ┤
│ ней (GO HOLE).                         В водяной   сток  нельзя  про- ┤
│    Под лестницей, куда Вы попали,   лезть,  но в воздушную трубу мож- ┤
│ одиноко лежит  звезда.  Выбраться   но. Вы окажетесь в тюремной каме- ┤
│ отсюда   Вам  поможет  заклинание   ре с дырой в потолке,  звездой  и ┤
│ "PERMEABILITY".  Спуститься,  или   дубовой дверью, которую Вы откры- ┤
│ подняться  по  лестнице можно ко-   ли с другой стороны.              ┤
│ мандой "WALK". Внизу проход прег-      Если со двора замка отправить- ┤
│ раждает дубовая дверь.  Если при-   ся на север,  Вы попадете на кух- ┤
│ менить на нее заклинание  "FIRE",   ню.  Здесь  находится  деревянный ┤
│ то  она  откроется.  После  этого   ящик   (WOODEN  CRATE),  шкафы  и ┤
│ имеет смысл  вернуться  во  двор.   большая дырка в полу.  Если  отк- ┤
│ Отсюда можно пройти на восток,  и   рыть  шкаф  ("OPEN CABINET"),  Вы ┤
│ направить остатки огненного  зак-   станете  обладателем   заклинания ┤
│ линания на веревку.  Она загорит-   "SPELL  OF BLISS",а спустившись в ┤
│ ся.  Если Вы не хотите, чтобы Вас   дыру - окажетесь в луже с грязной ┤
│ убило  упавшей  люстрой,  которая   водой.  На  деревянный ящик можно ┤
│ висит на этой веревке,  - выйдите   залезть ("GO BOX").  Спуститься с ┤
│ из комнаты.  Проделайте какую-ни-   него   на  землю  можно  командой ┤
│ будь несложную  операцию  до  тех   "JUMP".                           ┤
│ пор, пока не появится сообщение о      У некоторых   предметов   есть ┤
│ том,  что люстра свалилась. После   несколько применений. Например, с ┤
│ этого  можете  вернуться,  люстра   помощью  заклинания  "FIRE" можно ┤
│ будет лежать на  полу.  Встав  на   осветить темную комнату. Для это- ┤
│ нее, Вы обнаружите стекло (BROKEN   го надо бросить в ней кусок дере- ┤
│ GLASS). Подобрав осколки, исполь-   ва и направить действие  заклина- ┤
│ зуйте заклинание "WICKED QUEEN" и   ния на него ("AT WOOD").  На нес- ┤
│ взгляните  на  инвентарь:  вместо   колько секунд комната осветится.  ┤
│ стекла  у  Вас  в  руках окажется      Заклинание "PERMEABILITY" сра- ┤
│ волшебное зеркало (MAGIC MIRROR).   батывает еще в двух местах:       ┤
│ Заглянув в него,  Вы увидите, что      1. Перед  дубовой  дверью  оно ┤
│ вам 31 год,  и Вы здоровы. Теперь   переносит Вас за нее.             ┤
│ можно слезть с люстры (GO BALLRO-      2. Если у вас в руках находит- ┤
│ OM).  Эта комната характерна тем,   ся деревянный ящик,  то оно пере- ┤
│ что одна из стен в ней не доходит   мещает  Вас внутрь.  Осветив его, ┤
│ до  потолка,  а  если  посмотреть   можно  обнаружить  кусок  металла ┤
│ вверх, можно увидеть чердак.        (PIECE OF METAL).                 ┤
│    Вернувшись в комнату с хрупки-      Заклинание "YOHO",  в  отличие ┤
│ ми стенами, можно стукнуть в вос-   от других,  двухразовое. При пер- ┤
│ точном направлении. Вы попадете в   вом его использовании оно перено- ┤
│ пыльную    комнату   с   каменной   сит Вас в поле,  а при втором - в ┤
│ дверью. Здесь есть пыль (DUST).     ту локацию,  где вы его использо- ┤
│    Вернувшись во двор, можно зай-   вали вначале.                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 58 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                         П Е Р Е К Р Е С Т О К                         ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    После применения    заклинания   море,  так что очень легко заблу- ┤
│ "BLISS",  можно заметить, глядя в   диться. Предлагаю Вам тот неболь- ┤
│ зеркало,  что Вы парите  в  дюйме   шой маршрут,  который я  исследо- ┤
│ над землей.                         вал.                              ┤
│    В игре мне удалось  обнаружить      Как только  Вы  начнете  игру, ┤
│ две  темные  локации - деревянный   осмотритесь  (LOOK).  Вы  увидите ┤
│ ящик, и комната с дубовой дверью,   побережье и свою команду. Плывите ┤
│ если последняя заперта.             на восток (SAIL  EAST),  пока  не ┤
│    Если Вам негде  нести  звезды,   упретесь в землю.  Далее, отправ- ┤
│ можно сделать следующее: выложить   ляйтесь на юг до  LAGASH'а  (это, ┤
│ ящик,  залезть на него,  оставить   вероятно,  город),  и немного по- ┤
│ там звезды, а затем взять его.      дождите (WAIT)  корабль  (BARGE). ┤
│    Кирпич можно бросать (THROW) в   Атакуйте  его  (ATACK BARGE),  и, ┤
│ разные  предметы.  Здесь есть еще   после победы,  идите на него  (GO ┤
│ одна особенность:  После  команды   BARGE).   Тщательно  обыщите  ко- ┤
│ "THROW  BRICK"  Вас попросят ука-   рабль,  но  побыстрее  возвращай- ┤
│ зать цель. Если после вопроса ни-   тесь,  т.к.  он  затонет примерно ┤
│ чего не ответить, то кирпич, хотя   через 15 ходов.                   ┤
│ и останется при Вас, уже не будет      Далее, плывите на юг до  тону- ┤
│ указан в инвентаре.  В нужной ло-   щего корабля (WRECK).  Здесь пры- ┤
│ кации  достаточно  будет  указать   гайте в воду (SWIM), и заплывайте ┤
│ командой  "AT ..." цель,  и герой   в кормовую пробоину (STERN HOLE). ┤
│ бросит туда кирпич.                 Поговорите  с   морскими   духами ┤
│    Если во    дворе    посмотреть   (TALK  TO SPIRITES) и помогите им ┤
│ вверх,  то можно увидеть  бойницу   (HELP SPIRITES).                  ┤
│ (BATTLEMENT), а если Вы посмотри-      Некоторые советы по  прохожде- ┤
│ те на нее,  то  обнаружите  банку   нию пещер:                        ┤
│ (CAN).  При  попытке в нее кинуть      1. Тщательно  их   обыскивайте ┤
│ кирпич, Вам сообщат, что цель на-   (кроме дыр - HOLES).              ┤
│ ходится слишком высоко. При мета-      2. Не залезайте в щель  -  это ┤
│ нии кирпича в другие предметы  не   раковина.                         ┤
│ происходит ничего.  Видимо, с по-      После победы над KRELL'ом  от- ┤
│ мощью  этого  кирпича  эту  банку   несите  череп (SKULL OF SALT) его ┤
│ можно открыть.                      хозяевам,  взамен получите  абор- ┤
│    Теперь   некоторые    догадки:   дажную саблю (CUTLESS)            ┤
│ Свойство  парить в дюйме от земли      Дальше отправляйтесь на юг  до ┤
│ наверное может помочь пройти  над   Трех Сестер (THREE SISTERS).  Это ┤
│ потоком  лавы,  который имеется в   три острова - пальмовый, вулкани- ┤
│ недоступной на данный момент  об-   ческий  и  скотский.  Обыщите  их ┤
│ ласти игры.  Возможно, что пройти   все. Некоторые советы:            ┤
│ мимо дракона  поможет  заклинание      1. Убитого рака возьмите с со- ┤
│ невидимости.  (Эти сведения обна-   бой - он пополнит провизию.       ┤
│ ружены при просмотре  кода  прог-      2. Нельзя  есть еду со стола - ┤
│ раммы).                             она отравлена.                    ┤
│    Возможно, мой дебют в  некото-      Ну вот  пожалуй  и все,  пишет ┤
│ рых  местах неверен,  поэтому жду   Илья.  Дальше на юг ему  проплыть ┤
│ помощи от других любителей адвен-   не  удалось - кончилась провизия. ┤
│ тюр.                                Может быть это удастся какому-ни- ┤
│                                     будь  другому путешественнику,  и ┤
│    Илья Плоников из Москвы делит-   он поделится с нами своими откры- ┤
│ ся своими достижениями в двух ад-   тиями и ответит на некоторые воп- ┤
│ вентюрах.                           росы Ильи Плотникова:             ┤
│                                        1. Как  попасть  в город (если ┤
│    Начнем с SEAS OF BLOOD.  В ней   это город)?                       ┤
│ Вы играете роль капитана  пиратс-      2. Существует  ли какой-нибудь ┤
│ кого судна "BANSHEE".  В игру до-   аналог HELP для подсказок в игре? ┤
│ вольно трудно играть, т.к. сложно      3. В чем же  все-таки  состоит ┤
│ рисовать карту.  Перед Вами целое   конечная цель игры?               ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 59 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                         П Е Р Е К Р Е С Т О К                         ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Кроме того,  наш корреспондент   убьете эльфов. Кстати, Евгений не ┤
│ отвечает на вопрос Белоусова Д.В.   упомянул о том, что если Вы пыта- ┤
│ (см.  ПЕРЕКРЕСТОК в "ZX-РЕВЮ" N5,   етесь  взять  бронзовый  медальон ┤
│ 1994). Он спрашивал, как выйти из   (BRONZE MEDALLION),  то  получите ┤
│ звездолета   в  программе   REBEL   ожог в виде буквы "M".            ┤
│ PLANET.                                Возле поля с урожаем Вы можете ┤
│                                     найти  пещеру  тролля,  для этого ┤
│    Это делается так: С начала иг-   надо дать команду  "GO  BOULDER". ┤
│ ры у Вас есть устройство  LIMCOM,   Чтобы  что-нибудь  увидеть  в ней ┤
│ а  на нем 4 кнопки.  Вот их пред-   Вам понадобиться  горящий  факел, ┤
│ назначение:                         который  также  лежит около поля. ┤
│    PS (PERSONAL STATUS) - показы-   Зажечь его можно от горящей хижи- ┤
│ вает  Ваше состояние - количество   ны.  Войдя в пещеру с факелом, Вы ┤
│ энергии и протеинов.                испугаете тролля,  и сможете спо- ┤
│    SS (SHIP  STATUS) - показывает   койно  исследовать новую локацию. ┤
│ время до взлета корабля.            В ней Вы найдете камень (ROCK).   ┤
│    IH (INNER  HATCH)  -  открыва-      Пройдя два раза на юг от боль- ┤
│ ет/закрывает внутренний люк (если   ших камней в поле, Вы можете най- ┤
│ Вы  находитесь  в воздушном шлюзе   ти кошелек (POUCH), в котором ле- ┤
│ (AIRLOCK),  то внешний люк должен   жат деньги и сообщение (MESSAGE). ┤
│ быть обязательно закрыт).           Если прочитать сообщение, то при- ┤
│    OH (OUTWARD HATCH) -  открыва-   летит орел.  Влезайте на него,  и ┤
│ ет/закрывает  внешний  люк (опять   он отвезет Вас в пустыню. (Но, не ┤
│ же,  Вы должны находиться в  AIR-   забудьте убить гарпию,  иначе она ┤
│ LOCK'е,  и  внутренний люк должен   атакует  Вашего  орла и убьет Вас ┤
│ быть закрыт).                       обоих.  Чтобы этого не случилось, ┤
│    Итак, Вы подходите к  внутрен-   ее можно застрелить из лука.)     ┤
│ нему люку,  нажимаете "IH" (PRESS      В пустыне Вы слезаете с  орла, ┤
│ IH),  заходите в AIRLOCK (GO AIR-   и он улетает.  Походив по локаци- ┤
│ LOCK),   нажимаете   "IH",  затем   ям,  Вы  можете   найти   палатку ┤
│ "OH",  и высаживаетесь  (  DISEM-   (TENT),  куда  нужно почаще захо- ┤
│ BARK) на планету. Все это делайте   дить,  чтобы не умереть от жажды. ┤
│ только после сообщения о посадке.   В окрестностях можно обнаружить и ┤
│ Вот Вы и вышли.                     обитателя  пустыни  -   песчаного ┤
│    К этой  игре  у меня тоже есть   червя  (SAND  WORM).  Червя можно ┤
│ вопросы:                            убить при помощи  камня  -  таким ┤
│    1. Как достать предметы из LI-   образом  Вы  получите  зуб червя. ┤
│ TE-KUBE?                            Что с этим  зубом  делать,  я  не ┤
│    2. Как починить SCOOTER? (При-   знаю.                             ┤
│ чем, команду "чинить" - MEND игра      Кроме того, в игре можно найти ┤
│ понимает).                          BASILISK'а,   который  превращает ┤
│    3. Как пронести  лазерный  меч   Вас в камень. Он уничтожится, ес- ┤
│ (LASER SWORD) через таможню?        ли на него направить зеркало (PO- ┤
│    4. Как выйти из космопорта  на   INT  MIRROR  BASILISK).   Зеркало ┤
│ планету TROPOS?                     можно найти возле большого скеле- ┤
│    Буду очень благодарен за любую   та,  там  же  лежит  запечатанный ┤
│ помощь по играм!                    горшок  (SEALED  CLAY POT).  Если ┤
│                                     его  разбить,  то  высвобождается ┤
│    Перминов Алексей из  Мурманска   ядовитый газ, что был в нем, и Вы ┤
│ отвечает  на просьбу о помощи Ев-   погибаете.                        ┤
│ гения Калинина из Ухты. Речь идет      Еще мне  удалось найти оазис с ┤
│ о  программе  TEMPLE  OF  TERROR.   отравленной водой, труп человека, ┤
│ Алексею  удалось  пройти  немного   у которого можно взять две бутыл- ┤
│ дальше, и он делится с нами свои-   ки и птиц,  с которыми мне ничего ┤
│ ми открытиями.                      сделать  не  удалось.  Непонятно, ┤
│    В локации,  где эльфы  танцуют   как убить сторожевую змею,  охра- ┤
│ вокруг  тела человека можно найти   няющую вход в город.              ┤
│ лук и стрелу (BOW,  ARROW), когда             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 60 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ некоторые магические способности, ┤
│       Система правил AD&D       ┤ │ но  они  ограничены и относятся в ┤
│  ─────────────────────────────  ┤ │ основном к использованию  естест- ┤
│   (С) Сергей Симонович, 1995.   ┤ │ венных  сил природы.  БАРД - одна ┤
│                                 ┤ │ из разновидностей ВЗЛОМЩИКА имеет ┤
└─────────────────────────────────┘ │ высокую  удачливость,  отличается ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ любознательностью  и  обостренным ┤
│           (продолжение)             умом.  Это  дает  ему возможность ┤
│   Начало см. в ZX-РЕВЮ-94 N5,6.     постепенно освоить  некоторые  из ┤
│                                     заклинаний, доступных для ВОЛШЕБ- ┤
│     9. Магия в системе AD&D.        НИКа.                             ┤
│                                        Различные врожденные    навыки ┤
│    Вот и настало время поговорить   по-разному благоприятствуют  ВОЛ- ┤
│ о магии в системе правил AD&D.  В   ШЕБНИКам и СВЯЩЕННИКам в исполне- ┤
│ этих играх магии придается  такое   нии  их  обязанностей.  Чтобы  не ┤
│ большое значение,  что этому воп-   вникать  во все сложности системы ┤
│ росу посвящены  специальные  тома   правил,  скажем только,  что ВОЛ- ┤
│ книг,  где  все рассмотрено очень   ШЕБНИКам благоприятствует высокий ┤
│ подробно.  Можно сказать так, что   параметр интеллекта,  а СВЯЩЕННИ- ┤
│ по каждому виду магии можно напи-   КАМ - высокий параметр обаяния.   ┤
│ сать отдельную книгу.                  Немагические персонажи   вроде ┤
│    Как мы уже говорили,  из четы-   бы  на  сто процентов лишены воз- ┤
│ рех основных амплуа героев магией   можности пользоваться магией,  но ┤
│ владеют  в полной мере только два   и это не совсем так. В игре могут ┤
│ - ВОЛШЕБНИК и СВЯЩЕННИК. При этом   встречаться  предметы   (амулеты, ┤
│ их  виды магии существенно разли-   волшебные    палочки,   волшебные ┤
│ чаются.  У СВЯЩЕННИКА магии имеет   кольца, артефакты и пр.), которые ┤
│ религиозный характер,  можно ска-   на время наделяют своего носителя ┤
│ зать,  что эта магия "Белая". Она   возможностью сотворить что-то ма- ┤
│ применяется в большинстве случаев   гическое,  например стать невиди- ┤
│ для  защиты,  лечения,  улучшения   мым или,  скажем,  дать тень  для ┤
│ физических качеств героев и пара-   отдыха в жаркой пустыне.          ┤
│ метров их оружия.  Хотя, надо от-      Магия - самое могучее оружие в ┤
│ метить, что и наносить магические   играх,   построенных  на  системе ┤
│ удары по врагам в трудную  минуту   AD&D.  С помощью заклинаний герои ┤
│ СВЯЩЕННИКИ тоже умеют.              могут вызывать землетрясения, об- ┤
│    У ВОЛШЕБНИКОВ магия имеет нас-   рушивать  на  головы   соперников ┤
│ тупательный   характер.  Конечно,   громы  и молнии,  метать огненные ┤
│ они умеют  и  лечить  и  защищать   шары,  лечить  неизлечимые  раны, ┤
│ своих  соратников от невзгод,  но   воздвигать преграды из камня, ог- ┤
│ основное направление их  действий   ня, льда и учиться, учиться и еще ┤
│ -  атака,  причем  по возможности   раз  учиться.  Множество  свитков ┤
│ оружием "массового поражения".      давно  забытых  знаний   доступны ┤
│    Сразу оговоримся,  что сущест-   только магам, так как никто, кро- ┤
│ вуют профессиональные классы  ге-   ме них,  не в состоянии их прочи- ┤
│ роев, обладающих как магическими,   тать.                             ┤
│ так и немагическими  способностя-                                     ┤
│ ми. Например можете рассматривать        9.1 Магия Волшебников.       ┤
│ ПАЛАДИНА как не  самого  сильного      У ВОЛШЕБНИКа   самый   широкий ┤
│ ВОИНа,  но  зато  с ограниченными   спектр заклинаний. Среди них мож- ┤
│ способностями к магии.  Благодаря   но  найти  заклинания  от   самых ┤
│ своему  врожденному обаянию и че-   простых  прикладных,  применяемых ┤
│ ловеколюбию он в некоторой степе-   на каждом шагу до могучих ударов, ┤
│ ни может пользоваться заклинания-   эквивалентных взрыву атомной бом- ┤
│ ми из набора  СВЯЩЕННИКа.  То  же   бы. Хоть мы и сказали, что основ- ┤
│ можно отнести и к РЕЙНДЖЕРу. Бла-   ная  направленность  ВОЛШЕБНИКа - ┤
│ годаря постоянному общению с при-   наступательная магия, это не сов- ┤
│ родой,  он  сумел  развить в себе   сем  так.  Выделим  еще некоторые ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 61 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ направления:                        по-материалистически. Предполага- ┤
│  - обеспечение повседневных нужд    ется,  что особым сочетанием слов ┤
│ отряда:                             и жестов ВОЛШЕБНИК создает вокруг ┤
│    - осветить  темное  подземелье   себя  некое  мыслеполе,   которое ┤
│ (Light);                            взаимодействует    с   окружающим ┤
│    - сотворить лестницу для подъ-   пространством так,  что создается ┤
│ ема на скалу (Create Ladder);       некий  канал,  через  который  из ┤
│    - сотворить веревку для спуска   других измерений проникает в наше ┤
│ в пропасть (Create Rope);           пространство энергия, необходимая ┤
│    - обеспечение ориентирования в   для реализации  его  желаний.  Но ┤
│ пространстве:                       для некоторых заклинаний недоста- ┤
│    - установить маяк (Create Bea-   точно слов и жестов. Иногда необ- ┤
│ con);                               ходимо еще наличие специально за- ┤
│    - осмотреть  окрестности с вы-   ряженного  объекта,  усиливающего ┤
│ соты (Wizard Eye);                  или  концентрирующего  мыслеполе. ┤
│ - обеспечение    перемещения    в   Это может быть хрустальная сфера, ┤
│ пространстве:                       волшебный посох, волшебная палоч- ┤
│    - прыжком   перенестись  через   ка и т.п.                         ┤
│ пропасть (Jump);                       Не все  заклинания  магам дос- ┤
│    - воспарить  над  препятствием   тупны сразу.  Всему надо  учиться ┤
│ (Levitate);                         постепенно. В игре ВОЛШЕБНИК дви- ┤
│    - перелететь на какое-то расс-   жется от  простых  заклинаний  ко ┤
│ тояние (Fly);                       все более и более сложным и могу- ┤
│    - телепортироваться  в  другой   щественным. В таблице 1 приведена ┤
│ регион (Teleport);                  динамика обучения ВОЛШЕБНИКа.     ┤
│    - остановить  течение  времени      Здесь ИНТЕЛЛЕКТ - параметр ин- ┤
│ (Time Stop);                        теллекта.                         ┤
│                                        ЯЗЫКИ/НАВЫКИ - количество язы- ┤
│    Возникает естественный вопрос:   ков, которые может знать Ваш ВОЛ- ┤
│ "А откуда берется вся та энергия,   ШЕБНИК.  Профессиональные навыки, ┤
│ которая необходима для исполнения   которыми он  обладает,  в  данном ┤
│ воли ВОЛШЕБНИКА?" Вопрос этот ре-   случае засчитываются как дополни- ┤
│ шается  в  системе  AD&D   вполне   тельный изученный язык.           ┤
│                                                    Таблица 1          ┤
│   ┌─────────┬────────┬──────────┬────────────┬──────────┬─────────┐   ┤
│   │Интеллект│ Языки/ │ Уровень  │ Обучаемость│  Максим. │Стойкость│   ┤
│   │         │ навыки │заклинания│            │  кол-во  │         │   ┤
│   ├─────────┼────────┼──────────┼────────────┼──────────┼─────────┤   ┤
│   │    1    │   0    │    -     │     -      │     -    │    -    │   ┤
│   │    2    │   1    │    -     │     -      │     -    │    -    │   ┤
│   │    ........................................................   │   ┤
│   │    9    │   2    │    4     │     35%    │     6    │    -    │   ┤
│   │   10    │   2    │    5     │     40%    │     7    │    -    │   ┤
│   │   11    │   2    │    5     │     45%    │     7    │    -    │   ┤
│   │   12    │   3    │    6     │     50%    │     7    │    -    │   ┤
│   │   13    │   3    │    6     │     55%    │     9    │    -    │   ┤
│   │   14    │   4    │    7     │     60%    │     9    │    -    │   ┤
│   │   15    │   4    │    7     │     65%    │    11    │    -    │   ┤
│   │   16    │   5    │    8     │     70%    │    11    │    -    │   ┤
│   │   17    │   6    │    8     │     75%    │    14    │    -    │   ┤
│   │   18    │   7    │    9     │     85%    │    18    │    -    │   ┤
│   │   19    │   8    │    9     │     95%    │    Все   │    1    │   ┤
│   │   20    │   9    │    9     │     96%    │    Все   │    2    │   ┤
│   │   .........................................................   │   ┤
│   │   23    │  12    │    9     │     99%    │    Все   │    5    │   ┤
│   │   24    │  15    │    9     │    100%    │    Все   │    6    │   ┤
│   │   25    │  20    │    9     │    100%    │    Все   │    7    │   ┤
│   └─────────┴────────┴──────────┴────────────┴──────────┴─────────┘   ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 62 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    УРОВЕНЬ ЗАКЛИНАНИЯ   -  макси-   заклинание ей не удалось.  Ветхие ┤
│ мальная сила заклинания,  доступ-   страницы рассыпались бы в прах от ┤
│ ная магу с данным интеллектом.      неосторожного  обращения (или она ┤
│    ОБУЧАЕМОСТЬ - вероятность  то-   не смогла бы разобрать  некоторые ┤
│ го,  что ВОЛШЕБНИК сумеет освоить   неизвестные ей символы).          ┤
│ заклинание,  с которым он  встре-      СТОЙКОСТЬю к заклинаниям обла- ┤
│ тится  по ходу игры.  Разумеется,   дают  маги с очень высоким интел- ┤
│ чем выше его интеллект, тем боль-   лектом.  В оригинальных  правилах ┤
│ ше  шансов,  что новое заклинание   AD&D стойкость относится только к ┤
│ будет ему доступно.                 иллюзорным заклинаниям.  То есть, ┤
│    МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ЗАКЛИ-   например,  если Ваш интеллект ра- ┤
│ НАНИЙ показывает сколько заклина-   вен 23-м,  Вас не собьют с  толку ┤
│ ний  максимального  уровня  может   заклинания-иллюзии до 5-го уровня ┤
│ знать ВОЛШЕБНИК с  данным  интел-   включительно.  В своих  играх  Вы ┤
│ лектом.  Рассмотрим алгоритм при-   можете   распространить   понятие ┤
│ обретения нового  заклинания  по-   стойкости не только  на  иллюзии, ┤
│ подробнее.  Предположим,  Ваш маг   но  и на какие-то другие виды ма- ┤
│ находит свиток или  пытается  ку-   гического воздействия.            ┤
│ пить/изучить новое заклинание.  У                                     ┤
│ каждого заклинания есть свой уро-       9.1.1. Постижение магии.      ┤
│ вень.  Он  сверяется  с доступным      Независимо от того,  каков ха- ┤
│ уровнем для данного интеллекта  и   рактер Вашего ВОЛШЕБНИКа,  то  ли ┤
│ если он ниже, то заклинание осва-   это  универсальный маг,  то ли он ┤
│ ивается без проблем. Если уровень   СПЕЦИАЛИСТ в избранном им направ- ┤
│ заклинания  выше,  чем  доступный   лении, ему все равно приходится в ┤
│ уровень, оно не осваивается. Если   игре учиться постепенно и целеус- ┤
│ их  уровни равны,  то проверяется   тремленно.  Знания  не  рождаются ┤
│ сколько уже заклинаний максималь-   внутри  него  самого,  он  должен ┤
│ ного уровня усвоено. Если это ко-   постигать  их в окружающем прост- ┤
│ личество еще не исчерпано, закли-   ранстве.                          ┤
│ нание  заносится в записную книж-      В самом  начале игры ВОЛШЕБНИК ┤
│ ку.                                 может иметь некоторую  магическую ┤
│    Например, волшебница Дельсино-   книгу, в которой изложены элемен- ┤
│ ра  имеет  параметр   интеллекта,   тарные заклинания низших уровней. ┤
│ равный  14-ти.  Она  уже  знает 7   Но  он  может  такой  книги  и не ┤
│ заклинаний 3-го уровня.  Во время   иметь и обучаться "с нуля".       ┤
│ своих  путешествий  она заходит в      Самый простой  способ обучения ┤
│ замок,  где в  давно  заброшенной   - это на время примкнуть к  како- ┤
│ библиотеке на полке ей попадается   му-то опытному магу, который либо ┤
│ древняя  магическая  книга.  Сдув   за деньги,  либо за услуги,  либо ┤
│ пыль с пожелтевших страниц, она с   просто от щедрости своей поделит- ┤
│ трепетом обнаруживает в книге но-   ся тем, что знает. То же относит- ┤
│ вое, неизвестное ей доселе закли-   ся и к разнообразным школам, ака- ┤
│ нание  третьего  уровня.  Вероят-   демиям и прочим формальным и  не- ┤
│ ность  того,  что  ей удастся его   формальным   "клубам",  гильдиям, ┤
│ освоить -  60  процентов.  Бросок   объединениям магов.  В компьютер- ┤
│ 100-гранной кости дал число 37. С   ных  играх  во многих случаях это ┤
│ трудом  разобрав  древние   руны,   организовано,  как  в   магазине. ┤
│ Дельсинора  копирует это заклина-   Приходишь,  получаешь прейскурант ┤
│ ние в свою  магическую  книгу.  И   на доступные тебе по  твоему  ин- ┤
│ теперь  она уже владеет 8-ью зак-   теллекту и по твоему опыту закли- ┤
│ линаниями  максимального  уровня.   нания,  платишь  деньги,  тратишь ┤
│ Самое большее, что она может себе   время и уходишь обученный.        ┤
│ теперь позволить,  пока не подни-      При достижении нового уровня в ┤
│ мет свой уровень и свой интеллект   игре, Вы можете получить доступ к ┤
│ - изучить  еще  одно  заклинание.   новым заклинаниям и  тогда  имеет ┤
│ Если  бы  на  кости  выпало число   смысл  снова наведаться в учебный ┤
│ большее, чем 60, значит прочитать   центр, если есть деньги. Впрочем, ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 63 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ такого  доступа  может  и не ока-   сбросить  в  пропасть,  утопить в ┤
│ заться.  Все зависит  от  решений   болоте, увлечь в западню и т.п.   ┤
│ DM, а в компьютерной игре все оп-      Успех применения  иллюзии  или ┤
│ ределяют ее авторы.                 фантазма зависит от  трех  факто- ┤
│    Ну и,  конечно, новые заклина-   ров:                              ┤
│ ния  можно  приобретать  по  ходу      - силы, с которой они произно- ┤
│ странствий,  откапывая  свитки  в   сятся (что задумал маг);          ┤
│ зарытых сундуках,  находя книги в      - защищенности жертвы (что она ┤
│ развалинах   замков,   крадя   их   ожидает);                         ┤
│ из-под носа у  злых  волшебников.      - от условий, в которых закли- ┤
│ Возможны  корпоративные  подходы,   нание произносится.               ┤
│ когда ВЗЛОМЩИК, например, похища-      Например, наша  Дельсинора   в ┤
│ ет  древний непонятный свиток,  а   бою   хочет   произвести  иллюзию ┤
│ потом передает его ВОЛШЕБНИКу  на   тролля, которого она уже видела и ┤
│ изучение.   Нередко  практикуется   который ей хорошо знаком.  Но она ┤
│ такой подход, когда Вас спрашива-   же может произвести  иллюзию  го- ┤
│ ют,  кому на изучение Вы отдадите   раздо  более могучего дракона,  с ┤
│ найденный свиток и если Вы  отве-   которым она, к сожалению, еще ни- ┤
│ тите неправильно,  то свиток рас-   когда  не сталкивалась.  Успех от ┤
│ сыпается в прах.                    первого заклинания будет  гораздо ┤
│                                     выше.  В  бою  этот "квазитролль" ┤
│     9.1.2. Иллюзорная магия.        отвлечет на себя внимание напада- ┤
│    Мы не будем останавливаться на   ющих и уменьшит угрозу отряду. По ┤
│ всех видах магии  подробно,  пос-   замыслу Дельсиноры иллюзия драко- ┤
│ кольку  они  достаточно  просты и   на  лучше,  т.к.  есть шанс,  что ┤
│ очевидны.  По всей видимости, для   противник не  только  отвлечется, ┤
│ начинающих   игроков   достаточно   но  и  вообще  покинет  поле боя, ┤
│ просто некоторого перечня  основ-   побросав оружие,  но,  увы...  ее ┤
│ ных заклинаний, чтобы понять, что   опытность такова, что вместо дра- ┤
│ и как они делают. Здесь же мы да-   кона у нее может получиться прос- ┤
│ дим только более развернутое опи-   то клубок дыма и заклинание будет ┤
│ сание иллюзорной магии, поскольку   потрачено впустую -  это  зависит ┤
│ она чуть более сложна для понима-   от противника.                    ┤
│ ния.                                   Теперь рассмотрим  противника. ┤
│    Во-первых, надо  сказать,  что   У  него  тоже есть какой-то опыт, ┤
│ иллюзорная магия бывает двух  ос-   какая-то  мудрость.  Предположим, ┤
│ новных видов. Ею могут вызываться   что его опыт мал и он не видел ни ┤
│ ИЛЛЮЗИИ и ФАНТАЗМЫ.                 тролля ни дракона.  Он поверит  и ┤
│    В результате иллюзий возникают   тому  и другому и,  не зная что с ┤
│ существа или объекты,  обладающие   ними делать,  может убежать. Если ┤
│ формой,  цветом тенями, звуками и   у него средняя опытность, то есть ┤
│ даже запахами. Для иллюзий высше-   троллей он знает, а драконов нет, ┤
│ го  порядка  доступна "перекачка"   то  он тоже поверит и тому и дру- ┤
│ энергии из других планов и в этом   гому, но с троллем будет сражать- ┤
│ случае  они  могут материализовы-   ся,  а от дракона убежит.  Если у ┤
│ ваться и быть опасными,  т.е. ис-   него большой опыт и  он  видел  и ┤
│ пользовать  энергию других прост-   тролля  и дракона,  то поверит он ┤
│ ранств для нанесения ударов. Т.е.   только троллю и нападет на  него. ┤
│ самые  мощные  иллюзии могут слу-   Дракон  же для него будет клубком ┤
│ жить каналом, через который сбра-   дыма, и не более.                 ┤
│ сывается энергия в Вашу среду.         Иллюзорные существа тоже могут ┤
│    Фантазмы, в отличие  от  иллю-   наносить удары. Впрочем, понятно, ┤
│ зий,  сами по себе безопасны. Они   что эти удары тоже будут иллюзор- ┤
│ возникают только в  Вашем  мозгу,   ными  и  раны,  нанесенные  таким ┤
│ реально ничего не существует.  Но   противником тоже будут иллюзорны- ┤
│ они могут быть источником косвен-   ми.  И вот здесь может возникнуть ┤
│ ной опасности,  т.к.  могут зама-   интересный  эффект.  Ведь жертва, ┤
│ нить жертву в опасное окружение -   получающая иллюзорный удар и  ил- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 64 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ люзорную  рану не знает,  что они   ние,  должен  стоять  неподвижно. ┤
│ иллюзорные. У нее может возникать   Мало того,  что он лишен  возмож- ┤
│ иллюзия потери сил и даже иллюзия   ности  делать  еще какие-то дейс- ┤
│ смерти.  Так недолго  и  умереть.   твия.  В тех  случаях,  когда  он ┤
│ Впрочем, здесь опять же все зави-   едет верхом или как-то еще,  зак- ┤
│ сит от опытности жертвы, поверила   линание может не  получиться.  Ни ┤
│ она в иллюзию или нет.  Если нет,   на палубе корабля, ни в автомоби- ┤
│ то и вопроса нет,  иллюзии не су-   ле заклинания не  могут  произно- ┤
│ ществует, а вот если поверила, то   ситься.  В принципе, это неплохое ┤
│ коллизия  разрешается   следующим   правило, помогающее программистам ┤
│ образом.                            в  создании игр.  Хотя,  конечно, ┤
│    Предположим, Вы стали  жертвой   нет правил  без  исключений.  Вам ┤
│ иллюзорного  дракона.  Иллюзорные   может встретиться игра, в которой ┤
│ удары отняли Ваши силы и Вы иллю-   это правило не будет учитываться. ┤
│ зорно умираете. Это означает, что      И последнее, во время боя зак- ┤
│ компьютер (если  игра  компьютер-   линатель неподвижен и потому  ни- ┤
│ ная)  реально Ваши силы не умень-   каких премиальных пунктов за лов- ┤
│ шает,  но где-то накапливает Ваши   кость ему не дается. Удары он по- ┤
│ иллюзорные   повреждения  до  тех   лучает  по полной программе.  Нет ┤
│ пор,  пока не сообщит, что Вы по-   улучшения параметра AC.           ┤
│ гибли.   Теперь  все  зависит  от                                     ┤
│ действий Вашего отряда.  Если  он     9.1.4. Компоненты заклинаний.   ┤
│ победит  и враг покинет поле боя,      Для того,   чтобы   заклинание ┤
│ то иллюзия развеется и  Вы  очне-   сработало,  в общем случае  нужны ┤
│ тесь  живым и здоровым.  Очнетесь   три  компонента  - голосовой (Г), ┤
│ Вы и в том случае,  если погибнет   соматический (С)  и  материальный ┤
│ тот  ВОЛШЕБНИК,  который поставил   (М).  Если  с голосовым все в по- ┤
│ иллюзию.  Но если Ваш отряд будет   рядке,  каждый понимает, что надо ┤
│ разбит   и  отступит,  Вы  будете   что-то  хотя бы прошептать,  то с ┤
│ мертвы  по-настоящему.  Бессозна-   прочими  не  очень.  Соматический ┤
│ тельного Вас добьют воины против-   компонент  - это обычная жестику- ┤
│ ника.                               ляция руками, руки не должны быть ┤
│                                     ни связаны, ни заняты. Материаль- ┤
│  9.1.3. Произнесение заклинаний.    ный компонент  -  некий  предмет, ┤
│    ВОЛШЕБНИК может   использовать   который должен быть брошен,  сло- ┤
│ только те заклинания, которые ему   ман,  съеден и т.п.  Что  это  за ┤
│ известны  (за  этим следит компь-   компонент, пока заранее неизвест- ┤
│ ютерная  программа  или  DM).  Он   но. Например, это может быть вол- ┤
│ должен  иметь  возможность  гово-   шебная палочка. Иногда материаль- ┤
│ рить. Существует, например закли-   ные концентраторы заклинания лег- ┤
│ нание  Silence  -  молчание,  под   кодоступны,  но  это могут быть и ┤
│ действием которого жертва лишает-   очень редкие и ценные предметы.   ┤
│ ся способности говорить.  Под та-      Большая часть  заклинаний тре- ┤
│ ким заклинанием Вы лишены возмож-   бует наличия всех компонентов, но ┤
│ ности пользоваться магией.  У Вас   есть и такие,  для которых доста- ┤
│ должны быть  свободны  обе  руки,   точно  только  одного  или  двух. ┤
│ т.к.  большинство заклинаний тре-   Так, те заклинания, которые можно ┤
│ буют жестов руками.  Поэтому ВОЛ-   произносить только голосом, могут ┤
│ ШЕБНИК не может за один раунд на-   производиться и со связанными ру- ┤
│ носить удар оружием и еще творить   ками.                             ┤
│ заклинание. И, наконец, если зак-                                     ┤
│ линание направлено на  конкретное      9.1.5. Сохраняющий бросок.     ┤
│ лицо,  то  оно должно быть в поле      Жертва, подвергшаяся  магичес- ┤
│ видимости мага.  В темноте у  Вас   кому удару,  имеет право на "сох- ┤
│ ничего  не  выйдет.  Сначала надо   раняющий  бросок"  -  это дает ей ┤
│ произнести заклинание, освещающее   шанс, как бы мал он ни был, избе- ┤
│ окружающую среду.                   жать  вредного воздействия и пов- ┤
│    Тот, кто  произносит  заклина-   реждений.  Такой бросок  произво- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 65 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                  Таблица 2.           ┤
│  ┌───────────┬─────────┬──────────────┬──────────────┬────────────┐   ┤
│  │           │         │  Парализующее│              │            │   ┤
│  │  Амплуа   │ Уровень │ или убивающее│ Превращающее │  Обычное   │   ┤
│  │           │         │  заклинание  │  заклинание  │ заклинание │   ┤
│  ├───────────┼─────────┼──────────────┼──────────────┼────────────┤   ┤
│  │ СВЯЩЕННИК │   1-3   │      10      │      13      │     15     │   ┤
│  │           │   4-6   │       9      │      12      │     14     │   ┤
│  │           │   7-9   │       7      │      10      │     12     │   ┤
│  │           │  10-12  │       6      │       9      │     11     │   ┤
│  │           │  13-15  │       5      │       8      │     10     │   ┤
│  │           │  16-18  │       4      │       7      │      9     │   ┤
│  │           │  19+    │       2      │       5      │      7     │   ┤
│  │           │         │              │              │            │   ┤
│  │ ВЗЛОМЩИК  │   1-4   │      13      │      12      │     15     │   ┤
│  │           │   5-8   │      12      │      11      │     13     │   ┤
│  │           │   9-12  │      11      │      10      │     11     │   ┤
│  │           │  13-16  │      10      │       9      │      9     │   ┤
│  │           │  17-20  │       9      │       8      │      7     │   ┤
│  │           │   21+   │       8      │       7      │      5     │   ┤
│  │           │         │              │              │            │   ┤
│  │ ВОИН      │    0    │      16      │      17      │     19     │   ┤
│  │           │   1-2   │      14      │      15      │     17     │   ┤
│  │           │   3-4   │      13      │      14      │     16     │   ┤
│  │           │   5-6   │      11      │      12      │     14     │   ┤
│  │           │   7-8   │      10      │      11      │     13     │   ┤
│  │           │  9-10   │       8      │       9      │     11     │   ┤
│  │           │  11-12  │       7      │       8      │     10     │   ┤
│  │           │  13-14  │       5      │       6      │      8     │   ┤
│  │           │  15-16  │       4      │       5      │      7     │   ┤
│  │           │   17+   │       3      │       4      │      6     │   ┤
│  │           │         │              │              │            │   ┤
│  │ ВОЛШЕБНИК │   1-5   │      14      │      13      │     12     │   ┤
│  │           │   6-10  │      13      │      11      │     10     │   ┤
│  │           │  11-15  │      11      │       9      │      8     │   ┤
│  │           │  16-20  │      10      │       7      │      6     │   ┤
│  │           │   21+   │       8      │       5      │      4     │   ┤
│  └───────────┴─────────┴──────────────┴──────────────┴────────────┘   ┤
│ дится  с помощью "20-гранной" иг-   защита и лечение отряда - его за- ┤
│ ральной  кости.  Число,   которое   дача.  ВОЛШЕБНИК и ВЗЛОМЩИК  при- ┤
│ должен  "выбросить"  подвергшийся   мерно одинаково держат магические ┤
│ нападению,  зависит от его амплуа   удары.  Первый изворачивается  за ┤
│ и от его уровня. Если ему удастся   счет  своей ловкости,  а второй - ┤
│ "выбросить" это число  или  боль-   хитрости.  Хуже всех противостоит ┤
│ шее,  то  либо  удар не проходит,   магии  ВОИН - его лучшие качества ┤
│ либо  вред  от  него  уменьшается   - физическая сила и он не перено- ┤
│ (это  зависит от конкретного зак-   сит  магию.  Но  зато ВОИН быстро ┤
│ линания).  Пример таблицы "сохра-   прогрессирует и на высоких  уров- ┤
│ няющих бросков" для защиты от ма-   нях опытности он противостоит ма- ┤
│ гов приведен в табл.2.              гии лучше любых других героев.    ┤
│    Подобные таблицы  используются      Из этой   таблицы  Вам  должно ┤
│ для  алгоритмизации  сражений   с   быть ясно, что когда Вы в ролевой ┤
│ применением магии.                  игре сталкиваетесь с отрядом вра- ┤
│    Данные из   табл.2   интересно   гов,  Ваши магические удары в на- ┤
│ проанализировать. Получается так,   чале игры должны быть прежде все- ┤
│ что  обычно  СВЯЩЕННИК   наиболее   го направлены против наиболее фи- ┤
│ стоек  к  воздействию  враждебной   зически сильных противников,  а в ┤
│ магии.  Это  неудивительно,  т.к.   конце игры - против наиболее  ма- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 66 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ гически сильных противников. Вое-   ет  кумулятивного  характера,  то ┤
│ вать же со СВЯЩЕННИКАМи  магичес-   есть его действие не объединяется ┤
│ кими  способами  вообще  нерацио-   с действиями других защитных зак- ┤
│ нально, их лучше поражать обычным   линаний.   Обычный   материальный ┤
│ оружием.                            концентратор - кусочек выделанной ┤
│                                     кожи, предварительно благословен- ┤
│    9.1.6. Краткий  справочник  по   ный СВЯЩЕННИКом.                  ┤
│     заклинаниям ВОЛШЕБНИКа.                                           ┤
│    Учитывая то,  что  общий пере-      Заклинание: BURNING HANDS      ┤
│ чень  заклинаний  огромен  (более      Школа: Alteration Дистанция: 2 ┤
│ 400  основных) и к каждому прила-   шага  Компоненты:  Г,С  Продолжи- ┤
│ гается подробное описание, мы вы-   тельность: на момент произнесения ┤
│ несли только те немногие заклина-   Длительность произнесения:  1 ра- ┤
│ ния, которые более широко исполь-   унд Зона действия:  2 шага Сохра- ┤
│ зуются в компьютерных играх и Вам   няющий бросок: есть (1/2)         ┤
│ они могут встречаться чаще.            Этим заклинанием из  рук  вол- ┤
│    Мы также  рассчитываем  на то,   шебника вызывается поток пламени, ┤
│ что та информация, которую мы да-   дугой падающий на землю на  расс- ┤
│ ем,  найдет практическое примене-   тоянии  двух  шагов от него.  Это ┤
│ ние  в  Ваших  собственных  играх   заклинание для ближнего боя.  Оно ┤
│ (см.  раздел "Проект RPG").  И Вы   наносит повреждение в размере     ┤
│ не должны считать себя скованными      1d3+2*level (level  -  уровень ┤
│ теми рамками и правилами, которые   опытности волшебника),  но не бо- ┤
│ приведены ниже для различных зак-   лее, чем 1d3+20 HP.               ┤
│ линаний.  Пусть  это будет хоть и      Этим заклинанием воспламеняют- ┤
│ кратким,  но только ориентиром  в   ся горючие предметы и  оно  может ┤
│ Вашем самостоятельном творчестве.   быть использовано, например, что- ┤
│ Чувствуйте себя свободно,  берите   бы поджечь факел.                 ┤
│ то,  что  нравится  и то,  на что      Если "прошел" сохраняющий бро- ┤
│ хватает Ваших сил и ресурсов  Ва-   сок,  то  повреждения  от  такого ┤
│ шего "Спектрума". Начните с самых   удара    уменьшаются   наполовину ┤
│ простейших экспериментов и посте-   (1/2).                            ┤
│ пенно,  вместе  с нами двигайтесь                                     ┤
│ дальше.                                Заклинание: CHILL TOUCH        ┤
│                                        Это заклинание  применяется  в ┤
│  9.1.6.1. Заклинания 1-го уровня    ближнем бою. Физически это проис- ┤
│                                     ходит так:  руки волшебника начи- ┤
│    Заклинание: ALARM                нают светиться голубым сиянием  и ┤
│    Это заклинание  вызовет трево-   все, к чему он прикоснется, испы- ┤
│ гу, если любое живое существо по-   тывает  ледяное  онемение.   Если ┤
│ пытается  незамеченным  подойти к   сохраняющий бросок "проходит", то ┤
│ тому месту,  где было произнесено   вреда нет никакого.  Если нет, то ┤
│ заклинание  (к тому предмету,  на   наносится   повреждение  размером ┤
│ который оно наложено).  Оно дейс-   1d4 плюс вычитается одна  единица ┤
│ твует  и  на  невидимые создания.   Силы. После боя Сила восстанавли- ┤
│ Только астральные тела могут про-   вается со  скоростью  примерно  1 ┤
│ никнуть  в зону охраны незамечен-   единица в час.                    ┤
│ ными. Материальным концентратором      Это заклинание  имеет   особое ┤
│ заклинания  обычно  является  ма-   воздействие на "немертвь" (зомби, ┤
│ ленький серебряный колокольчик.     привидения,  вампиры,  скелеты  и ┤
│                                     т.п.).  Если  у них не "проходит" ┤
│    Заклинание: ARMOR                сохраняющий бросок, они "выключа- ┤
│    Это заклинание позволяет уста-   ются" из боя на несколько (n) ра- ┤
│ новить  дополнительную магическую   ундов, где число n может быть оп- ┤
│ защиту,  эквивалентную   кольчуге   ределено по формуле: n=1d4+level, ┤
│ (AC=6).  Оно  не действует на тех   здесь,  как и далее, level - уро- ┤
│ персонажей,  у которых и так  уже   вень опытности заклинателя.       ┤
│ есть более мощная защита. Не име-                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 67 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Заклинание: DANCING LIGHT        для  определения  параметров най- ┤
│    Очень нужное  и  широко  расп-   денного оружия и средств  защиты. ┤
│ ространенное  заклинание.  Служит   За  один  раунд  ВОЛШЕБНИК  может ┤
│ для  освещения  темных подвалов и   исследовать  столько   предметов, ┤
│ подземелий.  При перемещении свет   каков его уровень. Но за это зак- ┤
│ перемещается вместе с Вами.  Важ-   линание приходится  платить.  При ┤
│ нейший параметр  -  продолжитель-   каждом  вызове  на  8 пунктов его ┤
│ ность  действия  зависит  от силы   уменьшается   параметр   здоровья ┤
│ произносящего. По количеству све-   CONSTITUTION. Он может восстанав- ┤
│ та  эквивалентно факелу или фона-   ливаться только последующим часо- ┤
│ рю. Перед тем, как кончится дейс-   вым отдыхом.  В компьютерной игре ┤
│ твие   заклинания,   пользователь   обычно предметы полностью раскры- ┤
│ должен быть предупрежден. Матери-   вают свои свойства.  В настольной ┤
│ альных  концентраторов может быть   игре Dungeon Master  может  поже- ┤
│ много,  например   жук-светлячок,   лать  этого не делать.  Он только ┤
│ кусочек фосфора, щепка трухлявого   указывает  на  то,  что  у  этого ┤
│ пня и т.п.                          предмета есть особые свойства,  а ┤
│                                     для их раскрытия потребуются  до- ┤
│    Заклинание: DETECT MAGIC         полнительные вызовы заклинания.   ┤
│    Это заклинание позволяет улав-      Типичный пример.   Вы    нашли ┤
│ ливать  магические  излучения  по   кольцо.  По  заклинанию Вам гово- ┤
│ направлению движения на  расстоя-   рят, что оно бронзовое и увеличи- ┤
│ нии до 20 шагов.  Маг в состоянии   вает  Ваш Armor Class,  например, ┤
│ определить интенсивность  излуче-   на единицу, но обладает специаль- ┤
│ ния  (сильное,  слабое,  незначи-   ными  свойствами.  При  повторном ┤
│ тельное) и даже (с некоторой  ве-   использовании заклинания Вам  го- ┤
│ роятностью)  его вид,  хотя конк-   ворят, что это "Кольцо трех жела- ┤
│ ретно,  что это за заклинание, он   ний",  но что это за желания и  в ┤
│ определить не может.  Вероятность   какой мере можно на них рассчиты- ┤
│ определения вида равна 10%  * le-   вать Вы все-таки не узнаете, пока ┤
│ vel.  Излучение может быть блоки-   не попробуете с ним поэксперимен- ┤
│ ровано каменной стеной толщиной в   тировать.                         ┤
│ 30  см,  стальной  политой 2-3 см      Материальные компоненты:  жем- ┤
│ или деревянной  стеной  (60  см).   чужина и др.                      ┤
│ Таким образом, снаружи сооружений                                     ┤
│ определить наличие  магии  внутри      Заклинание: JUMP               ┤
│ не удается.  Особенность заклина-      Те, на  кого  воздействует это ┤
│ ния в том, что она не идентифици-   заклинание,  могут совершить пры- ┤
│ рует   наклонность  магии  (злая,   жок  примерно  на  10  метров.  В ┤
│ добрая, нейтральная).               компьютерных версиях  игр  обычно ┤
│                                     действие заклинания распространя- ┤
│    Заклинание: DETECT UNDEAD        ется на всю группу,  в настольных ┤
│    Это заклинание позволяет "выя-   -  только на того героя,  на кого ┤
│ вить" наличие "немертви" по  пути   оно направлено.                   ┤
│ следования.  Можно  определить  и      Материальный компонент - засу- ┤
│ направление, но на это потребует-   шенная нога  кузнечика.  При  ис- ┤
│ ся  еще  один раунд.  Блокируется   пользовании ломается,  т.е. одно- ┤
│ излучение,  как и у заклятия  De-   разового действия.                ┤
│ tect Magic. Материальным концент-                                     ┤
│ ратором является  горсть  кладби-      Заклинание: LIGHT              ┤
│ щенской земли. Заклинание не ука-      Заклинание применяется для ос- ┤
│ зывает точно на тип существа, ко-   вещения   помещений.   Источником ┤
│ торое находится на Вашем пути.      света становится почти любой объ- ┤
│                                     ект,  на который укажет маг. Если ┤
│    Заклинание: IDENTIFY             объект неподвижен, значит свет не ┤
│    Очень важное заклинание.  Слу-   будет сопровождать Вас  на  Вашем ┤
│ жит   для  идентификации  свойств   пути. Если заклинание наложено на ┤
│ предметов,  в частности оно важно   живое существо против  его  воли, ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 68 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    A D V E N T U R E     G A M E S                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ оно  может  провести  сохраняющий      Заклинание: SLEEP              ┤
│ бросок.  Очевидно,  что если  оно      Противник, на которого обраще- ┤
│ наложено  на члена Вашего отряда,   но это заклинание,  впадает в ко- ┤
│ он этого делать не будет. Матери-   матозное состояние и  "выключает- ┤
│ альный  компонент - светлячок или   ся" из боя на время действия зак- ┤
│ что-либо подобное.                  линания.  Но оно действует не  на ┤
│                                     все создания. Так, оно совершенно ┤
│    Заклинание: MAGIC MISSILE        не действует  на  "нежить"  и  не ┤
│    Это метание  магических стрел,   действует  на некоторые специаль- ┤
│ которые всегда попадают  в  цель.   ные виды существ.                 ┤
│ Противник обязательно должен быть      Если такому  "заснувшему" про- ┤
│ виден. Живые противники испытыва-   тивнику нанести ранение или прос- ┤
│ ют при этом небольшое,  но неотв-   то удар, он проснется, хотя обыч- ┤
│ ратимое   повреждение    размером   ный шум разбудить его  не  может. ┤
│ 1d4+1 HP за каждую стрелу. На не-   Обратите внимание на то, что удар ┤
│ живые  объекты  (замки,  двери  и   по спящему противнику дает  боль- ┤
│ т.п.)  это  заклинание  никак  не   шее поражение,  чем по бодрствую- ┤
│ действует. Количество испускаемых   щему (см.  раздел Combat  Mode  в ┤
│ стрел  зависит от уровня заклина-   прошлом выпуске журнала). Матери- ┤
│ теля. На первом уровне - 1 стрела   альным компонентом может быть ще- ┤
│ и  за каждую пару уровней прибав-   потка очень тонкого песка или др. ┤
│ ляется еще по одной.                                                  ┤
│    При большом  количестве  стрел      Заклинание: UNSEEN SERVANT     ┤
│ оружие может считаться  массовым,      "Невидимый слуга" - это  неви- ┤
│ т.е.  может  поражаться  не  один   димая, бесформенная сила, которую ┤
│ противник, а несколько.             можно привлекать  для  исполнения ┤
│                                     каких-то физических действий, ко- ┤
│    Заклинание: READ MAGIC           торые самому магу делать не с ру- ┤
│    С помощью   этого   заклинания   ки. Например, его (ее) можно поз- ┤
│ ВОЛШЕБНИК читает магические  над-   вать, чтобы открыть дверь, перед- ┤
│ писи,  нанесенные на разные пред-   винуть сундук.  В принципе особой ┤
│ меты - книги,  свитки,  оружие  и   силой это заклинание не обладает. ┤
│ т.п.   Материальный  компонент  -   Такой  "слуга"  может  нести груз ┤
│ чистый кристалл или призма.         порядка  10  кг  или  передвигать ┤
│                                     грузы до 20 кг.  То же и дверьми. ┤
│    Заклинание: SHIELD               Открыть можно только обычные две- ┤
│    Это заклинание   устанавливает   ри,  крышки, люки, которые не за- ┤
│ защитный барьер перед тем героем,   перты на запоры. Для борьбы с за- ┤
│ на  которого  направил заклинание   порами  у  этого "слуги" маловато ┤
│ ВОЛШЕБНИК.  Этот барьер полностью   сил.  Он не может принимать учас- ┤
│ противодействует  метательным ма-   тие  в  боях,  не  может наносить ┤
│ гическим заклинаниям,  а для про-   удары и, соответственно, не может ┤
│ чих   видов  оружия  обеспечивает   их получать.  Это просто сила,  а ┤
│ следующий параметр AC:              не существо.                      ┤
│ - AC  2  для ручного метательного      Материальными     компонентами ┤
│ оружия - дротики, топорики и пр.    заклинания являются кусочек стру- ┤
│ - AC  3  для прочего метательного   ны и кусочек дерева.              ┤
│        оружия - стрелы лука,  ар-             *    *     *            ┤
│        балета,  камни, выпущенные      На этом мы заканчиваем краткое ┤
│        из пращи, колючки мантико-   рассмотрение   заклинаний    1-го ┤
│        ры и пр.                     уровня для ВОЛШЕБНИКа и прощаемся ┤
│ - AC 4 против любых других  видов   до следующего выпуска,  в котором ┤
│ атаки.                              мы  рассмотрим  прочие заклинания ┤
│    Щит сам передвигается вместе с   до 9-го уровня и обратимся к  ма- ┤
│ его носителем и это хорошо, но он   гии СВЯЩЕННИКа.                   ┤
│ обеспечивает защиту только спере-                                     ┤
│ ди, в этом его слабость.            (Продолжение в следующем выпуске) ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 72 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│            SHADOWFIRE           ┤ │ вает силу воина,  следующая - его ┤
│          ──────────────         ┤ │ скорость,   а  третья  показывает ┤
│            (С) BEYOND           ┤ │ жизненную энергию.  Если Ваш пер- ┤
└─────────────────────────────────┘ │ сонаж несет какой-нибудь предмет, ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ то внизу появится еще одна полос- ┤
│ Эксперт: Андрей Латенков,           ка.  Ее  длина  будет зависеть от ┤
│                 г.Оренбург, 1994.   тяжести  предмета.  Если   полоса ┤
│                                     немного покраснела, значит Вашему ┤
│    В 2178 году с  планеты  Энигма   солдату тяжело,  и у  него  будет ┤
│ был похищен посол Криксикс. Похи-   уменьшаться скорость и энергия.   ┤
│ тители - генерал Зофф и его сооб-      Справа изображены  три  компь- ┤
│ щники, поставили перед правитель-   ютера - красный,  желтый и  зеле- ┤
│ ством планеты невыполнимые требо-   ный.  Красный компьютер - это вы- ┤
│ вания.  Зофф укрылся в своей кре-   ход в боевой режим; зеленый - вы- ┤
│ пости,  надеясь, что там он будет   ход в режим перемещения, а желтый ┤
│ в полной безопасности.  Но прави-   -  выход  в  главное  меню.   Эти ┤
│ тельство Энигмы послало отряд ди-   компьютеры находятся в каждом ме- ┤
│ версантов-профессионалов  "ENIGMA   ню, поэтому я их больше описывать ┤
│ FORCE",  чтобы спасти посла Крик-   не буду.                          ┤
│ сикса, взять в плен Зоффа и унич-      В верхней   части  справа,  Вы ┤
│ тожить его крепость.                увидите портрет того,  кем  Вы  в ┤
│    Игра представляет собой  смесь   данное время управляете.  Если Вы ┤
│ жанров  RPG/STRATEGY,  управление   пока никем не  управляете,  то  в ┤
│ игрой осуществляется выбором пик-   этом  окне  Вы  увидите  генерала ┤
│ тограмм.  После загрузки игры Вам   Зоффа,  сидящего на троне.  Левее ┤
│ будет предложено выбрать управле-   этого окна находится основное ок- ┤
│ ние.  Когда Вы сделаете это,  Вам   но,  по которому Вы можете наблю- ┤
│ предоставят  возможность  продол-   дать передвижения Ваших солдат по ┤
│ жить  отложенную  игру (OLD GAME)   крепости. Чуть ниже находится ок- ┤
│ или начать новую  (NEW  GAME),  а   но сообщений.                     ┤
│ также  загрузить  отложенную игру      В левой части экрана Вы видите ┤
│ (LOAD),  или сохранить  состояние   лица Ваших воинов,  по которым Вы ┤
│ на данное время (SAVE).             можете  наблюдать за их состояни- ┤
│    В центре  экрана выводятся ре-   ем.  Ниже  Вы  увидите  индикатор ┤
│ зультаты боев с  врагами  и  цель   времени, которое постоянно убыва- ┤
│ Вашей миссии:                       ет.  По истечении  этого  времени ┤
│                                     генерал Зофф сбежит, забрав с со- ┤
│ ENIGMA FORCE LOSS                   бой Криксикса.                    ┤
│            (потери Вашего отряда)                                     ┤
│ ENEMY CAPTURED                         Итак, Вы  выбрали кого-либо из ┤
│      (число взятых в плен врагов)   героев для отдачи приказа. В ниж- ┤
│ ENEMY DESTROYED                     ней части экрана появится три ок- ┤
│       (количество потерь у врага)   на.  Начну описывать их слева на- ┤
│                                     право.                            ┤
│    Но сейчас  Вам  эти  опции  не      В первом окне Вы увидите пред- ┤
│ нужны,  так  что  выбирайте опцию   меты,  которые находятся в  лока- ┤
│ "NEW GAME",  и начинайте игру. Вы   ции. Пиктограмма в виде раскрытой ┤
│ увидите  перед собой шесть персо-   книги позволит Вам увидеть  пред- ┤
│ нажей,  которыми Вы будете управ-   меты,  которые  не  поместились в ┤
│ лять.  Это (слева направо): Силк,   окне. В следующем окне можно уви- ┤
│ Севрина Марис,  Манто, Маул, Зарк   деть  предметы и оружие,  которые ┤
│ Монтор и Торик. Каждый из них об-   несет солдат, находящийся под Ва- ┤
│ ладает особыми способностями, ко-   шим  управлением.  В третьем окне ┤
│ торых  нет ни у кого из остальных   находятся пиктограммы,  с помощью ┤
│ членов  отряда.  Выбрав  прицелом   которых  и  будет  осуществляться ┤
│ кого-либо  из героев,  Вы увидите   управление выбранным персонажем.  ┤
│ на экране его физическое  состоя-      Пиктограмма, отдаленно напоми- ┤
│ ние. Самая верхняя полоса показы-   нающая световое перо,  предназна- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 73 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│                                                                       ┤
│ чена для использования предметов.   ее выбора, Вы должны указать нап- ┤
│ Для этого нужно навести прицел на   равление атаки  во  втором  окне. ┤
│ эту пиктограмму, нажать "FIRE", а   Назначение  пиктограммы,  находя- ┤
│ затем  навести прицел на предмет,   щейся ниже,  узнать пока не  уда- ┤
│ который хотите использовать. Если   лось.  Пиктограмма  со  стрелкой, ┤
│ после  наведения  прицела предмет   направленной  влево,  служит  для ┤
│ не  выделится  пунктиром,  значит   отступления.  После  выбора нужно ┤
│ этот  персонаж  не  может его ис-   указать направление  отступления. ┤
│ пользовать,  и нужно  попробовать   Пиктограмма   между  стрелками  и ┤
│ кем-нибудь другим.                  компьютерами позволяет  осмотреть ┤
│    Пиктограмма в виде руки,  дер-   локацию.  После ее выбора укажите ┤
│ жащей предмет,  позволит Вам под-   направление взора. В третьем окне ┤
│ нять один из предметов в локации.   показывается   изображение  Ваших ┤
│    Пиктограмма в   виде  лазерной   врагов, или друзей после выполне- ┤
│ установки служит для  использова-   ния команд "атака",  или "посмот- ┤
│ ния оружия. Вы можете брать с со-   реть".                            ┤
│ бой несколько  видов  оружия,  но                                     ┤
│ это  не  значит,  что  Вы сможете             ПЕРЕМЕЩЕНИЯ.            ┤
│ стрелять из всего  сразу.  Выбрав                                     ┤
│ эту функцию,  а затем оружие, ко-      Выход в это меню изменит толь- ┤
│ торое хотите использовать в  бою,   ко нижнюю часть экрана. Окно сле- ┤
│ Вы  приведете своего воина в бое-   ва  (со стрелками) служит для вы- ┤
│ готовность,  и он будет все время   бора направления  движения.  Если ┤
│ начеку.                                                               ┤
│    Опция с рукой, бросающей пред-                                     ┤
│ мет,  позволяет избавится от  не-                                     ┤
│ нужного оборудования.                                                 ┤
│    Пиктограмма в   виде  уходящих                                     ┤
│ вдаль окон служит для  выхода  из                                     ┤
│ меню.                                                                 ┤
│           БОЕВОЙ РЕЖИМ.                                               ┤
│                                                                       ┤
│    После выбора этого меню, верх-                                     ┤
│ няя часть экрана не изменится,  а                                     ┤
│ в  нижней  появятся  новые опции.                                     ┤
│ Начну их описывать с правого  ок-                                     ┤
│ на.                                                                   ┤
│    Самая первая  пиктограмма,  со                                     ┤
│ стрелкой,   направленной  вправо,                                     ┤
│ служит для атаки на врага.  После                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 74 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ стрелка  не  закрашена,  значит в   вайте  оружия  Манто.  Для  Манто ┤
│ эту сторону прохода нет,  а  если   возьмите  телепортатор (выглядит, ┤
│ закрашена, но не выбирается, зна-   как белый  шлем).  Потом,  выбрав ┤
│ чит в этом  направлении  запертая   опцию "использовать",  выберите в ┤
│ дверь.  Справа  пишется  название   окне предметов пиктограмму в виде ┤
│ локации, в которой Вы находитесь.   джойстика.  Вы увидите, что в ле- ┤
│                                     вом окне появились три  космичес- ┤
│              ГЕРОИ.                 ких  катера.  Выбрав какой-нибудь ┤
│                                     из  них,  Вы  телепортируетесь  в ┤
│    А теперь подробнее о Вашем от-   крепость Зоффа. Место, где Вы по- ┤
│ ряде (слева направо).               явитесь,  будет зависеть от того, ┤
│    Силк, как Вы заметили, облада-   какой катер Вы выбрали, т.е. мож- ┤
│ ет большой силой и скоростью.  Не   но высадится в трех местах. Затем ┤
│ советую  выбирать ему слишком тя-   Манто  должен выложить свой теле- ┤
│ желого оружия (индикатор  тяжести   портатор. Выбрав функцию "исполь- ┤
│ закрашен на 2/3),  хотя он не бу-   зовать", наведите прицел на теле- ┤
│ дет терять от этого  силы.  Выби-   портатор. В первом окне слева по- ┤
│ райте  для  него  среднее  оружие   явятся  воины,  которых Вы можете ┤
│ (половина индикатора тяжести).      переправить к себе.  Наведите  на ┤
│    Севрина очень слаба,  но  ско-   кого-нибудь из них прицел, нажми- ┤
│ рость у нее отличная. Кроме того,   те "FIRE",  и он окажется рядом с ┤
│ она специалист по преодолению за-   Вами.                             ┤
│ пертых дверей.  Поэтому,  в самом      Для того,   чтобы  переправить ┤
│ начале игры,  когда все персонажи   кого-то обратно на корабль, нужно ┤
│ в корабле,  возьмите ей набор от-   подвести  его  к тому месту,  где ┤
│ мычек (она единственная,  кто мо-   стоит Манто. Лица тех, кого можно ┤
│ жет их взять).  Теперь она сможет   переправить  на корабль будут по- ┤
│ открыть любую дверь.                казаны во втором окне. Телепорта- ┤
│    Манто является  самым   важным   тор   можно  использовать  только ┤
│ членом  Вашего  отряда.  Он может   когда он лежит,  а не в  руках  у ┤
│ брать с собой телепортатор, и пе-   Манто.                            ┤
│ реносить  вместе  с  собой в кре-      Для Севрины  обязательно возь- ┤
│ пость Зоффа всех остальных  геро-   мите связку отмычек. Чтобы их ис- ┤
│ ев.  Кроме того, он имеет хорошую   пользовать,   поставьте   Севрину ┤
│ скорость, и силу.                   около запертой  двери  и,  выбрав ┤
│    Маул считается самым мощным  в   функцию "использовать",  наведите ┤
│ Вашем отряде.  Выбирайте ему ору-   прицел на отмычки. Примерно через ┤
│ жие помощнее,  и  ведите  впереди   15 секунд дверь будет открыта,  о ┤
│ всей группы. Со своими врагами он   чем Вы узнаете из окна сообщений. ┤
│ справляется лучше всех,  на  него      Когда Ваши герои передвигаются ┤
│ ложится вся тяжесть сражения. Ма-   или  сражаются,  их изображения в ┤
│ ул - это Ваше  прикрытие,  но  не   левой верхней части экрана приоб- ┤
│ переоценивайте его.                 ретают синий цвет. Как только во- ┤
│    Зарк Монтор  -  капитан Вашего   ин отбился,  или сделал ход,  его ┤
│ отряда.  Это мощный и быстрый во-   лицо  опять  станет светлым,  что ┤
│ ин, по своим способностям он поч-   означает "готов к следующему при- ┤
│ ти  не  уступает  Маулу.  В  боях   казу". Если его изображение мига- ┤
│ очень эффективен.                   ет, значит ему тяжело, и он может ┤
│    Торик   выглядит   значительно   погибнуть. Если идет бой, то пос- ┤
│ слабее остальных, но является са-   тарайтесь вывести  этот  персонаж ┤
│ мым быстрым. Не перегружайте его,   из  битвы  (если  это возможно) и ┤
│ и не бросайте в гущу сражений.      освободить его от всех  предметов ┤
│                                     на некоторое время. Во время боев ┤
│               ИГРА.                 Ваши бойцы теряют силу и энергию. ┤
│                                     Для восстановления силы нужно не- ┤
│    Итак, Вы начали игру.  Для на-   которое время не отдавать солдату ┤
│ чала вооружите свой отряд. Не да-   приказов.  Помните,  что скорость ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 75 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ никогда не восстанавливается, так      В комнате  Зоффа  Вы   найдете ┤
│ что не перегружайте своих воинов.   ключ  с  изображением черепа.  Он ┤
│ Если на Вашего бойца  напали,  то   предназначается   для   отпирания ┤
│ компьютер выдаст сообщение вместе   взрывного механизма,  который на- ┤
│ со звуковым сигналом.               ходится в нижней части  крепости, ┤
│                                     и который  еще нужно найти.  Под- ┤
│      СОВЕТЫ И РЕКОМЕНДАЦИИ.         скажу, как это сделать. В коридо- ┤
│                                     ре,   возле  оффиса  Зоффа,  есть ┤
│    Оффис Зоффа находится в  самом   дверь,  за которой находится "SE- ┤
│ центре крепости. Если Вы подойде-   CURURITY  TUNNEL",  ведущий вниз. ┤
│ те к нему, то на вас нападут от 8   Выйдя из него,  опять идите вниз. ┤
│ до 15 солдат противника. С перво-   В  этой  части крепости и следует ┤
│ го раза и не думайте взять в плен   искать взрывчатку. Локация, в ко- ┤
│ Зоффа, Вас даже к нему не подпус-   торой лежит механизм,  называется ┤
│ тят.  Вам  придется   разработать   "SKY  FORTRESS  BRIDGE".   Открыв ┤
│ множество  планов,  чтобы уничто-   взрывчатку ключом с черепом,  ис- ┤
│ жить всю его охрану. А уничтожать   пользуйте ее. Тот солдат, которым ┤
│ ее  очень трудно,  к оффису Зоффа   Вы задействовали взрывчатку,  ус- ┤
│ ведут туннели со всех концов кре-   тановил ее на себе.  Он взорвется ┤
│ пости.  И  солдаты Зоффа,  узнав,   через  4 минуты,  разнеся в щепки ┤
│ что их повелитель подвергся напа-   всю крепость  с  остатками  армии ┤
│ дению,  не замедлят явиться. Если   Зоффа.  Так что поторопитесь всех ┤
│ Вы высадитесь на  втором  катере,   Ваших воинов телепортировать  об- ┤
│ то путь к Зоффу будет короче, чем   ратно на корабль.                 ┤
│ из других мест высадки.  Если Вам      Тем не менее, программа выдала ┤
│ повезло,  и Вы уничтожили стражу,   мне сообщение,  что я не выполнил ┤
│ то ставьте Манто с телепортатором   миссию,  так  как  не взял в плен ┤
│ напротив двери,  ведущей к Зоффу.   Зоффа,  хотя я это сделал,  но до ┤
│ Дайте  приказ   Севрине   открыть   того,  как спас Криксикса.  Может ┤
│ дверь оффиса, и войти в него.  Не   быть  кому-то  удастся  полностью ┤
│ бойтесь, Зофф не будет сражаться,   завершить задание?..              ┤
│ он будет убегать, и Вы не сможете                                     ┤
│ остановить его или атаковать.                   ПРЕДМЕТЫ.             ┤
│    Как только Севрина вошла в оф-                                     ┤
│ фис,  сразу  же переключайтесь на      Исследуя крепость, можно найти ┤
│ Манто,  и используйте  телепорта-   множество предметов,  и ключей  к ┤
│ тор.  Во  втором  окне будут лица   различным дверям.  Назначение не- ┤
│ Манто и тех,  кто стоит с  ним  в   которых предметов узнать не  уда- ┤
│ одной локации  и кого можно пере-   лось.  Крепость  переполнена раз- ┤
│ править на корабль. Никого из Ва-   личными видами вооружения,  кото- ┤
│ ших  воинов не телепортируйте,  а   рое можно встретить чуть ли не на ┤
│ просто ждите. Через несколько се-   каждом шагу.                      ┤
│ кунд  Вы  увидите  рядом с лицами      В лабиринте можно найти  "TIME ┤
│ Ваших солдат лицо Зоффа (в фураж-   DELAY UNIT". Используя эту штуку, ┤
│ ке).  Вот  на  него то и наводите   Вы на минуту остановите время.  Я ┤
│ прицел,  и телепортируйте его  на   ее нигде не применял,  и не знаю, ┤
│ свой корабль.  Генерал Зофф у Вас   останавливает ли она врагов. Если ┤
│ в плену.                            все-таки останавливает,  то может ┤
│    Но здесь у меня разногласия  с   попробовать  остановить  время  в ┤
│ программой.  Дело в том, что сна-   оффисе у Зоффа?  Тогда Вы успеете ┤
│ чала надо спасти посла Криксикса,   спасти сначала Криксикса, а потом ┤
│ а  потом  взять в плен Зоффа.  Но   пленить Зоффа. Замедлитель време- ┤
│ если сначала спасти Криксикса, то   ни находится неподалеку от взрыв- ┤
│ Зоффа  уже не догнать.  Программа   чатки.                            ┤
│ выдаст сообщение "ZOFF  ESCAPED".                                     ┤
│ Вот почему я выполнил миссии нао-             ЖЕЛАЮ УДАЧИ!            ┤
│ борот.                                                                ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 76 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│      DEFENDERS OF THE CROWN     ┤ │  │        ARMY AT CUMBRIA      │  ┤
│     ────────────────────────    ┤ │  │      (Армия - в Кембрии)    │  ┤
│         Защитники короны        ┤ │  │         MEN:        0       │  ┤
└─────────────────────────────────┘ │  │        (Воины       0)      │  ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘  │         KNIGHTS:    0       │  ┤
│    Описание этой игры прислал нам    │        (Всадники    0)      │  ┤
│ Юрий  Белевцев  из Краснодарского    │         CATAPULTS:  0       │  ┤
│ края.  Он сообщил о том,  что оно    │        (Катапульты  0)      │  ┤
│ заимствовано из журнала "Спектро-    └─────────────────────────────┘  ┤
│ мания". Письмо по этой игре прис-      Нажмите "огонь"  и  на  экране ┤
│ лал нам также Александр Барышенко   появится первое меню:             ┤
│ из г.Воркуты.  Мы обобщили  прис-    ┌─────────────────────────────┐  ┤
│ ланный  материал  и  в таком виде    │         YOUR ORDER?         │  ┤
│ предлагаем его читателям.            │          Ваш выбор          │  ┤
│                                      ├─────────────────────────────┤  ┤
│    Действие происходит  в Англии,    │       HOLD TOURNAMENT       │  ┤
│ разобщенной на разные графства  и    │      Вызвать на турнир      │  ┤
│ снедаемой  междоусобными войнами.    │        SEEK CONQUEST        │  ┤
│ Вы - Уилфред  Айвенго,  обладаете    │        Идти в поход         │  ┤
│ поместьем Кембрия, приносящим до-    │          GO RADING          │  ┤
│ ход 3 унции золота в месяц.  Ваша    │      Совершить вылазку      │  ┤
│ цель  захватить  все земли и объ-    │        BUY HOME ARMY        │  ┤
│ единить их  под  единой  властью.    │          Покупка            │  ┤
│ Этого  можно  достичь  различными    │          READ MAP           │  ┤
│ путями,  где мечом,  где миром, а    │       Смотреть карту        │  ┤
│ где  и рыцарской доблестью.  Один    │            PASS             │  ┤
│ из секретов популярности этой иг-    │       Пропустить ход        │  ┤
│ ры   заключается  в  великолепной    │           OPTIONS           │  ┤
│ графике и разнообразии  действия.    │            Опции            │  ┤
│ Вы можете ходить в походы, участ-    └─────────────────────────────┘  ┤
│ вовать  в   рыцарских   турнирах,      Рассмотрим более  подробно это ┤
│ осаждать    вражеские   крепости.   меню.                             ┤
│ Итак,  Вы загрузили игру и  перед      HOLD TOURNAMENT  -  эта  опция ┤
│ Вами появились две надписи:         позволяет Вам вызвать  любого  из ┤
│                                     достойнейших  рыцарей на турнир и ┤
│         1. START GAME               сразиться с ним.  Вы можете  сра- ┤
│         2. REDEFINE KEYS            жаться как за честь (FAME), так и ┤
│                                     за землю (LAND), если, конечно, у ┤
│    Выберите нужные Вам клавиши  и   Вас есть лишняя земля.  В послед- ┤
│ смело нажимайте на единицу. Перед   нем случае, после Вашей победы Вы ┤
│ Вами на экране  изображена  часть   без лишнего кровопролития получи- ┤
│ карты Англии, информация о состо-   те графство со всеми людьми,  ко- ┤
│ янии дел в Вашем владении,  порт-   торые там находились.             ┤
│ рет  Вашей особы и в левом нижнем      SEEK CONQUEST -  эта  одна  из ┤
│ углу календарь.  На  начало  игры   основных команд, к ней мы вернем- ┤
│ высвечивается октябрь 1149 г.  Вы   ся позже.                         ┤
│ можете узнать о  состоянии  Ваших      GO RADING  - эта опция предос- ┤
│ дел из следующей таблицы:           тавляет   возможность   поправить ┤
│  ┌─────────────────────────────┐    состояние Вашего капитала, правда ┤
│  │       WILFRED IVANHOE       │    не совсем честным путем,  но зато ┤
│  │       Уилфред Айвенго       │    очень эффективно. Если Вы победи- ┤
│  ├─────────────────────────────┤    те,  то вы получите  100  золотых ┤
│  │       LEADWERSHIP: GOOD     │    монет,  но  если  Вы проиграете - ┤
│  │ (Командирские данные:хорошо)│    убьют несколько Ваших людей.      ┤
│  │        JOUSTING: GOOD       │       BUY HOME  ARMY  - дает возмож- ┤
│  │(Турнирная подготовка:хорошо)│    ность приобрести армию,  а  также ┤
│  │      SWORD PLAY: AVERAGE    │    построить  замки.  Вам  предложат ┤
│  │   (Владение мечом: среднее) │    следующее меню:                   ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 77 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│  ┌─────────────────────────────┐    (ACCEPT) или вступив с ними в бой ┤
│  │YOU HAVE       10 GOLD PIECES│    (ATTACK).                         ┤
│  │ COST                        │       TRANSFER FORCES  -   перевести ┤
│  ├─────────────────────────────┤    армию в боевую готовность - выки- ┤
│  │  1      Soldiers       10   │    дывает  подменю,  суть   которого ┤
│  │  8      Knights         0   │    состоит в том, сколько всадников, ┤
│  │ 15      Catapults       0   │    воинов и катапульт Вы возьмете  с ┤
│  │ 20      Castles             │    собой в поход, а сколько оставите ┤
│  ├─────────────────────────────┤    для защиты дома:                  ┤
│  │   CONTINUE                  │     ┌─────────────────────────────┐  ┤
│  └─────────────────────────────┘     │  HOME              COMPAIGN │  ┤
│    Здесь Вам показана цена одного    ├─────────────────────────────┤  ┤
│ солдата,  рыцаря, катапульты, или    │   10    Soldiers       0    │  ┤
│ сколько  стоит  построить  замок.    │    0    Knights        0    │  ┤
│ Также показано,  сколько денег Вы    │    0    Catapults      0    │  ┤
│ имеете в наличии. Кстати, строить    └─────────────────────────────┘  ┤
│ замки  неэффективно,  потому  что      Людей и катапульты можно пере- ┤
│ они,  по идее,  должны затруднять   водить из одной  графы  в  другую ┤
│ захват  Ваших земель,  а на самом   клавишами "вправо", "влево".      ┤
│ деле они его упрощают,  т.к.  под      READ MAP  - посмотреть карту - ┤
│ обломками стен гибнет очень много   аналогична команде  из  основного ┤
│ народу.  Если у Вас в замке нахо-   меню.                             ┤
│ дилось порядка тысячи человек, то      SEE ROBIN - включив эту  опцию ┤
│ потери могут достигать ста  чело-   Вы можете послушать хорошую музы- ┤
│ век.  Кроме того, если графство с   ку и посмотреть, как же там пожи- ┤
│ замком  все-таки  захватили,  Вам   вает  старый  добрый Робин Гуд и, ┤
│ будет труднее его отбить.           что важнее, где он находится.     ┤
│    READ MAP - позволяет  просмот-      CONTINUE -  выйти в предыдущее ┤
│ реть карту, узнать, кто Ваши про-   меню.                             ┤
│ тивники.  В этом режиме Вы можете      Здесь мы  рассмотрели основные ┤
│ посмотреть,  кому принадлежит ин-   меню игры, но есть еще очень важ- ┤
│ тересующая Вас земля, какой доход   ный момент управления игрой - это ┤
│ она может дать, и т.д.              ведение боя.                      ┤
│    PASS - выбрав данный режим, Вы      На экране изображены пешие во- ┤
│ пропускаете ход,  т.е.  Вы можете   ины и всадники,  Ваши и противни- ┤
│ получить налоги с  Ваших  земель,   ка.  Внизу соотношение сил и, на- ┤
│ но не можете передвигать свою ар-   конец,  справа - команды, которые ┤
│ мию.                                Вы можете отдать своим воинам:    ┤
│    OPTIONS - выкидывает еще  одно                                     ┤
│ подменю,  где Вы можете отключить      FERCIOUS - устроить резню.     ┤
│ звук,  начать новую игру или  за-      STAND & FIGHT - стоять и  сра- ┤
│ кончить старую.                     жаться.                           ┤
│                                        BOMBARD - бомбардировать.      ┤
│    Ну вот  теперь  мы  можем вер-      OUT FLANK - обойти с фланга.   ┤
│ нуться к подменю  SEEK  CONQUEST.      RETREAT - отступить.           ┤
│ Оно выкидывает описание:                                              ┤
│    SEND FORTH CAMPAIGN ARMY - эта      Поэкспериментируйте с команда- ┤
│ команда позволяет повести армию в   ми и Вы поймете,  что значит пра- ┤
│ поход -  перемещать  ее  по  всей   вильно и вовремя отдать приказ.   ┤
│ стране (на карте армия изображена                                     ┤
│ всадником). Вам предложат выбрать      Несколько полезных советов.    ┤
│ территорию,  на которую Вы хотите      С начала игры попытайтесь зах- ┤
│ переместить свою армию.  Помните,   ватить как можно  больше  "ничей- ┤
│ что  ход Вы можете сделать только   ной"  земли.  Если  Вы достаточно ┤
│ на соседнее поле. Во время похода   расторопны, Вам удастся захватить ┤
│ Вы  можете  проходить через земли   четыре  графства.  Затем вызовите ┤
│ соседей  заранее  предупредив  их   графов на турнир.                 ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 78 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Сражаясь на турнире, Вы должны   торые вносят приятное  разнообра- ┤
│ попасть копьем чуть левее  центра   зие в игру. Во время игры Вас мо- ┤
│ щита.  Не пугайтесь, если Вас все   гут вызвать на  турнир.  Вы,  как ┤
│ время побеждают. Для начала выби-   настоящий рыцарь,  не сможете от- ┤
│ райте  бои за честь (FAME).  Ста-   казаться и примете  вызов.        ┤
│ райтесь не выигрывать на  турнире      Как и  в  другом  произведении ┤
│ земли своих соседей (они располо-   про рыцарей здесь не обошлось без ┤
│ жены к Вам дружелюбно),  а завое-   прекрасной дамы. В игре вам пред- ┤
│ вывать  "с  мечом в руках" других   ложат  сразиться  за  неотразимую ┤
│ графов.  И не нападайте на все их   Леди Ребекку,  которую похитил  и ┤
│ владения,  а  лучше  соберите все   запер в своем замке подлый Эдмунд ┤
│ свои силы в один кулак и атакуйте   из Кронваля по  прозвищу  "Свире- ┤
│ главный замок.  Вы сразу его най-   пый".                             ┤
│ дете,  т.к.  их на  карте  только      Чтобы спасти Ребекку, Вам нуж- ┤
│ пять. В этом есть несколько преи-   но в поединке на  мечах  заколоть ┤
│ муществ.  Вместо нескольких  боев   этого противного старикашку,  при ┤
│ Вы проведете только один,  но са-   этом Вы  станете  обладателем  не ┤
│ мое главное, что с захватом глав-   только  прекрасной  молодой жены, ┤
│ ного  замка  к  Вам переходят все   но и всех земель, которые принад- ┤
│ земли  и люди, на этих землях на-   лежали Эдмунду.  Нужно также ска- ┤
│ ходящиеся,   принадлежащие  ранее   зать об одной неприятности, кото- ┤
│ этому графу.                        рая  происходит в Вашем графстве. ┤
│    Теперь о  штурме  замков.  Для   Изредка из Вашей казны  пропадают ┤
│ этого Вы должны иметь катапульту.   деньги,  их  похищает  некий Лорд ┤
│ Для того,  чтобы проникнуть в за-   Норман.  Кто он такой  доподлинно ┤
│ мок,  Вам  надо  разрушить стену.   неизвестно,  но по слухам,  расп- ┤
│ Для этого,  стреляя  по  крепости   ространяемым среди местного насе- ┤
│ камнями (BOULDERS), Вы должны от-   ления, им является сам Робин Гуд. ┤
│ тягивать катапульту не до  конца.   Этот факт существенных  изменений ┤
│ В  случае  успешного попадания на   в игру не вносит, хотя он доволь- ┤
│ стене образуется выбоина.           но неприятный.                    ┤
│                                                                       ┤
│    Ну а теперь настало время  по-      Удачи Вам, Уилфред Айвенго!    ┤
│ говорить о некоторых деталях, ко-                                     ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│   MONTI-PLAYER SOCCER MANAGER   ┤ │               ИГРА.               ┤
│  ─────────────────────────────  ┤ │                                   ┤
│       (С) D&H GAMES 1990        ┤ │    Прежде всего,   позвольте  Вас ┤
└─────────────────────────────────┘ │ поздравить с назначением на  пост ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ главного  менеджера.   Познакомь- ┤
│ Эксперт: Нероев А.В., 1994 г.       тесь теперь с Вашими посредниками ┤
│                                     между  Вами  и  командой.  Это 11 ┤
│            НАЧАЛО ИГРЫ              пиктограмм и по  меньшей  мере  в ┤
│                                     два раза больше меню. Не зная их, ┤
│    При завершении   загрузки   Вы   невозможно  управлять   командой, ┤
│ сможете выбрать управление, ввес-   поэтому  разрешите  Вам  предста- ┤
│ ти количество игроков (1-4), и их   вить.                             ┤
│ имена. После этого каждому игроку                                     ┤
│ будет  поручена  одна  из  команд      1. Центральная  пиктограмма  с ┤
│ четвертого дивизиона,  и объявлен   изображением футболки (с нанесен- ┤
│ спонсор. На счету у каждого клуба   ным на нее  номером)  понадобится ┤
│ будет 35000 фунт.стерл. Это - Ваш   только,  если играющих несколько. ┤
│ стартовый капитал,  с которым  Вы   Выбор этой пиктограммы отдает уп- ┤
│ начинаете подъем в первый дивизи-   равление  другому  менеджеру - по ┤
│ он.  Учтите, что настройка произ-   очереди.                          ┤
│ водится  только один раз в начале      Мы продолжим знакомство по ча- ┤
│ игры.                               совой стрелке, начиная сверху:    ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 79 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    2. Таблицы  лиг.  Здесь  можно      3. Продажа игроков.            ┤
│ получить практически всю информа-                                     ┤
│ цию по любой из команд. Для этого      Как правило, в продаже имеется ┤
│ надо выбрать дивизион в следующем   несколько игроков.  Если, все же, ┤
│ меню.  "EXIT"  означает  выход  в   их нет,  выдается соответствующее ┤
│ предыдущее меню.                    сообщение, и Вы выходите в основ- ┤
│                                     ное меню; иначе на экране Вы смо- ┤
│    Если Вы  выбрали один из диви-   жете  прочесть  название команды, ┤
│ зионов, на экране появится табли-   продающей игрока,  его специфика- ┤
│ ца,  показывающая  статистику ко-   цию, имя и уровень игры.          ┤
│ манд.  Все  учитываемые   факторы                                     ┤
│ внесены в верхнюю строчку.  Пере-      3.1. Подать предложение. Выбе- ┤
│ числяю их по порядку:               рите  игрока,  которого Вы хотели ┤
│                                     бы  приобрести.  После этого нач- ┤
│    W - выиграно встреч;             нется прием  заявок  от  менедже- ┤
│    D - сыграно вничью;              ров.  Каждый должен, руководству- ┤
│    L - проиграно;                   ясь  своим  банковским  счетом  и ┤
│    F - забито мячей;                оценкой наблюдателя (если таковой ┤
│    A - пропущено мячей;             имеется),  решить, за какую сумму ┤
│    PS - очки;                       он  попробует  приобрести игрока. ┤
│                                     Если менеджер  не желает участво- ┤
│    За победу  начисляется три оч-   вать  в торгах,  он должен ввести ┤
│ ка, за ничью - одно.                на вопрос о сумме все,  что угод- ┤
│                                     но,  кроме цифр.  После того, кaк ┤
│    Под таблицей находится следую-   все предложения  поступят,  будет ┤
│ щее меню:                           выведена  таблица,  где в порядке ┤
│                                     убывания   представлены    суммы, ┤
│    2.1. Информация   о   команде.   предложенные клубами, а также ре- ┤
│ Выбрав эту опцию,  выберите инте-   шение  менеджера,  продающего иг- ┤
│ ресующую  Вас  команду.  На экран   рока.                             ┤
│ будет выведена следующая информа-                                     ┤
│ ция.                                   3.2. Выход в предыдущее меню.  ┤
│                                                                       ┤
│    Название клуба,   дивизион   и      4. Загрузка/выгрузка. По жела- ┤
│ место в таблице,  список игроков,   нию,  Вы можете прервать  игру  в ┤
│ их спецификация (G - вратарь, D -   любой   момент,  сохранив  ее  на ┤
│ защитник,  M - полузащитник,  A -   внешнем носителе, а затем продол- ┤
│ нападающий), их расстановка, уро-   жить   ее,  загрузив  отгрузочный ┤
│ вень игры (SKL), вместимость ста-   блок в этом меню.                 ┤
│ диона (CAP),  приблизительное ко-                                     ┤
│ личество  болельщиков  (AVG),   а      5. Кубковые встречи.           ┤
│ также оценка сил команды:                                             ┤
│                                        5.1. Матчи на кубок F.A.       ┤
│    GOALIE - уровень игры голкипе-                                     ┤
│ ра;                                    5.2. Матчи на кубок лиги.      ┤
│    DEFENCE - суммарная сила защи-                                     ┤
│ ты;                                    5.3. Ваш следующий матч на ку- ┤
│    MIDFIELD - то же,  для полуза-   бок лиги.                         ┤
│ щиты;                                                                 ┤
│    ATTACK -  то же,  для нападаю-      5.4. То же, но на кубок F.A.   ┤
│ щих.                                                                  ┤
│                                        5.5. Выход в предыдущее меню.  ┤
│    Нажатие "огонь" приводит к вы-                                     ┤
│ ходу в предыдущее меню.                Первые два  пункта информируют ┤
│                                     о жеребьевке,  проведенной  между ┤
│    2.2. Изменить имя команды.       командами,  и  сообщают  пары ко- ┤
│                                     манд,  играющие  друг  с  другом. ┤
│    2.3. Выход в предыдущее меню.    Следующие  два пункта информируют ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 80 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ Вас о предстоящих кубковых встре-      9.1. Увеличить     вместимость ┤
│ чах.  Здесц же приводится некото-   стадиона  на  500   мест.   Цена: ┤
│ рая статистика, и соотношение сил   125000 фунт.стерл.                ┤
│ играющих команд.                                                      ┤
│                                        9.2. Улучшить сервис на стади- ┤
│    6. Таблица результатов.          оне на 5%. Цена: 10000 фунт.стерл.┤
│                                                                       ┤
│    Выбрав дивизион,  о котором Вы      9.3. Выход в предыдущее меню.  ┤
│ хотите  получить  информацию,  Вы                                     ┤
│ увидите результаты встреч за про-      10. Детали.  Это меню, которое ┤
│ шедшую неделю.                      Вы чаще всего будете посещать.    ┤
│                                                                       ┤
│    7. Предстоящие встречи.             10.1. Просмотр команды.  Здесь ┤
│                                     выводится  расположение  игроков, ┤
│    Выбрав дивизион,  Вы  получите   их   спецификация,  уровень  игры ┤
│ список  предстоящих игр этого ди-   (SKL),  количество сыгранных мат- ┤
│ визиона.                            чей (P),  забитых голов,  или го- ┤
│                                     лов, пропущенных вратарем (GL), а ┤
│    8. Банк.  На  протяжении  всей   также количество полученных травм ┤
│ игры  Ваш  счет в банке будет ме-   (INJ).                            ┤
│ няться за счет поступлений и вып-                                     ┤
│ лат.  Все факторы сведены в левой      10.1.1. Перемещение игроков.   ┤
│ колонке.                                                              ┤
│                                        10.1.2. Выход в предыдущее ме- ┤
│    8.1. Доходы  с продажи билетов   ню.                               ┤
│ (цена одного билет 4 фунт.стерл.).                                    ┤
│                                        10.2. Продажа игроков. Продажа ┤
│    8.2. Зарплата игрокам и персо-   возможна,  если число нетравмиро- ┤
│ налу.                               ванных игроков больше тринадцати. ┤
│                                     Если это условие соблюдается, пе- ┤
│    8.3. Купля-продажа игроков.      ред Вами появляется список  игро- ┤
│                                     ков с их приблизительной оценкой, ┤
│    8.4. Расходы   на   расширение   а ниже - меню:                    ┤
│ стадиона.                                                             ┤
│                                        10.2.1. Продажа.  Выберите иг- ┤
│    8.5. Расходы на улучшение сер-   рока,  которого  желаете продать. ┤
│ виса.                               Если Вы играете не один, у других ┤
│                                     менеджеров  запросят предлагаемые ┤
│    8.6. Штрафы за  беспорядки  на   ими  суммы.  После  этого,   если ┤
│ стадионе.                           предложения  поступили,  выберите ┤
│                                     сумму,  которая Вас больше  всего ┤
│    8.7. Поступления за счет сдачи   устраивает.   "DECLINE  OFFER"  - ┤
│ стадиона в аренду.                  отклонить все предложения.        ┤
│                                                                       ┤
│    8.8. Разное.  (Взнос спонсоров      10.2.2. Выход в предыдущее ме- ┤
│ и/или  плата  ТВ  за   трансляцию   ню.  Опцию "SELL" можно использо- ┤
│ встречи).                           вать только один раз в неделю!    ┤
│                                                                       ┤
│    В конце  недели подводится ба-      10.3. Тренировки.  Для  каждой ┤
│ ланс, получаемый вычитанием суммы   спецификации игроков есть  четыре ┤
│ выплат из суммы поступлений.  Со-   режима тренировок.  Четвертый ре- ┤
│ ответственно изменяется Ваш  счет   жим (NONE) обозначает  отсутствие ┤
│ в банке.                            тренировки. Эта опция понадобится ┤
│                                     Вам, если игрок получит травму. В ┤
│    9. Стадион.  Здесь  Вы  можете   этом  случае необходимо перевести ┤
│ узнать характеристики Вашего ста-   его в запасной состав,  и освобо- ┤
│ диона.                              дить от тренировок.               ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 81 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                        10.7. Редактор имен игроков.   ┤
│    Режимы тренировок:                                                 ┤
│                                        10.7.1. Изменить имя.          ┤
│    Для вратарей (G):                                                  ┤
│                                        10.7.2. Выход в пред. меню.    ┤
│    MOVEMENT - перемещение;                                            ┤
│    KICKING - тренировка ног;           10.8. Выход в пред. меню.      ┤
│    HANDLING - тренировка рук.                                         ┤
│                                        11. Следующий   матч.  Сначала ┤
│    Для полузащитников (M):          подтвердите выбор этой опции. Ес- ┤
│                                     ли   основной   состав  полностью ┤
│    PASSING - отработка пасов;       укомплектован, на экране появятся ┤
│    HEADING - игра головой;          результаты  игр в первом дивизио- ┤
│    TACKLING - перехват мяча.        не,  а также количество  билетов, ┤
│                                     проданных на этот матч. После на- ┤
│    Для защитников (D):              жатия "огонь" результаты  игр  во ┤
│                                     втором дивизионе и т.д.           ┤
│    TACKLING - перехват мяча;                                          ┤
│    PASSING - отработка пасов;          После этого  Вы выходите в ин- ┤
│    CONTROL - контролирование мяча.  формационную часть, где можно уз- ┤
│                                     нать,  кто из Ваших игроков отли- ┤
│    Для нападающих (A):              чился,  забив мяч, получив травму ┤
│                                     или  покинув  клуб.  Кроме этого, ┤
│    SHOOTING - удары;                здесь могут быть и другие сообще- ┤
│    DRIBBLE - ведение мяча;          ния.                              ┤
│    HEADING - игра головой.                                            ┤
│                                        12. Следующий   экран  -  меню ┤
│    10.3.1. Установить режим.  вы-   найма персонала. Вы можете нанять ┤
│ берите игрока, режим которого хо-   или уволить наблюдателя-эксперта, ┤
│ тите   изменить,  затем  управляя   который дает Вам оценку интересу- ┤
│ курсором влево/вправо  установите   ющих Вас игроков, физиотерапевта, ┤
│ нужный режим.                       без которого не обойтись в случае ┤
│                                     травмирования игрока,  и тренера, ┤
│    10.3.2. Выход в пред. меню.      без которого Ваша команда вряд ли ┤
│                                     займет первые места.              ┤
│    10.4. Ваш титульный лист. Выб-                                     ┤
│ рав эту опцию, Вы сможете узнать,      Вы можете  нанять  начинающего ┤
│ сколько  раз  Вы  были  чемпионом   работника, можете опытного, а мо- ┤
│ каждого  дивизиона,  сколько  раз   жете пригласить и самого лучшего. ┤
│ стали посмешищем лиги (16-е место   Можно и вовсе оставить это  место ┤
│ в 4 дивизионе),  сколько раз были   не занятым.                       ┤
│ финалистом обоих кубков, и сколь-                                     ┤
│ ко раз стали  их  обладателем.  А      12.1. Наем наблюдателя.        ┤
│ также, за сколько сезонов Вы это-                                     ┤
│ го достигли.                           12.2. Наем физиотерапевта.     ┤
│                                                                       ┤
│    10.5. Предстоящая встреча. Вы-      12.3. Наем тренера.            ┤
│ водится  некоторая  информация  о                                     ┤
│ Вашей команде,  и команде против-      12.4. Уволиться.  Учтите,  что ┤
│ ника, а также сравнительное соот-   уволившись,  Вы не сможете больше ┤
│ ношение сил.                        восстановиться.                   ┤
│                                                                       ┤
│    10.6. Ваши встречи.  На  экран      12.5. Продолжить игру.         ┤
│ выводится  таблица всех предстоя-                                     ┤
│ щих встреч Вашей команды, а также      После этого  Вы выходите в ос- ┤
│ результаты сыгранных.               новное меню.                      ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 82 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│         УРОВЕНЬ ИГРОКОВ.            приятный.  Если Вы обанкротитесь, ┤
│                                     то получите запрос  от  одной  из ┤
│    Как уже было сказано выше,  он   последних  команд 4-го дивизиона, ┤
│ изменяется в пределах от 1.1.  до   согласны ли Вы.  В случае  отказа ┤
│ 9.9. В течении сезона он поднима-   Вы  навсегда покинете  менеджерс- ┤
│ ется (при условии, что тренер ко-   кое кресло.                       ┤
│ манды знает свое дело, и физиоте-                                     ┤
│ рапевт тоже). В конце года проис-         РАССТАНОВКА ИГРОКОВ.        ┤
│ ходит резкое изменение уровня иг-                                     ┤
│ роков:  чей-то  уровень взлетает,      Это имеет  огромную  важность. ┤
│ чей-то падает.  Как показала ста-   Оставьте слабую полузащиту, и да- ┤
│ тистика,  падение мастерства про-   же тьма нападающих не спасет  Вас ┤
│ исходит чаще, чем подъем.           от поражения. Чтобы узнать, какая ┤
│                                     расстановка лучше, рекомендую Вам ┤
│    Еще одна  особенность - огром-   присмотреться к командам, которы- ┤
│ ная разница в цене между игроками   ми управляет компьютер,  и  попы- ┤
│ с уровнями (x).9 и (x+1).0.  Нап-   таться  выяснить,  почему одни из ┤
│ ример, цена игрока с уровнем 7.9.   них находятся на первых местах, а ┤
│ - примерно 450000 фунт.стерл.,  а   другие - на последних.            ┤
│ с уровнем 8.0.  -  где-то  700000      Поиграв приличное   время,  Вы ┤
│ фунт.стерл.  Это  позволяет очень   найдете наиболее эффективные ком- ┤
│ здорово  зарабатывать  деньги,  а   бинации.   Интересно,  найдет  ли ┤
│ они Вам будут очень нужны!          кто-нибудь  самою  результативное ┤
│                                     расположение игроков,  когда раз- ┤
│         КУБКОВЫЕ ТУРНИРЫ.           ница между забитыми и пропущенны- ┤
│                                     ми мячами будет максимальной?     ┤
│    С последовательностью турниров                                     ┤
│ Вы  сможете  ознакомиться в соот-              КОНЕЦ ГОДА.            ┤
│ ветствующем меню. Результаты этих                                     ┤
│ встреч   выдаются  в  назначенное      После того, как все игры будут ┤
│ время перед выводом основных  ре-   сыграны,  каждая команда, в зави- ┤
│ зультатов.  Команда,  проигравшая   симости от того, на сколько хоро- ┤
│ хоть одну игру в борьбе за кубок,   шо она играла, получит вознаграж- ┤
│ выбывает  из дальнейшей борьбы за   дение от 10000  до  200000  фунт. ┤
│ него.                               стерл.                            ┤
│    Прибыль с продажи билетов  де-      Затем объявляется чемпион лиг, ┤
│ лится  50/50 между хозяевами поля   т.е.  команда,  занявшая   первое ┤
│ и гостями.                          место  в первом дивизионе,  фина- ┤
│                                     листы кубков, и победители. Шесть ┤
│           СМЕНА КЛУБА.              команд,  занявших первые места, и ┤
│                                     второе место во 2, 3 и 4-ом диви- ┤
│    Сменить клуб Вы сможете лишь в   зионах  поднимаются  на  дивизион ┤
│ двух случаях. Первый случай, ког-   выше. Шесть команд, которые заня- ┤
│ да  какая-нибудь  команда  оценит   ли  два последних места в 1,  2 и ┤
│ Ваше  менеджерское  искусство,  и   3-ем дивизионах,  перемещаются на ┤
│ предложит Вам взять их команду. В   дивизион ниже.                    ┤
│ этом случае Вам выдадут соответс-                                     ┤
│ твующее  сообщение,  и   спросят,      После этого  начинается  новый ┤
│ принимаете   ли  Вы  предложение.   сезон.                            ┤
│ Второй  способ  -  гораздо  менее                                     ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│        ВНИМАНИЕ, ОПЕЧАТКА.          ошибка - дело в том,  что  автора ┤
│                                     статьи зовут  Сергей  Плюст.   Мы ┤
│    В пятом выпуске  "ZX-РЕВЮ"  мы   просим прощения у Сергея,  и ждем ┤
│ опубликовали экспертную проработ-   от него  новых  интересных  работ ┤
│ ку игры "ADVANCED SOCCER  SIMULA-   посвященных играм на "SPECCY".    ┤
│ TOR".  По  нашей  вине  произошла             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 83 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│          SORCERER LORD          ┤ │ ника пополнения не выделяют.      ┤
│        ─────────────────        ┤ │    Для того,  чтобы  выиграть   в ┤
│          (С) PSS, 1987          ┤ │ этой битве, Вам придется научить- ┤
└─────────────────────────────────┘ │ ся... ОТСТУПАТЬ! Только грамотное ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ отступление   поможет   выдержать ┤
│ Эксперт: Нероев А.В.,               первый  натиск войск Лорда Теней. ┤
│               г. Челябинск, 1995.   Конечно,  не одни отступления вы- ┤
│                                     игрывают  войну:  временно отсту- ┤
│    Игры фирмы   "PSS"  отличаются   пив,  и  пропустив  вперед  часть ┤
│ профессионализмом в исполнении  и   вражеских армий,  Вы можете прег- ┤
│ своей  неповторимостью.  Эту игру   радить путь остальным.  "Разделяй ┤
│ вполне  можно  назвать  шедевром,   и властвуй".  Кроме этого,  можно ┤
│ хотя новичок,  запустивший ее,  и   ставить  заслоны:  предугадав,  в ┤
│ не имея под рукой хорошего описа-   каком направлении будут двигаться ┤
│ ния,  скорее всего просто ее заб-   вражеские легионы,  Вы ставите на ┤
│ росит,  после нескольких  попыток   их  пути  все  близлежащие армии. ┤
│ понять,  как  она работает .  Так   Если Вы установите их на укрепле- ┤
│ было и со мной, но, время от вре-   нии,  или  на  магическом кольце, ┤
│ мени  меня  тянуло  загрузить  ее   противник вряд ли  атакует.  Если ┤
│ снова,  и наконец я с ней  разоб-   же  войска разместятся на обычном ┤
│ рался.                              месте - атакует наверняка.  Здесь ┤
│    Идеей для  игры   стал   роман   кроется  еще  один  секрет:  Ваши ┤
│ "Властелин колец".  Действия про-   войска состоят из  разных  народ- ┤
│ исходят в Средиземье,  когда SHA-   ностей:  эльфов  - обитателей ле- ┤
│ DOWLORD  (Лорд Теней),  используя   сов,  горцев,  жителей   пустынь, ┤
│ свои бесчисленные орды, вторгает-   холмов,  равнин. Все народы имеют ┤
│ ся  в свободные государства.  Для   свой герб, который Вы легко може- ┤
│ него цель - захват  HIGH  CITADEL   те увидеть на щитах, обозначающих ┤
│ (Высокой  Цитадели) на юго-восто-   армию.  Довольно легко понять ко- ┤
│ ке.  Ваша цель, как его противни-   го, и где использовать. Например, ┤
│ ка,  очевидна - эту цитадель отс-   если вы ставите заслон, состоящий ┤
│ тоять. Следует добавить, что вре-   из жителей пустынь,  равнин и ле- ┤
│ мя работает на Вас:  если в тече-   сов на горных  перевалах,  будьте ┤
│ нии пятидесяти ходов цитадель  не   уверены - они будут сразу же раз- ┤
│ падет,  игра выиграна. Другое ус-   биты.                             ┤
│ ловие победы - полное уничтожение      Кроме этого, есть еще два фак- ┤
│ всех  армий противника,  и захват   тора, влияющие на исход боя - по- ┤
│ всех его  крепостей  и  цитадели.   пулярность командира армии, и его ┤
│ Однако,  учитывая  тот факт,  что   уровня знания магии. Сильный кол- ┤
│ Ваши силы в начале игры составля-   дун  запросто   выдержит   натиск ┤
│ ют 22700 пеших и 16300 конных во-   втрое  превосходящего противника. ┤
│ инов,  а у  противника  на  самом   Знайте, что все эльфы - професси- ┤
│ простом  уровне  их  в  2-3  раза   оналы в магии,  горцы - их полная ┤
│ больше,  это практически невыпол-   противоположность.  Остальные на- ┤
│ нимо.  Кроме того, потери при на-   роды нейтральны:  часть их вождей ┤
│ падении значительно  больше,  чем   серьезно занимается магией, часть ┤
│ при обороне, и справиться обычны-   терпеть ее не может.              ┤
│ ми  методами  не   представляется                                     ┤
│ возможным.                             Теперь переходим  к управлению ┤
│    Однако, не все  так  плохо:  с   самой игрой:                      ┤
│ течением  времени Вы сможете рек-      После загрузки,  на экране по- ┤
│ рутировать солдат из  своих  фор-   является вопрос: "1 - начать игру ┤
│ тов,  пополняя свою армию.  После   сначала; 2 - загрузить отложенную ┤
│ захвата  Вашего  форта   войсками   игру."                            ┤
│ противника,  пополнение,  естест-      Нажав "1",   выберите  уровень ┤
│ венно,  не  выделяется.  Если  Вы   сложности  -  от  начинающего  до ┤
│ отобьете форт,  можете рекрутиро-   эксперта.   Выиграть   на  втором ┤
│ вать солдат снова.  Форты против-   уровне непросто, на третьем - ??? ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 84 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Выбрав уровень,   Вы   увидите   отдохнуть.  Усталость  возрастает ┤
│ лист,  на котором  будут  отобра-   при ускоренном перемещении,  и  в ┤
│ жаться  результаты  боевых  дейс-   боях.  Если вы не трогали армию в ┤
│ твий,  а именно:  потери с  обеих   течение  одного  хода,  усталость ┤
│ сторон, контроль над укреплениями   снижается на единицу.             ┤
│ и количество захваченных  волшеб-      Чтобы переместить    выбранную ┤
│ ных колец.  Через некоторое время   Вами   армию,  нажмите  "D".Чтобы ┤
│ программа сама переходит к следу-   продолжить перемещение, повторите ┤
│ ющей  фазе  -  перемещению  войск   нажатие.  Если Вы переместите от- ┤
│ Лорда Теней.                        ряд на Ваш форт,  из которого еще ┤
│    Перемещение: На  экране мелко-   не была проведена мобилизация, Вы ┤
│ масштабная карта. По ней, по оче-   активизируете этот процесс.  Если ┤
│ реди,  перемещаются  войска Лорда   отряд  столкнется  с противником, ┤
│ Теней, с изображением волчьей го-   изображения  меняется  на  символ ┤
│ ловы на щите.  Когда они атакуют,   схватки,  и  отряд выходит из под ┤
│ их изображение  меняется  на  два   Вашего контроля.                  ┤
│ скрещенных меча.                                                      ┤
│    Следующая фаза - боевые  дейс-      Другие активные клавиши:       ┤
│ твия. При наличии прямого контак-                                     ┤
│ та  (изображения   двух   мечей),      T (Terrain) - Выдает  информа- ┤
│ сверху  показывается  численность   цию о территории, на которой сто- ┤
│ войск с обеих сторон,  затем  ре-   ит курсор.                        ┤
│ зультаты боя (потери). Если в ка-      M (Map) - На экране появляется ┤
│ кой-либо армии погибли все воины,   крупномасштабная карта,  с  нане- ┤
│ ее лидер тоже погибает, и об этом   сенными на нее символами укрепле- ┤
│ выдается соответствующее  сообще-   ний, отрядов и т.п.               ┤
│ ние.                                   G (Garnison)  - если при нажа- ┤
│    Третья фаза - перемещение  Ва-   тии на эту клавишу  курсор  уста- ┤
│ ших войск.  Перед тем,  как пере-   новлен на укреплении,  то в верх- ┤
│ дать ход Вам, компьютер выполняет   ней строке выводится  численность ┤
│ еще некоторые операции: переводит   гарнизона.  Если  укрепление при- ┤
│ курсор на одни из Ваших  укрепле-   надлежит Вам,  то перед Вами поя- ┤
│ ний,  и пишет: "Произведена моби-   вится меню действий, в котором Вы ┤
│ лизация",  или "<N> воинов рекру-   можете выбрать:                   ┤
│ тировано".  Это  не одно и то же.      0 - выход;                     ┤
│ Ведь во-первых,  армию мобилизует      1 - рекрутировать воинов;      ┤
│ местный лорд,  и он становится во      2 - оставить воинов в гарнизо- ┤
│ главе этого отряда,  поэтому дан-   не;                               ┤
│ ное  событие  происходит один раз      Вторая и  третья команды имеют ┤
│ за всю игру.  Во-вторых, рекрути-   смысл только,  если в  укреплении ┤
│ руется,  как правило,  10-15%  от   находится отряд.                  ┤
│ того количества, которое было мо-      P -  выводит  в верхней строке ┤
│ билизовано. В-третьих, рекрутиро-   некоторую информацию по игре.     ┤
│ вание может производится  многок-      ENTER - "передача". Часто слу- ┤
│ ратно, и рекрутируется всегда од-   чается, что два или более отрядов ┤
│ но и то же количество воинов.       находятся на одном месте. Для пе- ┤
│    После этого  Вы можете перейти   редачи хода от одной армии к дру- ┤
│ к управлению.  Клавиши  перемеще-   гой используется эта клавиша.     ┤
│ ния:  R,  F,  C, X, S, E. Если Вы      O - конец перемещения.         ┤
│ установите курсор на свою  армию,      Четвертая фаза -  бой,  анало- ┤
│ сверху появится строка: имя лиде-   гична второй фазе. Затем все пов- ┤
│ ра,  численность войск,  популяр-   торяется сначала,  и так до побе- ┤
│ ность лидера (LDR),  уровень кол-   ды.                               ┤
│ довства (SOR),  усталость  (FGY).      Другие особенности программы:  ┤
│ Число  в  графе "усталость" может      1. Войска противника,  в отли- ┤
│ изменяться в пределах от 0 до  9.   чие от Ваших,  способны преодоле- ┤
│ В  последнем  случае Вы не можете   вать  водные препятствия. Это еще ┤
│ перемещать отряд,  надо дать  ему   больше усложняет сложность игры.  ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 85 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    2. Цитадели не выделяют попол-   отряде не может  превышать  12750 ┤
│ нения;  не выделяет его и один из   человек  для  каждого  рода войск ┤
│ фортов на северо-востоке.           (255*50).  При  превышении  этого ┤
│    3. Войска  Лорда  Теней  могут   числа оно сбрасывается до нуля.   ┤
│ выйти за пределы экрана,  и тогда      4. Также существуют проблемы с ┤
│ Вам их уже не достать.              использованием  опции  "Garnison" ┤
│    Теперь об ошибках: при написа-   (клавиша "G").  Например,  макси- ┤
│ нии  программы  был  допущен  ряд   мальное число,  которое Вы можете ┤
│ ошибок.  Вот  те из них,  которые   ввести при запросе -  9950,  хотя ┤
│ мне удалось выявить.                можно  вводить пятизначные числа. ┤
│    1. Если  армия была уничтожена   Другой пример,  когда численность ┤
│ полностью,  то статистика  потерь   войск большая, Вы не можете оста- ┤
│ остается неизменной, и увеличива-   вить маленький гарнизон.          ┤
│ ется,  только если потери частич-      И даже   с  таким  количеством ┤
│ ны.                                 ошибок игра остается очень  инте- ┤
│    2. Самая серьезная ошибка - Вы   ресной.                           ┤
│ можете   рекрутировать  вражеских                                     ┤
│ солдат из замков.                                Удачи!               ┤
│    3. Количество  солдат  в одном                                     ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│       SOLDIER OF FORTUNE        ┤ │ (сами знаете, что в это время бы- ┤
│     ──────────────────────      ┤ │ вает).                            ┤
│       (С) GOLDGRAF, 1988        ┤ │    Вы - бесстрашный человек, бро- ┤
└─────────────────────────────────┘ │ сивший  смертельный  вызов  неиз- ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ вестности и  решивший  освободить ┤
│ Эксперт: Рустам Сагитдинов,         страну от повелителей зла.        ┤
│                   г.Екатеринбург.      Немного истории.   Весь   этот ┤
│                                     конфликт  начался,   когда   семь ┤
│    Игра имеет  прекрасную графику   очень беспощадных,  злых и ковар- ┤
│ и звук,  например,  у дракона, во   ных колдунов решили завоевать эту ┤
│ время полета,  видно как трепещут   землю. Решено - сделано. Завоева- ┤
│ перепонки крыльев.  И,  по моему,   ли,  построили замок  и  окружили ┤
│ эта игра может занять место в ря-   его  скалами и пропастями.  Стали ┤
│ ду лучших  игровых  программ  для   вокруг сеять  зло  и  разрушение. ┤
│ SPECTRUM.                           Многие пытались добраться до зло- ┤
│                                     деев (многим это  почти  удалось, ┤
│            НАСТРОЙКА.               но...),  да не смогли. И вот нас- ┤
│                                     тал и Ваш черед.                  ┤
│    Сразу после загрузки, под рит-      Проход в замок (а замок - под- ┤
│ мичную музыку, Вам предложат выб-   земный)  открывается  раз  в нес- ┤
│ рать управление.  Выбор  осущест-   колько лет в полночь. На это вре- ┤
│ вляется клавишей ENTER. Если нем-   мя приходится пик активности раз- ┤
│ ного подождать,  то увидите пано-   ных монстров-созданий злых прави- ┤
│ раму нескольких уровней.            телей.  Со всеми из них Вы встре- ┤
│                                     титесь; это: гномы, драконы, вам- ┤
│               ИГРА.                 пиры, разные летающие штучки...   ┤
│                                        С ними Вы сражаетесь  оружием, ┤
│    Начнем. Вы  нажали ОГОНЬ и ...   которое находите. Варианты: дуби- ┤
│ очутились где-то очень далеко,  в   на,  дротик и кинжал.  У  каждого ┤
│ некоторой   стране,  во  времена,   оружия своя убойная сила (обозна- ┤
│ когда жили драконы, гномы, колду-   чается числом, напротив изображе- ┤
│ ны и разная нечисть. Скорее всего   ния предмета).  Чем чаще Вы поль- ┤
│ сейчас осень, так как деревья ве-   зуйтесь данным оружием, тем боль- ┤
│ ликаны стоят без листьев,  несом-   ше его убойная сила. Драконы, ры- ┤
│ ненно полночь  и,  что для данной   цари,  оборотни - уничтожаются  с ┤
│ ситуации естественно,  полнолуние   2-3 попаданий.  Белый шар удается ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 86 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                    С О В Е Т Ы     Э К С П Е Р Т А                    ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ только отбить. Остальные персона-   торым пользовались последний раз, ┤
│ жи уничтожаются сразу.              а изображение уровня темнеет. Те- ┤
│    Но ни  одним,  из  этих  видов   перь  надо  найти другой телепорт ┤
│ оружия не уничтожить правителей.    для перехода  на  следующий  уро- ┤
│    О правителях. Их семеро. Четы-   вень.  Когда будут уничтожены все ┤
│ ре из них отвечают за четыре сти-   правители,  появится   сообщение, ┤
│ хии: воздух, воду, землю и огонь.   содержание  которого  Вы  узнаете ┤
│ Чтобы   сразиться  с  первым,  Вы   сами.                             ┤
│ должны  собрать  символ  воды  из      Иногда   попадаются    останки ┤
│ шести   частей,  разбросанных  по   тех, кто приходил сюда до  Вас  и ┤
│ уровню.  После  этого  магическая   чьим  оружием  пользуетесь.  Если ┤
│ сила  дает Вам новое оружие - ог-   поравняться с ними, то появляются ┤
│ ненный шар, которым Вы уничтожите   сообщения типа:  "Спасибо,  иска- ┤
│ первого правителя.  Соответствен-   тель приключений",  или  "Элемент ┤
│ но,  чтобы  сразиться  со  вторым   не найден" и т.д.                 ┤
│ (отвечающим за воду) - надо найти      Будьте   осторожны,    повсюду ┤
│ части символа воды,  ну и собрать   встречаются ловушки  и разная не- ┤
│ его.                                чисть,  а у Вас всего 3 жизни  и, ┤
│    Как его найти. Для перемещения   хотя  их число со временем увели- ┤
│ по  замку служит пространственный   чивается, рисковать зря не стоит. ┤
│ телепортатор (уже  в  те  времена      Теперь смело  можете  идти  на ┤
│ пользовались  этой удобной штуко-   подвиги.                          ┤
│ виной).  Он выглядит как папорот-                                     ┤
│ ник с тремя очень большими листь-           ПОЛЕЗНЫЕ СОВЕТЫ.          ┤
│ ями.  Надо на него встать и  при-                                     ┤
│ сесть.  Но телепортируетесь Вы не      Дальнейшее не  следует  читать ┤
│ всегда. Например, ничего не полу-   тем, кто во всем хочет разобрать- ┤
│ чится, если захотите телепортиро-   ся сам.                           ┤
│ ваться на другой уровень,  но  не      1. Кроме  скелетов,  к Вам все ┤
│ покончили с делами на этом. Теле-   настроены   агрессивно,   поэтому ┤
│ порт не сработает до тех пор, по-   стреляйте во все подряд - хуже не ┤
│ ка не  соберете необходимый маги-   будет.                            ┤
│ ческий элемент  и  не  уничтожите      2. Есть замаскированные прохо- ┤
│ правителя.                          ды в стенах и деревьях,  они отк- ┤
│    После того,  как  Вы  соберете   роются, если в них выстрелить.    ┤
│ магический элемент и найдете нуж-      3. На  уровне  со   множеством ┤
│ ный телепортал, попадете в пещеру   столбов и рыцарей, для прохода на ┤
│ к правителю.  Он предстанет перед   верхние  этажи  надо  присесть  у ┤
│ Вами в виде черепа,  который, ле-   подножия   некоторых   столбов  и ┤
│ тая зигзагами, пытается Вас унич-   выстрелить в него - столб  осядет ┤
│ тожить тем  же  оружием,  которое   и образуется проход.              ┤
│ имеете Вы.                             4. Во время боя  с  правителем ┤
│    Чтобы уничтожить    правителя,   стойте на одном островке - не бе- ┤
│ нужно  несколько  раз  в  нег по-   гайте.                            ┤
│ пасть.  На первого  хватит  шести      5. После загрузки Бейсик-блока ┤
│ Ваших  попаданий,  на  второго  -   нажмите BREAK,  три раза  нажмите ┤
│ восьми и т.д. На последнем этапе,   CS/6 (листинг защищен от просмот- ┤
│ когда  Вы удачно сразитесь с пер-   ра), а затем EDIT и увидите:      ┤
│ выми четырьмя,  нужно будет  сра-                                     ┤
│ зиться  еще  с  тремя  колдунами.         10 REM POKE 44796,0.        ┤
│ Сразу  после  их  уничтожения  Вы                                     ┤
│ должны двигаться по островкам на-      Удалите REM,  введите строку и ┤
│ лево. Но к Вам могут вылететь еще   запустите программу - у Вас будет ┤
│ несколько врагов.                   вечная жизнь.                     ┤
│    После  уничтожения   правителя                                     ┤
│ стихии Вас возвращают назад к те-             *     *     *           ┤
│ лепортатору и отдают оружие,  ко-                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 87 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│               К О М П Ь Ю Т Е Р Н А Я     Н О В Е Л Л А               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│   Игра HERO QUEST, описание кото-   читателей,  с пожеланиями, прось- ┤
│ рой мы опубликовали в первом  вы-   бами и советами по этой  игре.  А ┤
│ пуске  книги  "ZX-ФОРУМ",  видимо   теперь мы дождались и новеллы. Ее ┤
│ прочно заняла  позицию  в  списке   прислал нам наш  постоянный  кор- ┤
│ любимых  игр  наших читателей.  В   респондент Александр Нероев.      ┤
│ редакцию приходит множество писем                                     ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │    - Два простолюдина, священник, ┤
│          Мечи и магия           ┤ │ эльф...                           ┤
│ ─────────────────────────────── ┤ │    - Постой, как зовут эльфа?     ┤
│  (C) Александр Нероев,          ┤ │    - Не  могу точно сказать,  ка- ┤
│             г.Челябинск, 1995.  ┤ │ жется Кадрил или Мартил.          ┤
└─────────────────────────────────┘ │    - Ладрил?                      ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    - Да, точно, господин. - хозя- ┤
│    На востоке разгорался рассвет.   ин внимательно смотрел на Грагни, ┤
│ Те,  кто  этим  утром  находились   пытаясь угадать, откуда тот знает ┤
│ возле  гостиницы   "Перекресток",   эльфа.                            ┤
│ могли  увидеть всадника,  который      - Кто-то назвал мое имя?       ┤
│ сейчас слезал с коня.  Его низкий      Грагни обернулся. На лестнице, ┤
│ рост  и крепкое сложение выдавали   ведущей  на  второй  этаж,  стоял ┤
│ в нем карлика.  Он слез  с  коня,   эльф.  Первое,  что  бросалось  в ┤
│ снял сумку с седла,  поправил ог-   глаза - это меч,  прикрепленный к ┤
│ ромный топор на поясе,  и подошел   поясу без ножен. Обычный меч вряд ┤
│ к  крыльцу.  На  нем были богатые   ли привлек  бы  к  себе  внимание ┤
│ доспехи,  настолько хорошо подог-   Грагни, но этот был необычен - по ┤
│ нанные к его телу, что, казалось,   его лезвию все время  проскальзы- ┤
│ он в них родился.  Такие  доспехи   вали  маленькие  молнии  и тут же ┤
│ должны  были  весить очень много,   исчезали.  Без сомнения, это кол- ┤
│ но складывалось впечатление,  что   довской клинок,  а эльф перед ним ┤
│ они легче пера.                     - Ладрил, его старый боевой това- ┤
│    Хозяин, который, видимо, толь-   рищ.                              ┤
│ ко  что  проснулся,  выбежал   на      Пока они  рассматривали   друг ┤
│ крыльцо, чтобы встретить богатого   друга, дверь распахнулась от мощ- ┤
│ гостя.                              ного удара,  и в проеме  появился ┤
│    - Накорми  коня,  и  приготовь   силуэт - широкоплечий высокий во- ┤
│ мне завтрак.                        ин,  с двуручным мечом за спиной. ┤
│    - Хорошо,  господин. Кому имею   Он  встал на пороге,  уставившись ┤
│ честь служить?                      на собравшуюся  компанию,  и  ра- ┤
│    - Барон Грагни.                  достно заорал:                    ┤
│    Хозяин поклонился,  отдал коня      - Тысяча гоблинов и  гунт  ма- ┤
│ подошедшему слуге,  и бросился  к   гии!  Пусть  меня разорвет,  если ┤
│ двери,  дабы  отворить  ее  перед   это не Ладрил и Грагни!           ┤
│ столь благородным постояльцем.         - Сигмар! - заорал один.       ┤
│    Изнутри  гостиница   выглядела      - Варвар!  - заорал второй,  и ┤
│ немного   лучше,   чем   снаружи.   оба бросились к нему.             ┤
│ По-видимому, дела хозяина шли хо-      Но вдруг комнату окутала  неп- ┤
│ рошо.  Хозяин  предложил   Грагни   роглядная тьма...                 ┤
│ сесть, а сам убежал на кухню. Ба-      - Ладрил! - это был голос вар- ┤
│ рон сел и огляделся. Комната была   вара,  Ты  же знаешь,  я ненавижу ┤
│ чистой и светлой.  Шесть столов и   магию, прекрати немедленно!       ┤
│ две дюжины стульев составляли всю      - Это  не я!  - в голосе эльфа ┤
│ мебель.  Вернулся хозяин, и сооб-   слышалась паника, - я не могу ни- ┤
│ щил,  что завтрак скоро будет го-   чего сделать!                     ┤
│ тов.                                   Все закончилось так же  неожи- ┤
│    - Кто сейчас живет в  гостини-   данно, как и началось. Они сидели ┤
│ це? - спросил барон.                за столом. Вчетвером...           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 88 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│               К О М П Ь Ю Т Е Р Н А Я     Н О В Е Л Л А               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│    Достаточно одного  взгляда  на   потому, что меня серьезно ранило, ┤
│ четвертого, чтобы понять, что это   когда я открывал сундук.  Эти ор- ┤
│ колдун. На его груди, поверх чер-   ки, хотя и глупы, но очень ковар- ┤
│ ного плаща,  висел талисман.  Лю-   ны  и  злобны.  Они замучали сэра ┤
│ бой, кто хоть немного разбирается   Рагнара почти до смерти, когда мы ┤
│ в магии,  мог узнать в нем знаме-   нашли  его.  Он еле-еле перебирал ┤
│ нитый Талисман Мелара.              ногами.                           ┤
│    - Зол... - начал эльф, но вне-      - И  неудивительно,  что тогда ┤
│ запно  остановился  - имя колдуна   еще принц Магнус решил  отомстить ┤
│ было великой тайной, открывающей-   за  него,  и  послал нас в логово ┤
│ ся только после его смерти.         Улага, - того, кто приказал похи- ┤
│    - Здравствуйте, друзья, - Зол-   тить сэра Рагнара.  Помнишь, Сиг- ┤
│ тан  произнес эти слова,  оглядел   мар,  ведь за то, что ты исполнил ┤
│ остальных и продолжил,  -  думаю,   обещание  мести,  принц  заплатил ┤
│ ни тебе, Сигмар, ни тебе, Грагни,   тебе сто монет. К тому же, ты на- ┤
│ не будет приятно узнать,  что  вы   шел копье.                        ┤
│ приехали  сюда  не просто так,  а      - Это ерунда,  по сравнению  с ┤
│ повинуясь магии.  Да,  это сделал   тем, сколько золота украли орки у ┤
│ я,  но не судите строго,  ведь мы   принца,  когда он перевозил его в ┤
│ не собирались вместе уже двадцать   свой  дворец  -  три  сундука  по ┤
│ лет.  Довольно  большой  срок для   двести  пятьдесят  монет  в  каж- ┤
│ хороших друзей.  Именно поэтому я   дом...   За  каждый  возвращенный ┤
│ счел  себя  вправе  собрать всех,   сундук он обещал выплатить двести ┤
│ чтобы вспомнить прошлое. А пока -   монет,  и эта сумма - достаточный ┤
│ угощайтесь. Он взмахнул волшебной   стимул для того,  чтобы ввязаться ┤
│ палочкой, и стол накрылся разными   в эту авантюру.                   ┤
│ блюдами.                               Золтан снял талисман и положил ┤
│    Варвар встал.                    его на ладонь:                    ┤
│    - Если  ты  еще  раз применишь      - Узнаете?                     ┤
│ свою магию, можешь попрощаться со      - А как же, - бросил Сигмар, - ┤
│ мной.                               из-за этого куска битого стекла я ┤
│    - Остынь, Сигмар, - Ладрил си-   рисковал своей жизнью.            ┤
│ лой посадил его на стул, - это не      - Ты не понимаешь.  Его создал ┤
│ магия,  просто  стол  был  накрыт   много  лет  назад Мелар - один из ┤
│ давно,  а мы ничего не видели по-   самых сильных и великих  колдунов ┤
│ тому,  что он  внушил  всем,  что   в истории мира. Он повышает маги- ┤
│ стол пуст.                          ческие возможности владельца, по- ┤
│    Грагни принялся за еду, а Зол-   этому его нельзя было оставлять в ┤
│ тан продолжил:                      лапах этих чудовищ. Я чуть не по- ┤
│    - Сигмар,  ты не изменил  свое   терял его, когда Грэг, сын Улага, ┤
│ отношение к магии с тех пор,  как   схватил нас и разоружил. Этот не- ┤
│ мы  встретились.  Помните?  Тогда   доумок оставил нас с двумя гобли- ┤
│ еще   молодыми  мы  поступили  на   нами, которых мы быстро отправили ┤
│ службу к Императору,  и для  про-   вслед за Улагом и его бандой.     ┤
│ верки  нас  забросили в замок ор-      - Он был настолько  глуп,  что ┤
│ ков.  Тогда у нас не было ничего,   бросил  все  наше  снаряжение  на ┤
│ если  не считать магии,  да еще у   склад,  откуда мы его быстро заб- ┤
│ Грагни была сумка с  инструмента-   рали,  и проверили на нем.  Гово- ┤
│ ми.                                 рят,  его дух до сих  пор  бродит ┤
│    - Она не пригодилась мне в тот   там.  А помните, как исчез Карлен ┤
│ раз.  А помните,  как был похищен   - личный колдун Императора? Стало ┤
│ сэр Рагнар?                         известно, где он находится, и Им- ┤
│    Ладрил нахмурился,  -  он  был   ператор послал  нас  спасти  его, ┤
│ самым уважаемым эльфом при дворе.   обещав каждому,  кто вернется сто ┤
│ Тогда Император объявил, что тот,   монет. Мы нашли его живым, но без ┤
│ кто спасет  его,  получит  двести   души...                           ┤
│ монет.  Я  помню это хорошо еще и      - Зато мы  нашли  нечто  более ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 89 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│               К О М П Ь Ю Т Е Р Н А Я     Н О В Е Л Л А               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ценное, - вмешался Грагни, любов-   достал свой меч,- это. Меч против ┤
│ но полируя рукой нагрудник, - за-   орков  -  наносит им два удара за ┤
│ щищает так же,  как и стальная, а   раз.                              ┤
│ весит как пух.  К тому же, приоб-      Грагни задумался, и произнес:  ┤
│ ретает размеры владельца. Она мне      - Я думаю,  что это наше прик- ┤
│ здорово помогла,  когда мы отпра-   лючение  стало причиной войны Им- ┤
│ вились в замок Балура - того, кто   ператора с силами зла.  И он пос- ┤
│ использовал магию  огня  в  своих   лал  нас в Барак-Тор,  за древней ┤
│ рейдах против мирных поселений.     Звездой Запада - тем  талисманом, ┤
│    Золтан вытащил из  плаща  вол-   который  всегда  объединял  людей ┤
│ шебную палочку, и аккуратно поло-   против общей опасности. Тому, кто ┤
│ жил ее  на  стол,  предварительно   найдет ее, Император обещал двес- ┤
│ очистив его часть.                  ти монет.                         ┤
│    - С помощью этого  он  пользо-      - Я могу похвастаться,  - зау- ┤
│ вался магией. Теперь она для него   лыбался Сигмар,  - ведь это я  ее ┤
│ недоступна.  Он еще раз посмотрел   нашел.                            ┤
│ на нее, и убрал в складки плаща.       - Да,  и еще ты нашел  кое-что ┤
│    - А потом мы оказались в замке   другое, - вмешался Ладрил, - Вич- ┤
│ орков, помните, в комнате с тремя   лорда,  который спал, быть может, ┤
│ дверьми?  У нас тогда был обычный   до конца мира,  если бы не ты. Но ┤
│ выбор  - найти выход,  или погиб-   вообще-то,  я тебя не виню,  ведь ┤
│ нуть.  Кажется,  никто не  выбрал   благодаря твоей находке я получил ┤
│ последнее.                          то,  о чем и мечтать  не  смел  - ┤
│    - Твоя правда, - Сигмар провел   Колдовское  Лезвие,  единственное ┤
│ рукой по лбу,  - как тогда, когда   оружие, против которого ни у кого ┤
│ мы решили идти в  Магический  За-   нет защиты. Ты ведь кажется тогда ┤
│ мок.  Ты единственный был против,   чуть не погиб,  когда кидался  на ┤
│ и оказался прав - ничего хорошего   Уитчлорда  со всевозможным оружи- ┤
│ из этого не вышло.                  ем,  а он только смеялся  тебе  в ┤
│    - Бр-р-р,  -  замотал  головой   лицо.  Хорошо,  что ...  - Ладрил ┤
│ Ладрил,  -  не могу вспоминать об   выразительно посмотрел на  Золта- ┤
│ этом без дрожи, такими рассказами   на,  -  вовремя  сумел тебя отта- ┤
│ только детей пугать.                щить, иначе ты бы сейчас здесь не ┤
│    - Я узнал историю этого замка,   сидел.                            ┤
│ - Золтан нахмурился, - очень дав-      - Как бы то ни было, а прошло- ┤
│ но сумасшедший колдун Оллар обна-   го не вернешь,  - Грагни встал, - ┤
│ ружил  золотоносный  рудник.  Ис-   если бы не мы,  он бы не проснул- ┤
│ пользуя великие силы, он построил   ся, если бы не мы, он обессмертил ┤
│ этот замок.  Охраняли его те, кто   бы свои орды,  если бы не мы,  он ┤
│ когда-то пытался добраться до зо-   не  погиб бы в Барак-Торе от меча ┤
│ лота.  Мы  запросто  могли бы ос-   Ладрила,  тем  самым  ознаменовав ┤
│ таться там с ними,  за  компанию,   победу Императора в войне.  А те- ┤
│ превратившись  в  группу  зомби и   перь мне пора.                    ┤
│ скелетов.  Я согласен с вами, это      Он встал и направился к двери. ┤
│ был самый тяжелый переплет, в ко-   Остальные  молча  последовали  за ┤
│ торый мы попадали.  Следующее за-   ним,  также молча сели на коней и ┤
│ дание Императора было пустяком по   поехали,  каждый в свою  сторону, ┤
│ сравнению с этим.                   крикнув друг-другу на прощание:   ┤
│    - Ты   имеешь  в  виду  приказ      - Еще увидимся!                ┤
│ очистить бастион от тварей?                                           ┤
│    - Действительно, это было пле-      Хозяин вышел на крыльцо,  пос- ┤
│ вым  делом,-  Сигмар  взглянул  в   мотреть,  как удаляются всадники. ┤
│ сторону  двери  -  у меня в седле   Улыбка медленно  сползала  с  его ┤
│ тот щит,  который  я  нашел  там.   лица.  Он  вспомнил,  что  они не ┤
│ Неплохая  вещица,  особенно  если   заплатили...                      ┤
│ учесть,  что я не заплатил за нее                                     ┤
│ ни  гроша.  Но самое главное,- он             *     *     *           ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 90 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│               К О М П Ь Ю Т Е Р Н А Я     Н О В Е Л Л А               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │ те  было  полно  разных  полезных ┤
│             ZOMBI               ┤ │ предметов. В одном из отделов ге- ┤
│ ─────────────────────────────   ┤ │ рой нашел увесистый пулемет,  ко- ┤
│  (C) Алексей Дубровин, 1995.    ┤ │ торый взял с собой для обороны от ┤
│                                 ┤ │ зомби. А неподалеку, в шкафу, об- ┤
└─────────────────────────────────┘ │ наружил и фонарик.                ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘    Подвал был  весьма  обширным и ┤
│    Небольшой французский  городок   грязным помещением с огромным хо- ┤
│ уничтожен толпами зомби  -  живых   лодильным  агрегатом  в  одной из ┤
│ мертвецов. Они повсюду - в домах,   комнат.  Вниз можно было  попасть ┤
│ на улицах и крышах.  Те,  кто  не   двумя  путями  -  на  лифте  и по ┤
│ успел убежать до начала очередно-   лестнице из маленькой комнатки на ┤
│ го пришествия зомби, превратились   первом этаже.                     ┤
│ в этих ужасных созданий. Из всего      Оказавшись на  первом   этаже, ┤
│ населения городка в  живых  оста-   Патрик  вышел  на  улицу и обошел ┤
│ лись  только четверо - Александр,   здание вокруг.  Мертвецы, очевид- ┤
│ Сильвия,  Яник и Патрик.  Им уда-   но,  попадали внутрь через разби- ┤
│ лось  скрыться от смерти на крыше   тые двери трех входов  с  севера, ┤
│ центрального   супермаркета.   По   юга  и  запада.  Для начала нужно ┤
│ счастливой случайности здесь ока-   было очистить здание от зомби,  а ┤
│ зался вполне работоспособный вер-   значит,  закрыть им доступ в зда- ┤
│ толет, но, к сожалению, без горю-   ние. Но как это сделать?          ┤
│ чего. Отважной четверке предстоит      Еще снаружи Патрик увидел гру- ┤
│ найти выход из этого трудного по-   зовики - по одному у каждого вхо- ┤
│ ложения. В целом обстановка в иг-   да.  Если с разгона зажать машину ┤
│ ре  довольно  зловещая,  а  зомби   в дверной проем,  то  она  прочно ┤
│ изображены  достаточно  правдопо-   застрянет там, и войти внутрь бу- ┤
│ добно,  чтобы испугать людей с не   дет невозможно.  Патрик уже думал ┤
│ слишком крепкими нервами, особен-   о  том,  кто  останется  снаружи, ┤
│ но  когда мертвец появляется нео-   чтобы  заблокировать  двери,  как ┤
│ жиданно.                            вспомнил,  что сначала надо найти ┤
│    Надо сказать, эту зловещую ат-   ключи к замкам зажигания.  И Пат- ┤
│ мосферу рассеивает в значительной   рик  снова  пустился  на  поиски. ┤
│ степени реклама авторов - UBI SO-   Скоро ему  действительно  попался ┤
│ OT, развешенная по стенам здания,   ключ,  но не от грузовиков. Может ┤
│ правда,  кое-где  обильно политая   быть, он подойдет к закрытой две- ┤
│ кровью.                             ри  наверху,  на четвертом этаже, ┤
│    Итак, все  четверо  смельчаков   куда не смог проникнуть раньше.   ┤
│ на крыше. Нужен доброволец, чтобы      Ключ подошел,  и герой вошел в ┤
│ спуститься  и  осмотреть здание в   комнату с большим пультом  управ- ┤
│ поисках горючего. Помочь вызвался   ления  слева  у стены - очевидно, ┤
│ Патрик,  он спустился по лестнице   это не что иное,  как  радиостан- ┤
│ на чердак,  а оттуда  вниз  на  3   ция,  но  радио  не  интересовало ┤
│ этаж.                               Патрика сейчас - на  полу  лежали ┤
│    Зомби возник неожиданно.  Пат-   три  ключа  с бирками на цепочке. ┤
│ рик  не  растерялся  и нескольких   Он взял их,  вышел  и  отправился ┤
│ мощных ударов в корпус  отбросили   рассказывать  о  своей  затее ос- ┤
│ зомби. Но мертвец продолжал напа-   тальным.                          ┤
│ дать.  Поняв в чем  дело,  Патрик      Через некоторое время был раз- ┤
│ провел  боксерскую серию в голову   работан  план  действия.   Патрик ┤
│ зомби и с удовлетворением  погля-   блокирует  двери  и,  запершись в ┤
│ дел  на  жалкие  останки  в углу.   одном из грузовиков,  ожидает по- ┤
│ Оказалось, что здание имеет четы-   мощи.  Александр с Яником, воору- ┤
│ ре этажа, включая крышу и подвал.   жившись,  уничтожает зомби и тас- ┤
│ Но в подвале начисто отсутствова-   кают их в подвал (Патрик прочитал ┤
│ ло электричество, и Патрику приш-   где-то,  что лучше всего  заморо- ┤
│ лось искать фонарь. В супермарке-   зить трупы и настоял на том, что- ┤
└───────────────────────────────────────────────────────────────────────┘

                                 - 91 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│               К О М П Ь Ю Т Е Р Н А Я     Н О В Е Л Л А               ┤
└───────────────────────────────────────────────────────────────────────┘
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ бы все до единого убитые были от-   Зомби  перестали неожиданно выхо- ┤
│ несены в холодильник) и после за-   дить как бы ниоткуда и Александр, ┤
│ вершения  работы  поднимаются   к   наконец,    заморозил   последний ┤
│ Сильвии, которая ждет их в верто-   труп. Он удовлетворенно вытер ок- ┤
│ лете. Затем Александр отправляет-   ровавленные руки и вышел из каме- ┤
│ ся на поиски топлива.               ры холодильника.  Однако неприят- ┤
│    Спускаясь, Яник нечаянно задел   ности  на  этом  не кончились.  В ┤
│ шкаф  -  дверца распахнулась и на   этот момент,  когда  Яник  и  его ┤
│ пол  громыхая   упала   канистра.   спутник   уже  готовы  были  идти ┤
│ Александр  поднял  ее  -  пустая.   вверх,  перед ними вдруг  выросла ┤
│ Дверь одного из отделов распахну-   фигура здоровенного детины, наст- ┤
│ лась и оттуда вышел Патрик, держа   роенного явно  недоброжелательно. ┤
│ в руках какой-то шланг. Он бросил   Александр опомнился и одним выст- ┤
│ его Янику:  "Это на случай,  если   релом в лоб уложил  спутника.  Ни ┤
│ найдете горючее. Я вижу, канистра   слова  не  говоря,  друзья  снова ┤
│ у Вас уже есть".  Он повернулся и   принялись за работу.              ┤
│ пошел к лестнице  вниз,  по  пути      В это  время сидевший в кабине ┤
│ уложив  какого-то зомби ударом по   Патрик почувствовал,  как  машина ┤
│ голове,  повернулся  и   крикнул:   раскачивается из стороны в сторо- ┤
│ "Если  будут  проблемы,  возьмите   ну.  Он выскочил из кабины и уви- ┤
│ тележки и возите в них трупы. Од-   дел, как двое огромных зомби тол- ┤
│ ну  я видел в подвале,  а вторую,   кают грузовик, пытаясь убрать его ┤
│ кажется, на первом этаже.           с дороги.  Вскоре им это удалось, ┤
│    Яник и Александр действительно   из стоящего  неподалеку  автобуса ┤
│ нашли две тележки на колесах, как   вышли  несколько  зомби  и  вошли ┤
│ сказал Пат. Они взяли в оружейном   внутрь здания.                    ┤
│ отделе по внушительного вида пис-      Пат подошел  к автобусу и нак- ┤
│ толету и принялись энергично уби-   лонился  над  крышкой  бензобака. ┤
│ вать отвратительных уродов и  во-   "Для вертолета подойдет," - решил ┤
│ зить их в подвал.  Мимоходом Яник   он и бросился в магазин.  Наскоро ┤
│ взял оставленный Патриком фонарь,   объяснив ребятам в чем дело, Пат- ┤
│ а  Александр нашел где-то бинокль   рик  взял  канистру и вернулся на ┤
│ ночного видения, вполне пригодный   улицу.  Используя шланг, он отлил ┤
│ для  прогулок по подвалу.  Пат не   немного  бензина - в канистре за- ┤
│ спеша спустился на  первый  этаж.   булькало. Залив ее доверху бензи- ┤
│ Он знал, что ему грозит, по мень-   ном, он закрыл бак и пошел к вер- ┤
│ шей мере час или два просидеть  в   толету,  где осторожно перелил  в ┤
│ грузовике после бегства остальных   бензобак   содержимое   канистры. ┤
│ в городе, полном зомби, но именно   Бросив все,  Патрик спустился об- ┤
│ он мог справиться с такой задачей   ратно к грузовику и с разгона на- ┤
│ лучше всех,  так как у него  были   мертво вогнал его борт в  дверной ┤
│ стальные  нервы  и вдобавок пуле-   проем.                            ┤
│ мет.                                   Яник и Алекс старались  вовсю. ┤
│    Выйдя через дверь, Патрик отк-   Прошло много времени,  прежде чем ┤
│ рыл кабину  грузовика  и  сел  на   они  закончили  уборку  трупов  и ┤
│ мягкое черное сиденье.  Бесшумный   поднялись на крышу.               ┤
│ поворот ключа - мотор заработал и      Бак был   уже  полон.  Сильвия ┤
│ Пат надавил педаль газа.  Сильный   ждала, держа в руке ключ от замка ┤
│ удар потряс  грузовик.  С  трудом   зажигания, Александр завел мотор. ┤
│ выйдя из кабины, герой проверил -   Сквозь шум лопастей отчетливо был ┤
│ дверь заблокирована надежно.  Та-   слышен  нарастающий  гул огромной ┤
│ ким  же  образом Пат поступил и с   толпы.  Вертолет взмыл в вечернее ┤
│ остальными входами.  Оставшись  в   небо,  унося  спасенных далеко от ┤
│ кабине грузовика,  Патрик прикрыл   смертоносного города!             ┤
│ поплотнее дверь  и  откинулся  на                                     ┤
│ спинку сидения.                               *     *     *           ┤
│    Тем временем  работа   кипела.                                     ┤
└───────────────────────────────────────────────────────────────────────┘

                                  - 92 -

┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│                                 ┤ │    Сюжет в целом аналогичен одно- ┤
│       Авторская программа       ┤ │ именной  игре  фирмы  "GAMOS" для ┤
│                                 ┤ │ IBM PC.                           ┤
└─────────────────────────────────┘ │    В игре четыре уровня, в первом ┤
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ уровне надо сократить три шарика, ┤
│ ЗАЯВКА: И027                        с  каждым следующим уровнем коли- ┤
│ ПРОГРАММА: "СЧИТАЛКА"               чество сокращаемых шаров увеличи- ┤
│ АВТОР: Вадим и Сергей Грепан,       вается.                           ┤
│           Алексей Дарвин, Москва.      Есть музыка  для  музыкального ┤
│ ДАТА РАЗРАБОТКИ: Октябрь 1994.      сопроцессора.                     ┤
│ ЯЗЫК ПРОГРАММИРОВАНИЯ: Ассемблер.   ********************************* ┤
│ НАЛИЧИЕ ЗАЩИТЫ: Есть.                                                 ┤
│ ДОКУМЕНТАЦИЯ: Встроенная.           ЗАЯВКА: И030                      ┤
│ КРАТКОЕ ОПИСАНИЕ:                   ПРОГРАММА: "ТЕСТ"                 ┤
│    Программа помогает  детям  7-9   АВТОР: Хохлов Ю.В., г.Челябинск.  ┤
│ лет освоить устный счет.  За каж-   ДАТА РАЗРАБОТКИ: 1994 г.          ┤
│ дый правильный   ответ   рисуется   ЯЗЫК ПРОГРАММИРОВАНИЯ:LASER-BASIC ┤
│ часть призовой  картинки.  По за-   НАЛИЧИЕ ЗАЩИТЫ: Нет.              ┤
│ вершении прорисовки картинки  де-   ДОКУМЕНТАЦИЯ: Не указано.         ┤
│ монстрируется мультик.              КРАТКОЕ ОПИСАНИЕ:                 ┤
│    Программа имеет меню  настрой-      Игра на скорость реакции.  При ┤
│ ки, в котором задается тип приме-   появлении на экране заранее опре- ┤
│ ров, их сложность и т.д.            деленной  Вами  фигуры  надо  как ┤
│    Вместе с  иллюстрациями  прог-   можно быстрее нажать клавишу. Чем ┤
│ рамма занимает около 500 секторов   быстрее Ваша реакция,  тем больше ┤
│ на диске.                           очков  засчитает  Вам  компьютер. ┤
│ *********************************   Если  Вы  поторопились  и  нажали ┤
│                                     клавишу не на той фигуре, то наб- ┤
│ ЗАЯВКА: И028                        ранные   Вами   очки  уменьшаются ┤
│ ПРОГРАММА: "COLOR LINES"            очень интенсивно.                 ┤
│ АВТОРЫ: Вадим и Сергей Грепан,         Таблицу рекордов можно  отгру- ┤
│       Светлана Колчанова, Москва.   зить на диск.                     ┤
│ ДАТА РАЗРАБОТКИ: Ноябрь 1994 г.     ********************************* ┤
│ ЯЗЫК ПРОГРАММИРОВАНИЯ: Ассемблер.                                     ┤
│ НАЛИЧИЕ ЗАЩИТЫ: Есть.               ЗАЯВКА: И031                     .┤
│ ДОКУМЕНТАЦИЯ: Встроенная.           ПРОГРАММА: "НЛО. Враг неизвестен" ┤
│ КРАТКОЕ ОПИСАНИЕ:                   АВТОРЫ: Вячеслав и Алексей        ┤
│    Идея игры взята из одноименной          Медноноговы (С.Петербург). ┤
│ программы для IBM PC.               ДАТА РАЗРАБОТКИ: Ориентировочно:  ┤
│    Программа написана   с  учетом                          март 1995. ┤
│ всех  (как  хотелось  бы  думать)   ЯЗЫК ПРОГРАММИРОВАНИЯ: Ассемблер. ┤
│ требований к фирменной программе:   НАЛИЧИЕ ЗАЩИТЫ: Не указано.       ┤
│ выбор управления  (KEYBOARD/KEMP-   ДОКУМЕНТАЦИЯ: Не указано.         ┤
│ STON),  звук, встроенная инструк-   КРАТКОЕ ОПИСАНИЕ:                 ┤
│ ция. Особо удачные комбинации по-      Прототипом является игра "UFO. ┤
│ ощряются  мультиками  и звуковыми   Enemy unknown"  (MICROPROSE)  для ┤
│ эффектами.  Программа   полностью   IBM-совместимых машин.            ┤
│ авторская (кроме идеи, увы).           Общий объем игры примерно 400К ┤
│                                     (сюда  входит более сорока полно- ┤
│ *********************************   экранных изображений,  70К  отво- ┤
│                                     дится на  спрайты различных ланд- ┤
│ ЗАЯВКА: И029                        шафтов, героев и др., 30К тексто- ┤
│ ПРОГРАММА: "COLOR LINES"            вой  информации и т.д.).  По этой ┤
│ АВТОР: Фирма "SURDAKAR", Рыбинск.   причине игра будет доступна толь- ┤
│ ДАТА РАЗРАБОТКИ: 08.07.1994 г.      ко    пользователям   ZX-Spectrum ┤
│ ЯЗЫК ПРОГРАММИРОВАНИЯ: Ассемблер.   128/256К при наличии дисковода.   ┤
│ НАЛИЧИЕ ЗАЩИТЫ: Не указано.            Сюжет игры упрощен, но в целом ┤
│ ДОКУМЕНТАЦИЯ: Не указано.           совпадает с оригинальным.         ┤
│ КРАТКОЕ ОПИСАНИЕ:                   ********************************* ┤
└───────────────────────────────────────────────────────────────────────┘
