• Lunes 29 de Abril de 2024, 04:41

Autor Tema:  problema de memoria en C++  (Leído 1211 veces)

ehguacho

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
problema de memoria en C++
« en: Miércoles 10 de Marzo de 2010, 21:23 »
0
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:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: problema de memoria en C++
« Respuesta #1 en: Jueves 11 de Marzo de 2010, 09:04 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

ehguacho

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: problema de memoria en C++
« Respuesta #2 en: Jueves 11 de Marzo de 2010, 17:19 »
0
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: