// romto8xu.cpp : définit le point d'entrée pour l'application console. // #define CKOFFSET2 0x24FFF8 // fx-9750/9860G OS checksum #define CKOFFSET1 0x1DFFF8 // fx-7400Gii OS checksum #define ROM_SIZE 2555904 typedef unsigned char byte; #include "stdio.h" #include "string.h" #include "stdlib.h" #include "bmp.h" #define WIDTH 128 #define HEIGHT 64 #define DEPTH 1 byte bmpdata[WIDTH*HEIGHT*DEPTH/8]; void printinfos() { printf("\n+----------------------------------+\n"); printf("! G2_BMP_INJECTOR !\n"); printf("+----------------------------------+\n"); printf(" X. Andreani\n\n"); printf("Injects a BMP off-image in a Casio graphic calculator OS.\n"); printf("BMP image has to be %ix%i monochrome (1-bit depth)\n",WIDTH,HEIGHT); printf("Supported models:\n"); printf("* Graph 25+Pro / fx-7400Gii\n"); printf("* Graph 35+USB / fx-9750Gii\n"); printf("* Graph 85(SD) / fx-9860G(SD)\n"); printf("* Graph 75/95 / fx-9860Gii(SD)\n"); } void printerror(char* msg) { printinfos(); printf("ERROR: %s\n",msg); } int main(int argc, char* argv[]) { byte* buffer; int romsize=ROM_SIZE; FILE* rom; FILE* polyrom; FILE* bmp; if( argc<3 ) { printerror("Too few arguments"); printf("Usage: %s \n", argv[0]); } else { rom=fopen(argv[1],"rb"); if(!rom) printerror("Source ROM file open error"); else { fseek(rom,0,SEEK_END); romsize=ftell(rom); fseek(rom,0,SEEK_SET); if(romsize>ROM_SIZE) romsize=ROM_SIZE; printf("ROM file size is %i.\n",romsize); if(romsizepalette[1]) { palette[0]=0; // black LCD palette[1]=1; // white LCD } else { palette[0]=1; // black LCD palette[1]=0; // white LCD } if(!readImage(bmpdata, &bmpdheader, palette, bmp, &bmpfheader)) printerror("Read image data"); else { memcpy(ptr,bmpdata,WIDTH*HEIGHT*DEPTH/8); int checksum=0; int ckoffset=CKOFFSET2; if(romsize0x100000000) checksum-=0x100000000; } printf("New checksum is 0x%x.\n",checksum); for(i=3;i>=0;i--) { buffer[i+ckoffset]=checksum%256; checksum=checksum/256; } polyrom=fopen(argv[3],"wb"); if(!polyrom) printerror("Dest ROM file open error"); else { printf("Flushing ROM file data...\n"); size=0; while(size