Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 7 8 9 10 11 * 12 13 14 15 16 17 | Печать |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Очень просто, но очень неточно. Даже значение в Ah не инициализируют. Перед WAITF1 должно быть: IN AL,PORT_B Возможно именно этот алгоритм используется в int 15h функция 86h. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 9:31 Сообщение отредактировано: 5 ноября 2017 9:32
Rio444 написал: Мне тоже это не понравилось но я решил привести как в оригинале. Даже значение в Ah не инициализируют. Дилемма в том, что с 8253/54 слишком много команд получается, что снизит точность. Но при использовании канала2 будет чуть проще, тк его можно останавливать без latch. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Посмотрите вот такой вариант:
На 386DX-40 получилось на выходе 10 циклов. Что вполне неплохо. На 286-й конечно точность будет очень низкая. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Те Вы предлагаете сделать пре-калибровку, а потом всюду использовать найденную константу? В принципе оба варианта (IBM и Ваш) могут использоваться, в зависимости от целей. А Вы пробовали проверить реальную задержку осциллографом? Я проверял так
Это делает 65536 импульсов и пауз в порт принтера. Проверить, насколько изменится длительность импульсов и паузы если заккоментировать CALL DLY (для уменьшения потерь времени можно заменить макроопределением). Разность и даст задержку. Цикл у Вас в конце лучше сделать так |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 13:07 Сообщение отредактировано: 5 ноября 2017 13:08
i8088 написал: Собственно я так изначально предлагал Те Вы предлагаете сделать пре-калибровку, а потом всюду использовать найденную константу? Rio444 написал: i8088 написал: Вообще, первая мысль была - использовать тупой цикл, со счетчиком.Вопрос только, где брать начальное значение счетчика? Оно будет зависеть от скорости процессора.Это начальное значение можно считать на этапе инициализации (т.е. только один раз).Но нужен какой-то таймер, который работает на всех вышеуказанных машинах, и работает одинаково. Смысл в том, что сохраняется число тактов на один проход цикла. Весь код совпадает, только меняется порядок инструкций, и inc cx меняется на dec cx. Цикл у Вас в конце лучше сделать так Будут ли по числу тактов loop и dec(inc) cx jnz равноценны? |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Навряд-ли, loop должна быть быстрее. Тогда оставим как есть. Будут ли по числу тактов loop и dec(inc) cx jnz равноценны? Теперь осталось проверить реально получающуюся задержку. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 13:40 Сообщение отредактировано: 5 ноября 2017 14:02
Осциллограф далеко и барахлит, поэтому проверил программно: org 0100h С метки start_main_loop находится цикл, который выполняется 65536 раз, в каждом цикле 10 раз вызывается задержка 15мкс. Расчетная задержка = 15мкс*65536*10 = 9 830400 мкс = 9,83 секунд Интервал считаем между появлением на экране сообщений Program start и Program end. По секундомеру получилось 11,3 секунды. Что вполне неплохо коррелирует. Т.е. реальная задержка (с учетом затрат времени на call и ret) получается ~17мкс. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 17:12 Сообщение отредактировано: 5 ноября 2017 17:22
OK, неплохо! Можно попробовать использовать! PS. Я кстати посмотрел несколько datasheet, канал1 имеется и в достаточно новых системах (865, современные PCH например), те простой вариант IBM тоже можно использовать даже на современных платах. Я нашел про int 15 AH=86 INT 15 - системное прерывание - WAIT - ожидание - (для AT,XT2,XT286,CONV,PS) AH = 86h CX,DX = число микросекунд ожидания (с точностью до 977 мс) Возвращает: CF сброшен: после окончания ожидания CF установлен: немедленно при ошибке Примечание: точность периода ожидания равна 977 микросекунд в большинстве секунд потому что большинство BIOS использует прерывание от мик- росхемы таймера AT с частотой 1/1024 секунды доступные по INT 70 Смотри: AH=83h, INT 70 NT 70 - IRQ8 - AT/XT286/PS50+ - REAL-TIME CLOCK - часы реального времени - Примечание: может маскироваться установкой бита 0 в порте Ввода/Вывода A1h Смотри: INT 58 Те оно использует прерывание от RTC и не годится для нашей цели. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Спасибо! Дя, обломчик с int 15 86h. Странно, что в большинстве источников не указан такой принципиальный момент. Но, по большому счету, в TSR программе вообще нельзя использовать int. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 24 ноября 2017 0:14 Сообщение отредактировано: 24 ноября 2017 0:25
Не прошло и месяца, как появились хоть немного заметные подвижки))) Наконец есть рабочая "альфа" версия программы. Работает пока через одно место, не со всеми драйверами и многое не понятно. Но работает. Довольно много драйверов мыши "плюют" на "штатный" обработчик прерывания мыши Irq12 (Int 74h) и полностью подменяют его собственным. Вот некоторые из таких драйверов и заработали. В частности, проверил на CuteMouse (версии 1.9, 2.0, 2.1 - работает со всеми). И какой-то старый драйвер от А4 Tech. Некий неизвестно чей драйвер "amouse.com" отказывается загружаться, сообщая, что "установка драйвера PS/2 мыши невозможна". Драйвер, который при запуске пишет, что он ©Microsoft и ©IBM, 1992-го года, загружается, но сразу вешает систему (или отрубает клавиатуру?). Пока так. В процессе инициализации размаскировываю прерывание Irq12, но к концу программы какая-то хрень снова его маскирует. Не могу понять какая. Сейчас перед выходом из программы приходится повторно его размаскировывать. |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 7 8 9 10 11 * 12 13 14 15 16 17 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |