Skip to content

Releases: bbbradsmith/nsfplay

NSFPlay 2.6

04 Jul 02:54
Choose a tag to compare

NSFPlay 2.6

The primary reason for this release is unicode filename support. It also includes unicode support for metadata (text, author, etc.), alternate configuration support for the command line, and several other minor upgrades and fixes.

Changes since 2.5:

  • NSF2 IRQ vector filled with existing content at $FFFE by default.
  • Unicode filename support, UTF8 metadata support.
  • Legacy Shift-JIS support for NSF title/author/copyright fields.
  • YM2413 emulation update to emu2413 1.5.9. (Gumball2415, okaxaki)
  • YMF281B plgDavid patch set option. (Gumball2415m plgDavid)
  • Resizable info window.
  • Right click info button to open the keyboard track-info window.
  • Fix random variation in command line WAV export times.
  • Allow multiple instances of command line WAV export.
  • Add redirectable diagnostic log to stdout for command line usage. (Use > to send it to a file.)
  • Allow command-line configuration overrides.
  • Allow command-line INI file overrides.
  • Use VS2019 for official builds (still using VS2017 v141_xp toolset).

NSFPlay 2.5

26 Oct 01:48
Choose a tag to compare

NSFPlay 2.5

Includes many minor changes since 2.4.

Changes since 2.4:

  • APU frequency dividers now count down (more accurate pitch change timing).
  • Keyboard view speed control setting should reset to normal when the program restarts.
  • DPCM bit-reverse option.
  • Playback advance options (auto, infinite play, single track).
  • Negate sweep init option (compatibility with old SuperNSF, etc. that relies on nonstandard sweep init).
  • Option to force VRC7 replacement with YM2413 (OPLL).
  • DPCM read delay adjusted (4 cycles is a more accurate approximation than 2).
  • Default volume of APU 2 raised to match measured triangle volumes.
  • Fixed triangle and noise being logically inverted.
  • Fixed error in track selector length when using NSFe playlists.
  • Integrated VRC7 (YM2143) emulation update from Mitsutaka Okazaki.
  • Linear square mix level now matches nonlinear at 1 full square.
  • Fix winamp playlist generator track titles.
  • Write protect internal player memory.

NSFPlay 2.4

31 Mar 02:21
Choose a tag to compare

NSFPlay 2.4

This version adds support for the NSF2 file format, which provides embedded metadata, and IRQ capabilities. NSFe metadata has been extended and merged with NSF2. New metadata additions include expansion audio mix levels and Dendy support. The quality setting and its underlying implementation has been rewritten, now applying globally rather than one setting per expansion device, and having better synchronization between the NES CPU and audio devices.

More info:

Many minor changes and fixes have been included as well.

Changes since 2.3:

  • Fixed incorrect bytes per second in stereo WAV output.
  • Fixed NSFe track title display when using playlist.
  • Fixed crash issue with 1MB NSF files. (Bank counting was incorrect.)
  • Default NTSC speed changed from 16640 to 16639. (Slightly more accurate to hardware.)
  • More bits of precision on fade-out, creates smoother fade.
  • 48000Hz is the new default samplerate.
  • Fixed keyboard view wave string bias on N163/FDS.
  • Fixed frequency rounding for triangle/noise/DMC in keyboard display.
  • Fixed intermittent crash with Winamp starting up with NSF in playlist.
  • Fixed FDS mod table bit-mask and wavetable read address. (Minor.)
  • Fixed broken playback rate for rates < 28 Hz.
  • NSFe RATE chunk implemented.
  • NSFe regn chunk implemented, including full Dendy support.
  • NSFe mixe chunk implemented.
  • NSFe taut, psfx chunk implemented.
  • Drag and drop will now acknowledge a failed load with a pop-up alert.
  • Migrate to VS2017.
  • IRQ support.
  • Play now runs at next opportunity rather than always at the start of frame, similar to poll based players like PowerPak.
  • Other expansions with FDS automatically disables FDS RAM writes, and FDS banking for $6000-7FFF.
  • Full NSF2 implementation. (non-returning INIT, suppress play, IRQ, NSFe metadata.)
  • Removed non-functional filters, compressors, etc. from the audio chain.
  • Removed per-channel quality settings, created a single master quality setting.
  • DPCM byte read now correctly takes 2 cycles.
  • Improved NES CPU vs APU/audio synchronization (controlled by quality setting).
  • Better error messages for files that can't be loaded.
  • Fixed broken seek, and restored the "fask seek" option. (Seeks as if quality=1, normally OK.)
  • If in_yansf.ini can't be found or created next to in_yansf.dll, will try to save settings to %AppData%\NSFPlay\ instead.
  • N163 compatbility options for phase write protect and limited wavelength. (Supports old NSFs that are not hardware accurate.)
  • Option to randomize starting triangle phase.
  • NSFe VRC7 chunk implemented, provisional support for YM2413 variant.
  • VRC7 patch set dump by Nuke.YKT.

