Thats sort of how I have it now.. here is the flow I'm using as well as my thoughts (correct where wrong)..
Notes:
I assume that having the BPB is essential for two reason, one some bioses wont boot usb-fdd emulation without it (proven).. and two it is necessary to allow
the bioses function 08h to obtain the drive geometry info without probing. It is safe to leave it there for NON-FDD boots as it'll just be ignored.. IE hdd, usb-hdd, cdrom no emulation (mostly proven).
Stage#1
1) gets drive number in DL
2) if drive number < 80h
3) ; must be floppy (real, emulated USB-FDD or el-torito FDD-CDROM)
4) Obtain drive info from bios 08h/13h ; I presume this function in this case has relied on the BPB being present (which it is)
5) If that fails, use the probing loop assuming 2 heads, 80 cyl and working out SPT..
6) store these values to our info space for loading and stage#2... as well as a flag to indicate the mode..
7) else

; drive number is >= 80h so it must be a real HDD or USB-HDD, or el-torito HDD-CDROM)
9) Check for int 13h extensions
10) if extensions present
11) obtain int13h extensions drive geometry info
12) ; some times int13h extensions present but drive info fails.. in which case jump to else block (legacy fallback)
13) store these values to our info space for loading and stage#2.. also storing a flag to indicate which mode we're in..
14) else
15) fallback to getting drive info from bios 08h/13h
16) store these values etc.. etc.... as well as a boot/disk reading mode value..
17) end if
Stage#2 will obtain all these params and the boot mode from the info space in mem that stage 1 setup.. so it can in theory just safely use the same method..
So here are 2 questions...
1) How would I go about implement PXE/network booting into this flow (tbh i haven't read up anything on it yet)
and 2) Surely if the BPB was present in the stage 1 loader, the bios would load its values from there and even if the 512byte boot code was removed or replaced the bios would still be able to access this disk as it should've obtained the info it needs already? either when it loads the boot-sector, or perhaps when calling func 08h?
It seems to me as if that flow should handle any boot-scenario, based on the fact that the load-sectors code also takes into account if the reported sector size
is not 512 byte (it'll do the necessary divs to say work out how many 2kb sectors to load... I've also made sure that all resources, stage2, kernel etc are multiples of 2kb not 512byte to ensure that it can be loaded under either size sector)