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 - 転送領域の幅と高さ