Инициализация COM порта в BIOS и DOS
-
- Full Member
- Сообщения: 264
- Зарегистрирован: 10.09.2016,00:06
- Откуда: СПб
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
У меня сейчас нет нормального компьютера под рукой, поэтому сам сегодня посмотреть не могу. Но я бы начал с внимательного чтения исходника BIOS (часть, отвечающая за нахождение/инициализацию COM портов) - практически уверен, что все станет понятно...
- uav1606
- Advanced Member
- Сообщения: 5969
- Зарегистрирован: 16.01.2008,22:04
- Откуда: Енакиево
- Контактная информация:
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Rio444, как я уже говорил, это надо брать Ваш спец. софт и дизассемблировать его, иначе можно гадать бесконечно долго. Он может работать прямо с аппаратурой, при этом на BIOS и DOS ему будет абсолютно наплевать, все прерывания, порты и прочее он может искать сам, "вручную".
- Rio444
- Почётный пользователь
- Сообщения: 26861
- Зарегистрирован: 14.09.2014,19:11
- Откуда: Ростов-на-Дону
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Не поверишь, не нашел. Есть модуль, который так и называется RS232.asm.justontime писал(а): ↑01.05.2019,12:32 Но я бы начал с внимательного чтения исходника BIOS (часть, отвечающая за нахождение/инициализацию COM портов) - практически уверен, что все станет понятно...
Но он работает с уже найденным ком-портом. Когда уже известно, что ком-порт есть. И известен его адрес.
И этот модуль вообще никак не работает с прерываниями.
- Вложения
-
- RS232 - копия.TXT
- (7.6 КБ) 353 скачивания
Электронка: копия
- Rio444
- Почётный пользователь
- Сообщения: 26861
- Зарегистрирован: 14.09.2014,19:11
- Откуда: Ростов-на-Дону
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
uav1606, как я уже говорил, это никакой не спец софт, а абсолютно стандартный.
Он не работает напрямую. И вообще сейчас не работает как надо.
Он не работает напрямую. И вообще сейчас не работает как надо.
Электронка: копия
-
- Full Member
- Сообщения: 264
- Зарегистрирован: 10.09.2016,00:06
- Откуда: СПб
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Искать нужно в другом месте - это инициализируется в POST.Rio444 писал(а): ↑01.05.2019,12:38Не поверишь, не нашел. Есть модуль, который так и называется RS232.asm.justontime писал(а): ↑01.05.2019,12:32 Но я бы начал с внимательного чтения исходника BIOS (часть, отвечающая за нахождение/инициализацию COM портов) - практически уверен, что все станет понятно...
Но он работает с уже найденным ком-портом. Когда уже известно, что ком-порт есть. И известен его адрес.
И этот модуль вообще никак не работает с прерываниями.
Если мне не изменяет память, то это ближе к концу POST (как минимум, не раньше средины) - там вроде идет определение наличия портов принтера и COM, и соответствующие equipment flags/базовые адреса выставляются.
Последний раз редактировалось justontime 01.05.2019,13:03, всего редактировалось 1 раз.
-
- Full Member
- Сообщения: 264
- Зарегистрирован: 10.09.2016,00:06
- Откуда: СПб
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Причем в 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
Rio444, так а Вы точно уверены, что он не работает с портами напрямую? Многие DOS-программы так делают. Понятно, что адреса портов, их количество проще всего получить через BIOS, а вот насчёт прерываний - не уверен, BIOS и DOS никакой информации по прерываниям не выдают вообще, так что это остаётся на совести конкретного софта. Чаще всего соответствующий параметр просто ставится в настройках.
- Rio444
- Почётный пользователь
- Сообщения: 26861
- Зарегистрирован: 14.09.2014,19:11
- Откуда: Ростов-на-Дону
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Мне тоже так кажется. Но пока не нашел.justontime писал(а): ↑01.05.2019,12:47 Искать нужно в другом месте - это инициализируется в POST.
Если мне не изменяет память, то это ближе к концу POST (как минимум, не раньше средины) - там вроде идет определение наличия портов принтера и COM, и соответствующие equipment flags/базовые адреса выставляются.
justontime писал(а): ↑01.05.2019,12:52 тот же Checkit просто смотрит по equipment flags (или наличию базовых адресов в нужном месте BDA) и сам пытается вызвать стандартные прерывания, работая с COM портами напрямую.
"Настоящий" ком-порт (на мультикарте)
Мой эмулятор ком-порта:
Примерно то же самое во всех остальных программах диагностики (перепробовал не менее 5 штук)
Ребята, программы диагностики самим ничего не назначают.
Если они показывают, что Irq4 занято, значит размаскировано соответствующее прерывание PIC-контроллера. И сделано это осью или биосом, потому как никакие другие программы не запускались.
Электронка: копия
- uav1606
- Advanced Member
- Сообщения: 5969
- Зарегистрирован: 16.01.2008,22:04
- Откуда: Енакиево
- Контактная информация:
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Rio444, совсем не обязательно. Эти программы могут и сами размаскировать все прерывания, повесить обработчики и слушать их, инициируя своими действиями (записью в нужные порты COM) прерывание, и таким образом определить, какой COM-порт какому прерыванию соответствует.
Добавлено:
Что, кстати, сейчас и подтвердилось в эмуляторе - CheckIt при выборе пункта Interrupts пишет 0 в Interrupt Mask Register, включая все прерывания.
Добавлено:
Что, кстати, сейчас и подтвердилось в эмуляторе - CheckIt при выборе пункта Interrupts пишет 0 в Interrupt Mask Register, включая все прерывания.
-
- Full Member
- Сообщения: 264
- Зарегистрирован: 10.09.2016,00:06
- Откуда: СПб
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
Нашёл в интернете исходник BIOS для IBM PC XT, нужное место там находится сразу. Оказывается, память мне ещё не изменила - определение com-портов - последнее, что делается перед вызовом INT 19, в этом исходнике с адреса E644Rio444 писал(а): ↑01.05.2019,13:58Мне тоже так кажется. Но пока не нашел.justontime писал(а): ↑01.05.2019,12:47 Искать нужно в другом месте - это инициализируется в POST.
Если мне не изменяет память, то это ближе к концу POST (как минимум, не раньше средины) - там вроде идет определение наличия портов принтера и COM, и соответствующие equipment flags/базовые адреса выставляются.
Все, пока без интернета до завтра...
- Rio444
- Почётный пользователь
- Сообщения: 26861
- Зарегистрирован: 14.09.2014,19:11
- Откуда: Ростов-на-Дону
-
Вклад в сообщество
Инициализация COM порта в BIOS и DOS
uav1606, вот в этой теме я довольно долго "мучил" Irq12.
И никакая программа диагностики за меня его не размаскировывала.
Поэтому Ваши слова выглядят крайне сомнительно.
На правых скринах SysChek показывает не возможные прерывания, а реально задействованные.
И никакая программа диагностики за меня его не размаскировывала.
Поэтому Ваши слова выглядят крайне сомнительно.
На правых скринах SysChek показывает не возможные прерывания, а реально задействованные.
Электронка: копия