While going through Charles Petzold’s “Code” book again, I was looking for an
easy-to-use online assembler and simulator for the classic Intel 8080 CPU, but couldn’t find anything that
fit my needs exactly. There are some well-done tools out there, but they seem to
be more geared to running game ROMs and large programs on an emulator; my need
was different – I just wanted something to play with, to practice 8080 assembly
So I ended up rolling my own, and the js-8080-sim project was born. The project has
three main parts:
An assembler for the 8080: translating assembly language code into 8080
machine code. I wrote a custom assembler for this.
A CPU simulator: simulating 8080 machine code. For this purpose I cloned
the maly/8080js project into my
repository  and tweaked it a little bit.
A simple web UI for writing 8080 assembly code, running it and observing the
results (as changed values in memory and registers). I wrote a basic UI in
If you want to play with the simulator, a live version is available online at
The UI is purely client-side; it makes no requests and just uses your browser
as a GUI. It does use the browser’s local storage to save the last program you
Issues and PRs on GitHub welcome!
Using JS for a project like this is very natural, because ultimately what I’m
interested in is having a convenient web UI to play with the simulator. When
I do this, I almost always end up writing vanilla HTML+CSS+JS, avoiding
frameworks. I don’t write JS often, so whenever I get to work on a new project,
the framework du juor has typically changed from the last time, and I just
don’t have the time to keep track. Vanilla HTML+CSS+JS has much better
longevity, IMHO, although it does mean somewhat more manual work (e.g. to keep
the UI in sync with the application state).
The only framework I was tempted to use is Bootstrap for the CSS and layout,
but eventually decided against it in the interest of simplicity.
We’re fortunate to have much more stable and usable JS and web APIs in 2020
compared to just a few years ago. For the simulator I’ve been using the ES6
version of JS, which is widely supported today and offers many niceties.
I went with vendoring 8080js because it appears to be unmaintained,
and I also wanted to avoid a dependency, preferring the project to be
self-contained. This was easy with 8080js because it’s a single JS file
and it has a permissive 2-clause BSD license. I’ve reproduced the license
in full in the cloned source file. FWIW, 8080js itself is also based on
an earlier BSD-licensed simulator; OSS at its best 🙂