Membaca pengontrol nes (dendy) di assembler

Pada artikel sebelumnya saya memberi tahu Anda tentang dasar-dasar assembler 6502 tentang beberapa area memori dan cara bekerja dengannya, hingga hari ini saya memiliki serangkaian tugas berikut: membaca pengontrol, animasi, pengatur waktu. Di bawah ini di bawah potongan saya akan memberi tahu Anda bagaimana saya belajar membaca pengontrol.






Semuanya, seperti sebelumnya, dimulai dengan tujuan, saya pergi ke wiki nesdev (tautannya ada di akhir artikel) untuk membaca tentang cara bekerja dengan pengontrol. Lagi pula, jika Anda melihatnya, hanya ada beberapa pemicu eksternal untuk game tersebut, setelah itu game tersebut melakukan beberapa tindakan tertentu. Pertama, ini adalah pengatur waktu internal, tindakan karakter dilakukan pada permulaan waktu tertentu, contoh yang mencolok dari ini adalah bos sederhana dalam permainan, perilaku mereka dijelaskan oleh templat yang terikat pada periode waktu apa pun. Kedua, pemicu penting untuk gim ini adalah menekan tombol pengontrol, yang terutama ditanggapi oleh karakter utama gim, dengan menekan atas, bawah, kiri dan kanan, mulai dan pilih. Pahlawan bisa bergerak, melompat, merangkak dan sebagainya. Artinya, menekan tombol secara langsung memberi tahu game untuk melakukan ini.Menjalankan pemrograman NES di depan, saya mencoba untuk tidak berfokus pada objek yang akan ditampilkan di layar, sebanyak mungkin pemrogram modern, tetapi apa yang akan digambar dalam bingkai ini atau itu.





Tetapi lebih dekat ke subjek, ada banyak pengontrol di NES, mulai dari sepeda motor klasik hingga sepeda karet dan mikrofon, tetapi pesolek hanya memiliki dua gamepad klasik (joystick) dan pistol ringan. Kami mungkin akan membicarakan yang terakhir nanti. Dan pesolek memiliki dua port prosesor untuk membaca pengontrol $ 4016 untuk gamepad pertama, $ 4017 untuk gamepad kedua.





Langkah pertama adalah "me-reboot controller" atau "menginisialisasinya" hanya dengan menulis nilai $ 01 dan $ 00 ke port secara berurutan





deadyJoy:
 lda #$01
 sta $4016
 lda #$00
 sta $4016
      
      



Selanjutnya, pesolek membaca pers dalam urutan berikut A, B, Pilih, Mulai, Atas, Bawah, Kiri, Kanan dan tulis ke port $ 4016, jadi untuk menerima penekanan tombol, kita hanya perlu membaca dari port ini , nilainya secara berurutan 8 kali





lda #4016 ; A
lda #4016 ; B
lda #4016 ; Select
lda #4016 ; Start
lda #4016 ; Up
lda #4016 ; Down
lda #4016 ; Left
lda #4016 ; Right
      
      



A . , . . X Y . zeropage ( ) $00 - $FF , , , .





ReadA:
  LDA $4016       ;  A
  AND #%00000001 ;    N  Z
  bne walkHeroRight ;    A
  beq ReadB ;       B

ReadB:
  LDA $4016       ;  B
  AND #%00000001 
  bne walkHeroLeft ;   B walkHeroLeft     
  beq ReadSelect ;    Select 
  
;  5       

ReadRight:
  LDA $4016       ;  
  AND #%00000001
  bne walkHeroRight ;     
  beq heroStay ;         
      
      



assembler , , . , . . X Y





walkHeroRight:
  inc herroXCoordinate
  jmp drawHero

walkHeroLeft:
  dec herroXCoordinate
  jmp drawHero
      
      








drawHero:
  lda herroYCoordinate
  sta $2004
  lda $00
  sta $2004
  lda #%00010111
  sta $2004
  lda herroXCoordinate
  sta $2004

  lda herroYCoordinate
  sta $2004
  lda #01
  sta $2004
  lda #%00010111
  sta $2004
  lda herroXCoordinate
  adc #$07
  sta $2004

  lda herroYCoordinate
  adc #$07
  sta $2004
  lda $02
  sta $2004
  lda #%00010111
  sta $2004
  lda herroXCoordinate
  sta $2004

  lda herroYCoordinate
  adc #$07
  sta $2004
  lda #03
  sta $2004
  lda #%00010111
  sta $2004
  lda herroXCoordinate
  adc #$07
  sta $2004

  nmi_delay 4
  jmp mainLoop
      
      



Dan siklus itu berulang: membaca, menentukan, menggambar status pahlawan.

Beginilah ternyata, tidak semuanya serumit yang terlihat pada pandangan pertama. Perakit itu sendiri menyebabkan lebih banyak kesulitan, terkadang beberapa poin tidak begitu transparan, tetapi saya ingin mengatakan satu hal sederhana, jika ada mimpi, itu layak untuk itu, dan Anda tidak boleh menyerah dalam hal apa pun. Pada artikel selanjutnya saya ingin berbicara tentang animasi dan pembuatan grafik.





Artikel sebelumnya

Sastra : http://wiki.nesdev.com/

Contoh seluruhnya di github








All Articles