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

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

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

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

Сообщение Rio444 » 02.05.2019,13:06

uav1606 писал(а): 02.05.2019,12:20 Там всё достаточно просто (правда, это это для IRQ 3/COM2/INT 0BH):
Не принципиально. И за это спасибо!
uav1606 писал(а): 02.05.2019,12:20 Ключевой пункт, как я понимаю, это MOV DS:[12E2h],3h - то есть, так как у нас 3-е прерывание, то в какую-то ячейку программы записывается 3, потом основная программа, видимо, оттуда это значение считает (т.е. для IRQ 4 обработчик записал бы в эту ячейку 4 и т.п.).
Да, но имеют значение нюансы. Что там, ещё проверяется, как сбрасывается прерывание. Ещё раз спасибо! Буду разбираться.

P.S. А ведь там ничего и нет почти. Записывается номер прерывания в заданную ячейку и сбрасывается прерывание в PIC-контроллере.
Не понял только строку:
uav1606 писал(а): 02.05.2019,12:20 [0F8B:0B68] 803E102A00 CMP DS:[2A10h],0h N--I--Z-P- cmp ([48BA:2A10]=0h)-0h ? osZaPc (DS)
Вместо комментария, что находится в той ячейке - кракозябры.
Электронка: Изображение копия Изображение

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

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

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

Сообщение justontime » 02.05.2019,15:09

Rio444 писал(а): 01.05.2019,14:19
justontime писал(а): 01.05.2019,14:16 INT 19, в этом исходнике с адреса E644
Все, пока без интернета до завтра...
Хорошо до завтра. Надеюсь укажите в каком файле. Там их 6 штук Post. И как нашли.
Да любой Technical Reference, например http://www.retroarchive.org/dos/docs/ibm5160techref.pdf

Конкретно в этом - начинается с адреса E625, страница A18

Нашел именно так, как и советовал сразу - поискал место, где определяется наличие соответствующего оборудования. BIOSы PC - AT286 хороши для таких вещей - полноценные исходники с комментариями в наличии, размер небольшой...

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

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

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

Сообщение uav1606 » 02.05.2019,15:27

Не понял только строку:

Rio444, я, в общем-то, тоже не знаю точного назначения этого сравнения (комментарии добавляет дизассемблер сам). Судя по всему, проверяется какой-то флаг в области данных основной программы, а вот зачем - вопрос интересный.
Там после JE ещё одна команда пропущена (на неё переход не произошёл, потому что по тому адресу был 0, соответственно, отладчик её и не показал) - там стоит CLI, то есть отключить прерывания (поправил тот листинг выше).

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

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

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

Сообщение Rio444 » 06.05.2019,20:06

Не по теме
Непонятно, зачем перенесли тему в "периферийные устройства". Тема касалась поиска документации по COM-порту. В любом случае, COM-порт никакая не периферия, т.к. входит в состав IBM PC, начиная с XT.
uav1606, Вы оказались абсолютно правы. Именно COM-порт программы диагностики определяют самостоятельно, невзирая на BIOS и прерывания.
Исправил ошибки в коде и всё заработало! Только одна программа не определила Irq порта. Видимо использует более сложный алгоритм или какие-то проверки.
Ещё раз спасибо! :thumbup:
Электронка: Изображение копия Изображение

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

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

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

Сообщение uav1606 » 07.05.2019,05:51

Рад, что всё получилось.
Непонятно, зачем перенесли тему в "периферийные устройства"
Это не я. :-)

Аватара пользователя
skoroxod
Advanced Member
Сообщения: 17374
Зарегистрирован: 05.03.2009,19:27
Откуда: Старый Оскол
Контактная информация:

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

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

Сообщение skoroxod » 07.05.2019,07:45

