Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:files:diff_011

Глава XI

@@ -1,13 +1,12 @@
-c1E
+\/d
 Г Л А В А  XI.  РАБОТА С ВИДЕОПАМЯТЬЮ И ВИДЕОПРОЦЕССОРОМ
-
+\/d-
 
                              Надо понять тот минимум, на котором покоится
                              мир, и все  избыточное  безжалостно отсекать
                              (бритва Оккама).
                                                                   У.Оккам
 
-
                       XI.1.  В и д е о п а м я т ь
 
    П р о ц е с с о р  (англ. "processor", от "process" - "обрабатывать") -
@@ -35,7 +34,7 @@
    └──────────────────────────────────────────────────────────────────┘
    Прежде чем  Вы  попытаетесь непосредственно воздействовать на "содержи-
 мое" экрана дисплея, хорошо разберитесь в назначении Таблиц VRAM!
-   Далее в тексте Вам часто будут встречаются следующие аббревиатуры:
+   Далее в тексте Вам часто будут встречаться следующие аббревиатуры:
 ┌────────────┬──────────────────────────────────────────────────────────┐
 │Аббревиатура│           Что Вам необходимо  з а п о м н и т ь!         │
 ├────────────┼──────────────────────────────────────────────────────────┤
@@ -49,28 +48,25 @@
 │    PT      │ "Palette Table"           - "Таблица палитры"            │
 └────────────┴──────────────────────────────────────────────────────────┘
 
-
            XI.1.1.   П с е в д о п е р е м е н н а я  BASE
 
    Псевдопеременная BASE используется для чтения начальных адресов Таблиц
 VRAM, а также для их "перемещения" в видеопамяти.
-   α) Вначале о синтаксисе псевдопеременной BASE,используемой как функция:
-                                 BASE(N)
+   α) Вначале о синтаксисе псевдопеременной BASE,используемой как функция
+                                 BASE(N)   ,
 где:  BASE ("base" - "база", "значение или адрес,  относительно  которого
 представляются другие значения и адреса") - служебное слово;
        N - арифметическое  выражение,  целая часть значения которого долж-
 на принадлежать отрезку [0,19] для компьютеров MSX-1 и отрезку [0,44] для
 компьютеров MSX-2. По значению N можно определить номер Таблицы видеопамя-
 ти (VRAM).
-     ┌─────────────────────────────────────────────────────────────┐
-     │ Функция BASE(N), где N=M*5+T, возвращает  н а ч а л ь н ы й │
-     │      а д р е с  Таблицы с номером Т в режиме SCREEN M .     │
-     │                 Ясно, что  M=N\5 и T=N MOD 5                │
-     └─────────────────────────────────────────────────────────────┘
+       Функция BASE(N), где N=M*5+T, возвращает  н а ч а л ь н ы й
+            а д р е с  Таблицы с номером Т в режиме SCREEN M .
+                       Ясно, что  M=N\5 и T=N MOD 5 .
    Номер Таблицы T принадлежит интервалу [0,4];режим экрана M может прини-
 мать значения 0,1,2,3,4,5,6,7,8 для компьютеров MSX-2 (0,1,2,3 для компью-
 теров MSX-1). Таким образом, с помощью функции BASE() можно иметь  доступ
-не более, чем к  п я т и  Таблицам для каждого из режимов экрана.
+не более чем к  п я т и  Таблицам для каждого из режимов экрана.
    Ниже приведены имена Таблиц, соответствующих различным значениям T:
               ┌───┬───────────────────────────────────────┐      
               │ T │             И м я  Таблицы            │
@@ -86,9 +82,8 @@
 го выполним команду: PRINT HEX$(BASE(5*2+1))
                       2000             ▲ ▲
                      Ok  Режим экрана──┘ └── Номер Таблицы
-
-   Следующая табличка позволяет найти начальный адрес  Т а б л и ц ы VRAM
-с номером T для режима SCREEN M:
+   Следующая табличка позволяет найти начальный адрес Таблицы VRAM с номе-
+ром T для режима SCREEN M:
                ┌───────┬──────┬──────┬──────┬──────┬──────┐
                │ М \ Т │0(PNT)│ 1(CT)│2(PGT)│3(SAT)│4(SGT)│
                ├───────┼──────┼──────┼──────┼──────┼──────┤
@@ -144,11 +139,11 @@
    β) А теперь -синтаксис псевдопеременной BASE,используемой в  л е в о й
 части оператора присваивания:
                              BASE(N)= 1024*A
-                        или  BASE(N)=&H400*A
+                        или  BASE(N)=&H400*A  ,
 где:  N  -  арифметическое выражение, целая часть значения которого  долж-
 на принадлежать отрезку [0,19]. Значение N - это номер Т а б л и ц ы VRAM;
       A  -  арифметическое выражение,целая часть значения  которого, умно-
-женная на число 1024, определяет новый начальный адрес таблицы  VRAM с но-
+женная на число 1024, определяет новый начальный адрес Таблицы  VRAM с но-
 мером N  (1Кбайт = 1024 байтам).  Значение A должно принадлежать  отрезку
 [0,15] для компьютеров серий MSX-1 и MSX-2.
  ┌──────────┬───┬─────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
@@ -179,11 +174,10 @@
 │ Число разрешенных│  4   │  2   │ 1 │ 1 │ 1 │ 1 │  4 │  4  │  2  │  2  │
 │ экранных страниц │    Используется  BASE   ├───┤Используется SET PAGE │
 └──────────────────┴─────────────────────────┘   └──────────────────────┘
-
    П р и м е р.  Запись  нескольких  экранных   с т р а н и ц   в  режиме
    ───────────   SCREEN 0 и их переключение.
    Стандартный начальный адрес  для Таблицы PNT в режиме SCREEN 0 равен 0.
-"Передвинем" эту таблицу вначале к адресу &H2000, а затем к адресу &H2400.
+"Передвинем" эту Таблицу вначале к адресу &H2000, а затем к адресу &H2400.
 Идентифицируем экранные страницы ("что-нибудь" на них напишем!), а  затем
 будем переключаться с одной страницы на другую путем переопределения нача-
 ла Таблицы PNT в строках 100 и 110.
@@ -193,10 +187,10 @@
 │ &HF924, &HF926 и &HF928 соответственно,и занимают по два байта каждый.│
 └───────────────────────────────────────────────────────────────────────┘
    Эти значения не могут быть изменены оператором BASE: Вы должны сделать
-это  с а м и (строка 110). Если Вы это не сделаете, то выход в непосредст-
-венный режим работы  будет возможен только из  н у л е в о й  страницы, а
-выйти на нее из другой страницы можно осуществить, если набрать  "вслепую"
-команду                          SCREEN М , где М - номер режима.
+это  с а м и (строка 110). В противном случае выход в непосредственный ре-
+жим работы будет возможен только из  н у л е в о й  страницы, а  выйти на
+нее из другой страницы можно осуществить, если набрать "вслепую"  команду
+                         SCREEN М , где М - номер режима.
    10 SCREEN 0:WIDTH 40
    20 FOR I=0 TO 2
    30    GOSUB 100:GOSUB 200 '──▶
@@ -255,7 +249,6 @@
 ния данных при помощи оператора VPOKE, когда RAM почти  полностью  исполь-
 зована! Однако при таком методе необходимо постоянно пользоваться нулевым
 текстовым режимом экрана - при смене режима Ваши данные будут уничтожены.
-
    П р и м е р 1. "Спрячем" числовой массив (кстати,а где оператор DIM ?!)
    ─────────────   в видеопамяти, а затем "извлечем его" оттуда.
    10 SCREEN 0:WIDTH 40:ADR=4096 'Начальный адрес хранения данных в VRAM
@@ -274,7 +267,6 @@
    140    IF(VPEEK(ADR+8*T) MOD 128)\64=1 THEN Z$=Z$+"E+" ELSE Z$=Z$+"E-"
    150    Z$=Z$+MID$(STR$((VPEEK(ADR+8*T)MOD 128)-64),2) 'Порядок числа
    160 U=VAL(Z$):PRINT U;:NEXT T
-
    П р и м е р 2.
    ─────────────
    10 TP=4096:SCREEN 0:WIDTH 38
@@ -297,14 +289,13 @@
 соб хранения данных в видеопамяти может быть весьма полезным,особенно для
 больших программ!
 
-               XI.1.3.  Т е к с т о в ы е  р е ж и м ы
 
+               XI.1.3.  Т е к с т о в ы е  р е ж и м ы
 
                                      Они мастера накапливать факты, а вот
                                      извлечь из них пользу  им удается не
                                      всегда.
-                                             Конан Дойль. Морской договор 
-
+                                           А.Конан Дойль. Морской договор 
 
    Введем понятия  о б щ е й  ширины (высоты) экрана и  д о с т у п н о й
 ширины (высоты) экрана.
@@ -334,22 +325,19 @@
 └───┴───┴─────┴───┴───┘└────┴────┴─────┴────┴────┘└───┴───┴─────┴───┴───┘
  ┌─────────────────────────────────────────────────────────────────────┐
  │ Чтобы изобразить символ в нужном месте экрана,используйте оператор: │
- │                          VPOKE BASE(5*T)+W,K                        │
+ │                          VPOKE BASE(5*T)+W,K  ,                     │
  │ где:  T - номер режима экрана (0 или 1);                            │
  │       W - номер позиции символа на экране;                          │
  │       K - код ASCII символа.                                        │
  └─────────────────────────────────────────────────────────────────────┘
-
    П р и м е р 1.  Вывести "A" (код ASCII 65)  в 8-й строке и  10-м столб-
    ─────────────   це экрана SCREEN 0:
             10 SCREEN 0:WIDTH 40
             20 VPOKE BASE(5*T)+40*8+10,65
                                   ▲ ▲
               Номер строки экрана─┘ └─ Номер столбца экрана
-
    Описанная возможность позволяет,например, выводить информацию в те мес-
 та экрана, которые  н е д о с т у п н ы  для вывода оператором PRINT.
-
    П р и м е р 2. Обратите внимание на то, что общая ширина экрана  и  до-
    ─────────────  ступная ширина экрана - различны!
    10 TIME=0:INTERVAL ON:ON INTERVAL=60 GOSUB 100
@@ -360,7 +348,6 @@
    ASC(":")
    130 VPOKE 43+J,ASC(MID$(RIGHT$("0"+MID$(STR$(T2),2),2),J+1)):NEXT:RETU
    RN
-
    Оказывается, можно одновременно "хранить" содержимое нескольких  экран-
 ных  с т р а н и ц , причем в любой момент можно "открыть" любую страницу
 и "прочесть" ее содержимое.
@@ -370,7 +357,7 @@
      ┌─────────────────────────────────────────────────────────────┐
      │   Вы всегда можете изобразить любой символ в нужном месте   │
      │   л ю б о й  экранной страницы при помощи оператора:        │
-     │                   VPOKE 4096*T*(N+1)^2+W,K                  │
+     │                   VPOKE 4096*T*(N+1)^2+W,K  ,               │
      │   где:   T - номер  с т р а н и ц ы;                        │
      │          N - режим экрана (0 или 1);                        │
      │          W - номер позиции символа на экране;               │
@@ -379,13 +366,12 @@
    При этом Вы сможете увидеть содержимое только нулевой страницы.
    Чтобы "просмотреть содержимое" других  страниц, воспользуйтесь  псевдо-
 переменной BASE.
-
    П р и м е р 3.  "Полистаем" экранные страницы!
    ─────────────
    NEW
    Ok                                   ┌─ Код символа "SPACE"("пробел")
    10 FOR T=1 TO 3                      ▼
-   20     FOR D=0 TO 959:VPOKE 4096*T+D,32:NEXT D 'Очистка T-ой страницы
+   20     FOR D=0 TO 959:VPOKE 4096*T+D,32:NEXT D 'Очистка T-й страницы
    30     PRINT "Введите"T"слово";:INPUT A$
    40     PRINT "С какого места печатать?"
    50     INPUT "X(от 0 до 39)";VX:INPUT "Y(от 0 до 23)";VY
@@ -399,63 +385,73 @@
    97  NEXT T
    100 A$=INPUT$(1):BASE(0)=0:POKE &HF923,0 'Вывод "содержимого" 0-й стра
    ницы
-
    В н и м а н и е! Страницы могут быть "засорены" посторонней  информаци-
 ей, оставшейся от прежнего обращения к ним. Ваши сообщения могут затерять-
 ся среди этого "мусора". Поэтому рекомендуем своевременно заботиться о чи-
 стоте страниц (посмотрите на строку 20 примера 3)!
-
    Приведем структуру Taблицы имен образов (PNT) для 80-символьного  режи-
 ма SCREEN 0 в соответствии с расположением символов на экране дисплея:
     ┌─────────────┐               
-    │    0-й байт │ - код символа в 0-ой строке и 0-ом столбце экрана
+    │    0-й байт │ - код символа в  0-й строке и  0-м столбце экрана
     ├─────────────┤
-    │    1-й байт │ - код символа в 0-ой строке и 1-ом столбце экрана
+    │    1-й байт │ - код символа в  0-й строке и  1-м столбце экрана
     ├─────────────┤
-    │    ···      │
+    │    ···      │                      ···
     ├─────────────┤
-    │   79-й байт │ - код символа в 0-ой строке и 79-ом столбце экрана
+    │   79-й байт │ - код символа в  0-й строке и 79-м столбце экрана
     ├─────────────┤
-    │   80-й байт │ - код символа в 1-ой строке и 0-ом столбце экрана
+    │   80-й байт │ - код символа в  1-й строке и  0-м столбце экрана
     ├─────────────┤
     │     ···     │
     ├─────────────┤
-    │ 1919-й байт │ - код символа в 23-ой строке и 79-ом столбце экрана
+    │ 1919-й байт │ - код символа в 23-й строке и 79-м столбце экрана
     └─────────────┘
-
    Приведем структуру Taблицы имен образов (PNT) для режима SCREEN 1 в со-
 ответствии с расположением символов на экране дисплея:
+
     ┌─────────────┐               
-    │    0-й байт │ - код символа в 0-ой строке и 0-ом столбце экрана
+    │    0-й байт │ - код символа в  0-й строке и  0-м столбце экрана
     ├─────────────┤
-    │    1-й байт │ - код символа в 0-ой строке и 1-ом столбце экрана
+    │    1-й байт │ - код символа в  0-й строке и  1-м столбце экрана
     ├─────────────┤
-    │    ···      │
+    │    ···      │                      ···
     ├─────────────┤
-    │   31-й байт │ - код символа в 0-ой строке и 31-ом столбце экрана
+    │   31-й байт │ - код символа в  0-й строке и 31-м столбце экрана
     ├─────────────┤
-    │   32-й байт │ - код символа в 1-ой строке и 0-ом столбце экрана
+    │   32-й байт │ - код символа в  1-й строке и  0-м столбце экрана
     ├─────────────┤
-    │     ···     │
+    │     ···     │                      ···
     ├─────────────┤
-    │  767-й байт │ - код символа в 23-ой строке и 31-ом столбце экрана
+    │  767-й байт │ - код символа в 23-й строке и 31-м столбце экрана
     └─────────────┘
+
    Структуру Taблицы имен образов(PNT) для 40-символьного режима SCREEN 0
 в соответствии с расположением символов на экране дисплея Вы теперь легко
 изобразите самостоятельно!
+
    Информация о символах, имеющихся на клавиатуре компьютера, находится в
 ROM, начиная с адреса &H1BBF, и занимает 2 Кбайта памяти. При переходе  в
 режимы SCREEN 0 или SCREEN 1 эта информация автоматически копируется в ви-
 деопамять, инициализируя тем самым Таблицу шаблонов образов (PGT).
-   Место в ROM и видеопамяти, предназначенное для записи  о д н о г о сим-
-вола, занимает  в о с е м ь  байтов.
+
+   Адрес ячейки, начиная с которой хранится информация о символах,  можно
+узнать в системной области RAM.  В ячейках &HF920 и &HF921 хранится адрес
+(по умолчанию - &H1BBF),а в ячейке &HF91F - номер слота памяти, в которой
+находятся шаблоны символов (о слотах см. в Приложении 1). Поэтому понятно,
+что шаблоны символов для инициализации видеопамяти  можно  хранить  как в
+ROM, так и в RAM.
+
+   Место в ROM, RAM и видеопамяти, предназначенное для записи о д н о г о
+символа, занимает  в о с е м ь  байтов.
+
     ┌──────────────────────────────────────────────────────────────┐
     │ Адрес начала места, отведенного для символа в видеопамяти,   │
     │ можно определить обращением к функции BASE:                  │
-    │                        BASE(5*N+2)+K*8                       │
+    │                        BASE(5*N+2)+K*8 ,                     │
     │ где:  N - номер режима экрана (0 или 1);                     │
     │       K - код ASCII символа.                                 │
     └──────────────────────────────────────────────────────────────┘
+
    Приведем пример "хранения" информации о символе в  ROM и  VRAM (справа
 для каждого байта выписан его шестнадцатеричный код, который  и задает со-
 держимое данного байта):
@@ -477,7 +473,6 @@
            7-й  байт │   │ █ │ █ │   │   │ █ │ █ │   │  &H66
                      └───┴───┴───┴───┴───┴───┴───┴───┘
                        8   4   2   1   8   4   2   1
-
    Расскажем Вам о том, как можно получить "содержимое" конкретного байта
 видеопамяти. Разобьем каждый байт на  две  половинки (два полубайта). Под
 рисунком для каждого полубайта изображено по 4 числа (каждое из  них назо-
@@ -486,7 +481,7 @@
 D,E,F). Код байта получим, если справа от кода левого  полубайта  напишем
 код правого полубайта, а слева - символ "&H".
    В н и м а н и е! Только режим SCREEN 0, а в компьютере серии MSX-2 так-
-же и режимы SCREEN 6 и SCREEN 7, поддерживают вывод символов размером 6╳8
+же и режимы SCREEN 6 и SCREEN 7, поддерживает вывод символов размером 6╳8
 точек; остальные режимы используют размер 8╳8. Приведем пример вывода  од-
 ного и того же символа в двух режимах:
 
@@ -511,32 +506,43 @@
 
    Важно отметить, что в языке MSX-BASIC есть возможность программным  пу-
 тем создавать "собственные" символы (отличные от стандартных!). Взгляните
-на приведенные ниже примеры.    Код ASCII символа "у"┐
-
+на приведенные ниже примеры. 
+                                Код ASCII символа "у"┐
    П р и м е р 4. 5  SCREEN 0:WIDTH 40               ▼
    ─────────────  10 FOR I=0 TO 7:READ M:VPOKE 2048+213*8+I,M:NEXT
                   20 DATA &H00,&H00,&H42,&H81,&H81,&H81,&H99,&H66
-
    Данные в операторе DATA опеределяют шестнадцатеричные коды каждого бай-
 та "нового" символа. Число 213 в операторе  VPOKE означает, что "построен-
 ному" нами символу присваивается код ASCII, равный 213. Если раньше  коду
 213 соответствовал символ "у", то теперь это место занял  символ, который
 мы "сконструировали". Поэтому в тех местах экрана дисплея, где встречался
 символ "у", Вы увидете новый символ.
-
-   П р и м е р 5.  5  SCREEN 0:WIDTH 80
-   ─────────────   10 FOR I=0 TO 7:READ M:VPOKE &h1000+213*8+I,M:NEXT
+                ∗
+   П р и м е р 4 .   5  SCREEN 0:WIDTH 80
+   ──────────────    10 FOR I=0 TO 7:READ M:VPOKE &h1000+213*8+I,M:NEXT
                    20 DATA &H00,&H00,&H42,&H81,&H81,&H81,&H99,&H66
 
+   П р и м е р 5.  Пример иллюстрирует возможность хранения шаблонов  сим-
+   ─────────────   волов в RAM.
+   10 CLEAR 200,&HE800                 'Место в RAM для шаблонов символов
+   20 FOR T=0 TO 2047:POKE &HE800+T,PEEK(&H1BBF+T):NEXT
+   30 FOR I=0 TO 7:READ M:POKE &HE800+213*8+I,M:NEXT
+   40 DATA &H00,&H00,&H42,&h81,&H81,&H81,&H99,&H66
+   50 POKE &HF91F,&H8B                 'Номер  с л о т а  памяти
+   60 POKE &HF920,0:POKE &HF921,&HE8   'Начальный адрес ячеек памяти,в ко
+   торых располагаются шаблоны символов
+   70 'А теперь посмотрим!
+   80 SCREEN 0:WIDTH 80:PRINT CHR$(213):A$=INPUT$(1)
+   90 SCREEN 0:WIDTH 40:PRINT CHR$(213):A$=INPUT$(1)
+   100 SCREEN 1:PRINT CHR$(213):A$=INPUT$(1)
+
    П р и м е р 6.  5 PRINT"Вводите последовательно байты шаблона символа:"
    ─────────────   10 FOR I=0 TO 7:INPUT T(I):NEXT
                    20 INPUT"Введите код изменяемого символа";K%
                    30 FOR I=0 TO 7:VPOKE 2048+K%*8+I,T(I):NEXT
-
    Отметим, что вместо переменной K% можно использовать любое арифметичес-
 кое выражение, целая часть значения которого определяет  код ASCII заменя-
 емого символа. А теперь взгляните на следующую программу!
-
    П р и м е р 7.  Изображение "псевдослучайных" символов.
    ─────────────  10 P=RND(-TIME):FOR I=0 TO 7:T(I)=INT(255*RND(1)):NEXT
                   20 K=INT(223*RND(1)+31)
@@ -547,7 +553,6 @@
 │ Таблица шаблонов образов (PGT) инициализируется вновь данными из ROM! │
 └───────────────────────────────────────────────────────────────────────┘
    Еще ряд примеров на изменение шаблонов символов:
-
    П р и м е р 8 [76]. "Мелкие" и обычные буквы латинского алфавита.
    ──────────────────
    40 SCREEN 0:KEY OFF
@@ -588,7 +593,6 @@
    430 DATA 00,00,88,50,20,50,88,00:'X
    440 DATA 00,00,88,50,20,20,20,00:'Y
    450 DATA 00,00,F8,10,20,40,F8,00:'Z
-
    П р и м е р 9.   Автограф программиста!
    ─────────────
    10 COLOR15,1,1:SCREEN 1
@@ -606,7 +610,6 @@
    CHR$(43)+CHR$(44)+CHR$(45)+CHR$(46)+CHR$(47)
    70 LOCATE 2,2:PRINTA$
    80 GOTO 80
-
    П р и м е р 10.  "Изготовление"  "т о л с т ы х"  символов!
    ──────────────
      5 SCREEN 1:A1=0:A2=255        ' Имеющийся шаблон символа сдвигается
@@ -614,13 +617,10 @@
      20 D=VPEEK(X):VPOKE X,D OR D/2'              "старым".
      30 NEXT
 
-
                                  Целью придумавших систему было, очевидно,
                                  скрыть, что в этих значках содержится ка-
                                  кой-то смысл.
-                                          Конан Дойль. Пляшущие человечки
-
-
+                                        А.Конан Дойль. Пляшущие человечки
    П р и м е р 11.   Б е г у щ и й  человечек.
    ──────────────
     5 COLOR 15,1,1:CLS:INPUT"Укажите желаемую скорость движения человечка
@@ -638,7 +638,6 @@
     166 IF Y=27 THEN Y=0
     170 NEXT:Y=Y+1:A$=INKEY$:IF A$=" " THEN END
     171 GOTO 150 '──▶
-
    Приведем шаблоны четырех символов из шести,сформированных в данной про-
 грамме:
 ┌───┬───┬───┬───┬───┬───┬───┬───┐       ┌───┬───┬───┬───┬───┬───┬───┬───┐
@@ -681,7 +680,6 @@
 из 32 байтов Таблицы CT действует на группу из 8 символов, причем за цвет
 и з о б р а ж е н и я  данной группы "отвечает" старший полубайт, а  млад-
 ший полубайт "отвечает" за цвет  ф о н а  символов.
-
                          Б а й т  Т а б л и ц ы  CT
     ┌──────────────────────────────────┬───────────────────────────┐
     │ Цвет изображения восьми символов │ Цвет фона восьми символов │
@@ -708,11 +706,10 @@
    90       FOR K=1 TO 25:NEXT K
    100   NEXT J
    110 NEXT I
-
    П р и м е р 14.  Изменение  цвета курсора (напомним Вам, что код ASCII
    ──────────────   символа "█" равен 255).
                        SCREEN 1:VPOKE &H201F,&HFF
-   Далее, команда VPOKE BASE(1*5+1)+255\8,&H28 задает цвет курсора и цвет,
+   Далее  команда VPOKE BASE(1*5+1)+255\8,&H28 задает цвет курсора и цвет,
 которым через курсор "просвечивается" тот символ, на который курсор "нало-
 жен". Если оба этих цвета совпадают, то сам курсор и символ сливаются, со-
 здавая иллюзию непрозрачности курсора.
@@ -720,7 +717,6 @@
   │  Обратите внимание на тот факт, что Таблица CT в режиме  SCREEN 1 │
   │                инициализируется оператором COLOR .                │
   └───────────────────────────────────────────────────────────────────┘
-
    П р и м е р 15.  Не поленитесь, наберите  приведенную  ниже  программу.
    ──────────────   Затем включите принтер, вставьте лист бумаги и  запус-
 тите программу. Результаты ее работы пригодятся Вам в дальнейшем!
@@ -785,16 +781,14 @@
    ─────────────────────────────────┼─────────────────────────┤
    540 RETURN
 
-            XI.1.4.   Р е ж и м ы  SCREEN 2  и  SCREEN 4
 
+            XI.1.4.   Р е ж и м ы  SCREEN 2  и  SCREEN 4
 
                                Есть медленно и умеренно, не пить во время
                                еды, тщательно разжевывать пищу и  с легко-
                                стью вставать из-за стола  с чувством, что
                                мог бы съесть еще.
                                                                Ж.Фрумузак
-
-
    Разделим экран (размером 256╳192 точек)  на  к в а д р а т ы  размером
 по 8╳8 точек. Легко подсчитать, что мы получим 768 таких квадратов.Каждый
 из них имеет свой номер, который хранится в Таблице PNT. А так как  макси-
@@ -807,13 +801,17 @@
   ┌───────────────────────────────────────────────────────────────────┐
   │ Адрес байта PNT, отвечающего за  к в а д р а т  с номером n2,     │
   │ вычисляется при помощи арифметического выражения:                 │
-  │                       BASE(5·N) + 256·n1 + n2                     │
+  │                       BASE(5·N) + 256·n1 + n2  ,                  │
   │ где:  N - номер режима SCREEN (2 или 4);                          │
   │       n1 - номер трети таблицы PNT, в которой находится квадрат;  │
   │       n2 - номер квадрата.                                        │
   └───────────────────────────────────────────────────────────────────┘
    Соответственно Таблице PNT, весь экран также разбивается на три области
 (каждая размером 256╳64 точек), которые мы будем называть  о к н а м и.
+
+
+
+
                   ┌───┬───┬─────────────────────┬───┐
                   │ 0 │ 1 │···               ···│ 31│
                   ├───┴───┘                     └───┤
@@ -833,17 +831,17 @@
                   ├───┬───┐                     ┌───┤
                   │224│225│···               ···│255│
                   └───┴───┴─────────────────────┴───┘
-   Если мы захотим изменить "что-нибудь" в Таблице PNT, это немедленно ска-
+   Если мы захотим что-то изменить в Таблице PNT, то  это  немедленно ска-
 жется на изображении в соответствующем окне. 
-   Таблица PNT редко используется при составлении программ. Более того,мож-
-но рассматривать структуру экрана, "забыв" о делении экрана на окна. Доста-
-точно при этом мысленно пронумеровать квадраты экрана от 0 до 767. 
+   Таблица PNT редко используется  при  составлении программ. Более  того,
+можно  рассматривать  структуру  экрана, "забыв" о делении экрана на окна.
+Достаточно при этом мысленно пронумеровать квадраты экрана от 0 до 767. 
+
    Покажем, как можно использовать Таблицу PNT для копирования изображения
 в пределах  о д н о г о  экранного окна. Пусть, например, Вам нужно  скопи-
 ровать изображение из квадрата с номером A в квадрат с номером B.Для этого
 в байт Таблицы PNT, отвечающий за квадрат с номером B, поместите номер ква-
 драта A. Этого достаточно для того, чтобы произошел процесс копирования!
-
    П р и м е р 1.
    ───────────── 
    10 COLOR 1,15:SCREEN 2
@@ -851,18 +849,19 @@
    30 A$=INPUT$(1)
    40 VPOKE &H1800+40,33    'Скопировали его в квадрат 40
    50 GOTO 50
+
    Более того, Вы можете заранее (до того, как будете что-то рисовать  на
-экране) "размножить" по нужным адресам номер  определенного  блока. Далее,
+экране) "размножить" по нужным адресам номер  определенного  блока. Далее
 Вам достаточно лишь заполнить изображением тот квадрат,номер которого был
 "размножен",и, к Вашей радости,это изображение появится и в других местах!
-
    П р и м е р 2.
    ─────────────
    10 COLOR 1,15:SCREEN 2
    20 VPOKE &H1800+40,33               'Квадрат 40 подготовлен для приема
    30 A$=INPUT$(1)                     'копии из квадрата 33
    40 LINE(8,8)-(15,15),,BF            'Сформировано изображение в 33-м и
-   50 GOTO 50                          'в 40-м квадрате
+   50 GOTO 50                          'в 40-м квадратах
+
    Если же Вы захотите скопировать какой-либо элемент  в  другое  о к н о
 экрана, то Вам поможет работа с Таблицами PGT и CT,к рассмотрению которых
 мы и переходим.
@@ -870,10 +869,11 @@
 будем называть  л и н и я м и .
    Информация о каждой линии (1 байт) содержится в Таблице PGT.
    Следовательно, объем этой Таблицы равен 768╳8 = 6144 байтам.
+
       ┌───────────────────────────────────────────────────────────┐
       │    Адрес байта Таблицы PGT, отвечающего за расположение   │
       │    л и н и и  вычисляется  при  помощи  арифметического   │
-      │    выражения     BASE(5·N+2) + (256·n1+n2)·8 + k          │
+      │    выражения     BASE(5·N+2) + (256·n1+n2)·8 + k  ,       │
       │    где:  N  - номер режима SCREEN;                        │
       │          n1 - номер окна;                                 │
       │          n2 - номер квадрата в этом окне;                 │
@@ -882,7 +882,6 @@
    Отметим, что если в Таблице PNT были изменения, то могут возникнуть за-
 труднения при попытке "нарисовать" что-либо в квадрате  с измененным номе-
 ром.
-
    П р и м е р 3.
    ─────────────
    10 COLOR 1,15:SCREEN 2
@@ -890,6 +889,7 @@
    30 A$=INPUT$(1)                'Ждем нажатия клавиши!
    40 LINE(64,8)-(71,15),,BF      'Попытка вывести изображение в квадрате
    50 GOTO 50                     '40 не привела к ожидаемому результату!
+
    Так как информация о линии хранится в одном байте, то каждой точке  ли-
 нии  соответствует  определенный бит этого байта. Оказывается, что "высве-
 тить точку на экране" - это значит установить нужный бит в 1,"стереть точ-
@@ -923,20 +923,20 @@
       ┌─────────────────────────────────────────────────────────────┐
       │ одновременно на экране может быть  не  б о л е е  16 цветов │.
       └─────────────────────────────────────────────────────────────┘
-┌───────────────────────────────────────────────────────────────────────┐
-│Вследствие этого,изменение цвета одной точки приводит к переопределению│
-│            цвета  и з о б р а ж е н и я   в с е й  линии!             │
-└───────────────────────────────────────────────────────────────────────┘
+   ┌──────────────────────────────────────────────────────────────────┐
+   │     Вследствие этого изменение цвета одной точки приводит к      │
+   │  переопределению цвета  и з о б р а ж е н и я   в с е й  линии!  │
+   └──────────────────────────────────────────────────────────────────┘
+
       ┌───────────────────────────────────────────────────────────┐
       │  Адрес байта Таблицы CT, отвечающего за  ц в е т  линии,  │
       │  вычисляется при помощи арифметического выражения:        │
-      │               BASE(5·N+1) + (256·n1+n2)·8 + k             │
+      │               BASE(5·N+1) + (256·n1+n2)·8 + k  ,          │
       │    где: N  - номер режима SCREEN;                         │
       │         n1 - номер окна;                                  │
       │         n2 - номер квадрата в этом окне;                  │
       │         k  - номер линии в этом квадрате.                 │
       └───────────────────────────────────────────────────────────┘
-
    П р и м е р 4.  Предположим, что Вам захотелось в 5-й линии 58-го квад-
    ─────────────   рата  2-го окна в режиме SCREEN 2 точки 0÷3 изобразить
 цветом 3, а точки 4÷7 - цветом 15.
@@ -947,7 +947,6 @@
    50 VPOKE A,&H3F
    60 GOTO 60
    А теперь - давно обещанный Вам пример...
-
    П р и м е р 5.  Копирование содержимого 0-го квадрата из 0-го окна  в
    ──────────────  содержимое 0-го квадрата 2-го окна
    10 COLOR 15,1,1:SCREEN2
@@ -956,10 +955,9 @@
    30 VPOKE BASE(5*2+2)+(256*2+0)*8+I,VPEEK(BASE(5*2+2)+(256*0+0)*8+I): 
    'Копирование изображения
    35 VPOKE BASE(5*2+1)+(256*2+0)*8+I,VPEEK(BASE(5*2+1)+(256*0+0)*8+I):
-   'Копирования цвета
+   'Копирование цвета
    40 NEXT
    50 GOTO 50
-
    П р и м е р 6. Изобразим квадрат,  стороны которого имеют разные цвета,
    ─────────────  не используя оператор PSET.
    10 SCREEN 2
@@ -987,6 +985,7 @@
 вечающего за данную точку ("т о ч н а я  настройка").
    Трудность  состоит  в  несоответствии номеров битов в байте и значений
 Х-координат тех точек, за которые этот байт отвечает:
+
               ┌────────────┬───┬───┬───┬───┬───┬───┬───┬───┐
               │   Х MOD 8  │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │
               ├────────────┼───┼───┼───┼───┼───┼───┼───┼───┤
@@ -1003,14 +1002,12 @@
                └───────────────────────────────────────────┘
    И...точка появится  в требуемом месте экрана.
    4. Наконец, изменим цвет изображения выведенной точки:
-                    ┌────────────────────────────────┐
-                    │ А д р е с = А д р е с + &h2000 │
-                    └────────────────────────────────┘
           ┌────────────────────────────────────────────────────┐
