diff --git a/config.c b/config.c deleted file mode 100644 index eaeb2a3..0000000 --- a/config.c +++ /dev/null @@ -1,184 +0,0 @@ -#include "model3.h" -#include "expat.h" - -enum -{ - ELEMENT_NONE = 1, - ELEMENT_CONFIG, - ELEMENT_ROMPATH, - ELEMENT_GAMELIST, - ELEMENT_BACKUPPATH, - ELEMENT_WIDTH, - ELEMENT_HEIGHT, - ELEMENT_FULLSCREEN, - ELEMENT_FPSLIMIT, - ELEMENT_STRETCH, -}; - -static STRING_ID element_id[] = -{ - { "config", ELEMENT_CONFIG }, - { "rom_path", ELEMENT_ROMPATH }, - { "gamelist", ELEMENT_GAMELIST }, - { "backup_path", ELEMENT_BACKUPPATH }, - { "width", ELEMENT_WIDTH }, - { "height", ELEMENT_HEIGHT }, - { "fullscreen", ELEMENT_FULLSCREEN }, - { "fps_limit", ELEMENT_FPSLIMIT }, - { "stretch", ELEMENT_STRETCH }, - { "", 0 }, -}; - -static STRING_ID boolean_id[] = -{ - { "yes", TRUE }, - { "no", FALSE }, - { "", 0 }, -}; - -static UINT8 *config_file; -static int current_element; - - -static void XMLCALL element_start(void *data, const char *el, const char **attr) -{ - int element = get_string_id(el, element_id); - - if (element < 0) - { - message(0, "Unknown element %s while parsing XML file\n", el); - } - else - { - current_element = element; - } -} - -static void XMLCALL element_end(void *data, const char *el) -{ - int element = get_string_id(el, element_id); - - if (element < 0) - { - message(0, "Unknown element %s while parsing XML\n", el); - } - else - { - switch (element) - { - case ELEMENT_CONFIG: - case ELEMENT_ROMPATH: - case ELEMENT_GAMELIST: - case ELEMENT_BACKUPPATH: - case ELEMENT_WIDTH: - case ELEMENT_HEIGHT: - case ELEMENT_FULLSCREEN: - case ELEMENT_FPSLIMIT: - case ELEMENT_STRETCH: - { - current_element = ELEMENT_NONE; - break; - } - } - } -} - -static void XMLCALL character_data(void *data, const char *s, int len) -{ - char temp[2000]; - memcpy(temp, s, len); - temp[len] = 0; - - switch (current_element) - { - case ELEMENT_ROMPATH: - { - strcpy(m3_config.rom_path, temp); - break; - } - case ELEMENT_GAMELIST: - { - strcpy(m3_config.rom_list, temp); - break; - } - case ELEMENT_BACKUPPATH: - { - strcpy(m3_config.backup_path, temp); - break; - } - case ELEMENT_WIDTH: - { - int width; - sscanf(temp, "%d", &width); - m3_config.width = width; - break; - } - case ELEMENT_HEIGHT: - { - int height; - sscanf(temp, "%d", &height); - m3_config.height = height; - break; - } - case ELEMENT_FULLSCREEN: - { - BOOL fullscreen = get_string_id(temp, boolean_id); - m3_config.fullscreen = fullscreen; - break; - } - case ELEMENT_FPSLIMIT: - { - BOOL fpslimit = get_string_id(temp, boolean_id); - m3_config.fps_limit = fpslimit; - break; - } - case ELEMENT_STRETCH: - { - BOOL stretch = get_string_id(temp, boolean_id); - m3_config.stretch = stretch; - break; - } - } -} - -BOOL parse_config(const char *config_name) -{ - XML_Parser parser; - - int length; - FILE *file; - - file = open_file(FILE_READ|FILE_BINARY, "%s", config_name); - if (file == NULL) - { - message(0, "Couldn't open %s", config_name); - return FALSE; - } - - length = (int)get_open_file_size(file); - - config_file = (UINT8*)malloc(length); - - if (!read_from_file(file, config_file, length)) - { - message(0, "I/O error while reading %s", config_name); - return FALSE; - } - - close_file(file); - - // parse the XML file - parser = XML_ParserCreate(NULL); - - XML_SetElementHandler(parser, element_start, element_end); - XML_SetCharacterDataHandler(parser, character_data); - - if (XML_Parse(parser, config_file, length, 1) != XML_STATUS_OK) - { - message(0, "Error while parsing the XML file %s", config_name); - return FALSE; - } - - XML_ParserFree(parser); - return TRUE; -} \ No newline at end of file diff --git a/config.xml b/config.xml deleted file mode 100644 index ed422ca..0000000 --- a/config.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - -]> - - - c:\devmame\roms - games.xml - c:\code\supermodel2\backup - 1280 - 1024 - yes - no - yes - \ No newline at end of file diff --git a/file.c b/file.c deleted file mode 100644 index 70d55c6..0000000 --- a/file.c +++ /dev/null @@ -1,499 +0,0 @@ -/* - * Sega Model 3 Emulator - * Copyright (C) 2003 Bart Trzynadlowski, Ville Linde, Stefano Teso - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License Version 2 as published - * by the Free Software Foundation. - * - * This program 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 this program (license.txt); if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * file.c - * - * File access and ZIP file support - * - */ - -#include "model3.h" -#include "file.h" -#include "unzip/unzip.h" /* ZLIB */ - -static unzFile zip_file; - -/* zip_get_file_size - * - * Gets the uncompressed size of a file in the ZIP file - * Returns the file size or 0 if the file is not found (or the file size is 0) - */ - -static UINT32 zip_get_file_size(const char* file) -{ - unz_file_info file_info; - - if( unzLocateFile(zip_file, file, 2) != UNZ_OK ) - return 0; - - if( unzGetCurrentFileInfo(zip_file, &file_info, NULL, 0, NULL, 0, NULL, 0) != UNZ_OK ) - return 0; - - return file_info.uncompressed_size; -} - -/* zip_read_file - * - * Reads the specified file to a buffer - * Returns TRUE if successful otherwise FALSE - */ - -static BOOL zip_read_file(const char* file, UINT8* buffer, UINT32 size) -{ - if( unzLocateFile(zip_file, file, 2) != UNZ_OK ) - return FALSE; - - if( unzOpenCurrentFile(zip_file) != UNZ_OK ) - return FALSE; - - if( unzReadCurrentFile(zip_file, buffer, size) < 0 ) { - unzCloseCurrentFile(zip_file); - return FALSE; - } - - unzCloseCurrentFile(zip_file); - return TRUE; -} - -/* zip_find_name_for_crc - * - * Finds a matching file name for a crc - * Returns TRUE if crc was found. The file name is copied to the supplied string pointer. - * - */ - -static BOOL zip_find_name_for_crc(UINT32 crc, char* file) -{ - unz_file_info file_info; - char filename[4096]; - - if( unzGoToFirstFile(zip_file) != UNZ_OK ) - return FALSE; - - do - { - if( unzGetCurrentFileInfo(zip_file, &file_info, filename, sizeof(filename), NULL, 0, NULL, 0) != UNZ_OK ) - return FALSE; - - if( file_info.crc == crc ) { - strcpy( file, filename ); - return TRUE; - } - - } while( unzGoToNextFile(zip_file) == UNZ_OK ); - - return FALSE; -} - -/* zip_open - * - * Opens a zip file. Must be called before any of the above functions ! - */ - -static BOOL zip_open(const char* file) -{ - zip_file = unzOpen(file); - if( zip_file == NULL ) - return FALSE; - - return TRUE; -} - -/* zip_close - * - * Closes the zip file - */ - -static void zip_close(void) -{ - unzClose(zip_file); -} - - - -/* File access functions */ - -static BOOL zip_directory = FALSE; -static char directory_path[4096]; - -/* TODO: set_directory and set_directory_zip could be merged together */ - -/* set_directory - * - * Sets the current directory - * - */ - -BOOL set_directory(char* path, ...) -{ - char string[4096]; - va_list l; - - va_start(l, path); - vsprintf(string, path, l); - va_end(l); - - zip_directory = FALSE; - strcpy( directory_path, string ); - return TRUE; -} - -/* set_directory_zip - * - * Sets a zip file as current directory - * - */ - -BOOL set_directory_zip(char* file, ...) -{ - char string[4096]; - va_list l; - - va_start(l, file); - vsprintf(string, file, l); - va_end(l); - - /* Close the old zip file */ - zip_close(); - - if( !zip_open(string) ) - return FALSE; - - zip_directory = TRUE; - strcpy( directory_path, string ); - return TRUE; -} - -/* get_file_size - * - * Returns the file size - * - */ - -size_t get_file_size(const char* file) -{ - FILE* f; - size_t length = 0; - char path[4096]; - - if( zip_directory ) { - length = zip_get_file_size(file); - } - else { - sprintf( path, "%s/%s", directory_path, file ); - f = fopen( path, "rb" ); - if( f == NULL ) - return 0; - - fseek( f, 0, SEEK_END ); - length = ftell(f); - fclose(f); - } - - return length; -} - -/* read_file - * - * Reads the content of the file to a buffer - * - */ - -BOOL read_file(const char* file, UINT8* buffer, UINT32 size) -{ - FILE* f; - char path[4096]; - - if( zip_directory ) { - return zip_read_file( file, buffer, size ); - } - else { - /* Build a full path to file */ - strcpy( path, directory_path ); - strcat( path, "/" ); - strcat( path, file ); - - f = fopen( path, "rb" ); - if( f == NULL ) - return FALSE; - - fseek( f, 0, SEEK_SET ); - if( fread(buffer, sizeof(UINT8), size, f) != (size_t)size ) { - fclose(f); - return FALSE; - } - - fclose(f); - } - return TRUE; -} - -/* write_file - * - * Writes the contents of a buffer to a file - * - */ - -BOOL write_file(const char* file, UINT8* buffer, UINT32 size) -{ - FILE* f; - char path[4096]; - - /* Whoops. No saving to a zip file :) */ - if( zip_directory ) - return FALSE; - - /* Build a full path to file */ - strcpy( path, directory_path ); - strcat( path, "/" ); - strcat( path, file ); - - f = fopen( path, "wb" ); - - fseek( f, 0, SEEK_SET ); - if( fwrite(buffer, sizeof(UINT8), size, f) != (size_t)size ) { - fclose(f); - return FALSE; - } - - fclose(f); - - return TRUE; -} - - -/* get_file_size_crc - * - * Returns the file size of a file specified by crc - * - */ - -size_t get_file_size_crc(UINT32 crc) -{ - char file[4096]; - - /* only zip files supported */ - if( !zip_directory ) - return 0; - - if( !zip_find_name_for_crc(crc, file) ) - return 0; - - return zip_get_file_size(file); -} - -/* read_file_crc - * - * Reads the contents of a file specified by crc - * - */ - -BOOL read_file_crc(UINT32 crc, UINT8* buffer, UINT32 size) -{ - char file[4096]; - - /* only zip files supported */ - if( !zip_directory ) - return FALSE; - - if( !zip_find_name_for_crc(crc, file) ) - return FALSE; - - return zip_read_file(file, buffer, size); -} - - - -/* open_file - * - * Opens a file - * - */ - -FILE* open_file(UINT32 flags, char* file, ...) -{ - char string[4096]; - char path[4096]; - char mode[3]; - char* m = mode; - va_list l; - - /* zip files are not supported this way */ - if( zip_directory ) - return 0; - - va_start(l, file); - vsprintf(string, file, l); - va_end(l); - - /* Build full path */ - if (strlen(directory_path) <= 0) - { - sprintf(path, "%s", string); - } - else - { - sprintf(path, "%s/%s", directory_path, string); - } - - /* Set file access mode */ - if( flags & FILE_READ ) - sprintf(&m[0], "r"); - else - sprintf(&m[0], "w"); - - if( flags & FILE_BINARY ) - sprintf(&m[1], "b" ); - else - sprintf(&m[1], "t" ); - - m[2] = '\0'; - return fopen(path, m); -} - -/* close_file - * - * Closes the file - * - */ - -void close_file(FILE* file) -{ - fclose(file); -} - -/* read_from_file - * - * Reads n bytes from file to a buffer - * - */ - -BOOL read_from_file(FILE* file, UINT8* buffer, UINT32 size) -{ - if( file == NULL ) - return FALSE; - - if( fread(buffer, sizeof(UINT8), size, file) != (size_t)size ) - return FALSE; - - return TRUE; -} - -/* write_to_file - * - * Writes n bytes to file - * - */ - -BOOL write_to_file(FILE* file, UINT8* buffer, UINT32 size) -{ - if( file == NULL ) - return FALSE; - - if( fwrite(buffer, sizeof(UINT8), size, file) != (size_t)size ) - return FALSE; - - return TRUE; -} - - -/* get_file_size - * - * Gets the file size - * - */ -size_t get_open_file_size(FILE *file) -{ - size_t length; - int current_pos = ftell(file); - fseek(file, 0, SEEK_END); - length = ftell(file); - fseek(file, current_pos, SEEK_SET); - - return length; -} - - -/* - * Load a file to a buffer. - */ - -int load_file(char *path, UINT8 * dest, int size) -{ - FILE * fp; - int length; - - if(path == NULL || dest == NULL) - return(-1); - - if((fp = fopen(path, "rb")) == NULL) - return(-1); - - fseek(fp, 0, SEEK_END); - length = ftell(fp); - fseek(fp, 0, SEEK_SET); - - if (length <= 0) - return -1; - - if (fread(dest, 1, size, fp) != (size_t)length) // file size mismatch - return -1; - - return length; -} - -static void word_swap(UINT8 *src, int size) -{ - while (size -= 4) - { - *((UINT32 *) src) = BSWAP32(*((UINT32 *) src)); - src += sizeof(UINT32); - } -} - -/* - * Save a buffer to a file. - */ - -void save_file(char *path, UINT8 *src, int size, BOOL byte_reversed) -{ - FILE * fp; - - if (byte_reversed) - { - word_swap(src, size); - } - - fp = fopen(path, "wb"); - if(fp != NULL) - { - fwrite(src, 1, size, fp); - fclose(fp); - message(0, "Wrote %s", path); - } - else - { - message(0, "Failed to write %s", path); - } - - if (byte_reversed) - { - word_swap(src, size); - } -} \ No newline at end of file diff --git a/file.h b/file.h deleted file mode 100644 index 2af6598..0000000 --- a/file.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Sega Model 3 Emulator - * Copyright (C) 2003 Bart Trzynadlowski, Ville Linde, Stefano Teso - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License Version 2 as published - * by the Free Software Foundation. - * - * This program 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 this program (license.txt); if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef INCLUDED_FILE_H -#define INCLUDED_FILE_H - -#include "model3.h" - -#define FILE_READ 0x1 -#define FILE_WRITE 0x2 -#define FILE_BINARY 0x4 -#define FILE_TEXT 0x8 - -/* Functions */ - -FILE* open_file(UINT32, char*, ...); -void close_file(FILE*); -BOOL read_from_file(FILE*, UINT8*, UINT32); -BOOL write_to_file(FILE*, UINT8*, UINT32); -size_t get_open_file_size(FILE *); - -size_t get_file_size(const char*); -BOOL read_file(const char*, UINT8*, UINT32); -BOOL write_file(const char*, UINT8*, UINT32); - -size_t get_file_size_crc(UINT32); -BOOL read_file_crc(UINT32, UINT8*, UINT32); - -BOOL set_directory(char*, ...); -BOOL set_directory_zip(char*, ...); - -int load_file(char *path, UINT8 * dest, int size); -void save_file(char *path, UINT8 *src, int size, BOOL byte_reversed); - -#endif /* INCLUDED_FILE_H */ diff --git a/games.xml b/games.xml deleted file mode 100644 index 8e00bcb..0000000 --- a/games.xml +++ /dev/null @@ -1,1655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -]> - - - - Virtua Fighter 3 - 1996 - Sega - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Fighter 3 Team Battle - 1996 - Sega - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sega Bass Fishing - 1997 - Sega - 1.0 - mpc106 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Get Bass - 1997 - Sega - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Scud Race (Australia) - 1996 - Sega - 1.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Scud Race (Export) - 1996 - Sega - 1.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Scud Race Plus - 1997 - Sega - 1.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The Lost World - 1997 - Sega - 1.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Striker 2 (Step 1.5) - 1997 - Sega - 1.5 - mpc106 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LeMans 24 - 1997 - Sega - 1.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Striker 2 '98 (Step 1.5) - 1998 - Sega - 1.5 - mpc106 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Striker 2 (Step 2.0) - 1997 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Harley-Davidson and L.A. Riders - 1997 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sega Rally 2 - 1998 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtual On 2: Oratorio Tangram - 1998 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtual On 2: Oratorio Tangram (ver 5.4g) - 1998 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fighting Vipers 2 - 1998 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Striker 2 '98 (Step 2.0) - 1998 - Sega - 2.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Striker 2 '99.1 - 1999 - Sega - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Virtua Striker 2 '99 - 1999 - Sega - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Daytona USA 2 - 1998 - Sega - 2.1 - 64M - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Daytona USA 2 Power Edition - 1998 - Sega - 2.1 - 64M - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dirt Devils - 1998 - Sega - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dirt Devils (alt) - 1998 - Sega - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Star Wars Trilogy (ver A) - 1998 - Sega/LucasArts - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Star Wars Trilogy - 1998 - Sega/LucasArts - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Spikeout - 1998 - Sega - 2.1 - 64M - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Spikeout Final Edition - 1998 - Sega - 2.1 - 64M - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Emergency Call Ambulance - 1999 - Sega - 2.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -