On Thu, 2008-03-27 at 02:37 -0400, Pavel Roskin wrote:
> Even though int 13 returns in the original code (I can see it by  
> modifying video memory from the real mode), something get corrupted,  
> and GRUB fails to return to the protected mode.

As it turns out, BIOS writes 0 to one byte at 0x8403, which is in the
code of prot_to_real.  That happens if the pointer for
grub_biosdisk_get_cdinfo_int13_extensions() is presented in %ds:%si as
0x6000:0x8000.  If I put 0x6001:0x7ff0 there, 0x83f3 is corrupted.
Generally, 0x0000:(%si + 0x0403) is replaced with 0.

If we use the form with minimal offset, 0x6800:0x0000, then 0x0403 would
be corrupted, but this is in the BIOS area, so it's probably what BIOS
really was meant to do.

I've seen in on two machines, both with AMD processors in Socket A, VIA
chipset and AWARD BIOS.

-- 
Regards,
Pavel Roskin


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to