Shinobi Library

Ver.0.50
1998/05/08

履歴

1998/05/08 Ver.0.50
pdExecPeripheralServer関数はPre2から、njWaitVSynch関数に吸収されたので削除されました。
それに伴い、njWaitVSynch関数にて、ペリフェラル情報の取得を行っていますので、必ず実行してください。

目次

今回のSDKでサポートされる関数一覧

システム関数

sbInitSystem Shinobiライブラリの初期化
sbExitSystem Shinobiシステムの終了

ファイルシステム関数

gdFsInit ファイルシステムの初期化
gdFsCreateDirhn ディレクトリハンドルの取得
gdFsLoadDir ディレクトリ情報の取得
gdFsChangeDir カレントディレクトリの移動
gdFsOpen ファイルのオープン
gdFsGetFileSize ファイルサイズの取得
gdFsRead ファイルのリード
gdFsClose ファイルのクローズ

メモリマネジメント関数

syMallocInit Malloc用のヒープ領域の確保と宣言
syMalloc メモリの確保
syFree メモリの開放

ペリフェラルデータ取得関数

pdGetPeripheral ペリフェラルデータの取得
pdGetPeripheralError ペリフェラルステータスの取得

注意事項

  1. 上記関数の中で、gdFsInitと、syMallocInit及びnjInitSystemはライブラリ初期化関数sbInitの中で実行されます。
    今回の提供においては諸処の事情により、sbInitSystem関数のソース提供を見送っておりますが、 今後のリリースにおいてsbInitSystem関数のソースは公開されます。
    従って、本SDKにおいては、これらの関数を使って細かい設定を行う事が出来ません。
    但し、sbInitSystemに与える引数はそのままnjInitSystemに渡されますので、 SET2用にコーディングさているnjInitSystemはsbInitSystemに書き換える事で、 同一のNinja環境になります。
    しばらくの間御不便をおかけいたしますが、予め御了承ください。

  2. SET2環境からSET4環境への以降に関する手順については、
    「set2to4.txt」
    を必ずご覧頂くようお願いいたします。

  3. 本ライブラリでは、Bセクション以降をライブラリのメモリアロケート用の空間 (メモリアロケート関数「syMalloc」が確保するメモリ空間)として確保するため、 Bセクション以降にユーザセクションが存在していた場合、 データが破壊される可能性があります。 独自にユーザセクションを配置する場合、必ずBセクションよりも前に来るようにしてください。

システム関数

目次

0. 概要

KATANAのハードウェアの初期化とSHINOBIライブラリを利用可能な状態にします。
SHINOBIライブラリにはいくつかの初期化関数が存在しますが、 それらの初期化関数を適切な順序で呼び出し、もっとも一般的な設定にします。
又、この初期化関数部分は将来的にソースを公開しますので、ライブラリ初期化手順のサンプルとして利用する事が出来ます。

※今回のリリースでは、初期化関数のソースは公開しておりません。 今後のリリースでソースを公開いたします。 本関数の中で、njInitSystemを呼び出しますので、SET2開発環境でのnjInitSystemは本関数に置き換えてください。

1. データ型

2. 関数仕様


sbInitSystem

[関数]
void sbInitSystem( Int mode, Int frame, Int Count );
[入力]
mode
画面モード(解像度)
画面の解像度を指定します
frame
フレームバッファモード
フレームバッファのカラーモードを設定します
count
フレームカウント数
フレーム数を1/60秒を単位とした値で指定します
[出力]
なし
[戻り値]
なし
[機能]
ハードウェアを初期化し、ライブラリを使用可能な状態にします。
また、内部で、njInitSystemを呼び、画面解像度を指定したモードにします。
2Dクリップエリアを画面サイズと同じにします。
Zクリップを、-1.0~-60000.0にします。
3Dのスクリーン投影面の距離を500にします。
アスペクトをXY共、1.0にします。
カラーモードを、NJD_COLOR_MODE_NORMAL にします。

フレームカウント数は1/60を単位とした値で設定します。
例えば2を設定すると、1/30秒毎にフレームチェンジします。
フレームチェンジは、njWaitVSync関数で行います。

設定できる画面モードは以下の通りです。
変数名 画面モード
NJD_RESOLUTION_VGA VGA
NJD_RESOLUTION_320x240_NTSCNI NTSC ノンインターレース 60Hz
NJD_RESOLUTION_320x240_NTSCI NTSC インターレース 30Hz
NJD_RESOLUTION_640x240_NTSCNI NTSC ノンインターレース 60Hz
NJD_RESOLUTION_640x240_NTSCI NTSC インターレース 30Hz
NJD_RESOLUTION_640x480_NTSCI NTSC インターレース 30Hz
NJD_RESOLUTION_320x240_PALNI PAL ノンインターレース 50Hz
NJD_RESOLUTION_320x240_PALI PAL インターレース 25Hz
NJD_RESOLUTION_640x240_PALNI PAL ノンインターレース 50Hz
NJD_RESOLUTION_640x240_PALI PAL インターレース 25Hz
NJD_RESOLUTION_640x480_PALI PAL インターレース 25Hz

フレームバッファモードは以下の通りです。
NJD_FRAMEBUFFER_MODE_RGB565
NJD_FRAMEBUFFER_MODE_RGB555
NJD_FRAMEBUFFER_MODE_ARGB4444
NJD_FRAMEBUFFER_MODE_ARGB1555
NJD_FRAMEBUFFER_MODE_RGB888
NJD_FRAMEBUFFER_MODE_ARGB8888

[使用例]
sbInitSystem( NJD_RESOLUTION_VGA, NJD_FRAMEBUFFER_MODE_RGB565, 1 );
Shinobiライブラリを初期化し、
画面解像度をVGA(640x480)、1フレーム、1/60秒とする。
[備考]
プログラムの最初に必ず行ってください。
ハードウェアの構成により、設定できない画面モードがあります。
これまで、njInitSystemで行っていたものは、本関数に差し替えてください。
引数はnjInitSystemとまったく同じですので、関数リテラルのみを変更すれば
同様に動作させる事が出来ます。

本関数のソースは今後のSDKにおいては開示されます。
今回のSDKでは、この部分はオブジェクトファイルの形で提供されますが、 ファイルシステムを使う場合と使わない場合では、リンクするオブジェクトファイルが異なります。

ファイルシステムを利用する場合
sbinit.obj

ファイルシステムを利用しない場合
sbinitn.obj

をリンクしてください。

しばらくの間、ご不便をおかけし、大変に申し訳ありませんが、よろしくお願いいたします。


sbExitSystem

[関数]
void sbExitSystem( void )
[入力]
なし
[出力]
なし
[戻り値]
なし
[機能]
システムを終了します。
njExitSystemに代えて実行してください。

ファイルシステム関数

目次

0. 概要

GD-ROM のアクセス機能を提供します。

1. データ仕様

1.1 定数

Seek mode Status Errors

1.2 データ型

GDFS
ファイルハンドル

GDFS_DIRREC
ディレクトリレコードハンドル

1.3 マクロ

GDFS_WORK_SIZE(x)
引数: x ... 同時にオープンするファイル数
意味: 必要とされるワークバッファサイズ

GDFS_DIRREC_SIZE(x)
引数: x ... 格納されるディレクトリエントリ数
意味: 必要とされるディレクトリレコードバッファサイズ

2. 関数仕様

2.1関数一覧

関数 機能
gdFsLoadDir ディレクトリ情報の取得
gdFsChangeDir カレントディレクトリの変更
gdFsOpen ファイルを開く
gdFsGetFileSizeファイルサイズの取得
gdFsRead ファイルの読み込み
gdFsClose ファイルを閉じる

2.2関数API


gdFsInit

[関数]
Sint32 gdFsInit(Uint32 max_open, void *gdfs_work, Uint32 max_dirent, void *gdfs_dirrec)
[入力]
max_open
同時にオープンできるファイル数
gdfs_work
ワークエリアのポインタ (ユーザー領域から提供)
max_dirent
カレントディレクトリのエントリ数
gdfs_dirrec
カレントディレクトリのバッファ (ユーザー領域から提供)
[出力]
なし
[戻り値]
GDFS_ERR_OK
正常終了
その他の値
エラー
[機能]
ライブラリの初期化をする。
[使用例]
Uint8 gdfswork[GDFS_WORK_SIZE(8)];
Uint8 gdfscurdir[GDFS_DIRREC_SIZE(64)];

