ZX-OS

Неофициальный сайт поддержки ATM-turbo 1,2,2+ Speccy 4ever Dj Hooligan Power of Sound

SpecNet
Real Software ZpiXel ZX Chart Raww Arse Page

Документация

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

Оглавление

Организация памяти
Организация процессов
Структура исполняемых программ
Состав системы
Обработка многозадачности
Поддержка TR-DOS-программ

Организация памяти

Для ОС будет обязательным наличие диспетчера памяти, который позволил бы в любое из четырёх окон адресного пространства процессора вставить любую страницу памяти. Только с этим устройством возможно написание полноценной ОС для Спектрума. ОЗУ разбито на страницы по 16Кб. Расчётный максимальный объём - 256 Мб (т.е. практически бесконечен :-)). Максимальный объём для каждой задачи - 4 Мб (256 страниц), а минимальный - 32 Кб. Управление памятью производится с помощью драйвера памяти, который, в отличие от остальных драйверов, будет интегрирован в ОС. Общий формат адреса:

#0000 #0002 Номер страницы, бит 15=1, если
            адрес находится в той ячейке
            памяти, куда указывает этот
            адрес, бит 14=1, если для
            получения адреса нужно вызвать
            процедуру, лежащую по данному
            адресу.
#0002 #0002 Адрес, биты 15,14 - номер окна,
            в котором откроется страница,
            если этот адрес передаётся
            драйверу памяти, иначе - 0.

Минимальные требования к компьютеру - 256 Кб: 7 страниц - ОС (максимальная конфигурация), 1 страница - КЭШ и 8 страниц остаётся для задач.

Различаются локальные и глобальные номера страниц. Глобальные - это физические номера, Локальные - номера из таблицы описателя процесса (см. ниже).

Наверх

Организация процессов

Процесс - это программа, которая может быть исполнена. Таковыми являются:

  • exe - Запускаемые файлы
  • dll - Динамически загружаемые библиотеки
  • sys - Уровни системы

Каждому процессу система выделяет столько памяти, сколько требуется для его загрузки, плюс ещё одну страницу для всевозможных описателей (т.н. головная страница). Её примерное содержимое:

#0000 #0002 Адрес таблицы страниц
#0002 #0002 Адрес таблицы главных окон процесса
#0004 #0002 Адрес области каналов
#0006 #0002 Адрес таблицы очереди сообщений
#0008 #0002 Адрес таблицы открытых файлов
#000A #0004 Точка входа в задачу
#000E #0004 Процедура обработки сообщений
#0012 #0004 Процедура INT
#0016 #0001 Статус:
      7,6 - приоритет: 00 - низкий, 01 - средний,
      10 - высокий, 11 - очень высокий (только
      для процессов типа диспетчера задач,
      вызываемого по Alt-Ctrl-Del)
      5 - при 1 процессу нельза посылать сообщения
      4 - при 1 идёт обработка первого сообщения
      3 - при 1 нельзя вызывать функции процесса
      2,1,0 - резерв
#0017 #0001 Кол-во открытых страниц
#0018 #0001 Кол-во сообщений в очереди
#0019 #0001 Кол-во каналов
#001A #0001 Кол-во открытых файлов
#001B #0001 Номер канала с параметрами ком.строки
#001C #0001 Номер первого сообщения
#001D #0001 Номер последнего сообщения
#001E #0004 Указатель на иконку задачи
#0022 #0002 Указатель стека
#0024 #0008 Открытые страницы
#002С ..... Резерв
#0080 ..... Имя процесса, заканчивается нулём
#0100 #0100 Номера каналов открытых файлов
#0200 #0200 Таблица открытых страниц
#0400 #0400 Таблица указателей окон задачи
#0800 #0800 Таблица сообщений
#1000 #0400 Буфер стека
#1400 #2C00 Область каналов

Это была головная страница, все данные должна заполнять ОС. В остальные страницы загружена сама программа.

Наверх

Структура исполняемых программ

Программа представляет собой набор функций, пронумерованных от 0 до 255 и имеющих имена. Существует два вида доступа к ним - по номеру и по имени. У всех исполняемых модулей (*.exe, *.dll и *.sys) общий формат:

#0000 #0001 Количество функций (n)
#0001 #0004 Адрес таблицы имён функций
#0005  n*8  Таблица:
            #00 #04 Адрес
            #04 #01 Сколько слов добавить в стек
                при входе
            #05 #01 Сколько слов удалить из стека
                при выходе
            #06 #01 Кол-во слов входных данных
            #07 #01 Кол-во слов выходных данных
Таблица имён: "имя1",0,"имя2",0 и т.д.

Для *.exe 0-я функция всегда главный вход, 1-я - обработка сообщений, 2-я - INT. Как Вы уже, наверное, заметили, параметры во все функции будут передаваться через стек. Вызов функций системы - через RST:

  • RST #00 - Аварийное закрытие процесса
  • RST #08 - Обработка ошибок
  • RST #10 - Вызов системных функций
  • RST #18 - Вызов функций процесса
  • RST #20
  • RST #28
  • RST #30
  • RST #38 - INT

