Press "Enter" to skip to content

Kompilácia FUSE emulátora, II.

Rozbehaniu Free Unix Spectrum Emulatora pod Linuxom som sa už raz venoval, ale keďže doba odvtedy pokročila, pozrieme sa tomu znova na zub.

Najrozšírenejšie linuxové distribúcie su založené na Debiane/Ubuntu, preto opäť tento návod smeruje skôr na ne, ale keď budete postupovať analogicky, verím že sa vám to podarí aj v alternatívnych distribúciách.

Na tom, že budete potrebovať prostredie pripraviť na kompiláciu, sa od minula nič nezmenilo, takže začneme tým, že si doinštalujeme potrebné veci (ak ich už nemáme). Ja už z praxe viem, že pre kompilačný proces samotný treba minimálne balíky build-essential, autoconf, automake, autotools-dev, pkg-config a libtool. Možno netreba všetky pre skompilovanie FUSE, ale nič sa nestane ak si ich doinštalujete:

sudo apt install build-essential autoconf automake autotools-dev pkg-config libtool

Občas treba aj flex, bison, byacc, či m4, takže ak doinštalujete aj tie, nemalo by vás už nič prekvapiť, keď budete kompilovať hocičo iné.

Ako druhý krok potrebujeme vyriešiť závislosti samotného FUSE. Keď sa pozrieme na jeho domovskú stránku zistíme, že bezpodmienečne sú potrebné zobrazovacie knižnice SVGAlib, SDL alebo GTK+ a knižnica libspectrum. Tá je tiež z dielne FUSE a osobne nechápem prečo ju už roky vyčleňujú zvlášť, keď nič iné ako FUSE ju nepoužíva a jej funkcie sú viac menej určené len pre FUSE. Je tak zbytočne ďalšou závislosťou, ktorú je potrebné skompilovať ešte pred FUSE. V základe ešte aj trpí nešvárom, na ktorý som úplne alergický a je dobré si ho odstrániť ešte pred kompiláciou, viď poznámky nižšie.

Podľa informácií na stránke sú ďalšie knižnice voliteľné, ale v praxi si tým osekáte funkcie FUSE, takže je lepšie si ich nainštalovať. libspectrum samotná vyžaduje GLib, audiofile, libsamplerate0, libzlib, libbzip2 a libgcrypt. FUSE potom ešte navyše chce libpng, libxml2 a libjsw (len ak chcete pripájať reálny joystick).

Je toho pomerne dosť a tak si to hneď doinštalujeme dobre skoncipovaným príkazom, ktorý sa ešte odvíja podľa toho, ako chcete FUSE zobrazovať. Ak nemáte X-Windows, potrebujete SVGAlib, inak môžete použiť SDL alebo GTK+. S GTK+ však dostanete okienkové rozhranie, takže sa vyberieme touto cestou. Každopádne ostatné knižnice si môžete doinštalovať tiež, keby ste potrebovali časom FUSE prekompilovať pre iné rozhranie.

Pre prehľadnosť som to rozdelil na tri riadky, ale samozrejme to môžete odpáliť aj ako jeden príkaz:

sudo apt install libsdl1.2-dev libgtk-3-dev libglib2.0-dev
sudo apt install libaudiofile-dev libsamplerate0-dev zlib1g-dev libbz2-dev
sudo apt install libgcrypt20-dev libpng12-dev libxml2-dev

Úplne nepovinnou súčasťou sú fuse-utils, ktoré sa kompilujú zvlášť a nie sú potrebné pre beh emulátora. Obsahujú však pár nástrojov, na ktoré sa odkazujú rôzne návody na spektristických fórach, takže je dobré si ich skompilovať a nainštalovať tiež. Vyžadujú knižnicu libjpeg, takže ju pridáme:

sudo apt install libjpeg-dev

V tomto bode by ste už mali mať v počítači všetko potrebné, takže môžete pristúpiť k stiahnutiu zdrojákov. V dobe písania článku boli aktuálne tieto verzie: libspectrum 1.4.1, fuse emulator 1.5.0, fuse utils 1.4.0. Po stiahnutí zdrojákov je potrebné ich rozbaliť príkazom tar xvfz meno-archivu.tar.gz a potom v jednotlivých adresároch pospúšťať staré známe kombo:

./configure
make
sudo make install

Týmto by ste mali mať inštaláciu hotovú, ale FUSE sa distribuuje len so základným súborom ROMiek a tak je dobré si ich doplniť. Nájdete ich napríklad u mňa. Stiahnite, rozbaľte a tie čo vám chýbajú nakopírujte k ostatným do “/usr/local/share/fuse.”

Ďalšie poznámky:

(1) Nešvár, ktorý som spomínal vyššie pri knižnici libspectrum, vznikol vďaka Kendallovi, generálnemu pánu bohovi celej Zemegule a priľahlých galaxií. Ide o to, že FUSE samozrejme podporuje SNA súbory. Pôvodne existoval len 48K SNA a jeho rozšírenie aj na 128k vzniklo vraj v ruských zemiach. Kendall tvrdil, že sa teda má vzťahovať len na ruské klony a v praxi to znamená, že ak si do FUSE nahráte 128K SNA, prepne sa vám počítač na Pentagon 128k. Je to samozrejme úplná kravina, pretože 128k SNA sa stal defacto štandardom a je využívaný úplne bežne aj s inými 128k mašinami.

Riešením je upraviť si knižnicu libspectrum a vďaka Martinovi Bórikovi vieme ako. Pred kompiláciou libspectrum si pri verzii 1.4.1 nájdite súbor sna.c a upravte riadky 88 a 181 tak, že definíciu

LIBSPECTRUM_MACHINE_PENT

prepíšete na

LIBSPECTRUM_MACHINE_128

Výsledkom bude, že pri spúšťaní 128k SNA súborov sa vám zapne klasické 128k Spectrum, čo je určite rozumnejšia, pohodlnejšia a praktickejšia varianta, ako neštandardný Pentagon.

(2) Pred kompiláciou si ./configure skript detekuje aké máte nainštalované knižnice a implicitne použije GTK3, ak ju máte nainštalovanú spolu s GTK2. Ak z nejakých dôvodov potrebujete staršiu GTK2, podhoďte skriptu parameter – -disable-gtk3, čiže príkaz bude vyzerať takto:

./configure --disable-gtk3

(3) Podobne je to s SDL. Ak máte nainštalované vedľa GTK aj SDL a chcete SDL rozhranie, treba to skriptu povedať parametrom – -with-sdl:

./configure --with-sdl

(4) Doplnené! – Zabudol som spomenúť, že v niektorých distribúciách z mne neznámych dôvodov FUSE natvrdo očakáva knižnicu libspectrum v ceste /usr/lib/. Defaultne sa ale inštaluje do /usr/local/lib/.
Nikdy som nepátral prečo sa toto deje, ale už to tak je roky. Ak sa vám stane, že po nainštalovaní ste ten prípad, že vám FUSE kráka o chýbajúcej libspectrum, spravte si pod rootom symlink:
ln -sf /usr/local/lib/libspectrum.so.8.7.11 /usr/lib/libspectrum.so.8

(5) Doplnené! – FUSE trpí ešte jednou blbôstkou. Namapované hotkeys sú niekedy neergonomické, napríklad NMI vôbec nemá hotkey. Dá sa to ľahko premapovať pred kompiláciou. Nájdite v zdrojákoch súbor menu_data.dat, je to bežný texťák. V ňom si môžete pomeniť klávesy, len pozor na štrukúru, aby ste si tam niečo nepokašlali. Napríklad ja som si domapoval k NMI klávesu F12. Ďakovné dopisy posielajte ub880d, keďže on túto metódu objavil.

No a to je pre dnešok všetko. Niekedy nabudúce si konečne ukážeme, ako sa dá skompilovať pracovná verzia zo SVN.

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *