Важная информация

User Tag List

Показано с 1 по 4 из 4

Тема: CP/M-80 на Кворуме

  1. #1
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию CP/M-80 на Кворуме



    В праздники ковырял кворумский 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 в нижней памяти. Для этого сделаны две вещи:
    1. Экран может переключаться на #C000 (в 128 это штатно через 7ffd, в 48 через особый порт)
    2. ПЗУ может отключаться и вместо него включается теневое ОЗУ.

    В итоге память 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 для сравнения). Все отличия связаны с оптимизацией под Z80: JR вместо JP, DJNZ, LD (NN), DE. Возможно, эти изменения были в CP/M для Robotron-1715, откуда, судя по всему, на “Кворум” и был портирован CP/M.
    Процедура вертикального скроллинга в BIOS очень медленная. Звуковой сигнал клавиатуры высокий, звонкий и бесячий.
    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-образ пустой дискеты

    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 кб):
    1. SteinBlume CP/M Disk Image Explorer - понимает QDI из коробки
    2. Total Commander + плагин от Error404 (нужны odi.wcx и odi.ini. В последний нужно дописать "QDI = 01010301050050002800040F008E017F00C00020000400"). Однако, он не умеет Уже умеет работать с областями USER выше 16-ой.
    Последний раз редактировалось Eltaron; 24.01.2021 в 21:43.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  2. Эти 3 пользователя(ей) поблагодарили Eltaron за это полезное сообщение:

    bee.snz (12.09.2023), Djoni (28.09.2021), Shofer (09.01.2021)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Veteran
    Регистрация
    06.02.2009
    Адрес
    Кемерово
    Сообщений
    1,325
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    161
    Поблагодарили
    128 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Однако, ни одна программа не умеет работать с областями USER выше 16-ой.
    А попробуйте эти две, они хоть и для Корвета, но работать будут (в образе SYS20.QDI есть файлы 18 и 20 юзеров).
    http://zx-pk.ru/threads/23421-novaya...tml?highlight=
    http://zx-pk.ru/threads/17915-moya-k...l=1#post914723
    Последний раз редактировалось marinovsoft; 22.01.2018 в 21:03.
    ПК8010 "Корвет"+ExtRom+AY, Atari 65XE+SDrive, Дельта-С(52ИС)+AY, Scorpion ZS 1024+SMUC

  5. #3
    Сибирский антропоморфн Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,531
    Спасибо Благодарностей отдано 
    913
    Спасибо Благодарностей получено 
    846
    Поблагодарили
    628 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Однако, ни одна программа не умеет работать с областями USER выше 16-ой.
    Ну если в образе больше 16 юзеров, то должно работать...
    Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.

    Seamos realistas y hagamos lo imposible!

    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

    Скрытый текст

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  6. #4
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    marinovsoft, Black Cat / Era CG да, точно, на чтение всё работает.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Выгорела память в Кворуме 128
    от NehakeR в разделе Кворум
    Ответов: 2
    Последнее: 20.12.2007, 21:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •