• Domingo 22 de Diciembre de 2024, 13:36

Autor Tema:  Pintar Pixel En Vga Sin Tirar De La Bios  (Leído 3476 veces)

ZarkGhost<br>

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Pintar Pixel En Vga Sin Tirar De La Bios
« en: Miércoles 28 de Noviembre de 2007, 20:50 »
0
Pues eso, he hecho un pong en ensamblador, pero tengo un problemilla.

La pelota parpadea, supongo que debido a que la pinto haciendo llamadas a interrupcion de la BIOS, las cuales son muy lentas.

Con las paletas lo he solucionado pintando/borrando solo lo necesario, y casi ni se nota, pero la pelota en ordenadores antiguos / o dispositivos portatiles emulando DOS con dosbox, pues hay que forzar mucho a la maquina para que no se vea el parpadeo.


Por eso he pensao. porque en lugar de seguir parcheando/optimizando cada codigo, me hago yo la funcion pintar pixel accediendo a la memoria de video de una forma directa.

Pero he encontrao un problema, no encuentro casi nada de informacion de como hacerlo para el modo que he usado, VGA 640x480 con 16 colores. Leo de cosas de arrays auxiliares (¿paletas de colores?) y demas, pero no me entero.

Alguien podria decirme? o en su lugar, decirme donde encontrar informacion completa

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Pintar Pixel En Vga Sin Tirar De La Bios
« Respuesta #1 en: Miércoles 28 de Noviembre de 2007, 21:22 »
0
Citar
La pelota parpadea, supongo que debido a que la pinto haciendo llamadas a interrupcion de la BIOS, las cuales son muy lentas.
Si bien la bios pinta lento los pixeles el parpadeo pasa por otro lado.
Para evitarlo, debes usar alguna tecnica de dibujo, como por ejemplo "Doble Buffer"

La idea es que tienes que tener una matriz con el tamaño de la pantalla en memoria, eso sería el Buffer.
Pintas todo lo que necesitas en el buffer y luego vuelcas el buffer en la pantalla. De ese modo no aparece el parpadeo.

Aca tenés algo de info sobre como pintar sobre la memoria de video directamente(320x240@256). (del 640x480@16 no conozco buena info)
Muy buena: http://www.geocities.com/programacion_graf...13h/modo13h.htm
maso: http://www.investigacion.frc.utn.edu.ar/la...g/Intro/13h.htm

ZarkGhost<br>

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Pintar Pixel En Vga Sin Tirar De La Bios
« Respuesta #2 en: Miércoles 28 de Noviembre de 2007, 22:19 »
0
Gracias por la rapidez, llevo ya un tiempo mirandolo y sigo sin ver como.

No parpadea exactamente, sino que se ve como se pinta linea a linea la matriz asi que en este caso, aunque tambien se solucionaria como dices, es problema de la lentitud de pintar cada pixel. Y ya que lo hago en ensamblador, que mas de que vaya rapido para hacerlo funcionar decentemente en equipos prehistoricos.

Uso el modo de video 12h, que a mi entender(llevo poquito en esto) difiere del 13h. A no ser que por paleta entienda otra cosa.

A lo bruto, entiendo que para situarme en la posicion de memoria con la info del pixel, tengo que hacer Desplazamiento + posicionX + posicionY*ancho_max.

Y ya he visto,  que para hacer la multiplicacion, puedo descomponerlo haciendo
 ((Y*256) + (Y*64)*2)  

Pero ahi no se que debo colocar, el color, o la direccion a la posicion de un array"paleta?" con el color.



Bien, acabo de darme cuenta de un problemilla con el que aun no habia caido, 640x480 se sale de 16 bits.... creo que esto y la paleta es lo que me causa el problema.... si alguien sabe la solucion, que me diga.... sino, pos intentare optimizar algo mas como pueda.


Gracias nuevamente.