Gravis ULTRASOUND Plug n' Play Mini-Como

J. F. Mammet, mammet@diva.univ-mlv.fr
Traducido por Iñaki Martínez Díez, imd@redestb.es

Versión 0.01, 27 de Marzo de 1996
Particularidades de configuración de la Gravis ULTRASOUND Plug n' Play bajo Linux.

1. Introducción

Como fan de las tarjetas de sonido Gravis desde hace mucho tiempo, me alegré mucho cuando finalmente Gravis sacó algo nuevo. Había planeado comprar la nueva Ultrasound desde hacía tiempo, y la compré con un mega de RAM tan pronto estuvo disponible aquí en Francia.

La instalé, y qué sorpresa, mi BIOS plug and play la detectó, e incluso windows95 (lo siento, bromas estúpidas sobre marketing95 hoy no). Así que pensé que la tarjeta funcionaría en cualquier sitio ...

Entonces arranqué Linux, no tuve problemas, la tarjeta fue detectada como una GUS rev 3.4, lo cual me pareció estar bien, pero no lo estaba ...

Algún tiempo después probé Quake, y no sonaba. Entonces leí el manual del juego, y ví que Quake estaba usando algún DMA no estándar que la GUS no podía proporcionar ...

Pensé que no era bueno para mi, tener tan buena tarjeta y no tener sonido en tan genial juego (la versión dos necesita la emulación de sound blaster, y yo incluso prefiero sin sonido que eso).

Así que, ¿Ahora qué? ¿debería esperar hasta Mayo para un driver de GUS PnP? ¿Debería comprar una sound blaster (buag)? ¿Que ocurrirá en el próximo episodio de Expediente X?

2. ¿GUS MAX?

Entonces volví al dos, y jugué un poco con el programa iwinit, miré lo que el programa decía cuando usaba el modo verbose y vi algo como CODEC dirección 32c ...

¿Qué? ¿La GUS PnP tiene un Codec CS4231/CS1848 como la GUS MAX?

Entonces miré en mis cintas de backup buscando los drivers de Gravis viejos, tomé el ultrinit 2.31 de ellos y tecleé:

set ultrasnd=220,6,5,5,5
set ultra16=32c,0,0,1,0
set ultradir=c:\ultrapnp
ultrinit

y descubrí que: ¡¡¡ Ultrasound MAX detectada !!!

¡Genial!, pensé entonces, sólo tengo que poner esto antes de cargar Linux y tendré soporte GUS MAX, y ¡¡finalmente conseguiré que el j****o Quake funcione con sonido!!

No fue tan fácil 8(

3. Investigación del Driver

No soy un buen programador, pero se suficiente C para observar los fuentes de un driver y ver qué pasa (especialmente cuando está bien comentado).

Miré el fichero gus_card.c, pero no encontré nada interesante. Entonces miré en gus_wave.c, y ví esto:

  * Value 255 means pre-3.7 which don't have mixer.
  * Values 5 thru 9 mean v3.7 which has a ICS2101 mixer.
  * 10 and above is GUS MAX which has the CS4231 codec/mixer.

que significa:

  * el Valor 255 se refiere a pre-3.7 la cual no tiene mixer.
  * los Valores 5 a 9 se refiere a v3.7 los cuales tienen un mixer ICS2101.
  * 10 y superior es GUS MAX la cual tiene el codec/mixer CS4231.

¡Genial!, solo tengo que forzar el valor a 10, y funcionará ... ¡No!

haciendo esto haría que el kernel pensase que se tiene una GUS MAX, pero ¡no reconocerá el chip Codec!

Por lo que tenía que forzar la detección del Codec también ...

No fue tan fácil encontrar qué hacer, pero finalmente descubrí una posisbilidad: En el fichero gus_wave.c, había una línea:

if (ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp))

lo que significaba que el kernel estaba intentando auto-detectar el chip AD1848, pensé que no lo podría detectar con la GUS PnP, y ¡estaba en lo cierto! Simplemente cambié la línea a:

if (!(ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)))

recompilé el kernel, y ¡¡¡hey, Quake funcionó de maravilla!!!

Por cierto hay una etiqueta gus_pnp_flag en gus_card.c, pero no he notado ninguna diferencia con ella activada o desactivada 8( (quizás hice algo mal)

4. ¿Qué debería hacer exactamente?

No olvidar que esto no funcionaría si no hay RAM en la GUS ...

Primero de todo no usar LILO nunca más, ya que es necesario inicializar la GUS PnP antes de ejecutar Linux ... (hacer un fdisk /mbr bajo dos, ver otros COMOs para más detalles en esto).

En el autoexec.bat, poner:

set interwave=c:\ultrapnp\iw.ini
c:\ultrapnp\iwinit
set ultrasnd=220,6,5,5,5 (o cualquiera que se quiera o necesite)
set ultra16=32c,0,0,1,0
set ultradir=c:\ultrapnp
c:\ultrapnp\ultrinit

Se puede encontrar ultrinit en el fichero gus00045.zip, en cualquier site de Gravis ...

Bajo Linux, abrir el fichero gus_wave.c, en /usr/src/linux/drivers/sound (o en cualquier otro sitio). Buscar la línea:

if (val == 255 || val < 5) (line 3049 in 3.5b7)

y una línea antes, añadir:

val=10;

Entonces buscar la línea:

if (ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)) (line 3085)

y cambiarla a:

if (!(ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)))

recompilar el kernel con soporte de GUS y GUS MAX.
Mi configuración es:

BASE = 220
IRQ = 5
DMA1 = 6
DMA2 = 5
DMABUF = 65536

¡¡¡Disfruta del sonido!!!

5. Créditos

Yo usé el kernel 1.3.75 para modificar, pero debería funcionar en cualquier 1.3.70 y superior (por favor escribirme si hay algún problema)

Este mini-COMO esta escrito por:

Se puede conseguir la última versión de este documento de mi página WEB en
http://diva.univ-mlv.fr/~mammet/linux.html (pronto disponible)

No asumo ninguna responsabilidad si se pierden informaciones o cualquier error que pudiese ocurrir (incluso fastidiar win95).

Si se encuentra algún error tipográfico (o incluso errores técnicos 8-p), escribirme libremente, soy sólo un pobre francés perdido en un mundo anglosajón, intentando hablar el idioma de forma comprensible.

6. Anexo: El INSFLUG

El INSFLUG forma parte del grupo internacional Linux Documentation Project, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés.

En el INSFLUG se orienta preferentemente a la traducción de documentos breves, como los COMOs y PUFs (Preguntas de Uso Frecuente, las FAQs. :) ), etc.

Diríjase a la sede del INSFLUG para más información al respecto.

En la sede del INSFLUG encontrará siempre las últimas versiones de las traducciones: www.insflug.org. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica.

Se proporciona también una lista de los servidores réplica (mirror) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano.

Francisco José Montilla, pacopepe@insflug.org.