Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 8 * 9 10 11 12 13 14 15 16 17 | Печать |
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 мкс |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Небольшой фотоотчет. Новый контроллер клавиатуры с обвязкой, установленный взамен старого. На "брюхе" контроллера установлена небольшая платка с обвязкой. Прошу прощения за несмытую канифоль. Ноги контроллера подогнуты и припаяны к плате. К ним припаяны "фиктивные" ноги, откушенные от ненужной микросхемы. Никогда так не делайте!!! Припаять новые ноги ровно задача не из простых. Заняло несколько часов и немерено матерных слов. Новый прототип буду делать по-другому. Резисторы на картинке видно. Транзисторы (их почти не видно) - SMD 2n3904, снятые с какой-то нерабочей материнской платы. Конденсаторы не ставил. Не нашлось нужных по размеру и номиналу, ехать на радиорынок долго. Впрочем, работает и так. Модифицированную прошивку зашивал во флэш (оригинальная в 27c512). Как назло, места, чтобы поставить 32-пиновую DIP вместо 28-пиновой не оказалось. Микросхема упиралась в ISA8 разъём. Пришлось городить колхоз из нескольких 28 и 32-х пиновых панелек. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 18:27 Сообщение отредактировано: 2 ноября 2017 18:34
pahan написал: Предварительно проверяем, что текущее значение >18 (лучше с запасом - больше 30). Если меньше, ждём (считываем повторно, пока не станет >18, т.е. не пройдет через 0). Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. pahan написал: Если реальная задержка будет 15...30мкс, думаю это устроит. Это задержка между появлением флага переполнения буфера мыши в контроллере и появлением данных в выходном регистре. Не знаю, почему именно 15мкс. Это значение в исходнике Sergey Kiselev XT биос. Он, вероятно, скопировал из исходников Award bios. 1)насколько нам нужна такая точность (ровно 15 мкс) pahan написал: От самого младшего 286 (8МГц?), до самого старшего 486 (AMD 5x133@160) 2) на каких процах pahan написал: Код инициализации - из под чистого DOS (если стоит Win95, то до её загрузки, из autoexec.bat). Сама задержка - вероятно и DOS, и Windows. Но Win95 ставят только на 386 и выше (лично я предпочитаю от 486-х). 3)в каких режимах мы будем наш код использовать. Потому что на всех 486 и топовых 286-386 всё это спокойно прокатит, на младших 386 в реальном режиме (чистый DOS) - да, в режиме виртуального 8086 (DOS-окно из-под Windows) - впритык, на младших 286 даже в реальном режиме вряд ли уложимся. Исходя из Ваших дальнейших расчетов pahan написал: думаю нормально. Эта часть быдет выполнять только в чистом DOS. 286 - 2+3+5+2+5+13+2=32 такта (на частоте 8-25 МГц)= 4 мкс-1,3 мкс |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Сейчас вы будете смеяться, но в Award BIOS такой задержки нет. Или я чего-то не понимаю. Код Sergey-XT биос: ;========================================================================= Аналогичный участок кода Award BIOS: |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 20:25 Сообщение отредактировано: 2 ноября 2017 20:32
pahan написал: Это как раз не страшно, тк складывать текущее знасение с 18 мы тоже будем с переполнением. Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. Пример. Текущее значение счетчика (младший байт) == 0xF0 Запоминаем, складываем с 18 , 0xF0 + 0x12 = 102 Перенос вызовет установку флага CF, но на это не обращаем внимания. Ну и собственно ждем, когда счетчик достигнет значения 0x02 Это чем-то похоже на относительные внутрисегментные безусловные переходы в x86: смещение перехода задается формально в пределах -32768 +32767, но "дотянуться" до любого адреса внутри сегмента не проблема. А о задержке - я думаю это носит рекомендательный характер, для совместимости со всеми устройствами и выдерживать его прям точно до микросекунды нет необходимости, и исходники это подтверждают. Rio444 написал: Первый 286 - 6MHz. PC/XT полюбому в пролете, там совсем другой От самого младшего 286 (8МГц?), интерфейс клавиатуры и сама клавиатура. Ну за исключением очень редких нестандартных XT с AT клавиатурой. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 или я Вас не понял, или Вы ошибаетесь Т.е. 18 надо вычитать, а не прибавлять. Каждый период синхронизации происходит уменьшение на единицу содержимого внутреннего счётчика канала, начальное значение которого устанавливается программно. |
<<Назад Вперед>> | Страницы: 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 тем | |