Posts filed under 'softat'

Huono emulaattori -HOWTO

Kohta parisenkymmentä vuotta erilaisia emulaattoreita seuranneena pitänee sanoa tästäkin aiheesta jotain. Erinomaisten projektien, kuten vaikkapa OpenMSX, Mednafen, VICE tai DOSBox, vastapainona on olemassa lukematon määrä puolivalmiita, hylättyjä, vanhentuneita ja tasan yhdellä alustalla toimivia kämäisiä tekeleitä, joiden kanssa saa haaskattua sekä hermojaan että aikaansa. Ymmärrän kyllä, että ei harrastajaprojekteilta voi juuri mitään vaatia, mutta jotkin asiat voisi saman tien tehdä oikeinkin, kun kerran tekemään ryhtyy. Eli Huono emulaattori -HOWTO:

  • Älä missään tapauksessa julkaise sorsia. Eihän niitä kehtaa näyttää, tai niissä on suuria liikesalaisuuksia, tai ehkäpä tällä emulaattorilla tahkotaan vielä joskus rahaa. Kukapa niitä jaksaisi edes lueskella.
  • Heittäydy ahneeksi. Kyllä Sinclair QL -emulaattorista pitäisi 50 dollaria maksaa, kun sitä on kerran vaivalla tehty. Ja lisäkohtana:
    • Jos kukaan ei kikkarettasi osta, niin älä julkaise sitä ilmaiseksi, eikä etenkään niitä sorsia.
  • Sekoita käyttöliittymä- ja emulaatiokoodi keskenään. Näin voit varmistaa, että kerralla hyvin tehtyä käyttöliittymää tai suosikkikirjastoasi ei vaihdeta huonompaan.
  • Optimoi tavujärjestykseen perustuvilla kikoilla. Kun sinun koneessasi kerran on MSB tai LSB, niin eiköhän se ole muillakin.
  • Keksi oma formaatti. Muiden keksimissä levytiedosto-, kasetti-, rom- ym. formaateissa on aina jokin puute, tai sitten niiden käyttö on vaan muuten ikävää.
  • Tee ajastukset silmukoilla. Nopeammalla koneella pyörii sitäkin paremmin!
  • Keskity tasan yhteen alustaan. Järjestelmäkohtaiset rajapinnat ovat tehokkaita ja kun kerran kaikilla on se Win…jokin tietty käyttöjärjestelmä, niin turhaa vaivaa miettiä muita. Katso myös kohta sekoita käyttöliittymä- ja emulaatiokoodi keskenään.
  • Älä tee emulaattorillesi www-sivuja. Ja tätä täydentävänä kohtana:
    • Jos kuitenkin teet www-sivut, niin laita ne parin vuoden päästä katoavaan ilmaispalveluun tai koulusi koneelle, johon sinulla ei ole enää pian käyttölupaa.

Näillä pääsee jo pitkälle, takaan sen. Lisäkohtia voi ehdotella kommenteissa.

2 comments January 20th, 2012

vbcc for QDOS proof of concept

One of these projects that might not be useful for anybody, but it was educational for me at least 🙂 For some time I had been looking for a bit nicer and easier way to code for Sinclair QL than just pure asm. There used to be a GCC hack, which can’t even be compiled these days. The other 68k-friendly alternative is vbcc, which has support for various related architectures such as Atari ST and Amiga, but no QDOS. Hacking GCC is nothing I’d love to do in my spare time, so I checked out vbcc instead.

The aim was simple enough: get compiled C code to run on QL at an absolute address (0x30000 in this case, right after the video ram). Dealing with nasty stuff such as executable headers wasn’t necessary, since vlink supports rawbin1 output, which is just good clean binary code and data. In addition to that there was a need for a trivial startup routine, which doesn’t do much more than call _main. The correct way would be to call libvc’s __main, which initializes the stack, the heap and the C library, but since the implementation here is so incomplete anyway, I decided to omit that at this point. The biggest challenge was to create the needed linker script to join different object files and sections to a coherent executable. The example scripts can bring tears to your eyes with their complexity, but to join the three required aout sections (.text, .data and .bss) wasn’t that bad after some orientation.

So, with about five hours of work I got to the point where I could compile and run C code on the QL using my own little Arduino-based transfer cable and software. Plain C without any standard stuff such as includes, stdlib and math isn’t very useful yet, so next it was time to look into that. To my surprise I found out that libvc is not part of the distribution at all. Fortunately, the TOS includes seemed to be almost generic, and since the libs are in aout format as well, I gave them a go as-is. Everything I tried seems to work just fine — of course excluding i/o — so there is no immediate need for a real libvc implementation. A kludge on top of another kludge doesn’t decrease the overall quality significantly 😛

The necessary files are here: vbcc-qdos-poc.zip. In order to compile anything, you need to install vbccm68k, copy the archive contents to /usr/local/vbcc, and then add +qdos to the compiler command line. There’s a lot of broken stuff, questionable hacks and so on, which is why I call it a proof of concept. Anyone willing to take the work further is most welcome to do so. This is enough for my humble purposes, probably coupled with a few additions to deal with the keyboard, screen mode etc.

Add comment January 14th, 2012

(PPC) Linux and Amstrad CPC

Again in English to serve international people, too. It seems Ubuntu doesn’t let us emulate Amstrad CPC (ok, MESS might do it, but I’ve pretty much given up all hope with it). Skimming through a heap of abandoned emulators I finally came across the latest Linux sources of Arnold. Seems to compile fine out-of-the-box on x86 Linux, but a lot less so on PPC. The endian clean code seems to be there, but the compilation doesn’t go through without a few tweaks. So, here’s the fixed source and a PPC binary (tested only on Ubuntu 10.04 PPC):

http://www.kameli.net/~marq/arnold-ppc-2010-03-05.tar.gz

Note that this version will not work on a little endian system. Press F1 to reset, F2 for fullscreen, F3 for mouse grab. The GUI part requires GTK2, but that you should have anyway. If the sound is choppy, try a different sound system. At least ALSA, OSS, SDL and Pulse support are compiled in.

Add comment March 5th, 2011

Täppäämistä ja vielä hiukan emulaatiota

PowerBook-projekti alkaa kääntyä jo niin pitkälle voiton puolelle, että tekisi mieli jo seuraavaa (jos jollain on 12″ PBookia kaupan, niin ilmoitelkaa :)). Tässä viimeisimmät säädöt:

  • Mednafen toimii PPC-Linuxissa erinomaisesti. Ubuntun mukanakin tulee vanhahko versio, mutta sorsasta kääntämällä saa mm. hyvän Megadrive-tuen.
  • Basilisk II on kinkkisempi tapaus. Paketinhallinnassa ei ole, eikä sorsasta käänny. Puukotin sen verran, että lähti toimimaan SDL:n kanssa (konfikkiin lisätty myös asetus fullscreen true/false), mutta verkko ei toimi edelleenkään. Sheep_net jämähtää fiksattunakin ja tap/tunia ei tule vakiona kernelissä mukana. Jos tuota nyt joku haluaa kokeilla, niin täältä saa purkkaamani version (ja OS 7.5.3:n Applelta): http://www.kameli.net/~marq/BasiliskII-purkka.zip
  • Suspendista herätessä hiiripädin täppääminen menee automaattisesti päälle, mikä aiheuttaa verenpaineen nousua. Paikkaan /usr/lib/pm-utils/sleep.d voi laittaa oman skriptin, johon taikasanat trackpad notap

Add comment February 28th, 2011

PPC Linux and Sega Megadrive/Genesis emulation

This time exceptionally in English – I thought this might benefit some fellow PPC users abroad, too. It seems by all accounts that Megadrive/Genesis emulation under PPC Linux is a hopeless attempt: Dgen just crashes, Xmess doesn’t do any better, and up-to-date emulators, such as Gens/GS, don’t support the PPC platform (a generic Z80 core is apparently under construction). I was looking into compiling the excellent PicoDrive, but its sources seem to be here and there and no generic Linux version exists. So, no Megadrive for us, right?

