X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=memory.c;h=0194a83f7dca5020881cc00008fdbbbf49aaf02d;hp=bec72700d7d7e52bbb8983d2cd7b84bab5e0ffe2;hb=0d6a66c2a80f50ae51327cd406f9df14d99ad02e;hpb=c62d28102c77e19c291c78bf6bf7f0a81abd54b9 diff --git a/memory.c b/memory.c index bec7270..0194a83 100644 --- a/memory.c +++ b/memory.c @@ -1,7 +1,7 @@ /* FCE Ultra - NES/Famicom Emulator * * Copyright notice for this file: - * Copyright (C) 2002 Ben Parnell + * Copyright (C) 2002 Xodnizel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,21 +21,41 @@ #include #include "types.h" -#include "version.h" +#include "fce.h" #include "memory.h" #include "general.h" #include "svga.h" +void *FCEU_gmalloc(uint32 size) +{ + void *ret; + ret=malloc(size); + if(!ret) + { + FCEU_PrintError("Error allocating memory! Doing a hard exit."); + exit(1); + } + return ret; +} + void *FCEU_malloc(uint32 size) { void *ret; ret=malloc(size); if(!ret) - FCEU_PrintError(MSG_ERRAM); + { + FCEU_PrintError("Error allocating memory!"); + return(0); + } return ret; } -void FCEU_free(void *ptr) // Might do something with this and FCEU_malloc later... +void FCEU_free(void *ptr) // Might do something with this and FCEU_malloc later... +{ + free(ptr); +} + +void FCEU_gfree(void *ptr) { free(ptr); } @@ -43,25 +63,39 @@ void FCEU_free(void *ptr) // Might do something with this and FCEU_malloc later void FASTAPASS(3) FCEU_memmove(void *d, void *s, uint32 l) { uint32 x; - int t; + long t; /* Type really doesn't matter. */ - t=(int)d; - t|=(int)s; - t|=(int)l; + t=(long)d; + t|=(long)s; + t|=(long)l; + + if(t&3) // Not 4-byte aligned and/or length is not a multiple of 4. + { + uint8 *tmpd, *tmps; - if(t&3) // Not 4-byte aligned and/or length is not a multiple of 4. - for(x=l;x;x--) // This could be optimized further, though(more tests could be performed). + tmpd = d; + tmps = s; + + for(x=l;x;x--) // This could be optimized further, though(more tests could be performed). { - *(uint8*)d=*(uint8 *)s; - ((uint8 *)d)++; - ((uint8 *)s)++; + *tmpd=*tmps; + tmpd++; + tmps++; } + } else + { + uint32 *tmpd, *tmps; + + tmpd = d; + tmps = s; + for(x=l>>2;x;x--) { - *(uint32*)d=*(uint32*)s; - ((uint32 *)d)++; - ((uint32 *)s)++; + *tmpd=*tmps; + tmpd++; + tmps++; } + } }