SysFn21/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
m ((пропустил "@panel"))
 
(17 intermediate revisions by 5 users not shown)
Line 6: Line 6:


Параметры:
Параметры:
* eax = 21 - номер функции
:* eax = 21 - номер функции
* ebx = 1 - номер подфункции
:* ebx = 1 - номер подфункции
* ecx = номер базового порта
:* ecx = номер базового порта
Возвращаемое значение:
Возвращаемое значение:
* eax = 0 - успешно
:* eax = 0 - успешно
* eax = -1 - ошибочный номер порта
:* eax = -1 - ошибочный номер порта
Замечания:
Замечания:
* Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF.
:* Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF.
* Установка базы нужна для работы функции 20.
:* Установка базы нужна для работы функции 20.
* Получить установленный базовый порт можно вызовом подфункции 1 функции 26.
:* Получить установленный базовый порт можно вызовом
::подфункции 1 функции 26.
 
'''Константы для регистров:'''
::eax - SF_SYSTEM_SET (21)
::ebx - SSF_MPU_MIDI_BASE (1)


=== Подфункция 2 - установить раскладку клавиатуры. ===
=== Подфункция 2 - установить раскладку клавиатуры. ===


Раскладка клавиатуры используется для преобразования сканкодов, поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2.
Раскладка клавиатуры используется для преобразования сканкодов,
поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2.
Параметры:
Параметры:
* eax = 21 - номер функции
:* eax = 21 - номер функции
* ebx = 2 - номер подфункции
:* ebx = 2 - номер подфункции
* ecx = какую раскладку устанавливать:
:* ecx = какую раскладку устанавливать:
** 1 = нормальную
::* 1 = нормальную
** 2 = раскладку при нажатом Shift
::* 2 = раскладку при нажатом Shift
** 3 = раскладку при нажатом Alt
::* 3 = раскладку при нажатом Alt
* edx = указатель на раскладку - таблицу длиной 128 байт
:* edx = указатель на раскладку - таблицу длиной 128 байт
Или:
Или:
* ecx = 9
:* ecx = 9
* dx = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus)
:* 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
:* eax = 0 - успешно
:* eax = 1 - параметр задан неверно
Замечания:
Замечания:
* База CD используется функцией 24.
:* Если нажат Alt, то используется раскладка с Alt;
* Получить установленную базу CD можно вызовом подфункции 3 функции 26.
::если не нажат Alt, но нажат Shift, то
::используется раскладка с Shift;
::если не нажаты Alt и Shift, но нажат Ctrl, то используется
::нормальная раскладка, после чего из кода вычитается 0x60;
::если не нажата ни одна из управляющих клавиш, то используется
::нормальная раскладка.
:* Получить раскладки и идентификатор страны можно с помощью
::подфункции 2 функции 26.
:* Идентификатор страны - глобальная системная переменная, которая
::самим ядром не используется; однако приложение @taskbar отображает
::соответствующую текущей стране иконку.
:* Приложение @taskbar переключает раскладки по запросу пользователя.


=== Подфункция 4 - установить базовый порт Sound Blaster. ===
'''Константы для регистров:'''
 
::eax - SF_SYSTEM_SET (21)
Удалена
::ebx - SSF_KEYBOARD_LAYOUT (2)


=== Подфункция 5 - установить язык системы. ===
=== Подфункция 5 - установить язык системы. ===


Параметры:
Параметры:
* eax = 21 - номер функции
:* eax = 21 - номер функции
* ebx = 5 - номер подфункции
:* ebx = 5 - номер подфункции
* ecx = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
:* ecx = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
 
Возвращаемое значение:
Возвращаемое значение:
* eax = 0
:* eax = 0
 
Замечания:
Замечания:
* Язык системы - глобальная системная переменная, никак не используемая самим ядром, однако приложение @panel рисует соответствующую иконку.
:* Язык системы - глобальная системная переменная, никак
* Проверок на корректность не делается, поскольку ядро эту переменную не использует.
::не используемая самим ядром, однако приложение @taskbar рисует
* Получить язык системы можно вызовом подфункции 5 функции 26.
::соответствующую иконку.
:* Проверок на корректность не делается, поскольку ядро эту
::переменную не использует.
:* Получить язык системы можно вызовом подфункции 5 функции 26.


'''Константы для регистров:'''
::eax - SF_SYSTEM_SET (21)
::ebx - SSF_SYS_LANG (5)


=== Подфункция 7 - установить базу HD. ===
=== Подфункция 11 - разрешить/запретить низкоуровневый доступ к HD. ===
 
<big>'''Внимание:''' Эта подфункция будет [http://board.kolibrios.org/viewtopic.php?f=35&t=1854 удалена] в следующих версиях системы</big>
 
База HD нужна для определения, на какой жёсткий диск писать, при спользовании устаревшего синтаксиса /HD в устаревшей функции 58;
при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 база устанавливается автоматически.


Параметры:
Параметры:
* eax = 21 - номер функции
:* eax = 21 - номер функции
* ebx = 7 - номер подфункции
:* ebx = 11 - номер подфункции
* ecx = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
:* ecx = 0/1 - запретить/разрешить
 
Возвращаемое значение:
Возвращаемое значение:
* eax = 0
:* eax = 0
 
Замечания:
Замечания:
* Любое приложение в любой момент времени может изменить базу.
:* Используется при LBA-чтении (подфункция 8 функции 58).
* Не следует изменять базу, когда какое-нибудь приложение работает с жёстким диском. Если не хотите глюков системы.
:* Текущая реализация использует только младший бит ecx.
* Получить установленную базу можно вызовом подфункции 7 функции 26.
:* Получить текущее состояние можно вызовом подфункции 11 функции 26.
* Следует также определить используемый раздел жёсткого диска подфункцией 8.
 
=== Подфункция 8 - установить раздел HD. ===


Раздел HD нужен для определения, на какой раздел жёсткого диска писать, при использовании устаревшего синтаксиса /HD в устаревшей функции 58;
'''Константы для регистров:'''
при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически.
::eax - SF_SYSTEM_SET (21)
 
::ebx - SSF_ACCESS_HD_LBA (11)
Параметры:
* 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. ===
=== Подфункция 12 - разрешить/запретить низкоуровневый доступ к PCI. ===


Параметры:
Параметры:
* eax = 21 - номер функции
:* eax = 21 - номер функции
* ebx = 12 - номер подфункции
:* ebx = 12 - номер подфункции
* ecx = 0/1 - запретить/разрешить
:* ecx = 0/1 - запретить/разрешить
 
Возвращаемое значение:
Возвращаемое значение:
* eax = 0
:* 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: им