Bueno, me tarde un poco mas de lo que pensaba...
Hola a todos, quisiera empezar por el Doom de Snes, desde que Randy Linden (el programador del juego) libero el codigo fuente del juego, me di a la tarea de leerlo con al menos dos cosas en mente, bueno en realidad tres: curiosidad, ver o ayudar a mejorar el rendimiento del juego, y la posibilidad de un port a Md/Genesis.
Gracias a este source (bueno tambien por otro source "librado", el del starfox) comencé por aprender sobre el chip fx, en realidad no fue tan dificil, una vez que aprendes a programar un cpu es mucho mas facil aprender otro, aunque sea muy diferente.
Algunos datos del sfx: 16 registros de 16 bits, r0 a r15, todos menos el registro r15 que es el PC (contador de programa), se pueden usar como registros de uso general, algunos de ellos se usan en instrucciones especificas por ejemplo la intruccion PLOT usa los reg. r1 y r2, las intrucciones de multiplicacion como fmult y lmult usan r4 y r6, etc.
Tambien hay otros registros especificos, por ejemplo como el PC es de 16 bits(esto significa que solo puede direcionar 64KB) hay un registro llamado RomB para seleccionar uno de los "bancos" de 64KB.
El sfx tiene una cache de 512 bytes que es una memoria rapida y que solamente cuando el codigo se ejecuta en esta ram es que se ejecuta mas rapido, es decir cuando una instruccion se dice que se ejecuta en un ciclo solo es posible en esta memoria cache, en este momento no recuerdo bien pero creo que es de 3 ciclos cuando lo hace en la Ram/Rom del juego.
Por lo que he visto del source de Doom, todas las rutinas importantes que requieren que se ejecuten rapido como el render/dibujado de las texturas de las paredes, de los sprites (objetos, enemigos...), rutinas de BSP, etc, se ejecutan en la cache.
Este juego pudo haber funcionado mas rapido, pero hay varias causas que lo impiden, una es la limitante de 2MB de la rom, otra es el uso del modo 3 que es un modo de 256 colores, con una resolucion de 216 x 144(en el area vision)que en realidad es de 108 x 144 porque cada 2 pixeles en X es el mismo, "gracias" a esto se duplico la cantidad de memoria que en realidad se necesitaria y por esto se necesita mas tiempo para actualizar un nuevo frame, limitando el framerate a un maximo de 20fps por mas que se mejore el engine.
Sobre la limitante de los 2MB de la rom: al principio no entendia muy bien el codigo de render/dibujado de las texturas de paredes, despues de un tiempo y al leer otras partes del source entendi que estaban comprimidas las texturas con un tipo de RLE, y es que no habia otra forma ya que aun asi solo para las texturas y sprites del juego(que estan comprimidas) ya se ocupan casi la mitad del juego (unos 900KB) y casi la otra mitad de la rom estan en los niveles

. Aunque la rutina de descomprimir RLE son "rapidas" aun asi hubiera sido mucho mas rapido si no estuviera comprimido.
Al haber usado el modo 3 que es un modo con 8 bitplanes (256 colores) el uso de la instruccion PLOT se hace necesaria, pero para este caso no es muy eficiente, lo que tengo entendido sobre el PLOT es que primero esta intruccion dependiendo del modo de color (2bit, 4bit o 8bit)se ejecutara en unos 40 ciclos por pixel en el peor de los casos(en algunos sitios he visto que hablan de 80?), ahora cuando se dibuja en el mismo espacio de un area de 8x1 pixels, es decir en X de 0 a 7, 8 a15, 16 a 31...,etc y en la misma linea Y, la ejecucion del PLOT sera mucho mas rapida(creo que 1 ciclo), por ejemplo un PLOT que dibuja un pixel a X=9 y Y=20 y luego el siguiente PLOT para dibujar otro pixel esta en X=10 y Y=20, este segundo PLOT se ejecutara mucho mas rapido, pero el problema es que en Doom los pixeles se dibujan en columnas(es decir de arriba hacia abajo) y cuando ya vas a dibujar en la siguente columna ya no sera tan rapido, porque no estara en el mismo espacio de 8x1.
Si se hubiese usado el modo 7 seria mucho mejor, pero seria necesario una pequeña reduccion en la resolucion (unos 108x136), ademas si el sfx permitiera mas de 2MB en rom.
Quizas lo que vaya a decir ahora pueda causar polemica, pero hacer un port de este engine a MD/genesis sin chip no es tan descabellado, si se hace bien optimizado y ademas por no ser necesario comprimir ya que no estaria iimitado a 2MB, quizas funcionaria algo similar al actual de snes aunque con una resolucion menor, y obviamente tambien seria necesario una ram extra en el cartucho.
Como han dicho otros, los procesadores RISC como el sfx, las instrucciones son mas simples comparandolo con procesadores CISC, y generalmente se necesitan mas instrucciones para hacer lo mismo, por eso no es "justo" hacer comparaciones de MIPS entre 2 tipos diferentes de procesadores.
Tambien hay otros codigos fuentes diponibles de Doom, pero hay uno que por lo menos a mi me parece que es mas interesante y que se podria portar mas facil es uno de GBA que se viene haciendo mas recientemente.
Sobre el SVP, como dije antes aun no conozco lo suficiente sobre este chip, pero en teoria deberia ser mas eficiente que el sfx, y ademas que este chip solo se haya usado en un juego poligonal no significa no puede hacer otras cosas, es solo otro cpu mas como el sfx y ambos se pueden programar lo que uno quiere que haga.
Señor Ventura escribió:Este es un terreno farragoso. Snes tiene todas las ventajas aquí.
Cuando necesitas exceder 64KB, una memoria mas lenta con el doble de capacidad siempre va a ser mejor opción, por los siguentes motivos:
-No puedes tirar de ancho de banda para borrar/escribir mas veces un dato para compensar una memoria de menor capacidad.
-La velocidad de la ram de megadrive se va a tener que adaptar si o si a los 1,92mhz del bus del DMA, así que de nada sirven sus 5mhz y pico.
-La ram de la snes es lo suficientemente rápida teniendo en cuenta que encaja perfectamente con la velocidad de su bus: no hay cuellos de botella (las quejas con la ram de la snes se deben a que si fuese a 3,58mhz, el DMA podría ser también a 3,58mhz, no que existan cuellos de botella con respecto al DMA, porque no los tiene).
? De donde sacas eso de los 1.92mhz ? La Ram no esta "limitada" a 1.92mhz, y que tiene que ver el DMA aqui?
La ram de snes si esta limitada a 2.68mhz, esto quiere decir que aunque se usen fastrom (3.58mhz) acceder a la ram y/o ejecutar codigo en ram siempre sera a 2.68mhz.
Una pregunta, Ventura porque insistes tanto en las multiplicaciones del ppu? de verdad sabes como funciona?, es decir, eso siempre ha estado ahi, y por lo que te leo a veces me parece que tienes una idea errada de lo que es.
Bueno ya lo dejo hasta aqui, si me falto algo, o recuerdo algo mas que queria decir, vuelvo a escribir por aqui en uno o dos dias quizas.
Ah se me olvidaba, en unos dias quizas muestre algo (videos o imagenes) del nuevo engine de starfox de MD/Genesis.
Saludos.