Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
Line 101: Line 101:
== Функция 20 - интерфейс MIDI. ==
== Функция 20 - интерфейс MIDI. ==


 
Описание функции перенесено в отдельную статью: [[SysFn20/ru|Функция 20]]
=== Подфункция 1 - сброс ===
Параметры:
  * eax = 20 - номер функции
  * ebx = 1 - номер подфункции
 
=== Подфункция 2 - вывести байт ===
Параметры:
  * eax = 20 - номер функции
  * ebx = 2 - номер подфункции
  * cl = байт для вывода
Возвращаемое значение (одинаково для обеих подфункций):
  * eax = 0 - успешно
  * eax = 1 - не определён базовый порт
Замечания:
  * Предварительно должен быть определён базовый порт вызовом
    подфункции 1 функции 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, ничего не делая).
  * В текущей реализации поддерживается только одна частота развёртки
    на видеорежим.