.
Описание аппаратуры взято из книги «Руководство
по архитектуре IBM PС AT» / Ж.К. Голенкова, А.В. Заболоцкий,
М.Л. Мархасин и др.; Под общ. ред. М.Л. Мархасина. — Минск: ООО
«Консул», 1992. — 949 c.: ил. Исключение составляет
порт 0E1h
для задержки вывода, сведения об использовании которого получены из исходников
ДОС-расширителя Колесницкого.
Порт 61h содержит биты для управления различными устройствами, связанными с системным таймером и клавиатурой. Назначение битов порта приведено на рисунке ниже.
В файле sysport.def определены следующие константы (маски):
CmSPStrobT2 | 00000001b | строб счётчика |
CmSPSpeaker | 00000010b | доступ к динамику |
CmSPTOUT2 | 00100000b | выход счётчика, подключённого к динамику |
MSPPCSpeakerCountGate | 00000001b | |
MSPPCSpeakerDataGate | 00000010b | |
MKBDEnableBit | 10000000b |
Макрос PCSpkCount
разрешает работу счётчика динамика
(подробнее о счётчиках см. Таймеры ПК). Использование макроса
PCSpkCount Enable ; разрешить работать счётчика PCSpkCount Desable ; запретить работу счётчика
Макрос PCSpeaker
Разрешает вывод данных из счётчика 2 в динамик.
PCSpeaker Enable ; разрешить вывод данных из счётчика в динамик PCSpeaker Desable ; запретить вывод данных из счётчика в динамик
Макрос OutDataToSpeaker
выводит данные в динамик
OutDataToSpeaker 1 ; подаёт напряжение на динамик (вместо 1 можно использовать Hi) OutDataToSpeaker 0 ; снимает напряжение с динамика (вместо 1 можно использовать Lo)
В различного рода драйверах клавиатуры использовался
выполняемый макросом SPKBDReaded
стандартрный код, по-видимому сообщающий клавиатуре
о том, что байт данных из порта прочитан и принят, и теперь можно перердаватрь следрующий байт.
CmSPNMIEna | 10000000b |
Макрос SetIndexRTCRAM
устанавливает адрес читаемого/записываемого байта
RTC/CMOS. Адрес интересующего байта RTC может задаваться числом или байтовым регистром, кроме al.
Если адрес задан регистром, то его корректность не проверяется. Адрес должен быть меньше 64 (40h).
Макрос портит регистр al. Использование:
SetIndexRTCRAM 20h ; устанавливает адрес 20h.
Макрос SPNMIEnable
разрешает прерывания NMI, а SPNMIDesable
— запрещает.
На первых ПК процессоры работали существенно быстрее, чем контрллеры других устройств, установленные
на материнской плате, и процессор мог выводить данные в порт устройства быстрее, чем оно могло их обработать.
Чтобы согласовать работу использовались программные задержки. Один из способов создания задержки —
очистить очередь команд, при этом пока процессор тратит время на выборку команд и их дешифрацию,
внешнее устройство успевает обработать данные. Очистка состояла в том, что делался переход на следующий адрес
(инструкция jmp short $+2
).
Это прекрасно работало на 286 и 386 процессорах, однако на более новых подобная команда уже не вызывала
желаемого действия. Поэтому стал использоваться вывод данных в порт 0E1h. (Сведения об этом порте получены из
переделанных Колесницким исходников ДОС-расширителя, написанного Tran'ом).
Макрос SPDelay обеспечивает задержку при работе с портами ввода/вывода. Перед его использованием
может быть определена переменная .DelayType
, указывающая тип процессора (286, 386, ...).
Если константа .DelayType не задана, то используется стандартная задержка командой перехода.
Пример использования
.DelayType=486 SPDelay
© Жуков И. Б.
e-mail: ibzh@yandex.ru
При использовании материалов, пожалуйста,
ставьте индексируемую ссылку на сайт http://ibzh.eko3.ru/
Число посетителей | |||
| Число посетителей |