📂 Документ: orion128-soft-cpm80-acpm-009_clean.html


 

Advanced CP/M BIOS - дополнительные возможности, Орион-128, CP/M-80

АCPM - Чистякова SP-Computer club

Продаю платы и наборы микросхем, куплю микросхемы

Все версии CP/M-80

Все версии ORDOS

 Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем.  Читайте про пакет Атлас.

Организация файловой структуры CP/M и проблемы развития CP/M ОРИОНА, от Чистякова

 Дополнительные возможности Advanced CP/M BIOS SP-COMPUTER CLUB-а 1992 г.

Все системные функции а также команды CCP сответствуют CP/M версии 2.2. Естественно обеспечивается полная совместимость с CP/M по всем параметрам. Для улучшения потребительских свойств системы, использованы заложенные при создании BIOS "КОРВЕТА" (ПК8020) возможности для расширения

1. ДРАЙВЕР НА РЕЗИДЕНТНОЙ ДОРОЖКЕ.

Для размещения драйвера, используются специально зарезервированные в BIOS "КОРВЕТА" дополнительные дорожки в системной области дискеты, что обеспечивает полную совместимость с CP/M-дискетами "Корвета", CP/M-дискетами "Специалиста" (BIOS SPCC 1989 г), "Ориона-128" (BIOS SPCC 1990), ПК "Хоббит" (Intercompex). Естественно сохраняется возможность обмена и с дискетами "Роботрона" и "Sinclair-Profi" (у них нет блока параметров диска в 1 секторе 0 дорожки, поэтому чтобы использовать их дискеты надо скопировать на них наш 1-й сектор).

Расположение:
а) Идентификатор располагается на 2 дорожке 1 сектор. Длина 1 сектор
б) Сам драйвер располагается начиная со 2 дорожки 2 сектор
Формат идентификатора:
0AAH, 055H, 0AAH, LENG, NTRK, NSEC, LADR, HADR
Остальные байты идентификатора не имеют значения.
LENG - длина драйвера в секторах
NTRK, NSEC - номер трека и сектора, где размещается драйвер
LADR, HADR - младший и старший байты адреса загрузки и запуска драйвера

При выполнении холодного старта BIOS проверяет наличие идентификатора. Если идентификатор не обнаружен, то выполняется горячий старт и передача управления на CCP. Если идентификатор есть, то BIOS загружает в память с адреса HADR-LADR, начиная с трека NTRK, LENG секторов, начиная с NSEC сектора. После загрузки ему передается управление по адресу HADR-LADR командой CALL. После того, как драйвер отработает (загрузится) он должен вернуть управление командой RET. При этом он возвращает BIOS в регистрах HL адрес первых 12 байтов FCB с именем альтернативного командного процессора или 0, если в файле CONFIG.SYS нет команды SHELL. На резидентный драйвер возлагаются следующие функции:
1. Обработка файла CONFIG.SYS
2. Обработка AUTOEXEC-файла (если в CONFIG.SYS нет команды SHELL)
3. Загрузка драйверов CON: и LST:

2. АЛЬТЕРНАТИВНЫЙ КОМАНДНЫЙ ПРОЦЕССОР

В системе имется возможность заменить стандартный командный процессор CP/M на любую другую программу (напр: графическую оболочку), которая может выполнять его функции. Чтобы воспользоваться такой возможностью надо включить в файл CONFIG.SYS команду SHELL. При этом после обработки всего CONFIG.SYS по процедуре горячего старта BIOS будет передавать управление не на CCP, а на загруженный с адреса 100H альтернативный командный процессор. При этом ему передаются следующие параметры: в регистр C - номер диска, который должен быть текущим (0 - A, 1 - B ; это позволяет иметь бездисковую систему, с единственным диском E:), в регистр B - флаг первого запуска: B=0 - командный процессор загружается первый раз, после холодного старта, B=0FFH - командный процессор уже загружался после холодного старта. Следует учесть, что если в файле CONFIG.SYS указана команда SHELL, то резидентный драйвер не обрабатывает файл AUTOEXEC.SUB и не записывает файл $$$.SUB. Обработкой файла AUTOEXEC.SUB в .SUB этом случае должен заниматься альтернативный командный процессор. Для этого и передается информация в регистре B.

3. ФАЙЛ КОНФИГУРАЦИИ СИСТЕМЫ CONFIG.SYS

