これが完了しました。計算どおりに値を入れてもうまくいかず(今考えるとUWORDにすべきところをUBYTEにしており、必要なレジスタに値が書き込まれなかったのかもしれません)、結局こちらにあるソースコードの必要箇所を参考にしました。それぞれの場合にビットがどういう状態になっているか把握したいと思います。
ループ処理で書けるはずなのですが、こんな重複の多いコードを書いた(というよりC言語の型をよく分かってなくて書けなかった)のは久しぶりで、プログラミングを始めた頃を思い出します。
#include <gb/gb.h> #include <stdio.h> void main() { NR52_REG = 0x80; NR50_REG = 0x77; NR51_REG = 0xFF; while(1) { UBYTE joypad_state = joypad(); UWORD freq; if(joypad_state) { NR10_REG = 0x06; NR11_REG = 0x40; NR12_REG = 0x73; freq = 1046; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1046; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1379; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1379; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1452; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1452; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1379; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); delay(400); freq = 1297; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1297; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1253; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1253; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1155; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1155; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); freq = 1046; NR13_REG = (UBYTE)(freq & 0x00FF); NR14_REG = (UBYTE)((freq >> 8) & 0x00FF) + 0x80; delay(400); delay(400); } } }