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

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


msx:basic_dialogue_programming_language:010

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:010 [2022-09-19 23:34]
GreyWolf [X.10. Порты ввода–вывода]
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>​
Строка 1377: Строка 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>​
Строка 1693: Строка 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>​
Строка 1782: Строка 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>
 И я надеюсь,​ что наши потомки будут благодарны ​ И я надеюсь,​ что наши потомки будут благодарны ​
 \\ мне не только за то, что я здесь разъяснил,​ но  \\ мне не только за то, что я здесь разъяснил,​ но 
Строка 1838: Строка 1838:
 |  &​HB5 ​ |  Чтение(Запись) ​ |  Чтение/​запись данных в ОЗУ таймера ​ | |  &​HB5 ​ |  Чтение(Запись) ​ |  Чтение/​запись данных в ОЗУ таймера ​ |
 |  &​HB8 ​ | |  Световое перо (Sanyo) (через &​HBB) ​ | |  &​HB8 ​ | |  Световое перо (Sanyo) (через &​HBB) ​ |
-|FIXME <code>├────────────────┼───────────────┼─────────────────────────────────────┤ + &​HF7 ​ |  Запись ​ |<WRAP>​Управление Audio/​Video ​\\ \\ Номер ​бита / Назначение бита 
-│                │               ​│ ​     ​Управление Audio/​Video ​        │ +  ​4 Управление AV (0 — TV) 
-│                │               ​├─────┬───────────────────────────────┤ +  ​5 Управление Ym (0 — TV) 
-│                │               │Номер│       Назначение бита ​        │ +  ​6 Управление Ys (0 — Super) 
-│                │               ​│бита │                               │ +  ​7 Выбор Video (0 — TV) 
-│      &​HF7 ​     │     ​Запись ​   ├─────┼───────────────────────────────┤ +</WRAP>|
-│                │               ​│ ​ ​4 ​ ​│ ​Управление AV    (0 TV)     │ +
-│                │               ​│ ​ ​5 ​ ​│ ​Управление Ym    (0 TV)     │ +
-│                │               ​│ ​ ​6 ​ ​│ ​Управление Ys    (0 Super) ​ │ +
-│                │               ​│ ​ ​7 ​ ​│ ​Выбор Video      (0 TV)     │ +
-├────────────────┼───────────────┼─────┴───────────────────────────────┤</code>|||+
 |  &​HFC ​ |  Чтение(Запись) ​ |  Регистры распределения //​слотов//​ (расширений памяти) для компьютеров серии [[msx:​msx_2]] ​ | |  &​HFC ​ |  Чтение(Запись) ​ |  Регистры распределения //​слотов//​ (расширений памяти) для компьютеров серии [[msx:​msx_2]] ​ |
 |  &​HFD ​ |  Чтение(Запись) ​ |:::| |  &​HFD ​ |  Чтение(Запись) ​ |:::|
Строка 1913: Строка 1908:
  
 Объясним роль логической операции ''​AND''​. Значением,​ возвращаемым функцией ''​INP(&​H02)'',​ является двоичное число, записанное в одном байте. "​Содержимое"​ четырёх старших битов байта нас не интересует. Заметим,​ что число 15 = &​b00001111. Как Вы уже, наверное,​ догадались,​ логическая операция ''​AND''​ позволяет выделить нужные нам четыре младших бита. Объясним роль логической операции ''​AND''​. Значением,​ возвращаемым функцией ''​INP(&​H02)'',​ является двоичное число, записанное в одном байте. "​Содержимое"​ четырёх старших битов байта нас не интересует. Заметим,​ что число 15 = &​b00001111. Как Вы уже, наверное,​ догадались,​ логическая операция ''​AND''​ позволяет выделить нужные нам четыре младших бита.
 +
 +8-) Подробнее о портах ввода/​вывода написано [[msx:​io_ports|здесь]].
  
 {{anchor:​n10101}} {{anchor:​n10101}}
Строка 1924: Строка 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>​
Строка 1950: Строка 1948:
  
 Взгляните на приведённую ниже таблицу,​ в которой описаны назначения битов порта C: Взгляните на приведённую ниже таблицу,​ в которой описаны назначения битов порта C:
-|Биты 0÷3|Строка клавиатуры| +|Биты 0÷3|Строка ​матрицы ​клавиатуры| 
-|Бит 4|Если 0, то запускается ​кассетная лента| +|Бит 4|Если 0, то запускается ​магнитная лента| 
-|Бит 5|Сигнал записи на ленту|+|Бит 5|Сигнал записи на магнитную ​ленту|
 |Бит 6|Если 0, то включается индикатор "​CAPS"​| |Бит 6|Если 0, то включается индикатор "​CAPS"​|
 |Бит 7|Управление звуковым сигналом| |Бит 7|Управление звуковым сигналом|
Строка 2061: Строка 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]]
Строка 2072: Строка 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
Строка 2165: Строка 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
Строка 2179: Строка 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 ?
  
Строка 2193: Строка 2202:
   * <​code>​WAIT &​H90,​2,​0 ​  '​Ожидается ​ отключение ​ принтера</​code>​   * <​code>​WAIT &​H90,​2,​0 ​  '​Ожидается ​ отключение ​ принтера</​code>​
  
 +{{anchor:​n1011}}
 +===== X.11. Дополнение =====
  
-__//​Дополнение//​__. ​Работа с портом ввода–вывода с адресом &h0C+Работа с портом ввода–вывода с адресом &h0C
  
-Предварительно кратко опишем структуру порта ​&h0C…+Предварительно кратко опишем структуру ​данного ​порта.
 <​code>​ <​code>​
 Старший ┌───┬───┬───┬───┬───┬───┬───┬───┐ Младший Старший ┌───┬───┬───┬───┬───┬───┬───┬───┐ Младший
Строка 2209: Строка 2220:
 </​code>​ </​code>​
  
-А теперь два примера использования ​данного порта+А теперь два примера ​его ​использования
 +''//​Внимание !//''​ Слабонервных ​просим не смотреть: примеры ​ написаны на [[msx:​macro-80_assembler::​|Макроассемблере M80]]!
  
 __//​Пример 1//__. //​Посылка//​ байта по сети __//​Пример 1//__. //​Посылка//​ байта по сети
Строка 2243: Строка 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.1663619648.txt.gz · Последние изменения: 2022-09-19 23:34 — GreyWolf