temporary

From Archaic Pixels
Revision as of 13:43, 13 February 2017 by Gravis (Talk | contribs) (Created page with "[code] ◎ システムの使用するメモリのマッピングについて システムはスプライト、スクロールのコントロール用に WORK-HI...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


◎ システムの使用するメモリのマッピングについて

システムはスプライト、スクロールのコントロール用に WORK-HI領域の
0x40000バイトを使用しています。また、テクスチャに光源の影響を与え
る場合にグーローシェーディングを用いるため、このデータとしてVDP1の
VRAMの内264バイトを使用しています。それらの内分けと、デフォルト
の設定を以下に示します。

MAX_POLYGONS:	1786	使用できるポリゴン数
MAX_VERTICES:	2500	使用できる頂点数
MAX_TRANSFER:	    20	ブランキング中の転送リクエスト数
MAX_NEST:		    20	マトリクスのネスト数

slPutPolygon() は指定されたモデルで使用するポリゴン数、及び頂点数を加えた時
最大数を越える場合そのモデルは処理しません。

また、slPutSprite() , slDispSprite() , slSetSprite() は実行されるたびにポリゴン数
をひとつずつ加算し、最大数を越える場合にそのデータの処理を中止します。
(ただし、指定されたZ位置が表示範囲外の場合には加算されません)


ワークRAM:
    060C0000:	(SortList)
        スプライトコントロールデータのDMA転送用テーブルバッファ
        (MAX_POLYGONS+6)*3*4バイト = 0x5400
    060C5400:	(CLOfstBuf)
        光源の影響による発色データテーブル
        32*32 = 0x400
    060C5800:	(Zbuffer)
        ポリゴンソート用の1次バッファ(ウィンドウ0用)
        128*4 = 0x200
    060C5A00:	(Zbuffer2)
        ポリゴンソート用の1次バッファ2(ウィンドウ1用)
        128*4 = 0x200
    060C5C00:	(Zbuf_nest)
        ポリゴンソート用の2次バッファ
        256*4 = 0x400
    060C6000:	(Spritebuf)
        スプライトコントロールデータバッファ
        (MAX_POLYGONS+5)*36 = 0xFBDC
    060D5BDC:	(Spritebuf2)
        スプライトコントロールデータバッファ2
        (MAX_POLYGONS+5)*36 = 0xFBDC
    060E57B8:	(Pbuffer)
        ポリゴン演算用頂点位置バッファ
        MAX_VERTICES*16 = 0x9C40
    060EF3F8:	(CommandBuf)
        マスターからスレーブへのコマンド受渡しバッファ
        MAX_POLYGONS*32-0x1B38 = 0xC408
    060FB800:	(TransList)
        ブランキング中の転送リクエスト用のDMAコントロールテーブル
        MAX_TRANSFER*3*4バイト = 0xF0
    060FB8F0:
        スタック領域(0x4310)

    060FFC00:
        システム変数領域(GBRレジスタは常にここを指している)
        0x400バイト
システム変数は以下に示すもので、Cプログラムからも同じ名称で読み出すことができる

    システム変数
	000:	(EventTop)	(EVENT *)	; 先頭に登録されているイベント
	004:	(EventLast)	(EVENT *)	; 末尾に登録されているイベント
	008:	(EventNow)	(EVENT *)	; 実行中のイベント
	00C:	(EventCount)	(Uint16)	; イベントの残数
	00E:	(WorkCount)	(Uint16)	; ワークの残数
	010:	(MainMode)	(Uint8)		; メインシーケンスモード
	011:	(SubMode)	(Uint8)		; サブシーケンスモード
	012:	(SynchConst)	(Sint8)		; ビデオ同期カウント
	013:	(SynchCount)	(Sint8)		; ビデオ同期カウント
	014:	(UserFunction)	(void (*)())	; ブランキング中に実行するユーザー関数
	018:	(TransCount)	(Uint16)	; ブランキング中の転送エントリー数
	01A:	(TransRequest)	(Uint8)		; ブランキング中の転送のリクエスト
	01B: (PauseFlag)	(Uint8)		; スプライト、スクロールのポーズ用フラグ

 	01C:	(mtptr)		(MATRIX *)	; カレントマトリクスポインタ
	020:	(MatrixCount)	(Uint8)		; マトリクスのネストカウント
	021:	(PrintColor)	(Uint8)		; テキスト表示用カラーパレット
	022:	(IntCount)	(Uint16)	; 割り込みカウント
	024:	(MsPbufPtr)	(Uint32 *)	; 頂点座標演算バッファポインタ(Master)
	028:	(SlPbufPtr)	(Uint32 *)	; 頂点座標演算バッファポインタ(Slave)
	02C:	(SpritePtr)	(Uint16 *)	; スプライトデータ転送ポインタ
	030:	(MsSdataPtr)	(Uint16 *)	; スプライトデータセットポインタ(Master)
	034:	(SlSdataPtr)	(Uint16 *)	; スプライトデータセットポインタ(Master)
	038:	(ZbufPtr)	(void **)	; Zバッファポインタ
	03C:	(FormTbl)	(TEXTURE *)	; テクスチャデータテーブル
	040:	(SprbufBias)	(Uint32)	; スプライトデータバッファ切り替え
	044:	(ComRdPtr)	(Uint32 *)	; コマンドリードポインタ
	048:	(ComWrPtr)	(Uint32 *)	; コマンドセットポインタ
	04C:	(MsLightVector)	(VECTOR)	; 光源ベクトル(Master)
	058:	(SlLightVector)	(VECTOR)	; 光源ベクトル(Master)
	064:	(ColorOffset)	(Uint8 *)	; カラーオフセットテーブルポインタ
	068:	(MsScreenDist)	(FIXED)		; スクリーン位置(Master)
	06C:	(SlScreenDist)	(FIXED)		; スクリーン位置(Slave)
	070:	(MsZlimit)	(Sint16)	; 表示リミットZ位置(Master)
	072:	(WindowNumber)	(Uint8)		; ウィンドウ使用数
	073:	(WinUseFlag)	(Uint8)		; ウィンドウ使用フラグ
	074:	(TotalPolygons)	(Uint16)	; 演算ポリゴン数
	076:	(TotalVertices)	(Uint16)	; 演算頂点数
	078:	(MsScreenLeft)	(Sint16)	; スクリーン左位置
	07A:	(MsScreenTop)	(Sint16)	; スクリーン上位置
	07C:	(MsScreenRight)	(Sint16)	; スクリーン右位置
	07E:	(MsScreenBottom) (Sint16)	; スクリーン下位置
	080:	(MsScreenSizeX)	(Uint16)	; スクリーン横サイズ(Master)
	082:	(MsScreenSizeY)	(Uint16)	; スクリーン縦サイズ(Master)
	084:	(MsWindowSizeX)	(Uint16)	; ウィンドウサイズ(Master)
	086:	(MsWindowSizeY)	(Uint16)	; ウィンドウサイズ(Master)
	088:	(MXPolygons)	(Uint16)	; 最大ポリゴン数
	08A:	(MXVertices)	(Uint16)	; 最大頂点数
	08C:	(FrameSizeX)	(Uint16)	; フレームバッファサイズ
	08E:	(FrameSizeY)	(Uint16)	; フレームバッファサイズ
	090:	(MsWinXAdder)	(Sint16)	; ウィンドウチェック用加算データ(Master)
	092:	(MsWinYAdder)	(Sint16)	; ウィンドウチェック用加算データ(Master)
	094:	(SlWinXAdder)	(Uint16)	; ウィンドウチェック用加算データ(Slave)
	096:	(SlWinYAdder)	(Uint16)	; ウィンドウチェック用加算データ(Slave)
	098:	(MsClipXAdder)	(Sint16)	; クリッピング用加算データ(横)(Master)
	09A:	(MsClipYAdder)	(Sint16)	; クリッピング用加算データ(縦)(Master)
	09C:	(SlClipXAdder)	(Sint16)	; クリッピング用加算データ(横)(Slave)
	09E:	(SlClipYAdder)	(Sint16)	; クリッピング用加算データ(縦)(Slave)
	0A0:	(SlZlimit)	(Sint16)	; 表示リミットZ位置(Slave)
	0A2:	(WinPtr)	(Uint16)	; ウィンドウデータセットオフセット
	0A4:	(DispPolygons)	(Uint16)	; 表示ポリゴン数
	0A6:	(DMAEndFlag)	(Uint8)		; DMA転送終了フラグ(未使用)
	0A8:	(DMASetFlag)	(Uint8)		; DMAテーブルセットフラグ
	0AA:	(PutCount)	(Uint16)	; slPutPolygon(),sl...Sprite()呼び出し回数
	0AC:	(MsZdpsftcnt)	(Uint8)		; 画面表示リミットシフトカウンタ(Master)
	0AD:	(SlZdpsftcnt)	(Uint8)		; 画面表示リミットシフトカウンタ(Slave)

	0B0 : (Resolution)	(Uint8)		; 画面モード 
	0B1 : (NbPCMBf)	(Uint8)		; PCMバッファの数(2000H単位)
	0B2 : (PCMBufFlag)	(Sint16)	; PCMバッファの空き状況フラグ
	0B4 : (SoundRdCount)	(Uint8)		; サウンドバッファ読み出しカウンタ
	0B5 : (SoundWrCount)	(Uint8)		; サウンドバッファエントリーカウンタ
	0B6 : (FRT_Count)	(Sint16)	; FRTカウンタ
	0B7 : (SCUMC_ID)	(Uint8)		; SCUメモリーコピーのチャンネルナンバー
	0B8 : (DMASt_CPU0)	(Uint8)		; CPU D.M.A.のステータス(CH0)
	0BA : (DMASt_CPU1)	(Uint8)		; CPU D.M.A.のステータス(CH1)
	0BB : (DMASt_SCU0)	(Uint8)		; SCU D.M.A.のステータス(CH0)
	0BC : (DMASt_SCU1)	(Uint8)		; SCU D.M.A.のステータス(CH1)
	0BD : (DMASt_SCU2)	(Uint8)		; SCU D.M.A.のステータス(CH2)
	0BE : (--------)	(Uint16)	; システム予約

	0C0:	(VDP2_TVMD)	(Uint16)	; TV画面モード
	0C2:	(VDP2_EXTEN)	(Uint16)	; 外部信号イネーブル
	0C4:	(VDP2_TVSTAT)	(Uint16)	; 画面ステータス
	0C6:	(VDP2_VRSIZE)	(Uint16)	; VRAMサイズ
	0C8:	(VDP2_HCNT)	(Uint16)	; Hカウンター
	0CA:	(VDP2_VCNT)	(Uint16)	; Vカウンター
	0CE:	(VDP2_RAMCTL)	(Uint16)	; RAMコントロール
	0D0:	(VDP2_CYCA0L)	(Uint16)	; VRAMサイクルパターン(バンクA0、T0ー3)
	0D2:	(VDP2_CYCA0U)	(Uint16)	; VRAMサイクルパターン(バンクA0、T4ー7)
	0D4:	(VDP2_CYCA1L)	(Uint16)	; VRAMサイクルパターン(バンクA1、T0ー3)
	0D6:	(VDP2_CYCA1U)	(Uint16)	; VRAMサイクルパターン(バンクA1、T4ー7)
	0D8:	(VDP2_CYCB0L)	(Uint16)	; VRAMサイクルパターン(バンクB0、T0ー3)
	0DA:	(VDP2_CYCB0U)	(Uint16)	; VRAMサイクルパターン(バンクB0、T4ー7)
	0DC:	(VDP2_CYCB1L)	(Uint16)	; VRAMサイクルパターン(バンクB1、T0ー3)
	0DE:	(VDP2_CYCB1U)	(Uint16)	; VRAMサイクルパターン(バンクB1、T4ー7)
	0E0:	(VDP2_BGON)	(Uint16)	; 画面表示イネーブル
	0E2:	(VDP2_MZCTL)	(Uint16)	; モザイクコントロール
	0E4:	(VDP2_SFSEL)	(Uint16)	; 特殊機能コードセレクト
	0E6:	(VDP2_SFCODE)	(Uint16)	; 特殊機能コード
	0E8:	(VDP2_CHCTLA)	(Uint16)	; キャラクタコントロール(NBG0、NBG1)
	0EA:	(VDP2_CHCTLB)	(Uint16)	; キャラクタコントロール(NBG2、NBG3、RBG0)
	0EC:	(VDP2_BMPNA)	(Uint16)	; ビットマップパレットナンバー(NBG0、1)
	0EE:	(VDP2_BMPNB)	(Uint16)	; ビットマップパレットナンバー(RBG0)
	0F0:	(VDP2_PNCN0)	(Uint16)	; パターンネームコントロール(NBG0)
	0F2:	(VDP2_PNCN1)	(Uint16)	; パターンネームコントロール(NBG1)
	0F4:	(VDP2_PNCN2)	(Uint16)	; パターンネームコントロール(NBG2)
	0F6:	(VDP2_PNCN3)	(Uint16)	; パターンネームコントロール(NBG3)
	0F8:	(VDP2_PNCR)	(Uint16)	; パターンネームコントロール(RBG0)
	0FA:	(VDP2_PLSZ)	(Uint16)	; プレーンサイズ
	0FC:	(VDP2_MPOFN)	(Uint16)	; マップオフセット(NBG0ー3)
	0FE:	(VDP2_MPOFR)	(Uint16)	; マップオフセット(回転パラメータA、B)
	100:	(VDP2_MPABN0)	(Uint16)	; マップ(NBG0プレーンA、B)
	102:	(VDP2_MPCDN0)	(Uint16)	; マップ(NBG0プレーンC、D)
	104:	(VDP2_MPABN1)	(Uint16)	; マップ(NBG1プレーンA、B)
	106:	(VDP2_MPCDN1)	(Uint16)	; マップ(NBG1プレーンC、D)
	108:	(VDP2_MPABN2)	(Uint16)	; マップ(NBG2プレーンA、B)
	10A:	(VDP2_MPCDN2)	(Uint16)	; マップ(NBG2プレーンC、D)
	10C:	(VDP2_MPABN3)	(Uint16)	; マップ(NBG3プレーンA、B)
	10E:	(VDP2_MPCDN3)	(Uint16)	; マップ(NBG3プレーンC、D)
	110:	(VDP2_MPABRA)	(Uint16)	; マップ(回転パラメータAプレーンA、B)
	112:	(VDP2_MPCDRA)	(Uint16)	; マップ(回転パラメータAプレーンC、D)
	114:	(VDP2_MPEFRA)	(Uint16)	; マップ(回転パラメータAプレーンE、F)
	116:	(VDP2_MPGHRA)	(Uint16)	; マップ(回転パラメータAプレーンG、H)
	118:	(VDP2_MPIJRA)	(Uint16)	; マップ(回転パラメータAプレーンI、J)
	11A:	(VDP2_MPKLRA)	(Uint16)	; マップ(回転パラメータAプレーンK、L)
	11C:	(VDP2_MPMNRA)	(Uint16)	; マップ(回転パラメータAプレーンM、N)
	11E:	(VDP2_MPOPRA)	(Uint16)	; マップ(回転パラメータAプレーンO、P)
	120:	(VDP2_MPABRB)	(Uint16)	; マップ(回転パラメータBプレーンA、B)
	122:	(VDP2_MPCDRB)	(Uint16)	; マップ(回転パラメータBプレーンC、D)
	124:	(VDP2_MPEFRB)	(Uint16)	; マップ(回転パラメータBプレーンE、F)
	126:	(VDP2_MPGHRB)	(Uint16)	; マップ(回転パラメータBプレーンG、H)
	128:	(VDP2_MPIJRB)	(Uint16)	; マップ(回転パラメータBプレーンI、J)
	12A:	(VDP2_MPKLRB)	(Uint16)	; マップ(回転パラメータBプレーンK、L)
	12C:	(VDP2_MPMNRB)	(Uint16)	; マップ(回転パラメータBプレーンM、N)
	12E:	(VDP2_MPOPRB)	(Uint16)	; マップ(回転パラメータBプレーンO、P)
	130:	(VDP2_SCXN0)	(FIXED)		; 画面スクロール値(NBG0、水平方向固定小数)
	130:	 (VDP2_SCXIN0)	(Sint16)	; 画面スクロール値(NBG0、水平方向整数部)
	132:	 (VDP2_SCXDN0)	(Uint16)	; 画面スクロール値(NBG0、水平方向小数部)
	134:	(VDP2_SCYN0)	(FIXED)		; 画面スクロール値(NBG0、垂直方向固定小数)
	134:	 (VDP2_SCYIN0)	(Uint16)	; 画面スクロール値(NBG0、垂直方向整数部)
	136:	 (VDP2_SCYDN0)	(Uint16)	; 画面スクロール値(NBG0、垂直方向小数部)
	138:	(VDP2_ZMXN0)	(FIXED)		; 座標増分(NBG0、水平方向固定小数)
	138:	 (VDP2_ZMXIN0)	(Uint16)	; 座標増分(NBG0、水平方向整数部)
	13A:	 (VDP2_ZMXDN0)	(Uint16)	; 座標増分(NBG0、水平方向小数部)
	13C:	(VDP2_ZMYN0)	(FIXED)		; 座標増分(NBG0、垂直方向固定小数)
	13C:	 (VDP2_ZMYIN0)	(Uint16)	; 座標増分(NBG0、垂直方向整数部)
	13E:	 (VDP2_ZMYDN0)	(Uint16)	; 座標増分(NBG0、垂直方向小数部)
	140:	(VDP2_SCXN1)	(FIXED)		; 画面スクロール値(NBG1、水平方向固定小数)
	140:	 (VDP2_SCXIN1)	(Uint16)	; 画面スクロール値(NBG1、水平方向整数部)
	142:	 (VDP2_SCXDN1)	(Uint16)	; 画面スクロール値(NBG1、水平方向小数部)
	144:	(VDP2_SCYN1)	(FIXED)		; 画面スクロール値(NBG1、垂直方向固定小数)
	144:	 (VDP2_SCYIN1)	(Uint16)	; 画面スクロール値(NBG1、垂直方向整数部)
	146:	 (VDP2_SCYDN1)	(Uint16)	; 画面スクロール値(NBG1、垂直方向小数部)
	148:	(VDP2_ZMXN1)	(FIXED)		; 座標増分(NBG1、水平方向固定小数)
	148:	 (VDP2_ZMXIN1)	(Uint16)	; 座標増分(NBG1、水平方向整数部)
	14A:	 (VDP2_ZMXDN1)	(Uint16)	; 座標増分(NBG1、水平方向小数部)
	14C:	(VDP2_ZMYN1)	(FIXED)		; 座標増分(NBG1、垂直方向固定小数)
	14C:	 (VDP2_ZMYIN1)	(Uint16)	; 座標増分(NBG1、垂直方向整数部)
	14E:	 (VDP2_ZMYDN1)	(Uint16)	; 座標増分(NBG1、垂直方向小数部)
	150:	(VDP2_SCXN2)	(Uint16)	; 画面スクロール値(NBG2、水平方向)
	152:	(VDP2_SCYN2)	(Uint16)	; 画面スクロール値(NBG2、垂直方向)
	154:	(VDP2_SCXN3)	(Uint16)	; 画面スクロール値(NBG3、水平方向)
	156:	(VDP2_SCYN3)	(Uint16)	; 画面スクロール値(NBG3、垂直方向)
	158:	(VDP2_ZMCTL)	(Uint16)	; 縮小イネーブル
	15A:	(VDP2_SCRCTL)	(Uint16)	; ライン&縦セルスクロールコントロール
	15C:	(VDP2_VCSTA)	(Uint16 *)	; 縦セルスクロールテーブルアドレス
	160:	(VDP2_LSTA0)	(Sint16 *)	; NBG0用ラインスクロールテーブルアドレス
	164:	(VDP2_LSTA1)	(Sint16 *)	; NBG1用ラインスクロールテーブルアドレス
	168:	(VDP2_LCTA)	(Uint16 *)	; ラインカラー画面テーブルアドレス
	16C:	(VDP2_BKTA)	(Uint16 *)	; バック画面テーブルアドレス
	170:	(VDP2_RPMD)	(Uint16)	; 回転パラメータモード
	172:	(VDP2_RPRCTL)	(Uint16)	; 回転パラメータリードコントロール
	174:	(VDP2_KTCTL)	(Uint16)	; 係数テーブルコントロール
	176:	(VDP2_KTAOF)	(Uint16)	; 係数テーブルアドレスオフセット
	178:	(VDP2_OVPNRA)	(Uint16)	; 画面オーバーパターンネーム
	17A:	(VDP2_OVPNRB)	(Uint16)	; 画面オーバーパターンネーム
	17C:	(VDP2_RPTA)	(Sint32 *)	; 回転パラメータテーブルアドレス
	180:	(VDP2_WPSX0)	(Uint16)	; ウィンドウポジション(H start)
	182:	(VDP2_WPSY0)	(Uint16)	; ウィンドウポジション(V start)
	184:	(VDP2_WPEX0)	(Uint16)	; ウィンドウポジション(H stop)
	186:	(VDP2_WPEY0)	(Uint16)	; ウィンドウポジション(V stop)
	188:	(VDP2_WPSX1)	(Uint16)	; ウィンドウポジション(H start)
	18A:	(VDP2_WPSY1)	(Uint16)	; ウィンドウポジション(V start)
	18C:	(VDP2_WPEX1)	(Uint16)	; ウィンドウポジション(H stop)
	18E:	(VDP2_WPEY1)	(Uint16)	; ウィンドウポジション(V stop)
	190:	(VDP2_WCTLA)	(Uint16)	; ウィンドウコントロール
	192:	(VDP2_WCTLB)	(Uint16)	; ウィンドウコントロール
	194:	(VDP2_WCTLC)	(Uint16)	; ウィンドウコントロール
	196:	(VDP2_WCTLD)	(Uint16)	; ウィンドウコントロール
	198:	(VDP2_LWTA0)	(Uint16 *)	; ラインウィンドウテーブルアドレス
	19C:	(VDP2_LWTA1)	(Uint16 *)	; ラインウィンドウテーブルアドレス
	1A0:	(VDP2_SPCTL)	(Uint16)	; スプライトコントロール
	1A2:	(VDP2_SDCTL)	(Uint16)	; シャドウコントロール
	1A4:	(VDP2_CRAOFA)	(Uint16)	; カラーRAMアドレスオフセット(NBG0ー3)
	1A6:	(VDP2_CRAOFB)	(Uint16)	; カラーRAMアドレスオフセット(RBG0、スプライト)
	1A8:	(VDP2_LNCLEN)	(Uint16)	; ラインカラー画面イネーブル
	1AA:	(VDP2_SFPRMD)	(Uint16)	; 特殊プライオリティモード
	1AC:	(VDP2_CCCTL)	(Uint16)	; カラー演算コントロール
	1AE:	(VDP2_SFCCMD)	(Uint16)	; 特殊カラー演算モード
	1B0:	(VDP2_PRISA)	(Uint16)	; プライオリティナンバー
	1B2:	(VDP2_PRISB)	(Uint16)	; プライオリティナンバー
	1B4:	(VDP2_PRISC)	(Uint16)	; プライオリティナンバー
	1B6:	(VDP2_PRISD)	(Uint16)	; プライオリティナンバー
	1B8:	(VDP2_PRINA)	(Uint16)	; プライオリティナンバー
	1BA:	(VDP2_PRINB)	(Uint16)	; プライオリティナンバー
	1BC:	(VDP2_PRIR)	(Uint16)	; プライオリティナンバー
	1BE: (--------)	(Uint16)	; システム予約
	1C0:	(VDP2_CCRSA)	(Uint16)	; カラー演算割合(スプライト0、1)
	1C2:	(VDP2_CCRSB)	(Uint16)	; カラー演算割合(スプライト2、3)
	1C4:	(VDP2_CCRSC)	(Uint16)	; カラー演算割合(スプライト4、5)
	1C6:	(VDP2_CCRSD)	(Uint16)	; カラー演算割合(スプライト6、7)
	1C8:	(VDP2_CCRNA)	(Uint16)	; カラー演算割合(NBG0、1)
	1CA:	(VDP2_CCRNB)	(Uint16)	; カラー演算割合(NBG2、3)
	1CC:	(VDP2_CCRR)	(Uint16)	; カラー演算割合(RGB0)
	1CE:	(VDP2_CCRLB)	(Uint16)	; カラー演算割合(ラインカラー画面、バック画面)
	1D0:	(VDP2_CLOFEN)	(Uint16)	; カラーオフセットイネーブル
	1D2:	(VDP2_CLOFSL)	(Uint16)	; カラーオフセットセレクト
	1D4:	(VDP2_COAR)	(Uint16)	; カラーオフセットA(Red)
	1D6:	(VDP2_COAG)	(Uint16)	; カラーオフセットA(Green)
	1D8:	(VDP2_COAB)	(Uint16)	; カラーオフセットA(Blue)
	1DA:	(VDP2_COBR)	(Uint16)	; カラーオフセットB(Red)
	1DC:	(VDP2_COBG)	(Uint16)	; カラーオフセットB(Green)
	1DE:	(VDP2_COBB)	(Uint16)	; カラーオフセットB(Blue)

	1E0:	(ScrRotPtr)	(ROTSCROLL *)	; 操作する回転パラメータのアドレス
	1E4:	(nbg0_char_adr)	(void *)	; NBG0用CGアドレス
	1E8:	(nbg1_char_adr)	(void *)	; NBG1用CGアドレス
	1EC:	(nbg2_char_adr)	(void *)	; NBG2用CGアドレス
	1F0:	(nbg3_char_adr)	(void *)	; NBG3用CGアドレス
	1F4:	(ra_char_adr)	(void *)	; RBG0(パラメータA)用CGアドレス
	1F8:	(rb_char_adr)	(void *)	; RBG0(パラメータB)用CGアドレス
	1FC:	(nbg0_page_adr)	(void *)	; NBG0用パターンネームアドレス
	200:	(nbg1_page_adr)	(void *)	; NBG1用パターンネームアドレス
	204:	(nbg2_page_adr)	(void *)	; NBG2用パターンネームアドレス
	208:	(nbg3_page_adr)	(void *)	; NBG3用パターンネームアドレス
	20C:	(ra_page_adr)	(void *)	; RBG0(パラメータA)用パターンネームアドレス
	210:	(rb_page_adr)	(void *)	; RBG0(パラメータB)用パターンネームアドレス
	214:	(rpara_vram_adr)(void *)	; 回転パラメータセットアドレス
	218:	(k_table_adr)	(void *)	; 係数テーブルセットアドレス
	21C:	(RotScrParA)	(ROTSCROLL)	; 回転パラメータA
	284:	(RotScrParB)	(ROTSCROLL)	; 回転パラメータB
	2EC: (Nbg2_PosX)	(FIXED)		; NBG2 表示位置 (X)
	2F0: (Nbg2_PosY)	(FIXED)		; NBG2 表示位置 (Y)
	2F4: (Nbg3_PosX)	(FIXED)		; NBG3 表示位置 (X)
	2F8: (Nbg3_PosY)	(FIXED)		; NBG3 表示位置 (Y)

	2FC:	(Window_data)	(Uint16[22])	; ウィンドウコントロールデータバッファ(2つ分)
	328:	(Center_data)	(Uint16[10])	; ウィンドウ中心コントロールデータバッファ(2つ分)
	33C:	(RandWork)	(Uint32)	; 乱数生成用ワーク
	340: (CDReadExec)	(void*())	; CD読み込みサーバー関数
	344: (DMA_TRANS)	(Uint32[10])	; CPU D.M.A. パラメータ
	36C: (SOUND)		(void*[3])	; サウンドバッファポインタ
	378: (PERIPHERAL)	(Uint32[12])	; ペリフェラルコントロールデータ


○ VDP1_VRAM
    0x25C00000から始まるVDP1のVRAMで先頭と末尾の領域はシステムによって
  使用されているため、ユーザーは使用できない。

  25C00000: スプライトコントロールコマンド
	(MAX_POLYGON + 6) * 32 = 0xE1C0
  25C7FF00: グーローシェーディングテーブル
	2*4*33 = 0x108(264)

○ VDP2_VRAM
    0x25E00000から始まるVDP2のVRAMはシステム初期化の際、以下の様に
  区分されている。

  25E00000: VDP2_VRAM_A0
	回転スクロール用CGデータ
  25E20000: VDP2_VRAM_A1
	回転スクロール用係数データ及び、回転パラメータ
  25E40000: VDP2_VRAM_B0
	回転スクロール用パターンネームデータ
  25E60000: VDP2_VRAM_B1
	ノーマルスクロール用データ
	この領域はCGとパターンネームが共有している。
    25E60000~25E67FFF	(NBG0及びNBG1用CGデータ)
    25E68000~25E75FFF	(NBG1用CGデータ)
    25E76000~25E77FFF	(NBG0用パターンネームデータ1ページ)
    25E78000~25E7FFFF	(NBG1用パターンネームデータ4ページ)

  CGはどのスクロールも256色モードでパターンネームは1ワード/セルになっている。
  NBG0は各セルごとに反転のフラグを持つ10ビットモードで、他の面は反転を面ごとに
  使用する12ビットモードとなっている。
  カラーRAMは16ビット2048色モードで、オフセットは使用していない。
  バック面は単色で、25E3FFFEにカラーデータ(0000)を入れている。

 06000000 : +---------------------------+
	    | Boot ROM BIOS functions	|
 06000800 : +---------------------------+
	    | Slave CPU Stack Area	|
 06001000 : +---------------------------+
	    | Master CPU default Stack	|
 06002000 : +---------------------------+
	    | ???			|
 06004000 : +---------------------------+
	    |				|
	    | User Program & Data	|
	    |				|
 060C0000 : +---------------------------+
	    |				|
	    | SortList	(5400)		|
	    |				|
 060C5400 : +---------------------------+
	    | TransList	(F0)		|
 060C54F0 : +---------------------------+
	    | Zbuffer	(200)		|
 060C56F0 : +---------------------------+
	    | Zbuffer2	(200)		|
 060C58F0 : +---------------------------+
	    | Zbuf_nest	(400)		|
 060C5CF0 : +---------------------------+
	    |				|
	    | Spritebuf	(FBDC)		|
	    |				|
 060D58CC : +---------------------------+
	    |				|
	    | Spritebuf2(FBDC)		|
	    |				|
 060E54A8 : +---------------------------+
	    |				|
	    | Pbuffer	(9C40)		|
	    |				|
 060EF0E8 : +---------------------------+
	    | CLOfstBuf	(400)		|
 060EF4E8 : +---------------------------+
	    |				|
	    | CommandBuf(DF40)		|
	    |				|
 060FD428 : +---------------------------+
	    |				|
	    | Stack Area(27D8)		|
	    |				|
 060FFC00 : +---------------------------+
	    | SystemWork(400)		|
 06100000 : +---------------------------+


 25C00000 : +---------------------------+
	    |				|
	    | SpriteCommand(E1C0)	|
	    |				|
 25C0E1C0 : +---------------------------+
	    |				|
	    | Free (for User)		|
	    |				|
 25C7FEF8 : +---------------------------+
	    | Gouraud table(108)	|
 25C80000 : +---------------------------+


 25E00000 : +---------------------------+
	    |				|
	    | RBG0 CG (2048chars)	|
	    |				|
 25E20000 : +---------------------------+
	    |				|
	    | RBG0 K table		|
	    |				|
 25E40000 : +---------------------------+
	    |				|
	    | RBG0 Map (16pages)	|
	    |				|
 25E60000 : +---------------------------+
	    | NBG0 , NBG1 CG (512 chars)|
 25E68000 : +- - - - - - - - - - - - - -+
	    | NBG1 CG (+896chars)	|
 25E76000 : +---------------------------+
	    | NBG0 Map (1page)		|
 25E78000 : +---------------------------+
	    | NBG1 Map (4pages)		|
 25E80000 : +---------------------------+

;---------------------------------------------------------------------------

◎ システムワークRAM領域のカスタマイズについて

060FFC00から始まるシステム変数領域はシステムで固定されていますが、
ワークRAMとして使用される領域(デフォルトでは 060C0000~)について
は、以下に示す変数をユーザーが定義することによりカスタマイズ可能です。
(ただし、一部を変更する場合でも全ての変数を設定するようにして下さい)

    void*   MasterStack = (void*)0x60ffc00 ;	/* Master Stack area End */
    void*   SlaveStack  = (void*)0x6001e00 ;	/* Slave Stack area End */
    Uint16  MaxVertices = 2500 ;		/* Calculatable vertice numbers */
    Uint16  MaxPolygons = 1786 ;		/* Calculatable polygon numbers */
    Uint16  EventSize = 0x80 ;			/* sizeof(EVENT) */
    Uint16  WorkSize = 0x40 ;			/* sizeof(WORK) */
    Uint16  MaxEvents = 64 ;			/* Useful Event count */
    Uint16  MaxWorks = 256 ;			/* Useful Work count */
    void*   SortList = (void*)0x60c0000 ;	/* SCU D.M.A. Table */
    Uint32  SortListSize = 0x5400 ;		/* Sprite transfer request table size */
    void*   TransList = (void*)0x60fb800 ;	/* SCU D.M.A. Table */
    void*   Zbuffer = (void*)0x60c5800 ;	/* (128 + 128 + 256) * 4 Bytes fix */
    void*   SpriteBuf (void*)0x60c6000 ;	/* Sprite control data buffer */
    Uint32  SpriteBufSize = 0x1f7b8 ;		/* Sprite control data buffer size */
    void*   Pbuffer = (void*)0x60e57b8 ;	/* Point calculate buffer */
    void*   CLOfstBuf = (void*)0x60c5400 ;	/* 32 * 32 Bytes fix */
    void*   CommandBuf = (void*)0x60ef3f8 ;	/* Command for slave CPU buffer */
    void*   PCM_Work = (void*)0x25a78000 ;	/* PCM data buffer */
    Uint32  PCM_WkSize = 0x8000 ;		/* PCM data buffer size */

    EVENT  EventBuf[MAX_EVENTS] ;	/* buffer for Event use */
    WORK   WorkBuf[MAX_WORKS] ;		/* buffer for Work use */
    EVENT* RemainEvent[MAX_EVENTS] ;	/* Remain Event address buffer */
    WORK*  RemainWork[MAX_WORKS] ;	/* Remain Work address buffer */

それぞれの領域の設定は以下の注意点を必ず守るようにして下さい。

(1) SortList と TransList は SCU D.M.A.を間接モードで使用するため、
     テーブルのサイズを越える2のべき乗数で領域調整するようにして下さい。
     SortList は スプライト(ポリゴン)データ及び、ウィンドウ等のデータの
     転送にも使用するため、表示される最大スプライト数 + 6個分のエントリー
     を確保して下さい。
     ひとつのエントリーにつき12バイトのテーブルを使用します。
     例えば、1000スプライト表示する場合には
	(1000+6) * 12 = 12072(2F28H) となりますので、
     4000Hバウンダリのアドレスに設定する。

     また、TransList はブランキング中の転送リクエストに使用され20エント
     リーまでとなっていますので、
	20 * 12 = 240(F0H) バイト必要ですので、
     100H バウンダリのアドレスに設定して下さい。

(2) Zbuffer , CLOfstBuf は サイズが固定で 4バイトバウンダリのアドレスに
     設定して下さい。

(3) CommandBuf は 表示制御関数(slPutPolygon , slDispSprite等)の実行回数
     * 80バイト + 100H ぐらいのサイズを確保して下さい。
     実行関数が特定できる場合には 次の表を参考にバッファサイズを設定して
     下さい。

	slPutPolygon	72バイト
	slDispPolygon	16バイト
	slPutSprite	36バイト
	slDispSprite	36バイト
	slSetSprite	16バイト
	slPerspective	  8バイト
	slWindow	20バイト
	slLight		16バイト
	slZdspLevel	  4バイト

     この他にシステムが各フレームごとにファンクションを送っているため、
     その分の余裕を見るようにして下さい。

(4) SpriteBuf は スプライトコントロールデータをセットするバッファで、
     各フレームで前半と後半とを切替えながら使用します。
     したがって、(実際に表示されるスプライト(ポリゴン)数 + 5個) * 36
     バイト * 2バンク 分のバッファが必要になります。

(5) Pbuffer は ポリゴンモデルを表示する際に座標変換、透視変換の演算用の
     バッファとして使用する領域で、slPutPolygon , slDispPolygon を使用し
     ないアプリケーションでは必要ありませんので、他のバッファと重複しても
     問題はありません。

(6) MaxPolygons , MaxVertices は 表示制御関数を実行する際にバッファオー
     バーをチェックするために使用しますが、実際に表示される数ではなく、
     エントリーされている数に対してチェックを行なっていますので、
     MaxPolygons に関しては 必ずしも SortListSize , SpriteBufSize と合って
     いる必要はありません。

(7) PCM_Work はサウンドCPUの領域で、サイズが 2000H単位となります
     ので、サウンド担当者と相談の上設定して下さい。

以下に ワークRAMの設定を行なうサンプル(workarea.c)を示します。

/*						*/
/*  Workarea assignment customize file		*/
/*		for SGL ver. 1.30		*/

/*------------------------------------------------------------------------*/

#include  "sl_def.h"

/*------------------------------------------------------------------------*/

#define		SystemWork		0x060ffc00	/* システム固定 */

#define		_Byte_			sizeof(Uint8)
#define		_Word_			sizeof(Uint16)
#define		_LongWord_		sizeof(Uint32)
#define		_Sprite_		(sizeof(Uint16) * 18)

#define		AdjWork(pt,sz,ct)	(pt + (sz) * (ct))

/*------------------------------------------------------------------------*/

#define		MAX_VERTICES		 500
#define		MAX_POLYGONS		 100

#define		WORK_AREA		0x060f0000

    enum workarea{
	sort_list  = WORK_AREA ,
	zbuffer    = AdjWork(sort_list  , _LongWord_ * 3 , MAX_POLYGONS + 6) ,
	spritebuf  = AdjWork(zbuffer    , _LongWord_ , 512) ,
	pbuffer    = AdjWork(spritebuf  , _Sprite_ , (MAX_POLYGONS + 6) * 2) ,
	clofstbuf  = AdjWork(pbuffer    , _LongWord_ * 4 , MAX_VERTICES) ,
	commandbuf = AdjWork(clofstbuf  , _Byte_ * 32 , 32) ,
	NextEntry  = AdjWork(commandbuf , _LongWord_ * 8 , MAX_POLYGONS)
    } ;

#define		PCM_Buffer		SoundRAM+0x78000

/*------------------------------------------------------------------------*/

    const void*   MasterStack   = (void*)(WORK_AREA - 0x800) ;
    const void*   SlaveStack    = (void*)(WORK_AREA) ;
    const Uint16  MaxVertices   = MAX_VERTICES ;
    const Uint16  MaxPolygons   = MAX_POLYGONS ;
    const Uint16  EventSize     = sizeof(EVENT) ;
    const Uint16  WorkSize      = sizeof(WORK) ;
    const Uint16  MaxEvents     = MAX_EVENTS ;
    const Uint16  MaxWorks      = MAX_WORKS ;
    const void*   SortList      = (void*)(sort_list) ;
    const Uint32  SortListSize  = (MAX_POLYGONS + 6) * _LongWord_ * 3 ;
    const void*   Zbuffer       = (void*)(zbuffer) ;
    const void*   SpriteBuf     = (void*)(spritebuf) ;
    const Uint32  SpriteBufSize = _Sprite_ * (MAX_POLYGONS + 6) * 2 ;
    const void*   Pbuffer       = (void*)(pbuffer) ;
    const void*   CLOfstBuf     = (void*)(clofstbuf) ;
    const void*   CommandBuf    = (void*)(commandbuf) ;
    const void*   PCM_Work      = (void*)(PCM_Buffer) ;
    const Uint32  PCM_WkSize    = 0x8000 ;
    const void*   TransList     = (void*)(SystemWork - 0x0100) ;

    EVENT  EventBuf[MAX_EVENTS] ;
    WORK   WorkBuf[MAX_WORKS] ;
    EVENT* RemainEvent[MAX_EVENTS] ;
    WORK*  RemainWork[MAX_WORKS] ;

/*------------------------------------------------------------------------*/