Archiwum kategorii: Avocado
Avocado uruchamia pierwszy program
Po kilkugodzinnej sesji czytania assemblera, analizy dumpów pamięci i żmudnego przeklikiwania się debuggerem po breakpointach udało mi się rozwiązać problem, który towarzyszył mi od początku projektu. Problem Wspominałem o nim w poprzednim poście – objawiał się tekstem "VSync: timeout", a efektem … Czytaj dalej
Stan projektu – pierwszy miesiąc
Minął pierwszy miesiąc od startu Daj się poznać 2017 i uznałem to za dobry moment, aby podzielić się w jakim stanie znajduje się mój projekt oraz z jakimi problemami walczę na ten moment. Muszę nadmienić, że w momencie startu tegorocznej … Czytaj dalej
Procesor – skoki i delay slot
Operacje skoków nie są takie oczywiste jak mogłoby to się wydawać – jest tutaj kilka pułapek o chciałem wspomnieć. Kodowanie instrukcji skoku Przykładowa instrukcja skoku (j) w assemblerze będzie wyglądać tak: Na zapisanie adresu skoku dostępne jest tylko 26 bitów. … Czytaj dalej
Procesor – emulacja pierwszej instrukcji
Procesor zastosowany w Playstation oparty jest na 32-bitowej architekturze MIPS. To co ją wyróżnia to fakt, że jest to architektura RISC (Reduced Instruction Set Computing), a nie CISC (Complex Instruction Set Computing) do której przyzwyczaiły nas PCty. Z czym to się … Czytaj dalej
Playstation – architektura systemu
Pisząc blog, w którym opisuje proces tworzenia emulatora dla konsoli Playstation wypada mi przybliżyć jak ten sprzęt jest zbudowany. Patrząc na specyfikację przypomina on komputery, które pojawiały się w tamtych czasach (1994), jednak niektóre rozwiązania wybrane przez twórców – szczególnie … Czytaj dalej
Integracja CI ze Slackiem
Przy procesie ciągłej integracji ważną częścią jest monitorowanie czy ostatnie zmiany nie sprawiają problemów z kompilacją i uruchamianiu na różnych platformach. Podczas developmentu na bieżąco buduję i uruchamiam program na lokalnej maszynie. Niestety to nie wyklucza możliwości, kiedy na czystym środowisku … Czytaj dalej
Ciągła integracja projektu z użyciem Travis CI i AppVeyor
Continuous Integration jest mocno powiązany ze współczesnym podejściem do tworzenia oprogramowania. Usprawnia proces automatycznego budowania i testowania oprogramowania. Oto jak ja rozumiem zasadę działania CI: programista wprowadza zmiany w kodzie i wysyła je do głównego repozytorium (git push) serwer wykrywa zmiany, pobiera kopię … Czytaj dalej
Integracja z GDB
Debugger jest nieocenioną pomocą przy takich programach jak emulator, ponieważ zachodzi potrzeba analizy działania zarówno naszej aplikacji jak i programu będącego uruchomionego w wirtualnym środowisku. W tym poście poruszę jedynie drugi przypadek. Gdy zaczynałem implementować procesor jedyną opcją było logowanie każdej wykonywanej instrukcji … Czytaj dalej
Avocado – podstawowa implementacja timerów
Stworzyłem proste implementacje klasy Timer, która jest kluczowa do działania większości programów – chodzi o obsługę przerwania VBlank i jej synchronizacji z timerem zliczającym HBlanki. Niestety kod pisany "na teraz" kopie mnie teraz po tyłku – trzeba usiąść i rozplanować … Czytaj dalej
Język i biblioteki
W tym krótkim poście opiszę jakich technologii korzystam przy Avocado i co zmotywowało mnie do ich użycia. Język Zdecydowałem się na użycie C++ z kilku powodów: Jest to język z którym mam najwięcej doświadczenia i wydaje mi się że pozwoli mi … Czytaj dalej