Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 * 8 9 10 11 12 13 14 15 16 17 | Печать |
justontime
Full Member
Откуда: СПб Всего сообщений: 236 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 10 сен. 2016 |
i8088 написал: А, я просто неправильно понял проблему - думал, что речь идет только о решении для совсем старых машин PC/XT класса... но в AT машинах |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Приоритетно для машин 286, 386, 486-х. Если заработает на XT - не страшно, но и не принципиально. Для пентиумов не нужно, для них материнка без поддержки PS/2 - экзотика. Вообще, первая мысль была - использовать тупой цикл, со счетчиком. Вопрос только, где брать начальное значение счетчика? Оно будет зависеть от скорости процессора. Это начальное значение можно считать на этапе инициализации (т.е. только один раз). Но нужен какой-то таймер, который работает на всех вышеуказанных машинах, и работает одинаково. Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: На XT не заработает - там нет 8042 вообще. Если заработает на XT - не страшно, но и не принципиально. Rio444 написал: Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс. Канал 1 подходит, но надо проверить, на всех ли 286-486 AT машинах его настройка одинакова? Если на всех машинах он настроен на 0x12h, то как раз один тик ~15mks |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Rio444 написал: Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444, OK, я чего-то не сообразил сразу. Приношу свои извинения! |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088, извинения излишни. Значения счетчика из таймера можно читать непосредственно? in al, 040h ? Ничего не собьётся? Всегда ли он работает? Нужно ли предварительно делать "Access mode" = lobyte only ? Bits Usage |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
По ссылке pahan как раз есть пример, думаю ответы на все Ваши вопросы -да. Я только рекомендую не использовать 386+ инструкции, Reading The Current Count для совместимости с 286. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 16:31 Сообщение отредактировано: 2 ноября 2017 16:44
i8088 написал: Вы зря переживаете. Я и 8086 инструкции плохо знаю. 386+ для меня вообще темный лес. Я только рекомендую не использовать 386+ инструкции, для совместимости с 286. i8088 написал: Не нравится мне пример по ссылке: По ссылке pahan как раз есть пример, думаю ответы на все Ваши вопросы -да. read_PIT_count: Он устанавливает собственный режим работы канала 0, нарушая работу системного таймера. Я бы сделал mov al, 00010110b Т.е. принудительно установил бы чтение/запись только младшего байта. Остальное без изменений. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 16:59 Сообщение отредактировано: 2 ноября 2017 16:59
Rio444 написал: Я это просто к тому, что в тех примерах полно 386+ инструкций, тот же pushd/popfd. Вы зря переживаете. Я и 8086 инструкции плохо знаю. 386+ для меня вообще темный лес. Rio444 написал: Согласен, в книге Джордейна (правда для для канала 2 тоже сделано так, как Вы хотели), Я бы сделал к сожалению командный регистр - WO, что не позволяет сохранять настройки. |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
У 8254 есть команда write-back. к сожалению командный регистр - WO, что не позволяет сохранять настройки. принудительно установил бы чтение/запись только младшего байта Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. Но скорее всего придётся для получения адекватной производительности (см. ниже для примера чтения всех байт). В остальном - ОК. Значения счетчика из таймера можно читать непосредственно? В теории, кто-то может и поменять режим за то время, что мы к нему обращаемся. Безопаснее ставить. Нужно ли предварительно делать "Access mode" = lobyte only ? Можно, но стоит серьёзно подумать, 1)насколько нам нужна такая точность (ровно 15 мкс), 2) на каких процах и 3)в каких режимах мы будем наш код использовать. Потому что на всех 486 и топовых 286-386 всё это спокойно прокатит, на младших 386 в реальном режиме (чистый DOS) - да, в режиме виртуального 8086 (DOS-окно из-под Windows) - впритык, на младших 286 даже в реальном режиме вряд ли уложимся. прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 Считаем время выполнения инструкций (данные отсюда - http://www.cs.dartmouth.edu/~m...c/x86.html) только для считывания текущего значения счётчика таймера 8253 (а значит, этот код повторится ещё как минимум 1 раз, + сравнение(2-2-1 такт), +цикл после сравнения(не меньше 7-не меньше 7-3), +служебные команды, если это будет подпрограммой (cli/sti/push/pop/ret)): mov al, 0xD2 out 0x43, al in al,0x40 mov ah,al in al, 0x40 rol ax,8 - считали текущее значение канала 0 mov bx,ax - и запомнили его В тактах проца это всё займёт: 286 - 2+3+5+2+5+13+2=32 такта (на частоте 8-25 МГц)= 4 мкс-1,3 мкс 386 - 2+10(4..24..24)+12(6..26..26)+2+12(6..26..26)+3+2=43 такта в реальном режиме/25-85 в защищённом/85 в V86 (на частоте 16-40 МГц)= 2,7/1,6/5,3 мкс - 1,1/0,6/2,1 мкс 486 - 1+16(11..31..29)+14(9..29..27)+1+14(9..29..27)+2+1=39 тактов в реальном режиме/34-94 в защищённом/88 в V86 (на частоте 25-133 МГц)= 1,6/1,4-3,8/3,5 мкс - 0,3/0,3-0,7/0,7 мкс |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 * 8 9 10 11 12 13 14 15 16 17 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |