To create a upload data file for ranking purpose, you have to go to file select screen, highlight the desired file and press X+A buttons. After that you must hear a ring sound and a file called SONICADV_H04 will be created. Be careful, because it doesn´t alert you if there is not enough space on your VMU.
This file contains a HTML code inside that you can see in your browser typing that: x-avefront://—-.dream/vms/load/SONICADV_H04
In this HTML, there is a field called chaodata that contains game data from file selected previously. That field is encrypted and codified in BASE64. To decode we need to convert BASE64 into Bytes.
To decrypt bytes we will use next algorithm in PERL
#Decoding function from SEGA Encryption to Bytes Array
#INPUT: Array of Bytes/Chars - Encoded data
#OUTPUT: Array of Bytes/Chars - Decoded data
sub XorAlgoritm
{
my (@BINDATA) = @_;
my (@XOR_CODE) = (65, 84, 69, 90); # 0x5A455441
my (@PLUS_VAL) = (65, 78, 65, 78); # 0x4E414E41
my (@TMP_VAL) = (0, 0, 0, 0);
for (my $i = 0; $i < 313; $i++)
{
my $TMP_VAL2 = 0;
for (my $j = 0; $j < 4; $j++)
{
$BINDATA[$i * 4 + $j] ^= ($TMP_VAL[$j] ^ $XOR_CODE[$j]);
$TMP_VAL[$j] = ($TMP_VAL[$j] + $PLUS_VAL[$j] + $TMP_VAL2);
$TMP_VAL2 = $TMP_VAL[$j] >> 8;
$TMP_VAL[$j] &= 255;
}
}
return @BINDATA;
}
Then we will have an understable byte where we can extract all game info. Next Table show offsets from that bytes array and their meaning.
SONICADV_H04 UPLOAD DATA FORMAT
| INITIAL OFFSET | BYTES | COMMENTS |
|---|---|---|
| 0x000 | 2 | CHECKSUM |
| 0x002 | 68 | UNKNOW |
| 0x048 | 4 | PLAY TIME |
| 0x04C | 4 | SONIC SCORE IN EMERALD COAST |
| 0x050 | 4 | SONIC SCORE IN WINDY VALLEY |
| 0x054 | 4 | SONIC SCORE IN TWINKLE PARK |
| 0x058 | 4 | SONIC SCORE IN SPEED MOUNTAIN |
| 0x05C | 4 | SONIC SCORE IN RED MOUNTAIN |
| 0x060 | 4 | SONIC SCORE IN SKY DECK |
| 0x064 | 4 | SONIC SCORE IN LOST WORLD |
| 0x068 | 4 | SONIC SCORE IN ICE CAP |
| 0x06C | 4 | SONIC SCORE IN CASINOPOLIS |
| 0x070 | 4 | SONIC SCORE IN FINAL EGG |
| 0x074 | 4 | TAILS SCORE IN WINDY VALLEY |
| 0x078 | 4 | TAILS SCORE IN SPEED MOUNTAIN |
| 0x07C | 4 | TAILS SCORE IN SKY DECK |
| 0x080 | 4 | TAILS SCORE IN ICE CAP |
| 0x084 | 4 | TAILS SCORE IN CASINOPOLIS |
| 0x088 | 4 | KNUCKLES SCORE IN SPEED MOUNTAIN |
| 0x08C | 4 | KNUCKLES SCORE IN RED MOUNTAIN |
| 0x090 | 4 | KNUCKLES SCORE IN SKY DECK |
| 0x094 | 4 | KNUCKLES SCORE IN LOST WORLD |
| 0x098 | 4 | KNUCKLES SCORE IN CASINOPOLIS |
| 0x09C | 4 | AMY SCORE IN TWINKLE PARK |
| 0x0A0 | 4 | AMY SCORE IN FINAL EGG |
| 0x0A4 | 4 | AMY SCORE IN HOT SHELTER |
| 0x0A8 | 4 | E-102 SCORE IN EMERALD COAST |
| 0x0AC | 4 | E-102 SCORE IN WINDY VALLEY |
| 0x0B0 | 4 | E-102 SCORE IN RED MOUNTAIN |
| 0x0B4 | 4 | E-102 SCORE IN FINAL EGG |
| 0x0B8 | 4 | E-102 SCORE IN HOT SHELTER |
| 0x0BC | 4 | BIG SCORE IN EMERALD COAST |
| 0x0C0 | 4 | BIG SCORE IN TWINKLE PARK |
| 0x0C4 | 4 | BIG SCORE IN ICE CAP |
| 0x0C8 | 4 | BIG SCORE IN HOT SHELTER |
| 0x0CC | 3 | SONIC TIME IN EMERALD COAST* |
| 0x0CF | 3 | SONIC TIME IN WINDY VALLEY* |
| 0x0D2 | 3 | SONIC TIME IN TWINKLE PARK* |
| 0x0D5 | 3 | SONIC TIME IN SPEED MOUNTAIN* |
| 0x0D8 | 3 | SONIC TIME IN RED MOUNTAIN* |
| 0x0DB | 3 | SONIC TIME IN SKY DECK* |
| 0x0DE | 3 | SONIC TIME IN LOST WORLD* |
| 0x0E1 | 3 | SONIC TIME IN ICE CAP* |
| 0x0E4 | 3 | SONIC TIME IN CASINOPOLIS* |
| 0x0E7 | 3 | SONIC TIME IN FINAL EGG* |
| 0x0EA | 3 | TAILS TIME IN WINDY VALLEY* |
| 0x0ED | 3 | TAILS TIME IN SPEED MOUNTAIN* |
| 0x0F0 | 3 | TAILS TIME IN SKY DECK* |
| 0x0F3 | 3 | TAILS TIME IN ICE CAP* |
| 0x0F6 | 3 | TAILS TIME IN CASINOPOLIS* |
| 0x0F9 | 3 | KNUCKLES TIME IN SPEED MOUNTAIN* |
| 0x0FC | 3 | KNUCKLES TIME IN RED MOUNTAIN* |
| 0x0FF | 3 | KNUCKLES TIME IN SKY DECK* |
| 0x102 | 3 | KNUCKLES TIME IN LOST WORLD* |
| 0x105 | 3 | KNUCKLES TIME IN CASINOPOLIS* |
| 0x108 | 3 | AMY TIME IN TWINKLE PARK* |
| 0x10B | 3 | AMY TIME IN FINAL EGG* |
| 0x10E | 3 | AMY TIME IN HOT SHELTER* |
| 0x111 | 3 | E-102 TIME IN EMERALD COAST* |
| 0x114 | 3 | E-102 TIME IN WINDY VALLEY* |
| 0x117 | 3 | E-102 TIME IN RED MOUNTAIN* |
| 0x11A | 3 | E-102 TIME IN FINAL EGG* |
| 0x11D | 3 | E-102 TIME IN HOT SHELTER* |
| 0x120 | 6 | BIG WEIGHT IN EMERALD COAST** |
| 0x126 | 6 | BIG WEIGHT IN TWINKLE PARK** |
| 0x12C | 6 | BIG WEIGHT IN ICE CAP** |
| 0x132 | 6 | BIG WEIGHT IN HOT SHELTER** |
| 0x138 | 16 | UNKNOW |
| 0x148 | 2 | SONIC RINGS IN EMERALD COAST |
| 0x14A | 2 | SONIC RINGS IN WINDY VALLEY |
| 0x14C | 2 | SONIC RINGS IN TWINKLE PARK |
| 0x14E | 2 | SONIC RINGS IN SPEED MOUNTAIN |
| 0x150 | 2 | SONIC RINGS IN RED MOUNTAIN |
| 0x152 | 2 | SONIC RINGS IN SKY DECK |
| 0x154 | 2 | SONIC RINGS IN LOST WORLD |
| 0x156 | 2 | SONIC RINGS IN ICE CAP |
| 0x158 | 2 | SONIC RINGS IN CASINOPOLIS |
| 0x15A | 2 | SONIC RINGS IN FINAL EGG |
| 0x15C | 2 | TAILS RINGS IN WINDY VALLEY |
| 0x15E | 2 | TAILS RINGS IN SPEED MOUNTAIN |
| 0x160 | 2 | TAILS RINGS IN SKY DECK |
| 0x162 | 2 | TAILS RINGS IN ICE CAP |
| 0x164 | 2 | TAILS RINGS IN CASINOPOLIS |
| 0x166 | 2 | KNUCKLES RINGS IN SPEED MOUNTAIN |
| 0x168 | 2 | KNUCKLES RINGS IN RED MOUNTAIN |
| 0x16A | 2 | KNUCKLES RINGS IN SKY DECK |
| 0x16C | 2 | KNUCKLES RINGS IN LOST WORLD |
| 0x16E | 2 | KNUCKLES RINGS IN CASINOPOLIS |
| 0x170 | 2 | AMY RINGS IN TWINKLE PARK |
| 0x172 | 2 | AMY RINGS IN FINAL EGG |
| 0x174 | 2 | AMY RINGS IN HOT SHELTER |
| 0x176 | 2 | E-102 RINGS IN EMERALD COAST |
| 0x178 | 2 | E-102 RINGS IN WINDY VALLEY |
| 0x17A | 4 | E-102 RINGS IN RED MOUNTAIN |
| 0x17C | 4 | E-102 RINGS IN FINAL EGG |
| 0x17E | 4 | E-102 RINGS IN HOT SHELTER |
| 0x180 | 4 | BIG RINGS IN EMERALD COAST |
| 0x182 | 4 | BIG RINGS IN TWINKLE PARK |
| 0x184 | 4 | BIG RINGS IN ICE CAP |
| 0x186 | 4 | BIG RINGS IN HOT SHELTER |
| 0x188 | 4 | SONIC SCORE IN SKY CHASE 1 (FIRST PLACE) |
| 0x18C | 4 | SONIC SCORE IN SKY CHASE 1 (SECOND PLACE) |
| 0x190 | 4 | SONIC SCORE IN SKY CHASE 1 (THIRD PLACE) |
| 0x194 | 4 | TAILS SCORE IN SKY CHASE 1 (FIRST PLACE) |
| 0x198 | 4 | TAILS SCORE IN SKY CHASE 1 (SECOND PLACE) |
| 0x19C | 4 | TAILS SCORE IN SKY CHASE 1 (THIRD PLACE) |
| 0x1A0 | 4 | SONIC SCORE IN SKY CHASE 1 (FIRST PLACE) |
| 0x1A4 | 4 | SONIC SCORE IN SKY CHASE 2 (SECOND PLACE) |
| 0x1A8 | 4 | SONIC SCORE IN SKY CHASE 2 (THIRD PLACE) |
| 0x1AC | 4 | TAILS SCORE IN SKY CHASE 2 (FIRST PLACE) |
| 0x1B0 | 4 | TAILS SCORE IN SKY CHASE 2 (SECOND PLACE) |
| 0x1B4 | 4 | TAILS SCORE IN SKY CHASE 2 (THIRD PLACE) |
| 0x1B8 | 4 | SONIC SCORE IN ICE CAP (FIRST PLACE) |
| 0x1BC | 4 | SONIC SCORE IN ICE CAP (SECOND PLACE) |
| 0x1C0 | 4 | SONIC SCORE IN ICE CAP (THIRD PLACE) |
| 0x1C4 | 4 | TAILS SCORE IN ICE CAP (FIRST PLACE) |
| 0x1C8 | 4 | TAILS SCORE IN ICE CAP (SECOND PLACE) |
| 0x1CC | 4 | TAILS SCORE IN ICE CAP (THIRD PLACE) |
| 0x1D0 | 4 | SONIC SCORE IN SAND HILL (FIRST PLACE) |
| 0x1D4 | 4 | SONIC SCORE IN SAND HILL (SECOND PLACE) |
| 0x1D8 | 4 | SONIC SCORE IN SAND HILL (THIRD PLACE) |
| 0x1DC | 4 | TAILS SCORE IN SAND HILL (FIRST PLACE) |
| 0x1E0 | 4 | TAILS SCORE IN SAND HILL (SECOND PLACE) |
| 0x1E4 | 4 | TAILS SCORE IN SAND HILL (THIRD PLACE) |
| 0x1E8 | 4 | AMY SCORE IN HEDGEHOG HAMMER (FIRST PLACE) |
| 0x1EC | 4 | AMY SCORE IN HEDGEHOG HAMMER (SECOND PLACE) |
| 0x1F0 | 4 | AMY SCORE IN HEDGEHOG HAMMER (THIRD PLACE) |
| 0x1F4 | 3 | SONIC SCORE IN TWINCKLE CIRCUIT (FIRST PLACE)** * |
| 0x1F7 | 3 | SONIC SCORE IN TWINCKLE CIRCUIT (SECOND PLACE)** * |
| 0x1FA | 3 | SONIC SCORE IN TWINCKLE CIRCUIT (THIRD PLACE)** * |
| 0x1FD | 6 | UNKNOW |
| 0x203 | 3 | TAILS SCORE IN TWINCKLE CIRCUIT (FIRST PLACE)* |
| 0x206 | 3 | TAILS SCORE IN TWINCKLE CIRCUIT (SECOND PLACE) * |
| 0x209 | 3 | TAILS SCORE IN TWINCKLE CIRCUIT (THIRD PLACE)** * |
| 0x20C | 6 | UNKNOW |
| 0x212 | 3 | KNUCKLES SCORE IN TWINCKLE CIRCUIT (FIRST PLACE)** * |
| 0x215 | 3 | KNUCKLES SCORE IN TWINCKLE CIRCUIT (SECOND PLACE)** * |
| 0x218 | 3 | KNUCKLES SCORE IN TWINCKLE CIRCUIT (THIRD PLACE)** * |
| 0x21B | 6 | UNKNOW |
| 0x221 | 3 | AMY SCORE IN TWINCKLE CIRCUIT (FIRST PLACE)** * |
| 0x224 | 3 | AMY SCORE IN TWINCKLE CIRCUIT (SECOND PLACE)** * |
| 0x227 | 3 | AMY SCORE IN TWINCKLE CIRCUIT (THIRD PLACE)** * |
| 0x22A | 6 | UNKNOW |
| 0x230 | 3 | E102 SCORE IN TWINCKLE CIRCUIT (FIRST PLACE)** * |
| 0x233 | 3 | E102 SCORE IN TWINCKLE CIRCUIT (SECOND PLACE)** * |
| 0x236 | 3 | E102 SCORE IN TWINCKLE CIRCUIT (THIRD PLACE)** * |
| 0x239 | 6 | UNKNOW |
| 0x23F | 3 | BIG SCORE IN TWINCKLE CIRCUIT (FIRST PLACE)** * |
| 0x242 | 3 | BIG SCORE IN TWINCKLE CIRCUIT (SECOND PLACE)** * |
| 0x245 | 3 | BIG SCORE IN TWINCKLE CIRCUIT (THIRD PLACE)** * |
| 0x248 | 6 | UNKNOW |
| 0x24E | 3 | SONIC SCORE IN BOSS (FIRST PLACE)** * |
| 0x251 | 3 | SONIC SCORE IN BOSS (SECOND PLACE)** * |
| 0x254 | 3 | SONIC SCORE IN BOSS (THIRD PLACE)** * |
| 0x257 | 3 | TAILS SCORE IN BOSS (FIRST PLACE)** * |
| 0x25A | 3 | TAILS SCORE IN BOSS (SECOND PLACE)** * |
| 0x25D | 3 | TAILS SCORE IN BOSS (THIRD PLACE)** * |
| 0x260 | 3 | KNUCKLES SCORE IN BOSS (FIRST PLACE)** * |
| 0x263 | 3 | KNUCKLES SCORE IN BOSS (SECOND PLACE)** * |
| 0x266 | 3 | KNUCKLES SCORE IN BOSS (THIRD PLACE)** * |
| 0x269 | 3 | AMY SCORE IN BOSS (FIRST PLACE)** * |
| 0x26C | 3 | AMY SCORE IN BOSS (SECOND PLACE)** * |
| 0x26F | 3 | AMY SCORE IN BOSS (THIRD PLACE)** * |
| 0x272 | 3 | E102 SCORE IN BOSS (FIRST PLACE)** * |
| 0x275 | 3 | E102 SCORE IN BOSS (SECOND PLACE)** * |
| 0x278 | 3 | E102 SCORE IN BOSS (THIRD PLACE)** * |
| 0x27B | 3 | BIG SCORE IN BOSS (FIRST PLACE)** * |
| 0x27E | 3 | BIG SCORE IN BOSS (SECOND PLACE)** * |
| 0x281 | 3 | BIG SCORE IN BOSS (THIRD PLACE)** * |
| 0x284 | 17 | EMBLEMS (see below) |
| 0x290 | 1 | OPTIONS |
| 0x291 | 1 | SONIC LIVES |
| 0x292 | 1 | TAILS LIVES |
| 0x293 | 1 | KNUCKLES LIVES |
| 0x294 | 1 | AMY LIVES |
| 0x295 | 1 | E102 LIVES |
| 0x296 | 1 | BIG LIVES |
*: First Byte = minute ; Second Byte= seconds ; Third Byte= Milliseconds. In savegame third byte is encoded in 60th of second, to convert to milliseconds use this formula: (Third Byte Value * 1666) DIV 1000, where DIV is a integer division.
**: Weight must be multiply by 10 to get real value, also there is 3 values stored. First 2 bytes are first position, next 2 bytes are second position and final 2 bytes are third position
***: First Byte = minute ; Second Byte= seconds ; Third Byte= Milliseconds. NO conversion needed.
EMBLEMS FORMAT
| OFFSET | BIT 7 | BIT 6 | BIT 5 | BIT 4 | BIT 3 | BIT 2 | BIT 1 | BIT 0 |
|---|---|---|---|---|---|---|---|---|
| 0x284 | Ice Cap Level A as Sonic | Lost World Level A as Sonic | Sky Deck Level A as Sonic | Red Mountain Level A as Sonic | Speed Highway Level A as Sonic | Twinkle Park Level A as Sonic | Windy Valley Level A as Sonic | Emerald Coast Level A as Sonic |
| 0x285 | Speed Highway Level A as Knuckles | Casinopolis Level A as Tails | Ice cap Level A as Tails | Sky Deck Level A as Tails | Speed Highway Level A as Tails | Windy Valley Level A as Tails | Final Egg Level A as Sonic | Casinopolis Level A as Sonic |
| 0x286 | Emerald Coast Level A as Gamma | Hot Shelter Level A as Amy | Final Egg Level A as Amy | Twinckle Park Level A as Amy | Casinopolis Level A as Knuckles | Lost World Level A as Knuckles | Sky Deck Level A as Knuckles | Red Mountain Level A as Knuckles |
| 0x287 | Hot Shelter Level A as Big | Ice Cap Level A as Big | Twinckle Park Level A as Big | Emerald Coast Level A as Big | Hot Shelter Level A as Gamma | Final Egg Level A as Gamma | Red Mountain Level A as Gamma | Windy Valley Level A as Gamma |
| 0x288 | Ice Cap Level B as Sonic | Lost World Level B as Sonic | Sky Deck Level B as Sonic | Red Mountain Level B as Sonic | Speed Highway Level B as Sonic | Twinckle Park Level B as Sonic | Windy Valley Level B as Sonic | Emerald Coast Level B as Sonic |
| 0x289 | Speed Highway Level B as Knuckles | Casinopolis Level B as Tails | Ice cap Level B as Tails | Sky Deck Level B as Tails | Speed Highway Level B as Tails | Windy Valley Level B as Tails | Final Egg Level B as Sonic | Casinopolis Level B as Sonic |
| 0x28A | Emerald Coast Level B as Gamma | Hot Shelter Level B as Amy | Final Egg Level B as Amy | Twinckle Park Level B as Amy | Casinopolis Level B as Knuckles | Lost World Level B as Knuckles | Sky Deck Level B as Knuckles | Red Mountain Level B as Knuckles |
| 0x28B | Hot Shelter Level B as Big | Ice Cap Level B as Big | Twinckle Park Level B as Big | Emerald Coast Level B as Big | Hot Shelter Level B as Gamma | Final Egg Level B as Gamma | Red Mountain Level B as Gamma | Windy Valley Level B as Gamma |
| 0x28C | Ice Cap Level C as Sonic | Lost World Level C as Sonic | Sky Deck Level C as Sonic | Red Mountain Level C as Sonic | Speed Highway Level C as Sonic | Twinkle Park Level C as Sonic | Windy Valley Level C as Sonic | Emerald Coast Level C as Sonic |
| 0x28D | Speed Highway Level C as Knuckles | Casinopolis Level C as Tails | Ice cap Level C as Tails | Sky Deck Level C as Tails | Speed Highway Level C as Tails | Windy Valley Level C as Tails | Final Egg Level C as Sonic | Casinopolis Level C as Sonic |
| 0x28E | Emerald Coast Level C as Gamma | Hot Shelter Level C as Amy | Final Egg Level C as Amy | Twinckle Park Level C as Amy | Casinopolis Level C as Knuckles | Lost World Level C as Knuckles | Sky Deck Level C as Knuckles | Red Mountain Level C as Knuckles |
| 0x28F | Hot Shelter Level C as Big | Ice Cap Level C as Big | Twinckle Park Level C as Big | Emerald Coast Level C as Big | Hot Shelter Level C as Gamma | Final Egg Level C as Gamma | Red Mountain Level C as Gamma | Windy Valley Level C as Gamma |
| 0x290 | Sky Chase Act 2 Emblem 1 | Sky Chase Act 1 Emblem 1 | Twinckle Circuit Emblem 1 | Hedhehog Hammer Emblem 2 | Sand Hill Emblem 2 | Sky Chase Act 2 Emblem 2 | Sky Chase Act 1 Emblem 2 | Twinkle Circuit Emblem 2 |
| 0x291 | Sonic Ending | Chao Race | Chao Race | Chao Race | Chao Race | Chao Race | Hedhehog Hammer Emblem 1 | Sand Hill Emblem 1 |
| 0x292 | Field Emblems | Field Emblems | Super Sonic Ending | Big Ending | Gamma Ending | Amy Ending | Knuckles Ending | Tails Ending |
| 0x293 | Field Emblems | Field Emblems | Field Emblems | Field Emblems | Field Emblems | Field Emblems | Field Emblems | Field Emblems |
| 0x294 | Field Emblems | Field Emblems |





