В праздники ковырял кворумский CP/M 2.2 и восстановил компилируемые исходники для двух его модификаций. Пока не выветрилось, решил оформить в тему.
Репозиторий тут http://github.com/atsidaev/quorum-cpm. Компиляция позволяет получить образ чистой дискеты требуемой версии. Требуются make, bash, dd и z80asm.
Введение
Основной ОС для компьютера "Кворум" была CP/M-80. Сложно сказать, почему так получилось, вероятно потому, что разработка началась ещё году в 1991-м, когда дискеты, как говорилось в ZX-Ревю, "стоили как два батона колбасы", а TR-DOS ещё не был массово распространен. В том же ZX-Ревю за 1991й год TR-DOS упоминается всего один, по-моему, раз. Зато под CP/M уже был вагон софта, да и сама ОС на две головы выше TR-DOS'а.
Некоторое описание компьютера и его ОС есть на хабре.
Аппаратные особенности
Чтобы запустить CP/M, нужно было сделать лишь одно - освободить как можно больше RAM в нижней памяти. Для этого сделаны две вещи:
- Экран может переключаться на #C000 (в 128 это штатно через 7ffd, в 48 через особый порт)
- ПЗУ может отключаться и вместо него включается теневое ОЗУ.
В итоге память 0000...B27F оказывается свободной для программ пользователя. Выше находятся BDOS, экран и BIOS.
Распределение памяти
DB00-FFFF |
BIOS (уровень привязки к конкретному железу) |
C000-DAFF |
Экран |
B280-BFFF |
BDOS (уровень системных вызовов) |
AA80-B27F |
CCP (командный процессор) |
0100 |
Начало TPA (пространство под запущенную программу) |
0000-00FF |
Системная область CP/M |
[свернуть]
Порты контроллера дисковода у Кворума нестандартные (#80, #81, #82, #83, #85). Зато прямой доступ к ним есть из любых адресов, а не как у бетадиска только из 3Dxx.
Формат дискеты
5 секторов на дорожку, сектора нумеруются с единицы. Размер сектора - 1024 байта. Итого 5 * 1024 * 80 дорожек * 2 стороны = 800 килобайт на диске.
Первые 20 килобайт (два цилиндра) заняты системными дорожками. В них находятся загрузчик, CCP, BDOS и BIOS. Дальше следует 4-килобайтная таблица размещения файлов (32 байта на файл, итого 128 файлов максимум). Остальное место занято содержимым файлов.
Загрузка
Загрузка ОС происходит по нажатию NMI в Кворуме-64. В Кворуме-128 по сбросу или выбором пункта из меню.
Подробнее
5 шагов загрузки: ROM -> загрузчик -> инициализатор -> BIOS -> CCP.
ROM
По нажатию NMI (0x0066):
- Первым делом включается теневое ОЗУ и проверяется, что расположено в нём по адресу 0x66. Если 0xC3 - опкод JP, то выполняется процедура NMI из теневого ОЗУ. Иначе производится "холодный старт" с загрузкой системы с диска:
- ROM грузит 1-ый сектор по адресу 0x8800
- Проверяет, что по 0x8820 лежит 0xC3.
- Переходит по адресу 0x8820, передав в регистре E с какого дисковода грузимся.
Как видите, этот обработчик легко использовать для загрузки любой другой ОС. Вообще, в ROM Кворума нет ни единой привязки именно к CP/M. Просто грузим первый сектор (любого, причем, размера) и передаем ему управление.
Загрузчик
- Грузим первые 0x14 секторов с адреса 0xA880. В них есть всё: и CCP, и BDOS, и загрузочная картинка, попадающая при загрузке в C000, и BIOS с двумя шрифтами (6x8 и 4x8) внутри.
- Переходим на адрес 0xA980 (пропустив 0x100 байт самого загрузчика).
Инициализация CP/M
- Проверяем объем доступной памяти. Если есть доп. страницы, настраиваем электронный диск.
- Настраивается вектор INT (по адресу 0x38 кладется переход на обработчик в BIOS).
- Выводим текстовое название диска.
- Запускаем процедуру холодного старта (BOOT) из BIOS.
BIOS (BOOT)
- Устанавливаем вектор BDOS (0x05), INT1 и INT2.
- Запускаем CCP.
[свернуть]
Версии CP/M
1.0 (?) 1992 год?
2.0 (1995 год?)
https://github.com/atsidaev/quorum-cpm/tree/v2.0
Увеличено количество зон пользователя (USER) до 32. У CCP изменено приглашение на “A:\0>”, где цифра - это номер зоны USER. Для того, чтобы упростить его вывод (ну и для удобства запоминания, наверное), зоны с номерами 10..32 заменены буквами A..V. Однако, в команду USER номер вводить нужно как и раньше, цифрами.
В BIOS много оптимизаций. Вертикальный скроллинг теперь быстрый. Звуковой сигнал заменен на тихий приятный “щелк”.
QDI-образ пустой дискеты
3.0 (???) - вероятно была, раз есть 3.1
3.1 (1997)
Живьем не видел, лишь в виде образа.
BDOS полностью перелопачен, однако на BDOS от CP/M 3.0 не похож. Возможно, что это BDOS от какого-нибудь клона CP/M.
BIOS изменен. CCP тот же, что и в 2.0.
FDI-образ на сайте atmturbo.nedopc.com.
CP/M софт и образы дискет
Моя коллекция
Немного на atmturbo.nedopc.com
Эмуляторы и PC-утилиты
Кворум эмулируется лишь в двух эмуляторах. Это Unreal Speccy (спец. версия на основе v0.20 и последние версии от deathsoft начиная с 0.37.4) и ZXMAK2. Более-менее рабочая эмуляция ВГ93 есть только с включенной опцией "No Delay" (в Unreal включена по-умолчанию).
Для работы с образами QDI (формат кворумских дисков, представляющий собой полный образ всех секторов - 800 кб):
- SteinBlume CP/M Disk Image Explorer - понимает QDI из коробки
- Total Commander + плагин от Error404 (нужны odi.wcx и odi.ini. В последний нужно дописать "QDI = 01010301050050002800040F008E017F00C00020000400").
Однако, он не умеет Уже умеет работать с областями USER выше 16-ой.