Lo primero que se hace con un cartucho es desensamblarlo. Aqui sale basura: el punto de entrada es nop / dec h / add a,b / ld bc,09700h / illegal sequence. No es que el desensamblador falle: es que ahi no hay codigo.
La cabecera lo dice si se lee entera. INIT, STATEMENT y DEVICE a cero, y lo unico declarado es TEXT=0x8010. Eso significa "aqui hay un programa BASIC", y el interprete lo ejecuta desde la propia ROM, sin copiarlo a RAM. La unica llamada a codigo maquina del juego, USR(0) en la linea 30000, apunta a la direccion 0: pulsar STOP reinicia la maquina.
Los nueve hoyos ocupan 4.000 bytes justos, de 0xB000 a 0xBF9F, uno detras de otro. Cada uno es una lista de valores de 16 bits que la subrutina 2500 va leyendo con PEEK. Los valores van de tres en tres -x, altura, profundidad- y un valor suelto entre 30001 y 30015 es un marcador: cambia el color con el que se dibuja lo que viene detras y, de paso, desplaza el reparto en uno. Un 32000 cierra el hoyo.
El color del marcador no es decoracion: dice de que esta hecho el tramo siguiente, y con el se rellena el anterior. El orden es el mismo en los nueve:
6 el contorno exterior; su relleno es el fuera de limites
2 la calle 3 el green
1 el asta de la bandera; su relleno, con la semilla encima, es el hoyo
14 los bunkers 4 el agua
13 los arboles
El tramo de color 1 de cada hoyo son cuatro puntos: un mastil vertical de 8 de alto y una banderita triangular en la punta. Y esta plantado exactamente en la posicion que el DATA de ese hoyo declara como bandera, en los nueve.
Eso importa porque el orden de los DATA no es obvio. Cada linea trae el par, la distancia, un numero variable de semillas de relleno y la bandera - y la bandera son los dos ultimos valores, no los primeros. Se sabe porque tres cuentas distintas tienen que cuadrar a la vez, y cuadran:
PQ$ de la linea 80 y suman 36, el total que el marcador escribe a mano.Y hay una cuarta comprobacion, que viene de otro sitio del cartucho: la partida congelada en la tabla de variables (ver abajo).
Los arboles son tres tramos seguidos de color magenta: dos diagonales cruzadas y el tronco. Es decir, cuatro aristas desde las esquinas de una base de 4x4 hasta un apice a 15 de alto, mas el eje. Un abeto de alambre en cinco lineas.
Parecia el final del recorrido, y no lo es. Es donde la subrutina 4000 -la del plano cenital- deja de dibujar. Lo que va detras sigue siendo del hoyo, y la subrutina 5000 lo dibuja: dos o tres tramos con coordenadas de hasta 20.000, que son las lineas de fuga hacia el horizonte, y en el hoyo 3 una pared de 2.000x400 a profundidad 1.200: la montana del fondo. Solo se ven en perspectiva.
La linea 5166 calcula el color de cada marcador... y no lo mira nadie. La 5690 dibuja siempre en blanco (o en verde oscuro si la camara esta en el acercamiento del green). Los colores solo valen para el plano.
No hay mapa logico ni tabla de casillas. La linea 380 lleva la posicion de la bola al plano cenital del panel derecho y lee con POINT el color pintado ahi. Ese color es el terreno, y de ahi salen la postura del golfista, las penalizaciones y como bota la bola.
Por eso el plano no es un adorno: es la estructura de datos del juego, y por eso el orden de los marcadores importa tanto.
La linea 440 comprueba si el terreno vale 12 y frena la bola si es asi. Esa condicion no puede cumplirse: ningun hoyo pinta el color 12 en el plano, en ninguno de los nueve. Es codigo muerto - probablemente el rough de una version anterior, antes de que el rough pasara a ser el color de fondo, que es el 0.
Los 3.231 bytes entre el programa y los datos de campo son la tabla de variables del interprete, congelada tal y como quedo en una sesion real del juego. Ese es el truco que hace arrancar a un cartucho BASIC sin rutina INIT: la ROM trae el programa y su estado ya montado.
Se puede leer entera, y cuenta una partida: hoyo 2, doce golpes en total, once de ellos gastados en el hoyo 1. Y el puntero de lectura del campo, ZM, vale 0xB37A - que es exactamente donde empieza el hoyo 3, porque al estar jugandose el 2 su contorno ya se habia leido. HX y HZ valen la bandera del hoyo 2 con el metro de ajuste ya restado, y P vale 3, su par.
Cuatro cifras del estado congelado que cuadran con la lectura de los datos de campo, sin usar el programa para nada.
El ultimo array, C1(), empieza en 0xAFA1 y no cabe: le faltan 25 bytes, que es justo donde arrancan los datos de campo. La tabla esta cortada, y no importa, porque el interprete la rehace entera al ejecutar el DIM de la linea 20.
El programa no hace RESTORE en ninguna linea, y el puntero ZM tampoco se rebobina. Las DATA de los nueve hoyos se leen de corrido, una vez, y el campo se lee de corrido, una vez. Al acabar el hoyo 9, la linea 720 es un GOTO 720: un bucle infinito. Volver a jugar exige reiniciar la maquina, y no es un descuido del final - es que no habria manera de rebobinar aunque se saltara a la 110.
Si la bola esta en arena y eliges el putter, la linea 280 devuelve el turno al principio. Pero el principio del turno es la linea 225, que suma un golpe. Intentarlo cuesta un golpe cada vez, sin que la bola se mueva.
D2(240) se reserva en el DIM de la linea 20 y no aparece en ninguna otra linea del programa: 482 bytes de RAM apartados para nada. ZL$ se le asigna "0000" al final de la linea 70 y tampoco la lee nadie. Y el RND(1) suelto de la linea 90, ese si tiene sentido: no guarda el resultado en ninguna parte, esta para que el generador haya avanzado un numero imprevisible de veces antes de sortear el viento del primer hoyo.