msx-code-data
Split code from data early in a banked Z80 MSX disassembly: .blocks maps, bank classification, inline DISPATCH_A tables, illegal-sequence seeds, peeling…
Skill by 0xe1f
Chalk Labs
Need help deploying msx-code-data?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/0xe1f-msx-code-data
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/msx-code-data
What's inside
- Skill name
msx-code-data- Description
- Split code from data early in a banked Z80 MSX disassembly: .blocks maps, bank classification, inline DISPATCH_A tables, illegal-sequence seeds, peeling identified blobs into banks/data. Use after msx-bootstrap on a new cart, when writing banks/*.blocks or window banks_*.blocks, converting fake instructions to defb/defw, asking what is code vs data, or moving tables/gfx out of a bank file.
- License
- Apache-2.0
- Instructions
- 112 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Split code vs data Unmarked data desyncs z80dasm for every byte after it until the next obvious entry. Mark a region as data **before** naming the table. `.blocks` only changes rendering, never bytes. Naming: `konami-msx-disasm`. Regen: `msx-regen`. `make verify` after every edit (`konami-msx-disasm`). ## After bootstrap `msx-bootstrap` named bank 0 boot (header, init, `H.TIMI`, switchers). Next: 1. Decode paging helpers. Those writes are the ground truth for what each other 8 KiB bank **is** (play code, tileset, map, title gfx, sound) and which banks are mapped **together**. Combine those into window files (`konami-msx-disasm`); do not leave a known triplet as three `bankNN.asm`. 2. Entropy / opcode histogram is a hint (`0xCD`/`0xC3`/`0xDD` vs low-entropy zero-heavy 4bpp). Call-opcode density is the other hint: a bank whose `call` count is a small fraction of the resident window is graphics or pointer tables until a consumer says otherwise. Mixed banks exist — do not call a map or PSG-driver bank “graphics” from entropy alone. 3. Seed `.blocks` from the mechanical list below. Regen **code** banks with the block file. Leave gfx / packed-PSG payload as `INCBIN` until the consumer (RLE decoder, list loader, PSG interpreter) is found, then fold as labelled `.asm` (not z80dasm). End state: no leftover `.bin`. 4. After the first raw regen, grep `generated/*.raw.asm` for `;illegal sequence` and for nonsense `jp` / `ret cc` / `sbc a,*` runs. Each hit is a `.blocks` seed. 5. Name the resident window before folding the next code window. Order is `konami-msx-disasm` (Naming a window): work-RAM map, repeated `ix`/`iy` record, high-fan-in routines. More raw listings add automatic labels and do not add names. Do not disassemble a tileset or RLE bank as code. ## `.blocks` One file per **window**, same stem as the `.asm` (`banks/banks_123.blocks`). Until windows exist, one file per 8 KiB (`banks/bank00.blocks`) is fine. `regen-bank.sh` keeps only blocks whose **start** falls in the 8 KiB being disassembled — pass the window `.blocks` for every slice in that window. Names must not collide with in-source labels (z80dasm emits `NAME_start`). Section the file per 8 KiB (`; bank 1 @ 0x6000`). ``` rom_header: start 0x4000 end 0x4010 type bytedata foo_tbl: start 0xADDR end 0xADDR type worddata ``` `type` is `bytedata` or `worddata`. Bound a table by the next real routine, a range check on A, or a `dec a` / `sub base` immediately before the dispatcher (off-by-one: id N is `table[N-1]`). ## Seed mechanically (day one) - **AB header** (16 bytes at `0x4000`) is never code. Konami often parks a Game Master option table immediately after it — that island mis-aligns the IRQ if decoded as instructions. - Every `call DISPATCH_A` (or the local pop-return-address dispatcher) is followed by an inline **word** table. Same for `ld hl/de,imm` then `ADD_HL_A` / `ADD_DE_A`: the immediate is a table start. `romscan table` decodes it; `--index-base 1` when the dispatcher does `dec a`. - A jump table at the **end of a bank may continue into the next page**. Mapper switch addresses are typically write-only; a *read* returns the ROM currently paged there. Alignment follows the table, not the page (odd start + pad → do not `defw` from the page base). - Layout / text streams often use `0xFE` = next row/field, `0xFF` = end. Finding the blit in bank 0 lets `romscan xref` list every stream. ## Do not - Wait to understand a table before marking it. Un-poisoning the following code is the point. - Require a gap after `ret`. `table[0]` may be `0xC9` that is also the previous routine’s return. - Treat “never executed” as data. Coverage misses Game Master, credits, unused types. Broad `EXEC` is not a code/data map (`msx-cocoamsx`). Coverage **confirms** a region is code; it does not prove the rest is data. - Drop a well-formed entry because nothing selects it. Keep the bytes. Record the finding in the game's `docs/UNUSED.md` (`konami-msx-disasm`). `unrefd_XXXX` is only for bytes no traced table reaches. - Reuse the first packed-list decoder on the next blob in the same bank. A second list often has a different grammar. - Mass-convert an unknown bank to opaque `db`. ## Peel (identified blobs) `INCBIN` is a holding pattern. Once a consumer and a grammar exist, fold the blob as labelled `defb`/`defw`. Identified **1bpp pixels** (tiles, sprites, fonts, leftover copies) are `defb %xxxxxxxx` immediately — not after a PNG, not only when the file is a catalogue stem (`msx-gfx-sheets`). Hex `0xxh` rows are for unknown or non-pixel bytes. Every ROM byte ends as labelled `.asm`. Leave it in the bank file, or as `banks/bankNN.<stem>.inc`, until it is a named catalogue of its own. Then `banks/data/<stem>.asm` and `INCLUDE` from the bank or window file. PNG pairing: `msx-gfx-sheets`. Do not create `banks/data/` speculatively. Do not peel jump tables that sit next to their dispatcher, or move type-id `.inc` files into `data/`. Do not z80dasm a tileset / RLE / packed-PSG payload. ## Consumers, then scan Once the RLE decoder / the text blit / the PSG interpreter is named in bank 0, scan other banks for well-formed streams (`msx-gfx` RLE grammar; `0x00` end). Those regions are data. `gfxview.py` on a low-entropy bank is a preview, not a split. Companion: `msx-bootstrap`, `msx-regen`, `msx-romscan`, `msx-gfx`, `konami-msx-disasm`.
From 0xe1f/MSXDAW, Apache-2.0.
More from 0xe1f/MSXDAW
- 0.587score
konami-msx-disasm
0xe1f
Methodology for a byte-exact, commented, reassemblable disassembly of a Konami MSX/MSX2 MegaROM (Konami4 / SCC and similar).
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
msx-regen
0xe1f
Regenerate an 8 KiB mapper bank with z80dasm via tools/workbench/msx/regen-bank.sh, emit a per-bank symbol file, and strip listing comments.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
msx-romscan
0xe1f
Static xref and dispatch-table decode for banked Z80 ROMs via tools/workbench/msx/romscan.py.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
msx-cocoamsx
0xe1f
How to use workbench CocoaMSX as a research display: launch, JSON config, accelerated present toggle, control socket (peek/watch/snap/loadstate/keys)…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-coverage
0xe1f
Disassembly progress badges and coverage.py (INCBIN leftover, auto labels, opcode comments, annotated call targets).
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-gfx
0xe1f
Inspect MSX graphics: 1bpp/4bpp ASCII via gfxview.py, PNG via pngwrite.py, and Konami VRAM RLE (rledec.py / rleenc.py).
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-gfx-sheets
0xe1f
Build labelled PNG contact sheets for MSX tiles, metatiles, hardware sprites, fonts, and palettes.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-psg-catalogue
0xe1f
Build labelled WAV catalogues for MSX PSG BGM and SFX (Konami packed-PSG or Taito psg_play).
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-scaffold
0xe1f
Create a new MSXDAW game repo from a ROM dump: probe mapper and size, run bin/scaffold, wire the workbench submodule, LICENSE/README/CI, sjasmplus, then hand…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
konami-psg
0xe1f
Render Konami packed-PSG bytecode to WAV.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-bootstrap
0xe1f
First session on a new MSX cart: mapper probe, bank split, regen bank 0, AB header, H.TIMI / IRQ.
SkillBFreshness: B★ 1Claude Code +9 - 0.536score
msx-trace
0xe1f
Build and run workbench CocoaMSX tracing.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 21, 2026 (9 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/0xe1f/MSXDAW
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from 0xe1f
- 0.587score
konami-msx-disasm
0xe1f
Methodology for a byte-exact, commented, reassemblable disassembly of a Konami MSX/MSX2 MegaROM (Konami4 / SCC and similar).
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
msx-regen
0xe1f
Regenerate an 8 KiB mapper bank with z80dasm via tools/workbench/msx/regen-bank.sh, emit a per-bank symbol file, and strip listing comments.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
msx-romscan
0xe1f
Static xref and dispatch-table decode for banked Z80 ROMs via tools/workbench/msx/romscan.py.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
msx-cocoamsx
0xe1f
How to use workbench CocoaMSX as a research display: launch, JSON config, accelerated present toggle, control socket (peek/watch/snap/loadstate/keys)…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-coverage
0xe1f
Disassembly progress badges and coverage.py (INCBIN leftover, auto labels, opcode comments, annotated call targets).
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
msx-gfx
0xe1f
Inspect MSX graphics: 1bpp/4bpp ASCII via gfxview.py, PNG via pngwrite.py, and Konami VRAM RLE (rledec.py / rleenc.py).
SkillBFreshness: B★ 1Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get msx-code-data running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
msx-code-data skill. Agent Mart. https://agentmart.dev/skills/0xe1f-msx-code-data (last updated 2026-10-24)