Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Переделка АТ интерфейса клавиатуры в PS/2 на старых платах
RSS

Переделка АТ интерфейса клавиатуры в PS/2 на старых платах

Уровня 386-х, 486-х, чтобы можно было подключить 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 или я Вас не понял, или Вы ошибаетесь
[q]
Каждый период синхронизации происходит уменьшение на единицу содержимого внутреннего счётчика канала, начальное значение которого устанавливается программно.
[/q]
Т.е. 18 надо вычитать, а не прибавлять.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Т.е. 18 надо вычитать, а не прибавлять.
[/q]
Ой да, забыл, что счет в обратную сторону, мои извинения!

Но сути дела это не меняет.

Пример
Исходное значение 0x04
Вычисляем, чего ждать 0x04 - 0x12 == 0xFFF2 (старшие FF это я перенос обозначил)
На флаг CF не обращаем внимания, и ждем когда счетчик достигнет 0xF2

PS. Если бы КД канала 0 был бы не 65536, то переустановку счетчика при
переходе через 0 пришлось бы учитывать, и код был бы более сложным.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
На флаг CF не обращаем внимания, и ждем когда счетчик достигнет 0xF2
[/q]
Не может такого быть, что счетчик не достигнет 0xF2, а "перескочит" его, когда будет очередное считывание?
Если процессор медленный.
И, видимо, надо будет запрещать аппаратные прерывания, иначе они сильно исказят расчет.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Не может такого быть, что счетчик не достигнет 0xF2, а "перескочит" его, когда будет
очередное считывание? Если процессор медленный. И, видимо, надо будет запрещать аппаратные
прерывания, иначе они сильно исказят расчет.
[/q]
При медленном CPU я думаю возможно, тогда ловить не равенство, а что число в счетчике ниже
чем рассчитанное (сравнивать беззнаково!).

К примеру (просто первое, что сходу пришло в голову, это не проверялось, возможны
грубые ошибки!)

======================================================================
DELAY_CONST EQU 18

mov al, 00010110b
out 043h, al
in al, 040h
mov bl, al
sub bl, DELAY_CONST (в bl вычисляем значение окончания задержки)

delay_ch0: in al, 040h
cmp al, bl ;(в bl у нас рассчитанное ранее значение)
jbe stop_delay_ch0 ;(сравнение беззнаковое!)

;; здесь должна быть дополнительная проверка, если к примеру у нас рассчитанное
;; конечное значение 0x01, CPU задержался, и в счетчике уже к примеру 0xff
;; Здесь я совсем не уверен в корректности моего решения (проверка чисел как
;; знаковых, если беззнаковая проверка дала "добро" на продолжение цикла и считанное
;; значение отрицательно (0x80-0xff), а конечное положительно. Надеюсь, что до 0x7f
;; запаздывание из-за CPU (положительные знаковые числа не дойдет).

cmp al, 00h ; просто для устанавки флагов
jns delay_ch0 ;проверка, что считанное значение положтельно, если да, то продолжаем цикл

; если мы здесь, то имеем считанное значение отрицательное, проверяем конечное значение
cmp bl, 00h
; если имеем ситуацию, когда конечное значение (bl) положительно, а текущее (al)
; отрицательно, то выходим из цикла
jns stop_delay_ch0

jmp short delay_ch0

stop_delay_ch0: ;эдесь процедура (код) задержки кончается
======================================================================

Прерывания да, запретить обязательно! По любому будет видно при отладке, с первой
попытки такие вещи обычно не работают.

Для проверки можно сделать простую програму с бесконечным циклом из этой задержки, и
направить вывод например в LPT порт (например после каждой задержки иннвертировать
данные в 378h). И наблюдать осциллографом длительность импульса и паузы на линиях данных
LPT. Я так проверял реальные задержки во FreeBSD.

======================================================================
LPT_DATA_PORT EQU 0378h

mov dx, LPT_DATA_PORT
in al, dx
xor al, 0ffh ;инвертируем
out dx, al
======================================================================

После исполнения такой программы в цикле системные часы отстанут, но для проверки
это несущественно, особенно если цикл бесконечный:).
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088, спасибо! Буду пробовать. Пока вообще эту задержку убрал.
Сейчас ошибки компиляции исправил. Но после запуска компьютер виснет.
Пока проверяю код.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Роман, для отладки пока уберите отключение прерываний
в процедуре задержки.

Я как освобожусь, тоже посмотрю. Процедура задержки
будет полезна и в других проектах.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088, хорошо.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Я проверял на плате XT IBM5160 (у нее таймер 8253) - при программировании канала 0 даже
тем же значением 0x36h (lsb/msb), режим 011, таймер просто перестает считать и системное
время стоит.

Если не трогать 0x43, то чтение канала0 исправно возвращает LSB/MSB (меняющиеся).

В исходниках IBM BIOS делается отключение прерываний от таймера при программировании
маскированием входа 8259. Ядумаю надо сделать также.
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
Обсудили же, что XT не трогаем и сами лезете на ней тестировать :)
[q]
при программировании канала 0 даже
тем же значением 0x36h (lsb/msb), режим 011, таймер просто перестает считать и системное
время стоит.
[/q]
А в каком режиме он стоит (access mode)? Потому что если в lobyte/hibyte - всё ОК, он будет ждать след. байта. А режим мы проверить не можем, потому что зачем-то тестируем на XT (таймер 8253), а не AT (8254).
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
pahan написал:
[q]
А в каком режиме он стоит (access mode)? Потому что если в lobyte/hibyte - всё ОК, он будет ждать след. байта. А режим мы проверить не можем, потому что зачем-то тестируем на XT (таймер 8253), а не AT (8254).
[/q]
Он стоит в режиме hi/lo 011, при записи того-же режима получаем останов
счетчика и поочередно получаем hi/lo одинаковые (те например 0xe4 0xf2
0xe4 0xf2 0xe4 0xf2 итд).
При переводе в режим LSB - всегда одно значение.


pahan написал:
[q]
Обсудили же, что XT не трогаем и сами лезете на ней тестировать
[/q]
Меня интересует универсальная процедура задержки, к PS2 вопросу это не
относится. Насколько я понял, у Rio444 на AT получилось то же самое.
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 7 8 9 * 10 11 12 13 14 15 16 17
Печать
Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Переделка АТ интерфейса клавиатуры в PS/2 на старых платах
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS