fix bug 1789 and add some extra debug prints

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/branches/UNSTABLE@1089 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Kenneth J Davis 2005-01-09 11:25:44 +00:00
parent babd516db4
commit fba50f1c19
2 changed files with 20 additions and 3 deletions

View File

@ -673,6 +673,8 @@ STATIC WORD Genblkdev(rqptr rp, ddt * pddt)
struct gblkio FAR *gblp = rp->r_io;
bpb *pbpb;
DebugPrintf(("get params entry: spec=%X, type=%X, devattr=%X\n", gblp->gbio_spcfunbit,pddt->ddt_type,descflags));
gblp->gbio_devtype = pddt->ddt_type;
gblp->gbio_devattrib = descflags & 3;
/* 360 kb disk in 1.2 MB drive */
@ -680,18 +682,25 @@ STATIC WORD Genblkdev(rqptr rp, ddt * pddt)
gblp->gbio_ncyl = pddt->ddt_ncyl;
/* use default dpb or current bpb? */
pbpb = (gblp->gbio_spcfunbit & 1) ? &pddt->ddt_bpb : &pddt->ddt_defbpb;
/* Note: last 6 bytes of standard BPB may not be copied for
0x60 when rp->r_cat==8 in some versions of DOS eg MSDOS5,see rbil */
#ifdef WITHFAT32
if (rp->r_cat == 0x08) copy_size -= 6;
fmemcpy(&gblp->gbio_bpb, pbpb, copy_size);
#else
fmemcpy(&gblp->gbio_bpb, pbpb, sizeof(gblp->gbio_bpb));
fmemcpy(&gblp->gbio_bpb, pbpb, sizeof(gblp->gbio_bpb)-6);
#endif
/*gblp->gbio_nsecs = pbpb->bpb_nsector;*/
DebugPrintf(("get params dev spec=%X, type=%X, attrib=%X, media=%X, ncyl=%X\n",
gblp->gbio_spcfunbit, gblp->gbio_devtype, gblp->gbio_devattrib, gblp->gbio_media, gblp->gbio_ncyl));
break;
}
case 0x61: /* read track */
{
struct gblkrw FAR *rw = rp->r_rw;
int ret = Genblockio(pddt, LBA_READ, rw->gbrw_head, rw->gbrw_cyl,
int ret;
DebugPrintf(("read track: head=%X, cyl=%X, sect=%X, nsecs=%X\n", rw->gbrw_head, rw->gbrw_cyl,rw->gbrw_sector, rw->gbrw_nsecs));
/*int*/ ret = Genblockio(pddt, LBA_READ, rw->gbrw_head, rw->gbrw_cyl,
rw->gbrw_sector, rw->gbrw_nsecs, rw->gbrw_buffer);
if (ret)
return ret;

View File

@ -306,6 +306,7 @@ COUNT init_getdriveparm(UBYTE drive, bpb * pbpbarray)
return 5;
regs.a.b.h = 0x08;
regs.d.b.l = drive;
/* Note: RBIL suggests setting ES:DI to 0:0 to guard against BIOS bugs */
init_call_intr(0x13, &regs);
type = regs.b.b.l - 1;
if (regs.flags & FLG_CARRY)
@ -316,6 +317,8 @@ COUNT init_getdriveparm(UBYTE drive, bpb * pbpbarray)
type = 4; /* 5 and 4 are both 2.88 MB */
memcpy(pbpbarray, &floppy_bpbs[type & 7], sizeof(floppy_bpb));
((bpb *)pbpbarray)->bpb_hidden = 0; /* very important to init to 0, see bug#1789 */
((bpb *)pbpbarray)->bpb_huge = 0;
if (type == 3)
return 7; /* 1.44 MB */
@ -597,12 +600,17 @@ void DosDefinePartition(struct DriveParamS *driveParam,
pddt->ddt_defbpb.bpb_mdesc = 0xf8;
pddt->ddt_defbpb.bpb_nheads = driveParam->chs.Head;
pddt->ddt_defbpb.bpb_nsecs = driveParam->chs.Sector;
pddt->ddt_defbpb.bpb_nsize = 0;
pddt->ddt_defbpb.bpb_hidden = pEntry->RelSect;
if (pEntry->NumSect > 0xffff)
{
pddt->ddt_defbpb.bpb_nsize = 0;
pddt->ddt_defbpb.bpb_huge = pEntry->NumSect;
}
else
{
pddt->ddt_defbpb.bpb_nsize = (UWORD) (pEntry->NumSect);
pddt->ddt_defbpb.bpb_huge = 0;
}
/* sectors per cluster, sectors per FAT etc. */
CalculateFATData(pddt, pEntry->NumSect, pEntry->FileSystem);