ZX Spectrum 128k Del Basic 48k al Basic 128k zx-80 integer basic | zx-81 (t/s-1000) fp basic | ________zx spectrum basic________ | | ________|________________ | | | | ! |____etc,etc | | | | | | | | ts-2068 | | | | | basic | | ys megabasic | | | | | ql superbasic | | | | | | tk90/95 basic | | | | betabasic (1, 1.8, 3, 3.1, 4) |___128K basic (+2,+3,+2a/b) | | | | sam coupe basic | |___sea change | | |___open se basic Así como antes reuní toda la información posible publicada de modo disperso en libros y magazines sobre la compatibilidad y conversion del BASIC del ZX-80/81 al ZX Spectrum, esta vez he decidido poner todas las notas que reuní sobre el 128k y sus diferencias con el 48k en este artículo. Introduccion Era el año de 1985, y las 16 bits empiezan a surgir empezando por el QL de Sinclair y la Macintosh de Apple. Pero en el mundo de las 8 bits caseras, empieza la era de los 128k. Amstrad saca su 6128, Commodore su C=128, Atari el 130xe, El Elan Enterprise en modelos 64 y 128k, Acorn competiría con su BBC B+128. Tandy iba con su TRS-80 modelo 4D. Así estaba la cosa ese año. ¿Y qué planes tenía entonces el tío Clive para competir con sus rivales en el campo informático? Proyectos como Loki, Pandora o el famoso Super Spectrum que nunca salieron y se quedaron en el tintero. Tuvo que ser la muy hispana Investronica, la que diera el gran paso de hacer el nuevo modelo para Sinclair. Por dos razones: una porque ya era hora. Todo mundo esperaba con ansias una nueva maquina Sinclair que superase a la anterior. La otra, porque una ley forzaba un arancel a toda máquina que tuviese menos de 64k y encima no tuviese teclado adaptado al español. Así que el resultado fue: El 128k español Fue un mayo del 85, en el Sonimag de Barcelona donde Investronica hizo la presentacion del entonces nuevo 128k. A primera vista podía decirse que era la carcasa de un Spectrum + con la etiqueta 128k a un costado. Lo más llamativo era su teclado numérico independiente que se conectaba a la máquina mediante un cable tipo telefono. A las ya clásicas conexiones como son la de tv, mic, ear, bus expansión y la toma 9v, el 128k añade RGB similar al del QL,un RS-232 util para RED, impresoras seriales y MIDI así como el habitual botón de RESET del plus. En cuanto al teclado se caracterizaba por los sigtes cambios: ___ | | /\ /\ | | /||\ || /--| | || = CAP SHIFT \/ = CAPS LOCK \----| = ENTER CAMBIO = SYMBOL SHIFT MODO EXTENDIDO = EXTENDED MODE BORRAR = DELETE EDITAR = EDIT GRAF. = GRAPH PARAR = BREAK TRUE VIDEO es la palabra VIDEO en negro sobre fondo blanco INV VIDEO es solo VIDEO en blanco sobre fondo negro Los nombres de los colores en el teclado fueron traducidos. La Ñ sustituia a $ y la ñ al %. Tambien estaban los signos ¿ ¡ ü ç así como los acentos ´ y `. Al encenderlo, aparece el mensaje "(c) 1985 Sinclair Research Ltd" y "ESPAÑOL". Al pulsar ENTER, un cursor azul parpadeante aparece arriba de la pantalla, invitando al usuario a tipear algo, mientras al final de la misma aparece centrado, un texto indicando si se está en mayusculas o minúsculas. Si se pulsa cualquier tecla que no sea ENTER, el cursor aparece abajo en modo comando, esperando instrucciones. Como sea, el sistema esta listo para lo que el usuario desee. A diferencia de las otras máquinas de Sinclair, el 128k tiene un editor de pantalla completa, muy similar al de otros BASICs como el de ATARi, MSX o Commodore, pero no igual. El sonido sale directamente a la tv ya que no tiene speaker como el original 48k. Y todas las sentencias se ingresan letra a letra, excepto en modo 48k. Las nuevas sentencias del 128k Debido a que el Z80 no puede manejar más de 64k, toda la RAM está paginada. La RAM extra podia usarse como disco virtual de memoria. Para accesarla están las sigtes. instrucciones: CAT! a secas, muestra el catálogo de lo almacenado en el disco RAM. SAVE!, LOAD! con la misma sintaxis de sus contrapartes para cassette, sirven para salvar y cargar programas, codigo máquina, pantallas y datos. MERGE! igual que su versión para cassette, permite mezclar sólo programas BASIC. ERASE! borra cualquier archivo existente en el disco RAM. SPECTRUM comando usado para pasar del modo 128k al 48k sin perder el programa en memoria. Solo el contenido del disco RAM se perdía. No se ofrecía entonces opción opuesta, ir del 48k al 128k sin perder los datos. FORMAT sintaxis: FORMAT "P"; n donde n puede ser 50, 110, 300, 600, 1200, 2400, 4800 o 9600 establece la velocidad de transmisión de datos en n baudios, tanto para la impresora conectada al puerto serial, o incluso un modem. LPRINT, LLIST y COPY enviaban diraectamente a la impresora serial. Si se conectaba un modem puede leerse con INPUT #3 o mandar datos con PRINT #3. Nota: no se puede accesar a la impresora serial si antes no se la inicializa con FORMAT. Los comandos directos exclusivos del 128k español Finalmente esos comandos que muchos echaban de menos en el Spectrum. Con un pero, no estaban tokenizados como las demás sentencias del Basic Sinclair y se accede a ellas entrando primero al modo comando y tipeando solo la letra inicial ó la palabra completa más sus parametros. No importa si estan en mayusculas o minúsculas. EDITar sintaxis: E m Basta con tipear E seguido de un número para entrar en el modo de acción de lineas Basic. Tambien es válido tipear ED, EDI, EDIT, EDITA o EDITAR. NUMero sintaxis: N [m[,n]] donde: m = la línea inicial, de omitirse será 10 por defecto n = el salto ó incremento, opcional, es 10 por defecto Renumera todo el listado afectando incluso a GOTO, GOSUB y RESTORE. BORrar sintaxis: B m,n donde: m = la línea inicial n = línea final Borra el listado por bloques de m a n líneas. Genera mensaje de error de omitirse el último parametro. Nota: de usarse cualquiera de estas ordenes directas como sentencias dentro de listados, o simplemente tipeandolas en la pantalla superior, genera el error de "variable indefinida". El teclado numérico extra: una herramienta multiuso, puede ser usado en el modo calculadora, edición, incluso programarse como mando de juegos. ________________________ | Sinclair | | | < cursor izq. | | > curs. der. |_______________________| v curs. línea abajo ||inser| ^ curs. lín. arriba | / | * | ( | ) | vv salta una pagina abajo |-----------------------| ^^ sube una pag. | < | v | > |cmnd | << cursor palabra a la izq. | 7 | 8 | 9 | - | >> cursor pal. der. |-----------------------| !<< salta al comienzo de línea |<>bor| ^^ | vv | >>! salta al final de la línea | 4 | 5 | 6 | + | !^^ comienzo de texto |-----------------------| vv! final del texto |bo!<<|bo>>!| !^^ | ° | | 1 | 2 | 3 | ! | inser - activa/desactiva modo inserción |-----------------| ! | cmnd (comando) - edición o calculadora | ° cambio | vv! | <-! | cambio + cursores para borrar datos | 0 | . | = | |-----------------------| 0 , intro (botones disparo para juegos) Comandos extras de teclado. Además de las opciones de edición que ofrece el teclado numérico extra, también hay unos atajos similares desde el teclado mismo: m. + 1 = entra o sale a modo comando directo m.ext + p = sube al inicio de la linea previa c. i = baja al final de la sigte. línea m.ext + c. k = borra caracter sobre el cual está el cursor m.ext + c. 2 = va al comienzo de la linea m.ext + m = va al fin de la linea gr. + x = va al final de la linea gr. + y = va al comienzo de la linea donde: m. = tecla mayusculas c. = tecla cambio m.ext = modo extendido gr. = graf Modo calculadora Para entrar en este modo primero hay que pasar a modo comando, pudiendo hacerse cualquier operación de cálculo matemático ya sea con números o con variables siempre que estas existan en la memoria activa. En el 128k ya no es necesario tipear PRINT 5*2500, PRINT SQR x, para que se ejecute el cálculo, en comparación con el 48k. Modo mini block de notas Para entrar a este modo basta con usar EDITar + una variable de cadena. Si el documento ya existe, se continuará con su edición, de lo contrario, se creará uno nuevo. Para corregir errores, insertar o borrar textos, hay que usar las opciones del teclado extra. El editor tiene tambien una opción de sangrado automático para generar un margen a la izquierda. Una vez terminado el texto, se sale presionando EDITar o MAYUSC. + 1 Un texto creado por ejemplo con EDIT e$, puede ser impreso mediante el uso de LPRINT e$, tambien es posible salvarlo en cinta mediante SAVE ... DATA e$() y recuperado más tarde con LOAD ... DATA e$(), lo mismo con el disco RAM mediante SAVE! / LOAD! ... DATA e$(). PLAY sintaxis PLAY a$,b$,c$ donde a$, b$ y c$ son las cadenas con subcomandos de sonido para manejar los tres canales de sonido del chip AY. Esta sentencia de sonido merece todo una mención aparte. Por el momento solo decir que estaba presente en casi todas las versiones de BASIC Microsoft como el GW-Basic o el MSX-Basic y Dragon. Los subcomandos son los sigtes para cualquiera de los canales: cdefgab CDEFGAB octavas $ baja nota produciendo un bemol # Sube nota produciendo un sostenido O fija el rango de octava de 0 a 8 1-12 fija la longitud de las notas & Denota una pausa N Separa dos numeros V fija volumen de notas del 0 al 15 W Fija el efecto de volumen del 0 al 7 U activa el efecto de volumen en cualquier cadena X Fija duración del efecto de volumen del 0 al 65535 T Fija tiempo musical con valor de 60 a 240 ( ) contiene frase repetida ! ! contiene un comentario H deja de sonar M selecciona canales del 1 al 63 Y activa un canal MIDI del 1 al 16 Z usa serie de numeros enviandolos como codigo de programacion MIDI El 128k británico El Reino Unido tuvo que esperar hasta febrero del 86 para ver finalmente el 128k, pero el producto británico resultó diferir de su equivalente español. Menú Por fuera, era el mismo Spectrum 128k con las teclas en inglés, pero al prenderlo, la pantalla inicial era: +-----------------------------------------+ | | | | | | | | | __________________ | | |128______________| | | |/Tape Loader/////| | | | 128 BASIC | | | | Calculator | | | | 48 BASIC | | | | Tape Tester | | | +-----------------+ | | | | | | | | | | | | (C) 1986 Sinclair Research Ltd | | | +-----------------------------------------+ El menú inicial nos permite elegir entre cargar un programa de cinta, elegir entre el basic 128 o el 48, ir al modo calculadora, o probar si la lectora de casete cargará correctamente o no las cintas. Ahora, los comandos extras de edición fueron reemplazados por un menú de opciones al que se accede pulsando EDIT o Caps S. + 1: __________________ |_Options_________| |//128 BASIC//////| | Renumber | | Screen | | Print | | Exit | +-----------------+ La opción RENUMBER (renumerar) reemplaza al comando NUMero del 128 español. SCREEN (pantalla) mueve todo el listado y el ingreso de datos a las dos últimas líneas, dejando libre toda la pantalla de edición poniéndola en modo de ejecución. Un pobre reemplazo al comando EDitar del 128 hispano. PRINT (imprimir) manda todo el listado a la impresora por defecto. EXIT (salir) permite volver al menú inicial sin perder el programa. 128 Basic, en cambio regresa al pto. del listado en que se activó el menú. El mini editor de textos también desapareció, junto con el comando Borrar. El teclado numérico extra no venía con la máquina, pero podía comprarse por separado, completamente traducido al inglés. Sinclair Research aumentó los comandos extras de edición, resultando: ext + s. J = avanza a la sigte. palabra ext + i = retrocede a la palabra anterior s. i = baja cada 10 lineas ext + p = sube cada 10 lineas ext + s. k = borra caracter delante del cursor ext + k = borra todo hasta el pto. del cursor ext + j = borra desde el cursor hasta el final de la linea ext + w = borra palabra a la derecha ext + e = borra palabra a la izq. ext + n = va a la primera linea del listado ext + t = va hasta la ultima linea del listado ext + s. 8 = opcion screen del menu edit ext + s. 2 = va al comienzo de la linea ext + m = va al fin de la linea gr + w = va al principio del listado gr + v = va hasta la ultima linea del listado gr + z = opcion screen del menu edit gr + x = va al final de la linea gr + y = va al comienzo de la linea donde: ext = tecla extended mode s. = symbol shift gr = tecla graph BetaBasic 4 es la mejor expansión al Basic 128k, ya que añade los comandos que le faltan como son RENUM, EDIT y DELETE y añade AUTO y muchas más sentencias a las ya mencionadas. El Microdrive y los sistemas de disco como el OPUS, +D o BETA128 enriquecen más el BASIC al añadir la posibilidad de manejar ficheros OPEN/CLOSE. 128k +2 Cuando AMSTRAD compró toda la línea de computadoras Sinclair, muchos esperaban que el proyectado Super Spectrum sería fabricado por ellos, pero en cambio nos terminaron dando una versión del 128k, pero con el teclado más semi profesional que el que Sinclair nos tenía acostumbrados y con una lectora de cintas (llamada DATACORDER) incorporada en la carcasa al estilo de su CPC-464 y con una ligera modificación en su pantalla de presentación y el nombre de +2. Eso fue en el mismo año 86. +-----------------------------------------+ | | | | | | | | | | | __________________ | | |128______________| | | |/Tape Loader/////| | | | 128 BASIC | | | | Calculator | | | | 48 BASIC | | | +-----------------+ | | | | | | | | | | | | (C) 1986, 1982 Amstrad Consumer | | Electronics plc | +-----------------------------------------+ Al menú inicial se le quitó la opción "tape tester" y se le puso al final el copyright de Amstrad. Excepto eso, era un 128k en todo lo demás. El menú de opciones seguía siendo el mismo y añadia además puertos para joysticks que se leian con la norma Sinclair pero solo pueden usarse con mandos exclusivos de Amstrad mismo. Innecesario decir que había que hacer un adaptador para conectar mandos tipo Atari al +2, o conectarle una interface de joystick compatible. Tenía aun el conector del teclado numérico extra, por lo que todavía era posible de conectar y usar con el +2. Todos los periféricos para el 128k y software, son compatibles con el +2. Debido a que no hay comando NUM en el 128k británico, en el manual del +2 se publicó la sigte rutina: 9000 INPUT "Linea inicial",st 9010 INPUT "Salto",sp 9020 LET hst= INT (st/256) 9030 LET hsp= INT (sp/256) 9040 POKE 23413,st-256*hst 9050 POKE 23414,hst 9060 POKE 23415,sp-256*hsp 9070 POKE 23416,hsp 9080 PRINT "Pulsa EDIT y elige la opción Renumerar" Hisoft basic 128 y +2 El compilador de Hisoft ofrece además las sigtes. combinaciones de teclas: tv + > = va al fin de la linea tv + < = va al comienzo de la linea tv + ^ = comienzo del texto tv + v = final del texto iv + > = palabra a la derecha iv + < = palabra a la izq. iv + ^ = 10 lineas arriba iv + v = 10 lineas abajo s. + > = borra car. a la izq. s. + < = borra car. a la der. tv + iv + ENTER = 48k edit iv + s. + < = borra palabra a la izq. iv + s. + > = borra pal. a la der. tv + s. + < = borra hasta el comienzo de la linea tv + s. + > = borra hasta el final de la linea donde: tv = true video iv = inverse video s. = symbol shift >, v, <, ^ = los cursores La versión española del +2 muestra los sigtes. cambios al teclado: MAYUSCULAS = CAP SHIFT BLOQ MAYS = CAPS LOCK INTRO = ENTER SIMB. = SYMBOL SHIFT EXTRA = EXTENDED MODE BORRAR = DELETE GRAF. = GRAPH VIDEO NORM = TRUE VIDEO VIDEO INV = INV VIDEO solo EDIT y BREAK permanecen sin cambio alguno Los nombres de los colores fueron quitados. Estan solamente los signos ¿ ¡ Ñ y ñ pero en teclas distintas a las que Investronica les asignara originalmente. Pt reemplaza al signo de la libra esterlina. Al encenderlo aparece el menu inicial con los textos traducidos. De este modo "tape loader" es "Carg. cinta". Y el menu options pasa a ser: __________________ |_Opciones________| |//128 BASIC//////| | Renumerar | | Pantalla | | Imprimar | | Salida | +-----------------+ Nota: FORMAT "p" es opcional, ya que el sistema trabaja por defecto en 9600. (Segun el manual) Basta con conectar la impresora y empezar a usarla. 128k +3 Era el año 87 y Amstrad saca la que fue su segundo Spectrum y el primero hasta el momento con un sistema operativo de discos oficial. Compatible CP/M, fue la unica Spectrum 3 en 1, al estilo del Commodore 128. El Basic 128 ahora llamado basic +3 añadia a los comandos ya existentes, nuevas instrucciones para el manejo del disco. +-----------------------------------------+ | | | | | | | | | | | __________________ | | |_128_+3__________| | | |//Loader/////////| | | | +3 BASIC | | | | Calculator | | | | 48 BASIC | | | +-----------------+ | | | | | | | | | | | | (C) 1982, 1986, 1987 Amstrad Plc. | | Drives A: and M: available. | +-----------------------------------------+ El disco RAM pasaba ahora a ser el drive "m:", por "m" de memoria ram. El teclado numérico extra ya no podía usarse con el +3 y +2a/b, debido a que las rutinas de la ROM para su uso fueron eliminadas. Debido a modificaciones hechas a la ROM y al bus de expansión, se perdió la compatibilidad con muchos de los programas existentes para el 128k, los cuales debian ser modificados para que corran en el +3. Casi todos los perifericos como la Interfase 1 quedaron imposibilitados de usarse. Mientras SAVE LOAD y MERGE pasaban a ser adaptadas al manejo de discos, VERIFY quedaba limitado a cintas. Y los comandos de Microdrive FORMAT, MOVE, ERASE y CAT eran a su vez adaptados para funcionar con los discos del +3, además de nuevos comandos de disco. El dilema: solo tiene la opción de salvar matrices DATA en disco pero no ficheros OPEN/CLOSE de ningún tipo. El otro dilema es que en modo 48k no hay acceso a los discos, ni a la RAM extra y debido a que no aceptaba otros sistemas de disco tan facilmente, estabamos limitados a trabajar con cintas mediante la toma TAPE/SOUND. La toma del teclado numérico pasó a llamarse AUX y sirvió para otros fines. Además de los puertos para conectar joysticks y el puerto serial para modems e impresoras, el +3 añadía un conector para un segundo disco llamado DISK B:. así como un puerto paralelo para impresoras Centronics. Por defecto, todos los comandos de impresión: LPRINT, LLIST y COPY son redirigidos al puerto paralelo. Siendo los nuevos comandos para su uso los sigtes: FORMAT sintaxis1: FORMAT LINE n donde n puede ser 50, 110, 300, 600, 1200, 2400, 4800 o 9600 establece la velocidad de transmisión de datos en n baudios solo para serial. sintaxis2: FORMAT LPRINT n$ donde n$ puede ser "R" o "C", por rs232c y centronics este último comando permite elegir cuál tipo de impresora vamos a usar. De no usarse FORMAT, se envia todo al puerto paralelo por defecto. Cuando n$ es "U" o "E" por unexpanded y expanded. Estas órdenes se mandan antes de enviar datos a la impresora, el primero es para enviar códigos ESC (chr$ 27) con LPRINT. La otra opción es para enviar listados sin modificar con LLIST. COPY sintaxis: COPY [EXP {INVERSE}] estas nuevas opciones permiten enviar volcados de pantalla a la impresora en modo expandido o inverso. POKE 23419,8 en caso de que no imprima correctamente encjado a un A4. No hay BetaBasic para +3 y el +3 DOS carece de comandos para manejo de ficheros, pero Hisoft Basic añade la posibilidad de trabajar con ficheros secuenciales OPEN/CLOSE. 128 +2 a/b y +3b El +2a fue un reemplazo al viejo +2, y como tal solamente contaba con una lectora de cinta incorporada al igual que su antecesor, pero reteniendo la ROM del +3 y por lo tanto era posible añadirle una unidad de disco para que operase como un +3 completo. El problema es que no tiene la salida para conectar el segundo disco B (hay que abrir la carcasa y hacerle modificaciones al hardware para acceder a ello), pero retuvo la toma para TAPE/SOUND extra (o sea, podemos usar una segunda grabadora de cintas) y el conector AUX. El +2b en cambio carecia del circuito controlador de discos (aquí ya no hay modo alguno) y el último +3b, carecia de conexión interna para DATACORDER. Nota: el +3 y +2a retienen las teclas de edición añadidas al +2. Y si se usa el Hisoft Basic, se aaden las que éste ofrece. Todos los comandos de disco están redirigidos al disco RAM "m:", a menos que se le instale una unidad de disco "a:". ROMs modificadas y clones Después que Amstrad dejase de producir máquinas Sinclair, otros continuaron su producción generandose toda clase de clones del 128k, siendo la ex URSS donde más se fabricaron y mejoraron, pero reemplazando la opción de cintas por la inclusión del tr-dos y el sistema BETA128disk. Y excepto que usan TRdos en vez de +3dos, ninguno añade algo nuevo al Basic del Spectrum. Entre esos muchos clones tenemos al PENTAGON 128k (1991), cuyo menú es: +-----------------------------------------+ | | | | | | | | | __________________ | | |128______________| | | |/Tape Loader/////| | | | 128 BASIC | | | | Calculator | | | | 48 BASIC | | | | Tr-Dos | | | +-----------------+ | | | | | | | | | | | | (C) 1986 Sinclair Research Ltd | | | +-----------------------------------------+ Otros clones del 128k fueron: Pentagon 128K 2+ (1991 by ATM) Pentagon 128K 3+ (1993 by Solon) Pentagon 1024SL v1.x (2005 by Alex Zhabin) Pentagon-1024SL v2.x (2006 by Alex Zhabin) Pentagon ver.2.666 (2009 by Alex Zhabin) ATM (ATM Turbo - 1991) Bi Am ZX-Spectrum 128 Ella Ra o Elara-Disk 128 Kay 1024 Kvorum 128+ Moskva 128K Scorpion ZS-256 HC91+ (HC128) clón rumano de Ice Felix. Excepto este, todos los demas son rusos. La mayoría añaden memoria extra y modos gráficos que el 128k de base no tiene. Compatibilidad en suma Para saber si un Spectrum es o no 128 debería bastar la sigte. línea: IF PEEK 75 = 191 THEN PRINT "este no es un SPECTRUM 128" Pero algunas ROMs modificadas como: la rom 80lec y el no oficial +4 devuelven 252, la rom del inves+ da 110. Esta rutina ofrece más información que lo anterior: 10 IF PEEK 75 = 110 THEN GOTO 40 20 PRINT "este no es un SPECTRUM 128" 30 STOP 40 LET x = INT(PEEK 23611 / 16) 50 LET z = 128 60 IF x/2 = INT(x/2) THEN LET z = 48 70 PRINT "este es un SPECTRUM 128"'"en modo ";z;"K." Nota: la rutina fue publicada en ZX Computing Monthly - May 1986 Texto inverso y colores en el listado En el Basic 48k es posible ingresar colores o textos inversos al listado directamente desde el teclado. El Basic 128k no, obligando al usuario a usar ya sea el comando INVERSE o su equivalente CHR$ 20. Lo mismo con los colores. Uso de palabras reservadas en el listado En el 48k es posible tipear cosas como LET print = 1, y hacer enseguida PRINT print. El 128k no permite hacer eso, por lo que la línea no es admitida hasta que uno corrige el nombre de la variable. Otra cosa que se puede hacer en el 48k, es usar palabras reservadas dentro de textos como por ejemplo: LET a$="11":PRINT VAL("BIN"+a$). En el 128k esa línea devolverá error, ya que la palabra BIN no será tokenizada y por lo mismo no será reconocida. Hay que reemplazarla por: PRINT VAL(CHR$ 196 + a$) Otro ejemplo: SAVE "codigo BIN" CODE ... debe reemplazarse de nuevo por: SAVE "codigo"+ CHR$196 CODE ... y así con todas las palabras Basic dentro de cadenas de texto. El uso de UDGs Mientras que el Spectrum 48k tiene 21 UDGs, el 128k solo puede usar 19, ya que usa los dos últimos codigos correspondientes para las palabras PLAY y SPECTRUM. Sin embargo, es posible recuperar y usar esos dos UDGs mediante un POKE 23611,205. Su valor normal es 221. Salvar cadenas no dimensionadas Tomemos el sigte ejemplo: LET a$="abcde" la salvamos a cinta mediante SAVE "txt" DATA a$() la recuperamos despues con LOAD "txt" DATA a$() pero al intentar algo como PRINT a$ el Basic 48k responde con subindice erroneo (suscript wrong). Razón: una variable de cadena normal se almacena en memoria por su código ASCII, en este caso a$ es 65, pero si fuera una matriz DIM, entonces es el codigo + 128, o sea, ahora es 193 en vez de 65, seguido de su dimensión. SAVE/LOAD DATA esperan trabajar con matrices, así que si bien salvan la cadena simple, al cargarla la transforman pero como carece de dimensión, se genera el error dicho. Ahora, ¿podemos decir que la variable es irrecuperable? En realidad no. El truco es buscar en el area de variables dónde se halla su codigo ASCII y restarle 128 para convertirlo en una variable normal. Y sólo entonces se podrá leer o modificar sin generar error alguno. Esto ya no sucede más en el 128k. Cualquier variable de cadena de extensión libre no creada con DIM, puede ser salvada y recuperada mediante SAVE/LOAD DATA $, o en la RAM mediante SAVE!/LOAD! DATA $. De hecho, cualquier cadena simple salvada en modo 48k, puede ser recuperada sin error en modo 128k. Curiosamente no pasa igual si se salva a disco, ya sea OPUS, Beta128 o el +D. En suma, el 128k solo salva y carga bien a cinta o disco RAM. Ahora si queremos evitarnos todo este lío con las variables y queremos que la cadena se lea en cualquier versión de Spectrum, habría que hacer: DIM b$(LEN a$): LET b$=a$: SAVE "txt" DATA b$() La línea 0 mientras que es muy facil de crear y usar en listados en modo 48k, el 128k no la acepta, afectando al listado en modo editor. Para deshacerse de ella hay que usar la opcion 'renumerar' en todas las versiones de 128k, incluido el +3, o ir a modo comando y tipear simplemente 'N' en el original español. Del 128 español al 128 inglés Respecto al texto inverso y colores en el listado mencionado antes, dijimos que es imposible de hacer en el 128k y sucesores. Pero eso no es cierto para el 128k español, el cual sí permite: 10 PRINT "[video inv] texto [vid.norm.]":REM inverse 20 PRINT "[extendido+ mays.9] texto [extendido+ mays.8]":REM flash 30 PRINT "[extendido+ 9] texto [extendido+ 8]":REM bright 40 PRINT "[extendido+ mays.1] texto [extendido+ mays.0]":REM ink en pantalla aparecen siempre como: 20 PRINT "GG texto GG":REM + el efecto deseado entre las GG. Al igual que el 48k, permite ingresar los colores como vimos en el ejemplo anterior: extendido + 1 = papel azul extend. + mays. 1 = tinta azul 2 = rojo 2 = roja 3 = magenta 3 = magenta 4 = verde 4 = verde 5 = cyan 5 = cyan 6 = amarillo 6 = amarilla 7 = blanco 7 = blanca 0 = negro 0 = negra Y sobre el uso de palabras reservadas en el listado tambien imposible de tipear en modo 128k, nuevamente el 128k español si permite al menos usar nombres de instrucciones Basic como variables, siempre que la sentencia este en mayúsculas y la variable en minúsculas. De este modo LET print = 1 y PRINT print, son válidos de tipear. En cuanto a salvar cadenas no dimensionadas, posible de hacer en el 128k, +2 y clones como Pentagon, es debido a que el original 128k de Investronica modificó la ROM para poder salvar los textos creados por el comando Editar. Y esa facilidad se pasó al 128k inglés a pesar de que este carecía de la edición de textos de cadena. A la hora de tipear, el Spectrum español permite: 10IFA=2THENPRINT"TODO CLARO"+CHR$35 y en pantalla automáticamente uno ve: 10 IF A=2 THEN PRINT "TODO CLARO"+CHR$ 35 Luego si uno tipea: 20LETX=20:LETB=0:PRINTB:IFA=2THENLETX=10 tras pulsar INTRO: 20 LET X=20 :LET B=0 :PRINT B :IF A=2 THEN LET X=10 En cambio el 128k británico y sucesores no permiten el primer ejemplo a menos que uno lo tipee así: 10IF A=2THEN PRINT"TODO CLARO"+CHR$35 es decir que requiere que las sentencias se separan por espacios entre sí, de lo contrario nunca admitirá esa linea. Y el segundo ejemplo: 20LET X=20:LET B=0:PRINT B:IF A=2THEN LET X=10 ni siquiera separa en nueva línea con margen tras los ":" Debido a esto, en casos de líneas múltiples como el segundo ejemplo, si el cursor está al comienzo de tal línea, pulsar ENTER me hace ir bajando cada sentencia hasta la última. Si lo que quiero es abandonar la línea y no explorarla, solamente queda hacer EDIT, para ir al final de la pantalla y poder así tipear algún comando. En la versión británica, en cambio, basta con pulsar ENTER para abandonar la línea en que se está. "<>", ">=" y "<=" en el 128k. En el 128k inglés y sucesores, si uno tipea algo como: a>=b, al pulsar ENTER, aparece con espacios así: a >= b y lo mismo pasa con '<=' y '<>' a diferencia del original español, que las muestra tal como se ven en el modo 48k. Otra del 128k británico, si uno tipea algo como: a>b1 tras ENTER vemos en pantalla: ab>1 lo que obliga a tipearlo del modo sigte. para que se muestre correctamente: a > b1 ó a> b1. Y otra más, mientras que tipear: PRINT VAL a$=b es aceptado, no así: PRINT VAL a$>b el cual debe ser tecleado como sigue: PRINT VAL a$ > b incluso hay que pulsar hasta dos veces ENTER antes de que la acepte por fin. El +3 en cambio solamente la acepta forsozamente así: PRINT VAL (a$) > b El 128k de Investronica permite 22 líneas en modo editor, a diferencia de la versión inglesa que sólo deja 20 líneas en pantalla de edición. PRINT# no es aceptada por la versión británica, a menos que se tipee PRINT #. Lo mismo pasa con INPUT# e INKEY$#. Eso no ocurre con el 128k español. VERIFY! sintaxis igual a su equivalente de cinta considerada innecesaria con el disco RAM y por lo mismo no documentada. En el original 128 español da OK siempre que el archivo figure en el CAT!. Devuelve error de "fichero inexistente" en caso contrario. En la versión británica y sucesores, carga como LOAD! el archivo si existe. Su equivalente +3 devuelve ok, incluso si el archivo no existe. Ancho un cuarto comando extra no documentado debido a que nunca fue completado. Y por lo mismo nunca implementado. Debia usarse para fijar el ancho a usar por la impresora serial. sintaxis: A x donde: x = numero de columnas del dispositivom serial si x es 0, menor de 0 ó mayor de 9999, se genera error de variable indefinida. Un "bug" heredado del 128 al +2 Este "bug" afecta a las matrices de cadena cuando son salvadas y cargadas en el disco RAM. El "bug" no afecta las matrices numéricas. No recuerdo haber leido mención de esto antes, pero si alguien hace: DIM a$(5) LET a$="alpha" PRINT a$, LEN a$ Si esto se salva a cinta o a disco, no pasa nada, todo normal. Pero: SAVE!"a$" DATA a$() y luego recuperamos esa misma variable con: LOAD!"a$" DATA a$() La matriz ha sido convertida a cadena simple de 8 caracteres de largo, con los tres primeros caracteres conteniendo 1 el primero, significando que era unidimensional, los otros dos contienen el largo, en este caso 5 y 0. Para recuperarla correctamente basta con hacer a$(4 TO). Por lo mismo, si hacemos por ejemplo: DIM a$(10,5) tras ser salvado al disco RAM, luego de ser cargado, se convierte en una cadena de 10x5+5 = 55 de largo. Siendo sus primeros 5 signos: ????? donde el primero es ahora 2 indicando que era de dos dimensiones, los dos sigtes. almacenan el valor 10 y los dos últimos el valor 5. Lo que antes era una matriz ahora es una cadena simple, y para leerla hay que hacer primero a$(6 TO) y dividir sus componentes con a$(x TO x+4). Conectando impresoras: ZX vs. serial La impresora ZX puede conectarse al 128k, pero solo es reconocida en modo 48k. El 128k usa el area de buffer de impresora para almacenar variables y rutinas de paginado, debido a eso, en modo 128k solo puede usarse una impresora serial, a la cual es enviada toda la información mediante COPY, LPRINT y LLIST. Cuando uno pasa del modo 128k al 48k, y activa la impresora ZX, se encuentra con que imprime mal, la primera vez que se la use, tras un comando SPECTRUM. Debido a que el buffer de la ZX no se limpia al pasar al 48k con SPECTRUM, quedando restos de las rutinas antes mencionadas en esa area. Un problema con la conexion de impresoras mediante el puerto serial, es que el +2 no envía el codigo de escape CHR$ 27 ESC a la impresora en curso. Para evitar el filtrado de codigos que causa el problema mencionado, hay que hacer los sigtes: POKE 23349,38: POKE 233350,8 (*) y para obtener el equivalente al canal "b" del Interface 1, basta con: POKE 23349,194: POKE 233350,8 (*) (*)pokes publicados por la revista española Microhobby 137, p.30 Los sistemas de disco y el 128 El Beta128 y el trdos, funcionan con todos los 128k, y parece que eso incluye al +2a y +3, tanto en modo 128 como 48. (+) +D y Disciple funcionan bien con cada version, excepto +3 y +2a, estos requieren de una adaptación con POKEs para que reconozcan al +D. Opus Discovery permite usar el disco RAM incluso en modo 48k, siempre que se inicialise primero con FORMAT como disco 6. No funciona con +3 y +2a. El Wafadrive es accesible solamente en modo 48k. Incluso con +3 y +2a. (+) El D40/80 del Didaktik funciona en modo 48k. No funciona con +3 y +2a. MB-02+ reemplaza totalmente a las ROMs del 128k, +2, +3 y +2a. El 128 fue hecho manteniendo su compatibilidad con la Interface 1 y los Microdrives. El +2 y clones rusos como Pentagon también lo son, pero no el +3 y +2a. El Timex FDD-3000 debería correr sin problemas con el 128k (*) y +2, ya que hay una versión modificada para que corra con el +3 y por ende sí debería funcionar tambien con el +2a. (+) NOTA: probado en el emulador REALS. (*) Nota 2: comprobado recientemente en FUSE para FDD-3000 Por último: He encontrado en internet, información relacionada con el 128k, una es la de la página http://www.fruitcake.plus.com/ "SINCLAIR ZX Resource Centre" que en su sección sobre el 128k enseñan como ampliar el BASIC 128 con nuevos comandos. En esta misma WEB hay también ROMs modificadas sin bugs del 128k británico y español. La otra es la existencia del 128Ke, que para mi es más un +2a "tuneado" para que sea más compatible con el 128k original. Para ello, hay que hacerle unas modificaciones a nivel hardware como: la entrada de audio, el conector del joystick, la salida de video compuesto, el bus de expansión para compatibilidad con el Interface 2. Y finalmente reemplazar la ROM, ya sea con una ROM del 128k original, para una mayor compatibilidad, ó con una del +3e para poder operar con discos duros u otro sistema de almacenamiento más actual. (c) (última actualización 2020) zx_if1@hotmail.com