Jonix

Jonix is the (rather tongue-in-cheek) name of the linux-inspired hobby operating system I have been designing and implementing in peaks and bursts from 2000 onward. Actually, my primary interest was and is in learning how things work at a low level in the PC, and being in full control of the machine as I was used to be in the Commodore 64 era. So no OS or even BIOS, just me and the hardware.

I enjoy working on it in free time and I acknowledge that it is a life-long project of learning, designing, coding, debugging and enjoying a working call gate from ring 2 to ring 0, a working floppy driver, memory allocation system, scheduler and so on after chasing all kinds of low level bugs and general protection faults. I like the idea that there isn't even a blue screen of death until I implement it ;-)

I intend to make some files publicly available for fellow explorers of the x86 CPU and perpherials, as soon as the software is in a stable state, the source code is cleaned up and commented, and all 'borrowed' code is appropriately acknowledged. For now, I'll just list a set of features that is currently more or less implemented, partly in assembler (which was originally the only language I would use) and partly in C. By the way, I use the GCC-toolchain with FASM for assembly code, gedit for writing the software, and Bochs for simulation and testing. Some screenshots (from Bochs) and photos from live PCs

normal startup
normal startup
Normal startup routine

486 startup
Starting from floppy on my old 486 PC

P4 startup
USB support is not yet implemented so my P4 keyboard is not accepted...

josh shell
The rudimentary Jonix Shell or JOSH

josh shell
Multi-user system ;-)

josh shell
Memory management - each process has its own 4GB address space and may share pages

josh running on 486
On my 486 JOSH actually runs; it took some time to fix 'illegal opcode' panics from Pentium instructions such as CMOV in the library ;-) Anyway, this was a good way to improve my 0x06 exception handler to actually report the faulty instruction opcode...

tetris
A simple tetris port (ascii invaders, rogue, and collosal cave are in progress!)

black screen of death
I implemented my own 'black screen of death' alias register dump and halting CPU...

remote login
Remote login using RS-232 and a null-modem cable (using an old laptop with COM socket)

PS: As I finally managed to find a suitable PC and a cross cable to transfer files between my old C64 and my old PC, I play with the idea to write a jonix-like OS for the Commodore 64, using the NMI interrupt for task switching. Maybe a nice project for a future sabattical period...