Файл конфигурации обрабатывается один раз по холодному старту.
С помощью файла конфигурации системе передается следующая информация:
а) о типах дисководов в системе
б) о параметрах резидентного электронного диска (для систем, где ОЗУ > 64К)
в) имя альтернативного, командного процессора
г) имена загружаемых драйверов (например: драйвера консоли и внешнего электронного  диска)
Эта информация передается в форме команд. Каждая команда располагается на отдельной строке. Если первым символом в строке стоит символ ";", то эта строка рассматривается как комментарий и не обрабатывается. Пустые строки также не обрабатываются. Общий вид командной строки:
КОМАНДА = ПАРАМЕТРЫ Между КОМАНДОЙ и символом "=" и ПАРАМЕТРАМИ может стоять произвольное число символов "пробел" и "TAB" или вообще ничего не стоять (Однако внутри КОМАНДЫ или ПАРАМЕТРА недопускается ни пробелов, ни табуляций). Параметры, если их несколько разделяются запятыми, пробелами или табуляциями.

3.1 Команды файла конфигурации

a) HSPED - установка времени позиционирования головки дисковода. Первый параметр сответствует диску A:, второй диску B:. Допустимы параметры: 6, 12, 20 и 30. Величина параметра сответствует времени позиционирования головки дисковода (это стандартные для ВГ93 времена). Благодаря наличию этой команды в Advansed CP/M используется один вариант BIOS для всех типов НГМД, в то время как ранее в CP/M для каждого типа НГМД применялась своя версия BIOS

б) TRACK - установка числа дорожек дисководов
Параметры: 80, 40 или 35 - задают количество дорожек на диске. Первый параметр соответствует диску A:, второй диску B:. Команды определения дисководов HSPED и TRACK рекомендуется задавать в последних двух строчках файла конфигурации.

в) SHELL - задание имени альтернативного командного процессора. Параметр - имя командного процессора (имя файла по правилам CP/M). Если отсутствует имя диска, то по умолчанию подразумевается диск A:. Если отсутствует расширение, то используется файл с расширением "COM".

г) DEVICE - загрузка загружаемого драйвера Параметры - имя файла-драйвера и параметры драйвера. Если в имени файла отсутствует указание диска, то по умолчанию - диск A:. Если нет расширения, то по умолчанию используется файл с указанным именем и расширением "SYS". При обработке файла конфигурации, когда анализатор файла конфигурации доходит до команды DEVICE, он ищет указанный файл-драйвер на диске. Если он его находит, то считываются его первые 128 байт. Эти 128 байт выступают в роли идентификатора драйвера. Для того, чтобы подтвердить, что данный файл является драйвером первые 3 байта из этих 128 байт должны быть: 0AAH, 055H, 06FH. Остальные байты зарезервированы и должны содержать 00H. Если проверка показывает, что загружаемый файл действительно драйвер, то он загружается в ОЗУ с адреса 100H и запускается командой CALL 100H. В регистре HL драйверу передается адрес остатка строки файла CONFIG.SYS, идущей сразу после имени файла-драйвера в строке с командой DEVICE (передача параметров). Строка заканчивается кодом ОDH или кодом 1AH. Таким образом программа драйвера сама должна анализировать передаваемые ей параметры. После того как драйвер себя инсталирует он должен вернуть управление командой RET. Рекомендуется размещать команды DEVICE в начале файла CONFIG.SYS. При своей работе программа подключения драйвера может узнать верхнюю границу доступной ей памяти, если зафиксирует указатель стека. Стек при работе драйвера на резервных дорожках размещен в начале его области кода и поэтому является верхней границей памяти для подгружаемых программ.

д) VDISK - инсталяция в систему драйвера внутреннего электронного  диска (не путать с с внешним электронного  диском 512К, драйвер которого был включен в BIOS 1990 г)
Внутренний электронного  диск использует ОЗУ в дополнительных банках памяти "Ориона-128/Z" (страницы 0,2,3 а сама CP/M работает в 1 странице ОЗУ). Команда имеет один параметр это размер памяти, отводимый для электронного  диска в килобайтах. Допустимы только следующие стандартные значения:

32 - 32 К электронного  диск (располагается в 0-странице, 0-7FFFH)
60 - 60 К диск (требуется 3 банки ОЗУ, диск во 2-й странице [0 - основная])
92 - 92 K диск (используется 0-я 0-7FFH и 2-я страница 0-EFFFH)
120 - 120 К диск (требуется 256 К "Орион", используется 2-я и 3-я страницы ОЗУ)
152 - 152 К диск (0-я 0-7FFFH, 2-я и 3-я страницы)

