Mask欄は右欄で参照されるビットマスクです
Mask欄は右欄で参照されるビットマスクです。 レジスタ書き込み時、上位8ビットにコマンドコード(- XX -)を加えるのを忘れない
こと。例えば、- 03 - 表示マスクでは、表示無効 -> 03000001
形式:
Mask
bitmask - 説明
- gp1レジスタ読み出し ----------------------------------------------------------
- gp1 - GPUステータス
Mask
04000000 - 1:Idle 0:Busy
10000000 - コマンド受信 1:Ready 0:Not ready
80000000 - インターレースモードでGPUが1:奇数 0:偶数 ラインを描画中
- gp1レジスタ書き込み ----------------------------------------------------------
書き込みモードでは、gp1はGPUの機能に影響するコマンドを送るのに使われる。
コマンドデータが1ワード(32ビット)を超える場合、残りのデータはgp0に送られる。
- 00 - All Reset?
00000000 - All Reset?
- 01 - Command Reset
00000000 - Reset Command
- 02 - Reset IRQ
00000000 - Reset IRQ
- 03 - 表示マスク
00000000 - 表示有効
00000001 - 表示無効
- 04 - Misc
00000000 - I/Oモードに設定. 全てのプリミティブ、他のコマンドはgp0に送られる
00000002 - DMAスライスモード, CpuからGPU
00000003 - DMAスライスモード, GPUからCpu
I/OでVRAMにアップロードする, 32ビットアライン
*gp1 = 04000000 - I/Oモードに設定
*gp0 = 01000000 - キャッシュフラッシュ
*gp0 = a0000000 - CpuからGPU
*gp0 = yyyyxxxx - 左上隅
*gp0 = hhhhwwww - 矩形の幅と高さ
*gp0 = (w*h/2)個の32ビットワードを送る
I/OでVRAMからダウンロードする, 32ビットアライン
*gp1 = 04000000 - I/Oモードに設定
*gp0 = 01000000 - キャッシュフラッシュ
*gp0 = c0000000 - GPUからCpu
*gp0 = yyyyxxxx - 左上隅
*gp0 = hhhhwwww - 矩形の幅と高さ
RAM = *gp0 - (w*h/2)個の32ビットワードを読む
- 05 - 表示オフセット
Mask
000003ff - offset x
000ffc00 - offset y
- 06 - 水平開始/終了 (x , w) - これはTV表示上で、フレームバッファではない。
Mask
00000fff - s - スクリーン水平開始
00fff000 - e - スクリーン水平終了
x = screen.x
w = screen.w
s = 500 < 608 + x * 10 < 3290
e = s + 80 < s + (w * 10) < 3290
- 07 - 垂直開始/終了 (y , h) - これはTV表示上で、フレームバッファではない。
Mask
000003ff - s - スクリーン垂直開始
000ffc00 - e - スクリーン垂直終了
y = screen.y
h = screen.h
s = 0 < y + (PAL=19 NTSC=16) < PAL=310 NTSC=254
e = s + 1 < s + h < PAL=312 NTSC=256
- 08 - 表示モード
Mask
00000000 - 表示幅 <= 280
00000001 - 表示幅 <= 352
00000002 - 表示幅 <= 560
00000003 - 表示幅 > 560
00000008 - 1:Pal 0:Ntsc
00000010 - 1:24ビットモード 0:16ビットモード
00000020 - 1:インターレース 0:ノンインターレース
00000024 - 表示高 > (PAL=288 NTSC=256)
00000040 - 表示幅 <= 400
00000080 - 1:Reversed 0:Non-reversed
- 09 - ??? Used for GPU-B Ext ???
09000001
- 80 - Move Image
*gp1 = 80000000
*gp0 = yyyyxxxx - 転送元の左上隅
*gp0 = yyyyxxxx - 転送先の左上隅
*gp0 = hhhhwwww - 矩形の幅と高さ
- E1 - 描画モード
Mask
00000400 - 表示領域描画フラグ
00000200 - ディザフラグ
000009ff - テクスチャページ (tpageを作る計算式は不明)
- E2 - テクスチャウィンドウ
調査中
- E3 - クリップ領域開始
Mask
000003ff - clip.x
000ffc00 - clip.y
- E4 - クリップ領域終了 (X , Y)
Mask
000003ff - clip.w
000ffc00 - clip.h
- E5 - 描画オフセット
Mask
000007ff - ofs.x
003ff800 - ofs.y
- E6 - Priority?
調査中
- プリミティブ -----------------------------------------------------------------
- プリミティブをI/Oモードで送る
*gp1 = 0x04000000;
*gp0 = pkt[0]; *gp0 = pkt[1]; ...
以下で使っている形式についての注:
pkt[X] | aa | bb | cc | dd | コメント
- pkt[X]は32ビット
- aa, bb, cc, ddはバイトに対応する。したがって、送るデータは0xddbbccaa
- 01 - キャッシュフラッシュ
pkt[0] 01000000 - キャッシュフラッシュ
- 02 - 矩形塗りつぶし
pkt[0] | r0 | g0 | b0 | 02 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | w | h | 幅と高さ
- 20 - PolyF3 - フラットシェーディング三角形
pkt[0] | r0 | g0 | b0 | 20 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | x1 | y1 | 第2頂点
pkt[3] | x2 | y2 | 第3頂点
- 24 - PolyFT3 - フラットシェーディングテクスチャ三角形
pkt[0] | r0 | g0 | b0 | 24 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
pkt[3] | x1 | y1 | 第2頂点
pkt[4] | u1 | v1 | tpage | 第2テクスチャ座標, テクスチャページ
pkt[5] | x2 | y2 | 第3頂点
pkt[6] | u2 | v2 | | 第3テクスチャ座標
- 28 - PolyF4 - フラットシェーディング四角形
pkt[0] | r0 | g0 | b0 | 28 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | x1 | y1 | 第2頂点
pkt[3] | x2 | y2 | 第3頂点
pkt[4] | x3 | y3 | 第4頂点
- 2c - PolyFT4 - フラットシェーディングテクスチャ四角形
pkt[0] | r0 | g0 | b0 | 24 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
pkt[3] | x1 | y1 | 第2頂点
pkt[4] | u1 | v1 | tpage | 第2テクスチャ座標, テクスチャページ
pkt[5] | x2 | y2 | 第3頂点
pkt[6] | u2 | v2 | | 第3テクスチャ座標
pkt[7] | x3 | y3 | 第4頂点
pkt[8] | u3 | v3 | | 第4テクスチャ座標
- 30 - PolyG3 - グローシェーディング三角形
pkt[0] | r0 | g0 | b0 | 30 | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[4] | x1 | y1 | 第2頂点
pkt[5] | r2 | g2 | b2 | | 第3頂点 RGB色
pkt[6] | x2 | y2 | 第3頂点
- 34 - PolyGT3 - グローシェーディングテクスチャ三角形
pkt[0] | r0 | g0 | b0 | 34 | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
pkt[4] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[5] | x1 | y1 | 第2頂点
pkt[6] | u1 | v1 | tpage | 第2テクスチャ座標, テクスチャページ
pkt[7] | r2 | g2 | b2 | | 第3頂点 RGB色
pkt[8] | x2 | y2 | 第3頂点
pkt[9] | u2 | v2 | | 第3テクスチャ座標
- 38 - PolyG4 - グローシェーディング四角形
pkt[0] | r0 | g0 | b0 | 38 | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[4] | x1 | y1 | 第2頂点
pkt[5] | r2 | g2 | b2 | | 第3頂点 RGB色
pkt[6] | x2 | y2 | 第3頂点
pkt[7] | r3 | g3 | b3 | | 第4頂点 RGB色
pkt[8] | x3 | y3 | 第4頂点
- 3c - PolyGT4 - グローシェーディングテクスチャ四角形
pkt[0] | r0 | g0 | b0 | 3c | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
pkt[4] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[5] | x1 | y1 | 第2頂点
pkt[6] | u1 | v1 | tpage | 第2テクスチャ座標, テクスチャページ
pkt[7] | r2 | g2 | b2 | | 第3頂点 RGB色
pkt[8] | x2 | y2 | 第3頂点
pkt[9] | u2 | v2 | | 第3テクスチャ座標
pkt[10] | r3 | g3 | b3 | | 第4頂点 RGB色
pkt[11] | x3 | y3 | 第4頂点
pkt[12] | u3 | v3 | | 第4テクスチャ座標
- 40 - LineF2 - フラットシェーディングライン
pkt[0] | r0 | g0 | b0 | 40 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | x1 | y1 | 第2頂点
- 48 - LineF3 - 2連結フラットシェーディングライン
pkt[0] | r0 | g0 | b0 | 48 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | x1 | y1 | 第2頂点
pkt[3] | x2 | y2 | 第3頂点
pkt[4] | 55 | 55 | 55 | 55 | ???
- 4c - LineF4 - 3連結フラットシェーディングライン
pkt[0] | r0 | g0 | b0 | 4c | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | x1 | y1 | 第2頂点
pkt[3] | x2 | y2 | 第3頂点
pkt[4] | x3 | y3 | 第3頂点
pkt[5] | 55 | 55 | 55 | 55 | ???
- 50 - LineG2 - グローシェーディングライン
pkt[0] | r0 | g0 | b0 | 50 | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[3] | x1 | y1 | 第2頂点
- 58 - LineG3 - 2連結グローシェーディングライン
pkt[0] | r0 | g0 | b0 | 58 | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[3] | x1 | y1 | 第2頂点
pkt[4] | r2 | g2 | b2 | | 第3頂点 RGB色
pkt[5] | x2 | y2 | 第3頂点
pkt[6] | 55 | 55 | 55 | 55 | ???
- 5c - LineG4 - 3連結グローシェーディングライン
pkt[0] | r0 | g0 | b0 | 5c | 第1頂点 RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | r1 | g1 | b1 | | 第2頂点 RGB色
pkt[3] | x1 | y1 | 第2頂点
pkt[4] | r2 | g2 | b2 | | 第3頂点 RGB色
pkt[5] | x2 | y2 | 第3頂点
pkt[6] | r3 | g3 | b3 | | 第4頂点 RGB色
pkt[7] | x3 | y3 | 第4頂点
pkt[8] | 55 | 55 | 55 | 55 | ???
- 60 - Tile - 任意サイズタイル
pkt[0] | r0 | g0 | b0 | 64 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | h | w | 幅と高さ
- 64 - Sprt - 任意サイズスプライト
pkt[0] | r0 | g0 | b0 | 64 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
pkt[3] | h | w | 幅と高さ
- 68 - Tile1 - 1x1タイル
pkt[0] | r0 | g0 | b0 | 68 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
- 70 - Tile8 - 8x8タイル
pkt[0] | r0 | g0 | b0 | 70 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
- 74 - Sprt8 - 8x8スプライト
pkt[0] | r0 | g0 | b0 | 74 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
- 78 - Tile16 - 16x16タイル
pkt[0] | r0 | g0 | b0 | 78 | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
- 7c - Sprt16 - 16x16スプライト
pkt[0] | r0 | g0 | b0 | 7c | RGB色, プリミティブコード
pkt[1] | x0 | y0 | 第1頂点
pkt[2] | u0 | v0 | clut id | 第1テクスチャ座標, CLUT id
- a0 - Cpu -> GPU転送領域の設定 (フレームバッファへのDMA転送)
pkt[0] a0000000 - CpuからGPUへの転送
pkt[1] yyyyxxxx - 転送領域の左上隅
pkt[2] hhhhwwww - 転送領域の幅と高さ
- c0 - GPU -> Cpu転送領域の設定 (フレームバッファからのDMA転送)
pkt[0] c0000000 - GPUからCpuへの転送
pkt[1] yyyyxxxx - 転送領域の左上隅
pkt[2] hhhhwwww - 転送領域の幅と高さ