##

    --------------------------------------------------------

    Dreamcast SDK Version 1.00 β2    1998/10/4

                   Copyright 1998 SEGA Enterprises, LTD.

    --------------------------------------------------------

## ★今回のリリースのトピック

- Graphic Toolの提供(\GRAPHICTOOLS\以下をご覧ください)
- ビジュアルメモリSDKの提供(内容の更新はありません)
- キャッシュ関数の追加
- リアルタイムクロック関数の追加
- バックアップユーティリティ関数の追加
- BootROMのアップデートとBOOT ROM GUIマニュアルの提供
- 自己起動ディスクの作り方
- ミドルウェアライブラリが、NINJAシステムとの共存が可能に
- GDライティングツール CD CRAFT の提供

## ★目次と注意事項

- 新規追加関数一覧
- njPrint関数群の仕様変更
- syMalloc及びmallocのアルゴリズム変更と統合化
- イニシアルプログラムの仕様変更について【重要】
- BootROMの更新および、自己起動の方法について
- GD-DAについて

## ◎このDreamcast SDKについて

### ★新規追加関数一覧

今回のSDKで新規追加された関数は以下の通りです。

### ◆Ninja

njCnkSetSimpleMultiLight | njCnkSimpleMultiDraw用のライトを設定します。
njCnkSetSimpleMultiLightSwitch | njCnkSimpleMultiDraw用の光源の点灯・消灯を設定します。
njCnkSetSimpleMultiAmbient | njCnkSimpleMultiDraw用のアンビエントを設定します。
njCnkSetSimpleMultiLightColor | njCnkSimpleMultiDraw用の光源色を設定します。
njCnkSetSimpleMultiLightVector | njCnkSimpleMultiDraw用の平行光源の方向を設定します。
<
njCnkSetSimpleMultiLightPoint | njCnkSimpleMultiDraw用の点光源の位置を設定します。
njCnkSetSimpleMultiLightRange | njCnkSimpleMultiDraw用の点光源の有効範囲を設定します。
njCnkSetSimpleMultiLightMatrices | njCnkSimpleMultiDraw用の設定された光源の方向・位置を反映させます。
njCnkSimpleMultiDrawModel | チャンクモデルを描画します。
njCnkSimpleMultiDrawObject | チャンクオブジェクトを描画します。

### ◆サウンド

sdMemBlkSetTransferMode | メモリブロックハンドルの転送モードの設定

### ◆ファイルシステム

gdFsGetSysHn | システムハンドルの取得
gdFsReqDrvStat | ドライブ状態の更新
gdFsDaGetStat | DAの再生状態の取得

### ◆キャッシュ

syCacheInit | 関数の初期化
syCacheICI | すべてのインストラクションキャッシュの無効化
syCacheOCl | オペランドキャッシュのすべてのエントリを無効化
syCacheOCBI | オペランドキャッシュブロックの無効化
syCacheOCBP | オペランドキャッシュブロックのパージ
syCacheOCWB | オペランドキャッシュブロックの書き戻し
syCachePREF | オペランドキャッシュのプリフェッチ
syCacheMOVCAL | MOVCA.L命令の実行

### ◆リアルタイムクロック

syRtcInit | RTC関数の初期化
syRtcFinish | RTC関数の終了
syRtcExecServer | サーバ関数
syRtcGetDate | 現日付時刻の取得
syRtcSetDate | 日付時刻の設定
syRtcSetServerMode | サーバ関数の動作の設定
syRtcGetStat | サーバ関数の状態の取得
syRtcCompareDate | 日付時刻の比較
syRtcDateToCount | 日付時刻からカウント数への変換
syRtcCountToDate | カウント数から日付時刻への変換

### ◆バックアップ

buMountDisk | ドライブのマウント
buUnmount | ドライブのアンマウント
buMakeBackupFileImage | バックアップファイル形式メモリイメージを作成する
buCalcBackupFileSize | バックアップファイルイメージのブロックサイズを計算する
buAnalyzeBackupFileImage | メモリ上のファイルイメージを解析する

### ◆BootROMフォント

syBtFntGetAddr | Shift JISコードから対象フォントデータへのオフセット値を取得
syBtFntGetInfo | Shift JISコードから対象フォントデータのサイズ情報を取得
syBtFntSjis2Jis | Shift JISコードからJISコードへ変換

### ◆ペリフェラル

pdGetPeripheralInfo | ペリフェラル情報の取得
pdTmrAlarm | アラームを鳴らす

### ◆ユーザコンフィギュレーション管理

syCfgInit | コンフィギュレーション関数の初期化
syCfgExit | コンフィギュレーション関数の終了
syCfgSetSoundMode | 音声設定の更新
syCfgGetSoundMode | 音声設定の取得

### ◆Boot ROMサービス関数

syBtExit | BOOT ROMのGUI画面への復帰
syBtCheckDisk | ディスク交換の調査
syBtGetBootSystemID | 起動ディスクの情報取得
syBtGetCurrentSystemID | 現在のディスクの情報取得

## ★Ninjaデバッグ文字列表示関数の仕様について

このSDKに含まれているNinjaライブラリの文字列表示関数を使用する場合の注意事項についてご説明いたします。

このSDKのNinjaライブラリでは、デバッグ文字列表示関数(njPrint、njPrintB、njPrintC、njPrintD、njPrintF、njPrintH、njPrintColor、njPrintSize等)を使用する前に、初期化関数njInitPrintを使用するようになりました。
njInitPrint関数は必ず、njInitVertexBuffer関数の後に行わなければなりません。

これは、njPrint系がデバッグ文字フォント用に占有するテクスチャRAMを開放することが出来るような仕様へと変更したためです。
この事により、njPrintで使用していたテクスチャ領域は最終的にはアプリケーション側に開放され、その分アプリケーションはテクスチャを使用できることとなり、テクスチャRAMを有効に活用することができます。
なお、一旦niInitPrintで確保した文字フォント用テクスチャ領域を開放するには、njExitPrintを使用します。

## ★malloc、syMallocのアルゴリズム変更について

これまで、mallocおよびsyMalloc関数のメモリ管理アルゴリズムにおいて、内部フリーリスト管理による空きメモリ管理を行っていましたが、今回のSDKよりsyMalloc関数は、

> #define syMalloc(a) malloc(a)

とし、malloc関数自体がヒープ管理するアルゴリズムへと変更させて頂きます。
この変更によって、mallocとsyMallocを混同して使用すると、メモリの分断が起こる症状や、syMallocStatを見るとsyFreeをしても連続メモリ領域が回復していないように見える症状は解消されます。
syMalloc関数の説明時に、最初にすべてのヒープを一旦syMallocしてすぐにsyFreeすることで、フリーエリアを確保する対応策をご説明しておりましたが、この必要は無くなります。
この対応で、mallocがヒープを直接管理するため、sbrkの内部プログラムはなくなります。
また、確実にmalloc関数をセガ製のものとするため、今回のSDKで提供しております、
「\katana\bin\set_kt.bat」と「\katana\shinobi\lib\makepre」、「\katana\shinobi\lib\makepost」の差し替えをお願いします。
これらのファイルの変更は、ライブラリのリンクの順番を変更するもので、必ず日立標準Cライブラリよりも前にSHINOIBI.LIBをリンクしなければいけません。
自分でMakefileを作成されている方は十分にご注意ください。

## ★IP(イニシアルプログラム)について

これまで、説明してきたイニシアルプログラムの仕様が変更になります。
これは、ハードウェアで管理しているシステム情報が異なっていることが発覚したためで、これまでのフォーマットにしたがったイニシアルプログラムでは、実機上で動作しなくなります。
症状としては

> SYSTEM DISCでセキュリティ解除後、GD-ROMを入れ替えると、
> 「ディスクをチェックしています」
> というメッセージが出たまま戻ってこなくなる