Rio444 писал(а): 06.05.2019,20:06 Непонятно, зачем перенесли тему в "периферийные устройства".
Поступила жалоба от dk_spb, что тема не соответствует разделу "Документация".
Я оставил как есть, поскольку в ней активен действующий администратор, ему виднее где быть теме.
Но Serge решил, что ей место здесь, значит так и есть.
Психологическая зрелость - это понимание того, как много вещей в мире не нуждается ни в твоих комментариях, ни в твоем мнении.

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

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

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

Сообщение Rio444 » 18.05.2019,19:31

Почти всё заработало.
Кроме одного. SysCheck показывает ошибку регистра MSR в режиме "закольцовывания" (LOOP).
Уже проверил всё, что можно. Сравнил в Debug-е с настоящим COM-портом. Никакой разницы нет.
ИзображениеИзображение
На первом скрине предпоследний тест "Test modem status". Второй и последний проходятся нормально. Просто всё сразу не удаётся впихнуть в имеющуюся плисину. Уже заказал побольше.
На втором скрине - самая нижняя строчка.
uav1606, не сочтите за наглость, не могли бы Вы в своей программе посмотреть, какой код при этом выполняется?
Для COM1 должно быть обращение к портам 3FC и 3FE (MCR и MSR регистры). Для COM2 соответственно 2FC и 2FE.
Собственно, DOS и Win 3.11, 95 "хавают" как есть. Проблемы в Win NT, проверял в 3.51 и XP. Обе COM порт не видят. Могут зависнуть. Хотя может дело только в том,
что не весь функционал в LOOP-режиме удаётся сразу запихнуть.
Но всё равно, хотелось бы знать, что не нравится SysCheck. С настоящим COM-портом ошибки естественно нет.
Электронка: Изображение копия Изображение

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

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

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

Сообщение uav1606 » 19.05.2019,20:14

Rio444 писал(а): 18.05.2019,19:31 Почти всё заработало.
Кроме одного. SysCheck показывает ошибку регистра MSR в режиме "закольцовывания" (LOOP).
Я не совсем понял, что за режим закольцовывания? Это с заглушкой который?
И, наверное, имелся в виду CheckIt, а не SysCheck, потому что на скринах именно первый.

У меня в виртуалке CheckIt эти же тесты проваливает:

serial1.PNG
serial2.PNG

Естественно, это без заглушки, к виртуалке я её никак не подключу.

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

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

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

Сообщение Rio444 » 19.05.2019,20:19

uav1606, Рад, что Вы появились!
Есть вариант с аппаратной заглушкой, есть чисто софтовый*.
Да, это CheckIt. Постоянно то одним, то другим пользуюсь, заговариваться начал.
Перед тестом Вы должны выбрать аппаратная заглушка ("Y" - по умолчанию), или софтовая ("N" - надо набрать с клавиатуры).
Действительно, у Вас тоже проваливает.
А можете посмотреть, в каком месте?
Подозреваю, что 8250/16450 какой-то недокументированный глюк, из-за чего он и проходит этот тест.

*В режиме "софтовой заглушки" надо установить в "1" 4-й бит MCR (3FC).
При этом буфер передачи закольцовывается с буфером приема,
а регистр MCR (3FC) с регистром MSR (3FE). Вот на этом и появляется ошибка.
Ума не приложу, почему должно получиться F4.
Электронка: Изображение копия Изображение

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

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

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

Сообщение uav1606 » 19.05.2019,20:33

А эта ошибка у Вас с "N"? Я выбирал "N".

Тут ещё проблема в том, что я не могу протоколировать определённые порты, только любые обращения к COM. Во вложении протокол при тестировании COM1 CheckIt'ом, но он длинный получился, нужно чистить и искать нужные порты.
Вложения
serial.log
(798.29 КБ) 340 скачиваний

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

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

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

Сообщение Rio444 » 19.05.2019,20:43

uav1606 писал(а): 19.05.2019,20:33 А эта ошибка у Вас с "N"? Я выбирал "N".
Да, именно так. Если "Y", то нужна внешняя аппаратная заглушка.

Действительно длинный. Но может получится выловить нужное.
Электронка: Изображение копия Изображение

Ответить