https://emulation.gametechwiki.com/api.php?action=feedcontributions&user=173.206.33.127&feedformat=atomEmulation General Wiki - User contributions [en]2024-03-28T13:22:06ZUser contributionsMediaWiki 1.32.0https://emulation.gametechwiki.com/index.php?title=ROM_hacking_resources&diff=5753ROM hacking resources2014-03-29T12:56:36Z<p>173.206.33.127: /* Final Fantasy III (VI) */</p>
<hr />
<div><br />
==General Resources==<br />
<br />
*[http://romhacking.net ROMHacking.net] - This is like a hub where the various hacking communities meet. It hosts a large variety of major ROM hacks and translations. Also hosts numerous FAQs and tools to help aspiring hackers get started.<br />
*[http://datacrystal.romhacking.net/ Data Crystal] - A wiki hosted by ROMHacking.net. While it is a bit outdated at this point, it is still a good resource for information about different editors and links to a handful of prominent hacks.<br />
*[http://fusoya.eludevisibility.org/ FuSoYa's Niche] - Site of the creator of the popular Super Mario World editor, Lunar Magic. Also hosts a set of tools for ROM expansion, patching, compression, etc.<br />
*[http://www.zophar.net Zophar's Domain] - A site that hosts lots of smaller patches, such as spoofs, as well as a significant amount of major ones. Hosts a lot of content that can't be found on ROMHacking.net<br />
==Programs==<br />
===General purpose 2D graphics/tile editor===<br />
<br />
[http://www.romhacking.net/utilities/109/ Tile Molester]. Works with Java, practically can edit any game.<br />
<br />
===<br />Hex Editor===<br />
<br />
[http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32] or [http://www.romhacking.net/utilities/219/ Translhextion]. You can edit the bytes of the ROMs, i.e. everything. Some values are obvious and some text is already ASCII.<br />
<br />
==Game Specific==<br />
===Super Mario World===<br />
[[File:MainLunarMagic-1-.png|thumb]]<br />
*[http://www.smwcentral.net Super Mario World Central] - The largest site dedicated to SMW hacking. Hosts hundreds of hacks and is a resource for SMW hacking utilities and knowledge. Also has a very active community and forums.<br />
*[http://www7.atpages.jp/smw/view.cgi X-Mario] - Prominent Japanese site that hosts a variety of hacks. Worth noting is that Japanese hacks are usually more reliant on creating challenging gameplay and are less flashy or graphically modified than their Western cousins.<br />
*[http://talkhaus.raocow.com/ Raocow's Talkhaus] - The community for the most prominent let's player in SMW hacking. Whether or not you enjoy his commentary, this site remains a great resource for discovering hacks, as the community here is generally focused on hacks that the SMW Central community doesn't cover.<br />
*[http://www18.atwiki.jp/sm4wiki_mix/ VIP Wiki] - Japanese wiki dedicated to the development of 2channel's series of popular hacks, the VIP & Wall Mix series. Hosts the 5 current installments and news about the sixth, currently a work in progress.<br />
<br />
===Super Metroid===<br />
[[File:Fetch-1-.png|thumb]]<br />
*[http://metroidconstruction.com Metroid Construction] - The most prominent and active Super Metroid hacking community currently. Hosts a large variety of hacks, resources, FAQs, and an active community and forum. Originated in m2k2 before becoming its own dedicated site.<br />
*[http://wiki.metroidconstruction.com/doku.php Metroid Construction Wiki] - As its name implies, a wiki created by the Metroid Construction community.<br />
*[http://www.metroid2002.com/ Metroid 2002] - The former most prominent and active Super Metroid hacking community previously. While it has since been foregone in favor of Metroid Construction, it can still be a valuable resource for knowledge about the more advanced mechanics and inner workings of Super Metroid (as well as other games in the series).<br />
===The Legend of Zelda: A Link to the Past===<br />
*[http://forum.metroidconstruction.com/index.php/board,27.0.html?PHPSESSID=c83e531bb78ed7c6a3a4de5b45756595 Zelda Construction] - Despite its huge popularity, the hacking community for ALttP is relatively small. This is mainly due to the lack of a truly good editor, though one is in the works. This community is a spin-off of Metroid Construction devoted to hacking of ALttP and other games in the series.<br />
<br />
===EarthBound===<br />
*[http://www.starmen.net Starmen.net] - Home of the hacking utility [http://starmen.net/pkhack/ PK Hack], an editor for modifying the EarthBound/Mother 2 ROM. Has an active hacking community in the PK Hack section of its forums, where links to completed hacks can also be found.<br />
===Yoshi's Island===<br />
*[http://www.smwcentral.net Super Mario World Central] - In addition to Super Mario World, smwcentral is a budding hub for Yoshi's Island hacking. While it only hosts a few complete hacks, the community is very active, and new content is being produced at a consistent pace.<br />
*[http://yihacking.wikia.com/wiki/Yoshi%27s_Island YI Hacking Wiki] - A knowledge base for Yoshi's Island hacking.<br />
===Final Fantasy VI===<br />
*[http://www.ff6hacking.com/forums/portal.php FF6 Hacking] - Home to a large community of Final Fantasy VI hackers, complete with active forums, links to patches, and FAQs and guides for those looking to get into hacking the game.<br />
<br />
===Final Fantasy Tactics===<br />
*[http://ffhacktics.com/ Final Fantasy Hacktics] - Community for FFT hacking with a variety of completed hacks, patches, and resources.<br />
===Fire Emblem===<br />
*[http://www.feshrine.net/hacks.html Fire Emblem Shrine] - An active and prominent Fire Emblem hacking community. Hosts a variety of completed hacks and FAQs to get you started.<br />
*[http://serenesforest.net/forums/index.php?showforum=8 Serenes Forest] - Another active and prominent Fire Emblem hacking community, though perhaps a bit more active than Fire Emblem Shrine.<br />
===Pokémon===<br />
*[http://www.pokecommunity.com/forumdisplay.php?f=37 The PokéCommunity] - Very active (and helpful) Pokémon hacking community.<br />
===Sonic the Hedgehog===<br />
*[http://info.sonicretro.org/Sonic_hacks Sonic Retro] - The largest resource for hacks and modifications of the Sonic series (primarily focused on the Genesis games).<br />
<br />
==Downloads==<br />
[https://mega.co.nz/#F!R8RCnZZY!Zxyqoynu9GVWIwFHCISK2Q!og53jJJL ROM Hacks]</div>173.206.33.127https://emulation.gametechwiki.com/index.php?title=Dynamic_recompilation&diff=5751Dynamic recompilation2014-03-29T05:59:53Z<p>173.206.33.127: </p>
<hr />
<div>'''Dynamic recompilation''' (sometimes abbreviated to '''dynarec''' or '''DRC''') is a feature of some emulators and virtual machines, where the system may recompile some part of a program ''during execution''. By compiling during execution, the system can tailor the generated code to reflect the program's run-time environment, and potentially produce more efficient code by exploiting information that is not available to a traditional static compiler.<br />
<br />
==Uses==<br />
Most dynamic recompilers are used to convert machine code between architectures at runtime. This is a task often needed in the emulation of legacy gaming platforms. In other cases, a system may employ dynamic recompilation as part of an [[adaptive optimization]] strategy to execute a portable program representation such as [[Java (programming language)|Java]] or .NET [[Common Language Runtime]] bytecodes. Full-speed debuggers also utilize dynarec to reduce the space overhead incurred in most [[deoptimization]] techniques, and other features such as dynamic [[thread migration]].<br />
<br />
==Tasks==<br />
The main tasks a dynamic recompiler has to perform are:<br />
* Reading in machine code from the source platform<br />
* Emitting machine code for the target platform<br />
<br />
A dynamic recompiler may also perform some auxiliary tasks:<br />
* Managing a cache of recompiled code<br />
* Updating of elapsed cycle counts on platforms with cycle count registers<br />
* Management of interrupt checking<br />
* Providing an interface to virtualized support hardware for example a [[GPU]]<br />
* Optimizing higher level code structures to run efficiently on the target hardware (see below)<br />
<br />
==Example==<br />
Suppose a program is being run in an emulator and needs to copy a null-terminated [[character string|string]]. The program is compiled originally for a very simple processor. This processor can only copy a [[byte]] at a time, and must do so by first reading it from the source string into a [[processor register|register]], then writing it from that register into the destination string. The original program might look something like this:<br />
<br />
<source lang=asm><br />
beginning:<br />
mov A,[first string pointer] ; Put location of first character of source string<br />
; in register A<br />
mov B,[second string pointer] ; Put location of first character of destination string<br />
; in register B<br />
loop:<br />
mov C,[A] ; Copy byte at address in register A to register C<br />
mov [B],C ; Copy byte in register C to the address in register B<br />
inc A ; Increment the address in register A to point to<br />
; the next byte<br />
inc B ; Increment the address in register B to point to<br />
; the next byte<br />
cmp C,#0 ; Compare the data we just copied to 0 (string end marker)<br />
jnz loop ; If it wasn't 0 then we have more to copy, so go back<br />
; and copy the next byte<br />
end: ; If we didn't loop then we must have finished,<br />
; so carry on with something else.</source><br />
<br />
The emulator might be running on a processor which is similar, but extremely good at copying strings, and the emulator knows it can take advantage of this.<br />
It might recognize the string copy sequence of instructions and decide to rewrite them more efficiently just before execution, to speed up the emulation.<br />
<br />
Say there is an instruction on our new processor called ''movs'', specifically designed to copy strings efficiently. Our theoretical movs instruction copies 16 bytes at a time, without having to load them into register C in between,<br />
but will stop if it copies a 0 byte (which marks the end of a string) and set the zero flag. It also knows that the addresses of the strings will be in registers A and B, so it increments A and B by 16 every time it executes, ready for the next copy.<br />
<br />
Our new recompiled code might look something like this:<br />
<br />
<source lang=asm>beginning:<br />
mov A,[first string pointer] ; Put location of first character of source string<br />
; in register A<br />
mov B,[second string pointer] ; Put location of first character of destination string<br />
; in register B<br />
loop:<br />
movs [B],[A] ; Copy 16 bytes at address in register A to address<br />
; in register B, then increment A and B by 16<br />
jnz loop ; If the zero flag isn't set then we haven't reached<br />
; the end of the string, so go back and copy some more.<br />
end: ; If we didn't loop then we must have finished,<br />
; so carry on with something else.</source><br />
<br />
There is an immediate speed benefit simply because the processor doesn't have to load so many instructions to do the same task, but also because the movs instruction is likely to be optimized by the processor designer to be more efficient than the sequence used in the first example. (For example, it may make better use of [[Parallel computing|parallel execution]] in the processor to increment A and B while it is still copying bytes).<br />
<br />
===Gaming===<br />
*[[MAME]] uses dynamic recompilation in its CPU emulators for MIPS, SuperH, PowerPC and even the Voodoo graphics processing units.<br />
*[[1964 (emulator)|1964]], a [[Nintendo 64]] emulator for x86 hardware.<br />
*Wii64, a [[Nintendo 64]] emulator for the Wii.<br />
*WiiSX, a Sony PlayStation emulator for the Nintendo Wii.<br />
*[[Mupen64Plus]], a multi-platform Nintendo 64 emulator.<ref>[http://pandorawiki.org/Mupen64plus_dynamic_recompiler Mupen64Plus]</ref><br />
*[[Yabause]], a multi-platform [[Sega Saturn|Saturn]] emulator.<ref>[http://wiki.yabause.org/index.php5?title=SH2_dynamic_recompiler SH2]</ref><br />
*The backwards compatibility functionality of the [[Xbox 360]] (i.e. running games written for the original [[Xbox (console)|Xbox]]) is widely assumed to use dynamic recompilation.<br />
*[[PPSSPP]], a [[Sony]] [[PlayStation Portable]] emulator. Recompilers for both x86 and ARM.<br />
*[[PSEmu Pro]], a [[Sony]] [[PlayStation]] emulator.<br />
*[[Ultrahle]], the first [[Nintendo 64]] emulator to fully run commercial games.<br />
*[[PCSX2]],<ref>[http://www.pcsx2.net PCSX 2]</ref> a [[Sony]] [[PlayStation 2]] emulator, has a recompiler called "microVU", the successor of "SuperVU".<br />
*[[Dolphin (emulator)|Dolphin]], a [[Nintendo GameCube]] and [[Wii]] emulator, has a dynarec option.<br />
*GCemu,<ref>[http://sourceforge.net/projects/gcemu-project GCemu]</ref> a [[Nintendo GameCube]] emulator.<br />
*[[NullDC]], a [[Sega]] [[Dreamcast]] emulator for x86.<br />
*GEM,<ref>{{cite web|url=http://gem.tni.nl/ |title=Gameboy Emulator for MSX &#124; The New Image |publisher=GEM |date= |accessdate=2014-01-12}}</ref> a [[Game Boy|Nintendo Game Boy]] emulator for [[MSX]] uses an optimizing dynamic recompiler.<br />
*[[DeSmuME]],<ref>[http://desmume.org/2013/04/30/desmume-0-9-9-released/ DeSmuME v0.9.9]</ref> a [[Nintendo DS]] emulator, has a dynarec option.<br />
*Soywiz's Psp,<ref>{{cite web|author=Publicado por Carlos Ballesteros Velasco |url=http://pspemu.soywiz.com/2013/07/release-soywizs-psp-emulator-2013-07-28.html |title=Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525) |publisher=Pspemu.soywiz.com |date=2013-07-28 |accessdate=2014-01-12}}</ref> a [[Sony]] [[PlayStation Portable]] emulator, has a dynarec option.<br />
<br />
==See also==<br />
* [[Comparison of platform virtual machines]]<br />
* [[Binary translation]]<br />
* [[Just-in-time compilation]]<br />
* [[Binary recompiler]]<br />
<br />
==References==<br />
{{Reflist|30em}}<br />
<br />
==External links==<br />
*[http://web.archive.org/web/20051018182930/www.zenogais.net/Projects/Tutorials/Dynamic+Recompiler.html Dynamic recompiler tutorial]<br />
*[http://emulatemii.com/wordpress/?tag=dynarec Blog posts about writing a MIPS to PPC dynamic recompiler]<br />
<br />
[[Category:Virtualization software]]<br />
[[Category:Compiler construction]]<br />
[[Category:Emulation software]]</div>173.206.33.127https://emulation.gametechwiki.com/index.php?title=Dynamic_recompilation&diff=5750Dynamic recompilation2014-03-29T05:58:41Z<p>173.206.33.127: </p>
<hr />
<div>'''Dynamic recompilation''' (sometimes abbreviated to '''dynarec''' or the [[pseudo-acronym]] '''DRC''') is a feature of some [[emulator]]s and [[virtual machine]]s, where the system may [[Compiler|recompile]] some part of a [[Computer program|program]] ''during execution''. By compiling during execution, the system can tailor the generated code to reflect the program's run-time environment, and potentially produce more efficient [[code]] by exploiting information that is not available to a traditional static [[compiler]].<br />
<br />
==Uses==<br />
Most dynamic recompilers are used to convert machine code between architectures at runtime. This is a task often needed in the emulation of legacy gaming platforms. In other cases, a system may employ dynamic recompilation as part of an [[adaptive optimization]] strategy to execute a portable program representation such as [[Java (programming language)|Java]] or .NET [[Common Language Runtime]] bytecodes. Full-speed debuggers also utilize dynarec to reduce the space overhead incurred in most [[deoptimization]] techniques, and other features such as dynamic [[thread migration]].<br />
<br />
==Tasks==<br />
The main tasks a dynamic recompiler has to perform are:<br />
* Reading in machine code from the source platform<br />
* Emitting machine code for the target platform<br />
<br />
A dynamic recompiler may also perform some auxiliary tasks:<br />
* Managing a cache of recompiled code<br />
* Updating of elapsed cycle counts on platforms with cycle count registers<br />
* Management of interrupt checking<br />
* Providing an interface to virtualized support hardware for example a [[GPU]]<br />
* Optimizing higher level code structures to run efficiently on the target hardware (see below)<br />
<br />
==Example==<br />
Suppose a program is being run in an emulator and needs to copy a null-terminated [[character string|string]]. The program is compiled originally for a very simple processor. This processor can only copy a [[byte]] at a time, and must do so by first reading it from the source string into a [[processor register|register]], then writing it from that register into the destination string. The original program might look something like this:<br />
<br />
<source lang=asm><br />
beginning:<br />
mov A,[first string pointer] ; Put location of first character of source string<br />
; in register A<br />
mov B,[second string pointer] ; Put location of first character of destination string<br />
; in register B<br />
loop:<br />
mov C,[A] ; Copy byte at address in register A to register C<br />
mov [B],C ; Copy byte in register C to the address in register B<br />
inc A ; Increment the address in register A to point to<br />
; the next byte<br />
inc B ; Increment the address in register B to point to<br />
; the next byte<br />
cmp C,#0 ; Compare the data we just copied to 0 (string end marker)<br />
jnz loop ; If it wasn't 0 then we have more to copy, so go back<br />
; and copy the next byte<br />
end: ; If we didn't loop then we must have finished,<br />
; so carry on with something else.</source><br />
<br />
The emulator might be running on a processor which is similar, but extremely good at copying strings, and the emulator knows it can take advantage of this.<br />
It might recognize the string copy sequence of instructions and decide to rewrite them more efficiently just before execution, to speed up the emulation.<br />
<br />
Say there is an instruction on our new processor called ''movs'', specifically designed to copy strings efficiently. Our theoretical movs instruction copies 16 bytes at a time, without having to load them into register C in between,<br />
but will stop if it copies a 0 byte (which marks the end of a string) and set the zero flag. It also knows that the addresses of the strings will be in registers A and B, so it increments A and B by 16 every time it executes, ready for the next copy.<br />
<br />
Our new recompiled code might look something like this:<br />
<br />
<source lang=asm>beginning:<br />
mov A,[first string pointer] ; Put location of first character of source string<br />
; in register A<br />
mov B,[second string pointer] ; Put location of first character of destination string<br />
; in register B<br />
loop:<br />
movs [B],[A] ; Copy 16 bytes at address in register A to address<br />
; in register B, then increment A and B by 16<br />
jnz loop ; If the zero flag isn't set then we haven't reached<br />
; the end of the string, so go back and copy some more.<br />
end: ; If we didn't loop then we must have finished,<br />
; so carry on with something else.</source><br />
<br />
There is an immediate speed benefit simply because the processor doesn't have to load so many instructions to do the same task, but also because the movs instruction is likely to be optimized by the processor designer to be more efficient than the sequence used in the first example. (For example, it may make better use of [[Parallel computing|parallel execution]] in the processor to increment A and B while it is still copying bytes).<br />
<br />
===Gaming===<br />
*[[MAME]] uses dynamic recompilation in its CPU emulators for MIPS, SuperH, PowerPC and even the Voodoo graphics processing units.<br />
*[[1964 (emulator)|1964]], a [[Nintendo 64]] emulator for x86 hardware.<br />
*Wii64, a [[Nintendo 64]] emulator for the Wii.<br />
*WiiSX, a Sony PlayStation emulator for the Nintendo Wii.<br />
*[[Mupen64Plus]], a multi-platform Nintendo 64 emulator.<ref>[http://pandorawiki.org/Mupen64plus_dynamic_recompiler Mupen64Plus]</ref><br />
*[[Yabause]], a multi-platform [[Sega Saturn|Saturn]] emulator.<ref>[http://wiki.yabause.org/index.php5?title=SH2_dynamic_recompiler SH2]</ref><br />
*The backwards compatibility functionality of the [[Xbox 360]] (i.e. running games written for the original [[Xbox (console)|Xbox]]) is widely assumed to use dynamic recompilation.<br />
*[[PPSSPP]], a [[Sony]] [[PlayStation Portable]] emulator. Recompilers for both x86 and ARM.<br />
*[[PSEmu Pro]], a [[Sony]] [[PlayStation]] emulator.<br />
*[[Ultrahle]], the first [[Nintendo 64]] emulator to fully run commercial games.<br />
*[[PCSX2]],<ref>[http://www.pcsx2.net PCSX 2]</ref> a [[Sony]] [[PlayStation 2]] emulator, has a recompiler called "microVU", the successor of "SuperVU".<br />
*[[Dolphin (emulator)|Dolphin]], a [[Nintendo GameCube]] and [[Wii]] emulator, has a dynarec option.<br />
*GCemu,<ref>[http://sourceforge.net/projects/gcemu-project GCemu]</ref> a [[Nintendo GameCube]] emulator.<br />
*[[NullDC]], a [[Sega]] [[Dreamcast]] emulator for x86.<br />
*GEM,<ref>{{cite web|url=http://gem.tni.nl/ |title=Gameboy Emulator for MSX &#124; The New Image |publisher=GEM |date= |accessdate=2014-01-12}}</ref> a [[Game Boy|Nintendo Game Boy]] emulator for [[MSX]] uses an optimizing dynamic recompiler.<br />
*[[DeSmuME]],<ref>[http://desmume.org/2013/04/30/desmume-0-9-9-released/ DeSmuME v0.9.9]</ref> a [[Nintendo DS]] emulator, has a dynarec option.<br />
*Soywiz's Psp,<ref>{{cite web|author=Publicado por Carlos Ballesteros Velasco |url=http://pspemu.soywiz.com/2013/07/release-soywizs-psp-emulator-2013-07-28.html |title=Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525) |publisher=Pspemu.soywiz.com |date=2013-07-28 |accessdate=2014-01-12}}</ref> a [[Sony]] [[PlayStation Portable]] emulator, has a dynarec option.<br />
<br />
==See also==<br />
* [[Comparison of platform virtual machines]]<br />
* [[Binary translation]]<br />
* [[Just-in-time compilation]]<br />
* [[Binary recompiler]]<br />
<br />
==References==<br />
{{Reflist|30em}}<br />
<br />
==External links==<br />
*[http://web.archive.org/web/20051018182930/www.zenogais.net/Projects/Tutorials/Dynamic+Recompiler.html Dynamic recompiler tutorial]<br />
*[http://emulatemii.com/wordpress/?tag=dynarec Blog posts about writing a MIPS to PPC dynamic recompiler]<br />
<br />
[[Category:Virtualization software]]<br />
[[Category:Compiler construction]]<br />
[[Category:Emulation software]]</div>173.206.33.127https://emulation.gametechwiki.com/index.php?title=Dynamic_recompilation&diff=5749Dynamic recompilation2014-03-29T05:02:19Z<p>173.206.33.127: Creating page. Using Wikipedia as a start. Edit it and modify it to our own ends.</p>
<hr />
<div>In [[computer science]], '''dynamic recompilation''' (sometimes abbreviated to '''dynarec''' or the [[pseudo-acronym]] '''DRC''') is a feature of some [[emulator]]s and [[virtual machine]]s, where the system may [[Compiler|recompile]] some part of a [[Computer program|program]] ''during execution''. By compiling during execution, the system can tailor the generated code to reflect the program's run-time environment, and potentially produce more efficient [[code]] by exploiting information that is not available to a traditional static [[compiler]].<br />
<br />
==Uses==<br />
Most dynamic recompilers are used to convert machine code between architectures at runtime. This is a task often needed in the emulation of legacy gaming platforms. In other cases, a system may employ dynamic recompilation as part of an [[adaptive optimization]] strategy to execute a portable program representation such as [[Java (programming language)|Java]] or .NET [[Common Language Runtime]] bytecodes. Full-speed debuggers also utilize dynarec to reduce the space overhead incurred in most [[deoptimization]] techniques, and other features such as dynamic [[thread migration]].<br />
<br />
==Tasks==<br />
The main tasks a dynamic recompiler has to perform are:<br />
* Reading in machine code from the source platform<br />
* Emitting machine code for the target platform<br />
<br />
A dynamic recompiler may also perform some auxiliary tasks:<br />
* Managing a cache of recompiled code<br />
* Updating of elapsed cycle counts on platforms with cycle count registers<br />
* Management of interrupt checking<br />
* Providing an interface to virtualized support hardware for example a [[GPU]]<br />
* Optimizing higher level code structures to run efficiently on the target hardware (see below)<br />
<br />
==Example==<br />
Suppose a program is being run in an emulator and needs to copy a null-terminated [[character string|string]]. The program is compiled originally for a very simple processor. This processor can only copy a [[byte]] at a time, and must do so by first reading it from the source string into a [[processor register|register]], then writing it from that register into the destination string. The original program might look something like this:<br />
<br />
<source lang=asm><br />
beginning:<br />
mov A,[first string pointer] ; Put location of first character of source string<br />
; in register A<br />
mov B,[second string pointer] ; Put location of first character of destination string<br />
; in register B<br />
loop:<br />
mov C,[A] ; Copy byte at address in register A to register C<br />
mov [B],C ; Copy byte in register C to the address in register B<br />
inc A ; Increment the address in register A to point to<br />
; the next byte<br />
inc B ; Increment the address in register B to point to<br />
; the next byte<br />
cmp C,#0 ; Compare the data we just copied to 0 (string end marker)<br />
jnz loop ; If it wasn't 0 then we have more to copy, so go back<br />
; and copy the next byte<br />
end: ; If we didn't loop then we must have finished,<br />
; so carry on with something else.</source><br />
<br />
The emulator might be running on a processor which is similar, but extremely good at copying strings, and the emulator knows it can take advantage of this.<br />
It might recognize the string copy sequence of instructions and decide to rewrite them more efficiently just before execution, to speed up the emulation.<br />
<br />
Say there is an instruction on our new processor called ''movs'', specifically designed to copy strings efficiently. Our theoretical movs instruction copies 16 bytes at a time, without having to load them into register C in between,<br />
but will stop if it copies a 0 byte (which marks the end of a string) and set the zero flag. It also knows that the addresses of the strings will be in registers A and B, so it increments A and B by 16 every time it executes, ready for the next copy.<br />
<br />
Our new recompiled code might look something like this:<br />
<br />
<source lang=asm>beginning:<br />
mov A,[first string pointer] ; Put location of first character of source string<br />
; in register A<br />
mov B,[second string pointer] ; Put location of first character of destination string<br />
; in register B<br />
loop:<br />
movs [B],[A] ; Copy 16 bytes at address in register A to address<br />
; in register B, then increment A and B by 16<br />
jnz loop ; If the zero flag isn't set then we haven't reached<br />
; the end of the string, so go back and copy some more.<br />
end: ; If we didn't loop then we must have finished,<br />
; so carry on with something else.</source><br />
<br />
There is an immediate speed benefit simply because the processor doesn't have to load so many instructions to do the same task, but also because the movs instruction is likely to be optimized by the processor designer to be more efficient than the sequence used in the first example. (For example, it may make better use of [[Parallel computing|parallel execution]] in the processor to increment A and B while it is still copying bytes).<br />
<br />
===Gaming===<br />
*[[MAME]] uses dynamic recompilation in its CPU emulators for MIPS, SuperH, PowerPC and even the Voodoo graphics processing units.<br />
*[[1964 (emulator)|1964]], a [[Nintendo 64]] emulator for x86 hardware.<br />
*Wii64, a [[Nintendo 64]] emulator for the Wii.<br />
*WiiSX, a Sony PlayStation emulator for the Nintendo Wii.<br />
*[[Mupen64Plus]], a multi-platform Nintendo 64 emulator.<ref>[http://pandorawiki.org/Mupen64plus_dynamic_recompiler Mupen64Plus]</ref><br />
*[[Yabause]], a multi-platform [[Sega Saturn|Saturn]] emulator.<ref>[http://wiki.yabause.org/index.php5?title=SH2_dynamic_recompiler SH2]</ref><br />
*The backwards compatibility functionality of the [[Xbox 360]] (i.e. running games written for the original [[Xbox (console)|Xbox]]) is widely assumed to use dynamic recompilation.<br />
*[[PPSSPP]], a [[Sony]] [[PlayStation Portable]] emulator. Recompilers for both x86 and ARM.<br />
*[[PSEmu Pro]], a [[Sony]] [[PlayStation]] emulator.<br />
*[[Ultrahle]], the first [[Nintendo 64]] emulator to fully run commercial games.<br />
*[[PCSX2]],<ref>[http://www.pcsx2.net PCSX 2]</ref> a [[Sony]] [[PlayStation 2]] emulator, has a recompiler called "microVU", the successor of "SuperVU".<br />
*[[Dolphin (emulator)|Dolphin]], a [[Nintendo GameCube]] and [[Wii]] emulator, has a dynarec option.<br />
*GCemu,<ref>[http://sourceforge.net/projects/gcemu-project GCemu]</ref> a [[Nintendo GameCube]] emulator.<br />
*[[NullDC]], a [[Sega]] [[Dreamcast]] emulator for x86.<br />
*GEM,<ref>{{cite web|url=http://gem.tni.nl/ |title=Gameboy Emulator for MSX &#124; The New Image |publisher=GEM |date= |accessdate=2014-01-12}}</ref> a [[Game Boy|Nintendo Game Boy]] emulator for [[MSX]] uses an optimizing dynamic recompiler.<br />
*[[DeSmuME]],<ref>[http://desmume.org/2013/04/30/desmume-0-9-9-released/ DeSmuME v0.9.9]</ref> a [[Nintendo DS]] emulator, has a dynarec option.<br />
*Soywiz's Psp,<ref>{{cite web|author=Publicado por Carlos Ballesteros Velasco |url=http://pspemu.soywiz.com/2013/07/release-soywizs-psp-emulator-2013-07-28.html |title=Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525) |publisher=Pspemu.soywiz.com |date=2013-07-28 |accessdate=2014-01-12}}</ref> a [[Sony]] [[PlayStation Portable]] emulator, has a dynarec option.<br />
<br />
==See also==<br />
* [[Comparison of platform virtual machines]]<br />
* [[Binary translation]]<br />
* [[Just-in-time compilation]]<br />
* [[Binary recompiler]]<br />
<br />
==References==<br />
{{Reflist|30em}}<br />
<br />
==External links==<br />
*[http://web.archive.org/web/20051018182930/www.zenogais.net/Projects/Tutorials/Dynamic+Recompiler.html Dynamic recompiler tutorial]<br />
*[http://emulatemii.com/wordpress/?tag=dynarec Blog posts about writing a MIPS to PPC dynamic recompiler]<br />
<br />
[[Category:Virtualization software]]<br />
[[Category:Compiler construction]]<br />
[[Category:Emulation software]]</div>173.206.33.127https://emulation.gametechwiki.com/index.php?title=RPCS3&diff=5748RPCS32014-03-29T05:01:09Z<p>173.206.33.127: /* Overview */</p>
<hr />
<div>{{Infobox<br />
|first = 0.0.0.4<br />
|second = Yes<br />
|third = Windows<br />
|fourth = RPCS3 Team<br />
|fifth = [http://rpcs3.net/ rpcs3.net]<br />
|sixth = [https://github.com/DHrpcs3/rpcs3 GitHub]}}<br />
<br />
'''RPCS3''' is a PlayStation 3 (PS3) emulator that is in very early development. Currently usable only for light homebrew and a ''very'' small number of commercial games, with heavy glitches. It aims to one day eventually emulate the PS3 fully.<br />
<br />
==Download==<br />
[http://www.emunewz.net/forum/forumdisplay.php?fid=199 SVN Builds]<br />
<br />
==Overview==<br />
Development of RPCS3 is early, but promising. It can play the intros to some games with the sound<ref>http://www.youtube.com/watch?v=oOcUcD9y51w</ref>. It can play some of Disgaea 3, but with heavily glitched graphics, and the sprites do not show.<ref name="Disgaea3 video">http://www.youtube.com/watch?v=IQEv6B6fIgA</ref><br />
<br />
Even on a relatively modern machine, it gets very low framerate. In Disgaea 3's menus it averages less than 3 frames per section<ref name="Disgaea3 video"/>. Modern hardware is too slow to run a PS3 emulator. It also has yet to implement a dynarec ([[Dynamic recompilation]]), instead relying entirely on an interpreter, which means that it runs much slower than what is possible in the future. <br />
<br />
It will be a long time before it can play complex PS3 games that use the power of the cell for some time.<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://www.youtube.com/user/B1ackDaemon RPCS3 developer YouTube Channel]<br />
<br />
[[Category:Emulators]]<br />
[[Category:Windows emulation software]]</div>173.206.33.127https://emulation.gametechwiki.com/index.php?title=SCP_Driver_Package&diff=5747SCP Driver Package2014-03-29T04:56:18Z<p>173.206.33.127: Adding video guide.</p>
<hr />
<div>SCP Driver Package is an open-source driver which allows for DS2 (DualShock 2), DS3, and DS4 to work natively on Microsoft Windows.<br />
<br />
==Download==<br />
[http://forums.pcsx2.net/Thread-XInput-Wrapper-for-DS3-and-Play-com-USB-Dual-DS2-Controller SCP Driver Package]<br />
<br />
==Features==<br />
Native XInput support through USB + Bluetooth. <br />
<br />
The Filter Driver + Wrapper is included with the package, but isn't supported.<br />
<br />
==Instructions==<br />
<span style="font-weight: bold;"><span style="text-decoration: underline;">Pre-Install</span></span><br />
1. [[MotioninJoy#Un-Installation_instructions|Uninstall MotioninJoy]] (if already installed)<br />
<br />
2. Update your [http://www.microsoft.com/hardware/en-us/d/xbox-360-controller-for-windows 360 controller drivers] if you haven't done so.<br />
<br />
From the thread itself:<br />
<br />
<span style="font-weight: bold;"><span style="text-decoration: underline;">New Install</span></span><br />
# Connect your Dongle and controller via USB and let Windows install its default drivers.<br />
# Unpack the archive.<br />
# Create a directory where you want the Service to run from. Recommended - "C:\ScpServer". Create from an elevated command prompt if you have UAC enabled. The directory should not be created anywhere off your User directory (eg on your Desktop, or in your Downloads directory), it should also not be on a Network drive.<br />
# Copy the contents of the ScpServer\bin to the directory you created.<br />
# Run ScpDriver.exe.<br />
# XP/Vista - check the Force Install option. Win 7/8 leave it unchecked.<br />
# Click Install.<br />
# Click Exit.<br />
<br />
You may need to run ScpMonitor.exe as well if you're using Bluetooth.<br />
<br />
==PCSX2 and PCSX-R==<br />
[[File:LilyPad-SCP.png|thumb|Double check your Game Device APIs boxes.]]<br />
*Copy the LilyPad-Scp-r5350.dll from the /bin/Win32/ folder and paste it into the plugins folder.<br />
*Change the pad plugin in PCSX2 or PCSX-R from the default LilyPad to the LilyPad-SCP version.<br />
*You may also need to disable DirectInput and XInput before the next step. To prevent crashing, which seems to vary from system to system.<br />
*'''Then''' copy over XInput1_3.dll from /bin/Win32/ to PCSX2 or PCSX-R's directory. '''NOT''' the plugins directory.<br />
*Now disable all other Game Device APIs other than native if you haven't already. Background input is fine though.<br />
*Set keyboard input to raw while you're at it. For PCSX-R's hotkeys, since Windows messaging input kills them.<br />
*In case you're a little slow mentally and didn't notice, you still need to bind them. So switch over to the Pad 1 tab to do so.<br />
<br />
==Troubleshooting==<br />
[[File:1381584252082-1-.png|thumb|350px|You may have to go into properties and hit unblock]]<br />
<br />
If you are having trouble installing it, please go over these to double check.<br />
<br />
*Ensure the Xbox 360 driver installed correctly. Go into Devices & Printers > Xbox 360 Controller > Hardware and update the driver from there.<br />
*Have you tried uninstalling and force installing it?<br />
*Go into properties of all the exe files and hit unblock, especially ScpService.exe.<br />
<br />
*Did you install it as an administrator?<br />
*Did the entire folder have Full control privileges for SYSTEM and Administrators?<br />
*Do you have the relevant XInput1_3.dll in the relevant program's exe's directory?<br />
*Does SCPUser.exe show them working?<br />
*Is the "SCP DS3 Service" service running?<br />
*In the case you're running wired, have you tried reinstalling SCP with Bluetooth unchecked?<br />
<br />
==Video guide==<br />
https://www.youtube.com/watch?v=TpSaOJJIun8</div>173.206.33.127https://emulation.gametechwiki.com/index.php?title=General_problems_FAQ&diff=5746General problems FAQ2014-03-29T04:53:16Z<p>173.206.33.127: /* Steps to take */</p>
<hr />
<div>Here is a simple guide for the steps one should take to try to resolve your problems.<br />
<br />
==Steps to take==<br />
<br />
===1. Update to latest version===<br />
Emulators can have stable builds that are weeks, months, and sometimes even years old. The "stable" version is often times just a randomly picked dev version. That is why the latest dev versions should be preferred. This could solve emulation issues most of the time. Links to dev builds can be found at the pages for [[PCSX-Reloaded|PCSX-R]], [[PCSX2]], [[Dolphin]], [[nullDC]], [[DeSmuMe|DeSmuME]] and [[PPSSPP]].<br />
<br />
===2. Change settings===<br />
If you're using a plugin based emulator, graphical glitches and sound issues might be solved by changing the settings.<br />
*[[Recommended_PSX_Plugins|PS1 Plugins]]<br />
*[[Recommended_N64_Plugins|N64 Plugins]]<br />
<br />
===3. Review these FAQs:===<br />
*[[Emulator Problems FAQ]]<br />
*[[Game problems FAQ|Game Problems FAQ]]<br />
<br />
===4. Check for known issues===<br />
There are resources available for emulators which lists the common known issues with games, and the solutions.<br />
*[http://wiki.pcsx2.net PCSX2 Wiki]<br />
*[http://wiki.dolphin-emu.org Dolphin Wiki]<br />
*[http://forums.ppsspp.org/showthread.php?tid=1473 PPSSPP Compatibility List]<br />
*[http://bmgcl.atspace.cc/n64mgcl/N64ConfigList.htm N64 Config List]<br />
<br />
===5. Check the archives===<br />
Sometimes, questions may have been asked and answered multiple times in the past. Check the Emulation General archives.<br />
*[http://archive.foolz.us/vg/ Foolz archive of /vg/]<br />
*[https://archive.foolz.us/vg/search/subject/emulation%20general/ Previous threads]<br />
<br />
===6. Read the wiki===<br />
The rest of the wiki may have information you need. <br />
http://emulation.gametechwiki.com/index.php/Main_Page<br />
<br />
===7. Ask Emulation General===<br />
If you still can't find a solution, ask Emulation General. Provide relevant details such as:<br />
*System specs, especially CPU<br />
*Emulator and version<br />
*Emulator settings/plugins<br />
*Game details<br />
*The problem itself. Do not forget that, because if you do then what comes out makes no sense whatsoever.<br />
[[Category:FAQs]]</div>173.206.33.127