Bueno, ya lo he comentado en otros foros y creo que no estara de menos comentarlo aqui. a ver si hay algun manitas o mejor dicho entendido en electronica.
Problema planteado:
Las tarjetas SD en Gamecube (mediante adaptador SD a puerto de memoria, el que sea) no pueden ser accedidas mediante DMA por culpa de una cualidad del bus de la GC. Esta cualidad es la misma que permitio dumpear la IPL original de la GC desencriptada, los datos leidos o enviados en el bus se reescriben en un registro del bus.
Esta circunstancia hace que al acceder a las tarjetas SD los datos leidos se sobreescriban en dicho registro y esten disponibles en el bus de modo que el controlador de la tarjeta SD puede leerlos y si encuentra un 0 en su linea de entrada interpretar que se trata de un comando (cuando en realidad es el dato que se ha leido de ella anteriormente).
Para evitar esta circusntancia se utiliza la SD en modo de acceso directo y cada vez que se lee un dato de ella se sobreescribe dicho registro con un dato que son todos 1 -> 0xFFFFFFFF (y por lo tanto no puede ser interpretado por el controlador de la SD como un comando).
Pero si intentamos acceder a la tarjeta SD en modo DMA (para obtener un rendimiento decente y optimo que nos permita ver peliculas, cargar roms de emuladores o guardar savestates sin problemas de parones) encontramos el problema que nos aguarda. El modo DMA se caracteriza por la lectura o escritura de varios datos sin el control directo de la CPU, quedando esta libre para realizar otras tareas, y al no tener control sobre la transferencia no es posible escribir ese dato 0xFFFFFFFF que hace que la SD lea comandos erroneos y por lo tanto se producen errores y cuelgues.
Solucion que propongo:
Primero, dire que puede que no sea posible, ya que no soy ningun experto en electronica, algo se, pero no soy ningun maquina.
Lo que propongo es una modificacion en el adaptador de tarjetas SD a puerto de memoria, SD-Gecko por poner un ejemplo.
¿Seria posible modificar el SD-Gecko añadiendole la circuiteria necesaria para filtrar la interfaz del controlador de la SD? ¿Que circuiteria seria necesaria?
Lo que deberia hacer esa circuiteria es evitar la lectura de 0s en la linea de comando despues de cada ciclo de lectura en la SD. Por lo tanto, poner un 1 en la linea correspondiente cada vez que fuera necesario. Pero deberia asegurarse de no escribir nada mas alla de los ciclos de lectura de la SD, para permitir la entrada de comandos al controlador de la SD.
Habria que estudiar mas a fondo el funcionamiento de cada pin y la señal en cada momento, pero puede que esta circuiteria no sea muy compleja.
Venga, a ver si algun manitas puede colaborar y entre eso y un apaño en el driver de linux obtenemos un sistema de almacenamiento como dios manda