+          │           А д р е с = А д р е с + &h2000           │
+          │                                                    │
           │ VPOKE  А д р е с, VPEEK(А д р е с) MOD 16 + COL*16 │ ,
           └────────────────────────────────────────────────────┘
 где COL - номер цвета.
-
    Опишем алгоритм работы видеопроцессора при выводе содержимого квадрата
 8╳8 на графические экраны SCREEN 2 или SCREEN 4.
    Предположим, что нам известно местоположение данного квадрата  на экра-
@@ -1045,16 +1042,14 @@
 │ "Запишем" информацию о цвете в Таблицу CT по адресам:               │
 │ (Y\8)*2048+N*8 , (Y\8)*2048+N*8+1,(Y\8)*2048+N*8+2,(Y\8)*2048+N*8+3,│
 │ (Y\8)*2048+N*8+4,(Y\8)*2048+N*8+5,(Y\8)*2048+N*8+6,(Y\8)*2048+N*8+7,│
-│ в результате квадрат с координатами (X,Y) будет раскрашен в нужные  │
-│ Вам цвета                                                           │
+│ в результате квадрат (X,Y) будет раскрашен в нужные Вам цвета.      │
 └─────────────────────────────────────────────────────────────────────┘
-
    П р и м е р 7.
    ─────────────
    10 COLOR 1,15,8:SCREEN 2:X=5:Y=10
    20 N=VPEEK(BASE(5*2+0)+(Y\8)*256+(YMOD8)*32+X) 'Видеопроцессор "опраши-
-   вает" байт номер 69 в окне 1 Таблицы PNT и находит значение N (N=69, е
-   сли Таблица PNT не изменялась)
+   вает" байт номер  69  в окне 1  Таблицы PNT и находит значение N (N=69,
+   если Таблица PNT не изменялась)
    30 FOR I=0 TO 7
    40 VPOKE(&H800+N*8+I),&B11100011'Таблица PGT разделена на три окна,каж
    дое из которых содержит по 2048 байтов. Следовательно, окно 1 этой Таб
@@ -1068,8 +1063,8 @@
    10 SCREEN 2:X=15:Y=12
    20 A=VPEEK(BASE(5*2+0)+(Y\8)*256+(YMOD8)*32+X) '"Смотрим" PNT
    30 FOR I=0 TO 7
-   40   VPOKE(BASE(5*2+2)+(Y\8)*2048+A*8+I),&b11100011 'Формируем "содерж
-        имое" квадрата
+   40   VPOKE(BASE(5*2+2)+(Y\8)*2048+A*8+I),&b11100011
+        'Формируем "содержимое" квадрата
    50 NEXT
    60 GOTO 60
 
@@ -1078,8 +1073,8 @@
    10 SCREEN 2:X=15:Y=12
    20 A=VPEEK(BASE(5*2+0)+(Y\8)*256+(YMOD8)*32+X) '"Смотрим" Таблицу PNT
    30 FOR I=0 TO 7
-   40   VPOKE(BASE(5*2+2)+(Y\8)*2048+A*8+I),&B11100011 'Формируем "содерж
-        имое" квадрата
+   40   VPOKE(BASE(5*2+2)+(Y\8)*2048+A*8+I),&B11100011
+        'Формируем "содержимое" квадрата
    50 NEXT
    60 FOR I=0 TO 7
    70   VPOKE(BASE(5*2+1)+(Y\8)*2048+A*8+I),&H8A ' "Раскрасим" квадрат
@@ -1090,7 +1085,6 @@
 (X,Y), в которой Х изменяется от 0 до 255, а Y от 0 до 191. Следующий при-
 мер иллюстрирует, как эта система координат соотносится с делением экрана
 на квадраты.
-
    П р и м е р 10.
    ──────────────
    10 SCREEN 2:X=100:Y=75
@@ -1108,6 +1102,7 @@
    110 GOTO 110
    Сначала будет нарисована белая точка на черном фоне. Когда  Вы нажмете
 любую клавишу, эта точка приобретет красный цвет.
+
    При программировании на MSX-BASIC этот способ формирования изображения
 применяется редко. Однако, если Вы хотите нарисовать  что-либо  с помощью
 программы на  м а ш и н н о м   я з ы к е, то  приведенный  выше алгоритм
@@ -1157,7 +1152,6 @@
       мен значений между ячейками видеопамяти!
       50 IF T=31 THEN VPOKE 6400+T,T:VPOKE 6400,0
       60 NEXT T:GOTO 30
-
   15) 10 CLEAR 200,&HC300:SCREEN 2
       20 CIRCLE(90,70),56:PAINT STEP(0,0) 'Сформировано изображение
       25 'Сохраняем изображения в памяти (RAM)
@@ -1173,6 +1167,7 @@
       *2+2)+6144+I):NEXT
       90 A$=INPUT$(1) 'Программа работает ≈ 5 минут
 
+
                    XI.1.5.   Р е ж и м  SCREEN 3
 
    Как и в режиме SCREEN 2, экран в режиме SCREEN 3 разбит на к в а д р а-
@@ -1180,7 +1175,6 @@
 л и н и и   толщиной четыре точки (на экране расположено  32╳48 "толстых"
 линий). Каждая из  этих "толстых" линий  разбита  на  две "большие" точки
 (4╳4 "маленьких" точек).
-
           ──▲──┌────┬────┬────┬────┐  ┌────┬────┬────┬────┐
             │  │    │    │    │    │  │    │    │    │████│◀── "Маленькая"
             │  │────│────│────│────│  │────│────│────│────│       точка
@@ -1201,14 +1195,12 @@
                ├────┴────┴────┴────┘  └────┴────┴────┴────┤
                │◀─────────────"Длина" линии ─────────────▶│
 
-
    Каждая из "больших" точек может быть раскрашена только в  о д и н цвет.
 Попытка расположить в "большой" точке "маленькую" точку другого цвета при-
 ведет к  и з м е н е н и ю  цвета  в с е й  "большой" точки.
    Информация о цвете "толстой" линии находится в Таблице PGT, причем  ле-
 вый полубайт байта PGT кодирует цвет левой "большой" точки  "толстой"  ли-
 нии, а правый полубайт отвечает за цвет правой "большой" точки.
-
                               Б а й т  PGT
                    ┌───┬───┬───┬───┬───┬───┬───┬───┐
                    │ 1 │ 0 │ 0 │ 0 │ 1 │ 0 │ 1 │ 0 │
@@ -1216,12 +1208,10 @@
                     └──────▲──────┘ └──────▲──────┘
                            │               │
         Цвет левой "большой" точки     Цвет правой "большой" точки
-
      ┌─────────────────────────────────────────────────────────────┐
      │   Поскольку один байт Таблицы PGT кодирует цвета "толстой"  │
      │   линии,то эта Таблица требует 32 ╳ 48 = 1536 байтов VRAM   │
      └─────────────────────────────────────────────────────────────┘
-
    П р и м е р 1.  10 SCREEN 3:OPEN"GRP:" AS#1
    ─────────────   20 PSET(8,0),3:PSET(12,0),1 'Рисуем "толстую" линию
                    30 PSET(30,80):PRINT #1,HEX$(VPEEK(8))
@@ -1244,7 +1234,7 @@
     ├────┼────┼────┼─────┼────┤      40 VPOKE BASE(5*3+2)+8,&H78
     │  4 │ 12 │ 20 │ ... │ 252│      50 VPOKE BASE(5*3+2)+9,&H9A
     ├────┼────┼────┼─────┼────┤      60 A$=INPUT$(1)
-    │  5 │ 13 │ 21 │ ... │ 253│    Выполнив эту программу Вы можете
+    │  5 │ 13 │ 21 │ ... │ 253│      Выполнив  эту  программу, Вы сможете
     ├────┼────┼────┼─────┼────┤   убедиться в правильности заполнения дан-
     │  6 │ 14 │ 22 │ ··· │ 254│   ной таблички.
     ├────┼────┼────┼─────┼────┤
@@ -1267,7 +1257,6 @@
       ┌──┬──┬──┬─▼┬──┬──┬──┬──┐
       │ 1│ 0│ 0│ 0│ 0│ 0│ 1│ 0│
       └──┴──┴──┴──┴──┴──┴──┴──┘
-
   Байт из Таблицы PGT (в нем хранится цвет "толстой" линии с номером 1302)
    Приведем таблицу,  по которой можно определить адрес байта Таблицы PGT,
 отвечающего за точку (X,Y), в режимах 2÷4 :
@@ -1278,10 +1267,8 @@
        ├──────────────┼────────────────────────────────────────────┤
        │      3       │ BASE(5*3+2)+(Х\8)*8+(Y\32)*256+(Y\4) MOD 8 │
        └──────────────┴────────────────────────────────────────────┘
-
    П р и м е р 1. Заполнение экрана черными и белыми клетками в шахматном
    ─────────────  порядке.
-   10 'Шахматная доска
    20 COLOR 15,1,1:CLS:SCREEN 3
    50 FOR I=0 TO 7 STEP 2
    60    VPOKE I,&HF1:VPOKE I+1,&H1F
@@ -1291,26 +1278,34 @@
    100 NEXT
    110 GOTO 110
 
-   Таблица PGT разбита на 192 "кусочка" размером по 8 байт. Каждый  "кусо-
-чек" отвечает за 4 квадрата размером  2╳2 "больших" точки (такой  квадрат
-называется  и м е н е м). Упомянутые 4 имени имеют  один  и  тот же номер,
+   Таблица PGT разбита на 192 "кусочка" размером по 8 байтов. Каждый  "ку-
+сочек" отвечает за 4 квадрата размером  2╳2  "больших" точки (такой  квад-
+рат называется  и м е н е м).Упомянутые 4 имени имеют один и тот же номер,
 который записывается в Таблицу PNT.
+
    Но  п е р в ы й  квадрат - это имя с данным номером для  строк (строка
 имеет высоту 2 "большие" точки) с номерами   0, 4,  8, 12, 16, 20;
    в т о р о й       - для строк с номерами  1, 5,  9, 13, 17, 21;
    т р е т и й       - для строк с номерами  2, 6, 10, 14, 18, 22;
    ч е т в е р т ы й - для строк с номерами  3, 7, 11, 15, 19, 23.
-   Следовательно, весь экран разбит на  ч е т ы р е  о к н а (понятие  эк-
-ранного окна см. в описании режима SCREEN 2).
+
+     ┌─────────────────────────────────────────────────────────────┐
+     │  Следовательно, весь экран разбит на  ч е т ы р е  о к н а  │
+     └─────────────────────────────────────────────────────────────┘
+(понятие экранного окна см. в описании режима SCREEN 2).
+
      ┌───────────────────────────────────────────────────────────┐
      │  За имя с номером N в окне с номером M отвечают байты PGT │
      │                   N·8+M·2 и N·8+M·2+1,                    │
      │  где N∈[0,191], a M∈[0,3]                                 │
      └───────────────────────────────────────────────────────────┘
+
+
    Приведем структуру PGT с учетом разбивки экрана на имена и окна.
+
             ┌────┬────┬────┬─────┬────┐
 Номер имени │  0 │  1 │  2 │ ··· │ 15 │
-    N       ├────┼────┼────┼─────┼────┤
+    N       │    │    │    │     │    │
             ├────┼────┼────┼─────┼────┤ ─┐
             │  0 │  8 │ 16 │ ··· │ 248│  │
             ├────┼────┼────┼─────┼────┤  ├─ Имя с номером N для окна 0
@@ -1340,8 +1335,8 @@
             └────┴────┴────┴─────┴──▲─┘ ─┘
                                     └─ Имя с номером 191
 
-    Приведем структуру PNT с номерами имен и их расположением на экране:
 
+    Приведем структуру PNT с номерами имен и их расположением на экране:
       0   1   2   3   .   .   .   31 ◀─ Номер столбца
     ┌───┬───┬───┬───┬───┬───┬───┬────┐
   0 │ 0 │ 1 │ 2 │ 3 │...│...│...│ 31 │  Окно 0: строки 0,4, 8,12,16,20
@@ -1363,14 +1358,12 @@
   23│160│161│...│...│...│189│190│ 191│
   ▲ └───┴───┴───┴───┴───┴───┴───┴────┘
   └─ Номер строки
-
    ┌─────────────────────────────────────────────────────────────────┐
    │   Номер имени в квадрате с координатами X,Y (X∈[0,31],Y∈[0,23]) │
    │   хранится в ячейке VRAM с адресом:                             │
-   │                       BASE(5*3+0)+(Y╲4)*32+X                    │
-   │   Это имя находится в окне с номером  Y MOD 4                   │
+   │                       BASE(5*3+0)+(Y╲4)*32+X  .                 │
+   │   Это имя находится в окне с номером  Y MOD 4 .                 │
    └─────────────────────────────────────────────────────────────────┘
-
 П р и м е р 2.
 ─────────────
    10 COLOR 15,1,1:CLS:SCREEN 3
@@ -1399,6 +1392,8 @@
    Вначале приведем важную табличку, которая поможет Вам определить адрес
 байта Таблицы PNT, отвечающего за точку с координатами (X,Y), в различных
 режимах SCREEN:
+
+
               ┌────────────┬──────────────────────────────┐
               │Режим экрана│ А д р е с  б а й т а  в  PNT │
               ├────────────┼──────────────────────────────┤
@@ -1408,8 +1403,8 @@
               │  SCREEN 8  │   BASE(5*8)+(256/1)*Y+(X\1)  │
               └────────────┴──────────────────────────────┘
 
-   1. В режиме SCREEN 5 экран разделен на 212 строк, состоящих  из 256 то-
-чек каждая, или на 192 строки, состоящих из 256 точек каждая.
+   1. В режиме SCREEN 5 экран разделен на  212  строк (или на 192 строки),
+состоящих из 256 точек каждая.
    Совокупность двух точек по горизонтали будем называть л и н и е й (точ-
 ки 0 и 1 образуют  1-ю линию , точки 2 и 3 - 2-ю линию ,..., точки  254 и
 255 - 128-ю линию).
@@ -1420,7 +1415,6 @@
    Первый байт Таблицы PNT "хранит" информацию  о  цвете первой линии пер-
 вой строки экрана, второй байт - о цвете второй линии той же строки,и так
 далее:
-
          1-й байт Таблицы PNT                 2-й байт Таблицы PNT
 ┌─────────────────┬─────────────────┐┌─────────────────┬─────────────────┐
 │ Цвет  1-й точки │ Цвет  2-й точки ││ Цвет  1-й точки │ Цвет  2-й точки │
@@ -1430,7 +1424,6 @@
         │    Таблица PNT инициализируется цветом фона, который   │
         │           устанавливается оператором COLOR             │
         └────────────────────────────────────────────────────────┘
-
    П р и м е р 1.  Изобразим в режиме SCREEN 5 точку с координатами (X,Y)
    ──────────────  белым цветом.
    10 COLOR 15,4,7:INPUT"X,Y";X,Y
@@ -1439,12 +1432,9 @@
                                       ▼▼
    40 IF XMOD2=0 THEN C=&HF4 ELSE C=&H4F'Если не будет этого условия, то
    изобразятся  д в е  соседние точки
-   50 VPOKE AD,C   'Вы легко можете убедиться,что этот оператор эквивален
-   тен оператору PSET(X,Y),15.
+   50 VPOKE AD,C   ' Этот оператор эквивалентен оператору PSET(X,Y),15.
    60 GOTO 60
-
    Приведем схематическое изображение PNT для режима SCREEN 5.
-
  ┌──────────────┐
  │     0-й байт │- отвечает за точки с координатами     (0,0) и     (1,0)
  ├──────────────┤
@@ -1463,20 +1453,19 @@
  │ 27135-й байт │- отвечает за точки с координатами (254,211) и (255,211)
  └──────────────┘
 
-   2. В режиме SCREEN 6 экран имеет 212 строк из 512 точек или 192 строки
-по 512 точек в каждой строке. Количество байтов в Таблице PNT точно такое
-же, как и в Таблице PNT режима SCREEN 5: информация об одной строке  экра-
-на кодируется в 128 байтах.
+   2. В режиме SCREEN 6 экран имеет 212 строк (или 192 строки) по  512 то-
+чек в каждой строке. Количество байтов в Таблице PNT точно такое же,как и
+в Таблице PNT режима SCREEN 5: информация об одной строке экрана кодирует-
+ся в 128 байтах.
    Л и н и я  в режиме  SCREEN 6  состоит из четырех точек и кодируется в
 о д н о м  байте. А тогда  п а л и т р а  каждой точки кодируется в  двух
 битах, а так как из двух двоичных цифр можно составить только четыре  ком-
-бинации (00,01,10,11), то каждую точку экрана можно раскрасить  не  более,
+бинации (00,01,10,11), то каждую точку экрана можно раскрасить  не  более
 чем  ч е т ы р ь м я  различными способами. Так, например, оператор
                            VPOKE 0,&B11100100
 присваивает палитру 3 первой точке первой линии, палитру 2 - второй точке
 первой линии, палитру 1 - третьей точке первой линии и палитру 0 - четвер-
 той точке первой линии.
-
                        Б а й т  Т а б л и ц ы  PNT
                     ┌───┬───┬───┬───┬───┬───┬───┬───┐
                     │ 1 │ 1 │ 1 │ 0 │ 0 │ 1 │ 0 │ 0 │
@@ -1486,53 +1475,50 @@
                       Палитра Палитра Палитра Палитра
                       первой  второй  третьей четвертой
                       точки   точки    точки   точки
-
         ┌──────────────────────────────────────────────────────┐
         │    Таблица PNT инициализируется последними двумя     │
-        │   битами цвета фона, задаваемого в операторе COLOR   │
+        │   битами цвета фона, задаваемого в операторе COLOR.  │
         └──────────────────────────────────────────────────────┘
    Поясним сказанное примером. Если цвет фона имеет номер 13=&B1101, то в
 каждый байт Таблицы PNT будет занесено число  &B01010101 (четыре раза пов-
 торяются последние два бита кода цвета фона).
    Приведем схематическое изображение PNT для режима SCREEN 6.
         ┌─────────┬─────────┬─────────┬─────────┐
-        │  (0,0)  │  (1,0)  │  (2,0)  │  (3,0)  │      0-й байт               
+           0-й байт  │  (0,0)  │  (1,0)  │  (2,0)  │  (3,0)  │
         ├─────────┼─────────┼─────────┼─────────┤
-        │  (4,0)  │  (5,0)  │  (6,0)  │  (7,0)  │      1-й байт 
+           1-й байт  │  (4,0)  │  (5,0)  │  (6,0)  │  (7,0)  │
         ├─────────┼─────────┼─────────┼─────────┤
-        │   ···   │   ···   │   ···   │   ···   │        ···
+             ···     │   ···   │   ···   │   ···   │   ···   │
         ├─────────┼─────────┼─────────┼─────────┤
-        │ (508,0) │ (509,0) │ (510,0) │ (511,0) │    127-й байт
+         127-й байт  │ (508,0) │ (509,0) │ (510,0) │ (511,0) │
         ├─────────┼─────────┼─────────┼─────────┤ 
-        │  (0,1)  │  (1,1)  │  (2,1)  │  (3,1)  │    128-й байт
+         128-й байт  │  (0,1)  │  (1,1)  │  (2,1)  │  (3,1)  │
         ├─────────┼─────────┼─────────┼─────────┤
-        │   ···   │   ···   │   ···   │   ···   │        ···
+             ···     │   ···   │   ···   │   ···   │   ···   │
         ├─────────┼─────────┼─────────┼─────────┤
-        │(508,211)│(509,211)│(510,211)│(511,211)│  27135-й байт
+       27135-й байт  │(508,211)│(509,211)│(510,211)│(511,211)│
         └─────────┴─────────┴─────────┴─────────┘
 
-   3. Как и в режиме SCREEN 6,в режиме SCREEN 7 на экране расположено 212
-строк, состоящих из 512 точек каждая, или  512  строк, состоящих  из  192
-строк каждая. Однако, один байт Таблицы  PNT  кодирует  л и н и ю, состоя-
-щую из  д в у х  точек: старшие четыре бита определяют палитру левой  точ-
-ки, младшие четыре - палитру правой  точки.
-
+   3. Как и в режиме SCREEN 6, в режиме  SCREEN 7  на экране  расположено
+212 строк (или 192 строки), состоящих из  512 точек  каждая. Однако  один
+байт Таблицы PNT кодирует  л и н и ю, состоящую  из  д в у х  точек: стар-
+шие четыре бита определяют палитру левой точки, младшие  четыре - палитру
+правой точки.
          1-й байт Таблицы PNT                2-й байт Таблицы PNT
  ┌────────────────┬────────────────┐ ┌────────────────┬────────────────┐
  │ Палитра первой │ Палитра второй │ │ Палитра первой │ Палитра второй │
  │ точки 1-й линии│ точки 1-й линии│ │ точки 2-й линии│ точки 2-й линии│
  └────────────────┴────────────────┘ └────────────────┴────────────────┘
-
    Следовательно, каждой точке может быть присвоена любая из 16 палитр.
    Поскольку для кодирования номера палитры необходимо четыре бита, то Таб-
 лица PNT занимает объем  212╳512/2 = 54272 байта.
    Уже отсюда становится понятно, что для использования этого режима VRAM
-должна иметь объем не менее 128 Кбайт!
+должна иметь объем не менее 128 Кбайтов!
    Режим SCREEN 7 аналогичен режиму SCREEN 5, за исключением того, что  в
 режиме SCREEN 7 в строке экрана в два раза  б о л ь ш е  точек.
         ┌────────────────────────────────────────────────────────┐
         │    Таблица PNT инициализируется цветом фона, который   │
-        │              устанавливает оператор COLOR              │
+        │              устанавливает оператор COLOR .            │
         └────────────────────────────────────────────────────────┘
    Приведем схематическое изображение PNT для режима SCREEN 7.
  ┌──────────────┐
@@ -1558,10 +1544,10 @@
    Л и н и я  состоит из одной-единственной точки. Цвет линии  здесь  уже
 определяется не кодом палитры, а непосредственным  заданием "смеси" основ-
 ных цветов. Этот оригинальный способ кодирования цвета требует по  одному
-б а й т у (!) на линию, а, значит, на точку!  Поэтому  Таблица  PNT имеет
+б а й т у (!) на линию, а  значит, на точку!  Поэтому  Таблица  PNT имеет
 объем                     212·256=54272 байта.
    Уже отсюда становится понятно, что для использования этого режима VRAM
-должна иметь объем не менее 128 Кбайт!
+должна иметь объем не менее 128 Кбайтов!
    Информация о линии с координатами (X,Y)  находится  по адресу
                                  X+256·Y
 в Таблице PNT. Для высвечивания этой линии достаточно занести по этому ад-
@@ -1573,7 +1559,6 @@
 зеленого ("Green"), красного ("Red") и  синего ("Blue") цветов  соответст-
 венно. Например, цвету с номером  187=&b10111011  соответствует следующее
 "содержимое" байта Таблицы PNT:
-
                         Б а й т  Т а б л и ц ы  PNT
                     ┌───┬───┬───┬───┬───┬───┬───┬───┐
                     │ 1 │ 0 │ 1 │ 1 │ 1 │ 0 │ 1 │ 1 │
@@ -1583,6 +1568,7 @@
                      зеленого      красного      синего
                      цвета          цвета        цвета
 
+
        ┌────────────────────────────────────────────────────────┐
        │    При инициализации байты Таблицы PNT получают номер  │
        │ цвета фона (который изменяется в пределах от 0 до 255).│
@@ -1606,9 +1592,10 @@
              │ 54271-й байт │- отвечает за точку с координатами (256,211)
              └──────────────┘
 
+
 XI.1.7.  Т а б л и ц а  п а л и т р  (д л я  к о м п ь ю т е р о в  MSX-2)
 
-   Независимо от режима SCREEN, Таблица PT занимает  в видеопамяти  объем
+   Независимо от режима SCREEN  Таблица PT занимает  в видеопамяти  объем
 32 байта. "Местоположение" этой Таблицы зависит от режима SCREEN.
      ┌────────────────────────┬──────────┬─────────────────────────┐
      │       Р е ж и м        │ А д р е с│  К о м м е н т а р и й  │
@@ -1627,7 +1614,7 @@
    Каждая из палитр закодирована в  д в у х  байтах.
  ┌──────────────────────────────────────────────────────────────────────┐
  │ Адрес AD первого байта палитры N в Таблице PT вычисляется по формуле:│
- │                                AD=A0+2·N                             │
+ │                                AD=A0+2·N  ,                          │
  │ где А0-адрес начала Таблицы PT (например,в режиме SCREEN 1 Таблица PT│
  │ начинается по адресу &h2020).                                        │
  └──────────────────────────────────────────────────────────────────────┘
@@ -1636,6 +1623,12 @@
 0÷2 - пропорцию  с и н е г о  цвета. Байт Таблицы PT с адресом  AD+1 опре-
 деляет пропорцию зеленого цвета, закодированную в битах 0÷2 :
 
+
+
+
+
+
+
              7   6   5   4   3   2   1   0  ◀──  Номера битов
            ┌───┬───┬───┬───┬───┬───┬───┬───┐
       AD   │   │ ∗ │ ∗ │ ∗ │   │ ∗ │ ∗ │ ∗ │◀──────┐
@@ -1648,7 +1641,6 @@
            └───┴───┴───┴───┴───┴───┴───┴───┘
                                └─────▲─────┘
                                      └── Зеленый цвет ("Green")
-
    П р и м е р 2.  "Чтение" Таблицы  палитр в режиме  SCREEN 1.  Выполнив
    ──────────────  программу, Вы узнаете, каким образом  оператор  SCREEN
 инициализирует Таблицу PT.
@@ -1663,7 +1655,6 @@
 
    Отметим, что оператор COLOR=(···) переопределяет байты Таблицы PT в со-
 ответствии с указанной палитрой.
-
    П р и м е р 3.  Изменим Таблицу PT и вновь "прочитаем" ее.
    ─────────────
    10 COLOR 1,15,7:SCREEN 1
@@ -1678,14 +1669,13 @@
 меняется и цвет бордюра!
 
    Разумеется, палитры  в  Таблице PT  могут быть  изменены и операторами
-VPOKE. Однако, следует отметить, что  изменение  Таблицы  PT  операторами
+VPOKE. Однако  следует отметить, что  изменение  Таблицы  PT  операторами
 VPOKE само по себе не приводит к изменению цветов. Для считывания содержи-
 мого Таблицы PT и присвоения цвета новой палитре  существует  специальный
 оператор. Его синтаксис предельно прост:
                             ┌─────────────────┐
                             │ COLOR = RESTORE │  .
                             └─────────────────┘
-
    П р и м е р 4.
    ─────────────
    10 COLOR 1,15,7:SCREEN 1
@@ -1708,7 +1698,6 @@
                                         Вопрос в том, кто за это отвечает?
                                                             Шалтай-Болтай
 
-
                          XI.1.8.  С п р а й т ы
 
    Видеопроцессор имеет  д в а  режима отображения спрайтов. Режим отобра-
@@ -1720,7 +1709,7 @@
    Если же в Вашей программе присутствует один из операторов:
               SCREEN 4,SCREEN 5,SCREEN 6,SCREEN 7,SCREEN 8,
 то Вы находитесь в  р е ж и м е   с п р а й т о в  2. 
-   Вкратце напомним уже известные нам результаты.
+   Вкратце напомним уже известные Вам результаты.
    В  р е ж и м е   с п р а й т о в  1  на экран одновременно можно вывес-
 ти 32 спрайта с номерами от 0 до 31. Спрайты с  м е н ь ш и м и  номерами
 имеют более высокий приоритет. На одной горизонтальной линии экрана разме-
@@ -1734,11 +1723,12 @@
    Кроме того, если на одной горизонтальной линии находятся  п я т ь  или
 более спрайтов, то 6-й бит регистра состояния будет установлен в 1,а пять
 младших битов зафиксируют номер пятого спрайта.
+
    В  р е ж и м е   с п р а й т o в  2  на экран одновременно можно вывес-
 ти 32 спрайта, пронумерованных от 0 до 31. Спрайты с  м е н ь ш и м и  но-
 мерами имеют более высокий приоритет.На одной горизонтальной линии экрана
 изображается до  в о с ь м и  спрайтoв с высшим приоритетoм, а в  перекры-
-вающийся части спрайты с меньшим приоритетом не видны.
+вающейся части спрайты с меньшим приоритетом не видны.
    Столкновение  д в у х  спрайтов обнаруживается по состоянию 5-го  бита
 регистра состояния с номером 0 (он устанавливается  в 1). Интересно  отме-
 тить, что в этом случае координаты столкновения фиксируются  в  регистрах
@@ -1747,21 +1737,19 @@
 или более спрайтов, то 6-й бит регистра состояния с номером 0 будет  уста-
 новлен в 1, а 5 младших битов этого регистра зафиксируют  номер  девятого
 спрайта.
+
    В режимах SCREEN 1 ÷ SCREEN 3 спрайты задаются при помощи двух Таблиц:
    1) Таблицы  ш а б л о н о в    спрайтов (SGT);
    2) Таблицы  а т р и б у т о в  спрайтов (SAT);
    В режимах SCREEN 4 ÷ SCREEN 8 дополнительно используется еще и
    3) Таблица  ц в е т о в  спрайтов (SCT).
-
    В этом разделе мы расскажем Вам о каждой Таблице.
 
-
-                          Ш а б л о н (от нем. Schablone-образец, модель),
+                          Ш а б л о н (от нем. Schablone-образец, модель)-
                           пластина с вырезами, очертания которых  соответ-
                           ствуют контуру чертежа, изделия и т.п.
                                       Советский Энциклопедический Словарь
 
-
    1. Таблица SGT содержит образы спрайтов (которые ниже  мы  будем  назы-
 вать  ш а б л о н а м и), установленные оператором
               SPRITE$(N)= с т р о к о в о е  в ы р а ж е н и е
@@ -1771,7 +1759,7 @@
 руют всю видеопамять.
    2048 байтов Таблицы SGT позволяют хранить информацию  о  256  шаблонах
 спрайтов, если  в т о р ы м  параметром в операторе SCREEN является 0 или
-1, и информацию о 64-х шаблонах, если этот параметр равен 2 или 3.
+1, и информацию о 64 шаблонах, если этот параметр равен 2 или 3.
    Адрес шаблона спрайта в Таблице SGT, созданного при  помощи  оператора
 SPRITE$(N)=···, вычисляется по формуле:
                   ┌───────────────────────────────────┐
@@ -1780,18 +1768,19 @@
                   │ где  А0 - адрес начала Таблицы SGT│ .
                   └───────────────────────────────────┘
    Напомним Вам,что начальный адрес Таблицы SGT для разных режимов SCREEN
-возвращает функция BASE():      BASE(M*5+4)
+возвращает функция BASE():      BASE(M*5+4) ,
 где M - номер режима SCREEN.
      ┌──────────────────────────────────────────────────────────────┐
-     │  Байты шаблона записаны в Таблице SGT в том же порядке, как  │
+     │  Байты шаблона записаны в Таблице SGT в том же порядке, что  │
      │  и байты (символы!) значения строкового выражения, стоящего  │
      │           в правой части оператора  SPRITE$(N)=···           │
      └──────────────────────────────────────────────────────────────┘
    Теперь, надеемся, Вам понятно, что действие, например, операторов:
                      SCREEN 1:SPRITE$(0)=STRING(8,255)
 эквивалентно действию цикла: FOR I=0 TO 7:VPOKE &H3800+I,255:NEXT
-   П р и м е р 1.                               ───▲──
-   ──────────────                                  └─ BASE(1*5+4)
+                                                ───▲──
+   П р и м е р 1.                                  └─ BASE(1*5+4)
+   ──────────────
    10 SCREEN 1,0
    20 A$="Microsoft"        8 байтов        8 байтов          8 байтов
    30 FORI=1TOLEN(A$):┌────────────────┬────────────────┬────────────────┐
@@ -1802,14 +1791,15 @@
    70 PRINT SPRITE$(2)                            BASE(1*5+4)+8*2
 
 
-         Атрибут (от лат. Attribuo - придаю, наделяю), необходимое,сущест-
-         венное, неотъемлемое свойство объекта.
-                                      Советский Энциклопедический Словарь
 
+                           Атрибут (от лат. Attribuo - придаю, наделяю) - 
+                           необходимое, существенное, неотъемлемое свойст-
+                           во объекта.
+                                      Советский Энциклопедический Словарь
 
    2. В 128 байтах Таблицы атрибутов спрайтов (Таблицы SAT) кодируется ин-
 формация о  с п о с о б е  вывода образов (шаблонов) спрайтов на экран.По-
-скольку одновременно на экране могут отображаться не более 32 спрайтов,то
+скольку одновременно на экране может отображаться не более 32 спрайтов,то
 атрибуты одного спрайта кодируются в 128/32 = 4 байтах.
    Вероятно, Вас заинтересует их содержимое? Поспешим удовлетворить  Ваше
 любопытство:
@@ -1818,8 +1808,10 @@
       │  Первый байт │  Второй байт │  Третий байт │ Четвертый байт│
       └──────▲───────┴───────▲──────┴───────▲──────┴────────▲──────┘
              │               │              │               │
-        Координата Y   Координата X   Номер шаблона       Номер
-          (0÷255)        (0÷255)      в SGT (0÷255)      палитры
+  Координата Y   Координата X   Номер шаблона  Номер палитры (для режимов
+    (0÷255)        (0÷255)      в SGT (0÷255)   SCREEN 1 ÷ SCREEN 3)
+                                               Цвет изображения (для режи-
+                                               мов SCREEN 4 ÷ SCREEN 8)
 
    Отметим, что если величина Y-координаты спрайта равна 216,то все спрай-
 ты с меньшим приоритетом не будут отображаться. Например, если Y-координа-
@@ -1828,24 +1820,20 @@
    Если размер спрайта - 16╳16, то,как известно, одному спрайту соответст-
 вуют  ч е т ы р е  номера шаблонов спрайта. В этом случае можно задать лю-
 бой из четырех номеров шаблонов спрайта!
-
    Таким образом, если мы обозначим A0 - начальный адрес Таблицы  SAT, то
 оператор                  PUT SPRITE SN,(X,Y),C,NP
 эквивалентен следующим операторам:
        AD=A0+4*SN:VPOKE AD,Y:VPOKE AD+1,X:VPOKE AD+2,NP:VPOKE AD+3,C
                 ▲          ▲            ▲            ▲             ▲
                 └─!!!      └─!!!        └─!!!        └─!!!         └─!!!
-
    П р и м е р 2.   10 COLOR 1,15,8:SCREEN 1,1:SPRITE$(20)="СПРАЙТ!"
    ─────────────    20 PUT SPRITE 2,(165,38),7,20
                     30 ? "X=";VPEEK(6921):? "Y="VPEEK(6920):?"Цвет номер";
                     VPEEK(6923):?"Шаблон";VPEEK(6922)
                     40 FOR T=0 TO 8:? CHR$(VPEEK(14336+VPEEK(6922)*8+T));:
                     NEXT
-
-   Рассмотрим подробнее четвертый байт Таблицы SAT для  какого-нибудь  вы-
-бранного спрайта.
-
+   Рассмотрим  подробнее содержимое  ч е т в е р т о г о   байта  Таблицы
+SAT для какого-нибудь выбранного спрайта.
                  ┌───┬───┬───┬───┬───┬───┬───┬───┐
       Старший бит│   │ 0 │ 0 │ 0 │  Цвет спрайта │ Младший бит
                  └─▲─┴───┴───┴───┴───┴───┴───┴───┘
@@ -1857,7 +1845,6 @@
    Старший бит  этого  байта  называется  с и н х р о н и з и р у ю щ и м.
 Если его значение равно 1 , то положение спрайта смещается  в л е в о  на
 32 точки.
-
    П р и м е р 3. "Работа" синхронизирующего бита.
    ─────────────
    20 COLOR 1,15,15
@@ -1872,21 +1859,18 @@
    80 A$=INPUT$(1)
    90 VPOKE 6915,&B00001000
    100 END
-
    Разумеется, при программировании на языке MSX-BASIC лучше использовать
 оператор PUT SPRITE, а не последовательность операторов VPOKE.
      ┌──────────────────────────────────────────────────────────────┐
-     │  Однако, последовательность операторов VPOKE гораздо проще   │
+     │  Однако  последовательность операторов VPOKE гораздо проще   │
      │  моделировать на  м а ш и н н о м  я з ы к е, чем оператор   │
      │                         PUT SPRITE                           │
      └──────────────────────────────────────────────────────────────┘
    Более того,знание структуры Таблицы SAT позволяет "прочитать" атрибуты
 спрайта  непосредственно из  п а м я т и !
-
    П р и м е р 4.   Превращение белого спрайта в черный и наоборот.
    ─────────────
-   10 COLOR 1,4,8:SCREEN 1,1
-   20 SPRITE$(0)=STRING$(8,255)
+   10 COLOR 1,4,8:SCREEN 1,1:SPRITE$(0)=STRING$(8,255)
    30 PUT SPRITE 0,(115,80),15,0
    40 IF INKEY$="" THEN 40
    50 GOSUB 100:GOTO 40
@@ -1894,8 +1878,6 @@
    110 RETURN       ──────────▲─────────
                               │
                   &b00001111 XOR &b00001110 = &b00000001 ──▶ цвет 1
-
-
    Оператор SCREEN инициализирует четыре байта Таблицы SAT, кодирующих ат-
 рибуты одного спрайта, следующим образом:
       ┌──────────────┬──────────────┬──────────────┬───────────────┐
@@ -1904,7 +1886,6 @@
              │               │              │               │
         Координата Y   Координата X   Номер шаблона    Текущий цвет
                                       в Таблице SGT     изображения
-
    К о о р д и н а т а  Y  отображения спрайта по умолчанию  приведена  в
 следующей табличке (из нее видно, что при таких Y неважно, каково Х):
                   ┌──────────────────┬─────┬─────┐
@@ -1926,23 +1907,18 @@
 номером N равна 209 (в режимах SCREEN 1,SCREEN 2,SCREEN 3) или 217  (в ре-
 жимах SCREEN 4,SCREEN 5,SCREEN 6,SCREEN 7,SCREEN 8),то этот спрайт не ото-
 бражается на экране. Самое интересное заключается в том, что не  отобража-
-ются и все остальные спрайты с номерами, большими, чем N.
-
+ются и все остальные спрайты с номерами, большими чем N.
    П р и м е р 5.
    ─────────────
-   10 DIM X(3):SCREEN 2,0
-   20 A$="ЧЧЧЧЧЧЧЧ":Y=0
+   10 DIM X(3):SCREEN 2,0:A$="ЧЧЧЧЧЧЧЧ":Y=0
    30 FOR I=1 TO 3:SPRITE$(I)=A$:X(I)=10*I:NEXT I
-   40 PUT SPRITE 1,(X(1),Y),1,1
-   50 PUT SPRITE 3,(X(3),Y),15,3
+   40 PUT SPRITE 1,(X(1),Y),1,1: PUT SPRITE 3,(X(3),Y),15,3:
    60 PUT SPRITE 2,(X(2),Y),8,2
    70 Y=Y+1:IF Y>208 THEN BEEP:A$=INPUT$(1):END 'Исчезли два спрайта!
    80 GOTO 60
-
    "Э к р а н н ы й"  н о м е р  спрайта по умолчанию равен номеру  шабло-
 на спрайта.
    Ц в е т о м  спрайта по умолчанию является текущий цвет изображения.
-
       ┌───────────────────────────────────────────────────────────────┐
    3. │ Таблица SCT используется только в режимах SCREEN 4 ÷ SCREEN 8 │.
       └───────────────────────────────────────────────────────────────┘
@@ -1959,54 +1935,48 @@
       ┌────────────────────────────────────────────────────────────┐
       │ Адрес байта, начиная с которого располагается информация о │
       │ ц в е т е  спрайта в Таблице SCT, вычисляется по формуле:  │
-      │                       AD = A0 + 16·SN                      │
+      │                       AD = A0 + 16·SN  ,                   │
       │    где:  A0 - адрес начала Таблицы SCT;                    │
       │          SN - номер шаблона спрайта   .                    │
       └────────────────────────────────────────────────────────────┘
-
    П р и м е р 6. Вторая спрайтовая  линия  изображения  девятого спрайта
    ─────────────  раскрашена восьмым цветом.
    10 COLOR 15,1,8:SCREEN 4,0
    20 SPRITE$(3)="пример":PUT SPRITE 9,(40,80),15,3
    40 VPOKE &H1C00+16*9+2,8
    50 GOTO 50
-
    Заметим, что для информации о цвете шаблона спрайта размером 8╳8 точек
-отводятся  т о л ь к о  16 младших полубайтов 16-ти байтов SCT, отводимых
-для одного шаблона.
-   Опишем содержимое оставшихся 16-ти  с т а р ш и х  полубайтов...
+отводятся  т о л ь к о  16 младших полубайтов 16 байтов SCT,отводимых для
+одного шаблона.
+   Опишем содержимое оставшихся 16  с т а р ш и х  полубайтов...
 Оказывается с их помощью можно разрешить или запретить  приоритеты  спрай-
 тов, обработать определенным образом столкновения и задать  или  отменить
 так называемое "опережение" для спрайта.
-
    Изобразим схематически Таблицу SCT...
-
-                 Н о м е р а   б и т о в
-         ┌────┬────┬────┬────┬───┬───┬───┬───┐
-         │ 7  │ 6  │  5 │  4 │ 3 │ 2 │ 1 │ 0 │            
-         ├────┼────────────┼───┴───┴───┴───┤
-   0 байт│    │    │    │  0 │   Код цвета   │ Спр.лин. 1 для спрайта  0
-         ├────┼────┼────┼────┼───────────────┤
-   1 байт│    │    │    │  0 │   Код цвета   │ Спр.лин. 2 для спрайта  0
-         ├────┴────┴────┴────┴───────────────┤
+           ┌───┬───┬───┬───┬───┬───┬───┬───┐
+           │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ Н о м е р а   б и т о в
+           ├───┼─────────┼───┴───┴───┴───┤
+   0-й байт│   │   │   │ 0 │   Код цвета   │ Спр.линия  1 для спрайта  0
+           ├───┼───┼───┼───┼───────────────┤
+   1-й байт│   │   │   │ 0 │   Код цвета   │ Спр.линия  2 для спрайта  0
+           ├───┴───┴───┴───┴───────────────┤
    ···   │          ···             ···      │           ···
-         ├────┬────┬────┬────┬───────────────┤
-  15 байт│    │    │    │  0 │   Код цвета   │ Спр.лин. 16 для спрайта 0
-         ├────┴────┴────┴────┼───────────────┤
+           ├───┬───┬───┬───┬───────────────┤
+  15-й байт│   │   │   │ 0 │   Код цвета   │ Спр.линия 16 для спрайта  0
+           ├───┴───┴───┴───┼───────────────┤
          │          ···      │      ···      │
-         ├────┬────┬────┬────┼───────────────┤
- 496 байт│    │    │    │  0 │   Код цвета   │ Спр.лин.  1 для спрайта 31
-         ├────┼────┼────┼────┼───────────────┤
- 497 байт│    │    │    │  0 │   Код цвета   │ Спр.лин.  2 для спрайта 31
-         ├────┴────┴────┴────┼───────────────┤
+           ├───┬───┬───┬───┼───────────────┤
+ 496-й байт│   │   │   │ 0 │   Код цвета   │ Спр.линия  1 для спрайта 31
+           ├───┼───┼───┼───┼───────────────┤
+ 497-й байт│   │   │   │ 0 │   Код цвета   │ Спр.линия  2 для спрайта 31
+           ├───┴───┴───┴───┼───────────────┤
   ···    │          ···      │      ···      │
-         ├────┬────┬────┬────┼───────────────┤
- 511 байт│    │    │    │  0 │   Код цвета   │ Спр.лин. 16 для спрайта 31
-         └──▲─┴──▲─┴──▲─┴────┴───────────────┘
+           ├───┬───┬───┬───┼───────────────┤
+ 511-й байт│   │   │   │ 0 │   Код цвета   │ Спр.линия 16 для спрайта 31
+           └─▲─┴─▲─┴─▲─┴───┴───────────────┘
             │    │    └─ Бит IC (определитель столкновений):1-нет, 0-да;
-            │    └────── Бит CC (разрешение приоритета)    :0-нет, 1-да;
-            └─────────── Бит EC ("опережение")             :1- да, 0-нет.
-
+             │   └───── Бит CC (разрешение приоритета)    :0-нет, 1-да;
+             └───────── Бит EC ("опережение")             :1- да, 0-нет.
    В режиме спрайтов 2, если СС-бит  Таблицы  SCT установлен в 1, порядок
 приоритетности спрайтов для данной спрайтовой линии  о т м е н я е т с я .
 Спрайтовая линия, для которой бит СС установлен в 1 , будет  отображаться
@@ -2014,21 +1984,20 @@
    Отметим, что и в этом случае, если на одной линии экрана более 8 спрай-
 тов, то  д е в я т ы й  спрайт и все последующие не будут изображаться на
 экране дисплея.
-   Более того не фиксируется столкновение спрайта, для которого с SCT бит
+   Более того,не фиксируется столкновение спрайта, для которого с SCT бит
 СС установлен в 1, с другим спрайтом (даже если у этого спрайта в SCT бит
 СС установлен в 0). В этом случае для пересекающихся спрайтов над их  цве-
 товыми кодами производится логическая операция OR.
 
    Говорят, что в режиме SCREEN 6 цвет фона и цвета спрайтов подвергаются
-а п п а р а т н о м у  т и л и н г у.  Эти цвета кодируются  четыремя  би-
+а п п а р а т н о м у  т и л и н г у.  Эти цвета кодируются  четырьмя  би-
 тами: два  с т а р ш и х  бита определяют код цвета нечетных точек, а два
 м л а д ш и х  бита определяют код цвета четных точек по X-координате (от
 0 до 511).
    В режиме SCREEN 6 размер одной точки спрайта в 2 раза больше,чем у гра-
-фической точки (пикселя), однако, за счет наличия аппаратного тилинга, од-
+фической точки (пикселя), однако  за счет наличия аппаратного тилинга, од-
 на точка спрайта может обладать двумя цветами одновременно (четные  и  не-
 четные точки фонового цвета могут быть определены таким же образом).
-
                         ┌─────────────────── Четные точки   (0,2,...,510)
                         │    ┌────────────── Нечетные точки (1,3,...,511) 
                      ┌──▼─┬──▼─┐
@@ -2059,6 +2028,13 @@
 SPRITE$()).
    В режиме SCREEN 8 цвета спрайта фиксированы и не зависят  от  регистра
 палитры. Цвета спрайта в режиме SCREEN 8 показаны на следующей таблице.
+
+
+
+
+
+
+
      ┌─────────────────┬─────────────┬─────────────┬────────────┐
      │    Код цвета    │   Зеленый   │   Красный   │  Синий     │
      │ С3  С2  С1  С0  │ G2  G1  G0  │ R2  R1  R0  │ B2  B1  B0 │ 
@@ -2084,6 +2060,7 @@
      │  1   1   1   1  │  1   1   1  │  1   1   1  │  1   1   1 │ 
      └─────────────────┴─────────────┴─────────────┴────────────┘
 
+
                 XI.1.9.  С л о т ы   в и д е о п а м я т и
 
    Вся видеопамять на компьютерах серии MSX-2 разбита на два больших учас-
@@ -2091,7 +2068,7 @@
 видеопамяти (по аналогии с участками RAM и ROM объемом по 64 Кбайта, назы-
 ваемыми  с л о т а м и  памяти). На компьютерах  серии MSX-1 имеется толь-
 ко один слот VRAM объемом в 16 Кбайтов.
-   Для того, чтобы переключиться с работы со слотом 0 на работу со слотом
+   Для того  чтобы переключиться с работы со слотом 0 на работу со слотом
 1, достаточно выполнить оператор:
    α) SET PAGE 2 или SET PAGE 3 в режимах SCREEN 5 и SCREEN 6;
    β) SET PAGE 1 в режимах SCREEN 7 и SCREEN 8.
@@ -2113,6 +2090,9 @@
        │ от &H18000 │  от &H8000 │        │             │
        │ до &H1FFFF │  до &HFFFF │        │ SET PAGE 3  │
        └────────────┴────────────┴────────┴─────────────┘
+
+
+
        ┌────────────┬────────────┬────────┬─────────────┐
        │ Физические │ Логические │ Номера │ Способ вклю-│   Для
        │   адреса   │   адреса   │ слотов │ чения слота │ режимов
@@ -2123,8 +2103,7 @@
        │ от &H10000 │  от &H0000 │        │             │
        │ до &H1FFFF │  до &HFFFF │ Слот 1 │ SET PAGE 1  │
        └────────────┴────────────┴────────┴─────────────┘
-   Отметим также, что в режимах SCREEN 0 ÷ SCREEN 4 работа со слотом 1 за-
-прещена.
+
 
 
         XI.1.10.  П о р т ы, о т в е ч а ю щ и е  за  р а б о т у
@@ -2143,7 +2122,6 @@
         │    OUT &H99, С т а р ш и й  байт номера ячейки OR &H40   │
         │    OUT &H98, Ч и с л о                                   │
         └──────────────────────────────────────────────────────────┘
-
    П р и м е р.
    ───────────
    10 SCREEN 0:CLS:KEYOFF
@@ -2161,7 +2139,7 @@
             └────────────────────────────────────────────────────┘
    Важно отметить следующее. Изменение содержимого видеопамяти или  видео-
 процессора приводит к немедленной корректировке содержимого экрана.  Одна-
-ко, отсюда вовсе не следует истинность обратного утверждения.
+ко  отсюда вовсе не следует истинность обратного утверждения.
  ┌────────────────────────────────────────────────────────────────────┐
  │ Изменение "содержимого" экрана не всегда приводит к изменению VRAM.│
  └────────────────────────────────────────────────────────────────────┘
@@ -2170,7 +2148,9 @@
 деле состояние экрана изменяют  п о р т ы  ввода-вывода  с адресами  &H98,
 &H99, &H9A и &H9B. На эти порты  можно "воздействовать" оператором  VPOKE.
 В этом случае сигнал из VRAM сразу же поступает в порт, а тот,в свою  оче-
-редь изменяет "рисунок" на экране.
+редь, изменяет "рисунок" на экране.
+
+
 
                     ┌───────────┐
                     │ Э к р а н │
@@ -2183,7 +2163,6 @@
           ┌──────────────┐  ┌───────────┐ ◀──
           │Видеопроцессор│─▶│Видеопамять│ ◀── Оператор VPOKE
           └──────────────┘  └───────────┘ ◀──
-
    Если же воздействовать непосредственно на порт оператором OUT,минуя ви-
 деопамять, то могут возникнуть следующие ситуации:
    1) если адрес VRAM принадлежит отрезку [0,&H3FFE], то после записи опе-
@@ -2192,7 +2171,6 @@
    2) если адрес VRAM принадлежит отрезку [&H3FFF,&HFFFF],  то после запи-
 си оператором OUT в ячейку с этим адресом ее  содержимое  можно  прочесть
 только функцией INP.
-
    П р и м е р.  Сравните результаты работы этой программы на компьютерах
    ───────────   серий MSX-1 и MSX-2 !
    10 CALL NETEND 
@@ -2205,10 +2183,8 @@
    80 CALL NETINI:'Отмена действия команды CALL NETEND
 
 
-
                   XI.2.  РАБОТА  С  ВИДЕОПРОЦЕССОРОМ
 
-
                      Четыре величайших изобретения в истории человечества:
                         1) колесо;
                         2) электрическая лампочка;
@@ -2217,7 +2193,6 @@
                            авторами.
                                                 М.Уэйт, С.Прата, Д.Мартин
 
-
    Работа с псевдопеременными BASE и VDP - весьма эффективное средство уп-
 равления видеопамятью. Однако при использовании этих средств  нужно  быть
 крайне осторожным, ибо малейшая ошибка в программировании  может  сделать
@@ -2235,15 +2210,15 @@
 воляющие значительно быстрее записывать информацию в регистры и читать ин-
 формацию из регистров.
    Регистры MSX-VDP можно разделить на несколько категорий:
-   α) по назначению:
+   А) по назначению:
       1) регистры   у с т а н о в к и   р е ж и м а  (0, 1, 8, 9);
       2) регистры   б а з о в ы х   а д р е с о в  (2÷6, 10, 11);
       3) регистры   ц в е т о в  (7, 12, 13, 20÷22);
       4) регистры   у п р а в л е н и я   э к р а н о м  (18, 19, 23);
       5) регистры   д о с т у п а  (14÷17);
       6) регистры   к о м а н д  (32÷46);
-   β) по способу доступа:
-      1) разрешены чтение и запись на компьютерах и серии  MSX-1, и серии
+   Б) по способу доступа:
+      1) разрешены чтение и запись на компьютерах и серии  MSX-1  и серии
 MSX-2 (регистры 0÷7);
       2) разрешены чтение и запись на компьютерах  MSX-2 и только  запись
 на компьютерах MSX-1 (регистры 8÷23);
@@ -2260,7 +2235,6 @@
 ние параметра N должно быть равно номеру регистра;
       β) если используется регистр с номером из диапазона [8,23] (для ком-
 пьютера MSX-2), то N=RG+1, где RG - номер регистра.
-
    Теперь мы расскажем Вам о способах  з а п и с и  в регистры MSX-VDP:
    1) запись с использованием псевдопеременной VDP.  Этот способ является
 самым простым: оператор     ┌─────────────┐
@@ -2271,58 +2245,55 @@
 зывает на номер регистра MSX-VDP, причем:
       α) если используется регистр с номером из диапазона [0,7], то значе-
 ние параметра N должно быть равно номеру регистра;
-      β) если используется регистр с номером из диапазона [8,23], либо из
+      β) если используется регистр с номером из диапазона [8,23]  либо из
 диапазона [32,46] (для компьютера MSX-2), то N=RG+1, где RG - номер регис-
 тра;
        M  -  арифметическое выражение, целая часть значения которого  при-
 надлежит отрезку [0,255],
 позволяет поместить значение выражения M в регистр VDP;
-
    2) запись через  п о р т ы  ввода-вывода (для всех регистров).
    Этот способ заключается в использовании порта с номером &H99, связываю-
-щего видеопроцессор с центральным процессором  MSX-компьютера (Z-80). Что-
+щего видеопроцессор с центральным процессором  MSX-компьютера  (Z80). Что-
 бы записать число A в регистр  MSX-VDP  с номером N, примените  следующие
 операторы:      ┌────────────────────────────────────────┐
                 │     OUT &H99,A:OUT &H99,RG OR &H80     │ .
                 └────────────────────────────────────────┘
-   Данные операторы последовательно выводят данные  и  номер  регистра  в
-порт 99h.
-
+   Они последовательно выводят данные и номер регистра в порт 99h.
      Номер бита     7     6     5     4     3     2     1     0                          
                  ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
      Первый байт │                  Д а н н ы е                  │
                  ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
      Второй байт │  1  │  0  │    Н о м е р   р е г и с т р а    │
                  └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
-
    З а м е ч а н и е. Будьте особенно внимательными при обращении к видео-
-процессору из подпрограммы обработки прерываний.
+процессору из подпрограммы обработки прерываний;
 
    3)  к о с в е н н а я  запись в регистры MSX-VDP. Про нее будет расска-
 зано в разделе XI.2.6 .
-   Напомним, что если Вы работаете с компьютером серии MSX-2, то перед на-
-бором программы, использующей порты ввода-вывода, нужно выполнить команду
+   Напомним, если Вы работаете с компьютером серии MSX-2,то перед набором
+программы, использующей порты ввода-вывода, нужно выполнить команду
+
                             ┌─────────────┐
                             │ CALL NETEND │ .
                             └─────────────┘
 
 
 
-       XI.2.1.   Р е г и с т р ы   у с т а н о в к и   р е ж и м а
 
 
+       XI.2.1.   Р е г и с т р ы   у с т а н о в к и   р е ж и м а
+
                                          Нехватка информации восполняется
                                          избытком интуиции.
                                                                   М.Мишин
 
-
    Перейдем теперь к описанию "содержимого" некоторых регистров VDP.
    Вначале напомним Вам принятую нумерацию битов в байте:
-
 ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
 │ 7-й бит│ 6-й бит│ 5-й бит│ 4-й бит│ 3-й бит│ 2-й бит│ 1-й бит│ 0-й бит│
 └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
 
+
 Р е г и с т р 0.
 ───────────────
   ┌─────┬────────┬─────────────────────────────────────────────────────┐
@@ -2350,7 +2321,7 @@
 
    П р и м е р.  10 OUT &H99,VDP(0) OR 16:OUT &H99,0 OR &H80 'Отключение
    ───────────   клавиатуры!
-
+\page
 Р е г и с т р 1.
 ─────────────── 
   ┌─────┬────────┬─────────────────────────────────────────────────────┐
@@ -2378,9 +2349,7 @@
   │  0  │   0    │    Нормальный размер спрайтов    │ ратор SCREEN ,n  │
   │     │   1    │  "Увеличение" размера спрайтов   │                  │
   └─────┴────────┴──────────────────────────────────┴──────────────────┘
-
    Назначение 6-го бита регистра 1 иллюстрируется примерами 1 и 2:
-
    П р и м е р 1.                                         ┌─ OFF
    ─────────────  α) 10 SCREEN 2          β) 10 SCREEN 2  ▼
                      15 :::::::::::::::::    15 VDP(1)=&B10100000
@@ -2396,12 +2365,10 @@
    Перед записью в регистр лучше всего сначала прочитать  его  текущее со-
 держимое, а лишь затем с помощью логических операций AND, OR и XOR устано-
 вить или "сбросить" нужные биты.
-
-   П р и м е р 2.  Включение и выключение экрана дисплея
-   ─────────────             VDP(1)=VDP(1) XOR 64
+   П р и м е р 2.  Включение и выключение экрана дисплея:
+   ─────────────             VDP(1)=VDP(1) XOR 64   .
    Эта команда включает экран, если он был выключен, и наоборот.
    А теперь разберемся с  н у л е в ы м  битом регистра 1 ...
-
    П р и м е р 3.  Изменение размера спрайта без очистки шаблонов.
    ─────────────
    10 SCREEN 2,1
@@ -2441,10 +2408,9 @@
 │  1) установить биты M1,M2,M3,M4,M5;                                  │
 │  2) установить начальные адреса Таблиц VRAM в регистрах базовых      │
 │     адресов;                                                         │
-│  3) заполнить таблицы видеопамяти необходимыми данными;              │
+│  3) заполнить Таблицы видеопамяти необходимыми данными;              │
 │  4) занести в ячейку памяти с адресом &HFCAF номер режима SCREEN.    │
 └──────────────────────────────────────────────────────────────────────┘
-
   Р е г и с т р 8.
   ───────────────
   ┌─────┬────────┬─────────────────────────────────────────────────────┐
@@ -2496,7 +2462,6 @@
 отображаются спрайты всех цветов. Участки спрайтов с нулевым цветом на эк-
 ране по-прежнему не отображаются. Но если спрайты пересекаются  "невидимы-
 ми" частями, то столкновение спрайтов  б у д е т   у с т а н о в л е н о .
-
    П р и м е р 4.
    ─────────────
    10 COLOR =(0,2,4,7) 'Изменим палитру нулевого цвета
@@ -2556,10 +2521,8 @@
    50 VPOKE T,32:NEXT
 
 
-
          XI.2.2.   Р е г и с т р ы  б а з о в ы х  а д р е с о в
 
-
                              Мы находимся в положении, несколько аналогич-
                              ном положению человека,  держащего  в  руках
                              связку ключей и пытающегося открыть одну  за
@@ -2568,17 +2531,14 @@
                              двери, но сомнения относительно  взаимноодно-
                              значного  соответствия между ключами и дверя-
                              ми у него остаются.
-                                                             Юджин Вигнер
-
-
-   Адрес байта видеопамяти кодируется 17-ю двоичными цифрами, которые  мы
-будем обозначать  Ai , где i=0,1,2,...,16, причем через A16 будем  обозна-
-чать  с т а р ш и й  бит, через A0 -  м л а д ш и й  бит.
+                                                                 Ю.Вигнер
 
+   Адрес байта видеопамяти кодируется 17 двоичными цифрами, которые мы бу-
+дем обозначать  Ai, где i=0,1,2,...,16, причем через A16 будем обозначать
+с т а р ш и й  бит, через A0 -  м л а д ш и й  бит.
 Старший┌───┬───┬───┬───┬───┬───┬───┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐Младший
   бит  │A16│A15│A14│A13│A12│A11│A10│A9│A8│A7│A6│A5│A4│A3│A2│A1│A0│  бит
        └───┴───┴───┴───┴───┴───┴───┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
    В регистрах базовых адресов хранятся старшие биты начальных адресов Та-
 блиц VRAM для текущего режима SCREEN.
         ┌───────────────────────────────────────────────────────┐
@@ -2590,7 +2550,6 @@
 реса Таблицы PNT:     ┌─┬───┬───┬───┬───┬───┬───┬───┐
                       │0│A16│A15│A14│A13│A12│A11│A10│
                       └─┴───┴───┴───┴───┴───┴───┴───┘
-
    П р и м е р 1. 10 SCREEN 1
    ─────────────  20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+0)),16)
                   30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(2)),8):?B$ 'Читаем
@@ -2605,12 +2564,10 @@
 
    Регистры с номерами 10 и 3 содержат одиннадцать старших битов начально-
 го адреса Таблицы CT:
-
                 Регистр 10                   Регистр 3
           ┌─┬─┬─┬─┬─┬───┬───┬───┐  ┌───┬───┬───┬───┬──┬──┬──┬──┐
           │0│0│0│0│0│A16│A15│A14│  │A13│A12│A11│A10│A9│A8│A7│A6│
           └─┴─┴─┴─┴─┴───┴───┴───┘  └───┴───┴───┴───┴──┴──┴──┴──┘
-
    П р и м е р 2. 10 SCREEN 1
    ─────────────  20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+1)),16)
                   30 ?A:$A$=RIGHT$("0000000000000000"+BIN$(VDP(10+1))+BIN
@@ -2627,7 +2584,6 @@
 лицы PGT:           ┌─┬─┬───┬───┬───┬───┬───┬───┐
                     │0│0│A16│A15│A14│A13│A12│A11│
                     └─┴─┴───┴───┴───┴───┴───┴───┘
-
    П р и м е р 3. 10 SCREEN 0:WIDTH 80
    ─────────────  20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*0+2)),16)
                   30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(4)),8):?B$
@@ -2641,12 +2597,10 @@
 
    Регистры с номерами 11 и 5 содержат десять старших битов начального ад-
 реса Таблицы SAT:
-
                 Регистр 11                  Регистр 5
            ┌─┬─┬─┬─┬─┬─┬───┬───┐   ┌───┬───┬───┬───┬───┬──┬──┬──┐
            │0│0│0│0│0│0│A16│А15│   │А14│A13│A12│A11│A10│A9│A8│А7│
            └─┴─┴─┴─┴─┴─┴───┴───┘   └───┴───┴───┴───┴───┴──┴──┴──┘
-
    П р и м е р 4. 10 SCREEN 1
    ─────────────  20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+3)),16)
                   30 ?A$:A$=RIGHT$("0000000000000000"+BIN$(VDP(1+11))+BIN
@@ -2660,14 +2614,13 @@
                   Ok     └─────────┘              11 и 5
 ┌───────────────────────────────────────────────────────────────────────┐
 │ З а м е ч а н и е.  С Таблицей SAT связана Таблица SCT,  адрес которой│
-│    получается вычитанием 512 байт из начального адреса Таблицы SAT.   │
+│   получается вычитанием 512 байтов из начального адреса Таблицы SAT.  │
 └───────────────────────────────────────────────────────────────────────┘
 
    Регистр с номером 6 содержит шесть старших битов начального адреса Таб-
 лицы SGT:              ┌─┬─┬───┬───┬───┬───┬───┬───┐
                        │0│0│A16│A15│A14│A13│A12│A11│
                        └─┴─┴───┴───┴───┴───┴───┴───┘
-
    П р и м е р 5. 10 SCREEN 1
    ─────────────  20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+4)),16)
                   30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(6)),8):?B$ 'Читаем
@@ -2681,14 +2634,12 @@
                   Ok └─────┘
   ┌────────────────────────────────────────────────────────────────────┐
   │     Отметим, что при использовании этих регистров рекомендуется    │
-  │ м а с к и р о в а т ь  ненужные в текущем режиме отображения биты  │
+  │ м а с к и р о в а т ь  ненужные в текущем режиме отображения биты. │
   └────────────────────────────────────────────────────────────────────┘
 
 
-
                   XI.2.3.  Р е г и с т р ы  ц в е т о в
 
-
                           - Вы знаете отличительные способности животного,
                          называемого раком?
                           - Да, конечно.  Рак - это рыба  к р а с н о г о
@@ -2697,19 +2648,15 @@
                          о раке ...
                                                     Студенческий фольклор
 
-
    α) Регистр с номером  7 видеопроцессора в режиме  SCREEN 0  определяет
 цвет изображения и фона.
    Четыре старших бита этого регистра "хранят" цвет и з о б р а ж е н и я,
 а четыре младших ─ цвет  ф о н а.
-
    Например, команда  VDP(7)=&H4B  в режиме SCREEN 0 эквивалентна команде
 COLOR 4,11 .                   ▲▲
            Цвет изображения  ──┘└── Цвет фона
-
    А команда  VDP(7)=&H1F  приводит  к тому же результату, что и оператор
 COLOR 1,15  .
-
           Р е г и с т р  с номером 7 (регистр цвета текста/фона)
      ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
      │ Номер бита │  7  │  6  │  5  │  4  │  3  │  2  │  1  │  0  │
@@ -2717,16 +2664,14 @@
      └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
         TC3 - ТC0 определяет цвет текста в режимах SCREEN 0 и SCREEN 1;
         BD3 - BD0 определяет цвет фона во всех режимах отображения
-
    В других режимах SCREEN этот регистр "хранит" цвет  б о р д ю р а.
-
    П р и м е р 1.    10 COLOR 1,15,4:SCREEN 2:Z=VDP(7)
    ─────────────     20 SCREEN 0:PRINT Z
                      run
                       4
                      Ok
   ┌───────────────────────────────────────────────────────────────────┐
-  │   Содержимое седьмого регистра инициализируется оператором COLOR  │
+  │   Содержимое седьмого регистра инициализируется оператором COLOR .│
   └───────────────────────────────────────────────────────────────────┘
    β) В 80-символьном режиме SCREEN 0 существует явление, которое мы назо-
 вем  м и г а н и е м . Информация о символах, которые должны мигать, нахо-
@@ -2749,7 +2694,7 @@
    Ч а с т о т о й  в к л ю ч е н и я  м и г а н и я  назовем  промежуток
 времени, в течение которого текст и фон приобретают цвет мигания.
    Ч а с т о т о й   в ы к л ю ч е н и я   м и г а н и я  будем  называть
