DOS не разочаровала пользователей компьютеров
Версия 5.0 операционной системы MS- DOS не разочаровала пользователей компьютеров и программистов. Преимущества столь значительны и заметны, что уже не может быть оправдания для приверженцев версии 3.30 или даже 4.01. Перечислим только основные нововведения.
возможна выгрузка драйверов и резидентных программ в расширенную память. Для этого можно использовать драйвер EMM386.
обеспечивает переключение задач. Это еще не мультизадачность, так как все запущенные программы, кроме одной, приостанавливают свою работу и выгружаются на диск. В любой момент времени работает только одна программа, остальные ждут своей очереди на диске. Возможности переключателя задач будут рассмотрены в разделе "Переключатель задач".
Сразу отметим, что функция 30h прерывания INT21h, возвращающая версию MS-DOS, может ввести вас в заблуждение. Возможно, вы будете сильно удивлены, когда в среде MS-DOS версии 5.0 эта функция сообщит о том, что у вас MS-DOS версии 3.30 или даже 1.0. Как это может быть?
В состав MS-DOS версии 5.0 входит драйвер SETVER.EXE.
Этот драйвер поддерживает список имен программ, в котором каждому имени поставлен в соответствие номер версии MS-DOS, возвращаемый функцией 30h.
При запуске программы драйвер SETVER.EXE сверяет ее имя со списком (который, кстати, вы можете редактировать) и модифицирует соответствующим образом обработчик функции 30h.
Для чего потребовалось вводить программы в заблуждение относительно используемой версии MS-DOS?
Дело в том, что некоторые программы (а также драйверы) рассчитаны на работу только в среде конкретной версии MS-DOS, например, 4.00 или 4.01. На самом деле эти программы будут правильно работать и в MS-DOS версии 5.0. Но проверив версию, такие программы часто завершают свое выполнение с сообщением об ошибке в номере версии.
Вы можете получить список таких программ, просто запустив SETVER.EXE как обычную программу.
Как же получить "правильный" номер версии MS-DOS?
Для этого необходимо использовать функцию 3306h
прерывания INT 21h.
Приведем формат этой функции.
Регистры на входе:
Регистр | Содержимое |
AX | 3306h |
Регистры на выходе:
Регистр | Содержимое |
BH | Верхний (major) номер версии. |
BL | Нижний (minor) номер версии. |
DL | Биты 0..2 содержат номер изменения (revision), остальные биты равны 0. |
DH | Флаги: Бит 3 - DOS находится в ПЗУ; Бит 4 - DOS загружен в старшие адреса памяти (область HMA) |
Функция 30h в версии MS-DOS также претерпела некоторые изменения. Если при вызове этой функции в регистр AL записать значение 00h, все будет аналогично версиям 2.0-4.0. Если в AL
записать 01h, после возврата регистр BH
будет содержать флаги, по которым можно судить о расположении MS-DOS в ПЗУ или в старших адресах памяти.
Приведем полный формат вызова функции 30h
прерывания INT 21h.
Регистры на входе:
Регистр | Содержимое |
AH | 30h |
AL | 00h - получить код ОЕМ (код фирмы-изготовителя DOS) и версию DOS; 01h - получить флаги расположения DOS. |
Регистры на выходе:
Регистр | Содержимое |
AL | Верхний (major) номер версии. |
AH | Нижний (minor) номер версии. |
BX:CL | 24-битовый серийный номер конкретного экземпляра MS-DOS |
BH | Если при вызове функции AL был равен 0: Код фирмы-изготовителя: 00h - IBM; 05h - Zenith; 16h - DEC; 23h - Olivetti; 29h - Toshiba; 4Dh - Hewlett Packard; 99h - архитектура STARLITE; FFh - Microsoft, Phoenix. Если при вызове функции AL был равен 1: 08h - DOS расположен в ПЗУ; 10h - DOS загружен в старшие адреса памяти (область HMA). |