Marca 28, 2024, 14:47:58 *
Witamy, Gość. Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności:
Nowa strona główna  : http://www.emunes.pl
Zapraszamy do testowania !

Chat: http://chat.emunes.pl
Galeria cartów: http://carts.emunes.pl
 
   Strona główna   Pomoc Zaloguj się Rejestracja  

Reklama
Strony: 1 ... 9 10 [11]
  Drukuj  
Autor Wątek: Programowanie Nes'a (procesora 6502)  (Przeczytany 78601 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
Mejs
Chorąży
***
Offline Offline

Wiadomości: 196



« Odpowiedz #200 : Stycznia 27, 2015, 19:04:50 »

Siema, uczę się assemblera z tutka Nerdy Nights i utknąłem delikatnie na czwartym tygodniu.

Kod:
 .inesprg 1   ; 1x 16KB PRG code
  .ineschr 1   ; 1x  8KB CHR data
  .inesmap 0   ; mapper 0 = NROM, no bank swapping
  .inesmir 1   ; background mirroring
  

;;;;;;;;;;;;;;;

    
  .bank 0
  .org $C000
RESET:
  SEI          ; disable IRQs
  CLD          ; disable decimal mode
  LDX #$40
  STX $4017    ; disable APU frame IRQ
  LDX #$FF
  TXS          ; Set up stack
  INX          ; now X = 0
  STX $2000    ; disable NMI
  STX $2001    ; disable rendering
  STX $4010    ; disable DMC IRQs

vblankwait1:       ; First wait for vblank to make sure PPU is ready
  BIT $2002
  BPL vblankwait1

clrmem:
  LDA #$00
  STA $0000, x
  STA $0100, x
  STA $0300, x
  STA $0400, x
  STA $0500, x
  STA $0600, x
  STA $0700, x
  LDA #$FE
  STA $0200, x    ;move all sprites off screen
  INX
  BNE clrmem
  
vblankwait2:      ; Second wait for vblank, PPU is ready after this
  BIT $2002
  BPL vblankwait2



; ************** NEW CODE ****************
LoadPalettes:
  LDA $2002    ; read PPU status to reset the high/low latch
  LDA #$3F
  STA $2006    ; write the high byte of $3F00 address
  LDA #$00
  STA $2006    ; write the low byte of $3F00 address
  LDX #$00
LoadPalettesLoop:
  LDA palette, x        ;load palette byte
  STA $2007             ;write to PPU
  INX                   ;set index to next byte
  CPX #$20            
  BNE LoadPalettesLoop  ;if x = $20, 32 bytes copied, all done


SPRAJT1:
  
  LDA #$80
  STA $0200        ; put sprite 0 in center ($80) of screen vert
  LDA #$80
  STA $0203        ; put sprite 0 in center ($80) of screen horiz

  LDA #$01
  STA $0201        ; tile number = 1
  LDA #$01
  STA $0202        ; color = 0, no flipping

  LDA #%10000000   ; enable NMI, sprites from Pattern Table 0
  STA $2000

  LDA #%10010000   ; enable sprites
  STA $2001
  LDA #$00

SPRAJT2:
  
  LDA #$AA
  STA $0204        ; put sprite 0 in center ($80) of screen vert
  LDA #$10
  STA $0207        ; put sprite 0 in center ($80) of screen horiz

  LDA #$00
  STA $0205        ; tile number = 0
  LDA #$14
  STA $0206        ; color = 0, no flipping

 
  JMP SPRAJT1



 

NMI:

  

  LDA #$00
  STA $2003  ; set the low byte (00) of the RAM address
  LDA #$02
  STA $4014  ; set the high byte (02) of the RAM address, start the transfer



  RTI        ; return from interrupt
 
;;;;;;;;;;;;;;  
  
  
  
  .bank 1
  .org $E000
palette:
  .db $0F,$31,$32,$33,$0F,$35,$36,$37,$0F,$39,$3A,$3B,$0F,$3D,$3E,$0F
  .db $0F,$1C,$15,$14,$0F,$02,$38,$3C,$0F,$1C,$15,$14,$0F,$02,$38,$3C


  .org $FFFA     ;first of the three vectors starts here
  .dw NMI        ;when an NMI happens (once per frame if enabled) the
                   ;processor will jump to the label NMI:
  .dw RESET      ;when the processor first turns on or is reset, it will jump
                   ;to the label RESET:
  .dw 0          ;external interrupt IRQ is not used in this tutorial
  
  
;;;;;;;;;;;;;;  
  
  
  .bank 2
  .org $0000
  .incbin "mario.chr"   ;includes 8KB graphics file from SMB1

No i jaki mam problem? Ładnie wyświetla mi sprajty tam gdzie chce ale po załadowaniu %10010000 w adres $2001 kolor tła nie zmienia się.
W dodatku nie potrafię zmienić koloru sprajtów, wpisuje różne wartości w $0206 i $0202 i tylko przy $01 odwraca mi kolory, innego efektu nie uzyskałem.

Link do tutka: http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=6082
Zapisane
Koks
Major
*****
Offline Offline

Wiadomości: 580



« Odpowiedz #201 : Stycznia 27, 2015, 19:42:34 »

po załadowaniu %10010000 w adres $2001 kolor tła nie zmienia się.
Może dlatego, że tło nie jest wyświetlane?

wpisuje różne wartości w $0206 i $0202 i tylko przy $01 odwraca mi kolory
W drugiej cyfrze (szesnastkowo) jest sens ustawiać tylko 0-3, poza tym pierwsze dwie palety są identyczne z drugimi dwiema:
.db $0F,$1C,$15,$14,$0F,$02,$38,$3C,$0F,$1C,$15,$14,$0F,$02,$38,$3C
Zapisane

Częste mycie skraca życie.
"If you have a fast, shiny new Pentium II, you might try using 44 kHz for the ultimate in sound quality." - readme od Unreala
https://drive.google.com/folderview?id=0B2TXQD5v-ZIVfjVQdTl2TTZiWmJ2LWZJajJzS0V4cDZBay04WjVGQkdQdnBDQzRlYkdQVGc&usp=sharing
Mejs
Chorąży
***
Offline Offline

Wiadomości: 196



« Odpowiedz #202 : Stycznia 27, 2015, 21:06:05 »

Dziękuję Koksu! Dzięki Twoim poradom na czacie udało mi się zrobić prostą animację. Sprite patroluje obszar 10 pikseli.

Cytuj
POZYCJE: ;pozycje początkowe
  LDA #$80
  STA $0505
  STA $0506
  STA $0502
  JMP SPRAJT1

MAGIA: ;program idący w góre
  LDX $0506
  DEX
  CPX #$80 ;sprawdzamy czy ludzik wrócił na miejsce
  BEQ RESET
  STX $0506

SPRAJT1:
 
  LDA $0506
  STA $0200        ; put sprite 0 in center ($80) of screen vert
  LDA $0502
  STA $0203        ; put sprite 0 in center ($80) of screen horiz

  LDA #$01
  STA $0201        ; tile number = 1
  LDA #$00
  STA $0202        ; color = 0, no flipping

  LDA #%10010000   ; enable NMI, sprites from Pattern Table 0
  STA $2000

  LDA #%01010000   ; enable sprites
  STA $2001
  LDA #$00
  
  JMP SPRAJT1

NMI:
 
  

  LDA #$00
  STA $2003
  LDA #$02
  STA $4014

  LDA $0505
  CMP #$90 ; sprawdzamy czy doszedł do dolnej granicy
  BEQ MAGIA

  INC $0505 ; jeśli nie, przesuwamy go w dół
  LDA $0505
« Ostatnia zmiana: Stycznia 27, 2015, 22:31:50 wysłane przez Mejs » Zapisane
1990in1
Kapitan
****
Offline Offline

Wiadomości: 309


Gut


« Odpowiedz #203 : Października 28, 2015, 23:44:08 »

Co roku na famiconach są prezentowane (czasem HWowe), Koks ma w podpisie tyż.
Zapisane

"Znaczy kolego rozumiem, że ty sobie tutaj żarty robisz, prawda?" S.King
Dizzy9
Nadworny programista.
Kapitan
****
Offline Offline

Wiadomości: 351



WWW
« Odpowiedz #204 : Listopada 13, 2015, 22:48:06 »

Gdyby ktoś był zainteresowany, to podaję link to kodu źródłowego który napisałem dla siudyma do nauki. Myślę że można się z kodu nieco nauczyć....mamy wykrywanie kolizji między obiektami, wykrywanie kolizji z tłem, sposób an obsługę obiektów, wczytywanie danych z tablic pointerów, obsługa pada itp itd.
Grafikę wykonał Siudym (obecnie "sdm" na tym forum).
https://dl.dropboxusercontent.com/u/1309313/NES%20Proj/Engine/a_e2.rar
« Ostatnia zmiana: Grudnia 10, 2015, 14:03:25 wysłane przez Dizzy9 » Zapisane

ramagus
Szeregowy
*
Offline Offline

Wiadomości: 8


« Odpowiedz #205 : Grudnia 19, 2016, 14:55:24 »

wznowienie książki o assemblerze 6502 dla atari, jak pisał siudym przyda się w programowaniu na Nes'a i pegasusa, nakład ograniczony śpieszcie się!

http://allegro.pl/show_item.php?item=6648915659&snapshot=MjAxNi0xMi0xOVQwNToyNTozMVo7YnV5ZXI7ZjIwMDA3MmQ1NzkzNjM3MTAwN2E4NjEyOGU0YThjZTY2ZmVjM2Y3ZWFiNmY2NmY0ZTU2YzFhMDNiYWVhNjAzMg==


EDIT:
Jest też ebook po angielsku w Google Play Store, chyba za 19.99 USD. Uczy programowania gier w assemblerze i C i jest zintegrowany ze środowiskiem programistycznym na stronie https://8bitworkshop.com .
Tytuł ebooka - "Making Games for the NES" - autor Steven Hugg
« Ostatnia zmiana: Lipca 16, 2023, 05:16:44 wysłane przez ramagus » Zapisane
Strony: 1 ... 9 10 [11]
  Drukuj  
 
Skocz do:  

Działa na MySQL Działa na PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Prawidłowy XHTML 1.0! Prawidłowy CSS!
Strona wygenerowana w 0.031 sekund z 18 zapytaniami.