ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
lowlevel.c File Reference
#include <errno.h>
#include <stdio.h>
#include <kernel.h>
#include <libgs.h>
#include "internal.h"
+ Include dependency graph for lowlevel.c:

Go to the source code of this file.

Functions

static s8 twh (s16 val)
 
int GsSetXYOffset1 (u16 x, u16 y)
 
int GsSetXYOffset2 (u16 x, u16 y)
 
int GsSetScissor1 (u16 upper_x, u16 upper_y, u16 lower_x, u16 lower_y)
 
int GsSetScissor2 (u16 upper_x, u16 upper_y, u16 lower_x, u16 lower_y)
 
int GsSetFrame1 (u16 framebuffer_addr, u8 framebuffer_width, u8 psm, u32 draw_mask)
 
int GsSetFrame2 (u16 framebuffer_addr, u8 framebuffer_width, u8 psm, u32 draw_mask)
 
int GsTextureFlush (void)
 
int GsSetPixelTest1 (u8 enable_alpha_test, u8 alpha_test_method, u8 alpha_reference, u8 alpha_fail_method, u8 enable_dest_alpha_test, u8 dest_alpha_test_mode, u8 enable_zbuff_test, u8 alpha_zbuff_method)
 
int GsSetPixelTest2 (u8 enable_alpha_test, u8 alpha_test_method, u8 alpha_reference, u8 alpha_fail_method, u8 enable_dest_alpha_test, u8 dest_alpha_test_mode, u8 enable_zbuff_test, u8 alpha_zbuff_method)
 
int GsSelectTexure1 (u16 tex_addr, u8 addr_width, u8 tex_pixmode, u16 tex_width, u16 tex_height, u16 clut_addr, u8 clut_pixmode, u8 clut_storagemode, u8 clut_offset)
 
int GsSelectTexure2 (u16 tex_addr, u8 addr_width, u8 tex_pixmode, u16 tex_width, u16 tex_height, u16 clut_addr, u8 clut_pixmode, u8 clut_storagemode, u8 clut_offset)
 
void GsSetFogColor (u8 r, u8 g, u8 b)
 
void GsEnableColorClamp (u16 enable)
 

Variables

QWORD GsPrimWorkArea []
 

Function Documentation

◆ GsEnableColorClamp()

void GsEnableColorClamp ( u16  enable)

Definition at line 190 of file lowlevel.c.

191 {
192  QWORD *p;
194  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
195  gs_setR_COLCLAMP(((GS_R_COLCLAMP *)&p[1]), enable);
196 
198  GsDmaWait();
199 }
#define UNCACHED_SEG(x)
Definition: kernel.h:35
void GsDmaWait(void)
Definition: dma.c:148
void GsDmaSend(const void *addr, u32 qwords)
Definition: dma.c:88
#define gs_setGIF_TAG(p, _nloop, _eop, _pre, _prim, _flg, _nreg, _reg)
Definition: libgs.h:1870
#define gif_rd_ad
Definition: libgs.h:326
#define gs_setR_COLCLAMP(p, _clamp)
Definition: libgs.h:1770
@ GS_GIF_PACKED
Definition: libgs.h:181
QWORD GsPrimWorkArea[]
Definition: packets.c:18
Definition: libgs.h:333

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_COLCLAMP, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

◆ GsSelectTexure1()

int GsSelectTexure1 ( u16  tex_addr,
u8  addr_width,
u8  tex_pixmode,
u16  tex_width,
u16  tex_height,
u16  clut_addr,
u8  clut_pixmode,
u8  clut_storagemode,
u8  clut_offset 
)

Definition at line 153 of file lowlevel.c.

154 {
155  QWORD *p;
157  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
158  gs_setR_TEX0_1(((GS_R_TEX0 *)&p[1]), tex_addr,addr_width,tex_pixmode, twh(tex_width), twh(tex_height),1,0,clut_addr,clut_pixmode,clut_storagemode,clut_offset,4); /*4 load contex 0*/
159 
161  GsDmaWait();
162 
163  return 0;
164 }
#define gs_setR_TEX0_1(p, _fb_addr, _fb_width, _psm, _tex_width, _tex_height, _col_comp, _tex_cc, _clutb_addr, _clut_pixmode, _clut_smode, _clut_offset, _cld)
Definition: libgs.h:1659
static s8 twh(s16 val)
Definition: lowlevel.c:22

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_TEX0_1, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, twh(), and UNCACHED_SEG.

◆ GsSelectTexure2()

int GsSelectTexure2 ( u16  tex_addr,
u8  addr_width,
u8  tex_pixmode,
u16  tex_width,
u16  tex_height,
u16  clut_addr,
u8  clut_pixmode,
u8  clut_storagemode,
u8  clut_offset 
)

Definition at line 166 of file lowlevel.c.

167 {
168  QWORD *p;
170  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
171  gs_setR_TEX0_2(((GS_R_TEX0 *)&p[1]), tex_addr, addr_width, tex_pixmode, twh(tex_width), twh(tex_height), 1, 0, clut_addr, clut_pixmode, clut_storagemode,clut_offset,5);/*5 load contex 2*/
172 
174  GsDmaWait();
175 
176  return 0;
177 }
#define gs_setR_TEX0_2(p, _fb_addr, _fb_width, _psm, _tex_width, _tex_height, _col_comp, _tex_cc, _clutb_addr, _clut_pixmode, _clut_smode, _clut_offset, _cld)
Definition: libgs.h:1663

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_TEX0_2, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, twh(), and UNCACHED_SEG.

◆ GsSetFogColor()

void GsSetFogColor ( u8  r,
u8  g,
u8  b 
)

Definition at line 179 of file lowlevel.c.

180 {
181  QWORD *p;
183  gs_setGIF_TAG(((GS_GIF_TAG*)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
184  gs_setR_FOGCOLOR(((GS_R_FOGCOLOR*)&p[1]), r,g,b);
185 
187  GsDmaWait();
188 }
#define gs_setR_FOGCOLOR(p, _r, _g, _b)
Definition: libgs.h:1739

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_FOGCOLOR, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

◆ GsSetFrame1()

int GsSetFrame1 ( u16  framebuffer_addr,
u8  framebuffer_width,
u8  psm,
u32  draw_mask 
)

Definition at line 88 of file lowlevel.c.

89 {
90  QWORD *p;
92  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
93  gs_setR_FRAME_1(((GS_R_FRAME *)&p[1]), framebuffer_addr,framebuffer_width,psm,draw_mask);
94 
96  GsDmaWait();
97 
98  return 0;
99 }
#define gs_setR_FRAME_1(p, _fb_addr, _fb_width, _psm, _draw_mask)
Definition: libgs.h:1794

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_FRAME_1, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

Referenced by GsPutDrawEnv1().

◆ GsSetFrame2()

int GsSetFrame2 ( u16  framebuffer_addr,
u8  framebuffer_width,
u8  psm,
u32  draw_mask 
)

Definition at line 101 of file lowlevel.c.

102 {
103  QWORD *p;
105  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
106  gs_setR_FRAME_2(((GS_R_FRAME *)&p[1]), framebuffer_addr,framebuffer_width,psm,draw_mask);
107 
109  GsDmaWait();
110 
111  return 0;
112 }
#define gs_setR_FRAME_2(p, _fb_addr, _fb_width, _psm, _draw_mask)
Definition: libgs.h:1798

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_FRAME_2, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

Referenced by GsPutDrawEnv2().

◆ GsSetPixelTest1()

int GsSetPixelTest1 ( u8  enable_alpha_test,
u8  alpha_test_method,
u8  alpha_reference,
u8  alpha_fail_method,
u8  enable_dest_alpha_test,
u8  dest_alpha_test_mode,
u8  enable_zbuff_test,
u8  alpha_zbuff_method 
)

Definition at line 127 of file lowlevel.c.

128 {
129  QWORD *p;
131  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
132  gs_setR_TEST_1(((GS_R_TEST *)&p[1]), enable_alpha_test, alpha_test_method, alpha_reference, alpha_fail_method, enable_dest_alpha_test, dest_alpha_test_mode, enable_zbuff_test, alpha_zbuff_method);
133 
135  GsDmaWait();
136 
137  return 0;
138 }
#define gs_setR_TEST_1(p, _ATE, _ATST, _AREF, _AFAIL, _DATE, _DATM, _ZTE, _ZTST)
Definition: libgs.h:1774

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_TEST_1, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

Referenced by GsEnableAlphaTransparency1(), and GsEnableZbuffer1().

◆ GsSetPixelTest2()

int GsSetPixelTest2 ( u8  enable_alpha_test,
u8  alpha_test_method,
u8  alpha_reference,
u8  alpha_fail_method,
u8  enable_dest_alpha_test,
u8  dest_alpha_test_mode,
u8  enable_zbuff_test,
u8  alpha_zbuff_method 
)

Definition at line 140 of file lowlevel.c.

141 {
142  QWORD *p;
144  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
145  gs_setR_TEST_2(((GS_R_TEST *)&p[1]), enable_alpha_test, alpha_test_method, alpha_reference, alpha_fail_method, enable_dest_alpha_test, dest_alpha_test_mode, enable_zbuff_test, alpha_zbuff_method);
146 
148  GsDmaWait();
149 
150  return 0;
151 }
#define gs_setR_TEST_2(p, _ATE, _ATST, _AREF, _AFAIL, _DATE, _DATM, _ZTE, _ZTST)
Definition: libgs.h:1778

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_TEST_2, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

Referenced by GsEnableAlphaTransparency2(), and GsEnableZbuffer2().

◆ GsSetScissor1()

int GsSetScissor1 ( u16  upper_x,
u16  upper_y,
u16  lower_x,
u16  lower_y 
)

Definition at line 62 of file lowlevel.c.

63 {
64  QWORD *p;
66  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
67  gs_setR_SCISSOR_1(((GS_R_SCISSOR *)&p[1]), upper_x,lower_x,upper_y,lower_y);
68 
70  GsDmaWait();
71 
72  return 0;
73 }
#define gs_setR_SCISSOR_1(p, _clip_x0, _clip_x1, _clip_y0, _clip_y1)
Definition: libgs.h:1746

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_SCISSOR_1, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

Referenced by GsPutDrawEnv1().

◆ GsSetScissor2()

int GsSetScissor2 ( u16  upper_x,
u16  upper_y,
u16  lower_x,
u16  lower_y 
)

Definition at line 75 of file lowlevel.c.

76 {
77  QWORD *p;
79  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
80  gs_setR_SCISSOR_2(((GS_R_SCISSOR *)&p[1]), upper_x,lower_x,upper_y,lower_y);
81 
83  GsDmaWait();
84 
85  return 0;
86 }
#define gs_setR_SCISSOR_2(p, _clip_x0, _clip_x1, _clip_y0, _clip_y1)
Definition: libgs.h:1750

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_SCISSOR_2, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

Referenced by GsPutDrawEnv2().

◆ GsSetXYOffset1()

int GsSetXYOffset1 ( u16  x,
u16  y 
)

Definition at line 36 of file lowlevel.c.

37 {
38  QWORD *p;
40  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
41  gs_setR_XYOFFSET_1(((GS_R_XYOFFSET *)&p[1]), x,y);
42 
44  GsDmaWait();
45 
46  return 0;
47 }
#define gs_setR_XYOFFSET_1(p, _offset_x, _offset_y)
Definition: libgs.h:1695
s32 x
Definition: libmouse.c:34
s32 y
Definition: libmouse.c:34

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_XYOFFSET_1, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, UNCACHED_SEG, x, and y.

Referenced by GsPutDrawEnv1().

◆ GsSetXYOffset2()

int GsSetXYOffset2 ( u16  x,
u16  y 
)

Definition at line 49 of file lowlevel.c.

50 {
51  QWORD *p;
53  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
54  gs_setR_XYOFFSET_2(((GS_R_XYOFFSET *)&p[1]), x,y);
55 
57  GsDmaWait();
58 
59  return 0;
60 }
#define gs_setR_XYOFFSET_2(p, _offset_x, _offset_y)
Definition: libgs.h:1699

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_XYOFFSET_2, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, UNCACHED_SEG, x, and y.

Referenced by GsPutDrawEnv2().

◆ GsTextureFlush()

int GsTextureFlush ( void  )

Definition at line 114 of file lowlevel.c.

115 {
116  QWORD *p;
118  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 1,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
119  gs_setR_TEXFLUSH(((GS_R_TEXFLUSH *)&p[1]));
120 
122  GsDmaWait();
123 
124  return 0;
125 }
#define gs_setR_TEXFLUSH(p)
Definition: libgs.h:1743

References gif_rd_ad, GS_GIF_PACKED, gs_setGIF_TAG, gs_setR_TEXFLUSH, GsDmaSend(), GsDmaWait(), GsPrimWorkArea, and UNCACHED_SEG.

◆ twh()

static s8 twh ( s16  val)
static

Definition at line 22 of file lowlevel.c.

23 {
24  s8 res;
25 
26  asm volatile ("plzcw %0, %1\n": "=r" (res) : "r" (val));
27  res = 31 - (res + 1);
28  if(val > res)
29  res++;
30 
31  return res;
32 }
signed char s8
Definition: tamtypes.h:51

Referenced by GsSelectTexure1(), and GsSelectTexure2().

Variable Documentation

◆ GsPrimWorkArea