Преувеличивать не надо :) Кстати, родилась я в Куйбышевской обл. ;) Земля там такая, плодовитая на таланты))
Вид для печати
Вы вообще понимаете разницу между мышью и джойстиком? "Марсианка" -- это МЫШЬ! Джойстик -- это джойстик! Одно вместо другого работать не будет, даже если биты направлений совпадают. И них разные протоколы обмена.
Вы бы ещё мобильник вместо зарядки в прямо в 220 подключали ...
Причём тут ардуина?
Не будет работать, как мышь. Будет как очень дерьмовый и глючный джойстик в лучшем случае. "Периодически".
Некоторые программы для БК действительно написаны из такого предположения. Оно неправильное. В основном товарищи из Caroline Software отличились. Что вообще говоря, странно -- с их-то высоким техническим уровнем. :(
Подпрограмма опроса мыши из ксидосовской оболочки -- это наглядный пример того, как не надо опрашивать мышь. Была бы написана правильно -- не свистела бы в ковокс.
На самом деле, сигнал нужен не для "запроса новых данных", а для подтверждения, что текущие уже прочитаны. Если мышь в момент сброса находится в покое, то никаких "новых данных" не поступит. Возможно -- вообще никогда.
Сбрасывать надо ТОЛЬКО после передвижения мыши. И сигналом минимально возможной длины. Тогда всё будет работать нормально, не терять квантов передвижения мыши, и не свистеть.
Нет. Он введён для того, чтобы мышь была устройством ввода КООРДИНАТНЫМ, то есть могла измерять линейное перемещение вдоль координат. Джойстик таким свойством не обладает и поэтому координатным устройством не является.
Он не то что "упрощает" схематику, без него вообще ничего бы не работало.
(комментарий вымаран внутренним цензором Сандро)
PS: Подключите же наконец к БК джойстик с мышиной распайкой, и попробуйте им поуправлять хоть чем-нибудь. Хоть ксидосом, хоть шахматами. Успехов!
Sandro, и как же Марсианка (сама по себе) измеряет линейное расстояние?
По моему, никак. Это делает "драйвер" мыши Марсианка, и, как Вы сами верно заметили, в разных программах для БК он реализован самобытно.
Но, наверняка, принцип у этих драйверов один - получение нового вектора движения мыши через равные периоды времени, для чего и нужен сигнал "сброс" от этого драйвера. Но если ардуино будет формировать новый вектор движения мыши в два и более раза чаще, чем старый софт БК посылает "сброс" через равные промежутки времени, ничего для такого софта принципиально не изменится.
- - - Добавлено - - -
Но я спаяю на днях тестовый разъём УП с ардуино и проведу следственный эксперимент. Как раз всё оказалось в одном помещении, и под рукой :)
во! ты осцылом могешь послушать что творится на координатных ногах у мыши? у меня лично такое подозрение что там при передвижении по столу будет меандр который прекратится при остановке движения. а следом послушать джойстик, когда его палку часто дергать. ну вот интересно сравнить что творится на разъеме порта.
"как убедить мне упрямую Настю - Настя желает в кино как суббота - Настя ворчит, что проникся я страстью к глупому ящику для идиотов..." а так - с эпюрами (с осцыллограммами сиречь) будет нотариально заверенный дакУмент.
ну че, можно будет попытаться?
поглядел в пдфку на одну мышу с квадратурным сенсором. джойстик тоже так сможет, главное научить его задние фронты несколько разтягивать. (поставить регистры или RS-триггеры, сбросом по Х+ будет управлять сигнал с Х- - тогда и наступит плезир и парадиз) чтоб пока Х+ нажат, некоторое время Х- еще поступал бы на вход.
еклмн! это ж принцип работы валкодера, при считывании импульсов с которого каким образом определяется в какую сторону он вращается.
вот пдфка. 10 страница - там осцыллограмма того что творится по квадратурным выходам.
https://docviewer.yandex.ru/?tm=1623...1cbc51&keyno=0
Теоретически, могу и осцил подключить. Как минимум, чтобы глянуть что разный софт шлёт на линию "сброс" реальной Марсианки...
Доброго времени товариши! И таки шо ? пол года минуло,.... Осцилограммы заливайте ?!?
- - - Добавлено - - -
А то не терпится уже БК с мышью, а марсианки на авито похоже дешеветь не будут,... ну по крайней мере пока ардуина не поможет подключить к БК PS/2 мышь...
Можно без особых запар подключить пассивную мышь по спектрумовской схеме, но это будет уже не "Марсианка" софтово и технически.
Основной минус "Марсианки" - в голом виде она не считает координаты, нужен сигнал сброса после их изменения. И это довольно часто нужно делать.
Себе вот паяю адаптер пассивной, опрашиваться будет как на Спектруме, 50 раз в секунду, на выходе изменения координат. Что намного лучше и экономичней.
Можно вообще не опрашивать, схеме все равно - координаты она в любом случае считает. Кто знаком со спектрумовским вариантом, поймет.
Не поклонних ПЛИСов, потому небольшая схемка на рассыпухе. Ничего сложного, да и ПЛИСы как-то не вписываются в ретро-тематику.
Не знаю, почему за столько лет не внедрили такой или похожий стандарт... вам реально удобно дергать драйвер по откату, чтобы следить за мышой? =)
Да, идея в целом хорошая, но после этого придется либо портировать спектрумовское П.О. на БК, или переписывать весь софт под БК для поддержки сего девайса..
- - - Добавлено - - -
Посмотрел внимательно на схему, действительно, "сброс" не просто так подается на Марсианку. Если после сигнала сброс - на выходе единицы - то движения нет, если сразу после сброса единица на... В обшем, чего тут кривляться, похоже, что БК снимает изменение направления сразу после прихода "сброса", потому что уже после прохода колесика через второе отверстие на Х-ВНИЗ И Х-ВВЕРХ будет два нуля, и толку от этого не много. Важно именно прохождение первого окна "колеса", только в этой ситуации есть разница, либо первым пройдет нижний диод, либо верхний.. По этому реально все это нужно учитывать.
- - - Добавлено - - -
Тут бы конечно еще ознакомиться с конструкцией оптопар и колеса,... без этого сложно понимать на самом деле что будет на выходе после того как механизм прокрутится в ту или иную сторону...
- - - Добавлено - - -
А без этого будет достаточно трудно заставить ардуино выдавать необходимую последовательность на "ПУ" ....
Может кто то снимет диаграммы работы мыши, по выводам мыши X-вниз, Х-вверх, Y-вниз, Y-вверх, сброс....
Честно сомневаюсь, что кто то это сделает, ибо те у кого есть "Марсианка" - ему не очень нужна PS/2 мышь, а те у кого нет Марсианки - тот и снять никакие диаграмы не сможет..
Может кто то сможет марсианку прислать на исследования ? Можно не рабочую, на восстановление ?
Ну, софта (игрушек) и так со Спектрума портировали довольно много =) Естественно, без мышиного управления, хотя и на Спектруме оно было нечастым гостем.
на БК да, придется, как минимум, менять драйвер мыши, причем банальная замена не поможет, т.к. совсем другая механика вызовов.
С другой стороны, в играх мышь для БК отсутствует, как таковая, а посему хуже не будет. При текущей реализации нисколько не удивился такому положению вещей.
Новые же игры/софт можно сразу писать с поддержкой нового девайса, главное договориться о стандарте, чтоб не клепать кучу несовместимых вариантов.
Преимущества управления мышью, думаю, в пояснениях не нуждаются. Даже в операционке (коммандере) она порой удобней, нежели клавиатура.
В общем, если по простому, с PS/2 мы получаем прирост или уменьшение числа координаты Y или X (от 127 до -127 помоему) - при помощи Ардуино, и по сигналу "сброс" нужно БК отдавать комбинацию например 0 на X-вверх и 1 на X-вниз, Y-вверх, Y-вниз если в некоторый предидущий момент c PS/2 поступили данные о том, что координата Х получила определенный прирост, а координата Y не поменялась... С приростом там все сложно, нужно экспериментальным путем выяснить, на сколько DPI "современной" PS/2 мыши больше DPI "Марсианки" - то есть возможно нужно защитывать прирост сразу 10 позиций с PS/2 как 1 позицию "Марсианки" и т.д.
ВОт примерно так я теоретически вижу алгоритм работы ардуино.
НУ а как это на практике реализовать, скорее всего понятно станет после того как тут кто то опубликует осцилограммы работы марсианки с БК, а точнее с "православным" приложением, которое поддерживает мышь на БК.
- - - Добавлено - - -
Диаграммы нужны еще и для того чтобы понять какая задержка и на сколько отдаются сигналы координат на порт БК. Это важно на ксолько я понимаю.
- - - Добавлено - - -
И еще, есть идея, на том же ардуино можно будет сделать механизм, для того чтобы управлять "мышью" при помощи "джойстика", то есть, реагировать не на приходящие координаты, а на управление направлением при помощи джоя...
Я прошу прощения, я пишу все это чисто теоретически, потому что у меня БК появилась только пол года назад, а уж про мышь и джойстик я узнал только пару дней назад, так что прошу сильно не пинать, а лишь для поднятия моего уровня понимания, за это буду только благодарен !
- - - Добавлено - - -
Тема очень интересна, потому что поняв, как подключить PS/2 мышь к БК - следом получится подключить PS/2 мышь к Агату, а этот аппарат мне тоже очень нравится, и хотелось бы его укомплектовать как пологается.. Так что, гарантирую большой жирный плюс к карме за любую помощь !!! XD
Блин, да всё просто там. 4 бита X+ X- Y+ Y-. При обнаружении движения туда нужный бит взводится. Передёргиванием бита в порту сбрасывается всё разом. Не нужно никаких хитрых теорий изобретать. Конвертор из PS/2 в это тривиален и очевиден. Можно на какой-нибудь ATTiny сделать или кому чего нравится.
Там два фотодиода на направление, один из них выступает тактирующим для обоих (+ и -) триггеров, второй работает только на (-), то есть с первым после резета тактом (+) в любом случае должен "взвестись", потому что его вход данных сидит на питании,... Следом, осветится второй фотодиод, и вполне возможно, что это совпадет с освещением первого (тактирующего) следующим отверстием, и тогда "взведется" и (-)... А если до того как пришел сброс - движение было и в + и в (-) то что взводится, тоже оба ? Вопросов много на самом деле, просто все, когда есть возможность посмотреть как работает осцилом или лучше анализатором... А у меня пока чисто теоретичнеская проработка, и в следствии того, что конструкция оптических датчиков мне не известна, у меня пока больше вопросов, чем решений.
Mein Gott ... А декодера на D5 ты не видишь?
Смотреть -- карандашом и тетрадкой. Карандашом и тетрадкой. Только так. Иначе никогда не поймёшь.
Причём тут конструкция фотодиодов? Изучай схемотехнику. Если ты не понимаешь работу схемы, то разберись с ней, а не теоретизируй. Иначе никак.
Там совершенно классический, до скукоты, квадратурный декодер. Они все такие. Эта схема есть в любом нормальном букваре. Один триггер ловит сам "щелчок", второй, одновременно, -- направление. Дальше декодер на элементах "И". Ну всё же просто совсем.
Да всё куда проще, не нужны никакие лог. анализаторы. Схема "Марсианки" примитивнаЦитата:
Сообщение от electroscat
и убогадо безобразия, выше уже расписали в деталях. Это называется пассивная мышка, такие подключались к Амигам, а потом и к Спектрумам, причём безо всяких переделок. Вот только на этих мышках сигнал сброса не требуется, с датчиков лишь отдаются сигналы в плюс/минус координат, а дальше уже заботы контроллера, что с этим делать.
Почему советские разрабы сделали свой, до ужаса примитивный вариант - непонятно, но уж как вышло. Для полноценной работы мышке нужно обслуживание в виде сброса координат, без него (сброса) можно лишь понять, что мышу двигали, и всё. То бишь с "Марсианкой" без доп. контроллера (например, для "Агата" таковой имеется) управлять мышкой приходится софтово, причём по откату. Не как на Спектруме, читая данные 50 раз в секунду (в общем случае) или на РС, где схожий принцип у PS/2 мыши. На БК драйвер вынужден, по сути, вызываться всё время, чтобы более-менее правильно интерпретировать движения мыши. Разумеется, в играх и прочем софте с нормальной загрузкой проца о таком варианте речи быть не может. Вот потому Марсианка и не прижилась, ибо без контроллера толку от неё чуть более, чем никакого.
Так что, пока не поздно, предлагаю внедрить как стандарт вариант спектрумовской Кемпстон-мыши с небольшими улучшениями. Два байта координат, X и Y, причём в виде смещения от предыдущего значения, плюс байт с данными трёх кнопок и колеса. В общем, почти тот же PS/2 формат в слегка упрощённом виде. Вся обработка ложится на контроллер, а в порт он выдаёт уже сформированные данные.
Сейчас приспосабливаю пассивную мышь от Спектрума, подключаться будет в порт УП. Плюс одновременно расширенный джойстик. Подробнее опишу позже, пока девайс в стадии "подопытный на макетке". Да и с одного лишь девайса народ не впечатлишь, нужна наглядная демонстрация возможностей через софт. Потихоньку занимаюсь, сырой вариант выкладывать не хочу, чтоб не получилась ещё одна " видеокарта Метеор" в стадии вечного строительства.
Да, увидел, спасибо ! Реально только либо (+) либо (-).
То есть, если так, то это работает как джойстик ? Или все таки чтение координаты происходит после сброса только ? Пока не могу понять, если она показывает направление на 4х битах порта, смысл тогда в сбросе ?
- - - Добавлено - - -
А зачем он тогда вообще нужен ? То есть, по факту, без сигнала сброса мышь работает как джойстик получается, а координатной она становится если снимать из порта данные только после сигнала сброса, тогда можно в конкретную единицу времени, обусловленную периодом сброса, получить изменение направления, так чтоли ?
Смысл сброса в разрешении указания новых изменений, если кратко и попроще. Повторюсь, но такая реализация весьма убога.
Исходно, пока мышу не трогают, везде нули. Куда-то сдвинули - появились единички, означающие, что мышь сдвинули. На сколько именно сдвинули - понять невозможно, фиксируется сам факт передвижения. И пока не произвести сброс, единички так и останутся. Хоть полчаса возите мышь - факт уже зафиксирован.
Отсюда и следует необходимость максимально частого опроса и сброса, если хотим добиться подобия управления мышью. Если же опрашивать её один раз в кадре (по прерыванию или после его процедуры) - мыша фактически превращается в джойстик. Само собой, пользы от такого девайса мало, если она вообще есть.
Может быть вы не в курсе, но изначально разработчиками мышки Марсианка было задумано, что она будет работать через блок КМ, а не непосредственно подключённая к УП. А через блок КМ она задумывалась работать по прерываниям. Вектор 0100 или 0270 выбирался перепайкой перемычки. Т.е. при движении или нажатии клавиши мыши генерируется прерывание, и драйвер обрабатывал результаты от мыши. Именно из-за этого и нужен сброс. Чтобы мышь не фигачила не нужных прерываний, когда их не получается обработать. В конце работы драйвера подавался этот сигнал мыши и снова можно было ожидать от неё прерывания.
Но т.к. блок КМ - крайне редкая, и для многих непонятная фигня, то на него забили, и мышь подключили напрямую. А обрабатывали сигналы от неё в прерывании от таймера 50Гц на БК11, тоже получается примерно 50 раз в секунду.
В курсе, в курсе, доки по мышке читал. И могу сказать, что прерывания от мыши - ещё более убогая затея, нежели программно опрашивать порт. Чем быстрее "везут" мышу - тем больше прерываний обрабатывать, а каждая обработка это, во-первых, затраты процессорного времени, коего на ВМ1 и так не вагон, а во-вторых, прерывание портит стек, и прога не сможет его использовать как регистр, что делается не так уж и редко. Если же забить на прерывание от мыши (запретить) - имеем все шансы пропустить часть сдвигов, и чем больше "пауза", тем хуже. Ну и зачем такое убожество нужно? Поэтому блок КМ - лишь довесок навроде пятого колеса, в реальности бесполезный.Цитата:
Сообщение от gid
Угу, в результате и получаем имитацию джойстика, тоже опрашиваемого 50 раз в секунду. Без учёта скорости движения мыши. Либо был сдвиг на единицу, либо нет. Смысл дублировать джойстик?Цитата:
Сообщение от gid
Да вроде не дурак, в рассыпухе, в отличие от ПЛИСов, разбираюсь =) Специально выше писал про переделку софта, а также контроллер. Схемка простая, несколько корпусов рассыпухи - по сути, аналогична спектрумовской за вычетом обработки сигналов процессора, поскольку УП уже готовый порт ввода-вывода, и схема даже проще, чем для Спектрума. Но если кому-то нравится пользоватьсяЦитата:
Сообщение от Sandro
резиновой бабойимитацией джойстика вместо полноценного девайса - я не против. Их право.
В новый же софт вставить драйвер и выбор типа мыши вообще не проблема, и чем раньше это начнётся, тем лучше.
Для electroscat под Агат, между прочим, есть вменяемый "родной" олдскул контроллер под Марсианку, если интересует работа на нём. Почитать про него и мышу можно на сайте по Агатам: http://agatcomp.ru/agat/Hardware/Key_Joy/MouseUVK.shtml там и схемы, и все техническо-софтовые подробности. Другое дело, что сейчас и мышка, и сам этот контроллер перешли в разряд музейных эспонатов. Но контроллер можно спаять самому из той же рассыпухи, что и исходный, а вот где взять пассивную мышку... довольно легко переделываются шариковые PS/2, если у кого завалялись. А главное - под этот контроллер на Агате есть софт. В отличие от БК. Для него либо работа через прерывания и блок КМ, либо имитация джойстика. И то, и другое напоминает приём душа в водолазном костюме.
Можно же опрашивать нормально, а не раз в кадр. Весь опрос -- BIT+BNE, это около полусотни тактов. Примерно четверть экранной строки. Мелочи. Можно хоть каждую десятую строку опрос делать, отъест страшные 2,5% процессорного времени.
И, кстати, что значит -- "прерывания портят стек", с чего бы это? И что значит "использовать стек, как регистр"? Если речь идёт о ячейке на вершине стека, @sp, то ничего ей не делается.
- - - Добавлено - - -
И ещё: к Марсианке можно приделать переходник на реверсивных счётках с сохранением совместимости с оригинальным интерфейсом. Который будет снимать проблему с потерей импульсов.
Про Агат я в курсе, там идея шире, реализовать на одной плате контроллер мыши от Nippel и часы реального времени, и чтобы не отходить от стандартного решения, тоже желательно получить эмуляцию "марсианки"... Работать это правда будет только на Агате 9, т.к. за основу возьмется контроллер от Nippel, и часы от них же, а все это только на А9 работает. Да и в целом, я на Агате 7 не видел ни одного приложения с использованием мыши, а для Агат 9 много.
Меня все таки пока устроит варант с эмуляцией марсианки из PS/2 мыши, это гораздо быстрее реализовать, и полезно будет и для БК и для Агата.
Можно, вот только в реальной программе, загружающей проц, скажем, игра с кучей графики либо прога с активными расчетами, проблематично вырывать проц из середины таких вычислений/процедур. Это не вывод курсора мышки раз в кадре и последующий "афк" с циклическим опросом, пока проц ничем другим не занят. Прерывания от мыши решают эту проблему, но возникает другая, со стеком:
Вот это и значит. На БК можно юзать SP не по прямому назначению, а в качестве обычного регистра, если стандартных R0-R5 не хватает. Да, это требует запрета прерываний или, как минимум, кусок кода должен успеть восстановить SP до их прихода. Что вполне реально между 50Гц кадровыми, но в случае непредсказуемых мышиных прерываний невозможно. А применяется такой приём не так уж и редко. В основном, конечно, в демках, но что мешает задействовать SP в играх, если это ускорит работу? В таком случае опрос мыши допустим только по КС, что в случае Марсианки фактически лишено смысла.Цитата:
Сообщение от Sandro
Так это и планируется, чтоб имеющие оригинальную мышь могли её превратить в "кемпстон-мышь", пусть и с некоторыми потерями (нет колеса скролла и лишь две кнопки вместо трёх). Собственно, моя схема и есть набор счётчиков плюс кой-какая логика, обычная пассивная мышь от Амиги/Спектрума работает в ней напрямую. Для Марсианки же придётся добавить формирователь сброса после "двига" мышой, в остальном схемы идентичны. Если бы для БК сразу сделали такой контроллер, наподобие Nippel Card для Агата, сейчас не пришлось бы изобретать велосипеды по даунгрейду PS/2 мышей в убогое поделие под названием УВК.Цитата:
И ещё: к Марсианке можно приделать переходник на реверсивных счётках с сохранением совместимости с оригинальным интерфейсом. Который будет снимать проблему с потерей импульсов.
Как вариант закоса под оригинал - да, имеет право на жизнь. Но по функционалу я уже прошелся =)Цитата:
Сообщение от electroscat
Народ просто не понимает всей выгоды, что объяснимо, т. к. пользовались лишь тем, что было. Это как у Жванецкого: "для советского гражданина, не носившего импортные ботинки, и наши ботинки - вот такие! " (большой палец вверх)
Цена копии "марсианки" и скорость ее изготовления на несколько порядков ниже новой версии мыши как для БК так и для Агата. Не заю как на БК, а на агат точно никто софт править не будет, в сообществе фанатов Агата все очень архаично и консервативно, по этому там лучше просто повторить реальные девайсы, максимум используя для них мышь PS/2. На счет БК судить не берусь, но вроде у БК программеров и без того заделы на будущее необьятные, вряд ли они горят желанием вставлять новые драйвера в софт из прошлого. Ну и по Жванецкому, если "наши" ботинки можно купить с зарплаты несколько пар, а на "импортные" копить десять месяцев,.... При всем при том, что и в "наших" и в "импортных" в целом ходить реально, примерно с такой же скоростью и с такими же усилиями... то возникает вопрос, зачем нужны импортные ?!?
- - - Добавлено - - -
Попробовал скомпилить скетч из первого сообщения под NodeMcu V3 - другого ничего нет... И не завелось. Не знаю в чем проблема, есть подозление что ардуино подпорченное, ибо 6,7,8 и 11 пинами не смог управлять при проверке (запускал на каждый из пинов меандр, типа помигать диодом, перебором пинов при компиляции, когда компилил на 6,7,8 и 11 пины такой же эффект как при запуске "перепининного" скетча для эмуляции Марсианки, раз в секунду в ком порт выводится информация и все.., когда меандр выводится, то есть программа работает - в COM информация не выводится.), програмки которые должны были выводить на эти пины меандр, не завелись. В целом, я вообще не специалист по ардуино, это вторая поделка на платформе, и первая не завелась, точнее не заработала как следует,. По этому таки подозреваю, что моя платка не исправна.
Из этого возникает вопрос, предже всего наверное к автору темы, под какую ардуину писался скетч ? То есть, какой наиболее подходящий девайс заказывать под опубликованный скетч ?
Прошу прощения за оффтоп, наверное нужно к ардуинщикам обратиться )))
Не мешают. Кстати, я посчитал. Проверка на движение мыши занимает 64 такта и ноль регистров.
Можно. Но редко нужно. Хотя я совсем недавно так делал. Кстати, без запрета прерываний и гонки с лучом. А потом переписал так, что остались свободные регистры и стало быстрее. Так что этот частный случай не являетсся серьёзным аргументом.
Что вполне реально между 50Гц кадровыми, но в случае непредсказуемых мышиных прерываний невозможно. А применяется такой приём не так уж и редко. В основном, конечно, в демках, но что мешает задействовать SP в играх, если это ускорит работу? В таком случае опрос мыши допустим только по КС, что в случае Марсианки фактически лишено смысла.
Не это. Кемпстон не нужен. Можно отложить чтение мыши на попозже, совсем нехитрым способом. И не изменяя ни строчки в софте.
Всё это замечательно, но каким образом вставлять сей опрос внутрь некоего куска кода, работающего значительный период времени, причём со всякими ветвлениями и прочим, что не позволяет уповать на более-менее частую и равномерную проверку? Смысл схемы со счётчиками именно в уходе от проверки, как таковой. 50 раз в секунду (или даже реже, зависит от выдаваемого программой fps) из порта читаются значения - и всё, зачем эти проверки?Цитата:
Сообщение от Sandro
Только за тридцать лет почему-то никто это не осуществил.Цитата:
Сообщение от Sandro
Имею в виду полноценную мышь, а не УВК.
Ну и где же они, дешёвые мыши для БК, наводнившие рынок? Кто-то ведь сам писал, что цена на оригинал кусается, а альтернативных предложений нету. Отчего и приходится изобретать адаптеры писишных мышей.Цитата:
Сообщение от electroscat
Если бы было дёшево и быстро - оригиналы бы не стоили по 2 тыщи :)
Плюс цена разъёма СНП, не в воздухе ж оно будет висеть возле компа =)) вполне вариант, почему б нет.
Внизу страницы, где предложения схожих тем, есть топик об адаптере PS/2 мыши для Коммодора. Тема аж 2009 года, устройство уже тогда было. Неужели Коммодор, который ни я, ни кто-либо ещё из друзей-знакомых в моём городке в глаза не видел, популярнее БК?
Да, с моей ардуинкой что то не так, на всех распиновках пины 6,7,8,11 присутствуют, и должны использоваться, а в моей их нет, и по мимо этого, вместо того который по схеме 6й - работает скетч, скомпилированный на 10 пин.. В общем, закзал несколько Arduino Nano, они максимально близки к оригиналу, оригинал был на Меге 328p. Получу - продолжу исследования. Покупать в россии по 600р - то что можно купить в китае за 350 - не намерен, подожду пару - тройку недель... И понятно стало теперь, почему не завелся предидущий проект, проверяйте соответствие "пользовательских" пинов на китайских платках ))
Пришли ардуинки, скомпилил скетч, чутка его по пинам переделал, ну то такое.. Ввел резет в ардуино, но пока с ним ничего не делаю. А придется. Ибо мышь, скорее всего из за отсутствия координации с БК имеет всего 3 положения по вертикали и 5 по горизонтали. Ну и по факту работает примерно как джойстик, только джойстик имеет одно по факту положение по горизонтали и вертикали, из за того, что я не могу так быстро нажать и отжать его по оси )))... Прилагаю видео сего факта (мыши из ардуино), и прошу немного направить... Вопрос в чем, вот приходит на марсианку резет, сбрасывает триггеры в ноль. В этот момент происходит перемещение, содержимое триггеров меняется, и сохраняется таким до следующего резета, правильно я понимаю? Или например, движение в другую сторону может поменять содержимоне триггеров и без резета? Ну и сам драйвер мыши на БК, как он работает? Вот он послал резет, и сразу после этого снимает биты порта, и потом не обращается в порт до следующего резета, или как то по другому? Может кто то подробненько и кратенько помочь ?
Ссылка на видео о работе мыши тут...
- - - Добавлено - - -
На сколько я понимаю, нужно по сигналу резет создать прерывание, по которому нужно сбросить выходы X+\- и Y+\- в нули, и следующим шагом дать туда текущее значение снятые с мыши, и потом до следующего резета все это зафиксировать? Правильно я понимаю ?
Исходя из схемы - все четыре направления (вверх/вниз/влево/вправо) могут быть активированы одновременно.
То бишь повозив мышу без ресета, получим четыре единички, и корректная процедура опроса, получив такие "координаты", курсор вообще двигать не станет.
На практике же это маловероятно, т.к. частота опроса куда больше, чем физическая реальность успеть дернуть мышу в обе стороны между сбросами.
Ну, начать стоит с разделения на опрос по прерыванию от мыши (через блок КМ) и без прерывания. Какой вариант планируется эмулировать?
Если с прерыванием от мыши - вызов драйвера означает, что мышь сдвинули. Читаем данные и следом посылаем сброс. Все, диалог с портом окончен (упрощенно).
Если без прерывания от мыши (по таймеру или другим способом) - читаем данные и посылаем сброс, только если есть изменения (был сдвиг).
Иначе постоянный сброс (дерганье бита в порту) будет создавать пищание в ковоксе на тех машинах, где он подключен.
Не совсем. Прерывание возникает по факту сдвига мыши (вариант с подключением через КМ) или не возникает вовсе (напрямую в порт УП).
Вызванный прерыванием или другим способом драйвер должен считать данные, обработать, послать сброс в порт, если было прерывание, - либо см выше.
Обратно ничего посылать не нужно, это физически разные порты. Да, есть блок нагрузок для замыкания, но с ним мышь вообще не заработает, насколько понимаю.
Все это мысли теоретика, ибо вживую с мышью не работал =)) Но освоенная информации по БК дает повод думать, что все изложено верно.
И еще: шина в БК инверсная, то бишь единички это ноли и наоборот. Как на входных портах, так и на выходных. Думаю, это тоже важно.
Спасибо за ответ ! В целом, теоретически понятно. На практике, сделал чтение резета, и когда он LOW - сбрасываю все в "1", причем читаю получается сразу после прихода резета, а потом, до следующего резета ничего не делаю... Чуть плавнее стало, но тем не менее, поставить курсор на нужную строку сложновато, хотя и возможно... Из вышесказанного понимаю, что резет - это не причина а следствие, в варианте без КМ, то есть, как только БК приняла данные из порта - она сбрасывает мышь.
Пока что я рассматриваю вариант без КМ как более простой. Но в целом, я за качественный вариант, нежели за простой. На данный момент хочу просто понять как это работает. А уже потом как это реализовать в дальнейшем, будет понятно после того как пойму что происходит. На Агате вариант более сложный, со счетчиками и прерыванием. Думаю что и на БК к тому же придет. Хотя и на Агате есть более простой вариант, подключение "на прямую" через порт принтера, именно с этого начну исследования на Агате. То есть, можно сказать, неверенные первые шаги эмуляция Марсианки сделала.. Осталось теперь научить ее ходить ровно, а потом уже понятно станет, что даьше.
- - - Добавлено - - -
Я тоже в живую не видел никогда мышь ни на чем, кроме PS/XT - и выше.... То есть, как это долдно быть я не знаю, может оно и должно с трудо на нужную строку наводиться. Показал бы кто нибудь плавность движния реальной марсианки, было бы круто !
- - - Добавлено - - -
В целом, многие игры, при использовании мыши как джойстика, очень даже адекватно управляются. Прям очень хорошо. Некоторые резет или отключают, или очень круто затормаживают, в таких естественно управления либо нет, либо очень тормозное.
Предполагаю, что оболочка в которой я на видео тестил мышь, не очень с таким типом мыши работает,... В общем, местами очень даже неплозо все работает.
Посоветуйте в каких программулинах потестить мышь ?
Ну и следующая проверка будет уже на Агате, через порт принтера, для начала.
- - - Добавлено - - -
Вот еще чутка видео о работе зверька...
- - - Добавлено - - -
И кстатти, в менеджере файлов scidos в котором я тестил мышь, "ресеты" приходят достаточно редко, в сравнении с другими программами, от сюда и тормознутость курсора.. Предполагаю, что оболочка написана под работу с КМ... А в следствии отсутствия прерываний от мыши, резет дается по минимуму.. Естественно, не претендую на истину, предполагаю...
Не буду повторяться, ранее в топике уже расписывал про странную реализацию мыши на БК, но именно в силу реализации она как джойстик и работает хорошо.
Плавные движения, возможно, смогут продемонстрировать программы для мыши под блок КМ (с опросом по прерыванию). При условии корректного вывода курсора.
А он возможен только на БК11(М), на десятке достичь плавного фреймового _неморгающего_ курсора с мышью по прерываниям, считаю, невозможно.
Точнее, извращаясь с таймером и подстраивая паузу на фрейм, в принципе, можно и на десятке это сделать, но смысл? Любая программа это не только опрос ради опроса.
Вот скетч для ардуино, лапки в скетче описаны:
Скрытый текст
/*
BK-PS2-MARS-Mouse-host by TheGWBV, 29/08/2020, Step 2.
Free for exUSSR users and all others ;-)
*/
const int ResetPin = 4; // номер вывода с Reset
int ResetState = 0; // переменная для чтения состояния Reset
#include <ps2.h>
#include <SoftwareSerial.h>
// Джойстик-шар мыши Марсианки
#define marsUP 7
#define marsR 9
#define marsDn 8
#define marsL 10
// Кнопки мыши Марсианки
#define marsLB 2
#define marsRB 11
/*
*
Пины для UART/ТЛГ:
RX is digital pin 1 (connect to TX of other device)
TX is digital pin 3 (connect to RX of other device)
*/
SoftwareSerial TLG_soft_Serial(0, 1); // RX, TX
/*
Used an arduino sketch to interface with a ps/2 mouse.
Also uses serial protocol to talk back to the host
and report what it finds.
*/
/*
Pin 13 is the mouse data pin, pin 15 is the clock pin
Feel free to use whatever pins are convenient.
*/
PS2 mouse(6, 5); // 6 - clock, 5 - data
/*
Initialize the mouse. Reset it, and place it into remote
mode, so we can get the encoder data on demand.
*/
void mouse_init()
{
mouse.write(0xff); // reset
mouse.read(); // ack byte
mouse.read(); // blank */
mouse.read(); // blank */
mouse.write(0xf0); // remote mode
mouse.read(); // ack
delayMicroseconds(100);
}
void setup()
{
/*
Аппаратный UART подключаем к ПЭВМ... с эмулятором БК-шки, и/или прочим софтом для связи по UART
*/
Serial.begin(9600); while (!Serial); // wait for serial port to connect. Needed for native USB port only
/* Пины для UART/ТЛГ:
RX is digital pin 2 (connect to TX of other device)
TX is digital pin 4 (connect to RX of other device)
Можно подключать к ТЛГ БК0010 или к псевдо-ТЛГ на БК0011М (для этой модели ТЛГ заводом не предусмотрен!)
*/
TLG_soft_Serial.begin(9600); // Open software serial communications and wait for port to open
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH);
// BK Marsianka output: 2 - marsLB, 3 - marsRB, 7 - marsUP, 9 - marsR, 8 - marsDn, 10 - marsL.
// Джойстик-шар мыши Марсианки
pinMode(marsUP, OUTPUT); digitalWrite(marsUP, HIGH); // Вверх
pinMode(marsR, OUTPUT); digitalWrite(marsR, HIGH); // Вправо
pinMode(marsDn, OUTPUT); digitalWrite(marsDn, HIGH); // Вниз
pinMode(marsL, OUTPUT); digitalWrite(marsL, HIGH); // Влево
// Кнопки мыши Марсианки
pinMode(marsLB, OUTPUT); digitalWrite(marsLB, HIGH); // Левая кнопка
pinMode(marsRB, OUTPUT); digitalWrite(marsRB, HIGH); // Правая кнопка
mouse_init(); // Инициировать мышь PS/2
}
/*
считываем данные с мышки и выводим в COM-порт
*/
void loop()
{
char mStat;
char mX;
char mY;
uint16_t reg_177714;
/* запрашиваем данные от мышки */
mouse.write(0xeb); // команда на чтение данных
mouse.read(); // игнорируем ack
mStat = mouse.read();
mX = mouse.read();
mY = mouse.read();
ResetState = digitalRead(ResetPin);
if (ResetState == LOW)
{
Serial.print("\t+Сброс");
digitalWrite(marsR, HIGH);
digitalWrite(marsL, HIGH);
digitalWrite(marsUP, HIGH);
digitalWrite(marsDn, HIGH);
//digitalWrite(marsLB, HIGH);
//digitalWrite(marsRB, HIGH);
Serial.println();
}
else /* ----- */
{ /* ----- */
// Вправо
if ( mX > 1 )
{
Serial.print("\t+Вправо");
digitalWrite(marsR, LOW);
}
else
{
Serial.print("\t-");
digitalWrite(marsR, HIGH);
}
// Влево
if ( mX < -1 )
{
Serial.print("\t+Влево");
digitalWrite(marsL, LOW);
}
else
{
Serial.print("\t-");
digitalWrite(marsL, HIGH);
}
// Вверх
if ( mY > 1 )
{
Serial.print("\t+Вверх");
digitalWrite(marsUP, LOW);
}
else
{
Serial.print("\t-");
digitalWrite(marsUP, HIGH);
}
// Вниз
if ( mY < -1 )
{
Serial.print("\t+Вниз");
digitalWrite(marsDn, LOW);
}
else
{
Serial.print("\t-");
digitalWrite(marsDn, HIGH);
}
/* выводим данные на аппаратный UART */
Serial.println();
Serial.print(mStat, BIN);
Serial.print("\tX=");
Serial.print(mX, DEC);
Serial.print("\tY=");
Serial.print(mY, DEC);
Serial.println();
//delay(10);
// BK TLG UART run over and over: for USB-Com <-[data]-> BK-TLG-UART
if ( TLG_soft_Serial.available() ) {
Serial.write(TLG_soft_Serial.read());
digitalWrite(LED_BUILTIN, HIGH);
}
if ( Serial.available() ) {
TLG_soft_Serial.write(Serial.read());
}
} /* ----- */
if ( mStat & 0x01 )
{
//Serial.print("\t+ЛевКн");
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(marsLB, LOW);
}
else
{
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(marsLB, HIGH);
}
if ( mStat & 0x02 )
{
//Serial.print("\t+ПравКн");
digitalWrite(marsRB, LOW);
}
else
{
digitalWrite(marsRB, HIGH);
}
}[свернуть]
- - - Добавлено - - -
Может тут кто чего посоветует ?!?
Поигрался с разными вариантами обсчета, в итоге, оставил все это без обсчета. Принимать резет в целом действительно нет надобности, ибо резет требовался конструкцией марсианки, ее нужно было сбрасывать, и если резета не было, то она могда насобирать все 4 нуля на все 4 направления... Так и есть. Я попробовал разные комбинации, и самой актуальной и ровной оказался вариант без обработки, так что автору этой ветки форума респект и уважуха !
Скетч практически бех изменений работает максимально хорошо. Думаю на этом останавливаться не стоит, в идеале сделать КМ, если получится, то его реально сделать непосредственно в той де ардунке, которая опрашивает мышь PS/2. причем, можно сделать вариант, который будет работать и как Марсианка через КМ и как марсианка через УП, туда же можно и джой замешать, родной, и так его замешать, чтобы когда нужна мышь, джой был мышью, когда нужен джой - он был джоем... Такую универсальную коробочку для УП было бы круто сваять..
Вот тут видео с последним скетчем, в досе чуть по лучше, но не юзабельно в целом, а вот в программах, которые ждут именно мыши УП - все четенько..
Ссылка на видео,... вот.
Да, артефакты есть, это FCPGA в моем AZ-БК перегрелся. Имеет место брак микросхемы, микросхема жутко греется и через пол часа артефакты по всему эрану... Это не правило, а исключение, уже договорились о замене. Мне всегда везет на подобные штуки )) Раньше разбирал корпус и ставил вентилятор, на самой микросхеме уже радиатор. Даже если просто корпус открыть, уже по легче, но в следствии того, что на столе разные подключенные платы, ардуины и т.д. - решил закрыть таки корпус,.
- - - Добавлено - - -
Переделал скетч к ардуино, в кратце, БК не принимает диагональные комбинации портов, то есть движение мыши по диагонали весьма корявое. Сделал математику, когда есть диагональное направление, оно заменяется чредованием X/Y/X/Y - и получаются очень плавные мкольжения по диагонали ))))