int data_from_disk(index, number_sectors, data_buffer, data_buffer_segment); int disk_service_read_data_from_disk(index, number_sectors, data_buffer, data_buffer_segment); int disk_service_read_data_from_disk(index, number_sectors, data_buffer, data_buffer_segment) long index; long number_sectors; void* data_buffer; unsigned int data_buffer_segment; { #asm #define index 4[bp]; /* Note that this is a 32-bit argument. */ #define number_sectors 8[bp]; #define data_buffer 12[bp]; #define data_buffer_segment 14[bp]; push bp mov bp,sp pusha lsfs_load_data: mov ax, index mov WORD [DAPACK.lba_addr_dw_low], ax mov bx, number_sectors mov WORD [DAPACK.blkcnt], bx mov cx, data_buffer_segment mov WORD [DAPACK.db_addr_segment], cx mov dx, data_buffer; mov WORD [DAPACK.db_addr_offset], dx mov si, #DAPACK ; address of mov ah, #0x42 ; READ mov dl, [global_disk_identifier] int #0x13 popa pop bp ret DAPACK: DAPACK.dap_Size: db 0x10 DAPACK.rev_byte: db 0x0 DAPACK.blkcnt: dw 0x0 DAPACK.db_addr_offset: dw 0x0 DAPACK.db_addr_segment: dw 0x0 DAPACK.lba_addr_dw_low: dd 0x0 DAPACK.lba_addr_dw_high: dd 0x0 global_disk_identifier: db 0x80 #endasm }