Programación Específica > Programación de Videojuegos

 Pantallas Virtuales

(1/3) > >>

konstàns:
Hola, soy nuevo en este foro, y ya he recorrido bastantes por un problemilla que nadie, pero nadie me lo ha podido solucionar: es el tema de pantallas virtuales, una tècnica que se utiliza en la programacion grafica, que evita (en una animaciòn) el conocido parpadeo molesto. Resumidamente, lo que se hace para evitar este parpadeo es reservar un segmento de memoria (64k) y escribir en el como si se tratase de la videoram, para luevo volcar dicho segemto (esperando el retrazo vertical) en la memoria de video, consigiendo una animacion fluida y sin parpadeos.
 Ahora el problema es........: como hago para reservar un segmento de memoria????(estamos hablando de programar en borland c 3.1). Eh provado utilizando malloc, calloc, new, farcalloc, farmalloc, pero no me reserva los 64k de memoria. Tambien eh usado codigo assembler , con interrupciones para lograrlo pero tampoco.
 La verdad es que no se que hacer, hace mas de 3 meses que estoy estancado con este asunto y nadie me puede dar una respuesta concreta. Me han dicho que puede ser que el sistema operativo no me premite reservar tanta memoria (lo probè en todos los windows y en dos y tampoco).
 Le estarè extremadamente agradecido al que pueda resolverme este problema....
 

 pd: este es el codigo en assembler que utilizo para reservar 64k de memoria:

unsigned int AllocateVScreen( void )
{

 unsigned int segment, error;
 error = 0;

 asm {
   mov ah, 0x48                                /* petici¢n de memoria */
   mov bx, 4096                                /* 4096*16 = 65536 */
   int 0x21                                    /* interrupci¢n 21h */
   jc ErrorAVSC
   mov [segment], ax
   jmp ExitAVSC                                /* control de errores */
    }

ErrorAVSC:;
   asm mov [error], bx

ExitAVSC:;
   if(error !=0 ) return( 0 );
   return(segment);                                 /* devoluci¢n de segm */
   
}
 nunca me devuelve el segmento pedido.

JuanK:
bueno si es el sistema operativo,  las ocasas que etas averiguando  son muy validas para sistemas derivados del DOS es deicir hasta windows 98, pero de ahi en adelante no te funcionaran igual

en teoria es lo mismo pero ya en la practica prodria ser diferente sobre todo en el bajo nivel.

primero que todo debes cambiar de compilador, preferiblemente

alguno de visual studio.NET
dev c++
DJGPP
etc...

Y segundo tienes las opciones de trabjar con el lenguaje C/ C++ o interactuar con la API de windows, respecto al assembler hay cosas que debido a los niveles de proteccion del sistema operativo no podras hacer sino a travez de la API.

konstàns:
Es que trato de hacerlo en lenguaje c. Esto de reservar memoria no es invento mio, sino que lo eh visto en varias paginas de programacion grafica y coinciden en el mismo codigo, pero no advierten ningun inconveniente que pueda aparecer.

 pd. no se mucho de prog. de video juegos, pero que es api?
 Si no es mucha molestia te pediria si no me podes recomendar alguna pagina o tutorial para bajar que explique programacion de videojuegos en c
gracias

JuanK:
por eso te digo que lo que estas tratando de usar ya no funciona, si funcionaba en antiguos sistemas , yo mismo lo hice y hasta te puedo decir de uqe paginas lo sacaste.

todo lo que te he dicho en el post anterior es en lenguaje c.

Segun veo, eres principiante, sin el animo de desanimarte... la porgramacion de vgames no es para principiantes requieres tener ya buena habilidad en el lenguaje qu usas y por supuesto algo de experiencia.

en todo caso mi recomendacion es que no uses los fragmentos de codigo que estas usando pues ya muchos son obsoletos debido a los cambios en los sistemas operativos, otra recomendacion es que no uses turboc de esa version pues ya esta muy quedado y no funciona myu bien sino para desarrollos de sistemas viejos, usa alguno de los compiladores quete dije u otro mas reciente.

Actualizate en compilador y hechale una ojeada a las librerias que se mencionan en este foro:

allegro
directx
opengl

lo de la API mejor no profundices en eso por el momento, API = aplication programing interface basicamente es una libreria  y ya.-

Altareum:
Pues, en realidad eso está relacionado no solo con el sistema operativo, sino también con el compilador y el tipo de programa que quieras armar...

El problema que tienes con los 64K ( yo también he dado vueltas con eso hasta que me rendí), es porque el programa que estás compilando, está en modo real. Este tipo de programas maneja solo 1Mb de memoria total, fragmentada en bloques de 64Kb.

Excepto que tu porgrama lo utilices directamente con la pc, es imposible que accedas a más memoria, ya que el sistema operativo no te va a dejar. Quiero decir, que si lo haces en Assembler, si tienes forma, pero siempre y cuando, no utilices en sistemas operativos que te lo limiten (como DOS o Windows)...

Altareum.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa