Оптическая мышь для компьютера Amiga

Amiga Tank MouseAmiga Tank Mouse

В начале и середине девяностых годов прошлого века компьютеры Amiga представляли собой настоящий мультимедийный комбайн способный рисовать фотореалистичную графику и играть цифровой звук. IBM PC совместимые только-только выбирались из эпохи PC Speaker и учились рисовать более чем в 16 цветах, а на Amiga это все уже было в клавиатурном форм-факторе. Кроме того, из-за изначальной направленности на работу с телевизором как устройством вывода, Amiga отлично работала с видеосигналом, что позволяло например региональным телестудиям экономить на оборудовании для титров. Все это дополнялось многозадачной оконной операционной системой, работать в которой без мышки было крайне неудобно. Поэтому в базовую комплектацию компьютера входил манипулятор типа мышь.

Выполненная в форм-факторе клавиатуры, Amiga обладает двумя универсальными портами стандарта DB9 Male для подключения периферии. Оба порта равноценны, хотя например в Workbench мышь изначально работает только в первом порту, а световое перо только во втором, но может быть переключено перемычкой на плате. Максимальный ток нагрузки порта составляет 50 мА, что необходимо учитывать при подключении самодельной периферии.

Схемотехника Amiga старается использовать все компоненты максимально эффективно, поэтому сигналы с периферийных портов можно разбить на три большие группы

  • 4 цифровых входа, мультиплексированные между обоими портами с помощью микросхемы 74LS157, читаются чипом DENISE. Эти входы подтянуты к питанию через резисторы номиналом в 4.7 кОм поэтому активный уровень у них ноль

  • 2 аналоговых канала каждого порта, подключенные к 5 и 9 контактам периферийного порта, обрабатываются чипом PAULA и представлены как два восьмибитных регистра. На них можно подавать напряжение от нуля до 5 вольт

  • 1 кнопка кнопка Action, которая обрабатывается внутри чипа CIA, для джойстика, и внутри Agnus, для светового пера

Периферийный порт компьютера AmigaПериферийный порт компьютера Amiga

Для геймпада было принято решение использовать стандарт Atari, о чем пользователи компьютера сожалеют до сих пор. Ведь на нем всего одна кнопка. Вторую и третью кнопки цифрового джойстика можно обрабатывать через два оставшихся контакта аналогового порта, но большинство игр просто игнорировали потенциальное наличие этих кнопок, используя для дополнительных действий кнопки клавиатуры. Подробнее о программировании устройств ввода можно прочесть в документации.

Подключение мыши в виде двух квадратурных энкодеров и сигналов с кнопок широко использовалось в эпоху восьми и шестнадцати битных компьютеров. Применялись они для Atari ST, ZX Spectrum, Mac Plus и того же IBM PC, в котором мышь с таким способом подключения называлась Bus mouse. Любую мышь для этих ПК можно подключить к другой системе банальной перепайкой коннектора.

Таблица ниже хорошо иллюстрирует зоопарк стандартов тех лет. У меня в наличии есть только Amiga 500, так что использовать данные оттуда нужно с опаской. Главное правило при подключении мышек — найти контакты питания и подключать кнопки в последнюю очередь, так как их нажатие способно вызвать короткое замыкание порта.

Список мышек совместимых с Bus MouseСписок мышек совместимых с Bus Mouse

Компьютеры Amiga поставлялись в комплекте с так называемой Amiga Tank Mouse, выполненной в индустриальном стиле. Увидеть ее изображение можно в заголовке к этой статье. У мыши было всего две кнопки и очень простая плата. Её принципиальная схема приведена ниже.

Принципиальная схема Amiga Tank MouseПринципиальная схема Amiga Tank Mouse

Как видно из схемы, сигналы от фотодиодов нормализуются при помощи компаратора на микросхеме LM339. То же самое можно сделать на транзисторе или например на базе триггера Шмидта. Схема ниже использует микросхему 74HCT14 и фототранзисторы в качестве светочувствительных элементов.

Принципиальная схема Bus Mouse на триггере ШмидтаПринципиальная схема Bus Mouse на триггере Шмидта

В те годы, когда шариковые мыши были широко распространены, переделать любую из них под Amiga было не сложно. Мой личный опыт правда ограничился изготовлением мышек и адаптеров Kempston Mouse для ZX-Spectrum. Переделке подвергались Bus Mouse от IBM PC, которые встречались очень часто и были никому не нужны уже в 1998 году. Когда запасы Bus Mouse на радиорынке закончились в ход пошли обычные шариковые мыши, триггер Шмидта 564ТЛ2 и провода от геймпадов Sega Mega Drive.

На данный момент Bus Mouse уже превратились в предмет коллекционирования, цены на шариковые мыши растут, да и в практическом плане пользоваться шариковой мышью так же неудобно как и раньше. В устройствах ввода бал правят оптические и лазерные мыши, подключенные по USB или PS/2 протоколу. В принципе, написав соответствующий драйвер, к Amiga можно подключить и PS/2 мышь, но такая реализация требуют драйвера и не будет работать со старыми играми. С другой стороны, протокол PS/2 мыши прост и доступен -, а преобразовать его в импульсы квадратурного энкодера можно на любом доступном пяти вольтовом микроконтроллере. Таких проектов много, их можно купить собранными или спаять самому. С USB устройствами чуть сложнее из-за высокого энергопотребления — такие проекты тоже есть, но они могут нуждаться в дополнительном питании.

Для практического использования такие переходники подходят отлично. Игры и приложения для мыши обычно не подразумевают моментальной реакции и потеря одного или нескольких кадров ввода никак не скажется на геймплее. Но любое человеческое сообщество делится на пуритан и радикалов. Радикалы вполне себе подключают Raspberry Zero как видеоадаптер, а пуристы собирают карты расширения только на базе примитивной логики 74 серии. В случае с мышью возможны несколько интересных вариантов.

Эволюция электронной начинки компьютерных мышек прошла несколько этапов развития. Принцип работы оптической мыши с сенсором в виде камеры был запатентован еще в 1988 году. Первой реально продаваемой моделью, вышедшей в 1999 году, стала IntelliMouse от компании Microsoft. С этого момента производители микросхем начали выпускать свои решения и оптические мыши проникли в массовый сегмент устройств ввода, полностью вытеснив предков с шариком.

Изначально оптические мыши строились из двух компонентов — оптического датчика, который генерировал квадратурный сигнал для двух координатных осей и микроконтроллера, преобразующего сигнал в данные PS/2 или USB протокола. Позже оптический сенсор начал передавать данные в формате I2C. Дальнейшее удешевление производства повлекло за собой интеграцию всего в один чип. Для подключения к старым устройствам интересны модели в которых все нужные сигналы доступны с оптического сенсора.

Для примера подключим мышь от компании A4Tech, модели SWOP-35 к компьютеру Amiga 500. Она достаточно удобна для взрослого человека, бывает черной и серебристой, легко находится на вторичном и даже первичном рынке.

Мышь A4Tech, модель SWOP-35Мышь A4Tech, модель SWOP-35

Открутив 4 винта, спрятанных под тефлоновыми накладками, внутри обнаруживается односторонняя печатная плата, оптический датчик OM02 и контроллер SC84510FP. Обе микросхемы хорошо документированы. Схема практически полностью повторяет образцовый дизайн из документации.

SWOP-35, печатная плата, вид сверхуSWOP-35, печатная плата, вид сверхуSWOP-35, принципиальная схемаSWOP-35, принципиальная схема

Для переделки под Amiga понадобится удалить микросхему SC84510FP и подключить кнопки так, чтобы при нажатии они выдавали логический ноль. Питание оптического сенсора проходит через кнопки, поэтому часть перемычек придется выпаять. Для внесения изменений понадобится всего один провод.

Переделка мыши в формат Bus MouseПеределка мыши в формат Bus Mouse

Теперь все нужные сигналы доступны с контактов микросхемы контроллера. На рисунке выше это сигналы с квадратурных энкодеров X1, X2, Y1, Y2 и кнопки LB, MB, RB. Осталось соединить контактные площадки с соединителем DB9 в соответствии с таблицей вашего ПК. В моем случае это Amiga 500, шнур взят из джойстика от игровой консоли Sega Mega Drive. Обратите внимание что кнопки при таком подключении не подтянуты к питанию, что может вызвать нестабильность при работе. На Amiga все работает даже без подтяжки, но лучше использовать три резистора на 4,7 kOm соединяющих LB, MB, RB с перемычкой J3. Результат пайки будет примерно такой.

SWOP-35 после переделки для AmigaSWOP-35 после переделки для Amiga

Если результат сборки вызывает сомнения, проверить собранную мышь можно при помощи Arduino — так вы избавите себя от порчи дорогостоящего компьютера. Осталось решить вопрос с направлением осей. После сборки и подключения выяснилось, что вертикальная ось инвертирована. В документации на микросхему оптического датчика ориентация осей не описана. Судя по результату, вертикальная ось датчика и компьютера Amiga направлены в разные стороны. Чтобы это исправить необходимо поменять местами провода идущие к контактам Y1 и Y2.

Для тех кто возьмется за переделку, ниже приводится таблица с мышками в которых стоят подходящие оптические сенсоры. Принципиальные схемы в формате KiCad выложены в репозиторий, который будет пополняться по мере поступления информации. Если кто-то обладает информацией о других мышках, пригодных для переделки, прошу написать в комментариях и помочь ретро комьюнити.

Модель

Сенсор

Контроллер

A4Tech

SWOP-35

OM02

SC84510FP

Codegen

CM-5088P

HDNS-2000

EM84510EP

Sp

SPM004

PAN101B

SC84510FP

A4Tech

SWOP-48

ADNS-2051

WU001–550F

Ami

BW-23

OM02

TP8472BP

Genius

GM-04004P

ADNS-2051

AA11250

Radioshack

02A03

HDNS-2000

Gl603usb-a-3d2p

© Habrahabr.ru