В этой статье приведен перевод документации [1], которая описывает работу клавиатуры и мыши совместно с Interface 1bis (сокращенно IF1bis) и компьютером ZX Spectrum.
[Мышь]
К разъему PS/2 интерфейса может быть подключена мышь PS/2 или двухрежимная (мышь, поддерживающая оба интерфейса, и PS/2 и USB, но только не чисто мышь USB). В результате подключенная мышь будет работать в режиме совместимости с мышью Kempston, и предоставлять данные на следующих портах ввода/вывода Z80:
Порт I/O |
Функция бит |
#FBDF или #1F |
Биты 0-7 это координата X (0..255). |
#FFDF или #DF |
Биты 0-7 это координата Y (0..255). |
#FADF или #5F |
Бит 0 соответствует правой кнопке, бит 1 соответствует левой кнопке (лог. 1 означает, что кнопка не нажата). Биты 2..7 не используются. |
Чтобы мышь корректно определилась на интерфейсе PS/2, она должна быть подключена туда до того, как будет подано напряжение питания. Это особенность мыши PS/2, а не интерфейса IF1bis.
Текущее состояние мыши отображается светодиодом M (описание светодиодов см. в [3]):
• Если светодиод M не горит, то мышь не подключена или запрещена. • Светодиод M горит постоянно - мышь работает как мышь Kempston. • Светодиод M мерцает - мышь работает как джойстик Kempston. Мерцание происходит на половине частоты опроса мыши.
Разрешение/запрет мыши. Работу мыши можно разрешать и запрещать с помощью нажатий на кнопки мыши следующим образом:
• Мышь будет запрещена, если нажать её обе кнопки одновременно. • Если мышь запрещена, то её можно разрешить как мышь Kempston, если нажать на её правую кнопку. • Если мышь запрещена, то нажатие на её левую кнопку разрешает работу мыши как джойстика Kempston. • Также мышь может быть запрещена, если нажать на одну из кнопок джойстика.
Примечание: когда мышь разрешена, то коннектор джойстика не работает, и наоборот.
Мышь по умолчанию разрешена в "оконном" режиме, когда она сообщает о своих координатах относительно конфигурируемого окна. Также мышь может работать и в legacy-режиме мыши Kempston, когда значение координаты перепрыгивает через 255 в 0 и обратно.
Конфигурирование мыши. Для конфигурирования драйвера мыши можно посылать микроконтроллеру интерфейса специальные команды:
CAT 0;"m"+строка+..+строка
Строки |
Функция |
"e" |
Разрешить мышь. |
"d" |
Запретить мышь. |
"w" |
Оконный режим. |
"x"+CHR$X |
Установить ширину окна в пикселях X=16..255. |
"y"+CHR$Y |
Установить высоту окна в пикселях Y=16..192. |
"j" |
Запустить работу мыши как джойстика. |
"s"+CHR$S |
Установить чувствительность мыши в режиме джойстика S=3..32. |
"r"+CHR$R |
Установить частоту опроса мыши в режиме джойстика в Герцах R=1..10. |
[Клавиатура]
Вместо мыши к интерфейсу PS/2 может быть подключена стандартная клавиатура PS/2. Firmware микроконтроллера интерфейса обрабатывает последовательность скан-кода клавиатуры, и выводит декодированный результат в порт #FD в качестве "кодов клавиш" со следующим назначением бит. Биты 0..5 передают номер клавиши (0..38). Отсутствие нажатия передается битами 0..5 как код 39. Бит 6 передает нажатие клавиши Symbol Shift, а бит 7 клавиши Caps Shift.
Коды клавиш читаются параллельно со штатной клавиатурой ZX Spectrum с помощью "пропатченной" подпрограммой сканирования клавиатуры по адресу #028e кода BASIC ROM интерфейса.
Таким образом, с клавиатурой PS/2 будут работать только те программы которые используют стандартный опрос клавиатуры через ПЗУ ZX Spectrum. Также внешняя клавиатура будет работать только в активном режиме интерфейса (Active Mode, подробнее про режимы интерфейса см. [3]). К сожалению, большинство игр осуществляют опрос клавиатуры самостоятельно, и с ними будет работать только штатная клавиатура ZX Spectrum.
Специальные привязки кнопок клавиатуры PS/2
Клавиатура PS/2 |
ZX Spectrum |
Esc |
BREAK |
Tab |
EDIT |
Caps Lock |
CAPS LOCK |
Home |
TRUE VIDEO |
End |
INVERSE VIDEO |
Insert |
GRAPH |
Backspace |
DELETE |
` |
Символ фунта стерлингов |
Delete |
Символ копирайта |
Shift |
CAPS SHIFT |
Ctrl |
SYMBOL SHIFT |
Windows |
EXTENDED MODE |
Режим эмуляции джойстика Kempston. Кнопка Num Lock клавиатуры PS/2 переключает режимы между "нормальной" клавиатурой и режимом "джойстика", в котором кнопки управления курсором (оси направления) вместе с кнопкой Ctrl (огонь) эмулируют джойстик Kempston, а все другие клавиши выполняют свою обычную функцию. Эмуляция джойстика работает даже когда интерфейс находится в неактивном режиме (Inactive Mode, подробнее про режимы интерфейса см. [3]).
Ускоренный ввод (Tokenizer). Любое ключевое слово можно набрать путем ввода его первых 2..4 символов, достаточных для однозначного его определения, если удерживать клавишу Alt, и затем отпустить её.
[Захват вывода клавиатуры и мыши на компьютере сервера]
На компьютере сервера клавиатура или мышь, когда сервер подключен к Interface 1bis через порт USB, может использоваться как устройства ввода ZX Spectrum, если ничего не подключено в сокет PS/2 интерфейса.
Чтобы включить и выключить эту функцию, наберите команду extended BASIC: CAT 0,"k". Когда эта функция включена, на сервере всплывет новое окно, в котором будет захватываться ввод клавиатуры и мыши. Нажатие клавиши Page Down в этом окне выключит эту функцию.
Все относящиеся к физической мыши или физической клавиатуре функции, упомянутые выше, также будут работать и с клавиатурой/мышью сервера, за исключением режима "мыши как джойстика", который выбрать нельзя.
Невозможно одновременно захватывать данные и мыши, и клавиатуры. Когда разрешена мышь, то ввод клавиатуры недоступен, и наоборот.
Ввод мыши может захватываться даже тогда, когда интерфейс находится в "неактивном" режиме (Inactive Mode, подробнее см. [3]).
[Ссылки]
1. Mouse and Keyboard for the Interface 1bis site:sites.google.com. 2. Interface 1bis для ZX Spectrum. 3. Interface 1bis: быстрый старт.
|