По первой программе

23 травня
По первой программе
Мы попросили коллег вспомнить свои первые компьютеры и написанные на них первые серьезные программы — те, за которые не стыдно. Начинаем с трех историй, в которых будут армейские радиотелефонисты, разные цвета на черно-белом мониторе и невероятные приключения советского компьютера для радиолюбителей.

Александр Будницкий, Senior Developer

Моим первым устройством, принимавшем программу, был МК-61 — программируемый калькулятор с польской записью. С ним я столкнулся в школе в 1984 году, на нем же играл с другом в первые «компьютерные» игры, где калькулятор рассчитывал траектории машин на гонках или лунолетов, перелетающих с Луны на Землю.

Первое знакомство с программированием — компьютерный класс в техникуме в 1986 году.  Там были зелено-черный символьный ДВК-3 и БК в сети, на котором я постигал Бейсик. Совершенно случайно в 1991-м в армии, в учебном классе радиотелеграфистов, оказались такие же БК. На одном из них на том же «Бейсике» я написал первую полезную для других программу обучения радиотелефонистов размещению оборудования в командно-штабной машине.

Дальше IT постепенно стали делом жизни. В 1992 году был «Поиск-2» (последний советский аналог IBM XT) с 8-дюймовыми дискетами и мышкой размером с небольшой утюг. На нем я писал промышленный код для автоматизированной системы управления технологическим процессом шахтных предприятий на ассемблере. Потом были один из первых Аpple (Macintosh), который эксплуатировался как печатная машинка, первый персональный компьютер, лично собранный из запчастей на базе intel 386, и конечно, незабываемый SoftICE, с которым я провел сотни бессонных ночей.

Даниэль Лурье, главный редактор DataArt

В старших классах школы мы с приятелями подолгу зависали в компьютерном классе, дизассемблировали, администрировали сети, изучали чужой код, писали что-то для себя на C и ассемблере, выжимая максимум из тогдашних машин. Конечно, интереснее всего нам было писать игры, которыми мы были увлечены во всех смыслах. Мы читали интервью Джона Кармака из id Software, где создавали главные игры того времени — Wolfenstein 3D, Doom, Quake — ну и сами много играли. Чтобы создавать что-то свое, необходимо было самим рисовать для игр картинки. Поэтому я написал редактор графических элементов — спрайтов — для двухмерных игр. Вообще-то трехмерные игры мы тоже делали, но, честно говоря, получалось совсем уж паршиво.   

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

Вообще редактор был довольно крутой, он позволял делать многие базовые операции с картинками и даже хранил маленькие анимации. Можно было нарисовать что-то по кадрам — например, птичку, которая в полете постоянно машет крыльями — и использовать этот элемент в игре. Потом я не мог определиться, куда поступать: то ли на программирование, которое очень любил, то ли на лингвистику, к которой питал не меньший интерес. В итоге пошел изучать лингвистику, хотя и на филологическом факультете писал базы данных и даже CMS для кафедры на FoxPro. За них мне тоже не стыдно, но это уже не было так весело и не давало такого адреналина, как первая серьезная программа, предназначенная к тому же для игр.

Глеб Ницман, Senior Developer, вдохновитель и хранитель Музея IT DataArt

В 1988 году в девятом классе я собрал «Радио-86РК» — советский компьютер для радиолюбителей. До этого я уже собирал по чужим схемам и потихоньку пытался разрабатывать собственные цифровые схемы. С последним очень помогла мама. Она работала инженером по функциональному тестированию в отделе разработки спецЭВМ закрытого НИИ и доставала мне комплектацию микросхем. Я собирал их на платах из толстого картона, который протыкал иглой под ряды выводов, делая соединения проводом в специальной лаковой изоляции, который залуживался от прикосновения паяльника — получалось макетировать практически мгновенно!

Для РК один из сотрудников мне продал печатную плату и помог достать дефицитную комплектацию. Оставшееся я докупал на толкучке у магазина «Юный техник» на Краснопутиловской (питерские со стажем помнят, как ее иногда разгоняла милиция). Плату клавиатуры и блок питания проектировал и делал сам. Компьютер не сразу (пришлось собирать пошагиватель, индикатор состояния шин на дешифраторах на прошитых под 16-ричку микросхемах 155РЕ3 и индикаторах АЛС), но запустился.

«Ассемблера» я тогда не знал, только «Бейсик» так себе, однако уже через год–полтора машина содержала 64 К памяти, адресное пространство было основательно перекроено, все ВВ-устройства загнаны наверх, монитор дизассемблирован и подпатчен, как «Бейсик» и некоторые игры.