Вызов системных функций будет происходить так:

          PUSH Параметры
          RST #10
          DB Номер функции
          DB Номер уровня
          POP Результат

Вызов функций процесса будет происходить так:

          PUSH Параметры
          RST #18
          DB Номер функции
          POP Результат

Сначала, конечно, процессу, вызывающему другой процесс, следует настроиться с помощью одной из функций системы.

Система и другие процессу могут послать программе сообщение. Сначала сообщение попадает в буфер. Если оно срочное, то ставится вперёд предыдущих (т.е. обрабатывается вне очереди), иначе ставится в её конец. Сообщения имеют общий формат:

#0000 #0002 Код сообщения, биты:
            15 - срочное при 1
            14 - 0 - системное,
                 1 - пользовательское
#0002 #0001 Номер процесса, создавшего
            сообщение (0 - система)
#0003 #0001 Номер окна процесса или
            номер уровня, если система
#0004 #0002 Какой код сообщения
            возвратить при получении
            (0 - не нужно)
#0006 #0001 Номер канала с доп.
            данными (0 - нет)
#0007 #0001 Какому окну этого процесса
            послано сообщение
            (0 - без указания)

Вот примерный список некоторых системных сообщений:

КодИмяНазначение
#0001PaintПрорисовка графических объектов
#0002CloseТребование закрыть объект
#0003OnClickКлик на графическом объекте
#0004OnDbClickДвойной клик на графическом объекте

И так далее...

Наверх

Состав системы

Система делится на уровни. Базовый вариант системы будет состоять из трёх уровней: 0 - base, 1 - file-os, 2 - GUI. В base находятся самые необходимые функции: работа с памятью, драйверами, устройствами, управление процессами и т.п. В него же вставляются драйвера внешних устройств. File-os - работа с блочными устройствами на уровне файлов. в него встраиваются драйверы файловых систем: TR-DOS, IS-DOS, MS-DOS, CP/M, которые обеспечат прозрачную поддержку всего этого. Кроме того, мыслится прозрачная поддержка архивов, т.е. работа с *.rar, *.zip и т.п. как с обычными папками. Кстати, предположительный максимальный объём блочного устройства - 1 Тб, а объём одного файла - 4Мб. Длина имени и расширения не ограничена. GUI - оно и в Африке GUI: содержит функции рисования окошек, кнопочек, примитивов и всего прочего. Будет иметь два режима работы: ZX и RULEZ. ZX - обычная спековская графика, RULEZ - расширенная, вроде ATM-овской или SPRINTER-овской. Также будут иметься внеуровневые компоненты: диспетчер, в котором лежит обработчик всего этого, RST и INT, а также стек, и КЭШ блочных устройств, который даже по самым неприхотливым прикидкам может достигать 4 Мб, но ничто не мешает его увеличить...

Наверх

Обработка многозадачности

А где же многозадачность? - спросит внимательный читатель. Она описана здесь:

  • Запускаем *.exe. Вызывается его 0-я функция;
  • Система и/или другие процессы посылают задаче сообщения, которые складываются в очередь;
  • Как только система получила управление, она просматривает в порядке приоритета все процессы на предмет наличия сообщений. Если находит, то передаёт управление этому процессу;
  • Процесс берёт сообщение и исполняет его;
  • 50 раз в секунду, после выполнения всех 2-х функций всех задач, система переключает процессы: сохраняет все регистры в стеке, копирует его в буфер стека процесса и запускает другой процесс.

Наверх

Поддержка TR-DOS-программ

Основная проблема состоит в том, что эти программы обращаются к памяти через #7FFD. Т.е. на время работы TR-DOS-программ диспетчер отключается, и многозадачность недоступна. Выход из программы - только NMI. При NMI компьютер вываливается в ZX-OS, а TR-DOS-программа находится в висящем состоянии. Её можно закрыть, можно запустить с того места, где была остановлена, а можно поковыряться в ней чем-нибудь. Можно запустить ещё одну TR-DOS-программу - это уже псевдомногозадачность. Но тут возникает ещё одна проблема - каждой TR-DOS-программе нужны страницы 0..7. Их, конечно, можно копировать, но это большой расход времени и памяти. Лучше решить это аппаратно. Как? Смотрите схему диспетчера, которая будет здесь в ближайшем будущем.

Наверх

Неофициальный сайт поддержки ATM-turbo 1,2,2+ Speccy 4ever Dj Hooligan Power of Sound

SpecNet
Real Software ZpiXel ZX Chart Raww Arse Page
Если у Вас есть вопросы и рекомендации по оформлению сайта, то Вам сюда! Если Вы хотите выразить свои пожелания и советы операционной системе, а также принять участие в её написании, то Вам сюда! Если у Вас имеется софт под созданную мной систему, то Вам сюда!
Hosted by uCoz