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

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


msx:basic_dialogue_programming_language:010

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:010 [2022-09-19 23:14]
GreyWolf [X.7. Оператор CLEAR]
msx:basic_dialogue_programming_language:010 [2023-02-19 16:22] (текущий)
GreyWolf
Строка 6: Строка 6:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Мозг, хорошо устроенный,​ стоит больше,​ чем мозг, хорошо наполненный. Мозг, хорошо устроенный,​ стоит больше,​ чем мозг, хорошо наполненный.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 489: Строка 489:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Ты славно роешь землю, старый крот! \\ Ты славно роешь землю, старый крот! \\
 Годишься в рудокопы. Годишься в рудокопы.
Строка 722: Строка 722:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Что имеем — не храним;​ потерявши — плачем. Что имеем — не храним;​ потерявши — плачем.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 846: Строка 846:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 А люди все роптали и роптали,​ \\ А люди все роптали и роптали,​ \\
 А люди справедливости хотят: \\ А люди справедливости хотят: \\
Строка 1256: Строка 1256:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Чтобы вычистить одно, приходится выпачкать что–нибудь другое;​ но можно испачкать всё, что угодно,​ и ничего при этом не вычистить. Чтобы вычистить одно, приходится выпачкать что–нибудь другое;​ но можно испачкать всё, что угодно,​ и ничего при этом не вычистить.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1338: Строка 1338:
   * ''​VARTAB''​ — имя слова, расположенного в рабочей области по адресу &HF6C2. Этот адрес занимает 2 байта памяти.   * ''​VARTAB''​ — имя слова, расположенного в рабочей области по адресу &HF6C2. Этот адрес занимает 2 байта памяти.
  
-{{anchor:​e107-03}} __//​Пример 3//__. Нажмите кнопку <​key>​RESET</​key>​ Вашего компьютера. \\ {{.examples:​107-03.bas|}} \\ [[+tab|wmsxbpge>​107-03.bas]] +{{anchor:​e107-03}} __//​Пример 3//__. Нажмите кнопку <​key>​RESET</​key>​ Вашего компьютера. ​ 
-А теперь:​+\\ А теперь: ​\\ {{.examples:​107-03.bas|}} \\ [[+tab|wmsxbpge>​107-03.bas]] 
 <​code>​ <​code>​
 10 PRINT HEX$(PEEK(&​HF69C));"​ ";​HEX$(PEEK(&​HF69B)) 10 PRINT HEX$(PEEK(&​HF69C));"​ ";​HEX$(PEEK(&​HF69B))
Строка 1376: Строка 1377:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Garbage collection ("​чистка памяти",​ "​сборка мусора"​) — действия системы динамического распределения памяти для обнаружения неиспользуемых программой блоков памяти и присоединения их к списку свободной памяти для повторного использования. Garbage collection ("​чистка памяти",​ "​сборка мусора"​) — действия системы динамического распределения памяти для обнаружения неиспользуемых программой блоков памяти и присоединения их к списку свободной памяти для повторного использования.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1422: Строка 1423:
 run run
  28739  28739
- 28728 ◀── т.к. переменная Х по умолчанию — двойной точности,​ аследовательно,​ занимает в памяти 11 байт;+ 28728 ◀── т.к. переменная Х по умолчанию — двойной точности,​ а следовательно,​ занимает в памяти 11 байт;
  28717 ◀── т.к. переменная Z — двойной точности (занимает в памяти также 11 байт);  28717 ◀── т.к. переменная Z — двойной точности (занимает в памяти также 11 байт);
  28710 ◀── т.к. переменная Y — одинарной точности (занимает в памяти 7 байт);  28710 ◀── т.к. переменная Y — одинарной точности (занимает в памяти 7 байт);
Строка 1460: Строка 1461:
 Поэтому,​ если в качестве аргумента функции ''​FRE''​ задано выражение строкового типа, перед вычислением объёма свободной памяти функция выполняет //"​сборку мусора"//,​ т.е. удаление всех неиспользуемых данных и освобождение занимаемых ими областей. Поэтому,​ если в качестве аргумента функции ''​FRE''​ задано выражение строкового типа, перед вычислением объёма свободной памяти функция выполняет //"​сборку мусора"//,​ т.е. удаление всех неиспользуемых данных и освобождение занимаемых ими областей.
  
