diff --git a/kernel/trunk/boot/bootcode.inc b/kernel/trunk/boot/bootcode.inc index 21ce6e483c..2cc465634b 100644 --- a/kernel/trunk/boot/bootcode.inc +++ b/kernel/trunk/boot/bootcode.inc @@ -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 diff --git a/kernel/trunk/core/dll.inc b/kernel/trunk/core/dll.inc index 8e069a6e5b..5e5d7b689a 100644 --- a/kernel/trunk/core/dll.inc +++ b/kernel/trunk/core/dll.inc @@ -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: diff --git a/kernel/trunk/data32.inc b/kernel/trunk/data32.inc index d9d5130593..e7fc0f8697 100644 --- a/kernel/trunk/data32.inc +++ b/kernel/trunk/data32.inc @@ -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 diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 5a6124a796..ea7edee3bc 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -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 - номер функции diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 918abdb19b..5d548b3690 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -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. = diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index b742a0c9cb..3646929a2d 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -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