English
PROGRAMMER'S GUIDEシステムプログラムユーザーズマニュアル
■    | 進む
システムプログラムユーザーズマニュアル

ガイド


■解説

 ●割り込み処理ルーチンの登録・参照操作
 BOOT ROMから起動後、マスタSH2の割り込みベクタテーブルは、ワークRAM先頭にあり、VBR(ベクタベースレジスタ)はこのアドレスを指しています。
 スレーブSH2の割り込みベクタテーブルは、ワークRAM先頭+400Hであり、スレーブSH2のVBRはそのアドレスを指しています。

 各々のSH2内蔵モジュールの割り込みベクタ(プログラマブル)は初期設定で下表のように割り当てられています。また、ベクタテーブルには何もしないダミーのルーチンが設定されます。(ただし、不当命令とアドレスエラー例外は、無限ループです。)

 マスタとスレーブの通信用にはFRTインプットキャプチャ割り込みが割り当てられており、その初期優先度は15(最も高い優先度)です。

 下表で、FRTインプットキャプチャ割り込みを除く各割り込みの優先度は0に設定されており、割り込みは不許可です。
 内蔵モジュールの割り込み優先度の変更には、アプリケーションの必要に応じて割り込みコントロールレジスタの内容を変更しなければなりません。

マスタSH2ベクタ初期設定
スレーブSH2ベクタ初期設定
 40H〜SCU割り込みベクタ
5FH(ハードウェアで固定)
 41H HブランクIn **
43H VブランクIn
 60H SCI受信エラー
61H SCI受信バッファフル
62H SCI送信バッファ空
63H SCI送信終了
*64H FRTインプットキャプチャ
65H FRTコンペアマッチ
66H FRTオーバーフロー
67H 未使用
68H WDTインターバル
69H BSCコンペアマッチ
6AH 未使用
6BH 未使用
6CH DMACH1(SH2内蔵)
6DH DMACH0(SH2内蔵)
6EH DIVU(除算)
6FH 未使用
 60H SCI受信エラー
61H SCI受信バッファフル
62H SCI送信バッファ空
63H SCI送信終了
*64H FRTインプットキャプチャ
65H FRTコンペアマッチ
66H FRTオーバーフロー
67H 未使用
68H WDTインターバル
69H BSCコンペアマッチ
6AH 未使用
6BH 未使用
6CH DMACH1(SH2内蔵)
6DH DMACH0(SH2内蔵)
6EH DIVU(除算)
6FH 未使用
*スレーブマスタパッシング用*マスタスレーブパッシング用
**IRL2、IRL6レベル割り込み

 本操作ルーチンは、割り込みベクタへ割り込み処理ルーチンを登録したり、現在の処理ルーチンアドレスを参照したりするのに用いてください。
 また、マスタ側のSCU割り込みについては、C関数をサブルーチンコールする形式で割り込み処理を実現するSCU割り込みルーチンが用意されており、そこにC関数を登録したり、その登録アドレスを参照する操作もできます。

 SCU割り込みルーチンに登録された関数は割り込み発生のつど呼び出されるようになります。その呼び出しの前後で、SHCコンパイラのレジスタ保存規則に見合うレジスタ保存と復帰を行います。したがってC関数、またはその規則に従うルーチンであれば、登録し、処理できます。ただし、HブランクInなど、速い応答の必要な割り込み処理には不向きである場合があります。
 SCU割り込みベクタへ別の割り込み処理ルーチンを登録すると、SCU割り込み処理ルーチンはバイパスされ、無効になります。

 ●SCU割り込みマスクのセット・参照・変更操作
 SCU割り込みマスクレジスタへ設定されたマスク値は、このレジスタが読み出し不可能であるため、変更などを行う場合、実際に設定されている値に対して演算を行うことができません。
 そのために、この値を別にメモリに記憶しておき、実際のSCU割り込みマスクレジスタと一貫性を保って更新するサービスルーチンを設けています。
 使用に際しては、ライブラリやアプリケーションが常にこれらの関数を経由してSCU割り込みマスクのセット・変更を行う必要があります。
 さらに、SCU割り込みマスクレジスタのセット・変更後には、引き続いてSCU割り込みステータスレジスタ、また必要があればA-Bus割り込みアクノリッジレジスタのクリアを行います。

 ●簡易セマフォ操作
 BOOT ROMが用意しているメモリ(256バイト)を256個の簡易なセマフォとして利用できるサービスを提供します。
 セマフォの前半(番号0〜127)は自由に使用できます。後半(128〜255)はライブラリと関連のある操作用になっています。
 ライブラリがDMAなど特定の機能を使用する場合、セマフォのMSB(80H)を1にして、それが使用中であることを示します。また、使用後はMSBをクリアし、それがフリーであることを示します。
 通常、比較的長時間に及ぶ、資源の確保が必要な処理では、その間に入る割り込み処理などがその資源へ勝手にアクセスしないよう、セマフォを操作、参照する手順を決めておくべきです。
 セマフォのメモリに対して、MSBセット時にはSH2のTAS命令を用いています。この命令は、実行が不可分(バス権を解放しない)ため、確実にただ1つの処理だけが、セマフォを獲得できることになります。
 セマフォを獲得した処理が済んだら必ずそれを解放しなければなりません。
 リセット時には、セマフォのメモリはすべて解放(クリア)されます。

 ●システムクロック切替え
 システムクロック切替えは、SMPCへの単独コマンド発行ではできません。本システムプログラム使用が必須です。

  

