Emuladore

Informatika arloan, **emuladorea** programak edo bideojokoak haien berezko plataformak ez diren ingurunean exekutatzea ahalbidetzen duen softwareari deritzo. Simuladoreak ez bezala, aurreko hauek programaren portaera kopiatzen saiatzen baitira, emuladoreak dispositiboa era zehatzean modelatzen saiatzen dira, horrela oinarrizko tresna erabiltzen dela itxuraraziz.

## Erabilerak 
Erabileren artean hedatuta dagoen bat bideojokoen esperientzia antzeratzea da; dibertimenduzko makinen edo bideokontsolen emulazioak ordenagailu pertsonaletan edo beste bideokontsoletan eginez, hain zuzen ere.  Sistema zaharretako (*abandonware*) jokoen emulazioa egungo ordenagailu pertsonal eta bideokontsoletan egiten da, dispositibo originaletan baino askoz erosoagoa baita. Hala ere, emuladore sortzaileentzat software lizentzia behar dute ROM eta BIOS-aren funtzionabilitatea bikoizten dituzten programak idazteko. Honi *high-level emulation* edo *maila handiko emulazio* deritzo. Ohikoa den beste erabilera bat zaharkituak dauden sistema eragileen edo beste makinentzako edo dispositiboentzako erabilgarri dauden sistema eragileen emulazioa da, sistema eragile hauekin bateragarriak diren progaramak erabiltzeko.
## Emulazioa 
Teorikoki, Church-Turing-en tesiak edozein giro funtzional beste edozeinen barnean emulatu daitekeela dio. Alta, honek zailtasun praktikoak ekar ditzake, batez ere, emulatutako sistemaren portaera dokumentatu barik dagoenean eta alderantzizko ingeniaritza erabiliz ondorioztatu behar denean. Tesian ez da sinkronizazio ezberdintasunei buruz hitz egiten; emuladorea oinarrizko hardwarea bezain bizkor ez bada aritzen, softwarea hardware originala baino motelago joango da.

### Egitura 
Emuladoreen gehiengoak hardwarearen arkitektura konfigurazio bakarra emulatzen dute soilik. Esplotazio sistema (edo sistema eragilea) beharrezkoa bada porgramaren bat emulatzeko, hura ere emulatzen da. Bai esplotazio sistema bai programa bera emuladoreak intrepretatu behar ditu, ekipo originalean exekutatzen ari balira bezala. Emulatutako makinaren lengoaiaren intrepretazioaz gain, nahitaezkoa da beste ekipo osoa emulatzea, zein sarrera-irteera dispositiboak, birtualki: memoriako guneren batean idazteak pantailan eragina badu, honako hau ere emulatu beharko litzateke.

Ekipoaren emulazio osoaren ordez, azaleko bateragarritasun batek ere balio dezake. Honek emulatutako sistemaren deiak sistema anfitrioi batera iztularaziko ditu. Tipikoki, emuladore bat moduluetan banatuko da, bakoitza emulatutako ekipoaren azpisistema bakoitzaren elkarrekikoa izango da era zehatzean. Oro har, emuladorearen konposaketa jarraian ditugun moduluek osatzen dute:

* Prozesamendu zentraleko unitatearen emuladore bat.
* Memoria subsistemarako  modulu bat.
* Sarrera-irteerako dispositiboentzako hainabat modulu.

Ohikoena busak ez emulatzea da, errendimendu eta soiltasun arraoziengatik, eta periferiko birtualak PZUarekin eta memoria subsistemekin komunika daitezen.

#### PZU simuladorea 
Prozesamendu zentraleko unitatearen (PZU) simuladorea sarritan emuladorearen atalik konplexuena da. Emuladore askok "aurrepaketatutako PZU simuladoreak erabiltzen dituzte idazteko, makina espezifiko baten emulazio leial eta eraginkor bat lortzeko. PZU simuladorerik arruntena interprete informatikoa izango litzateke, honek, emulatutako programazio-kodearen exekuzio-fluxua jarraituko du eta emulatutako makinaren kode instrukzio bakoitzarentzat, semantikoki originalen baliokide diren instrukzioak kargatuko ditu exekutatuko den prozesadorean. Interpreteak oso hedatuta daude PZU simuladoreetan, inplementaziorako errezagoak dira errendimendu handiko beste aukerekin alderatuz, eta haien abiadura egokia da hamar urte baino gehiagoko konputagailuen emulaziorako.

#### Sarrera-irteera dispositiboak 
Aurretik aipatu den moduan, emuladoreen gehiengoak ez ditu busen sistema nagusiak emulatzen; sarrera-irteera dispositibo bakoitza kasu berezi gisa tratatzen da, eta ez da interfaze konstante bat existitzen periferiko birtualentzat. Horrek funtzionamenduaren abantaila ekar dezake, sarrerako eta irteerako modulu bakoitza gailu emulatuaren ezaugarrietara egokitu ahal izatea ahalbidetuz. Estandar batean oinarritutako diseinuek, (API bidez bateratutako sarrerek eta irteerek), ordea, eredu sinpleagoak eman ditzakete. Gainera, abantaila gehigarri bat dute, modu "automatikoan" plugin-zerbitzuak erabiltzea ahalbidetzen dute; emuladorean bitartekoen gailu birtualak hornitzeko.

API bidez bateratutako sarrerek eta irteerek ez dute nahitaez benetako hardwarearen busaren egitura islatzen: busaren diseinua hainbat parametro elektrikok mugatzen dute, eta programazio paraleloa maneiatzeko beharra, gehienetan softwarearen inplementazioan alde batera utz daitekeena.

Gailu bakoitza kasu berezi gisa tratatzen duten emuladoreek ere badute horretarako oinarrizko azpiegitura komun bat:

* Etengailuak erabiliz, PZUaren simulagailuak irakur ditzakeen banderak finkatzen dituzten prozeduren bidez, etengailu bat altxatuz gero, PZU birtualari "etengailuak (birtualak) bihurtzeko" aukera emanez.
* Memoria fisikoaz idatzi eta irakurriz, antzeko bi prozeduraren bidez, memoria logikoari aurre egiten dion bitartean (azken horren aurka, aurrekoa alde batera bota daiteke eskuarki, eta, horren ordez, memoriaren konponketari buruzko zuzeneko erreferentziak erabiltzen dira).

### ROM-aren sistema 
Emuladoreek ROM irudiak ateratzen dituzte, hau da, antzinako sistemekin erabiltzen ziren kartutxoen, disketeen edo zinten edukia. Fisikoki, PCetan, ROMak memorian kargatu daitezkeen fitxategi bitarrak dira. Hau da, emuladorea kontsola baten funtzioak egiten dituen programa bat da, adibidez, Game Boy Advance edo PDA bat, eta ROM kartutxoa; CD-ROM edo zinta lanak egiten dituen fitxategi bat da, adibidez Mario Bros, Pokemon, etab.

## Kanpo estekak