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

Полигон-2

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

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

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

Полигон-2 »   Технический флейм »   PS/2 to COM converter
RSS

PS/2 to COM converter

Сочинил вот на днях очередную поделку.

<<Назад  Вперед>> Страницы: 1 * 2
Печать
 
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Подниму старую тему.
Как отмечал выше и в теме [t=26981]"Переделка АТ интерфейса клавиатуры в PS/2 на старых платах"[/t], проблема конвертера PS/2 в COM в неидеальном преобразовании перемещений.
Во-первых имеется задержка, во вторых неточности преобразования.

Постараюсь ещё раз пояснить.
Стандартная частота передачи данных от PS/2 мыши - 100 пакетов в секунду. Т.е. через каждые 1000/100 = 10 миллисекунд.
Сам пакет передаётся быстрее (около 3 миллисекунды), за счет того, что частота передачи битов около 10 кГц.

Скорость работы COM порта для стандартных мышей - 1200 бод. Пакет данных от мыши со стандартным протоколом "MS Mouse" включает 27 бит (в том числе старт и стоп биты). Т.е. длительность пакета = 1000/(1200/27) = 22,5 миллисекунд.
Если пакеты передаются непрерывно - это минимальный период их передачи.
Получается, что за время передачи пакета данных в COM порт, от PS/2 мыши может придти 22,5/10 = 2,25 пакета данных.
Уже это дробное число показывает, что идеального преобразования быть не может.
Представьте, что Вы равномерно двигаете мышь горизонтально, так что в PS/2 порт непрерывно передаётся перемещение по X равное 10.
В COM порт будет передаваться серия пакетов: 3 пакета с перемещением 20 (=10+10) и каждый четвертый пакет - с перемещением 30 (10+10+10). Будут иметь место небольшие рывки.
Плюс добавляется задержка равная почти двухкратному времени передачи пакета в COM. Если пакет в COM только начал передаваться, а от PS/2 мыши поступили новые данные, то хост (компьютер) получит эти данные только после того, как закончится передаваться текущий пакет и эти данные будут переданы следующим пакетом. Т.е. через 2х22,5 = 45 миллисекунд.
Что эквивалентно частоте передачи 1000/45 = 22,22 Герц. Что уже явственно ощущается.


Это проблему можно решить, если поднять скорость работы COM порта с 1200 до 9600 бод.
В этом случае время передачи пакета данных в COM-порт составляет всего 1000/(9600/27) = 2,8125 миллисекунд.
Во-первых, такую задержку ни один человек ощутить не в состоянии (эквивалентная частота = 1000/2,8125 = 355 Гц),
во-вторых это время меньше периода приема данных от PS/2 мыши (=10 миллисекунд). И никаких преобразований не нужно. Пакеты передаются один-в-один, за исключением инверсии координаты Y и возможного масштабирования.

Изменить скорость с 1200 до 9600 бод в прошивке конвертера не представляет никакой сложности.
Дело за драйвером.
Большинство драйверов не только инициализируют COM порт на скорости 1200 бод, но и в процессе работы зачем-то постоянно вновь и вновь восстанавливают эту скорость, даже если вы её измените каким-то образом.

В итоге под DOS нашлись следующие варианты:

1. Перекомпилировать драйвер с открытым исходным кодом CuteMouse на скорость 9600 бод.
Даже не вникая особо в код, достаточно в двух местах заменить делитель скорости "96" на "12" и перекомпилировать.
Сделал только для версии "v2.0 alpha 4". Она написана на TASM, есть подробная инструкция по компиляции и сборке. Получилось почти сразу. Самая последняя версия "v2.1 beta 4" уже на JASM, с ней надо разбираться.
Впечатления от работы мыши самые положительные! Никаких дефектов преобразования не замечено! Реакция отличная!

2. Использовать драйверы мыши, которые не восстанавливают скорость COM порта в процессе работы.
В моей коллекции таких нашлось только два. Некий "VESA serial mouse driver (version 1.02) 1995" и "Mouse driver version 3.62" от "SPC MANUFACTURING", 1995.
Стартуют они как и положено на скорости 1200 бод, но разрешают потом изменить эту скорость. Я пользовался утилитой setcom.com из некоего пакета, найденного в сети.
Чтобы драйвер запустился и опознал мышь, необходимо, чтобы конвертер сначала передал ему идентификатор мыши (символы "М" и "3") на скорости 1200 бод, потом переключился на 9600 бод. На компьютере мы в это время запускаем setcom, который также поднимает скорость до 9600 бод.
При таком решении CuteMouse, перекомпилированный на 9600 бод не работает. Т.к. с самого начала (с идентификации мыши) ему нужна скорость 9600 бод.

