AbandonSocios: El Portal de los Juegos Antiguos

Abandonsocios => Dudas y Problemas Técnicos => Mensaje iniciado por: vreyes1981 en Marzo 05, 2023, 19:11:48 pm

Título: Programación en BASIC
Publicado por: vreyes1981 en Marzo 05, 2023, 19:11:48 pm
Buenos tardes. Escribo aquí estas líneas porque he descubierto los antiguos cargadores que se incluían en Micromania de la 2ª época que se escribían en BASIC para obtener trucos o ventajas en los juegos. En este caso en versión PC. El problema es que al crear el archivo en BASIC, cuando lo compilo bajo el comando RUN, me sale el siguiente error:

Citar
Error en la línea data 5

Break in 170

Adjunto en spoiler el código en BASIC. Aviso que es un buen tocho:

Spoiler (click para mostrar/ocultar)

¿Alguna idea de que puede ser? Gracias.
Título: Re: Programación en BASIC
Publicado por: skywalky en Marzo 05, 2023, 20:01:53 pm
Pues según parece está fallando el checksum de una linea DATA así que comprueba la línea 580 ya que puede ser que el error esté ahí. Si nos dices en que Micromania está ese cargador quizá podamos ayudarte más.
Título: Re: Programación en BASIC
Publicado por: vreyes1981 en Marzo 05, 2023, 20:05:02 pm
Buenas: el Micromanía en cuestión es un suplemento que se llama "Los 100 Mejores Juegos para PC"

De todas formas le echo ese vistazo en la línea 580 como tu bien dices...
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Marzo 07, 2023, 01:45:30 am
Una cosa quiero comentar respecto a los cargadores de la susodicha revista, la mayoría son obra de Javier Sánchez Fransesch (que en su momento comprobé que la mayoría funcionaban sin problemas), mas hay dos cargadores de Jesús Prez Sicilia (el del "Gryzor"y el del "Platoon") y ninguno de los dos funcionan.
¿Casualidad? No lo creo.
Título: Re: Programación en BASIC
Publicado por: vreyes1981 en Marzo 07, 2023, 02:54:47 am
Eso quiere decir que los  cargadores de Platoon y Gryzor no funcionan porque los códigos están mal de forma ex-profesa?
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Marzo 07, 2023, 03:34:34 am
Hombre, no diría tanto, pero que pueden tener algún error de transcripción, podría ser (como el nombre del creador de los cargadores, está claro que se llama "Pérez" y no "Prez").
Lamentablemente no tengo suficientes conocimientos para hallar una solución.
El del "Gryzor" no recuerdo haberlo visto en ningún otro lado, pero el del "Platoon" sí. Si lo encuentro los compararé, así al menos podremos saber si es un error de transcripción, o si es que el señor este no estaba por la labor...
Título: Re: Programación en BASIC
Publicado por: necromode en Marzo 20, 2023, 23:05:10 pm
En powerbasic de la época se puede tracear...
Doy una pista:
El cálculo del checksum de la línea 5 es 1963
El valor (suma) que debería dar es 1915
1963-1915 = 48dec = 30hex
Es probable que en la línea 5 se haya confundido un 8 por una B o similar.
He restado -30hex a todos los pares hex en esa línea individualmente (únicamente en los que el resultado es mayor a 0) y generado los cargadores .com correspondientes.
Probados todos, el único que no da error o fenónemos adversos (el cargador .com genera un ** ERROR **) es el B4 (correspondiente al último dígito hex de la línea).
Sustituido por 84. Ejecutado el cargador y cargado el juego, no tiene vidas infinitas...
He bajado ese número de la revista y aprecio, que donde pone 5EBE en el .bas del hilo, yo diría que en la revista se parece más a 5E8E, el cálculo del checksum es correcto (1915) pero da ** error ** el cargador resultante.
Vaya misterio!
------------------
Bueno muchachos y no tan muchachos. Ya tengo la solución. (El fallo de transcripción de la revista a texto estaba en el (B8 00 5E BE)). Debería ser (B8 00 5E 8E).
Este no es un cargador TSR (residente en memoria), se encarga de ejecutar el GRYZOR.EXE.
Pero existe un pequeño problema, en el dos box .conf se monta la unidad en C, y después se accede a la carpeta GRYZOR, pero el cargador ejecuta el GRYZOR.EXE desde la ruta a:\gryzor.exe
Hechas las modificaciones pertinentes, lo tengo operativo.
Quizá la mejor solución sería, cambiar el byte incorrecto y modificar el .BAS para que la ruta de ejecución sea .\GRYZOR.EXE en la línea 590 (modificando también el checksum) , así independientemente de la carpeta donde esté el ejecutable lo va a encontrar igual.
Por si queréis trastear he utilizado el Powerbasic PB35 para DOS y el IDA 7.7.
------------------
Bueno, me dejo de tonterías y vamos a la solución práctica.
Aquí el spoiler con el .BAS modificado para que funcione como debe:

