Когда в 19-летнем возрасте я покупал свой первый компьютер, то я очень сильно хотел купить БК-0010-01. Однако обстоятельства сложились так, что к моменту, когда у меня появилась необходимая сумма, в магазинах БК‑шек не осталось, и вообще ничего не осталось. На полке в «Электронике» лежало только невзрачное нечто с нарисованной клавиатурой и названием «ЛИК».

Мой "ЛИК" собственной персоной
Мой "ЛИК" собственной персоной

Посмотрев на характеристики этого компьютера и сравнив их по табличке из журнала «Радио» с характеристиками других домашних компьютеров тех лет, я понял, что у «ЛИКа» вполне неплохие параметры. Отпугивала только клавиатура. Но, закрыв глаза на этот момент, я всё‑таки стал обладателем именно «ЛИКа». Это уже позже я выяснил, что «ЛИК» — это ни что иное, как «Специалист» из журнала «Моделист‑Конструктор», на который я облизывался. А в момент приобретения я даже не задумывался о том, где потом буду брать программы для этого самого «ЛИКа». Так вот, вернёмся к клавиатуре. До момента счастливого обладания собственным компьютером я не владел навыками набора текста, поэтому именно на «ЛИКе» я разучивал, где какая буква расположена. Классно было, что на вожделенной БК‑шке буквы располагались так же, да и на пишущей машинке тоже.

Вожделенная БК-шка
Вожделенная БК-шка

А вот когда я уже купил «Спектрум» в виде «Дельта‑С», там буквы располагались совсем не так, как я привык. Пришлось переучиваться.

Точно такая же Дельта-С у меня была
Точно такая же Дельта-С у меня была

А потом появилась Amiga, а потом PC. «ЛИК» давно был убран в коробку и многие годы не доставался из неё. Но ностальгия дала о себе знать, и я снова вспомнил про свой первый компьютер, с которого всё начиналось. И вот передо мной всё та же нарисованная клавиатура с непонятным расположением латинских букв. Теперь уже приходилось сильно путаться в поисках каждой латинской буквы. Пусть это и занимало секунду или меньше, но данное неудобство заставляло нервничать. Можно было бы, конечно, собраться с духом, порезать дорожки на клавиатуре и сделать так, чтобы латинские буквы встали на свои привычные места, но тогда бы «поплыли» русские буквы. А ведь, кроме того, некоторые игры типа «Dungeon» и «Arconoid» использовали для управления кнопки "I", "T", "X", "B" и "@", которые в стандартной матрице расположены подряд. В общем, как ни крути — сплошное неудобство!

Клавиши управления в игре "Arconoid"
Клавиши управления в игре "Arconoid"

Это на реальном компьютере, с реальной клавиатурой. А под эмулятором можно тасовать буквы как душе угодно, и даже отслеживать переключение РУС/ЛАТ, и, в зависимости от выбранного регистра, делать правильную раскладку. Я тоже так пытался сделать в своём эмуляторе, ведь всё выглядит просто. Однако реальность оказалась более суровой. У «Специалиста» своё собственное расположение символов на кнопках. Некоторые символы можно набрать только в латинском регистре, а для набора некоторых требуется отпущенный «НР». При том, что на стандартной PC‑клавиатуре этот же символ набирается с нажатым «Shift»'ом, который как раз и привязан к «НР». То есть возникает конфликт — «НР» должен быть нажат и не нажат одновременно. Я пытался всё это как‑то решить костылями, но полностью победить так и не смог. Посмотрел, как ведёт себя «умная» раскладка в Emu80, и увидел, что там тоже не всё гладко. Позже автор подтвердил, что не смог победить всё до конца, и именно на «Специалисте». Здесь же, наверное, ещё стоит упомянуть и про другое решение — аппаратный контроллер PC‑клавиатуры, там тоже можно менять раскладки, но тоже не универсально.

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

Однако ж мне очень хотелось довести свой «ЛИК» до ума и привести его к состоянию мечты. Благодаря помощи участников форума ZX‑PK.ru AlexBel и Segr6845 мой «ЛИК» обзавёлся цветом, таймером и SD.

Слева плата с доработками, которую создал AlexBel
Слева плата с доработками, которую создал AlexBel

Теперь же я решил сделать ему и клавиатуру на современных Cherry‑свитчах. В этом мне любезно согласился помочь ещё один участник форума — max232cpe. Изначально я хотел просто повторить 1:1 клавиатуру «ЛИКа». Но тут начались метания. А зачем ставить пустые клавиши? А вот эта клавиша неудобно стоит, можно её переместить на более привычное место. В общем, пошло‑поехало, и получилась уже совсем другая клавиатура. И вот оно всё вроде почти как хотелось. Но в том‑то и дело, что только «почти». Некоторые кнопки всё‑таки не на своих местах, знаки препинания сложно искать, ну и самое главное — никуда не делась проблема с латинскими символами, которые так и остались на непривычных местах. Переставлять кнопки под стандарт QWERTY я принципиально не хотел, хотя это было вполне возможно!

Примерное расположение клавиш на проектируемой клавиатуре
Примерное расположение клавиш на проектируемой клавиатуре

И вот тут я подумал, что если не гора идёт к Магомету... А что, если не железо подгонять к софту, а подогнать софт к железу? Ведь компьютер — это железо, которое выполняет программу. А программу пишет человек. В конце концов, эта непривычная на сегодня раскладка JCUKEN не гвоздями же прибита! Эта раскладка — плод работы софта, прошитого в ПЗУ! Однако, даже не анализируя код ПЗУ, заранее понятно, что потребуется, как минимум, одна таблица перекодировки для всех латинских букв. А где ж взять столько места в ПЗУ, в котором не осталось свободных байтов? В основном ПЗУ действительно места нет, но давайте‑ка обратимся к журналу «Моделист‑Конструктор» № 4 за 1989 год, в котором была опубликована статья «Программа для системной ППЗУ» за авторством В. Зверкова. Именно там был опубликован «Загрузчик Зверкова», который и стал стандартом де‑факто для «Специалиста».

Та самая статья в журнале "Моделист-Конструктор"
Та самая статья в журнале "Моделист-Конструктор"

