ZX-Uno FAQ

Sobre esta FAQ

avatar Uto Esta FAQ es mantenida por @uto_dev, en base a distintas preguntas encontradas en diversos foros. Esta es una FAQ de uso de ZX-Uno. No te vamos a contar lo que es, ni para que vale. Solo cómo se usa.

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional.

ÍNDICE

LO MÁS PREGUNTADO

¿Cual es la contraseña del repositorio?

Sin lugar a dudas, la pregunta más preguntada es esta. En algunas otras preguntas de esta FAQ haremos referencia al repositorio. Pues bien, esta es la respuesta:

  • Usuario: guest
  • Contraseña: zxuno

¿Hay algún emulador que emule ZX-Uno?

Sí, ZesarUX hace una emulación completa del core de Spectrum de ZX-Uno.

INSTALACION Y JUEGOS

¿Que cables o conectores necesito para poner en marcha mi ZX-Uno?

Esta es la lista básica:

  • Un cargador de móvil microUSB o al menos un cable USB a microUSB para conectar a la salida USB de la tele o similar
  • Un cable con conector RCA para vídeo compuesto, el típico conector amarillo.
  • Unos altavoces de PC para conectar a la salida de audio, o un cable jack-stereo a dos conectores RCA rojo/blanco para conectar a la TV
  • Una tarjeta SD, no necesariamente muy grande (2Gb está bastante bien). Valen microSD con adaptador.
  • Un teclado PS/2

Opcionalmente tambien puedes:

  • Un cable VGA para conectar el ZX-Uno por VGA
  • Un joystick norma Atari, es decir, un joystick de spectrum
  • Un splitter de ratón/teclado, para poder conectar un ratón PS/2 además del teclado

Si estás interesado en conectar el ZX-Uno por VGA lee la sección Pantalla y monitores

¿Cómo poner en marcha mi ZX-Uno

Normalmente el fabricante de tu ZX-Uno te habrá facilitado instrucciones de como hacer esto. Si no es así solicitaselas. No obstante los pasos básicos para lanzar ZX-Uno en modo Spectrum es tener una tarjeta SD formateada con FAT32, varios ficheros tap, z80 o sna dentro, y conectarlo a una tele por el conector de video compuesto. Además en la tarjeta tienes que meter los ficheros de ESXDOS correspondientes a la versión de ESXDOS que lleve vuestro ZX-Uno (de ahí que conviene que el fabricante os de ese dato y os diga que fichero meter).

Dado que la mayoría de los ZX-Uno existentes actualmente (25/9/2016) provienen del crowdfunding, es muy probable que los ficheros en el enlace "Archivos de ESXDOS para la tarjeta SD" en la página de instrucciones para los backers te valga. Si algo no va bien (ver las siguientes preguntas) pregunta a tu fabricante por la version de ESXDOS y sobreescribe los ficheros de ese paquete con la distribución estándar de ESXDOS para esa versión. Sobreescribe y no reemplaces, para que se queden los comandos especiales de ZX-Uno que hay en la carpeta BIN.

La recomendación de formatear con FAT32 es porque hay más cores que funcionan con FAT32 que con FAT16. También recomendamos que formateeis las tarjetas aunque vengan ya formateadas, y que os aseguréis que no están formateadas con NTFS o exFAT.

¿Pero qué es ESXDOS?

ESXDOS es un sistema operativo para DivIDE y DivMMC, es decir, para interfaces que permiten el acceso a discos IDE en el caso de DivIDE, o de tarjetas SD haciendo de discos duros en el caso de DivMMC. ESXDOS incluye comandos para movernos por el disco muy al estilo UNIX, aunque para escribirlos en nuestro Spectrum tenemos que precederlos con un punto, por ejemplo ".ls", ".cd",".mv", etc.

Además, ESXDOS incluye un gestor NMI, es decir, una aplicación que se carga cuando pulsamos NMI en nuestro ZX-Uno (ver apartado siguente)

ZX-Uno implementa el interfaz DivMMC exactamente como es, por lo que soporta exactamente lo mismo que soporta un DivMMC real.

¿Puedo usar ESXDOS en otros cores?

ESXDOS es un sistema operativo para DivMMC, que es un interfaz para Spectrum, por lo que la respuesta es no. Algunos cores pueden acceder a la tarjeta SD pero no usan ESXDOS.

¿Cómo cargo juegos desde la tarjeta SD?

Una vez que tengas juegos en la SD y ESXDOS esté funcionando (comprobad que se ven el logo de ESXDOS al arrancar y en esa misma pantalla se ve que detecta vuestra tarjeta SD) solo tenéis que generar una NMI (Ctrl+Alt+F5) para acceder a un menú en el que os movéis con los cursores y podéis cargar ficheros Z80, SNA y TAP.

Cuando pulso NMI (Ctrl+Alt+F5) el ZX-Uno se reinicia

Las causas más comunes de ese problema son:

  • Tu ZX-Uno no ha detectado tu tarjeta SD. Fijate en el arranque de ESXDOS y aseguraté de que esté formateada con FAT
  • Los ficheros de ESXDOS que hay en las carpetas no concuerdan con la versión de ESXDOS que está instalada en tu ZX-Uno. Consulta con el fabricante.

Cuando pulso NMI el ZX-Uno hace un pitido grave y no pasa nada

Te falta meter los ficheros de ESXDOS en la tarjeta SD o no te ha reconocido la tarjeta. Revisa el primer punto de esta sección.

¿Puedo grabar la partida en la tarjeta SD para volver más tarde?

Sí, en el menú de la NMI (Ctrl+Alt+F5) de ESXDOS hay una opción que pulsando "S" graba un snapshot en la carpeta en la que estuvieramos en la SD. El primer snapshot se llama SNAP0001.SNA, el segundo SNAP0002.SNA, etc.

Sin embargo hay que tener en cuenta que cuando reiniciamos el ZX-Uno ESXDOS pierde la cuenta de por qué número iba, por lo que si volvemos a grabar volverá a intentar grabar el SNAP0001.SNA y dará error. En esos casos pulsad "S" hasta que diga que se ha granbdo correctamente, lo cual ocurrirá cuando hayas pulsado S tantas veces como fichero SNAPxxxx.SNA hubiera más una.

Una vez cargado el juego al pulsar NMI (Ctrl+Alt+F5) en lugar del menú de ESXDOS

El juego X no me funciona

Hay distintas razones para que un juego no funcione, algunas vienen del ZX-Uno propiamente dicho, y otras vienen de problemas anteriores ya conocidos de incompatibilidades con Spectrum 128K o con DivIDE/DivMMC. Estos son algunos casos conocidos:

  • Algunos juegos de 48K no funcionan si el Spectrum elegido es 128K: haz OUT 32765,48 o bien carga este fichero tap ya preparado con el OUT 32765,48 antes.
  • Algunos juegos no cargan bien, especialmente algunos juegos hechos con "La Churrera". Prueba este POKE 23388,16 antes, o carga este otro fichero tap que contiene el POKE 23388,16. La última versión de ESXDOS hasta la fecha (19/9/2016), que es la 0.8.6 beta 5.1, tiene un cambio que viene a paliar este problema, pero ni está probado muy a fondo ni la mayoría de los ZX-Uno hasta la fecha llevan esa versión.
  • Algunos juegos (por ejemplo Mad Mix game) parecen perder la información de color y se ven fatal: Prueba con estos OUT antes de jugar: OUT 64571,15 : OUT 64827,7 o utiliza ZXUC para desactivar los modos Timex. Hay una tercera opción que es desactivar los modos gráficos adiciones desde la BIOS, pero eso hará que juegos que puedan usar esos modos (Radastan, Timex o la ULA Plus no funcione). Una cuarta opción es tener una ROM específica para jugar estos juegos con el setting de los modos Timex desactivado (ver más adelante como instalar y configurar ROMs).

¿Hay otras teclas útiles para el core de Spectrum?

Sí, esto es lo más importante:

  • Ctrl+Alt+backspace: Hard reset. Backspace es la tecla de borrar hacia atrás, encima del enter.
  • Ctrl+Alt+Supr: Soft reset.
  • Bloq. Despl.: cambia de modo video compuesto 50Hz a modo VGA 60Hz y viceversa.
  • Ctrl+Alt+F5: NMI

Al arrancar ESXDOS veo un mensaje que pone RTC.SYS ERROR

No pasa nada. ESXDOS es un sistema operativo genérico que soporta dispositivos DivMMC que tienen la posibilidad de guardar la fecha, para grabar los archivos con fecha. El DivMMC implementado dentro del ZX-Uno no es uno de ellos, por lo que el módulo RTC da error al arrancar, pero no pasa nada (salvo que todos los archivos se generan con una fecha por defecto en lugar de la actual).

¿Cómo elijo con que ROM arrancar el core de Spectrum?

Si cuando sale el logo de ZX-Uno pulsamos la tecla Esc, nos saldrá una lista para elegir la ROM a utilizar. Si quieres cambiar la ROM por defecto, lo puedes hacer en la BIOS (ver apartado "Configuración" de esta misma FAQ).

Nota: es posible que entre las ROMs disponibles haya una cuya descripción incluya la palabra "rooted". Avisamos que NO debéis usar dicha ROM para jugar ni para uso normal. Se trata de una ROM que permite acceder a funciones del ZX-Uno que otra no pueden, como grabar la Flash, y que por tanto está hecha especialmente para acciones que lo requieren, pero usarla de manera continua es un riesgo de dañar accidentalmente tu ZX-Uno.

¿Puedo poner pokes?

Sí, para ello tienes que arrancar con la ROM "cargandoleches".

Con esa ROM no podrás cargar juegos con el menú de NMI así que tendrás que usar comandos de ESXDOS, después de hacer BREAK al arracar la ROM:

Para cargar taps hay que acceder al directorio donde estén usando así:

.cd <directorio>

y luego cargar el juego así:

.tapein <nombre del fichero tap>
LOAD ""

Una vez cargado el juego, pulsas NMI y te saldrá arriba al a izquierda un recuadro donde primero escribes la dirección del POKE (lo que va antes de la coma), pulsas enter, y después tecleas el valor del POKE (lo que va detrás de la coma). Cuando no quieras poner más pokes simplemente pulsa enter en lugar de escribir la dirección y volverás al juego ya pokeado.

¿Cómo elijo con que core quiero arrancar mi ZX-Uno?

Por defecto el ZX-Uno arrancará con el core de Spectrum, pero si cuando sale el logo de ZX-Uno pulsamos la tecla Bloqueo Mayúsculas, nos saldrá una lista para elegir el core a arrancar. Tened en cuenta que algunos cores solo funcionan por VGA, por lo que si estáis por video compuesto no veréis nada si los elegís.

¿Puedo elegir core una vez arrancado en modo Spectrum?

Sí siempre que te sepas el slot en el que está el core que quieres arrancar, escribe ".CORE n" , donde n es el numero de slot.

CONFIGURACION

¿Cómo entro a la BIOS?

En la BIOS de Zx-Uno se pueden configurar varias cosas el core de Spectrum, y realizar algunas opciones avanzadas como actualizaciones. Para entrar, solo hay que pulsar la tecla F2 cuando se muestra el logo de ZX-Uno en el arranque.

¿Cómo puedo seleccionar la ROM de Spectrum por defecto?

Desde dentro de la BIOS. Accede a la BIOS y ve al menú ROMS. Selecciona la ROM que quieres que sea por defecto, pulsa ENTER y luego elige "Set active".

¿Como puedo seleccionar el core por defecto?

Entra a la BIOS, ve al menú BOOT y pulsa enter sobre el core elegido.

Pero selecciono un modelo de 128K y me arranca en 48K

Si tienes activado DivMMC para poder cargar juegos desde la tarjeta SD, este fuerza arrancar en 128K pero en el llamado "modo USR 0", que arranca con la ROM del 48K. En la práctica estarás en un 128K pero en modo 48k.

Pero yo quiero ver el +3DOS o programar BASIC en modo 128K

Para eso tienes dos opciones:

  • Entrar a la BIOS y cambiar el setting de "DivMMC" de "auto" a "disabled", pero dejarás de poder cargar desde la SD desde todas las ROMS.
  • Crear e instalar un ROM específica de 128K con DivMMC disabled. Ver el apartado de instalar o cambiar ROMs más adelante.

¿Que opciones se pueden cambiar en la BIOS?

Estas son las opciones de la BIOS 0.55 a fecha de hoy (19/9/2016):

  • Seleccion de tipo de teclado (Issue 2/Issue 3)
  • Timing ULA (48K, 128K, Pentagon)
  • Contended memory Sí/no
  • DivMMC Sí/no
  • NMI DivMMC Sí/no
  • Layout de teclado ES/EN/Spectrum
  • Joystick DB9: Kempston, SJS1, SJS2, Protek o Fuller
  • Joystick emulado en teclado: Kempston, SJS1, SJS2, Protek o Fuller
  • Video: PAL, NTSC o VGA
  • Scanlines para modo VGA Sí/no
  • Frecuencia
  • Modo turbo x1, x2, x4
  • Opción de deshabilitar modos gráficos avanzados (ULAPlus, Timex, Radastan)

Además la BIOS tiene opciones para hacer varios upgrades, cambiar las ROMS, y algunos test de memoria, teclado, cinta, para comprobar que nuestro ZX-Uno está en forma.

¿Esas opciones se pueden cambiar cuando el Spectrum ya ha arrancado?

La mayoría sí. Existen utilidades que vienen con el ESXDOS de ZX-Uno como .JOYCONF, .KEYMAP o .ZXUNOCFG. Puedes ejecutar dichos comandos sin parámetros para que te indiquen que opciones tienen.

También esta ZXUC, que es un interfaz gráfico que permite modificar muchas opciones y viene en formato .tap.

Finalmente, también es posible modificar muchas opciones a base de OUTs, para lo cual es necesario entender principalmente los registros MASTERCONF, DEVCONTROL y DEVCTRL2 de ZX-Uno, que podemos ver en el listado de registros de ZX-Uno.

No me funciona ni .joyconf, ni .zxunocfg ni nada

Probablemente instalaste un ESXDOS estándar y no el que incluye los comandos específicos de ZX-Uno. Si el fabricante de tu ZX-Uno te facilitó instrucciones repasalas para ver si te has dejado algo, sino preguntale. También pueden descargarse estas aplicaciones, pero si quiere descargar la última version mejor preguntar en el foro donde están.

PANTALLA Y MONITORES

¿Video compuesto o VGA?

La mejor calidad te la da VGA, en la que además puedes añadir scanlines para simular TVs antiguas. Necesita un cable específico no obstante. Además, algunos cores como el de NES solo van por VGA.

Por otro lado video compuesto es sencillo de utilizar y solo requiere un cable sencillo, pero la calidad de imagen es inferior.

¿Cómo cambio a VGA?

Conecta el cable, y pulsa la tecla Bloq Despl. Si se ve bien ve a la BIOS, pulsa de nuevo Bloq Despl y cambia los valores de VGA y Frecuencia en "Advanced options".

No obstante, es posible que tu monitor soporte resoluciones inferiores a los 60Hz por VGA, por lo que puede usar .zxunocfg o ZXUC para probar y tratar de reducir hasta la menor frecuencia que soporte tu monitor, y una vez comprobado, volver a la BIOS y ponerlo así.

Es recomendable elegir la frecuencia menor a la que nuestro monitor sea capaz de sincronizar, porque una frecuencia mayor implica que el Spectrum va más rápido, así que a 60Hz va un 20% pero a 55Hz solo un 10%. Cuanto menos, mejor.

He cambiado de modo de video y ahora no veo nada en la pantalla

Reinicia el ZX-Uno y pulsa F2 para entrar en la BIOS (aunque no la veas). Pulsa la tecla Bloq Despl. Dicha tecla cambia entre modo PAL 50Hz (ideal para video compuesto) y modo VGA a 60Hz(ideal para conector VGA).

Una vez puedas ver la BIOS puedes cambiar los settings y restaurar los de por defecto por ejemplo.

ACTUALIZACIONES

¿Que son los upgrades y cuales puedo hacer?

El ZX-Uno te permite hacer upgrade (actualizar):

  • EL firmware o BIOS, que es lo que sale al arrancar y que pulsando F2 se accede al setup del core de Spectrum al estilo BIOS de PC.
  • Los cores, o la implementación de las distintas máquinas que el ZX-Uno puede soportar.
  • Las ROMS del core de Spectrum. Estas se pueden actualizar por separado del core de Spectrum aunque son solo para dicho core. El resto de cores llevan su propia ROM dentro del core en sí.
  • ESXDOS, el sistema operativo para acceder a la tarjeta SD desde el core de Spectrum.
  • Toda la flash, incluyendo ESXDOS, las ROMS, los CORES y el firmware

¿Qué firmware tengo y cómo lo actualizo?

En la pantalla de arranque de ZX-Uno, donde se ve el logo, podéis ver en algún sitio "ZX Uno BIOS v0.xx". A día de hoy (18/09/2016) la última versión es 0.55.

Para actualizarlo debemos descargar el fichero FIRMWARE.ZX1, que podéis obtener en ... pues es muy variable, asi que menjor preguntad en el foro de ZX-Uno.

Nota: actualizar el firmware (BIOS) es delicado, no lo hagas si no es necesario, y si lo haces trata de que tu ZX-Uno tenga alimentación ininterumpida (usa un SAI o conecta la corriente a un USB de portatil con bateria).

Una vez tenemos el fichero, lo ponemos en la carpeta raiz de nuestra tarjeta SD, encendemos nuestro ZX-Uno y pulsamos F2 para entrar en la BIOS, nos vamos a Upgrade, elegimos "Upgrade BIOS for ZX", luego "SD file". El sistema leerá el fichero FIRMWARE.ZX1 y avisará cuando esté actualizado. Es el momento de reiniciar nuestro ZX-Uno y disfrutar de nuestra nueva BIOS.

No debe sorprenderos si la barra de progreso no se rellena entera. El firmware ocupa solo una pequeña parte de la flash del ZX-Uno, y la barra de progreso marca solo esa pequeña parte.

¿Cómo instalo o actualizo cores?

Lo primero que debes saber es que hay 9 slots para cores disponibles, estando reservado el primer slot para el de Spectrum. Todos los cores se actualizan igual, excepto el de Spectrum. Para actualizar o instalar un core necesitamos primero la última versión del fichero que lo define, que será un fichero llamado COREn.ZX1. ¿Dónde están esos ficheros? Pues depende del core, mejor preguntar en el foro. Una vez tenemos el fichero COREn.ZX1 decidimos en que slot lo vamos a poner (2 a 9) y renombramos el fichero COREn.ZX1 sustituyendo la n por el número de slot (por ejemplo CORE2.ZX1 para el slot 2).

Una vez tenemos nuestro fichero, lo ponemos en la carpeta raiz de nuestra tarjeta SD, encendemos nuestro ZX-Uno y pulsamos F2 para entrar en la BIOS, nos vamos a Upgrade, elegimos la fila correspondiente al core elegido (en nuestro ejemplo la 2 - justo después de la de Spectrum - pulsamos enter y luego "SD file". El sistema leerá el fichero CORE2.ZX1 y avisará cuando esté actualizado, aunque antes preguntará el nombre - es el nombre con el que se verá en la lista para elegir el core en el arranque, y en el listado del a BIOS. Una vez instalado el CORE podemos acceder a él al arrancar.

No debe sorprenderos si la barra de progreso no se rellena entera. Cada core ocupa solo una pequeña parte de la flash del ZX-Uno, y la barra de progreso marca solo esa pequeña parte.

¿Cómo actualizo el core de Spectrum?

Nota: actualizar el core de Spectrum es delicado, no lo hagas si no es necesario, y si lo haces trata de que tu ZX-Uno tenga alimentación ininterumpida (usa un SAI o conecta la corriente a un USB de portatil con bateria).

Exactamente igual que los otros cores, pero en lugar del fichero CORE1.ZX1 necesitarás un fichero llamado SPECTRUM.ZX1. Pregunta por él en los foros.

¿Y como puedo borrar un core?

No se puede. Si quieres que no salga en la lista grabale otro encima o graba uno cualquiera y cuando pregunte el nombre dejalo vacío, pero eso no hará que no esté ahí.

¿Cómo actualizo ESXDOS?

Para actualizarlo debemos descargar el fichero ESXDOS.ZX1 de la última versión (o de la versión que queráis instalar). Como cada versión anda por un sitio diferente, preguntad en el foro de ZX-Uno, o bien simplemente renombrad el fichero esxmmc.bin de la distribución que sea como ESXDOS.ZX1.

Una vez tenemos el fichero, lo ponemos en la carpeta raiz de nuestra tarjeta SD, encendemos nuestro ZX-Uno y pulsamos F2 para entrar en la BIOS, nos vamos a Upgrade, elegimos "Upgrade ESXDOS for ZX", luego "SD file". El sistema leerá el fichero ESXDOS.ZX1 y avisará cuando esté actualizado. Ahora tenemos que actualizar ESXDOS en la tarjeta SD. Para ello debemos sustituir las carpetas BIN y SYS con las de la nueva versión pero ojo, no las borres, grabalas encima. Esto es para asegurarse de que los ocmando nuevos de ESXDOS creados para ZX-Uno no se pierden, porque no vienen con las distribuciones de ESXDOS estándar.

No debe sorprenderos si la barra de progreso no se rellena entera. ESXDOS ocupa solo una pequeña parte de la flash del ZX-Uno, y la barra de progreso marca solo esa pequeña parte.

¿Cómo actualizo o cambio las ROMS de Spectrum?

Hay dos posibilidades:

  • Obtener el fichero .tap que corresponde a cada una de las ROMS y desde la BIOS acceder al apartado "ROMS" y pulsar N, elegir un slot y reproducir el fichero .tap desde una fuente externa por la entrada EAR (desde un PC por ejemplo). Hay que tener en cuenta que algunas ROMS ocupan un slot (16k) y otras más (hasta 4), por lo que dependiendo de la ROM a cargar tendréis que elegir un slot vacío, o una zona que tenga 2, 3 o 4 slots vacíos juntos. En caso de querer reemplazar una ROM, primero hay que borrarla (pulsar enter sobre la mismo y elegir "delete") y después cargarla de nuevo.
  • Generar un fichero con todas las ROMs usando la utilidad ZX1RomPack, que además permite poner determinado ajustes a las ROMS - como el timing de la ULa, si tiene habilitado DivMMC, modo Radastan, etc. Si usáis esta aplicación acabaréis grabando un fichero llamado ROMS.ZX1, que tenéis que colocar en el raiz de vuestra tarjeta SD, y después arrancar el ZX-Uno usando una ROM específica "rooted" (buscad en vuestro listado de ROMs y seguro que hay una). Una vez arrancado el ZX-Uno con la ROM rooted, teclead ".ROMSUPGR" (no olvidéis el punto al inicio). Se grabarán todas las ROMs y podremos utilizar nuestro ZX-Uno con nuestras nuevas ROMs. Existe un comando de ESXDOS llamado ".ROMSBACK" que hace el proceso contrario, es decir, coge las ROMS del ZX-Uno y las graba en un fichero ROMS.ZX1 en el raiz de nuestra tarjeta SD. De ese modo - en lugar de partir de cero - podemos extraer las ROMS del ZX-Uno, utilizar ZX1Rompack para modificar lo que queramos, y volver a grabar el ROMS.ZX1 en nuestro ZX-Uno.

¿Puedo generar yo mis propios ficheros .tap para cambiar ROMS?

Sí, puedes utilizar la utilidad GenROM, para obtener la última versión podéis preguntar en el foro. Dicha utilidad es para línea de comandos, y requiere entender los parámetros de configuración de la BIOS. Si la ejecutáis sin parámetros podréis ver como funciona, y si tenéis dudas sobre alguna opción, lo mejor es que comprobéis lo que significa en la descripción de registros de ZX-Uno.

¿Hay alguna ROM que sea exacta a determinado modelo de ZX-Spectrum?

Por defecto no, porque todas las ROMS suelen venir con cosas como DivMMC, modos Timex, ULAPlus, etc. activados. Esto son funcionalidades extra que facilita ZX-Uno pero que no traía ningún Spectrum original. En otros casos, como el chip de sonido AY, solo lo traían los modelos de 128K, pero en ZX-Uno incluso el modelo de 48K lo puede llevar activado.

Si queréis un Spectrum puro, solo teneís que crearos vuestra propia ROM (por ejemplo con la ROM del Spectrum 48K y desactivando modos Timex, modo Radastan, ULAPlus, chip AY y DivMMC) e instalarla. Así tendréis un Spectrum 48K puro hasta el punto de que cargar los juegos por EAR será lá única opción.

¿Puedo hacer un backup de todo lo que lleva internamente el ZX-Uno?

Sí, tienes que arrancar con la ROM que ponga "rooted" y ejecutar el comando ".BACKUP". Eso creará en el raiz de tu tarjeta un fichero llamado FLASH.ZX1 que después se puede restaurar desde la BIOS (menú upgrade, "Upgrade flash from SD")

OTROS CORES

¿Puedo cambiar las ROMS de otros cores? ¿La de Sam Coupé por ejemplo?

No, las ROMs de otros cores van dentro del core y salvo que el core lo permita expresamente o el core tenga las ROMS en la SD, no será posible cambiarlas.

Para cargar un juego, desde la pantalla inicial de las bandas de colores pulsa 7 en el teclado numérico (equivalente a pulsar F7 en el teclado del SAM Coupé), o bien desde BASIC teclea LOAD ""(como en el Spectrum)

¿Cómo hago funcionar el core de Sega Master System?

El core de Sega Master system solo necesita que metas algunos juegos en formato .SMS en una carpeta de tu tarjeta SD. Al arrancar directamente te presenta un selector para cargarlos. Si te dice que hay error de disco probablemente no soporte bien tu tarjeta, prueba a reformatearla que este core es un poco especial con las tarjetas SD.

Ten en cuenta que el core no soporta todos los juegos de Sega Master System, solo una gran cantidad, por lo que si el primero no te funciona no desesperes, prueba más.

Pulsando F12 se accede al menú, y el juego puede pausarse con la tecla Pausa

¿Cómo hago funcionar el core de NES?

El core de NES solo necesita que metas algunos juegos en formato .NES en una carpeta.

Ten en cuenta que el core no soporta todos los juegos de NES, solo una gran cantidad, por lo que si el primero no te funciona no desesperes, prueba más.

Importante: este core solo funciona por VGA

¿Cómo hago funcionar el core de TTBlue/ZX Next?

Instalar el core en sí se hace igual que los demás cores, necesitas el fichero COREn.ZX1 e instalarlo. Además de eso, necesitáis instalar estos ficheros del firmware de TTBlue en la tarjeta SD.

Sin embargo el fichero arriba enlazado tiene el problema de contener cosas en exceso. Del mismo solo tenéis que extraer, de la carpeta SDCard, las carpetas TTBLUE y TMP, y el fichero TTBLUE.FW y ponerlos en vuestra tarjeta SD. Eso os permitirá arrancar, pero es posible que una vez arrancado ESXDOS no funciones: al pulsar F10 se produce un reset, y si pones comandos de ESXDOS dice "Nonsense in BASIC". Si esto ocurre es que el core y vuestra tarjeta no tienen el mismo ESXDOS. Para solucionar eso solo tenéis que saber que versión exacta de ESXDOS tenéis instalada en vuestro ZX-Uno, buscar el paquete original de dicha versión, sacar el fichero esxmmc.bin de dicho paquete, renombrarlo como esxmmc.rom y grabarlo dentro de la carpeta TTBLUE de la tarjeta SD, sustituyendo al que hay en dicha carpeta.

¿Cómo hago funcionar el core de Jupiter Ace?

No requiere configuración especial, pero solo puedes carga juegos por la entrada EAR, no soporta la tarjeta SD.

¿Cómo hago funcionar el core de Sam Coupé?

No requiere configuración especial, pero solo puedes carga juegos por la entrada EAR, no soporta la tarjeta SD.

¿Cómo hago funcionar el core de BBC Micro?

Hay que formatear una SD sin formato rápido, preparar fichero BEEB.MMB en la raíz con MMBImager e introducirlo como el primer archivo de la tarjeta.

Con RePag, AvPag cambiamos de modo VGA a vídeo compuesto, con Shift+F12 mostramos el selector de archivos (sin soltar Shift) y con F12 hacemos reset.

¿Cómo hago funcionar el core de Acorn Atom?

Formatear la tarjeta en FAT y meter estos ficheros para el core de Acorn Atom en la raíz.

Con Shift+F10 mostramos el selector de ficheros, con F10 hacemos reset, y F1-F4 elige modo turbo (F1 = 1Mhz, F2 = 2Mhz, F3 = 4Mhz, F4 = 8Mhz)

Importante: este core solo funciona por VGA

¿Cómo hago funcionar el core de Acorn Electron?

PENDIENTE

Con RePag, AvPag seleccionamos VGA o video compuesto, F10 es el reset.

¿Cómo hago funcionar el core de Colecovision?

PENDIENTE

¿Cómo hago funcionar el core de Atari 2600?

Simplemente pulsa Esc para mostrar el menú

Importante: este core solo funciona por VGA

¿Cómo hago funcionar el core de Apple II?

Necesitamos lo siguiente:

  • Una imagen de disco en formato .nib, si no está en ese formato (suelen estar en .dsk o .do), puedes usar en windows la utilidad dsk2nib.exe disponible en la carpeta roms del core para convertirlo. Hay un par de imágenes preparadas en la carpeta roms, el DOS 3.3 (Apple33.nib) y el juego Spy vs. Spy (SpyVsSpy.nib)
  • Una tarjeta SD dedicada (se borra todo el contenido).
  • Una utilidad de volcado RAW de archivos a disco, como dd de GNU/Linux o HDD Raw Copy Tool de Windows, con la que volcaremos el archivo .nib a la SD.

Importante: este core solo funciona por VGA

Shift+Fx carga el disco x, por ejemplo Shift+F1 carga el primer disco.

¿Cómo hago funcionar el core de Vic 20?

PENDIENTE

Importante: este core solo funciona por VGA

¿Cómo hago funcionar el core de Atari 800XL ?

PENDIENTE

¿Hay cores de Amstrad CPC o MSX? ¿Es posible hacerlos?

A día de hoy (10/4/2017) hay ya cores disponibles de CPC464 y MSX1. Os recomendamos mirar los respectivos hilos del foro de ZX-Uno.

¿Hay cores de máquinas arcade?

Sí, algunas máquinas clásicas: échale un ojo a este hilo del foro sobre los cores de arcades.

PROGRAMACION DE ZX-UNO

¿Qué funcionalidades especiales tiene ZX-Uno?

ZX-Uno reune muchas funcionalidades que vienen heredadas de distintos periféricos, y en algun caso de algunas expansiones modernas o de antiguos clones. Esta es una lista de funcionalidades 'extra' que no estaban en el Spectrum de 48K original:

  • Modos gráficos HiRes y HiColor de Timex
  • Modo gráfico radastan
  • ULAPlus
  • Interrupción raster
  • Kempston mouse
  • Sonido chip AY
  • Turbo sound (segundo chip AY)
  • Configuración de sonido Stereo
  • EXSDOS acceso a tarjeta SD
  • Memoria adicional
  • Soporte de SpecDrum

¿Cómo puedo detectar un ZX-Uno?

En general si se va a usar una funcionalidad de ZX-Uno, y es posible realizar una comprobación de dicha funcionalidad, se recomienda hacerlo así. Sin embargo en ocasiones no es posible, y la única manera posible es detectar el ZX-Uno en si. Para ello lo mejor es acceder al registro COREID de ZX-Uno. Para ello hay que tener en cuenta que este registro devuelve una cadena de caracteres, devolviendo un carácter cada vez que lo leemos, y un cero al final. Si el registro devuelve un cero la primera vez (cadena vacía) o si devuelve cualquier carácter fuera del rango ASCII 32 a 127, es que no es un ZX-Uno.

Este código permite determinarlo:

10 OUT 64571, 255
20 LET A$=””
30 LET A= IN 64827
40 IF (A < 32) OR (A > 127) THEN GOTO 60
50 IF (A <> 0) THEN LET A$ = A$ +CHR(A): GOTO 30
60 IF (A$=””) GOTO 80
70 PRINT “ES UN ZX-UNO”: STOP
80 PRINT “NO ES UN ZX-UNO”

¿Qué modos gráficos soporta el ZX-Uno

El ZX-Uno soporta 4 modos gráficos:

  1. El normal de ZX-Spectrum: 256x192 pixeles, con un color de paper/ink/birght/flash por cada bloque de 8x8 pixeles.
  2. El modo HiColour de Timex, con 256x192 pixeles, y un color de paper/ink/bright/flash por cada bloque de 8x1 pixeles.
  3. El modo HiRes de Timex, con 512x192 pixeles, con solo un color de paper y uno de ink para toda la pantalla.
  4. El modo Radastan, con 128x96 pixeles, linear, con 16 colores por pixel.

Además, gracias a ULAplus es posible modificar la paleta de colores y llegar a modos con hasta 64 colores simultáneos.

ZX-Uno arranca con el modo normal de ZX-Spectrum, en el que no vamos a ahondar porque es de sobre conocido, respecto a los otros modos, hay que tener en cuenta que los Timex permitían tener dos bancos de memoria de pantalla, que pueden intercambiarse. Uno de ellos estaría situado en la zona habitual (0x4000, es decir, 16384) y es llamado Screen 0, y el segundo estaría situado en 0x6000 (24576) y es llamado Screen 1. En el modo normal de ZX Spectrum es posible utilizar esta característica para cambiar rápidamente el contenido de pantalla preparando una pantalla en 0x6000 mientras se muestra la que hay en 0x4000, y luego cambiar a la de 0x6000 cuando ya está lista, o al revés, siendo el cambio instantáneo. Veremos como hacer este cambio más adelante.

El modo HiColour utiliza el área habitual de pantalla (Screen 0) para definir los pixeles activos y los no activos, es decir, desde 0x4000 (16384) en adelante, ocupando los habituales 6144 bytes. Sin embargo la zona de atributos, en lugar de estar situada justo tras la zona de datos como en el modo normal, está situada en Screen 1 (0x6000), ocupando 6144 bytes también. La colocación de los atributos es similar a la de los datos, es decir, primero los de la primera fila, luego los de la octava, etc. para el primer tercio de pantalla, luego el segundo tercio, etc.

El modo HiRes utiliza ambas zonas, Screen 0 y Screen 1. Cada zona guarda datos de píxeles igual que el Spectrum original. En cada linea de 512 píxeles, cada trozo de 8 píxeles corresponde alternativamente a Screen 0 y Screen 1. Es decir, los primeros 8 píxeles de una cierta línea están en Screen 0, en la posición de memoria que le correspondería según el esquema habitual del Spectrum. Los siguientes 8 píxeles estarían en la Screen 1, en la posición de memoria equivalente, y así sucesivamente. No hay atributos. Los bits 3 a 5 del puerto $FF definen el color de tinta. El color de borde y paper se establece automáticamente como 7-tinta. El brillo está siempre activado tanto en borde como en paper. No es posible cambiar el color del borde para que sea distinto de paper. El puerto $FE por tanto no funcionará para este cometido.

Una forma de ver este modo es con el siguiente programa:

10 OUT 255,6
20 FOR n=0 TO 6143
30 POKE 16384+n,255:POKE 24576+n,0
40 NEXT n

En cada linea, cada dos columnas de 8 píxeles valen 11111111 y 00000000.

El modo radastan, es un modo linear en el que se utiliza el Screen 0, siendo cada byte utilizado para describir el color de dos pixeles. Por ejemplo si un byte es así (en binario)

[AAAABBBB]

quiere decir que el pixel de más a la izquierda tiene el colore AAAA y el de más a la derecha el color BBBB. La pantalla ocupa por tanto 128x96/2 = 6144 bytes una vez más.

¿Cómo se activan los modos HiRes y HiColor de Timex?

Los modos Timex se manejan ambos a través del puerto 0xFF (255), lo que se escriba en este puerto mediante un OUT 255,X maneja esta información:

Bits 0-2: Modo: 000=modo clásico en screen 0, 001= modo clásico en screen 1,
                010 = modo HiColour, 110=Modo HiRes, otros valores no son válidos

Bits 3-5: Solo para el modo HiRes, define el color de PAPER e INK
              000 – Negro sobre blanco   100 – Verde sobre magenta
              001 – Azul sobre amarillo  101 - Cyan on Red
              010 – Rojo sobre Cyan      110 – Amarillo sobre azul
              011 – Magenta sobre verde  111 – Blanco sobre negro

Bit 6:    Si se pone a 1 deshabilita la generación de la interrupción de timer

Bit 7:    Selecciona que banco debe usar el MMU horizontal 0=DOCK, 1=EX-ROM.

Con estos datos en la mano, las acciones necesarias para activar el modo HiColour es hacer un OUT 255, 2, y para el modo HiRes un OUT 255, 6, si bien eso hará que se active con la combinación de negro sobre blanco.

Respecto a los dos bits superiores, por lo que respecta a este manual no vamos a entrar en detalles, pero salvo que tengáis claro lo que hacen, dejadlos a 0.

Existe un método alternativo de activar los modos Timex gracias a ULAPlus, lo podéis ver detallado, junto con otras funcionalidades de ULAplus que indicaremos más adelante,aquí:

Wiki de ULAPlus

Desde la BIOS 0.55 es posible deshabilitar los modos extra desde la propia BIOS. Esto se hizo porque los modos Timex provocan incompatibilidad con algunos juegos que los activan por error. Esto es una desventaja para juegos que utilicen estos modos, porque impide activarlos. Para evitar esto, hacer un OUT 64571,15: OUT 64827,0 reactiva la posibilidad de activar esos modos.

¿Cómo se activa el modo Radastan?

El modo radastan es un modo (por ahora) exclusivo de ZX-Uno. Es un modo de baja resolución que a cambio da la posibilidad nunca vista en el Spectrum de tener un color por pixel, evitando así el attribute clash. Para activar el modo radastan es necesario utilizar el registro RADASCTRL (0x40, o 64 en decimal) de ZX-Uno, para lo cual básicamente esta es la secuencia para activarlo, que es la misma para escribir en cualquier registro de ZX-Uno:

OUT 64571,64
OUT 64827,3

Para desactivarlo, el segundo OUT deberá asignar el valor 0.

Notas:

  • En los primeros cores de Spectrum de Zx-Uno se utilizaba otro método utilizando los registros de ULAplus. Ese método ha quedado anulado y ya no funciona, actualiza tu core si es el caso.
  • EL modo Radastan utiliza los 16 primeros colores de la paleta de ULAPlus, y dicha paleta por defecto está puesta a cero, lo cual quiere decir que salvo que cambiemos la paleta (ver detalles más adelante en esta FAQ) los 16 colores son negro, así que no apreciaremos cambios.
  • Desde la BIOS 0.55 es posible deshabilitar los modos extra desde la propia BIOS. Esto se hizo porque los modos Timex provocan incompatibilidad con algunos juegos que los activan por error. Esto es una desventaja para juegos que utilicen estos modos, porque impide activarlos. Para evitar esto, hacer un OUT 64571,15: OUT 64827,0 reactiva la posibilidad de activar esos modos.

Existe una librería creada para Z88DK que permite manejar el modo Radastan sin problemas, podéis encontrar la última versión disponible a día de hoy en este enlace del foro sobre Z88DK y el modo Radastan. Además, hay una libraría para modo Radastaniano para ZX Basic.

¿Y el scroll hardware del modo Radastan?

El modo Radastan soporta también scroll hardware, lo cual quiere decir que la pantalla mapeada en memoria puede ser más grande que la pantalla real, y que solo se vea una parte de dicha pantalla mayor en la real.

Para controlar el scroll hardware hay dos registros del ZX-Uno llamados RADASOFFSET Y RADASPADDING. En RADASOFFSET se mete un valor de 16 bits para indicar en qué offset a partir de la dirección de video ($4000 en principio, aunque podria ser la shadow en C000 si lo hemos cambiado). Por ejemplo modificándolo de 64 en 64 bytes se puede hacer scroll vertical directamente.

RADASPADDING indica cuantos bytes ocupa una linea en modo Radastaniano, por defecto son 64 bytes, que es el mínimo, y en ese caso el valor del registro es 0. Si ponemos por ejemplo 65 (o sea, metemos un 1 en el registro), solo se pintarán en pantalla 64 de cada 65 bytes, quedando el otro "oculto" por la derecha. Eso permite usar RADASOFFSET para mover y hacer scroll de derecha a izquierda de 1 byte en 1 byte (o sea, de dos en dos pixeles).

Hay que tener en cuenta que RADASOFFSET se circunscribe a una página de 16k, es decir, si hacemos que Radaoffset haga leer más allá de 16384 bytes del inicio de la página, en realidad volverá a leer del principio de la página (es circular).

El registro RADASOFFSET es el 65, por lo que para escribir en él se escribe primero el byte menos significativo del valor de 16 bits, y luego el más significativo:

OUT 64571,65
OUT 64827,LSB
OUT 64827,MSB

El registro RADASPADDING es el 66, y se escribe así:

OUT 64571,66
OUT 64827, valor

¿Cómo se cambia de página usando los modos Timex?

Es posible conmutar entre las zonas de video Screen 1 y Screen 0, para lo cual simplemente hay que seleccionar el modo 0 o 1 cuando se actua sobre el puerto 255, es decir, OUT 255,0 para seleccionar Screen 0 en 0x4000, y OUT 255,1 para seleccionar Screen 1 en 0x6000. De esa manera se pueden intercambiar rápidamente dos pantallas previamente definidas.

Al ser los modos Timex y el modo Radastan totalmente independientes, también se puede utilizar para intercambiar dos pantallas en modo Radastan, situadas en las dos áreas de memoria correspondientes.

Yendo más allá, este sistema de paginación combinado con el bit 3 del puerto 0x7FFD (si está habilitada la paginación de 128K) permite tener un total de 4 pantallas en 4000h, 6000h, C000h y E000h

¿Cómo se cambia la paleta de color con ULAPlus?

Usando ULAplus podemos usar una paleta de 64 colores, para lo cual debemos cambiar primero a modo 64 colores así:

OUT 48955, 64
OUT 65339, 1

Luego podemos modificar la entrada n (0-63) de la paleta asignándole el color x así:

OUT 48955, n
OUT 65339, x

X es una representación RGB del color en 8 bits: GGGRRRBB. Es decir, se usan 3 bits para el verde, 3 para el rojo y 2 para el azul (esto es así porque el ojo humano diferencia peor los azules)

Los 64 colores de la paleta se presentan en 4 grupos de 16 colores, 8 para INK y 8 para paper (permite así tener colores diferentes de tinta y papel). A la hora de elegir el color a pintar en un bloque de 8x8 el color elegido depende de los valores de flash/bright/ink/paper de la siguiente manera:

Spectrumcolor01234567
Flash off
Bright off
Ink01234567
Paper89101112131415
Flash off
Bright on
Ink1617181920212223
Paper2425262728293031
Flash on
Bright off
Ink3233343536373839
Paper4041424344454647
Flash on
Bright on
Ink4849505152535455
Paper5657585960616263

Aunque en teoría esto permitiría tener 64 colores en pantalla, la realidad es que solo puede conseguirse si se pintan barras, porque es imposible utilizar el color de tinta de uno de los cuatro bloques con el color de papel de otro bloque diferente.

Podemos redefinir la paleta en todos los modos mencionados anteriormente, es decir, en el estándar de Spectrum, en los dos modos Timex, y en el modo radastan.

En este último caso caso se usarán los 16 primeros colores de la paleta para los 16 colores que puede mostrar dicho modo. En el momento de escribir estas líneas hay planes para que el color de borde del modo radastan utilice un color aparte de la paleta, de modo que sea independiente de esos 16 colores, pero ese cambio aún no se ha concretado.

¿Cómo funciona la interrupción raster?

El ZX Spectrum produce una interrupción no enmascarable que se produce con una frecuencia de 50Hz y va sincronizada con el retrazado vertical de la pantalla. Esto se ha utilizado tradicionalmente para realizar distintos efectos gráficos.

Por su parte ZX-Uno permite activar lo que se denomina la interrupción raster, que se produce cuando el repintado de pantalla empieza a pintar el borde derecho de la línea que le indiquemos.

Para utilizar esta interrupción tenemos utilizar los registros $0c y $0D del Zx-Uno (RASTERLINE y RASTERCTRL). El valor de RASTERLINE indicará la línea de pantalla donde se produce la interrupción, siendo esta línea relativa a la línea de la pantalla donde empieza la zona de paper. Por ejemplo si RASTERLINE vale 0, se lanzará cuanto se empiece a pintar el borde de la línea inmediatamente encima de la primera línea de paper, y 192 al comienzo del borde inferior, debajo del paper.

Por su parte RASTERCTRL queda definido así:

INT0000DISVINTENARINTLINE8

INT: este bit sólo está disponible en lectura. Vale 1 durante 32 ciclos de reloj a partir del momento en que se dispara la interrupción ráster. Este bit está disponible aunque el procesador tenga las interrupciones deshabilitadas. No está disponible si el bit ENARINT vale 0. DISVINT: a 1 para deshabilitar las interrupciones enmascarables por retrazo vertical (las originales de la ULA). Tras un reset, este bit vale 0. ENARINT: a 1 para habilitar las interrupciones enmascarables por línea ráster. Tras un reset, este bit vale 0. LINE8: guarda el bit 8 del valor de RASTERLINE, para poder definir cualquier valor entre 0 y 511, aunque en la práctica, el mayor valor está limitado por el número de líneas generadas por la ULA (311 en modo 48K, 310 en modo 128K, 319 en modo Pentagon). Si se establece un número de línea superior al límite, la interrupción ráster no se producirá.

Como veis, para activar la interrupción raster es necesario activarla expresamente con ENARIT, pero además lo normal será desactivar la interrupción clásica del retrazado vertical, salvo que queramos hacer algún efecto que necesite ambas y podamos controlarlo.

La interrupción raster puede ser utilizada para hacer combinaciones de colores muy avanzadas, usando ULAplus y los modos avanzados de video de ZX-Uno, porque aunque en teoría hay una paleta de 64 colores con ULAPlus, nada impide cambiar los colores de esa paleta a partir de cierta línea de pantalla, de modo que sean colores nuevos, y llevando así a imágenes con más de 64 colores. Incluso es posible cambiar el modo de video a mitad de pintado de pantalla, con lo que sería posible, si el sistema está bien hecho,tener una parte superior con modo Timex HiColor por ejemplo para una imagen, y una parte inferior con modo Timex HiRes para pintar el texto en una aventura conversacional.

¿Cómo activo los modos turbo?

El Zx-Uno es capaz de hacer funcionar la CPU a 7Mhz o 14Mhz (además de con los 3.5Mhz estándar de un Spectrum). Para activar dichas velocidades es necesario modificar el registro SCANDBLCTRL (0x0B) de Zx-Uno.

Si simplemente queréis probarlo podéis hacerlo desde la BIOS, o bien usar ZXUC una vez arrancado el ZX-Uno. Es posible que en la BIOS y según la versión que tengáis os encontréis un modo x8 (28Mhz), tened en cuenta que es un modo experimental que probablemente no funcione bien en un ZX-Uno real.

Si lo que queréis es modificar la velocidad en vuestros programas, tened en cuenta que el registro 0X0B tiene este formato a nivel de bit (bit 7 a la izquierda):

TURBO0FREQENSCANVGA

Donde TURBO es 00 para seleccionar 3.5 MHz, 01 para seleccionar 7 MHz, y 1x para seleccionar 14 MHz.

En principio podría parecer que ponerlo todo a 0 pone el modo normal, a 64 el modo de 7Mhz y a 128 el modo de 14Mhz:

OUT 64571,11      (0X0B)
OUT 64827,128

Sin embargo es necesario tener en cuenta que el bit más bajo (ENSCAN) es el que controla si la salida es por VGA o PAL, por lo que no es conveniente ponerlo a 0 si está a 1 (podríamos dejar a nuestro usuario sin ver la pantalla). Por tanto lo correcto es leer el valor de dicho registro:

OUT 64571,11   (0X0B)
LET VAL = IN 64827,128

Quitar los dos bits superiores, que como en Basic Sinclair no existe el AND bitwise se puede hacer así:

IF (VAL>=128) THEN LET VAL=VAL-128
IF (VAL>=64) THEN LET VAL=VAL-64

Y después sumarle 0 para modo normal, 64 para modo 7Mhz o 128 para 14Mhz:

LET VAL=VAL+64
OUT 54571,11
OUT 64827,VAL

¿Cómo maneja ZX-Uno el ratón?

El ZX-Uno implementa la interfaz Kempston Mouse a través del puerto PS/2, al que podemos conectar un ratón PS/2 usando un splitter (para poder conectar el teclado también).

Básicamente, la lectura del ratón se realiza mediante acceso a varios puertos:

PuertoHexValor
64479FBDFPosición horizontal (Eje-X)
65503FFDFPosición vertical (Eje-Y)
64223FADFEstado de botones (bitwise)

Así PRINT IN 64479 nos devuelve la posición en el eje X.

El contenido del puerto 64223 se puede leer el siguiente modo, bit a bit:

BitContenido
0A cero si el botón derecho está pulsado
1A cero si el botón izquierdo está pulsado
2A cero si el botón central está pulsado
3A cero si el cuarto botón está pulsado
4 a 7Devuelven la posición de la rueda del ratón, por defecto valen 1111

Nota: hay que tener en cuenta que no existe ningún tipo de driver que de soporte al ratón, lo cual se manifiesta principalmente en el hecho de que no hay ningún puntero de ratón, salvo que lo pintemos nosotros mismos.

Aparte de poder leer el ratón como un dispositivo Kempston Mouse, en ZX-Uno también podemos leer directamente los datos PS/2 recibidos, para lo cual debemos usar los registros MOUSEDATA (0x09) y MOUSESTATUS (0x10) de ZX-Uno. La lectura (o escritura) de estos registros y su significado se escapa del alcance de este manual, pero no queríamos dejar de constatar el hecho por si pudiera ser útil. Más información al respecto de esto en la descripción de registros del Zx-Uno.

¿Cómo programar el sonido por el chip AY del ZX-Uno?

El chip AY, disponible en los modelos de 128k de ZX Spectrum, está también disponible en ZX-Uno aun para los modelos de 48K. Por supuesto si arrancamos con una ROM de 128K podemos usar el comando PLAY del BASIC, pero para usos más avanzados será necesario conocer lo siguiente.

El chip AY tiene varios registros programables:

RegistroFunciónRango
0Canal A fine pitch8-bit (0-255)
1Canal A course pitch4-bit (0-15)
2Canal B fine pitch8-bit (0-255)
3Canal B course pitch4-bit (0-15)
4Canal C fine pitch8-bit (0-255)
5Canal C course pitch4-bit (0-15)
6Noise pitch5-bit (0-31)
7Mixer8-bit (ver abajo)
8Canal A volumen4-bit (0-15, ver abajo)
9Canal B volumen4-bit (0-15, ver abajo)
10Canal C volumen4-bit (0-15, ver abajo)
11Envolvente fine duración8-bit (0-255)
12Envolvente course duración8-bit (0-255)
13Forma de la envolvente4-bit (0-15)
14I/O port A8-bit (0-255)
15I/O port B8-bit (0-255)

Para modificar un registro del chip AY debe escribirse en el puerto de control 65533 el número del registro a modificar, y seguidamente en el puerto de datos 49149 el valor. Para leer el valor (raro pero posible) se debe escribir en el puerto de control 65533 el número del registro, y después leer el dato del mismo puerto de control (no del de datos).

Por ejemplo esté código pone un 255 en el registro 7:

OUT 65533,7
OUT 49149,255

El registro “mixer” tiene los siguientes campos, permitiendo activar o desactivar los canales:

76543210
E/SE/SNoise CNoise BNoise ATone CTone BTone A

Las salidas E/S por ahora no hacen nada en el ZX-Uno, aunque es posible que en el futuro sean aprovechadas para algo.

Valores de pitch

Para determinar la frecuencia de la onda que suene por cada canal - o dicho de otro modo la nota que queremos que suene - se utilizan los valores de pitch. Cada nota musical tiene una frecuencia específica asignada, y cualquier valor fuera de ella son notas desafinadas. Podemos ver en la siguiente tabla los valores de frecuencia para una escala completa en una octava media.

NotaFrecuencia (Hz)NotaFrecuencia (Hz)
La220Re#311.1
La #233.3Mi329.63
Si246.94Fa349.23
Do (medio)261.63Fa#370
Do#277.2Sol392
Re293.66Sol#415.3

Ahora bien, el chip AY no nos deja indicar directamente la frecuencia que queremos que suene en un canal, sino que lo tenemos que hacer mediante el pitch. El pitch es un valor entre 1 y 4095, y la frecuencia que suene por un canal es la resultado de dividir 110,83Khz entre el pitch. Es decir, podemos obtener un valor entre aproximadamente 27Hz (con pitch 4095) y 110.83Khz (con pitch 1).

El pitch se selecciona para cada canal con dos registros, el llamado course, que guarda los 4 bits más significativos (0-15) y el llamado fine, que guarda los 8 bits menos significativos (0-255).

Ejemplo de un sonido sencillo en BASIC:

OUT 65533,0 :REM Fine Pitch canal A=43
OUT 49149,43
OUT 65533,1 : REM Course Pitch canal A=1
OUT 49149,1
OUT 65533,8 : REM Volumen canal A a  = 12  
OUT 49149,12
OUT 65533,7 : REM registro MIXER, activo canal A
OUT 49149,1

En definitiva, con un course pitch de 1 y un fine pitch de 43, el valor de Pitch es 299, y 110,83Khz dividido de 299 son 370hz, es decir, un Fa sostenido, que sonará a un volumen de 12 (de un máximo de 15) por el canal A porque el mixer tiene activo ese canal.

Hay que tener en cuenta que por las limitaciones técnicas que este cálculo impone, es más difícil afinar bien las frecuencias para que cuadren con las notas oficiales occidentales cuanto más baja sea la frecuencia.

Volumen

Los registros de volumen (8,9 y 10) contienen un valor de 4 bits con el volumen de cada canal, pero si el bit 5 está a uno entonces la onda envolvente indicada en el registro 13 es aplicada, y el valor de volumen es ignorado.

Envolventes

El chip AY soporta las siguientes envolventes o formas de onda, que se establecen mediante el registro 13. Notese que estas envolventes afectan a la amplitud de la onda (volumen) pero no a la frecuencia (pitch o tono).

La onda viene dada por una combinación de los siguientes cuatro bits en dicho registro:

BitComando
3Continue
2Attack
1Alternate
0Hold

Dependiendo de los bit seleccionado encontraremos unas ondas diferentes.

La frecuencia de la onda envolvente dependerá de los valores en los registros 11 y 12, que permiten marcar un valor entre 1 y 65535 (siendo el registro course el que guarda el byte más significativo, y el fine el menos significativo). Dicho valor dividirá a una frecuencia de 6,91Khz, de modo que si el periodo es 1, la onda envolvente tendrá una frecuencia de 6,91Khz, y si es valor es 65535 será de 0,11Hz.

Se puede encontrar una descripción más detallada de las envolventes, y del chip AY en general, en las especificaciones del chip AY.

¿Cómo programo el Turbo Sound en ZX-Uno?

ZX-Uno soporta Turbo Sound, que básicamente es un segundo chip AY que puede reproducir música a la vez que el primero. Para ello basta con seleccionar a que chip queremos acceder, mediante un OUT 65533,255 para acceder al primero, y un OUT 65533,254. Una vez seleccionado el chip en cuestión, la escritura en registros AY afecta solamente a ese chip.

¿Cómo se programa el SpecDrum?

Debido a la complejidad del interfaz, sugerimos acceder a la información del propio Cheetah SpecDrum.

¿Cómo controlo la configuración mono/stereo?

A través del puerto 0xF7 (247) es posible controlar por que altavoces se reproducen los distintos canales del Spectrum, así como por que altavoces suena el beeper original del Spectrum, y el interfaz SpecDrum. El valor enviado o leído de ese puerto es un byte cuyos bits se interpretan así:

bitsControl
0-1SpecDrum y beeper
2-3Canal C
4-5Canal B
6-7Canal A
Así, cada canal del chip AY, y el beeper y SpecDrum podrán tener un valor de dos bits que indique por donde deben sonar:
ValorAltavoz
00Ninguno
01Derecho
10Izquierdo
11Ambos (mono)

El valor por defecto de este puerto es 10011111b, que viene a querer decir que el el canal A suena por el altavoz izquierdo, el canal B por el derecho, el canal C por ambos y tanto beeper como SpecDrum por ambos también. Esto viene a ser lo que se denomina configuración ACB.

Como puedo acceder a la tarjeta SD?

La información sobre como acceder al disco con ESXDOS no es pública, sin embargo son conocidas algunas funciones de manera extraoficial. Estos datos no son oficiales y son válidos para ESXDOS 0.8.6 pero podría no funcionar en futuras versiones si las hubiera, usadlo a vuestro propio riesgo.

Lo primero que debéis saber, es que todas las llamadas a ESXDOS son a través de la instrucción RST 8, y que justo detrás de esa instrucción debe venir el código de la función concreta solicitada (leer, escribir, etc.). Además según el caso determinados registros de la CPU deben llevar asignados distintos valores.

Detectar si la unidad de disco está lista (Ready)

M_GETSETDRV   equ   $89
XOR a
RST $08
DB M_GETSETDRV

El carry flag se activa si hubo error.

Abrir un archivo

F_OPEN   equ   $9a
XOR a
LD B, FA_READ   ; b = modo de apertura
LD IX, FileName   ; ix = Puntero al nombre del fichero (ASCIIZ)
RST $08
DB F_OPEN      ; abrir archivo en modo lectura

Devuelve en el registro A el handler para manejar el fichero.

Activa el carry flag si el fichero no se puedo abrir.

Otros modos de abrir fichero:

FA_READ   equ   $01
FA_APPEND equ $06 
FA_OVERWRITE equ $0C

Leer desde un archivo

F_READ   equ   $9d
LD IX, 16384   ; ix=dirección donde almacenar lo leido
LD BC, 6912   ; bc=bytes a leer
LD A, handler; A = el handler del fichero abierto anteriormente en F_OPEN
RST $08
DB F_READ      ; Leer archivo

El carry flag se activa si hubo un problema al leer.

Escribir a archivo

F_WRITE   equ   $9e
LD IX, 16384   ; ix=dirección de memoria que se va a copiar en disco
LD BC, 6912   ; bc=bytes a escribir
LD A, handler; A = el handler del fichero abierto anteriormente en F_OPEN
RST $08
DB F_WRITE     ; Escribir archivo

El carry flag se activa si hubo un problema al escribir.

Cerrar archivo

F_CLOSE   equ   $9b
LD A, handler ; A =handler del fichero a cerrar
RST $08
DB F_CLOSE

El carry flag se activa si hubo un problema al cerrar el fichero.

Notas

  • Para los path de los archivos cuando hay directorios por medio se utiliza el carácter ‘/’ como en UNIX.

¿Como puedo usar memoria adicional?

Hay tres maneras de acceder a más memoria en ZX-Uno:

  • Memoria del DivMMC
  • Paginación horizontal Timex MMU
  • Acceso directo a la memoria de ZX-Uno vía registro mastermapperMASTERMAPPER

El ZX-Uno implementa un DivMMC con 128K RAM, así que es posible usar esa RAM extra para tus desarrollos. Este es un enlace a la página de documentación de Velesoft's acerca de la memoria en el DivIDE, compatible con el mapa de memoria de DivMMC.

Las maquinas Timex emuladas por el ZX-Uno tienen una funcionalida de paginacion horizontal.

El mapa de memoria de estos equipos es:
         EX-ROM      HOME       DOCK
0xffff +----------+----------+----------+
       |  Bank 7' | 32K RAM  |  Bank 7  |
       |          |          |          |
0xe000 +----------+          +----------+
       |  Bank 6' |          |  Bank 6  |
       |          |          |          |    
0xc000 +----------+          +----------+
       |  Bank 5' |          |  Bank 5  |
       |          |          |          |
0xa000 +----------+          +----------+
       |  Bank 4' |          |  Bank 4  |
       |          |          |          |
0x8000 +----------+----------+----------+
       |  Bank 3' | Screen 1 |  Bank 3  |
       |          |          |          |
0x6000 +----------+----------+----------+
       |  Bank 2' | Screen 0 |  Bank 2  |
       |          |          |          |
0x4000 +----------+----------+----------+
       |  Bank 1' | 16K ROM  |  Bank 1  |
       |          |          |          |
0x2000 +----------+          +----------+
       |  Bank 0' |          |  Bank 0  | 
       |          |          |          | 
0x0000 +----------+----------+----------+

La memoria es paginada en bancos de 8K banks bien de DOCK or EX-ROM, pero estos bancos son mutuamente exclusivos, no puedes paginar un banco de cada a la vez. El bit 7 del puerto 0xff determina que banco usamos (0=DOCK, 1=EX-ROM). El puerto 0xf4 determina que bancos son paginados con cada bit refiriendose al banco en cuestión (0-7 o 0'-7'). Cuando la memoria va a ser paginada, se deben deshabilitar las interrupciones y el stack (SP) debe estar en un área que no vaya a paginarse.

El banco HOME es la zona normal de memoria del Spectrum, los 32K superiores son memoria sin contienda pero los 16K inferiores son con contienda. Los bancos se paginan sobre estos, pero paginar la zona de pantalla no hace que la ULA acceda a esa RAM.

Leer estos puertos devuelve el último byte enviado a ellos.

Usar la RAM del 128K + 128K RAM del DivMMC + 128K RAM del Timex permite usar hasta 384K RAM. Si necesitas más debes acceder a la memoria del ZX-Uno en modo RAW:

Esto es posible usando el registro MASTERMAPPER (0x01). Cuando se escribe en dicho registro, el banco de 16K seleccionado (0 a 31 en el ZX-Uno original de 512K) se mapeará en 0xC000-0xFFFF. De esa manera se puede acceder a toda la memoria. Tristemente, este acceso raw solo e sposible usando una ROM rooted, en este momento, dado que bit LOCK del registro MASTERCONF (0x00) deshabilita tanto la escritura en SPI flash como el acceso directo a memoria. Esto es así porque acceder directamente a la RAM es un poco peligroso:

  • Algunos de los bancos de la RAM se usan para almacenar ROMS (System ROMs y ESXDOS ROMS). Mapear esos bancos en 0xC000 y modificarlos es modificar las ROMs, y no volverán a su estado original hasta que se haga un hard reset. Aunque se puede hacer a propósito, en general es una cosa arriesgada.
  • Además, la RAM es usada por los dot command de ESXDOS, y pueden ser corrompidos si no se tiene cuidado

Por otro lado, si una vez tu programa inicia no necesita ni la ROM de Spectrum ni la de ESXDOS, se pueden usar esos dos slots sin problema, siempre que nos aseguremos que el banco de la ROM contiene al principio (direccion 0000) una rutina simple que escriba en pantalla que debe reiniciarse con hard reset para restaurar la ROM original.

UNBRICK DE ZX-UNO

Algo ha pasado y mi ZX-Uno no arranca. Unbrick fácil.

Si tu ZX-Uno no arranca pero se enciende los leds es posible que en un upgrade o por alguna otra razón se te haya brickeado.

Hay varios pasos a seguir si así es:

Arranca el ZX-Uno con un joystick conectado y manteniendo la palanca hacia arriba y el botón de disparo pulsado. Si te sale algo parecido a una carta de ajuste estás de enhorabuena. En esas condiciones el ZX-Uno está esperando a que le cargues la BIOS por la entrada EAR, por lo que necesitarás un .tap con la última versión de la BIOS (pregunta en el foro dónde está ese último tap) y algo para reproducir .tap (tu móvil con alguna app, o un PC normalmente). También necesitarás el firmware en versión ZX1, es decir, el fichero FIRMWARE.ZX1, que debes poner en el raiz de la SD. Si no sabes donde encontrar el último FIRMWARE.ZX1, pregunta en el foro.

Simplemente arranca como se ha dicho y dale al play. Estate atento mientras carga para nada más terminar empezar a pulsar F2 rápidamente para entrar a la BIOS. Si se te pasa, tendrás que volver a empezar. Una vez dentro de la BIOS, elige la opción "Upgrade BIOS from SD del menú upgrade para restaurar la BIOS, y a partir de ahí ya puedes arrancar normal, y entrar en la BIOS para instalar el core de Spectrum y los demás, o bien restaurar todo con un fichero FLASH.ZX1.

Si no ha funcionado pasamos a restauración por cable, que es más complicado. La opción original en este caso es usar el cable de Xilinx, que es el oficial, pero hay otros métodos usando un cable clónico de Altera bastante má barato, o una Raspberry Pi.

¿Cómo puedo hacer unbrick con una Raspberry Pi?

Si disponemos de una Raspberry Pi, podemos ahorrarnos el cable Altera, y reprogramar nuestro ZX-Uno directamente desde la Raspberry. Para ello debemos hacer lo siguiente:

Bajamos el archivo del apartado anterior para extraer el fichero recovery.bit y lo grabamos en la tarjeta SD de la Raspberry Pi, que tiene que ser una A+, B+ o posterior. Podéis colocarlo por ejemplo en la carpeta /boot de la tarjeta, que es accesible desde Windows porque está en FAT, o podéis hacerlo directamente desde la Raspberry.

En nuestra Raspberry, y asumiendo que usamos Raspbian, hacemos lo siguiente:

sudo apt-get install autoconf
sudo apt-get install autopoint
sudo apt-get install libtool
sudo apt-get install libreadline-dev
sudo rm -rf /var/lib/apt/lists/*
sudo apt-get update
sudo apt-get install python-dev
sudo apt-get install git

Ahora nos bajamos el urjtag del repositorio git:

git clone git://git.code.sf.net/p/urjtag/git urjtag-git
cd urjtag-git/urjtag

Editamos el fichero src/cmd/cmd_bfin.c con nuestro editor favorito:

nano src/cmd/cmd_bfin.c

Y ponemos los siquiente en la primera línea:

#define _SYS_UCONTEXT_H

Y ahora compilamos con las siguientes órdenes:

./autogen.sh
make
sudo make install

Una vez compilador, arrancamos ldconfig y jtag:

sudo ldconfig
sudo jtag

Y desde dentro de jtag, como en el caso anterior, cargamos el recovery.bit

pld load /boot/recovery.bit

Ahora enchufamos el ZX-Uno y le metemos una SD con el fichero FLASH.ZX1 en el raiz.

Conectamos el cable JTAG a la Raspberry Pi siguiendo el siguiente esquema que podemos ver más abajo.

Una vez esté todo conectado escribe las siguientes órdenes:

cable gpio tdi=13 tdo=19 tck=26 tms=6
detect

Si todo va bien, el detect mostrará un mensaje en pantalla con el modelo de FPGA, y escribimos el siguiente comando (si pusimos el recovery.bit en la carpeta /boot)

pld load /boot/recovery.bit

Esperamos un rato hasta ver el menú upgrade de la BIOS y con el teclado PS/2 conectado al ZX-Uno pulsamos intro para que se flashee el fichero FLASH.ZX1 en el ZX-Uno.

El cable para flashear lleva la siguiente conectividad:

Zx-UnoRaspberry pi
JTAGPinGPIOPin
TMS6GPIO631
TDI5GPIO1333
TDO4GPIO1935
TCK3GPIO2637
GND2GND39
3.3V1N/CN/C

Nótese que el cable de 3.3v del ZX-Uno no se conecta de ninguna manera a la Raspberry Pi.

Si tienes una Raspberry PI de las primeras puedes a priori usar otros puertos GPIO, siempre  que cambias acordemente esta orden:

cable gpio tdi=13 tdo=19 tck=26 tms=6
detect

¿Cómo puedo hacer unbrick con el cable Altera?

Por apenas 3,50€ se puede comprar este cable en Aliexpress. Tardará entre 1 y 2 meses en llegar eso sí.

Además necesitaremos un conector microJST para la conexión JTAG del ZX-Uno, un conector para el conector de 10 pines del cable, y unos hilos de cobre para hacer el cable adaptador.

Este sería el esquema de como conectar los cables en el conector de 10 pines del cable grabador.

PinSeñal
1TCK
2GND
3TDO
43.3V
5TMS
6N/C
7N/C
8N/C
9TDI
10GND

Nota importante: si miras de frente el conector del blaster, colocando la muesca que tiene a la izquierda, y viéndose por tanto dos columnas de pines, los dos de arriba serán 1 y 2, los dos siguientes 3 y 4, etc. El pin 5 queda por tanto junto a la muesca.

Y este es el pinout del conector JTAG:

PinSeñal
13.3V
2GND
3TCK
4TDO
5TDI
6TMS

Se recomienda utilizar cables cortos para hacer las conexiones, se ha observado que cuanto más largos más posibilidad de que no funcione.

Una vez hecho el cable necesitamos el software urjtag y los drivers para Windows, junto con el fichero para recuperar el arranque. Lo más fácil es bajarse este archivo desde el foro de Zx-Uno:

http://www.zxuno.com/forum/download/file.php?id=505

Conectamos el cable JTAG al ZX-Uno y al USB Blaster. Alimentamos el ZX-Uno y conectamos el USB Blaster al PC. Descomprimimos el fichero descargado y lo primero es instalar los drivers: nos vamos al Administrador de dispositivos y lo buscamos, luego le damos a añadir ficheros manualmente y apuntamos a la carpeta drivers que acabamos de descomprimir. Si todo ha ido bien debemos ver el dispositivo "Altera USB-Blaster" en el Administrador de dispositivos.

Ahora, desde la línea de comandos (símbolo del sistema) nos vamos a la carpeta donde está el jtag y escribimos

jtag

Una vez dentro del programa tecleamos:

cable usbblaster
detect

Si todo va bien, el detect mostrará un mensaje en pantalla con el modelo de FPGA.

Luego escribimos el siguiente comando:

pld load recovery.bit

En la pantalla debe aparecer el menú de la BIOS (puede tardar hasta un minuto en aparecer. paciencia). Metes una SD con el FLASH.ZX1 en la raíz y pulsas Intro y aceptar para que se flashee el contenido del fichero FLASH.ZX1. Si no sabes donde obtener la última versión del FLASH.ZX1 pregunta en el foro.

¿Cómo puedo hacer unbrick con el cable Xilinx?

Obviamente la última opción es grabar el bitstream con el propio cable de Xilinx, el oficial para ZX-Uno. No vamos a dar detalles sobre esta solución.

ENLACES ÚTILES

Dado que ZX-Uno está en continua evolución, a veces no es fácil saber dónde está la última versión de tal o cual cosa, y es por eso que en esta FAQ no se añaden enlaces a algunos ficheros y se dice en su lugar "tienes que hacer esto pero por el último fichero pregunta en el foro".

Sin embargo, hay algunos sitios donde podéis buscar, que a priori tienen ciertas garantías de contener ciertos ficheros necesarios para algunas opciones, sobre todo para upgrades, instalación de COREs y cambio de ROMs. Aun así sigo recomendando que para cosas delicadas como upgrades preguntéis en el foro, no sea que instaleis lo que no se debe.

Además hay otros enlaces interesantes en sí mismos.