前回の記事では、6502アセンブラの基本について、いくつかのメモリ領域とその操作方法について説明しましたが、今日まで、コントローラ、アニメーション、タイマーの読み取りという一連のタスクがありました。以下のカットの下で、私がコントローラーを読むことをどのように学んだかを説明します。
以前と同じように、すべてが目標から始まりました。コントローラーの操作方法について読むために、nesdev wiki(リンクは記事の最後にあります)にアクセスしました。結局のところ、それを見ると、ゲームの外部トリガーはごくわずかであり、その後、ゲームはいくつかの特定のアクションを実行します。まず、これは内部タイマーであり、キャラクターのアクションは特定の時間の開始時に実行されます。これの顕著な例はゲームの単純なボスであり、その動作は任意の期間に関連付けられたテンプレートによって記述されます。第二に、ゲームの重要なトリガーは、ゲームの主人公が主に応答するコントローラーボタンを、上下左右に押して開始および選択することです。主人公は移動、ジャンプ、這うなどができます。つまり、ボタンを直接押すと、ゲームにこれを行うように指示されます。ファミコンのプログラミングを先取りして、多くの現代のプログラマーが可能であるように、画面に表示されるオブジェクトではなく、このフレームまたはそのフレームに描画されるものに焦点を当てようとしています。
しかし、主題に近づくと、クラシックからインフレータブルバイクやマイクに至るまで、NESには多くのコントローラーがありますが、ダンディには2つのクラシックゲームパッド(ジョイスティック)と軽いピストルしかありませんでした。後者については後で話します。したがって、ダンディには、コントローラーを読み取るための2つのプロセッサーポートがあります。1番目のゲームパッド用に4016ドル、2番目のゲームパッド用に4017ドルです。
最初のステップは、値$ 01と$ 00をポートに順番に書き込むだけで、「コントローラーを再起動」または「初期化」することです。
deadyJoy: lda #$01 sta $4016 lda #$00 sta $4016
次に、ダンディは次の順序でプレスを読み取り、A、B、選択、開始、上、下、左、右、ポート$ 4016に書き込みます。したがって、ボタンの押下を受信するには、このポートから読み取るだけで済みます。 、値を順次8回
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
そして、このサイクルが繰り返されます。主人公の状態を読み、決定し、描きます。
これが結果であり、すべてが一見したほど複雑なわけではありません。アセンブラー自体がより困難になり、透明性が低い点もありますが、簡単に言えば、夢があれば行く価値があり、決してあきらめないでください。次の記事では、アニメーションとグラフィックの作成について説明したいと思います。
過去の記事
文献:http:
//wiki.nesdev.com/完全にgithubの例