Jump to content

FE1 Pointers (Solved)


Sephie-chan
 Share

Recommended Posts

Hello there, I recently started getting into hacking FE1 just out for curiosity. I just wondered how Pointers in there work exactly since I couldn't find a single one. I looked up in the internet and found this way for NES Pointers:

Take the offset, subtract 10, delete the first number so you get a 2 bytes number. Flip the bytes and look for them in you game. As I mentioned I couldn't find a single one. Not for the menus, not for the text so I feel, like I need a bit help on this.

Edited by Sephie-chan
Link to comment
Share on other sites

The 6502 is LO HI, so you just flip the bytes so in RAM and in ROM you might have 34 c8 that is a pointer to $c834

Now the 10 might be $10 which is 16, which just happens to be the size of an iNES header, so if your ROM has a iNES header(stars with NES at the top of the file) then to get the FILE offset you would then ADD 10 to the address so $C834 will be at $C844 in the file. However the NES has banks so the PRG ROM is not linear as it is for say the GBA. FE 1 and 2 are MMC4 which can be found here https://wiki.nesdev.com/w/index.php/MMC4

Link to comment
Share on other sites

https://www.dropbox.com/sh/pr9roh0rriuckc2/AAAiLr76X7PIVGRHz0rF6muAa?dl=0

I've already documented most of FE1's text a while ago. Pointers for FE1 are often quite strange. There's no one size fits all solution. It all depends on where the banks of the ROM lie in the RAM. Say there's text at 0x12345. For starters, subtract 0x10 from the address to remove the rom header, resulting in 0x12335. Then drop the 0x10000 digit. (23 35) With the exception of the bank from 0x3C000 to 0x3FFFF, the rom bank maps to 8000 - C000 in the ram. Add your result to 0x8000, (A3 35) and swap the bytes of the remaining numbers. (35 A3). If your pointer happens to fall within the fixed bank region above, your life is easier. You can stop at the dropping the 10,000s digit. No text really resides in that part of the rom, but it's nice when messing with things like items.

Link to comment
Share on other sites

12 hours ago, Darrman said:

https://www.dropbox.com/sh/pr9roh0rriuckc2/AAAiLr76X7PIVGRHz0rF6muAa?dl=0

I've already documented most of FE1's text a while ago. Pointers for FE1 are often quite strange. There's no one size fits all solution. It all depends on where the banks of the ROM lie in the RAM. Say there's text at 0x12345. For starters, subtract 0x10 from the address to remove the rom header, resulting in 0x12335. Then drop the 0x10000 digit. (23 35) With the exception of the bank from 0x3C000 to 0x3FFFF, the rom bank maps to 8000 - C000 in the ram. Add your result to 0x8000, (A3 35) and swap the bytes of the remaining numbers. (35 A3). If your pointer happens to fall within the fixed bank region above, your life is easier. You can stop at the dropping the 10,000s digit. No text really resides in that part of the rom, but it's nice when messing with things like items.

That's really helpful, thanks! 🙂

But what if my calculated number goes beyond the fourth digit?

For Example if I have 2F716 as the adress, I'll substract 10 for the pointer and get 2F706. Then I drop the 2 and get F706. If I'm now adding 8000 I get 17706 as a pointer.

Link to comment
Share on other sites

1 hour ago, Sephie-chan said:

But what if my calculated number goes beyond the fourth digit?

For Example if I have 2F716 as the adress, I'll substract 10 for the pointer and get 2F706. Then I drop the 2 and get F706. If I'm now adding 8000 I get 17706 as a pointer.

I wrote this up a bit wrong. You want to get your pointer to be somewhere between 0x8000 and 0xC000. In my example, you add 8000, because the first digit is a 2. (Do this if it's a 0 - 3.) But in your own example, you need to instead subtract 4000 instead. (Do this if the first digit is C - F.) A number starting between 4 and 7 has 4000 added, and if it's between 8 and B, you don't have to do a thing.

Link to comment
Share on other sites

Thanks @Darrman, for the explanation. I think I understand now, how they work. The Docs you posted where really helpful. I understand now how they work and was able to change a few text pointers. I think I can work on my own now, if I can't find a pointer I can reverse calculate them from the Docs. Didn't know FE1 was so well documented 🙂

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...