Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: A simple Unix-like operating system that runs Doom (github.com/ozkl)
233 points by ozkl on Sept 7, 2019 | hide | past | favorite | 42 comments


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?


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!


And deeper down the rabbithole: http://wikichip.org


HX DOS Extender can run some 16-bit and 32-bit Windows apps in a MS-DOS or even FreeDOS environment.

https://github.com/Baron-von-Riedesel/HX

https://web.archive.org/web/20141003032346/http://www.japhet...


It's a pretty traditional "Hell, O World" program these days. ;)


Doesn't really address any of your questions, but may serve as a starting point: https://hackernoon.com/win3mu-part-1-why-im-writing-a-16-bit...


That's an interesting approach and might work, thanks!


I personally couldn't get it to run, which was quite a disappointment!


AFAIK you can run 16 bit Windows programs in Wine.


Thanks, I'll check it out for some ideas!


Yes I was about to give that advice, Wine handles 16 bit games pretty well


Doesn't dosbox do this?


Nope


DOSbox will run Windows 3.x.

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


You can run Windows 3.x in Dosbox, Dosbox can't run Windows 3.x compatible binaries directly though.


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?



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


This is cool, based on the title I was expecting http://psdoom.sourceforge.net/


Exactly. I read the title as `A simple Unix-like operating system that runs on Doom`


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


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.


all i need, thanks


But can it run Do... ...oh wait.

Cool project!


Pure awesome




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: