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. У него просто кончился диск...