3. Существует протокол COM мышей, который упоминается повсеместно, вместе со стандартным "Microsoft Mouse" (MS Mouse), называется он "Mouse System Mouse" или "PC Mouse". В отличие от MS Mouse, пакет пятибайтовый, по 8 бит в байте. Полностью пакет состоит из 50 бит. Длительность передачи на скорости 9600 бод = 1000/(9600/50) = 5,2 миллисекунды. Что больше, чем 2,8 мкс у протокола MS Mouse, но всё равно очень хорошо. И с запасом укладывается в период приема данных из PS/2 (10 мкс).

Так вот, у этого протокола есть особенность - мышь ни каким образом не даёт знать, что она присутствует.
Если Вы запустите любой (почти) драйвер мыши и он не найдёт ни на одном COM порте мышь, то загрузится именно в режиме Mouse System Mouse на COM1. С помощью ключей к драйверу можно указать другой порт.
В одном из источников написано, что мышь Mouse System может посылать для идентификации в COM-порт символ "H". Но большинство мышей не посылают вообще ничего.
Это даёт нам возможность просто настроить конвертер на скорость 9600 бод.
Запустить один из вышеуказанных драйверов. Не найдя мыши они загружаются в режиме Mouse System.
Мы меняем с помощью Setcom скорость на 9600 бод.
Всё работает!

Можно считать, что под DOS вопрос решён.

Переходим в Windows.
Вот тут нужна "помощь зала".
Для начала я экспериментировал с Win95.

Во-первых, пока не удалось найти способа изменить настройки COM-порта.
Если изменить их в "оборудовании" в свойствах COM-порта, то они меняются и сохраняются, но никак не влияют на фактическую работу COM-порта. Сторонние утилиты показывают, что скорость как была 1200 бод, так и осталась.

Во-вторых, внезапно оказалось, что второй по популярности протокол Mouse System не имеет встроенного драйвера в Win95!!!
Пришлось искать, и с большим трудом найти сторонний.
На скорости 1200 бод работает он, надо сказать, хуже чем родной MS для протокола MS Mouse. Движения заметно неравномерные.

Видятся следующие варианты:
- каким-то образом изменить один из существующих драйверов, чтобы он работал на скорости 9600 бод, вместо 1200. О драйвере с открытым исходным кодом для Win мне неизвестно. Возможно можно как-то пропатчить двоичный код драйвера,
- найти способ изменять скорость COM после загрузки драйвера и драйвер, который не будет сбрасывать её обратно на 1200,
- научить конвертер "притворяться" мышью, которая имеет драйверы с поддержкой скорости 9600 бод. Мне известны только старые мыши от Logitech, в частности их серия "C" и "Cordless". Но пока не удалось разобраться, как драйвер определяет, что подключена именно его "родная" мышь Logitech.

Пока всё.
Буду благодарен за бесполезные советы. :)

Приложения.
Документация на Logitech C7
Здесь можно скачать утилиту Setcom.com.
0leg
Advanced Member


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


Ссылка


Дата регистрации на форуме:
6 окт. 2007
Rio444 написал:
[q]
100 пакетов в секунду. Т.е. через каждые 1000/100 = 10 микросекунд.
[/q]
10 миллисекунд...
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
0leg написал:
[q]
10 миллисекунд...
[/q]
Спасибо, исправил.
AndroIDDQD
Newbie


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


Ссылка


Дата регистрации на форуме:
5 июня 2018
Rio444, приветствую ! Возможно ли приобрести у вас сей чудо-прибор ?
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
AndroIDDQD, у меня этот проект пока подвис. Если готовы собрать сами, поделюсь последней прошивкой.
Можем обсудить в начале след недели.
Сейчас на отдыхе. Со смартофона жены не очень удобно.
AndroIDDQD
Newbie


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


Ссылка


Дата регистрации на форуме:
5 июня 2018
Rio444, ок, понял. На следующей неделе напишу вам.
AndroIDDQD
Newbie


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


Ссылка


Дата регистрации на форуме:
5 июня 2018
Приветствую всех !
Случилось так, что совершенно случайно в августе забрёл в эту тему, и вдруг вспомнил, что у меня есть пара древних ПК, которые не имеют PS/2 портов. А шариковая мышь нам COM порту уже совсем бесит меня. И вот, попросил уважаемого Rio444 сделать мне таких (и побольше :)) целых две штуки. Человек откликнулся, договорились о стоимости и, спустя месяца полтора получил я сабж !
Встречайте, рабочий PS/2 to COM converter !

