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