[HN Gopher] Writing FreeDOS Programs in C
       ___________________________________________________________________
        
       Writing FreeDOS Programs in C
        
       Author : AlexeyBrin
       Score  : 75 points
       Date   : 2025-11-02 13:43 UTC (9 hours ago)
        
 (HTM) web link (www.freedos.org)
 (TXT) w3m dump (www.freedos.org)
        
       | dardeaup wrote:
       | Curious as to whether there are any real-world use cases for
       | doing this (other than curiosity) in DOS. If so, I'd love to hear
       | about them.
        
         | grg0 wrote:
         | I have it on my to-do list to install FreeDOS on bare metal to
         | set up a retro gaming box. Tried once, but for some reason the
         | installer failed writing to disk. Anyway, if anyone is making
         | new FreeDOS games, I'll gladly pay for them, and it'll give me
         | an excuse to go down that avenue again.
        
           | dlcarrier wrote:
           | If enabling CSM in your BIOS isn't an option or isn't enough
           | for FreeDOS, there is a translation layer that can get it to
           | run on UEFI hardware: https://github.com/FlyGoat/CSMWrap
        
             | grg0 wrote:
             | That had not occurred to me and I'm also not sure. FreeDOS
             | was able to boot just fine into the live environment. It
             | was the disk part that failed.
        
             | 1313ed01 wrote:
             | OK, I just posted a comment saying FreeDOS will no longer
             | run on hardware because of lack of BIOS support, but that
             | might change things I guess. Hope it can be made to work.
             | 
             | Another big problem for FreeDOS is the lack of sound card
             | support. I do not know if anyone has solved that yet.
        
         | comprev wrote:
         | I used FreeDOS once to run ancient software which controlled an
         | industrial size oven. The client was having an ever increasing
         | challenge of sourcing IDE disks (in 2008) so I was contracted
         | to find a solution.
         | 
         | Eventually we settled on industrial PCs, solid state media and
         | FreeDOS.
         | 
         | It was significantly cheaper than replacing the oven at PS1M
         | each.... in 50 of their factories worldwide.
        
           | LeFantome wrote:
           | Lots of solid state to IDE adapties out there too. But great
           | example.
        
             | anthk wrote:
             | An IDE->CF one would have been cheap enough.
        
         | kragen wrote:
         | MS-DOS was a reasonable bootloader for Linux and Windows 95; I
         | imagine FreeDOS might be a better one if you wanted to do hobby
         | OSDev. Historically you could get hard real time performance
         | for things like controlling steppers from your parallel port
         | under MS-DOS, but nowadays you'd just use Freeduino or an
         | iCE40. Also maybe brushless motors.
        
           | 1313ed01 wrote:
           | FreeDOS is no good at all for booting anymore, since BIOS
           | support is increasingly rare. No way to boot FreeDOS (or MS-
           | DOS) from UEFI. And of course also no point in trying to run
           | it on ARM or any other non-x86 CPU. Looks like the future for
           | FreeDOS will be to run in virtual machines only. A bit sad,
           | since running FreeDOS on the bare metal of a 21st century
           | computer (even one from 10-20 years ago) has been a nice way
           | to experience just how fast modern hardware is.
        
             | anthk wrote:
             | https://sourceforge.net/p/freedos/mailman/message/59108825/
             | 
             | There's mUEFIrcate for that.
        
         | 1313ed01 wrote:
         | I hobby-code for DOS, partly because of nostalgia, but much
         | also because it (specifically DOSBox, or DOSBox-X) is such a
         | fantastic and stable virtual machine. No one is going to
         | deprecate even some minor part of the API. And some emulators
         | give you fun features like allowing any screen resolution to be
         | set up to run in fullscreen on a modern monitor (exposed using
         | standard VESA API inside of DOS).
         | 
         | There are some other retro computer or consoles that could
         | probably be just as useful for this. But DOSBox (as well as
         | QEMU+FreeDOS, for those that prefer that) are nice because they
         | have fully open source implementation from the CPU-level up to
         | the user utilities, so there is no need to mess with dodgy ROM
         | downloads or such to get things working.
        
         | actuallyalys wrote:
         | I suppose there could be a use for programming for computers
         | that would otherwise be ewaste, although I'm not sure how much
         | ewaste is out there that can run DOS but not, say, Linux or a
         | BSD. Lots has already been trashed or recycled, and my
         | impression is that retrocomputing enthusiasts are thinning out
         | the market as well.
        
       | Dwedit wrote:
       | Is there really a difference between writing a DOS program and
       | writing a FreeDOS program? You just need a period-accurate
       | compiler that can target DOS. Maybe OpenWatcom, maybe DJGPP.
       | 
       | With HXDOS, you can also write a Win32 console-mode program and
       | run it on DOS. 7-zip is an example of a program compatible with
       | HXDOS.
        
         | johannes1234321 wrote:
         | The "difference" is, that this is the FreeDOS project, thus
         | they focus on that environment.
        
           | QuercusMax wrote:
           | I confess I don't know anything about FreeDOS, but are they
           | trying to evolve DOS for the future, or just make a free bug-
           | for-bug compatible version? Those are very different things.
        
             | johannes1234321 wrote:
             | I think the goal is compatibility, but not being afraid of
             | extensions (like power management support and some other
             | "modern" hardware features)
             | 
             | In the context of this tutorial: They use their own "fed"
             | editor.
        
         | WalterBright wrote:
         | The Digital Mars compiler for DOS is available for free.
         | 
         | https://www.digitalmars.com/
        
           | kragen wrote:
           | But the GCC, OpenWatcom, and DJGPP compilers the FreeDOS
           | folks recommend are additionally free software, which is of
           | real value to some of us. Zortech C had a reputation for
           | producing better code IIRC, and it could run on an 80286,
           | which I'm not sure the others can?
        
             | 1313ed01 wrote:
             | I guess it made a lot of sense to implement compilers in
             | 32-bit protected mode to get more space to work with
             | easier? Free Pascal's compiler also requires 32-bit even if
             | it can generate 16-bit DOS code as well (at least when
             | cross-compiling from some other OS; I have not tried to
             | cross-compile from DOS 32-bit compiler to DOS 16-bit
             | executable).
             | 
             | Some people (and by that I mean Debian people; not sure
             | about anyone else) disagree about OpenWatcom being free
             | software. The license has some unusual requirement(s).
             | There has been talk for a long time about possibly fixing
             | that, but I do not know how on track that is (or how much
             | it matters, in practice): https://github.com/open-
             | watcom/open-watcom-v2/discussions/27...
        
               | WalterBright wrote:
               | I developed on a 32 bit machine because of memory
               | protection. Memory corruption resulted in seg faults,
               | while in 16 bit real mode memory corruption would
               | scramble your hard disk.
               | 
               | I ran all the test suites on protected machines. Only
               | when everything was perfect did I run the programs in
               | real mode DOS.
               | 
               | Protected mode memory is the greatest advance ever in
               | computer hardware.
        
             | Narishma wrote:
             | I don't know about OpenWatcom but I used the original
             | Watcom on my old 286 just fine. Even the Windows 3.1 IDE
             | ran fine on it IIRC.
        
             | WalterBright wrote:
             | I don't remember when we transitioned to 32 bit DOS
             | extenders for the DOS compilers, but we never got any
             | pushback for that. Developers all used 386 computers.
             | 
             | I remember attending a compile panel at one of the SDWest
             | conferences. The panel members were myself, representing
             | Zortech, along with representatives from Borland, Watcom,
             | and Microsoft.
             | 
             | The first question was "do you sell a version that will
             | work on a floppy disk only computer?" One of the other
             | panelists responded with yes, we do. He went on to describe
             | how the various bits could be distributed among multiple
             | floppies, and of course it involved a lot of shuffling
             | floppies in and out.
             | 
             | I was next. I replied, "Yes, we have a version that does
             | it! It costs $200 extra and comes with a hard disk drive!"
             | 
             | That got a huge laugh, and that was the end of that
             | question. I never heard it again from anybody. Sometimes,
             | it's just time to move on!
        
       | sgt wrote:
       | Vibe coders are just going to be staring at this and go...
       | where'd you get that blue mode in Cursor?
        
         | grg0 wrote:
         | From the soydev extension.
        
       | hedora wrote:
       | Tangentially related: I was getting awful screen tearing in
       | dosbox with a gl @ 4K@60hz rendering target.
       | 
       | Switching to 1080p@240Hz fixed it. The problem was that 60Hz was
       | close to, but not the framerate the old game asked for.
        
         | Narishma wrote:
         | The typical 320x200 mode that games used back then ran at 70Hz.
        
       | 1313ed01 wrote:
       | To the list of compiler listed I want to mention this one as
       | well, that is my compiler of choice for 16-bit C in (Free)DOS
       | these days (because it has a MIT license, it's very small, and it
       | runs great inside of DOS itself so no need to mess with cross-
       | compilation and I know if I have an environment like FreeDOS or
       | DOSBox set up I can both compile and run my code, and I will
       | never have to re-install or reconfigure anything when moving
       | between different host systems):
       | 
       | https://github.com/microsoft/MS-DOS/tree/main/v4.0/src/TOOLS
       | 
       | (Not only Microsoft's C compiler in that directory, but also
       | MASM, MAKE, and a bunch of other tools. 1-2 MB of files and you
       | have an entire toolchain for 16-bit DOS.)
        
         | kragen wrote:
         | Interesting, "All files within this repo are released under the
         | MIT License as per the LICENSE file stored in the root of this
         | repo," but did they include the source for the toolchain? I may
         | be looking in the wrong place...
        
           | 1313ed01 wrote:
           | No, but that MIT license does not say anything about sharing
           | the source code, so just sharing the binaries should be fine.
           | (Not a lawyer.)
           | 
           | ( * Also thanks for mentioning MIT. My comment said BSD, but
           | I fixed that now.)
        
             | kragen wrote:
             | Yeah, I didn't mean it was illegal, just that you might
             | have an unnecessarily hard time fixing compiler bugs and
             | understanding how the toolchain works.
        
               | 1313ed01 wrote:
               | Yes, of course. Source code would be nice, but I gamble
               | on that there wasn't a terrible amount of bugs in that
               | compiler. It is version 5.10, so not the first 5.x
               | release, plus with the lack of good ways to distribute
               | patches back then we all know software tended to be
               | better tested. It also obviously works well enough to
               | compile DOS 4.0 (and a bunch of user tools that are
               | included) plus I have tried it already for some quite big
               | code-bases without noticing anything being broken.
               | 
               | I feel like any bugs can probably be worked around and
               | since it is C it is possible some things can be fixed by
               | adding some macros in the include-files. I have thought
               | of making some minor changes to the include-files to
               | modify some of the few things I noticed that are missing
               | from C89. I do not know if it is possible to make it 100%
               | C89 compliant or if the binaries would have to be patched
               | for that, but it seems like it already is 99% of the way.
               | 
               | * Since I can't comment on the comment to this post: Note
               | I said C89. Definitely not going to go for anything more
               | modern. Possibly add the standard integer size types from
               | C99, as those can be useful for more portable code. There
               | are other, bigger, compilers for more modern C versions
               | that can cross-compile to DOS (and also Free Pascal that
               | seems like a nice language for that).
        
               | kragen wrote:
               | Oh, yeah, you're definitely going to have a harder time
               | adding C99 support to it than to OpenWatcom, not to
               | mention C11, C17, and C23. Which matters if you're
               | writing new code.
        
       ___________________________________________________________________
       (page generated 2025-11-02 23:00 UTC)