Закрыть окно         Другие истории

Познакомился с Агатами я году в 1988. Мне было 12 лет, я уже знал - что такое компьютерные игры (на примере "Королевства Эфиопия", работавшей на стойке ЧПУ ("Электроника-60") и загружавшейся с перфоленты). Но очень хотелось понять как это устроено и как написать свою игру. Т.к. персоналок на всех не хватало, а о домашнем компе как -то даже не приходило в голову мечтать, я работал на чём придется (что будет свободно). А в выбор был: AT286-12 (это уже ближе к 1990-му году), ДВК-3, ДВК-3м, Агат, Электроника мс1201.? (что-то вроде ДВК, но десктоп с отдельным монитором), класс "Корветов", класс "Мазовий"... Когда отец преподаёт в техническом ВУЗЕ - выбор становится потрясающим :). А если родители знакомых - тоже с.н.с-ы и доценты - но уже других вузов (это называется - город университетов), то к перечисленным выше моделям прибавляются ещё и СМ-4 и Ямаха КУВТ и КУВТ-2. Но одинокий Агат был свободен чаще.

Первую программу из четырех строк я написал после долгого чтения книжки "Как Петя Бейсиков Тоню Соображалкину программировать учил" (Б. Я. Мартузан). Книжка - что-то вроде комиксов, с легкой лирической линией, но стержень повествования - рассказ о программировании на Бейсике, причем не каком нибудь, а стандарта, близкого к РАФОС/СМ-4/РТ11. Т.е. отличий от Спектрума/Агата/Ямахи более чем достаточно. Но отличий мелких, так что процесс пошел. Книжка была правильная.

Не помню, какой это был класс, но, наверное, что-то около 4-5, значит год 1986..7. Первая набранная программа (что-то вроде 10 input a \ 20 input b \ 30 print a + b \ 40 end) оставила совершенно неизгладимое впечатление. До этого я был уверен, что компьютеры нужны для умных математических расчётов, а оказалось, что машине совершенно всё равно, что именно делать ! Такое ощущения власти, наверное, не любой диктатор испытывал :).

Второй программой была игра "крестики-нолики". Алгоритм игры (с условием: машина начинает и ставит свой крест в центр) был взят из книжки "Юный кибернетик" (Ю. М. Отряшенков). Знакомые и родители любили дарить мне книжки такого рода: "Юный радиолюбитель" (Борисов), "Теория решения изобретательских задач" (автора не помню), "И тут пришел изобретатель" (?Альтшуллер ?), "Электроника шаг за шагом" (Р. А. Сворень), "Занимательная физика" (Перельман). А я ими зачитывался. Тут почти не было формул (во всяком случае смысл текста не рассыпался, если не разобраться в математике), всё показывалось ярко, на пальцах. Фильмы канала Дискавери после этих книг кажутся весьма блеклыми.

Понятие декомпозиции мне тогда ещё не было знакомо даже интуитивно, поэтому текст программы почти не содержал процедур и для каждого варианта ответа игрока предусматривалась отдельная ветка кода. Я возился с этой программой несколько месяцев (доступ к машине был возможен несколько вечеров в месяц).

Второе открытие - это работа с дисководом. Не помню, что именно меня на него натолкнуло. Возможно, увлёкшись написанием игры я добыл таки инструкции к машине (дело, напомню, было на кафедре, где работал отец, так что всяких бумаг была куча), а там, постепенно изучив всё, что касается операторов COLOR= и VTAB, постепенно перешёл к более сложным частям. Поскольку опыта в вопросах копирования файлов и операционных систем не было, то и экспериментировать было страшновато. Оставалось чтение описаний. Там писалось про прологи, эпилоги, адресные поля... Но однажды, рискнув запустить программу с названием SEDIT, я обнаружил, что никаких прологов и эпилогов там нет - есть просто 256 байт данных. Оказалось, что можно просто исправить байт-другой, записать и всё продолжит работать ! В порядке эксперимента, на случайно найденном секторе был найден фрагмент штатной программы TEST, как раз то место, где в текстовом режиме выводятся цветные поля "КРАСНЫЙ", "ЗЕЛЕНЫЙ"... И какое-то из этих слов я поправил. Прочитал программу в память (LOAD TEST) и обнаружил фрагмент изменённым. Это было что-то! Значит любая сложная вещь всегда может быть сведена программой к простой, до любого требуемого уровня!

Ощущение того, что ты полностью владеешь ситуацией (т.е. компьютером), и, пусть даже на бейсике, но знаешь как вывести любой значок или точку любого цвета в любое место экрана наталкивает на мысль сделать что нибудь этакое. Очень полезное. За что, может быть, заплатят. Мысль была слегка наивная, но других пока не завезли. Отец подкинул идею - написать обучающую программу. Для студентов. Я - напомню - в седьмом классе. Поэтому собственно вопросы и ответы он предоставит сам, а моя задача - только универсальная оболочка. В это время его кафедра увлекалась такими вещами: АОС писали на всём, что имело клавиатуру и дисплей - ДВК, ЕС1841... В этот процесс активно включали старшекурсников.

К тому времени я уже успел познакомится с ДВК, заодно почитать и немножко попробовать писать на её ассемблере, немножко поковырять ассемблер Агата, но - главное - я знал как выглядит процесс разработки программ на других архитектурах. И тут стал явственно ощущаться недостаток агатовского софта. Не в смысле - один большой недостаток, а в смысле - МАЛО. У меня были дискеты с Бейсик-60 и "Школьницей". Пара дискет с игрушками. Одна дискета, которую я почистил, прочитав в инструкции, что "команда INIT записывает операционную систему". Там вроде бы не было указано, что все данные с диска пропадают. Или я не прочитал об этом. Но в любом случае - ничего больше из софта не было.

"Школьница" не работала. Она зависала на первых же секундах. Я знал, что контакты надо протирать спиртом, а ещё - о существовании компьютерных вирусов. Не один год (а, наверное, два или три) я надеялся найти их следы или следы какой нибудь грязи на контактах. Пока однажды не обнаружил странную вещь: если холодную машину включить и попытаться загрузить "Школьницу", она работает заметно дольше - минуты две. Стало ясно, что вирусы - это не про нас, контакты, вероятно, тоже.

Кроме "Школьницы" никакого текстового редактора не было. А для нарождающейся АОС нужен был хоть какой-то редактор заданий. Почему я считал, что задания должны хранится в текстовом файле со специальным образом расставленным форматированием - не знаю. Возможно, просто другого явного выбора в Бейсике Агата не было. В общем, очередной программой стал текстовый редактор WISA. Это, кстати, наверное, первое название для программы, придуманное мной. Текстовым редактором его можно было назвать очень условно. Мне трудно привести хоть какую-то аналогию с существующим софтом. Во всяком случае он не был полноэкранным. Пожалуй, наиболее близким по сложности использования является юниксовый текстовый редактор ED (или MS-DOSовский EDLIN). Но в юниксе он на своём месте - при использовании разнообразно перенаправляемых потоков, он хотя бы неплохо вписывается в shell-скрипты. Моя же WIZA была только интерактивной.

Здесь же была сделана ещё одна программа. Не очень сложная, но показательная. Графический редактор. Несложный, я в нём даже что-то потом рисовал. Он использовал режим 128x128 точек, рисовал одним пером размером в один пиксель, можно было выбирать цвет. индикация режима работы (поднято перо или опущено и ещё какие-то детали режима) отображались в виде цветных точек голубого или красного цвета в углу экрана. До чего я не додумался: что поднятое перо не должно оставлять никакого следа на экране. У меня оно оставляло чёрный цвет. Я просто не знал, как считывать значение текущей точки. Самым сложным участком этого редактора была процедура рисования окружности. Кто мне рассказал о функции Sin/Cos - не помню. В школе мы их проходили позже. Мало того, кто-то другой ещё намекнул, как можно сделать эту окружность действительно круглой - графические точки в 128x128 вытянуты - 4:3.

Первую версию АОС я почти потерял, так и не закончив. Она называлась "Система Контроля Знаний" (SKZ). Осталась только заставка. Потерялась она очень просто: набор и редактирование кода происходило в бейсике, бекапов или не было или я их переписал не заметив ошибки, а в это время бейсик уже успел испортить значительную часть кода (проявлялась у него иногда такая ошибка). Но эта потеря была полезной. Потому что потом я написал и смог закончить вторую версию системы - гораздо более логичную и удобную.

А тем временем софта на Агате всё равно было МАЛО. Из системных программ, купленных вместе с машиной, был FID (FIle Developer, хотя есть мнение, что это название дали маркетологи Apple, но авторы называли его по другому: FISHEAD (which stood for FIle Shower, HElper, And Duplicator)), перетянутый с эпла. Я ещё не видел Norton Commander, как и PC, но ощущение, что набирать команды в комстроке или на каждый чих напоминать FID'у номер слота (это слово тогда ещё как-то не устоялось и переводили его в разных агатовских программах кто как мог: "Слот", "Слота" (именно так, в женском роде). Хотя по русски это просто "разъём".) и привода - это слишком скучно. Да и клавиатурой я тогда ещё не владел как сейчас - любая лишняя буква давалась тяжело.

Тогда была задумана программа FID1. Primo: она работала только с одним дисководом. А другого у меня и не было. Secundo: все доступные команды были выписаны в верхней части экрана, рядом с ними стояли две буквы - имя колонки и номер столбца. Чтобы ввести команду, нужно было просто нажать одну цифру и одну букву. Если команда требовала также и аргумента (имени файла), то дальше можно было набрать и его. Была также возможность записывать макросы (слова такого я ещё не знал, но идею взял из командных файлов RT11). В отличие от настоящих командных файлов, FID1 сам записывал и сам читал свои последовательности.

Всё было полноэкранно и разукрашено, но, как показала практика: 1) ради пары команд вызывать отдельную программу тоже долго. 2) FID мог копировать файлы, а именно это и было нужно чаще всего. FID1 использовал только команды ДОС и копировать файлы не мог. Смысл оказался нулевым. Вывод: продумывая программу нужно иметь ввиду не только реализацию, но и последующее использование. Рассказывая об этой программе старшему брату (он старше меня почти на десять лет) впервые услышал название Norton Commander. Единственное что было найдено правильным в FID1 - к этой программе был написан какой-никакой встроенный HELP, пусть и совсем мелкий. В дальнейшем, этому вопросу я старался уделять довольно много внимания.

В дальнейшем, уж не помню когда, была сделана ещё одна попытка написать оболочку к агатовской ДОС (я уже где-то услышал это слово). Оболочка была тоже командно-строчной, но уже имела возможность подстановки символов в строку, историю команд, к которой можно было обратится стрелками вверх/вниз (привет РТ11 !) и вроде бы даже какой-то копировщик, по крайней мере B-файлов (построенный на не очень надёжной для этого комбинации команд BLOAD/BSAVE). К сожалению, эта работа почти выпала у меня из памяти. Хорошо помню только, что комплекс имел какое-то странное имя, вроде CSS (в дальнейшем изменённое на NNS, потом на ELZA) и мог оперировать со всеми дисковыми уровнями: там были и файловые операции - через ДОС и редактор секторов и редактор текстов и вроде бы даже редактор памяти. Плюс два варианта вывода каталога (своими средствами, без обычной команды CATALOG). Но это всё равно было на бейсике, поэтому медленно и не особенно удобно (Пользовательский интерфейс практически не продуман. Я просто переносил увиденные где-то приёмы работы, не учитывая... почти ничего).

Следующая, и, наверное, последняя программа, смысл которой был тоже близок к нулю - TR - текстовый редактор. Понимая, что WIZA - это слишком неудобно по любым меркам, но ещё не имея уверенности в знании ассемблера, я задумал следующее: текстовый редактор, в котором текст хранился бы в видеопамяти, в разных страницах, а сдвижка/вставка (именно это почти нереально реализовать на бейсике Агата из-за низкой скорости) выполнялись через команды системного монитора: это такое своеобразное расширение бейсика. Одна из команд - MOVE - записывается так: "*A<B.CM" - A - адрес назначения, B - адрес источника, C - конец источника. Так как видеопамять непосредственно отображается на монитор, это сразу снимало ряд проблем: отладка получалась почти визуальной, сдвижка/вставка текста нужна только при вставке/удалении строк, символов в строке - 64 и больше не надо, все адресные числа - круглые (если смотреть в двоичной системе), листание - просто переключение видеопамяти. Я решил что шести страниц хватит (32 * 6 - 192 строки). Интересной фишкой редактора была возможность задать порядок и количество повторов записи страниц в файл.

Смысл программы был близок к нулю потому, что она устарела ещё до своей окончательной отладки: я перешёл в седьмой класс в другую школу. Там был класс седьмых Агатов. Там "Школьница" не зависала. Там был "Агат-Автор". Но до счастливого будущего было ещё далеко.

(Вообще-то, компьютерный класс был и в предыдущей школе. Но там стояли не Агаты. А что там стояло - мне так и не стало известно. Когда я однажды подошел к двери класса и заглянул во внутрь, чтобы рассмотреть какие нибудь надписи на машинах, на меня очень подозрительно взглянула наша завуч - Альбина Иннокентиевна - и сказала что-то вроде "идите отсюда, нечего тут делать". Ну и как хотите :) )

Итак, в новой школе были Агаты, была "Школьница", "СЧМ", "Агат-Автор". И всё это работало. Сразу же проведённые эксперименты установили - моя копия "Школьницы" совершенно нормальная, косяк с машиной. И ещё один факт: "Агат-Автор" на моей машине работает. Значит нужно что: конвертор Агат-авторских текстов в "T" формат. На бейсике, посимвольно - а по другому я ещё не умел, медленно, но верно, программа PF (Преобразователь Файлов) стала гонять файлы агавта в текст. К тому времени я уже сообразил, как перегонять текстовые файлы в бейсик (командой EXEC) и уже не рисковал потерять из-за ошибки бейсика исходник. И ещё одно важное изменение: до этого я работал с монитором-телевизором "Юность 404". В школе же у нас стояли 32втц201. Поэтому следующие программы я писал, частенько, для текстового режима 32x64. В отцовском вузе мне тоже удалось добыть монитор мс6105, спаять для него гиганский блок питания с линейным выпрямителем (весом около 5 кг - из чего нашлось) и "Юность" больше к Агату не подключали.

Обнаружилась новая проблема: в школьном классе в качестве принтера стоял Epson LX-800. Очень хороший принтер, но с кодовой таблицей cp866 (т.е. выпущенный для работы с MS-DOS). До этого я уже пытался подключать советские принтеры к Агату, безуспешно. Убивала документация - описание портов типа ИРПР; при том, что неизвестно, исправен ли принтер вообще (мне отдали на кафедре для экспериментов какую -то железку, размером с небольшой столик, на собственных ножках).

Но LX-800 работал, проблема была только в русских буквах. Первая программа, которая пыталась решить эту проблему - NOREX. Не знаю, откуда я взял это слово, но звучало красиво. Программа была на бейсике, но печать могла разные форматы: Бейсик-программы (я додумался до хитрого финта ушами: создавал из своей программы командный файл, затем запускал его на исполнение по EXEC и завершал работу. Дальше по этому командному файлу ДОС грузила нужную прогу, затем поток вывода перенаправлялся на принтер, выполнялась команда LIST, поток возвращался на экран, LOAD NOREX, RUN на какую-то строку в середине программы), текстовые файлы и файлы Агат-Автора. С ограничением: команды управления Агат-автором игнорировались, но, можно было в таком же виде вписать любые трехзначные числа, которые воспринимались как явный код, передававшийся на принтер: т.е., например, ".027L" - включала двойную ширину (если не ошибаюсь). NOREX был первой программой, которой пользовались не только много, но - главное - которую использовал не только я сам.

По мере творческого роста и выполнения различных заданий по компам удалось достичь уровня "сиди сколько хочешь", а затем (будучи в 11-м классе) даже устроиться инженером и получить первую зарплату. Работа была простая - набирать и печатать тексты, бланки и прочее для директрисы и бухгалтерии. Хитрость была в том, что кроме редактора "Агат-автор" ничего для подготовки документов не было. Вы не работали с "Агат-Автором" ? Ну вот представьте себе виндовый блокнот, у которого нельзя менять шрифты. Или их всего три, причем отличия только в ширине знаков. Зато он умеет цеплять к тексту колонтитул и выполнять общее выравнивание. Псевдографики нет, таблиц нет, рисунков нет. Хотя в некоторых документах нужно было довольно точно обеспечить определённый межстрочный интервал, отступы... В общем, я хорошо знал в те годы язык управления принтерами Epson :). Чуть позднее мне удалось заставить Агат-Автор работать с этим принтером напрямую, расковыряв его драйвер принтера, но до этого пройдёт ещё пара лет.

Случилось ещё одно событие: у нас дома появилась PC. 80286, 20 МГц, 1 Мб ОЗУ, 40 Мб НЖМД. Она появлялась не всегда, иногда отец утаскивал её на работу, иногда сам занимал дома (ведя в supercalc записи о студенческих успехах). Но когда она была свободна - взывала к мысли о том, что техника не должна простаивать: так рождалась идея о линке Агат-PC. Первая цель: PC в качестве диск-сервера. Стандартный драйвер дисковода Агата подменялся специальной программой, которая эмулировала дисковод, используя образ файла на PC. Идея не была доведена до ума в частности потому, что разные операционки Агата использовали различные драйвера, отличавшиеся API и далеко не всегда имевшие унифицированный интерфейс для подмены.

Следующая версия линка возникла уже из желания как-то отсортировать и более централизованно (т.е. на меньшем числе дискет (у подопытной host-PC был винт 40 Мб - не разгуляешся)), хранить агатовский софт. Этот линк уже был доведён до работоспособного состояния. Написан он был под отладочный комплекс, со стороны Агата использовал последовательный интерфейс на скорости 4800 бод/с. Теперь передача шла не посекторно, а пофайлово.

Основные проблемы были утрясены, можно было Творить ! Новая школа была экспериментальной и одним из экспериментов была Курсовая работа. Можно было выбрать предмет и в конце года представить какую нибудь самостоятельно сделанную внеклассную работу. А у меня была заброшенная SKZ :) Пользовательский интерфейс первой версии был командно-строчным и имел несколько режимов (работа с файлами, работа с журналами оценок, работа с заданиями...). Но мода на командные строки уже стала проходить. Мы увидели первые настоящие PC с программами, построенными на бегающих менюшках, ... становилось понятным, что одним из требований к программе должно быть удобство использования, которое для каждой задачи имеет смысл обдумывать отдельно.

Вторая версия SKZ включала в себя следующее: 1) Несколько доработанный редактор графики, ещё простой, но уже вполне завершенный. Хотя без мышки всё равно пользоваться им было неудобно. 2) Экранные меню. 3) Разделение системы на несколько отдельных программ (LEX - редактор заданий и графики, SKZ - среда учащегося, String - уже полноэкранный и вполне внятный редактор текстов, OBRPAR - управление базой преподавательских паролей). Система была пострена на бейсике, но очень активно использовала ассемблерный код. Взяв сборник задач по физике (кажется, это был Рымкевич) я написал несколько контрольных работ - каждая по паре десятков вопросов и парой иллюстраций.

Моя курсовая была заявлена по предмету физика (а не информатика !), зачёт я получил почти автоматом после чтения доклада (это был уже класс 8-й, хотя из-за введение "как бы одинадцатилетки" я тут вообще сбился со счёта), собственно программное творение никто даже не просил показать.

Но через некоторое время (может быть через год) оно было выставлено на конкурс студентов младших курсов (школьникам не запрещалось участвовать) и я получил первое место и 300 рублей премии. Инфляция уже началась, но на пару коробок дискет и что-то ещё мне хватило. Возможно, на SKZ были сделаны даже некоторые контрольные по вузовскому курсу (не помню уже), но реально они так и не были использованы - наступала эра PC и теперь уже за 286-ми сидели не только заслуженные преподаватели, но и студенты. PC становилось просто больше, чем других машин, а Агатов на кафедре было всего два.

В общем-то, после SKZ я уже окончательно подсел на ассемблер и программирование понеслось.

Первая крупная ассемблерная программа - редактор шрифтов и палитр для графического редактора ALV Graf (через несколько лет после создания этого редактора случайно оказалось, что ALV Graf сам имел встроенный редактор шрифтов и палитр). Мой редактор уже нёс с собой собственный код управления файловой системой, ещё очень примитивный. Такой уровень продолжался бы ещё долго, если бы мне не попались исходники IOSub и DOS Школьницы, которые шли с её электронным описанием и тоже были найдены среди школьных дискет. Их изучение резко подняло мой коэффициент наполеонства :)...

...И постепенно стала выкристализовываться идея о большом проекте: полноценный комплекс системного программного обеспечения на одной дискете. Он должен был состоять из нескольких модулей: языки программирования, редакторы и т.д.. Один из модулей я планировал написать сам (остальные - адаптированные наборы из штатного софта), он должен был включать в себя 6 подмодулей. Более того, в перспективе я планировал прошить это всё в ПЗУ и сделать что-то вроде виртуального, но постоянного диска. Даже закупил микросхемы памяти, две рф8 - 32 кб для начала.

Первый подмодуль: менеджер файлов. Он получил имя Deka и имел одну важную особенность: был резидентом Бейсика-60. Иметь файловый менеджер, не требующий перезагрузки и какой либо перестановки дискет - очень удобно: разбирая бейсиковские файлы - сразу переключаться в менеджер и назад. Архитектура памяти семёрки была такова, что часть ОЗУ было доступно только при отключении блоков с бейсиком и ДОС. Сами они эту область не использовали, бейсиковские программы тревожить управление памятью тоже не рисковали. Моя идея была простой: во вторую половину ЭмПЗУ ложился код менеджера, вторая половина ДопОЗУ отводилась под буфер оконной системы (меня так очаровали всплывающие окна, которые, закрываясь, не портили изображение на экране, что даже не приходило в голову, что можно не сохранять картинку под ними, а перерисовывать весь экран заного). Ну а базовая память с адреса $800 (там живут бейсик-программы) отводилась под файловый буфер. Обращение к резиденту происходило очень просто: достаточно было в любой бейсик-программе или командной строке последовательно нажать клавиши D E K A и менеджер всплывал. Заодно процедура-перехватичик, на манер Агат-автора, могла печатать изображение экрана на принтер. Вызывалось это по ключевой комбинации Ctrl-O. Перехватичик сидел где-то внутри ДОС и занимал очень небольшой участок памяти.

Я не рисковал писать свой драйвер дисковода и обращался к досовскому, но все файловые операции уже были вполне корректно реализованы внутри менеджера. И это был единственный выход - то, что он делал, ДОС уже сделать была не способна. А делал он, например, следующие: мог прочитать файл любого типа в буфер, записать его на диск (причем если во время записи обнаруживалась ошибка диска, сбойный сектор сразу блокировался, а запись продолжалась в другое место), показать содержимое в буфера в текстовом и HEX-виде, редактировать TSList-данные (где у К-файлов хранятся размер и точка загрузки), задавать любой тип и имя файла перед записью (можно было записывать буфер многократно), удалять файлы и т.д.. Менеджер был однопанельным, но панель имела фильтры - можно было задать маску файлов, которая описывала тип, наличие/отсутствие признака защиты и имя - в этом случае на панель выводились только соответствующие файлы.

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

Второй подмодуль носил имя Selena. Это был редактор дисков. До Селены я использовал чужой редактор, подписанный как "Polydisk". Он был явно сделан под ИКП-бейсик и 840кб дисководы, но имелись исходники (похожее, к настоящему моменту утеряны), которые я, за пару недель, подкорректировал для Бейсик-60 и 140 кб. Однако, в дальнейшем, всё таки написал собственный редактор. В это время я уже начал ковырятся в аппаратуре Агата и поставил собственный знакогенератор (маленькие буквы, псевдографика).

В дальнейшем этот редактор мигрировал на PC (Turbo Pascal) и используется мной до сих пор. От diskedit by symantec его отличает отсутствие излишних попыток думать, что очень удобно в случае разрушения или нестандартности дисковых структур. Он умеет напрямую работать с ATA-накопителями, до 128 Гб, понимает ряд структур FAT и используется, обычно, для хитрых корректировок таблицы разделов, когда излишняя пугливость fdisk/gparted/partition magic не позволяет сделать какой нибудь финт ушами.

Другие подмодули я написать не успел. Но, между делом, создавались и другие - более мелкие - программы. Например, очень долго тянущийся проект Sirius. Когда было необходимо придумать дизайн внешнего вида очередной программы я брал листок в клетку и, ограничив пространство 32x32, вписывал туда буквы. Это занятие быстро надоело и возникла идея написать программу, которая бы позволяла прямо на экране машины рисовать произвольный рисунок в текстовом режиме. Это было очень похоже на графический редактор, но в текстовом режиме. Идей было очень много. Просто страшно много. Настолько много, что написав, примерно, треть я его забросил - мне просто не хватало памяти для кода программы. Кроме того, это всё было в самом начале "карьеры", почти всё писалось на бейсике и уверенно тормозило. Хорошо освоив ассемблер, да и уловив некоторые тонкости использования Бейсик-60, через лет 5 (т.е. уже году в 1994), я вновь вернулся к брошенной программе. Заного переписав приличный кусок и впервые применив таблицу импорта в двоичной библиотеке (Т.е. догружаемый к бейсик-программе бинарник, в начале своей области, содержал массив адресов-точек входа. Это позволяло независимо модифицировать бейсиковскую и ассемблерную части) - завершил этот проект. Правда, теперь уже задачи этого редактора стали чуть другие - с его помощью делались заставки для видеокассет.

Другая прога - тоже из серии поздних, но не гиганских - SuperFormat. К Агату шёл какой-то форматтер, он был почти без подписей и с предельно простой логикой работы: пытался форматировать диск, а в случае любой ошибки диска просто отказывался работать. К тому же, он занимал очень приличный объём (вроде 27 блоков), из которых - как показало следствие - больше половины было занято нулями - это пустая дорожка каталогов. Такая расточительность - не наш метод. Аккуратно выдрав из этого форматтера драйвер дисковода (который содержал, собственно, процедуры форматирования, причем довольно шустрые и, как мне кажется, вообще был создан отдельно от остальной части программы - слишком уж странно там всё располагалось в памяти), я дописал к нему свою оболочку и нарёк результат именем SF.

Он мог не только форматировать диски (причём была возможность задать имя тома), но и проверять их чтением или записью (бывало, что даже многократное чтение не выявляло ошибок, но любая попытка записи тут же приводила к I/O Error). Была также возможность проверить уже частично записанные дискеты, без потери информации и отметить сбойные блоки во VTOC (мне кажется, это гораздо лучше чем постоянное переформатирование, как рекомендует windows в случае ошибок - при переформатировании физически проблемные участки никуда не денутся, в лучшем случае замаскируются на некоторое время). Кроме того, к нему был написан небольшой патч, который отключал рекалибровку головок в случае ошибок при тестировании. Это заметно улучшило результаты тестов, увеличивало скорость работы и, в дальнейшем, легло в основу моего анализатора дискет для PC.

Иногда мы заглядывали в другие школы города. Кое где тоже попадались классы Агатов. Семёрок, но с дисководами 840 кб. Там я впервые увидел ИКП и меня зацепила идея о том, что в копировщике файлов можно сначала считывать все файлы в память, а потом их все записывать. О том, что существует ИКП для семёрок, причём для 140 кб дисковода, я тогда не знал. Так появилась NELLI.

Однако, как мне сейчас кажется, Nelli получилась гораздо лучше ИКПшного копировщика (если забыть о том, что она работала только со 140 кб дисководами). Во первых: она просто была удобнее/привычнее по используемым клавишам. Пробел - отметка, Ввод - исполнение, Ред - отмена. Во вторых: она могла записывать буфер памяти (т.е. считанные файлы) несколько раз. Причем можно было указать - какие именно файлы нужно сохранить. Плюс к тому имела встроенный просмотрщик текстовых файлов.

Nelli имелась в двух версиях: первая использовала драйвер дисковода, остававшийся от ДОС. Поскольку он лежит в одной из частей ДопОЗУ, для использования второй части приходилось использовать двойную буферизацию - сначала очередной сектор читался в базовую память, потом переписывался в ДопОЗУ. Это сильно замедляло работу (но только во время операций с ДопОЗУ). Вторая версия таскала собственный драйвер (выковыренный из "Школьницы" - готовых исходников у меня не было) - там всё бегало шустро, практически - летало.

Ну и, конечно, постепенно мысли стали разворачивать лыжи в район собственной операционной системы. К этому моменту я уже видел описание Best Tools Kit, хотя её самой у меня не было. И однажды, краем глаза, наблюдал запуск и работу Спрайт-ОС. Но, отличие от других разработчиков, я категорически не хотел терять совместимость с существующей ДОС 3.3 в каком либо аспекте. Основное, чего я хотел добиться: расширенный набор операций (по крайней мере добавить копирование), скорость загрузки как у ALV Super Dos, уменьшить занимаемый в памяти объём (причесать всё, по крайней мере), подчистить ошибки и вообще - иметь полноценно ДОКУМЕНТИРОВАННУЮ систему. В очень далёких планах (и некоторые шаги к этому тоже были предприняты) ещё была идея переделать диалоговый отладочный комплекс "Школьницы" в приложение приложение ДОС3.3 (не только чтобы он загружался как программа ДОС, но и не разрушал в памяти Бейсик).

Frida не была закончена. Но было сделано главное: она загружалась сама, загружала Бейсик-60, корректно расставляла все свои и его вектора взаимодействий и даже могла, используя меню (!), запускать A и B -программы. Не было лишь блоков, связанных с модификацией файловой системы: запись, переименование, удаление файлов. И не было синтаксического анализатора и перехватчика chr¤(13)+chr¤(4). То же: не успел.

Последняя программа: Meri - редактор анекдотов. Чтобы было веселее, я сделал такую штуку: небольшая программка, которая читает с диска счётчик и по его значению выбирает один сектор на диске. Читает сектор, выводит из него текст на экран, затем выполняет команду BRUN HELLO. Программка ставилась вместо основной HELLO (тела Бейсик-60) и, таким образом, срабатывала после загрузки ДОС, но перед загрузкой Бейсика. Во все свободные сектора диска были забиты анекдоты. Т.е. пока машина читает бейсик ты мог читать очередную хохму. Секторов почти пять сотен, так что повторы были редки. Но анекдоты нужно было набирать в дисковом редакторе.

Это было не особенно удобно и однажды я написал редактор анекдотов. В общем-то, ничего особенного в нём не было, если не считать одной мелочи: у него были архитектурно разделены процедуры вывода меню (причем, иерархического) и собственно содержимое этих меню - т.е. тексты и ссылки на процедуры-обработчики. До этого я всё складывал в одну кучу, но в Meri появились ассемблерные зачатки не то модульного, не то объектного программирования. Самое удивительное, что модуль вывода меню (написанный сначала на бумаге, а потом за раз набранный) содержал всего одну ошибку ! Да и вообще, отладка этой программы потребовала очень немного времени.

На этом история моих "агатовских разработок на Агате" заканчивается. Остались только мелкие работы по увеличению скорости канала связи Агат-PC. Последующие программы набирались уже на PC, в редакторе Turbo Pascal 7.0, а потом отправлялась для компиляции на Агат. Почему я не забросил Агат тогда ? Наверное, из-за моей большой любви к надёжности: как ремонтировать Агат я знал. А что бы я делал, если бы что-то случилось с PC - представлял слабо. Эти машины ещё были дороги, да и б/ушного барахла к ним было ещё не найти. Поэтому PC хорошо подходила для игр, но полагаться на неё в чём -то более серьёзном было рискованно. Между тем, идеи о прикладном использовании компьютера дома уже стали появляться. На Агате, например, я пытался сделать словарик английского языка для перевода школьных заданий, позднее сделал синтезатор азбуки Морзе (на военной кафедре у нас был такой предмет - приём на слух на скорость).

И всё же PC становилась более доступной. Отец уже пользовался своим ноутом (финансово ещё кафедральным, но, фактически, уже иногда почти персональным (т.е. по очереди между сотрудниками)), уже вышла и была пройдена игра Wolfenstein, и уже кое где можно было поиграть по сети в Doom3D (значит, это уже где-то 1995-й). Идея сетевой игры захватила воображение. Обдумывание привело к пониманию: графика, сюжет и прочее значения не имеют. Важно, что это игра вдвоём, причем на отдельных экранах. Так возник wolf2d - двумерная динамическая сетевая игра между Агатом и PC. Двумерный лабиринт, два игрока, но важно то, что видеть можно было только часть лабиринта на несколько клеток вперед, в направлении своего взгляда и чуть по сторонам. Управление - простейшее - четрые стрелки и пробел-выстрел. Оружие безлимитное, здоровья нет: или пан или пропал. Это было весьма увлекательно !

Очевидно, что хранение файлов на PC привело к мысли о том, что было бы интересно написать эмулятор Агата. Дело было не в ностальгии - Агат продолжал активно использоваться - но было интересно: как будут выглядеть программы на хорошем цветном мониторе и испытать ощущения от знакомых программ, вдруг начавших работать заметно быстрее (если, конечно, это случится :) ). Это был уже год 1994, винт на PC достиг уровня 102 Мб (и, что важнее - он был гораздо быстрее предыдущего), а линк получил возможность передавать сразу образы диска - чтобы не возится с отдельными файлами. Тогда же было положено начало утилиты для работы с образами агатовских дисков dos33.exe.

PC в это время уже стал почти домашним и свободно доступным, 286-я буквально на полгода сменилась б/ушной 386-й, а затем на 80586-100 (опять на пару месяцев) и затем на 80586-166MMX - уже надолго. Винт вырос до 1.7 Гб и разработка эмулятора была начата. Нет, правильнее сказать - в очередной раз продолжена :). Конечно, речь идёт об эмуляторе семёрки - девятку я видел только издалека, документации на неё не было.

Эмулятор в то время виделся мне - в первую очередь - как этакая идеальная модель Агата - без глюков дисковода, не реагирующая на помехи в сети, с удобным "аппаратным" (в виде dos33.exe) управлением файлами. Поэтому в ранних версиях, помимо стандартных компонент семёрки, имелась эмуляция некоторых нестандартных возможностей: например, изнутри виртуальной машины программы могли управлять скоростью эмуляции. Управление скоростью и контрольной точкой в досовской версии по сию пору называется "регистры dr" - именно потому, что когда-то они были программно доступны.

Мысль об "идеальном Агате" не оставляет меня и по сей день: юниховая версия эмулятора, выпущенная в 2010 году, имеет ещё более оптимизированный код ядра, как и пятнадцать лет назад написанный на ассемблере. Что дальше ? Компилирующий эмулятор, потом однокристальный Агат на программирумой матрице, что-то вроде наладонника :) Это фантазии такие...

Агатовский софт продолжал, в основном, храниться ещё пока на агатовских дискетах, но в ~2000 году последним рывком линк был расширен (несложной переделкой модуля агатовского интерфейса) до скорости 115200 бод/с и все образы оставшихся дисков улетели на PC. Тогда уже у меня был собственный Celeron-300, с винтом почти 10 Гб, кроме того я работал в Соросовском Центре Интернет, так что начал объединять свою коллекцию дисков с другими, опубликованными в сети. В этот момент в dos33.exe была добавлена поддержка 840к образов, а в эмулятор стала интенсивными темпами добавлятся поддержка Агата-9 (документацию я получил тоже благодаря знакомству через интернет). До этого в деталях мне была известна только семёрка.

Активно работать с Агатом я закончил примерно в 1999-м году. До этого он использовался регулярно по ряду причинам: 1) Я работал техником в школе с классом Агатов - вернулся подрабатывать в свою же школу после второго курса университета. Это уже был ремонт оборудования, а не печать текстов. Мне нужна была заведомо исправная машина, с хорошим дисководом. 2) Агат формировал картинку в TV-стандарте, что позволяло рисовать заставки для видеокассет. Это сейчас почти у любой видеокарты есть неплохой PAL-кодер и композитный выход, а в те времена такие штуки стоили ДЕНЕГ и на помойках не встречались. 3) Параллельный интерфейс Агата позволял выделывать всякие штуки: он мог становиться программатором микросхем памяти, цифровым осцилографом и много чем ещё. 24 бита в любое направление - это гораздо сильнее PC-шного LPT. 4) Агат мог работать с любым телевизором, а PC требовала специального монитора. И хотя PC уровня i386 в то время можно было уже собирать почти бесплатно из б/у-шных компонент, отсутствие халявных мониторов не позволяло наслаждаться этим в полной мере. А одной машины в доме уже стало мало.

В 2004 году я опубликовал свою коллекцию софта в сети и, примерно, раз в год получал письма: вопросы, благодарности. Но ничего особенного не происходило. Хотя кое что важное, тем не менее, я заметил: 1) Не очень много людей работали на Агате со 140к дисководами. В основном были популярны 840к. 2) Многие больше знакомы с девятками, чем с семёрками. 3) Многих уже потянуло на ностальгию. Возможно, это те, кто расстался с Агатом ещё в начале девяностых. 4) Многие не были знакомы с Агатом глубоко и помнили его просто по играм. Так, очень быстро, возник раздел "готовые к запуску игры" (создавая сайт, я расчитывал, что он заинтересует, скорее, бывших программистов Агата).

В 2007 году сразу двое выразили желание материально помочь доведению эмулятора девятки до кондиции. Материализм выражался в попытке прислать мне исправный Агат-9 для экспериментов. Одна из попыток как-то странно оборвалась, а вторая - успешно завершилась. Это был Игорь (Garnizon). Ну а остальная история - это, собственно, весь развившийся сайт :)

FIN

Все эти годы я, конечно, занимался не только Агатом. Второе по потраченному времени и первое - если исторически - это бытовая электроника. В, основном, аудио. Ещё с первых классов школы я мечтал о собственном магнитофоне, а, позднее, о небольшом плеере. Почти вся техника, которую мне дарили родители, была б/у. Комета-201, Комета-212 - я много занимался ими ещё в школе, потом был магнитофон собственной разработки на основе Веги-122, а сейчас я хожу со своим плейером. В четвертом классе мне подарили фотоаппарат - Агат-18 и я фотографировал всё, с чем имел дело - от детских конструкторов и однокласников до того же Агата (я имею ввиду ЭВМ). Почти все плёнки фотоаппарата и все магнитофонные плёнки сохранились так же, как и софт. И почти все были оцифрованы.

Ещё были книги. Я часами читал Конан-Дойля, Кристи, Сименона. Потом добавились ещё Ремарк, Кафка, Хмелевская, Булгаков. Не любил только авторов школьного курса литературы. Там говорится, к примеру, что Пушкин - это да, но не объясняется - почему ? Я могу сказать, почему мне нравится тот или иной автор. Цветаева - например - за точность и ёмкость формулировок. Мне, как программисту - это очень близко. А вот Пушкин - сколько его не читал - скучно. Ни одной знакомой ситуации, народ вялый. О чести они думают красиво, но вместо того, чтобы найти нестандартное решение - трагически всё бросают. Во всяком случае так он мне запомнился. "Преступление и наказание" просто не смог дочитать - ни одного хоть чуть-чуть привлекательного героя. "Войну и мир" тоже бросил и, наверное, по той же причине. "Анну Каренину" - просто зная фрагменты сюжета - даже не хочу начинать.

Сейчас у меня почти на всех машинах есть какие нибудь художественные произведения, правильнее даже сказать - есть несколько машинок, предназначенных только для хранения текстов и чтения: Palm-III, PowerBook 1400. Единственное, чего не люблю - фантастика. Кажется, только Азимов не вызывает отторжения. В текстах остальных фантастов всегда резало глаз какое нибудь несоответствие реальности. Т.е. придумывать можно что угодно, но если описываешь какую нибудь технику будущего в деталях - освой хотя бы нынешнюю. Чтобы не оказалось, что описываемое не только давно реализовано, но от него уже отказались и забыли, потому что оно было не особенно удобным...

Вся это смесь - программирование / электроника / литература / фотография - всё время взаимодействуют. Знание электроники машин позволяет лучше понимать программирование, чтение литературы улучшает строковые константы в программах, программирование - т.е. формулировка машине своих желаний - позволяет лучше выражать и собственные мысли и чувства. Это даже на свидании пригодится :) Ну а фотография - это память, возможность увидеть линию прошлых дел и, если повезёт - угадать перспективу будущих.

Владимир

Закрыть окно         Другие истории