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