NSFPlay 2.3

11 Sep 16:35
Choose a tag to compare

NSFPlay 2.3


  • All illegal 6502 opcodes are now emulated.
  • Audio emulation is now driven by CPU clock cycles, increases timing accuracy.
  • FDS emulation completely rewritten for better accuracy.
  • N163 emulation completely rewritten for better accuracy.
  • APU frame sequencer now correctly driven by $4017, supports 4 and 5 step modes, immediate reset, and IRQ flag.
  • MMC5 frame sequencer now independant of APU frame sequencer.
  • Time dilation now slows frame sequencer along with CPU rate.
  • Replaced PREFER_PAL setting with REGION, containing more options including Dendy support.
  • Swapped duty option for APU1.
  • More effective implementation of DMC anti-click option.
  • Removed useless "frequency limiter" APU option.
  • Added optional mute for ultrasonic triangle.
  • Fixed broken oversampling filter.
  • Adjusted device volumes to match more careful measurements, all centred at 128 now.


  • Better small icon.
  • Thinner DPCM address display, does not get truncated.
  • Using # instead of + for note names.
  • Cosmetic fixes in settings dialog.
  • Keyboard frequency display correction for APU/MMC5/VRC6 (were off by 1).
  • Keyboard envelope display now shows L for loop.
  • N163 waveform display now hides waveform when track is muted with a wave length >= 128.
  • Expanded infobox info for NSFe.
  • Fixed improper loading of UI DLL, prevents crash in same folder as Famitracker.
  • UI DLL now reports version, preventing potential problems if mismatched.
  • LOG_CPU option for dumping register writes to file.
  • Fixed song wrap where NSFs do not start on song 1.
  • Source code cleanup: removing unrelated Z80 emulation code.

Use for source code. The branch tag was created before migration to github and the tagged source may not accurately match the release.

NSFPlay 2.2

11 Sep 16:37
Choose a tag to compare

NSFPlay 2.2

Audio Emulation:

  • Unmute on reset now sets $4015 to $0F instead of $1F.
  • PAL noise frequency $1 now 8 instead of incorrectly 7.
  • New VRC7 patch set, option to select alternative patch sets via VRC7_PATCH.
  • 5B polarity inverted, envelope adjusted, volume tweak.
  • MMC5 polarity inverted, length counter runs at double speed, highest 8 frequencies are not muted.
  • VRC6 $9003 register implemented (controls halt and frequency multiplier)
  • VRC6 polarity inverted, phase reset now functions properly.
  • FDS now uses NSF header $76/$77 to set up $6000-7FFF memory range.
  • FDS $4087 bit 7 now mutes modulator.
  • Enable periodic noise option fixed. (Forced perodic noise by accident.)


  • Fixed improper $4015 read implementation (should return length counter status), also DPCM IRQ was not initialized.
  • Default focus in keyboard window now the track list (to prevent accidental mouse scroll time expansion).
  • Fixed Winamp visualizer timing inaccuracy, changed default keyboard delay/freq.
  • Inverted VRC7 volume display in keyboard view.
  • NSFe support.
  • Added NSFe extension block 'text', contains null terminated string of any length (NSF text).
  • Removed broken ENABLE_DCF config option. HPF=256 now correctly disables HPF.
  • Rewrote LPF and HPF, should have a more usable range of options now.
  • Removed XXX_FR/XXX_FC options, now XXX_FILTER works like LPF for each device.
  • Memory R/W access is now exclusive to the first device that accepts it; prevents FDS multi-expansion write conflicts.
  • Title string will automatically remove whitespace at its beginning or end.
  • Fixed single instance bug, was failing to open new NSF file when chosen from explorer.
  • Fixed conflicts between keyboard commands and other dialogs.
  • Removed tag menu from info page. Does not appear to apply to NSFs.
  • Fixed incorrect PAL pitch when QUALITY=0.

