{"id":3326,"date":"2014-07-18T18:57:36","date_gmt":"2014-07-18T16:57:36","guid":{"rendered":"http:\/\/www.kameli.net\/marq\/?p=3326"},"modified":"2014-07-18T19:08:15","modified_gmt":"2014-07-18T17:08:15","slug":"sohaisu-spectrumin-suuntaan","status":"publish","type":"post","link":"http:\/\/www.kameli.net\/marq\/?p=3326","title":{"rendered":"Sohaisu Spectrumin suuntaan"},"content":{"rendered":"<p>V\u00e4\u00e4j\u00e4\u00e4m\u00e4tt\u00e4 koitti se p\u00e4iv\u00e4, kun Spectrumillekin piti jotain yritell\u00e4. Vammala Party&#8217;14:\u00e4\u00e4n kyh\u00e4ttiin siis pieni intro, jossa on biisi, kuva ja kahdeksan &#8220;aitoa&#8221; 16&#215;16 sprite\u00e4. Yzi teki biisin ja Terppa suurimman osan koodista sek\u00e4 grafiikat; itse touhusin mukana l\u00e4hinn\u00e4 spriterutiinia ideoimassa, Arkos-soittorutiinia Spectrumille sovittamassa sek\u00e4 kehitysymp\u00e4rist\u00f6\u00e4 kasaamassa. Lopputulos toimii klassisella 48k-kumpparillakin, joskin \u00e4\u00e4ni\u00e4 varten tarvitaan AY- eli PSG-moduuli kuten <a href=\"http:\/\/www.lotharek.pl\/product.php?pid=40\">Wonder AY<\/a>.<\/p>\n<p>Spritejen piirtely ei ole mitenk\u00e4\u00e4n erityisen hauskaa Spectrumilla, sill\u00e4 rauta ei niit\u00e4 mitenk\u00e4\u00e4n tue, grafiikkamuistin j\u00e4rjestys on mutkikas, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Attribute_clash\">v\u00e4rirajoitukset<\/a> iskev\u00e4t nilkkaan, eik\u00e4 48k:ssa ole edes grafiikkasivuja. Piirto- ja pyyhint\u00e4j\u00e4rjestyksen on oltava niin ollen tarkkaan harkittu ja ajastettu, etteiv\u00e4t pallot repeile ja v\u00e4lky. Tero on k\u00e4sitellyt aiheeseen liittyv\u00e4\u00e4 problematiikkaa syv\u00e4llisemmin <a href=\"http:\/\/oldmachinery.blogspot.fi\/2014\/04\/zx-sprites.html\">blogissaan<\/a>. Aitoihin spriteihin tarvitaan tietysti reiki\u00e4 varten l\u00e4pin\u00e4kyvyys, mik\u00e4 tarkoittaa, ett\u00e4 uuden tulokkaan alla olevalle grafiikalle tehd\u00e4\u00e4n ensin maskin kanssa AND ja sitten varsinaiset pikselit lis\u00e4t\u00e4\u00e4n p\u00e4\u00e4lle OR-operaatiolla. Jos jotain hyv\u00e4\u00e4 hakee, niin Speku on aika nopea grafiikkamuistinsa k\u00e4sittelyss\u00e4, ja muisti sijaitsee ainakin normaalissa osoiteavaruudessa, toisin kuin vaikka MSX:ll\u00e4.<\/p>\n<p>Musiikkipuoli hoitui helposti jo tutuin konstein eli <em>Arkos Trackerilla<\/em> ja sen omiin tarkoituksiin muokatulla toistorutiinilla. Virittely\u00e4 vaati oikeastaan vain porttiosoite ja porttikomentojen muuttaminen kaksiosaisiksi. MSX:lt\u00e4 tuttu<\/p>\n<pre> out (0xa0),a<\/pre>\n<p>piti muuttaa muotoon<\/p>\n<pre> ld bc,#65533\r\n out (c),a<\/pre>\n<p>Speku on sik\u00e4li harvinainen laite, ett\u00e4 se k\u00e4ytt\u00e4\u00e4 Z80:n t\u00e4ytt\u00e4 16-bittist\u00e4 porttiavaruutta p\u00e4invastoin kuin muut tunnetut laitteet. K\u00e4sky on siis salaa itse asiassa <em>out (bc),a<\/em>.<\/p>\n<p>Z80-konekieli oli vanhastaan tuttu, ja kun <a href=\"http:\/\/sdcc.sourceforge.net\/\">SDCC<\/a>:n kanssa oli tullut s\u00e4\u00e4detty\u00e4 jo aiemmin sek\u00e4 MSX:ll\u00e4 ett\u00e4 Sharpilla, ei ty\u00f6kalujen kasaan saamisessa mennyt kohtuuttoman kauan. Valmiita <em>MSXlibin<\/em> rutiinejakin sai k\u00e4ytetty\u00e4 jossain m\u00e4\u00e4rin sin\u00e4lt\u00e4\u00e4n. <a href=\"http:\/\/fuse-emulator.sourceforge.net\/\">Fuse<\/a> on kelpo multiplattis-emulaattori, joka osaa ajaa tap-tiedostoja suoraan komentorivilt\u00e4 \u2013 eli k\u00e4yt\u00e4nn\u00f6ss\u00e4 Makefilest\u00e4. Eniten kompurointia aiheutti lopulta k\u00e4\u00e4nnetyn bin\u00e4\u00e4rin muuntaminen tap-muotoon, sill\u00e4 pikaisella hakemisella l\u00f6ytyi vain toimimattomia tai v\u00e4\u00e4r\u00e4nlaisia vaihtoehtoja. Lopulta l\u00f6ytyi onneksi <a href=\"http:\/\/zeroteam.sk\/bin2tap.html\">bin2tap<\/a>, mink\u00e4 my\u00f6t\u00e4 viimeinenkin puuttuva palanen loksahti kohdalleen.<\/p>\n<p>Hauska sivupolku t\u00e4m\u00e4 ainakin oli ja saattaa olla, ett\u00e4 Spekun \u00e4\u00e4relle tulee palattua joskus tulevaisuudessakin. 48k on demokoneena tarpeettoman rajoittunut, joten 128k olisi sik\u00e4li houkuttelevampi kohde, mutta vaatisi samalla jonkin verran lis\u00e4\u00e4 opettelua muistin pankituksen osalta.<\/p>\n<p><a href=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/07\/the_unhanged.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-3327\" alt=\"the_unhanged\" src=\"http:\/\/www.kameli.net\/marq\/wp-content\/uploads\/2014\/07\/the_unhanged-150x150.png\" width=\"150\" height=\"150\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>V\u00e4\u00e4j\u00e4\u00e4m\u00e4tt\u00e4 koitti se p\u00e4iv\u00e4, kun Spectrumillekin piti jotain yritell\u00e4. Vammala Party&#8217;14:\u00e4\u00e4n kyh\u00e4ttiin siis pieni intro, jossa on biisi, kuva ja kahdeksan &#8220;aitoa&#8221; 16&#215;16 sprite\u00e4. Yzi teki biisin ja Terppa suurimman osan koodista sek\u00e4 grafiikat; itse touhusin mukana l\u00e4hinn\u00e4 spriterutiinia ideoimassa, Arkos-soittorutiinia Spectrumille sovittamassa sek\u00e4 kehitysymp\u00e4rist\u00f6\u00e4 kasaamassa. Lopputulos toimii klassisella 48k-kumpparillakin, joskin \u00e4\u00e4ni\u00e4 varten tarvitaan AY- [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,25,22,15],"tags":[],"class_list":["post-3326","post","type-post","status-publish","format-standard","hentry","category-demoskene","category-koodi","category-laitteet","category-retro"],"_links":{"self":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/3326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3326"}],"version-history":[{"count":5,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/3326\/revisions"}],"predecessor-version":[{"id":3332,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/3326\/revisions\/3332"}],"wp:attachment":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3326"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}