Kohtuullisen paljon sähinää taas

Retropelit

Retropelirintamalla on pitänyt melkoista kiirettä viime aikoina. Aiemmin mainitsemani Synapse Softwaren pelit ovat kaikki saapuneet ja aika paljon muutakin. Minulla ei ole nyt aikaa raportoida mitä kaikkia pelejä olen eBayn kautta hankkinut, mutta on kai niitä varmaankin reilut kymmenen ainakin.

Esimerkiksi Synapse Softwaren Survivor pelistä minulla on nyt täysi setti kasibittiselle Atarille, eli sekä lerppu- että kasettiversio löytyy. Molempien harvinaisuusaste on Atarimanian sivuilla 8/10. Muistelen, että Commodore 64:lle minulla on jo lerppuversio entuudestaan.

Clang 8 git snapshot julkaistu

En usko, että julkaisusta on paljonkaan iloa kenellekään muulle, mutta puskin eilen lauantaina 22.12.2018 ulos Clang 8 kääntäjän paketoituna Fedora Linuxille. Binäärinen RPM-paketti on jaossa Fedora Linux 28:lle ja lisäksi tein SRPM-paketin, jonka testasin kääntyvän sekä Fedora 28:ssa että 29:ssä.

Tuli itse asiassa mieleen ns. vanhat hyvät ajat, jolloin Linux-kerneliä saatettiin kääntää tuntien ajan. Nyt LLVM-kääntäjäinfrastruktuuri ja sen päällä pörräävä Clang oli tuskallisen hidasta RPM-paketoida, mutta onpahan sekin nyt tehty. Binäärinen RPM Fedora 28:lle on ihan järkyttävän kokoinen, se on muistaakseni noin 815MB. SRPM taisi olla reilut 40MB.

Kyseessä on 02.12.2018 githubista kloonattu snapshot eli tämä ei ole mikään virallinen julkaisu ollenkaan, vaan lähinnä kokeiluversio omaan käyttööni.

Varsinainen motivaatio Clang 8 paketointiin oli se, että lisäsin siihen erittäin simppelin ominaisuuden pienellä kludgetuksella. Eli ympäristömuuttuja CLANG_PARANOID on nyt merkityksellinen tälle Clang 8 versiolle. Jos se on asetettu mihin tahansa arvoon, niin kääntäjä varoittaa aina kun jonkin funktion paluuarvoa ei käytetä.

Normaalistihan GCC ja Clang varoittavat vain jos funktiot on headereissa julistettu tietyllä attribuutilla tai jos kyseessä on "pure function". Jälkimmäinen siis tarkoittaa yksinkertaisesti vaikka sellaista funktiota kuin atoi(3), eli mikäli funktiolla ei ole mitään sivuvaikutuksia ja sitä kutsutaan vain ja ainoastaan paluuarvon takia, niin silloin Clang 8 valittaa automaattisesti mikäli paluuarvoa ei käytetä.

Nyt siis CLANG_PARANOID=1 kääntää päälle varoitukset oli sitten kyseessä ihan mikä funktio tahansa. Perimmäinen syy tähän taas on siinä, että olen ohjelmoimassa erästä melko kriittisen tärkeää tehtävää hoitavaa Unix/Linux-daemonia, ja haluan varmuuden vuoksi saada kääntäjältä varoitukset ihan aina kun kyseessä voi olla jokin virhetilanne.

Modifioidun Clang 8:n voi downloadata tästä linkistä.

FUSE Spectrum emulaattori, Manic Miner ja Jet Set Willy

Äsken laitoin julkaisuun pienen tutoriaalin, joka sisältää ohjeet FUSE Spectrum emulaattorin asennukseen Fedora Linuxissa. Tutoriaalissa on myös ohjeet siihen miten Manic Miner ja Jet Set Willy pelit saa toimimaan USB-ohjaimella. Kirjoittelin hyvin yksinkertaisen shell wrapperin, joka vain kutsuu fuse emulaattoria tietyillä parametreilla. Syy wrapperin käyttöön on siis se, että sen avulla ei tarvitse muistaa fuse:n vaatimia komentoriviparametreja, vaan pelit saa käyntiin vähän helpommin suoraan wrapperilla.

Tämä usb2kempston skripti asettaa myös Sinclair ZX Spectrumin äänibeeperille arvon väliltä 0-100, eli sillä voi kääntää äänet pois kokonaan, laittaa ne täysille tai jotain siltä väliltä. Sillä voi myös skaalata videonäytön 2x tai 3x kertaiseksi. Käsittääkseni FUSE ei tue isompaa skaalausta kuin 3x, mutta mahdollisesti 4x olisi helppoa lisätä siihen muokkaamalla C-koodia 2x ja 3x keisseistä mallia ottaen.

Tutoriaali on tietenkin englanniksi ja sen nimi on Spectrum emulator FUSE, Manic Miner and Jet Set Willy on Fedora Linux