User Tag List

Página 4 de 4 PrimerPrimer 1234
Resultados 46 al 52 de 52

Tema: Programando en MSDOS con VGA

  1. #46
    Fecha de ingreso
    Sep 2006
    Mensajes
    4,454
    Agradecer
    549
    Agradecido 477 veces en 354 posts
    Mencionado
    21 Post(s)
    Tagged
    0 Tema(s)
    ¿No hay manera de saber por donde va el barrido de pantalla? Aunque lo ideal seria usar doble buffer.

    En la maquina del robotron original, en vez de ir por sprites tenían un frame buffer y un blitter parar dibujar los sprites en cada frame. Para que no parpadeara ni tener que usar un doble buffer (mas memoria => mas caro) tenían la pantalla dividida en dos partes, al principio de cada frame borraban y dibujaban los sprites de la mitad inferior de la pantalla, cuando el chip de video llegaba a la mitad de la pantalla, se generaba una interrupción y se ponían a dibujar los sprites de la parte superior.

    En verdad para un frame dado estas viendo que los sprites de la parte superior corresponden al frame anterior y los de abajo al actual, pero importa poco si consigues moverlos en un frame.
    Última edición por swapd0; 23/11/2018 a las 02:53
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  2. #47
    Fecha de ingreso
    Oct 2012
    Mensajes
    165
    Agradecer
    1
    Agradecido 60 veces en 23 posts
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Cita Iniciado por swapd0 Ver mensaje
    ¿No hay manera de saber por donde va el barrido de pantalla? Aunque lo ideal seria usar doble buffer.

    En la maquina del robotron original, en vez de ir por sprites tenían un frame buffer y un blitter parar dibujar los sprites en cada frame. Para que no parpadeara ni tener que usar un doble buffer (mas memoria => mas caro) tenían la pantalla dividida en dos partes, al principio de cada frame borraban y dibujaban los sprites de la mitad inferior de la pantalla, cuando el chip de video llegaba a la mitad de la pantalla, se generaba una interrupción y se ponían a dibujar los sprites de la parte superior.

    En verdad para un frame dado estas viendo que los sprites de la parte superior corresponden al frame anterior y los de abajo al actual, pero importa poco si consigues moverlos en un frame.
    No tengo ni idea... Es tan complicada la VGA.

    Pero por ejemplo en el menú, si que conseguí encontrar un sample que usa interrupciones para mover solo el logo, y dejar fijo el resto.
    Se llama "split screen", y utiliza un registro que sabe en que linea está dibujando para partir la pantalla.

    Lo ideal sería empezar a dibujar los sprites a partir de la linea 32 o algo así, y haría el mismo efecto que en el robotron, pero no tengo ni idea de como se hace, voy a ver si me entero de como hace el split, porque prácticamente lo copie entero de un sample sin mirar jaja..

    Doble buffer no quería utilizar porque habría que actualizar toda la pantalla en vez de solo los bordes y los sprites, y ya iria mucísimo mas lento, como la mayoria de juegos comerciales.

  3. El siguiente usuario agradece a mills332 este mensaje:

    josepzin (23/11/2018)

  4. #48
    Fecha de ingreso
    Oct 2012
    Mensajes
    165
    Agradecer
    1
    Agradecido 60 veces en 23 posts
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Bueno aquí está portado al "modo x", 320x240 60 Hz.

    No puedo probarlo en una vga real, pero si en PCem, que es bastante preciso, el vídeo está capturado del emulador, corriendo con un 8086 a 8 MHz, con una VGA ISA de 8 bit.



    El código y la demo aquí como siempre: https://github.com/mills32/Little-Game-Engine-for-VGA
    Última edición por mills332; 12/12/2018 a las 03:02

  5. Los siguientes 2 usuarios agradecen a mills332 este post:

    JoJo_ReloadeD (12/12/2018),swapd0 (12/12/2018)

  6. #49
    Fecha de ingreso
    Sep 2006
    Mensajes
    4,454
    Agradecer
    549
    Agradecido 477 veces en 354 posts
    Mencionado
    21 Post(s)
    Tagged
    0 Tema(s)
    IIRC el modo x permitia tener varias "paginas" o pantallas, así que podrías usar doble buffer y evitar el parpadeo.

    El scroll al principio debería correr mas para dejar al personaje como mínimo en el centro de la pantalla, es un fallo que tienen la mayoría de los juegos con scroll.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  7. #50
    Fecha de ingreso
    Nov 2005
    Ubicación
    Excartagenero
    Mensajes
    17,598
    Agradecer
    2,611
    Agradecido 2,215 veces en 1,490 posts
    Mencionado
    185 Post(s)
    Tagged
    0 Tema(s)
    Entradas de blog
    1
    Que bien se mueve... que suave.

  8. #51
    Fecha de ingreso
    Oct 2012
    Mensajes
    165
    Agradecer
    1
    Agradecido 60 veces en 23 posts
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Cita Iniciado por swapd0 Ver mensaje
    IIRC el modo x permitia tener varias "paginas" o pantallas, así que podrías usar doble buffer y evitar el parpadeo.
    Claro, pero es una decisión difícil, si uso doble buffer, limito el scroll a horizontal.

    Esta imagen la hice para representar donde están las cosas en la VRAM:
    Nombre:  VGA_MEM_MAP.png
Visitas: 420
Tamaño: 14.7 KB

    Si uso la "segunda" página, la parte gris, adiós al scroll vertical.

    Cita Iniciado por swapd0 Ver mensaje
    El scroll al principio debería correr mas para dejar al personaje como mínimo en el centro de la pantalla, es un fallo que tienen la mayoría de los juegos con scroll.
    Totalmente cierto, lo tenia pensado pero lo olvidé, de todas formas solamente hay que cambiar un valor de una variable .

  9. #52
    Fecha de ingreso
    Sep 2006
    Mensajes
    4,454
    Agradecer
    549
    Agradecido 477 veces en 354 posts
    Mencionado
    21 Post(s)
    Tagged
    0 Tema(s)
    Se puede hacer scroll vertical si usas una pantalla extra y usas este buffer de tres pantallas como un buffer circular.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

Página 4 de 4 PrimerPrimer 1234

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •