0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

中華ゲーム機用のアプリを作るテスト

Last updated at Posted at 2025-01-20

ターゲット機

とりあえずターゲット機をANBERNIC RG351MPもしくはRG351Pにする。RG35XX Hを使いたかったが、SSH(というかWiFi接続?)が安定しないので。

ターゲット機にOSをインストール

RG351P、RG351MPの場合はArkOSをインストールする。RG351MP用のArkOSはBalena Etcherでは焼けないのでApplePi-Bakerを使う。

ターゲット機はWiFiに繋いでENABLE NETWORK SERVICESしておく。これでSSH接続、SMB、Web UIが使える。Web UIはまぁ使わないと思うけど。

ArkOSの場合、SSHは ssh ark@IPアドレス、password=arkでログインする。

MacでFinderから移動->サーバへ接続(smb://ターゲット機のIPアドレス)でターゲット機のromフォルダをマウントしておく。ゲスト接続でOK。

Dockerで開発環境を作る

MacにはDockerをインストールしておく。

下記の内容でDockerfileを作成。

# ベースイメージ
FROM arm64v8/debian:bullseye

# 開発ツールをインストール
RUN apt update && apt install -y \
    build-essential \
    git \
    cmake \
    gdb \
    vim \
    && apt clean

# 作業ディレクトリを設定
WORKDIR /workspace

# デフォルトのシェル
CMD ["bash"]

上記のファイルを保存したディレクトリで以下を実行:

docker build -t arm64_dev:bullseye .

作成したイメージでコンテナを起動

docker run -it --name arm64_dev_container --platform linux/arm64 arm64_dev:bullseye

もしくは既存のコンテナを再起動して利用でもよい。

docker start -ai arm64_dev

Dockerで実行ファイルを作成する

Docker コンテナを起動。

docker run -it --name arm64_dev --platform linux/arm64 arm64v8/debian:bullseye bash
もしくは
docker start -ai arm64_dev

これで、arm64v8/debian:bullseye のシェル(Linux環境)が開く。

コンテナ内で開発ツールをインストール

apt update && apt install -y build-essential git cmake gdb nano
main.cpp
#include <SDL2/SDL.h>
#include <iostream>

int main(int argc, char* argv[]) {
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        std::cerr << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }

    // ウィンドウを作成
    SDL_Window* win = SDL_CreateWindow("Hello SDL2",
                                       SDL_WINDOWPOS_CENTERED,
                                       SDL_WINDOWPOS_CENTERED,
                                       640, 480,
                                       SDL_WINDOW_SHOWN);
    if (win == nullptr) {
        std::cerr << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
        SDL_Quit();
        return 1;
    }

    // レンダラーを作成
    SDL_Renderer* renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == nullptr) {
        SDL_DestroyWindow(win);
        std::cerr << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        SDL_Quit();
        return 1;
    }

    // 背景色を設定してクリア
    SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); // 緑色
    SDL_RenderClear(renderer);

    // 描画内容を表示
    SDL_RenderPresent(renderer);

    // ウィンドウを3秒間表示
    SDL_Delay(3000);

    // リソースの解放
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return 0;
}

コンパイル。

g++ main.cpp -o sdl2_hello `sdl2-config --cflags --libs`

Dockerからターゲット機にコピー。これはDockerに繋がってないMac上のターミナルで行う。
ダイレクトにターゲット機のroms/portsの中に入れた方が楽(romsがどこにマウントされてるかは調べること)。

docker cp arm64_dev:/root/test1/sdl2_hello /Volumes/roms/ports

.shファイルを用意する。

sdl_hello.sh
#!/bin/bash

# スクリプト自身のディレクトリを取得
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")

# SDL2 実行ファイルのパス
EXECUTABLE="$SCRIPT_DIR/sdl2_hello"

# 実行
if [ -f "$EXECUTABLE" ]; then
    echo "SDL2 アプリケーションを実行します: $EXECUTABLE"
    "$EXECUTABLE"
else
    echo "エラー: 実行ファイルが見つかりません: $EXECUTABLE"
    exit 1
fi

実行属性をつけてターゲットにコピー。

chmod +x sdl_hello.sh
cp sdl_hello.sh /Volumes/roms/ports

ターゲット機で実行

EMULATIONSTATIONを再起動。
PORTSから実行する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?