Project Petunia

Petunia projekt

Dinamikus újrafordítás-alapú
Motorola 680x0 processzor emuláció
PowerPC processzorokra

Utolsó frissítés: 2006.12.30

spanyol változat, angol változat

Tartalomjegyzék


Bevezető

A Petunia projekt egy Motorola 680x0 processzor emuláció dinamikus újrafordítással PowerPC processzorra épülő Amigák részére.

Dinamikus újrafordítás (vagy más néven just-in-time compilation vagy egyszerűen csak JIT fordítás) egy fordítási technika, amely az emulált processzor gépi kódját közvetlenül a végrehajtó processzor gépi kódjára fordítja futtatás közben.
Ezt a technika eléggé széles körben alkalmazzák manapság, tipikusan a JAVA alkalmazásokban, de sikerrel felhasználták több emulátorban is.

Petunia hivatalosan része az AmigaOS4 rendszernek.

Emulált tulajdonságok

Az emuláció célja magas szintű kompatibilitás a Motorola 68040 processzorral, MMU támogatás nélkül.

Mire képes az emulátor (V52.2)?

Az emulátor már szerves része az AmigaOS4.0 rendszernek, teljes egészében képes átvenni az emulált 680x0 alkalmazások futtatását.

Emulált opkódok:
  • minden integer opkód amit a 68040 támogat, kivéve az MMU- és gyorsítótár vezérlő opkódokat.,
  • minden 68881/882/68040 lebegőpontos koprocesszor opkód, kivéve: FSAVE. (Ezek közé tartoznak az un. szoftveresen támogatott 68040 opkódok is.)

Címzésmódok:

  • minden címzésmód, amit a 68020 és a későbbi processzorok támogatnak,

  • byte, word, longword, single, double, extended adatcímzés a lebegőpontos koprocesszor számára.

Flag emuláció: minden flag emulált.
Az emulátor fordítás időben alacsony szintű flag felhasználási analízist végez, amely az ugrások kontrollálásával együtt lehetővé teszi a valós idejű optimalizálását a fordított kódnak.

Virtuális kontextus váltást alkalmaz a PowerPC natív kódra, vagy az értelmező-alapú emulációra (helyettesítő) amikor szükséges.

A futtatható állományok emulációját kontrollálhatjuk egy un. fekete listán keresztül, amelyik alkalmazás felkerül a fekete listára, annak emulációját az interpretív emulátor végzi.

Problémák

Nem támogatott tulajdonságok:
  • Regiszterek: SFC, DFC
  • Opkódok: CALLM, RTM, CINV, CPUSH, PFLUSH, PFLUSHA, PTEST
Mik azok a programok, amik nem működnek? Amelyek
  • valamilyen nem emulált opkódot tartalmaznak (lásd az Emulált tulajdonságok fejezetet);
  • rosszul megírt programok, amelyek illegális memória hozzáférést okoznak, vagy önmódósítóak illegális módon.

Tervek a jövőre

  • speciális esetekre optimalizálás a fordított kódon, hogy még több sebességet kapjunk.

Sebesség tesztek

Menj, szerezd be az AmigaOS4.0 Final-t és nézd meg magadnak!

Gyakran Ismételt Kérdések (FAQ)

A fórumokon, beszélgető oldalakon, e-mailekre válaszolva eltöltött hosszú idő után úgy döntöttem felveszek a projekt oldalára egy GYIK-ot. Remélem sikerül tisztázni minden fontos kérdést, ami felmerülhet.
Ha valami mégsem elég világos nyugodtan írj egy e-mailt.

NE hallgass a trollokra/idiótákra a fórumokon és levelező listákon! Sokan közülük kijelenti, hogy tudja hogyan működnek a dolgok, de valójában fogalmuk sincs. (Különösen igaz ez az emulátorok és az AmigaOS4 belső működésére.) Ha valami kétséges, inkább kérdezz meg engem!

Kérlek ne várd, hogy egyik vagy másik fórumon majd válaszolok egy ott feltett kérdésre. Nincs elég időm minden fórumot folyton nézegetni.
Ha kérdésed van kérdezz tőlem.

Mikor lesz kész az emuláció?
Már kész.

Miért ilyen magas a verziószám? Emlékszem mikor utoljára megnéztem ezt az oldalt még 1.0 alatt/50.x körül volt. Mi történt?
A verziószám nem mutat semmit, csak egy elméleti dolog, amit a szoftver fejlesztője talál ki. Az AmigaOS4 komponensek verziószámai most épp V51-el kezdődnek. Ezért lett ilyen magas verziószáma a Petuniának is, mint AmigaOS4 komponens.

Milyen processzort emulál?
Motorola 68040 lebegőpontos egységgel (FPU), de memória manager egység (MMU) nélkül.

Csak 68040? És mi lesz azokkal a programokkal, amiket 68060-ra optimalizáltak?
Ne aggódj, ami működik 060-on az remekül működik 040-en is.

De az AmigaOS csak 68020+FPU kombinációt jelent le a programoknak! Épp most néztem meg a prerelase kiadásomban! Most akkor mi van?
Ez csak egy technikai kérdés, biztonságosabb egy alacsonyabb CPU változatot jelenteni az alkalmazásoknak. De ennek semmi köze ahhoz, hogy mire képes a beépített emuláció. Mindkét emulátor 68040 módban működik, ami visszafelé kompatibilis minden 68020-as alkalmazással.
(Ez az utolsó mondat nem teljesen igaz: azok a programok, amik az FPU veremstruktúrából indulnak ki elvileg hibásan is működhetnek, de szerencsére ez nagyon-nagyon ritka, legtöbb valamilyen hakkolás a rendszerben. az FPU veremstruktúrák nem emuláltak egyelőre.)

Mi történik a "szoftver támogatott" 68881/882 FPU opkódokkal? Szükséges hozzájuk valamilyen külső emulációs szoftver, mint pl. az Oxypatcher?
Nem, az hülyeség lenne. Minden 68881/882 FPU opkódot elkészítettem, mintha a processzor támogatná "natívan". Tehát nem kell semmilyen segédeszköz, mint a 68040.library vagy az Oxypatcher.

Milyen gyors lesz az emuláció az AmigaOS4-ben?
Az emuláció körülbelül egy M68060/50Mhz szintjén működik egy PPC604/180 processzoron. Gyorsabb processzorok persze még gyorsabbak..
Néhány opkód emulálásához több erőbefektetés kell, hogy kompatibilis maradjon, másikakat egyszerűbb megvalósítani, ezért az aktuális sebesség nagyban függ a 680x0 kódtól.

Működni fog a kedvenc AGA/ECS játékom/demóm?
Az igazat megvallva: nem tartom valószínűnek. Az én munkám csak egy processzor-szintű emulációról szól és nem teljes támogatás a régi szoftvereknek. Az AGA programok chip készlet függését nem lehet egyszerűen megoldani (igen kemény feladat).
Nagyobb az esélye, hogy a régi programokat az UAE-n keresztül tudod majd futtatni. Használhatod az UAE natív verzióját AmigaOS4-en, elég jól működik.
A véleményem: 90-95%-a a rendszerbarát 680x0 programoknak működni fog gond nélkül Petuniával, de remélhetőleg magad is láthatod majd.

Tervezel valamilyen támogatást az UAE-hez?
Még nem tudom. Van lehetőség "kívülről" elérni az emulációt, tehát elvileg az UAE is működhetne a Petunia motorjára építve, ha valaki készít belőle egy speciális verziót. Én magam nem szándékozom ezt elkészíteni, de szívesen segítek bárkinek a munkában.

Azt hallottam, hogy a Petunia valójában egy UAE-JIT/egyéb emulátor átalakítása. Igaz ez?
Petuniának semmi köze egyetlen más JIT változathoz sem az UAE-nek, akár az Intel akár a PowerPC verziót nézzük, az én emulációm más elven működik. Teljes egészében az én munkám eredménye, a saját ötleteimen alapszik. (Hogy megmondjam az igazat: egész pontosan nem tudom hogyan működik a JIT emuláció az UAE-ben, még soha nem néztem bele.)

Hogyan működik az emuláció?
Az emulációnak három megközelítése lehetséges:

  • egy teljes gép emulációja néhány emulációs kilépővel (emulation-trap) a kevés natív kód irányába, az UAE működik ezen az elven,
  • egy virtuális gép, ami minden alkalommal elindul amikor egy emulált program elindul, minden erőforrás virtualizált (úgy is szokták nevezni, hogy Amiga-in-the-box vagy sandbox-emulator), JAVA Virtuális Gép és a MacOS X alkalmaz ilyesmit,
  • task alapú emuláció: minden emulált tasknak megvan a saját emulációs állapota, függetlenül a többiektől, emulációs kilépőkkel a natív kód irányába.
    Az AmigaOS4-ben működő emuláció követi ezt az utat, kivéve azt, hogy egy MMU-alapú 68k kód felismerő mechanizmus is életbe lép bizonyos esetekben. (Nem a normál library hívásoknál.)
    Miért is jó ez nekünk? Nincs virtualizált erőforrás, nincs kiesett idő, amíg egy komplex sandbox-mechanizmust felépít a rendszer, minden task/process a saját értelmezési/fordítási állapotában van, nincsenek egymásra hatások. A rendszer többi része teljes sebességgel futhat, mivel 99%-a PowerPC natív kód és minden task önállóan ütemezett. (Így megtartva a megszokott Amiga-érzést a reakcióban és a működésben.)

Olvastam egy fórumon, hogy a Petunia csak a fő futtatható állományt emulálja az alkalmazásból és nem foglalkozik a library-kkal/device-okkal/pluginokkal. Igaz ez?
Nem, már nem igaz. Egy régebbi tervemben valóban az szerepelt, hogy így valósítsam meg az emulációt, de szembesülnöm kellett azzal, hogy ez a módszer problémákat és lassulásokat okozott túl sok alkalmazásban. Így végül megváltoztattuk a belső működést, most minden 680x0 kódot a Petunia fog futtatni, amit a DOS töltött be. (DOS.library/LoadSeg() függvény, hogy pontosak legyünk.)
Ez alól az egyetlen kivétel amikor egy futtatható kifejezetten kitiltásra kerül a dinamikus újrafordítás alól. Ebben az esetben a futtathatót az interpretív emulátor hajtja végre.

Azt hallottam, hogy a Petunia egy egy "tiltó listára" (black list) megvizsgálásával dönti el egy alkalmazásról, hogy fordítja-e. Mire jó ez?
A Petunia aktuális változata csak azokat a futtatható állományokat fordítja, amelyek nem kerültek fel a "tiltó listára" (black list).
Az alapértelmezett emuláció a dinamikus fordítás minden 68k kódra, amit a DOS töltött be, de bármilyen alkalmazást vagy library-t felvehetsz a "tiltó listára" a Compatibility preferences segítségével, így elkerülve a dinamikus fordítását. Általában erre nincs szükség.

Miért van két különböző emulátor (interpretív és dinamikus újrafordító) a rendszerben?
Bizonyos esetekben a dinamikus újrafordítás nem alkalmazható. Például ha nincs elég memória a fordított kódrészletek tárolására. Egy néhány alkalmazás nem kompatibilis vele, és ezért ki vannak tiltva a fordítás alól. Összefoglalva: ezekben a speciális esetekben az interpretív emuláció lép életbe, mint helyettes. Szerencsére nem túl sűrűn. Ezen kívül eltávolíthatod a dinamikus fordítót a rendszerből, hogy ezzel nyerj egy kevés memóriát, ebben az esetben a interpretív emuláció végzi a feladatát.

Fogja a Petunia támogatni az AltiVec-et a PowerPC G4/G5 processzorokon?
Nem nagyon látok lehetőséget az AltiVec alkalmazására, mert az emulációnak nincs szüksége ismétlődő számítási részekre, kivéve a futásidejű optimalizációt és a memória másolást. Később meg fogom vizsgálni, hogy a SIMD opkóodok felhasználására van-e lehetőség.

Mi a helyzet az eljövendő PowerPC processzorokkal?
A PowerPC platform egy jól tervezett superscalar család, a 32 bites megvalósításról a 64 bites processzorra váltás egyszerű lehetőségével. Amíg a jövő Amigái 32 bites PowerPC-t alkalmaznak központi processzornak, addig a Petunia is működik gond nélkül.
A váltás 64 bites PowerPC processzorra egy kis átalakítást igényel, de nem egy nagy probléma.
Más típusú processzorra váltást, amely nem kompatibilis a PowerPC gépi kóddal teljesen értelmetlen és majdnem lehetetlen, mert az emulációs kód szinte teljes egészében PowerPC assembly-ben készült, ezért szorosan kötődik ehhez az architektúrához.

Mi a helyzet a szimmetrikus multiprocesszor támogatással?
Egyáltalán nem probléma, mivel a task-alapú emulációs forma miatt minden tasknak megvan a saját fordítási állapota. Amíg a kernel és az ütemező elintézi az erőforrások elosztását minden task vagy thread között, addig a Petunia is teljes sebességgel kihasználja a szimmetrikus multiprocesszor környezetet. (Egy teljes gép emuláció és néha egy virtuális gép sem tudja kihasználni a szimmetrikus multiprocesszor nyújtotta lehetőségeket, tehát a task-alapű megközelítés ismét egy jobb megoldás. Lásd feljebb: emuláció működése.)

Gondolkozol azon, hogy elkészítsd a Petuniát Intel (kompatibilis) processzorokra?
Nem, nem kódolok Intelre, ha egy mód van rá. Köszi a kérdést... ;)

Mi a véleményed az AmigaOS4-ről?
Remek tervezés és megvalósítás. Remek munka volt srácok! Most én is hozzájárulok egy kicsit több sebességgel a Petunia álral.. :)
Emlékszel a váltásra AOS1.3-ról 2.0-ra? Az AmigaOS4 egy sokkal nagyobb lépés előre.

Tervezed, hogy megosztod a munkád a MorphOS fejlesztőkkel?
Nem. MOS-nak megvan a saját útja, ami más, mint amit én akarok. Egyébként is megvan a saját megoldásuk a kérdésre.

Letöltések

Most nem.

Köszönet

Szeretnék köszönetet mondani a következő embereknek, akik segítettek nekem több (direkt vagy indirekt) módon létrehozni ezt a projektet (minden különösebb sorrend nélkül):

Thomas Frieden, Hans-Jörg Frieden, Colin Wenzel, Michael Sinz, Frank Wille, Steffen Häuser, Sam Jordan, Thomas Richter, Jochen Becher, Stephen Fellner, Simon Csaba, Ben Hermans, Timothy De Groote, Sven Ottemann, Ben Yoris, Konrad Bielski, Jörg Strohmayer, Adam Kowalczyk, Martin McKenzie, Bill Borsari, Nicolas Mendoza, Philippe "Elwood" Ferrucci, Varga Viktor, Markovits "Jam" Péter, Baldauf Tamás, Emeric/SpaceHawks, LouiSe, Artlace, Szakács Tibor, Török "Ph03n1x" László, Bácskai Attila, Horváth Róbert Márk, Blackie, Sau, Charlie/inQ, Víctor Gutiérrez, Andreas Loong, Ian Greenway

és

Kémeri "UnReal" Csabának a projekt logóért.

Kapcsolat

Nézd meg a kapcsolat oldalamat, kattints ide!

Vissza a főoldalra