Глава V

Глава 5 - удалить

@@ -1,12 +1,10 @@
-c1E
+\/d
                ГЛАВА  V.  ГРАФИЧЕСКИЕ  СРЕДСТВА  MSX-BASIC
-
-
+\/d-
 
                             Лучше один раз увидеть, чем сто раз услышать.
                                                                Пословица
 
-
    До появления цветной машинной графики результаты работы компьютера  бы-
 ли трудны для восприятия. Важная информация терялась среди второстепенной.
 Машинные игры, например, больше напоминали утомительную работу.  Одной из
@@ -31,12 +29,9 @@
    В разделах V.1-V.8 мы будем говорить о графических  средствах ПЭВМ  се-
 рии MSX-1, которые для компьютеров серии MSX-2 изменениям не подверглись!
 
-
-
                V.1.  ОПЕРАТОР  SCREEN  В ПРОСТЕЙШЕМ СЛУЧАЕ
                            (для компьютера MSX-1)
 
-
    На компьютерах серии MSX-1 существуют четыре режима работы дисплея:два
 т е к с т о в ы х (символьных) режима и два г р а ф и ч е с к и х,  служа-
 щих для индикации соответственно текстовой (символьной) и графической  ин-
@@ -46,7 +41,7 @@
 тем высвечивания точек различным цветом.
    Переключение с одного режима работы на другой (или, как говорят, "с од-
 ного экрана на другой") осуществляется оператором
-                                  SCREEN n
+                                  SCREEN n     ,
 где: SCREEN("screen"-"экран") - служебное слово;
      n - арифметическое выражение, целая  часть  значения которого должна
 принадлежать отрезку [0,3]; этот параметр указывает режим работы дисплея: 
@@ -62,7 +57,7 @@
 SCREEN0. Этот режим обычно используется для ввода программ или для работы
 с программами редактирования текстов.
    Ясно,что в режиме высокого разрешения экран разбивается на большее чис-
-ло точек, чем в режиме низкого разрешения. Вследствие этого, в первом слу-
+ло точек, чем в режиме низкого разрешения. Вследствие этого  в первом слу-
 чае точки оказываются гораздо меньшего размера,благодаря чему изображение
 может содержать существенно большее число деталей.
    Отметим, что  т о л ь к о  в  символьных режимах допустимо  применение
@@ -73,12 +68,11 @@
    Любая пара целых чисел (X,Y) в диапазоне  0≤X≤255, 0≤Y≤191, задает  на
 графических экранах SCREEN2 и SCREEN3 точку, однако учтите, что  в режиме
 SCREEN3 блок размером 4╳4 точек создает изображение одной "точки",поэтому
-фактические размеры экрана SCREEN3 - 64╳48 укрупненных "точек"(см. рис.1).
-   Для сравнения, стандартный телевизионный монитор (телевизор) имеет раз-
+фактические размеры экрана SCREEN3 - 64╳48 укрупненных "точек"(см. рис.3).
+   Для сравнения: стандартный телевизионный монитор (телевизор) имеет раз-
 решающую способность экрана 512╳256 точек,а профессиональная микроЭВМ фир-
 мы  Tektronix  (модель  4054)  имеет  экран  с  разрешающей  способностью
 4096╳3125 точек.
-
             0                  255        0                  63
            0┌───────────────────┐──▶X    0┌───────────────────┐──▶X
             │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
@@ -87,10 +81,8 @@
             │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
          191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘       47│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
             ▼ Y                           ▼ Y
-
-                                  Р и с. 1 
-
-   Отметим, что система  координат, изображенная  на рис.1,  используется
+                                  Р и с. 3 
+   Отметим, что система  координат, изображенная  на рис.3,  используется
 также в таких микроЭВМ, как APPLE, TRS-80, IBM, ATARI.
     В любой момент времени одна из точек (α,β) экрана находится  в особом
 состоянии или, как говорят, отмечена   г р а ф и ч е с к и м   к у р с о -
@@ -101,26 +93,22 @@
    Заметим, что текущие координаты X и Y графического курсора можно  опре-
 делить  в режиме  SCREEN0  или  SCREEN1  при  помощи  команды  (оператора) 
                      PRINT PEEK(&HFCB3);PEEK(&HFCB5)                     .
-
    П р и м е ч а н и е:
-   1)  При  включении  питания  компьютера, неявно  выполняется  оператор
+   1)  При  включении  питания  компьютера  неявно  выполняется  оператор
 SCREEN 0. 
    2)  При вводе оператора SCREEN n (n=0,1,2,3) всегда очищается экран.
    3)  В прямом режиме Вы находитесь в SCREEN 0 или SCREEN 1. Возвращаясь
 в прямой режим, Вы снова перейдете в экран SCREEN 0 или в SCREEN 1,в зави-
-симости от последнего выполненного оператора. Соответственно,ввод команды
+симости от последнего выполненного оператора. Соответственно ввод команды
 SCREEN 2 в прямом режиме очищает экран перед возвратом в режимы  SCREEN 0
 или SCREEN 1. 
 
-
-
            V.2.  ОПЕРАТОР  WIDTH . ОПЕРАТОРЫ  KEY OFF  и  KEY ON
 
-
    Оператор WIDTH используется для установки ширины экрана дисплея  в сим-
 вольных режимах SCREEN 0 и SCREEN 1 (каждому режиму может соответствовать
 своя ширина экрана).
-   Синтаксис оператора:            WIDTH α
+   Синтаксис оператора:            WIDTH α     ,
 где:  WIDTH("width"-"ширина") - служебное слово;
       α - арифметическое выражение, целая часть  значения которого должна
 принадлежать отрезку [1,40] для режима  SCREEN0 или отрезку [1,32] для ре-
@@ -132,7 +120,6 @@
    ───────────     10 WIDTH 1:?"Проверка":FOR I=1 TO 180:NEXT
                    20 WIDTH 40:?:?:?:?:?TAB(15);"Проверка"
                    30 FOR I=1 TO 180:NEXT:GOTO 10
-
    Отметим, что оператор WIDTH является и командой непосредственного режи-
 ма. Например, для возвращения к "обычной" ширине экрана используйте коман-
 ду WIDTH 39 или команду WIDTH 29 .
@@ -142,38 +129,30 @@
 мент оператора WIDTH должен лежать в диапазоне от 1 до 80 для компьютеров
 серии MSX-2).
    В результате выполнения оператора
-                                  KEY OFF
+                                  KEY OFF       ,
 где  KEY OFF ("key"-"клавиша") - служебное слово,
 из  24-й строки символьных экранов SCREEN0 и SCREEN 1 убирается индикация
 значений функциональных клавиш F1-F10. Тем самым эта строка становится до-
 ступной для ввода информации (размер экрана увеличивается на одну строку).
-
    П р и м е р:         10 KEY OFF:LOCATE 5,23
    ───────────          20 PRINT "Проверка KEY OFF"
-
    Оператор                       KEY ON
 отменяет действие оператора KEY OFF и отводит 24-ю  строку экрана для  ин-
 дикации значений функциональных клавиш F1-F10.
    В этой строке удобно показывать вспомогательную информацию, т.к. она в
 отличие от других не участвует в вертикальном сдвиге содержимого экрана!
 
-
-
                  V.3.  УПРАВЛЕНИЕ ТЕКСТОВЫМ КУРСОРОМ
 
-
    В данном разделе речь пойдет об операторе LOCATE установки  текстового
 курсора "█" (не графического!) и функциях  POS(α), LPOS(α), CSRLIN  управ-
 ления текстовым курсором.
 
-
-
-        V.3.1.  О п е р а т о р  LOCATE .  Ф у н к ц и я  CSRLIN .
+            О п е р а т о р  LOCATE .  Ф у н к ц и я  CSRLIN .
                     Ф у н к ц и и   POS(α)  и  LPOS(α)
 
-
    Синтаксис оператора LOCATE:
-                           LOCATE [X][,Y][,α]
+                           LOCATE [X][,Y][,α]      ,
 где: LOCATE("to locate"-"устанавливать") - служебное слово;
      X - арифметическое выражение,целая часть значения которого задает но-
 мер экранного столбца, в котором находится курсор (столбцы нумеруются сле-
@@ -190,7 +169,7 @@
                        "Illegal function call"
         ("Н е п р а в и л ь н ы й  в ы з о в  ф у н к ц и и").
    Любой параметр оператора LOCATE может быть опущен,но запятые(запятая!),
-определяющие его позицию, обязательно должны присутствовать. Если X,или Y,
+определяющие его позицию, обязательно должны присутствовать. Если X или Y,
 или α опущены, то сохраняются их предыдущие значения.Примеры записи опера-
 тора:
        LOCATE 25,10,1  LOCATE 15,,1  LOCATE 9     LOCATE ,,1
@@ -198,14 +177,11 @@
    Оператор LOCATE перемещает курсор из текущей позиции  в позицию  (X,Y).
 Учтите, что данный оператор позволяет управлять курсором   т о л ь к о  в
 символьных экранах SCREEN0 и SCREEN1!
-
    П р и м е р ы:  1) 10 LOCATE 15,15,0       2) 10 LOCATE 15,15,1
    ─────────────      20 FOR I=1 TO 300:NEXT     20 FOR I=1 TO 300:NEXT
-
    Если используются строка или столбец с номерами,большими,чем максималь-
 но отображаемые,но меньшими 255,то ошибки не произойдет,но курсор перемес-
 тится на максимально возможную позицию экрана дисплея  в этом направлении.
-
       3) NEW                     4) NEW
          Ok                         Ok
          10 CLS:LOCATE 5,3          3 CLS'Вначале очистим экран!
@@ -217,10 +193,8 @@
          ·····█  ◀── 6 столбец      40 FOR I=1 TO 400:NEXT
   Компьютер ждет ввода символа!     50 LOCATE ,1,1
                                     60 FOR I=1 TO 400:NEXT:GOTO 3
-
    С помощью оператора LOCATE можно выводить информацию  на  текстовый эк-
 ран, начиная с нужного места.
-
       5) NEW                        7) NEW
          Ok                            Ok
          10 CLS:LOCATE 3,2             10 CLS:LOCATE 1,1
@@ -230,27 +204,23 @@
          ····                          40 ? CHR$(255);"А теперь
          ···Смотри: █                  здесь!"
          Ok                            run
-
       6) NEW                           ···
          Ok                            ·█Я здесь!
          10 LOCATE 14,15               ··█А теперь здесь!
          20 ?PEEK(&HF3DD);PEEK(&HF3DC) Ok
 
-
-   Функция                        CSRLIN
+   Функция                        CSRLIN     ,
 где CSRLIN ("Cursor ScReen LINe"-"строка курсора") - служебное слово, воз-
 вращает в символьных экранах SCREEN0 и SCREEN1 номер экранной строки,в ко-
 торой находится курсор.
    Учтите, что "верхняя"строка имеет номер нуль,"нижняя" имеет номер  или
 22 или 23 (в зависимости от того,используется ли эта строка для индикации
 значений функциональных клавиш).
-
    П р и м е р: табулирование функции y=x² на отрезке [A,B] с шагом  H  с
    ───────────  предотвращением   непрерывного   вертикального   движения
 (скроллинга) результатов табулирования по экрану  (информация движется по-
 странично, "высота" страницы - 22 строки).  Напомним:  с к р о л л и н г -
 рулонный режим перемещения строк снизу вверх или сверху вниз. 
-
      NEW
      Ok
      10 CLS:INPUT A,B,H:FOR X=A TO B STEP H' Оператор CLS важен!
@@ -258,9 +228,7 @@
      X,X^2
      30 NEXTX:FORI=(22-CSRLIN)*POS(0)TO(23-CSRLIN)*39:?CHR$(32);:NEXT:A$=
      INPUT$(1)
-
-
-   Функция                          POS(α)
+   Функция                          POS(α)       ,
 где:  POS("POSition"-"позиция") - служебное слово;
       α - числовая константа (при выполнении функции  не используется, но
 обязательно должна быть указана при обращении); возвращает  в  символьных
@@ -275,19 +243,13 @@
 Например:
       25 IF LPOS(0)>10 THEN LPRINT X ELSE LPRINT TAB(10):LPRINT X
 
-
-
             V.4.  БАЗОВЫЕ ГРАФИЧЕСКИЕ ОПЕРАТОРЫ  MSX-BASIC
 
-
-                             Я думаю, что чертежи очень полезное средство
-                             против неопределенности слов.
-                                                              Г.В.Лейбниц
-
-
+                               Я думаю, что чертежи - очень полезное сред-
+                               ство против неопределенности слов.
+                                                                Г.Лейбниц
     V.4.1.  О п е р а т о р  COLOR  д л я  к о м п ь ю т е р а  MSX-1
 
-
    На экране дисплея можно выделить три отдельные области: передний  план,
 фон и бордюр.  П е р е д н и й  п л а н (изображение) - область,где распо-
 лагаются цифровые и текстовые данные и графические изображения,которые на-
@@ -304,7 +266,7 @@
    Оператор COLOR позволяет задавать различные цвета фона, бордюра  и изо-
 бражения,выводимого на передний план.
    Его синтаксис: 
-                              COLOR [I],[F][,B]
+                              COLOR [I],[F][,B]     ,
 где: COLOR("color"-"цвет") - служебное слово;
      I - арифметическое выражение, целая часть  значения  которого задает
 код цвета изображения (по умолчанию I=15);
@@ -316,14 +278,12 @@
    Приведем коды 15 возможных цветов для многоцветных дисплеев. Для  моно-
 хроматических (от греч."μоvoσ"-"один") дисплеев эти коды задают различные
 оттенки черного и зеленого цветов.
-
          0:прозрачный;     5:светло-голубой;  10:темно-желтый;
          1:черный;         6:темно-красный;   11:светло-желтый;
          2:зеленый;        7:голубой;         12:темно-зеленый;
          3:светло-зеленый; 8:красный;         13:васильковый;
          4:темно-голубой;  9:светло-красный;  14:серый;  15:белый.
-
-   Отметим, что объект прозрачного цвета всегда преобретает цвет  бордюра,
+   Отметим, что объект прозрачного цвета всегда приобретает цвет  бордюра,
 а бордюр "нулевого" цвета - черный (поэтому возможных цветов не 16, а 15)!
    Полное отсутствие параметров в операторе COLOR приводит к появлению на
 экране дисплея сообщения об ошибке
@@ -352,18 +312,15 @@
 пую" в непосредственном режиме наберите, например, команду COLOR 1,15 или
 COLOR 15,4 и нажмите клавишу "RETURN". На экране появится информация,кото-
 рая ранее была "невидима"!
-
    П р и м е р. Программа, позволяющая подобрать удобные сочетания цветов
    ───────────  изображения, фона и бордюра.
    Ok
    10 SCREEN 1:FOR I=1 TO 15:FOR F=1 TO 15:FOR B=1 TO 15
    20 COLOR I,F,B:LOCATE 9,10:PRINT I;F;B
    30 FOR K=1 TO 1000:NEXT:NEXT:NEXT:NEXT
-
    В любой момент времени Вы можете,нажав на клавишу "STOP" Вашего компью-
 тера, приостановить работу программы и выписать понравившуюся Вам комбина-
 цию значений I, F, B, которая выводится на экран дисплея.
-
 З а м е ч а н и е. Если Вы прервали программу,используя клавиши CTRL+STOP,
 то можете тут же возвратить  начальные  значения  цветов  нажатием клавиш
 SHIFT+F1 (только для компьютеров серии MSX-2)!
@@ -396,7 +353,7 @@
    α) во время выполнения оператора  COLOR  в режиме SCREEN 2  изменяется
 только цвет бордюра, а не цвет изображения или фона;
    β) цвет фона изменится только в том случае,если после выполнения опера-
-тора COLOR будет выполнен оператор CLS (см. ниже раздел 4.3);
+тора COLOR будет выполнен оператор CLS (см. ниже раздел V.4.3);
 
    Для проверки вышесказанного сравните следующие программы:
       10 SCREEN 2:COLOR 1,15,6
@@ -413,23 +370,18 @@
 фона и бордюра соответственно можно получить, выполнив в непосредственном
 режиме команду    PRINT PEEK(&HF3E9);PEEK(&HF3EA);PEEK(&HF3EB)
 
-
-
      V.4.2.  О п е р а т о р  COLOR  д л я  к о м п ь ю т е р а  MSX-2
 
-
-          П а л и т р а (от франц."palette"-"пластинка"), четырехугольная
+          П а л и т р а (от франц."palette"-"пластинка")- четырехугольная
           или овальная деревянная дощечка, металлическая  или  фарфоровая
           пластинка для смешивания красок; подбор цветов, которыми пользу-
