Motorola 6845

From Wikipedia, the free encyclopedia

El Motorola 6845, MC6845 o también conocido como CRTC6845 (Cathode Ray Tube Controller 6845), es un generador de direcciones de video, introducido primeramente por Motorola. Aunque el 6845 fue desarrollado para los diseños basados en el Motorola 6800 y tenía un número de pieza relacionado con esta familia, fue usado junto con muchos otros procesadores.[1]

Invención Motorola
Datos rápidos Circuito integrado MC6845, Tipo ...
Circuito integrado MC6845

Circuito Integrado MC6845 en un encapsulado del tipo dual in line package
Tipo Activo, circuito integrado
Invención Motorola
Símbolo electrónico
Cerrar

El 6845 fue usado en los adaptadores video MDA, CGA y Plantronics Colorplus de los primeros ordenadores personales de IBM y sus compatibles, como también en los ordenadores Amstrad CPC y BBC Micro o en las tarjetas Videx VideoTerm para Apple II. La funcionalidad del 6845 fue duplicada y ampliada mediante circuitos personalizados en los adaptadores de video para PC EGA y VGA.[2]

Diseño

Diseñado originalmente por Hitachi como HD46505.[3] Las versiones construidas por Hitachi[4] se encuentran en una amplia variedad de computadoras japonesas, desde Sony, Sharp, Panasonic y Casio. Clonado posteriormente como MB89321A por Fujitsu.[5]También se le conoce como 6845 CRTC o CRTC6845, que significa "controlador tubo de rayos catódicos". Esta versión se utilizó en Apricot PC y Victor 9000 para proporcionar una pantalla monocromática con resolución de 800x400. Un clon común de este controlador CRT es el controlador CRT United Microelectronics Corporation (UMC) UM6845E. El 6845 era muy similar y estaba relacionado con el posterior 6545 fabricado por MOS Technology (Commodore Semiconductor Group) y Rockwell (en dos versiones).[2]

Descripción

El 6845 generaba las señales necesarias para conectarse con una pantalla de trama pero no mostraba ningún píxel. Era usado para producir correctamente los tiempos para la sincronización horizontal y vertical y proporcionar la dirección de memoria en la cual el próximo pixel o conjunto de píxeles debía ser leído. El proceso de leer ese valor, convirtiéndolo en pixeles y enviarlos a un CRT era dejado a otros circuitos.[2]

Eran soportados los modos de salida de vídeo entrelazados y no entrelazados, al igual que un cursor de texto por hardware. Se proporcionaba un latch que cuando era disparado duplicaba y conservaba una copia de la dirección de vídeo que había en ese momento para poder ser leída más adelante por la CPU. Esto permitía el funcionamiento de dispositivos de señalización como el lápiz óptico y la pistola de luz que enviaban una señal al 6845 cuando el haz electrónico pasaba por el lugar donde estaban apuntando, permitiendo así que un programa pudiera saber la localización señalada.

Ya que todos los aspectos de la sincronización de vídeo eran programables, una sola máquina podía cambiar entre las sincronizaciones NTSC y PAL por medio de software. El chip también podía ser usado para controlar monitores o cualquier otro tipo de barrido

Registros

Placa de video con el chip Hitachi HD6845, origen del MC6845.

El chip tenía un total de 18 registros de 8 bits que controlaban todos los aspectos de las sincronizaciones video. Solamente dos direcciones eran expuestas a los componentes externos, una que era un índice para seleccionar cual registro interno debía ser accedido, y otra para acceder el registro seleccionado, ya sea para lectura o escritura.[6]

Más información N.º de Registro, Función ...
N.º de
Registro
Función
0Total horizontal, en númeroo de caracteres
1Número de caracteres horizontales mostrados por fila
2Posición de sincronización horizontal
3Ancho de sincronización horizontal, en número de caracteres
4Total vertical
5Ajuste del total vertical, en número de líneas de escaneo
6Número de filas mostradas (verticalmente)
7Posición de sincronización vertical, en Nro de filas de caracteres
8Modo de entrelazado
9Máxima dirección de líneas de escaneo
10Inicio del cursor, en línea de escaneo
11Final del cursor, en línea de escaneo
12Dirección inicial de la pantalla (High)
13Dirección inicial de la pantalla (Low)
14Dirección del cursor (High)
15Dirección del cursor (Low)
16Dirección del Light Pen (High)
17Dirección del Light Pen (Low)
Cerrar

