Marcin Dalecki wrote: > Martin Nilsson wrote: > >> I'm trying to find out why I can't boot 5.2 from USB CDROM on >> Supermicro motherboards. (I have an old Gateway P3 that can!). >> >> I've found out that that only 0x20 of 0x4c sectors of the loader are >> read in and it therfor traps when executed. (read is only called once). >> >> load_notrunc: sub %dh,%cl # Update count >> push %eax # Save >> call read # Read it in > > > The fun will be ^^^^ here. The rest is self contained and > doesn't depend on CPU variant or periphery. >
I found the problem!
The bios trashes %cx when reading from USB CD but not when reading from ATAPI CD.
The attached patch fixes this and two other small nits in sys/boot/i386/cdboot/cdboot.s
Can somebody (jhb) commit this?
This probably affects all Phoenix-Award bios equipped boxes. My old Gateway with AMI BIOS works as it should.
/Martin
*** cdboot.s-original Sun Jan 11 22:16:45 2004
--- cdboot.s Sun Jan 11 22:16:13 2004
***************
*** 165,171 ****
#
mov DIR_SIZE(%bx),%eax # Read file length
add $SECTOR_SIZE-1,%eax # Convert length to sectors
! shr $11,%eax
cmp $BUFFER_LEN,%eax
jbe load_sizeok
mov $msg_load2big,%si # Error message
--- 165,171 ----
#
mov DIR_SIZE(%bx),%eax # Read file length
add $SECTOR_SIZE-1,%eax # Convert length to sectors
! shr $SECTOR_SHIFT,%eax
cmp $BUFFER_LEN,%eax
jbe load_sizeok
mov $msg_load2big,%si # Error message
***************
*** 182,189 ****
mov $MAX_READ_SEC,%dh
load_notrunc: sub %dh,%cl # Update count
push %eax # Save
call read # Read it in
! pop %eax # Restore
add $MAX_READ_SEC,%eax # Update LBA
add $MAX_READ,%ebx # Update dest addr
jcxz load_done # Done?
--- 182,191 ----
mov $MAX_READ_SEC,%dh
load_notrunc: sub %dh,%cl # Update count
push %eax # Save
+ push %cx # Supermicro BIOS trashes cx when
booting USB CD
call read # Read it in
! pop %cx # Restore
! pop %eax
add $MAX_READ_SEC,%eax # Update LBA
add $MAX_READ,%ebx # Update dest addr
jcxz load_done # Done?
***************
*** 460,465 ****
--- 462,468 ----
mov twiddle_chars,%bx # Address table
inc %al # Next
and $3,%al # char
+ mov %al,twiddle_index # Save index
xlat # Get char
call putc # Output it
mov $8,%al # Backspace
_______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"

