Инициализация COM порта в BIOS и DOS

Мониторы, принтеры, клавиатуры, колонки и другие устройства
justontime
Full Member
Сообщения: 264
Зарегистрирован: 10.09.2016,00:06
Откуда: СПб

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение justontime » 01.05.2019,12:32

У меня сейчас нет нормального компьютера под рукой, поэтому сам сегодня посмотреть не могу. Но я бы начал с внимательного чтения исходника BIOS (часть, отвечающая за нахождение/инициализацию COM портов) - практически уверен, что все станет понятно...

Аватара пользователя
uav1606
Advanced Member
Сообщения: 5969
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение uav1606 » 01.05.2019,12:34

Rio444, как я уже говорил, это надо брать Ваш спец. софт и дизассемблировать его, иначе можно гадать бесконечно долго. Он может работать прямо с аппаратурой, при этом на BIOS и DOS ему будет абсолютно наплевать, все прерывания, порты и прочее он может искать сам, "вручную".

Аватара пользователя
Rio444
Почётный пользователь
Сообщения: 26861
Зарегистрирован: 14.09.2014,19:11
Откуда: Ростов-на-Дону

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение Rio444 » 01.05.2019,12:38

justontime писал(а): 01.05.2019,12:32 Но я бы начал с внимательного чтения исходника BIOS (часть, отвечающая за нахождение/инициализацию COM портов) - практически уверен, что все станет понятно...
Не поверишь, не нашел. Есть модуль, который так и называется RS232.asm.
Но он работает с уже найденным ком-портом. Когда уже известно, что ком-порт есть. И известен его адрес.
И этот модуль вообще никак не работает с прерываниями.
Вложения
RS232 - копия.TXT
(7.6 КБ) 355 скачиваний
Электронка: Изображение копия Изображение

Аватара пользователя
Rio444
Почётный пользователь
Сообщения: 26861
Зарегистрирован: 14.09.2014,19:11
Откуда: Ростов-на-Дону

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение Rio444 » 01.05.2019,12:40

uav1606, как я уже говорил, это никакой не спец софт, а абсолютно стандартный.
Он не работает напрямую. И вообще сейчас не работает как надо.
Электронка: Изображение копия Изображение

justontime
Full Member
Сообщения: 264
Зарегистрирован: 10.09.2016,00:06
Откуда: СПб

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение justontime » 01.05.2019,12:47

Rio444 писал(а): 01.05.2019,12:38
justontime писал(а): 01.05.2019,12:32 Но я бы начал с внимательного чтения исходника BIOS (часть, отвечающая за нахождение/инициализацию COM портов) - практически уверен, что все станет понятно...
Не поверишь, не нашел. Есть модуль, который так и называется RS232.asm.
Но он работает с уже найденным ком-портом. Когда уже известно, что ком-порт есть. И известен его адрес.
И этот модуль вообще никак не работает с прерываниями.
Искать нужно в другом месте - это инициализируется в POST.

Если мне не изменяет память, то это ближе к концу POST (как минимум, не раньше средины) - там вроде идет определение наличия портов принтера и COM, и соответствующие equipment flags/базовые адреса выставляются.
Последний раз редактировалось justontime 01.05.2019,13:03, всего редактировалось 1 раз.

justontime
Full Member
Сообщения: 264
Зарегистрирован: 10.09.2016,00:06
Откуда: СПб

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение justontime » 01.05.2019,12:52

Причем в POST, думаю, вряд ли что с прерываниями для COM есть - скорее всего, тот же Checkit просто смотрит по equipment flags (или наличию базовых адресов в нужном месте BDA) и сам пытается вызвать стандартные прерывания, работая с COM портами напрямую.
Последний раз редактировалось justontime 01.05.2019,12:58, всего редактировалось 1 раз.

Аватара пользователя
uav1606
Advanced Member
Сообщения: 5969
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение uav1606 » 01.05.2019,12:55

Rio444, так а Вы точно уверены, что он не работает с портами напрямую? Многие DOS-программы так делают. Понятно, что адреса портов, их количество проще всего получить через BIOS, а вот насчёт прерываний - не уверен, BIOS и DOS никакой информации по прерываниям не выдают вообще, так что это остаётся на совести конкретного софта. Чаще всего соответствующий параметр просто ставится в настройках.

Аватара пользователя
Rio444
Почётный пользователь
Сообщения: 26861
Зарегистрирован: 14.09.2014,19:11
Откуда: Ростов-на-Дону

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение Rio444 » 01.05.2019,13:58

justontime писал(а): 01.05.2019,12:47 Искать нужно в другом месте - это инициализируется в POST.

Если мне не изменяет память, то это ближе к концу POST (как минимум, не раньше средины) - там вроде идет определение наличия портов принтера и COM, и соответствующие equipment flags/базовые адреса выставляются.
Мне тоже так кажется. Но пока не нашел.
justontime писал(а): 01.05.2019,12:52 тот же Checkit просто смотрит по equipment flags (или наличию базовых адресов в нужном месте BDA) и сам пытается вызвать стандартные прерывания, работая с COM портами напрямую.
uav1606 писал(а): 01.05.2019,12:55 BIOS и DOS никакой информации по прерываниям не выдают вообще, так что это остаётся на совести конкретного софта. Чаще всего соответствующий параметр просто ставится в настройках.
"Настоящий" ком-порт (на мультикарте)
Изображение Изображение
Мой эмулятор ком-порта:
Изображение Изображение
Примерно то же самое во всех остальных программах диагностики (перепробовал не менее 5 штук)
Ребята, программы диагностики самим ничего не назначают.
Если они показывают, что Irq4 занято, значит размаскировано соответствующее прерывание PIC-контроллера. И сделано это осью или биосом, потому как никакие другие программы не запускались.
Электронка: Изображение копия Изображение

Аватара пользователя
uav1606
Advanced Member
Сообщения: 5969
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение uav1606 » 01.05.2019,14:04

Rio444, совсем не обязательно. Эти программы могут и сами размаскировать все прерывания, повесить обработчики и слушать их, инициируя своими действиями (записью в нужные порты COM) прерывание, и таким образом определить, какой COM-порт какому прерыванию соответствует.

Добавлено:
Что, кстати, сейчас и подтвердилось в эмуляторе - CheckIt при выборе пункта Interrupts пишет 0 в Interrupt Mask Register, включая все прерывания.

justontime
Full Member
Сообщения: 264
Зарегистрирован: 10.09.2016,00:06
Откуда: СПб

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение justontime » 01.05.2019,14:16

Rio444 писал(а): 01.05.2019,13:58
justontime писал(а): 01.05.2019,12:47 Искать нужно в другом месте - это инициализируется в POST.

Если мне не изменяет память, то это ближе к концу POST (как минимум, не раньше средины) - там вроде идет определение наличия портов принтера и COM, и соответствующие equipment flags/базовые адреса выставляются.
Мне тоже так кажется. Но пока не нашел.
Нашёл в интернете исходник BIOS для IBM PC XT, нужное место там находится сразу. Оказывается, память мне ещё не изменила - определение com-портов - последнее, что делается перед вызовом INT 19, в этом исходнике с адреса E644
Все, пока без интернета до завтра...

Аватара пользователя
Rio444
Почётный пользователь
Сообщения: 26861
Зарегистрирован: 14.09.2014,19:11
Откуда: Ростов-на-Дону

Вклад в сообщество

Инициализация COM порта в BIOS и DOS

Сообщение Rio444 » 01.05.2019,14:16

uav1606, вот в этой теме я довольно долго "мучил" Irq12.
И никакая программа диагностики за меня его не размаскировывала.
Поэтому Ваши слова выглядят крайне сомнительно.
На правых скринах SysChek показывает не возможные прерывания, а реально задействованные.
Электронка: Изображение копия Изображение

Ответить