El conjunto de caracteres ZX Spectrum es la variante de ASCII utilizada en los ordenadores de la familia ZX Spectrum . Se basa en ASCII-1967 , pero los caracteres ^, ` y DELse reemplazan por ↑, £ y ©. También se diferencia en el uso de los códigos de control C0, además de los comunes BSy CR, y utiliza los 128 caracteres de bits altos que están fuera del rango ASCII. [ 1 ] El conjunto principal de caracteres imprimibles y la fuente del sistema del ZX Spectrum también son utilizados por el ordenador Jupiter Ace .
Caracteres imprimibles

El estándar US-ASCII, 0x20–0x7F, está incluido en el conjunto de caracteres de Spectrum, excepto que el punto de código 0x5E es una flecha hacia arriba (↑) en lugar de un acento circunflejo (^), 0x60 es el signo de libra (£) en lugar del acento grave (`), y 0x7F es el signo de copyright (©) en lugar del carácter de controlDEL . Cabe señalar que el uso de 0x5E como ↑ también se daba en la versión anterior de ASCII de 1963. El signo £ no se asignaba a 0x23 como en la variante británica de ASCII ( ISO-646-GB ), lo que permitía el signo de libra y el signo de número (#) simultáneamente. El carácter ↑ es el operador de exponenciación en BASIC de Spectrum , al igual que el ^ al que reemplaza en comparación con ASCII-1967 se utiliza para la exponenciación en muchos otros dialectos de BASIC y otros lenguajes de programación.
Más allá de 0x7F, el conjunto de caracteres Spectrum utiliza el rango de bits altos 0x80–0xFF para propósitos especiales. 0x80–0x8F contienen los mismos caracteres gráficos de bloque 2×2 que tienen el conjunto de caracteres ZX80 y el conjunto de caracteres ZX81 (en otras ubicaciones), también disponibles en el bloque Unicode de Elementos de Bloque . Sin embargo, el conjunto de caracteres estándar del ZX Spectrum no incluye los caracteres gráficos de bloque 1×2 con tramado del 50% del ZX80/81 . Los puntos de código 0x90–0xA4 contienen los 21 caracteres gráficos definidos por el usuario (UDG) originales, y 0xA5–0xFF contienen palabras clave BASIC tokenizadas como puntos de código individuales. En el modo BASIC 128 introducido posteriormente, esto se cambió a 19 caracteres UDG que terminan en 0xA2 seguidos de los dos nuevos tokens SPECTRUMy PLAY. Los puntos de código 0xC7–0xC9 son los operadores de dos caracteres <=, >=y , tokenizados de forma similar en puntos de código individuales. Estos tokens permiten introducir un comando BASIC como con una sola pulsación de tecla al principio de una línea (es decir, en modo comando), lo que genera 0xF6. Esto se muestra como la palabra clave completa en pantalla, pero solo se almacena un token de un byte, por lo que solo ese byte debe ser analizado por el intérprete o guardado/cargado desde un almacenamiento externo como una cinta.<>PRINTPPRINT
Todos los caracteres que no pertenecen al espectro UDG se pueden asignar a Unicode . Los tres caracteres que no son ASCII-1967, ↑, £ y ©, se encuentran en U+2191, U+00A3 y U+00A9. Los caracteres gráficos de bloque de 2×2 se encuentran en el bloque Elementos de bloque en U+2580–U+259F, aunque la compatibilidad de fuentes para estos últimos no es universal.
La forma de los caracteres UDG se asigna a un área de memoria RAM y se inicializa con copias de los caracteres AU, pero se puede redefinir arbitrariamente, por ejemplo, usando el comando BASIC POKE. Como todos los caracteres de la fuente del sistema, usan una cuadrícula de píxeles de 8×8 almacenada en 8 bytes. Redefinirlos cambia su apariencia en PRINTinstrucciones posteriores, pero no cambia ningún carácter UDG ya dibujado en la pantalla. La ubicación de la definición de un carácter UDG se puede determinar con la función BASIC USRcon el carácter como argumento, por ejemplo, USR "A"para el primero. Por defecto, esto apunta a los últimos 168 (21×8) bytes de RAM en las direcciones de memoria 65368 (0xFF58) a 65535 (0xFFFF) para un Spectrum de 48K. La ubicación está indicada por la variable del sistema UDG [ 2 ] que se puede encontrar en la dirección de memoria 23675/6 (0x5C7B/C) y se puede cambiar. El TK90X , un clon brasileño del ZX Spectrum, incluía una aplicación en ROM para editar gráficamente estos caracteres UDG, junto con la funcionalidad para precargarlos con letras acentuadas utilizadas en portugués. (Para esto, el TK90X definió dos comandos Basic adicionales en los códigos 0 y 1, respectivamente TRACEy UDG) [ 3 ]
La definición de la fuente principal del sistema, de 32 (espacio) a 127 (copyright), se referencia mediante la variable del sistema CHARS, que se encuentra en la dirección de memoria 23606/7 (0x5C36/7). Se define como 256 bytes por debajo del primer byte del carácter de espacio, lo que simplifica la fórmula para localizar un carácter a CHARS + 8 × punto de código . El valor predeterminado de CHARS es 15360 (0x3C00), y la fuente del sistema se encuentra al final de la ROM del Spectrum en la dirección 15616 (0x3D00) a 16383 (0x3FFF). Se pueden cargar fuentes alternativas completas en la RAM y la variable CHARS se puede reajustar en consecuencia. [ 2 ]
Códigos de control
En el área de códigos de control (el rango C0), el Spectrum utiliza principalmente controles propietarios, como INK y PAPER, para controlar el color de primer plano y de fondo. Sin embargo, los puntos de código comunes BSson CRlos mismos que en ASCII. El desplazamiento del cursor hacia abajo (0x0A, salto de línea ASCII) se puede simular con 32 espacios impresos con OVER 1 (sobreimpresión transparente) y el desplazamiento del cursor hacia arriba 0x0B (tabulación vertical ASCII) se puede simular con 32 retrocesos. La ROM del sistema tiene un fallo que impide que funcione el desplazamiento del cursor hacia la derecha en 0x09 (cf. tabulación horizontal ASCII). [ 4 ] [ 5 ]
El código de control 0x0E se utiliza para indicar que le sigue un número de punto flotante, para acelerar el procesamiento de texto. En un programa BASIC de Sinclair, las constantes numéricas se almacenan como ASCII seguido de un byte 0x0E y una representación binaria de punto flotante de 5 bytes. Al listar un programa BASIC, solo se utiliza la parte ASCII, pero en tiempo de ejecución solo se utiliza la representación binaria. Algunos programas de Spectrum explotaron esto para ofuscar números, mientras que otros lo hicieron para ahorrar memoria. [ 6 ] Por ejemplo, una línea BASIC mostrada como podría contener los caracteres ASCII para los dígitos 1 y 0 seguidos de un byte 0x0E y la representación de punto flotante de 100 en lugar de 10. Cualquiera que listara ese programa veía el número 10, pero cuando se ejecutaba el programa saltaba a la línea 100.GO TO 10
Códigos indefinidos
Los rangos 0x00–0x05, 0x07, 0x0A–0x0C, 0x0F y 0x17–0x1F no están definidos. En la mayoría de los casos, mostrarán un signo de interrogación al imprimirlos en la pantalla. Sin embargo, pueden usarse para representar sus valores numéricos literales junto con ciertos códigos de control: por ejemplo, 0x10 + 0x02 establece el color de la tinta (texto en primer plano) al color número 2 (rojo).
Conjunto de caracteres
La siguiente tabla muestra el conjunto de caracteres del ZX Spectrum. Cada carácter se muestra con un posible equivalente Unicode . [ 7 ] [ 8 ] Los caracteres de espacio y control están representados por las abreviaturas de sus nombres.
Variante lituana del espectro
La variante lituana de Spectrum reemplaza algunas letras en ISO 8859-1 con letras lituanas. [ 9 ] [ 10 ] FreeDOS la llama página de código 63283. [ 11 ]
Notas
- 1 2 3 Diferente de US-ASCII.
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Carácter UDG (Gráficos Definidos por el Usuario).
- ↑ UDG T en BASIC 48, palabra claveSPECTRUMen BASIC 128.
- ↑ UDG U en BASIC 48, palabra clavePLAYen BASIC 128.
- ↑ En la ROM estándar
CHR$ 8falla al retroceder de la línea 1 a la línea cero, y falla de una manera diferente al retroceder desde la línea cero. - ↑ En la ROM estándar,
CHR$ 9en realidad no se mueve la posición de salida del texto. - ↑ Se utiliza en programas BASIC como marcador que precede a un número de punto flotante de 5 bytes.
Referencias
- 1 2 Manual del ZX Spectrum, Apéndice A, el conjunto de caracteres
- 1 2 Manual del ZX Spectrum, Capítulo 25, las variables del sistema
- ↑ «Los Comandos Exclusivos de la TK 90X» . CompuClásico - Antigüedades Digitales . 2010. Archivado desde el original el 27 de marzo de 2019.
- ↑ Logan, Ian (1983). Entendiendo tu espectro . Melbourne House. pág. 189. ISBN 086161111X.
- ↑ Wearmouth, Geoff (2004). "Un listado de archivos de ensamblaje para generar una ROM de 16K para el ZX Spectrum" . El ensamblaje incompleto de la ROM del Spectrum . Archivado del original el 25 de agosto de 2015.
- ↑ Swann, Richard P. "Parte 4 Desencriptadores". CÓMO HACKEAR en el ZX Spectrum .
- ↑ Zaretski, Michael (2004). "Conversión del conjunto de caracteres Sinclair ZX Spectrum+ 48K a Unicode" . The Eclectic Satyr . Archivado del original el 7 de marzo de 2005. Consultado el 3 de abril de 2023 .
- ↑ Zaretski, Michael (2005-03-07). "Conjunto de caracteres Sinclair Spectrum+ 48K" . The Eclectic Satyr . Archivado del original el 2005-03-07 . Recuperado el 2023-04-03 .
- ↑ «Rašmenų koduotės» . Lietuvybé.lt (en lituano).
- ↑ "spectrum.gif" . Lietuvybé.lt (en lituano).
- ↑ "Cpi/CPIISO/Codepage.TXT en master · FDOS/Cpi" . GitHub .
Enlaces externos
- El paquete de punto flotante
- Manual básico de Sinclair , Steven Vickers, Robin Bradbeer (eds.); pub. Sinclair Research Limited. Copia en línea en World of Spectrum.
Véase también
- Conjuntos de caracteres
- ZX Spectrum
- Introducciones relacionadas con la informática en 1982