SysFn21/ru
Функция 21 - установка системных параметров
Подфункция 1 - установить базовый порт MPU MIDI.
Параметры:
- eax = 21 - номер функции
- ebx = 1 - номер подфункции
- ecx = номер базового порта
Возвращаемое значение:
- eax = 0 - успешно
- eax = -1 - ошибочный номер порта
Замечания:
- Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF.
- Установка базы нужна для работы функции 20.
- Получить установленный базовый порт можно вызовом подфункции 1 функции 26.
Подфункция 2 - установить раскладку клавиатуры.
Раскладка клавиатуры используется для преобразования сканкодов, поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2. Параметры:
- eax = 21 - номер функции
- ebx = 2 - номер подфункции
- ecx = какую раскладку устанавливать:
- 1 = нормальную
- 2 = раскладку при нажатом Shift
- 3 = раскладку при нажатом Alt
- edx = указатель на раскладку - таблицу длиной 128 байт
Или:
- ecx = 9
- dx = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus)
Возвращаемое значение:
- eax = 0 - успешно
- eax = 1 - параметр задан неверно
Замечания:
- Если нажат Alt, то используется раскладка с Alt;
- если не нажат Alt, но нажат Shift, то используется раскладка с Shift;
- если не нажаты Alt и Shift, но нажат Ctrl, то используется нормальная раскладка, после чего из кода вычитается 0x60;
- если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка.
- Получить раскладки и идентификатор страны можно с помощью подфункции 2 функции 26.
- Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает соответствующую текущей стране иконку.
- Приложение @panel переключает раскладки по запросу пользователя.
Подфункция 3 - установить базу CD.
Параметры:
- eax = 21 - номер функции
- ebx = 3 - номер подфункции
- ecx = база CD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
Возвращаемое значение:
- eax = 0
Замечания:
- База CD используется функцией 24.
- Получить установленную базу CD можно вызовом подфункции 3 функции 26.
Подфункция 4 - установить базовый порт Sound Blaster.
Удалена
Подфункция 5 - установить язык системы.
Параметры:
- eax = 21 - номер функции
- ebx = 5 - номер подфункции
- ecx = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
Возвращаемое значение:
- eax = 0
Замечания:
- Язык системы - глобальная системная переменная, никак не используемая самим ядром, однако приложение @panel рисует соответствующую иконку.
- Проверок на корректность не делается, поскольку ядро эту переменную не использует.
- Получить язык системы можно вызовом подфункции 5 функции 26.
Подфункция 7 - установить базу HD.
Внимание: Эта подфункция будет удалена в следующих версиях системы
База HD нужна для определения, на какой жёсткий диск писать, при спользовании устаревшего синтаксиса /HD в устаревшей функции 58; при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 база устанавливается автоматически.
Параметры:
- eax = 21 - номер функции
- ebx = 7 - номер подфункции
- ecx = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
Возвращаемое значение:
- eax = 0
Замечания:
- Любое приложение в любой момент времени может изменить базу.
- Не следует изменять базу, когда какое-нибудь приложение работает с жёстким диском. Если не хотите глюков системы.
- Получить установленную базу можно вызовом подфункции 7 функции 26.
- Следует также определить используемый раздел жёсткого диска подфункцией 8.
Подфункция 8 - установить раздел HD.
Раздел HD нужен для определения, на какой раздел жёсткого диска писать, при использовании устаревшего синтаксиса /HD в устаревшей функции 58; при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически.
Параметры:
- eax = 21 - номер функции
- ebx = 8 - номер подфункции
- ecx = раздел HD (считая с 1)
Возвращаемое значение:
- eax = 0
Замечания:
- Любое приложение в любой момент времени может изменить раздел.
- Не следует изменять раздел, когда какое-нибудь приложение работает с жёстким диском. Если не хотите глюков системы.
- Получить установленный раздел можно вызовом подфункции 8 функции 26.
- Проверок на корректность не делается.
- Узнать число разделов на жёстком диске можно вызовом подфункции 11 функции 18.
- Следует также определить используемую базу жёсткого диска подфункцией 7.
Подфункция 10 - установить канал DMA для звука.
Удалена:
Подфункция 11 - разрешить/запретить низкоуровневый доступ к HD.
Параметры:
- eax = 21 - номер функции
- ebx = 11 - номер подфункции
- ecx = 0/1 - запретить/разрешить
Возвращаемое значение:
- eax = 0
Замечания:
- Используется при LBA-чтении (подфункция 8 функции 58).
- Текущая реализация использует только младший бит ecx.
- Получить текущее состояние можно вызовом подфункции 11 функции 26.
Подфункция 12 - разрешить/запретить низкоуровневый доступ к PCI.
Параметры:
- eax = 21 - номер функции
- ebx = 12 - номер подфункции
- ecx = 0/1 - запретить/разрешить
Возвращаемое значение:
- eax = 0
Замечания:
- Используется при работе с шиной PCI (функция 62).
- Текущая реализация использует только младший бит ecx.
- Получить текущее состояние можно вызовом подфункции 12 функции 26.
Подфункция 13
Подподфункция 1 - инициализировать + получить информацию о драйвере vmode.mdr.
Параметры:
- eax = 21 - номер функции
- ebx = 13 - номер подфункции
- ecx = 1 - номер функции драйвера
- edx = указатель на буфер размера 512 байт
Возвращаемое значение:
- если драйвер не загружен (никогда не бывает в текущей реализации):
- eax = -1
- ebx, ecx разрушаются
- если драйвер загружен:
- eax = 'MDAZ' (в стиле fasm'а, т.е. 'M' - младший байт, 'Z' - старший) - сигнатура
- ebx = текущая частота развёртки (в Гц)
- ecx разрушается
- буфер, на который указывает edx, заполнен
Формат буфера:
- +0: 32*byte: имя драйвера, "Trans VideoDriver" (без кавычек, дополнено пробелами)
- +32 = +0x20: dword: версия драйвера (версия x.y кодируется как y*65536+x), для текущей реализации 1 (1.0)
- +36 = +0x24: 7*dword: зарезервировано (0 в текущей реализации)
- +64 = +0x40: 32*word: список поддерживаемых видеорежимов (каждое слово - номер видеорежима, после собственно списка идут нули)
- +128 = +0x80: 32*(5*word): список поддерживаемых частот развёрток для видеорежимов: для каждого видеорежима, указанного в предыдущем поле, указано до 5 поддерживаемых частот (в неиспользуемых позициях записаны нули)
Замечания:
- Функция инициализирует драйвер (если он ещё не инициализирован) и должна вызываться первой, перед остальными (иначе они будут возвращать -1, ничего не делая).
- В текущей реализации поддерживается только одна частота развёртки на видеорежим.
Подподфункция 2 - получить информацию о текущем видеорежиме.
Параметры:
- eax = 21 - номер функции
- ebx = 13 - номер подфункции
- ecx = 2 - номер функции драйвера
Возвращаемое значение:
- eax = -1 - драйвер не загружен или не инициализирован;
- ebx,ecx разрушаются
- eax = [ширина]*65536 + [высота]
- ebx = частота вертикальной развёртки (в Гц)
- ecx = номер текущего видеорежима
Замечания:
- Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1.
- Если нужны только размеры экрана, целесообразней использовать функцию 14 с учётом того, что она возвращает размеры на 1 меньше.
Подподфункция 3 - установить видеорежим.
Параметры:
- eax = 21 - номер функции
- ebx = 13 - номер подфункции
- ecx = 3 - номер функции драйвера
- edx = [частота развёртки]*65536 + [номер видеорежима]
Возвращаемое значение:
- eax = -1 - драйвер не загружен, не инициализирован или произошла ошибка
- eax = 0 - успешно
- ebx, ecx разрушаются
Замечания:
- Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1.
- Номер видеорежима и частота должны быть в таблице, возвращаемой функцией драйвера 1.
Подподфункция 4 - вернуться к начальному видеорежиму.
Возвращает экран в видеорежим, установленный при загрузке системы.
Параметры:
- eax = 21 - номер функции
- ebx = 13 - номер подфункции
- ecx = 4 - номер функции драйвера
Возвращаемое значение:
- eax = -1 - драйвер не загружен или не инициализирован
- eax = 0 - успешно
- ebx, ecx разрушаются
Замечания:
- Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1.
Подподфункция 5 - увеличить/уменьшить размер видимой области монитора.
Параметры:
- eax = 21 - номер функции
- ebx = 13 - номер подфункции
- ecx = 5 - номер функции драйвера
- edx = 0/1 - уменьшить/увеличить размер по горизонтали на одну позицию
- edx = 2/3 - в текущей реализации не поддерживается; планируется как уменьшение/увеличение размера по вертикали на одну позицию
Возвращаемое значение:
- eax = -1 - драйвер не загружен или не инициализирован
- eax = 0 - успешно
- ebx, ecx разрушаются
Замечания:
- Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1.
- Функция влияет только на физический размер изображения на мониторе; логический размер (число пикселей) не меняется.
|