What is the 65uino?
The 65uino is a 6507-based board in the Arduino Uno form factor. The 6507 is the 28-pin member of the original 6502 family. On the board it sits next to a 6532 RIOT (RAM, I/O and timer), with an SSD1306 OLED and a pushbutton. The BIOS has a menu you drive with that one button.
The emulator lets you try the board, and the real firmware, without having one on your desk.
What's emulated
- CPU: an NMOS 6502 core running as a 6507. It implements all 151 documented opcodes with bus-cycle timing, plus the common undocumented opcodes.
- 6532 RIOT: timer and I/O as used by the firmware.
- I2C: the open-drain, bit-banged I2C bus, with the SSD1306 128×64 OLED and a 24C64 EEPROM on it.
- Serial: a CH340-style serial connection with bit timing, at a selectable baud rate.
- Board I/O: the pushbutton, reset, the GPIO header pins and the LED on PB7.
- ROM: a 4 KiB ROM window at
$1000–$1FFF. Shorter images repeat and larger images use their first 4 KiB, matching the board jumpers. - PhaseLoom (optional): a presence/register stub for a Si5351 at I2C address
$60. It's enough to exercise the firmware's SDR path, not a full signal-generation model.
Things to try
- Drive the BIOS menu. Click BTN on the board photo to move down the menu and hold it to select. On a phone, use the large BTN and RST buttons under the photo.
- Terminal mode. Select Terminal in the BIOS, then type into the serial terminal on the page. The text appears on the OLED.
- Code Monitor. Select Code Monitor to see memory in hex on the OLED.
- Demo ROM. Pick Hello OLED · demo in the firmware list.
- Run bundled userland. This sends the BIOS sample userland over emulated serial, the same way you'd upload it to a real board.
- GPIO. Click a free input in the GPIO list to pull it low or release it. Outputs, the I2C lines and BTN are driven by the emulated board.
- Under the hood. Pause, single-step, or set a hex breakpoint and watch the registers and disassembly. The CPU clock selector changes the simulated oscillator; the speed selector only changes playback.
- Your own code. Open a raw 6507 ROM image (
.bin/.rom, 1–65,536 bytes) from your computer.
Accuracy and limits
- The CPU core passes Klaus Dormann's 6502 functional test and Bruce Clark's decimal-mode test (with N, V, Z and C checked). The full test suite (31/31) also boots the real BIOS and checks the menu, button, serial, I2C and userland paths, plus display snapshots.
- Unstable undocumented opcodes are approximations.
- The Si5351 stub and the off-board GPIO attachments are not full analog or electrical simulations.
- Browsers may throttle background tabs, so wall-clock speed is best effort. The CPU cycle counters stay deterministic.
Your ROM stays on your computer
The page is static files only. There is no upload endpoint and no server-side emulator. A ROM you pick is read with the browser File API and run by the JavaScript 6507 interpreter; it is never sent anywhere or run as native code.
Run it yourself
Download the source ZIP from the page footer and serve the site/ folder with any static HTTP server, for example:
python3 -m http.server 8065 --directory site
Then open http://localhost:8065/. npm test runs the CPU and board tests.
Licensing
- Emulator code (JavaScript, interface, build scripts and tests): MIT.
- The bundled BIOS, sample userland, Hello demo ROM and the populated-board photo come from the 65uino project and keep its CC BY-NC 4.0 license.
- Klaus Dormann's GPL-3.0 functional test is not distributed; the test runner downloads a pinned copy.
Links
- Both 6502 emulators: https://www.imania.dk/6502-emulators/?language=en
- Practical guide to both: https://www.imania.dk/6502-browser-emulators-guide?language=en
- Live emulator: https://www.imania.dk/65uino-emulator/
- Emulator source ZIP: https://www.imania.dk/65uino-emulator/65uino-emulator-source.zip
- 65uino firmware and hardware: https://github.com/AndersBNielsen/65uino
Anders Nielsen