というものです。
変更箇所は、SYSTEMID.SRCに相当する部分で、
先頭から10hにメーカー識別子を書くことになっていましたが、これが、これまではリザーブとして使われてきた70hの位置に移動し、代わりに10hの場所にはハードウェアベンダー識別子として"SEGA ENTERPRISES"という文字列固定になります。
例えば、次のようなSYSTEMIDは

>     .sdata	"SEGA SEGAKATANA "	;00:H/W identifier(Do NOT change!)
>     .sdata	"SEGA LC-T-12    "	;10:Maker identifier
>     .sdata	"SEGA GD-ROM1/1  "	;20:Device information
>     .sdata	"JUE     ","07990   "	;30:Area symbols / Peripherals
>     .sdata  "T1201M    ","V0.800"	;40:Product number / Version
>     .sdata	"19980916","        "	;50:Release date / Reserved(Space)
>     .sdata	"1ST_READ.BIN","    "	;60:1st read file name / Reserved(Space)
>     .sdata	"                "	;70:Reserved(Space)
>     .sdata	"Game Title      "	;80:Game Title

この様になります。

>     .sdata	"SEGA SEGAKATANA "	;00:H/W identifier(Do NOT change!)
>     .sdata	"SEGA ENTERPRISES"	;10:H/W Vendor Identifier(Do NOT change!)
>     .sdata	"SEGA GD-ROM1/1  "	;20:Device information
>     .sdata	"JUE     ","07990   "	;30:Area symbols / Peripherals
>     .sdata  "T0001M    ","V0.800"	;40:Product number / Version
>     .sdata	"19980916","        "	;50:Release date / Reserved(Space)
>     .sdata	"1ST_READ.BIN","    "	;60:1st read file name / Reserved(Space)
>     .sdata	"SEGA LC-T-12    "	;70:Maker identifier
>     .sdata	"Game Title      "	;80:Game Title

また、BOOT ROMのバグから、38hからのペリフェラルコードは本来の7桁ではなく、後ろ2桁をスペース(20h)で生め5桁のみを記述します。
そうしないと、同様にGDは起動しません。
例を挙げると、

> "0799010 "
> は
> "07990 "

このバグが修正されるのはBOOT ROM Version 0.970以降、プリプロの場合PP2以降となります。
なお、このペリフェラルコードを5桁にしたイニシアルプログラムは、VGA可能で、DragonOSを使用していないアプリケーションと解釈され、バグ修正されたBOOT ROMでも利用は可能ですが、最終的な納品は必ず7桁のペリフェラルコードを使用してください。
詳細及び、IPの作成に関しては、このドキュメントをご覧ください。

## ★BootROMの更新および、自己起動の方法について

### BOOT ROMの更新に関する注意

BOOT ROMの更新の際に気をつけなくてはいけないことについて説明します。
OSモードでの更新は出来ません。
万が一、OSモードでBOOT ROMの更新をした場合、次のような不具合が想定されます。

- Codescapeが起動しない
- オープニングアニメーションからGUIに進まない
- オープニングアニメーションはするが、自己起動しない
- DA CheckでGD-Mをテストすると、赤信号になる
  等

特に、DA CheckでGD-Mをテストすると、赤信号になるためハードの故障と思われがちですが、BOOT ROMを再インストールすることで、正常動作をするようになります。
更新に失敗し、運悪くCodescapeが動かなくなった場合は、この項の通りにしてBOOT ROMの再インストールを行って下さい。

BootROMのインストールおよび更新方法をここに簡単に説明いたします。
Dev.Box前面パネルのスライドスイッチとディップスイッチの機能が変更になっていますので、新しい手順で、BOOT ROMの更新を行う必要があります。

### ◆インストール方法

BOOT ROM Ver. 0.67以降がインストールされていることが前提です。
予めDA CheckでDAの動作モードをCPUモードにしておきます。

- Dev.Boxのスライドスイッチを右に
- Dev.Boxのディップスイッチ4番を下に
- ハードリセット
- Dev.Boxの電源を投入し、すべてのブレークポイントを解除
- BootROMイメージを0c010000hにダウンロード
- AC000000hにインストラクションブレークを張って、BootROMイメージを実行
- 先に設定したブレークポイントで止まったら、スライドスイッチを左にして再度リセット

となります。
詳細につきましては、必ず「KATANA\SETUPDC.PDF」をご覧ください。
なお、今後BootROMの更新方法については変更される可能性があります。
BootROMイメージは

> \KATANA\BOOTROM\0972\BTRF0972.bin

にあります。

また、BootROMを用いた自己起動の方法については、BootROM更新後、以下のような手順で行います。

- GD Workshopでプロジェクトを開き、プロジェクトウィンドウの右から、DISCタブを選択
- System Area File (Single)と、System Area File (High)に、

  > \KATANA\SHINOBI\SAMPLE\IP\IP.BIN

  を選択する。(両方とも)
- 自己起動したいプログラムをMAKEUSERファイルのPROJECT_TYPE変数を

  > PROJECT_TYPE = bin

  にして、再コンパイル。
- できあがったバイナリファイル(.bin)を「1ST_READ.BIN」という名前に変更し、ディスクイメージの高密トラックのデータトラック(第3トラック)においておく。
- 一旦GD Workshopを再起動する。
- リセットボタンを押す。
- Codescapeを起動し、もし、[HARD-RESET]の状態ならば、F9キーまたは、Debug/Execution/RunでCPUを[RUNING...]の状態にしておく。
- この時点でCDトレイがクローズされていれば、ディスク上から1ST_READ.BINを読み込み、起動プロセスが開始されます。もし、CDトレイが開いていたら、CDトレイを閉じてください。その時点で起動プロセスが開始されます。

以後は、起動したいプログラム(ファーストリードファイルといいます)を1ST_READ.BINという名前で、ディスクイメージにおいておき、Codescape上または、ターゲット上からHard Resetをかけ、CodescapeでCPUを[RUNNING...]状態にして、トレイを閉めれば実行できます。

### Codescapeが動かない時のBOOT ROMインストール方法

1. DA CheckerでCPUモードに切り替えます。
2. Dev.Boxの前面パネルのディップスイッチを上にします。
3. Dev.Boxをリセットします。
4. Codescapeを立ちあげます。
5. Dev.Boxの前面パネルのスライドスイッチを右にします。
6. Dev.Boxの前面パネルのディップスイッチを下にします。
7. CodescapeのFile/Load BinaryでBOOT ROMのイメージを0x0c010000にダウンロードします。
8. CodescapeのDebug/Breakpoint/Configure Breakpoint(s)を選択します。
9. Add Codeボタンを押し、0xac000000にブレークポイントを張ります。
10. CodescapeのWindow/New Windowを選択し、新しいウィンドウをRegister Windowにします。
11. PCを0c010000に設定します。
12. Debug/Execution/Run Allでプログラムを実行します。
13. 画面が白転し、ブレークポイントで止まったことを確認したら、Dev.Boxの前面パネルのスライドスイッチを左にします。
14. Dev.Boxをリセットします。

以上で、BOOT ROMの更新が出来ます。
この更新でもCodescapeが動かない場合、Codescapeのファームウェアを書き換えてみてください。
また、Dev.Box及びPCの電源再投入でも症状が変ることがあります。

## ★DA再生時の音量設定について

GDDAの音量を設定する場合の注意事項についてご説明申し上げます。
Dreamcastハードウェアの初期ロットには、GDDAの音量について以下のような不具合が見つかっております。

> GDDAを使用していない時に、GD-DAの音量を上げておくと、オーディオ出力からノイズが入る事がある。

従って、GD-DAを使用していない際には、GD-DAの音量を0にしておく必要があります。
この症状を回避するには、アプリケーション起動時に、ダミーのGDDAを音量0で再生してください。
一旦、このような操作をすれば、あとで同様の症状が起こることはありません。

オーバービューに戻る