diff --git a/kernel/trunk/boot/bootcode.inc b/kernel/trunk/boot/bootcode.inc index d186b6e429..af8a59eefd 100644 --- a/kernel/trunk/boot/bootcode.inc +++ b/kernel/trunk/boot/bootcode.inc @@ -381,11 +381,9 @@ cfgmanager: @@: mov [di], al .preboot_gr_end: - cmp [di+preboot_dma-preboot_graph], 0 - jnz @f - mov [di+preboot_dma-preboot_graph], 3 ; DMA: defaults to none -@@: -; following 4 lines set variables to 1 if its current value is 0 +; following 6 lines set variables to 1 if its current value is 0 + cmp [di+preboot_dma-preboot_graph], 1 + adc [di+preboot_dma-preboot_graph], 0 cmp [di+preboot_vrrm-preboot_graph], 1 adc [di+preboot_vrrm-preboot_graph], 0 cmp [di+preboot_device-preboot_graph], 1 diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 2615d24e28..c4e6e30986 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -1,4 +1,4 @@ -СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.0.0 +СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.1.0 Номер функции помещается в регистр eax. Вызов системной функции осуществляется командой "int 0x40". @@ -22,14 +22,14 @@ * Y=1 - только определить область окна, ничего не рисовать * Y=2 - тип II - окно изменяемых размеров * Y=3 - окно со скином - * Y=4 - окно со скином и фиксированными размерами - * остальные возможные значения (от 4 до 15) зарезервированы, + * Y=4 - окно со скином фиксированных размеров + * остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими Y игнорируется * RR, GG, BB = соответственно красная, зеленая, синяя составляющие цвета рабочей области окна (игнорируется для стиля Y=2) * X = DCBA (биты) - * A = 1 - у окна есть заголовок; для стиля Y=3 адрес строки + * A = 1 - у окна есть заголовок; для стилей Y=3,4 адрес строки заголовка задаётся в edi, для прочих стилей используется подфункция 1 функции 71 * B = 1 - координаты всех графических примитивов задаются @@ -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 зарезервированы @@ -53,7 +53,7 @@ этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте 67-ю функцию. - * Для окон стиля Y=3 с заголовком (A=1) строка заголовка + * Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка устанавливается при первом вызове этой функции и игнорируется при последующих (точнее говоря, игнорируется после вызова подфункции 2 функции 12 - конца перерисовки); @@ -67,7 +67,7 @@ координата (или, возможно, обе) считается нулем, а если и это не помогает, то соответствующий размер (или, возможно, оба) устанавливается в размер экрана. - + Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые в ebx,ecx. Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0,0), координаты @@ -675,7 +675,7 @@ * Узнать, какое окно является активным, можно вызовом подфункции 7. ====================================================================== - Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. + Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. ====================================================================== Под пустыми тактами понимается время, в которое процессор простаивает в ожидании прерывания (в инструкции hlt). @@ -696,7 +696,7 @@ * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц) ====================================================================== - Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. + Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. ====================================================================== Параметры: * eax = 18 - номер функции @@ -786,7 +786,7 @@ Замечания: * Минимизированное окно с точки зрения функции 9 сохраняет положение и размеры. - * Восстановление окна приложения происходит при активизировании + * Восстановление окна приложения происходит при активизировании подфункцией 3. * Обычно нет необходимости явно сворачивать/разворачивать своё окно: сворачивание окна осуществляется системой при нажатии на кнопку @@ -869,10 +869,10 @@ db a,b,c,d для версии a.b.c.d db UID_xxx: одно из UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 dd REV - номер svn-ревизии ядра -Для ядра Kolibri 0.7.0.0: -db 0,7,0,0 +Для ядра Kolibri 0.7.1.0: +db 0,7,1,0 db 2 -dd 533 +dd 638 ====================================================================== ====================== Функция 18, подфункция 14 ===================== @@ -981,21 +981,20 @@ dd 533 Возвращаемое значение: * функция не возвращает значения --------- Подподфункция 5 - эмуляция кнопок мыши. -------- +------- Подподфункция 5 - симулировать состояние клавиш мыши. -------- Параметры: * eax = 18 - номер функции * ebx = 19 - номер подфункции * ecx = 5 - номер подподфункции - * edx = информация о эмулируемых кнопках мыши: - * бит 0 установлен = левая кнопка нажата - * бит 1 установлен = правая кнопка нажата - * бит 2 установлен = средняя кнопка нажата - * бит 3 установлен = 4-я кнопка нажата - * бит 4 установлен = 5-я кнопка нажата - * прочие биты сброшены + * edx = информация о эмулируемом состоянии кнопок мыши: + (соответствует возвращаемому значению подфункции 2 функции 37) + * бит 0 установлен = левая кнопка нажата + * бит 1 установлен = правая кнопка нажата + * бит 2 установлен = средняя кнопка нажата + * бит 3 установлен = 4-я кнопка нажата + * бит 4 установлен = 5-я кнопка нажата Возвращаемое значение: * функция не возвращает значения - Замечания: * Рекомендуемая скорость мыши (в подподфункции 1) от 1 до 9. Устанавливаемая величина не проверяется кодом ядра, поэтому @@ -1039,34 +1038,35 @@ dd 533 ====================================================================== ====================== Функция 18, подфункция 21 ===================== -==== Получить номера слота процесса/потока по его идентификатору ===== +======= Получить номер слота процесса/потока по идентификатору. ====== ====================================================================== Параметры: * eax = 18 - номер функции * ebx = 21 - номер подфункции - * ecx = PID/TID (идентификатор процесса/потока) + * ecx = идентификатор процесса/потока (PID/TID) Возвращаемое значение: - * eax = номер слота потока если он существует или 0, если PID/TID - ложный. + * eax = 0 - ошибка (неверный идентификатор) + * иначе eax = номер слота ====================================================================== -====================== Функция 18, подфункция 22 ===================== -=========== Минимизация/восстановление окна процесса/потока ========== + Функция 18, подфункция 22 - операции с окном другого процесса/потока. ====================================================================== Параметры: * eax = 18 - номер функции * ebx = 22 - номер подфункции - * ecx = Тип операции - 0 - минимизация окна (сворачивание на панель) по номеру - слота потока - 1 - минимизация окна по идентификатору PID/TID - 2 - Восстановление минимизированного окна по слоту потока - 3 - Восстановление минимизированного окна по идентификатору - PID/TID - * edx = Параметр операции (Номер слота или PID/TID) + * ecx = тип операции: + * 0 = минимизация окна, поток задан номером слота + * 1 = минимизация окна, поток задан идентификатором + * 2 = восстановление окна, поток задан номером слота + * 3 = восстановление окна, поток задан идентификатором + * edx = параметр операции (номер слота или PID/TID) Возвращаемое значение: - * eax = 0 - успешное завершение - eax = -1 - ошибка + * eax = 0 - успешно + * eax = -1 - ошибка (неправильный параметр) +Замечания: + * Поток может свернуть своё окно вызовом подфункции 10. + * Восстановление окна с одновременной активизацией осуществляется + подфункции 3 (принимающей номер слота). ====================================================================== ==================== Функция 20 - интерфейс MIDI. ==================== @@ -1086,7 +1086,7 @@ dd 533 * eax = 0 - успешно * eax = 1 - не определён базовый порт Замечания: - * Предварительно должен быть определён базовый порт вызовом + * Предварительно должен быть определён базовый порт вызовом подфункции 1 функции 21. ====================================================================== @@ -1102,7 +1102,7 @@ dd 533 Замечания: * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF. * Установка базы нужна для работы функции 20. - * Получить установленный базовый порт можно вызовом + * Получить установленный базовый порт можно вызовом подфункции 1 функции 26. ====================================================================== @@ -1132,7 +1132,7 @@ dd 533 нормальная раскладка, после чего из кода вычитается 0x60; если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка. - * Получить раскладки и идентификатор страны можно с помощью + * Получить раскладки и идентификатор страны можно с помощью подфункции 2 функции 26. * Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает @@ -1150,7 +1150,7 @@ dd 533 * eax = 0 Замечания: * База CD используется функцией 24. - * Получить установленную базу CD можно вызовом + * Получить установленную базу CD можно вызовом подфункции 3 функции 26. ====================================================================== @@ -1166,7 +1166,7 @@ dd 533 Замечания: * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF. * Установка базы нужна для работы функций 25, 28, 55. - * Получить установленный базовый порт можно вызовом + * Получить установленный базовый порт можно вызовом подфункции 4 функции 26. ====================================================================== @@ -1204,7 +1204,7 @@ dd 533 * Не следует изменять базу, когда какое-нибудь приложение работает с жёстким диском. Если не хотите глюков системы. * Получить установленную базу можно вызовом подфункции 7 функции 26. - * Следует также определить используемый раздел жёсткого диска + * Следует также определить используемый раздел жёсткого диска подфункцией 8. ====================================================================== @@ -1227,9 +1227,9 @@ dd 533 * Получить установленный раздел можно вызовом подфункции 8 функции 26. * Проверок на корректность не делается. - * Узнать число разделов на жёстком диске можно вызовом + * Узнать число разделов на жёстком диске можно вызовом подфункции 11 функции 18. - * Следует также определить используемую базу жёсткого диска + * Следует также определить используемую базу жёсткого диска подфункцией 7. ====================================================================== @@ -1245,7 +1245,7 @@ dd 533 Замечания: * Номер канала DMA используется в подфункции 1 функции 55. - * Получить канал DMA для звука можно вызовом + * Получить канал DMA для звука можно вызовом подфункции 10 функции 26. ====================================================================== @@ -1331,13 +1331,13 @@ dd 533 * ebx = частота вертикальной развёртки (в Гц) * ecx = номер текущего видеорежима Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Если нужны только размеры экрана, целесообразней использовать функцию 14 с учётом того, что она возвращает размеры на 1 меньше. ====================================================================== -= Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. += Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. ====================================================================== Параметры: * eax = 21 - номер функции @@ -1350,7 +1350,7 @@ dd 533 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Номер видеорежима и частота должны быть в таблице, возвращаемой функцией драйвера 1. @@ -1369,7 +1369,7 @@ dd 533 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. ====================================================================== @@ -1389,7 +1389,7 @@ dd 533 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Функция влияет только на физический размер изображения на мониторе; логический размер (число пикселей) не меняется. @@ -1470,7 +1470,7 @@ dd 533 * eax = 0 - успешно * eax = 1 - не определена база CD Замечания: - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. * В секунде 75 фреймов, в минуте 60 секунд. * Функция асинхронна (возвращает управление, когда началось @@ -1491,7 +1491,7 @@ dd 533 * Формат таблицы с информацией о дорожках такой же, как и для ATAPI-CD команды 43h (READ TOC), обычной таблицы (подкоманда 00h). Адреса возвращаются в формате MSF. - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. * Функция возвращает информацию только о не более чем 100 первых дорожках. В большинстве случаев этого достаточно. @@ -1506,35 +1506,39 @@ dd 533 * eax = 0 - успешно * eax = 1 - не определена база CD Замечания: - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. ====================================================================== -========== Функция 24, подфункция 4 - извлечь лоток привода диска. ============ +======= Функция 24, подфункция 4 - извлечь лоток привода диска. ====== ====================================================================== Параметры: * eax = 24 - номер функции * ebx = 4 - номер подфункции - * ecx = номер CD/DVD-диска (от 0=Primary Master до 3=Secondary Slave) + * ecx = номер CD/DVD-диска + (от 0=Primary Master до 3=Secondary Slave) Возвращаемое значение: - * Ничего не возвращается. + * функция не возвращает значения Замечания: - * Функция поддерживается только для ATAPI устройств (CD и DVD). - * При извлечении лотка производится разблокировка ручного управления механизмом лотка. - * При извлечении лотка код производит очистку кэша соответствующего устройства. + * Функция поддерживается только для ATAPI-устройств (CD и DVD). + * При извлечении лотка производится разблокировка ручного управления + механизмом лотка. + * При извлечении лотка код производит очистку кэша соответствующего + устройства. * Примером использования функции является приложение CD_tray. ====================================================================== -========== Функция 24, подфункция 5 - загрузить лоток привода диска. =========== +====== Функция 24, подфункция 5 - загрузить лоток привода диска. ===== ====================================================================== Параметры: * eax = 24 - номер функции * ebx = 5 - номер подфункции - * ecx = номер CD/DVD-диска (от 0=Primary Master до 3=Secondary Slave) + * ecx = номер CD/DVD-диска + (от 0=Primary Master до 3=Secondary Slave) Возвращаемое значение: - * Ничего не возвращается. + * функция не возвращает значения Замечания: - * Функция поддерживается только для ATAPI устройств (CD и DVD) + * Функция поддерживается только для ATAPI-устройств (CD и DVD). * Примером использования функции является приложение CD_tray. ====================================================================== @@ -1552,7 +1556,7 @@ dd 533 * eax = 1 - не определена база SB * eax = 2 - неверная подфункция Замечания: - * Предварительно нужно определить базовый порт SB вызовом + * Предварительно нужно определить базовый порт SB вызовом подфункции 4 функции 21. * Смотри также функцию 28 установки звука для более позднего стандарта SB16. @@ -1566,7 +1570,7 @@ dd 533 Возвращаемое значение: * eax = номер порта Замечания: - * Установить базовый порт можно вызовом + * Установить базовый порт можно вызовом подфункции 1 функции 21. ====================================================================== @@ -1599,7 +1603,7 @@ dd 533 нормальная раскладка, после чего из кода вычитается 0x60; если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка. - * Установить раскладки и идентификатор страны можно с помощью + * Установить раскладки и идентификатор страны можно с помощью подфункции 2 функции 21. * Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает @@ -1719,7 +1723,7 @@ dd 533 * eax = 0/1 - запрещён/разрешён Замечания: * Используется при LBA-чтении (подфункция 8 функции 58). - * Установить текущее состояние можно вызовом + * Установить текущее состояние можно вызовом подфункции 11 функции 21. ====================================================================== @@ -1734,7 +1738,7 @@ dd 533 Замечания: * Используется при работе с шиной PCI (функция 62). * Текущая реализация использует только младший бит ecx. - * Установить текущее состояние можно вызовом + * Установить текущее состояние можно вызовом подфункции 12 функции 21. ====================================================================== @@ -1751,7 +1755,7 @@ dd 533 * eax = 1 - не определена база SB * eax = 2 - неверная подфункция Замечания: - * Предварительно нужно определить базовый порт SB вызовом + * Предварительно нужно определить базовый порт SB вызовом подфункции 4 функции 21. * Эта функция предоставляет больше вариантов для громкости, чем функция 25. @@ -1988,7 +1992,7 @@ dd 533 Возвращаемое значение: * eax = [ширина]*65536 + [высота] Замечания: - * Есть парная команда установки размеров фонового изображения - + * Есть парная команда установки размеров фонового изображения - подфункция 1 функции 15. После которой, разумеется, следует заново определить само изображение. @@ -2007,7 +2011,7 @@ dd 533 * Не следует полагаться на возвращаемое значение в случае неверного смещения, оно может измениться в следующих версиях ядра. * Смещение точки с координатами (x,y) вычисляется как (x+y*xsize)*3. - * Есть парная функция установки точки на фоновом изображении - + * Есть парная функция установки точки на фоновом изображении - подфункция 2 функции 15. ====================================================================== @@ -2020,7 +2024,7 @@ dd 533 * eax = 1 - замостить * eax = 2 - растянуть Замечания: - * Есть парная функция установки режима отрисовки фона - + * Есть парная функция установки режима отрисовки фона - подфункция 4 функции 15. ====================================================================== @@ -2154,7 +2158,7 @@ dd 533 все зарезервированные им IRQ. ====================================================================== -= Функция 46 - зарезервировать/освободить группу портов ввода/вывода. += Функция 46 - зарезервировать/освободить группу портов ввода/вывода. ====================================================================== К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 @@ -2246,7 +2250,7 @@ dd 533 Возвращаемое значение: * функция не возвращает значения Замечания: - * После вызова описываемой функции следует перерисовать экран + * После вызова описываемой функции следует перерисовать экран подфункцией 0. * Тип кнопок влияет только на их прорисовку функцией 8. @@ -2263,7 +2267,7 @@ dd 533 Возвращаемое значение: * функция не возвращает значения Замечания: - * После вызова описываемой функции следует перерисовать экран + * После вызова описываемой функции следует перерисовать экран подфункцией 0. * Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и @@ -2377,7 +2381,7 @@ dword- Аналогично по оси y. * Смотри также функцию 14, позволяющую определить размеры всего экрана. - * Есть парная функция получения рабочей области - + * Есть парная функция получения рабочей области - подфункция 5. * Эта функция автоматически перерисовывает экран, по ходу дела обновляет координаты и размеры максимизированных окон. @@ -2501,7 +2505,7 @@ dword- * иначе eax = TID - идентификатор потока ====================================================================== -= Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. += Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. ====================================================================== Параметры: * eax = 52 - номер функции @@ -2526,7 +2530,7 @@ dword- * Локальный IP-адрес устанавливается подфункцией 3. ====================================================================== - Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. + Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. ====================================================================== Параметры: * eax = 52 - номер функции @@ -2874,7 +2878,7 @@ dword- * Проверки на правильность хэндла не делается. ====================================================================== - Функция 53, подфункция 255 - отладочная информация сетевого драйвера. + Функция 53, подфункция 255 - отладочная информация сетевого драйвера. ====================================================================== Параметры: * eax = 53 - номер функции @@ -2992,16 +2996,22 @@ dword- до конца проигрывания. ====================================================================== -============================ Функция 57 ============================== -====================== Вызов сервисов PCIBIOS ======================== +======================= Функция 57 - PCI BIOS. ======================= ====================================================================== Параметры: - * eax = 57 - * ebp = соответствует регистру al по спецификации PCIBIOS - * остальные регистры по спецификации PCIBIOS -Возвращаемые значения: - * CF не определён - * остальные регистры по спецификации PCIBIOS + * eax = 57 - номер функции + * ebp соответствует регистру al в спецификации PCI BIOS + * остальные регистры - по спецификации PCI BIOS +Возвращаемое значение: + * CF не определён + * остальные регистры - по спецификации PCI BIOS +Замечания: + * Многих результатов этой функции можно также добиться вызовом + соответствующих подфункций функции 62. + * Функция вызывает расширение PCI32 BIOS, документированное, + например, в http://alpha1.dyns.net/files/PCI/bios21.pdf. + * Если BIOS не поддерживает это расширение, поведение функции + эмулируется (через аналоги подфункций функции 62 режима ядра). ====================================================================== ============== Функция 58 - работа с файловой системой. ============== @@ -3163,8 +3173,8 @@ dword- * Размер блока - 512 байт; читается один блок. * Не следует полагаться на возвращаемое значение, оно может измениться в следующих версиях. - * Требуется, чтобы был разрешён LBA-доступ к устройствам - подфункцией 11 функции 21. Узнать это можно вызовом + * Требуется, чтобы был разрешён LBA-доступ к устройствам + подфункцией 11 функции 21. Узнать это можно вызовом подфункцией 11 функции 26. * LBA-чтение дискеты не поддерживается. * Функция считывает данные физического жёсткого диска; @@ -3178,7 +3188,7 @@ dword- это будет считаться успехом (eax=0). ====================================================================== -= Функция 58, подфункция 15 - получить информацию о файловой системе. += Функция 58, подфункция 15 - получить информацию о файловой системе. ====================================================================== Параметры: * eax = 58 - номер функции @@ -4065,7 +4075,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); общем описании). ====================================================================== - Функция 69, подфункция 7 - записать в память отлаживаемого процесса. + Функция 69, подфункция 7 - записать в память отлаживаемого процесса. ====================================================================== Параметры: * eax = 69 - номер функции @@ -4201,10 +4211,11 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Для CD-приводов в связи с аппаратными ограничениями доступны только подфункции 0,1,5 и 7, вызов других подфункций завершится ошибкой с кодом 2. -При первом обращении подфункций 0,1,5,7 к устройствам ATAPI (CD и DVD) -производится блокировка ручного управления механизмом лотка. Это связано -с алгоритмом кэширования данных полученных от привода. Разблокировка -производится обращением функции 24.4 к соответствующему устройству. +При первом обращении подфункций 0,1,5,7 к устройствам ATAPI +(CD и DVD) производится блокировка ручного управления механизмом +лотка. Это связано с кэшированием данных, полученных от привода. +Разблокировка осуществляется при обращении подфункции 4 функции 24 +к соответствующему устройству. ====================================================================== = Функция 70, подфункция 0 - чтение файла с поддержкой длинных имён. = diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 0a5e57de4b..1237c52493 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -1,4 +1,4 @@ -SYSTEM FUNCTIONS of OS Kolibri 0.7.0.0 +SYSTEM FUNCTIONS of OS Kolibri 0.7.1.0 Number of the function is located in the register eax. The call of the system function is executed by "int 0x40" command. @@ -22,13 +22,13 @@ Parameters: * Y=1 - only define window area, draw nothing * Y=2 - type II - variable-size window * Y=3 - skinned window - * Y=4 - skinned window with fixed sizes - * other possible values (from 4 up to 15) are reserved, + * Y=4 - skinned fixed-size window + * other possible values (from 5 up to 15) are reserved, function call with such Y is ignored * RR, GG, BB = accordingly red, green, blue components of a color of the working area of the window (are ignored for style Y=2) * X = DCBA (bits) - * A = 1 - window has caption; for style Y=3 caption string + * A = 1 - window has caption; for styles Y=3,4 caption string must be passed in edi, for other styles use subfunction 1 of function 71 * B = 1 - coordinates of all graphics primitives are relative to @@ -51,11 +51,11 @@ Remarks: * Position and sizes of the window are installed by the first call of this function and are ignored at subsequent; to change position and/or sizes of already created window use function 67. - * For windows with style Y=3 and caption (A=1) caption string is set - by the first call of this function and is ignored at subsequent - (strictly speaking, is ignored after a call to subfunction 2 - of function 12 - end redraw); to change caption of already created - window use subfunction 1 of function 71. + * For windows with styles Y=3,4 and caption (A=1) caption string + is set by the first call of this function and is ignored + at subsequent (strictly speaking, is ignored after a call to + subfunction 2 of function 12 - end redraw); to change caption of + already created window use subfunction 1 of function 71. * If the window has appropriate styles, position and/or sizes can be changed by user. Current position and sizes can be obtained by function 9. @@ -868,10 +868,10 @@ Structure of the buffer: db a,b,c,d for version a.b.c.d db UID_xxx: one of UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 dd REV - kernel SVN revision number -For Kolibri 0.7.0.0 kernel: +For Kolibri 0.7.1.0 kernel: db 0,7,0,0 db 2 -dd 533 +dd 638 ====================================================================== ======= Function 18, subfunction 14 - wait for screen retrace. ======= @@ -978,21 +978,20 @@ Parameters: Returned value: * function does not return value --------- Subsubfunction 5 - emulation mouse button. -------- +-------- Subsubfunction 5 - simulate state of mouse buttons. --------- Parameters: * eax = 18 - function number * ebx = 19 - subfunction number * ecx = 5 - subsubfunction number - * edx = information about the emulated mouse buttons: + * edx = information about emulated state of mouse buttons: + (same as return value in subfunction 2 of function 37) * bit 0 is set = left button is pressed * bit 1 is set = right button is pressed * bit 2 is set = middle button is pressed * bit 3 is set = 4th button is pressed * bit 4 is set = 5th button is pressed - * other bits are cleared Returned value: * function does not return value - Remarks: * It is recommended to set speed of the mouse (in subsubfunction 1) from 1 up to 9. The installed value is not inspected by the kernel @@ -1035,33 +1034,37 @@ Returned value: (reserved) ====================================================================== -====================== Function 18, subfunction 21 ===================== -=== Get number of the slot of process/thread at his identificator ==== +===================== Function 18, subfunction 21 ==================== +======== Get slot number of process/thread by the identifier. ======== ====================================================================== Parameters: * eax = 18 - function number * ebx = 21 - subfunction number - * ecx = PID/TID (process/thread identificator) + * ecx = identifer of process/thread (PID/TID) Returned value: - * eax = number of the slot of process/thread, if it really present - or 0, if PID/TID is false + * eax = 0 - error (invalid identifier) + * otherwise eax = slot number ====================================================================== -==================== Function 18, subfunction 22 ===================== -============= Minimize/restore window of process/thread ============== +===================== Function 18, subfunction 22 ==================== +============== Operations with window of another thread. ============= ====================================================================== Parameters: * eax = 18 - function number * ebx = 22 - subfunction number - * ecx = Operation type - 0 - minimize (roll to panel) at number on slot thread - 1 - minimize window at PID/TID identificator - 2 - restore minimized window at slot number of thread - 3 - restore minimized window at PID/TID identificator - * edx = Operation argument (Number of slot or a PID/TID) + * ecx = operation type: + * 0 = minimize window of the thread with given slot number + * 1 = minimize window of the thread with given identifier + * 2 = restore window of the thread with given slot number + * 3 = restore window of the thread with given identifier + * edx = parameter (slot number or PID/TID) Returned value: - * eax = 0 - successfully ending - eax = -1 - error + * eax = 0 - success + * eax = -1 - error (invalid identifier) +Remarks: + * The thread can minimize its window with subfunction 10. + * One can restore and activate window simultaneously with + subfunction 3 (which requires slot number). ====================================================================== ==================== Function 20 - MIDI interface. =================== @@ -1491,29 +1494,33 @@ Remarks: subfunction 3 of function 21. ====================================================================== -================ Function 24, subfunction 4 - eject tray of disk drive. ============== +======= Function 24, subfunction 4 - eject tray of disk drive. ======= ====================================================================== Parameters: * eax = 24 - function number * ebx = 4 - subfunction number - * ecx = position of CD/DVD-drive (from 0=Primary Master to 3=Secondary Slave) + * ecx = position of CD/DVD-drive + (from 0=Primary Master to 3=Secondary Slave) Returned value: - * Nothing comes back. + * function does not return value Remarks: * The function is supported only for ATAPI devices (CD and DVD). - * At extract of a tray is made deblocking of handle mechanism of a tray. - * At extract of a tray the code makes clearing the cache of the appropriate device. + * When the tray is being ejected, + manual control of tray is unlocked. + * When the tray is being ejected, the code clears the cache for + corresponding device. * An example of usage of the function is the application CD_tray. ====================================================================== -============== Function 24, subfunction 5 - load tray of disk drive. ================= +======== Function 24, subfunction 5 - load tray of disk drive. ======= ====================================================================== Parameters: * eax = 24 - function number * ebx = 5 - subfunction number - * ecx = position of CD/DVD-drive (from 0=Primary Master to 3=Secondary Slave) + * ecx = position of CD/DVD-drive + (from 0=Primary Master to 3=Secondary Slave) Returned value: - * Nothing comes back. + * function does not return value Remarks: * The function is supported only for ATAPI devices (CD and DVD). * An example of usage of the function is the application CD_tray. @@ -2963,6 +2970,24 @@ Remarks: * The data must be kept in the memory at least up to the end of play. +====================================================================== +======================= Function 57 - PCI BIOS. ====================== +====================================================================== +Parameters: + * eax = 57 - function number + * ebp corresponds to al in PCI BIOS specification + * other registers are set according to PCI BIOS specification +Returned value: + * CF is undefined + * other registers are set according to PCI BIOS specification +Remarks: + * Many effects of this function can be also achieved with + corresponding subfunctions of function 62. + * The function calls PCI32 BIOS extension, documented e.g. in + http://alpha1.dyns.net/files/PCI/bios21.pdf. + * If BIOS does not support this extension, its behavior is emulated + (through kernel-mode analogues of subfunctions of function 62). + ====================================================================== ================ Function 58 - work with file system. ================ ====================================================================== @@ -4148,10 +4173,10 @@ Available subfunctions: For CD-drives due to hardware limitations only subfunctions 0,1,5 and 7 are available, other subfunctions return error with code 2. -At the first call subfunctions 0,1,5,7 to devices ATAPI (CD and DVD) the locking -of handle mechanism of a tray is made. It is connected to algorithm of caching -given obtained from a drive. Deblocking is made by call function 24.4 -to the appropriate device. +At the first call of subfunctions 0,1,5,7 to ATAPI devices +(CD and DVD) the manual control of tray is locked due to caching +drive data. Unlocking is made when subfunction 4 of function 24 +is called for corresponding device. ====================================================================== === Function 70, subfunction 0 - read file with long names support. == diff --git a/kernel/trunk/hid/keyboard.inc b/kernel/trunk/hid/keyboard.inc index 43b41bf710..9d6d0b836e 100644 --- a/kernel/trunk/hid/keyboard.inc +++ b/kernel/trunk/hid/keyboard.inc @@ -277,6 +277,8 @@ irq1: ;.........................Part1 Start.......Code by Rus, optimize by Ghost................................... test [kb_state], VKEY_NUMLOCK jz .dowrite + cmp cl, 0xE0 + jz .dowrite cmp ch, 55 jnz @f diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index a0b65db173..1501937aad 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.0.0 ',13,10,13,10,0 +version db 'Kolibri OS version 0.7.1.0 ',13,10,13,10,0 include "boot/bootstr.inc" ; language-independent boot messages include "boot/preboot.inc" @@ -2348,7 +2348,7 @@ endg iglobal version_inf: - db 0,7,0,0 ; version 0.7.0.0 + db 0,7,1,0 ; version 0.7.1.0 db UID_KOLIBRI dd __REV__ version_end: diff --git a/kernel/trunk/video/cursors.inc b/kernel/trunk/video/cursors.inc index 87b6439f11..ada2774dfe 100644 --- a/kernel/trunk/video/cursors.inc +++ b/kernel/trunk/video/cursors.inc @@ -504,6 +504,8 @@ proc restore_24 stdcall, x:dword, y:dword mov edi, [cur_saved_base] mov edx, [cur_saved_h] mov ebx, [cur_saved_interl] + test edx, edx + jz .ret mov esi, cur_saved_data @@: @@ -513,6 +515,7 @@ proc restore_24 stdcall, x:dword, y:dword add edi, ebx dec edx jnz @B +.ret: ret endp @@ -525,6 +528,8 @@ proc restore_32 stdcall, x:dword, y:dword mov edi, [cur_saved_base] mov edx, [cur_saved_h] mov ebx, [cur_saved_interl] + test edx, edx + jz .ret mov esi, cur_saved_data @@: @@ -533,6 +538,7 @@ proc restore_32 stdcall, x:dword, y:dword add edi, ebx dec edx jnz @B +.ret: ret endp