mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ResetParamの設定及びリセット命令送信部分をライブラリ化
とりあえずIPLのローカルライブラリとしてコミット git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@289 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
66b043a3f4
commit
188d996469
@ -195,16 +195,6 @@ static void ReadResetParameter( void )
|
|||||||
{
|
{
|
||||||
MCU_GetFreeRegisters( 0, (u8 *)HW_RESET_PARAMETER_BUF, 1 );
|
MCU_GetFreeRegisters( 0, (u8 *)HW_RESET_PARAMETER_BUF, 1 );
|
||||||
|
|
||||||
/*
|
|
||||||
// ダイレクトブート用設定のテストコード
|
|
||||||
SYSMi_GetMCUFreeRegisterValue() = 1; // マイコンフリーレジスタ取得場所にホットスタートフラグをセット
|
|
||||||
SYSMi_GetResetParamAddr()->body.v1.bootTitleID = 0x000100015445534d;
|
|
||||||
SYSMi_GetResetParamAddr()->body.v1.flags = (BootFlags){TRUE, 0, TRUE, FALSE, FALSE, FALSE, 0};
|
|
||||||
MI_CpuCopyFast( SYSM_RESET_PARAM_MAGIC_CODE, (char *)&SYSMi_GetResetParamAddr()->header.magicCode, SYSM_RESET_PARAM_MAGIC_CODE_LEN);
|
|
||||||
SYSMi_GetResetParamAddr()->header.bodyLength = sizeof(ResetParamBody);
|
|
||||||
SYSMi_GetResetParamAddr()->header.crc16 = SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength );
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Hot/Coldスタート判定
|
// Hot/Coldスタート判定
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート
|
if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート
|
||||||
|
|||||||
@ -22,7 +22,7 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
|||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
SUBDIRS = sysmenu settings mb_loader acsign boot hotsw
|
SUBDIRS = sysmenu settings mb_loader acsign boot hotsw reset_param
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
49
build/libraries_sysmenu/reset_param/ARM9/Makefile
Normal file
49
build/libraries_sysmenu/reset_param/ARM9/Makefile
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#! make -f
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Project: TwlIPL
|
||||||
|
# File: Makefile
|
||||||
|
#
|
||||||
|
# Copyright 2007 Nintendo. All rights reserved.
|
||||||
|
#
|
||||||
|
# These coded instructions, statements, and computer programs contain
|
||||||
|
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
# Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
# not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
# in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
#
|
||||||
|
# $Date:: 2007-09-27#$
|
||||||
|
# $Rev: 1203 $
|
||||||
|
# $Author: yada $
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
TARGET_FIRM = SYSTEMMENU
|
||||||
|
TARGET_PLATFORM = TWL
|
||||||
|
TWL_ARCHGEN = LIMITED
|
||||||
|
TWL_PROC = ARM9
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SRCDIR = ./src
|
||||||
|
|
||||||
|
SRCS = reset_param.c
|
||||||
|
|
||||||
|
TARGET_LIB = libreset_param$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|
||||||
|
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
do-build: $(TARGETS)
|
||||||
|
|
||||||
|
include $(TWLIPL_ROOT)/build/buildtools/modulerules
|
||||||
|
|
||||||
|
|
||||||
|
#===== End of Makefile =====
|
||||||
|
|
||||||
77
build/libraries_sysmenu/reset_param/ARM9/src/reset_param.c
Normal file
77
build/libraries_sysmenu/reset_param/ARM9/src/reset_param.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: reset_param.c
|
||||||
|
|
||||||
|
Copyright 2007 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Date:: 2007-11-26#$
|
||||||
|
$Rev: 256 $
|
||||||
|
$Author: yosiokat $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <twl.h>
|
||||||
|
#include <sysmenu/reset_param/ARM9/reset_param.h>
|
||||||
|
|
||||||
|
// define data-------------------------------------------------------
|
||||||
|
#define RPi_RESET_PARAM_MAGIC_CODE "TRST"
|
||||||
|
#define RPi_RESET_PARAM_MAGIC_CODE_LEN 4
|
||||||
|
|
||||||
|
// リセットパラメータアドレスの取得(※ライブラリ向け)
|
||||||
|
#define RPi_GetResetParamAddr() ( (ResetParam *)0x02000100 )
|
||||||
|
|
||||||
|
|
||||||
|
// extern data-------------------------------------------------------
|
||||||
|
|
||||||
|
// function's prototype----------------------------------------------
|
||||||
|
static void RPi_DoHardwareReset( void );
|
||||||
|
|
||||||
|
// global variables--------------------------------------------------
|
||||||
|
|
||||||
|
// static variables--------------------------------------------------
|
||||||
|
|
||||||
|
// const data--------------------------------------------------------
|
||||||
|
|
||||||
|
// 安全のため、この関数はitcmに配置
|
||||||
|
#include <nitro/code32.h>
|
||||||
|
#include <twl/itcm_begin.h>
|
||||||
|
static void RPi_DoHardwareReset( void )
|
||||||
|
{
|
||||||
|
// リセット命令発行
|
||||||
|
PM_ForceToResetHardware();
|
||||||
|
OS_Terminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <twl/itcm_end.h>
|
||||||
|
#include <nitro/codereset.h>
|
||||||
|
|
||||||
|
// ResetParamを指定してリセット
|
||||||
|
void RP_Reset( u8 type, NAMTitleId id, BootFlags *flag )
|
||||||
|
{
|
||||||
|
// メーカーコードとゲームコードをコピー
|
||||||
|
u32 *maker_code_dest_addr = (u32 *)((u32)(RPi_GetResetParamAddr()) + HW_PARAM_DELIVER_ARG_MAKERCODE_OFS);
|
||||||
|
u32 *game_code_dest_addr = (u32 *)((u32)(RPi_GetResetParamAddr()) + HW_PARAM_DELIVER_ARG_GAMECODE_OFS);
|
||||||
|
u16 *maker_code_src_addr = (u16 *)(HW_TWL_ROM_HEADER_BUF + 0x10);
|
||||||
|
u32 *game_code_src_addr = (u32 *)(HW_TWL_ROM_HEADER_BUF + 0xc);
|
||||||
|
*maker_code_dest_addr = (u32)*maker_code_src_addr;
|
||||||
|
*game_code_dest_addr = *game_code_src_addr;
|
||||||
|
|
||||||
|
// リセットパラメータの設定
|
||||||
|
RPi_GetResetParamAddr()->body.v1.bootTitleID = id;
|
||||||
|
RPi_GetResetParamAddr()->body.v1.flags = *flag;
|
||||||
|
MI_CpuCopyFast( RPi_RESET_PARAM_MAGIC_CODE, (char *)&RPi_GetResetParamAddr()->header.magicCode, RPi_RESET_PARAM_MAGIC_CODE_LEN);
|
||||||
|
RPi_GetResetParamAddr()->header.bodyLength = sizeof(ResetParamBody);
|
||||||
|
RPi_GetResetParamAddr()->header.crc16 = SVC_GetCRC16( 65535, &RPi_GetResetParamAddr()->body, RPi_GetResetParamAddr()->header.bodyLength );
|
||||||
|
RPi_GetResetParamAddr()->header.type = type;
|
||||||
|
|
||||||
|
|
||||||
|
DC_FlushRange(RPi_GetResetParamAddr(), 0x100 );
|
||||||
|
DC_WaitWriteBufferEmpty();
|
||||||
|
|
||||||
|
RPi_DoHardwareReset();
|
||||||
|
}
|
||||||
30
build/libraries_sysmenu/reset_param/Makefile
Normal file
30
build/libraries_sysmenu/reset_param/Makefile
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#! make -f
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Project: TwlIPL
|
||||||
|
# File: Makefile
|
||||||
|
#
|
||||||
|
# Copyright 2007 Nintendo. All rights reserved.
|
||||||
|
#
|
||||||
|
# These coded instructions, statements, and computer programs contain
|
||||||
|
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
# Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
# not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
# in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
#
|
||||||
|
# $Date:: 2007-09-27#$
|
||||||
|
# $Rev: 1203 $
|
||||||
|
# $Author: yada $
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
TARGET_FIRM = SYSTEMMENU
|
||||||
|
SUBDIRS = ARM9
|
||||||
|
|
||||||
|
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
do-build: $(TARGETS)
|
||||||
|
|
||||||
|
include $(TWLIPL_ROOT)/build/buildtools/modulerules
|
||||||
|
|
||||||
|
#===== End of Makefile =====
|
||||||
@ -20,6 +20,7 @@ SUBDIRS = \
|
|||||||
../../../libraries_sysmenu/sysmenu \
|
../../../libraries_sysmenu/sysmenu \
|
||||||
../../../libraries_sysmenu/boot \
|
../../../libraries_sysmenu/boot \
|
||||||
../../../libraries_sysmenu/hotsw \
|
../../../libraries_sysmenu/hotsw \
|
||||||
|
../../../libraries_sysmenu/reset_param \
|
||||||
../../../components/hyena.TWL
|
../../../components/hyena.TWL
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|||||||
@ -45,6 +45,8 @@ LINCLUDES = $(MISC_DIR)/include
|
|||||||
|
|
||||||
MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)'
|
MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)'
|
||||||
|
|
||||||
|
LLIBRARIES += libreset_param$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,6 @@
|
|||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "MachineSetting.h"
|
#include "MachineSetting.h"
|
||||||
#include "spi.h"
|
|
||||||
|
|
||||||
// define data------------------------------------------
|
// define data------------------------------------------
|
||||||
// キャンセルボタンLCD領域
|
// キャンセルボタンLCD領域
|
||||||
@ -193,23 +192,6 @@ void MachineSettingInit( void )
|
|||||||
g_pNowProcess = MachineSettingMain;
|
g_pNowProcess = MachineSettingMain;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ResetHardware( NAMTitleId id, BootFlags *flag)
|
|
||||||
{
|
|
||||||
// リセットパラメータの設定
|
|
||||||
SYSMi_GetResetParamAddr()->body.v1.bootTitleID = id;
|
|
||||||
SYSMi_GetResetParamAddr()->body.v1.flags = *flag;
|
|
||||||
MI_CpuCopyFast( SYSM_RESET_PARAM_MAGIC_CODE, (char *)&SYSMi_GetResetParamAddr()->header.magicCode, SYSM_RESET_PARAM_MAGIC_CODE_LEN);
|
|
||||||
SYSMi_GetResetParamAddr()->header.bodyLength = sizeof(ResetParamBody);
|
|
||||||
SYSMi_GetResetParamAddr()->header.crc16 = SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength );
|
|
||||||
|
|
||||||
DC_FlushRange(SYSMi_GetResetParamAddr(), sizeof(ResetParam) );
|
|
||||||
DC_WaitWriteBufferEmpty();
|
|
||||||
|
|
||||||
// リセット命令発行
|
|
||||||
PM_ForceToResetHardware();
|
|
||||||
OS_Terminate();
|
|
||||||
}
|
|
||||||
|
|
||||||
// メインメニュー
|
// メインメニュー
|
||||||
int MachineSettingMain( void )
|
int MachineSettingMain( void )
|
||||||
{
|
{
|
||||||
@ -236,7 +218,7 @@ int MachineSettingMain( void )
|
|||||||
DrawMenu( s_csr, &s_settingParam );
|
DrawMenu( s_csr, &s_settingParam );
|
||||||
|
|
||||||
if( pad.trg & PAD_BUTTON_START ) {
|
if( pad.trg & PAD_BUTTON_START ) {
|
||||||
ResetHardware(NULL, &tempflag);
|
RP_Reset( 0, NULL, &tempflag );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||||
@ -268,7 +250,7 @@ int MachineSettingMain( void )
|
|||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
//pictochat起動テスト
|
//pictochat起動テスト
|
||||||
ResetHardware(0x0001000154484350, &tempflag);
|
RP_Reset( 0, 0x0001000154484350, &tempflag );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
85
include/sysmenu/reset_param/ARM9/reset_param.h
Normal file
85
include/sysmenu/reset_param/ARM9/reset_param.h
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: reset_param.h
|
||||||
|
|
||||||
|
Copyright 2007 Nintendo. All rights reserved.
|
||||||
|
|
||||||
|
These coded instructions, statements, and computer programs contain
|
||||||
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||||
|
Company Ltd., and are protected by Federal copyright law. They may
|
||||||
|
not be disclosed to third parties or copied or duplicated in any form,
|
||||||
|
in whole or in part, without the prior written consent of Nintendo.
|
||||||
|
|
||||||
|
$Date:: 2007-10-29#$
|
||||||
|
$Rev: 72 $
|
||||||
|
$Author: yosiokat $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _RESET_PARAM_H_
|
||||||
|
#define _RESET_PARAM_H_
|
||||||
|
|
||||||
|
#include <twl.h>
|
||||||
|
#include <twl/nam.h>
|
||||||
|
#include <spi.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// define data-------------------------------------------
|
||||||
|
|
||||||
|
// BootFlagsで使用するmedia情報
|
||||||
|
typedef enum TitleMedia {
|
||||||
|
TITLE_MEDIA_NAND = 0,
|
||||||
|
TITLE_MEDIA_CARD = 1,
|
||||||
|
TITLE_MEDIA_MAX = 2
|
||||||
|
}TitleMedia;
|
||||||
|
|
||||||
|
|
||||||
|
// タイトル&リセットパラメータ フラグ
|
||||||
|
typedef struct BootFlags {
|
||||||
|
u16 isValid : 1; // TRUE:valid, FALSE:invalid
|
||||||
|
u16 media : 3; // 0:nand, 1:card, 2-7:rsv;
|
||||||
|
u16 isLogoSkip : 1; // ロゴデモスキップ要求
|
||||||
|
u16 isInitialShortcutSkip : 1; // 初回起動シーケンススキップ要求
|
||||||
|
u16 isAppLoadCompleted : 1; // アプリロード済みを示す
|
||||||
|
u16 isAppRelocate : 1; // アプリ再配置要求
|
||||||
|
u16 rsv : 9;
|
||||||
|
}BootFlags;
|
||||||
|
|
||||||
|
|
||||||
|
// リセットパラメータ ヘッダ
|
||||||
|
typedef struct ResetParameterHeader {
|
||||||
|
u32 magicCode; // SYSM_RESET_PARAM_MAGIC_CODEが入る
|
||||||
|
u8 type; // タイプによってBodyを判別する。
|
||||||
|
u8 bodyLength; // bodyの長さ
|
||||||
|
u16 crc16; // bodyのCRC16
|
||||||
|
}ResetParamHeader;
|
||||||
|
|
||||||
|
|
||||||
|
// リセットパラメータ ボディ
|
||||||
|
typedef union ResetParamBody {
|
||||||
|
struct { // ※とりあえず最初はTitlePropertyとフォーマットを合わせておく
|
||||||
|
NAMTitleId bootTitleID; // リセット後にダイレクト起動するタイトルID
|
||||||
|
BootFlags flags; // リセット時のランチャー動作フラグ
|
||||||
|
u8 rsv[ 4 ]; // 予約
|
||||||
|
}v1;
|
||||||
|
}ResetParamBody;
|
||||||
|
|
||||||
|
|
||||||
|
// リセットパラメータ
|
||||||
|
typedef struct ResetParam {
|
||||||
|
ResetParamHeader header;
|
||||||
|
ResetParamBody body;
|
||||||
|
}ResetParam;
|
||||||
|
|
||||||
|
// function's prototype------------------------------------
|
||||||
|
|
||||||
|
void RP_Reset( u8 type, NAMTitleId id, BootFlags *flag );
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // _RESET_PARAM_H_
|
||||||
@ -22,6 +22,7 @@
|
|||||||
#include <twl/nam.h>
|
#include <twl/nam.h>
|
||||||
|
|
||||||
#include <sysmenu/memorymap.h>
|
#include <sysmenu/memorymap.h>
|
||||||
|
#include <sysmenu/reset_param/ARM9/reset_param.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -41,53 +42,6 @@ typedef struct TitleID_HiLo {
|
|||||||
u32 Hi;
|
u32 Hi;
|
||||||
}TitleID_HiLo;
|
}TitleID_HiLo;
|
||||||
|
|
||||||
|
|
||||||
// BootFlagsで使用するmedia情報
|
|
||||||
typedef enum TitleMedia {
|
|
||||||
TITLE_MEDIA_NAND = 0,
|
|
||||||
TITLE_MEDIA_CARD = 1,
|
|
||||||
TITLE_MEDIA_MAX = 2
|
|
||||||
}TitleMedia;
|
|
||||||
|
|
||||||
|
|
||||||
// タイトル&リセットパラメータ フラグ
|
|
||||||
typedef struct BootFlags {
|
|
||||||
u16 isValid : 1; // TRUE:valid, FALSE:invalid
|
|
||||||
u16 media : 3; // 0:nand, 1:card, 2-7:rsv;
|
|
||||||
u16 isLogoSkip : 1; // ロゴデモスキップ要求
|
|
||||||
u16 isInitialShortcutSkip : 1; // 初回起動シーケンススキップ要求
|
|
||||||
u16 isAppLoadCompleted : 1; // アプリロード済みを示す
|
|
||||||
u16 isAppRelocate : 1; // アプリ再配置要求
|
|
||||||
u16 rsv : 9;
|
|
||||||
}BootFlags;
|
|
||||||
|
|
||||||
|
|
||||||
// リセットパラメータ ヘッダ
|
|
||||||
typedef struct ResetParameterHeader {
|
|
||||||
u32 magicCode; // SYSM_RESET_PARAM_MAGIC_CODEが入る
|
|
||||||
u8 type; // タイプによってBodyを判別する。
|
|
||||||
u8 bodyLength; // bodyの長さ
|
|
||||||
u16 crc16; // bodyのCRC16
|
|
||||||
}ResetParamHeader;
|
|
||||||
|
|
||||||
|
|
||||||
// リセットパラメータ ボディ
|
|
||||||
typedef union ResetParamBody {
|
|
||||||
struct { // ※とりあえず最初はTitlePropertyとフォーマットを合わせておく
|
|
||||||
NAMTitleId bootTitleID; // リセット後にダイレクト起動するタイトルID
|
|
||||||
BootFlags flags; // リセット時のランチャー動作フラグ
|
|
||||||
u8 rsv[ 4 ]; // 予約
|
|
||||||
}v1;
|
|
||||||
}ResetParamBody;
|
|
||||||
|
|
||||||
|
|
||||||
// リセットパラメータ
|
|
||||||
typedef struct ResetParam {
|
|
||||||
ResetParamHeader header;
|
|
||||||
ResetParamBody body;
|
|
||||||
}ResetParam;
|
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// データ型定義
|
// データ型定義
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user