Sinclair ZX81

De El Museo de los 8 Bits
Ir a la navegación Ir a la búsqueda
Sinclair ZX81
Placa madre del Sinclair ZX81
Interfaces del Sinclair ZX81
Cartucho de memoria de 16K RAM que se enchufa en la parte trasera de la ZX81
Impresora térmica para la ZX81

El computador personal Sinclair ZX81, lanzado por Sinclair Research en 1981, fue la versión mejorada del ZX80 comercializado el año anterior. La carcasa era negra, con un teclado de membrana. La apariencia definitiva de la máquina fue el trabajo del diseñador industrial Rick Dickinson. La salida de video, como en el ZX80, era hacia un televisor por medio de un modulador de radiofrecuencia, y los programas se leían y se guardaban a través de un ordinario grabador de casetes usando cintas magnéticas de audio.

Descripción general

Como con el ZX80, el procesador del ZX81 fue un NEC D780C compatible con el Zilog Z80, solamente que este tenía un ciclo de reloj de 3.5 MHz, una velocidad ligeramente más alta que la del computador anterior. La tarjeta del sistema había sido rediseñada con un chip por encargo y ahora tenía solamente cuatro chips: un microprocesador Z80A, un chip de lógica por encargo (ULA de Ferranti) o ASIC, un chip de memoria RAM del tipo 4118 DRAM de 1Kx8 bits y un chip de memoria ROM del tipo 2364 de 8Kx8 bits. El ROM del sistema se había aumentado a 8 KB de tamaño, y el lenguaje BASIC ahora soporta aritmética de coma flotante. En los primeros días, Sinclair ofreció la ROM como una actualización para el ZX80.

El sistema básico se vendió por aproximadamente £70 en el Reino Unido y $100 en los Estados Unidos, tenía 1KB (1024 bytes) de RAM. Esta RAM fue utilizada para contener las variables de sistema del computador, la imagen de la pantalla, y cualquier dato de los programas. La pantalla era de texto solamente, 32 caracteres de ancho por 24 de alto, sin embargo, eran posibles gráficos de bloques (2x2), permitían una resolución de 64 por 48 pixels mediante el uso del comando PLOT, que ingeniosamente seleccionaba uno entre el grupo de 16 caracteres gráficos para la simulación de los pixels. Para conservar memoria, los bytes de la pantalla eran almacenados como strings de longitud mínima: por ejemplo, si una línea de la pantalla era de solamente 12 caracteres de largo, sería almacenada como solamente esos 12 caracteres seguidos por el código de nueva línea, se asumía automáticamente que el resto de la línea contenía espacios. Usando este conocimiento, era común escribir programas que, para ahorrar memoria, se mantenían usando solo la parte de arriba y a la izquierda de la pantalla. Como otra característica de ahorro de memoria, las palabras claves del BASIC eran almacenadas como tokens de 1 byte. Si la memoria se consumía hasta quedar poca, el número de líneas mostradas en la pantalla de la TV se reducía.

Incluso con todas estas medidas para salvar espacio, la poca memoria de la máquina no servía de mucho, así que un paquete de ampliación con 16K de RAM estaba disponible por $100. A mediados de los 1982s, estaban disponibles paquetes de ampliación de 32K y 64K. Éstos se enchufaban en la tarjeta de circuito principal, el Memopak de 16K se podía "apilar" con uno de 16K o 32K, y eran notorios por bambolearse y perder los resultados de horas de programación. Una impresora fue mercadeada para acompañar al ZX81. Ésta era una impresora térmica en la cual un punto del alambre chispeaba el patrón de puntos en el papel térmico gris-plateado de 4 pulgadas de ancho. Al imprimir se sentía un distintivo olor a ozono.

Incluso así, habían muchos juegos y aplicaciones que funcionaban en la minúscula memoria de 1 K, incluyendo un juego básico de ajedrez. No era difícil de conocer, entender, y controlar la computadora totalmente, algo casi imposible hoy en día.

También había una interface serial RS-232 por ~$140, y una interface paralela Centronics por ~$105) que permitiría al ZX81 comunicarse con una impresora estándar, así como un teclado externo de tamaño normal por ~$85.

DK'tronics vendió una carcasa y un teclado que, con considerable habilidad, se podía usar para sustituir el teclado de membrana y para contener el computador..

Tanto en el computador ZX80 como en el ZX81, la salida video era generada por el chip Z80. En el ZX80, cuando un programa corría, la pantalla se blanqueaba hasta que el programa se detuviera esperando por entrada de datos. Una mejora del ZX81 sobre el ZX80 fue que el ZX81 tenía dos modos de operación. El ZX81 podía funcionar en modo rápido como el ZX80, blanqueando la pantalla mientras los programas funcionaban, o en el modo lento, aproximadamente a 1/4 de velocidad, en el cual el video era mantenido. En el modo lento, los programas corrían solamente mientras que el rayo de electrones que formaba la imagen del TV se movía desde el final de la pantalla al principio para comenzar una nueva imagen. Debido a que un loop FOR-NEXT de 1 a 1.000 tardaba 19 segundos, era común hacer funcionar la máquina en modo rápido todo el tiempo, incluso al editar un programa. Esto hacía destellar la imagen del televisor cada vez que una tecla era presionada.

Otro rasgo del ZX81 era que la señal desde el grabador de cassettes se repetía en la pantalla del televisor mientras se cargaban o guardaban programas usando cassettes, causando que el televisor exhibiera patrones zigzagueantes.

El ZX81 no tenía la capacidad de hacer sonido, pero mediante astuta codificación era posible modular la interferencia que el procesador causaba en la TV y crear un muy rudimentario teclado musical.

El ZX81 no utilizó el código ASCII sino que tenía su propio juego de caracteres. El código 0 era un espacio, los códigos 1-10 fueron usados por caracteres de bloque para los gráficos, los códigos 11-63 correspondían a signos de puntuación, números, y caracteres en mayúscula. Los códigos 128-191 eran versiones de video inverso de los primeros 64 caracteres. Otros códigos representaban palabras claves del BASIC y códigos de control como NEWLINE (Nueva línea). No habían caracteres en minúscula.

Debido a que la imagen de la pantalla era generada primariamente por software en el ROM del ZX81, era posible sustituir la rutina del servicio de interrupción y generar la imagen de la pantalla con un programa hecho por uno mismo. Varios juegos de "alta resolución", de 256x192 píxels en lugar de los normales 64x48 hacían esto, notablemente los de una compañía llamada Software Farm.

Había un notorio bug (error de software) que hacía que algunos ZX81s calcularan la raíz cuadrada de 0.25 como 1.3591409 en lugar de 0.5. La reputación de Sinclair por su pobre control de calidad era debida menos a la existencia del error en algunas máquinas y más por el tiempo que tomó para reaccionar una vez que el error había sido reportado. Por el contrario, en un artículo de la revista Byte de la época, al comparar la exactitud matemática de varios computadores populares y otros mucho más costosos de ese tiempo, se reflejó positivamente al ZX81.

El ZX81 se vendió en grandes cantidades, hasta que fue reemplazado por su sucesor considerablemente mejorado, ZX Spectrum.

El Sinclair ZX81 fue vendido en los Estados Unidos por la misma Sinclair, desde su instalación en Nashua, New Hampshire, y también por Timex como el Timex-Sinclair TS1000. El TS1000 se despachaba con dos veces más memoria RAM (2 KB!)

Operación técnica del video en el ZX81

Los medios técnicos usados para implementar la generación del video para la pantalla de TV, aunque brillantes, no fueron del todo estándar. El sistema funcionaba como sigue:

El ZX81 contiene, dependiendo del tipo de RAM, cuatro chips: una RAM, una ROM, un CPU y un ASIC, llamado en ese entonces ULA – (Uncommitted Logic Array). Unas resistencias fueron colocadas en serie con las líneas de datos. El CPU y la memoria ROM estaban a un lado de las resistencias de datos, y la memoria RAM en el otro. Las direcciones 0-8191 estaban asignadas a la ROM, en los últimos 512 bytes estaban contenidas las imágenes de mapa de bits del juego de caracteres, y las direcciones 16384-32767 estaban asignadas para la memoria RAM.

El video de la pantalla era manejado por interrupciones, de tal manera que el proceso normal del computador pudiera continuar durante o cerca del intervalo de blanqueo vertical. Las interrupciones pasaban el control a las rutinas que generaban el video durante el resto del tiempo disponible, entonces, la propia CPU era utilizada como un contador para controlar la salida de los datos de video, desde la memoria hacia la pantalla de TV.

El procesador procuraría saltar, en la memoria RAM, a la dirección 32768 + el principio de los datos de video. Entonces se activaban simultáneamente, la línea A15 del bus de direcciones, y una raramente usada línea de control del procesador Z80, que indicaba "ciclo de instrucción de memoria 1". El ULA detectaría esto como un intento de ejecutar una instrucción desde la memoria RAM que representa el video y capturaría los datos recuperados del bus de datos. Entonces comprobaría el bit 6 del dato, si fuera cero, el ULA colocaría en el bus de datos, para consumo del Z80, una instrucción NOP (No OPeración) que para este procesador se representa con un byte con todos los bits en cero. El CPU continuaría "ejecutando" el RAM del video de esta manera, como si fuera código de máquina del Z80, hasta que se encontrara un byte con bit 6 = 1. Este byte no sería convertido a cero por el ULA y se ejecutaría normalmente por el CPU.

El ZX81 utilizó su propio juego de caracteres no estándar. Los códigos 0-63 eran caracteres imprimibles y los códigos 128-191 era los mismos caracteres en video inverso. El único byte válido con bit 6 = 1 que se podía escribir en la memoria de video era el 118, que representaba la instrucción HALT en el Z80 y hacía que el procesador se detuviera. Este byte fue utilizado como el carácter NEWLINE.

Exceptuando la instrucción HALT, si se hubiera colocado cualquier otro byte con bit 6 = 1 en la RAM de video del ZX81, la máquina se hubiera estrellado casi inmediatamente, ya que se estarían ejecutando instrucciones al azar, sin sentido y sin control.

Una interrupción no enmascarable sería usada entonces para sacar al procesador del estado de HALT, una vez que fuera el momento de mostrar la siguiente línea de la trama.

La conversión de los caracteres en los pixels para la pantalla estaba basada también en el empleo de capacidades específicas del procesador Z80. El Z80 tiene un registro R, que originalmente fue pensado como un contador para hacer el refrescamiento de la memoria RAM dinámica. Durante un ciclo en el cual los datos no eran recuperados, la señal de control RFSH estaría activa y el contenido del contador R salía a la porción más baja del bus de direcciones. El registro de vector de interrupción I, se usaba de una manera diferente de la esperada. Una característica no documentada del Z80 ponía el contenido del registro I, en la porción superior del bus de direcciones durante este ciclo de refrescamiento.

El ZX81 tenía el mapa de bits del juego de caracteres al final de los 8K de la ROM del BASIC. La ROM estaba conectada al lado opuesto de las resistencias en serie del bus de dirección de tal manera que ciertos bits de dirección podían sobrescribirse bajo control de la ULA. El registro I podía ser cargado para apuntar a la base de la tabla del mapa de bits del juego de caracteres en la ROM y el registro contador (de refrescamiento) R también se podía usar para contar cual línea en el mapa de bits de 8x8 de un carácter debía ser exhibida.

El intérprete del BASIC en sí mismo era un completamente propietario, a diferencia de la mayoría de los microcomputadores del momento, excepto el Apple, que usaron una serie de variantes similares pero incompatibles del BASIC de Microsoft. Esto significaba que no había necesidad de cumplir con el código ASCII o cualquier otro estándar existente.

Incluso la instrucción más simple del Z80 toma cuatro ciclos para ejecutarse. Durante el primer ciclo, el procesador procuraría "ejecutar" el texto del video como dato. El ULA capturaría y guardaría el dato y forzaría, en el bus de datos, la instrucción NOP, (No OPeración) que era representada con un byte con todos los bits a cero. Durante el tercer ciclo, el procesador intentaría un ciclo de refrescamiento para la memoria RAM dinámica. El ULA utilizaría el ciclo de refrescamiento para sustituir el contenido de las líneas de dirección A3-8 del bus de dirección con los bits 0-5 del carácter almacenado. Los bits altos estarían viniendo del registro del vector de interrupciones (que estaba apuntando al juego de caracteres en la ROM), los tres bits más bajos indicarían cual fila del carácter individual era actualmente explorada. El bit 7 del byte original del carácter, sería usado internamente por el ULA para controlar el video inverso del carácter. De esta manera, un byte de pixels para la pantalla sería forzado en el bus donde entonces podía ser alimentado a un registro de desplazamiento manejado por el mismo cristal usado para generar el reloj del CPU y de allí ser enviado al aparato de Televisión.

La sincronización del video sería generada usando el mismo bit individual de I/O (E/S) que se usaba para generar la salida para la interface de la grabadora de cassettes de 250 bit/s.

Desafortunadamente, si la pantalla estaba activada, el uso de la CPU para generar el video retardaba el procesamiento para las demás cosas en un 75%.

El I/O en sí mismo también utilizó algunas características indocumentadas del Z80. Nominalmente, una dirección de puerto de I/O en el Z80 es de ocho bits. Si un registro de 8 bits es usado como la dirección (por ejemplo la instrucción IN A, [L]) lo que salía realmente por el bus de dirección de 16 bits del Z80 no era el registro L sino el par de registros HL de 16 bits, con L como los ocho bits más bajos. El ZX81 explotó esto usando los ocho bits superiores del bus de dirección para manejar las líneas de exploración para la matriz 8x5 del teclado. Los bits devueltos se podían entonces leer por un solo puerto de la entrada.

Los ocho bits más bajos de la dirección de I/O eran usados como selectores de chips para dispositivos individuales de I/O dentro de la ULA. En la configuración estándar, a menos que la impresora térmica externa opcional estuviera enchufada en el conector de borde de tarjeta del bus de 40 pines, las únicas entradas/salidas presentes eran: un bit para la entrada del casete, un bit para la salida del casete y también usado para la sincronización de video, una palabra de cinco bits para la entrada del teclado y los registros de control requeridos para permitir activar la ULA en sí misma para la generación video. Esto significó que no todos los ocho bits fueron usados, permitiendo algún espacio limitado para extensión externa.

La RAM originalmente estaba limitada a 2K internos, las versiones de Timex instalaron la RAM en su totalidad, 2 Kx8 en un chip, mientras que el Sinclair ZX81s tenía una RAM estática 1 Kx8 o dos de 1 Kx4, o una RAM 16K externa. En la RAM externa, una línea RAMCS en el pin 40 del conectador era conectada a un nivel constante en el RAMpack para inhabilitar la RAM interna, esto debido al uso de M1 + A15 para indicar la recuperación de los bytes de los caracteres de video.

El RAMpack externo usaba ocho chips 4116 DRAM, una primitiva RAM dinámica de 16 K x 1 bit en un DIP de 16 pines, con un pin de dato, 7 pines de direcciones multiplexadas, !RAS, !CAS, !WE y energía. Estos viejos chips requerían +12 V, +5 V y -5 V mientras que la fuente de alimentación interna de ZX81's era simplemente un chip 7805, un regulador lineal 5V unido a un pequeño disipador de calor de metal que llegaba a estar algo caliente debido a que el ZX81 fue alimentado por un adaptador de 9 V con un enchufe de 1/8 de pulgada. El RAMpack contenía un oscilador y algunos inductores para convertir los +5 V en los otros voltajes requeridos así como también circuitos para multiplexar las líneas de dirección. Todo esto añadía significativa complejidad interna al RAMpack.

Desafortunadamente el borde del conector del bus de 40 pines en sí mismo no tenía un recubrimiento de oro-plata, los contactos fueron cubiertos simplemente con soldadura. El sistema ZX81 actualizado era muy propenso a malas conexiones y a oxidación que lo hicieron mecánicamente muy frágil y propenso a estrellarse. Esto llegó a ser molesto pues tomaba ocho minutos recargar completamente los 16Kbyte RAM desde una cinta de cassette que a menudo no era fiable. Soluciones improvisadas hechas en casa para este problema iban desde físicamente fijar la computadora y el RAMpack a un substrato sólido, hasta poner todo el conjunto en una carcasa más grande con un apropiado teclado sobrante en lugar del original.

Otra mejora menos común hecha por algunos usuarios finales era conectar la RAM estática como "pseudo-ROM" en lugar de la ROM espejo en las direcciones 8192-16383. Al igual que la ROM, esta RAM necesitaría ser conectada en el mismo lado de las resistencias del bus de datos, de modo que pudiera ser utilizada para almacenar un juego de hasta 64 caracteres definido por el usuario. Una variante en este tema añadía un latch de un bit para guardar el más alto bit del carácter original, cuando M1 y A15 estuvieran activas simultáneamente, y usarlo para manejar uno de los bits de dirección, permitiendo que los mapas de bits de todos los 128 caracteres pudieran ser redefinidos.

Mientras que la RAM principal estaba en el lado incorrecto de los resistores del bus de los datos y de dirección para que esto trabajase, el RAM estático adicional era requerido para este enfoque. Cargar el registro I para apuntar al RAM principal no produciría el resultado deseado, en lugar de eso, mostraba basura como pixels.

Véase también

Enlaces externos

Atribución

Wikipedia-logo-es.png Este artículo proviene originalmente de Wikipedia
que lo licencia simultáneamente bajo las licencias

Creative Commons Reconocimiento - CompartirIgual 3.0
y la licencia de documentación libre GNU v.1.2 y posteriores
El Museo de los 8 Bits lo integra en su wiki bajo cc-by-sa-3.0

Creative Commons License
GNU head