Если команда VDISK не указана или параметр не равен вышеприведеным значениям то электронного  диск не создается. Созданное псевдодисковое устройство получает имя E:. При первой загрузке, сразу после включения питания электронного  диск содержит мусор т.е не форматирован. Поэтому для обеспечения нормальной работы с электронного  диском надо выполнить команду CCP - ERA E:*.* (или аналогичную, если используется альтернативный командный процесор), однако лучше запустить программу CLE.COM.

4. ФАЙЛ AUTOEXEC.SUB

Для повышения удобства работы вводится возможность автоматического запуска стартового косвенного командного файла при загрузке системы. Командный файл (аналогично AUTOEXEC.BAT на IBM PC или HELLO на APPLE-II) это простой текстовый файл, содержащий список имен программ, которые необходимо выполнить перед выходом в командный процессор. При этом используется то, что по горячему старту в CP/M осуществляется запуск файла со стандартизованным именем $$$.SUB.
Файл AUTOEXEC.SUB представляет собой в сущности обычный SUB-файл косвенного управления. На него распространяются те-же требования, что и на обычные SUB-файлы. Разница заключается в том, что нельзя применять команды подстановки параметров (префикс $). Файл AUTOEXEC.SUB обрабатывается один раз при холодном запуске, после обработки файла CONFIG.SYS (если там нет команды SHELL). Если же AUTOEXEC-файла нет на диске A:, то и никаких действий по прокрутке файла автозапуска не производится. Необходимо помнить, что при обработке AUTOEXEC на диск A: записывается временный файл $$$.SUB. Поэтому нельзя заклеивать защиту от записи дискеты и на диске должно оставаться не менее 2 К (и место для одной записи в директории дискеты). Если нежелательно делать запись при загрузке, то можно заставить запускаться файл при старте и с помощью функции DEVICE в файле CONFIG.SYS, однако при этом, если файл после исполнения возвращается в CP/M командой JMP 0, то прекращается дальнейшая обработка файла CONFIG.SYS, что не позволяет выполнить пакетную загрузку на исполнение последующих файлов (если файл возвр-ся в CP/M по RET, то обр-ка CONFIG.SYS не прервется). AUTOEXEC.SUB удобнее, т.к не требует переделки файлов в драйвера. Кроме того с помощью AUTOEXEC можно вводить команды (напр: USER 1,ERA *.BAK).

5. СОГЛАШЕНИЯ ПО ИСПОЛЬЗОВАНИЮ ОЗУ И ИНТЕРФЕЙСУ С ДРАЙВЕРАМИ

5.1 Использование ОЗУ "ОРИОН-128"
При использовании Advanced CP/M на "Орион-128" устанавливаются следующие соглашения по распределению памяти:
а) Вся 1-страница ОЗУ выделяется только для самой системы т.е здесь размещаются BIOS, BDOS, CCP и TPA (TRANSIENT PROGRAMM AREA = область транзитных программ пользователя, 49 К)
б) 0-я страница по адресам 8000H-BFFFH резервируется для драйверов (консоли, принтера и внешних устройств). Если это установлено в CONFIG.SYS и под электронный диск, причем если драйвер электронного  диска использует 0-ю страницу то ему выделяется только ОЗУ 0-7FFFH. Если ОЗУ 0-7FFFH не занято под электронного  диск его также могут использовать драйвера. Для исключения конфликтов по использованию ОЗУ драйверами в специальной карте размещения драйверов помечается занятость ОЗУ. Все адресное пространство условно делится на участки по 256 байт, называемые сегментами или "страничками". 0-й сегмент соответствует адресам 0-0FFH и т.д.
в) 2-Я и 3-я страницы ОЗУ (если они есть в компьютере) используются только для "внутреннего" электронного диска. Область ОЗУ с адресами 0F000H-0F3FFH имет особый статус. Во-первых здесь размещены векторы драйверов ROM-BIOS "Ориона". Во-вторых CP/M-BIOS при обращении к драйверам консоли и принтера устанавливает указатель стека на 0F3C0H.

