• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

how to reallocate functionalities in a rom

  • 18
    Posts
    8
    Years
    • Seen Jan 7, 2024
    i need to reallocate the weaknesses and resistances type chart in pokemon stadium 1 cuz there isnt enough space to add fairy, dark and steel weak and res , everytime i move the chart in some place with space doesnt work , and i checked some hack roms for gb, gba and i saw the hackers moved the chart and worked but no in pokemon stadium
     

    Attachments

    • [PokeCommunity.com] how to reallocate functionalities in a rom
      asmpkm.png
      6.2 KB · Views: 4
    Are you able to work out what specifically is going wrong when you relocate your chart? I would guess that there's a pointer to the old chart that you haven't updated. Maybe some parts of the code access it through a pointer that's offset via another pointer, e.g. via PC-relative addressing. Or maybe the pointer gets computed via arithmetic and so you're not finding all the pointers when you find-replace the data in your ROM. Or you could be working in a segmented address space and trying to relocate your table into another segment/bank.

    Note: I understand memory in general, but have no idea how the N64's works or how assembly is typically written for it. So that means some of my suggestions might not apply, but it's up to you to learn/know the N64 enough to decide which are relevant.
     
    Last edited:
    i checked how the pointers work in gba,gb roms converting addresses to little endian but each time i search the values doesnt even exists
    the table is in 003755B0 so the values to find according to the method are B0553708
     
    Oh! So in addition to all the other things I suggested… maybe the N64 is big endian?
     
    so if that the case i have to search 083755B0? i already did that , no values found it
    the other methods u suggested i dont understand them maybe an example??

    im working with z64 format and its big endian but not worked
     
    Last edited:
    Yeah, that's what I was suggesting you search for. But why the 8000000? Isn't that a GBA-specific thing (the ROM is mapped at that location in memory)? I wouldn't necessarily expect the N64 to use the same offset.

    As for the other ones, I think the Wikipedia pages do a better job explaining those ideas than I ever could. But for the arithmetic one, I mean something like if your code wants the address 800000h in memory it doesn't have to load that number directly from the ROM, it could compute it by using whatever assembly instruction(s) are equivalent to that number, e.g. 15625 << 9.
     
    Last edited:
    Hm, yeah, if your ROM map is correct then I guess 8000000 is used by the N64 too. That's interesting!
     
    so its that correct the method for gba/gb/nds work but it doesnt...
    and i made a lot of new textures, new mechanics and fusions already :/
     
    It's possible you could attack this problem from the opposite direction if your emulator has a way to generate a breakpoint that's triggered by reading from a particular memory address—you could ask it to break on reading 083755B0, and when it does you could check the code that's running and that should give you a good idea of what change you could make (to that code) to relocate the table. (You'd need to repeat those steps if there are multiple places in the code that read the table).

    … and I guess if that feature doesn't exist, and you're truly committed, you could add hacky breakpoint support into your emulator if it's open source (and you know whatever language it's written in and/or are comfortable with coding in general).
     
    Last edited:
    i followed a snes repointing tutorial and i got this possible repoint value i thought was going to be useless to try LOL but i think wont work btw
    i substract 8000 to the address and put 8E instead of 08


    and about breaking points i have a lot of time i dont try that and the tutorial i followed that i understood i cant find it now
     
    Back
    Top