Jump to content

Seeking PokeWalker EEPROM Dumps


dstaley

Recommended Posts

I'm working on a tool to analyze and extract Pokémon team data from PokeWalker EEPROM dumps and could use some help gathering a varied collection. Particularly, I'd love to get a few containing exchanged trainer data, which the PokeWalker stores when pairing with another PokeWalker.

To create a dump, there are currently two methods:

(I'm hoping that I'll eventually be able to update this list with a third method allowing you to dump the PokeWalker via USB infrared dongles, but that's a ways off!)

Any dumps would be appreciated since the more data I have, the more accurate I can make the tool. Also, if you happen to know the team that's on your dump, please share that as well (especially if you have something exotic like a shiny or a 'mon with alternate forms).

Link to comment
Share on other sites

  • 1 month later...

I bought a copy of Heart Gold with Pokewalker years ago, before DS games prices, especially Johto ones, got prohibitive.

I have not actually use the device nor the cartridges so it still contains the original owner data and when I found recently that dumping it is possible I have taken it out of the drawer where I had forgotten it to being able to dump it.

I initially try to use the PalmOS method by buying a second-hand PalmM500 at 10€ but unfortunately, I haven't been able to make it work.

But I was able to dump it with the DSi homebre, but to clarify, it is not necessarily a DSi. A 3DS also works. The DSi homebrew works in a 3DS with TWiLight Menu++. I confirm it.

I am not sure if the dump data contains exchange pokemon data because that requires having two Pokewalkers and I only have one. But the data is from the original owner, I never deleted it to start my own save, so maybe there is something.

If I am not making any mistakes the two files I have from the dump, pweep.rom and pwflash.rom. The first is the one that you need with user and save data while the second is the internal executable so that second file shouln't be uploaded for copyright reasons but there shouldn't be any problem with the save file.

 

pweep.rom

Link to comment
Share on other sites

  • 2 months later...
  • 3 months later...

Okay, so I came across a used PokeWalker at a tech shop today and had the urge to buy it out of curiosity. It turns out that the old player's name (PHILMAV) is still on there somehow. As I was heading home a pidgey decided to come along on the aforementioned player's PokeWalker. I wanted to figure out a way to get that pidgey out of the pokewalker. I can't be bothered resetting the gadget, because I had the most trauma-equivalent experience when I was using the 3DS Transfer tool. Here's the ROM of PHILMAV's PokeWalker Data.

pweep.rom

Link to comment
Share on other sites

  • 1 year later...
On 12/6/2022 at 4:41 PM, dstaley said:

I'm working on a tool to analyze and extract Pokémon team data from PokeWalker EEPROM dumps and could use some help gathering a varied collection. Particularly, I'd love to get a few containing exchanged trainer data, which the PokeWalker stores when pairing with another PokeWalker.

To create a dump, there are currently two methods:

(I'm hoping that I'll eventually be able to update this list with a third method allowing you to dump the PokeWalker via USB infrared dongles, but that's a ways off!)

Any dumps would be appreciated since the more data I have, the more accurate I can make the tool. Also, if you happen to know the team that's on your dump, please share that as well (especially if you have something exotic like a shiny or a 'mon with alternate forms).

Hello!

 

I was hoping that I could have a moment of your time in trying to build the eeprom nds dumper. Do you still have the project available or know what these errors could mean on compilation?

 

C:/Users/Major/pokewalker-rom-dumper-master/arm7/source/template.c:32:10: fatal error: nwram.h: No such file or directory
   32 | #include "nwram.h"
      |          ^~~~~~~~~
compilation terminated.
make[2]: *** [/opt/devkitpro/devkitARM/base_rules:39: template.o] Error 1
make[1]: *** [Makefile:93: build] Error 2
make[1]: Leaving directory '/home/Major/pokewalker-rom-dumper-master/arm7'
make: *** [Makefile:31: checkarm7] Error 2




and

 

