Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
76
Добавлен:
09.02.2015
Размер:
5.1 Mб
Скачать

Глава 8: Вызовы обработчиков прерываний

 

AX = DE07h

При возврате ненулевое значение AH означает неудачу, но если AH = 00h, то

 

EBX – считанное состояние управляющего регистра CR0.

Примечание 1: способ доступа к EBX и другим 32-разрядным регистрам из

 

программ DOS показан в разделе 7.02-06.

8.03-73

INT 67\AX=DE08h-DE09hобращение к отладочным регистрам

В отличие от операций доступа к отладочным регистрам посредством команды MOV (примечание 1 к 7.03-58), данные служебные функции VCPI-серверов действуют в защищенном режиме на третьем уровне привилегий. Поскольку роль сервера VCPI в MS-DOS7 играет драйвер EMM386.EXE (5.04-02), постольку перед

обращением к

INT 67\AX=DE07h–DE09h нужно убедиться, что драйвер

EMM386.EXE загружен и активизирован (примечание 1 к 8.03-62), а также что

обслуживание функций VCPI не запрещено параметром /noVCPI (5.04-02).

При вызове:

 

AX

= DE08h – считывание из отладочных регистров в буфер

 

= DE09h – запись из буфера в отладочные регистры

ES:DI – указатель на 32-байтовый буфер с данными или для данных

При возврате:

 

AH

код завершения (A.06-1); при успешном завершении AH = 00h.

Примечание 1: буфер заполняется данными по 4 байта на регистр, начиная с регистра DR0 и кончая DR7, причем данные из регистров DR4 и DR5 не выводятся. При записи соответствующие им 8 байт игнорируются. Роль каждого отладочного регистра описана в разделе A.11-5.

8.03-74 INT 67\AX=FFA5h – получение адреса API драйвера EMM386.EXE

Данная функция, введенная стандартом LIM EMS версии 4.2, уникальна тем, что исполняется резидентным модулем драйвера EMM386.EXE (5.04-02) даже тогда, когда он находится в неактивном состоянии и игнорирует все другие запросы. Это не исключает, однако, необходимости проверять факт загрузки драйвера (примечание 1 к 8.03-62) перед вызовом INT 67\AX=FFA5h.

При вызове:

 

AX

= FFA5h

При возврате:

 

AH

= 84h – сигнатура успешного завершения, и тогда

BX:CX – адрес вызова API-функций драйвера EMM386.EXE.

– 469 –

Глава 8: Вызовы обработчиков прерываний

Примечание 1: переход командой CALL FAR (7.03-08) по адресу BX:CX вызывает исполнение операции, определяемой значением в регистре AX:

AX = 0100h – перевод EMM386.EXE в активное состояние; AX = 0101h – перевод EMM386.EXE в пассивное состояние; AX = 0500h – выведение сообщения о текущем состоянии.

Если UMB-блоки или EMS-страницы задействованы, то запрос на перевод EMM386.EXE в пассивное состояние не будет исполнен.

8.03-75 INT 70 – INT 77: обслуживание запросов IRQ 8 – IRQ 15

Эта группа обработчиков прерываний обслуживает запросы, поступающие по линиям IRQ 8 – IRQ 15 от устройств компьютера ко второму контроллеру прерываний, который, в свою очередь, посылает вызовы в линию IRQ 2 первого контроллера прерываний (8.01-09). Поступление запроса по каждой из линий IRQ 8

– IRQ 15 может быть заблокировано путем посылки в порт A1h бита маски, указанного в третьей колонке приведенной ниже таблицы. Некоторые линии выделены для приема запросов от определенных устройств, указанных в четвертой колонке таблицы, но остальные готовы принять запрос от любого устройства, если

оно сконфигурировано для посылки запроса по этой линии и поддерживается драйвером, загружающим обработчик соответствующего прерывания.

Вызов

Линия

Маска

Источник запросов

Примечания

INT 70

IRQ 8

бит 0

Такты реального времени

*1

INT 71

IRQ 9

бит 1

-

-

INT 72

IRQ 10

бит 2

-

-

INT 73

IRQ 11

бит 3

-

-

INT 74

IRQ 12

бит 4

-

*2

INT 75

IRQ 13

бит 5

Арифметический сопроцессор

-

INT 76

IRQ 14

бит 6

Первый IDE-контроллер

-

INT 77

IRQ 15

бит 7

-

*3

Примечание 1: вызовы INT 70 следуют 1024 раз в секунду. Во многих системах BIOS следование тактов выключено и включается только в интервалах ожидания (INT 15\AH=83h, 8.01-73).

Примечание 2: вероятным источником запросов по линии IRQ 12 является "мышь",

подключенная к порту PS2, если она используется.

Примечание 3: наиболее вероятным источником запросов по линии IRQ 15 является второй IDE-контроллер или SCSI-контроллер, если хотя бы один из них имеется.

– 470 –

ГЛАВА 9 Примеры композиции исполняемых файлов

Все примеры интерпретируемых, исполняемых и конфигурационных файлов, представленных в 9-й главе, проверены на нескольких разных AT-совместимых компьютерах с процессорами от 486SL (1992-го года) до Pentium-D (2006-го года). Тем не менее предусмотреть все заранее невозможно. Правильнее рассматривать представленные примеры как рекомендуемые схемы, из которых каждому предоставлена возможность выбрать и использовать то, что ему нужно. Несмотря на различия в частностях, с некоторыми базовыми действиями и базовыми условиями придется иметь дело каждому, кто намерен работать в DOS.

Для преобразования книжного текста в файл нужно запустить на исполнение программу редактирования, которая могла бы сохранять неформатированный текст. Из тех программ редактирования, которые поставляются в составе операционной системы Windows, программы WORD и WORDPAD для этого не годятся. Подойдут программы NOTEPAD и EDIT.COM, но для введения национального текста в комментариях годится только EDIT.COM, и то при условии правильной установки драйверов национальной адаптации для DOS (примеры в

разделах 9.01 и 9.04).

В меню FILE программы редактирования пункт NEW открывает новый пустой файл и предоставляет Вам возможность ввести текст. Если не оговорено иное, тексты файлов из этой книжки нужно вводить построчно без отступа слева, вплотную к левой кромке текстового поля. Набранный текст надо сохранить командой SAVE AS из меню FILE программы редактирования, при этом для файла будут запрошены имя и суффикс. Поскольку суффикс определяет роль файла (2.01-02), постольку batch-файлы должны получить суффикс *.BAT, командные файлы для отладчика DEBUG.EXE – суффикс *.SCR, разные конфигурационные файлы суффиксы *.SYS, *.MNU или *.EXT.

Длинные файлы рекомендуется сохранять по мере их набора, первый раз командой SAVE AS, и потом несколько раз до завершения набора командой SAVE. Если файл приходится корректировать "на ходу" или набирать "с чистого листа", то полезно проводить тестирование набираемого текста по частям, как показано в разделе 9.07-02. Миссия программы редактирования завершается, когда файл с заданным Вами именем полностью набран, проверен и сохранен.

Для успешного исполнения или интерпретации набранного файла должны быть подготовлены определенные условия. Если в конкретных случаях не оговорено иное, то по умолчанию предполагается следующее:

– 471 –

Глава 9: Примеры композиции исполняемых файлов

имя резидентного командного интерпретатора (Command.com или его заменяющего) вместе с полным путем к нему должны быть определены в переменной окружения COMSPEC;

не допускается присвоение атрибутов H (скрытый) и S (системный) ни одной из программ, которые предстоит вызывать по ходу исполнения набранного файла (примечание 1 к 9.11-02);

все программы, которые приходится вызывать по ходу исполнения, должны быть размещены в каталогах, пути к которым перечислены в значении переменной окружения PATH (2.02-02);

ни в текущем каталоге, ни вдоль путей, записанных в переменную окружения PATH, не должно быть одноименных программ, непригодных для работы в среде используемой версии MS-DOS;

переменная окружения TEMP должна указывать путь к существующему каталогу, предназначенному для записи временных файлов и предоставляющему достаточно свободного места для этой цели.

Важно подчеркнуть, что в каталоге для временных файлов не должно быть таких файлов, которые нельзя было бы удалить или перезаписать. Перед запуском программ полезно командой SET проверить установленные значения переменных окружения. И значения переменных окружения, и другие условия исполнения программ задаются заранее в конфигурационных файлах, разные образцы которых приведены в разделах 9.04 и 9.09. Но начинать надо, конечно, с самых простых конфигурационных файлов, показанных в следующем разделе 9.01.

