can anyon see something wrong with it
it ends at wait_for_fdd
wait_for_fdd waits for the floppy irq
Code: Select all
unsigned int fdd_read(drive_geometry g,unsigned char drive){
fdd_wr_status rety;DMA_block info;unsigned char tmp;unsigned char secnum;
info.page=0xB;
info.offset=800;
info.length=512;
if (drive>1){rety.worked=0;return 0;}
fdd_motor_timer=0;
outportb(CcrReg,0);
rety.status=0x80;
if(fdd_seek(g.track,drive)==0){rety.worked=0;return 0;}
tmp=inportb(MsReg);
//test tmp
fdd_motor_on();
StartDMA(2,info,0x44);
//read sector command
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,0xE6);
//drive
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,drive);
//track
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,g.track);
//head
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,g.head);
//sector
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,g.sector);
//sector size
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,0x02);
//sectors to a track
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,0x12);
//gap length
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,0x1B);
//data length
if(fdc_send_byte_ready()==0){return 0;}
outportb(DtReg,0xFF);
//wait for floppy irq
fdd_done=0;
printf("8");
if(wait_for_fdd()==0){return 0;}
printf("9");
if(fdc_get_byte_ready()==0){return 0;}
tmp=inportb(DtReg);
if(fdc_get_byte_ready()==0){return 0;}
inportb(DtReg);
if(fdc_get_byte_ready()==0){return 0;}
inportb(DtReg);
if(fdc_get_byte_ready()==0){return 0;}
inportb(DtReg);
if(fdc_get_byte_ready()==0){return 0;}
inportb(DtReg);
if(fdc_get_byte_ready()==0){return 0;}
secnum=inportb(DtReg);
if(fdc_get_byte_ready()==0){return 0;}
inportb(DtReg);
fdd_motor_off();
return secnum;
}