{"id":49936478,"url":"https://github.com/relmer/casso","last_synced_at":"2026-05-31T03:01:01.659Z","repository":{"id":354012010,"uuid":"893600667","full_name":"relmer/Casso","owner":"relmer","description":"A 6502 emulator with a built-in, fully AS65-compatible assembler","archived":false,"fork":false,"pushed_at":"2026-05-24T16:15:51.000Z","size":5356,"stargazers_count":1,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-24T16:22:02.165Z","etag":null,"topics":["6502","6502-assembly","6502-emulation","6502-emulator","6502-processor","apple2","apple2c","apple2e","apple2gs","cplusplus","cpp","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/relmer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-24T21:10:09.000Z","updated_at":"2026-05-21T01:04:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/relmer/Casso","commit_stats":null,"previous_names":["relmer/casso65","relmer/casso"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/relmer/Casso","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relmer%2FCasso","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relmer%2FCasso/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relmer%2FCasso/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relmer%2FCasso/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/relmer","download_url":"https://codeload.github.com/relmer/Casso/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relmer%2FCasso/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33717419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["6502","6502-assembly","6502-emulation","6502-emulator","6502-processor","apple2","apple2c","apple2e","apple2gs","cplusplus","cpp","windows"],"created_at":"2026-05-17T07:07:24.552Z","updated_at":"2026-05-31T03:01:01.653Z","avatar_url":"https://github.com/relmer.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Casso\n\n[![CI](https://github.com/relmer/Casso/actions/workflows/ci.yml/badge.svg?branch=master\u0026event=push)](https://github.com/relmer/Casso/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/github/license/relmer/Casso?cacheSeconds=300)](LICENSE)\n\u003c!--\n[![Downloads](https://img.shields.io/github/downloads/relmer/Casso/total)](https://github.com/relmer/Casso/releases)\n--\u003e\n\n## About\n\nCasso is a retro / classic-machine platform emulator and from-scratch AS65-compatible 6502 assembler, written in C++. Today the platform emulator targets the Apple II family (][, ][+, //e); the abstractions are generic enough to host other 6502-based machines later.\n\nTwo of the three built-in themes booting the [casso-rocks demo disk](Apple2/Demos) — same Apple //e core, different chrome:\n\n| Skeuomorphic | Dark Modern |\n| :---: | :---: |\n| ![Casso Skeuomorphic theme booting the casso-rocks DHGR demo](Assets/theme-skeuomorphic-dhgr.png) | ![Casso Dark Modern theme booting the casso-rocks DHGR demo](Assets/theme-darkmodern-dhgr.png) |\n\nThe project includes:\n\n- **Apple II platform emulator** — GUI-based Apple II, II+, and //e emulator with D3D11 rendering, WASAPI audio, Disk II controller with realistic mechanical sounds, data-driven machine configs, 80-column text + Double Hi-Res, auxiliary RAM, audit-correct Language Card state machine, and cycle-accurate IRQ/NMI infrastructure.\n- **6502 CPU emulator** — passes [Klaus Dormann's functional test suite](https://github.com/Klaus2m5/6502_65C02_functional_tests) and all 151 legal-opcode sets from [Tom Harte's SingleStepTests](https://github.com/SingleStepTests/ProcessorTests) (10,000 vectors each).\n- **AS65-compatible assembler** — a from-scratch reimplementation of Frank A. Kingswood's AS65, intended as a drop-in replacement. Supports the complete AS65 syntax: macros, conditional assembly (`if`/`ifdef`/`ifndef`/`else`/`endif`), the full expression evaluator (arithmetic, bitwise, logical, shift, `\u003c`/`\u003e` byte selectors, current-PC `*`), `equ`/`=` constants, `include`, three-segment model (`code`/`data`/`bss`), AS65-style listing output, and AS65 command-line flags (`-l`, `-t`, `-s`, `-s2`, `-z`, `-c`, `-w`, `-d`, `-g`, ...) including flag concatenation (`-tlfile`).\n- **CLI tool** — runs as an AS65-style assembler by default, or with the `run` subcommand to load and execute a binary or assembly source.\n- **First-run asset bootstrap** — Casso fetches the ROMs, sample disks, and Disk II audio samples it needs on first launch (with user consent), so a fresh `Casso.exe` boots to a usable //e BASIC prompt with no manual setup.\n- **Headless test harness** — `HeadlessHost` drives the emulator with no Win32 window, enabling deterministic integration tests for cold boot, disk boot, video framebuffer hashing, and reset semantics.\n- **1650+ unit tests** — comprehensive coverage of CPU instruction encoding, addressing modes, arithmetic, branching, assembler features, audio pipeline (speaker + drive), //e MMU + Language Card, video timing, Disk II nibble engine, WOZ + nibblized image formats, 80-col + DHGR video, reset semantics, perf budget, and backwards-compat for ][/][+ machines.\n\n## What's New\n\nSee [CHANGELOG.md](CHANGELOG.md) for the granular history.\n\n### Themed startup experience (v1.5.1395)\n\nThe first-run asset bootstrap — ROMs, sample disks, and Disk II audio samples — now downloads through a single themed progress dialog that fetches every asset concurrently rather than serial-prompting through three separate Win32 dialogs. The boot-disk MRU picker that appears when no disk is configured also paints through the same DirectWrite pipeline as the rest of the chrome, so the entire first-launch path honours the active theme (Skeuomorphic / Dark Modern / Retro Terminal) instead of dropping back to native gray.\n\n### Copy-protected games boot (v1.5.1289)\n\nCasso's Disk II stack now models quarter-track head positioning and the authentic Logic State Sequencer faithfully enough to boot original, copy-protected Broderbund WOZ disk images straight off the wire. Classics like *Karateka*, *Choplifter*, and *Lode Runner* load and run from their unmodified preservation images, protection schemes and all.\n\n| Karateka | Choplifter | Lode Runner |\n| :---: | :---: | :---: |\n| ![Karateka booting in Casso](Assets/game-karateka.png) | ![Choplifter title screen in Casso](Assets/game-choplifter.png) | ![Lode Runner running in Casso](Assets/game-loderunner.png) |\n\n### UI Overhaul (v1.4.1171)\n\nCasso's entire chrome moved from the legacy Win32 menu bar / Win32 dialogs to a borderless, themed shell rendered straight onto the same D3D11 framebuffer that draws the emulator video — using a native Direct2D / DirectWrite pipeline (`DxUiPainter` + `DwriteTextRenderer`), no third-party UI engine.\n\n**Three built-in themes** — Skeuomorphic, Dark Modern, Retro Terminal — hot-swappable from **Settings → Theme** with no restart and no machine reset. Each theme ships under `Resources/Themes/\u003cName\u003e/` (extracted to `Themes/\u003cName\u003e/` at first run) with a `theme.json` describing colors, CRT defaults, drive visual profile, and other UI tokens consumed by the native widget renderer. The token-based custom-theme authoring surface is still being wired through the native widgets — see [docs/themes/AUTHORING.md](docs/themes/AUTHORING.md) for the current state.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"Assets/feat-themes.png\" alt=\"Theme picker hot-swapping between Skeuomorphic, Dark Modern, and Retro Terminal\" width=\"540\" /\u003e\u003c/p\u003e\n\n**Skeuomorphic drive widgets** with realistic Apple Disk II faceplates: perspective-projected case top with two indented lid panels that taper toward the back, nine vent slits down each side, beige case wrapping a black inset faceplate on all four sides, cantilever door hinged at the slot top that tilts up and back (tucking inside the case with a small flap visible when fully open) revealing a recessed finger-pull behind it, status LED, and the Cassowary rainbow logo. Click a drive to pick a disk image, or drag-and-drop a `.dsk` / `.do` / `.po` / `.nib` file onto it. Eject animates the door open even on an empty drive.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"Assets/feat-drive-widgets.png\" alt=\"Skeuomorphic drive widgets: Drive 1 active with red IN USE LED, Drive 2 idle\" width=\"540\" /\u003e\u003c/p\u003e\n\n**Consolidated Settings panel** replaces the old `OptionsDialog` and `MachinePickerDialog`. Machine selection, machine info, emulation speed, video color mode, disk write mode, floppy sound + mechanism, write-protect, theme picker, and the new CRT controls live in one non-modal in-window panel with full keyboard navigation.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"Assets/feat-settings.png\" alt=\"Settings panel — Machine tab with machine, CPU speed, write protect, write mode, and drive audio controls\" width=\"540\" /\u003e\u003c/p\u003e\n\n**CRT effects** — scanlines, phosphor bloom, and color bleed (each independently toggleable, with its own parameter sliders), plus persistence trails, contrast, and gamma sliders. Per-monitor presets (Color / Green / Amber / White) seed sensible defaults; themes can override; user tweaks persist as overrides on top of either. The Settings popup gets out of your way as you scrub a control — the panel fades, the emulator behind it stays sharp inside a per-pixel clip, and only the focused control remains opaque — so you can evaluate the effect of every parameter change live.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"Assets/feat-crt-effects.png\" alt=\"Display tab CRT controls — monitor preset, brightness, contrast, gamma, scanlines, bloom, color bleed, persistence\" width=\"540\" /\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"Assets/feat-live-preview.png\" alt=\"Live-preview mode — Settings panel fades while the focused Intensity slider stays sharp over the live emulator output\" width=\"540\" /\u003e\u003c/p\u003e\n\n**Unified user preferences** persist in `%LOCALAPPDATA%\\Casso\\UserPrefs.json`: global UI state under `global`, and per-machine deltas under `machines` keyed by display name. Most settings live there today; a small set of legacy values (last-loaded machine, per-machine last-inserted disk paths, audio download consent, window placement) still live in the registry for backwards compatibility and will migrate to JSON in a follow-up.\n\n### Disk II audio (v1.3.696)\n\nRealistic mechanical sounds during disk activity, mixed into the WASAPI pipeline alongside the //e speaker:\n\n- Stereo motor hum, head-step clicks, track-0 / max-track bumps, and disk insert / eject sounds.\n- Per-drive equal-power stereo panning: single-drive profiles play centered; in two-drive profiles Drive 1 leans left, Drive 2 leans right.\n- Step-vs-seek discrimination: contiguous step bursts during DOS RWTS recalibration fuse into a continuous seek buzz instead of N overlapping clicks.\n- *View → Options...* dialog with a Drive Audio toggle (default on) and a Disk II mechanism dropdown (Shugart SA400 by default, or Alps 2124A). Both persist per-machine via the registry.\n- First-run consent dialog downloads the actual recordings from the [OpenEmulator](https://github.com/openemulator/libemulation) project; OGGs are decoded in memory via vendored `stb_vorbis` and written as WAV (no `.ogg` retained on disk). Asked once per machine, persisted thereafter.\n- Generic `IDriveAudioSink` / `IDriveAudioSource` / `DriveAudioMixer` abstraction so future drive types (//c internal 5.25, DuoDisk, Apple 5.25 Drive, ProFile, ...) plug in without touching the mixer.\n\n## Project Structure\n\n```\nCasso.sln\n├── CassoCore/     Static library — CPU emulator, assembler, parser, opcode table\n├── CassoEmuCore/  Static library — Apple II devices, video modes, audio generator + drive-audio mixer\n├── Casso/         Win32 application — Apple II platform emulator (D3D11, WASAPI, Disk II audio)\n├── CassoCli/      Console application — AS65-compatible assembler CLI with `run` subcommand\n└── UnitTest/      Test DLL — Microsoft Native CppUnitTest (1650+ tests)\n```\n\n## Requirements\n\n- Windows 10/11\n- PowerShell 7 (`pwsh`) for build/test scripts\n- Visual Studio 2026 (v18.x)\n  - Workload: **Desktop development with C++**\n  - Components: MSVC build tools, Windows SDK, C++ unit test framework\n  - Optional: MSVC ARM64 build tools (for ARM64 builds)\n- Optional: VS Code (repo includes `.vscode/` tasks)\n\n## Quick Start\n\n### Build\n\n```powershell\n# Build Debug for current architecture (Ctrl+Shift+B in VS Code)\n.\\scripts\\Build.ps1\n\n# Build Release\n.\\scripts\\Build.ps1 -Configuration Release\n\n# Build all platforms\n.\\scripts\\Build.ps1 -Target BuildAllRelease\n\n# Rebuild with code analysis (warnings as errors)\n.\\scripts\\Build.ps1 -Configuration Release -RunCodeAnalysis\n```\n\n### Test\n\n```powershell\n# Build and run tests\n.\\scripts\\RunTests.ps1\n\n# Or use VS Code: Run Tests (current arch)\n```\n\n### Assemble and Run\n\n```powershell\n# Assemble a source file to a flat binary (AS65 mode — no subcommand)\nCassoCli input.a65 -o output.bin\n\n# Assemble with a listing file and a symbol table\nCassoCli input.a65 -o output.bin -l listing.txt -t\n\n# Output Motorola S-record (.s19) or Intel HEX (.hex)\nCassoCli input.a65 -s   -o output.s19\nCassoCli input.a65 -s2  -o output.hex\n\n# Pre-define a symbol on the command line\nCassoCli input.a65 -d DEBUG=1 -o output.bin\n\n# Generate a listing with cycle counts\nCassoCli input.a65 -c -l listing.txt\n\n# Assemble and run an assembly source directly\nCassoCli run input.a65\n\n# Load and run a pre-assembled binary at a specific address\nCassoCli run output.bin --load $8000\n```\n\n### Apple II Emulator\n\nThe emulator requires Apple II ROM images, which are copyrighted by Apple and not\ndistributed with this project. A script is included to download them from the\n[AppleWin](https://github.com/AppleWin/AppleWin) project:\n\n```powershell\n# Download ROM images into the per-machine Machines/\u003cName\u003e/ folders\n.\\scripts\\FetchRoms.ps1\n\n# Run the emulator (defaults to Apple II+)\nCasso\n\n# Run with a specific machine config\nCasso --machine Apple2e\n```\n\nROM images live under `Machines/\u003cMachineName\u003e/` (e.g.,\n`Machines/Apple2e/Apple2e.rom`) and shared device boot ROMs live\nunder `Devices/\u003cFamily\u003e/` (e.g., `Devices/DiskII/Disk2.rom`). Both\n`Machines/` and `Devices/` are fully runtime-managed: every file\ninside is either extracted from binary-embedded resources or\ndownloaded on first launch (with user consent). Delete either\ndirectory and the next launch rebuilds it from scratch.\n\nAvailable machine configs are in `Machines/\u003cMachineName\u003e/\u003cMachineName\u003e.json`.\n\n## Assembler Features\n\n| Feature | Syntax / Flag |\n|---------|---------------|\n| All 56 mnemonics | `LDA`, `STA`, `ADC`, `BNE`, etc. |\n| All addressing modes | `#$42`, `$30`, `$1234,X`, `($20),Y`, `A` |\n| Labels | `loop: DEX` / `BNE loop` |\n| Directives | `.org $8000`, `.byte $FF`, `.word $1234`, `.text \"hello\"`, `code`/`data`/`bss` |\n| Constants | `value = $42`, `carry equ %00000001` (chains and forward refs supported) |\n| Conditionals | `if`/`ifdef`/`ifndef`/`else`/`endif` |\n| Macros | `name macro` … `endm`, with arguments and `\\` line continuation |\n| Includes | `include \"file.a65\"` |\n| Comments | `; full line` / `LDA #$42 ; inline` |\n| Number formats | `$FF` (hex), `%10101010` (binary), `255` (decimal) |\n| Expressions | full operator set: `+ - * / % \u0026 \\| ^ ~ \u003c\u003c \u003e\u003e`, `\u003clabel`, `\u003elabel`, current-PC `*` |\n| Listing output | `-l [file]` (stdout or file), `-c` for cycle counts, `-m` for macro expansion |\n| Symbol table | `-t` |\n| Output formats | flat binary (default), `-s` (S-record), `-s2` (Intel HEX) |\n| Fill control | `-z` for `$00` fill (default `$FF`) |\n| Pre-defined symbols | `-d NAME` or `-d NAME=VALUE` |\n| Debug info | `-g [file]` |\n| Warning control | `--warn`, `--no-warn`, `--fatal-warnings` |\n| Verbose / quiet | `-v` / `-q` |\n| Flag concatenation | `-tlfile` ≡ `-t -l file` (AS65 style) |\n\n## CPU Emulation Status\n\nAll 56 standard 6502 mnemonics are implemented. Validated against [Klaus Dormann's functional test suite](https://github.com/Klaus2m5/6502_65C02_functional_tests) (full pass) and [Tom Harte's SingleStepTests](https://github.com/SingleStepTests/ProcessorTests) (all 151 legal-opcode test sets, 10,000 vectors each).\n\n## Roadmap\n\n### Done\n\n- [x] Pass [Klaus Dormann's 6502 functional test suite](https://github.com/Klaus2m5/6502_65C02_functional_tests) ([#7](https://github.com/relmer/Casso/issues/7))\n- [x] Per-opcode validation against [Tom Harte's SingleStepTests](https://github.com/SingleStepTests/ProcessorTests) ([#29](https://github.com/relmer/Casso/issues/29), [#38](https://github.com/relmer/Casso/issues/38))\n- [x] Apple //e fidelity — cold boot to BASIC, audit-correct Language Card, 64 KB aux RAM, 80-column text + Double Hi-Res, soft reset vs. power cycle, IRQ/NMI dispatch, RDVBLBAR\n- [x] Disk II controller — DOS 3.3 / ProDOS `.dsk` / `.do` / `.po` nibblization + WOZ v1 / v2 with auto-flush on eject\n- [x] Disk II mechanical audio — stereo motor hum, head-step clicks, track-0 bump, disk insert / eject sounds, with a runtime Settings → Machine → Drive audio toggle. Built on a generic `IDriveAudioSink` / `IDriveAudioSource` / `DriveAudioMixer` abstraction so future drive types (//c internal 5.25, DuoDisk, ProFile, …) plug in without touching the mixer\n- [x] Headless test harness for deterministic integration tests (`HeadlessHost`, framebuffer scraper, keyboard injector)\n- [x] Performance gate — emulator throughput budget enforced in CI (Release-only)\n- [x] Cycle-accurate execution and profiling ([#57](https://github.com/relmer/Casso/issues/57))\n- [x] Disk II copy-protection fidelity — motor spin-up delay, MC3470 weak-bit emulation, real 16-state LSS, quarter-track read pipeline, and bit-level write path ([#67](https://github.com/relmer/Casso/issues/67))\n- [x] Boot *Karateka* from its WOZ image (RWTS18 copy protection) ([#68](https://github.com/relmer/Casso/issues/68))\n- [x] Boot *Lode Runner* from its WOZ image (copy protection) ([#70](https://github.com/relmer/Casso/issues/70))\n\n### Medium Priority\n\n- [ ] 65C02 extended instruction support, with assembler `--cpu` flag ([#9](https://github.com/relmer/Casso/issues/9))\n- [ ] Undocumented / illegal opcode support ([#52](https://github.com/relmer/Casso/issues/52))\n- [ ] Rockwell / WDC 65C02 variants ([#49](https://github.com/relmer/Casso/issues/49), [#50](https://github.com/relmer/Casso/issues/50))\n- [ ] *Choplifter* gameplay starts after the title screen (WOZ copy protection) ([#69](https://github.com/relmer/Casso/issues/69), [#72](https://github.com/relmer/Casso/issues/72))\n\n### Low Priority\n\n- [ ] NES 6502 / Ricoh 2A03 variant ([#47](https://github.com/relmer/Casso/issues/47))\n- [ ] Example programs — ready-to-assemble demos and tutorials ([#55](https://github.com/relmer/Casso/issues/55))\n- [ ] VS Code extension — syntax highlighting, assemble-on-save, inline diagnostics ([#54](https://github.com/relmer/Casso/issues/54))\n- [ ] Interactive debugger / monitor — step, breakpoints, register watch, memory dump ([#51](https://github.com/relmer/Casso/issues/51))\n- [ ] Relocatable object output — o65 format for cc65 toolchain integration ([#58](https://github.com/relmer/Casso/issues/58))\n\n## Why \"Casso\"?\n\nWhile [emu](https://en.wikipedia.org/wiki/Emu) is the more obvious name and mascot for an emulator, I wanted Casso to stand out; to be just a little weird; to _think different_. I picked its larger, flightless, considerably more dangerous cousin: the [cassowary](https://en.wikipedia.org/wiki/Cassowary)—Casso to his friends.\n\nI thus present to you our regal namesake—revel in his splendor!\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"Assets/3a%20Mrs%20Cassowary%20closeup%208167.jpg\" alt=\"Southern Cassowary\" width=\"240\" /\u003e\n\u003c/p\u003e\n\n*Cassowary photo by [Mr. Smiley / BunyipCo](https://bunyipco.blogspot.com/2015/04/cassowary-update.html), licensed under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/).*\n\n## Acknowledgments\n\nCasso's correctness is validated against two exceptional open-source test suites:\n\n- **[Klaus Dormann's 6502 Functional Test Suite](https://github.com/Klaus2m5/6502_65C02_functional_tests)** — [@Klaus2m5](https://github.com/Klaus2m5)'s exhaustive functional test exercises every documented 6502 behavior: all instructions, addressing modes, flag interactions, BCD arithmetic, and edge cases. Casso passes the full suite.\n- **[Tom Harte's SingleStepTests](https://github.com/SingleStepTests/ProcessorTests)** — [@TomHarte](https://github.com/TomHarte)'s per-opcode test vectors validate every legal 6502 opcode against cycle-accurate reference traces. Casso passes all 151 legal-opcode test sets (10,000 vectors each).\n\nThank you to both authors for making these invaluable resources freely available. They are the gold standard for 6502 emulator validation.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for commit conventions, build instructions, code style guidelines, and other contributor guidelines.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frelmer%2Fcasso","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frelmer%2Fcasso","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frelmer%2Fcasso/lists"}