This is a small 32bit (i586) kernel written using the Nim programming language.
I have been wanting to do this for a while but it wasn't until people in the #nim IRC channel inquired about Nim OS dev and the rustboot kernel inspired me that I finally did it.
It doesn't do much, but it doesn't need to. Its purpose is to provide a starting point for anyone wishing to write an OS in Nim.
It still manages to do a little more than fill a screen with a certain color. Nimkernel implements:
writeStringfunction which shows a string on screen in a specified position.
rainbowfunction which shows a string with a rainbow-like text foreground color differentiation in a specified position.
- Some simple error handling by implementing Nim system.nim's
- Support for 16 colors with a brilliant type safe API!
Note: The error at the bottom is intentional, it is used to show that the error handling works properly.
You are required to have:
- a C and asm cross-compiler for i586
- Nim 0.10.2 or higher
- nimble (*)
* You can always grab the nake library manually from here.
I have performed this setup on a Arch Linux machine, but all other distros should work too.
Building a cross compiler
For more information take a look at the OSDev article.
You will need to download the source of binutils and gcc.
cd into a suitable directory in which you would like to download, unzip
and build the cross compiler. Then perform the following actions:
$ wget ftp://sourceware.org/pub/binutils/snapshots/binutils-2.24.51.tar.bz2 $ tar -xf binutils-2.24.51.tar.bz2 $ mkdir build $ ./binutils-2.24.51/configure --target=i586-elf --prefix=$PWD/build/ --disable-nls $ make -j4 $ make install
Note: I did not use the binutils suggested by the osdev article as they did not build for me, YMMV.
You may then grab the GCC source and build it:
$ wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2 $ tar -xf gcc-4.9.2.tar.bz2 $ ./gcc-4.9.2/configure --target=i586-elf --prefix=$PWD/build/ --disable-nls --enable-languages=c --without-headers $ make all-gcc -j4 $ make install-gcc
You should then have a i586-elf-gcc and i586-elf-as executable in $PWD/build/bin/ or somewhere thereabouts. You should then add it to your PATH permanently or temporarily by doing:
Follow the instructions in the Nim repo to bootstrap Nim and put it in your PATH.
You can then compile the nakefile and therefore compile nimkernel:
$ nim c nakefile $ ./nakefile run
This will automatically build and run the kernel using QEMU.
Nimkernel is licensed under the MIT license.