Date: 09 Nov 96 15:08:34 EST From: Berend de Boer <100120.3121@CompuServe.COM> To: FreeBSD stable <freebsd-stable@freebsd.org> Subject: Follow on Atlantis board Message-ID: <961109200834_100120.3121_EHQ22-1@CompuServe.COM>
next in thread | raw e-mail | index | archive | help
Some more info:
in start.S (called immediately after booteasy passes control?) we added a
mov $0x0080, %edx
so the code looks like:
/* bootstrap passes us drive number in %dl */
mov $0x0080, %edx
cmpb $0x80, %dl
data32
jae hd
However in boot() in boot.c drive is still 0x333b.
After that we removed this line, and added it to the last lines of boot2.S:
mov $0x0080, %edx
movzbl %dl, %edx /* discard head (%dh) and random high bits */
pushl %edx
call EXT(boot)
Still in boot() drive was 0x333b... I thought i went crazy.
Next we added a printf(drive) immediately after the boot() int ret with the
above patch intact. We also had a printf before the dosdev = drive; line. Now
the first printf showed 0x0080, but the 2nd was 0x333b.
It seemed boot() was screwing up the stack somehow?? After some printf's
the following line screws the stack:
for(ret = 0; ret < N_BIOS_GEOM; ret ++)
bootinfo.bi_bios_geom[ret] = get_diskinfo(ret + 0x80);
I think it's get_diskinfo. But get_diskinfo seems too difficult for me to
investigate. Maybe some FreeBSD boot guru has an idea?
Groetjes,
Berend.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?961109200834_100120.3121_EHQ22-1>
