Consul 254 похож на принтер, но это не принтер. Ещё у него есть клавиатура, но при этом печатающая часть никак не связана со вводом, поэтому так просто получить что-то на бумаге не выйдет. Эту проблему мы и будем сегодня решать с помощью Ардуино и цветных проводочков. Конечно всё уже украдено до нас, и такую вещь уже описывали в журнале Моделист-Конструктор в 1989 году. Правда при этом использовался компьютер "Специалист", а не Ардуино.

Как устроена печать в Консуле

Печатающая часть машины управляется с помощью матрицы реле 8x8. Правда не все комбинации используются, так что выходит поменьше, чем 64 видов сигналов. Есть те, которые меняют состояние (нижний или верхний регистр), есть управляющие работой каретки (новая строка, пробел), а есть те, что печатают символы.

Выглядит страшно, но разобраться вполне реально.
Выглядит страшно, но разобраться вполне реально.

Чтобы не вбивать все эти коды почти 64 команд, я вбил дампы для "Специалиста" из журнала (звучит очень логично, да), дизассемблировал драйвер и разобрал содержимое ПЗУ, управляющее матрицей реле. Оказалось, что там почему-то отличается раскладка русских символов. Может быть, было несколько вариантов таких машин? Или я что-то сделал не так.

Таблица перекодировки символов со "Специалиста". Первая цифра в коде - столбец матрицы, вторая - строка. Например, пробел (0x20) кодируется как 02 или столбец I, строка C.
Таблица перекодировки символов со "Специалиста". Первая цифра в коде - столбец матрицы, вторая - строка. Например, пробел (0x20) кодируется как 02 или столбец I, строка C.

Но, по крайней мере, некоторые символы совпадали, и я понял, что именно мне делать. Чтобы управлять матрицей, надо было чем-то подавать 12 Вольт на реле Консула. Напряжение я взял от компьютерного блока питания, а для его коммутации пришлось купить две платы, на каждой из которых есть восемь пятивольтовых реле. Такие модули легко подключить к ардуино, но выходов Uno уже не хватало, поэтому я взял Arduino Mega. Получилась примерно такая схема:

Модули с реле показаны условно, потому что в библиотеке KiCAD готовых модулей не было. Как и платы Arduino, так что тут нарисован непосредственно микроконтроллер.
Модули с реле показаны условно, потому что в библиотеке KiCAD готовых модулей не было. Как и платы Arduino, так что тут нарисован непосредственно микроконтроллер.

А вот так выглядит эта схема в мире вещей:

Слева блок питания, откуда берётся 5В для моих реле и 12В для реле Консула. По центру плата Arduino Mega, над ней две платы с реле и макетная плата, через которую к Ардуино подключены провода с клавиатуры Консула.
Слева блок питания, откуда берётся 5В для моих реле и 12В для реле Консула. По центру плата Arduino Mega, над ней две платы с реле и макетная плата, через которую к Ардуино подключены провода с клавиатуры Консула.

Строки матрицы реле подключены к контактам A-H разъёма I, а столбцы - к контактам I-P. Соответственно, нужная строка выбирается с помощью одного внешнего регистра микроконтроллера, а столбец - с помощью другого. Очень удобно программировать, главное не включить пару строк или столцов одновременно.

Теперь дело за малым - включать реле в нужном порядке, чтобы срабатывающие молоточки написали текст "HELLO, WORLD!" или что поинтереснее. На этом этапе возникли несколько неожиданных проблем.

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

Однако, вопреки утверждению из документации, этот сигнал не используется для пробела. Наверное логично, ведь при этом ничего не печатается. Но тогда должен быть какой-то другой секретный контакт для индикации движения каретки. Я правда не стал его искать, а просто использую задержку при выводе пробела. Тут проблем как с буквами не возникает.

А третья проблема оказалась не программной. Я очень долго возился с механикой возврата каретки. То возврат не начинался вообще, то не хотел заканчиваться, когда тесьма, которая тянет каретку, не хотела отпускать её. С помощью какого-то необъяснимого шаманства и объяснимой очень аккуратной (чтобы все движущиеся части попали куда надо) установки каретки на машину, эти проблемы удалось победить.

Пробуем что-то напечатать

Естественное желание любого советского человека с АЦПУ - распечатать Мону Лизу, как в "Служебном романе".

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

И внезапно проявился ещё один странный баг. Если печатать пробел или букву "Z", то иногда проскакивает "крестик", который расположен в том же столбце матрицы реле. Причём литерный рычаг с символами 7x начинает двигаться позднее, чем Z, так что обычно лишний символ не успевает напечататься. Я так и не понял, почему это происходит. Может кто предложит идею?

Молоточек с цифой 7 срабатывает, если долго подавать сигнал "пробел" или просто печатать букву Z.
Молоточек с цифой 7 срабатывает, если долго подавать сигнал "пробел" или просто печатать букву Z.

В общем я просто заменил все буквы Z на рисунке на N и всё же вывел картинку. Вот так это работало:

Конечно очень весело хардкодить такие картинки, но надо же и попробовать управлять машиной через её собственную клавиатуру, не зря же она существует.

Ввод и вывод

Алгоритм работы пишущей машинки:

  • читаем сканкод с клавиатуры;

  • преобразовываем сканкод в char;

  • находим строку и столбец для реле, которое надо включить;

  • включаем реле и печатаем символ на бумаге;

  • выключаем реле.

