電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

GBDK(ゲームボーイの開発環境)メモ - キー入力

久しぶりの開発メモです。
ゲームボーイの開発環境のGBDKについて、キー入力のメモです。

開発環境について

過去のエントリーを参照してください
blog-e.uosoft.net

取得方法

キー入力はGBDKのファンクションの joypad() で取得できます。
gb.h をインクルードしてください。

joypad() のキーは8ビットの値で、押されているキーのビットが1で返されます。
ビットのマスクは gb/gb.h (includeフォルダ直下のgb.hを読めばこちらのファイルも読まれる)で定義してあります。
joypad()で取得した値と取得したいキーのマスク値をANDして、0でなければ押されている状態となります。

UINT8 key;
key = joypad();
if (key & J_A) {
    // Aボタンが押されている場合
} else {
    // Aボタンが押されていない場合
}

各ボタンのマスク値

定義 マスク(16進数) マスク(2進数)
J_START 0x80 10000000
J_SELECT 0x40 01000000
J_B 0x20 00100000
J_A 0x10 00010000
J_DOWN 0x08 00001000
J_UP 0x04 00000100
J_LEFT 0x02 00000010
J_RIGHT 0x01 00000001

サンプルソース

押されているキーを表示します。

#include <stdio.h>
#include <gb.h>

void main()
{    
    UINT8 key;

    while(1) {
        key = joypad();
        
        if (key & J_START) {
            gotoxy(1, 1);
            printf("START\n");
        } else {
            gotoxy(1, 1);
            printf("      \n");
        }
        
        if (key & J_SELECT) {
            gotoxy(1, 2);
            printf("SELECT\n");
        } else {
            gotoxy(1, 2);
            printf("      \n");
        }
        
        if (key & J_B) {
            gotoxy(1, 3);
            printf("B\n");
        } else {
            gotoxy(1, 3);
            printf("      \n");
        }
        
        if (key & J_A) {
            gotoxy(1, 4);
            printf("A\n");
        } else {
            gotoxy(1, 4);
            printf("      \n");
        }
        
        if (key & J_DOWN) {
            gotoxy(1, 5);
            printf("DOWN\n");
        } else {
            gotoxy(1, 5);
            printf("      \n");
        }
        
        if (key & J_UP) {
            gotoxy(1, 6);
            printf("UP\n");
        } else {
            gotoxy(1, 6);
            printf("      \n");
        }
        
        if (key & J_LEFT) {
            gotoxy(1, 7);
            printf("LEFT\n");
        } else {
            gotoxy(1, 7);
            printf("      \n");
        }
        
        if (key & J_RIGHT) {
            gotoxy(1, 8);
            printf("RIGHT\n");
        } else {
            gotoxy(1, 8);
            printf("      \n");
        }
        
    }
}

ゲームボーイパーフェクトカタログ (G-MOOK)

ゲームボーイパーフェクトカタログ (G-MOOK)

  • 発売日: 2018/10/29
  • メディア: ムック
ゲームボーイコンプリートガイド

ゲームボーイコンプリートガイド

  • 発売日: 2019/08/01
  • メディア: Kindle版