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