
Build a toy graphical operating system from an empty file to a windowing system with a taskbar, movable windows, focus, and keyboard input in dark or light modes.
Install prerequisites for the course, including Nazem, GTC, LTE, Kembu, and Camu, on Windows via Windows Subsystem for Linux 2, update sources, install with apt-get, and run make to verify.
We will keep following tradition and make our first Hello World program.
The lecture shows a clear screen loop that zeros all screen addresses, applies a blue background, and increments an index until 80 by 25 grid clears before rendering new text.
Create a string print utility for a graphical os by wiring a data segment and a print function that outputs characters to the screen, with end-of-string checks and push-based return.
Improve print utility by printing text at a specific line using the easy X register and line calculations. Use a stack and end label to manage returns and test placement.
Integrate C code with assembly to build a graphical operating system, replacing print with graphics rendering, loading the kernel into memory, and setting up graphics mode and font library.
Switch to graphics mode and clear the video memory to render windows. Define a graphics info structure, set the screen base address, convert colors with RGB, and draw pixels.
Develop a graphics module to separate graphics code, implementing a draw function for a single pixel and a rectangle, plus a clear screen function in rgb.
Integrate a bitmap font into the graphics module, wire the font data through the makefile, and render text on screen with bit masks and binary arithmetic.
Printing text 2 demonstrates fixing a typo, updating the shift each iteration, adjusting resolution and media mode, and planning a dynamic function to print strings of text.
Make the character drawing function modular and dynamic by enabling font, height, color, and position parameters, and adjust the function signature. The next lesson will add string printing capability.
Implement a DrawString function to render strings of characters efficiently, including RGB color scaling to 16-bit values, managing font height, offsets, newline handling, and rendering via a custom graphics library.
Learn to implement mouse input and interrupt handling in a custom graphical OS from scratch, including port programming, PIC initialization and remapping, with double buffering.
Define a new function to draw the mouse cursor using x, y, and color. Enforce screen bounds with resolution checks and update position via the mouse handler.
Implement the keyboard as a second input device by handling scan codes, shift and caps logic, maintain a character buffer, and optimize rendering by avoiding the clear screen operation.
Fix a string input issue by allocating a buffer of a thousand characters, preventing garbage on long lines, and outline upcoming multitasking with priority and tabbing.
Improve the task system by replacing function pointers with a single function that uses a task id to manage dynamic tasks, paving the way for a window and button.
In drawing-a-window, build the first graphical element—a draggable window—for a toy operating system, separating graphics elements from the graphics module and testing with a window test task.
Teach how to add a close button to a window by drawing a circle, detecting clicks inside it, and implementing a close task function that closes the task.
Create a rectangular button with text, color options, and hit-testing using coordinates, dimensions, and RGBA values to draw and respond to mouse clicks in a graphical operating system from scratch.
implement a window layering system so the topmost window with highest priority receives the mouse input, introduce a mouse possessed task to manage stacking, and refine dragging behavior.
Fix the mouse possession behavior so possession occurs only inside the target area. Adjust priority and left-click handling to render the cursor on top and stabilize dragging.
Fix mouse possession issues by updating the graphics element with top priority and a no-cost task, eliminating flicker and ensuring reliable close behavior in the graphical OS.
Implement a functional taskbar that launches games and a show, with dynamic positioning and startup integration. Draws the taskbar, sets bounds, and enables clicking, moving, and closing tasks.
Create a bouncing ball within a window, implementing edge collisions, updating position with delta x and delta y, and drawing a colored circle for a simple Pong-like game.
In this course, we will start from a blank file and end up with a toy Graphical operating system. The emphasis is on the word toy.
Our operating system is nowhere a competitor for windows, however, it is good enough for a proof of concept.
This will be a great addition to add to your CV to make you stand out from the crowd.
In this course you will:
- Build a simple toy Operating System that has Graphics support
- Implement mouse input: we will implement a simple mouse cursor.
- Implement keyboard input: we will implement support for the most popular keys.
- Implement a window system: we will implement a simple windowing system.
- Implement a simple task system: we will implement a very simple task system.
- Make a Bouncing Ball task: this will be the final lesson in which we make a Bouncing Ball task.
What is not covered in this course:
- Multithreading: This is an advanced topic and is not covered in this course. It is likely to be covered in future courses.
- Multiple processors support: This is an advanced topic and is not covered in this course. It is likely to be covered in future courses.
- File system: This is an advanced topic and is not covered in this course. It is likely to be covered in future courses.
- Sound system: This is an advanced topic and is not covered in this course. It is likely to be covered in future courses.