Ru/api/kernel: Difference between revisions
No edit summary |
|||
Line 5: | Line 5: | ||
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются. | Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются. | ||
== Перечень функций == | |||
[[SysFn00/ru | Функция 0]] - определить и нарисовать окно. | |||
[[SysFn01/ru | Функция 1]] - поставить точку в окне. | |||
[[SysFn02/ru | Функция 2]] - получить код нажатой клавиши. | |||
[[SysFn03/ru | Функция 3]] - получить системное время. | |||
[[SysFn04/ru | Функция 4]] - вывести строку текста в окно. | |||
[[SysFn05/ru | Функция 5]] - пауза. | |||
[[SysFn06/ru | Функция 6]] - прочитать файл с рамдиска. | |||
[[SysFn07/ru | Функция 7]] - вывести изображение в окно. | |||
[[SysFn08/ru | Функция 8]] - определить/удалить кнопку. | |||
[[SysFn09/ru | Функция 9]] - информация о потоке выполнения. | |||
[[SysFn10/ru | Функция 10]] - ожидать события. | |||
[[SysFn11/ru|Функция 11]] - проверить, есть ли событие, без ожидания. | |||
[[SysFn12/ru|Функция 12]] - начать/закончить перерисовку окна. | |||
[[SysFn13/ru|Функция 13]] - нарисовать прямоугольник в окне. | |||
[[SysFn14/ru|Функция 14]] - получить размеры экрана. | |||
[[SysFn15/ru | Функция 15]] - работа с фоновой графикой | |||
[[SysFn16/ru|Функция 16]] - сохранить рамдиск на дискету. | |||
[[SysFn17/ru|Функция 17]] - получить код нажатой кнопки. | |||
[[SysFn18/ru|Функция 18]] - системные настройки и информация | |||
[[SysFn20/ru|Функция 20]] - интерфейс MIDI. | |||
[[SysFn21/ru|Функция 21]] - установка системных параметров | |||
[[SysFn22/ru|Функция 22]] - установить системную дату/время. | |||
[[SysFn23/ru|Функция 23]] - ожидать события с таймаутом. | |||
[[SysFn24/ru|Функция 24]] - работа с проигрывателем компакт-дисков | |||
Функция 25 - установить громкость SBPro. - '''Удалена''' | |||
[[SysFn26/ru|Функция 26]] - аппаратный сервис | |||
Функция 27 - сведения об этой функции отсутствуют | |||
Функция 28 - установить громкость SB16. - '''Удалена''' | |||
[[SysFn29/ru|Функция 29]] - получить системную дату. | |||
[[SysFn30/ru|Функция 30]] - работа с текущей папкой. | |||
Функция 31 - сведения об этой функции отсутствуют | |||
Функция 32 - использовалась в ранних версиях КОС для удаления файла с рамдиска.- '''удалена''' | |||
Функция 33 - использовалась в ранних версиях КОС для записи файла на рамдиск.-'''удалена''' | |||
Функция 34 - сведения об этой функции отсутствуют | |||
[[SysFn35/ru|Функция 35]] - прочитать цвет точки на экране. | |||
[[SysFn36/ru|Функция 36]] - прочитать область экрана. | |||
[[SysFn37/ru|Функция 37]] - работа с мышью. | |||
[[SysFn38/ru|Функция 38]] - нарисовать отрезок. | |||
[[SysFn39/ru|Функция 39]] - чтение фона. | |||
[[SysFn40/ru|Функция 40]] - установить маску для ожидаемых событий. | |||
[[SysFn41/ru|Функция 41]] - узнать владельца IRQ. | |||
[[SysFn42/ru|Функция 42]] - работа с данными, полученными по IRQ. | |||
[[SysFn43/ru|Функция 43]] - ввод/вывод в порт. | |||
[[SysFn44/ru|Функция 44]] - определить действия при поступлении IRQ. | |||
[[SysFn45/ru|Функция 45]] - зарезервировать/освободить IRQ. | |||
[[SysFn46/ru|Функция 46]] - зарезервировать/освободить группу портов ввода/вывода. | |||
* '''Внимание:''' Эта функция устарела и может быть удалена в следующих версиях ядра. | |||
[[SysFn47/ru|Функция 47]] - вывести число в окно. | |||
[[SysFn48/ru|Функция 48]] - стили отображения окон | |||
[[SysFn49/ru|Функция 49]] - Advanced Power Management (APM). | |||
[[SysFn50/ru|Функция 50]] - установка формы окна. | |||
[[SysFn51/ru|Функция 51]] - создать поток. | |||
[[SysFn52/ru|Функция 52]] - сетевой сервис. | |||
[[SysFn53/ru|Функция 53]] - работа с сетевым сокетами. | |||
Функция 54 - Зарезервирована (пихает 0x12345678 в eax). | |||
Зарезервирована (пихает 0x12345678 в eax). | |||
[[SysFn55/ru | Функция 55]] - аудио сервис. | |||
* Подфункция 0 - загрузить данные для SB16. | * Подфункция 0 - загрузить данные для SB16. | ||
* Подфункция 1 - начать проигрывать данные на SB16. | * Подфункция 1 - начать проигрывать данные на SB16. | ||
Line 252: | Line 119: | ||
* Подфункция 55 - начать проигрывать данные на встроенном спикере. | * Подфункция 55 - начать проигрывать данные на встроенном спикере. | ||
[[SysFn57/ru | Функция 57]] - PCI BIOS. | |||
[[SysFn58/ru | Функция 58]] - работа с файловой системой. | |||
* Подфункция 0 - прочитать файл/папку. | * Подфункция 0 - прочитать файл/папку. | ||
* Подфункция 8 - LBA-чтение с устройства. | * Подфункция 8 - LBA-чтение с устройства. | ||
* Подфункция 15 - получить информацию о файловой системе. | * Подфункция 15 - получить информацию о файловой системе. | ||
[[SysFn60/ru | Функция 60]] - Inter Process Communication (IPC). | |||
* Подфункция 1 - установить область для получения IPC | |||
[[SysFn61/ru | Функция 61]] - получить параметры для прямого доступа к графике. | |||
[[SysFn62/ru|Функция 62]] - пользовательский доступ к PCI. | |||
* Подфункция 0 - получить версию PCI-интерфейса. | * Подфункция 0 - получить версию PCI-интерфейса. | ||
* Подфункция 1 - получить номер последней PCI-шины. | * Подфункция 1 - получить номер последней PCI-шины. | ||
Line 287: | Line 141: | ||
* подфункция 13 - освободить линейные адреса MMIO | * подфункция 13 - освободить линейные адреса MMIO | ||
[[SysFn63/ru|Функция 63]] - работа с доской отладки. | |||
[[SysFn64/ru|Функция 64]] - перераспределить память приложения. | |||
[[SysFn65/ru|Функция 65]] - вывести изображение с палитрой в окно. | |||
[[SysFn66/ru|Функция 66]] - работа с клавиатурой. | |||
* Подфункция 1 - установить режим ввода с клавиатуры. | * Подфункция 1 - установить режим ввода с клавиатуры. | ||
* Подфункция 2 - получить режим ввода с клавиатуры. | * Подфункция 2 - получить режим ввода с клавиатуры. | ||
Line 309: | Line 154: | ||
* Подфункция 5 - удалить установленную "горячую клавишу". | * Подфункция 5 - удалить установленную "горячую клавишу". | ||
[[SysFn67/ru|Функция 67]] - изменить положение/размеры окна. | |||
[[SysFn68/ru|Функция 68]] - внутренние системные службы | |||
*Подфункция 0 - получить счётчик переключений задач. | *Подфункция 0 - получить счётчик переключений задач. | ||
*Подфункция 1 - переключиться на следующий поток выполнения. | *Подфункция 1 - переключиться на следующий поток выполнения. | ||
Line 335: | Line 175: | ||
*Подфункция 23 - закрыть именованую область памяти. | *Подфункция 23 - закрыть именованую область памяти. | ||
[[SysFn69/ru|Функция 69]] - отладка. | |||
*Подфункция 0 - определить область данных для отладочных сообщений. | *Подфункция 0 - определить область данных для отладочных сообщений. | ||
*Подфункция 1 - получить состояние регистров отлаживаемого потока. | *Подфункция 1 - получить состояние регистров отлаживаемого потока. | ||
Line 350: | Line 187: | ||
*Подфункция 9 - установить/снять аппаратную точку останова. | *Подфункция 9 - установить/снять аппаратную точку останова. | ||
[[SysFn70/ru|Функция 70]] - работа с файловой системой с поддержкой длинных имён. | |||
* Подфункция 0 - чтение файла с поддержкой длинных имён. | * Подфункция 0 - чтение файла с поддержкой длинных имён. | ||
* Подфункция 1 - чтение папки с поддержкой длинных имён. | * Подфункция 1 - чтение папки с поддержкой длинных имён. | ||
Line 365: | Line 199: | ||
* Подфункция 9 - создание папки. | * Подфункция 9 - создание папки. | ||
Описание функции перенесено в отдельную статью: [[SysFn71/ru|Функция 71]] - параметры окна | |||
Описание функции перенесено в отдельную статью: [[SysFn71/ru|Функция 71]] | |||
* Подфункция 1 - установить заголовок окна программы. | * Подфункция 1 - установить заголовок окна программы. | ||
[[SysFn72/ru|Функция 72]] - послать сообщение окну. | |||
* Подфункция 1 - послать сообщение с параметром активному окну. | |||
[[SysFn-1/ru|Функция -1]] - завершить выполнение потока/процесса | |||
== Список событий == | == Список событий == | ||
Line 390: | Line 216: | ||
вполне достаточно для многих приложений. | вполне достаточно для многих приложений. | ||
Коды событий: | Коды событий: | ||
* 1 = сообщение о перерисовке (сбрасывается при вызове функции 0) | |||
* 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша"; | |||
** сбрасывается, когда все клавиши из буфера считаны функцией 2 | |||
* 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит; | |||
** поступает, только когда окно активно; | |||
** сбрасывается, когда все кнопки из буфера считаны функцией 17) | |||
* 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40) | |||
* 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит) | |||
* 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) | |||
* 7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении) | |||
* 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью) | |||
* 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему) | |||
* 16..31 = произошло событие с соответствующим IRQ (16=IRQ0, 31=IRQ15) (сбрасывается при считывании всех данных IRQ) | |||
== Коды ошибок файловой системы == | |||
== | * 0 = успешно | ||
* 1 = не определена база и/или раздел жёсткого диска (подфункциями 7, 8 функции 21) | |||
* 2 = функция не поддерживается для данной файловой системы | |||
* 3 = неизвестная файловая система | |||
* 4 = зарезервировано, никогда не возвращается в текущей реализации | |||
* 5 = файл не найден | |||
* 6 = файл закончился | |||
* 7 = указатель вне памяти приложения | |||
* 8 = диск заполнен | |||
* 9 = таблица FAT разрушена | |||
* 10 = доступ запрещён | |||
* 11 = ошибка устройства | |||
При запуске программы возможны также следующие коды ошибок: | При запуске программы возможны также следующие коды ошибок: | ||
* 30 = 0x1E = недостаточно памяти | |||
* 31 = 0x1F = файл не является исполнимым | |||
* 32 = 0x20 = слишком много процессов | |||
[[Category:Coding]] | [[Category:Coding]] |
Revision as of 14:14, 24 June 2010
СИСТЕМНЫЕ ФУНКЦИИ KolibriOS 0.7.7.0
Номер функции помещается в регистр eax. Вызов системной функции осуществляется командой "int 0x40". Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.
Перечень функций
Функция 0 - определить и нарисовать окно.
Функция 1 - поставить точку в окне.
Функция 2 - получить код нажатой клавиши.
Функция 3 - получить системное время.
Функция 4 - вывести строку текста в окно.
Функция 5 - пауза.
Функция 6 - прочитать файл с рамдиска.
Функция 7 - вывести изображение в окно.
Функция 8 - определить/удалить кнопку.
Функция 9 - информация о потоке выполнения.
Функция 10 - ожидать события.
Функция 11 - проверить, есть ли событие, без ожидания.
Функция 12 - начать/закончить перерисовку окна. Функция 13 - нарисовать прямоугольник в окне.
Функция 14 - получить размеры экрана.
Функция 15 - работа с фоновой графикой
Функция 16 - сохранить рамдиск на дискету.
Функция 17 - получить код нажатой кнопки.
Функция 18 - системные настройки и информация
Функция 20 - интерфейс MIDI.
Функция 21 - установка системных параметров
Функция 22 - установить системную дату/время.
Функция 23 - ожидать события с таймаутом.
Функция 24 - работа с проигрывателем компакт-дисков
Функция 25 - установить громкость SBPro. - Удалена
Функция 26 - аппаратный сервис
Функция 27 - сведения об этой функции отсутствуют
Функция 28 - установить громкость SB16. - Удалена
Функция 29 - получить системную дату.
Функция 30 - работа с текущей папкой.
Функция 31 - сведения об этой функции отсутствуют
Функция 32 - использовалась в ранних версиях КОС для удаления файла с рамдиска.- удалена
Функция 33 - использовалась в ранних версиях КОС для записи файла на рамдиск.-удалена
Функция 34 - сведения об этой функции отсутствуют
Функция 35 - прочитать цвет точки на экране.
Функция 36 - прочитать область экрана.
Функция 37 - работа с мышью.
Функция 38 - нарисовать отрезок.
Функция 39 - чтение фона.
Функция 40 - установить маску для ожидаемых событий.
Функция 41 - узнать владельца IRQ.
Функция 42 - работа с данными, полученными по IRQ.
Функция 43 - ввод/вывод в порт.
Функция 44 - определить действия при поступлении IRQ. Функция 45 - зарезервировать/освободить IRQ.
Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
- Внимание: Эта функция устарела и может быть удалена в следующих версиях ядра.
Функция 47 - вывести число в окно.
Функция 48 - стили отображения окон
Функция 49 - Advanced Power Management (APM).
Функция 50 - установка формы окна.
Функция 51 - создать поток.
Функция 52 - сетевой сервис. Функция 53 - работа с сетевым сокетами.
Функция 54 - Зарезервирована (пихает 0x12345678 в eax).
Функция 55 - аудио сервис.
- Подфункция 0 - загрузить данные для SB16.
- Подфункция 1 - начать проигрывать данные на SB16.
- Подфункция 2 - установить формат данных SB16.
- Подфункция 55 - начать проигрывать данные на встроенном спикере.
Функция 57 - PCI BIOS.
Функция 58 - работа с файловой системой.
- Подфункция 0 - прочитать файл/папку.
- Подфункция 8 - LBA-чтение с устройства.
- Подфункция 15 - получить информацию о файловой системе.
Функция 60 - Inter Process Communication (IPC).
- Подфункция 1 - установить область для получения IPC
Функция 61 - получить параметры для прямого доступа к графике.
Функция 62 - пользовательский доступ к PCI.
- Подфункция 0 - получить версию PCI-интерфейса.
- Подфункция 1 - получить номер последней PCI-шины.
- Подфункция 2 - Получить механизм обращения к конфигурационному пространству PCI.
- подфункции 4,5,6 - прочитать PCI-регистр.
- подфункции 8,9,10 - записать в PCI-регистр.
- подфункция 11 - инициализировать доступ к MMIO
- подфункция 12 - получить линейный адрес MMIO-блока
- подфункция 13 - освободить линейные адреса MMIO
Функция 63 - работа с доской отладки.
Функция 64 - перераспределить память приложения.
Функция 65 - вывести изображение с палитрой в окно.
Функция 66 - работа с клавиатурой.
- Подфункция 1 - установить режим ввода с клавиатуры.
- Подфункция 2 - получить режим ввода с клавиатуры.
- Подфункция 3 - получить состояние управляющих клавиш.
- Подфункция 4 - установить общесистемную "горячую клавишу".
- Подфункция 5 - удалить установленную "горячую клавишу".
Функция 67 - изменить положение/размеры окна.
Функция 68 - внутренние системные службы
- Подфункция 0 - получить счётчик переключений задач.
- Подфункция 1 - переключиться на следующий поток выполнения.
- Подфункция 2 - кэш + rdpmc.
- Подфункция 3 - прочитать MSR-регистр.
- Подфункция 4 - записать в MSR-регистр.
- Подфункция 11 - инициализировать кучу процесса.
- Подфункция 12 - выделить блок памяти.
- Подфункция 13 - освободить блок памяти.
- Подфункция 14 - ожидать извещения от драйвера.
- Подфункция 15 - установить обработчик исключений FPU.
- Подфункция 16 - загрузить драйвер.
- Подфункция 17 - управление драйвером.
- Подфункция 18 - установить обработчик исключений SSE.
- Подфункция 19 - загрузить DLL.
- Подфункция 20 - перераспределить блок памяти.
- Подфункция 22 - открыть именованую область памяти.
- Подфункция 23 - закрыть именованую область памяти.
Функция 69 - отладка.
- Подфункция 0 - определить область данных для отладочных сообщений.
- Подфункция 1 - получить состояние регистров отлаживаемого потока.
- Подфункция 2 - установить состояние регистров отлаживаемого потока.
- Подфункция 3 - отключиться от отлаживаемого процесса.
- Подфункция 4 - приостановить поток.
- Подфункция 5 - возобновить выполнение потока.
- Подфункция 6 - прочитать из памяти отлаживаемого процесса.
- Подфункция 7 - записать в память отлаживаемого процесса.
- Подфункция 8 - завершить отлаживаемый поток.
- Подфункция 9 - установить/снять аппаратную точку останова.
Функция 70 - работа с файловой системой с поддержкой длинных имён.
- Подфункция 0 - чтение файла с поддержкой длинных имён.
- Подфункция 1 - чтение папки с поддержкой длинных имён.
- Подфункция 2 - создание/перезапись файла с поддержкой длинных имён.
- Подфункция 3 - запись в существующий файл с поддержкой длинных имён.
- Подфункция 4 - установка размера файла.
- Подфункция 5 - получение информации о файле/папке.
- Подфункция 6 - установка атрибутов файла/папки.
- Подфункция 7 - запуск программы.
- Подфункция 8 - удаление файла/папки.
- Подфункция 9 - создание папки.
Описание функции перенесено в отдельную статью: Функция 71 - параметры окна
- Подфункция 1 - установить заголовок окна программы.
Функция 72 - послать сообщение окну.
- Подфункция 1 - послать сообщение с параметром активному окну.
Функция -1 - завершить выполнение потока/процесса
Список событий
Очередное событие можно получить вызовом одной из функций 10 (ожидать события), 11 (проверить без ожидания), 23 (ожидать в течение заданного времени). Эти функции возвращают только те события, которые входят в маску, устанавливаемую функцией 40. По умолчанию это первые три, чего вполне достаточно для многих приложений. Коды событий:
- 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
- 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
- сбрасывается, когда все клавиши из буфера считаны функцией 2
- 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
- поступает, только когда окно активно;
- сбрасывается, когда все кнопки из буфера считаны функцией 17)
- 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40)
- 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
- 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
- 7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении)
- 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
- 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
- 16..31 = произошло событие с соответствующим IRQ (16=IRQ0, 31=IRQ15) (сбрасывается при считывании всех данных IRQ)
Коды ошибок файловой системы
- 0 = успешно
- 1 = не определена база и/или раздел жёсткого диска (подфункциями 7, 8 функции 21)
- 2 = функция не поддерживается для данной файловой системы
- 3 = неизвестная файловая система
- 4 = зарезервировано, никогда не возвращается в текущей реализации
- 5 = файл не найден
- 6 = файл закончился
- 7 = указатель вне памяти приложения
- 8 = диск заполнен
- 9 = таблица FAT разрушена
- 10 = доступ запрещён
- 11 = ошибка устройства
При запуске программы возможны также следующие коды ошибок:
- 30 = 0x1E = недостаточно памяти
- 31 = 0x1F = файл не является исполнимым
- 32 = 0x20 = слишком много процессов