1. SPIDER'S WEB
  2. Tech
  3. Oprogramowanie

Oto ProjectPSX - emulator PlayStation napisany w C#

Moc obliczeniowa współczesnych komputerów pozwala na emulację coraz bardziej zaawansowanych sprzętów. To szansa dla miłośników konsol retro, które, nawet jeśli zdobędziemy fizycznie, wciąż sprawiają problemy współczesnemu użytkownikowi.

Oto ProjectPSX – emulator PlayStation napisany w C#

Dlaczego? Choćby dlatego, że elektroniczne komponenty ulegają starości, zaśniedzeniu, baterie i kondensatory puchną. Często włączenie długo nie włączanego sprzętu kończy się spaleniem go doszczętnie. A co po włączeniu? Mając nowy telewizor 4K często nie mamy do czego podłączyć - starsze urządzenia do grania mają wyjścia analogowe, potrzebujemy przejściówki. Aha, no i pad się zepsuł od lat uderzania w klawisze, a nowego nie kupimy - nie ma ich od dawna w sprzedaży.

Z pomocą może przyjść emulacja starszych sprzętów

To właśnie emulacja pozwala na uruchamianie np. gier z Xbox 360 oraz oryginalnego Xboksa na Xbox One. Tak naprawdę Xbox One nie uruchamia tych gier: uruchamia je emulowany Xbox 360 lub Xbox. Xbox One ma na tyle dużą moc obliczeniową że jest w stanie „udawać” cały hardware poprzedniej generacji sprzętów i uruchomić ich system operacyjny (w którym z kolei uruchamiana jest gra…).

Emulacja jest to sposób odtworzenia zachowania i działania systemu (sprzętowego lub software’owego) w innym programie lub urządzeniu. Dzięki temu możemy odtworzyć działanie starszego sprzętu na nowszym sprzęcie lub oprogramowaniu. Ma to wiele zastosowań poważnych, na przykład pozwala używać potrzebnego nam wciąż oprogramowania, które już nie jest wspierane lub nie uruchamia się na nowoczesnym systemie operacyjnym.

Emulator PSX w .NET

Platforma .NET i język C# są mi bliskie i z zainteresowaniem śledzę ich rozwój, w szczególności multiplatformowej odmiany .NET Core. Interesuję się również emulacją starych sprzętów. Tym bardziej ucieszyłem się, gdy dowiedziałem się, że powstał emulator Playstation (PSX) napisany w całości w C# i .NET. Niestety nie wykorzystuje on .NET Core i używa Windows Forms - przez co nie jest przenośny w łatwy sposób na inne platformy. Ponieważ jednak cały kod źródłowy ProjektPSX znajduje się na GitHub, nic nie stoi na przeszkodzie, aby przerobić go w ten sposób. Autor w pytaniach i odpowiedziach w dokumetacji zresztą przyznaje, że sam jest tym zainteresowany.

To co widać po prawej stronie to mapa pamięci tekstur - można ją wyłaczyć klawiszem TAB

Emulator jest we wczesnej fazie - jednak uruchamia już gry. Musimy mieć własny BIOS konsoli i obraz dysku z grą (oba można uzyskać legalnie, posiadając fizycznie konsolę i gry). Emulator uruchamia gry z wydajnością około 120 klatek na sekundę, jest więc (czego można się było spodziewać), szybszy od oryginalnego sprzętu.

Przejrzenie kodu emulatora to doskonała okazja do nauczenia się, jak pisać emulatory i… jak działał oryginalny sprzęt. Autor oparł się o dokumentację sprzętu i jak pisze na stronie GitHub, wcześniej bawił się w emulowanie innych sprzętów robiąc to w celach edukacyjnych. Rzeczywiście w jego repozytorium można znaleźć m.in. emulator Nintendo Game Boy.

Emulacja, mówiąc wzniośle, to ostateczny triumf koncepcji programowania obiektowego - odzwierciedla ona implementowany obiekt na tyle dobrze, że może zastąpić jego fizyczną instancję. Dzięki emulatorom gramy np. w gry z NES i SNES na Nintendo Switchu - a emulowanych sprzętów, które będą w ten sposób ocalone od zapomnienia, będzie z każdą dekadą coraz więcej.