Sinclair ZX81
Sinclair ZX81 | ||
---|---|---|
Información | ||
Tipo | Computadora doméstica | |
Fecha de creación | 1981 | |
Desarrollador | Sinclair Research | |
Fabricante | Timex | |
Procesador | Zilog Z80 | |
Datos técnicos | ||
Procesador | Zilog Z80 | |
Memoria | 1 kB | |
Vídeo | TV o monitor de TV | |
Software | ||
Sistema operativo | Sinclair BASIC | |
El computador personal Sinclair ZX81, lanzado por Sinclair Research en 1981, fue el computador de menor precio de la época y se vendía en la versión de kit por 49,95 libras esterlinas, y por 69,95 montado. Este era 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 vídeo, 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 grabador de casetes común usando cintas magnéticas de audio.
Descripción general
La pantalla era de texto solamente, 32 caracteres de ancho por 24 de alto, sin embargo, eran posibles gráficos con una resolución de 64 por 48 píxeles con el uso del comando PLOT, que seleccionaba entre un grupo de 16 caracteres gráficos para la simulación de los píxeles. Para conservar memoria, el texto mostrado en la pantalla se almacenaba como cadenas de forma dinámica: por ejemplo, una línea en pantalla de 12 caracteres se almacenan como sólo los 12 caracteres seguidos por el código para "NEWLINE".
También tenía una interfaz serie RS-232 por ~$140, y una interfaz 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 vídeo era generada por el chip Z80. En el ZX80, cuando un programa formaba la imagen del TV se movía desde el 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.
Operación técnica del vídeo en el ZX81
Los medios técnicos usados para implementar la generación del vídeo 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 vídeo 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 vídeo durante el resto del tiempo disponible, entonces, la propia CPU era utilizada como un contador para controlar la salida de los datos de vídeo, 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 vídeo. 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 vídeo 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 vídeo 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 vídeo inverso. El único byte válido con bit 6 = 1 que se podía escribir en la memoria de vídeo 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 de nueva línea.
Exceptuando la instrucción HALT, si se hubiera colocado cualquier otro byte con bit 6 = 1 en la RAM de vídeo 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 píxeles 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 8 kB 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 completamente propietario, a diferencia de la mayoría de los microcomputadores del momento, excepto el Apple II, 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 vídeo 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 vídeo inverso del carácter. De esta manera, un byte de píxels 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 vídeo sería generada usando el mismo bit individual de I/O (E/S) que se usaba para generar la salida para la interfaz de la grabadora de casetes de 250 bit/s.
Desafortunadamente, si la pantalla estaba activada, el uso de la CPU para generar el vídeo 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 vídeo, 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 vídeo. 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 2 kB 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 16 kB externa. En la RAM externa, una línea RAMCS en el pin 40 del bus de expansión 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 vídeo.
El RAM pack externo usaba ocho chips 4116 DRAM, una primitiva RAM dinámica de 16 kB × 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 del ZX81 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 RAM pack 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 RAM pack.
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 16 kB RAM desde una cinta de casete que a menudo no era fiable. Soluciones improvisadas hechas en casa para este problema iban desde físicamente fijar la computadora y el RAM pack 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 píxeles.
Clones
En EE. UU. la ZX81 fue vendida de manera directa desde Inglaterra y también en asociación con Timex, que lanzó el clon TS1000.
En Argentina el fabricante de motores Czerweny encargó a Timex-Sinclair de Portugal la producción bajo su propia marca de los modelos TS-1000 (CZ-1000) y TS-1500 (CZ-1500). Probablemente por motivos ajenos a Czerweny (quizás por el cierre de Timex) debió diseñar y producir sus propios clones a los que denominó CZ-1000 Plus y CZ-1500 Plus respectivamente. El nuevo diseño incluía de fábrica el botón de reset, conexión para joystick norma Sinclair y salida directa a monitor. Estos modelos tuvieron cierta popularidad en Argentina, aunque no tanta como el clon de ZX Spectrum (CZ2000).
En Brasil hubo varias empresas que clonaron a la ZX81. Las más importantes fueron Microdigital y Prológica. Microdigital produjo varios clones de ZX80 (TK 80 y TK 82/82C), un clon de ZX81 (TK 83), un clon de TS1500 (TK 85), y dos clones de ZX Spectrum (TK 90X y TK 95). Prológica produjo NE-Z80 (clon de ZX80), NEZ-8000, CP-200 y CP-200S (la última una versión económica).
Véase también
Enlaces externos
- Planet Sinclair:ZX81
- EightyOne ZX81 Emulator for Windows (GPL)
- z81 – Sinclair ZX81 and ZX80 emulator (GPL)
- ZEsarUX - ZX Second-Emulator And Released for UniX (GPL)
- ZX81Kit - ZX81 Kits still for sale!
- ZX81 & G007 Hi-Res Graphics
- The ZX81 manual
- ZX81 The Archive
- Sinclair ZX81 books, software, hardware and peripherals