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,&regs,&regs,&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,&regs,&regs,&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);
 };
};
 
 

Reply via email to