Pachislot P/ECE

Origin : piece-me.org

File :

Source code :

Original description :

P/ECE上で動作する、オリジナルのパチスロゲームです。

インストール方法は次のとおりです。

  • pslot1.pex」をP/ECEに転送してください。

スペックは次のとおりです。

  • 5号機の規則に(概ね)沿っています。
  • 5ライン、3枚掛け専用、ノーマルタイプです。
  • 通常時・ボーナス中ともに、押し順不問・目押し不要で取りこぼし無しです。ボーナス絵柄も目押し不要で、成立ゲームで必ず揃います。
  • 三連チェリーがたくさん揃うほど、高設定に期待できます。(チェリーを目押ししなかった場合は、二連以下,又は,スイカとして揃います)
  • 詳細は、説明書と計算表をご参照ください。

操作方法は次のとおりです。

  • ゲーム画面
    マニュアル操作を行う場合は、以下の順でボタンを押してください。
    1. Bボタン        MAXBETボタン、又は、メダル1枚投入に相当します。
    2. 上ボタン        スタートレバーに相当します。
    3. 左ボタン        左停止ボタンに相当します。┐
    4. 中ボタン        中停止ボタンに相当します。┼順不同
    5. 右ボタン        右停止ボタンに相当します。┘ワンキー操作を行う場合は、Aボタンだけで遊べます。
    1. Aボタン(1回目)   MAXBETボタン、又は、メダル3枚投入に相当します。
    2. Aボタン(2回目)   スタートレバーに相当します。
    3. Aボタン(3回目)   左停止ボタンに相当します。
    4. Aボタン(4回目)   中停止ボタンに相当します。
    5. Aボタン(5回目)   右停止ボタンに相当します。いつでも:
    • SELECTボタン   データ画面を表示します。
  • データ画面
    • 上/下ボタン      オートプレイを選択します。
    • Aボタン        ゲーム画面に戻ります。
    • Bボタン        設定を表示して、終了します。

Pachislot P/ECE ART

Origin : piece-me.org

File :

Source code :

Original description :

P/ECE上で動作する、オリジナルのパチスロゲームです。

インストール方法は次のとおりです。

  • pslot2.pex」をP/ECEに転送してください。

スペックは次のとおりです。

  • 5号機の規則に(概ね)沿っています。
  • 斜め2ライン+小山,小谷の4ライン、3枚掛け専用、ART機です。
  • 通常時とボーナス中は、押し順不問・目押し不要で取りこぼし無しです。ボーナス絵柄も目押し不要で、成立ゲームで必ず揃います。変則押しペナルティは有りません。
  • ART中は、押し順ナビに従ってください。目押し不要で取りこぼし無しです。
  • 詳細は、ゲームフロー,スペック,計算表をご参照ください。

操作方法は次のとおりです。

  • ゲーム画面
    マニュアル操作を行う場合は、以下の順でボタンを押してください。
    1. Bボタン        MAXBETボタン、又は、メダル1枚投入に相当します。
    2. 上ボタン        スタートレバーに相当します。
    3. 左ボタン        左停止ボタンに相当します。┐
    4. 中ボタン        中停止ボタンに相当します。┼順不同
    5. 右ボタン        右停止ボタンに相当します。┘ワンキー操作を行う場合は、Aボタンだけで遊べます。
    1. Aボタン(1回目)   MAXBETボタン、又は、メダル3枚投入に相当します。
    2. Aボタン(2回目)   スタートレバーに相当します。
    3. Aボタン(3回目)   左停止ボタンに相当します。ART中は自動で押し順ナビに従います。
    4. Aボタン(4回目)   中停止ボタンに相当します。ART中は自動で押し順ナビに従います。
    5. Aボタン(5回目)   右停止ボタンに相当します。ART中は自動で押し順ナビに従います。いつでも:
    • SELECTボタン   データ画面を表示します。
  • データ画面
    • 上/下ボタン      オートプレイを選択します。
    • Aボタン        ゲーム画面に戻ります。
    • Bボタン        設定を表示して、終了します。

Pachislot P/ECE AT

Origin : piece-me.org

File :

Source code :

Original description :

P/ECE上で動作する、オリジナルのパチスロゲームです。

インストール方法は次のとおりです。

  • pslot3.pex」をP/ECEに転送してください。

スペックは次のとおりです。

  • 5号機の規則に(概ね)沿っています。
  • 中段1ラインの、ゼロボAT機です。
  • 通常時は、左リールを最初に停止してください。目押し不要で取りこぼし無しです。チェリーを取りこぼした場合、一枚役が揃います。
  • AT中は、押し順ナビに従ってください。目押し不要で取りこぼし無しです。チェリーを取りこぼした場合、一枚役が揃います。
  • 詳細は、ゲームフロー,スペック,計算表を参照してください。

操作方法は次のとおりです。

  • ゲーム画面
    マニュアル操作を行う場合は、以下の順でボタンを押してください。
    1. Bボタン        MAXBETボタン、又は、メダル1枚投入に相当します。
    2. 上ボタン        スタートレバーに相当します。
    3. 左ボタン        左停止ボタンに相当します。┐
    4. 中ボタン        中停止ボタンに相当します。┼順不同
    5. 右ボタン        右停止ボタンに相当します。┘ワンキー操作を行う場合は、Aボタンだけで遊べます。
    1. Aボタン(1回目)   MAXBETボタン、又は、メダル3枚投入に相当します。
    2. Aボタン(2回目)   スタートレバーに相当します。
    3. Aボタン(3回目)   左停止ボタンに相当します。AT中は自動で押し順ナビに従います。
    4. Aボタン(4回目)   中停止ボタンに相当します。AT中は自動で押し順ナビに従います。
    5. Aボタン(5回目)   右停止ボタンに相当します。AT中は自動で押し順ナビに従います。いつでも:
    • SELECTボタン   データ画面を表示します。
  • データ画面
    • 上/下ボタン      オートプレイを選択します。
    • Aボタン        ゲーム画面に戻ります。
    • Bボタン        設定を表示して、終了します。

“Run.bat” fix

Origin : piece-me.org

File :

Original description :

P/ECE開発環境付属の「isd.exe」及び「run.bat」には、以下の不具合があります。
P/ECEのプログラムが、pceAppProc()の中で長時間の処理を行い、5秒間ぐらい処理を返さない時に、PC上で「run.bat」を実行すると、P/ECEがハングアップする。
不具合の原因は、「isd.exe」が、P/ECEのプログラムが終了するのをきちんと待たずに、見切り発車でsrfファイルを書き込み、実行開始してしまっていることでした。
具体的には、「\usr\PIECE\tools\isd\isdsub.c」のismWriteSrfFile()の処理が、適切ではありません。

厳密には、「isd.exe」や「run.bat」の不具合ではなく、「pieceif.dll」の不具合なのですが、今回は、「run.bat」を代替する修正プログラムを作ることにしました。
理由は、「pieceif.dll」を差し替えると影響が大きいですし、「pieceif.dll」は32ビット環境と64ビット環境で異なるので、差替えの手間がわずらわしいからです。

「r.exe」の使用方法は、P/ECE開発環境付属の「run.bat」と同じです。
「r.exe」を、実行パスの通ったフォルダに、置いておいてください。
srfファイルが在るフォルダで、「r」を実行すると、srfファイルをP/ECEに転送し実行します。srfファイル名の指定は不要です。
P/ECE開発環境の「run.bat」で転送しようとすると、P/ECEがハングアップしてしまうようなプログラムでも、「r.exe」ならば、ハングアップせずに転送し実行できます。

TCL interpreter

Origin : piece-me.org

File :

Source code :

List of supported functions :

Original description :

次はアプリケーションプログラムを作るつもりだったのですが、予定を変更して、もう一度計測プログラムをバージョンアップしました。
変更点は次のとおりです。

  • 高速化しました。
  • 機能をいくつか追加しました。詳細は、対応した機能の一覧をご参照ください。

高速化した結果は、こうなりました。

 結果[個]時間[ms]
C(int)6221
C(flt)62110
C(dbl)62441
Lua62828
Tcl62490970

約1.68倍の高速化です。

前回以降、P/ECE用Tclインタプリタを使って、簡単なボードゲームを作りかけていたのですが、実行速度が遅すぎて断念しました。
スクリプトを数行実行するたびに、数秒間止まるぐらい遅いです。
元々このP/ECE用Tclインタプリタは、コードサイズを小さくすることが目標で、速度は度外視だったのですが、それにしても限度があります。
そこで、少しは高速化することにしました。

