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

Reply via email to