NedoOS: истоки
Alone Coder
История NedoOS уходит корнями в далёкие
90-е годы.В этой статье я постараюсь вспо─
мнить,как всё это происходило.За это время
сменилось много концепций, рисовались кар─
тинки и схемы, писались и выкидывались ку─
ски кода и отдельные утилиты, но всё было
впустую,пока наконец не была найдена золо─
тая жила :)
На Спектруме я с 1991 года. Когда он у
меня появился, я уже примерно знал Бейсик
(с Радио-86РК ). Писал на нём игры - "Уга─
дай число", "Очко", "Питон", "Скачки на
ипподроме", "Точка над i", "Перепрыгивание
через камень". Были и микродемы на Бейси─
ке. Иногда набирал "пианино" типа 10 BEEP
.1, CODE INKEY$-60: GO TO 10 или циклы вы─
вода дампа памяти.Но из всех моих программ
магнитофонной эпохи сохранился только гра─
фический редактор "Рисующая точка" из 23
строк (1992). Сохранился потому,что единс─
твенный был записан на бумаге. А писался
он, скорее всего,под влиянием книги Дьяко─
нова. Думаю,многие писали такие же "редак─
торы".Так я начал путь программиста-систе─
мщика...
10 LET a=100: LET s=100
20 INK 7: PLOT a,s: INK 0: PLOT a,s
30 IF INKEY$="5" THEN GO TO 90
40 IF INKEY$="8" THEN GO TO 100
50 IF INKEY$="7" THEN GO TO 110
60 IF INKEY$="6" THEN GO TO 120
70 IF INKEY$="0" THEN GO TO 130
80 GOTO 20
90 LET a=a-1: GO TO 20
100 LET a=a+1: GO TO 20
110 LET s=s+1: GO TO 20
120 LET s=s-1: GO TO 20
130 INK 0: PLOT a,s: INK 7: PLOT a,s
140 IF INKEY$="5" THEN GO TO 200
150 IF INKEY$="8" THEN GO TO 210
160 IF INKEY$="7" THEN GO TO 220
170 IF INKEY$="6" THEN GO TO 230
180 IF INKEY$="0" THEN GO TO 20
190 GO TO 130
200 LET a=a-1: GO TO 130
210 LET a=a+1: GO TO 130
220 LET s=s+1: GO TO 130
230 LET s=s-1: GO TO 130
Изучал ассемблер я с 1993 года, когда у
меня появился дисковод. Первые попытки бы─
ли неудачные - первый скролл влево я не
смог зациклить на весь экран, игра "Падаю─
щие камни" через RST 16 не заработала.
Правда, ассемблировал я вручную, по табли─
це кодов команд.Из-за этих неудач я долгое
время держался Бейсика,потому что его лег─
ко отлаживать. Остановил, исправил,продол─
жил.Так появился редактор анимации "Anima─
tor" (1993) - потомок "Рисующей точки",
даже попавший на какой-то городской кон─
курс, где его успешно не смогли запустить.
Можете посмотреть на этот шедевр в ACNews
#53 :) Начинал писать и новый графический
редактор на Бейсике (уже с меню в нижних
двух строках экрана - я научился там печа─
тать!), причём начинал с бесполезных функ─
ций "треугольник" и "залитый круг". В этом
проекте я столкнулся уже с недостатком Бе─
йсика - его неудобным редактором.Возился я
с ним долго, но от него не сохранилось ни─
каких следов. Разве что где-то попадалась
процедура заливки на Бейсике и само рисо─
вание залитого круга - оно ушло в космиче─
ский симулятор "Space" на Бейсике (1995),
который можно найти в Info Guide #10.
Параллельно я писал дисковый доктор,
загрузчик для Beta Basic с эффектом, пару
тестов из какой-то книги (один сохранился)
и прочую мелочь. Но главным проектом я ре─
шил делать новый графический редактор -
уже в кодах, в GENS. А процедуры для него
писались так,как будто это был новый сбор─
ник Supercode, и сразу оптимизировались по
размеру (некоторые из них совершенно бес─
полезны для графредактора).Насколько можно
восстановить по бумажкам и каталогам пер─
вых дискет, первые процедуры были такие:
- сдвиг вправо (сначала какой-то безум─
ный, через IX, потом 17 байт)
- эффект на атрибутах "взрывчик"
- появлялка экрана без атрибутов (49 б)
- scroll left (17, потом 16)
- scroll left циклический (24,потом 23)
- scroll right циклический (24)
- scroll up (82, потом 77, потом 54)
- scroll down (82, потом 77, потом 54)
- scroll up циклический (79, потом 75)
- scroll down циклический (79,потом 75)
- мигание случайными атрибутами
- FASTLEFT(105),FASTRIGHT(105) (не пом─
ню, что это - на бумаге упоминается, а на
дисках нет)
- инверсия экрана (12)
- Flip horizontal (61)
- Flip vertical (49/78)
- Rotate 180
- Move code
- Font flip horizontal (22)
- Font flip vertical
- Font rotate 90
- Set attributes
- Screen memorize (13)
- Screen recall (12)
- Flip horizontal
- 64 print
- Attrs invert (30, потом 14)
- Screen Grid (26)
- Grid-
- Exchange (17)
- Merge (17)
- Running line
- Border lines
- скролл 8x8 (81)
- UpA (21)
- Fast CLS
- hexprint
- Hex Dump
- Waves standard
- New waves
- Repeat (12)
- ввод числа накруткой (для игры Губер─
натор)
- L4(17), R4(17), L2(23),R2(23),LRIPPLE
(12),RRIPPLE(12),lshutter(12),rshutter(12)
- расчёт адреса на экране DE->HL (29)
- W LEFT, W RIGHT, W INV, W CLEAR
- W PUT, W GET
- M RIGHT, M LEFT, M INV, M CLEAR
- POINT (28)
- PLOT (56)
- FILL (сначала рекурсивный алгоритм,
потом с буфером на 256 координат)
Осенью 1994 года я завёл отдельную об─
щую тетрадь под проект графического редак─
тора, в ней распределял адреса процедур,
начиная с верха памяти. Они шли в следую─
щем порядке: Undo,Ok,Remove,Grid,Addrcalc,
PLOT, POINT, FILL, FILLING, CLEAR SCR,CAT,
CONTRAST,CURSOR. Процедуры компилировались
по одной и тестировались из Бейсика. Рисо─
вал меню редактора, вид окна масштабирова─
ния... и потом всё забросил. Видимо,потому
что понял, что таким методом я никогда не
напишу редактор лучше Art Studio!
К тому времени я уже общался с двумя
другими программистами - Николаем Медведе─
вым и Сергеем Галишниковым. А это значит,
появился стимул показать им что-то гото─
вое.Поэтому из процедур графического реда─
ктора к декабрю 1995 года был написан Font
editor. Потом он некоторое время развивал─
ся, и версия 2.06 тоже ушла на конкурс. В
этом редакторе уже была реализована стре─
лочная (точнее, прицельная) система,с дви─
жением курсора по пикселям (в первой вер─
сии было по знакоместам).Файловые операции
были написаны на Бейсике. Из-за сборки по
частям полного исходника не было, поэтому
по требованиям конкурса я изготовил сбор─
ную "распечатку" в тетрадке от руки.
Летом 1996 года я пытался написать соб─
ственный отладчик (причём в экранной обла─
сти), написал дизассемблер - а он занял
целых полтора килобайта. Пришлось забро─
сить этот проект. Дизассемблер можно найти
в приложении к ZX-Guide #4.5.
В конце 1996 после прототипа на Бейсике
я реализовал игру Sapper'96 - там уже была
оконная система с перемещаемым окном. Од─
ним. И заодно это была первая большая про─
грамма, которую я компилировал целиком.
Это было непросто, потому что мой 48К ко─
мпьютер стал безбожно глючить, особенно во
время сохранения на диск. На практике это
выглядело так: сначала я готовил процедуры
на бумаге, потом их вбивал в исходник и
тут же сохранял под другим именем. Только
после этого можно было тестировать. До сих
пор так делаю :) Только вместо бумаги те─
перь текстовые файлы...
В феврале 1997 года я написал чанковый
редактор PAINTBRUSH (см. Info Guide #12 ).
У него не было меню сохранения, но был но─
вый интерфейс с выбором цвета стрелкой, а
также с несколькими зумами (но редактиро─
вать можно было только в 4x4 ).Писал я его
всё ещё в GENS, но переход на MASM на моём
новом 128K сильно ускорил мне разработку.
Тогда же или несколько раньше я проду─
мывал концепцию мультиколорного редактора.
Там должны были быть менюшки слева и спра─
ва (по ограничению мультиколора 8x1 - 24
знакоместа на Пентагоне, см. ZX-Guide #2),
иконки на кнопках, в режиме зума в углу
должен был показываться экран в 1x1. Но
идея была заброшена, через год я написал
другой мультиколорный редактор, попроще.
А ведь я планировал не только крутой
мультиколорный редактор, а целую систему
типа Windows, нарисовал для неё пропорцио─
нальный шрифт, мокапы экранов (их можно
увидеть в приложении), делал текстовый ре─
дактор с переносом строк,изучал FAT, писал
просмотр картинок с MS-DOS дискет - смот─
рел их в примитивном предке режима R-Mode.
Я думал "чем мы хуже iS-DOS ?" и хотел
придумать свой формат диска. Но постоянные
ошибки дисков и необходимость использова─
ния FUT поставили голову на место, так что
моя фантазия ограничилась хранением дирек─
торий как файлов - в демоверсии "Нортон-
командера" (уже в ассемблере ALASM ).Кста─
ти,он не умел уплотнять такой диск,и никто
не умел.
Шёл 1998 год. Я вышел на радиорынок и
зарелизил сначала текстовый редактор
ACEdit, а потом - в конце года - журнал
ZX-Guide #1. Там была уже многооконная си─
стема (однозадачная), где фон под окнами
сохранялся в буфер типа стека. В следующем
1999 году я по просьбе ныне покойного Иго─
ря Чирцова из Барнаула пытался сделать там
листалку со скроллбаром и превратить жур─
нал в библиотеку, котором мог бы восполь─
зоваться любой желающий. Это был так назы─
ваемый "ZX-Guide #1.5". Он не пошёл никуда
(не считая ZX-Guide #2.5 trash ), потому
что к тому моменту я уже переходил на пла─
вные фреймовые листалки.
Мне не нравился стандартный видеорежим
6912. Я спаял простую схему 384x304 и на─
писал листалку для текстов шириной 80 сим─
волов, которые мне копировали с IBM PC.
Были версии под TR-DOS дискеты (в ZX-Guide
#2 ) и под MS-DOS дискеты (январь 2000 ),
обе только в исходниках. Параллельно я пи─
сал редактор под цвет на точку "8 color
editor", минус первая версия которого была
в том же ZX-Guide #2.5 trash. Дизайн (воз─
можно, и с кусками кода) был взят из того
самого PAINTBRUSH. Но главное, я изобрёл
схему 384x304 и в то же время не задумал─
ся, что графический редактор должен редак─
тировать не 256x192, а картинку произволь─
ного размера! Через эту же ошибку прошли и
авторы других графических редакторов на
Speccy...
В мае того же 2000 года я написал ANSI
viewer. Это было некоторое продвижение,
поскольку размер экрана там регулировался
- хотя бы по высоте. Текстовый редактор
ACEdit тоже был переделан - под регулиров─
ку экрана по ширине и поддержку командной
строки TR-DOS. Поддержка командной строки,
MS-DOS-дискет, ANSI, разных размеров экра─
на приближала меня к некоторым стандартам,
но все эти фичи почему-то оказывались в
разных программах! Я не интегрировал прог─
раммы друг с другом, хотя и мечтал об
этом. В фантастическом рассказе "А был ли
кризис?" ( ZX-Guide #3 - конец 2000 года)
можно даже встретить такую фразу: "Alone
Coder не ходил в "Зосень", не читал "Скла─
вку", не покупал игр сомнительного качест─
ва, а мирно сидел и занимался интегрирова─
нием плейера MPEG video в новую версию
своего Inet-браузера под Spectrum..." И
это была не то чтобы шутка - в то время я
изучал в институте HTML, а в конце 2001
года написал ACEdit>html converter (по
просьбе Unbeliever'а ) и с его помощью вы─
пустил ZX-Guide #4 html version, который
до сих пор лежит у меня на сайте. Вы не
поверите, но тогдашние браузеры отображали
его 866 кодировку правильно :)
Итак (предположил я, заполучив Pentagon
1024 ),если мы пишем операционную систему,
то она должна работать с кучей форматов
файлов. Например, с архивами, которые при─
ходят из Fido (у нас в группе был фидош─
ник-реальщик - T(c)S ).В идеале даже рабо─
тать по фону. А что у нас было со стандар─
тными архивами? Только pkunzip и нерабочая
демоверсия ZXUnRar от AIG. В конце 2002 г.
я начал взламывать и исправлять ZXUnRar,
так что от оригинального кода почти ничего
не осталось. В начале 2003 года стал дора─
батывать JPEG viewer; первое моё ускорение
попало в Born Dead #0G, выпущенный 1 апре─
ля. Потом научился делать автосборку в
ALASM (упаковщики mrip*.H и m2hr*.H ) и в
июне выпустил первую версию ZXRar. А в ок─
тябре исправил pkunzip 1.41 для поддержки
SCL.Также я дорабатывал Pro Tracker,ALASM,
STS,Hrip,Perfect Commander и Mr Gluk Reset
Service. Таким образом, у меня на руках
оказались системные программы от десяти
разных групп авторов, которые никак не по─
лучалось объединить в одну!
Я, конечно, не сидел в вакууме. И не
только изучал чужие системы, но и публико─
вал в журнале описания DISCiPLE/+D, ZXVGS
и ChaOS. Но то, что я в них видел, выгля─
дело совершенно перпендикулярным моим за─
дачам. Я даже не видел в них возможностей
практического использования!А для меня это
было самое важное. У себя в голове я уже
забросил окошки и стрелочки - даже новую
оболочку для журнала (Inferno Guide #5)
сделал без них.
Чтобы привлечь народ новыми концепция─
ми, стал распространять программы в исход─
никах,с автосборщиком mkace (август 2003).
А в сентябре 2004 высказал в ZX.SPECTRUM
идею "подружить программы в памяти", чтобы
они не мешали друг другу. Это позволяло бы
параллельно редактировать разные форматы
данных, не перезагружая компьютер. Мне, по
опыту с Wolfenstein 2004, это было очень
важно.Что для этого требовалось? Для этого
требовалось в системных программах рабо─
тать не с физическими номерами страниц,а с
заказанными.Но я никак не мог организовать
рабочий процесс. (ZXRar, ZXUnRar, pkunzip,
JPEG viewer и Pro Tracker всё-таки подру─
жились друг с другом - но произошло это
только через 15 лет.)
Следующую идею я высказал в ACNews #35
- до написания полноценного коммандера под
FAT32 поддержать винт как TR-DOS диск с
"гиперпереходами" (мне к тому моменту по─
дарили контроллер винта, а в январе 2005 я
написал HDDoctor ).Эта идея устарела сразу
после появления DNA OS, но поддержка
TR-DOS на уровне виртуальной файловой сис─
темы потом нашла своё отражение в NedoLang
и в ядре NedoOS. Удивительно, но в ANSI
viewer,ZXUnRar,pkunzip и JPEG viewer такой
подход не проглядывался, не было его и в
ZXRar. Но ZXRar - отдельная история, и я
жалею, что начал его писать именно для
128K. Там совсем не осталось места на нор─
мальный код, там просто лапша,понять кото─
рую после многих лет уже почти невозможно.
Параллельно я продумал идеологию редак─
тирования текста произвольной длины (так и
не реализовал) и концепцию драйвера клави─
атуры с обработкой по факту нажатия и бу─
фером событий. Этот драйвер в декабре 2004
попал в ACEdit v0.89 и оказался таким удо─
бным, что позже ушёл в TFM Instrument
Editor, а потом и в ядро NedoOS - тоже.
Я внимательно изучал систему DNA OS и
всё время держал руку на её пульсе. В 2005
году я добавил туда сохранение TRD, так
что система стала моим рабочим инструмен─
том на Pentagon 1024 и на ATM-Turbo 2+,
который мне тоже подарили. Я иногда подде─
рживал ATM-Turbo в программах, но вдохно─
вился этой системой, только когда увидел
её графику в цвете на точку. В октябре
2005 года я научился программировать эту
графику и при помощи KSA-7G и John Sil─
ver'а спаял похожую схему 16col для Пента─
гона. До MPEG video не дошло, но к концу
года у меня уже игралось кино под цвет на
точку с компакт-диска, а в январе мы с
Shiru портировали на Спектрум игру Time
Gal. Но получилось так, что это оказалась
единственная CD-игра для Спектрума. Ведь
шёл уже 2006 год.
Шёл 2006 год. После Chaos Constructions
2004 была очевидна депрессия на платформе:
серьёзные игры и демы исчезали, единствен─
ной отдушиной было то,что CHRV и KOE стали
производить новые платы и ещё как-то шеве─
лился конкурс "Твоя игра". Обращало также
внимание, что Максагор с группой товарищей
писал некие непонятные мне тогда вундер─
вафли на CP/M и iS-DOS (TASiS). Из них из
всех я использовал только копировщик с CD,
и то только при разработке Time Gal. И во─
зник вопрос - как не попасть в такую лову─
шку,как операционная система,которая нужна
только её авторам? Что она должна предо─
ставлять пользователю? И я начал писать
браузер.
В январе 2007 года у меня был первый
опыт с MSX-DOS (порт игры Ball Quest под
MSX ). Там я оценил файловые операции, ко─
торых не было на TR-DOS, но я уже не видел
для себя операционную систему, которая не
работает с обычного TR-DOS диска. Это выг─
лядело как стена для начинающего пользова─
теля. Я тогда даже сам не знал,как создать
образ HDD с FAT для эмулятора. И главное -
я программировал в ALASM, а это значит,что
мои исходники были в формате TR-DOS.Думаю,
на этом погорел и Vitamin с ChaOS. У него
просто кончился диск...
Other articles: