Tarjeta gráfica ASUS EAH6850 (Radeon 6850) en Lion 10.7.3: modificar ATI6000controller mediante script de Perl.
Nota: es recomendable leer el primer post del hilo de Alexander Martinez titulado [Guide] Getting XFX HD6850 connectors to work, en él se propone un método avanzado de configurar el chip gráfico Radeon 6850 en Lion para que todos los puertos funcionen adecuadamente. Consulta también el hilo de Shiecldk titulado Make ASUS EAH6850 100% work! y las entradas del usuario Hard233 en el hilo titulado GUIA: instalación de ATI Radeon 6850 en Lion, ambos referidos al modelo ASUS EAH6850 (los 3 artículos en InsanelyMac).
El método de Alexander Martinez para su tarjeta XFX HD6850 se basa en:
- extraer la ROM de la tarjeta ATI y descodificarla para identificar el orden y tipo de conectores que la GPU utiliza como enlaces físicos para comunicarse con cada puerto
- obtener las personalidades (framebuffers) existentes en nuestro sistema leyéndolas desde las extensiones gráficas (ATI6000Controller en nuestro caso)
- probar con diferentes framebuffers y conectores hasta conseguir averiguar la combinación adecuada para que todos los puertos de la tarjeta funcionen correctamente, esta es la parte más laboriosa del proceso y la que requiere mayores conocimientos para llevarla a cabo
- modificar el archivo ATI6000Controller a nivel hexadecimal, substituyendo los datos de los conectores por los datos válidos anotados en el paso anterior
- el post contiene los nombres de los programas requeridos para extraer la ROM (GPU-Z en Windows), descodificarla (radeon_bios_decode creado por bcc9) y obtener los framebuffers (aty_personality.py también creado por bcc9).
En resumen, se trata de crear una extensión ATI6000Controller.kext modificada específicamente para el modelo concreto de nuestra tarjeta gráfica. Si se realiza con éxito, todos los puertos (2xDVI, 1xHDMI y 1xDP) mandan correctamente la señal al monitor, aceptando el cambio de puerto en caliente, sin necesidad de usar Graphics Enabler = Yes y sin retardos del ratón.
En este artículo se tratará específicamente de la manera de modificar la extensión ATI6000Controller mediante un script de Perl (SP en adelante). Para aquellos que no están familiarizados con esto, Perl busca una determinada cadena y la reemplaza por otra.
La primera cadena contiene la información de conectores (IC) obtenida desde ATI6000controller (original de Apple). La segunda cadena contiene la IC modificada para coincidir con las características de nuestra tarjeta, esta cadena ha de crearse siguiendo el método de Alexander Martinez o recurrir a alguna de las ya probadas para un modelo idéntico a nuestra gráfica. Yo he utilizado la que amablemente creó Hard233 específica para mi tarjeta (ASUS EAH6850).
El esquema que sigue el SP es:
sudo perl -pi -e 's|primera_cadena|segunda_cadena|g' /System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/ATI6000Controller
Para crear la primera cadena desde la extensión ATI6000controller original se utiliza el script ati-personality.py que proporciona la IC de esta forma:
Personality: Duckweed
ConnectorInfo count in decimal: 4
Disk offset in decimal 176800 (2b2a0 in hex)
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 04 01
0000010 00 04 00 00 04 03 00 00 00 01 00 00 22 05 05 02
0000020 00 08 00 00 04 02 00 00 00 01 00 00 11 02 03 04
0000030 00 02 00 00 14 02 00 00 00 01 00 00 00 00 06 05
Personality es el framebuffer y disk offset es el sitio en que comienza la cadena dentro del archivo binario ATI6000controller (176800 en decimal y 2b2a0 en hexadecimal). Necesitamos las 4 líneas de 16 pares de caracteres cada una:
00 04 00 00 04 03 00 00 00 01 00 00 12 04 04 01
00 04 00 00 04 03 00 00 00 01 00 00 22 05 05 02
00 08 00 00 04 02 00 00 00 01 00 00 11 02 03 04
00 02 00 00 14 02 00 00 00 01 00 00 00 00 06 05
Copiamos estas 4 líneas y las pegamos en un editor de texto como por ej. TextWrangler o TextMate (gratuitos), reemplazamos los espacios entre caracteres por x, añadimos x al inicio de cada línea y ponemos todo en una sola línea:
00x04x00x00x04x03x00x00x00x01x00x00x12x04x04x01x00x04x00x00x04x03x00x00x00x01x00x00x22x05x05x02x00x08x00x00x04x02x00x00x00x01x00x00x11x02x03x04x00x02x00x00x14x02x00x00x00x01x00x00x00x00x06x05
Hacemos lo mismo con la segunda cadena, creándola desde la IC que sea más adecuada. Aparte de la de Hard233, he probado otras que parecen funcionar bien.
Hard233
00 04 00 00 04 03 00 00 00 01 00 00 12 04 04 01
00 08 00 00 04 02 00 00 00 01 00 00 22 05 01 04
04 00 00 00 14 02 00 00 00 01 00 00 00 00 03 05
00 02 00 00 14 00 00 00 00 01 00 00 11 02 06 06
Esta es la segunda cadena:
x00x04x00x00x04x03x00x00x00x01x00x00x12x04x04x01x00x08x00x00x04x02x00x00x00x01x00x00x22x05x01x04x04x00x00x00x14x02x00x00x00x01x00x00x00x00x03x05x00x02x00x00x14x00x00x00x00x01x00x00x11x02x06x06
Combinándolo todo, obtenemos el SP completo para ser ejecutado desde Terminal:
sudo perl -pi -e 's|x00x04x00x00x04x03x00x00x00x01x00x00x12x04x04x01x00x04x00x00x04x03x00x00x00x01x00x00x22x05x05x02x00x08x00x00x04x02x00x00x00x01x00x00x11x02x03x04x00x02x00x00x14x02x00x00x00x01x00x00x00x00x06x05|x00x04x00x00x04x03x00x00x00x01x00x00x12x04x04x01x00x08x00x00x04x02x00x00x00x01x00x00x22x05x01x04x04x00x00x00x14x02x00x00x00x01x00x00x00x00x03x05x00x02x00x00x14x00x00x00x00x01x00x00x11x02x06x06|g' /System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/ATI6000Controller
Es importante hacer desde Terminal
sudo touch /System/Library/Extensions
antes de reiniciar.
The Djey
00 04 00 00 04 03 00 00 00 01 00 00 12 04 04 01
04 00 00 00 14 00 00 00 00 01 00 00 11 02 01 06
00 08 00 00 00 02 00 00 00 01 00 00 22 05 03 04
00 02 00 00 14 02 00 00 00 01 00 00 00 00 06 05
Sollarman
00 04 00 00 04 03 00 00 00 01 00 00 12 04 04 01
00 08 00 00 04 02 00 00 00 01 00 00 22 05 06 04
04 00 00 00 14 02 00 00 00 01 00 00 00 00 05 05
00 02 00 00 04 00 00 00 00 01 00 00 11 02 03 06
Nota: No es necesario tener Graphics Enabler = Yes ni AtiConfig ni AtiPorts en org.chamelon.boot.plist.
Mountain Lion
Marquino amablemente comprobó el funcionamiento de este script en ML y añadió un comentario con la modificación requerida que consiste en cambiar el destino del script, que en Lion es
/System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/ATI6000Controller
y en ML es
/System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/AMD6000Controller
sudo perl -pi -e 's|x00x04x00x00x04x03x00x00x00x01x00x00x12x04x04x01x00x04x00x00x04x03x00x00x00x01x00x00x22x05x05x02x00x08x00x00x04x02x00x00x00x01x00x00x11x02x03x04x00x02x00x00x14x02x00x00x00x01x00x00x00x00x06x05|x00x04x00x00x04x03x00x00x00x01x00x00x12x04x04x01x00x08x00x00x04x02x00x00x00x01x00x00x22x05x01x04x04x00x00x00x14x02x00x00x00x01x00x00x00x00x03x05x00x02x00x00x14x00x00x00x00x01x00x00x11x02x06x06|g' /System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/AMD6000Controller
AVISO: las instrucciones y propuestas de esta página se proporcionan sin garantía de ningún tipo a la hora de llevarlas a la práctica. Lo que ha funcionado bien en mi caso pudiera no hacerlo en el tuyo.