ARANA BASIC Arana soft un nuevo operativo para el Spectrum El sistema operativo para el Spectrum de Manuel Arana publicado en TodoSpectrum #13, año 2, set. 1985. El operativo le añade 7 nuevas sentencias al Basic del Spectrum, las cuales son plenamente explicadas sobre su uso en la ya mencionada edición. Hay cuatro listados publicados en la revista, el primero y el más largo es el cargador de todo el codigo. Una vez ejecutado correctamente, se salva mediante el listado 2 a una cinta. Para salvar una verión a Microdrive, hay que usar el listado 3 y el listado 4 es un demo de algunas de sus sentencias. El listado completo en lenguaje Ensamblador y con notas al respecto del programa, se continuó desde el #14 al #17 de TodoSpectrum. Sentencias: MODE, AUTO, RENUM, ELSE, ON, SWAP, ON ERR ECS = primero entrar en modo extendido E y luego Caps Shift Comandos de edicion: A diferencia de otras extensiones al Basic Sinclair, esta solamente nos ofrece dos: Auto (ecs + E) sintaxis: AUTO lin, inc activa la numeración automática, donde: lin = linea inicial o de comienzo inc = el salto o incremento entre líneas consecutivas los parametros no son opcionales, deben tipearse para que la instrucción sea aceptada. Ejemplo: AUTO 100,10 para salir de este modo basta con borrar el número de linea que aparece y pulsar ENTER. Renum (ecs + R) sintaxis: RENUM m,n[,w,z] como su nombre indica, renumera todo el programa a partir de la línea m, con incrementos de n. Estos parametros deben darse para que la instruccion sea aceptada. Para renumerar solo partes del listado en bloques, se añaden los parametros w y z que son la linea inicial del bloque y la última línea a renumerar. Ejemplos: RENUM 100,10 - renumera así todo el programa RENUM 3000,10,1000,2000 - renumera solamente el bloque desde las lineas 1000 a 2000 a partir de 3000 con incremento 10 Sentencias complementarias: son las que suelen tener otras versiones de Basic generalmente de Microsoft. Else (ecs + Q) sintaxis: IF ... THEN ... ELSE ... la sentencia que le faltaba al Basic Sinclair y que completa la sintaxis de la instrucción IF. On (ecs + T) sintaxis: ON exp GOTO/GOSUB a1,a2,...,an GOTO (ecs + G) y GOSUB (ecs + H) donde: exp = un valor numérico que indica adonde se saltará a1..an = lista de números de línea a saltar según exp la otra instrucción que muchos reclamaban que le faltaba al ZX Spectrum. Con esto el Spectrum ya tiene ON GOTO y ON GOSUB. Manejo de errores: Otra cosa que le faltaba al Basic de Sinclair, un capturador de errores. On Err (ecs + W) sintaxis: ON ERR e1{,e2,...} {sentencias} [CONTINUE] donde: e = una letra (a - z) o un solo dígito (0 - 9) que son los codigos asociados a los mensajes de error A diferencia de ON ERROR GOTO que debe ser puesto siempre al inicio de un programa, un ON ERR puede ser puesto en cualquier parte del listado donde halla mayores posibilidades de que ahi se produzca un error y puede haber mas de un ON ERR dentro del programa. Como toda sentencia del Basic Sinclair, su sintaxis es mas libre que la de TRAP u ON ERROR, pero al mismo tiempo limitado por sus propios parametros y es el de tener que dar los codigos de error a capturar. Mientras algunos BASICs añaden ERROR, ERR y ERL, que son para generar errores, leer el codigo del error o el numero de linea donde se da el error. El Basic de Arana solamente tiene ERR. Un pequeño ejemplo de su aplicacion: 10 ON ERROR GOTO 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 END 400 'Subrutina de captura de errores 420 PRINT "Numeros positivos, siempre" 430 PRINT "Pruebe de nuevo" 440 RESUME 20 Ahora en el Basic de Arana: 10 ON ERR A GOTO 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 STOP 400 REM 420 PRINT "Numeros positivos, siempre" 430 PRINT "Pruebe de nuevo" 440 GOTO 20 Tambien podemos reemplazar las lineas 10, 99 y 440 por: 10 ON ERR A GOSUB 400 99 GOTO 10000 440 RETURN Un buen uso de ERR es cuando se capturan varios errores con ON ERR y se llama a una sola rutina para su manejo. Con la ayuda de 'IF ERR=codigo THEN ...' podemos ir solucionando cada uno de los distintos casos de error capturados. Nota: A diferencia de ON ERROR GOTO que solamente captura los errores del programa en ejecucion, ON ERR puede capturar incluso errores de comandos directos mientras no se elimine la linea en la cual existe. Miscelaneas: pongo en este apartado a las dos ultimas sentencias que me falta mencionar. Mode (ecs + Y) sintaxis: MODE n donde: n = 0 (normal 32 col.) / 1 (64 col.) Los UDGs mantienen el tamaño normal incluso en modo 1. Permite usar 64 caracteres en pantalla o volver al modo normal de 32 caracteres. Su mejor efecto es que afecta a toda la pantalla tanto el canal "S" como "K" (la zona de INPUT). Seria el equivalente a WIDTH del GW-Basic. Swap (ecs + U) sintaxis: SWAP v1,v2 donde: v1 y v2 = nombres de variables Existe en BASICA y GW-Basic, muy pocas versiones de BASIC la tienen. Sirve para realizar transferencias cruzadas entre las variables v1 y v2 sin la necesidad de usar una tercera variable como intermediario. Pueden ser tanto numericas como de cadena. Mi experiencia con el programa Por alguna razón, una vez tipeado el listado de la revista, verificado, cargado todo y ejecutado, me he dado conque no admite AT, TAB, INK, PAPER, OVER, FLASH, BRIGHT, e INVERSE, imprimiéndose en pantalla un ? por cada uno de esos comandos. Excepto eso, todo funciona bien. Curiosamente la dirección de ATTR-P 23693, permite manipular los colores de la pantalla y si bien eso soluciona la cuestión color, aun queda el problema de posicionar el texto en la pantalla, pues AT y TAB no funcionan. A menos que se quiera trabajar con textos impresos hacia abajo como hace el M80 Basic para CP/M. Eso fue lo que obtuve tras tipearlo yo mismo, pero despues me encontré con una version existente en la pag. web PROYECTO BASIC ZX en la cual hay varios programas de las revistas ZX, TodoSpectrum incluido Microhobby, en formato TAP. Y esta versión si es plena mente operativa a diferencia de la que tipee yo. Para descargarlo hay que ir a la seccion REVISTAS/TodoSpectrum/13 ahi aparece con el titulo "un nuevo operativo para el Spectrum, pulsamos su boton de DESCARGA y lo bajamos con el nombre de "NuevoSO-ZXSpec.zip". Dentro se hallan 4 archivos TAP que son: LISTADO_01 - son los DATAs del codigo maquina del nuevo operativo LISTADO_02 - es el cargador Basic de la version de cinta LISTADO_03 - el cargador modificado para Microdrives LISTADO 4 (demo) - muestra la eficacia de ON ERR a 64 columnas. Version Microdrive Existe un cargador para cassette (la cual si ofrece AT, TAB y el manejo de atributos de pantalla) y otro para microdrive como ya vimos antes. No solo no captura los errores del MDR sino que al producirse un error del IF1, el S.O. se desactiva volviendo al BASIC ZX normal. La razon es que el IF1 no usa letras ni numeros asociados a los errores del MDR, que es lo que ON ERR necesita para su captura. Basta entonces con tipear 'Rand.Usr 61260' para reactivarlo. Debido a problemas de compatibilidad con el sistema operativo original del Spectrum, se hicieron los sigtes cambios al modo de obtener las sentencias: Auto (ecs + 2) Renum (ecs + 3) Else (ecs + 0) On Err (ecs + 1) Mode (ecs + 6) Swap (ecs + 5) On (ecs + 4) aparte del cambio de tecla, no hay mayor problema con los comandos excepto esta última ON. Pues para forzar el modo K hay que tipear ahora ": GOTO" o ": GOSUB" y luego retroceder para borrar los dos puntos. Con Opus Discovery El Opus D1 requiere del cargador para MDR. Tras cargar el programa, parece colgarse a veces, pero basta con hacer un BREAK y luego NEW para ver finalmente el mensaje inicial, indicando que ya podemos trabajar con el nuevo operativo. Al igual que sucede con Beta Basic, los errores de disco generan la aparicion de una letra minuscula indicando el tipo de error seguido del numero de linea en el que se da dentro de un listado o cero si es un comando directo, pero sin dar mensaje alguno. Y aunque no logra atrapar los errores del disco, el S.O. no se desactiva como con el IF1. Esto es debido a que el Spectrum usa letras mayúsculas para sus mensajes de error, y el Opus usa las minúsculas para los errores de disco. ON ERR usa letras minúsculas para atrapar los errores del Spectrum sin expansión. El problema es que la version cinta de Proyexto ZX, carga pero se cuelga o resetea todo con tan solo CAT 1. Y la version MDR cuelga todo apenas se carga y se queda con el mensaje en pantalla sin hacer nada mas. La unica version que admite es la que yo mismo tipee, pero ya no tengo atributos ni AT o TAB. Con Didaktik Mdos El Mdos del Didaktik también acepta el cargador del MDR, y en vez de los mensajes de error da la letra como con OPUS, pero a diferencia del Opus D1, si puede capturar los errores de disco que van desde la S hasta la Z. Algunas instrucciones de disco no son aceptadas, por ejemplo admite CAT solamente sin parametro alguno, lo que significa que estoy limitado a un solo drive. El otro dilema es que NEW resetea o cuelga el sistema. Mi version en cambio no sufre de esos problemas, pero igual me quedo sin atributos y sin AT ni TAB. Con Wafadrive Parece funciona con la version de cinta. Tras cargar, aparece el mensaje de Arana Soft 1984, pero el W.O.S se desactiva. Basta entonces hacer un NEW* y listo, pero el uso continuo de los comandos WOS tarde o temprano cuelgan o resetean el sistema. La version MDR parece colgarse tras cargar, pero basta hacer lo mismo que en el caso de Opus. Si el W.O.S. se desactiva basta un NEW*, no parece colgarse con el uso continuo de los comandos W.O.S, pero los mensajes y el CAT aparecen en las líneas de INPUT, no en las de PRINT, igual que sucede al usarse con Beta Basic. El Wafadrive al igual que el MDR desactiva al nuevo S.O. al mínimo error del W.O.S. Nuevamente debido a como ON ERR captura los errores. NEW resetea todo y NEW # elimina el programa en curso, pero me saca del Basic de Arana. Sin embargo USR 61260 genera un mensaje repetido del mismo usr mas varios LOADs que hay que borrar y luego pulsar ENTER para volver al Basic de Arana. Con +D y Disciple La versión de casete se cuelga con los comandos de disco del +D o Disciple, así como tampoco captura los errores pudiendo simplemente salirse del S.O. o peor aun colgarse. La versión de MDR (la version que yo tipee) permite usar todos los comandos del +D y no se cuelga cuando hay errores de disco solo devuelve "0: OK" pero los errores normales de Basic ya no los captura y pasa lo mismo que con la versión de cinta. La otra version MDR se cuelga apenas la cargo. Con Mb02 y TrDos Se cuelga con el MB-02+ de BusySoft. El Trdos corre con el nuevo SO dependiendo de la rom clónica usada, por ejemplo el Dgamma81.rom aunque algo inestablemente y solo permite entrar al modo Trdos para operar, pero no usar los comandos desde el Basic directamente. Con Spectrum 128 y +3 No es compatible con el Basic 128k. Solamente corre en modo 48k. Apenas carga va automáticamente a ese modo. Carga bien desde la cinta en el +3, pero al intentar hacer CAT hace que se cuelgue todo. Con clones y ROMs modificadas Funciona bien con la rom del Didaktik Kompak, TC2048, zxide, y diversas roms clónicas. No con la JGh.rom, la tk95, y la sc0.rom. Al +4.rom que permite tipear las sentencias letra a letra, le devuelve los tokens al estilo usual pero no hay modo de acceder a los demás comandos obtenibles por combinaciones de SS y CS pues ya no existen en esta rom. El 80-lec.rom y la GW.rom trabajan mejor pues aun tienen los tokens en sus sitios correctos de tipeo. Se cuelga con el sebasic.rom tras intentar pulsar una tecla, y tampoco es compatible con el sdos-64s.rom. Con Timex FDD 3000 Acepta la version para cinta. Se complementan perfectamente, incluido el TC-2048. A diferencia de Beta Basic que considera todos los errores de disco como si fuesen "C nonsense in basic" y los captura de ese modo, esta extension simplemente devuelve "0:Ok" en vez de mostrar cualquier mensaje de error de disco, eso es en modo comando directo, en cambio, si la orden de disco genera el error dentro de un programa, entonces da el numero de linea añadido al error asociado a "C ..." el cual si puede ser capturado por ON ERR. Incluso si el mensaje revelando el tipo de error nunca se ve, no es un problema, ya que aun asi se pueden capturar mediante las variables del sistema FDD que son TRAP y SYSERR. Y para cerrar... Despues de tanta prueba y error, parece ser que el unico sistema de discos con el que es plenamente compatible es el Timex FDD, como si hubiera sido hecho pensando en Timex. De lo contrario es mejor trabajar solo con cintas. Si bien no añade funciones nuevas a la libreria del Spectrum, es muy facil añadirselas mediante DEF FN, como es el caso de RIGHT$, MID$, TIME$ o MOD por ejemplo. Ahora un programa creado con el Basic de Arana puede ser ejecutado en otros entornos? Al menos para portarlo a Beta Basic basta con reemplazar sus comandos por sus equivalentes, como ELSE y ON GOTO. MODE por CSIZE, ON ERR a ON ERROR y SWAP debe ser reconvertido a LET v3=v1: LET v1=v2: LET v2=v3. Mejor aun si se crea un procedimiento SWAP en su reemplazo. Y eso seria todo. Un detalle es que el modo 64 columnas de Beta Basic solo afecta al canal "S" (de PRINT) y no a "K" (de INPUT) como si hace el Basic de Arana. (c)2018 - 2022 zx_if1@hotmail.com