BASIC ETENDU de ERE INFORMATIQUE ---------------------------------------------------------------------------------- Ahora toca hablar de un programita muy singular, una extension al Basic del estilo del Betabasic o Basic+, del cual no hay mas informacion excepto que se ha podido preservar, fue creado por F. Mallard y publicado en Francia por ERE informatique en 1984. Al momento de escribir estas notas no hay manual disponible y en cuanto a reviews en magazines de la epoca, habria que buscar en revistas como Tilt u Ordi para ver si alguna le dedico siquiera una pagina al respecto. Por lo que este va a ser una especie de review a la vez que manual de instrucciones sobre su uso. Y empezamos con... Sentencias: AUTO, DEL, RENUM, FIN, GIANT, PAINT, ELSE, REPEAT, UNTIL, WHILE, WEND, ON ERROR, RESUME {NEXT}, TRACE, USING y ROM Todas las sentencias deben ser tipeadas letra a letra y solamente son aceptadas por la sintaxis si estan en mayusculas RAND. USR 62223 es necesario ya sea dentro del listado o como comando directo para iniciar el programa. AUTO sintaxis: AUTO m,n donde: m = numero inicial de la numeracion automatica n = incremento no es posible omitir ninguno de sus parametros. Si quiero empezar desde 10 con saltos de 10 tengo por fuerza que tipear AUTO 10,10 en vez de solamente AUTO. Si uno mismo borra un numero para usar un comando, entonces proseguira con el numero que venga a continuacion. Para salir de este modo no basta con simplemente borrar el numero y ENTER, hay que tipear otra vez AUTO 0,0 para que se detenga. DEL sintaxis: DEL m,n donde: m = numero inicial del bloque de numeros a eliminar del listado n = ultimo numero del bloque a borrar tampoco es posible omitir ninguno de sus parametros. Puede ser usado ya sea como comando directo o sentencia dentro de un programa. RENUM sintaxis: RENUM m,n,x,z donde: m = numero inicial del bloque de numeros a renumerar n = ultimo numero de dicho bloque x = numero con el cual empezara la nueva numeracion z = incremento nuevamente es imposible omitir ningun parametro y esta vez son cuatro. Al menos afecta tambien a GOTO y a GOSUB. Como DEL puede ser usado indistintamente ya sea como comando o sentencia. FIN el equivalente al END de la mayoria de Basics. Simplemente finaliza el programa. Ya que es sentencia sera rechazado si se intenta tipear como comando directo. GIANT sintaxis: GIANT m$,m,n donde: m$ = texto que va a ser ampliado en pantalla m = valor del tam. en la vertical n = val. altura en la horizontal tal como su nombre indica, lo que hace es agigantar los textos que se le den de acuerdo con los parametros dados. PAINT sintaxis: PAINT m,n,z donde: m = cordenadas de 0 a 255, a partir de la esquina superior izquierda n = cord. de 0 a 175, de arriba hacia abajo z = color a usar de 0 a 7 no importa que valores tengan m y n, siempre acaba pintando toda la pantalla por lineas de pixeles de arriba hasta abajo. ELSE sintaxis: IF conds THEN sents1 :ELSE: sents2 completa la sintaxis de la sentencia IF. Hay que cumplir con la sintaxis de a~adir dos puntos antes y despues de ELSE para que opere correctamente. REPEAT - UNTIL sintaxis: REPEAT sents UNTIL cond repite las sentencias dentro de un bucle hasta que se cumpla cond. WHILE - WEND sintaxis: WHILE cond sents WEND mientras se cumpla cond repetira las sentencias dentro de un bucle una y otra vez. ON ERROR sintaxis: ON ERROR x donde: x = numero de linea al cual saltara de ocurrir un error dentro del programa. = 0 - desactiva la captura de errores Equivale a ON ERR, ON ERROR GOTO y TRAP de otros Basics. RESUME NEXT sintaxis: RESUME {x} RESUME NEXT esta instruccion es para ON ERROR lo que RETURN es para GOSUB, es decir que retorna de una rutina de captura de error a la linea sigte. a la que causo el error o salta a una linea x dada o se continua con la ejecucion de la linea del error tras su depuracion. Como comando directo ejecuta el programa igual que un GOTO. Ejemplo de ON ERROR y RESUME 10 ON ERROR 400 20 INPUT "Introducir un numero: ";N 30 LET raiz=SQR N 40 PRINT "La raiz cuadrada de ";N;" es igual a ";raiz 50 PRINT "Fin" 99 FIN 400 REM rutina de captura de error 420 PRINT "Numeros positivos siempre!" 430 PRINT "Pruebe de nuevo" 440 RESUME 20 TRACE sintaxis: TRACE x solamente acepta el valor 0, es decir solo puedo tipear TRACE 0 y es aceptado ya sea como comando directo o sentencia, pero no veo que haga algo. USING sintaxis: PRINT {#n;}: USING m$,x imprime un valor x en pantalla dandole el formato especifico m$. No se genera error si se omite PRINT. En ese caso simplemente no imprime nada. Ejemplo: PRINT : USING " #######.##",x Nota: el primer caracter debe ser espacio o imprimira el signo # para llenar el formato. Es decir el primer caracter ha de ser todo menos #. Aparentemente puedo reemplazar PRINT por LPRINT para redirigirlo a impresora y PRINT# para usarlo con ficheros. ROM no parece aceptar parametros, puede ser usado como sentencia o comando dir. pero su uso real es un enigma. Mensajes de error WEND sans WHILE - se encontro una orden WEND sin su respectivo WHILE UNTIL sans REPEAT - hubo un UNTIL pero sin ningun REPEAT Y hasta aqui todo cuanto pude experimentar y descubrir asi que paso a... MODO DE USO El programa originalmente se vendia en formato de cinta, dentro del cual nos dabamos conque estaba en dos versiones: el primero es un programa BASIC llamado "BAS+" y el segundo es un cargador Basic llamado "BAS+48", el cual carga una rutina en codigo maquina que es el programa propiamente llamado "BASICERE". La diferencia entre ambos es que en el primero hay una simple linea cero conteniendo todo el programa. Cuando lo cargamos mediante un simple LOAD aparece en pantalla en letra grande "BASIC+" que es como su autor al parecer lo llamo originalmente. Si pulsamos ENTER, aparecera el listado: 1 RANDOMIZE USR 23762 10 GIANT"BASIC+",4,5 20 POKE 23658,8 Una vez ejecutada la rutina la linea cero desaparece, quedando el listado solo, que nos da una idea de como iniciarlo y el uso de uno de sus comandos. Basta con cargarlo y hacer DEL 1,20 en vez de NEW (el cual borraria todo y vuelta a cargar) si queremos usar los nuevos comandos en nuestros propios programas. El segundo programa es un cargador y tras LOAD nos presenta la sigte pantalla: BASIC ETENDU ERE INFORMATIQUE 0 OK, 8:1 Basta con pulsar ENTER y ya estamos listos para usar el programa. Ingresando los comandos Como ya mencionara, los comandos y sentencias se deben tipear letra a letra, eso significa que hay que salir del modo K y forzar el modo C. Para ese fin, debemos pulsar ya sea R y que aparezca REM o cualquier otra tecla que nos ponga en modo texto y ya podemos tipear la instruccion deseada. Si por ejemplo hemos hecho REM DEL 10,40, basta con retroceder el cursor y borrar REM seguido de ENTER para que el comando se ejecute. Si en cambio hicimos 50 .REPEAT, el unico modo de que se admita tal linea es nuevamente retrocediendo el cursor y borrar el '.' y enseguida ENTER. En cuanto a sus comandos He tenido que PEEKear en la RAM y hacer prueba y error para poder saber que sentencias ofrece el ETENDU y cual era la sintaxis de cada instruccion o comando. Las unicas ordenes que no se como usarlas son obviamente TRACE y ROM. En cuanto a PAINT, pensaba que era como FILL que te colorea areas cerradas. DEL y RENUM son optimas dentro de un listado para la programacion modular. ELSE, WHILE y REPEAT son optimos para una buena programacion estructurada. USING y GIANT sirven para manejar un buen fomato de impresion en pantalla. Retomando TRACE Dije antes que no veia que hiciese algo, mas bien si hace algo, pero no se por que o para que... Ejemplo - si tipeo lo sigte.: 10 FOR N=1 TO 10 20 PRINT N: NEXT N 30 STOP se ejecutara y detendra con el mensaje de STOP. Pero si ahora a~ado al listado: 5TRACE0 imprimira una sola vez 1 y se detendra con OK sin continuar con las lineas que le siguen, es decir que el programa se para donde cierra el bucle una sola vez y ya no continua con las demas instrucciones. Retomando ROM basta con ejecutarla una vez para que en realidad cualquier comando ETENDU cuelgue la maquina. Hay que volver a hacer un USR 62223 para anularlo, o 23762 en el caso de la version con linea 0. Asi que su verdadero uso y el de TRACE son un autentico misterio para mi sin su manual de instrucciones. En cuanto a FIN ETENDU es creo la unica extension al Basic para Spectrum que incluye tal orden. Usada por la mayoria de BASICs e inexistente al parecer por innecesaria en el Spectrum, en realidad le a~ade algo mas de estructura y claridad a un listado al decirle al que lo revise donde termina realmente y que lo le siguen son solo subrutinas auxiliares. Muy latinos los franceses que decidieron reemplazar por FIN el muy anglosajon END. Pero a mi que hablo castellano, no se por que pero me resulta raro ver FIN en un listado donde todas las demas instrucciones estan en ingles. Por lo que decidi crear una copia que en vez de FIN tenga END y para eso tuve que POKEar el codigo y listo. Los POKEs son 63290,69 63291,78 y 63291,68 respectivamente siendo sus valores originales 70, 73 y 78 en ese orden. Lo unico que deje sin modificar son sus dos unicos mensajes de error, lo cual me lleva a... En cuanto a ON ERROR no hay al parecer ninguna variable o funcion ERR o ERL, que me digan cual fue el error y en que linea ocurrio. Por suerte el valor del error menos 1, aun es capturado por la variable del sistema ERR NR (5C3Ah = 23610), por lo que si PEEK 23610 nos da 9, es que se ha producido un error A, el cual es numericamente 10 y asi con cada error del Spectrum. Nota: ON ERROR puede fallar y capturar BREAK y STOP como errores pudiendo crear un bucle sin salida, por lo que habria que hacer un RESUME a FIN para evitar ese fallo. Compatibilidad con discos Toca tratar del tema que mas me interesa y es sobre cuan compatible es ETENDU con los diferentes sistemas de disco y el manejo de ficheros tipo OPEN. Y empiezo con... Pasandolo a disco o cartucho El primer programa BAS+ basta con hacer MERGE primero y enseguida un SAVE "bas+" LINE 1 segun la sintaxis del sistema en cuestion. El segundo hay que cargarlo y despues rebobinar, hacer MERGE para obtener el cargador y entonces salvarlo todo con "bas+48" LINE 1 y "basicERE" CODE62144,3392 nuevamente segun sintaxis del sistema a usar. Los Microdrives BAS+ no funciona debido a que el area del Basic es movido por causa de las variables del sistema extras del IF1. En cambio BAS+48 no da problemas por lo que puede ser cargado copiado facilmente a un cartucho. ON ERROR es incapaz de capturar los errores del IF1, pero no se cuelga ni nos saca del ETENDU como si sucede con otras extensiones al Basic. Simplemente genera el mensaje de error de cartucho y se detiene la ejecucion del programa. El Wafadrive Al igual que con el IF1, BAS+ no corre en el Wafadrive por las mismas razones de sus variables extras del sistema. BAS+48 en cambio puede ser pasado a un wafer y cargado sin problemas. En este caso hay que acordarse de hacer NEW#, ya que NEW nos saca tanto del ETENDU como del WOS. ON ERROR tampoco captura los errores del WOS y actua como en el caso del IF1. Beta128 Como con el IF1 y WOS, solo es posible usar la version BAS+48. Opus Discovery Cualquiera de los dos programas puede ser salvado y ejecutado en disco. ON ERROR puede capturar los errores del disco sin problemas. PEEK 23610 nos devuelve el error dentro de la rutina. Timex FDD Al igual que con el Opus Disc. es posible pasar cualquiera de las dos versiones. ON ERROR captura los errores de disco siempre como error 11, osea 12 "C sin significado en Basic", por lo que es preferible combinarlo con la captura de error propia del FDD. Didaktik D80 El mismo exito que con Opus y Timex. Aqui tambien ON ERROR puede capturar los errores del disco. Disciple y +D Es posible pasar cualquiera de los programas a disco pero al igual que con la IF1 o el WOS, no hay forma de capturar errores de disco con ON ERROR, encima si se diera un error nos sacara del ETENDU por lo que habra que reactivarlo con su USR correspondiente. Swift Disk I y II Pasa lo mismo que con el Disciple y +D. FloppyOne Pueden ser usadas cualquiera de las dos versiones, pero ninguno de los comandos con ! es aceptado; solo acepta CAT, SAVE, LOAD, MERGE y VERIFY. Supongo que eso es suficiente. MB-02+ Pasa lo mismo que con FLoppyOne. Speccydos No es compatible. Una vez cargado el BAS+48, ya no acepta ningun comando de disco. Kdos y SPdos parece pasar lo mismo que con Speccydos, en este caso solo CAT funciona. +3 con 48disk No es compatible ninguna de las versiones. (c)2024 zx_if1@hotmail.com