I've been working on this project for the last couple of days. I'm trying to write a program that copies a file from the cd to the saturn's internal memory. Basically a way for people without a netlink or a PAR to get saves. My source code compiles (with 2 warnings) and boots on a real saturn. The code also executes fully, it prints out my "Done" statement at the end. Unfortunately it doesn't seem to be copying the file properly. Anyway here's my source code, I've already wasted enough blank cds
| | | #include "sgl.h" // Required for basic sgl functions #include "sgl_cd.h" // Required for cd access #include "sega_bup.h" // Required for backup memory functions #include "stdlib.h" #define BUP_START 0x6090000 // In the sgl doc's they say to put 0x06????? but that doesn't compile... #define MAX_FILE 128 // Needed for CD functions #define READSECT 50 // Needed for CD functions Uint32 workmemory[2048]; // Needed for BackUpFunctions Sint32 dirwork[SLCD_WORK_SIZE(MAX_FILE)/sizeof(Sint32)]; // Needed for CD function Sint32 readbuf[(READSECT*CDBUF_FORM1/sizeof(Sint32))]; // Needed for CD function void ss_main(void) { Sint32 ndir; CDHN cdhn; CDKEY key[2]; CDBUF buf[2]; Sint32 stat; Sint32 len[2]; Sint32 ypos=1; BupConfig conf[3]; // stores backup configuration BupStat sttb; // stores backup status BupDir writetb; // writeb holds file data slInitSystem(TV_320x224, NULL, 1); // Initializes screen ndir=slCdInit(MAX_FILE, dirwork); // initializes cd slPrint("SlCdInit:", slLocate(1, ypos)); slPrintFX(toFIXED(ndir), slLocate(11, ypos)); ypos++; key[0].cn=key[0].sm =key[0].ci=CDKEY_NON E; key[1].cn=CDKEY_TER M; cdhn=slCdOpen("FPS_6MEN.DAT", key); // opens cd slPrint("slCdOpen:", slLocate(1,ypos)); slDispHex((Uint32)cdhn, slLocate(11, ypos)); buf[0].type=CDBUF_C OPY; buf[0].trans.copy.a ddr=readbuf; buf[0].trans.copy.u nit=CDBUF_FORM1; buf[0].trans.copy.s ize=READSECT; buf[1].type=CDBUF_T ERM; slCdLoadFile(cdhn,buf); // loads file from cd ypos++; while(1) { slSynch(); stat=slCdGetStatus(cdhn, len); slPrint("stat:", slLocate(1, ypos)); slDispHex((Uint32)stat, slLocate(7, ypos)); ypos++; if(ypos>=27) ypos=1; if(stat==CDSTAT_COMPLETED) break; } slPrint("Save loaded...", slLocate(1,3)); BUP_Init(BUP_START, workmemory, conf); // Initializes back up cart slPrint("Back up initialized...", slLocate(1,4)); strcpy((char *)writetb.filename, "FPS_6MEN_01"); // Specifies filename for the save strcpy((char *)writetb.comment, "Test2"); // Specifies comment for the save writetb.language = BUP_ENGLISH; // not sure what this does?? language probably writetb.datasize = 320; // Specifies file size, this is not working. slPrint("Formatting internal ram....", slLocate(1, 5)); BUP_Format(0); // Clears interal memory, 0 = internal memory, 1 = backup cart BUP_Write(0, &writetb, cdhn, 0); // This should copy the file to internal memory but doesn't... slPrint("Done.", slLocate(1,4)); // Prints done to the screen while(1) { slSynch(); } } |
After I run this cd, my internal memory is wiped clean, and there's a file called FPS_6MEN_01 which is 6 blocks big. The real save should be 320ish. When I load Fire Pro, and select internal memory, I get a message which I'm assuming says, "Corrupt Save" or something to that effect. I can't read Japanese. Anyway to make a long story short this isn't working and I'm giving up. Anybody up for finishing this project? Later |