STX $2000 ; disable NMI STX $2001 ; disable rendering STX $4010 ; disable DMC IRQsvblankwait1: ; First wait for vblank to make sure PPU is ready BIT $2002 BPL vblankwait1
reset: sei ; Ignoruj IRQ cld ; Wyłącz Tryb Dziesiętny ldx #$40 stx $4017 ; Wyłącz przerwania Ramek APU ldx #$ff txs stx $2000 stx $2001 stx $4010 ; Opcjonalnie (pominięte) ; Ustaw Mapper i Skocz do dalszej częsci kodu inicjalizującego ; Wyczyść flagę powrotu pionowego (VBlankFlag) ; Tak więc wiadomo już, że oczekujemy na rozpoczęcie się powrotu pionowego ; Pierwszy z dwóch okresów oczekiwania na powrót pionowy, aby mieć pewność, że stan ; PPU jest ustabilizowany @vblankwait1: bit $2002 bpl @vblankwait1 ; Teraz mamy około 30000 jałowych cykli zanim stan PPU zostanie ustabilizowany, ; Jedyną rzeczą, jaką można w tym czasie zrobić to zapisanie RAMU określonymi wartościami ; Tak więc wypełniamy pamięć wartościami $00, co odpowiada przygotowywaniu ;przez kompilatory jezyka C sekcji BSS. ; Dla wygody wartość x przy pierwszej iteracji wynosi zero txa @clrmem: sta $0000, x sta $0100, x sta $0300, x sta $0400, x sta $0500, x sta $0600, x sta $0700, x ; Adresy $0200-$02ff celowo pomijamy, gdyż druga strona pamięci RAM używana jest na ; potrzeby listy wyświetlanych Sprite'ów, kopiowanych do OAM ; OAM powinna zostać zainicjalizowana wartościami z Zakresu $EF-$FF, a nie zerami, ; gdyż w takim wypadku otrzymasz masę niepotrzebnych Sprite'ów- śmieci w punkcie (0,0) inx bne @clrmem ;innymi rzeczami, które można wykonać pomiędzy powrotami pionowymi mogą być np.: ;-ustawienie Audio (Dźwięku) ;-wypełnienie rejestrów Mapper'a odpowiednimi wartościami. @vblankwait2: bit $2002 bpl @vblankwait2