Ghost Kernel

Adding userspace IRQ handling support (... and signals) 2015/07/24, 20:00:00

A lot has happened since I kicked out Newlib. There were some minor bugs, but userspace & the window manager are running again.

To improve the performance of interrupt handling, there is now support for thread interruption. This will also be used for implementing signals. Like this, a driver can decide to register a routine as an IRQ handler, and each time the interrupt occurs, the driver's thread is interrupted and may do necessary work. This works fine for keyboard and mouse already. Next thing will be using this mechanism for signals.


Terminal is up again! 2015/07/01, 20:00:00

After implementing the basic parts of the custom libc that now replaces Newlib, the system services and applications are up and ready again! There are still some issues with libstdc++-v3 that I'm currently fixing. In a first test, the window manager also turned out to run without a hassle with the new custom C library. *Newlib is gone.*

I did some cleanup in the project structure and reworked the build process, too. The code base was cleaned up a little. When I've finally decided for a license and eliminated some minor atrocities I'll go for a the first public source release. Stay tuned!


The libc is taking shape 2015/06/23, 20:00:00

Making steady progress in my C library implementation. The headers & declarations are done and some parts are implemented.

Moving away from Newlib was painful so far, but writing a custom library in the end gives much more control to the way applications on the system work.

Not doing much else at the moment, I was on vacation and the top priority is bringing the lib to a status where the existing programs work again.


Starting a custom libc 2015/05/13, 20:00:00

After struggling with some ugly userspace bugs for a few days that were mainly caused due to the way that the current C library (Newlib) is working and bound into the system, I decided to start writing my own C standard library implementation. Newlib has already caused too many problems and I'll be glad once its gone.


Refactoring & Window server library 2015/04/28, 20:00:00

In the last few weeks I mostly did bug fixing and cleaning up the existing code base. This worked out well, much of the kernel code is cleaner and more efficient now. Currently I'm working on a deadlock somewhere in the UI communication process.

Window server library

I've reworked the way that programs communicate with the window server. This currently happens via pipes. I also added functionality to the userspace library, so it is now actually possible to create windows, buttons and also register an "action listener" (that is called when a click event is fired) on these buttons.

As a little example, a window with a text field and a button can be created like this:

g_window* myWindow = g_window::create(); g_textfield* textfield = g_textfield::create(); textfield->setBounds(g_rectangle(10, 10, 120, 20)); myWindow->addChild(textfield); g_button* button = g_button::create(); button->setBounds(g_rectangle(10, 30, 120, 20)); button->setTitle("Press me!"); myWindow->addChild(button); myWindow->setBounds(g_rectangle(200, 200, 140, 160)); myWindow->setVisible(true);

This style is plain and simple, and anyone who has ever created a UI with Swing will easily find their way into this framework.