{"id":538,"date":"2024-03-20T22:02:00","date_gmt":"2024-03-20T21:02:00","guid":{"rendered":"https:\/\/djax.se\/blog\/?p=538"},"modified":"2025-04-18T21:25:54","modified_gmt":"2025-04-18T19:25:54","slug":"jag-vill-skriva-en-emulator","status":"publish","type":"post","link":"https:\/\/djax.se\/?p=538","title":{"rendered":"Jag vill skriva en emulator!"},"content":{"rendered":"\n<p>Emulering av spelkonsoler har alltid fascinerat mig \u00e4nda sedan min kompis i mellanstadiet ber\u00e4ttade att han redan nu spelar Banjo-tooie hemma p\u00e5 datorn innan spelet sl\u00e4ppts. Det var en l\u00f6gn. I slutet av 90-talet var det inte m\u00f6jligt f\u00f6r den tidens datorer att emulera Nintendo 64 (Nu kan du spela N64 p\u00e5 <a href=\"https:\/\/github.com\/libretro\/mupen64plus-libretro-nx\">b\u00e4rbara maskiner<\/a>).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"497\" height=\"342\" src=\"http:\/\/localhost:8081\/wp-content\/uploads\/2024\/03\/banjo-tooie.png\" alt=\"\" class=\"wp-image-557\" srcset=\"https:\/\/djax.se\/wp-content\/uploads\/2024\/03\/banjo-tooie.png 497w, https:\/\/djax.se\/wp-content\/uploads\/2024\/03\/banjo-tooie-300x206.png 300w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/figure>\n\n\n\n<p>Vad kompisen sa var inte sant men att kunna k\u00f6ra mjukvara p\u00e5 en annan maskin \u00e4n vad den var t\u00e4nkt att k\u00f6ra p\u00e5 \u00e4r fullt m\u00f6jligt.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Senare i livet var jag en g\u00e5ng p\u00e5 \u00f6ppet hus vid den h\u00f6gskola d\u00e4r jag sen skaffade min kandidat. Vid montern f\u00f6r det datavetenskapliga programmet stod en mycket blyg kille ihop med en dam som jag tog jobbade vid l\u00e4ros\u00e4tet. F\u00f6r att locka f\u00f6rbipasserande visades p\u00e5 en laptop en Commodore 64 emulator utvecklad av den blyga killen. Wow t\u00e4nkte jag, \u00e4r det s\u00e5dant h\u00e4r man f\u00e5r l\u00e4ra sig, och utveckla, p\u00e5 programmet s\u00e5 kommer det passa mig perfekt! Efter genomf\u00f6rd utbildning kan jag konstatera att ingenstans d\u00f6k den h\u00e4r emulatorn upp men det stoppar inte mig fr\u00e5n att sj\u00e4lv ge mig p\u00e5 ett f\u00f6rs\u00f6k till en <a href=\"https:\/\/github.com\/adajoh\/Spelpojken\">Game Boy emulator i Java<\/a>. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1309\" height=\"1074\" src=\"http:\/\/djax.se\/wp-content\/uploads\/2024\/03\/spelpojken.gif\" alt=\"\" class=\"wp-image-556\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>S\u00e5 klart finns det redan emulatorer skrivna i alla spr\u00e5k, till alla system. Om du enbart vill spela n\u00e5got fr\u00e5n n\u00e4r du var liten kan du bara s\u00e4tta dig ner och spela <a href=\"https:\/\/store.steampowered.com\/app\/1118310\/RetroArch\/\">n\u00e4stan lika enkelt som vilket spel som helst<\/a>.<\/p>\n\n\n\n<p>Men vill du f\u00f6rdjupa dig kan det ocks\u00e5 vara en mycket nyttig \u00f6vning att borra sig ner genom alla lager i datorn s\u00e5 du n\u00e4stan kommer till silikonen som ett s\u00e4tt att bli en b\u00e4ttra programmerare.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>A big percentage of so-called experts today only know how to configure tools, but they understand nothing about how things work at the deeper level. This is a real challenge and a big problem for the future.<\/p>\n<cite><a href=\"https:\/\/unixdigest.com\/articles\/we-have-used-too-many-levels-of-abstractions-and-now-the-future-looks-bleak.html\">We have used too many levels of abstractions and now the future looks bleak<\/a><\/cite><\/blockquote>\n\n\n\n<p>N\u00e4r du \u00e4r d\u00e4r nere klickar f\u00f6rst\u00e5elsen p\u00e5 ett helt annat s\u00e4tt att allt bara handlar om bytes som far runt och \u00e4ndras mellan CPU, RAM och disk.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"360\" src=\"https:\/\/djax.se\/wp-content\/uploads\/2024\/03\/code-matrix.gif\" alt=\"\" class=\"wp-image-559\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Vart b\u00f6rjar vi? <\/p>\n\n\n\n<p>Du beh\u00f6ver k\u00e4nna till det bin\u00e4ra talsystemet, nu skall vi prata ettor och nollor och hur <a href=\"https:\/\/sv.wikipedia.org\/wiki\/Endian\">tal representeras.<\/a> Sedan beh\u00f6ver du boolesk algebra och kunna koda hj\u00e4lpligt i valfritt spr\u00e5k som kan rita n\u00e5got p\u00e5 sk\u00e4rmen.<\/p>\n\n\n\n<p>N\u00e4sta steg \u00e4r lite knivigare. Nu beh\u00f6ver vi l\u00e4ra oss hur en CPU arbetar. Att den exekverar en instruktion i taget vars resultat \u00e4ndrar dess interna register eller skriver n\u00e5got till minnet.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"174\" src=\"https:\/\/djax.se\/wp-content\/uploads\/2024\/03\/Von_Neumann_Architecture.svg_.png\" alt=\"\" class=\"wp-image-562\"\/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Von_Neumann_architecture\">von Neumann architecture<\/a><\/figcaption><\/figure>\n\n\n\n<p>F\u00f6rslagsvis v\u00e4ljer du att emulera n\u00e5got system fr\u00e5n 80-talet d\u00e4r arkitekturen \u00e4r enkel, entr\u00e5dig och saknar dedikerad GPU, lagring till disk etc. I f\u00f6ljande videos diskuteras Nintendo 8-bitars och Game Boy p\u00e5 den tekniska niv\u00e5n du beh\u00f6ver.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"&quot;Game Development in Eight Bits&quot; by Kevin Zurawel\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/TPbroUDHG0s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"The Ultimate Game Boy Talk (33c3)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/HyzD8pNlpwI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Till systemet beh\u00f6ver du n\u00e5gon form av dokumentation av h\u00e5rdvaran och CPU instruktioner. Game boy dokumentation hittas <a href=\"http:\/\/marc.rawer.de\/Gameboy\/Docs\/GBCPUman.pdf\">h\u00e4r<\/a>.<\/p>\n\n\n\n<p>N\u00e4r du b\u00f6rjar koda s\u00e5 b\u00f6rja med att modellera alla delar i systemet som bevarar n\u00e5got form av tillst\u00e5nd. Skapa egna variabler som representerar varje register i processorn och hela RAM minnet. L\u00e4s sedan in alla bytes fr\u00e5n en ROM till ditt &#8221;fake&#8221; RAM och f\u00f6rs\u00f6k exekvera den f\u00f6rsta instruktionen i programdelen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"681\" height=\"502\" src=\"http:\/\/localhost:8081\/wp-content\/uploads\/2024\/03\/super-mario.png\" alt=\"\" class=\"wp-image-565\" srcset=\"https:\/\/djax.se\/wp-content\/uploads\/2024\/03\/super-mario.png 681w, https:\/\/djax.se\/wp-content\/uploads\/2024\/03\/super-mario-300x221.png 300w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><figcaption class=\"wp-element-caption\">En del av all kod, grafik och k\u00e4nslor i <a href=\"https:\/\/sv.wikipedia.org\/wiki\/Super_Mario_Bros.\">Super Mario bros.<\/a><\/figcaption><\/figure>\n\n\n\n<p>Det h\u00e4r \u00e4r sv\u00e5ra grejer men fantastiskt h\u00e4ftigt n\u00e4r programmet f\u00e5r liv och k\u00f6r den h\u00e4r flera decennier gamla koden \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Emulering av spelkonsoler har alltid fascinerat mig \u00e4nda sedan min kompis i mellanstadiet ber\u00e4ttade att han redan nu spelar Banjo-tooie hemma p\u00e5 datorn innan spelet sl\u00e4ppts. Det var en l\u00f6gn. I slutet av 90-talet var det inte m\u00f6jligt f\u00f6r den tidens datorer att emulera Nintendo 64 (Nu kan du spela N64 p\u00e5 b\u00e4rbara maskiner). Vad [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":569,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-systemutveckling"],"_links":{"self":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=538"}],"version-history":[{"count":2,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/538\/revisions"}],"predecessor-version":[{"id":759,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/538\/revisions\/759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/media\/569"}],"wp:attachment":[{"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}