とはいえ、Tclインタプリタ自体に手を入れると、複雑になったりコードサイズが増えて元の目標から外れるので、別の方法で高速化しました。
主にメモリ管理の高速化で、下記三点の変更を行いました。①②③の順に、高速化の効果が高かったです。

  1. ガーベージコレクタを高速RAMに転送して実行するようにしました。
    ただし、常にカベージコレクタを高速RAMに配置すると無駄が大きいので、ガーベージコレクションの実行時のみ転送するようにしました。
    P/ECEカーネルが、液晶データの変換やフラッシュメモリの書き換えルーチンを、一時的に高速RAMに転送して実行するのと同様の方法です。
    P/ECEカーネルの仕組みで言うところの、’FRAM4領域’への転送です。
  2. ガーベージコレクタのスイープ処理を高速化しました。
    これまでは、ガーベージコレクタがメモリブロックを開放するときに、P/ECE APIのpceHeapFree()を使用していました。
    しかし、pceHeapFree()を呼び出すと、その都度、ヒープを先頭から走査しなおすことになり、速度低下の一因となっていました。
    今回、ガーベージコレクタのメモリ開放処理を自前で実装して、スイープ処理を1パスで実行するようにしました。
  3. メモリ割り当てアルゴリズムを、ファーストフィット方式に置き換えました。
    シンプルなメモリ割り当てアルゴリズムの中では、一番単純なファーストフィット方式が結局、最善と聞いた事があります。
    ベストフィット方式とかにすると、処理が増えて遅くなるし、直感に反して却ってメモリ使用効率も悪くなるのだそうです。
    P/ECE APIのpceHeapAlloc()は、ベストフィット方式のメモリ割り当てアルゴリズムが使用されていて、効率が悪い可能性があります。
    そこで、pceHeapAlloc()のカーネルサービスベクタをフックして、ファーストフィット方式のメモリ割り当て処理に置き換えました。

Space Search

Origin : piece-me.org

File :

Source code :

Original description :

スペースサーチ(エポック社・1980)に良く似たゲームです。

インストール方法は次のとおりです。

  • spacsrch.pex」と「spacsrch.tcl」をP/ECEに転送してください。

遊び方は次のとおりです。

  • 9×7座標のどこかに隠れている、4隻の宇宙船を探すゲームです。
  • 任意の座標から、幾つの軸上に宇宙船が存在するかを、サーチすることができます。
  • サーチした結果から推測して、効率良く宇宙船を見つけてください。

操作方法は次のとおりです。

  • タイトル画面
    • AまたはBボタン  ゲームを開始します。
  • ゲーム画面
    • 方向ボタン     カーソルを移動します。
    • AまたはBボタン  サーチします。
  • いつでも
    • SELECTボタン プログラムを終了します。

Speed calculator for LUA script

Origin : piece-me.org

File :

Source code :

Lua programming language 5.3.0 :

Original description :

年始頃に、「Lua 5.3.0」がリリースされていました。
Lua 5.3.0の新しい機能の中で、特に注目するのは、整数演算が対応されたことです。

Lua 5.2.xまでのLuaは、標準設定では、数値の内部処理が全て実数演算で処理されていました。
一見遅そうですが、実際には極端に遅い事も無く、良い割り切り方だと思っていました。確かAwkとかもそうですよね。

そんなわけで、実数演算のままでもさほど困らないのですが、Lua 5.3.0では整数演算が対応されました。
整数同士の演算ならば整数で処理するという動作で、普通のプログラム言語に近くなった感じです。

尚、Lua 5.3.0では、整数同士の演算でも、除算(/)だけは常に実数で処理されます。VBAと同じ感じですね。
「Lua 5.2.xとLua 5.3.0とで、同じ式を書いても結果が違う」というような非互換性は、無さそうです。
内部処理が整数か実数かの違いも、あまり気にしなくて良さそうです。(多分です…今後使って検証しようと思います。)

整数同士の演算が整数演算になったということで、高速化が期待できます。
というわけで、また速度計測を行ってみました。
計測条件の詳細は、前回(2012年2月8日)の記事を参照してください。今回は全て、高速RAM使用,48MHz駆動で計測しました。

結果はこうなりました。

結果[個]時間[ms]
C(int)168175
C(flt)168991
C(dbl)1683978
Lua1685232

まず、前回の結果に較べて、C(int)の結果が少し早くなっていますが、これはLuaとは関係ありません。
前回の計測から二年間の間に、自作の整数除算ルーチンを少し高速化した事が効いたのだと思います。