Там, помимо кода самого Загрузчика, предлагался ещё и знакогенератор КОИ-8, который добавлял «Специалисту» строчные буквы русского и латинского алфавитов, который автор предлагал разместить в отдельной микросхеме ПЗУ по адресам 0xD000-0xD7FF. Собственно, в своё время я набрал этот дамп из журнала и прошил в ПЗУ. Эта микросхема стояла у меня в «ЛИКе», но я никогда не пользовался этим знакогенератором. Также я не знаю ни одной программы, которая бы его использовала. Я почти уверен, что всё дело в том, что кодировка КОИ-7 Н2, которая по умолчанию используется в «Специалисте», не совместима с КОИ-8. Как только мы переключаемся на КОИ-8, то вместо «МОНИТОР» мы видим на экране «monitor». И это ещё полбеды! А как вам «o{ibka» вместо «ОШИБКА»?

Включаем кодировку КОИ-8 в Мониторе
Включаем кодировку КОИ-8 в Мониторе

Соответственно, и все игры, которые содержат русский текст, выводили на экран непонятно что. Какая-то сомнительная выгода от использования КОИ-8, не правда ли?

Игра "Звёздные войны" с включенной кодировкой КОИ-8
Игра "Звёздные войны" с включенной кодировкой КОИ-8

В общем, я решил, что вот оно, то место, куда я размещу таблицу перекодировки из JCUKEN в QWERTY, - третья микросхема ПЗУ со знакогенератором КОИ-8.

Содержимое третьей ПЗУ из журнала
Содержимое третьей ПЗУ из журнала

Жаль, конечно, что для этого придётся кромсать Загрузчик, ведь от этого может пострадать совместимость. Или всё‑таки не придётся? Почитал я внимательно статью, изучил дизассемблер кода и понял, что товарищ В. Зверков ещё тогда, в 1989 году, в своём Загрузчике предоставил всё, что мне нужно! Я штатными средствами на вполне законных основаниях могу перехватывать код нажатой клавиши и подменять его перед выводом символа! Да не может быть! И что, я даже могу знать, какая раскладка сейчас включена? Могу! Автор специально ввёл и описал новую системную переменную, отвечающую за текущую раскладку. Так... здорово, и если у меня есть текущая раскладка и код клавиши, значит, я могу запросто по табличке перекодировать всё, как мне надо. Отлично! В ПЗУ знакогенератора символы начинаются с пробела, код которого 0x20. То есть у меня есть первые 256 (0x20 * 8 = 0×100) свободных байт. Вот там‑то я и размещу свою табличку перекодировки. Так... стоп, но если Зверков предлагал использовать строчные буквы, то, может быть, он ещё и нажатие на «НР» (Нижний Регистр = Shift) учитывает? И точно учитывает! В процедуру перехвата помимо всего прочего передаётся ещё и выставленный флаг Z, если клавиша «НР» нажата. Да у нас флэш‑рояль! Мы знаем код нажатой клавиши, у нас есть переменная, указывающая на раскладку, и флаг Z, показывающий, нажата ли клавиша «НР». И всё это было доступно ещё в 1989 году!

Теперь уже мне захотелось сделать не только перекодировку в зависимости от регистра, но ещё и учесть нажатие «НР». Но что же делать со строчными буквами? Как их кодировать? Я уже понял, что кодировка КОИ-8 для этого дела не прокатывает, так как теряется совместимость с наследием. Я уже грешным делом подумал, что вдруг есть какая‑то кодировка, совместимая с КОИ-7 Н2, но у которой дополнительно есть ещё и строчные буквы. Однако изучение вопроса с привлечением ИИ показало, что такой стандартной кодировки в природе, увы, не существует. И это на самом деле очень странно! Ну ОК, раз так, значит, будем городить свою! КОИ-7 Н2 использует первые 128 кодов из 256, в которых присутствуют заглавные русские и латинские буквы, значит, строчные я помещу в верхнюю половину. В общем, у меня получилась ни с чем не совместимая кодировка на основе КОИ-7 и КОИ-8. Это почти КОИ-8, только там вместо строчных латинских символов расположены заглавные русские (всё, как в КОИ-7 Н2), а на место заглавных русских помещены строчные латинские. Конечно, такая кодировка нестандартна. Зато! Она полностью совместима с тем, что за эти годы было написано для «Специалиста», позволяет обойтись без таблиц для печати стандартного текста, набранного в КОИ-8, и при этом всё‑таки имеет строчные буквы!

Прелесть подхода Зверкова в том, что программу перекодировки можно держать, и, соответственно, отлаживать, в ОЗУ, не привязываясь к её размерам ПЗУ. Я приступил к реализации и в процессе понял, что у меня не бьют символы, на которых закончилась латиница. Это клавиши типа «Х» (»[{«„), „Ъ“ (“]}»), «Ж» (»;:») и так далее И в очередной раз усложнение задачи! Раз такое дело, то нужно делать не просто перекодировку JCUKEN/QWERTY, но и выводить символы так, как они нанесены на клавиши стандартной клавиатуры. Так, но вроде бы на клавиатуре «Специалиста» меньше клавиш. Ведь на «Специалисте» можно ввести гораздо меньше символов, чем мы уже привыкли. Например, мы не можем набрать тот же обратный апостроф (»`») или твёрдый знак («ъ»). Пересчитываю клавиши и ничего не понимаю — количество алфавитно‑цифровых клавиш на «Специалисте» ИДЕНТИЧНО таковому на PC‑клавиатуре. Вот те раз! Это что ли значит, что на клавиатуре «Специалиста» реально повторить 1:1 современную раскладку? Да не может быть? А вот и может!

Вот она, классическая клавиатура "Специалиста"
Вот она, классическая клавиатура «Специалиста»

Ещё, наверное, всё‑таки стоит упомянуть, что в программу перехвата не передаются коды клавиш верхнего и нижнего рядов — это F1-F12, по‑нашему, курсорные клавиши, «Пробел», «Ввод» и так далее Так что у нас всё‑таки не 100% информации. Но зато все алфавитно‑цифровые клавиши плюс «Забой» под нашим полным контролем! А при том, что я теперь хочу сделать полное соответствие современной клавиатуре, мне нужно 4 таблицы по 128 байт, итого 512 байт. А у меня всего доступно 256 байт в начале ПЗУ. Хотя, если внимательно посмотреть, то там в середине знакогенератора участок заполнен кодом 0xFF, то есть пустотой. Непонятно, а как же знаки псевдографики, табличные элементы КОИ-8? Эх, что‑то не продумали вы это в 1989 году, товарищ Зверков!

Современная клавиатура с большой Г-образной клавишей Enter
Современная клавиатура с большой Г‑образной клавишей Enter

Давайте смотреть на современную клавиатуру. Для иллюстрации я специально подобрал именно такой вариант клавиатуры, и вы далее поймёте почему. Значит, у нас на «Специалисте» используется матрица из 6 рядов по 12 клавиш в каждом. Плюс отдельная кнопка «НР» (Нижний Регистр). Есть ещё «Сброс», но к клавиатуре эта клавиша имеет лишь опосредованное отношение. Начинаем прикидывать, что у нас будет да как. Идём по рядам, начиная с верхнего. Всё начинается с «Esc». В Загрузчике из журнала ввели эту клавишу под названием «АР2» и поместили слева от «Пробела»:

Новый Загрузчик позволяет ввести в компьютер две дополнительные клавиши — <ТАБ> и <AP2> (их коды 09 и 1BH). Чтобы реализовать эти клавиши на клавиатуре компьютера, их надо подключить к свободным участкам на пересечениях линий, расположенных слева от клавиши <ПРОБЕЛ> около резисторов R22 и R23 аналогично остальным клавишам. На линии около R22 будет находиться клавиша <ТАБ>, а около R23 — <AP2>.

Так что сопоставим эту клавишу с «Esc». Далее идут 12 функциональных клавиш, как раз столько, сколько у нас в самом верхнем ряду клавиатуры «Специалиста». Переходим к цифровому ряду. На клавиатуре PC в этом ряду 14 клавиш, а у нас только 12. Берём и прямо подряд помещаем всё 12 клавиш «Специалиста» начиная с самой левой. На этом моменте у кого‑то могут возникнуть сомнения. Дескать, у «Специалиста» самая левая клавиша имеет значение »;+», в то время как на PC там »`~». Ничего, мы потом исправим это противоречие в прошивке, а на клавиатуре «Специалисте» на эту клавишу придётся нанести другие символы. И таких клавиш будет несколько. Спускаемся на ряд ниже. Всё начинается с табуляции, и у нас на «Специалисте» тоже есть такая клавиша, она находится левее «АР2». А далее идут аккурат 12 клавиш — всё как на «Специалисте». Только вот опять крайнюю правую нужно перемаркировать с »:*» на »]}». Спускаемся ниже. Слева нас встречает «CapsLock». А на «Специалисте» есть клавиша с аналогичным значением — «НР Фикс» (Фиксированный Нижний Регистр), которую в итоге переименовали в «РУС/ЛАТ». Вот её мы и поместим на «CapsLock». И далее в этом варианте клавиатуры снова идут 12 клавиш. Спускаемся ещё ниже. Слева у нас «Shift». Ну, его без каких‑либо колебаний отдаём под «НР». А дальше на PC‑клавиатуре до следующего «Shift»'а идёт только 10 клавиш. Помещаем слева направо 10 клавиш от «Специалиста», а две оставшиеся, включая «Забой» помещаем справа на цифровой ряд. Помните, у нас осталось там две «лишних» клавиши? И «Забой» как раз чётко попадает на аналогичный по функционалу «Backspace». Клавишу «ВК» (Возврат Каретки) из самого нижнего ряда «Специалиста» помещаем на «Enter», а клавиши направлений на курсорные клавиши. Ну а «Пробел» — он и в Африке «Пробел». Итого в нижнем рядку у нас остаётся только три бесхозных клавиши — косая стрелка (Домой), «ПВ» (Повтор) и «ПС» (Перевод Строки). Не знаю, какой в них прок. Ну, может быть, если только «ПВ» можно использовать после «Забоя», если необходимо удалить какую‑то длинную строку. Но на самом деле нужно патчить Загрузчик и делать как на всех современных системах — включать автоповтор при удерживании нажатой клавиши. Кстати, именно так сделано в Мониторе SP580 на «Специалисте». Так вот эти три клавиши гораздо полезнее отдать под модификаторы — «Win», «Ctrl» и «Alt». И вот мы чётко распределили все клавиши «Специалиста» и идеально уложили их на стандартную клавиатуру PC. Ну красота же!

Итоговый результат
Итоговый результат

Не буду вдаваться в детали, но в итоге я реализовал всё то, что хотел. И, конечно, не буду лукавить, говоря, что ликовал в этот момент. Я, конечно же, всё отлаживал под эмулятором Emu80. Но в силу непопулярности оригинальной раскладки ЙЦУКЕН, в Emu80 некоторые клавиши «Специалиста» невозможно было нажать, так как они попросту не были назначены. Сказалась непопулярность родной раскладки, раз никто этого даже и не заметил за всё это время. Однако автор Emu80, конечно же, всё оперативно подправил под меня.

И вот у меня всё заработало! И в латинице, и в кириллице, и с «Shift»ом, и без него! Всё в точности, как нанесено на клавишах современного компьютера. С тем отличием, что по умолчанию для букв выставлен верхний регистр. Соответственно, чтобы набрать строчную букву, нужно нажать и удерживать клавишу «НР», то есть нижний регистр, как оно и было изначально на „Специалисте“. Теперь без «НР» мы получаем цифры и ЗАГЛАВНЫЕ буквы, а совместным нажатием с «НР» — символы и строчные буквы. Такое поведение позволяет максимально комфортно использовать наработанное ПО, например Basic, который не понимает символы с кодами свыше 0×7F, то есть строчные буквы. Куда хуже было бы всё время приходилось держать нажатым «Shift», чтобы вводить директивы Монитора или набирать текст на Basic'е. Всё же родная среда „Специалиста“ — это заглавные буквы. Заработать‑то заработало, но оно никак не помещается в отведённые 256 байт. А ведь я ещё хотел вместить туда же программу инициализации таймера К580ВИ53, который я подключил к «ЛИКу» и который через полминуты после включения начинает гудеть. Как вариант, можно затереть шрифт, который зашит в Загрузчике, коли мы всё равно теперь будет пользоваться новым шрифтом. Но этого очень не хотелось бы делать. А вдруг какая‑то программа из прошлых лет для своих нужд уже использует встроенный шрифт в обход стандартной процедуры печати? Хорошо, тогда, наверное, можно занять место между заглавными и строчными буквами, где в стандарте находится псевдографика, элементы таблиц и другие вспомогательные символы? Ведь тот же Зверков это место просто обнулил. Но нет, я хочу эти символы тоже задействовать — я же всё‑таки строю компьютер мечты! И пока что единственным доступным местом являются те самые 256 байт в знакогенераторе до символа пробела. Хотя, если говорить совсем откровенно, символам с кодами 0x00–0x31 всё‑таки тоже отведены определенные глифы, но будем считать, что их нет, тем более что коды из этого диапазона используется для служебных целей, типа перевода строки, направлений курсора и так далее, и их просто невозможно было бы вывести на экран штатными средствами.

В общем, как бы там ни было, удача в этот раз была на моей стороне. Правдами и неправдами я успешно решил данную задачу и утрамбовал всё в 256 байт, включая инициализацию таймера.

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

Осталось только пропатчить основной Загрузчик, чтобы моя программа обработки клавиш устанавливалась по умолчанию. Для этого потребовалось откорректировать всего лишь два байта в основном ПЗУ. Ну, а чтобы всё было совсем хорошо, я реализовал возвращение к стандартному поведению компьютера после сброса при зажатой клавише «НР». Не знаю, конечно, для каких целей это может пригодится, так как я и так использовал максимально стандартные и документированные методы, но тем не менее такую возможность я заложил.

По итогу что имеем: возможность вводить символы латиницы и кириллицы в обоих регистрах, а также стандартные символы, согласно стандартам современных клавиатур. При этом совместимость не пострадала. Весь софт, который работает через стандартные процедуры ПЗУ, как работал, так и будет работать. А тот софт, который как‑то в своих целях использует встроенный знакогенератор или какие‑то процедуры стандартного ПЗУ, также не пострадает. В общем, сплошная красота, куда ни посмотри!

А теперь технические подробности и нюансы.

На современных компьютерах в русской раскладке совместное нажатие клавиш «Shift» и «3» выводит на экран знак «№». Однако в кодировке КОИ-8 такой знак отсутствует. Я мог бы вместо него использовать «N», но я предпочёл выводить «#» — точно так же, как и в латинской раскладке.

Следующий момент касается заглавного твёрдого знака «Ъ». Как вы помните, в кодировке КОИ-7 Н2 этот знак отсутствует. На месте с кодом 0x7F, где он по идее мог бы располагаться, фигурирует некое значение «DEL». И в знакогенераторе это выглядит как полностью закрашенное знакоместо. Я было нарисовал там «Ъ», однако у меня перестал полноценно работать «Забой». Оказалось, что «Забой» использует символ с кодом 0x7F для того, чтобы стирать предыдущий символ. Это, безусловно, можно было поправить, но уже за пределами стандартного перехвата функции. Поэтому сейчас вместо заглавного твёрдого знака печатается пустое знакоместо, что визуально выглядит как пробел. Зато строчный твёрдый знак «ъ» с нажатой «НР» набирается без каких‑либо проблем.

Про клавишу «EDIT» («F9»), наверное, тоже стоит упомянуть. В прошивке, которая получила всестороннее хождение, убрано ограничение на набор символов в Мониторе, поэтому при нажатии на «EDIT» появляется некий символ, состоящий из случайных точек. В модифицированной же прошивке по нажатию на «EDIT» печатается вполне осмысленный знак — элемент таблицы в виде креста »┼».

Клавиша «Забой» расположена в том ряду, который можно переназначить. Однако по сути это служебная клавиша, которая не должна зависеть от раскладки и регистра. Я так всё и сделал. Во всех режимах нажатие на «Забой» выводит символ с кодом 0×08. А этот код соответствует клавише «Влево». Почему именно «Влево»? А дело в том, что в данном Загрузчике автор на клавишу «Влево» возложил именно такую функцию. Цитирую:

Несколько модифицирована подпрограмма 0С037H вывода символа на экран, изменена работа клавиши <←>. Если на неё многократно нажимать, курсор будет последовательно перемещаться на одну позицию влево вплоть до начала строки, и при очередном нажатии перейдёт в последнюю позицию предыдущей строки. Такая корректировка функции этой клавиши потребовалась для возможности редактирования длинной строки Бейсика или для удаления (забоя) символов, вводимых в текстовый буфер при работе подпрограммы 0C80FH Монитора, опубликованного в «М‑К» № 9 за 1988 год.

Как я уже написал выше, чтобы вернуться к полностью стандартному режиму и раскладке ЙЦУКЕН/JCUKEN, необходимо сбросить компьютер, удерживая клавишу «НР». Это не работает на Emu80, так как там при сбросе сбрасывается и состояние клавиатуры, вместе с нажатым «НР». Тем не менее есть обходной путь! Можно запустить Загрузчик командой GC000, удерживая «Shift». Правда, предварительно нужно будет отключить перехват магнитофона комбинацией клавиш «Alt» + «T», либо нажав соответствующую иконку в панели инструментов. После перезагрузки виртуального «Специалиста» перехват магнитофона можно снова включить, иначе у вас не будет возможности загружать файлы RKS. В этом режиме будет использоваться и стандартный знакогенератор. Это можно будет определить по стандартному начертанию всех символов, а также по отсутствию где‑либо строчных букв. Ну, или по нажатию клавиши «EDIT».

Да, ну и начертание всех символов в шрифте я перекроил по собственному вкусу. Но тут вы уже сами при желании можете развернуться — диапазон 0xD100-0xD7FF в полном вашем распоряжении.

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

Пример готовых колпачков, которые можно купить на Aliexpress
Пример готовых колпачков, которые можно купить на Aliexpress

К сожалению, не везде можно использовать третью микросхему ПЗУ без вмешательства в конструкцию компьютера. Например, в Линёвском варианте «Специалиста» предусмотрены посадочные места только под две микросхемы ПЗУ с Загрузчиком и Монитором.

Плата Линёвского "Специалиста"
Плата Линёвского «Специалиста»

Тут можно только посоветовать загружать программу со знакогенератором в ОЗУ. Вариант с ОЗУ также можно использовать и для проверки работы перед зашиванием в ПЗУ. Соответствующий RKS прилагаю. Загрузка и запуск осуществляются с адреса 0x8000. Однако имейте в виду, что всё будет работать только при условии, что ваш Загрузчик именно тот самый, из журнала.

Для использования данного ПЗУ совместно с адаптером PC‑клавиатуры от Алексея Морозова, достаточно переключиться в режим «не MX» + «JCUKEN» и перепрограммировать (и записать!) только 4 клавиши:

` - 205
\ - 160
/ - 146
= - 145

Ну и в завершении примеры с использованием только стандартной процедуры вывода символа на экран 0xC037.

Пример вывода всего алфавита
Пример вывода всего алфавита
Пример создания "окна" с рамкой и "тенью"
Пример создания «окна» с рамкой и «тенью»
Пример вывода текста в стандартной кодировке КОИ-8
Пример вывода текста в стандартной кодировке КОИ-8

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

ld hl, text
m1:
ld a, (hl)
or a
jp z, finish
; Заглавные русские
cp 0xe0
jp nc,m2
; Строчные латинские
cp 0x60
jp c, m3
cp 0x80
jp nc, m3
m2:
add 0x80
m3:
ld c, a
call 0xc037
inc hl
jp m1
finish:
jp $
text:
incbin "koi8r.txt"
db 0

Если вдруг вы прочитали и так и не поняли, для чего это может быть полезно, объясняю ещё раз. Для владельцев реальных «Специалистов»: прошиваете ПЗУ, клеите стандартные наклейки на клавиши и забываете про непривычное расположение символов на клавишах — текст в любой раскладке набирать комфортно. Для эмуляторщиков — выбираете раскладку «ЙЦУКЕН» и вообще забываете про проблему ввода. В обоих случаях бонусом идёт возможность набирать строчные буквы.

За сим разрешите откланяться.

P. S. Статья носит информационный характер, но если вдруг кому‑то действительно понадобится прошивка, о которой идёт речь в статье, то вот ссылка на неё.

P.P.S. Специалистоводы общаются на Форуме и в Телеграме.

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


  1. NeriaLab
    10.10.2025 07:52

    Поздравляю с первой публикацией на Хабре. Однозначно плюсик за столько важную и редкую тему. В особенности то, что я сам увлёкся компами именно из-за Специалиста


  1. Fishkarius
    10.10.2025 07:52

    Исключительно хабртортная статья, снимаю шляпу! ))
    Эх, Радио-86РК, Специалист, ЮТ-88, Орион-128... тщательно собирал все статьи о них в отдельные папочки...


  1. checkpoint
    10.10.2025 07:52

    Вот это автор заморочился! Спасибо за статью! Интересно, много в стране держателей "Специалиста" сейчас ?

    "Специалист" была одним из первых для меня ПЭВМ, собирали в сарайке у товарища в 89-90-м годах по схемам из журнала Моделист-Конструктор. Вытравленные платы (с ошибками) приобрели на рынке, долго мучались с ними. Парочку КР580ВМ80А нам добыл его отец, он работал на заводе (обслуживал советские ЧПУ). Помню как набивали длиннющие дампы и часто не сходилась контрольная сумма из-за опечаток в журнале. :(


  1. byvshev_en
    10.10.2025 07:52

    Отличная статья получилась, приятно прочитать было. + в карму.