Assemblers, compilers, and PRG-oriented tools
Commonly used assemblers
- asm6 - written by Loopy because most other assemblers "were either too finicky, had weird syntax, took too much work to set up, or too bug-ridden to be useful".
- asm6f - fork of asm6, providing support for illegal opcodes, NES 2.0 headers, symbol files for FCEUX/Mesen/Lua, and other features. See Releases for Windows binaries
- CC65 - A portable 6502/65c02/65c816 assembler, linker, and C compiler.
- NESASM (MagicKit) by Charles Doty, David Michel, and J.H. Van Ornum.
- Unofficial MagicKit by zzo38. Based on MagicKit but with many improvements; includes PPMCK support
- WLA DX - A portable GB-Z80/Z80/6502/6510/65816 macro assembler. Linux and MS-DOS versions are also available.
- AS65 - written by Andrew John Jacobs. A macro assembler for 8 and 16-bit 65xx. Available for DOS/Win32 and Java. The Java port is strongly recommended.
- ACME - Marco Baye's ACME 6502/65c02/65c816 cross-assembler. Runs on several platforms, including Amiga, DOS, and Linux. Supports macros, local labels, and many other features.
- dasm - by Matthew Dillon of the DragonflyBSD project, extended and maintained by various other authors. A macro assembler intended for 6502, 6507, 6803, HD6303, 68HC11, 68705, and F8 architectures.
- FASM v1.0 by Toshi Morita. FASM was written as a quick replacement for the 2500 AD assembler for Nintendo 8-bit development. Licensed under the GPL.
- Merlin 32 - by Brutal Deluxe Software. 6502/65816 cross-assembler/linker for Win32, Linux, and OS X. Influenced by the Merlin/16+ assembler/linker for the Apple IIGS.
- nescom - Joel Yliluoma's 6502 assembler; written in C++, based on xa65 and largely compatible with it, including with the o65 object file format.
- NESHLA by Brian Provinciano. A 6502 assembler specifically geared towards NES development.
- Ophis Assembler by Michael C. Martin. An open-source 6502 assembler written in Python.
- P65 Assembler - A portable 6502 assembler written in Perl.
- Telemark Cross Assembler - A shareware assembler for numerous 8-bit processors, including the 6502, Z80, and 8051.
- x816 v1.12f by minus. An assembler for 6502/65c02/65c816. MS-DOS only.
- xa65 - Andre Fachat's open-source cross-assembler; written in C and supports the standard 6502 and 65c816 opcode lists. Sports a C-like preprocessor and supports label-hiding in a block structure. Produces plain binary files, as well as special o65 object files. Further tools include a linker, file and relocation utilities for o65 files.
- XORcyst - "... a rather platform-independent set of tools and languages for 6502 software development" written by Kent Hanson, aka SnowBro.
- XTOOLS - table-based assembler and toolkit. Includes an assembler, disassembler, and several tools. Shareware (US$49); registered version includes a table-based assembly source translator. Note: files are generated as Motorola formatted hex files; you will need a converter (see Converters below)
- Kick Assembler - 6510 assembler with high level scripting. KickC targets at this assembler.
- NESASM CE - fork of NESASM (MagicKit) by Alexey Avdyukhin (Cluster) with additional NES features: NES 2.0 headers, symbol files for FCEUX, etc.
- 6502d - by Cortez Ralph. Win32 (GUI-based) rewrite of original 6502 disassembler (MS-DOS) by Bart Trzynadlowski.
- clever-disasm - by Bisqwit/Joel Yliluoma. Part of the nescom assembler suite (see above).
- da65 - part of the cc65 suite. Primarily intended for individuals using tools in the cc65 suite (ex. ca65).
- disasm6 - PHP-based 6502 (NES-oriented) disassembler intended for use with asm6 assembler. Pre-compiled Windows binaries are available.
- NES Disassember - by Morgan Johansson. MS-DOS.
- SmartRENES - by Hyde. Supports mappers 0, 1, 2, 3, and 7. Windows binaries only.
- TRaCER - by koitsu/Jeremy Chadwick. 6502/65816 disassembler intended for NES and SNES platforms. MS-DOS. (Does contain a confirmed bug related to one 65816-specific opcode)
- NESICIDE (WIP) source code only, Github link for the NESICIDE IDE by cpow (Chris Pow)
- WUSDN A New NES IDE as of 2012 by the WUSDN team, Originally for Atari 8-Bit computers, Now also comes with NES capability, Requires Java Runtime Environment and Eclipse to run!
- CC65 - A portable 6502/65c02/65c816 assembler, linker, and C compiler.
- KickC - C-compiler for creating optimized and readable 6502 assembler code. (NesDev forum)
- Converters for INTEL/MOTOROLA HEX formats to Binary (BIN) and back, for assemblers like XTOOLS.
Pre-processors and other code (PRG) tools
- shuffle.py by Damian Yerrick - Preprocessor to rearrange variables, subroutines, and instructions in a file, for using other variables as memory canaries or watermarking beta builds
- Compress Tools - A multi-featured open-source compressor featuring many algorithms, extendable to new algorithms. Allows to break data in many small independent blocks and more by the usage of scripts.
- Huffmunch - A generic compression library for NES/6502 with very low RAM requirements.
- User:Ns43110/donut.s - A CHR compression library.
- NEStress ROM for testing emulators (includes source code)
General NES graphics studios
Collected here are editors that offer a holistic approach to the creation and editing of various NES native graphics assets. These tools may offer in more or less equal measures the editing of tiles, screens, maps, sprites, metasprites and palettes in tandem; allowing for a resource efficient approach.
- NES Assets Workshop (NAW), by Nesrocks. Built in GameMaker with a thematic GUI. Compared to NESST & NEXXT, NAW opts for a classic toolbox menu with toggle hotkeys, similar to Photoshop, Aseprite and many more, which makes certain tools instantly discoverable. Has a special "Overlay" editing mode which lets you draw sprite overlays on top of backgrounds.
- NEXXT, a continuation of NESST maintained by FrankenGraphics. Adds an arsenal of new tools and features along with speed-improved workflows, work safety, discoverability, and bugfixes.
- NES Screen Tool (NESST) by Shiru (Deprecated). Tile oriented pixel art studio capable of editing CHR, backgrounds, sprites, metasprites, and palettes. Facilitates a modifier-key approach to make editing quicker, at some cost of discoverability (browsing through the readme is recommended).
Converters are good choices for when you prefer to work on an asset in a general purpose graphics studio such as Photoshop, GIMP, Aseprite, GraphicsGale etc, and need to convert or extrapolate NES ready data from that work.
- I-CHR by Kasumi. Converts PC images and image sequences into NES compatible tilesets and nametables. Can also produce a NES ROM program displaying the graphics.
- OverlayPal by Michel Iwaniec (Bananmos). An image-to-NES-assets converterter that specializes in splitting the source image into a background layer and an "overlay" sprite layer.
- pilbmp2nes.py by Damian Yerrick - Command-line converter from indexed BMP or PNG to multiple consoles' tile formats.
- Tilificator by Michel Iwaniec (Bananmos) - sprite optimisation tool. Takes an image and finds resource effective hardware tiles for sprite usage. Can import/export to NESST .msb formats. A tutorial is available.
- NesTiler by Alexey Avdyukhin (Cluster). Converts PC images into pattern tables, nametables, attribute tables and palettes. This application can accept multiple images as input, the main point is to use single set of palettes (and tiles if required) for all of them, so it's possible to switch CHR banks and base nametable on a certain line, in the middle of rendering process. Can produce lossy result if image doesn't meet the limitations of NES. Uses command-line interface, so it can be used as a part of toolchain. Multiplatform.
Tile (CHR) editors
- 8ted by Damian Yerrick (deprecated).
- Famitile - (Note: the link is recovered from archive.org ) Old, super-minimalist graphics tool by zzo38. Requires an sdl of version 1.x, which can be gotten (here). Includes command-line and graphical mode; supports editing CHR, but also standard nametables, and MMC5 extension nametables.
- Nasu by 100 rabbits. A Minimalist NES tile editor with features such as quick colour selection via hotkeys. For win/mac/linux via an "UXN" emulator.
- Tile Molester by SnowBro, Central MiB, Lab313, and Mewster.
- YY-CHR, by YY. A tile editor that works like visual hex editor. Particularly popular in the romhacking scene, since you may modify an already assembled ROM image. Also has provisionary tile layout (nametable) capabilities.
Map (nametable) editors
- 8name by Damian Yerrick
- 8name.py by Damian Yerrick
- Famitile (mentioned above). While primarily a CHR editor, there is some support for nametable editing.
- YY-CHR (mentioned above). Has provisionary tools for nametable layouts.
- FamiTracker tracker-style music editor
- MCK driver and MML translator for music creation (includes source code)
- Musetracker tracker-style music editor (formerly known as PornoTracker).
- Nerd Tracker II tracker-style music editor
- PPMCK unofficial version by zzo38 (includes MagicKit as well)
DMC conversion tools
- FamiTracker can import .wav files and convert to DMC samples, which can then be exported as .dmc files.
- NSF Live! NSF player that can export DMC samples from NSF songs as .dmc files.
- Pin Eight NES Tools includes a command-line encoder and decoder by Damian Yerrick.
Other conversion tools
- Drum sample to noise sound effect/channel converter by lidnariq. Written in C.
Runtime engines for playing music and sound: see Audio drivers