kikeroga3 / tinyhsp

12 stars 0 forks source link

CuteHSP何でも板 #3

Open kikeroga3 opened 7 years ago

kikeroga3 commented 7 years ago

CuteHSPについて何か聞きたいことやご意見などあれば自由にお書きください。

kikeroga3 commented 7 years ago

改名(TinyHSP→CuteHSP)のタイミングにあわせて bload, poke, peek 命令をエクストラに追加しました。 bload の実装はdolphiliaさんのアドバイス(というか解答)によって解決しました。

dolphiliaさん、本当にありがとうございました。

kikeroga3 commented 7 years ago

うちのLubuntu(16.04)でLinux版の実行ファイル(cutehsp, cutehspx, cutehspcl)を作成してみました。 動作確認のとれた方がおりましたらご一報いただけるとうれしいです。 コンパイル時に --static を付けずに作成しているので、実行可否が環境ごとの共有ライブラリに依存します。

パピーリナックスPrecise-571JPでは「cutehspcl」だけが実行可能でした。

kikeroga3 commented 7 years ago

以下、VMwareで試しております。

KonaLinux 2.3 Black でも標準では cutehspcl は動作OK glibc をアップデート(普通はやらない)したら cutehsp も動くようにはなった。 cutehspx はダメ(Segmentation Fault)

Lubuntu 17.04 では標準で cutehspcl と cutehsp まで動くが、cutehspx はダメやった。

コンパイルした環境(実機PC Lubuntu 16.04)ではもちろん全部動作してるんですが、何が足らないのかなあ…

kikeroga3 commented 7 years ago

フォント読込用バッファを 5MB→2MB にしてコンパイルし直したら Lubuntu 17.04 で cutehspx も動作しました。なんで?

kikeroga3 commented 7 years ago

Konaでもバッファ2MB版はcutehspx動いたす。 konalinux23black KonaLinux 2.3 Black のglibcアップデートの際、参考にしたページ http://qiita.com/61503891/items/df9886f61bdf784c84e2 共有ライブラリ書きかえなのでお勧めはしません。

kikeroga3 commented 7 years ago

bsave命令のイメージ

void
command_bsave(execute_environment_t* e, execute_status_t* s, int arg_num)
{
    // 引数の数をチェックする
    if (arg_num != 2) {
        raise_error("bsave: Invalid argument.");
    }
    const int arg_start = -arg_num;

    // 1つ目の引数を取得する
    value_t* m = stack_peek(s->stack_, arg_start);
    value_isolate(m);
    if (m->type_ != VALUE_STRING) {
        raise_error("bsave: Argument should specify a string type.");
    }
    char* fnm = m->svalue_;

    // 2つめの引数を取得する
    const value_t* v = stack_peek(s->stack_, arg_start + 1);
    if (v->type_ != VALUE_VARIABLE) {
        raise_error("bsave: Argument should be a variable.");
    }

    // ファイルをオープンする
    FILE* fp = fopen(fnm, "wb");
    if (fp == NULL) {
        raise_error("bsave: file could not be opened [%s]", fnm);
        exit(1);
    }

    // 指定した変数の内容をdata_ptrに代入する
    void* data_ptr = v->variable_->data_;

    // データサイズを取得する
    const long size = strlen(data_ptr);

    // ファイルにdata_ptrの内容を書き込む
    fwrite(data_ptr, size, 1, fp);

    // 書き込んだサイズをシステム変数に代入
    s->strsize_ = size;

    // クローズ処理
    fclose(fp);
    stack_pop(s->stack_, arg_num);
}

変なとこがあったら教えてください。

kikeroga3 commented 7 years ago

MEMO:ラズパイに移植するときのヒント

Raspberry Pi で OpenGL ES2 http://www.mztn.org/rpi/rpi07.html

OpenGL のドライバー http://www.mztn.org/rpi/rpi48.html

OpenAL on Raspberry pi https://sites.google.com/site/ciclemsonsoccer/wiki/openalonraspberrypi

1-Download openal.cpp (attachment)
2-Download required Libraries:
          g++
          OpenGl/Glut .....   sudo apt-get install freeglut3 freeglut3-dev
          OpenAl      .....   sudo apt-get install libalut0 libalut-dev
          SDL         .....   sudo apt-get install libsdl1.2-dev libsdl1.2debian
3-Leave the .wav file in the same folder as openal.cpp file and rename it to 'sound.wav'
4-Run the program:
          g++  -lopenal -lSDL openal.cpp
kikeroga3 commented 7 years ago

peek関数処理で以下にバグがあったのでメモ

誤   const char r = p[i];
正   unsigned char r = p[i];

誤のほうではマイナス値が返ってきたりしていた。

kikeroga3 commented 7 years ago

sudo apt-get install libopenal-dev

OpenAL導入のメモ

kikeroga3 commented 7 years ago

paint命令のバグを修正する。

誤) if (col == paintCol) return;

正) if (col != paintCol) { int lx, rx; // 塗り潰す線分の両端のX座標 … } while ( sIdx != eIdx ); }

kikeroga3 commented 7 years ago

Android端末上で実行できる単独バイナリのコンパイル(C/C++) http://cubeundcube.blogspot.jp/2013/06/androidcc.html

Android-ndkだけでCコンパイルできるんですねぇ。 いや助かるなぁ。すばらしい知見をいただきました。

こっちのメモはNDK公式資料 https://developer.android.com/ndk/guides/stable_apis.html?hl=ja

OpenAL -> OpenMAX AL GLFW -> OpenGL ES

でイケルのか?よく理解できてない。

kikeroga3 commented 7 years ago

モバイル版GLFW? https://github.com/brackeen/glfm Android-ndkからビルドできるって書いてあるような気がする。

AndroidでOpenALもあった! http://blog.livedoor.jp/itahidamito/archives/51671451.html ↓イヤ違った。 調べてみたら OpenMAX AL はどうも OpenAL の代わりにはなりそうにないです。 OpenAL の代わりとしては OpenSL ES のほうが近いようです。

現状はどうにかモバイル版CuteHSPを作るとしたら、

GLFW → GLFM OpenAL → OpenSL ES

って感じですかね。

いずれにしても「cutehsp.c」をちょっとした変更でコンパイルするのはまだまだ難しそう。 負荷が高くなるダブルメンテも可能な限り避けたいし。

でもまぁCuteHSPコンソール版ならありとあらゆる環境で作れますから、ね。 cutehspcl for android https://github.com/kikeroga3/tinyhsp/tree/master/android

kikeroga3 commented 7 years ago

Knowledge for making RPi version of CuteHSP

Trying out OpenGL on Raspberry Pi 3 http://www.raspberryconnect.com/gamessoftware/item/314-trying_out_opengl_on_raspberry_pi_3

GLFW 3.2の新機能

OpenGL ESのサポート GLFWは、 GLFW_CLIENT_APIウィンドウヒントをGLFW_OPENGL_ES_API設定することで、OpenGL ESコンテキストの作成をサポートします。このコンテキストの作成がサポートされています。 GLFW は OpenGL ESを実装していないので、ドライバはGLFWで使用可能な方法でサポートを提供する必要があります。 最新のNvidiaとIntelドライバは、GLXとWGL APIを使用してOpenGL ESコンテキストを作成することをサポートしますが、AMDは代わりにEGL実装を提供します。

(実験的)EGLのサポート GLFWには、実験的なEGLコンテキスト作成バックエンドがあり、これはCMakeオプションで選択できます。

GLFW Fails to initialise. Raspberry Pi, EGL https://stackoverflow.com/questions/35490385/glfw-fails-to-initialise-raspberry-pi-egl

arm-linux-gnueabi/bin/ld: cannot find #197 https://github.com/go-gl/glfw/issues/197

OpenAL on Raspberry pi https://sites.google.com/site/ciclemsonsoccer/wiki/openalonraspberrypi

Installing Geany on Raspberry pi http://www.raspberry-projects.com/pi/programming-in-c/compilers-and-ides/geany/installing-geany

--- 2017.06.13 Add --- To install Raspbian software on a Raspberry Pi http://www.raspberryconnect.com/raspbian-packages-list/item/109-raspbian-libdevel RPi3(Jessi)なら GLFW, OpenAL があるもよう。。

Raspberry Pi 3 (Raspbian Jessie)の登場のおかげでラズパイ版CuteHSPは実現の可能性が高そうですよ!

まず「Raspberry Pi 3」を買わないと何もできませんが、 どなたか先に試していただいてもさしつかえありませんです(^^)

kikeroga3 commented 7 years ago

RasPiのエミュレータがあると知り、買う前に試してみることに。 http://qiita.com/u6k/items/af43ab9a4326586b9071

以下、qEmu上でRaspbian(Jessie)を動かして出来たことのメモ

・CuteHSPコンソール版は作れた(cl_tinytrek.hsも動いた)  コンパイルコマンド  gcc cutehsp.c -o cutehspcl -lm -Os -std=c99

・下記もインストールできた。  sudo apt-get install geany  sudo apt-get install glfw3-dev  sudo apt-get install openal-dev

ミニマム版をビルドしようとLinux版コマンドで試したが、ビルドエラー。 glfw3が見つからないと言われるので調査中。

以下はRasPi版HSP3Dishが使うライブラリ

sudo apt-get install libgtk2.0-dev sudo apt-get install libglew-dev sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev

GLEWは要らんだろうと思うがGTK2とかSDLは要るのかもしれんのでメモ。

kikeroga3 commented 7 years ago

glfw3が見つからんエラーで悩まされてましたが、解決! まだQEMUで試しただけですが、RasPi3版CuteHSP公開ですよ! https://github.com/kikeroga3/tinyhsp/tree/master/raspi3

こちらのサイトが超参考になりました。感謝! http://bis83.github.io/reboot-raspberry-pi/

近いうちに実機買ってちゃんと動作確認します。 → RasPi3買いました。 動作もOKでしたが、実行するには下記ライブラリ導入だけ必要でした。 sudo apt-get install libglfw3-dev

kikeroga3 commented 7 years ago

新しい記事のメモ http://kikeroga3.seesaa.net/article/452230136.html

kikeroga3 commented 7 years ago

★CuteHSPの立ち位置  将来に渡ってソース改変なしに新環境への対応が可能(…と思われる)  (※C言語+OpenAL+GLFW(OpenGL)対応環境であることが前提ですが)

kikeroga3 commented 7 years ago

★CuteHSPのポリシー

・標準Cで書く ・グラフィック関連処理にはGLFW(OpenGL)を使用 ・サウンド関連処理にはOpenALを使用

目的は プラットフォームごとのメンテをしないで済むように(もしくは最小限にするために) 一つのソースで出来るだけ広範なプラットフォーム上でビルド可能にする

2017.9.22 現在 ビルド可能なことを確認済のプラットフォーム Windows Lubuntu MacOS Raspberry pi

おぼえがきです。

kikeroga3 commented 7 years ago

最近のこと CuteHSPがシングルボードコンピュータの定番トイ言語になれたらいいなぁ とか想い Tinker Board や RPi Zero でも動くか試したいですが(Orange pi とか PINE64 なんかもございますが) Tinkは高い… いやまぁ8000円て性能考えたら安いんですけども Zeroはまだお気軽に入手できない その他、仕事、家庭などの状況から自分の趣味の優先順位が低い というわけで手を出しあぐねております。

…モチベーションがユルくて恐縮です(^^;

kikeroga3 commented 6 years ago

TinkerOSでRPi版CuteHSPがそのまま実行できたとご報告をいただきました。

https://tinkerboarding.co.uk/forum/thread-674-post-2732.html#pid2732

でもなぜかTinker上でビルド成功したバイナリが動かない模様。

kikeroga3 commented 6 years ago

ひっそりとsin, cos, sqrt命令が追加されました。 Windows版の実行ファイル(exe)だけ更新されております。 お手数ですが、他のプラットフォーム版はソース(cutehsp.c)からビルドしてください。 おいおい他のプラットフォーム版も更新はしていきたいと思います。

kikeroga3 commented 6 years ago

Raspberry Pi版の実行ファイルも更新しました。 https://github.com/kikeroga3/tinyhsp/tree/master/raspi3 sin, cos, sqrt命令が追加されてます。

kikeroga3 commented 6 years ago

Linux版の実行ファイルも更新。 https://github.com/kikeroga3/tinyhsp/tree/master/linux sin, cos, sqrt命令が追加されてます。

akatsuki commented 6 years ago

プロジェクト名がCuteHSPではなくTinyHSPのままなのが気になります。 他所で紹介する際は書籍同様CuteHSPがプロジェクト名ということでよろしいでしょうか?

kikeroga3 commented 6 years ago

CuteHSPがプロジェクト名でOKです。 経緯があるのでそのままにしてますが、ややこしくてすみません。