SysFn21/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
Line 217: Line 217:


==== Подподфункция 3 - установить видеорежим. ====
==== Подподфункция 3 - установить видеорежим. ====
Параметры:
Параметры:
* eax = 21 - номер функции
:* eax = 21 - номер функции
* ebx = 13 - номер подфункции
:* ebx = 13 - номер подфункции
* ecx = 3 - номер функции драйвера
:* ecx = 3 - номер функции драйвера
* edx = [частота развёртки]*65536 + [номер видеорежима]
:* edx = [частота развёртки]*65536 + [номер видеорежима]
 
Возвращаемое значение:
Возвращаемое значение:
* eax = -1 - драйвер не загружен, не инициализирован или произошла ошибка
:* eax = -1 - драйвер не загружен, не инициализирован или
* eax = 0 - успешно
::произошла ошибка
* ebx, ecx разрушаются
:* eax = 0 - успешно
 
:* ebx, ecx разрушаются
Замечания:
Замечания:
* Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1.
:* Драйвер предварительно должен быть инициализирован вызовом
* Номер видеорежима и частота должны быть в таблице, возвращаемой функцией драйвера 1.
::функции драйвера 1.
:* Номер видеорежима и частота должны быть в таблице, возвращаемой
::функцией драйвера 1.


==== Подподфункция 4 - вернуться к начальному видеорежиму. ====
==== Подподфункция 4 - вернуться к начальному видеорежиму. ====

Revision as of 09:13, 16 December 2013

Функция 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.
  • Функция влияет только на физический размер изображения на мониторе; логический размер (число пикселей) не меняется.