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
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 |
|
}
|
|
|