Applied patch by TypeError (adds FAT image support and corrects function calls without prototypes), fixed various compile warnings in OGLrender, fixed an error message that would have crashed (c string instead of expected obj-c string)

This commit is contained in:
gecko_reverse 2008-04-06 08:08:25 +00:00
parent a0c32e9c66
commit 764697ec8c
18 changed files with 140 additions and 42 deletions

View File

@ -14,6 +14,7 @@
- Added an optional status bar (resize handle no longer overlaps screen). [Jeff B]
- New ROM Info and About DeSmuME windows have been added. [Jeff B]
- Fixed several bugs in window resizing. [Jeff B]
- Added FAT image support for homebrew games (thanks to TypeError). [Jeff B]
general:
- Fixed possible segfault in ROMReader on ia64 and amd64. [evilynux]
- Fixed a crash bug with 2D background corrupting memory [shash]

View File

@ -6,8 +6,8 @@
1) Compiling instructions...................................13
2) How to use DeSmuME.......................................31
3) Contact information......................................67
4) Disclaimer...............................................84
3) Contact information......................................76
4) Disclaimer...............................................93
1 Compiling instructions______________________________________
@ -45,7 +45,7 @@ Linux and Windows versions.
Click the lower screen for DS touch-screen input.
Here are the default key mappings(they may be subject to change):
Here are the default key mappings(may be subject to change):
up arrow - Up
left arrow - Left
down arrow - Down
@ -59,10 +59,19 @@ n - Right Trigger
enter - Start button
space - Select button
Shift + F1 (through F10) will save the state with the corresponding number.
F1 (through F10) will load the state with the corresponding number.
Shift + F1 (through F10) will save the state with the
corresponding number. F1 (through F10) will load the state
with the corresponding number.
NOTE: These key bindings may not be correct on foreign keyboards.
NOTE: These key bindings may not be correct on foreign
keyboards.
To set up a FAT disk image (for homebrew apps) you can use the
"Emulation > Set FAT Image File" option in the menu. You can
also set this from the command line by launching DeSmuME
inside its app bundle:
DeSmuME.app/Contents/MacOS/DeSmuME -FlashFile /path/to/file.img
3 Contact information_________________________________________
@ -77,9 +86,9 @@ Web: http://desmume.sourceforge.net
Please don't ask for roms, bios files or any other copyrighted
stuff.
If you want to submit a bug report, please run desmume, go into
the "Help" menu, and click on "Submit a bug report". If you're
having trouble with it, please feel free to email.
If you want to submit a bug report, please run desmume, go
into the "Help" menu, and click on "Submit a bug report". If
you're having trouble with it, please feel free to email.
4 Disclaimer__________________________________________________

View File

@ -88,6 +88,7 @@ void SPU_KeyOn(int channel);
void SPU_WriteByte(u32 addr, u8 val);
void SPU_WriteWord(u32 addr, u16 val);
void SPU_WriteLong(u32 addr, u32 val);
u32 SPU_ReadLong(u32 addr);
void SPU_Emulate(void);
#endif

View File

@ -233,7 +233,7 @@ void armcpu_init(armcpu_t *armcpu, u32 adr);
u32 armcpu_switchMode(armcpu_t *armcpu, u8 mode);
static u32 armcpu_prefetch(armcpu_t *armcpu);
u32 armcpu_exec(armcpu_t *armcpu);
//BOOL armcpu_irqExeption(armcpu_t *armcpu);
BOOL armcpu_irqExeption(armcpu_t *armcpu);
//BOOL armcpu_prefetchExeption(armcpu_t *armcpu);
BOOL
armcpu_flagIrq( armcpu_t *armcpu);

View File

@ -36,6 +36,7 @@
#define WRITE_FN _write
#define READ_FN _read
#else
#include <unistd.h>
#define OPEN_MODE O_RDWR
#define OPEN_FN open
@ -67,7 +68,7 @@ debug_output( const char *fmt, ...) {
}
#endif
#if 0
#if 1
#ifdef WIN32
#define LOCAL_LOG debug_output
#else
@ -483,12 +484,16 @@ cflash_init( const char *disk_image_filename) {
if ( disk_image != -1) {
file_size = LSEEK_FN( disk_image, 0, SEEK_END);
LSEEK_FN( disk_image, 0, SEEK_SET);
if (0 && file_size == -1) {
LOCAL_LOG( "Error when seeking to end of disk image" );
} else {
LSEEK_FN( disk_image, 0, SEEK_SET);
LOCAL_LOG( "Disk image size = %d (%d sectors)\n",
LOCAL_LOG( "Disk image size = %d (%d sectors)\n",
file_size, file_size / 512);
init_good = TRUE;
}
init_good = TRUE;
}
}
else {
LOCAL_LOG("Failed to open file %s: \"%s\"\n",
disk_image_filename,
@ -643,6 +648,7 @@ cflash_read(unsigned int address) {
BUFFERED_BLOCK_SIZE - read_bytes);
if ( cur_read == -1) {
LOCAL_LOG( "Error during read: %s\n", strerror(errno) );
break;
}
read_bytes += cur_read;

View File

@ -466,6 +466,7 @@
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = DESMUME_COCOA;
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
@ -480,6 +481,7 @@
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_PREPROCESSOR_DEFINITIONS = DESMUME_COCOA;
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;

Binary file not shown.

Binary file not shown.

View File

@ -24,6 +24,7 @@ Based on work by yopyop and the DeSmuME team!
*/
#import "main_window.h"
#import "preferences.h"
/*
FIXME: Hardware acceleration for openglrender.c ??
@ -267,6 +268,10 @@ a way to get the time of a save that's not a string / human formatted...
[frame_skip_menu release];
[emulation addItem:[NSMenuItem separatorItem]];
temp = [emulation addItemWithTitle:NSLocalizedString(@"Set FAT Image File...", nil) action:@selector(pickFlash) keyEquivalent:@""];
[emulation release];
//Create the screens menu
@ -432,6 +437,8 @@ void joinThread_gdb(void *thread_handle)
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:NO];
[panel setTitle:NSLocalizedString(@"Open ROM...", nil)];
if([panel runModalForDirectory:nil file:nil types:[NSArray arrayWithObjects:@"NDS", @"DS.GBA", nil]] == NSOKButton)
{
NSString* selected_file = [[panel filenames] lastObject]; //hopefully also the first object
@ -440,6 +447,24 @@ void joinThread_gdb(void *thread_handle)
}
}
- (void)pickFlash
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:NO];
[panel setTitle:NSLocalizedString(@"Set FAT Image File...", nil)];
if([panel runModalForDirectory:nil file:nil types:[NSArray arrayWithObjects:@"FAT", @"IMG", nil]] == NSOKButton)
{
NSString* selected_file = [[panel filenames] lastObject];
[main_window setFlashFile:selected_file];
}
}
- (BOOL)application:(NSApplication*)sender openFile:(NSString*)filename
{
//verify everything

View File

@ -62,6 +62,7 @@
volatile int frame_skip;
NSString *current_file;
NSString *flash_file;
unsigned char gpu_buff[256 * 256 * 5]; //this is where the 3D rendering of the NDS is stored
}
@ -90,6 +91,10 @@
- (NSInteger)ROMARM7Size;
- (NSInteger)ROMDataSize;
//Flash memory
- (NSString*)flashFile;
- (void)setFlashFile:(NSString*)filename;
//execution control
- (BOOL)executing;
- (void)execute;

View File

@ -18,10 +18,12 @@
*/
#import "nds_control.h"
#import <OpenGL/OpenGL.h>
//DeSmuME general includes
#define OBJ_C
#include "sndOSX.h"
#include "preferences.h"
#include "../NDSSystem.h"
#include "../saves.h"
#include "../render3D.h"
@ -70,9 +72,21 @@ struct NDS_fw_config_data firmware;
frame_skip = -1; //default to auto frame skip
gui_thread = [NSThread currentThread];
current_file = nil;
flash_file = nil;
sound_lock = [[NSLock alloc] init];
current_screen = nil;
//Set the flash file if it's in the prefs/cmd line. It will be nil if it isn't.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
flash_file = [[defaults stringForKey:PREF_FLASH_FILE] retain];
if ([flash_file length] > 0) {
NSLog(@"Using flash file: \"%@\"\n", flash_file);
} else {
[flash_file release];
flash_file = nil;
NSLog(@"No flash file given\n");
}
//check if we can sen messages on other threads, which we will use for video update
timer_based = ([NSObject instancesRespondToSelector:@selector(performSelector:onThread:withObject:waitUntilDone:)]==NO)?true:false;
@ -181,6 +195,7 @@ struct NDS_fw_config_data firmware;
[context release];
[pixel_format release];
[current_file release];
[flash_file release];
[sound_lock release];
NDS_DeInit();
@ -208,8 +223,15 @@ struct NDS_fw_config_data firmware;
BOOL was_paused = [self paused];
[self pause];
//get the flash file
const char *flash;
if (flash_file != nil)
flash = [flash_file UTF8String];
else
flash = NULL;
//load the rom
if(!NDS_LoadROM([filename cStringUsingEncoding:NSASCIIStringEncoding], backupmemorytype, backupmemorysize, "temp.sav") > 0)
if(!NDS_LoadROM([filename cStringUsingEncoding:NSASCIIStringEncoding], backupmemorytype, backupmemorysize, flash) > 0)
{
//if it didn't work give an error and dont unpause
messageDialog(NSLocalizedString(@"Error", nil), @"Could not open file");
@ -217,7 +239,7 @@ struct NDS_fw_config_data firmware;
//continue playing if load didn't work
if(was_paused == NO)[self execute];
return FALSE;
return NO;
}
//clear screen data
@ -235,7 +257,7 @@ struct NDS_fw_config_data firmware;
//emulation core somehow
execute = true;
return true;
return YES;
}
- (BOOL)ROMLoaded
@ -373,6 +395,18 @@ struct NDS_fw_config_data firmware;
return NDS_getROMHeader()->ARM7binSize + NDS_getROMHeader()->ARM7src;
}
- (NSString*)flashFile
{
return flash_file;
}
- (void)setFlashFile:(NSString*)filename
{
if (flash_file)
[flash_file release];
flash_file = [filename retain];
}
- (BOOL)executing
{
return run;

View File

@ -17,4 +17,6 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define PREF_FLASH_FILE @"FlashFile"
void setAppDefaults(); //this is defined in preferences.m and should be called at app launch

View File

@ -241,7 +241,11 @@ void setAppDefaults()
//@"DeSmuME User", PREF_FIRMWARE_PLAYER_NAME,
//@"English", PREF_FIRMWARE_LANGUAGE,
//Flash file default
@"", PREF_FLASH_FILE,
nil];
[desmume_defaults retain];
//window size defaults
@ -253,7 +257,6 @@ void setAppDefaults()
//[NSData dataWithBytes:&temp length:sizeof(NSRect)], @"DeSmuME Preferences Window", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:desmume_defaults];
}
//this is a hack - in the nib we connect preferences to this function name,
@ -272,7 +275,7 @@ void setAppDefaults()
//----------------------------------------------------------------------------------------------
//get the applications main bundle
NSBundle* app_bundle = [NSBundle mainBundle];
//NSBundle* app_bundle = [NSBundle mainBundle];
//get a font for displaying text
preferences_font = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSRegularControlSize]];

