mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
Nintendoロゴデータ処理の整理。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@192 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
96de8ec173
commit
6034261796
@ -30,7 +30,6 @@ MEMORY
|
|||||||
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
|
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
|
||||||
<END.OVERLAYS>
|
<END.OVERLAYS>
|
||||||
|
|
||||||
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
|
|
||||||
check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check
|
check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check
|
||||||
|
|
||||||
binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
|
binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
|
||||||
@ -516,15 +515,6 @@ SECTIONS
|
|||||||
|
|
||||||
<END.OVERLAYS>
|
<END.OVERLAYS>
|
||||||
|
|
||||||
############################ ARENA ##################################
|
|
||||||
.arena.MAIN:
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
SDK_SECTION_ARENA_START =.;
|
|
||||||
|
|
||||||
} > arena.MAIN
|
|
||||||
|
|
||||||
|
|
||||||
############################ OVERLAYDEFS ############################
|
############################ OVERLAYDEFS ############################
|
||||||
.<PROPERTY.OVERLAYDEFS>F:
|
.<PROPERTY.OVERLAYDEFS>F:
|
||||||
{
|
{
|
||||||
|
|||||||
@ -55,6 +55,7 @@ Autoload WRAM
|
|||||||
librtc_sp.TWL$(CODEGEN).a \
|
librtc_sp.TWL$(CODEGEN).a \
|
||||||
libwvr_sp.TWL$(CODEGEN).a \
|
libwvr_sp.TWL$(CODEGEN).a \
|
||||||
libaes_sp.TWL$(CODEGEN).a \
|
libaes_sp.TWL$(CODEGEN).a \
|
||||||
|
$(USE_CRYPTO_LIBS) \
|
||||||
$(ISDBG_LIBS)
|
$(ISDBG_LIBS)
|
||||||
|
|
||||||
Library libsdio_hcd_twl.TWL$(CODEGEN).a \
|
Library libsdio_hcd_twl.TWL$(CODEGEN).a \
|
||||||
@ -81,4 +82,5 @@ Ltdautoload LTDMAIN
|
|||||||
|
|
||||||
Object * (.ltdmain)
|
Object * (.ltdmain)
|
||||||
Library libfatfs_sp.TWL$(CODEGEN).a
|
Library libfatfs_sp.TWL$(CODEGEN).a
|
||||||
|
Library librompatch_sp.TWL$(CODEGEN).a
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,7 +35,11 @@ static u32 MEMBm_WordStreamFunc( const u8 *pDevice );
|
|||||||
// global variable-------------------------------------------------------
|
// global variable-------------------------------------------------------
|
||||||
|
|
||||||
// static 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, // ƒJƒ‰<C692>[bit<69>”(4=4bit=16<31>F, 8=8bit=256<35>F)
|
||||||
|
0,
|
||||||
|
0 };
|
||||||
|
|
||||||
// const data------------------------------------------------------------
|
// const data------------------------------------------------------------
|
||||||
static const u8 Nin_Char_Diff_Huff_Table2[]={
|
static const u8 Nin_Char_Diff_Huff_Table2[]={
|
||||||
@ -73,24 +77,32 @@ BOOL SYSM_CheckNintendoLogo( u16 *pLogoData )
|
|||||||
|
|
||||||
// Nintendoロゴデータの展開ルーチン(OBJ2Dマップモードで展開)
|
// Nintendoロゴデータの展開ルーチン(OBJ2Dマップモードで展開)
|
||||||
// ※tempBuffpには、0x700byte必要です。
|
// ※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) ];
|
u32 work[ 0x100 / sizeof(u32) ];
|
||||||
|
u16 *pBuffer = SYSM_Alloc( 0x700 );
|
||||||
Nin_UnPackBitsParam2.destOffset = color - 1;
|
if( pBuffer == NULL ) {
|
||||||
UnCompNintendoLogo2( pLogoData, (u16 *)pTempBuffer, work );
|
OS_Panic( "memory allocation failed.\n" );
|
||||||
MI_CpuCopyFast( (u16 *)( (u32)pTempBuffer + 0 ), pDst + 0x0000 / sizeof(u16), 0x1a0 );
|
}
|
||||||
MI_CpuCopyFast( (u16 *)( (u32)pTempBuffer + 0x1a0), pDst + 0x0400 / sizeof(u16), 0x1a0 );
|
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) ];
|
u32 work[ 0x100 / sizeof(u32) ];
|
||||||
|
u16 *pBuffer = SYSM_Alloc( 0x700 );
|
||||||
Nin_UnPackBitsParam2.destOffset = color - 1;
|
if( pBuffer == NULL ) {
|
||||||
UnCompNintendoLogo2( pLogoData, (u16 *)pTempBuffer, work );
|
OS_Panic( "memory allocation failed.\n" );
|
||||||
MI_CpuCopyFast( (u16 *)pTempBuffer, pDst, 0x340 );
|
}
|
||||||
|
Nin_UnPackBitsParam2.destOffset = paletteColorIndex - 1;
|
||||||
|
UnCompNintendoLogo2( pLogoData, (u16 *)pBuffer, work );
|
||||||
|
MI_CpuCopy16( (u16 *)pBuffer, pDst, 0x340 );
|
||||||
|
SYSM_Free( pBuffer );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* UnCompNintendoLogo2ワーク内訳
|
/* UnCompNintendoLogo2ワーク内訳
|
||||||
|
|||||||
@ -19,70 +19,17 @@
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
// define data-----------------------------------------------------------
|
// 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-----------------------------------------------------------
|
// extern data-----------------------------------------------------------
|
||||||
|
|
||||||
// function's prototype--------------------------------------------------
|
// function's prototype--------------------------------------------------
|
||||||
void LoadLogoData( void );
|
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-------------------------------------------------------
|
// global variable-------------------------------------------------------
|
||||||
|
|
||||||
// static variable-------------------------------------------------------
|
// static variable-------------------------------------------------------
|
||||||
|
|
||||||
// const data------------------------------------------------------------
|
// 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 ) = {
|
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,
|
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)
|
void LoadLogoData(void)
|
||||||
{
|
{
|
||||||
u32 temp[ 0x500 / sizeof(u32) ];
|
*(vu16 *)( HW_OBJ_PLTT + 0x1e ) = 0x7c00; // OBJƒpƒŒƒbƒgƒZƒbƒg
|
||||||
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_BG_PLTT = 0xffff; // バックドロップを「白」にする。
|
*(vu16 *)HW_BG_PLTT = 0xffff; // バックドロップを「白」にする。
|
||||||
|
|
||||||
MI_CpuCopy32( OamLogoData, (u32 *)HW_OAM, sizeof(OamLogoData) ); // Nintendoロゴ用OAMデータセット
|
SYSM_LoadNintendoLogo2D( (u16 *)Nin_Char_Diff_Huff, (u16 *)( HW_OBJ_VRAM + 0x0000 ), 0xf );
|
||||||
NNS_FndFreeToAllocator( &g_allocator, pBuff );
|
|
||||||
|
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 <nitro/code16.h>
|
|
||||||
|
|
||||||
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 <nitro/codereset.h>
|
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// バイトアクセス可能メモリ用アクセスルーチン群
|
|
||||||
// ============================================================================
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "logoDemo.h"
|
#include "logoDemo.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
// define data--------------------------------------------------------
|
// define data--------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -64,6 +64,7 @@ void TwlMain( void )
|
|||||||
|
|
||||||
FS_Init( FS_DMA_NOT_USE );
|
FS_Init( FS_DMA_NOT_USE );
|
||||||
GX_Init();
|
GX_Init();
|
||||||
|
PM_Init();
|
||||||
TP_Init();
|
TP_Init();
|
||||||
RTC_Init();
|
RTC_Init();
|
||||||
|
|
||||||
|
|||||||
@ -68,8 +68,8 @@ typedef enum AuthResult {
|
|||||||
|
|
||||||
|
|
||||||
// global variable------------------------------------------------------
|
// global variable------------------------------------------------------
|
||||||
extern void *(*SYSM_Alloc)( u32 size );
|
extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
|
||||||
extern void (*SYSM_Free)( void *ptr );
|
extern void (*SYSM_Free)( void *ptr ); // 同上
|
||||||
|
|
||||||
// function-------------------------------------------------------------
|
// function-------------------------------------------------------------
|
||||||
|
|
||||||
@ -106,8 +106,8 @@ extern void SYSM_VerifyAndRecoveryNTRSettings( void );
|
|||||||
|
|
||||||
// Nintendoロゴ制御
|
// Nintendoロゴ制御
|
||||||
extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // 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_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_2D形式でロード(pTempBufferには0x700bytes必要)
|
||||||
extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ); // NintendoロゴデータをOBJ_1D形式でロード(同上)
|
extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_1D形式でロード(同上)
|
||||||
|
|
||||||
// RTC制御
|
// RTC制御
|
||||||
extern BOOL SYSM_CheckRTCDate( RTCDate *pDate ); // 日付が正常かチェック
|
extern BOOL SYSM_CheckRTCDate( RTCDate *pDate ); // 日付が正常かチェック
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user