Просмотр полной версии : Адаптер мыши PS/2 в стандарт мыши Марсианка
Всем, привет! :)
Вот и готова альфа-версия софта под ардуины для реализации адаптера BK-PS2-MARS-Mouse-host.
Все полезные файлы для этого проекта лежат в этом архиве: https://my.oblako4u.ru/index.php/s/NQfHrGBPaCQAd27
Думаю, что желающие смогут без особых проблем подключить такой адаптер и к УК-НЦ (см. стр.4 пдф-ки) (https://yadi.sk/i/412JBrTVeDtgx).
Промо-ролики...
1) https://www.youtube.com/watch?v=xn_n22EVyXo
2) https://www.youtube.com/watch?v=AZ7U8Wl0pNY
Также код поддерживает софт для работы с линией ТЛГ (желающие его легко вырежут при необходимости).
Сигнал стробирования, исходящий от БК-шки не используется, так что...
>> Там ещё фигня такая - чтобы мышь марсианка что-то выдавала, в неё нужно записывать число 10, это строб данных, после которого мышь выдаёт новые данные. А это опять несовместимость с ковоксом и с блоком нагрузок.
>Так ведь &o10 пишет сама программа, которая просит коды мыши. В CSIDOS это число постоянно пишется в регистр, поэтому ковокс и пищит. Как-бы всегда так было, вроде никто не жаловался. Говорят это даже лечится вроде как конденсатором (я не специалист, могу соврать)
...Теперь эта "проблема" почти решена -- если заменить в коде программ места где производится Стробирование и использовать такой ардуино-адаптер :)
P.S. Сама пока протестить на аппаратуре не могу... Получится не раньше 05.09.2020... БК-шка и исправная УК-НЦ вдалеке от меня...
Круто, дело очень полезное! Особенно радует, что в Covox теперь не надо посылать утомляющий писк.
Ещё бы сделать этот конвертер в виде маленькой платки... типа такой http://www.caro.su/msx/mous4msx.htm
Круто, дело очень полезное! Особенно радует, что в Covox теперь не надо посылать утомляющий писк.
Ещё бы сделать этот конвертер в виде маленькой платки... типа такой http://www.caro.su/msx/mous4msx.htm
Ни одной платки в своей жизни не развела :)
Кесарю - кесарево, а слесарю - слесарево =)
Но, думаю, лучше вместе с Covox-ом на одной плате это разместить... Хотя, уже в AZ обещан ковокс, и это не так принципиально - лучше в AZ добавить такой адаптер... Он, кстати, и Джойстик ps/2 переварит - осталось только сам джойстик такой сделать :)
- - - Добавлено - - -
P.S. Можно попробовать вот такую платку использовать для компактности https://iarduino.ru/shop/boards/piranha-pro-mini-bez-nog.html
Для "Звонка на Н1806ВМ2" можно написать прошивку - там 8 бит на вход и 8 бит на выход + прерывание на 100 ( и 250 тоже - с INIT ) вектор, 5.5 мгц = 1.24 млн рег-рег.
Для "Звонка на Н1806ВМ2" можно написать прошивку - там 8 бит на вход и 8 бит на выход + прерывание на 100 ( и 250 тоже - с INIT ) вектор, 5.5 мгц = 1.24 млн рег-рег.
Думаю, что не проблема (для меня) расковырять библиотеку PS2 для ардуино, и написать аналогичное под Н1806ВМ2 на ассемблере :)
В PS/2 поток данных порядка 30+ Кбит, но с внешними синхроимпульсами.
Господин Kisser советовал синхро посадить на прерывание, например 100 вектор, и далее вычитывать бит данных.
Хотя я делал и чисто программную вычитку пакетов PS/2 - для клавы.
По быстродействию - ИМХО - БКшка и близко не справится с программным приемом посылок PS/2. МС1201.02 - возможно, для чего можно использовать биты порта принтера - там как раз вроде есть 2 свободных бита готовности и ошибки ( на вход ).
СОЗУ в Звонке - 1000 ( 8 ) байт, в адресах 0....000776. Адрес пуска ПЗУ - 002000 ( 8 ).
думаю, лучше вместе с Covox-ом на одной плате это разместить...Можно сюда: http://hardware.thesands.ru - там и стерео-Covox, и два геймпада.
http://hardware.thesands.ru/joyvox01.jpg
В PS/2 поток данных порядка 30+ Кбит, но с внешними синхроимпульсами.
Господин Kisser советовал синхро посадить на прерывание, например 100 вектор, и далее вычитывать бит данных.
Хотя я делал и чисто программную вычитку пакетов PS/2 - для клавы.
По быстродействию - ИМХО - БКшка и близко не справится с программным приемом посылок PS/2. МС1201.02 - возможно, для чего можно использовать биты порта принтера - там как раз вроде есть 2 свободных бита готовности и ошибки ( на вход ).
СОЗУ в Звонке - 1000 ( 8 ) байт, в адресах 0....000776. Адрес пуска ПЗУ - 002000 ( 8 ).
А адрес 8-битного порта какой? :)
- - - Добавлено - - -
Можно сюда: http://hardware.thesands.ru - там и стерео-Covox, и два геймпада.
Ага. Уже присматривалась к этой штуковине... Думаю, надо брать и пиранью к ней пристраивать :)
А адрес 8-битного порта какой?
https://zx-pk.ru/threads/30848-dvernoj-zvonok-na-n1806vm2-ne-melkikh-is-s-muzprotsem/page3.html
Сейчас смотрел схему - по записи порт 177714 ст. байт, по чтению - порт 177714 старший байт. Обращение только к словам.
На мл. байте 177714 сидит музпроц.
На мл. байте 177716 - Ковокс 8 бит.
SuperMax
30.08.2020, 15:15
Ни одной платки в своей жизни не развела :)
Кесарю - кесарево, а слесарю - слесарево =)
Но, думаю, лучше вместе с Covox-ом на одной плате это разместить... Хотя, уже в AZ обещан ковокс, и это не так принципиально - лучше в AZ добавить такой адаптер... Он, кстати, и Джойстик ps/2 переварит - осталось только сам джойстик такой сделать :)
- - - Добавлено - - -
P.S. Можно попробовать вот такую платку использовать для компактности https://iarduino.ru/shop/boards/piranha-pro-mini-bez-nog.html
в AZ будет COVOX - те есть возможность считать то что пишется в 177'714
а вот отправить что-то из этого регистра не получится тк настоящий 177714 будет тоже отвечать на шине
ps: а развести печатку это легко и быстро ;-)
ps: а развести печатку это легко и быстро ;-)
Тогда, как проверю код на реальной машинке, можно будет подумать о втором этаже для JoyVox-a :)
- - - Добавлено - - -
Думаю, получится и АЦП ардуины прикрутить к порту УП :)
TheGWBV, выпроси у Манве посадочное место под ардуинку на джойвоксе
такой себе процессор ввода вывода для бк)
можно вместо ардуинки только чипчик Атмегу328
TheGWBV, выпроси у Манве посадочное место под ардуинку на джойвоксе
такой себе процессор ввода вывода для бк)
можно вместо ардуинки только чипчик Атмегу328
Тогда уж надо брать с запасом - ATmega1284P
https://iarduino.ru/shop/boards/piranha-ultra.html
почти на все задумки с портом УП его хватит :)
- - - Добавлено - - -
Ультра даже уже у меня есть. Так что бета-версия УПортного сопроцессора не за горами :)
TheGWBV, можно прям в дип копусе
https://www.chipdip.ru/product/atmega1284p-pu-2
) ну типа одной крови с бк
TheGWBV, можно прям в дип копусе
https://www.chipdip.ru/product/atmega1284p-pu-2
) ну типа одной крови с бк
Вот Вы искуситель то)) Тогда две таких надо, чтобы ARM не ставить :)
Вот и готова бета-версия софта :)
Пока протестила только на одном входном штыре БК-шки, который используется как линия приема в эмуляторе ТЛГ на порту 177714.
Обнаружила, что эта линия у меня на холостом ходу выдает "1" вместо "0" как другие. Но при подаче 5В от сигнального штыря ардуины показывает "0", как и положено. Насколько это трагично для приборов БК-ашки?
В общем, удалось тщательно протестить функцию приема-передачи файла между БК и РС по UART на скорости 14400 бод -- beta2-версия софта тут (https://my.oblako4u.ru/index.php/s/okXJe5xALGQQEe6)
Все пины адаптера мыши к УП пока не подключала... Потому что не знаю насколько безопасно подключать пины ардуины напрямую к входным штырям порта УП. Просвятите, плиз, как это сделать корректно :)
А так, софт должен работать в полном объёме...
Промо ролик к этому этапу :)
https://youtu.be/ThNCLMEQp9A
В архив beta2 добавлено Описание работы с ТЛГ/UART и пара проверенных моделей мышек, совместимых с кодом адаптера...
Через какой-нибудь резистор, вроде, можно подключить :) Специалисты, ау!
ау!
Пожалуйста, напишите конкретный бит и адрес порта, который не соответствует исправной БК.
А лучше - участок схемы.
Пожалуйста, напишите конкретный бит и адрес порта, который не соответствует исправной БК.
А лучше - участок схемы.Вопрос не в этом, а как с Ардуины посылать +5 вольт на ножки УП-порта БК. Напрямую или через резистор какой
а как с Ардуины посылать +5 вольт на ножки УП-порта БК
Если Ардуина питается прямо от порта БК ( линии питания +5в. БК и Ардуины соединены ) - можно напрямую на вход и выход.
Если БП разные - это вопрос....
( можно по счету "2" спалить все полупроводники ).
Вообще, если общие провода БК и Адруины соединены крепко и никогда, ни при каких обстоятельствах не разомкнуться - можно подавать на вход УП БК ( ИС 555ИР23 ) сигнал +5в. даже при отсуствии питания БК - но это запрещенный режим, т.к. 555ИР23 работает за гранью ТУ.
Насчет подачи сигнала +3.6 в. из 555ИР23 ( БК11М ) в Ардуину при выключенной Ардуине - есть некотрый шанс её прожечь, если только в разрез этой цепи не воткнуть резистор ом так 200....470 ( он ограничит ток через защитный диод внутри Ардуины ) - но это тоже за гранью допустимого.
Ис М533ИР23 в Антелкоме по 50 руб ( керамика никель, замена 555ИР23 ) :
http://www.antelcom.ru/index.php/sklad/testovaya-stranitsa15
Мысли на будущее...
Использование штырей МК ATmega1284P
"""""""""""""""""""""""""""""""""""
Порт D : PD0, PD1 - Последовательный (аппаратный) порт для связи МК с PC;
PD2, PD3 - Последовательный (аппаратный) порт для связи, например, по UART/Bluetooth;
PD4, PD5 - PWM-ы (пока ещё свободны или Интерфейс порта мыши PS/2);
PD6, PD7 - Мл. биты регистра порта ввода БК.
Порт C : PC2..PC7 - Старшие биты младшего байта порта ввода УП БК0010/11М. PC0, PC1 - Шина I2C.
Порт A : PA0,PA1,...,PA7 - Для подключения младшего байта регистра порта вывода УП БК0010/11М.
Порт B : PB4..PB7 - Шина SPI (master); PB0..PB1 - Интерфейс порта мыши PS/2 (если возможно);
Порт B : PB2, PB3 - сигналы управления. Для PB2(2/Rx): 0 - выбор виртуального устройства и его регистра,
1 - передача (запись) данных (байта) в регистр виртуального устройства (согласно протокола),
в котором биты поделены так: ddddRRRR, где dddd (биты 7..4) -- номер вирт. устройства, а
RRRR (биты 3..0) -- номер регистра виртуального устройства.
PB3(3/Tx): 0 - Используется для подачи в БК сигнала ДАННЫЕ ГОТОВЫ. 1 - НЕТ ДАННЫХ (байта) для БК.
Подтверждение приема байта производится записью сигнала БАЙТ ПРИНЯТ, в регистр соответствующего устройства.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0000.0000 Выбор устройства адаптера мыши "Марсианка" (используется/работает по-умолчанию).
0 0000.0000 Очистка регистра вывода порта УП БК.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0001.0000 Выбор устройства последовательного интерфейса UART, например, для связи с PC.
0 хххх.хххх Запись байта в регистр данных UART.
1 0001.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0001.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на UART.
1 0001.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 0001.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0010.0000 Выбор устройства последовательного интерфейса UART, например, для связи по Bluetooth.
0 хххх.хххх Запись байта в регистр данных UART.
1 0010.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0010.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на UART.
1 0010.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 0010.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0011.0000 Выбор шины SPI для работы с видеоАдаптером "EMT16 - Эмулятор ТВ-драйвера БК0010(-01)".
1 0011.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 0011.0100 Выставить на шину сигнал SS для начала сеанса связи. Ардуино начинает ждать байты от БК.
...
1 0011.0000 Выбор устройства SPI для работы с видеоАдаптером.
0 хххх.хххх Запись байта в регистр данных интерфейса SPI.
1 0011.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0011.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 0011.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 0011.0000 Снять с шины сигнал SS для завершения сеанса связи. Ардуино завершает ждать байты от БК.
1 0011.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 0011.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0100.0000 Выбор шины для работы с ЦАП-ами SuperCovox. (Байт1L + Байт2L + Байт3L + Байт4L => ЦАП)
0 хххх.хххх Запись байта в регистр данных интерфейса.
1 0100.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0100.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 0100.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ. (SuperCovox "возвращает" сумму в виде двух байт).
0 0100.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0110.0000 Выбор шины для работы с ЦАП-ами SuperCovox @ Stereo Mode.
(Байт1L + Байт1R + Байт2L + Байт2R + Байт3L + Байт3R + Байт4L + Байт4R => ЦАП-ы)
0 хххх.хххх Запись байта в регистр данных интерфейса.
1 0110.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 0110.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 0110.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ. (SuperCovox "возвращает" суммы в виде двух пар байт).
0 0110.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0101.0000 Выбор канала для работы с таймером реального времени.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 0111.0000 Выбор канала для работы с ускорителем расчётов MUL16, DIV16, MUL32, DIV32
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 1000.0000 Выбор канала для работы с ускорителем векторной графики.
На вход подаем координаты ХY экрана БК, тип фигуры и её геом./цвет. параметры --
на выходе получаем поток адресов, масок гашения и свечения.
PB2(2) dddd.RRRR (Данные инвертированы под код на БК0010/11М. В ардуине использовать инверсию!)
1 1001.0000 Выбор шины SPI, например, для работы с LCD-экраном.
1 1001.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 1001.0100 Выставить на шину сигнал SS для начала сеанса связи. Ардуино начинает ждать байты от БК.
...
1 1001.0000 Выбор устройства SPI, например, для работы с LCD-экраном или видеоАдаптером.
0 хххх.хххх Запись байта в регистр данных интерфейса SPI.
1 1001.0001 Выбор регистра сигнала СТРОБ ДАННЫХ. Ардуино начинает его ждать...
0 1001.0001 СТРОБ ДАННЫХ. При его выставлении переданный байт данных отправляется на шину.
...
1 1001.0100 Выбор регистра сигнала SS (выбор ведомого устройства, начало сеанса связи).
0 1001.0000 Снять с шины сигнал SS для завершения сеанса связи. Ардуино завершает ждать байты от БК.
1 1001.1000 Выбор регистра сигнала БАЙТ ПРИНЯТ.
0 1001.1000 БАЙТ ПРИНЯТ. При его получении Ардуино выставляет на порт C новый инвертированный байт,
если он есть, либо пишет в него 0xFF (что для БК == 0).
Родилось какое-то решение в итоге?)
Не, работы много, руки не дошли :)
Будущее, видимо, ещё не наступило =)
Не, работы много, руки не дошли :)
Будущее, видимо, ещё не наступило =)
Елки-палки, как я буду без мыши делать "День Тентакля" ? ))
Елки-палки, как я буду без мыши делать "День Тентакля" ? ))
Ну я же играл как-то ;)
В DotT мышь не нужна, поскольку там нигде ничего не надо делать на скорость. Это в чистом виде головоломка, причём линейная. Кстати, если уж на то пошло -- было бы интереснее спортить хотя бы AGT, сьерровские игрушки более нелинейные и с вариантами. QFG1 вообще великолепна (правда, она уже вроде на SGI?)
С мышью гораздо удобнее. А насчет портирования других квестов - мне лично интересно портировать этот. Желающие могут портировать другие квесты, будет разнообразие)
С мышью гораздо удобнее. А насчет портирования других квестов - мне лично интересно портировать этот. Желающие могут портировать другие квесты, будет разнообразие)
Мышь то должна работать (что куда подключать расписано прямо в скетче (https://zx-pk.ru/threads/32173-adapter-myshi-ps-2-v-standart-myshi-marsianka.html?p=1080005&viewfull=1#post1080005))... :)
Я то думала, Вы про "Мысли на будущее" спросили ))
Мышь то должна работать (что куда подключать расписано прямо в скетче (https://zx-pk.ru/threads/32173-adapter-myshi-ps-2-v-standart-myshi-marsianka.html?p=1080005&viewfull=1#post1080005))... :)
Я то думала, Вы про "Мысли на будущее" спросили ))
Я имел в виду как в итоге подключать мышь - через joyvox, через резисторы самому или через az ? )
Я имел в виду как в итоге подключать мышь - через joyvox, через резисторы самому или через az ? )
Мышь и joyvox -- явления взаимоисключающие.
Мышь и joyvox -- явления взаимоисключающие.
ну писали же "выпроси у Манве посадочное место под ардуинку на джойвоксе"
там и стерео-Covox, и два геймпада.
вопрос: накуа два джоя на БК, если на ней нет ни одной игры, кроме разве что модифицированного лодеруннера по имени fantast, в которые можно играть вдвоем притом не хот-ситом? биллиард - хотситовый. других игрушек для двоих не припоминаю. итак, нафига козе боян? шоб булО?
УПД: или кто-то разродился каким-то файтингом на БК? нюка-нюка, просим =)
Мышь и joyvox -- явления взаимоисключающие.
Это совсем родная Марсианка требует строба со стороны УП, который шумит в ковокс, а с таким адаптером драйвер мыши не обязан посылать строб в УП (можно забить NOPами такие места в коде программ и всё, скорее всего).
Темп опроса мыши задаётся в скетче ардуино, а не стробом со стороны порта УП, он никак не используется.
- - - Добавлено - - -
Я имел в виду как в итоге подключать мышь - через joyvox, через резисторы самому или через az ? )
Через joyvox лучше, наверное :)
Можно даже прямо через разъём для джойстика, и сделать процедуру настройки направлений движения и кнопок...
вопрос: накуа два джоя на БК, если на ней нет ни одной игры, кроме разве что модифицированного лодеруннера по имени fantast, в которые можно играть вдвоем притом не хот-ситом? биллиард - хотситовый. других игрушек для двоих не припоминаю. итак, нафига козе боян? шоб булО?
УПД: или кто-то разродился каким-то файтингом на БК? нюка-нюка, просим =)
Написали уже TRON и Ping-Pong для двух игроков.
- - - Добавлено - - -
Можно даже прямо через разъём для джойстика, и сделать процедуру настройки направлений движения и кнопок...
Если бы еще в эмуляторе поддерживалась мышь )
Это совсем родная Марсианка требует строба со стороны УП, который шумит в ковокс, а с таким адаптером драйвер мыши не обязан посылать строб в УП (можно забить NOPами такие места в коде программ и всё, скорее всего).
"Скорее всего" :v2_dizzy_facepalm:
Я бы советовал всё-таки изучить, как работает "Марсианка", прежде чем писать такую чушь. Предлагаемое поделие с ней не совместимо и ни в одной программе работать не будет.
Темп опроса мыши задаётся в скетче ардуино, а не стробом со стороны порта УП, он никак не используется.
Нет в Марсианке никакого "необязательного строба опроса". Это, для начала, устройство координатного ввода, а не джойстик. Учите матчасть.
устройство координатного ввода
(Disclaimer: "Платон мне друг, но женщина - дороже"(с)Сократ)
Если "между нами девочками", то шинная мышка, как низшее звено эволюции ручных грызунов, это всетки ближе стоит к палкам приносящим радость, уж давайте будем откровенны. Шинная мышка работает подобно джойстику, оператором которого является упоровшийся спидами торчок, что остервенело дергает палкой и нажимает кнопки. +Х -Х +У -У ЛК СК ПК - 7 ног, семь! без одной шесть ног как у двухкнопошного БК-джойстика. И да, две ноги служебных - на питание и массу. Со стробом оппонент и правда - кхэ-кхэ, уж лучше бы он дал этому старому противному Маху, ведь надо временами читать документацию (на тот же стандарт microsoft bus mouse).
Но таки вернемся со стробных небес на нашу грешную землю - У любой уважающей себя сериальной мышки ног 4-5, среди которых за данные отвечает всего ОДНА нога - И - все, швабоден! и при всем ее желании сериальная мышка не может работать словно этот низменный джойстик (фу, какая гадость). зато шинная мышка в некоторых играх работает как джойстик. и неплохо, притом.
А если еще попийсят, то и палка приносящая радость - такое же устройство ввода координатное. Так же способно курсором елозить по экрану. Вон на коммодоре64 джоем в порте 1 можно курсором по экрану ползать. "Огнем" пробел жмем.
Прикинув палец к носу, терминология изначально неверная, позволяющая ненужные споры.
предлагаю на тему терминологии объявить перемирие.
Мир БК - особый мир, и там всё по-особому, даже мышки. И хоть мышь Марсианка так же, как и джойстик, имеет минимум 6 сигнальных линий (джойстик - больше, насколько желания доп. кнопок навешать на него будет) она никак не джойстик.
Если ей не подать строб новых данных, то и фиг она новые данные выдаст. Так что это всё же устройство координатное. Синхронное.
требует строба
сигнал "сброс", если точнее - да, таковой наличествует. строба нет.
выводы напрашиваются неутешительные - как марсианку внаглянку не подцепить к той же амиге, так и буржуинское поделие к БК тупо в лоб не воткнешь.
чув, шось с цом трэба робить! у буржуев шинных мышей дофигища (некоторые из них легко делаются из оптических мышей с 16-ногим сенсором) а у нас марсианки не прибавляются.
вопрос: накуа два джоя на БК, если на ней нет ни одной игры, кроме разве что модифицированного лодеруннера по имени fantast, в которые можно играть вдвоем притом не хот-ситом? биллиард - хотситовый. других игрушек для двоих не припоминаю. итак, нафига козе боян? шоб булО?
УПД: или кто-то разродился каким-то файтингом на БК? нюка-нюка, просим =)В 1995-ом году уже был файтинг для двух игроков: http://thesands.ru/bk0010/fist.zip
И ещё несколько игр было.
сигнал "сброс", если точнее - да, таковой наличествует. строба нет.
выводы напрашиваются неутешительные - как марсианку внаглянку не подцепить к той же амиге, так и буржуинское поделие к БК тупо в лоб не воткнешь.
чув, шось с цом трэба робить! у буржуев шинных мышей дофигища (некоторые из них легко делаются из оптических мышей с 16-ногим сенсором) а у нас марсианки не прибавляются.
Sandro, vivat, ещё раз :) Мышь PS/2 обслуживает Ардуина, и делает из неё по сути джойстик, с распайкой входящих в УП сигналов по стандарту мыши "Марсианки".
Ардуине особо не нужен сигнал "сброс" от ПО на БК-шке. Если он и будет формироваться ПО БК, то будет проигнорирован, а новые сигналы от мыши PS/2 и без него транслируются и выставляются на порт УП, периодически.
Наверняка, софт БК для Марсианки, просто периодически запрашивает новые данные на порт УП, посылая сигнал "сброс", и тупо берёт для анализа "новые" указания.
Сигнал "сброс" был введён в конструкцию только из необходимости упростить схематику мыши Марсианки... Теперь упрощаем ПО, и всего-то :)
Если бы БК могла "быстро" переходить к П/П, обслуживающей прерывание от мыши, можно даже было бы и по прерыванию работать с мышью PS/2 через Ардуину, но в БК каждый такт на счету для производства изменений на дисплее... да, и софта старого такого нет, поэтому я от такой идеи сразу отказалась :)
я от такой идеи сразу отказалась
что? О__О эмм... нет, нуу... мда... ну что же, ок. есть женщины в русских селеньях... на барже (ГАЗ-24) даму видел. на форуме посвященном ремонту винтов - видел. сварную - видел. токаря в юбке - ннне видел. камазистка вон на ютубе завелась... а чем черт не шутит, почему б не быть и на бк-платформе...
но неожиданно, право. ок.
остается воздеть руки небу да возкликнуть - чудны дела твои, господи!
что? О__О эмм... нет, нуу... мда... ну что же, ок. есть женщины в русских селеньях... на барже (ГАЗ-24) даму видел. на форуме посвященном ремонту винтов - видел. сварную - видел. токаря в юбке - ннне видел. камазистка вон на ютубе завелась... а чем черт не шутит, почему б не быть и на бк-платформе...
но неожиданно, право. ок.
остается воздеть руки небу да возкликнуть - чудны дела твои, господи!
Преувеличивать не надо :) Кстати, родилась я в Куйбышевской обл. ;) Земля там такая, плодовитая на таланты))
Промо ролик к этому этапу :)
А теста на движение мыши так и не было?
есть женщины в русских селеньях
Жена после школы и училища заканчивала пединститут по специальности Музработник детских дошкольных учреждений (ну или типа того). Сейчас заканчивает магистратуру по специальности "Системы управления движением и навигацией" в институте ракетно-космической техники.
Sandro, vivat, ещё раз :) Мышь PS/2 обслуживает Ардуина, и делает из неё по сути джойстик, с распайкой входящих в УП сигналов по стандарту мыши "Марсианки".
Вы вообще понимаете разницу между мышью и джойстиком? "Марсианка" -- это МЫШЬ! Джойстик -- это джойстик! Одно вместо другого работать не будет, даже если биты направлений совпадают. И них разные протоколы обмена.
Вы бы ещё мобильник вместо зарядки в прямо в 220 подключали ...
Ардуине особо не нужен сигнал "сброс" от ПО на БК-шке.
Причём тут ардуина?
Если он и будет формироваться ПО БК, то будет проигнорирован, а новые сигналы от мыши PS/2 и без него транслируются и выставляются на порт УП, периодически.
Не будет работать, как мышь. Будет как очень дерьмовый и глючный джойстик в лучшем случае. "Периодически".
Наверняка, софт БК для Марсианки, просто периодически запрашивает новые данные на порт УП, посылая сигнал "сброс", и тупо берёт для анализа "новые" указания.
Некоторые программы для БК действительно написаны из такого предположения. Оно неправильное. В основном товарищи из Caroline Software отличились. Что вообще говоря, странно -- с их-то высоким техническим уровнем. :(
Подпрограмма опроса мыши из ксидосовской оболочки -- это наглядный пример того, как не надо опрашивать мышь. Была бы написана правильно -- не свистела бы в ковокс.
На самом деле, сигнал нужен не для "запроса новых данных", а для подтверждения, что текущие уже прочитаны. Если мышь в момент сброса находится в покое, то никаких "новых данных" не поступит. Возможно -- вообще никогда.
Сбрасывать надо ТОЛЬКО после передвижения мыши. И сигналом минимально возможной длины. Тогда всё будет работать нормально, не терять квантов передвижения мыши, и не свистеть.
Сигнал "сброс" был введён в конструкцию только из необходимости упростить схематику мыши Марсианки...
Нет. Он введён для того, чтобы мышь была устройством ввода КООРДИНАТНЫМ, то есть могла измерять линейное перемещение вдоль координат. Джойстик таким свойством не обладает и поэтому координатным устройством не является.
Он не то что "упрощает" схематику, без него вообще ничего бы не работало.
Теперь упрощаем ПО, и всего-то :)
(комментарий вымаран внутренним цензором Сандро)
PS: Подключите же наконец к БК джойстик с мышиной распайкой, и попробуйте им поуправлять хоть чем-нибудь. Хоть ксидосом, хоть шахматами. Успехов!
Sandro, и как же Марсианка (сама по себе) измеряет линейное расстояние?
По моему, никак. Это делает "драйвер" мыши Марсианка, и, как Вы сами верно заметили, в разных программах для БК он реализован самобытно.
Но, наверняка, принцип у этих драйверов один - получение нового вектора движения мыши через равные периоды времени, для чего и нужен сигнал "сброс" от этого драйвера. Но если ардуино будет формировать новый вектор движения мыши в два и более раза чаще, чем старый софт БК посылает "сброс" через равные промежутки времени, ничего для такого софта принципиально не изменится.
- - - Добавлено - - -
Но я спаяю на днях тестовый разъём УП с ардуино и проведу следственный эксперимент. Как раз всё оказалось в одном помещении, и под рукой :)
Но я спаяю на днях тестовый разъём УП с ардуино
во! ты осцылом могешь послушать что творится на координатных ногах у мыши? у меня лично такое подозрение что там при передвижении по столу будет меандр который прекратится при остановке движения. а следом послушать джойстик, когда его палку часто дергать. ну вот интересно сравнить что творится на разъеме порта.
"как убедить мне упрямую Настю - Настя желает в кино как суббота - Настя ворчит, что проникся я страстью к глупому ящику для идиотов..." а так - с эпюрами (с осцыллограммами сиречь) будет нотариально заверенный дакУмент.
ну че, можно будет попытаться?
поглядел в пдфку на одну мышу с квадратурным сенсором. джойстик тоже так сможет, главное научить его задние фронты несколько разтягивать. (поставить регистры или RS-триггеры, сбросом по Х+ будет управлять сигнал с Х- - тогда и наступит плезир и парадиз) чтоб пока Х+ нажат, некоторое время Х- еще поступал бы на вход.
еклмн! это ж принцип работы валкодера, при считывании импульсов с которого каким образом определяется в какую сторону он вращается.
вот пдфка. 10 страница - там осцыллограмма того что творится по квадратурным выходам.
https://docviewer.yandex.ru/?tm=1623517569&tld=ru&lang=en&name=file.php?id=320230&text=ADNS-2001+datasheet&url=https%3A//www.radiokot.ru/forum/download/file.php%3Fid%3D320230&lr=47&mime=pdf&l10n=ru&sign=01e406037046615c55d8497f1c1cbc51&keyno=0
Теоретически, могу и осцил подключить. Как минимум, чтобы глянуть что разный софт шлёт на линию "сброс" реальной Марсианки...
могу и осцил подключить.
пожалуйста =) и квадратуру пусть по одной координате (если аппарат двухканальный) - убедиться что марсианка таки именно шинная мыша пусть и с паталогиями. =)
electroscat
07.01.2022, 01:40
Доброго времени товариши! И таки шо ? пол года минуло,.... Осцилограммы заливайте ?!?
- - - Добавлено - - -
А то не терпится уже БК с мышью, а марсианки на авито похоже дешеветь не будут,... ну по крайней мере пока ардуина не поможет подключить к БК PS/2 мышь...
Можно без особых запар подключить пассивную мышь по спектрумовской схеме, но это будет уже не "Марсианка" софтово и технически.
Основной минус "Марсианки" - в голом виде она не считает координаты, нужен сигнал сброса после их изменения. И это довольно часто нужно делать.
Себе вот паяю адаптер пассивной, опрашиваться будет как на Спектруме, 50 раз в секунду, на выходе изменения координат. Что намного лучше и экономичней.
Можно вообще не опрашивать, схеме все равно - координаты она в любом случае считает. Кто знаком со спектрумовским вариантом, поймет.
Не поклонних ПЛИСов, потому небольшая схемка на рассыпухе. Ничего сложного, да и ПЛИСы как-то не вписываются в ретро-тематику.
Не знаю, почему за столько лет не внедрили такой или похожий стандарт... вам реально удобно дергать драйвер по откату, чтобы следить за мышой? =)
electroscat
07.01.2022, 23:05
Можно без особых запар подключить пассивную мышь по спектрумовской схеме, но это будет уже не "Марсианка" софтово и технически.
Да, идея в целом хорошая, но после этого придется либо портировать спектрумовское П.О. на БК, или переписывать весь софт под БК для поддержки сего девайса..
- - - Добавлено - - -
Посмотрел внимательно на схему, действительно, "сброс" не просто так подается на Марсианку. Если после сигнала сброс - на выходе единицы - то движения нет, если сразу после сброса единица на... В обшем, чего тут кривляться, похоже, что БК снимает изменение направления сразу после прихода "сброса", потому что уже после прохода колесика через второе отверстие на Х-ВНИЗ И Х-ВВЕРХ будет два нуля, и толку от этого не много. Важно именно прохождение первого окна "колеса", только в этой ситуации есть разница, либо первым пройдет нижний диод, либо верхний.. По этому реально все это нужно учитывать.
- - - Добавлено - - -
Тут бы конечно еще ознакомиться с конструкцией оптопар и колеса,... без этого сложно понимать на самом деле что будет на выходе после того как механизм прокрутится в ту или иную сторону...
- - - Добавлено - - -
А без этого будет достаточно трудно заставить ардуино выдавать необходимую последовательность на "ПУ" ....
Может кто то снимет диаграммы работы мыши, по выводам мыши X-вниз, Х-вверх, Y-вниз, Y-вверх, сброс....
Честно сомневаюсь, что кто то это сделает, ибо те у кого есть "Марсианка" - ему не очень нужна PS/2 мышь, а те у кого нет Марсианки - тот и снять никакие диаграмы не сможет..
Может кто то сможет марсианку прислать на исследования ? Можно не рабочую, на восстановление ?
придется либо портировать спектрумовское П.О. на БК, или переписывать весь софт под БК для поддержки сего девайса
Ну, софта (игрушек) и так со Спектрума портировали довольно много =) Естественно, без мышиного управления, хотя и на Спектруме оно было нечастым гостем.
на БК да, придется, как минимум, менять драйвер мыши, причем банальная замена не поможет, т.к. совсем другая механика вызовов.
С другой стороны, в играх мышь для БК отсутствует, как таковая, а посему хуже не будет. При текущей реализации нисколько не удивился такому положению вещей.
Новые же игры/софт можно сразу писать с поддержкой нового девайса, главное договориться о стандарте, чтоб не клепать кучу несовместимых вариантов.
Преимущества управления мышью, думаю, в пояснениях не нуждаются. Даже в операционке (коммандере) она порой удобней, нежели клавиатура.
electroscat
07.01.2022, 23:42
В общем, если по простому, с 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 сделать или кому чего нравится.
electroscat
08.01.2022, 01:32
Блин, да всё просто там. 4 бита X+ X- Y+ Y-. При обнаружении движения туда нужный бит взводится. Передёргиванием бита в порту сбрасывается всё разом. Не нужно никаких хитрых теорий изобретать. Конвертор из PS/2 в это тривиален и очевиден. Можно на какой-нибудь ATTiny сделать или кому чего нравится.
Там два фотодиода на направление, один из них выступает тактирующим для обоих (+ и -) триггеров, второй работает только на (-), то есть с первым после резета тактом (+) в любом случае должен "взвестись", потому что его вход данных сидит на питании,... Следом, осветится второй фотодиод, и вполне возможно, что это совпадет с освещением первого (тактирующего) следующим отверстием, и тогда "взведется" и (-)... А если до того как пришел сброс - движение было и в + и в (-) то что взводится, тоже оба ? Вопросов много на самом деле, просто все, когда есть возможность посмотреть как работает осцилом или лучше анализатором... А у меня пока чисто теоретичнеская проработка, и в следствии того, что конструкция оптических датчиков мне не известна, у меня пока больше вопросов, чем решений.
Там два фотодиода на направление, один из них выступает тактирующим для обоих (+ и -) триггеров, второй работает только на (-), то есть с первым после резета тактом (+) в любом случае должен "взвестись", потому что его вход данных сидит на питании,...
Mein Gott ... А декодера на D5 ты не видишь?
Вопросов много на самом деле, просто все, когда есть возможность посмотреть как работает осцилом или лучше анализатором...
Смотреть -- карандашом и тетрадкой. Карандашом и тетрадкой. Только так. Иначе никогда не поймёшь.
А у меня пока чисто теоретичнеская проработка, и в следствии того, что конструкция оптических датчиков мне не известна, у меня пока больше вопросов, чем решений.
Причём тут конструкция фотодиодов? Изучай схемотехнику. Если ты не понимаешь работу схемы, то разберись с ней, а не теоретизируй. Иначе никак.
Там совершенно классический, до скукоты, квадратурный декодер. Они все такие. Эта схема есть в любом нормальном букваре. Один триггер ловит сам "щелчок", второй, одновременно, -- направление. Дальше декодер на элементах "И". Ну всё же просто совсем.
в следствии того, что конструкция оптических датчиков мне не известна, у меня пока больше вопросов, чем решений.
Да всё куда проще, не нужны никакие лог. анализаторы. Схема "Марсианки" примитивна и убога до безобразия, выше уже расписали в деталях. Это называется пассивная мышка, такие подключались к Амигам, а потом и к Спектрумам, причём безо всяких переделок. Вот только на этих мышках сигнал сброса не требуется, с датчиков лишь отдаются сигналы в плюс/минус координат, а дальше уже заботы контроллера, что с этим делать.
Почему советские разрабы сделали свой, до ужаса примитивный вариант - непонятно, но уж как вышло. Для полноценной работы мышке нужно обслуживание в виде сброса координат, без него (сброса) можно лишь понять, что мышу двигали, и всё. То бишь с "Марсианкой" без доп. контроллера (например, для "Агата" таковой имеется) управлять мышкой приходится софтово, причём по откату. Не как на Спектруме, читая данные 50 раз в секунду (в общем случае) или на РС, где схожий принцип у PS/2 мыши. На БК драйвер вынужден, по сути, вызываться всё время, чтобы более-менее правильно интерпретировать движения мыши. Разумеется, в играх и прочем софте с нормальной загрузкой проца о таком варианте речи быть не может. Вот потому Марсианка и не прижилась, ибо без контроллера толку от неё чуть более, чем никакого.
Так что, пока не поздно, предлагаю внедрить как стандарт вариант спектрумовской Кемпстон-мыши с небольшими улучшениями. Два байта координат, X и Y, причём в виде смещения от предыдущего значения, плюс байт с данными трёх кнопок и колеса. В общем, почти тот же PS/2 формат в слегка упрощённом виде. Вся обработка ложится на контроллер, а в порт он выдаёт уже сформированные данные.
Сейчас приспосабливаю пассивную мышь от Спектрума, подключаться будет в порт УП. Плюс одновременно расширенный джойстик. Подробнее опишу позже, пока девайс в стадии "подопытный на макетке". Да и с одного лишь девайса народ не впечатлишь, нужна наглядная демонстрация возможностей через софт. Потихоньку занимаюсь, сырой вариант выкладывать не хочу, чтоб не получилась ещё одна " видеокарта Метеор" в стадии вечного строительства.
electroscat
08.01.2022, 13:42
Mein Gott ... А декодера на D5 ты не видишь?
Да, увидел, спасибо ! Реально только либо (+) либо (-).
То есть, если так, то это работает как джойстик ? Или все таки чтение координаты происходит после сброса только ? Пока не могу понять, если она показывает направление на 4х битах порта, смысл тогда в сбросе ?
- - - Добавлено - - -
Вот только на этих мышках сигнал сброса не требуется, с датчиков лишь отдаются сигналы в плюс/минус координат, а дальше уже заботы контроллера, что с этим делать.
А зачем он тогда вообще нужен ? То есть, по факту, без сигнала сброса мышь работает как джойстик получается, а координатной она становится если снимать из порта данные только после сигнала сброса, тогда можно в конкретную единицу времени, обусловленную периодом сброса, получить изменение направления, так чтоли ?
если так, то это работает как джойстик ? Или все таки чтение координаты происходит после сброса только ? Пока не могу понять, если она показывает направление на 4х битах порта, смысл тогда в сбросе ?
Смысл сброса в разрешении указания новых изменений, если кратко и попроще. Повторюсь, но такая реализация весьма убога.
Исходно, пока мышу не трогают, везде нули. Куда-то сдвинули - появились единички, означающие, что мышь сдвинули. На сколько именно сдвинули - понять невозможно, фиксируется сам факт передвижения. И пока не произвести сброс, единички так и останутся. Хоть полчаса возите мышь - факт уже зафиксирован.
Отсюда и следует необходимость максимально частого опроса и сброса, если хотим добиться подобия управления мышью. Если же опрашивать её один раз в кадре (по прерыванию или после его процедуры) - мыша фактически превращается в джойстик. Само собой, пользы от такого девайса мало, если она вообще есть.
Может быть вы не в курсе, но изначально разработчиками мышки Марсианка было задумано, что она будет работать через блок КМ, а не непосредственно подключённая к УП. А через блок КМ она задумывалась работать по прерываниям. Вектор 0100 или 0270 выбирался перепайкой перемычки. Т.е. при движении или нажатии клавиши мыши генерируется прерывание, и драйвер обрабатывал результаты от мыши. Именно из-за этого и нужен сброс. Чтобы мышь не фигачила не нужных прерываний, когда их не получается обработать. В конце работы драйвера подавался этот сигнал мыши и снова можно было ожидать от неё прерывания.
Но т.к. блок КМ - крайне редкая, и для многих непонятная фигня, то на него забили, и мышь подключили напрямую. А обрабатывали сигналы от неё в прерывании от таймера 50Гц на БК11, тоже получается примерно 50 раз в секунду.
Сейчас приспосабливаю пассивную мышь от Спектрума, подключаться будет в порт УП.
Ты учитываешь, что порт УП -- это просто набор буферов и никаких протоколов обмена сам не поддерживает? А так же необходимость внедрять новый драйвер во всё, что уже написано?
разработчиками мышки Марсианка было задумано, что она будет работать через блок КМ, а не непосредственно подключённая к УП. А через блок КМ она задумывалась работать по прерываниям
В курсе, в курсе, доки по мышке читал. И могу сказать, что прерывания от мыши - ещё более убогая затея, нежели программно опрашивать порт. Чем быстрее "везут" мышу - тем больше прерываний обрабатывать, а каждая обработка это, во-первых, затраты процессорного времени, коего на ВМ1 и так не вагон, а во-вторых, прерывание портит стек, и прога не сможет его использовать как регистр, что делается не так уж и редко. Если же забить на прерывание от мыши (запретить) - имеем все шансы пропустить часть сдвигов, и чем больше "пауза", тем хуже. Ну и зачем такое убожество нужно? Поэтому блок КМ - лишь довесок навроде пятого колеса, в реальности бесполезный.
КМ - крайне редкая, и для многих непонятная фигня, то на него забили, и мышь подключили напрямую. А обрабатывали сигналы от неё в прерывании от таймера 50Гц на БК11, тоже получается примерно 50 раз в секунду
Угу, в результате и получаем имитацию джойстика, тоже опрашиваемого 50 раз в секунду. Без учёта скорости движения мыши. Либо был сдвиг на единицу, либо нет. Смысл дублировать джойстик?
Ты учитываешь, что порт УП -- это просто набор буферов и никаких протоколов обмена сам не поддерживает? А так же необходимость внедрять новый драйвер во всё, что уже написано?
Да вроде не дурак, в рассыпухе, в отличие от ПЛИСов, разбираюсь =) Специально выше писал про переделку софта, а также контроллер. Схемка простая, несколько корпусов рассыпухи - по сути, аналогична спектрумовской за вычетом обработки сигналов процессора, поскольку УП уже готовый порт ввода-вывода, и схема даже проще, чем для Спектрума. Но если кому-то нравится пользоваться резиновой бабой имитацией джойстика вместо полноценного девайса - я не против. Их право.
В новый же софт вставить драйвер и выбор типа мыши вообще не проблема, и чем раньше это начнётся, тем лучше.
Для electroscat под Агат, между прочим, есть вменяемый "родной" олдскул контроллер под Марсианку, если интересует работа на нём. Почитать про него и мышу можно на сайте по Агатам: http://agatcomp.ru/agat/Hardware/Key_Joy/MouseUVK.shtml там и схемы, и все техническо-софтовые подробности. Другое дело, что сейчас и мышка, и сам этот контроллер перешли в разряд музейных эспонатов. Но контроллер можно спаять самому из той же рассыпухи, что и исходный, а вот где взять пассивную мышку... довольно легко переделываются шариковые PS/2, если у кого завалялись. А главное - под этот контроллер на Агате есть софт. В отличие от БК. Для него либо работа через прерывания и блок КМ, либо имитация джойстика. И то, и другое напоминает приём душа в водолазном костюме.
Угу, в результате и получаем имитацию джойстика, тоже опрашиваемого 50 раз в секунду. Без учёта скорости движения мыши. Либо был сдвиг на единицу, либо нет. Смысл дублировать джойстик?
Можно же опрашивать нормально, а не раз в кадр. Весь опрос -- BIT+BNE, это около полусотни тактов. Примерно четверть экранной строки. Мелочи. Можно хоть каждую десятую строку опрос делать, отъест страшные 2,5% процессорного времени.
И, кстати, что значит -- "прерывания портят стек", с чего бы это? И что значит "использовать стек, как регистр"? Если речь идёт о ячейке на вершине стека, @sp, то ничего ей не делается.
- - - Добавлено - - -
И ещё: к Марсианке можно приделать переходник на реверсивных счётках с сохранением совместимости с оригинальным интерфейсом. Который будет снимать проблему с потерей импульсов.
electroscat
08.01.2022, 20:57
под Агат, между прочим, есть вменяемый "родной" олдскул контроллер под Марсианку, если интересует работа на нём. Почитать про него и мышу можно на сайте по Агатам: http://agatcomp.ru/agat/Hardware/Key_Joy/MouseUVK.shtml там и схемы, и все техническо-софтовые подробности. Другое дело, что сейчас и мышка, и сам этот контроллер перешли в разряд музейных эспонатов. Но контроллер можно спаять самому из той же рассыпухи, что и исходный, а вот где взять пассивную мышку... довольно легко переделываются шариковые PS/2, если у кого завалялись. А главное - под этот контроллер на Агате есть софт.
Про Агат я в курсе, там идея шире, реализовать на одной плате контроллер мыши от Nippel и часы реального времени, и чтобы не отходить от стандартного решения, тоже желательно получить эмуляцию "марсианки"... Работать это правда будет только на Агате 9, т.к. за основу возьмется контроллер от Nippel, и часы от них же, а все это только на А9 работает. Да и в целом, я на Агате 7 не видел ни одного приложения с использованием мыши, а для Агат 9 много.
Меня все таки пока устроит варант с эмуляцией марсианки из PS/2 мыши, это гораздо быстрее реализовать, и полезно будет и для БК и для Агата.
Можно же опрашивать нормально, а не раз в кадр. Весь опрос -- BIT+BNE, это около полусотни тактов. Примерно четверть экранной строки. Мелочи. Можно хоть каждую десятую строку опрос делать
Можно, вот только в реальной программе, загружающей проц, скажем, игра с кучей графики либо прога с активными расчетами, проблематично вырывать проц из середины таких вычислений/процедур. Это не вывод курсора мышки раз в кадре и последующий "афк" с циклическим опросом, пока проц ничем другим не занят. Прерывания от мыши решают эту проблему, но возникает другая, со стеком:
что значит -- "прерывания портят стек", с чего бы это? И что значит "использовать стек, как регистр"?
Вот это и значит. На БК можно юзать SP не по прямому назначению, а в качестве обычного регистра, если стандартных R0-R5 не хватает. Да, это требует запрета прерываний или, как минимум, кусок кода должен успеть восстановить SP до их прихода. Что вполне реально между 50Гц кадровыми, но в случае непредсказуемых мышиных прерываний невозможно. А применяется такой приём не так уж и редко. В основном, конечно, в демках, но что мешает задействовать SP в играх, если это ускорит работу? В таком случае опрос мыши допустим только по КС, что в случае Марсианки фактически лишено смысла.
И ещё: к Марсианке можно приделать переходник на реверсивных счётках с сохранением совместимости с оригинальным интерфейсом. Который будет снимать проблему с потерей импульсов.
Так это и планируется, чтоб имеющие оригинальную мышь могли её превратить в "кемпстон-мышь", пусть и с некоторыми потерями (нет колеса скролла и лишь две кнопки вместо трёх). Собственно, моя схема и есть набор счётчиков плюс кой-какая логика, обычная пассивная мышь от Амиги/Спектрума работает в ней напрямую. Для Марсианки же придётся добавить формирователь сброса после "двига" мышой, в остальном схемы идентичны. Если бы для БК сразу сделали такой контроллер, наподобие Nippel Card для Агата, сейчас не пришлось бы изобретать велосипеды по даунгрейду PS/2 мышей в убогое поделие под названием УВК.
пока устроит варант с эмуляцией марсианки из PS/2 мыши, это гораздо быстрее реализовать, и полезно будет и для БК и для Агата
Как вариант закоса под оригинал - да, имеет право на жизнь. Но по функционалу я уже прошелся =)
Народ просто не понимает всей выгоды, что объяснимо, т. к. пользовались лишь тем, что было. Это как у Жванецкого: "для советского гражданина, не носившего импортные ботинки, и наши ботинки - вот такие! " (большой палец вверх)
electroscat
08.01.2022, 22:12
Как вариант закоса под оригинал - да, имеет право на жизнь. Но по функционалу я уже прошелся =)
Народ просто не понимает всей выгоды, что объяснимо, т. к. пользовались лишь тем, что было. Это как у Жванецкого: "для советского гражданина, не носившего импортные ботинки, и наши ботинки - вот такие! " (большой палец вверх)
Цена копии "марсианки" и скорость ее изготовления на несколько порядков ниже новой версии мыши как для БК так и для Агата. Не заю как на БК, а на агат точно никто софт править не будет, в сообществе фанатов Агата все очень архаично и консервативно, по этому там лучше просто повторить реальные девайсы, максимум используя для них мышь PS/2. На счет БК судить не берусь, но вроде у БК программеров и без того заделы на будущее необьятные, вряд ли они горят желанием вставлять новые драйвера в софт из прошлого. Ну и по Жванецкому, если "наши" ботинки можно купить с зарплаты несколько пар, а на "импортные" копить десять месяцев,.... При всем при том, что и в "наших" и в "импортных" в целом ходить реально, примерно с такой же скоростью и с такими же усилиями... то возникает вопрос, зачем нужны импортные ?!?
- - - Добавлено - - -
Попробовал скомпилить скетч из первого сообщения под NodeMcu V3 - другого ничего нет... И не завелось. Не знаю в чем проблема, есть подозление что ардуино подпорченное, ибо 6,7,8 и 11 пинами не смог управлять при проверке (запускал на каждый из пинов меандр, типа помигать диодом, перебором пинов при компиляции, когда компилил на 6,7,8 и 11 пины такой же эффект как при запуске "перепининного" скетча для эмуляции Марсианки, раз в секунду в ком порт выводится информация и все.., когда меандр выводится, то есть программа работает - в COM информация не выводится.), програмки которые должны были выводить на эти пины меандр, не завелись. В целом, я вообще не специалист по ардуино, это вторая поделка на платформе, и первая не завелась, точнее не заработала как следует,. По этому таки подозреваю, что моя платка не исправна.
Из этого возникает вопрос, предже всего наверное к автору темы, под какую ардуину писался скетч ? То есть, какой наиболее подходящий девайс заказывать под опубликованный скетч ?
Прошу прощения за оффтоп, наверное нужно к ардуинщикам обратиться )))
Можно, вот только в реальной программе, загружающей проц, скажем, игра с кучей графики либо прога с активными расчетами, проблематично вырывать проц из середины таких вычислений/процедур.
Не мешают. Кстати, я посчитал. Проверка на движение мыши занимает 64 такта и ноль регистров.
Вот это и значит. На БК можно юзать SP не по прямому назначению, а в качестве обычного регистра, если стандартных R0-R5 не хватает. Да, это требует запрета прерываний или, как минимум, кусок кода должен успеть восстановить SP до их прихода.
Можно. Но редко нужно. Хотя я совсем недавно так делал. Кстати, без запрета прерываний и гонки с лучом. А потом переписал так, что остались свободные регистры и стало быстрее. Так что этот частный случай не являетсся серьёзным аргументом.
Что вполне реально между 50Гц кадровыми, но в случае непредсказуемых мышиных прерываний невозможно. А применяется такой приём не так уж и редко. В основном, конечно, в демках, но что мешает задействовать SP в играх, если это ускорит работу? В таком случае опрос мыши допустим только по КС, что в случае Марсианки фактически лишено смысла.
Так это и планируется, чтоб имеющие оригинальную мышь могли её превратить в "кемпстон-мышь",
Не это. Кемпстон не нужен. Можно отложить чтение мыши на попозже, совсем нехитрым способом. И не изменяя ни строчки в софте.
я посчитал. Проверка на движение мыши занимает 64 такта и ноль регистров
Всё это замечательно, но каким образом вставлять сей опрос внутрь некоего куска кода, работающего значительный период времени, причём со всякими ветвлениями и прочим, что не позволяет уповать на более-менее частую и равномерную проверку? Смысл схемы со счётчиками именно в уходе от проверки, как таковой. 50 раз в секунду (или даже реже, зависит от выдаваемого программой fps) из порта читаются значения - и всё, зачем эти проверки?
Можно отложить чтение мыши на попозже, совсем нехитрым способом. И не изменяя ни строчки в софте
Только за тридцать лет почему-то никто это не осуществил.
Имею в виду полноценную мышь, а не УВК.
Цена копии "марсианки" и скорость ее изготовления на несколько порядков ниже новой версии мыши
Ну и где же они, дешёвые мыши для БК, наводнившие рынок? Кто-то ведь сам писал, что цена на оригинал кусается, а альтернативных предложений нету. Отчего и приходится изобретать адаптеры писишных мышей.
Если бы было дёшево и быстро - оригиналы бы не стоили по 2 тыщи :)
electroscat
08.01.2022, 23:36
Ну и где же они, дешёвые мыши для БК, наводнившие рынок?
Если я разберусь с ардуино, то можно будет подключить обычную ps/2.. при цене ардуино в 300 рублей и ps/2 мыши в 100- весьма себе альтернатива...
Если я разберусь с ардуино, то можно будет подключить обычную ps/2.. при цене ардуино в 300 рублей и ps/2 мыши в 100- весьма себе альтернатива...
Плюс цена разъёма СНП, не в воздухе ж оно будет висеть возле компа =)) вполне вариант, почему б нет.
Внизу страницы, где предложения схожих тем, есть топик об адаптере PS/2 мыши для Коммодора. Тема аж 2009 года, устройство уже тогда было. Неужели Коммодор, который ни я, ни кто-либо ещё из друзей-знакомых в моём городке в глаза не видел, популярнее БК?
electroscat
09.01.2022, 15:49
Да, с моей ардуинкой что то не так, на всех распиновках пины 6,7,8,11 присутствуют, и должны использоваться, а в моей их нет, и по мимо этого, вместо того который по схеме 6й - работает скетч, скомпилированный на 10 пин.. В общем, закзал несколько Arduino Nano, они максимально близки к оригиналу, оригинал был на Меге 328p. Получу - продолжу исследования. Покупать в россии по 600р - то что можно купить в китае за 350 - не намерен, подожду пару - тройку недель... И понятно стало теперь, почему не завелся предидущий проект, проверяйте соответствие "пользовательских" пинов на китайских платках ))
electroscat
31.01.2022, 22:42
Пришли ардуинки, скомпилил скетч, чутка его по пинам переделал, ну то такое.. Ввел резет в ардуино, но пока с ним ничего не делаю. А придется. Ибо мышь, скорее всего из за отсутствия координации с БК имеет всего 3 положения по вертикали и 5 по горизонтали. Ну и по факту работает примерно как джойстик, только джойстик имеет одно по факту положение по горизонтали и вертикали, из за того, что я не могу так быстро нажать и отжать его по оси )))... Прилагаю видео сего факта (мыши из ардуино), и прошу немного направить... Вопрос в чем, вот приходит на марсианку резет, сбрасывает триггеры в ноль. В этот момент происходит перемещение, содержимое триггеров меняется, и сохраняется таким до следующего резета, правильно я понимаю? Или например, движение в другую сторону может поменять содержимоне триггеров и без резета? Ну и сам драйвер мыши на БК, как он работает? Вот он послал резет, и сразу после этого снимает биты порта, и потом не обращается в порт до следующего резета, или как то по другому? Может кто то подробненько и кратенько помочь ?
Ссылка на видео о работе мыши тут (https://disk.yandex.ru/i/dSR6hOk2VIt-kw)...
- - - Добавлено - - -
На сколько я понимаю, нужно по сигналу резет создать прерывание, по которому нужно сбросить выходы X+\- и Y+\- в нули, и следующим шагом дать туда текущее значение снятые с мыши, и потом до следующего резета все это зафиксировать? Правильно я понимаю ?
движение в другую сторону может поменять содержимоне триггеров и без резета
Исходя из схемы - все четыре направления (вверх/вниз/влево/вправо) могут быть активированы одновременно.
То бишь повозив мышу без ресета, получим четыре единички, и корректная процедура опроса, получив такие "координаты", курсор вообще двигать не станет.
На практике же это маловероятно, т.к. частота опроса куда больше, чем физическая реальность успеть дернуть мышу в обе стороны между сбросами.
драйвер мыши на БК, как он работает? Вот он послал резет, и сразу после этого снимает биты порта
Ну, начать стоит с разделения на опрос по прерыванию от мыши (через блок КМ) и без прерывания. Какой вариант планируется эмулировать?
Если с прерыванием от мыши - вызов драйвера означает, что мышь сдвинули. Читаем данные и следом посылаем сброс. Все, диалог с портом окончен (упрощенно).
Если без прерывания от мыши (по таймеру или другим способом) - читаем данные и посылаем сброс, только если есть изменения (был сдвиг).
Иначе постоянный сброс (дерганье бита в порту) будет создавать пищание в ковоксе на тех машинах, где он подключен.
по сигналу резет создать прерывание, по которому нужно сбросить выходы X+\- и Y+\- в нули, и следующим шагом дать туда текущее значение снятые с мыши, и потом до следующего резета все это зафиксировать?
Не совсем. Прерывание возникает по факту сдвига мыши (вариант с подключением через КМ) или не возникает вовсе (напрямую в порт УП).
Вызванный прерыванием или другим способом драйвер должен считать данные, обработать, послать сброс в порт, если было прерывание, - либо см выше.
Обратно ничего посылать не нужно, это физически разные порты. Да, есть блок нагрузок для замыкания, но с ним мышь вообще не заработает, насколько понимаю.
Все это мысли теоретика, ибо вживую с мышью не работал =)) Но освоенная информации по БК дает повод думать, что все изложено верно.
И еще: шина в БК инверсная, то бишь единички это ноли и наоборот. Как на входных портах, так и на выходных. Думаю, это тоже важно.
electroscat
01.02.2022, 02:24
Спасибо за ответ ! В целом, теоретически понятно. На практике, сделал чтение резета, и когда он LOW - сбрасываю все в "1", причем читаю получается сразу после прихода резета, а потом, до следующего резета ничего не делаю... Чуть плавнее стало, но тем не менее, поставить курсор на нужную строку сложновато, хотя и возможно... Из вышесказанного понимаю, что резет - это не причина а следствие, в варианте без КМ, то есть, как только БК приняла данные из порта - она сбрасывает мышь.
Пока что я рассматриваю вариант без КМ как более простой. Но в целом, я за качественный вариант, нежели за простой. На данный момент хочу просто понять как это работает. А уже потом как это реализовать в дальнейшем, будет понятно после того как пойму что происходит. На Агате вариант более сложный, со счетчиками и прерыванием. Думаю что и на БК к тому же придет. Хотя и на Агате есть более простой вариант, подключение "на прямую" через порт принтера, именно с этого начну исследования на Агате. То есть, можно сказать, неверенные первые шаги эмуляция Марсианки сделала.. Осталось теперь научить ее ходить ровно, а потом уже понятно станет, что даьше.
- - - Добавлено - - -
Я тоже в живую не видел никогда мышь ни на чем, кроме PS/XT - и выше.... То есть, как это долдно быть я не знаю, может оно и должно с трудо на нужную строку наводиться. Показал бы кто нибудь плавность движния реальной марсианки, было бы круто !
- - - Добавлено - - -
В целом, многие игры, при использовании мыши как джойстика, очень даже адекватно управляются. Прям очень хорошо. Некоторые резет или отключают, или очень круто затормаживают, в таких естественно управления либо нет, либо очень тормозное.
Предполагаю, что оболочка в которой я на видео тестил мышь, не очень с таким типом мыши работает,... В общем, местами очень даже неплозо все работает.
Посоветуйте в каких программулинах потестить мышь ?
Ну и следующая проверка будет уже на Агате, через порт принтера, для начала.
- - - Добавлено - - -
Вот еще чутка видео (https://disk.yandex.ru/i/FANgSeW-a8O99w) о работе зверька...
- - - Добавлено - - -
И кстатти, в менеджере файлов scidos в котором я тестил мышь, "ресеты" приходят достаточно редко, в сравнении с другими программами, от сюда и тормознутость курсора.. Предполагаю, что оболочка написана под работу с КМ... А в следствии отсутствия прерываний от мыши, резет дается по минимуму.. Естественно, не претендую на истину, предполагаю...
Показал бы кто нибудь плавность движния реальной марсианки, было бы круто !
В целом, многие игры, при использовании мыши как джойстика, очень даже адекватно управляются. Прям очень хорошо
Не буду повторяться, ранее в топике уже расписывал про странную реализацию мыши на БК, но именно в силу реализации она как джойстик и работает хорошо.
Плавные движения, возможно, смогут продемонстрировать программы для мыши под блок КМ (с опросом по прерыванию). При условии корректного вывода курсора.
А он возможен только на БК11(М), на десятке достичь плавного фреймового _неморгающего_ курсора с мышью по прерываниям, считаю, невозможно.
Точнее, извращаясь с таймером и подстраивая паузу на фрейм, в принципе, можно и на десятке это сделать, но смысл? Любая программа это не только опрос ради опроса.
electroscat
01.02.2022, 14:02
Вот скетч для ардуино, лапки в скетче описаны:
/*
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);
}
}
- - - Добавлено - - -
Может тут кто чего посоветует ?!?
electroscat
02.02.2022, 02:45
Поигрался с разными вариантами обсчета, в итоге, оставил все это без обсчета. Принимать резет в целом действительно нет надобности, ибо резет требовался конструкцией марсианки, ее нужно было сбрасывать, и если резета не было, то она могда насобирать все 4 нуля на все 4 направления... Так и есть. Я попробовал разные комбинации, и самой актуальной и ровной оказался вариант без обработки, так что автору этой ветки форума респект и уважуха !
Скетч практически бех изменений работает максимально хорошо. Думаю на этом останавливаться не стоит, в идеале сделать КМ, если получится, то его реально сделать непосредственно в той де ардунке, которая опрашивает мышь PS/2. причем, можно сделать вариант, который будет работать и как Марсианка через КМ и как марсианка через УП, туда же можно и джой замешать, родной, и так его замешать, чтобы когда нужна мышь, джой был мышью, когда нужен джой - он был джоем... Такую универсальную коробочку для УП было бы круто сваять..
Вот тут видео с последним скетчем, в досе чуть по лучше, но не юзабельно в целом, а вот в программах, которые ждут именно мыши УП - все четенько..
electroscat
02.02.2022, 08:55
Ссылка на видео,... вот (https://disk.yandex.ru/i/GQizuHgWln6SIw).
Ссылка на видео
Не по теме, но через что сделано подключение к ЖК? В "коммандере" изображение отличное, даже было порадовался, но в следом в игре жуткие артефакты...
electroscat
02.02.2022, 14:29
Не по теме, но через что сделано подключение к ЖК? В "коммандере" изображение отличное, даже было порадовался, но в следом в игре жуткие артефакты...
Да, артефакты есть, это FCPGA в моем AZ-БК перегрелся. Имеет место брак микросхемы, микросхема жутко греется и через пол часа артефакты по всему эрану... Это не правило, а исключение, уже договорились о замене. Мне всегда везет на подобные штуки )) Раньше разбирал корпус и ставил вентилятор, на самой микросхеме уже радиатор. Даже если просто корпус открыть, уже по легче, но в следствии того, что на столе разные подключенные платы, ардуины и т.д. - решил закрыть таки корпус,.
- - - Добавлено - - -
Переделал скетч к ардуино, в кратце, БК не принимает диагональные комбинации портов, то есть движение мыши по диагонали весьма корявое. Сделал математику, когда есть диагональное направление, оно заменяется чредованием X/Y/X/Y - и получаются очень плавные мкольжения по диагонали ))))
Так, много я тут пропускаю. Но всё же: я тут озадачился максимально правильной процедурой опроса мыши. Надо?
Диагонали есть.
76964
- - - Добавлено - - -
Принимать резет в целом действительно нет надобности,
Принимать резет НЕОБХОДИМО. Его отсутствие -- это грубейшая ошибка, приводящая к некорректному поведению мыши.
БК не принимает диагональные комбинации портов, то есть движение мыши по диагонали весьма корявое
Да, заметил это в видео (неестественное движение курсора под прямыми углами). Я бы назвал это корявым драйвером мыши, технически диагонали возможны.
Принимать резет НЕОБХОДИМО. Его отсутствие -- это грубейшая ошибка
Ну, если речь о приеме сброса марсианкой - то да. Автор же ваяет что-то из PS/2 плюс Ардуина, там ресет это уже побочка))
Но вполне допускаю, что именно из-за отсутствия сброса у него и скакал курсор.
Ну, если речь о приеме сброса марсианкой - то да. Автор же ваяет что-то из PS/2 плюс Ардуина, там ресет это уже побочка))
Но вполне допускаю, что именно из-за отсутствия сброса у него и скакал курсор.
Ресет марсианский если и использовать, то как источник прерывания для Ардуино, по которому опрашивать мышь ps/2, а потом готовить и выставлять данные для порта УП.
- - - Добавлено - - -
Переделал скетч к ардуино, в кратце, БК не принимает диагональные комбинации портов, то есть движение мыши по диагонали весьма корявое. Сделал математику, когда есть диагональное направление, оно заменяется чредованием X/Y/X/Y - и получаются очень плавные мкольжения по диагонали ))))
Где можно посмотреть на эту математику (на код) ? :)
electroscat
03.02.2022, 12:02
Где можно посмотреть на эту математику (на код) ? :)
/*
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
int MX_B = 0; // переменная для чтения и буферизации перемещения по оси Х
int MY_B = 0; // переменная для чтения и буферизации перемещения по оси Y
bool XY = LOW; // переменная, для чередования диагональных перемещений
#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
void setup()
{
/*
Аппаратный UART подключаем к ПЭВМ... с эмулятором БК-шки, и/или прочим софтом для связи по UART
*/
Serial.begin(38400); 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(38400); // 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
}
/*
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(50);
}
/*
Обнуляем координатные переменные контроллера.
*/
void reset_XY()
{
//Serial.print("\t+-------+");
digitalWrite(marsR, HIGH);
digitalWrite(marsL, HIGH);
digitalWrite(marsUP, HIGH);
digitalWrite(marsDn, HIGH);
//MY_B = 0;
//MX_B = 0;
//digitalWrite(marsLB, HIGH);
//digitalWrite(marsRB, HIGH);
//Serial.println();
}
/*
считываем данные с мышки и выводим в 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)
{
reset_XY();
} */
// Просмотр битов направлений на предмет наличия диагональных
if (mX==0&&mY==0)
{
reset_XY();
goto end_loop;
}
if (mX > 0&&mY > 0)
{
Serial.print("\t+Вправо+Вверх");
if (XY==LOW)
{
mX=1;
mY=0;
}
else
{
mX=0;
mY=1;
}
XY=!XY;
}
else if (mX > 0&&mY < 0)
{
Serial.print("\t+Вправо+Вниз");
if (XY==LOW)
{
mX=1;
mY=0;
}
else
{
mX=0;
mY=-1;
}
XY=!XY;
}
else if (mX < 0&&mY > 0)
{
Serial.print("\t+Влево+Вверх");
if (XY==LOW)
{
mX=-1;
mY=0;
}
else
{
mX=0;
mY=1;
}
XY=!XY;
}
else if (mX < 0&&mY < 0)
{
Serial.print("\t+Влево+Вниз");
if (XY==LOW)
{
mX=-1;
mY=0;
}
else
{
mX=0;
mY=-1;
}
XY=!XY;
}
// Влево
if ( mX < 0 ) // -1
{
Serial.print("\t+Влево");
digitalWrite(marsL, LOW);
//mX=-1;
}
else
{
Serial.print("\t-");
digitalWrite(marsL, HIGH);
}
// Вправо
if ( mX > 0 ) // 1
{
Serial.print("\t+Вправо");
digitalWrite(marsR, LOW);
//mX=1;
}
else
{
Serial.print("\t-");
digitalWrite(marsR, HIGH);
}
// Вверх
if ( mY > 0 ) // 1
{
Serial.print("\t+Вверх");
digitalWrite(marsUP, LOW);
//mY=1;
}
else
{
Serial.print("\t-");
digitalWrite(marsUP, HIGH);
}
// Вниз
if ( mY < 0 ) // -1
{
Serial.print("\t+Вниз");
digitalWrite(marsDn, LOW);
//mY=-1;
}
else
{
Serial.print("\t-");
digitalWrite(marsDn, HIGH);
}
end_loop:
if ( mStat & 0x01 )
{
Serial.print("\t+ЛевКн");
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(marsLB, LOW);
}
else
{
digitalWrite(LED_BUILTIN, HIGH);
Serial.print("\t-");
digitalWrite(marsLB, HIGH);
}
if ( mStat & 0x02 )
{
Serial.print("\t+ПравКн");
digitalWrite(marsRB, LOW);
}
else
{
Serial.print("\t-");
digitalWrite(marsRB, 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(50);
// 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());
}
}
- - - Добавлено - - -
Как видно из скетча, я ввел резет в ардуино, и даже пытался его обрабатывать, правда для сброса порта, как на оригинале... то есть делал чтобы направления только в 0 стаавились, а в 1 по резету. Пытался его и как прерывание использовать, но очень медренно все работает. В таком виде - все максимально хорошо.
Да, ноги нерераспределил для собственного удобства.
- - - Добавлено - - -
Собираюсь сегодня грызуна к Агату подключить, уже восстановил вчера плату порта принтера, в простом варианте грызун через него подключается к Агату.
- - - Добавлено - - -
Ну и в любом случае, на мой взгляд, если даже в БК в софте с нормальным драйвером есть диагональное перемещение, страшного ичего если это диагональное перемещение будет считать ардуино, разница не большая, думаю, примерно ттак же все выглядит.
- - - Добавлено - - -
76964
.
Прошу мне простить мое невежество, а как запустить бинарник на БК? Я его в образ положил, запускаю под СSIDOS и все виснет.. Под что он ?
- - - Добавлено - - -
Под ANDOS заработало )
- - - Добавлено - - -
В целом, в этой программе диагональные обрезания не нужны. с ними есть некоторая дискретность при диагональном перемещении,.
- - - Добавлено - - -
Принимать резет НЕОБХОДИМО. Его отсутствие -- это грубейшая ошибка, приводящая к некорректному поведению мыши.
Я не против, давайте обсудим.
Резет имел бы смысл если бы он являлся синхроимпульсом для мыши. То есть, если после резета сразу снимаются данные с мыши - это да, это было бы супер ! Если как то по другому, например данные снимаются и после резет - то это другое, в целом бесполезное.
То есть, если по приходу резет я выкидываю в порт данные с мыши, а драйвер их читает, а потом следющий резет дает мыше понять, что нужно обновить данные в порту, такая схема была бы весьма неплохой. И тогда, опрос мыши драйвером сразу после резета дает взможность получить точные данные о перемещении, а после этого чтение прекращается, и производится только после следующего резета.
- - - Добавлено - - -
Проблема еще и в том, что за годы сущесвования БК и марсианки существует много наверняка способов опроса мыши. Благо ардуино позволяет сделать кучу переклюков и выдавать под разные программы разные типы данных ))) Можно что то универсальное сделать, и под всех подстроиться )))
Вкратце: я сейчас вроде бы в эмуляторе запилил нормальную поддержку мыши, но надо проверить везде. И на сброс она таки полагается. Надо всё-таки собраться и выложить сборку, пусть все проверят.
если после резета сразу снимаются данные с мыши - это да, это было бы супер !
Увы, конструкция мыши такова, что ресет служит именно ресетом. Приняли данные от мыши, послали сброс - только так.
Без сигнала сброса все биты направлений взведутся и так и останутся активными. Поэтому драйвер на БК сперва читает порт, потом делает сброс. Но не наоборот.
за годы сущесвования БК и марсианки существует много наверняка способов опроса мыши
Ну как бы стандарта два: напрямую в порт УП (без прерывания от мыши) и через блок КМ (с прерыванием).
electroscat
03.02.2022, 22:28
У Агата все очень серьезно, есть событие, по которому приходит резет. Работает все так: ПРихдит резет, первое показание если мышь в движении - читается, следующее, вот как раз то мусорное показание - оно служит драйверу для понимания того, что нужно делать следующий резет, то есть, драйвер следит за изменением в порте, на нули после резета он не реагирует, на смену нулей на первое и единственно правильное значение драйвер реагирует как на бит направления, следующее изменение в порту работает как сигнал для выдачи резета, и так далее...
И вот тут появляются сразу же проблемы у ардуиновской реализации мыши... Мусор то не образуется в порту вторым значением. В итоге, пока мышь бедется медленно, и есть небольшие перерывы в данных с ардуино, или если мышь ведется чуть по диагонали - когда есть вкрапления другой координаты, что то меняется, приходит резет, и в целом все работает. Как только мышь ведется ровно, и какое то время координаты повторяются, курсор останавливается.. Что делать пока не понимаю, пытался посылать через каждое одинаковое значение четыре нуля, но что то это ни к чему не привело. Пока думаю что с этим делать.
- - - Добавлено - - -
Мусье который прицепил марсианку к Агату - он знал толк в извращениях )))
Жуть! На БК всё гораздо проще. Единственная опасность -- это пропустить щелчок энкодера, если программа тормозит. Просто надо применять стратегию -- увидел поднятые биты, учёл, сбросил мышь и всё.
А вот на чём я бы хотел настоять всё же: мышь -- это не джойстик. Это устройство ввода координатное. То есть, надо мерить не только факт движения, но конкретно, сколько она проехала. Со сбросом, как на БК, марсианский протокол это позволяет. Предлагаемый протокол -- не очень.
electroscat
04.02.2022, 01:49
Предлагаемый протокол -- не очень.
Я пока ничего не предлагаю, я просто пока не пойму как реализовать на агате марсианку из PS/2...
Мне понятно почему на Агате так сделано, это процессор частотой 1мгц, 8 битный, там не получится долбить в марсианку запросами. По этому придумали такой способ, использовать "мусорный" бит, изменения в порту после снятия первых значени после сброса.
electroscat
04.02.2022, 14:03
Чего то более менее намутил для Агата...
Сразу вылезла проблема.. Устрйство не координатное.. Ибо с PS/2 мыши приходит скорость перемещения в виде числа по координате, а в скетче любое число больше (или меньше) нуля воспринимается как напраление. То есть, нужно само число тоже грузить в какую то переменную, и использовать для ограничения или увеличения количества выдачи в порт данных. С Агатом вообще получается сложно. Генерировать мусор в порт для того чтобы драйвер прислал резет и считал следующюю координату нужно с задержкой, а задержа в свою очередь может быть разной для разной скорости перемещения. Все это преобретает более сложный оттенок, и для меня (я уже давно не пракликовался в программировании) таки сложновато в данный момент. Тем не менее, буду продолжать движение в этом направлении. Если кому то надо последние версии кода для БК и Агата - напишите, я выложу. Буду очень признателен, если кто то с более серьезными знаниями C возьмется за дело, и сделает алгоритм идеальным )))
Так зачем задержка-то? Это по сути два счётчика с последовательной пошаговой синхронизацией. Я в эмуле так и сделал, писал вроде уже -- у меня накапливается суммарное перемещение мыши и после каждого ресета по единичке уменьшается. Вроде работает.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot