|
If it helps you out, I use the following for all of
my low level stuff:
/*************** READ A SECTOR FROM SELECTED DEVICE
************************/
int read_sector(struct dinfo *_dinfo,unsigned int *buffer) { REGS regs; SREGS sregs; struct // INT86
packet structure
{ char packet_size; char reserved; unsigned int number_of_blocks; void far * buffer; unsigned long lba0; unsigned long lba1; } control; control.packet_size =
0x10;
control.reserved = 0; control.number_of_blocks = 1; control.buffer = (char far*) buffer; control.lba1 = 0; control.lba0 = _dinfo->lba; regs.h.ah =
0x42; // extended 'read'
of sector
regs.h.dl = _dinfo->device_number; regs.x.si = FP_OFF(&control); sregs.ds = FP_SEG(&control); int86x(0x13,®s,®s,&sregs); if(regs.h.ah ==
0) // check for success
return (TRUE); else { printf("\nError reading from Device %xh, Error code: %.2xh",_dinfo->device_number,regs.h.ah); return(FALSE); }; }; /************** WRITE A SECTOR TO THE SELECTED
DEVICE **********************/
int write_sector(struct dinfo *_dinfo,unsigned int *buffer) { REGS regs; SREGS sregs; int i; if (_dinfo->device_number ==
0x80)
{ printf("\nCannot write to device: 0x80 !!!!!!!!"); getch(); exit(0); }; struct // INT86
packet structure
{ char packet_size; char reserved; unsigned int number_of_blocks; void far *buffer; unsigned long lba0; unsigned long lba1; } control; gotoxy(1,1);
// display which sector is being written
printf("Processing : Writing sector: %lx",_dinfo->lba); control.packet_size =
0x10;
control.reserved = 0; control.number_of_blocks = 1; control.buffer = (char far*) buffer; control.lba1 = 0; control.lba0 = _dinfo->lba; regs.h.ah = 0x43; // 'extended write'
code
regs.h.al = 0x00; regs.h.dl = _dinfo->device_number; regs.x.si = FP_OFF(&control); sregs.ds = FP_SEG(&control); int86x(0x13,®s,®s,&sregs); if(regs.h.ah ==
0)
return(TRUE); // check if OK else { printf("\nError writing to Device %xh, Error code: %.2xh",_dinfo->device_number,regs.h.ah); return(FALSE); }; }; |
- [temp t13] Reading sectors with Int 13h d-fence
- Jas