C(int)は置いといて、Luaの速度も早くなっています。前回の結果に較べて、約23%の高速化です。
しかし、実数演算を整数演算に置き換えたにしては、意外と高速化の効果が小さいです。
効果が小さい理由は、Lua 5.3.0の整数演算が、64ビット整数(long long)だからです。
P/ECEのCPU S1C33209は、32ビットCPUで、64ビット整数演算の命令は持っていません。
64ビット整数演算は、ライブラリ関数を呼び出してソフトウェアで処理する事になり、整数演算とはいえあまり早くありません。
実は今回の計測結果は、64ビット整数演算も高速RAMに配置して実行したのですが、それでも結構足を引っ張っているみたいです。

Lua 5.3.0の標準設定では、実数演算はdouble,整数演算はlong longで処理されます。
コンパイル時に特定のシンボルを定義しておくと、実数演算と整数演算の型を変える事も出来ます。
シンボル「LUA_USE_C89」を定義しておくと、実数演算はdouble,整数演算はintで処理されます。
シンボル「LUA_32BITS」を定義しておくと、実数演算はfloat,整数演算はintで処理されます。
これらの設定でも、速度計測してみました。

結果はこうなりました。

結果[個]時間[ms]
C(int)168175
C(flt)168991
C(dbl)1683978
Lua1683253
結果[個]時間[ms]
C(int)168175
C(flt)168991
C(dbl)1683978
Lua1682990

前回の結果に較べて、LUA_USE_C89は52%の高速化、LUA_32BITSは56%の高速化になりました。

ところで、LUA_USE_C89とLUA_32BITSで速度が違うのはなぜでしょうか。
整数演算は、どちらもintで行われるので、違いは無いはずです。
『2~1000の範囲にある素数の数』を求めるスクリプトには、一見、実数演算になる箇所も無さそうです。
しかし良く見ると、剰余演算(%)が有り、この箇所が実数演算で処理されるのだと思います。
LUA_USE_C89ではdouble,LUA_32BITSではfloatで処理され、その違いが速度差になるのだと思いました。

P/ECEとS1C33209のような、組み込み用32ビットマイコンでは、きっと、LUA_32BITSで使うのが適切なのでしょうね。
ゲーム用途ならば、実数演算はfloat,整数演算はintで大丈夫そうです。(floatはちょっと心許ない場合も有りますが…)
でもまずは、Lua 5.3.0の標準設定のまま、実数演算はdouble,整数演算はlong longで使ってみようと思います。
これまでlong longを多用することは無かったので、64ビット整数演算ルーチンの動作検証をする良い機会です。

Standard Music Driver Envelope Vibrato Calculation Table

Origin : piece-me.org

File :

Original description :

P/ECE標準音楽ドライバーのMMLの、エンベロープ(‘E’コマンド)とビブラート(‘Y’コマンド)の、パラメータと効果の関係を計算したエクセルです。

Google translation :

This is an Excel file that calculates the relationship between the parameters and effects of the envelope (‘E’ command) and vibrato (‘Y’ command) of the P / ECE standard music driver MML.

Gattai Robot ☆M – 合体ロボ☆M

Origin : piece-me.org

File :

Source code :

Original description :

合体ロボ☆V(ファイブ)(こまや・1981)に良く似たゲームです。

インストール方法は次のとおりです。

  • gattai.pex」をP/ECEに転送してください。

遊び方は次のとおりです。

  • ボタンを押してルーレットのランプを止めてください。
  • 制限時間内に五箇所すべてにランプを止める事が出来れば、合体成功です。

操作方法は次のとおりです。

  • タイトル画面
    • AまたはBボタン  ゲームを開始します。
    • SELECTボタン プログラムを終了します。
  • ゲーム画面
    • AまたはBボタン  ランプを止めます。
    • SELECTボタン タイトル画面に戻ります。
  • いつでも
    • STARTボタン  一時停止/再開します。

UTF-8 text viewer

Origin : piece-me.org

File :

Source code :

Original description :

UTF-8形式のテキストファイルを、P/ECE上で表示します。

インストール方法は次のとおりです。

  • utf8view.pex」をP/ECEに転送してください。
  • UTF-8形式のtxtファイルを、P/ECEに転送してください。

操作方法は次のとおりです。

  • ファイル選択画面
    • 上下左右ボタン    ファイルを選択します。
    • A又はBボタン    テキスト表示画面へ進みます。
  • テキスト表示画面
    • 上下左右ボタン    画面をスクロールします。
    • A又はBボタン    ファイル選択画面へ戻ります。
  • いつでも
    • SELECTボタン プログラムを終了します。