View File

@ -179,7 +179,7 @@
//tell cocoa save the file
NSBitmapImageRep *image = [screen imageRep];
if(image == nil)
messageDialog(NSLocalizedString(@"Error", nil), "Couldn't create the screenshot image");
messageDialog(NSLocalizedString(@"Error", nil), @"Couldn't create the screenshot image");
else
[[image representationUsingType:type properties:[NSDictionary dictionary]]
writeToFile:[panel filename] atomically:NO];

View File

@ -26,7 +26,13 @@ extern SoundInterface_struct SNDOSX;
//Beyond this point are sound interface extensions specific to the mac port
//recording to file
int SNDOSXReset();
void SNDOSXMuteAudio();
void SNDOSXUnMuteAudio();
void SNDOSXSetVolume(int volume);
//Recording
bool SNDOSXOpenFile(void *fname); //opens a file for recording (if filename is the currently opened one, it will restart the file), fname is an NSString
void SNDOSXStartRecording(); //begins recording to the currently open file if there is an open file
void SNDOSXStopRecording(); //pauses recording (you can continue recording later)

View File

@ -22,6 +22,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

View File

@ -19,6 +19,7 @@
*/
#include <stdlib.h>
#include <string.h>
#include "debug.h"
#include "types.h"
#include "mc.h"

View File

@ -19,13 +19,15 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <math.h>
#include <stdlib.h>
#include <string.h>
#ifndef DESMUME_COCOA
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <gl\gl.h>
#include <math.h>
#include <stdlib.h>
#include "..\debug.h"
#include "..\MMU.h"
#include "..\bits.h"
@ -33,7 +35,6 @@
#else
#include <OpenGL/gl.h>
#include <OpenGL/glext.h>
#include "../debug.h"
@ -174,7 +175,7 @@ char NDS_glInit(void)
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glColor3f (1.f, 1.f, 1.f);
glGenTextures (1, &oglTextureID);
glGenTextures (1, (GLuint*)&oglTextureID);
glViewport(0, 0, 256, 192);
@ -485,13 +486,14 @@ static __inline void SetupTexture (unsigned int format, unsigned int palette)
unsigned int sizeY = (1<<(((format>>23)&0x7)+3));
unsigned int mode = (unsigned short)((format>>26)&0x7);
unsigned char * adr = (unsigned char *)(ARM9Mem.ARM9_LCD + ((format&0xFFFF)<<3));
unsigned short param = (unsigned short)((format>>30)&0xF);
unsigned short param2 = (unsigned short)((format>>16)&0xF);
//unsigned short param = (unsigned short)((format>>30)&0xF);
//unsigned short param2 = (unsigned short)((format>>16)&0xF);
unsigned int imageSize = sizeX*sizeY;
unsigned int paletteSize = 0;
unsigned int palZeroTransparent = (1-((format>>29)&1))*255; // shash: CONVERT THIS TO A TABLE :)
unsigned int x=0, y=0;
unsigned char * dst = texMAP, *src = NULL;
unsigned char * dst = texMAP;
//unsigned char *src = NULL;
if (mode == 0)
glDisable (GL_TEXTURE_2D);
@ -841,7 +843,7 @@ static __inline void SetupTexture (unsigned int format, unsigned int palette)
case 2:
{
u32 *src = (u32*)texMAP, *dst = (u32*)texMAP2;
u32 *src = (u32*)texMAP;//, *dst = (u32*)texMAP2;
for (y = 0; y < sizeY; y++)
{
@ -957,7 +959,7 @@ void NDS_glBegin(unsigned long v)
*/
colorRGB[3] = colorAlpha;
glColor4iv (colorRGB);
glColor4iv ((GLint*)colorRGB);
}
else
{
@ -1003,7 +1005,7 @@ void NDS_glColor3b(unsigned long v)
colorRGB[0] = (v&0x1F) << 26;
colorRGB[1] = ((v>>5)&0x1F) << 26;
colorRGB[2] = ((v>>10)&0x1F) << 26;
glColor4iv (colorRGB);
glColor4iv ((GLint*)colorRGB);
}
static __inline void SetVertex()
@ -1135,7 +1137,7 @@ void NDS_glFlush(unsigned long v)
void NDS_glPolygonAttrib (unsigned long val)
{
u32 polygonID = (val>>24)&63;
//u32 polygonID = (val>>24)&63;
// Light enable/disable
lightMask = (val&0xF);
@ -1188,8 +1190,8 @@ void NDS_glMaterial0 (unsigned long val)
glEnd();
}
glMaterialiv (GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
glMaterialiv (GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse);
glMaterialiv (GL_FRONT_AND_BACK, GL_AMBIENT, (GLint*)ambient);
glMaterialiv (GL_FRONT_AND_BACK, GL_DIFFUSE, (GLint*)diffuse);
if (beginCalled)
{
@ -1213,8 +1215,8 @@ void NDS_glMaterial1 (unsigned long val)
glEnd();
}
glMaterialiv (GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialiv (GL_FRONT_AND_BACK, GL_EMISSION, emission);
glMaterialiv (GL_FRONT_AND_BACK, GL_SPECULAR, (GLint*)specular);
glMaterialiv (GL_FRONT_AND_BACK, GL_EMISSION, (GLint*)emission);
if (beginCalled)
{
@ -1317,9 +1319,9 @@ void NDS_glLightColor (unsigned long v)
if (beginCalled)
glEnd();
glLightiv(GL_LIGHT0 + index, GL_AMBIENT, lightColor);
glLightiv(GL_LIGHT0 + index, GL_DIFFUSE, lightColor);
glLightiv(GL_LIGHT0 + index, GL_SPECULAR, lightColor);
glLightiv(GL_LIGHT0 + index, GL_AMBIENT, (GLint*)lightColor);
glLightiv(GL_LIGHT0 + index, GL_DIFFUSE, (GLint*)lightColor);
glLightiv(GL_LIGHT0 + index, GL_SPECULAR, (GLint*)lightColor);
if (beginCalled)
glBegin (vtxFormat);
@ -1383,7 +1385,7 @@ void NDS_glNormal(unsigned long v)
void NDS_glCallList(unsigned long v)
{
static unsigned long oldval = 0, shit = 0;
//static unsigned long oldval = 0, shit = 0;
if(!clInd)
{
@ -1808,7 +1810,7 @@ void NDS_glCallList(unsigned long v)
void NDS_glGetMatrix(unsigned int mode, unsigned int index, float* dest)
{
int n;
//int n;
if(index == -1)
{