Compare commits

...

14 Commits

6 changed files with 57 additions and 24 deletions

13
include/arm11/anopatch.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef __ANO_PATCH_H__
#define __ANO_PATCH_H__
#include "types.h"
#define INPUT(type) type
#define OUTPUT(type) type*
extern void setBrightness(
INPUT(u16) brightness
);
#endif//__ANO_PATCH_H__

12
source/arm11/anopatch.c Normal file
View File

@ -0,0 +1,12 @@
// 因为原作者对libn3ds做出了许多大调整可能去掉了一些
// 原来使用的代码,但我修改的内容又用到了,所以我就得
// 在这里自己实现一份
#include "arm11/anopatch.h"
#include "arm11/drivers/lcd.h"
void setBrightness(u16 brightness)
{
LcdRegs *const lcd = getLcdRegs();
lcd->abl0.bl_pwm_duty = brightness;
lcd->abl1.bl_pwm_duty = brightness;
}

View File

@ -6,6 +6,7 @@
// @MERGE 231006 START
#include "drivers/lgy11.h"
// @MERGE 231006 END
#include "arm11/anopatch.h"
#include "arm11/keyremix.h"
key_remix_t g_keyremixConfig[KEY_REMIX_LIMIT];
@ -43,7 +44,7 @@ static void update_brightness()
val_3dslider = val;
backlightNow = 48000 * val / 256;
backlightNow = (backlightNow%50) > 50 ? 101+backlightNow/100 : 100+backlightNow/100;
GFX_setBrightness(backlightNow, backlightNow);
setBrightness(backlightNow);
}
}

View File

@ -29,6 +29,7 @@
// @MERGE 231006 START
#include "oaf_error_codes.h"
// @MERGE 231006 END
#include "arm11/anopatch.h"
static void setBacklight(void)
{
@ -45,10 +46,10 @@ static void setBacklight(void)
backlightMin=20;
}
const u16 backlight = oafGetBacklightConfig();
if (backlight > backlightMax) GFX_setBrightness(backlightMax, backlightMax);
else if (backlight < backlightMin) GFX_setBrightness(backlightMin, backlightMin);
else GFX_setBrightness(backlight, backlight);
u16 backlight = oafGetBacklightConfig();
if (backlight > backlightMax) backlight = backlightMax;
else if (backlight < backlightMin) backlight = backlightMin;
setBrightness( backlight );
}
Result fReadSize( FHandle file, void *buff, unsigned size, uint32_t *readout )
@ -78,9 +79,9 @@ int main()
Result res = fMount(FS_DRIVE_SDMC);
bool direct_off = false;
if(res == RES_OK) res = oafParseConfigEarly();
GFX_init(GFX_BGR8, GFX_RGB565);
GFX_init(GFX_BGR8, GFX_BGR565, GFX_TOP_2D);
setBacklight();
consoleInit(SCREEN_BOT, NULL);
consoleInit(GFX_LCD_BOT, NULL);
//CODEC_init();
if(res == RES_OK && (res = oafInitAndRun(firm_path, &direct_off)) == RES_OK)

View File

@ -28,6 +28,8 @@
// @MERGE 231006 START
#include "drivers/lgy_common.h"
#include "drivers/lgy11.h"
#include "drivers/gx.h"
#include "drivers/lgycap.h"
// @MERGE 231006 END
#include "arm11/drivers/lgyfb.h"
#include "arm11/console.h"
@ -646,6 +648,9 @@ static void adjustGammaTableForGba(void)
const float lcdGamma = g_oafConfig.lcdGamma;
const float contrast = g_oafConfig.contrast;
const float brightness = g_oafConfig.brightness;
vu32 *const REG_LCD_PDC0_GTBL_FIFO = &getGxRegs()->pdc0.color_lut_data;
vu32 *const REG_LCD_PDC1_GTBL_FIFO = &getGxRegs()->pdc1.color_lut_data;
for(u32 i = 0; i < 256; i++)
{
// Credits for this algo go to Extrems.
@ -654,8 +659,8 @@ static void adjustGammaTableForGba(void)
1.0f / lcdGamma) * 255.0f;
// Same adjustment for red/green/blue.
REG_LCD_PDC0_GTBL_FIFO = res<<16 | res<<8 | res;
REG_LCD_PDC1_GTBL_FIFO = res<<16 | res<<8 | res;
*REG_LCD_PDC0_GTBL_FIFO = res<<16 | res<<8 | res;
*REG_LCD_PDC1_GTBL_FIFO = res<<16 | res<<8 | res;
}
}
@ -727,21 +732,21 @@ static void gbaGfxHandler(void *args)
int base_offset = 57600; // 3ds高240, gba高160居中需要平移40个像素rgb888每个像素3字节共120字节
// 但是gpu的transfer engine只支持16字节对齐的地址。所以只能选择16和3的公约数就是48,96,144,192,240
GX_displayTransfer((u32*)(0x18180000), 240u<<16 | 240u,
GFX_getFramebuffer(SCREEN_TOP) + base_offset, 240u<<16 | 240u, 1u<<12 | 1u<<8);
GFX_getBuffer(GFX_LCD_TOP, GFX_SIDE_LEFT) + base_offset, 240u<<16 | 240u, 1u<<12 | 1u<<8);
}
else GX_displayTransfer((u32*)(0x18180000), 400u<<16 | 240u,
GFX_getFramebuffer(SCREEN_TOP), 400u<<16 | 240u, 1u<<12 | 1u<<8);
GFX_getBuffer(GFX_LCD_TOP, GFX_SIDE_LEFT), 400u<<16 | 240u, 1u<<12 | 1u<<8);
}
else if( g_oafConfig.scaler == 3 )//下屏无缩放
{
int base_offset = 28800;
GX_displayTransfer((u32*)(0x18180000), 240u<<16 | 240u,
GFX_getFramebuffer(SCREEN_BOT) + base_offset, 240u<<16 | 240u, 1u<<12 | 1u<<8);
GFX_getBuffer(GFX_LCD_BOT, GFX_SIDE_LEFT) + base_offset, 240u<<16 | 240u, 1u<<12 | 1u<<8);
}
else GX_displayTransfer((u32*)(0x18180000 + 16*240*3), 368u<<16 | 240u,
GFX_getFramebuffer(SCREEN_TOP) + 16*240*3, 368u<<16 | 240u, 1u<<12 | 1u<<8);
GFX_getBuffer(GFX_LCD_TOP, GFX_SIDE_LEFT) + 16*240*3, 368u<<16 | 240u, 1u<<12 | 1u<<8);
GFX_waitForPPF();
GFX_swapFramebufs();
GFX_swapBuffers();
//if(hidKeysDown() == (KEY_Y | KEY_SELECT)) dumpFrameTex();
// @MERGE 231006 START
@ -948,7 +953,7 @@ KHandle setupFrameCapture(const u8 scaler)
0, 0, 0, 0, 0, 0, 0, 0
};
ScalerCfg gbaCfg;
LgyCapCfg gbaCfg;
gbaCfg.w = (is240x160 ? 240 : 360);
gbaCfg.h = (is240x160 ? 160 : 240);
gbaCfg.vLen = 6;
@ -972,7 +977,7 @@ KHandle setupFrameCapture(const u8 scaler)
memcpy(gbaCfg.hMatrix, &matrix[6 * 8], 6 * 8 * 2);
}
return LGYFB_init(&gbaCfg);
return LGYCAP_init(LGYCAP_DEV_TOP, &gbaCfg);
}
// @MERGE 231006 END
@ -1045,7 +1050,7 @@ Result oafInitAndRun( char *firm_path, bool *direct_off )
if(g_oafConfig.scaler == 0) // No borders for scaled modes.
{
// Abuse currently invisible frame buffer as temporary buffer.
void *const borderBuf = GFX_getFramebuffer(SCREEN_TOP);
void *const borderBuf = GFX_getBuffer(GFX_LCD_TOP, GFX_SIDE_LEFT);
if(fsQuickRead("border.bgr", borderBuf, 400 * 240 * 3) == RES_OK)
{
// Copy border in swizzled form to GPU render buffer.
@ -1057,8 +1062,8 @@ Result oafInitAndRun( char *firm_path, bool *direct_off )
else if( g_oafConfig.scaler == 3u )
{
memset(consoleGet()->frameBuffer, 0, 320*240*2);
GFX_setDoubleBuffering( SCREEN_BOT, true );
GFX_setFramebufFmt(GFX_BGR8, GFX_BGR8);
GFX_setDoubleBuffering( GFX_LCD_BOT, true );
GFX_setFormat(GFX_BGR8, GFX_BGR8, GFX_TOP_2D);
}
patchGbaGpuCmdList(g_oafConfig.scaler, use_border);
// @MERGE 231006 END
@ -1089,7 +1094,7 @@ void oafUpdate(void)
void oafFinish(void)
{
LGYFB_deinit();
LGYCAP_deinit(LGYCAP_DEV_TOP);
// @MERGE 231006 START
// if(g_frameReadyEvent != 0)
// {

View File

@ -3,6 +3,7 @@
#include <math.h>
#include "types.h"
#include "fsutil.h"
#include "arm11/anopatch.h"
#include "arm11/pages.h"
#include "arm11/drivers/mcu.h"
#include "arm11/fmt.h"
@ -253,7 +254,7 @@ atp_error_t use_config_page( OafConfig *g_oafConfig )
else if( res == ATP_SUCCESS )
{
if( prev->backlight != g_oafConfig->backlight )
GFX_setBrightness(g_oafConfig->backlight, g_oafConfig->backlight);
setBrightness(g_oafConfig->backlight);
}
return res;
@ -456,7 +457,7 @@ static atp_error_t handle_onoff_entry( acl_entryid_t id, acl_elemlen_t codelen,
// more than two address, should not overwrite values
else return DEFAULT_ONOFF_HANDLER;
atp_error_t res = atp_select( "选择此项目对应的设置", 3, select_onoff, NULL, targetval << 16 | id, 0, 0, item );
atp_error_t res = atp_select( "选择此项目对应的设置", 3, select_onoff, NULL, (atp_callerdata_t)(targetval << 16 | id), 0, 0, item );
if( res == ATP_SUCCESS && *item == 0 )
{
ee_snprintf( page_strbuf, sizeof(page_strbuf), "默认值:%d", targetval );
@ -858,7 +859,7 @@ atp_error_t use_keyremix_page( char *file )
else if( status == DISP_KMAP )
{
key_remix_t *cur = &g_keyremixConfig[position];
res = atp_select( "配置键位功能", REMIX_TYPE_COUNT, select_remixtype, NULL, cur->remix_type, 0, 0, &value );
res = atp_select( "配置键位功能", REMIX_TYPE_COUNT, select_remixtype, NULL, (atp_callerdata_t)cur->remix_type, 0, 0, &value );
if( res == ATP_SUCCESS )
{
if( cur->remix_type != value )
@ -900,7 +901,7 @@ atp_error_t use_keyremix_page( char *file )
}
}
if( keys_count == 1 ) res = atp_select("选择实机键位(单选)", 1, select_unikey, NULL, text, 0, 0, &value);
else res = atp_select( "选择实机键位(单选)", keys_count, select_hostkey, NULL, cur->device_keys, selected>keys_count?0:selected, 0, &value);
else res = atp_select( "选择实机键位(单选)", keys_count, select_hostkey, NULL, (atp_callerdata_t)cur->device_keys, selected>keys_count?0:selected, 0, &value);
if( res == ATP_SUCCESS )
{
cur->device_keys = value;