Сообщение от
troosh
Ну а далее видимо просто выбрали код максимально удаленный от значения 0xF (мышь неподключена), т.е. в любом направлении (инкремент/декремент) потребуется больше всего импульсов чтобы перейти из 8 в 0xF. Ну а потом в драйвере эту восьмёрку вычитают, чтобы получилось число со знаком...
Тут все проще. Просто у этой мыши инвертированный знак. Таким образом, -8 - это нулевое смещение с отрицательным знаком. Т.е. если мышь подключена, но по X не перемещается, то смещение всегда равно 0. Инвертируем знак, получаем -8 (т.к. у нас 4-битный счетчик со знаком). Вот эту восьмерку при инициализации драйвер и проверяет.
- - - Добавлено - - -
В общем, систематизировал особенности работы драйверов MSX-мыши и Корветовской мыши:
Код:
При инициализации мыши MSX:
Первый опрос мыши MSX:
Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x580 (строб 1)
Read word from CPU register PPIC from location PC=0x588
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x58A (строб 0)
Read word from CPU register PPIC from location PC=0x5A2
Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x5A4 (строб 1)
Read word from CPU register PPIC from location PC=0x5BC
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5BE (строб 0)
Read word from CPU register PPIC from location PC=0x5D6
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5F0 (сброс строба перед опросом кнопок)
Второй опрос мыши MSX:
Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x580 (строб 1)
Read word from CPU register PPIC from location PC=0x588
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x58A (строб 0)
Read word from CPU register PPIC from location PC=0x5A2
Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x5A4 (строб 1)
Read word from CPU register PPIC from location PC=0x5BC
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5BE (строб 0)
Read word from CPU register PPIC from location PC=0x5D6
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5F0 (сброс строба перед опросом кнопок)
Код:
При инициализации мышки Корвет:
Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x546
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x54C
Read word from CPU register PPIC from location PC=0x550 (X-смещение) ($8 - для стоячей мыши (-0))
Опрос мышки Корвет:
Read word from CPU register PPIC from location PC=0x580 (X-смещение)
Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x582 (строб 1)
Read word from CPU register PPIC from location PC=0x5B8 (Y-смещение)
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5BA (строб 0)
Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x600 (сброс строба перед опросом кнопок)
Таким образом, можно выделить признаки, по которым со стороны эмулятора можно четко определить, какую мышь опрашивает драйвер:
Для переключение на корветовскую мышь - это:
Строб=1, затем строб=0, без промежуточных чтений порта C.
(данное состояние происходит при инициализации Корветовской мыши)
А переключение на MSX-мышь - это:
Строб=0, затем строб=1, без промежуточных чтений порта C.
(данное состояние происходит между двумя чтениями MSX-мыши)
Есть еще и третье подобное состояние, которое встречается перед чтением кнопок для Корветовской мыши:
Строб=0, затем строб=0, без промежуточных чтений порта C.
Но оно ни на что не влияет, и отслеживать его не нужно.