;
PAGE
;
; ******* ВНУТРЕННИЙ СТЕК И КОНЕЦ ОПЕРАЦИОННОЙ ЧАСТИ ДРАЙВЕРА ********
;
db 32 DUP ('stack ') ; внутренний стек глубиной
local_stack EQU $ ; 256 байт
;
bpb_tab dw offset bpb ; указатель на BPB
;
LAST_USED EQU $ ; адрес завершения
;
; ******* ХАРАКТЕРИСТИКИ RAM-ДИСКА, ПРИНИМАЕМЫЕ ПО УМОЛЧАНИЮ **********
;
; Параметры для 5-1/4" двустороннего двойной плотности диска с девятью
; секторами на дорожке.
;
MTYPE EQU 0FDh ; байт описателя носителя
TRACKS EQU 40 ; 40 дорожек
SECTORS EQU 9 ; 9 секторов на дорожке
DSIZE EQU 512 ; 512 байт в секторе
SIDES EQU 2 ; 2 стороны на диске
;
FSECS EQU 2 ; количество секторов в FAT
DIREN EQU 112 ; количество элементов директория
DSECS EQU 7 ; 7 секторов в директории
CLSIZ EQU 2 ; 2 сектора в кластере
;
STOTAL EQU TRACKS*SECTORS*SIDES ; всего секторов
PTOTAL EQU (DSIZE/16)*STOTAL ; всего параграфов
;
; ************ НАЧАЛО ОБЛАСТИ ДАННЫХ RAM-ДИСКА ***********************
;
; RAM-диск д.б. выровнен на границу параграфа
;
IF ($-ORIGIN) mod 16
ORG ($-ORIGIN) + 16 - (($-ORIGIN) mod 16)
ENDIF
RDISK LABEL BYTE ; начало RAM-диска
RPARA EQU ($-ORIGIN)/16 ; размер кода в параграфах
;
; ------------ Блок параметров BIOS ----------------------------------
;
jmp near ptr boot ; JMP (3 байта)
db 'IBM 3.1' ; 8 байт имя и версия
;
bpb bpbstrc
dw SECTORS ; количество секторов на дорожке
dw SIDES ; количество головок чтения/записи
dw 0 ; количество скрытых секторов
boot:
db (DSIZE-30) DUP (?) ; остаток boot_sector
;
; ------------ Таблицы размещения файлов (FAT) -----------------------
; ; первые два элемента FAT
FAT_1 db MTYPE,0FFh,0FFh ; нулевой остаток FAT
- 6-67 -
db (DSIZE-3) DUP (0)
db ((FSECS-1) * DSIZE) DUP (0)
FAT_2 db MTYPE,0FFh,0FFh ; первые два элемента FAT
db (DSIZE-3) DUP (0) ; нулевой остаток FAT
db ((FSECS-1) * DSIZE) DUP (0)
;
; ------------ Сектора директория ------------------------------------
;
DIREC db 'RAM_DISK ' ; имя тома (11 байт)
db 08h ; VID
db 10 DUP (?) ; зарезервировано
dw 0600h ; время 12:00:00 (полдень)
dw 021h ; дата 1 января 1980 года
dw 0 ; начальный кластер 0
dd 0 ; размер файла 0
db (DSIZE-32) DUP (0) ; нулевой остаток директория
db ((DSECS-1) * DSIZE) DUP (0)
BUFFER LABEL BYTE ; начало области данных
;
; ************ ПРОЦЕДУРА ИНИЦИАЛИЗАЦИИ *******************************
;
INCLUDE stdmac.inc
;
; ============ Область данных инициализации ==========================
;
$signon db 'RAM DISK Driver Version 1.00 Installed: Drive'
$desig db 'A'
$crlf db 0Dh,0Ah,'$'
;
; ============ Начало процедуры инициализации ========================
;
INIT PROC NEAR ; 00 - инициализация
;
; установим адрес завершения, количество устройств и указатель на
; таблицу BPB
;
mov request.endadro,0 ; адрес конца драйвера
mov request.endadrs,cs
add request.endadrs,(RPARA+PTOTAL) ; последний параграф
mov request.units,1
mov request.bpbtabo,offset bpb_tab
mov request.bpbtabs,cs
mov al,$desig ; скорректируем имя диска
add al,request.devnum
mov $desig,al
;
; вывод на экран идентификационной строки
@DisStr $signon
;
; скорректируем значение "max_cmd" исходя из версии MS-DOS
@GetDOSVersion ; получим номер версии MS-DOS
cmp al,3 ; MS-DOS версии 3.00 и выше ?
jb init_done ; нет - прекращаем инициализацию
mov [max_cmd],CMD_PRE_32 ; команды для MS-DOS 3.00
cmp ah,2 ; MS-DOS версии 3.20 и выше ?
jb init_done ; нет - прекращаем инициализацию
mov [max_cmd],CMD_32 ; команды для MS-DOS 3.20
- 6-68 -
;
init_done:
xor ax,ax ; нет проблем !
ret
INIT ENDP
;
; ************ КОНЕЦ ДРАЙВЕРА. КОНЕЦ ФАЙЛА ***************************
;
_TEXT ENDS
END
---------------------------------------------------------------------
Заключение
Теперь Вы готовы писать и устанавливать свои собственные драй-
веры устройств. Руководствуйтесь нашими замечаниями и "MS-DOS
Programmers Reference Manual" при возникновении каких-либо техни-
ческих вопросов.
ЙННННННННННН»
є Вывод ЗД¬
є программы є ¦
ИНСНННННННННј ¦
АДДДєДДДДДДДЩ
ЙННННННННННННННННННОНННННННННННННННННН»
є є є
ЙННННННvНННННН» ЙННННННvНННННН» ЙННННННvНННННН»
є Виртуальный ЗД¬ є Виртуальный ЗД¬ є Виртуальный ЗД¬
є дисплей #0 є ¦ є дисплей #1 є ¦ є дисплей #2 є ¦
ИНСНННННННННННј ¦ ИНСНННННННННННј ¦ ИНСНННННННННННј ¦
АДДДДєДДДДДДДДЩ АДДДДєДДДДДДДДЩ АДДДДєДДДДДДДДЩ
ИННННННННННННННННН>є<НННННННННННННННННј
є
ЙНННННvННННН»
є Монитор ЗД¬
є Дисплей є ¦
ИНСНННННННННј ¦
АДДДДДДДДДДДЩ
Рисунок 6-8. Драйвер виртуальных экранов
Полезными драйверами были бы, например, драйвер матричного
принтера, поддерживающий графические команды (такие как "нарисо-
вать линию") и преобразующий их к требуемому принтером формату,
или драйвер терминала, поддерживающий виртуальные экраны (см.рис.
6-8). Такой драйвер терминала может иметь несколько буферов в па-
мяти, хранящих копии экранной информации. Посылая команды драйве-
ру по IOCTL-каналу, можно указать драйверу какой виртуальный эк-
ран должен быть обновлен и какой виртуальный экран должен быть
отображен на реальном экране. Если Вы успешно написали такой
драйвер, то Вы можете заменить им существующий драйвер консоли.
Список идей, которые можно было бы реализовать в драйверах,
практически бесконечен. Вероятно, у Вас уже появилось несколько
своих, которые Вы хотели бы реализовать. Если у Вас хватает спо-
койствия и терпения то ничто не может помешать Вам в этом, так
что дерзайте!
Глава 7. ИСПОЛЬЗОВАНИЕ РАСШИРЕННОЙ ПАМЯТИ
Урок истории
Менеджер расширенной памяти
Интерфейс прикладной программы EMS
Написание программ, использующих расширенную память
Системное программное обеспечение
Краткое содержание
Библиография
Программы интерфейса низкого уровня и пример приложения
Включение спецификации расширенной памяти в MS-DOS 4.0 сде-
лало полноправным данный стандарт в качестве метода увеличения
памяти во всех системах MS-DOS. Несмотря на все возрастающее
быстродействие и сложность IBM-совместимых персональных компьюте-
ров на базе DOS, их предельные аппаратурная и программная произ-
водительность была подвержена ограничениям, накладываемым струк-
турой системы и архитектурой процессора 8088, встроенными в
исходный персональный компьютер IBM. До недавнего времени один из
таких пределов, барьер 640К, являлся постоянным источником зат-
руднений для пользователей и программистов систем MS-DOS. Обозна-
чающий максимальную величину ОЗУ пользователя, поддерживаемого
MS-DOS, предел памяти в 640К появлялся в качестве постоянного
препятствия к неумолимой тенденции разрабатывать и применять бо-
лее мощные программные средства.
Пользователи, требующие сложных баз данных, электронных таб-
лиц, графических интерфейсов и резидентных утилит, хотят приме-
нять эти средства одновременно под управлением многозадачной сис-
темы с окнами. Разработчики готовы удовлетворить такие запросы с
помощью резидентных отладчиков, инструкций реального времени и
наборов средств интерфейса пользователя. Обе группы предпринимали
отчаянные усилия при ограничении в 640К без определенного решения
для тупика DOS.
Вся промышленность персональных компьютеров вступила в нас-
тоящее время в сотрудничество для создания работающего решения
для преодоления предела памяти в MS-DOS по схеме расширения памя-
ти, именуемой расширенной памятью, которая обеспечивает програм-
мам MS-DOS доступ максимум к 32 мегабайтам ОЗУ помимо 640К, под-
держиваемых MS-DOS. К сожалению, расширенная память не может
использоваться приложениями MS-DOS автоматически. Любая программа
должна писаться специальным образом для ее распознавания и приме-
нения. Хотя процесс распознавания и применения не является авто-
матическим, он не особенно сложный или загадочный. Данная глава
обеспечит Вам основы и знания, необходимые для добавления этого
мощного средства к Вашей собственной базе программирования.
Требования производительности и гибкости, которые пользова-
тели предъявляют к программному обеспечению, практически диктуют
программам прямое управление аппаратурой персонального компьютера
в обход DOS и BIOS для получения максимума из аппаратуры семейс-
тва персональных компьютеров. Создание таких программ - сложная
задача для разработчиков, которые не только должны владеть тон-
костями аппаратуры персонального компьютера и его различных плат
адаптеров ввода/вывода, но также обращать специальное внимание на
приспособление к различиям в аппаратуре установленной базы сис-