████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗ ██████╗ ███████╗
╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝ ██╔═══██╗ ██╔════╝
██║ ██║ ██║██╔████╔██║███████║ ██║ ███╗ ██║ ██║ ███████╗
██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ╚══╝ ██║ ██║ ╚════██║
██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ╚██████╔╝ ███████║
╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝Attempt of Operating System (C++) 🍅
Do not expect greatness. I am learning, and that is amazing. I am using this great tutorial.
✅ For now it did not explode. A great success.
- The kernel is compiled using a cross-compiler targeting i686-elf.
- It runs on QEMU and VirtualBox for easy testing without rebooting your actual system.
- GRUB is used as the bootloader to load the kernel.
- The goal is to expand and experiment, adding new features along the way.
TOMAT-OS requires GCC for cross-compilation, Binutils for assembling, libc6-dev-i386 for 32-bit development, GRUB for booting, and xorriso for ISO creation. QEMU and VirtualBox are recommended for testing.
sudo apt update
sudo apt install -y g++ binutils libc6-dev-i386 grub-pc xorriso mtoolssudo dnf install -y gcc-c++ binutils glibc-devel.i686 grub2 xorrisosudo pacman -Sy --needed gcc binutils lib32-glibc grub xorrisopacman -Sy --needed mingw-w64-x86_64-gcc mingw-w64-x86_64-binutils(GRUB and xorriso are not natively available on Windows—consider using WSL or a Linux VM.)
To download QEMU, click here. To download VirtualBox, click here.
Clone the repository, compile the kernel, and run it in an emulator to see it in action.
# Clone the repository
git clone https://github.com/Zuhaitz-dev/TOMAT-OS.git
cd TOMAT-OS
# Compile the kernel (.bin)
make
# Run ISO image in VirtualBox (TextMode)
make run-text
# Run ISO image in VirtualBox (GraphicsMode)
make run-gfx
# Run ISO image in QEMU (TextMode)
make run-qemu-text
# Run ISO image in QEMU (GraphicsMode)
make run-qemu-gfx
# Clean build files
make cleanNOTE: text mode in QEMU presents some bugs, related to the keyboard drivers. For now it is recommended to work with VirtualBox mainly.
Q: Can I update the repository without cloning it again?
A: Of course! To do that, follow these commands
# If you are not in the folder, get in there
cd /path/to/TOMAT-OS
# For now there's only a main, but if there were other branches, change it to the name of that branch
git checkout main
# Download the last changes
git pull origin main - lspci -> displays info about system PCI devices.
lspci
# Show numeric ID's
lspci -n
# Show hex-dump of the standard part of the config space
lspci -x- nm -> lists network connections on the system.
# This was needed to make the interruptstubs.s
nm obj/hardwarecommunication/interrupts.oGot ideas? Want to make TOMAT-OS even more tomato-ish? Feel free to contribute!
- Fork the repository.
- Create a new branch.
git checkout -b feature/your-feature-name- Make your changes.
- Commit and push your changes.
git commit -m "Add your message here"
git push origin feature/your-feature-name- Open a pull request.
This project is licensed under the CC0 1.0 Universal License. See the LICENSE file for details.
- The tutorial that got me started – Click here
- Tomatoes – For being an inspiration
- GitHub: Zuhaitz-dev
- Email: zuhaitz.zechhub@gmail.com
Stay tomatuned! 🍅