Del UK-101 al ZX Spectrum. A MODO DE INTRODUCCION Este programa aun no se halla en los archivos del "World of Spectrum", pero si figura en los archivos del CGC o CSSCGC por "comp.sys.sinclair Crap Game Competition", y esta es su ficha en la página "http://www.yoursinclair.co.uk/csscgc/": Autor: James Smith (incluido el MTV de Gavin Callard) Archivo: UK101-More.zip Año: 2008 Posición: 55 Formato: Timex TC2048, ZX Spectrum 128K, ZX Spectrum 48K Descripción: Otra vez, la CGC ha sido bendecida con otro verdadero emulador de James Smith, alias Jimmy. Este es un emulador del Compukit UK101, una computadora de 1979, ofrecida en kit basado en el 6502. Gavin Callard nos ha proveido de otro port de su juego "More Tea Vicar", especificamente para esta plataforma. El archivo en zip contiene el emulador en formato cinta (incluye un juego llamado "hectic") además de un snapshot (que incluye el juego "More Tea Vicar"). Recomendamos que lean antes el "instructions.txt" incluido en el archivo zip, el cual contiene info interesante sobre este sistema, así como las instrucciones para ejecutar el emulador. El programa corre en 48k estandar o 128K. En este último toma ventaja de su RAM extra. Pero, para mostrar todas las columnas de texto del UK101, el sistema ideal es el Timex TC2048, por ejemplo, usando el emulador EightyOne. Se puede ejecutar "online" en la sección "Golden Goose Arcade". La versión con el juego "MTV" se ejecuta automaticamente. Para jugar la versión con el juego "hectic", hay que caragar el archivo "UK 101 emulator (with hectic game)" en el emulador ZZ Spectrum Java. Una vez cargado, pulsa 'C' para un arranque en frío. A las preguntas "MEMORY SIZE?" (cantidad de memoria) y "TERMINAL WIDTH?" (ancho de terminal) se puede pulsar simplemente ENTER. Ante el mensajje OK, solo tipea LOAD . Al sigte. OK, pulsa symshift-SPACE. (CTRL-SPACE en la mayoría de teclados PC). En el hipervisor de la máquina, pulsa 'P' para correr la cinta. El juego demora en cargar, eventualmente se auto ejecuta, y entonces aparecerá el mensaje "INSTRUCTIONS?" (instrucciones). ¡Ahora sí diviértete jugando 'hectic'! Comentarios: Esto es lo grandioso en la CGC, dos personas colaboran para brindarnos algo que llame nuestra atención. De hecho la podríamos juzgar como algo puramente de James, pero el crédito debe dársele a Gavin Callard también por tomarse el desafío de portar su juego a esta oscura plataforma emulada. Para dejarlo en claro - Jimmy solamente escribió el emulador, Gavin Callard en cambio escribió el juego MTV para que corra en dicho sistema. En cuanto al emulador mismo, repetimos, es un verdadero y genuino emulador y otra impresionante hazaña técnica de parte de Jimmy quien se ha construido para sí mismo una reputación of ofrecer títulos que son demasiado buenas para la CGC. Por supuesto que lo disfrutamos realmente. ¡Yo nunca supe lo que era un "UK101" hasta que esto nos fue ofrecido! Es mejor ejecutarlo en un Timex, para poder ver todas las columnas de texto del sistema emulado. Veredicto: Un programa muy bueno, pero por favor programen algo atroz para la sigte. CGC, ¡para que sepamos que uds. pueden hacer también programas atroces! Y eso es lo que dicen en el CGC respecto al emulador, ahora paso a la traducción del texto original en inglés, que el mismo autor nos ofrece de su programa. Abreviaturas elegidas en esta traducción: SS = symbol shift CS = caps shift SPC = tecla espacio PARTE I Emulador del Compukit UK-101 para el ZX Spectrum El emulador UK101 y el nucleo del 6502 fue escrio por "Jimmy". Gracias también a Gavin Callard por tomarse el tiempo en aprender otro dialecto del BASIC para poder escribir otra version de "More Tea Vicar". Esta versión MTV es la primera que se ejecuta en una computadora de 1970 y también es la primera que se ejecuta en una basada en el 6502. Requerimientos: Este emulador se ejecutará en un ZX Spectrum 48k estandar, pero solamente se podrán ver 32 x 16 caracteres en la pantalla. Para verlo en su original 64 x 16 se necesita una máquina con el chip gráfico de Timex (auto-detectado por el emulador UK101 - use el TC-2048 en emuladores). Los 128k también son soportados, y su memoria extra es usada para permitir que programas de mayor tamaño sean SAVE/LOAD (16K en vez de 2K). 1) ¿Qué es el Compukit UK101? El Compukit UK101 salió en 1979 como un kit, gbricado por COMP Components en New Barnet, Inglaterra por £219+VAT. Usaba la CPU 6502 @ 1 MHz y venía ya con 4K o con 8K de RAM. Y 1K más de video RAM, a 64 columnas x 16 líneas. También tenía 5 ROMs - 4 para el Basic de 8k y el último contenía al monitor de 2k. La máquina era una simple placa PCB - ¡sin carcasa! El teclado estaba en el tercio bajo de la PCB - algo así como el original ZX-80. Muchos se fabricaron su propia carcasa. 1.1) ¿No es un Ohio Scientific Instruments Superboard II? Estaba basado en el OSI Superboard II de Norte América, la cual salió un año antes. Magazines de electrónica práctica la revisaron en Junio de 1979. A pesar de tener que importarla y su salida de TV era de 60Hz, su precio a £280, lo hizo muy atractivo. El UK101 fue adaptado para los televisores del Reino Unido a 50Hz y ofrecía una mejor reslución horizontal de 64 x 16 en vez de 32 x 16. El mapa E/S del hardware era el mismo que el del OSI. En términos de software, el Compukit tenía un Basic revisado de 8K (probablemente para corregir el bug de colección de basura en una cadena existente en el OSI) y monitor (basado en el monitor OS 65V del OSI). Habían dos versiones del programa monitor del Compukit - ¡este emulador tiene la 2da. versión que es más grande y mejor! 2) ¿Por qué emular al UK101? ¡Porque fue mi primera computadora! Era una máquina impresionante en esos días - mucho más barata que una Nascom. El BASIC que tenía el UK101 es muy rápido, mucho más rápido que el Basic Sinclair. También lo es más que el BASIC 2.0 de CBM, a pesar de que ambos usan un 6502 a 1MHz. La máquina misma es muy simple. No usa interrupciones (IRQ ni NMI). Posee otro chip LSI - un ACIA 6850, el cual se encarga de la E/S para cintas (CUTS estandar @ 300 baudios) y un puerto serial (si encajaba). Es mudo (no tiene chip de sonido ni buzzer) y trabaja con caracteres en blanco y negro. Los gráficos están mapeados en memoria y basados en caracteres de texto. Son muy similares al de las máquinas Sinclair, en que usan caracteres de 8 x 8 (a diferencia del Nascoms) 3) Usando el emulador 3.1) ¡Un rápido inicio! En la pantalla del menú principal sale el mensaje "(M)onitor (C)old start (W)arm start". A lo más uno peferirá pulsar "C" para hacer arranque en frío. Ya que esto te lleva al BASIC, pero antes te hará dos preguntas: Memory size - simplemente pulsa RETURN para usar toda la memoria disponible. Terminal width - tipea 32 y luego da RETURN si tienes un Spectrum standar, o solamente da RETURN si posees un sistema con chip de video Timex. Solo entonces veras el mensaje OK en pantalla. ¡El sistema ya está listo para aceptar comandos y sentencias BASIC! Para cargar programas de una cinta - haz lo sigte.: i) Tipea LOAD. Pulsa RETURN. (No requiere nombres de archivo) ii) Pulsa SS + SPC para accesar al hipervisor. Pulsa "P" para correr la cinta virtual. iii) El juego debe "auto tipearse" linea por linea. iv) Si el juego no se auto ejecuta, entonces pulsa SPC para abandonar el proceso de LOAD. v) Pulsa SS + SPC para acceder al hipervisor de nuevo. Pulsa "P" para detener la cinta. 3.2) Mapa del teclado El UK101 posee más teclas que el Spectrum, así que algunas raras combinaciones son requeridas... Las principales teclas alfanuméricas son mapeadas directamente a sus equivalentes en el UK101. CS simula la tecla SHIFT izq. del UK101, de esa forma, se debe pulsar CS + 1 para obtener "!", ya que el UK101 usa SHIFT + 1. Como equivalente a CTRL se debe pulsar SS + 1. El borde debe volverse azul, indicando que CTRL ha sido pulsado (el borde no cambia en el Timex, modo 512 x 192). Para salir de CTRL hay que pulsar SS + 1 otra vez. Para simular CTRL + C, hay que presionar CS + SS + C todas al mismo tiempo. CAPS LOCK ha sido cambiado, ahora se pulsa SS + 2 (no CS + 2 como en un Spectrum normal, ya que de lo contrario no se podría tipear la comilla (") como en el UK101). Cuando se está en minúsculas, algunas teclas del UK101 se comportan extrañamente, como RETURN y DELETE. Hay que trabajar en mayúsculas siempre que sea posible. Para obtener algunos signos se deben usar sus equivalentes en el Spectrum. Por ejemplo, muchos teclados tienen la tecla '/' junto al SHIFT der. Para que el UK101 emulado muestre el signo '/' hay que pulsar SS + V. Pero, para obtener el signo '?', hay que presionar CS + SS + V, mientras en el real UK101 uno pulsa SHIFT + '/'. Similares reglas se aplican a -/= y ;/+ o :/*. Por si hay dudas, he aquí la lista: ; SS + O + CS + SS + O _ CS + O @ CS + P " CS + 2 : SS + Z * CS + SS + Z / SS + V ? CS + SS + V , SS + N < CS + SS + N . SS + M > CS + SS + M [ CS + K ] CS + M \ CS + L ^ SS + H £ CTRL + X 3.3) Toca cintas Virtual El UK101 lee las cintas mediante un puerto serial (similar a las máquinas de Commodore y Acorn). El Spectrum no hace E/S de bytes a cinta, así que un bloque de memoria RAM ha sido seleccinado para poder simular una unidad toca cintas. La memoria está con las justas en un 48K así que solo 2K son disponibles para programar en el UK101. Los 128k pueden usar 16K. El hipervisor (SS + SPC) solamente tiene dos comandos, que son: "tapePlay" (tocar la cinta) y "reW" (rebobinar). "tapePlay" inicia la lectora grabadora de cintas virtual, si el UK101 lee del puerto serial (ACIA), recibirá un byte de la cinta virtual. Si la grabadora no está activada, entonces cualquier lectura del ACIA retornará NULL. El emulador mantiene un puntero de la posición (serpos) el cual indica cual byte leer después. Una vez que la grabadora virtual llega al final de la cinta, se desactiva automáticamente y se rebobina al inicio (serpos=0). "reW" emula la opción de rebobinado. La cinta virtual es devuelta a su inicio. El sigte. byte que será leído de la cinta será el primer byte. Si la cinta ya está corriendo entonces "tapePlay" hará la función de "tapestoP" (parar la cinta). Seleccionar "P" en este caso detendrá la grabadora virtual. Pulsar SPC mientras se carga algo, termina el modo LOAD. Esto solamente es aplicable en BASIC. La rutina LOAD en el programa monitor es muy diferente y lee la cinta ¡sin parar! (a menos que el byte en $00FB sea puesto a cero). La cinta virtual puede leerse / escribirse, por lo que se pueden sobre escribir los datos con el comando SAVE - ¡hay que tener cuidado! Nota: En un modelo de 48K, la cinta virtual está en las posiciones $C800-$CFFF. En los modelos 128K, se ubica en $C000-$FFFF, en la página 1 de la RAM. 3.4) Software incluido Si tienes el emulador en formato snapshot (es decir: .SNA o .Z80) entonces es muy posible que puedas correr el juego "More Tea Vicar". Si tienes el emulador en formato cinta (por ejemplo: .TZX) entonces un programita llamado "Hectic" estará en la cinta virtual. Hectic era uno de 3 programas que todos los propietarios del UK101 recibian con su máquina (los otros dos eran "New York Taxi" y "Extended Monitor"). El juego ha sido extensivamente re-escrito para que encaje en los 2k de espacio libre en cinta y copar así con las 32 columnas de la pantalla del Spectrum. (Esa es la razón por la cual los usuarios de Timex no serán capaces de mover el cursor hasta lo más lejano a la derecha de la pantalla...) Como sea, todos los derechos siguen siendo del autor original - Bryan D. Ungard. 4) BASIC 4.1) Una revisión El BASIC del UK101 se ve muy similar al Basic de Microsoft. ¡Y a diferencia del BASIC 2.0 de CBM, esta versión sí cabe en una ROM de 8K! Es un BASIC realmente rápido, así que es muy util para hacer juegos bien simples. 4.2) El juego de instrucciones. Comandos directos: NEW - elimina el programa BASIC que se encuentra en la memoria. RUN {n} - ejecuta el BASIC desde la primera linea o desde la linea 'n'. CONT - continua despues de STOP o CTRL + C. LOAD - sin nombre de archivo, como *EXEC en el BBC Micro. Lee todo desde una cinta. SAVE - sin nombre de fichero, como *SPOOL del BBC Micro. Salva todo en una cinta, pantalla incluida. LIST - usese como LIST, LIST-99, ó LIST 50-99. NULL n - inserta 'n' número de NULs al inicio de cada linea, por ejemplo: NULL 3 debe de insertar 3 NULs al comienzo de cada linea. Sentencias: DATA - (*) DEF FN - (*) DIM - (*) END - (*) FOR..NEXT..STEP - (*) GOTO - (*) GOSUB - (*) IF...THEN - (*) ON x GOTO a,b,c - (*) POKE - (*) PRINT - puede ser abreviado a '?' READ - (*) REM - (*) RESTORE - (*) RETURN - (*) STOP - (*) WAIT i,j{,k} - lee la posición de memoria 'i', haciendo XORs con 'k' y ANDs con 'j', hasta que el resultado no sea cero. El parámetro 'k' se puede omitir (=0) Funciones Numéricas: ABS - (*) ATN - (*) COS - (*) EXP - (*) FRE - retorna el monto de memoria libre en bytes. FRE(x) INT - (*) LOG - (*) PEEK - (*) POS - (*) RND - (*) SGN - (*) SIN - (*) SQR - (*) TAB - (*) TAN - (*) USR - ejecuta código máquina cuya dirección está en los bytes $0011/0012, por ejemplo: X=USR(Y). El valor Y es obtenido a traves de las variables del sistema del BASIC en la página cero. Funciones de cadena: ASC - (*) CHR$ - (*) LEFT$ - (*) LEN - (*) MID$ - (*) RIGHT$ - (*) SPC - genera 'n' espacios, por ejemplo: SPC(20) genera 20 espacios STR$ - (*) VAL - (*) (*) nota de traductor: el autor dejo sin explicar todas las instrucciones de su lista que yo he marcado con *, posiblemente por lo obvias que son muchas de ellas con respecto al Basic Sinclair, y de las cuales trataré con un poco de más detalle más adelante. 4.3) Algo de información. Para interrumpir una ejecución BASIC hay que pulsar CTRL + C. Si se presiona RETURN ante un mensaje de INPUT (como por ejemplo: dar una cadena vacía), ¡el BASIC simplemente terminará su ejecución en ese mismo pto.! CHR$ 8, 9, 10, y 11 trabajan tal como se espera en este BASIC. CLS se obtiene mediante PRINT CHR$(12). Hay muchos caracteres gráficos desde el código 128 al 255, y por debajo de 32. Para poder imprimir algunos de esos caracteres en la pantalla, hay que POKEarlos. El BASIC está codificado para imprimir lineas desde el caracter 13avo. en adelante, hasta el ancho de la terminal (cuyo valor está en $000F). Para editar una linea Basic hay que pulsar CTRL + E (la palabra EDIT aparecerá) entonces tipea el número de línea. El cursor se pondrá a parpadear en ese momento. Usa CTRL + K (arr.) + J (abj.) + H (izq.) + I (der.) para mover el cursor. Basta con tipear en el texto para INSERTar, DELETE borra el texto a la derecha - no a la izq. como usualmente hace el Spectrum. Solamente los primeros 2 caracteres de un nombre de variable son considerados, por ejemplo: app1 y app2 son evaluados como 'ap' y son por lo tanto la misma variable. 4.4) Monitor de código máquina Si se presiona "M" para entrar en el monitor en vez de "C" para arranque en frío, entonces uno accede al monitor de c. m. El monitor te permite examinr / cambiar bytes en cualquier dirección dentro del rango de los 64K. Para trabajar hay que pulsar: . - cambia al modo dirección / - cambia al modo de datos RETURN - va a la sigte, posición de memoria (avanza + 1) G - salta (JMP) a la direción en curso. L - carga (LOAD) datos de la cinta (en formato auto tipeado) Los juegos en c. m. pueden ser cargado mediante el monitor. Todo lo que el usuario tiene que hacer es pulsar M para ir al monitor y enseguida L para cargar. 5) Detalles técnicos 5.1) Mapa de memoria del UK101 0000-1FFF 8K de RAM 2000-9FFF expansión de memoria (normalmente no presente) A000-BFFF ROM del Basic D000-D3FF 1K VDU RAM DC00-DFFF E/S del teclado (generalmente solo $DF00 es usado, el resto son 'ecos') F000-F3FF E/S del 6850 ACIA (generalmente solo $F000 / $F001 es usada) F800-FFFF 2K de ROM con el Monitor El juego de caracteres en ROM no aparece en el mapa de memoria del 6502. Mapa de memoria del Emulador 6000-77FF 2da. mitad de la pantalla de Timex a 512 x 192 (de estar habilitada) 7800-7BFF stack del Basic Sinclair 7C00-9BFF ROM del Basic 9C00-BFFF código del Emulador C000-C7FF mapa del juego de caracteres C800-CFFF área de la cinta virtual D000-D3FF 1K VDU RAM del UK101 D400-D4FF área en blanco para mejorar el "escrolado" de la pantalla del UK101 D500-D7FF código del ACIA D800-F7FF 8K de RAM del UK101 F800-FFFF ROM del Monitor 5.2) Emulación del 6502 Este programa posee un nucleo virtual del 6502. Emula todas las instrucciones del NMOS 6502 y muchas de las instrucciones del CMOS 6502 también. Solamente las instrucciones BBS, BBR, STO, WAI, SMB y RMB no han sido implementadas. Las otras instrucciones del CMOS y modos de dirección han sido implementadas. El 6502 adopta el comportamiento del CMOS cuando trata con interrupciones (BCD apagado), aritmética BCD (flags fijados correctamente) y el comando JMP (opera correctamente sobre los límites de paginado) El nucleo ha sido fuertemente optimizado para una eficiencia del Z80. ¡Aun así es más lento que el aparato real! Si el emulador (o clón del Spectrum o compatible) posee acelerador o facilidad turbo ¡ahora es el momento para usarlo! Un Z80 corriendo a 35 MHz debería proveer una emulación a la velocidad correcta. Si un "opcode ilegal" se ejecuta entonces el borde se pone rojo. El PC se incrementa en uno y la ejecución continua. El opcode pasa a ser convertido a NOP - igual que con el CMOS 6502. 6) Palabras finales Espero que disfruten jugando con el emulador. Esta máquina fue descrita con gran detalle en "Practical Electronics" (electrónica práctica), de Agosto - Noviembre de 1979. El emulador es lo suficientemente bueno como para correr programas comerciales. Lo malo es que la mayoría de programas que hay son para el OSI Superboard (o Challenger 1P) y si bien pueden ejecutarse en un UK101, uno acabará notando que la pantalla se ve mal, ya que la versión Norteamericana usa una pantalla de 32 x 32. Ya que el Spectrum solo tiene 24 lineas, me decidí por no emular al OSI (solamente se requiere cambiar la rutina de la "pantalla" en el emulador y ROMs alternativas). Si buscas por internet con tu web browser favorito por el "UK101", eso debería revelarte algunos sitios interesantes. Había alguien tratando de vender un UK101 por ebay.com en el 2008 y a pesar de que el valor subió hasta los $399, nunca alcanzó el precio reservado. Actualmente son unas máquinas muy raras de conseguir. Cualquier duda o comentario, consultar en los foros de www.worldofspectrum.org. El autor suele ver el foro de vez en cuando. PARTE II Y hasta aquí el manual del autor, ahora paso a ver qué cosas descubro experimentando por mi cuenta con este programa. Sobre el teclado Lo que el autor no mencionó pero está en el manual del UK: RUBOUT - es el equivalente británico a la tecla DEL o DELETE. Igual que el ZX-81 original. SHIFT LOCK - como el de las máquinas Commodore, bloquea el cambio de teclas. Dos teclas RESET - deben pulsarse al mismo tiempo para que se reinicie el sistema. Se evita así que sea pulsda por accidente. Lo que el autor no mencionó y hay que obtener por prueba y error en su emulador: "-" se obtiene con SS + J "=" se obtiene con CS + SS + J "{" se obtiene con CTRL y SS + O CTRL L borra la pantalla y CTRL M da NEW LINE (nueva línea) CS + P genera un signo "@" y cancela lo que se está tipeando antes de pulsar ENTER. Al parecer había un dilema a la hora de tipear ya que las teclas del UK no son autorepetitivas y eso ha sido también replicado. Sobre el inicio Mientras que el OSI Superboard II americano muestra en pantalla apenas se enciende, lo sigte.: D/C/W/M ? y espera que uno pulse una de las letras del menú, las cuales son por disco (en caso de que hubiese uno instalado de base), arranque en frío, en caliente y monitor respectivamente. De lo contrario: C/W/M ? aparecen si no hubiera sistema de disco y pasa a funcionar con cintas de cassette. En cambio, el UK-101 muestra en pantalla un mensaje más completo: "(M)onitor (C)old start (W)arm start" Select _ Solamente cuando se pulsa C, se borra la pantalla inicial y aparecen las únicas preguntas de configuración de base que son: "¿Tamaño de la memoria?" y "¿Ancho de la terminal de texto?". Si se quieren los valores por defecto, basta con pulsar ENTER. En el original UK-101, el ancho por defecto era de 48 caracteres. Una vez hecho esto, aparece a continuación: 7423 BYTES FREE C O M P U K I T U K 1 0 1 Personal Computer 8k Basic Copyright 1979 OK y ahora sí, ya esta listo y esperando que se le de alguna instrucción. Si se ha cargado recién el UK y se tipea W por arranque en caliente, como primera opción, el borde se pone rojo y se queda como colgado, el único modo de salir de esto, es pulsando SS + SPC para pasar al menú del hipervisor, que nos da el sigte texto: "0 Reset Quit tapePlay reW" y espera a que uno pulse una de las 5 opciones. 0 - sale del menú. R - resetea y vuelve a la pantalla del menú principal M/C/W. Q - sale del emulador y devuelve el control al Basic Sinclair sin borrar el programa mismo. W - rebobina la cinta virtual hasta el inicio de la misma. P - corre la cinta para su lectura con LOAD. Cuando esta opción ha sido pulsada, el mensaje pasa a: "0 Reset Quit tapestoP reW" - ahora P detiene la cinta. En cambio si se ha tipeado algo ya en Basic o en el monitor, pasamos al hipervisor y pulsamos R, volvemos al menú M/C/W. Una vez allí podemos volver al Basic sin perder el programa pulsando W, ó usamos C y se borra todo. Si se está ejecutando un programa y queremos interrumpirlo para volver al listado Basic, basta con ir al hipervisor, elegir R lo que nos devolverá al menú M/C/W. Una vez allí basta con elegir W para retornar al Basic con el programa intacto y hacer LIST para revisar el listado o RUN para volverlo a ejecutar. Si en el hipervisor elegimos la opción Q para volver al Basic, podemos aun regresar al UK mediante un GOTO 70 y en el menú M/C/W elegir si queremos proseguir donde nos quedamos con W o resetear todo con C. Pero esto solo funciona correctamente si se está usando un 48k original o plus. En el 128k y +2, todo se cuelga al pulsar Q. En el +2a y +3, en cambio pulsar Q genera un error y el sistema se reinicia con el resultado de que todo se borra y hay que volver a cargar el emulador. Eso no pasa en modo Basic 48k. Sobre el BASIC Lo que el autor no mencionó pero está en el manual original del UK-101. DEF FN - permite definir una función de un único argumento END - termina el programa, omitible al final del listado LET - opcional como en la mayoría de BASICs (ni siquiera mencionado por el autor) GOTO - solo admite enteros positivos. GOSUB lo mismo. ON x GOSUB .... - como ON x GOTO pero para llamar a subrutinas IF x THEN sent - si x entonces ejecuta sentencia IF x THEN linea - igual a tipear IF x GOTO linea NEXT {x,y,...} - la variable FOR es opcional. Es valido tipear NEXT i,j como NEXT: NEXT LOG(n) - logaritmo de x en base e POS(y) - da la posición del cursor en una linea LIST en combinación con SAVE, manda todo el listado a cinta en formato texto. Los espacios entre instrucciones son innecesarios. Ejemplo: IFXGOTO100. He decidido solamente tomar nota de estas instrucciones, ya que las demás son harto conocidas por los usuarios del Basic Sinclair, tanto como los de cualquier versión del Basic microsoft. Así que ahora voy a... Codigos de error Los mensajes de error del UK-101 tienen el sigte. formato: ? [letra] [símbolo gráfico] ERROR En este texto, el símbolo gráfico propio del UK, será reemplazado por otra letra entre llaves, pero que no representa para nada a dicho gráfico original. Por ejemplo, el error de NEXT aparecería en pantalla así, ?N\ ERROR, aquí se verá como N {F}. D {D} Doble dimensión: la variable se dimensionó dos veces. Por defecto el subindice es 10. F {C} Función: parámetro dado a una función está fuera del rango. I {D} Ilegal en modo directo: INPUT o DEF no puede ser usado en modo inmediato. N {F} NEXT sin FOR. O {D} Fuera de datos: hay más READs que DATAs. O {M} Fuera de memoria: programa muy grande o muchos GOSUBs anidados, bucles FOR-NEXT o variables. O {V} Desborde (Overflow): resultante de cálculos demasiado grandes para el BASIC. S {N} Error de Sintaxis: errores al tipear, etc. R {G} RETURN sin GOSUB. U {S} Sentencia no definida: se intentó saltar a un número de línea que no existe. / {0} División por cero. C {N} Error de continuación: intento inapropiado de hacer un CONT luego de un BREAK o STOP. L {S} Cadena muy larga: hay más de 255 caracteres en una cadena dada. O {S} No hay más espacio para las cadenas: similar a O {M} S {T} Cadena provisoria o temporal: expresión de cadena demasiado compleja. T {M} Tipos no coinciden: sucede entre variable de cadena con variable numerica. U [F} Función no definida. B {O} Error de interrelacionar: Se trató de referenciar a un elemento de matriz no definida. SAVE / LOAD con el emulador 51200 - 53247 es el área de RAM del Spectrum o 2048, donde se hallan los 2k dedicados a la cinta virtual. SAVE y LOAD trabajan con ficheros de texto. 55296 - 63487 es el área de RAM en el Spectrum o 2048, donde se ubican los 8k de RAM base del UK emulado. Todas las palabras reservadas estan tokenizadas. El 128k usa estas áreas mencionadas para el BASIC UK, pero en cambio usa el disco RAM para emular la cinta virtual, superando el límite de los 2k, pero limitandose a solamente 16k. Debido a esto, salvar el área de cinta virtual funcionaría para intercambiar programas de solo 2k entre modelos 48k y 2048, pero no con el 128k. Salvar el área RAM del Basic, funciona en cambio para los tres sistemas. A ver, el autor del emulador solo nos explica el modo para cargar algo de la cinta virtual: tipear LOAD, luego ENTER y sale OK. Enseguida al hipervisor, pulsar P y el listado va apareciendo. Pero, no nos dice nada sobre el procedimiento para salvar un programa, solamente que SAVE funciona. Veamos lo que el manual del UK101 nos dice al respecto: asumiendo que el programa BASIC está listo para ser salvado a la cinta... a) preparar la cinta en la cual se salvará el programa b) tipear SAVE (tras un ENTER da OK) c) tipear LIST (pero sin hacer ENTER aun) d) pulsar REC/PLAY enla grabadora (P en el hipervisor) e) ahora sí, dar ENTER y el listado aparecerá en pantalla a medida que se va grabando. f) una vez completada la grabación, detener la grabadora (nuevamente P en el hipervicor) g) tipear LOAD/ENTER y enseguida SPC/ENTER (esto se hace en el UK real) nota: en el UK real, hacer TERMINAL WIDTH manualmente tras un RESET, afecta a la grabadora. Para evitar errores, ejecutar en modo directo POKE 15,72 antes de usar SAVE. Muy bien tipeo algo y SAVE, LIST, P y cierro con P. Para verificar que todo salió bien, hago NEW, enseguida LOAD (W y luego P y una vez más P en el hipervisor) y solo entonces aparece el programa recién salvado. Si el programa residente tiene 10 líneas del 10 al 100, y el programa en cinta es tambien de 10 líneas pero empezando en 200, entonces LOAD actuará como MERGE sin borrar lo que había antes. Solamente lo hace si las líneas de ambos programas son las mismas o si se hizo un NEW antes de LOAD. Eso es dentro del emulador, para importar y exportar el área de la RAM del Basic, pasamos a... Para cerrar. Una observación sobre el emulador El programa principal está en el fichero "UK101_v164.tzx" y como su autor nos indica solo añade el programa "hectic" del UK. El archivo "mtv164.sna" contiene el juego "Más té sr. vicario". el cual se autoejecuta apenas cargarlo. Basta pulsar ENTER a la primera pregunta, para salir de vuelta al Basic. También tiene el "hectic" incluido. Es decir, que mientras el .TZX tiene un solo juego, el .SNA tiene dos para probar. El programa mismo consta de 9 partes que son: el cargador BASIC "UK101", la pantalla "UK101$", y las rutinas en C.M. "8kbasic", "chargen", "monus", "6502", "acia48", "acia128" y "game2". Este último es el juego "hectic". El programa carga sin problemas incluso en el +3. En el caso del EightyOne, el UK101 se ejecuta sin problemas en modo TC-2048 y SE Basic 128k, pero se cuelga con el TS-2068, a menos que se le instale el cartucho de 2048 o 48k. FUSE en cambio, no da ningún problema tanto en 2048, SE Basic o 2068. Speccy 4.8 igual con el 2048 como el 2068. Tampoco falla con el 2068 del x128w o el 2068 de Zesarux. Pasandolo todo a discos Vamos a ver cómo pasar el emulador de la cinta a un sistema de disco. Elijo para empezar el Opus Discovery. Primero intento pasar los ficheros uno a uno, pero se cuelga al intentar cargar el "monus". Desisto. Paso entonces a cargar de la cinta y dejar que se ejecute. Todo OK. Regreso al BASIC con la opción Q y busco en el listado las líneas que contengan LOAD CODE y las edito de acuerdo con la sintaxis del OPUS. Salvo al disco el programa corregido y solamente los sigtes. ficheros: "8kbasic" con SAVE*1,"basic.8k" CODE 31744,8192. "chargen" con SAVE*1,"char.gen"CODE49152,2048. "monus" con SAVE*1,"mon.us"CODE63488, 2048. "6502" con SAVE*1,"6502.mc"CODE39936,9216. Hago PRINT USR 0. Y ahora cargo y salvo individualmente los ficheros faltantes: la pantalla como "uk101.$", "acia48" con SAVE*1,"acia.48"CODE54528,152. "acia128" con SAVE*1,"acia.128"CODE54528,160 y por último "game2" con SAVE*1,"game2.uk"CODE51200,2029. Reseteo el sistema una vez más y hago CAT 1 con lo que aparece en pantalla lo sigte: uk101 basic.8k char.gen mon.us 6502.mc uk101.$ acia.48 acia.128 game2.uk uk101 145 0 OK, 0:1 Perfecto. Hago LOAD *1,"uk101" y... carga correctamente tanto en 48k como en 128k. El sigte. paso es convertirlo a otros sistemas. Le sigue el Didaktik con iguales resultados. Beta128 idem. No lo he pasado aun al MB-02+, pero no creo que de problemas, ya que usa la sintaxis de cassette con el disco. Disciple y +D El mismo método usado con el Opus para pasar todos los ficheros de la cinta a discos funciona con el Disciple. Confirmado con los emuladores REALS, 81 y FUSE que lo admiten tanto en el 48k, 128k como 2048. Pero al intentar hacer lo mismo con un +D, el programa carga todos los ficheros pero se cuelga. Lo mismo pasa con el Unidos. No importa en qué emulador lo pruebe. Curiosamente eso no succede si en vez de eso cargo el sistema Betados. Intento cargar de la cinta y salvarlo a disco como Snapshot y... el primer intento funciona pero al intentar volver al Basic, se cuelga o resetea. Vuelvo a cargar la cinta y salgo al Basic Sinclair y recién hago otro Snapshot, pero al hacerlo se resetea todo. O sea ni pasandolo como Snaps lo acepta el +D. En suma: funciona perfecto en Disciple y +D con Betados. Versión +3 Ahora, el +3, carga sin problemas la versión cinta del UK, y es posible transferirlo todo a un disco, pero al intentar salir del modo UK y volver al Basic +3, todo se cuelga o resetea de forma que todo lo trabajado se pierde. No he experimentado con el Multiface 3, eso podría pasar al menos los programas que une tipee en Basic UK al disco. Sería cuestión de probar. Hasta este punto he trabajado más usando el REALS. Versión MDR Creo la versión de Microdrive con Spectaculator 5.3 para variar, y aunque ejecuta el emulador sin problemas, cada vez que se vuelve al Basic Sinclair mediante la opción Q, las últimas líneas del listado del emulador se corrompen, forzandolo a uno a eliminar todo mediante NEW, lo cual deja al emulador aun residente en memoria, pudiendo volver a este mediante USR 39936. Pero de esta forma ya no da molestia alguna. En cuanto al Wafadrive tampoco hubo mucho problema para su conversión. Solo 48k. SAVE / LOAD con discos Luego del REALS y Spectaculator 5.3 pasé a probar FUSE y EightyOne, estos dos permiten ejecutar el UK101 en un TC-2048, además permiten usar la versión MDR con el 2048, EightyOne permite además usar el Disciple y +D con 2048. El UK101 corre incluso en 2068 con estos emuladores. Ahora, la ventaja de trabajar con discos en el Spectrum 48k, es que al salir del BAsic UK al Basic Sinclair, es posible salvar al disco ya sea el área de cinta virtual como el área de RAM del Basic. En el caso del Opus por ejemplo, los pasos serían: a) en el Basic UK escribir el programa b) una vez tipeado todo, salir con el hipervisor al Basic Sinclair c) salvar ya sea con SAVE *1,"nombre"CODE 51200, (max. 2k) y SAVE *1,"nombre"CODE 55296, (max. 8k) Y para cargar basta con: d) estando ya en el emulador UK, salir mediante el hipervisor e) en Basic sinclair cargar ya sea con LOAD *1,"nombre"CODE 51200 o LOAD *1,"nombre"CODE 55296 f) volver al Basic UK mediante Rand.Usr 39936 g) elegir W en el menu M/C/W h) tipear LIST para ver el programa cargado o RUN para ejecutarlo. En caso de cinta virtual 2k: LOAD. Y así sucesivamente. Para salvar los programas a cinta se aplica el mismo método que con los discos. Versión 128k Dijimos que el emulador se cuelga o resetea tras intentar volver al Basic Sinclair al cargarlo directamente en el Basic 128k. Lo mismo sucede con el +2. Para evitarlo hay que añadir al comienzo del listado una línea como 11 POKE 23611,204 y otra línea después del USR 39936, como 72 RAND. USR 4770. Basta con eso, para que sea posible estando en modo UK, salir usando la opción Q del hipervisor para ir al Modo 48k y volver al Basic UK en modo 128k, sin que el sistema se cuelgue o reinicie. Con esto ya podemos cargar y salvar programas de 8k con SAVE...CODE y LOAD...CODE, aplicando los pasos antes mencionados. Para que la cinta virtual de 2k pueda usarse en vez de la de 16k hay que modificar el cargador y crear una versión 128k que use el "acia48" solamente. En el caso del +2a y +3, es posible cargar la cinta y en el último pasarlo a disco, pero el método usado con el 128k y +2 no funciona aquí. Tampoco funciona con Scorpion ni Pentagon, pero al parecer es debido a la interface Beta128. En REALS el Pentagon parece admitir también al Opus Discovery, +D y Disciple, también la ZX-IF1 y aquí si funciona la modificación para volver al Basic Sinclair sin colgarse. El Wafadrive sólo en modo 48k. El +2a acepta el Microdrive, +D y Wafadrive pero sólo en modo 48k. Llegado a este punto, lo dejo ahí. EN SUMA Y bueno que eso es todo lo que he podido experimentar con el dichoso emulador UK hasta el momento. He probado hasta este punto, los emuladores para Spectrum como APPLE-1, VIC-20 y Galaksija, pero este del UK101, ha sido el único de los cuatro que me ha permitido no solo pasarlo a diferentes sistemas de disco, sino también salvar y cargar los programas tipeados en Basic UK a disco, lo cual alivia el problema de que el programa original carezca de opciones para salvar o cargar datos siquiera a una cinta. Incluso si James Smith no lo diseñó pensando en usarse con sistemas de disco, es grato verificar que es posible trabajar con ellos, lo cual facilita mucho el intercambio de datos entre el UK emulado y el Spectrum. Una gran mejora sería que pueda a futuro ejecutarse también en el +2a y +3 con la posibilidad de volver al Basic sin que se cuelgue o resetee. De ese modo también se podría intercambiar datos con solo ir y venir de un modo al otro. La mejor alternativa es que la versión +3 permita salvar al disco en vez de limitarse al disco RAM, de lo contrario copiar el contenido del disco RAM al disco +3 para no perder la información del BAsic UK. Y de este modo termino con el UK101, como sea un buen emulador para el Spectrum. (c)2018 zx_if1@hotmail.com