You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

50 lines
1.3 KiB

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
}