r   e   k   l   a   m   a
r   e   k   l   a   m   a

O takiej przeszłości się nie zapomina: emulacja Amigi na Raspberry Pi

Strona główna AktualnościOPROGRAMOWANIE

Zdobyliście już swoje upragnione Raspberry Pi 2, znaleźliście dla niego właściwe oprzyrządowanie. Na biurku leży niewielki komputerek wielkości paczki papierosów, którego jeden tylko rdzeń CPU jest szybszy niż Pentium III, a rdzeni takich jest przecież cztery. Nie można też zapomnieć o zintegrowanym układzie graficznym, o możliwościach niewyobrażalnych w 1999 roku. Co teraz? Oryginalna Malina nie nadawała się do użytku jako komputer ogólnego zastosowania, ale była interesującym edukacyjnym gadżetem, ciekawą zabawką dla elektroników, znalazła zastosowanie jako centrum multimedialne – i jako emulator starego sprzętu. Mogliśmy bez problemu uruchomić na niej gry dla 8-bitowych komputerów czy konsol takich jak NES, SNES czy MegaDrive, ale płynna emulacja nowszych platform była poza jej zasięgiem. W drugiej części naszego poradnika pokażemy, że Raspberry Pi 2 z odpowiednim oprogramowaniem z łatwością poradzi sobie też z Amigą 500/600.

Overclocking: potrzeba szybkości

Raspberry Pi 2 bazuje na czipie Broadcom BCM2836, z czterema rdzeniami Cortex-A7 taktowanymi zegarem 900 MHz. Do najbardziej wymagających zastosowań, takich jak emulacja całkowicie przecież obcych architektur mikroprocesorowych to nie wystarczy. Na szczęście całkiem łatwo możemy z Maliny wycisnąć więcej – twórcy zadbali o to, by podkręcanie sprzętu odbywało się w dobrym, uniksowym stylu, po prostu przez edycję pliku tekstowego kontrolującego firmware komputerka. Ten plik to /boot/config.txt – już mieliście z nim nieco do czynienia podczas konfigurowania wyjścia wideo.

Uwaga: rekordziści zdołali podkręcić zegar Raspberry Pi 2 do nawet 1500 MHz, ale wiązało się to z naruszeniem wszelkich zabezpieczeń i ograniczeń, zatem nie polecamy takich prób – nawet jeśli uzyskacie stabilną pracę, znacznie skrócicie czas życia Maliny. Normalnie firmware oferuje pięć bezpiecznych trybów podkręcania, w których monitorowane są temperatura rdzenia i obciążenie procesora, a taktowanie i napięcie dynamicznie modyfikowane. Włączyć jeden z takich bezpiecznych trybów można za pomocą narzędzia raspi-config – uruchamiamy go w terminalu komendą sudo raspi-config, a następnie w menu wybieramy pozycję 8 – Overclock. Takie bezpieczne tryby niekiedy jednak źle wpływają na jakość emulacji, nierzadko powodując „przycinanie” emulowanej gry. Jeśli więc dysponujecie dodatkowymi radiatorami i porządnym zasilaczem, lepiej o podkręcanie zadbać samodzielnie.

r   e   k   l   a   m   a

Otwieramy plik opcji firmware poleceniem sudo nano /boot/config.txt, a następnie na jego końcu dopisujemy następujące pary właściwość-wartość (oczywiście nie trzeba przepisywać komentarzy):

arm_freq=1000 #częstotliwość rdzenia ARM w MHz
sdram_freq=500 #częstotliwość pamięci operacyjnej w MHz
core_freq=500 #częstotliwość GPU w MHz

over_voltage=2 #zwiększenie napięcia rdzeni (z 1,2 do 1,25 V)
temp_limit=85 #ochrona przed przegrzaniem
force_turbo=1 #wyłącza dynamiczne skalowanie zegarów
boot_delay=1 #chroni przed uszkodzeniem karty pamięci w trybie turbo

Warto na tym etapie zmienić jeszcze ilość pamięci udostępnionej układowi graficznemu – domyślne 64 MB możemy powiększyć do nawet 512 MB, co przyda się później, przy emulacji wymagających konsol, takich jak PlayStation. W tym celu dopisujemy do /boot/config.txt wiersz

gpu_mem=512

Z pełną dokumentacją wszystkich opcji konfiguracyjnych firmware możecie zapoznać się na stronach elinux.org. A jaki jest efekt podkręcania? Kilka testów z phoronix-test-suite pokazało wyniki lepsze o nawet 25% – to często przekłada się na różnicę między płynną grą, a klatkowaniem.

Malinowa Amiga

Emulacja starych architektur sprzętowych zawsze była wyzwaniem – wiele tych klasycznych maszyn nigdy nie doczekało się publicznego wydania dokumentacji, to co o nich wiemy często pochodzi z pracy ochotników, mozolnie odtwarzających metodami odwrotnej inżynierii ich działanie i implementujących je na zupełnie innej architekturze sprzętowej. A jednak pomimo utrudnień tak technicznych jak i prawnych (trzeba pamiętać, że oryginalny kod systemowego oprogramowania jest na mocy konwencji berneńskiej wciąż chroniony prawem autorskim), udało się osiągnąć bardzo dużo – dzisiejsze emulatory pozwalają na uruchamianie klasycznych gier z lepszą grafiką i dźwiękiem, ułatwiają zapisywanie stanów gry, a nawet dodają funkcje grania w trybie multiplayer.

