OK... I think it's as far as I can go. It's sooooo difficult to make any sense out of the save files when I can't figure out how exactly the game uses it
I should learn assembly sometime.
So, um, here's something that I did find out:
1. The save file is basically divided into 32kbyte (8000h bytes) sections. Most data uses one section, however custom songs seems to take up 2 sections.
2. Each section has a header. For songs (incl. downloaded and custom) it's 4 bytes (which I can't make any sense of) plus "BBDX12343000". For other data it is 2 bytes + 2 00 bytes + "BBDX1234" + 4 bytes (usually 00) + "#000"(# being a digit from 0 to 9).
3. The UID is stored at 007E0000 and 007F0000. Both are 40 bytes long, and they are identical. They do not have headers.
4. All data except songs have duplicates, stored at xxxx0000 and xxxx8000. For example, if there is a section at 00020000, there is a copy of this section at 00028000.
5. The sections at 00040000 and 00048000 stores hiscores.
6. The downloaded songs and custom songs are not stored separately. They are both stored from 00180000 onwards. I don't know how the game distinguishes between them.