Use for source code. The branch tag was created before migration to github and the tagged source may not accurately match the release.

NSFPlay 2.1

11 Sep 16:39
Choose a tag to compare

NSFPlay 2.1

Audio Output:

  • Fixed race condition in audio buffering; stand alone NSFPlay would occasionally get stuck stuttering.
  • Produces stereo output, channel mixer dialog for panning and per-channel volume control.
  • Fixed PCM playback speed; CPU execution was counting requested clocks, not clocks executed.
  • Fixed accuracy of seek times.
  • Loop detection now accounts for all audio registers, not just a subset of 2A03 and N163.
  • N163 wavelength is actually 6-bit, not 3. Now allows sample length up to 256.
  • Fixed FDS volume/sweep envelope caps. (Direct register writes can make them louder.)
  • Fixed FDS modulation bias calculation and wrapping.
  • Set default volume for VRC7 and FDS a little lower (to match expected levels).
  • MMC5 PCM support (for both read and write mode).
  • Added phase reset option to MMC5.
  • MMC5 was missing length counter and audio register reads; rewrote to conform with APU.
  • Adjusted phases for APU/MMC5 square channels to match NesDev's description.
  • APU/DMC/MMC5 rewrite of envelope/length/sweep behaviour to use a frame sequencer instead of independent timers.


  • Option to randomize noise on reset (on by default).
  • Options cleanup, removed unused/deprecated options from .ini file.
  • Using global LPF by default instead of on each device (saves CPU, same result).
  • Keyboard view channel colour is now customizable in .ini file (CHANNEL_XX_COL).
  • Keyboard view:
  • Fixed crash due to keyboard OnTimer being allowed before Reset() is executed by the PlayThread.
  • Double buffering keyboard view to remove flicker.
  • Different colours for different expansions in keyboard view.
  • Fixed sound lag after seek.
  • FME-7 now named 5B, N106 now named N163.
  • DPCM now named DMC in keyboard view.
  • Fixed 5B volume display (E now correctly indicates envelope, volume is now correct value).
  • 5B now displays envelope and noise.
  • VRC6 saw volume now displays accumulator register.
  • Corrected VRC6 saw pitch in keyboard view.
  • Fixed trailing lines on N163 waveform display.
  • DMC volume display no longer flipped (is now $4011 register value).
  • DMC now shows sample frequency rather than byte frequency.
  • Triangle and noise were not showing muting due to length counter of 0.
  • Noise now has frequency display (either rate of random samples, or tonal frequency for periodic noise).
  • Removed feature that extends the life of key dots beyond the frame the channel is active (frequency can change when key is silent, esp. VRC6 squares, which visibly jump to the wrong pitch)


  • Save WAV button on NSFPlay.
  • Command line WAV output for batch processing.
  • Added extra NSF header information to "misc" text box, initial banks, load/init/play addresses, etc.
  • Fixed thread-safety issue for configuration (was accessed liberally from many threads).
  • Removed legacy code for windows versions older than XP.

NSFPlay 2.0

  • Restructured sln/vcproj files, and rebuilt for VS9.
  • All intermediate files go into common Debug/Release directories.
  • Renamed wa2nsf project to in_yansf to match name of the plugin.
  • Fixed improperly set WAVEFORMATEX header in libemuwa2 (allows execution on windows Vista/7).
  • Corrected pitch of noise channel.
  • Updated VRC7 default patch set.
  • Added PAL support and pal flags indicator (PREFER_PAL=1 to prefer PAL for dual mode).
  • Added about box for determining build version.
  • Fixed some menu items in English dialogs.
  • Fixed some initial config settings.
  • Fixed crash when using playlist menu options with no loaded NSF.

Use / for source code. The branch tag was created before migration to github and the tagged source may not accurately match the releases.