int data_from_disk(index, number_sectors, data_buffer, data_buffer_segment); int sec_stub(); int stub(index, number_sectors, data_buffer, data_buffer_segment); int stub(index, number_sectors, data_buffer, data_buffer_segment) long* index; long number_sectors; void* data_buffer; int data_buffer_segment; { #asm #define index 4[bp]; #define number_sectors 6[bp]; #define data_buffer 8[bp]; #define data_buffer_segment 10[bp]; push bp mov bp,sp pusha //mov ax, ds //call 0x0000:0x7C2A //mov ax, DAPACK //call 0x0000:0x7C2A mov ax, #DAPACK call 0x0000:0x7C2A 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 call 0x0000:0x7C2A 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 } int sec_stub() { return 42; }