Uff!!! que fuerte!!!. No recordaba que compré esa MSX-EXTRA nº36 entusiasmado por ese artículo (aún la conservo, la acabo de encontrar) y fue bastante decepcionante. Se me había olvidado por completo, me ha venido el flash a la memoria al abrir el enlace. Ahora recuerdo que estuve largo tiempo trasteando (o mejor dicho intentándolo) con esos programas y no conseguí prácticamente nada. Como dice Manolito74 no eran ninguna maravilla, yo al menos no conseguí que funcionaran bien, no sé si por falta de conocimientos míos en aquel entonces o porque eran muy simplones y/o contenían erratas.
No había oído hablar del MT-Debug. Pero por lo que se observa en las características de la caja parece que puede visualizar y editar la memoria cuando se llama expresamente al depurador desde basic o código máquina. Es decir, parece que el cartucho no está diseñado para interrumpir la ejecución de un programa de un tercero para olisquear lo que está haciendo. Al menos es la impresión que me da, porque no lo nombra en las características principales. Pero sin tener el manual al alcance no lo podemos saber con seguridad.
Se me ocurre también que es posible que los programadores de las empresas de software que sí podían permitirse PC's con compiladores cruzados conectados al MSX con un sistema hardware de depuración como el mencionado PSD (posiblemente ese fuese el "aparatejo" del que le hablaba Borrocop a mcolom) lo aprovecharan a ratos para investigar los juegos de la competencia para averiguar como hacían ciertas cosas. En aquella época no se tenía la información tan completa del sistema y de los trucos de programación que tenemos ahora y es posible que dedicaran tiempo a hacer ingeniería inversa a ver cómo se lo montaba la competencia. Y tal vez alguno aprovechaba para, ya que estaba destripando el juego, sacar algún cargador. Quien sabe, no es descabellado. Otra opción que siempre he sospechado es que es posible que fuesen las propias empresas desarrolladoras de software las que publicasen alguno de los cargadores de sus juegos para darles publicidad. Igual que siempre me he preguntado, los mapas, trucos y demás, ¿los facilitaban las propias empresas a las revistas o se los tenían que currar ellos por sus propios medios?. Me encantaría que alguien que trabajase en esas revistas en aquel entonces contase algún día cómo se cocinaba todo eso.
En fin, a lo mejor es que simplemente como habéis comentado en aquella época había auténticos cracks del código máquina que lo leían como quien lee El Quijote y eran capaces de sacar los cargadores más complicados a pelo. Muchas veces la explicación más sencilla es la verdadera por increíble que esta sea.
Hola:
Pues a ver, me suena haber leído en alguna Entrevista (no sé si a Ramón Casillas, Manuel Montané o similar...) que al menos al principio las cosas eran como muy "artesanales". Los Mapas los hacían poniendo algún "jugón" de la época a pasarse Pantallas, otra persona las iba fotografiando y luego "montaban" el mapeado.
Hoy en día tenemos medios técnicos para casi todo pero en aquella época todo era mucho más artesanal. Mapeado, Trucos y demás pues lo dicho: gente que era muy hábil Jugando y que era capaz de terminarse todos los Juegos y descrubrir todos los entresijos... (es que hay gente que tiene una habilidad innata para jugar y terminarse los Juegos..., ¡un saludo a Araubi..!)
El tema del Desarrollo cruzado y aparatejos varios sí, seguramente todas o casi todas las Empresas los tenían pero... hay que tener en cuenta que eso no implica que todos los Programadores los usaran. Me explico... muchos Programadores eran "Freelance" y su trabajo diseñando código, gráficos, música, etc lo llevaban a cabo en su casa, artesanalmente. Luego, cada "x" tiempo... aparecían por la Oficina y se reunían para ver los Progresos, probar las cosas y tal así que esas "ventajas técnicas" que aportaba el Desarrollo Cruzado y PSD y demás al fin y al cabo lo usaban más que nada para pruebas rápidas, testeo y volcar la versión final.
Opera Soft por ejemplo, todos sabemos que al principio sacó Juegos exclusivos para MSX y Programas muy muy profesionales para MSX y MSX-2 (Ease, por ejemplo). ¿Por qué? Pues porque en aquel momento tenían un acuerdo con Philips y Philips les debió dar algo así como un Híbrido PC-MSX que facilitaba enormemente el Desarrollo. Eso sí... ese "engendro", "híbrido" o lo que fuera creo que costaba bastante pasta... así que no estaba al alcance de cualquiera.
¡Ojala en aquellos días hubieran tenido acceso a Plataformas de Soft y Hard para permitir el Desarrollo Cruzado y hubieran tenido más medios técnicos para Programar, probar y testar todo lo que hacían...! Por desgracia en la época muchos ni tenían medios, ni conocimientos y ni siquiera interés ni ganas por aprender en lo que al MSX se refiere sobre todo... En muchas Compañías había un sólo MSX (solía ser un HB-75P) y si el Juego funcionaba en ese Modelo lo daban por bueno, pero claro... luego venían los Problemas de Incompatibilidad porque en la mayoría de las ocasiones no gestionaban correctamente el tema de los Slot de Memoria. :-(
@Mustang, estos días estuve rebuscando mi material MSX-ero. Después de mi última mudanza me di cuenta que no sabía donde tenía mis Manuales del RSC por ejemplo (que los imprimí en Formato "Revista"...) Así que me puse a buscar y a buscar, revolver montones de cosas... y por fortuna pude localizar todo (y más cosas incluso de las que recordaba...) Me encontré con un Cuaderno que tenía en la época y donde anotaba cosillas sobre el MSX, pruebas que hacía y demás... Y vi varias Páginas que escribí con las Pruebas que hice con el "Busca Pokes", sobre Juegos de Konami y veo que sí que algún Poke encontré, jajaja.
También me llamó la atención, aunque más o menos lo recordaba, lo de que a la hora de visualizar los textos en Pantalla algunos Progrmas los "modificaban". Me explico... Si a la letra "A" normalmente le corresponde el Código 65, a la "B" el 66 y así sucesivamente... en algunas ocasiones los Programadores cambiaban esa "codficiación" y le asignaban por ejemplo a la "A" el 30, a la "B" el 31, etc, etc, etc así que si hacías un volcado de memoria estándar NO PODÍAS VER NADA. ¿Cómo podías descubrir entonces esa nueva "codificación", ese nuevo "alfabeto" que usaban las Compañías...? Pues muy fácil... Intentabas buscar un mensaje en el Código que sabías que aparecía en el Juego, por ejemplo "GAME OVER". Si ves que no aparecía ni ese texto ni nada legible es que los Programadores habían alterado el código-alfabeto usado. Así que lo que hacías era buscar una Cadena de Caractéres que cumpliera el Patrón que queríamos. Por ejemplo para buscar la Cadena "GAME" en Condiciones normales sabemos que:
G=71
A=65
M=77
E=69
Así que había que buscar una Cadena que cumpliera que: la diferencia entre el segundo carácter y el primero fuera 6, entre el tercero y el segundo fuera 12 y entre el cuarto y el tercero fuera 8.... La verdad es que no sé muy bien como lo hice, supongo que haría algún Programa sencillito para buscar esos "patrones" y luego algún otro Programa cutre para visualizar el Texto con ese "alfabeto alterado siguiendo esa codificación"...
En fin.... cosas que hacía uno cuando era un adolescente y se aburría mucho... (y lo más grave que todo eso lo hacía usando ese Dispositivo de Almacenamiento Externo llamado Cassette.... que era lento, lento, lento...) (¡lo que hubiera dado por tener una Disquetera en la época...!) :-(
Saludetes. ;-)
Es decir, parece que el cartucho no está diseñado para interrumpir la ejecución de un programa de un tercero para olisquear lo que está haciendo. Al menos es la impresión que me da, porque no lo nombra en las características principales. Pero sin tener el manual al alcance no lo podemos saber con seguridad.
Tiene toda la pinta de que es como dices, y supongo que estaba bien para añadir pequeñas rutinas en CM y llamarlas desde el BASIC. ¡Ójala hubiera tenido yo algo así!
Se me ocurre también que es posible que los programadores de las empresas de software que sí podían permitirse PC's con compiladores cruzados conectados al MSX con un sistema hardware de depuración como el mencionado PSD¿los facilitaban las propias empresas a las revistas o se los tenían que currar ellos por sus propios medios?. Me encantaría que alguien que trabajase en esas revistas en aquel entonces contase algún día cómo se cocinaba todo eso.
¡Sería interesante saberlo! Esperemos que algún día alguien lo cuente en alguna entrevista. En el caso de empresas, creo que no hay mucho secreto. Seguro que tenían varios ordenadores de 16 bits o PCs. Incluso con si uno tiene dos MSX 1, la cosa es más manejable. Puedes ejecutar en uno y ensamblar en el otro. Y algunos MSX 1 (el SVI-738 tiene un puerto serie RS-232, por ejemplo). Supongo que irían escribiendo las rutinas en el PC poco a poco, pasándolas por el puerto serie, y luego comprobando que iban bien en la máquina real. Y luego lo debían juntar todo.
De todas formas, esta mañana he visto la luz y creo que ya tengo la solución al problema de cómo debían hacer los cargadores en MSX. El problema es lo que hemos estado discutiendo, que aunque puedes tener depuradores, no parece que haya una forma fácil de interruptir el programa y ver qué está haciendo (a no ser que te hagas un cartucho tú mismo y generes la interrupción).
Pensándolo un poco esta mañana me he acordado de que para Spectrum sí que tienes el Multiface, y como dice la Wikipedia: "and Lifeguard, a program for analysing the memory of a game during play in order to identify which memory locations should be changed to aid cheating".
Aunque claro, el Multiface no estaba para MSX. Pero al final muchos de los juegos eran conversiones directas del Spectrum, así que una vez que habías conseguido averiguar qué posiciones guardaban las vidas o lo que sea, podías desensamblar el código en el MSX o directamente buscar la secuencia de bytes en el programa y escribir el cargador para que haciera su magia. Si ya sabes lo que buscar, es mucho más fácil e incluso ya puedes ponerte a desensamblar. Hacerlo completamente a ciegas no me parece una buena estrategia y no creo que lo hicieran así nunca.
Otro juegos como Arkanoid no eran conversiones directas de Spectrum, así que no podrían hacerlo así. Pero supongo que esta técnica debían funcionar en más del 90% de los juegos de MSX.
Si no, tampoco me parece descabellado crearse uno mismo un cartucho, generar la interrupción, copiar los datos por puerto serie al PC, y ver qué posiciones de memoria han cambiado. Imagino que no todo el mundo era capaz de hacerlo, pero tampoco es tan complicado como para que nadie lo intentara.
Con lo que sabemos ahora, creo que si estuviéramos en la época podríamos hacerlo facilmente, si tuviéramos más de un ordenador.
Qué barbaridad Manolito74, eres una enciclopedia con patas del desensamblado de juegos del MSX . Qué curioso lo de la codificación de textos, no imaginaba que los programadores se tomaban tantas molestias para complicarle la vida a los buscadores de pokes. Mensajes en el código para quien lo analice, textos codificados… muchas gracias por la información, me encanta saber esas cosas. Es posible que tenga razón mcolom con lo de las conversiones de spectrum. Compartían gran parte del código, con lo cual es posible que analizar un cargador de spectrum te ayudase a buscar el cargador de MSX para el mismo juego. De hecho, conocer la operativa del cheat para spectrum y la del Jet Set Willy para MSX me ha facilitado a mí enormemente la tarea de buscar los códigos del Manic Miner, pues más o menos sabía lo que tenía que buscar y dónde. De no haberlo sabido la cosa no hubiera sido tan sencilla aun con los medios de hoy día. Así que no es ninguna tontería. A ver si saco otro rato para analizar los cargadores de algunos juegos de spectrum y de su conversión a MSX a ver si tiene suficiente fundamento esa teoría. Se me acumula el trabajo...
Yo creo que incluso se podría construir un cartucho depurador para interrumpir un juego sin necesidad de cruzarlo con otro ordenador. El cartucho podría mandar una interrupción al Z80 cada X tiempo. En esa interrupción comprobar si se ha pulsado una determinada tecla que active el depurador. Si no se ha pulsado, la interrupción simplemente regresa y el juego continúa. Cuando se pulse dicha tecla, en la rutina de interrupción incluso se podría guardar la memoria de vídeo actual (Si el MSX tiene suficiente RAM o si el propio cartucho la tiene) para que se pueda restaurar la pantalla a como estaba una vez hayamos acabado de analizar la memoria y que pueda continuar con normalidad la ejecución del juego. Creo que técnicamente sería posible, aunque la electrónica no es mi fuerte y tal vez esté diciendo una barbaridad.
Se me ocurre también que es posible que los programadores de las empresas de software que sí podían permitirse PC's con compiladores cruzados conectados al MSX con un sistema hardware de depuración como el mencionado PSD¿los facilitaban las propias empresas a las revistas o se los tenían que currar ellos por sus propios medios?. Me encantaría que alguien que trabajase en esas revistas en aquel entonces contase algún día cómo se cocinaba todo eso.
¡Sería interesante saberlo! Esperemos que algún día alguien lo cuente en alguna entrevista. En el caso de empresas, creo que no hay mucho secreto. Seguro que tenían varios ordenadores de 16 bits o PCs. Incluso con si uno tiene dos MSX 1, la cosa es más manejable. Puedes ejecutar en uno y ensamblar en el otro. Y algunos MSX 1 (el SVI-738 tiene un puerto serie RS-232, por ejemplo). Supongo que irían escribiendo las rutinas en el PC poco a poco, pasándolas por el puerto serie, y luego comprobando que iban bien en la máquina real. Y luego lo debían juntar todo.
Sí, en algunas Empresas por lo que comentaban era algo más o menos así. No sé si la conexión era exactamente por RS232 u otro medio pero el caso era ir probgramando en el PC, volcar al Ordenador de 8 bits de Turno e ir probando...
De todas formas, esta mañana he visto la luz y creo que ya tengo la solución al problema de cómo debían hacer los cargadores en MSX. El problema es lo que hemos estado discutiendo, que aunque puedes tener depuradores, no parece que haya una forma fácil de interruptir el programa y ver qué está haciendo (a no ser que te hagas un cartucho tú mismo y generes la interrupción).
Pensándolo un poco esta mañana me he acordado de que para Spectrum sí que tienes el Multiface, y como dice la Wikipedia: "and Lifeguard, a program for analysing the memory of a game during play in order to identify which memory locations should be changed to aid cheating".
Aunque claro, el Multiface no estaba para MSX. Pero al final muchos de los juegos eran conversiones directas del Spectrum, así que una vez que habías conseguido averiguar qué posiciones guardaban las vidas o lo que sea, podías desensamblar el código en el MSX o directamente buscar la secuencia de bytes en el programa y escribir el cargador para que haciera su magia. Si ya sabes lo que buscar, es mucho más fácil e incluso ya puedes ponerte a desensamblar. Hacerlo completamente a ciegas no me parece una buena estrategia y no creo que lo hicieran así nunca.
Otro juegos como Arkanoid no eran conversiones directas de Spectrum, así que no podrían hacerlo así. Pero supongo que esta técnica debían funcionar en más del 90% de los juegos de MSX.
Si no, tampoco me parece descabellado crearse uno mismo un cartucho, generar la interrupción, copiar los datos por puerto serie al PC, y ver qué posiciones de memoria han cambiado. Imagino que no todo el mundo era capaz de hacerlo, pero tampoco es tan complicado como para que nadie lo intentara.
Con lo que sabemos ahora, creo que si estuviéramos en la época podríamos hacerlo facilmente, si tuviéramos más de un ordenador.
Cierto, los Usuarios de Spectrum jugaban con ventaja (nunca mejor dicho lo de jugar....) al tener el Multiface. Creo que para Commodore había también algún artilugio similar. Pensándolo ahora y viendo la versatilidad que brinda el Cartucho al MSX (que podías conectar casi de tó...) es de extrañar que no se hubiera publicado-vendido algo similar para el MSX.
Lo que planteas de que no te parece descabellado que alguien se creara su propio Cartucho, generar la interrupción, copiar los datos por puerto serie al PC, y ver qué posiciones de memoria han cambiado.... Hombre, hay que tener en cuenta que estás pensando con la perspectiva que tienes ahora y que te ha dado el paso del tiempo, pero de aquella eso no creo que estuviera al alcance de muchos mortales, más bien de sólo unos pocos "gurús"... Si ya hoy día la construcción de Hardware y cualquier Dispositivo en _Formato Cartucho está en manos de unos pocos (Pazos, Pablibiris, el Rookie Drive....) pues eso, ¡imagínate en aquella época...!
Lo de reutilizar o que te facilitara la vida lo que hacías en Spectrum para encontrar los Pokes equivalentes para las Conversiones Spectrum-MSX supongo que sí, que ayudaría. No obstate @mcolom te sigo diciendo que la gente que realmente se dedicaba a Programar en Ensamblador en la época veían el Mundo a lo "Matrix" y ellos se manejaban perfecta y cómodamente entre ceros y unos y se sabían prácticamente todos los Opcodes de Memoria así que la búsqueda era artesanal. Desensamblar, buscar ciertas instrucciones específicas y anular esas instrucciones o modificarlas según el caso para evitar que nos quiten vidas y/o modificar el número de vidas. Te aseguro que es así (y que mis "fuentes" así me lo confirman....) XD
Gracias & Saludetes. ;-)
Cierto, los Usuarios de Spectrum jugaban con ventaja (nunca mejor dicho lo de jugar....) al tener el Multiface. Creo que para Commodore había también algún artilugio similar. Pensándolo ahora y viendo la versatilidad que brinda el Cartucho al MSX (que podías conectar casi de tó...) es de extrañar que no se hubiera publicado-vendido algo similar para el MSX.
Supongo que en MSX la cosa es más complicada, porque no puedes lanzar una NMI, y aunque pudieras saltaría a la dirección 0x66 que dependerá de lo que tengas seleccionado en la página 0, que podría ser el BIOS o directamente el juego que se esté ejecutando. Al ver semejante pifost... complejidad, imagino que se les quitarían las ganas.
Lo que planteas de que no te parece descabellado que alguien se creara su propio Cartucho, generar la interrupción, copiar los datos por puerto serie al PC, y ver qué posiciones de memoria han cambiado.... Hombre, hay que tener en cuenta que estás pensando con la perspectiva que tienes ahora y que te ha dado el paso del tiempo, pero de aquella eso no creo que estuviera al alcance de muchos mortales, más bien de sólo unos pocos "gurús"... Si ya hoy día la construcción de Hardware y cualquier Dispositivo en _Formato Cartucho está en manos de unos pocos (Pazos, Pablibiris, el Rookie Drive....) pues eso, ¡imagínate en aquella época...!
Bueno, es que los cartuchos de hoy en día son mucho más que una PCB con unas PROM. Tiene mapeadores de memoria, o de todo, como el Carnivore 2.
A lo que voy es que para hacerte un cartucho con unas EPROM, no era rocket science antes. Eran los 80, ¡no la Edad de Piedra! Está claro que no es como ahora, que te diseñas las PCB en el ordenador, la mandas imprimir en la web y te llega a la puerta de casa. Pero nada impedía que alguien cogiera un cartucho de MSX, lo partiera por la mitad para acceder a los pines de conexión y los soldara a un trozo de baquelita con EPROMs metidas en zócalos. Y las programas con el mismo MSX y algún circuito que te montas en la protoboard. No estoy diciendo que fuera fácil, solamente que si realmente querías hacerlo, lo ibas a conseguir.
Vale, no tenían la mista facilidad para acceder a la información que tenemos ahora. Pero eso no quiere decir que no la pudieran conseguir, solo que tardarían más. Y tendrían mucha más paciencia de la que tenemos ahora, porque no les quedaba otra. La información estaba disponible. No en Internet, pero por ejemplo ya en el libro "Aprendar a programar en MSX Basic" ya te venía un esquema del cartucho. Vamos, rebuscando un poco seguro que encontrabas la información (revistas, libros, esquemas del ordenador...). (Hablando de esquemas, me resulta curioso que antes te comprabas un vídeo VHS y te venía un papel doblado con el esquema eléctrico del aparato!)
Pero vamos, creo que ni siquiera haría falta hacer un cartucho. No me parece la mejor solución.
Yo si me viera en la situación supongo que una vez cargado el juego en memoria, modificaría el hook que está en la dirección 0x38 y llamaría a mi propio código que enviaría la RAM por puerto serie. El juego tiene que haber puesto su propio hook en 0x38.
Ahora mismo he puesto el debugger ejecutando el Madmix Game. Tiene seleccionados los 64 Kb de la RAM y en 0x38 tiene un JP 0x882A (hacia código del juego, que parece que lee el teclado, aparte de otras cosas) . Bastaría sobreescribir alguna parte del juego para añadir código que mire si se ha pulsado alguna tecla especial (no sé, el bloqueo mayúsculas) y entonces saltar al código que enviaría por puerto serie todo el contenido de la RAM. Luego puedes saltar a 0x882A, EI, y seguir como si nada.
El contenido de la RAM se le podría pasar a un MSX2 o algún otro que pueda mantener los 64 Kb al mismo tiempo, para hacer las comparaciones e ir viendo lo que se correla con lo que buscas.
Una cosa muy interesante que se podría hacer es organizar un workshop de cargadores en Retromadrid o alguna otra feria. Les das a los participantes un MSX1 y un MSX2 con puerto serie, un desensamblador, y un juego. Y a ver quién es capaz de crear un cargador con ese material en, digamos... 3 horas. Solo con ese material, nada de emuladores ni PCs. ¡Podría ser bastante divertido!
PD: Sí, lo de Araubi no es normal Menudo máquina...
Por suerte o por desgracia los "gurús" del MSX otrora y hogaño eran y son un Grupo reducido. Sí, había info disponible mayormente a través de Libros pero tampoco te creas que todo el mundo tenía tanto material. Al final "son los que eran": Pazos, Robsy, Konamiman, Martos y poco más. Para que te hagas una idea había mucha, o bastante, gente que se dedicaba a crackear/hackear/piratear Juegos pero muchas veces con distinta fortuna... Muchos de los Juegos que se "pirateaban", por ejemplo pasándolos de Cinta a Disco, de Cartucho a Disco, etc eran "chapucillas" que no funcionaban en todos los escenarios. Así que se hicieron famosas tanto dentro como fuera de España las Conversiones de Cartucho a Disco por ejemplo realizadas por Martos.
Material en cuanto a Libros y Revistas haberlo lo había en la época pero no todo el mundo pudo llegar a él por diferentes motivos: precios bastante prohibitivos para un adolescente o bien que aunque quisieras comprar cosas muchos Libros ya prácticamente eran imposibles... A veces con un poco de suerte conseguías Fotocopias de alguna parte concreta y/o similar. Y tenían que darse 2 factores: tener Material y tener conocimientos. Muchos Usuarios pese a que tuvieran diferente Material (Libros, Programas....) eran incapaces de acometer según que desarrollos. Vamos, yendo a lo práctico: que tuvieras un Libro de Ensamblador y un Ensamblador no implicaba (siempre) que tuvieras conocimientos de Ensamblador... La gran mayoría lo único que hacían (hacíamos) era teclear Programas sin entender demasiado lo que hacíamos...
Y sí, no era la "edad media", pero yo desde luego si exceptuamos a Pazos y 2-3 personas más tampoco conozco a mucha gente en la época que fuera capaz de destripar-construir-modificar Cartuchos tanto a nivel de Hard como de Soft. Fue un puntazo por ejemplo cuando Martos sacó su primera versión del Mega Flash Rom. En realidad lo hacía sobre Cartuchos originales de Konami para servirse del Chip SCC y les habilitaba un "interruptor" para que el Cartucho no se ejecutara y se pudiera usar el Juego en Disco junto con el SCC.
Es más, económicamente muchos nunca nos pudimos permitir Soft en Cartucho. Yo los únicos Cartuchos que pude disfrutar fueron unos Cartuchos que me prestó un amigo que a su vez le había prestado otra amiga (que ella era más "pudiente" económicamente...) En concreto los que probé fueron el Golvellius y el F1-Spirit y ¡aluciné "pepinillos"... al ver aquellos Juegos en mis manos en Formato Cartucho...! XD
Quizás en otros países, Holanda por ejemplo, había también Proyectos interesantes pero muchas veces aquí ni llegaban o ni nos enterábamos... a no ser a través de alguna Feria o contactos por ejemplo que tenía el Hnostar en la época y algunos Usuarios más.
Lo que sigue resultando curioso es lo "hermético" que era, y es, el mercado Japonés. Anda que aquella gente no tuvo que sacar Proyectos tanto de Soft como de Hard que nosotros nunca vimos.... A lo máximo que tuvimos acceso, que no es poco, fue a los Cartuchos que nos llegaban vía importación legal (y a veces antes vía "versiones Pirata"...)
En todo caso es alucinante que nuestros MSX sigan vivos 30 años después y que tengamos disponible todo el Hard y Soft que tenemos. Pocos nos imaginaríamos que 30 años después sigamos teniendo Soft en Formato CARTUCHO. Y lo del MegaFlash SD de Pazos para alucinar...
En general uno se da cuenta de que el nivel de mucha gente que hace Soft MSX-ero hoy día supera con creces el nivel técnico que tenían la gran mayoría de los Programadores de la época. Algo tan "simple" como no hacer una Rutina que detectara correctamente el/ los Slot/s donde está la RAM hacía que muchos no pudieran Jugar con todos los Juegos Comerciales de la época... En mi caso afortunadamente tuve un Sony HB-20P que era totalmente compatible con los Juegos comerciales y era capaz de cargar y ejecutar todo todo todo el Soft de la época... (no pudiendo decir lo mismo algunos Usuarios con ciertos Modelos de Philips por ejemplo, o Toshiba, etc, etc, etc)
El nivel y la comodidad que nos brindan los actuales emuladores cruzados es brutal si nos remontamos y lo comparamos con el de la época (supongo que los Ensambladores Cruzados de la época debían ser bastante rudimentarios) Hoy, Ensambladores por ejemplo como el AsMSX (creo que se llamaba así) (el que hizo Robsy vamos...) facilitan enormemente la Programación, con macros, comandos y opciones para crear ROMs, etc, etc, etc. Una pena que Robsy haya discontinuado su labor MSX-era... :-( (el AsMSX creo que tenía algún Bug que no se había solucionado y que él podría haber corregido y aumentado más si cabe todavía la potencia de ese Programa...)
El Desarrollo a nivel de Hard en la época a nivel amateur fue prácticamente inexistente. NO fue hasta el final de la vida comercial de MSX que empezaron a aparecer algunos Proyectos como los de Padial, Pazos y poco más.
En la época comercial del Sistema nos limitábamos a nutrirnos casi casi exclusivamente de lo que nos llegaba a nivel Comercial. Teníamos "todo": Juegos, Programas, Hadrdware... Pero luego el MSX "murió" y al final la necesidad agudiza el ingenio así que si quieres "comer peces" te toca "aprender a pescar"...
Siempre he creído que aunque la MSX-CLUB fue una Revista que dejó mucho que desear en muchos aspectos al menos sí que incitó a que los Usuarios "investigaran" sobre sus Máquinas, hicieran sus propios Programas o profundizaran en algún aspecto concreto (aquellos "Artículos Periodísticos"...) Vamos, que el 50-75% del Contenido de la MSX-CLUB lo aportaban los Usuarios con esos Artículos, Trucos, etc y los Redactores de la Revista se limitaban a comentar el escaso Soft que iba saliendo al Mercado y poco más. Agradecer a Manhattan Transfer que siguiera con el MSX hasta el final (no como otros...) (de hecho reo que la MSX-CLUB debió morir cronológicamente casi casi al mismo tiempo que la MIcro Hobby...)
Eso sí, la MSX-CLUB era horrible a nivel de Maquetación, toda en Blanco y Negro (excepto las Páginas del Coleccionable del Japón y poco más...) y para colmo los Listados casi casi casi siempre estaban llenos de erratas... erratas que a veces subsanaban en numeros sucesivos y otras que "nos comimos con patatas" (incluso algún Listado se publicó "incompleto")
Desde luego pese a todo, guardo excelentes recuerdos de toda aquella época. Especialmente recuerdo aquel "intercambio de Cartas" con Usuarios de toda España, a través de las cuales conseguías intercambiar Juegos y al menos en mi caso resolver muchas dudas y aprender cosillas que por aquel entonces desconocía. Recuerdo esperar al Cartero con la esperanza que llegara una de esas "Cartas"... (De hecho entre el Material que me he encontrado estos días he visto varias Hojas que tenía con las Direcciones "Postales" de casi todos los Usuarios con los que me carteaba en la época...¡snif...!)
Saludetes. ;-)
Pd. Lo de Araubi no es normal, pero anda que el señor FX "Fixeando" Juegos tela...¡menudo fiera...! XD
Buenas de nuevo Manolito74. He estado haciendo pruebas con tu busca pokes. El programa funciona bien, con sus limitaciones como has explicado, pero cumple con su cometido. Y sí, el bpokes3.bas ya graba y lee de disquete. Pero la operativa que has explicado para sacar los pokes no funciona como recuerdas. Me explico. Con el busca pokes ciertamente puedes llegar a localizar la posición de memoria que almacena el contador de vidas. Siempre que no machaques desde el propio basic la memoria del programa, se reubique el código y todo eso que has explicado muy bien. El problema viene con la segunda parte que explicaste, cargar el juego sin ejecutar, hacer un poke a esa dirección con un valor superior y saltar a la dirección de inicio para que comience el juego. La partida empieza con las mismas vidas de siempre. ¿Por qué?. Porque si lo pensamos bien, por lógica la variable que contiene las vidas se debe de cargar al comienzo de cada partida con el número de vidas iniciales, machacando por tanto el valor que hemos puesto nosotros con el poke. Y lo lógico es que esto ocurra con todos los juegos. Mi gozo en un pozo, entiendo que lo que hay que localizar es esa instrucción que inicializa el contador de vidas que hemos descubierto. Saber cuál es esa posición de memoria del contador de vidas lógicamente tiene que ayudar mucho. Pero no te exime al final del duro trabajo de tener que desensamblar todo el código del juego y ponerte a buscar las instrucciones que acceden a esa posición de memoria para tratar de localizar esa inicialización. Que según como se haga puede ser más o menos complicado de localizar. Y eso contando con que el busca pokes te haya podido restringir las posibles direcciones del contador de vidas a sólo una. Si son varias las posibles direcciones y no sabes cual es la buena la cosa se complica todavía más. Y todo eso con sólo un cassette para almacenar datos. Está claro que los 80 eran duros, duros. Y los tíos que encontraban los pokes unos máquinas del ensamblador.
Bueno, he estado dándole más vueltas a la cabeza y tal vez no sea tan complicado y no haya ni que usar un desensamblador. Un ejemplo práctico con el Manic Miner (lo sé, lo sé, hay vida más allá del Manic Miner, pero al fin y al cabo este thread comenzó con él). Empleando la técnica de Manolito74 de perder vidas, resetear y comparar las posiciones de memoria que cambian llegaríamos a averiguar que el contador de vidas está en la posición de memoria 61.846 (en hexadecimal f196). Probablemente habría que crear un busca pokes en ensamblador y que se ubique en un slot de memoria más alto en un MSX de más de 64Kb porque al ejecutar bpokes3.bas desde basic machacamos esa posición. Pero lo importante es que la técnica funcionaría, aunque sea utilizando otro programa y un MSX2 o un cartucho de ampliación de memoria. Si suponemos que esa posición de memoria se inicializa cada vez que comienza una partida con una instrucción LD (#F196),A que es lo más fácil, podríamos buscar usando otro programita muy simple en el código del programa en memoria esa instrucción que se codifica en hexadecimal como 32 96 F1. Sólo la vamos a encontrar una vez en la dirección #9B12. Y si ese programita nos mostrara las posiciones de memoria anteriores, que no tiene tampoco mucha ciencia, veríamos que justo antes hay un 3E 02 que corresponde a un LD A,2. Y ahora sí, cambiando ese 2 que está en #9B11 por el número de vidas que queramos con un poke conseguimos el objetivo. Puede que no sea tan simple en todos los juegos, porque la inicialización podría ser más compleja, por ejemplo indirecta, con un LD (HL),A o similar, o utilizando los registro IX ó IY, o de otra forma. Pero creo que en general tendría bastante éxito. Aunque es más complicado de lo que parecía en un principio, me ha terminado de convencer esta técnica para buscar pokes. Desde luego es infinitamente mejor que ponerse a estudiar todo el código desde cero. Y sospecho que más de un poke en aquella época se debió conseguir con esta técnica.
Hola @Mustang:
Hace más de 20 años así que no recuerdo muy bien como lo hacía... Te dije y sigo diciendo que asumo las limitaciones tanto a nivel de funcionalidad como el hecho de que esté en Basic y que ocupa bastante, por lo que machaca o puede machacar ciertas direcciones de memoria. Por eso, para que ocupara un poco menos de memoria en la última versión creé 3 "módulos" independientes.
Hay que tener en cuenta la posible reubicación del Código del Juego. Ejemplo: Juego ocupa de 40.000 a 50.000 pero se reubica a 45.000... pues deberás tener en cuenta esa diferencia de relocalización del código. Así que imagina que Juegas, buscas pokes y encuentras uno en la dirección 46.000... En realidad sabes que esa es la dirección ya reubicada, pero a la hora de pokear y/o buscar en el código del Juego tendrás que restarle 5.000 con lo que la dirección del poke sería la 41.000 y esa sería la dirección que tendrías que pokear directamente o bien buscar en el código la instrucción que cargue en la dirección 41.000 el valor 3 (número de vidas).
Yo hice en su día varias pruebas. Probé con Juegos de Konami, de esos sencillitos que tienen sólo un Fichero y encontré Pokes a varios Juegos (de hecho los tengo anotados)
No es la panacea... y lo suyo es lo que tú decías y que yo siempre he apuntado: hacerlo en Ensamblador y poner ese Programa Busca Pokes en una zona que "no moleste"... Pero eso, por desgracia se escapa a mis nulos conocimientos... :-(
Mi Programa fue algo muy artesanal y que hice hasta donde yo llegaba con los conocimientos que tenía. ;-)
Gracias & Saludetes. ;-)