Mahdollisuus luoda emulaattori raudalle, jolle sellaista ei ole?
Esim. SoC:ille tai DSP:lle?
Pitääkö raudasta tietää muuta kuin mikä prosessori siinä on? Ja prosessorin käskykanta?
Tarkoitus olisi siis pystyä ajamaan raudalle tehtyjä ohjelmia emulaattorilla, joka pyörii eri raudalla.
Emulointi vaatii yleensä selvästi tehokkaampaa rautaa kuin alkuperäinen. Ehkä järkevämpää, pienitöisempää ja vähemmän tehoa hukkaavaa olisi tehdä käännin, joka kääntää sen alkuperäisen koodin kohteelle.
Eikös noille DSP:lle ollut jotkut manuaalit olemassa? Niistä kai näkee, mitä voi tehdä?
Kyselin toisaalta, niin oltiin ihan hyshys, kun jonkun mielestä tässä muka kosketaan jonkun IP:ä.
Mutta DSP:eille saa usein kuitenkin SDK:n ja jossain määrin emulaattorit ovat laillisia. ROM/Firmware taas vaatii laitteen omistamisen.
Emulaatio tai tuĺkkaaminen ei ole mikään uusi keksintö ja muun muassa Applella on Rosetta. VLIW-arkkitehtuuriin perustava venäläinen Elbrus prosessorikin kykenee ajamaan sille ei natiiveja x86 ja x86-64 binäärejä.
Mutta mistä kannattaisi lähteä liikkeelle, jos haluaa ymmärtää, miten ja mitä voi emuloida?
mavavilj kirjoitti:
Mutta mistä kannattaisi lähteä liikkeelle, jos haluaa ymmärtää, miten ja mitä voi emuloida?
Ehkä CHIP-8 emulaattori voisi olla mukava tapa aloittaa ja onhan se palkitsevaa saada pelata jotain peliä omalla tuotoksellaan...
Pitää tietää kaikki ne asiat, joita aikoo emuloida. Riippuu tilanteesta, mitä kaikkea. Käskykanta, rekisterit, muisti, liitännät, oheislaitteet, mahdollisesti myös näiden kaikkien ajankäyttö ja kellon emulointi, jos emuloitava ohjelma on näiden suhteen kovin herkkä (esim. vanhat pelit, joissa sleep on toteutettu silmukalla, joka juuri tietyllä laitteella vie tietyn ajan).
Helppo lähtökohta voisi olla luokka, joka kuvaa emuloitavaa laitetta. Laita luokan jäseniksi kaikki laitteen rekisterit järkevillä alkuarvoilla sekä muistia kuvaava taulukko, johon lataat valmiiksi jonkin ohjelman. Lähde sitten toteuttamaan ominaisuuksia niin, että kun emulaattoria pyydetään etenemään yksi kellojakso tai käsky, emulaattori osaa lukea käskyn muistista, purkaa sen ja toteuttaa sen. Voit lisätä uusia käskyjä aluksi sitä mukaa, kuin ohjelmasi tarvitsee niitä.
Luin kuitenkin, että monesti näissä käytetään disassembler:ia ja piirilevyn tulkintaa.
Täältä löytyi joku NES-emulaattorin tutoriaali:
https://medium.com/@guilospanck/the-journey-of-writing-a-nes-emulator-part-i-the-cpu-6e83b50baa37
Mikäli emuloitavasta raudasta ei ole dokumentaatiota, niin voisi kuitenkin melkein sanoa, että on paljon helpompaa koettaa vain koodata samankaltaisia ohjelmia ihan eri kirjastoilla kuin yrittää mallintaa itse rauta. Ohjelmat, firmware:t ja ROM:t ovat kuitenkin suojattuja, joten niitä ei kuitenkaan saa jakaa, joten epävirallisen emulaattorin hyöty on hieman kyseenalainen eikä ole sinällään mitään takuita, että sellaisen tekeminen onnistuu.
mavavilj kirjoitti:
Mikäli emuloitavasta raudasta ei ole dokumentaatiota, niin voisi kuitenkin melkein sanoa, että on paljon helpompaa koettaa vain koodata samankaltaisia ohjelmia ihan eri kirjastoilla kuin yrittää mallintaa itse rauta.
Joo ja vaikka olisikon dokumentaatio, niin ne ei ole mitään ohuita kirjoja ne. Toisaalta, kun sen suon kerran perkkaa läpi, niin kyllä siinä oppii aika paljon niin raudasta, kuin rekistereistä, laskennan kömpelyydestä, jne.
Niin tuossa on perus DSP:n datalehti. https://www.ti.com/lit/ds/symlink/tms320c6678.
248 sivua, liitedokumentteineen (esim. käskykanta 1 013 sivua) luokkaa 10 000 sivua. Kauankohan kestäisi tehdä emulaattori, joka toteuttaisi sen kaiken?
Missä tilanteessa olisi järkevää tehdä kattava emulaattori?