ВНИМАНИЕ! При вызове драйверов CP/M-BIOS не переключает страницы ОЗУ. Если это необходимо это должен сделать драйвер. В-третьих в этой области расположены точки входа для драйверов консоли и принтера и дополнительные переменные, адреса которых в рамках ОС являются стандартными. Цветные CP/M-программы рассчитанные на работу в Advanced CP/M на "ОРИОНЕ" без диспетчера ОЗУ (стандарт РАДИО 1.1990) могут включить цветной экран N1 (8000-B1FF). Т.к эта область драйверов, то при этом если драйвера загружены, и необходим возврат в CP/M по горячему старту, то естественно их надо сохранить (например на E:-диске или в области "стандартного" экрана - C000-F1FF). Такая цветная программа или должна иметь свои драйвера (напр: вывод красивым IBM-шрифтом и свой драйвер клавиатуры и "мыши") и соответственно их инсталлировать (см.далее) или вообще не использовать системные функции CP/M. При использовании цветного экрана 2 или 3 необходимо убедиться в "отсутствии" использования 0-й страницы под электронного  диск. Ясно, что цветные CP/M программы не могут использовать экран N0 (C000-F1FF), ибо тогда экран "затирает" CP/M в ОЗУ (CCP начинается с C400H в 1-й странице). Если цветная программа "портит" драйвера и "жалко" ОЗУ для их временного сохранения, то можно при выходе из программы перезагружать их заново, используя CONFIG.SYS. При наличии диспетчера ОЗУ (Z80-CARD) цветные проблемы решаются существенно проще.

5.2 Драйвера CP/M-BIOS Для работы BIOS требуется небольшое число "внешних" драйверов. Ниже приведены мнемоники-названия этих драйверов и соглашения по передаче параметров:
CONIN - ввод символа с клавиатуры без эха с ожиданием. Выход: А -введенный код CONST - опрос состояния клавиатуры. Вход: - Выход: А=0 - в буфере клавиатуры нет символа для ввода. А=0FFH - в буфере клавиатуры есть веденный символ. Программы CONIN и CONST должны работать в стиле аппаратной клавиатуры. CONOUT - вывод символа на экран дисплея. Вход: С - код выводимого символа LSTST - опрос состояния принтера. Вход: - Выход: А=0 принтер не готов к печати очередного символа. А=0FFH - принтер готов LSTOUT - вывод на принтер Вход: С - код символа. Управление не возвращается пока символ не выведен.
READER - ввод символа с внешнего устройства. Программа PIP при вводе с устройства RDR: получает байты с помощью именно этой п/программы. Вход: - Выход: А - введенный байт. Управление не возвращается, пока символ не введен
PUNCH - вывод символа на внешнее устройство. Программа PIP при выводе на устройство PUN: передает байты с помощью имено этой п/программы. Вход: C - выводимый байт. Выход: - . Не возвращается управление пока символ не выведен.
NB: С использованием 2-х последних п/п-м возможно наиболее простым способом включить в систему нестандартные внешние устройства пользователя (сейчас там драйвера перфоратора/перфосчитывателя).
ATSTR - записать байт в другую страницу памяти (страница - 60 Кбайт). Вход: A - номер страницы, C - байт, HL - адрес Выход: - FRSTR - считать байт из другой страницы памяти. Вход: A - номер страницы, HL - адрес Выход: C - байт Все подпрограммы должны сохранять все регистры процессора (КР580), кроме PSW и тех, в которых возвращается информация.

5.3 Карта размещения драйверов

Для каждого из перечисленных драйверов в карте размещения выделяется два байта. Байт с меньшим адресом содержит номер странички (см.выше) начиная с которой в ОЗУ (в области драйверов) размещен драйвер, а байт с меньшим номером содержит номер странички ОЗУ по которую размещен драйвер (включительно). Если номер странички равен 0FFH - это значит, что поставлена "заглушка" или используется драйвер из ROM-BIOS (ПЗУ F800).
0F300H PLCIN: DW 0FFFFH ; размещение драйвера CONIN
0F302H PLCOUT: DW 0FFFFH ; --- " --- CONOUT
0F304H PLCST: DW 0FFFFH ; --- " --- CONST
0F306H PLLST: DW 0FFFFH ; --- " --- LSTST
0F308H PLOUT: DW 0FFFFH ; --- " --- LSTOUT
0F30AH PLRDR: DW 0FFFFH ; --- " --- READER
0F30CH PLPUN: DW 0FFFFH ; --- " --- PUNCH
0F30EH PLAST: DW 0FFFFH ; --- " --- ATSTR
0F310H PLFST: DW 0FFFFH ; --- " --- FRSTR
0F312H NSCR: DB 0H ; текущий номер экрана "ОРИОНА" (0-3)
0F313H CMODE: DB 0H ; режим экрана "ОРИОНА" (монохром, 16 цветный и т.д)
0F314H PLCLK: DW 0FFFFH ; размещение драйвера вывода времени (аппаратные часы)
0F316H RZRV: DS 10 ; резерв для расширения

    

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу