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?
Ei mitään dokumentaatioita, reverse engineering on ohjelmistokehityksen suola (:D).
Grez kirjoitti:
Missä tilanteessa olisi järkevää tehdä kattava emulaattori?
Kun alkuperäinen kehittäjä ei tee mitään asialle ja joku haluaa säilyttää raudan tai sen ohjelmistot.
Ei-yllättäen alkuperäinen kehittäjä ei tee asialle mitään, tai jos tekee, niin sinun pitää maksaa lisää rahaa, vaikka omistat jo raudan.
Tosiasiassa kannattaisi kyllä varmaan olla ostamatta tuollaisilta firmoilta. Jokaisen itseään kunnioittavan firman pitäisi tehdä rautaversioista aina x86-versio.
Jotkut kehittäjät antavat PC:llä toimivan simulaattorin, jonka tarkoitus on nopeuttaa ohjelmistokehitystä siten, ettei tarvitse esim. odottaa jotain rautaversioita.
Muistaakseni DSP:eille on esim. tullut kyllä avoimempia alustoja, joilla varmaan nimenomaan kamppaillaan noita suljettuja vastaan. Kun teet ohjelmistoa suljetulle, niin se hyödyttää lyhyellä tähtäimellä, mutta ohjelmistoa ei voi enää portata.
Android:issa on ihan samaa pelleilyä. Periaatteessa luurilla voisi ajaa mitä käyttöjärjestelmää tahansa, mutta käytännössä low-level ajurit ovat vain Linux:ille, eikä niihin ole dokumentaatiota kaikkeen.