Операционная система MS DOS (том 2)

DOS не разочаровала пользователей компьютеров


Версия 5.0 операционной системы MS- DOS не разочаровала пользователей компьютеров и программистов. Преимущества столь значительны и заметны, что уже не может быть оправдания для приверженцев версии 3.30 или даже 4.01. Перечислим только основные нововведения.

  • Возможность загрузки ядра DOS в так называемую верхнюю память. Эта память расположена за пределами первого мегабайта оперативной памяти, что позволяет выделить для программ пользователя до 630 (!) килобайт свободного пространства.


  • При работе MS-DOS версии 5.0 на компьютере, оснащенном процессором 80386 или 80486

    возможна выгрузка драйверов и резидентных программ в расширенную память. Для этого можно использовать драйвер EMM386.


  • Новая диалоговая оболочка DOSSHELL

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


  • Многие функции и прерывания MS-DOS, которые были недокументированы в предыдущих версиях, получили "признание", отныне программисты могут использовать их на законных основаниях. Особенно это относится к функциям, обеспечивающим работу резидентных программ.


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


  • Сразу отметим, что функция 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).
    Содержание раздела