|
From: Mike L. <Mi...@ml...> - 2002-09-30 16:08:45
|
Following some recent changes to bochs/bios a problem was noticed whereby
freeldr stopped working.
This was traced by the efforts of Christophe Bothamy to an error in
freeldr/arch/i386/biosdisk.S
the code currently reads
EXTERN(_BiosInt13ReadExtended)
.code32
pushal
/* Get parameters */
movl 0x24(%esp),%eax
movl %eax,_int13_extended_drive
movl 0x28(%esp),%eax
movl %eax,_packet_lba_sector_number
movl 0x2c(%esp),%eax
movw %ax,_packet_sector_count
movl %eax,_int13_extended_sector_count
movl 0x30(%esp),%eax // Get buffer address in
eax
shrl $4,%eax // Make linear address
into segment
movw %ax,_packet_transfer_buffer_segment // Save segment
movl 0x34(%esp),%eax // Get buffer address in
eax
andl $0x0f,%eax // Make linear address
into offset
movw %ax,_packet_transfer_buffer_offset // Save offset
The 34 in the third line from the end needs to be 30.
I have confirmed that with this change freeldr can again be booted from a
hard disk with the current CVS version of bochs.
regards
Mike Lerwill
|