mirror of
https://gitee.com/anod/open_agb_firm.git
synced 2025-05-06 22:04:10 +08:00
修改gpu_cmd的内容,让其容易阅读
This commit is contained in:
parent
f4f3a00bdb
commit
fc4d244e67
@ -508,7 +508,7 @@ alignas(16) u8 gbaGpuInitList[1136] =
|
|||||||
// 74 @0960 GPUREG_FIXEDATTRIB_DATA0 0,3e10,0
|
// 74 @0960 GPUREG_FIXEDATTRIB_DATA0 0,3e10,0
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x33, 0x02, 0x2f, 0x80,
|
0x33, 0x02, 0x2f, 0x80,
|
||||||
0x10, 0x3e, 0x00, 0x00,
|
0x10, 0x3e, 0x00, 0x00, // <---- 968 003e10改为003e60
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
// 75 @0976 GPUREG_FIXEDATTRIB_DATA0 3f00003e,0,477c00
|
// 75 @0976 GPUREG_FIXEDATTRIB_DATA0 3f00003e,0,477c00
|
||||||
@ -520,8 +520,8 @@ alignas(16) u8 gbaGpuInitList[1136] =
|
|||||||
// 76 @0992 GPUREG_FIXEDATTRIB_DATA0 0,3e10,3e6800
|
// 76 @0992 GPUREG_FIXEDATTRIB_DATA0 0,3e10,3e6800
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x33, 0x02, 0x2f, 0x80,
|
0x33, 0x02, 0x2f, 0x80,
|
||||||
0x10, 0x3e, 0x00, 0x00,
|
0x10, 0x3e, 0x00, 0x00, // <---- 1000 003e10改为003e60
|
||||||
0x00, 0x68, 0x3e, 0x00,
|
0x00, 0x68, 0x3e, 0x00, // <---- 1004 3e6800改为3de000
|
||||||
|
|
||||||
// 77 @1008 GPUREG_FIXEDATTRIB_DATA0 3f00003e,46e0,434000
|
// 77 @1008 GPUREG_FIXEDATTRIB_DATA0 3f00003e,46e0,434000
|
||||||
0x3e, 0x00, 0x00, 0x3f,
|
0x3e, 0x00, 0x00, 0x3f,
|
||||||
@ -545,7 +545,7 @@ alignas(16) u8 gbaGpuInitList[1136] =
|
|||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x33, 0x02, 0x2f, 0x80,
|
0x33, 0x02, 0x2f, 0x80,
|
||||||
0x00, 0x3f, 0x00, 0x00,
|
0x00, 0x3f, 0x00, 0x00,
|
||||||
0x00, 0x68, 0x3e, 0x00,
|
0x00, 0x68, 0x3e, 0x00, // <---- 1068 3e6800改为3de000
|
||||||
|
|
||||||
// 81 @1072 GPUREG_START_DRAW_FUNC0 1
|
// 81 @1072 GPUREG_START_DRAW_FUNC0 1
|
||||||
0x01, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00,
|
||||||
@ -731,7 +731,7 @@ alignas(16) u8 gbaGpuList2[448] =
|
|||||||
// 20 @0272 GPUREG_FIXEDATTRIB_DATA0 0,3e10,0
|
// 20 @0272 GPUREG_FIXEDATTRIB_DATA0 0,3e10,0
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x33, 0x02, 0x2f, 0x80,
|
0x33, 0x02, 0x2f, 0x80,
|
||||||
0x10, 0x3e, 0x00, 0x00,
|
0x10, 0x3e, 0x00, 0x00, // <---- 280 003e10改为003e60
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
// 21 @0288 GPUREG_FIXEDATTRIB_DATA0 3f00003e,0,477c00
|
// 21 @0288 GPUREG_FIXEDATTRIB_DATA0 3f00003e,0,477c00
|
||||||
@ -743,8 +743,8 @@ alignas(16) u8 gbaGpuList2[448] =
|
|||||||
// 22 @0304 GPUREG_FIXEDATTRIB_DATA0 0,3e10,3e6800
|
// 22 @0304 GPUREG_FIXEDATTRIB_DATA0 0,3e10,3e6800
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x33, 0x02, 0x2f, 0x80,
|
0x33, 0x02, 0x2f, 0x80,
|
||||||
0x10, 0x3e, 0x00, 0x00,
|
0x10, 0x3e, 0x00, 0x00, // <---- 312 003e10改为003e60
|
||||||
0x00, 0x68, 0x3e, 0x00,
|
0x00, 0x68, 0x3e, 0x00, // <---- 316 3e6800改为3de000
|
||||||
|
|
||||||
// 23 @0320 GPUREG_FIXEDATTRIB_DATA0 3f00003e,46e0,434000
|
// 23 @0320 GPUREG_FIXEDATTRIB_DATA0 3f00003e,46e0,434000
|
||||||
0x3e, 0x00, 0x00, 0x3f,
|
0x3e, 0x00, 0x00, 0x3f,
|
||||||
@ -768,7 +768,7 @@ alignas(16) u8 gbaGpuList2[448] =
|
|||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x33, 0x02, 0x2f, 0x80,
|
0x33, 0x02, 0x2f, 0x80,
|
||||||
0x00, 0x3f, 0x00, 0x00,
|
0x00, 0x3f, 0x00, 0x00,
|
||||||
0x00, 0x68, 0x3e, 0x00,
|
0x00, 0x68, 0x3e, 0x00, // <---- 380 3e6800改为3de000
|
||||||
|
|
||||||
// 27 @0384 GPUREG_START_DRAW_FUNC0 1
|
// 27 @0384 GPUREG_START_DRAW_FUNC0 1
|
||||||
0x01, 0x00, 0x00, 0x00,
|
0x01, 0x00, 0x00, 0x00,
|
||||||
@ -803,35 +803,74 @@ alignas(16) u8 gbaGpuList2[448] =
|
|||||||
0x10, 0x00, 0x0f, 0x00
|
0x10, 0x00, 0x0f, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define LB_INDEX1 (944/4)
|
||||||
|
#define RB_INDEX1 (976/4)
|
||||||
|
#define LT_INDEX1 (1008/4)
|
||||||
|
#define RT_INDEX1 (1040/4)
|
||||||
|
|
||||||
|
#define LB_INDEX2 (256/4)
|
||||||
|
#define RB_INDEX2 (288/4)
|
||||||
|
#define LT_INDEX2 (320/4)
|
||||||
|
#define RT_INDEX2 (352/4)
|
||||||
|
|
||||||
|
static void patchCoord( u32 *initarr, u32 *updatearr )
|
||||||
|
{
|
||||||
|
initarr[LB_INDEX1] = updatearr[LB_INDEX2] = 0x3f00003e;
|
||||||
|
initarr[LB_INDEX1+2] = updatearr[LB_INDEX2+2] = 0x4440;
|
||||||
|
initarr[LB_INDEX1+3] = updatearr[LB_INDEX2+3] = 0;
|
||||||
|
|
||||||
|
initarr[RB_INDEX1] = updatearr[RB_INDEX2] = 0x3f00003e;
|
||||||
|
initarr[RB_INDEX1+2] = updatearr[RB_INDEX2+2] = 0x4440;
|
||||||
|
initarr[RB_INDEX1+3] = updatearr[RB_INDEX2+3] = 0x46e000;
|
||||||
|
|
||||||
|
initarr[LT_INDEX1] = updatearr[LT_INDEX2] = 0x3f00003e;
|
||||||
|
initarr[LT_INDEX1+2] = updatearr[LT_INDEX2+2] = 0x4690;
|
||||||
|
initarr[LT_INDEX1+3] = updatearr[LT_INDEX2+3] = 0;
|
||||||
|
|
||||||
|
initarr[RT_INDEX1] = updatearr[RT_INDEX2] = 0x3f00003e;
|
||||||
|
initarr[RT_INDEX1+2] = updatearr[RT_INDEX2+2] = 0x4690;
|
||||||
|
initarr[RT_INDEX1+3] = updatearr[RT_INDEX2+3] = 0x46e000;
|
||||||
|
}
|
||||||
|
|
||||||
void patchGbaGpuCmdList(u8 scaleType)
|
void patchGbaGpuCmdList(u8 scaleType)
|
||||||
{
|
{
|
||||||
|
// 73 75 77 79 | 19 21 23 25 coord
|
||||||
|
// 74 76 78 80 | 20 22 24 26 texuv
|
||||||
if(scaleType == 0u || scaleType == 3u)
|
if(scaleType == 0u || scaleType == 3u)
|
||||||
{
|
{
|
||||||
gbaGpuInitList[958] = 0x45u;
|
/* // 这部分修改quad坐标,可以干掉了!
|
||||||
gbaGpuInitList[968] = 0x60u;
|
gbaGpuInitList[958] = 0x45u; // 73
|
||||||
gbaGpuInitList[989] = 0x40u;
|
gbaGpuInitList[989] = 0x40u; // 75
|
||||||
gbaGpuInitList[1000] = 0x60u;
|
gbaGpuInitList[1016] = 0x40u; // 77
|
||||||
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u;
|
gbaGpuInitList[1022] = 0x45u; // 77
|
||||||
gbaGpuInitList[1016] = 0x40u;
|
gbaGpuInitList[1048] = 0x40u; // 79
|
||||||
gbaGpuInitList[1022] = 0x45u;
|
gbaGpuInitList[1053] = 0x40u; // 79
|
||||||
gbaGpuInitList[1048] = 0x40u;
|
|
||||||
gbaGpuInitList[1053] = 0x40u;
|
|
||||||
*((u32*)&gbaGpuInitList[1068]) = 0x003DE000u;
|
|
||||||
|
|
||||||
gbaGpuList2[270] = 0x45u;
|
gbaGpuList2[270] = 0x45u; // 19
|
||||||
gbaGpuList2[280] = 0x60u;
|
gbaGpuList2[301] = 0x40u; // 21
|
||||||
gbaGpuList2[301] = 0x40u;
|
gbaGpuList2[328] = 0x40u; // 23
|
||||||
gbaGpuList2[312] = 0x60u;
|
gbaGpuList2[334] = 0x45u; // 23
|
||||||
*((u32*)&gbaGpuList2[316]) = 0x003DE000u;
|
gbaGpuList2[360] = 0x40u; // 25
|
||||||
gbaGpuList2[328] = 0x40u;
|
gbaGpuList2[365] = 0x40u; // 25
|
||||||
gbaGpuList2[334] = 0x45u;
|
*/
|
||||||
gbaGpuList2[360] = 0x40u;
|
patchCoord( gbaGpuInitList, gbaGpuList2 );
|
||||||
gbaGpuList2[365] = 0x40u;
|
|
||||||
*((u32*)&gbaGpuList2[380]) = 0x003DE000u;
|
// 以下8行代码修正纹理坐标
|
||||||
|
gbaGpuInitList[968] = 0x60u; // 74
|
||||||
|
gbaGpuInitList[1000] = 0x60u; // 76
|
||||||
|
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u; // 76
|
||||||
|
*((u32*)&gbaGpuInitList[1068]) = 0x003DE000u; // 80
|
||||||
|
|
||||||
|
gbaGpuList2[280] = 0x60u; // 20
|
||||||
|
gbaGpuList2[312] = 0x60u; // 22
|
||||||
|
*((u32*)&gbaGpuList2[316]) = 0x003DE000u; // 22
|
||||||
|
*((u32*)&gbaGpuList2[380]) = 0x003DE000u; // 26
|
||||||
}
|
}
|
||||||
else if(scaleType == 1u)
|
else if(scaleType == 1u)
|
||||||
{
|
{
|
||||||
gbaGpuInitList[572] = 0x02u;
|
gbaGpuInitList[572] = 0x02u; // 49
|
||||||
|
|
||||||
|
// 以下8行代码修正纹理坐标
|
||||||
gbaGpuInitList[968] = 0x60u;
|
gbaGpuInitList[968] = 0x60u;
|
||||||
gbaGpuInitList[1000] = 0x60u;
|
gbaGpuInitList[1000] = 0x60u;
|
||||||
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u;
|
*((u32*)&gbaGpuInitList[1004]) = 0x003DE000u;
|
||||||
|
@ -689,14 +689,14 @@ static void gbaGfxHandler(void *args)
|
|||||||
// 地址0x18180000保存的是400x240大小的贴图数据rgb888(序列:↑↘↑)
|
// 地址0x18180000保存的是400x240大小的贴图数据rgb888(序列:↑↘↑)
|
||||||
// 地址0x18200000保存的是512x512大小的GBA的240x160贴图数据(序列:→↙→)
|
// 地址0x18200000保存的是512x512大小的GBA的240x160贴图数据(序列:→↙→)
|
||||||
// 所以GPU做的事情就是将18200000的数据逆时针旋转90°
|
// 所以GPU做的事情就是将18200000的数据逆时针旋转90°
|
||||||
/*if( g_oafConfig.scaler == 0 )
|
if( g_oafConfig.scaler == 0 ) // 上屏无缩放
|
||||||
{
|
{
|
||||||
int base_offset = 96; // 3ds高240, gba高160,居中需要平移40个像素,rgb888每个像素3字节,共120字节
|
int base_offset = 96; // 3ds高240, gba高160,居中需要平移40个像素,rgb888每个像素3字节,共120字节
|
||||||
// 但是,gpu的transfer engine只支持16字节对齐的地址。所以只能选择16和3的公约数,就是48,96,144,192,240
|
// 但是,gpu的transfer engine只支持16字节对齐的地址。所以只能选择16和3的公约数,就是48,96,144,192,240
|
||||||
GX_displayTransfer((u32*)(0x18180000 + 16*240*3), 368u<<16 | 240u,
|
GX_displayTransfer((u32*)(0x18180000 + 16*240*3), 368u<<16 | 240u,
|
||||||
GFX_getFramebuffer(SCREEN_TOP) + 16*240*3 + base_offset, 368u<<16 | 240u, 1u<<12 | 1u<<8);
|
GFX_getFramebuffer(SCREEN_TOP) + 16*240*3 + base_offset, 368u<<16 | 240u, 1u<<12 | 1u<<8);
|
||||||
}
|
}
|
||||||
else */if( g_oafConfig.scaler == 3 )//下屏无缩放
|
else if( g_oafConfig.scaler == 3 )//下屏无缩放
|
||||||
{
|
{
|
||||||
int base_offset = 16*240*3;
|
int base_offset = 16*240*3;
|
||||||
GX_displayTransfer((u32*)(0x18180000), 320u<<16 | 240u,
|
GX_displayTransfer((u32*)(0x18180000), 320u<<16 | 240u,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user