Interface 1bis: работа клавиатуры и мыши Печать
Добавил(а) microsin   

В этой статье приведен перевод документации [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: быстрый старт.