Dos fn 0eh установить текущий диск dos


Содержание

Операционная система MS-DOS

3.1. Получение справочной информации

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

Если вы запускаете программу, которая находится в каком-либо каталоге на одном из дисков, то эти диск и каталог становятся текущими для MS-DOS. Это можно понимать в том смысле, что программе не требуется каждый раз при работе с файлами указывать требуемый диск или каталог.

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

Для установки текущего диска можно использовать функцию 0Eh, которая имеет следующий формат вызова:

На входе: AH = 0Eh
DL = Номер дисковода (0 — А:, 1 — В:, и т.д.)
На выходе: AL = Общее количество дисководов в системе. Эта величина соответствует параметру LASTDRIVE файла CONFIG.SYS.

Для того чтобы узнать номер текущего дисковода, программа может воспользоваться функцией 19h:

На входе: AH = 19h
На выходе: AL = Номер текущего дисковода (0 — А:, 1 — В:, и т.д.).

Функция 3Bh предназначена для установки текущего каталога:

На входе: AH = 3Bh
DL = Номер дисковода (0 — текущий, 1 — А:, 2 — В:, и т.д.)
DS:DX = Адрес буфера, содержащего путь каталога, который должен стать текущим.
На выходе: AX = Код ошибки, если CY установлен в 1.

Буфер пути может иметь максимальный размер 64 байта. Он должен содержать путь в формате ASCIIZ, т.е. строку, закрытую двоичным нулем, например: «path\dirname»,0. Строка не должна содержать литеры, обозначающие диск. Если текущим должен стать корневой каталог, строка должна состоять только из одного двоичного нуля.

Для того чтобы узнать текущий каталог, вы можете воспользоваться функцией 47h:

На входе: AH = 47h
DL = Номер дисковода ( — текущий, 1 — А:, 2 — В:, и т.д.)
DS:SI = Адрес буфера для записи пути текущего каталога.
На выходе: AX = Код ошибки, если флаг переноса CF установлен в 1.

Буфер должен иметь размер не менее 64 байтов, текущий каталог возвращается в формате ASCIIZ без литеры, обозначающей диск. Если текущим является корневой каталог, регистровая пара DS:SI будет указывать на нулевую строку (состоящую из одного двоичного нуля).

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

Информация о таблице размещения файлов FAT для текущего диска может быть получена с помощью функции 1Bh прерывания INT 21h, имеющего следующий формат:

На входе: AH = 1Bh
На выходе: DS:BX = Адрес первого байта FAT. Это байт ID идентификации среды носителя данных, соответствует байту media в блоке параметров BIOS.
DX = Общее количество кластеров на диске.
AL = Количество секторов в одном кластере.
CX = Количество байтов в одном секторе.

Дополнительно эта функция возвращает информацию об общем количестве кластеров на диске, размере кластера в секторах и размере сектора в байтах. Для версий MS-DOS, более ранних, чем 2.0, регистровая пара DS:BX указывала на FAT, считанный в память. Более поздние версии операционной системы могут содержать по этому адресу только часть таблицы размещения файлов.

Для получения аналогичной информации не о текущем, а о любом диске, используйте функцию 1Ch. Эта функция полностью аналогична предыдущей, за исключением того, что в регистре DL должен быть указан код дисковода: — текущий, 1 — А:, 2 — В: и т.д. Эта функция доступна в MS-DOS версии 2.0 и в более поздних версиях.

Если вас интересует размер свободного места на диске, вы можете его узнать с помощью функции 36h, имеющей следующий формат:

На входе: AH = 36h
DL = Номер дисковода ( — текущий, 1 — А:, 2 — В:, и т.д.)
На выходе: AX = Количество секторов в кластере; 0FFFFh, если был задан неправильный номер дисковода;
BX = Количество свободных кластеров на диске.
CX = Количество байтов в одном секторе.
DX = Общее количество кластеров на диске.

Эта функция возвращает в регистре AX число 0FFFFh, если вы неправильно указали номер дисковода.

При обсуждении векторной таблицы связи мы рассказывали о блоках управления устройствами DDCB. Поле dev_cb векторной таблицы связи содержит FAR-адрес цепочки этих блоков.

Приведем еще раз формат блока DDCB. Напомним, что он изменяется в зависимости от версии DOS. Для версий 2.х и 3.х блок DDCB имеет следующий формат:

(0) 1 drv_num номер устройства ( соответствует устройству А:, 1 — В: и т.д.)
(+1) 1 drv_numd дополнительный номер устройства внутри драйвера
(+2) 2 sec_size размер сектора в байтах
(+4) 1 clu_size число, на единицу меньшее количества секторов в кластере
(+5) 1 clu_base если содержимое этого поля не равно нулю, то для получения общего числа секторов в кластере надо возвести 2 в степень clu_base и получившееся число прибавить к clu_size
(+6) 2 boot_siz количество зарезервированных секторов (boot-сектора, начало корневого каталога)
(+8) 1 fat_num количество копий FAT
(+9) 2 max_dir максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное число файлов, которое может содержать корневой каталог на этом устройстве)
(+11) 2 data_sec номер первого сектора данных на диске (номер сектора, соответствующего кластеру номер 2)
(+13) 2 hi_clust максимальное количество кластеров (равно увеличенному на 1 количеству кластеров данных)
(+15) 1 fat_size количество секторов, занимаемых одной копией FAT
(+16) 2 root_sec номер первого сектора корневого каталога
(+18) 4 drv_addr FAR-адрес заголовка драйвера, обслуживающего данное устройство
(+22) 1 media байт описания среды носителя данных
(+23) 1 acc_flag флаг доступа, означает, что к устройству был доступ
(+24) 4 next адрес следующего блока DDCB, для последнего блока в поле смещения находится число FFFF
————— только для DOS 2.x —————
(+28) 2 dir_clu номер начального кластера текущего каталога (0 для корневого каталога)
(+30) 64 dir_path строка в формате ASCIIZ, содержащая путь к текущему каталогу
————— DOS 3.х —————————-
(+28) 2 reserv1 зарезервировано, обычно равно 0
(+30) 2 built число FFFF в этом поле означает, что блок DDCB был построен

Формат блока DDCB для DOS версии 4.х:

(0) 1 drv_num номер устройства ( соответствует устройству А:, 1 — В: и т.д.)
(+1) 1 drv_numd дополнительный номер устройства внутри драйвера
(+2) 2 sec_size размер сектора в байтах
(+4) 1 clu_size число, на единицу меньшее количества секторов в кластере
(+5) 1 clu_base если содержимое этого поля не равно нулю, то для получения общего числа секторов в кластере надо возвести 2 в степень clu_base и получившееся число прибавить к clu_size
(+6) 2 boot_siz количество зарезервированных секторов (boot-сектора, начало корневого каталога)
(+8) 1 fat_num количество копий FAT
(+9) 2 max_dir максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное число файлов, которое может содержать корневой каталог на этом устройстве)
(+11) 2 data_sec номер первого сектора данных на диске (номер сектора, соответствующего кластеру номер 2)
(+13) 2 hi_clust максимальное количество кластеров (равно увеличенному на 1 количеству кластеров данных)
(+15) 1 fat_size количество секторов, занимаемых одной копией FAT
(+16) 1 reserv1 зарезервироано
(+17) 2 root_sec номер первого сектора корневого каталога
(+19) 4 drv_addr FAR-адрес заголовка драйвера, обслуживающего данное устройство
(+23) 1 media байт описания среды носителя данных
(+24) 1 acc_flag флаг доступа, означает, что к устройству был доступ
(+25) 4 next адрес следующего блока DDCB, для последнего блока в поле смещения находится число FFFF
(+29) 2 reserv2 зарезервироано
(+31) 2 built число FFFF в этом поле означает, что блок DDCB был построен

Файл sysp.h содержит определение типа DDCB для MS-DOS версии 4.х:

При описании векторной таблицы связи мы приводили примеры использования блоков DDCB. Для получения адреса блока DDCB конкретного дисковода можно воспользоваться недокументированной функцией 32h. Она имеет следующий формат вызова:

На входе: AH = 32h
DL = Номер дисковода ( — текущий, 1 — А:, 2 — В:, и т.д.)
На выходе: AL = 0, если был задан правильный номер дисковода;
0FFh, если был задан неправильный номер дисковода;
DS:BX = Адрес блока DDCB

Для получения адреса блока DDCB текущего диска можно воспользоваться недокументированной функцией 1Fh, которая имеет формат, аналогичный функции 32h, за исключением того, что не надо задавать номер дисковода в регистре DL.

Какая еще полезная информация может быть получена при использовании функций MS-DOS?

С помощью функции 33h программа может проверить или установить флаг Ctrl-Break и узнать номер диска, с которого выполнялась загрузка операционной системы:

На входе: AH = 33h
AL = Код подфункции:
— Проверить текущее состояние флага Ctrl-Break;
1 — Установить флаг Ctrl-Break;
5 — Определить номер диска, который был использован для загрузки операционной системы.
DL = Значение устанавливаемого флага Ctrl-Break для подфункции 1 (0 — OFF, 1 — ON).
На выходе: DL = Текущее состояние флага Ctrl-Break для подфункции 0;
Номер диска, использованного для загрузки операционной системы для подфункции 5 (1 — А:, 2 — В:, и т.д.).

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

Состояние флага Ctrl-Break влияет на возможность прервать выполнение программы нажатием комбинации клавиш Ctrl-Break или Ctrl-C. Если флаг находится в состоянии OFF, DOS проверяет эту комбинацию клавиш только при вызове функций стандартного ввода/вывода на консоль, принтер и последовательный порт. Если флаг установлен в состояние ON, комбинация клавиш проверяется и при вызове других функций MS-DOS. Если операционная система зафиксировала нажатие указанной комбинации клавиш, она выполняет прерывание INT 23h, которое завершает работу текущей программы.

Функция 2Fh возвращает в регистровой паре ES:BX адрес текущей области DTA (Disk Transfer Area), которая используется при поиске файлов в каталогах.

Функция 54h позволяет программе узнать текущее состояние флага проверки записывающейся на диск информации. В регистре AL эта функция возвращает текущее состояние флага. Если содержимое регистра равно 1, операционная система после записи сектора считывает его для проверки. Разумеется, такая проверка снижает скорость работы программы. Если после вызова функции регистр AL содержит 0, проверка записи не выполняется.

Для установки флага проверки записи можно использовать функцию 2Eh. Перед вызовом функции в регистр AL необходимо занести новое значение флага проверки: — проверка не нужна; 1 — должна выполняться проверка записанной информации.

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат несколько функций, облегчающих получение справочной информации о состоянии дисковой подсистемы.

Функция _dos_getdiskfree() использует функцию 36h для получения информации о диске. Файл dos.h содержит описание этой функции:

Параметр drive задает номер используемого дисковода: — текущий, 1 — А:, и т.д.

Информация возвращается в структуре diskfree_t, которая определена в файле dos.h:

В этой структуре:

unsigned total_clusters общее количество кластеров на диске;
unsigned avail_clusters количество свободных кластеров;
unsigned sectors_per_cluster количество секторов, занимаемых кластером;
unsigned bytes_per_sector размер сектора в байтах.

Для получения номера текущего диска и для установки номера текущего диска можно использовать, соответственно, функции _dos_getdrive() и _dos_setdrive().

Функция _dos_getdrive() имеет формат:

Эта функция пользуется функцией 19h для получения номера текущего диска, который записывается по адресу, задаваемому параметром. Значение 1 соответствует диску А:, 2 — В:, и т.д.

Функция _dos_setdrive() предназначена для установки текущего диска и может быть использована для определения общего числа дисков в системе:

Параметр drive опеределяет текущий диск (1 — А:, и_т.д.), по адресу, задаваемому вторым параметром, функция записывает общее количество логических дисков, установленных в системе. Функция _dos_setdrive() использует функцию 0Eh прерывания INT 21h.

Для иллюстрации способов использования функций _dos_getdrive(), _dos_setdrive(), _dos_getdiskfree() мы составили следующую программу:

Как установить MS-DOS?

18.06.2011, 20:57

Как установить win7 из под MS-DOS
Как установить win7 на чистый ноут бук с MS-DOS? Создал загрузочный диск , поставил приорететы , но.

Ноутбук Lenovo Ideapad 320-15ISK с DOS, подскажите как установить win
В школу купили Ноутбук Lenovo Ideapad 320-15ISK с DOS, подскажите: 1. не знаю разрядность системы.

MS-DOS: не получается установить системные файлы с флоппи-дисковода на жесткий диск
Здравствуйте, отдельной ветки по ms dos не нашел, поэтому решил сюда написать, ищу совета у более.

WmWare и DOS, как скопировать в DOS файлы
есть MS_DOS в wmWare как скопировать туда асcемблерные файлы с основного компа?

Как установить win7 на lenovo 590 с dos?
Очень нужна помощь. Купил ноут но он без винды с досом. Есть диск двд-рв с win7. Я с него уже.

18.06.2011, 21:41 2 18.06.2011, 21:51 3

Преимущества установки MS-DOS на жесткий диск:
не нужно всегда держать под рукой загрузочный диск или флешку, чтобы работать с DOS-программами;
загрузка с жесткого диска осуществляется быстрее, чем с CD/DVD-диска или флешки;
если DOS устанавливается на первый раздел HDD, то на нем в последствии можно будет разместить также файл подкачки Windows XP для ускорения доступа к этому файлу.

Недостатки:
установленная MS-DOS с минимальным набором необходимых утилит занимает дисковое пространство (до 10 Мб);
потеря времени на установку;
загрузка компьютера замедляется из-за добавления диалога выбора загружаемой ОС;
лишнее дробление дискового пространства небольших жестких дисков из-за создания под DOS отдельного раздела.

Перед установкой MS-DOS на жесткий диск необходимо выделить для нее отдельный основной раздел с файловой системой FAT32 (FAT16 также поддерживается, но не рекомендуется), и сделать его активным. Для этого можно воспользоваться программами, описанными в статье «Разбиение HDD».

Раздел, на который устанавливается DOS, рекомендуется делать размером 1..3 Гб, в зависимости от общих размеров жесткого диска и целей использования этого раздела. На нем можно разместить системные файлы и утилиты для DOS, а в последствии — небольшие Windows-программы, не требующие установки, а также образ системного раздела. Если MS-DOS устанавливается перед Windows XP, то на этом разделе также будут размещены загрузочные файлы Windows XP.

MS-DOS рекомендуется устанавливать с помощью утилиты SYS.COM. Преимущества этого метода:
не нужен диск с дистрибутивом MS-DOS;
устанавливается набор только необходимых пользователю утилит и компонентов;
у пользователя вырабатывается понимание работы ОС, что может пригодиться в дальнейшем при ее отладке или восстановлении.
Недостаток метода: относительная сложность из-за ручного ввода команд и текста конфигурационных файлов.

Для корректной работы утилиты SYS.COM ее версия должна совпадать с версией ОС MS-DOS, из которой она запускается. Поэтому рекомендуется использовать самостоятельно созданные загрузочные флешки или CD/DVD-диски, хотя также можно воспользоваться и специальными мультизагрузочными дисками других разработчиков.
Помимо этого, в корне диска, с которого загружалась MS-DOS, должны быть три системных файла этой ОС: командный процессор COMMAND.COM и файлы ядра — IO.SYS и MSDOS.SYS. В ходе установки они будут скопированы на выбранный диск. Также скопируется файл DRVSPACE.BIN, который после установки Windows XP можно будет удалить.

Для установки этим способом нужно загрузить MS-DOS с загрузочной флешки или CD/DVD-диска, на которых установлена эта ОС, и выполнить команду (ввести в командной строке и нажать Enter)

SYS.COM C: — для установки MS-DOS на диск C:, системные файлы берутся с текущего диска;
SYS.COM D: A: — для установки MS-DOS на диск D:, системные файлы берутся с диска A:.

Если планируется использование MS-DOS до установки Windows XP, то на данном этапе нужно настроить MS-DOS для эффективной работы:
скопировать с флешки или компакт-диска на раздел с MS-DOS набор всех необходимых драйверов и утилит, лучше — в отдельную папку;
скопировать (если были заранее созданы) или создать конфигурационные файлы CONFIG.SYS и AUTOEXEC.BAT, содержание которых определяет набор драйверов и программ, ипользуемых при загрузке MS-DOS.

Если до установки Windows XP использование MS-DOS не планируется, то эти настройки проще выполнять в уже установленной Windows.

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

Если MS-DOS устанавливается перед Windows XP, то после выполнения всего вышесказанного можно сразу приступать к установке Windows XP.

Однако, если MS-DOS устанавливается уже после Windows XP, то для правильной установки потребуется больше действий:
С помощью программ для разбиения HDD — из существующих разделов выделить новый основной FAT32-раздел для установки на него MS-DOS и назначить его активным.
Установить MS-DOS одним из описанных выше способов. Настройку на данном этапе можно не выполнять.
Сохранить загрузочный сектор (boot record) раздела, на который установлена MS-DOS, в файл bootsect.dos. Это можно сделать, например, с помощью Norton Disk Editor (Object > Boot Record, затем Tools > Write Object To > to a File).
С помощью программ для разбиения HDD сделать вновь активным раздел, который был им до установки MS-DOS, и загрузиться в Windows XP.
Скопировать сохраненный файл bootsect.dos в корень диска C:. После этого в любом текстовом редакторе открыть файл C:\boot.ini и в разделе [operating systems] дописать строку:
C:\bootsect.dos=»MS-DOS»
Выполнить настройку MS-DOS: скопировать нужные утилиты и драйверы, а также сконфигурировать файлы CONFIG.SYS и AUTOEXEC.BAT.

Примечание: после первой смены активного раздела (шаг 1) загрузка Windows XP будет временно невозможна, поэтому необходимо использовать DOS-программы для работы с разделами на следующих шагах. Следовательно, нужно заранее позаботиться о загрузочной флешке или CD/DVD-диске с набором нужных программ.

Dos fn 0eh: установить текущий диск dos

Вообще, по ходу дела, для загрузочной дискеты ДОС нужно было, чтобы io.sys находился в первых секторах дискеты. как сейчас — не знаю, не знаю.

вот еще интересный вопрос. как наваять autoexec.bat и config.sys, имея только загрузочную дискету с драйвером mscdex и CD-ROM?

4. DeadPihto , 30.10.2003 20:24
Как вариант:
В config.sys
Device = %PATH%\»драйверCD-ROM.sys» /D:mscd001
В autoexec.bat
%PATH%\mscdex.exe /D:MSCD001

Где:
%PATH% =путь к файлу

5. Ильясла , 30.10.2003 20:45
vaio
>copy con yourfile.txt
bla-bla-bla
bla-bla-bla
[Ctrl+Z]

Добавление от 30.10.2003 21:09:

цитата: Lina Inverse:
To Андрон:
А в чем проблема достать sys.com?
.

готовлю серию дискет с дискавыми утилитами в которых хочу использовать dr-dos, а на тех дисках которые имеются есть только аналоги вышеперечисленныз трех файлов. Можно выкрутиться и через какой нибудь дубликатор но в данном случае преобладает скорее спортивный интерес

6. Андрон , 30.10.2003 21:03
7. SergeyO , 30.10.2003 21:14
Андрон
МС-ДОС (любой версии) прокатывает такой способ: если дискета была когда-то загрузочной, то можно просто скопировать IO.SYS, MSDOS.SYS, COMMAND.COM
8. Zim , 30.10.2003 21:53
Андрон
Проверь почту
9. Андрон , 31.10.2003 00:14
Спасибо, очень полезная дискетка, обязательно положу такую в комплект.

хочу сделать дискету с мултибутом которая бы давала возможность быстрой загрузки, даже без драйверов памяти. большинству дос утилит они не нужны, а время на загрузку отнимают.
Столкнулся с поблемой несовместимости MENUITEM между MS-DOS и DR-DOS — ищу документацию, пока безуспншно.

цитата (Андрон):
Помнится раньше работал такой способ:
форматируеш дискету, копируеш IO.SYS, затем MSDOS.SYS, и наконец COMMAND.COM

НО это было еще в дос 3.3, сейчас ничего не получается, может что забыл?

Ни в MS-DOS, ни в PC DOS такой способ не работал никогда. Ни до версий 3.3, ни после. А вот в DR DOS такая возможность была. Там не было привязки к сектору дискеты, на который передавалось управление из загрузчика. Достаточно было того, чтобы сами файлы присутствовали. И назывались они, между прочим, не IO.SYS и MSDOS.SYS, а так же, как и в PC DOS — IBMBIO.COM и IBMDOS.COM.

цитата (Андрон): Столкнулся с поблемой несовместимости MENUITEM между MS-DOS и DR-DOS — ищу документацию, пока безуспншно.

Несовместимость была даже между PC DOS и MS-DOS, не говоря уже о DR DOS (позднее — Novell DOS, ныне — Caldera Open DOS). В полной версии дистрибутива был хелп. Ищи дистрибутив.

Надо в архивах пятидюймовок порыться, у меня с 5-й версии по 7-ю все дистрибутивы были.

10. Старый Пе , 31.10.2003 01:19
11. yurfed , 31.10.2003 05:05
[b]Андрон[/b]
[q=Андрон]хочу сделать дискету с мултибутом которая бы давала возможность быстрой загрузки, даже без драйверов памяти. большинству дос утилит они не нужны, а время на загрузку отнимают. Столкнулся с поблемой несовместимости MENUITEM между MS-DOS и DR-DOS — ищу документацию, пока безуспншно.[/q]

Could someone please tell me how to do this in DR-DOS? Thanks.

A: Here is a sample CONFIG.SYS that will do the job. You can keep your autoexec.bat like in MS-DOS (you get an environment parameter CONFIG that you can use in auotexec.bat to specify the operations you want to do).


timeout=5
echo=1. Server
echo=2. DR-DOS
switch server, drdos
exit
:server
set config=server
return
:drdos
set config=drdos
Files=60
Buffers=20
Device=c:\CDROMDRV.SYS /D:CD001
return

Это отсюда http://www.drdos.net/faq/#p4_4_6

12. Akina , 31.10.2003 09:47
Андрон
Помнится раньше работал такой способ
он и сейчас работает — даже в ДОСе от МЕ. При условии что на дискете:

1) родной, от MS, generic boot sector;
2) файл IO.SYS (IBMBIO.COM) записан в первом элементе каталога (для ДОС 5.0 и младше).

format a:
copy io.sys a:\*.*
echo. > msdos.sys
copy command.com a:\*.*

делает нормальную загрузочную дискету.

vaio
для загрузочной дискеты ДОС нужно было, чтобы io.sys находился в первых секторах дискеты.
До ДОС 6.0 невключительно.

Андрон
без SYS.COM а /s есть не что иное как ктаткое к ней обращение
бред.

13. A_Bittner , 31.10.2003 10:04
И чего вы так мучаетесь?
http://www.bootdisk.com/bootdisk.htm

цитата (Akina):
Андрон
Помнится раньше работал такой способ
он и сейчас работает — даже в ДОСе от МЕ. При условии что на дискете:

1) родной, от MS, generic boot sector;
2) файл IO.SYS (IBMBIO.COM) записан в первом элементе каталога (для ДОС 5.0 и младше).

format a:
copy io.sys a:\*.*
echo. > msdos.sys
copy command.com a:\*.*

делает нормальную загрузочную дискету.

Не подходит такой способ, если нет загрузчика. Даже, если загрузчик раньше присутствовал, команда format a: этот загрузчик убьёт. И уж с этой дискеты загрузиться не получится. Рекомендую проверить, кстати. (При условии, что мы обсуждаем версии DOS от M$).

Другое дело, если отформатировать в том же DR DOS (Novell, Caldera). Там этот способ вполне может сработать — там другой формат загрузчика. Проверить пока не могу, но желание сделать это появилось.

14. Старый Пе , 01.11.2003 01:07
15. M-X , 02.11.2003 00:22
Андрон

Можно попробовать Norton Ghost.

16. 65536 , 02.11.2003 02:24
Старый Пе
Не подходит такой способ, если нет загрузчика. Даже, если загрузчик раньше присутствовал, команда format a: этот загрузчик убьёт. И уж с этой дискеты загрузиться не получится. Рекомендую проверить, кстати.
Странно, у меня этот способ работает, но только если форматировать format’ом от Win98, а если от WinXP, то не работает. Интересно, в чём между ними разница?

Добавление от 02.11.2003 02:32:

А-а, разобрался, в boot sector’е. Осталось его дизассемблировать, чтобы понять, в чём именно отличие.

17. Сергеич , 02.11.2003 11:47
Старый Пе

цитата:
Ни в MS-DOS, ни в PC DOS такой способ не работал никогда. Ни до версий 3.3, ни после.

Милейший, не порите чепухи. еще в 1989 году в техникуме именно так и делали загрузочную дискету. версии были MS-DOS 3.0-3.3. Как ни странно все работало

18. Старый Пе , 02.11.2003 13:00
Сергеич

Милейший, не порите чепухи. еще в 1989 году в техникуме именно так и делали загрузочную дискету. версии были MS-DOS 3.0-3.3. Как ни странно все работало

Ну-ну. Вот 65536 тоже возразить пытался, а провёл эксперимент — чуть ли извиняться не пришлось.

Ещё раз объясняю — всё дело в загрузчике.

Добавление от 02.11.2003 14:38:

Добавлю — у команды format есть ключ /b, который позволяет зарезервировать место для файлов BIO (*BIO.COM, IO.SYS) и DOS (*DOS.COM, MSDOS.SYS). В этом случае дискета становится загрузочной при простом копировании трёх недостающих файлов. Но «правильный» загрузчик в таком случае запишется только при выполнении команды sys a:.

Тонкий нюанс — в каждой ОС размер зарезервированного места чётко соответствует размерам файлов именно этой версии DOS, а загрузчик «знает» эти файлы по именам, поэтому адекватная работа этого метода гарантируется только в одной и той же версии DOS.

Сергеич
еще в 1989 году в техникуме именно так и делали загрузочную дискету

Спишем на некоторую забывчивость. Времени всё же немало прошло.

19. Сергеич , 02.11.2003 16:15
Старый Пе
Загрузчик от MS-DOS 3.0 точно пишет в BOOT то что надо для загрузки(по крайней мере для загрузки DOS 3.0). правда его сейчас не найти практически, а то можно было бы над кодом поспорить. насчет забывчивости — не было у нас (в смысле У МЕНЯ конкретно) полного ДОСа, приходилось загрузочную дискеты делать именно Форматом с последующим перекачиванием IO.SYS и MSDOS.SYS. кстати есть исходники от MS-DOS 6.22 можно посмотреть загрузочный сектор. так вот он сам ищет IO.SYS на дискете даже если тот раскидан как хрен знает что.

Насчет загрузчика естессно все от него и зависит, может быть современные ОС пишут на дискету в BOOT-сектор полный понос. не буду писать третий раз одно и то же про 3.0

Добавление от 02.11.2003 17:04:

Кстати сейчас не поленился проделать опыт. отформатировал дискету из-под XP, скопировал IO.SYS MSDOS.SYS COMMAND.COM загрузка не пошла. отформатировал из-под ME, сделал то же самое. как ни странно все загрузилось. да собственно иначе и быть не могло

PS Естессно MSDOS.SYS пришлось немного поправить на предмет того чтобы не грузиться с винта
PPS Кстати 65536 именно про это и написал, под 98 все получилось. за что извиняться то?

PPPS Кстати откройте Boot от дискеты, созданной XP. как он будет грузить DOS? Там даже намека на IO.SYS нет. а если создать загрузочный диск то бутсектор становится другой.

20. Старый Пе , 03.11.2003 03:46
Сергеич
Загрузчик от MS-DOS 3.0 точно пишет в BOOT то что надо для загрузки(по крайней мере для загрузки DOS 3.0). правда его сейчас не найти практически, а то можно было бы над кодом поспорить. насчет забывчивости — не было у нас (в смысле У МЕНЯ конкретно) полного ДОСа, приходилось загрузочную дискеты делать именно Форматом с последующим перекачиванием IO.SYS и MSDOS.SYS. кстати есть исходники от MS-DOS 6.22 можно посмотреть загрузочный сектор. так вот он сам ищет IO.SYS на дискете даже если тот раскидан как хрен знает что.

Готовьтесь съесть свою шляпу, уважаемый.

Проведены практические эксперименты со следующими версиями операционных систем:
MS-DOS 3.20
MS-DOS 3.30
MS-DOS 4.0
MS-DOS 4.01 rus
Compaq DOS 3.31
PC DOS 3.30
PC DOS 6.3
PC DOS 7
PTS-DOS 6.41

Исключение составили версии от IBM, Compaq и Phys-Tech-Soft, где соответствующие файлы создавались с соответствующими операционной системе именами.

Во всех случаях получен одинаковый результат — невозможность загрузки. Non-bootable disk. и т.д. Исключение составила дискета с PTS-DOS — она сразу передала управление на MBR жёсткого диска.

Повторяю для тех, кто не может понять своей ошибки — команда format в ранних версиях DOS (мы обсуждаем именно их, по крайней мере с этого ветка началась) без дополнительных (кроме имени дисковода) параметров полностью переписывала Boot Record дискеты таким кодом, который не позволял с этой дискеты загрузиться. Изменить Boot Record (и сделать дискету загрузочной) можно было только применив команду sys a: к этой дискете, но до начала записи на неё.

Исключение составляли версии DOS от Digital Research (DR-DOS, позднее ставшая Novell DOS, ещё позднее — Caldera DOS). О них — в следующий раз.

Дополнительно хочу заметить, что в операционных системах Windows 9X и т.д. файл MSDOS.SYS не является исполняемым файлом, как это было до версии 6.22 включительно. Поэтому команда echo. > msdos.sys также лишена смысла. Не было в DOS таких команд, т.е. никому бы не пришло в голову написать такую командную строку.

Кстати сейчас не поленился проделать опыт. отформатировал дискету из-под XP, скопировал IO.SYS MSDOS.SYS COMMAND.COM загрузка не пошла. отформатировал из-под ME, сделал то же самое. как ни странно все загрузилось. да собственно иначе и быть не могло

Это нужно принять, как подтверждение Ваших упражнений еще в 1989 году в техникуме ? Вы с Windows ME в техникуме упражнялись?

PS Естессно MSDOS.SYS пришлось немного поправить на предмет того чтобы не грузиться с винта

Это Вы о чём? В нашем примере мы его создаём командой echo. > msdos.sys, ни о какой правке речь не идёт. Да и что там править, пардон, в таком случае?

PPS Кстати 65536 именно про это и написал, под 98 все получилось. за что извиняться то?

За вот это, я думаю. => Милейший, не порите чепухи. еще в 1989 году в техникуме именно так и делали загрузочную дискету. версии были MS-DOS 3.0-3.3. Как ни странно все работало

В Windows 98SE такой номер проходит — только что проверил. Но Вы утверждаете, что делали подобный трюк в DOS 3.xx, что явная неправда.

PPPS Кстати откройте Boot от дискеты, созданной XP. как он будет грузить DOS? Там даже намека на IO.SYS нет. а если создать загрузочный диск то бутсектор становится другой.

Тут я даже комментировать не могу. Без обид, ладно?

21. Vladislav_A , 03.11.2003 09:01
Старый Пе
Во всех случаях исполнялись следующие действия, как предлагалось здесь:
format a:
copy io.sys a:\*.*

echo. > msdos.sys[b] — а вот этого для DOS 3.x-6.x делать не следовало, надо было [b]copy msdos.sys a:\
copy command.com a:\*.*
. Во всех случаях получен одинаковый результат — невозможность загрузки.

Результат не удевителен, тем более, что если не полениться и посмотреть 0 сектор загрузочной и не зарузочной дискеты с помощью DiskEdit то можно обнаружить немало различий.
22. Akina , 03.11.2003 09:20
Старый Пе
Не подходит такой способ, если нет загрузчика

Читать умеем? generic boot sector. или Вы не в курсе что это такое?

65536
у меня этот способ работает, но только если форматировать format’ом от Win98, а если от WinXP, то не работает. Интересно, в чём между ними разница?
Сергеич
Кстати сейчас не поленился проделать опыт. отформатировал дискету из-под XP, скопировал IO.SYS MSDOS.SYS COMMAND.COM загрузка не пошла. отформатировал из-под ME, сделал то же самое. как ни странно все загрузилось. да собственно иначе и быть не могло

ХР вообще не знает о существовании загрузочной дискеты. Потому у него пишется abstract boot sector.

Старый Пе
Тонкий нюанс — в каждой ОС размер зарезервированного места чётко соответствует размерам файлов именно этой версии DOS, а загрузчик «знает» эти файлы по именам, поэтому адекватная работа этого метода гарантируется только в одной и той же версии DOS.

Слушай, а ты попробуй такую штуку — форматни дискету с резервированием пространства под системные файлы, а потом скопируй туда файлы от другой версии и загрузись с дискеты. будешь (не)приятно удивлен.

Проведены практические эксперименты со следующими версиями операционных систем:

передача текста без понимания смысла? Впрочем Vladislav_A уже правильно ткнул носом.

23. Сергеич , 03.11.2003 11:40
Какой смысл доказывать сейчас с пеной у рта, что я делал 13-14 лет назад? насчет ME в те времена — ну да, именно с ней и пробовал, была стыренная из мелкософта pre-pre-pre-pre-pre-pre-alpha. всегда удивлялся людям, которые сами ничего не могут, но не потому, что не умеют, а потому, «что этого не может быть». Еще как может. не поленитесь прислать бут от дискеты дос 3.0 после обычного формата, самому к сожалению взять негде. там и поговорим. Третий раз повторяю, что так делал не только я, а еще как минимум десяток человек.
24. Старый Пе , 03.11.2003 11:59
Vladislav_A
а вот этого для DOS 3.x-6.x делать не следовало, надо было copy msdos.sys a:\

Это не мне объяснять надо, а специалистам, утверждающим, что еще в 1989 году в техникуме именно так и делали загрузочную дискету. версии были MS-DOS 3.0-3.3. Как ни странно все работало. Из моего сообщения явно следует, что я понимаю эту разницу.

К тому же, в нашем случае это никого не спасёт — дискета не грузится не по этой причине.

Akina
Читать умеем? generic boot sector. или Вы не в курсе что это такое?

По всей видимости, Вы готовы объяснить, как его получить, используя format a: в DOS 3.xx-6.xx. С доказательством того, что загрузка с такой дискеты без модификации boot sector-а осуществима.

передача текста без понимания смысла? Впрочем Vladislav_A уже правильно ткнул носом.

Может и ткнул. Только у ж точно не меня.

цитата:
приходилось загрузочную дискеты делать именно Форматом с последующим перекачиванием IO.SYS и MSDOS.SYS.

цитата: а вот этого для DOS 3.x-6.x делать не следовало, надо было copy msdos.sys a:\

Это не мне объяснять надо, а специалистам, утверждающим, что еще в 1989 году в техникуме именно так и делали загрузочную дискету. версии были MS-DOS 3.0-3.3. Как ни странно все работало. Из моего сообщения явно следует, что я понимаю эту разницу.

Как все запущено.

Загрузочный сектор, записываемый на дискету в ДОС 3.0-6.22, при команде Format a:, имеет следующую последовательность команд:


; We now begin to load the BIOS in.
; All we have to do is just read is multiply the BioStartClus
; by SecsPerClust to find the logical sector for the start
; of the BIOS file. When this value is added to the double
; word BiosHigh:BiosLow we get the absolute sector offset
; for the start of the file and then read the sectors
; contiguously IBM_LOAD_SIZE times. We here assume that
; IBMLOAD module is contiguous. Currently we estimate that
; IBMLOAD module will not be more than 3 sectors.
DoLoad:
mov AX,[BX].DIR_FIRST ; AX = BIOS starting cluster
dec AX ; Subtract first 2 reserved clusters
dec AX
mov BL,SecsPerClust ; BX = Sectors per cluster
xor BH,BH
mul BX ; DX:AX = first logical sector of bios

add AX,[BiosLow] ; Add absolute start sector
adc DX,[BiosHigh] ; DX:AX = Absolute bios sector offset

mov BX,BIO_OFFSET ;offset of ibmbio(IBMLOAD) to be loaded.
mov CX,IBM_LOAD_SIZE ;# of sectors to read.

Do_While:
push AX
push DX
push CX
call DoDiv ; DX:AX = sector number.
jc Load_Failure ; Adjust stack. Show error message
mov al, 1 ; Read 1 sector at a time.
; This is to handle a case of media
; when the first sector of IBMLOAD is the
; the last sector in a track.
call DoCall ; Read the sector.
pop CX
pop DX
pop AX
jc CkErr ; Read error?
add AX,1 ; Next sector number.
adc DX,0
add BX,BytesPerSector ; Adjust buffer address.
loop Do_While

; =========================================================================
; Main read-in loop.
; ES:BX points to area to read.
; Count is the number of sectors remaining.
; BIOS$ is the next logical sector number to read
;
; CurrentHead is the head for this next disk request
; CurTrk is the track for this next request
; CurSec is the beginning sector number for this request
;
; AX is the number of sectors that we may read.
;
; =========================================================================
;
; IBMINIT requires the following input conditions:
;
; DL = INT 13 drive number we booted from
; CH = media byte
; IBMBIO init routine should check if the boot record is the
; extended one by looking at the extended_boot_signature.
; If it is, then should us AX;BX for the starting data sector number.
; =========================================================================

DISKOK:
mov CH,MediaByte
mov DL,BootDrv
mov BX,[BiosLow] ; J.K.I1.Get bios sector in bx
mov AX,[BiosHigh] ; J.K.I1.
jmp FAR PTR Bios ;CRANK UP THE DOS

Доступно написано(между просим самими программерами Мелкософта) что код грузит три первых сектора из IO.SYS, и передает на них управление. Поэтому копирование системных файлов после формата и дает в итоге загрузочную дискету(так как проблема может быть только если эти первые три сектора идут не подряд, тогда загрузится некоторое количество лажи). Повторяю, это тот бут-сектор, который записывает ОБЫЧНАЯ команда FORMAT A:

Дальнейший спор видится бессмысленным. видимо каждый останется при своем мнении

25. Сергеич , 03.11.2003 12:21
26. mwz , 03.11.2003 15:12
Akina

И всю жизнь начиная по крайней мере с DOS-3 копирование в этой последовательности

copy io.sys a:\*.*
copy msdos.sys a:\*.*
а не echo.>a:\msdos.sys — это уже сказано
copy command.com a:\*.*

давало системную дискету DOS той версии, откуда эти 3 файла — если дискета форматировалась в DOS/Win9x как несистемная, а файлы брались от любой из DOS, даже не той, в которой форматировалось. А вот форматирование под NT-family этого не позволит, что тоже уже сказано.

цитата (mwz):
И всю жизнь начиная по крайней мере с DOS-3 копирование в этой последовательности

copy io.sys a:\*.*
copy msdos.sys a:\*.*
а не echo.>a:\msdos.sys — это уже сказано
copy command.com a:\*.*

давало системную дискету DOS той версии, откуда эти 3 файла — если дискета форматировалась в DOS/Win9x как несистемная, а файлы брались от любой из DOS, даже не той, в которой форматировалось. А вот форматирование под NT-family этого не позволит, что тоже уже сказано.

И где грибы такие забористые растут, даже интересно.

Неужели Вы никогда не забывали в дисководе дискету и при перезагрузке не получали строчку «Non-System disk or disk error. Replace and press any key when ready»? Не верю! (с) Станиславский.

И Вы тоже будете утверждать, что достаточно на такую дискету перенести простым копированием файлы IO.SYS, MSDOS.SYS и COMMAND.COM, чтобы она чудесным образом превратилась в загрузочную?

Давно такого бреда не читал. Всем срочно читать Фигурнова.

27. КоляН , 03.11.2003 17:37


28. Akina , 03.11.2003 17:46
КоляН
Так вот — если при загрузке с дискеты выдается сообщение Non-System disk or disk error. Replace and press any key when ready — то именно такая дискета после копирования на нее IO.SYS, MSDOS.SYS и COMMAND.COM станет загрузочной.

Дискета, которая НЕ станет загрузочной, напишет другое сообщение — Non-bootable disk. Insert bootable disk and strike Enter when ready (или очень близкое к этому).

Вышеуказанное верно для MS-DOS 3.30-6.22. PC-DOS, DRDOS и прочие — не знаю.

Для проверки того станет ли дискета загрузочной, можно глянуть содержимое ее бут-сектора. Если он забит «под завязку», и в конце есть стандартные имена загрузочных файлов — эта дискета станет загрузочной после копирования на нее системных файлов, если же бут-сектор наполовину состоит из нулей — нет.

29. Сергеич , 03.11.2003 17:50
Неужели Вы никогда не забывали в дисководе дискету и при перезагрузке не получали строчку «Non-System disk or disk error. Replace and press any key when ready»? Не верю! (с) Станиславский.

И Вы тоже будете утверждать, что достаточно на такую дискету перенести простым копированием файлы IO.SYS, MSDOS.SYS и COMMAND.COM, чтобы она чудесным образом превратилась в загрузочную?

Уважаемый, а вам и невдомек видимо, что эту надпись выводит сам бут-сектор при необнаружении на дискете IO.SYS и MSDOS.SYS? И если ему их дать, то все пойдет как по маслу(на любой дискете отформатированной ДОС 2.0-6.22 или 95-98-ме)?

30. traveller2002 , 03.11.2003 19:13
A_Bittner
Я думаю, приятно людям вспомнить, как они под Win 98 форматировали дискету, а потом копировали на нее системные файлы от MS DOS 3.3.
31. mwz , 04.11.2003 01:38
КоляН
Фигурнова я читал ещё в 80-х, и не скажу, что это лучшее из книг по компьютерной тематике: Богумирский куда точнее и понятнее писал.

А таже Ливингстон, с его «Секретами. » по различным операционкам.

Впервые сам применил этот метод где-то в 80-х, на DOS то ли 3.3, то ли 4.01: не было на винчестере файлов SYS.COM и FORMAT.COM, да и прочих тоже (машина была обрезана по максимуму), а загрузочную дискету надо было сделать срочно.

Если интересует — могу прислать образы дискеты сразу после форматирования (час назад) под DOS-6.22 как несистемной, и её же — после последующего копирования трёх упомянутых файлов от той же DOS-6.22 (80 кил архив).

Некоторые уточнения по моим и другим высказываниям на эту тему:
(1) В DOS-6.22 порядок и месторасположение этих файлов в записи корневого каталога также существенны. Изменять порядок стало можно начиная с Win95.
(2) Если при DOS-форматировании была введена метка тома — до её удаления системной дискету методом прямого копирования не сделать: метка тома займёт первое место в записи корневого каталога, т.е. то, которое должен занимать io.sys.
(3) Файлы от Win9х не пойдут на дискете, форматированной в DOS-3. 6.22, и наоборот.

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

32. Старый Пе , 04.11.2003 04:54
Akina
Сергеич

Признаю свою неправоту. Привёл условия «эксперимента» к реальным (MSDOS.SYS) и всё заработало.

Но! Если разбираться по-хорошему, то ошибок в этой ветке достаточно, и не только у меня. И про необязательность записи файла IO.SYS первым, и про полную совместимость (и обратную применимость) загрузчика/системных файлов от старых версий DOS и новых (aka 7.XX, Win9X).

Зато архив пятидюймовых дискет разобрал. Много чего интересного нашёл.

Одного вот только не понял.

цитата (Akina): передача текста без понимания смысла? Впрочем Vladislav_A уже правильно ткнул носом.

Кто и кого ткнул носом? И в каком посте?

33. Akina , 04.11.2003 08:41
Старый Пе
Одного вот только не понял.
Насчет того что для версий 6.22 и младше MSDOS.SYS не создается через echo, а копируется (в старых версиях это был исполняемый файл, а не файл конфигурации). Очевидно же ж.
34. Сергеич , 04.11.2003 12:46
Ладно. разобрались и гут. теперь можно и
35. КоляН , 04.11.2003 13:31
mwz
Если интересует — могу прислать образы дискеты сразу после форматирования (час назад) под DOS-6.22 как несистемной, и её же — после последующего копирования трёх упомянутых файлов от той же DOS-6.22 (80 кил архив).

Хм-м-м. Интересует. И от 3.30, если есть.

Добавление от 04.11.2003 14:06:

Можно образы не высылать.

Вообще классно — условия эксперимента меняются по ходу эксперимента. То вы создаёте системные файлы «с нуля» в командной строке, то копируете. Разумеется, в виндовых DOS-ах (о как!) функции обоих системных файлов выполняет один IO.SYS, а раньше эти функции были разделены. Так что файл-пустышка будет работать только на дискете, созданной в Windows 95 (98, Me).

36. mwz , 04.11.2003 21:03
Так что файл-пустышка будет работать только на дискете, созданной в Windows 95 (98, Me).
Тут я согласен абсолютно — и отметил это для себя ещё при чтении соответствующих сообщений.

И от 3.30, если есть.
Я уже сказал, что тема некритична, и что от последующих экспериментов меня увольте. Да и искать DOS-3.3 желания нет — у меня не сохранилось ничего до 6.22.

Так как с уже имеющимися образами DOS-6.22, высылать или нет?

37. КоляН , 04.11.2003 21:11
mwz
Так как с уже имеющимися образами DOS-6.22, высылать или нет?

Да всё уже, проехали.

цитата (Akina):
Старый Пе
Одного вот только не понял.
Насчет того что для версий 6.22 и младше MSDOS.SYS не создается через echo, а копируется (в старых версиях это был исполняемый файл, а не файл конфигурации). Очевидно же ж.

А о чём тогда я здесь (http://forum.ixbt.com/topic.cgi? >

38. Старый Пе , 05.11.2003 01:16

цитата (Старый Пе): Сергеич
PPS Кстати 65536 именно про это и написал, под 98 все получилось. за что извиняться то?

За вот это, я думаю. => Милейший, не порите чепухи. еще в 1989 году в техникуме именно так и делали загрузочную дискету. версии были MS-DOS 3.0-3.3. Как ни странно все работало

Операционная система DOS на ноутбуке: что это такое

При выборе нового ноутбука многие пользователи сталкиваются с таким термином как DOS или Free DOS. Данный термин можно встретить в характеристиках многих современных устройств, при этом практически негде не объясняется, что он в действительности означает. В этой статье мы расскажем, что такое операционная система DOS на ноутбуке, зачем производители ее устанавливают и можно ли покупать компьютеры с этой ОС.

Что такое операционная система DOS

Аббревиатура DOS расшифровывается как Disk Operating System и обозначает операционную систему, ориентированную на работу с дисковыми накопителями, например, с дискетами или жесткими дисками.

Логотип Free DOS — самой популярной операционной системы DOS на данный момент.

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

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

Первые дисковые операционные системы появились в начале 60-х годов и активно использовались до конца 80-х. За это время появилось множество разных операционных систем, которые подпадают под определение термина DOS. Наиболее известными из них являются:

  • MS-DOS — операционная система от компании Microsoft, которая основана на 86-DOS от Seattle Computer Products. Впервые появилась в 1981 году и использовалась до середины 90-х, когда была вытеснена первыми версиями Windows.
  • PC DOS – операционная система от компании IBM. Появилась в 1981 году как исправленная версия MS-DOS 1.0.
  • Free DOS – бесплатная операционная система с открытым исходным кодом, разработку которой ведет программист Джим Холл. Первая официальная версия FreeDOS появилась в 2006 году.

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

Операционная система Free DOS и ноутбуки

Несмотря на то, что операционные системы DOS являются устаревшими, он все еще применяются в некоторых областях. Причем чаще всего используется именно Free DOS. Она имеет открытый исходный код и распространяется полностью бесплатно, что делает ее удобным инструментом для разработки. Например, Free DOS не редко применяется для управления промышленным оборудованием.

Интерфейс операционной системы Free DOS. Примерно это вы увидите при первом включении ноутбука с операционной системой DOS.

Еще одна сфера применения FreeDOS – это готовые компьютеры и ноутбуки, на которые Free DOS устанавливается с завода в качестве стандартной операционной системы. Это делается для того, чтобы не устанавливать на компьютер операционную систему Windows.

Отказ от использования Windows позволяет производителю немного сэкономить и снизить цену на данное устройство. Такой подход используют многие производители ноутбуков и готовых компьютеров, например, Dell, Asus, HP, Samsung и Lenovo. Кроме Free DOS в качестве стандартной операционной системы для ноутбука также может использоваться какой-нибудь Linux. В данном случае цель такая же – не использовать Windows и таким образом снизить цену.

Для покупателя ноутбука операционная система DOS означает только одно – установкой Windows придется заниматься самостоятельно, поскольку пользоваться компьютером с ОС DOS в современных условиях не реально. Поэтому, если вы умеете устанавливать Windows, то можете не переживать и смело покупать ноутбук с Free DOS. Если же вы хотите получить устройство, которое будет готово к работе сразу из коробки то стоит выбрать модель с предустановленной Windows, ну или хотя-бы Linux.

Уходим под DOS!

ДОС. Черной пеленой экран заполнил чистый ДОС.

Мышь. Стала вдруг квадратной, потеряла форму мышь.

Я разбил окно. «Виндовс»… Ненавистное, проклятое окно.

Я поставил ДОС и тогда увидел — это счастье, вот оно!

Песня неизвестного автора эпохи Windows

Современные операционные системы требуют всё больше и больше ресурсов: оперативной памяти, дискового пространства, быстродействия центрального процессора… Старые компьютеры приходится попросту выбрасывать, и даже блоки с процессорами Pentium или Pentium II с мониторами 14-15” сегодня практически ничего не стоят. Особенно жалко расставаться с ноутбуками на процессорах i386 и i486, которые ничем не хуже современных КПК, однако вряд ли удастся добавить им памяти, чтобы запустить более или менее современную операционную систему семейства Windows.

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

Дисковая Операционная Система (DOS)

Вопрос: Сколько сотрудников Microsoft нужно для смены перегоревшей лампы?

Ответ: Ни одного, так как Microsoft в таких случаях стандартизирует темноту!

Совсем недавно, как это порой кажется, то есть буквально каких-нибудь 10-15 лет назад на персональных компьютерах у большинства пользователей стояла операционная система MS-DOS. Эта система была довольно простой и вполне подходящей для многих целей, а для некоторых приложений и вообще оптимальной! Кстати, многие специализированные программы от перехода к новым операционным системам и возросшим мощностям ничего принципиально не выиграли, а, напротив, потеряли в удобстве интерфейса (который пришлось стандартизировать) и в простоте освоения.

Главное достоинство DOS (впрочем, как и главный недостаток) — тесное взаимодействие с аппаратурой. Операционные системы семейства Windows, как и различные вариации UNIX-подобных систем, все-таки отгораживаются от аппаратуры целым рядом стандартизованных интерфейсов высокого уровня и возвышаясь над железом, часто осложняют работу с ним, что неудобно, в частности, разработчикам какой-либо нестандартной аппаратуры. DOS же побуждает на взаимодействие с аппаратными средствами напрямую. Например, легкий доступ к железу позволяет работать с дисками на физическом уровне, а значит, можно организовывать копирование разделов независимо от типов их логического форматирования. Однако здесь же таятся и различные подводные камни, которые приводят к коллизиям при работе в этой операционной системе при небрежном программировании. В общем, система DOS требовала от программистов аккуратности, и в этом случае программы работали с максимальной эффективностью. Для DOS были написаны сотни тысяч программ, и аналогов некоторых из них в других ОС нет и, возможно, никогда уже не будет. К тому же требования к аппаратуре для запуска DOS были минимальными.

Однако в середине 90-х Билл Гейтс заявил: «DOS is dead». И действительно, уже после выхода MS Windows 95 и первых версий Linux стало очевидно, что дни DOS как массовой операционной системы сочтены. И хотя теоретически DOS еще долго будет находить применение в дешевых решениях при создании электронных микропроцессорных систем (некоторые варианты DR-DOS и PTS-DOS имеют ROM-версии, а также есть специальные ROM-версии таких систем, как Datalight ROM-DOS и General Software DOS-ROM для технических приложений), эти сферы применения очень узки и вряд ли могут поддержать существование подобных операционных систем в будущем.

Клавиши для редактирования команд в DOS

С началом XXI века последние коммерческие версии DOS прекратили свое существование. Последняя версия IBM PC-DOS датирована 2000 годом (она продавалась по 60 долл.), и тогда же вышла последняя полная версия PTS-DOS (это отечественная разработка фирмы «Физтех-софт»). В версии же PTS-DOS, выпущенной в 2002 году, появилась поддержка FAT32 и работы с большими объемами памяти, но исчезли некоторые полезные утилиты, не приспособленные к упомянутой поддержке. Последняя версия DR-DOS 8.0 (с поддержкой FAT32 и длинных имен файлов) датируется 2004 годом (она продавалась по 40 долл.). Кстати, теперь эта система называется Caldera OpenDOS, распространяется бесплатно в рамках проекта Open Source (то есть доступны исходные тексты этой системы), а скачать ее можно по адресу: http://www.opendos.de/download/.

Наконец, продолжает свое существование бесплатная версия FreeDOS, тоже с открытыми исходниками, но это уже, скорее, общественный проект энтузиастов, разбросанных по всему миру. Последняя версия этой ОС появилась в 2003 году, но поскольку различные части FreeDOS разрабатываются независимо, то она до сих пор больше напоминает Linux, чем DOS в классическом виде (в частности, полная инсталляция этой системы — такая же непростая операция). Впрочем, ни одна из альтернативных систем не имеет 100% совместимости с MS-DOS, а больше всего проблем с совместимостью у FreeDOS. Получается, что лучшей DOS по-прежнему остается «мертвая» MS-DOS. Официально последней версией MS-DOS была версия 6.22 от 1994 года, но MS-DOS версий 7.x существовали вместе с Windows 95/98/Me — их можно было отделять от оболочки Windows и использовать отдельно.

Однако с каждым годом обостряется проблема драйверной поддержки новых аппаратных средств — речь идет в первую очередь о USB-устройствах, приводах DVD-R/RW и т.д. Аналогичная проблема существует и для сетевых протоколов, и для новых форматов данных.

Освобожденный DOS

Хрюкнул жесткий диск, и железо тихо зашуршало под столом.

Загрузилось сразу. Эй, давай-ка мы посмотрим, что почем!

Выходи под ДОС и лучше поработай головой!

Посмотри же сам: ведь ДОС не сказка, это правда, он с тобой!

Песня неизвестного автора эпохи Windows

FreeDOS (http://www.freedos.org/) — довольно современная бесплатная и совместимая с MS-DOS операционная система, поддерживаемая энтузиастами по всему миру. Сегодня FreeDOS, по сути, остается единственной альтернативой для тех, кто хочет использовать версию операционной системы DOS и написанного для нее ПО, ведь современная аппаратура нуждается в драйверной поддержке, а такие коммерческие проекты, как PC-DOS, DR-DOS и PTS-DOS, уже прекратили свое существование. FreeDOS будет работать как на старых аппаратных средствах или в эмуляторах DOS, так и на новой аппаратуре и в различных встроенных системах. FreeDOS — это ценный ресурс для тех людей, которые желают создавать собственную операционную систему, отличную от продукции Microsoft.

Основные возможности FreeDOS:

  • простое изготовление загрузочных мультисистемных дисков для Linux, Windows 2000/XP и других ОС;
  • поддержка FAT32 для больших дисков;
  • поддержка LFN (в командном режиме с 4DOS);
  • собственная реализация LBACACHE (дискового кэширования для ускорения записи/чтения);
  • собственный эффективный менеджер памяти;
  • поддержка любых магнитооптичеких носителей (FDCDEX- и CD-ROM-приводов);
  • драйверы мыши с поддержкой колесиков и многокнопочных возможностей;
  • реализация FDAMP (контроля/информации за системами питания современных компьютеров (APM)), экономичные режимы для резидентных программ (TSR/control), эффективное кэширование обмена данными, управляемая перезагрузка и т.д.;
  • поддержка UDMA (драйвер режимов Ultra DMA для DOS) — поддержка до четырех жестких дисков неограниченного объема.

В последние годы стали свободно распространяться и некоторые превосходные программы для разработчиков под DOS, среди которых компиляторы Watcom C, C++ и Fortran (известные высоким качеством генерируемых кодов); Borland Turbo C; Free Pascal (полностью совместимый с Borland Pascal и частично с Delphi); отличный, быстро развивающийся макроассемблер FASM (качество генерируемых им кодов выше, чем у некоторых известных ныне коммерческих ассемблеров), а также такие Интернет-браузеры, как Arachne и Bobcat. А благодаря системе DJ Delorie, для DOS доступны практически все базовые средства Linux (gcc, g++, gdb, bash, grep и др.).

Работа с USB под DOS

Слезы на очках. Странные очки, а может, это слезы на лице?

ДОС очистил всё! Всё, что было лишним у меня на диске «Ц».

Я нажал «Ф8», и веселый «Нортон» удалял мне всё подряд:

Сорок мегабайт, а может, больше. может, даже шестьдесят.

Песня неизвестного автора эпохи Windows

Использование USB-диска (флэшки) в качестве загрузочного (см. статью «Многоликие USB-флэшки») дает интересную возможность: если распространять какую-то программу на таком диске вместе с DOS, то ее можно использовать на любом компьютере, независимо от установленной операционной системы на жестком диске (для этого, правда, необходимо чтобы BIOS материнской платы поддерживала загрузку с USB-устройств).

Однако далеко не все материнские платы поддерживают загрузку с USB-дисков (а если и поддерживают, то на компьютерах с процессором не ниже Pentium III), а во времена DOS поддержки USB Flash Drive вообще не было. Поэтому даже если вы захотите просто прочитать с флэшки под DOS (например, загрузившись с аварийной дискеты), то вам понадобятся для этого специальные драйверы, которые были написаны гораздо позже периода активного использования DOS.

Существует несколько подобных драйверов для поддержки USB-устройств, написанных различными фирмами для своих целей, поскольку базовых средств поддержки USB-устройств нет ни в одной альтернативной DOS-системе, даже в FreeDOS. Наиболее популярными являются драйверы от японской компании Panasonic (Matsushita), и хотя компания писала их для своих устройств, но драйверы получились универсальными и работают с большинством USB-накопителей, соответствующих спецификациям UHCI- (старые устройства USB 1.x), или OHCI- (устройства USB 1.x следующего поколения, где работа осуществляется не через порты ввода-вывода, как прежде, а через области памяти, что получается быстрее), или, наконец, EHCI-стандарта (USB 2.0). Драйверы компании Panasonic являются 16-разрядными и работают с любой версией DOS.

Для поддержки USB-накопителей прежде всего необходим драйвер ASPI, сохранивший свое название от Advanced SCSI Programming Interface. Основным драйвером является файл USBASPI.SYS (Panasonic v2.06 ASPI Manager for USB mass storage), который вы должны скопировать на системную дискету и вызвать при загрузке DOS из config.sys следующей строкой:

DEVICE=USBAPSI.SYS /v /w /e /noprt /norst

В данном случае параметр /v (Verbose) означает использование режима подробного вывода информации об устройстве, а параметр /w (Wait) будет останавливать загрузку до того момента, пока к USB-разъему не будет подключено устройство и нажата клавиша Enter.

Кроме этих параметров у USBASPI.SYS есть и другие. Общая строка вызова будет выглядеть так:

Однако все остальные параметры, кроме вышеупомянутых /v и /w, малоинтересны, и можно применять их значения по умолчанию. Если же у вас возникнут какие-то проблемы с распознаванием USB-устройства, то можно попробовать использовать другие параметры. Так, иногда помогает ключ /noprt. Отметим, что параметр /l[=n] явно указывает номер логического устройства (LUN), поэтому его задание может ускорить загрузку (по умолчанию n = 0). К тому же иногда бывает полезно явно указать спецификацию USB (/e — это EHCI; /o — OHCI; /u — UHCI).

Таким образом, если драйвер USBASPI.SYS распознает ваше USB-устройство, то он обеспечит ему ASPI-интерфейс. Однако для того, чтобы получить доступ к USB-устройству из DOS, вам понадобится еще и драйвер диска DI1000DD.SYS (ASPI mass storage driver) от компании Novac, который будет назначать этому USB-устройству соответствующую букву в ряду других накопителей (почему-то этот драйвер у производителя называется Motto Hairu USB Driver). В файле config.sys следует прописать его отдельной строкой:


В состав пакета для работы с USB-устройствами от Panasonic входит также файл RAMFD.SYS, который создает RAM-диск, и на него целиком копируется загрузочная дискета, чтобы ускорить работу под DOS.

Кроме того, в пакете есть специальные драйверы USBCD.SYS, которые позволяют подключать внешние CD-приводы с USB-интерфейсом.

Соответствующие строчки в файле config.sys вашей загрузочной дискеты должны выглядеть примерно так:

REM Загрузка универсального USB-драйвера от Panasonic

DEVICEHIGH=USBASPI.SYS /v /w /e /noprt /norst

REM Присвоение устройству буквы

REM Загрузка драйвера CD-ROM

DEVICEHIGH =USBCD.SYS /d:USBCD001

Если же у вас есть CD-привод с интерфейсом USB, то в командном файле autoexec.bat надо добавить следующие строчки:

REM Монтирование USB CD-ROM

Теперь, даже если вы не хотите работать под DOS, а просто собираетесь загрузиться с аварийной дискеты, сделать резервную копию жесткого диска на USB-накопитель при помощи программы Paragon Drive Backup, скопировать системный диск при помощи программы Powerquest Drive Image или воспользоваться средствами Norton Ghost, то вы сможете осуществить это, загрузив соответствующие драйверы поддержки USB Flash Drive под DOS.

Сложности в применении драйверов от Panasonic могут возникнуть при использовании EMM386.EXE (менеджера памяти под DOS). Если у вас возникает ошибка, связанная с размещением (mapped memory), то необходимо отключить загрузку EMM386.EXE или воспользоваться USB-драйверами от других компаний. Кроме того, может случиться, что ваша флэшка может неправильно распознаваться драйвером USBASPI.SYS или что драйвер DI1000DD.SYS выдаст сообщение о неправильных данных в загрузочном секторе USB-накопителя, — в этих случаях можно попробовать подготовить флэш-диск непосредственно в DOS: запустить, например, программу fdisk.exe, создать на флэшке primary DOS partition и отформатировать ее в FAT. Однако некоторые флэшки нельзя форматировать, так как после этого они могут работать некорректно или вообще перестанут распознаваться. Поэтому перед подобной процедурой обязательно узнайте у производителя о возможности форматирования USB-накопителя и поищите специальную фирменную утилиту для этой операции. В любом случае лучше вначале попробовать все возможные драйверы и их настройки для подключения USB-устройства в DOS и только потом, если ни один из методов не сработает, прибегнуть к более рискованным экспериментам.

Помимо драйверов от Panasonic, существуют USB-драйверы производства компании Cypress, которые работают с EMM386.EXE без конфликтов, так что отключать менеджер памяти (если он необходим вам) в этом случае заведомо не понадобится. К тому же у Cypress DUSE есть только драйвер диска DUSE.EXE (ASPI mass storage driver), который назначает USB-устройству соответствующую букву, так что ASPI-менеджер все равно понадобится: можно взять тот же вышеописанный USBASPI.SYS и заменить только драйвер DI1000DD.SYS на DUSE.EXE. Драйвер DUSE.EXE можно прописать в файле config.sys как драйвер устройства (DEVICE), например:

REM Загрузка универсального USB-драйвера

DEVICEHIGH=USBASPI.SYS /v /w /e /noprt /norst

REM Присвоение устройству буквы

А можно просто вызвать DUSE.EXE в командном файле autoexec.bat как программу при помощи специального загрузчика DUSELDR.EXE:

Компания DAT Optic (http://www.datoptic.com/) предлагает свое решение для подключения USB-устройств — это пакет DAT.EXE, который изготавливает загрузочную дискету для MS-DOS. Там содержатся драйвер USBASPI.SYS от компании Medialogic Corp, NJ32DISK.SYS от компании Workbit Corp и даже драйвер SBP2ASPI.SYS от Medialogic Corp для подключения устройств по интерфейсу IEEE-1394 (FireWire). USBASPI.SYS от Medialogic практически идентичен драйверу USBASPI.SYS от Panasonic, но имеет меньше параметров, NJ32DISK.SYS от компании Workbit выполняет те же функции, что и DI1000DD.SYS от Novac. Использование драйвера SBP2ASPI.SYS для FireWire-устройств аналогично ASPI-драйверу для USB.

Основные ключи для загрузки SBP2ASPI.SYS из CONFIG.SYS следующие:

  • /V — информирование при запуске;
  • /H:n, где n — это число от 0 до 9, которое показывает логический номер устройства OHCI-1394;
  • /RES — принудительная загрузка в память и нахождение там (TSR) даже в том случае, если не обнаружены устройства;
  • /RBC — ключ режима работы устройства. Прежде, согласно стандартам команд SCSI-дисков, определялось два режима — полный (SBC) и сокращенный (RBC). По умолчанию SCSI-диски работали в SBC-режиме, поэтому ASPI ожидает от них именно этого и не работает с RBC-устройствами без явного указания.

Если SBP2ASPI.SYS переименовать в SBP2ASPI.EXE и запустить как программу, то она выводит список всех PCI-плат и выдает подробную информацию по найденным контроллерам OHCI-1394.

Собственные универсальные драйверы для работы с USD-устройствами под DOS есть у компании Iomega. ASPI-драйвер USB 2.0 называется ASPIEHCI.SYS (существуют также драйверы для старых USB-устройств — ASPIOHCI.SYS и ASPIUHCI.SYS), а доступ к USB-дискам обеспечивает программа GUEST.EXE, которую надо вызвать в командном файле autoexec.bat.

Таким образом, для инициализации USB-накопителя в файле config.sys вашей загрузочной дискеты должны быть такие строки:

DEVICE= ASPIEHCI.SYS /int /all

В общем, перепробовав несколько вариантов, вы наверняка подберете рабочую конфигурацию не только для USB, но и для FireWire-устройств. Не забудьте протестировать работоспособность полученной конфигурации.

Имеются подобные DOS-драйверы и для USB-мышей, и для клавиатур. Описанные драйверы, а также другие программы и утилиты для работы с USB под DOS можно скачать, например, на сайте http://www.stefan2000.com/darkehorse/PC/DOS/Drivers/USB/ (некоторые из них имеются на прилагаемом CD-ROM).

В Интернет из DOS

И представил я: город наводнился вдруг разумными людьми,

Вышли все под ДОС, а проклятый Виндовс удаляли, черт возьми!

Позабыв про Ворд, Аксес и прочий настоящий геморрой.

Люди ставят ДОС. Словно в рай заходят в ДОС.

В нормальный, чистый ДОС.

Песня неизвестного автора эпохи Windows

Итак, дисковым пространством в виде USB-накопителей мы обеспечены, теперь пора переходить к запуску приложений. Наиболее полезным, с точки зрения современного пользователя, сегодня является выход в Интернет.

В принципе, в Интернет можно выходить и при самой слабой конфигурации компьютера, если использовать текстовые браузеры, вроде одного из патриархов Интернета — Lynx («рысь»). Сегодня это «животное» изменило цвет и в версии для DOS называется Bobcat («рыжая рысь»), а скачать браузер можно с сайта http://www.fdisk.com/doslynx/bobcat.htm. Скопировав Bobcat на диск (это очень маленькая бесплатная программка — всего в несколько сот килобайт), нужно просто распаковать ее (можно скачать архив ZIP или самораспаковывающийся exe-файл — self-extractor) и запустить newuser.bat (краткая инструкция находится в файле quickbob.doc).

Появится экран с настройками, где надо будет выставить необходимые параметры браузера:

  • указать COM-порт, на котором находится модем. Если он внутренний, то номер порта может конфигурироваться перемычками на плате либо программным конфигуратором (естественно, понадобится полноценный, а не Win-модем);
  • выставить номер прерывания (по умолчанию для внешнего и в соответствии с перемычками на плате внутреннего модема);
  • указать скорость обмена (Baud Rate), а точнее максимальную скорость соединения;
  • изменить, если это необходимо, строку инициализации модема; можно поставить ATZ или оставить по умолчанию;
  • выставить команду с набором телефонного номера для дозвона до провайдера Интернета (Dialer Command). Скорее всего, это будет ATDP с номером телефона;
  • задать имя (логин) и пароль для выхода в Интернет;
  • в явном виде указать используемые DNS-серверы (под DOS они не будут назначаться по умолчанию).

После этого для выхода в Интернет будет использоваться программа bcatdial.bat, которая поднимет трубку, дозвонится и соединится с провайдером, создаст PPP-соединение и запустит резидентную программу, выполняющую роль драйвера, через который данные пойдут по протоколу TCP/IP. Далее запустится текстовый Интернет-браузер Lynx, который, конечно, скромнее современных мультимедийных монстров, но поддерживает как http-, так и ftp-запросы.

Кроме самого браузера, в состав пакета входят Telnet-клиент и простенькая почтовая программа Minuet, которая позволяет отправлять письма по SMTP-протоколу и скачивать почту с POP3-серверов (почтовую программу можно скачать по адресу: http://www.fdisk.com/doslynx/minuet/).

Для выхода в Интернет можно применять не только обычный телефон, но и ADSL-модем (естественно, лучше использовать Ethernet-модем в режиме роутера), а также подключиться по локальной сети. Напомним, что в DOS отсутствует поддержка сети на уровне операционной системы, поэтому необходимо будет поставить так называемый пакетный драйвер для вашей сетевой карточки, который можно взять с сайта производителя Ethernet-карты.

Если же текстового браузера недостаточно, то можно поставить мощный графический Web-браузер Arachne («паук»), который запускается из командной строки DOS (http://www.cisnet.com/glennmcc/arachne/). Применять его не намного сложнее, чем Internet Explorer. Для настройки соединения у Arachne есть специальный мастер (PPP Wizard) — почти такой же, как в Windows-программах. «Звонилка» Arachne поддерживает протокол PPP для связи с модемом провайдера и осуществляет автоматическую авторизацию (ввод логина и пароля).

Чтобы подключиться к Интернету при помощи этого мастера, вам нужно выставить следующие параметры:

  • указать COM-порт, на котором находится модем, и выставить номер его прерывания (если вы этого не знаете, то мастер сам может определить, куда подключен модем);
  • указать максимальную скорость соединения (Baud Rate);
  • задать метод набора номера для вашей телефонной линии (тоновый или импульсный). Если у вас тоновый набор, то выберите ATDT, если импульсный, как обычно, то ATDP;
  • набрать номер для дозвона до провайдера Интернета;
  • задать имя (логин) и пароль для выхода в Интернет;
  • в явном виде указать используемые DNS-серверы.

Если вы правильно ответите мастеру подключения на все эти вопросы, то выйти в Интернет вам не составит особого труда, а скорость загрузки страниц на процессоре Pentium будет не ниже, чем под Windows XP на Pentium 4. Единственное неудобство этой программы состоит в том, что она однооконная, то есть одновременно можно посещать только один сайт. Однако сохраняется вся история ваших посещений, а возврат на предыдущую страницу осуществляется очень быстро. Кстати, для ускорения работы в Arachne следует завести RAM-диск и определить на него временную папку (если, конечно, у вас для этого достаточно оперативной памяти):

Графические страницы отображаются вполне корректно (поддерживаются разрешения VESA вплоть до 1024Ѕ768 в полноцветном режиме), загружается графика, поддерживаются таблицы и т.д. Более того, Arachne поддерживает прокрутку страниц колесиком мыши: для этого нужно использовать драйвер мыши CTMOUSE, поставляющийся в комплекте с Arachne (каталог \SYSTEM\DEVDRVRS).

Программа Arachne универсальна, как и Bobcat/Lynx, — в ее комплект входят и «звонилка» PPP, и графический браузер, и почтовая программа, и многое другое. И все это в упакованном виде занимает один мегабайт и помещается на одной дискете. Чтобы русифицировать интерфейс, необходимо скачать специальный модуль (Plug-in) с сайта http://386.by.ru — FULLRUS.APM, а для поддержки русских шрифтов (кодировок) нужны файлы CP1251.APM и KOI8-R.APM. Русифицируются и мастер PPP, и настроечные меню, и полезные советы и т.д. Дополнительные модули устанавливаются из специального инсталлятора Arachne в разделе утилит программы.

По своей сути Arachne является мощной графической оболочкой для DOS и имеет много дополнительных модулей и легко перестраиваемый интерфейс. Короче говоря, несмотря на «смерть» ДОСа, программа Arachne продолжает совершенствоваться!

Радуют и низкие системные требования Arachne: для работы необходим процессор i386, 4 Мбайт памяти, видеосистема CGA/EGA/VGA/SVGA и всего 5 Мбайт на диске. Кроме того, для некоммерческого использования программа распространяется бесплатно (freeware).

Таким образом, Arachne можно настроить на USB-флэшке и получить мобильный выход в Интернет, которым можно пользоваться прямо из DOS. К тому же из-под DOC доступны и другие возможности Интернета, такие как IRC, ICQ и т.д.

Клавиатурные команды управления операциями в DOS

Простым IRC-клиентом под DOS является Trumpet (http://www.trumpet.com.au) — это и newsreader, и IRC-клиент, и самостоятельная «звонилка». Есть и ICQ-клиенты под DOS, причем одна из таких программ реализована компанией LADsoft как специальный модуль для Arachne — Lsicq (http://members.tripod.com/

ladsoft/lsicq/), позволяющий работать с консольной «болталкой» одновременно с просмотром Web-страниц. Конечно, окна браузера и ICQ вызываются по очереди, но в одной программе и с простым переключением между ними.

Развлечения под DOS

Послушать любую музыку под DOS не составляет большого труда — плееров под эту операционную систему написано предостаточно. И среди них выделяется MPxPlay (http://www.geocities.com/mpxplay/) — уникальный проигрыватель практически любых звуковых файлов, который продолжает совершенствоваться до сих пор (последняя версия датирована 16 мая текущего года). Плеер обеспечивает стандартный набор функций, включая управление при помощи мыши и клавиатуры (а также джойстика или устройства, подключаемого в последовательный порт), работу с плейлистами и даже имеет встроенный анализатор спектра.

Особо стоит отметить такую возможность MPxPlay, как подключение ЖК-индикатора к параллельному порту, что позволяет работать даже без видеоадаптера и монитора. MPxPlay дает возможность проигрывать файлы MP3, MP2 (MPG), OGG, CDW, WAV, MPC и AC3. В качестве носителя файлов может выступать загрузочный компакт-диск, что позволяет обойтись без жесткого диска и снижает габариты и энергопотребление устройства, оснащенного MPxPlay. К тому же программа занимает на диске совсем немного места и потребляет ничтожно малого процессорного времени. Программа поддерживает длинные имена файлов (LFN), осуществляет коррекцию звука и конвертирует файлы в различные форматы. MpxPlay является также CD-граббером, то есть позволяет копировать треки с аудиокомпакт-дисков и сохранять их в WAV-формате. В новой версии обеспечена поддержка проигрывания файлов формата MPEGPlus (MPC) и улучшена поддержка OGG-формата.

И что совсем уж удивительно, так это полная поддержка под DOS проигрывания видеодисков (в том числе и просмотр DVD-фильмов). В этой области наиболее популярным считается плеер Quick View Pro (www.multimediaware.com), поражающий своими системными требованиями и количеством поддерживаемых графических и мультимедийных форматов и кодеков. Программа запускается на компьютере с процессором i386, с любой VGA-совместимой видеокартой (желательно VESA-compatible) и с операционной системой DOS 3.0 или выше. При этом желательно иметь SoundBlaster-совместимую звуковую карту.

Эта программа вполне успешно крутит полноэкранные фильмы в формате MPEG-4 даже на процессорах i486, хотя, конечно, для просмотра фильмов лучше использовать процессоры Pentium, а на i486 нужно смотреть фильмы в черно-белом варианте или в половинном разрешении. Кроме фильмов, Quick View позволяет просматривать практически все графические форматы и проигрывать музыку (в том числе и MP3).

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

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

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

DOS (Disk Operating System)

39. 65536 , 14.11.2003 03:57
DOS
Разработчик Microsoft
Написана на Многоязычный
Линейка ОС DOS
Состояние разработки Историческое
Исходный код CP/M (клон), Unix (функционал)
Дата первого релиза August 1981 ( 1981-08 )
Последний релиз 8.0 / 14 September 2000 года ; 19 years ago ( 2000-09-14 )
Платформы x86
Ядро (тип) Монолитное ядро
По умолчанию
пользовательский
интерфейс
Командная строка
Лицензия Проприетарная
Официальный веб-сайт www .microsoft .com

DOS (Disk Operating System — дисковая операционная система) – однозадачная операционная система для персональных компьютеров, ориентированных на использование дисковых накопителей, таких как жёсткий диск и дискета.

Содержание

История

Изначально была операционная система 86-DOS, и первая ее версия вышла в 1980 г., разработанная Тимом Патерсеном из фирмы Seattle Computer Products для их компьютера, основанного на процессоре Intel 8086. Её первое название QDOS (Quick and Dirty Operating System — быстрая и грязная операционная система), впоследствии было заменено на 86-DOS, как только SCP начала лицензировать операционную систему.

Разработка 86-DOS длилась всего полтора месяца и представляла собой «клон» CP/M от Digital Research, т.е у них повторялись структура команд и API, что впоследствии сделало легким процесс портирования программ.

В 1981 году корпорация IBM разместила запрос на создание операционной системы для нового семейства компьютеров IBM PC. Для этого корпорация Microsoft в мае того же года наняла Тима Патерсона для завершения адаптации 86-DOS к прототипу IBM PC, а затем в июле полностью выкупила права на 86-DOS 1.10 за $75 тыс. Microsoft хоть и изменила название операционной системы в MS-DOS, но сохранила нумерацию версий. Впоследствии уже IBM лицензировала MS-DOS и выпустила её в августе 1981 года под названием PC DOS 1.0. В дальнейшем, разработка MS-DOS и PC DOS велась Microsoft и IBM совместно вплоть до 1993 года, когда были выпущены два раздельных релиза — от Microsoft 6.0 и от IBM 6.1.

Изначально MS-DOS разрабатывалась как операционная cистема, которая была бы cпособна работать на любых компьютерах с процессором 8086. Она имела модульную cтруктуру с минимальным набором драйверов для дисковых накопителей и консоли, интегрированных в ядро, и устанавливаемых драйверов других устройств, загружаемых и доступных во время загрузки. Cуществовало множество версий MS-DOS для различных аппаратных платформ, и cледует отличать IBM PC — cовместимые от MS-DOS-совместимые компьютеры. Как пример, компьютеры Tandy 2000, могли выполнять программное обеcпечение, напиcанное только для MS-DOS, но не такое, где бы использовались особенности архитектуры IBM PC.

За все время существования MS-DOS вышло воcемь основных релизов (1.00, 2.00 и т. д.) и два десятка промежуточных (3.10, 3.30 и т. п.), пока в 2000 году Microsoft не прекратила её разработку. Хоть изначально MS-DOS ориентировалась на процессор Intel 8088 и работала только с дискетами, на которых располагались сама операционная система, программы и данные пользователей, последующие версии обзавелись возможностью работы с различными типами накопителей, в частности, такими как жёсткий диск и CD-ROM, добавилась поддержка новых процессоров и компьютерных архитектур. Это был ключевой продукт фирмы, который дал ей существенный доход и маркетинговый ресурс. MS-DOS так же стала базой для ранних версий Windows, запускавшихся как графический пользовательский интерфейс, поверх командной строки. MS-DOS — гибкая операционная система и не требовательна к ресурсам ПК.

Также, стоит отметить тот факт, что MS-DOS — это последняя операционная система от Microsoft, которая в работоспособном виде, включая утилиты «влезала» на одну дискету, причем данная ОС может быть установлена на жесткий диск простейшей командой sys c.

Зависимость от архитектуры IBM, в дальнешем, вызвала ряд серьёзных проблем при смене оригинального дизайна IBM PC. Суть в том, что изначально не предполагалось использовать более 640 Кбайт оперативной памяти, так как области ОЗУ выше были зарезервированы для периферийных устройств и ROM. Производителям пришлось разрабатывать различные пути обхода данного препятствия для доступа к дополнительной памяти, хотя, если бы первоначальная идея с независимостью от аппаратного обеспечения была продолжена, то подобной проблемы удалось бы избежать. Таким образом, MS-DOS — это операционная система, работающая в реальном режиме процессора с архитектурой x86, в котором способна адресовать не более 1 Мб оперативной памяти.

Для компьютеров, которые производили IBM, устанавливалась версия под названием PC DOS. Для сторонних производителей Microsoft предлагала версию уже под именем MS-DOS. Ввиду сотрудничества IBM и Microsoft, вплоть до версии 5.0, PC DOS и MS-DOS практически не отличались друг от друга. Первой коробочной версией MS-DOS стала 5.0 в варианте Upgrade, до этого все релизы распространялись только как OEM-продукт компаниями-производителями персональных компьютеров, а последней и лучшей версией стала 6.22, однако MS-DOS продолжала служить загрузчиком для Windows 95 (версии 7.0 и 7.1), Windows 98 (версия 7.1) и Windows ME (версия 8.0). С началом XXI века последние коммерческие версии DOS прекратили свое существование.

DOS для IBM PC-совместимых компьютеров

DOS — 16-битная ОС, которая работает в реальном режиме процессора, поэтому для расширения возможностей и преодоления ограничений реального режима были созданы, так называемые, расширители DOS. Они запускают программы в защищённом 32-битном режиме и эмулируют исходные сервисы операционной системы. Обычно они поддерживают стандарт DOS Protected Mode Interface (DPMI). Самый известный и широко используемый (в компьютерных играх) расширитель — DOS/4GW. Существует несколько версий DOS для ПК. Все они схожи по наборам команд и базовой функциональности, но различаются производительностью, стабильностью работы и дополнительными функциями.

  • АДОС — советский клон для ПК Искра-1030.
  • Альфа-ДОС — советский клон для ПК ЕС-1840.
  • ЯНУС — советский клон для ПК ЕС-1840.
  • DR-DOS (Novell DOS, Caldera DR-DOS, OpenDOS) — выпущена Digital Research в 1991 году, перекуплена компанией Novell в 1993 году, затем компанией Caldera.
  • FreeDOS — выпущена в 1994 году. Свободная DOS, изначально называлась PD-DOS.
  • FreeDOS-32 — свободная 32-битная DOS. Не требует расширителей для запуска 32-битных приложений. Планируется избавиться и от других ограничений DOS (добавление поддержки других файловых систем, многозадачности и т. п.).
  • LZ-DOS — репак MS-DOS 7.1 — из ядра системы удалена картинка с приветствием Windows, файлы IO.SYS и COMMAND.COM сжаты. Добавлена возможность запуска Windows 3.1. В целом, система сделана более совместимой и оптимизирована так, чтобы занимать минимальный объём дискового пространства.
  • MS-DOS — выпущена компанией Microsoft в 1981 году.
  • Paragon DOS Pro (первоначальное название — PT$-DOS). Ветка PTS-DOS, выпущенная компанией Paragon Software после того, как её основатели, включая ведущего разработчика PTS-DOS, ушли из «Физтех-софт», основав собственную компанию. Последние версии этой ветки включают поддержку FAT32.
  • PC DOS — выпущена компанией IBM в 1981 году.
  • PTS-DOS — выпущена компанией «Физтех-софт» в 1991 году или ранее.
  • QDOS (Quick and Dirty Operating System) — клон CP/M, созданный в 1980 году Тимом Патерсоном (Tim Paterson) из Seattle Computer Products (SCP) для новых процессоров Intel 808x, был куплен Microsoft за 50 тыс. долл. и стал MS-DOS/PC-DOS.
  • ROM-DOS — ОС компании Datalight для встроенных систем.

Надстройки и расширения сторонних производителей

Сетевые клиенты и серверы

В связи с тем, что развивалась архитектура IBM PC/XT в последствии появилась расширенная, а затем в AT и дополнительная память, которую можно было использовать в компонентах операционной системы и программах с помощью механизмов EMS, XMS, HMA, UMA/UMB, которые обеспечиваются BIOS расширенной памяти и драйверами DOS — менеджерами памяти от Microsoft (HIMEM и EMM386) или сторонними менеджерами (например, QEMM).

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

  • Norton Commander — наиболее популярный в России коммерческий файловый менеджер. Все операции с файлами производятся на двух панелях при помощи горячих клавиш и, позднее, мыши и меню. Последние версии включают множество плагинов, значительно расширяющих функциональность. По образу Norton Commander позже было создано множество интерфейсов файловых менеджеров и других программ для различных операционных систем.
  • Volkov Commander — клон Norton Commander. В отличие от Norton Commander, поддерживает длинные имена файлов (для версии 4.99 alpha). Очень компактен. Базовый комплект включает только сам файловый менеджер с минимальным, но достаточным набором функций, и занимает на диске около 64 Кбайт. Функциональность расширяется подключением других приложений.
  • DOS Navigator — дальнейшее развитие идеи Norton Commander. Бо́льшая функциональность. Бо́льшее количество панелей. Поддержка текстовых режимов SVGA (132×25 — 132×60). Оконный интерфейс с многозадачностью для плагинов. Расширение за счёт лёгкого и удобного подключения плагинов и приложений сторонних разработчиков.

Состав

Операционная система DOS состоит из таких частей как:

  1. Базовая система ввода-вывода (BIOS);
  2. Загрузчик операционной системы (Boot Record);
  3. Дисковые файлы io.sys и msdos.sys;
  4. Командный процессор (command.com);
  5. Программы для исполнения внешних команд DOS;
  6. Драйверы устройств.

Базовая система ввода-вывода (BIOS) – это часть операционной cистемы, которая встроенна в ПК, аппаратно зависима и находится в постоянном запоминающем устройстве компьютера. Ее функция состоит в выполнении наиболее простых и универсальных услуг ОС, связанных с осуществлением ввода-вывода. Помимо этого, данная cистема содержит тест функционирования компьютера, который проверяет работу памяти и устройства ПК при включении его в электропитание и программу вызова загрузчика операционной системы.

Секторы – это участки длиной 512 байт, на которые разделена вся поверхноcть магнитного диска, так вот загрузчик операционной системы (Boot Record) – это очень короткая программа, находящаяся в первом cекторе каждой дискеты с операционной системой DOS. Эта программа загружает в память еще два модуля ОС, завершающие процесс загрузки DOS. Связано это с тем, что жесткий диск может быть разбит на несколько разделов (логических дисков).

Дисковые файлы io.sys и msdos.sys загружаются в память загрузчиком ОС и остаются в памяти компьютера. Файл io.sys представляет собой дополнение к базовой системе ввода-вывода в ПЗУ, настраивает ОС на конкретную конфигурацию ПК и позволяет подключать новые драйвера к нестандартным устройствам ввода/вывода. Файл msdos.sys, в свою очередь, реализует основные высокоуровневые услуги DOS.

Командный процессор DOS находится в дисковом файле command.com на диске, c котоpого загpужается опеpационная система и он обрабатывает команды, которые вводит пользователь. По окончании работы программы, командный процессор удаляет программу из памяти и выводит сообщение о готовности к выполнению команд или как его называют – приглашение DOS.

Внешние команды DOS – это программы выполняющие действия обслуживающего характера. Например, форматирование дискет, проверку дисков и т.д.

Дpайвеpы устройств – специальные программы, дополняющие систему ввода-вывода DOS и обеспечивающие обслуживание новых устройств или нестандартное использование имеющихся устройств. Hапpимеp, c помощью драйверов возможна работа с «электронным диском», то есть частью памяти компьютера, с которой можно работать так же, как и с диском. Дpайвеpы загpужаются в память компьютеpа пpи загpузке опеpационной системы. Их имена указываются в специальном файле config.sys. Такая схема облегчает добавление новых устройств и позволяет делать это, не затрагивая системные файлы DOS.

Загрузка DOS

Загрузка DOS – считывание операционной системы из внешнего запоминающего устройства в оперативную память, ее настройка и запуск. Начальная загрузка DOS осуществляется автоматически при включении компьютера, нажатии кнопки «RESET» или комбинации клавиш «Ctrl+Alt+Del», после чего происходят следующие процессы:


  • тестирование ПК – BIOS выполняет комплекс программ начального тестирования компьютера. Если он находит ошибки, то выводит на экран код этой ошибки. При этом, если ошибка не критическая, то пользоввателю дается возможность исправить ее и продолжить процесс загрузки, нажав клавишу F1. Если же ошибка критическая, то процесс загрузки прекращается. Следует выключить питание компьютера и приступить к его ремонту;
  • загрузка MS DOS — после самотестирования проверяется наличие главной загрузочной записи на диске устройства, указанного в установках BIOS (BIOS Setup). Загрузка производится с первого по порядку опроса диска, имеющего MBR. Им может быть НГМД, жесткий диск, CD ROM, магнитооптический накопитель LS-120, устройство SCSI, сетевой загрузочный диск – при наличии в сетевой карте загрузочного ПЗУ. Если это НГМД, и дискета, вставленная в дисковод — не системная (отсутствует MBR), то будет выведено сообщение об ошибке:

Следует либо поставить системную дискету в дисковод для НГМД, либо вынуть все дискеты и нажать любую клавишу для продолжения загрузки с винчестера. Программа-загрузчик считывает в память компьютера модули операционной системы io.sys и msdos.sys и передает им управление;

  • настройка MS DOS — настройка ОС выполняется по командам, записанным в файлах config.sys и autoexec.bat. Читается файл config.sys и в соответствии с содержащимися в нем указаниями, загружаются драйверы устройств и устанавливаются параметры операционной системы. Затем читается командный процессор command.com и ему передается управление. Командный процессор выполняет командный файл autoexec.bat, в котором указываются команды и программы, выполняемые при каждом включении или перезапуске компьютера. После выполнения файла autoexec.bat процесс загрузки операционной системы заканчивается и DOS выдает приглашение, показывающее, что она готова к приему команд.

После загрузки ОС на экране монитора высвечивается приглашение пользователю на ввод команд, которое состоит из имени диска и символов: A:\> или C:\>.
Этот знак, который DOS выводит на экран при готовности к работе.

Приглашение DOS содержит информацию о текущем дисководе и о текущем каталоге. Например, A:\> — дисковод А:, корневой каталог: C:\windows> — дисковод С:, каталог windows.
Диск, с которым работает в данный момент ПК, называется текущим.

Ввод и редактирование команд

Для ввода команды следует набрать эту команду на клавиатуре и нажать Enter. Для редактирования вводимой команды можно пользоваться следующими клавишами: Backspace, Delete, Ins, Esc, Клавиши перемещения курсора.

Команды общего назначения

  • VER – проверка версии ОС (A:\>VER, нажать Enter);
  • CLS – очистка экрана (A:\> CLS, нажать Enter );
  • TIME – проверка и коррекция системных часов (A:\>TIME, нажать Enter);
  • DATA — проверка и коррекция системного календаря (A:\> DATA, нажать Enter).

Основные команды для работы с файлами, каталогами, дисками

Работа с файлами

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

Каждый файл состоит из имени и расширения, при этом расширение не является обязательным. В имени файла может быть от 1 до 8 символов. Расширение начинается с точки, за которой следует от 1 до 3 символов. (Символ — это буква, цифра или знак).

Нельзя употреблять в именах файлов следующие символы: = + [ ] \ | ; : , . / ? пробел

В DOS имеются зарезервированные имена файлов, которые нельзя использовать в качестве имен обычных файлов, они обозначают устройства: prn, con, nul, aux, lpt1, lpt2, lpt3, com1, com2, com3.

Файлы с расширением bat, com, exe — это готовые к выполнению программы, файлы с расширением txt — текстовые, с расширением pas, for, c, bas, asm — программы соответственно на Паскале, Фортране, Си, Бейсике, Ассемблере, с расширением bak — резервные копии файлов.

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

Несколько файлов можно объединить в один раздел. Такие разделы получили название каталогов или директорий.

Для работы с файлами в DOS используют следующие основные команды:

  • создание текстовых файлов: A:\>copy con (имя файла) – после ввода этой команды нужно будет поочередно вводить строки файла. В конце каждой строки надо нажимать клавишу Enter, а после ввода последней строки – нажать F6 (или Ctrl +Z) и затем Enter. На диске появится файл с указанным именем;
  • копировать файл: A:\>copy a:\lesson urok (копировать lesson из корневого каталога в каталог urok);
  • удалить файл: A:\>del less, нажать Enter ;
  • переименовать: A:\>ren lesson conon, нажать Enter (переименованный файл – conon);
  • вывод файла на экран: TYPE пример: A:\>TYPE prim.1, нажать Enter;
  • слияние (объединение файлов в один) COPY_полное имя 1–го файла + полное имя 2–го файла _полное имя 3 го файла, нажать Enter.

Работа с каталогами

Каталог — это специальное место на диске, в котором хранятся имена файлов, сведения о размере файлов, времени их последнего обновления, атрибуты и т.д. Каждый каталог имеет имя и может быть зарегистрирован в другом каталоге, т.е. являться подкаталогом или файлом специального вида. Каталог можно сравнить с книжной полкой, на которой хранятся различные по содержанию и объему книги (файлы). На каждом диске всегда существует самый главный каталог — корневой. Он создается автоматически при подготовке диска к работе (форматировании) и его нельзя удалить, а вот создавать и удалять свои каталоги и подкаталоги Вы можете самостоятельно. Корневой каталог можно сравнить с книжным шкафом, в котором имеется несколько полок (каталогов), на каждой из которых хранятся различные книги (файлы). Обычно книжный шкаф снабжается списком хранящихся в нем книг. Поэтому каталог иногда называют директорией (от англ. directory — справочник).

Для работы с каталогами в DOS используют такие команды, как:

  • создать каталог: A:\>md urok, нажать Enter;
  • удалить каталог: A:\>rd urok, нажать Enter;
  • просмотр каталога (оглавление каталога): A:\>DIR, нажать Enter;
  • изменение текущего каталога: A:\>cd urok, нажать Enter. Получим: A:\urok> (дисковод А:, каталог \urok);
  • переход в корневой каталог: A:\urok>cd. нажать Enter. Получим: A:\> (дисковод A:, корневой каталог);
  • отображение перечня каталогов диска: A:\>TREE А: /F, нажать Enter.

Путь к файлу — это последовательность из имен дисков, каталогов или символов. Этот путь задает маршрут от текущего каталога текущего диска или от корневого каталога жесткого диска к тому каталогу, в котором находится нужный файл. Текущий диск — это тот диск, с которым непосредственно происходит работа. Текущий каталог — это тот каталог, который в настоящий момент открыт.

Следует отметить, что DOS не различает прописные и строчные буквы. Поэтому чтобы не связываться с клавишами Caps Lock и Shift при их вводе в ПК, в этой книге команды даются строчными буквами, а выделение их полужирным шрифтом использовано только для наглядности. Многие команды имеют параметры, которые показывают, над каким объектом или при каких условиях выполняется команда. Параметры в тексте обычно помещаются в угловых скобках . Если параметр не обязателен или указывается не всегда, мы будем помещать его в круглые скобки: (…). Параметры, отделяемые пробелом и правой наклонной чертой, принято называть ключами. Они уточняют действия исполняемой команды.

Работа с дисками

Для работы с дисками в DOS используют такие команды, как:

  • переход с диска на диск: С:\ windows >A:, нажать Enter, получим A:\>;
  • форматирование дисков: C:\> format a:, нажать Enter;
  • задание метки на диске: A:\vol, нажать Enter;
  • чтение метки: A:\label, нажать Enter.

Установка DOS в VirtualBox

Я скачал MS-DOS 6.22 (файлы образа дискеты .img) по ссылке: https://www.dropbox.com/sh/jzm0fbnb7fz526u/mKJ19A1JMo, затем загрузил дополнительные драйвера, для того, чтобы MS-DOS 6.22 смог распознавать русские символы. Итак, открываем VirtualBox, жмем кнопку «Создать». Откроется Мастер создания новой виртуальной машины, заполняем имя машины, тип операционной системы и жмем «Next»

Далее устанавливаем количество оперативной памяти, которое будет доступно ОС, обычно оно определяеться автоматически, я выбрал объем 64 Мб, но можно просто нажать «Next».

Затем создаем новый динамический виртуальный жесткий диск, так как при переносе он занимает меньше места и увеличивается по мере заполнения его информацией. Я выбрал тип VHD, потому что он наиболее совместим с другими системами виртуализации ОС.

Далее нужно указать место расположения размещения виртуального диска на компьютере. По умолчанию он на ходится в папке пользователя VirtualBox VMs. Там же указываем размер виртуального диска. В моем случае это 500 Мб.

В окончинии жмем кнопку «Создать», после чего появится такое окно с нашей виртуальной машиной:

Извлекаю во временную папку образы дискеты из архива что я скачал. Далее в списке программ выбираем нашу виртуальную машину жмем пункт «Настроить». Переключаемся на пункт Носители — Добавить Floppy контроллер. Добавляем Floppy и выбираем образ, указав путь к первому образу дискеты.

Нажимаем «ОК» и кнопку «Запустить». После чего откроется окно установки MS DOS 6.22.

Для продолжения установки нажимаем Enter, для справки нажимаем F1, для установки на дискету нажимаем — F7. Выбираем Configure unallocated disk space и Enter. После появится окно с предупреждением, что нужно перезагрузить компьютер и вставить первую дискету, нам же это не нужно, так как мы уже ее вставили.

Ожидаем пока завершится подготовка и перед нами появится окно с настройками параметров, все что пока можно настроить это дату и то она определяться автоматически, потому выбираем пункт The setting are correct и нажимаем Ввод. Далее нужно указать диск куда будет установлена ОС. По умолчанию в VirtualBox это будет C:\DOS, все что остаеться это нажать Enter, если же вам требуется установить DOS в другое место просто прописываем куда, например D:\DOS

Далее нам нужно вставить дискету номер 2 и нажать Enter. Для этого внизу окна справа, нажимаем правой кнопкой мыши на значек флоппи и выбрать образ гибкого диска номер 2.

Продолжаем установку, устанавливаем следующий образ, аналогично второму образу гибкому диску. В завершение, внизу окна справа, нажимаем правой кнопкой мыши на значек флоппи и выбираем пункт изьять диск из привода. Нажимаем «Enter». Вот и окно которое объявляет, что наша MS DOS 6.22 успешно установлена.

Как установить dos и win 98 на жесткий диск?

Выкини дискеты, если они дожили до наших дней то полюбому осыпаются прямо во флоповод. По сабжу формать перввый раздел винта в фат, клади в него дистр 98, образ дискеты восстановления и граб4дос. Грабом
map —mem myfloppy.img (fd0)
chainloader (fd0)+1
в досе запускаешь C:\win98\setupcor.exe и откидываешься на спинку кресла

после установки просто дописываешь в автоэкзет бат комманд ком

res2001: Видимо вы просто под капот не заглядывали. После OSR2 ничего не изменилось, кроме автоматического запуска win.exe, но ядро — осталось какое-то dos 7.x, и всегда можно было настроить систему так, чтобы после загрузки ядра ДОС, оно останавливалось, и вручную запускать win.exe

Установка win98 поверх MSDOS ЕСТЕСТВЕННО перезатирает старые версии MSDOS, поскольку ядро и прерывания SOD использовались же, вдобавок необходима поддержка fat32, которой в чистом старом досе не было.

Программирование в среде однозадачной операционной системы

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«ПЕНЗЕНСКАЯ ГОСУДАРСТВЕННАЯ ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ

Е.В. Грачева

Системное программное обеспечение

Персональных ЭВМ

доктор технических наук, пофессор

зав.кафедрой «Вычислительные машины и системы»

доктор технических наук, пофессор

кафедры «Информационно-вычислительные системы»

Пензенского государственного университета

Грачева Е.В.

Системное программное обеспечение персональных ЭВМ:

Учебнле пособие /Е.В. Грачева – Пенза

Учебное пособие подготовлено на кафедре «Вычислительные машины и системы»

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

Программирование в операционной среде

Операционной средой называется набор функций ОС, сервисов и правила обращения к ним. Поскольку каждая операционная система имеет свой набор функций и правил обращения к ним, программирование в операционной среде каждой ОС должно рассматриваться отдельно [1].

Программирование в среде однозадачной операционной системы

Программы для MS DOS могут быть одного из двух форматов: COM или EXE.

Программы типа COM не могут быть размером более 64 Кб и состоят только из одного сегмента – сегмента кода.

Размер программы типа EXE может превышать 64 кб.

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

Главным входом большинства функций DOS служит прерывание, вызываемое с помощью команды INT 21h. Параметры функциям DOS передаются через регистры микропроцессора: AX (AH и AL), BX, CX, DX; регистровые пары DS:DX и ES:BX используются в основном при передаче адреса ячейки памяти. Через эти же регистры возвращаются результат работы функции DOS, кроме того могут быть установлены флаги в регистре флагов.

Как и любая операционная система, DOS загружает и выполняет программы. При загрузке программы в начале отводимого для нее блока памяти (для СОМ-программ это вся свободная на данный момент память) создается структура данных PSP (префикс программного сегмента) размером 256 байт (100h). Затем DOS создает копию текущего окружения для загружаемой программы, помещает полный путь и имя программы в конец окружения, заполняет поля PSP следующим образом:

+00h: слово – CDh 20h – команда INT 20h. Если СОМ-программа завершается командой RETN, управление передается на эту команду.

+02h: слово – сегментный адрес первого байта после области памяти, выделенной для программы

+04h: байт – не используется DOS

+05h: 5 байт – 9Ah F0h FEh 1Dh F0h – команда CALL FAR на абсолютный адрес 000C0h, записанная так, чтобы второй и третий байты составляли слово, равное размеру первого сегмента для СОМ-файлов (в этом примере FEF0h). Введено для совместимости с командой СР/М CALL 5.

+0Ah: 4 байта – адрес обработчика INT 22h (выход из программы)

+0Eh: 4 байта – адрес обработчика INT 23h (обработчик нажатия Ctrl-Break).

+12h: 4 байта – адрес обработчика INT 24h (обработчик критических ошибок)

+16h: слово – сегментный адрес PSP процесса, из которого был запущен текущий.

+18h: 20 байт – JFT – список открытых идентификаторов, один байт на идентификатор, FFh – конец списка.

+2Ch: слово – сегментный адрес копии окружения для процесса.

+2Eh: 2 слова – SS:SP процесса при последнем вызове INT 21h.

+32h: слово – число элементов JFT (по умолчанию 20).

+34h: 4 байта – дальний адрес JFT (по умолчанию PSP:0018).

+38h: 4 байта – дальний адрес предыдущего PSP.

+3Ch: байт – флаг, указывающий, что консоль находится в состоянии ввода 2-байтного символа.

+3Dh: байт – флаг, устанавливаемый функцией В711h прерывания 2Fh (при следующем вызове INT 21h для работы с файлом имя файла будет замечено на полное).


+3Eh: слово – не используется в DOS.

+40h: слово – версия DOS, которую вернет функция DOS 30h (DOS 5.0+).

+42h: 12 байт – не используется в DOS.

+50h: 2 байта – CDh 21h – команда INT 21h.

+54h: 7 байт – область для расширения первого FCB (FCB, FileControlBlok — это метод работы с файлами, являющийся рудиментом от ранних версий DOS’а. При его использовании можно работать только с файлами в текущем каталоге, причем даже нет возможности сменить каталог (точнее, даже понятия «каталог» в момент создания этих функций вообще не было). Современные программы эти функции не используют. MS-DOS обеспечивает две технологии обслуживания файлов. Первая была разработана при создании версий 1.Х. Эта технология основана на использовании структур данных, называемых блоками управления файлом (FCB). В то время подавляющее большинство компьютеров работало под управлением операционной системы CPM. Блоки FCB обеспечивали совместимость файлов MS-DOS с файлами этой системы. При разработке MS-DOS версий 2.Х, когда была предложена иерархическая структура организации файлов, была разработана вторая технология их обслуживания. Она основана на использовании ссылок на управляющую запись файла и не требует организации FCB. После того, как эта технология была опробована на операционной системе UNIX, она получила широкое распространение.).

+5Ch: 16 байт – первый FCB, заполняемый из первого аргумента командной строки.

+6Ch: 16 байт – второй FCB, заполняемый из второго аргумента командной строки.

+7Ch: 4 байта – не используется в DOS.

+80h: 128 байт – командная строка и область DTA по умолчанию.

Затем DOS записывает программу в память, начиная с адреса PSP:0100h.

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

При запуске СОМ-программы регистры устанавливаются следующим образом:

AL = FFh, если первый параметр командной строки содержит неправильное имя диска (например, z:/something), иначе – 00h.

АН = FFh, если второй параметр содержит неправильное имя диска, иначе 00h.

CS = DS = ES = SS = сегментный адрес PSP.

SP = адрес последнего слова в сегменте (обычно FFFEh; меньше, если не хватает памяти).

При запуске ЕХЕ-программы регистры SS:SP устанавливаются в соответствии с сегментом стека, определенным в программе, затем в любом случае в стек помещается слово 0000h и выполняется переход на начало программы (PSP:0100h для СОМ, собственная точка входа для ЕХЕ).

Все эти действия выполняет одна функция DOS – DOS 4Bh – загрузить и выполнить программу. В качестве параметров этой функции передаются:

AL = 00h – загрузить и выполнить;

AL = 01h – загрузить и не выполнять;

DS:DX – адрес ASCIZ-строки с полным именем программы
ES:BX – адрес блока параметров ЕРВ:

+00h: слово – сегментный адрес окружения, которое будет скопировано для нового процесса (или 0, если используется текущее окружение)
+02h: 4 байта – адрес командной строки для нового процесса
+06h: 4 байта – адрес первого FCB для нового процесса
+0Ah: 4 байта – адрес второго FCB для нового процесса
+0Eh: 4 байта – здесь будет записан SS:SP нового процесса после его завершения (только для AL = 01)
+12h: 4 байта – здесь будет записан CS:IP (точка входа) нового процесса после его завершения (только для AL = 01)

AL = 03h – загрузить как оверлей;
DS:DX – адрес ASCIZ-строки с полным именем программы
ES:BX – адрес блока параметров:

+00h: слово – сегментный адрес для загрузки оверлея
+02h: слово – число, которое будет использовано в командах, использующих непосредственные сегментные адреса, – обычно то же самое число, что и в предыдущем поле. 0 для СОМ-файлов

AL = 05h – подготовиться к выполнению (используется в ОС MS DOS начиная с версии 5.0 и выше)
DS:DX – адрес следующей структуры:

+00h: слово – 00h
+02h: слово:

бит 0 – программа – ЕХЕ
бит 1 – программа – оверлей

+04h: 4 байта – адрес ASCIZ-строки с именем новой программы
+08h: слово – сегментный адрес PSP новой программы
+0Ah: 4 байта – точка входа новой программы
+0Eh: 4 байта – размер программы, включая PSP

CF = 0, если операция выполнена, ВХ и DX модифицируются,
CF = 1, если произошла ошибка, АХ = код ошибки (2 – файл не найден, 5 – доступ к файлу запрещен, 8 – не хватает памяти, 0Ah – неправильное окружение, 0Bh – неправильный формат).

Как уже отмечалось, прерывание INT 21h (сервис DOS) служит главным входом большинства функций DOS. Программа, запрашивающая сервис DOS, должна подготовить всю необходимую информацию в регистрах и управляющих блоках, указать в регистре AH номер желаемой функции DOS и затем вызвать прерывание INT 21H.

В таблице 1 приведены функции прерывания INT 21h.

Таблица 1 -Функции прерывания INT21h

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Студент — человек, постоянно откладывающий неизбежность. 10529 — | 7318 — или читать все.

Dos fn 0eh: установить текущий диск dos

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

Сервис файловой системы доступен программе через прерывание MS-DOS INT 21h . Многочисленные функции этого прерывания, относящиеся к файловой системе, можно разбить на группы:

  • получение справочной информации;
  • работа с каталогами;
  • работа с файлами.

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

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

Третья группа функций позволяет программе выполнять практически любые операции над файлами — создание, удаление, чтение/запись, переименование, копирование, пересылка и т.п.

Заметим, что существует два класса функций для работы с файлами. Первый класс использует управляющие блоки файлов FCB . Эти функции исплоьзовались в MS-DOS версий 1.х и имеют в настоящее время чисто исторический интерес. Вам они скорее всего никогда не будут нужны, за исключением одного случая — если вам надо составить программу, способную работать под управлением MS-DOS версии 1.0 или 1.1. В этой книге мы не будем упоминать функции, предназначенные для работы с файлами через FCB . При необходимости вы сможете найти информацию об этих функциях в руководстве по операционной системе MS-DOS.

Второй класс использует файловые индексы (handle). Этот класс функций впервые появился в MS-DOS версии 2.0. Эти функции аналогичны используемым в операционной системе UNIX.

Смысл файлового индекса очень прост. Для того чтобы начать работу с файлом, программа должна вызывать определенную функцию DOS, «открывающую» этот файл. Процесс открытия файла заключается в присвоении этому файлу определенного числа (индекса) и выполнении некоторых других инициализирующих действий. Для выполнения каких-либо операций с файлом программа, вызывая соответствующую функцию MS-DOS, должна указать индекс этого файла.

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

Номер функции Название Входные данные Выходные данные Описание
Функции ввода/вывода данных
01H Ввод с клавиатуры AH = 01H AL = символ, полученный из стандартного ввода Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо). При распознавании Ctrl-Break выполняется INT 23H. Замечание: Ввод расширенных клавиш ASCII (F1-F12, pgup, курсор и т.п.) требует двух обращений к этой функции. Первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.
02H Вывод на дисплей AH = 02H DL = символ, выводимый на стандартный вывод Посылает символ из DL на стандартный вывод. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. При обнаружении Ctrl-Break выполняется INT 23H.
03H Вспомогательный ввод AH = 03H AL = символ, полученный со стандартного вспомогательного устр-ва Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL. Замечание: Ввод не буферизуется и должен опрашиваться (не управляется прерываниями). При запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битовые слова. Команда DOS MODE используется для установки иных характеристик.
04H Вспомогательный вывод AH = 04H DL = символ, записываемый на стандартное вспомогательное устр-во Посылает символ в DL на стандартное вспомогательное устройство, COM1 или AUX.
05H Вывод на принтер AH = 05H DL = символ, записываемый на стандартный принтер Посылает символ в DL на стандартное устройство принтера, обычно LPT1. Замечание: Команда DOS «MODE» может перенаправить этот вывод в последовательный порт.
06H Консольн. ввод-вывод AH = 06H DL = символ (от 0 до 0feh), посылаемый на стандартный вывод DL = 0ffh запрос ввода со стандартного ввода ZF = Сброшен (NZ), если символ готов при запросе ввода При DL = 0ffh выполняет ввод с консоли «без ожидания», возвращая взведенный флаг нуля (ZF), если на консоли нет готового символа. Если символ готов, сбрасывает флаг ZF (NZ) и возвращает считанный символ в AL. Если DL не равен 0ffh, то DL направляется на стандартный вывод. Замечание: Не проверяет Ctrl-Break. Вызывайте дважды для расширенного ASCII.
07H Нефильтрующий консольный ввод без эха AH = 07H AL = символ, полученный через стандартный ввод Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. Не фильтрует: Не проверяет на Ctrl-Break, backspace и т.п. Замечания Вызывайте дважды для ввода расширенного символа ASCII. Используйте функцию 0bh для проверки статуса (если не хотите ожидать нажатия клавиши).
08H Консольный ввод без эха AH = 08H AL = символ, полученный через стандартный ввод Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. При обнаружении Ctrl-Break выполняется прерывание INT 23H. Замечание: Вызывайте дважды для ввода расширенного символа ASCII.
09H Выдать строку на дисплей AH = 09H DS:DX = адрес строки, заканчивающейся символом ‘$’ (ASCII 24H) Строка, исключая завершающий ее символ ‘$’, посылается на стандартный вывод. Символы Backspace обрабатываются как в функции 02H Display Char. Обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 0dh и ASCII 0ah). Строки, содержащие ‘$’, можно выдать через 40H Write Handle (BX=0).
0ah Ввод строки в буфер AH = 0ah DS:DX = адрес входного буфера (смотри ниже) Буфер содержит ввод, заканчивающийся символом CR (ASCII 0dh) При входе буфер по адресу DS:DX должен быть оформлен так:
Max * * * *

Где max – максимальная допустимая длина ввода (от 1 до 254)

При выходе буфер заполнен следующим образом:

Max Len T E X T 0dh

Где len– действительная длина данных без завершающего CR (здесь — 04H). Символы считываются со стандартного ввода вплоть до CR (ASCII 0dh) или до достижения длины MAX-1. Если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter).

Второй байт буфера заполняется действительной длиной введенной строки, не считая завершающего CR. Последний символ в буфере — всегда CR (который не засчитан в байте длины). Символы в буфере (включая LEN) в момент вызова используются как «шаблон». В процессе ввода действительны обычные клавиши редактирования: Esc выдает «\» и начинает с начала, F3 выдает буфер до конца шаблона, F5 выдает «@» и сохраняет текущую строку как шаблон, и т.д. Большинство расширенных кодов ASCII игнорируются. При распознавании Ctrl-Break выполняется прерывание INT 23H (буфер остается неизменным).

0bh Проверить статус ввода AH = 0bh AL = 0ffh, если символ доступен со стандартного ввода Проверяет состояние стандартного ввода. При распознавании Ctrl-Break выполняется INT 23H. Замечание: используйте перед функциями 01H 07H и 08H, чтобы избежать ожидания нажатия клавиши. Эта функция дает простой неразрушающий способ проверки Ctrl-Break в процессе длинных вычислений или другой обработки, обычно не требующей ввода. Это позволяет вам снимать счет по нажатию Ctrl-Break.
0ch Ввод с очисткой AH = 0ch AL = номер функции ввода DOS (01H, 06H, 07H, 08H или 0ah) Очищает буфер опережающего ввода стандартного ввода, а затем вызывает функцию ввода, указанную в AL. Это заставляет систему ожидать ввод очередного символа. Следующие значения допустимы в AL: 01H ввод с клавиатуры 06H ввод с консоли 07H Нефильтрующий без эха 08H ввод без эха 0ah буферизованный ввод
Операции с файлами
3ch Создать файл через описатель (дескриптор) AH = 3ch DS:DX = адрес строки ASCIIZ с именем файла CX = атрибут файла AX = код ошибки если CF установлен и описатель файла если ошибки нет DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. Файл создается в указанном (или умалчиваемом) оглавлении Файл открывается в режиме доступа чтение/запись Вы должны сохранить описатель (дескриптор, handle) для последующих операций. Если файл уже существует: При открытии файл усекается до нулевой длины Если атрибут файла — только чтение, открытие отвергается (атрибут можно изменить функцией 43H изменить атрибут) CONFIG.SYS специфицирует число доступных описателей в системе Используйте функцию 5bh создать Новый файл, если вы не хотите перекрывать (усекать) существующий файл.
3dh Открыть описатель файла AH = 3dh DS:DX = адрес строки ASCIIZ с именем файла AL = режим открытия AX = код ошибки если CF установлен и описатель файла если нет ошибки. DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. Файл должен существовать. См. Функцию 3ch (создать файл). Файл открывается в выбранном режиме доступа / режиме открытия для совместимости с DOS 2.x и избежания сетевых режимов, задавайте: AL = 0 чтобы открыть для чтения AL = 1 чтобы открыть для записи AL = 2 чтобы открыть для чтения и записи Указатель чтения/записи устанавливается в 0. См. 42H (LSEEK) Вы должны сохранить описатель (handle) для последующих операций Разделение файлов должно быть активизировано (команда DOS SHARE), если запрашивается открытие в одном из режимов разделения. CONFIG.SYS специфицирует число доступных описателей файлов.
3eh Закрыть описатель файла AH = 3eh BX = описатель файла AX = код ошибки если CF установлен BX содержит описатель файла (handle), возвращенный при открытии. Файл, представленный этим описателем, закрывается, его буфера сбрасываются, и оглавление обновляется корректными размером, временем и датой. Из-за нехватки описателей файлов (максимум 20, по умолчанию 8), вам может понадобиться закрыть часть умалчиваемых описателей, как, например, описатель 3 (стандартный AUX).
3fh Читать файл через описатель AH = 3fh BX = описатель файла DS:DX = адрес буфера для чтения данных CX = число считываемых байт AX = код ошибки если CF установлен или число действительно прочитанных байт CX байт данных считываются из файла или устройства с описателем, указанным в BX. Данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX. Используйте функцию 42H LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Модифицирует указатель чтения/записи файла, подготавливая его к последующим операциям чтения или записи. Вы должны всегда сравнивать возвращаемое значение AX (число прочитанных байт) с CX (запрошенное число байт): Если AX = CX, (и CF сброшен) — чтение было корректным без ошибок Если AX = 0, достигнут конец файла (EOF) Если AX При чтении с устройства — входная строка имеет длину AX байт При чтении из файла — в процессе чтения достигнут EOF Замечания: Эта функция превосходит сложные и неудобные FCB-функции. Она эффективно сочетает произвольный и последовательный доступ, позволяя пользователю выполнять свое собственное блокирование. Удобно использовать эту функцию для чтения стандартных описателей, таких как описатели стандартного в/в, взамен многочисленных буферизующих и посимвольных FCB-функций ввода. Когда вы читаете с устройства, AX возвращает длину считанной строки с учетом завершающего возврата каретки CR (ASCII 0dh).
40H Писать в файл через описатель AH = 40H BX = описатель файла DS:DX = адрес буфера, содержащего записываемые данные CX = число записываемых байт AX = код ошибки если CF установлен AL = число реально считанных байт (лучший тест для ошибок) CX байт данных записывается в файл или на устройство с описателем, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX. Данные записываются, начиная с текущей позиции указателя чтения/записи файла. Используйте функцию 42H LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям последовательного чтения или записи. Вы должны всегда сравнивать возвращаемое значение AX (число записанных байт) с CX (запрошенное число байт для записи). Если AX = CX, запись была успешной Если AX Замечание: Эта функция превосходит сложные и неудобные FCB-функции. Она эффективно сочетает произвольный и последовательный доступ, позволяя пользователю осуществлять собственное блокирование. Удобно использовать эту функцию для вывода на умалчиваемые устройства, такие как стандартный вывод, взамен использования различных функций вывода текста.
42H Установить указатель файла – LSEEK AH = 42H BX = описатель файла CX:DX = на сколько передвинуть указатель: (CX 65536) + DX AL = 0 переместить к началу файла + CX:DX AL = 1 переместить к текущей позиции + CX:DX AL = 2 переместить к концу файла + CX:DX AX = код ошибки если CF установлен DX:AX = новая позиция указателя файла (если нет ошибки) Перемещает логический указатель чтения/записи к нужному адресу. Очередная операция чтения или записи начнется с этого адреса. Замечание: Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX. DX здесь старшее значащее слово: действительная длина (DX 65536) + AX.
Операции с файловой системой
0dh Сброс диска AH = 0dh Сбрасывает (пишет на диск) все файловые буфера. Если размер файла изменился, такой файл должен быть предварительно закрыт (при помощи функций 10H или 3eh).
0eh Установить текущий диск DOS AH = 0eh DL = номер диска (0=A, 1=B и т.д.), который становится текущим AL = общее число дисководов в системе Диск, указанный в DL, становится текущим (умалчиваемым) в DOS. Проверка: используйте функцию 19H «дать текущий» для проверки. В регистре AL возвращается число дисководов всех типов, включая твердые диски и «логические» диски (как B: в 1-floppy системе).
19H Дать текущий диск DOS AH = 19H AL = номер текущего умалчиваемого диска (0=A, 1=B, и т.д.) Возвращает номер дисковода текущего умалчиваемого диска DOS.
1bh Дать информацию FAT (текущий диск) AH = 1bh DS:BX = адрес байта FAT > Возвращает информацию о размере и типе умалчиваемого диска. Размер диска в байтах = (DX*AL*CX). Ищите свободную память функциями 36h Disk Free или 32h Disk Info. Версии: DOS 1.x держит FAT в памяти и возвращает DS:BX => FAT. DOS 2.0+ может держать в памяти лишь порцию всей FAT. Предупреждение: Эта функция изменяет содержимое регистра DS.
1ch Дать информацию FAT (любой диск) AH = 1ch DL = номер диска (0=текущий, 1=A, и т.д.) DS:BX = адрес байта FAT > Аналогична функции 1bh Get FAT Cur, с той разницей, что регистр DL указывает диск, для которого вы хотите получить информацию. Версии: Недоступна для DOS 1.x.
32H Дать информацию DOS о диске AH = 32H DL = номер диска (0=текущий, 1=A, и т.д.) AL = 0 если DL задавал корректный диск FF = 0ffh если диск задан неверно DS:BX = адрес блока информации диска для запрошенного устройства Возвращает блок информации, представляющей интерес для приложений и утилит, выполняющих доступ к диску, поддерживаемый драйверами устройств, на уровне секторов. Некоторые дисководы (особенно незагружаемые) функционируют исключительно через свои драйверы устройств. Такие диски могут содержать неверную информацию в корневой записи и таблице разделов, что делает очень трудным определение, например, размера корневого оглавления, числа таблиц FAT, и т.п. Блок информации диска содержит все данные такого рода в хорошо форматированной структуре. Это может быть единственным способом определить адрес драйвера устройства. Предупреждение: Изменяет сегментный регистр DS. Эта недокументированная функция может измениться в будущих версиях.
36H Дать свободную память диска AH = 36H DL = номер диска (0=текущий, 1=A, и т.д.) AX = 0ffffh, если AL содержал неверный номер диска или число секторов на кластер, если нет ошибок. BX = доступных кластеров. CX = байт на сектор. DX = всего кластеров на диске. Возвращает данные для подсчета общей и доступной дисковой памяти. Если в AX возвращено 0ffffh, значит, вы задали неверный диск. Иначе, свободная память в байтах = (AX*BX*CX) всего памяти в байтах = (AX*CX*DX)
39H Создать новое оглавление — MKDIR AH = 39H DS:DX = адрес строки ASCIIZ с именем оглавления AX = код ошибки если CF установлен DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяоглавл»,0 если диск и/или корневой путь опущены, то принимаются по умолчанию. Подоглавление создается и связывается с существующим деревом. Если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не создается.
3ah Удалить оглавление – RMDIR AH = 3ah DS:DX = адрес строки ASCIIZ с именем оглавления AX = код ошибки если CF установлен DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяоглавл»,0. Если диск и/или корневой путь опущены, то принимаются по умолчанию. Подоглавление удаляется из структуры оглавления. Если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не удаляется. Замечание: Оглавление не должно содержать файлов и подоглавлений и не должно быть связано возможными ограничениями DOS (например, не должно быть задействовано в активных командах JOIN или SUBST).
3bh Установить умалчиваемое оглавление DOS – CHDIR AH = 3bh DS:DX = адрес строки ASCIIZ с именем оглавления AX = код ошибки если CF установлен DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяоглавл»,0. Если диск и/или корневой путь опущены, то принимаются по умолчанию. Указанное подоглавление для указанного диска становится текущим (умалчиваемым) оглавлением DOS для этого (или текущего) диска. Если флаг CF установлен при возврате, то AX содержит код ошибки, и текущее оглавление для выбранного диска не изменяется.
41H Удалить файл AH = 41H DS:DX = адрес строки ASCIIZ с именем файла AX = код ошибки если CF установлен DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. Имя файла не может содержать обобщенные символы (‘?’ и ‘*’). Файл удаляется из заданного оглавления заданного диска. Если файл имеет атрибут только чтение, то перед удалением необходимо изменить этот атрибут через функцию 43H CHMOD.
43H Установить/опросить атрибут файла – CHMOD AH = 43H DS:DX = адрес строки ASCIIZ с именем файла AL — код подфункции: = 0 — извлечь текущий атрибут файла AL = 1 — установить атрибут файла CX = новый атрибут файла (для подфункции 01H) AX = код ошибки если CF установлен CX = текущий атрибут файла (для подфункции 00H) DS:DX указывает на строку ASCIIZ в формате: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. Атрибут файла извлекается или устанавливается, согласно коду в AL. Замечание: Чтобы спрятать оглавление, используйте CX=02H (а не 12H, как вы, возможно, ожидали, см. описание файловой системы FAT, аттрибуты файлов).
45H Дублировать описатель файла – DUP AH = 45H BX = существующий описатель файла AX = новый описатель файла, дублирующий оригинал или код ошибки если CF установлен. Создает дополнительный описатель файла, ссылающийся на тот же поток в/в, что и существующий описатель. Любое продвижение указателя чтения/записи для одного описателя действует на его дубликат — включая любые операции чтения, записи или перемещения указателя посредством функции 42H LSEEK. Новый описатель наследует ограничения режима открытия оригинала. Эта функция используется с одной главной целью: вы можете закрыть описатель, заставляя DOS записать файловые буфера. Такой способ DUP/CLOSE — быстрее, чем закрытие и повторное открытие файла. Оставить комментарий – для сохранения файла без его закрытия – CTRL+S
46H Переназначить описатель – FORCDUP AH = 46H BX = целевой описатель файла (должен уже существовать) CX = исходный описатель файла (должен уже существовать) AX = код ошибки если CF установлен Заставляет описатель файла (handle) ссылаться на другой файл или устройство. Описатель в CX (источник) закрывается, если он открыт, а затем становится дубликатом описателя в BX (назначения). Иными словами, описатели в CX и BX будут ссылаться на один и тот же физический файл или устройство. Используется для переназначения стандартного в/в. Пример: Откроем файл «C:\STDOUT.TXT» через функцию 3dh Open File и получим описатель (например, 05). Установим BX=05, CX=01 и вызовем эту функцию. (замечание: описатель 01 — это предопределенный описатель «стандартного выходного устройства»). Теперь можно вызвать функцию 3eh Close File и закрыть handle 05. Можно обращаться к файлу STDOUT.TXT через описатель 01. Стало быть, дисковый файл «C:\STDOUT.TXT» будет отныне получать весь вывод, создаваемый всеми процессами (текущим и порожденными) через любую функцию символьного в/в DOS, так же как и любой вывод в описатель файла 01 через функцию DOS 40H. Когда вы выходите в COMMAND.COM, предопределенные описатели устанавливаются на обычные устройства (например, описатель 01 устанавливается на «CON»).
47H Дать умалчиваемое оглавление DOS AH = 47H DS:SI = адрес локального буфера для результирующего пути (64 байта) DL = номер диска (0=текущий, 1=A, и т.д.) AX = код ошибка если CF установлен В пользовательский буфер по адресу DS:SI помещается в форме ASCIIZ путь текущего умалчиваемого оглавления для диска, указанного в DL. Путь возвращается в формате: «путь\оглавление»,0. Не подставляется впереди буква диска, а сзади не подставляется символ «\». Например, если текущим является корневое оглавление, эта функция вернет вам пустую строку (DS:[SI] = 0).
4eh Найти 1-й совпадающий файл AH = 4fh DS:DX = адрес строки ASCIIZ с именем файла (допускаются ? И *) CX = атрибут файла для сравнения AX = код ошибки если CF установлен DTA = заполнена данными (если не было ошибки) DS:DX указывает на строку ASCIIZ в форме: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они подразумеваются по умолчанию. Обобщенные символы и ? Допускаются в имени файла и расширении. DOS находит имя первого файла в оглавлении, которое совпадает с заданным именем и атрибутом, и помещает найденное имя и другую информацию в DTA, как показано ниже: Замечания: Атрибут файла обычно используется во «включающем» поиске. Если вас интересуют как файлы, так и оглавления, установите бит атрибута 4 (т.е. Attr | 10H). См. Атрибут файла для полной информации. Типичная последовательность, используемая для поиска всех подходящих файлов: Используйте вызов 1ah, чтобы установить DTA на локальный буфер (или используйте умалчиваемую DTA в PSP по смещению 80H) Уст. CX=атрибут, DS:DX => ASCIIZ диск, путь, обобщенное имя Вызовите функцию 4eh (Найти 1-й) Если флаг CF указывает ошибку, вы закончили (нет совпадений) Уст. DS:DX => DTA (или на данные, которые вы скопировали из DTA после вызова функции 4eh) Повторять Обработать имя файла и данные по адресу DS:DX Вызвать функцию 4fh (Найти следующий) Пока CF=1 не покажет, что совпадений больше нет
4fh Найти следующий совпадающий файл AH = 4fh DS:DX = адрес данных, возвращенных предыдущей 4eh Найти 1-й файл AX = код ошибки если CF установлен DTA = заполнена данными DS:DX указывает на 2bh-байтовый буфер с информацией, возвращенной функцией 4eh Найти 1-й (либо DTA, либо буфер, скопированный из DTA). Используйте эту функцию после вызова 4eh. Следующее имя файла, совпадающее по обобщенному имени и атрибуту файла, копируется в буфер по адресу DS:DX вместе с другой информацией (см. Функцию 4eh о структуре файловой информации в буфере, заполняемом DOS).
56H Переименовать/переместить файл AH = 56H DS:DX = адрес старого ASCIIZ имени (путь/имя существующего файла) ES:DI = адрес нового ASCIIZ имени (новые путь/имя) AX = код ошибки если CF установлен DS:DX и ES:DI указывают на строки ASCIIZ: «d:\путь\имяфайла»,0. Старое имя DS:DX должно отвечать существующему файлу и не может содержать обобщенных символов. Диск и путь необязательны (если опущены, они принимаются по умолчанию). Новое имя ES:DI должно описывать НЕ существующий файл. Если указан диск, он должен быть тем же, что и в старом имени. Если диск или путь опущены, принимаются текущие умолчания. Если старое и новое имя содержат разные пути (явно или принятые по умолчанию), то элемент оглавления для файла ПЕРЕМЕЩАЕТСЯ в оглавление, указанное в новом имени. Замечание: Если ID диска в старом имени отличается от текущего диска DOS, не забывайте указывать такой же ID диска в новом имени.
57H Установить/опросить дату/время файла AH = 57H AL = 0 чтобы получить дату/время файла = 1 чтобы установить дату/время файла BX = описатель файла (handle) CX = (если AL=1) новая отметка времени в формате время/дата файла DX = (если AL=1) новая отметка даты в формате время/дата файла AX = код ошибки если CF установлен CX = отметка времени файла в формате время/дата файла DX = отметка даты файла в формате время/дата файла BX должен содержать описатель открытого файла (см. 3ch или 3dh ). Укажите подфункцию, 0 или 1, в регистре AL. DX и CX задаются в формате памяти; например, младшие 8 бит даты находятся в DH.
5ah Создать уникальный временный файл AH = 5ah DOS 3.0+ DS:DX = адрес строки ASCIIZ с диском и путем (заканчивается \) CX = атрибут файла AX = код ошибки если CF установлен и описатель файла (если нет ошибки) DS:DX = (не изменяется) становится полным ASCIIZ-именем нового файла Открывает (создает) файл с уникальным именем в оглавлении, указанном строкой ASCIIZ, на которую указывает DS:DX. COMMAND.COM использует эту функцию, когда создает временные «канальные» файлы, используемые при переназначении ввода-вывода. Описание пути должно быть готово к присоединению в его конец имени файла. Вы должны обеспечить минимум 12 байт в конце строки. Сама строка должна быть заполнена в одной из форм: «d:\путь\»,0 (указаны диск и путь) ИЛИ «d:»,0 (умалчиваемое оглавление диска) ИЛИ «d:\»,0 (корневое оглавление диска) ИЛИ «»,0 (умалчиваемые диск и оглавление) После возврата строка DS:DX будет дополнена именем файла. Замечания: DOS создает имя файла из шестнадцатеричных цифр, получаемых из текущих даты и времени. Если имя файла уже существует, DOS продолжает создавать новые имена, пока не получит уникальное имя. Создаваемые таким способом файлы — по существу НЕ ВРЕМЕННЫЕ, и их следует удалять посредством функции DOS 41H , когда они не нужны. Версии: Доступна, начиная с DOS 3.0
5bh Создать новый файл AH = 5bh DOS 3.0+ DS:DX = адрес строки ASCIIZ с именем файла CX = атрибут файла AX = код ошибки если CF установлен и описатель файла если ошибок нет DS:DX указывает на строку ASCIIZ в форме: «d:\путь\имяфайла»,0. Если диск и/или путь опущены, они принимаются по умолчанию. Этот вызов идентичен функции DOS 3ch CREATE, с тем исключением, что он вернет ошибку, если файл с заданным именем уже существует. Файл открывается для чтения/записи в совместимом режиме доступа
5ch Блокировать/разблокировать доступ к файлу AH = 5ch DOS 3.0+ AL = подфункция: 0 = заблокировать область файла = 1 = разблокировать ранее захваченную область BX = описатель файла (handle) CX:DX = смещение ((CX 65536) + DX) от начала файла SI:DI = длина блокируемой области ((SI 65536) + DI) байт AX = код ошибки если CF установлен Блокирует или освобождает доступ к участку файла, идентифицируемого описателем в BX. Область файла, начинающаяся по логическому смещению CX:DX и имеющая длину SI:DI, блокируется (захватывается) или разблокируется (освобождается). Смещение и длина обязательны. Разделение файлов ДОЛЖНО быть активизировано (командой SHARE), иначе функция вернет код ошибки «неверный номер функции.» Блокировка действует на операции чтения, записи и открытия со стороны порожденного или конкурирующего процесса. При попытке такого доступа (и режиме доступа , определенном при OPEN как «режим разделения», который запрещает такой доступ), DOS отвергает операцию через вызов INT 24H (обработчик критических ошибок) после трех попыток. DOS при этом выдает сообщение «Abort, Retry, Ignore». Рекомендуемое действие — НЕ пытаться читать файл и ожидать кода ошибки. Вместо этого попытайтесь заблокировать область и действуйте в соответствии с кодом возврата. Это позволяет избежать довольно неустойчивого состояния DOS, связанного с выполнением INT 24H. Блокировка за концом файла не является ошибкой. Вы можете захватить весь файл, задав CX=0, DX=0, SI=0ffffh, DI=0ffffh и AL=0. При освобождении, смещение и длина участка должны точно совпадать со смещением и длиной захваченного участка. Замечания: Дублирование описателя через 45H или 46H дублирует и блокировки. Даже если во время OPEN выбран режим доступа Inherit, механизм блокировки не даст никаких привилегий доступа порожденным процессам, созданным функцией 4bh EXEC (они трактуются как отдельные). Важно, чтобы все блокировки файла были сняты до завершения программы. Если вы используете блокировку, особо отслеживайте вызовы INT 23H (выход Ctrl-Break) и INT 24H (выход по критической ошибке), чтобы снять блокировки до действительного завершения программы. Рекомендуется освобождать блокировки как можно скорее. Всегда блокируйте, обрабатывайте файл и освобождайте блокировку одной операцией. Версии: Доступна, начиная с DOS 3.0
Операции с системой прерываний
25H Установить вектор прерывания AH = 25H AL = номер прерывания DS:DX = вектор прерывания: адрес программы обработки прерывания Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS здесь знает, что вы делаете, и гарантирует, что в момент записи прерывания будут заблокированы. Предупреждение: Не забудьте восстановить DS (если необходимо) после этого вызова.
26H Построить PSP AH = 26H DX = адрес сегмента (параграфа) для нового PSP CS = сегмент PSP, используемого как шаблон для нового PSP Устанавливает PSP для порождаемого процесса по адресу DX:0000. Текущий PSP (100H байт, начиная с CS:0), копируется в DX:0 Поле memtop соответственно корректируется Векторы Terminate, Ctrl-Break и Critical Error копируются в PSP из векторов прерываний INT 22H, INT 23H и INT 24H после этого вы можете загрузить программу с диска и передать ей управление посредством FAR JMP. Замечание: Если вы перехватываете INT 21H, позаботьтесь о помещении в стек корректного CS:IP. Еще лучше использовать функцию 4ch (EXEC).
2ah Дать системную дату AH = 2ah AL = день недели (0=Вск, 1=Пнд. 6=Суб) DOS 3.0+ CX = год (1980 до 2099) DH = месяц (1 до 12) DL = день (1 до 31) Возвращает текущую дату, как она известна системе. Версии: DOS 2.x не гарантирует возврата в AL значения дня; все версии 1.0+ возвращают правильный день недели. Версии до 2.1 имеют проблемы с переходом даты.
2bh Установить системную дату AH = 2bh CX = год (1980 до 2099) DH = месяц (1 до 12) DL = день (1 до 31) AL = 0 если дата корректна Устанавливает системную дату DOS.
2ch Дать время DOS AH = 2ch CH = часы (0 до 23) CL = минуты (0 до 59) DH = секунды (0 до 59) DL = сотые доли секунды (0 до 99) Возвращает текущее время, как оно известно системе. Замечание: Поскольку системные часы имеют частоту 18.2 тиков в секунду (интервал 55мс), DL имеет точность 0.04 сек.
2dh Установить время DOS AH = 2dh CH = часы (0 до 23) CL = минуты (0 до 59) DH = секунды (0 до 59) DL = сотые доли секунды (0 до 99) AL = 0 если время корректно Устанавливает системное время DOS.
2eh Установить/сбросить переключатель верификации AH = 2eh AL = 0 отключить верификацию = 1 включить верификацию Устанавливает, должна ли DOS верифицировать (считывать обратно) каждый сектор, записываемый на диск. Это замедляет операции записи на диск, но гарантирует максимальную надежность записи. Функция 56H Get Verify возвращает текущий статус верификации DOS.
2fh Дать адрес текущей DTA AH = 2fh ES:BX = адрес начала текущей DTA Возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA глобальна для всех процессов, в рекурсивной процедуре (например, при проходе по дереву оглавления) может потребоваться сохранить адрес DTA, а впоследствии восстановить его посредством функции 1ah «Уст. DTA». Замечание: Эта функция изменяет сегментный регистр ES.
30H Дать номер версии DOS AH = 30H AL = старший номер версии AH = младший номер версии BX,CX = 0000H DOS 3.0+ Возвращает в AX значение текущего номера версии DOS. Например, для DOS 3.2, в AL возвращается 3, в AH — 2. Замечание: Если в AL возвращается 0, можно предполагать, что работает DOS более ранней версии, чем DOS 2.0. Версии: DOS 2.x не гарантирует очистки регистров CX и BX.
31H Завершиться и остаться резидентным – KEEP AH = 31H AL = код выхода DX = объем памяти, оставляемой резидентной, в параграфах Выходит в родительский процесс, сохраняя код выхода в AL. Код выхода можно получить через функцию 4dh Wait. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт = DX 16). Эта функция перекрывает функцию INT 27H, которая не возвращает код выхода и неспособна установить резидентную программу, большую 64K.
33H Установить/опросить статус Ctrl-Break AH = 33H AL = 0 чтобы опросить текущий статус контроля Ctrl-Break AL = 1 чтобы установить статус контроля Ctrl-Break DL = требуемый статус (0=OFF, 1=ON) (только при AL=1) DL = текущий статус (0=OFF, 1=ON) Если AL=0, в DL возвращается текущий статус контроля Ctrl-Break. Если AL=1, в DL возвращается новый текущий статус. Когда статус ON, DOS проверяет на Ctrl-Break с консоли для большинства функций (исключая 06H и 07H). При обнаружении, выполняется INT 23H (если оно не перехватывается, то это снимает процесс). Когда статус OFF, DOS проверяет на Ctrl-Break лишь при операциях стандартного в/в, стандартной печати и стандартных операциях AUX.
35H Дать вектор прерывания AH = 35H AL = номер прерывания (00H до 0ffh) ES:BX = адрес обработчика прерывания Возвращает значение вектора прерывания для INT (AL); то есть, загружает в BX 0000:[AL*4], а в ES — 0000:[(AL*4)+2]. Предупреждение: Эта функция изменяет сегментный регистр ES.
44H Управление устройством в/в – IOCTL AH = 43H AL = код подфункции: AL = 0ch — (зарезервировано) Прочие = (в зависимости от подфункции) AX = код ошибки если CF установлен или иное значение (в зависимости от подфункции) IOCTL предоставляет метод взаимодействия с устройствами и получения информации о файлах. Входные параметры и выходные значения варьируются в зависимости от кода подфункции в регистре AL. Версии: Подфункции 0-7 . DOS 2.1+ Подфункции 8,0bh . DOS 3.0+ Подфункции 9,0ah . DOS 3.1+ Подфункции 0dh,0eh,0fh . DOS 3.2+ ———————————— Подфункция 00H: Запросить флаги информации об устройстве Вход: BX= описатель файла (устройство или дисковый файл) Выход: DX= IOCTL Инф об устр ———————————— Подфункция 01H: установить флаги информации об устройстве Вход: BX = описатель файла (устройство или дисковый файл) DX = IOCTL Инф об устр (DH должен быть нулевым) Выход: DX= IOCTL Инф об устр ———————————— Подфункция 02-03: читать (AL=02H) или писать (AL=03H) строку IOCTL на СИМВОЛЬНОЕ устр Вход: DS:DX = адрес буфера (чтение) или данных (запись) CX= число передаваемых байт BX= описатель файла (только устройство — не файл!) Выход: AX= код ошибки если CF установлен ———————————— Подфункция 04-05: читать (AL=04H) или писать (AL=05H) строку IOCTL на БЛОЧНОЕ устр Вход: DS:DX = адрес буфера (чтение) или данных (запись) CX = число передаваемых байт BL = : Вход: CL = код действия 40H = установить параметры устройства 60H = дать параметры устройства 41H = писать дорожку логического устройства 61H = читать дорожку логического устройства 42H = форматировать дорожку с верификацией 62H = Верифицировать дорожку логического устройства DS:DX=> адрес пакета данных IOCTL Выход: AX= код ошибки если CF установлен DS:DX=> пакет данных может содержать информацию возврата. ———————————— Подфункция 0eh: Выяснить, назначил ли драйвер устройства несколько логических устройств одному физическому устройству. [DOS 3.2+] Вход: BL= . Эта функция позволяет вам сообщать DOS, что диск с указанным >
48H Распределить память (дать размер памяти) AH = 48H BX = запрошенное количество памяти в 16-байтовых параграфах AX = код ошибки если CF установлен BX = размер доступной памяти в параграфах (если памяти не хватает) AX = сегментный адрес распределенного блока (если нет ошибок) Распределяет блок памяти длиной BX параграфов, возвращая сегментный адрес этого блока в AX (блок начинается с AX:0000). Если распределение неудачно, устанавливается CF, в AX возвращается код ошибки, а BX содержит максимальный размер доступной для распределения памяти (в параграфах). Чтобы определить наибольший доступный кусок, общепринято устанавливать BX=0ffffh перед вызовом. Распределение завершится с ошибкой, возвратив размер максимального блока памяти в BX. Замечание: Когда процесс получает управление через функцию 4bh EXEC, вся доступная память уже распределена ему.
49H Освободить распределенный блок памяти AH = 49H ES = сегментный адрес (параграф) освобождаемого блока памяти AX = код ошибки если CF установлен Освобождает блок памяти, начинающийся с адреса ES:0000. Этот блок становится доступным для других запросов системы. Вообще говоря, вы должны освобождать лишь те блоки памяти, которые вы получили через функцию 48H распределить память. Родитель отвечает за освобождение памяти порожденных процессов. Тем не менее, ничто не препятствует вам освобождать память чужих процессов.
4ah Сжать или расширить блок памяти AH = 4ah ES = сегмент распределенного блока памяти BX = желаемый размер блока в 16-байтовых параграфах AX = код ошибки если CF установлен BX = наибольший доступный блок (если расширение неудачно) Изменяет размер существующего блока памяти. Когда программа получает управление, функция 4bh EXEC уже распределила блок памяти, начиная с PSP, который содержит всю доступную память. Чтобы освободить память для запуска порождаемых процессов, блок памяти, начинающийся с PSP, необходимо сначала сжать. Замечание: Функция 31H (KEEP) и INT 27H (TSR) сжимают блок по адресу PSP.
4bh Выполнить или загрузить программу – EXEC AH = 4bh DS:DX = адрес строки ASCIIZ с именем файла, содержащего программу ES:BX = адрес EPB (EXEC Parameter Block — блока параметров EXEC) AL = 0 = загрузить и выполнить AL = 3 = загрузить программный оверлей AX = код ошибки если CF установлен Предоставляет средства одной программе (родителю) вызвать другую программу (ребенка), которая по завершению возвратит управление родителю. DS:DX указывает на строку ASCIIZ в форме: «d:\путь\имяфайла»,0. Если диск или путь опущены, они подразумеваются по умолчанию. ES:BX указывает на блок памяти, подготовленный как EPB, формат которого зависит от запрошенной подфункции в AL. AL=0 EXEC: так как родительская программа первоначально получает всю доступную память в свое распоряжение, вы должны освободить часть памяти через функцию 4ah до вызова EXEC (AL=0). Обычная последовательность: 1. Вызовите функцию 4ah с ES=сегменту PSP и BX=минимальному объему памяти, требуемой вашей программе (в параграфах). 2. Подготовьте строку ASCIIZ с именем вызываемого программного файла и установите DS:DX на первый символ этой строки. 3. Подготовьте блок параметров EXEC со всеми необходимыми полями. 4. Сохраните текущие значения SS, SP, DS, ES и DTA в переменных, адресуемых через регистр CS (CS — это единственная точка для ссылок после того, как EXEC вернет управление от ребенка). 5. Выдайте вызов EXEC с AL=0. 6. Восстановите локальные значения SS и SP. 7. Проверьте флаг CF, чтобы узнать, не было ли ошибки при EXEC. 8. Восстановите DS, ES и локальную DTA, если необходимо. 9. Проверьте код выхода через функцию 4dh WAIT (если надо). Все открытые файлы дублируются, так что ребенок может обрабатывать данные как через описатели файлов, так и через стандартный в/в. Режимы доступа описателей дублируются, но любые активные блокировки файлов не будут относиться к ребенку. См. Функцию 5ch. После возврата из ребенка, векторы INT 22H Terminate, INT 23H Ctrl-Break и INT 24H Critical Error восстанавливаются в их предыдущие значения. AL=3 LOAD: Эта подфункция используется для загрузки «оверлея». DS:DX указывает на ASCIIZ имя файла, а ES:BX указывает на «LOAD»-версию блока параметров EXEC. Главное значение этой подфункции в том, что она считывает заголовок EXE и выполняет необходимые перемещения сегментов, как это требуется для программ .EXE. Замечания: Эта функция использует программу-загрузчик из COMMAND.COM, который транзитен в DOS 2.x (и, возможно, уже перекрыт программой). В этом случае возникнет ошибка, если DOS не найдет файл COMMAND.COM. Вы должны обеспечить корректную строку COMSPEC= в окружении перед вызовом этой функции. Вместо разбора собственных FCB (как требуется для EPB), вы можете найти удобным загрузить и выполнить вторичную копию файла COMMAND.COM, используя опцию /C. Например, чтобы выполнить программу FORMAT.COM, установите DS:DX на адрес строки ASCIIZ: «\command.com»,0 и установите EPB+2 на сегмент и смещение следующей строки команд: 0eh,»/c format a:/s/4″,0dh такой вторичный интерпретатор команд использует очень мало памяти (около 4K). Вы можете поискать в окружении DOS строку COMSPEC=, чтобы установить точное местоположение файла COMMAND.COM.
4ch Завершить программу – EXIT AH = 4ch AL = код выхода Возвращает управление от порожденного процесса его родителю, устанавливая код выхода, который можно опросить функцией 4dh WAIT. Управление передается по адресу завершения в PSP завершающейся программы. Векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненным в родительском PSP. Замечание: Значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.
4dh Дать код выхода программы – WAIT AH = 4dh AL = код выхода последнего завершившегося процесса AH = 0 — нормальное завершение AH = 1 — завершение через Ctrl-Break AH = 2 — завершение по критической ошибке устройства AH = 3 — завершение через функцию 31H KEEP Возвращает код выхода последнего из завершившихся процессов. Эта функция возвращает правильную информацию только однажды для каждого завершившегося процесса.
54H Дать переключатель верификации DOS AH = 54H AL = 0 если верификация выключена (OFF) AL = 1 если верификация включена (ON) Возвращает текущий статус верификации записи DOS. Если в AL возвращается 1, то DOS считывает обратно каждый сектор, записываемый на диск, чтобы проверить правильность записи. Функция DOS 2eh позволяет установить/изменить режим верификации.
59H Дать расширенную информацию об ошибке AH = 59H DOS 3.0+ BX = 0000H (номер версии: 0000H для DOS 3.0, 3.1 и 3.2) AX = расширенный код ошибки (0, если не было ошибки) BH = класс ошибки BL = предлагаемое действие CH = сфера (где произошла ошибка) Используйте эту функцию, чтобы уточнить, что предпринять после сбоя функции DOS по ошибке (только DOS 3.0+ ). Вызывайте ее: В обработчике критических ошибок INT 24H После любой функции INT 21H , возвратившей Carry-флаг После вызова FCB-функции, возвратившей AL=0ffh Версии: Эта функция отсутствует в версиях до DOS 3.00. В DOS 2.x, когда флаг CF указывает на ошибку, используйте логику вашей программы, чтобы отреагировать на ошибку. В DOS 3.0+, когда функция возвращает CF=1, рекомендуем вам игнорировать код ошибки, возвращенный в AX, вызвать эту функцию и выполнить действие, предложенное в BL.
5eh Разные сетевые функции AH = 5eh DOS 3.1+ AL = подф.: 0=дать имя машины (узла) в сети AL = 2=установить стартовую строку сетевого принтера AL = 3=извлечь стартовую строку сетевого принтера Прочие = (зависят от подфункции) AX = код ошибки если CF установлен Прочие = (зависят от подфункции) Эти функции доступны при установленной IBM PC Network Program. Версии: Доступны, начиная с DOS 3.1 ———————————— Подф. 00H: Извлекает имя машины (узла), как оно известно в сети. Вход: DS:DX=> буфер пользователя для ASCIIZ сетевого имени Выход: DS:DX=> буфер, содержащий сетевое имя CH= 0=имя не определено; иначе=имя определено CL= номер имени NETBIOS (если CH ненулевой) AX= код ошибки если CF установлен Замечание: Сетевое имя — 15-симв. (дополненная пробелами) строка ASCIIZ ———————————— Подф. 02H: Задает настроечную строку, посылаемую на принтер каждый раз, когда эта машина выдает результаты на сетевой принтер. Вход: DS:SI=> буфер, содержащий настроечную строку (до 64 байт) CX= длина настроечной строки BX= индекс в списке назначений, отвечающий принтеру Выход: AX= код ошибки если CF установлен ———————————— Подф. 03H: Извлекает настроечную строку принтера, заданную ранее посредством DOS Fn 5eh подф. 02H. Вход: DS:DI=> 64-байтовый буфер пользователя для результата bx= индекс принтера в списке назначений Выход: ES:DI=> буфер, заполненный настроечной строкой CX= длина настроечной строки AX= код ошибки если CF установлен Замечание: Поскольку индекс в списке назначений может измениться в любой момент, используйте функцию 5fh подф. 02H, чтобы получить индекс непосредственно перед вызовом этой функции.
5fh Переназначение устройств в сети AH = 5fh DOS 3.1+ AL = подф.: 2=получить элемент списка переназначений устройств = 3=переназначить сетевое устройство = 4=отменить переназначение сетевого устройства Прочие = (зависят от подфункции) AX = код ошибки если CF установлен Эти функции доступны при установленной IBM PC Network Program. Версии: Доступны, начиная с DOS 3.1 ———————————— Подф. 02H: Извлекает элемент из списка переназначений сетевых устройств. Вход: DS:DI=> 128-байтовое ASCIIZ локальное имя устр. («LPT1»,0) ES:DI=> 128-байтовый буфер с ASCIIZ сетевым именем BX= индекс в списке назначений Выход: DS:DI=> ASCIIZ локальное имя устройства (напр., «LPT1»,0) ES:DI=> ASCIIZ сетевое имя BL= тип устр: 3=принтер; 04=файл ‘устройство’ BH= статус устр: бит 0=1 -неверное устр.; 0=верное CX= сохраненный параметр (при NETBIOS, всегда 0) AX= код ошибки если CF установлен DX,BP = (изменены) Замечание: обычно эту функцию вызывают с BX=0, затем повторяют вызовы, увеличивая значение BX, пока DOS не вернет ошибку 12H (больше нет файлов). ———————————— Подф. 03H: этот вызов определяет имена оглавлений для сети и перенаправляет доступ на сетевые принтеры. Замеч: доступ к принтеру переназначается на уровне ROM-BIOS INT 17H. Вход: DS:SI = ASCIIZ имя исходного устройства ES:DI = ASCIIZ назначение (сетевой путь с паролем) BL= тип устр: 03=принтер; 04=файл ‘устройство’ CX= параметр для вызывающего (задавайте 0 для NETBIOS) Выход: AX= код ошибки если CF установлен Замеч: если BL=03, то источник задает ASCIIZ-имя принтера (например, «LPT1»,0). Назначение кодируется в форме: [\\computername\],0,[password],0. Если пароль начинается с 00, считается, что пароля нет. Если BL=04, то источник задает ASCIIZ-имя диска (например, «F:»,0), а назначение — ASCIIZ-имя пути. После вызова этой функции, локальные обращения к этому диску переназначаются на выбранные имя компьютера и путь. ———————————— Подф. 04H: Отменить сетевое переназначение для указанного устройства. Вход: DS:SI=> ASCIIZ-имя устройства или ,0), то переназначение этого диска прекращается, и ID диска восстанавливает свое предыдущее значение.
Стандартное устройство ввода (клавиатура)
1 Стандартное устройство вывода (экран)
2 Стандартное устройство для вывода сообщений об ошибках (экран)
3 Стандартное устройство последовательного ввода/вывода, обычно это асинхронный адаптер COM1 .
4 Стандартное печатающее устройство (обычно первый принтерный порт LPT1 )

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

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

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

Описание функций MS-DOS, предназначенных для работы с файловой системой, мы начнем с функций получения справочной информации.

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

Если вы запускаете программу, которая находится в каком-либо каталоге на одном из дисков, то эти диск и каталог становятся текущими для MS-DOS. Это можно понимать в том смысле, что программе не требуется каждый раз при работе с файлами указывать требуемый диск или каталог.

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

Для установки текущего диска можно использовать функцию 0Eh , которая имеет следующий формат вызова:

На входе: AH = 0Eh
DL = Номер дисковода (0 — А:, 1 — В:, и т.д.)
На выходе: AL = Общее количество дисководов в системе. Эта величина соответствует параметру LASTDRIVE файла CONFIG.SYS.

Для того чтобы узнать номер текущего дисковода, программа может воспользоваться функцией 19h :

На входе: AH = 19h
На выходе: AL = Номер текущего дисковода (0 — А:, 1 — В:, и т.д.).

Функция 3Bh предназначена для установки текущего каталога:

На входе: AH = 3Bh
DL = Номер дисковода (0 — текущий, 1 — А:, 2 — В:, и т.д.)
DS:DX = Адрес буфера, содержащего путь каталога, который должен стать текущим.
На выходе: AX = Код ошибки, если CY установлен в 1 .

Буфер пути может иметь максимальный размер 64 байта. Он должен содержать путь в формате ASCIIZ, т.е. строку, закрытую двоичным нулем, например: «path\dirname»,0 . Строка не должна содержать литеры, обозначающие диск. Если текущим должен стать корневой каталог, строка должна состоять только из одного двоичного нуля.

Для того чтобы узнать текущий каталог, вы можете воспользоваться функцией 47h :

На входе: AH = 47h
DL = Номер дисковода ( 0 — текущий, 1 — А:, 2 — В: , и т.д.)
DS:SI = Адрес буфера для записи пути текущего каталога.
На выходе: AX = Код ошибки, если флаг переноса CF установлен в 1 .

Буфер должен иметь размер не менее 64 байтов, текущий каталог возвращается в формате ASCIIZ без литеры, обозначающей диск. Если текущим является корневой каталог, регистровая пара DS:SI будет указывать на нулевую строку (состоящую из одного двоичного нуля).

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

Информация о таблице размещения файлов FAT для текущего диска может быть получена с помощью функции 1Bh прерывания INT 21h , имеющего следующий формат:

На входе: AH = 1Bh
На выходе: DS:BX = Адрес первого байта FAT . Это байт ID идентификации среды носителя данных, соответствует байту media в блоке параметров BIOS.
DX = Общее количество кластеров на диске.
AL = Количество секторов в одном кластере.
CX = Количество байтов в одном секторе.

Дополнительно эта функция возвращает информацию об общем количестве кластеров на диске, размере кластера в секторах и размере сектора в байтах. Для версий MS-DOS, более ранних, чем 2.0, регистровая пара DS:BX указывала на FAT , считанный в память. Более поздние версии операционной системы могут содержать по этому адресу только часть таблицы размещения файлов.

Для получения аналогичной информации не о текущем, а о любом диске, используйте функцию 1Ch . Эта функция полностью аналогична предыдущей, за исключением того, что в регистре DL должен быть указан код дисковода: 0 — текущий, 1 — А:, 2 — В: и т.д. Эта функция доступна в MS-DOS версии 2.0 и в более поздних версиях.

Если вас интересует размер свободного места на диске, вы можете его узнать с помощью функции 36h , имеющей следующий формат:

На входе: AH = 36h
DL = Номер дисковода ( 0 — текущий, 1 — А:, 2 — В: , и т.д.)
На выходе: AX = Количество секторов в кластере; 0FFFFh , если был задан неправильный номер дисковода;
BX = Количество свободных кластеров на диске.
CX = Количество байтов в одном секторе.
DX = Общее количество кластеров на диске.

Эта функция возвращает в регистре AX число 0FFFFh , если вы неправильно указали номер дисковода.

При обсуждении векторной таблицы связи мы рассказывали о блоках управления устройствами DDCB . Поле dev_cb векторной таблицы связи содержит FAR -адрес цепочки этих блоков.

Приведем еще раз формат блока DDCB . Напомним, что он изменяется в зависимости от версии DOS. Для версий 2.х и 3.х блок DDCB имеет следующий формат:

(0) 1 drv_num номер устройства ( 0 соответствует устройству А: , 1 — В: и т.д.)
(+1) 1 drv_numd дополнительный номер устройства внутри драйвера
(+2) 2 sec_size размер сектора в байтах
(+4) 1 clu_size число, на единицу меньшее количества секторов в кластере
(+5) 1 clu_base если содержимое этого поля не равно нулю, то для получения общего числа секторов в кластере надо возвести 2 в степень clu_base и получившееся число прибавить к clu_size
(+6) 2 boot_siz количество зарезервированных секторов (boot-сектора, начало корневого каталога)
(+8) 1 fat_num количество копий FAT
(+9) 2 max_dir максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное число файлов, которое может содержать корневой каталог на этом устройстве)
(+11) 2 data_sec номер первого сектора данных на диске (номер сектора, соответствующего кластеру номер 2)
(+13) 2 hi_clust максимальное количество кластеров (равно увеличенному на 1 количеству кластеров данных)
(+15) 1 fat_size количество секторов, занимаемых одной копией FAT
(+16) 2 root_sec номер первого сектора корневого каталога
(+18) 4 drv_addr FAR -адрес заголовка драйвера, обслуживающего данное устройство
(+22) 1 media байт описания среды носителя данных
(+23) 1 acc_flag флаг доступа, 0 означает, что к устройству был доступ
(+24) 4 next адрес следующего блока DDCB , для последнего блока в поле смещения находится число FFFF
————— только для DOS 2.x —————
(+28) 2 dir_clu номер начального кластера текущего каталога (0 для корневого каталога)
(+30) 64 dir_path строка в формате ASCIIZ, содержащая путь к текущему каталогу
————— DOS 3.х —————————-
(+28) 2 reserv1 зарезервировано, обычно равно 0
(+30) 2 built число FFFF в этом поле означает, что блок DDCB был построен

Формат блока DDCB для DOS версии 4.х:

(0) 1 drv_num номер устройства ( 0 соответствует устройству А:, 1 — В: и т.д.)
(+1) 1 drv_numd дополнительный номер устройства внутри драйвера
(+2) 2 sec_size размер сектора в байтах
(+4) 1 clu_size число, на единицу меньшее количества секторов в кластере
(+5) 1 clu_base если содержимое этого поля не равно нулю, то для получения общего числа секторов в кластере надо возвести 2 в степень clu_base и получившееся число прибавить к clu_size
(+6) 2 boot_siz количество зарезервированных секторов (boot-сектора, начало корневого каталога)
(+8) 1 fat_num количество копий FAT
(+9) 2 max_dir максимальное число дескрипторов файлов в корневом каталоге (т.е. максимальное число файлов, которое может содержать корневой каталог на этом устройстве)
(+11) 2 data_sec номер первого сектора данных на диске (номер сектора, соответствующего кластеру номер 2)
(+13) 2 hi_clust максимальное количество кластеров (равно увеличенному на 1 количеству кластеров данных)
(+15) 1 fat_size количество секторов, занимаемых одной копией FAT
(+16) 1 reserv1 зарезервироано
(+17) 2 root_sec номер первого сектора корневого каталога
(+19) 4 drv_addr FAR -адрес заголовка драйвера, обслуживающего данное устройство
(+23) 1 media байт описания среды носителя данных
(+24) 1 acc_flag флаг доступа, 0 означает, что к устройству был доступ
(+25) 4 next адрес следующего блока DDCB , для последнего блока в поле смещения находится число FFFF
(+29) 2 reserv2 зарезервироано
(+31) 2 built число FFFF в этом поле означает, что блок DDCB был построен

