====== MSX — Порты ввода/вывода ====== FIXME Микропроцессор [[zilog_z80:zilog_z80|Z80]] позволяет подключить к шинам адресов до 256 портов ввода/вывода. Порты — это устройства сопряжения, при помощи которых микропроцессор [[zilog_z80:zilog_z80|Z80]] может обмениваться информацией с другими микропроцессорами или устройствами. Порт хранит восьмиразрядное значение (байт) и может использоваться для чтения информации, её записи, или и того и другого. Порты хранят восьмибитное значение. Ниже приводится список портов. ^ Порт ^ Режим \\ (чтение/запись) ^ Назначение ^ Устройство ^ | 00 | Ч/З |Чтение/запись из/в порт данных (8251)| RS 232C | | 01 | Ч/З |Порт команд/состояния (8251)|:::| | 02 | Ч |Номер компьютера, таймер |:::| |:::| З |Запись в регистр маски прерываний|:::| | 03 | | 04 | Ч/З |Счетчик 0 (8253)|:::| | 05 | Ч/З |Счетчик 1 (8253)|:::| | 06 | Ч/З |Счетчик 2 (8253)|:::| | 07 | З |Запись в регистр вида(mode) (8253)|:::| | 08 | З |Запись в регистр режимов|:::| | | | | | | 09 | З |Команда| [[msx:msx_2|]] | | 0A | | 0B | | 0C | | 0D | | 0E | | 0F | | 10 | | 11 | | 12 | Ч |Состояние|:::| | 13 | | 14 | Ч/З |Данные|:::| | | | | | | 15 | | 16 | | 17 | | 18 | | 19 | | 1A | | 1B | | 1C | | 1D | | 1E | | 1F | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | | 2A | | 2B | | 2C | | 2D | Ч |Версия ПЗУ. [[msx:msx_1|]] = 0, [[msx:msx_2|]] × 0 DELETEME | | | 2E | | 2F | | 30 | | 31 | | 32 | | 33 | | 34 | | 35 | | 36 | | 37 | | 38 | | 39 | | 3A | | 3B | | 3C | | 3D | | 3E | | 3F | | 40 | З/Ч |Регистр номера ID устройства| | | | | | | | 41 | З |Поддержка защелки адреса ОЗУ| [[msx:msx-system:msx-system#s1985|S1985 (YM3814)]] | | 42 | Ч/З |Поддержка READ/WRITE данных ОЗУ|:::| | 46 | З |Бит — отображающая функция|:::| | 47 | Ч | Код цвета|:::| |:::| З |Бит — шаблон/ FG,BG код цвета|:::| | 48 | | 49 | | 4A | | 4B | | 4C | | 4D | | 4E | | 4F | | 50 | | 51 | | 52 | | 53 | | 54 | | 55 | | 56 | | 57 | | 58 | | 59 | | 5A | | 5B | | 5C | | 5D | | 5E | | 5F | | 60 | | 61 | | 62 | | 63 | | 64 | | 65 | | 66 | | 67 | | 68 | | 69 | | 6A | | 6B | | 6C | | 6D | | 6E | | 6F | | 70 | | 71 | | 72 | | 73 | | 74 | | 75 | | 76 | | 77 | | 78 | | 79 | | 7A | | 7B | | 7C | | 7D | | 7E | | 7F | | | | | | | 80 | |Данные для 8251| RS 232C | | 81 | |Статус/команда для 8251|:::| | 82 | |Статус чтения/ маска прерывания|:::| | 83 | |Не используется|:::| | 84 | |8253|:::| | 85 | |8253|:::| | 86 | |8253|:::| | 87 | |8253|:::| | | | | | | 88 | |Порты I/O для адаптера [[msx:yamaha_v9938:yamaha_v9938|]] на [[msx:msx_1|]]| VDP | | 89 | |:::|:::| | 8A | |:::|:::| | 8B | |:::|:::| | | | | | | 8C | |Порты для модема| Модем | | 8D | |:::|:::| | 8E | | 8F | | | | | | | 90 | З |Строб OUT (b0) длиной OUT (вывод)| [[msx:printer:printer|Принтер]] | |:::| Ч |Статус IN (b1) 1=BUSY (занято)|:::| | 91 | З |Вывод символа на принтер|:::| | | | | | | 90 | | 91 | | 92 | | 93 | | 94 | | 95 | | 96 | | 97 | | 98 | З |Запись данных в память VRAM| VDP | |:::| Ч |Чтение данных из памяти VRAM|:::| | 99 | З |Установка команды, адреса|:::| |:::| Ч |Чтение статуса|:::| | 9A | З |Установка палитры цветов|:::| | 9B | З |Косвенная запись во внутр. регистр|:::| | | | | | | 9C | | 9D | | 9E | | 9F | | | | | | | A0 | З |Длина адреса, номер регистра| [[msx:psg:psg|PSG]] | | A1 | З |Запись данных в регистр|:::| | A2 | Ч |Чтение данных из портов 14 и 15|:::| | | | | | | A3 | | A4 | | A5 | | A6 | | A7 | | | | | | | A8 | З/Ч |Запись/чтение [[msx:ppi#reg_a|PPI порт A]]| [[msx:ppi|PPI]] | |:::|:::|:::|:::| | A9 | З/Ч |Запись/чтение [[msx:ppi#reg_b|PPI порт B]]|:::| | AA | З/Ч |Запись/чтение [[msx:ppi#reg_c|PPI порт C]]|:::| | AB | З/Ч |Запись/чтение [[msx:ppi#reg_m|регистр режима PPI]]|:::| | | | | | | AC | |Двигатель (мотор) MSX \\ (1chipMSX I/O)| | | AD |:::|:::| | AE |:::|:::| | AF |:::|:::| | | | | | | B0 | |Порт A, адрес (А0..А7)|Расширение памяти [[msx:ppi|PPI]] 8255 \\ (SONY X8255)| | B1 | |Порт B, адрес, управление, R/W|:::| | B2 | |Порт C, адрес (A11..A12), данные|:::| | B3 | |Установка вида|:::| | | | | | | B4 | З |Календарь,часы. Защелка адреса| Календарь | | B5 | Ч |Данные|:::| |:::| З |Данные|:::| | | | | | | B6 | | B7 | | | | | | | B8 | Ч/З |Управление световым пером (SANYO)| | | B9 | Ч/З |:::|:::| | BA | Ч/З |:::|:::| | BB | З |:::|:::| | | | | | | BC | |Порт А| Управление VHD (JVCX8255) | | BD | |Порт B|:::| | BE | |Порт C|:::| | BF | |Установка режима|:::| | | | | | | C0 | |MSX-AUDIO|:::| | C1 | |:::|:::| | | | | | | C2 | | C3 | | C4 | | C5 | | C6 | | C7 | | | | | | | C8 | |FIXME \\ MSX Interface. (Asynchronous Serial Interface) UART ?| | | C9 | |:::|:::| | CA | |:::|:::| | CB | |:::|:::| | CC | |:::|:::| | CD | |:::|:::| | CE | |:::|:::| | CF | |:::|:::| | | | | | | D0 | |Контроллер флоппи-диска (FDC)| | | D1 | |:::|:::| | D2 | |:::|:::| | D3 | |:::|:::| | D4 | |:::|:::| | D5 | |:::|:::| | D6 | |:::|:::| | D7 | |:::|:::| | | | | | | D8 | З |b5-b0 младшие биты адреса| Kanji ROM (TOSHIBA) | | D9 | З |b5-b0 старшие биты адреса|:::| |:::| Ч |b7-b0 данные|:::| | | | | | | DA | |Для будущих расширений Kanji| | | DB | |:::|:::| | | | | | | DC | | DD | | DE | | DF | | E0 | | E1 | | E2 | | E3 | | E4 | | E5 | | E6 | | E7 | | E8 | | E9 | | EA | | EB | | EC | | ED | | EE | | EF | | F0 | | F1 | | F2 | | F3 | | F4 | Используется в [[msx:msx_2_plus#port_f4|MSX 2 +]]||| | | | | | | F5 | З |b0 Kanji ROM| Контроль системы | |:::| З |b1 резерв для kanji|:::| |:::| З |b2 MSX-Audio|:::| |:::| З |b3 superimpose|:::| |:::| З |b4 интерфейс MSX|:::| |:::| З |b5 RS-232C|:::| |:::| З |b6 световое перо|:::| |:::| З |b7 CLOCK-IC, часы (только MSX-2)|:::| | | | | | | F6 | |Шина ввода/вывода цвета| CB | | | | | | | F7 | З |b0 Включение смешивания Audio R| Управление A/V | |:::| З |b1 Выключение смешивания Audio L|:::| |:::| З |b2 Выбор видеовхода (21p RGB)|:::| |:::| Ч |b3 Детекция видеовхода|:::| |:::| З |b4 Управление A/V (TV)|:::| |:::| З |b5 Управление Ym|:::| |:::| З |b6 Инверсия бита 4 VDP–регистра 9|:::| |:::| З |b7 Инверсия бита 5 VDP–регистра 9|:::| | | | | | | F8 | | F9 | | FA | | FB | | | | | | | FC | З/Ч |Управление физическими страницами ОЗУ| [[msx:ram:ram#mapper|Маппер]] | | FD | З/Ч |:::|:::| | FE | З/Ч |:::|:::| | FF | З/Ч |:::|:::| ====== Карта портов ввода / вывода ====== {{msx:datapack:files:1_1_5_36.svg|}} ===== Замечания о назначении адресов ввода/вывода ===== FIXME Адреса ввода/вывода от 40h до FFh используются системой. Свободные (не связанные с устройствами) порты в этом диапазоне считаются зарезервированными для будущего расширения системы. Подробнее см. «Карта ввода/вывода» в конце данного руководства. Программное обеспечение, которое напрямую обращается к портам ввода/вывода, может вызвать проблемы совместимости с некоторыми типами аппаратных платформ. Следовательно, все устройства ввода/вывода всегда должны быть доступны через различные функции BIOS для создания аппаратно-независимого программного обеспечения. Для выполнения критичных по быстродействию операций по управлению видеопроцессором допускается напрямую использовать порты ввода/вывода. Однако в этом случае необходимо уточнить адреса портов видеопроцессора для чтения и записи, проверив значения по адресам 0006h и 0007h в MAIN ROM. Для получения дополнительной информации см. «Раздел 4. VDP». Порты ввода/вывода от 00h до 3Fh доступны для пользователя, но в первую очередь используйте возможность отображения регистров устройств в адресное пространство, чтобы избежать подключения нескольких периферийных устройств к одному и тому же порту. Контроллер гибких дисков (FDC) может использовать порты ввода/вывода, но в этом случае схема должна иметь возможность отключения дополнительным внешним сигналом. Если контроллер будет занимать порты ввода/вывода только при необходимости обращении к нему, это позволяет системе одновременно использовать несколько различных контроллеров гибких дисков. Если адрес ввода/вывода необходимо использовать в предлагаемом к продаже устройстве, он должен быть назначен ASCII System Division, Inc. Пожалуйста, свяжитесь с нами перед разработкой устройства, чтобы получить назначенные адреса портов ввода/вывода. ====== Добавление портов ввода/вывода ====== При добавлении нового устройства может возникнуть проблема: как назначать номера портов ввода/вывода, если это устройство не является стандартным и для него не назначены порты в какой-либо спецификации. Адреса портов ввода/вывода от 40h до FFh зарезервированы для стандартного оборудования системы MSX и не могут быть использованы, если данное оборудование не является стандартным оборудованием. Адреса портов ввода/вывода от 00H до 3FH не используются в архитектуре MSX и могут быть использованы для пользовательских аппаратных решений, однако следует учитывать то, что несколько однотипных устройств или устройств, разработанных по несогласованным спецификациям, могут конфликтовать и приводить к неработоспособности системы. Чтобы избежать этого, используйте отображение регистров устройств в адресное пространство. ====== Ссылки ====== **[[msx:datapack:datapack|]]** [[http://problemkaputt.de/portar.htm#ioportsummary|Portar MSX Tech Doc — I/O Port Summary]] [[http://map.grauw.nl/resources/msx_io_ports.php|MSX I/O ports overview]] [[http://map.grauw.nl/resources/msx_io_ports.php#switch_io|Expanded I/O ports (a.k.a. switched I/O)]] [[https://hansotten.file-hunter.com/uploads/files/msx2th15.pdf|MSX Expansion I/O Port Manual]] [[github>oboroc/msx-books/blob/master/msx2-fb-1993-ru.md#a2|Архитектура и устройства микрокомпьютеров стандарта MSX-2 — Порты ввода/вывода]] [[msxorg>wiki/I/O_Ports_List|I/O Ports List]] {{tag>MSX Norm}}