lunes, 7 de junio de 2010

News: Tarjetas Voodoo3 funcionando.

 

884Ex550y1000 Una de las ventajas de ReactOS frente a otras combinaciones como Wine+Linux es la “compatibilidad” de ReactOS con los drivers diseñados para Windows.

Sin embargo, los drivers de las tarjetas Voodoo 3 provocaban un Assert en la última parte de la instalación de ReactOS. Este problema no estaba limitado únicamente a estas tarjetas,por lo que la compatibilidad con tarjetas de video ha pegado un interesante salto adelante.

Si quieres saber qué es un Assert, qué problema estábamos teniendo y cuando ha sido solucionado….sigue leyendo…

¿Qué es un Assert?

 

Un Assert es una comprobación de seguridad.

En un código tan complejo como es el de un Sistema Operativo es casi imprescindible la existencia de Asserts. Vamos a poner un ejemplo para ver el “potencial” de los Asserts:

 

Supongamos que tenemos dos funciones, la Función A y la Función B.

 

La Función A calcula un número que va a ser utilizado por la Función B. Una particularidad de la Función A es que siempre el resultado de la Función A va a ser un número positivo.

 

La Función B usa este número positivo para realizar otra serie de operaciones y se lo pasa a otras Funciones. Todo correcto.

 

Imaginémonos que cometemos un pequeño fallo al crear la Función A, resultando que algunas veces devuelve números positivos, pero otras veces su resultado es un número negativo o cero.

La función B cogerá el valor que le ha calculado A y operará con él como si fuera SIEMPRE un número positivo. Si el cálculo de A era un número positivo, entonces el resultado de B es correcto. Pero si el cálculo de A era negativo, entonces lo que devuelva B es totalmente erróneo, y lo que es peor, este error se pasará a las funciones siguientes que hagan uso de este valor.

Si tenemos mas de 50 funciones encadenadas que usan este valor, ¿cómo sabemos quién provocó el error?Podría llevarnos bastantes horas de debuggeo.

Para eso están los Asserts.

 

 

¿Cómo usamos los Asserts en este caso?

 

Sabemos que la Función A SIEMPRE debería calcular un número positivo. Entonces en la Función B lo primero que hacemos es comprobar que EFECTIVAMENTE lo que nos ha devuelto A es un número positivo.

Algo tan fácil como preguntar: ¿ ES_LO_QUE_HA_DEVUELTO_A > 0?

En caso de que A no haya devuelto un número positivo, entonces obligamos a que se detenga la ejecución del código ( ¿para qué vamos a seguir si sabemos que todo lo que venga después es erróneo? ) .

El Assert es exactamente la línea de comprobación:

¿ES_LO_QUE_HA_DEVUELTO_A > 0?

De esta manera podemos localizar rápidamente dónde está el fallo (pues el resto de código no es ejecutado)

 

Videoprt ASSERT al instalar los drivers de la Voodoo3

 

Al intentar instalar los drivers de la Voodoo 3 y al arrancar ReactOS de nuevo, ReactOS “golpeaba” contra un Assert. Algo había funcionado incorrectamente y,llegados a cierto punto de comprobación, no se obtenía lo esperado.

La comprobación era la siguiente:

'FullList->InterfaceType == PCIBus && FullList->BusNumber ==
DeviceExtension->SystemIoBusNumber && 1 ==
FullList->PartialResourceList.Version && 1 ==
FullList->PartialResourceList.Revision'

Al no cumplirse estos requisitos, ReactOS evitaba continuar la ejecución de código.

 

 

Resuelto en 47068

 

Aicom ha resuelto este Bug en la revisión 47068.

Así pues, la versión 0.3.12 de ReactOS será capaz de cargar drivers de las tarjetas Voodoo 3 y de ,seguramente, otras tarjetas que presenten el mismo bug.

El problema era que no guardábamos correctamente el número del Bus en la la lista de recursos.

Bug - - ;

Compatibilidad ++;

5 comentarios:

  1. Lo que estoy aprendiendo con vosotros. Gracias.

    ResponderEliminar
  2. Genial, ya podre adquirir una VooDoo3 y asi armarme una pc compatible con ReactOS jijiji

    ResponderEliminar
  3. joer esto ya forma parte de las sorpresas que nos iban a esperar.

    Si que es un logro si alguien comprueba que alguna mas funcione , que lo postee.

    ResponderEliminar
  4. :D , espero con ansias el día en que ReactOS cargue los drivers de ati y nvidia.

    ResponderEliminar