GRUB's own stage-1.5 exists purely to solve the problem you're implementing here — 512 bytes isn't enough code, so the first sector's only real job is to INT 0x13 more sectors off disk and jump to them. The retry-with-disk-reset pattern you write is copied directly from real floppy-era bootloaders, since flaky drive controllers made single-attempt reads unreliable in production.