Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Vendrethz

#1
General Programadores / Sobre libros de C
01 de Enero de 1970, 01:00:00 AM
                                titulo: C Guida Completa terza Edizione
autor: Herbert Schildt
productor: McGraw Hill

Supongo que será el mismo que yo compré en Junio en la FNAC, en castellano.

Título: C Manual de Referencia - Cuarta Edición (sí, ya van por la cuarta e incluye C99)
Autor: Herbert Schildt
Editorial: McGraw Hill

Ciao :ojo:

                               
#2
General Programadores / Asignar a un puntero 64000bytes
01 de Enero de 1970, 01:00:00 AM
                                Hola a todos.

En mi humilde opinión, creo que el problema reside en el hecho que MS-DOS funciona en modo real, y por tanto, no puede direccionar segmentos mayores que 64KB. Por eso fallaría al reservar tanto espacio, ya que en esos 64KB puede que también se encuentren los datos estáticos o la pila, lo cual nos deja con menos de 64000 bytes para datos dinámicos. Esto explicaría por qué falla aún al comienzo del programa ya que los datos estáticos ya están ahí cuando comenzamos.

Puedes probar a usar la función farmalloc(unsigned long nbytes) que traen los compiladores de Borland, que permite usar bloques superiores a los 64KB. Quizá sea esa la solución a tu problema. Revisa también el modelo de memoria que estás usando (se te quedará corto con tiny y probablemente con small).


//antes de las funciones
unsigned char *vga = (unsigned char *)MK_FP(0xa000,0);
unsigned char *vgaAux;
//con este en una funcion voy creando la imagen
memset(vgaAux + ((defx * j) + i) , codigo, rep);
//y al final de esa funcion lo muevo a la memoria de video
memcpy(vga , vgaAux, (size_t)64000);
//en el main reservo memoria para este puntero
vgaAux = (unsigned char *)farmalloc(64000);

// ** Comprueba siempre que no sea NULL **
if(vgaAux==NULL)
 {
 printf("Memoria insuficiente! (vgaAux)n");
 // ...
 }

//y lo libero al final del main
free(vgaAux);


Suerte :ojo:

PD: Por cierto, aún así te recomiendo que aprendas DirectX u OpenGL en vez de partirte el cráneo aprendiendo a programar multimedia en DOS pues, lo queramos o no, la verdad es que ya está totalmente obsoleto. :triste:                                





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.