-{{anchor:​e108-02}} __//​Пример 2//__. Оказывается,​что если у Вас в начале программы встречается оператор ''​A$="​ABCD"​+"​EF"'',​ а затем ​— оператор ''​A$="​X"​+"​Y"'',​ то Вы сразу же создадите 6–байтовое пространство,​ заполненное "​мусором"​! \\ +{{anchor:​e108-02}} __//​Пример 2//__. Оказывается,​что если у Вас в начале программы встречается оператор ''​A$="​ABCD"​+"​EF"'',​ а затем оператор ''​A$="​X"​+"​Y"'',​ то Вы сразу же создадите 6–байтовое пространство,​ заполненное "​мусором"​! \\ 
 Покажем это: Покажем это:
 \\ {{.examples:​108-02.bas|}} \\ [[+tab|wmsxbpge>​108-02.bas]] \\ FIXME \\ {{.examples:​108-02.bas|}} \\ [[+tab|wmsxbpge>​108-02.bas]] \\ FIXME
Строка 1634: Строка 1635:
 <WRAP centeralign>​Адрес,​ отмечающий //​начало//​ рабочей области,​ указан в самой этой области в слове ''​HIMEM'',​ содержимое которого занимает 2 байта, расположенных с адреса &HFC4A .</​WRAP>​ <WRAP centeralign>​Адрес,​ отмечающий //​начало//​ рабочей области,​ указан в самой этой области в слове ''​HIMEM'',​ содержимое которого занимает 2 байта, расположенных с адреса &HFC4A .</​WRAP>​
  
-Ещё раз напомним Вам, что адреса,​ занимающие два байта, всегда записываются так: вначале записывается содержимое младшего байта, а затем ​— содержимое старшего байта!+Ещё раз напомним Вам, что адреса,​ занимающие два байта, всегда записываются так: вначале записывается содержимое младшего байта, а затем содержимое старшего байта!
  
 Отметим,​ что значением выражения ''​HEX$(PEEK(&​HFC4A)+256*PEEK(&​HFC4B))''​ является //​адрес начала рабочей//​ области. Отметим,​ что значением выражения ''​HEX$(PEEK(&​HFC4A)+256*PEEK(&​HFC4B))''​ является //​адрес начала рабочей//​ области.
Строка 1645: Строка 1646:
 //​Матрицей//​ клавиатуры для MSX–компьютеров назовём таблицу вида: //​Матрицей//​ клавиатуры для MSX–компьютеров назовём таблицу вида:
 | | ^  0–й бит ​ ^  1–й бит ​ ^  2–й бит ​ ^  3–й бит ​ ^  4–й бит ​ ^  5–й бит ​ ^  6–й бит ​ ^  7–й бит ​ ^ | | ^  0–й бит ​ ^  1–й бит ​ ^  2–й бит ​ ^  3–й бит ​ ^  4–й бит ​ ^  5–й бит ​ ^  6–й бит ​ ^  7–й бит ​ ^
