Skip to content

Release of FCEUXD SP 1.01

Here's version 1.01 of FCEUXD SP:

Improvements over v1.00 (June 30, 2005)

- New: Significantly better conditional breakpoints
- New: Multi-line comments are now allowed in symbolic debugging mode
- New: Added the possibility to reload the *.nl files
- New: Added the possibility to enable / disable symbolic debugging
- New: Increased the number of visible lines in the disassembly window to 34.
- New: Added disassembly bookmarks
- Bugfix: Conditional breakpoints can now be removed again.

For a more detailed description of what's new check the readme file.
Click here to see a picture of the debugging window of this version.
Click here to get the FCEUXD SP Windows binary file.
Click here to get the FCEUXD SP source code.

Faxanadu Disassembly

I probably won't have a lot of time in the next weeks or even months to continue my Faxanadu disassembly. Therefore I've decided to upload all disassembly files in the hopes that someone else can continue my work.

Click here to get the archive including all files

Files in the archive:
*.html - HTML disassembly of important ROM banks
*.bin - IDA Pro databases
*.nl - Name list files for FCEUXD SP
idc*.idc - Various IDC scripts used while disassembling the Faxanadu ROM file
memmap.txt - Notes about the RAM section of Faxanadu; Use only in combination with the newer initram.idc

Initial release of FCEUXD SP 1.0


I've decided to fork FCE Ultra eXtended-Debug 1.0a under the name FCEUXD SP with the hope to make significant contributions and improvements to the NES debugging experience. My main reason for this was the sorry state of NES debugging today. Even with the best NES emulator debuggers today barely anything is possible. If I had to guess where NES debugging today is I'd estimate it's somewhere between debug.com and Borland's Turbo Debugger. That's an unacceptable situation in my opinion.
Here's where I come into play. As the original FCE Ultra was thankfully released under GPL I was able to get the source code of one of it's former forks FCE Ultra eXtended-Debug 1.0a from Zophar's Domain. The code is very well written so I had absolutely no problems with adding new functionality. It was not even necessary to change the interface of one, single pre-existing function.

In this first release of FCEUXD SP 1.0 I've added two features which were at the very top of my list: A simple form of symbolic debugging and conditional breakpoints.

Continue reading "Initial release of FCEUXD SP 1.0"

Syntax highlighting for IDC script files in Crimson Editor



I use Crimson Editor for all my text/script editing needs. Unfortunately it didn't yet support syntax highlighting for IDA's scripting language IDC. Thanks to the easy extensibility of syntax highlighting in Crimson Editor I was able to create syntax definition files for the IDC language. Included in the archive is the Perl script I used to extract the names of the standard functions and macro definitions from the main file of the IDC scripting language, IDC.IDC.

Click here to get the archive including all files.

Click here to see a screenshot of Crimson Editor with syntax highlighting for IDC script files.

IDA 4.8 arrived



After working lots of extra hours in the ice mines I've recently managed to cough up enough money to buy IDA Pro from the lovely Belgium-based company Datarescue. I've bought it through their German re-seller German Sales though because quite frankly the original order form scared me. At the German Sales website I just put the product into the e-shopping cart and went to the order page. That's how I prefer to buy stuff.

I'm not Richie Rich so I opted for the Standard edition instead of the Professional edition even though it doesn't support the AMD64 CPU which might have come in handy in the future. And because there are plenty of reviews of the product itself I've decided to make one about the ordering process. Continue reading "IDA 4.8 arrived"

Faxanadu collision detection - Part III (Sprite behaviour I)



After last time's slow start into the collision detection code things are going to be more interesting this time. The second function call from the main collision detection code contains quite a lot of code (at least indirectly because it calls lots of other functions). So much in fact that a decently sized chunk of ROM bank 15 contains nothing but code and data that's used from that function. Thankfully it's not necessary to explain all, or even most of it because a lot of code is very similar and I can skip over it without explaining it any further. You'll see later why exactly that's the case.

Continue reading "Faxanadu collision detection - Part III (Sprite behaviour I)"

Faxanadu collision detection - Part II (Enemies that were hit by magic)



The first function call in the main loop of the collision detection code goes to a function that handles sprites that were hit by the player's magic shortly before the current sprite update. The code of that function is located between the offsets $8151 and $81A6.

The first sprite array that's accessed right in the first line should be familiar. It's already been used in the main loop to determine if the function at $8151 should be called or not. It contains the ID of the magic the sprite was hit by. As only three (Deluge, Thunder, Fire) of the five different kinds of magic throw the enemy back only these three types need to be handled in this function.

Continue reading "Faxanadu collision detection - Part II (Enemies that were hit by magic)"

Faxanadu - Sprite IDs



In the last update there was some talk about an eight byte long array starting at offset $2CC which contains the sprite IDs of the sprites visible on the screen. There's one pre-defined ID for each kind of sprite, not for each individual sprite (two monsters of the same type will share the same ID).
Today's update is very short, in fact it only contains an overview over these sprite IDs. They are the same IDs that are used in the level data to specify the monsters present on each screen. This was not yet discussed on this website but it's explained in Vagla's document.
Continue reading "Faxanadu - Sprite IDs"

Faxanadu collision detection - Part I (A first overview)



After the random Faxanadu factoids of the last updates it's about time to make some more structured updates again: It's time to begin a new series of updates about a certain topic. And it's going to be quite a large series, so large in fact that I can't yet estimate how many parts this new series will contain. Anyway, the topic of this new series of updates is the collision detection code of Faxanadu. What exactly is going to be part of the next updates will become more clear after you've finished reading this update as the topic of this update is the main collision detection function from where all other functions dealing with collision detection are called.
Continue reading "Faxanadu collision detection - Part I (A first overview)"