Making of: La Abadía del Crimen, para PCW


A petición popular, intentaré contar de forma poco técnica el making of de la Abadía (la técnica me la reservo para mi blog).

Mi idea era partir de la versión original, la de CPC 6128, e intentar adaptarla haciendo la menor cantidad posible de cambios. Así que me surgió la pregunta: ¿y si uso el propio binario y parcheo encima? Reto aceptado.

El PCW tiene más memoria de ser necesaria (aunque no es el caso), un sistema de paginado mucho mejor, puedo redirigir el sonido (PSG) a la interfaz DK’tronics, y gracias a la flexibilidad de su sistema de vídeo puedo hacer un modo de video modificado 512x192 (equivalente a 256x192 en resolución, la de la Abadía) que me ocupa unas 14 KBs, y por lo tanto entra en una página de memoria (y además, centrando por hardware se puede hacer compatible tanto PAL como NTSC).

Así que me puse manos a la obra; extraje el contenido directamente de las pistas del disco original, le di la vuelta (pues carga de arriba abajo, curiosamente) y lo dividí en sus páginas de 16 KBs. Aunque hay un desensamble de la Abadía, preferí hacer el mío propio con el IDA porque su salida es directamente ensamblable de ser necesario, identifica funciones, pone etiquetas, bloques de datos, etc. Para ensamblar uso Pasmo, con el cual y haciendo un uso creativo de INCBIN y ORG se pueden generar directamente las páginas de memoria ya parcheadas.

A partir de ahí sólo queda montarse un entorno de desarrollo automatizado (me basta un doble click para que ensamble, modifique, integre todo en un archivo DSK y me lance en emulador en modo de pruebas con el mismo insertado y arrancado), y hacer un cargador EMS (como Ópera) para cargar, poner todo en su sitio (el mismo que en el caso CPC), mostrar la pantalla de carga, inicializar el tema video y algunas otras cosas hardware para que se parezcan más a un CPC; y finalmente saltar al juego.

Gracias al emulador (puedo controlar uso de instrucciones, rango de puertos, memoria, etc.) y a búsquedas binarias se pueden localizar fácilmente las rutinas que tocan directamente el hardware. Se cambia la gestión de interrupciones, memoria, sonido, teclado y las gráficas (no os hacéis una idea de la cantidad de ellas que hay) por ese orden. Y con las gráficas, primero hice las del pergamino y luego las del juego.

Especial mención requieren las gráficas, pues la memoria de video del PCW es tal que bloques de pixeles adyacentes no tienen direcciones de memoria adyacentes, y eso cuesta tiempo si queremos conservar los formatos internos de CPC. Además hay que tener en cuenta la paleta, pues no esta no está ordenada por luminosidad; al final remapeo directamente los colores. Por todo ello es que deben ser reescritas enteras.

Todo esto es algo que cambiaré en la versión final para hacerla más rápida, aunque no ha quedado demasiado lento gracias a usar un par de truquillos.

Finalmente decir que salvo los parches aplicados y la eliminación del debugger interno que trae, la versión es esencialmente la de CPC. La cual, por cierto, se ve que internamente es un prototipo pues quedan cosas por pulir y un montón de rutinas de depuración (detener a Adzo, pasar las horas...); sin embargo lo importante está bien programado, y mención especial merecen, en mi opinión, las rutinas que interpretan el dibujo de la abadía (es una especie de máquina virtual), y el uso que hacen de la pila.

En definitiva, ha sido un trabajo entretenido y espero poder seguirle dedicando el tiempo que se merece.

4 comentarios: