43 comments

[ 2.9 ms ] story [ 88.7 ms ] thread
Love the test case "but can you run Doom on it?" Great work!

Personally I'd like to see a homebrew OS that attempts some kind of compatibility with 16-bit Windows, with some modern design/conveniences (sortof a ReactOS for the 3.11 world). It seems like people make either 8 bit or 32 bit OSes. Maybe I'm not searching the right terms. Anyone know of anything, or a starting point?

Doesn't dosbox do this?
Nope
You can run Windows 3.x in Dosbox, Dosbox can't run Windows 3.x compatible binaries directly though.
DOSbox will run Windows 3.x.

I’ve seen people running classic Windows games (pre-directX stuff) on a Raspberry Pi using this trick.

AFAIK you can run 16 bit Windows programs in Wine.
Yes I was about to give that advice, Wine handles 16 bit games pretty well
Thanks, I'll check it out for some ideas!
There is no copy protection for 16-bit Windows.

And 16-bit emulators exist.

I wasn't asking about an emulator or how to pirate Windows. I was asking if there are any 16 bit homebrew OSes (with Windows compatibility a plus). Emulation might be a starting point, though. Do you have a link to any?
Thanks! I was going to go similar path you mentioned. Not 16-bit but in a way that is exe-like binaries and development with Visual Studio.

But it seemed to me that it is easier to support ELF binaries. And OSDev has great articles about elf files, binutils, cross-compilers, etc..

can't believe I never checked OSDev before... what a trove of info! I'll spend a while digesting there, thanks!
It's a pretty traditional "Hell, O World" program these days. ;)
(comment deleted)
Having lua on it is a great way to help spark more interest! Good call.
Yeah, and Lua is also great at dependencies. It doesn't depend anything :)
Nice work! But one question, what’s up with the naming scheme? Some functions are camel case, other are not. It seems like variables are camel case, but not all of them. And types are whatever it’s called when you capitalize each word, but some have underscores. What’s the reasoning?
Thanks! In fact, I prefer camel case for functions. You must be saying this for HashTable and List functions. I came from C++ world (where i name classes Pascal case and functions camel case). I wanted to group HashTable functions together like a class and named them that way. Yeah, it ended up being inconsistent unfortunately. I named structs in PascalCase.
This is awesome. How long did it take you and how familiar were you with the low-level details before you started?
Thanks. I think it would take 8 months night works. But it took longer because of breaks. I was always interested in low-level stuff especially about syscalls (how they jump to kernel from userspace). So, I was familiar with syscall internals and memory protection. But I learnt all including how paging is done in x86 when I was writing Soso thanks to OSDev.
Any books or other resources you used for guidance?
Nice job ozkl! Cool to see another OS being built in Qt Creator :)

Your generic DOOM looks really easy-to-port, gonna try it ASAP: https://github.com/ozkl/doomgeneric

Thanks! Yeah it is my favorite editor and the os is entirely written in it :) In fact, doomgeneric is created just for Soso in order to port easily.
Nice. Reminds me of the opengl32.dll's that were made to be only just enough to run GLQuake.

What made 4Mb pages easier than 4Kb?

By using 4Mb pages, we can skip one step which is page tables.

In other words, Page Directory points directly to a 4Mb Page Frame. In 4Kb mechanism, Page Directory points to a Page Table which then points to a 4Kb Page Frame.

Nice. Why 32bit, not 64bit? I don't program much assembler - but after seeing how much simpler (sane) 64bit is (amd64), I'd have to be really motivated to do a hobby project in 16 or 32bit (for x86). So curious about that choice in today's hw world, where you'd have to hunt for real 32bit x86 hw.
I'd like to hear from OP also. But in my experience, x86 documentation is much more wide spread and available esp regarding system startup.
I chose x86 because I wanted to try the os in my ancient PCs like a Celeron 333MHz. And articles I was reading at the start was for 32bit.
That makes sense. It's been so long since I've seen a 32bit x86 (apart from single board industrial type stuff) - that I didn't really consider anyone would keep one around... Then again, we do have our old commodore vic 20 in a cupboard somewhere...
IIRC, you can't run 16bit apps in x86-64 without virtualization.
But can it run Do... ...oh wait.

Cool project!

This looks like awesome work. Will be studying the source to learn about how it works. Serious code envy for people who take the time and effort to build OS'es like this.

Could see this having potential on SBCs and usage in IOT/PLC applications.

That's really nice, I enjoyed reading the code.