- Эмуляция мышь Марсианка с помощью мыши PS/2
- [+] Старые сообщения (5)
-
? Voland@ - 24.08.2012 14:29
Ну вы мне расскажите, как перекодировать, я ему передам, а если будет непонятно, позову сюда.
-
? Александр Тишин (Sandro)@ - 24.08.2012 14:58
Блин, ну я же русским языком написал, что нельзя "перекодировать"!!! Как я могу описать, как делать то, что сделать невозможно?
-
? Voland@ - 24.08.2012 15:07
Оговорился. Как ПРЕОБРАЗОВАТЬ ?
-
? Александр Тишин (Sandro)@ - 24.08.2012 15:21
Вот непонимание этого вопроса и вызывает моё непонимание :)
Суть в следующем: в протоколе PS/2 передаётся смещение мыши по обеим координатам с момента предыдущего сообщения. То есть, например, [X+19, Y-2]. Тут вроде как всё понятно.
В протоколе "Марсианки" (тянутом ЕМНИМС с Ямахи MSX), мышь передаёт команды типа "шагнуть +1/0/+1 по этой координате". Ну вроде же тривиальное преобразование, мне непонятно, какие тут вообще могут быть проблемы. Ну чего сложного в том, чтобы из того, что я привёл выше, сгенерировать два сообщения [X+,Y-] и семнадцать [X+]?
-
? Voland@ - 25.08.2012 02:00
От разработчика:
Насколько помню, на мыши не команды. а выходы с двух оптопар, сдвинутые по фазе.
"команда" получается путем анализа, какая фаза опережает другую при вращении, это не совсем то же самое.
-
? anonymous - 25.08.2012 06:37
Посмотрите схему в конце концов, зачем бредить, теряя время и силы? http://forum.maxiol.com/index.php?act=Attach&type=post&id=4137
-
? Voland@ - 25.08.2012 12:51
Разработчик сказал что проблема не в преобразовании и не только в усложнении контроллера PS/2 (чтобы он мог работать в разных режимах), а в том, что непрерывная подача конвертированных сигналов на УП - это очень плохо, т.к. при подключении каких-то других активных устройств на входы УП может привести к КЗ.
Поэтому предлагается перекодированные сигналы направлять в виртуальный регистр, который подменять с реальным. Вот это и есть основной вопрос, как так подменять, чтобы исключить конфликт регистров.
-
? Александр Тишин (Sandro)@ - 25.08.2012 13:40
Чем дальше, тем страньше. Какое КЗ? Внутри FPGA вообще не может быть КЗ, компилятор не даст такую схему сделать. Если же снаружи, то шина МПИ -- это "проводное И", она специально так сделана, чтобы КЗ было невозможно.
-
? Александр Тишин (Sandro)@ - 25.08.2012 14:17
anonymous: хм, интересная схема, мне почему-то казалось, что там больше одного бита памяти на смещение координаты; видать, действительно попутал с MSX мышью. Но конструкция смешная: ну вот зачем эти буфера из спаренных инверторов, да ещё и собранных из разной логики? То есть, слева понятно, что это "триггер Шмитта своими руками", но справа-то это зачем?
Да и ТШ в виде микросхемы вполне себе выпускался :)
-
? Voland@ - 25.08.2012 15:40
Проводное И - это конечно весело, особенно учитывая, что мышь включается не в МПИ, а в УП, где физически на выходе стоит обычный регистр (589ИР12 или 1533ИР22 в зависимости от модели). А компилятор такую схему сделать очень даже даст, ибо мы как раз ему это зададим, чтобы подсовывать сигналы на выход. Вообще входы УП пользователь вправе соединить с землей, питанием или каким-то выходом - все это не противоречит оригинальной спецификации и в этом случае ПЛИС будет бодаться с тем, что туда пользователь подаст; в обычном режиме там ничего страшного нет, ибо регистр туда идет входом, а выходом на процессорную шину, но теперь туда предлагается подать выход ПЛИС для имитации сигнала мыши и схема перестает быть входом, а если мы объединяем эти сигналы внутри ПЛИС, мультиплексором к примеру, то непонятно кто будет управлять этим самым мультиплексором, так что у нас все равно получается как бы КЗ, только логическое.
-
? Александр Тишин (Sandro)@ - 25.08.2012 17:51
Кажется, я начинаю понимать, в чём же у вас проблема. У вас вход порта сделан на отдельных буферах (странное решение, ну да ладно), и вы почему-то думаете, что сигнал от эмулируемой мыши нужно заводить на входы этих буферов.
Нет, так делать не надо. Надо его заводить непосредственно на шину МПИ. И "проводное И" всё сделает само. Мультиплексоры не нужны. А "логического КЗ" бояться не нужно. Если пользователь подключает конфликтующие устройства, то это его проблемы.
-
? anonymous - 25.08.2012 18:30
「anonymous: хм, интересная схема, мне почему-то казалось, что там больше одного бита памяти на смещение координаты; 」
Вам не казалось, счетчики действительно стоят, но не в мышке, а на плате компа, так же как и в ДВК КЦГД.
Выходные же буфера накручены для того, чтоб из КМОП-уровней сделать ОК.
-
? Ал-р - 25.08.2012 20:09
Вот только шину МПИ к пись-мись припутывать не нужно - для внешних устройств есть УПсь.
У пись-мись абсолютно никакой совместимости с БК естественно нет и быть не может, нужен драйвер для PS2->Марсианка - и как же его к масианским программам приделать?
-
? Voland@ - 26.08.2012 11:53
Sandro, Ваш пост непонятен разработчику, можете более подробно логику предлагаемого Вами решения описать?
И что странного в отдельных буферах, разве в БК они не отдельные?? У нас входы через резисторную сборку будут идти прямо на ПЛИС.
-
? gid@ - 26.08.2012 12:53
Пожалуй и я встряну.
Ал-р высказал дельную вещь. Нужен преобразователь сигналов PS/2 мыши в обычные понятные БК сигналы.
У меня есть мышь Марсианка и есть некий блок КМ, к которому эта мышь подсоединяется, а блок - к разъёму УП.
И мышь на БК с программной точки зрения абсолютно ничем не отличается от джойстика. Мы опрашиваем регистр 177714, и в зависимости от выставленных там битов, совершаем необходимые действия.
маска функция
-----------------------------
0040 левая кнопка
0100 правая кнопка
0010 влево
0002 вправо
0001 вверх
0004 вниз
Если мы хотим полную совместимость, то только так. А если хотим что-то совершенно новое, то да, делать свой контроллер мыши со своими портами, цеплять его к МПИ и т.д.
А то, что разработчик Volandа сказал, "что непрерывная подача конвертированных сигналов на УП - это очень плохо, т.к. при подключении каких-то других активных устройств на входы УП может привести к КЗ"
Это как раз то самое ограничение БК, которое мы старательно хотим сохранить - не более одного активного устройства при работе БК, т.к. порт то всего один.
-
? Voland@ - 26.08.2012 13:40
От разработчика:
все это понятно, только вот на главный вопрос ответа так и нет: из какого места считывать данные при обращении к регистру 177714? Ибо даже если пользователь будет чудо как осторожен и не воткнет что-то при использовании мыши, то все равно, как отключать имитатор мыши и как его потом включать ?
Как обеспечить то самое "не более одного активного устройства при работе БК” ?
В реальном БК такой проблемы просто нет - в один разъем УП два устройства не воткнуть.
-
? gid@ - 26.08.2012 14:26
А если у каждого разного устройства будет свой отдельный разъём, то почему бы не поставить между разъёмом и входным регистром 177714 что-то вроде 555ЛП8. И пускай они все вместе шлют сигналы в 177714 и мешают друг-другу, зато при одновременном подключении не спалят друг-друга, больше я не вижу мест, где там КЗ может получиться.
-
? Voland@ - 26.08.2012 14:42
Ну таким образом получим логическое КЗ, т.е. никогда не отключаемую от УП мышь Марсианка.
-
? Александр Тишин (Sandro)@ - 26.08.2012 15:26
gid, ну особых проблем с таким адаптером я не вижу :)
Правда, вы забыли про входной бит у мыши, который ей говорит, что команда о перемещении принята (третий ЕМНИМС). А так -- ATtiny с подходящим числом выводов хватит с огромным запасом, и всех дополнительных компонентов -- блокировочный конденсатор по питанию. Логика преобразования же тривиальна.
-
? Voland@ - 26.08.2012 17:18
А как бОльшая часть БКшного софта работает с мышью, напрямую читая порт, или есть какой-то драйвер, может в мониторе БК прошиты какие-то подпрограммы?
Просто разработчик утверждает, что наиболее универсальным и красивым было бы решение проблемы на уровне драйвера. Но как я себе представляю, большая часть старых программ лазят прямо в порт. Разве что в GUI CSIDOS есть какие-то дрова в общепринятом смысле.
Главным образом проблема в том, что УП вешается на вспомогательную ПЛИС, а PS/2 на основную, и нужно каким-то хитрым образом скомбинировать сигналы из двух разных ПЛИС.
-
? gid@ - 26.08.2012 19:35
Почему логическое КЗ? Почему не отключаемую? У ЛП8 есть вход разрешения, подадим туда единицу и всё, мышь отключена. Другое дело, как это разрешение делать, механическим переключателем, или по изменению импеданса на входах разъёма мыши. Хотя, электротехнику я изучал давно и могу быть просто не компетентен в тонкостях.
---------
И точно, перед получением данных надо обнулить бит 3, после получения данных - установить. На кнопки он не влияет, только на перемещение.
---------
В моё время мышь для БК была огромной редкостью и чуть ли не уделом избранных, сам я заимел её совершенно случайно и примерно за год до того, как забросил БК.
И каждый, кто делал поддержку мыши, делал её сам по себе.
В мониторе БК точно нет ничего, касательно мыши
Проблем в драйвере нет никаких, написать можно любой, какой душе будет угодно. Вот например мой, вешается на вектор 100, причем управлять мышиным курсором можно как мышью, так и с клавиатуры стрелками:
-----------
DSTROB=10
TAKT=0
¤
MADDR=400
MX=402
SHIFT=403
MXG=404
MYG=406
¤
CALL INIT
MOV #45400,@#177662
MOV #100,@#177660
MOV #T100,@#100
MOV #340,@#102
MOV #5400,@#177662
1: TST LB
BEQ 0
MOV #3,R2
MOV #5,R3
CALL @#102062
0: TST RB
BEQ 1
MOV #45400,@#177662
JMP @#100000
¤
T100: CALL DRAWMS
RTI
¤
INIT: JSR R5,@#154512
MOV #0,R1
MOV #0,R2
BR 1
¤
DRAWMS: JSR R5,@#154512
CLR (PC)+
LB: .WORD 0
CLR (PC)+
RB: .WORD 0
MOV @#177714,R0
BNE 4
BIT #100,@#177716
BNE 0
2: MOV @#177662,R1
MOV #KEYS,R2
6: TSTB (R2)
BEQ 3
CMPB (R2)+,R1
BNE 5
BISB (R2)+,R0
BR 6
5: INC R2
BR 6
¤
4: BIT #100,@#177716
BEQ 2
3: BIT #40,R0
BEQ 01
MOV PC,LB
01: BIT #100,R0
BEQ 02
MOV PC,RB
02: MOV #TAKT,@#177714
CALL RESTOR
¤
MOV MYG,R2
MOV MXG,R1
0UP: BIT #1,R0
BEQ 0RIGHT
TST R2
BEQ 0RIGHT
SUB #2,R2
0RIGHT: BIT #2,R0
BEQ 0DOWN
CMP #376,R1
BLOS 0DOWN
ADD #2,R1
0DOWN: BIT #4,R0
BEQ 0LEFT
CMP #367,R2
BLOS 0LEFT
ADD #2,R2
0LEFT: BIT #10,R0
BEQ 0EX
TST R1
BEQ 0EX
SUB #2,R1
0EX:
1: MOV R1,MXG
MOV R2,MYG
SWAB R2
BIS R2,R1
CLR R2
SEC
ROR R1
ROL R2
ROR R1
ROL R2
MOVB OFFST(R2),SHIFT
MOV R1,MADDR
BIC #177700,R1
MOVB R1,MX
CALL STORE
0: MOV #DSTROB,@#177714
RETURN
¤
KEYS: .BYTE 32,1
.BYTE 31,2
.BYTE 33,4
.BYTE 10,10
.BYTE 12,40
.BYTE 40,40
.BYTE 3,100
.BYTE 0,0
¤
OFFST: .BYTE 0,60,30,110
¤
;восстановим экран под стрелкой
RESTOR: MOV MADDR,R1
MOV #STIL,R2
MOV #8.,R3
MOV #76,R4
CMPB MX,R4
BEQ 2
BHI 1
0: MOVB (R2)+,(R1)+
MOVB (R2)+,(R1)+
MOVB (R2)+,(R1)
ADD R4,R1
SOB R3,0
RETURN
2: MOVB (R2)+,(R1)+
MOVB (R2)+,(R1)+
INC R2
ADD R4,R1
SOB R3,2
RETURN
1: MOVB (R2)+,(R1)
BIT (R2)+,(R1)+
ADD R4,R1
SOB R3,1
RETURN
¤
;сохраним экран под стрелкой и выведем стрелку
STORE: MOV MADDR,R1
MOV #8.,R5
MOV #76,R0
MOV #STIL,R2
MOVB SHIFT,R3
MOV R3,R4
ADD #STILM0,R3
ADD #STILI0,R4
CMPB MX,R0
BEQ 12
BHI 11
10: MOVB (R1),(R2)+
BICB (R3)+,(R1)
BISB (R4)+,(R1)+
MOVB (R1),(R2)+
BICB (R3)+,(R1)
BISB (R4)+,(R1)+
MOVB (R1),(R2)+
BICB (R3)+,(R1)
BISB (R4)+,(R1)
ADD R0,R1
SOB R5,10
RETURN
12: MOVB (R1),(R2)+
BICB (R3)+,(R1)
BISB (R4)+,(R1)+
MOVB (R1),(R2)+
BICB (R3)+,(R1)
BISB (R4)+,(R1)+
INC R3
INC R4
INC R2
ADD R0,R1
SOB R5,12
RETURN
11: MOVB (R1),(R2)+
BICB (R3)+,(R1)
BISB (R4)+,(R1)
BIT (R3)+,(R4)+
BIT (R2)+,(R1)+
ADD R0,R1
SOB R5,11
RETURN
¤
STIL: .WORD 0,0,0,0,0,0,0,0,0,0,0,0
¤
STILM0: .WORD 37777,1400,60,176017,6000,300,141474,30000,377,1760,0,0
¤
STILM2: .WORD -4,6000,300,170074,30003,1400,6360,140003,1774,7700,0,0
¤
STILM4: .WORD -20,30003,1400,140360,140017,6000,31700,14,7763,37400,0,0
¤
STILM6: .WORD 177700,140017,6000,1700,77,30003,147400,60,37714,176000,0,0
¤
STILI0: .WORD 0,176000,17,1760,170000,77,36300,140000,0,0,0,0
¤
STILI2: .WORD 0,170000,77,7700,140000,377,171400,0,3,0,0,0
¤
STILI4: .WORD 0,140000,377,37400,0,1777,146000,3,14,0,0,0
¤
STILI6: .WORD 0,0,1777,176000,0,7774,30000,17,60,0,0,0
¤
.END
¤
¤
- << Форум