01 апреля 2021

        NedoOS: SMAN 
Alone Coder 

   К  лету 2007 года Fido фактически умер─
ло. Я перешёл в Интернет,меня пригласили в
IRC-канал  #mhm  для  обсуждения концепции
операционной  системы. Выпустив Info Guide
#10,  я  закрыл  все  старые  проекты  под 
TR-DOS (последним  был MCX viewer - предок 
недоосовского NedoView ).5 июня был создан
виртуальный   персонаж  SMAN  и  его  сайт 
http://smansite.narod.ru . На сайте выкла─ 
дывались  предварительные  заметки по ядру
SOS, текстовому редактору SWORD, графичес─ 
кому редактору spaint. В июне-октябре SMAN
придумал соглашения о стиле (насколько это
было возможно в ALASM ), написал структур─
ные  макросы  для  ALASM, первые процедуры
ядра,текстового редактора SWORD, цифрового
музыкального редактора под ось (потом идея
этого редактора была отброшена).
   Мы обсуждали с mhm-щиками межпроцессное
взаимодействие, сокеты, библиотеки ncurses
и  X11, подбирали  литературу (Lions' Com─
mentary on UNIX v6, "Современные  операци─ 
онные  системы" Таненбаума, описание Amiga 
OS ),но получалось так, что программировал 
один я. Хотя  изначально  SMAN задумывался
как  коллективный  псевдоним.  Предполага─
лось, что  он жил в Туле, звали его Сергей 
Манохин, он хотел попасть в группу MAYhEM, 
но его туда не приняли :)
   В  2007-2008  я  также  вёл переписку с
ZET-9 про доработку DNA OS под "скрытость" 
резидента в рамках 128K/1M (там я отказал─
ся от сплошной виртуальной нумерации стра─
ниц  в каждой программе и перешёл к заказу
номеров  страниц), с Vitamin'ом про память
и  шедулинг,  а  также  с  Budder'ом, fk0,
Screw'ом  и  другими, кто теоретически мог 
помочь с разработкой оси, но, к сожалению,
не  помогли. Всё  это происходило в тайне,
чтобы  никто  не  догадался, что  никакого
SMAN'а не существует. Даже если бы и дога─ 
дался, про разработку операционной системы
знал  только  узкий  круг лиц. Снаружи всё
выглядело так,как будто Alone Coder просто
снизил активность.

   К 2008 году в ядре SMAN'а была реализо─
вана вытесняющая  многозадачность, приори─
теты, критические секции, сообщения фикси─
рованной длины, подписка на прерывания, на
уровне ядра планировались 256-байтные бло─
ки  памяти, пайпы  и  vfs (но так и не был
придуман формат данных для неё).Для вирту─
ализации  программ под будущей осью 5 июля 
2007 года был написан эмулятор ZX Spectrum 
на  ZX Spectrum. После  изучения всяческих 
кодировок и раскладок клавиатуры ещё в де─
кабре 2007 была придумана раскладка ШВЕРТЫ
-  на  которой  в  русском   режиме  можно
набрать любой символ (сначала она попала в
ACEdit, а уже оттуда в NedoOS ). Был напи─ 
сан модуль хранения и обработки текста для
редактора  SWORD - он  был основан на 256-
байтных блоках с байтом кодирования сдвига
блока.

   В  2009  году я написал дему The Link -
эксперименты  с  реальной многозадачностью
(два процессора Z80 - второй в NeoGS ).Она
отлаживалась  в новой версии Unreal Speccy
- я передал этот проект  Deathsoft'у. Дема
была зарелижена в исходниках с автосборщи─
ком  mkace. Каждый эффект мог отлаживаться
и  отдельно, и в составе демы. Имелся гло─
бальный обработчик прерываний с глобальным
таймером, но  без глобального скрипта. Все
эффекты  писались в едином стиле "игрового
цикла". Впоследствии на базе этих исходни─
ков  я  выпустил ещё несколько дем, но уже
без  второго  Z80. Но  проект операционной
системы  катился под гору. Я крутил и так,
и  так, и получалось, что выделение нижней
памяти 256-байтными блоками совершенно не─
юзабельно  для программиста, так же, как и
своп нижней динамической памяти. Требуется
именно аппаратное переключение всех частей
памяти, причём не менее чем четырёх. Памя─
тником этим рассуждениям осталось три тек─
ста SMAN'а общей длиной 60 килобайт.
   Последние изменения ядра SMAN'а датиру─
ются  21  сентября 2010 года (с небольшими
изменениями  в 2015 году). Это ядро выкла─
дывалось на zx-pk.ru, но не вызвало  ника─
кого энтузиазма. По сути оно было бесполе─
зно. Я даже не стал писать для него систе─
мные  вызовы. Ошибка была и при проектиро─
вании редактора SWORD - во внутреннем фор─
мате документа не были поддержаны ни обра─
тные  ссылки, ни  внедрённые  изображения.
Кроме того, структура данных "rope" выгля─
дела  перспективнее  прокручивающихся 256-
байтных сегментов,которые тормозили линей─
но  от длины текста. И было непонятно, как
при переходе на новую ОС продолжать разра─
ботку  её  программ  в ALASM. Стал изучать
книгу John R. Levine "Linkers & Loaders" и
думать дальше.

   С 2009 года я занимался и другим проек─
том - движком  Wolf48, который  должен был
заменить движок Big L, который в свою оче─
редь  заменял  движок  Wolfenstein 2004. В
марте  2011  года  вышел  первый  релиз  с
использованием   движка  Wolf48 - Critical
Error  demo  от HPRG. Было понятно, что на 
48K памяти под полноценную игру мало, фор─ 
мат 128K мёртв и только периодически галь─
ванизируется без каких-либо новых техноло─
гий, а  в  ATM-Turbo есть всё, что нужно и
для  этой  игры, и  для  других, которые я
планировал ( Super Mario, цветного Чёрного
Ворона, Worms ...),и для многозадачной ОС. 
Более того, большие игры и надо делать под
ОС - хотя  бы  для того, чтобы не пришлось
писать собственную файловую систему в каж─
дой.
   В  2011-2012  я участвовал в разработке
Evo SDK  совместно  с Shiru. Я  отвечал за 
вывод  спрайтов и поддержку ATM2. Эта сис─
тема - плод  долгих раздумий после выпуска
Ball Quest.  Хотелось  иметь  произвольное 
количество  спрайтов (а не по размеру дис─
кетки) и  более 32K  непрерывного кода под
логику. Планировался также переход на поя─
вившийся  в  2009 году видеоконтроллер Eva
V9990  (разработал  его  Ronin/NedoPC, все 
материалы  есть  у меня на сайте), поэтому
все спрайты были заложены одинакового раз─
мера - 16x16. Это ещё и позволило избежать
написания  редактора  анимаций или скрипта
вырезания спрайтов - спрайты просто снима─
ются из bmp слева направо, сверху вниз.
  Evo SDK был достаточно прост для освое─
ния начинающими игроделами, но у него была
беда - он почти не расширялся.Максимум,что
удалось  потом  добавить в TR-DOS версии -
поддержку  TurboSound FM,  работу с диском
по #3d13, чтение-запись байтов в страницах
памяти  и  копирование  кусков  экрана. Не
удалось  даже  организовать  запуск  одной
программы   из  другой  из-за  ограничений
встроенного ассемблера SDCC, который ещё и
несовместим  между разными версиями компи─
лятора. (Теперь  мы с Hippiman'ом уже пор─
тировали Evo SDK под NedoOS, и в этой вер─
сии  уже  можно  добавлять любые функции с
помощью SjASMPlus .)

   Нам  не  удалось  убедить автора SymbOS
портировать свою систему на Спектрум. Поэ─
тому я стал продумывать план развёртывания
оси  (под влиянием статьи ZET-9 про "Шмат─
рицу", которая  потом  попала в Info Guide 
#11 ): 
 - первая отладочная модель: 
клавиатура -> бордюр; 
 - вторая отладочная модель: 
клавиатура -> текстовый экран; 
 - третья отладочная модель: shell.
   Также  начал писать ТЗ на систему (пос─
ледняя  версия датирована 2016 годом). Оно
сейчас смотрится  несколько устаревшим, но
для своего времени было просто революцион─
но: 
────────────────────────────────────────── 
  Размер   задачи  должен  ограничиваться 
только объёмом памяти. 
  В существующих на ZX многозадачных осях 
размер  задачи  ограничен одной страничкой 
верхней памяти. 
 
  Число одновременно запущенных задач до─ 
лжно ограничиваться только объёмом памяти. 
  В  существующих  на ZX осях число запу─ 
щенных  задач  ограничено выделенным окном 
под резиденты в нижней памяти. 
 
  Ось  должна  работать  на  голом АТМ2 и 
поддерживать АТМ3. 
  Существующие  на ZX оси не поддерживают 
АТМ3. 
 
  Ось  должна  реализовывать  многозадач─ 
ность в следующих видах (одновременно): 
 + кооперативно по событиям
 + квантами по 1/50 с
 + переключением фокуса кнопками
  Существующие  на  ZX оси не умеют все 3 
пункта одновременно. 
 
  Ось должна давать программам не окошки, 
а  терминалы  (контекст экрана и клавиату─ 
ры). Каждая  программа  может  работать  в 
своём экранном режиме. 
  Должна быть возможность реализации про─ 
граммы  GUI, которая  будет  предоставлять 
оконный интерфейс другим программам, зато─ 
ченным  под неё, желательно с возможностью 
вклиниться  в  цепочку переключения фокуса 
кнопками  (чтобы не было 3 уровня переклю─ 
чения: magic для переключения TR-DOS и TAP 
задач,  кнопки   переключения  терминалов, 
кнопки  переключения  окошек  в  терминале 
GUI). 
  Существующие на ZX оси не позволяют ра─ 
ботать  каждой  программе в своём экранном 
режиме. 
 
  Ось  должна иметь среды разработки (од─ 
новременно): 
 + кросс-ассемблер со сборкой на носитель 
одной  кнопкой (первое, что надо сделать) 
 + шеллскрипт
 + нативный макроассемблер мощнее аласма
 + кросс-си (некоммерческий)  со  сборкой 
на носитель одной кнопкой 
 + нативный  си  с  поддержкой ассемблера 
(качество  кода не важно, можно сделать из 
C Warp) 
 + нативный  текстовый  редактор   мощнее 
ACEdit (для начала можно простой блокнот) 
 + нативный  графический   редактор  (для 
начала можно простой paint) 
  Существующие  на ZX оси не имеют однов─ 
ременно нативную и кросс-среды разработки. 
 
  Ось  должна поддерживать следующие кон─ 
фигурации носителей (на выбор, должны быть 
поддержаны все): 
 + Nemo HDD / CompactFlash  как  основной 
носитель и SD-карта как дополнительный (ZX 
Evo baseconf, Pentagon 2.666) 
 + SD-карта  как  основной носитель и SD- 
карта  на NeoGS как дополнительный (ZX Evo 
baseconf + NeoGS, Pentagon 2.666 + NeoGS) 
 + ATM2 HDD/CompactFlash (master) как ос─ 
новной носитель и CompactFlash (slave) как 
дополнительный (ATM2) 
  Существующие  на ZX оси не поддерживают 
SD-карту. 
 
  Ось  должна  поддерживать горячую смену 
дополнительного носителя. 
  Существующие  на ZX оси не поддерживают 
горячую смену чего-либо, кроме дискеты. 
 
  Ось должна поддерживать FAT32 как осно─ 
вную файловую систему. 
  Существующие  на ZX оси не поддерживают 
FAT32. 
 
  Ось  должна иметь возможность запускать 
TR-DOS  софт  следующими способами (на вы─ 
бор, должны быть поддержаны все): 
 + через vTRDOS, если он есть (ATM2)
 + через Evo DOS (ZX Evo baseconf)
 + через  рамдиск / эмулятор ВГ93 в оста─ 
льных случаях (АТМ2, Pentagon 2.666) 
 
  Ось  должна иметь возможность запускать 
TAP  софт  следующими способами (на выбор, 
должны быть поддержаны все): 
 + через  подмену  ПЗУ  48  Basic  (ATM2, 
Pentagon 2.666) 
 + через Evo DOS (ZX Evo baseconf) 

  Причём запуск TR-DOS и TAP с переключе─ 
нием/возвратом, что можно реализовать сле─ 
дующими способами (любым из): 
 - плагин для magic (ZX Evo baseconf?)
 - резидент  для  reset  (ATM2,  Pentagon 
2.666) 
 - гибернация  системы, загрузка в следу─ 
ющий  раз  в  том же состоянии (простейший 
вариант для начала, также возможно для бу─ 
дущих компьютеров) 
  В любом случае во время работы TR-DOS и 
TAP  софта  использованная  память системы 
сохраняется на основной носитель. 
  В  любом случае должна быть возможность 
холодной загрузки при удержании кнопки. 
  Существующие  на ZX оси не поддерживают 
запуск TR-DOS софта с возвратом. 
 
  Ось  должна эмулировать CP/M (как мини─ 
мум  запускать игры) в многозадачном режи─ 
ме, если это вообще возможно. 
  Существующие  на  ZX  оси, кроме самого 
CP/M, не могут запускать CP/M-задачи. 
 
  Ось  должна поддерживать следующие кла─ 
виатуры  (на выбор, должны быть поддержаны 
все): 
 + 40-key
 + ATM2 XT keyboard
 + ZX Evo
  Приложениям  они  должны быть видны как 
одна  и та же клавиатура, с получением со─ 
бытий ввода, нажатия и отжатия. 
  Существующие  на ZX оси не поддерживают 
все три клавиатуры. 
 
  Пользователь должен получать ось в сле─ 
дующем виде (одновременно): 
 + список плюшек
 + документация   пользователя   в  стиле 
"сделай 1, сделай 2" 
 + образ под настроенным эмулятором
 + набор файлов для копирования на SD-ка─ 
рту (*.$c главный) или HDD (+ образ диске─ 
ты для запуска) 
 + набор файлов для копирования на SD-ка─ 
рту,fdisk+format для HDD и копировщик SD-> 
HDD с установкой автозапуска 
 + документация разработчика в стиле "как 
написать первую софтину" 
 + настроенные среды для кросс-разработки 
с примерами 
 + документация разработчика в стиле "по─ 
лный список вызовов со всеми параметрами" 
 + документация разработчика в стиле "как 
это грузится и работает" 
  При первом запуске ось должна сама нас─ 
троиться  под  аппаратуру  или сообщить, в 
чём проблема. 
  При  первом  запуске ось должна войти в 
командер  (универсальный копировщик-запус─ 
кальщик-просмотрщик, расширяемый через до─ 
бавление запускалок расширений в текстовом 
файле). 
 
  Пользователь  должен получать следующие 
удобства от использования оси (одновремен─ 
но): 
 + полноценный копировщик-запускальщик,он 
же универсальный просмотрщик 
 + одновременная работа в нескольких про─ 
граммах с несколькими файлами 
 + нативная работа на FAT32
 + горячая смена носителя
 + запуск TR-DOS и TAP софта с переключе─ 
нием/возвратом 
 + поддержка расширенной клавиатуры
 + нативный графический редактор под цвет 
на точку 
 + нативный  текстовый  редактор   мощнее 
ACEdit 
 + батники
 + нативный макроассемблер мощнее аласма, 
с батниками 
 + нативный си удобнее C Warp,с батниками
 + настроенные среды для кросс-разработки
 + одна среда исполнения,не нужно мудрить 
с  лоадером  и  инициализацией программы с 
учётом глюков разных ПЗУ 
 + отсутствие необходимости  писать драй─ 
веры носителей, разгребаторы файловых сис─ 
тем и опрашиватели клавиатуры 
 + возможность писать действительно боль─ 
шие программы (в том числе большие игры) 
 + удобно  делать  логинг  при отладке (а 
логинг переключения памяти и вызова систе─ 
мных функций сможет делать сама система) 
 + возможность совместной разработки (об─ 
щая среда разработки,общие шаблоны,модуль─ 
ность) 
 + живые авторы оси, все сюрпризы центра─ 
лизованно документируются 
 + в  перспективе  возможность шарить на─ 
тивные   каталоги   по   сети  (RS232  или 
ZXNetUSB), причём в фоновом режиме 
 + в перспективе возможность создать веб- 
браузер 
 + в  перспективе  возможность аппаратной 
защиты памяти и устройств 
 
  возможность быстрой переделки трдос ре─ 
лизов под ось (вряд ли тулзой)? для  этого 
надо  иметь  возможность  включать экран в 
#4000  и ставить хук прерываний для задачи 
в фокусе 
  при  переключении  терминалов надо глу─ 
шить/восстанавливать   AY/TS?/TFM??   (где 
хранить  его  состояние?) или переделывать 
руками  так, чтобы  музыка  была отдельным 
потоком  и не прерывалась при переключении 
терминалов 
 
  почему  ни в одной оси не показано гра─ 
фом, как  соединены  программы  (драйверы, 
гуи, керналь+резиденты итп)? 

  как отделить vfs от ядра? vfs в библио─ 
теке, и  ссылки на подключенные библиотеки 
не отваливаются при fork-exec? 
  или  начальную  загрузку сделать другим 
механизмом? (снапшот или из канала) 
────────────────────────────────────────── 

   В  2013  году  я изучал CP/M и MSX-DOS,
архив исходников МикроАРТа, активно порти─
ровал  программы под АТМ2 (по сути набивал
руку), писал SDK "Unreal Project" - после─
дняя  моя надежда на ALASM, которая не оп─
равдалась.
   В  2014  году  я  перешёл  с  ALASM  на
кросс-компилятор SjASMPlus, потому что его
можно использовать в пакетной сборке с ку─
чей операций. ALASM может использовать при
сборке только тот код, который скомпилиро─
вал  сам  или  подгрузил как кодовый блок.
ALASM  не может скомпилировать два незави─ 
симых  проекта  одной командой - мы не мо─
жем, например, скомпилировать  одовременно
русскую и английскую версии BGE.
   Изучал  язык  и систему Oberon. История
Оберона  убеждает, что  написать серьёзную 
операционную  систему со средой разработки
можно одному-двум людям всего за пару лет.
Тогда же я начал писать графический редак─
тора gfxed (бывший spaint, который сущест─
вовал  только  в  виде  текстовых фантазий
SMAN'а, причём дизайн был взят из того са─ 
мого  ненаписанного мультиколорного редак─
тора 1997 года). В этом  редакторе наконец
было  концептуально  побеждено ограничение
размера  картинки одним экраном. Для срав─
нения, максимум, что я смог добавить в BGE
- картинку размером в два экрана...
   В  2015  году я изучал и другие простые
языки: C--, PLM, K65, не забывал и о Форте
с  Лиспом. Копал  информацию в Википедии о
самых разных языках программирования. Изу─
чал  UNIX  Haters Handbook. Изучал PQ-DOS,
написанную  для  Profi. В 2016 году понял,
как  сделать резидент для "скрытого" CP/M.
Почему-то  до  этого  во всех версиях CP/M
нельзя было убрать его код из верхнего ок─
на адресного пространства! 14 сентября на─
чал  писать язык NedoLang. До первой само─
компиляции  NedoLang  дошёл  31 марта 2017
года, 12  апреля  вышел первый гифт, напи─
санный в нём, а в сентябре была уже полно─
ценная  система  NedoLang  с библиотеками,
утилитами  и двумя таргетами (второй - ARM
Thumb ). Теперь была  реальная возможность 
компилировать  одни и те же исходники и на
PC, и на ZX. 

   В 2018 году я писал ещё и другой язык -
скриптовый   язык  Listh,  помесь  Lisp  и
Forth. Хотел  сделать совсем маленький ин─ 
терпретатор, чтобы его можно было засунуть
в  любую  программу, даже в дему или игру.
Для  примера  прикрутил  к нему 3D-движок.
Оказалось,что работать в этой системе неу─
добно.Не получилось сделать защиту памяти,
не  хватало редактора текста, а сам интер─
претатор занимает не так уж и мало.Да и не
так  быстро работает, а ускорение потребо─
вало бы переписывания всей  системы. Может
быть, я  ещё  вернусь  к этому скриптовому
языку...



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Epilogue - Finally, and contact the publisher.
Music scene - an overview of music c Chaos Construction 2006.
News - preliminary results Forever2e3, the announcement of the summer party of Millennium, Paradox 2000, CAFe 2000.
Poetry - Verse, "Who am I?"

В этот день...   21 November