-          ется художник.              Советский Энциклопедический Словарь
-
-
-   Известно, что цвета, (пронумерованные в MSX-BASIC от 0 до 15),содержат
+          ется художник.   
+                                      Советский Энциклопедический Словарь
+   Известно, что цвета (пронумерованные в MSX-BASIC от 0 до 15)  содержат
 к р а с н ы й ("Red"), з е л е н ы й ("Green") и  с и н и й ("Blue") цвет 
 в определенных пропорциях.
    В приведенной ниже таблице  Вы  сможете почерпнуть сведения о пропорци-
 ях RGB в изначально установленных цветах экрана дисплея:
-
                   ┌───────┬───────────────┬───┬───┬───┐
                   │ Номер │      Цвет     │ R │ G │ B │
                   ├───────┼───────────────┼───┼───┼───┤
@@ -450,15 +402,14 @@
                   │  14   │ Серый         │ 5 │ 5 │ 5 │
                   │  15   │ Белый         │ 7 │ 7 │ 7 │
                   └───────┴───────────────┴───┴───┴───┘
-
    В компьютере серии MSX-2 эти пропорции могут быть изменены  при помощи
-оператора:                    COLOR=(C,R,G,B)
+оператора:                    COLOR=(C,R,G,B)    ,
 где:  C - арифметическое выражение, целая  часть  значения  которого опре-
 деляет номер  и з м е н я е м о г о  цвета;
       R,G,B - арифметические выражения, целые части значений которых опре-
 деляют соответственно пропорции красного, зеленого и синего цветов.
    Последние три числа должны находиться в диапазоне от 0 до 7.
-   Например, пусть значением C является 4 (текущий цвет фона) и  попробуй-
+   Например, пусть значением C является 4 (текущий цвет фона), и попробуй-
 те изменить для него пропорции RGB. Так, для получения  чистого  красного
 цвета фона, введите:           COLOR=(4,7,0,0)
    Таким образом, можно получить 512 различных оттенков каждого цвета.
@@ -466,7 +417,7 @@
 л и т р ы" вместо термина "номер цвета", принятого  на  компьютерах серии
 MSX-1.
    Отметим, что оператор SCREEN устанавливает  палитры в начальное положе-
-ние. Однако, для установки  палитры без стирания экрана используйте опера-
+ние. Однако  для установки  палитры без стирания экрана используйте опера-
 тор:                   COLOR=NEW      или      COLOR
    ┌────────────────────────────────────────────────────────────────┐
    │   Обратите внимание на то, что палитра не может быть изменена  │ 
@@ -476,13 +427,11 @@
 здесь являются запрещенными!
 
 
-
                        V.4.3.  О п е р а т о р  CLS
 
-
    Существует быстрый способ получить чистый(свободный от изображения) эк-
 ран дисплея определенного цвета. Оператор
-                                    CLS
+                                    CLS       ,
 где CLS("to CLear Screen"-"очищать экран") - служебное  слово; окрашивает
 весь экран цветом фона,не меняя положения графического курсора в графичес-
 ких режимах (в символьных режимах после действия CLS курсор помещается  в
@@ -503,11 +452,11 @@
 ного" программирования! Так оратор откашливается перед выступлением, забо-
 тясь о том, чтобы все слова донести до слушателей.
 
-          V.4.4.  О п е р а т о р  PSET . О п е р а т о р  PRESET
 
+          V.4.4.  О п е р а т о р  PSET . О п е р а т о р  PRESET
 
    Первая форма записи оператора PSET:
-   I.                         PSET[@](Х,У)[,С]
+   I.                         PSET[@](Х,У)[,С]      ,
 где: PSET("to SET Point"-"установить точку") - служебное слово;
      X - арифметическое выражение, целая часть  значения  которого опреде-
 ляет x-координату точки (номер колонки);
@@ -519,7 +468,7 @@
 выполнение; он используется только для совместимости  с другими  версиями
 языка BASIC.
    При попытке использовать оператор PSET в символьных экранах SCREEN 0 и
-SCREEN 1, компьютер сообщает об ошибке:
+SCREEN 1  компьютер сообщает об ошибке:
                         "Illegal function call" .
    Целые части значений X и Y должны принадлежать отрезку  [-32768,32767],
 а целая часть значения C должна находиться на отрезке [0,15];по умолчанию
@@ -539,11 +488,11 @@
      20 CIRCLE(90,90),7,11:PAINT STEP(0,0),11:PSET(A,90),8
      30 GOTO 30
    Дело в том, что каждая из 192 линий экрана SCREEN 2 разбивается  на 32
-8-ми точечных сегмента (8-ми пиксельных сегмента). Каждому  сегменту "при-
-сваивается" только  д в а  цвета - цвет изображения и цвет фона. Отобража-
-емый на экране пиксель имеет цвет изображения, тогда как отсутствие пиксе-
-ля означает появление пикселя, имеющего цвет фона. Следовательно,для вось-
-мипиксельного сегмента возможно наличие всего  д в у х  цветов.
+восьмиточечных (восьмипиксельных) сегмента. Каждому сегменту "присваивает-
+ся" только  д в а  цвета - цвет изображения и цвет фона. Отображаемый  на
+экране пиксель имеет цвет изображения, тогда как отсутствие пикселя  озна-
+чает появление пикселя, имеющего цвет фона. Следовательно, для  восьмипик-
+сельного сегмента возможно наличие всего  д в у х  цветов.
 
    Для режима SCREEN3 каждый блок точек 4╳4 создает на экране изображение
 одной"точки", поэтому любое изменение цвета"маленькой" точки в этом блоке
@@ -551,17 +500,14 @@
    Итак, вследствие неизбежного побочного эффекта "перетекания цветов",Вы
 должны быть очень аккуратны, применяя оператор PSET, так как при этом лег-
 ко можно изменить цвет уже нарисованной части изображения!
-
    П р и м е р ы:
    ─────────────
       1) построение графика параболы  Y²=50·X, X≥0, Y≥0.
          10 COLOR 1,15,8:SCREEN 2
          20 FOR X=0 TO 255:PSET(X,191-SQR(50*X)):NEXT
          30 GOTO 30
-
    А теперь исключите оператор GOTO30. Обнаружили разницу при запуске?...
 Думаем, что да! Запомните этот прием!
-
       2) Ok
          10 COLOR 1,15,8:SCREEN2:FOR T=0 TO 6.28*4 STEP .05:X=3*SIN(2*T):
          Y=3*COS(3*T):PSET(44+10*X,96-15*Y),1
@@ -570,16 +516,14 @@
          :E=25*COS(T)+25/2*COS(3*T):G=25*SIN(T)-25/2*SIN(3*T):PSET(125+E,
          130+G):NEXT
          80 GOTO 80'Замените эту строку на  80 A$=INPUT$(1) !
-
       3) NEW
          Ok
          10 INPUT A,B,K,N:COLOR 1,15,8:SCREEN2
          20 FOR T=0 TO 6.28 STEP.05:R=A*(1+COS(K*T)^N)+B*SIN(K*T)^N:X=R*C
          OS(T):Y=R*SIN(T):PSET(128+X,96+Y):NEXT
          40 GOTO 40 'Замените эту строку на  40 A$=INPUT$(1) !
-
       II. Вторая форма записи оператора PSET:
-                            PSET[@]STEP(X,Y)[,C]
+                            PSET[@]STEP(X,Y)[,C]    ,
 где: 1) STEP ("step"-"шаг") - служебное слово;
      2) @,X,Y,C имеют тот же смысл, что и в пункте α).
    Элемент конструкции STEP(X,Y) задает смещение  координат  изображаемой
@@ -596,14 +540,12 @@
          30 FOR X=0 TO 15:PSET STEP(10,0),X:NEXT  ' SCREEN2 !
          60 GOTO60 'Подумайте, почему в режиме SCREEN3 расстояние между 
          точками различно?!
-
       2) построение графика функции y=0.77x+14·sin(x/6),-128≤x≤127 (объяс-
 ните назначение операторов PSET(0,95) и PSET(128,0)). 
          10 COLOR 1,15,8:SCREEN 2:PSET(0,95):FOR J=0 TO 255:PSET STEP(1,0
          ),1:NEXT:PSET(128,0):FOR J=1 TO 191:PSET STEP(0,1),1:NEXT:FOR I=
          -128 TO 127:PSET(I+128,191/2-.77*I-14*SIN(I/6)),1:NEXT:B$=INPUT$
          (1)
-
 3) 10 CLS:INPUT"Введите Р (от 0 до  4) 5'Построение функциональных узоров
    14.4)";Р                            10 DEF FNF(X,Y)=SQR(X^2+Y^2)
    20 COLOR 15,1,15:SCREEN3:E=0        20 SCREEN 3
@@ -619,30 +561,24 @@
                            PRESET[@](X,Y)[,C]
                            PRESET[@]STEP(X,Y)[,C]
    Здесь элементы  @, (X,Y), STEP(X,Y) и С имеют тот же смысл,что и в опе-
-раторе PSET, oднако,при выполнении оператора PRESET без параметра С точка
+раторе PSET, oднако при выполнении оператора PRESET без параметра С точка
 с координатами (X,Y) "стирается", т.е. приобретает цвет фона.Если же пара-
 метр С присутствует, то действия операторов  PRESET и PSET идентичны.
-
    П р и м е р. Отрезок, "бегущий" по экрану!        
    ───────────   10 INPUT"Длина отрезка(≤45)";A:COLOR 1,15,8:SCREEN 2
                  20 FOR K=A TO 300:PSET(K,95):PRESET(K-A,95):NEXT:GOTO 20
 
-
-
-                     5.4.5.  О п е р а т о р  LINE
-
+                     V.4.5.  О п е р а т о р  LINE
 
                                                    У точек  бедных крошек,
                                                    Ни ручек нет, ни ножек.
                                                    Как же они, не пойму я,
                                                    Сцепляются в прямую?
                                                               Дж.А.Линдон
-
-
    Оператор LINE позволяет изображать  отрезки  прямых и прямоугольники с
 одновременной раскраской их требуемым цветом.
    Синтаксис оператора LINE:
-            LINE [@][[STEP](X,Y)]-[STEP](Z,T),[C][,B(или BF)]
+            LINE [@][[STEP](X,Y)]-[STEP](Z,T),[C][,B(или BF)]     ,
 где:  LINE("line"-"линия") - служебное слово;
       сочетания  параметров  (X,Y)-(Z,T)  или  STEP(X,Y)-STEP(Z,T) ,  или
 (X,Y)-STEP(Z,T), или  STEP(X,Y)-(Z,T) , или  -(Z,T) , или  -STEP(Z,T)  за-
@@ -662,34 +598,29 @@
 цветом, код которого определяется значением C;
       @ - необязательный элемент оператора LINE, никак не влияющий на его
 выполнение.
-   Обращение к оператору LINE в режимах  SCREEN0  или SCREEN1, вызовет  со-
+   Обращение к оператору LINE в режимах SCREEN 0  или SCREEN 1 вызовет со-
 общение об ошибке: "Illegal function call".
    Если параметр C отсутствует,а параметр B (или BF) присутствует,то перед
 ним обязательно ставятся  д в е  запятые. В этом случае рисунок имеет цвет,
 заданный ранее оператором COLOR.
-
    Рассмотрим три случая:
-
    1. Параметр B (или BF) отсутствует.
    В этом случае компьютер проводит на экране  линию, имеющую цвет  C и со-
 единяющую точки α и β.
    Примеры записи оператора:
      LINE(3,17)-(10,20),4       LINE STEP(3,20)-(21,23) 
      LINE -(0,15),1             LINE STEP(10,20)-STEP(15,60)
-
    П р и м е р ы:
    ─────────────
    1) NEW
       Ok
       10 SCREEN 2:FOR X=-.5 TO .5 STEP.01:Y=1/(X^2-.05):K=K+2
       40 LINE(K+25,Y+100)-(127,150):NEXT:A$=INPUT$(1)
-
    2) NEW
       Ok
       10 K=8*ATN(1):SCREEN 2:PSET(128,96+80*COS(10))
       20 FOR I=0TO K*6+.05 STEP.2:X=100*SIN(I):Y=80*COS(I+10)
       40 LINE-(128+X,96+Y),1,B:NEXT:A$=INPUT$(1)
-
    3) NEW
       Ok
       10 SCREEN2:XM=256:YM=191:XC=XM/2:YC=YM/2
@@ -698,7 +629,6 @@
       140 FOR X=XM TO 0 STEP-1:C=INT(RND(1)*16):LINE(XC,YC)-(X,YM),C:NEXT
       X:FOR Y=YM TO 0 STEP-1:C=INT(RND(1)*16):LINE(XC,YC)-(0,Y),C:NEXTY
       220 GOTO 220
-
    4) NEW
       Ok
       10'Построение линейчатых поверхностей ("ruled surface")
@@ -717,7 +647,6 @@
       ND
       370 X=120+.7*(FNX(I,J)-FNY(I,J)):Y=94-(.7*(FNX(I,J)+FNY(I,J))+.7*FN
       Z(I,J)):RETURN '──▶
-
    5) NEW
       Ok
       11 COLOR 15,4,4:SCREEN2:PI=3.14159:FORB=10TO 50 STEP 10
@@ -725,7 +654,6 @@
       5*FI)^2:X=R*COS(FI)+256/2:Y=R*SIN(FI)+191/2
       85 IF D=0THEN LINE(X,Y)-(X+1,Y+1),15 ELSE LINE-(X,Y),15
       90 NEXT:NEXT:PAINT(4,104),15:A$=INPUT$(1)
-
    Используя в операторе LINE пропуск  координат первой точки ((X,Y)  или
 STEP(X,Y)), можно "подхватить"линию с точки, где "остановился" предыдущий
 оператор, т.е.,например, связать прямые линии между собой в ломаную линию.
@@ -734,19 +662,16 @@
 сования был приостановлен! Если  же в операторе  указан параметр STEP, то
 заданные в круглых скобках координаты  прибавляются  к координатам послед-
 ней упомянутой позиции графического курсора.
-
    6) NEW
       Ok
       10 SCREEN2:PSET(115,95):GOSUB 100:END
       100 RESTORE 1000:READ N:FOR I=1 TO N:READ X,Y
       110 LINE -STEP(X,Y):NEXT:A$=INPUT$(1):END
       1000 DATA 6,35,0,23,-35,-23,-35,-35,0,-23,35,22,35
-
   "Относительный"вариант синтаксиса оператора  LINE (с использованием  па-
 раметра STEP) позволяет рисовать фигуры в "относительных" координатах. За-
 тем можно легко помещать один и  тот  же  объект в различные места экрана,
 указывая лишь его "начальную" точку!
-
    7) Программа рисования пятиугольника, разделенного на сегменты. Заданы:
 начальная точка (XB,YB), масштаб (S) и цвет (C).
       NEW
@@ -757,10 +682,8 @@
       130 LINE (XB,YB)-STEP(A*S,B*S),C:NEXT:RESTORE 170:FOR X=1 TO 5:READ
       A,B:LINE-(A*S+XB,B*S+YB),C:NEXT:RETURN'──▶
       170 DATA 10,2,6,10,-6,10,-10,-2,0,-10
-
    Подумайте, какие изменения нужно внести в программу, чтобы  на  экране
 компьютер изобразил "почти" правильный пятиугольник.
-
    8) 5 INPUT "Введите Р=2,5,7,10,13";P:SCREEN2
       10 RAD=60
       20 FOR ANG%=0 TO 360 STEP P
@@ -770,14 +693,12 @@
       85 LINE(X1,Y1)-(X2,Y2)
       90 NEXT ANG%
       100 GOTO 100
-
    9) 10 SCREEN 2:N=18:DIM X(N),Y(N):R=99:DT=2*3.1415/N:T=0
       70 FOR I=1 TO N:T=T+DT:X(I)=160+R*COS(T):Y(I)=100-R*SIN(T)
       100 NEXT
       110 FOR I=1 TO N-1:FOR J=I+1 TO N:LINE (X(I),Y(I))-(X(J),Y(J))
       140 NEXT:NEXT
       160 GOTO 160
-
   10) 170 DIM X(3),Y(3),XD(3),YD(3)
       180 SCREEN2:R=150:XL=100:YU=50:N=60
       220 X(0)=XL:X(1)=XL+R:X(2)=XL+R:X(3)=XL
@@ -791,7 +712,6 @@
       310 NEXT
       320 FOR J=0 TO 3:X(J)=XD(J):Y(J)=YD(J):NEXT:NEXT
       360 GOTO 360
-
   11) 10 DIM X(3),Y(3),XD(3),YD(3):COLOR 1,15:SCREEN2
       30 R=60:XL=10:YU=17
       50 FOR K=1 TO 2:FOR L=1 TO 3
@@ -812,23 +732,20 @@
       240 FOR J=0 TO 3:X(J)=XD(J):Y(J)=YD(J):NEXT:NEXT
       290 XL=XL+R:NEXT:XL=10:YU=YU+R:NEXT
       330 GOTO 330
-
   12) И наконец, о "перетекании цветов". Сравните результаты работы  двух
 программ:
       10 SCREEN 2                  10 SCREEN 2
       20 LINE(9,50)-(14,50),15     20 LINE(8,50)-(15,50)
       30 LINE(12,40)-(12,60),1     30 LINE(12,40)-(12,60),1
       40 GOTO 40                   40 GOTO 40
-
    2. Параметр В есть.
    В этом случае компьютер рисует прямоугольник  со сторонами цвета C, па-
-раллельными "экранным" осям координат,причем,если указаны две точки α и β,
-то они представляют собой  противоположные вершины изображаемого прямоуго-
+раллельными "экранным" осям координат, причем, если указаны две точки α и
+β, они представляют собой  противоположные вершины изображаемого прямоуго-
 льника. Внутренняя часть прямоугольника не закрашивается. Если же указана
 только вторая точка (не забудьте указать перед ней тире !), то в качестве
 первой используется точка,изображенная или упомянутая  в  Вашей программе
 последней.
-
    13) α) 10 COLOR 1,11:SCREEN 2        β) 10 COLOR 1,11:SCREEN 2
           20 LINE(8,10)-STEP(7,8),15,B     20 LINE(8,20)-STEP(3,8),15,B
           30 LINE(16,10)-STEP(7,8),1,B     30 LINE(12,20)-STEP(11,8),1,B
@@ -838,18 +755,16 @@
           30 LINE(20,30)-STEP(3,8),1,B
           40 GOTO 40
    В ы в о д: данные примеры совсем не означают, что  невозможно  создать
-многоцветные рисунки в режиме SCREEN 2. Однако, расположение элементов ри-
+многоцветные рисунки в режиме SCREEN 2. Однако  расположение элементов ри-
 сунка должно быть тщательно выверено!
    При возникновении "конфликтов" между цветом линий  и  их расположением,
 параметр BF действует  точно так же, как  и  оператор PSET: он изображает
 все "задействованные" пиксели, переустанавливает цвет изображения  сегмен-
 та, тогда как цвет фона остается неизменным.Чтобы проверить это,вернитесь
 к программе, приведенной выше и замените параметр B на BF.
-
    3. Параметр BF есть.
    Компьютер, как и в случае β,изображает на экране дисплея прямоугольник,
 но внутренняя часть его закрашивается цветом С.
-
    П р и м е р ы [4]:
    ─────────────
    14)  5 'Смещенные прямоугольники     15) 5' Вложенные прямоугольники
@@ -858,26 +773,20 @@
         30 LINE(40+7*X,30+5*X)-(130+        30 LINE(2+8*X,6+6*X)-(254-
         7*X,90+5*X),15-X,BF:NEXT            8*X,185-6*X),15-X,BF:NEXT
         50 GOTO 50                          40 GOTO 40
-
    16)  5 'Прямоугольники разных цветов
         10 COLOR 1,15,8:SCREEN2:PSET(-4,160)
         20 FOR X=0 TO15:LINE STEP(8,-130)-STEP(8,130),X,BF:NEXT
         50 GOTO 50
 
-
-
                     V.4.6.  О п е р а т о р  CIRCLE
 
-
                     "Noli turbare CIRCilos meos!", - по преданию, Архимед
                      встретил этими словами римского  солдата-завоевателя,
                      покушавшегося на его жизнь.
-
-
    С помощью этого оператора компьютер изображает  окружности,эллипсы или
 их дуги (точнее, ту их часть, которая "умещается"на экране дисплея).
    Синтаксис оператора CIRCLE:
-                  CIRCLE [@][STEP](X,Y),R,[C],[α],[β][,γ]
+                  CIRCLE [@][STEP](X,Y),R,[C],[α],[β][,γ]    ,
 где: CIRCLE("circle"-"круг,окружность") - служебное слово;
      @ - необязательный элемент оператора CIRCLE, никак  не  влияющий  на
 его выполнение;
@@ -912,7 +821,7 @@
    Заметим, что если любой из параметров α,β является отрицательным,то ис-
 пользуется его абсолютное значение; при этом соответствующий  конец  дуги
 соединяется с центром линией радиуса (это необходимо  при построении  сек-
-торных диаграмм); к сожалению компьютер  "не различает" значения  парамет-
+торных диаграмм); к сожалению, компьютер "не различает" значения  парамет-
 ров α и β,равные (-0) и 0, однако его можно "обмануть",если вместо -0 ука-
 зать, например, -0.001;
      γ - арифметическое выражение, значение которого  задает  коэффициент
@@ -927,7 +836,7 @@
    b) вертикальную полуось эллипса,   если γ>1;
    c) горизонтальную полуось эллипса, если γ<1.
    Отметим, что любой необязательный параметр  (STEP,C,α,β,γ) может  быть
-опущен - однако, соответствующие запятые в записи оператора должны  указы-
+опущен, однако  соответствующие запятые  в записи оператора должны  указы-
 вать на его отсутствие. После последнего параметра запятая не нужна.
    В результате выполнения оператора CIRCLE компьютер нарисует эллипс(или
 его дугу), после чего графический курсор переместится в точку (R,Y)! Одна-
@@ -961,20 +870,17 @@
        │  40 │-6.00│-6.28│  1  │      │  40 │  0  │ 6.28│ 0.25│
        │  40 │ -.79│-2.36│ .3  │      │ 110 │  0  │ 3.14│  1  │
        └─────┴─────┴─────┴─────┘      └─────┴─────┴─────┴─────┘
-
 2) NEW
    Ok
    10 COLOR1,15,4:SCREEN2:LINE(30,10)-(220,180),1,BF
    30 CIRCLE(125,95),75,15:FOR R=5TO70STEP5:CIRCLE(125,92.5),R,15:CIRCLE(
    125,97.5),R,15:NEXT
    100 GOTO 100
-
 3) NEW
    Ok
    10 COLOR 1,15,8:SCREEN2:PSET(0,125):FOR K=1 TO 25:CIRCLE STEP(10,0),50
    ,4,0,3.14159:NEXT:PSET(0,160):FOR K=1 TO50:CIRCLE STEP(5,0),30,4:NEXT:
    PSET(0,37):FOR K=1TO26 STEP.5:CIRCLE STEP(5,0),K,1:NEXT:A$=INPUT$(1)
-
 4) NEW                         5) NEW
    Ok                             Ok
    10 COLOR 1,15,8:SCREEN2        10 COLOR 1,15,8:SCREEN2:R=1
@@ -983,7 +889,6 @@
    ,95),80,C,,,E:NEXT             .1:Y=P*SIN(I):CIRCLE(128,Y+
    60 GOTO 60                     95),R,,,,.2
                                   60 GOTO 20
-
 6) NEW                         7) NEW
    Ok                             Ok
    5 '"Ползущий" эллипс           10 COLOR 1,15,8:SCREEN2
@@ -992,7 +897,6 @@
    CIRCLE STEP(10,0),50,4,,,.5:   30 GOTO 30
    CIRCLE STEP(0,0),50,15,,,.5:
    NEXT:GOTO20
-
 8) NEW
    Ok
    5 '"Вороне где-то бог послал кусочек сыру..."
@@ -1004,7 +908,6 @@
    20 CIRCLE(100,100),75,,-1,-1E-03,1.2
    30 CIRCLE STEP(10,-5),75,,-1E-03,-1,1.2
    50 PAINT(70,100):PAINT(130,80):B$=INPUT$(1)
-
 9) NEW                         10) NEW
    Ok                              Ok
    10 COLOR 1,15,8:SCREEN2:Q=3     10 COLOR 1,15,8:SCREEN2
@@ -1012,7 +915,6 @@
    30 CIRCLE(128,95),I             30 CIRCLE(128,95),I
    40 IF I>88 THEN 50 ELSE 20      40 IF I>88 THEN50ELSE20
    50 GOTO 50                      50 GOTO 50
-
 11) NEW
     Ok
     10 'Моделирование движения подпрыгивающего мяча [14].
@@ -1022,7 +924,6 @@
     130 LINE(0,YM)-(XM,YM):YN=YM-ABS(YN)-3:CIRCLE(X,Y),4,4:IF Y>186 THEN 
     KE=KE+2:CIRCLE(XN+10,YN),4,KE ELSE CIRCLE(XN+10,YN),4,KE
     170 X=XN+10:Y=YN:NEXT XN:GOTO 100
-
 12) NEW
     Ok
     10 COLOR 1,15,8:SCREEN2
@@ -1030,11 +931,9 @@
     30 CIRCLE(40+I*15,40+I*10),55-I*3,15-I,0,6.28:PAINT STEP(0,0),15-I
     40 NEXT
     50 GOTO 50
-
    К сожалению, оператор CIRCLE не позволяет ориентировать эллипс под  лю-
 бым углом по отношению к горизонтальной оси. Если Вы хотите отобразить та-
 кую кривую, воспользуйтесь следующим приемом:
-
    NEW
    Ok
    10 SCREEN2:PI=4*ATN(1)
@@ -1048,16 +947,15 @@
 
             V.4.7.  Ф у н к ц и я  POINT . О п е р а т о р  PAINT
 
-
    Синтаксис функции POINT:
-                             POINT [STEP](X,Y)
+                             POINT [STEP](X,Y)       ,
 где: POINT ("point"-"точка") - служебное слово;
      X - арифметическое выражение, целая часть  значения  которого принад-
 лежит отрезку [0,255] и задает x-координату  точки; Y -арифметическое  вы-
 ражение, целая часть значения которого принадлежит отрезку [0,191] и зада-
 ет y-координату точки;
-     STEP(X,Y) определяет смещение кординат точки на X и Y соответственно
-относительно текущей позиции графического курсора.
+     STEP(X,Y) определяет смещение координат точки на  X и Y соответствен-
+но относительно текущей позиции графического курсора.
    Функция  POINT в графическом режиме (SCREEN2, SCREEN3) возвращает  код
 цвета точки с координатами (X,Y),т.е. целое число, принадлежащее  отрезку
 [0,15]. На текстовом экране функция POINT всегда возвращает  н у л ь .
@@ -1074,7 +972,6 @@
    β) определения цвета границы;
    γ) определения, было ли столкновение движущегося на графическом экране
 объекта с другим объектом, также находящимся на графическом экране.
-
    П р и м е р ы:
    ───────────── 
    1) NEW
@@ -1084,10 +981,8 @@
       20 FOR K=10TO295:PSET(K,95):PRESET(K-10,95):FORI=1TO19:NEXT:IF POIN
       T(150,95)=1 THEN FORI=1TO1000:NEXT:SCREEN0:LOCATE 11,12:PRINT"Столк
       новение":END ELSE NEXT
-
    А теперь замените в условии оператора  IF...THEN...ELSE  POINT(150,95)
 на POINT(149,95)... Заметили разницу?!
-
    2) NEW
       Ok
       10 COLOR 1,15,8:SCREEN 3
@@ -1098,7 +993,6 @@
       OR I=1 TO 1000:NEXT:GOTO 10
       100 LOCATE 9,12:PRINT"Черных точек нет!":RETURN
       110 LOCATE 9,12:PRINT"Черные точки есть!":RETURN
-
    3) Для закраски точки (X,Y) примените следующий прием: 
                             PSET(X,Y),POINT(U,V)
 где точка (U,V) принадлежит  ф о н у! Другой способ закраски точки на гра-
@@ -1161,7 +1055,6 @@
 ляется частью "глубоко" вложенных друг в друга циклов FOR...NEXT  или под-
 программ, или же если контур, ограничивающий закрашиваемую область, имеет
 достаточно сложную форму.
-
    П р и м е р ы:   
    ───────────── 
    1) NEW                        2) NEW
@@ -1173,7 +1066,6 @@
       40 PAINT(128,95),15-K         40 PAINT(128,95),15-K
       50 NEXT                       50 NEXT
       60 GOTO 60                    60 GOTO 60
-
    3) NEW                        4) NEW
       Ok                            Ok
       10 COLOR 1,15,8:SCREEN3       10 SCREEN2
@@ -1181,10 +1073,8 @@
       (128,95),127-8*K,K,,,.7:      30 PAINT STEP(0,0),10
       PAINT(128,95),15-K,K:NEXT     40 GOTO 40
       60 GOTO 60
-
    5) 10 COLOR 1,10,4:SCREEN2:FOR I=20 TO 110 STEP 10:CIRCLE(I+128,95),80
      ,1:PAINT(1.85*I,I+1),1:NEXT:A$=INPUT$(1)
-
    6) Ok
       10 COLOR1,15,8:SCREEN2
       20 CIRCLE(95,60),20,1,-.01,-4.7124,1.1:PAINT(85,55),1:CIRCLE(95,125
@@ -1194,21 +1084,17 @@
 
            V.4.8.  В ы в о д  р и с у н к о в  на  п р и н т е р
 
-
-         ...Вы печатаете  на  клавиатуре  заклинание, и вот экран дисплея 
-         оживает, показывая объекты, которых не было и не  может быть  ни-
-         когда.                                                 Ф.П.Брукс
-         Твердая копия - зафиксированное на бумажном носителе изображение
-         на экране дисплея.
-            Толковый словарь по вычислительной технике и программированию
-
+                                 ...Вы печатаете на клавиатуре заклинание,
+                                 и вот  экран  дисплея оживает, показывая
+                                 объекты, которых не было и не может быть
+                                 никогда. 
+                                                                  Ф.Брукс
 
    А сейчас мы научим Вас выводить на печатающее устройство (принтер)  ри-
 сунки, изображенные компьютером на экране дисплея. Для  этого  используем
 вспомогательную подпрограмму, записанную в двоичных кодах, загрузка  кото-
 рой в оперативную память компьютера осуществляется подпрограммой с именем
 HARDCOPY.BAS .  
-
    П р и м е р 1 [14]. Восстановим облик  хищного тираннозавра (ящера-раз-
    ─────────────────   бойника),  жившего в мезозойскую эру  (он достигал
 высоты 5 м, длины 14 м).
@@ -1263,19 +1149,17 @@
    55180 DATA FE,FF,C8,CD,A5,00,23,18,F6,1B,54,31
    55190 DATA 36,1B,45,1B,3E,0E,FF,1B,53,30,32,35
    55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
-   П р и м е р 2.                        Лучше гор могут быть только горы.
-   ─────────────                                               В.Высоцкий
-
+   П р и м е р 2. "Лучше гор могут быть только горы" (В.Высоцкий).
+   ─────────────
    Л.Карпентер и независимо от него  А.Фурнье и  Д.Фассел изобрели  метод
 "ф р а к т а л е й"("fractal"), в котором неправильность естественных объ-
 ектов (линия берега,горы и т.д.) имитируется компьютером за счет внесения
 случайных вариаций в представленный художником рисунок, делая  гладкие ли-
-нии изломанными и т.п. Методом фракталей удается получать на удивление ре-
-алистические горы, долины, с раскиданными по ним валунами,береговые линии,
-скопления звезд, цветные географические карты, хлопья снега, ветви деревь-
-ев и т.д., а художнику остается лишь задать  небольшое  количество  точек.
-Алгоритм метода изложен в монографии [15].
+нии изломанными и т.п. Методом "фракталей" удается получать  на удивление
+реалистические горы, долины, с раскиданными по ним валунами, береговые ли-
+нии, скопления звезд, цветные географические  карты, хлопья  снега, ветви
+деревьев и т.д., а художнику остается лишь задать небольшое количество то-
+чек. Алгоритм метода изложен в монографии [15].
    В пространстве берется некоторый исходный треугольник и над  ним выпол-
 няется следующая процедура. Находятся средние точки всех сторон  треуголь-
 ника и переносятся (не обязательно в одной плоскости)  на расстояние, про-
@@ -1321,7 +1205,6 @@
    55060 DATA 21,00,20,22,AC,EF,21,91,EF,CD,87
     ···             ···              ···
    55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
    Заметим, что вместо треугольников в алгоритме могут рассматриваться  и
 четырехугольники, при этом процедура деления лишь незначительно изменится.
 Разбиение четырехугольника показано на рисунке:
@@ -1333,8 +1216,8 @@
          │                                                   │
          │                                                   │
          │                                                   │
-         │                                                   │  Р и с. 2
          └───────────────────────────────────────────────────┘
+                               Р и с. 4
    Четыре ребра первоначального (закрашенного) четырехугольника разбивают-
 ся с применением случайной функции, в результате чего вычисляются  коорди-
 наты точек P1, P2, P3 и P4. С помощью этих точек, а также  случайной функ-
@@ -1342,7 +1225,6 @@
    Таким образом, из начальной аппроксимации получается множество четырех-
 угольников. Наконец, производится удаление скрытых поверхностей и применя-
 ется соответствующая модель закраски.
-
    П р и м е р 3 [14].
    ─────────────
    NEW
@@ -1377,10 +1259,9 @@
    55060 DATA 21,00,20,22,AC,EF,21,91,EF,CD,87
            ···               ···
    55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
-   П р и м е р 4.  Для написания данного алгоритма требуются  знание мате-
-   ─────────────   матики в объеме средней школы.
-   NEW                              Фраза из учебника по программированию
+   П р и м е р 4.
+   ─────────────
+   NEW
    Ok
    2  DIM G(2000) 'Программа построения поверхностей!
    4    DEFFNZ(X,Y)=(60^(2/3)-(X^2+Y^2)^(1/3))^(3/2)         'L=0
@@ -1433,9 +1314,8 @@
    55060 DATA 21,00,20,22,AC,EF,21,91,EF,CD,87
          ···            ···            ···
    55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
-   П р и м е р 5 [16].                       Рисуют головой, а не руками.
-   ─────────────                                Микельанджело Буонарроти
+   П р и м е р 5 [16].  "Рисуют головой, а не руками" (Б.Микельанджело).
+   ─────────────
    NEW
    Ok
    15 COLOR 1,15,8:CLS:PRINT"Для вывода полученного графика на принтер на
@@ -1481,7 +1361,7 @@
     ···              ···              ···
    1030 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
 
-   П р и м е р 6.  Обратите внимание на подпрограмму  вывода  на принтер
+   П р и м е р 6.  Обратите внимание на подпрограмму вывода  на принтер -
    ─────────────   она написана на "чистом" MSX-BASIC !
    NEW
    Ok
@@ -1539,12 +1419,11 @@
 
                      V.5.  ГРАФИЧЕСКИЙ МАКРОЯЗЫК GML
 
-
    В MSX-BASIC входит оператор DRAW, который позволяет изображать на экра-
 не дисплея рисунки, составленные из различных комбинаций прямых линий. На-
 чиная с последней высвеченной на экране точки, с помощью  оператора  DRAW
 можно провести линию любой длины и в любом из  8 заданных направлений (см.
-рис.2). После этого можно провести еще одну линию, снова любой длины и  в
+рис.5). После этого можно провести еще одну линию, снова любой длины и  в
 любом из тех же восьми направлений и т.д. Каждая  проводимая  линия может
 быть окрашена в любой из 15 допустимых цветов. Кроме того,можно проводить
 отрезок, соединяющий текущую точку с любой  точкой, заданной  абсолютными
@@ -1553,13 +1432,12 @@
    Оператор DRAW - мощный оператор, являющийся по существу настоящим мини
 -языком в MSX-BASIC. Этот язык  называется  графическим  м а к р о я з ы -
 к о м  GML("Graphics Macro Language").
-   Записывается оператор в виде
-                                   DRAW β
+   Записывается оператор в виде:  DRAW β          ,
 где:  DRAW("to draw"-"рисовать") - служебное слово;
       β - строковое выражение, значение которого определяет рисунок.
    Значение β составляется из последовательности команд GML. Обратите вни-
 мание на то, что значение параметра β всегда заключено в кавычки, посколь-
-ку это обычная строка MSX-BASICa, состоящая из команд языка GML, констант
+ку это обычная строка MSX-BASIC, состоящая  из команд языка GML, констант
 и строковых переменных. Длина β не должна превышать 255 символов.Для удоб-
 ства чтения текста программы команды можно разделять пробелами. Каждая ко-
 манда GML представлена одиночной ключевой буквой, за которой следует один
@@ -1571,7 +1449,7 @@
     Ключевая буква Аргумент       Ключевая буква Аргументы
    Команды GML в основном предназначены для перемещения графического  кур-
 сора из одних точек экрана в другие с одновременным вычерчиванием соединя-
-ющих их отрезков. Однако, они могут модифицироваться следующим образом.
+ющих их отрезков. Однако они могут модифицироваться следующим образом.
    1. Перед командой перемещения ставится п р е ф и к с (приставка) B.Тог-
 да положение курсора изменяется, но линия не рисуется.
    2. Перед командой перемещения ставится префикс N.Тогда курсор возвраща-
@@ -1581,7 +1459,6 @@
    α) какова текущая позиция графического курсора;
    β) в какую позицию Вы собираетесь его перевести;
    γ) хотите ли Вы провести линию при его перемещении.
-
    1. Команда перемещения βn служит для перемещения  графического курсора
 по направлению β с рисованием прямой линии.
    Здесь:  β - указатель одного из 8 возможных направлений: β ∈ {R,E,U,H,
@@ -1592,8 +1469,9 @@
             "Left"-"левый"              \ │ ╱
            "Right"-"правый"          L◀──   ──▶ R
                                         ╱ │ \
-                                      G   ▼   F                Рис.3
-            "Down"-"вниз"                 D                    ─────
+                                      G   ▼   F
+            "Down"-"вниз"                 D
+                               Р и с. 5 
        n - целое положительное число, задающее величину смещения  курсора
 (выраженную в точках экрана).
    При выполнении команды  курсор смещается от своего  текущего положения
@@ -1602,11 +1480,9 @@
 последней упомянутой точки на 10 точек влево, на 10 точек вверх, на 10 то-
 чек вправо и на 10 точек вниз, т.е.квадрат(интересно, что диагональ данно-
 го квадрата - также 10 точек).
-
    П р и м е р.  10 COLOR 1,15,8:SCREEN 2:PSET(80,100)
    ───────────   20 DRAW"c13 s12 u10 e10 r10 f10 d10 g10 l10 h10"
                  30 GOTO 30
-
    2.  Команда перемещения  MX,Y ("to Move"-"двигаться")позволяет перемес-
 тить курсор из текущего положения в точку с координатами (X,Y). Здесь X,Y
 - абсолютные координаты.
@@ -1614,7 +1490,6 @@
 ку (160,100), оставляя при этом след в виде  закрашенных  точек. Оператор
 DRAW"BM160,100" перемещает графический курсор в ту же позицию  (160,100),
 но префикс B делает это перемещение невидимым!
-
    П р и м е р [6].  Изображение картины взрыва. 
    ───────────
    5 COLOR 1,15,4:SCREEN2:LINE(105,65)-(225,146),1,BF
@@ -1623,7 +1498,6 @@
    160,124m166,139m172,124m196,145m184,121m223,133m193,115m217,109m196,10
    6m205,97m187,97m190,82"
    20 PAINT(130,100),8:A$=INPUT$(1)
-
    3.  Команда перемещения М±X,±Y служит для смещения курсора из текущего
 положения на ±Х точек по абсциссе и ±Y точек по ординате (разумеется, ука-
 зание знака "+" или "-"обязательно!). Здесь  ±X,±Y - относительные коорди-
@@ -1633,29 +1507,26 @@
 на 10 точек влево и на 40 точек вниз, с рисованием прямой линии.
    Отметим,что команда M±X,Y действует точно так же,как команда M±X,+Y ,а
 команда MX,+Y действует как команда MX,Y.
+
    Например, оператор  DRAW"M-10,40"  перемещает графический курсор из по-
 следней упомянутой в Вашей программе точки на 10 точек влево и на 40 вниз,
 т.е. его действие совпадает с действием оператора DRAW"M-10,+40".
-
    П р и м е р. Ok
    ───────────  10 COLOR 1,15,8:SCREEN 2:PSET(100,85)
                 20 DRAW"a1 s12 c13 nu10 ne10 nr10 nf10 nd10 ng10 nl10 h10
                 m+0,30 a2": PSET (190,95):DRAW"s8 c13 nu10 ne10 nr10 nf10
                 nd10 ng10 nl10 h10 m+0,30"
                 30 GOTO 30
-
    4.  Команда Cp ("Color"-"цвет") позволяет  определить  цвет вычерчивае-
 мых отрезков (p=0,1,2,...,15 - код цвета). Действует команда до нового на-
 значения цвета (по умолчанию p - код цвета изображения). Отметим,что зада-
 ние цвета командой C в операторе DRAW не меняет цвет остальной части  изо-
 бражения!
-
    5.  Команда Sm("Size"-"размер")задает масштабный множитель m,(1≤m≤255).
 При выполнении команды Sm числовые параметры всех последующих команд пере-
 мещения приобретают масштабный множитель m/4 (например, при  m=8  m/4=2).
 Действует команда Sm на все команды DRAW, не содержащие префикса  "B", до
 нового назначения.
-
    6.  Команда At ("Angle"-"угол") служит для поворота изображения вокруг
 точки, с которой начиналось рисование, на  90·t° против  часовой  стрелки
 (t может принимать значения 0,1,2,3).Действует команда At на все последую-
@@ -1695,22 +1566,18 @@
    60 GOTO 60
    Запомните,что при переходе в другой графический режим координаты графи-
 ческого курсора,масштаб,угол поворота и цвет изображения остаются прежними.
-
    П р и м е р ы.
-   ─────────────
    1) Ok
       5 '"Цветок".
       10 COLOR 1,15,8:SCREEN 2:FOR K=0 TO 3:L=4*K
       30 DRAW"a=k; s4 c13 bm128,85 e10 r10 f10 d10 g10 l10 h10 u10":NEXT:
       A$=INPUT$(1)
-
    2) Ok
       5 '"Паркет".
       10 COLOR 1,15,8:SCREEN 2
       20 FOR J=25 TO 160 STEP 40:FOR I=18 TO 180 STEP 40
       40 DRAW"s8 bm=i;,=j; e10 r10 f10 d10 g10 l10 h10 u10"
       50 NEXTI,J:A$=INPUT$(1)
-
    3) Ok
       10 '"Акробаты"
       20 CLS:INPUT"Введите 0,1,2 или 3";T:IF T<>0 AND T<>1 AND T<>2 AND T
@@ -1723,7 +1590,6 @@
       1c1d3c15d1c1r2l5c15e3r6u2c1d5g3l8g2d3l5g8u18l5d30e15d25r15l15g15d18
       l3d2"
       90 IF X<O THEN X=X+73:GOTO 80 ELSE W$=INPUT$(1):GOTO 20
-
    4) Ok
       10 CLS:COLOR 1,15,8:SCREEN 2 '"Блоха"
       30 BDY$="BM=H;,=V; L20 U20 R20 D20 F10 D10 R2"
@@ -1735,7 +1601,6 @@
       280 DRAW "XA2$;":H=H-10:DRAW "XNECK$;":H=H-5:V=V-4
       320 DRAW "XHEAD$;":V=V-3:DRAW "XF1$;":H=H+7:DRAW "XF2$;"
       370 GOTO 370
-
    5) Цифры "нестандартных" размеров на графическом экране.
       Ok
       5 INPUT"Масштаб";I:J=INT(I)*4 '0≤I≤5
@@ -1745,7 +1610,6 @@
       60 DRAW"nr2d2r2d2l2be4":DRAW"br2nr2d4r2u2l2be4"
       80 DRAW"bf2r2d1g1d2be4":DRAW"bf1e1r1f1g1l1h1f1g1f1r1e1h
       1be4":DRAW"bd2nr2d2r2nu2d2l2":B$=INPUT$(1)
-
    6) Рисунок черного и белого домов [1]. 
       Ok
       10 COLOR,5:SCREEN2:BOX$="R20 U20 L20 D20":HAT$="E14 F14 BL20":DO$="
@@ -1753,7 +1617,6 @@
       ,-5 XWINDOW$;BM-18,-12 XHAT$;"
       20 DRAW"BM20,20 C1 S2 XHOUSE$;BM100,100 S6 C15 XHOUSE$;"
       30 GOTO 30
-
    7) Ok
       10 CLS:KEYOFF:COLOR 1,15,8:SCREEN2:PSET(125,95)
       40 HX$="u25 e15 r25 d25 g15 l25" 'Исходный шестиугольник
@@ -1763,7 +1626,6 @@
       ":DRAW SHAPE$:NEXT ROTATE:NEXT SCALE
       160 Z$=INPUT$(1)'Ожидание нажатия любой(!) клавиши для окончания ра
       боты. Данный пример приведен в [6].
-
    В процессе работы эта программа выводит на экран дисплея один и тот же
 шестиугольник, изменяя с помощью команды A угол его поворота,с помощью ко-
 манды C его цвет, а с помощью команды S - размер. В программе  иллюстриру-
@@ -1789,9 +1651,8 @@
    На экране дисплея - "окружность"! Укажите ее "радиус"?! 
    Заметим, что команды GML как и операторы графики "работают"в воображае-
 мом пространстве, координаты которого  принадлежат отрезку [-32768,32767].
-Однако, на экране дисплея будет видна только та часть рисунка,для которой
+Однако на экране дисплея будет видна только та часть рисунка, для которой
 0≤X≤255 и 0≤Y≤191.
-
    П р и м е р. Как уже говорилось, командная строка,вызванная командой X,
    ───────────  может сама содержать команды X. Используем этот факт  для
 создания нестандартного, собственного "алфавита" [4].Значение каждого эле-
@@ -1813,12 +1674,11 @@
 
                             V.6.  СПРАЙТЫ
 
-
-    Мультипликация является единственным подлинным искусством в настоящее
-    время,потому что в ней, и только в ней, художник абсолютно свободен в
-    своей фантазии и может делать все, что угодно.              Ч. Чаплин
-
-
+                           Мультипликация является единственным подлинным
+                           искусством в настоящее время, потому что в ней,
+                           и только в ней, художник абсолютно  свободен в
+                           своей фантазии и может делать все, что угодно. 
+                                                                Ч. Чаплин
    "Оживление" изображения при мультипликации основано  на  использовании
 набора обычных "неподвижных" картинок,каждая последующая из которых очень
 незначительно отличается от предыдущей.Если последовательно просматривать
@@ -1841,11 +1701,10 @@
 положения при предыдущем выводе, иначе вместо плавного  перемещения будет
 лишь видно, как изображение объекта исчезнет в одном месте,а затем появля-
 ется в другом.Эту идею нетрудно реализовать с помощью циклической програм-
-мы, использующей рассмотренные  нами ранее графические операторы.  Однако,
+мы, использующей рассмотренные  нами ранее графические операторы.  Однако
 для того, чтобы движение изображения не было "дергающимся",отдельные  кад-
 ры должны очень быстро сменять друг друга. Используя только базовые опера-
 торы графики, это требование выполнить очень трудно. Смотрите!
-
    П р и м е р [14].  Бегущий человечек.
    ───────────
    NEW
@@ -1896,36 +1755,31 @@
    720 DATA 2,132,25,136,40,93,43,150,50,130,30,120
    730 DATA 30,111,22,103,38,95,43,110,58,104,40,83
    740 XO=0:X2=0:GOTO 120
-
 Убедились?В связи с этим в язык MSX-BASIC включены дополнительные сред-
 ства вывода на экран графической информации - с п р а й т ы.
 
 
-
      V.6.1.  Ф о р м и р о в а н и е  з н а ч е н и я  с п р а й т а
 
-
                   Э л ь ф ы - в германских народных поверьях духи природы,
                   населяющие воздух,землю,горы,леса,жилища людей и обычно
-                  благожелательные людям.
+                  благожелательные к людям.
                                       Советский Энциклопедический Словарь
-
-
    В MSX-BASIC используются специальные нумерованные строковые переменные,
 называемые с п р а й т а м и.
    Для записи  и м е н и  спрайта используется псевдопеременная SPRITE$(),
 синтаксис которой:
-                               SPRITE$(n)
+                               SPRITE$(n)      ,
 где:  SPRITE("sprite"-"эльф") - служебное слово;
       n - арифметическое выражение, целая часть значения которого  опреде-
 ляет номер спрайта.
 
    Рассмотрим семантику оператора присваивания
-                              SPRITE$(n)=β                            (∗)
+                              SPRITE$(n)=β     ,                      (∗)
 где  β - строковое выражение.
    В дальнейшем вместо фразы "длина значения спрайта"мы будем употреблять
 фразу  "д л и н а  с п р а й т а".
-   При выполнении (∗), значение β выравнивается, если это требуется,до на-
+   При выполнении (∗)  значение β выравнивается, если это требуется,до на-
 ибольшей длины спрайта за счет отбрасывания его лишних правых байтов  или,
 наоборот,за счет добавления справа необходимого количества нулевых байтов
 (00000000). Полученное значение присваивается спрайту с заданным  номером.
@@ -1936,7 +1790,7 @@
 ти, называемое  с п р а й т о в о й  областью и имеющее объем  2Кб (напом-
 ним, что 1Кб = 1024 байтам).
    Оператор присваивания 
-                               A=SPRITE$(n)
+                               A=SPRITE$(n)    ,
 где: A - строковая переменная или элемент строкового массива;
      n - арифметическое выражение, целая часть  значения которого  опреде-
 ляет номер спрайта; позволяет при недостатке строкового пространства  хра-
@@ -1945,18 +1799,14 @@
    Думаем,  что теперь Вам совершенно ясен семантический смысл,  например,
 конструкции вида:         SPRITE$(12)=SPRITE$(7)    !
 
-
-
               V.6.2.  В ы в о д  с п р а й т а  на  э к р а н
 
-
                                                        Intelligenti pausa 
-                                                           Лат. поговорка
-
-
+                                                      Латинская поговорка
    Значения спрайтов можно выводить на экран SCREEN1 при помощи "тривиаль-
 ного" оператора PRINT.
 
+
    П р и м е р 1.  
    ─────────────
    10 SCREEN1'Но не SCREEN0!    10 SCREEN1'Но не SCREEN0!
@@ -1968,17 +1818,21 @@
 
    Можно, конечно, выводить значение спрайта и в режиме SCREEN 0. Но для
 этого его значение нужно вначале определить в режиме SCREEN 1!
+
    Однако, обычно, выводятся не сами значения спрайтов,а некоторые геомет-
 рические образы, порождаемые специальной двоичной интерпретацией этих зна-
 чений. Вначале опишем форму представления значений спрайтов при выводе на
 экран дисплея.
+
    Пусть длина спрайта ≤8 байтам. Расположим его двоичное значение в виде
 "квадрата" размером 8╳8 следующим образом: в первой строке - 1-й байт, во
 второй строке - 2-й байт и т.д.
+
    Значению спрайта сопоставим геометрический образ на экране,выделив там
 б л о к  из 8╳8 точек и раскрасив одним и тем же цветом все его точки, ко-
 торым соответствует бит "1", и не изменив цвета других точек.
 
+
    П р и м е р 2.
    ─────────────
    NEW                      ┌───────────────┐   
@@ -1999,6 +1853,10 @@
    Ok
 
 
+
+
+
+
    П р и м е р 3.
    ─────────────
     Что мы желаем       Процесс кодирования образа спрайта
@@ -2018,7 +1876,294 @@
                    │ │ │ │█│█│ │ │ │  └─┴─┴─┴─┘  └─┴─┴─┴─┘
                    ├─┼─┼─┼─┼─┼─┼─┼─┤  ┌─┬─┬─┬─┐  ┌─┬─┬─┬─┐
                    │ │ │ │█│█│ │ │ │  │ │ │ │█│  │█│ │ │ │──▶ &H18
-                   └─┴─┴─┴─┴─┴─┴─┴─┘  └─┴─┴─┴─┘  └─┴─┴─┴─┘
+                   └─┴─┴─┴─┴─┴─┴─┴─┘  └─┴─┴─┴─┘  └─┴─┴─┴─┘   ▲ ▲ ▲
+   Происхождение  этих непонятных (пока!) символов  ─────────┘─┘─┘   разъ-
+ясняет следующая таблица:                 
+                 Рисунок  Шестнадцатеричный код  Рисунок 
+                 ───────  ─────────────────────  ───────
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │ │ │ │ ──▶ 0           8 ◀── │█│ │ │ │
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │ │ │█│ ──▶ 1           9 ◀── │█│ │ │█│
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │ │█│ │ ──▶ 2           A ◀── │█│ │█│ │
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │ │█│█│ ──▶ 3           B ◀── │█│ │█│█│
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │█│ │ │ ──▶ 4           C ◀── │█│█│ │ │
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │█│ │█│ ──▶ 5           D ◀── │█│█│ │█│
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │█│█│ │ ──▶ 6           E ◀── │█│█│█│ │
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+                ┌─┬─┬─┬─┐                       ┌─┬─┬─┬─┐
+                │ │█│█│█│ ──▶ 7           F ◀── │█│█│█│█│
+                └─┴─┴─┴─┘                       └─┴─┴─┴─┘
+   Думаем, что самое время напомнить Вам, что перед шестнадцатеричным чис-
+лом в языке MSX-BASIC употребляется префикс &H !
+   И, наконец, завершающий этап! Определим образ спрайта:
+       SPRITE$(1)=CHR$(&H18)+CHR$(&H3C)+CHR$(&H7E)+CHR$(&HFF)+
+                  CHR$(&H18)+CHR$(&H18)+CHR$(&H18)+CHR$(&H18)
+   Пусть теперь длина спрайта не превосходит 32 байтов.Расположим его дво-
+ичное значение в виде квадрата 16╳16 в двa столбца по 16 байтов в столбце
+так, как это показано в следующем примере. Тем же способом,  что и раньше,
+этому значению сопоставим на экране некоторый блок из 16╳16 точек и в нем
+конкретный геометрический образ.
+   П р и м е р 4.
+   ─────────────
+  NEW
+  Ok
+  10 SCREEN1,2:SPRITE$(255)=" Никто не обнимет необъятного!  "
+  15 FOR I=1 TO LEN(SPRITE$(255))-16
+  20 PRINT RIGHT$("00000000"+BIN$(ASC(MID$(SPRITE$(255),I   ,1))),8)" ";
+           RIGHT$("00000000"+BIN$(ASC(MID$(SPRITE$(255),I+16,1))),8):NEXT
+  run                         ┌──────────┬───┬───┬───────────┐
+  00100000 11010100           │ 1-й байт │   │ т │ 17-й байт │
+  11101110 00100000           │ 2-й байт │ Н │   │ 18-й байт │
+  11001001 11001110           │ 3-й байт │ и │ н │ 19-й байт │
+  11001011 11000101           │ 4-й байт │ к │ е │ 20-й байт │
+  11010100 11001111           │ 5-й байт │ т │ о │ 21-й байт │
+  11001111 11000010           │ 6-й байт │ о │ б │ 22-й байт │
+  00100000 11011111           │ 7-й байт │   │ ъ │ 23-й байт │
+  11001110 11010001           │ 8-й байт │ н │ я │ 24-й байт │
+  11000101 11010100           │ 9-й байт │ е │ т │ 25-й байт │
+  00100000 11001110           │10-й байт │   │ н │ 26-й байт │
+  11001111 11001111           │11-й байт │ о │ о │ 27-й байт │
+  11000010 11000111           │12-й байт │ б │ г │ 28-й байт │
+  11001110 11001111           │13-й байт │ н │ о │ 29-й байт │
+  11001001 00100001           │14-й байт │ и │ ! │ 30-й байт │
+  11001101 00100000           │15-й байт │ м │   │ 31-й байт │
+  11000101 00100000           │16-й байт │ е │   │ 32-й байт │
+  Ok                          └──────────┴───┴───┴───────────┘
+                    █      ██ █ █
+                  ███ ███    █      
+                  ██  █  █ ██  ███  
+                  ██  █ ██ ██   █ █         Образ спрайта на экране
+                  ██ █ █   ██  ████                  дисплея
+                  ██  ████ ██    █  
+                    █      ██ █████ 
+                  ██  ███  ██ █   █ 
+                  ██   █ █ ██ █ █   
+                    █      ██  ███  
+                  ██  ████ ██  ████ 
+                  ██    █  ██   ███ 
+                  ██  ███  ██  ████ 
+                  ██  █  █   █    █ 
+                  ██  ██ █   █      
+                  ██   █ █   █      
+   Блок размером 16╳16 рассматривается как  совокупность  четырех  блоков,
+каждый из которых имеет размер 8╳8. Эти блоки объединяются вместе в после-
+довательности, указанной на рисунке:
+                              8
+                         │◀───────▶│  
+                      ─▲─┌─────────┬──────────┐─▲─
+                       │ │         │          │ │
+                      8│ │    1    │     3    │ │
+                       │ │         │          │ │
+                      ─▼─├─────────┼──────────┤ │ 16
+                         │         │          │ │
+                         │    2    │     4    │ │
+                         │         │          │ │
+                         └─────────┴──────────┘─▼─
+                                 Р и с. 6
+
+   П р и м е р 5.
+   ─────────────
+   ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ Что мы желаем впоследствии увидеть 
+   │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ на экране дисплея!
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │ │ │ │ │ │ │ │ │ │█│█│ │ │                      ██
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤              █████  ███
+   │ │ │ │ │█│█│█│█│█│ │ │█│█│█│ │ │             ██   ████ █
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤            ██ █   ██  █
+   │ │ │ │█│█│ │ │ │█│█│█│█│ │█│ │ │            ██ █   █  █
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤          ███       ███ █
+   │ │ │█│█│ │█│ │ │ │█│█│ │ │█│ │ │          ██     █████  ██
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤           ██  █████   ███
+   │ │ │█│█│ │█│ │ │ │█│ │ │█│ │ │ │             ████ ███  ███
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤                 █████ ███
+   │█│█│█│ │ │ │ │ │ │ │█│█│█│ │█│ │              █ ███ ██  █
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤              ██ █ ████ █
+   │█│█│ │ │ │ │ │█│█│█│█│█│ │ │█│█│             █ ██ ██████
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤             █████  ███
+   │ │█│█│ │ │█│█│█│█│█│ │ │ │█│█│█│              ███  ███
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │█│█│█│█│ │█│█│█│ │ │█│█│█│
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │ │ │ │ │█│█│█│█│█│ │█│█│█│
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │ │█│ │█│█│█│ │█│█│ │ │█│ │
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │ │█│█│ │█│ │█│█│█│█│ │█│ │
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │█│ │█│█│ │█│█│█│█│█│█│ │ │
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │█│█│█│█│█│ │ │█│█│█│ │ │ │
+   ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+   │ │ │ │ │█│█│█│ │ │█│█│█│ │ │ │ │
+   └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
+   Завершающий этап! Определение образа спрайта:                 
+  30 X$=CHR$(&H0) +CHR$(&H0) +CHR$(&HF) +CHR$(&H18)+
+        CHR$(&H34)+CHR$(&H34)+CHR$(&HE0)+CHR$(&HC1)
+  40 Y$=CHR$(&H67)+CHR$(&H1E)+CHR$(&H1) +CHR$(&HB)+
+        CHR$(&HD) +CHR$(&H16)+CHR$(&H1F)+CHR$(&HE)
+  50 Z$=CHR$(&H0) +CHR$(&HC) +CHR$(&H9C)+CHR$(&HF4)+
+        CHR$(&H64)+CHR$(&H48)+CHR$(&HCA)+CHR$(&HF3)
+  60 W$=CHR$(&HC7)+CHR$(&HE7)+CHR$(&HF7)+CHR$(&HB2)+
+        CHR$(&H7A)+CHR$(&HFC)+CHR$(&H38)+CHR$(&H70)
+  70 SPRITE$(1)=X$+Y$+Z$+W$
+   Отметим,что размер спрайтов определяется оператором
+                               SCREEN [n][,s]     ,
+где:  n - арифметическое выражение, целая часть значения  которого принад-
+лежит отрезку [0,3] и указывает режим экрана;
+      s - арифметическое выражение, целая часть значения  которого принад-
+лежит [0,3] и определяет размеры спрайтов.
+   Возможны следующие случаи:
+   s=0: спрайты длиной 8 байтов, занимающие 8╳8 точек экрана;
+   s=1: спрайты длиной 8 байтов, такие же как и при s=0, но с двухкратным
+увеличением размеров по обоим направлениям и занимающие поэтому  16╳16 то-
+чек экрана;
+   s=2: спрайты длиной 32 байта,занимающие 16╳16 точек экрана;
+   s=3: спрайты длиной 32 байта, такие же,как и при s=2, но с двухкратным
+увеличением размеров по обоим направлениям и занимающие поэтому 32╳32 точ-
+ки экрана.
+   З а м е ч а н и я.
+   ┌─────────────────────────────────────────────────────────────────┐
+   │  1) Оператор SCREEN ,s не очищает экран, однако  с т и р а е т  │
+   │     образы спрайтов из памяти компьютера.                       │
+   │  2) Оператор  SCREEN n  очищает экран  б е з  с т и р а н и я   │
+   │     образов спрайтов из памяти компьютера.                      │
+   └─────────────────────────────────────────────────────────────────┘
+   Опишем синтаксис и семантику оператора, служащего для вывода на экраны
+1,2 и 3 образов спрайтов (коротко - с п р а й т о в):
+                  PUT SPRITE t,[[@][STEP](X,Y)],[C][,n]    ,
+где: PUT("to put"-"выводить"), SPRITE - служебные слова;
+     t - арифметическое выражение, целая часть значения  которого  должна
+принадлежать отрезку [0,31]; она задает "экранный" номер спрайта ("sprite
+plane namber");
+     n - арифметическое выражение, целая часть  значения  которого опреде-
+ляет номер одного из сформированных в оперативной памяти спрайтов,  образ
+которого выведен на экран под номером t ("sprite pattern number").По умол-
+чанию значение  n  совпадает со значением t;
+     (X,Y) или STEP(X,Y) - элементы, определяющие координаты  верхнего ле-
+вого угла блока точек на экране, в котором размещается образ спрайта, при-
+чем элементы (X,Y) и  STEP(X,Y) могут задавать точку  (X0,Y0) с  координа-
+тами, удовлетворяющими условиям -32768 ≤X0,Y0≤ 32767. Однако в отличие от
+других графических операторов для спрайтов характерен  неприятный  эффект
+"свертывания" изображения на экране, который состоит в том, что, если  мы
+попытаемся высветить спрайт за правой границей экрана, то этот спрайт  вы-
+светится с левой стороны экрана,т.е. компьютер вычисляет координаты спрай-
+та (X,Y) по формулам:
+     X=INT(ABS(X0)MOD255), Y=INT(ABS(Y0)MOD191) (для экрана SCREEN2);
+   Заметим, что координата Y спрайта  с д в и н у т а  на одну позицию,то
+есть для изображения спрайта, левый верхний угол которого  будет иметь ко-
+ординаты (X,Y), необходимо использовать оператор:
+                       PUT SPRITE t,(X,Y-1),C,n
+     5) C - арифметическое выражение,целая часть значения которого принад-
+лежит отрезку [0,15] и определяет цвет спрайта;
+     6) @ - необязательный элемент оператора PUT SPRITE,никак не влияющий
+на его выполнение.
+   Отметим, что только t является необходимым аргументом, остальные могут
+быть опущены.
+   При выполнении оператора PUT SPRITE спрайт с номером n получает "экран-
+ный" номер t и размещается с позиции, определяемой элементами  (X,Y)  или
+STEP(X,Y), причем  точки, соответствующие его единичным битам, раскрашива-
+ются цветом C. 
+   Обратите  о с о б о е  внимание на следующий пример!
+   П р и м е р 6. Формирование  образа  спрайта с помощью  оператора DATA.
+   ─────────────  Следующие три программы формируют и выводят на экран об-
+раз одного и того же спрайта!
+α) NEW                              β) NEW
+   Ok                                  Ok
+   10 COLOR 1,15,8:SCREEN 2,1          10 COLOR 1,15,8:SCREEN 2,1
+   15 DATA 11000000                    20 Y$="алгоритм"
+   20 DATA 11001100                    130 SPRITE$(0)=Y$
+   25 DATA 11000111                    140 PUT SPRITE 0,(110,85),8
+   30 DATA 11000100                    150 GOTO 150
+   35 DATA 11010010
+   40 DATA 11001001                 γ) NEW
+   45 DATA 11010100                    Ok
+   50 DATA 11001101                    10 COLOR 1,15,8:SCREEN 2,1
+   100 FOR S=1 TO 8:READ R$            20 DATA 193,204,199,207,210
+   110 Y$=Y$+CHR$(VAL("&B"+R$))        ,201,212,205
+   120 NEXT                            100 FOR I=1 TO 8:READ R:Y$=
+   130 SPRITE$(0)=Y$                   Y$+CHR$(R):NEXT:SPRITE$(0)=
+   140 PUT SPRITE 0,(110,85),8,0       Y$:PUT SPRITE 0,(110,85),8
+   150 GOTO 150                        150 GOTO 150
+   Очевидно, что программа α дает наглядное представление об образе спрай-
+та уже на стадии составления программы.Если же Вы умеете пользоваться  ин-
+струментальным средством - программой "редактор спрайтов", то лучше всего
+формировать спрайт  при помощи десятичных кодов (пример - программа γ). И,
+наконец, программа β выводит на экран графический образ спрайта  со значе-
+нием "алгоритм"; при этом пользователь, разумеется,  не может заранее пре-
+дугадать вид "пятна" (образа спрайта), образующегося на экране!
+   П р и м е р 7.
+   ─────────────
+   NEW
+   Ok
+   10 KEY OFF:COLOR15,1,5:SCREEN1,2
+   20 DATA 96,144,191,160,159,159,79,79,39,23,10,7,1,1,7,31,6,9,253,5,233,
+   233,210,210,164,168,80,224,128,128,224,248
+   30 FOR I=1 TO 32:READ A:A$=A$+CHR$(A):NEXT:SPRITE$(1)=A$
+   40 PUT SPRITE 1,(120,90)
+   П р и м е р 8 [4].  Двенадцать одинаковых спрайтов. 
+   ─────────────  
+   NEW
+   Ok
+   10 COLOR 1,15,8:SCREEN 2,3
+   20 W$="Двенадцатьспрайтов-четыревстроке":SPRITE$(40)=W$
+   40 S=0:FOR I=20 TO 230 STEP 60:FOR J=20 TO 170 STEP 60
+   60 PUT SPRITE S,(I,J),13-S,40:S=S+1:NEXT J,I 'Обратите внимание на то,
+   что параметр t ("экранный" номер спрайта) изменяется!
+   80 GOTO 80
+   Итак, одному значению n может соответствовать несколько значений  пара-
+метра t, находящегося в одном или нескольких операторах PUT SPRITE.Это по-
+зволяет при необходимости "размножать" спрайт в виде  нескольких  одинако-
+вых образов на экране дисплея.
+   П р и м е р 9.  Спрайты с псевдослучайными образами.
+   ───────────── 
+   10 COLOR 1,15,8:SCREEN 2,3:FOR K=1 TO 12:Y$="":FOR Z=1TO32
+   40 Y$=Y$+CHR$(INT(RND(1)*256)):NEXTZ:SPRITE$(K)=Y$:NEXTK
+   70 S=1:FOR I=20 TO 230 STEP 60:FOR J=20 TO 170 STEP 60
+   90 PUT SPRITE S,(I,J),13-S:S=S+1:NEXTJ,I
+   110 GOTO 110
+   П р и м е р 10.  Движение спрайта по горизонтали.
+   ────────────── 
+   10 COLOR 1,15,8:SCREEN 2,3
+   20 X$="терминал":SPRITE$(0)=X$+X$+X$+X$
+   40 FOR K=1 TO255:PUT SPRITE 5,(K,80),4,0'Обратите внимание на то, что
+   значения параметров t и n не меняются!
+   90 NEXT:GOTO 40
+   П р и м е р 11.  Надеемся, что приведенный ниже  пример  доставит  Вам
+   ──────────────   большое эстетическое наслаждение!
+   10 '        ∗∗∗∗∗ C o l o r ∗∗∗∗∗
+   20 COLOR 15,1,1:SCREEN 2,2
+   30 OPEN "GRP:" AS #1
+   40 FOR S=1 TO 2:A$="":FOR P=1 TO 32:READ D$
+   60 A$=A$+CHR$(VAL("&H"+D$)):NEXT
+   70 SPRITE$(S)=A$:NEXT
+   80 FOR K=15 TO 2 STEP-1:Y=K*11+13:FOR X=10 TO 75+K*5 STEP 2
+   100 PUT SPRITE K,(X,Y),K,1:PUT SPRITE K+15,(X+8,Y-16),K,2
+   120 LINE (X-4,Y+3)-(X-2,Y+12),K,BF:NEXT
+   130 READ D$:PSET(X+30,Y-13),1: PRINT #1,D$
+   140 S=50+K*2:PLAY"v9n=s;32":NEXT  '◀── Как, и музыка здесь!
+   150 DRAW "bm15,15":PRINT #1,"Transparent"
+   160 DRAW "bm15,26":PRINT #1,"Black"
+   170 DRAW "bm27,0":PRINT #1,"Press RETURN key"
+   180 IF INKEY$<>CHR$(13) THEN 180
+   190 COLOR 15,4,7:END
+   200 DATA 1,2,4,D,17,13,21,23,47,4C,F0,C0,0,0,0,0,3F,7E,FC,F8,F0,E0,C0,
+   80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,4,9,13,27,4F,9F,0,0,0,0,10,28,4
+   C,9E,3F,7E,FC,F8,F0,E0,C0,80
+   260 DATA White,Gray,Magenta,Dark Green,Light Yellow,Dack Yellow, Light 
+   Red,Medium Red,Sky Blue,Dark Red,Light Blue,Dark Blue,Light Green,Medi
+   um Green
 
    П р и м е р 12. Фильм (чередование спрайтов на одном и том же месте эк-
    ──────────────  рана дисплея).
@@ -2030,7 +2175,6 @@
    40 FOR I=1 TO 4:PUT SPRITE 2,(90,90),11,I'Обратите внимание на то, что
    номер спрайта изменяется в цикле, а "экранный" номер постоянен!
    50 FOR U=1 TO 200:NEXT:NEXT:GOTO 40
-
    Из рассмотрения примеров 8-12 можно сделать некоторые выводы о назначе-
 нии "экранного" номера спрайта.
    α) "Экранный" номер показывает нам номер "пятна"  (спрайта) на  экране.
@@ -2048,7 +2192,6 @@
 давать" цветные спрайты,накладывая их образы друг на друга.При этом важно
 отметить,что спрайт с меньшим экранным номером "накладывается" на спрайты,
 имеющие большие экранные номера.
-
    П р и м е р 13.   Цветные спрайты.
    ──────────────
    NEW
@@ -2077,7 +2220,6 @@
    85 PUTSPRITE 3,(141,94),11,1
    87 PUTSPRITE 4,(141,94),1,2
    90 GOTO 90
-
    П р и м е р 14. Движение цветных (!) спрайтов.
    ──────────────
    NEW
@@ -2090,7 +2232,6 @@
    95 PUT SPRITE 3,(75+L,88),10,2:PUT SPRITE 4,(88+L,73),13,2
    110 PUT SPRITE 5,(80+L,60),1,1:NEXTL:END
    130 RESTORE10:READB$:A$="&b"+B$:C$=C$+CHR$(VAL(A$)):RETURN
-
    Внимание!В одной строке экрана (напомним,что,например,в экране SCREEN2
 192 строки) можно разместить не более  ч е т ы р е х  спрайтов, а  осталь-
 ные спрайты с более высокими "экранными" номерами останутся невидимыми!
@@ -2134,8 +2275,8 @@
               Экран 0┌──────────┐ │ · │ │─┘ Фоновый экран
       Образ          │          │ │·  │─┘ Основной экран
      спрайта с       │   ██     │ │───┘◀── для спрайта 31
-    "экранным" ────────▶  ██    │ │                           Р и с. 5
-     номером 0       │          │─┘◀── для спрайта 1          ────────
+    "экранным" ────────▶  ██    │ │
+     номером 0       │          │─┘◀── для спрайта 1
                      └──────────┘◀── для спрайта 0
    На рисунке изображен ряд параллельных прозрачных пластинок, которые мы
 будем называть  э к р а н а м и. Экраны введены для того, чтобы:
@@ -2165,15 +2306,10 @@
    Сквозь незанятые позиции основного экрана "просвечивают" ф о н о в ы й
 экран и окаймляющая его цветная рамка.
 
-
-
               V.6.3.  С т о л к н о в е н и е  с п р а й т о в
 
-
                               "Да сделайте же, наконец, CALL NETEND !", -
                               крик, вырвавшийся из уст пользователя MSX-2.
-
-
    С т о л к н о в е н и е м   с п р а й т о в  мы  считаем: 
    α) для  п р о г р а м м и с т а - наложение  на  экране  одной  или не-
 скольких точек их образов. Следует отметить,что столкновение спрайтов про-
@@ -2182,7 +2318,7 @@
    β) для  к о м п ь ю т е р а - совпадение е д и н и ч н ы х  битов в об-
 разах спрайтов, за исключением тех случаев, когда  цвет  хотя  бы  одного
 спрайта установлен в 0 (тогда столкновение не обнаруживается!).
-   Оператор                 ON SPRITE GOSUB n
+   Оператор                 ON SPRITE GOSUB n   ,
 где:  ON ("по"), SPRITE, GOSUB - служебные слова;
       n - номер программной строки,
 приводит в состояние готовности режим  передачи  управления  подпрограмме,
@@ -2202,7 +2338,6 @@
 кновение спрайтов произошло, то этот факт "запоминается", но никаких  дей-
 ствий не происходит; однако,если позже компьютер встретит оператор SPRITE
 ON, то будет обработано ранее зафиксированное прерывание.
-
    П р и м е р 1. Сравните, пожалуйста,результаты работы приведенных ниже
    ─────────────  программ.
      NEW                               NEW
@@ -2219,7 +2354,6 @@
      100 SPRITE OFF:PRINT "Столк       100 PRINT"Столкновение":FOR
      новение":FOR I=1 TO 1000:NE       I=1 TO 1000:NEXT:CLS:SPRITE
      XT:CLS:SPRITE ON:RETURN           OFF:RETURN
-
    Для очистки экрана дисплея от образов спрайтов примените  в непосредст-
 венном режиме команду SCREEN0 (CLS не поможет!).
    Укажем один из способов определения, какие именно спрайты  столкнулись:
@@ -2229,7 +2363,6 @@
    Предлагаем Вам пример  простейшей  программы,  позволяющей  определить,
 спрайт какого цвета "пострадал" при столкновении! Разумеется,задача значи-
 тельно усложняется в случае, когда спрайты имеют одинаковые цвета!
-
    П р и м е р 2.
    ─────────────
    Ok
@@ -2248,14 +2381,12 @@
    lack"
    520 FOR T=1 TO 500:NEXT:PUT SPRITE E,(E*10,E*10),15:E=E+1
    525 CLS:SPRITE ON:RETURN
-
    Напомним, что значения PEEK(&HFCB3) и  PEEK(&HFCB5) определяют  коорди-
 наты текущего положения графического курсора.
    Прерывания по столкновению спрайтов  широко  используются  в  и г р о -
 в ы х  программах. Они дают возможность,например,воспроизводить звук взры-
 ва при всяком столкновении ракеты и мишени, если оба этих  объекта являют-
 ся спрайтами.
-
    П р и м е р 3. Программа демонстрирует некоторые  возможности  примене-
    ─────────────  ния спрайтов.
    NEW
@@ -2338,9 +2469,8 @@
 
                   V.7.  ОПЕРАТОР SCREEN В ОБЩЕМ СЛУЧАЕ
 
-
    Общая форма записи оператора SCREEN следующая:
-                       SCREEN [n],[s],[z],[d],[p],[m]
+                       SCREEN [n],[s],[z],[d],[p],[m]     ,
                                                  ──▲─
                                                    └ только для MSX-2 !
 где: SCREEN("screen"-"экран") - служебное слово;
@@ -2365,7 +2495,7 @@
 если p=0, то принтер совместим со стандартом MSX (будет распечатывать каж-
 дый символ из набора символов стандарта MSX); если же p≠0, то принтер при
 выводе преобразует графические символы в пробелы (по умолчании p=0).
-     7) m - арифметическое выражение,целая часть значения которого принад-
+     m - арифметическое  выражение, целая часть значения  которого принад-
 лежит отрезку [0,3], причем:
    если m=0, то изображение устойчивое (по умолчанию);
    если m=1, то изображение "дергающееся";
@@ -2377,9 +2507,8 @@
 с нечетным номером.
    Отметим, что неиспользуемые параметры в операторе  можно  не указывать,
 но если они не последние в записи, то ограничивающие их запятые обязатель-
-ны. При этом, каждый назначенный параметр действует до тех пор,пока не по-
+ны. При этом каждый назначенный параметр действует до тех пор, пока не по-
 лучит новое значение в последующем операторе SCREEN.
-
    П р и м е р ы:     SCREEN 1,2,0,2,0       SCREEN X,Y
    ─────────────      SCREEN 3,,0            SCREEN 2,3,,,0
    Если какой-либо из параметров выходит за допустимый диапазон,то компью-
@@ -2387,15 +2516,11 @@
    Запомните, что основное назначение оператора SCREEN - это  определение
 типа экрана и размера спрайтов!
 
-
-
-V.8. ПОНЯТИЕ ФАЙЛА [5]. ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ НА ГРАФИЧЕСКИЕ ЭКРАНЫ
-
+          V.8. ПОНЯТИЕ ФАЙЛА [5]. ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ
+                         НА ГРАФИЧЕСКИЕ ЭКРАНЫ
 
                                       Я случайно уничтожил все свои файлы!
                                                                 Крик души
-
-
    Термин  ф а й л  происходит от английского слова  file, переводящегося
 на русский язык как "дело" или "досье".
    В информатике под  ф а й л о м  понимают совокупность в некотором смыс-
@@ -2422,16 +2547,15 @@
    Компоненты файла последовательного доступа называются  с т р о к а м и.
 Каждая строка имеет специальную концевую метку и, как и запись,состоит из
 отдельных значений. Однако  строки не нумерованы и обрабатывать  их можно
-лишь последовательно друг за другом. Причем, запись организуется  от нача-
-ла или конца файла, а чтение - только от его начала.
-   Теперь перейдем к делу!
+лишь последовательно друг за другом. Причем  запись организуется  от нача-
+ла или конца файла,а чтение -только от его начала. Теперь перейдем к делу!
    Схемы, графики, рисунки или их отдельные фрагменты, выводимые на графи-
 ческие экраны, обычно нуждаются в обозначениях  и  поясняющих  сообщениях.
 Сформировать их оператором PRINT невозможно! В режимах  SCREEN2 ÷ SCREEN8
 последний не действует.
    Однако  эту процедуру можно осуществить путем совместного применения в
 программе четырех операторов:
-   α)                         MAXFILES=α
+   α)                         MAXFILES=α      ,
 где: MAX ("MAXimum"-"наибольший") и FILES ("файлы") - служебные слова;
      α - арифметическое выражение, целая часть значения которого принадле-
 жит отрезку [1,15].
@@ -2441,7 +2565,8 @@
    При выполнении оператора MAXFILES= кроме резервирования буферов  произ-
 водится "чистка" значений переменных и закрытие всех ранее  открытых  фай-
 лов данных.
-   β)                OPEN"GRP:"[FOR OUTPUT]AS[#] N
+
+   β)                OPEN"GRP:"[FOR OUTPUT]AS[#] N     ,
 где:  OPEN("открыть"), FOR("для"), OUTPUT("вывод"), AS("как") - служебные
 слова;
      "GRP:" - имя устройства вывода,которое передает информацию на гра-
@@ -2454,7 +2579,7 @@
 ошибке:                   "File already open in ..."
             ("Ф а й л  у ж е  о т к р ы т  в  с т р о к е ...")
 
-   γ)                           PRINT #N,A 
+   γ)                           PRINT #N,A      ,
 где: A - список арифметических и строковых выражений (разделенных  запяты-
 ми или точками с запятой), значения которых выводятся на графические экра-
 ны;
@@ -2463,8 +2588,9 @@
    Применение оператора PRINT#... без оператора OPEN приводит к сообщению
 об ошибке:                  "File not open in ..."
                 ("Ф а й л  не  о т к р ы т  в  с т р о к е ...")
-   Напомним также, что  "обычный" оператор  PRINT (без указания параметра
-н о м е р  ф а й л а) в графических экранах игнорируется!
+   Напомним также, что "обычный" оператор PRINT (без указания параметра N)
+в графических экранах игнорируется!
+
    δ)                           CLOSE [[#] N]                           , 
 где: 1) CLOSE ("закрыть") - служебное слово;
      2)  N - номер файла, "открытого" оператором OPEN.
@@ -2477,7 +2603,6 @@
    Таким образом, последовательность операторов при выводе текстовой  или
 цифровой информации на графический экран может выглядеть, например, следу-
 ющим образом:
-
    П р и м е р 1.
    ─────────────
    NEW
@@ -2489,7 +2614,6 @@
    50 CLOSE #1
    60 GOTO 60 'Данная программа позволяет вывести на графический экран те
    кущий цвет изображения, фона и бордюра
-
    П р и м е р 2.
    ─────────────
    NEW
@@ -2501,7 +2625,6 @@
    60 SCREEN 3:OPEN "GRP:"FOR OUTPUT AS#2
    80 PSET (50,80),11:PRINT #2,"БУКВЫ"
    100 FOR I=1 TO 1000:NEXT I:CLOSE #2
-
    Обратите внимание на то, что первые операторы строк  30 и 80 указывают
 то место экрана, с которого  начинается текст, т.к. текст позиционируется
 так, что первый символ размещается с верхней левой точки позиции графичес-
@@ -2515,15 +2638,14 @@
 чтобы уничтожить строку символов,либо нарисуйте прямоугольник и закрасьте
 его цветом фона, либо выведите оператором PRINT#1,... ту же самую  строку
 на прежнее место с помощью символов, имеющих цвет фона.
-
    П р и м е р 3.
    ─────────────
    NEW
    Ok
    10 COLOR 1,11,7:SCREEN2:OPEN "GRP:"FOR OUTPUT AS #1
    30 PSET (69,80),11:PRINT #1,"Рис 9.1 ЦВЕТА":GOSUB 1000'──▶
-   55 LINE(69,80)-(100,87),11,BF 'Нарисован прямоугольник,внутренняя част
-   ь которого закрашена цветом фона.
+   55 LINE(69,80)-(100,87),11,BF    'Нарисован прямоугольник, внутренняя 
+   часть которого закрашена цветом фона.
    56 GOSUB 1000'──▶
    60 COLOR 11,11,7:PSET (69,80),11:PRINT #1,"Рис 9.1 ЦВЕТА"
    68 GOSUB 1000'──▶
@@ -2531,16 +2653,14 @@
    100 FOR I=1 TO 1000:NEXT:CLOSE#1
    110 END
    1000 FOR I=1 TO 1000:NEXT:RETURN '──▶
-
 Вначале на экране появляется надпись
-                             Рис 9.1 ЦВЕТА
-затем                            9.1 ЦВЕТА
+                             Рис 9.1 ЦВЕТА       ,
+затем                            9.1 ЦВЕТА       ,
 далее экран становится чистым,и после паузы возникает надпись
-                             БУКВЫ
+                             БУКВЫ               .
    А в режимах SCREEN5, SCREEN6, SCREEN7 и SCREEN8 наложения символов  не
 происходит! 
    Попробуйте "прогнать" следующий пример при различных значениях N (2÷8):
-
    П р и м е р 4.
    ─────────────
    NEW
@@ -2550,7 +2670,6 @@
    30 FOR T=0 TO 500:NEXT 'Задержка
    40 PRESET(90,90):PRINT#1,"раму"
    50 GOTO 50
-
    П р и м е р 5.
    ─────────────
    NEW
@@ -2563,11 +2682,10 @@
    ·150··90
    ·70··90
    Ok
-
    Эта программа позволяет узнать координаты (X,Y) графического курсора и
 координаты (α,β) т.н. графического  а к к у м у л я т о р а . Когда мы ри-
 суем точку (или линию), графический курсор и графический аккумулятор  сов-
-падает. Различия возникают лишь при  выводе текстовой информации. Графиче-
+падают. Различия возникают лишь при  выводе текстовой информации. Графиче-
 ский курсор устанавливается в ту точку, которую  мы  вывели последний раз
 (оператором PSET, LINE, CIRCLE,...). Графический аккумулятор  устанавлива-
 ется на то место, с которого должна быть напечатана очередная буква  (убе-
@@ -2575,7 +2693,6 @@
 суем точку (PSET,LINE,...), графический курсор сразу же переходит  в пози-
 цию графического аккумулятора, и  далее они действуют совместно до нового
 оператора PRINT#.
-
    П р и м е р 6 [ 76 ].   Сочетание текста и иллюстраций.
    ────────────────────
    40 COLOR 15,15,15:SCREEN 2:OPEN"GRP:"AS#1
@@ -2590,7 +2707,6 @@
    240 PRESET(160,102):COLOR 4:PRINT #1,"Треугольник"
    270 LINE(208,118)-STEP(30,30):LINE-STEP(-30,0):LINE-STEP(0,-30)
    300 GOTO 300
-
    П р и м е р 7 [ 76 ].  Ввод данных в графическом режиме.
    ────────────────────
    40 COLOR 15,15,15:SCREEN 2,0,0:OPEN"GRP:"AS #1
@@ -2612,20 +2728,22 @@
    280 LINE (80,8)-STEP(56,8),15,BF
    290 GOTO 110
 
-         V.9.  Р е ж и м  SCREEN 4 (только для компьютера MSX-2) 
 
+         V.9.  Р е ж и м  SCREEN 4 (только для компьютера MSX-2) 
 
    Этот режим идентичен режиму SCREEN 2 в том, что касается  выбора цвета,
-графических операторов и отображения текста (см. рис.6).
+графических операторов и отображения текста (см. рис.7).
+
                         0                  255 
                        0┌───────────────────┐──▶X
                         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                         │▨▨▨▨▨ SCREEN4 ▨▨▨▨▨│
                         │▨▨▨ 256╳192 точек▨▨│
                         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
-                     191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘             Р и с. 6
+                     191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
                         ▼
                         Y 
+                              Р и с. 7 
    В режиме SCREEN 4,однако, имеются  н о в ы е  операторы для работы  со
 спрайтами.
    A.  Оператор  COLOR SPRITE$  предоставляет Вам возможность  изображать
@@ -2633,10 +2751,10 @@
    В режиме SCREEN 2 для получения такого же результата обычно  накладыва-
 ются несколько спрайтов (см. раздел V.6.2).
    Оператор, с которым мы хотим Вас познакомить, имеет следующий формат: 
-                         COLOR SPRITE$(NS)=A$
+                         COLOR SPRITE$(NS)=A$     ,
 где: COLOR, SPRITE - служебные слова;
      NS - арифметическое выражение, целая часть значения которого  опреде-
-ляет номер сформированного в оперативной памяти спрайта;
+ляет  э к р а н н ы й  номер спрайта;
      A$ - строковое выражение, причем значение А$ должно содержать не  бо-
 лее 16 символов (LEN(A$)≤16). 
    Каждый символ значения строки  A$  воздействует  на одну линию спрайта
@@ -2678,12 +2796,11 @@
 спрайта с номером NS с другими спрайтами не будет обнаружено. Правило при-
 оритета (если "накладываются" два спрайта, то спрайт с  меньшим "экранным"
 номером перекрывает спрайт с большим "экранным" номером) более не соблюда-
-ется. Оказывается область пересечения спрайтов имеет цвет,определяемый ре-
-зультатом логической операции OR, примененной к цветам "наложенных" спрай-
-тов. 
+ется. Оказывается, область пересечения спрайтов имеет  цвет, определяемый
+результатом логической  операции OR, примененной  к  цветам  "наложенных"
+спрайтов. 
    Более того, спрайтовые линии, отмеченные  в  операторе COLOR SPRITE$ и
 не "затронутые" пересечением, исчезают!
-
    П р и м е р 3. Пример, иллюстрирующий "работу" бита 6 спрайтовой линии.
    ─────────────
    NEW
@@ -2700,7 +2817,6 @@
    5)  б и т  7 (крайний левый).Если этот бит равен 1,то спрайтовая линия
 отображается  на  32  точки левее координаты  Х, заданной в операторе PUT
 SPRITE;
-
    П р и м е р 4. Сдвиг двух верхних спрайтовых линий с изменением цвета.
    ─────────────
    NEW                                             не используется
@@ -2713,30 +2829,28 @@
    60 COLOR SPRITE$(0)=SC$                спрайтовой линии     палитры
    70 GOTO 70                                               
    Установите, что произойдет при нажатии любой клавиши!?
-
    П р и м е р 5.
    ─────────────
    NEW
-   Ok
-   10 SCREEN 4,1
-   20 SPRITE$(0)=STRING$(8,255)                  не соблюдается
-   30 SC$=CHR$(&b01000111)+CHR$(&b01000111)+   правило наложения
-   CHR$(&b01000111)                               спрайтов
-   40 PUT SPRITE 0,(120,85),8,0:                     │   не используется
-   PUT SPRITE 1,(130,95),7,0                         │     │
-   50 IF INKEY$="" THEN 50                           ▼     ▼
-   60 COLOR SPRITE$(1)=SC$                        0  1  0  0  0  1  1  1
-   70 GOTO 70                                     ▲           ────▲─────
-                                                  │               │
-                                          отсутствие сдвига      номер
+   Ok                                            не соблюдается
+   10 SCREEN 4,1                               правило наложения
+   20 SPRITE$(0)=STRING$(8,255)                   спрайтов
+   30 SC$=CHR$(&b01000111)+CHR$(&b01000111)+         │   не используется
+   CHR$(&b01000111)                                  │     │
+   40 PUT SPRITE 0,(120,85),8,0:                     ▼     ▼
+   PUT SPRITE 1,(130,95),7,0                      0  1  0  0  0  1  1  1
+   50 IF INKEY$="" THEN 50                        ▲           ────▲─────
+   60 COLOR SPRITE$(1)=SC$                        │               │
+   70 GOTO 70                             отсутствие сдвига      номер     
                                           спрайтовой линии      палитры
+                                         
+                                         
    Спрайт 0 изображается красным цветом (8), а спрайт 1 - темно-синим (7).
 При нажатии любой клавиши,все линии спрайта 1, находящиеся "под" спрайтом
 0, сохраняются,остальные "исчезают"(цвет пересечения - б е л ы й, так как
 7 OR 8 = 15).
    Oбратите внимание, что оператор  COLOR SPRITE$ в строке  60 "применяет-
 ся" к спрайту с "экранным" номером 1.
-
    П р и м е р 6. 
    ─────────────
    NEW
@@ -2749,10 +2863,9 @@
    50 PUT SPRITE 1,(T,95),5,1:T=T-1:NEXTI
    60 GOTO 60
    Если исправить 30-ю строку следующим образом:
-                    30 SC$=STRING$(4,&B11100100):T=255
+                    30 SC$=STRING$(4,&B11100100):T=255       ,
 то при  столкновении  двух  спрайтов  спрайт с меньшим "экранным" номером
 вначале уменьшится в два раза, а затем восстановит свои размеры.  
-
    П р и м е р 7. Уменьшение и увеличение "высоты" спрайта при нажатии лю-
    ─────────────  бой клавиши.
    NEW
@@ -2766,10 +2879,9 @@
    70 A$=INKEY$:IF A$="" THEN 70
    80 COLOR SPRITE$(1)=E$
    90 IF LEN(E$)<=8 THEN E$=E$+"0":GOTO 70 ELSE 50
-
    B.  Оператор COLOR SPRITE очень похож на оператор COLOR SPRITE$,но дей-
 ствует на всех спрайтовых линиях спрайта с номером NS.
-   Формат оператора:         COLOR SPRITE(NS) = B
+   Формат оператора:         COLOR SPRITE(NS) = B    ,
 где: COLOR, SPRITE - служебные слова;
      NS - арифметическое выражение, целая часть значения которого  опреде-
 ляет номер сформированного в оперативной памяти спрайта;     
@@ -2782,7 +2894,6 @@
                        COLOR SPRITE$(0)=STRING$(8,B)
                        COLOR SPRITE(0)=B
 эквивалентны!
-
    П р и м е р 8. Исчезновение спрайта  с меньшим  экранным  номером  при
    ─────────────  COLOR SPRITE(0)=127 и изменение цвета  области пересече-
 ния спрайтов при COLOR SPRITE(0)=63 .
@@ -2793,7 +2904,6 @@
    50 IF T=I THEN COLOR SPRITE(0)=127:FOR A=1 TO 300:NEXTA
    60 PUT SPRITE 1,(T,95),7,0:T=T-1:NEXTI
    70 GOTO 70
-
    П р и м е р 9.
    ─────────────
    NEW
@@ -2809,7 +2919,6 @@
 н ы, однако, если значение B находится в диапазоне от 128 до 255, или ког-
 да необходимо воздействовать на отдельные линии спрайта, следует  восполь-
 зоваться первым оператором. 
-
    П р и м е р 10. Столкновение спрайтов для оператора COLOR SPRITE(NS)=B
    ──────────────
    NEW
@@ -2822,24 +2931,21 @@
    90 GOTO 60 '──▶                                   │
    100 SCREEN 0:RETURN 10        Обратите внимание на единичный пятый бит!            
 
-
-
          V.10.  Р е ж и м  SCREEN 5 (только для компьютера MSX-2)
 
-
    Этот режим предлагает те же возможности работы со спрайтами, что и  ре-
 жим SCREEN 4. Он отличается от режима SCREEN 4 в двух пунктах: 
    α)   р а з р е ш е н и е  и  в ы б о р  ц в е т а .
-   Экран разделен на 212 строк по 256 точек (см. рис.7).
+   Экран разделен на 212 строк по 256 точек (см. рис.8).
                          0                  255 
                         0┌───────────────────┐──▶X
                          │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                          │▨▨▨▨▨ SCREEN5 ▨▨▨▨▨│
                          │▨▨▨ 256╳212 точек▨▨│
                          │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
-                      211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘             Р и с. 7
+                      211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘-                         Y 
+                         Y      Р и с. 8
    Цвет присваивается каждой точке, причем допустимых палитр - 16.
    β)   э к р а н н ы е  с т р а н и ц ы .
    В режиме  SCREEN 5  в Вашем распоряжении имеется несколько так называе-
@@ -2852,12 +2958,11 @@
     2) страницу  для  в о з д е й с т в и я  (а к т и в н у ю  страницу).
 На активной странице можно "рисовать" с помощью графических операторов.
    Формат этого интересного оператора:
-                              SET PAGE [M],[N]
+                              SET PAGE [M],[N]      ,
 где: SET, PAGE - служебные слова;
      M, N - арифметические выражения, целые части  значения  которых  при-
 надлежат отрезку [0,3]. Первый аргумент SET PAGE указывает номер отобража-
 емой страницы, а второй - номер активной страницы.
-
    П р и м е р 1. 
    ─────────────
    NEW
@@ -2870,16 +2975,14 @@
    тивизируется; рисуются 8 линий.
    60 FOR I=0 TO 7:FOR J=0 TO 127
    70 PSET(2*J,I+108),I+2:PSET STEP(1,0),I+3:NEXTJ,I: P=1
-   90 IF INKEY$="" THEN 90 ' Ожидание нажатия клавиши! Если клавиша нажат
-   а,то номер (P) отображенной страницы изменяется оператором XOR
+   90 IF INKEY$="" THEN 90 'Ожидание нажатия клавиши! Если клавиша нажата,
+   то номер (P) отображенной страницы изменяется оператором XOR.
    100 P=P XOR 1:SET PAGE P,P 'Листание страниц!
    120 GOTO 90 '──▶                       ┌───────┬────────────┐
         Напомним Вам диаграмму Вейча      │   X   │ 0  1  0  1 │
       (таблицу истинности функции XOR):   │   Y   │ 0  0  1  1 │
-                                          │X XOR Y│ 0  1  1  0 │
-                                          └───────┴────────────┘
-   П р и м е р 2.
-   ───────────── 
+   П р и м е р 2.                         │X XOR Y│ 0  1  1  0 │
+   ─────────────                          └───────┴────────────┘
    Ok
    10 SCREEN 5
    20 FOR M=0 TO 3:SET PAGE M,M:CLS:NEXT
@@ -2890,7 +2993,6 @@
    80 SET PAGE 3,3:CIRCLE(127,106),K+Q+7,15
    90 NEXT:NEXT
    100 FOR K=0 TO 3:SET PAGE K,K:NEXT:GOTO 100
-
    П р и м е р 3.  Бегущий человечек.
    ─────────────
    NEW
@@ -2910,7 +3012,6 @@
    110 FOR I=0 TO 3:SET PAGE I,I 
    120 FOR T=0 TO 100:NEXT:NEXT
    140 GOTO 110 '──▶
-
    Любопытную возможность для работы с экранными страницами предоставляет
 оператор SCREEN,,,,,N (пять запятых!). Целая часть  выражения,  задающего 
 параметр N, должна принадлежать интервалу [0,3] и по умолчанию равна нулю.
@@ -2925,7 +3026,6 @@
 этом случае на страницу с номером 3 накладывается изображение 2-й  страни-
 цы).
    Взгляните на следующий пример:
-
    П р и м е р 4. 
    ─────────────
    NEW 
@@ -2935,7 +3035,6 @@
    30 A$=INPUT$(1) 'Задержка до нажатия клавиши
    40 SCREEN ,,,,,2 'Обратите внимание на величину последнего параметра!
    50 A$=INPUT$(1)
-
    Обратим Ваше внимание на то, как  можно  осуществить  к о п и р о в а -
 н и е  изображения из одной области экрана в другую на компьютерах  серии
 MSX-1.
@@ -2945,7 +3044,6 @@
 бражения, которые находятся с помощью функции POINT. Затем эти данные  ис-
 пользуются в операторе PSET для переноса отмеченных точек в другое  место 
 экрана.
-
    П р и м е р  5 [ 76 ].  Копирование участка экрана
    ─────────────────────
    20 CLEAR:DEFINT A-Z
@@ -2989,11 +3087,11 @@
    530 DATA 30,28,80,28
    Заметим, что в массиве чтение и запись данных  выполняются  невыносимо
 медленно, поэтому нужно запастись терпением!
+
    Ниже мы познакомим Вас еще с одним весьма мощным оператором MSX-BASIC -
 оператором COPY, который пересылает блок экрана в другое место экрана (на
 этой же или другой странице).
    Фактически, имеется  ш е с т ь  вариантов этого оператора.
-
    В а р и а н т  1
      ┌───────────────────────────────────────────────────────────────┐
      │                                                 { [T]XOR   }  │
@@ -3032,7 +3130,7 @@
                      │  AND   │ SC = C AND S    │
                      │  PSET  │ SC = C          │
                      │ PRESET │ SC = 16+(NOT C) │
-                     └────────┴─────────────────┘
+                     └────────┴─────────────────┘         ,
 где  S, SC, C - арифметические выражения, целые части значений которых оп-
 ределяют:
     S - цвет изображения или фона до копирования;   
@@ -3127,7 +3225,6 @@
 го прямоугольника окрашивается в тот цвет, который она имела  до копирова-
 ния, а при выполнении оператора COPY с параметром PRESET каждая точка  ко-
 пируемого прямоугольника окрашивается в "противоположный" цвет.
-
    П р и м е р ы:
    ─────────────
  6)  NEW                               7)  NEW
@@ -3143,10 +3240,8 @@
      80 PSET(205,10),1:?#1,POINT(210,5)    При нажатии на любую клавишу
      90 PSET(205,50),1:?#1,POINT(210,45)   Вы получите изображение другой
      100 GOTO 100                          экранной страницы.
-
    Испытайте логические операции PRESET,
 AND,OR,XOR, изменяя последний параметр в строке 70.
-
  8)  NEW
      Ok
      10 COLOR 15,3,4:SCREEN 5:OPEN"GRP:"AS#1:SET PAGE 0,0
@@ -3157,7 +3252,6 @@
      80 PSET(205,10),1:PRINT#1,POINT(210,5)
      90 PSET(205,50),1:PRINT#1,POINT(210,45)
      100 A$=INPUT$(1)
-
  9)  NEW
      Ok
      5  OPEN"grp:"AS#1
@@ -3180,8 +3274,8 @@
 быстрее осуществляется смена изображений и чем  меньше  расстояние  между
 двумя "кадрами", тем эта иллюзия полнее. Если  осуществлять  смену кадров
 с достаточно высокой скоростью, то можно добиться исчезновения эффекта ми-
-гания изображения. Однако, учтите, что скорость  смены  кадров ограничена
-производительностью компьютера.
+гания изображения. Однако учтите,что скорость смены кадров ограничена про-
+изводительностью компьютера.
 
    П р и м е р 10.
    ──────────────
@@ -3212,10 +3306,8 @@
      20 LINE (73,63)-(100,100),13,,XOR
      30 PRINT #1,POINT(73,63)
      40 GOTO 40
-
    Отметим, что наличие префикса T перед  параметрами  XOR, OR, AND, PSET,
 PRESET никак не влияет на выполнение логических операций над кодом цвета!
-
    П р и м е р 13.
    ──────────────
      5  OPEN"grp:"AS#1
@@ -3227,7 +3319,9 @@
      70 PRESET(90,120):PRINT #1,"Цвет прямоуг. :";Y ' Вывод цвета
      80 I$=INPUT$(1)
 
+
    В а р и а н т  2
+
    Этот оператор позволяет запоминать цвета  всех  точек  заданной прямо-
 угольной области экрана дисплея и хранить их номера в виде числового мас-
 сива (или в файле данных); далее этот оператор  по  Вашему желанию может
@@ -3235,10 +3329,12 @@
 COPY изображение воспроизводится достаточно быстро для того, чтобы можно
 было синтезировать движение объектов на экране.
    Формат оператора:
+
            ┌──────────────────────────────────────────────────────┐
            │   COPY (X1,Y1)-(X2,Y2), stri  ТО  {И м я  массива}   │
-           │                                   {И м я  файла  }   │
+       │                                   {И м я  файла  }   │   ,
            └──────────────────────────────────────────────────────┘
+
 где: (X1,Y1)-(X2,Y2)  - параметры, указывающие позицию копируемого  блока
 и "работающие" точно так же,как в операторе  LINE (X1,Y1)-(X2,Y2),C,BF
 (наличие этих параметров обязательно);
@@ -3276,7 +3372,7 @@
     │                                                 { [T]OR    }  │
     │  COPY {И м я  массива} [,napr] ТО (X3,Y3), strp,{ [T]AND   }  │
     │       {И м я  файла  }                          { [T]PSET  }  │
-    │                                                 { [T]PRESET}  │
+    │                                                 { [T]PRESET}  │  ,
     └───────────────────────────────────────────────────────────────┘
 где:  napr - необязательный  параметр, дающий  возможность  "поворачивать"
 блок изображения. Он может принимать следующие значения:
@@ -3300,7 +3396,6 @@
  └             8               ┘                 ления целой части.
    На языке MSX-BASIC это "звучит" как
              INT( (4* (ABS(X1-X2)+1) * (ABS(Y1-Y2)+1) +7)/8 )+4 
-
    П р и м е р 15.
    ──────────────
    Ok
@@ -3310,17 +3405,14 @@
    35 SCREEN 0:FOR I=1 TO 150:PRINT A%(I);:NEXT
    40 PRINT"Изображение записано":L$=INPUT$(1)
    50 SCREEN 5:COPY A% TO (77,56),0:L$=INPUT$(1)
-
    После выполнения программы наберите команду goto 50 и нажмите  клавишу
-"RETURN"... Пожалуйста, проанализируте полученный результат!
-
+"RETURN"... Пожалуйста, проанализируйте полученный результат!
    П р и м е р 16.
    ──────────────
    Ok
    10 SCREEN 5
    20 COPY "okr" TO (25,30),0 'Вывод информации с диска на экран
    30 GOTO 30
-
    П р и м е р 17. Пример  копирования  изображения  на  экране дисплея в
    ─────────────   массив, а из массива - в новое место экрана.
    NEW
@@ -3332,7 +3424,6 @@
    40 A$=INKEY$:IF A$="" THEN 40
    50 COPY AK,0 TO (150,150),0
    70 A$=INKEY$:IF A$="" THEN 70
-
    П р и м е р 18.  Иллюстрация действия параметра PRESET
    ──────────────
    Ok
@@ -3342,7 +3433,6 @@
    35 A$=INPUT$(1)                          ▼
    40 COPY(100,100)-(190,130) TO (100,0),,PRESET
    50 GOTO 50
-
    П р и м е р 19.
    ─────────────
    Ok
@@ -3365,7 +3455,6 @@
                   ┌──────────────────────────────────────────┐
                   │  COPY  и м я  файла   ТО  и м я  массива │
                   └──────────────────────────────────────────┘
-
    П р и м е р 20.
    ──────────────
    Ok
@@ -3378,6 +3467,7 @@
    60 COPY "Dima" TO AB:COPY AB TO (40,40)
    70 GOTO 70
 
+
    В а р и а н т  6
                                   Давайте все-таки обсуждать вкус ананаса
                                   с теми, кто его не ел!
@@ -3396,7 +3486,7 @@
 щим от внешнего источника видеосигнала.
    Для этой цели имеется оператор
                     ┌──────────────────────────────┐
-                    │   SET VIDEO  R,Y,C,S,A,V,R   │
+                    │   SET VIDEO  R,Y,C,S,A,V,R   │ ,
                     └──────────────────────────────┘
 где: SET, VIDEO - служебные слова;
      R  - числовой параметр, значение которого определяет источник  видео-
@@ -3435,7 +3525,6 @@
       │  Отметим, что оператор COPY можно использовать в режимах  │
       │          SCREEN 5, SCREEN 6, SCREEN 7, SCREEN 8           │
       └───────────────────────────────────────────────────────────┘
-
    П р и м е р 19.
    ──────────────
    NEW
@@ -3459,19 +3548,19 @@
 с о б).
 
 
-        V.11.  Р е ж и м  SCREEN 6  (только для компьютера MSX-2)
 
+        V.11.  Р е ж и м  SCREEN 6  (только для компьютера MSX-2)
 
-   Экран в режиме SCREEN 6 такой же, как и в режиме SCREEN 5 (см.рис.7),
+   Экран в режиме SCREEN 6 такой же, как и в режиме SCREEN 5 (см.рис.8),
 но могут использоваться только 4 цвета.
                           0                  511
                          0┌───────────────────┐──▶X
                           │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                           │▨▨▨▨▨ SCREEN6 ▨▨▨▨▨│
                           │▨▨▨ 512╳212 точек▨▨│
-                          │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│          Р и с. 8
+                          │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                        211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
-                          ▼
+                          ▼     Р и с. 9
                           Y
    CLS устанавливает цвет  ф о н а, имеющий номер 0 (прозрачный).
    Для установления цветов можно выбирать номер, лежащий в пределах  от 0
@@ -3502,10 +3591,10 @@
 
 
 
+
          V.12.  Р е ж и м  SCREEN 7 (только для компьютера MSX-2
                         с видеопамятью 128 Кбайтов)
 
-
      ┌─────────────────────────────────────────────────────────────┐
      │   Этот режим максимально удобен для многоцветных рисунков!  │
      └─────────────────────────────────────────────────────────────┘
@@ -3514,13 +3603,14 @@
                          │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                          │▨▨▨▨▨ SCREEN7 ▨▨▨▨▨│
                          │▨▨▨ 512╳212 точек▨▨│
-                         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│           Р и с. 9
+                         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                       211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
-                         ▼
+                         ▼     Р и с. 10
                          Y
    Этот режим похож на режим SCREEN 6, но:
    1) экранные страницы нумеруются от 0 до 1;
    2) допускается одновременное использование 16 цветов.
+
    Формула, необходимая для вычисления размера массива, принимающего  дан-
 ные блока экрана, та же, что и в SCREEN 5:
   ┌ (4·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐
@@ -3528,21 +3618,19 @@
   └             8               ┘                ления целой части.
 
 
-
          V.13.  Р е ж и м  SCREEN 8 (только для компьютера MSX-2
                        с видеопамятью 128 Кбайтов)
 
-
    Экран содержит 212 строк по 256 точек, как в SCREEN 5.
                          0                  255
                         0┌───────────────────┐──▶X
                          │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                          │▨▨▨▨▨ SCREEN8 ▨▨▨▨▨│
                          │▨▨▨ 256╳212 точек▨▨│
-                         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│           Р и с. 10
+                         │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
                       211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
                          ▼
-                         Y
+                         Y      Р и с. 11
    Этот режим характеризуется количеством цветов, которые  могут выводить-
 ся одновременно.  Цвет каждой точки  кодируется в одном байте, и  следова-
 тельно, имеет значения, лежащие  в пределах от  0 до  255. Они кодируются
@@ -3557,19 +3645,17 @@
    Например,  10 SCREEN 8
               20 PSET(3,0),&B11100000:PSET(5,10),&B00000011
               30 GOTO 30
-   Цвета изображения, фона  и  бордюра определяются как в режиме SCREEN 2
+   Цвета изображения, фона и бордюра определяются - как в режиме SCREEN 2,
 посредством оператора COLOR (или графических операторов для цвета текста),
 но значения лежат в пределах от 0 до 255.
    Введенное значение и пропорции цвета соотносятся следующим образом:
                          ц в е т = 32*G+4*R+B
    В SCREEN 8 палитры не используются: желаемые оттенки задаются непосред-
 ственно.
-
    П р и м е р.    NEW
    ───────────     Ok
                    10 SCREEN 8:FOR I=0 TO 255:COLOR,I:CLS
                    40 FOR J=0 TO 300:NEXT J,I
-
    Имеются только  д в е  экранные страницы, как и в режиме SCREEN 7.
    Формула, необходимая для вычисления  размера массива, принимающего  ко-
 пию блока экрана, имеет следующий вид:
@@ -3586,7 +3672,6 @@
 дает запрос на ввод координат, которые будут задаваться в операторе  COPY,
 а также просит указать,какой режим графического вывода будет использовать-
 ся.
-
    П р и м е р.
    ───────────
    NEW
@@ -3610,10 +3695,8 @@
    Ok
 
 
-
                        V.14.  Д о п о л н е н и е
 
-
    1.  П р и м е р  простейшего  г р а ф и ч е с к о г о  редактора [22].
        ───────────
    Редактор позволяет не только рисовать стрелками,  но и  включать-отклю-
@@ -3622,7 +3705,7 @@
 ружности нужно нажать на клавишу "О",  после чего ввести значение радиуса
 (окончание ввода - нажатие на клавишу "RETURN"). Нажатие на "Z" и ввод ве-
 личин R (радиус окружности, проходящей через вершины звезды), N (количест-
-во вершин)  и M=2 позволяет построить звезду.  Для ввода чисел использует-
+во вершин)  и M=2 позволяют построить звезду.  Для ввода чисел использует-
 ся подпрограмма "ВВОД".
    NEW
    Ok
@@ -3753,34 +3836,49 @@
    170 FOR Q=0 TO 64 STEP 16:M=M+1 ' Стирание "бяки", возникающей
    180 PUT SPRITE M,(Q,175),1,0    '        на экране
    190 NEXT:VDP(1)=VDP(1) XOR 64   ' Включение экрана
-   200 FOR I=0 TO 7:LOCATE I,22,1
-   210 NEXT:YW=YW+1
+   200 FOR I=0 TO 7: LOCATE I,22,1: NEXT: YW=YW+1
    220 IF YW=20 THEN LOCATE 0,22:PRINT J$(FC):FC=FC+1:YW=0 'Замена "бяки"
    230 IF FC=5 THEN FC=1
    240 GOTO 200
 
-
+   4. Программа, позволяющая сохранять на диске заранее построенное графи-
+ческое изображение и загружать его в видеопамять с дискеты.
+   10 OPEN "GRP:" AS #1: COLOR 10,1,1: SCREEN 2,0: PSET(128,6)
+   40  FOR I=1 TO 101
+   50   X=128+90*SIN(I*3.14*87/101):Y=96-90*COS(I*3.14*87/101):LINE-(X,Y)
+   80  NEXT I
+   90  DATA &H21,&H00,&H00,&H11,&H00,&H90,&H01,&H00,&H18,&HCD,&H59,&H00,
+   &HC9
+   100 FOR I=0 TO 12: READ R: POKE &H8FF0+I,R: NEXT I
+   140 DEF USR=&H8FF0: Z=USR(Z)
+   160 POKE &H8FF2,&H20: POKE &H8FF5,&HA8: Z=USR(Z)
+   190 BSAVE "Картинка.рис",&H9000,&HC000
+   210 LINE(0,0)-(255,191),1,BF  ' Начало воспроизведения рисунка
+   220 DATA &H21,&H00,&H90,&H11,&H00,&H00,&H01,&H00,&H18,&HCD,&H5C,&H00,
+   &HC9
+   230 FOR I=0 TO 12: READ R: POKE &H8F00+I,R: NEXT I
+   270 DEF USR=&H8F00: BLOAD "Картинка.рис": Z=USR(Z)
+   300 POKE &H8F02,&HA8: POKE &H8F05,&H20: Z=USR(Z)
+   330 GOTO 330
                                К а н а - слоговая азбука японского письма
                                (результат графического сокращения иерогли-
-                               фов).Существует (с.18 в.) в двух вариантах:
-                               катакана (используется для записи заимство-
-                               ванных слов) и хирагана (используется  для
-                               собственно японских слов).
+                               фов). Существует (с XVIII в.) в двух  вари-
+                               антах: катакана (используется  для  записи
+                               заимствованных слов) и  хирагана (использу-
+                               ется для собственно японских слов).
                                       Советский Энциклопедический словарь
-
-   4. А теперь о "загадочном" операторе
+   5. А теперь о "загадочном" операторе
                                 ┌────────────┐
                                 │  PUT KANJI │ .
                                 └────────────┘
    Приведем небольшой пример:
-   10 SCREEN 5:COLOR 15,0,0
-   20 M$="National":M=LEN(M$)
-   30 FOR X=1 TO M
-   40    CD=&H2300+ASC(MID$(M$,X,1)) 'Видимо, &H2300 - адрес?!
-   50    PUT KANJI (X*16-5,20),CD,11
-   55    PUT KANJI (X*16-5,70),CD,11
-   57    PUT KANJI (X*16-8,90),CD,11
-   60 NEXT:A$=INPUT$(1):SCREEN 0:LIST
+   10 SCREEN 5: COLOR 15,0,0: M$="National": M=LEN(M$)
+   20 FOR X=1 TO M
+   30    CD=&H2300+ASC(MID$(M$,X,1)) 'Видимо, &H2300 - адрес?!
+   40    PUT KANJI (X*16-5,20),CD,11
+   50    PUT KANJI (X*16-5,70),CD,11
+   60    PUT KANJI (X*16-8,90),CD,11
+   70 NEXT: A$=INPUT$(1): SCREEN 0: LIST
    Выполнив эту программу на компьютере, Вы получите на экране дисплея ок-
 рашенные горизонтальные полосы. Видимо  (это всего  лишь  наше предположе-
 ние!), оператор PUT KANJI позволяет выводить на экран японские  иероглифы,