El 6845 se diseñó para visualizaciones basadas en caracteres. Cada dirección que generaba se componía de dos partes, una dirección del carácter, de 14 bits, y una dirección de la fila (línea scan del carácter), de 5 bits. Sin embargo, el 6845 se podía usar también para generar gráficos.

La dirección del carácter aumentaba linealmente. Cuando el chip señalaba la sincronización horizontal (final de la línea), se incrementaba la dirección de la línea. Si la dirección de la fila no igualaba el número programáticamente fijado de líneas por carácter, entonces la dirección del carácter se resetea para tener el mismo valor que tenía al principio de la línea de escaneo actual. La dirección de la línea se resetea a cero después de escanear la última línea del carácter, para así prepararse a escanear la primera línea de la siguiente fila de caracteres.

Si la dirección del carácter era usada para mirar una referencia del carácter en RAM y la dirección de la línea para indexar una tabla de gráficos que representaban el carácter en la ROM, se construía una visualización ordinaria de modo de texto.

Framebuffers lineales

Como se describió arriba, el 6845 ordinariamente no podía proporcionar grandes framebuffers lineales. Un diseño solo podía usar la dirección de caracteres de 14 bits y ajustar el número de filas por carácter a 1 pero estaría restringido a 16 KB de memoria direccionable. Se puede apreciar en una muestra de código.[7]

Una solución de compromiso se encontraba en el Amstrad CPC que combinaba la dirección de filas y la dirección del caracteres juntas, de tal manera de proporcionar scanlines lineales dentro de un buffer no lineal. Esto tenía las ventajas de una programación más fácil para la visualización de no caracteres y un movimiento suave horizontal, pero severamente impide el movimiento en sentido vertical.[8]

Modos de vídeo

Más información Modo, Resolución ...
Modo Resolución Colores Bytes[9]
Alphanumeric Internal 32 x 16 1 + Negro 512
Alphanumeric External 32 x 16 1 + Negro 512
Semigraphics 4 64 x 32 8 + Negro 512
Semigraphics 6 64 x 48 4 + Negro 512
Color Graphics 1 64 x 64 4 1024
Resolution Graphics 1 128 x 64 1 + Negro 1024
Color Graphics 2 128 x 64 4 2048
Resolution Graphics 2 128 x 96 1 + Negro 1536
Color Graphics 3 128 x 96 4 3072
Resolution Graphics 3 128 x 192 1 + Negro 3072
Color Graphics 6 128 x 192 4 6144
Resolution Graphics 6 256 x 192 1 + Negro 6144
Cerrar

Diferencias con el 6545

Aunque en gran parte eran compatibles, existían un número de pequeñas variaciones entre el 6845 y el 6545. La mayor diferencia era que el 6545 podía ser configurado de modo que tuviera acceso único al bus de direcciones para la memoria de vídeo. Eran incluidos dos registros adicionales para ajustar cualquier dirección que la CPU deseara leer y el chip se alternaba entre hacer salir direcciones para la generación de la visualización y el ajuste de visualización para el acceso de la CPU.[8]

Pequeños cambios eran que el MOS Technology y una variación del Rockwell 6545 carecían de soporte para salida entrelazada y todos los 6545s incluyeron un ajuste opcional de la dirección, que si se activaba, retrasaba la activación de la visualización por un carácter. Esta segunda característica fue incorporada en las últimas variaciones del Motorola 6845. El 6545 se podía ajustar, usando un bit de estado, para trabajar en modo lineal de 14 bits. En el 6845 se requería el ajuste de la altura del carácter.[10]

Trucos

El 6845 leía la dirección del comienzo para la visualización de vídeo una vez por frame. Sin embargo, si los valores de la sincronización interna en el chip eran alterados en el tiempo correcto, se podía hacer que se preparara para un nuevo frame sin terminar el actual, creando un salto no continuo de las direcciones generadas a mitad del camino de la visualización. Esto era comúnmente usado por los juegos para proporcionar un área móvil de visualización (generalmente el campo de juego), y un área estática (generalmente una visualización de estado).

El desplazamiento en sentido vertical resultaba restringido porque solamente la dirección de inicio del carácter podía ser ajustada y la dirección de la fila se ponía siempre a cero al inicio del frame, pero ajustando los tiempos del borde era posible desplazar, para incrementos de caracteres enteros, la posición en la que el framebuffer era mostrado en la pantalla. Con el dibujo de píxeles en blanco en los bordes de la pantalla, esto podía hacerse invisible al usuario, creando justo la ilusión de un desplazamiento vertical suave.