gdFsInit(8, gdfswork, 64, gdfscurdir);

[注意]
gdfs_work は 32 Byte align でなければなりません。
本関数は、sbInit関数内で実行されます。
今回のSDKでは、sbInit関数のソースプログラムは公開されませんが、今後
のSDKでは、sbInitソース部分を公開しファイルシステムの初期化時に設定を
変更できるようになる予定です。
sbInit内でのデフォルト値は以下の通りです。

同時オープンできるファイル数:8
ワークエリアへのポインタ    :グローバル変数「gdfswork」
                             Uint8 gdfswork[GDFS_WORK_SIZE(8)];
カレントディレクトリのエントリ数:1024
カレントディレクトリのバッファ:グローバル変数「gdfsurdir」
                                Uint8 gdfscurdir[GDFS_DIRREC_SIZE(1024)];

gdFsCreateDirhn

[関数]
GDFS_DIRREC gdFsCreateDirhn(void *gdfs_dirrec, Uint32 max_dirent)
[入力]
gdfs_dirrec
ディレクトリのバッファ
max_dirent
ディレクトリのエントリ数
[出力]
なし
[戻り値]
ディレクトリレコードハンドル
[機能]
ディレクトリハンドルを生成する
[使用例]
Uint8 dirbuf[GDFS_DIRREC_SIZE(64)];
GDFS_DIRREC g_dir;

g_dir = gdFsCreateDirhn(dirbuf, 64);

[注意]
ディレクトリエントリ数は最低 3 つ必要です。
ディレクトリには必ず自分自身を指し示すディレクトリ、
親ディレクトリを指し示すディレクトリが先頭に置かれています。
ファイルは 3 番目のエントリ以降となります。

gdFsLoadDir

[関数]
Uint32 gdFsLoadDir(Sint8 *dirname, GDFS_DIRREC gdfs_dirrec)
[入力]
dirname ... ディレクトリ名
[出力]
gdfs_dirrec
ディレクトリレコードハンドル
(NULL の場合はカレントディレクトリへ)
[戻り値]
GDFS_ERR_OK
正常終了
その他の値
エラー
[機能]
ディレクトリレコードを読み込む。
[使用例]
/* サンプル 1 */
/* MOVIE directory を g_dir へ読み取る */
Uint8 dirbuf[GDFS_DIRREC_SIZE(64)];
GDFS_DIRREC g_dir;

g_dir = gdFsCreateDirhn( dirbuf, 64 );
gdFsLoadDir("MOVIE", g_dir);

/* サンプル 2 */
/* カレントディレクトリを DATA directory へ移動する */
gdFsLoadDir("DATA", NULL);


gdFsChangeDir

[関数]
Uint32 gdFsChangeDir(Sint8 *dirname)
[入力]
dirname ... ディレクトリ名
[出力]
なし
[戻り値]
GDFS_ERR_OK
正常終了
その他の値
エラー
[機能]
カレントディレクトリを変更する。
[使用例]
/* カレントディレクトリを DATA directory へ移動する */
gdFsChangeDir("WORK");

gdFsOpen

[関数]
GDFS gdFsOpen(Sint8 *fname, GDFS_DIRREC gdfs_dirrec)
[入力]
fname
ファイル名
gdfs_dirrec
ファイル名を検索するディレクトリレコードハンドル
(NULL の場合はカレントから検索)
[出力]
なし
[戻り値]
NULL
失敗
それ以外
ファイルハンドル
[機能]
ファイルのオープン。
[使用例]
/* サンプル 1(カレントディレクトリのファイルにアクセスするとき) */
GDFS gf;

gf = gdFsOpen("A.BIN", NULL);

/* サンプル 2(サブディレクトリのファイルにアクセスするとき) */
GDFS gf;
Uint8 dirbuf[GDFS_DIRREC_SIZE(64)];
GDFS_DIRREC g_dir;

g_dir = gdFsCreateDirhn(dirbuf, 64);
gdFsLoadDir("MOVIE", g_dir);
gf = gdFsOpen("SMP.MOV", g_dir);


gdFsGetFileSize

[関数]
Bool gdFsGetFileSize(GDFS gdfs, Uint32 *fsize);
[入力]
gdfs
ファイルハンドル
[出力]
*fsize
ファイルサイズ (バイト)
[戻り値]
TRUE / FALSE
[機能]
ファイルサイズを取得する。
[使用例]
GDFS gf;
Uint32 flen;

gf = gdFsOpen("TEST.BIN", NULL);
gdFsGetFileSize(gdfs, &flen);


gdFsRead

[関数]
Sint32 gdFsRead(GDFS gdfs, Uint32 nsct, void *buf)
[入力]
gdfs
ファイルハンドル
nsct
読み込むセクタ数
buf
格納バッファ
[出力]
なし
[戻り値]
GDFS_ERR_OK
正常終了
その他
エラー
[機能]
ファイルの読み込み (完了復帰)
[使用例]
GDFS gf;
Uint32 buf[32*2048/4];

gf = gdFsOpen("TEST.BIN", NULL);
gdFsRead(gf, 32, buf);
gdFsClose(gf);


gdFsClose

[関数]
void gdFsClose(GDFS gdfs);
[入力]
gdfs
ファイルハンドル
[出力]
なし
[戻り値]
なし
[機能]
ファイルのクローズ。
[使用例]
GDFS gf;

gf = gdFsOpen("TEST.BIN", NULL);
gdFsClose(gf);


メモリマネジメント関数

目次

0.概要

OSの介在しないSHINOBIライブラリ下において、メモリの管理を行います。
初期化関数以外の仕様は、関数自体の名前が異なる以外は、C標準関数の「malloc」と同一です。

1.データ型

2.関数仕様

2.1関数一覧

関数 機能
syMallocInitメモリ管理関数の利用するメモリエリアの確保と宣言
syMalloc メモリの確保
syFree メモリの開放

2.1関数API


syMallocInit

[関数]
Void syMallocInit(Void *heap, Uint32 size);
[入力]
heap
管理を任せる領域の先頭アドレス
size
管理を任せるサイズ
[出力]
なし
[戻り値]
なし
[機能]
syMalloc ライブラリに管理を任せる領域を指定し、ライブラリを初期化します。
本関数は、sbInit関数内で実行されます。
今回のSDKでは、sbInit関数のソースプログラムは公開されませんが、 今後のSDKでは、sbInitソース部分を公開し、ヒープの先頭領域及びサイズが変更できるようになります。
sbInit関数でのデフォルト値は以下の通りです。

ヒープ領域の先頭アドレス:Bセクションの終わり
ヒープのサイズ :メモリの最後まで

[注意点]
本関数は、Bセクション以降をメモリアロケート空間と見なし、メモリの内容を初期化します。
もし、Bセクション以降にユーザセクションが存在していた場合、そこを初期化してしまいます。
ユーザセクションを割り当てる際は、必ずBセクションよりも手前に置く必要があります。

syMalloc

[関数]
Void *syMalloc(Uint32 size);
[入力]
size
要求するサイズ(byte)
[出力]
なし
[戻り値]
確保した領域へのポインタ
NULL の場合は、確保失敗

[機能]
Cの標準関数のmalloc(size) と同じです。
本関数は必ず32バイトアラインメントでメモリを確保します。
データサイズを32バイトバウンダリで定義する事で、メモリ効率のよいメモリアロケーションが可能です。

syFree

[関数]
Void syFree(void *ap);
[入力]
開放したい領域を示すポインタ
[出力]
なし
[戻り値]
なし
[機能]
free(*ap)と同じ

ペリフェラルデータ取得関数

目次

0. 概要

0.1 コントローラデータの取得

デバイスデータの取得
デバイスデータを取得するには、関数pdGetPeripheral()を使用します。

こうして取得した構造体のメンバを参照するだけで、容易にコントローラの入力を得ることができます。

1. データ仕様

1.1 構造体仕様

PDS_PERIPHERAL構造体
定義
typedef struct {
	Uint32 id;
	Uint32 support;
	Uint32 on;
	Uint32 off;
	Uint32 press;
	Uint32 release;
	Uint16 r;
	Uint16 l;
	Sint16 x1;
	Sint16 y1;
	Sint16 x2;
	Sint16 y2;
	Sint8* name;
	void* extend;
	Uint32 old;
} PDS_PERIPHERAL;

