El Descubrimiento de America

Dos programas que ocupan LAS MISMAS direcciones en momentos distintos, y por eso son cinco listados y no uno; una segunda parte que transcurre dentro de un plano de la carabela de 128x52 baldosas; y 7.564 bytes que no lee nadie, porque la cinta graba bloques de tamano fijo pase lo que pase.

Gema Software / OMK Software - (c) 1987 - Cinta, 66.371 bytes - MSX1 - 64 KB de RAM - Volcado ac7b7800...

Aqui no hay ninguna captura. Todas las imagenes estan dibujadas desde los bytes de la cinta, ejecutando en Python las mismas rutinas de volcado que corre el Z80. Los listados y las cifras se reproducen con make, y el reensamblado devuelve la cinta entera byte a byte.

La cinta en cifras

100 %de la cinta explicado
733rutinas con nombre
26,7 %de los listados comentado
15.504bytes de codigo
50.512bytes de datos
0bytes sin identificar

Lo que aparecio al desmontarlo

0xD300 no es codigo: es un puntero

El fichero CARGA ocupa de 0xC000 a 0xD3DF, pero su direccion de ejecucion es 0xD302, no 0xD300. La razon esta en esos dos bytes: valen 69 D3, o sea la palabra 0xD369, que es el bucle que lee un bloque de cinta.

La primera parte del juego termina con ld hl,(0xD300) / push hl / ret en 0x5CC2, y asi vuelve al cargador a pedir la segunda sin llevar la direccion escrita en su propio codigo. El cargador sobrevive a los dos programas, porque ningun bloque de cinta pasa de 0xD2FF.

Cinco listados para un juego, porque los dos programas viven en las mismas direcciones

La cinta trae cuatro ficheros: una linea de BASIC, el BIN CARGA, y dos bloques sin cabecera de 30.472 y 30.467 bytes. Esos dos no los lee la BIOS: los lee a mano el bucle de 0xD369 con TAPION y TAPIN, byte a byte, y los reparte en tres bytes de sincronia, 0x2400 bytes a 0x4000 y 0x5300 bytes a 0x8000.

Las dos mitades del juego ocupan por tanto exactamente las mismas direcciones en momentos distintos. Por eso el proyecto son cinco listados y no uno: carga, p1bajo, p1alto, p2bajo y p2alto.

La segunda parte transcurre dentro de la carabela

Aqui no hay pantallas: hay un corte longitudinal del barco de 128 x 52 baldosas -1024 x 416 pixeles-, con la cubierta, tres mastiles con sus velas y sus escalas de jarcia, y tres crujias de camarotes y bodega por debajo.

Los 0x1A00 bytes van de 0x9000 a 0xA9FF, y lo que dice que el ancho es 128 es el paso de 0x80 entre filas del bucle de 0x4285. El juego recorta de ese plano una ventana de 32x24 con scroll en las dos direcciones.

Lo que compras se ve estibado en la bodega

Las cinco mercancias -agua, vino, comida, madera y tela- se compran en el almacen del muelle gastando una unidad de las dieciseis de DINERO. Pero el numero no se queda en un contador: la rutina de 0x4F60 de la segunda parte estiba la carga en la bodega, un monton por mercancia y tantas piezas como unidades queden.

Dibujadas, las baldosas de cada monton son toneles de duelas (0xBF-0xC4), sacos atados (0xB9-0xBE), tablones apilados (0xC6-0xC8) y rollos de tela (0xC5, 0xC9 y 0xCA).

7.564 bytes que no lee nadie, y uno de ellos es una foto de la memoria

La cinta graba bloques de tamano fijo -0x2400 y 0x5300 bytes- pase lo que pase, pero el programa de la primera parte acaba en 0x5F9F y el de la segunda en 0x5C3F. Detras se grabo lo que hubiera en memoria. Son 7.564 bytes de 66.016 (11,5 %) que estan identificados y contados, pero que ninguna instruccion toca; 4.534 de ellos son cola de bloque.

