Tools I have created to help with NES/Famicom development.
Note: this is under heavy development and it's not currently usable.
nasm
nasm is an assembler specifically tailored for the NES/Famicom. Read more
about it in ./crates/nasm/README.md.
xa65
Since nasm is still under heavy development, it's a good idea to compare the
results that it produces with a mature and stable assembler like
cc65. The purpose of xa65 is to provide a
bridge, and so it simply executes both nasm and cc65 with the given
arguments. If the results from both assemblers are not the same, then it will
display a warning and produce the binary as taken from cc65. Moreover, if you
want this warning to be an error instead, then use the --no-errors.
Last but not least, you can also pass flags to xa65 like --strict, which
will invoke nasm with more pedantic features like its address sanitizer.
readrom
readrom is an objdump-like utility that reads a given ROM file and shows
information about it. Read more about it in
./crates/readrom/README.md.
runrom
runrom is an NES/Famicom emulator that doesn't attempt to run a ROM
graphically. Instead, it just runs code and exposes the data on memory,
registers, etc. for a given run. This is all done via the vnf
library, which allows a developer to programatically run a ROM file from a given
address, poke memory addresses, submit joypad inputs, etc. For some uses,
running runrom will be fine to get a glimpse of the execution of a piece of
code, but in some other cases (e.g. unit tests for a specific function on your
NES game), using vnf will be a better fit. In any case, you can read more
about all of this on runrom's documentation, and on
vnf's documentation.
License
This repository holds two licenses, as you can also note on the Cargo.toml
file. As it's written there:
- The source code on the
crates/directory is licensed under the GNU GPLv3 (or any later version). - The source code on the
lib/directory is licensed under the GNU LGPLv3 (or any later version).
In practice, for the libraries under lib/ this means that if you plan to
compile your binary statically, you still need to abide by the LGPLv3+ license.
This means at least providing the object files necessary to allow someone to
recompile your program using a modified version of these libraries. See the
LGPLv3 license for more details.
