<feed xmlns='http://www.w3.org/2005/Atom'>
<title>jetpac.nes/src/vectors.s, branch main</title>
<subtitle>Port to the NES/Famicom of "Jetpac" from Ashby Computers and Graphics Limited.
</subtitle>
<id>https://git.mssola.com/nes/jetpac.nes/atom?h=main</id>
<link rel='self' href='https://git.mssola.com/nes/jetpac.nes/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/'/>
<updated>2026-02-12T23:03:07Z</updated>
<entry>
<title>Remove vector.s</title>
<updated>2026-02-12T23:03:07Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2026-02-12T23:03:07Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=03a5882df17ea42aa0b4039173f85ea1e7ce99fe'/>
<id>urn:sha1:03a5882df17ea42aa0b4039173f85ea1e7ce99fe</id>
<content type='text'>
Instead of this, the 'reset' function can go into 'jetpac.s', as we
could consider it's part of the 'main' work. As a bonus, doing this
alignment gives us 3 bytes back from ROM space. Not that we care too
much about space, but it's amusing nonetheless.

The debug scope has been moved into its own file in include/. Admittedly
it's not the most crucial file in the project, but it makes things more
logical and it opens the door to more debugging utilities.

This leaves us with a vector.s file only containing interrupt
code. Thus, it just makes sense to rename it to interrupts.s, which in
the end makes things more organized.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Adapt the code to play well with nasm's asan</title>
<updated>2025-12-15T14:31:06Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2025-12-10T13:41:35Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=74b1003ab8abad2f8220de4f2f18a3b118f23f01'/>
<id>urn:sha1:74b1003ab8abad2f8220de4f2f18a3b118f23f01</id>
<content type='text'>
The address sanitizer from nasm provides quite a few goodies, so let's
adapt the code more to it to benefit from those.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Don't handle frame drops unless PARTIAL is set</title>
<updated>2025-10-12T20:38:43Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mssola@mssola.com</email>
</author>
<published>2025-10-12T20:38:43Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=2fe3eedc1a562493165fc6523409c7b77180904f'/>
<id>urn:sha1:2fe3eedc1a562493165fc6523409c7b77180904f</id>
<content type='text'>
This fixes commit 6e274fb50251 ("partial: Account for frame drops") in
the sense that the accounting of frame drops should _never_ affect
production binaries. Even if the two instructions would've never been
reached if PARTIAL=0, they would still be included in the final binary,
which is not necessary.

Signed-off-by: Miquel Sabaté Solà &lt;mssola@mssola.com&gt;
</content>
</entry>
<entry>
<title>Initialize enemies at a random Y coordinate</title>
<updated>2025-05-16T05:55:56Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-05-15T20:06:00Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=638dfdca6e773d4b1ec573606cac90bdb1778667'/>
<id>urn:sha1:638dfdca6e773d4b1ec573606cac90bdb1778667</id>
<content type='text'>
The randomness comes from a pre-computed table of "random" numbers. This
is of course the most simple technique you can come across a code base
for the NES/Famicom, but for the purposes of this game is good enough
and (most importantly) fast.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>partial: Account for frame drops</title>
<updated>2025-05-15T04:41:32Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-05-15T04:41:32Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=6e274fb5025108bbf7cbe8173ce00f444a5f4445'/>
<id>urn:sha1:6e274fb5025108bbf7cbe8173ce00f444a5f4445</id>
<content type='text'>
Define tracing variables when PARTIAL=1, which is only on a development
environment. This way we can detect whether we are dropping frames or
not.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>reset: Do not zero out RAM</title>
<updated>2025-05-12T19:20:33Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-05-12T19:20:33Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=ad830a7f81871e15f43d7255f7af5463d9dd0bc5'/>
<id>urn:sha1:ad830a7f81871e15f43d7255f7af5463d9dd0bc5</id>
<content type='text'>
This is usually done so the programmer can forget about initializing in
the future, but it not only hides programming mistakes, but we are also
resetting memory addresses which are never to be used by this simple
game. Hence, just skip resetting RAM altogether.

Last but not least, sprite initialization in `reset` code has also been
optimized so instead of around 2000 cycles it takes half of that. This
is done by only touching the first byte of the four bytes for a sprite
in OAM, which is enough for hiding random sprites and the cost of extra
`inx` instructions is far cheaper than all the extra `sta` to absolute
address with X-index from the old code.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Add the ability to pause the game</title>
<updated>2025-04-03T17:02:10Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-04-03T17:02:10Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=b7c591c930ae74998463435e6f05d3312cfd1c8f'/>
<id>urn:sha1:b7c591c930ae74998463435e6f05d3312cfd1c8f</id>
<content type='text'>
Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>player: First PAL implementation</title>
<updated>2025-04-02T19:22:42Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-04-01T14:23:34Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=2f140cfb7ea73e631fce086327bcb3a674758b0e'/>
<id>urn:sha1:2f140cfb7ea73e631fce086327bcb3a674758b0e</id>
<content type='text'>
The steps by which a player increases its current velocity to reach the
target one has been adapted on PAL, so every five frames it takes an
extra step compared to NTSC. This at least brings PAL to grow its values
at the same rate as NTSC.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>reset: Read the PPU status before the first wait</title>
<updated>2025-03-19T16:30:46Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-03-19T16:30:46Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=d5a9dd6ad464004e58af5159bb240a45f201d59c'/>
<id>urn:sha1:d5a9dd6ad464004e58af5159bb240a45f201d59c</id>
<content type='text'>
That is, stick more closely to what the reference reset implementation
does.

Signed-off-by: Miquel Sabaté Solà &lt;mikisabate@gmail.com&gt;
</content>
</entry>
<entry>
<title>Disable the PPU between the title to main screens</title>
<updated>2025-03-19T16:28:36Z</updated>
<author>
<name>Miquel Sabaté Solà</name>
<email>mikisabate@gmail.com</email>
</author>
<published>2025-03-19T16:28:36Z</published>
<link rel='alternate' type='text/html' href='https://git.mssola.com/nes/jetpac.nes/commit/?id=4c8ed456d990ee99884e9dcd245f665ccb894b50'/>
<id>urn:sha1:4c8ed456d990ee99884e9dcd245f665ccb894b50</id>
<content type='text'>
During other transitions like game over and such it might also be needed
to have something similar, but for now this should cut it.

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