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, Inc.. 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.

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.

Diseño Diseñado originalmente por Hitachi como HD46505. Las versiones construidas por Hitachi se encuentran en una amplia variedad de computadoras japonesas, desde Sony, Sharp, Panasonic y Casio. Clonado posteriormente como MB89321A por Fujitsu. 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).

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.

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 thumb|250px|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.

N.º deRegistro Función 0 Total horizontal, en númeroo 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 Total vertical 5 Ajuste del 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 Nro de filas de caracteres 8 Modo de entrelazado 9 Máxima dirección de líneas de escaneo 10 Inicio del cursor, en línea de escaneo 11 Final del cursor, en línea de escaneo 12 Dirección inicial de la pantalla (High) 13 Dirección inicial de la pantalla (Low) 14 Dirección del cursor (High) 15 Dirección del cursor (Low) 16 Dirección del Light Pen (High) 17 Dirección del Light Pen (Low)

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.

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.

Modos de vídeo ModoResoluciónColoresBytesMC6847 Display Modes OverviewAlphanumeric Internal32 x 161 + Negro512Alphanumeric External32 x 161 + Negro512Semigraphics 464 x 328 + Negro512Semigraphics 664 x 484 + Negro512Color Graphics 164 x 6441024Resolution Graphics 1128 x 641 + Negro1024Color Graphics 2128 x 6442048Resolution Graphics 2128 x 961 + Negro1536Color Graphics 3128 x 9643072Resolution Graphics 3128 x 1921 + Negro3072Color Graphics 6128 x 19246144Resolution Graphics 6256 x 1921 + Negro6144

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.

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, Inc. 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.

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. 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) 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.