Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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> | ||