Documentos de Académico
Documentos de Profesional
Documentos de Cultura
achainya@gmail.com
Escritorio
Cerrar sesión
Buscar
Ensamblador 8086 Buffer Doble
Te encuentras en la serie de "Ensamblador 8086 Modo Gráfico 13h": Seguidores (67)
Siguiente
En este último post de la serie, explicaremos la técnica de buffer doble para pintar en la
memoria de gráficos y comentaremos algunas posibles mejoras al código. Como
platicábamos en el post anterior, si escribimos continuamente al área de memoria, puede Seguir
suceder que versiones incompletas de nuestra imagen sean desplegadas. La técnica de
buffer doble consiste en reservar un área de memoria del mismo tamaño de nuestra
memoria de gráficos, en nuestro caso de 64,000 bytes (320x200); y pintar nuestros pixeles Entradas populares
en este buffer. Una vez que tengamos nuestra imagen final lista, entonces copiamos
Cómo evaluar transformadas de
nuestro buffer al área de memoria de gráficos. Esto minimiza el tiempo en el que estamos
Laplace utilizando Wolfram Alpha
escribiendo directamente al área de gráficos y también el parpadeo. El siguiente video
muestra el resultado final. Cómo evaluar integrales múltiples
utilizando Wolfram Alpha
►
2019
(7)
►
►
2016
(1)
►
►
2015
(4)
►
►
2014
(7)
►
►
2013
(9)
►
▼
2012
(25)
▼
Reservar Memoria ►
octubre
(1)
►
►
septiembre
(1)
►
Usamos la interrupción 21h con el servicio 48h para reservar memoria dinámicamente para
el buffer doble, el registro bx contiene la cantidad de memoria deseada en bloques de 16 ►
agosto
(1)
►
memoria dinámica en las siguientes referencias: referencia 1 y referencia 2. La variable Ensamblador 8086 Buffer
vram guarda la dirección inicial del buffer doble. Ahora en el código, en lugar de escribir a la Doble
dirección A000h (memoria de gráficos), escribimos al buffer doble (vram). DOSBox autoexec
Es importante notar que como reservamos memoria dinámicamente al momento de ligar los Ensamblador 8086 Moviendo
imagen BMP
archivos (link) es necesario indicar cuanta memoria extra utilizará nuestro programa en
tiempo de ejecución, es por ello que usamos la opción /link /cp:4000 en el comando ml del Ensamblador 8086 Creando
archivo ensambla.bat. El parámetro 4000 corresponde a la cantidad que solicitamos con la módulos
interrupción 21h, servicio 48h (4000 x 16 = 64,000 = 320 x 200). ►
mayo
(1)
►
►
abril
(5)
►
Transparencia ►
marzo
(2)
►
►
enero
(4)
►
ignoramos los pixeles cuyo valor sea cero, que corresponde en este caso al color negro de
►
2010
(67)
►
Posibles Mejoras
Es notorio que la pelota se mueve lentamente, esto puede deberse a que estamos
haciendo mucho procesamiento innecesario. En cada ciclo del programa (1) abrimos y
leemos dos archivos (uno para la imagen de fondo y otro para la imagen de la pelota), (2)
escribimos dos veces a la paleta de colores, (3) escribimos las dos imágenes al buffer y (4)
copiamos el buffer doble a la memoria de gráficos. Los puntos 1 y 2 sólo son necesarios al
inicio del programa.
Para el punto 1, podemos modificar el método mostrar_bmp (en libgraf.asm) para que abra
el archivo, reserve memoria dinámica y guarde la imagen en esta memoria. El método
mostrar_bmp arrojará como resultados el ancho, el alto y el apuntador a los pixeles de la
imagen. De esta forma, en nuestro ciclo principal del programa trabajaremos con
información en RAM y no tendremos que abrir continuamente archivos, lo cual es un
proceso que consume mucho tiempo.
Con respecto al punto 2, estamos asumiendo que todas las imágenes usadas en el
programa utilizan la misma paleta de colores. En caso de que no sea así, algunas
imágenes podrían lucir extrañas. Hasta el momento, las imágenes que hemos guardado
con Paint parecen tener una paleta común (usamos el programa pixelformer para observar
la paleta de colores de las imágenes). Habría que modificar la función mostrar_bmp para
que reciba un parámetro que indique si deseamos actualizar la paleta de colores con la
paleta de colores de la imagen.
Aún así, en cada ciclo del programa estamos copiando al menos 64,000 bytes del buffer
doble al área de memoria de gráficos (función copiar_buffer en libgraf.asm). Creo que
resultaría interesante explorar otros modos de video, como el que menciona la siguiente
página, que ya tiene soporte directo para un buffer doble y en donde es posible cambiar los
buffers con pocas instrucciones.
Publicado por
Antonio
en
7/24/2012
Etiquetas:
ensamblador,
graficos
No hay comentarios:
Publicar un comentario
Escribe tu comentario
Suscribirse a:
Enviar comentarios (Atom)