FDOS / kernel

FreeDOS kernel - implements the core MS-DOS/PC-DOS (R) compatible operating system. It is derived from Pat Villani's DOS-C kernel and released under the GPL v2 or later. Please see http://www.freedos.org/ for more details about the FreeDOS (TM) Project.
http://kernel.fdos.org/
GNU General Public License v2.0
799 stars 143 forks source link

8086+ or 386+ ? #66

Open toncho11 opened 2 years ago

toncho11 commented 2 years ago

Hi,

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

lss4 commented 1 year ago

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.

ecm-pushbx commented 1 year ago

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 1 year ago

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...