説明
コントロールパッドの状態を格納する構造体です。

メンバ
id デバイスID
support ボタン・レバーのサポート状態
on デジタルボタン状態
off デジタルボタン状態(反転)
press デジタルボタンダウンエッジ状態
release デジタルボタンアップエッジ状態
r アナログ軸Rの値(0〜255)
l アナログ軸Lの値(0〜255)
x1 アナログ軸X1の値(-128〜127)
y1 アナログ軸Y1の値(-128〜127)
x2 アナログ軸X2の値(-128〜127)
y2 アナログ軸Y2の値(-128〜127)
name デバイス名称
extend 拡張データアドレス(未使用)
old 予約
参照
pdGetPeripheral()

1.2 デバイスIDとデバイス名称

取得した構造体には、デバイスの種別を表すIDと、その名称が格納されています。
Maple Bus仕様では取得できるデバイスIDは複雑なフォーマットになっているため、 アプリケーションが取り扱うには不向きです。

本ライブラリではそれを簡略化し、以下のように定義します。
デバイス デバイスID (id) デバイス名称文字列 (name)
標準コントロールパッドPDD_DEV_CONTROLLER デバイス自体が持つ製品名

1.3 デバイスのサポートするボタン

コントローラ系デバイスには、さまざまなデバイスが存在します。
十字キーを2つ持つもの、アナログが2チャンネルのものなど、デバイスごとに有しているボタン・レバーが異なります。
それを調べるにはメンバ「support」を参照します。

以下の表にしたがってビットアサインが決まっており、ボタン・レバーを持つ場合は1、持たない場合は0が格納されています。
コントローラ系デバイスは、十字キーA、スタートボタン、Aボタン、Bボタンを持つことが必須となっているため、 これらのボタンのみを使用してアプリケーションを組むことにより、互換性を維持することができます。

ボタン・レバービット位置指定用定数
十字キーA上 PDD_DEV_SUPPORT_KU
十字キーA下 PDD_DEV_SUPPORT_KD
十字キーA左 PDD_DEV_SUPPORT_KL
十字キーA右 PDD_DEV_SUPPORT_KR
十字キーB上 PDD_DEV_SUPPORT_KUB
十字キーB下 PDD_DEV_SUPPORT_KDB
十字キーB左 PDD_DEV_SUPPORT_KLB
十字キーB右 PDD_DEV_SUPPORT_KRB
スタートボタンPDD_DEV_SUPPORT_ST
Aボタン PDD_DEV_SUPPORT_TA
Bボタン PDD_DEV_SUPPORT_TB
Cボタン PDD_DEV_SUPPORT_TC
Xボタン PDD_DEV_SUPPORT_TX
Yボタン PDD_DEV_SUPPORT_TY
Zボタン PDD_DEV_SUPPORT_TZ
Dボタン PDD_DEV_SUPPORT_TD
アナログ軸R PDD_DEV_SUPPORT_AR
アナログ軸L PDD_DEV_SUPPORT_AL
アナログ軸X1 PDD_DEV_SUPPORT_AX1
アナログ軸Y1 PDD_DEV_SUPPORT_AY1
アナログ軸X2 PDD_DEV_SUPPORT_AX2
アナログ軸Y2 PDD_DEV_SUPPORT_AY2
アプリケーションは、デバイスIDとデバイスの仕様書を参照するか、 あるいはこのボタン・レバーサポート情報を参照し、適切にデータを取り扱ってください。

1.3.1 デジタルボタンデータ

デジタルボタン情報は、メンバon、off、press、releaseの4つのメンバに格納されており、用途によって使い分けます。
各メンバのビットごとにボタンが割り振られており、ボタンが押されていれば1、押されていなければ0となります(正論理)。
また、論理状態は初期化関数pdInitPeripheral()呼び出し時に負論理に設定することもできます。

