Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу 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 .. 12 13 14 15 16 17
Печать
 
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
Rio444 написал:
[q]
у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения....
[/q]
Откуда эти сведения? думаю паника преувеличена
[/q]
Из анализа исходного кода прошивки. Часть пакетов от мыши PS/2 теряется и не доходит по порта COM.
В зависимости от установленного в конвертере масштаба скорости мыши, либо теряется часть пакетов, приходящих от мыши. Либо наоборот приходят уже устаревшие данные.

Основная проблема протокола для COM мыши - низкая частота передачи данных. Всего 1200 бод/9 бит/3 байта = 44,(4) раза в секунду. Если пакет с данными приходит непосредственно от мыши, с задержкой 1000/44,(4) = 22,5 миллисекунд. Мизерный процент людей могут заметить такую задержку. Не зря считается, что fps с играх не должен опускаться ниже 30.
Если мышь PS/2 подключена через конвертер, то задержка увеличивается в 2-3 раза. То есть будет 22,5*2 = 45мс или 22,5*3 = 67,5мс. Что соответсвует частоте 22,2 и 14,81Гц. Что уже очень заметно. Задержка связана с тем, что пока в COM порт передаётся очередной пакет данных, из PS/2 уже приходят новые данные. Они не передадутся в COM, пока в COM не уйдет текущий пакет.
Задержка может быть разной потому что частоты передачи данных у PS/2 и COM мыши не совпадают. У PS/2 - 100 раз в секунду.
У COM, как писал выше - 44,(4) раза. Поэтому задержка зависит от того, на кокой момент пакета передачи данных в COM приходится получение данных из PS/2. Если пакет данных в COM (почти) передан, но новый ещё не начался - задержка 45мс. Если только начался - то 67,5мс.
Чтобы уменьшить задержку, можно передавать в COM только последний пакет, полученный из PS/2. При этом часть данных теряется. Теряются ранее полученные пакеты. Это будет ощущаться в незавномерном движении курсора, если очень медленно двигать мышью. Либо, если двигать ею равномерно вертикально, она будет слегка "скакать" влево-вправо. Если горизонтально - то вверх-вниз. Такой алгоритм реализован у EJSanYo при минимальном масштабе скорости.
При других масштабах в компьютер приходит "свет угасших звёзд", т.е. неактуальные данные.
Конечно понятнее было бы это всё отобразить на графиках. Если Вам действительно интересно, можете сами это сделать.
Если Вы хотите доказать, что всё работает нормально и Вас всё устраивает, даже спорить не буду)))


Ekb написал:
[q]
Я так понимаю, что нужно проверять в 3D-шутере, подобия Descent - где нужно быстро и точно наводить на цель.Для таких случаев, у меня 486 на плате 4dps, у него и так есть PS/2
[/q]
Я довольно однозначно написал про курсор.
Ekb
Advanced Member


Всего сообщений: 1628
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2014
Rio444 написал:
[q]
Из анализа исходного кода прошивки. Часть пакетов от мыши PS/2 теряется и не доходит по порта COM.
[/q]
Вполне возможно. У COM-овских протоколов ограничено до 9600 1200 бодов. А PS/2, наверное, больше.

Могу только заверить, что "скачет в другую сторону" не замечал за последние 2 года (я изредка включал XT). Поэтому паника слегка преувеличена ;)

Но никто-ж не запрещает изобретать новое. В любом случае, аутентичность теряется в обеих случаях (конвертор или новый 8042 c ISA-платой).
P.S. Интересно потом сравнить в лоб: конвертор или New8042. И где эта разница обнаружится.
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
[/q]
Дописал сообщение выше. Там подробнее.

Предыдущее сообщение получилось несколько сумбурным. Есть неточности. Задержка в конвертере PS/2 -> COM, не в 2-3 раза, а в примерно 1,1-2,3 раза.
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
Могу только заверить, что "скачет в другую сторону" не замечал за последние 2 года (я изредка включал XT). Поэтому паника слегка преувеличена

Но никто-ж не запрещает изобретать новое. В любом случае, аутентичность теряется в обеих случаях (конвертор или новый 8042 c ISA-платой).
P.S. Интересно потом сравнить в лоб: конвертор или New8042. И где эта разница обнаружится.
[/q]
Хорошая шариковая COM мышь на хорошем коврике более точно передаёт движения, чем оптическая через конвертер.
Хотя, возможно, долю погрешности вносит сама оптическая мышь. Как-нибудь попробую с другой.
"New8042" будет работать точно так же, как обычный PS/2 порт на любой материнской плате.
Никаких задержек или преобразований не добавляется.

Про "скачет" возможно я неточно выразился. Появляется дискретность движений. То есть, вместо того, чтобы перемещаться плавно, попиксельно, курсор может на мгновение остановиться, потом "перепрыгнуть" сразу на два пикселя. Это заметно только если очень медленно двигать мышью. Либо не настолько медленно, но почти вертикально или почти горизонтально. При быстрых резких перемещениях что-то заметить очень сложно.

В каких-то программах это более заметно, в каких-то менее. Видимо сами программы вносят какую-то задержку на обработку входящих данных о перемещении мыши. И по-разному их обрабатывают. В теме о конвертере я писал, что наиболее заметны артефакты в игре "Цветные линии" (Lines). В Norton Commander заметить что-то практически невозможно. В Windows95 на уровне ощущений чувствуется небольшая рассинхронизация движения руки и курсора на экране. С оптической мышью, подключенной в PS/2 ощущения рассинхронизации не возникает.
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Аппаратная часть проверена и отлично работает.
Проверял на 486-й материнке с биос Award 4.50PG.
В программной части оказалось достаточно подправить родной биос модбином, включить "PS/2 mouse support" enable.

Оказалось, что ещё одна 486-я и все мои 386-е имеют AMI Bios.
Каждая версия AMI Bios правится своей версией Amibcp:
[q]
BCP14.EXE (for core BIOS 07/07/91)
BCP20.EXE (for core BIOS 12/12/91)
BCP21.EXE (for core BIOS 06/06/92)
BCP21A.EXE (for core BIOS 11/11/92 and 08/08/93)
WBCP33.EXE (for core BIOS 12/15/93 (and 06/25/94?))
WBCP40.EXE (for core BIOS 06/25/94 and 07/25/94)
WBCP42.EXE (for core BIOS 07/25/94)
WBCP511.EXE (for core BIOS 10/10/94)
[/q]
Источник
Никто эти версии в глаза не видел.
Если у кого есть, шлите!

Сейчас работаю на TSR программой, которая будет выполнять все функции биос, связанные с работой PS/2 мыши.
Кто знает ассемблер, и, особенно, NASM, нужны ваши подсказки.

В частности, как реализовать задержку 15мкс?
Сделал через функцию 86h прерывания int 15h.
В некоторых источниках пишут, что эта функция нормально работает, если задержка от 1000мкс.
Но не понятно, что будет, если длительность меньше. Как я предполагаю, просто реальная задержка
будет больше заданной. Что скажете?
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
В некоторых источниках пишут, что эта функция
[/q]
не позволяет реализовать задержку меньше 976 мкс, если речь про это:
http://vitaly_filatov.tripod.com/ng/asm/asm_026.13.html
[q]
что будет, если длительность меньше
[/q]
Надо разбираться как она внутри работает, чтобы проверить это.
[q]
В частности, как реализовать задержку 15мкс?
[/q]
Ровно не получится, но вряд ли вам наносекунды будут принципиальны ;)
Самому запрограммировать таймер 8254 на нужную частоту прерываний и ловить IRQ0
https://en.wikibooks.org/wiki/...rval_Timer
Нужный делитель - 18.


Как различные ОС к такому отнесутся - ничего обещать не могу.
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
pahan, спасибо за наводку. Почитаю.
Может можно как-то попроще? Или есть готовый код для таймера?
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
Сам с ним не развлекался, а примеры кода есть здесь:
http://wiki.osdev.org/Programmable_Interval_Timer
Там хорошая простыня ;)
i8088
Advanced Member


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


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Я бы только посоветовал использовать инструкции не выше 286,
чтобы можно было использовать эту разработку на 286 платах.

В кодах BIOS-ов небольше задержки часто делаются просто loop цилами,
но понятно, что такая задержка зависит от частоты и поколения CPU.

Работу с таймером с только 16-bit инструкциями можно подсмотреть в коде
Atmel программатора для AT89 (прилагаю AT89.ZIP, файл XTIMER.ASM)

PS. Я бы использовал MASM (или другой DOS assembler), чтобы можно было вести разработку на 286 машине.

Прикрепленный файл (AT89.ZIP, 0 байт, скачан: 18 раз)
justontime
Full Member


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


Ссылка


Дата регистрации на форуме:
10 сен. 2016
Rio444 написал:
[q]
как реализовать задержку 15мкс?
[/q]
Думаю, это самое реальное из всего возможного (подпрограмма задержки из BIOS PC/XT):



WAITF    PROC  NEAR      ; FIXED TIME WAIT ROUTINE HARDWARE CONTROLLED - NOT PROCESSOR
                  ; ENTRY:
                  ; (CX) = COUNT OF 15.085737 MICROSECOND INTERVALS TO WAIT
                  ; MEMORY REFRESH TIMER 1 OUTPUT AT THE DMA CHANNEL 0 ADDRESS REGISTER USED AS REFERENCE.
                  
                  ; EXIT:
                  ; AFTER (CX) TIME COUNT (PLUS OR MINUS 31 MICROSECONDS)
                  ; (CX) = 0    
  
      PUSH  AX        ; SAVE WORK REGISTER (AH)
      SHR    CX,1      ; DIVIDE 15us COUNT DOWN TO 30us COUNT
      ADC    CX,0
      JCXZ  WAITF9      ; EXIT IF COUNT WAS ZERO OR ONE

      OUT    DMA+12,AL    ; CLEAR THE DMA BYTE POINTER FLIP/FLOP
WAITF1:
      PUSHF          ; SAVE INTERRUPT STATE
      CLI            ; BLOCK INTERRUPTS TILL NEXT CHANGE
WAITF3:               ; WAIT FOR REFRESH ADDRESS CHANGE
      IN    AL,DMA      ; READ CURRENT ADDRESS LOW BYTE
      AND    AL,11111110B  ; DISCARD LOW BIT (30us)
      CMP    AH,AL      ; DID VALUE JUST CHANGE
      MOV    AH,AL      ; SAVE NEW/OLD VALUE INCASE IT DID
      IN    AL,DMA      ; READ HIGH BYTE (AND IGNORE)
      JE    WAITF3      ; WAIT FOR A CHANGE IN ADDRESS BITS

      POPF          ; RESTORE INTERRUPTS
      LOOP  WAITF1      ; DECREMENT CYCLES COUNT TILL COUNT END
WAITF9:
      POP    AX        ; RESTORE (AH)
      RET            ; RETURN (CX)= 0

WAITF    ENDP



Извините за формат - тегов CODE что-то не вижу на форуме...

Думаю, канал 0 DMA - единственное, что на старых компьютерах может более-менее надежно выдавать подобные интервалы, причем крайне маловероятно, чтобы кто-то решил его перепрограммировать (хотя такие примеры тоже знаю). Перепрограммировать 8253 категорически не рекомендую - несовместимость с чем-нибудь практически гарантирована...
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 * 7 8 9 10 .. 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