Configuración mediante el registro

Mayo de 2006 por Jeroni Paul

Índice

Introducción

Nota: este documento se conserva como herramienta informativa. WinModelines automatiza todo este proceso y se aconseja su uso en lugar de la edición manual del registro descrita aquí.

Editando el registro de configuración de Windows es posible introducir resoluciones inusuales en algunos controladores gráficos y modificar la temporización de la señal de vídeo para generar frecuencias de refresco personalizadas para pantallas o dispositivos especiales.

Una de las muchas utilidades consiste en conectar un televisor o monitor Arcade mediante el cable apropiado expuesto en la sección Cables de conexión de vídeo. Los ejemplos expuestos en este apartado configuran una señal de vídeo compatible con PAL/NTSC a 15,6 kHz para televisor o monitor Arcade, pero la utilidad de este hallazgo va mucho más allá, simplemente cambiando los valores introducidos es posible generar una señal de vídeo compatible con cualquier otro tipo de pantalla o propósito.

La ventaja es que podemos prescindir de software ajeno: el propio controlador gráfico genera los modos especiales sin intervención alguna. Las nuevas configuraciones se aplican tan pronto carga el controlador mostrándose la pantalla de bienvenida y login en la pantalla y además el controlador reporta a Windows los nuevos modos, siendo fácilmente seleccionados como cualquier otra resolución.

En Windows XP las resoluciones disponibles en el controlador se pueden ver accediendo a Panel de control, Propiedades de pantalla, Configuración, Opciones avanzadas, Adaptador, Lista de todos los modos. El controlador incorpora un repertorio de modos estándar que es lo que se muestra en esta lista.

En Windows 98 no hay una lista completa, se debe seleccionar primero la resolución en Propiedades de pantalla y una vez activada la resolución nos mostrará las frecuencias de refresco disponibles en Avanzada, Adaptador. Si no se muestra la sección Frecuencia de actualización debajo de Información del adaptador es porque Windows no ha podido reconocer el monitor conectado. Debemos acceder a la pestaña Monitor y pulsar Cambiar para seleccionar un monitor, por ejemplo SVGA 800x600 a 75 Hz. La lista de resoluciones y refrescos que se pueden seleccionar viene filtrada por los que soporte el monitor seleccionado, el indicado soporta los modos de ejemplo.

Localizar la entrada de registro

Para empezar a editar los valores que usa el controlador gráfico debemos localizar su ruta dentro del registro. Dicha ruta es distinta en cada caso por lo que no podemos exponerla aquí. Abrimos el Editor de registro (Inicio, Ejecutar, "regedit") y nos dirigimos a:

Para Windows NT/2000/XP: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO
En esta clave encontraremos los valores \Device\VideoN donde N es 0 para la primera tarjeta gráfica (o si únicamente hay una), 1 para la segunda y así sucesivamente. El valor asociado es la ruta hacia las opciones del controlador, accedemos a ella desplegando las entradas correspondientes del árbol teniendo en cuenta que \Registry\Machine significa HKEY_LOCAL_MACHINE.

Para Windows 98/Me: HKEY_LOCAL_MACHINE\Software\ATI Technologies\controlador\NNNN\DAL
Deberemos tratar de identificar el número NNNN activo en caso de tener más de uno.

Configuración de tarjetas ATI

En esta sección añadiremos la resolución NTSC 640x480 a 30Hz al ser la más simple. Se mostrarán los pasos para personalizar completamente esta resolución, para añadir cualquier otra simplemente se deberán seguir los mismos pasos.

Para añadir un nuevo modo, editamos en el registro el valor DALNonStandardModesBCD1 haciendo doble clic en él. Nos aparece esta ventana:

Modos personalizados

Los datos de interés son de la segunda a la novena columna, donde cada fila es una resolución personalizada. Con el controlador recién instalado vienen algunas resoluciones no estándar y aquí añadiremos las nuestras. Posicionamos el cursor al final de los datos tal como muestra la imagen e introducimos estos valores para la nueva resolución:

06 40 04 80 00 00 00 30

Los cuatro primeros números (dos pares) representan la resolución horizontal, los cuatro siguientes la vertical, los cuatro siguientes la profundidad de color (a ceros significa todas las profundidades disponibles) y los cuatro últimos la frecuencia de refresco vertical. En este caso acabamos de introducir el modo 640x480 a 30 Hz.

Aceptamos y reiniciamos el ordenador. Es necesario reiniciar el ordenador para que el controlador cargue los nuevos parámetros. Una vez reiniciado accedemos a la lista de modos y ya nos aparecerá el nuevo modo:

Si lo activamos la salida será la esperada: 15,7 kHz a 30 Hz (no se recomienda hacerlo porque posiblemente no sincronice ni la TV ni el monitor con la señal, antes es necesario configurar los sincronismos, siguiente sección).

Para Windows98: Además hay que dar de alta las nuevas resoluciones y refrescos aquí:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Display\NNNN\MODES\X
X es la profundidad de color admitida para la resolución, se deben añadir las resoluciones en la clave 8 obligatoriamente y a 16 y 32 para poder seleccionarlos. Se creará una nueva clave si no existe con la resolución como nombre XXX,YYY y para el de la clave 8 en el valor Predeterminado los refrescos verticales admitidos para esa resolución separados por comas. En este caso se ha añadido el refresco 30 a la lista de la clave 640,480:

Alta de nueva resolución en Windows 98

Si intentamos utilizar el modo añadido en el paso anterior nos encontraremos que la señal de sincronismos se genera con polaridad positiva y la TV no sincroniza (a menos que se use el adaptador de sincronismos compuestos). Una solución es acceder al panel de control ATI y establecer la polaridad de los sincronismos negativa, pero esto se debe hacer una vez activado el modo: esta configuración se guarda individualmente para cada modo. Si la TV no sincroniza y el monitor tampoco no lo podremos hacer, así que vamos a establecerlo mediante el registro.

Polaridades

Si no existe se creará un nuevo valor llamado DALR6 CRT640x480x0x30 de tipo Binario (Edición, Nuevo, Valor binario). Si ya existe pasamos a su edición. Su nombre indica el modo para el que se aplicarán las configuraciones que contiene. Doble clic en el nuevo valor para editarlo, se debe introducir la información de una de las imágenes según la versión del controlador:

Versión pre-Catalyst y Catalyst hasta 3.2  Catalyst de 3.4 a 4.11
Catalyst de 4.12 a 5.4  Catalyst 5.5 o posterior

La imagen superior-izquierda es para Catalyst versión 3.2 o anterior, la superior-derecha es para las versiones Catalyst de la 3.4 a la 4.11, la inferior-izquierda aplica en las versiones Catalyst de la 4.12 a la 5.4 y la inferior-derecha es el modelo para la versión 5.5 o posterior.

Hecho esto ya podemos reiniciar el PC y establecer el nuevo modo. La TV debería sincronizar correctamente (necesita ser compatible con refrescos NTSC a 30Hz). Se puede ajustar la posición y el tamaño en el panel de control ATI.

Nota: Los valores 01 establecen polaridad negativa para las señales de sincronismo, para cambiar a polaridad positiva se reemplazarán los 01 por 00 excepto el valor señalado con un círculo. Dicho valor se debe establecer a 00 si se personaliza la resolución según la sección Ajustes avanzados más abajo.

Sincronismos compuestos

Una ventaja de las tarjetas ATI es su habilidad para generar sincronismos compuestos, recordemos que para sacar provecho de esta característica es necesario omitir la conexión de sincronismo vertical (VGA pin 14). Para habilitar la generación de sincronismos compuestos editamos el valor DALR6 CRT y cambiamos el primer valor de la fila 0050 por un 01:

Sincronización compuesta

Esta configuración es global, es decir afecta a todos los modos y permanecerá activa hasta que se deshaga el cambio o se desactive desde el panel de control ATI. Para un correcto funcionamiento al activar esta opción las polaridades de los sincronismos deben ser positivas en los modos utilizados, es decir se deben cambiar los valores 01 por 00 (excepto el señalado con un círculo) del apartado Polaridades.

Ajustes avanzados

Hasta ahora no hemos indicado en ningún sitio la frecuencia de escaneo horizontal ni ajustes de ningún tipo, dado que el controlador toma unos por defecto para cada modo si no se le indican y en este caso toma por defecto los parámetros correctos.

Es posible especificar los parámetros "Modeline" para cada modo que se crea para que los sincronismos sean exactamente como queremos que sean. Dichos datos son los equivalentes a los utilizados en el X-Config de Linux y los mostrados por PowerStrip en Opciones avanzadas del temporizador.

