diff --git a/kernel/trunk/core/syscall.inc b/kernel/trunk/core/syscall.inc index 57600b4705..ef05eddfb9 100644 --- a/kernel/trunk/core/syscall.inc +++ b/kernel/trunk/core/syscall.inc @@ -95,7 +95,7 @@ iglobal dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist dd sys_sb16 ; 25-SetSb16 dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. - dd sys_wss ; 27-SetWssMainVol and SetWssCdVol + dd undefined_syscall ; 27-reserved dd sys_sb16II ; 28-SetSb16 dd sys_date ; 29-GetDate dd undefined_syscall ; 30-reserved diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 744187109b..fc70177d5b 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -1,4 +1,4 @@ -СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.6.0.0 +СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.6.3.0 Номер функции помещается в регистр eax. Вызов системной функции осуществляется командой "int 0x40". @@ -685,7 +685,7 @@ * eax = 0 - успешно * иначе eax = код ошибки файловой системы Замечания: - * Имя файла фиксировано, "menuet.img" (глобальная переменная ядра + * Имя файла фиксировано, "kolibri.img" (глобальная переменная ядра image_save из preboot.inc) * На каком разделе какого диска файл будет сохранён, определяется подфункцией 7 и подфункцией 8 функции 21. @@ -814,7 +814,7 @@ нулевой, при наличии показывает число распознанных разделов, которых может и не быть (если носитель не отформатирован или если файловая система не поддерживается). В текущей версии ядра - для жёстких дисков поддерживаются только FAT16 и FAT32. + для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS. * +6: 4 db: зарезервировано Формат таблицы: полная версия: * +0: 10 db: такие же, как и в короткой версии @@ -825,44 +825,17 @@ Разделы расположены в следующем порядке: сначала последовательно все распознанные разделы на HD на IDE0 (если есть), затем на HD на IDE1 (если есть) и т.д. до IDE3. -Формат информации о разделе (пока поддерживается только FAT): +Формат информации о разделе: * +0: dword: начальный физический сектор раздела * +4: dword: последний физический сектор раздела (принадлежит разделу) - * +8: dword: секторов в одной копии FAT - * +12 = +0xC: dword: число копий FAT - * +16 = +0x10: dword: число секторов в кластере - * +20 = +0x14: dword: байт в секторе; текущая реализация ожидает, - что здесь 0x200 = 512 - * +24 = +0x18: dword: первый кластер корневого каталога в FAT32, - 0 для FAT16 - * +28 = +0x1C: dword: начальный физический сектор FAT - * +32 = +0x20: dword: первый физический сектор корневого каталога - для FAT16, игнорируется для FAT32 - * +36 = +0x24: dword: число секторов в корневом каталоге для FAT16, - 0 для FAT32 - * +40 = +0x28: dword: физический сектор начала области данных - * +44 = +0x2C: dword: максимальный номер кластера - * +48 = +0x30: dword: физический сектор информации о - файловой системе для FAT32, игнорируется для FAT16 - * +52 = +0x34: dword: значение, используемое как граница - специальных значений в FAT - * +56 = +0x38: dword: значение, используемое для плохих кластеров - в FAT - * +60 = +0x3C: dword: значение, используемое как маркер конца - при записи цепочки в FAT - * +64 = +0x40: dword: маска, накладываемая на элемент FAT - * +68 = +0x44: byte: тип файловой системы: 16 или 32 - * +69 = +0x45: 31 db: зарезервировано + * +8: byte: тип файловой системы: + 16=FAT16, 32=FAT32, 1=NTFS + * формат дальнейших данных зависит от файловой системы, + может меняться с изменениями в ядре и поэтому не описывается Замечания: * Короткая таблица может быть использована для получения информации об имеющихся устройствах. - * Первые два поля информации о разделе в полной версии таблицы - сообщают параметры раздела, оставшиеся - параметры файловой - системы FAT. Для других файловых систем (когда они будут - поддерживаться) специфическая для файловой системы информация, - естественно, будет другой, но первые два поля - сохранятся неизменными. ====================================================================== ========== Функция 18, подфункция 13 - получить версию ядра. ========= @@ -878,8 +851,8 @@ db a,b,c,d для версии a.b.c.d db UID_xxx: одно из UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 db 'name',0 - ASCIIZ-строка с именем -Для ядра Kolibri 0.5.8.1: -db 0,5,8,1 +Для ядра Kolibri 0.6.3.0: +db 0,6,3,0 db 2 db 'Kolibri',0 @@ -1005,7 +978,6 @@ db 'Kolibri',0 и проверить, что устанавливаемое положение не выходит за пределы экрана. - ====================================================================== ====================== Функция 18, подфункция 20 ===================== ============= Получить информацию об оперативной памяти. ============= @@ -1018,18 +990,18 @@ db 'Kolibri',0 * eax = общий размер имеющейся оперативной памяти в байтах или -1 в случае ошибки * буфер, на который указывает ecx, содержит следующую информацию: - * +0: dword: общий размер имеющейся оперативной памяти в страницах + * +0: dword: общий размер имеющейся оперативной памяти в страницах * +4: dword: размер свободной оперативной памяти в страницах * +8: dword: число страничных ошибок (исключений #PF) в приложениях * +12: dword: размер кучи ядра в байтах - * +16: dword: размер свободной памяти в куче ядра в байтах + * +16: dword: размер свободной памяти в куче ядра в байтах * +20: dword: общее количество блоков памяти в куче ядра - * +24: dword: количество свободных блоков памяти в куче ядра + * +24: dword: количество свободных блоков памяти в куче ядра * +28: dword: размер наибольшего свободного блока в куче ядра - (зарезервировано) - * +32: dword: размер наибольшего выделенного блока в куче ядра - (зарезервировано) + (зарезервировано) + * +32: dword: размер наибольшего выделенного блока в куче ядра + (зарезервировано) ====================================================================== ==================== Функция 20 - интерфейс MIDI. ==================== @@ -1149,22 +1121,6 @@ db 'Kolibri',0 переменную не использует. * Получить язык системы можно вызовом подфункции 5 функции 26. -====================================================================== -======= Функция 21, подфункция 6 - установить базовый порт WSS. ====== -====================================================================== -Параметры: - * eax = 21 - номер функции - * ebx = 6 - номер подфункции - * ecx = базовый порт -Возвращаемое значение: - * eax = 0 - успешно - * eax = -1 - ошибочный номер порта -Замечания: - * Номер порта должен удовлетворять условию 0x100<=ecx. - * База WSS используется функцией 27. - * Получить установленный базовый порт WSS можно вызовом - подфункции 6 функции 26. - ====================================================================== =========== Функция 21, подфункция 7 - установить базу HD. =========== ====================================================================== @@ -1599,18 +1555,6 @@ db 'Kolibri',0 соответствующую иконку (используя описываемую функцию). * Установить язык системы можно вызовом подфункции 5 функции 21. -====================================================================== -======== Функция 26, подфункция 6 - получить базовый порт WSS. ======= -====================================================================== -Параметры: - * eax = 26 - номер функции - * ebx = 6 - номер подфункции -Возвращаемое значение: - * eax = базовый порт -Замечания: - * База WSS используется функцией 27. - * Установить базовый порт WSS можно вызовом подфункции 6 функции 21. - ====================================================================== ============ Функция 26, подфункция 7 - получить базу HD. ============ ====================================================================== @@ -1706,28 +1650,6 @@ db 'Kolibri',0 * Установить текущее состояние можно вызовом подфункции 12 функции 21. -====================================================================== -==== Функция 27 - установить громкость Windows Sound System (WSS). === -====================================================================== -Параметры: - * eax = 27 - номер функции - * ebx = что устанавливать: - * 1 - установить общую громкость - * 2 - установить громкость Line In - * cl = уровень громкости (0x0=самый высокий, 0x1F=самый низкий, - установленный бит 0x80=отключить) -Возвращаемое значение: - * eax = 0 - успешно - * eax = 1 - не определена база WSS - * eax = 2 - неверная подфункция -Замечания: - * Предварительно нужно определить базовый порт WSS вызовом - подфункции 6 функции 21. - * Установка общей громкости фактически игнорируется - (возвращается eax=0). - * В старой документации и в исходниках ядра подфункция 2 - ошибочно названа громкостью CD-audio. - ====================================================================== =============== Функция 28 - установить громкость SB16. ============== ====================================================================== @@ -1829,7 +1751,7 @@ db 'Kolibri',0 можно получить функцией 61. ====================================================================== -========== Функция 37 - получить координаты/состояние мыши. ========== +==================== Функция 37 - работа с мышью. ==================== ====================================================================== -------------- Подфункция 0 - экранные координаты мыши --------------- @@ -1864,70 +1786,54 @@ db 'Kolibri',0 * бит 1 установлен = правая кнопка нажата * прочие биты сброшены ------------------ Подфункция 3 - установить позицию курсора ------------ ------------------- функция зарезервирована ----------------- -Параметры: - * eax = 37 - номер функции - * ebx = 3 - номер подфункции - * ecx = координаты курсора -Возвращаемое значение: - * eax предыдущие координаты курсора - ------------------ Подфункция 4 - загрузить курсор ----------------- +------------------ Подфункция 4 - загрузить курсор ------------------- Параметры: * eax = 37 - номер функции * ebx = 4 - номер подфункции - * ecx = указатель на входные двнные - * edx = (hotspot << 16) or flags - + * dx = источник данных: + * dx = LOAD_FROM_FILE = 0 - данные в файле + * ecx = указатель на полный путь к файлу курсора + * файл курсора должен быть в формате .cur, стандартном для + MS Windows, причём размером 32*32 пикселя + * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память + * ecx = указатель на данные файла курсора + * формат данных такой же, как и в предыдущем случае + * dx = LOAD_INDIRECT = 2 - данные в памяти + * ecx = указатель на образ курсора в формате ARGB 32*32 пикселя + * edx = 0xXXYY0002, где + * XX = x-координата "горячей точки" курсора + * YY = y-координата + * 0 <= XX, YY <= 31 Возвращаемое значение: - * eax содержит логический номер курсора - или 0 в случае неудачи - -Значение ecx интерпретируется в зависимости от флагов установленных -в младшем слове регистра edx + * eax = 0 - неудача + * иначе eax = хэндл курсора - * dx = LOAD_FROM_FILE = 0 - * ecx = полный путь к файлу курсора - * hotspot игнорируется - * курсор должен быть в формате MS Windows 32*32 пикселя 16 цветов - - * dx = LOAD_FROM_MEM = 1 - * ecx = указатель на загруженный в память файл курсора - * hotspot игнорируется - * курсор должен быть в формате MS Windows 32*32 пикселя 16 цветов - - * dx = LOAD_INDIRECT = 2 - * ecx = указатель на образ курсора в формате ARGB 32*32 пикселя - * hotspot (hotspot.x <<8)or hotspot.y - 0<= x,y <=31 - - * dx = LOAD_SYSTEM = 3; зарезервировано - * ecx = номер системного курсора - * hotspot игнорируется - ------------------ Подфункция 5 - установить курсор ----------------- +------------------ Подфункция 5 - установить курсор ------------------ +Устанавливает новый курсор для окна текущего потока. Параметры: * eax = 37 - номер функции * ebx = 5 - номер подфункции - * ecx = логический номер курсора загруженного фн. 37.4 + * ecx = хэндл курсора Возвращаемое значение: - * eax = логический номер предыдущего курсора - -Функция устанавливает новый курсор для окна вызвавшего её потока, + * eax = хэндл предыдущего установленного курсора +Замечания: + * Если передан некорректный хэндл, то функция восстановит курсор + по умолчанию (стандартную стрелку). В частности, к восстановлению + курсора по умолчанию приводит передача ecx=0. ------------------ Подфункция 6 - удалить курсор ----------------- ------------------- функция зарезервирована ----------------- +------------------- Подфункция 6 - удалить курсор -------------------- Параметры: * eax = 37 - номер функции * ebx = 6 - номер подфункции - * ecx = логический номер курсора загруженного фн. 37.4 + * ecx = хэндл курсора Возвращаемое значение: - * eax = общее количество загруженных курсоров - -Если удаляемый курсор является активным для данного окна,он заменяется -системным. Функция не удаляет курсоры загруженные другим приложением. -Системные курсоры не удаляются. + * eax разрушается +Замечания: + * Курсор должен был быть ранее загружен текущим потоком + (вызовом подфункции 4). Функция не удаляет системные курсоры и + курсоры, загруженные другими приложениями. + * Если удаляется активный (установленный подфункцией 5) курсор, то + восстанавливается курсор по умолчанию (стандартная стрелка). ====================================================================== ================== Функция 38 - нарисовать отрезок. ================== @@ -2150,9 +2056,8 @@ db 'Kolibri',0 зарезервирован этой же функцией (с такими же значениями ecx,edx). * При обнаружении ошибки (в обоих случаях) никаких действий не производится. - * При загрузке система резервирует за собой порты 0..0xff, а при - обнаружении COM-мыши - дополнительно диапазон COM-портов - 0x3f0..0x3ff и/или 0x2f0..0x2ff. + * При загрузке система резервирует за собой порты + 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно). * При завершении потока автоматически освобождаются все зарезервированные им порты. @@ -2621,6 +2526,20 @@ dword- * текущая реализация возвращает eax=14, но это может быть изменено в следующих версиях +====================================================================== +====== Функция 52, подфункция 15 - получить локальный MAC-адрес. ===== +====================================================================== +Параметры: + * eax = 52 - номер функции + * ebx = 15 - номер подфункции + * ecx = 0 - читать первые 4 байта, + ecx = 4 - читать последние 2 байта +Возвращаемое значение: + * для ecx=0: eax = первые 4 байта MAC-адреса + * для ecx=4: ax = последние 2 байта MAC-адреса, + старшая половина eax разрушается + * для других ecx: eax = -1 как признак ошибки + ====================================================================== ============ Функция 53, подфункция 0 - открыть UDP-сокет. =========== ====================================================================== @@ -2915,31 +2834,6 @@ dword- * Данные должны сохраняться в памяти по крайней мере до конца проигрывания. -====================================================================== -============= Функция 56 - записать файл на жёсткий диск. ============ -====================================================================== -Параметры: - * eax = 56 - номер функции - * ebx = указатель на имя файла - * ecx = размер данных для записи (в байтах) - * edx = указатель на данные для записи - * esi = указатель на путь (ASCIIZ-строку) -Возвращаемое значение: - * eax = 0 - успешно, иначе код ошибки файловой системы -Замечания: - * Эта функция устарела; функция 70 позволяет выполнять - те же действия с расширенными возможностями. - * Данная функция предполагает, что во время её вызова одним - приложением никакое другое приложение не работает - с жёстким диском. - * Путь к файлу - ASCIIZ-строка, которая может быть пустой - (если файл создаётся в корневом каталоге) или иметь формат - /d1/d2/.../dn, где все имена папок должны иметь формат 8+3, т.е. - 8 символов имени и 3 символа расширения без разделителя, - при необходимости дополненные пробелами; - все буквы должны быть заглавные. - * Имя к файлу также должно иметь формат 8+3. - ====================================================================== ============== Функция 58 - работа с файловой системой. ============== ====================================================================== @@ -3563,9 +3457,9 @@ IPC Замечания: * Есть другой способ выделения/освобождения динамической памяти - подфункции 11, 12, 13 функции 68. - Функция не может использоваться совместно с 68.11, 68.12, 68.13 - Вызов функции будет игнорироваться если приложение создаст локальную - кучу вызовом 68.11 + * Функция не может использоваться совместно с 68.11, 68.12, 68.13. + Вызов функции будет игнорироваться, если приложение создаст + локальную кучу вызовом 68.11. ====================================================================== ================= Функция 66 - работа с клавиатурой. ================= @@ -3780,9 +3674,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * Вызов функции инициализирует кучу, из которой впоследствии можно выделять и освобождать блоки памяти подфункциями 12 и 13. Размер кучи равен размеру всей свободной памяти приложения. - * При повторном вызове функции тем же процессом функция вернёт размер - существующей кучи. - * После создания кучи вызовы функции 64.1 игнорируются. + * При повторном вызове функции тем же процессом функция вернёт + размер существующей кучи. + * После создания кучи вызовы функции 64 игнорируются. ====================================================================== ========== Функция 68, подфункция 12 - выделить блок памяти. ========= @@ -3844,9 +3738,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Параметры: * eax = 68 - номер функции * ebx = 16 - номер подфункции - * ecx = указатель на ASCIIZ строку с именем драйвера - максимальная длина имени 16 символов включая ноль - остальные символы игнорируются + * ecx = указатель на ASCIIZ-строку с именем драйвера Возвращаемое значение: * eax = 0 - неудача * иначе eax = хэндл драйвера @@ -3854,10 +3746,12 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * Если драйвер ещё не загружен, он загружается; если драйвер уже загружен, ничего не меняется. * Имя драйвера чувствительно к регистру символов. + Максимальная длина имени - 16 символов, включая завершающий + нулевой символ, остальные символы игнорируются. * Можно загружать только драйвера, зарегистрированные в системе; в текущей реализации есть ровно 2 таких драйвера: - * имя SOUND, файл /rd/1/unisound.obj - * имя INFINITY, файл /rd/1/infinity.obj + * имя SOUND, файл /rd/1/drivers/unisound.obj + * имя INFINITY, файл /rd/1/drivers/infinity.obj ====================================================================== ========== Функция 68, подфункция 17 - управление драйвером. ========= @@ -3890,6 +3784,21 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax = адрес старого обработчика исключений (0, если он не был установлен) +====================================================================== +============= Функция 68, подфункция 19 - загрузить DLL. ============= +====================================================================== +Параметры: + * eax = 68 - номер функции + * ebx = 19 - номер подфункции + * ecx = указатель на ASCIIZ-строку с полным путём к DLL +Возвращаемое значение: + * eax = 0 - неудача + * иначе eax = указатель на таблицу экспорта DLL +Замечания: + * Таблица экспорта представляет собой массив структур по 2 dword'а, + заканчивающийся нулём. Первый dword в структуре является + указателем на имя функции, второй содержит адрес функции. + ====================================================================== ======================== Функция 69 - отладка. ======================= ====================================================================== diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 5f3d24be54..dd14cdfe36 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -1,4 +1,4 @@ -SYSTEM FUNCTIONS of OS Kolibri 0.6.0.0 +SYSTEM FUNCTIONS of OS Kolibri 0.6.3.0 Number of the function is located in the register eax. The call of the system function is executed by "int 0x40" command. @@ -680,7 +680,7 @@ Returned value: * eax = 0 - success * else eax = error code of the file system ╟рьхўрэш : - * Filename is fixed, "menuet.img" (global kernel variable + * Filename is fixed, "kolibri.img" (global kernel variable 'image_save' from 'preboot.inc') * Drive and partition are defined by subfunction 7 and subfunction 8 of function 21. @@ -812,7 +812,7 @@ Format of the table: short version: otherwise it shows number of the recognized partitions, which can be not presented (if the drive is not formatted or if the file system is not supported). Current version of the kernel - supports only FAT16 and FAT32 for hard disks. + supports only FAT16, FAT32 and NTFS for hard disks. * +6: 4 db: reserved Format of the table: full version: * +0: 10 db: same as for the short version @@ -828,37 +828,13 @@ Format of the information about partition * +0: dword: first physical sector of the partition * +4: dword: last physical sector of the partition (belongs to the partition) - * +8: dword: sectors per one copy of FAT - * +12 = +0xC: dword: number of copies of FAT - * +16 = +0x10: dword: number of sectors per cluster - * +20 = +0x14: dword: bytes per sector; - current implementation expects 0x200 = 512 in this field - * +24 = +0x18: dword: first root cluster in FAT32, 0 for FAT16 - * +28 = +0x1C: dword: first physical sector of FAT - * +32 = +0x20: dword: first physical root sector for FAT16, - ignored for FAT32 - * +36 = +0x24: dword: number of root sectors for FAT16, - 0 for FAT32 - * +40 = +0x28: dword: physical sector of the beginning of - the data area - * +44 = +0x2C: dword: maximum number of a cluster - * +48 = +0x30: dword: physical sector of the information - about the file system for FAT32, ignored for FAT16 - * +52 = +0x34: dword: value used as boundary for special - values in FAT - * +56 = +0x38: dword: value used for bad clusters in FAT - * +60 = +0x3C: dword: value used as the end marker for FAT chain - * +64 = +0x40: dword: mask for FAT items - * +68 = +0x44: byte: file system type: 16 шыш 32 - * +69 = +0x45: 31 db: reserved + * +8: byte: file system type: + 16=FAT16, 32=FAT32, 1=NTFS + * other data are dependent on file system, are modified with + kernel modifications and therefore are not described Remarks: * The short table can be used for obtaining the information about available devices. - * First two fields in the information about partition - gives the parameters of partition, other - parameters of - FAT file system. For other file systems (when they will be - supported) specific for file system information will be, of - course, another, but first two fields will have the same sense. ====================================================================== ========== Function 18, subfunction 13 - get kernel version. ========= @@ -874,8 +850,8 @@ 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 db 'name',0 - ASCIIZ-string with the name -For Kolibri 0.5.8.1 kernel: -db 0,5,8,1 +For Kolibri 0.6.3.0 kernel: +db 0,6,3,0 db 2 db 'Kolibri',0 @@ -1139,21 +1115,6 @@ Remarks: use this variable. * To get system language use subfunction 5 of function 26. -====================================================================== -=========== Function 21, subfunction 6 - set WSS base port. ========== -====================================================================== -Parameters: - * eax = 21 - function number - * ebx = 6 - subfunction number - * ecx = base port -Returned value: - * eax = 0 - success - * eax = -1 - erratic port number -Remarks: - * Port number must satisfy to condition 0x100<=ecx. - * WSS base is used by function 27. - * To get WSS base port use subfunction 6 of function 26. - ====================================================================== ============== Function 21, subfunction 7 - set HD base. ============= ====================================================================== @@ -1574,18 +1535,6 @@ Remarks: appropriate icon (using this function). * To set system language use subfunction 5 of function 21. -====================================================================== -=========== Function 26, subfunction 6 - get WSS base port. ========== -====================================================================== -Parameters: - * eax = 26 - function number - * ebx = 6 - subfunction number -Returned value: - * eax = base port -Remarks: - * WSS base is used by function 27. - * To set WSS base port use subfunction 6 of function 21. - ====================================================================== ============== Function 26, subfunction 7 - get HD base. ============= ====================================================================== @@ -1676,27 +1625,6 @@ Remarks: * The current implementation uses only low bit of ecx. * To set the current state use subfunction 12 of function 21. -====================================================================== -======== Function 27 - set Windows Sound System (WSS) volume. ======== -====================================================================== -Parameters: - * eax = 27 - function number - * ebx = what to set: - * 1 - set common volume - * 2 - set Line In volume - * cl = volume level (0x0=highest, 0x1F=lowest, - if bit 0x80 is set=disable) -Returned value: - * eax = 0 - success - * eax = 1 - WSS base is not defined - * eax = 2 - incorrect subfunction -Remarks: - * Previously WSS base port must be defined by call to - subfunction 6 of function 21. - * Set of common volume is ignored (function simply returns eax=0). - * Old documentation and kernel sources erraticly name function 2 - as CD-audio volume. - ====================================================================== =================== Function 28 - set SB16 volume. =================== ====================================================================== @@ -1797,7 +1725,7 @@ Remarks: the current videomode, use function 61. ====================================================================== -========= Function 37 - get coordinates/status of the mouse. ========= +=================== Function 37 - work with mouse. =================== ====================================================================== ---------- Subfunction 0 - screen coordinates of the mouse ----------- @@ -1833,6 +1761,54 @@ Returned value: * bit 1 is set = right button is pressed * other bits are cleared +-------------------- Subfunction 4 - load cursor --------------------- +Parameters: + * eax = 37 - function number + * ebx = 4 - subfunction number + * dx = data source: + * dx = LOAD_FROM_FILE = 0 - data in a file + * ecx = pointer to full path to the cursor file + * the file must be in the format .cur, which is standard for + MS Windows, at that of the size 32*32 pixels + * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory + * ecx = pointer to data of the cursor file + * the data format is the same as in the previous case + * dx = LOAD_INDIRECT = 2 - data in memory + * ecx = pointer to cursor image in the format ARGB 32*32 pixels + * edx = 0xXXYY0002, where + * XX = x-coordinate of cursor hotspot + * YY = y-coordinate + * 0 <= XX, YY <= 31 +Returned value: + * eax = 0 - failed + * otherwise eax = cursor handle + +--------------------- Subfunction 5 - set cursor --------------------- +Sets new cursor for the window of the current thread. +Parameters: + * eax = 37 - function number + * ebx = 5 - subfunction number + * ecx = cursor handle +Returned value: + * eax = handle of previous cursor +Remarks: + * If the handle is incorrect, the function restores the default + cursor (standard arrow). In particular, ecx=0 restores it. + +------------------- Subfunction 6 - delete cursor -------------------- +Parameters: + * eax = 37 - function number + * ebx = 6 - subfunction number + * ecx = cursor handle +Returned value: + * eax destroyed +Remarks: + * The cursor must be loaded previously by the current thread + (with the call to subfunction 4). The function does not delete + system cursors and cursors, loaded by another applications. + * If the active cursor (set by subfunction 5) is deleted, + the system restores the default cursor (standard arrow). + ====================================================================== ====================== Function 38 - draw line. ====================== ====================================================================== @@ -2051,9 +2027,8 @@ Remarks: that was not earlier reserved by this function (with same ecx,edx). * If an error occurs (for both cases) function performs no action. - * At booting the system reserves for itself ports 0..0xff, and if - COM-mouse is detected - additionally range of COM-ports - 0x3f0..0x3ff and/or 0x2f0..0x2ff. + * At booting the system reserves for itself ports + 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively). * When a thread terminates, all reserved by it ports are freed automatically. @@ -2525,6 +2500,20 @@ Returned value: * the current implementation returns eax=14, but this can be changed in future versions +====================================================================== +======== Function 52, subfunction 15 - get local MAC address. ======== +====================================================================== +Parameters: + * eax = 52 - function number + * ebx = 15 - subfunction number + * ecx = 0 - read first 4 bytes, + ecx = 4 - read last 2 bytes +Returned value: + * for ecx=0: eax = first 4 bytes of MAC address + * for ecx=4: ax = last 2 bytes of MAC address, + high half of eax is destroyed + * for other ecx: eax = -1 indicates an error + ====================================================================== ============ Function 53, subfunction 0 - open UDP-socket. =========== ====================================================================== @@ -2819,30 +2808,6 @@ Remarks: * The data must be kept in the memory at least up to the end of play. -====================================================================== -=============== Function 56 - write file to hard disk. =============== -====================================================================== -Parameters: - * eax = 56 - function number - * ebx = pointer to the file name - * ecx = size of data to write (in bytes) - * edx = pointer to data to write - * esi = pointer to path (ASCIIZ-string) -Returned value: - * eax = 0 - success, otherwise file system error code -Remarks: - * This function is obsolete; function 70 allows to fulfil the same - operations with the extended possibilities. - * This function assumes that during its call by one application - no other application works with hard disk. - * The path to file is ASCIIZ-string, which may be empty - (if the file is created in the root folder) or have the format - /d1/d2/.../dn, where all folder names must have the 8+3 format, - i.e. 8 characters of name and 3 characters of the extension - without separator, supplemented by blanks if necessary; - all letters must be capital. - * The file name must also have the format 8+3. - ====================================================================== ================ Function 58 - work with file system. ================ ====================================================================== @@ -3757,8 +3722,8 @@ Remarks: * The function can load only drivers which are registered in the system; the current implementation contains exactly 2 such drivers: - * name SOUND, file /rd/1/unisound.obj - * name INFINITY, file /rd/1/infinity.obj + * name SOUND, file /rd/1/drivers/unisound.obj + * name INFINITY, file /rd/1/drivers/infinity.obj ====================================================================== ============ Function 68, subfunction 17 - driver control. =========== @@ -3790,6 +3755,21 @@ Parameters: Returned value: * eax = address of the old exception handler (0, if it was not set) +====================================================================== +=============== Function 68, subfunction 19 - load DLL. ============== +====================================================================== +Parameters: + * eax = 68 - function number + * ebx = 19 - subfunction number + * ecx = pointer to ASCIIZ-string with the full path to DLL +Returned value: + * eax = 0 - failed + * otherwise eax = pointer to DLL export table +Remarks: + * Export table is an array of structures of 2 dword's, terminated + by zero. The first dword in structure points to function name, + the second dword contains address of function. + ====================================================================== ====================== Fucntion 69 - debugging. ====================== ====================================================================== diff --git a/kernel/trunk/fs/part_set.inc b/kernel/trunk/fs/part_set.inc index 11e3158478..ba5fb148ec 100644 --- a/kernel/trunk/fs/part_set.inc +++ b/kernel/trunk/fs/part_set.inc @@ -5,9 +5,9 @@ ;* to MBR - Mario79 * ;************************************************************* +uglobal align 4 -iglobal ;****************************************************** ; Please do not change this place - variables in text ; Mario79 @@ -16,6 +16,7 @@ iglobal PARTITION_START dd 0x3f PARTITION_END dd 0 fs_type db 0 ; 0=none, 1=NTFS, 16=FAT16, 32=FAT32 +align 4 fs_dependent_data_start: ; FATxx data @@ -64,6 +65,8 @@ end virtual ; End place ; Mario79 ;*************************************************************************** +endg +iglobal partition_types: ; list of fat16/32 partitions db 0x04 ; DOS: fat16 <32M diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index fbacb1f8f6..b177eca4b3 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -1172,50 +1172,6 @@ sys_sb16II: ret -align 4 - -sys_wss: - - cmp word [wss],word 0 - jnz wssl1 - mov [esp+36],dword 1 - ret - wssl1: - - cmp eax,1 ; set volume - main - jnz wssl2 - mov [esp+36],dword 0 - ret - wssl2: - - cmp eax,2 ; set volume - cd - jnz wssl3 - ; L - mov dx,word [wss] - add dx,4 - mov al,0x2 - out dx,al - mov esi,1 - call delay_ms - mov eax,ebx - inc edx - out dx,al - ; R - mov dx,word [wss] - add dx,4 - mov al,0x3 - out dx,al - mov esi,1 - call delay_ms - mov eax,ebx - inc edx - out dx,al - mov [esp+36],dword 0 - ret - wssl3: - mov [esp+36],dword 2 - ret - display_number: ; eax = print type, al=0 -> ebx is number @@ -1385,7 +1341,6 @@ sys_setup: ; 3=cd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave ; 4=sb16 base , base io address ; 5=system language, 1eng 2fi 3ger 4rus -; 6=wss base , base io address ; 7=hd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave ; 8=fat32 partition in hd ; 9 @@ -1502,17 +1457,6 @@ cd_base db 0 ret nsyse5: - cmp eax,6 ; WSS - jnz nsyse6 - cmp ebx,0x100 - jb nsyse6 - mov [wss],ebx - ret - -wss_temp dd 0 - - nsyse6: - cmp eax,7 ; HD BASE jne nsyse7 test ebx,ebx @@ -1612,7 +1556,6 @@ sys_getsetup: ; 3=cd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave ; 4=sb16 base , base io address ; 5=system language, 1eng 2fi 3ger 4rus -; 6=wss base ; 7=hd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave ; 8=fat32 partition in hd ; 9=get hs timer tic @@ -1683,12 +1626,6 @@ sys_getsetup: mov [esp+36],eax ret ngsyse5: - cmp eax,6 - jnz ngsyse6 - mov eax,[wss] - mov [esp+36],eax - ret - ngsyse6: cmp eax,7 jnz ngsyse7 movzx eax,[hd_base] @@ -5022,7 +4959,6 @@ wraw_bacground_select db 0 pci_access_enabled dd 0x0 ; 0 = disabled , 1 = enabled sb16 dd 0x0 - wss dd 0x0 buttontype dd 0x0 windowtypechanged dd 0x0