Eltaron
22.01.2018, 20:29
https://raw.githubusercontent.com/wiki/atsidaev/quorum-cpm/img/Quorum-128-with-FDD_256px.jpg (https://raw.githubusercontent.com/wiki/atsidaev/quorum-cpm/img/Quorum-128-with-FDD.jpg)
В праздники ковырял кворумский 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'а.
Некоторое описание компьютера и его ОС есть на хабре (https://geektimes.ru/post/122762/).
Аппаратные особенности
Чтобы запустить 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 год?
https://github.com/atsidaev/quorum-cpm/tree/v1.0
BDOS и CCP практически не отличаются от стандартных для CP/M 2.2 (я брал с http://www.cpm.z80.de для сравнения). Все отличия (https://github.com/atsidaev/quorum-cpm/commit/1be2dd4b0757620943de2aaa604878890292b494) связаны с оптимизацией под Z80: JR вместо JP, DJNZ, LD (NN), DE. Возможно, эти изменения были в CP/M для Robotron-1715, откуда, судя по всему, на “Кворум” и был портирован CP/M.
Процедура вертикального скроллинга в BIOS очень медленная. Звуковой сигнал клавиатуры высокий, звонкий и бесячий.
QDI-образ пустой дискеты (https://github.com/atsidaev/quorum-cpm/releases/download/v1.0/disk.qdi)
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-образ пустой дискеты (https://github.com/atsidaev/quorum-cpm/releases/download/v2.0/disk.qdi)
3.0 (???) - вероятно была, раз есть 3.1
3.1 (1997)
Живьем не видел, лишь в виде образа.
BDOS полностью перелопачен, однако на BDOS от CP/M 3.0 не похож. Возможно, что это BDOS от какого-нибудь клона CP/M.
BIOS изменен. CCP тот же, что и в 2.0.
FDI-образ (http://atmturbo.nedopc.com/others/kvorum/kv_cpm/kv_cpm.zip) на сайте atmturbo.nedopc.com.
CP/M софт и образы дискет
Моя коллекция (http://zx-pk.ru/threads/17626-kollektsiya-cp-m-80-disket-dlya-kvoruma.html)
Немного на atmturbo.nedopc.com (http://atmturbo.nedopc.com/others/kvorum/kv_soft.htm)
Эмуляторы и PC-утилиты
Кворум эмулируется лишь в двух эмуляторах. Это Unreal Speccy (спец. версия на основе v0.20 (http://atmturbo.nedopc.com/atmemul.htm) и последние версии от deathsoft (http://dlcorp.nedopc.com/viewforum.php?f=27) начиная с 0.37.4) и ZXMAK2 (zxmak2.codeplex.com). Более-менее рабочая эмуляция ВГ93 есть только с включенной опцией "No Delay" (в Unreal включена по-умолчанию).
Для работы с образами QDI (формат кворумских дисков, представляющий собой полный образ всех секторов - 800 кб):
SteinBlume CP/M Disk Image Explorer (http://zx-pk.ru/threads/26454-steinblume-cp-m-disk-image-explorer-(ex-atm-cp-m-explorer).html) - понимает QDI из коробки
Total Commander + плагин от Error404 (https://github.com/serge-404/OriZEmu/tree/master/UTILS/OdiWcx-OhiWcx) (нужны odi.wcx и odi.ini. В последний нужно дописать "QDI = 01010301050050002800040F008E017F00C00020000400"). Однако, он не умеет Уже умеет работать с областями USER выше 16-ой.
В праздники ковырял кворумский 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'а.
Некоторое описание компьютера и его ОС есть на хабре (https://geektimes.ru/post/122762/).
Аппаратные особенности
Чтобы запустить 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 год?
https://github.com/atsidaev/quorum-cpm/tree/v1.0
BDOS и CCP практически не отличаются от стандартных для CP/M 2.2 (я брал с http://www.cpm.z80.de для сравнения). Все отличия (https://github.com/atsidaev/quorum-cpm/commit/1be2dd4b0757620943de2aaa604878890292b494) связаны с оптимизацией под Z80: JR вместо JP, DJNZ, LD (NN), DE. Возможно, эти изменения были в CP/M для Robotron-1715, откуда, судя по всему, на “Кворум” и был портирован CP/M.
Процедура вертикального скроллинга в BIOS очень медленная. Звуковой сигнал клавиатуры высокий, звонкий и бесячий.
QDI-образ пустой дискеты (https://github.com/atsidaev/quorum-cpm/releases/download/v1.0/disk.qdi)
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-образ пустой дискеты (https://github.com/atsidaev/quorum-cpm/releases/download/v2.0/disk.qdi)
3.0 (???) - вероятно была, раз есть 3.1
3.1 (1997)
Живьем не видел, лишь в виде образа.
BDOS полностью перелопачен, однако на BDOS от CP/M 3.0 не похож. Возможно, что это BDOS от какого-нибудь клона CP/M.
BIOS изменен. CCP тот же, что и в 2.0.
FDI-образ (http://atmturbo.nedopc.com/others/kvorum/kv_cpm/kv_cpm.zip) на сайте atmturbo.nedopc.com.
CP/M софт и образы дискет
Моя коллекция (http://zx-pk.ru/threads/17626-kollektsiya-cp-m-80-disket-dlya-kvoruma.html)
Немного на atmturbo.nedopc.com (http://atmturbo.nedopc.com/others/kvorum/kv_soft.htm)
Эмуляторы и PC-утилиты
Кворум эмулируется лишь в двух эмуляторах. Это Unreal Speccy (спец. версия на основе v0.20 (http://atmturbo.nedopc.com/atmemul.htm) и последние версии от deathsoft (http://dlcorp.nedopc.com/viewforum.php?f=27) начиная с 0.37.4) и ZXMAK2 (zxmak2.codeplex.com). Более-менее рабочая эмуляция ВГ93 есть только с включенной опцией "No Delay" (в Unreal включена по-умолчанию).
Для работы с образами QDI (формат кворумских дисков, представляющий собой полный образ всех секторов - 800 кб):
SteinBlume CP/M Disk Image Explorer (http://zx-pk.ru/threads/26454-steinblume-cp-m-disk-image-explorer-(ex-atm-cp-m-explorer).html) - понимает QDI из коробки
Total Commander + плагин от Error404 (https://github.com/serge-404/OriZEmu/tree/master/UTILS/OdiWcx-OhiWcx) (нужны odi.wcx и odi.ini. В последний нужно дописать "QDI = 01010301050050002800040F008E017F00C00020000400"). Однако, он не умеет Уже умеет работать с областями USER выше 16-ой.