El controlador de pantalla de video 8563 ( VDC ) era un circuito integrado producido por MOS Technology . Se utilizó en la computadora Commodore 128 (C128) para generar una pantalla de video RGB de 80 columnas (640 × 200 píxeles ) , que se ejecuta junto con un VIC-II que admite gráficos compatibles con Commodore 64 . Los modelos DCR (así como algunos modelos D) del C128 utilizaron el controlador 8568 [D] VDC más reciente y técnicamente más avanzado .
Historia y caracteristicas
Originalmente diseñado para una computadora empresarial planificada (pero inédita) basada en UNIX basada en el Zilog Z8000 , Commodore diseñó el VDC en varios prototipos de máquinas. De estos, solo el Commodore 128 llegó a producirse. A diferencia de los chips de video MOS anteriores, como el popular VIC-II, el VDC tenía memoria de video dedicada, 16 kilobytes (16.384 bytes; actualizable a 64 kilobytes, 65.536 bytes) en el C128 original o "plano" y 64 kilobytes en el C128DCR . El microprocesador no podía acceder directamente a esta RAM .
La 8563 fue más difícil de producir que la mayoría del resto de la línea MOS Technology y los rendimientos iniciales fueron muy bajos. Las primeras unidades también tenían importantes problemas de confiabilidad y tendían a autodestruirse por sobrecalentamiento. [1] Además, hubo problemas de sincronización con el VDC que provocarían un mal funcionamiento de las operaciones de almacenamiento y carga indirecta en sus registros.
Oficialmente, el VDC era un chip de solo texto, aunque una lectura cuidadosa de la literatura técnica de MOS Technology que se les dio a los primeros desarrolladores del C128 indicó que era posible un modo de mapa de bits de alta resolución ; simplemente no se describió en ninguna detalle. BASIC 7.0 , el lenguaje de programación integrado del C128, solo admitía gráficos de alta resolución en modo de 40 columnas a través del chip VIC-II heredado.
Poco después del lanzamiento del C128, el modo de mapa de bits del VDC se describió con considerable detalle en el libro de Data Becker "Commodore 128 - Das große GRAFIK-Buch" (publicado a finales de 1985 en los Estados Unidos por Abacus Software ), y un programa en lenguaje ensamblador fue proporcionada por los autores alemanes Klaus Löffelmann y Dieter Vüllers, en la que era posible establecer o borrar cualquier píxel o, utilizando BASIC para realizar los cálculos necesarios, generar formas geométricas en mapa de bits en la pantalla de 80 columnas. [1] En febrero de 1986, menos de un año después del lanzamiento del Commodore 128 , la revista RUN publicó " Ultra Hi-Res Graphics ", un artículo que describe el modo de mapa de bits del VDC e incluye un programa de escritura (escrito en lenguaje ensamblador 8502 ) que extendió las capacidades de BASIC 7.0 para admitir gráficos de alta resolución de 640 × 200 usando el 8563. [2] Los autores Lou Wallace y David Darus desarrollaron más tarde la utilidad Ultra Hi-Res en un paquete comercial, BASIC 8 . Una de las utilidades de terceros más populares para el C128, ofrecía capacidades de alta resolución VDC más avanzadas a una amplia audiencia de programadores.
Commodore finalmente ofreció documentación oficial completa sobre el VDC en la Guía de referencia del programador de Commodore 128 . Los modos de mapa de bits VDC se utilizaron ampliamente en la versión C128 del sistema operativo GEOS .
El VDC carecía de capacidades de sprites , lo que limitaba su uso en aplicaciones de juegos . Sin embargo, sí contenía capacidades de blitting para realizar de forma autónoma pequeñas copias de memoria de bloque dentro de su RAM de video dedicada. Mientras el VDC realiza dicha copia, la CPU del sistema puede seguir ejecutando el código, siempre que no se intente acceder a otros VDC antes de que finalice la copia. Estas funciones fueron utilizadas por la ROM del editor de pantalla del C128 para desplazarse rápidamente o borrar las secciones de la pantalla.
Especificaciones técnicas
- Salida RGBI (RGB más intensidad) compatible con el estándar de video CGA de IBM . *
- Espacio de direcciones de 16 o 64 kilobytes para visualización, forma de caracteres y memoria de atributos de visualización (dedicada, separada de la memoria del sistema).
- Resolución de video de hasta 720 × 700 píxeles en modo entrelazado (máximo con 64 kilobytes de RAM de video) [3] . Son posibles otros tamaños de imagen, dependiendo de las necesidades del programador, como 640 × 200 no entrelazado, 640 × 400 entrelazado, etc.
- Resolución de texto de 80 × 25 caracteres (kernal C128 predeterminado); son posibles otros tamaños como 80 × 50 o 40 × 25.
- 8 colores a 2 intensidades.
* Esto se aplica únicamente a los C128 de 60 Hz de EE. UU. Las máquinas C128 de 50 Hz emiten una señal con una actualización vertical de 50 Hz. Aunque no cumple con el estándar CGA, la mayoría de los monitores CGA eran capaces de mostrar la señal de 50 Hz sin problemas. Sin embargo, algunos monitores no lograron resolver la señal o lograron resolverla, pero tarde o temprano sus circuitos de desviación fallarían.
Programación
El direccionamiento de los registros internos del VDC y la memoria de video dedicada debe lograrse por medios indirectos. Primero, el programa debe decirle al VDC cuál de sus 37 registros internos debe ser accedido. A continuación, el programa debe esperar hasta que el VDC esté listo para el acceso, luego de lo cual se puede realizar una lectura o escritura en el registro interno seleccionado. El siguiente código ensamblador es típico de una lectura de registro:
ldx #regnum; registro VDC para acceder a stx $ d600 ; escribir en el bit de bucle del registro de control $ d600 ; comprobar el bit 7 del bucle bpl del registro de estado ; VDC no listo lda $ d601 ; leer del registro VDC ...
El siguiente código es típico de una operación de escritura de registro:
ldx #regnum; registro VDC para escribir en stx $ d600 ; escribir en el bit de bucle del registro de control $ d600 ; comprobar el bit 7 del bucle bpl del registro de estado ; VDC no listo sta $ d601 ; escribir en el registro VDC ...
Lo mismo es factible en lenguaje BÁSICO , llamando a rutinas específicas de KERNAL :
Este código es típico de una lectura de registro VDC, donde
BANK15 ... SYS DEC ( " CDDA " ) ,, registro : RREG VDC REM $ ccda también conocido como 52698 en decimal PRINT VDC ...
este código es típico de una escritura de registro VDC, donde
BANK15 ... SYS DEC ( " CDCC " ), valor , registro REM $ ccdc también conocido como 52684 en decimal ...
Debido a este método algo engorroso de controlar el VDC, la velocidad de fotogramas máxima posible en el modo de mapa de bits es generalmente demasiado lenta para los videojuegos de acción de estilo arcade, en los que se requiere una manipulación intensiva de bits de la pantalla.
En el modo de texto estándar, el VDC se comporta de manera muy similar al VIC-II, excepto con 2k de memoria de pantalla en lugar de 1k. La configuración predeterminada de encendido coloca la memoria de pantalla en $ 0- $ 7FF y la memoria de color en $ 800- $ 9FF y se pueden mover a cualquier lugar de la memoria VDC siempre que esté en un límite de 2k. Los atributos se manejan como el modo de alta resolución del VIC-II con un color de fondo global y el color de primer plano de cada carácter se establece individualmente por la RAM de color. Además de los datos de color, este último también contiene datos de atributos para cada carácter. El bit 4 hace que el carácter parpadee si está habilitado, el bit 5 produce caracteres subrayados y el bit 6 invierte el patrón de mapa de bits del carácter. El bit 7 habilita el juego de caracteres alternativo. El VDC puede utilizar hasta 512 caracteres. Cuando se habilita la bandera de carácter alternativo para un carácter dado, el patrón de carácter se extraerá de los caracteres 256-511. Por lo tanto, si se muestra el carácter 65, la activación de la bandera de carácter alternativo mostrará el carácter 321 en su lugar. El indicador de carácter alternativo se usa normalmente cuando se establece el modo de mayúsculas / minúsculas; el indicador está habilitado para todas las posiciones de pantalla de VDC, lo que hace que el conjunto de caracteres en mayúsculas / minúsculas y sus versiones de video inverso se muestren en lugar del conjunto predeterminado de caracteres en mayúsculas / gráficos. .
El VDC no utiliza una ROM de caracteres, sino que los patrones de ROM de caracteres del VIC-II simplemente se copian en la RAM de VDC como parte de la inicialización de encendido del C128, incluidos los patrones para los caracteres de video inverso, aunque el VDC es capaz de invertir caracteres en hardware. Los patrones de caracteres toman 16 bytes en lugar de 8 para almacenar, ya que el VDC tiene una altura de caracteres ajustable. Dado que la pantalla tiene 25 líneas, en la práctica, la altura de los caracteres se limita a 8 líneas, lo que significa que la mitad del espacio para los datos de los caracteres no se utiliza y se desperdicia. La configuración predeterminada de encendido coloca los datos de los caracteres en $ 2000- $ 3FFF. $ 2000- $ 23FF contienen los patrones para los caracteres en mayúsculas / gráficos, $ 2C00- $ 33FF los caracteres en mayúsculas / minúsculas, mientras que $ 2400- $ 2BFF y $ 3400- $ 3FFF contienen los patrones de video inverso para cada conjunto. El usuario puede definir libremente cualquier carácter personalizado y asignarlo a la memoria VDC.
Registro listado
Esta información fue adaptada de la Guía de referencia del programador de Commodore 128 [2]
Registrarse | Hexadecimal | Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Descripción |
---|---|---|---|---|---|---|---|---|---|---|
Total horizontal | ||||||||||
Horizontal mostrado | ||||||||||
Posición de sincronización horizontal | ||||||||||
Ancho de sincronización vertical / horizontal | ||||||||||
Total vertical | ||||||||||
Ajuste vertical | ||||||||||
Vertical mostrado | ||||||||||
Posición de sincronización vertical | ||||||||||
Modo entrelazado | ||||||||||
Vertical total de caracteres | ||||||||||
Modo de cursor, iniciar escaneo | ||||||||||
Línea de exploración final del cursor | ||||||||||
Mostrar dirección de inicio Byte alto | ||||||||||
Mostrar dirección de inicio Byte bajo | ||||||||||
Posición del cursor Byte alto | ||||||||||
Posición del cursor Byte bajo | ||||||||||
Posición vertical del lápiz óptico | ||||||||||
Posición horizontal del lápiz de luz | ||||||||||
Actualizar dirección de byte alto | ||||||||||
Actualizar dirección de byte bajo | ||||||||||
Atributo Dirección de inicio Byte alto | ||||||||||
Atributo Dirección de inicio Byte bajo | ||||||||||
Total de caracteres horizontal, visualización de caracteres horizontal | ||||||||||
Vertical de visualización de caracteres | ||||||||||
Desplazamiento suave vertical | ||||||||||
Desplazamiento suave horizontal | ||||||||||
Color de primer plano / fondo | ||||||||||
Incremento de dirección por fila | ||||||||||
Dirección base de caracteres | ||||||||||
Subrayar línea de escaneo | ||||||||||
El recuento de palabras | ||||||||||
Registro de datos | ||||||||||
Dirección de inicio del bloque Byte alto | ||||||||||
Dirección de inicio del bloque Byte bajo | ||||||||||
Pantalla Habilitar Comenzar | ||||||||||
Pantalla Habilitar Fin | ||||||||||
Frecuencia de actualización de DRAM |
Referencias
- ^ Capítulo 3.9.1 "VDC HI-RES-Grafik" Página 213ff
- ^ Commodore Capital, Inc., (1986). Guía de referencia del programador de Commodore 128. Nueva York, NY: Bantam Books, Inc.
enlaces externos
- Archivo autoextraíble de alta resolución - Volumen I
- Archivo autoextraíble de alta resolución - Volumen II
- C = Hacking volume 2 - Listado de registros y descripción