Created
February 20, 2012 23:43
-
-
Save anonymous/1872338 to your computer and use it in GitHub Desktop.
a guest on Feb 20th, 2012 - pastebin.com/Q1gx6QB8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function generateBlob(keyName, encodedData) { | |
//Append the file format prefix: | |
var saveString = "EMULATOR_DATA"; | |
var consoleID = "GameBoy"; | |
//Figure out the length: | |
var totalLength = (saveString.length + 4 + (1 + consoleID.length)) + ((1 + keyName.length) + (4 + encodedData.length)); | |
//Append the total length in bytes: | |
saveString += to_little_endian_dword(totalLength); | |
//Append the console ID text's length: | |
saveString += to_byte(consoleID.length); | |
//Append the console ID text: | |
saveString += consoleID; | |
//Append the blob ID: | |
saveString += to_byte(keyName.length); | |
saveString += keyName; | |
//Now append the save data: | |
saveString += to_little_endian_dword(encodedData.length); | |
saveString += encodedData; | |
return saveString; | |
} | |
function decodeBlob(blobData) { | |
/*Format is as follows: | |
- 13 byte string "EMULATOR_DATA" | |
- 4 byte total size (including these 4 bytes). | |
- 1 byte Console type ID length | |
- Console type ID text of 8 bit size | |
blobs { | |
- 1 byte blob ID length | |
- blob ID text (Used to say what the data is (SRAM/freeze state/etc...)) | |
- 4 byte blob length | |
- blob length of 32 bit size | |
} | |
*/ | |
var length = blobData.length; | |
var blobProperties = {}; | |
blobProperties.consoleID = null; | |
var blobsCount = 0; | |
blobProperties.blobs = []; | |
if (length > 17) { | |
if (blobData.substring(0, 13) == "EMULATOR_DATA") { | |
var length = Math.min(((blobData.charCodeAt(16) & 0xFF) << 24) | ((blobData.charCodeAt(15) & 0xFF) << 16) | ((blobData.charCodeAt(14) & 0xFF) << 8) | (blobData.charCodeAt(13) & 0xFF), length); | |
var consoleIDLength = blobData.charCodeAt(17) & 0xFF; | |
if (length > 17 + consoleIDLength) { | |
blobProperties.consoleID = blobData.substring(18, 18 + consoleIDLength); | |
var blobIDLength = 0; | |
var blobLength = 0; | |
for (var index = 18 + consoleIDLength; index < length;) { | |
blobIDLength = blobData.charCodeAt(index++) & 0xFF; | |
if (index + blobIDLength < length) { | |
blobProperties.blobs[blobsCount] = {}; | |
blobProperties.blobs[blobsCount].blobID = blobData.substring(index, index + blobIDLength); | |
index += blobIDLength; | |
if (index + 4 < length) { | |
blobLength = ((blobData.charCodeAt(index + 3) & 0xFF) << 24) | ((blobData.charCodeAt(index + 2) & 0xFF) << 16) | ((blobData.charCodeAt(index + 1) & 0xFF) << 8) | (blobData.charCodeAt(index) & 0xFF); | |
index += 4; | |
if (index + blobLength < length) { | |
blobProperties.blobs[blobsCount].blobContent = blobData.substring(index, index + blobLength); | |
index += blobLength; | |
} | |
else { | |
break; | |
} | |
} | |
else { | |
break; | |
} | |
} | |
else { | |
break; | |
} | |
} | |
} | |
} | |
} | |
return blobProperties; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment