Daj się poznać

Daj się poznać - logo

Już od dłuższego czasu po głowie chodziła mi myśl stworzenia własnego zakątka w sieci - strony gdzie mógłbym dzielić się moimi projektami które rozwijam w wolnym czasie, pisać o problemach z którymi się spotkałem i jak je rozwiązałem. Takie narzędzia jak Twitter czy Mikroblog są fajnymi miejscami łączącymi programistów, ale nie są stworzone do publikowania dłuższych treści (natomiast doskonale nadają się do podlinkowania swojego wpisu na blogu).

Przed założeniem tej strony zawsze powstrzymywały mnie różne rzeczy - a to nie mam serwera i domeny, a to nie wiem jaki silnik użyć czy też po prostu nie miałem czasu aby usiąść i zabrać się za to wszystko.

Początek

Zainspirował mnie felieton Macieja Aniserowicza o prowadzeniu bloga programistycznego, a impulsem do działania był wpis informujący o rozpoczęciu konkursu Daj się poznać. Tak się składa, że natknąłem się na blog Maćka 6 lat temu gdy organizował pierwszą edycję tego konkursu. Mimo iż wtedy tematyka bloga zbytnio nie interesowała mnie (.net) to blog zagościł w czytniku RSS i do dzisiaj jestem jego czytelnikiem.

Pamiętam, że w pierwszej edycji konkursu była dosłownie garstka uczestników i bardzo spodobała mi się seria o osdev Łukasza Sowy, gdyż interesowałem wtedy tym tematem, a na polskiej scenie takich artykułów było mało. Sam miałem pomysł na zgłoszenie swojego projektu, ale niestety na samym pomyśle się skończyło.

Projekt na konkurs

W tej edycji na konkurs zgłosiłem projekt który zacząłem pisać kilka miesięcy wcześniej w ramach oderwania się od pracy (inna technologia i całkowicie inna dziedzina).

Projekt nazywa się Avocado i jest to emulator konsoli Playstation.

To nie jest moja pierwsza styczność z emulacją - moim poprzednim dużym projektem był AnotherNES, czyli emulator konsoli znanej w Polsce pod nazwą Pegasus. Projekt rozwijałem na przestrzeni kilku lat z bardzo dużymi przerwami (zacząłem jeszcze w liceum, skończyłem na drugim roku studiów, gdzie posłużył jako zaliczenie programowania w C++). Było wszystko co lubię - stary sprzęt, assembler, trochę inżynierii wstecznej, programowanie niskopoziomowe i rzeczy które lubię mniej ale okazały się fajnym wyzwaniem: optymalizacja, aby już ponad 30 letnia 8-bitowa konsola z procesorem niewiele ponad 1.5MHz działała płynnie na laptopie sprzed dwóch lat, czy też kompilacja programu na platformy o których nie miałem wcześniej pojęcia że są w stanie podołać takiemu wyzwaniu jak emulacja - mowa tu o JavaScripcie za sprawą Emscripten.

AnothesNES

AnothesNES w pełnej okazałości

Tak, program napisany w C++ można skompilować do JavaScriptu i działa to zaskakująco dobrze. Na tyle dobrze, że po okrojeniu programu z zależności systemowych i bez żadnych optymalizacji emulator w przeglądarce działa w 60 fpsach, a da się też uruchomić przykładowo na telefonie.

LINK

NES to prosta 8-bitowa konsola - napisanie emulatora to nie jest aż tak trudny temat jak mogłoby się wydawać. Pomaga tutaj bardzo obszerna dokumentacja (na Visual6502 możemy zasymulować procesor i widzieć stany pojedynczych tranzystorów), jak i mnogość emulatorów tej konsoli - zawsze można zerknąć do źródła i podpatrzeć jakieś rozwiązanie. Napisać więc emulator to sprawa prosta. Napisać dobry emulator to trudne zajęcie - istnieją tysiące różnych gier na tę platformę i perfekcyjna emulacja każdej z nich jest sporym wyzwaniem.

Z Playstation jest inaczej. Emulatorów wspieranych do dzisiaj jest kilka, większość z nich oparta o stare i nieaktualne pluginy używające przestarzałych technologii. Chciałbym napisać coś co będzie w stanie konkurować z istniejącymi rozwiązaniami, nauczyć się nowych rzeczy i mieć projekt którym można się pochwalić.

Na koniec

Uff, rozpisałem się. Jak na razie to tyle - w kolejnych postach będę omawiał szczeguły projektu, zagadnienia związane z emulacją, z konsolą oraz sam postęp projektu i ewentualne problemy. Mam nadzieję że jesteś zaciekawiony tematem i będziesz śledził kolejne wpisy. Na zachętę dodaję zrzut ekranu z obecnej wersji:

Avocado

Avocado, ekran startowy konsoli

Ten wpis został opublikowany w kategorii Blog i oznaczony tagami , . Dodaj zakładkę do bezpośredniego odnośnika.