<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tools.nes/lib/xixanta/src/opcodes.rs, 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:07:03Z</updated>
<entry>
<title>Fix the opcode for the 'sed' instruction</title>
<updated>2026-08-17T21:07:03Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-08-17T21:07:03Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=d479b0fbd3778f5b6fc8b63f46aa0c5364e4fe7e'/>
<id>urn:sha1:d479b0fbd3778f5b6fc8b63f46aa0c5364e4fe7e</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<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>Add the .min and the .max control expressions</title>
<updated>2026-04-24T21:12:51Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-04-24T21:12:51Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=ee9d61f078b04406c5b264d4e0e5bd1ea287e6e2'/>
<id>urn:sha1:ee9d61f078b04406c5b264d4e0e5bd1ea287e6e2</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Add a big endian control statement</title>
<updated>2026-04-24T20:29:47Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-04-24T20:29:47Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=1410c98545d00c8508a715a566cf8e3e4e424773'/>
<id>urn:sha1:1410c98545d00c8508a715a566cf8e3e4e424773</id>
<content type='text'>
By default everything is little endian, and that should always be the
case. That being said, if a literal is better expressed in big endian
format for whatever reason, you can now use the .be or the .bigendian
control statements. The terribly named .dbyt control statement can also
be used for this purpose, but that's just to be compatible with the
implementation from ca65.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Add the .version pseudo-variable</title>
<updated>2026-04-24T14:26:08Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-04-24T14:26:08Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=c8138a0fc5353dc9017fc32fb5ef12a6fe780415'/>
<id>urn:sha1:c8138a0fc5353dc9017fc32fb5ef12a6fe780415</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Change .fallthrough to __fallthrough__</title>
<updated>2026-02-02T22:22:47Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-02-02T22:13:57Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=31dd071e927ab4375db6c408c08ab776e4a5c655'/>
<id>urn:sha1:31dd071e927ab4375db6c408c08ab776e4a5c655</id>
<content type='text'>
Implementing it as a control statement has the bad thing that it's
impossible to be compatible with other assemblers such as ca65, as you
cannot create dummy control statements or something like that in
there. Instead of that, we define it with the special underscores which
are still valid for identifiers, and give a "compiler-specific thingie"
flair to it.

This also has the benefit that the parser can be a bit more strict.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Add the .fallthrough control statement</title>
<updated>2026-02-02T21:38:16Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-02-02T21:38:16Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=4f1a9c660108e5fb94d5b19ee649427b8aafd96b'/>
<id>urn:sha1:4f1a9c660108e5fb94d5b19ee649427b8aafd96b</id>
<content type='text'>
This is exclusive to 'nasm' and it allows the developer to explicitly
tell the assembler than a "fall through" condition is actually desired:
it's not a mistake.

This comes in two flavors. The first, without arguments, just makes this
explicit without much enforcement. The second allows you to pass an
argument which is the name of the function or label you are expecting to
fall through. The assembler will error out if the fall through address
is not the expected one, hence telling the programmer whenever the fall
through condition they thought in the past is no longer true (e.g. the
function has moved somewhere else in the code).

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Drop lazy_static dependency</title>
<updated>2025-01-22T21:38:33Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-01-22T21:38:33Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=9660a01f4bcc514b70fe83fb64dc91659cf2bfa2'/>
<id>urn:sha1:9660a01f4bcc514b70fe83fb64dc91659cf2bfa2</id>
<content type='text'>
Apparently the standard library had LazyLock which is enough for what I
wanted to achieve with lazy_static.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Implement echo control statements</title>
<updated>2025-01-22T21:22:46Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-01-22T21:22:46Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/tools.nes/commit/?id=5d06ba11c981430aca68f2ea31771fca7f18529b'/>
<id>urn:sha1:5d06ba11c981430aca68f2ea31771fca7f18529b</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
</feed>
