# U.Z.I.X.
UZIX is a UNIX Implementation for MSX (initially) and for Orion-128/PRO (this repo)

Инструментарий.

    Для компиляции используется единственный по сею пору нормальный компилятор C для Z80 - HitеchC v3.09 образца 1987года: нативный CP/M компилятор, при желании всю сборку можно провести на самом Орионе. .


В дополнение к нему чтобы комфортно разрабатывать под РС использую:

    файловый эмулятор CP/M под винду cpm.exe - он умеет возвращать винде код завершения HitechC, что нужно для make.
    GNU make для автоматизации (пакетной) сборки проекта. Или аналог.
    ProgrammersNotepad, где в проекте UZIX.pnproj (фактически - структурированном списке файлов) описал используемые файлы. На кнопку F8 можно настроить сборку по make (Tools->Options->Tools->Scheme C/C++ -> Add). Но чаще после внесения всех правок в PN, я просто запускаю make под cmd.
    Для компиляции драйвера IDE/SD использую пакет макроассемблера M80/L80 от Микрософт, тоже 80-х годов прошлого столетия - поныне лучший макроассемблер для Z80/8080.


Комплект компилятора в сборе (без ProgrammersNotepad):
https://github.com/serge-404/HI-TECH-C-V3.09


На каталог куда вы распакуете файлы компилятора должны быть настроены переменные окружения PATH и CPMPATH

Концепция.
Ядро UZIX - это обычная CP/M-задача, которая будет "крутить" UNIX-процессы в расширенном ОЗУ. Архитектура будет такая:


             CP/M 64k bank      Subsequent 64k banks
    FFFF    +------------+       +------------+
    Common  |   Common   |       |   Common   |+
    F000    +------------+       +------------+|+
            |    CP/M    |       |            |+|+
    E800    +------------+       |  Process   ||+|
    Banked  |    UZIX    |       |    Code    |||+
            |   Kernel   |       |   & Data   ||||
            |    code    |       |            ||||
    0100    +------------+       +------------+|||
            |  Reserved  |       |  Reserved  |+||
    0000    +------------+       +------------+|+|
                                  +------------+|+
                                   +------------+|

В блоке общего ОЗУ COMMON размещаются части, которые должны быть общими у ядра и процессов (udata, стеки, некоторые переменные) и подпрограммы для межстраничного копирования, межстраничного JP/CALL/RET, вектор IM2 и начальный обработчик прерывания. Там же сидят порты (1к), и 2к ROM F800 в принципе ненужного для uzix, съедая 3к драгоценного ОЗУ, но так уж устроен Орион.

Ядро пока 29кб. Пишу для Орионовского клона CP/M АльтаирДОС с TPA до 58 кб, т.е. хватит места и TCP/IP впилить, и поддержку ФС FAT.

В страницах процессов сразу "из коробки" есть недоэмулятор CP/M: эмулируется CP/M консоль (ввод-вывод на экран/с клавиатуры) - BDOS функции 1..12, BIOS функции 2..4, остальные функции BDOS (дисковые в-основном) возвращают FF-нет файла. Т.е. будет работать любое корректное ПО CP/M не лезущее в диски, например ASCII-игры, программы типа "hello world" и т.п. В планах полный эмулятор CP/M, уже внешний - загружаемый.

В качестве дисков используется IDE/SD через CP/M-овский драйвер "сырого доступа" IDEBDOS, схема MBR-партиций (поддерживаются только 4 основные партиции на двух физических приводах - итого 8 (fd0..fd7) партиций, плюс fd8..fd9 - целые "сырые" диски (от LBA0=MBR до LBAmax)), номер партиции передается в утилиты (проверяемая/копируемая/где создается FS) и в ядро (root-партиция, остальные через mount) как параметр командной строки.

Из общего архива исходников собирается и ядро (idebdos.com, uzix.com) и утилиты (набор BD.COM, FSCK.COM, MKFS.COM, UCP.COM; или отдельно fdisk.com). Сборка проходит за 15 секунд. Собирается так:

    правим мakefile - изменяем так: "DEFINES = -DORI_UTIL", или так: "DEFINES = -DORI_UZIX", или так: "DEFINES = -DORI_FDISK", в зависимости от того утилиты, ядро или fdisk компилируются соответственно.
    запускаем cmd, переходим (cd) в каталог где лежат исходники
    cmd> make clean & REM удаляем объектники - их всегда(!) надо пересобирать
    cmd> make kernel & REM или "make utils" или "make fdisk.com" - смотря что в DEFINES


