Здесь буду вести бложек по портированию UZIX (реализация UNIX близкая к клаcсической V7) - всякие промежуточные итоги и мысли фиксировать.
Инструментарий.
- Для компиляции используется единственный по сею пору нормальный компилятор 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 и эмулятора CP/M использую пакет макроассемблера M80/L80 от Микрософт, тоже 80-х годов прошлого столетия - поныне лучший макроассемблер для Z80/8080.
Комплект компилятора в сборе (без ProgrammersNotepad):
Размер: 3.24 Мб
Ссылка для скачивания: 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 | | |+|+
+------------+ | Process ||+|
Banked | Kernel | | Code |||+
| Code | | & Data ||||
| | | ||||
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 партиций, на двух RAW (от LBA0=MBR до LBAmax)) дисках: fd8{партиции fd0,fd2,fd4,fd6} и fd9{партиции fd1,fd3,fd5,fd7}, номер партиции передается в утилиты (проверяемая/копируемая/где создается файловая система) и в ядро (root-партиция, остальные через mount) как параметр командной строки.
Исходники размещены на GitHub.
Из общего архива исходников собирается и ядро (idebdos.com, emu.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
ПРОЧЕЕ
Как компилировать приложения под UZIX описано тут
Oбраз диска тут:
http://zx-pk.ru/showpost.php?p=776311&postcount=38 - файл ohi-uzix.7z
Плюс более свежая версия:
https://drive.google.com/open?id=0B3...XgwZE9Ebnh6eHc
Пояснение по работе с WIN-утилитами смотрите тут:
http://zx-pk.ru/showthread.php?t=9589
Плагины TotatlCommander/DoubleCommander для работы с образами дисков:
https://zx-pk.ru/threads/24501-tekhr...=1#post1013490
Утилиты Линукс для работы с файловыми системами UZIX:
https://github.com/marioaugustorama/UXU
ЧАВО:
как засунуть файлы в образ карты (файловую систему Юзикса)
Как запускать программы от CP/M в UZIX
Ранее:
20.09.2108: Причесал концепцию и код встроенного эмулятора CP/M. Читать тут и тут
05.09.2018: Выложил на GIT утилиты под Винду для работы с образами дисков UZIX, как и имевшиеся у меня оригинальные исходники и образы дисков с MSX.
06.10.2016: Исходники ядра и утилит теперь на GitHub (полный пак с libc, app).
06.02.2015: Сделано все чтобы собиралась LIBC. Надо браться за приложения. Рабочие бинари от UZIX что работают без ошибок, пересобирать не планирую - интереснее наваять что-нибудь свое (или собрать недостающие бинари из исходников). Отчет о LIBC тут: http://zx-pk.ru/showpost.php?p=780032&postcount=61
23.01.2015: Сделано все что хотел и что было в ядре uzix 1.0, готовность ядра 99% Размер ядра - 30к.
19.01.2015: замедлитель ввода, полный пак файлов на одну большую партицию UZIX (более сотни команд + маны + ...)
17.01.2015: работосопособный многозадачный промежуточный ночной снапшот исходников, готовность ядра оцениваю в 90%
07.01.2015: получена работоспособная немногозадачная версия, готовность ядра оцениваю в 70%
24.11.2014: изначально несобиравшиеся исходники ядра доведены до компилируемости
хх.11.2014: подготовлена среда сборки (ProgrammersNotepad/HitechC/CpmEmu)