9.01Примеры простых конфигурационных файлов.

Процесс загрузки MS-DOS7 зависит от многих факторов, и его результат может выглядеть по-разному. Загрузчик файл IO.SYS – принимает во внимание параметры, записанные в файл MSDOS.SYS (5.01-01), а также состав группы предоставляемых ему файлов DOS. Полный список файлов DOS, которые должны находиться в корневом каталоге загрузочного диска, приведен в разделе 9.11-02. В этом списке имеются два необязательных, но очень важных конфигурационных файла: CONFIG.SYS и AUTOEXEC.BAT. Именно от них зависит та конфигурация MS-DOS7, которая получится в результате загрузки. MS-DOS7 способна загружаться и без них, но принимаемая по умолчанию конфигурация слишком бедна и служить образцом никак не может.

Чтобы MS-DOS7 предстала перед пользователем эффективной, удобной и дружественной, пользователю надо самому побеспокоиться о составлении соответствующих конфигурационных файлов. Для работы на современных

компьютерах даже простые конфигурации содержат драйверы расширенной памяти, "мыши" и оптического дисковода. Невозможно представить себе удобство

– 472 –

Глава 9: Примеры композиции исполняемых файлов

пользования MS-DOS7 без подходящего файл-менеджера. Показываемые в данном

разделе примеры простых конфигурационных файлов включают также стандартную загрузку национальных кодовых страниц.

Простые конфигурационные файлы потенциально пригодны для загрузки MS-DOS7 со сменных носителей, однако область их целесообразного применения это установка MS-DOS7 на жесткий магнитный диск: либо временная установка после форматирования диска, либо постоянная установка при выборочной альтернативной загрузке нескольких операционных систем (9.11-02).

9.01-01 Файл CONFIG.SYS: простой вариант.

Файл CONFIG.SYS – это интерпретируемый командный файл: каждая его строка представляет собой команду. Термин "интерпретируемый" означает, что команды исполняются процессором не непосредственно, а через особую программу

командный интерпретатор. По отношению к командам из файла CONFIG.SYS интерпретатором является загрузчик IO.SYS.

В приведенном ниже файле CONFIG.SYS загрузка всех драйверов показана в явной форме согласно предпочтительному порядку. Предполагается, что драйверы находятся в каталоге \DOS\DRV. Если Вы используете другую структуру каталогов, то спецификации путей надо будет соответствующим образом изменить. Обратите внимание, что в спецификациях путей не указана буква диска. Такие спецификации годятся для загрузки с любого диска.

device=\DOS\DRV\Himem.sys device=\DOS\DRV\Emm386.exe ram v dos=high,umb,noauto buffershigh=20,0

fileshigh=30

lastdrivehigh=Z

fcbshigh=1,0

stackshigh=9,256 numlock off

country=007,866,\DOS\DRV\Country.sys

devicehigh=\DOS\DRV\Dblbuff.sys

devicehigh=\DOS\DRV\Ifshlp.sys

devicehigh=\DOS\DRV\Setver.exe devicehigh=\DOS\DRV\Display.sys con=(ega,,1) devicehigh=\DOS\DRV\Oakcdrom.sys /D:CD001 installhigh=\DOS\DRV\Mscdex.exe /D:CD001 /E /L:O /M:13 installhigh=\DOS\DRV\Mouse.com

shell=\Command.com \ /E:2016 /L:511 /U:255 /p

– 473 –

Глава 9: Примеры композиции исполняемых файлов

Пояснения к композиции всех использованных здесь команд имеются в главах 4 ("Конфигурационные команды") и 5 ("Драйверы"). Большинство драйверов взято из каталогов \Windows и \Windows\Command операционных систем Windows-95/98,

за исключением драйверов MOUSE.COM (5.03-02) из поставки MS-DOS6.22 и OAKCDROM.SYS (5.09-01), который скопирован с загрузочной дискеты, создаваемой операционными системами Windows-95/98. Существует много других драйверов "мыши" и драйверов оптических дисков (GMOUSE.COM, VIDE-CDD.SYS, ECSCDIDE.SYS и др.), которые способны работать с разными моделями устройств и также могут быть применены здесь.

