Nintendo Entertainment System emulointiympäristön kehittäminen
Broms, Patrik (2020)
Avaa tiedosto
Lataukset:
Broms, Patrik
2020
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2020120325826
https://urn.fi/URN:NBN:fi:amk-2020120325826
Tiivistelmä
Työn tavoitteena oli kehittää Nintendo Entertainment System -emulaattori. Tavoitteena oli tarjota alusta,
jota voidaan käyttää NES-kasettien kehityksessä apuna. Työssä käytettiin apuna julkisesti saatavilla olevia
alustan ja sen komponenttien dokumentaatioita. Lisäksi emulaattoria kehitettiin julkisesti saatavilla olevien
avoimen lähdekoodin NES-kasettien avulla.
Työn edellytyksenä oli tukea Windows- ja Linux-käyttöjärjestelmiä. Työ toteutettiin C-ohjelmointikielen C99
versiolla ja työssä käytettiin alustasta riippumattomia ohjelmistokirjastoja.
Opinnäytetyö toteutettiin yksi komponentti kerrallaan. Komponentit vastaavat isoja kokonaisuuksia alkuperäisen alustan toiminnasta, kuten prosessoria ja kasettia. Jokaisen komponentin toimintaa pyrittiin visualisoimaan työssä kehitetyssä käyttöliittymässä. Visualisoitavia kohteita olivat alustan eri muistit ja ajettavan koodin tila. Työssä toteutettuja komponentteja olivat prosessorin osoiteväylä, kasetti, prosessori ja
kuvankäsittely-yksikkö.
Prosessorin osoiteväylän vastuulla on yhdistää alustan komponentit yhteen liikuttamalla tietoa näiden välillä. Osoiteväylä pystyy kerrallaan kuljettamaan 8-bittisen luvun, ja se kattaa 16-bittisen muistiavaruuden.
Tätä osoiteväylää emulaattorissa ajettava koodi pystyy käsittelemään suoraan.
Kasetissa sijaitsee emulaattorissa ajettava koodi, kuvat ja äänet. NES-alustalla on monia erilaisia kasetti
tyyppejä, joiden avulla alustan toimintaa on voitu muokata. Tätä varten kasettikomponentti sisältää muistikartoittajia, jotka valitaan kasetin tyypin mukaan. Kasetit ovat alkuperäisessä alustassa erillisiä liitettäviä
komponentteja ja emulaattorissa ne ovat digitaalisia tiedostoja.
Prosessori hakee kasetista operaatioita ja suorittaa ne. Operaatioiden avulla voidaan muokata joko prosessorin omaa tilaa, muisteja tai muiden komponenttien tilaa. Prosessorin operaatiot perustuvat 6502-ohjelmointikielen ohjeisiin. Työhön toteutettiin ajettavan koodin visualisointi.
Kuvankäsittely-yksikkö tuottaa alustan kuvan. Kuvan tuottaminen koostuu taustakuvista ja edessä olevista
spritekuvista. NES-alusta ei pysty piirtämään yksittäisiä pikseleitä, vaan piirtämiseen käytetään kasetista
saatuja kuvia. Kuvankäsittely-yksikkö sisältää myös oman osoiteväylän. Tämän avulla kuvankäsittely-yksikkö yhdistää sen sisäiset muistit ja kasetissa sijaitsevat kuvat.
Kun työhön vaaditut komponentit oli toteutettu, emulaattoria testattiin NES-kasettien avulla. Testauksen
avulla pystyttiin parantamaan emulaatio tarkkuutta ja korjaamaan komponenteissa olevia virheitä. Testauksen apuna oli työhön kehitetty käyttöliittymä. Käyttöliittymästä pystyy katsomaan mitä muutoksia prosessorin suorittamat operaatiot tekevät, ja miltä kasetissa sijaitsevat kuvamuistit näyttävät.
jota voidaan käyttää NES-kasettien kehityksessä apuna. Työssä käytettiin apuna julkisesti saatavilla olevia
alustan ja sen komponenttien dokumentaatioita. Lisäksi emulaattoria kehitettiin julkisesti saatavilla olevien
avoimen lähdekoodin NES-kasettien avulla.
Työn edellytyksenä oli tukea Windows- ja Linux-käyttöjärjestelmiä. Työ toteutettiin C-ohjelmointikielen C99
versiolla ja työssä käytettiin alustasta riippumattomia ohjelmistokirjastoja.
Opinnäytetyö toteutettiin yksi komponentti kerrallaan. Komponentit vastaavat isoja kokonaisuuksia alkuperäisen alustan toiminnasta, kuten prosessoria ja kasettia. Jokaisen komponentin toimintaa pyrittiin visualisoimaan työssä kehitetyssä käyttöliittymässä. Visualisoitavia kohteita olivat alustan eri muistit ja ajettavan koodin tila. Työssä toteutettuja komponentteja olivat prosessorin osoiteväylä, kasetti, prosessori ja
kuvankäsittely-yksikkö.
Prosessorin osoiteväylän vastuulla on yhdistää alustan komponentit yhteen liikuttamalla tietoa näiden välillä. Osoiteväylä pystyy kerrallaan kuljettamaan 8-bittisen luvun, ja se kattaa 16-bittisen muistiavaruuden.
Tätä osoiteväylää emulaattorissa ajettava koodi pystyy käsittelemään suoraan.
Kasetissa sijaitsee emulaattorissa ajettava koodi, kuvat ja äänet. NES-alustalla on monia erilaisia kasetti
tyyppejä, joiden avulla alustan toimintaa on voitu muokata. Tätä varten kasettikomponentti sisältää muistikartoittajia, jotka valitaan kasetin tyypin mukaan. Kasetit ovat alkuperäisessä alustassa erillisiä liitettäviä
komponentteja ja emulaattorissa ne ovat digitaalisia tiedostoja.
Prosessori hakee kasetista operaatioita ja suorittaa ne. Operaatioiden avulla voidaan muokata joko prosessorin omaa tilaa, muisteja tai muiden komponenttien tilaa. Prosessorin operaatiot perustuvat 6502-ohjelmointikielen ohjeisiin. Työhön toteutettiin ajettavan koodin visualisointi.
Kuvankäsittely-yksikkö tuottaa alustan kuvan. Kuvan tuottaminen koostuu taustakuvista ja edessä olevista
spritekuvista. NES-alusta ei pysty piirtämään yksittäisiä pikseleitä, vaan piirtämiseen käytetään kasetista
saatuja kuvia. Kuvankäsittely-yksikkö sisältää myös oman osoiteväylän. Tämän avulla kuvankäsittely-yksikkö yhdistää sen sisäiset muistit ja kasetissa sijaitsevat kuvat.
Kun työhön vaaditut komponentit oli toteutettu, emulaattoria testattiin NES-kasettien avulla. Testauksen
avulla pystyttiin parantamaan emulaatio tarkkuutta ja korjaamaan komponenteissa olevia virheitä. Testauksen apuna oli työhön kehitetty käyttöliittymä. Käyttöliittymästä pystyy katsomaan mitä muutoksia prosessorin suorittamat operaatiot tekevät, ja miltä kasetissa sijaitsevat kuvamuistit näyttävät.