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ć zarządzanie timingami i synchronizację poszczególnych modułów. Obecnie panuje założenie, że x cyklów GPU to y cyklów CPU. Metody aktualizujące liczniki wywoływane są praktycznie co cykl GPU.  Ułatwiało to napisanie kodu, ale ucierpi na tym wydajność i bardzo utrudni zmianę częstotliwości bazowej (zmiana z NTSC na PAL). Prawidłowa implementacja powinna pozwalać na uruchomienie timera dla x cyklów systemu, nadgonić straty, wywołać przerwania. To samo tyczy się GPU - aktualizacja stanu powinna być robiona tylko wtedy, gdy jest taka potrzeba a nie w każdym cyklu.

Przy symulacji działania modulu CDROM (który nie jest jeszcze napisany) BIOS renderuje menu:

BIOS renderuje menu

BIOS renderuje menu

Zrzut ekranu z maszyny

Zrzut ekranu z maszyny dla porównania

Ten wpis został opublikowany w kategorii Avocado. Dodaj zakładkę do bezpośredniego odnośnika.