今私は小さな魚だけれど

ちょっぴり非日常な音楽を紹介するブログです

【GB】ゲームボーイで「きらきら星」を演奏する 関数編

関数とマクロを使って多少マシなコードにしました。

sakana38.hatenablog.com

なんかポインタ周りのエラーがあると思ってたのですが、冒頭の関数のプロトタイプ宣言を忘れていてメモリ領域が確保されていないだけでした。

#include <gb/gb.h>
#include <stdio.h>
#define DELAY 400

void sound(UWORD f);

void main() {
    NR52_REG = 0x80;
    NR50_REG = 0x77;
    NR51_REG = 0xFF;

    while (1) {
        UBYTE joypad_state = joypad();
        
        if (joypad_state) {   
            NR10_REG = 0x06; 
            NR11_REG = 0x40;
            NR12_REG = 0x73;
            sound(1024);
            sound(1024);
            sound(1379);
            sound(1379);
            sound(1452);
            sound(1452);
            sound(1379);
            delay(DELAY);
            sound(1297);
            sound(1297);
            sound(1253);
            sound(1253);
            sound(1155);
            sound(1155);
            sound(1024);
            delay(DELAY);
        }
    }
}


// 周波数を受け取って音を鳴らす関数
void sound(UWORD f) {
    NR13_REG = (UBYTE)(f & 0x00FF);
    NR14_REG = (UBYTE)((f >> 8) & 0x00FF) + 0x80;
    delay(DELAY);
}