Dat is echt onzin, er zijn emulators die andere architecturen al op volle snelheid kunnen draaien op een systeem dat 2x zo snel is. Denk bijvoorbeeld aan Rosetta op OS X, waarmee PowerPC applicaties op Intel macs gedraaid konden worden, dat was gewoon prima bruikbaar op x86 hardware die niet eens zo heel veel sneller was dan de vorige generatie PowerPC macs. Sommige console emulators komen ook al een heel eind, bijvoorbeeld de N64 emulators draaien al best behoorlijk op een simpele Pentium-II.
Het probleem met emulators is dat ze extreem moeilijk te programmeren zijn, ik schat zo in ongeveer de moeilijkste stukken software die je kunt maken, ik heb ooit zelf geprobeerd aan een NGC emulator te beginnen, maar als je je gaat verdiepen in alle problemen die je dan op je afroept dan raak je al voor je 1 regel code hebt geschreven te gedemotiveerd om eraan te beginnen. Een efficiente emulator maken is *nog* moeilijker, maar het kan wel, met dynamische recompilatie en waar mogelijk stukken high-level emulatie (native herimplementaties van bepaalde systeemfuncties en SDK's van de ge-emuleerde console) kan je al redelijk dicht bij een 1 op 2 snelheid komen.
@BCage
Klopt, dat bedoelde ik ook. Het is inderdaad een andere manier van emulatie, maar dat maakt natuurlijk niet uit, als het maar werkt. Ook voor een PS2 zou je een emulator met HLE kunnen schrijven, en zeker als je (zoals Sony) alle details van de hardware weet en de broncode van de SDK ter beschikking hebt, dan kun je hele stukken SDK code native herimplementeren (nog steeds zeer lastig in verband met timing issues, hardware interrupts, het delen van geheugen met stukken niet-HLE code in je emulator, enzovoorts. Maar het *kan* wel, daar ben ik van overtuigd).
De '10x vuistregel' is wat mij betreft dan ook meer een vuistregel voor gebruikers, zodat ze kunnen inschatten wat voor systeem je nodig hebt om een ander systeem te emuleren met huidige emulators. Maar ik ben er van overtuigd dat het absoluut geen vuistregel is wat je in theorie zou kunnen behalen. Neem een Java Virtual machine bijvoorbeeld, die zou je als 'CPU emulator' kunnen zien, omdat die ook instructies uitvoert in een machinetaal die de CPU niet begrijpt. Door dynamische recompilatie, hotspot optimalisatie en allerlei andere trucs is Java code in veel gevallen niet meer dan een paar procent trager dan gecompileerde code. Zou je een emulator maken die lange stukken machinecode naar een soort intermediate bytecode formaat kan omzetten (on the fly, statisch werkt voor veel systemen niet vanwege self-modifying code die in consoles nog wel eens voorkomt), plus een VM die zo geavanceerd is als een Java VM, dan ben je op CPU gebied al een heel eind.
[Reactie gewijzigd door johnbetonschaar op dinsdag 11 januari 2011 17:09]
De snelheid die is te bereiken is ook heel moeilijk in te schatten en hangt ook direct samen met de complexiteit van het te emuleren systeem en de gevoeligheid voor zaken zoals met name timing. De PS2 is net zoals de SEGA Saturn een nogal onconventioneel apparaat, dit in tegenstelling tot bijvoorbeeld de PSX, Dreamcast of Gamecube.
Kijk jenaar de PS2 dan lijkt het in eerste instantie een nogal zwak systeem, maar de verschillende chips werken op een niet-gebruikelijke manier samen, en met name de videochip heeft als ik het me goed herinner een nogal bizarre hoeveelheid bandbreedte beschikbaar, en dan heb je het over tientallen gigabytes per seconde. Zie dat maar eens in software te doen op een telefoon.
De vuistregel van 10x originele snelheid is jarenlang eigenlijk best een degelijk houvast geweest als je kijkt van console naar x86. Dat legt namelijk lekker eenvoudig uit aan leken hoe snel hun PC ongeveer zou moeten zijn om speelbare resultaten te behalen. Hoewel PS2 eigenlijk pas ideaal draait op een dual core (Wolfdale) vanaf 3GHz, terwijl de originele (single core) chip maar op 300 of 333 MHz draait. Maar goed, het blijft een vuistregel.
Verder heb je wel een heel goed punt met betrekking tot Sony's commerciële belangen, kijk maar naar de God Of War collection en al zulk soort spellen. Dat is een stuk interessanter dan BC. Wat mij betreft zouden ze ook wel een apparaat uit mogen brengen dat PS2 op de PS3 afspeelt en die dit tegelijkertijd op een hogere resolutie rendert, daar betaal ik graag voor.
Het voorbeeld van de N64 klopt wel, dan hoeft je computer niet 10x zo snel te zijn, maar dit is bereikt door een andere manier van emuleren te gebruiken. Voor die snelle N64 emulators is High Level Emulation gebruikt (vandaar de naam UltraHLE van de eerste bekende emulator).
Dit kwam er kort gezegd op neer dat niet de hele N64 werd geëmuleerd. Voor bepaalde kostbare operaties, zoals de videoharware, werd niet de hardware geëmuleerd, maar werden de functie aanroepen vertaald naar aanroepen die de PC zou begrijpen (in het geval van UltraHLE Glide van 3dfx). Er werd gekeken welke functie aanroepen er voorkwamen in Mario64 en Zelda64 en het resultaat van deze aanroepen werd vervolgens gesimuleerd door code die ongeveer hetzelfde resultaat zou opleveren op een PC. Zo emuleer je niet het systeem, maar interpreteer je in feite de code.
Dit was ook de reden dat in eerste instantie alleen Mario64 en Zelda64 heel goed werkten, terwijl andere spellen niet eens wilden booten. Het was wel een slim principe en Nintendo raakte aardig in paniek, doordat het de eerste console emulator was die nog tijdens de actieve tijd van die console speelbare resultaten opleverde.
[Reactie gewijzigd door BCage op dinsdag 11 januari 2011 13:39]