11 March 2016 - Forum Rules

Main Menu

IRQ and exchange CHR banks with Mapper 91

Started by sics, November 01, 2020, 02:23:20 AM

Previous topic - Next topic


I was recently contacted to participate in a hack of NES Street Fighter III and although I was not interested at first after reviewing the game I found one of the most complete graphics engines I have ever seen.

It would definitely be a great opportunity to put all my creativity into practice, on the first night I had already extracted, analyzed and understood all the transition screens of the game, then I spent a good time studying the most optimal way to create new custom screens exploiting to the maximum system capabilities...

But despite the fact that the final result was really very attractive, it was not even half as great of what I had planned and it is that at the last moment I found an obstacle that worries me more and more and that is the changes of graphic banks...

I do not know if this is the technical name, but I mean that each screen according to the need is divided into one or more parts to use in each of those subsets different graphics cards simultaneously.

Knowing that I have the ability and the desire to make this game have nothing to envy to its 16-bit counterparts, I am very demotivated not being able to handle that section, so if someone has technical data on the operation of the fighting engine Hummer or you can help me understand how to work optimally with it, I will be eternally grateful.

0x010026 Pointers to some screens.
0x01204f Title screen
0x01c071 Change the second tab on the character selection screen.
Mario Fighter's screen uses a single graphics tab instead of two.

My title screen disassembled and explained, except for the first bit, since I do not know its function.
Linktree  | Better a small finished project than a thousand giant ideas stuck in your system.


This is usually done via IRQ interrupt. During IRQ its handler swaps CHR banks.

Info on your mapper can be found here


Unfortunately, everything I know I have learned by analyzing the data directly in the emulator's hex editor, so I am unfamiliar with most of the technical terms necessary to understand these documents. INES Mapper 091

My ambition is to adjust the existing cutting lines to my needs, for example in the character selection screen, as you can see in the following screenshot, the cutting line is at the end.

Which means that much of the space allocated for graphics has to be wasted.

For my part, I will continue to instruct and investigate as much as I can, but if someone has encountered a similar problem in their own projects, I would appreciate it if you shared all the possible information about it, even if they have not managed to solve it, thank you very much!!! :thumbsup:
Linktree  | Better a small finished project than a thousand giant ideas stuck in your system.


0x1C06E - first line (scanline = byte * 08)
0x1C06F - CHR bank
0x1C070 - second line (scanline = byte * 08)
0x1C071 - CHR bank
0x1C072 - END token


I definitely love it, with this information I will not only be able to apply my level selection screen, but I also have a solid base to be able to find the other data I need
I give this topic for closed, thank you!
Linktree  | Better a small finished project than a thousand giant ideas stuck in your system.