ZX Spectrum

De ZX-Uno wiki
Saltar a: navegación, buscar

Características

Diagrama de bloques

Diagrama bloques core zx spectrum.png

El core usa el módulo T80, con un pequeño wrapper para separar el bus de datos en dos: uno de entrada a la CPU (cpudin) y otro de salida desde la CPU (cpudout). Un multiplexor elige qué dato entra a la CPU según el periférico o región de memoria que se esté usando en ese momento, y equivale al bus triestado que existiría en el sistema original. El bus de datos de salida va hasta los demás módulos.

El módulo del manejador de memoria en realidad contiene muchas cosas:

  • El gestor de la memoria de doble puerto, que convierte la SRAM de alta velocidad incluida en la placa del ZX-Uno en una memoria de doble puerto, con un puerto de lectura/escritura, y otro independiente de sólo lectura. El primero es de uso exclusivo de la CPU, y el otro de uso exclusivo para la ULA.
  • La MMU vertical que proporciona el sistema de bancos de memoria y que implementa el esquema seguido en el Spectrum +2A/+3, que incluye a su vez el esquema del 128K/+2 gris. Esta MMU se ampliará para dar cabida a la MMU horizontal para dar soporte a la paginación compatible con Chloe 280SE.

La ULA es una versión extendida, con los timmings del 48K, pero con soporte para los modos Timex HiColour y HiRes, y ULAplus. Uno de los cores contempla además un modo de pantalla especial, diseñado como parte de un experimento, para dotar al Spectrum de una resolución de 128x96 pixeles, 16 colores de una paleta de 256, y con color independiente para cada pixel.

El módulo SPI alberga un pequeño core que implementa una interfaz SPI que se comparte entre los dos periféricos que usan este protocolo: la SPI flash y la tarjeta SD/MMC. Los chip-enable para cada uno de estos periféricos son antagonistas: si está habilitado uno, se deshabilita automaticamente el otro, para que no haya conflictos. Para la SD/MMC se implementan tanto los puertos DIVMMC como los puertos ZXMMC.

Para controlar todos los nuevos periféricos añadidos a ZX-Uno (en este momento, la SPI Flash, el registro de configuración maestro, y el mapeador de memoria maestro), se usan dos puertos asignados por el comité ZXI. Estos puertos dan lugar a usar hasta 256 registros diferentes de E/S. La dirección del registro aparece en "addr" y la operación (lectura o escritura), en las señales "ior" e "iow".

El mixer es un codificador Sigma-Delta de 8 bits, que mezcla las señales del altavoz, mic, ear y la salida de 8 bits del módulo AY-3-8912. La salida de la mezcla va directamente a la salida de audio.

Los relojes del sistema

La ULA

Ulaplus timex radastan.png

Generador de sincronismos y señal WSS

El teclado

La memoria

Módulo de multiplexión de la SRAM para obtener una memoria de doble puerto

Mapa de memoria de la SRAM

Mapa memoria zxuno core spectrum.png

Sistemas de banking vertical y horizontal

Periféricos SPI

El Z80

El bus de expansión

Nuevos registros E/S para control de ZX-Uno

Se dispone de los puertos $FC3B y $FD3B, asignados por el comité ZXI. A través de estos puertos se accede a un total de 256 registros de E/S diferentes exclusivos para ZX-Uno.

  • El puerto $FC3B (64571) guarda la dirección ($00 - $FF) del registro de E/S al que se quiere acceder. Puede leerse para saber cuál es la última dirección de registro asignada.
  • El puerto $FD3B (64827) es el puerto de acceso al registro seleccionado con el puerto anterior. Su sentido (lectura/escritura) dependerá de la implementación de cada registro.

Los registros implementados hasta ahora en ZX-Uno son:

Registros de ZX-Uno
Número Nombre Sentido Descripción Valor tras reset de usuario Valor tras reset maestro Valor tras poweron
$00 MASTERCONF Lectura/Escritura Formato binario (en gris, los campos que sólamente pueden alterarse cuando LOCK=0):
LOCK MODE1 DISCONT MODE0 I2KB DISNMI DIVEN BOOTM
  • BOOTM: a 1 indica que ZX-Uno está en modo boot (modo configuración). El modo boot sólo tiene sentido mientras se está ejecutando el firmware de arranque, donde se permite configurar algunos aspectos de ZX-Uno antes de pasar al modo ejecución. MASTERCONF siempre puede ser leído, tanto en modo boot como en modo ejecución. Se pone a 0 manualmente por programa, y en ese momento, ZX-Uno entra en modo ejecución.
  • DIVEN: a 0 indica que DIVMMC no está habilitado en el sistema, aunque los puertos de acceso a la interfaz SPI del slot SD/MMC siguen estando disponibles. La memoria usada por DIVMMC queda disponible para otros usos. A 1 indica que DIVMMC está habilitada. Si se habilita, antes de pasar al modo ejecución hay que cargar una imagen de ESXDOS en el banco de RAM correspondiente. El valor por defecto de este bit es 0.
  • DISNMI: a 1 indica que la función NMI de DIVMMC no estará disponible. NMI funcionará, pero no causará que ESXDOS se automapee, dejando así el control de NMI en manos de la ROM principal del sistema. Bit añadido para mejorar la compatibilidad de DIVMMC con SE Basic IV. Su valor por defecto es 0 (ESXDOS maneja los eventos NMI).
  • I2KB: a 1 configura la ULA para que devuelva un valor acorde con un Spectrum issue 2 al leer el puerto de teclado ($FE). A 0, el valor devuelto es compatible con issue 3 y posteriores. Por defecto su valor es 0.
  • MODE1,MODE0: especifica el modo de timing de la ULA para acomodarse a diferentes modelos de Spectrum. 00 = ULA ZX Spectrum 48K PAL, 01 = ZX Spectrum 128K/+2 gris, 10 = Pentagon 128, 11 = Reservado.
  • DISCONT: indica si se debe producir contienda de memoria en la memoria de video. 0 para habilitar contienda (compatibilidad con 48K y 128K). 1 para deshabilitar contienda (compatibilidad con Pentagon 128)
  • LOCK: Cuando vale 1, impide que se puedan hacer más cambios a ciertos bits del registro MASTERCONF, e impide además acceder a la SPI Flash. Este bit se pone a 0 sólo mediante un reset maestro (Ctrl-Alt-BkSpace) o al apagar y encender el clon.
No cambia 00000001 00000001
$01 MASTERMAPPER Lectura/Escritura De este registro sólo se usan sus 5 bits inferiores (valores $00 a $1F). El valor guardado es el número de un banco de 16KB de SRAM que será paginado en las direcciones $C000-$FFFF durante el modo boot. Los valores de este registro no tienen ningún efecto cuando ZX-Uno está en modo ejecución. 32 valores diferentes para este registro permiten direccionar hasta 512KB de SRAM. Si ZX-Uno se amplía con más memoria, se usarán más bits en este registro. La máxima cantidad de memoria manejable es de 4MB. No cambia 00000000 00000000
$02 FLASHSPI Lectura/Escritura Puerto de acceso al registro SPI conectado a la SPI Flash. Escribiendo un valor en este registro, se envía a la SPI Flash, si ésta está seleccionada. Leyendo un valor de este registro, se lee el último valor enviado por la SPI Flash, y además, la misma operación de lectura provoca que la SPI envíe un nuevo valor (que sería leído con la siguiente operación de lectura a este registro). Por esta razón, en operaciones de lectura de bloques, el primer byte leído con este puerto debe descartarse. No cambia No cambia 00000000
$03 FLASHCS Lectura/Escritura Sólo se emplea el bit 0. El valor escrito en este registro determinado el estado de la línea CS de la Flash SPI (0 = Flash seleccionada, 1 = flash no seleccionada) No cambia No cambia 00000001
$04 SCANCODE Lectura/Escritura En lectura, permite obtener el valor del último scancode generado por el teclado. En escritura permite enviar comandos al teclado. No cambia No cambia No cambia
$05 KEYSTAT Lectura Varios bits que indican si hay o no una nueva tecla pulsada, o soltada, y si ésta es una tecla extendida o normal.
BSY 0 0 0 ERR RLS EXT PEN
  • BSY: a 1 para indicar que hay una transmisión de datos al puerto PS/2 aún en proceso. Se debe esperar a que valga 0 para iniciar una nueva transmisión.
  • ERR: a 1 para indicar que la última transmisión a o desde el puerto PS/2 tuvo errores.
  • RLS: a 1 para indicar que el último evento pertenece a una tecla que ha sido soltada.
  • EXT: a 1 para indicar que el último evento pertenece a una tecla con código extendido (E0+scancode)
  • PEN: a 1 para indicar que hay un dato nuevo listo para ser leído en el registro SCANCODE. Tras leer KEYSTAT, este bit pasa a valer 0.
