Dudas sobre el intérprete de BASIC

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
JKD
Lechoncillo
Lechoncillo
Mensajes: 5
Registrado: Sab 18 Oct , 2014 12:58 am
Contactar:

Dudas sobre el intérprete de BASIC

Mensajepor JKD » Dom 27 Sep , 2015 3:34 am

Buenas foreros,

Estoy desarrollando un programa que, entre otras cosas, extrae el código BASIC de un programa a partir de un snapshot creado con un emulador. Para ello me he guiado de la información técnica del artículo de cpcwiki: http://www.cpcwiki.eu/index.php/Technic ... tive_BASIC

En principio ya lo extrae y decodifica pero he dado por supuestas ciertas cosas cuya explicación no he encontrado. A ver si alguno de los expertos del foro puede echarme una mano.

En primer lugar, veo que el código BASIC de cualquier programa se almacena en la memoria RAM a partir de la posición 0x170 (368 decimal). Mi duda es si esto es así siempre o si es configurable y, de ser así, dónde guardaría el firmware dicha información.

Suponiendo un snapshot en cuya memoria no hay código BASIC sino un juego binario cargado y en ejecución, la información en la RAM a partir de la posición 0x170 podría interpretarse erróneamente como una línea en BASIC si los primeros bytes (tamaño y número de línea) tienen cierto sentido. Por ello, con algunos snapshots mi programa detecta erróneamente una o dos líneas de BASIC. Entonces, mi pregunta es ¿cómo sabe el firmware si hay líneas en BASIC o no? ¿Almacena en alguna parte el número de líneas introducidas?. La lógica me dice que el valor de HIMEM estará por debajo de esa posición de memoria, lo que me plantea otra duda: ¿En qué posición de la RAM se guarda el valor de HIMEM y, esta posición es la misma en las diferentes versiones del firmware?

Un saludo :)
La máquina más segura es una máquina apagada

Urusergi
Forum Addict
Forum Addict
Mensajes: 380
Registrado: Sab 25 Feb , 2006 5:45 pm

Re: Dudas sobre el intérprete de BASIC

Mensajepor Urusergi » Lun 28 Sep , 2015 4:03 pm

Para saber si tienes un programa Basic debes comprobar si la longitud dada en los dos primeros bytes se corresponde efectivamente con la longitud de la primera linea basic (cuenta todos los bytes hasta llegar a ese valor y comprueba si hay un 00h en esa posición, contando también con los dos primeros bytes) y asi sucesivamente hasta que te encuentres con un 0000h, que indica el final del programa basic.

Como ejemplo nada mejor que un "hola mundo"
12,00,0a,00,bf,22,68,6f,6c,61,20,6d,75,6e,64,6f,22,00,06,00,14,00,ca,00,00,00

12h y 00h es la longitud de la primera linea basic (es un número de 16bits pero se lee al reves, 0012h). Por lo tanto tenemos que contar 18 bytes desde el 12h en adelante y comprobamos que sí, que hay un 00h, de modo que estamos muy probablemente ante un programa basic (cada linea basic acaba con un 00h, por eso los programas basic deben terminar siempre con tres 00h consecutivos) .

Leemos los siguientes dos bytes: 06h y 00h lo que significa una longitud de 0006h y volvemos a encontrarnos con un 00h después de contar.

Y por último leemos los siguientes dos bytes y nos encontramos con un 0000h lo que significa que hemos llegado al final del programa.

Que yo sepa un programa basic siempre empieza en la dirección 0170h

El Basic es muy simple y parece que no tiene medidas de control asi que tendrás que interpretar cada token y dotar de "inteligencia" a tu programa para lograr distinguir entre programas basic y código máquina.

Saludos

Avatar de Usuario
JKD
Lechoncillo
Lechoncillo
Mensajes: 5
Registrado: Sab 18 Oct , 2014 12:58 am
Contactar:

Re: Dudas sobre el intérprete de BASIC

Mensajepor JKD » Mar 29 Sep , 2015 1:34 am

Gracias por responder. Entonces detectar una línea BASIC es cuestión de asegurarse de que está bien formada (terminación en 0x00). Alternativamente compruebo que el número de línea (tercer y cuarto byte) es un valor correlativo mayor que la línea anterior (de haberla) y ya que la cadena resultante no debería ser mayor de 255 bytes el tamaño de la línea (primer y segundo byte) codificada en tokens es imposible que sea mayor de 255.
La máquina más segura es una máquina apagada


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic