sysfuncr.txt - дополнения.

Internal structure and you change requests/suggestions
  • А почему такие ошибки были внесены в сисфунк? Куда делись примечания?
  • А потому что sysfunc писал Ville и для него главным было побыстрее написать эту справку. Да и sysfunc этот уже давно не обновлялся.
  • Дык надо обновить :))
  • Для этого и создана эта тема. Обычно ядерщики держали секреты системных функций при себе. Пора собрать их воедино. 8)
  • >4. 58 функция в ebx возращает размер файла.

    Так это и написано в сисфунк.тхт

    ebx указатель на блок fileinfo

    примеры путей к файлам:

    '/RAMDISK/FIRST/KERNEL.ASM',0
    '/RD/1/KERNEL.ASM',0

    '/HARDDISK/FIRST/KERNEL.ASM',0
    '/HD/1/KERNEL.ASM',0
    '/HARDDISK/FIRST/MENUET/PICS/TANZANIA.BMP',0

    fileinfo:

    dd 0 ; 0 = ЧТЕНИЕ ФАЙЛА
    dd 0x0 ; номер блока файла (512 байт, нумерация начинается с нуля)
    dd 0x1 ; сколько блоков считывать
    dd 0x20000 ; куда считывать
    dd 0x10000 ; память для работы ОС - 4096 байт

    db '/RAMDISK/FIRST/KERNEL.ASM',0
    ; строка с путем к файлу, заканчивается нулем (ASCIIZ)

    результат: в eax код ошибки (0 или 5 - успешно)
    в ebx размер файла

    Другое дело, что финн поменял код ошибки на 5

    file_system:

    ; IN:
    ;
    ; eax = 0 ; read file /RamDisk/First 6 /HardDisk/First 30
    ; eax = 1 ; write file /RamDisk/First 33 /HardDisk/First 56
    ; eax = 2 ; delete file /RamDisk/First 32 /HardDisk/First 57
    ; eax = 3 ; append to a file /RamDisk/First ?? /HardDisk/First ??
    ; eax = 4 ; makedir
    ; eax = 5 ; rename file/directory
    ; eax = 8 ; lba read
    ; eax = 12 ; get_filesize
    ; eax = 13 ; get_fileattr
    ; eax = 14 ; get_filedate
    ; eax = 15 ; get_disk_info
    ; eax = 16 ; start application
    ;
    ; OUT:
    ;
    ; eax = 0 : read ok
    ; eax = 1 : no fd base and/or partition defined
    ; eax = 2 : yet unsupported FS
    ; eax = 3 : unknown FS
    ; eax = 4 : partition not defined at hd
    ; eax = 5 : file not found
    ; eax = 6 : end of file
    ; eax = 7 : memory pointer not in application area
    ; eax = 8 : disk full
    ; eax = 9 : fat table corrupted
    ; eax = 10 : access denied
    ;
    ; ebx = size
  • Действительно, я просто помню, что в старых sysfuncr.txt это не было написано, а на новую версию не посмотрел. :?
    5. Функция 0 на самом деле создает окно на 1 пиксель меньше по вертикали и горизонтали.
  • Работа IPC.
    1. (eax=60,ebx=1) Формат данных региона для приема сообщений:
    +00h dword 0 - разрешен прием сообщений,
    <>0 - запрещен прием сообщений. (этот флаг устнавливается исключительно приложением)
    +04h dword x - смещение по которому будет записано первое сообщение (разумно взять x=8 ).
    После приема нескольких сообщений формат имеет следующий вид:
    +00h dword 0 - разрешен прием сообщений,
    <>0 - запрещен прием сообщений. (этот флаг устнавливается исключительно приложением)
    +04h dword y - адрес по которому будет записано следующее сообщение.
    +x-4 dword PID процесса, пославшего первое сообщение.
    +x dword x_1 - размер сообщения.
    +x+4 rb x_1 - сообщение
    +x+x_1+4 dword PID процесса, пославшего второе сообщение.
    ...
    +x+x_1+...+x_{n-1}-4+8*(n-1) rb x_n - последнее сообщение.
    +x+x_1+...+x_n-4+8*n=y
    если изначально указать x=0, то получим
    +00h dword PID процесса, пославшего сообщение. (PID не равен нулю, поэтому дальнейшие сообщения будут заблокированы)
    +04h dword x - размер сообщения.
    +08h rb x - сообщение.
    Учтите, что менует не дает послать сообщение, если оно ровно помещается в буфер - буфер должен быть хотя бы на один байт больше.
    2. (eax=60,ebx=2) Посылка сообщения.
    В eax возращается код ошибки:
    4 - процесс не найден (неверный PID).
    1 - процесс не определил область для приема сообщений.
    2 - прием сообщений запрещен приложением (первое двойное слово не ноль).
    3 - не хватает буфера для приема сообщения (или сообщение вместилось бы в буфер точно).
    0 - сообщение успешно отправлено.
  • Комментарии (можете не обращать внимания):

    На исследования IPC, Халявина натолкнул Герман, после продолжительного
    разговора по Аське
  • german
    Ты скромный малый ;) !
    All
    Слушайте, надо перенести сетевые функции из Stack.txt в sysfuncr.txt.Тем более, что описания всех АПИ-функций должны быть в одном месте. :)
  • Halyavin Молодец! Как всегда =)
  • Еще один баг был найден благодаря hidnplayr - в 15 функции за неправильную установку размера фонового изображения отвечает только пользователь. Если их установить слишком большими, то начнутся проблемы, поскольку под это изображение отведен 1Mb.
  • Уточнение - проверка на слишком большое изображение все-таки есть, но она не правильная! А именно сравнивается не с 0x100000-16 (=1Mb), а с 0x160000-16.
  • По-видимому все-таки можно использовать до 0x160000 памяти под background, хотя с этим еще нужно разобраться. В любом случае ядро не должно разрешать устанавливать размер фона, при котором происходит превышение этого лимита.
  • Если народ читал историю МеОС, то там упоминается глюк потерянных кнопок. Есть подозрение, что он не до конца убран - из-за этого проблемы с CPUID.
  • Who is online

    Users browsing this forum: No registered users and 11 guests