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.- booting from floppy, loading kernel, initialising protected mode and start 32 bit kernel in protected mode
- fully pre-emptive prioritized task scheduler
- signals and mutexes, multi-user, login on 8 different consoles
- error handling, panicing and debugging
- segmented and paged protected mode with callgates between privilege levels
- keyboard, video (textmode), and floppy driver
- rudimentary RS 232 support, hard disk / acpi support
- FAT12 driver, memory manager, rudimentary redirection and pipe support and command shell
- ports of TETRIS-clone
Normal startup routine
Starting from floppy on my old 486 PC
USB support is not yet implemented so my P4 keyboard is not accepted...
The rudimentary Jonix Shell or JOSH
Multi-user system ;-)
Memory management - each process has its own 4GB address space and may share pages
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...
A simple tetris port (ascii invaders, rogue, and collosal cave are in progress!)
I implemented my own 'black screen of death' alias register dump and halting CPU...
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...