#include #include #include #include FILE *fhin, *fhout; char *infile, *outfile; char filename[1024]; signed short bin[0x40000]; unsigned char bank[0x80000]; void ropen() { fhin=fopen(infile,"rb"); if (!fhin) { printf("\r\nERROR: Couldn't open file %s!\r\n", infile); exit(-1); } } void rclose() { fclose(fhin); } void wopen() { fhout=fopen(outfile,"wb"); if (!fhout) { printf("\r\nERROR: Couldn't open file %s!\r\n", outfile); exit(-1); } } void wclose() { fclose(fhout); } int main(int argc, char* argv[]) { unsigned int offset, luku, offtemp, kX, kY, count = 0, file = 0; offtemp = 0; offset = offtemp; luku = 0; infile = argv[1]; ropen(); fread(bin, 1, 0x80000, fhin); rclose(); for (offset=0;offset<0x40000;offset++) { kY = bin[offset]; if (kY > 0x7FF) kY = (kY ^ 0xFFF) + 0x800; switch(kY >> 8) { case(0x07): kX = (kY - 0x600) * 64; break; case(0x06): kX = (kY - 0x500) * 32; break; case(0x05): kX = (kY - 0x400) * 16; break; case(0x04): kX = (kY - 0x300) * 8; break; case(0x03): kX = (kY - 0x200) * 4; break; case(0x02): kX = (kY - 0x100) * 2; break; case(0x01): kX = kY; break; case(0x00): kX = kY; break; case(0x0F): kX = kY ^ 0xF000; break; case(0x0E): kX = kY ^ 0xF000; break; case(0x0D): kX = ((kY + 0x101) * 2 - 1) ^ 0xE000; break; case(0x0C): kX = ((kY + 0x201) * 4 - 1) ^ 0xC000; break; case(0x0B): kX = ((kY + 0x301) * 8 - 1) ^ 0x8000; break; case(0x0A): kX = ((kY + 0x401) * 16 - 1) ^ 0x0000; break; case(0x09): kX = ((kY + 0x501) * 32 - 1) ^ 0x0000; break; case(0x08): kX = ((kY + 0x601) * 64 - 1) ^ 0x0000; break; } bin[offset] = kX; } outfile = argv[2]; wopen(); fwrite(bin, 1, 0x80000, fhout); wclose(); return 0; }