From 6034261796ab7e4d9881c5d23b940c427e9cb6ec Mon Sep 17 00:00:00 2001 From: yosiokat Date: Fri, 16 Nov 2007 03:34:45 +0000 Subject: [PATCH] =?UTF-8?q?Nintendo=E3=83=AD=E3=82=B4=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E5=87=A6=E7=90=86=E3=81=AE=E6=95=B4=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@192 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/components/hyena.TWL/hyena.lcf.template | 10 - build/components/hyena.TWL/hyena.lsf | 2 + .../sysmenu/ARM9/src/ninLogoFunc.c | 36 ++-- .../Launcher/ARM9/src/Logo/logoData.c | 179 +++--------------- .../Launcher/ARM9/src/Logo/logoDemo.c | 1 + build/systemMenu_RED/Launcher/ARM9/src/main.c | 1 + .../sysmenu/sysmenu_lib/ARM9/sysmenu_api.h | 8 +- 7 files changed, 63 insertions(+), 174 deletions(-) diff --git a/build/components/hyena.TWL/hyena.lcf.template b/build/components/hyena.TWL/hyena.lcf.template index 42432695..356e74a0 100644 --- a/build/components/hyena.TWL/hyena.lcf.template +++ b/build/components/hyena.TWL/hyena.lcf.template @@ -30,7 +30,6 @@ MEMORY (RWXO): ORIGIN = , LENGTH = 0x0 > - arena.MAIN (RW) : ORIGIN = AFTER(,), LENGTH = 0x0 check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > @@ -516,15 +515,6 @@ SECTIONS - ############################ ARENA ################################## - .arena.MAIN: - { - . = ALIGN(4); - SDK_SECTION_ARENA_START =.; - - } > arena.MAIN - - ############################ OVERLAYDEFS ############################ .F: { diff --git a/build/components/hyena.TWL/hyena.lsf b/build/components/hyena.TWL/hyena.lsf index bc4fa200..dcd3e8e3 100644 --- a/build/components/hyena.TWL/hyena.lsf +++ b/build/components/hyena.TWL/hyena.lsf @@ -55,6 +55,7 @@ Autoload WRAM librtc_sp.TWL$(CODEGEN).a \ libwvr_sp.TWL$(CODEGEN).a \ libaes_sp.TWL$(CODEGEN).a \ + $(USE_CRYPTO_LIBS) \ $(ISDBG_LIBS) Library libsdio_hcd_twl.TWL$(CODEGEN).a \ @@ -81,4 +82,5 @@ Ltdautoload LTDMAIN Object * (.ltdmain) Library libfatfs_sp.TWL$(CODEGEN).a + Library librompatch_sp.TWL$(CODEGEN).a } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c b/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c index d0c811e4..b2bd1733 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c @@ -35,7 +35,11 @@ static u32 MEMBm_WordStreamFunc( const u8 *pDevice ); // global variable------------------------------------------------------- // static variable------------------------------------------------------- -static MIUnpackBitsParam Nin_UnPackBitsParam2 = { (8 * 8 / 2) * ( 7 * 2 ), 1, 4, 0, 0 }; +static MIUnpackBitsParam Nin_UnPackBitsParam2 = { (8 * 8 / 2) * ( 7 * 2 ), + 1, + 4, // カラーbit数(4=4bit=16色, 8=8bit=256色) + 0, + 0 }; // const data------------------------------------------------------------ static const u8 Nin_Char_Diff_Huff_Table2[]={ @@ -73,24 +77,32 @@ BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ) // Nintendoロゴデータの展開ルーチン(OBJ2Dマップモードで展開) // ※tempBuffpには、0x700byte必要です。 -void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ) +void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ) { u32 work[ 0x100 / sizeof(u32) ]; - - Nin_UnPackBitsParam2.destOffset = color - 1; - UnCompNintendoLogo2( pLogoData, (u16 *)pTempBuffer, work ); - MI_CpuCopyFast( (u16 *)( (u32)pTempBuffer + 0 ), pDst + 0x0000 / sizeof(u16), 0x1a0 ); - MI_CpuCopyFast( (u16 *)( (u32)pTempBuffer + 0x1a0), pDst + 0x0400 / sizeof(u16), 0x1a0 ); + u16 *pBuffer = SYSM_Alloc( 0x700 ); + if( pBuffer == NULL ) { + OS_Panic( "memory allocation failed.\n" ); + } + Nin_UnPackBitsParam2.destOffset = paletteColorIndex - 1; + UnCompNintendoLogo2( pLogoData, (u16 *)pBuffer, work ); + MI_CpuCopy16( (u16 *)( (u32)pBuffer + 0 ), pDst + 0x0000 / sizeof(u16), 0x1a0 ); + MI_CpuCopy16( (u16 *)( (u32)pBuffer + 0x1a0), pDst + 0x0400 / sizeof(u16), 0x1a0 ); + SYSM_Free( pBuffer ); } -void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ) +void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ) { u32 work[ 0x100 / sizeof(u32) ]; - - Nin_UnPackBitsParam2.destOffset = color - 1; - UnCompNintendoLogo2( pLogoData, (u16 *)pTempBuffer, work ); - MI_CpuCopyFast( (u16 *)pTempBuffer, pDst, 0x340 ); + u16 *pBuffer = SYSM_Alloc( 0x700 ); + if( pBuffer == NULL ) { + OS_Panic( "memory allocation failed.\n" ); + } + Nin_UnPackBitsParam2.destOffset = paletteColorIndex - 1; + UnCompNintendoLogo2( pLogoData, (u16 *)pBuffer, work ); + MI_CpuCopy16( (u16 *)pBuffer, pDst, 0x340 ); + SYSM_Free( pBuffer ); } /* UnCompNintendoLogo2ワーク内訳 diff --git a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoData.c b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoData.c index a0466924..4c42364c 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoData.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoData.c @@ -19,70 +19,17 @@ #include "misc.h" // define data----------------------------------------------------------- -#define NIN_LOGO_LENGTH 0x9c // Nintendoロゴデータサイズ - -#define OAM_OBJ_BLEND 0x00000400 // OBJ半透明モード -#define OAM_SIZE_64x32 0xc0004000 // OBJ 64x32ドット -#define OAM_COLOR_256 0x00002000 // 256色 選択 -#define OAM_AFFINE_NONE 0x00000000 // アフィン無効モード -#define OAM_V_POS_SHIFT 0 -#define OAM_H_POS_SHIFT 16 -#define OAM_AFFINE_NO_SHIFT 25 -#define OAM_PRIORITY_SHIFT 10 -#define OAM_PLTT_SHIFT 12 - // extern data----------------------------------------------------------- // function's prototype-------------------------------------------------- void LoadLogoData( void ); -static void UnCompNintendoLogo( u16 *NintendoLogoDatap, u16 *dstp, u32 *temp ); -static void SVC_DiffUnFilter16_16( u16 *srcp,u16 *dstp ); -static s32 MEMB_InitFunc( const u8 *devicep, void *ramp, const void *paramp ); -static s32 MEMB_TerminateFunc( const u8 *devicep ); -static u8 MEMB_ByteStreamFunc( const u8 *devicep ); -static u32 MEMB_WordStreamFunc( const u8 *devicep ); // global variable------------------------------------------------------- // static variable------------------------------------------------------- // const data------------------------------------------------------------ -const u32 OamLogoData[ 2 ][ 2 ] = { - { - OAM_OBJ_BLEND | OAM_SIZE_64x32 | OAM_AFFINE_NONE | OAM_COLOR_256 | - 71 << OAM_H_POS_SHIFT | - 88 << OAM_V_POS_SHIFT | - 0 << OAM_AFFINE_NO_SHIFT, - 0 << 1 | 5 << OAM_PLTT_SHIFT | 2 << OAM_PRIORITY_SHIFT - }, - - { - OAM_OBJ_BLEND | OAM_SIZE_64x32 | OAM_AFFINE_NONE | OAM_COLOR_256 | - 71 + 64 << OAM_H_POS_SHIFT | - 88 << OAM_V_POS_SHIFT | - 0 << OAM_AFFINE_NO_SHIFT, - 8 << 1 | 5 << OAM_PLTT_SHIFT | 2 << OAM_PRIORITY_SHIFT - }, -}; - -static const MIReadStreamCallbacks memb_ifp={ - MEMB_InitFunc, - MEMB_TerminateFunc, - MEMB_ByteStreamFunc, - NULL, - MEMB_WordStreamFunc, -}; - -static const MIUnpackBitsParam Nin_UnPackBitsParam={ - (8*8/2)*( 7*2), 1, 8, 0x1e, 0 -}; - -static const u8 Nin_Char_Diff_Huff_Table[] = { - 0x24,0xd4,0x00,0x00, - 0x0f,0x40,0x00,0x00,0x00,0x01,0x81,0x82,0x82,0x83,0x0f,0x83,0x0c,0xc3,0x03,0x83, - 0x01,0x83,0x04,0xc3,0x08,0x0e,0x02,0xc2,0x0d,0xc2,0x07,0x0b,0x06,0x0a,0x05,0x09, -}; static const u8 Nin_Char_Diff_Huff[] ATTRIBUTE_ALIGN( 2 ) = { 0x24, 0xff, 0xae, 0x51, 0x69, 0x9a, 0xa2, 0x21, 0x3d, 0x84, 0x82, 0x0a, 0x84, 0xe4, 0x09, 0xad, @@ -103,101 +50,37 @@ static const u8 Nin_Char_Diff_Huff[] ATTRIBUTE_ALIGN( 2 ) = { // ============================================================================ void LoadLogoData(void) { - u32 temp[ 0x500 / sizeof(u32) ]; - u16 *pBuff = NNS_FndAllocFromAllocator( &g_allocator, 0x1000 ); - if( pBuff == NULL ) { - OS_TPrintf( " %s : memory allocate error.\n", __FUNCTION__ ); - return; - } - MI_CpuClear32( pBuff, 0x1000 ); - - UnCompNintendoLogo( (u16 *)Nin_Char_Diff_Huff, pBuff, temp ); // NintendoロゴをpBuffに展開 - MI_CpuCopy32( pBuff, (u32 *)HW_OBJ_VRAM, 0x340 ); // OBJ-VRAMにロード - MI_CpuCopy32( (void *)( (u32)pBuff + 0x340 ), (u32 *)( HW_OBJ_VRAM + 0x400 ), 8*8*13 ); - - *(vu16 *)( HW_OBJ_PLTT + 0x3e ) = 0x0000; // OBJパレットセット + *(vu16 *)( HW_OBJ_PLTT + 0x1e ) = 0x7c00; // OBJパレットセット *(vu16 *)HW_BG_PLTT = 0xffff; // バックドロップを「白」にする。 - MI_CpuCopy32( OamLogoData, (u32 *)HW_OAM, sizeof(OamLogoData) ); // Nintendoロゴ用OAMデータセット - NNS_FndFreeToAllocator( &g_allocator, pBuff ); + SYSM_LoadNintendoLogo2D( (u16 *)Nin_Char_Diff_Huff, (u16 *)( HW_OBJ_VRAM + 0x0000 ), 0xf ); + + G2_SetOBJAttr( + (GXOamAttr *)HW_OAM, + 71, + 88, + 2, + GX_OAM_MODE_NORMAL, + FALSE, + GX_OAM_EFFECT_NONE, + GX_OAM_SHAPE_64x32, + GX_OAM_COLORMODE_16, + 0, // charNo. + 0, // paletteNo. + 0 + ); + G2_SetOBJAttr( + (GXOamAttr *)HW_OAM + 1, + 71 + 64, + 88, + 2, + GX_OAM_MODE_NORMAL, + FALSE, + GX_OAM_EFFECT_NONE, + GX_OAM_SHAPE_64x32, + GX_OAM_COLORMODE_16, + 8, // charNo. + 0, // paletteNo. + 0 + ); } - - -// Nintendoロゴ展開ルーチン (r0=ロゴ圧縮データ r1=展開先アドレス) -#include - -asm void UnCompNintendoLogo(u16 *NintendoLogoDatap, u16 *dstp, u32 *temp) -{ - push {r0-r2,r4, lr} - - ldr r0, =Nin_Char_Diff_Huff_Table - mov r2, #0x0e - lsl r2, r2, #8 - add r1, r1, r2 // 引数1+0xe00 - mov r4, r1 - mov r2, #36 - bl MIi_CpuCopy16 // Nintendoロゴの圧縮テーブル部分のみをコピーしてくる - - ldr r0, [sp, #0] // 引数0(NinLogoBak[36]) - mov r2, #36 - add r1, r4, r2 // 引数1+0xe00+36 - mov r2, #NIN_LOGO_LENGTH - bl MIi_CpuCopy16 // 引数0からNintendoロゴデータ本体をコピーしてくる - - mov r0, r4 // 引数1+0xe00 - ldr r1, [sp, #4] // 引数1 - ldr r2, [sp, #8] // 引数2 - ldr r3, =memb_ifp - bl SVC_UncompressHuffmanFromDevice // ハフマン展開 - - ldr r0, [sp, #4] - ldr r2, =0x0000d082 - str r2, [r0,#0] - - mov r1, r4 // 引数1+0xe00 - bl SVC_DiffUnFilter16_16 // Diff展開 - - mov r0, r4 // 引数1+0xe00 - ldr r1, [sp, #4] // 引数1 - ldr r2, =Nin_UnPackBitsParam - bl SVC_UnpackBits // ビット展開 - - pop {r0-r2,r4, pc} -} - - -// 差分フィルタ展開システムコール(16Bit→16Bit) (r0=Srcp, r1=Destp) -static asm void SVC_DiffUnFilter16_16(u16 *srcp,u16 *dstp) -{ - swi 24 - bx lr -} -#include - - -// ============================================================================ -// バイトアクセス可能メモリ用アクセスルーチン群 -// ============================================================================ -static s32 MEMB_InitFunc(const u8 *devicep, void *ramp, const void *paramp) -{ -#pragma unused(ramp) - if(paramp) return (s32)MEMB_WordStreamFunc(devicep); - else return 0; -} - -static s32 MEMB_TerminateFunc(const u8 *devicep) -{ -#pragma unused(devicep) - return 0; -} - -static u8 MEMB_ByteStreamFunc(const u8 *devicep) -{ - return *devicep; -} - -static u32 MEMB_WordStreamFunc(const u8 *devicep) -{ - return *(u32 *)devicep; -} - diff --git a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c index 91467d73..2426ed88 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c @@ -16,6 +16,7 @@ *---------------------------------------------------------------------------*/ #include "logoDemo.h" +#include "misc.h" // define data-------------------------------------------------------- diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index f433fbfa..70969063 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -64,6 +64,7 @@ void TwlMain( void ) FS_Init( FS_DMA_NOT_USE ); GX_Init(); + PM_Init(); TP_Init(); RTC_Init(); diff --git a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h index 8dec7b0c..fadd8083 100644 --- a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h @@ -68,8 +68,8 @@ typedef enum AuthResult { // global variable------------------------------------------------------ -extern void *(*SYSM_Alloc)( u32 size ); -extern void (*SYSM_Free)( void *ptr ); +extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用 +extern void (*SYSM_Free)( void *ptr ); // 同上 // function------------------------------------------------------------- @@ -106,8 +106,8 @@ extern void SYSM_VerifyAndRecoveryNTRSettings( void ); // Nintendoロゴ制御 extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック -extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ); // NintendoロゴデータをOBJ_2D形式でロード(pTempBufferには0x700bytes必要) -extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ); // NintendoロゴデータをOBJ_1D形式でロード(同上) +extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_2D形式でロード(pTempBufferには0x700bytes必要) +extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_1D形式でロード(同上) // RTC制御 extern BOOL SYSM_CheckRTCDate( RTCDate *pDate ); // 日付が正常かチェック