Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Gameloop, GetMessage y Trolls

–Los que vengan por el ASM, brínquense hasta la segunda imagen–

Como ya se habrán dado cuenta, mi malvadísima conspiración para destruir a “la industria” latinoamericana de juegos de video ha sido finalmente descubierta. Ahora mismo los grandes capitanes de empresa contemplan este mismo blog en sus computadoras equipadas con doble pantalla y multiples tarjetas aceleradoras mientras dan instrucciones a su personal de recursos humanos de ir al cuarto donde guardan todas las solicitudes de empleo que les llegan y arrojar por el WC todas aquellas que sospechen que han sido enviadas por mi. De hecho algunos tienen la extraña fantasía de que alguna vez fui a tocar a su puerta y ellos con toda la pena del mundo me dijeron que no me podían contratar. Ahórrense la molestia de buscar porque yo nunca he enviado ni un solo currículum a ninguna empresa y mucho menos a una desarrolladora (o maquiladora en algunos casos) de videojuegos de latinoamérica y lo mas cerca que he estado de una de estas empresas ha sido como publico en una conferencia que dieron dos de sus empleados.

occvideojuegos

Es mas, si realmente me importara ser un buen empleado no hubiera invertido media vida aprendiendo cosas como la programación gráfica y las matemáticas relacionadas con esta, y en lugar de ensamblador me hubiera puesto a estudiar alguno de esos paquetes que se ponen de moda cada seis meses y ya tendría mas certificaciones en manejo de paquetes que bots dandome follow en Twitter haciéndose pasar por mujeres. Me habría esforzado por estudiar becado en una escuela privada para titularme “de lo que fuera” mientras pago el resto de la beca-credito bailando trabajando de noche en algun bar de mala muerte y por supuesto iría al gimnasio todos los dias y he habría hecho algunas cirugías estéticas para al final leer una buena cantidad de esos libros donde dicen como vestirse y actuar en una entrevista de trabajo para salir bien librado de los juegos mentales que el personal de reclusos humanos suele aplicar a los pobres diablos que van a arrodillarse ante ellos buscando comida.

No señor, en el remoto caso de que en un futuro caiga en la miseria y tenga la necesidad de mantener a una familia. Esto último algo verdaderamente dificil porque soy un Forever Alone, puede que vaya a pedir empleo como cualquier otro ciudadano responsable pero si eso llega a pasar de lo único que estoy seguro es que va a ser un empleo que no tenga nada que ver ni con programación ni con videojuegos porque no podría vivir con la deshonra de haber fracasado en ese ambicioso proyecto de vida. Ahora que si alguien quiere trabajar conmigo y me da un trato de igual a igual puede que si acepte ofrecer mis servicios a alguno de los nuevos estudios que comienzan a surgir de modo aislado en diferentes partes de México, sobre todo del norte. Pues muchos de estos ya tienen conciencia de eso que en este blog me refiero como “la industria” y ponen requisitos tan divertidos como el de la captura de pantalla que acompaña este párrafo. Me pregunto si para llenar ese requisito de “no haber trabajado en algún estudio” tengo que tramitar algún documento por el estilo de la carta de no antecedentes criminales.

De acuerdo, para que mis nuevos lectores de este blog entre los que se cuentan varias personas que no están leyendo esto porque les guste el ASM. Ya pueden dejar de leer y regresarse a hacer scripts y ponerle gloss a esos íconos porque al menos en esta entrada ya no voy a hablar mas de ustedes. En cambio voy a tratar un tema de ensamblador que no les interesa ni creo que sean capaces de entenderlo.

GetMessage vs Peek Message en un Gameloop

getmessageflowchart

De acuerdo, en un programa de Windows sencillo pero ligeramente mas complejo que un simple MessageBox, se tienen tres partes principales: La inicialización, el ciclo de mensajes y el procedimiento de ventana. La inicialización es donde el programa toma y carga la información necesaria para funcionar, el ciclo de mensajes es una estructura cíclica que se encarga de procesar todos los mensajes que el sistema operativo le envía al programa y el último es el proceso de ventana o Window Procedure que es el mas extraño, pues se trata de una función que el propio Windows se encarga de llamar por nosotros y es en donde le decimos que es lo que debe de hacer con los mensajes que le llegan. De momento voy a pasarme por alto la fase de inicialización y voy a explicar como funciona un ciclo de mensajes sencillo con GetMessage.

Un programa puede tener mas de un ciclo de mensajes pero tradicionalmente este se escribe al final del Winmain, que es el módulo principal del programa, inmediatamente después de la inicialización. Puede encontrarse porque a su inicio hay una etiqueta que indica el ciclo. En la imagen de la izquierda puede verse un diagrama de flujo de un ciclo de mensajes de Windows con GetMessage. Los cuadros en azul son funciones del Windows y los grises son rutinas del usuario. El ciclo primero llama a la función GetMessage, cuando esta es llamada se queda esperando hasta que Windows le envía un mensaje. Este mensaje queda almacenado en una estructura de mensajes que hemos definido en la etapa de inicialización. Sin embargo hay un mensaje en especial que lanza una señal diferente a los demás, el mensaje de salida. Cuando Windows le ordena a la aplicación cerrarse, GetMessage regresa en el acumulador el valor de cero, entonces lo primero que debemos hacer es probar si luego de llamar a GetMessage tenemos un cero en EAX, de ser así saltamos fuera del ciclo de mensajes y terminamos el programa. De lo contrario a TranslateMessage y DispatchMessage en sucesión con la posición de la estructura de mensajes como único argumento. Este ciclo tan simple puede volverse muy complicado por la manera de efectuar los saltos del ensamblador. Lo común es usar un salto incondicional luego de DispatchMessage que caiga poco antes de GetMessage y usar un salto condicional (o una combinación de salto condicional con incondicional si el código es demasiado grande) para salir del ciclo en caso de que GetMessage retorne un cero en el acumulador. Ahora vamos a ver las ventajas e inconvenientes de este modo de procesar los mensajes.

Cuando procesamos los mensajes con GetMessage, la aplicación se sienta a esperar a que el sistema operativo le envíe un mensaje y mientras esto no sucede no puede hacerse nada mas, esto es bueno en ambientes multitarea porque el CPU puede dedicarle tiempo de procesamiento a otras aplicaciones que corran de manera simultanea. Pero en el caso de un juego, (a menos que se trate de un juego basado en turnos) esto es malo. Pues la acción se paralizaría hasta que no llegara un mensaje y volvería a detenerse cuando este acabara de ser procesado. En un juego de acción rápida existe un ciclo que debe de ejecutarse en una frecuencia tan rápida como la taza de actualización de la pantalla y si es posible hasta mas rápido. Si usáramos un Gameloop basado en GetMessage este no sería lo bastante rápido para mantener un juego de mucha velocidad y la mayor parte del tiempo estaría congelado sin hacer nada. El primer problema que hay que resolver con un Gameloop es el de procesarse lo suficientemente rápido. El segundo problema que debe de resolver un Gameloop es el de mantener una frecuencia constante sin importar en que máquina se ejecute el juego o lo que esta esté haciendo en segundo plano. En la siguiente entrada discutiremos como se usa PeekMessage para sincronizar un Gameloop y un poco sobre como mantenerlo a una frecuencia constante, porque por ahora por insultar esta nota ya me quedó muy tl;dr.

Anuncios

enero 29, 2011 - Posted by | Uncategorized | , , ,

1 comentario »

  1. “de esos libros donde dicen como vestirse y actuar en una entrevista de trabajo para salir bien librado de los juegos mentales que el personal de reclusos humanos suele aplicar a los pobres diablos que van a arrodillarse ante ellos buscando comida”

    Me recuerdas que tengo que ser libre finacieramente con estas palabras… totalmete deacuerdo contigo. Ademas de que van a arrodillarse para pedir comida, se meten en la cabeza la idea de que son “profesionales” y crean una burbuja para ellos mismos en donde se sienten “realizados profesionalmente” esa simple frase me da terror. Yo los veo como lambe-botas de los dueños y he visto como altos directivos agachan la cabeza ante los regaños de dueño de la empresa, es impresionante lo que hace el dinero y la creencia de que la unica forma de obtenerlo es trabajando en una empresa.

    Y encima, los estupidos de las universidades que recien egresados ofrecen “sus servicios” a las empresas para hacer el mismo trabajo que alguien que lleva mucho tiempo, y por mucho menos dinero… estos son los que echan a perder a la sociedad y contribuyen al gap entre ricos y pobres.

    Comentario por Puerco | mayo 19, 2011 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: