Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Приветствую всех!

Этот шедевр советской компьютерной промышленности знаком любому интересующемуся компьютерной историей. А некоторые из тех, кому довелось с ним работать, называли его не иначе как «крысой». И вот спустя много десятилетий после его выпуска я задумался: а что, если подключить этот девайс к обычному компьютеру? Именно этим мы сегодня и займёмся.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Итак, в сегодняшней статье поговорим про мышь от советского персонального компьютера ЕС1841. Узнаем, как заставить её работать и так ли она сурова, как можно подумать. Традиционно будет много интересного.

❯ Суть такова

Вдохновившись постом товарищаArcanum7 про клавиатуру от Robotron 1715 и другим постом от dlinyj про терминальную клаву МС7004 от ДВК, я вспомнил про ещё одно не менее легендарное устройство ввода той эпохи — мышь от ЕС ПЭВМ. Вообще, девайс достаточно известный, много где упоминавшийся и куда только не подключавшийся. Но вот к обычному компу его ещё не подключали (или я просто не нашёл такого). Самое время восполнить этот пробел.

❯ Немного про сами ПЭВМ

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Как и другие машины «Единой системы», ЕС1841 очень круто выглядит и отличается такой же суровостью. Компьютер сильно отличается от привычных нам ПК — вместо материнки тут кросс-плата, в которую втыкаются модули (они же типовые элементы замены), вместо шлейфов — жгуты проводов, кулеры работают от 220 вольт.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Характеристики по меркам ретрокомпьютеров внушают уважение: процессор К1810ВМ86 (отечественный функциональный аналог Intel 8086), возможность установки до полутора мегабайт памяти, CGA-видеоадаптер.Увы, ввиду не слишком высокой надёжности и большого количества дорогих радиодеталей внутри, выжило раритетных ЭВМ совсем немного. От этого рабочие экземпляры очень ценятся среди любителей.

❯ Обзор оборудования

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

А вот и мышь. Саму ПЭВМ уже не достать, а вот крысу — запросто. Она оснащена тремя кнопками, причём все нажимаются как-то по-разному. Скорее всего, это особенность конкретного экземпляра, новая мышь таких косяков иметь не должна.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

С обратной стороны та самая легендарная маркировка «Манипулятор графической информации», крепёжные винты корпуса, а также цельнометаллический шарик. Вместо привычных фторопластовых ножек тут три маленьких шарика, выполняющих роль шаровых опор, благодаря которым мышь по сути не скользит, а катается, что очень облегчает перемещение.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Разъём. Он тут очень редкий, ответную часть к нему найти не удалось. Но с ним мы разберёмся чуть позже. К нему подходит кабель, представляющий собой жгут проводов в трубке из ПВХ.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Маркировка на разъёме.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Шарик снят. Видны три ролика — два рабочих и один вспомогательный, прижимающий шарик к двум другим. Во всех мышах, что я видел, шарик и ролики были немного ржавыми, эта — не исключение. Ролики внутри корпуса сидят на маленьких шарикоподшипниках, которые в моей мыши даже умудрились дожить до наших дней. Впрочем, вскрывать её я не буду — стало жалко отковыривать всё ещё сохранившуюся пломбу, благо хранилась мышь в хороших условиях и обслуживания не требует.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Шарики. Справа наш, слева для сравнения лежит от обычной COM-мыши. В нашей он больше и тяжелее. Некоторые считают, что этот шарик от подшипника, но это не так, он тут фрезерованный (следы обработки видны при детальном осмотре) специально для этой мыши.

❯ Контрольное взвешивание

В интернете полно всякой ерунды про то, что эта мышь весит чуть ли не килограмм и может использоваться как предмет самообороны. Точных данных об её массе сходу не нашёл, так что самое время выяснить всё самому, а заодно и провести сравнение, навсегда закрыв все неточности.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Итак, кладём подопытный экземпляр на весы. Масса мыши без кабеля — всего 186 граммов. Ни о каких килограммах речи даже не идёт.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Целиком она весит тоже не так уж и много. Кабель достаточно мягкий и гибкий, хотя и более толстый, чем у импортных собратьев.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

А вот для сравнения популярная в первой половине девяностых мышь GM-6, по форм-фактору похожая на эту.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

И, напоследок, типичная COM-мышь из поздних девяностых.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Масса шарика отдельно — 67 граммов, считай, треть от всего манипулятора.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Как можно видеть, грызун несколько тяжелее своих собратьев, но не настолько, насколько может показаться. Иные современные игровые мыши (особенно те, куда вставляются специальные дополнительные грузики) запросто могут быть ещё массивнее и тяжелее. Да и размер у неё тоже вполне «мышиный», без существенных отклонений. Так что увы, но все подобные рассказы про её свойства — не более чем красивая байка.

❯ Внутренности

Как я уже говорил, разбирать мышь я не стал. Так что будем довольствоваться фото с просторов.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Внутри неё две платы — с кнопками и с оптопарами. Из микросхем только триггер Шмитта К561ТЛ1, служащий для формирования правильных фронтов сигналов от фотодатчиков роликов.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Плата отдельно (фото отсюда). Отчётливо видны суровые отечественные ИК-светодиоды и фотодиоды. Также справа внизу заметны те самые шарикоподшипники.

❯ Bus mouse и всё об этом

Теперь очередь интерфейса. Сразу приведу распиновку разъёма мыши:

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Нумерация контактов на картинке отвратительного качества, поэтому продублирую её у себя:

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Как видно, мышь не подключается ни по COM, ни по PS/2, ни по какому-то иному стандартному интерфейсу. С некоторой натяжкой её и вовсе можно назвать аналоговой (хотя, конечно, это не так, выходы у неё таки цифровые).

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Она принадлежит к семейству так называемых «шинных мышей», они же Bus mouse (не путать с Apple Desktop Bus). Внутри такой мыши нет ничего кроме кнопок и датчиков, взаимодействием с компьютером же занимается специальный контроллер (как нетрудно догадаться, его-то мы и будем сейчас разрабатывать). Именно это мы и могли видеть в нашей мышке. Так что самое время попробовать её подключить и узнать, работает ли она вообще.

❯ Разъём

Как я уже говорил, ответную часть к её штекеру достать довольно таки тяжело. Но выход всё-таки есть.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Для этого нам понадобится копеечная деталь — разъём PBD-12, который надо подвергнуть нескольким нехитрым модификациям.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

С той стороны, где у мыши находится ключ, выдёргиваем один контакт и делаем в этом месте пропил для ключа (с осторожностью, первый разъём в ходе этих манипуляций у меня треснул). Дальше немного дорабатываем напильником — разъём, рассчитанный на дюймовую систему вместо метрической, в это прокрустово ложе лезет с трудом. Модифицированный экземпляр прекрасно насаживается и обеспечивает рабочий контакт, что нам и было нужно. Видел, кто-то просто разобрал этот разъём на мышке, выкинул внутренности и вставил туда вилку IDC типа BH-10, но это не наш путь.

❯ Про подключение

Чтобы заставить мышь работать с современным компьютером, нужен МК с поддержкой USB HID.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

У меня уже давно лежала плата Digispark на чипе ATTiny85 (давным-давно экспериментировал с Bad USB), которую хотелось использовать в каком-нибудь проекте. Одна проблема: выводов у неё маловато. Но этот нюанс я предполагал исправить при помощи чипа 74HC165, понадеявшись, что шариковая мышь работает достаточно медленно и скорости опроса этого регистра будет достаточно.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Для тестов даже собрал на макетной плате схему с разъёмом и этим регистром. Но, как показали опыты, надежды не оправдались, работало оно так себе. Поэтому эту плату отложим до лучших времён, а для мыши придумаем что-то более надёжное.

❯ Что же выберем?

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Следующим кандидатом стала банальная плата Arduino Pro Micro. Взял я её исключительно из-за пятивольтовых уровней и более-менее стабильной реализацией библиотеки HID (таковая в более дешёвой Raspberry Pico проверялась мною при создании контроллера машиниста для тренажёраи показала себя довольно таки не очень). Подключаем мышь к плате, заливаем тестовый скетч, катаем грызуна по столу и убеждаемся, что при вращении шарика какие-то импульсы действительно идут. Отлично, оно работает.

❯ Координаты

Теперь разберёмся, как работать с этими данными. С точки зрения схемотехники мышь — просто два энкодера, при вращении выдающих по два сдвинутых по фазе прямоугольных сигнала. Так что идём на просторы, берём первый попавшийся скетч для работы с энкодером и допиливаем его под свои нужды:

Тестовый скетч:

#define Xa 5 #define Xb 6 #define Ya 7 #define Yb 8 bool XmotionDetected = false, YmotionDetected = false; int counterX = 0, counterY = 0; bool CW_X, CW_Y; void setup() { // put your setup code here, to run once: pinMode(Xa, INPUT); pinMode(Xb, INPUT); pinMode(Ya, INPUT); pinMode(Yb, INPUT); Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: updateCounters(); } void updateCounters() { if (!digitalRead(Xa) && !digitalRead(Xb) && XmotionDetected ) //in a detent and just arrived { if (CW_X) { counterX++; } else { counterX--; } XmotionDetected = false; Serial.print("X: "); Serial.print(counterX); Serial.print(" Y: "); Serial.println(counterY); } if (!digitalRead(Xa) && digitalRead(Xb) && !XmotionDetected ) // just started CW { CW_X = true; XmotionDetected = true; } if (digitalRead(Xa) && !digitalRead(Xb) && !XmotionDetected ) //just started CCW { CW_X = false; XmotionDetected = true; } if (!digitalRead(Ya) && !digitalRead(Yb) && YmotionDetected ) //in a detent and just arrived { if (CW_Y) { counterY--; } else { counterY++; } YmotionDetected = false; Serial.print("X: "); Serial.print(counterX); Serial.print(" Y: "); Serial.println(counterY); } if (!digitalRead(Ya) && digitalRead(Yb) && !YmotionDetected ) // just started CW { CW_Y = true; YmotionDetected = true; } if (digitalRead(Ya) && !digitalRead(Yb) && !YmotionDetected ) //just started CCW { CW_Y = false; YmotionDetected = true; } }

Загружаем его, и теперь при движении мыши в последовательный порт отправляется примерно следующее:

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Отлично, работает именно так, как я и думал.

❯ Управление мышью

Теперь, убедившись, что всё работает, добавляем работу с HID, получая вот такой скетч:

#include "Mouse.h" #define LBUTTON 2 #define MBUTTON 3 #define RBUTTON 4 #define Xa 5 #define Xb 6 #define Ya 7 #define Yb 8 #define X_STEP 7 #define Y_STEP 7 bool XmotionDetected = false, YmotionDetected = false; int counterX = 0, counterY = 0; int dirX = 0, dirY = 0; bool CW_X, CW_Y; void setup() { // put your setup code here, to run once: pinMode(LBUTTON, INPUT_PULLUP); pinMode(MBUTTON, INPUT_PULLUP); pinMode(RBUTTON, INPUT_PULLUP); pinMode(Xa, INPUT); pinMode(Xb, INPUT); pinMode(Ya, INPUT); pinMode(Yb, INPUT); Mouse.begin(); } void loop() { // put your main code here, to run repeatedly: updateCounters(); if (dirX || dirY) { Mouse.move(dirX * X_STEP, dirY * Y_STEP, 0); dirX = 0; dirY = 0; } updateButtons(); } void updateCounters() { if (!digitalRead(Xa) && !digitalRead(Xb) && XmotionDetected ) //in a detent and just arrived { if (CW_X) { dirX = 1; counterX++; } else //CCW { dirX = -1; counterX--; } XmotionDetected = false; } if (!digitalRead(Xa) && digitalRead(Xb) && !XmotionDetected ) // just started CW { CW_X = true; XmotionDetected = true; } if (digitalRead(Xa) && !digitalRead(Xb) && !XmotionDetected ) //just started CCW { CW_X = false; XmotionDetected = true; } if (!digitalRead(Ya) && !digitalRead(Yb) && YmotionDetected ) //in a detent and just arrived { if (CW_Y) { dirY = 1; counterY--; } else //CCW { dirY = -1; counterY++; } YmotionDetected = false; } if (!digitalRead(Ya) && digitalRead(Yb) && !YmotionDetected ) // just started CW { CW_Y = true; YmotionDetected = true; } if (digitalRead(Ya) && !digitalRead(Yb) && !YmotionDetected ) //just started CCW { CW_Y = false; YmotionDetected = true; } } void updateButtons() { if(!digitalRead(LBUTTON)) { if (!Mouse.isPressed(MOUSE_LEFT)) { Mouse.press(MOUSE_LEFT); } } else { if (Mouse.isPressed(MOUSE_LEFT)) { Mouse.release(MOUSE_LEFT); } } if(!digitalRead(RBUTTON)) { if (!Mouse.isPressed(MOUSE_RIGHT)) { Mouse.press(MOUSE_RIGHT); } } else { if (Mouse.isPressed(MOUSE_RIGHT)) { Mouse.release(MOUSE_RIGHT); } } if(!digitalRead(MBUTTON)) { if (!Mouse.isPressed(MOUSE_MIDDLE)) { Mouse.press(MOUSE_MIDDLE); } } else { if (Mouse.isPressed(MOUSE_MIDDLE)) { Mouse.release(MOUSE_MIDDLE); } } }

Прост он настолько, насколько это возможно: при сдвиге мыши в нужном направлении курсор на компе двигается на заданное число пикселей.Заливаем скетч и пробуем. Невероятно! Работает с первого раза!

❯ Что же в итоге?

Как оказалось, подключить мышь оказалось проще простого — запустил я её буквально за час, двадцать минут из которого я паял разъём и зачищал МГТФ. Работает она также беспроблемно.Конечно, тут могла бы быть фраза про то, что с тех пор я подключил эту мышь к компу и использую её как основную… но ничего подобного не будет. Главной проблемой её оказалось очень низкое разрешение, из-за которого приходится либо сильно задирать расстояние одного шага, отчего курсор при движении начинает пропускать пиксели, либо мириться с тем, что указатель едет плавно, но очень медленно, как будто увязая. Всё же эпоха шариковых мышей с их довольно таки неточными энкодерами безвозвратно ушла.Но вот что было действительно приятным в этой штуке, так это шариковые опоры. Благодаря ним мышь очень плавно и с приятным звуком катается по столу и никогда не начнёт заедать.

Такие дела.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК

Автор текста: MaFrance351

Больше интересных статей в нашем блоге на Хабре и телеграм-канале.

Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать авторские проекты.

Хочешь стать автором (или уже состоявшийся автор) и есть, чем интересным поделиться (за вознаграждение) в рамках наших блогов — пиши сюда.

3131
22
8 комментариев

интересно, спасибо за статью) а есть видео использования, чтобы задержку оценить, как вобще подключается?

2

Сколько же усилий понадобилось, чтобы провести этот эксперимент... Помнится приходилось пользоваться подобной мышкой genius, удовольствие не из приятных))

1

Комментарий недоступен

От опыта зависит. В квейке на клавиатурах играли не хуже мыши

1