antes que nada saludos a todos y gracias por tomarse el tiempo de leer esto!
este es mi problema: estoy usando el compilador Turbo C++ 4.5 (funciona en Windows, no en DOS) para desarrollar un emulador de Nintendo NES. tengo que reservar memoria para emular la memoria RAM de la consola. en el codigo fuente del emulador XNES vi que lo hacen de la siguiente manera:
RAM = (byte *)malloc( 0x10000 );
...pero cuando intento hacer eso en mi compilador de tira error. pareciera que no hay memoria suficiente, pero se que es un error del compilador. este error siempre me salta cuando intento reservar un bloque de memoria mayor a 65534 (noten que 0x10000 = 65536)
por que pasa esto? como lo puedo resolver?
este es el codigo que desarrolle hasta ahora (prihibido reirse! jaja):
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void main(void)
{
FILE *fp;
char gamename[50];
int i,RomBanks16kb,VRomBanks8kb,RamBanks8kb;
unsigned char *mem,*RAM,*ROM,*VRAM,*VROM,*SRAM;
unsigned long int kbromsize,pc;
clrscr();
strcpy(gamename,"demo.nes");
for(i = 0;i <= strlen(gamename) - 1;i++)
{
gamename[i] = toupper(gamename[i]);
}
fp = fopen(gamename,"rb");
if(!fp)
{
printf("Error abriendo el archivo %s. Saliendo...",gamename);
getch();
exit(1);
}
printf("Archivo %s abierto correctamente",gamename);
rewind(fp);
fseek(fp,0L,2);
kbromsize = ftell(fp);
printf("nTamano de la rom: %d kb",kbromsize);
mem = (unsigned char *)malloc(kbromsize);
rewind(fp);
fread(mem,1,kbromsize,fp);
if(!mem)
{
printf("nError alojando la memoria principal. Saliendo...");
getch();
exit(1);
}
printf("nArchivo cargado en memoria correctamente");
if((mem[0] == 'N') && (mem[1] == 'E') && (mem[2] == 'S'))
{
printf("niNes header encontrado");
}
else printf("nEl archivo %s no es una rom de NES. Saliendo...",gamename);
RomBanks16kb = mem[4];
VRomBanks8kb = mem[5];
printf("n%d banco(s) de memoria ROM",RomBanks16kb);
printf("n%d banco(s) de memoria VROM",VRomBanks8kb);
RAM = (unsigned char *)malloc(0x10000);
/*ROM = (unsigned char *)malloc(RomBanks16kb * 16 * 1024);
VRAM = (unsigned char *)malloc(0x4000);
VROM = (unsigned char *)malloc(VRomBanks8kb * 8 * 1024);
SRAM = (unsigned char *)malloc(0x100);*/
if(!RAM)
{
printf("nError alojando la memoria principal. Saliendo...");
getch();
exit(1);
}
printf("nn");
pc = 0;
while(pc <= 139)
{
if((pc != 0) && (pc % 20 == 0)) printf("n");
printf("%2X ",mem[pc]);
pc++;
}
printf("nnSaliendo...");
getch();
return;
}
se que puedo solucionar este problema usando la libreria "allegro.h", pero tuve problemas para usarla en todos los compiladores C/C++ que probe, salvo en el Dev-C++... que es un espanto...
cualquier ayuda sera bienvenida! saludos
EI: juntando mensajes.ok ya lo solucione. instale el Code::Blocks, q compila a 32 bits