Open kikeroga3 opened 7 years ago
改名(TinyHSP→CuteHSP)のタイミングにあわせて bload, poke, peek 命令をエクストラに追加しました。 bload の実装はdolphiliaさんのアドバイス(というか解答)によって解決しました。
dolphiliaさん、本当にありがとうございました。
うちのLubuntu(16.04)でLinux版の実行ファイル(cutehsp, cutehspx, cutehspcl)を作成してみました。 動作確認のとれた方がおりましたらご一報いただけるとうれしいです。 コンパイル時に --static を付けずに作成しているので、実行可否が環境ごとの共有ライブラリに依存します。
パピーリナックスPrecise-571JPでは「cutehspcl」だけが実行可能でした。
以下、VMwareで試しております。
KonaLinux 2.3 Black でも標準では cutehspcl は動作OK glibc をアップデート(普通はやらない)したら cutehsp も動くようにはなった。 cutehspx はダメ(Segmentation Fault)
Lubuntu 17.04 では標準で cutehspcl と cutehsp まで動くが、cutehspx はダメやった。
コンパイルした環境(実機PC Lubuntu 16.04)ではもちろん全部動作してるんですが、何が足らないのかなあ…
フォント読込用バッファを 5MB→2MB にしてコンパイルし直したら Lubuntu 17.04 で cutehspx も動作しました。なんで?
Konaでもバッファ2MB版はcutehspx動いたす。 KonaLinux 2.3 Black のglibcアップデートの際、参考にしたページ http://qiita.com/61503891/items/df9886f61bdf784c84e2 共有ライブラリ書きかえなのでお勧めはしません。
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); }
変なとこがあったら教えてください。
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
peek関数処理で以下にバグがあったのでメモ
誤 const char r = p[i]; 正 unsigned char r = p[i];
誤のほうではマイナス値が返ってきたりしていた。
sudo apt-get install libopenal-dev
OpenAL導入のメモ
paint命令のバグを修正する。
誤) if (col == paintCol) return;
正) if (col != paintCol) { int lx, rx; // 塗り潰す線分の両端のX座標 … } while ( sIdx != eIdx ); }
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
でイケルのか?よく理解できてない。
モバイル版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
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」を買わないと何もできませんが、 どなたか先に試していただいてもさしつかえありませんです(^^)
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は要るのかもしれんのでメモ。
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
★CuteHSPの立ち位置 将来に渡ってソース改変なしに新環境への対応が可能(…と思われる) (※C言語+OpenAL+GLFW(OpenGL)対応環境であることが前提ですが)
★CuteHSPのポリシー
・標準Cで書く ・グラフィック関連処理にはGLFW(OpenGL)を使用 ・サウンド関連処理にはOpenALを使用
目的は プラットフォームごとのメンテをしないで済むように(もしくは最小限にするために) 一つのソースで出来るだけ広範なプラットフォーム上でビルド可能にする
2017.9.22 現在 ビルド可能なことを確認済のプラットフォーム Windows Lubuntu MacOS Raspberry pi
おぼえがきです。
最近のこと CuteHSPがシングルボードコンピュータの定番トイ言語になれたらいいなぁ とか想い Tinker Board や RPi Zero でも動くか試したいですが(Orange pi とか PINE64 なんかもございますが) Tinkは高い… いやまぁ8000円て性能考えたら安いんですけども Zeroはまだお気軽に入手できない その他、仕事、家庭などの状況から自分の趣味の優先順位が低い というわけで手を出しあぐねております。
…モチベーションがユルくて恐縮です(^^;
TinkerOSでRPi版CuteHSPがそのまま実行できたとご報告をいただきました。
https://tinkerboarding.co.uk/forum/thread-674-post-2732.html#pid2732
でもなぜかTinker上でビルド成功したバイナリが動かない模様。
ひっそりとsin, cos, sqrt命令が追加されました。 Windows版の実行ファイル(exe)だけ更新されております。 お手数ですが、他のプラットフォーム版はソース(cutehsp.c)からビルドしてください。 おいおい他のプラットフォーム版も更新はしていきたいと思います。
Raspberry Pi版の実行ファイルも更新しました。 https://github.com/kikeroga3/tinyhsp/tree/master/raspi3 sin, cos, sqrt命令が追加されてます。
Linux版の実行ファイルも更新。 https://github.com/kikeroga3/tinyhsp/tree/master/linux sin, cos, sqrt命令が追加されてます。
プロジェクト名がCuteHSPではなくTinyHSPのままなのが気になります。 他所で紹介する際は書籍同様CuteHSPがプロジェクト名ということでよろしいでしょうか?
CuteHSPがプロジェクト名でOKです。 経緯があるのでそのままにしてますが、ややこしくてすみません。
CuteHSPについて何か聞きたいことやご意見などあれば自由にお書きください。