-|:::​^Адреса \\ байт^ ​ 254  ^  253  ^  251  ^  247  ^  239  ^  223  ^  191  ^  127  ^+|:::​^Адреса \\ байт^  ​&hFE \\ (254 ​^  ​&hFD \\ (253 ​^ ​&hFB \\ (251 ​^  ​&hF7 \\ (247 ​^  ​&hEF \\ (239 ​^  ​&hDF \\ (223 ​^  ​&hBF \\ (191 ​^  ​&h7F \\ (127 ^
 ^  0–я строка ​ ^  FBE5  |  9  |  ;  |  1  |  2  |  3  |  4  |  5  |  6  | ^  0–я строка ​ ^  FBE5  |  9  |  ;  |  1  |  2  |  3  |  4  |  5  |  6  |
 ^  1–я строка ​ ^  FBE6  |  7  |  8  |  0  |  =  |  -  |  H  |  :  |  V  | ^  1–я строка ​ ^  FBE6  |  7  |  8  |  0  |  =  |  -  |  H  |  :  |  V  |
Строка 1658: Строка 1659:
 ^  10–я строка ​ ^  FBEF  |  5  |  6  |  7  |  8  |  9  |  -  |  ,  |  .  | ^  10–я строка ​ ^  FBEF  |  5  |  6  |  7  |  8  |  9  |  -  |  ,  |  .  |
  
-Последние две строки соответствуют цифровой (правой) зоне клавиатуры учительского компьютера серии [[msx:​msx_2]]. Более подробная информация по этой теме [[msx:​russification:​russification#​матрица_клавиатуры|здесь]]((Примечание редактора)).+Последние две строки соответствуют цифровой (правой) зоне клавиатуры учительского компьютера серии [[msx:​msx_2]]. ​ 
 + 
 +8-) Более подробная информация по этой теме [[msx:​russification:​russification#​матрица_клавиатуры|здесь]]
  
 Ответим теперь на Ваш очевидный вопрос:​ <WRAP centeralign>​Как воспользоваться этой таблицей?</​WRAP>​ Ответим теперь на Ваш очевидный вопрос:​ <WRAP centeralign>​Как воспользоваться этой таблицей?</​WRAP>​
  
-__//​Пример 1//__. Ниже приведены программа,​ останавливаемая нажатием клавиши <​key>​GRAPH</​key>:​+__//​Пример 1//​__. ​ 
 +\\ Ниже приведены программа,​ останавливаемая нажатием клавиши <​key>​GRAPH</​key>:​
   10 Z=PEEK(&​HFBEB):​IF Z<>​251 THEN 10   10 Z=PEEK(&​HFBEB):​IF Z<>​251 THEN 10
 и программа,​ останавливаемая нажатием клавиш <​key>​SHIFT+CTRL</​key>:​ и программа,​ останавливаемая нажатием клавиш <​key>​SHIFT+CTRL</​key>:​
Строка 1672: Строка 1676:
 {{anchor:​e1091-01}} __//​Пример 2//__. Программа "​пробегает"​ все клавиши и возвращает позицию нажатой клавиши (X,Y) матрицы клавиатуры. 11 значений,​ записанных в слове ''​NEWKEY'',​ соответствуют 11 строкам матрицы клавиатуры. {{anchor:​e1091-01}} __//​Пример 2//__. Программа "​пробегает"​ все клавиши и возвращает позицию нажатой клавиши (X,Y) матрицы клавиатуры. 11 значений,​ записанных в слове ''​NEWKEY'',​ соответствуют 11 строкам матрицы клавиатуры.
 Если не нажата ни одна клавиша,​ содержанием каждого из 8 байт, соответствующих строке матрицы является 1. Это фиксируется двоичным числом &​B11111111=255. Когда же клавиша нажата,​ считанное на этой строке значение отличается от 255: бит соответствующей колонки "​сбрасывается"​ в 0. Если не нажата ни одна клавиша,​ содержанием каждого из 8 байт, соответствующих строке матрицы является 1. Это фиксируется двоичным числом &​B11111111=255. Когда же клавиша нажата,​ считанное на этой строке значение отличается от 255: бит соответствующей колонки "​сбрасывается"​ в 0.
 +
 {{.examples:​1091-01.bas|}} \\ [[+tab|wmsxbpge>​1091-01.bas]] {{.examples:​1091-01.bas|}} \\ [[+tab|wmsxbpge>​1091-01.bas]]
 <​code>​ <​code>​
Строка 1688: Строка 1693:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Промедление с лёгким делом превращает его в трудное,​ промедление же с трудным делом превращает его в невозможное. Промедление с лёгким делом превращает его в трудное,​ промедление же с трудным делом превращает его в невозможное.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1777: Строка 1782:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify+<WRAP half column><​WRAP ​right
-И я надеюсь,​ что наши потомки будут благодарны мне не только за то, что я здесь разъяснил,​ но и за то, что мною было добровольно опущено с целью предоставить им удовольствие самим найти это.+И я надеюсь,​ что наши потомки будут благодарны ​ 
 +\\ мне не только за то, что я здесь разъяснил,​ но  
 +\\ и за то, что мною было добровольно опущено с  
 +\\ целью предоставить им удовольствие самим найти это.
 <WRAP rightalign>​ <WRAP rightalign>​
-—//Pене ​Декарт. Геометрия//​+—//P.Декарт. Геометрия//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
Строка 1790: Строка 1798:
 Процессор "​работает"​ с портами по адресам,​ которые не следует путать с адресами ROM или RAM: Процессор "​работает"​ с портами по адресам,​ которые не следует путать с адресами ROM или RAM:
   - порты с адресами &​H00÷&​H7F. Вы не можете //​изменить//​ их содержимое (сравните с ROM!);   - порты с адресами &​H00÷&​H7F. Вы не можете //​изменить//​ их содержимое (сравните с ROM!);
-  - порты с адресами &​H80÷&​HFF. Их содержимое изменять можно (сравните с RAM!); +  - порты с адресами &​H80÷&​HFF. Их содержимое изменять можно (сравните с RAM!).
-  - порты с адресами &​H100÷&​HFFFF зарезервированы(пока не используются).+
  
 Некоторые порты, их функции и адреса перечислены ниже: Некоторые порты, их функции и адреса перечислены ниже:
Строка 1797: Строка 1804:
 ^  Адрес ​ ^  Чтение(Запись) ​ ^  Назначение ​ ^ ^  Адрес ​ ^  Чтение(Запись) ​ ^  Назначение ​ ^
 |  Порты, отвечающие за работу с локальной сетью КУВТ YAMAHA [[msx:​msx_1]] ​ ||| |  Порты, отвечающие за работу с локальной сетью КУВТ YAMAHA [[msx:​msx_1]] ​ |||
-|  &h00  ​| ​ Чтение(Запись) ​ |  Посылаемые данные ​ | +|  &H00  ​| ​ Чтение(Запись) ​ |  Посылаемые данные ​ | 
-|  &h01  ​| ​ Чтение ​ |  Статус ​ |+|  &H01  ​| ​ Чтение ​ |  Статус ​ |
 |  &​H02 ​ |  Чтение ​ | Номер компьютера в локальной сети (только для компьютеров [[msx:​msx_1]]) ​ | |  &​H02 ​ |  Чтение ​ | Номер компьютера в локальной сети (только для компьютеров [[msx:​msx_1]]) ​ |
 |  Порты, отвечающие за работу с локальной сетью КУВТ YAMAHA [[msx:​msx_2]] ​ ||| |  Порты, отвечающие за работу с локальной сетью КУВТ YAMAHA [[msx:​msx_2]] ​ |||
Строка 1820: Строка 1827:
 |  &​HA0 ​ |  Запись ​ |  Ввод в порт номера регистра ​ | |  &​HA0 ​ |  Запись ​ |  Ввод в порт номера регистра ​ |
 |  &​HA1 ​ |  Запись ​ |  Ввод в порт информации для установленного регистра ​ | |  &​HA1 ​ |  Запись ​ |  Ввод в порт информации для установленного регистра ​ |
-|  &​HA2 ​ |  Чтение ​ |  ​Последнее число, записанное в PSG  |+|  &​HA2 ​ |  Чтение ​ |  ​Чтение числа ​из регистра PSG  |
 |  Программируемый //​периферийный интерфейс//​ (PPI)  ||| |  Программируемый //​периферийный интерфейс//​ (PPI)  |||
 |  &​HA8 ​ |  Чтение(Запись) ​ |  Запись (чтение) данных в порт A  | |  &​HA8 ​ |  Чтение(Запись) ​ |  Запись (чтение) данных в порт A  |
Строка 1826: Строка 1833:
 |  &​HAA ​ |  Чтение(Запись) ​ |  Запись (чтение) данных в порт C  | |  &​HAA ​ |  Чтение(Запись) ​ |  Запись (чтение) данных в порт C  |
 |  &​HAB ​ |  Чтение(Запись) ​ |  Запись (чтение) режимов PPI  | |  &​HAB ​ |  Чтение(Запись) ​ |  Запись (чтение) режимов PPI  |
-|  Порты, отвечающие за работу с  //дисководом// ​ | +|  &​HB0 ​ | |Внешняя память (SONY) (через &​HB3)| 
-|  &​HB4 ​ |  Запись ​ |  ​ | +|  Порты, отвечающие за работу с  //таймером// ​ | 
-|  &​HB5 ​ |  Чтение(Запись) ​ |  ​ |+|  &​HB4 ​ |  Запись ​ |  ​Номер столбца ОЗУ таймера ​ | 
 +|  &​HB5 ​ |  Чтение(Запись) ​ |  ​Чтение/​запись данных в ОЗУ таймера ​ 
 +|  &​HB8 ​ | |  Световое перо (Sanyo) (через &​HBB) ​ | 
 +|  &​HF7 ​ |  Запись ​ |<​WRAP>​Управление Audio/Video \\ \\ Номер бита / Назначение бита 
 +  * 4 Управление AV (0 — TV) 
 +  * 5 Управление Ym (0 — TV) 
 +  * 6 Управление Ys (0 — Super) 
 +  * 7 Выбор Video (0 — TV) 
 +</​WRAP>​|
 |  &​HFC ​ |  Чтение(Запись) ​ |  Регистры распределения //​слотов//​ (расширений памяти) для компьютеров серии [[msx:​msx_2]] ​ | |  &​HFC ​ |  Чтение(Запись) ​ |  Регистры распределения //​слотов//​ (расширений памяти) для компьютеров серии [[msx:​msx_2]] ​ |
 |  &​HFD ​ |  Чтение(Запись) ​ |:::| |  &​HFD ​ |  Чтение(Запись) ​ |:::|
Строка 1858: Строка 1873:
 <WRAP centeralign>​ <WRAP centeralign>​
 //​Внимание!//​ \\  //​Внимание!//​ \\ 
-На компьютерах серии [[msx:​msx_2]] прежде,​ чем использовать оператор ''​OUT'',​ необходимо в непосредственном режиме выполнить команду ''​[[msx:​network_basic#​CALL NETEND]]''​ (отключить Ваш компьютер от локальной сети) +На компьютерах серии [[msx:​msx_2]] прежде,​ чем использовать оператор ''​OUT'',​ необходимо в непосредственном режиме выполнить команду ''​[[msx:​network_basic#​CALL NETEND]]''​ (т.е. ​отключить Ваш компьютер от локальной сети).</​WRAP>​
-</​WRAP>​+
  
 {{anchor:​inp}} {{anchor:​inp}}
Строка 1894: Строка 1908:
  
 Объясним роль логической операции ''​AND''​. Значением,​ возвращаемым функцией ''​INP(&​H02)'',​ является двоичное число, записанное в одном байте. "​Содержимое"​ четырёх старших битов байта нас не интересует. Заметим,​ что число 15 = &​b00001111. Как Вы уже, наверное,​ догадались,​ логическая операция ''​AND''​ позволяет выделить нужные нам четыре младших бита. Объясним роль логической операции ''​AND''​. Значением,​ возвращаемым функцией ''​INP(&​H02)'',​ является двоичное число, записанное в одном байте. "​Содержимое"​ четырёх старших битов байта нас не интересует. Заметим,​ что число 15 = &​b00001111. Как Вы уже, наверное,​ догадались,​ логическая операция ''​AND''​ позволяет выделить нужные нам четыре младших бита.
 +
 +8-) Подробнее о портах ввода/​вывода написано [[msx:​io_ports|здесь]].
  
 {{anchor:​n10101}} {{anchor:​n10101}}
Строка 1905: Строка 1921:
  
 <WRAP centeralign>​Порт А используется для выбора //​слотов//,​ осуществляющих управление расширенной памятью компьютера.</​WRAP>​ <WRAP centeralign>​Порт А используется для выбора //​слотов//,​ осуществляющих управление расширенной памятью компьютера.</​WRAP>​
 +За подробностями мы отсылаем Вас к Приложению 1 ([[108#​n182|раздел 1.8.2]])
  
-<WRAP centeralign>​Порты ​PPI B и C применяются для "​работы"​ с матрицей клавиатуры,​ причём номер строки матрицы клавиатуры "​посылается"​ в порт C, а номер столбца "​читается"​ в порту B.</​WRAP>​+<WRAP centeralign>​Порты B и C применяются для "​работы"​ с матрицей клавиатуры,​ причём номер строки матрицы клавиатуры "​посылается"​ в порт C, а номер столбца "​читается"​ в порту B.</​WRAP>​
  
 {{anchor:​e1011-01}} __//​Пример 1//__. //​Обнаружение//​ нажатия клавиши <​key>​GRAPH</​key>​. \\ {{.examples:​1011-01.bas|}} \\ [[+tab|wmsxbpge>​1011-01.bas]] {{anchor:​e1011-01}} __//​Пример 1//__. //​Обнаружение//​ нажатия клавиши <​key>​GRAPH</​key>​. \\ {{.examples:​1011-01.bas|}} \\ [[+tab|wmsxbpge>​1011-01.bas]]
  
-Отметим,​ что клавиша <​key>​GRAPH</​key>​ находится в строке 6 и столбце 2 матрицы клавиатуры (и строкии столбцы матрицы нумеруются,​ начиная с 0). Тогда:+Отметим,​ что клавиша <​key>​GRAPH</​key>​ находится в строке 6 и столбце 2 матрицы клавиатуры (и строки и столбцы матрицы нумеруются,​ начиная с 0). Тогда:
   - номер строки матрицы клавиатуры "​посылаем"​ в порт C : <​code>​OUT &​HAA,​6</​code>​   - номер строки матрицы клавиатуры "​посылаем"​ в порт C : <​code>​OUT &​HAA,​6</​code>​
   - "​извлекаем"​ номер столбца из порта B: <​code>​X=INP(&​HA9)</​code>​   - "​извлекаем"​ номер столбца из порта B: <​code>​X=INP(&​HA9)</​code>​
Строка 1931: Строка 1948:
  
 Взгляните на приведённую ниже таблицу,​ в которой описаны назначения битов порта C: Взгляните на приведённую ниже таблицу,​ в которой описаны назначения битов порта C:
-|Биты 0÷3|Строка клавиатуры| +|Биты 0÷3|Строка ​матрицы ​клавиатуры| 
-|Бит 4|Если 0, то запускается ​кассетная лента| +|Бит 4|Если 0, то запускается ​магнитная лента| 
-|Бит 5|Сигнал записи на ленту|+|Бит 5|Сигнал записи на магнитную ​ленту|
 |Бит 6|Если 0, то включается индикатор "​CAPS"​| |Бит 6|Если 0, то включается индикатор "​CAPS"​|
 |Бит 7|Управление звуковым сигналом| |Бит 7|Управление звуковым сигналом|
Строка 2042: Строка 2059:
 |<​code>​PLAY "​O4B"</​code>​| ​ 227  |  0  | |<​code>​PLAY "​O4B"</​code>​| ​ 227  |  0  |
 |<​code>​PLAY "​O5C"</​code>​| ​ 214  |  0  | |<​code>​PLAY "​O5C"</​code>​| ​ 214  |  0  |
 +
 +Вы можете проверить эту таблицу при помощи следующей программы:​
 +<​code>​
 +10 PLAY "​O4C"​
 +20 OUT &hA0,0: PRINT INP(&​hA2) '​Читаем данные
 +30 OUT &hA0,1: PRINT INP(&​hA2) 'из регистров PSG
 +</​code>​
 +А теперь слушайте ...
  
 {{anchor:​e1012-03}} __//​Пример 3//__. Гамма "​до–мажор"​. \\ {{.examples:​1012-03.bas|}} \\ [[+tab|wmsxbpge>​1012-03.bas]] {{anchor:​e1012-03}} __//​Пример 3//__. Гамма "​до–мажор"​. \\ {{.examples:​1012-03.bas|}} \\ [[+tab|wmsxbpge>​1012-03.bas]]
Строка 2053: Строка 2078:
 60 OUT &​HA0,​8:​OUT &HA1,0 '​Сбросим громкость канала A 60 OUT &​HA0,​8:​OUT &HA1,0 '​Сбросим громкость канала A
 </​code>​ </​code>​
 +
  
 {{anchor:​e1012-04}} __//​Пример 4//__. "В траве сидел кузнечик!"​ \\ {{.examples:​1012-04.bas|}} \\ [[+tab|wmsxbpge>​1012-04.bas]] {{anchor:​e1012-04}} __//​Пример 4//__. "В траве сидел кузнечик!"​ \\ {{.examples:​1012-04.bas|}} \\ [[+tab|wmsxbpge>​1012-04.bas]]
 +\\ 8-) В авторском варианте отсутствует.
 <​code>​ <​code>​
 10 '​DEFINTA-Z:​BEEP 10 '​DEFINTA-Z:​BEEP
Строка 2146: Строка 2173:
 Вы можете прервать затянувшееся "​ожидание",​ нажав клавиши <​key>​CTRL+STOP</​key>​ (при этом Вы вернётесь в командный режим). Вы можете прервать затянувшееся "​ожидание",​ нажав клавиши <​key>​CTRL+STOP</​key>​ (при этом Вы вернётесь в командный режим).
  
-Содержимое порта с указанным адресом заносится в некоторый регистр процессора Z–80, который мы назовём X. Далее содержимое регистра X комбинируется со значениями параметров M и Спо формуле:​+Содержимое порта с указанным адресом заносится в некоторый регистр процессора Z–80, который мы назовём X. Далее содержимое регистра X комбинируется со значениями параметров M и С по формуле:​
 <​code>​ <​code>​
 X = (X XOR C) AND M X = (X XOR C) AND M
Строка 2160: Строка 2187:
 | | | | | |
 |  (X XOR C) AND M  |0   ​0 ​  ​0 ​  ​1 ​  ​0 ​  ​1 ​  ​0 ​  0| |  (X XOR C) AND M  |0   ​0 ​  ​0 ​  ​1 ​  ​0 ​  ​1 ​  ​0 ​  0|
 +
 Вопрос к читателю:​ Какой вид будет иметь таблица–"​подсказка"​ при отсутствии параметра C ? Вопрос к читателю:​ Какой вид будет иметь таблица–"​подсказка"​ при отсутствии параметра C ?
  
Строка 2174: Строка 2202:
   * <​code>​WAIT &​H90,​2,​0 ​  '​Ожидается ​ отключение ​ принтера</​code>​   * <​code>​WAIT &​H90,​2,​0 ​  '​Ожидается ​ отключение ​ принтера</​code>​
  
 +{{anchor:​n1011}}
 +===== X.11. Дополнение =====
  
-__//​Дополнение//​__. ​Работа с портом ввода–вывода с адресом &h0C+Работа с портом ввода–вывода с адресом &h0C
  
-Предварительно кратко опишем структуру порта ​&h0C…+Предварительно кратко опишем структуру ​данного ​порта.
 <​code>​ <​code>​
 Старший ┌───┬───┬───┬───┬───┬───┬───┬───┐ Младший Старший ┌───┬───┬───┬───┬───┬───┬───┬───┐ Младший
Строка 2190: Строка 2220:
 </​code>​ </​code>​
  
-А теперь два примера использования ​данного порта+А теперь два примера ​его ​использования
 +''//​Внимание !//''​ Слабонервных ​просим не смотреть: примеры ​ написаны на [[msx:​macro-80_assembler::​|Макроассемблере M80]]!
  
 __//​Пример 1//__. //​Посылка//​ байта по сети __//​Пример 1//__. //​Посылка//​ байта по сети
Строка 2224: Строка 2255:
         EI                  ;         EI                  ;
  RET                 ;  RET                 ;
 +</​code>​
 +
 +Карта адресов портов ввода–вывода для компьютеров MSX-1 [[bibliography#​b30|[30]]]
 +<​code>​
 +FF·┌──────────────────────────────┐
 +   ​│ ​                             │
 +F8·├──────────────────────────────┤
 +   │ Порты управления Audio/Video │
 +F7·├──────────────────────────────┤
 +   ​│ ​                             │
 +F0·├──────────────────────────────┤
 +   ​│ ​                             │
 +E0·├──────────────────────────────┤
 +   │ ROM для китайских иероглифов │
 +D8·├──────────────────────────────┤
 +   │ Контроллер Floppy Disk       │
 +D0·├──────────────────────────────┤
 +   ​│ ​                             │
 +C0·├──────────────────────────────┤
 +   │ Световое перо ​               │
 +B8·├──────────────────────────────┤
 +   ​│ ​                             │
 +B5·├──────────────────────────────┤
 +   │ Календарь. Часы ​             │
 +B4·├──────────────────────────────┤
 +   │ Внешняя память ​              │
 +B0·├──────────────────────────────┤
 +   │ PPI (8255) ​                  │
 +A8·├──────────────────────────────┤
 +   │ PSG (AY-3-8910) ​             │
 +A0·├──────────────────────────────┤
 +   │ VDP (9918A) ​                 │
 +98·├──────────────────────────────┤
 +   │ Принтер ​                     │
 +90·├──────────────────────────────┤
 +   ​│ ​                             │
 +88·├──────────────────────────────┤
 +   │ RS-232C ​                     │
 +80·├──────────────────────────────┤
 +   │ Зарезервированы ​             │
 +40·├──────────────────────────────┤
 +   │ Не определены ​               │
 +00·└──────────────────────────────┘
 </​code>​ </​code>​
  
msx/basic_dialogue_programming_language/010.1663618459.txt.gz · Последние изменения: 2022-09-19 23:14 — GreyWolf