Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 7 8 9 10 11 * 12 13 14 15 16 17 | Печать |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Если какая программа использует его для измерения времени, то по любому сама и программирует. А штатно егоо функция например подавать гудки (тот же DOS), я не уверен что он программирует его заново каждый раз. Ну можно по выходе оставлять настроенным на 1000Hz Во всех руководствах по ассемблеру это самый используемый канал, все примеры обычно на нем строятся. Я еще подумаю. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 ноября 2017 22:45 Сообщение отредактировано: 4 ноября 2017 22:51
Только для AT (не слишком новых, где есть канал 1 8254) можно попробовать процедуру из исходников IBM AT |
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 и не годится для нашей цели. |
<<Назад Вперед>> | Страницы: 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 тем | |