NMI: LDA #$00 STA $2003 LDA #$02 STA $4014 ;Wyslij całą stronę RAMu do pamięci spritów(OAM) JSR Track ;Ruszaj spritem RTITrack: lda XPrawo cmp #$00 beq Track.Gora ;skocz, jeśli gracz NIE ma ruszyć sie w prawo. dec XPrawo ;Zmniejsz licznik poruszania się w prawo inc XGracz ;zwiększ pozycję gracza na osi X lda XPrawo ;Sprawdza czy po poruszeniu graczem, cmp #$00 ;Licznik XPrawo zmienił się na 00. bne Track.end ;Jeśli nie to skocz...jeśli tak to zostań lda #$80 sta YGora ;Ustaw licznik dla ruchu w górę. jmp Track.end ;Skocz do zakończenia poruszania graczem. Track.Gora: ;Skoczyliśmy tutaj, bo ma się nie ruszać w prawo. ;A to znaczy ze jedyną opcją jest ruch w górę... dec XGora ;Zmniejsz licznik ruszania się w górę. dec XGracz ;Zmniejsz pozycję gracza na osi Y. lda YGora cmp #$00 bne Track.end ;Jeśli NIE skończyło ruszać graczem w górę... lda #$80 sta XPrawo ;Ustaw by gracz przejechał 80 pikseli w prawo. Track.end: rts ;Zakończ kod ruszania graczem.
.bank 1 .org $E000nametableStart: .incbin "NAM/titleflower.nam"nametableRoom1: .incbin "NAM/room1.nam"gamerooms: .dw nametableStart .dw nametableRoom1
vblankwait2: ; First wait for vblank to make sure PPU is ready BIT $2002 BPL vblankwait2 JSR LoadBackground LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1 STA $2000 LDA #%00011110 ; enable sprites, enable background, no clipping on left side STA $2001 LDA #TITLESCREEN STA gamemode ... ; dalej jest pętla główna programu
LoadBackground: LDA #$01 STA updating_background ;"disable" NMI LDA #%00000110 ;disable sprites, disable background, no clipping on left side STA $2001 LDA $2002 ; read PPU status to reset the high/low latch LDA #$20 STA $2006 ; write the high byte of $2000 address LDA #$00 STA $2006 ; write the low byte of $2000 address LDY gameroom LDA gamerooms, y ; Laduje adres wskazujacy na poczatek danego nametable STA pointerLo ; put the low byte of the address of background into pointer ; INY po to, aby zaladowac adres konczacy dane nametable LDA gamerooms+1, y ; Laduj adres wskazujacy na koniec danego nametable (ktory zarazem jest poczatkiem kolejnego nametable) STA pointerHi ; put the high byte of the address into pointer LDX #$00 ; start at pointer + 0 LDY #$00OutsideLoop: InsideLoop: LDA [pointerLo], y ; copy one background byte from address in pointer plus Y STA $2007 ; this runs 256 * 4 times INY ; inside loop counter CPY #$00 BNE InsideLoop ; run the inside loop 256 times before continuing down INC pointerHi ; low byte went 0 to 256, so high byte needs to be changed now INX CPX #$04 BNE OutsideLoop ; run the outside loop 256 times before continuing down LDA #$00 ;"enable" NMI STA updating_background RTS
LDA gameroom ASL A TAY LDA gamerooms, y ; Laduje adres wskazujacy na poczatek danego nametable
NMI:;;;;kod NMI;;;;; inc Vblank rti
VbWait: lda #$00 sta VblankVbWait.loop: lda Vblank beq VbWait.loop rts
Pętla główna: Czekaj na Vblank Czyść sprity Ustaw sprity Sprawdź sterowanie jeśli naciśnięto START to skocz do "Zmiana ekranu" Skocz do "Pętla główna"Zmiana ekranu: Wyłącz ekran Czekaj na Vblank Załaduj nowe Nametable Czekaj na Vblank Włącz ekran Skocz do...;;;;;;;;;;;;;gdzies tam, bo nie wiem, co ma dalej się dziać
NMI: ; początek NMI, te komendy poniżej są od razu na początku, gdy ekran ma być odświeżany LDA updating_background BNE skip_graphics_updates
LoadBackground: LDA #$01 STA updating_background ;"disable" NMI ... ; procedura ładowania tła LDA #$00 ;"enable" NMI STA updating_background
1.Sprawdź czy gracz nacisnął skok Jeśli nie, idź do punktu 4 Jeśli tak, kontynuuj2.Sprawdź, czy gracz stoi na jakimś bloku\drabinie czy czymś. Jeśli nie, idź do punktu 4 Jeśli tak, kontynuuj3.Nadaj jakieś zmiennej jakąś wartość (np. 10)4.Zakończ funkcję
1.Sprawdzaj czy rzeczona zmienna większa niż zero Jeśli nie, idź do punktu 5 Jeśli tak, kontynuuj2.Sprawdź czy nad głową gracza jest jakiś blok(nie pusty tiles) Jeśli tak, idź do punktu 6 Jeśli nie, kontynuuj3.Odejmij od koordynatu Y obiektu (Obiekt bedzie się wznosił do góry)4.Odejmij jeden (lub więcej) od zmiennej do której zapisałeś w poprzedniej funkcji.5.Zakończ funkcję6.Zapisz 0 do zmiennej do której wcześniej zapisałeś 10.7.Zakończ funkcję
Siudym wrócił do kodowania! YESSSSSss!!!1