NSF Importer 0.3 — Music Construction Set now imports NES chiptunes (.nsf). A full 6502 CPU runs the game's own sound driver while an APU model captures the music and converts it to a playable MCS song.
New: NES .nsf import
- Cycle-checked 6502 core — all 151 official opcodes, validated instruction-for-instruction against
nestest. It executes the cartridge's real sound engine (INIT once, PLAY every frame), including 4 KB bankswitching. - APU capture — logs the two pulse channels, triangle, and noise per frame at continuous pitch (vibrato and slides survive), auto-detects the song loop for one clean non-repeating pass, and ends on silence.
- Beat-aligned quantization — fits the 60 Hz frame stream onto MCS's 32nd-note grid, mapping the song's own base note to a whole tick count so onsets land on the beat. Exhaustive Optimize searches tempo × subdivision for the tightest alignment, then nudges playback speed to match a real MCS tempo exactly.
- Output targets — Tandy (3 square voices), PC Speaker 1-Note (monophonic 1-bit), and PC Speaker 4-Note (adds a dedicated percussion voice). The preview A/Bs the target chip's timbre against the true-hardware NES render.
- Two-tone percussion — the NES noise channel is read as a real drum kit: bright hits (short period) become a hi-hat, dark hits (the kick) a low bass, split by NES period index. Silent note-off writes are filtered so the drum line keeps its shuffle instead of buzzing.
Also in this release
- Import Preview now shows per-staff event budget, dropped-note readout, and a live "busiest staff" gauge; the solo audition round-trips through the actual MCS writer, so what you hear is what the exported file plays.
- Encoder capacity work: meter auto-fit, register-balanced two-staff layout, position-based per-measure capping (24 positions), and a 32-events-per-staff cap where percussion yields to melody first.
- 106 tests, including the 6502 ground-truth suite.
Download
MCS-Player.exe— standalone Windows build, no Python needed. SmartScreen will warn about an unrecognized (unsigned) app: More info → Run anyway.MAPLERAG.MCS— the public-domain Maple Leaf Rag demo song.
Importing
In the app: ⬆ Import… → pick a .nsf (or .pt3) → choose channels, output target, and tempo → Import. Or from source:
python -m mcs_convert convert SONG.nsf SONG.MCS
NES music is copyrighted by its publishers — convert files you're entitled to use. No game music is distributed with this release.
Full changelog: v0.2.0...v0.3.0