SN製ProDGデバッガは、コンソールゲーム界における最高のデバッガである。質実剛健たるC/C++コンパイラと、高速かつフレキシブルなリンカとのペアで、大規模プロジェクトを進めるにあたって他に必要なものは何もない。しかも、SN Systemsのサポートには比類するものがない。必要な機能があれば即刻対処してくれるのだ!これ以上何が必要だろうか?
このツールセットなしに、「Star Wars - Rogue Squadron 2: Rogue Leader」の完成は不可能だっただろう。
Thomas Engel
Director of Technology
技術顧問
デバッガー スクリプトとは
注:デバッガー スクリプトは、ProDG Plus for PlayStation 2 のみで使用可能です。
C スクリプト インタプリタは、ProDG Debugger の実行時に関数を追加/更新可能な 1 つの C プログラムです。新しい「スクリプト ペイン」タイプを使用することにより、異なる処理を実行するプログラムを簡単かつインタラクティブに記述することができます。

このペインは TTY ペインと似ていますが、基本的に編集機能が用意されているため、スクリプトの記述と実行がその場で可能になります。
スクリプトは、一度だけ使用する「処理完了まで実行」タイプのスクリプトを記述することができ、ターゲットやデバッガー イベント (例外、ウィンドウ更新、キー入力など) にバインドすることもできます。ターゲットに対しては、これらのスクリプトを使用してアクセスしてメモリの内容を取得することができ、コンソールからの出力をデバッガーのペインに表示することもできます。
Debugger に搭載された C インタプリタを構成する本製品は、多くの ANSI C に対応し、搭載された多くの関数にアクセスできるため、スクリプトによる Debugger やターゲット コンソールとのインタラクションが可能になります。スクリプトが読み込まれると (またはイミーディエイト モードのスクリプト関数が実行された場合)、バイトコード形式にコンパイルされた後、変換されます。
実行速度も非常に高速で、通常は、1 秒間に約 100 万の C ステートメントを実行することができます。ProDG Plus のスクリプト インタプリタには、一般的な Windows スクリプト機能やコード コンパイル方式と比較して多くの利点があります。この機能は、COM インターフェイスを使用してアプリケーションを制御する方法より非常に高速なため、多くの処理が実行可能となり、また使用も簡単です。スクリプト インターフェイスは C で記述されているため、C プログラマーにとっては非常に使用しやすくなっています。
スクリプトの使用方法
スクリプト ファイルは、Debugger に読み込んで実行できる C のソース コードが記述されたテキスト ファイルです。このテキスト ファイルは、任意のエディタを使用して作成/編集できます。
注:現在のバージョンでは、Debugger 内でスクリプトファイルを編集できません。
スクリプト ファイルの拡張子は特に決められていませんが、基本的に ANSI C なため「.c」を使用することにより、フォーマット方法や構文の色設定をエディタに認識させることができます。また、コンソール プロジェクト内のソース コードに使用しているほかの C プロジェクト ファイルと区別する必要がある場合は、別の拡張子を使用してください。
スクリプトは、以下の用途に使用できます。
スクリプト サンプル
タイマーをセットすることにより、SM_TIMER メッセージを含むペインのコールバック関数を、特定の間隔でコールバックすることができます。この機能は、スクリプト ペインを定期的に更新して、ターゲット コンソールから取得した最新情報を表示する場合に便利です。
以下のシンプルな例は、タイマー コールバックの一般的なシーケンスです。
#include <stdio.h>
#include "SNscript.h"
int MyCallback(SNPARAM message, SNPARAM param0, SNPARAM param1, SNPARAM param2)
{
static int count = 0;
switch(message)
{
case SM_TIMER:
count++;
printf("Timer callback %08X\n", count);
break;
}
return 0;
}
int main(int argc, char** argv)
{
SNSetCallback("MyCallback"); // コールバック ハンドラをセット
SNHookMessage(SM_TIMER); // タイマー メッセージをフック
SNSetTimer(100); // 毎秒 1
return 0;
}