Про первую часть я уже писал отдельную статью. Там было упоминание, что Консул ничего не делает при нажатии клавиш смены регистра, а лишь посылает их код. Это действительно так. Но всё-таки его состояние меняется, если при нажатии этих клавиш (или в случайный момент времени, чтобы оператору было веселее печатать), мы отправим соответствующий сигнал (верхний или нижний регистр) на матрицу реле. В этом случае регистровый механизм смещается, а его положение можно определить по замкнутой или разомкнутой цепи IV C-IV K. Этот сигнал входит в один из тех битов, которые уже читаются, как код символа клавиатуры. Получается, что запоминать состояние регистра в компьютере смысла нет, достаточно иметь таблицу перекодировки с учётом этого сигнала (которую я и так набрал раньше).

Отдельное веселье ждало меня с русскими символами. Их коды, очевидно, больше, чем число 127. Поэтому при использовании char (который в этом компиляторе оказался знаковым) в качестве индекса массива, получались неправильные смещения после преобразования в size_t (или там ssize_t? попробуй разбери эти компиляторы). В результате всё работало не так. Хорошо, что Консул не умеет показывать синий экран.

В общем, пишущая машинка получилась. Хотя пока задействованы не все функции - Консул поддерживает двухцветную печать, но такая лента ко мне ещё не приехала, поэтому попробовать не вышло. Так что вероятно будет ещё одна серия про что-нибудь интересное.

Ссылки

  1. Репозиторий с кодом под Arduino и дампами для Специалиста

  2. Consul 254. Техническое описание

Комментарии (14)


  1. Zenj
    02.11.2022 09:28
    +2

    Были у нас компьютерные классы на Электрониках Д3-28 с "Консулами". Вот такими, как на первом фото. Совершенно точно помню, что одна из кнопок спереди снизу переводила машинку в автономный режим.
    А вот "Консул", который стоял в качестве консоли ЕС-1033 (как на втором фото, если я не путаю) кнопок этих не имел, и в автономе, действительно, не печатал...


    1. Dovgaluk Автор
      02.11.2022 09:38

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


      1. Zenj
        02.11.2022 14:21

        Возможно, и так. Я тогда не посмотрел, как это сделано.


  1. dec123
    02.11.2022 17:34
    +3

    была еще схема подключения для "Радио-86РК"
    Универсальный интерфейс для "CONSUL" - журнал "Радио", №12 за 1989г. стр. 37-42


    1. Dovgaluk Автор
      03.11.2022 06:40

      Вот, кстати, я хотел написать после статьи в "МК", что "эти радиотехники" несерьёзно к программам относятся и приводят только дампы. Хотя в программе могут быть ошибки, и как её по дампу потом исправлять?

      А вот в "Радио" уже нормальная статья, со всем подробностями. К каждой строчке кода драйвера есть комментарии.


  1. salnicoff
    02.11.2022 21:00
    +2

    Оказалось, что там почему-то отличается раскладка русских символов. Может быть, было несколько вариантов таких машин? Или я что-то сделал не так.

    Ага. «Компьютерных» «Консулов» было три модели, каждая — в нескольких конфигурация, каждая конфигурация — в нескольких комплектациях и с несколькими «прошивками» (они хард-енкодед). Главная причина — невозможность печати всех 256 символов кодовой таблицы, ведь «Консул» имел типичный механизм электрической пишущей машинки (об этой проблеме я тут писал: https://habr.com/ru/post/650609/). Раскладок (и прошивок) было минимум четыре:

    1) только латинница;

    2) только кириллица;

    3) верхний регистр латинницы плюс верхний регистр кириллицы;

    4) латинница плюс кириллица с объединением по начертанию (т. е. «A» — это и латинская, и кириллическая, а «b» — это еще и мягкий знак; буквы при этом упорядочены не по QWERTY, и не по JCUKEN, а весьма причудливо разбросаны по клавиатуре, причем не обязательно верхний регистр был на той же клавише, что и нижний).

    Кроме этого, были еще и польские/гэдэровские/еще какие-то машинки, которые были обучены русской грамоте. Кто и как учил — зависело от оборудования и от способа попадания в СССР. Так что поиск правильного способа подключения «Консулов» к чему угодно — это тот еще квест.

    P.S. Третий вариант машинки считался машинкой для труЪ программеров — кодить можно и в верхнем регистре, а вывод оформлять — русскими буквами, все равно потом секретарша или машинистка будет перепечатывать тексты и оформлять их по всем правилам...


    1. Zenj
      02.11.2022 22:18

      Да, кажется, кроме тех двух, был еще "серый" консул.


      1. RalphMirebs
        03.11.2022 06:43
        +1

        252, 254, 256, 260, 260.1 (как минимум)
        Различия от значительных (форма корпуса, новые клавиши) до просто разных литер / положения эл магнитов


        1. salnicoff
          03.11.2022 09:06

          252 — не помню. 260.2 еще были, но это все разновидности 260 с разными интерфейсами подключения.


      1. salnicoff
        03.11.2022 09:07

        Вообще «Консулов» в СССР было много. Особенно модели 221 — но остальные были просто пишущими машнками, чисто механическими.


  1. VT100
    02.11.2022 23:12
    +3

    Хм-м-м… наверчивание реле на реле без крайней необходимости
    Uno + 74HC595 + ULN2803?


    1. Dovgaluk Автор
      03.11.2022 06:31
      +1

      Реле ради реле есть и у меня :)

      Про сдвиговый регистр я знаю, а вот за вторую микросхему спасибо. Если вдруг соберусь сделать плату для такой конструкции, то возьму её.


      1. VT100
        03.11.2022 19:28

        "Извините, вспылил!" ;-)


  1. ibnteo
    03.11.2022 13:23

    Гезотайп к Консулу подключали более 50 лет назад.