В схему управления адресным дешифратором я добавил логику, позволяющую переписывать содержимое ПЗУ в ОЗУ под себя, т. е. по тем же адресам f800-ffff — а потом выбирать данные из ОЗУ вместо ПЗУ при обращении процессора в верхние ячейки памяти. Это позволило отлаживать монитор без нудного ультрафиолетового стирания и перепрошивки и заметно ускорило отладку.

Для программирования ПЗУ был разработан и поддержан программатор, а для быстрой загрузки программ — банк статической памяти с батарейной поддержкой (8 КБайт) — оба работающие через порт ВВ. Монитор научился грузить программы из этой памяти, в том числе, при старте, что позволило отказаться от ленты для «Бейсика» или пакета редактор—«Ассемблер», что сильно ускорило дальнейшую модернизацию.

Дальше машина получила ВИ53, контроллер шины (ВК38) и прерываний (ВН59) — ура, наконец-то нормальный звук и работа по прерываниям! Монитор был переписан под работу с клавиатурой по прерываниям (с буфером символов, как в РС), схема и режим видеоконтроллера изменены под формат 80 символов на 25 строк (64 и программные гасящие импульсы меня всегда раздражали). Под это пришлось переписать много программ, напрямую пишущих в видеопамять (таких было большинство), включая «Бейсик». Аппаратно для этого пришлось отвязать тактовую частоту видеоконтроллера от процессора, что затем позволило сделать следующий шаг — перейти на 4-мегагерцовый 8085.

После всех переделок оригинальная плата представляла ужасное зрелище: половина дорожек была перепилена, корпуса сидели один на другом с отогнутыми выводами CS, коммутируемыми также висящими друг на друге дешифраторами. На тыльной стороне тянулись косы проводов в лаковой изоляции. Сбоку от платы были прикреплены разъемы слотов расширения, куда выводились шины адреса, данных и управления.

В один прекрасный день магнитная лента мне окончательно надоела, и я начал проектировать контроллер НГМД. Купил на толкучке 5-дюймовый односторонний болгарский привод (тот, который нарезал всего 360 КБайт) и пытался разработать контроллер одинарной плотности на ИМС низкой степени интеграции. Он в итоге заработал, но на половинной плотности, к тому же, постоянно давал сбои, был очень капризным и требовал, как и работа с лентой, отключения видеоконтроллера.

В итоге, пришлось все-таки применить микросхему ВГ93, подключив по собственной схеме с коммутацией управления между процессором и контроллером ПДП. Код управления дисководом и обменом данными отлаживался в ОЗУ, вместе с идеей поддержать формат дискет MS-DOS. Зная детально, как он устроен в РС, я поддержал структуру областей диска, включая загрузочный сектор, кластеры, FAT, корневой каталог. Не хватило памяти, только чтобы поддержать подкаталоги. СОМ-файлы запускались как чистые 8080-бинарики, стартовый адрес хранился в записи каталога в каком-то неиспользуемом MS-DOS поле.

Перемещаемые EXE из-за отсутствия сегментации в 8080 и связанной с этим сложности настройки не поддерживались. Операционка и функции работы с диском грузились с ленты на время разработки и отладки.

В 1992 году дисковые функции я прошил в монитор, выкинув работу с лентой навсегда (перед этим, конечно, переписав все программы на диски отладочной версией, работающей в ОЗУ). Монитор научился работать с дисководом по типу int13 в BIOS IBM PC, на которых я уже тогда программировал на С, «Паскале» и выделывал хакерские штуки на «Ассемблере», учась в институте. Операционка позволяла запускать COM и BAT-файлы (в терминах своего командного процессора), читать и писать файлы поблочно, поддерживала до двух дисководов до 720 КБайт каждый в форте MS-DOS (можно было переносить файлы между РК и IBM PC, лежащие в корневом каталоге), и умела грузиться со стандартного загрузочного сектора РС. Система занимала в памяти около 7 КБайт. Для дисковой ОС, помимо самой системы, я написал дисковый редактор (diskedit) и оптимизатор размещения раздробленных файлов на диске.

Вскоре у меня дома появился IBM PC AT с оранжевым монитором Hercules, первое, что я на нем сделал, — написал на «Ассемблере» эмулятор Intel 8080 и моего модернизированного РК. Он умел грузиться с дискеты, вставленной в PC, но содержащей РК-шный Bootloader.