14 #include <sys/fcntl.h>
15 #include <sys/unistd.h>
22 extern QWORD GsPrimWorkArea[];
24 void GsSetDefaultDrawEnv(
GS_DRAWENV *drawenv, u16 psm, u16 w, u16 h)
26 drawenv->offset_x = 2048-w/2;
27 drawenv->offset_y = 2048-h/2;
32 drawenv->draw_mask = 0;
33 drawenv->auto_clear = 1;
35 drawenv->bg_color.r = 0x01;
36 drawenv->bg_color.g = 0x01;
37 drawenv->bg_color.b = 0x01;
38 drawenv->bg_color.a = 0x80;
39 drawenv->bg_color.q = 0.0f;
41 drawenv->fbw = (w+63)/64;
43 drawenv->vram_addr = 0;
48 void GsSetDefaultDrawEnvAddress(
GS_DRAWENV *drawenv, u16 vram_addr)
50 drawenv->vram_addr=vram_addr;
53 void GsSetDefaultDisplayEnv(
GS_DISPENV *dispenv, u16 psm, u16 w, u16 h, u16 dx, u16 dy)
56 int gs_DH, gs_DW, gs_DY, gs_DX;
58 pGParams=GsGetGParam();
59 dispenv->disp.
pad1=dispenv->disp.
pad2=0;
61 if(pGParams->
omode >= GS_MODE_NTSC && pGParams->
omode <= GS_MODE_PAL)
68 if(GetSyscallHandler(__NR__GetGsDxDyOffset))
69 _GetGsDxDyOffset(pGParams->
omode, &gs_DX, &gs_DY, &gs_DW, &gs_DH);
78 dispenv->dispfb.
pad1=dispenv->dispfb.
pad2=0;
82 dispenv->dispfb.
fbw=(w+63)/64;
83 dispenv->dispfb.
psm=psm;
84 switch(pGParams->
omode)
90 dispenv->disp.
display_x = (gs_DX+0x27C) + dx*((w+0x9FF)/w);
91 dispenv->disp.
magnify_h = (w+0x9FF)/w - 1;
93 dispenv->disp.
display_w = (w+0x9FF)/w*w - 1;
101 dispenv->disp.
display_x = gs_DX+0x27C + dx*((w+0x9FF)/w);
103 dispenv->disp.
magnify_h = (w+0x9FF)/w - 1;
105 dispenv->disp.
display_w = (w+0x9FF)/w*w - 1;
112 dispenv->disp.
display_x = gs_DX+0x290 + dx*((w+0x9FF)/w);
113 dispenv->disp.
magnify_h = (w+0x9FF)/w - 1;
115 dispenv->disp.
display_w = (w+0x9FF)/w*w - 1;
123 dispenv->disp.
display_x = gs_DX+0x290 + dx*((w+0x9FF)/w);
125 dispenv->disp.
magnify_h = (w+0x9FF)/w - 1;
127 dispenv->disp.
display_w = (w+0x9FF)/w*w - 1;
130 case GS_MODE_DTV_480P:
131 dispenv->disp.
display_x = gs_DX+((0x2D0-w) + ((0x2D0-w)>>31))/2*2 + (dx<<1)+0xE8;
139 printf(
"GsSetDefaultDisplayEnv: Unsupported video mode: 0x%x\n", pGParams->
omode);
143 void GsSetDefaultDisplayEnvAddress(
GS_DISPENV *dispenv,
unsigned short vram_addr)
145 dispenv->dispfb.
address=vram_addr;
150 GsSetXYOffset1(drawenv->offset_x<<4, drawenv->offset_y<<4);
151 GsSetScissor1(drawenv->clip.x, drawenv->clip.y, drawenv->clip.x+drawenv->clip.w, drawenv->clip.y+drawenv->clip.h);
152 GsSetFrame1(drawenv->vram_addr, drawenv->fbw, drawenv->psm, drawenv->draw_mask);
155 if(drawenv->auto_clear)
163 unsigned char context;
169 p=UNCACHED_SEG(GsPrimWorkArea);
172 gs_setR_RGBAQ(((
GS_R_RGBAQ *)&p[2]), drawenv->bg_color.r, drawenv->bg_color.g, drawenv->bg_color.b, drawenv->bg_color.a, drawenv->bg_color.q);
173 gs_setR_XYZ2(((
GS_R_XYZ *)&p[3]), (drawenv->offset_x+drawenv->clip.x)<<4, (drawenv->offset_y+drawenv->clip.y)<<4, 0x00000000);
174 gs_setR_XYZ2(((
GS_R_XYZ *)&p[4]), (drawenv->offset_x+drawenv->clip.x+drawenv->clip.w)<<4, (drawenv->offset_y+drawenv->clip.y+drawenv->clip.h)<<4, 0x00000000);
176 GsDmaSend(GsPrimWorkArea, 5);
188 GsSetXYOffset2(drawenv->offset_x<<4, drawenv->offset_y<<4);
189 GsSetScissor2(drawenv->clip.x, drawenv->clip.y, drawenv->clip.x+drawenv->clip.w, drawenv->clip.y+drawenv->clip.h);
190 GsSetFrame2(drawenv->vram_addr, drawenv->fbw, drawenv->psm, drawenv->draw_mask);
192 if(drawenv->auto_clear)
200 unsigned char context;
206 p=UNCACHED_SEG(GsPrimWorkArea);
209 gs_setR_RGBAQ(((
GS_R_RGBAQ *)&p[2]), drawenv->bg_color.r, drawenv->bg_color.g, drawenv->bg_color.b, drawenv->bg_color.a, drawenv->bg_color.q);
210 gs_setR_XYZ2(((
GS_R_XYZ *)&p[3]), (drawenv->offset_x+drawenv->clip.x)<<4, (drawenv->offset_y+drawenv->clip.y)<<4, 0x00000000);
211 gs_setR_XYZ2(((
GS_R_XYZ *)&p[4]), (drawenv->offset_x+drawenv->clip.x+drawenv->clip.w)<<4, (drawenv->offset_y+drawenv->clip.y+drawenv->clip.h)<<4, 0x00000000);
213 GsDmaSend(GsPrimWorkArea, 5);