Motorola 6845
# Motorola 6845

El Motorola 6845, comúnmente MC6845 y también conocido como CRTC6845 (Cathode Ray Tube Controller 6845), fue un generador de direcciones de video, introducido primeramente por Motorola. Aunque el 6845 fue desarrollado para los diseños basados en el CPU Motorola 6800 y tenía un número de parte relacionado, fue usado junto con otros procesadores. El 6845 fue usado en los adaptadores video MDA, CGA y EGA, de los primeros computadores personales de IBM y sus compatibles, como también en los computadores Amstrad CPC y BBC Micro. La funcionalidad del 6845 fue duplicada y ampliada por circuitos hechos a la medida en la tarjeta de vídeo VGA.

El 6845 era muy similar y estaba relacionado con el posterior 6545 fabricado por MOS Technology (Commodore Semiconductor Group) y Rockwell (en dos variaciones), y fue clonado como con el Hitachi 46505.

## Visión general

El 6845 generaba las señales necesarias para conectarse con una pantalla de trama pero no exhibía 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.

Debió a 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 otra pantalla de trama.

## El interior del 6845

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.º de Registro | Función |
| - | - |
| 0 | Total horizontal, en númeroo de caracteres |
| 1 | Número de caracteres horizontales mostrados por línea |
| 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 exhibiciones 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 fila), se incrementaba la dirección de la fila. Si la dirección de la fila no igualaba el número programáticamente fijado de filas 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 fila se resetea a cero después de escanear la última fila del carácter, para así prepararse a escanear la primera fila de la siguiente línea 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 fila para indexar una tabla de gráficos que representaban el carácter en la ROM, se construía una exhibició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.

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 exhibición de no caracteres y un movimiento suave horizontal, pero severamente impide el movimiento en sentido vertical.

## 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 el CPU deseara leer y el chip se alternaba entre hacer salir direcciones para la generación de la exhibición y el ajuste de exhibición para el acceso del 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 exhibició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.

## Trucos

El 6845 leía la dirección del comienzo para la exhibició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 exhibición. Esto era comúnmente usado por los juegos para proporcionar un área móvil de exhibición (generalmente el campo de juego), y un área estática (generalmente una exhibició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.

