All pastes #392569 Raw Edit

2sf.c

public c v1 · immutable
#392569 ·published 2007-03-12 22:30 UTC
rendered paste body
/*	2sf support for Desmume	(c) 2007 Peter S. Conway	    DeSmuME is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    DeSmuME is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with DeSmuME; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <stdio.h>#include <stdlib.h>#include <zlib.h>#include <windows.h>int istsfloaded=0;// these are all of static sizes, because I suck with pointers// feel free to convert them to pointers though.Byte uncompressedcode[0x2000000];Byte uncompressedsave[0x2000000];Byte *code;Byte *save;unsigned long uncompressedcodelength,uncompressedsavelength;unsigned long reservedstart,codestart;unsigned long reservedsize,codesize;FILE * tsfdata;void DisplayDebugInfo(char * Message, ...) {	char Msg[400];	va_list ap;	va_start( ap, Message );	vsprintf( Msg, Message, ap );	va_end( ap );	MessageBox(NULL,Msg,"debug crap",MB_OK);}int tsf_load_tsf(const char * filename) {	tsfdata=fopen(filename,"rb");	if (!tsfdata) {		MessageBox(NULL,"Error loading 2sf!","Fatal error",MB_OK);		return 1;	}	fseek(tsfdata,0x4,SEEK_SET);	fread(&reservedsize,1,4,tsfdata);	save=(Byte*) malloc(reservedsize);	fread(&codesize,1,4,tsfdata);	code=(Byte*) malloc(codesize);	// crc32 is not checked	if (!reservedsize) {		MessageBox(NULL,"Where's the savestate?","Huh?",MB_OK);		return 1;	}	reservedstart=0x10;	codestart=reservedsize+0x10;	DisplayDebugInfo("reserved size: %x code size: %x\nreserved start: %x code start: %x",reservedsize,codesize,reservedstart,codestart);	// load ROM	if (tsf_load_ROM()!=0) {		MessageBox(NULL,"error loading 2sf","too baaaaad",MB_OK);		return 1;	}	// just return it anyways	return 0;}int tsf_load_ROM(void) {	/*		Allocates a 2sf ROM in uncompressedcode.		This is pretty damn unstable, so don't come whining to me if it crashes.	*/	fseek(tsfdata,codestart+1,SEEK_SET);	fread(code,1,codesize,tsfdata);	// uncompress zlib data	uncompressedcodelength=0x328FD60;	if(uncompress(*uncompressedcode,&uncompressedcodelength,code,codesize)!= Z_OK) {		MessageBox(NULL,"zlib uncompress failed :(","oops",MB_OK);		return 1;	}	return 0;}void tsf_load_state(void) {	/*		just a placeholder	*/	return;}