<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcello Russo</title>
    <description>The latest articles on DEV Community by Marcello Russo (@marcello_russo_21b6a033cc).</description>
    <link>https://dev.to/marcello_russo_21b6a033cc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3880230%2Fb0cd7a23-e394-45b4-894e-f919d846057a.png</url>
      <title>DEV Community: Marcello Russo</title>
      <link>https://dev.to/marcello_russo_21b6a033cc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcello_russo_21b6a033cc"/>
    <language>en</language>
    <item>
      <title>Symphony a Topological Hardware Simulator inside a Microkernel OS</title>
      <dc:creator>Marcello Russo</dc:creator>
      <pubDate>Fri, 04 Sep 2026 12:08:07 +0000</pubDate>
      <link>https://dev.to/marcello_russo_21b6a033cc/symphony-a-topological-hardware-simulator-inside-a-microkernel-os-2959</link>
      <guid>https://dev.to/marcello_russo_21b6a033cc/symphony-a-topological-hardware-simulator-inside-a-microkernel-os-2959</guid>
      <description>&lt;p&gt;Hello DEV community! 👋&lt;/p&gt;

&lt;p&gt;For the past 10 years, I’ve been working on a massive passion project. I wanted to build a cycle-accurate hardware emulator, but I was deeply frustrated by the traditional "monolithic" designs used in most emulators. They are incredibly fast, but they are black boxes.&lt;/p&gt;

&lt;p&gt;I wanted to build a software breadboard. A system where I could literally SSH into the running machine and inspect CPU registers on the fly.&lt;/p&gt;

&lt;p&gt;So, I built Symphony: A Microkernel OS, a Universal VM, and a Topological Emulator... all written in 100% pure Go (zero CGo!). 🤯&lt;/p&gt;

&lt;p&gt;You can play a WebAssembly build of it right now here (running the legendary Mayhem in Monsterland on a virtual C64): &lt;a href="https://markel1974.itch.io/symphony" rel="noopener noreferrer"&gt;https://markel1974.itch.io/symphony&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a quick breakdown of how I used Go to build this beast:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Microkernel OS (Yes, an OS in Go) 🐧&lt;br&gt;
The C64 you see in the browser isn't a standalone loop. It's running as an isolated user-space process inside a Microkernel I built. Using Go's amazing concurrency and interfaces, I built an asynchronous message router. The kernel has a built-in SSH server and a VT100 window manager. This means I can SSH into my running emulator, open the xsh shell, and modify the hardware state at runtime!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ditching the giant switch-case for the Strategy Pattern 🧠&lt;br&gt;
Most emulators use a giant switch-case for the CPU instruction set. I hated that. Instead, I built a Universal VM with an "Interchangeable Instruction Disk" architecture. Every opcode is a Go struct implementing an IOpExecutor interface. The main loop uses direct function pointer dispatch. This means my VM can execute native Go bytecode (compiled by my custom multi-pass Go-to-Bytecode compiler), or it can transform into a cycle-accurate Z80 or MOS6510 CPU just by swapping the sequencer!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Topological Hardware (Go Interfaces are magic) 🔌&lt;br&gt;
The hardware components (VIC-II, SID, PLA) don't communicate via software traps. They are completely isolated structs that only know about their ISocket interface. When the VIC-II needs memory, it pulls a simulated DMA line low, triggering the CPU to put its pins into High-Z (high impedance) state. It's literally an electronic breadboard translated into Go interfaces.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why pure Go?&lt;br&gt;
I wanted memory safety, extreme modularity, and the ability to compile for Desktop (OpenGL), Web (WASM), and Headless servers (for CI/CD testing) with a single command. Go delivered on all fronts.&lt;/p&gt;

&lt;p&gt;If you are interested in System Architecture, Emulation, or just want to see how to abuse Go interfaces to simulate hardware pins, check out the source code!&lt;/p&gt;

&lt;p&gt;📂 GitHub Repo: &lt;a href="https://github.com/markel1974/Symphony" rel="noopener noreferrer"&gt;https://github.com/markel1974/Symphony&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to know what you think about the architecture! Has anyone else here tried building hardware simulations or VMs in Go? Let's discuss in the comments! 👇&lt;/p&gt;

</description>
      <category>emulation</category>
      <category>go</category>
      <category>architecture</category>
      <category>vm</category>
    </item>
  </channel>
</rss>
