Daedalus:Emulador N64 (#2)

1, 2, 3, 4, 5, 611
e entendido ke an ampliado un 20% mas las velocidad al r6 i ke entre esta semana i la proxima saldra la release
tambien ke el mario tiene un fallo al entrar al castillomi ke lo tiene ka arreglar...
a eguir esperando... [chulito]
Ya a arreglado el bug,mas o menos dice que la velocidad a aumentado entre un 20-25% sobre la velocidad anterior,pero lo mejor de todo que aun le quedan muchas cosas en mente para optimizar antes de la r7 por lo que confia en que aun aumentara ams antes de la r7 :D !!
Parece que ya queda menos para que podamos jugar a la N64 en condiciones en nuestras 'negritas' o 'blanquitas'.
AHHHHh!!!! [mad] Donde esta esa R7 joer si que tarda no? se la estara currando mucho digo yo haber con quenos sorprende [666]
More R7 Optimisations

It's been a while since my last post, but I've still been hard at work with various optimisations for Daedalus R7.

Although my main focus is on improving the dynamic recompiler, I've been looking at optimising a couple of other areas that I noticed were fairly expensive. The texture cache is one of the areas that I spent time tuning this week. This cache is used to avoid converting textures from the native n64 formats to psp formats every frame. I made a couple of fixes to improve the hashing function which gives much faster lookups in certain situations (such as tiled backdrops). I also provided an option to change the frequency at which the texture cache checks for updates to the textures. Many roms look fine when this check is entirely disabled, and this can give quite a nice speed boost.

My main focus has continued to be on the dynamic recompiler. I've made a couple more bugfixes in this area. One bugfix involved detecting when roms were using self-modifying code. The fix involved dumping the contents of the dynarec cache so that the code is correctly regenerated for the updated instructions. This fix solves a couple of issues I was seeing with Quest64, and I'm sure it will help improve compatibility with a number of other roms too.

The other dynarec issue I fixed was related to the way I was handling certain types of branch instructions. The MIPS processor has a set of 'branch likely' instructions which work slightly differently to regular branches and so I handle them separately in the dynamic recompiler. It turned out that I had forgotten to link together code fragments when they exited through a branch likely instruction. This fix gives a nice little speedup.

The biggest bit of new development I've been doing on the dynarec is on optimising for various situations where I can determine the contents of a given register at the time I'm compiling the code. As an example, many roms use the following sequence to load an integer value from memory at a specific address:


LUI $t0, 0x8033 // Load Upper Immediate - i.e. load t0 with 0x80330000
LW $t0, 0x1234($t0) // Load Word - i.e. load t0 with the value at 0x80331234


Previously I'd generate code for both of these instructions on the PSP. The LUI instruction is easy (if t0 is cached on the PSP then this is just one instruction). The LW is a lot more tricky. I have to call a function to convert the address on the n64 (0x80331234 in this case) to the address in the emulated memory on the PSP. Then I have to read from that address, or trigger an exception in the emulator if the memory address is invalid.

With the changes I've just made, when I encounter the LUI instruction (or other instructions involving loading constant values into registers) I keep track of the fact that I've loaded t0 with 0x80330000. When I come to process the LW instruction, I can now determine that the desired address is 0x80331234. I can then map that address directly to the required location on the PSP, avoiding a function call in the generated code. By avoiding the function call I no longer need to flush cached registers back out to memory. Also, because I can tell in advance that the address lies in RAM (and isn't referencing a hardware register for instance) then I can also omit the code testing for an exception. Finally, in situations like the example above, I can don't need to generate any code for the initial LUI (as the register is immediately overwritten with the loaded value.)

In summary this is a very nice optimisation - it generates fewer instructions (reducing the size of the dynarec code), it avoids unnecessarily flushing out cached registers, it avoids generating exception handling code, and it can eliminate redundant instructions (the initial LUI). In the best case, for 2 source instructions it will generate just 3 output instructions, compared to 12-13 for the unoptimised case.

Unfortunately this approach only works with load and store instructions where the address can be determined in advance, but from the roms I've examined so far around 10-15% of the load/store instructions can be optimised in this way, which is enough to give a measurable benefit.

I'm going to spend the rest of this week seeing which other parts of the dynarec engine can benefit from similar approaches. I have a couple of other features to implement (configurable controllers etc), if that all goes to plan I'll try and prepare R7 for a release next weekend.

-StrmnNrmn
Una traduccion plis???
En resumen que la R7 carga mucho mas rapido. Pero solo carga.
pablobueu escribió:Una traduccion plis???


Hombre no es plan de hacer una traduccion sobre eso,mas que nada porque son cosas tecnicas,pero asi ams o menos que me acuerde(lo lei anoche) dice que a mejorado problemas de acceso a cache,que a eliminado acesos a la ram para leer del recompilador dinamico,lo que acelera el proceso y da mas velocidad
No se,en general,que a optimizado muchas cosas,sobretodo el recompilador(ahora ocupa menos en ram) y que a aumentado aun ams la velocidad,pero esta vez no dice cuanto..
ahh si,y que espera poder sacarlo el finde de la semana que viene la r7
cada día veo más verosimil este emulador, el tipet le pilla mucho!
a este paso tenemos emulador totalmente optimizado para un par de meses [babas] [babas]

salu2
no consigo compreender una cosa los tios ke se crean los emus porque lo hacen tan lento las cosas?

en vez de ke tengan el mismo trabajo 10 ezes sacando 10 versiones del emu una version mas mejorada ke la anterior porque no se pierden el tiempo de essas 10 vezes en una sola y se crean un emulador total funcionando al 100%????
diabo69 escribió:no consigo compreender una cosa los tios ke se crean los emus porque lo hacen tan lento las cosas?

en vez de ke tengan el mismo trabajo 10 ezes sacando 10 versiones del emu una version mas mejorada ke la anterior porque no se pierden el tiempo de essas 10 vezes en una sola y se crean un emulador total funcionando al 100%????


Porque no es esa la forma de trabajar.
Primero haces una versión, y resulta que funciona muy lento. Pues una vez tienes el código hecho, es hora de sacar la primera beta, para detectar errores, ir corrigiéndolos en posteriores versiones, e ir mejorando poco a poco la velocidad optimizando el código...

Un saludo, y una pinta cojonuda le veo a esto.
Me supongo que es para que los propios usuarios de la Scene den sus opiniones de cómo va avanzando la cosa.


Además, tened en cuenta que los programadores de emuladores harán ésto en su tiempo libre. Nadie vive de la scene de PSP...

Y de todas formas nunca se sabe con certeza si se conseguirá un emulador al 100%. Ésto no es cosa de ir escribiendo código y código sin más durante meses, sino de hacerlo bien y ahí está la habilidad del programador y las posibilidades de la consola.


Si fuese por escribir código "optimizador" ya tendríamos emuladores de x360...


Por cierto que, respecto al texto, me ha resultado curioso lo del "texture cache", para evitar convertir en cada frame las texturas...incluso podrían guardarse (creo yo) en la memory stick y cargarlas en memoria en el momento de cargar cada rom. Así podríamos tener un pack de texturas para cada juego y así el emulador se evita el tener que convertirlas en cada frame. Vamos, es una idea, no sé si las texturas ya convertidas junto con el emu y el rom entrarían en la RAM de la PSP, pero bueno...

Si alguien sabe inglés, puede darle la idea al autor.


Y por último, creo que aún le queda implementar el frameskip, algo básico en los emuladores, ya que 11-12fps serían "jugables" en el Mario64 sino fuese porque el juego va extremadamente lento.
Bueno chicos, se supone que hoy, mas tardar mañana lanzará la R7....pspupdates y f5 ahora mismo mis 2 mejores amigos.
no sería mejor que mirases el foro de strmn... como siga... xD el diseñador??
en unas horas estara ratataaaa jeje que ilusion hasta las 11 y media o mas no creo que este pero weno mientras sea hoy [amor]
En cuanto lo suba actualizare todo el post principal(ya era hora XD) que porfin tengo algo de tiempo libre
Aver con que nos sorprende esta version
segune leido acaba de poner en custon los controles para ke pongamos las teclas ke nos salgan del culo tambien... :-P

amos mejorara 3 o 4 frames no mas pero algo es algo...

amos i espero ke no nos joda la inestabilidad [buaaj]
Sobre frames no a dicho nada,la ultima noticia es que habia mejorado sobre un 30-32% creo al velocidad,pero de eso hace mas de una semana y a exo ams avances asi que esperaremos,creo que comento que mario dentro del castiillo cojia algo asi como 20fps....y que mario kart llegaba a los 13 fps
joder el mario a 20fps si le pones un frameskip 2 va casi a full speed, ojala implemente el fremeskip en las opciones... ^^
spudev escribió:joder el mario a 20fps si le pones un frameskip 2 va casi a full speed, ojala implemente el fremeskip en las opciones... ^^


Dentro del castillo ehh :P Va por zonas,supongo que en zonas mas amplias como el bosque antes del castillo ira a 15 fps...pero son suposiciones...en un rato lo sabremos

PD:Os dejo el link al proyecto en sourceforge,a lo mejor sale antes ahi que en su pagina ;)

http://sourceforge.net/project/showfiles.php?group_id=57977

Ya esta la r7 en sourceforge!!!A Probarla cabronas que yo me tengo que ir a cenar :(

Cuando vuelva actualizo XD
yo lo estoy probando con el mario y.. dentro del castillo va a unos 12 +o- y en la habitacion del cuadro de la bomba va a 17 en la pantallita de la estrella va a 37,8 ^^ y dentro de la pantalla de las bombas va a 7-8
esto va por buen camino ^^
B@rty escribió:yo lo estoy probando con el mario y.. dentro del castillo va a unos 12 +o- y en la habitacion del cuadro de la bomba va a 17 en la pantallita de la estrella va a 37,8 ^^ y dentro de la pantalla de las bombas va a 7-8
esto va por buen camino ^^

Vaya, m esperaba un pokillo mas [reojillo]
todavia queda camino por recorrer,pero esto va pa lante
todabia no lo he probado pero por lo que leo no cumple las espectativas que habia creado la r7... animo al creador y
Bueno yo es lo q me esperaba ya que es un 20% en la mejora

Si hubiera sido del 100% hubiera doblado la velocidad... de ahi que cada uno se heche sus cuentas no falla, jeje

Un saludo!!

EDITO: ya tengo la primera estrellaaaa!!!, jajajaja
Retiro lo dixo, despues d pobarlo puedo asegurar q s nota bastante la diferencia. Y eso q todavia no he probado a quitarle calidad a los graficos
Salu2
Buenas BlackSith, a ver si nos puedes decir como tocas las opciones...

Merci!

EDITO: he tocado las opciones y si desactivas una opcion y tocas otra cosa aumenta bastante la velocidad pero tambien aumenta el numero de fallos graficos del juego

Entre 10 y 13 fps en la primera fase del Super Mario, un poco mas de fluidez y se podria jugar "bien"
BlackSith me puedes decir que opciones tocas y como las tocas? xDD
Esque no se como se configuran las opciones en este emulador..


Saludos!!
Probando Zelda OOT, Earth Worm Jim 3D y Aerofighters Assault

Ahora os cuen xD
En Settings desactivo la opcion de Tesselate large tris ( esto proboca fallos de graficos, algo del renderizado de los triangulos)y la otra opcion que toco es cuando seleccionas una ROM, donde pone Texture Update Check le pongo Every 30 frames ( asi que cada 30 frames hara correcion de texturas o sino en desactivado)
por cierto una vez ejecutandose un juego como vulvo a la seleccion de rom???
alguien lo puede colgar no me lo deja bajar del enlace
Ya salio entonces la r7?
Donde la puedo conceguir?
Gracias.
Saludos
en la pagina 18 de este hilo tienes el enlace para descargarlo
Saludos
methodmann escribió:en la pagina 18 de este hilo tienes el enlace para descargarlo
Saludos
Joder, pues vamos por la 7 xD, anda que no tiene que esperar nada

En DCEmu lo tienes
a mi me sale que voy por la 19
gelon escribió:Joder, pues vamos por la 7 xD, anda que no tiene que esperar nada

En DCEmu lo tienes


Se refiere a la pagina 18 de este post xD
23JoseJuan2 escribió:
Se refiere a la pagina 18 de este post XD


De que post, este, llamado Daedalus:Emulador N64 (#2) tiene 7 paginas, como va a ir por la 18 ...

A no ser que mi Firefox vaya mal, vamos, no se

http://www.youtube.com/watch?v=OlzfHCO6C4w

Un video mio de EarthwormJim 3D, 24 fps al final, genial

PD: Lo dicho, es mi firefox, que salió a fumarse la vida, como diría melendi

Imagen
pues en internet explorer vamos por la 19.

Será que a ti te salen mas mensages del post por página.

Edito: es más al escribir este mensage hago la página 20
todavia no lo veo demasiado jugable...muy lento de momento...
deveremos esperar al daedalus r8 para ver como avanzan... :-|

pero de todas maneras seguir asi que vais por buen camino..[oki]


un saludo... [bye]
Ya va genial es mas el super mario sin mover nada de las opciones ya es bastante jugable
paco herte el c escribió:Ya va genial es mas el super mario sin mover nada de las opciones ya es bastante jugable



que configuracion usas?la podrias postear para probar?
por que a mi de los 15 frames no me pasa.... [agggtt]

un saludo... [bye]
ya sta la R/ en pspupdates korred!
elcoyotex

No muevo nada de la configuracion y a mi parecer pues ya es jugable.
Por si te sirve uso la vercion .v64 us¡ y el emu lo tengo sin exploit para la ver 1.0 por el firm de dark alex
paco herte el c:

ok,gracias de todos modos...
seguire provando...


un saludo... [bye]
Que gran avance!, en el cuarto donde esta la pintura de la bomba, me va de 20-23 fps!!!. Claro deshabilité la opción de los gráficos.

Salu2
Mario cart 16-18 fps!!!!
es jugable.Ahora un gran porcentaje d elos juegos son medio jugables, como el gex,el earth jim, o el mario cart
esto pinta bien.... esperemos a la r8 !
501 respuestas
1, 2, 3, 4, 5, 611