Jak się przekonacie, nawet Raspberry Pi pozwoli na skorzystanie z tych ulepszeń. Co ważne, powstają dziś emulatory pisane od podstaw z myślą o Malinie, a nie tylko rekompilowane na architekturę ARM, dzięki którym możliwe się staje uzyskanie znacznie lepszej wydajności. W oficjalnych repozytoriach systemu Raspbian znajdziemy gotowy emulator Amigi 500/600, dobrze znany z peceta fs-uae z dodatkowymi nakładkami. Nie warto na niego jednak tracić czasu – nie zapewni on płynnej rozgrywki nawet na Raspberry Pi 2.

Najwydajniejszym emulatorem Amigi dla Maliny jest obecnie uae4arm-rpi, oferujący m.in. optymalizację kodu Just-In-Time i wsparcie dla interfejsu grafiki DispmanX, korzystającego ze sprzętowej akceleracji GPU tego komputerka. Projekt rozwijany jest na Git Hubie, a skompilowaną na Raspberry Pi 2 binarkę znajdziecie tutaj.

Przed zainstalowaniem emulatora należy w systemie zainstalować biblioteki libguichan-sdl i libguichan, poleceniem sudo apt-get install libguichan-sdl-0.8.1-1 libguichan-0.8.1-1. Jeśli nasz wyświetlacz to obsłuży, warto zmienić częstotliwość odświeżania na 50 Hz, podając w pliku /boot/config.txt parametry:

hdmi_group=1
hdmi_mode=31

Pobrane archiwum rozpakowujemy poleceniem bzip2 -dc uae4arm-rpi-chips-0_4.bz2 | tar xvf - (albo np. za pomocą mc, Midnight Commandera).

Uruchamiamy emulator wchodząc w konsoli do katalogu uae4arm-rpi i wydając polecenie ./uae4arm.

Konfiguracja uae4arm jest bardzo prosta: panele menu dotyczą kolejno ścieżek dostępu do Kickstartów i plików konfiguracyjnych, typu emulowanego procesora (w teorii nawet 68040 z Amigi 4000, ale nie liczcie na zbyt wiele), czipsetów graficznych, konfiguracji pamięci, dyskietek, twardych dysków, wyświetlania, dźwięku, kontrolerów i zapisanych stanów gry. Aby uzyskać standardową Amigę 500, należy wybrać ROM (Kickstart) w wersji 1.3, Chipset: OCS, RAM: 512 KB pamięci Chip i 512 KB pamięci Slow (było to standardowe rozszerzenie do Amigi montowane od spodu komputera.

Drugim wartym polecenia emulatorem jest uae4all2, rozwijany na bazie kodu uae4arm. Linki do jego najnowszej wersji znajdziecie na forach Raspberry Pi. Może on być interesujący dla posiadaczy Malinek pierwszej generacji, w archiwum znajduje się binarka uae4all-rpi1, skompilowana właśnie na starsze komputerki (oraz najnowsze Raspberry Pi Zero, jakby ktoś takie już miał). Niestety brakuje jej optymalizacji JIT, odnotowaliśmy też problemy z dźwiękiem.

Kilka słów o licencjach

Niestety emulatory to nie wszystko. Nie uruchomicie praktycznie żadnej gry czy dema z Amigi bez obrazu Kickstartu, czyli firmware tego komputera. Bez naruszenia prawa możecie wejść w jego posiadanie na dwa sposoby – albo zgrywając binarny obraz ROM ze swojej starej Amigi, albo też kupując za 10 euro podstawowy pakiet Amiga Forever (zawierający Kickstarty i inne oprogramowanie) od obecnego posiadacza praw do firmware'u Amigi, firmy Cloanto. Choć wiele osób skusi zapewne Zatoka Piratów, należy podkreślić, że te 10 euro pójdzie na dobrą sprawę – Cloanto wiele robiło i robi dla amigowej społeczności, starając się o zachowanie legalności emulowania tego kultowego komputera nawet w najtrudniejszych czasach.

Kwestia licencjonowania tych wszystkich amigowych gier, obficie serwowanych przez serwisy z oprogramowaniem typu abandonware niestety dla zwykłego użytkownika nie wygląda zbyt dobrze. Prawo nie rozpoznaje takiej kategorii jak „oprogramowanie porzucone przez producenta”, z perspektywy ustawy nie ma różnicy między pobraniem z Sieci takiego klasyka jak Shadow of the Beast i takiej nowości jak Fallout 4. Nienaruszające prawa źródła gier na Amigę są dwa – albo poprzez samodzielne zgranie obrazu oryginalnych amigowych dyskietek, albo przez sięgnięcie po amigowe oprogramowanie rozprowadzane jako freeware/shareware. Godnym polecenia źródłem takich gier, dem i programów użytkowych jest Ami Sector One.

Przydałby się szczęśliwy drążek

Po zdobyciu emulatora, amigowych Kickstartów i interesujących gier, pozostaje jedna nierozstrzygnięta kwestia – jak sterować większością gier? Najbardziej „retro” metodą byłoby podłączenie do Maliny klasycznego cyfrowego dżojstika przez złącze DB9, ale to już wymaga zabawy z elektryką i elektroniką oraz oprogramowania sygnałów dla szyny GPIO – zajęcie raczej dla bardziej zaawansowanych użytkowników. Do tej kwestii wrócimy w przyszłości.

Bez żadnej dodatkowej konfiguracji możecie jako dżojstik w uae4arm wykorzystać przewodowy gamepad do konsoli Super Nintendo. Wpinane do portów USB chińskie „klony” takich padów kosztują w Sieci niecałe 30 zł. Jeśli zaś chcielibyście skorzystać z pada bezprzewodowego, to najlepszym rozwiązaniem jest sięgnięcie po DualShocka 3 z PS3. Czemu nie z Xboksa 360? Niestety pad Microsoftu nie będzie działał bez specjalnego odbiornika bezprzewodowego (cena samego odbiornika to ok. 40 zł), zaś kabelek do jego ładowania, dostarczany wraz z konsolą, na nic się nie przyda – nie przesyła żadnych danych.

W wypadku DualShocka 3 nie tylko dostajemy działające połączenie po kabelku USB, ale też do łączności bezprzewodowej wystarczy kosztujący kilka złotych moduł Bluetooth. By go uruchomić, zainstalujmy wpierw zestaw niezbędnych bibliotek i narzędzi: sudo apt-get install bluez bluez-hcidump checkinstall libusb-dev libbluetooth-dev joystick.

By sprawdzić działanie modułu Bluetooth, wydajemy polecenie hciconfig – efekt wyglądać podobnie do tego.

Jeśli tak nie jest, moduł niestety nie został rozpoznany przez system i lepiej poszukać innego. Jeśli w komunikacie znajduje się słowo DOWN, należy jeszcze moduł „obudzić”, wydając polecenie sudo hciconfig hci0 up.

Kolejny krok to sparowanie modułu z gamepadem. Pomoże nam w tym narzędzie sixlinux, niestety niedostępne w repozytoriach Raspbiana. Jego kompilacja to jednak kilka chwil. Zrobimy to poleceniami

sudo apt-get install pyqt4-dev-tools
wget http://www.pabr.org/sixlinux/sixpair.c
gcc -o sixpair sixpair.c -lusb

W rezultacie w bieżącym katalogu znajdziemy program sixpair. Podłączamy gamepad do Maliny kabelkiem USB i wydajemy polecenie sudo ./sixpair. W efekcie powinniśmy otrzymać komunikat informujący o powodzeniu całej operacji.

To już prawie koniec – pozostaje jeszcze sięgnąć po menedżera peryferiów PS 3 – QtSixA. Jego też będziemy musieli skompilować. Sięgniemy po źródła nie z Sourceforge (te są obarczone poważnym błędem, uniemożliwiającym pomyślną kompilację), ale z GitHuba. W tym celu należy wydać polecenia:

wget https://github.com/falkTX/qtsixa/archive/master.zip
unzip master.zip
cd qtsixa-master/sixad
make
sudo mkdir -p /var/lib/sixad/profiles
sudo checkinstall

Ostatnie polecenie zbuduje z wyników kompilacji pakiet Debiana (Raspbiana) i zainstaluje go w systemie. Teraz, by sprawdzić, czy wszystko działa, należy uruchomić demona sixad poleceniem sudo sixad --start, a następnie nacisnąć przycisk PlayStation na padzie. Jeśli poczujecie wibracje, to znak, że wszystko działa. Wówczas należy demona sixad dodać do listy uruchomieniowej poleceniem sudo update-rc.d sixad defaults i zrestartować system (polecenie reboot).

To już naprawdę wszystko – domyślny układ przycisków na padzie możecie modyfikować w ustawieniach Input emulatora. Trzeba jedynie zapamiętać, że trójkąt to X, kwadrat to Y, kółko to A, zaś krzyżyk to B.

A co z konsolami?

Amiga nie jest największym wyzwaniem dla Raspberry Pi, choć ze względu na jej popularność w naszym kraju, właśnie Przyjaciółką zajęliśmy się na początku. Podkręcona Malina poradzi sobie też z emulacją oryginalnego PlayStation i Nintendo 64, maszyn znacznie wydajniejszych. Tą kwestią zajmiemy się w trzeciej części cyklu, przyglądając się bliżej oprogramowaniu EmulationStation oraz projektom takim jak retropie i recalbox. W następnej zaś części… spodziewajcie się niespodzianki.

© dobreprogramy
r   e   k   l   a   m   a
r   e   k   l   a   m   a

Komentarze

r   e   k   l   a   m   a
r   e   k   l   a   m   a
Czy wiesz, że używamy cookies (ciasteczek)? Dowiedz się więcej o celu ich używania i zmianach ustawień.
Korzystając ze strony i asystenta pobierania wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.