曲データとして使用されていないが、恐らくバグ
L_C3D3はYの値に応じてAの値を書き込むレジスタを変更している。
例えばYが1の場合は $4001 に書き込む。
実際のコード
矩形波1
; #$F4の場合
L_C0C8:
; ここ来た時、Yは0
LDA (SND_SQ1_CURR_PTR),Y ; ★何これ?$F4書き込むの?
INY ; ★何これ?
JSR L_C3D3 ; $4001に書き込み
JMP L_C022
矩形波2
; #$F4の場合
L_C211:
; ここ来た時、Yは0
LDA (SND_SQ2_CURR_PTR),Y ; ★何これ?$F4書き込むの?
INY ; ★何これ?
JSR L_C3D3 ; $4001に書き込み★何これ?
LDY #$05 ; ★何これ?
JMP L_C165
多分こうするのが少し正しいコード
オペコードの次のバイトを書き込む値とするのが自然と思われる。
また矩形波2の場合は $4001 ではなく、$4005 に書き込むのが正しいと思われる。
それを踏まえると以下のコードになる。
矩形波1
; #$F4の場合
L_C0C8:
; ここ来た時、Yは0
INY
LDA (SND_SQ1_CURR_PTR),Y
JSR L_C3D3 ; $4001に書き込み
JMP L_C022
矩形波2
; #$F4の場合
L_C211:
; ここ来た時、Yは0
INY
LDA (SND_SQ2_CURR_PTR),Y
LDY #$05
JSR L_C3D3 ; $4005に書き込み
JMP L_C165
もう少し考えてみる
INYして次のデータを取得し、現在のデータ位置を示すアドレスを変更しないのは変。
($F4の次のデータが2回使用されることになる)
最終更新:2025年09月05日 20:16