This is NanoShell's old private repository. I've made it public today for historical purposes only, and to give a clearer picture into its development. Since January 19th 2022, NanoShell has moved to iProgramMC/NanoShellOS
This repository is now archived. As such, issues and pull requests are not submittable.
Code licensed under GNU GPL v3.
NanoShell 3rd Edition is a preemptively multi-tasked 32-bit operating system with a windowed GUI.
Be warned that building this is not for the average Linux user nor is it for the faint of heart. Soon I'll work on a way to compile this in an easier way.
- Hello World
- Paging and dynamic memory allocation
- Loading an ELF at some virtual address with its own heap and executing it
- Task Switching (concurrent threads)
- A basic shell, can execute applications
- Get a GUI running (Also in a task)
- Applications can use the GUI API
- Port DOOM
- (ultimate boss) Port Mesa and Super Mario 64 (based on the DOS port, please)
- PS/2 Mouse and Keyboard
- EGA Text mode
- VBE Graphics mode (fast)
- Bochs/QEMU debugcon (E9 hack)
- Serial port
- PCI
- VirtualBox/QEMU/Bochs graphics device (not VBE)
- VMware SVGA device
- Sound devices (e.g. SoundBlaster 16)
- USB
- Block storage abstraction base
- Optional RAM disk images can be loaded and used as block devices
- ATA device driver
- USB stick device driver
- Root contains several files which are packed neatly into the executable
- Mounting other file systems to the main one
- Cleaning up after a while of not having used a certain directory page (can't apply to root or ram disks, you know why)
Not supported. Could be supported soon, but currently not supported.
Create the build
folder. Inside it create the folders asm
, kapp
, fs
and icons
.
Create the tools
directory. Download the i686-elf GCC+binutils, and extract it into tools/i686-gcc/
.
Also download NASM and place it inside tools/nasm
so that it is reachable at tools/nasm/nasm.exe
.
Make sure that make
is easily accessible by opening a command prompt anywhere and typing make
.
Compile tools_src/fsmaker
and tools_src/icontest
.
Place fsmaker.exe
inside tools/
.
Place icontest.exe
inside tools/icc/
. (create the directory, if necessary)
Run buildall.bat
. It should start building. Once it's done you should have a kernel.bin
in the repo root.
If you don't have grub2, install it. It's relatively easy.
Once you have a grub installed on your favorite USB drive, create a grub.cfg
inside the grub
directory.
Add the following lines:
menuentry "NanoShell" {
multiboot /boot/kernel.bin
set gfxpayload=1024x768x32
boot
}
Note that you can place your kernel image anywhere, but I prefer /boot/kernel.bin
. Place your kernel image so that grub can find it, and then restart.
And you're done! You should be in NanoShell now. Type w
to go to the GUI mode.