On Sat, Nov 14, 2009 at 01:48:00PM +0100, Vladimir 'phcoder' Serbinenko wrote: > Robert Millan wrote: > > I'm wondering how come the i386-qemu port works if none of its > > initialization code takes into account gate A20. Does this > > mean it's supposed to be already disabled in initial CPU state, > > and only enabled by BIOS? > > > > Or maybe the code only works by chance and would break unexpectedly > > in specific situations? > > > > > Without disabling A20 even and odd mibibytes will be squashed together. > Following code can check A20: > *((volatile grub_uint8_t *) 0x200000) = 0; > *((volatile grub_uint8_t *) 0x300000) = 1; > if (*((volatile grub_uint8_t *) 0x200000)) > grub_printf ("Expect bugs\n"); > else > grub_printf ("You're safe\n");
Yeah, in fact we have gate_a20_check_state() to check for this, but only in i386-pc. I find it surprising that i386-qemu works at all without it. I guess it only works because the high mem area that would overlap with our code in 0x8200 is never used. I'll look into this... -- Robert Millan The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and how) you may access your data; but nobody's threatening your freedom: we still allow you to remove your data and not access it at all." _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel