6 changed files with 116 additions and 41 deletions
@ -1,6 +1,15 @@ |
|||||||
bcc -S main.c |
bcc -S main.c |
||||||
echo -e "jmp _main\n$(cat main.s)" > main.s |
echo -e "push bp |
||||||
|
mov bp,sp |
||||||
|
push 12[bp] |
||||||
|
push 10[bp] |
||||||
|
push 8[bp] |
||||||
|
push 6[bp] |
||||||
|
call _main |
||||||
|
add sp, 0x4 |
||||||
|
pop bp |
||||||
|
retf $(cat main.s)" > main.s |
||||||
sed -i '/.globl ___mkargv/d' ./main.s |
sed -i '/.globl ___mkargv/d' ./main.s |
||||||
sed -i '/.globl _environ/d' ./main.s |
sed -i '/.globl _environ/d' ./main.s |
||||||
sed -i '/.data/d' ./main.s |
sed -i '/^.data$/d' ./main.s |
||||||
as86 -b disk.out main.s |
as86 -b disk.out main.s |
||||||
|
Binary file not shown.
@ -1,33 +1,64 @@ |
|||||||
|
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 disk_service_read_data_from_disk(index, file_block_size, data_buffer, data_buffer_segment)
|
int stub(index, number_sectors, data_buffer, data_buffer_segment) |
||||||
long* index;
|
long* index;
|
||||||
long file_block_size;
|
long number_sectors;
|
||||||
void* data_buffer; |
void* data_buffer; |
||||||
int data_buffer_segment; |
int data_buffer_segment; |
||||||
{ |
{ |
||||||
//fseek ( disk, (index * SECTOR_SIZE ), SEEK_SET ); // SEEK_SET start offset at index 0 and move 1 * SECTOR_SIZE, and write here.
|
|
||||||
//int read = fread(data_buffer, 1, (file_block_size * SECTOR_SIZE), disk);
|
|
||||||
//return read;
|
|
||||||
#asm |
#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: |
lsfs_load_data: |
||||||
mov dl, [global_disk_identifier] |
mov ax, index |
||||||
mov WORD [DAPACK.lba_addr_dw_low], ax |
mov WORD [DAPACK.lba_addr_dw_low], ax |
||||||
mov WORD [DAPACK.blkcnt], 0x01
|
mov bx, number_sectors |
||||||
mov WORD [DAPACK.db_addr_segment], bx |
mov WORD [DAPACK.blkcnt], bx |
||||||
mov WORD [DAPACK.db_addr_offset], FSCI |
mov cx, data_buffer_segment
|
||||||
mov si, DAPACK ; address of "disk address packet" |
mov WORD [DAPACK.db_addr_segment], cx |
||||||
mov ah, 0x42 ; READ |
mov dx, data_buffer; |
||||||
mov dl, [global_disk_identifier]
|
mov WORD [DAPACK.db_addr_offset], dx |
||||||
int 0x13 |
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 ; This is always 16 bytes (0x10) |
DAPACK.dap_Size: db 0x10
|
||||||
.rev_byte: db 0x0 ; reserved byte, should always be zero |
DAPACK.rev_byte: db 0x0
|
||||||
.blkcnt: dw 0x0 ; int 13 resets this to # of blocks actually read/written |
DAPACK.blkcnt: dw 0x0
|
||||||
.db_addr_offset: dw 0x0 ; memory buffer destination address (0:7c00) |
DAPACK.db_addr_offset: dw 0x0
|
||||||
.db_addr_segment: dw 0x0 ; in memory page zero |
DAPACK.db_addr_segment: dw 0x0
|
||||||
.lba_addr_dw_low: dd 0x0 ; put the lba to read in this spot |
DAPACK.lba_addr_dw_low: dd 0x0
|
||||||
.lba_addr_dw_high: dd 0x0 ; more storage bytes only for big lba's ( > 4 bytes ) |
DAPACK.lba_addr_dw_high: dd 0x0
|
||||||
|
|
||||||
|
global_disk_identifier: db 0x80 |
||||||
|
|
||||||
#endasm |
#endasm |
||||||
|
}
|
||||||
|
|
||||||
|
int sec_stub()
|
||||||
|
{ |
||||||
|
return 42; |
||||||
} |
} |
Binary file not shown.
Loading…
Reference in new issue