From 10ef23def2e353f51e1dae7c00e51569b6a20bc7 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Fri, 7 Aug 2009 05:36:25 +0000 Subject: [PATCH] =?UTF-8?q?NAND=E3=83=95=E3=82=A1=E3=83=BC=E3=83=A0?= =?UTF-8?q?=E3=82=92=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=82=81=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= 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@2892 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../tests/TitleHashChecker/ARM7.TWL/Makefile | 71 +- .../TitleHashChecker/ARM7.TWL/armadillo.lsf | 87 ++ .../TitleHashChecker/ARM7.TWL/racoon.lsf | 240 ------ .../ARM7.TWL/src/crt0.SCFG_NOLOCK.c | 798 ++++++++++++++++++ .../TitleHashChecker/ARM7.TWL/src/initScfg.c | 108 --- .../TitleHashChecker/ARM7.TWL/src/main.c | 786 ++++------------- .../TitleHashChecker/ARM9.TWL/ARM9-TS.lsf | 57 ++ .../tests/TitleHashChecker/ARM9.TWL/Makefile | 101 ++- .../ARM9.TWL/include/kami_pxi.h | 112 +++ .../ARM9.TWL/include/screen.h | 18 + .../ARM9.TWL/{ROM-TS_sys.rsf => main.rsf} | 144 +--- .../TitleHashChecker/ARM9.TWL/src/common.c | 1 - .../TitleHashChecker/ARM9.TWL/src/kami_pxi.c | 684 +++++++++++++++ .../TitleHashChecker/ARM9.TWL/src/main.c | 94 ++- .../TitleHashChecker/banner/banner_v3.bsf | Bin 916 -> 884 bytes .../TitleHashChecker/banner/icon/gameIcon.bmp | Bin 630 -> 630 bytes 16 files changed, 2168 insertions(+), 1133 deletions(-) create mode 100644 build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/racoon.lsf create mode 100644 build/tests/TitleHashChecker/ARM7.TWL/src/crt0.SCFG_NOLOCK.c delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/src/initScfg.c create mode 100644 build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf create mode 100644 build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h rename build/tests/TitleHashChecker/ARM9.TWL/{ROM-TS_sys.rsf => main.rsf} (57%) create mode 100644 build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c diff --git a/build/tests/TitleHashChecker/ARM7.TWL/Makefile b/build/tests/TitleHashChecker/ARM7.TWL/Makefile index 14631f45..097bc294 100644 --- a/build/tests/TitleHashChecker/ARM7.TWL/Makefile +++ b/build/tests/TitleHashChecker/ARM7.TWL/Makefile @@ -1,9 +1,9 @@ #! make -f #---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL +# Project: TwlSDK - components - armadillo.TWL # File: Makefile # -# Copyright 2007-2008 Nintendo. All rights reserved. +# Copyright 2008 Nintendo. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo @@ -11,31 +11,33 @@ # 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:: 2008-09-18#$ -# $Rev: 8573 $ -# $Author: okubata_ryoma $ +# $Date:: 2008-08-15#$ +# $Rev: 2167 $ +# $Author: yosiokat $ #---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -TWL_NO_STD_PCHDR = True -TWL_CODEGEN ?= ALL +override TARGET_PLATFORM = TWL +override TWL_PROC = ARM7 +override TWL_ARCHGEN = LIMITED +##override TWL_PLATFORM = TS +TWL_NO_STD_PCHDR = True +override TARGET_CODEGEN = ARM +ifndef TWLSDK_NOCRYPTO #---------------------------------------------------------------------------- -SRCDIR += ./src +SRCS = crt0.SCFG_NOLOCK.c \ + main.c \ + kami_pxi.c -SRCS = main.c initScfg.c kami_pxi.c +TARGET_NAME = armadillo -TARGET_NAME = racoon +TARGET_NEF = $(TARGET_NAME).tef +LCFILE_SPEC = $(TARGET_NAME).lsf +LCFILE_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).lcf.template +LDRES_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).response.template -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).response.template - -CRT0_O = crt0.LTD.TWL.o +CRT0_O = crt0.SCFG_NOLOCK.o # スタック不足防止の為、インライン展開せずにコンパイルする CCFLAGS_OPT = -O4 -inline off @@ -43,30 +45,32 @@ CCFLAGS_OPT = -O4 -inline off #---------------------------------------------------------------------------- include $(TWLSDK_ROOT)/build/buildtools/commondefs -#MACRO_FLAGS += -DSDK_ARM7COMP_LTD - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif +MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA -DSDK_NOINIT MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' -LLIBRARY_DIRS += $(TWL_IPL_RED_ROOT)/lib/ARM7-TS/$(TWL_BUILD_DIR) \ - ./obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) - LINCLUDES += $(ROOT)/build/libraries/spi/ARM7/include \ $(ROOT)/build/libraries/os/common/include \ $(TWL_IPL_RED_ROOT)/include \ + ../common/include \ $(ROOT)/build/libraries/init/common/include \ $(ROOT)/build/libraries/fatfs/ARM7.TWL/include \ $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/fatfs \ - $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 \ - ../common/include + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 -LLIBRARIES += libwl_sp.TWL.LTD.a +LLIBRARY_DIRS += $(TWL_IPL_RED_ROOT)/lib/ARM7-TS/$(TWL_BUILD_DIR) \ + ./obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) + +LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ + libsdio_sp$(TWL_LIBSUFFIX).a \ + libathdrv_sp$(TWL_LIBSUFFIX).a \ + libwpa_sp$(TWL_LIBSUFFIX).a \ + libhotsw_sp$(TWL_LIBSUFFIX).a \ + libreloc_info_sp$(TWL_LIBSUFFIX).a + +LLIBRARIES += libpm_sp.SYSMENU$(TWL_LIBSUFFIX).a +GLIBRARIES := $(filter-out libpm_sp$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) @@ -75,4 +79,7 @@ do-build: $(TARGETS) #---------------------------------------------------------------------------- include $(TWLSDK_ROOT)/build/buildtools/modulerules +#---------------------------------------------------------------------------- +endif #ifndef TWLSDK_NOCRYPTO + #===== End of Makefile ===== diff --git a/build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf b/build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf new file mode 100644 index 00000000..f4535acf --- /dev/null +++ b/build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf @@ -0,0 +1,87 @@ +#---------------------------------------------------------------------------- +# Project: TwlSDK - components - armadillo.TWL +# File: armadillo.lsf +# +# Copyright 2008 Nintendo. All rights reserved. +# +# These coded insructions, 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:: 2008-07-24#$ +# $Rev: 1990 $ +# $Author: kamikawa $ +#---------------------------------------------------------------------------- +# +# Nitro LCF SPEC FILE +# +#-------- +Static $(TARGET_NAME) +{ + Address 0x02380000 + StackSize 1024 1024 + + Library $(CRT0_O) +} + +#-------- +Ltdautoload SCRWRAM +{ + Address 0x03740000 + + Library libsubpsyscall.a + Library libsyscall_sp.twl.a + Library $(CW_LIBS) + Library $(ISDBG_LIBS_TWL) + Library $(ISDBG_LIBS_NITRO) + + Object * (.etable) + Object $(OBJDIR)/main.o + Object $(OBJDIR)/kami_pxi.o + + Library libsea_sp$(LIBSUFFIX).a + Library libcrypto_sp$(LIBSUFFIX).a + + Library libos_sp$(LIBSUFFIX).a + Library libmi_sp$(LIBSUFFIX).a + Library libstd_sp$(LIBSUFFIX).a + Library libmath_sp$(LIBSUFFIX).a + Library libpxi_sp$(LIBSUFFIX).a + Library libexi_sp$(LIBSUFFIX).a + Library libi2c_sp$(LIBSUFFIX).a + Library libsdio_sp$(LIBSUFFIX).a + Library libpad_sp$(LIBSUFFIX).a + Library libscfg_sp$(LIBSUFFIX).a + Library libmcu_sp$(LIBSUFFIX).a + Library libcdc_sp$(LIBSUFFIX).a + Library libsnd_sp$(LIBSUFFIX).a + Library libsndex_sp$(LIBSUFFIX).a + Library libspi_sp$(LIBSUFFIX).a + Library libpm_sp.SYSMENU$(LIBSUFFIX).a + Library libtp_sp$(LIBSUFFIX).a + Library libtpex_sp$(LIBSUFFIX).a + Library libmic_sp$(LIBSUFFIX).a + Library libmicex_sp$(LIBSUFFIX).a + Library libnvram_sp$(LIBSUFFIX).a + Library librtc_sp$(LIBSUFFIX).a + Library libfatfs_sp$(LIBSUFFIX).a + Library libwm_sp$(LIBSUFFIX).a + Library libnwm_sp$(LIBSUFFIX).a + Library libwvr_sp$(LIBSUFFIX).a + Library libwl_sp$(LIBSUFFIX).a + Library libwpa_sp$(LIBSUFFIX).a + Library libathdrv_sp$(LIBSUFFIX).a + Library libfs_sp$(LIBSUFFIX).a + Library libcard_sp$(LIBSUFFIX).a + Library libcamera_sp$(LIBSUFFIX).a + Library libhotsw_sp$(LIBSUFFIX).a + Library libreloc_info_sp$(LIBSUFFIX).a + + Object * (.wram) + Object * (.ltdwram) + Object * (.rsvwram) + Object * (.main) + Object * (.ltdmain) +} diff --git a/build/tests/TitleHashChecker/ARM7.TWL/racoon.lsf b/build/tests/TitleHashChecker/ARM7.TWL/racoon.lsf deleted file mode 100644 index 984e4657..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/racoon.lsf +++ /dev/null @@ -1,240 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lsf -# -# Copyright 2007-2009 Nintendo. All rights reserved. -# -# These coded insructions, 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:: 2009-06-04#$ -# $Rev: 10698 $ -# $Author: okubata_ryoma $ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - Library $(CRT0_O) - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address $(ADDRESS_LTDWRAM) - - Library libsubpsyscall.a \ - libsyscall_sp.twl.a \ - $(CW_LIBS) \ - libos_sp$(LIBSUFFIX).a \ - libmi_sp$(LIBSUFFIX).a \ - libpad_sp$(LIBSUFFIX).a \ - libpxi_sp$(LIBSUFFIX).a \ - libstd_sp$(LIBSUFFIX).a \ - libexi_sp$(LIBSUFFIX).a \ - libsnd_sp$(LIBSUFFIX).a \ - libspi_sp$(LIBSUFFIX).a \ - libpm_sp$(LIBSUFFIX).a \ - libmath_sp$(LIBSUFFIX).a \ - libscfg_sp$(LIBSUFFIX).a \ - libtp_sp$(LIBSUFFIX).a \ - libmic_sp$(LIBSUFFIX).a \ - libfs_sp$(LIBSUFFIX).a \ - libcard_sp$(LIBSUFFIX).a \ - libi2c_sp$(LIBSUFFIX).a \ - libcamera_sp$(LIBSUFFIX).a \ - libcdc_sp$(LIBSUFFIX).a \ - libsndex_sp$(LIBSUFFIX).a \ - libtpex_sp$(LIBSUFFIX).a \ - libmicex_sp$(LIBSUFFIX).a \ - libmcu_sp$(LIBSUFFIX).a \ - - Library libsdio_sp$(LIBSUFFIX).a - - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - - - Object * (.etable) - Object * (.wram) - Object * (.ltdwram) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/kami_pxi.o - - # caches in fatfs library, that should be on WRAM. - # 2007/12/11 OBJECT() による .bss シンボルのリンクがうまくいかないので、 - # 変数定義箇所に pragma で .ltdwram セクションに含まれるように暫定対策しました。 -# Object OBJECT( FATFSi___mem_drives_structures , libfatfs_sp$(LIBSUFFIX).a) (.bss) - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp$(LIBSUFFIX).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlCmdIf.o - Object OBJECT( RequestCmdTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WStop , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp$(LIBSUFFIX).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp$(LIBSUFFIX).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - - -} - -#-------- -Ltdautoload RSVWRAM -{ - Address 0x03040000 - Object * (.rsvwram) - Library libathdrv_sp$(LIBSUFFIX).a (.bss) - Library libathdrv_sp$(LIBSUFFIX).a (.data) - - ##### - # Sub-routines in TWL WIRELESS Driver , that should be on WRAM. - Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCIssueSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCTrySend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCSendPkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessCreditRpt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRecvPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessRecvHeader, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvCompleteHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvMessagePendingHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAddReceivePkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KFreeIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KAllocIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevGetEventAsyncHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevCheckPendingRecvMsgsAsync, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevDsrHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFReadWrite, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifIRQHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFAckInterrupt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_credit_distribute, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_put, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_push, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_pull, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_free, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_data, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_len, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_headroom, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_drv_return_netbuf, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_remove_from_head, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_insert_tail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_alloc_cookie, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_driver_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_tx_complete, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_dix_2_dot3, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_add, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_remove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_ibss_map_epid, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListInsertTail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListRemove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_control_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_cmd_send, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_control_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_implicit_create_pstream, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAllocControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCFreeControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMILZData, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text) - - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs - Object OBJECT(SDCARDi_WriteCore, libfatfs_sp$(LIBSUFFIX).a) (.text) # - Object OBJECT(SDCARDi_ReadCore, libfatfs_sp$(LIBSUFFIX).a) (.text) # - Object OBJECT(SD_SetFPGA, libfatfs_sp$(LIBSUFFIX).a) (.text) # - Object OBJECT(SD_TransCommand, libfatfs_sp$(LIBSUFFIX).a) (.text) # - Object OBJECT(SD_MultiWriteBlock, libfatfs_sp$(LIBSUFFIX).a) (.text) # - Object OBJECT(SD_MultiReadBlock, libfatfs_sp$(LIBSUFFIX).a) (.text) # -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - - Object * (.ltdmain) - Library libwm_sp$(LIBSUFFIX).a \ - libnwm_sp$(LIBSUFFIX).a \ - libwvr_sp$(LIBSUFFIX).a \ - libwl_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Library libfatfs_sp$(LIBSUFFIX).a \ - libaes_sp$(LIBSUFFIX).a - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.main) -} diff --git a/build/tests/TitleHashChecker/ARM7.TWL/src/crt0.SCFG_NOLOCK.c b/build/tests/TitleHashChecker/ARM7.TWL/src/crt0.SCFG_NOLOCK.c new file mode 100644 index 00000000..ace6ee66 --- /dev/null +++ b/build/tests/TitleHashChecker/ARM7.TWL/src/crt0.SCFG_NOLOCK.c @@ -0,0 +1,798 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - libraries - init - ARM7.TWL + File: crt0.SCR.c + + Copyright 2008 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:: 2008-06-23#$ + $Rev: 1672 $ + $Author: yosiokat $ + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#ifndef SDK_FINALROM +#include +#endif +#include "boot_sync.h" + +/*---------------------------------------------------------------------------*/ +void _start(void); +void _start_AutoloadDoneCallback(void* argv[]); + +/*---------------------------------------------------------------------------* + 外部参照 + *---------------------------------------------------------------------------*/ +/* リンカスクリプトにより定義されるシンボル参照 */ +extern void SDK_AUTOLOAD_LIST(void); +extern void SDK_AUTOLOAD_LIST_END(void); +extern void SDK_AUTOLOAD_START(void); +extern void SDK_STATIC_START(void); +extern void SDK_STATIC_BSS_START(void); +extern void SDK_STATIC_BSS_END(void); +extern void SDK_LTDAUTOLOAD_LIST(void); +extern void SDK_LTDAUTOLOAD_LIST_END(void); +extern void SDK_LTDAUTOLOAD_START(void); +extern void SDK_WRAM_ARENA_LO(void); + +/* 外部関数参照 */ +extern void OS_IrqHandler(void); +#ifndef SDK_NOINIT +extern void _fp_init(void); +extern void __call_static_initializers(void); +#endif + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +#define SDK_NITROCODE_LE 0x2106c0de +#define SDK_NITROCODE_BE 0xdec00621 +#define SDK_TWLCODE_LE 0x6314c0de +#define SDK_TWLCODE_BE 0xdec01463 + +/* .rodata セクションに配置するロードに必要な情報 */ +void* const _start_ModuleParams[] = +{ + (void*)0, + (void*)0, + (void*)0, + (void*)SDK_STATIC_BSS_START, + (void*)SDK_STATIC_BSS_END, + (void*)0, + (void*)0, + (void*)SDK_NITROCODE_BE, + (void*)SDK_NITROCODE_LE, +}; + +void* const _start_LtdModuleParams[] = +{ + (void*)SDK_LTDAUTOLOAD_LIST, + (void*)SDK_LTDAUTOLOAD_LIST_END, + (void*)SDK_LTDAUTOLOAD_START, + (void*)0, + (void*)SDK_TWLCODE_BE, + (void*)SDK_TWLCODE_LE, +}; + +/*---------------------------------------------------------------------------* + Name: ShakeHand + Description: ARM9 の ShakeHand 関数と同期を取る。 + メインメモリでないメモリ空間で実行される必要がある。 + Arguments: r0 - ARM9 同期用変数へのポインタ。 + r1 - ARM7 同期用変数へのポインタ。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static const u32 microcode_ShakeHand[10] = +{ + 0xe1d020b0, /* ldrh r2, [r0] ; 同期変数9を共有メモリから読む */ + 0xe1d130b0, /* ldrh r3, [r1] ; 同期変数7を共有メモリから読む */ + 0xe2833001, /* @1: add r3, r3, #1 ; 同期変数7 ++ */ + 0xe1c130b0, /* strh r3, [r1] ; 同期変数7を共有メモリに書く */ + 0xe1d0c0b0, /* ldrh r12, [r0] ; 同期変数9の現状を共有メモリから読む */ + 0xe152000c, /* cmp r2, r12 ; 同期変数9の変化を判定する */ + 0x0afffffa, /* beq @1 ; 変化していなければループ */ + 0xe2833001, /* add r3, r3, #1 ; 同期変数7 ++ */ + 0xe1c130b0, /* strh r3, [r1] ; 同期変数7を共有メモリに書く */ + 0xe12fff1e /* bx lr ; ハンドシェイク完了 */ +}; + +/*---------------------------------------------------------------------------* + Name: Stop + Description: プログラムを停止する。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static const u32 microcode_Stop[2] = +{ + 0xef000006, /* @1: swi #6 ; SVC_Halt */ + 0xeafffffd /* b @1 ; ループ */ +}; + +/*---------------------------------------------------------------------------* + Name: GotoMain + Description: ARM9 に特定の状態になったことを伝えた上で、Main 関数へジャンプ + する。同時に指定バッファの 0 クリアを行う。スタック内で動作させ + ることを想定している為、スタックを一切使用しない。 + Arguments: r0 - 0 クリアするバッファの先頭アドレス。 + 4 バイトアラインされたアドレスである必要がある。 + r1 - 上位 8 bit: ARM9 に伝えるフェーズ番号。 + 下位 24 bit: 0 クリアするバッファのサイズ。 + 4 の倍数である必要がある。 + r2 - 同期用フェーズ管理変数へのポインタ。 + r3 - Main 関数のポインタ。Main 関数が Thumb コードである場合 + には、bx 命令でジャンプするため最下位ビットが 1 になって + いる必要がある。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static const u32 microcode_GotoMain[10] = +{ + 0xe59fc01c, /* @1: ldr r12, [pc, #28] ; 下位 24 bit マスクを用意 */ + 0xe111000c, /* tst r1, r12 ; クリアバッファ残サイズをチェック */ + 0xe3a0c000, /* mov r12, #0 ; クリア用変数を用意 */ + 0x1480c004, /* strne r12, [r0], #4 ; 4 バイトクリア */ + 0x12411004, /* subne r1, r1, #4 ; クリアバッファ残サイズ -= 4 */ + 0x1afffff9, /* bne @1 ; 残サイズが 0 になるまでループ */ + 0xe1a01c21, /* mov r1, r1, LSR #24 ; フェーズ管理変数の更新値を用意 */ + 0xe1c210b0, /* strh r1, [r2] ; フェーズ管理変数を更新 */ + 0xe12fff13, /* bx r3 ; Main 関数へジャンプ */ + 0x00fffffc /* 0x00fffffc */ +}; + + +/*---------------------------------------------------------------------------* + 内部関数プロトタイプ + *---------------------------------------------------------------------------*/ +static void INITi_CheckSysConfig(void); +static void INITi_DetectMainMemorySize(void); +static void INITi_Stop(void); +static void INITi_DoAutoload(void); +#ifndef SDK_NOINIT +static void INITi_ShelterStaticInitializer(u32* ptr); +static void INITi_CallStaticInitializers(void); +#endif + +static void* INITi_Copy32(void* dst, void* src, u32 size); +static void* INITi_Fill32(void* dst, u32 value, u32 size); + +/*---------------------------------------------------------------------------*/ +#include + +/*---------------------------------------------------------------------------* + Name: _start + Description: 起動ベクタ。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +SDK_WEAK_SYMBOL asm void +_start(void) +{ +@000: + /* 割込み禁止 */ + mov r12, #HW_REG_BASE + str r12, [r12, #REG_IME_OFFSET] + + /* SCFG 設定を確認 */ + bl INITi_CheckSysConfig + + /* プリロードパラメータアドレスが格納されていない場合は、デフォルト値をセット */ + ldr r0, =HW_PRELOAD_PARAMETER_ADDR + ldr r1, [r0] + cmp r1, #0 + ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT + streq r1, [r0] + + /* ランチャーから渡された情報を退避 */ + ldr r3, =SDK_WRAM_ARENA_LO + sub r2, r3, #0x40 + ldr r1, =HW_LAUNCHER_DELIVER_PARAM_BUF +@001: + cmp r2, r3 + ldrlt r0, [r1], #4 + strlt r0, [r2], #4 + blt @001 + + + /* ハンドシェイク用マイクロコードを専用 WRAM にコピー */ + ldr r1, =microcode_ShakeHand + ldr r2, =HW_PRV_WRAM + add r3, r2, #40 // sizeof(microcode_ShakeHand) +@002: ldr r0, [r1], #4 + str r0, [r2], #4 + cmp r2, r3 + blt @002 + + /* 専用 WRAM 上のコードで ARM9 とハンドシェイク */ + ldr r0, =HW_BOOT_SHAKEHAND_9 + ldr r1, =HW_BOOT_SHAKEHAND_7 + ldr r2, =HW_PRV_WRAM + mov lr, pc + bx r2 + +@010: + /* スタックポインタ設定 */ + mov r0, #HW_PSR_SVC_MODE // SuperVisor mode + msr cpsr_c, r0 + ldr sp, =HW_PRV_WRAM_SVC_STACK_END + mov r0, #HW_PSR_IRQ_MODE // IRQ mode + msr cpsr_c, r0 + ldr sp, =HW_PRV_WRAM_IRQ_STACK_END + ldr r1, =SDK_IRQ_STACKSIZE + sub r1, sp, r1 + sub sp, sp, #4 // 4 bytes for IRQ stack check code + mov r0, #HW_PSR_SYS_MODE // System mode + msr cpsr_csfx, r0 + sub sp, r1, #4 // 4 bytes for SYS stack check code + + /* スタック領域をクリア */ + ldr r0, =SDK_SYS_STACKSIZE + sub r1, r1, r0 + ldr r2, =HW_PRV_WRAM_IRQ_STACK_END + mov r0, #0 +@011: cmp r1, r2 + strlt r0, [r1], #4 + blt @011 + + /* Autoload を実施 */ + bl INITi_DoAutoload + + /* STATIC セグメントの .bss セクションを 0 クリア */ + mov r1, #0 // r1 = clear value for STATIC bss section + ldr r3, =_start_ModuleParams + ldr r0, [r3, #12] // r0 = start address of STATIC bss section + ldr r2, [r3, #16] + subs r2, r2, r0 // r2 = size of STATIC bss section + blgt INITi_Fill32 + + /* メインメモリサイズを調査 */ + bl INITi_DetectMainMemorySize + +#ifndef SDK_FINALROM + /* デバッグ出力ウィンドウを設定 */ + ldr r1, =HW_PRINT_OUTPUT_ARM9 + mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 + orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7 << 8) + strh r0, [r1] + mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR + orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR << 8) + strh r0, [r1, #2] +#endif + + /* IRQ 割込みベクタ設定 */ + ldr r1, =HW_INTR_VECTOR_BUF + ldr r0, =OS_IrqHandler + str r0, [r1] + +#ifndef SDK_NOINIT + /* c++ 用初期化 */ + bl _fp_init + bl TwlSpStartUp + bl __call_static_initializers + bl INITi_CallStaticInitializers +#endif + +@0f0: + /* Main 関数へのジャンプ用マイクロコードをスタックの底にコピー */ + ldr r1, =microcode_GotoMain + sub r2, sp, #40 + mov r3, sp +@0f1: cmp r2, r3 + ldrlt r0, [r1], #4 + strlt r0, [r2], #4 + blt @0f1 + + /* マイクロコードを経由して Main 関数へジャンプ */ + ldr r0, =SDK_STATIC_START + bic r0, r0, #0x00000003 + ldr r1, =SDK_STATIC_BSS_END + sub r1, r1, r0 + add r1, r1, #3 + bic r1, r1, #0x00000003 + bic r1, r1, #0xff000000 + mov r2, #BOOT_SYNC_PHASE_4 + mov r2, r2, LSL #24 + orr r1, r1, r2 + ldr r2, =HW_BOOT_SYNC_PHASE + ldr r3, =TwlSpMain + ldr lr, =HW_RESET_VECTOR + sub r12, sp, #40 + bx r12 + /* never return */ +} + +/*---------------------------------------------------------------------------* + Name: _start_AutoloadDoneCallback + Description: オートロード完了コールバック。 + Arguments: argv - オートロードパラメータを保持している配列。 + argv[0] = SDK_AUTOLOAD_LIST + argv[1] = SDK_AUTOLOAD_LIST_END + argv[2] = SDK_AUTOLOAD_START + argv[3] = SDK_STATIC_BSS_START + argv[4] = SDK_STATIC_BSS_END + Returns: なし。 + *---------------------------------------------------------------------------*/ +SDK_WEAK_SYMBOL asm void +_start_AutoloadDoneCallback(void* argv[]) +{ + bx lr +} + +/*---------------------------------------------------------------------------* + Name: INITi_CheckSysConfig + Description: SCFG 関連 I/O レジスタの内容を確認する。 + A7-SCFG ブロックがアクセス有効な場合には、ローダーが行う設定処 + 理を代行した上でアクセスを無効化する。 + ARM7 専用 WRAM 内にローダーが展開している I/O レジスタ情報を確 + 認した上でメインメモリ上の共有領域にコピーする。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static asm void +INITi_CheckSysConfig(void) +{ + /* A7-SCFG のアクセス可否判定 */ + ldr r1, =REG_EXT_ADDR + ldr r0, [r1] + ldr r2, =HW_PRV_WRAM_SYSRV + tst r0, #REG_SCFG_EXT_CFG_MASK + beq @invalid + +@valid: + /* ARM7 Secure-ROM 切り離し */ + ldr r1, =REG_A7ROM_ADDR + ldrb r0, [r1] + orr r0, r0, #REG_SCFG_A7ROM_SEC_MASK + strb r0, [r1] + + /* ARM9 Secure-ROM 切り離し */ + ldr r1, =REG_A9ROM_ADDR + ldrb r0, [r1] + orr r0, r0, #REG_SCFG_A9ROM_SEC_MASK + strb r0, [r1] + + /* NITRO 無線を有効化 */ + ldr r1, =REG_WL_ADDR + ldrh r0, [r1] + orr r0, r0, #REG_SCFG_WL_OFFB_MASK + strh r0, [r1] + + /* ROM 設定、NITRO 無線設定、ボンディングオプション情報を WRAM に展開 */ + ldr r3, =REG_OP_ADDR // SCFG-OP + ldrb r1, [r3] + and r0, r1, #(REG_SCFG_OP_OP1_MASK | REG_SCFG_OP_OP0_MASK) + ldr r3, =REG_A9ROM_ADDR // SCFG-ROM:0~7 + ldrb r1, [r3] + and r3, r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) + orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) + ldr r3, =REG_A7ROM_ADDR // SCFG-ROM:8~15 + ldrb r1, [r3] + and r3, r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) + orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) + ldr r3, =REG_WL_ADDR // SCFG-WL + ldrb r1, [r3] + and r3, r1, #REG_SCFG_WL_OFFB_MASK + orr r0, r0, r3, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) + strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] + + /* 各新規ブロックへクロックを供給 */ + ldr r1, =REG_CLK_ADDR + ldrh r0, [r1] + ldr r3, =REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK | REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK + orr r0, r0, r3 + strh r0, [r1] + + /* JTAG 情報を WRAM に展開 */ + ldr r3, =REG_JTAG_ADDR // SCFG-JTAG + ldrh r1, [r3] + and r0, r1, #(REG_SCFG_JTAG_CPUJE_MASK | REG_SCFG_JTAG_ARM7SEL_MASK) + and r3, r1, #REG_SCFG_JTAG_DSPJE_MASK + orr r0, r0, r3, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) + strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] + + /* 各拡張機能を有効化 */ + ldr r1, =REG_EXT_ADDR // SCFG_EXT + ldr r0, [r1] + ldr r3, =REG_SCFG_EXT_WRAM_MASK | REG_SCFG_EXT_GPIO_MASK | REG_SCFG_EXT_I2C_MASK | REG_SCFG_EXT_I2S_MASK | REG_SCFG_EXT_MIC_MASK | REG_SCFG_EXT_SD2_MASK | REG_SCFG_EXT_SD1_MASK | REG_SCFG_EXT_AES_MASK | REG_SCFG_EXT_DMAC_MASK + orr r0, r0, r3 + orr r0, r0, #(REG_SCFG_EXT_DSEL_MASK | REG_SCFG_EXT_INTC_MASK) + bic r0, r0, #REG_SCFG_EXT_MC_B_MASK + str r0, [r1] + + /* 各拡張機能の制御設定内容を WRAM に展開 */ + str r0, [r2, #HWi_WSYS04_WRAMOFFSET] + + /* メモリーカード I/F のスロット選択 */ + ldr r1, =REG_MC1_ADDR // SCFG_MC1 + ldr r0, [r1] + bic r0, r0, #REG_MI_MC1_SWP_MASK + str r0, [r1] + + /* WRAM-A/B/C が ARM7 に割り当たっていることを確認 */ + ldr r1, =REG_MBK1_ADDR + ldr r0, [r1] + ldr r3, =0x8d898581 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK2_ADDR + ldr r0, [r1] + ldr r3, =0x8d898581 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK3_ADDR + ldr r0, [r1] + ldr r3, =0x9d999591 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK4_ADDR + ldr r0, [r1] + ldr r3, =0x8d898581 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK5_ADDR + ldr r0, [r1] + ldr r3, =0x9d999591 + cmp r0, r3 + blne INITi_Stop + + /* WRAM-A/B/C のメモリマップを設定 */ + ldr r1, =REG_MBK6_ADDR + ldr r0, =0x080037c0 + str r0, [r1] + ldr r1, =REG_MBK7_ADDR + ldr r0, =0x07c03780 + str r0, [r1] + ldr r1, =REG_MBK8_ADDR + ldr r0, =0x07803740 + str r0, [r1] + ldr r1, =REG_MBK9_ADDR + ldr r0, =0x00ffff0f + str r0, [r1] + + /* A7-SCFG ブロックへのアクセスを無効化 */ + ldr r1, =REG_EXT_ADDR + ldr r0, [r1] +/* bic r0, r0, #REG_SCFG_EXT_CFG_MASK */ + str r0, [r1] + +@invalid: + /* ROM 設定、NITRO 無線設定内容を確認 */ + ldrb r0, [r2, #HWi_WSYS08_WRAMOFFSET] + and r0, r0, #(HWi_WSYS08_ROM_ARM7RSEL_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK | HWi_WSYS08_ROM_ARM9SEC_MASK) + cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK + blne INITi_Stop + + /* SCFG レジスタ設定情報を共有領域にコピー */ + ldr r2, =HW_PRV_WRAM_SYSRV + ldr r3, =HW_SYS_CONF_BUF + ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] + str r0, [r3, #HWi_WSYS04_OFFSET] + ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] + strh r0, [r3, #HWi_WSYS08_OFFSET] + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: INITi_DetectMainMemorySize + Description: メインメモリサイズを調査する。 + 調査結果は (u16*)HW_MMEMCHECER_SUB に格納される。 + 格納される値は [OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32B] + NOTE: プラットフォームが NITRO の場合は考慮していない。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +#define OSi_IMAGE_DIFFERENCE2 0xb000000 +#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) +#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) + +#define OSi_CHECKNUM1 0x55 +#define OSi_CHECKNUM2 0xaa +#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) + +static asm void +INITi_DetectMainMemorySize(void) +{ + ldr r2, =HW_MMEMCHECKER_SUB + add r3, r2, #OSi_IMAGE_DIFFERENCE2 + mov r0, #OS_CONSOLE_SIZE_16MB + + /* OSi_CHECKNUM1 (0x55) 書き込みテスト */ + mov r1, #OSi_CHECKNUM1 + strb r1, [r3] + + ldr r2, =OSi_100usWAIT +@1 subs r2, r2, #4 + bcs @1 + + ldrb r1, [r3] + cmp r1, #OSi_CHECKNUM1 + bne @check_smix + + /* OSi_CHECKNUM2 (0xaa) を 書き込みテスト */ + mov r1, #OSi_CHECKNUM2 + strb r1, [r3] + + ldr r2, =OSi_100usWAIT +@2 subs r2, r2, #4 + bcs @2 + + ldrb r1, [r3] + cmp r1, #OSi_CHECKNUM2 + moveq r0, #OS_CONSOLE_SIZE_32MB + +@check_smix: + /* SMIX レジスタを調査 */ + ldr r3, =REG_SMX_CNT_ADDR + ldrh r1, [r3] + and r1, r1, #OSi_DETECT_NITRO_MASK + cmp r1, #OSi_DETECT_NITRO_VAL + orreq r0, r0, #OS_CHIPTYPE_SMX_MASK + + /* 調査結果を格納 */ + ldr r2, =HW_MMEMCHECKER_SUB + strb r0, [r2] + bx lr +} + +/*---------------------------------------------------------------------------* + Name: INITi_Stop + Description: プログラムを停止する。ARM7 専用 WRAM に Halt を繰り返すループ + 関数をコピーし、コピーした関数を実行する。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static asm void +INITi_Stop(void) +{ + ldr r1, =microcode_Stop + ldr r2, =HW_PRV_WRAM + add r3, r2, #8 // sizeof(microcode_Stop) +@copy_loop: + ldr r0, [r1], #4 + str r0, [r2], #4 + cmp r2, r3 + blt @copy_loop + +@stop_loop: + ldr r0, =HW_PRV_WRAM + mov lr, pc + bx r0 + b @stop_loop + /* never return */ +} + +/*---------------------------------------------------------------------------* + Name: INITi_DoAutoload + Description: リンク情報に沿って、各オートロードブロックの固定データ部の展開 + 及び変数部の 0 クリアを行う。 + NITRO 互換オートロードセグメントは存在せず、TWL 専用セグメント + のみが存在するという前提。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ + +static asm void +INITi_DoAutoload(void) +{ + stmfd sp!, {lr} + + /* オートロードを実施 */ +@000: + ldr r0, =_start_LtdModuleParams + ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST + ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END + ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START +@001: + cmp r12, r3 + bge @010 + /* 固定セクション */ + ldr r0, [r12], #4 // r0 = start address of destination range of fixed section + ldr r2, [r12], #4 // r2 = size of fixed section + bl INITi_Copy32 + stmfd sp!, {r0, r1} + /* static initializer テーブル */ + ldr r0, [r12], #4 +#ifndef SDK_NOINIT + stmfd sp!, {r3, r12} + bl INITi_ShelterStaticInitializer + ldmfd sp!, {r3, r12} +#endif + /* bss セクション */ + ldmfd sp!, {r0} // r0 = start address of destination range of bss section + mov r1, #0 // r1 = clear value for bss section + ldr r2, [r12], #4 // r2 = sizeo of bss section + bl INITi_Fill32 + ldmfd sp!, {r1} + b @001 + + /* オートロードリスト・オートロード元バッファをクリア */ +@010: + ldr r1, =_start_LtdModuleParams + ldr r12, [r1] // r12 = SDK_LTDAUTOLOAD_LIST + ldr r3, [r1, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END + ldr r0, [r1, #8] // r0 = SDK_LTDAUTOLOAD_START +@011: + cmp r12, r3 + bge @0f0 + mov r1, #0 // r1 = clear value + str r1, [r12], #4 + ldr r2, [r12] // r2 = size of fixed section + str r1, [r12], #4 + str r1, [r12], #4 + str r1, [r12], #4 + bl INITi_Fill32 + b @011 + +@0f0: + /* オートロード完了コールバック呼び出し */ + ldr r0, =_start_ModuleParams + ldr r1, =_start_LtdModuleParams + ldmfd sp!, {lr} + b _start_AutoloadDoneCallback +} + +#ifndef SDK_NOINIT + +static asm void +/*---------------------------------------------------------------------------* + Name: INITi_ShelterStaticInitializer + Description: 各オートロードセグメント内の static initializer へのポインタ + テーブルを IRQ スタックの最上部に退避する。 + Arguments: ptr - セグメント内のポインタテーブルへのポインタ。 + テーブルは NULL で終端されている必要がある。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static asm void +INITi_ShelterStaticInitializer(u32* ptr) +{ + /* 引数確認 */ + cmp r0, #0 + bxeq lr + + /* 退避場所先頭アドレスを計算 */ + ldr r1, =HW_PRV_WRAM_IRQ_STACK_END + ldr r2, =SDK_IRQ_STACKSIZE + sub r1, r1, r2 + add r1, r1, #4 +@001: + /* 退避場所先頭から空き場所を調査 */ + ldr r2, [r1] + cmp r2, #0 + addne r1, r1, #4 + bne @001 +@002: + /* 空き場所にテーブルをコピー */ + ldr r2, [r0], #4 + str r2, [r1], #4 + cmp r2, #0 + bne @002 + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: INITi_CallStaticInitializers + Description: 各オートロードセグメント内の static initializer を呼び出す。 + オートロード処理によって IRQ スタックの最上部に退避されている + 関数ポインタテーブルを一つずつ呼び出す。 + Arguments: なし。 + Returns: なし。 + *---------------------------------------------------------------------------*/ +static asm void +INITi_CallStaticInitializers(void) +{ + stmdb sp!, {lr} + + /* テーブル退避場所先頭アドレスを計算 */ + ldr r1, =HW_PRV_WRAM_IRQ_STACK_END + ldr r2, =SDK_IRQ_STACKSIZE + sub r1, r1, r2 + add r1, r1, #4 +@001: + /* テーブルに管理されているポインタを一つずつ呼び出し */ + ldr r0, [r1] + cmp r0, #0 + beq @002 + stmfd sp!, {r1} + mov lr, pc + bx r0 + ldmfd sp!, {r1} + /* 一旦呼び出したポインタはゼロクリア (IRQスタックを間借りしている為) */ + mov r0, #0 + str r0, [r1], #4 + b @001 +@002: + ldmia sp!, {lr} + bx lr +} +#endif + +/*---------------------------------------------------------------------------* + Name: INITi_Copy32 + Description: 32 bit 単位でコピーを行う。スタックを 36 バイト消費するが、 + レジスタ r3 - r12 は破壊しない。 + Arguments: r0 - コピー先へのポインタ ( 4 バイトアライン )。 + r1 - コピー元へのポインタ ( 4 バイトアライン )。 + r2 - コピーする長さをバイト単位で指定 ( 4 の倍数 )。 + Returns: r0 - コピー後のコピー先へのポインタ ( r0 + r2 )。 + r1 - コピー後のコピー元へのポインタ ( r1 + r2 )。 + *---------------------------------------------------------------------------*/ +static asm void* +INITi_Copy32(void* dst, void* src, u32 size) +{ + stmfd sp!, {r3-r11} + + bics r3, r2, #0x0000001f + beq @next + add r3, r0, r3 +@loop: + ldmia r1!, {r4-r11} + stmia r0!, {r4-r11} + cmp r3, r0 + bgt @loop +@next: + tst r2, #0x00000010 + ldmneia r1!, {r4-r7} + stmneia r0!, {r4-r7} + tst r2, #0x00000008 + ldmneia r1!, {r4-r5} + stmneia r0!, {r4-r5} + tst r2, #0x00000004 + ldmneia r1!, {r4} + stmneia r0!, {r4} + + ldmfd sp!, {r3-r11} + bx lr +} + +/*---------------------------------------------------------------------------* + Name: INITi_Fill32 + Description: 32 bit 単位でバッファ内容を指定データで埋める。スタックを 36 + バイト消費するが、レジスタ r3 - r12 は破壊しない。 + Arguments: r0 - バッファへのポインタ ( 4 バイトアライン )。 + r1 - バッファを埋める内容を 32 bit 値で指定。 + r2 - バッファを埋める長さをバイト単位で指定 ( 4 の倍数 )。 + Returns: r0 - 処理後のバッファへのポインタ ( r0 + r2 )。 + *---------------------------------------------------------------------------*/ +static asm void* +INITi_Fill32(void* dst, u32 value, u32 size) +{ + stmfd sp!, {r3-r11} + + mov r4, r1 + mov r5, r1 + mov r6, r1 + mov r7, r1 + mov r8, r1 + mov r9, r1 + mov r10, r1 + mov r11, r1 + bics r3, r2, #0x0000001f + beq @next + add r3, r0, r3 +@loop: + stmia r0!, {r4-r11} + cmp r3, r0 + bgt @loop +@next: + tst r2, #0x00000010 + stmneia r0!, {r4-r7} + tst r2, #0x00000008 + stmneia r0!, {r4-r5} + tst r2, #0x00000004 + stmneia r0!, {r4} + + ldmfd sp!, {r3-r11} + bx lr +} + +#include diff --git a/build/tests/TitleHashChecker/ARM7.TWL/src/initScfg.c b/build/tests/TitleHashChecker/ARM7.TWL/src/initScfg.c deleted file mode 100644 index f5028c80..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/src/initScfg.c +++ /dev/null @@ -1,108 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - mongoose.TWL - File: initScfg.c - - Copyright 2008 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:: 2008-04-01#$ - $Rev: 5238 $ - $Author: nakasima $ - *---------------------------------------------------------------------------*/ - -#include -#include - -extern void INIT_InitializeScfg(void); - -#include -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: ローダーが行う SCFG ブロックへの設定処理を代行する為の関数。 - crt0 内の弱シンボルを上書きする。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -asm void -INIT_InitializeScfg(void) -{ - // SCFG enable? - ldr r2, =REG_EXT_ADDR - ldr r0, [r2] - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @end - - /* NITRO 互換無線の送受信機能を動作 */ - ldr r1, =REG_WL_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_WL_OFFB_MASK - strh r0, [r1] - - /* 新規サウンドブロックへのクロック供給 */ - ldr r1, =REG_CLK_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_CLK_SNDMCLK_MASK - strh r0, [r1] - - /* ARM7 側の DMA には新 DMA 回路を採用 */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - orr r0, r0, #REG_SCFG_EXT_DMAC_MASK - str r0, [r1] - - ldr r2, =HW_PRV_WRAM_SYSRV - //EXT(extentions) - ldr r3, =REG_EXT_ADDR - ldr r0, [r3] - str r0, [r2, #HWi_WSYS04_WRAMOFFSET] - //OPT(bonding option) - ldr r3, =REG_OP_ADDR - ldrb r0, [r3] - //A9ROM(ARM9 ROM) - ldr r3, =REG_A9ROM_ADDR - ldrb r1, [r3] - and r12,r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) - //A7ROM(ARM7 ROM) - ldr r3, =REG_A7ROM_ADDR - ldrb r1, [r3] - and r12,r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) - //DS-WL(DS wireless) - ldr r3, =REG_WL_ADDR - ldrb r1, [r3] - and r12,r1, #REG_SCFG_WL_OFFB_MASK - orr r0, r0, r12, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) - strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - //OPT(JTAG info) - ldr r3, =REG_JTAG_ADDR - ldrh r0, [r3] - and r12,r0, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r12, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - //CLK(only wram clock) - ldr r3, =REG_CLK_ADDR - ldrh r1, [r3] - and r12,r1, #(REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS09_CLK_SD1HCLK_SHIFT - REG_SCFG_CLK_SD1HCLK_SHIFT) - and r12,r1, #(REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK) - orr r0, r0, r12, LSR #(REG_SCFG_CLK_WRAMHCLK_SHIFT - HWi_WSYS09_CLK_WRAMHCLK_SHIFT) - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] - - /* A7-SCFG ブロックへのアクセスを無効化 */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - bic r0, r0, #REG_SCFG_EXT_CFG_MASK - str r0, [r1] - -@end: - bx lr -} -#include diff --git a/build/tests/TitleHashChecker/ARM7.TWL/src/main.c b/build/tests/TitleHashChecker/ARM7.TWL/src/main.c index 7876201c..a1ad1689 100644 --- a/build/tests/TitleHashChecker/ARM7.TWL/src/main.c +++ b/build/tests/TitleHashChecker/ARM7.TWL/src/main.c @@ -1,8 +1,8 @@ /*---------------------------------------------------------------------------* - Project: TwlSDK - components - mongoose.TWL + Project: TwlSDK - components - armadillo.TWL File: main.c - Copyright 2007-2009 Nintendo. All rights reserved. + Copyright 2008 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo @@ -10,120 +10,84 @@ 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:: 2009-06-11#$ - $Rev: 10743 $ - $Author: okajima_manabu $ + $Date:: 2008-08-18#$ + $Rev: 2182 $ + $Author: kamikawa $ *---------------------------------------------------------------------------*/ #include #include #include #include -#include -#include -#include -#include -#include -#ifndef SDK_ARM7COMP_WO_WIRELESS -#include -#include -#endif // SDK_ARM7COMP_WO_WIRELESS -#ifndef SDK_ARM7COMP_WO_CAMERA -#include -#endif -#include -#include -#include #include -#include -#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include "nvram_sp.h" #include "kami_pxi.h" -#ifdef SDK_SEA -#include -#endif // ifdef SDK_SEA +#include /*---------------------------------------------------------------------------* 定数定義 *---------------------------------------------------------------------------*/ -#ifndef SDK_ARM7COMP_WO_WIRELESS -#define WM_WL_HEAP_SIZE 0x2100 -#define ATH_DRV_HEAP_SIZE 0x5800 -#define WPA_HEAP_SIZE 0x1C00 -#endif // SDK_ARM7COMP_WO_WIRELESS - -#define MEM_TYPE_WRAM 0 -#define MEM_TYPE_MAIN 1 - -/* Priorities of each threads */ -#define THREAD_PRIO_MCU 1 //4 /* ハードウェアリセット時に他のスレッドに優先して動く必要アリ */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 +/* 各スレッド優先度 */ +#define THREAD_PRIO_SPI 2 +#define THREAD_PRIO_MCU 4 // 暫定 +#define THREAD_PRIO_SND 6 +#define THREAD_PRIO_NWM_EVENT 7 +#define THREAD_PRIO_NWM_SDIO 8 +#define THREAD_PRIO_FATFS 8 +#define THREAD_PRIO_NWM_COMMAND 9 +#define THREAD_PRIO_NWM_WPA 10 +#define THREAD_PRIO_HOTSW 11 +#define THREAD_PRIO_AES 12 +#define THREAD_PRIO_SEA 12 +#define THREAD_PRIO_RTC 12 +#define THREAD_PRIO_SNDEX 14 +#define THREAD_PRIO_FS 15 /* OS_THREAD_LAUNCHER_PRIORITY 16 */ -#ifndef SDK_ARM7COMP_WO_WIRELESS -#define NWM_DMANO NWMSP_DMA_7 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_NWM_WPA 10 -#endif // SDK_ARM7COMP_WO_WIRELESS +/* ROM 内登録エリアの拡張言語コード */ +#define ROMHEADER_FOR_CHINA_BIT 0x80 +#define ROMHEADER_FOR_KOREA_BIT 0x40 -// ROM 内登録エリアの拡張言語コード -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 +/* 使用 DMA 番号 */ +#define DMA_NO_FATFS FATFS_DMA_4 // = 0 +#define DMA_NO_NWM 3 + +/* カードチャタリングカウンタ */ +#define CHATTERING_COUNTER 0x1988 // 100ms分 (0x1988 * 15.3us = 100000us) -#include -// エラーメッセージ用の文字列(コードサイズ削減のために用意、MAIN に配置するために const にしない) -static char strARM7[] ="ARM7:"; -static char strMemMAIN[] ="MAIN"; -static char strMemWRAM[] ="WRAM"; -static char strFailedCreateHeap[] ="%sFailedToCreateHeap.(%s)\n"; -static char strHeapSizeIs[] ="%s_HeapSize=%d (Margin:%d)\n"; -static char strInsufficientHeapSize[] ="%sInsufficientHeapSize. (0x%x < 0x%x)\n"; -#include -#include -static char strWramBeforeAdd[] ="WRAM(BeforeAddToHeap)"; -static char strMainBeforeAdd[] ="MAIN(BeforeAddToHeap)"; -#include /*---------------------------------------------------------------------------* 内部関数定義 *---------------------------------------------------------------------------*/ static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(u8 memType); -static OSHeapHandle InitializeAllocateSystemCore(u8 memType); -#ifdef SDK_TWLHYB -static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType); -#endif -static void DummyThread(void* arg); +static OSHeapHandle InitializeAllocateSystem(void); +static void InitializeFatfs(void); +static void InitializeNwm(OSHeapHandle hh); +static void InitializeCardPower(void); +static void InitializeCdc(void); + static void ReadUserInfo(void); #ifdef NVRAM_CONFIG_DATA_EX_VERSION static BOOL IsValidConfigEx(void); static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp); +static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); #else -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp); +static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); #endif static void VBlankIntr(void); -static void InitializeFatfs(void); -#ifndef SDK_ARM7COMP_WO_WIRELESS -static void InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle); -#endif // SDK_ARM7COMP_WO_WIRELESS -/*---------------------------------------------------------------------------* - 外部シンボル参照 - *---------------------------------------------------------------------------*/ -#ifdef SDK_TWLHYB -extern void SDK_LTDAUTOLOAD_LTDWRAM_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void); -#endif /*---------------------------------------------------------------------------* Name: TwlSpMain @@ -134,143 +98,64 @@ extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void); void TwlSpMain(void) { - OSHeapHandle wramHeapHandle; -#ifdef SDK_TWLLTD -#ifndef SDK_ARM7_ONLY_WRAM - OSHeapHandle mainHeapHandle; -#endif -#else - OSHeapHandle mainHeapHandle; -#endif + OSHeapHandle heapHandle; - -#ifndef SDK_ARM7COMP_WO_WIRELESS -#ifdef SDK_WIRELESS_IN_VRAM - WVR_ShelterExtWram(); -#endif -#endif - - // OS 初期化 + /* OS 初期化 */ OS_Init(); PrintDebugInfo(); - // NVRAM からユーザー情報読み出し + /* NVRAM からユーザー情報読み出し */ ReadUserInfo(); - // ヒープ領域設定 - wramHeapHandle = InitializeAllocateSystem(MEM_TYPE_WRAM); -#ifdef SDK_TWLLTD -#ifndef SDK_ARM7_ONLY_WRAM - mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); -#endif -#else - mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); -#endif + /* ヒープ領域設定 */ + heapHandle = InitializeAllocateSystem(); - // ボタン入力サーチ初期化 + /* ボタン入力サーチ初期化 */ (void)PAD_InitXYButton(); - // 割り込み許可 + /* 割込み許可 */ (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); (void)OS_EnableIrqMask(OS_IE_V_BLANK); (void)GX_VBlankIntr(TRUE); (void)OS_EnableIrq(); (void)OS_EnableInterrupts(); - KamiPxiInit(); - - // ファイルシステム初期化 - FS_Init(FS_DMA_NOT_USE); - FS_CreateReadServerThread(THREAD_PRIO_FS); - - if (OS_IsRunOnTwl() == TRUE) - { - InitializeFatfs(); // FATFS 初期化 -#ifndef SDK_ARM7COMP_WO_WIRELESS -#ifndef SDK_SEA // !暫定処置! - // NWM 初期化 -#ifdef SDK_TWLLTD -#ifdef SDK_ARM7_ONLY_WRAM - InitializeNwm(wramHeapHandle, wramHeapHandle); // tarsier コンポーネントでは、ヒープは全て WRAM -#else - InitializeNwm(mainHeapHandle, mainHeapHandle); // LIMITED モードでは 無線のヒープを MAIN から確保 +#ifndef NAND_INITIALIZER_LIMITED_MODE + KamiPxiInit(); #endif -#else - InitializeNwm(wramHeapHandle, mainHeapHandle); // HYBRID モードでは 無線のヒープを WRAM から確保 -#endif -#endif // ifndef SDK_SEA -#endif // SDK_ARM7COMP_WO_WIRELESS - AES_Init(AES_DMA_5, AES_DMA_6, THREAD_PRIO_AES); // AES 初期化 -#ifdef SDK_SEA - SEA_Init(THREAD_PRIO_SEA); -#endif // ifdef SDK_SEA - MCU_InitIrq(THREAD_PRIO_MCU); // MCU 初期化 - CDC_InitLib(); // CODECライブラリ初期化 - } + /* 各ライブラリ初期化 */ + AES_Init(THREAD_PRIO_AES); // AES + SEA_Init(THREAD_PRIO_SEA); // SEA + FS_Init(FS_DMA_NOT_USE); // FS for CARD + FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD + InitializeFatfs(); // FAT-FS + InitializeNwm(heapHandle); // TWL 無線 + MCU_InitIrq(THREAD_PRIO_MCU); // マイコン -#ifndef SDK_ARM7COMP_WO_CAMERA if (OSi_IsCodecTwlMode() == TRUE) { - // カメラ初期化 - CAMERA_Init(); - /* CODEC が TWL モードでないとシャッター音を強制的に鳴らす - 機能が使用できません。この為、CODEC が TWL モードの場合 - にのみカメラライブラリを使用可能な状態にします。 */ - } -#endif - - // サウンド初期化 - SND_Init(THREAD_PRIO_SND); - if (OS_IsRunOnTwl() == TRUE) - { - SNDEX_Init(THREAD_PRIO_SNDEX); + InitializeCdc(); // CODEC + CAMERA_Init(); // カメラ } - // RTC 初期化 - RTC_Init(THREAD_PRIO_RTC); - - // 旧無線初期化 -#ifndef SDK_ARM7COMP_WO_WIRELESS - -#ifndef SDK_WIRELESS_IN_VRAM - -#ifndef SDK_SEA // !暫定処置! - WVR_Begin(wramHeapHandle); -#endif // ifdef SDK_SEA - -#else /* SDK_WIRELESS_IN_VRAM */ - WVR_Init(wramHeapHandle); -#endif - -#endif // SDK_ARM7COMP_WO_WIRELESS - - // SPI 初期化 + SND_Init(THREAD_PRIO_SND); // サウンド + SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張 + RTC_Init(THREAD_PRIO_RTC); // RTC + WVR_Begin(heapHandle); // NITRO 無線 SPI_Init(THREAD_PRIO_SPI); + InitializeCardPower(); // カード電源ON(検査プログラム用) while (TRUE) { OS_Halt(); - - //---- check reset - if (OS_IsResetOccurred()) - { - //VIB_STOP - CTRDG_VibPulseEdgeUpdate(NULL); - - OS_ResetSystem(); - } - - //---- check pull out cartridge - CTRDG_CheckPullOut_Polling(); - -#ifndef SDK_SMALL_BUILD - //---- check pull out card - CARD_CheckPullOut_Polling(); -#endif + + /* ソフトウェアリセット要求は監視しない */ + /* AGB カートリッジの挿抜チェックは行わない */ + /* DS カードの挿抜チェックは行わない */ } } -#include + /*---------------------------------------------------------------------------* Name: PrintDebugInfo Description: ARM7 コンポーネントの情報をデバッグ出力する。 @@ -280,47 +165,66 @@ TwlSpMain(void) static void PrintDebugInfo(void) { - if(OS_IsRunOnTwl()) - { - OS_TPrintf("%s TWL\n",strARM7); - } - else - { - OS_TPrintf("%s NITRO\n",strARM7); - } -#ifdef SDK_SEA -#ifdef SDK_TWLLTD - OS_TPrintf("%s armadillo.TWL\n",strARM7); -#else /* ifdef SDK_TWLLTD */ -#error invalid parameter combination -#endif /* ifdef SDK_TWLLTD else */ -#else /* ifdef SDK_SEA */ -#ifdef SDK_TWLLTD -#ifdef SDK_ARM7_ONLY_WRAM - OS_TPrintf("%s tarsier.TWL\n",strARM7); -#else -#if defined(SDK_ARM7COMP_WO_WIRELESS) && defined(SDK_ARM7COMP_WO_CAMERA) - OS_TPrintf("%s ferret.TWL\n", strARM7); -#else - OS_TPrintf("%s racoon.TWL\n",strARM7); -#endif -#endif -#else /* ifdef SDK_TWLLTD */ -#ifdef SDK_WIRELESS_IN_VRAM - OS_TPrintf("%s ichneumon.TWL\n",strARM7); -#else /* ifdef SDK_WIRELESS_IN_VRAM */ - OS_TPrintf("%s mongoose.TWL\n",strARM7); -#endif /* ifdef SDK_WIRELESS_IN_VRAM else */ -#endif /* ifdef SDK_TWLLTD else */ -#endif /* ifdef SDK_SEA else */ + OS_TPrintf("ARM7: This component is running on TWL.\n"); + OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); +} + +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystem + Description: メモリ割当てシステムを初期化する。 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle +InitializeAllocateSystem(void) +{ + OSHeapHandle hh; + void* subLo = (void*)OS_GetWramSubArenaLo(); + void* subHi = (void*)OS_GetWramSubArenaHi(); + void* privLo = (void*)OS_GetWramSubPrivArenaLo(); + void* privHi = (void*)OS_GetWramSubPrivArenaHi(); + + if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) + { + /* SUB アリーナを SUBPRIV アリーナに吸収 */ + OS_SetWramSubArenaHi(subLo); + OS_SetWramSubPrivArenaLo(subLo); + privLo = subLo; + } + + /* アリーナを 0 クリア */ + MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); + + /* ヒープ作成初期化 */ + privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); + if (hh < 0) + { + OS_Panic("ARM7: Failed to create heap.\n"); + } + + /* カレントヒープに設定 */ + (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + /* ヒープサイズの確認 */ + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + if (heapSize <= 0) + { + OS_Panic("ARM7: Failed to create heap.\n"); + } + OS_TPrintf("ARM7: heap size [%d]\n", heapSize); + } + + return hh; } -#include -#include /*---------------------------------------------------------------------------* Name: InitializeFatfs - Description: FATFSライブラリを初期化する。FATFS初期化関数内でスレッド休止 - する為、休止中動作するダミーのスレッドを立てる。 + Description: FATFSライブラリを初期化する。 Arguments: None. Returns: None. *---------------------------------------------------------------------------*/ @@ -333,410 +237,81 @@ InitializeFatfs(void) // do nothing } } -#include -#ifndef SDK_ARM7COMP_WO_WIRELESS -#include /*---------------------------------------------------------------------------* Name: InitializeNwm Description: NWMライブラリを初期化する。 - Arguments: None. + Arguments: hh - 利用可能なヒープのハンドルを指定。 Returns: None. *---------------------------------------------------------------------------*/ static void -InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle) +InitializeNwm(OSHeapHandle hh) { - NwmspInit nwmInit; + NwmspInit nwmInit; - nwmInit.dmaNo = NWM_DMANO; - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; + /* [TODO] 確保しているヒープ領域が新無線一式が必要としているメモリ量以上かのチェックが必要 */ -#ifdef SDK_TWLLTD -#ifdef SDK_ARM7_ONLY_WRAM - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ -#else - nwmInit.drvHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ -#endif -#else - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ -#endif - nwmInit.drvHeap.handle = drvHeapHandle; + nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; + nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; + nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; -#ifdef SDK_TWLLTD -#ifdef SDK_ARM7_ONLY_WRAM - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ -#else - nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ -#endif -#else - nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ -#endif - nwmInit.wpaHeap.handle = wpaHeapHandle; + nwmInit.dmaNo = DMA_NO_NWM; + nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; + nwmInit.drvHeap.handle = hh; + + nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; + nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; + nwmInit.wpaHeap.handle = hh; NWMSP_Init(&nwmInit); - } -#include -#endif // SDK_ARM7COMP_WO_WIRELESS -#include /*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSライブラリ、CDCライブラリを初期化する際に立てるダミーの - スレッド。 - Arguments: arg - 使用しない。 + Name: InitializeCardPower + Description: カード電源をONする。 + Arguments: None. Returns: None. *---------------------------------------------------------------------------*/ static void -DummyThread(void* arg) +InitializeCardPower(void) { -#pragma unused(arg) - while (TRUE) - { - } -} -#include + // チャッタリングカウンタの値を設定 + reg_MI_MC1 = (u32)((reg_MI_MC1 & ~REG_MI_MC1_CC_MASK) | + (CHATTERING_COUNTER << REG_MI_MC1_CC_SHIFT)); -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: メモリ割当てシステムを初期化する。 - Arguments: None. - Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystem(u8 memType) -{ + // チャタリングカウンタ分待つことによりCDETが0になる + OS_SpinWait( OS_MSEC_TO_CPUCYC(200) ); - OSHeapHandle hh; - -#ifdef SDK_TWLHYB - if( OS_IsRunOnTwl() == TRUE) - { - hh = InitializeAllocateSystemCoreEx(memType); /* Hybrid を TWL で動作させる */ - } - else -#endif - { - hh = InitializeAllocateSystemCore(memType); /* Hybrid を DS で動作させる or Limited */ - } - - return hh; + // カードスロット1電源ON + HOTSWi_TurnCardPowerOn(1); } /*---------------------------------------------------------------------------* - Name: InitializeAllocateSystemCore - Description: メモリ割当てシステムを初期化する。 - Hybrid を DS で動作させた場合、Limited を TWL で動作させた場合に動作 + Name: InitializeCdc + Description: CDCライブラリを初期化する。 Arguments: None. - Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + Returns: None. *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystemCore(u8 memType) +static void +InitializeCdc(void) { - OSHeapHandle hh; + u32 spiLockId; - /* MAIN */ - if(memType == MEM_TYPE_MAIN) - { - { - void* lo = (void*)OS_GetSubPrivArenaLo(); - void* hi = (void*)OS_GetSubPrivArenaHi(); + spiLockId = (u32)OS_GetLockID(); + if (spiLockId == OS_LOCK_ID_ERROR) + { + OS_Warning("OS_GetLockID failed.\n"); + } - // アリーナを 0 クリア - MI_CpuClear8(lo, (u32)hi - (u32)lo); - - // メモリ割り当て初期化 - lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1); - // アリーナ下位アドレスを設定 - OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo); - - // ヒープ作成 - hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi); - - if (hh < 0) - { - OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); - } - } - // カレントヒープに設定 - (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); - // ヒープサイズの確認 - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ - { - OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); - } - - #ifdef SDK_TWLLTD -#ifndef SDK_ARM7COMP_WO_WIRELESS - { - if ((ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) > heapSize) - { - OS_Panic(strInsufficientHeapSize, strARM7, heapSize, ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE); - } - } - OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize - (ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) ); -#else - OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize); -#endif - #else - OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize); - #endif - } - } - - /* WRAM */ - if( memType == MEM_TYPE_WRAM) - { - { - void* lo = (void*)OS_GetWramSubPrivArenaLo(); - void* hi = (void*)OS_GetWramSubPrivArenaHi(); - - // アリーナを 0 クリア - MI_CpuClear8(lo, (u32)hi - (u32)lo); - - // メモリ割り当て初期化 - lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1); - // アリーナ下位アドレスを設定 - OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo); - - // ヒープ作成 - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi); - - if (hh < 0) - { - OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); - } - } - - // カレントヒープに設定 - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - // ヒープサイズの確認 - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ - { - OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); - } - -#ifndef SDK_ARM7COMP_WO_WIRELESS - if (WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WM_WL_HEAP_SIZE); - } - OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, (heapSize-WM_WL_HEAP_SIZE)); -#else - OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, heapSize); -#endif - } - } - return hh; + /* CODEC 初期化 */ + SPI_Lock(spiLockId); + CDC_Init(); + SPI_Unlock(spiLockId); } -#ifdef SDK_TWLHYB -#include -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystemCoreEx - Description: メモリ割当てシステムを初期化する。 - Hybrid を TWL で動作させた場合に動作 - Arguments: None. - Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType) -{ - OSHeapHandle hh; - - if(memType == MEM_TYPE_MAIN) - { - { - void* basicLo = (void*)OS_GetSubPrivArenaLo(); - void* basicHi = (void*)OS_GetSubPrivArenaHi(); - void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32); - void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32); - -// メモリ節約のためにコメントアウト -/* -#if SDK_DEBUG - // debug information - OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo); - OS_TPrintf("ARM7: MAIN arena basicHi = %p\n", basicHi); - OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo); - OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi); -#endif -*/ - // アリーナを 0 クリア - MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); - MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); - - // メモリ割り当て初期化 - if ((u32)basicLo < (u32)extraLo) - { - basicLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, basicLo, extraHi, 1); - // アリーナ下位アドレスを設定 - OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, basicLo); - } - else - { - extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1); - } - - // ヒープ作成 - hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi); - - if (hh < 0) - { - OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); - } - - // ヒープサイズの確認 - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ - { - OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); - } - - OS_TPrintf(strHeapSizeIs, strMainBeforeAdd, heapSize, heapSize); - } - - // ヒープに拡張ブロックを追加 - OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi); - } - // カレントヒープに設定 - (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); - // ヒープサイズの確認 - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ - { - OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); - } - -#ifndef SDK_ARM7COMP_WO_WIRELESS - if ((WPA_HEAP_SIZE) > heapSize) - { - OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WPA_HEAP_SIZE); - } - OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, (heapSize-WPA_HEAP_SIZE)); -#else - OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize); -#endif - } - } - - if(memType == MEM_TYPE_WRAM) - { - { - void* basicLo = (void*)OS_GetWramSubPrivArenaLo(); - void* basicHi = (void*)OS_GetWramSubPrivArenaHi(); - void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32); - void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32); - -// メモリ節約のためにコメントアウト -/* -#if SDK_DEBUG - // debug information - OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo); - OS_TPrintf("ARM7: WRAM arena basicHi = %p\n", basicHi); - OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo); - OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi); -#endif -*/ - // アリーナを 0 クリア - MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); - MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); - - // メモリ割り当て初期化 - if ((u32)basicLo < (u32)extraLo) - { - basicLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, basicLo, extraHi, 1); - // アリーナ下位アドレスを設定 - OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, basicLo); - } - else - { - extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1); - } - - // ヒープ作成 - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi); - - if (hh < 0) - { - OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); - } - - // ヒープサイズの確認 - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ - { - OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); - } - - if (WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WM_WL_HEAP_SIZE); - } - OS_TPrintf(strHeapSizeIs, strWramBeforeAdd, heapSize, (heapSize - WM_WL_HEAP_SIZE) ); - } - - // ヒープに拡張ブロックを追加 - OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi); - } - - // カレントヒープに設定 - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - // ヒープサイズの確認 - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ - { - OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); - } - -#ifndef SDK_ARM7COMP_WO_WIRELESS - if (ATH_DRV_HEAP_SIZE + WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE ); - } - OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, heapSize - (WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE) ); -#else - OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, (heapSize - WM_WL_HEAP_SIZE) ); -#endif - } - } - - return hh; -} -#include -#endif - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif +//#ifdef WM_PRECALC_ALLOWEDCHANNEL +//extern u16 WMSP_GetAllowedChannel(u16 bitField); +//#endif /*---------------------------------------------------------------------------* Name: ReadUserInfo @@ -830,7 +405,7 @@ static void ReadUserInfo(void) // 共有領域に展開 MI_CpuCopy8(wMac, p, 6); } - +/* #ifdef WM_PRECALC_ALLOWEDCHANNEL // 使用可能チャンネルから使用許可チャンネルを計算 { @@ -847,6 +422,7 @@ static void ReadUserInfo(void) *((u16 *)p) = allowedChannel; } #endif +*/ } #ifdef NVRAM_CONFIG_DATA_EX_VERSION @@ -1066,7 +642,7 @@ static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) Returns: None. *---------------------------------------------------------------------------*/ extern BOOL PMi_Initialized; -void PM_SelfBlinkProc(void); +extern void PM_SelfBlinkProc(void); static void VBlankIntr(void) diff --git a/build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf b/build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf new file mode 100644 index 00000000..27b5d91f --- /dev/null +++ b/build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf @@ -0,0 +1,57 @@ +#---------------------------------------------------------------------------- +# Project: TwlSDK - include +# File: ARM9-TS.lsf +# +# Copyright 2007 Nintendo. All rights reserved. +# +# These coded insructions, 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-12-05#$ +# $Rev: 2840 $ +# $Author: yosizaki $ +#---------------------------------------------------------------------------- +# +# TWL LCF SPEC FILE +# + +Static $(TARGET_NAME) +{ + Address $(ADDRESS_STATIC) + Object $(OBJS_STATIC) + Library $(LLIBS) $(GLIBS) $(CW_LIBS) + StackSize 4096 4096 +} + +Autoload ITCM +{ + Address $(ADDRESS_ITCM) + Object * (.itcm) + Object $(OBJS_AUTOLOAD) (.text) + Object $(OBJS_AUTOLOAD) (.rodata) + Object $(OBJS_AUTOLOAD) (.init) + Object $(OBJS_AUTOLOAD) (.ctor) + Object $(OBJS_AUTOLOAD) (.sinit) +} + +Autoload DTCM +{ + Address $(ADDRESS_DTCM) + Object * (.dtcm) + Object $(OBJS_AUTOLOAD) (.data) + Object $(OBJS_AUTOLOAD) (.sdata) + Object $(OBJS_AUTOLOAD) (.bss) + Object $(OBJS_AUTOLOAD) (.sbss) +} + +Ltdautoload LTDMAIN +{ + # NITRO/TWL 共有のオーバーレイが在る場合は、さらにその後ろに配置する必要があります。 + After $(TARGET_NAME) + Object * (.ltdmain) + Object $(OBJS_LTDAUTOLOAD) + Library $(LLIBS_EX) $(GLIBS_EX) +} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/Makefile b/build/tests/TitleHashChecker/ARM9.TWL/Makefile index 6884672e..ede5846e 100644 --- a/build/tests/TitleHashChecker/ARM9.TWL/Makefile +++ b/build/tests/TitleHashChecker/ARM9.TWL/Makefile @@ -1,9 +1,9 @@ #! make -f #---------------------------------------------------------------------------- -# Project: TwlSDK - tests - TitleHashChecker +# Project: TwlIPL - systemMenu_RED - NandInitializerRed # File: Makefile # -# Copyright 2008 Nintendo. All rights reserved. +# Copyright 2007 Nintendo. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo @@ -11,46 +11,75 @@ # 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:: -# $Rev: -# $Author: +# $Date:: 2009-03-11#$ +# $Rev: 2763 $ +# $Author: akabane_jumpei $ #---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL - -TARGET_BIN = TitleHashChecker.srl - -INCDIR = ./include $(ROOT)/build/libraries/os/common/include -SRCDIR = ./src - -SRCS = main.c screen.c font.c common.c - -LLIBRARIES = liblcfg$(TWL_LIBSUFFIX).a \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -# libnamut$(TWL_LIBSUFFIX).a\ - -ROM_SPEC = ./ROM-TS_sys.rsf - -COMPONENT_NAME = armadillo_SYSMENU -MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/$(COMPONENT_NAME)/$(TWL_BUILDTYPE_ARM7)/$(COMPONENT_NAME) -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) #---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs +SYSM_DISABLE_DEBUG = FALSE -MAKEROM := $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe +TARGET_FIRM = SYSTEMMENU +TARGET_PLATFORM = TWL +TWL_ARCHGEN = LIMITED -do-build: $(TARGETS) +#TARGET_CODEGEN = THUMB + +TITLEID_LO = 0NRA +#TARGET_TAD = + +TARGET_BIN = NandFirmWriter.srl +LCFILE_SPEC = ARM9-TS.lsf +ROM_SPEC = main.rsf + +MAKEROM_ARM7_BASE = ../ARM7.TWL/bin/$(TWL_BUILDTYPE_ARM7)/armadillo +MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) + +SRCS = main.c \ + common.c \ + font.c \ + screen.c \ + kami_pxi.c + +LINCLUDES = ../common/include \ + $(ROOT)/build/libraries/lcfg/ARM9.TWL/include \ + ../../common/ARM9/include + +SRCDIR = src \ + ../../common/ARM9/src + +#LCFILE = # using default + +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/commondefs + +MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ + -DDISABLE_DEBUG='$(SYSM_DISABLE_DEBUG)' + +MAKETAD_FLAGS += -s + +SDK_APPEND_LIBS = \ + libes$(TWL_LIBSUFFIX).a \ + libboc$(TWL_LIBSUFFIX).a \ + libsfs$(TWL_LIBSUFFIX).a \ + libnam$(TWL_LIBSUFFIX).a \ + libsea$(TWL_LIBSUFFIX).a \ + liblcfg$(TWL_LIBSUFFIX).a \ + libna$(TWL_LIBSUFFIX).a + +LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) + +MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe + +#LDIRT_CLEAN = +#INSTALL_TARGETS = +INSTALL_DIR = $(SDK_NMENU_DATADIR) + +#---------------------------------------------------------------------------- + +do-build: $(TARGETS) include $(TWLSDK_ROOT)/build/buildtools/modulerules -#---------------------------------------------------------------------------- - #===== End of Makefile ===== - - diff --git a/build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h b/build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h new file mode 100644 index 00000000..4ac47057 --- /dev/null +++ b/build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h @@ -0,0 +1,112 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - NandInitializer + File: kami_pxi.h + + Copyright 2008 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:: 2008-07-25#$ + $Rev: 2003 $ + $Author: kamikawa $ + *---------------------------------------------------------------------------*/ + +#ifndef TWL_KAMI_TEST_KAMITEST_H_ +#define TWL_KAMI_TEST_KAMITEST_H_ + +#include "fifo.h" + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/*===========================================================================*/ + +// 処理結果定義 +typedef enum KAMIResult +{ + KAMI_RESULT_SUCCESS = 0, + KAMI_RESULT_SUCCESS_TRUE = 0, + KAMI_RESULT_SUCCESS_FALSE, + KAMI_RESULT_INVALID_COMMAND, + KAMI_RESULT_INVALID_PARAMETER, + KAMI_RESULT_ILLEGAL_STATUS, + KAMI_RESULT_BUSY, + KAMI_RESULT_FATAL_ERROR, + KAMI_RESULT_SEND_ERROR, + KAMI_RESULT_MAX +} +KAMIResult; + + +typedef enum { + FORMAT_MODE_QUICK, // Quickフォーマット + FORMAT_MODE_FULL // Fullフォーマット(各パーティション内を0xFFで埋める) +} FormatMode; + +// コールバック +typedef void (*KAMICallback)(KAMIResult result, void *arg); + + +void KamiPxiInit( void ); + +KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); +KAMIResult ExeFormat(FormatMode format_mode); +KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); +KAMIResult kamiMcuWriteFirm(void* buffer ); +KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); +KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); +KAMIResult kamiCDC_GoDsMode( void ); +KAMIResult kamiClearNandErrorLog( void ); +KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); +KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); +KAMIResult kamiGetNandCID( void* buffer ); + +// (重要) +// ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。 +// +static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) +{ + return kamiNandIo(block, buffer, count, TRUE); +} +static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count) +{ + return kamiNandIo(block, buffer, count, FALSE); +} +static KAMIResult kamiMcuRead(u8 reg_no, void* buffer) +{ + return kamiMcuIo((u32)reg_no, buffer, 0, TRUE); +} +static KAMIResult kamiMcuWrite(u8 reg_no, u8 value) +{ + return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE); +} +static KAMIResult kamiARM7Read(u32 addr, void* buffer) +{ + return kamiARM7Io(addr, buffer, 0, TRUE); +} +static KAMIResult kamiARM7Write(u32 addr, u8 value) +{ + return kamiARM7Io(addr, NULL, value, FALSE); +} + +/*===========================================================================*/ + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* TWL_KAMI_TEST_KAMITEST_H_ */ + +/*---------------------------------------------------------------------------* + End of file + *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h b/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h index 799a2b93..4b758ee9 100644 --- a/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h +++ b/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h @@ -25,6 +25,24 @@ extern "C" { /*===========================================================================*/ #include +// フォントの色 +#define COLOR_BLACK 0x10 +#define COLOR_RED 0x11 +#define COLOR_GREEN 0x12 +#define COLOR_BLUE 0x13 +#define COLOR_YELLOW 0x14 +#define COLOR_PURPLE 0x15 +#define COLOR_L_BLUE 0x16 +#define COLOR_D_RED 0x17 +#define COLOR_D_GREEN 0x18 +#define COLOR_D_BLUE 0x19 +#define COLOR_D_YELLOW 0x1a +#define COLOR_D_PURPLE 0x1b +#define COLOR_D_L_BLUE 0x1c +#define COLOR_GRAY 0x1d +#define COLOR_D_GRAY 0x1e +#define COLOR_WHITE 0x1f + /*---------------------------------------------------------------------------* 関数 定義 *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/ROM-TS_sys.rsf b/build/tests/TitleHashChecker/ARM9.TWL/main.rsf similarity index 57% rename from build/tests/TitleHashChecker/ARM9.TWL/ROM-TS_sys.rsf rename to build/tests/TitleHashChecker/ARM9.TWL/main.rsf index b9d0949c..aa90c945 100644 --- a/build/tests/TitleHashChecker/ARM9.TWL/ROM-TS_sys.rsf +++ b/build/tests/TitleHashChecker/ARM9.TWL/main.rsf @@ -1,6 +1,6 @@ #---------------------------------------------------------------------------- # Project: TwlSDK - include -# File: ROM-TS.rsf +# File: ROM-BB.rsf # # Copyright 2007 Nintendo. All rights reserved. # @@ -10,8 +10,8 @@ # 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:: 2008-07-23#$ -# $Rev: 7566 $ +# $Date:: 2008-01-07#$ +# $Rev: 436 $ # $Author: yosiokat $ #---------------------------------------------------------------------------- # @@ -57,7 +57,7 @@ Property # # TITLE NAME: Your product name within 12bytes # - #TitleName "MY APP NAME" + #TitleName "YourAppName" # # MAKER CODE: Your company ID# in 2 ascii words @@ -68,7 +68,7 @@ Property # # REMASTER VERSION: Mastering version # - #RomVersion 0 + RomVersion 2 # # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] @@ -76,9 +76,9 @@ Property RomSpeedType $(MAKEROM_ROMSPEED) # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] + # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] # - #RomSize 256M + #RomSize 2G # # ROM PADDING: TRUE if finalrom @@ -88,22 +88,12 @@ Property # # ROM HEADER TEMPLATE: Provided to every product by NINTENDO # - #RomHeaderTemplate ./resource/rom_header_0tca.template.sbin + #RomHeaderTemplate ./etc/rom_header.template.sbin # # BANNER FILE: generated from Banner Spec File # - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - # PermitLandingNormalJump TRUE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - # PermitLandingTmpJump FALSE + BannerFile ../banner/banner.bnr ### ### Setting for TWL @@ -120,8 +110,7 @@ Property DigestParam 1024 32 # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] + # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] # don't have to edit # WramMapping MAP_TS_SCR @@ -131,10 +120,25 @@ Property # CardRegion ALL + # + # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] + # + CommonClientKey TRUE + + # + # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] + # + HwAESSlotB TRUE + + # + # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] + # + HwAESSlotC TRUE + # # SDCardAccess: sd card access control [TRUE/FALSE] # - #SDCardAccess FALSE + SDCardAccess TRUE # # NANDAccess: NAND access control [TRUE/FALSE] @@ -148,40 +152,26 @@ Property CodecMode $(MAKEROM_CODEC_MODE) # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] + # SCFG: scfg lock [TRUE/FALSE] # - #WiFiConnectionIcon FALSE + LockSCFG FALSE # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] + # DisableDebug :最終ROMでは、実行時にデバッグできないようにTRUEにする必要があります。 # - #DSWirelessIcon FALSE + DisableDebug $(DISABLE_DEBUG) - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - ### #### END } + AppendProperty { # # Publisher : "Nintendo" # don't have to edit - #Publisher Nintendo + Publisher Nintendo # # Application type : [USER/SYSTEM] @@ -192,52 +182,43 @@ AppendProperty # launch title on the launcher : [TRUE/FALSE] # don't have to edit Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media GameCard # # Data only title : [TRUE/FALSE] # don't have to edit - #DataOnly FALSE + DataOnly FALSE # # Secure title : [TRUE/FALSE] # don't have to edit Secure TRUE + # + # Boot allowed Media: [GameCard/NAND] + # + Media GameCard + # # GameCode for TitleID : Your GameCode in 4 ascii words # - #GameCode 0TCA + GameCode $(TITLEID_LO) # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] + # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] # - #PublicSaveDataSize 0K + #PublicSaveDataSize 32K # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] + # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] # - #PrivateSaveDataSize 0K + #PrivateSaveDataSize 16K # # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode TRUE + #SubBannerFile TRUE } + RomSpec { Offset 0x00000000 @@ -246,38 +227,3 @@ RomSpec Root / File $(MAKEROM_ROMFILES) } - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/common.c b/build/tests/TitleHashChecker/ARM9.TWL/src/common.c index c7b9821f..c1b7c958 100644 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/common.c +++ b/build/tests/TitleHashChecker/ARM9.TWL/src/common.c @@ -36,7 +36,6 @@ void InitCommon(void) { OS_Init(); OS_InitTick(); - OS_InitAlarm(); GX_Init(); GX_DispOff(); diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c b/build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c new file mode 100644 index 00000000..101ac35f --- /dev/null +++ b/build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c @@ -0,0 +1,684 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - NandInitializer + File: kami_pxi.c + + Copyright 2008 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:: 2008-07-25#$ + $Rev: 2003 $ + $Author: kamikawa $ + *---------------------------------------------------------------------------*/ + +#include +#include "kami_pxi.h" +#include "fifo.h" + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +// 詰めてコピーする +#define KAMI_PACK_U16(d, s) \ + ((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \ + (d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF)) + +#define KAMI_PACK_U32(d, s) \ + ((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \ + (d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \ + (d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \ + (d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF)) + + +/*---------------------------------------------------------------------------* + 型定義 + *---------------------------------------------------------------------------*/ +typedef struct KamiWork +{ + BOOL lock; + + KamiCommand command; + KAMIPxiResult result; + KAMICallback callback; + void* arg; + + u32 total; + u32 current; + u8* data; +} +KamiWork; + +/*---------------------------------------------------------------------------* + 静的変数定義 + *---------------------------------------------------------------------------*/ +static BOOL kamiInitialized; +static KamiWork kamiWork; + +/*---------------------------------------------------------------------------* + 内部関数定義 + *---------------------------------------------------------------------------*/ +static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data); +static void KamiSendPxiData(u8 *pData); +static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); +static void KamiDone(KAMIResult result); +static void KamiWaitBusy(void); + + +void KamiPxiInit( void ) +{ + kamiWork.lock = FALSE; + + PXI_Init(); + while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_KAMITEST, PXI_PROC_ARM7 )) + { + } + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); + if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) + { + return; + } +} + + + +/////////////////////////////////////////////////////////////////// + +//typedef void (*KAMICallback)(KAMIResult result, void *arg); +/* +void CDC_ReadCallback(KAMIResult result, void* arg); +void CDC_ReadCallback(KAMIResult result, void* arg) +{ + +} +*/ + +/*---------------------------------------------------------------------------* + Name: フォーマット実行関数 + + Description: + + Arguments: FormatMode + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) +{ + OSIntrMode enabled; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = callback; + kamiWork.arg = 0; + kamiWork.data = 0; + + if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) + { + return KAMI_RESULT_SEND_ERROR; + } + return KAMI_RESULT_SUCCESS; +} + +KAMIResult ExeFormat(FormatMode format_mode) +{ + OSIntrMode enabled; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = 0; + + if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: NANDアクセス関数 + + Description: + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) +{ + OSIntrMode enabled; + u8 data[12]; + int i; + + MI_CpuClear8( data, sizeof(data)); + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = 0; + + // データ作成 + KAMI_PACK_U32(&data[0], &block); + KAMI_PACK_U32(&data[4], &buffer); + KAMI_PACK_U32(&data[8], &count); + + if (KamiSendPxiCommand(KAMI_NAND_IO, 13, (u8)is_read)) + { + for (i = 0; i < 12; i+=3) + { + KamiSendPxiData(&data[i]); + } + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiMcuWriteFirm + + Description: MCUファーム更新関数 + + Arguments: buffer : new mcu data buffer + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiMcuWriteFirm(void* buffer ) +{ + OSIntrMode enabled; + u8 data[4+2]; // 3の倍数 + int i; + + MI_CpuClear8( data, sizeof(data)); + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + + // データ作成 + KAMI_PACK_U32(&data[0], &buffer); + + if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0)) + { + for (i = 0; i < 4; i+=3) + { + KamiSendPxiData(&data[i]); + } + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: MCUアクセス関数 + + Description: + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) +{ + OSIntrMode enabled; + u8 data[12]; + int i; + + MI_CpuClear8( data, sizeof(data)); + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + if (is_read) + { + kamiWork.data = (u8*)buffer; + } + else + { + kamiWork.data = 0; + } + + // データ作成 + KAMI_PACK_U32(&data[0], ®_no); + KAMI_PACK_U32(&data[4], &value); + + if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read)) + { + for (i = 0; i < 12; i+=3) + { + KamiSendPxiData(&data[i]); + } + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + + +/*---------------------------------------------------------------------------* + Name: ARM7アクセス関数 + + Description: + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) +{ + OSIntrMode enabled; + u8 data[12]; + int i; + + MI_CpuClear8( data, sizeof(data)); + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + if (is_read) + { + kamiWork.data = (u8*)buffer; + } + else + { + kamiWork.data = 0; + } + + // データ作成 + KAMI_PACK_U32(&data[0], &addr); + KAMI_PACK_U32(&data[4], &value); + + if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read)) + { + for (i = 0; i < 12; i+=3) + { + KamiSendPxiData(&data[i]); + } + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiCDC_GoDsMode + + Description: CODECをDSモードへ遷移させる関数 + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiCDC_GoDsMode( void ) +{ + OSIntrMode enabled; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = 0; + + if (KamiSendPxiCommand(KAMI_CDC_GO_DSMODE, 0, (u8)0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiClearNandErrorLog + + Description: NVRAMのNANDエラー情報をクリアします。 + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiClearNandErrorLog( void ) +{ + OSIntrMode enabled; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = 0; + + if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiGetCameraModuleTypesAsync + + Description: カメラモジュールタイプを取得します(非同期版) + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ) +{ + OSIntrMode enabled; + + if (pTypes == NULL) + { + return KAMI_RESULT_INVALID_PARAMETER; + } + + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + kamiWork.callback = callback; + kamiWork.arg = arg; + kamiWork.data = (u8*)pTypes; + (void)OS_RestoreInterrupts(enabled); + + if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) + { + return KAMI_RESULT_SUCCESS; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiGetCameraModuleTypes + + Description: カメラモジュールタイプを取得します(同期版) + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) +{ + OSIntrMode enabled; + + if (pTypes == NULL) + { + return KAMI_RESULT_INVALID_PARAMETER; + } + + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = (u8*)pTypes; + (void)OS_RestoreInterrupts(enabled); + + if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiGetNandCID + + Description: NANDのCIDを取得します。 + + Arguments: buffer : 16バイトバッファ + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetNandCID(void* buffer ) +{ + OSIntrMode enabled; + u8 data[4+2]; // 3の倍数 + + MI_CpuClear8( data, sizeof(data)); + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = (u8*)buffer; + + if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + PXI関連 + *---------------------------------------------------------------------------*/ + +static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) +{ + u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | + ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | + ((size << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | + ((data << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); + if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) + { + return FALSE; + } + return TRUE; +} + +static void KamiSendPxiData(u8 *pData) +{ + u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]); + while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) + { + } +} + +static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) +{ +#pragma unused( tag ) + if (err) + { + KamiDone(KAMI_RESULT_FATAL_ERROR); + return; + } + if (data & KAMITEST_PXI_START_BIT) // 先頭データ + { + if (data & KAMITEST_PXI_RESULT_BIT) + { + kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); + kamiWork.current = 0; + kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); + kamiWork.result = (KAMIPxiResult)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); + } + else // 未知のデータ + { + KamiDone(KAMI_RESULT_FATAL_ERROR); + return; + } + } + else // 後続データ + { + if (kamiWork.data == NULL) + { + KamiDone(KAMI_RESULT_FATAL_ERROR); + return; + } + if (kamiWork.current < kamiWork.total-1) + { + kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); + } + if (kamiWork.current < kamiWork.total-1) + { + kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); + } + if (kamiWork.current < kamiWork.total-1) + { + kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); + } + } + if (kamiWork.current == kamiWork.total-1) + { + KAMIResult result; + switch (kamiWork.result) + { + case KAMI_PXI_RESULT_SUCCESS: // alias KAMI_PXI_RESULT_SUCCESS_TRUE + result = KAMI_RESULT_SUCCESS; // alias KAMI_RESULT_SUCCESS_TRUE + break; + case KAMI_PXI_RESULT_SUCCESS_FALSE: + result = KAMI_RESULT_SUCCESS_FALSE; + break; + case KAMI_PXI_RESULT_INVALID_COMMAND: + result = KAMI_RESULT_INVALID_COMMAND; + break; + case KAMI_PXI_RESULT_INVALID_PARAMETER: + result = KAMI_RESULT_INVALID_PARAMETER; + break; + case KAMI_PXI_RESULT_ILLEGAL_STATUS: + result = KAMI_RESULT_ILLEGAL_STATUS; + break; + case KAMI_PXI_RESULT_BUSY: + result = KAMI_RESULT_BUSY; + break; + default: + result = KAMI_RESULT_FATAL_ERROR; + } + KamiDone(result); + return; + } +} + +extern void PXIi_HandlerRecvFifoNotEmpty(void); +static void KamiWaitBusy(void) +{ + volatile BOOL *p = &kamiWork.lock; + + while (*p) + { + if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE) + { + PXIi_HandlerRecvFifoNotEmpty(); + } + } +} + +static void KamiDone(KAMIResult result) +{ + KAMICallback callback = kamiWork.callback; + void* arg = kamiWork.arg; + kamiWork.callback = NULL; + kamiWork.arg = NULL; + if (kamiWork.lock) + { + kamiWork.lock = FALSE; + } + if (callback) + { + callback(result, arg); + } +} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/main.c b/build/tests/TitleHashChecker/ARM9.TWL/src/main.c index bcaa506b..fedc7994 100644 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/main.c +++ b/build/tests/TitleHashChecker/ARM9.TWL/src/main.c @@ -23,6 +23,7 @@ #include "common.h" #include "screen.h" +#include "kami_pxi.h" #define TITLE_SHOW_BASE_Y 5 #define TITLE_MAX_SHOW 0x10 @@ -43,6 +44,9 @@ #define NAND_FIRM_INFO_OFS 1 #define SHARED_FONT_INFO_OFS 2 +#define NAND_BLOCK_BYTE 0x200 +#define NAND_FIRM_START_OFFSET 0x200 +#define NAND_FIRM_START_OFFSET_IN_FILE 0x200 /*---------------------------------------------------------------------------* 変数 定義 @@ -155,8 +159,9 @@ static void FreeForNAM(void* ptr); static BOOL ProcessTitleHashCheck(void); static BOOL GetAppPath(DataStruct* list, char* path_buf); -BOOL CulcuHash(DataStruct* list, char* full_path); -BOOL CulcuFontDataHash(DataStruct* list); +BOOL CulcuNandAppHash(DataStruct* list, char* full_path); +BOOL CulcuFontDataHash(DataStruct* list); +BOOL CulcuNandFirmHash(DataStruct* list); u16 newGetCRC(u16 start, u16 *datap, u32 size); static void inittable(unsigned short *table); @@ -179,6 +184,10 @@ void TwlMain(void) BOOL errorFlg = FALSE; InitCommon(); + KamiPxiInit(); + + FS_Init(FS_DMA_NOT_USE); + InitScreen(); GX_DispOn(); @@ -199,7 +208,7 @@ void TwlMain(void) ClearScreen(); // hash Check - (void)ProcessTitleHashCheck(); + ProcessTitleHashCheck(); // Disable Debug Check CheckDisableDebugFlg(); @@ -615,7 +624,7 @@ BOOL ProcessTitleHashCheck( void ) } // Hash, CRC16の計算 - if ( !CulcuHash(list, full_path) ) + if ( !CulcuNandAppHash(list, full_path) ) { gErrorFlg = TRUE; } @@ -623,8 +632,12 @@ BOOL ProcessTitleHashCheck( void ) // SharedフォントとNandファームの値用の2つ gNandAppNum += 2; - + + // SharedフォントのSha1値を求める CulcuFontDataHash(gDataList); + + // NandFirmのSha1値を求める + CulcuNandFirmHash(gDataList); OS_PutString("ProcessTitleHashCheck Finish!!\n"); @@ -748,19 +761,18 @@ static BOOL GetAppPath(DataStruct* list, char* path_buf) /*---------------------------------------------------------------------------* - Name: CulcuHash + Name: CulcuNandAppHash Description: Arguments: - Returns: - + *---------------------------------------------------------------------------*/ #define READ_SIZE 0x1000 // MasterEditorでのCRC計算にあわせるためこの値を使う -BOOL CulcuHash(DataStruct* list, char* full_path) +BOOL CulcuNandAppHash(DataStruct* list, char* full_path) { FSFile file; BOOL open_is_ok; @@ -836,7 +848,6 @@ BOOL CulcuHash(DataStruct* list, char* full_path) // CRC16計算 crc = newGetCRC(crc, (u16 *)pTempBuf, READ_SIZE); // 本来ならばここは data_size分の計算をすればよいが、 // MasterEditorのCRC計算にあわせるため、READ_SIZE分計算する - // Hash値 UpDate SVC_SHA1Update( &hash, pTempBuf, data_size ); @@ -880,7 +891,17 @@ BOOL CulcuHash(DataStruct* list, char* full_path) } -BOOL CulcuFontDataHash(DataStruct* list) +/*---------------------------------------------------------------------------* + Name: CulcuFontDataHash + + Description: + + Arguments: + + Returns: + + *---------------------------------------------------------------------------*/ +BOOL CulcuFontDataHash(DataStruct* list) { FSFile file; BOOL open_is_ok; @@ -892,7 +913,7 @@ BOOL CulcuFontDataHash(DataStruct* list) FSResult result; // ケツから2個目をSharedFont用のデータにする - DataStruct *data = &list[gNandAppNum-SHARED_FONT_INFO_OFS]; + DataStruct *data = &list[gNandAppNum - SHARED_FONT_INFO_OFS]; // ハッシュ初期化 SVC_SHA1Init( &hash ); @@ -944,6 +965,55 @@ BOOL CulcuFontDataHash(DataStruct* list) } +/*---------------------------------------------------------------------------* + Name: CulcuNandFirmHash + + Description: + + Arguments: + + Returns: + + *---------------------------------------------------------------------------*/ +BOOL CulcuNandFirmHash(DataStruct* list) +{ + u8* pTempBuf; + u32 alloc_size; + + // ケツから1個目をSharedFont用のデータにする + DataStruct *data = &list[gNandAppNum - NAND_FIRM_INFO_OFS]; + +// nandfirm_size = file_size - NAND_FIRM_START_OFFSET_IN_FILE; + + // バッファ確保 + // 書き込みがブロック単位(512byte)であることを考慮し512アライメントを確保 + alloc_size = 0x200; // MATH_ROUNDUP(file_size, 512); + pTempBuf = spAllocFunc( alloc_size ); + if (pTempBuf == NULL) + { + OS_Warning("Failure! Alloc Buffer"); + return FALSE; + } + + MI_CpuClear8( pTempBuf, alloc_size ); + + // Nandからリード + if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf, alloc_size ) == KAMI_RESULT_SEND_ERROR) + { + OS_Warning("Failure! Read NandFirm"); + } + DC_FlushRange(pTempBuf, alloc_size); + + // Hash値 UpDate + SVC_CalcSHA1( data->Sha1_digest, pTempBuf, alloc_size ); + + // メモリ解放 + spFreeFunc(pTempBuf); + + return TRUE; +} + + /*---------------------------------------------------------------------------* Name: newGetCRC diff --git a/build/tests/TitleHashChecker/banner/banner_v3.bsf b/build/tests/TitleHashChecker/banner/banner_v3.bsf index 7975862b19a135ee19a81c5f20caeeac484b1ec0..f93b21dc0e84cb256bfdf3517c65af7a853440d5 100644 GIT binary patch literal 884 zcmc(eK}*9x5QX1W!T+$(vq}*>^k`{XODSU1p0{bGfhLwDwfN`NZ+7zol1t0Nuru>! z^4`wm?{}alrAp*<8;-;GDmhzKL{lBOW!w_w+H=3rwFWIZ)||)2?>fC{2a_5`pDiP& zLPsJEu{8{xPH@lh8@v)f4>qIHlc|Xs_MKh{N``vWLX(RsGj$*EGIqJX;5&lhL*Qh& zxn77|X&I)oA!qZbQ0}y9)mpV-C!o4w6TNoEPU+mW?=x@P6`S_ZHtwNq)&m>2D_X~P yRN>_$x-b=bV^T1!|)^kb5#--%Q4~(G$za7vQX8?EVkoOL&n0 literal 916 zcmc(e&1wQc5QOV$z;_t%oQMcHc#OFIAQG~g`?wlh{AG8Iv_^C1IeM?yl*n zqGo=+J9<&BOiqtsIdZQPYpaTCt_!<@U8Yh8_H8|=b4SNBe-q=qPD|}zQp4!u&dBMg zE0u=Y8ir0cxR>M&*@?UivEZbqQ&TnUidh*-dV1DeqkmOq>fYgH>`I;CJAh$7aI)S^ zuT)wvHeKd}(*!j&nw*A2b7>zY7=ENh5JjdWVU6CyDs@`eJlA yP=#Mo9x~>az|- zV1`<;CpgR!3zii+h9%!E+9;Z`&GSQ+W+V}j{iliJZsc?B=tG^_k^eE`;6angg<@Y BQP%(f literal 630 zcma)(u?+$-3`IW#(NG0iBq(W+g1iAedoaOGz$8q>B&-m=?GRmZ(&;QY@$ieC$Cw%=pkNCb%$T^$8uG_IZ8^?H%YPU%1xQZ6UIM1!Rgc6Vf z5`yk22*hF`FeiTof(pu%SPSaTx+jR8Q|i4jPh+v>N4#XFriKIADC}SdDQo1bHB?