====================================== NINTENDO64 TECHNICAL SUPPORT CENTER NINTENDO64 SAMPLE PROGRAM 2 Copyright (C) 1997, NINTENDO Co,Ltd. ====================================== 【0】目次 【1】はじめに 【2】make方法 【3】操作方法 【4】プログラム説明 【5】権利・再利用 【6】履歴 【1】はじめに 本プログラムは、F3DEX Ver1.21マイクロコードのサンプルプログラムです。 ベースはnnsample1と同じで、F3DEX Ver1.21から追加された機能である BranchDisplayListとマイクロコードのダイレクトロードを 使っています。 F3DEX Ver1.21ではBranchDisplayListをucodeが行うので LOD(Level Of Detail)処理が簡単におこなえます。マクロコードのダイレクト ロードにより、グラフィックタスクのスケジューリングがシンプルになり、 処理によって簡単にマイクロコードを切り替えることができます。 【2】make方法 Indyのエミュレータボードをご使用の場合でも、PARTNER-N64をご使用の 場合でも、そのままmakeしてください。 【3】操作方法 「十字キー」 オブジェクトの左右と奥行き方向の移動 「STARTボタン」 画面の初期化 【4】プログラム説明 (1)LOD処理について LODにより視点からモデルの位置により次の文字のモデルを描画しています。 視点から500まで "NEAR" 501から1000まで "MIDDLE" 1001から1600まで"FAR" 1601以上描画せず このDisplayListで示すと次のようになります。(lodmodel.c参照) gsSPBranchLessZ(near__dl, 0, 500, 10, 2000, G_BZ_PERSP), gsSPBranchLessZ(middle__dl, 0, 1000, 10, 2000, G_BZ_PERSP), gsSPBranchLessZ(far__dl, 0, 1600, 10, 2000, G_BZ_PERSP), gsSPEndDisplayList(), このように、ucode側で視点からモデルまでの距離を計算してLOD処理を 行ってくれます。 (2)マイクロコードのダイレクトロードについて graphic.cの84行目のように、ディスプレイリストの作成部分で gSPLoadUcodeL(glist_ptr++, gspL3DEX_fifo); などとすることにより、動的にマイクロコードの変更できるように なっています。このことにより、描画対象によって簡単にマイクロコードを 切り替えられ、スケジューリングも簡単になります。 ただし、マイクロコードのロードはオーバーヘッドとなるので 頻繁に切り替えることはしないほうが良いでしょう。 (3)fifoマイクロコードの使用上の注意について RDP OUTPUT SIZEについて fifoグラフィックマイクロコードを使用する場合は、タスク起動時に OSTask構造体の"*t.output_buff_size"にはfifoバッファの最大ポインタ+1 を入れる必要があります。例えば、このサンプルでは ---def.h--- #define GFX_RDP_OUTPUT_SIZE 1024 /* RDP FIFOサイズ */ ---rdp_output.c--- u64 rdp_output[GFX_RDP_OUTPUT_SIZE]; ---graphic.c--- gtask->list.t.output_buff = (u64 *)&rdp_output[0]; gtask->list.t.output_buff_size = (u64 *)&rdp_output[GFX_RDP_OUTPUT_SIZE]; というようにポインタを代入して使っています。dramマイクロコードや xbusの場合では、このポインタ変数の役割が異なるので注意して 下さい。 【5】権利・再利用 本サンプルプログラムの著作権は任天堂株式会社が所有します。 ソースコードの再利用および改変は自由にしてくださって結構ですが、 本サンプルプログラムのデバッグを十分におこなっていません。 その為、使用にあたっては、十分にデバッグを行って頂くよう お願いします。 【6】履歴 1.0 1997/01/30 nnsample2公開 1.1 1997/02/03 nnsched.cの不具合を修正 1.2 1997/12/09 ・ワーニングを抑制 ・RDP FIFO バッファサイズの誤り修正 以上