アットウィキロゴ
曲データとして使用されていないが、恐らくバグ

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