ReleaseNote 6.35 KB
==============================================================================
  F3DNCom シリーズマイクロコード簡易説明書      Release 1.23.I  Jun-09-97

                                           任天堂(株)開発 3 部  安本 吉孝
==============================================================================

  本マイクロコードは F3DLX/F3DLX.Rej 1.22 をベースに NewCom 社向けと
してカスタム化したマイクロコードです. 


● F3DNCom マイクロコードについて
 
  CLIP ON 時の頂点キャッシュサイズは F3DLX と同じ 32 頂点ですが, 
CLIP OFF 時においては頂点キャッシュを 84 個使用することができます.
ただし g*SPVertex 命令では 32 個以上の頂点数のロードをサポートしてい
ないので 33 個以上の頂点をロードするときは 2 回以上に分ける必要があ
ります.

  以上の実装による IMEM/DMEM の確保のために F3DLX と比べて以下のよ
うな制限があります.
    
  * g*SPVertex の処理速度が F3DLX と比べて僅かに遅い.
  * Light が 4 つまでしか使えない.
   
  また yield 時の動作を通常とは変更し, yield リクエストが CPU から発
行された時には, DP へ FullSync コマンドを送信し, DMEM をセーブせずに
終了(SUSPEND) するようになっています. またこの場合における FullSync 
の 2 重送信の防止のため, 直前に送信した DP コマンドが FullSync であ
るかどうかを判定しているため, g*DPFullSync 以降には DP コマンドを発
行する DL を与えると誤動作の原因となります. 通常 g*DPFullSync の後ろ
には, g*SPEndDisplayList があるだけなので問題はないと考えています.

  F3DEX-1.21 シリーズでサポートされた ucode の自己ロード機能もサポー
トされていますので, F3DNCom.Rej マイクロコードと DL による切り替えが可
能です.

  Yield 時における RDP のサスペンド処理を補助するために, Sync 系 DP コ
マンドおよび g*DPNoOp に改造が加えられています. これによって RDP をタ
イムラグがありながらも, 途中で停止させることができるようになっています.

  指定した DL 以降の RSP の処理を CPU の指示があるまで一時的に停止する
ことが可能となりました. これによっていままで CPU の DL の作成処理が終
了するまで RSP を起動させることが出来なかったのが, CPU が DL を作成次
第次々に RSP へ送ることが出来るようになりました.


● F3DNCom.Rej マイクロコードについて

  F3DLX.Rej と同じものですが, F3DNCom と同じように Yield 時に処理を
打ちきって終了するように変更が加えられています. 
  頂点キャッシュサイズは F3DLX.Rej と同じく 64 です. ucode の自己ロー
ド機能もサポートされています.


● 新しくサポートされたあるいは機能変更された GBI

  基本的に F3DNCom シリーズは F3DEX シリーズのカスタム版ですので,
F3DEX で追加になった GBI は使用可能です. 詳しくは, 対応する F3DEX マイ
クロコードに付属のドキュメントを参照してください. 以下では, F3DNCom 版で
のみ有効な GBI についての情報です. 

+ Signal のサポート

  CPU で生成した DL を RSP で逐次処理するために GBI と OS 側にそれぞれ
以下の関数を用意しました. これにより RSP と CPU の間のハンドシェークを
行ないます.

	GBI:	gSPWaitSignal(pkt, s32 dist_signal)
		gsSPWaitSignal(s32 dist_signal)
	OS:	osSetRSPSignal(s32 signal)

  g*SPWaitSignal は現在の signal 値を参照し, その値が dist_signal *以
上*の値になるまで RSP を待機させます. signal 値は osSetRSPSignal によっ
て CPU 側から変更することができます. これにより, DL のどの位置まで処理
するかを CPU から制御することができます. 

  また signal の初期値は, OSTask 構造体のメンバ yield_data_size の値を
使用します. 通常は 0 で問題ないでしょう. 


+ Yield 時の RDP サスペンドのサポート

  Yield 時において RDP を停止させるために, Sync 系の RDP コマンド 