Luckily I came across Generator, which has been ported to Linux/SDL a few years ago. After the usual configure/make fiddling the emulator actually ran games, but with distorted sound. A quick peek at the sources revealed a tiny endian problem, which was quickly fixed. While I was at it, I added an example config file, a PPC Linux binary, options to force the video overlay off (in case it doesn’t work for you), set the fullscreen resolution and to turn CPU saving off. I didn’t like the fact that the emulator wouldn’t start the games right away, so I turned autostart on, too. There are still some grave issues with sound: for example the music in Sonic 2 doesn’t play correctly, but that’s something out of my scope right now. At some point something has been broken – probably with GCC – since when I tried to compile the emulator on x86 Linux it simply crashed after a while. Not much of an issue, though, since there are other alternatives out there.

Download here (source and binary included): generator-0.35-cbiere-marq-r1.tar.gz

If you wish to compile it yourself, just run ./configure –with-sdl –with-cmz80 ; make in the src directory. For running games: ./generator-sdl-ppc romname (and optionally -c generator.config.example). Tested under Ubuntu 10.04 only, so let me know if it works for you. Alternative solutions to Megadrive emulation are most welcome as well.

edit: Apparently the good folks behind Mednafen are working on Sega support too. Here’s hoping 🙂

4 comments February 26th, 2011

Lisäkokemuksia emulaattoreista

Viikon-parin emulaattorikikkailu PPC-Linuxissa on tuonut aiheeseen mukavasti lisää näkemystä. Useimmat alustat alkavat olla jo varsin käyttökelpoisia nopeudeltaan ja pyörivät jopa koko ruudulla postimerkin kokoisen ikkunan sijaan. Aloitetaan kuitenkin huonoilla uutisilla:

  • Mac-on-Linux on rikki. Jossain vaiheessa Linuxiin on tullut sellaisia muutoksia, että vanhat koodit eivät enää toimi. SheepShaver on sekin hajonnut samalla tavoin eikä korjausta ole näköpiirissä. Mac OS 9:n emuloinnin voi siis unohtaa, mikä ei kylläkään ole iso menetys.
  • E-UAE riittää A500:n emulointiin aika mukavasti ja jaksaa useimmiten jopa piirtää joka framen. Fullscreen vaatii kikkailua, ks. ruutumoodien teko alla. Tärkeitä .uaerc:n asetuksia lowres-peleille ja -demoille (koneesta riippuvia):
    • gfx_width=360
    • gfx_height=286
    • gfx_width_fullscreen=424
    • gfx_height_fullscreen=286
    • gfx_lores=true
    • gfx_linemode=none
    • gfx_correct_aspect=false
  • MAME futaa sekin hyvin. Laitoin itse frontendiksi kxmamen, joka säästi jonkun verran hermoja. Fullscreen-kikkailun vaatii tämäkin ja perfektionisti säätäisi vielä pelikohtaisesti moodin tai pari lisää.
  • SNES9x on lämmennyt käytössä ja suostuu nyt jo vaikka mihin. Fullscreen tulee sen kummemmin säätämättä, jos vain skaalausvaihtoehdoksi laittaa Xvideon. Jos video-overlay ei koneessa toimi, niin allaoleva fullscreen-jekku kohentaa kokemusta joka tapauksessa. Hitaalla koneella on tärkeää ottaa äänen synkronointi pois asetuksista.
  • VICE hyötyy sekin ruutumoodien tekemisestä. Nopeinta fullscreeniä varten pikselien ohjelmallinen tuplaus pois päältä. Näyttömoodin vaihtamiseen kannattanee valita menusta Xrandr.
  • OpenMSX:n koko ruutu oli tällä koneella jo muutenkin riittävän nopea, joten varsinaista hyötyä matalammasta tarkkuudesta ei ollut. Hitaammalla laitteella hyödyttää set scale_factor 1 (komentoja pääsee antamaan painamalla F10), jonka päälle vielä save_settings.
  • Hatari nauttii sekin matalammasta tarkkuudesta, kun pikselien tuplausta ei tarvitse tehdä ohjelmallisesti. Aidomman tuntuman sai vielä, kun viritteli hieman pystyvenähtäneen moodin (ST:ssä ei ole neliöpikselit). Nopeutusta saa hitaalla koneella poistamalla borderit käytöstä.

Ja sitten se matalan tarkkuuden tilojen tekeminen helposti: tämän ohjeen perusteella ei pitäisi olla liian haastavaa. Komento gtf tuottaa kauniita modelinejä, joita voi kokeilla xrandr:llä ennen kuin niitä laittaa xorg.confiin. Olin totaalisen hämmästynyt, kun PowerBookin sisäinen näyttö tuntui kelpuuttavan melkein minkä hyvänsä satunnaisen 60 Hz tilan. Nyt on pelikäyttöön 424×286, eli suunnilleen kolminkertaiseksi venytetyt pikselit (näytön oma tarkkuus on 1280×854). Pehmeää vieritystä yritin saada aikaan 50 Hz tiloilla, mutta ne eivät tuntuneet asiaan vaikuttavan.

Viritellessä kannattaa muistaa se, että jos emulaattori tukee Xvideota, niin pienemmän reson käyttämisestä ei ole kuin haittaa, sillä video-overlayn tekemä skaalaus osuu huonommin pikseleihin. On myös hyvä sovitella matalia tarkkuuksia maksimitarkkuuden puolikkaiksi tai kolmanneksiksi, etteivät pikselit venähtele epätasaisesti. Kaikkein rumimman lopputuloksen saa silloin, kun näyttö skaalaa grafiikan huonosti, jonka päälle emulaattori tekee vielä oman skaalauksensa.

Add comment February 24th, 2011

Emulaattorit ja PPC-Linux

Tulipa kokeiltua emulaattoreitakin kaiken muun ohella. Laatu vaihtelee hyvästä huonoon ja fullscreen on monestikin ongelma, joko kuvasuhteen tai -koon osalta. Jos emulaattoreissa on JIT-kääntäjiä, niin ne ovat useimmiten vain Intelille, joten kurjuus kumuloituu. OpenGL-ruutumoodit ovat käyttökelvottoman hitaita keskimäärin, joten skaalattuja fullscreen-tiloja ei saa sitäkään kautta ilmaiseksi.

  • MS-DOS. DOSBox jytää hyvin ja osaa jopa oikean kuvasuhteen fullscreenissä. Emulointi vastaa ehkä nopeaa 386-konetta. VESA-moodien värit menevät väärin.
  • PC. Windows XP asentui yön yli Qemuun ja on lähinnä kuriositeetti, Windows 98 tms. voisi jo toimiakin.
  • Mac. Mac-on-Linux asentui suoraan paketinhallinnasta, mutta framebuffer-kikkailujeni takia ruutumoodien asennuskikkare sekoittaa näytön. Jos pitää valita MOL:n ja kiihdytetyn X:n välillä, niin ei tarvi pitkään miettiä. Saattaa olla ihan jostain pikku säädöstäkin kiinni.
  • MSX. Riittävän nopea OpenMSX:llä. Laitoin emulaatiotarkkuudeksi rivin, mikä ehkä jotain nopeutti. Kuvasuhde venähtää fullscreenissä, mutta sen jälkeen se onkin hyvin linjassa MSX:n läsähtäneen kuvan kanssa 🙂
  • Commodore 64. VICE toimii, tosin hienouksia ei voi laittaa päälle. Ääniajuriksi piti valita uss, muuten pätki alituiseen.
  • Megadrive. Dgen ei toimi ja Xmess on nimensä mukainen. Ehkä rikki, ehkä vaan vaikea konffattava. PicoDriven sorsat ovat levällään pitkin maailmaa, joten sitä ei voi oikein edes kääntää itse. Seuraavan Gens/GS:n pitäisi olla multiplattis, eli jotain toivoa ainakin on.
  • SNES. SNES9x ajelee ainakin Bombermaneja hyvin ikkunassa. Tuplapikseleillä menee tökkiväksi, mutta kun laittaa fullscreeniksi 640×480, niin zoomaamatonkin akkuna on edelleen kohtuullisen kokoinen. Ainakin tällä koneella ALSA toimi paremmin ääniajurina kuin Pulseaudio. edit: Kun ottaa äänasetuksista pois synkronoinnin, niin vauhti kasvaa huomattavasti.
  • Amiga. E-UAE jaksaa emuloida A500-tason rautaa kohtuullisesti, riippuen hyvin pitkälti ohjelmasta. Demoja sain ajettua pienennetyssä ikkunassa jopa ihan täydellä frameratella, mutta esim. BC Kid toimi vain frameskipin kanssa. Äänet pitää laittaa 8-bittisiksi tai tulee vain suhinaa. Näytiksi .uaerc:ni. Fullscreen on muuten (fn-)F12-s.
  • Atari ST. Tässä listassa Hatari on selvästi paremmasta päästä. Nitkuttamista keksin oikeastaan vain äänien satunnaisesta kakomisesta ja siitä, että graffat eivät ole aivan oikeassa skaalassa.
  • ScummVM. Parin pelin perusteella futaa hienosti, tosin kerran tilttasi fullscreenistä palatessa.

Raadin kiitokset menevät siis DOSBoxille, OpenMSX:lle, Hatarille ja ScummVM:lle, sekä varauksin VICElle, E-UAE:lle ynnä SNES9x:lle. USB-joypadit näyttävät muuten toimivan ihan heittämällä ainakin VICEn ja SNES9x:n kanssa.

Add comment February 15th, 2011

Sitten vielä Java ja PPC

Nyt ei ole paljon kurjuutta parempaa tarjolla. OS X:n puolella Java-appletteja voi sentään ajaa välttävästi selaimissa, mutta nopeus on heikko – SciMark 2.0:n mukaan kymmenes pöytä-PC:n tehoista (100 pistettä vs. 1112). Näkyi hyvin myös Processing-appletteja ajaessa. Linuxissa ei ylletä edes siihen: Intelillä voi ajaa puoliksi kelvollista sun-java6-pluginia, mutta PPC:lle sitä ei ole. Vapaa vaihtoehto icedtea ei ole ajan tasalla ja pyörii erittäin hitaasti (5,7 SciMarkia!). IBM teki aikanaan optimoitua virtuaalikonetta myös PPC-Linuxille, mutta se ei toimi enää Firefox 3:n kanssa.

edit: Nähtävästi koko kuva ei ollut vielä ihan tässä. Oletuksena icedtea käyttää nimittäin server-virtuaalikonetta, joka on kaikista hitain. Cacao antoi appletviewerissä jo 90 ja shark puolestaan 105 pistettä. Cacao ei tuntunut toimivan selainpluginissa, mutta shark kyllä. Eli paikkaan /etc/java-6-openjdk/jvm.cfg shark ensimmäiseksi loppupään listaan ja johan nopeutuu. Processingilla tehdyt appletit eivät toimi edelleenkään, mutta monenlaista muuta kyllä ja huomattavasti rivakammin.

Add comment February 12th, 2011

JavaScript ja PPC

Selainvalmistajat ovat joko hylänneet tai hylkäämässä PPC-alustat, luonnollisestikin johtuen pienestä käyttäjäkunnasta. Opera 11, Firefox 4 tai Chrome eivät toimi PPC:llä missään käyttöjärjestelmässä. Lapsipuolen asemassa on oltu itse asiassa jo pitkään, sillä uudet tehokkaat JavaScript-moottorit eivät nekään toimi kuin käytännössä Intelillä. Normiselailu (lukuun ottamatta tietysti onnetonta Flashia) hoituu hyvin, mutta js-intensiiviset sivut, Google Docs tärkeimpänä, voivat olla käyttökelvottoman hitaita etenkin ikääntyneellä koneella. Paljon on kiinni pelkästä selaimesta, joten laitoin kolme Linux- ja OS X -selainta SunSpiderin hiostukseen G4/1,33-PowerBookillani. Lopputulos paljastaakin yhtä sun toista (nopeimmat boldattu):

OS X 10.5

  • Safari 4.0.2: 4649 ms
  • Safari 5.0.3: 5610 ms
  • FireFox 3.6.13: 8323 ms
  • Opera 10.63: 8853 ms

Ubuntu 10.04

  • Opera 10.63: 4791 ms
  • Konqueror/WebKit: 5343 ms
  • FireFox 3.6.13: 8812 ms
  • Konqueror/KHTML: 17423 ms

Oikean selaimen valitsemalla saa siis kaksinkertaisen nopeuden, mikä ei näillä tehoilla ole suinkaan pikkujuttu. Mielenkiintoisena yksityiskohtana Opera 10.6:n nopeutettu js-moottori ei näemmä koskaan saapunut PPC-OS X:lle, mutta Linuxissa selain onkin puolestaan nopein (sen vasteajat ovat muutenkin parhaat Linuxissa noin perstuntumalla). Konqueror on silkka etana oletusmoottorillaan, mutta WebKitiin vaihtamalla vauhti paranee hurjasti, aivan Operan tuntumaan. Vertailun vuoksi 2,66 GHz Intel-Mäkki antoi Safarilla lukemaksi 261 ms ja Chromium 3,3 GHz Linux-PC:ssäni 240, joten kauaksi tässä on jo pudottu joka tapauksessa kärjestä – vielä enemmän kuin mitä pelkkä prosessoriteho antaisi odottaa.

2 comments February 9th, 2011

iLaitteen äärellä

Uusi iPod Touch on ollut yllättävän kovassa käytössä, ja softia on tullut asenneltua ja osteltua muutamia kymmeniä. Kun olen käyttänyt jonkun verran rinnakkain toisen sukupolven mallia ja tätä neljännen sukupolven edustajaa, niin kehitys on tullut selväksi: tarkempi näyttö, nopeampi suoritin, kamera, parempi muotoilu ja moniajo ovat käytännössäkin – eikä pelkästään mainospuheissa – tärkeitä. App Store on kätevä, mutta nykyään tunnetusti täynnä kaikenlaista enemmän ja vähemmän onnistunutta tuotosta, joten hyödyllisen/hauskan sisällön löytäminen on haastavaa. Joitakin omia poimintojani (ehdottakaa vaikka kommenteissa, jos jotain oleellista puuttuu):

  • Facebook. Ilmainen kätevä käyttöliittymä iLaitteille. Oleellisesti parempi kuin selaimessa.
  • Skype. Tukee nykyään videopuhelujakin ilmeisen toimivasti.
  • YLE Areena. Yllättävän onnistunut käyttöliittymä Areenan sisältöihin. Videot ovat pykälän matalalla tarkkuudella kylläkin.
  • iBooks. Klassikkoja tuntuu löytyvän ilmaiseksi varsin mukavasti.
  • Camera+. Huomattavasti Applen vakiosoftaa monipuolisempi kamera. Välillä yskii käynnistyksessä, mutta toisella kerralla lähtee aina viimeistään.
  • Plants vs. Zombies. Toimii kosketusnäytöllä kuin häkä. Viime vuoden parhaita pelikokemuksia.
  • Zen Bound (1 & 2). Rauhallista palikoiden sitomista narulla. Plussana kauniit grafiikat.
  • Angry Birds. Tätä ei tarvinne enempää selitellä.
  • Canabalt. Yllättävän koukuttava ja tyylikäs, vaikka onkin viime kädessä vain simppeli hyppely.
  • Cut the Rope (sekä Holiday Gift). Viime joulun tehokas ajanhukka. Hyvä esimerkki siitä, miten kosketusnäyttöä todella hyödynnetään.
  • Smurfs’ Village. Periaatteessa silkkaa lapsille sopivaa grindausta, mutta…
  • Fieldrunners. Jälleen yksi tornipuolustus, mutta hyvin tehty – ja vaikea!
  • Osmos. Tunnelmallinen taidepeli, jossa kasvatetaan omaa eliötä isommaksi.

“Ihan jees” -sarjaan lisäisin vielä muutaman muunkin, kuten Doodle Jump, Fruit Ninja, Twin Blades, Orbital, Peggle ja Soosiz. Moni noistakin tuntuu tykkäävän, mutta itselleni eivät ihan täysillä kolahtaneet.

1 comment January 24th, 2011

Next Posts Previous Posts


Kommenttien virta

Aiheet