Les cuento mas o menos como fue el desarrollo: Yo no tenia disquetera, tenia datasete. Con esto se pueden dar una idea que no tenia un entorno de desarrollo muy bueno, porque en casete no se puede trabajar muy comodo que digamos (este juego grabado sin un loader especial, tarda como 10 minutos en cargarse en casete, tal vez no tanto, pero el que conoce como graba el sistema operativo de la C64 sabe de que hablo,parece una eternidad). Por supuesto que no tenia un ensamblador, de hecho este programa no esta escrito en assembler, sino en lenguaje de maquina, que puede parecer lo mismo, pero no. El ensamblador es mas amigable, manejable por humanos, tiene etiquetas, comentarios, macros (no se si el de la commodore tenia macros), resuelve problemas muy engorrosos como las direcciones de memoria, saltos,.... Yo programaba directamente en hexadecimal usando el editor hexa del cartucho (el fast load, no se exactamente el modelo que era, lo compre por error en Atarilin creyendo que me servia para otra cosa, y me termino siendo muy util para el assembler). El cartucho tenia un debug como el de DOS, muy basico, que solo listaba en assembler, pero para escribir era todo en hexa. Los codigos de las instrucciones para cada modo de direccionamiento las sacaba de una tabla al final de “como programar su commodore 64-2” de F.Montiel de paraninfo (libro que no se si me fue tan util en general), pero despues de un tiempo me las aprendi de memoria las mas usadas. En resumen, entre el 6510 y yo no habia nada, hablabamos de igual a igual.... Bueno, no tan asi porque aunque hacia programas bastante complejos, habia cosas basicas que no conocia, y con basicos me refiero a la pila y los flags, nada menos!!. Ignorando que podia hacer Push y Pop de un registro a la pila para guardarlo, tenia por cada rutina direcciones de ram para guardar los registros temporalmente, y para comparar si un numero era mayor o menor, como no conocia el flag de carry, hice un grupo de rutinas muy complejas para hacer algo muy basico del micro (si no conoces los flags del micro, programa en Logo, no en assembler!!!), para comparar la igualdad si sabia que BEQ saltaba cuando era igual, pero no conocia el fundamento y por eso no le podia sacar mucho provecho para optimizar en muchos casos. En resumen, no hay codigo fuente, el codigo fuente es el propio juego, porque nacio y morira en binario. ------------- Oh No! Que horror!! suprised.png Hace como 8 años (como pasa el tiempo!) , más o menos cuando entré al foro, me había agarrado una desesperacion por rescatar a este juego que existía solamente en un cassette que tenía yo, en una sola copia. Me había quedado la idea de que esto era mi gran legado a la humanidad y estaba por desaparecer. Probé de todo para intentar pasarlo a la PC y nada funcionaba y al final, ya totalmente enagenado, me hice una placa con un PIC que interpretaba lo que leía el datassette, previo aprendizaje de su formato de transmision. Despues tuve que encontrar la forma de decodificar el compresor, (supongo que era el del Fast Hacken) porque los utilitarios no lo podían reconocer y no podían limpiar los datos para generar un TAP válido. Si esto no funcionaba la parte siguiente de mi plan era cargarlo en la C64 y de alguna manera mirar el dump de memoria y de ahí tipear byte por byte de lo que leía en la PC.... por suerte no hizo falta llegar a tanto. Despues de todo eso pude probar el juego, mi gran obra maestra y .... era una reverenda #$&%#&$#$. Ahora despues de 8 años sin verlo ... me parece peor!!!! que garrón, para eso tanto trabajo, en los 90 para programarlo, 15 años despues para recuperarlo y ahora 8 años más tarde esta pobre gente que se puso a traducirlo!! Algunas aclaraciones: No tenía 12 años cuando hice el juego, es del (aprox) 1993 y tendría 15 años. Despues me pasé a la PC porque ya nadie tenía Commodore y me empezaba a preocupar mi futuro y me parecía que con un juego de PC iba a alcanzar el éxito seguro... todavía no pasó pero en una de esas uno de estos días ... Este juego fue programado y probado en mi C64 que es NTSC pero con el cristal modificado ligeramente para funcionar en un televisor PAL (o pseudo PAL, tocando el vertical), así que el timming que se tomó de referencia es cualquier cosa. No sabía lo suficiente del funcionamiento del VIC II como para hacer el scroll bien, esperando la señal de VBlank antes de modificar el contenido de la pantalla, así que probablemente tomara como referencia un timer para hacer el scroll y ese timer es único para mi Commodore 64 así que no va a andar bien en ninguna otra máquina. Tal vez sí estaba esperando hacer el scroll en determinada línea (sabía como hacer el efecto de las rayas que se movían en pantalla) pero lo hacía en una línea que en mi máquina le alcanzaba el tiempo y en otras no, aunque en las PAL debería tener más tiempo por cuadro, así que.... ni idea, pero la pantalla se mueve, que más quieren? El juego está escrito en Lenguaje de Máquina, no assembler, porque ingresaba los códigos hexadecimales de cada instrucción del microprocesador 6510 directamente en la memoria. Las rutinas las escribía en papel (en los márgenes de otras cosas, ni siquiera en páginas dedicadas) e ingresaba los bytes uno a uno en direcciones de memoria específicas. Por esa razon el programa está lleno de huecos: no podía insertar código nuevo y desplazar el resto porque cada código solamente funcionaba en una direccion especial (y no sabía como desplazar la memoria por otra parte). Dejaba espacio en blanco entre distintas rutinas por si crecía mucho, así tenía margen. Los sprites también los dibujaba en papel y luego calculaba los valores (1 byte 4 pixeles de 3 colores + 1 transparente) y despues los ingresaba en hexadecimal. Estos datos tambien los ponía en direcciones específicas y por eso hay huecos de memoria por esa razón, además de los niveles en sí mismos que también, como todo en este tipo de programacion, solamente podía existir en una direccion de memoria en particular. Para codificar los niveles creo que usaba 1 byte por bloque (de 4 caracteres de ancho?) para indicar altura y tipo (inclinado para un lado, para el otro, liso, o nada) creo que 4 bits para cada cosa. Para indicar los objetos en los niveles seleccionaba el tipo de sprite, si era doble ancho o alto, y tenía unos parametros de movimiento (desde, hasta y velocidad). Si el objeto estaba fijo las dos posiciones eran las mismas, aunque en alguno quedaron ligeramente distintos y tiembra un cacho. Para calcular estos bytes con la informacion de los niveles escribí un programa en GWBasic en mi XT, creo que fue la primera herramienta de desarrollo que hice. La melodía (A Hard Day Night) la saque de un programa para tocar canciones de los Beatles (no se como se llamaba, alguien lo tiene?). Como solamente tenía la melodía y me quedaban 2 canales, probé ponerle un acompañamiento en otra voz y me parecío que quedaba genial..... La tercera voz debería tener algún sonido pero alguna vez tenía que terminar el juego y algo había que sacrificar. No conocía en aquel momento del funcionamiento de un microprocesador, realmente no había leido de programacion en assembler, solamente sabía que poniendo determinadas instrucciones (sacadas de algunas revistas Drean Commodore, K64 y un librito que tenía que era muy poco claro) hacía determinada operacion, pero no conocía detalles básicos como la pila de llamadas, ni los flags. Eso se nota mirando el código por el simple hecho de que cada vez que tengo que guardar el valor de A siempre se guarda en una direccion de memoria y nunca se aprovecha la pila. Como no conocía el flag de Carry, para comparar 2 valores y ver si uno es mayor que el otro hacía una serie de operaciones raras que una vez funcionaron no se cómo, tal vez probando de casualidad terminé usando la instruccion que usa el flag de Carry, pero me acuerdo que era algo medio "mágico". Si estos tipos estuvieron mirando el código de este juego no habrán entendido nada de tan raro que debe estar todo ahí!! La rutina de colición con los enemigos era "mágica" y la craqueron, tal vez no usaba magia real y simplemente yo no la entendía.... Tengo que limpiar mi nombre y hacer un juego para C64 ahora que sí se cómo funciona y ya se programar! hace unos años me puse y arme algunas cosas a nivel técnico, pero lo avandoné por falta de tiempo. Uno de estos días, cuande termine alguna de las tantas cosas que tengo que terminar, me pongo a hacer algo decente para, ahora sí, pasar a la inmortalidad... aunque en las últimas décadas estuve pensando un poco en el tema y me parece que no se logra la inmortalidad con jueguitos de C64, pero bueno, es lo que más o menos se hacer! Saludos MARCOS