FDOS/kernel

8086+ or 386+ ?

toncho11 opened this issue · 3 comments

Hi,

How do I know which version of FreeDOS 1.3 to download : 8086+ or 386+ ?
I need the 8086+ version.

lss4 commented

Sorry for a late bump on this issue.

I'm not sure about the kernel build variant that comes with the stable/testing FreeDOS ISOs, but I think for the time being you should stick to 8086 kernel builds.

I've built 386 kernels before and it had some issues. I think 386 kernels run in protected mode by default preventing memory managers from loading properly, and some system diagnostic utilities requiring real mode refused to run citing I'm running Windows, which is just one of the many ways to call a system operating in Protected Mode instead of Real Mode.

Sorry for a late bump on this issue.

I'm not sure about the kernel build variant that comes with the stable/testing FreeDOS ISOs, but I think for the time being you should stick to 8086 kernel builds.

8086 builds run everywhere, so this is good advice.

I've built 386 kernels before and it had some issues. I think 386 kernels run in protected mode by default preventing memory managers from loading properly,

This is wrong. 386 builds only use 386+ instructions and registers. The kernel still runs in Real or Virtual 86 Mode (depending on what memory managers you do or do not load), also meaning it's in 16-bit code segments. The compiler or assembler emits a32 (67h) and o32 (66h) prefixes for each instruction that uses 32-bit address size or 32-bit operand size. The only difference that the kernel should have is how it is implemented itself, possibly including the protocols between different functions internal to the kernel.

lss4 commented

This is wrong. 386 builds only use 386+ instructions and registers. The kernel still runs in Real or Virtual 86 Mode (depending on what memory managers you do or do not load), also meaning it's in 16-bit code segments. The compiler or assembler emits a32 (67h) and o32 (66h) prefixes for each instruction that uses 32-bit address size or 32-bit operand size. The only difference that the kernel should have is how it is implemented itself, possibly including the protocols between different functions internal to the kernel.

Thanks for clarifying. Still, I did encounter some major issues with the 386 kernel and some TSRs, that it would freeze the system as it loads, or throw invalid opcode errors when using JEMM386. With 8086 kernel everything is working correctly.

I'm yet to determine the root cause of the issues I'm having with the 386 kernel but considering the performance gain is nearly negligible compared to the 8086 one... it's not a high priority...