155 lines
6.0 KiB
C
155 lines
6.0 KiB
C
/*
|
|
* 名称: システム プログラム
|
|
*
|
|
* ファイル名: sega_sys.h
|
|
*
|
|
* 目的: BOOT ROM のサービスルーチンを定義します。
|
|
*
|
|
* (1) SCU 割り込みサービスルーチンの登録参照
|
|
* (2) SH2 割り込みベクタの登録参照
|
|
* (3) システムセマフォの操作 (BOOT ROM V0.90以降)
|
|
* (4) SCU 割り込みマスクの操作(BOOT ROM V0.90以降)
|
|
* (5) システムクロックの切替え(BOOT ROM V0.92以降)
|
|
* (6) SCU 割り込みルーチン優先度の変更(SCU2.1以降)
|
|
* (7) CD マルチプレーヤの起動実行(CD付きモデル用)
|
|
* (8) パワーオンクリアメモリの操作 (ROM V1.00以降)
|
|
* (9) MPEG チェック(完了復帰型) (ROM V1.00以降)
|
|
*
|
|
* sega_sys.libで関数を定義します。(Ver.2.01以降)
|
|
*
|
|
* 使用方法:
|
|
*
|
|
* void Vfunc(void)
|
|
* {
|
|
* // ... 実行文 ... //
|
|
* }
|
|
*
|
|
* extern void Hihdr(void);
|
|
*
|
|
* void test()
|
|
* {
|
|
* void (*tmp)();
|
|
* Sint32 rep;
|
|
* Uint32 msk, clk, lval1;
|
|
* Uint8 p0;
|
|
* const Uint32 PriTab[32] = {
|
|
* 0x00f0ffff, 0x00e0fffe, 0x00d0fffc, 0x00c0fff8,
|
|
* 0x00b0fff0, 0x00a0ffe0, 0x0090ffc0, 0x0080ff80,
|
|
* 0x0080ff80, 0x0070fe00, 0x0070fe00, 0x0070fe00,
|
|
* 0x0070fe00, 0x0070fe00, 0x0070fe00, 0x0070fe00,
|
|
* 0x0070fe00, 0x0070fe00, 0x0070fe00, 0x0070fe00,
|
|
* 0x0070fe00, 0x0070fe00, 0x0070fe00, 0x0070fe00,
|
|
* 0x0070fe00, 0x0070fe00, 0x0070fe00, 0x0070fe00,
|
|
* 0x0070fe00, 0x0070fe00, 0x0070fe00, 0x0070fe00,
|
|
* };
|
|
*
|
|
* SYS_SETUINT(0x40, Vfunc); // Vfunc() を VB-In 割込み用に登録 //
|
|
* tmp = SYS_GETUINT(0x41); // 現在の VB-Out ルーチン登録を参照 //
|
|
* SYS_SETUINT(0x41, 0); // VB-Out ルーチンの登録を消去 //
|
|
*
|
|
* SYS_SETSINT(0x42, Hihdr); // Hihdr() を HB-In ベクタに登録 //
|
|
* tmp = SYS_GETSINT(0x6e); // 現在の DIVU ベクタ登録を参照 //
|
|
* SYS_SETSINT(0x6e, 0); // DIVU ベクタを再初期化 //
|
|
*
|
|
* rep = SYS_TASSEM(0x5); // セマフォ 5 をテスト・アンド・セット //
|
|
* SYS_CLRSEM(0x5); // セマフォ 5 をクリア //
|
|
*
|
|
* SYS_SETSCUIM(0xfffffffe); // VB-In 割込みのみを許可に設定 //
|
|
* SYS_CHGSCUIM(0xfffffffc, 0); // VB-In, VB-Out を許可に変更 //
|
|
* SYS_CHGSCUIM(0xffffffff, 2); // VB-Out を不許可に変更 //
|
|
* msk = SYS_GETSCUIM; // 現在の SCU 割込みマスク値を参照 //
|
|
*
|
|
* SYS_CHGSYSCK(1); // システムクロックを28Mに切替え //
|
|
* clk = SYS_GETSYSCK; // 現在の システムクロック値を参照 //
|
|
* // 0: 26 MHz 1: 28 MHz //
|
|
* // 320/640 pix/H 352/704 pix/H //
|
|
*
|
|
* SYS_CHGUIPR(PriTab); // SCU割り込みルーチン優先度変更 //
|
|
*
|
|
* SYS_EXECDMP(); // CDマルチプレーヤ起動実行 //
|
|
*
|
|
* p0 = SYS_PCLRMEM; // パワーオンクリアメモリ先頭バイト //
|
|
* lval1 = *((Uint32*)&SYS_PCLRMEM+1); // と後半ロングワードを参照 //
|
|
*
|
|
* rep = SYS_CHKMPEG(0); // 引数は必ず 0. MANSYS.DOC の使用例 //
|
|
* // に従ってください //
|
|
* }
|
|
*
|
|
* // ... 別のファイル ... //
|
|
* #pragma interrupt(Hihdr)
|
|
* void Hihdr(void)
|
|
* {
|
|
* // ... 実行文 ... //
|
|
* }
|
|
*
|
|
*
|
|
* 日付: 1994/05/06 for BOOT 0.90,0.901,0.91 by T. S.
|
|
* 1994/07/16 for BOOT 0.92x,0.95 by T. S.
|
|
* 1994/07/29 for BOOT 0.96x,1.00 by T. S.
|
|
* 1994/08/31 how to exec CD multi-player
|
|
* 1994/09/21 for Ver.1.00 BOOT ROM
|
|
* 1995/03/31 MPEG check service
|
|
* 1995/09/26 sega_sys.lib (Ver.2.01) by M. M.
|
|
*
|
|
* バージョン: Ver.2.01
|
|
*
|
|
*/
|
|
|
|
#ifndef SEGA_SYS_H
|
|
#define SEGA_SYS_H
|
|
|
|
/***********************************************************************
|
|
* インクルードファイル
|
|
***********************************************************************/
|
|
#include "sega_xpt.h"
|
|
|
|
/***********************************************************************
|
|
* 処理マクロ
|
|
***********************************************************************/
|
|
#define SYS_SETUINT(_Num_, _Hdr_) \
|
|
((**(volatile void(**)(Uint32, void*))0x6000300)((_Num_), (_Hdr_)))
|
|
#define SYS_GETUINT(_Num_) \
|
|
((void*)(**(void(*(**)(Uint32))(Uint32))0x6000304)(_Num_))
|
|
|
|
#define SYS_SETSINT(_Num_, _Hdr_) \
|
|
((**(volatile void(**)(Uint32, void*))0x6000310)((_Num_), (_Hdr_)))
|
|
#define SYS_GETSINT(_Num_) \
|
|
((void*)(**(void(*(**)(Uint32))(Uint32))0x6000314)(_Num_))
|
|
|
|
#define SYS_TASSEM(_Num_) \
|
|
((**(volatile Uint32(**)(Uint32))0x6000330)(_Num_))
|
|
#define SYS_CLRSEM(_Num_) \
|
|
((**(volatile void(**)(Uint32))0x6000334)(_Num_))
|
|
|
|
#define SYS_SETSCUIM(_MaskPat_) \
|
|
((**(volatile void(**)(Uint32))0x6000340)(_MaskPat_))
|
|
#define SYS_CHGSCUIM(_AndMask_, _OrMask_) \
|
|
((**(volatile void(**)(Uint32, Uint32))0x6000344)((_AndMask_), (_OrMask_)))
|
|
#define SYS_GETSCUIM \
|
|
(*(volatile Uint32*)0x6000348)
|
|
|
|
#define SYS_CHGSYSCK(_CkMode_) \
|
|
((**(volatile void(**)(Uint32))0x6000320)(_CkMode_))
|
|
#define SYS_GETSYSCK \
|
|
(*(volatile Uint32*)0x6000324)
|
|
|
|
#define SYS_CHGUIPR(_IprTab_) \
|
|
((**(volatile void(**)(Uint32*))0x6000280)(_IprTab_))
|
|
|
|
#define SYS_EXECDMP \
|
|
(**(volatile void(**)(void))0x600026C)
|
|
|
|
#define SYS_PCLRMEM \
|
|
(*(volatile Uint8*)0x6000210)
|
|
|
|
#define SYS_CHKMPEG(_dummy_) \
|
|
((**(volatile Sint32(**)(Sint32))0x6000274)(_dummy_))
|
|
|
|
/***********************************************************************
|
|
* 関数の宣言
|
|
***********************************************************************/
|
|
void SYS_CheckTrack(Sint32 tno);
|
|
void SYS_Exit(Sint32 code);
|
|
|
|
#endif
|