58 функция

Assembler programming questions
  • Ну от версии 0.74 вот:

    Code: Select all

    58 = ДОСТУП К ФАЙЛОВОЙ СИСТЕМЕ
            SYSTEM TREE ACCESS
    
         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 = ЧТЕНИЕ ФАЙЛА (2 удалить / 3 дописывать)
         dd   0x0          ; номер блока (512 байт, нумерация начинается с нуля)
         dd   0x1          ; сколько блоков считывать
                           ; (/байтов записывать/дописывать в конец файла)
         dd   0x20000      ; куда считывать
         dd   0x10000      ; память для работы ОС - 16384 байта
    
         db   '/RAMDISK/FIRST/KERNEL.ASM',0
         ; строка с путем к файлу, заканчивается нулем (ASCIIZ)
    
         или
    
         fileinfo:
    
         dd   1            ; 1 = ЗАПИСЬ НОВОГО ФАЙЛА
         dd   0x0          ; не используется
         dd   10000        ; сколько байтов записывать
         dd   0x20000      ; откуда записывать
         dd   0x10000      ; память для работы ОС - 16384 байта
    
         db   '/RAMDISK/FIRST/KERNEL.ASM',0
         ; строка с путем к файлу, заканчивается нулем (ASCIIZ)
    
    
         или
    
         ; LBA
    
         fileinfo:
    
         dd   8            ; 8 = чтение LBA (/9 = запись LBA)
         dd   0x0          ; номер блока для чтения/записи
         dd   0x1          ; всегда 1
         dd   0x20000      ; куда записывать
         dd   0x10000      ; память для работы ОС - 16384 байта
    
         dd   '/HARDDISK/SECOND',0
         ; физическое устройство (ASCIIZ)
    
         NOTE: В этом контексте строка указывает не на логическое,
               а на физическое устройство.
       для жесткого диска: first=pri.master, second=pri.slave
                           third=sec.master, fourth=sec.slave
         или
    
         fileinfo:
    
         dd   16           ; 16 = ЗАПУСТИТЬ ПРОГРАММУ
         dd   0x0          ; не используется
         dd   param        ; 0 или указатель на строку с параметрами (max 256 байт)
         dd   0x0          ; не используется
         dd   0x10000      ; память для работы ОС - 16384 байта
    
         db   '/HD/1/MENUET/APPS/FIRE',0
         ; строка с путем к файлу, заканчивается нулем (ASCIIZ)
    
         результат: eax = pid или 0xfffffff0+ ошибка
  • Ну про это все знают.
    Однако я заглядывал, кажется, в FAT32.INC, там есть код для дополнительных подфункций типа File append, Create directory. Если они работают, это мог бы быть праздник. Надо будет потестить по свободе.
  • willow
    Они-то, может быть, и работают, но только для FAT32 (или для FAT16 тоже?). А вот для FAT12 (рам-диск) их вроде бы нет... А надо!
  • Ну, все равно на RD много не загонишь, да и "менее перманентны" там изменения. Конечно, хотелось бы для все типов дисков такие возможности...
  • Who is online

    Users browsing this forum: No registered users and 3 guests