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]"