MOOSE is a 80s-style operating system. It can run on QEMU, Bochs, as well as real machines.
These instructions assume you are running MacOS with Homebrew installed. Feel free to adjust these commands so they can work on your Operating System.
The Makefile will automatically adjust if you are running on Linux. Users on Linux
only need to install nasm
, xorriso
and mtools
.
Most, if not all, virtual machines should work but we currently recommend QEMU. We also support Bochs.
Running this OS is relatively easy. Just install QEMU
brew install qemu
then run
cd moose-os
make run
And enjoy!
Please install Homebrew, then install the following dependencies.
First, tap NativeOS' i386 elf toolchain and install it. This is used to link and compile the project.
brew tap nativeos/i386-elf-toolchain
brew install nativeos/i386-elf-toolchain/i386-elf-binutils
brew install nativeos/i386-elf-toolchain/i386-elf-gcc
Next, install QEMU and NASM. QEMU is used to test the operating system in a virtual environment, and NASM is used to compile ASM files.
brew install qemu nasm
Finally, install GRUB. We use GRUB to make the ISO.
brew install i686-elf-grub
First, clone the repository.
git clone https://github.com/frogtheastronaut/moose-os.git
cd moose-os
Then, just type
make
And it should install and run QEMU. It also tells you if it can't find any dependancies.
This OS was tested on a 2009 HP PC equipped with VGA graphics and PS/2 input devices. While not all features have been exhaustively verified, a large majority function as intended.
BalenaEtcher was used to write the ISO to a USB, which boots and functions like a normal operating system.
Here is a list of features currently implemented in MooseOS. There will be more in the future.
320x200 256-colour graphics mode
Dock-based application launcher
Supports PS/2 keyboard and mouse interrupts, and also displays mouse on screen
Full IDT with 32 exception handlers
Applications include:
- terminal emulator (capable of some commands)
- a text editor
- file explorer.
Hertz-based tone generation through the PC speaker.
Supports writing to a .img file through ATA read/write operations.
It syncs the time with the RTC at first, and then uses the Programmable Interval timer to update the time.
Can load, parse and validate ELF32 executables.
Custom heap allocator (kmalloc
, kfree
, etc) and
4KBs of virtual memory with paging.
Custom filesystem with custom signature that you can write to a .img file.
Crash and reporting once an interrupt is triggered.
Currently guaranteed to work on QEMU. Most, if not all features work on Bochs though Bochs is pickier with errors. It also supports QEMU debug logging.
This project is licensed under the MIT License - see the LICENSE.md file for details