Dotnet Debugging
novotnyllc/dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…
Disassemble and debug NES ROM files (.nes) produced by the dotnes transpiler.
$ npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jonathanpeppers/dotnes nes-rom-debug --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/nes-rom-debug .claude/skills/nes-rom-debug && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "nes-rom-debug" agent skill from https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debug into .claude/skills/nes-rom-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nes-rom-debug", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debugType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jonathanpeppers/dotnes nes-rom-debug --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/nes-rom-debug .agents/skills/nes-rom-debug && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "nes-rom-debug" agent skill from https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debug into .agents/skills/nes-rom-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nes-rom-debug", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jonathanpeppers/dotnes nes-rom-debug --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/nes-rom-debug .cursor/skills/nes-rom-debug && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "nes-rom-debug" agent skill from https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debug into .cursor/skills/nes-rom-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nes-rom-debug", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jonathanpeppers/dotnes.git --path .github/skills/nes-rom-debug--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jonathanpeppers/dotnes nes-rom-debug --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/nes-rom-debug .gemini/skills/nes-rom-debug && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "nes-rom-debug" agent skill from https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debug into .gemini/skills/nes-rom-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nes-rom-debug", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jonathanpeppers/dotnes nes-rom-debugInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/nes-rom-debug .github/skills/nes-rom-debug && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "nes-rom-debug" agent skill from https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debug into .github/skills/nes-rom-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nes-rom-debug", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jonathanpeppers/dotnes nes-rom-debug --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/nes-rom-debug .opencode/skills/nes-rom-debug && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "nes-rom-debug" agent skill from https://github.com/jonathanpeppers/dotnes/tree/main/.github/skills/nes-rom-debug into .opencode/skills/nes-rom-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nes-rom-debug", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
nes-rom-debugDisassemble and debug NES ROM files (.nes) produced by the dotnes transpiler.
Nes Rom Debug is an agent skill from jonathanpeppers/dotnes. Disassemble and debug NES ROM files (.nes) produced by the dotnes transpiler. Use this skill whenever the user wants to disassemble a .nes ROM, inspect 6502 machine code, compare two NES ROMs side-by-side, debug transpiler output, investigate byte differences between a cc65 reference ROM and a dotnes ROM, or understand what 6502 instructions the transpiler emitted. Also use when the user mentions disasm, disassembly, PRG ROM, ROM bytes, NES addresses, or wants to look at the hex/binary output of a build. Even if…
Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Debugging. It works with .NET. The repository describes itself as: .NET for the NES game console. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 42ca23d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pythondotnetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Nes Rom Debug loads about 1.5k tokens when it runs. Until then it costs about 161 tokens; SKILL.md has 509 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jonathanpeppers/dotnes at commit 42ca23d, republished under its MIT licence (© jonathanpeppers). 509 words, ~1,480 tokens.
.claude/skills/nes-rom-debug/SKILL.md (or your agent's skills folder).Tools and knowledge for disassembling NES ROMs and debugging dotnes transpiler output.
disasm.py — 6502 DisassemblerDisassembles the PRG ROM section of an iNES (.nes) file into human-readable 6502 assembly.
python scripts/disasm.py <file.nes> [start_hex] [end_hex]file.nes — Path to the NES ROM filestart_hex — (Optional) Start NES address in hex, default 8000end_hex — (Optional) End NES address in hex, default end of PRGExamples:
Note:
.nesfiles are build outputs — rundotnet buildin the sample directory first.
# Disassemble the entire PRG ROM
python scripts/disasm.py samples/hello/hello.nes
# Disassemble only the main() region
python scripts/disasm.py samples/hello/hello.nes 8500 8600
# Disassemble the interrupt vectors area
python scripts/disasm.py samples/hello/hello.nes FF00 FFFFOutput format:
$8500: A9 02 LDA #$02
$8502: 20 61 85 JSR $8561
$8505: 85 17 STA $17
$8507: D0 F7 BNE $8500Each line shows: $ADDR: HEX_BYTES MNEMONIC OPERAND
compare_rom.py — Side-by-Side ROM ComparisonCompares two NES ROMs with byte-level and instruction-level analysis. Use this to verify dotnes output against a cc65 reference ROM.
python scripts/compare_rom.py <reference.nes> <dotnes.nes>Output includes:
ildump.cs — IL Opcode DumperDumps the .NET IL opcodes from a compiled DLL — useful for understanding what IL the transpiler will process.
dotnet run scripts/ildump.cs -- <path-to-dll>Understanding the binary layout helps interpret disassembly output:
Offset Size Content
0x00 16 iNES header (starts with "NES\x1A")
0x10 32768 PRG ROM (mapped to NES $8000-$FFFF)
0x8010 8192 CHR ROM (pattern tables for tiles/sprites)Key NES addresses:
$8000-$85AD — neslib runtime and built-in subroutines (palette, PPU, NMI handler, stack ops)$85AE+ — main() and user code (exact layout varies per sample)$FFFA — NMI vector (2 bytes, little-endian)$FFFC — RESET vector (2 bytes, little-endian — entry point)$FFFE — IRQ vector (2 bytes, little-endian)File offset → NES address: nes_addr = 0x8000 + (file_offset - 16)
NES address → file offset: file_offset = (nes_addr - 0x8000) + 16
compare_rom.py to identify where bytes differdisasm.py on both ROMs targeting the diff region to see the instructionspython scripts/compare_rom.py reference.nes output.nes
# If diff at $8600-$8620:
python scripts/disasm.py reference.nes 85F0 8630
python scripts/disasm.py output.nes 85F0 8630cd samples/hello && dotnet builddotnet run scripts/ildump.cs -- samples/hello/bin/Debug/net10.0/hello.dllpython scripts/disasm.py samples/hello/bin/Debug/net10.0/hello.nes 8500The RESET vector at $FFFC points to the startup code, which eventually jumps to main. To find it:
# Look at the last few bytes for the vectors
python scripts/disasm.py myrom.nes FFF0 FFFF
# The RESET vector value tells you where startup is
# Then disassemble from there to find the JMP to mainWhen TranspilerTests.Write fails, the test produces a .received.bin alongside the .verified.bin. Compare them:
# The test DLLs are in src/dotnes.tests/Data/
# Build the test project to get the .received.bin
python scripts/compare_rom.py path/to/verified.bin path/to/received.binThe most common instructions you'll see in dotnes output:
| Opcode | Mnemonic | Meaning |
|---|---|---|
A9 | LDA #imm | Load accumulator with immediate value |
A5 | LDA zpg | Load accumulator from zero page |
AD | LDA abs | Load accumulator from absolute address |
85 | STA zpg | Store accumulator to zero page |
8D | STA abs | Store accumulator to absolute address |
20 | JSR abs | Jump to subroutine |
60 | RTS | Return from subroutine |
4C | JMP abs | Jump to address |
D0 | BNE rel | Branch if not equal (Z=0) |
F0 | BEQ rel | Branch if equal (Z=1) |
C9 | CMP #imm | Compare accumulator with immediate |
E6 | INC zpg | Increment zero page location |
C6 | DEC zpg | Decrement zero page location |
Zero page addresses used by dotnes:
$17 — TEMP$22-$23 — sp (cc65 software stack pointer)$0325+ — Local variables© jonathanpeppers, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/nes-rom-debug of jonathanpeppers/dotnes.
Open the folder on GitHubat commit 42ca23d
Nes Rom Debug next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Nes Rom Debug this skilljonathanpeppers/dotnes | 780 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Dotnet Debuggingnovotnyllc/dotnet-artisan | 233 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Okojo Node Ink Debugakeit0/okojo | 160 | — | ~798 | Automated safety check: Pass | MIT | |
| MSBuildLocator .NET Core Loadermicrosoft/MSBuildLocator | 263 | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Raven Debug Compilermarinasundstrom/raven | 108 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Development Workflowrunceel/ReactiveProperty | 944 | — | ~1.4k | Automated safety check: Pass | MIT |
novotnyllc/dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…
akeit0/okojo
Debug Okojo.Node large-app failures through sandbox/OkojoInkProbe and sandbox/OkojoNodeDebugSandbox.
microsoft/MSBuildLocator
Reference for how MSBuildLocator loads MSBuild assemblies and finds the .NET SDK on .NET Core hosts, for anyone editing or debugging that loader code.
marinasundstrom/raven
Debug workflow for Raven compiler analysis and emission issues using rvn frontend tooling and the rvnc compiler driver.
runceel/ReactiveProperty
ReactiveProperty repository development policy. An agent skill from runceel/ReactiveProperty.
microsoft/MSBuildLocator
Explains how MSBuildLocator loads MSBuild assemblies and finds Visual Studio installs on the .NET Framework net46 target, for anyone editing or reviewing that code.
jonathanpeppers/dotnes
Review dotnes pull requests against established repository rules.
jonathanpeppers/dotnes
Decompile NES ROM files (.nes) into C projects that can be rebuilt with dotnes.
jonathanpeppers/dotnes
Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review.
Works with
Categories
Disassemble and debug NES ROM files (.nes) produced by the dotnes transpiler. Nes Rom Debug is an agent skill from jonathanpeppers/dotnes.nes) produced by the dotnes transpiler.
Nes Rom Debug fits situations like: the user wants to disassemble a .nes ROM; inspect 6502 machine code; compare two NES ROMs side-by-side; debug transpiler output.
Run `npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a claude-code`. Or copy the skill folder (.github/skills/nes-rom-debug in jonathanpeppers/dotnes) into .claude/skills/nes-rom-debug in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a codex`. Or copy the skill folder (.github/skills/nes-rom-debug in jonathanpeppers/dotnes) into .agents/skills/nes-rom-debug in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jonathanpeppers/dotnes --skill nes-rom-debug -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nes-rom-debug, .gemini/skills/nes-rom-debug, .github/skills/nes-rom-debug and .opencode/skills/nes-rom-debug in your project.
Going by SKILL.md and its folder, Nes Rom Debug needs the command-line tools its instructions call (python and dotnet). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Nes Rom Debug is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.5k tokens (SKILL.md is roughly 5.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Nes Rom Debug: Dotnet Debugging (novotnyllc/dotnet-artisan, 233 stars), Okojo Node Ink Debug (akeit0/okojo, 160 stars), MSBuildLocator .NET Core Loader (microsoft/MSBuildLocator, 263 stars) and Raven Debug Compiler (marinasundstrom/raven, 108 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jonathanpeppers (a GitHub user) maintains it in jonathanpeppers/dotnes, which has 780 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 23, 2026.
Source: jonathanpeppers/dotnes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.