Ru/api/kernel: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
m (Функция 42 - перенесена)
No edit summary
Line 190: Line 190:


== Функция 42 - работа с данными, полученными по IRQ. ==
== Функция 42 - работа с данными, полученными по IRQ. ==
Описание функции перенесено в отдельную статью: [[SysFn42/ru|Функция 42]]


== Функция 43 - ввод/вывод в порт. ==
== Функция 43 - ввод/вывод в порт. ==


 
Описание функции перенесено в отдельную статью: [[SysFn43/ru|Функция 43]]
=== Вывод данных в порт ===
Параметры:
  * eax = 43 - номер функции
  * bl = байт для вывода
  * ecx = номер порта 0xnnnn (от 0 до 0xFFFF)
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - поток не зарезервировал указанный порт
 
=== Ввод данных из порта ===
Параметры:
  * eax = 43 - номер функции
  * ebx игнорируется
  * ecx = 0x8000nnnn, где nnnn = номер порта (от 0 до 0xFFFF)
Возвращаемое значение:
  * eax = 0 - успешно, при этом ebx = введённый байт
  * eax = 1 - поток не зарезервировал данный порт
Замечания:
  * Предварительно поток должен зарезервировать за собой
    указанный порт функцией 46.
  * Для зарезервированных портов вместо вызова этих функций
    лучше использовать команды процессора in/out - это значительно
    быстрее и несколько короче и проще. Из незарезервированных
    портов читать всё равно нельзя.
 


== Функция 44 - определить действия при поступлении IRQ. ==
== Функция 44 - определить действия при поступлении IRQ. ==


При возникновении IRQ система может считывать данные из указанных этой
Описание функции перенесено в отдельную статью: [[SysFn44/ru|Функция 44]]
функцией портов и записывать эти данные в буфер, откуда их можно
прочитать функцией 42.
Параметры:
  * eax = 44 - номер функции
  * ebx = указатель на массив структур, описывающих по одному порту:
    * +0: word: 0 означает конец массива, иначе номер порта
    * +2: byte: зарезервировано (игнорируется)
    * +3: byte: 1=считывать байт из этого порта, 2=считывать слово
  * ecx = номер IRQ, 0..15
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - поток не является владельцем указанного IRQ
Замечания:
  * Предварительно поток должен зарезервировать за собой
    указываемый IRQ функцией 45.
  * Принимаются во внимание только первые 16 портов.
  * Текущая реализация рассматривает неправильное значение поля +3
    как сигнал прекращения обработки IRQ.
 


== Функция 45 - зарезервировать/освободить IRQ. ==
== Функция 45 - зарезервировать/освободить IRQ. ==


Параметры:
Описание функции перенесено в отдельную статью: [[SysFn45/ru|Функция 45]]
  * eax = 45 - номер функции
  * ebx = 0 - зарезервировать, 1 = освободить
  * ecx = номер IRQ, 0..15
Возвращаемое значение:
  * eax = 0 - успешно
  * eax = 1 - ошибка (неверный номер IRQ или
    попытка зарезервировать несвободный IRQ или освободить IRQ, не
    зарезервированный текущим потоком)
Замечания:
  * Резервирование IRQ нужно для работы функций 42 и 44.
  * Только один поток может зарезервировать конкретный IRQ.
  * IRQ, обрабатываемые системой самостоятельно, резервируются
    системой (потоком 1) при загрузке.
  * При завершении потока автоматически освобождаются
    все зарезервированные им IRQ.
 


= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.

Revision as of 20:26, 5 April 2010

СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.1.0

Номер функции помещается в регистр eax. Вызов системной функции осуществляется командой "int 0x40". Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.