システムクロック切替えでは、一部ハードウェアへのリセットを伴います。

 リセットされるデバイス 
 OFFまたは無保証デバイス 
 影響のないデバイス 
SCU
VDP1
VDP2
SCSI/SCC(開発機のみ)
スレーブSH(OFF)
DRAM(以前の内容破壊)
SCSP(OFF)
 
マスタSH *注
SDRAM
CD
SIMM(開発機のみ)

*注
マスタSHは、クロック切替え中にスタンバイ・モードになるため、SH内蔵モジュールのうちFRT、およびSCIは再設定が必要になります。なお、WDTはこの処理の中で使用されています。また、処理後、NMIがあった状態になり、例えばDMACのコントロールはNMIによる中断状態になっています。SHマニュアルを参照し、必要ならば処理再開のための処理を行ってください。

リセット後再初期化処理について
 SCU・・・・・・
バス、割り込みマスクなど再初期化。ただし、割り込みマスク値にはSYS_GETSCUIMの値を使用。

アプリケーションで必要となる後処理について
 VDP2・・・・・・
TVモードを比較的早く設定する必要があります。デバイス自体はリセット後320/640モードとなるため、特に、システムクロックを352/704モードに変更した場合、TVに対して、同期信号がずれており、画面が乱れることがあります。

 VDP1,2&SCSP・・・・・・
以前の設定はすべて無効です。再設定が必要です。

 SMPC・・・・・・
ホットリセットは必ずイネーブル(許可)になります。

なお、クロックチェンジの処理時間は、約110msです。これは、デバイスのリセット時間を含むためです。

 ●SCU割り込みルーチン優先度変更
 BOOT ROMでは、SCU割り込み処理サービス用の、割り込み優先度管理テーブルを持っており、また、その書き換えを可能にしています。

これは危険なサービスであり、テーブル内容に優先度関係の矛盾があればシステムがハング アップする可能性があります!!!

 これにより、割り込み処理(SYS_SETUINT利用のもの)をアプリケーションに最適化できます。
 そのためには、アプリケーションはそのテーブルと同一構造のデータを用意し、SYS_CHGUIPRをコールしてください。
 テーブルは32ロングワードで、1ロングワードは以下の内容を持ちます。

SH2 SR下位ワード値
SCU割り込みマスク下位ワード値

割り込み処理開始時、SRに設定される値
 
割り込み処理開始時、SCU割り込みマスクレジスタに、現在のマスク設定値と論理和(OR)されて書き込まれる値

 テーブル中のこのロングワードの位置は、SCUの30の割り込み要因に対応します。
 (V-Blank In が先頭、V-Blank Outが第2、...ただし、ベクタ4EH、4FHに当たる2ロングワードの空きを含めて)
 実際には、最大限の注意を払って、SR、SCU割り込みマスクと、割り込み要因とが矛盾が無いようテーブルを作成しなければなりません。
 例えばBOOT ROMは、次のようなテーブルを初期設定値としています。

Uint32 PRITab[32]={
0x00F0FFFF, /*VBI SR=15 全禁止(最高優先)
0x00E0FFFE, /*VBO SR=14 VBIのみ許可
0x00D0FFFC, /*HBI SR=13 VBI、VBOを許可
          ・
          ・
0x0070FE00 /*外部15 SR=7 SCU割り込みの固有優先度で7以下すべてマスク
/*Aバス割り込み固有優先度は要因別に7、4、1だが、共用で1bitマスクのため7とする
};
 
*/
*/
*/
 
 
*/
*/
 

 作成例として、SR値を常に0にし、SCUマスク値のみで優先度(優先関係)を記述する例を示します。この場合、SHは常に割り込み受け付け可能であり、SCUマスクのみが許可、禁止を制御することになります。

Uint32 PRITab[32]={
 0x0000FFF9, /*VBI処理中 、HBI、VBO許可
 0x0000FFFB, /*VBO処理中、HBIのみ許可
 0x0000FFFF, /*HBI処理中、すべて禁止(最高優先)
        ・
        ・
 0x00000000 /*外部15処理中、すべて許可(最低優先)
};
 
*/
*/
*/
 
 
*/
 

上記例と逆に、SCUマスク値を変更せず、SR値レベルで割り込みをマスクするのは禁止!!!(0または15のみ可能)

 上記例では、SH内蔵モジュールの割り込み許可、禁止についても、その内蔵モジュールごとの割り込み許可、禁止レジスタを操作しなければなりません。

SCUのある要因の割り込みが許可になっていて、その割り込みが発生したとき、その割り込 みの固有のレベル(SCUハードで決まっている値)よりも、SHのSRマスクが高く、SHで割り 込みが拒絶されてしまう状態が決して起こり得ないならば、OKです。(ただし、例外的に、SRマスク15の全禁止は可能)

 ●CDマルチプレーヤ起動実行
 アプリケーション終了時に、CDマルチプレーヤを起動し実行するサービスです。本サービスを呼び出すと、呼び出した状態にかかわらず、パワーオンシーケンスの起動と全く同じに、CDマルチプレーヤ画面が表示され、操作可能になります。
 呼び出し側には戻りません。

 ●パワーオンクリアメモリ操作
 BOOT ROMが管理するSDRAM上の8バイトのメモリを提供します。
 この8バイトはパワーオン起動時には0に初期化されますが、リセットボタン(NMI)では内容は保持されます。


■    | 進む
PROGRAMMER'S GUIDEDISCフォーマット規格仕様書
Copyright SEGA ENTERPRISES, LTD., 1997