Crear un valor nuevo llamado DALDTMCRTBCD640x480x0x30 (valor binario). Se rellenará el valor con los siguientes datos:

Temporizador avanzado

El nombre del valor refleja el modo de pantalla en el que se aplicarán los parámetros. Vamos a describir cada campo y como convertir los datos Modeline en los que se deben introducir aquí.

Usaremos de ejemplo un Modeline que genera una señal NTSC a 29.97 cps (NTSC color):
Modeline "NTSC" 12.210 640 656 712 776 480 486 492 525 interlace -hsync -vsync
y en general:
Modeline "Name" FF.FFF HHH PHH LHH THH VVV PVV LVV TVV (opciones).

Una vez guardado y reiniciado el PC, el modo ya funciona con los nuevos parámetros.

Cuando se personaliza un modo de esta manera el valor de refresco vertical especificado en el nombre del modo (30) deja de tener significado real y pasa a ser una etiqueta, ya que el refresco vertical ahora viene dado por los ajustes Modeline especificados. Es decir, si introducimos unos ajustes que configuran otro refresco, éste prevaldrá y aunque el modo aparecerá como 30 Hercios en la lista de modos, en realidad el refresco real será el indicado por los ajustes. Gracias a esto podemos crear más de un modo con el mismo refresco vertical usando etiquetas distintas. Por ejemplo podemos dejar el modo de 30Hz con los ajustes por defecto del controlador que son buenos y crear otro modo 640x480 a 29Hz con los ajustes expuestos para 29.97Hz.

Notas

El controlador que se instala al instalar Windows XP no soporta el entrelazado, se debe actualizar con un controlador ATI (y se recomienda utilizar una versión reciente).

Si al activar un modo entrelazado aparece la imagen desfigurada en pequeños cuadraditos excepto el ratón es necesario desactivar el Tiling, para ello se establece el valor DisableTiling en el registro a 1.

Si el controlador parece ignorar la presencia de la clave con ajustes avanzados y aplica sus ajustes por defecto, debemos asegurarnos que no se haya aplicado ningún desplazamiento o cambio de tamaño a ese modo mediante el centro de control. Para ello verificamos que la clave DALR6 CRTXXXxYYYx0xRR donde se han configurado los sincronismos esté todo a ceros incluido el valor señalado con un círculo en el apartado Polaridades, exceptuando los dos valores 01 que establecen polaridad negativa.

Si el controlador insiste en virtualizar la resolución debemos asegurarnos de seleccionar un monitor adecuado. En Windows XP el Monitor predeterminado funciona bien y en Windows 98 el SVGA 800x600 a 75 Hz. En versiones antiguas del controlador bajo Windows 98 no hay forma de establecer una resolución personalizada como 720x576 a 25 Hz, es necesario actualizar el controlador.

A lo largo de este documento se ha creado un solo modo, que es útil para reproducir vídeo NTSC a 29.97 fps. Sin embargo se puede explotar mejor la conexión PC a TV definiendo otros modos más adecuados a distintos propósitos, por ejemplo aquí están los valores para el modo PAL 720x576 a 50 Hz, es un modo importante para vídeo. No olvidar que además se ha de añadir la resolución y el refresco a DALNonStandardModesBCD1 y configurar los sincronismos en DALR6 CRT720x576x0x25 y en Windows 98 dar de alta la resolución como se describe más arriba:

Temporización para PAL

Referencias

Investigación basada en la herramienta ATI Mode Maker y Catalyst Control Center.

Configuración de tarjetas NVidia

Hace tiempo que NVidia incorpora en su panel de control la posibilidad de definir resoluciones personalizadas y en algunas versiones incluso introducir los parámetros Modeline. Sin embargo parece que los desarrolladores no han probado muy bien estas opciones. A veces se corrompe sin razón aparente y no deja añadir o eliminar resoluciones, y es habitual que al introducir datos Modeline los cambie por lo que quiere, dejando la mayoría de las veces unos sincronismos que no funcionan ni con la TV ni con el monitor. Por este motivo he recurrido al registro para configurar los modos. Los datos especificados ahí se mantienen estables y funcionan correctamente.

Lo que se expone en esta sección aplica a controladores ForceWare versión 66.93 o superior para 2000/XP.

Añadir resoluciones

En esta sección añadiremos la resolución NTSC 640x480 a 30Hz al ser la más simple. Se mostrarán los pasos para personalizar completamente esta resolución, ya que para añadir cualquier otra simplemente se deberán seguir los mismos pasos.

Para añadir un nuevo modo, tenemos dos opciones. La primera, desde el panel de control NVidia, sección Custom resolutions si tenemos suerte nos dejará añadir la resolución 640x480 a 30 Hercios (no se recomienda hacer nada más ahí). Si no lo permite nos queda una segunda opción, editamos en el registro el valor NV_Modes y aparece esta ventana:

Modos personalizados

Añadimos el texto resaltado en azul después de {*}S

640x480=801E;

El valor 01E es el refresco vertical de 30 Hz en hexadecimal. Así acabamos de introducir el modo 640x480 a 30 Hz, (modo NTSC).

Aceptamos y reiniciamos el ordenador. Es necesario reiniciar el ordenador para que el controlador cargue los nuevos parámetros. Una vez reiniciado accedemos a la lista de modos y ya nos aparecerá el nuevo modo:

Sin embargo si lo intentamos usar nos dará unos sincronismos raros que no funcionarán ni con la TV ni con el monitor, así que mejor no probarlo hasta configurar los valores Modeline en la siguiente sección. Para crear resoluciones no estándar para uso con monitor de PC esto es suficiente y no es necesario continuar.

Configurar los sincronismos

Si intentamos utilizar el modo añadido en el paso anterior nos encontraremos que las configuraciones por defecto del controlador no se asemejan en nada a lo que esperábamos. Para solucionar el problema se debe indicar al controlador la temporización precisa que queremos que tenga la señal de sincronismos para el modo creado. Partimos de los datos Modeline equivalentes a los utilizados en el X-Config de Linux y los mostrados por PowerStrip en Opciones avanzadas del temporizador.

Si no existe, se crea un valor nuevo llamado CUST_MODE (valor binario) rellenándolo con los siguientes datos. Si ya existe se edita añadiendo los nuevos datos al final de los existentes:

Temporizador avanzado

Usamos de ejemplo un Modeline que genera una señal NTSC a 29.97 cps (NTSC color):
Modeline "NTSC" 12.210 640 656 712 776 480 486 492 525 interlace -hsync -vsync
y en general:
Modeline "Name" FF.FFF HHH PHH LHH THH VVV PVV LVV TVV (opciones).

Conversión a hexadecimal: Todos los valores se deben convertir a hexadecimal antes de introducirlos, esto se puede hacer con la calculadora de Windows. Además los bytes están guardados con el menos significativo primero (big-endian), es decir después de convertir, por parejas se han de ordenar al revés. Ejemplos:

Introducimos los siguientes datos, uno tras otro en el orden expuesto. Entre paréntesis al inicio de cada punto se indica el número de pares de cifras que ocupa cada valor, se debe respetar siempre añadiendo ceros cuando sea necesario:

Una vez guardado y reiniciado el PC, el modo ya funciona con los nuevos parámetros.

Cuando se personaliza un modo de esta manera el valor de refresco vertical especificado en la etiqueta del modo (30) deja de tener significado real y pasa a ser una etiqueta, ya que el refresco vertical ahora viene dado por los ajustes Modeline especificados. Es decir, si introducimos unos ajustes que configuran otro refresco, éste prevaldrá y aunque el modo aparecerá como 30 Hercios en la lista de modos, en realidad el refresco real será el indicado por los ajustes. Gracias a esto podemos crear más de un modo con el mismo refresco vertical usando etiquetas distintas.

Una vez activado el modo se puede centrar la imagen accediendo al panel de control NVidia.

Añadir más modos

Así es como quedan los dos valores del registro cuando se añade un segundo modo, en este caso el estándar PAL:

Dos modos  Dos modos

La imagen de la derecha muestra los valores correctos para el modo PAL, 720x576 a 50 Hz, la posición del cursor muestra donde acaba el modo anterior y empieza este.

Notas

Si el controlador insiste en virtualizar la resolución debemos asegurarnos de seleccionar un monitor adecuado. En Windows XP el Monitor predeterminado funciona bien.

Referencias

Configuración de tarjetas Matrox

Esta sección se ha probado usando una Matrox Millenium II PCI y la última versión de sus controladores (5.82) disponible en la web de Matrox, pero también aplica a otras gráficas Matrox (G100, G200, G400, G450, G500, Mystique y Productiva). Es probable que funcione también en otras versiones más recientes del controlador.

Añadir modos a resoluciones existentes

En esta sección añadiremos el modo NTSC 640x480 a 30Hz. Configurar unos nuevos datos de sincronización para una resolución existente es lo más simple.

Editamos el valor Graphic.640.480. Cada tres líneas de este valor (24 parejas de cifras) representa una configuración de refresco. Los datos que ya contiene son los refrescos disponibles para 640x480. Vamos a añadir nuestro refresco (30Hz) a este valor, para ello introducimos los datos resaltados al final de los valores existentes:

Modo NTSC

Aceptamos y reiniciamos el ordenador. Es necesario reiniciar el ordenador para que el controlador cargue los nuevos parámetros. Una vez reiniciado accedemos a la lista de modos y ya nos aparecerá el nuevo modo:

El modo está listo para utilizarse.

Conversión de valores Modeline

A continuación describimos como convertir los datos Modeline a los valores a introducir. Usaremos de ejemplo un Modeline que genera una señal NTSC a 29.97 cps (NTSC color), que es el introducido en el apartado anterior:
Modeline "NTSC" 12.210 640 656 712 776 480 486 492 525 interlace -hsync -vsync
y en general:
Modeline "Name" FF.FFF HHH PHH LHH THH VVV PVV LVV TVV (opciones).

Conversión a hexadecimal: Todos los valores se deben convertir a hexadecimal antes de introducirlos, esto se puede hacer con la calculadora de Windows. Además tiene la peculiaridad que los bytes están guardados con el menos significativo primero (big-endian), es decir después de convertir, por parejas se han de ordenar al revés. Ejemplos:

Empezando por el primer valor de la sencuencia de 24 valores, vamos a describir cada uno. Entre parénstesis se indicará la longitud (en parejas de cifras) que toma el valor, se debe respetar siempre y rellenar de ceros a la derecha cuando sea necesario.

Importante: El número total de líneas del modo (TVV = 525) tiene que ser múltiplo de 4, de lo contrario la tarjeta no renderiza correctamente el entrelazado dando una imagen de mala calidad. En este caso hemos tomado el más cercano (524).

Nuevas resoluciones

A continuación añadiremos la resolución para el modo PAL 720x576. Una vez añadida la resolución se seguirán los mismos pasos mostrados anteriormente para configurar sus sincronismos.

Editamos el valor Mga.SingleResolutions, añadiendo al final de los valores existentes cuatro pares de cifras. Los dos primeros pares representan la nueva resolución horizontal y los dos últimos pares la vertical. Se deben convertir a hexadecimal de la misma forma que el apartado anterior. En la imagen de la izquierda aparece resaltada la resolución 720x576 una vez introducida: D0 02 40 02

Creamos un nuevo valor de tipo binario llamado Graphic.720.576, se edita y se añaden los parámetros Modeline para el modo PAL tal y como se ha expuesto en el apartado anterior. Al final queda así:

Nueva resolución 720x576  Parámetros para PAL

Notas

El controlador que instala Windows XP no permite añadir ni personalizar los modos, es necesario instalar los controladores más recientes disponibles en la web de Matrox.

Si el controlador insiste en virtualizar la resolución o el nuevo modo no se muestra en la lista debemos asegurarnos de seleccionar un monitor adecuado. En Windows XP el Monitor predeterminado funciona bien.

Configuraciones específicas

Cuando se editan las configuraciones avanzadas de monitor con la herramienta QuickDesk, los parámetros se guardan en otro valor del registro específico para el monitor y profundidad de color. Dicho registro es casi idéntico al utilizado a lo largo de este documento (Graphic.XXX.YYY) con las siguientes variaciones. Utilizando este nuevo valor en vez del anterior es posible definir configuraciones específicas para cada salida de la tarjeta y profundidad de color. El controlador utiliza este registro si lo encuentra, o el general en caso contrario.

El valor se llama D0M.0.Def.Graphic.XXX.YYY.CC y se rellena de la misma forma que el general Graphic.XXX.YYY con la salvedad:

Configuración específica para 24 bits de color y monitor 0

Descubrimientos realizados y documentados en Mayo de 2006 por Jeroni Paul.
Copyright © 2006 Jeroni Paul.