SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: ehguacho en Miércoles 10 de Marzo de 2010, 21:23

Título: problema de memoria en C++
Publicado por: ehguacho en Miércoles 10 de Marzo de 2010, 21:23
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:

Código: Text
  1. RAM = (byte *)malloc( 0x10000 );
  2.  

...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):

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6.  
  7. void main(void)
  8. {
  9.     FILE *fp;
  10.     char gamename[50];
  11.     int i,RomBanks16kb,VRomBanks8kb,RamBanks8kb;
  12.     unsigned char *mem,*RAM,*ROM,*VRAM,*VROM,*SRAM;
  13.     unsigned long int kbromsize,pc;
  14.  
  15.     clrscr();
  16.     strcpy(gamename,"demo.nes");
  17.     for(i = 0;i <= strlen(gamename) - 1;i++)
  18.     {
  19.         gamename[i] = toupper(gamename[i]);
  20.     }
  21.     fp = fopen(gamename,"rb");
  22.     if(!fp)
  23.     {
  24.         printf("Error abriendo el archivo %s. Saliendo...",gamename);
  25.         getch();
  26.         exit(1);
  27.     }
  28.     printf("Archivo %s abierto correctamente",gamename);
  29.     rewind(fp);
  30.     fseek(fp,0L,2);
  31.     kbromsize = ftell(fp);
  32.     printf("nTamano de la rom: %d kb",kbromsize);
  33.     mem = (unsigned char *)malloc(kbromsize);
  34.     rewind(fp);
  35.     fread(mem,1,kbromsize,fp);
  36.     if(!mem)
  37.     {
  38.         printf("nError alojando la memoria principal. Saliendo...");
  39.         getch();
  40.         exit(1);
  41.     }
  42.     printf("nArchivo cargado en memoria correctamente");
  43.     if((mem[0] == 'N') && (mem[1] == 'E') && (mem[2] == 'S'))
  44.     {
  45.         printf("niNes header encontrado");
  46.     }
  47.     else printf("nEl archivo %s no es una rom de NES. Saliendo...",gamename);
  48.     RomBanks16kb = mem[4];
  49.     VRomBanks8kb = mem[5];
  50.     printf("n%d banco(s) de memoria ROM",RomBanks16kb);
  51.     printf("n%d banco(s) de memoria VROM",VRomBanks8kb);
  52.     RAM = (unsigned char *)malloc(0x10000);
  53.     /*ROM = (unsigned char *)malloc(RomBanks16kb * 16 * 1024);
  54.     VRAM = (unsigned char *)malloc(0x4000);
  55.     VROM = (unsigned char *)malloc(VRomBanks8kb * 8 * 1024);
  56.     SRAM = (unsigned char *)malloc(0x100);*/
  57.     if(!RAM)
  58.     {
  59.         printf("nError alojando la memoria principal. Saliendo...");
  60.         getch();
  61.       exit(1);
  62.     }
  63.  
  64.     printf("nn");
  65.     pc = 0;
  66.     while(pc <= 139)
  67.     {
  68.         if((pc != 0) && (pc % 20 == 0)) printf("n");
  69.         printf("%2X ",mem[pc]);
  70.         pc++;
  71.     }
  72.  
  73.     printf("nnSaliendo...");
  74.     getch();
  75.     return;
  76. }
  77.  

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 :good:

EI: juntando mensajes.

ok ya lo solucione. instale el Code::Blocks, q compila a 32 bits :good:
Título: Re: problema de memoria en C++
Publicado por: Eternal Idol en Jueves 11 de Marzo de 2010, 09:04
Dev-C++ y Code::Blocks traen el mismo compilador gcc  :comp: Mejor que olvides el turbo, es un compilador arcaica y obsoleto para MS-DOS.
Título: Re: problema de memoria en C++
Publicado por: ehguacho en Jueves 11 de Marzo de 2010, 17:19
Cita de: "Eternal Idol"
Dev-C++ y Code::Blocks traen el mismo compilador gcc  :comp: Mejor que olvides el turbo, es un compilador arcaica y obsoleto para MS-DOS.
exactamente eso hice! muchas gracias de todas maneras Eternal Idol! :good: