diff --git a/build/tests/TitleHashChecker/Makefile b/build/tests/TitleHashChecker/Makefile deleted file mode 100644 index 6884672e..00000000 --- a/build/tests/TitleHashChecker/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - TitleHashChecker -# File: Makefile -# -# 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:: -# $Rev: -# $Author: -#---------------------------------------------------------------------------- -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 - -MAKEROM := $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== - - diff --git a/build/tests/TitleHashChecker/ROM-TS_sys.rsf b/build/tests/TitleHashChecker/ROM-TS_sys.rsf deleted file mode 100644 index b9d0949c..00000000 --- a/build/tests/TitleHashChecker/ROM-TS_sys.rsf +++ /dev/null @@ -1,283 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# 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:: 2008-07-23#$ -# $Rev: 7566 $ -# $Author: yosiokat $ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./resource/rom_header_0tca.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 - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - 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] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # 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 - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # 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 - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 0TCA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode TRUE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - 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/include/common.h b/build/tests/TitleHashChecker/include/common.h deleted file mode 100644 index 90e2dd88..00000000 --- a/build/tests/TitleHashChecker/include/common.h +++ /dev/null @@ -1,67 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.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-08-30#$ - $Rev: 8166 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#ifndef COMMON_H_ -#define COMMON_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -/*---------------------------------------------------------------------------* - 定数定義 - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_START 25 // キーリピート開始までのフレーム数 -#define KEY_REPEAT_SPAN 10 // キーリピートの間隔フレーム数 - -/*---------------------------------------------------------------------------* - 構造体 定義 - *---------------------------------------------------------------------------*/ - -// キー入力情報 -typedef struct KeyInfo -{ - u16 cnt; // 未加工入力値 - u16 trg; // 押しトリガ入力 - u16 up; // 離しトリガ入力 - u16 rep; // 押し維持リピート入力 -} KeyInfo; - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -void InitCommon(void); - -void ReadKey(KeyInfo* pKey); - -void VBlankIntr(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* COMMON_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/include/font.h b/build/tests/TitleHashChecker/include/font.h deleted file mode 100644 index d4f23ed2..00000000 --- a/build/tests/TitleHashChecker/include/font.h +++ /dev/null @@ -1,41 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: font.h - - Copyright 2007-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-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/include/screen.h b/build/tests/TitleHashChecker/include/screen.h deleted file mode 100644 index 799a2b93..00000000 --- a/build/tests/TitleHashChecker/include/screen.h +++ /dev/null @@ -1,49 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.h - - Copyright 2007-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-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef SCREEN_H_ -#define SCREEN_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -/*---------------------------------------------------------------------------* - 関数 定義 - *---------------------------------------------------------------------------*/ -void InitScreen(void); -void ClearScreen(void); -void ClearMainScreen(void); -void ClearSubScreen(void); -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...); -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...); -void UpdateScreen(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* SCREEN_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/src/common.c b/build/tests/TitleHashChecker/src/common.c deleted file mode 100644 index c7b9821f..00000000 --- a/build/tests/TitleHashChecker/src/common.c +++ /dev/null @@ -1,157 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.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-08-25#$ - $Rev: 8074 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include "common.h" - -static void InitInterrupts(void); -static void InitHeap(void); - -/*---------------------------------------------------------------------------* - 関数定義 - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitCommon - - Description: 基本的な初期化関数をここで呼ぶ。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitCommon(void) -{ - OS_Init(); - OS_InitTick(); - - OS_InitAlarm(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - CARD_Init(); // 新規追加 - CARD_Enable(TRUE); // 新規追加 - - InitHeap(); - InitInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: ReadKey - - Description: キー入力情報を取得し、入力情報構造体を編集する。 - 押しトリガ、離しトリガ、押し継続リピートトリガ を検出する。 - - Arguments: pKey - 編集するキー入力情報構造体を指定する。 - - Returns: None. - *---------------------------------------------------------------------------*/ -void ReadKey(KeyInfo* pKey) -{ - static u16 repeat_count[12]; - int i; - u16 r; - - r = PAD_Read(); - pKey->trg = 0x0000; - pKey->up = 0x0000; - pKey->rep = 0x0000; - - for (i = 0; i < 12; i++) - { - if (r & (0x0001 << i)) - { - if (!(pKey->cnt & (0x0001 << i))) - { - pKey->trg |= (0x0001 << i); // 押しトリガ - repeat_count[i] = 1; - } - else - { - if (repeat_count[i] > KEY_REPEAT_START) - { - pKey->rep |= (0x0001 << i); // 押し継続リピート - repeat_count[i] = (u16) (KEY_REPEAT_START - KEY_REPEAT_SPAN); - } - else - { - repeat_count[i]++; - } - } - } - else - { - if (pKey->cnt & (0x0001 << i)) - { - pKey->up |= (0x0001 << i); // 離しトリガ - } - } - } - - pKey->cnt = r; // 未加工キー入力 -} - -/*---------------------------------------------------------------------------* - Name: InitInterrupts - - Description: 割り込み設定を初期化する。 - V ブランク割り込みを許可し、割り込みハンドラを設定する。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitInterrupts(void) -{ - // V ブランク割り込み設定 - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // 割り込み許可 - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: InitHeap - - Description: メインメモリ上のアリーナにてメモリ割当てシステムを初期化する。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitHeap(void) -{ - void* tempLo; - OSHeapHandle hh; - - // メインメモリ上のアリーナにヒープをひとつ作成 - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - // ヒープ作成に失敗した場合は異常終了 - OS_Panic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/src/font.c b/build/tests/TitleHashChecker/src/font.c deleted file mode 100644 index ebc10e7b..00000000 --- a/build/tests/TitleHashChecker/src/font.c +++ /dev/null @@ -1,585 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroWiFi - WCM - demos - wcm-list - File: font.c - - Copyright 2005-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. - - $Log: font.c,v $ - Revision 1.2 2006/03/10 09:22:43 kitase_hirotake - INDENT SOURCE - - Revision 1.1 2005/07/21 08:21:06 adachi_hiroaki - 新規追加 - - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/src/main.c b/build/tests/TitleHashChecker/src/main.c deleted file mode 100644 index bcaa506b..00000000 --- a/build/tests/TitleHashChecker/src/main.c +++ /dev/null @@ -1,1109 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - Nand-2 - File: main.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-09-03#$ - $Rev: 8251 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include - -#include "common.h" -#include "screen.h" - -#define TITLE_SHOW_BASE_Y 5 -#define TITLE_MAX_SHOW 0x10 -#define TITLE_NUM_PAGE 300 - -#define ETICKET_NUM_MAX 10 - -#define ES_ERR_OK 0 - -#define CRCPOLY 0x1021 - -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) - -#define DMA_NO_FS 1 -#define CHECK_APP_NUM 10 -#define REGION_NUM 6 - -#define NAND_FIRM_INFO_OFS 1 -#define SHARED_FONT_INFO_OFS 2 - - -/*---------------------------------------------------------------------------* - 変数 定義 - *---------------------------------------------------------------------------*/ -typedef void* (*NAMUTAlloc)(u32 size); -typedef void (*NAMUTFree)(void* ptr); - -static NAMUTAlloc spAllocFunc; -static NAMUTFree spFreeFunc; - -// キー入力 -static KeyInfo gKey; - -// インストールされている NAND アプリの数 -static s32 gNandAppNum; - -// カーソル位置 -static s32 gCurPos = 0; - -// 選択中の要素 -static s32 gCurrentElem; - -// ページ数 -static u32 gCurrentPage; -static u32 gMaxPage; - -// Error -static BOOL gErrorFlg; - -// ページ変更 -static BOOL gPageChange; - -typedef struct DataStruct -{ - NAMTitleId id; - - u8 ver_major; - u8 ver_minor; - - u8 Sha1_digest[SVC_SHA1_DIGEST_SIZE]; - u16 crc16; -} DataStruct; - -static u8 sFontData_Sha1_digest[SVC_SHA1_DIGEST_SIZE]; -static u8 sNandFirm_Sha1_digest[SVC_SHA1_DIGEST_SIZE]; - -static DataStruct gDataList[TITLE_NUM_PAGE * 2]; - -static u16 crc_table[0x100]; - -// -------------------------------------- -// DisableDebugCheck用 -// -------------------------------------- -static u8 gRegion; - -static u8 gDisableDebugFlg[CHECK_APP_NUM]; -static BOOL gError[CHECK_APP_NUM]; -static NAMTitleInfo gInfo[CHECK_APP_NUM]; - -static NAMTitleId titleID[CHECK_APP_NUM] = { - 0x00030017484e4100, // ランチャ - 0x00030015484e4200, // 本体設定 - 0x00030005484e4441, // DSダウンロードプレイ all region - 0x00030005484e4541, // ピクトチャット all region - 0x00030015484e4600, // ショップ - 0x00030005484e4900, // カメラ - 0x00030005484e4a00, // ゾーン - 0x00030005484e4b00, // サウンド - 0x00030015344e4641, // NandFiler all region - 0x0003001534544E41, // TwlNMenu all region -}; - -const static u32 regioncode[REGION_NUM] = { - 0x4A, // 日本 - 0x45, // アメリカ - 0x50, // 欧州 - 0x55, // オーストラリア - 0x43, // 中国 - 0x4B // 韓国 -}; - -// スペースの都合MAX 7文字で -char *gAppName[CHECK_APP_NUM] = { - "Menu", - "Setting", - "DL play", - "PctChat", - "Shop", - "Camera", - "NinZone", - "Sound", - "NFiler", - "NMenu" -}; - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -static void DrawScene(DataStruct* list); -BOOL GetDataStruct(DataStruct* list); -void showTitleHashCheck(DataStruct* list); -void showDisableDebugFlgCheck(void); - -static void ConvertTitleIdLo(u8* code, u8* titleid_lo); -static void ConvertGameCode(u8* code, u32 game_code); -static void ConvertInitialCode(u8* code, u32 titleid_lo); - -static void* AllocForNAM(u32 size); -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); - -u16 newGetCRC(u16 start, u16 *datap, u32 size); -static void inittable(unsigned short *table); - -static void CheckDisableDebugFlg(void); - -void* MyNAMUT_Alloc(u32 size); -void MyNAMUT_Free(void* buffer); - -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: メイン関数 - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - u32 count = 0; - BOOL errorFlg = FALSE; - - InitCommon(); - InitScreen(); - - GX_DispOn(); - GXS_DispOn(); - - spAllocFunc = AllocForNAM; - spFreeFunc = FreeForNAM; - - gNandAppNum = 0; - gErrorFlg = FALSE; - - FS_Init( FS_DMA_NOT_USE ); - - NAM_Init(AllocForNAM, FreeForNAM); - - MI_CpuClear8( gDataList, sizeof(gDataList)); - - ClearScreen(); - - // hash Check - (void)ProcessTitleHashCheck(); - - // Disable Debug Check - CheckDisableDebugFlg(); - - // 初期ページの設定 - gPageChange = TRUE; - - while(TRUE) - { - // キー入力情報取得 - ReadKey(&gKey); - - if (gKey.trg & PAD_KEY_DOWN) - { - gCurPos++; - - if ( gCurrentPage != gMaxPage ) - { - if ( gCurPos >= TITLE_MAX_SHOW ) - { - gCurrentPage++; - gCurPos = 0; - } - } - else - { - if( (gNandAppNum & 0x0f) == 0 ) - { - if( gCurPos >= TITLE_MAX_SHOW ) - { - gCurrentPage = 0; - gCurPos = 0; - } - } - else if ( gCurPos >= (gNandAppNum & 0x0f) ) // バグ - { - gCurrentPage = 0; - gCurPos = 0; - } - } - - OS_TPrintf("↓ gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - if (gKey.trg & PAD_KEY_UP) - { - if( gCurPos == 0) - { - if ( gCurrentPage == 0 ) - { - gCurrentPage = gMaxPage; - gCurPos = ((gNandAppNum & 0x0f) == 0) ? TITLE_MAX_SHOW - 1 : (gNandAppNum & 0x0f) - 1; - } - else - { - gCurrentPage--; - gCurPos = TITLE_MAX_SHOW - 1; - } - } - else - { - gCurPos--; - } - - OS_TPrintf("↑ gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - - if (gKey.trg & PAD_KEY_LEFT) - { - if(gCurrentPage == 0) - { - gCurrentPage = gMaxPage; - } - else - { - gCurrentPage--; - } - - gCurPos = 0; - - OS_TPrintf("← gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - if (gKey.trg & PAD_KEY_RIGHT) - { - if(gCurrentPage == gMaxPage) - { - gCurrentPage = 0; - } - else - { - gCurrentPage++; - } - - gCurPos = 0; - - OS_TPrintf("→ gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - if (gKey.trg & PAD_BUTTON_L || gKey.trg & PAD_BUTTON_R) - { - gPageChange ^= TRUE; - } - - // 選択中の要素 - gCurrentElem = (s32)((u32)(gCurrentPage << 4) + (u32)gCurPos); - - // 画面描画 - DrawScene(gDataList); - - // Vブランク待ち - OS_WaitVBlankIntr(); - - // 画面クリア - ClearScreen(); - } - - // Vブランク待ち 最後に画面を更新してから終了 - OS_WaitVBlankIntr(); - OS_Terminate(); -} - - -/*---------------------------------------------------------------------------* - Name: DrawScene - - Description: 画面描画関数 - - メモ: - 0xf0, // 黒 0xf1, // 赤 0xf2, // 緑 - 0xf3, // 青 0xf4, // 黄 0xf5, // ピンク - 0xf6, // 水色 0xf7, // くすんだ赤 0xf8, // くすんだ緑 - 0xf9, // くすんだ青 0xfa, // くすんだ黄色 0xfb, // 紫 - 0xfc, // うすい青 0xfd, // 灰色 0xfe, // 濃い灰色 - *---------------------------------------------------------------------------*/ -#define COMMON_COLOR ((u8)0xff) -#define PERSONALIZED_COLOR ((u8)0xfc) - -#define GAME_CODE_BASE_X 1 - -static void DrawScene(DataStruct* list) -{ - if(gPageChange) - { - showTitleHashCheck(list); - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 2, 0xfa, "Up Down Key : Next Application"); - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 3, 0xfa, "Left Right Key: Page Change"); - } - else - { - showDisableDebugFlgCheck(); - } - - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y, 0xff, "--------------------------------"); - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 1, 0xfa, "LR Button : Mode Change"); - -} - - -void showTitleHashCheck(DataStruct* list) -{ - s32 i; - u8 init_code[5]; - u32 start; - u8* digest; - - DataStruct* p = list; - - if( gErrorFlg ) - { - PutMainScreen( 10, 12, 0xf1, "--- Error ---"); - PutSubScreen( 10, 12, 0xf1, "--- Error ---"); - - return; - } - - // 上画面 一覧表示 - PutMainScreen( 0, 0, 0xf2, "------ Title Hash Checker ------"); - PutMainScreen( 1, 1, 0xfa, "", (gCurrentPage+1), (gMaxPage+1)); - PutMainScreen( 1, 3, 0xf4, "GameCode Version"); - PutMainScreen( 0, 4, 0xff, "--------------------------------"); - - // カーソル表示 - if( gCurPos <= TITLE_MAX_SHOW ){ - PutMainScreen( 0, gCurPos+TITLE_SHOW_BASE_Y , 0xf1, ">"); - } - - start = (u32)(gCurrentPage << 4); - p += start; - - for ( i=(s32)start; i < (start + TITLE_MAX_SHOW); i++, p++) - { - s32 tmp_i; - - if ( i >= gNandAppNum ) - { - break; - } - - tmp_i = (s32)(i & 0xf); - - if( i == (gNandAppNum - SHARED_FONT_INFO_OFS) ) - { - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, COMMON_COLOR, "Shared Font"); - } - else if( i == (gNandAppNum - NAND_FIRM_INFO_OFS) ) - { - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, COMMON_COLOR, "Nand Firm"); - } - else - { - ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id)); - - // ゲームコード表示 - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, COMMON_COLOR, "%2d:%s %d.%d", - (tmp_i+1), init_code, list[i].ver_major, list[i].ver_minor); - } - } - - // 下画面 詳細表示 - ConvertInitialCode(init_code, NAM_GetTitleIdLo(list[gCurrentElem].id)); - PutSubScreen(2, 1, 0xf4, "Selected Title : [ %s ]", init_code); - PutSubScreen(2, 4, 0xff, "- CRC16 Data -"); - - PutSubScreen(2, 6, 0xf4, "0x%04x", list[gCurrentElem].crc16); - - - digest = (u8 *)list[gCurrentElem].Sha1_digest; - - PutSubScreen(2, 10, 0xff, "- SHA1 Digest Data -"); - - for( i=0; i<10; i++ ){ - PutSubScreen(2 + (i*3), 12, 0xf4, "%02x ", digest[i]); - PutSubScreen(2 + (i*3), 14, 0xf4, "%02x ", digest[i+10]); - } -} - -void showDisableDebugFlgCheck(void) -{ - s32 i; - u8 color; - u8 *p; - u8 hi, lo; - BOOL success = TRUE; - - for(i=0; i> 8); - lo = (u8)(gInfo[i].version & 0xff); - - PutMainScreen(20, TITLE_SHOW_BASE_Y+i, color, "%d.%d", hi, lo); - } - else - { - PutMainScreen(20, TITLE_SHOW_BASE_Y+i, color, "---", gInfo[i].version); - } - - if(gDisableDebugFlg[i] == '0') - { - PutMainScreen(28, TITLE_SHOW_BASE_Y+i, 0xf1, "NG"); - } - } -} - - -/*---------------------------------------------------------------------------* - Name: CheckDisableDebugFlg - - Description: - *---------------------------------------------------------------------------*/ -static void CheckDisableDebugFlg(void) -{ - char file_path[FS_ENTRY_LONGNAME_MAX]; - u8 buf[0x1000]; - u32 i; - - gRegion = OS_GetRegion(); - - for(i=0; is.disable_debug){ - gDisableDebugFlg[i] = '1'; - } - else{ - gDisableDebugFlg[i] = '0'; - } - OS_TPrintf("DisableFlg( %c )", gDisableDebugFlg[i]); - - // ファイルクローズ - bSuccess = FS_CloseFile(&f); - - OS_TPrintf(" File Read/Close Success\n"); - gError[i] = FALSE; - } - else{ - OS_TPrintf(" ng \n"); - gError[i] = TRUE; - gDisableDebugFlg[i] = '-'; - } - - // tadバージョンの取得 - if( NAM_ReadTitleInfo( &gInfo[i], titleID[i] ) != NAM_OK ) - { - OS_TPrintf("[0x%08x] ReadTitleInfo failed...\n", titleID[i]); - } - } -} - - - -/*---------------------------------------------------------------------------* - Name: ProcessTitleHashCheck - - Description: - *---------------------------------------------------------------------------*/ -BOOL ProcessTitleHashCheck( void ) -{ - u32 i; - s32 result = TRUE; - char full_path[FS_ENTRY_LONGNAME_MAX+6]; - - DataStruct* list; - - - // NAND にインポートされているNAND アプリの数を取得する - if ( (gNandAppNum = NAM_GetNumTitles()) < 0) - { - OS_Panic("NAM_GetNumTitles() failed."); - } - - // 情報の取得 - if ( !GetDataStruct(gDataList) ) - { - OS_Panic("GetDataStruct() failed."); - } - - list = gDataList; - - // srlのHash値とcrc16を求める - for ( i=0; i < gNandAppNum; i++, list++ ) - { - - PutMainScreen( 7, 10, 0xf6, "--- Now Loading ---"); - PutMainScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum); - - PutSubScreen( 7, 10, 0xf6, "--- Now Loading ---"); - PutSubScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum); - - // バッファのクリア - MI_CpuClear8(full_path, sizeof(full_path)); - - // ファイルパスの取得 - if ( !GetAppPath(list, full_path) ) - { - gErrorFlg = TRUE; - } - - // Hash, CRC16の計算 - if ( !CulcuHash(list, full_path) ) - { - gErrorFlg = TRUE; - } - } - - // SharedフォントとNandファームの値用の2つ - gNandAppNum += 2; - - CulcuFontDataHash(gDataList); - - OS_PutString("ProcessTitleHashCheck Finish!!\n"); - - return result; -} - - -/*---------------------------------------------------------------------------* - Name: GetDataStruct - - Description: TitleIDリストを取得する関数 - NAM_GetTitleList と NAM_GetInstalledTitleList を使う - *---------------------------------------------------------------------------*/ -BOOL GetDataStruct(DataStruct* list) -{ - // タイトルIDリストバッファ - NAMTitleId titleIdList[TITLE_NUM_PAGE]; - s32 i; - - // --- GetTitleList - if ( NAM_GetTitleList(titleIdList, TITLE_NUM_PAGE) != NAM_OK ) - { - OS_PutString("NAM_GetTitleList failed."); - return FALSE; - } - - // データリストの作成 - for ( i=0; i= gNandAppNum ) - { - break; - } - - OS_TPrintf("id : 0x%08x\n", titleIdList[i]); - list->id = titleIdList[i]; - - // tadバージョンの取得 - if( NAM_ReadTitleInfo( &info, list->id ) != NAM_OK ) - { - OS_TPrintf("[0x%08x] ReadTitleInfo failed...\n", list->id); - }else { - list->ver_major = (u8)(info.version >> 8);; - list->ver_minor = (u8)(info.version & 0xff); - } - } - - MI_CpuClear8(titleIdList, sizeof(titleIdList)); - - OS_PutString("\n\n"); - - return TRUE; -} - - -/*---------------------------------------------------------------------------* - Name: GetAppPath - - Description: - - Arguments: - - - Returns: - - *---------------------------------------------------------------------------*/ -static BOOL GetAppPath(DataStruct* list, char* path_buf) -{ - FSFile dir; - BOOL ret = TRUE; - - // ディレクトリパスの作成 - STD_TSNPrintf( path_buf, FS_ENTRY_LONGNAME_MAX, - "nand:/title/%08x/%08x/content/", (u32)( list->id >> 32 ), list->id ); - - // .appファイルを見つける - if ( !FS_OpenDirectory(&dir, path_buf, FS_FILEMODE_R | FS_FILEMODE_W) ) - { - ret = FALSE; - OS_PutString("Error FS_OpenDirectory\n\n"); - } - else - { - FSDirectoryEntryInfo info[1]; - - // .app を探してファイル名を保存しておく - while (FS_ReadDirectory(&dir, info)) - { - if ((info->attributes & (FS_ATTRIBUTE_DOS_DIRECTORY | FS_ATTRIBUTE_IS_DIRECTORY)) != 0) - { - } - else - { - char* pExtension; - OS_Printf(" (%d BYTEs)\n", info->filesize); - - // 拡張子のチェック - pExtension = STD_SearchCharReverse( info->longname, '.'); - if (pExtension) - { - if (!STD_CompareString( pExtension, ".app")) - { - STD_ConcatenateString( path_buf, info->longname ); - - OS_TPrintf("OK! File Path : %s\n", path_buf); - - break; - } - } - } - } - - (void)FS_CloseDirectory(&dir); - } - - return ret; -} - - -/*---------------------------------------------------------------------------* - Name: CulcuHash - - Description: - - Arguments: - - - Returns: - - *---------------------------------------------------------------------------*/ -#define READ_SIZE 0x1000 // MasterEditorでのCRC計算にあわせるためこの値を使う - -BOOL CulcuHash(DataStruct* list, char* full_path) -{ - FSFile file; - BOOL open_is_ok; - BOOL seek_is_ok; - BOOL read_is_ok; - u32 file_size; - u32 read_size = 0; - u32 data_size = 0; - u32 i; - u16 crc = 0; - u8* pTempBuf; - SVCSHA1Context hash; - - FSResult result; - - // CRC16計算用テーブルの初期化 - MI_CpuClear8(crc_table, sizeof(crc_table)); - inittable(crc_table); - - // ハッシュ初期化 - SVC_SHA1Init( &hash ); - - // FS初期化 - FS_InitFile(&file); - - // ファイルオープン - open_is_ok = FS_OpenFile(&file, full_path); - if (!open_is_ok) - { - OS_Warning("Failure! FS_OpenFile"); - return FALSE; - } - - // ファイル長取得 - file_size = FS_GetFileLength(&file); - - // ファイルが大きいものもあるから細切れで読む - for(i=1;;i++){ - // バッファ確保 - pTempBuf = spAllocFunc( READ_SIZE ); - if (pTempBuf == NULL) - { - FS_CloseFile(&file); - OS_Warning("Failure! Alloc Buffer"); - return FALSE; - } - - // 読み込むサイズを決める - if( (READ_SIZE * i) > file_size ) - { - data_size = file_size % READ_SIZE; - } - else - { - data_size = READ_SIZE; - } - - // ファイルリード - read_is_ok = FS_ReadFile( &file, pTempBuf, READ_SIZE ); // 本来ならばここは data_size分読めばよいが、 - // MasterEditorのCRC計算にあわせるため、READ_SIZE分読み込む - result = FS_GetResultCode(&file); - if (!read_is_ok) - { - FS_CloseFile(&file); - spFreeFunc(pTempBuf); - OS_Warning("Failure! Read File (Error Code : %d)", result); - return FALSE; - } - - // 読んだサイズを更新 - read_size += data_size; - - // CRC16計算 - crc = newGetCRC(crc, (u16 *)pTempBuf, READ_SIZE); // 本来ならばここは data_size分の計算をすればよいが、 - // MasterEditorのCRC計算にあわせるため、READ_SIZE分計算する - - // Hash値 UpDate - SVC_SHA1Update( &hash, pTempBuf, data_size ); - - // ファイルが全部読めたらwhileをぬける - if( read_size >= file_size ) - { - break; - } - else - { - // ファイルシーク - seek_is_ok = FS_SeekFile( &file, (s32)(READ_SIZE * i), FS_SEEK_SET ); - result = FS_GetResultCode(&file); - if(!seek_is_ok) - { - FS_CloseFile(&file); - spFreeFunc(pTempBuf); - OS_Warning("Failure! Seek File [read size : %d bytes] (Error Code : %d)", read_size, result); - return FALSE; - } - } - spFreeFunc( pTempBuf ); - } - - if(file_size != read_size) - { - OS_PutString(" Read Size Error!!!\n"); - } - - OS_PutString("\n\n"); - - // Hash値算出 - SVC_SHA1GetHash( &hash, list->Sha1_digest ); - - list->crc16 = crc; - - // ファイルクローズ - FS_CloseFile(&file); - - return TRUE; -} - - -BOOL CulcuFontDataHash(DataStruct* list) -{ - FSFile file; - BOOL open_is_ok; - BOOL read_is_ok; - u32 file_size; - u8* pTempBuf; - SVCSHA1Context hash; - - FSResult result; - - // ケツから2個目をSharedFont用のデータにする - DataStruct *data = &list[gNandAppNum-SHARED_FONT_INFO_OFS]; - - // ハッシュ初期化 - SVC_SHA1Init( &hash ); - - // FS初期化 - FS_InitFile(&file); - - // ファイルオープン - open_is_ok = FS_OpenFile(&file, "nand:/sys/TWLFontTable.dat"); - if (!open_is_ok) - { - OS_Warning("Failure! FS_OpenFile"); - return FALSE; - } - - // ファイル長取得 - file_size = FS_GetFileLength(&file); - - // バッファ確保 - pTempBuf = spAllocFunc( file_size ); - if (pTempBuf == NULL) - { - FS_CloseFile(&file); - OS_Warning("Failure! Alloc Buffer"); - return FALSE; - } - - // ファイルリード - read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); - result = FS_GetResultCode(&file); - if (!read_is_ok) - { - FS_CloseFile(&file); - spFreeFunc(pTempBuf); - OS_Warning("Failure! Read File (Error Code : %d)", result); - return FALSE; - } - - // Hash値 UpDate - SVC_CalcSHA1( data->Sha1_digest, pTempBuf, file_size ); - - // バッファの開放 - spFreeFunc( pTempBuf ); - - // ファイルクローズ - FS_CloseFile(&file); - - return TRUE; -} - - -/*---------------------------------------------------------------------------* - Name: newGetCRC - - Description: CRC計算 - 製品技術部のCRCテーブルを使ったCRC計算関数 - - 偶数バイトと奇数バイトを入れ替えてから計算する。 - *---------------------------------------------------------------------------*/ -u16 newGetCRC - ( - u16 start, // CRC初期値(累積値) - u16 *datap, // データの先頭を指すポインタ、 - u32 size // バイト単位でのデータサイズ - ) -{ - u32 i; - u16 crc; - u8* byte; - - crc = start; - byte = (u8 *)datap; - - for (i=0; i> 8) ^ byte1]); - crc = (u16)((crc << 8) ^ crc_table[(crc >> 8) ^ byte0]); - } - - return crc; -} - - -/*---------------------------------------------------------------------------- - 関数名 - inittable - initialize table - - 形式 - static void inittable(unsigned short *table); - - 解説 - CRC算出を高速化するための参照テーブルを作成する。 -----------------------------------------------------------------------------*/ -static void inittable(unsigned short *table) -{ - unsigned short i, j, r; - - for(i = 0; i < 0x100; i++) { - r = (unsigned short)(i << 8); - for(j = 0; j < 8; j++) { - if(r & 0x8000U) - r = (unsigned short)((r << 1) ^ CRCPOLY); - else - r <<= 1; - } - *table++ = r; - } -} - - -/*---------------------------------------------------------------------------* - UTIL 関数 - *---------------------------------------------------------------------------*/ -static void ConvertTitleIdLo(u8* code, u8* titleid_lo) -{ - u8 tmp[5]; - s32 i; - - for ( i=3; i>=0; i--, titleid_lo++ ) - { - tmp[i] = *titleid_lo; - *code = tmp[i]; - } - - // NULL 終端 - *code = 0x00; -} - -static void ConvertGameCode(u8* code, u32 game_code) -{ - u8 tmp[5]; - s32 i; - - ConvertInitialCode(tmp, game_code); - - for ( i=3; i>=0; i--, code++) - { - *code = tmp[i]; - } - - // NULL 文字終端 - *code = 0x00; -} - -static void ConvertInitialCode(u8* code, u32 titleid_lo) -{ - s32 i; - - for ( i=0; i<4; i++, code++) - { - *code = (u8)(titleid_lo >> (8 * (3-i))); - } - - // NULL文字終端 - *code = 0x00; -} - - -void* MyNAMUT_Alloc(u32 size) -{ - const u32 allocSize = MATH_ROUNDUP32(size); - SDK_ASSERTMSG( spAllocFunc != NULL, "NAMUT_Init should be called previously.\n"); - return spAllocFunc(allocSize); -} - - -static void* AllocForNAM(u32 size) -{ - void* ptr; - ptr = OS_AllocFromMain(size); - - if (ptr == NULL) - { - OS_Panic("alloc failed."); - } - - return ptr; -} - - -void MyNAMUT_Free(void* buffer) -{ - SDK_ASSERTMSG( spFreeFunc != NULL, "NAMUT_Init should be called previously.\n"); - if (buffer) - { - spFreeFunc(buffer); - } -} - - -static void FreeForNAM(void* ptr) -{ - OS_FreeToMain(ptr); -} - - -void VBlankIntr(void) -{ - // テキスト表示を更新 - UpdateScreen(); - - // IRQ チェックフラグ47をセット - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/src/screen.c b/build/tests/TitleHashChecker/src/screen.c deleted file mode 100644 index c00a4a75..00000000 --- a/build/tests/TitleHashChecker/src/screen.c +++ /dev/null @@ -1,194 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.c - - Copyright 2007-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-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#include -#include "screen.h" -#include "font.h" - -/*---------------------------------------------------------------------------* - 定数 定義 - *---------------------------------------------------------------------------*/ -#define TEXT_SCREEN_SIZE 2048 - -/*---------------------------------------------------------------------------* - 内部変数 定義 - *---------------------------------------------------------------------------*/ - -// 仮想スクリーン[ 上下画面 ][ BG 枚数 ][ キャラクタ数 ] -static u16 gScreen[2 ][ 1 ][ TEXT_SCREEN_SIZE / sizeof(u16) ] ATTRIBUTE_ALIGN(32); - -/*---------------------------------------------------------------------------* - Name: InitScreen - - Description: 文字表示システムのために、表示設定を初期化する。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitScreen(void) -{ - // 各 V-RAM 初期化 - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - - // OAM 初期化 - MI_CpuFillFast((void*)HW_OAM, 0xc0, HW_OAM_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, 0xc0, HW_DB_OAM_SIZE); - - // パレット初期化 - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - // 上画面設定 - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - - // 下画面設定 - GX_SetBankForSubBG(GX_VRAM_SUB_BG_32_H); - G2S_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2S_SetBG0Priority(0); - GXS_SetGraphicsMode(GX_BGMODE_0); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0); - GXS_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GXS_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_DB_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[1][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - Name: ClearScreen - - Description: 画面のテキスト表示をクリアする。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ClearScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -void ClearMainScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - -} -void ClearSubScreen(void) -{ - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -/*---------------------------------------------------------------------------* - Name: PutMainScreen - - Description: メイン画面にテキスト出力する。 - - Arguments: text - 出力する文字列。 - ... - 仮想引数。 - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[0][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: PrintSubScreen - - Description: サブ画面にテキスト出力する。 - - Arguments: text - 出力する文字列。 - ... - 仮想引数。 - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[1][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: UpdateScreen - - Description: 仮想スクリーンを V-RAM に反映する。 - V ブランク期間中での呼び出しを想定。 - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void UpdateScreen(void) -{ - // 仮想スクリーンを V-RAM に反映 - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/