Skip to content
This repository has been archived by the owner on Apr 20, 2022. It is now read-only.

iProgramMC/OSProject

Repository files navigation

NOTE BEFORE LOOKING AROUND

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

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.

Goals

  • Hello World

Primordial tasks

  • Paging and dynamic memory allocation
  • Loading an ELF at some virtual address with its own heap and executing it
  • Task Switching (concurrent threads)

User

  • 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)

Drivers

  • 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

Permanent memory

  • Block storage abstraction base
  • Optional RAM disk images can be loaded and used as block devices
  • ATA device driver
  • USB stick device driver

File system

  • 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)

Build instructions

Linux build:

Not supported. Could be supported soon, but currently not supported.

Windows build:

Preparation

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)

The Moment of Truth

Run buildall.bat. It should start building. Once it's done you should have a kernel.bin in the repo root.

Installation

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.

About

NanoShell's old home. Here for historical purposes only.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages