After completing a number of personal projects involving hardware bring-up and emulation I began formulating ideas for a (very) simple operating system. Render is designed to operate a PC as a simple rendering node driven by an RS232 connected server.


Render Internals


The system boots, initializes basic graphics, disk IO, and serial communication before waiting for rendering commands to arrive over the connection. Rendering packets are processed sequentially, and pixel data is sent back to the server.


Render is designed to be run live off a CD/DVD or USB drive, and thus will not alter any local hard disks installed on the host PC. The OS is self contained within a 512KB image file that contains the boot loader in the first sector (512 bytes). At boot, Render's loader (7C00) quickly loads a splash image and displays it onscreen using VESA conformant interrupts, loads the kernel (7E00) off the disk, and then prepares subsequent system modules for execution by the kernel. Once this phase is complete, the renderer is loaded from disk (or serial) and remains idle until commands arrive.


The build environment for Render is fairly straightforward with the bulk of the code being built using nasm and gcc. Once the boot loader, kernel, and system modules are built, they must be packed into a bootable disk image. For this task I wrote a very simple tool (bpack) that allocates an image file and allows binary files (the loader, kernel, etc.) to be inserted at particular offsets. Once the image is created it can be run through an emulator such as Bochs or burned to a CD/DVD for testing.