I have connected a Lassen iQ GPS module to my serial interface.
Maps are downloaded from Google Maps servers with a small script. Google maps consist of 128×128 pixel tiles. You have to specify your address, so that map tiles around your area are downloaded. There is also a parameter for number of tiles you want. Zoom levels are possible but require to have a few tile-sets, one for each zoom level.
EDIT: Note that maps are downloaded to the CF card using the computer. DS WiFi is not reverse engineered yet.
GBAMP (GBA Movie Player) is used to store the program and data on a CompactFlash card (special thanks to chishm and DarkFader). Number of tiles is only limited by memory size of CF card.
Here is the CF folder for a map around my area consisting of 64 google tiles. I used this for testing. As you see, tiles are just ordinary GIF images.
If you are wondering, there is a formula to go from latitude and longitude (which are provided by GPS) to Google tile number.
Code will be published later after a few things are cleaned up a bit