• Viernes 8 de Noviembre de 2024, 21:42

Autor Tema:  Pantallas Virtuales  (Leído 4602 veces)

konstàns

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Pantallas Virtuales
« en: Viernes 27 de Mayo de 2005, 05:27 »
0
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

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Pantallas Virtuales
« Respuesta #1 en: Viernes 27 de Mayo de 2005, 15:17 »
0
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.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

konstàns

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Pantallas Virtuales
« Respuesta #2 en: Viernes 27 de Mayo de 2005, 17:10 »
0
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

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Pantallas Virtuales
« Respuesta #3 en: Viernes 27 de Mayo de 2005, 17:22 »
0
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.-
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: Pantallas Virtuales
« Respuesta #4 en: Viernes 27 de Mayo de 2005, 20:12 »
0
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.
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Pantallas Virtuales
« Respuesta #5 en: Viernes 27 de Mayo de 2005, 20:39 »
0
Hola.

Yo estoy utilizando ahora mi propia librería gráfica en la que creo un backfuffer para pintar, con una resolución de 240x320x16 bits, con lo que ocupa bastante más de los 64 Kb (153600 bytes), y no tengo ningún problema con un compilador de 32 bits bajo Windows:
Código: Text
  1.  
  2.   m_nPixels = m_nWidth * m_nHeight;
  3.   m_nBufferSize = m_nPixels * (m_nBPP / 8);
  4.  
  5.   // A comer memoria: 240*320*2 = 153600 bytes. Es totalmente necesario para evitar flickering.
  6.   m_pBackBuffer = new WORD[m_nPixels];
  7.  
  8.  
  9.  

Espero que te sirva de ayuda.

Un saludo.

Ruben3d

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Pantallas Virtuales
« Respuesta #6 en: Sábado 28 de Mayo de 2005, 02:48 »
0
una pregunta lo estas compilando en modo de memoria LARGE?
porque sino nunca te lo va a malloquear....

eso me pasaba a mi al principio
no conosco ese compilador pero le tenes que pedir que te lo compile en
LRGE memory model y ahi te debe funcar....

sobre que en sistemas mas avanzados que el win98 no anda me parece que
es mentuira porque mis juegos ( hace muchjo que no hago uno ) usan esa tecnica
y andan sin drama en win me win xp etc...

espero que sirva

konstàns

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Pantallas Virtuales
« Respuesta #7 en: Sábado 28 de Mayo de 2005, 03:49 »
0
Yo estoy usando el borland c 3.1 small, no es el turbo. Lo que me dijiste de compilar en large o mas, tampoco se me permite, me tira un error que no encuentra una libreria (mathh.h), o hay veces que me lo permite, pero a  la larga se me tilda el compliador.
 Tambien tratè de crear un vector de 64000 (unsigned int o mayores) pero TAMBIEN no me lo permite.
 Ahora se me hace raro que no funcione este codigo porque lo baje de una pagina donde explica en varias secciones la programacion grafica en modo 13h(320*200). Todo, pero todo esta muy bien explicado y siempre tratan de optimizar el codigo, por lo que usan codigo assembler. Lo que se me hace raro es que no adviertan problemas con el tema de reservar los 64k.
 la pagina es:     My Webpage

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Pantallas Virtuales
« Respuesta #8 en: Domingo 29 de Mayo de 2005, 04:28 »
0
Cita de: "bob esponja"
una pregunta lo estas compilando en modo de memoria LARGE?
porque sino nunca te lo va a malloquear....

eso me pasaba a mi al principio
no conosco ese compilador pero le tenes que pedir que te lo compile en
LRGE memory model y ahi te debe funcar....

sobre que en sistemas mas avanzados que el win98 no anda me parece que
es mentuira porque mis juegos ( hace muchjo que no hago uno ) usan esa tecnica
y andan sin drama en win me win xp etc...