Тестировалось на 486DX2-66, на материнке которого PS/2 порт отсутствует в принципе. Сравнивал с Pentium 166MMX, мать TX98-3D Zida-Tomato с имеющимся на ней PS/2 (брекет). Мыши: шариковая Genius NetScroll+ и оптическая Logitech M-SBD69. Обе старенькие, но хорошо сохранившиеся.
Технические детали про сам конвертер от автора, Rio444:

JP1 - при замыкании начинает работать колесико мыши.
JP2 - при замыкании адаптер переходит на протокол PC Mouse со скоростью 9600 бод.
JP3 - выбор распиновки разъёма COM на материнской плате или мультикарте.
Там есть зеленый светодиод. Он единственный. Как он работает. При включении компа (или подаче напряжения на конвертер) он загорается. Это значит:
1) Напряжение питания имеется,
2) PS/2 мышь тоже имеется и отвечает. То есть работает.
Если светодиод не загорается, не выполняется пункт 1 или пункт 2. Далее. После того, как Вы запускаете драйвер мыши (или он запускается автоматически, например в Windows), светодиод гаснет.
Это означает, что связь по COM-порту налажена. Когда двигаете мышью или нажимаете на кнопки светодиод помигивает. Это означает, что в COM-порт от конвертера идут данные.
Теперь, когда у Вас всё заработало, можете нажать на черную утопленную кнопочку рядом со светодиодом. Это можно сделать спичкой, зубочисткой или отверткой. Нажать надо один раз и кратковременно.
После нажатия светодиод снова загорается. Это означает, что конвертер перешел в режим настройки скорости движения мыши. Он же - режим масштабирования перемещений, полученных от мыши, перед передачей в компьютер. В этом режиме курсор мыши по-прежнему двигается по экрану, но нажатия кнопок не передаются в компьютер. Нажатие левой кнопки увеличивает скорость движения курсора.
Нажатие правой - наоборот уменьшает. Всего этих скоростей семь. Нажимая много раз на левую кнопку мыши Вы дойдете до масштаба 2 и дальше он меняться не будет. Нажимая много раз на правую - до масштаба 0,25 и на этом его уменьшение остановится. Чтобы выйти из режима масштабирования нужно ещё раз нажать на черную кнопку на конвертере. Светодиод погаснет. Масштаб будет сохранён в энергонезависимой памяти. При следующем включении конвертера он будет тот же самый.

Ну, а теперь ощущения и выводы:
На протоколе PC Mouse со скоростью 9600 бод (только DOS) разницы с нативным PS/2 портом на Пентиуме я не почувствовал - всё очень ровно и гладко (читай - комфортно). Правда в некоторых волосатых играх (у меня это Marriage и какой-то старый Морской Бой) работают некорректно. Да и чёрт с ними - на протоколе MS-Mouse всё работает чётко везде !
Комфортность на протоколе MS-Mouse по личным ощущения почти не отличается от PC Mouse. Да, есть мизерные шероховатости, чуть более резкое движение курсора, но, если честно всё это придирки ! Мне не в фотошопе работать. Прогнал с мышью несколько игр (SimSity, Duna, Кирандию, все волосатые 3D стрелялки - Волчье Логово, Doom, Heretic, Duke3D и пр.). Всё просто отлично. В принципе, как и должно быть. Оптическая мыша, естественно, лидирует по всем параметрам ! В Windows (95-98) тоже всё пучком ! В Винде пока не смог (читай не успел, лень и пр.) задействовать колесо мыши. Я так понимаю, надо дрова менять на мышь... Позже. Да и особо не нужно мне.
Хочу выразить благодарность автору - Rio444, за его чудесный конвертер ! Он спас мою психику и последнюю имеющуюся у меня жывую COM-мышь от уничтожения !
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
AndroIDDQD, спасибо за отзыв!
Рад, что смог помочь!
Было бы интересно, если расскажете подробнее про
AndroIDDQD написал:
[q]
Правда в некоторых волосатых играх (у меня это Marriage и какой-то старый Морской Бой) работают некорректно.
[/q]
AndroIDDQD
Newbie


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


Ссылка


Дата регистрации на форуме:
5 июня 2018
Rio444, курсор плодится и множится по всему экрану... Так понимаю что-то с видео буфером или как это называется.
P.S. По совету автора сменил драйвер для 9600 и всё заработало ! Получается, с той кучкой игр, что у меня сейчас есть - нет проблем вообще !
<<Назад  Вперед>> Страницы: 1 * 2
Печать
Полигон-2 »   Технический флейм »   PS/2 to COM converter
RSS

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

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

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