-промежуток времени, в течении которого текст  и  фон приобретают основной
+промежуток времени, в течение которого текст  и  фон приобретают основной
 цвет.
    Единица измерения частоты мигания равна 1/6 секунды.Максимально возмож-
 ный период мигания составляет 5 секунд (15/6 секунд на  включение мигания
@@ -2758,7 +2703,6 @@
    Регистр с номером  д в е н а д ц а т ь  MSX-VDP содержит  информацию о
 цвете мигания текста и фона. Старший полубайт этого регистра  отвечает за
 цвет мигания текста, а младший полубайт отвечает за цвет мигания фона.
-
         Р е г и с т р  с номером 12 (регистр цвета текста/фона)
     ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
     │ Номер бита │  7  │  6  │  5  │  4  │  3  │  2  │  1  │  0  │
@@ -2766,27 +2710,25 @@
     └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
         биты TC3,TC2,TC1,TC0 определяют цвет части 1 шаблона;
         биты BC3,BC2,BC1,BC0 определяют цвет части 0 шаблона.
-
    Если в режиме SCREEN 1 установлен признак мерцания, то цвета из  этого
-регистра и из регистра с номером 7 поочередно отбражаются.
+регистра и из регистра с номером 7 поочередно отображаются.
 
    За частоту мигания "отвечает" регистр с  номером  т р и н а д ц а т ь,
 причем в его старшем полубайте хранится информация о частоте включения ми-
 гания, а в младшем - информация о частоте выключения мигания.
-
         Р е г и с т р  с номером 13 (регистр периода мерцания)
     ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
     │ Номер бита │  7  │  6  │  5  │  4  │  3  │  2  │  1  │  0  │
     │ Имя бита   │ ON3 │ ON2 │ ON1 │ ON0 │ OF3 │ OF2 │ OF1 │ OF0 │
     └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
-биты ON3,ON2,ON1,ON0 определяют период отборажения для четной страницы;
+биты ON3,ON2,ON1,ON0 определяют период отображения для четной страницы;
 биты ОF3,OF2,OF1,OF0 определяют период отображения для нечетной страницы.
-
    В режимах растровой графики (SCREEN 5÷SCREEN 8) попеременно  сменяются
 две страницы памяти. Данные помещаются в  этот регистр  для  установления
 отображаемой страницы как нечетной страницы для начала мерцания. Этот  ре-
 гистр используется также в режиме SCREEN 1.
 
+
    Приведем табличку...
 ┌──────────────────────┬────────────┬──────────────────────┬────────────┐
 │ Содержимое полубайта │ Время (мс) │ Содержимое полубайта │ Время (мс) │
@@ -2801,13 +2743,9 @@
 │    0   1   1   0     │   1001,3   │     1   1   1   0    │   2336,3   │
 │    0   1   1   1     │   1168,2   │     1   1   1   1    │   2503,2   │
 └──────────────────────┴────────────┴──────────────────────┴────────────┘
-
    А теперь взгляните на следующий пример.
-
    П р и м е р 2.
    ─────────────
-   NEW
-   Ok
    10 SCREEN 0:WIDTH 80 'Установка режима для мигания
    20 FOR T=2048 TO 2048+269:VPOKE T,0:NEXT 'Очистка Таблицы мигания
    30 LINEINPUT "Введите слово:";B$
@@ -2816,17 +2754,15 @@
    60 INPUT "Цвет фона для мигания";MF
    70 INPUT "Частота включения мигания (от 0 до 15)";TN
    80 INPUT "Частота выключения мигания (от 0 до 15)";TK
-   90 VPOKE 2048+10*Y+X/8,&B11111111 'Будуть мигать 8 символов
+   90 VPOKE 2048+10*Y+X/8,&B11111111 'Будут мигать 8 символов
    100 CLS:LOCATE X,Y:PRINT B$
    110 COL=16*MI+MF:TIM=16*TN+TK
    120 VDP(12+1)=COL:VDP(13+1)=TIM
    Для прекращения мигания поместите в старший  полубайт  13-го  регистра
 число 0.
-
    γ) Две графические  страницы  экрана могут отображаться   п о п е р е -
 м е н н о (в режимах SCREEN 5 ÷ SCREEN 8). Страницы, которые будут попере-
 менно отображаться, расположены следующим образом:
-
     Режим SCREEN 5 и  SCREEN 6       Режим SCREEN 7 и SCREEN 8
           ┌─────────────┐                  ┌────────────┐
           │ Страница 0  │─┐                │            │─┐
@@ -2837,14 +2773,13 @@
           ├─────────────┤ │                │ Страница 1 │─┘
           │ Страница 3  │─┘                │            │ 
           └─────────────┘                  └────────────┘
-   Период отображения,находящийся в промежутке между 166 мсек и 2053 мсек,
+   Период отображения, находящийся в промежутке между  166 мс  и  2053 мс,
 может быть определен для каждой страницы. Для этого необходимо:
    1) задать базовый адрес Таблицы имен шаблонов   н е ч е т н о й   стра-
 ницы (регистр с номером 2);
    2) задать время включения (интервал, в течение  которого  отображается
 ч е т н а я   страница) и время выключения (интервал, в течение  которого 
 отображается  н е ч е т н а я  страница) в регистре с номером 13.
-
         Р е г и с т р  с номером 13 (регистр периода мерцания)
     ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
     │ Номер бита │  7  │  6  │  5  │  4  │  3  │  2  │  1  │  0  │
@@ -2852,30 +2787,26 @@
     └────────────┴──▲──┴─────┴─────┴──▲──┴──▲──┴─────┴─────┴──▲──┘
                     └─────────────────┘     └─────────────────┘
                       Время включения        Время выключения
-
-  3) После этого начнется процесс мигания.
-
+  3) после этого начнется процесс мигания.
    П р и м е р 3.
    ──────────────
    10 SCREEN 7                    :' Режим растровой графики (SCREEN 5÷8)
    20 SET PAGE 0,0: CLS           :' На странице 0
    30 CIRCLE (254,106),30,15      :' рисуем окружность
    40 SET PAGE 1,1: CLS           :' А на странице 1
-   50 CIRCLE (254,106),60,15      :' рисуем окружность побольше
+   50 CIRCLE (254,106),60,15      :' рисуем окружность большего радиуса
    60 VDP(13+1)=&H11              :' Включим смену страниц
    70                             :' Окружность  п у л ь с и р у е т !
-   80 A$=INPUT$(1)                :' Немного подождем...
+   80 A$=INPUT$(1)                :' Ждем нажатия любой клавиши...
    90 VDP(13+1)=0                 :' Выключим смену страниц
 
    Опишем еще один способ осуществления смены двух графических страниц на
-экране.
-   Бит ЕО (второй бит регистра с номером 9), используется  для  поперемен-
-ной демонстрации  д в у х  графических страниц экрана с частотой 60 Гц.
+экране. Бит ЕО (второй бит регистра с номером 9) используется для  попере-
+менной демонстрации  д в у х  графических страниц экрана с частотой 60 Гц.
    Для этого необходимо:
    1) задать базовый адрес Таблицы имен шаблонов  н е ч е т н о й  страни-
 цы (регистр с номером 2);
    2) установить  в т о р о й  бит регистра с номером 9 в 1.
-
    П р и м е р 4.
    ─────────────
    10 SCREEN 7:VDP(10)=0       :' Режим растровой графики (SCREEN 5÷8)
@@ -2892,7 +2823,6 @@
    81 :' Эта возможность используется в программе PAINTER
    82 :' (меню Tool.Show Canvas)
    90 A$=INPUT$(1)             :' З а д е р ж к а
-
    Кроме того,видеопроцессор поддерживает функцию черезстрочного отображе-
 ния. Отображение первого и второго  п о л е й  на одной и той же странице
 можно получить, установив бит IL (третий бит регистра с номером 9) в 1.
@@ -2902,7 +2832,6 @@
    2) установить бит ЕО (второй бит регистра с номером 9) в 1;
    3) задать базовый адрес Таблицы имен шаблонов  нечетной  страницы  (ре-
 гистр с номером 2).
-
    П р и м е р 5.
    ─────────────
    10 COLOR 15,1,1: SCREEN 7                   ' Режим растровой графики
@@ -2917,7 +2846,6 @@
    34 'Линии накладываются друг на друга на 1/2 (!) точки
    40 A$=INPUT$(1)   ' Задержка
    41 VDP(9+1)=0     ' Выключим мигание
-
    δ)   Регистр с номером 20 называется регистром цветовой вспышки 1.
         Регистр с номером 21 называется регистром цветовой вспышки 2.
         Регистр с номером 22 называется регистром цветовой вспышки 3.
@@ -2937,6 +2865,7 @@
 указанные величины затем возвращаются в исходное состояние, то будет полу-
 чен обычный сигнал "цветовой вспышки" на NTSC-видеовыходе.
 
+
       XI.2.4.  Р е г и с т р ы  у п р а в л е н и я  э к р а н о м
 
    Регистрами  у п р а в л е н и я   э к р а н о м  будем называть регист-
@@ -2945,17 +2874,15 @@
    α) Использование  регистра  с номером   в о с е м н а д ц а т ь   дает
 возможность  центрирования  изображения  относительно  электронно-лучевой
 трубки дисплея: 
-
                     Р е г и с т р  с  н о м е р о м  18
         ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
-        │      │  Параметр смещения │      │  Параметр смешения │
+        │      │  Параметр смещения │      │  Параметр смещения │
         │      │      вверх-вниз    │      │     вправо-влево   │
         └──▲───┴──────┴──────┴──────┴──▲───┴──────┴──────┴──────┘
            │                           │
  Флаг смещения вверх-вниз:          Флаг смещения вправо-влево:
  1 означает смещение экрана вниз;   1 означает смещение экрана вправо;
  0 означает смещение экрана вверх   0 означает смещение экрана влево
-
    А теперь посмотрите на фрагмент алгоритма нахождения величины смещения
 экрана, который записан на школьном алгоритмическом языке:
               если   Флаг смещения = 1
@@ -2966,28 +2893,22 @@
             │     ─────
             │ все
               ───
-
    П р и м е р 1.  Сдвинем экран влево на 2 точки и вниз на 5 точек.
    ─────────────      10 VDP(18+1)=&B10110010
                                      ▲└▲┘▲└▲┘
                Смещение экрана вниз ─┘ │ │ └─ 2 точки
                               5=8-3 ───┘ └─── Смещение экрана влево
-
    На компьютерах MSX-2 по умолчанию "содержимое" регистра  с  номером 18
-по умолчанию задается оператором
-                             SET ADJUST (X,Y)
+по умолчанию задается оператором SET ADJUST (X,Y) .
    Значения выражений X и Y принадлежат отрезку [-7,8].
-
    β) Можно установить прерывание в момент, когда видeопроцессор начинает
 сканировать определенную линию. Для получения  прерывания используется ре-
 гистр с номером  д е в я т н а д ц а т ь, в котором  хранится номер линии.
-
    γ) Р е г и с т р 23.
       ────────────────
-   Взгляните на рисунок, и Вы увидите, как изменяется изображение  симво-
+   Взгляните на рисунок  и Вы увидите, как изменяется изображение  симво-
 лов на  т е к с т о в о м  экране в зависимости от содержимого 23-го  ре-
 гистра (значимыми при этом являются только три младших бита):
-
     VDP(23+1)=0       VDP(23+1)=1       VDP(23+1)=2       VDP(23+1)=3
  ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐
  │█│ │ │ │█│ │ │ │ │█│ │ │ │█│ │ │ │ │█│ │ │ │█│ │ │ │ │█│ │█│ │█│ │ │ │
@@ -2999,7 +2920,6 @@
  │█│ │ │ │█│ │ │ │ │ │ │ │ │ │ │ │ │ │█│ │ │ │█│ │ │ │ │█│ │ │ │█│ │ │ │
  │ │ │ │ │ │ │ │ │ │█│ │ │ │█│ │ │ │ │█│ │ │ │█│ │ │ │ │█│ │ │ │█│ │ │ │
  └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘
-
     VDP(23+1)=4       VDP(23+1)=5       VDP(23+1)=6       VDP(23+1)=7
  ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐
  │█│ │█│ │█│ │ │ │ │█│█│ │█│█│ │ │ │ │█│ │ │ │█│ │ │ │ │ │ │ │ │ │ │ │ │
@@ -3011,11 +2931,9 @@
  │█│ │ │ │█│ │ │ │ │█│ │█│ │█│ │ │ │ │█│ │█│ │█│ │ │ │ │█│█│ │█│█│ │ │ │
  │█│ │█│ │█│ │ │ │ │█│ │█│ │█│ │ │ │ │█│█│ │█│█│ │ │ │ │█│ │ │ │█│ │ │ │
  └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘
-
    П р и м е р.
    ───────────
-   5 SCREEN 0
-   10 CLS:KEYOFF
+   5 SCREEN 0:CLS:KEYOFF
    20 FOR I=0 TO 5:PRINT "▧▨▧▨▧":NEXT
    30 FOR J=0 TO 7
    40    FOR K=0 TO 10:NEXT K
@@ -3023,15 +2941,13 @@
    60 NEXT J
    70 IF INKEY$="" THEN 30
    80 VDP(23+1)=0:END
-
    В  г р а ф и ч е с к и х  режимах регистр с номером  23  предоставляет
 другую интересную возможность. Вначале  следует вспомнить, что  доступная
 высота графического экрана  равна 192 или 212 линиям (в зависимости от де-
-вятого регистра MSX-VDP). Однако, Вы можете, воздействуя на  VRAM (исполь-
+вятого регистра MSX-VDP). Однако  Вы можете, воздействуя на  VRAM (исполь-
 зуя, например, оператор VPOKE), сформировать  шаблоны 256 линий,  просмот-
 рев которые Вы можете, использовав регистр с номером 23. Понять, как  это
 происходит, Вы можете из следующих рисунков:
-
 VDP(23+1)=0:      ┌─────────────────┐ Y=0
                   │  Видимые линии  │
                   ├─────────────────┤ Y=192 или 212
@@ -3045,8 +2961,6 @@
                   ├─────────────────┤ Y=200
                   │  Видимые линии  │
                   └─────────────────┘ Y=255
-
-
        XI.2.5.  Н е к о т о р ы е  р е г и с т р ы  д о с т у п а
 
    Имеется возможность изменить палитру некоторого цвета.
@@ -3067,12 +2981,11 @@
                 └─────┴─────┴─────┴─────┴─────┴─────┴─────┴──────┘
  ┌──────────────────────────────────────────────────────────────────────┐
  │ Для изменения цвета надо набрать последовательно команды (операторы):│
- │                 VDP(16+1)=C:OUT &H9A,16*R+B:OUT &H9A,G               │
+ │                 VDP(16+1)=C:OUT &H9A,16*R+B:OUT &H9A,G     ,         │
  │ где:    C - номер цветовой палитры, которую Вы хотите изменить;      │
  │       R,B,G - числа, определяющие соотношение красного, синего  и    │
  │                 зеленого цветов в палитре.                           │
  └──────────────────────────────────────────────────────────────────────┘
-
    П р и м е р 2.
    ─────────────
    COLOR 15,3
@@ -3081,7 +2994,6 @@
    Ok
    Отметим, что для компьютеров MSX-1 этот способ изменения цветов являет-
 ся единственно возможным!
-
    П р и м е р 3.
    ─────────────
    10 COLOR 8,15,0:KEY OFF:SCREEN 1
@@ -3093,20 +3005,20 @@
    Регистр с номером с е м н а д ц а т ь хранит информацию о  к о с в е н-
 н о м  доступе в регистры MSX-VDP.
    Взгляните на его содержимое:
-
              7     6     5     4     3     2     1     0
           ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
           │  ∗  │  0  │    Н о м е р    р е г и с т р а   │
           └──▲──┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
              ├──── 0 : автоинкрементирование  з а п р е щ е н о; 
              └──── 1 : автоинкрементирование  р а з р е ш е н о. 
-
    В соответствии со значением  7-го  бита регистра  17 содержимое  этого
 регистра может автоматически увеличиваться. Если автoинкрементирование за-
 прещено, то содержимое 17-го регистра останется прежним.
 
    Приведем два способа  к о с в е н н о й  з а п и с и  в видеопроцессор
 с использованием регистра с номером 17:
+
+
     ┌───────────────────────────────────────────────────────────────────┐
   α)│ 10 VDP(17+1)=N OR &H80'или OUT &H99,N OR &H80:OUT &H99,17 OR &H80 │
     │ 20 OUT &h9B, Число для регистра с номером N                       │
@@ -3114,7 +3026,6 @@
     │ 40 OUT &H9B, Число для регистра с номером N+2                     │
     │ 50 ' ···                                                          │
     └───────────────────────────────────────────────────────────────────┘
-
    П р и м е р 4.
    ─────────────
    5 SCREEN 1:COLOR 15,0,8
@@ -3133,10 +3044,10 @@
    Косвенный доступ к регистрам видеопроцессора применяется  тогда, когда
 необходимо записать информацию в несколько регистров, адреса которых идут
 п о д р я д. При этом запись через порт с адресом  &H9B будет происходить
-до тех пор, пока не будет сделана новая установка на косвеннвй доступ.
- ┌──────────────────────────────────────────────────────────────────────┐
- │ Данные в 17-ом регистре не могут быть изменены косвенной адресацией! │
- └──────────────────────────────────────────────────────────────────────┘
+до тех пор, пока не будет сделана новая установка на косвенный доступ.
+  ┌────────────────────────────────────────────────────────────────────┐
+  │ Данные в 17-м регистре не могут быть изменены косвенной адресацией!│
+  └────────────────────────────────────────────────────────────────────┘
 
 
              XI.2.6.  Д о с т у п   к   в и д е о п а м я т и
@@ -3144,12 +3055,10 @@
    Р е г и с т р  14  (регистр базового адреса доступа к VRAM).
    ─────────────────
    Этот регистр  видеопроцессора используется при доступе  к  видеопамяти.
-Если Вы располагаете видеопамятью объемом  до 16 Кбайт,  то использование
+Если Вы располагаете видеопамятью объемом до 16 Кбайтов, то использование
 этого регистра не имеет смысла, так как в нем хранятся  с т а р ш и е  би-
 ты текущего адреса видеопамяти.
-
                     Р е г и с т р  с  н о м е р о м  14
-
 Номера битов    7     6     5     4     3     2     1     0
              ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
              │  0  │  0  │  0  │  0  │  0  │ A16 │ A15 │ A14 │
@@ -3158,21 +3067,18 @@
 видеопамяти  (A16, A15, A14).
    Сейчас мы расскажем, как обратиться  к  л ю б о й  ячейке видеопамяти.
    На компьютерах серии MSX-2 существует 2 типа  видеопамяти: VRAM и ERAM.
-VRAM ("Video RAM") имеет объем в 128 Кб, а ERAM ("Expanded RAM") - 64 Кб.
-Информация о том, какая видеопамять используется в настоящий  момент, хра-
-нится в регистре с номером 45.
+VRAM ("Video RAM") имеет объем в 128 Кбайтов, а  ERAM  ("Expanded RAM") -
+64 Кбайта. Информация о том, какая видеопамять используется  в  настоящий
+момент, хранится в регистре с номером 45.
    Доступ к видеопамяти осуществляется в следующей последовательности: 
-
    1) выберите  т и п  видеопамяти:
       VDP(45+1)=&B0∗∗∗∗∗∗∗
                    ▲└──▲─┘
                    │   └── эти биты используются для других целей
                    ├────── 1 - если используется ERAM
                    └────── 0 - если используется VRAM
-
    Отметим, что содержимое  регистра с номером 45 не меняется при  очеред-
 ном обращении к памяти.
-
    2) установите биты A14÷A16 адреса видеопамяти:
       VDP(14+1)=&B00000∗∗∗
                        ▲▲▲
@@ -3191,7 +3097,6 @@
                  ││└───────── A5
                  │└────────── A6
                  └─────────── A7
-
    4) установите биты A8÷A13 счетчика адреса и признак чтения или  записи
 посредством вывода данных в порт &H99:
       OUT &H99,&B∗∗∗∗∗∗∗∗
@@ -3204,12 +3109,10 @@
                  ││└───────── A13
                  ├┼────────── 00 - признак чтения
                  └┴────────── 01 - признак записи
-
-   5) А теперь остается прочитать или записать данные в нужный байт:
+   5) а теперь остается прочитать или записать данные в нужный байт:
                         A=INP(&H98)  - ч т е н и е
                          OUT &H98,A  - з а п и с ь
-
-   6) После чтения или записи данных содержимое адресного счетчика автома-
+   6) после чтения или записи данных содержимое адресного счетчика автома-
 тически увеличивается на единицу. При этом, если есть перенос из бита A13,
 то в режимах SCREEN 4÷8 происходит увеличение содержимого регистра с номе-
 ром 14. В режимах SCREEN 1÷3 и в 40-символьном режиме SCREEN 0 увеличения
@@ -3222,12 +3125,11 @@
 
                 XI.2.7.  Р е г и с т р ы   с т а т у с а
 
-   Кроме регистров MSX-VDP, видеопроцессор работает  с группой  регистров,
-называемыми регистрами с т а т у с а. Данные регистры содержат информацию
-о состоянии видеопроцессора. Из них информацию можно только  ч и т а т ь.
+   Кроме регистров MSX-VDP  видеопроцессор работает  с группой  регистров,
+называемых регистрами  с т а т у с а. Эти регистры содержат  информацию о
+состоянии видеопроцессора. Из них информацию можно только  ч и т а т ь.
    Текущий номер  регистра  статуса  записывается в регистр VDP с номером
 п я т н а д ц а т ь  (регистр-указатель регистра состояния).
-
 Номера битов    7     6     5     4     3     2     1     0
              ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
              │  0  │  0  │  0  │  0  │ Номер регистра статуса│
@@ -3237,14 +3139,13 @@
 ми 0,1,2,3,...,9) вначале нужно установить номер регистра статуса в  реги-
 стре с номером 15, а затем прочесть данные через порт &H99.
   ┌───────────────────────────────────────────────────────────────────┐
-  │  Для записи в переменную W числа из регистра статуса с номером S, │
+  │  Для записи в переменную W числа из регистра статуса с номером S  │
   │  выполните следующие действия:                                    │
   │                VDP(15+1)=S:W=INP(&H99):VDP(15+1)=0                │
   └───────────────────────────────────────────────────────────────────┘
 
    Р е г и с т р  с т а т у с а  н о м е р  0.
    ──────────────────────────────────────────
-
         7      6      5      4      3      2      1      0
      ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
      │      │      │      │   ∗  │   ∗  │   ∗  │   ∗  │   ∗  │
@@ -3252,20 +3153,18 @@
          │      │     │    └───▲──────────────────────────────┘
          │      │     │        └ Экранный номер пятого или девятого
          │      │     │ (в зависимости от режима SCREEN) спрайта в строке
-         │      │     └─── Флаг, указывающий на столкновение 2-х спрайтов
+         │      │     └─── Флаг, указывающий на столкновение 2 спрайтов
          │      └───────── Флаг обнаружения пятого (или девятого) спрайта
          │                 в  с т р о к е
          └──────────────── Флаг прерывания от вертикального сканирования
                            (после чтения регистра состояния 0 данный флаг
                             сбрасывается)
-
    Если бит СС=0 и высвечиваемые части шаблонов спрайтов перекрываются,то
 устанавливается столкновение спрайтов. Если столкновение спрайтов  обнару-
 жено, то бит 5 регистра статуса с номером 0 устанавливается в 1.
    Этот бит устанавливается в 0 после чтения регистра статуса с номером 0.
 
    Использование регистра статуса с номером 0 рассмотрим на примерах.
-
    П р и м е р 1.
    ─────────────
    10 SCREEN 1,2
@@ -3275,7 +3174,6 @@
    50 VDP(15+1)=0:Z=INP(&H99) AND 32
    60 IF Z<>0 THEN PRINT "Столкновение состоялось!"
    70 NEXT
-
    П р и м е р 2.
    ─────────────
    10 SCREEN 1:KEYOFF
@@ -3290,7 +3188,6 @@
    90 NEXT
    100 GOTO 50
    110 DATA 255,255,195,195,195,195,255,255
-
    П р и м е р 3.
    ─────────────
    10 SCREEN1,2
@@ -3303,14 +3200,13 @@
    55 A$=INPUT$(1)
    60 PUT SPRITE4,(50,80),,1
    70 VDP(15+1)=0:Z=INP(&H99)
-   80 ? RIGHT$("00000000"+BIN$(Z),8);"◀─ Появился 5-ый спрайт в строке!"
+   80 ? RIGHT$("00000000"+BIN$(Z),8);"◀─ Появился 5-й спрайт в строке!"
 
    Отметим, что содержимое регистра статуса с номером 0 можно прочесть не
 только функцией INP, но и при помощи псевдопеременной VDP:
                               ┌────────────┐
                               │ A = VDP(8) │  .
                               └────────────┘
-
    П р и м е р 4.  Управление столкновениями спрайтов.
    ──────────────
    20 SCREEN 2,2
@@ -3321,19 +3217,17 @@
    70 PUT SPRITE 1,STEP(1,0),8,0
    80 GOTO 60
    90 BEEP:GOTO 90
-
    З а м е ч а н и е. Назначения битов регистров статуса с номерами 1,2,3,
 4,5,6,7,8,9 рассмотрены в Приложении 2. Там же рассмотрены назначения  би-
 тов командных регистров с номерами 32,33,...,45,46.
 
-             XI.3.  НЕСТАНДАРТНЫЕ  РЕЖИМЫ  ВИДЕОПРОЦЕССОРА
 
+             XI.3.  НЕСТАНДАРТНЫЕ  РЕЖИМЫ  ВИДЕОПРОЦЕССОРА
 
                               Боги открыли людям не все.
                               В поиск пустившись,люди сами открыли немало.
                                                                  Ксенофан 
 
-
     XI.3.1.  Р е ж и м  SCREEN 4  н а  к о м п ь ю т е р а х  MSX-1
 
    Для Вас, наверное, окажется неожиданностью, что  на  компьютерах MSX-1
@@ -3357,6 +3251,7 @@
 процессору:                  ┌──────────────┐
                              │   VDP(0)=2   │  .
                              └──────────────┘
+
    Учтите, что режим SCREEN 4 на компьютерах серии  MSX-1 имеет некоторые
 о с о б е н н о с т и:
    1) происходит частичное "наложение" Таблиц  SAT и SCT  на  Таблицу PNT,
@@ -3373,7 +3268,6 @@
 ред обращением к Таблице атрибутов спрайтов (SAT).
 
    А теперь взгляните на
-
    П р и м е р 1. Вы, конечно, помните, что текущий адрес Таблицы PNT хра-
    ─────────────  нится в рабочей области по адресам &HF922 и &HF923 .
    10 SCREEN 2,2
@@ -3406,7 +3300,6 @@
 тов в  с т р о к е , так как Вам, наверное, известно,что режимы SCREEN 4 ÷
 SCREEN 8 предоставляют такую возможность!
 
-
         XI.3.2.  Т е к с т о в о - г р а ф и ч е с к и е  р е ж и м ы
 
    Мы опишем здесь два текстово-графических режима:
@@ -3417,7 +3310,7 @@
                      ┌───────────────────────────────┐
                      │ SCREEN 1:DEFUSR=&H7E:A=USR(0) │  .
                      └───────────────────────────────┘
-   Однако прежде чем начать "работать" в этом режиме, его надо инициализи-
+   Однако,прежде чем начать "работать" в этом режиме, его надо инициализи-
 ровать следующим образом:
    ┌──────────────────────────────────────────────────────────────────┐
    │ 10 SCREEN1:WIDTH 32                                              │
@@ -3436,7 +3329,6 @@
    Не беда, что для инициализации требуется более двух минут. При соответ-
 ствующей подготовке Вы сможете написать программу в машинных  кодах, кото-
 рая будет работать в несколько десятков раз быстрее:
-
    П р и м е р 1.   Смотрите и завидуйте!
    ─────────────
    100 CLEAR 100,&HD000
@@ -3446,9 +3338,7 @@
    130 FOR X=0 TO 48:POKE &HD000+X,VAL("&h"+MID$(A$,X*2+1,2)):NEXT
    140 DEFUSR=&HD000:A=USR(0)
    150 FOR Y=1 TO 2:FOR X=0 TO 7:VPOKE &H800*Y+255*8+X,255:NEXT X,Y
-
    Поговорим об  о с о б е н н о с т я х  режима SCREEN 1-2 :
-
    1. Данный режим позволяет формировать многоцветные символы, причем  ин-
 формация о цветах каждого из них хранится  в  в о с ь м и  байтах Таблицы
 CT:           1-й  б а й т         ···         8-й  б а й т
@@ -3468,7 +3358,6 @@
                       │ в о с ь м и │ в о с ь м и │
                       │  символов       символов  │
                       └─────────────┴─────────────┘
-
    2. Режим SCREEN 1-2 имеет трехоконную структуру(как и режим SCREEN 2):
 Внимательно изучите следующую табличку:
 ┌───────┬─────────────────────────────────────────────────────────────┐
@@ -3485,21 +3374,19 @@
 │ &H1900│ Таблица имен образов (строки 8÷15)                          │
 │ &H1A00│ Таблица имен образов (строки 16÷23)                         │
 │ &H1B00│ Таблица атрибутов спрайтов                                  │
-│ &H2000│ Таблица цветов символов,расположенных с 0-ой по 7-ю строку. │
+│ &H2000│ Таблица цветов символов, расположенных  с 0-й по 7-ю строку.│
 │       │ На каждый символ отводится 8 байтов. На каждую строку симво-│
 │       │ ла отводится 1 байт, старший полубайт которого отвечает за  │
 │       │ цвет установленных битов в Таблице шаблонов символов        │
-│ &H2800│ Таблица цветов символов,расположенных с 8-ой по 15-ю строку │
-│ &H3000│ Таблица цветов символов,расположенных с 16-ой по 23-ю строку│
+│ &H2800│ Таблица цветов символов, расположенных с 8-й по 15-ю строку │
+│ &H3000│ Таблица цветов символов, расположенных с 16-й по 23-ю строку│
 │ &H3800│ Таблица шаблонов спрайтов                                   │
 └───────┴─────────────────────────────────────────────────────────────┘
-
    3. В режиме SCREEN 1-2 разрешено использование как текстовых,так и гра-
 фических операторов, т.о. "совмещенный" режим SCREEN 1-2 может находиться
 в двух "состояниях".
-
    В о - п е р в ы х, это - т е к с т о в ы й  режим.В нем "работают" все
-операторы текстового экрана. Однако, он отличается от  текстового  режима
+операторы текстового экрана. Однако  он отличается от  текстового  режима
 SCREEN 1 в следующих моментах:
    1) весь экран разбит на  т р и  горизонтальных окна;
    2) символ, вообще говоря, раскрашен  о д н о в р е м е н н о  в 16 цве-
@@ -3509,7 +3396,7 @@
    ┌──────────────────────────────────────────────────────────────────┐
    │   Для изменения цвета какой-либо строки любого символа в любой   │
    │   трети экрана, примените оператор:                              │
-   │                   VPOKE BASE(5+1)+2048*N+8*K+S,&HIF              │
+   │                   VPOKE BASE(5+1)+2048*N+8*K+S,&HIF  ,           │
    │   где:  N - номер окна экрана;                                   │
    │         K - код ASCII символа;                                   │
    │         S - номер строки символа;                                │
@@ -3524,9 +3411,7 @@
    │       S - номер строки символа;                                  │
    │       ∗∗∗∗∗∗∗∗ - двоичное представление шаблона строки символа.  │
    └──────────────────────────────────────────────────────────────────┘
-
    Приведем несколько примеров:
-
    П р и м е р 2.   Полюбуйтесь на  ц в е т н о й  курсор!
    ─────────────
    10 FOR X=0 TO 2
@@ -3535,18 +3420,13 @@
    40       VPOKE A+Y,Y*16
    50    NEXT Y
    60 NEXT X
-
-   П р и м е р  3.  А вот "переливание" латинских букв  "А"  в верхней трети
-   ──────────────   экрана!
+   П р и м е р  3.  А вот "переливание" латинских букв  "А" в верхней тре-
+   ──────────────   ти экрана!
    10 FOR A=0 TO 8
-   20    FOR X=0 TO 7
-   30       VPOKE &H2000+65*8+X,(X+A)*16
-   40    NEXT X
+   20    FOR X=0 TO 7: VPOKE &H2000+65*8+X,(X+A)*16: NEXT X
    50 NEXT A
    60 GOTO 10
-
   Чтобы прекратить процесс "переливания", нажмите клавиши "CTRL"+"STOP".
-
    П р и м е р 4.  Вместо буквы "W" в верхнем углу экрана Вы увидете...
    ─────────────   "яблоко"!
    10 OUT&H99,6:OUT&H99,144:OUT&H98,16*4:OUT&H98,2 'Изменим 6-й цвет
@@ -3555,13 +3435,11 @@
    40  VPOKE 87*8+X,VAL("&H"+MID$(A$,X*2+1,2))
    50  VPOKE &H2000+87*8+X,VAL("&H"+MID$(A$,2*X+17,2))
    60 NEXT X
-
    П р и м е р 5. "Т о л с т ы е" символы - только в верхней трети экрана!
    ─────────────
    10 FOR X=&HFFTO &H7F7
    20    A=VPEEK(X):VPOKE X,A OR A/2
    30 NEXT X
-
    П р и м е р 6.  Теперь повращаем "трубу" вокруг своей оси!
    ─────────────
    10 FOR I=0 TO 7:VPOKE 8*43+I,255:NEXT
@@ -3584,8 +3462,8 @@
 можно одновременно и рисовать, и выводить текст. Для этого предварительно
 решите, в какой части экрана (одной или нескольких) Вы будете рисовать, а
 в какой - писать.
-   Для того, чтобы рисовать в какой-либо части экрана,  ее надо  предвари-
-тельно подготовить следующим образом:
+   Для того чтобы рисовать в какой-либо части экрана,ее надо предваритель-
+но подготовить следующим образом:
           ┌────────────────────────────────────────────────────┐
           │ FOR T=0 TO 255 :VPOKE BASE(5)+256*N+T,T      :NEXT │
           │ FOR T=0 TO 2047:VPOKE BASE(5+1)+2048*N+T,&HF4:NEXT │
@@ -3596,7 +3474,7 @@
    Таким образом, Вы инициализируете участки Таблиц PNT, CT и PGT,отвечаю-
 щие за изображение в нужном окне экрана.
    Теперь в приготовленной части экрана можно применять графические опера-
-торы. Однако, их можно применять только после выполнения оператора:
+торы. Однако их можно применять только после выполнения оператора:
                             ┌───────────────┐
                             │ POKE &HFCAF,2 │  .
                             └───────────────┘
@@ -3605,13 +3483,13 @@
                             │ POKE &HFCAF,1 │  .
                             └───────────────┘
    Если Вы его не выполните, то произойдет переход в режим SCREEN 1 !
+
    Нужно постоянно помнить о том, что Ваши рисунки могут "портиться", так
 как любой символ, напечатанный в графической части экрана, портит рисунок.
-Однако, рисунок можно восстановить, применив операторы:
+Однако рисунок можно восстановить, применив операторы:
              ┌─────────────────────────────────────────────┐
              │ FOR T=0 TO 255:VPOKE BASE(5)+256*N+T,T:NEXT │
              └─────────────────────────────────────────────┘
-
    П р и м е р 7.  В верхней части экрана - г р а ф и ч е с к и й  режим!
    ─────────────
    10 CLS
@@ -3646,7 +3524,7 @@
    │ 140 VDP(5)=52:POKE &HF929,&H1A 'Приведем в порядок SAT           │
    │ 150 VDP(0)=4:CLS:NEW                                             │
    └──────────────────────────────────────────────────────────────────┘
-   Все сказанное о режиме SCREEN 1-2, распространяется и на режим  SCREEN
+   Все сказанное о режиме SCREEN 1-2  распространяется и на режим  SCREEN
 1-4. Остается только добавить, что структура видеопамяти  в "совмещенном"
 режиме SCREEN 1-4 полностью совпадает со структурой VRAM в режиме SCREEN4
 для компьютеров серии MSX-1.
msx/basic_dialogue_programming_language/files/diff_011.txt · Последние изменения: 2022-09-10 13:02 — GreyWolf