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

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

## ターゲット機にOSをインストール ##
RG351P、RG351MPの場合は[ArkOS](https://github.com/christianhaitian/arkos/wiki#download-links)をインストールする。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を作成。
```Dockerfile
# ベースイメージ
FROM arm64v8/debian:bullseye

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

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

# デフォルトのシェル
CMD ["bash"]
```
上記のファイルを保存したディレクトリで以下を実行：
```sh
docker build -t arm64_dev:bullseye .
```
作成したイメージでコンテナを起動
```sh
docker run -it --name arm64_dev_container --platform linux/arm64 arm64_dev:bullseye
```

もしくは既存のコンテナを再起動して利用でもよい。
```sh
docker start -ai arm64_dev
```


## Dockerで実行ファイルを作成する ##
Docker コンテナを起動。
```sh
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;
}
```
コンパイル。
```sh
g++ main.cpp -o sdl2_hello `sdl2-config --cflags --libs`
```

Dockerからターゲット機にコピー。これはDockerに繋がってないMac上のターミナルで行う。
ダイレクトにターゲット機のroms/portsの中に入れた方が楽（romsがどこにマウントされてるかは調べること）。
```sh
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
```
実行属性をつけてターゲットにコピー。
```sh
chmod +x sdl_hello.sh
cp sdl_hello.sh /Volumes/roms/ports
```

## ターゲット機で実行 ##
EMULATIONSTATIONを再起動。
PORTSから実行する。