スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | スポンサー広告

[Lua] WindowsでコンパイルしたLuaバイナリはPS2環境で読めるか?

実験する機会があったので、やってみました。ちなみにLua5.0.2での実験です。Lua5.1については後のほうをご覧ください。

Luaではテキスト形式のスクリプトをコンパイルしてバイナリにすることができます。バイナリにすればロードの負荷が軽減し、さらにコンパイル時に -s オプションを使えば、デバッグ情報を取り去ることでサイズも小さくなります。
Luaのバイナリ形式では、(Javaのバイトコードのように)ある環境で作ったバイナリがすべての環境で動くことを保証しているわけではありません。とはいえ、いくつかのポイントを押さえれば動くはずです。

では、実験です。


Windows版のLuaCでluaスクリプトをコンパイルし、バイナリファイルを作成します。
PS2環境から、Lua(luaL_loadbuffer)でバイナリをロードすると、以下のようなエラーになりました。


virtual machine mismatch in ***: size of Instruction is 8 but read 4


Instructionのサイズが違うYO!と怒られてしまいました。PS2環境ではInstructionのサイズが8バイトなのに、バイナリは4バイトの設定になっている、と。
そこでInstructionの定義を見てみます。llimits.hの以下の部分です。


typedef unsigned long Instruction;


PS2ではunsigned longは8バイト(変な実装・・・)なので、以下のように4バイトのunsigned intに変えてやる必要があります。


#ifdef _PS2
typedef unsigned int Instruction; /* PS2の場合 */
#else
typedef unsigned long Instruction; /* その他 */
#endif


これでOK!ロード可能になりました。


実行時にどういったチェックをしているのか、ということについては、lundump.cを見てみると、 int size_t Instruction lua_Number のそれぞれのサイズをチェックしていることがわかります。これらを一致させてやれば良いと思われます。

PS2では数値型(lua_Number)をLua標準のdoubleからfloatに変えたほうがパフォーマンス上良いとされますが、この場合、実行環境だけでなく、コンパイラ(LuaC)側でも同様の修正を行わないといけませんのでご注意。




さて・・・ここまではLua5.0の話。ではLua5.1ではどうでしょう。
Lua5.1では、「プラットフォームのエンディアンが異なると(そのままでは)読めない」という方向に仕様が変更されました。とはいえ、Windows環境はリトルエンディアン、PS2環境も通常リトルエンディアンですので問題ありません。PowerPC MacやXBox360に持っていく場合は問題あると思われます。

また、上記のようにLua5.0では問題のあったInstructionの定義ですが、Lua5.1ではこのようになっています。

typedef lu_int32 Instruction;

これなら問題なさそうですね。Luaはバージョンが上がるごとに機種間の互換性が上がっている、というのも頷けます。

そんなとこで。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

2006.04.13 | Comments(3) | Trackback(0) | Lua

コメント

初心者の拙い質問ですみません。

LuaバイナリをPS2環境で読むにはCD-ROMか何かを通して普通に行えるのでしょうか。

2006-10-09 月 16:12:24 | URL | mai-my #- [ 編集]

PS2の開発環境は専用のもの(CodeWarrior等)が必要になります。
(PS2Linuxを除けば)OSなどで標準化されていませんから、Luaバイナリをメモリ上に読み込む部分は自分でプログラムを書く、またはサードパーティのライブラリなどを使用する、しかありません。
仕事で作成されるのでなければ、かなり敷居の高い話だと思います。
ご参考になればと思います。

2006-10-10 火 13:33:41 | URL | はむ! #sqCyeZqA [ 編集]

そうですか・・・なかなか厳しいものがありますね。

2006-10-10 火 20:46:40 | URL | mai-my #- [ 編集]

コメントの投稿


秘密にする

新しい記事へ <<  | HOME |  >> 古い記事へ

広告:

FC2Ad

カテゴリ展開メニュー

  • 未分類(13)
  • Lua(38)
  • プログラミング(11)
  • 食べ物(3)
  • SPAM(2)
  • ゲーム開発(4)
  • GIS/GPS/GoogleMaps(2)
  • スポーツ(1)
  • Skype API(1)
  • AR(1)

はてブ ランキング

ブログ全体: このWikiのはてなブックマーク数

プロフィール

はむ!

Author:はむ!
よく使う言語・環境:
C++,C,Lua,java,VBA,DB
たまにPHPとかjavascript
血液型:O型

メール: lua%ham.nifty.jp
(%を@に変えてください)
ついったー: @hammmm

Lua関連アンテナ

ブロとも申請フォーム

この人とブロともになる

全記事表示リンク

全ての記事を表示する

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。