<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tools.nes/README.md, branch main</title>
<subtitle>Tools for NES/Famicom development.
</subtitle>
<id>https://git.mssola.com/nes/tools.nes/atom?h=main</id>
<link rel='self' href='https://git.mssola.com/nes/tools.nes/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/'/>
<updated>2026-08-17T21:06:23Z</updated>
<entry>
<title>Add the runrom crate and the vnf library</title>
<updated>2026-08-17T21:06:23Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-08-17T14:03:21Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=df1041d40431251e22e03ec5c4df7fc5767e1543'/>
<id>urn:sha1:df1041d40431251e22e03ec5c4df7fc5767e1543</id>
<content type='text'>
The vnf library supports the runrom crate and they both combined enable
users to "run" a ROM file. This is basically an emulator, but with two
key differences:

1. It is to be run programatically. That is, you are not expected to
   play games with this, but to run code by steps, start at a given
   address, run a function, etc.
2. It is headless: there are no graphics displayed on screen, nor sound
   being delivered.

Thus, the target for both these things are developers, not players. This
way developers can validate code paths without needing a full blown
emulator. You can write tests with this and be able to run some checks
as part of your testing infrastructure.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>readrom: implement the -d/--disassemble option</title>
<updated>2026-07-15T20:11:50Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-07-15T20:11:50Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=9d790bb4acddae689c5dda667f9d160041bdd4b8'/>
<id>urn:sha1:9d790bb4acddae689c5dda667f9d160041bdd4b8</id>
<content type='text'>
This option can also be coupled with -n/--nasm-directory, and you can
then get a human-readable disassembling of any proc or label you might
be thinking on.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Move and expand the README on nasm</title>
<updated>2025-09-04T05:56:44Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-09-04T05:56:44Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=14c8f64f38b601398a144d507c0183016d27b87c'/>
<id>urn:sha1:14c8f64f38b601398a144d507c0183016d27b87c</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Add a configuration for MMC1</title>
<updated>2025-01-23T15:16:11Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-01-23T15:16:11Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=121995bf3f21343848bd3b1d189529883e71044a'/>
<id>urn:sha1:121995bf3f21343848bd3b1d189529883e71044a</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Introduce xa65</title>
<updated>2025-01-10T15:35:12Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-01-10T15:35:12Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=7c09adae9e2710aefccd25b2920ca684c714ef49'/>
<id>urn:sha1:7c09adae9e2710aefccd25b2920ca684c714ef49</id>
<content type='text'>
This is a bridge between 'nasm' and 'cl65'. That is, it runs the same
command on both 'nasm' and 'cl65', compares the resulting binaries, and
gives back the binary from 'cl65'.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Rename to tools.nes</title>
<updated>2024-12-25T21:13:13Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2024-12-25T21:02:33Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=3c8773bf8ea8a17550f50f17eb211ae1a561bfb6'/>
<id>urn:sha1:3c8773bf8ea8a17550f50f17eb211ae1a561bfb6</id>
<content type='text'>
Let's continue with the good ol' tradition of being terrible at naming
things.

I have also renamed another project which was referenced here, so update
all references as well.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>nasm: Allow file paths for the configuration</title>
<updated>2024-12-22T22:33:33Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2024-12-22T22:33:33Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=4115d83eb537ffbd81e2fd8d12790a8fad769199'/>
<id>urn:sha1:4115d83eb537ffbd81e2fd8d12790a8fad769199</id>
<content type='text'>
This opens up the door for developers to pass their own configuration
files.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Dual license the source code under this repository</title>
<updated>2024-12-20T15:09:05Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2024-12-20T15:09:05Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=bdb7254a85b25a55f3cd4cb5252c3526699f4196'/>
<id>urn:sha1:bdb7254a85b25a55f3cd4cb5252c3526699f4196</id>
<content type='text'>
This means that the source code under `crates/` is under the GNU
GPLv3 (or any later version), and that source code under `lib/` is under
the GNU LGPLv3 (or any later version).

In practice this relaxes a bit the previous licensing because before it
was all GNU GPLv3 (or any later version). For people compiling a binary
with these libraries then this would've been spilling over the GPLv3 on
their binaries as well, which might not be desired. Instead, for the
libraries abide by the LGPLv3 (or any later version), which has the same
guarantees when it comes to free/lliure software for this specific case,
but at least we don't force the GPLv3 (or any later version) onto users.
That being said, users of these libraries still need to provide object
files so third parties could theoretically recompile those binaries
under a modified library.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Improve documentation on nasm</title>
<updated>2024-12-18T08:38:04Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2024-12-18T08:38:04Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=1da66eb87880894d503f26aaa432460cdebc66b5'/>
<id>urn:sha1:1da66eb87880894d503f26aaa432460cdebc66b5</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Add the readrom binary</title>
<updated>2024-12-18T06:46:26Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2024-12-18T06:46:26Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=407048d0037c8d6d26c7e3fe2384e974212f124e'/>
<id>urn:sha1:407048d0037c8d6d26c7e3fe2384e974212f124e</id>
<content type='text'>
The readrom binary is similar to `readelf` from Linux and it will allow
to display information from an NES/Famicom ROM file. For now the
information being shown is just the header, but in the future we might
also include disassembling parts of the code, or retrieving the "CHARS"
section for a given ROM file, and similar.

In order to implement the header parsing part a new library has been
introduced, simply named "header" which abstracts everything away so you
just need to call `Header::try_from("my bytes")` to fetch the actual
information.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
</feed>
