Kernel updated to 0.7.5.0

git-svn-id: svn://kolibrios.org@1018 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Evgeny Grechnikov (Diamond) committed 2009-01-31 06:09:36 +00:00
1 parent 7bfc5040a8
commit f8317039fb
6 files changed
+350 -472

No files matched your search

+6 -3
View File
@@ -423,13 +423,16 @@ cfgmanager:
; otherwise, set [preboot_device] to 1 (default value - boot from floppy)
mov byte [di], 1
.preboot_device_inited:
; following 6 lines set variables to 1 if its current value is 0
; following 4 lines set variables to 1 if its current value is 0
cmp byte [di+preboot_dma-preboot_device], 1
adc byte [di+preboot_dma-preboot_device], 0
cmp byte [di+preboot_biosdisk-preboot_device], 1
adc byte [di+preboot_biosdisk-preboot_device], 0
cmp byte [di+preboot_vrrm-preboot_device], 1
adc byte [di+preboot_vrrm-preboot_device], 0
; default value for VRR is OFF
cmp byte [di+preboot_vrrm-preboot_device], 0
jnz @f
mov byte [di+preboot_vrrm-preboot_device], 2
@@:
; notify user
_setcursor 5,2
+11
View File
@@ -810,6 +810,8 @@ proc load_driver stdcall, driver_name:dword
mov dword [edx+8], 'vers'
mov byte [edx+12], '/'
mov esi, [driver_name]
.redo:
lea edx, [file_name]
lea edi, [edx+13]
mov ecx, 16
@@:
@@ -926,6 +928,15 @@ proc load_driver stdcall, driver_name:dword
jnz .ok
stdcall kernel_free, [img_base]
cmp dword [file_name+13], 'SOUN'
jnz @f
cmp dword [file_name+17], 'D.ob'
jnz @f
cmp word [file_name+21], 'j'
jnz @f
mov esi, aSis
jmp .redo
@@:
xor eax, eax
ret
.ok:
+1
View File
@@ -80,6 +80,7 @@ msg_module db 'in module ',0
msg_version db 'incompatible driver version',13,10,0
msg_www db 'please visit www.kolibrios.org',13,10,0
msg_CR db 13,10,0
aSis db 'SIS',0
intel_str db "GenuineIntel",0
AMD_str db "AuthenticAMD",0
+201 -262
View File
@@ -1,4 +1,4 @@
СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.1.0
СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.5.0
Номер функции помещается в регистр eax.
Вызов системной функции осуществляется командой "int 0x40".
@@ -41,7 +41,7 @@
* esi = 0xXYRRGGBB - цвет заголовка
* RR, GG, BB определяют сам цвет
* Y=0 - обычное окно, Y=1 - неперемещаемое окно
* X определяет градиент заголовка: X=0 - нет градиента,
* X определяет градиент заголовка: X=0 - нет градиента,
X=8 - обычный градиент,
для окон типа II X=4 - негативный градиент
* прочие значения X и Y зарезервированы
@@ -67,7 +67,7 @@
координата (или, возможно, обе) считается нулем, а если и это
не помогает, то соответствующий размер (или, возможно, оба)
устанавливается в размер экрана.
Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые
в ebx,ecx. Координаты приводятся относительно левого верхнего
угла окна, который, таким образом, задается как (0,0), координаты
@@ -223,9 +223,6 @@
требуется передать управление следующему процессу
(закончить текущий квант времени), используйте подфункцию 1
функции 68.
* При текущей реализации произойдет немедленный возврат из функции,
если сложение ebx с текущим значением счетчика времени вызовет
32-битное переполнение.
======================================================================
=============== Функция 6 - прочитать файл с рамдиска. ===============
@@ -621,16 +618,22 @@
* eax = 17 - номер функции
Возвращаемое значение:
* если буфер пуст, возвращается eax=1
* если буфер не пуст, тогда возвращается: старшие 24 бита eax
содержат идентификатор кнопки (в частности, в ah оказывается
младший байт идентификатора; если все кнопки имеют идентификатор,
меньший 256, то для различения достаточно ah),
а в al возвращается 0 - если использовалась левая кнопка мыши, или бит той кнопки мыши, которая использовалась.
* если буфер непуст:
* старшие 24 бита eax содержат идентификатор кнопки
(в частности, в ah оказывается младший байт идентификатора;
если все кнопки имеют идентификатор, меньший 256,
то для различения достаточно ah)
* al = 0 - кнопка была нажата левой кнопкой мыши
* al = бит, соответствующий нажавшей кнопке мыши, если не левой
Замечания:
* "Буфер" хранит только одну кнопку, при нажатии новой кнопки
информация о старой теряется.
* При вызове этой функции приложением с неактивным окном
возвращается ответ "буфер пуст".
* Возвращаемое значение al соответствует состоянию кнопок мыши
в формате подфункции 2 функции 37 в момент начала нажатия
на кнопку, за исключением младшего бита (соответствующего левой
кнопке мыши), который сбрасывается.
======================================================================
==== Функция 18, подфункция 2 - завершить процесс/поток по слоту. ====
@@ -662,7 +665,7 @@
* Узнать, какое окно является активным, можно вызовом подфункции 7.
======================================================================
Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду.
Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду.
======================================================================
Под пустыми тактами понимается время, в которое процессор простаивает
в ожидании прерывания (в инструкции hlt).
@@ -683,7 +686,7 @@
* eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)
======================================================================
Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске.
Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске.
======================================================================
Параметры:
* eax = 18 - номер функции
@@ -735,7 +738,7 @@
* функция не возвращает значения
======================================================================
======= Функция 18, подфункция 9 - завершение работы системы ========
= Функция 18, подфункция 9 - завершение работы системы с параметром. =
======================================================================
Параметры:
* eax = 18 - номер функции
@@ -750,8 +753,7 @@
Замечания:
* Не следует полагаться на возвращаемое значение при неверном
вызове, оно может измениться в последующих версиях ядра.
* Можно использовать подфункцию 1, чтобы на последнем шаге
завершения работы пользователь сам решал, что ему нужно.
======================================================================
======== Функция 18, подфункция 10 - свернуть окно приложения. =======
======================================================================
@@ -764,7 +766,7 @@
Замечания:
* Минимизированное окно с точки зрения функции 9 сохраняет положение
и размеры.
* Восстановление окна приложения происходит при активизировании
* Восстановление окна приложения происходит при активизировании
подфункцией 3.
* Обычно нет необходимости явно сворачивать/разворачивать своё окно:
сворачивание окна осуществляется системой при нажатии на кнопку
@@ -1027,7 +1029,7 @@ dd 638
* иначе eax = номер слота
======================================================================
Функция 18, подфункция 22 - операции с окном другого процесса/потока.
Функция 18, подфункция 22 - операции с окном другого процесса/потока.
======================================================================
Параметры:
* eax = 18 - номер функции
@@ -1064,7 +1066,7 @@ dd 638
* eax = 0 - успешно
* eax = 1 - не определён базовый порт
Замечания:
* Предварительно должен быть определён базовый порт вызовом
* Предварительно должен быть определён базовый порт вызовом
подфункции 1 функции 21.
======================================================================
@@ -1080,7 +1082,7 @@ dd 638
Замечания:
* Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF.
* Установка базы нужна для работы функции 20.
* Получить установленный базовый порт можно вызовом
* Получить установленный базовый порт можно вызовом
подфункции 1 функции 26.
======================================================================
@@ -1110,7 +1112,7 @@ dd 638
нормальная раскладка, после чего из кода вычитается 0x60;
если не нажата ни одна из управляющих клавиш, то используется
нормальная раскладка.
* Получить раскладки и идентификатор страны можно с помощью
* Получить раскладки и идентификатор страны можно с помощью
подфункции 2 функции 26.
* Идентификатор страны - глобальная системная переменная, которая
самим ядром не используется; однако приложение @panel отображает
@@ -1128,14 +1130,9 @@ dd 638
* eax = 0
Замечания:
* База CD используется функцией 24.
* Получить установленную базу CD можно вызовом
* Получить установленную базу CD можно вызовом
подфункции 3 функции 26.
======================================================================
== Функция 21, подфункция 4 - установить базовый порт Sound Blaster. =
======================================================================
Удалена
======================================================================
========= Функция 21, подфункция 5 - установить язык системы. ========
======================================================================
@@ -1171,7 +1168,7 @@ dd 638
* Не следует изменять базу, когда какое-нибудь приложение работает
с жёстким диском. Если не хотите глюков системы.
* Получить установленную базу можно вызовом подфункции 7 функции 26.
* Следует также определить используемый раздел жёсткого диска
* Следует также определить используемый раздел жёсткого диска
подфункцией 8.
======================================================================
@@ -1194,16 +1191,11 @@ dd 638
* Получить установленный раздел можно вызовом подфункции 8
функции 26.
* Проверок на корректность не делается.
* Узнать число разделов на жёстком диске можно вызовом
* Узнать число разделов на жёстком диске можно вызовом
подфункции 11 функции 18.
* Следует также определить используемую базу жёсткого диска
* Следует также определить используемую базу жёсткого диска
подфункцией 7.
======================================================================
===== Функция 21, подфункция 10 - установить канал DMA для звука. ====
======================================================================
Удалена:
======================================================================
====================== Функция 21, подфункция 11 =====================
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
@@ -1287,13 +1279,13 @@ dd 638
* ebx = частота вертикальной развёртки (в Гц)
* ecx = номер текущего видеорежима
Замечания:
* Драйвер предварительно должен быть инициализирован вызовом
* Драйвер предварительно должен быть инициализирован вызовом
функции драйвера 1.
* Если нужны только размеры экрана, целесообразней использовать
функцию 14 с учётом того, что она возвращает размеры на 1 меньше.
======================================================================
= Функция 21, подфункция 13, подподфункция 3 - установить видеорежим.
= Функция 21, подфункция 13, подподфункция 3 - установить видеорежим.
======================================================================
Параметры:
* eax = 21 - номер функции
@@ -1306,7 +1298,7 @@ dd 638
* eax = 0 - успешно
* ebx, ecx разрушаются
Замечания:
* Драйвер предварительно должен быть инициализирован вызовом
* Драйвер предварительно должен быть инициализирован вызовом
функции драйвера 1.
* Номер видеорежима и частота должны быть в таблице, возвращаемой
функцией драйвера 1.
@@ -1325,7 +1317,7 @@ dd 638
* eax = 0 - успешно
* ebx, ecx разрушаются
Замечания:
* Драйвер предварительно должен быть инициализирован вызовом
* Драйвер предварительно должен быть инициализирован вызовом
функции драйвера 1.
======================================================================
@@ -1345,7 +1337,7 @@ dd 638
* eax = 0 - успешно
* ebx, ecx разрушаются
Замечания:
* Драйвер предварительно должен быть инициализирован вызовом
* Драйвер предварительно должен быть инициализирован вызовом
функции драйвера 1.
* Функция влияет только на физический размер изображения
на мониторе; логический размер (число пикселей) не меняется.
@@ -1426,7 +1418,7 @@ dd 638
* eax = 0 - успешно
* eax = 1 - не определена база CD
Замечания:
* Предварительно нужно определить базовый порт CD вызовом
* Предварительно нужно определить базовый порт CD вызовом
подфункции 3 функции 21.
* В секунде 75 фреймов, в минуте 60 секунд.
* Функция асинхронна (возвращает управление, когда началось
@@ -1447,7 +1439,7 @@ dd 638
* Формат таблицы с информацией о дорожках такой же, как и для
ATAPI-CD команды 43h (READ TOC), обычной таблицы (подкоманда 00h).
Адреса возвращаются в формате MSF.
* Предварительно нужно определить базовый порт CD вызовом
* Предварительно нужно определить базовый порт CD вызовом
подфункции 3 функции 21.
* Функция возвращает информацию только о не более чем 100
первых дорожках. В большинстве случаев этого достаточно.
@@ -1462,7 +1454,7 @@ dd 638
* eax = 0 - успешно
* eax = 1 - не определена база CD
Замечания:
* Предварительно нужно определить базовый порт CD вызовом
* Предварительно нужно определить базовый порт CD вызовом
подфункции 3 функции 21.
======================================================================
@@ -1497,11 +1489,6 @@ dd 638
* Функция поддерживается только для ATAPI-устройств (CD и DVD).
* Примером использования функции является приложение CD_tray.
======================================================================
============== Функция 25 - установить громкость SBPro. ==============
======================================================================
Удалена
======================================================================
===== Функция 26, подфункция 1 - получить базовый порт MPU MIDI. =====
======================================================================
@@ -1511,7 +1498,7 @@ dd 638
Возвращаемое значение:
* eax = номер порта
Замечания:
* Установить базовый порт можно вызовом
* Установить базовый порт можно вызовом
подфункции 1 функции 21.
======================================================================
@@ -1544,7 +1531,7 @@ dd 638
нормальная раскладка, после чего из кода вычитается 0x60;
если не нажата ни одна из управляющих клавиш, то используется
нормальная раскладка.
* Установить раскладки и идентификатор страны можно с помощью
* Установить раскладки и идентификатор страны можно с помощью
подфункции 2 функции 21.
* Идентификатор страны - глобальная системная переменная, которая
самим ядром не используется; однако приложение @panel отображает
@@ -1564,11 +1551,6 @@ dd 638
* База CD используется функцией 24.
* Установить базу CD можно вызовом подфункции 3 функции 21.
======================================================================
=== Функция 26, подфункция 4 - получить базовый порт Sound Blaster. ==
======================================================================
Удалена
======================================================================
========== Функция 26, подфункция 5 - получить язык системы. =========
======================================================================
@@ -1633,11 +1615,6 @@ dd 638
497 суток.
* Системное время можно получить функцией 3.
======================================================================
====== Функция 26, подфункция 10 - получить канал DMA для звука. =====
======================================================================
Удалена
======================================================================
====================== Функция 26, подфункция 11 =====================
=========== Узнать, разрешён ли низкоуровневый доступ к HD. ==========
@@ -1649,7 +1626,7 @@ dd 638
* eax = 0/1 - запрещён/разрешён
Замечания:
* Используется при LBA-чтении (подфункция 8 функции 58).
* Установить текущее состояние можно вызовом
* Установить текущее состояние можно вызовом
подфункции 11 функции 21.
======================================================================
@@ -1664,14 +1641,9 @@ dd 638
Замечания:
* Используется при работе с шиной PCI (функция 62).
* Текущая реализация использует только младший бит ecx.
* Установить текущее состояние можно вызовом
* Установить текущее состояние можно вызовом
подфункции 12 функции 21.
======================================================================
=============== Функция 28 - установить громкость SB16. ==============
======================================================================
Удалена
======================================================================
================ Функция 29 - получить системную дату. ===============
======================================================================
@@ -1711,6 +1683,56 @@ dd 638
копируются только первые (edx-1) байт
и в конце ставится завершающий 0.
======================================================================
================ Функция 32 - удалить файл с рамдиска. ===============
======================================================================
Параметры:
* eax = 32 - номер функции
* ebx = указатель на имя файла
Возвращаемое значение:
* eax = 0 - успешно; иначе код ошибки файловой системы
Замечания:
* Эта функция устарела; функция 58 позволяет выполнять
те же действия с расширенными возможностями.
* Текущая реализация возвращает только значения 0(успех) и
5(файл не найден).
* Имя файла должно быть либо в формате 8+3 символов (первые
8 символов - собственно имя, последние 3 - расширение,
короткие имена и расширения дополняются пробелами),
либо в формате 8.3 символов "FILE.EXT"/"FILE.EX "
(имя не более 8 символов, точка, расширение 3 символа,
дополненное при необходимости пробелами).
Имя файла должно быть записано заглавными буквами.
Завершающий символ с кодом 0 не нужен (не ASCIIZ-строка).
* Эта функция не поддерживает папок на рамдиске.
======================================================================
=============== Функция 33 - записать файл на рамдиск. ===============
======================================================================
Параметры:
* eax = 33 - номер функции
* ebx = указатель на имя файла
* ecx = указатель на данные для записи
* edx = число байт для записи
* следует устанавливать esi=0
Возвращаемое значение:
* eax = 0 - успешно, иначе код ошибки файловой системы
Замечания:
* Эта функция устарела; функция 70 позволяет выполнять
те же действия с расширенными возможностями.
* Если указать ненулевое значение в esi и на рамдиске уже есть
указанный файл, то будет создан ещё один файл с тем же именем.
* В противном случае файл перезаписывается.
* Имя файла должно быть либо в формате 8+3 символов
(первые 8 символов - собственно имя, последние 3 - расширение,
короткие имена и расширения дополняются пробелами),
либо в формате 8.3 символов "FILE.EXT"/"FILE.EX "
(имя не более 8 символов, точка, расширение 3 символа,
дополненное при необходимости пробелами).
Имя файла должно быть записано заглавными буквами.
Завершающий символ с кодом 0 не нужен (не ASCIIZ-строка).
* Эта функция не поддерживает папок на рамдиске.
======================================================================
============ Функция 35 - прочитать цвет точки на экране. ============
======================================================================
@@ -1729,19 +1751,19 @@ dd 638
можно получить функцией 61.
======================================================================
=============== Функция 36 - прочитать область экрана. ==============
=============== Функция 36 - прочитать область экрана. ===============
======================================================================
Параметры:
* eax = 36 - номер функции
* ebx = указатель на предварительно выделенную область памяти,
куда будет помещено изображение в формате BBGGRRBBGGRR...
куда будет помещено изображение в формате BBGGRRBBGGRR...
* ecx = [размер по оси x]*65536 + [размер по оси y]
* edx = [координата по оси x]*65536 + [координата по оси y]
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* Координаты изображения - это координаты верхнего левого угла
изображения относительно экрана.
* Координаты области - это координаты верхнего левого угла
области относительно экрана.
* Размер изображения в байтах есть 3*xsize*ysize.
======================================================================
@@ -1870,7 +1892,7 @@ dd 638
Возвращаемое значение:
* eax = [ширина]*65536 + [высота]
Замечания:
* Есть парная команда установки размеров фонового изображения -
* Есть парная команда установки размеров фонового изображения -
подфункция 1 функции 15. После которой, разумеется, следует
заново определить само изображение.
@@ -1889,7 +1911,7 @@ dd 638
* Не следует полагаться на возвращаемое значение в случае неверного
смещения, оно может измениться в следующих версиях ядра.
* Смещение точки с координатами (x,y) вычисляется как (x+y*xsize)*3.
* Есть парная функция установки точки на фоновом изображении -
* Есть парная функция установки точки на фоновом изображении -
подфункция 2 функции 15.
======================================================================
@@ -1902,7 +1924,7 @@ dd 638
* eax = 1 - замостить
* eax = 2 - растянуть
Замечания:
* Есть парная функция установки режима отрисовки фона -
* Есть парная функция установки режима отрисовки фона -
подфункция 4 функции 15.
======================================================================
@@ -1937,43 +1959,35 @@ dd 638
* eax = -1 для некорректного ebx
======================================================================
========== Функция 42 - работа с данными, полученными по IRQ. =======
========= Функция 42 - работа с данными, полученными по IRQ. =========
======================================================================
------------------------ Чтение данных -------------------------------
При возникновении IRQ система может считывать данные из указанных
ранее функцией 44 портов и записывать эти данные в буфер.
Описываемая функция считывает данные из этого буфера в буфер
указанный в качестве параметра.
-------------------- Подфункция 0 - чтение данных --------------------
Параметры:
* eax = 42 - номер функции
* bl = номер IRQ, 0..15
* bh = номер подфункции, 0
Остальная часть регистра ebx должна быть обнулена.
* ecx = указатель на буфер, куда будут приниматься данные
* bl = номер IRQ, 0..15
* bh = 0 - номер подфункции
* остальная часть регистра ebx должна быть обнулена
* ecx = указатель на буфер размером не менее 4000 байт
Возвращаемое значение: (ситуацию можно различить по значению eax)
* если поток не является владельцем IRQ
(или номер IRQ задан неверно):
* eax = -1
* если данных нет:
* eax = 0
(или номер IRQ задан неверно): eax = -1
* если данных нет: eax = 0
* если всё в порядке и данные были:
* eax = размер данных, прочитанных из буфера (в байтах)
eax = размер данных, прочитанных из буфера (в байтах)
Смотрите замечания ниже.
------------------------ Узнать размер данных в буфере ---------------
------------ Подфункция 1 - узнать размер данных в буфере ------------
Параметры:
* eax = 42 - номер функции
* bl = номер IRQ, 0..15
* bh = номер подфункции, 1
Остальная часть регистра ebx должна быть обнулена.
Возвращаемое значение: (ситуацию можно различить по значению eax)
* bl = номер IRQ, 0..15
* bh = 1 - номер подфункции
* остальная часть регистра ebx должна быть обнулена
Возвращаемое значение:
* если поток не является владельцем IRQ
(или номер IRQ задан неверно):
* eax = -1
* если всё в порядке, в eax размер данных
(или номер IRQ задан неверно): eax = -1
* иначе eax = размер данных в буфере
Замечания:
* Предварительно поток должен зарезервировать для себя указанный IRQ
функцией 45.
@@ -2053,7 +2067,7 @@ dd 638
все зарезервированные им IRQ.
======================================================================
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
======================================================================
К зарезервированным портам можно обращаться напрямую из приложения
командами in/out (рекомендуемый способ) и вызовом функции 43
@@ -2148,7 +2162,7 @@ dd 638
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* После вызова описываемой функции следует перерисовать экран
* После вызова описываемой функции следует перерисовать экран
подфункцией 0.
* Тип кнопок влияет только на их прорисовку функцией 8.
@@ -2165,7 +2179,7 @@ dd 638
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* После вызова описываемой функции следует перерисовать экран
* После вызова описываемой функции следует перерисовать экран
подфункцией 0.
* Таблица стандартных цветов влияет только на приложения,
которые эту таблицу явным образом получают (подфункцией 3) и
@@ -2204,11 +2218,11 @@ dword-
Замечания:
* Структура таблицы цветов описана в стандартном включаемом файле
macros.inc под названием system_colors; например, можно писать:
sc system_colors ; объявление переменной
... ; где-то надо вызвать
; описываемую функцию с ecx=sc
mov ecx, [sc.work_button_text] ; читаем цвет текста
; на кнопке в рабочей области
sc system_colors ; объявление переменной
... ; где-то надо вызвать
; описываемую функцию с ecx=sc
mov ecx, [sc.work_button_text] ; читаем цвет текста
; на кнопке в рабочей области
* Использование/неиспользование этих цветов - дело исключительно
самой программы. Для использования нужно просто при вызове функций
рисования указывать цвет, взятый из этой таблицы.
@@ -2279,7 +2293,7 @@ dword-
Аналогично по оси y.
* Смотри также функцию 14,
позволяющую определить размеры всего экрана.
* Есть парная функция получения рабочей области -
* Есть парная функция получения рабочей области -
подфункция 5.
* Эта функция автоматически перерисовывает экран, по ходу дела
обновляет координаты и размеры максимизированных окон.
@@ -2403,7 +2417,7 @@ dword-
* иначе eax = TID - идентификатор потока
======================================================================
= Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера.
= Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера.
======================================================================
Параметры:
* eax = 52 - номер функции
@@ -2428,7 +2442,7 @@ dword-
* Локальный IP-адрес устанавливается подфункцией 3.
======================================================================
Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера.
Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера.
======================================================================
Параметры:
* eax = 52 - номер функции
@@ -2597,9 +2611,6 @@ dword-
* Текущая реализация не закрывает автоматически все сокеты потока
при его завершении. В частности, не следует прибивать поток
с кучей открытых сокетов - будет утечка ресурсов.
* Текущая реализация не делает проверок на корректность
(единственное, на что возвращается ошибка, - попытка закрыть
неоткрытый сокет с корректным хэндлом).
======================================================================
============== Функция 53, подфункция 2 - опрос сокета. ==============
@@ -2609,10 +2620,8 @@ dword-
* ebx = 2 - номер подфункции
* ecx = хэндл сокета
Возвращаемое значение:
* eax = число полученных байт
* eax = число полученных байт, 0 для неверного хэндла
* ebx разрушается
Замечания:
* Проверки корректности не делается.
======================================================================
======== Функция 53, подфункция 3 - прочитать байт из сокета. ========
@@ -2622,12 +2631,10 @@ dword-
* ebx = 3 - номер подфункции
* ecx = хэндл сокета
Возвращаемое значение:
* если нет принятых данных: eax=0, bl=0,
прочие байты ebx разрушаются
* если нет принятых данных или указан неверный хэндл:
eax=0, bl=0, прочие байты ebx разрушаются
* если были принятые данные: eax=число оставшихся байт
(возможно, 0), bl=прочитанный байт, прочие байты ebx разрушаются
Замечания:
* Проверки корректности не производится.
======================================================================
========== Функция 53, подфункция 4 - записать в UDP-сокет. ==========
@@ -2639,13 +2646,10 @@ dword-
* edx = число байт для записи
* esi = указатель на данные для записи
Возвращаемое значение:
* eax = 0xffffffff - неверный хэндл
* eax = 0xffff - недостаточно памяти
* eax = 0xffffffff - ошибка (неверный хэндл или недостаточно памяти)
* eax = 0 - успешно
* ebx разрушается
Замечания:
* Проверка на правильность хэндла минимальна - исключаются только
не очень неправильные неоткрытые хэндлы.
* Число байт для записи не может превышать 1500-28, хотя
соответствующей проверки не делается.
@@ -2673,7 +2677,7 @@ dword-
* ebx = 6 - номер подфункции
* ecx = хэндл сокета
Возвращаемое значение:
* eax = статус сокета: одно из
* eax = 0 для неверного сокета или статус: одно из
* TCB_LISTEN = 1
* TCB_SYN_SENT = 2
* TCB_SYN_RECEIVED = 3
@@ -2686,8 +2690,6 @@ dword-
* TCB_TIME_WAIT = 10
* TCB_CLOSED = 11
* ebx разрушается
Замечания:
* Проверок корректности не производится.
======================================================================
========== Функция 53, подфункция 7 - записать в TCP-сокет. ==========
@@ -2699,13 +2701,10 @@ dword-
* edx = число байт для записи
* esi = указатель на данные для записи
Возвращаемое значение:
* eax = 0xffffffff - ошибка
* eax = 0xffff - недостаточно памяти
* eax = 0xffffffff - ошибка (неверный хэндл или недостаточно памяти)
* eax = 0 - успешно
* ebx разрушается
Замечания:
* Проверка на правильность хэндла минимальна - исключаются только
не очень неправильные неоткрытые хэндлы.
* Число байт для записи не может превышать 1500-40,
хотя соответствующей проверки не делается.
@@ -2717,19 +2716,14 @@ dword-
* ebx = 8 - номер подфункции
* ecx = хэндл сокета
Возвращаемое значение:
* eax = -1 - неверный хэндл
* eax = 0xffff - недостаточно памяти для пакета закрытия сокета
* eax = -1 - ошибка (неверный хэндл или
недостаточно памяти для пакета закрытия сокета)
* eax = 0 - успешно
* во многих случаях eax разрушается (возвращается результат функции
queue) - видимо, это баг, который будет исправлен
* ebx разрушается
Замечания:
* Текущая реализация не закрывает автоматически все сокеты потока
при его завершении. В частности, не следует прибивать поток
с кучей открытых сокетов - будет утечка ресурсов.
* Текущая реализация не делает проверок на корректность
(единственное, на что возвращается ошибка, - попытка закрыть
неоткрытый сокет с корректным хэндлом).
======================================================================
== Функция 53, подфункция 9 - проверить, свободен ли локальный порт. =
@@ -2770,13 +2764,11 @@ dword-
* esi = число байт для чтения;
* esi = 0 - читать все данные (максимум 4096 байт)
Возвращаемое значение:
* eax = число прочитанных байт
* eax = число прочитанных байт (0 при неверном хэндле)
* ebx разрушается
Замечания:
* Проверки на правильность хэндла не делается.
======================================================================
Функция 53, подфункция 255 - отладочная информация сетевого драйвера.
Функция 53, подфункция 255 - отладочная информация сетевого драйвера.
======================================================================
Параметры:
* eax = 53 - номер функции
@@ -2807,59 +2799,6 @@ dword-
* 6: статус драйвера пакетов, 0=неактивен,
ненулевое значение=активен
======================================================================
======== Функция 55, подфункция 0 - загрузить данные для SB16. =======
======================================================================
Параметры:
* eax = 55 - номер функции
* ebx = 0 - номер подфункции
* ecx = указатель на данные (копируется 64 килобайта, используется
столько, сколько установлено подфункцией 2)
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* Формат и размер данных устанавливаются подфункцией 2.
======================================================================
==== Функция 55, подфункция 1 - начать проигрывать данные на SB16. ===
======================================================================
Параметры:
* eax = 55 - номер функции
* ebx = 1 - номер подфункции
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* Предварительно данные должны быть загружены подфункцией 0 и
определён их формат подфункцией 2.
* Функция возвращает управление, когда началось проигрывание данных;
после этого проигрывание идёт независимо от приложения (и вообще
не требует загрузки процессора).
* Предварительно должны быть определены базовый порт SB16
(подфункцией 4 функции 21) и канал DMA
(подфункцией 10 функции 21).
======================================================================
====== Функция 55, подфункция 2 - установить формат данных SB16. =====
======================================================================
Параметры:
* eax = 55 - номер функции
* ebx = 2 - номер подфункции
* ecx = 0 - установить разрядность
* edx = 1 - 8бит моно
* edx = 2 - 8бит стерео
* ecx = 1 - установить размер данных
* edx = размер в байтах
* ecx = 2 - установить частоту проигрывания
* edx = частота
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* При загрузке системы устанавливаются следующие параметры
по умолчанию: разрядность - 8 бит моно, размер - 64 Кб,
частота 44100 Гц. Тем не менее рекомендуется явно устанавливать
необходимые значения, поскольку они могли быть переустановлены
какой-нибудь программой.
======================================================================
====================== Функция 55, подфункция 55 =====================
========== Начать проигрывать данные на встроенном спикере. ==========
@@ -3071,8 +3010,8 @@ dword-
* Размер блока - 512 байт; читается один блок.
* Не следует полагаться на возвращаемое значение,
оно может измениться в следующих версиях.
* Требуется, чтобы был разрешён LBA-доступ к устройствам
подфункцией 11 функции 21. Узнать это можно вызовом
* Требуется, чтобы был разрешён LBA-доступ к устройствам
подфункцией 11 функции 21. Узнать это можно вызовом
подфункцией 11 функции 26.
* LBA-чтение дискеты не поддерживается.
* Функция считывает данные физического жёсткого диска;
@@ -3086,7 +3025,7 @@ dword-
это будет считаться успехом (eax=0).
======================================================================
= Функция 58, подфункция 15 - получить информацию о файловой системе.
= Функция 58, подфункция 15 - получить информацию о файловой системе.
======================================================================
Параметры:
* eax = 58 - номер функции
@@ -3183,10 +3122,10 @@ IPC
Программе доступны данные графического экрана (область памяти, которая
собственно и отображает содержимое экрана) напрямую без вызовов
системных функций через селектор gs:
mov eax, [gs:0]
mov eax, [gs:0]
поместит в eax первый dword буфера, содержащий информацию о цвете
левой верхней точки (и, возможно, цвета нескольких следующих).
mov [gs:0], eax
mov [gs:0], eax
при работе в режимах VESA c LFB
установит цвет левой верхней точки
(и возможно, цвета нескольких следующих).
@@ -3418,7 +3357,7 @@ IPC
* ebx = указатель на изображение
* ecx = [размер по оси x]*65536 + [размер по оси y]
* edx = [координата по оси x]*65536 + [координата по оси y]
* esi = число бит на пиксель, должно быть 1, 4, 8, 15, 16, 24 или 32
* esi = число бит на пиксель, должно быть 1,2,4,8,15,16,24 или 32
* edi = указатель на палитру (2 в степени esi цветов 0x00RRGGBB);
игнорируется при esi > 8
* ebp = смещение данных каждой следующей строки изображения
@@ -3428,27 +3367,28 @@ IPC
Замечания:
* Координаты изображения - это координаты верхнего левого угла
изображения относительно окна.
* Размер изображения в байтах есть xsize*ysize.
* Формат изображения с 1 битом на пиксель: каждый байт изображения,
за исключением, быть может, последних байтов строк, содержит
информацию о цвете 8 пикселей, старший бит соответствует первому
пикселю.
* Формат изображения с 2 битами на пиксель: каждый байт изображения,
за исключением, быть может, последних байтов строк, содержит
информацию о цвете 4 пикселей, старшие два бита соответствуют
первому пикселю.
* Формат изображения с 4 битами на пиксель: каждый байт изображения,
за исключением последних байтов строк (если ширина изображения
нечётна), содержит информацию о цвете 2 пикселей, старшая тетрада
соответствует первому пикселю.
* Формат изображения с 8 битами на пиксель: каждый байт изображения
рассматривается как индекс в палитре.
* Если изображение использует не все 256 цветов, а меньше,
размер палитры может быть меньше 256.
* Формат изображения с 15 битами на пиксель: цвет каждого пикселя
кодируется как (в битовом представлении) 0RRRRRGGGGGBBBBB -
по 5 пикселей на каждый цвет.
* Формат изображения с 16 битами на пиксель: цвет каждого пикселя
кодируется как RRRRRGGGGGGBBBBB (схема 5+6+5).
* Формат изображения с 24 битами на пиксель: цвет каждого пикселя
кодируется тремя байтами - последовательно синяя, зелёная,
красная составляющие цвета.
кодируется тремя байтами - последовательно синяя, зелёная, красная
составляющие цвета.
* Формат изображения с 32 битами на пиксель: аналогично 24, только
есть ещё игнорируемый четвёртый байт.
* Вызов функции 7 эквивалентен вызову этой функции с параметрами
@@ -3814,65 +3754,58 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* Содержимое памяти вплоть до наименьшего из старого и нового
размеров сохраняется.
===========================================================================
====== Функция 68, подфункция 22 - открыть именованую область памяти. =====
===========================================================================
Параметры
======================================================================
=== Функция 68, подфункция 22 - открыть именованную область памяти. ==
======================================================================
Параметры:
* eax = 68 - номер функции
* ebx = 22 - номер подфункции
* ecx = имя области. Максимум 32 символа включая завершающий ноль
* ecx = имя области. Максимум 31 символ, включая завершающий ноль
* edx = размер области в байтах для SHM_CREATE и SHM_OPEN_ALWAYS
* esi = флаги открытия и доступа
SHM_OPEN = 0x00
SHM_OPEN_ALWAYS = 0x04
SHM_CREATE = 0x08
SHM_READ = 0x00
SHM_WRITE = 0x01
SHM_CREATE - создать новую область памяти. Если область с
таким именем уже существует функция вернёт код ошибки E_ACCESS
SHM_OPEN_ALWAYS - открывает существующую или создаёт новую
область памяти.
SHM_OPEN - открывает существующую область памяти. Если
область с таким именем не существует функция вернёт код
ошибки E_NOTFOUND.
SHM_READ - доступ только на чтение.
SHM_WRITE - доступ на чтение и запись.
Возвращаемые значения:
* eax = указатель на область памяти или ноль в случае ошибки
* edx = если новая область создаётся SHM_CREATE или SHM_OPEN_ALWAYS
ноль в случае успеха или код ошибки.
если существующая область открывается SHM_OPEN или SHM_OPEN_ALWAYS
размер области в байтах или код ошибки
* esi = флаги открытия и доступа:
* SHM_OPEN = 0x00 - открыть существующую область памяти.
Если область с таким именем не существует,
функция вернёт код ошибки 5.
* SHM_OPEN_ALWAYS = 0x04 - открыть существующую или создать новую
область памяти.
* SHM_CREATE = 0x08 - создать новую область памяти.
Если область с таким именем уже существует,
функция вернёт код ошибки 10.
* SHM_READ = 0x00 - доступ только на чтение
* SHM_WRITE = 0x01 - доступ на чтение и запись
Возвращаемое значение:
* eax = указатель на область памяти, 0 при ошибке
* при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
edx = 0 - успех, иначе - код ошибки
* при открытии существующей области (SHM_OPEN или SHM_OPEN_ALWAYS):
edx = код ошибки (при eax=0) или размер области в байтах
Коды ошибок:
* E_NOTFOUND = 5
* E_ACCESS = 10
* E_NOMEM = 30
* E_PARAM = 33
* E_NOTFOUND = 5
* E_ACCESS = 10
* E_NOMEM = 30
* E_PARAM = 33
Замечания:
* Если создаётся новая область то флаги доступа устанавливают
максимальные права доступа для остальных процессов.
* Родительский процесс всегда имеет доступ на запись.
* Если создаётся новая область, то флаги доступа устанавливают
максимальные права доступа для остальных процессов. Попытка
открытия другим потоком с неразрешёнными правами провалится
с кодом ошибки E_ACCESS.
* Процесс, создавший область, всегда имеет доступ на запись.
===========================================================================
====== Функция 68, подфункция 23 - закрыть именованую область памяти. =====
===========================================================================
Параметры
======================================================================
=== Функция 68, подфункция 23 - закрыть именованную область памяти. ==
======================================================================
Параметры:
* eax = 68 - номер функции
* ebx = 23 - номер подфункции
* ecx = имя области. Максимум 32 символа включая завершающий ноль
* ecx = имя области. Максимум 31 символ, включая завершающий ноль
Возвращаемое значение:
* не определено
* eax разрушается
Замечания:
* Область памяти физически освобождается (с забыванием всех данных
и высвобождением физической памяти), когда её закроют
все открывшие потоки.
* При завершении потока освобождаются все открытые им
области памяти.
======================================================================
======================== Функция 69 - отладка. =======================
@@ -3907,8 +3840,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
Если отладчик этого не хочет, он должен предварительно отключиться
подфункцией 3.
Все подфункции, кроме 4 и 5, применимы только к процессам/потокам,
запущенным из текущего функцией 70 с установленным флагом отладки.
Все подфункции применимы только к процессам/потокам, запущенным
из текущего функцией 70 с установленным флагом отладки.
Отладка многопоточных программ пока не поддерживается.
Полный список подфункций:
* подфункция 0 - определить область данных для отладочных сообщений
@@ -3941,7 +3874,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
и при поступлении нового сообщения система будет ждать.
Для синхронизации обрамляйте всю работу с буфером операциями
блокировки/разблокировки
neg [bufsize]
neg [bufsize]
* Данные в буфере трактуются как массив элементов переменной длины -
сообщений. Формат сообщения указан в общем описании.
@@ -4006,7 +3939,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* Если процесс был приостановлен, он возобновляет выполнение.
======================================================================
=========== Функция 69, подфункция 4 - приостановить поток. ==========
==== Функция 69, подфункция 4 - приостановить отлаживаемый поток. ====
======================================================================
Параметры:
* eax = 69 - номер процесса
@@ -4014,10 +3947,13 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* ecx = идентификатор
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* Процесс должен быть загружен для отладки (как указано в
общем описании).
======================================================================
====================== Функция 69, подфункция 5 ======================
=================== Возобновить выполнение потока. ===================
============ Возобновить выполнение отлаживаемого потока. ============
======================================================================
Параметры:
* eax = 69 - номер функции
@@ -4025,6 +3961,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* ecx = идентификатор
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* Процесс должен быть загружен для отладки (как указано в
общем описании).
======================================================================
====================== Функция 69, подфункция 6 ======================
@@ -4046,7 +3985,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
общем описании).
======================================================================
Функция 69, подфункция 7 - записать в память отлаживаемого процесса.
Функция 69, подфункция 7 - записать в память отлаживаемого процесса.
======================================================================
Параметры:
* eax = 69 - номер функции
+126 -204
View File
@@ -1,4 +1,4 @@
SYSTEM FUNCTIONS of OS Kolibri 0.7.1.0
SYSTEM FUNCTIONS of OS Kolibri 0.7.5.0
Number of the function is located in the register eax.
The call of the system function is executed by "int 0x40" command.
@@ -219,9 +219,6 @@ Remarks:
and does not make any operations at all. If it is really required
to transfer control to the next process (to complete a current
time slice), use subfunction 1 of function 68.
* At current implementation there will be an immediate return from
the function, if the addition of ebx with current value of
time counter will call 32-bit overflow.
======================================================================
============== Function 6 - read the file from ramdisk. ==============
@@ -613,16 +610,20 @@ Parameters:
* eax = 17 - function number
Returned value:
* if the buffer is empty, function returns eax=1
* if the buffer is not empty, function returns:
high 24 bits of eax contain button identifier (in particular, ah
contains low byte of the identifier; if all buttons have
the identifier less than 256, ah is enough to distinguish),
and al contain 0 - if used left mouse button or bit of the used another mouse button
* if the buffer is not empty:
* high 24 bits of eax contain button identifier (in particular,
ah contains low byte of the identifier; if all buttons have
the identifier less than 256, ah is enough to distinguish)
* al = 0 - the button was pressed with left mouse button
* al = bit corresponding to used mouse button otherwise
Remarks:
* "Buffer" keeps only one button, at pressing the new button the
information about old is lost.
* The call of this function by an application with inactive window
will return answer "buffer is empty".
* Returned value for al corresponds to the state of mouse buttons
as in subfunction 2 of function 37 at the beginning
of button press, excluding lower bit, which is cleared.
======================================================================
= Function 18, subfunction 2 - terminate process/thread by the slot. =
@@ -731,7 +732,7 @@ Returned value:
* function does not return value
======================================================================
============ Function 18, subfunction 9 - system shutdown. ===========
== Function 18, subfunction 9 - system shutdown with the parameter. ==
======================================================================
Parameters:
* eax = 18 - function number
@@ -747,8 +748,7 @@ Returned value:
Remarks:
* Do not rely on returned value by incorrect call, it can be
changed in future versions of the kernel.
* It is possible to use subfunction 1, that on the last step
the user makes choice himself.
======================================================================
===== Function 18, subfunction 10 - minimize application window. =====
======================================================================
@@ -1126,11 +1126,6 @@ Remarks:
* CD base is used by function 24.
* To get CD base use subfunction 3 of function 26.
======================================================================
====== Function 21, subfunction 4 - set Sound Blaster base port. =====
======================================================================
Removed
======================================================================
========== Function 21, subfunction 5 - set system language. =========
======================================================================
@@ -1191,11 +1186,6 @@ Remarks:
subfunction 11 of function 18.
* It is also necessary to define used HD base by subfunction 7.
======================================================================
======== Function 21, subfunction 10 - set sound DMA channel. ========
======================================================================
Removed
======================================================================
Function 21, subfunction 11 - enable/disable low-level access to HD.
======================================================================
@@ -1483,11 +1473,6 @@ Remarks:
* The function is supported only for ATAPI devices (CD and DVD).
* An example of usage of the function is the application CD_tray.
======================================================================
=================== Function 25 - set SBPro volume. ==================
======================================================================
Removed
======================================================================
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
======================================================================
@@ -1547,11 +1532,6 @@ Remarks:
* CD base is used by function 24.
* To set CD base use subfunction 3 of function 21.
======================================================================
====== Function 26, subfunction 4 - get Sound Blaster base port. =====
======================================================================
Removed
======================================================================
========== Function 26, subfunction 5 - get system language. =========
======================================================================
@@ -1614,11 +1594,6 @@ Remarks:
than 497 days.
* To get system time use function 3.
======================================================================
======== Function 26, subfunction 10 - get sound DMA channel. ========
======================================================================
Removed
======================================================================
===================== Function 26, subfunction 11 ====================
========== Find out whether low-level HD access is enabled. ==========
@@ -1646,11 +1621,6 @@ Remarks:
* The current implementation uses only low bit of ecx.
* To set the current state use subfunction 12 of function 21.
======================================================================
=================== Function 28 - set SB16 volume. ===================
======================================================================
Removed
======================================================================
=================== Function 29 - get system date. ===================
======================================================================
@@ -1689,6 +1659,56 @@ Remarks:
* If the buffer is too small to hold all data, only first (edx-1)
bytes are copied and than terminating 0 is inserted.
======================================================================
=============== Function 32 - delete file from ramdisk. ==============
======================================================================
Parameters:
* eax = 32 - function number
* ebx = pointer to the filename
Returned value:
* eax = 0 - success; otherwise file system error code
Remarks:
* This function is obsolete; function 58 allows to fulfill
the same operations with the extended possibilities.
* The current implementation returns only values 0(success) and
5(file not found).
* The filename must be either in the format 8+3 characters
(first 8 characters - name itself, last 3 - extension,
the short names and extensions are supplemented with spaces),
or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
(name no more than 8 characters, dot, extension 3 characters
supplemented if necessary by spaces).
The filename must be written with capital letters. The terminating
character with code 0 is not necessary (not ASCIIZ-string).
* This function does not support folders on the ramdisk.
======================================================================
================ Function 33 - write file to ramdisk. ================
======================================================================
Parameters:
* eax = 33 - function number
* ebx = pointer to the filename
* ecx = pointer to data for writing
* edx = number of bytes for writing
* should be set esi=0
Returned value:
* eax = 0 - success, otherwise file system error code
Remarks:
* This function is obsolete; function 70 allows to fulfil
the same operations with extended possibilities.
* If esi contains non-zero value and selected file already exists,
one more file with the same name will be created.
* Otherwise file will be overwritten.
* The filename must be either in the format 8+3 characters
(first 8 characters - name itself, last 3 - extension,
the short names and extensions are supplemented with spaces),
or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
(name no more than 8 characters, dot, extension 3 characters
supplemented if necessary by spaces).
The filename must be written with capital letters. The terminating
character with code 0 is not necessary (not ASCIIZ-string).
* This function does not support folders on the ramdisk.
======================================================================
======= Function 35 - read the color of a pixel on the screen. =======
======================================================================
@@ -1707,12 +1727,12 @@ Remarks:
the current videomode, use function 61.
======================================================================
=============== Function 36 - read screen area. ===============
=================== Function 36 - read screen area. ==================
======================================================================
Paramters:
* eax = 36 - function number
* ebx = pointer on the previously allocated area of memory,
where will be placed the image in the format BBGGRRBBGGRR...
* ebx = pointer to the previously allocated memory area,
where will be placed the image in the format BBGGRRBBGGRR...
* ecx = [size on axis x]*65536 + [size on axis y]
* edx = [coordinate on axis x]*65536 + [coordinate on axis y]
Returned value:
@@ -1915,45 +1935,36 @@ Returned value:
* eax = -1 for incorrect ebx
======================================================================
==================== Function 42 - work with IRQ data. ===============
================== Function 42 - work with IRQ data. =================
======================================================================
------------------------ Reading data --------------------------------
When an IRQ occurs, the system reads data from ports indicated
earlier by function 44 and writes this data to
internal buffer. This function reads out data from that buffer
to the buffer specified as parameter.
internal buffer. This function reads out data from that buffer.
--------------------- Subfunction 0 - read data ----------------------
Parameters:
* eax = 42 - function number
* bl = IRQ number, 0..15
* bh = subfunction number, 0
Other part of register ebx, must be zero.
* ecx = pointer to the receive buffer
* bh = 0 - subfunction number
* rest of ebx must be zeroed
* ecx = pointer to a buffer with size not less than 4000 bytes
Returned value: (use value of eax to distinguish)
* if the thread is not IRQ owner (or IRQ number is incorrect):
* eax = -1
* if there is no data:
* eax = 0
* if the thread is not IRQ owner
(or IRQ number is incorrect): eax = -1
* if there is no data: eax = 0
* if all is ok:
* eax = byte size of data, read from buffer
See remarks below.
------------------------ Get data size -------------------------------
eax = size of data read (in bytes)
------------- Subfunction 1 - get size of data in buffer -------------
Parameters:
* eax = 42 - function number
* bl = IRQ number, 0..15
* bh = subfunction number, 0
Other part of register ebx, must be zero.
* ecx = pointer to receive buffer
Returned value: (use value of eax to distinguish)
* if the thread is not IRQ owner (or IRQ number is incorrect):
* eax = -1
* if all is ok:
* eax = byte size of data in buffer
* bh = 0 - subfunction number
* rest of ebx must be zeroed
Returned value:
* if the thread is not IRQ owner
(or IRQ number is incorrect): eax = -1
* otherwise eax = size of data in buffer
Remarks:
* Previously the thread must reserve indicated IRQ for itself
by function 45.
@@ -2578,9 +2589,6 @@ Remarks:
sockets of a thread at termination. In particular, one should not
kill a thread with many opened sockets - there will be an outflow
of resources.
* The current implementation does no checks on correctness
(function returns error only if thread tries to close not opened
socket with correct handle).
======================================================================
============== Function 53, subfunction 2 - poll socket. =============
@@ -2590,10 +2598,8 @@ Parameters:
* ebx = 2 - subfunction number
* ecx = socket handle
Returned value:
* eax = number of read bytes
* eax = number of read bytes, 0 for incorrect handle
* ebx destroyed
Remarks:
* There is no checks for correctness.
======================================================================
========= Function 53, subfunction 3 - read byte from socket. ========
@@ -2603,12 +2609,10 @@ Parameters:
* ebx = 3 - subfunction number
* ecx = socket handle
Returned value:
* if there is no read data: eax=0, bl=0,
* if there is no read data or handle is incorrect: eax=0, bl=0,
other bytes of ebx are destroyed
* if there are read data: eax=number of rest bytes
(possibly 0), bl=read byte, other bytes of ebx are destroyed
Remarks:
* There is no checks for correctness.
======================================================================
========== Function 53, subfunction 4 - write to UDP-socket. =========
@@ -2620,13 +2624,10 @@ Parameters:
* edx = number of bytes to write
* esi = pointer to data to write
Returned value:
* eax = 0xffffffff - invalid handle
* eax = 0xffff - not enough memory
* eax = 0xffffffff - error (invalid handle or not enough memory)
* eax = 0 - success
* ebx destroyed
Remarks:
* Check on validity of handle is minimal - only not very incorrect
not opened handles are eliminated.
* Number of bytes to write must not exceed 1500-28, though
the appropriate check is not made.
@@ -2654,7 +2655,7 @@ Parameters:
* ebx = 6 - subfunction number
* ecx = socket handle
Returned value:
* eax = socket status: one of
* eax = 0 for incorrect handle or socket status: one of
* TCB_LISTEN = 1
* TCB_SYN_SENT = 2
* TCB_SYN_RECEIVED = 3
@@ -2666,9 +2667,7 @@ Returned value:
* TCB_LAST_ASK = 9
* TCB_TIME_WAIT = 10
* TCB_CLOSED = 11
* ebx destroys
Remarks:
* There is no checks for correctness.
* ebx destroyed
======================================================================
========== Function 53, subfunction 7 - write to TCP-socket. =========
@@ -2680,13 +2679,10 @@ Parameters:
* edx = number of bytes to write
* esi = pointer to data to write
Returned value:
* eax = 0xffffffff - error
* eax = 0xffff - not enough memory
* eax = 0xffffffff - error (invalid handle or not enough memory)
* eax = 0 - success
* ebx destroyed
Remarks:
* Check on validity of handle is minimal - only not very incorrect
not opened handles are eliminated.
* Number of bytes to write must not exceed 1500-40, though
the appropriate check is not made.
@@ -2698,20 +2694,15 @@ Parameters:
* ebx = 8 - subfunction number
* ecx = socket handle
Returned value:
* eax = -1 - invalid handle
* eax = 0xffff - not enough memory for socket close packet
* eax = -1 - error (invalid handle or
not enough memory for socket close packet)
* eax = 0 - success
* in many cases eax is destroyed (the result of function 'queue'
is returned) - probably this is bug, which will be corrected
* ebx destroyed
Remarks:
* The current implementation does not close automatically all
sockets of a thread at termination. In particular, one should not
kill a thread with many opened sockets - there will be an outflow
of resources.
* The current implementation does no checks on correctness
(function returns error only if thread tries to close not opened
socket with correct handle).
======================================================================
=== Function 53, subfunction 9 - check whether local port is free. ===
@@ -2752,10 +2743,8 @@ Paramters:
* esi = number of bytes to read;
* esi = 0 - read all data (maximum 4096 bytes)
Returned value:
* eax = number of bytes read
* eax = number of bytes read (0 for incorrect handle)
* ebx destroyed
Remakrs:
* There is no check on handle correctness.
======================================================================
= Function 53, subfunction 255 - debug information of network driver.
@@ -2788,58 +2777,6 @@ Possible values for ecx:
* 5: total number of received ARP-packets
* 6: status of packet driver, 0=inactive, nonzero=active
======================================================================
========== Function 55, subfunction 0 - load data for SB16. ==========
======================================================================
Parameters:
* eax = 55 - function number
* ebx = 0 - subfunction number
* ecx = pointer to data (is copied 64 kilobytes, is used as much as
set by subfunction 2)
Returned value:
* function does not return value
Remarks:
* Format and size of data are set by subfunction 2.
======================================================================
======== Function 55, subfunction 1 - begin play data on SB16. =======
======================================================================
Parameters:
* eax = 55 - function number
* ebx = 1 - subfunction number
Returned value:
* function does not return value
Remarks:
* Previously data must be loaded by subfunction 0 and
their format must be defined by subfunction 2.
* Function returns control, when playing of data began; after that
play goes independently from application (and does not use
processor time at all).
* Previously must be defined SB16 base port
(by subfunction 4 of function 21) and DMA channel
(by subfunction 10 of function 21).
======================================================================
======== Function 55, subfunction 2 - set format of SB16 data. =======
======================================================================
Parameters:
* eax = 55 - function number
* ebx = 2 - subfunction number
* ecx = 0 - set digit capacity
* edx = 1 - 8bit mono
* edx = 2 - 8bit stereo
* ecx = 1 - set data size
* edx = size in bytes
* ecx = 2 - set play frequency
* edx = frequency
Returned value:
* function does not return value
Remarks:
* When the system boots, it sets following default parameters:
digit capacity - 8bit mono, size - 64 Kb, frequency - 44100 Hz.
Nevertheless it is recommended to set necessary values obviously
as they could be reset by some application.
======================================================================
Function 55, subfunction 55 - begin to play data on built-in speaker.
======================================================================
@@ -3391,19 +3328,36 @@ Parameters:
* ebx = pointer to the image
* ecx = [size on axis x]*65536 + [size on axis y]
* edx = [coordinate on axis x]*65536 + [coordinate on axis y]
* esi = number of bits per pixel, must be 8, 24 or 32
* edi = pointer to palette (256 colors 0x00RRGGBB);
ignored when esi = 24 and 32
* esi = number of bits per pixel, must be 1,2,4,8,15,16,24 or 32
* edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
ignored when esi > 8
* ebp = offset of next row data relative to previous row data
Returned value:
* function does not return value
Remarks:
* Coordinates of the image are coordinates of the upper left corner
of the image relative to the window.
* Size of the image in bytes is xsize*ysize.
* Each byte of image is index in the palette.
* If the image uses less than 256 colors, palette size may be
less than 256 too.
* Format of image with 1 bit per pixel: each byte of image
(possibly excluding last bytes in rows), contains information on
the color of 8 pixels, MSB corresponds to first pixel.
* Format of image with 2 bits per pixel: each byte of image
(possibly excluding last bytes in rows), contains information on
the color of 4 pixels, two MSBs correspond to first pixel.
* Format of image with 4 bits per pixel: each byte of image
excluding last bytes in rows (if width is odd) contains
information on the color of 2 pixels, high-order tetrad
corresponds to first pixel.
* Format of image with 8 bits per pixel: each byte of image is
index in the palette.
* Format of image with 15 bits per pixel: the color of each pixel
is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
each color.
* Format of image with 16 bits per pixel: the color of each pixel
is coded as RRRRRGGGGGGBBBBB (5+6+5).
* Format of image with 24 bits per pixel: the color of each pixel
is coded as 3 bytes - sequentially blue, green, red components.
* Format of image with 32 bits per pixel: similar to 24, but
one additional ignored byte is present.
* The call to function 7 is equivalent to call to this function
with esi=24, ebp=0.
@@ -3769,43 +3723,6 @@ Remarks:
* The contents of the block are unchanged up to the shorter of
the new and old sizes.
======================================================================
======= Function 68, subfunction 22 - open memory block. =======
======================================================================
Parameters:
* eax = 68 - function number
* ebx = 22 - subfunction number
* ecx = pointer to already allocated block (max 32 symbols)
* edx = block's size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
* esi = flags for opening and getting access
SHM_OPEN = 0x00
SHM_OPEN_ALWAYS = 0x04
SHM_CREATE = 0x08
SHM_READ = 0x00
SHM_WRITE = 0x01
Returned value:
* eax = pointer to the readed block, 0 = error
* edx = if SHM_CREATE, SHM_OPEN, or SHM_OPEN_ALWAYS active
Error codes:
* E_NOTFOUND = 5
* E_ACCESS = 10
* E_NOMEM = 30
* E_PARAM = 33
Remarks:
*
*
======================================================================
======= Function 68, subfunction 22 - close memory block. =======
======================================================================
Parameters:
* eax = 68 - function number
* ebx = 23 - subfunction number
* ecx = pointer to already allocated block (max 32 symbols)
Returned value:
* not defined
======================================================================
====================== Fucntion 69 - debugging. ======================
======================================================================
@@ -3837,9 +3754,8 @@ When debugger terminates, all debugged processes are killed.
If debugger does not want this, it must previously detach by
subfunction 3.
All subfunctions except 4 and 5 are applicable only to
processes/threads started from the current by function 70
with set debugging flag.
All subfunctions are applicable only to processes/threads started
from the current by function 70 with set debugging flag.
Debugging of multithreaded programs is not supported yet.
The full list of subfunctions:
* subfunction 0 - define data area for debug messages
@@ -3937,7 +3853,7 @@ Remarks:
* If the process was suspended, it resumes execution.
======================================================================
============= Function 69, subfunction 4 - suspend thread. ===========
======== Function 69, subfunction 4 - suspend debugged thread. =======
======================================================================
Parameters:
* eax = 69 - function number
@@ -3945,9 +3861,12 @@ Parameters:
* ecx = thread identifier
Returned value:
* function does not return value
Remarks:
* Process must be loaded for debugging (as is shown in
general description).
======================================================================
============= Function 69, subfunction 5 - resume thread. ============
======== Function 69, subfunction 5 - resume debugged thread. ========
======================================================================
Parameters:
* eax = 69 - function number
@@ -3955,6 +3874,9 @@ Parameters:
* ecx = thread identifier
Returned value:
* function does not return value
Remarks:
* Process must be loaded for debugging (as is shown in
general description).
======================================================================
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
+5 -3
View File
@@ -113,7 +113,7 @@ use16
org 0x0
jmp start_of_code
version db 'Kolibri OS version 0.7.1.0 ',13,10,13,10,0
version db 'Kolibri OS version 0.7.5.0 ',13,10,13,10,0
include "boot/bootstr.inc" ; language-independent boot messages
include "boot/preboot.inc"
@@ -2186,7 +2186,7 @@ endg
iglobal
version_inf:
db 0,7,1,0 ; version 0.7.1.0
db 0,7,5,0 ; version 0.7.5.0
db UID_KOLIBRI
dd __REV__
version_end:
@@ -4297,7 +4297,9 @@ putimage_init8bpp:
align 16
putimage_get24bpp:
mov eax, [esi]
movzx eax, byte [esi+2]
shl eax, 16
mov ax, [esi]
add esi, 3
ret 4
align 16