DEV Community

Cover image for Velot8: An Ambitious Open Source Project to Take Your C Programming Skills Further ๐Ÿ•น๏ธ
Manuel AF
Manuel AF

Posted on

Velot8: An Ambitious Open Source Project to Take Your C Programming Skills Further ๐Ÿ•น๏ธ

Learn C11, explore low-level programming, and understand how emulators work by contributing to a real project.

Hi DEV Community! ๐Ÿ‘‹

What if one of the best ways to improve your C programming skills was to build an emulator?

That's the idea behind Velot8, a new open-source project I'm developing as part of ConnectApp, my independent initiative focused on building reusable software and sharing knowledge.

Velot8 is an educational CHIP-8 emulator written in C11, featuring a modular emulation core, an SDL2 graphical frontend, and an original demonstration ROM.

But my ambition goes beyond simply running CHIP-8 programs.

I want Velot8 to become a project where students, C enthusiasts, and experienced developers can learn, experiment, solve real engineering problems, and grow together.

๐Ÿš€ Why build an emulator in C?

Learning C is one thing. Understanding how to apply it to a complete software system is another.

An emulator offers a fascinating opportunity to explore concepts that are often difficult to appreciate through traditional programming exercises.

With Velot8, you can work with:

  • Memory management and structured machine state.
  • CPU emulation, instruction decoding, and execution.
  • Bitwise operations and low-level data manipulation.
  • Graphics programming using SDL2.
  • Keyboard input, timers, and audio.
  • Modular architecture and separation of responsibilities.
  • Automated testing, debugging, and cross-platform development.

These are practical challenges that can help developers move beyond syntax and gain a deeper understanding of software engineering.

โš™๏ธ What can Velot8 do today?

Velot8 is currently at version 0.1.0, with a functional initial implementation.

The project includes:

โœ… A C11 emulation core independent of SDL2.

โœ… CHIP-8 instruction families covering arithmetic, control flow, graphics, keyboard input, and memory operations.

โœ… A graphical frontend using SDL2.

โœ… A 64 ร— 32 monochrome display.

โœ… CPU instruction scheduling at 700 Hz by default, with independent 60 Hz timers.

โœ… Debugging tools, including instruction tracing and headless execution.

โœ… Automated tests and a configured cross-platform CI workflow.

โœ… An original animated demonstration ROM.

The project is still an MVP. It does not yet claim full compatibility with existing CHIP-8 programs, and it does not implement SCHIP or XO-CHIP extensions.

That leaves plenty of room for investigation and improvement.

๐Ÿง  Architecture matters

One of my priorities with Velot8 is keeping the emulation logic separate from the graphical interface.

The project follows a simple separation:

include/velot8/
    Public C API

src/core/
    CHIP-8 state and instruction execution

src/frontend/sdl2/
    Window, graphics, keyboard, audio
    and host-side scheduling

tests/
    Automated validation
Enter fullscreen mode Exit fullscreen mode

This means the emulator core can run without SDL2, making it easier to test individual components and investigate bugs.

It's an opportunity to explore an important lesson in software engineering:

Writing code that works is important. Designing code that can be understood, tested, and maintained is just as important.

๐Ÿ› ๏ธ Want to experiment with it?

You can build the core and run the original demo without SDL2:

make test
make headless
build/headless/velot8-headless --demo
Enter fullscreen mode Exit fullscreen mode

For the graphical version, install SDL2 and pkg-config, then run:

make run
Enter fullscreen mode Exit fullscreen mode

You can also load a CHIP-8 ROM:

build/release/velot8 \
  --rom path/to/program.ch8 \
  --scale 8 \
  --cpu-hz 700
Enter fullscreen mode Exit fullscreen mode

The project provides debugging options, different CHIP-8 quirk profiles, and test documentation to help investigate implementation behavior.

๐ŸŽ“ A project for students and experienced developers

I believe open-source projects can offer something especially valuable to people learning programming: the opportunity to work with code that has a real purpose.

Velot8 could be an interesting challenge if you're:

  • A student learning C or computer architecture.
  • A developer looking to strengthen your low-level programming skills.
  • Interested in retrocomputing and emulation.
  • Exploring automated testing and software architecture.
  • An experienced C developer who enjoys mentoring and sharing knowledge.

You don't need to understand every part of the emulator before getting involved.

Starting with documentation, reviewing tests, investigating a bug, or suggesting an improvement can be just as valuable.

๐Ÿ—บ๏ธ An ambitious project with room to grow

My goal isn't to pretend Velot8 is already a mature emulator.

It's to build a solid foundation and progressively improve it.

There are many interesting challenges ahead: deeper compatibility testing, more debugging capabilities, improved usability, and potentially broader emulator functionality in the future.

Each improvement is an opportunity to learn something new about C, hardware behavior, testing, or software design.

And that's what makes the project exciting to me.

๐Ÿค Let's build and learn together!

Velot8 is open source under the Apache 2.0 license, and I'd love to see students, educators, and developers become part of its evolution.

Whether you want to contribute code, review the architecture, propose improvements, or simply explore how an emulator works, your participation is welcome.

Velot8 is part of ConnectApp, an initiative I created to promote open software, responsible development, and knowledge sharing.

๐ŸŒ ConnectApp: https://www.connectapp.es

๐Ÿ’ป GitHub: https://github.com/ManuelAf-ConnectApp

One question for the DEV Community:

If you were learning C through an emulator project, which part would you find most interesting: CPU instructions, memory management, graphics, debugging, or automated testing?

I'd love to hear your thoughts!

Because mastering a programming language isn't just about knowing its syntax. It's about discovering what you can build with it. ๐Ÿš€

Top comments (0)