Порядок строк в файле CONFIG.SYS должен подчиняться следующему общему правилу: драйверы, обеспечивающие поддержку исполнения любой функции, должны быть загружены раньше, чем возникнет потребность в исполнении этой функции. Драйверы, обеспечивающие доступ к расширенной памяти (HIMEM.SYS и затем EMM386.EXE) должны быть загружены командами DEVICE раньше, чем этот доступ потребуется для исполнения команд DEVICEHIGH и INSTALLHIGH. Команды INSTALL и INSTALLHIGH, используемые для загрузки исполняемых драйверов, размещают после всех команд DEVICE и DEVICEHIGH, но перед строкой с командой SHELL. Строка загрузки драйвера SETVER.EXE должна предшествовать строке загрузки любого другого драйвера, которому требуется подмена версии DOS. Хотя таких драйверов в данном файле CONFIG.SYS нет, загрузка SETVER.EXE позволит в дальнейшем использовать программы из других версий DOS (PRINT.EXE, QBASIC.EXE, TREE.COM и др.).

Важную роль играет параметр NOAUTO команды DOS в 3-й строке: он исключает загрузку по умолчанию ряда драйверов (DBLBUFF.SYS, DRVSPACE.BIN, HIMEM.SYS, IFSHLP.SYS) и их поиск. В значительной степени благодаря параметру NOAUTO становится возможным использование MS-DOS7 как самостоятельной операционной системы.

Еще обратите внимание на путь к файлу COMMAND.COM, указываемый в последней строке: он сокращен до одного знака обратной косой черты. Этого достаточно, чтобы найти файл COMMAND.COM в корневом каталоге текущего диска, но недостаточно для полноценного определения пути к нему в переменной окружения %COMSPEC%. Конечно, можно указать букву диска и здесь. Примеры строк загрузки файла COMMAND.COM с указанием буквы диска для переменной %COMSPEC% приведены в разделах 4.26 и 6.04. Однако бывает неудобно заменять букву диска в нескольких местах каждый раз, когда данный комплект конфигурационных файлов приходится использовать для загрузки MS-DOS с другого диска. Поэтому здесь задание буквы диска отложено до исполнения последнего конфигурационного файла AUTOEXEC.BAT (9.01-02). Это позволяет

обойтись корректированием буквы диска только в одном месте и открывает возможность автоматизации процесса определения того диска, с которого производится загрузка (такие примеры показаны в разделах 9.01-03 и 9.09-02).

– 474 –

Глава 9: Примеры композиции исполняемых файлов

9.01-02 Файл AUTOEXEC.BAT: простой вариант.

Поскольку функциональные возможности загрузчика IO.SYS ограничены,

постольку некоторые конфигурационные операции нельзя представить командами файла CONFIG.SYS. Такие операции должны быть представлены в другом конфигурационном файле – AUTOEXEC.BAT. Он тоже является командным интерпретируемым файлом, но его миссия состоит в том, чтобы задействовать возможности более мощного командного интерпретатора – COMMAND.COM – для выполнения ряда заключительных конфигурационных операций.

Представленный здесь пример файла AUTOEXEC.BAT предполагает наличие на загрузочном диске структуры каталогов: каталога \TEMP для временных файлов и каталога \DOS с подкаталогами \DOS\OTH, \DOS\MS7, \DOS\VC4, \DOS\DRV.

Такая структура подойдет и для дискет, и для жестких магнитных дисков. Но если Вы используете другую структуру каталогов, то все пути и ссылки должны быть соответствующим образом изменены. Также надо иметь ввиду, что файл написан для случая загрузки с диска C:. Если потребуется загружать компьютер с другого диска, то букву диска C: во второй строке файла необходимо будет заменить на букву того диска, с которого придется загружаться. Заметьте, что это единственное упоминание буквы загрузочного диска, которое надо корректировать. После этого во всех остальных местах нужная буква диска будет проставлена автоматически.

Ниже приведен текст предлагаемой простой версии файла AUTOEXEC.BAT.

@echo off set dsk=C:

set comspec=%dsk%\Command.com

if not exist TEMP\nul %comspec% nul /f /c md TEMP if exist TEMP\nul set Temp=%dsk%\TEMP

prompt $p$g

set dircmd= /A /O:GNE /P path ;

path=%dsk%\DOS\VC4;%dsk%\DOS\OTH;%dsk%\DOS\MS7;%dsk%\ Mode.com con codepage prepare=((866) %dsk%\DOS\DRV\Ega3.cpi) Mode.com con codepage select=866

Keyb.com ru,866,%dsk%\DOS\DRV\Keybrd3.sys set VC=%dsk%\DOS\VC4

Vc.com /TSR /no2E /noswap

Первая строка файла отключает отображение строк на экране дисплея, как это обычно делается почти во всех batch-файлах. Во второй строке буква текущего диска записывается в переменную окружения %dsk%. При наборе нельзя оставлять пробелы в конце этой строки. Многочисленные ссылки на переменную %dsk% в последующих строках введут букву диска в состав всех спецификаций, где ее

– 475 –

Глава 9: Примеры композиции исполняемых файлов

наличие требуется. Именно благодаря ссылкам оказывается возможным указывать букву текущего диска только один раз (во второй строке). Третья строка вводит букву диска в значение переменной COMSPEC, которое не было сформировано должным образом при интерпретации файла CONFIG.SYS. С этого момента MS-DOS7 подготовлена к смене текущего диска.

Строки 4 и 5 занимаются каталогом TEMP для временных файлов. Сначала проверяется наличие этого каталога. Если он не существует, то предпринимается попытка его создать. Потом его наличие проверяется еще раз, и в случае успеха путь к нему записывается в переменную TEMP. Такая процедура гарантирует создание каталога для временных файлов на любом записываемом диске. С другой стороны, отсутствие значения у переменной TEMP после такой процедуры будет однозначно свидетельствовать о загрузке с незаписываемого диска.

Далее следует группа операций присвоения значения другим переменным окружения: %DIRCMD%, %PROMPT%, %PATH%. Показанные значения представляют собой примеры, которые надо корректировать согласно Вашим задачам и фактической структуре каталогов на Вашем диске. Предполагается, что значение переменной %PATH% (2.02-02) включает пути ко всем программам, которые будут вызваны в последующих строках: MODE.COM, KEYB.COM и VC.COM, а также все те пути, которые Вы захотите добавить.

Вызовы программ MODE.COM и KEYB.COM активизируют желаемую

национальную кодовую страницу для знакогенератора и желаемую таблицу раскладки для клавиатуры. Если Вам нужна не русская кодовая страница 866, а какая-либо другая, то Вы вправе ее сменить, но при этом необходимо проверить по таблице A.02-2, содержат ли указанные здесь файлы данных (EGA3.CPI и KEYBRD3.SYS) требуемые национальные данные. Если нет, то эти файлы нужно будет заменить тоже. Разумеется, при выборе американской (437-й) кодовой страницы все строки с вызовами программ MODE.COM и KEYB.SYS становятся не нужны, потому что эта кодовая страница устанавливается по умолчанию.

Последние две строки файла AUTOEXEC.BAT служат для запуска файл-менеджера Volcov Commander (6.25). Другие файл-менеджеры, например, Norton Commander (NC.EXE) и Dos Navigator (DN.EXE), могут быть запущены на исполнение аналогичным образом. Если Вы не намерены использовать файл-менеджер и хотите управляться с MS-DOS7 из "голой" командной строки, то последние две строки файла AUTOEXEC.BAT будут просто не нужны.

9.01-03 Автоматическое определение буквы диска в ходе загрузки.

Было бы удобно иметь такой комплект конфигурационных файлов, которые сами определяли бы букву текущего диска по ходу загрузки. Такую адаптацию несложно реализовать, если Вы уже ассемблировали программу Reassign.com,

– 476 –

Глава 9: Примеры композиции исполняемых файлов

предложенную в разделе 9.06, или уже имеете какую-либо функционально эквивалентную программу. Нужно всего лишь заменить операцию задания конкретной буквы диска ("set dsk=C:") во 2-й строке файла AUTOEXEC.BAT (9.01-02) следующими двумя строками:

set dsk=33 \DOS\OTH\Reassign.com dsk

В любом случае путь перед именем вызываемой программы должен указывать на тот каталог, где эта программа реально находится. В результате исполнения

этих двух командных строк буква текущего диска становится значением переменной окружения %dsk%, а потом она автоматически вводится во все остальные спецификации в ходе дальнейшего исполнения файла AUTOEXEC.BAT.

Автоматическое определение текущего диска возможно и без использования дополнительных программ, исключительно с помощью стандартных средств MS-DOS, но реализация получается не настолько простой и, помимо прочего, требующей доступа к записываемому диску. Поэтому приведенный ниже вариант файла AUTOEXEC.BAT нельзя использовать при загрузке MS-DOS7 с дисков CD-ROM. Предпочтительный вариант его использования однократная установка на жесткий магнитный диск после форматирования.

@echo off

if exist ..\nul goto L19

prompt=@echo off$_Set dsk$q$N:$_goto L7 %comspec% /f /c $.bat > $.bat

type Autoexec.bat >> $.bat

for %%Z in ("del A" "ren $.bat A" "A") do %%Zutoexec.bat :L7

set comspec=%dsk%\Command.com set Temp=%dsk%\TEMP

if not exist %Temp%\nul md %Temp% prompt $p$g

set dircmd= /A /O:GNE /P path ;

path=%dsk%\DOS\VC4;%dsk%\DOS\OTH;%dsk%\DOS\MS7;%dsk%\ Mode.com con codepage prepare=((866) %dsk%\DOS\DRV\Ega3.cpi) Mode.com con codepage select=866

Keyb.com ru,866,%dsk%\DOS\DRV\Keybrd3.sys set VC=%dsk%\DOS\VC4

Vc.com /TSR /no2E /noswap :L19

Строки с 8-й по 18-ю представленного варианта файла AUTOEXEC.BAT выполняют обычные операции, какие были описаны в разделе 9.01-02. Но строки 2

– 477 –

Глава 9: Примеры композиции исполняемых файлов

– 6 и расстановка меток специфичны для данного варианта. Для упрощения ориентации цифры в составе меток совпадают с номерами соответствующих строк.

Во второй строке представленного файла производится проверка того, имеется ли каталог, являющийся родительским по отношению к текущему. Если такой каталог имеется, то текущий каталог заведомо не является корневым, и тогда сразу происходит переход на конечную метку L19. Значит, вне корневого каталога данный batch-файл фактически не будет исполняться. Он будет исполняться только после того, как будет перемещен в корневой каталог диска. Только тогда проверка во 2-й строке позволит пройти к исполнению 3-й строки.

В третьей строке команда PROMPT (3.22) задает новую форму приглашения командной строки, которая выводится лишь однажды, при запуске командного интерпретатора в 4-й строке. Там командный интерпретатор формально исполнит пустой batch-файл $.BAT, только что созданный операционной системой при подготовке к перенаправлению, указанному правее в той же 4-й строке. Результат будет записан в тот же batch-файл $.BAT. Поскольку в нем первоначально ничего не было, туда запишется только приглашение командной строки, то самое, которое было задано в 3-й строке. Для определенности допустим, что текущим является диск D:, тогда содержимое batch-файла $.BAT после исполнения 4-й строки будет выглядеть так:

@echo off Set dsk=D: goto L7

Обратите внимание, что буква диска во второй строке файла $.BAT не была задана в команде PROMPT, это реальная буква текущего диска, вписанная операционной системой при формировании приглашения командной строки.

Команда TYPE в следующей 5-й строке файла AUTOEXEC.BAT считывает весь текст файла AUTOEXEC.BAT и через перенаправление вывода приписывает его снизу к показанным выше трем строкам файла $.BAT.

В 6-й строке файла AUTOEXEC.BAT цикл FOR исполняет подряд три операции, образуемые посредством последовательных подстановок трех значений локальной переменной %%Z. Первая подстановка дает команду

del Autoexec.bat

и файл AUTOEXEC.BAT перестает существовать. Затем в результате второй

подстановки получается команда

ren $.bat Autoexec.bat

и прежний файл $.BAT оказывается переименован в AUTOEXEC.BAT.

Последняя третья подстановка дает

– 478 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]