Слайд 2Порты ввода/вывода
Прикладная программа
Операционная система
BIOS / UEFI
![Порты ввода/вывода Прикладная программа Операционная система BIOS / UEFI](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-1.jpg)
Слайд 3Порты ввода/вывода
Используются для взаимодействия с внешними устройствами.
216 портов по 8 бит.
С номерами
![Порты ввода/вывода Используются для взаимодействия с внешними устройствами. 216 портов по 8](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-2.jpg)
от 0000 до FFFF.
F8–FF — зарезервированы.
Соседние 8-битные порты могут группироваться в 16- и 32-битные.
Слайд 4Инструкция IN
Операнды:
первый (приёмник) — AL/AX/EAX;
второй (источник) — imm8 или DX.
Читает значение из порта.
Второй операнд
![Инструкция IN Операнды: первый (приёмник) — AL/AX/EAX; второй (источник) — imm8 или](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-3.jpg)
задаёт номер порта.
Слайд 5Инструкция OUT
Операнды:
первый (приёмник) — imm8 или DX;
второй (источник) — AL/AX/EAX.
Записывает значение в порт.
Первый операнд
![Инструкция OUT Операнды: первый (приёмник) — imm8 или DX; второй (источник) —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-4.jpg)
задаёт номер порта.
Слайд 6Инструкции INS и OUTS
Среди строковых команд есть две для работы с портами:
INSB/INSW/INSD
OUTSB/OUTSW/OUTSD
Принцип
![Инструкции INS и OUTS Среди строковых команд есть две для работы с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-5.jpg)
работы — аналогично другим строковым командам.
Слайд 7Порты ввода/вывода
Внешним устройствам ставятся в соответствие те или иные порты.
Для некоторых устройств номера портов
![Порты ввода/вывода Внешним устройствам ставятся в соответствие те или иные порты. Для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-6.jpg)
фиксированные.
Для некоторых — могут изменяться.
Запись в порт — отправка данных устройству.
Чтение из порта — приём данных от устройства.
Слайд 8Порты ввода/вывода
Пример:
Видеоадаптер VGA использует порты с номерами 03B0–03DF.
Порты 03C7, 03C8 и 03C9
![Порты ввода/вывода Пример: Видеоадаптер VGA использует порты с номерами 03B0–03DF. Порты 03C7,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-7.jpg)
можно использовать для чтения/изменения используемого набора цветов.
Слайд 9Порты ввода/вывода
Изменение цвета номер X (0–255):
В порт 3C8 записать номер цвета X.
В
![Порты ввода/вывода Изменение цвета номер X (0–255): В порт 3C8 записать номер](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-8.jpg)
порт 3C9 последовательно записать
красную составляющую (0–63);
зелёную составляющую (0–63);
синюю составляющую (0–63).
Слайд 10Порты ввода/вывода
Получение цвета номер X (0–255):
В порт 3C7 записать номер цвета X.
Из
![Порты ввода/вывода Получение цвета номер X (0–255): В порт 3C7 записать номер](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-9.jpg)
порта 3C9 последовательно читать
красную составляющую;
зелёную составляющую;
синюю составляющую.
Слайд 11Порты ввода/вывода
Порты 0040–0043 используются для управления таймерами.
Есть три канала таймеров:
Канал 0 отвечает за
![Порты ввода/вывода Порты 0040–0043 используются для управления таймерами. Есть три канала таймеров:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-10.jpg)
таймер, срабатывающий 18.2 раза в секунду и генерирующий прерывание 08h.
Канал 1 отвечает за memory refresh.
Канал 2 позволяет управлять встроенным динамиком (пищалкой).
Слайд 12Порты ввода/вывода
Порты 0060–0063 используются для управления PPI — Programmable Peripheral Interface.
Бит 1 порта
![Порты ввода/вывода Порты 0060–0063 используются для управления PPI — Programmable Peripheral Interface.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-11.jpg)
0061 управляет состоянием встроенного динамика:
Всего 2 состояния.
Изменяя значение этого бита с определённой частотой, можно добиться звука требуемой частоты.
Слайд 13Порты ввода/вывода
Для вывода звука можно соединить выход таймера 2 со входом динамика.
См.
![Порты ввода/вывода Для вывода звука можно соединить выход таймера 2 со входом](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-12.jpg)
TechHelp -> Speaker control
Слайд 14Порты ввода/вывода
Порты 0330 и 0331 используются для взаимодействия с MPU-401 (если есть
![Порты ввода/вывода Порты 0330 и 0331 используются для взаимодействия с MPU-401 (если](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-13.jpg)
такое устройство).
Эмулируется NTVDM и DOSBox.
Но в NTVDM есть ошибка эмуляции, из-за которой нота начинает звучать только после записи следующего сообщения.
Слайд 15MPU-401
MPU — MIDI Processing Unit.
MIDI:
16 каналов (канал 10 — перкуссия);
один из 128 инструментов в
![MPU-401 MPU — MIDI Processing Unit. MIDI: 16 каналов (канал 10 —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-14.jpg)
каждом.
В режиме UART MP-401 просто передаёт поступающие данные на устройство воспроизведения.
Слайд 16MPU-401
Порт 0331 — управляющий:
используется для отправки команд и определения готовности MPU-401 к приёму/передаче данных/команд.
Порт
![MPU-401 Порт 0331 — управляющий: используется для отправки команд и определения готовности](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-15.jpg)
0330 — порт данных:
используется для передачи данных (MIDI-сообщений).
Слайд 17MPU-401
Сброс устройства:
отправить команду FFh в порт 331.
Переключение в режим UART:
отправить команду 3Fh в
![MPU-401 Сброс устройства: отправить команду FFh в порт 331. Переключение в режим](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-16.jpg)
порт 331.
Воспроизведение звуков:
посылать MIDI-сообщения в порт 330.
Слайд 18MIDI-сообщения
nnnn — номер канала
kkkkkkk — номер клавиши (ноты)
vvvvvvv — сила (скорость) нажатия/отпускания
ppppppp — номер программы (инструмента)
![MIDI-сообщения nnnn — номер канала kkkkkkk — номер клавиши (ноты) vvvvvvv —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-17.jpg)
Слайд 20MPU-401
Бит 6 порта 330h равен 0, когда MPU-401 готов принимать данные.
Нужно дождаться
![MPU-401 Бит 6 порта 330h равен 0, когда MPU-401 готов принимать данные.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-19.jpg)
этого перед отправкой MIDI-сообщения.
Бит 7 порта 330h равен 0, когда MPU-401 хочет передать данные.
Нужно считывать данные перед продолжением работы.
Слайд 21Порты ввода/вывода
Для большинства устройств взаимодействие намного сложнее.
С ними приходится общаться через контроллер
![Порты ввода/вывода Для большинства устройств взаимодействие намного сложнее. С ними приходится общаться](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-20.jpg)
шины, к которой они подключены (ISA, PCI и т.п.).
Само устройство может содержать сотни т.н. регистров и поддерживать десятки различных режимов работы.
Слайд 22Порты ввода/вывода
Для большинства устройств взаимодействие намного сложнее.
Драйвер — набор процедур, реализующих взаимодействие с устройством.
ОС
![Порты ввода/вывода Для большинства устройств взаимодействие намного сложнее. Драйвер — набор процедур,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1009812/slide-21.jpg)
определяет, какие процедуры должен содержать драйвер.