Spoiler (click para mostrar/ocultar)
Título: Re: Programación en BASIC
Publicado por: kurt en Marzo 21, 2023, 17:59:20 pm
Ostras, pedazo de trabajo de investigación y de solución te has marcado. Que crack!!!

Gracias
Título: Re: Programación en BASIC
Publicado por: vreyes1981 en Marzo 21, 2023, 20:22:57 pm
(...) Bueno muchachos y no tan muchachos. Ya tengo la solución. (El fallo de transcripción de la revista a texto estaba en el (B8 00 5E BE)). Debería ser (B8 00 5E 8E).

 :huh: :huh: :adoracion: :adoracion:

Edito:

Confirmado que se ejecuta correctamente:

(https://i.ibb.co/gwNNBpc/Cargador.png)

¡Muchas gracias @necromode por tu ardua investigación!
Título: Re: Programación en BASIC
Publicado por: necromode en Marzo 22, 2023, 00:00:54 am
Aquí en el spoiler os dejo el cargador del PLATOON revisado y corregido extraído de la misma revista:
Tener en cuenta que el ejecutable que busca el cargador es .\o.exe

Spoiler (click para mostrar/ocultar)
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Marzo 22, 2023, 02:08:19 am
Llevaba más de treinta años frustrado con el maldito cargador del "Platoon". No te puedes imaginar lo agradecido que estoy por este favor que nos has hecho.
¡Mil gracias @necromode! :asisehace:
Título: Re: Programación en BASIC
Publicado por: necromode en Abril 05, 2023, 00:10:44 am
30 años, ¡mae mía!

En el spoiler, a modo de preservación (igual a la revista) , el cargador del Gryzor corregido.

Spoiler (click para mostrar/ocultar)
Título: Re: Programación en BASIC
Publicado por: SkaZZ en Abril 05, 2023, 08:29:15 am
Oh, GW-BASIC, ojalá lo hubiera visto antes. Te lo voy a pasar a QuickBasic, pues el compilador v4.5 se puede encontrar en la red o puedes también usar QB64, para que se puede compilar.

NO GOTO, NO CRY!
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Abril 05, 2023, 22:53:30 pm
Yo uso el QuickBasic 1.1, con el DosBox claro. Es el que he usado toda la vida, y últimamente me muevo más por entorno Dos emulado que por Windows...  :lol:
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Mayo 25, 2023, 03:13:08 am
Veamos @necromode te cuento.

No me funciona el cargador del "Platoon", y lo que no entiendo es, como indicas, que el ejecutable que busca es el o.exe, cuando no existe en el juego ningún ejecutable con ese nombre.
Entonces, si se arranca el cargador da error, y si -por probar- se le cambia el nombre al ejecutable real del juego (platoon.exe) por o.exe, al ejecutar el cargador, se cuelga.

¿Hay alguna solución, o realmente no existe un cargador que pueda con este juego?
Título: Re: Programación en BASIC
Publicado por: necromode en Mayo 25, 2023, 16:03:20 pm
Acabo de probarlo y me funciona.

Veamos:
Platoon 1986
Dosbox 0.74-3

Cargo plat.bas en el powerbasic 3.5 (o basic similar)
Run
Escojo las opciones que me interesan, para probar digo que sí a todo.
En la última opción 'unidad para salvar el cargador' escojo C que es donde dosbox se monta por defecto
Se genera cplat.com
Copio cplat.com a la carpeta del platoon
Hago una copia de platoon.exe a o.exe (esto es debido a que en el cargador está así tal cual y busca ese archivo) (veré si puedo modificarlo)
Ejecuto cplat.com contra dosbox y el se encarga de cargar o.exe que es el juego.
Y funciona (no sale ningún enemigo).

No se si estos pasos son parecidos a los tuyos.

Título: Re: Programación en BASIC
Publicado por: Scr34m en Mayo 25, 2023, 16:21:52 pm
Hola,

No lo he probado pero cambiaría esta línea:
430 OPEN "O", #1, U$+":"+N$+".COM", NB

El primer parámetro es el nombre del archivo, y el COM si es EXE creo se debería cambiar también?

Salu2

EDITO:
Me autocorrijo:
OPEN modestring, #filenum, filespec [,record size]

Con lo cuál, abrimos para salida secuencial "O".
Lo del .COM si que lo cambiaría a punto EXE, y habría que modificar la variable N que sería el nombre.
Está definido en las primeras lineas, y es el nombre del archivo cargador CPLAT...

Está claro, el cargador genera el .COM para ejecutar el juego trucado.
Para cambiar el nombre del archivo que ejecuta:

600 DATA "9401CD200000000000002E5C6F2E657865000000", 1003 : REM  /  8 /
610 DATA "0000002A2A2A204520522052204F2052202A2A2A", 838  : REM  /  9 /


Donde
"2E5C6F2E657865" es = ".\o.exe"
"2E5C706C61746F6F6E2E657865" = ".\platoon.exe"

Con lo cuál, cambiando esos bytes cambiaremos el nombre.
De todas formas tiene una comprobación de que son los datos originales, con el cálculo de SUMA y CHECKSUM.
El valor posterior a la ristra de bytes, es la suma de los bytes de esa linea DATA.

No me he metido en profundidad, pero habría que tocar varias cosas.

También habría que ver el espacio que tenemos disponible etc, pero por ahí van los tiros...

Para simplificarlo se me ocurre un simple:
COPY PLATOON.EXE O.EXE

P.D.
La de tiempo que no tocaba Basic...

Título: Re: Programación en BASIC
Publicado por: necromode en Mayo 25, 2023, 18:19:28 pm
En assembler, esta es la porción de la sección de datos original del cargador que nos interesa.
Vemos que por encima y debajo del db 'a:\o.exe' hay más datos que son referenciados/utilizados en otras partes de código.
Eso nos da un margen de 8 carácteres para el nombre del ejecutable .exe incluído.
La suma/checksum de cada línea se calcula sumando los valores hexadecimales (00+00+00, etc) de esa línea y convirtiéndolo a decimal.

seg000:018E                               start endp
seg000:018E
seg000:018E                               ; ---------------------------------------------------------------------------
seg000:0190 00 00                         word_10190 dw 0                         ; DATA XREF: start+2↑w
seg000:0190                                                                       ; start+82↑r
seg000:0192 00 00                         word_10192 dw 0                         ; DATA XREF: start+A↑w
seg000:0192                                                                       ; start+86↑r
seg000:0194 00 00                         word_10194 dw 0                         ; DATA XREF: start+6↑w
seg000:0194                                                                       ; start+8A↑r
seg000:0196 61 3A 5C 6F 2E 65 78 65 00    aAOExe db 'a:\o.exe',0                  ; DATA XREF: start+12↑o
seg000:019F 00 00                         word_1019F dw 0                         ; DATA XREF: start+16↑w
seg000:019F                                                                       ; start+22↑o
seg000:01A1 00 00                         word_101A1 dw 0                         ; DATA XREF: start+1C↑w
seg000:01A3 2A 2A 2A 20 45 20 52 20 52 20+aERROR db '*** E R R O R ***',0Dh,0Ah
seg000:01A3 4F 20 52 20 2A 2A 2A 0D 0A 24+db '$',0
seg000:01B8 00 00 00 00 00 00 00 00 00 00+db 10h dup(0), 0Dh, 0Ah
seg000:01B8 00 00 00 00 00 00 0D 0A       seg000 ends
seg000:01B8
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Mayo 25, 2023, 22:17:01 pm
@necromode sigo exactamente el mismo procedimiento que describes, pero sigue sin funcionarme.

He probado con distintas versiones del juego pero ninguna carga. Cuando ejecuto el cplat.com simplemente aparece el cursor del sistema debajo y ahí se queda.

He encontrado una versión que curiosamente el .exe ya estaba cambiado a o.exe, pero en esta al ejecutar el cargador se queda la pantalla en negro y de ahí no avanza.

Me queda probar con otro DOSBox, que el que tengo es la primera versión del 0.74-3 en inglés, pero no creo que ese sea el problema, todo lo demás siempre me ha funcionado bien.
Título: Re: Programación en BASIC
Publicado por: necromode en Mayo 26, 2023, 00:07:17 am
Por descartar, se genera bien el cplat.com?, debería ser de 202 bytes.

Se me ocurre también ejecutar el Reset Options.bat en la carpeta de dosbox.

Otra opción en el foro de vogons:
DOSBox 0.74-3 Options.bat

There have been numerous threads here describing this same problem, swiftly remedied by changing output=surface to output=opengl or output=openglnb.
 output: What video system to use for output.
 Possible values: surface, overlay, opengl, openglnb, ddraw.
Procedimiento igual a este vídeo: https://www.youtube.com/watch?v=a-dr84MQvJI
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Mayo 27, 2023, 00:33:48 am
¡Por fin, mil gracias @necromode!  :bravo2:
Esa ha sido la solución, cambiar el video de salida a openglnb y ha ido perfecto.
Creo que después de 34 años podré llegar a ver el final del maldito juego... :lol:
Título: Re: Programación en BASIC
Publicado por: necromode en Mayo 27, 2023, 00:37:05 am
Genial!
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Mayo 27, 2023, 01:25:27 am
Un detalle que se me había pasado por alto @necromode.

El cargador solo funciona en la primera versión europea del juego, que es en CGA,
que es la versión reseñada en la revista de donde procede el cargador.

En la versión americana que trae las paletas Hércules, CGA, EGA y Tandy el cargador no funciona.
Título: Re: Programación en BASIC
Publicado por: necromode en Mayo 27, 2023, 10:07:47 am
Cierto, Cheat Engine https://www.cheatengine.org/ debería ser una posible solución.
Título: Re: Programación en BASIC
Publicado por: Crafterlock en Mayo 28, 2023, 00:50:20 am
Bueno, tampoco es algo como para estar ya buscando los trucos a piñón fijo.
La gracia radica en usar el cargador de la época.
Y a mi ya me está bien jugar la versión CGA, que es la que tuve en su día.

Gracias por todo.