Служба в «компьютерной роте»: ЭВМ, дедовщина и гостайна
[От редакции: автор статьи попросил сохранить его анонимность. Материал опубликован в рамках конкурса статей на DOU]
Это было в то время, когда Украина уже обрела независимость, но одесское отделение военной разведки, куда меня направили, все еще находилось в прошлом. Советская атрибутика, устав и, конечно, самое интересное — спецоборудование.
Сердцем особо секретного отдела радиоразведки была огромная советская ЭВМ в военном исполнении, с тщательно удаленными надписями и вообще без опознавательных признаков. Надо сказать, что с этим было очень сурово, все было сделано для того, чтоб ты не мог понять принципа работы, а если случайно узнал, то тебя следовало расстрелять. Шутка.
Хотя доля военной паранойи присутствовала, и майор Андрущенко, который убедил меня делать карьеру в «компьютерной роте», посулив спецпаек, шеврон с летучей мышью и звание лейтенанта по окончании службы, разрешал только смотреть, но руками не трогать. Впрочем, трогать там было нечего — ЭВМ работала полностью автономно, без участия человека. Насколько я понимаю, это была какая-то разработка ЕС ЭВМ для армии — как гражданский вариант, только более надежная и в бронебойном корпусе.
Суть службы в «компьютерной роте» заключалась в сканировании радиоэфира — поиск морзянки. А потом обработка записи найденного эфира, пропущенных через АЦП, в поисках заветных признаков букв, которые складывались в столь ценные слова. А дальше начиналось самое интересное, потому что дальше работа выполнялась на специализированных персональных военных компьютерах, к которым у меня был полный доступ.
Сам военный компьютер представлял собой переделанный гражданский компьютер ПК-01 «Львов», выполненный в виде сдвоенной платы в металлическом корпусе, блок питания и монохромный дисплей, который, как ошибочно считали, умеет показывать только буквы и цифры. ПК был основан на КР580ВМ80А, это была единственная причина, по которой меня и направили в «компьютерную роту» — я успел выучить ассемблер этого процессора в журналах «Радио». Выпущенный полностью на отечественной базе, с тридцатью двумя килобайтами ОЗУ, он подходил под суровые требования военных, но даже этого было мало. Каждый раз, когда со склада выдавали новый взамен сломанного, а запас их был там очень приличный, то карательная тройка вандалов выполняла одну и ту же экзекуцию — корпус вскрывался, микросхемы ПЗУ с заводской прошивкой выкусывались и уничтожались при помощи молотка, затем припаивались микросхемы с собственной прошивкой ПЗУ, после чего корпус собирали и пломбировали, вносили запись в журнал, потом в журнал учета записей и, наконец, записывали все в журнал учета журналов.
Гражданский компьютер ПК-01 «Львов» (Image source)
На мое предположение, что делать это глупо, майор ответил с усмешкой, что это я еще зелен виноград, а в схемах может быть миниатюрный передатчик, поставленный шпионом, который устроился на завод и через который будет сливать всю информацию о прослушиваемом диапазоне и туда начнут гнать дезу. О как!
В рабочем режиме этот военный компьютер предназначался для расшифровки морзянки.
Чтоб его запустить, нужно было выбрать режим связи с ЭВМ, ввести пароль (одинаковый для всех, был в ПЗУ), далее шла утомительная загрузка данных от Ески, которая имитировала считывание записи с магнитофонной кассеты, потом проверялась контрольная сумма с эталонной, если все было ОК — нажималась клавиша ВВОД и эта программа запускалась.
Потом каждому бойцу из роты выставлялись данные по радиочастотам. Сигналы шли по той же паре проводов, что и загрузка с ленты, причем ЭВМ уже преобразовывала морзянку в бинарный формат: ноль — это пауза, а единичка — уже сигнал. Процесс преобразования морзянки в буквы и читабельный текст было уже задачей бойца.
Так как очень часто передачу ловили не с начала, то основной задачей было правильно определить несколько первых символов, чтоб подсчитать длину паузы. Причем делать это следовало в реальном режиме времени, и чем больше времени уходило на разгадку — тем меньше текста оставалось для декодирования.
Кстати, сразу (ну после дизассемблирования) было видно, что программу писали самые настоящие военные: точка, тире и пауза записывались в программе при помощи символов (целый байт, Карл) — «точки», «минус» и «пробел» соответственно.
Если удалось получить читабельный декодированный текст, то он передавался обратно в ЭВМ. Такой расход на хранение был оправдан тем, что не требовалось тратить время на упаковку данных, но зверски жрало память.
Как дедушка над духом шутил
В военном компьютере был еще и автономный режим. Там можно было вводить программу в шестнадцатеричном формате, байт за байтом, без права на ошибку, а пустой ввод выполнял запуск. Программа, кстати, записывалась по смещению 0×100, это я почему-то запомнил. Как запомнил и специфический порт C4.
А было дело так: однажды один старослужащий хитро прищурился и стал мне вопросы задавать:
— Эй, салага, а ты-то хоть ассемблер хорошо знаешь?
— Да.
— А машинный код можешь писать без ассемблера?
— Могу, но со справочником и тетрадкой.
— За сколько времени сможешь написать программу, которая пошлет в цикле 200 байт со значением 255 и паузой в
— Ну, минут за пять. Надо просто код записи в порт посмотреть и такты в нопы перевести, а циклы я на память умею.
— Вот это да! А у нас никто меньше чем за полчаса не справлялся. Покажешь на автономке?
— Ладно...
И вот я ввел эти команды, запустил программу, и дальше, правильно — меня дернуло током. Не сильно, но ощутимо. И все вокруг засмеялись, а я заплакал.
На самом деле не заплакал, но очень удивился. Как это произошло? Ну а дальше меня посвятили в тайны компьютера, которые удалось раскрыть, и их передавали из уст в уста, от дембелей к духам.
Кстати, на самом деле никакой дедовщины не было, вероятно потому, что вся солдатская энергия была направлена на то, чтоб заставлять работать компьютеры по прямому их назначению — для развлечения и игр.
А тайна дерганья была проста: когда военные делали заказ, то они хотели, чтоб по команде от центральной ЭВМ можно было сжечь все компьютеры, желательно с потенциальными захватчиками.
Завод реализовал это требование при помощи того самого порта, который подавал заряд на конденсатор, который разряжался на металлический корпус и бил довольно ощутимо. Ну, а для того, чтоб превратить мирный компьютер в машину-убийцу, завод прислал схему и инструкцию о том, как, правильно, все догадались — напаять последовательно много конденсаторов и бахнуть весь мир в труху. Управлялось это хозяйство с помощью того самого порта с номером C4.
В последствии, занимаясь более глубоким хакингом, мы обнаружили, что там еще был и компаратор, который выдавал бит состояния заряда на порт B2. Для полной зарядки конденсаторов требовалось больше времени, чем цикл из 200 записей.
Служба
Потом Андрущенко огласил мне поставленные боевые задачи. Пароль на все компьютеры один, а это плохо. Надо сделать так, чтоб были разные пароли. Но изменять содержимое микросхемы ПЗУ нельзя. Это раз.
Все данные о радиочастотах передаются от ЭВМ операторам устно, а это опасно — враги могут подслушать и гонять на частотах дезу. Это два.
По той же причине нельзя, чтобы оператор видел содержимое текста, когда определяет паузу.
Нужно ускорить загрузку и передачу данных. Но к ЭВМ и ее программе у меня доступа нет, если что — заявку на модификацию проведут через центр. Но это маловероятно, и надо придумать что-то другое. Это три.
Еще научится подтягиваться на турнике, стрелять и пить, не пьянея.
На вопрос: а как я это все сделаю без знаний внутренностей военного компьютера, не говоря про ЭВМ — мне был дан ответ, что я в армии и должен применять смекалку и военную хитрость.
И вот я начал изучать доверенный мне компьютер. Так как автономный режим был убог и неправильно введенный символ нельзя было изменить, то, прежде всего, я стал изучать возможные варианты. Самым оптимальным было адаптировать готовый «Монитор» от РК-86.
Мы все, кто знал ассемблер, собрались и стали записывать дизассемблированную версию Монитора, чтобы выбрать самое необходимое, потом написать свое, перевести в коды и вбить в автономном режиме. Мы были сами себе дизассемблер, трассировщик и ассемблер. Мы сами отлаживали все ветки и циклы. Можно сказать, что мы были компьютерными саперами — без права на ошибку. Любая ошибка приводила к тому, что вводить команды приходилось заново, а это было очень долго.
Кроме того, нельзя забывать, что от основной службы нас никто не освобождал, все делалось после окончания смены и в выходные. Работа в субботу и воскресенье допускалась по специальному разрешению, которое нам выдали. Тогда отношение к службе все еще оставалось советским, было много энтузиазма, командование поддерживало инициативу.
Кроме того, наш майор еще и взял под личную ответственность компьютер с заводским ПЗУ, с которым мы занимались под его присмотром в кабинете, превратив в конце концов его в лабораторию совершенствования программ, куда были подключены еще люди, занимавшиеся аппаратным обеспечением, в частности, доработкой автономного режима с модификацией прошивки ПЗУ.
Мы добавили возможность редактирования кодов в пределах одного ввода, добавили редактор, которым можно было поправить код перед запуском и т. д.
Увы, но финансирование было резко приостановлено, завод перестал поставлять компьютеры. По сути, мы делали уникальную работу, которая в будущем не имела никаких шансов на выживание. Тем не менее мы ее делали. Потому что это было интересно, черт возьми!
На умняке
Насколько я понимаю, отделы радиоразведки работали практически без координации со своими нестандартными компьютерами. Основная причина была в том, что на самом высоком уровне было принято решение собрать IBM PC/XT на собственной базе и пользоваться широкими наработками из братских стран, которые уже давно перешли на этот стандарт. Все остальное отвергалось и, соответственно, не финансировалось.
IBM PC/XT (Image source)
Я думаю, что наш собственный код тогда был на уровне западных, а, возможно, и лучше. Но именно принятие решения о копировании и привело к нашему отставанию в области вычислительной техники. Сейчас я думаю, что наверху кто-то очень сильно не хотел развивать собственные разработки.
Ведь если вспомнить, какие мы делали игры, как передавали данные по телефонной связи, напаивали память, то дай хотя бы просто продержаться еще лет пять, мы бы могли начать конкурировать с зарубежными персоналками, которые стоили уже дешевле автомобиля, но все еще намного дороже отечественного восьмиразрядного компьютера.
В бой!
Когда я влез в компьютер с оригинальной прошивкой ПЗУ с головой, то понял, что без документации не обойтись. Обращения к заводу-производителю даже через начальника военчасти ничего не дало, кроме электрической схемы, которая и так была в комплекте. Пришлось заняться своей прямой деятельностью — разведкой, только не против потенциального противника, а против отечественного же завода.
Это был первый и самый трудный этап — работа с оригинальным ПЗУ в машинных кодах, когда все постигалось методом проб и ошибок. Первая программа, которую написал лично я, позволяла подключить барабанное печатающее устройство и выводить туда символы. Получить к нему допуск было нереально сложной задачей, и только прикрытие нашего майора позволило сделать первый шаг. Стоял неимоверный грохот, пока я скидывал дампы ПЗУ. Эти дампы потом совместно изучались и дизассемблировались. Приходилось обвешиваться справочниками по микропроцессорам, и воображать в голове, что же должно происходить в компьютере. Потом это проверялось на практике.
Именно тогда я и обнаружил, что в прошивке была куча зашифрованных через xor программ, которые обслуживали непонятные устройства по несуществующим портам.
Я сообщил об этом Андрущенко. Он внимательно на меня посмотрел и спросил:
— Кому ты еще рассказал об этом?
— Никому.
— Правильно. И мне ты тоже ничего не рассказал. Понимаешь, почему?
— Догадываюсь...
— Даже не догадывайся. Разведчик должен уметь все забывать. Повтори, что я сказал?
— Я не запомнил.
— Молодец!
Это был наш секрет Полишинеля. Разумеется, об этом давно знали те, кому было положено знать. С этого момента я понял, что основная задача разведчика — это не просто добыть информацию, а еще правильно ей распорядиться. И, конечно, такие тайны были у всех. Не то, чтобы кто-то жучил коды какой-то игрушки, нет, такими все делились. Но вот пример с мифами про дисплей и знакогенератор дал мне отлично понять, что надо держать язык за зубами.
Мифы о дисплее
Разумеется, что после сдампливания заводского ПЗУ, делом чести было сдампить и военное.
Дизассемблинг показал интересную штуку, помимо прошитого намертво пароля и способа связи с ЕС. Там была программа, которая принимала символы и затем считывала фрагмент памяти по смещению, играла с портами и записывала фрагмент по специальному смещению, которое хитро вычислялось.
Разумеется, что я тоже написал программу, где стал играть портами и писать последовательность чисел и смещением памяти, в которое они записываются.
Результатом стал «мусор» на экране. В общем, оказалось, что в компьютере есть видеоадаптер со своей памятью, который можно подключить и получить адресацию как по обычной памяти, но только содержимое будет привязано к экрану. Кстати, в этой памяти код без проблем отрабатывал и отрисовывался одновременно. Получалось, что есть еще кусок памяти, которая нигде не задокументирована!
Улучив момент, когда я остался наедине с одним из разработчиков военного ПЗУ, я спросил, под что, мол, расходуется такой большой кусок, где ни данных, ни кода. Разумеется, я знал, под что, просто хотел услышать его ответ:
— А это символы для знакогенератора.
— Это как?
— Ну каждый знак состоит из точек, байт — это восемь точек по вертикали, а стопка из восьми байтов — изображение одного знака восемь на восемь точек.
— А все говорили, что можно только буквы на дисплее отображать...
— Я этого не говорил!
— И я тоже не буду.
— А ты молодец, хлопец, далеко пойдешь!
Фальшивая нота
Программа для загрузки и обмена информацией, которая была прошита в военном ПК для обмена информацией использовала три ноты, передаваемые через АЦП: нижняя нота — точка, верхняя — тире, а средняя — пауза. Для передачи морзянки от ЭВМ к компьютеру это был единственный вариант, но я не понимал, зачем в обратную сторону идет только одна нота, если при сбросе он высылал к ЭВМ восемь нот? Все это было давно изучено путем нехитрой прослушки, когда к проводам подсоединили пьезодинамик.
Естественно, что выдавать звук на динамик и считывать его с микрофона научились задолго до меня. Диапазон был широк и можно было считывать/записывать звук с дискретностью байт/нота, то есть — 256 нот! Но использовали всего три. Почему? Вопрос был без ответа.
При всем этом, никто не попытался написать программу, которая загрузит те самые коды, которые передает ЭВМ, и посмотреть, а что там происходит? Мне сказали, чтобы я не пытался, это безнадежное дело. Тем самым заставили меня на несколько месяцев покинуть нормальную жизнь и начать сражение с неизвестным гением отечественного программирования.
Прежде всего, я изучил программу в ПЗУ, которая занималась чтением/отправкой данных. Там было на вид все просто.
Первую проблему я получил тогда, когда набил в автономном режиме копию кодов режима связи ЭВМ и программы ПЗУ, которая считывала все это дело, но не запускала программы, а возвращала в режим автономной работы.
Программа загрузилась и запустилась в обычном режиме. Я не понял. Я точно проверил, что происходит возврат. Ошибки быть не могло. Черт, теперь опять все заново вводить, да еще мне говорят, что не я один такой умник, и до этого пытались — все бесполезно.
Ладно, тогда я решил подойти к проблеме иначе. Раз мне придется много раз вводить коды заново, то нужно ускорить этот процесс. А как?
Вывод напросился сам собой — раз там аналоговый сигнал, который можно прочитать и записать, то почему бы не сделать это с помощью магнитофона?
После многочисленных просьб «достать» магнитофон под предлогом, чтобы послушать музыку на день рождения, удалось получить магнитофон Маяк. С замиранием сердца я сделал копию сигналов с ЕС, потом подцепил микрофон к компьютеру — и загрузка прошла. Не всегда, иногда была ошибка контрольной суммы, а иногда и полный зависон, но тем не менее первый шаг был сделан.
Теперь я мог вбить небольшой код и читать/записывать данные. Я начал разбираться, почему так произошло, загрузив данные на компьютер с оригинальным ПЗУ, правда пришлось вбивать весь код загрузчика заново, но вот сейчас я запущу распечатку и все узнаю. Разумеется, что программа автоматически запустилась и на этом компьютере, перейдя в обычный режим.
Это могло означать только одно — несмотря на различие ПЗУ, в чем-то они совпадают. Но в чем? Наверное в регистрах, потому что больше не в чем. Я долго и безуспешно искал решение, пока не дошел до глубины глубин — подсчета контрольной суммы. И тут я нашел первую закладку безопасности в военном ПЗУ: если контрольная сумма была ошибочна, но при этом равнялась 01FF, то программа переходила по этому адресу.
Тогда я написал свою программу, в которой была копия программы загрузки кода ПЗУ за исключением обработки контрольной суммы, она загрузила код. И знаете, что? Правильно, он опять автоматически запустился в обычном режиме. Тут мне реально захотелось зарыдать, потому что у меня на поиск закладки ушли все силы, и я чувствовал, что не смогу повторить все во второй раз, спускаясь в глубины глубин.
И вот я просто сидел и втыкал в нотный перелив загрузки с магнитофона, когда один из из старослужащих вдруг сказал, что последняя нота фальшивая!
— Чего?
— Последняя нота — фальшивая, слишком высокая.
— Точно?
— Сделай громче, да сам послушай!
— Я не услышу — мне медведь оба уха оттоптал.
— Да ладно! Прислушайся лучше!
Да, фальшивая нота там определенно была, это я услышал, подключив наушники и врубив звук погромче. И это определенно давало мне однозначную точку отладки — преобразование потока бит из порта АЦП в байты кода. Именно там и оказалась последняя закладка. При проверке верного сигнала, которым являлось многократное повторение одного и того же байта-ноты, был обработчик ошибок. Если сигнал не соответствовал нужному, то возникало переполнение регистра, проверяющего вывод с порта, потом осуществлялся переход в ПЗУ на адрес сообщения об ошибке. Именно там и стояла закладка — если регистр переполняется, то есть нота выходит за размер байта, то происходит переход по адресу регистра переполнения и последнего кода ноты. Не сложно было понять, что значение переполненного регистра становилось 01, а последняя нота естественно была FF. Наш знаменитый 01FF. А по адресу 0100 была размещена та самая программа с сообщением об ошибке, которая при загрузке копировалась туда из ПЗУ.
Программу с ЭВМ я получил. Дальше уже было не сложно написать загрузчик версии оригинального ПЗУ, в формате которого я записал программу ЭВМ на магнитофон. Скорость загрузки увеличилась вдвое.
Я отрапортовал, что справился с первым боевым заданием, продемонстрировав свою чудо-систему. Майор посмотрел, молча забрал магнитофон с кассетой и компьютером и точно так молча же удалился.
Несколько дней я не знал, чего мне и ожидать — медали или трибунала. Получил я не то и не другое, а лист купонов на 50 купонокарбованцев и 65 рублей рублями. Премия!
Её я потратил в этот же день совместно с карательной тройкой, накупив в буфете разной ерунды.
Свой
Скоро меня приняли в круг той самой карательной тройки — гражданские микросхемы уничтожать. Чувствовал себя белой вороной, никто из них со мной почти не общался. Кроме этого, я еще был назначен главным за новую прошивку, а под мое командование назначены куча взрослых и даже старых мужиков. На словах Андрущенко.
По факту оказалось, что должен самолично сделать новую прошивку ПЗУ, причем за все косяки отвечаю я лично, а награда за успех — общая. Такой себе Ванька Жуков, только вместо дедушки полковник, который в курсе всего расклада и считает это нормой. Следует отдать должное, мой код никто не проверял и не капал на мозги, за исключением одного момента — процедуры первоначального тестирования — ППТ или, как я назвал, ПыПэТц.
При включении из ПЗУ все копировалось в память, тестировалось на идентичность, ну примитивная проверка битой памяти, потом код исполнялся уже в памяти, где сверялось все с ПЗУ, уже, наверное, на предмет того, чтобы схему не вынули. Все попытки убедить в том, что это излишняя процедура, которая еще к тому же откусывает память, были тщетны. В конце концов я сдался, но после ПэПэТца я передавал управление обратно в ПЗУ, освобождая ценную память.
Свое действие я мотивировал тем, что это гарантирует наличие ПЗУ во время работы — если его удалить, программа остановится. Что так даже безопаснее. Мужики переглянулись между собой, и мне было разрешено не покидать помещение после работы. Не то, чтобы я перестал быть мальчиком на побегушках, пусть и электронных, но я вроде стал как свой. По крайней мере, меня приглашали играть в карты-шашки-пиво-вино-домино и слушать про рыбалку-охоту, так как мне поведать им было нечего.
Пользуясь этим, я смог поговорить в нормальной обстановке простым языком о том, куда мне лезть позволено и куда меня не пустят. Все было очень просто: мне позволено делать с военными компьютерами в операторской все, что угодно, в комнату к ЭВМ меня не пустят. Доступ только по кабелю связи. Протокол мне дадут, да и я сам, наверное, давно его декодировал (это было правдой).
Кроме того, мне были даны мудрые советы, среди которых: правило указания срока. Например, если ты делаешь программу за неделю, ты ее удваиваешь и добавляешь еще одну. Получается — три. Затем командование тебе говорит, что это много и сроку тебе — десять дней. И у тебя еще остается немного времени, чтобы сдать досрочно, например, за девять дней, а запас по времени — делать все без напряга. Это был один из самых ценных советов.
Когда я был готов зачитать рапорт о том, как планирую выполнить поставленную задачу, то просил доску с мелом, чтоб наглядней изображать.Сразу скажу, что рапорт, который скорее следовало бы назвать презентацией, прошел внезапно на ура, я получил досрочно лейтенанта, обмывал погон в самогоне и страдал от похмелья. Но это все обыденности, по сравнению с тем, что я сделал.
Deus ex machina
А придумал я следующую штуку. Один из военных компьютеров будет основным. Он берет на себя роль командира между ЭВМ и остальными компьютерами бойцов-операторов. У него будет свое ПЗУ, а у операторских оно будет вообще минимальное — никакого автономного режима и так далее. После включения операторских компьютеров, они загружают свою программу через запись с магнитофона, что сократит время простоя в полтора раза.
Кроме того, в основной компьютер можно загрузить пароли для подчиненных компьютеров, каждому свой. И их может вводить другой человек, а сверять результаты — оператор основного, то есть он паролей не знает.
Передача частот передается от ЭВМ на основной компьютер в устном режиме, а потом передается на подчиненные компьютеры уже при помощи сигнала.
Декодирование данных идет в визуально шифрованном режиме, когда оператор подчиненного компьютера наблюдает, что его дисплей очищается от «мусора», — он жмет пробел для инициации передачи. Кстати, оператор вообще не нужен, потому что можно автоматизировать этот процесс, но это уже отдельная задача, которую я один не реализовал.
Все это я описывал очень простыми словами, старательно рисовал кружки и линии на доске. Наверное, со стороны казалось, что учителя принимают экзамен, только все почему-то в военной форме.
— Что тебе нужно из обеспечения, человеческой силы и времени? — спросил, наконец, начальник военчасти.
— Шесть месяцев, запись модифицированного ПЗУ, магнитофон, детали для усилителя, провода.
— А для автоматизации дешифровки?
— Дополнительные ПЗУ со статическими данными по типичным наборам последовательностей, которые представляют собой наиболее часто встречающиеся слова. И их дополнительная обработка.
— Сделаешь за четыре месяца. Потом со мной в центр поедешь — за последовательностями и на повышение. Понятно, товарищ лейтенант?
— Так точно! Рад стараться! Служу Советскому Союзу! Ой...
— Отставить «ой». Мы с тобой оба все еще служим государству, которого уже нет.
Это была правда. СССР уже не существовал, а оскудевший поток финансирования показывал, что и независимой Украине мы сами не особо нужны.
Что будет со мной на гражданке, я представлял весьма смутно, а потому решил делать то, что мне было интересно — писать код для ПЗУ. Формально для двух, но код подчиненного компьютера был куцым обрубком гражданского ПЗУ, от которого мне было только и надо, что загрузка через магнитофон. Наступало время интересной работы.
Однако прежде чем писать код ПЗУ, мне надо было решить более приземленный вопрос — а как же будет происходить обмен данными? В плане у меня получалась своеобразная локальная сеть, и нужно было иметь некое устройство, которое отловит сигнал от нужного компьютера и соединит его с основным. А как быть, если сразу несколько захотят передавать данные? Это уже блокиратор придется паять.
Сразу скажу — хаб на отечественной базе у меня так и не получился. Слишком многого я захотел и слишком рукожопым я был. Так что все ограничилось парой усилков, которые передавали сигналы с магнитофона на подчиненные компьютеры. Заодно я спаял автоматическое управление Маяком, что позволило нажатием одного тумблера включать передачу, запускать воспроизведение кассеты, а потом прокручивать ее назад и, собственно, все. Звучит примитивно, но зато делать было интересно
А с коммутацией я решил сделать все вручную. Благо, теперь я мог выпросить под это нужные рюхи со склада. В поисках панели связи у меня была альтернатива между сломанным пультом управления ракетным комплексом и нерабочими телефонными станциями «Псков». И там, и там мне нужны были только клавиши, так как у меня тупо аналоговая коммутация — каждая клавиша подключала провода к выбранному компьютеру. Но у Пскова была еще и телефонная трубка, что мне очень подходило. Кроме того, их было несколько, а значит, я мог подключить намного больше компьютеров — тут пульт управления проигрывал.
Псковы мне выдали, предупредив, что они «пустые». Потом, обсудив все нововведения, я решил, что стоит упростить схему: у оператора основного компьютера будет стоять один Псков, а на столе у операторов подчиненных компьютеров — другой. Между собой Псковы будут подключены только для переговорной линии, она же будет использоваться для передачи данных: каждый подчиненный компьютер был подключен к личной кнопке, при нажатии сигнал поступал из компьютера через один Псков на другой, а от него — к основному компьютеру.
Это все выглядело так: один из операторов поднимает руку, я снимаю трубку, он подходит и берет свою тоже:
— Четырнадцатый просит команду на передачу данных.
— Передачу данных разрешаю.
Он бросает трубку, нажимает кнопку подключения своего компьютера, подходит к нему и уже там жмет пробел для передачи данных, а в это время я у себя переключаю в режим получения данных. По окончании передачи происходит сверка:
— Передача данных завершена, контрольная сумма 11AA
— Подтверждаю, линия свободна (или ошибка в сумме — повторить передачу).
Сейчас это очень смешно и наивно, но тогда... я ощущал себя диспетчером, нет, даже не авиа, а космических войск! Что характерно — серьезны были все. А если кто-то зевал и пытался снять трубку без команды линия свободна — его легко могли послать драить сортиры!
Я тогда распечатал всякие глупые бумажки и наклеил их у себя над нерабочими клавишами — «Старт на Луну», «Десант на Марс» и тому подобное. Не обошлось без «Ракеты на Америку».
Как-то полковник Андрущенко зашел и стал читать надписи. Стал хохотать, а потом дошел до «Ракеты на Америку» и погрустнел:
— А это убери. С Америкой мы больше не враги, да и ракет у нас нет.
— Как это? Не может быть! Как нет ракет?
— Пусковые шахты бетоном заливают...
— Все?!
— Все.
Для меня это было потрясением. Газет я тогда не читал, радио не слушал — все свободное время отдавалось работе или сну.
В то, что мы с Америкой не враги, я был готов легко поверить. Но в то, что страна остается без защиты, потому что ракеты — это не для войны, а наоборот — чтоб ее не было, — вот в это поверить было тяжело. Стало очень грустно, и мне теперь стало понятно, что никуда мы не полетим — ни на Луну, ни на Марс.
Все бумажки я потом поубирал.
Под основной компьютер отгородили приличный угол, обшили его фанерой и плексигласом, поставили дверь с замком, внутри повесили огнетушитель и аптечку. Суровый дядька из отдела безопасности потребовал, чтоб питание и связь шли из зала с ЭВМ и отключались там с помощью тумблера, а на стену, которая выходит в комнату с подчиненными компьютерами, — динамик для громкой связи. Идея мне понравилась, я добавил лампу, для которой прикрутил кожух с надписью «Линяя свободна».
Пришла пора делать свое ПЗУ. Основная проблема, для решения которой и был сделан автономный режим, — то, что прошьешь программатором — не исправишь монитором. В смысле программист ПЗУ ошибается раз на ПЗУ. Но это меня не пугало, так как я имел все навыки саперного программирования и отладки с помощью тетради с ручкой.
Между прочим, теперь распознание шло в графическом режиме. Каждый сигнал передавался битами — 00: пауза, 01: точка:, 10: тире, 11 — конец блока. Четыре сигнала формировали яркость точки на монохромном дисплее — бит. В остальном я пользовался вызовами оригинальной программы от ЭВМ — с помощью стрелок курсора менялись системы декодирования, если была выбрана правильная — экран очищался и можно было передавать текст. Не видя его самого, текст отображался у меня на дисплее, а я уже передавал его дальше, если все было нормально. Это позволяло здорово экономить память и работать с длинными передачами.
Начальник военчасти все осмотрел и остался доволен. Теперь осталось вызвать специалиста по безопасности из центра, и мое детище будет использоваться в реальной разведке. А еще мне было велено подготовиться к доступу к гостайне — заполнить анкету, договор о неразглашении и прочие бюрократические штуки.
Первую неделю я ждал спецбезопасника, мне даже снилось, что он пришел проверять, а у меня зажевалась кассета. На следующую неделю, по совету Андрущенко, я начал делать свой дембельский альбом. Сразу скажу — с собой мне его не отдали. Слишком много секретных объектов, на фоне которых я снимался, да еще все подписи делал то в шестнадцатеричных кодах, то морзе. А на подложке иголкой наколол инициацию ПЗУ в бинарном формате: на память.
Зато я и не заметил, как прошло время и внезапно ко мне явился тот самый специалист по безопасности. Он был совсем не страшным, а уставшим и раздражительным. Быстро осмотрев все мое творение, он спросил, а почему я выбрал такую допотопную связь. Я смутился и честно ответил, что пытался спаять автоматический коммутатор, но у меня не вышло.
Спецбезопасник посмотрел на меня как на идиота и раздраженно сказал:
Надо было выписать селектор, потому что белые люди давно уже перешли на IBM PC-совместимое и коаксиальную сеть, а старое оборудование никому не нужно, кроме таких дикарей, которые живут в прошлом и даже серпасто-молоткастый герб еще не успели поменять на тризуб.
Он быстро оформил нужные бумаги и свалил, потому что ему еще надо было попасть на Староконный рынок, а оттуда успеть на автобус с автовокзала. Мне кажется, что основной целью и было посещение Староконки, а я — досадной помехой на этом пути. В итоге пустышкой получался я и мой труд. Потому что я — неандерталец. Человекообразное. Занимался разработкой того, что уже устарело, и через десять, даже не десять, а пять лет станет никому не нужным.
Впрочем, начальнику военчасти было покласть с прибором на все чувства. Раз по документам все прошло, в срок я уложился, точнее даже немного раньше срока, то я, безусловно, герой, совершивший военный подвиг, пусть и в мирное время. Медалей, конечно, мне никаких не дадут, но вот подвиг будем отмечать прямо по пути в центр, где мне выдадут ту самую гостайну. Моя печень интуитивно содрогнулась.
Гостайна, которой нет
На ЖД вокзале стояли трое: начальник военчасти, полковник и лейтенант. Начальник что-то сказал, дал денег и остался в одиночестве — полковник с лейтенантом пошли покупать пару ящиков водки и закуску. Не ради пьянство окаянного, а... Кого мы обманывали? Конечно, ради пьянства. Полковник сразу велел купить только две бутылки и закуску и остался ждать меня за углом. Потом мы выжидали, когда поезд начнет давать пары, бегом бежали и заскакивали на последнем моменте
Потный и запыхавшийся полковник сообщил, что кругом дефицит и достать удалось только две бутылки, по одной в руки, зато холодные. Вернув неизрасходованные деньги, полковник отправился на поиски прекрасных дам, а мне выпала честь сервировать стол.
Вернувшись без дам, полковник философски заметил, что от женщин одни неприятности. И мы начали отмечать мой подвиг. Я отметился примерно в 150 грамм, полковник в 200 грамм, остальное моментально употребил начальник военчасти и заснул, громко храпя от обиды на недоперепой. Мы готовились встречать Киев.
Получение гостайны я представлял совершенно не таким, да и мое командование тоже. Конечно, никаких салютов и подземных бункеров я и не воображал, но думал, что данные будут разложены по папкам с грифами и печатями. В реальности оказалось все прозаично.
Во-первых, большинство декодированных передач уже было оцифровано, а оставшиеся были еще с доисторических времен.
Во-вторых, оцифрованные передачи хранились в базе данных.
В-третьих, база обрабатывалась самыми настоящими американскими компьютерами. С цветными дисплеями и огромными жесткими дисками на невероятные 240Mb!
Я объяснил, что мне нужно записать самые повторяющиеся фразы из передач. Желательно в виде морзянки, упакованной по два бита. В ответ я получил вопрос, который меня поставил в тупик:
— В какой операционке работаешь?
— Эээ... ни в какой. Я данные переведу в сжатый формат и запишу в ПЗУ. Для быстрого сравнения в автоматическом режиме.
— А сколько у тебя там памяти?
— Много, целых 32k ОЗУ и 32k ПЗУ, правда 8 уходит под код и знакогенератор, но все равно хватит.
— Понятно. Для нормальной работы тебе понадобится 386 или выше, принеси пачку дискет — запишу операционку на них, сам поставишь, я думаю. Если что, запроси у руководства — вышлем, у нас есть лишние. А базу я тебе скину в архиваторе, потом распакуешь на жесткий и вольешь в базу, оттуда сможешь экспортировать в нужном тебе формате.
— Разрешите поинтересоваться — вмешался начальник военчасти — А вот это у вас считается нормальным, хранить такую информацию на враждебном оборудовании, да еще и передавать на дискетах?
— А у вас считается нормальным, что у моей жены зарплата стала в долларовом эквиваленте меньше пятнадцати баксов?
— Да при чем тут это!
— При том. Сейчас у нас других проблем хватает, а компьютеры не враждебные. Их нам американцы подарили. И у вас, наверное, скоро тоже будут такие. Не фирменные, конечно, но IBM-совместимые, на отечественной базе. Про компьютер «Поиск» слышали?
— Никак нет!
— Пройдитесь по магазинам, посмотрите. Все равно вам потребуется нормальный компьютер для работы с базой данных. И диск сразу на 240 метров как минимум берите.
Командование было мрачнее тучи. Во-первых, денег хватило только на коробку дискет, которые мне молча выдали из неизрасходованных «водочных» средств. Во-вторых, пятнадцать баксов тоже сыграли роль. А в третьих, совершенно понятно, что купить айтишку было нереально, и придется ее доставать. Перспективы не самые радужные.
Я же получил наказ: записать на дискеты операционку для работы с базой, взять документацию и выучить все, что надо, потому что доставать компьютер мне будут по частям, а это займет время.
Обратно мы ехали серьезные и трезвые. Командование обсуждало методы относительно честного добывания дисплея, жесткого и прочих компьютерных потрошков, которые я предусмотрительно записал в тетрадку. Я же начал читать руководство, которое оказалось на английском языке, что, впрочем, меня особо не смутило. Кто дампы в армии дизассеблировал — тот операционку одной левой освоить сможет. Руководство пугало безумно непонятным названием «Introduction to Sco’s Unix System V/386». Заканчивалась эпоха хакинга ПЗУ, и начиналась эпоха программирования в «Скотине».
Что мне нравится в нашей армии, так это умение «доставать» и «рожать». Все что угодно — от пачки сигарет до компьютера. Последний собирался мной по частям прямо в кабинете полковника. Сначала появилась материнка с процем, но без памяти, потом блок питания, кабели, клавиатура и так далее. В результате у меня оказалась троечка, с четырьмя метрами памяти и огромным жестким диском — на 320 метров. На диске стояла
Победитель
Скотину я установил и окунулся в глубокий и неизведанный мир командного интерфейса Unix. К старому компьютеру интерЭВМ угасал, но все же я реализовал задуманное.
Наборы популярных фраз и самые частые слова из передач я ужал до бинарного формата, выкинув паузы. Этими данными прошили ПЗУ. Точно такую операцию я проводил с блоком памяти декодированной передачи для сравнения. Звучит непонятно? Показываю пример.
Предположим, у нас есть фраза «экстренный вызов», которая будет в виде морзянки записана так: ··—·· —·— ··· — ·—· · —· —· —·—— ·——— —···— ·—— —·—— ——·· ——— ·——
Выкидываем все паузы и получаем: ··—··—·—···—·—··—·—·—·——·————···—·———·————··———·——
Переводим в сжатый бинарный формат (0 — точка, тире — 1): 00100101000101001010101101111000101110111100111011
Что, в свою очередь, будет представлять набор байтов со значением 9452ADE2EF3B.
В ПЗУ была таблица адресов таких последовательностей с их размерами. Программа проверяла сначала первый байт по таблице, потом второй и, если последовательность совпадала, значит, смещение выбрано верно, и дальше шла попытка автоматически декодировать текст. Если все получалось — экран светлел (вычитались единички), и оператор мог приступать к передаче текста. Роль его была чисто утилитарная — если бы мне удалось автоматизировать коммутацию, то человек был бы не нужен. Впрочем, следует сказать, что автоматическое декодирование не всегда работало чисто — очень велик фактор ошибок, причем на многих уровнях.
Командование осталось очень довольным, я продолжал грызть премудрости Скотины, срок моей службы подходил к завершению. Продолжать карьеру военного в мои планы не входило, так что все шло своим чередом.
Меня хвалили перед строем, за неоценимый подвиг, настолько секретный, что мне даже никакая награда не полагалась, потому что я научил компьютер мыслить, и теперь все радиопередачи у нас как на ладони.
Потом я долго искал работу, пока не понял, что никому я не нужен со своим знанием Unix, а нужны бухгалтеры со знанием 1С.
Адаптировал свои игры под гражданский вариант ПК-01 и писал новые, пытаясь продавать их. Покупали мало — компьютер отжил свое.
По знакомству меня устроили работать кладовщиком на промрынке «Седьмой километр», где стоял компьютер, и мне разрешалось на нем работать. Собственно, ради этого я и пошел, так как денег было мало, хотя на вторую же зарплату я купил свой жесткий диск для опытов. Я много работал в бетонной каморке и заработал ревматизм в правом колене, так как обогреватель грел только слева. Потом я как-то купил журнал CHIP, в котором был диск с Linux Caldera, наследником Sco Unix, который и поставил на своем жестком диске, и проводил с ним время в свободные от работы часы.
Затем я, наконец, нашел более престижную, хотя и менее оплачиваемую работу, на которой у меня появлялся доступ к Linux серверу, да еще и с неограниченным подключением к интернету. Где я за полтора года победил его полностью, досконально изучив все аспекты.
Говорят, что человек со временем теряет способность к обучению. Вероятно, что тот брейнфакинг, который я сам себе устроил в армии, был своего рода «закалкой» мозга, поэтому я не прекращаю осваивать новое, хотя не редко чувствую себя полным идиотом. Наверное, мне просто повезло, так как я не был сломан или оболванен службой, а наоборот — провел время с пользой, тренировал мозг и набрался новых знаний. Иногда чудеса случаются.