G'DOS is a portable, multi-architecture ROM-native hobby OS that also functions as a bootloader for other software, such as Linux. It is being developed mainly to power my various homebrew computer projects.
Here are some highlights of what I've implemented so far:
- ELF binary loading
- Dynamic memory allocation
- Syscall interface
- Custom libc
- Hardware detection & driver subsystem
- Linux kernel bootloader
- G'Shell, the command line interface
- G'Mon, the scriptable memory monitor
G'DOS initially started as G'Mon, the machine language monitor I wrote for use on my various homebrew computer projects. Each time I began working with a new piece of hardware, I had to port the its 100% assembly source over the the new machine. After 3 architectures, I figured I had spent more time porting it than I did actually working on it. This angers the programmer.
So I rewrote the entire thing in C instead, and adopted the helpful strategy of "throw everything you can't possibly write in C into a special folder so you can deal with it later" approach. From there it grew out of control like some sort of strange mold, into what G'DOS is today.
Now just like a strange mold, G'DOS continues to grow. It still remains my main project, software-wise at least.
If you just want to try G'DOS out, then I recommend targeting emu68k platform for the m68k architecture, since that's the platform I can provide the most support for.
After building and installing the simulator, you can configure G'DOS using
./config.sh ARCH=m68k PLATFORM=emu68k
then to build and launch the simulator use
make && make run
after the window opens, click Run
and you should see G'DOS booting up.
This is the current list of supported platforms and architectures supported by G'DOS
- m68k
- Blitz
- BSVC
- mcf5208
- arm
- versatilepb
- ppc
- psim
To build, just take the arch and platform name and run the config script with them
./config.sh PLATFORM=<platform> ARCH=<arch>
config.sh just saves any arguments it receives to a hidden .config file in the build directory for the makefile to grab from. This is just a small convenience thing so that you don't have to append PLATFORM
and ARCH
every time you make a target.
To build the rom image, just make target all:
make all
The other default targets are clean
, which deletes all the generated object files, and distclean
, which does the same thing as clean, but also deletes the config file generated by config.sh
Each architecture supports at least one simulator platform. When targeting a simulated platform, you can make run
and the simulator will be launched with the generated binary running.
Out of the previous platform list, these are the ones that are simulators. also listed is the name of the simulator used
- m68k
- BSVC : BSVC
- arm
- versatilepb : QEMU
- ppc
- psim : GDB & psim
A porting guide is planned at some point soon.
If by some chance you have homebrew hardware you want to port G'DOS to, then by all means, contributions are welcome.
- NotArtyom - Things that do stuff - Website