Natural #01
01 апреля 1998

Идеи - Как написать многозадачную операционную систему. Какой должна быть идеальная операционная система для Speccy ?

<b>Идеи</b> - Как написать многозадачную операционную систему.
 Какой должна быть идеальная операционная система
для Speccy ?
   ┌──────────────────────────────────────────────────────┐
┌──┴──────────────────────────────────────────────────────┴──┐
│                           ИДЕИ                             │
└──┬──────────────────────────────────────────────────────┬──┘
   └──────────────────────────────────────────────────────┘

                        (С)Sir Ilias.

       Как написать многозадачную операционную систему.

       Статья  была написана довольно давно - 2 месяца назад,
и  некоторые моменты уже успели устареть, но я не стал ее из-
менять. Дополнкния Вы найдете в конце статьи.

       (  Заранее приношу свои извинения за свою "Скорпионоя-
зычность",  но у меня Scorpion и это не могло не отразится на
статье.)

       Идея  этой статьи вынашивалась довольно долго. А каса-
ется  она  наболевшей  темы - операционной системы ( ОС ) для
нашего любимого Speccy (Scorpy, Profi, ATM, Pentagon и др.).
       Совершенно  ясно, что существующие решения не удовлет-
воряют  и  не  могут удовлетворить большинсво пользователей и
программистов  (  а  для нормального, перспективного развития
системы  нужен  стандарт, который легче всего устанавливается
если система удовлетворяет большинство ). А если и удовлетво-
ряют  то  лишь малую часть. Так например TR-DOS давно уже мо-
рально  устарела и пользуются ей только по привычке и за неи-
мением  альтенативы.  Правда известны как минимум две попытки
вдохнуть  в  нее  новую  жизнь  -  введение поддержки HDD под
TR-DOS.  Это контроллер MFM винчестеров С.Веремеенко (ZX-Ревю
4-5 1996 ) и IDE контроллер на SMUC (Scorpion and MOA Univer-
sial  Controller  )  разработанный  для Scorpion ZS 256 (вла-
дельцем  коего я являюсь.)
       IS-DOS хороша по части текстового редактора и программ
печати,  а  также поддержкой HDD, которая по имеющейся у меня
на данный момент информации введена на Kay, ZX-Next и Scorpi-
on  (  я  в данный момент работаю на HDD 40 Mb, 10 из которых
под  IS-DOS). Но она КРАЙНЕ неудобна при работе ТОЛЬКО с гиб-
кими дисками, а также отсутсвием качественных инстументальных
сиситем для разработки собственного програмного обеспечения.
       Система  MagOs хороша реализацией псевдомногозадачнос-
ти,  но  на  этом  все ее прелести заканчиваются, так как все
время сказывается нехватка памяти ( две 128-ые программы заг-
рузить  невозможно,  правда  в  каком-то  номере ZX-NEWS, был
анонс платы расширения Scorpion до 2-ух Mb, Сергея Зонова, но
больше  нигде  я ничего об этой доработке не слышал. ), также
MagOs  6.3 ЖУТКО тормозит при работе с HDD ( загрука/выгрузка
замедляется  раз  в тридцать, просто кошмар! ) кроме того от-
сутствуют  системные  рестарты и тому подобная атрибутика ОС,
правда  в  новой версии все это обещано, но пока я таковую не
видел. И самый главный недостаток этой ОС в том, что функцио-
нировать  она может только на Scorpion'ах, а следовательно не
сможет стать стандартом ( врядли владельцы Profi, ATM, Penta-
gon & etc побегут покупать себе еще один компьютер.)
       Радикально новой была операционная сиситема Pink Floid
by  Domen Int. Тут и многозадачность, и графический интерфейс
стандарта  SAA/CUA  ( аля Windows ), и поддержка HTML ( стан-
дарт  мультимедийных  документов  на PC, Amiga, Mac & etc ) и
многое  другое. Но подкачала реализация многозадачности и не-
которые другие идеологические ошибки/погрешности.В итоге сис-
тема была расценена как неудачная ( ODISSEY#2 ).
       Справедливости  ради  хочу отметить, что лично на Pink
Floid  не  работал  и  мнение свое сформировал основываясь на
описании  в  ZX-FORMAT  #5  и  публикациях  в  ODISSEY  #2  и
ZX-NEWS'97 ( не помню номер ).

       Так  какой  должна быть идеальная операционная система
для  Speccy ? Рискну сформулировать некое Техническое Предло-
жение.

       Общие положения:

       Операционная  система  - друг пользователя. Она должна
быть максимально открыта. Ни какой защиты от встроенных тене-
вых  мониторов  (  то есть на Scorpion'е не надо портить 8-ой
банк RAM, но если пользователь пожелает - можно и запортить.)
ни  какой  защиты от Magic. Мало-ли что нужно будет выполнить
пользователю  для своих нужд. Хотя, конечно, для коммерческих
несистемных  программ (например игр) нужно обеспечить возмож-
ность  блокирования  выхода в теневой монитор на время ее вы-
полнения, но также обеспечить деблокировку монитора после за-
вершения  выполнения.  Но  повторяю, это целесообразно только
для игр.
       Максимальное использование индивидуальных особенностей
компьютера  пользователя.( Напимер в Scorpion'е есть встроен-
ные  часики, а так же BIOS, при желании user'а обеспечить ра-
боту  с  диском  и  через него, кроме того, на многих машинах
стоят  прошивки  TR-DOS, в которых есть подпрограммы чтения и
записи  в произвольные порты (in a,(bc):ret; out (bc),a:ret),
не использовать эту возможность нельзя.)

       Минимальной  конфигурацией  признать Spectrum 128.( Да
простят  меня владельцы 48-ых Spectrum'ов, но 128-ые действи-
тельно минимальная конфигурация для номальной работы.)
       Переключение страниц 128-ой памяти ТОЛЬКО по #7FFD.
       Любое  приложение  должно  нормально работать на мини-
мальной конфигурации компьютера.

       С точки зрения пользователя и программиста:

1. Многокаталоговая дисковая подсистема.
2. Графический многооконный интерфейс, желательно как в
   Windows 95 ( PC ), либо как в WorkBench X.XX ( Amiga ).
3. Поддержка мыши ( Kempston и AY ).А вот здесь остановочка.
   В  различных изданиях по Speccy все больше публикаций пос-
   вященных  стандартной Kempston Mouse - это хорошо, НО есть
   и такие, в которых содержится ЧУДОВИЩЬНАЯ дезинформация, в
   них  пишется,  что  у  KEMPSTON  MOUSE  три кнопки ( схема
   контроллера в SPECTROFON #20 ) - ЭТО НЕ ТАК !!!
   Пользователи, программисты, ЗАПОМНИТЕ и РАСКАЖИТЕ ВСЕМ :
         ╔═════════════════════════════════════════╗
         ║ У KEMPSTON MOUSE - 2 ( ДВЕ ) кнопки !!! ║
         ╚═════════════════════════════════════════╝
   (  об  этом можно прочитать в ZX-РЕВЮ '91 стр. 121, второй
   столбик,  девятая  строка  с  верху.  А  так  же  описание
   контроллера  мыши  фирмы Scorpion. Если все еще не убедил,
   обращайтесь в ZX-FORMAT - у них поддержка хвостатой с пер-
   вого номера. ) и опрашиваются они по порту #FADF, d0=0 при
   нажатой  левой  кнопке, d0=1 при отжатой левой кнопке. Для
   правой  аналогично используется d1. Если в варианте Вашего
   контроллера  мыши три кнопки, то не используйте третью, не
   обламывайте пользователей которые приобрели СТАНДАРТНЫЙ
   контроллер Kempston Mouse.
4. Прозрачная работа с MS-, TR- и IS- дискетами. В КРАЙНЕМ
   случае  наличие конвертора.( Говорю это как достаточно на-
   маявшийся конвертацией в IS-DOS.)
5. Поддержка  TR- ,IS- винчестеров (Scorpion, Kay,ZX-Next ).
   (Это чтоб не переписывать весь IS-винт на дискеты и не за-
   качивать его на винт новой системы.)
6. Поддержка RAM-диска.
7. Реализация многозадачности (подробнее ниже).
8. Поддержка буфера обмена данными между приложениями.
9. Желательна  реализация аналога ARexx (на Amiga - межпрог-
   рамный язык, позволяющий обьединить несколько приложений в
   единую среду).
10. Желательна  реализация аналога IFF - формата данных ( на
    Amiga - стандарт обмена данными единый для текста, музы-
    ки, графики и т.п.).

       Теперь в общих чертах о внутреннем устройстве.

                 Реализации многозадачности.

       Мною давно вынашивалась идея реализации многозадачнос-
ти  на  Speccy.  Было  проработано  много  вариантов и в ходе
исследований  мной  был  найден  единственно  возможный опти-
мальный  вариант реализации многозадачности на архитектуре ZX
Spectrum.  Он  накладывает минимум ограничений на программу и
не  требует  радикальной смены стиля программирования ( круто
расхвалил ;-).
       Метод основывается на ВТОРОМ режиме прерываний. Теперь
подробнее.
       Предположим  у  нас  в памяти есть 2 (две) программы и
нам нужно выполнять их парралельно. Первая находится по адре-
су  #C000,  вторая  по  #E000. Часть системы ответственной за
многозадачность, драйверы и т.п. висит на прерываниях. Мы со-
общаем  системе  адреса программ посредством таблицы, находя-
щейся в условленном месте. Таблица выглядит так:

                            #C000
                            #E000.

Система  передает управление первой программе посредством за-
несения  нужного  адреса  на стек ( ld hl,#c000 : push hl ) и
выходит  из маскируемого прерывания выполняя RETI. Затем пер-
вая  программа  преспокойно  выполняется  до тех пор, пока не
приходит  INT,  процессор заносит текущий адрес программы 1 (
регистр  PC, например #E32E ) на стек и переходит к обработке
маскируемого  прерывания,  то есть запускает систему. Система
сохраняет  все  регистры  и  забирает  со стека ТЕКУЩИЙ АДРЕС
программы 1 и помещяет его в нашу таблицу. Таблица становится
такой:
                            #C32E
                            #E000.

Затем  система вызывает драйверы, резиденты, увеличивает сис-
темные  часы  и  т.п.  Увеличивает указатель таблицы, заносит
другое  значение на стек ( в нашем случае #E000 ) и возвраща-
ется  из  прерывания.  Затем  выполняется  программа 2. Затем
вновь приходит прерывание и система, предварительно восстано-
вив значения регистров для программы 1, переключается на нее.
       Таким образом создается иллюзия парралельного выполне-
ния  программ. На самом же деле система просто раз в прерыва-
ние  переключается  на другую задачу. Надеюсь теперь все пре-
дельно ясно.
       Из вышесказанного понятны ограничения накладываемые на
программу:
       1. Не запрещать прерывания ( кроме особых случаев ).
       2. Программа должна сама настраиваться на нужный адрес
          ( быть релоцируемой ).
       3. Выводить информацию на экран только через драйверы
          системы  ( исключение может быть сделано только для
          полноэкранного режима (см. ниже)).
       4. Переключать  страницы  памяти только через драйвер
          системы.

       Понятно,  что  даже  две серьезные программы не смогут
нормально  функционировать  в  48-ом  пространстве,  по этому
предлагаю следующее распределение памяти (примерное):

    #4000-#5b00 ... Экранная область
    #5b00-#8000 ... Ядро (рестарты),IM2-модуль (обеспечивает
                    многозадачность),  Буфер-описатель прог-
                    рамм  (регистры,  текущий  адрес ),место
                    для резидентов, драйверов и т.п.
    #8000-#C000 ... Место для 48-модулей программ. (Программа
                    должна  состоять  из двух (и более ) час-
                    тей,    одна    управляющая    в   памяти
                    #8000-#C000, а другая часть в страничках.
    #C000-#FFFF ... Место для самих программ.
      ┌──────────────────────────────────────────────┐
      │Этот пример условный и ни к чему не обязывает.│
      └──────────────────────────────────────────────┘
       Программа  должна уметь находиться в трех основных ре-
жимах работы ( по аналогии с Windows 95 ):

       1. Оконный. Осуществляется через драйверы системы.
          ( для некоторых программ не обязательно (для игр).)
       2. Полноэкранный.  Может осуществляться как через ОС,
          так и через собственные подпрограммы. ( для некото-
          рых программ также не обязателен ).
       3. Так  называемый  "спящий"  или  "свернутый", когда
          программа находится в памяти, но не вызывается сис-
          темой ( текущий адрес программы пропускается в таб-
          лице адресов ). При необходимости можно вернуться в
          программу.

       Операционная  система должна давать возможность одному
приложению  снимать  другое,  при  необходимости обращаясь за
разрешением к пользователю.
       Кстати,  рестарты можно сделать как в IS-DOS через RST
16,  но  НИ  В КОЕМ СЛУЧАЕ НЕ ЧЕРЕЗ RST 8, т.к. в этом случае
нарушится  совместимость со Scorpion'ами. Также можно сделать
рестарты через CALL ADDR, но в этом случае придется не менять
этот  адрес в следующих версиях ОС. Хотя CALL ADDR и занимает
на  2  байта  больше, но действовать будет быстрее так как не
выполняется программа из ПЗУ, также не нужно беспокоиться ка-
кой банк ROM подключен.

           Приоритеты  в  разработке  программного
                  обеспечения для новой ОС.

       На  первом  месте должны стоять системы программирова-
ния,  то  есть на базовой дискете с новой ОС должен быть свой
ассемблер,  разработанный  СПЕЦИАЛЬНО  для этой системы, а не
жуткая адаптация . Это должна быть удобная СРЕДА для создания
программ.  Если  среда  будет  удобной, то программисты будут
создавать  такие же удобные программы. Ассемблер должен обес-
печить  (как стандарт) генерацию релоцируемых программ, драй-
веров, резидентов для новой ОС. Позже можно будет написать СИ
-  среду  и  т.п.  Ну  и наверное нужно обеспечить BASIC-под-
держку.
       Затем  идут утилиты, игровые и прикладные программы. (
Тут  создатели  Pink  Floid пошли верной дорогой, анонсировав
свою игру "ЭКСПАНСИЯ".)  Также нужно обеспечить запуск TRDOS-
овских программ из ОС.
       Очень  мощьным подспорьем в деле распространения и по-
пуляризации новой операционной системы может стать выпуск пе-
риодического  издания ( эл. журнала/газеты ) для нее, который
бы  максимально использовал ее возможности ( многозадачность,
оконный  интерфейс  и  т.п.).  Это  издание могло бы освещать
проблемы/перспективы развития этой ОС, делиться новыми техно-
логиями  для  нее,  но не зацикливаться только на ней, а быть
просто интересным изданием.

       Ну чтож, раз Вы дочитали до сюда, то Вы навеняка заин-
тересовались  этим проэктом как пользователь, программист или
разработчик  и  у  Вас  наверняка возникли некоторые вопросы.
Попробую ответить на некоторые.

               Почему ты это все тут написал ?

       -  Я думаю, что моя идея по реализации многозадачности
достаточно  интересна  и  способ предложенный мной достаточно
оптимален. Я надеюсь, что кто-нибудь прочитает сие творение и
напишет-таки  нормальную, дружественную, многозадачную опера-
ционную  систему  для ZX Spectrum ( ну и может где-нибудь мое
имечко упомянет... ;-).
        Вобщем все идеи изложенные в этой работе я дарю тому,
кто возмется их реализовать. Да, если Вы возьметесь, не поле-
нитесь, напишите мне - я порадуюсь.

   Почему ты сам не приступил к реализации этого проэкта ?

       - Кишка тонка. Я не имею опыта в разработке ОС. А "ра-
довать"  Вас  появлением  какого-нибудь мутанта... это не для
меня.
       Вот вроде и все, если не угадал Ваш вопрос, не серчай-
те - я все-таки не ясновидец, шлите его мне.

       Теперь  обещанное дополнение. Из телефонного разговора
с  представителем фирмы Scorpion (осуществленного посредством
ограбления  своей  бабушки  ;-) я узнал, что плата расширения
включает в себя "расширитель" памяти до 2 mb, расширение гра-
фического экрана, разрешение которого составит по-моему (точ-
но не помню) 512 на 384, цвет задается для каждого байта (для
8-ми  точек),  плюс аппаратный скроллинг. Также будут введены
два новых режима работы, идентичные по показателям фирменному
Speccy , и Pentagon'у. Также на плате будет стоять flash-ПЗУ,
содержащее  последнюю версию ПЗУ Scorpion'а, и каждый в буду-
щем сможет обновить версию ПЗУ без всяких проблем - с дискеты!
Осталось сказать, что плата стоит 10 у.е. ( 1 у.е. = 6.5 руб.)
и напомнить телефоны фирмы Scorpion:

         (812) 298-06-53, 172-31-17 (отдел заказов),
               251-12-62 (ремонтная служба),
               130-19-95 (отдел программного обеспечения).



Другие статьи номера:

Вступление - Пермская компьютерная газета.

Read Me - Старина Speccy переживает трудные времена в нашем городе.

Идеи - Как написать многозадачную операционную систему. Какой должна быть идеальная операционная система для Speccy ?

Фантазия - рассказ "Резервация".

Юмор - Несколько самодельных приколов.Сначала о всеми любимой PC.

Розыск - Разыскивается версия графического редактора Art Studio поддерживающая kempston mouse.

Реклама - Реклама публикуется бесплатно (во всяком слючае пока).


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

Похожие статьи:
ДОМ - еще один небольшой романчик от SLIP/OTTODIX.
Сны - Проснулся я на жеских нарах. Голова очень болела, да и вокруг пахло...
В паутине - График работы городских серверов.
Анкета - Surfin Вird.
MY CITY - КУККОВКА: Рaён в кoтoрoм мнoгo шeснaццaтиэтaжeк...

В этот день...   2 декабря