デジタルボタンビット位置指定用定数
十字キーA上 PDD_DGT_KU
十字キーA下 PDD_DGT_KD
十字キーA左 PDD_DGT_KL
十字キーA右 PDD_DGT_KR
Aボタン PDD_DGT_TA
Bボタン PDD_DGT_TB
Cボタン PDD_DGT_TC
Dボタン PDD_DGT_TD
Xボタン PDD_DGT_TX
Yボタン PDD_DGT_TY
Zボタン PDD_DGT_TZ
Lボタン PDD_DGT_TL
Rボタン PDD_DGT_TR
スタートボタンPDD_DGT_ST
十字キーB上 PDD_DGT_KUB
十字キーB下 PDD_DGT_KDB
十字キーB左 PDD_DGT_KLB
十字キーB右 PDD_DGT_KRB

メンバ

Uint32 on
ボタンが押されているとき(ボタンダウン)、対応するビットが1になります。
押されていないボタンのビットは0になります。

Uint32 off
onメンバをビット反転したものです。
すなわち、ボタンが押されていないとき(ボタンアップ)、対応するビットが1になります。

Uint32 press
ボタンが押されていない状態から、押された状態に変化したとき(ボタンダウンエッジ)、対応するビットが1になります。
そうでないビットは0になります。

Uint32 release
ボタンが押されている状態から、押されていない状態に変化したとき(ボタンアップエッジ)、対応するビットが1になります。
そうでないビットは0になります。
※負論理に設定した場合、button、on、off、press、releaseのすべてのビットは反転して格納されます。

なお、デジタルLRボタン情報は、アナログLR情報からソフトウェアで擬似的に生成しています。
アナログLRボタンを持たないデバイスの場合、ビットは変化しませんので注意してください。 (デジタルLRボタンを物理的に持つデバイスはありません)

1.3.2 アナログ軸データ

アナログ軸情報は、メンバr,l,x1,y1,x2,y2の6つのメンバに格納されています。
未接続、およびそのボタン、レバーを持たないデバイスの場合は、センター位置と同じデータが格納されます。
メンバ 符号 レンジ センター位置レバー/ボタン
Uint16 r 符号なし0〜255 0 アナログRボタン
Uint16 l 符号なし0〜255 0 アナログLボタン
Sint16 x1符号付き-128〜0〜127 0 アナログレバーX1
Sint16 y1符号付き-128〜0〜127 0 アナログレバーY1
Sint16 x2符号付き-128〜0〜127 0 アナログレバーX2
Sint16 y2符号付き-128〜0〜127 0 アナログレバーY2

1.4 データ取得時のエラー

Maple Busプロトコルにおけるデバイスとの通信時に、何らかのエラーが発生する場合があります。
その場合、ボタン等の正常なデータが得られないため、構造体は下の表のような値に設定されます。

メンバ 設定値
id,name,extend前回の値
デジタルボタンすべてボタンが押されていない状態
アナログ軸 センター位置

エラーが発生したかどうかは、関数pdGetPeripheralError()で調べることができます。
エラーコード 内容
PDD_ERR_OK エラーなし
PDD_ERR_RETRY ボタンデータが正常に取得できませんでした
PDD_ERR_GENERIC未定義エラー
エラーが発生した場合は、ライブラリでは回復手段が存在しません。アプリケーションで適切な処理を行ってください。

2. 関数仕様

2.1関数一覧

関数 機能 pdGetPeripheral コントローラのボタン状態を取得する pdGetPeripheralError コントローラに関するエラーを取得する 《2.2 関数API》

pdGetPeripheral

[関数]
const PDS_PERIPHERAL* pdGetPeripheral(Uint32 port)
[入力]
port
ポート番号(PDD_PORT_A0/B0/C0/D0)
[出力]
なし
[戻り値]
PDS_PERIPHERAL構造体のアドレス
[機能]
ペリフェラルデータを取得します。
[参照]
PDS_PERIPHERAL構造体
[使用例]
const PDS_PERIPHERAL* per;

per = pdGetPeripheral(PDD_PORT_A0);

if (per->press & PDD_DGT_ST) {
/* スタートボタンが押された */
:
:
}


pdGetPeripheralError

[関数]
Sint32 pdGetPeripheralError(Uint32 port)
[入力]
port ...ポート番号(PDD_PORT_A0/B0/C0/D0)
[出力]
なし
[戻り値]
0
エラーなし
エラー値(PDD_ERR_XXXX)

[機能]
コントローラデータ取得に関するエラーコードを取得します。
[使用例]
Sint32 err;

err = pdGetPeripheralError(PDD_PORT_B0);