Moncia a Homebrew Personal Computer

Moncia PC

This is my computer. There are many like it, but this one is mine.
My computer is my best friend. It is my life. I must master it as I must master my life.


Based on 8-bit microcontroller (Arduino Uno) and home made operating system.

It has input from a regular PS/2 keyboard and can output black &white image to the TV. User interface is graphical.



I've always wanted to create my own operating system, but undertaking such a project on modern hardware is incredibly challenging due to its complexity and the extensive requirement for drivers to facilitate hardware communication. To realize this ambition, I decided to construct a simpler solution: an eight-bit computer capable of keyboard input and output to an old-school TV. This system is based on the Arduino Uno, which is not only affordable and accessible but also relatively easy to assemble from off-the-shelf components. The simplicity of connecting or soldering these components together, combined with the plethora of available libraries, greatly aids the development process. Currently, I'm utilizing two critical libraries for input and output functionalities.

One significant challenge I've encountered in this project is memory management. The Arduino Uno comes with a mere two kilobytes of RAM, over half of which is consumed by the screen buffer alone. Additionally, memory is required for the function call stack, strings passed to other functions, variables, tables, etc.

Despite these challenges, the project has been an immensely fun and educational journey, offering me an invaluable opportunity to deepen my understanding of the C language and embedded development. Striving not just for functionality but also for aesthetic appeal, I aim to design a fully graphical interface, complete with icons and buttons familiar to users, despite the constraints of low resolution and one-bit color depth (black on white). Luckily, my proficiency in pixel art complements my coding skills, making this aspect of the project enjoyable.

In my past experiences with creating one-bit images, I've acquired several techniques to enhance their appearance or simulate gradients, which have been instrumental in this project.

Furthermore, I've integrated an audio channel into the device, akin to the simplistic but iconic PC Speaker. By adding a piezo electronic speaker, I've enabled basic sound effects for keyboard inputs—positive feedback sounds, error alerts, and even a boot-up sound reminiscent of old Macintosh computers.

The project's foundation includes a basic code structure, a high-level concept of the operating system, and a wish list of features. Given hardware limitations, I'll have to prioritize these features, which include keyboard and possibly mouse input, one-bit output, and a handful of applications. The first application I developed serves diagnostic purposes, providing insights into the system's free RAM and other metrics. Another early creation is a text editor, designed for simplicity due to the Arduino's limited EEPROM capacity (approximately 1000 characters). This editor allows for editing texts up to 240 characters in length—equivalent to one screen page—across four separate files.

Editing capabilities are intentionally basic, restricted to backspace for deleting the last character and straightforward text replacement. Deleting a file involves backspacing to the beginning or utilizing a secondary tool that zeroes out the selected memory bank. This minimalist approach to writing and editing is inspired by the FeliCa Vita device and has proven to be effective and user-friendly.