I'm looking into the source code of GRUB2 and try to understand why the code in boot.S load the diskboot.img (first sector of core.img) to address 0x70000 first, then copy it to 0x8000 using copy_buffer and jump there to continue execution. Why doesn't it load the image to 0x8000 directly?
There's a comment for #define GRUB_BOOT_MACHINE_BUFFER_SEG 0x7000: "The disk buffer MUST be 32K long and cannot straddle a 64K boundary." But the first sector only occupies 512 bytes.