Diferencias del 6545

El chip tiene un total de 18 registros de 8 bits controlando todos los aspectos de los códigos de tiempo de los vídeos. Solo dos direcciones están expuestas a los componentes externos: una para seleccionar qué registro interno se va a leer o escribir y otra para acceder a dicho registro.

Más información N.º de registro, Función ...
N.º de

registro

Función
0 Total horizontal, en número de caracteres
1 Número de caracteres horizontales mostrados por fila
2 Posición de sincronización horizontal
3 Ancho de sincronización horizontal, en número de caracteres
4 Vertical total, en filas de caracteres
5 Ajuste total vertical, en número de líneas de escaneo
6 Número de filas mostradas (verticalmente)
7 Posición de sincronización vertical, en # filas de caracteres
8 Modo entrelazado
9 Altura del carácter, en líneas de escaneo (menos una)
10 Inicio del cursor, en la línea de escaneo
11 Fin del cursor, en la línea de escaneo
12 Dirección de inicio de pantalla (alta)
13 Dirección de inicio de pantalla (baja)
14 Dirección del cursor (alta)
15 Dirección del cursor (baja)
16 Dirección con lápiz óptico (alta)
17 Dirección del lápiz óptico (baja)
Cerrar

El 6845 está diseñado para pantallas basadas en caracteres. Cada dirección que genera se compone de dos partes: una dirección de carácter de 14 bits y una dirección de fila de 5 bits. La dirección de carácter aumenta de forma lineal. Cuando el chip señala la sincronización horizontal, incrementa la dirección de fila. Si la dirección de fila no es igual al número de filas por carácter establecido mediante programación, entonces la dirección de carácter se restablece al valor que tenía al comienzo de la línea de barrido que acaba de completarse. En caso contrario, la dirección de fila se reinicia a cero y la dirección de memoria continúa incrementándose de forma lineal. Esto provoca que la misma secuencia de valores de caracteres se vuelva a leer desde la memoria para cada línea de trama de cada fila de caracteres, antes de que el 6845 avance la dirección de memoria a la siguiente fila de caracteres y repita el mismo patrón.

Si la dirección de carácter se utiliza para buscar una referencia de carácter en la RAM y la dirección de fila para indexar una tabla de gráficos de caracteres en la ROM, se construye un modo de texto convencional. La referencia de carácter leída de la memoria debe combinarse con la dirección de fila para formar la dirección de la ROM de gráficos de caracteres, donde la referencia de carácter selecciona un conjunto de patrones de líneas de barrido que forman un carácter, y la dirección de fila indexa dentro de ese conjunto para seleccionar una línea de barrido. En otras palabras, la dirección de la ROM se divide en dos partes para usar la ROM como una matriz bidimensional: la primera dimensión selecciona un carácter y la segunda selecciona una fila del patrón gráfico de ese carácter

Sin embargo, el 6845 dejaba al diseñador la libertad de encaminar los bits de las direcciones de memoria y de fila hacia la memoria de vídeo como considerase oportuno. Por esta razón, la palabra direccionada por el 6845 no tiene por qué corresponder a un píxel o a un carácter. En el modo alfanumérico (texto) de CGA, hay dos bytes por carácter, a los que el 6845 accede secuencialmente: el primer byte es un código de carácter y el segundo es un byte de atributos del carácter; la placa utiliza el contenido de estos bytes, junto con la dirección de fila, para leer los datos de la fuente desde la ROM y generar los píxeles.

Hacer un enrutamiento diferente de los bits, omitiendo la ROM de caracteres puede servir para emular un búfer de imagen (frame buffer). Debido a su limitación de 128 líneas, el 6845 no es capaz de proporcionar grandes búferes de imagen lineales. Una solución consistía en combinar la dirección de fila y la dirección de carácter para ofrecer líneas de barrido lineales dentro de un búfer no lineal. Esto tiene la ventaja de facilitar la programación para pantallas no basadas en caracteres y permitir un desplazamiento horizontal suave, pero puede dificultar el desplazamiento vertical suave. Por ejemplo, el modo gráfico CGA de IBM utiliza un tamaño de palabra de un byte, y cada palabra representa cuatro u ocho píxeles (en los modos gráficos de resolución media o alta, respectivamente); el 6845 se configura con una altura de carácter de 2 píxeles y el bit RA0 de la dirección de fila se utiliza como el bit 13 de la dirección del búfer de imagen. De este modo, pueden utilizarse 200 píxeles verticales a pesar de la limitación de 128 líneas.

El modo gráfico en otros sistemas empleaba un truco similar: en la tarjeta Hercules Graphics Card, los bits 12 y 13 de la dirección del búfer de imagen provenían de los bits RA0 y RA1 de la dirección de fila, proporcionando una resolución vertical de 348 píxeles a partir de 87 “líneas” de cuatro píxeles de altura; el Amstrad CPC utilizaba una altura de línea de 8, igual que en el modo texto, asignando la dirección de fila RA0–RA2 a la dirección de memoria MA11–MA13 y la dirección de carácter CA0–CA10 a la dirección de memoria MA0–MA10.

Estos modos de funcionamiento fueron posibles porque el 6845 no realizaba ningún tipo de almacenamiento en búfer de los datos de caracteres. En las décadas de 1970 y 1980, y en menor medida en la de 1990, la memoria era cara, y la memoria rápida lo era especialmente, por lo que este aspecto era una consideración importante. Además, en los años setenta y desde principios hasta mediados de los ochenta, las densidades de integración de los circuitos no eran muy elevadas, y añadir un búfer de caracteres de 80 bytes o mayor en un chip como el 6845 podría haber incrementado el tamaño del dado del chip en un 50–100 %, lo que a su vez lo habría encarecido varias veces debido al crecimiento exponencial de las tasas de defectos y a la consiguiente disminución del rendimiento de fabricación conforme aumenta el tamaño del dado.

Por otro lado, el 6845 trasladaba a sus usuarios la responsabilidad de proporcionar suficiente ancho de banda de memoria para soportar la relectura de los datos en cada línea. Si un carácter ocupa una “palabra” en el búfer de vídeo, una pantalla de l líneas y c columnas de caracteres con s líneas de barrido por carácter requiere l × c palabras de memoria para representar una pantalla completa de caracteres, pero necesita s veces ese número de accesos a memoria para completar un ciclo de refresco: cada línea de palabras de caracteres se lee repetidamente s veces antes de que se lea la siguiente línea. Esto significa que las pantallas de caracteres que utilizan el 6845 requieren un ancho de banda de memoria elevado, del orden del ancho de banda necesario para pantallas gráficas direccionables por píxel (all-points-addressable) de la misma resolución.

Un controlador de pantalla diferente, que almacene internamente en búfer una línea completa de datos de caracteres, puede evitar esta lectura repetida de cada línea de caracteres desde la RAM del búfer de pantalla, reduciendo el ancho de banda de memoria necesario y permitiendo usar chips de memoria más lentos y baratos, disponer de más tiempo para que la CPU del sistema acceda a la memoria, o una combinación de ambas cosas. Añadir un búfer de caracteres de este tipo al 6845 se consideró un enfoque poco rentable cuando el chip fue introducido; sin embargo, solo unos pocos años después, el chip VIC-II utilizado en el Commodore 64 sí incluía una caché de línea de caracteres de este tipo.

Limitaciones

Usando el rango completo de direcciones RA0–RA4:CA0–CA13, el 6845 puede direccionar 2¹⁴⁺⁵ = 524.288 palabras de memoria. Una palabra puede tener cualquier número de bits elegido por el diseñador del sistema como ancho de memoria: aunque el número de direcciones únicas que el 6845 puede manejar está limitado a 524.288, la cantidad de memoria que puede direccionar puede ser significativamente mayor de lo que podría suponerse, porque el 6845 no impone ningún límite al tamaño de cada ubicación de memoria que direcciona. Si el tamaño de palabra es de un byte, como suele ser el caso, el 6845 puede direccionar 512 KiB. Si el tamaño de palabra es de 32 bits, por ejemplo para gráficos a color de 32 bits con un píxel por palabra, entonces el 6845 puede direccionar 2048 KiB; para palabras de 64 bits, puede direccionar el doble. Estos límites surgen de la combinación del 6845 y del diseño de la memoria externa conectada a él, no del 6845 por sí solo.

Buffers de fotogramas lineales

Como se ha descrito anteriormente, el 6845 no puede proporcionar normalmente grandes búferes de imagen lineales. Un diseño podría usar únicamente direccionamiento de caracteres de 14 bits y establecer el número de líneas por carácter en 1, pero estaría limitado a 128 líneas y 16 KB de memoria direccionable.

Véase también

Referencias

Enlaces externos

Related Articles

Wikiwand AI