Sohaisu Spectrumin suuntaan

July 18th, 2014

Vääjäämättä koitti se päivä, kun Spectrumillekin piti jotain yritellä. Vammala Party’14:ään kyhättiin siis pieni intro, jossa on biisi, kuva ja kahdeksan “aitoa” 16×16 spriteä. Yzi teki biisin ja Terppa suurimman osan koodista sekä grafiikat; itse touhusin mukana lähinnä spriterutiinia ideoimassa, Arkos-soittorutiinia Spectrumille sovittamassa sekä kehitysympäristöä kasaamassa. Lopputulos toimii klassisella 48k-kumpparillakin, joskin ääniä varten tarvitaan AY- eli PSG-moduuli kuten Wonder AY.

Spritejen piirtely ei ole mitenkään erityisen hauskaa Spectrumilla, sillä rauta ei niitä mitenkään tue, grafiikkamuistin järjestys on mutkikas, värirajoitukset iskevät nilkkaan, eikä 48k:ssa ole edes grafiikkasivuja. Piirto- ja pyyhintäjärjestyksen on oltava niin ollen tarkkaan harkittu ja ajastettu, etteivät pallot repeile ja välky. Tero on käsitellyt aiheeseen liittyvää problematiikkaa syvällisemmin blogissaan. Aitoihin spriteihin tarvitaan tietysti reikiä varten läpinäkyvyys, mikä tarkoittaa, että uuden tulokkaan alla olevalle grafiikalle tehdään ensin maskin kanssa AND ja sitten varsinaiset pikselit lisätään päälle OR-operaatiolla. Jos jotain hyvää hakee, niin Speku on aika nopea grafiikkamuistinsa käsittelyssä, ja muisti sijaitsee ainakin normaalissa osoiteavaruudessa, toisin kuin vaikka MSX:llä.

Musiikkipuoli hoitui helposti jo tutuin konstein eli Arkos Trackerilla ja sen omiin tarkoituksiin muokatulla toistorutiinilla. Virittelyä vaati oikeastaan vain porttiosoite ja porttikomentojen muuttaminen kaksiosaisiksi. MSX:ltä tuttu

 out (0xa0),a

piti muuttaa muotoon

 ld bc,#65533
 out (c),a

Speku on sikäli harvinainen laite, että se käyttää Z80:n täyttä 16-bittistä porttiavaruutta päinvastoin kuin muut tunnetut laitteet. Käsky on siis salaa itse asiassa out (bc),a.

Z80-konekieli oli vanhastaan tuttu, ja kun SDCC:n kanssa oli tullut säädettyä jo aiemmin sekä MSX:llä että Sharpilla, ei työkalujen kasaan saamisessa mennyt kohtuuttoman kauan. Valmiita MSXlibin rutiinejakin sai käytettyä jossain määrin sinältään. Fuse on kelpo multiplattis-emulaattori, joka osaa ajaa tap-tiedostoja suoraan komentoriviltä – eli käytännössä Makefilestä. Eniten kompurointia aiheutti lopulta käännetyn binäärin muuntaminen tap-muotoon, sillä pikaisella hakemisella löytyi vain toimimattomia tai vääränlaisia vaihtoehtoja. Lopulta löytyi onneksi bin2tap, minkä myötä viimeinenkin puuttuva palanen loksahti kohdalleen.

Hauska sivupolku tämä ainakin oli ja saattaa olla, että Spekun äärelle tulee palattua joskus tulevaisuudessakin. 48k on demokoneena tarpeettoman rajoittunut, joten 128k olisi sikäli houkuttelevampi kohde, mutta vaatisi samalla jonkin verran lisää opettelua muistin pankituksen osalta.

the_unhanged

Filed under: demoskene,koodi,laitteet,retro

Kommentin kirjoitus

You must be logged in to post a comment.

RSS feed for comments on this post.


Kommenttien virta

Aiheet