mirror of
https://github.com/FDOS/kernel.git
synced 2025-12-13 16:04:10 +01:00
This commit contains a number of changes:
1. int86x gets and sets struct SREGS members ds and es
2. int86x patches itself (SMC) using a cs: segment override prefix,
as ds may no longer equal cs.
3. int86x interrupt number is %7 rather than %5
4. int86x assembly part doesn't push and pop ds, it is handled by
the compiler instead (in practice it puts a push ss \ pop ds at the
end of the function to restore the near data segment).
5. int86 is implemented by calling int86x (with ds = es = 0)
6. findfirst, int2526readwrite, fat32readwrite also changed to use
int86x because they need to set ds. This used to be implied as the
same ds that the compiler already used by default.
7. Finally, haveLBA changed to set ds to 40h.
The inline assembly constraints for gcc-ia16 are documented in
ca89332092/gcc/doc/md.texi (L2379)