Файл sysp.h содержит определение типа DDCB для MS-DOS версии 4.х:

При описании векторной таблицы связи мы приводили примеры использования блоков DDCB . Для получения адреса блока DDCB конкретного дисковода можно воспользоваться недокументированной функцией 32h . Она имеет следующий формат вызова:

На входе: AH = 32h
DL = Номер дисковода ( 0 — текущий, 1 — А:, 2 — В: , и т.д.)
На выходе: AL = 0, если был задан правильный номер дисковода;
0FFh , если был задан неправильный номер дисковода;
DS:BX = Адрес блока DDCB

Для получения адреса блока DDCB текущего диска можно воспользоваться недокументированной функцией 1Fh , которая имеет формат, аналогичный функции 32h , за исключением того, что не надо задавать номер дисковода в регистре DL .

Какая еще полезная информация может быть получена при использовании функций MS-DOS?

С помощью функции 33h программа может проверить или установить флаг Ctrl-Break и узнать номер диска, с которого выполнялась загрузка операционной системы:

На входе: AH = 33h
AL = Код подфункции:
0 — Проверить текущее состояние флага Ctrl-Break;
1 — Установить флаг Ctrl-Break;
5 — Определить номер диска, который был использован для загрузки операционной системы.
DL = Значение устанавливаемого флага Ctrl-Break для подфункции 1 (0 — OFF, 1 — ON).
На выходе: DL = Текущее состояние флага Ctrl-Break для подфункции 0;
Номер диска, использованного для загрузки операционной системы для подфункции 5 ( 1 — А:, 2 — В: , и т.д.).

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

Состояние флага Ctrl-Break влияет на возможность прервать выполнение программы нажатием комбинации клавиш Ctrl-Break или Ctrl-C. Если флаг находится в состоянии OFF, DOS проверяет эту комбинацию клавиш только при вызове функций стандартного ввода/вывода на консоль, принтер и последовательный порт. Если флаг установлен в состояние ON, комбинация клавиш проверяется и при вызове других функций MS-DOS. Если операционная система зафиксировала нажатие указанной комбинации клавиш, она выполняет прерывание INT 23h , которое завершает работу текущей программы.

Функция 2Fh возвращает в регистровой паре ES:BX адрес текущей области DTA (Disk Transfer Area), которая используется при поиске файлов в каталогах.

Функция 54h позволяет программе узнать текущее состояние флага проверки записывающейся на диск информации. В регистре AL эта функция возвращает текущее состояние флага. Если содержимое регистра равно 1, операционная система после записи сектора считывает его для проверки. Разумеется, такая проверка снижает скорость работы программы. Если после вызова функции регистр AL содержит 0, проверка записи не выполняется.

Для установки флага проверки записи можно использовать функцию 2Eh . Перед вызовом функции в регистр AL необходимо занести новое значение флага проверки: 0 — проверка не нужна; 1 — должна выполняться проверка записанной информации.

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат несколько функций, облегчающих получение справочной информации о состоянии дисковой подсистемы.

Функция _dos_getdiskfree() использует функцию 36h для получения информации о диске. Файл dos.h содержит описание этой функции:

Параметр drive задает номер используемого дисковода: 0 — текущий, 1 — А: , и т.д.

Информация возвращается в структуре diskfree_t , которая определена в файле dos.h:

В этой структуре:

unsigned total_clusters общее количество кластеров на диске;
unsigned avail_clusters количество свободных кластеров;
unsigned sectors_per_cluster количество секторов, занимаемых кластером;
unsigned bytes_per_sector размер сектора в байтах.


Для получения номера текущего диска и для установки номера текущего диска можно использовать, соответственно, функции _dos_getdrive() и _dos_setdrive().

Функция _dos_getdrive() имеет формат:

Эта функция пользуется функцией 19h для получения номера текущего диска, который записывается по адресу, задаваемому параметром. Значение 1 соответствует диску А:, 2 — В:, и т.д.

Функция _dos_setdrive() предназначена для установки текущего диска и может быть использована для определения общего числа дисков в системе:

Параметр drive опеределяет текущий диск ( 1 — А: , и_т.д.), по адресу, задаваемому вторым параметром, функция записывает общее количество логических дисков, установленных в системе. Функция _dos_setdrive() использует функцию 0Eh прерывания INT 21h.

Для иллюстрации способов использования функций _dos_getdrive(), _dos_setdrive(), _dos_getdiskfree() мы составили следующую программу:

После форматирования логический диск содержит корневой каталог. Если диск форматируется как системный, в этом каталоге могут находится дескрипторы файлов операционной системы IO.SYS, MSDOS.SYS, COMMAND.COM.

Операционная система предоставляет программам пользователя удобный сервис для создания, уничтожения и переименования каталогов. Используя сведения, приведенные в этой книге, вы сможете изменять структуру каталогов сами, не прибегая к услугам MS-DOS. Однако это следует делать только тогда, когда операции с каталогами по каким-то причинам нежелательно выполнять с использованием функций операционной системы.

Для создания каталога используйте функцию 39h прерывания INT 21h:

На входе: AH = 39h
DS:DX = Адрес строки в формате ASCIIZ, содержащей имя создаваемого каталога.
На выходе: AL = Код ошибки, если был установлен в 1 флаг переноса CF .

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

Размер строки с именем каталога не должен превышать по длине 64 байта.

Удалить существующий каталог можно с помощью функции 3Ah . Формат вызова этой функции аналогичен предыдущему:

На входе: AH = 3Ah
DS:DX =Адрес строки в формате ASCIIZ, содержащей имя удаляемого каталога.
На выходе: AL = Код ошибки, если был установлен в 1 флаг переноса CF .

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

Для изменения имени каталогов и файлов предназначена функция 56h :

На входе: AH = 56h
DS:DX = Адрес строки в формате ASCIIZ, содержащей старое имя каталога или файла.
ES:DI = Адрес строки в формате ASCIIZ, содержащей новое имя каталога или файла.
На выходе: AL = Код ошибки, если был установлен в 1 флаг переноса CF .

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

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

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

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат несколько функций, предназначенных для работы с каталогами.

Функция getcwd() предназначена для определения текущего каталога. Прототип этой функции описан в файле direct.h:

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

Если в качестве первого параметра указать NULL , функция динамически закажет буфер длиной n байтов из области кучи. Эту память впоследствии необходимо будет освободить при помощи функции free() . Функция getcwd() возвращает указатель на буфер, содержащий текущий каталог.

Приведем пример простой программы, которая выводит на экран информацию о текущем каталоге:

Для создания и удаления каталогов, изменения текущего каталога имеются функции mkdir(), rmdir(), chdir().

Все эти функции имеют один параметр — путь каталога, который имеет тип (char_*). В случае успешного выполнения операции функции возвращают 0 , при ошибке — 1 .

Приведем небольшой пример, использующий перечисленные выше функциии:

Для переименования каталогов (и файлов) предназначена функция rename():

Способ ее использования очевиден: необходимо задать старое и новое имена каталогов. Можно задавать как полный путь, так и просто имя каталога/файла. В последнем случае операция переименования выполняется над каталогами или файлами, находящимися в текущем каталоге.

Функция может возвращать один из кодов ошибки:

ENOENT Нет такого файла или каталога
EACCES Нет прав доступа
EXDEV Другой диск

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

Важное замечание: если вы задаете полный путь, в строке пути повторяйте символ ‘\’ два раза. Это нужно для того, чтобы избежать конфликта с форматом представления констант в языке С. Например:

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

Пара функций 4Eh и 4Fh предназначены для сканирования каталогов.

Эти функции используются вместе следующим образом:

  • Вызывается функция 4Eh для поиска в каталоге файла, соответствующего образцу. В образце можно использовать символы ? и *, которые означают, соответственно, один любой символ и любое количество любых символов. Информация о найденном файле располагается в специальной области, назначенной каждой работающей программе — области DTA .
  • Вызывается в цикле функция 4Fh для поиска остальных файлов, удовлетворяющих образцу, заданному при вызове функции 4Eh . Условие завершения цикла — отсутствие в каталоге указанных файлов.

Приведем формат вызова функций 4Eh и 4Fh .

На входе: AH = 4Eh
CX = Атрибуты файла, которые будут использованы при поиске. Будут найдены файлы, имеющие заданный в этом регистре атрибут.
DS:DX = Адрес строки в формате ASCIIZ, содержащей путь каталогаили файла.
На выходе: AL = Код ошибки, если был установлен в 1 флаг переноса CF .

На входе: AH = 4Fh
На выходе: AL = Код ошибки, если был установлен в 1 флаг переноса CF .

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

Для работы с областью DTA MS-DOS имеет две функции. Это функция 2Fh , позволяющая получить адрес области DTA (она возвращает этот адрес в регистрах ES:BX ), и функция 1Ah , предназначенная для установки своей области DTA (адрес новой области DTA должен быть указан в регистрах DS:DX ).

Напомним, что по умолчанию область DTA занимает 128 байтов в префиксе сегмента программы PSP со смещением 80h .

В случае успешного поиска функции 4Eh и 4Fh помещают в DTA информацию о найденных файлах в следующем формате:

(0) 20 Зарезервировано.
(+21) 1 Атрибуты найденного файла
(+22) 2 Поле времени последнего обновления фалйла
(+24) 2 Поле даты последнего обновления фалйла
(+26) 4 Длина файла
(+30) 13 Имя файла и расширение в формате ASCIIZ

Номер начального класетра, распределенного файлу или каталогу, невозможно получить с помощью функций 4Eh и 4Fh .

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат две функции, предназначенные для сканирования каталогов — _dos_findfirst() и _dos_findnext() .

Приведем прототипы этих функций, описанные в файле dos.h :

В этих функциях параметр pattern определяет образец для поиска файлов, параметр attr — атрибуты файла — используется в качестве дополнительного критерия поиска. Параметр found представляет собой указатель на структуру, в которую будет записываться информация о найденных файлах. Эта структура определена в файле dos.h :

Приведем текст программы просмотра содержимого каталога. Программа принимает из командной строки параметр — образец для показа файлов. Если вы укажете параметр *.* , будет выведена информация обо всех файлах. Можно задавать полный путь: c:\*.* .

При запуске программы с параметром *.com на экран будет выведена информация:

В этом разделе мы рассмотрим функции MS-DOS, предназначенные для создания, переименования, удаления и перемещения файлов. Операции чтения из файла и записи в файл будут описаны в следующем разделе.

Для создания файла предназначена функция 3Ch прерывания INT 21h . С помощью этой функции может быть создан файл как в текущем, так и в любом другом каталоге. Если файл с указанным именем уже существует, он обрезается до нулевой длины. Будьте осторожны при использовании этой функции — она может уничтожить нужный вам файл.

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

Приведем формат вызова функции создания файла:

На входе: AH = 3Ch
CX = Атрибуты создаваемого файла:
00h — обычный файл;
01h — только читаемый файл;
02h — скрытый файл;
04h — системный файл.
DS:DX = Адрес строки, содержащей путь создаваемого файла
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
Файловый индекс, если флаг переноса сброшен в 0.

При выполнении этой функции возможны следующие ошибки:

  • отсутствует какой-либо элемент в пути для создаваемого файла, например, диск или каталог;
  • была сделана попытка создать файл в корневом каталоге, но корневой каталог переполнен;
  • в указаннном каталоге уже есть файл с таким именем, и этот файл имеет атрибут «Только читаемый»;
  • пользователь, который работает в сети, не имеет прав доступа для выполнения указанной операции.

Операционная система игнорирует попытки создания с помощью этой функции каталогов или метки диска.

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

Формат вызова функции:

На входе: AH = 5Bh
CX = Атрибуты создаваемого файла:
00h — обычный файл;
01h — только читаемый файл;
02h — скрытый файл;
04h — системный файл.
DS:DX = Адрес строки, содержащей путь создаваемого файла
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
Файловый индекс, если флаг переноса сброшен в 0 .

Если вам требуется временный файл, вы можете создать его с помощью функции 5Ah :

На входе: AH = 5Ah
CX = Атрибуты создаваемого файла:
00h — обычный файл;
01h — только читаемый файл;
02h — скрытый файл;
04h — системный файл.
DS:DX = Адрес буфера, в который функция запишет путь созданного временного файла. Размер этого буфера должен быть по крайней мере 13 байтов.
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
Файловый индекс, если флаг переноса сброшен в 0 .

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

Перед тем, как начать работу с файлом, его нужно открыть. Функции, создающие новые файлы, открывают новые файлы автоматически. Для того, чтобы открыть существующий файл, вы можете воспользоваться функцией 3Dh :

На входе: AH = 3Dh
AL = Требуемый режим доступа:

Бит 7: флаг наследования

0 — файловый индекс наследуется порожденным процессом
1 — файловый индекс не наследуется порожденным процессом

Биты 4. 6: режим разделения

000 — режим совместимости
001 — запрещение всех видов доступа
010 — запрещение записи
011 — запрещение чтения
100 — разрешение всех видов доступа

Бит 3:0 — зарезервировано

Биты 0. 2: вид доступа

000 — чтение
001 — запись
010 — чтение/запись

DS:DX = Адрес строки, содержащей путь открываемого файла
На выходе: AX = Код ошибки, если флаг переноса CF был установлен в 1 ;
Файловый индекс, если флаг переноса сброшен в 0 .

С помощью функции 3Dh можно открыть любой файл (но не каталог). Если требуется вид доступа «запись», открываемый файл не должен иметь атрибут «Только читаемый».

Для использования битов 4. 7 (управляющих доступом к файлу другими программами в сети) должна быть запущена программа SHARE.EXE.

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

Операционная система MS-DOS версии 4.0 имеет в своем составе функцию 6Ch , обладающую расширенными возможностями по созданию и открытию файлов:

На входе: AH = 6Ch
AL = 00h
BX = байт флагов расширенного режима открытия файла
CX = атрибуты создаваемого файла, используется только при создании файлов
DX = выполняемая функция, если файл существует или не существует:

Биты 0-3 регистра DX задают действие, если файл существует:

0000h — если файл существует, вернуть признак ошибки
0001h — если файл существует, открыть его
0002h — если файл существует, заместить и открыть его

Биты 4-7 регистра DX задают действие, если файл не существует:

0000h — если файл не существует, вернуть признак ошибки
0001h — если файл не существует, создать и открыть его

DS:SI = Адрес строки, содержащей путь открываемого файла
На выходе: AX = Код ошибки, если флаг переноса CF был установлен в 1 ;
Файловый индекс, если флаг переноса сброшен в 0 .
CX = Код выполненных действий:
0 — файл был открыт
1 — файл был создан и открыт
2 — файл был замещен и открыт

Регистр BX на входе задает флаги расширенного режима открытия файла в следующем формате:

Биты Назначение
0. 2 Режим доступа при чтении/записи
3 Зарезервировано, должно быть равно 0
4. 6 Режим разделения
7 Флаг наследования
8. 12 Зарезервировано, должно быть равно 0
13 0 — Режим обычного использования обработчика критических ошибок INT 24h
1 — Блокировка обработчика критических ошибок INT 24h. Для того, чтобы узнать причину ошибки, программа должна использовать функцию 59h прерывания INT 21h MS-DOS.
14 Управление буферизацией:
0 — Использование стандартной для MS-DOS буферизации.
1 — Отмена буферизации. Использование этого режима замедлит работу с диском, однако вероятность потери информации при аварии в питающей сети уменьшится.

Описанная выше функция является как бы комбинацией функций 3Dh и 3Ch (открытие и создание файла). Она удобна, но при ее использовании программа должна убедиться в том, что версия используемой операционной системы не ниже, чем 4.0.

Удалить файл можно при помощи функции 41h прерывания INT 21h:

На входе: AH = 41h
DS:DX = Адрес строки в формате ASCIIZ, содержащей имя удаляемого файла.
На выходе: AL = Код ошибки, если был установлен в 1 флаг переноса CF .

С помощью этой функции нельзя удалить файл, имеющий атрибут «Только читаемый».

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

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат функции для работы с файлами. Эти функции можно разделить на две группы — функции ввода/вывода низкого уровня и функции ввода/вывода потоком. Вторая группа функций использует буферизацию и будет рассмотрена в разделе, посвященном буферизованному вводу/выводу.

Функции ввода/вывода низкого уровня отображаются на описанные выше функции прерывания INT 21h (и функции этого же прерывания, предназначенные для чтения/записи, позиционирования и т.д.).

Для создания файла можно использовать функцию creat() :

Эта функция и ее параметры описаны в файлах io.h, sys\types.h, sys\stat.h, errno.h.

Первый параметр определяет путь создаваемого файла и его имя. Если файл с указанным именем существует, и не имеет атрибута «Только читаемый», функция сбрасывает длину файла до нуля. Предыдущее содержимое файла при этом уничтожается.

Второй параметр позволяет задать атрибуты создаваемого файла. Он может иметь следующие значения:

S_IWRITE для создаваемого файла разрешена операция записи;
S_IREAD для создаваемого файла разрешена операция чтения;
S_IREAD | S_IWRITE для создаваемого файла разрешены операции чтения и записи.


В операционных системах MS-DOS и OS/2 невозможно создать файл, в который можно было бы писать, но из которого было бы нельзя читать информацию. Поэтому задание второго параметра как S_IWRITE приведет к созданию такого файла, для которого разрешены как операция записи, так и операция чтения.

После создания файла функция creat() открывает новый файл и возвращает файловый индекс ( handle ) или код ошибки.

Мощная функция open() предназначена как для открытия существующих файлов, так и для создания новых:

Первый и третий параметры в этой функции аналогичны параметрам функции creat(), причем третий параметр нужен только при создании нового файла. Квадратные скобки указывают на то, что этот параметр является необязательным.

Параметр oflag может являться результатом битовой операции ИЛИ над следующими константами, определенными в файле fcntl.h:

O_APPEN при записи в файл информация будет добавляться в конец файла;
O_BINARY файл открывается для работы в двоичном режиме (игнорируются управляющие символы, такие как конец строки);
O_CREAT создается новый файл и открывается для записи; эта константа игнорируется, если указанный в первом параметре файл уже существует;
O_EXCL используется вместе с O_CREAT ; если указанный в первом параметре файл существует, функция возвратит признак ошибки;
O_RDONLY файл открывается только для чтения, попытка записи в файл приведет к тому, что функция записи вернет признак ошибки;
O_RDWR файл открывается как для чтения, так и для записи;
O_TEXT файл открывается в текстовом режиме;
O_TRUNC существующий файл открывается и обрезается до нулевой длины (если для этого файла разрешена операция записи);
O_WRONLY файл открывается только для записи (в операционных системах MS-DOS и OS/2 для файла, открытого с признаком O_WRONLY разрешено выполнение операции чтения).

Для того, чтобы закрыть файл, открытый функциями creat() или open() , нужно использовать функцию close():

В качестве параметра функции передается файловый индекс, полученный при открытии или создании файла. Функция возвращает 0 при успешном закрытии файла, или -1 при ошибке.

Код ошибки для этой и других функций cтандартных библиотек трансляторов Microsoft QC 2.5 и C 6.0 записывается в глобальную переменную errno.

После того, как вы открыли файл, можно выполнять над ним операции чтения/записи. Для записи данных в файл предназначена функция 40h прерывания INT 21h . В качестве параметров для этой функции необходимо задать файловый индекс, полученный при открытии существующего файла или создании нового, адрес буфера, содержащего записываемые данные и количество записываемых байтов:

На входе: AH = 40h
BX = файловый индекс открытого файла
CX = количество записываемых байтов
DS:DX = Адрес буфера, содержащего записываемые данные
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
Количество действительно записанных байтов, если флаг переноса CF сброшен в 0 .

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

По мере увеличения размера файла ему будут распределяться все новые и новые кластеры из числа отмеченных как свободные.

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

Следует учитывать, что количество действительно записанных байтов может не совпадать с заданным в регистре CX при вызове функции 40h . Такая ситуация возможна, например, при записи в файл, открытый в текстовом режиме, байта Ctrl-Z (1Ah) . Этот байт означает конец текстового файла. Другая возможная причина — отсутствие свободного места на диске.

Если функция вызывается с содержимым регистра CX , равным 0 , файл будет обрезан или расширен до текущего положения файлового указателя.

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

Функция 40h может выполнять запись не только в файл, но и в устройство посимвольной обработки, предварительно открытое функцией 3Dh . Об этом мы говорили в разделах книги, посвященных драйверам.

Для чтения данных из файла (или устройства посимвольной обработки) предназначена функция 3Fh прерывания INT 21h :

На входе: AH = 3Fh
BX = файловый индекс открытого файла
CX = количество читаемых байтов
DS:DX = Адрес буфера для данных
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
Количество действительно прочитанных байтов, если флаг переноса CF сброшен в 0 .

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

Если ваша программа составлена на языке программирования С, для записи и чтения данных она может воспользоваться функциями write() и read() :

Эти функции работают аналогично функциям 40h и 3Fh прерывания INT 21h . Параметр handle определяет файл, для которого необходимо выполнить операцию записи или чтения. Параметр buffer — указатель на буфер, который содержит данные для записи или в который необходимо поместить прочитанные данные. Количество записываемых/читаемых байтов определяется третьим параметром — count .

После выполнения операции функция возвращает количество действительно записанных или прочитанных данных или -1 при ошибке. Будьте внимательны, если вы записываете или читаете больше 32К байтов — вы можете получить признак ошибки, хотя передача данных выполнилась правильно. Большие массивы данных можно записывать по частям.

В качестве примера мы приведем программу копирования файлов, которая пользуется описанными выше функциями ввода/вывода:

В приведенной программе для определения конца исходного файла использована функция eof():

Для файла с файловым индексом handle эта функция возвращает одно из трех значений:

1 достигнут конец файла;
конец файла не достигнут;
-1 ошибка, например, неправильно указан handle .

Программа, которая читает файл с помощью функции 3Fh прерывания INT 21h , может определить момент достижения конца файла, анализируя код ошибки в регистре AX .

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

Установить файловый указатель в нужную вам позицию можно с помощью функции 42h прерывания INT 21h MS-DOS:

На входе: AH = 42h
AL = метод кодирования:
00h абсолютное смещение от начала файла
01h смещение от текущей позиции
02h смещение от конца файла
BX = файловый индекс открытого файла
CX = старший байт смещения
DX = младший байт смещения
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
Младший байт текущей позиции, если флаг переноса CF сброшен в 0.
DX = Старший байт текущей позиции

Функция позволяет указывать новое значение указателя либо как абсолютное смещение от начала файла, либо как смещение от текущей позиции, либо как смещение от конца файла. В последних двух случаях используется смещение со знаком. Для указания смещения или абсолютной позиции программа должна задать в регистрах CX, DX 32-битовое значение.

Если использовать метод кодирования 02h и задать нулевое смещение, функция установит указатель на конец файла. Это обстоятельство может быть использовано для определения размера файла в байтах.

Что произойдет, если при использовании методов кодирования 01h или 02h попытаться установить указатель позиции до начала файла?

Функция 42h при этом не возвратит признак ошибки, однако если будет сделана попытка прочитать или записать данные, то соответствующая функция чтения/записи завершится с ошибкой.

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат функции, предназначенные для управления содержимым файлового указателя позиции и получения текущего значения этого указателя. Это функции lseek(), tell(), filelength() .

Функция lseek() работает аналогично только что описанной функции 42h . Приведем ее прототип:

Первый параметр определяет файл, для которого выполняется операция позиционирования. Параметр offset определяет смещение. Последний параметр задает метод кодирования смещения. Он может принимать следующие значения, описанные в фале stdio.h :

SEEK_SET Абсолютное смещение от начала файла
SEEK_CUR Смещение относительно текущей позиции
SEEK_END Смещение относительно конца файла

Функция возвращает величину текущего смещения в байтах относительно начала файла или -1L , в случае ошибки. Как и для остальных функций библиотеки С, код ошибки находится в глобальной переменной errno .

Вы, конечно, можете использовать функцию lseek() для определения размера файла или текущей файловой позиции. Однако для того, чтобы узнать размер файла, лучше воспользоваться специальной функцией filelength() :

Функция возвращает размер файла в байтах. Файл задается параметром handle . В случае ошибки функция возвращает значение -1L.

Для того, чтобы определить текущую файловую позицию, можно использовать функцию tell() :

Эта функция возвращает текущую позицию для файла, определенного параметром handle , или -1L , в случае ошибки.

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

Напомним: атрибуты файла, время и дата его последней модификации, а также размер файла хранятся в дескрипторе файла. Дескриптор файла находится в каталоге.

Операционная система предоставляет вам все необходимые средства для изменения всех полей дескриптора файла, кроме номера начального кластера. Для изменения этого номера вам придется работать с каталогом через таблицу размещения файлов FAT . Вам придется сначала считать каталог по кластерам с помощью прерывания INT 25h, модифицировать нужные поля и записать каталог обратно на диск при помощи прерывания INT 26h.

Для работы с полем атрибутов файла предназначена функция 43h прерывания INT 21h:

На входе: AH = 43h
AL = выполняемая операция:
00h чтение атрибутов файла
01h установка новых атрибутов файла
CX = новые атрибуты файла, если AL = 01h:
Биты:
5 — бит архивации
4 — каталог
3 — метка диска
2 — системный файл
1 — скрытый файл
0 — только читаемый файл
DS:DX = путь файла в формате ASCIIZ
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF
CX = Если не было ошибки, этот регистр содержит атрибуты файла

При изменении атрибутов файла допустимо указывать комбинации битов в регистре CX .

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

Для работы с полями времени и даты последней модификации файла предназначена функция 57h прерывания INT 21h:

На входе: AH = 57h
AL = выполняемая операция:
00h чтение даты и времени
01h установка даты и времени
BX = файловый индекс открытого файла
CX = время
DX = дата
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF
CX = Если не было ошибки, этот регистр содержит время последнего изменения файла
DX = Если не было ошибки, этот регистр содержит дату последнего изменения файла

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

Формат поля времени:

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат функции для чтения и изменения атрибутов файлов и времени/даты их последней модификации.

Для определения атрибутов файла можно использовать функцию _dos_getfileattr() :

Эта функция получает атрибуты файла, заданного первым аргументом, и записывает байт атрибутов в младший байт по адресу, указанному вторым параметром.

В случае успешного завершения функция возвращает 0 , в противном случае она возвращает код ошибки, полученный от операционной системы и устанавливает глобальную переменную errno в значение ENOENT , что означает отсутствие указанного в параметре path файла.

Для изменения атрибутов файла можно использовать функцию _dos_setfileattr():

Параметр attrib может принимать следующие значения:

_A_ARCH установка бита архивации
_A_HIDDEN файл скрытый
_A_NORMAL обычный файл
_A_RDONLY только читаемый файл
_A_SUBDIR каталог
_A_SYSTEM системный файл
_A_VOLID метка диска

Для определения времени последней модификации файла можно использовать функцию _dos_getftime():

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

Если вам надо изменить время или дату последней модификации файла, используйте функцию _dos_setftime():

Параметры этой функции аналогичны используемым в функции _dos_getftime() , за исключением того, что в качестве второго и третьего параметра применяются не указатели, а непосредственные значения даты и времени.

Приведем программу, изменяющую при запуске значение бита файла атрибутов «Только читаемый» для файла, имя которого передается программе в качестве параметра:

Программа сначала считывает байт атрибутов, затем инвертирует соответствующий бит и устанавливает новое значение байта атрибутов.

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

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

Операционная система MS-DOS имеет несколько буферов. Их количество зависит от оператора BUFFERS , находящегося в файле CONFIG.SYS . Этот оператор позволяет определить от 2 до 99 буферов. Если файл CONFIG.SYS не содержит оператора BUFFERS , по умолчанию используются два буфера.

При увеличении количества буферов увеличивается вероятность того, что нужная часть файла уже считана и находится в оперативной памяти. Однако необходимо учитывать, что для хранения буферов расходуется основная оперативная память. Кроме того, с ростом количества буферов увеличивается время, необходимое операционной системе на анализ состояния буферов, что может привести к снижению производительности. Значительное снижение скорости работы наступает при количестве буферов порядка 50.

Обычно для машин класса AT с диском размером 20-40 мегабайтов рекомендуется использовать 32 буфера, однако для каждого конкретного случая может потребоваться подбор этого параметра для оптимизации производительности системы.

Если ваша программа интенсивно использует обращение к каталогам файловой системы, вы можете использовать утилиту MS-DOS FASTOPEN , которая запоминает в оперативной памяти расположение на диске файлов и каталогов, уменьшая интенсивность обращения к диску. Например, при использовании следующей команды в оперативной памяти будет храниться информация о расположении максимально о 100 файлах и каталогах:

В операционной системе MS-DOS версии 4.0 вы можете указать для утилиты FASTOPEN опцию /X . Эта опция вызывает размещение информации о файлах и каталогах в дополнительной ( expanded ) памяти. Для этой версии операционной системы вызов утилиты FASTOPEN лучше всего выполнять через оператор INSTALL файла CONFIG.SYS:

В приведенной выше строке используются следующие обозначения:

d: обозначение диска;
n количество файлов или каталогов, для которых необходимо запомнить расположение, может иметь значение от 1 до 999, по умолчанию используется 34;
m количество буферов для фрагментированных файлов, может иметь значение от 1 до 999, по умолчанию используется 34;
/X задает расположение буферов в дополнительной памяти.

Еще один способ организовать буферизацию ввода/вывода для жестких дисков — использовать драйвер SMARTDRV.SYS. Этот драйвер позволяет создать для диска кэш-память в расширенной или дополнительной памяти. Например, следующая строка в файле CONFIG.SYS определяет дисковый кэш размером 530 килобайтов, размещенный в расширенной памяти:

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

Если вы используете кэш-память для диска, не следует задавать оператор BUFFERS в файле CONFIG.SYS или пользоваться утилитой FASTOPEN , так как это приведет к многократной буферизации и вызовет излишние пересылки данных в оперативной памяти.

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

При закрытии файла все буфера, связанные с ним, сбрасываются на диск. Если вам надо сбросить буфера, не закрывая файл, это можно сделать с помощью функции 68h прерывания INT 21h :

На входе: AH = 68h
BX = файловый индекс открытого файла
На выходе: AX = Код ошибки, если был установлен в 1 флаг переноса CF ;
0 , если операция выполнена успешно.

Дополнительно обновляется дескриптор файла в каталоге, а именно поля времени, даты и размера файла.

Обратите также внимание на функцию расширенного открытия файлов 6Ch , входящую в состав MS-DOS версии 4.0. Эта функция позволяет при открытии файла отменить буферизацию.

Стандартные библиотеки трансляторов Microsoft QC 2.5 и C 6.0 содержат многочисленные функции, использующие собственный механизм буферизации при работе с файлами. Их часто называют функциями потокового ввода/вывода. Такую буферизацию не следует путать с буферизацией, выполняемой операционной системой. Имена всех этих функций начинаются на f — fopen(), fclose(), fprintf() и т.д.

Функции потокового ввода/вывода хорошо описаны во многих учебных пособиях по языку программирования Си, поэтому мы приведем лишь краткий обзор этих функций, делая акцент на особенностях их применения.

При использовании функций потокового ввода/вывода файлы открываются функцией fopen() , закрываются функцией fclose() . Эти функции не только открывают и закрывают файлы (получают и освобождают их файловый индекс), но и, соответственно, создают и уничтожают структуру типа FILE , описанную в файле stdio.h и связанную с данным файлом:

Для организации потокового ввода/вывода вначале необходимо при помощи функции fopen() открыть файл. Функция fopen() имеет следующий прототип:

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

«r» файл открывается для чтения;
«w» файл открывается для записи;
«a» файл открывается для записи, данные будут добавляться в конец файла.

К буквам r, w, a справа могут добавляться буквы t и b .

Буква t означает, что файл будет открыт в текстовом режиме, b — в двоичном. Для двоичного режима не производится обработка таких символов, как конец строки, конец файла и т.д.

Строка режима открытия файла может дополнительно содержать символ ‘+’ . Этот символ означает, что для файла разрешены операции чтения и записи одновременно.

Для закрытия файлов, открытых для ввода/вывода потоком, должна использоваться функция fclose() :

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

Если вы открыли файл с помощью низкоуровневой функции open() , вы можете создать поток для этого файла, используя функцию fdopen():

В качестве первого параметра используется файловый индекс, полученный от функции open(), второй параметр аналогичен парметру mode для функции fopen() .


Для того чтобы закрыть поток, созданный функцией fdopen(), необходимо использовать функцию fclose() , а не close() .

Для открытого потока вы можете узнать файловый индекс с помощью функции fileno():

Функция возвращает файловый индекс, связанный с данным потоком.

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

stdin стандартное устройство ввода;
stdout стандартное устройство вывода;
stderr стандартное устройство для вывода сообщений об ошибках;
stdaux стандартное последовательное устройство ввода/вывода;
stdprn стандартное печатающее устройство.

Для работы со стандартными устройствами ввода/вывода в библиотеках трансляторов для языка программирования Си имеется соответствующий набор функций, которые должны быть вам хорошо известны — printf(), scanf(), putchar() и т.д.. Мы не будем их описывать для экономии места.

Приведем обзор функций, предназначенных для потокового ввода/вывода .

Для записи данных в поток предназначена функция fwrite() :

Эта функция записывает в файл stream блоки информации, каждый из которых имеет длину size байтов. Количество блоков — count . Данные для записи расположены по адресу buffer .

Если файл открыт в текстовом режиме, каждый символ возврата каретки CR заменяется на два символа — возврата каретки CR и перевода строки LF .

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

Чтение данных потоком можно выполнить с помощью функции fread() :

Эта функция используется аналогично предыдущей. Для распознавания конца файла и обнаружения ошибок после вызова этой функции необходимо использовать функции feof() и ferror().

Если при использовании функции fread() вы задали значения параметров size или count , равные нулю, функция fread() не изменяет содержимое буфера buffer .

Для позиционирования внутри файла, открытого потоком с помощью функции fopen() , предназначена функция fseek() :

В этой функции параметр offset задает новое содержимое указателя текущей позиции в файле stream , а параметр origin — определяет способ задания новой позиции. Этот оператор может иметь значения, аналогичные используемым в функции lseek() :

SEEK_SET Абсолютное смещение от начала файла
SEEK_CUR Смещение относительно текущей позиции
SEEK_END Смещение относительно конца файла

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

Функция fseek() позволяет вам установить указатель за конец файла, однако при попытке установаит указатель до начала файла функция возвратит признак ошибки — ненулевое значение.

При использовании функции fseek() для позиционирования внутри файлов, открытых в текстовом режиме, необходимо учитывать особенность обработки текстовых файлов — автоматическую замену символа возврата каретки CR на пару символов: возврат каретки CR и перевод строки LF . Для текстовых файлов функция fseek() будет правильно работать только в следующих двух случаях:

  • поиск со смещением offset , равным нулю, при любом значении параметра origin ;
  • поиск выполняется относительно начала файла, причем в качестве смещения offset используется значение, полученное специальной функцией ftell() .

Функция ftell() возвращает текущее значение указателя позиции для файла, или -1 при ошибке:

Пара функций ftell() — fseek() позволит вам правильно организовать позиционирование для файлов, открытых в текстовом режиме.

Есть еще одна возможность организовать позиционирование внутри файлов, открытых потоком — использовать пару функций fgetpos() — fsetpos() :

Эти две функции используют для запоминания и установки позиции переменную с типом fpos_t, определенным в файле stdio.h. Функция fgetpos() записывает в эту переменную текущую позицию в потоке stream . Содержимое переменной затем может быть использовано для установки позиции в потоке с помощью функции fsetpos().

Обе эти функции возвращают нулевое значение в случае успешного завершения работы, или ненулевое — при ошибке.

Среди функций потокового ввода/вывода можно выделить группу функций форматного ввода/вывода. Это такие функции, как fputc(), fgetc(), fputs(), fgets(), fprintf(), fscanf() .

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

Для записи в поток отдельных байтов используется функция fputc():

Байт c записывается в файл stream начиная с текущей позиции. После записи текущая позиция увеличивается на единицу. Функция возвращает записываемый байт или значение EOF , которое служит признаком ошибки.

Для побайтового чтения содержимого файла, открытого потоком, удобно использовать функцию fgetc():

Эта функция возвращает считанный из файла и преобразованный к типу int байт из потока stream . После чтения байта текущая позиция в файле увеличивается на единицу.

При достижении конца файла или в случае ошибок функция fgetc() возвращает значение EOF . Однако для проверки на ошибку или конец файла лучше пользоваться специальными функциями ferror() и feof() . Если вы открыли файл в двоичном режиме, единственный способ определить момент достижения конца файла — использовать функцию feof() , так как значение константы EOF может находиться в любом месте двоичного файла.

Для работы со строками предназначены функции fputs() и fgets() .

Функция fputs() предназначена для вывода строки в файл, открытый потоком:

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

Для ввода строк из текстового файла удобна функция fgets():

Функция читает байты из потока stream и записывает их в буфер string до тех пор, пока не произойдет одно из двух событий — будет прочитан символ новой строки ‘\n’ или количество прочитанных символов не будет равно n-1 .

После того, как байты будут прочитаны в буфер, в конец образованной из этих байтов строки функция записывает двоичный ноль. Если был прочитан символ новой строки ‘\n’ , он тоже записывается в буфер.

Для анализа достижения конца файла или ошибок необходимо использовать функции feof() и ferror() .

Для форматного вывода в файл содержимого переменных удобно использовать функцию fprintf() :

Эта функция аналогична хорошо известной вам функции форматного вывода на экран printf(), с которой обычно начинают изучение языка программирования Си. Вспомните такую программу:

Функция fprintf() имеет дополнительно один параметр — stream , который определяет выходной файл.

После завершения работы функция возвращает количество записанных байтов или отрицательную величину, если при записи произошла ошибка.

Для форматного ввода информации из файла можно использовать функцию fscanf() , аналогичную известной вам функции scanf():

Эта функция читает данные, начиная с текущей позиции в потоке stream , в переменные, определенные аргументами arg . Каждый аргумент должен являться указателем на переменную, соответствующую типу, определенному в строке формата format .

Функция fscanf() возвращает количество успешно считанных и преобразованных в указанный формат полей. Те поля, которые были считаны, но не преобразовывались, в возвращаемом функцией значении не учитываются.

При достижении конца файла функция возвращает значение EOF . Если функция возвратила нулевое значение, это означает, что преобразование полей не производилось.

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

Функция setbuf() позволяет вам заменить системный буфер на свой собственный:

Параметр buffer должен указывать на подготовленный пользователем массив, имеющий размер BUFSIZ байтов. Константа BUFSIZ описана в файле stdio.h.

Функция setvbuf() позволяет программе не только указать свой буфер, но и задать его размер:

Параметр stream должен указывать на открытый поток, причем для этого потока до вызова функции setvbuf() нельзя выполнять операции чтения/записи.

Параметр buffer должен указыват на подготовленный программой буфер размером size байтов. Этот буфер будет использоваться для работы с потоком stream .

Параметр mode может иметь значения _IOFBF, _IOLBF, _IONBF . Если mode равно _IOFBF или _IOLBF , параметр size указывает размер буфера. Если параметр mode равен _IONBF , буферизация не используется, парметры buffer и size игнорируются.

Параметры _IOFBF и _IOLBF эквивалентны.

Если в качестве адреса буфера buffer задать значение NULL , функция автоматически закажет буфер размером size .

Функция setvbuf() возвращает ноль при успешном завершении и ненулевую величину, если указан неправильный парметр mode или неправильный размер буфера size .

Для чего может понадобиться изменение размера буфера?

Главным образом — для сокращения времени, необходимого для позиционирования магнитных головок при выполнении операций одновременно над несколькими файлами, например, при копировании файлов, слиянии нескольких файлов в один и т.д.

При закрытии потока функцией fclose() содержимое буфера записывается на диск. Если программе необходимо выполнить запись содержимого буфера на диск без закрытия файла, она может воспользоваться функцией fflush():

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

Если поток открыт только для чтения, функция fflush() очищает содержимое буфера, связанного с этим потоком.

В качестве примера приведем текст программы, копирующей содержимое текстового файла. Программа копирует этот файл три раза. В первый раз одна использует буфер стандартного размера, затем увеличивает размер буфера в десять раз, и, наконец, копирует файл без использования механизма буферизации. Каждый раз программа измеряет продолжительность копирования файла с помощью функции clock() , входящей в состав стандартных библиотек трансляторов Microsoft QC 2.5 и C 6.0.

В задачу данной книги не входит описание всех функций стандартных библиотек трансляторов Microsoft QC 2.5 и C 6.0, предназначенных для работы с дисками и файловой системой. Но мы приведем еще несколько интересных и полезных на наш взгляд функций.

Как мы уже отметили, программа может использовать два режима ввода/вывода для файлов — текстовый и двоичный. Для переключения этого режима для открытого файла можно использовать функцию setmode():

Первый параметр — файловый индекс. Второй параметр может принимать два значения:

O_TEXT установить текстовый режим;
O_BINARY установить двоичный режим.

Функция setmode() должна вызываться перед началом ввода/вывода в открытый файл.

Мы рассказывали о позиционировании внутри файла. Если вам нужно просто установить указатель позиции на начало файла, открытого для потокового ввода/вывода, вы можете воспользоваться функцией rewind():

Если вам нужно переназначить ввод/вывод для стандартных устройств (потоков stdin, stdout, stderr ), вы можете использовать функцию freopen() :

Функция freopen() закрывает файл, с которым был связан поток stream , и переназначает этот поток файлу, определенному параметром filename . Параметр mode задается так же, как и для функции fopen() .

Можно переназначить файловый индекс для файла, открытого функцией open() . Для этого можно воспользоваться одной из двух функций — dup() или dup2() :

Первая функция связывает с открытым файлом еще один файловый индекс. Этот индекс она возвращает при успешном завершении. В случае ошибки она возвращает значение -1 .

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

Функция dup2() переназначает файловый индекс handle2 , связывая его с тем же файлом, которому соответствует файловый индекс handle1 . Если во время вызова функции dup2() с файловым индексом handle2 связан какой-либо открытый файл, этот файл закрывается. В случае успешного завершения функция dup2() возвращает нулевое значение. Если произошла ошибка, возвращается значение -1 .

В первой книге при описании векторной таблицы связи мы говорили о том, что для всех открытых файлов MS-DOS хранит различную информацию в специальной таблице. Ее адрес находится в поле file_tab векторной таблицы связи.

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

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

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

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

Тема: Виртуальный диск под DOS

Обратные ссылки
  • URL обратной ссылки
  • Подробнее про обратные ссылки
  • Закладки & Поделиться
  • Отправить тему форума в Digg!
  • Добавить тему форума в del.icio.us
  • Разместить в Technorati
  • Разместить в ВКонтакте
  • разместить в Facebook
  • Разместить в MySpace
  • Разместить в Twitter
  • Разместить в ЖЖ
  • Разместить в Google
  • Разместить в Yahoo
  • Разместить в Яндекс.Закладках
  • Разместить в Ссылки@Mail.Ru
  • Reddit!
  • Опции темы

    Виртуальный диск под DOS

    Привет всем
    Знает ли кто как создать виртуальный диск под ДОС типа ramdrive.sys, но с возможностью назначения конкретной буквы (например Z).
    Заранее спасибо

    Последний раз редактировалось Володя; 01.08.2005 в 14:09 .

    • Поделиться
      • Поделиться этим сообщением через
      • Digg
      • Del.icio.us
      • Technorati
      • Разместить в ВКонтакте
      • Разместить в Facebook
      • Разместить в MySpace
      • Разместить в Twitter
      • Разместить в ЖЖ
      • Разместить в Google
      • Разместить в Yahoo
      • Разместить в Яндекс.Закладках
      • Разместить в Ссылки@Mail.Ru
      • Reddit!

    Именно так (с помощью ramdrive.sys) и создается. Только в autoexec.bat надо добавить:
    SET RAMDRIVE=Y (твоя буква)

    • Поделиться
      • Поделиться этим сообщением через
      • Digg
      • Del.icio.us
      • Technorati
      • Разместить в ВКонтакте
      • Разместить в Facebook
      • Разместить в MySpace
      • Разместить в Twitter
      • Разместить в ЖЖ
      • Разместить в Google
      • Разместить в Yahoo
      • Разместить в Яндекс.Закладках
      • Разместить в Ссылки@Mail.Ru
      • Reddit!

    Добавил, ничего не происходит привожу содержание файлов:

    autoexec.bat
    @ECHO OFF
    LH mscdex.exe /d:mscd001 /v /m:8 /l:z
    LH mode con codepage prepare=((866) ega3.cpi)
    LH mode con codepage select=866
    LH keyb ru,,keybrd3.sys
    SET RAMDRIVE=Y
    LH mouse.com

    config.sys
    DOS=HIGH,UMB
    DEVICE=HIMEM.SYS
    DEVICEHIGH=setver.exe
    DEVICEhigh=SBIDE.SYS /D:MSCD001 /P:170,15 /V
    LASTDRIVE=Z
    DEVICEHIGH=RAMDRIVE.SYS 5000 /e
    deviceHIGH=display.sys con=(ega,,1)
    Country=007,866,country.sys

    • Поделиться
      • Поделиться этим сообщением через
      • Digg
      • Del.icio.us
      • Technorati
      • Разместить в ВКонтакте
      • Разместить в Facebook
      • Разместить в MySpace
      • Разместить в Twitter
      • Разместить в ЖЖ
      • Разместить в Google
      • Разместить в Yahoo
      • Разместить в Яндекс.Закладках
      • Разместить в Ссылки@Mail.Ru
      • Reddit!

    А сидюк появляется?
    Если да — то с какой буковкой.
    И на память ругачки нет ли?

    Илон Маск рекомендует:  Что такое код swf_startsymbol
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL