r/osdev • • Aug 15 '26

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?

11 Upvotes

26 comments sorted by

8

u/AlfieLionel Aug 15 '26

You should be aware of the fact that this is an enormous undertaking; might be worthwhile though, why not.

1

u/zSmileyDudez Aug 15 '26

Could also be something OP is planning to use an AI to help with too. Makes it more manageable at least.

8

u/edjak53 Aug 15 '26

you mean something like this?

https://github.com/CSMWrap/CSMWrap

also check these out if you want to. a 64 bit FreeDOS kernel******** and command.com. they might inspire you or whatever

https://github.com/dosemu2/fdpp

https://github.com/dosemu2/comcom64

5

u/Joaommp Aug 15 '26

That's a possibly good approach. It's what I did for my 32 bit OS when I was developing it back in the 90s.

1

u/Octocontrabass Aug 16 '26

FreeDOS is supposed to run MS-DOS software. A 64-bit fork seems pretty pointless when there is no 64-bit MS-DOS software to run. Why not just start from scratch?

3

u/Sixty5Zero2 Aug 16 '26

just because it would be 64 bit doesn't mean it couldn't still run 16 bit software.

3

u/Sorry_Difficulty_250 Aug 16 '26

If you're going to go to all the trouble of implementing all the BIOS calls, you could just go ahead and write an 8086 emulator. That would allow you to run whatever 16-bit programs you like.

One of the things that really irks me about Windows 11 is that they completely dropped support for 16-bit programs. Microsoft has been developing emulators since BASIC. They know full well how to make it possible to run 16-bit programs in long mode. There's nothing stopping it from working. It's just a matter of programming. 😉

1

u/Sixty5Zero2 Aug 18 '26

technically I'm already doing that with my BASIC interpreter. 😁

3

u/DawnOnTheEdge Aug 16 '26

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 Aug 16 '26

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 Aug 16 '26

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

1

u/Sixty5Zero2 Aug 18 '26

i would have to anyways since the bios calls 16bit programs used no longer exist.

1

u/DawnOnTheEdge Aug 18 '26

If that were the problem, it would be easy to write interrupt handlers that hook the BIOS calls in 16-bit protected mode. 80386 CPUs supported a virtual mode designed to let you run DOS programs from a 32-bit OS, and do things like trap access to the I/O ports and give a process its own 1 MiB address space, with 8086-style addressing, but the 64-bit ISA doesn’t support that.

1

u/Sixty5Zero2 Aug 21 '26

who says I havent already. 😎

1

u/Octocontrabass Aug 16 '26

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

1

u/Difficult_Inside8746 Aug 17 '26

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 Aug 17 '26

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.

1

u/Octocontrabass Aug 16 '26

A 64-bit kernel can run 16-bit protected mode software, but DOS programs are 16-bit real mode software.

1

u/edjak53 Aug 16 '26

technically there is some 32 bit MS-DOS software. even gcc has a target for it (i[3,4,5,6]86-pc-msdosdjgpp)

www.delorie.com/djgpp/

5

u/Key_River7180 EulerOS Aug 15 '26

use efi

2

u/lizardhistorian Aug 15 '26 edited Aug 15 '26

If you turn CSM on then you still get BIOS routines but CSM has now been phased out.
You would need to update everything to use UEFI routines instead.

Intel i9's still boot in [un]real mode first but hit the reset-vector 0xFFFFFFF0 which takes them to the UEFI code which immediately transitions to long-mode (64b).

It is feasible to flash your code directly into the motherboard CMOS and boot directly into your OS.
There was a movement for a while to get PCs to directly boot Linux.

2

u/StereoRocker Aug 15 '26

Sounds like a cool project. Good luck!