(FUllSync, LoadSync, PipeSync, TileSync) と NoOp コマンドの実装を変更
しました. RDP はこの 5 種のコマンドの位置でのみ停止します. 

  これらのコマンドに停止可能位置を示すためのタグ(XTag)が埋め込まれてい
ます. RDP を停止させたいときに RDP の処理位置から順に XTag をサーチし
見つかった XTag を FullSync コマンドに置き換えることで, RDP を停止させ
ることになります.

  停止処理を円滑に行なうために, これらの命令をうまく配置することが必要
です. 実際には gsSPVertex() の前とかに gsDPNoOp() を置いたりするのが良
いでしょう. むろん Texture のロードコマンドがあればそこには Sync 系の
コマンドがあるでしょうから, わざわざ gsDPNoOp を追加する必要はありませ
ん.

  本パッケージ内の suspendrdp.c は, 実際に XTag を参照して RDP を停止
させるためのルーチンのサンプル版です.


● F3DEX.dram マイクロコード

  DL から RDP コマンドリストへの変換を行なうために, F3DEX.dram マイク
ロコードを作成し, 本パッケージに追加しました. あらかじめ DP コマンド
を生成しておきたい場合にご使用下さい. 


● 使用方法

  このマイクロコードを使用するためには, ヘッダファイル ultra64.h の
ロード前に F3DNCom_GBI を define しておく必要があります.

	(例)
	|
	|#define	F3DNCom_GBI
	|#include	<ultra64.h>
	|

  バージョン番号は, ベースとなる F3DLX マイクロコードのバージョン番号 + 
F3DNCom 版のバージョン番号の組となっています. 


● ヘッダファイルおよび OS について

  headers-2.0* ディレクトリには本マイクロコードで使用するヘッダファイ
ルが格納されています. ご自分の開発環境に対応したヘッダファイルを 
/usr/include/PR へ移動させてご使用下さい. F3DEX Release 1.22 パッケー
ジに付属しているヘッダファイルの上位互換となっていますので, F3DEX
Release 1.22 用のヘッダファイルとして使用可能です.

  本パッケージ内に付属する OS のパッチキットは F3DEX Release 1.21 以降
のバージョンおよび開発環境 2.0H 以降のものに付属しているパッチキットと
同じものです. F3DEX Release 1.21 以降のパッチを当てておられる場合ある
いは N64 開発環境 2.0H 以降を使用の場合はそのままで使用できます.


● 変更履歴

* Ver 1.22.H から Ver 1.23.I への変更点
	+ F3DNCom.Rej マイクロコードで Flat Shading を使用したときに正
	  しい色にならないバグの修正

* Ver 1.21.G から Ver 1.22.H への変更点
	+ スプライトマイクロコード S2DEX を gSPLoadUcode によって相互
	  にロードできるようにした.

* Ver 1.20.F から Ver 1.21.G への変更点
	+ F3DEX シリーズのバグ修正により OS のパッチが変更になったため
	  F3DNCom シリーズも F3DEX 1.21 の OS パッチに対応するように変
	  更を加えた. (F3DNCom は yield 機能が変更されているので F3DEX 
	  1.20 におけるバグは発生しない)

* Ver 0.96.E から Ver 1.20.F への変更点
	+ ベースとなる F3DLX の変更
	+ F3DNCom.Rej の追加
	+ F3DEX.dram の追加
	+ RDP の SUSPEND を行なうように XTag の GBI への埋め込み
	+ RSPSignal 処理の追加

* Ver 0.95.D から Ver 0.96.E への変更点
	+ ベースとなる F3DLX の変更およびバッファリングの最適化による
	  若干の高速化.

* Ver 0.95.C から Ver 0.95.D への変更点
	+ yield の動作を変更し, SUSPEND するようにした.

* Ver 0.94.B から Ver 0.95.C への変更点
	+ ライティングが正常に動作しないというバグを直した. 
	+ U64 開発環境 2.0f に対応したヘッダを付け加えた. 
	+ G_CLIPPING の初期値を ON にした.
								以上
==============================================================================