No cambia No cambia No cambia
$06 JOYCONF Lectura/Escritura Los bits 0 a 3 indican el modo de funcionamiento del joystick mapeado en teclado. Los bits 4 a 7 infican el modo de funcionamiento del joystick físico (conector DB-9 lateral). Los valores son: x000 = Disabled, x001 = Kempston, x010 = Sinclair 1, x011 = Sinclair 2, x100 = Protek/Cursor/AGF, x101 = Fuller, Resto de valores = reservado. El bit "x" en cada nibble indica, si está a 1, que el autofuego está habilitado para ese joystick. No cambia No cambia 00100001
$07 KEYMAP Lectura/Escritura En lectura, cada acceso proporciona el siguiente byte del mapa de teclado cargado en ZX-Uno actualmente. En escritura, el byte correspondiente al mapa de teclado marcado por la posición actual es modificado. En ambos casos, el puntero de direcciones se incrementa automáticamente para señalar al siguiente byte del mapa de teclado. Este puntero vuelve a 0 automáticamente tras un reset, una escritura en el registro $FC3B, o cuando se termina el mapa de teclado. El mapa de teclado, en la implementación actual, ocupa 16384 bytes. Ver descripción Ver descripción Ver descripción
$08 NMIEVENT Lectura Registro de estado que indica, en caso de producirse una NMI, si esta NMI fue producida por alguno de los eventos descritos a continuación. Si al menos uno de estos bits vale 1, al dispararse la NMI el bit BOOTM de MASTERCONF se pone a 1, y en el espacio de ROM ($0000-$3FFF) se mapea el banco 13 de SRAM, con permisos de lectura/escritura.
0 PIN9 PIN5 USER5 USER4 USER3 USER2 USER1
  • USER1 a USER5: se corresponden con las cinco acciones de usuario que es posible configurar en el teclado.
  • PIN5: este bit se pone a 1 si el PIN 5 del conector de joystick se cortocicuitó a GND
  • PIN9: este bit se pone a 1 si el PIN 9 del conector de joystick se cortocicuitó a GND
No cambia No cambia No cambia
$09 MOUSEDATA Lectura/Escritura Registro de datos del puerto PS/2 del ratón. Usado para leer o enviar comandos directos al ratón PS/2. Por ejemplo: para inicializar el ratón, debe enviarse el valor $F4 a este registro. No cambia No cambia No cambia
$0A MOUSESTATUS Lectura/Escritura Registro de estado del puerto PS/2 del ratón. Se definen los siguientes bits:
BSY 0 0 0 ERR 0 0 PEN
  • BSY: a 1 para indicar que hay una transmisión de datos al puerto PS/2 aún en proceso. Se debe esperar a que valga 0 para iniciar una nueva transmisión.
  • ERR: a 1 para indicar que la última transmisión a o desde el puerto PS/2 tuvo errores.
  • PEN: a 1 para indicar que hay un dato nuevo listo para ser leído en el registro MOUSEDATA. Tras leer MOUSESTATUS, este bit pasa a valer 0.
No cambia No cambia No cambia
$0B SCANDBLCTRL Lectura/Escritura Registro de control del scandoubler y control de la velocidad del sistema. Se definen los siguientes bits:
TURBO COPT FREQ ENSCAN VGA
  • TURBO: 00 para seleccionar 3.5 MHz, 01 para seleccionar 7 MHz, y 1x para seleccionar 14 MHz. Estos bits también son actualizados con el valor de los bits D0-D3 del puerto $8E3B, usado en el ZX Prism para seleccionar las distintas velocidades para la CPU.
  • COPT: selecciona la forma de generar los sincronismos compuestos para RGB y video compuesto: 0 para usar el tipo de sincronismo original del Spectrum. 1 para usar pulsos de sincronismo según el estándar PAL
  • FREQ: estos tres bits definen la frecuencia del reloj maestro, del cual derivan el resto de relojes del circuito. Entre otras, se define también aquí la frecuencia de refresco vertical, que puede usarse para mejorar la compatibilidad con algunos monitores VGA que no soportan una frecuencia de refresco vertical de 50Hz. Los valores de refresco vertical son los siguientes:
    • 000 : 50Hz para modo 48K y Pentagon
    • 001 : 50Hz para modo 128K
    • 010 : 52 Hz
    • 011 : 53 Hz
    • 100 : 55 Hz
    • 101 : 57 Hz
    • 110 : 59 Hz
    • 111 : 60 Hz
  • ENSCAN: a 1 para habilitar el efecto de scanlines en el modo VGA. No tiene efecto si el modo VGA está deshabilitado.
  • VGA: a 1 para habilitar el scandoubler. La salida del scandoubler es la misma que la salida RGB normal, pero doblando la frecuencia de retrazo horizontal. A 0 para usar una salida de 15kHz RGB / video compuesto.
No cambia No cambia 00000000
$0C RASTERLINE Lectura/Escritura Almacena los 8 bits menos significativos de la línea de pantalla en la que se desea provocar un disparo de una interrupción enmascarable. Un valor 0 para este registro (con LINE8 también igual a 0) establece que la interrupción ráster se disparará, si está habilitada, justo al comenzar el borde derecho de la línea anterior a la primera línea de pantalla en la que comienza la zona de "paper". Dicho en otras palabras: el conteo de líneas de esta interrupción asume que una línea de pantalla se compone de: borde derecho + intervalo de blanking horizontal + borde izquierdo + zona de paper. Si se asume de esta forma, el disparo de la interrupción se haría al comienzo de la línea seleccionada.

Un valor para RASTERLINE igual a 192 (con LINE8 igual a 0) dispara la interrupción ráster al comienzo del borde inferior. Los números de línea para el fin del borde inferior y comienzo del borde superior dependen de los timings empleados. El mayor valor posible en la práctiva para RASTERLINE corresponde a una interrupción ráster disparada en la última línea del borde superior (ver RASTERCTRL)

11111111 11111111 11111111
$0D RASTERCTRL Lectura/Escritura Registro de control y estado de la interrupción ráster. Se definen los siguientes bits.
INT 0 0 0 0 DISVINT ENARINT LINE8
  • 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á.
00000001 00000001 00000001
$0E DEVCONTROL Lectura/Escritura Registro de habilitacion/deshabilitacion de distintas caracteristicas. Se definen los siguientes bits.
DISD ENMMU DIROMSEL1F DIROMSEL7F DI1FFD DI7FFD DITAY DIAY
  • DISD: a 1 para deshabilitar la interfaz hardware SPI para SD (usada en DivMMC y ZXMMC). Deshabilitando esta interfaz se liberan los puertos $1F en escritura, $3F, $E7 y $EB. Tras reset maestro, vale 0.
  • ENMMU: a 1 para habilitar la MMU horizontal usada en el Timex Sinclair. Habilitando esta interfaz se usa el bit 7 del puerto $FF, se usa el puerto $F4 y una lectura al puerto $FF devuelve el ultimo valor escrito en el. Tras reset maestro, vale 0.
  • DIROM1F: el valor de este bit se enmascara con el valor del bit 2 del puerto $1FFD según la operación ~DIROM1F & $1FFD[2]. El resultado neto es que si este bit vale 1, el sistema trabajará como si el valor del bit 2 del puerto $1FFD fuera siempre 0, independientemente del valor que se escriba en él. Tras reset maestro, vale 0, que permite que los cambios al bit 2 de $1FFD sean tenidos en cuenta.
  • DIROM7F: el valor de este bit se enmascara con el valor del bit 4 del puerto $7FFD según la operación ~DIROM7F & $7FFD[4]. El resultado neto es que si este bit vale 1, el sistema trabajará como si el valor del bit 4 del puerto $7FFD fuera siempre 0, independientemente del valor que se escriba en él. Tras reset maestro, vale 0, que permite que los cambios al bit 4 de $7FFD sean tenidos en cuenta.
  • DI1FFD: a 1 para deshabilitar el sistema de paginación compatible con +2A/+3. Deshabilitando esta interfaz se libera el puerto $1FFD en escritura. Tenga en cuenta que la decodificación del puerto $7FFD, si está activa, es diferente dependiendo de si el puerto $1FFD está activo o no.
  • DI7FFD: a 1 para deshabilitar el sistema de paginación compatible con 128K. La deshabilitación de este sistema implica la deshabilitación del sistema de paginación del +2A/+3 aunque no se haya desactivado explicitamente.
  • DITAY: a 1 para deshabilitar el segundo chip AY, deshabilitando así el modo Turbo Sound.
  • DIAY: a 1 para deshabilitar el chip principal AY. La deshabilitación de este chip implica la deshabilitación del segundo chip AY, aunque no se haya deshabilitado explicitamente.
No cambia 00000000 00000000
$0F DEVCTRL2 Lectura/Escritura Registro de habilitacion/deshabilitacion de distintas caracteristicas (continuación de DEVCONTROL). Se definen los siguientes bits.
Resv Resv Resv Resv Resv DIRADAS DITIMEX DIULAPLUS
  • Resv: Este bit está reservado. En la implementación actual, debe escribirse un 0 en él si se actualiza el valor del registro.
  • DIRADAS: a 1 para deshabilitar el modo radastaniano. Tenga en cuenta que si el modo radastaniano no se deshabilita, pero se deshabilita la ULAplus, al intentar usar el modo radastaniano, el datapath usado en la ULA no será el esperado y el comportamiento de la pantalla en este caso no está documentado.
  • DITIMEX: a 1 para deshabilitar los modos de pantalla compatible Timex. Cualquier escritura al puerto $FF es por tanto ignorada. Si la MMU del Timex está habilitada, una lectura al puerto $FF devolverá 0.
  • DIULAPLUS: a 1 para deshabilitar la ULAplus. Cualquier escritura a los puertos de ULAplus se ignora. Las lecturas a dichos puertos devuelven el valor del bus flotante. No obstante tenga en cuenta que el mecanismo de contención para este puerto sigue funcionando aunque esté deshabilitado.
No cambia 00000000 00000000
$40 RADASCTRL Lectura/Escritura Registro para establecer el modo radastaniano y establecer sus características. Las escrituras a este registro son ignoradas si el bit correspondiente en DEVCTRL2 está activo. Se definen los siguientes bits
Resv Resv Resv Resv Resv Resv EN1 EN0
  • Resv: Este bit está reservado. En la implementación actual, debe escribirse un 0 en él si se actualiza el valor del registro.
  • EN1, EN0: ambos bits deben valer 1 para habilitar el modo radastaniano. Si EN0 está habilitado, pero EN1 está deshabilitado, el resto de bits, del 2 al 7, está definido según lo implementado en el emulador ZEsarUX (consultar la documentación de César Hernández sobre esto).
00000000 00000000 00000000
$80 HOFFS48K Lectura/Escritura Valor de ajuste de centrado horizontal de la pantalla para la ULA de 48K No cambia No cambia $38
$81 VOFFS48K Lectura/Escritura Valor de ajuste de centrado vertical de la pantalla para la ULA de 48K No cambia No cambia $01
$82 HOFFS128K Lectura/Escritura Valor de ajuste de centrado horizontal de la pantalla para la ULA de 128K No cambia No cambia $3A
$83 VOFFS128K Lectura/Escritura Valor de ajuste de centrado vertical de la pantalla para la ULA de 128K No cambia No cambia $01
$84 HOFFSPEN Lectura/Escritura Valor de ajuste de centrado horizontal de la pantalla para la ULA de Pentagon No cambia No cambia $37
$85 VOFFSPEN Lectura/Escritura Valor de ajuste de centrado vertical de la pantalla para la ULA de Pentagon No cambia No cambia $00
$FC COREADDR Lectura/Escritura Almacena la dirección, dentro de la memoria SPI, de inicio del core a arrancar. Para almacenar una dirección diferente, se han de realizar tres escrituras a este registro, conteniendo los tres bytes de la dirección, en orden de más a o menos significativo. En lectura, cada acceso a este registro devuelve una parte de la última dirección almacenada, de la parte más significativa a la menos significativa. No cambia No cambia $058000
$FD COREBOOT Escritura Registro de control de arranque. Escribiendo un 1 en el bit 0 de este registro (el resto de bits están reservados y deben quedarse a 0) hace que se desencadene el mecanismo interno de la FPGA que permite arrancar otro core. La dirección de comienzo de este segundo core será la última que se escribiera usando el registro COREADDR. No cambia No cambia No cambia
$FE SCRATCH / COLDBOOT Lectura/Escritura Este registro es unicamente un almacén para un valor de 8 bits. El core garantiza que tras encender el ZX-Uno, este registro vale 0, y no vuelve a este valor tras un reset o un máster reset. La BIOS puede usar este registro para distinguir si ha sido invocada desde un máster reset o desde un arranque en frío, simplemente chequeando su valor, y si es 0, realizando las acciones oportunas en un reset en frío, tras lo cual pondrá un valor diferente de 0. No cambia No cambia 00000000
$FF COREID Lectura Cada operación de lectura proporciona el siguiente carácter ASCII de la cadena que contiene la revisión actual del core del ZX-Uno. Cuando la cadena termina,lecturas posteriores emiten bytes con el valor 0 (al menos se emite uno de ellos) hasta que vuelve a comenzar la cadena. Este puntero vuelve a 0 automáticamente tras un reset o una escritura en el registro $FC3B. Los caracteres entregados que forman parte de la cadena son ASCII estándar imprimibles (códigos 32-127). Cualquier otro valor es indicativo de que este registro no está operativo. Ver descripción Ver descripción Ver descripción

Por ejemplo, para asignar el banco 16 de la SRAM al espacio de direcciones $C000 - $FFFF durante el modo boot, mediante el registro MASTERMAPPER, se haría así:

ld bc,$fc3b     ;Puerto para establecer el número de registro a usar
ld a,1          ;Registro $01 (MASTERMAPPER)
out (c),a       ;Se selecciona. A partir de ahora, cualquier acceso a $FD3B está usando MASTERMAPPER
inc b           ;Puerto de acceso al registro ($FD3B, basta con incrementar B)
ld a,16         ;Banco 16 de la SRAM
out (c),a       ;Se escribe en el registro MASTERMAPPER

Modos gráficos disponibles

Firmwares disponibles

Layouts de teclado

TO DO

  • Modificar el core del AY-3-8912 (o quizás buscar otro, ya veremos) que me dé los tres canales por separado, para así poderlos mezclar usando el esquema ACB o uno similar. Ahora mismo el sonido que tenemos es monoaural.
  • Añadir el tema de las teclas para cambiar de modo de video on-the-fly

Acceso a los ficheros del core

Acceso al repositorio SVN

La versión más reciente del core (11/02/2017) es test24. Las características de este core son:

  • Implementación ZX Spectrum 48K, 128K, Pentagon y Chloe 280SE
  • ULA con modos ULAplus, Timex y modo Radastan
  • Scroll hardware en modo Radastan
  • Grupo de paleta seleccionable en modo Radastan
  • Posibilidad de desactivar la contención de memoria (para compatibilidad con Pentagon 128)
  • Posibilidad de elegir el comportamiento del teclado (issue 2 o issue 3)
  • Posibilidad de elegir el timing de la ULA (48K, 128K o Pentagon)
  • Control del encuadre de pantalla configurable para tipo de timing, y posibilidad de elegir entre sincronismos originales de Spectrum o sincronismos estándar PAL progresivo.
  • Soporte de la MMU horizontal del Timex con bancos HOME, DOC y EXT en RAM.
  • Interrupción ráster programable en número de línea, para cualquier linea de TV.
  • Posibilidad de activar/desactivar los registros de manejo de bancos de memoria, para mejor compatibilidad con cada modelo implementado
  • Posibilidad de activar/desactivar los dispositivos incorporados al core para mejorar la compatibilidad con ciertos programas
  • Soporte ZXMMC para +3e
  • Soporte DIVMMC para ESXDOS, UnoDOS, y firmwares compatibles
  • Soporte Turbo Sound
  • Soporte de SpecDrum
  • Cada canal A,B,C de los dos chips AY-3-8912, beeper y SpecDrum pueden dirigirse a las salidas izquierda, derecha, ambas o ninguna, permitiendo la implementación de configuraciones tales como ACB, ABC, etc.
  • Soporte de joystick real y joystick en teclado con protocolo Kempston, Sinclair 1 y 2, Cursor y Fuller.
  • Soporte de modo turbo a 7MHz y 14MHz
  • Soporte de teclado con protocolo PS/2 y mapeado configurable por el usuario desde el propio Spectrum.
  • Soporte de ratón PS/2 emulando el protocolo Kempston Mouse.
  • Posibilidad de salida de video en modo de video compuesto, RGB 15kHz, o VGA.
  • Frecuencia de refresco vertical seleccionable por el usuario para mejorar la compatibilidad con monitores VGA.
  • Soporte de arranque multicore: desde el Spectrum se puede seleccionar una dirección de la SPI Flash y la FPGA cargará un core desde ahí.