C:/Users/Major/pokewalker-rom-dumper-master/arm9/source/main.c:305:65: error: passing argument 4 of 'pw_write_mem' from incompatible pointer type [-Wincompatible-pointer-types]
  305 |                                                                 &orgBE)) {
      |                                                                 ^~~~~~
      |                                                                 |
      |                                                                 uint16_t * {aka short unsigned int *}
In file included from C:/Users/Major/pokewalker-rom-dumper-master/arm9/source/main.c:11:
C:/Users/Major/pokewalker-rom-dumper-master/arm9/include/pw.h:93:79: note: expected 'const uint8_t *' {aka 'const unsigned char *'} but argument is of type 'uint16_t *' {aka 'short unsigned int *'}
   93 | bool pw_write_mem(uint32_t sessid, uint16_t addr, size_t size, const uint8_t* data); // 0x06
      |                                                                ~~~~~~~~~~~~~~~^~~~
make[1]: *** [/opt/devkitpro/devkitARM/base_rules:39: main.o] Error 1
make: *** [Makefile:97: build] Error 2



EDIT:

Found the fixes, here they are for those in the future who have the same issue:

comment out `#include "nwram.h"` in `arm7/source/template.c`

comment out `REG_MBK_PROT=0;//allow ARM9 rw` also in `arm7/source/template.c`

and change `&orgBE)) {` to `(const uint8_t*)&orgBE)) {` on line 305 of `arm9/source/main.c`

 


Also, if anyone else had the same issue as me when trying to dump the eeprom, getting stuck on 26*/512 (I forget where exactly it kept failing), then here's a way to assign buttons X and Y to dumping exactly half of the eeprom for each button which you can then combine to get the full eeprom:
 

if (run && (keys & KEY_X) && !(oldkeys & KEY_X)) {
            if (pw_scan()) {
                iprintf("ping!\n");

                uint32_t sessid;
                if (pw_do_synack(&sessid)) {
                    //iprintf("got sess! %08lx\n", sessid);

                    // EEPROM dumper
                    FILE* fff = fopen("sd:/eeprom_1.bin", "wb");
                    if (!fff) {
                        iprintf("can't open file :(\n");
                        goto Lnop;
                    }

                    for (size_t i = 0; i < 256; ++i) {
                        uint8_t mwahah[0x80];

                        if (pw_read_eeprom(sessid, i*sizeof mwahah, sizeof mwahah, mwahah)) {
                            iprintf("reading eeprom (%3d/256)\n", i+1);
                        } else {
                            iprintf("read failed :/\n");
                            break;
                        }
                        fwrite(mwahah, sizeof mwahah, 1, fff);
                    }
                    fclose(fff);
                    //fatUnmount("sd:");

                Lnop:
                    if (pw_conn_end(sessid)) iprintf("closed correctly\n");
                    else iprintf("welp\n");
                } else iprintf("can't connect\n");
            }
            else iprintf("no scan results\n");
        }

        if (run && (keys & KEY_Y) && !(oldkeys & KEY_Y)) {
            if (pw_scan()) {
                iprintf("ping!\n");

                uint32_t sessid;
                if (pw_do_synack(&sessid)) {
                    //iprintf("got sess! %08lx\n", sessid);

                    // EEPROM dumper
                    FILE* fff = fopen("sd:/eeprom_2.bin", "wb");
                    if (!fff) {
                        iprintf("can't open file :(\n");
                        goto Lnop9;
                    }

                    for (size_t i = 256; i < 512; ++i) {
                        uint8_t mwahah[0x80];

                        if (pw_read_eeprom(sessid, i * sizeof mwahah, sizeof mwahah, mwahah)) {
                            iprintf("reading eeprom (%3d/512)\n", i+1);
                        } else {
                            iprintf("read failed :/\n");
                            break;
                        }
                        fwrite(mwahah, sizeof mwahah, 1, fff);
                    }
                    fclose(fff);
                    //fatUnmount("sd:");

                Lnop9:
                    if (pw_conn_end(sessid)) iprintf("closed correctly\n");
                    else iprintf("welp\n");
                } else iprintf("can't connect\n");
            }
            else iprintf("no scan results\n");
        }


 

Edited by eloeri
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...