espero que sirva
Bob y como le haces?
nunca he podido utilizar las int
como
INT 13h

en windows XP siempre me saca infraccion de memoria.

la unica seria que usaras cosas medio emuladoras como el DJGPP.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Pantallas Virtuales
« Respuesta #9 en: Domingo 29 de Mayo de 2005, 16:55 »
0
Cita de: "JuanK"
Cita de: "bob esponja"
una pregunta lo estas compilando en modo de memoria LARGE?
porque sino nunca te lo va a malloquear....

eso me pasaba a mi al principio
no conosco ese compilador pero le tenes que pedir que te lo compile en
LRGE memory model y ahi te debe funcar....

sobre que en sistemas mas avanzados que el win98 no anda me parece que
es mentuira porque mis juegos ( hace muchjo que no hago uno ) usan esa tecnica
y andan sin drama en win me win xp etc...

espero que sirva
Bob y como le haces?
nunca he podido utilizar las int
como
INT 13h

en windows XP siempre me saca infraccion de memoria.

la unica seria que usaras cosas medio emuladoras como el DJGPP.
En Turbo C++ esta esa opcion en:
Citar
Options/Compiler/Code Generation.
Ahi podes cambiar a Tiny, Small, Large, Normal y otras y en:
Citar
Options/Compiler/Advanced Code Generation.
Podes poner Compatibilidad con 486,386,286, etc....

Yosi_RNR

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Pantallas Virtuales
« Respuesta #10 en: Miércoles 1 de Junio de 2005, 17:02 »
0
El Borland C 3.1 es un compilador para DOS, supongo. El modelo LARGE de memoria sirve para poder utilizar 1 segmento para codigo ( ó mas, no estoy seguro ) y mas de un segmento para datos.
El problema de que no te deje reservar 64k de para las pantallas virtuales puede deberse al tamaño del heap que el compilador tiene asignado, con lo cual esa memoria no este disponible. No recuerdo ahora mismo por donde anda la opcion de configuracion del heap, pero buscala y prueba a subirla, por ejemplo a 512, asi yo he solucionado algunos problemillas con la reserva de memoria usando Turbo C 3.0 bajo entorno Windows.

ibito

  • Miembro HIPER activo
  • ****
  • Mensajes: 549
  • Nacionalidad: mx
  • Se mas de C++ que lo que se de ese CSS
    • Ver Perfil
    • http://www.ibquezada.com
Re: Pantallas Virtuales
« Respuesta #11 en: Domingo 5 de Junio de 2005, 22:42 »
0
mira si te sirve esta url (q me paso enko :P)
http://www.geocities.com/programacion_graf...s_virtuales.htm
______________________________________
www.hazjuegos.com Una comunidad dedicada al desarrollo de videojuegos.

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Pantallas Virtuales
« Respuesta #12 en: Lunes 6 de Junio de 2005, 04:35 »
0
disculpen la demora pero hace mucho que no entro

juank si mal no recuerdo la int 13 es para manejo de discos y esas cosas no?
si ese es el caso escuche por ahi que el XP tiene una proteccion para bajo nivel de puertos y discos, tambien escuche que se puede desabilitar con un programa pero no es muy aconsejable....

las interrupciones de video a mi siempre me funcionaron en el xp

te digo lo de escuche porque en el unico lugar que uso xp es en los cybers porque la maquina de mi casa no lo aguanta....

espero que sirva

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Pantallas Virtuales
« Respuesta #13 en: Jueves 21 de Julio de 2005, 23:45 »
0
Cita de: "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
Hace años que ya se hacen procesadores a 64bits, y existe el xp para 64bits, ¿Me podrías dar una buena razón para utilizar 16bits cuando todo el mundo  programa POR LO MENOS a 32 bits?

Es que es frustrante el tema de los 16bits... es una de esas cosas que es mejor olvidar y no recordar nunca más...

"640K ought to be enough for anybody." Bill Gates, 1981