PkBadApple/tools/bin2mcs.c

78 lines
2.2 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned char data[128*1025];
int main(int argc, char *argv[])
{
FILE *f;
int size, i;
printf("MemoryCard BIN TO MCS - by Orion_ [2013]\n\n");
if (argc > 3)
{
f = fopen(argv[2], "rb");
if (f)
{
memset(data, 0, sizeof(data));
size = fread(&data[128], 1, sizeof(data)-128, f);
if ((data[128] == 'S') && (data[129] == 'C'))
{
fclose(f);
size = (size + 8191) >> 13; // One Block = 8k
data[128+3] = size; // Adjust Block Number
size <<= 13; // Pad to 8k
f = fopen(argv[3], "wb");
if (f)
{
// Generate MCS header
data[0] = 0x51;
data[4] = (size >> 0) & 0xFF;
data[5] = (size >> 8) & 0xFF;
data[6] = (size >> 16) & 0xFF;
data[7] = (size >> 24) & 0xFF;
data[8] = 1; // next block
strncpy(&data[10], argv[1], 20);
for (i = 0; i < 127; i++)
data[127] ^= data[i];
fwrite(data, 1, 128+size, f);
fclose(f);
}
else
printf("Cannot create output file\n");
}
else
printf("Bad MemoryCard BIN file format\n");
}
else
printf("Cannot load input file\n");
}
else
{
printf("Usage: bin2mcs FileID file.bin file.mcs\n\n");
printf("FileID Description: BcSlCTxCCCCCFILENAME (20 char max)\n");
printf(" Bc -> BI = Japan, BA = America, BE = Europe\n");
printf(" Sl -> SC = Sony Computer, SL = Sony Licensed\n");
printf(" C -> P = Japan, U = America, E = Europe\n");
printf(" T -> S = Game, D = Demo, M = ?\n");
printf(" x -> - = Normal Save, P = PocketStation\n");
printf(" CCCCC -> Game Digit Code\n");
printf(" FILENAME -> This Save Specific Filename\n");
printf("\nFileID Example:\n");
printf("BISLPS-00000GAMENAME Sony Licensed Japan, Game Code:00000 Filename: GAMENAME\n");
printf("BASCUS-21042SAVEFILE Sony Computer America, Game Code:21042 Filename: SAVEFILE\n");
printf("BESCES-88888FILENAME Sony Computer Europe, Game Code:88888 Filename: FILENAME\n");
printf("BESLESP00000MINIGAME Sony Licensed Europe, PocketStation Filename: MINIGAME\n\n");
getchar();
}
return (0);
}