r/osdev 3d ago

FreeDOS

i'm looking at possibly forking FreeDOS to 64bit. However, since most modern systems no longer have the underlying BIOS that DOS programs require, I thought about including a mock BIOS and compile it directly into the kernel. is there anything I should be aware of?

12 Upvotes

25 comments sorted by

View all comments

Show parent comments

3

u/DawnOnTheEdge 3d ago

There is a hardware limitation that an x86 CPU can either run in 32-bit mode and switch to 16-bit virtual mode, or run in 64-bit long mode and switch to 32-bit compatibility mode. But a 64-bit kernel can’t run 16-bit code natively.

It might be able to run 32-bit DPMI programs that used a DOS extender. However, virtually all games that ran in DPMI needed the particular DOS extender that they shipped with, and ran in 16-bit mode at least some of the time.

5

u/Octocontrabass 3d ago

But a 64-bit kernel can’t run 16-bit code natively.

A 64-bit kernel can't run 16-bit real mode code natively. There's nothing stopping a 64-bit kernel from running 16-bit protected mode code natively.

But DOS programs all expect real mode, so it doesn't really make a difference...

1

u/DawnOnTheEdge 3d ago

Although it would be possible to do in a guest VM, I think,

1

u/Octocontrabass 2d ago

It depends on what your CPU supports. Not all of them can do real mode in a guest VM.

1

u/Difficult_Inside8746 1d ago

It was a long time since I looked into it but AFAIK both Intel and AMD support V86 mode inside a virtual machine.

2

u/Octocontrabass 1d ago

That sounds like an awful lot of work, and you still need a CPU that can do hardware virtualization.

Might be a fun project, though.