mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-24 14:24:46 +02:00
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:
parent
babd516db4
commit
fba50f1c19
13
kernel/dsk.c
13
kernel/dsk.c
@ -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;
|
||||
|
@ -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, ®s);
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user