Корвет/BIOS
< Корвет
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. |
ОПИСАНИЕ БАЗОВОЙ СИСТЕМЫ ВВОДА-ВЫВОДА BIOS vers. 2.0 С О Д Е Р Ж А Н И Е 1. Организация CP/M-80 v. 2.2. Назначение и расположение системных модулей ............. 1.1. CCP - процессор команд консоли ...................... 1.2. BDOS - базовая дисковая операционная система ......... 1.3. BIOS - базовая система ввода-вывода .................. 1.4. TPA - область транзитных программ ................... 1.5. Базовая страница памяти CP/M-80 ...................... 2. Структура BIOS vers. 2.0 ................................ 2.1. Карта памяти ......................................... 2.2. Таблица переходов функций ............................ 2.3. Точки входа и назначение функций ..................... 2.4. Область системных ячеек .. ........................... 3. Функции BIOS vers. 2.0 ................................. 3.1. Функция 0: BOOT ..................................... 3.2. Функция 1: WBOOT .................................... 3.3. Функция 2: CONST ................................... 3.4. Функция 3: CONIN ................................... 3.5. Функция 4: CONOUT .................................. 3.6. Функция 5: LIST .................................... 3.7. Функция 6: AUXOUT .................................. 3.8. Функция 7: AUXIN ................................... 3.9. Функция 8: HOME .................................... 3.10. Функция 9: SELDSK .................................. 3.11. Функция 10: SETTRK .................................. 3.12. Функция 11: SETSEC .................................. 3.13. Функция 12: SETDMA .................................. 3.14. Функция 13: READ .................................... 3.15. Функция 14: WRITE ................................... 3.16. Функция 15: LISTST .................................. 3.17. Функция 16: SECTRAN ................................. 4. Дополнительные компоненты BIOS vers. 2.0 ............... 4.1. Организация прерываний .............................. 4.1.1. Таблица векторов прерываний ....................... 4.1.2. Предварительная обработка прерываний .............. 4.1.3. Порядок подключения к прерываниям ................. 4.1.4. Ограничения на процедуру обработки прерываний ..... 4.1.5. Порядок отключения от прерывания .................. 4.2. Атрибуты драйверов системных и периферийных устройств .................. 4.2.1. Ячейки параметров и режимов драйверов ............. 4.2.2. Атрибуты драйверов просмотровой таблицы ........... 5. Описание драйверов устройств ........................... 5.1. Драйвер дисплея ..................................... 5.2. Драйвер клавиатуры ................................. 5.2.1. Опрос клавиатуры ................................. 5.2.2. Преобразование скан-кода в код КОИ-8 ............. 5.3. Драйвер печатающего устройства ..................... 5.4. Драйвер последовательного интерфейса ............... 5.5. Драйверы работы с дисками .......................... Сведения об устройстве диска ....................... Функции HOME, SETTRK, SETSEC и SETDMA .............. Функция SECTRAN .................................... Функция SELDSK ..................................... Рекомендации по формату диска и применению дисководов .............................. Электронный имитатор диска ......................... Функция READ ....................................... Функция WRITE ...................................... Приложение 1. Таблица скан-кодов клавиатуры. Приложение 2. Перечень байт-модификаторов клавиатуры. Организация CP/M-80 v. 2.2 . Назначение и расположение системных модулей . Операционная система CP/M-80 версии 2.2 состоит из трех системных модулей: CCP ( Consol Command Processor - процессор команд консоли), BDOS ( Basic Disk Operating System - базовая дисковая операционная система) и BIOS (Basic Input Output System - базовую систему ввода-вывода). BDOS и CCP - аппаратно-независимые компоненты ОС. При постановке ОС на конкретную ЭВМ изменяется только одна компонента ОС - BIOS. Положение компонент CP/M-80 в адресном пространстве компьюте- ров показано на рис.1 . В скобках указаны действительные адре- са границ компонент CP/M-80 для данной реализации ОС. �E |------------------| 0FFFFH | | | BIOS | | | |------------------| XXXXH+1600H (0DA00H) | BDOS | |------------------| XXXXH+0806H (0CC06H) | CCP | |------------------| XXXXH (0C400H) | | | | | T P A | | | | | |------------------| 0100H | Базовая страница | |------------------| 0000H 1.1. C C P - процессор команд консоли.�F CCP обеспечивает интерфейс между пользователем и ОС в режи- ме диалога с ОС. Он осущестляет чтение и интерпретацию команд пользователя. CCP при работе использует функции BDOS. При "теплом" старте CCP перезагружается, поэтому программы пользователя могут использовать область памяти , занимаемую CCP. Нижняя граница CCP определяется конкретной реализацией ОС. В данном случае CCP начинается с адреса 0C400H. Этот адрес можно косвенно определить из адреса начала BDOS (см. п.1.2), поскольку известен размер этого модуля для каждой вер- сии CP/M. В CP/M-80 v. 2.2 CCP занимает 806H байт. 1.2.�E BDOS - базовая дисковая операционная система�F BDOS содержит ряд функций ОС , используемых прикладными программами и CCP. В частности, BDOS обеспечивает работу с файлами , устройствами ввода-вывода и ряд других функций. Фактически BDOS стандартизует интерфейс между логическими устройствами и прикладной программой. BDOS при работе использует функции BIOS. Нижняя граница BDOS располагается сразу за CCP. При "теплом" старте область BDOS перезагружается, поэтому програм- ма пользователя, если не используются функции BDOS, может использовать область памяти, занимаемую BDOS. Можно определить адрес начала BDOS, поскольку известно, что по адресу 5 находится команда перехода к BDOS ( в ячейках 6 и 7 находится адрес начала BDOS ). Отметим, что большинство программ не разрушают BDOS и по ячейкам 6 и 7 определяют верхнюю границу памяти, используемую для транзитных программ. 1.3.�E BIOS - базовая система ввода-вывода�F BIOS является аппаратно-зависимой компонентой ОС и обеспечивает интерфейс BDOS с устройствами ввода-вывода (дис- плеем, принтером, дисками, и т.д.). BIOS включает в себя ряд драйверов физических устройств с оговоренным программ- ным интерфейсом, таблицу переходов к функциям BIOS, таблицы, описывающие характеристики дисковых устройств и некоторую зарезервированную область памяти, которую использует BDOS при выполнении своих функций. BIOS, в отличии от CCP и BDOS, при "теплом" старте не перезагружается, в памяти находится резидентно, поэтому перекрытие программ пользователя с областью BIOS не допустимо. Нижнюю границу BIOS можно определить из содержимого ячеек 1 и 2, поскольку по адресу ноль находится команда перехода "теплого" старта ( функция 1, а BIOS начинается с команды перехода функции 0 ). Далее будут подробно описаны все стандартные компоненты BIOS и некоторые дополнительные, связанные с данной реализацией ОС. Программистам, использующим в своих программах аппаратные особенности компьютера (прерывания, графику и т.д.), необходимо ознакомится с особенностями построения BIOS. Раздел 2 описывает общее построение BIOS, интерфейс с ОС. Раздел 3 содержит описание функций. Дополнительные компоненты BIOS описаны в разделе 4. Подробное описание драйверов BIOS'а приведено в разделе 5. 1.4.�E TPA - область транзитных программ�F TPA ( Transient Programm Area ) в операционнoй системе CP/M-80 начинается с адреса 100H. Конец ее определяется нижней границей BIOS. В эту область ОС загружает прикладные программы и транзитные (загружаемые) команды ОС ( PIP, STAT и др.). 1.5. �E Базовая страница памяти CP/M-80�F Базовая страница содержит некоторую служебную информацию, команды переходов функций "теплого" старта и BDOS, буфер обмена данными с дисковыми накопителями, устанавливаемый по умолчанию и область памяти для двух блоков управления файлами. Подробнее формат базовой страницы дается в описании BDOS. �E2. СТРУКТУРА BIOS�F 2.1.�E Карта памяти�F Как уже упоминалось, BIOS осуществляет интерфейс между аппаратно-независимой частью ОС и физическими устройствами ввода-вывода. BIOS является единственной резидентной частью ОС. Для правильной работы ОС BIOS должен удовлетворять определенным требованиям, оговоренным далее. На рис.2 приведена карта памяти BIOS для данной реализации ОС. �E |-------------------------------| 0FFFFH |Память А/Ц дисплея | |-------------------------------| 0FC00H |Ввод/вывод | |-------------------------------| 0FB00H |Область служебных регистров | |-------------------------------| 0FA00H |Дополнительное поле клавиатуры | |-------------------------------| 0F900H |Основное поле клавиатуры | |-------------------------------| 0F800H |Область памяти,зарезервирован- | |ная для параметров и констант | |драйверов BIOS'а | |-------------------------------| 0F600H |Область кода, таблиц и буферов| |BIOS | |-------------------------------| 0DA33H |Команды переходов функций | |-------------------------------| 0DA00H РИС.2.�F 2.2.�E Таблица переходов функций�F Связь между BIOS и ОС осущестляется через таблицу переходов функций BIOS. Таблица переходов располагается в начале модуля BIOS, сразу же за модулем BDOS. Параметры функций передаются через регистровую пару <BC>. Собственное значение функция возвращает (если требуется) через регистр <A> либо регистровую пару <HL>. Помимо таблицы переходов, интерфейс BIOS включает в себя ряд таблиц, описывающих параметры дисковой системы и области зарезервированной памяти. 2.3.�E Точки входа и назначение функций�F Таблица переходов функций BIOS состоит из набора команд типа JMP, т.е. на одну функцию в таблице отводится 3 байта (код команды JMP и адрес перехода). Положение перехода в таблице определяет номер соответствующей функции. В таблице 1 приведены краткие описания назначения функций BIOS и соответ- ствующие им точки входа. Следует отметить, что приводимые точки входов функций действительны только в данной реализации ОС. Обычно их вычисля- ют, принимая за точку отсчета вектор, расположенный по адресу 1 (адрес перехода функции "теплого старта"). Более подробно функции BIOS описаны в разделе 3. �EФункции BIOS.�F --------------------------------------------------! Таблица 1 | Номер | | !-------------| | функции| адрес | Ф У Н К Ц И Я | |--------|-------|----------------------------------------------! | | | | | | 0 | DA00 | BOOT | Начальная инициализация (холодный | | | | | | | | | | старт) | | | | | | | 1 | DA03 | WBOOT | Возвращает некоторые устройства в | | | | | | | | | | исходное состояние, перезагружает | | | | | | | | | | систему (теплый старт) | | | | | | | 2 | DA06 | CONST | Опрос состояния консоли | | | | | | | | | | | | | | | | | 5 | DA0F | LIST | Вывод символа на печать | | | | | | | 6 | DA12 | AUXOUT | Вывод символа на дополнительное | | | | | | | | | | устройство | | | | | | | 7 | DA15 | AUXIN | Ввод символа с дополнительного | | | | | | | | | | устройства | | | | | | | 8 | DA18 | HOME | Установка номера трека 0 | | | | | | | 9 | DA1B | SELDSK | Выбор дискового устройства | | | | | | | 10 | DA1E | SETTRK | Установка номера трека | | | | | | | 11 | DA21 | SETSEC | Установка номера сектора | | | | | | | 12 | DA24 | SETDMA | Установка адреса буфера обмена | | | | | | | | | | данных при дисковых операциях | | | | | | | 13 | DA27 | READ | Чтение выбранного сектора | | | | | | | 14 | DA2A | WRITE | Запись выбранного сектора | | | | | | | 15 | DA2D | LISTST | Опрос состояния устройства печати | | | | | | | 16 | DA30 | SECTRAN | Преобразование номера сектора | |--------|-------|----------|-----------------------------------| 2.4. �EОбласть системных ячеек�F Особенностью данной реализации BIOS является наличие сис- темных ячеек ( системной области ), содержащих параметры и константы функций BIOS, таблицу векторов обработки прерываний и др. Положение этих ячеек в памяти фиксировано, что дает возможность менять параметры функций BIOS из программы пользователя, подключать процедуры пользователя к прерываниям, и т.д. Под системные ячейки зарезервирована область 0F600H - 0F7FFH. Использовать эту область памяти под какие-либо нужды не рекомендуется. Подробное описание системных ячеек дается в описаниях функций, использующих эту область, и в секции 4, где описаны дополнительные компоненты BIOS. �E 3. ФУНКЦИИ BIOS�F Каждая функция BIOS имеет фиксированную точку входа, основное тело, и завершается , как правило , командой RET . Параметры функциям передаются через через регистровую пару <BC>. Собственное 1-байтовое значение функции возвращают в регистре <A>, 2-х байтовое - в регистровой паре <HL>. Каких-либо соглашений о сохранении содержимого регистров функциями BIOS нет. Далее приводятся сведения о входных и выходных параметрах и действии каждой функции. 3.1. ФУНКЦИЯ 0: �EBOOT.�F Входные параметры: НЕТ. Выходные параметры: НЕТ. Действие: осущестляет : инициализацию всех устройств; инициализацию системной области; инициализацию внутренних переменных; выводит на консоль начальное сообщение; устанавливает "user 0" и диск по умочанию "A:". Эта функция вызывается обычно только один раз, при холодном старте системы. Управление после этой функции передается функции 1 (WBOOT). 3.2. ФУНКЦИЯ 1: �EWBOOT.�F Входные параметры: НЕТ. Выходные параметры: НЕТ. Действие: реинициализация : - контроллера прерываний; - последовательного интерфейса; - таймера; - графического контроллера; - алфавитно-цифрового контроллера; - просмотровой таблицы; - части системной области, связанной с прерываниями; сброс дисковой системы; очистка графического экрана; разрешение подтверждения нажатия клавиши звуком; перезагрузка CCP и BDOS; инициализация команд перехода функций "теплого старта" и BDOS в базовой странице; установка адреса буфера обмена по умолчанию; передает управление CCP. Эта функция вызывается обычно при завершении работы текущей программы, либо при вызове с клавиатуры "теплого старта" ( |CTRL/C|, |STOP| ). 3.3. ФУНКЦИЯ 2: �ECONST.�F Входные параметры: НЕТ. Выходные параметры: регистр <A> содержит 0FFH, если в буфере консоли имеется введенный символ, и 0, если буфер пуст. Действие: НЕТ. 3.4. ФУНКЦИЯ 3: �ECONIN�F Входные параметры: НЕТ. Выходные параметры: регистр <A> содержит код символа, вве- денного с консоли. Действие: функция ожидает ввода символа с клавиатуры. Подробнее см. описание драйвера клавиатуры. 3.5. ФУНКЦИЯ 4: �ECONOUT�F Входные параметры: регистр <C> содержит код символа, выводимого на консоль. Выходные параметры: НЕТ. Действие: выводится символ из регистра <C> на дисплей. Значение кода символа может принимать значения от 0 до 255. Действие кода или последовательности кодов приводится в описании драйвера дисплея. 3.6. ФУНКЦИЯ 5: �ELIST�F Входные параметры: регистр <C> содержит код символа , выводимого на печатающее устройство. Выходные параметры: НЕТ. Действие: выводится символ из регистра <C> на параллельный интерфейс "CENTRONICS" в соответствии с протоко- лом. В случае неготовности периферийного устройст- ва функция находится в состоянии ожидания. Код символа может принимать значения от 0 до 255 ( подробнее см. описание драйвера печатаю- щего устройства). 3.7. ФУНКЦИЯ 6: �EAUXOUT�F Входные параметры: регистр <C> содержит код символа, вы- водимого на последовательный интерфейс. Выходные параметры: НЕТ. Действие: выводится символ из регистра <C> на последо- вательный интерфейс в соответствии с протоко- лом. В случае неготовности периферийного устрой- ства функция находится в состоянии ожидания. Код символа может принимать значения от 0 до 255 (подробнее см.описание драйвера последовательного интерфейса). 3.8. ФУНКЦИЯ 7: �EAUXIN�F Входные параметры: НЕТ. Выходные параметры: регистр <A> содержит код символа, введенного с последовательного интерфейса. Действие: функция ожидает прием символа с последовательного интерфейса. Значение кода символа может принимать значения от 0 до 255. ( подробнее см.описание драйвера последовательного интерфейса). 3.9. ФУНКЦИЯ 8: �EHOME�F Входные параметры: НЕТ. Выходные параметры: НЕТ. Действие: устанавливает текущую дорожку в нулевую позицию. 3.10. ФУНКЦИЯ 9: �ESELDSK�F Входные параметры: регистр <C> содержит номер селектируемого дисковода. Выходные параметры: регистровая пара <HL> содержит адрес блока параметров выбранного дисковода, если содержимое <C> равно 0,1,2,3,4 и считывание информационного сектора прошло успешно. В противном случае <HL> содержит 0. Действие: если ранее информационный сектор не был считан, при селектировании дисковода считывается информа- ционный сектор, в соответствии с которым формиру- ется таблица дисковых параметров и происходит преобразование логического адреса (сектор и трек диска) в физический. В случае неудачного считы- вания информационного сектора, а также при попыт- ке выбрать несуществующее устройство , функция возвращает нулевое значение. 3.11. ФУНКЦИЯ 10: �ESETTRK�F Входные параметры: регистр <C> содержит номер текущей дорожки. Выходные параметры: НЕТ. Действие: устанавливает текущую дорожку в соответствии с содержимым регистра <C>. 3.12. ФУНКЦИЯ 11: �ESETSEC�F Входные параметры: регистр <C> содержит номер текущего сектора. Выходные параметры: НЕТ. Действие: устанавливает текущий сектор в соответствии с содержимым регистра <C>. 3.13. ФУНКЦИЯ 12: �ESETDMA�F Входные параметры: регистовая пара <BC> содержит новый адрес буфера обмена. Выходные параметры: НЕТ. Действие: устанавливает адрес текущего 128-байтового буфера обмена в соответствии с содержимым регистровой пары <BC>. 3.14. ФУНКЦИЯ 13: �EREAD�F Входные параметры: НЕТ. Выходные параметры: регистр <A> содержит 0 , если операция прошла успешно , и не ноль в противном случае. Действие: при успешном завершении операции 128-байтовый сектор, заданный функциями SELDSK, SETTRK, SETSEC, считывается в область памяти, заданную функцией SETDMA. 3.15. ФУНКЦИЯ 14: �EWRITE�F Входные параметры: содержимое регистра <C> указывает на тип записи: 0 - обычная запись; 1 - запись в директорию; 2 - запись в новый блок. Выходные параметры: регистр <A> содержит 0, если операция прошла успешно, и не ноль в противном случае. Действие: при успешном завершении операции происходит запись 128-байтового сектора, заданного функциями SELDSK, SETTRK, SETSEC, из области памяти, заданной функцией SETDMA. 3.16. ФУНКЦИЯ 15: �ELISTST�F Входные параметры: НЕТ. Выходные параметры: регистр <A> содержит 255,если печатающее готово принять символ, и 0 , если нет. Действие: НЕТ. 3.17. ФУНКЦИЯ 16: �ESECTRAN�F Входные параметры: регистровая пара <BC> содержит номер логического сектора, а <DE> - адрес таблицы перевода логических секторов в физический. Если содержимое <DE> равно нулю, таблицы не существует. Выходные параметры: регистровая пара <HL> содержит номер физического сектора. Действие: функция преобразует номер логического сектора ( от 0 до n) в физический (от 1 до k). В связи с принятым форматом записи на диск в данной версии BIOS таблицы перевода секторов не сущест- вует, поэтому <DE>=0; <HL>=<BC>+1. �E4. ДОПОЛНИТЕЛЬНЫЕ КОМПОНЕНТЫ BIOS vers. 2.0.�F Операционные системы типа CP/M имеют хорошо описанный стан- дартный программный интерфейс, позволяющий обращаться к устрой- ствам ввода-вывода. Это большое достоинство ОС имеет вытекаю- щие из него недостатки, поскольку описанный заранее программный интерфейс не позволяет эффективно использовать аппаратные особенности машины. Кроме того, ОС CP/M не описывает в достаточной степени работу с прерываниями. В связи с этим в BIOS оговаривается ряд элементов, отражающие некоторые аппаратные и программные особенности реализации ОС. Программа пользователя может непосредственно обращаться к следующим элементам ввода-вывода, непосредственно включенным в карту памяти ЭВМ (рис.2): алфавитно-цифровой дисплей, клавиатура, просмотровая таблица, системный регистр, регистр цвета, контроллер прерываний, таймер, локальная сеть, последовательный интерфейс, контроллер диска, порт принтера, джойстики и т.д. Следует отметить, что �Eвмешательство в работу на физическом уровне обычно нарушает нормальную работу соответствующих драйверов�F, поэтому делать это нужно очень внимательно, и только в случае необходимости. 4.1. �EОрганизация прерываний�F ПК8020 содержит встроенный контроллер прерываний типа КР580ВН59, обслуживающий следующие устройства: уровень прерываний 0: прерывание пользователя, выведено на разъем XS1:33 ; уровень прерываний 1: приемник последовательного интерфейса ; уровень прерываний 2: передатчик посл. интерфейса ; уровень прерываний 3: приемник локальной сети ; уровень прерываний 4: прерывание от начала вертикаль- ного бланка ( системное прерыва- ние с периодом около 20 мсек.) ; уровень прерываний 5: прерывание от таймера ; уровень прерываний 6: печатающее устройство ; уровень прерываний 7: прерывание от сигнала выключения двигателя НГМД. Контроллер прерываний инициализирован таким образом, что разность между стартовыми адресами составляет 4 байта, а �Eначальным адресом подпрограмм обработки прерываний является 0F7E0H�F. Таблица стартовых адресов прерываний приведена на рис.3 . ORG 0F7E0H F7E0H: JMP INT0 DB 0 F7E4H: JMP INT1 DB 0 F7E8H: JMP INT2 DB 0 F7ECH: JMP INT3 DB 0 F7F0H: JMP INT4 DB 0 F7F4H: JMP INT5 DB 0 F7F8H: JMP INT6 DB 0 F7FCH: JMP INT7 DB 0 �EРИС. 3�F 4.1.1. �EТаблица векторов прерываний�F Из-за аппаратных особенностей компьютера , связанных с переключением карты памяти, �Eпрерывания в ряде случаев должны быть запрещены�F. Чтобы частично преодолеть этот недостаток, в BIOS введена предварительная обработка прерываний, в результате которой таблица стартовых адресов (рис.3) преобразуется в таблицу векторов прерываний: �Eаппаратные прерывания :�F VTRAP0: DW DOINT0 VTRAP1: DW DOINT1 VTRAP2: DW DOINT2 VTRAP3: DW DOINT3 VTRAP4: DW DOINT4 VTRAP5: DW DOINT5 VTRAP6: DW DOINT6 VTRAP7: DW DOINT7 �Eпсевдопрерывания :�F VTRAP8: DW AUXI0 VTRAP9: DW AUXI1 VTRAP10:DW AUXI2 VTRAP11:DW AUXI3 �E РИС. 4�F Таблица векторов прерываний имеет фиксированное положение. Адрес ячейки VTRAP0 0F7C8H. Таблица векторов прерываний ( рис.4 ), кроме 8 векторов аппаратных прерываний (VTRAP0-VTRAP7), дополнительно содержит 4 вектора псевдопрерываний. В данной реализации используется только псевдопрерывание 8 - псевдопрерывание от клавиатуры. 4.1.2. �EПредварительная обработка прерываний�F Процесс предварительной обработки прерываний заключа- ется в следующем. Нормализуется карта памяти ( устанавли- вается значение системного регистра 1CH ) , сохраняются ре- гистры <HL> и <PSW> , затем управление передается процедуре обработки прерывания, адрес которой находится в ячейке VTRAPi (рис.4). Отметим, что системные процедуры обработки прерываний имеют стандартный выход из прерываний, т.е. восстанавливают содержимое спасенных регистров, сбрасывают контроллер прерываний, разрешают прерывания и выполняют команду RET. 4.1.3.�E Порядок подключения к прерываниям �F Если пользователь хочет подключить свою процедуру к пре- рыванию �Ei�F, он должен выполнить следующие действия: 1. Получить адрес VTRAP0. 2. Вычислить адрес VTRAPi. 3. Запретить прерывания. 4. Считать значение TRAPi из VTRAPi и запомнить его. 5. Записать по адресу VTRAPi адрес процедуры обработки прерываний. 6. Разрешить прерывания. В результате, если произойдет выбранное прерывание, управ- ление перейдет к процедуре пользователя. Очевидно, что таким способом к одному прерыванию можно подключить любое число процедур. 4.1.4. �EОграничения на процедуру обработки прерывания�F 1. Все регистры, кроме <HL> и <PSW>, должны быть сохранены. 2. На выходе процедуры управление должно передаваться по адресу TRAPi, полученному при подключении процедуры к прерыванию (п.4.3.6). 3. Внутри процедуры нельзя вызывать функции BDOS и BIOS. 4. Нельзя разрешать прерывания (в данной реализации не допускаются вложенные прерывания). 5. Глубина стека - одно вложение. 4.1.5.�E Порядок отключения от прерывания�F 1. Вычислить адрес VTRAPi. 2. Запретить прерывания. 3. Восстановить содержимое VTRAPi, поместив туда первоначальное значение TRAPi. 4. Разрешить прерывания. Следует отметить, что "теплый" старт полностью восстанавливает все, что связано с прерываниями, в первоначальный вид. �E4.3. Атрибуты драйверов системных и периферийных устройств�F В персональных компьютерах различные функции обмена с периферийными устройствами, такие как опрос клавиатуры, вывод на дисплей и т.д. часто выполняются самим компьютером. В микроЭВМ серии ПК 8020 имеется возможность непосредственно из программы пользователя изменять параметры и режим работы некоторых драйверов, использующих отдельные функции BIOS. Это позволяет значительно повысить эффективность работы программ пользователя с BIOS. В этом разделе приводится список ячеек памяти, содержащих те или иные параметры или задающие режим работы отдельных драйверов. При изменении версии BIOS расположение и назначение отдельных ячеек изменяться не будет, однако это не исключает возможность использования новых ячеек для развития. Поэтому �Eне рекомендуется использовать область системных ячеек 0F600H - 0F7FFH для каких либо целей�F . Ниже приведен список используемых ячеек с обозначением функций. Более подробные сведения приводятся при описании соответствующих драйверов. 4.2.1. �EЯчейки параметров и режимов драйверов�F �EСистемные ячейки :�F ORG 0F700H DS 3 SYSCOPY: DB 1CH ;0F703H - Копия системного регистра COLCOPY: DB 0 ;0F704H - Копия регистра цвета �EЯчейки драйвера экрана :�F CARD: DW 0FC00H ;0F705H - Адрес курсора CSRFLAG: DB 0 ;0F707H - Флаг отображения курсора CURSOR: DB 0 ;0F708H - Символ курсора CSRATTR: DB 00010000B ;0F709H - Атрибут символа курсора BUFCHAR: DB 0 ;0F70AH - Символ из позиции курсора BUFATTR: DB 0;0F70BH-Атрибут символа из позиции курсора AUTOFLAG: DB 0FFH ;0F70CH - Флаг автоперевода строки ESCFLAG: DB 0 ;0F70DH - Флаг ESC-последовательности FNUM: DB 0 ;0F70EH - Рабочая ячейка ADRTAB: DW ADRT ;0F70FH - Адрес таблицы П/П CTRL-симв. ESCTAB: DW ESCT ;0F711H - Адрес таблицы П/П ESC-посл. MINESC: DB '0' ;0F713H - Начало таблицы ESC-симв. LIMESC: DB 'Y' ;0F714H - Конец таблицы ESC-симв. BELLDIV: DW 0B00H ;0F715H - Высота сигнала BELL BELLDEL: DW 1000Х ;0F717H - Длительность сигнала BELL �EЯчейки драйвера клавиатуры :�F DS 1 SETFLAG: DB 0 ;0F71AH -Флаг набора символов (0 осн.) DS 5 LONGVAL: DB 0 ;0F720H - Задержка автоповтора AUTOVAL: DB 0 ;0F721H - Период автоповтора DS 1 GETPNT: DW KEYBUF ; PUTPNT: DW KEYBUF ;указатель буфера скан-кода DS 2 CONTAB: DW CONT ;0F729H - Адрес табл. доп. клавиш FUNTAB: DW FUNT ;0F72BH - Адрес табл. функ.клавиш FSHIFT: DB 0FFH ;0F72DH - Флаг регистра (0-нижний) FALF: DB 2H ;0F72EH - Флаг алфавита (0-русский) FGRAPH: DB 0 ;0F72FH - Флаг графический (4-граф.) FSEL: DB 0 ;0F730H - Флаг цифр (10H - цифры) SNDFLG: DB 0FFH ;0F731H - Флаг подтв. нажатия (0-нет) CONT: DW C0 ;0F736H - Таблица адресов дополнит. поля клавиатуры. DW C1 DW C2 DW C3 DW C4 DW C5 DW C6 DW C7 DW C8 DW C9 DW CCOMMA DW CDEL DW CINS DW CCLS FUNT: DW F1 ;0F752H - Таблица адресов функциональных клавиш. DW F2 DW F3 DW F4 DW F5 DW F6 DW F7 DW F8 DW F9 DW F10 �EЯчейки драйвера накопителя на кассете :�F WAVE1F: DB 61 ;0F766H Длительность записи импульса DB 68 WAVE2F: DB 27 ;0F768H DB 33 ; STMES: DB 0 ;0F76AH - рабочие ячейки BITMES: DB 0 ;НКМЛ �EЯчейки для работы с таблицей цветов :�F LUTFL: DB 0 ; 0F76EH - Флаг изменения таблицы LUT ADRLUT: DW TABLUT ; 0F76FH - Адрес таблицы LUT TABLUT: DB 00H ; 0F771H - Копия системной табл.LUT DB 91H DB 0A2H DB 0B3H DB 0C4H DB 0D5H DB 0E6H DB 0F7H DB 0F8H DB 0F9H DB 0FAH DB 0FBH DB 0FCH DB 0FDH DB 0FEH DB 0FFH �EЯчейки драйвера принтера :�F FLGINT: DB 0 ; 0F781H тип интерфейса принтера PRNTAB: DW LSTTAB ; 0F782H таблица кодировки LST 128 байт �EЯчейки системы прерываний :�F HINTTAB: DW DOINT0 ;0F7C8H - таблица П/П обр.прерываний DW DOINT1 ;0F7CAH DW DOINT2 ;0F7CCH DW DOINT3 ;0F7CEH DW DOINT4 ;0F7D0H DW DOINT5 ;0F7D2H DW DOINT6 ;0F7D4H DW DOINT7 ;0F7D6H DW AUXI0 ;0F7D8H DW AUXI1 ;0F7DAH DW AUXI2 ;0F7DCH DW AUXI3 ;0F7DEH �EВектора переходов по прерыванию :�F JMP INT0 ; 0F7E0H - уровень прерываний 0 DS 1 JMP INT1 ; 0F7E4H DS 1 JMP INT2 ; 0F7E8H DS 1 JMP INT3 ; 0F7ECH DS 1 JMP INT4 ; 0F7F0H DS 1 JMP INT5 ; 0F7F4H DS 1 JMP INT6 ; 0F7F8H DS 1 JMP INT7 ; 0F7FCH DS 1 Ряд устройств, такие как джойстики, порт расширения, не имеют драйверов в BIOS. Кроме того, пользователь может применять некоторые устройства непредусмотренным образом. Например, к последовательному интерфейсу можно подключить "мышь". Работу с этими устройствами программа пользователя должна организовывать сама. Необходимые сведения о том, как это сделать, можно почерпнуть из руководств системного програм- миста, прилагаемых к серийным ПЭВМ ПК 8020 . 4.2.2. �EАтрибуты драйвера просмотровой таблицы�F Имеются драйверы, встроенные в BIOS , но не имеющие непосредственного выхода в систему. Сюда относится �E драйвер просмотровой таблицы.�F Поскольку в диалоге с системой просмотровая таблица должна быть настроена определенным обра- зом, управление ею заложено в BIOS. Применение драйвера про- смотровой таблицы, находящегося в BIOS, сохраняет совместимость на программном уровне при модернизации аппаратной части ПЭВМ. �EКопия системной просмотровой таблицы располагается в ячейках 0F771H - 0F780H . Размер копии 16 байт.�F При каждом "теплом" старте эта копия заносится в просмот- ровую таблицу. Таким образом, меняя содержимое этой таблицы, можно получить желаемые сочетания цветов символов и фона при выходе в систему. �E Адрес рабочей копии просмотровой таблицы хранится в в ячейке (0F76FH).�F По умолчанию - это адрес системной копии. Если пользователь желает использовать драйвер просмотровой таблицы, находящийся в BIOS, он должен сначала поменять этот адрес на адрес своей копии таблицы. Отметим, что при "теплом" старте значение адреса системной копии просмотро- вой таблицы восстанавливается. Драйвер просмотровой таблицы в данной реализации BIOS за- пускается по прерыванию 4 (период 20 мс *). * в новых от строки. �EПризнаком требования запуска драйвера служит содержимое ячейки 0F76EH.�F Если содержимое этой ячейки отлично от нуля, драйвер во время ближайшего обратного хода по кадрам выдает в просмотровую таблицу последовательно 16 байтов, начиная с адреса, считанного из ячейки 0F76FH. После окончания операции в ячейку 0F76EH заносится ноль. По этому признаку программа пользователя может проверить, выполнена ли реинициализация просмотровой таблицы. �E5. ОПИСАНИЕ ДРАЙВЕРОВ УСТРОЙСТВ�F 5.1.�E Драйвер дисплея�F Драйвер дисплея обеспечивает выполнение функции CONOUT в BIOS. Собственно BIOS осущестляет только вызов драйвера, находящегося в ПЗУ. Описание работы драйвера приведено в руководстве системного программиста серийных ПК 8020. 5.2.�E Драйвер клавиатуры�F Драйвер клавиатуры обеспечивает работу функций BIOS CONIN и CONST. Он состоит из нескольких частей. 5.2.1. �EОпрос клавиатуры�F Непосредственный опрос поля клавиатуры выполняет функция INKEY. На выходе эта функция имеет : во-первых, в регистре <C> скан-код нажатой клавиши, а в регистре <B> - текущее значение строки модификаторов кода ; во-вторых, совершает необходимые изменения значений ячеек FALPH, FSHIFT, FGRAPH и FSEL. Если нажата одна из клавиш SHIFT, ALPH, GRAPH или SEL, и одновременно нажать клавишу LOCK, то текущее состояние указанных модификаторов кода заносится в соответствующие им ячейки. Функция INKEY осуществляет автоповтор. Задержка начала автоповтора определяется содержимым ячейки LONGVAL, умноженным на 20 мс, период автоповтора определяется содержимым ячейки AUTOVAL, умноженным на 20 мс (значение 0 соответствует наибольшей задержке - 20*256 мс, т.е. около 5 сек). Функция INKEY вызывается из процедуры обработки прерывания номер 4 (период 20 мс). Результат заносится в буфер клавиатуры - ячейки SYMBUF и CNTRKEY (скан-код и текущее значение строки клавиш-модификаторов кода. На рис. 5.1 приведена схема расположения клавиш. Отметим, что скан-код соответствует расположению клавиш ( считать нужно слева направо и сверху вниз, начиная с 1 ). Таблица скан-кодов клавиш приведена в приложении 1. �E D0 D1 D2 D3 D4 D5 D6 D7�F _ |___!___!___!___|___|___|___|___| �EОсновное поле:�F | | | | | | | | | �E KB00 01H Ю А Б Ц Д Е Ф Г KB01 02H Х И Й К Л М Н О KB02 04H П Я Р С Т У Ж В KB03 08H Ь Ы З Ш Э Щ Ч ъ KB04 10H 0 1 2 3 4 5 6 7 KB05 20H 8 9 * + < = > / KB06 40H ВК ТР СТП ИЗ ВЗ ВШ ТАБ ПРОБЕЛ KB07 80H РГЛ АЛФ ГРФ ПРФ СЕЛ УПР ФКС РГП Дополнительное поле: KB08 101H 0 1 2 3 4 5 6 7 KB09 102H 8 9 . KB10 104H F1 F2 F3 F4 F5 F6 F7 F8 KB11 108H F9 F10 РИС. 5.1.�F Следует отметить, что в данной версии BIOS функциональным клавишам задан вывод на экран следующих команд : �EF1 - DIR�F - команды запроса оглавления диска ; �EF2 - TYPE�F - команды распечатки на экране текста из файла ; �EF3 - ERA�F - команды удаления файла из оглавления ; �EF4 - REN�F - команды переименования файла ; �EF5 - A:ST�F - команды вызова редактора "Супертекст"; �EF6 - BASIC�F - команды загрузки интерпретатора BASIC ; �EF7,F9,F10�F - свободны ; �EF8 - SAVE�F - команда BASIC сохранения программы на диске . Рассмотрим детально процесс опроса клавиатуры. Во время работы подпрограммы обработки прерывания 4 (период 20 мс) производится анализ буфера клавиатуры. Если буфер полон, клавиатура не опрашивается. В противном случае вызывается функция INKEY. Если нажата какая-либо клавиша (за исключением клавиш-модификаторов), ее скан-код заносится в регистр <C>, содержимое ячейки CNTRKEY - в регистр <B>, и управление передается вектору псевдопрерывания 8 (AUXI0). На выходе псевдопрерывания проверяется содержимое регистра <C>. Если оно равно нулю, считается, что клавиша не нажата. В противном случае содержимое регистра <C> заносится в буфер клавиатуры, содержимое ячейки <B> - в ячейку CNTRKEY. Далее анализируется содержимое ячейки SNDFLG. Если оно не равно нулю, то инициируется нужным образом звуковой канал таймера и слышен щелчок. Неуказанные здесь адреса системных ячеек клавиатуры, приведены в разделе 4. 5.2.2. �EПреобразование скан-кода в код КОИ-8�F Функция BIOS CONIN требует выдачи кода КОИ-8 нажатой клавиши. Для его получения имеется специальный драйвер ASC, преобразующий скан-код в код символа КОИ-8 или в последовательность кодов (для некоторых клавиш) в соответствии с ячейками-модификаторами CNTRKEY, FGRAPH, FALPH, FSEL и FSHIFT. Драйвер ASC интерпретирует клавиши следующим образом. �E Клавиши со скан-кодом от 1 до 32�F интерпретируют- ся в зависимости от ячеек FALPH, FGRAPH, CNTRKEY и FSHIFT. Если в ячейке CNTRKEY установлен бит CNTR, формируется контрольный код (от 0 до 31), независимо от остальных ячеек. Если в ячейке FGRAPH установлен бит 2 и не установлен бит GRAPH в ячейке CNTRKEY (или наоборот), то формируется код графического символа, в зависимости от состояния SHIFT, либо от 128 до 159, либо от 160 до 191. Если установлен бит 1 в ячейке FALPH и не установлен бит ALPH в ячейке CNTRKEY (или наоборот), то формируются коды латинского алфавита и некоторых специальных символов (см. таблицу кодов КОИ-8), в зависимости от состояния SHIFT, либо от 64 до 95, либо от 96 до 127. В остальных случаях формируются коды КОИ-8 русского ал- фавита. Если содержимое ячейки SETFLAG отлично от нуля, то коды КОИ-8 соответствуют ГОСТу 1988 г., иначе ГОСТу 1974 г. Состояние SHIFT определяется одновременно содержимым ячей- ки FSHIFT и битов 0 и 7 ячейки CNTRKEY. Если содержимое ячейки FSHIFT не равно нулю и не установлены биты 0 или 7 в ячейке CNTRKEY, (или наоборот), то формируются коды строчных символов. �EКлавиши со скан-кодом от 33 до 48�F интерпретируют- ся как цифры и некоторые знаки (коды от 33 до 63, см. таблицу кодов). На формирование этих кодов оказывают влияние только биты 0 и 7 ячейки CNTRKEY (клавиши SHIFT). �EКлавиши с скан-кодом от 49 до 56�F формируют коды управ- ляющих символов. Сюда относятся клавиши ВК, ТАБ, ПРОБЕЛ, ЗБ , СТОП. Помимо этого, есть еще три клавиши - DEL, INS и CLS. Эти клавиши обрабатываются отдельно, при их нажатии формируются последовательности кодов (подробнее описано ниже). �EКлавиши со скан-кодом от 57 до 64 �F. Клавиша со скан-кодом 60 интерпретируется как ESC ( код 27 ). Остальные клавиши этой группы собственных кодов не имеют и являются модифи- каторами кодов, т.е. эти скан-коды в драйвер ASC попадать не должны. �EКлавиши со скан-кодом от 65 до 80�F интерпретируют- ся в зависимости от состояния ячеек FSEL и CNTRKEY. Если установлен бит 4 ячейки FSEL и не установлен соответ- ствующий бит ячейки CNTRKEY ( или наоборот ), то эти кла- виши интерпретируются как цифровые и выдаются коды цифр и знаков. В противном случае выдается последовательность кодов. Под последовательностью кодов имеется ввиду следующее. В ОЗУ машины последовательно располагаются наборы кодов КОИ-8, для каждой клавиши свой. Если драйвер ASC обнаруживает, что входному скан-коду соответствует последовательность, он в соответствии со скан-кодом определяет адрес начала этой последовательности и запоминает его, устанавливает внутренний флаг последовательности, и возвращает вызывающей функции первый символ последовательности (если это ноль, то флаг последовательности не устанавливается). При последующих обращениях к функции CONIN проверяется состояние флага последовательности. Если он установлен, то извлекается адрес последовательности, увеличивается на один, запоминается, и извлекается следующий байт последовательности. Если извлеченный байт равен нулю, то сбрасывается флаг после- довательности. Теперь о том, �E как определяется адрес нужной последовательности�F. Известно, что в ячейке 0F729H находится адрес таблицы векторов последовательностей. Таблица векторов последовательностей представляет из себя набор 2-х байтовых адресов, указывающих на начало последовательности. В текущей реализации каждому скан-коду этой группы ставится в соответствие одна последовательность. Помимо этих клавиш к этой же группе относены клавиши DEL, INS и CLS. Т.о. всего имеется 14 векторов. По умолчанию таблица векторов начинается с адреса 0F736H, а сами последовательности находятся в ячейках 0F6A0H-0F6F3H, т.е. на каждую отводится по 6 байт. Отметим, что в последствии предполагается удвоить число последовательностей кодов этой группы клавиш за счет исполь- зования модификатора SHIFT. �EКлавиши со скан-кодом от 81 до 91�F интерпретируют- ся как функциональные, и в ответ выдаются последователь- ности кодов КОИ-8. Механизм формирования последовательности кодов такой же, как и для клавиш со скан-кодом 65...80. Адрес таблицы адресов начала последовательностей расположен в ячейке 0F72BH (FUNTAB). По умолчанию эти адреса расположе- ны в ячейках 0F752H-0F764H, а сами последовательности рас- полагаются в ячейках 0F600H-0F69FH, по 16 байт на одну после- довательность. При нажатой клавише SHIFT скан-коды 81...85 интерпретирутся как клавиши F6...F10. �EКлавиши со скан-кодами 97...112�F интерпретируются как аналоги клавиш 65...80 в режиме управляющих клавиш с таким же механизмом формирования кодовых последовательностей. �EПри получении драйвером ASC скан-кода, не входящего ни в одну из описанных групп, возвращается значение кода ноль.�F 5.3. �EДрайвер печатающего устройства�F Драйвер печатающего устройства обеспечивает работу функций BIOS �ELIST и LISTST�F . �EФункция LISTST�F возвращает в регистре <A> 0FFH, если печатающее устройство готово принять следующий символ, и ноль - в противном случае. Протокол обмена с печатающим устройством соответствует интерфейсу CENTRONIX ( ИРПР-М ). Отсутствие сигнала BUSY ( см. описание интерфейса ) считается признаком готовности печатающего устройства. Функция LIST обеспечивает передачу кода, который требует- ся напечатать, на принтер. Процедура обмена следующая. Сначала ожидается готовность печатающего устройства принять символ Затем требуемый код выставляется на шину данных интерфей- са и формируется строб записи данных отрицательной полярности длительностью приблизительно 20 мкс. Печатаемые символы могут иметь коды от 0 до 255. Коды 0...127 достаточно стандартны - это ASCII. Коды 128...255 могут использоваться для различных целей - национальные алфавиты, псевдографика и т.д. Чтобы обеспечить наибольшую гибкость работы, коды 128...255 при выводе на печатающее устройство преобразуются через перекодировочную таблицу. Адрес этой таблицы расположен в системной области, в ячейке 0F781H. 5.4. �EДрайвер последовательного интерфейса�F Драйвер последовательного интерфейса поддерживает работу функций BIOS �EPUNCH и READER�F. �EФункция PUNCH�F обеспечивает вывод символа на последова- тельный интерфейс. Передаваемые символы могут иметь коды от 0 до 255. При передаче коды не модифицируются. Прежде, чем начать передачу, драйвер ожидает разрешения передачи. Считается, что передача разрешена, если буфер передатчика пуст (передан предыдущий байт) и активен сигнал DSR (см. описание интерфейса RS-232). �EФункция READER�F вводит символ с последовательного интер- фейса. Вводимый символ может иметь код от 0 до 255. Считается, что символ может передаваться устройством, если подан сигнал DTR (см. описание интерфейса RS-232). Последовательность работы драйвера READER следующая. Сначала проверяется, есть ли символ в буфере приемника. Если есть, этот символ возвращается. Если нет, то включается сигнал DTR и ожидается прием символа. Как только принимаемый символ оказывается в буфере приемника, выключается сигнал DTR и возвращается код принятого символа. Отметим, что �Eдрайверы последовательного интерфейса предполагают, что аппаратура настроена заранее, т.е. установ- лена скорость передачи, разрешена передача и т.д. Кроме того, драйверы последовательного интерфейса ошибки приема/передачи не анализируют и, соответственно, о них не сообщают.�F Правила настройки аппаратуры приведены в прилагае- мом к микроЭВМ руководстве системного программиста. 5.5. �EДрайверы работы с дисками�F Драйверы работы с диском реализуют следующие функции BIOS: 8. HOME - установка нулевой дорожки текущего дисковода . 9. SELDSK - выбор текущего дисковода. 10. SETTRK - установка дорожки текущего дисковода. 11. SETSEC - установка сектора, с которым производится обмен. 12. SETDMA - установка адреса буфера обмена. 13. READ - операция чтения сектора, заданного функцией SETSEC, с дорожки, заданной функцией SETTRK или HOME, с дисковода, заданного функцией SELDSK в буфер, заданный функцией SETDMA. 14. WRITE - операция записи сектора, заданного функцией SETSEC,на дорожку, заданную функцией SETTRK или HOME,на дисковод, заданный функцией SELDSK, из буфера, заданного функцией SETDMA. 16. SECTRAN - операция перевода логического сектора в физический. Здесь будут описаны особенности этих функций, дисковые таблицы, приведены форматы диска, пригодные для данной реализации BIOS, подробно описан набор программ, учавствующих в дисковых операциях. Но прежде, чем приступить к описанию дисковых операций, дадим необходимые �Eсведения об устройстве диска�F. С точки зрения ОС CP/M важно знать общий объем информации, который можно записать на диск, и как искать информацию (адрес). Физическим адресом информации является номер дорожки, номер сектора и сторона диска. В силу разных обстоятельств имеется большое разнообра- зие таких существенных параметров используемых дисков, как чис- ло используемых сторон (одна или две головки в дисководе), чис- ло дорожек, информационный размер дорожки, число секторов на дорожке, способ записи на диск и др.. Чтобы иметь возможность работать с разными дисками, CP/M предполагает наличие таблицы, называемой Блок Дисковых Параметров (DPB). Подробное описание этой таблицы приведено в описании функции SELDSK. Здесь укажем только, что из этой таб- лицы CP/M может извлечь информационный объем диска и дорожки, расположение и размер директории ( CP/M считает, что размер сектора возможен ТОЛЬКО 128 байт и сторона есть ТОЛЬКО одна ). Из сказанного ясно, что CP/M может указать адрес расположения информации: номер дорожки и номер 128-байтового сектора. Реальный, физический размер сектора, используемый в различных системах, может составлять 128,256,512 и 1024 байта. Соответственно увеличению размера сектора уменьшается число физических секторов на дорожке. Запись каждого сектора сопровождается некоторой служебной информацией, причем размер этой информации не зависит от размера сектора. Другими словами, при увеличении размера физического сектора число физических секторов уменьшается, при этом уменьшаются общие накладные расходы, и емкость одной дорожки может возрастать. Кроме того, одновременно растет скорость обмена, поскольку в один прием обмен происходит большей порцией. Продемонстрируем сказанное реальными форматами дисков при двойной плотности (MFM) для дисков 5.25"(или 3.5"): �E Размер сектора число секторов/трек размер трека 128 26 3.25 Кб 256 16 4.00 Кб 512 9 4.50 Кб 1024 5 5.00 Кб�F Из таблицы видно, что выгодно увеличивать размер физического сектора. По этой причине рекомендуемый размер сектора при двойной плотности - 1024 байта. Однако при этом возникает проблема разбиения большого физического сектора на несколько 128-байтовых логических. Подробно об этом будет расказано несколько позже . Если дисковод способен работать с обоими сторонами диска, число физических дорожек удваивается. В этом случае обычно четные логические (передаваемые ОС) номера дорожек соответ- ствуют стороне 0, а нечетные - стороне 1. Сопоставление физического и логического адреса полностью лежит на BIOS. Чтобы BIOS правильно определял требуемый физический адрес из логического, он должен точно знать параметры исполь- зуемого диска. Вообще говоря, можно было бы выбрать один формат и жестко требовать только его. Данные об этом формате "зашить" в BIOS, и больше ни о чем не беспокоится. Однако при этом потеряется возможность читать диски с других CP/M машин и использовать дисководы разных типов. По этой при- чине сделано так, что каждый диск содержит полную информацию о том, как он устроен, при этом описан как физический, так и логический формат. Для этой цели используются первые 32 байта первого сектора нулевой дорожки стороны ноль каждого дис- ка. Чтобы отличить диск с правильной информацией от случай- ной, эта служебная информация закрыта контрольной суммой. BIOS при первом обращении к диску считывает служебную информацию о его параметрах , и адаптируется для дальнейшей работы с ним . Содержимое первых 32 байт информационного сектора приведено на рис. 5.5.1. Первые 6 байт - информация для загрузчика. Если они равны нулю, значит диск не содержит информацию для загрузки, т.е. диск не системный. Байты 7...16 содержат информацию о физическом устройстве диска. Их назначение понятно из рис.5.5.1. Байты 17...31 содержат информацию о логическом устройстве диска. Хотя некоторые из приведенных логических параметров могли бы быть вычислены, для простоты весь блок логических параметров приведен в том виде, каком CP/M требует таблицу дисковых параметров. Подробнее эта таблица будет расписана ниже. Байт 32 содержит контрольную сумму со смещением 66H (т.е. КС[1-31] + 66H = [содержимое байта 32]. В заключение этого пункта отметим, что существует стандартный формат диска в CP/M. Параметры стандартного диска следующие: 8", одинарная плотность, одна сторона, 77 дорожек, 26 128-ми байтовых секторов на дорожке, две системных дорожки, 64 входа в директорию, фактор смещения - 6. Этот стандарт распространяется только на диски 8". Для дисков 5.25" такого стандарта нет. �EНомер байта: обозначение ; комментарий�F ;�Eфизические параметры диска�F 1: DW LoadAdress ; адрес, с которого начинается загрузка 3: DW RunAdress ; адрес,куда передается управление после ; загрузки 5: DW Count ; число загружаемых физических секторов 7: DB SizeDisk ; если значение байта 1 -8" диск, если 0 ; - 5.25" 8: DB Density ; способ записи: 0 - FM; 1 - MFM 9: DB TpI ; число дорожек на дюйм: 0 - 48 TpI ; 1 - 96 TpI, 2 - 135 TpI 10: DB SkewFactor ; если значение байта 1 - фактора смещения ; нет. Если <> 1 - байты 33-128 ; информационного сектора содержат таблицу ; перевода секторов, причем значение байта ; равно размеру таблицы. 11: DB SecSize ; размер физического сектора:0 - 128 байт, ; 1 - 256 байт, 2 - 512 байт и 3 - 1024 12: DB InSide ; информация о сторонах диска: 0 - ; односторонний диск, 1 - двухсторонний, ; причем сектора нумеруются от 1 до n ; с каждой стороны, четные логические ; дорожки с нулевой стороны, нечетные с ; первой. 13: DW SecPerTrack; число физических секторов на дорожке 15: DW TrkPerDisk ; число дорожек на диске (с одной стороны) ;�Eлогические параметры диска�F 17: DW SPT ; число логических секторов на дорожке 19: DB BSH ; фактор сдвига блока распределения данных 20: DB BLM ; маска блока распределения данных 21: DB EXM ; маска размера 22: DW DSM ; объем памяти на диске в блоках минус 1 24: DW DRM ; число входов в директорию диска минус 1 26: DB AL0 ; определяет, какие блоки зарезервированы 27: DB AL1 ; под директорию 28: DW CKS ; размер вектора контроля директории 30: DW OFS ; число системных дорожек на диске 32: DB CheckSum ;контрольная сумма служебной информации CS[1-31]+66H �E РИС. 5.5.1.�F �EФункции HOME, SETTRK, SETSEC и SETDMA�F формируют блок параметров, данные из которого впоследствии используют- ся операциями READ и WRITE. Эта группа операций выходных параметров не имеет и никаких физических действий не производит. Функции SETTRK и SETSEC предполагают входные параметры в регистре <C> (номер дорожки и сектора соответственно). Функция SETDMA - в регистровой паре <BC>. Функция HOME входных параметров не имеет и по действию аналогична функции SETTRK с обнуленным регистром <C>. �EФункция SECTRAN�F производит перевод логического сектора в физический. Логический сектор передается через регистр <C>, физический - возвращается в регистровой паре <HL>. Поскольку в данной реализации BIOS таблица перевода секторов не используется, эта функция просто увеличивает номер сектора на 1. �EФункция SELDSK�F производит выбор диска. Входной пара- метр - регистр <C> - содержит номер выбираемого диска. В данной версии системы приемлемыми устройствами являются A:, B:, C:, D: и E: (номера соответственно 0,1,2,3 и 4). Предполагается, что устройства A:, B:, C: и D: - дисководы, а устройство E: - электронный имитатор диска. Если происходит попытка задать номер устройства, не перечисленный здесь, при выходе из функции регистровая пара <HL> будет содержать 0. При выборе устройств A:, B:, C: и D:, если обращение происходит первый раз, производится попытка считать информационный сектор (см. п.5.5.1), при этом делаются попытки читать диск как 5", записанный с двойной плотностью, затем одинарной, затем одинарной 8". В случае неудачи физического чтения выдается сообщение "Can'т read info sector". * в верс 2.1 "*** Диск не читается ***" Если физически сектор считан, но не совпадает контрольная сумма, выдается сообщение "Wrong checksum". * в верс 2.1 "*** Нет служебной информации ***" В обоих этих случаях операция выбора прерывается и регистровая пара <HL> на выходе функции содержит 0. Если чтение информационного сектора прошло успешно, данный из него переносятся в дисковую таблицу, описание которой при- водится ниже. В случае успешного завершения (правильно считан информационный сектор либо выбрано устройство E:) функция воз- вращает в регистровой паре <HL> адрес головной таблицы диска. �EДанные информационного сектора переносятся в дисковую таблицу следующим образом.�F Часть, описывающая логическое устройство диска, переписывается один к одному в таблицу пара- метров соответствующего диска. Часть, описывающая физическое устройство, преобразуется, при этом выделяются следующие дан- ные : число физических секторов на дорожке, информация о сторонах диска, размер сектора. Дополнительно таблица физических параметров содержит параметр скорости пере- мещения головки дисковода, номер текущей дорожки, номер устройства как степень двойки и флаг считывания информационного сектора. Вид этой таблицы и значения ее параметров приведены на рис. 5.5.2. Отметим, что эта таблица располагается непосредственно перед соответствующей таблицей параметров дисков. �E#байта: обозначение ; комментарий�F 1: DB HeadSpeed ; константа скорости движения головки. ; 3 - 30 мс на шаг, 2 - 20 мс, 1 - 12 мс, ; 0 - 6 мс и 80H - 3 мс. 2: DB SecPerTrack; число физических секторов на дорожке 3: DB InSec ; число сторон диска ( 1 - две стороны, ; 0 - одна сторона) 4: DB SecSize ; Размер физического сектора.0 - 128 байт, ; 1 - 256, 2 - 512 и 3 - 1024 байта. 5: DB Track ; номер текущей дорожки. 6: DB Drive ; позиционный номер устройства (00000100) 7: DB Info ; флаг успешного считывания ; информационного сектора DPB: ; начало таблицы логических параметров ; диска. �E РИС. 5.5.2.�F Опишем подробно все таблицы и области памяти, требуемые для работы BDOS. Как уже упоминалось, функция SELDSK в случае успешного завершения возвращает адрес головной таблицы выбранного диска. Такая таблица индивидуальна для каждого дискового устройства. Вид таблицы и назначение ее элементов приведены на рис. 5.5.3. DPH: DW XLT ; адрес таблицы перевода логических секторов ; в физические. Если таблица перевода ; секторов не используется, эти байты сод. 0 DS 6 ; вспомагательные байты для BDOS DW DIRBUF ; адрес 128 байтовой области памяти, ; используемой BDOS для операций с ; директорией. DIRBUF один для всех устройств DW DPB ; адрес таблицы параметров дисков. Таблица ; для одинаковых дисков может быть одна. DW CSV ; адрес выделенной области памяти, ; используемой для проверки смены диска. ; если диск не может менятся, то CSV = 0. ; Для каждого устройства эта область памяти ; своя. Размер этой области в байтах равен ; числу секторов, занятых директорией. DW ALV ; адрес выделенной области памяти для ; хранения информации о распределении памяти ; на диске. Для каждого устройства эта ; область памяти своя. Размер этой области ; определяется общим размером диска. ; Резервируется по 1 биту на каждый блок. �EРИС. 5.5.3.�F Четвертый элемент таблицы - адрес таблицы параметров дисков. Именно эта таблица содержится в информационном секторе диска. Хотя при одинаковых дисках эта таблица может быть одна на все дисковые устройства, в данной реализации имеется столько таблиц, сколько дисковых устройств. Вид таблицы параметров диска и назначение ее элементов приведены на рис. 5.5.4. DPB: DW SPT ; число 128-байтовых секторов на дорожке DB BSH ; фактор сдвига блока распределения данных ; определяется размером блока данных. Блок ; данных - минимально возможная частица файла. ; Размер блока - 1, 2, 4, 8 или 16 Кбайт. Если ; блок имеет большой размер, в каждом файле ; теряется значительное число неиспользуемых ; секторов. При уменьшении размера блока ; увеличивается размер директории, описывающий ; расположение частей файла. BSH = log2[число ; логических секторов в блоке]. DB BLM ; маска блока распределения данных. ; ; BLM = (число логических секторов в блоке)-1. DB EXM ; = (BLM+1)*128/1024 - 1 - [DSM/256]. EXM - ; вспомогательная величина для определения ; номера extent'а. ; extent - часть файла, описываемая одним ; входом в директорию. DW DSM ; объем памяти на диске в блоках минус 1 DW DRM ; число входов в директорию диска минус 1 DB AL0 ; определяет, какие блоки зарезервированы DB AL1 ; под директорию. Каждый бит AL0,AL1, ; начиная со старшего бита AL0 и кончая ; младшим битом AL1, значением 1 резервирует ; один блок данных для директории. Нужно ; резервировать необходимое число блоков ; для хранения входов в директорию: 32*DRM/BLS DW CKS ; размер вектора контроля директории. ; CKS=(DRM+1)/4. Если диск не сменяем, CKS=0. DW OFS ; число системных дорожек на диске �EРИС. 5.5.4.�F �EФорматы дисков, пригодные для данной реализации BIOS.�F Как уже упоминалось, при операциях с дисками ОС задает адрес требуемой порции информации в виде номера трека и номера 128-байтового сектора. Из этого адреса необходимо выде- лить реальный, физический адрес в соответствии с устрой- ством диска. Функцию преобразования адреса выполняет спе- циальная процедура LTOF. Эта процедура вызывается каждый раз, когда происходит обращение к функциям READ и WRITE. Результат работы функции - физический номер трека, сторона диска, номер дисковода, номер физического сектора и, если физический сектор больше 128 байт, смещение (положение логического сектора внутри физического). Т.о., процедура LTOF определяет набор возможных форматов диска. Текущая реализация BIOS поддерживает следующие параметры диска: 1. Размер диска: 3.5", 5.25" и 8". 2. Способ записи: FM, MFM (одинарная и двойная плотность). 3. Число дорожек на диске: 1 - 255. 4. Число секторов на дорожке: 1 - 255. 5. Число сторон диска: одна или две. Если у диска две стороны, предполагается, что четные логические дорожки расположены на стороне 0, нечетные - на стороне 1. Сектора нумеруются с каждой стороны от 1 до n, дорожки - от 0 до k. 6. Размер сектора: 128, 256, 512 или 1024 байта. Для правильной работы драйвера дисков эти параметры должны быть занесены в информационный сектор. Отметим, что текущая версия BIOS не поддерживает смещение секторов. �EРекомендации по формату диска и применению дисководов.�F Существует большое количество типов дисководов, значительно отличающихся по своим параметрам. Основные отличия разных дисководов заключаются в следующих параметрах: 1. Количество дорожек. Встречается 35, 40, 77 и 80. 2. Число головок (сторон). Одна или две. 3. Плотность записи. Одинарная или двойная. 4. Время, требуемое для перемещения головки на один шаг. 5. Размер используемых дисков. 3.5", 5.25" и 8". Наиболее удобны для использования дисководы для 3.5" или 5.25" дисков, имеющие две головки, 80 дорожек, способные работать с двойной плотностью записи и имеющие время перемещения головки на один шаг 3 мс. Эти дисководы позволяют записывать на диск большой объем информации (до 800 Кбайт), имеют наименьшее время доступа к данным и обладают высокой надежностью. Значительно хуже дисководы типа 6022. Они имеют вдвое меньшую емкость за счет меньшего количества дорожек (40). Кроме того, они ненадежно работают с двойной плотностью, что потенциально уменьшает емкость еще в два раза. Кроме того, эти дисководы медленно двигают головкой - время шага около 30 мс. Дисководы типа 5088?? имеют 35 дорожек, и в данной реализации BIOS не пригодны вовсе, поскольку имеют время перемещения головки на шаг 40 мс, а максимально-возможное - 30 мс. Формат записи на диск также может быть весьма различным. Некоторые параметры определяются типом дисковода и качеством диска - число сторон, число дорожек, плотность записи. Единственный параметр, полностью отданный на совесть пользователя (разработчика системы), это размер сектора (или, иначе, их количество на дорожке; эти два параметра тесно связаны между собой информационной емкостью дорожки.). Поскольку система поддерживает емкость сектора до 1024 байта, для большей емкости диска и уменьшения среднего времени доступа рекомендуется использовать при двойной плотности 1024-байтовый сектор и при одинарной плотности 512-байтовый. При этом количество секторов на дорожку в обоих случаях одинаковое - 5 секторов/дорожку. Содержимое информационного сектора для рекомендуемого формата приведено на рис.5.5.5 . ; Содержимое информационного сектора для 5.25" (или 3.5") ; двухстороннего диска, расформатированного на 80 дорожек ; при двойной плотности. ;�E физические параметры диска�F 1: DW LoadAdress ; адрес, с которого начинается загрузка 3: DW RunAdress ; адрес,куда передается управление после ; загрузки 5: DW Count ; число загружаемых физических секторов 7: DB 0 ; если значение байта 1 -8" диск, если 0 ; - 5.25" 8: DB 1 ; способ записи: 0 - FM; 1 - MFM 9: DB 96(135) ; число дорожек на дюйм: 0 - 48 TpI ; 1 - 96 TpI, 2 - 135 TpI 10: DB 1 ; если значение байта 1 - фактора смещения ; нет. Если <> 1 - байты 33-128 ; информационного сектора содержат таблицу ; перевода секторов, причем значение байта ; равно размеру таблицы. 11: DB 3 ; размер физического сектора:0 - 128 байт, ; 1 - 256 байт, 2 - 512 байт и 3 - 1024 12: DB 1 ; информация о сторонах диска: 0 - ; односторонний диск, 1 - двухсторонний, ; причем сектора нумеруются от 1 до n ; с каждой стороны, четные логические ; дорожки с нулевой стороны, нечетные с ; первой. 13: DW 5 ; число физических секторов на дорожке 15: DW 80 ; число дорожек на диске (с одной стороны) ; �Eлогические параметры диска�F 17: DW 40 ; число логических секторов на дорожке 19: DB 4 ; фактор сдвига блока распределения данных 20: DB 15 ; маска блока распределения данных 21: DB 0 ; маска размера 22: DW 394 ; объем памяти на диске в блоках минус 1 24: DW 127 ; число входов в директорию диска минус 1 26: DB 192 ; показывает, какие блоки зарезервированы 27: DB 0 ; под директорию 28: DW 32 ; размер вектора контроля директории 30: DW 2 ; число системных дорожек на диске 32: DB CheckSum ;контрольная сумма служебной информации �EРИС. 5.5.5.�F �EЭлектронный имитатор диска.�F Функцию устройства E: выполняет имитатор диска - электронный диск. В качестве запоминающей среды электронного диска резервируется графическая память - страницы 1,2 и 3. (страница 0 используется как графическая).Общая емкость электронного диска - 144 Кбайта. Этого обычно вполне достаточно для большинства видов работ с диском - редактирования, компиляции программ, работы с базами данных и др. Использование электронного диска позволяет значительно увеличить скорость работы машины, уменьшить износ дисководов и дисков. При выключении машины информация на электронном диске теряется. Поэтому перед началом работы его необходимо расформатировать специальной программой форматирования электронного диска (FE.COM), переписать в него с обычного диска необходимые для работы файлы любыми стандартными средствами CP/M. По окончании работы необходимо наработанные файлы сбросить обратно на обычный диск (иначе после выключения машины произведенная информация будет утеряна). Отметим, что электронный диск возможен только на тех машинах, где в графической памяти использованы микросхемы емкостью 64 Кбита, например, КР565РУ5 . На рис.5.5.6 приведена таблица параметров электронного диска. Эта таблица встроена в BIOS и меняться не может. EDPB: DW 128 ; число логических секторов на дорожке DB 3 ; фактор сдвига блока распределения данных DB 7 ; маска блока распределения данных DB 0 ; маска размера DW 143 ; объем памяти на диске в блоках минус 1 DW 31 ; число входов в директорию диска минус 1 DB 128 ; указатель зарезервированых блоков : DB 0 ; под директорию DW 0 ; размер вектора контроля директории DW 0 ; число системных дорожек на диске �EРИС.5.5.6.�F �EФункция READ�F производит чтение требуемой информа- ции с диска ( или имитатора диска ) и перенесение ее в буфер DMA. Эта операция выполняется различно для устройств A:, B:, C:, D: и E:. В случае чтения из устройства E: требуемая информация считывается из графической памяти в промежуточный буфер, затем - в буфер DMA. Считается, что операция чтения из устройства E: происходит всегда успешно. В случае чтения с остальных устройств сначала логический адрес преобразуется в физический. Затем происходит анализ, имеется ли требуемая информация в буфере чтения или в буфере записи (для дисковых операций используются два вспомогательных буфера размером в 1024 байта каждый). Нужная информация могла оказатся там в результате предыдущих операций, поскольку размер физического сектора больше 128 байт. Если требуемая информация находится в буфере, она переносится в буфер DMA, и операция заканчивается, причем возвращается флаг завершения операции, полученный при физическом чтении. Если требуемой информации в буферах нет, производится физическое чтение в буфер чтения, и затем данные переносятся в буфер DMA. Флаг успешности операции физического чтения возвращается вызывающей функции в регистре <A>. Если содержимое регистра <A> равно нулю, то операция прошла успешно, если не 0, значит данные требуемого сектора считать не удалось. Физическое чтение происходит в два этапа - сначала вызывается функция DSETUP, которая настраивает аппаратуру, проверяет готовность устройства. Затем вызывается собственно функция чтения с диска - DTOM. Информация об успешности операции заносится во внутреннюю ячейку памяти и используется при следующих обращениях к этому же физическому адресу. �EФункция WRITE�F осущестляет запись данных из буфера DMA на диск. Эта операция, как и операция чтения, различ- на для устройства E: и остальных. В случае записи на устройство E: данные сначала переносятся в вспомогательный буфер. Затем очищается область графической памяти, предназаченная для этих данных, и далее данные переписываются из вспомогательного буфера в графическую память. Эта ветвь операции, как и при чтении, завершается всегда успешно. В случае обращения к другим устройствам процесс записи происходит сложнее. Рассмотрим подробнее проблеммы, возникающие в процессе записи из-за разного размера физического и логического секторов. Допустим, физический сектор имеет размер 1024 байта. В этом случае, чтобы записать на диск 128 байт информации, требуется проделать в общем случае следующие операции. Сначала надо считать физический сектор, затем переписать в него требуемые 128 байт информации (с соответствующим смещением), затем физический сектор поместить обратно на диск. Таким образом, вместо ускорения процедуры обмена при увеличении размера сектора получается замедление в два-три раза (поскольку на одно логическое обращение требуется сделать два физических). К счастью, BDOS редко производит посекторный обмен. Как правило, посекторный обмен происходит при обмене с областью директории. При обмене данными файлов ипользуется более крупная единица информации - группа (блок), которая состоит обычно из 16 логических секторов, причем сектора в пределах группы расположены подряд. Это свойство ОС позволяет значительно ускорить процедуру записи. Для этого BDOS информирует BIOS о том, какой тип записи требуется совершить. Если содержимое регистра <C> равно 1 при вызове функции WRITE, то это запись в директорию. Запись этого типа характеризует то, что информация в подсекторах физического сектора не должна быть разрушена, и содержимое физического сектора необходимо сразу занести на диск, т.е. обмен происходит так, как описывалось выше. Если содержимое регистра <C> равно 0, то это обычная запись. Ее характеризует то, что информация в подсекторах физического сектора не должна быть разрушена (т.е. необходимо предварительное чтение сектора), но физически сбрасывать буфер записи на диск требуется только после заполнения буфера, или когда требуется освободить буфер для других данных. В этом типе записи уже есть экономия обращений к диску - в случае 1024 байтного физического сектора на 8 логических обращений происходит два физических. Если содержимое регистра <C> 2, то блок данных, к которому происходит обращение, выбирается первый раз, т.е. систему не интересует информация в подсекторах физического сектора (не требуется предварительное чтение). Другими словами, в этом случае на 8 логических обменов происходит один физический обмен с диском. В остальном функция WRITE идентична функции READ, за исключением того, что для физического обмена с диском используется функция MTOD, и после сброса буфера на диск буфер "выключается", т.е. забывается, какая в нем информация. ******** II-1989. Драйверы BIOS ver 2.1 отличаются тем что они работают с переклю- чением конфигурации памяти, что дает возможность увеличивать размер буфера в зависимости от вида операции чтения/записи. начальный адрес буфера чтения/записи - EE00H, Это позволило получить еще большую скорость обмена с диском.