Difference between revisions of "SysFn46/ru"

From KolibriOS wiki
Jump to navigation Jump to search
m
Line 3: Line 3:
 
----
 
----
 
'''Внимание:'''
 
'''Внимание:'''
* Эта функция устарела и может быть удалена в следующих версиях ядра.  
+
:* Эта функция устарела и может быть удалена в следующих версиях ядра.  
* При необходимости прямого (бездрайверного) ввода/вывода в порты и в память внешних устройств рекомендуется использовать [[SysFn62|функцию 62]]
+
:* При необходимости прямого (бездрайверного) ввода/вывода в порты и в память внешних устройств рекомендуется использовать [[SysFn62/ru|функцию 62]]
  
К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 (нерекомендуемый способ).
+
К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом [[SysFn43/ru|функции 43]] (нерекомендуемый способ).
 
Параметры:
 
Параметры:
* eax = 46 - номер функции
+
:* eax = 46 - номер функции
* ebx = 0 - зарезервировать, 1 - освободить
+
:* ebx = 0 - зарезервировать, 1 - освободить
* ecx = номер начала диапазона портов
+
:* ecx = номер начала диапазона портов
* edx = номер конца диапазона портов (включительно)
+
:* edx = номер конца диапазона портов (включительно)
 
Возвращаемое значение:
 
Возвращаемое значение:
* eax = 0 - успешно
+
:* eax = 0 - успешно
* eax = 1 - ошибка
+
:* eax = 1 - ошибка
 
Замечания:
 
Замечания:
* В случае резервирования портов ошибкой считается выполнение одного из условий:
+
:* В случае резервирования портов ошибкой считается выполнение одного из условий:
:* начальный адрес больше конечного;
+
::* начальный адрес больше конечного;
:* указанный диапазон содержит некорректный номер порта (корректные - от 0 до 0xFFFF);
+
::* указанный диапазон содержит некорректный номер порта (корректные - от 0 до 0xFFFF);
:* превышено ограничение на общее число зарезервированных областей - допускается максимум 255;
+
::* превышено ограничение на общее число зарезервированных областей - допускается максимум 255;
:* указанный диапазон пересекается с одним из ранее зарезервированных
+
::* указанный диапазон пересекается с одним из ранее зарезервированных
* В случае освобождения портов ошибкой считается попытка освобождения диапазона, который ранее не был целиком зарезервирован этой же функцией (с такими же значениями ecx,edx).
+
:* В случае освобождения портов ошибкой считается попытка освобождения диапазона, который ранее не был целиком зарезервирован этой же функцией (с такими же значениями ecx,edx).
* При обнаружении ошибки (в обоих случаях) никаких действий не производится.
+
:* При обнаружении ошибки (в обоих случаях) никаких действий не производится.
* При загрузке система резервирует за собой порты 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
+
:* При загрузке система резервирует за собой порты 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
* При завершении потока автоматически освобождаются все зарезервированные им порты.
+
:* При завершении потока автоматически освобождаются все зарезервированные им порты.
  
 +
'''Константы для регистров:'''
 +
::eax - SF_SET_PORTS (46)
  
 
{{System_functions}}
 
{{System_functions}}
 
[[Category: SysCalls]]
 
[[Category: SysCalls]]

Revision as of 18:21, 17 January 2016

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


Внимание:

  • Эта функция устарела и может быть удалена в следующих версиях ядра.
  • При необходимости прямого (бездрайверного) ввода/вывода в порты и в память внешних устройств рекомендуется использовать функцию 62

К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 (нерекомендуемый способ). Параметры:

  • eax = 46 - номер функции
  • ebx = 0 - зарезервировать, 1 - освободить
  • ecx = номер начала диапазона портов
  • edx = номер конца диапазона портов (включительно)

Возвращаемое значение:

  • eax = 0 - успешно
  • eax = 1 - ошибка

Замечания:

  • В случае резервирования портов ошибкой считается выполнение одного из условий:
  • начальный адрес больше конечного;
  • указанный диапазон содержит некорректный номер порта (корректные - от 0 до 0xFFFF);
  • превышено ограничение на общее число зарезервированных областей - допускается максимум 255;
  • указанный диапазон пересекается с одним из ранее зарезервированных
  • В случае освобождения портов ошибкой считается попытка освобождения диапазона, который ранее не был целиком зарезервирован этой же функцией (с такими же значениями ecx,edx).
  • При обнаружении ошибки (в обоих случаях) никаких действий не производится.
  • При загрузке система резервирует за собой порты 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
  • При завершении потока автоматически освобождаются все зарезервированные им порты.

Константы для регистров:

eax - SF_SET_PORTS (46)