Subject: Re: 720K floppy params?
To: Bill Sommerfeld <sommerfeld@orchard.medford.ma.us>
From: None <Mark_Weaver@brown.edu>
List: current-users
Date: 12/12/1993 14:04:42
> I occasionally need to read 720K dos floppies.

This patch was posted to the list a couple weeks ago.  I never tested
it (since I don't have any 720K floppies), but I keep my kernel
patched with it anyway.  Please let me (us) know if it works.  The
poster seemed to think it worked fine.

diff -c  ./sys/arch/i386/isa/fd.c.mhw1 ./sys/arch/i386/isa/fd.c
*** ./sys/arch/i386/isa/fd.c.mhw1	Sun Nov  7 04:07:12 1993
--- ./sys/arch/i386/isa/fd.c	Mon Dec  6 23:50:52 1993
***************
*** 83,89 ****
  	{ 15,2,0xFF,0x1B,80,2400,1,0,2 }, /* 1.2 meg HD floppy           */
  	{ 9,2,0xFF,0x23,40,720,2,1,2 },	/* 360k floppy in 1.2meg drive */
  	{ 9,2,0xFF,0x2A,40,720,1,1,2 },	/* 360k floppy in DD drive     */
! 	{ 9,2,0xFF,0x2A,80,1440,1,0 },	/* 720K drive. PROBABLY WRONG	*/
  };
  
  #define DRVS_PER_CTLR 2
--- 83,89 ----
  	{ 15,2,0xFF,0x1B,80,2400,1,0,2 }, /* 1.2 meg HD floppy           */
  	{ 9,2,0xFF,0x23,40,720,2,1,2 },	/* 360k floppy in 1.2meg drive */
  	{ 9,2,0xFF,0x2A,40,720,1,1,2 },	/* 360k floppy in DD drive     */
! 	{ 9,2,0xFF,0x2A,80,1440,1,2,2 },/* 720K drive. PROBABLY WRONG	*/
  };
  
  #define DRVS_PER_CTLR 2
***************
*** 338,344 ****
  	fd = &fd_data[fdu];
  	fdc = fd->fdc;
  	fdcu = fdc->fdcu;
!  	/*type = FDTYPE(minor(bp->b_dev));*/
  
  	if ((fdu >= NFD) || (bp->b_blkno < 0)) {
  		printf("fdstrat: fdu = %d, blkno = %d, bcount = %d\n",
--- 338,344 ----
  	fd = &fd_data[fdu];
  	fdc = fd->fdc;
  	fdcu = fdc->fdcu;
!  	fd->ft = &fd_types[FDTYPE(minor(bp->b_dev))];
  
  	if ((fdu >= NFD) || (bp->b_blkno < 0)) {
  		printf("fdstrat: fdu = %d, blkno = %d, bcount = %d\n",
***************
*** 485,496 ****
  	int	flags;
  {
   	fdu_t fdu = FDUNIT(minor(dev));
!  	/*int type = FDTYPE(minor(dev));*/
  	int s;
  
  	/* check bounds */
  	if (fdu >= NFD) return(ENXIO);
! 	/*if (type >= sizeof(fd_types)/sizeof(fd_types[0]) ) return(ENXIO);*/
  	fd_data[fdu].flags |= FD_OPEN;
  
  	return 0;
--- 485,496 ----
  	int	flags;
  {
   	fdu_t fdu = FDUNIT(minor(dev));
!  	int type = FDTYPE(minor(dev));
  	int s;
  
  	/* check bounds */
  	if (fdu >= NFD) return(ENXIO);
! 	if (type >= sizeof(fd_types)/sizeof(fd_types[0]) ) return(ENXIO);
  	fd_data[fdu].flags |= FD_OPEN;
  
  	return 0;
--------------------------------------------------------------------
Email: Mark_Weaver@brown.edu           | Brown University
PGP Key: finger mhw@cs.brown.edu       | Dept of Computer Science

------------------------------------------------------------------------------