Uno de esos restos se puede leer: de 0xCC56 a 0xD2FF, la primera parte lleva 1.706 bytes identicos al fichero CARGA salvo un byte. Es la pantalla de carga, todavia puesta en memoria cuando se grabo el bloque.

La firma de la casa trae una errata, y esta en la cinta

Descodificada la tabla de nombres de 0xD000, en el margen derecho de la pantalla de carga se lee en vertical "OMIKRON Softwarwe", con dos w. La errata esta en la cinta, no en este desensamblado, y hay un test que la fija.

Las letras no son ASCII: son indices de baldosa, y van en dos alfabetos distintos dentro de la misma tabla (0x00-0x19 y 0x20-0x39, dos juegos para las mismas veintiseis letras), mas seis baldosas (0x3A-0x3F) para las mayusculas grandes de dos baldosas de alto con las que empiezan "El", "Descubrimiento" y "America".

Lo que dibuja la cinta

Debajo de cada imagen esta de donde sale y que se esta viendo.

<b>La pantalla de carga</b>, montada desde la tabla de nombres de 0xD000 del fichero <code>CARGA</code>. Es la unica pieza de la cinta que nombra a la casa, y lo hace con una errata: <b>OMIKRON Softwarwe</b>, en vertical por el margen derecho
La pantalla de carga, montada desde la tabla de nombres de 0xD000 del fichero CARGA. Es la unica pieza de la cinta que nombra a la casa, y lo hace con una errata: OMIKRON Softwarwe, en vertical por el margen derecho
<b>Pantalla 0</b>, la calle del puerto de Palos: la taberna con su rotulo, el ancla, el muelle y el agua. Tabla de nombres en 0x82F5
Pantalla 0, la calle del puerto de Palos: la taberna con su rotulo, el ancla, el muelle y el agua. Tabla de nombres en 0x82F5
<b>Pantalla 1</b>: un porton claveteado entre dos casas. Tabla de nombres en 0x85F5
Pantalla 1: un porton claveteado entre dos casas. Tabla de nombres en 0x85F5
<b>Pantalla 2</b>: un patio con escalera y toneles, con un ave cruzando por la izquierda. Tabla de nombres en 0x88F5
Pantalla 2: un patio con escalera y toneles, con un ave cruzando por la izquierda. Tabla de nombres en 0x88F5
<b>Pantalla 3</b>, la iglesia: crucifijo, altar y vidriera. Tabla de nombres en 0x8BF5
Pantalla 3, la iglesia: crucifijo, altar y vidriera. Tabla de nombres en 0x8BF5
<b>Pantalla 4</b>, la sala del mapamundi, con el retrato y la mesa. Tabla de nombres en 0x8EF5
Pantalla 4, la sala del mapamundi, con el retrato y la mesa. Tabla de nombres en 0x8EF5
<b>Pantalla 5</b>, el interior de la taberna: la barra, las banquetas y un cuadro de un navio. Tabla de nombres en 0x91F5
Pantalla 5, el interior de la taberna: la barra, las banquetas y un cuadro de un navio. Tabla de nombres en 0x91F5
<b>Pantalla 6</b>, la cubierta del barco, con las jarcias y los toneles. Tabla de nombres en 0x94F5
Pantalla 6, la cubierta del barco, con las jarcias y los toneles. Tabla de nombres en 0x94F5
<b>Pantalla 7</b>, el almacen del muelle, donde se compra: se leen AGUA, VINO y COM... Es la unica que <b>no tiene tabla de nombres propia</b>: se compone recortando 32 columnas de un mapa de 64x24 que vive en 0x97F5
Pantalla 7, el almacen del muelle, donde se compra: se leen AGUA, VINO y COM... Es la unica que no tiene tabla de nombres propia: se compone recortando 32 columnas de un mapa de 64x24 que vive en 0x97F5
<b>El resumen del final de la primera parte</b>, con las siete cifras: DINERO, COMIDA, AGUA, VINO, MADERA, TELA y MARINERO. Los rotulos son dibujo, no texto
El resumen del final de la primera parte, con las siete cifras: DINERO, COMIDA, AGUA, VINO, MADERA, TELA y MARINERO. Los rotulos son dibujo, no texto
La misma pantalla con <b>cada contador de un color</b>. Como los rotulos son dibujo, cual es cual hay que medirlo: el bucle de 0x5D0C pinta las catorce cifras en baldosas SEGUIDAS a partir de la 188, y se buscan esas baldosas en la tabla de nombres de 0xC310. El paso a la segunda mitad <b>cruza la COMIDA con la MADERA</b>
La misma pantalla con cada contador de un color. Como los rotulos son dibujo, cual es cual hay que medirlo: el bucle de 0x5D0C pinta las catorce cifras en baldosas SEGUIDAS a partir de la 188, y se buscan esas baldosas en la tabla de nombres de 0xC310. El paso a la segunda mitad cruza la COMIDA con la MADERA
<b>El interior de la carabela entero</b>: 128 x 52 baldosas, 1024 x 416 pixeles, descomprimido de los 0x1A00 bytes de 0x9000-0xA9FF. Lo que dice que el ancho es 128 es el paso de 0x80 entre filas del bucle de 0x4285
El interior de la carabela entero: 128 x 52 baldosas, 1024 x 416 pixeles, descomprimido de los 0x1A00 bytes de 0x9000-0xA9FF. Lo que dice que el ancho es 128 es el paso de 0x80 entre filas del bucle de 0x4285
La <b>ventana de 32x24</b> que el juego recorta de ese plano, aqui desde la columna 50 y la fila 16. Comprobada baldosa a baldosa contra la VRAM del emulador: 768 baldosas, 0 distintas
La ventana de 32x24 que el juego recorta de ese plano, aqui desde la columna 50 y la fila 16. Comprobada baldosa a baldosa contra la VRAM del emulador: 768 baldosas, 0 distintas
<b>La carta oceanica</b>, con los tres indicadores -DIAS, ESTADO MORAL y ESTADO FISICO- y la velocidad del viento. La travesia se juega sobre 20x20 casillas de un byte (0xC98C-0xCB1B): 0 es mar abierto, 1 y 2 corrientes, y de 3 en adelante un contratiempo que se busca en la tabla de nueve entradas de 0xC968
La carta oceanica, con los tres indicadores -DIAS, ESTADO MORAL y ESTADO FISICO- y la velocidad del viento. La travesia se juega sobre 20x20 casillas de un byte (0xC98C-0xCB1B): 0 es mar abierto, 1 y 2 corrientes, y de 3 en adelante un contratiempo que se busca en la tabla de nueve entradas de 0xC968
<b>Las baldosas de la carga</b>, sacadas de la cinta y puestas en fila: toneles de duelas para el agua y el vino (0xBF-0xC4), sacos atados para la comida (0xB9-0xBE), tablones apilados (0xC6-0xC8) y rollos de tela (0xC5, 0xC9 y 0xCA). Con ellas la rutina de 0x4F60 estiba en la bodega lo que se compro
Las baldosas de la carga, sacadas de la cinta y puestas en fila: toneles de duelas para el agua y el vino (0xBF-0xC4), sacos atados para la comida (0xB9-0xBE), tablones apilados (0xC6-0xC8) y rollos de tela (0xC5, 0xC9 y 0xCA). Con ellas la rutina de 0x4F60 estiba en la bodega lo que se compro
<b>FINAL DE LA TRAVESIA</b>: la costa avistada, con el rotulo en un recuadro sobre el cielo
FINAL DE LA TRAVESIA: la costa avistada, con el rotulo en un recuadro sobre el cielo