Subject: port-i386/3407: pc/at BIOS of recent days can boot from many drives.
To: None <gnats-bugs@gnats.netbsd.org>
From: None <koji@math.human.nagoya-u.ac.jp>
List: netbsd-bugs
Date: 03/29/1997 20:54:25
>Number:         3407
>Category:       port-i386
>Synopsis:       pc/at BIOS of recent days can boot from many drives.
>Confidential:   no
>Severity:       non-critical
>Priority:       high
>Responsible:    gnats-admin (GNATS administrator)
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sat Mar 29 04:20:02 1997
>Last-Modified:
>Originator:     Koji Imada - je4owb/2
>Organization:
Mathematics Group of Graduate School of Human
	Infomatics, Nagoya University, Japan.
>Release:        1.2_BETA
>Environment:
	
System: NetBSD bimota 1.2 NetBSD 1.2 (BIMOTA) #0: Fri Mar 28 07:10:55 JST 1997 koji@bimota:/mnt2/NetBSD/usr/NetBSD/src/sys/arch/i386/compile/BIMOTA i386


>Description:
	Old pc/at BIOS can boot only from first or second HDDs. But
	BIOS of recent days can boot from many drives. Limitation on
	openrd in sys/arch/i386/boot/sys.c may be out of date.

	This limitation remains in current of March 23, 1997.
>How-To-Repeat:
	Just plug 3 or 4 IDE HDD, or 2 IDE HDD and any SCSI HDD. Then
	type hd(3,a) or something like that in boot prompt. It can't
	boot from third or fourth drive.
>Fix:
	apply following diffs in /usr/src

*** ../../i386/boot/sys.c.orig	Fri Mar  7 20:30:24 1997
--- ../../i386/boot/sys.c	Sat Mar 29 20:46:17 1997
***************
*** 189,198 ****
  		* Look inside brackets for unit number, and partition	*
  		\*******************************************************/
  		if (*cp >= '0' && *cp <= '9')
! 			if ((unit = *cp++ - '0') > 1) {
! 				printf("Bad unit\n");
! 				return 1;
! 			}
  		if (!*cp || (*cp == ',' && !*++cp))
  			return 1;
  		if (*cp >= 'a' && *cp <= 'p')
--- 189,195 ----
  		* Look inside brackets for unit number, and partition	*
  		\*******************************************************/
  		if (*cp >= '0' && *cp <= '9')
! 			unit = *cp++ - '0';
  		if (!*cp || (*cp == ',' && !*++cp))
  			return 1;
  		if (*cp >= 'a' && *cp <= 'p')

>Audit-Trail:
>Unformatted: