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.
52 lines
1.4 KiB
52 lines
1.4 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;
|
|
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 10[bp];
|
|
#define data_buffer_segment 12[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
|
|
;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
|
|
}
|
|
|