mirror of
https://gitee.com/anod/open_agb_firm.git
synced 2025-05-06 05:44:11 +08:00
明文改cmdlist太晦涩了,变成计算后更改
This commit is contained in:
parent
32c763d8b7
commit
4d9d006bf7
@ -19,7 +19,6 @@
|
||||
#include "types.h"
|
||||
#include "drivers/cache.h"
|
||||
|
||||
|
||||
// 360x240 without scaling, no filter.
|
||||
alignas(16) u8 gbaGpuInitList[1136] =
|
||||
{
|
||||
@ -803,33 +802,64 @@ alignas(16) u8 gbaGpuList2[448] =
|
||||
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_INDEX1 (944)
|
||||
#define RB_INDEX1 (976)
|
||||
#define LT_INDEX1 (1008)
|
||||
#define RT_INDEX1 (1040)
|
||||
|
||||
#define LB_INDEX2 (256/4)
|
||||
#define RB_INDEX2 (288/4)
|
||||
#define LT_INDEX2 (320/4)
|
||||
#define RT_INDEX2 (352/4)
|
||||
#define LB_INDEX2 (256)
|
||||
#define RB_INDEX2 (288)
|
||||
#define LT_INDEX2 (320)
|
||||
#define RT_INDEX2 (352)
|
||||
|
||||
static void patchCoord( u32 *initarr, u32 *updatearr )
|
||||
static u32 tof24( u32 d )
|
||||
{
|
||||
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;
|
||||
if( d == 0 ) return 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;
|
||||
u32 c = 0, o = 1, r = 0;
|
||||
// exp
|
||||
for( ; 2*o <= d; o <<= 1 ) ++c;
|
||||
o = 1<<c;
|
||||
d -= o;
|
||||
c += 63;//0b111111
|
||||
|
||||
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;
|
||||
// decimals
|
||||
for(int i=15; d > 0 && i >= 0; --i ){
|
||||
o >>= 1;
|
||||
if( d >= o ) {
|
||||
r |= 1<<i;
|
||||
d -= o;
|
||||
}
|
||||
}
|
||||
return c<<16 | r;
|
||||
}
|
||||
|
||||
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;
|
||||
static void xyToWzyx( u16 x, u16 y, u32 *p )
|
||||
{
|
||||
u32 f24x = tof24(x);
|
||||
u32 f24y = tof24(y);
|
||||
p[0] = 0x3f00003e;
|
||||
// p[1] 是GPU的寄存器
|
||||
p[2] = f24y >> 8;
|
||||
p[3] = f24y<<24 | f24x;
|
||||
}
|
||||
|
||||
static void setQuadRect( u16 left, u16 right, u16 top, u16 bottom )
|
||||
{
|
||||
if( left >= right || right > 400u ) return;
|
||||
if( bottom >= top || top > 240u ) return;
|
||||
|
||||
xyToWzyx(left, bottom, (u32*)&gbaGpuInitList[LB_INDEX1]);
|
||||
xyToWzyx(left, bottom, (u32*)&gbaGpuList2[LB_INDEX2]);
|
||||
|
||||
xyToWzyx(right, bottom, (u32*)&gbaGpuInitList[RB_INDEX1]);
|
||||
xyToWzyx(right, bottom, (u32*)&gbaGpuList2[RB_INDEX2]);
|
||||
|
||||
xyToWzyx(left, top, (u32*)&gbaGpuInitList[LT_INDEX1]);
|
||||
xyToWzyx(left, top, (u32*)&gbaGpuList2[LT_INDEX2]);
|
||||
|
||||
xyToWzyx(right, top, (u32*)&gbaGpuInitList[RT_INDEX1]);
|
||||
xyToWzyx(right, top, (u32*)&gbaGpuList2[RT_INDEX2]);
|
||||
}
|
||||
|
||||
void patchGbaGpuCmdList(u8 scaleType)
|
||||
@ -853,7 +883,7 @@ void patchGbaGpuCmdList(u8 scaleType)
|
||||
gbaGpuList2[360] = 0x40u; // 25
|
||||
gbaGpuList2[365] = 0x40u; // 25
|
||||
*/
|
||||
patchCoord( gbaGpuInitList, gbaGpuList2 );
|
||||
setQuadRect( 0, 240, 200, 40 );
|
||||
|
||||
// 以下8行代码修正纹理坐标
|
||||
gbaGpuInitList[968] = 0x60u; // 74
|
||||
|
Loading…
x
Reference in New Issue
Block a user