mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@249 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
567628e736
commit
0299ada588
@ -1,2 +0,0 @@
|
||||
-p
|
||||
-t
|
||||
@ -1,11 +0,0 @@
|
||||
<インポータのオプション有効化>
|
||||
|
||||
cms_inf.txtの名前でファイル作成しSDのルート下に配置
|
||||
以下の記述でオプションが有効になる
|
||||
デバグや不具合調査時用、通常はいらない
|
||||
|
||||
-t: テストメニュー
|
||||
カード上のセーブにテストパターン書き込み&ベリファイ
|
||||
|
||||
-p: 本体シリアルを表示
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -15,7 +15,7 @@ TitleInfo:
|
||||
Version: 0
|
||||
|
||||
Rom:
|
||||
HostRoot : romfiles
|
||||
# HostRoot : romfiles
|
||||
# SaveDataSize: 512K
|
||||
|
||||
AccessControlInfo:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -669,6 +669,11 @@ RetCode Card2Sd()
|
||||
}
|
||||
|
||||
if (res == RESULT_OK){
|
||||
if (ct != arcInfo.FileCount)//ファイル数に満たないパス検索終了
|
||||
{//ディレクトリ情報かパス取得で失敗してると思われる
|
||||
PutError(ERC_DEV_OTHER,ERC_EXEC);
|
||||
return ERROR;
|
||||
}
|
||||
//フォーマット情報を記録
|
||||
//Exsaveに2重化が無いので情報取得APIでは不足 - 2011.1 現在
|
||||
//プロダクトコードを追加(2011.1.26)
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
|
||||
//エラー表示コードの下位2桁
|
||||
0, //不明
|
||||
1, //デバイスが見つからない
|
||||
2,//プロダクトコード不一致
|
||||
3,//ベリファイエラー
|
||||
4,//パスが長すぎ
|
||||
5,//ディレクトリ深すぎ
|
||||
6, //メディアが見つからない(サブ基盤外れなど)
|
||||
10, //ファイルが見つからない
|
||||
20, //既に存在
|
||||
21, //空き容量がない
|
||||
22, //書込み禁止
|
||||
30, //アクセスエラー
|
||||
50, //フォーマットエラー
|
||||
60, //検証に失敗、改竄
|
||||
70, //ROM情報エラー
|
||||
80, //リトライ要求
|
||||
90, //実行時エラー
|
||||
99 //深刻なエラー
|
||||
|
||||
|
||||
//上位
|
||||
CARD = 100,
|
||||
BKUP DEVICE = 200,
|
||||
OTHER = 300
|
||||
|
||||
|
||||
これらの合成で表示される
|
||||
例えば、カードが刺さっていない場合は 101 となる
|
||||
|
||||
|
||||
通常時に発生しやすいと思われるもの
|
||||
|
||||
302 .. プロダクトコードが一致しない
|
||||
101 .. カードが見つからない
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
動作確認環境:
|
||||
ARM製 RVC_Nintendo 4.1
|
||||
omake 0.9.8.5
|
||||
CTR SDK2.0 + Repairtoolプライベートパッチ
|
||||
v1.03以降は ps_api.h と libnn_psも(SystemProgramKitに入っている)
|
||||
|
||||
動作要件:SDK2.0以降のシステム本体
|
||||
|
||||
準備)
|
||||
SDK2.0用のSampledemos のcommon,gxをビルドしておく
|
||||
omakerootのあるディレクトリにあるomakeファイルで
|
||||
SAMPLED_DEMOS_COMMON_INCLUDE_DIR に
|
||||
sampledemos/common/includeの位置を指定しておく
|
||||
公開鍵pubkeyをimp/omakeで指定
|
||||
|
||||
ビルド)
|
||||
omakerootのあるディレクトリでomake実行
|
||||
body下でビルドし出来たcia を、Imp下のomake(SRC_IMPORTEE_PATH)で指定
|
||||
(量産機で使うには、マスタリング後のciaを指定)
|
||||
ビルドするとNANDインポート用のcciができる
|
||||
|
||||
|
||||
インポート先:
|
||||
ciaをSDからインポート -> SD .. DevMenu使用,DevMenufullならnandにも入れられる
|
||||
カード起動しインポート -> NAND
|
||||
|
||||
量産実機での実行にはマスタリング必須
|
||||
body下で作成したcia をOLS付でマスタリングし
|
||||
そのciaを使って作成したcciをマスタリング
|
||||
|
||||
マスタリングの流れ:
|
||||
・body/images下に出来たciaをマスタリングしOLSを付ける
|
||||
・このciaをImpのomakeで指定、もしくは指定場所に置く
|
||||
(bodyのビルドで上書きされないよう場所かファイル名変えたほうが安全)
|
||||
・imp/omake実行し、cci作成
|
||||
・cciをマスタリング
|
||||
|
||||
OLSごとリマスタバージョン更新が必要
|
||||
common/ver.hは表示バージョン、ここだけ変更してもダメ
|
||||
body/omekeのコメントを参考
|
||||
|
||||
NANDインポートで失敗する場合はciaをチェック
|
||||
SDインポートし
|
||||
開発実機で動く-> マスタリングしてない
|
||||
量産実機で動く-> OLSが付いてない
|
||||
|
||||
1.03以降はインポート先の本体をシリアル番号で制限
|
||||
"imp/imp_lis/"下にリストと署名サンプル
|
||||
OpenSSL0.9.6k,rと 1.0.0d で動作確認
|
||||
imp/imp_list 下にコマンドラインツール(win32版)用バッチ
|
||||
使い方はcygwinでも同じ
|
||||
ユーザにはomake指定のpubkeyと組のprivatekeyで作った署名を渡す
|
||||
|
||||
|
||||
本ツール開発時のマスタリングは推進G(高橋さん)に依頼した
|
||||
マスタリング済みDevMenu(full)および
|
||||
CUP作成は飯島さんに聞く
|
||||
@ -1,10 +0,0 @@
|
||||
<インポータのオプション有効化>
|
||||
|
||||
cms_inf.txtの名前でファイル作成
|
||||
以下の記述でオプションが有効になる
|
||||
|
||||
-t: テストメニュー
|
||||
カード上のセーブにテストパターン書き込み&ベリファイ
|
||||
|
||||
-p: 本体シリアルを表示
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
量産実機での動作にはマスタリングが必要
|
||||
|
||||
ciaはサーバ認証(OLS)必須
|
||||
OLSは前回取得時からリマスタバージョンを上げる必要あり(2011/2月現在)
|
||||
(例えば、前回 1.0.0 なら 1.0.1 )
|
||||
メジャーはrsfで指定(Remasterversion)
|
||||
マイナとマイクロはOmakefile
|
||||
MAKECIAFLAGS = -minor 0 -micro 1
|
||||
上の場合 *.0.1 (*はrsfのRemasterversion)
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
|
||||
<操作メニュー>
|
||||
|
||||
操作が出来る状態のとき下画面にボタン表示
|
||||
|
||||
・バックアップが無い状態でカードを差すと
|
||||
バックアップが有効
|
||||
|
||||
・バックアップがある状態では
|
||||
リストアが有効
|
||||
|
||||
(バックアップ)
|
||||
タッチして実行画面
|
||||
カードから本体内メモリに読み出します
|
||||
|
||||
(リストア)
|
||||
タッチして実行画面
|
||||
バックアップした内容をカードへ書きます
|
||||
成功すると自動で消去
|
||||
失敗の場合は消去しません
|
||||
|
||||
(バックアップデリート)
|
||||
先頭画面で 方向キー LEFT + X 同時押し
|
||||
|
||||
|
||||
|
||||
以下、ビルド時にフラグ有効(my_dess.h 内)にした場合のみ使える
|
||||
|
||||
//クラッシュモード
|
||||
書き戻す際にデータを壊す、ベリファイで必ずエラー
|
||||
先頭画面で Y ボタン
|
||||
|
||||
//デバグモード
|
||||
先頭画面で 方向下+Y(0.09まで)
|
||||
先頭画面で 方向下+X+Y(1.00以降)
|
||||
|
||||
クラッシュモード有効時: L ボタン
|
||||
|
||||
//テストデータ書き込み
|
||||
デバグモード中に先頭画面でRボタン
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
|
||||
ビルド時に組み込んだ公開鍵のペアとなるプライベート鍵を使って署名を行う
|
||||
|
||||
バージョンで鍵を識別する
|
||||
鍵変更だけの場合でもバージョンを変えること
|
||||
|
||||
Openssl.exe : cygwinのインスト、Win版がある
|
||||
RSA鍵、ビット長は2048のみ
|
||||
SHA256のダイジェストに署名する
|
||||
Openssl0.9.6.k(r),1.0.0d作成の書名で動作確認
|
||||
|
||||
(鍵作成)
|
||||
openssl genrsa -out private_key.pem 2048
|
||||
openssl enc -d -base64 -in private_key.pem -out private_key.der
|
||||
openssl rsa -pubout -inform DER -outform DER -in private_key.der -out public_key.der
|
||||
|
||||
(1.0.0の場合)
|
||||
openssl genpkey -out private_key.der -outform DER -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537
|
||||
openssl rsa -pubout -inform DER -outform DER -in private_key.der -out public_key.der
|
||||
|
||||
(署名)
|
||||
openssl dgst -sha256 -binary -keyform DER -sign private_key.der -out csm_sign.dat csm_list.txt
|
||||
|
||||
プライベート鍵のバイナリが不要なら
|
||||
openssl genrsa -out private_key.pem 2048
|
||||
openssl rsa -pubout -outform DER -in private_key.pem -out public_key.der
|
||||
|
||||
openssl dgst -sha256 -binary -sign private_key.pem -out csm_sign.dat csm_list.txt
|
||||
|
||||
作成したpub鍵をインポートアプリのomakeで指定
|
||||
OBJECTS[] =
|
||||
$`(ObjectFromBinary $(TARGET), ./Imp_list/Public_Key.der)
|
||||
|
||||
リストをプライベート鍵で署名作成、リストと署名をインポート時にSDから読む
|
||||
@ -1,274 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<NintendoWareIntermediateFile>
|
||||
<GraphicsContentCtr Version="1.3.0" Namespace="">
|
||||
<EditData>
|
||||
<MetaData>
|
||||
<Key>MetaData</Key>
|
||||
<Create Author="" Date="2010-12-02T15:21:10" Source="COMMON.mb">
|
||||
<ToolDescriptions Name="NW4C_Export for Maya 2009 Service Pack 1" Version="1.2.0" />
|
||||
</Create>
|
||||
<Modify Date="2011-02-28T13:27:46">
|
||||
<ToolDescriptions Name="NintendoWare Creative Studio For Banner." Version="1.3.0.30235" />
|
||||
</Modify>
|
||||
</MetaData>
|
||||
<ContentSummaryMetaData>
|
||||
<Key>ContentSummaries</Key>
|
||||
<Values>
|
||||
<ContentSummary ContentTypeName="GraphicsContent">
|
||||
<ObjectSummaries>
|
||||
<ObjectSummary TypeName="SkeletalModel" Name="">
|
||||
<Notes>
|
||||
<Note Name="MaterialCount" Value="1" />
|
||||
<Note Name="ShapeCount" Value="1" />
|
||||
<Note Name="MeshCount" Value="1" />
|
||||
<Note Name="BoneCount" Value="1" />
|
||||
<Note Name="TotalPrimitiveSetCount" Value="1" />
|
||||
<Note Name="TotalNoneSkinningPrimitiveSetCount" Value="1" />
|
||||
<Note Name="TotalRigidSkinningPrimitiveSetCount" Value="0" />
|
||||
<Note Name="TotalSmoothSkinningPrimitiveSetCount" Value="0" />
|
||||
<Note Name="TotalIndexStreamCount" Value="1" />
|
||||
<Note Name="TotalPolygonCount" Value="2" />
|
||||
<Note Name="TotalVertexCount" Value="4" />
|
||||
</Notes>
|
||||
</ObjectSummary>
|
||||
</ObjectSummaries>
|
||||
</ContentSummary>
|
||||
</Values>
|
||||
</ContentSummaryMetaData>
|
||||
</EditData>
|
||||
<Models>
|
||||
<SkeletalModel Name="" IsBranchVisible="true" IsVisible="true" CullingMode="Dynamic" IsNonuniformScalable="false" LayerId="0" NeededBoneCapacity="20">
|
||||
<EditData>
|
||||
<ModelDccToolExportOption ExportStartFrame="0" Magnify="1" AdjustSkinning="None" MeshVisibilityMode="BindByIndex">
|
||||
<Key>ModelDccToolInfo</Key>
|
||||
</ModelDccToolExportOption>
|
||||
<OptimizationLogArrayMetaData Size="1">
|
||||
<Key>OptimizationLogs</Key>
|
||||
<Values>
|
||||
<OptimizationLog Date="2010-12-02T15:21" EditorVersion="1.2.0.27817">
|
||||
<Options NodeCompressionMode="None" IsMergeMeshOwnerBoneEnabled="false" IsCombineMeshEnabled="false" IsCompressMaterialEnabled="false" IsOptimizePlygonPrimitiveEnabled="false" IsConvertOneBoneSkeletalModelToModel="true" IsDeleteUnusedVertexEnabled="false" PositionQuantizeMode="Float" NormalQuantizeMode="Float" TextureQuantizeMode="Float" GroupByIndexStream="false" />
|
||||
</OptimizationLog>
|
||||
</Values>
|
||||
</OptimizationLogArrayMetaData>
|
||||
</EditData>
|
||||
<AnimationGroupDescriptions>
|
||||
<GraphicsAnimationGroupDescription Name="SkeletalAnimation" EvaluationTiming="AfterSceneCulling">
|
||||
<MemberInformationSet>
|
||||
<AnimationMemberDescription BlendOperationName="CalculatedTransform" IsBinarized="true">
|
||||
<Path>Skeleton.Bones["*"].AnimatedTransform</Path>
|
||||
</AnimationMemberDescription>
|
||||
</MemberInformationSet>
|
||||
</GraphicsAnimationGroupDescription>
|
||||
<GraphicsAnimationGroupDescription Name="VisibilityAnimation" EvaluationTiming="BeforeWorldUpdate">
|
||||
<MemberInformationSet>
|
||||
<AnimationMemberDescription BlendOperationName="Bool" IsBinarized="true">
|
||||
<Path>IsVisible</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Bool" IsBinarized="true">
|
||||
<Path>Meshes["*"].IsVisible</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Bool" IsBinarized="true">
|
||||
<Path>IsBranchVisible</Path>
|
||||
</AnimationMemberDescription>
|
||||
</MemberInformationSet>
|
||||
</GraphicsAnimationGroupDescription>
|
||||
<GraphicsAnimationGroupDescription Name="MaterialAnimation" EvaluationTiming="AfterSceneCulling">
|
||||
<MemberInformationSet>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Emission</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Ambient</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Diffuse</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Specular0</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Specular1</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant0</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant1</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant2</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant3</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant4</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant5</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureMappers["*"].Sampler.BorderColor</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Int" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureMappers["*"].Texture</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].FragmentOperation.BlendOperation.BlendColor</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Vector2" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureCoordinators["*"].Scale</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Float" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureCoordinators["*"].Rotate</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Vector2" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureCoordinators["*"].Translate</Path>
|
||||
</AnimationMemberDescription>
|
||||
</MemberInformationSet>
|
||||
</GraphicsAnimationGroupDescription>
|
||||
</AnimationGroupDescriptions>
|
||||
<Transform>
|
||||
<Scale X="1" Y="1" Z="1" />
|
||||
<Rotate X="0" Y="0" Z="0" />
|
||||
<Translate X="0" Y="0" Z="0" />
|
||||
</Transform>
|
||||
<Shapes>
|
||||
<SeparateDataShapeCtr>
|
||||
<OrientedBoundingBox>
|
||||
<CenterPosition X="0" Y="0" Z="6.5" />
|
||||
<OrientationMatrix M00="1" M01="0" M02="0" M10="0" M11="1" M12="0" M20="0" M21="0" M22="1" />
|
||||
<Size X="24" Y="12" Z="0" />
|
||||
</OrientedBoundingBox>
|
||||
<PositionOffset X="0" Y="0" Z="0" />
|
||||
<PrimitiveSets>
|
||||
<PrimitiveSetCtr SkinningMode="None">
|
||||
<BoneIndexTable>0</BoneIndexTable>
|
||||
<Primitives>
|
||||
<PrimitiveCtr>
|
||||
<IndexStreams>
|
||||
<UbyteIndexStreamCtr PrimitiveMode="Triangles" Size="6">0 1 2 1 3 2</UbyteIndexStreamCtr>
|
||||
</IndexStreams>
|
||||
</PrimitiveCtr>
|
||||
</Primitives>
|
||||
</PrimitiveSetCtr>
|
||||
</PrimitiveSets>
|
||||
<VertexAttributes>
|
||||
<Vector3VertexStreamCtr Usage="Position" VertexSize="4" Scale="1" QuantizedMode="Float">
|
||||
-12 -6 6.5
|
||||
12 -6 6.5
|
||||
-12 6 6.5
|
||||
12 6 6.5
|
||||
</Vector3VertexStreamCtr>
|
||||
<Vector3VertexAttributeCtr Usage="Normal">0 0 1</Vector3VertexAttributeCtr>
|
||||
<Vector2VertexStreamCtr Usage="TextureCoordinate0" VertexSize="4" Scale="1" QuantizedMode="Float">
|
||||
0 0
|
||||
1 0
|
||||
0 1
|
||||
1 1
|
||||
</Vector2VertexStreamCtr>
|
||||
</VertexAttributes>
|
||||
</SeparateDataShapeCtr>
|
||||
</Shapes>
|
||||
<Materials>
|
||||
<MaterialCtr Name="MT_00" IsCompressible="true" LightSetIndex="0" FogIndex="0" IsFragmentLightEnabled="false" IsVertexLightEnabled="false" IsHemiSphereLightEnabled="false" IsHemiSphereOcclusionEnabled="false" IsFogEnabled="false" TextureCoordinateConfig="Config0120" TranslucencyKind="Layer1" ShaderProgramDescriptionIndex="-1" ShaderBinaryKind="Default">
|
||||
<ShaderReference />
|
||||
<MaterialColor VertexColorScale="1">
|
||||
<Emission R="0" G="0" B="0" A="0" />
|
||||
<Ambient R="1" G="1" B="1" A="0" />
|
||||
<Diffuse R="1" G="1" B="1" A="1" />
|
||||
<Specular0 R="1" G="1" B="1" A="0" />
|
||||
<Specular1 R="0" G="0" B="0" A="0" />
|
||||
<Constant0 R="0" G="0" B="0" A="1" />
|
||||
<Constant1 R="0" G="0" B="0" A="1" />
|
||||
<Constant2 R="0" G="0" B="0" A="1" />
|
||||
<Constant3 R="0" G="0" B="0" A="1" />
|
||||
<Constant4 R="0" G="0" B="0" A="1" />
|
||||
<Constant5 R="0" G="0" B="0" A="1" />
|
||||
</MaterialColor>
|
||||
<Rasterization CullingMode="BackFace" IsPolygonOffsetEnabled="false" PolygonOffsetUnit="0" />
|
||||
<TextureCoordinators>
|
||||
<TextureCoordinatorCtr SourceCoordinate="0" MappingMethod="UvCoordinateMap" ReferenceCamera="0" MatrixMode="DccMaya" ScaleS="1" ScaleT="1" Rotate="0" TranslateS="0" TranslateT="0" />
|
||||
</TextureCoordinators>
|
||||
<TextureMappers>
|
||||
<PixelBasedTextureMapperCtr>
|
||||
<TextureReference>Textures["banner_imp"]@file:Textures/banner_imp.ctex</TextureReference>
|
||||
<StandardTextureSamplerCtr MinFilter="Linear" MagFilter="Linear" WrapS="ClampToEdge" WrapT="ClampToEdge" MinLod="0" LodBias="0">
|
||||
<BorderColor R="0" G="0" B="0" A="1" />
|
||||
</StandardTextureSamplerCtr>
|
||||
</PixelBasedTextureMapperCtr>
|
||||
</TextureMappers>
|
||||
<FragmentShader LayerConfig="ConfigurationType0">
|
||||
<BufferColor R="0" G="0" B="0" A="1" />
|
||||
<FragmentBump BumpTextureIndex="Texture0" BumpMode="NotUsed" IsBumpRenormalize="false" />
|
||||
<FragmentLighting FresnelConfig="No" IsClampHighLight="false" IsDistribution0Enabled="false" IsDistribution1Enabled="false" IsGeometricFactor0Enabled="false" IsGeometricFactor1Enabled="false" IsReflectionEnabled="false" />
|
||||
<FragmentLightingTable>
|
||||
<ReflectanceRSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</ReflectanceRSampler>
|
||||
<ReflectanceGSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</ReflectanceGSampler>
|
||||
<ReflectanceBSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</ReflectanceBSampler>
|
||||
<Distribution0Sampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</Distribution0Sampler>
|
||||
<Distribution1Sampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</Distribution1Sampler>
|
||||
<FresnelSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</FresnelSampler>
|
||||
</FragmentLightingTable>
|
||||
<TextureCombiners>
|
||||
<TextureCombinerCtr CombineRgb="Replace" CombineAlpha="Replace" ScaleRgb="One" ScaleAlpha="One" Constant="Constant0" BufferInputRgb="PreviousBuffer" BufferInputAlpha="PreviousBuffer">
|
||||
<SourceRgb Source0="Texture0" Source1="FragmentPrimaryColor" Source2="FragmentSecondaryColor" />
|
||||
<OperandRgb Operand0="Color" Operand1="Color" Operand2="Color" />
|
||||
<SourceAlpha Source0="Texture0" Source1="Constant" Source2="Constant" />
|
||||
<OperandAlpha Operand0="Alpha" Operand1="Alpha" Operand2="Alpha" />
|
||||
</TextureCombinerCtr>
|
||||
</TextureCombiners>
|
||||
<AlphaTest IsTestEnabled="false" TestFunction="Always" TestReference="0" />
|
||||
</FragmentShader>
|
||||
<FragmentOperation>
|
||||
<DepthOperation IsTestEnabled="true" TestFunction="Less" IsMaskEnabled="false" />
|
||||
<BlendOperation Mode="Blend" LogicOperation="Copy">
|
||||
<RgbParameter BlendFunctionSource="SourceAlpha" BlendFunctionDestination="OneMinusSourceAlpha" BlendEquation="FuncAdd" />
|
||||
<AlphaParameter BlendFunctionSource="One" BlendFunctionDestination="Zero" BlendEquation="FuncAdd" />
|
||||
<BlendColor R="0" G="0" B="0" A="1" />
|
||||
</BlendOperation>
|
||||
<StencilOperation IsTestEnabled="false" TestFunction="Never" TestReference="0" TestMask="255" FailOperation="Keep" ZFailOperation="Keep" PassOperation="Keep" />
|
||||
</FragmentOperation>
|
||||
</MaterialCtr>
|
||||
</Materials>
|
||||
<Meshes>
|
||||
<Mesh IsVisible="true" RenderPriority="0" MeshNodeName="BONE_00">
|
||||
<EditData>
|
||||
<DccToolSourceNodeMetaData>
|
||||
<Key>DccToolSourceNode</Key>
|
||||
<Values>
|
||||
<NodeName>BONE_00</NodeName>
|
||||
</Values>
|
||||
</DccToolSourceNodeMetaData>
|
||||
</EditData>
|
||||
<SeparateShapeReference>Shapes[0]</SeparateShapeReference>
|
||||
<MaterialReference>Materials["MT_00"]</MaterialReference>
|
||||
</Mesh>
|
||||
</Meshes>
|
||||
<Skeleton RootBoneName="BONE_00" ScalingRule="Standard" IsTranslateAnimationEnabled="true">
|
||||
<Bones>
|
||||
<Bone Name="BONE_00" ParentBoneName="" IsSegmentScaleCompensate="false" IsCompressible="true" IsNeededRendering="true" HasSkinningMatrix="false" BillboardMode="YAxial">
|
||||
<Transform>
|
||||
<Scale X="1" Y="1" Z="1" />
|
||||
<Rotate X="0" Y="0" Z="0" />
|
||||
<Translate X="0" Y="0" Z="0" />
|
||||
</Transform>
|
||||
</Bone>
|
||||
</Bones>
|
||||
</Skeleton>
|
||||
</SkeletalModel>
|
||||
</Models>
|
||||
</GraphicsContentCtr>
|
||||
</NintendoWareIntermediateFile>
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
-t
|
||||
@ -1,27 +0,0 @@
|
||||
|
||||
目的:許可した本体のみインポート
|
||||
|
||||
公開鍵はROMから読み込む
|
||||
|
||||
SC) ツール用本体のシリアルをメールなどでREDへ連絡
|
||||
RED) リスト(csm_list)と署名(csm_sign)を作成し送る
|
||||
|
||||
|
||||
インポート手順
|
||||
・ リスト、署名を書き込んだSDをCTRに差す
|
||||
・ インポート用アプリをカード起動
|
||||
・ 有効な本体ならインポートメニューが表示される
|
||||
|
||||
|
||||
署名はOpeneelで作成
|
||||
特に手を加えずSDルートに置く
|
||||
|
||||
リストの書き方
|
||||
インポート許可シリアルをテキストで羅列
|
||||
---
|
||||
aaaaaaaa
|
||||
bbbbbbbb
|
||||
----
|
||||
本体裏シリアル終端のdigit(四角い枠の数字)は省く
|
||||
digit確認したい場合はリスト作成時にやっとく
|
||||
ファイルサイズは64Kまで(シリアルのみ記載で、およそ4000台)
|
||||
@ -1,11 +0,0 @@
|
||||
<インポータのオプション有効化>
|
||||
|
||||
cms_inf.txtの名前でファイル作成しSDのルート下に配置
|
||||
以下の記述でオプションが有効になる
|
||||
デバグや不具合調査時用、通常はいらない
|
||||
|
||||
-t: テストメニュー
|
||||
カード上のセーブにテストパターン書き込み&ベリファイ
|
||||
|
||||
-p: 本体シリアルを表示
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -126,16 +126,6 @@ u32 WaitKey(u32 mask)
|
||||
hpr->ReadLatest(&padStatus);
|
||||
if(padStatus.trigger & mask)return padStatus.trigger;
|
||||
CheckSysBreak();
|
||||
/*
|
||||
int i = nn::ndm::GetDaemonStatus( nn::ndm::DN_CEC );
|
||||
if (i !=3 )NN_LOG("DN_CEC %d\n",i);
|
||||
i = nn::ndm::GetDaemonStatus( nn::ndm::DN_BOSS );
|
||||
if (i !=3 )NN_LOG("DN_BOSS %d\n",i);
|
||||
i = nn::ndm::GetDaemonStatus( nn::ndm::DN_NIM );
|
||||
if (i !=3 )NN_LOG("DN_NIM %d\n",i);
|
||||
i = nn::ndm::GetDaemonStatus( nn::ndm::DN_FRIENDS );
|
||||
if (i !=3 )NN_LOG("DN_FRIENDS %d\n",i);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@ -247,19 +237,16 @@ void nnMain( void )
|
||||
//nn::Result result;
|
||||
bool flg_applove=false;
|
||||
bool flg_test=false;
|
||||
int i,j,n;
|
||||
s32 fsize;
|
||||
extern bool prohibitHome;// HOME ボタン禁止
|
||||
|
||||
nn::os::Initialize();
|
||||
nn::fs::Initialize();
|
||||
|
||||
//DEA-SUPにて推奨のフリーズ暫定対策:無線デーモンを停止 (2011.3.1 現在)
|
||||
//ただし、スリープ時の"いつのまに通信"は止まらない
|
||||
//ただし、スリープに入ると再開
|
||||
//無線は使わないので本体横スイッチ切っとくのが確実
|
||||
nn::ndm::Initialize();
|
||||
result = nn::ndm::SuspendScheduler();
|
||||
//NN_LOG("%d",result.GetDescription());
|
||||
nn::ndm::SuspendScheduler();
|
||||
|
||||
//中断処理の準備
|
||||
InitSysBreak((uptr)endfunc);
|
||||
@ -274,7 +261,7 @@ void nnMain( void )
|
||||
//if (result.IsSuccess())
|
||||
result = nn::am::InitializeForLocalImporter();
|
||||
|
||||
nn::applet::DisableSleep();//スリープ非対応
|
||||
nn::applet::DisableSleep();//スリープ非対応 .. 無線対策
|
||||
|
||||
// ヒープの確保
|
||||
appHeap.Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR);
|
||||
@ -309,135 +296,138 @@ void nnMain( void )
|
||||
if (READ_BUFFER_SIZE < LIST_LENGTH)ErrorStop("buffer size");//バッファサイズのチェック
|
||||
|
||||
//ファイルバッファ
|
||||
//カゲマイ上のSDリード速度比較実験で32アラインが良かったので、おまじない
|
||||
//回数もサイズも少ないので気にする必要ないかも
|
||||
//SDKで4倍数サイズ、4アライン推奨
|
||||
if (READ_BUFFER_SIZE > appHeap.GetTotalFreeSize())ErrorStop("memory alloc");
|
||||
readBuf = reinterpret_cast<u8*>(appHeap.Allocate(READ_BUFFER_SIZE,32));
|
||||
if (ROMFS_BUFFER_SIZE > appHeap.GetTotalFreeSize())ErrorStop("memory alloc");
|
||||
romfsBuf = reinterpret_cast<u8*>(appHeap.Allocate(ROMFS_BUFFER_SIZE,32));
|
||||
|
||||
/*
|
||||
//シリアルチェック
|
||||
if( GetSerial() == false)ErrorStop("Get Serial");//本体シリの取得に失敗
|
||||
if (nn::os::CTR::GetRunningTargetHardware() != nn::os::TARGET_HARDWARE_PRODUCT)
|
||||
{//デバッガ
|
||||
flg_test=true;
|
||||
flg_applove=true;
|
||||
}else{//実機ならシリアルチェック
|
||||
int i,j,n;
|
||||
s32 fsize;
|
||||
if( GetSerial() == false)ErrorStop("Get Serial");//本体シリの取得に失敗
|
||||
|
||||
result = nn::fs::MountSdmc();//ダイレクトでマウント..マスタリング時にワーニング
|
||||
if (result.IsFailure())ErrorStop("Mount SD");
|
||||
fsize = FileRead(INF_FILE);//設定ファイルがあるか
|
||||
if((fsize < 1024) && (fsize > 0))//サイズチェック,増えても1Kは超えない
|
||||
{//不具合調査時に状況にあわせて現場で作成&変更を想定したオプション
|
||||
//通常は不要なので無しでも動くようしとく
|
||||
n = 0;
|
||||
while(n < fsize)
|
||||
{
|
||||
if (readBuf[n] == '-'){
|
||||
if (n == fsize-1)break;//終端
|
||||
result = nn::fs::MountSdmc();//ダイレクトでマウント..マスタリング時にワーニング
|
||||
if (result.IsFailure())ErrorStop("Mount SD");
|
||||
fsize = FileRead(INF_FILE);//設定ファイルがあるか
|
||||
if((fsize < 1024) && (fsize > 0))//サイズチェック,増えても1Kは超えない
|
||||
{//不具合調査時に状況にあわせて現場で作成&変更を想定したオプション
|
||||
//通常は不要なので無しでも動くようしとく
|
||||
n = 0;
|
||||
while(n < fsize)
|
||||
{
|
||||
if (readBuf[n] == '-'){
|
||||
if (n == fsize-1)break;//終端
|
||||
n++;
|
||||
switch (readBuf[n]){
|
||||
case 'p':// -p .. 本体シリアル表示
|
||||
strcpy(seri,"s/n: ");
|
||||
strcat(seri,(char *)serialNo);
|
||||
shf_SetScale(0.5,0.5);
|
||||
drawText(10,40,(char*)seri);
|
||||
shf_SetScale(0.7,0.7);
|
||||
break;
|
||||
case 't':// -t .. テストメニュー有効
|
||||
flg_test = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
n++;
|
||||
switch (readBuf[n]){
|
||||
case 'p':// -p .. 本体シリアル表示
|
||||
strcpy(seri,"s/n: ");
|
||||
strcat(seri,(char *)serialNo);
|
||||
shf_SetScale(0.5,0.5);
|
||||
drawText(10,40,(char*)seri);
|
||||
shf_SetScale(0.7,0.7);
|
||||
break;
|
||||
case 't':// -t .. テストメニュー有効
|
||||
flg_test = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//シリアル表示(オプション)後にチェック
|
||||
//デバッガ=15,実機=11
|
||||
if (GettedSerLen < 11)ErrorStop("invalid Serial");
|
||||
|
||||
fsize = FileRead(SIGN_FILE);//署名リード
|
||||
if(fsize != 256)ErrorStop("sign file");//鍵のbit長は2046固定
|
||||
memcpy(sign,readBuf,256);//readBuf -> sign
|
||||
fsize = FileRead(LIST_FILE);//リストリード
|
||||
if((fsize > LIST_LENGTH ) || (fsize == 0))ErrorStop("list file");
|
||||
|
||||
nn::fs::Unmount("sdmc:"); //検証後はSDから読まないでメモリバッファ上のデータを使う: 差替え対策
|
||||
if (VeriRsa(readBuf,fsize,sign) == false)ErrorStop("sign verify");
|
||||
|
||||
//署名検証OK
|
||||
int list_ct = 0;
|
||||
n=0;
|
||||
while(n < fsize)//リスト作成
|
||||
{
|
||||
if (readBuf[n] == '#')//コメント行を無視、ワイド文字非対応
|
||||
{
|
||||
i = CrLf(n,fsize);//コメントの次行
|
||||
if (i == 0)break;//ファイル終わりまで改行が見つからない
|
||||
}else
|
||||
{
|
||||
//改行さがし
|
||||
if ((fsize-n) > (SDK_SER_LEN+2))
|
||||
{//シリアルは改行つける
|
||||
i = CrLf(n,n+SDK_SER_LEN+2);
|
||||
if (i == 0)ErrorStop("list broken");//改行が見つからない
|
||||
}else{
|
||||
i = CrLf(n,fsize);
|
||||
if (i ==0)i = fsize;//改行以外でファイル終
|
||||
}
|
||||
if ((i-n) > GettedSerLen)//シリアルをリスト化
|
||||
{
|
||||
j = 0;
|
||||
while(n<i)
|
||||
{
|
||||
if ((readBuf[n] == 0x0d) || (readBuf[n] == 0x0a))break;
|
||||
s_list[list_ct][j] = readBuf[n];
|
||||
j++;n++;
|
||||
}
|
||||
s_list[list_ct][j] = 0;//終端
|
||||
list_ct++;
|
||||
if (list_ct>=LIST_MAX)ErrorStop("List too Long");
|
||||
}
|
||||
}
|
||||
if ((fsize-i) < GettedSerLen)break;//ファイル終
|
||||
n=i;//ポインタを改行の次へ
|
||||
}
|
||||
|
||||
//文字数チェック
|
||||
//開発初期のファームアップで空ID本体が発生してたので念の為
|
||||
//2011.5現在、製品で報告はない
|
||||
if (GettedSerLen < 11)ErrorStop("invalid Serial");
|
||||
|
||||
//本体シリアルがリストにあるかチェック
|
||||
n =0;
|
||||
while(n<list_ct)
|
||||
{
|
||||
if (GettedSerLen == strlen((char*)s_list[n]))
|
||||
{
|
||||
for(i=0;i<GettedSerLen;i++)
|
||||
{
|
||||
if (serialNo[i] != s_list[n][i])break;
|
||||
}
|
||||
if (i == GettedSerLen)
|
||||
{
|
||||
flg_applove = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
n++;
|
||||
}
|
||||
}
|
||||
|
||||
//シリアル表示(オプション)後にチェック
|
||||
//デバッガ=15,実機=11
|
||||
if (GettedSerLen < 11)ErrorStop("invalid Serial");
|
||||
|
||||
fsize = FileRead(SIGN_FILE);//署名リード
|
||||
if(fsize != 256)ErrorStop("sign file");//鍵のbit長は2046固定
|
||||
memcpy(sign,readBuf,256);//readBuf -> sign
|
||||
fsize = FileRead(LIST_FILE);//リストリード
|
||||
if((fsize > LIST_LENGTH ) || (fsize == 0))ErrorStop("list file");
|
||||
|
||||
nn::fs::Unmount("sdmc:"); //検証後はSDから読まないでメモリバッファ上のデータを使う: 差替え対策
|
||||
if (VeriRsa(readBuf,fsize,sign) == false)ErrorStop("sign verify");
|
||||
|
||||
//署名検証OK
|
||||
int list_ct = 0;
|
||||
n=0;
|
||||
while(n < fsize)//リスト作成
|
||||
{
|
||||
if (readBuf[n] == '#')//コメント行を無視、ワイド文字非対応
|
||||
{
|
||||
i = CrLf(n,fsize);//コメントの次行
|
||||
if (i == 0)break;//ファイル終わりまで改行が見つからない
|
||||
}else
|
||||
{
|
||||
//改行さがし
|
||||
if ((fsize-n) > (SDK_SER_LEN+2))
|
||||
{//シリアルは改行つける
|
||||
i = CrLf(n,n+SDK_SER_LEN+2);
|
||||
if (i == 0)ErrorStop("list broken");//改行が見つからない
|
||||
}else{
|
||||
i = CrLf(n,fsize);
|
||||
if (i ==0)i = fsize;//改行以外でファイル終
|
||||
}
|
||||
if ((i-n) > GettedSerLen)//シリアルをリスト化
|
||||
{
|
||||
j = 0;
|
||||
while(n<i)
|
||||
{
|
||||
if ((readBuf[n] == 0x0d) || (readBuf[n] == 0x0a))break;
|
||||
s_list[list_ct][j] = readBuf[n];
|
||||
j++;n++;
|
||||
}
|
||||
s_list[list_ct][j] = 0;//終端
|
||||
list_ct++;
|
||||
if (list_ct>=LIST_MAX)ErrorStop("List too Long");
|
||||
}
|
||||
}
|
||||
if ((fsize-i) < GettedSerLen)break;//ファイル終
|
||||
n=i;//ポインタを改行の次へ
|
||||
}
|
||||
|
||||
//プログラムミス、コードバグ対策
|
||||
//値が小さいと判定が緩くなるが、動作確認時にスルーしそうなので
|
||||
//念の為チェック
|
||||
if (GettedSerLen < 11)ErrorStop("invalid Serial");
|
||||
|
||||
//本体シリアルがリストにあるかチェック
|
||||
n =0;
|
||||
while(n<list_ct)
|
||||
{
|
||||
if (GettedSerLen == strlen((char*)s_list[n]))
|
||||
{
|
||||
for(i=0;i<GettedSerLen;i++)
|
||||
{
|
||||
if (serialNo[i] != s_list[n][i])break;
|
||||
}
|
||||
if (i == GettedSerLen)
|
||||
{
|
||||
flg_applove = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
n++;
|
||||
}
|
||||
*/
|
||||
u32 mask = 0;
|
||||
|
||||
//メニュー表示
|
||||
// if (flg_applove)//インポート許可本体
|
||||
if (flg_applove)//インポート許可本体
|
||||
{
|
||||
drawText(80,100,"Push X : Import");
|
||||
drawText(80,140,"Push Y : Delete");
|
||||
drawText(80,140,"Push Y : Delete"); //本体機能で消せるようなったら、そっち使う
|
||||
mask |= nn::hid::BUTTON_X | nn::hid::BUTTON_Y;
|
||||
}
|
||||
|
||||
//本体機能で消せるようなったら、そっち使うべき
|
||||
//将来的にdeleteは省いていいかも
|
||||
|
||||
//if (flg_test)//テストメニュー
|
||||
if (flg_test)//テストメニュー
|
||||
{
|
||||
drawText(80,160,"Push R : Test Data");
|
||||
mask |= nn::hid::BUTTON_R;
|
||||
|
||||
@ -53,11 +53,11 @@ void drawText(u16 x,u16 y,char *s,int v)
|
||||
//---------------------------------------- テストパターン
|
||||
void make_pattern()
|
||||
{
|
||||
int i,j;
|
||||
j=0;
|
||||
for (i=0;i<1024*1024;i++){
|
||||
src_buff[i] = j+i;
|
||||
if (i & 0x100)j++;
|
||||
int i;
|
||||
int *buff;
|
||||
buff = (int*)&src_buff[0];
|
||||
for (i=0;i<sizeof(src_buff)/sizeof(int);i++){
|
||||
buff[i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,6 +65,106 @@ void make_pattern()
|
||||
s32 size;
|
||||
#define SIZE_TEST1 421888
|
||||
//#define SIZE_TEST1 244736 //dup
|
||||
bool Test0_W(int n)//Casual
|
||||
{
|
||||
|
||||
res = nn::fs::FormatSaveData(100,100,false);
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"format Fail");
|
||||
return false;
|
||||
}
|
||||
res =nn::fs::MountSaveData();
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"Mount Fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
int num = 0,total=0;
|
||||
while(1){
|
||||
sprintf(file_path,"data:/test%d",num);
|
||||
res = nn::fs::TryCreateDirectory(file_path);
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"Dir create Fail");
|
||||
nn::fs::Unmount("data:");
|
||||
return false;
|
||||
}
|
||||
sprintf(file_path,"data:/test%d/test%d.bin",num,num);
|
||||
res = fout.TryInitialize(file_path,true);
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"open Fail");
|
||||
nn::fs::Unmount("data:");
|
||||
return false;
|
||||
}
|
||||
res = fout.TryWrite( &size,&src_buff[total],512);
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"write Fail");
|
||||
fout.Finalize();
|
||||
nn::fs::Unmount("data:");
|
||||
return false;
|
||||
}
|
||||
fout.Finalize();
|
||||
total += 512;
|
||||
num++;
|
||||
sprintf(str,"size %d , num %d",total,num);
|
||||
s_RenderSystem.Clear();
|
||||
drawText(10,80,str);
|
||||
s_RenderSystem.SwapBuffers();
|
||||
//if (size<512)break;
|
||||
if (num == n)break;
|
||||
}
|
||||
fout.Finalize();
|
||||
nn::fs::CommitSaveData();
|
||||
nn::fs::Unmount("data:");
|
||||
NN_LOG("total %d",total);
|
||||
drawText(10,100,"end");
|
||||
s_RenderSystem.SwapBuffers();
|
||||
nngxWaitVSync(NN_GX_DISPLAY0);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Test0_V(int n)//Casual
|
||||
{
|
||||
|
||||
int num = 0,total=0;
|
||||
while(1){
|
||||
sprintf(file_path,"data:/test%d/test%d.bin",num,num);
|
||||
res = fin.TryInitialize(file_path);
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"open Fail");
|
||||
nn::fs::Unmount("data:");
|
||||
return false;
|
||||
}
|
||||
res = fin.TryRead( &size,&get_buff[total],512);
|
||||
if (res.IsFailure()){
|
||||
drawText(8,100,"read Fail");
|
||||
fin.Finalize();
|
||||
nn::fs::Unmount("data:");
|
||||
return false;
|
||||
}
|
||||
for(int i=0;i<512;i++)if (src_buff[total+i]!=get_buff[total+i])return false;
|
||||
fin.Finalize();
|
||||
total += 512;
|
||||
num++;
|
||||
sprintf(str,"size %d , num %d",total,num);
|
||||
s_RenderSystem.Clear();
|
||||
drawText(10,80,str);
|
||||
s_RenderSystem.SwapBuffers();
|
||||
//if (size<512)break;
|
||||
if (num == n)break;
|
||||
}
|
||||
fin.Finalize();
|
||||
nn::fs::CommitSaveData();
|
||||
nn::fs::Unmount("data:");
|
||||
NN_LOG("total %d",total);
|
||||
drawText(10,100,"end");
|
||||
s_RenderSystem.SwapBuffers();
|
||||
nngxWaitVSync(NN_GX_DISPLAY0);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool Test1_W()
|
||||
{
|
||||
int total,size2;
|
||||
@ -580,7 +680,8 @@ bool Test5_V()
|
||||
return true;
|
||||
}
|
||||
|
||||
const char kinsi[] = {0x22,'<','>','?','*','|',0x5c,':',' ','/',0};//0x22 = "",0x5c = 円マーク
|
||||
const char kinsi[] = {0x22,'<','>','?','*','|',0x5c,':',' ',0};//0x22 = "",0x5c = 円マーク
|
||||
// スラッシュはセーブ時に重ね("//")ても"/"になり,末尾だとエラーとなる
|
||||
const char *kinsi2[] = { "CON","PRN","NUL","AUX","LPT1","LPT2","LPT3","LPT4","COM1","COM2","COM3","COM4"
|
||||
,"con","prn","nul","aux","lpt1","lpt2","lpt3","lpt4","com1","com2","com3","com4",""};
|
||||
|
||||
@ -661,7 +762,7 @@ bool Test6_W()
|
||||
strcat(fname,"_.bin");//data:/base_/base_.bin
|
||||
|
||||
i =0;
|
||||
while(kinsi[i] != '/')//末尾スラッシュは名無しでエラー
|
||||
while(kinsi[i] != 0)
|
||||
{
|
||||
c = kinsi[i];
|
||||
dname[pos] = c;
|
||||
@ -905,7 +1006,7 @@ void TestMain()
|
||||
s_RenderSystem.SwapBuffers();
|
||||
nngxWaitVSync(NN_GX_DISPLAY0);
|
||||
switch(curs){
|
||||
case 0:sccs = Test2_W(10);break;
|
||||
case 0:sccs = Test0_W(5);break;
|
||||
case 1:sccs = Test1_W();break;
|
||||
case 2:sccs = Test2_W(680);break;
|
||||
case 3:sccs = Test3_W();break;
|
||||
@ -926,7 +1027,7 @@ void TestMain()
|
||||
drawText(8,100,"Mount Fail");
|
||||
}else
|
||||
switch(curs){
|
||||
case 0:sccs = Test2_V(10);break;
|
||||
case 0:sccs = Test0_V(5);break;
|
||||
case 1:sccs = Test1_V();break;
|
||||
case 2:sccs = Test2_V(680);break;
|
||||
case 3:sccs = Test3_V();break;
|
||||
@ -940,7 +1041,12 @@ void TestMain()
|
||||
}else if(curs < menu_max)curs++;
|
||||
|
||||
if (value & (nn::hid::BUTTON_A | nn::hid::BUTTON_X)){
|
||||
if (sccs == false)drawText(8,120,"Failed");
|
||||
if (sccs == false){
|
||||
fin.Finalize();
|
||||
fout.Finalize();
|
||||
res =nn::fs::Unmount("data:");
|
||||
drawText(8,120,"Failed");
|
||||
}
|
||||
sprintf(str,"desc %d",res.GetDescription());
|
||||
drawText(10,140,str);
|
||||
s_RenderSystem.SwapBuffers();
|
||||
|
||||
@ -15,8 +15,8 @@
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUPPORTED_TARGETS = CTR-T*.Process.MPCore.*
|
||||
#CTR_APPTYPE = BOTH
|
||||
CTR_APPTYPE = CARD
|
||||
CTR_APPTYPE = BOTH
|
||||
#CTR_APPTYPE = CARD
|
||||
#CTR_APPTYPE = NAND
|
||||
|
||||
#demoライブラリ位置指定
|
||||
|
||||
@ -1,274 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<NintendoWareIntermediateFile>
|
||||
<GraphicsContentCtr Version="1.3.0" Namespace="">
|
||||
<EditData>
|
||||
<MetaData>
|
||||
<Key>MetaData</Key>
|
||||
<Create Author="" Date="2010-12-02T15:21:10" Source="COMMON.mb">
|
||||
<ToolDescriptions Name="NW4C_Export for Maya 2009 Service Pack 1" Version="1.2.0" />
|
||||
</Create>
|
||||
<Modify Date="2011-02-28T13:21:02">
|
||||
<ToolDescriptions Name="NintendoWare Creative Studio For Banner." Version="1.3.0.30235" />
|
||||
</Modify>
|
||||
</MetaData>
|
||||
<ContentSummaryMetaData>
|
||||
<Key>ContentSummaries</Key>
|
||||
<Values>
|
||||
<ContentSummary ContentTypeName="GraphicsContent">
|
||||
<ObjectSummaries>
|
||||
<ObjectSummary TypeName="SkeletalModel" Name="">
|
||||
<Notes>
|
||||
<Note Name="MaterialCount" Value="1" />
|
||||
<Note Name="ShapeCount" Value="1" />
|
||||
<Note Name="MeshCount" Value="1" />
|
||||
<Note Name="BoneCount" Value="1" />
|
||||
<Note Name="TotalPrimitiveSetCount" Value="1" />
|
||||
<Note Name="TotalNoneSkinningPrimitiveSetCount" Value="1" />
|
||||
<Note Name="TotalRigidSkinningPrimitiveSetCount" Value="0" />
|
||||
<Note Name="TotalSmoothSkinningPrimitiveSetCount" Value="0" />
|
||||
<Note Name="TotalIndexStreamCount" Value="1" />
|
||||
<Note Name="TotalPolygonCount" Value="2" />
|
||||
<Note Name="TotalVertexCount" Value="4" />
|
||||
</Notes>
|
||||
</ObjectSummary>
|
||||
</ObjectSummaries>
|
||||
</ContentSummary>
|
||||
</Values>
|
||||
</ContentSummaryMetaData>
|
||||
</EditData>
|
||||
<Models>
|
||||
<SkeletalModel Name="" IsBranchVisible="true" IsVisible="true" CullingMode="Dynamic" IsNonuniformScalable="false" LayerId="0" NeededBoneCapacity="20">
|
||||
<EditData>
|
||||
<ModelDccToolExportOption ExportStartFrame="0" Magnify="1" AdjustSkinning="None" MeshVisibilityMode="BindByIndex">
|
||||
<Key>ModelDccToolInfo</Key>
|
||||
</ModelDccToolExportOption>
|
||||
<OptimizationLogArrayMetaData Size="1">
|
||||
<Key>OptimizationLogs</Key>
|
||||
<Values>
|
||||
<OptimizationLog Date="2010-12-02T15:21" EditorVersion="1.2.0.27817">
|
||||
<Options NodeCompressionMode="None" IsMergeMeshOwnerBoneEnabled="false" IsCombineMeshEnabled="false" IsCompressMaterialEnabled="false" IsOptimizePlygonPrimitiveEnabled="false" IsConvertOneBoneSkeletalModelToModel="true" IsDeleteUnusedVertexEnabled="false" PositionQuantizeMode="Float" NormalQuantizeMode="Float" TextureQuantizeMode="Float" GroupByIndexStream="false" />
|
||||
</OptimizationLog>
|
||||
</Values>
|
||||
</OptimizationLogArrayMetaData>
|
||||
</EditData>
|
||||
<AnimationGroupDescriptions>
|
||||
<GraphicsAnimationGroupDescription Name="SkeletalAnimation" EvaluationTiming="AfterSceneCulling">
|
||||
<MemberInformationSet>
|
||||
<AnimationMemberDescription BlendOperationName="CalculatedTransform" IsBinarized="true">
|
||||
<Path>Skeleton.Bones["*"].AnimatedTransform</Path>
|
||||
</AnimationMemberDescription>
|
||||
</MemberInformationSet>
|
||||
</GraphicsAnimationGroupDescription>
|
||||
<GraphicsAnimationGroupDescription Name="VisibilityAnimation" EvaluationTiming="BeforeWorldUpdate">
|
||||
<MemberInformationSet>
|
||||
<AnimationMemberDescription BlendOperationName="Bool" IsBinarized="true">
|
||||
<Path>IsVisible</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Bool" IsBinarized="true">
|
||||
<Path>Meshes["*"].IsVisible</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Bool" IsBinarized="true">
|
||||
<Path>IsBranchVisible</Path>
|
||||
</AnimationMemberDescription>
|
||||
</MemberInformationSet>
|
||||
</GraphicsAnimationGroupDescription>
|
||||
<GraphicsAnimationGroupDescription Name="MaterialAnimation" EvaluationTiming="AfterSceneCulling">
|
||||
<MemberInformationSet>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Emission</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Ambient</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Diffuse</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Specular0</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Specular1</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant0</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant1</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant2</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant3</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant4</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].MaterialColor.Constant5</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureMappers["*"].Sampler.BorderColor</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Int" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureMappers["*"].Texture</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="RgbaColor" IsBinarized="true">
|
||||
<Path>Materials["*"].FragmentOperation.BlendOperation.BlendColor</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Vector2" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureCoordinators["*"].Scale</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Float" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureCoordinators["*"].Rotate</Path>
|
||||
</AnimationMemberDescription>
|
||||
<AnimationMemberDescription BlendOperationName="Vector2" IsBinarized="true">
|
||||
<Path>Materials["*"].TextureCoordinators["*"].Translate</Path>
|
||||
</AnimationMemberDescription>
|
||||
</MemberInformationSet>
|
||||
</GraphicsAnimationGroupDescription>
|
||||
</AnimationGroupDescriptions>
|
||||
<Transform>
|
||||
<Scale X="1" Y="1" Z="1" />
|
||||
<Rotate X="0" Y="0" Z="0" />
|
||||
<Translate X="0" Y="0" Z="0" />
|
||||
</Transform>
|
||||
<Shapes>
|
||||
<SeparateDataShapeCtr>
|
||||
<OrientedBoundingBox>
|
||||
<CenterPosition X="0" Y="0" Z="6.5" />
|
||||
<OrientationMatrix M00="1" M01="0" M02="0" M10="0" M11="1" M12="0" M20="0" M21="0" M22="1" />
|
||||
<Size X="24" Y="12" Z="0" />
|
||||
</OrientedBoundingBox>
|
||||
<PositionOffset X="0" Y="0" Z="0" />
|
||||
<PrimitiveSets>
|
||||
<PrimitiveSetCtr SkinningMode="None">
|
||||
<BoneIndexTable>0</BoneIndexTable>
|
||||
<Primitives>
|
||||
<PrimitiveCtr>
|
||||
<IndexStreams>
|
||||
<UbyteIndexStreamCtr PrimitiveMode="Triangles" Size="6">0 1 2 1 3 2</UbyteIndexStreamCtr>
|
||||
</IndexStreams>
|
||||
</PrimitiveCtr>
|
||||
</Primitives>
|
||||
</PrimitiveSetCtr>
|
||||
</PrimitiveSets>
|
||||
<VertexAttributes>
|
||||
<Vector3VertexStreamCtr Usage="Position" VertexSize="4" Scale="1" QuantizedMode="Float">
|
||||
-12 -6 6.5
|
||||
12 -6 6.5
|
||||
-12 6 6.5
|
||||
12 6 6.5
|
||||
</Vector3VertexStreamCtr>
|
||||
<Vector3VertexAttributeCtr Usage="Normal">0 0 1</Vector3VertexAttributeCtr>
|
||||
<Vector2VertexStreamCtr Usage="TextureCoordinate0" VertexSize="4" Scale="1" QuantizedMode="Float">
|
||||
0 0
|
||||
1 0
|
||||
0 1
|
||||
1 1
|
||||
</Vector2VertexStreamCtr>
|
||||
</VertexAttributes>
|
||||
</SeparateDataShapeCtr>
|
||||
</Shapes>
|
||||
<Materials>
|
||||
<MaterialCtr Name="MT_00" IsCompressible="true" LightSetIndex="0" FogIndex="0" IsFragmentLightEnabled="false" IsVertexLightEnabled="false" IsHemiSphereLightEnabled="false" IsHemiSphereOcclusionEnabled="false" IsFogEnabled="false" TextureCoordinateConfig="Config0120" TranslucencyKind="Layer1" ShaderProgramDescriptionIndex="-1" ShaderBinaryKind="Default">
|
||||
<ShaderReference />
|
||||
<MaterialColor VertexColorScale="1">
|
||||
<Emission R="0" G="0" B="0" A="0" />
|
||||
<Ambient R="1" G="1" B="1" A="0" />
|
||||
<Diffuse R="1" G="1" B="1" A="1" />
|
||||
<Specular0 R="1" G="1" B="1" A="0" />
|
||||
<Specular1 R="0" G="0" B="0" A="0" />
|
||||
<Constant0 R="0" G="0" B="0" A="1" />
|
||||
<Constant1 R="0" G="0" B="0" A="1" />
|
||||
<Constant2 R="0" G="0" B="0" A="1" />
|
||||
<Constant3 R="0" G="0" B="0" A="1" />
|
||||
<Constant4 R="0" G="0" B="0" A="1" />
|
||||
<Constant5 R="0" G="0" B="0" A="1" />
|
||||
</MaterialColor>
|
||||
<Rasterization CullingMode="BackFace" IsPolygonOffsetEnabled="false" PolygonOffsetUnit="0" />
|
||||
<TextureCoordinators>
|
||||
<TextureCoordinatorCtr SourceCoordinate="0" MappingMethod="UvCoordinateMap" ReferenceCamera="0" MatrixMode="DccMaya" ScaleS="1" ScaleT="1" Rotate="0" TranslateS="0" TranslateT="0" />
|
||||
</TextureCoordinators>
|
||||
<TextureMappers>
|
||||
<PixelBasedTextureMapperCtr>
|
||||
<TextureReference>Textures["banner"]@file:Textures/banner.ctex</TextureReference>
|
||||
<StandardTextureSamplerCtr MinFilter="Linear" MagFilter="Linear" WrapS="ClampToEdge" WrapT="ClampToEdge" MinLod="0" LodBias="0">
|
||||
<BorderColor R="0" G="0" B="0" A="1" />
|
||||
</StandardTextureSamplerCtr>
|
||||
</PixelBasedTextureMapperCtr>
|
||||
</TextureMappers>
|
||||
<FragmentShader LayerConfig="ConfigurationType0">
|
||||
<BufferColor R="0" G="0" B="0" A="1" />
|
||||
<FragmentBump BumpTextureIndex="Texture0" BumpMode="NotUsed" IsBumpRenormalize="false" />
|
||||
<FragmentLighting FresnelConfig="No" IsClampHighLight="false" IsDistribution0Enabled="false" IsDistribution1Enabled="false" IsGeometricFactor0Enabled="false" IsGeometricFactor1Enabled="false" IsReflectionEnabled="false" />
|
||||
<FragmentLightingTable>
|
||||
<ReflectanceRSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</ReflectanceRSampler>
|
||||
<ReflectanceGSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</ReflectanceGSampler>
|
||||
<ReflectanceBSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</ReflectanceBSampler>
|
||||
<Distribution0Sampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</Distribution0Sampler>
|
||||
<Distribution1Sampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</Distribution1Sampler>
|
||||
<FresnelSampler IsAbs="true" Input="CosNormalHalf" Scale="One">
|
||||
<NullLookupTableCtr />
|
||||
</FresnelSampler>
|
||||
</FragmentLightingTable>
|
||||
<TextureCombiners>
|
||||
<TextureCombinerCtr CombineRgb="Replace" CombineAlpha="Replace" ScaleRgb="One" ScaleAlpha="One" Constant="Constant0" BufferInputRgb="PreviousBuffer" BufferInputAlpha="PreviousBuffer">
|
||||
<SourceRgb Source0="Texture0" Source1="FragmentPrimaryColor" Source2="FragmentSecondaryColor" />
|
||||
<OperandRgb Operand0="Color" Operand1="Color" Operand2="Color" />
|
||||
<SourceAlpha Source0="Texture0" Source1="Constant" Source2="Constant" />
|
||||
<OperandAlpha Operand0="Alpha" Operand1="Alpha" Operand2="Alpha" />
|
||||
</TextureCombinerCtr>
|
||||
</TextureCombiners>
|
||||
<AlphaTest IsTestEnabled="false" TestFunction="Always" TestReference="0" />
|
||||
</FragmentShader>
|
||||
<FragmentOperation>
|
||||
<DepthOperation IsTestEnabled="true" TestFunction="Less" IsMaskEnabled="false" />
|
||||
<BlendOperation Mode="Blend" LogicOperation="Copy">
|
||||
<RgbParameter BlendFunctionSource="SourceAlpha" BlendFunctionDestination="OneMinusSourceAlpha" BlendEquation="FuncAdd" />
|
||||
<AlphaParameter BlendFunctionSource="One" BlendFunctionDestination="Zero" BlendEquation="FuncAdd" />
|
||||
<BlendColor R="0" G="0" B="0" A="1" />
|
||||
</BlendOperation>
|
||||
<StencilOperation IsTestEnabled="false" TestFunction="Never" TestReference="0" TestMask="255" FailOperation="Keep" ZFailOperation="Keep" PassOperation="Keep" />
|
||||
</FragmentOperation>
|
||||
</MaterialCtr>
|
||||
</Materials>
|
||||
<Meshes>
|
||||
<Mesh IsVisible="true" RenderPriority="0" MeshNodeName="BONE_00">
|
||||
<EditData>
|
||||
<DccToolSourceNodeMetaData>
|
||||
<Key>DccToolSourceNode</Key>
|
||||
<Values>
|
||||
<NodeName>BONE_00</NodeName>
|
||||
</Values>
|
||||
</DccToolSourceNodeMetaData>
|
||||
</EditData>
|
||||
<SeparateShapeReference>Shapes[0]</SeparateShapeReference>
|
||||
<MaterialReference>Materials["MT_00"]</MaterialReference>
|
||||
</Mesh>
|
||||
</Meshes>
|
||||
<Skeleton RootBoneName="BONE_00" ScalingRule="Standard" IsTranslateAnimationEnabled="true">
|
||||
<Bones>
|
||||
<Bone Name="BONE_00" ParentBoneName="" IsSegmentScaleCompensate="false" IsCompressible="true" IsNeededRendering="true" HasSkinningMatrix="false" BillboardMode="YAxial">
|
||||
<Transform>
|
||||
<Scale X="1" Y="1" Z="1" />
|
||||
<Rotate X="0" Y="0" Z="0" />
|
||||
<Translate X="0" Y="0" Z="0" />
|
||||
</Transform>
|
||||
</Bone>
|
||||
</Bones>
|
||||
</Skeleton>
|
||||
</SkeletalModel>
|
||||
</Models>
|
||||
</GraphicsContentCtr>
|
||||
</NintendoWareIntermediateFile>
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M‡M§U§U†M†M†M†M†M†M†M†M†M†M†M†M†M§U§U§U†M‡U§U§U§U¨]¨]Č]§U¨]Č]É]É]Éeéeęm†M†M‡M§U§U§U¨UČ]§U¨U¨]Č]Č]ÉeÉeęeČ]É]É]ęeéeęmęmnęeęmëmvv,v,v-~Č]ÉeÉeęeęeëmëmvęennvv,~-~M†v,~,~-~-~N†N†oŽM~N†N†oŽoŽp–<70>–‘žn,v,v-~-~N†N†oŽ-~N†N†oŽoŽp–p–‘–nŽoŽpŽ<70>–<EFBFBD>–±ž±ž˛¦‘–˛ž˛žÓ¦Ň¦Ó®Ó®ő¶oŽp–<70>–‘ž‘–˛ž˛žÓ¦‘ž˛¦˛¦Ó¦Ó¦Ô®ô®ő¶Ó¦Ô®ô®ő¶ő¶żż7Çő¶żż7Ç7Ç8ĎXĎYφM‡U§U§U§U¨]Č]É]¨UČ]Č]ÉeÉ]éeęeęmÉ]éeéej]ęmkeK*ë!ęmË2vk+;-~LmN†Éeęeęeęmęmvv,vëmvv,~,v-~-~N†v«!-~ŚK
moŽK*.uN††oŽ<6F>–íS¬:‘ž˛žv-~«!ÍdM†®}K*«!N†nuoŽpŽkđ…Ndl2oŽ<6F>–L2±ž±ž˛¦kĐt±ž˛¦ržŇŤk.Kl2kp–‘–O}°…˛žnK°td
CđtÓ¦Ô®
KÍBő¶żÍ:’Ťkł•ÍB.KÍB…ń|¦7Ç7Çđc÷ĆXĎy×Ó¦ô®ô®ń|ő¶żk7Ç·m:žË!kXĎkY×7ÇXĎXĎY×YĎz×z×zßY×z×zכߛߛç›çĽďm:<3A>[kV¶Ť:W¶îJ®OSzßzß›ßtxľĽçĽď›ß›çśçĽďĽď˝ďÝďŢ÷ĽďÝďÝďŢ÷Ţ÷ţ÷ţ÷˙˙,~-~M~N†N†oŽoŽ<6F>–N†oŽoŽ<6F>–<EFBFBD>–‘ž±ž˛¦<CB9B>–‘ž±ž˛¦˛žÓ¦Ó¦ô®˛¦Ó®Ó®ô¶ô®ő¶·ż<>–±ž±žŇ¦˛¦Ó®Ó®ô¶˛¦Ó®Ô®ô¶ô¶żżżô¶··żż7Ç7ÇXĎż7Ç7ÇXĎXĎY×y×zßÔ®ő¶ő¶żż7Ç7ÇXĎż7Ç7ÇXĎXĎYĎY×z×8ĎYĎYĎy×y×zßzß›çzךߚߛç›çĽçĽç˝ďXĎY×y×z×zכߛߛçzߛߛߜçśçĽďĽďÝď›çĽçĽď˝ď˝ďÝ÷Ý÷Ţ÷ÝďŢ÷Ţ÷ţ÷Ţ÷˙˙˙˙˙˙›ßśçĽç˝ďĽďÝďÝďŢ÷˝ďÝ÷Ý÷Ţ÷Ţ÷ţ˙ţ˙˙˙Ţ÷Ţ÷ţ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ţ÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
|
||||
@ -1,2 +0,0 @@
|
||||
†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M‡M‡U§U†M‡U§U§U§U§U§U§U†M†M†M†M†M†M†M§U†M‡U‡U§U‡U§U§U§U§U§U§U§U§U§U¨U¨]§U¨U¨UČ]Č]Č]Č]É]§U§U§U§U§U¨U¨]¨]§U¨]¨]¨]Č]Č]Č]É]¨]Č]Č]É]É]ÉeÉeÉeÉ]ÉeÉeÉeéeęeęeęm¨]Č]Č]Č]É]É]ÉeÉeÉ]É]ÉeéeÉeęeęeęmÉeéeęeęeęeęmęmnęmęmęmnnnvvÉeęeęeęmęmęmęmnęmëmëmnnvvvnvvvv,v,v,~v,v,v-~-~-~-~M†ëmnnvvv,v,~v,vv,~,~-~-~M~,~-~-~-~M~N†N†N†-~N†N†N†N†oŽoŽoŽ,~-~-~M~M~N†N†N†M†N†N†N†N†oŽoŽoŽN†oŽoŽoŽoŽpŽp–<70>–oŽp–<70>–<EFBFBD>–<EFBFBD>–‘–‘–‘žN†N†oŽoŽoŽoŽoŽp–oŽpŽpŽ<70>–<EFBFBD>–<EFBFBD>–<EFBFBD>–‘ž<E28098>–<EFBFBD>–<EFBFBD>–‘ž‘ž±ž±ž˛ž‘ž±ž±ž˛¦˛ž˛¦˛¦Ó¦<C393>–‘–‘–‘ž‘ž±ž˛ž˛¦‘ž˛ž˛ž˛¦˛¦Ó¦Ó¦Ó®˛¦˛¦ł¦Ó¦Ó¦Ó®Ó®ô®Ó®Ô®Ô®ô®ô®ô¶ô¶ő¶†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M‡U†M†M†M†M†M†M†M†M†M†M†M†M†M†M†M‡U†M†M†M‡U‡U‡U§U§U‡U‡U§U§U§U§U§U¨U†M†M†M†M†M‡U‡U§U‡M‡U§U§U§U§U§U¨U§U§U§U¨U¨U¨]¨]Č]¨U¨]¨]Č]Č]Č]Č]É]§U§U§U¨U¨U¨]¨]Č]¨U¨]¨]Č]Č]É]É]ÉeČ]É]É]ÉeÉeÉeÉeęeÉeÉeÉeęeęeęmęmęmČ]Č]Č]É]É]ÉeÉeéeÉ]ÉeÉeęeéeęeęeęméeęeęeęmęmëmnnęmëmëmnnvv,vęeęeęmęmęmëmnvęmnnvvvv,vnvv,v,v,~,~-~v,~,~-~-~M~M†N†nvvvv,v,v-~v,~,~-~-~-~-~N†-~-~-~N†M†N†N†o†N†N†N†OŽNŽoŽoŽpŽ-~M~M~N†N†N†N†oŽN†N†N†oŽoŽoŽoŽp–OŽoŽoŽpŽpŽ<70>–<EFBFBD>–‘–pŽ<70>–<EFBFBD>–‘–‘–‘ž‘ž˛žn†oŽoŽoŽoŽp–<70>–<EFBFBD>–oŽ<6F>–p–<70>–<EFBFBD>–‘ž‘ž±ž<C2B1>–‘–‘ž±ž‘ž˛ž˛ž˛¦±ž˛ž˛ž˛¦˛¦Ó¦Ó¦Ó®‘–‘ž‘ž±ž±ž˛ž˛¦Ň¦˛ž˛¦˛¦ł¦Ň¦Ó¦Ó®Ó®Ň¦Ó¦Ó¦Ó®Ó®ô®ô®ô¶Ó®ô®ô®ô¶ô¶ő¶ő¶ż˛¦Ó¦Ó¦Ó®Ó®Ô®Ô®ô®Ó®Ô®ô®ô¶ô®ő¶ő¶·ô®ő¶ő¶ő¶·żżż·żżżż7Ç7Ç7Çô¶ő¶ő¶··żżżżżżżż7Ç7Ç7Çż7Ç7Ç7Ç7Ç7Ç8ĎXĎ7Ç8ĎXĎXĎXĎYĎYĎy׆M†M†M§U‡U§U§U§U§U§U§U§U§U¨U§U¨]§U§U§U¨]¨]¨]Č]Č]¨]Č]Č]Č]Č]É]É]Ée§U¨U¨U¨]¨]Č]Č]É]¨]Č]Č]É]É]ÉeÉeéeČ]É]É]éeÉeéeęeęeéeęeęeęmęeęmęmëmČ]É]É]ÉeÉeÉeéeęeÉeéeęeęeęeęmęm‹Tęeęmęmëm
|
||||
nnn+e+]Ë2kkkk‹2ËKęeęmęmn«e«!LknnvvË2k‹2kkKT+;,~,~-~-~-~ěd-~íu-~-~N†N†N†vvŚm,v,v-~-~-~kk+;K*l\N†
e~-~M†M†N†N†N††numm*«!kkkŤKK-~N†N†N†N†Ť\OŽŤdN†oŽoŽoŽoŽ/ŽpŽ<70>–kKkěBp–<70>–<EFBFBD>–‘ž«!kŹ}*¬:P}kkoŽoŽoŽp–p–<70>–<EFBFBD>–‘žkíS*Nd‘–±ž±ž˛ž‘–±ž±ž˛ž˛ž˛¦˛¦Ó¦l2kkkĐtÓ®
Cô®‘ž±ž±ž˛ž˛ž˛¦˛¦Ó¦˛ž˛¦:ržÓ¦2žÓ®’Ťkkk«!k”¦kŃ|knSk0dk.Km:kÓ¦Ó¦Ó®Ô®Ó®ô®ô®ô¶Ô®ô®ô®ő¶ő¶<C591>t·*ô¶ő¶ő¶żżżżżkÍBkÎBÇ7Ç7Ç7Çő¶·ő¶żóťkđckżżŐ¶SŤ*2kđck2Ë!k7ÇXĎXĎXĎÎBkÎBkXĎY×Y×y׿7Ç7Ç7Ç7ÇXĎXĎXĎ7ÇXĎXĎXĎXĎYĎYĎy×XĎYĎYĎy×Y×y×z×zßy×z×z×zßzßšßzß›ßXĎY×Y×y×y×z×z×zßy×z×z×zßzߚߛߛçzßzߚߛߛߛç›çśç›ß›ç›çśçśçĽçĽďĽďÉ]ÉeÉeÉeÉeęeęeęméeęeęeęmęmęmnnęeęmęmnnvvvnvvvv,v,v-~ęmëmëmnnvvvnvvvv,~,~-~v,v,~-~-~-~-~M†-~-~-~N†N†N†N†o†v,v,v,~‹2kŚCk-~-~-~M†
ekN†ě:
eN†m\N†N†oŽoŽoŽ*†k*oŽp–Žd/uN†N†N†NŽN††oŽoŽnŽoŽoŽpŽoŽp–<70>–<EFBFBD>–LCkp–đ…kkNd\<5C>–‘ž‘ž±ž±ž˛ž˛ž˛¦oŽpŽp–<70>–<EFBFBD>–‘–‘–‘ž<E28098>–‘–ďt\‘ž˛žŽu‘ž˛ž˛ž˛¦Żl*ł¦rž˛¦ł¦
ColÓ¦Ô®q…/dkk\p…\®SÓ¦Ó®˛¦Ó¦Ó¦Ó®Ó®Ô®Ô®ô¶kkŇ•plkk0d2…ô¶ő¶ő¶··żżżkÍ:*kô®’Ťô¶’Ťl2kk*ő¶0lż0lk0lk‘t‘tku®kkł•k´ť7Çm:7Dz|Ë!óťµ®żżPl7Çu®ż6Ç7Ç7Ç7Ç7Ç7ÇXĎkÔťÔť÷ľXĎ—¶XĎY×XĎXĎXĎY×Y×y×y×z×…Ź[.SË!k6®,2YĎkkkk˛„y×·ľz×<7A>[krtk¸ľz×öšßr|kr|kö›ß®›çkŤ:öĄ¸ľz×zßzßšßz×zßzߚߚߛߛߛçr|k:×¶U•ĽçÚÎĽç›çĽçĽçĽçĽçĽďĽď˝ďzߛߛߛç›ç›ç›çĽç›çśç›çĽçĽçĽďĽď˝ďĽçĽçĽď˝ď˝ďÝď˝ďÝ÷˝ď˝ď˝ďÝ÷Ý÷Ţ÷Ţ÷Ţ÷ĽçĽďĽď˝ď˝ďÝďÝďÝ÷˝ďÝďÝďÝ÷Ý÷Ţ÷Ţ÷Ţ÷Ý÷Ţ÷Ţ÷Ţ÷Ţ÷ţ÷ţ÷ţ˙Ţ÷ţ÷Ţ÷˙˙˙˙˙˙˙˙˙˙,v,~,~-~-~M~M~N†-~M~M~N†N†N†N†oŽN†N†N†oŽOŽoŽoŽpŽoŽoŽoŽp–pŽ<70>–<EFBFBD>–‘–N†N†N†oŽoŽoŽoŽp–oŽoŽoŽp–<70>–<EFBFBD>–<EFBFBD>–‘–p–<70>–<EFBFBD>–‘–‘–‘ž±ž˛ž‘–±ž±ž˛ž˛ž˛¦˛¦Ó¦pŽ<70>–<EFBFBD>–‘–<E28098>–‘ž‘ž±ž‘–‘ž±ž˛ž˛ž˛¦˛¦˛¦±ž˛¦˛¦˛¦˛¦Ó¦Ó¦Ó®˛¦Ó¦Ó¦Ó®Ó®ô®ô®ô¶˛ž˛¦˛¦Ó¦Ó¦Ó®Ó®Ô®Ó¦Ó®Ó®Ô®Ô®ô®ô¶ő¶Ô®ô®ô®ő¶ô¶ő¶ő¶żő¶ő¶·żżżżżÓ®Ô®ô®ô¶ô¶ő¶ő¶żô¶ő¶ő¶żżżżż·żżżż7Ç7Ç7Çż7Ç7Ç7Ç7Ç8Ď8ĎXĎżżżżż7Ç7Ç7Çż7Ç7Ç7Ç7Ç8ĎXĎXĎ7ÇXĎXĎXĎXĎYĎYĎy×XĎYĎY×y×y×z×z×zß7Ç8Ç8ÇXĎXĎXĎXĎY×XĎYĎYĎY×Y×y×y×z×Y×y×y×z×z×zßzß›ßzßzßzߛߛߛç›ç›çY×y×z×zßzßšßšß›ßzߚߚߛߛߛç›çĽç›ß›ç›çśç›çĽçĽçĽď›çĽçĽçĽďĽď˝ď˝ďÝď›ß›ç›ß›ç›çśçśçĽď›çĽçĽçĽďĽď˝ď˝ď˝ďĽďĽďĽď˝ď˝ďÝďÝďÝ÷˝ďÝďÝďŢ÷Ý÷Ţ÷Ţ÷Ţ÷Ľď˝ď˝ďÝď˝ďÝ÷ÝďŢ÷ÝďÝ÷Ý÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷ţ˙ţ˙˙˙Ţ÷ţ˙˙˙˙˙˙˙˙˙˙˙˙˙Ý÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷˙˙Ţ÷ţ˙ţ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙p–<70>–<EFBFBD>–‘ž‘ž±ž±ž˛ž‘ž±ž˛ž˛ž˛žŇ¦Ň¦Ó¦˛ž˛¦˛¦Ó¦Ó¦Ó®Ó®Ô®Ó¦Ó®Ó®Ô®Ô®ô¶ô¶ő¶˛¦ł¦˛¦Ó¦Ó¦Ó®Ó®ô®Ó®Ô®Ô®ô®ô®ô¶ô¶·ô®ô¶ô¶ő¶ő¶żżżő¶żżżżż6ż7ÇÔ®ô®ô¶ő¶ő¶··żő¶··żżżż7Çżżż7Ç7Ç7Ç7Ç8Ç7Ç7Ç7Ç8Ď8ÇXĎXĎXĎżżż7Ç7Ç7Ç7ÇXĎ7Ç7Ç7ÇXĎXĎXĎXĎYĎ8ĎXĎXĎYĎYĎY×y×y×YĎY×y×y×y×z×zßšß7ÇXĎXĎXĎXĎY×Y×y×XĎY×y×y×y×z×z×zßy×z×z×zßzߚߛߛßzߛߛߛߛߛç›çĽçy×z×zßzßzߛߛߛçzߛߛߛç›ç›çśçĽç›ç›ç›çĽçĽçĽďĽďĽďĽçĽďĽď˝ď˝ďÝď˝ďÝ÷›ß›ç›çĽçĽçĽçĽçĽďśçĽçĽďĽďĽď˝ď˝ďÝďĽď˝ď˝ďÝď˝ďÝ÷Ý÷Ţ÷ÝďÝ÷Ý÷Ţ÷Ţ÷Ţ÷Ţ÷ţ÷Ľď˝ď˝ďÝďÝďÝ÷Ý÷Ţ÷Ý÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷ţ˙Ţ÷Ţ÷Ţ÷ţ˙ţ˙˙˙˙˙˙˙Ţ÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ţ÷Ţ÷Ţ÷Ţ÷Ţ÷˙˙˙˙˙˙Ţ÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
|
||||
Binary file not shown.
@ -15,7 +15,7 @@ TitleInfo:
|
||||
Version: 0
|
||||
|
||||
Rom:
|
||||
HostRoot : romfiles
|
||||
# HostRoot : romfiles
|
||||
# SaveDataSize: 512K
|
||||
|
||||
AccessControlInfo:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -141,9 +141,10 @@ void PutError(ErcDev dev,int cd)
|
||||
}
|
||||
|
||||
wchar_t file_pathw[MAX_PATH_LENGTH];
|
||||
wchar_t file_pathw2[MAX_PATH_LENGTH];
|
||||
char file_path[MAX_PATH_LENGTH];
|
||||
//ドライバの仕様で速度的に4バイトアラインした方がいい(SDK 0.14.23 時点)
|
||||
char fileBuffer[512] NN_ATTRIBUTE_ALIGN(4);//検証が512単位なので
|
||||
//カゲマイ報告の速度実測でFSで4バイトアライン有利(SDK 0.14.23 時点)
|
||||
char fileBuffer[512] NN_ATTRIBUTE_ALIGN(4);//検証 512単位
|
||||
char fileBuffer_ex[512] NN_ATTRIBUTE_ALIGN(4);
|
||||
#define FILEBUFF_SIZE sizeof(fileBuffer)
|
||||
|
||||
@ -195,14 +196,13 @@ bool Verifi()
|
||||
res = exsave.Mount();
|
||||
if(res != RESULT_OK)return false;
|
||||
|
||||
//ファイル比較
|
||||
scr_Status("file compairing",COLOR_YELLO);
|
||||
savedata.ResetPath();
|
||||
s64 fsize;
|
||||
res = RESULT_OK;
|
||||
while(res==RESULT_OK){
|
||||
if(CheckInsExit())break;//挿抜による中断
|
||||
res = savedata.GetPath(file_pathw);
|
||||
res = savedata.GetPath(file_pathw);//パス取得
|
||||
if (res != RESULT_OK)break;
|
||||
if (file_pathw[0] == 0)break;//root then end
|
||||
if (ct>=arcInfo.FileCount)
|
||||
@ -211,8 +211,8 @@ bool Verifi()
|
||||
break;
|
||||
}
|
||||
if(CheckInsExit())break;//挿抜による中断
|
||||
scr_CountPerMax(ct,arcInfo.FileCount);
|
||||
if (savedata.Open(file_pathw)==false)
|
||||
scr_CountPerMax(ct,arcInfo.FileCount);//カウンタ表示
|
||||
if (savedata.Open(file_pathw)==false)//カード上のファイル
|
||||
{
|
||||
res = RESULT_FAIL_OPEN;
|
||||
break;
|
||||
@ -220,10 +220,13 @@ bool Verifi()
|
||||
fsize = savedata.FileSize;
|
||||
total += fsize;
|
||||
if(CheckInsExit())break;//挿抜による中断
|
||||
if (exsave.Open(file_pathw)==false)
|
||||
if (exsave.Open(file_pathw)==false)//SDのファイル
|
||||
{
|
||||
res = RESULT_FAIL_OPEN;
|
||||
break;
|
||||
if (exsave.OpenVnf(file_pathw)==false)//退避ファイルを探す
|
||||
{
|
||||
res = RESULT_FAIL_OPEN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
msize=fsize;
|
||||
while(fsize)
|
||||
@ -240,8 +243,9 @@ bool Verifi()
|
||||
fsize = 0;
|
||||
}
|
||||
if(CheckInsExit())break;//挿抜による中断
|
||||
if(savedata.Read(fileBuffer,rsize) != rsize )
|
||||
{
|
||||
if(savedata.Read(fileBuffer,rsize) != rsize )//カード
|
||||
{ //中身のデータが作成サイズに満たない場合
|
||||
//不明部分の処置は書出し時と合わせる
|
||||
if(nn::fs::ResultVerificationFailed::Includes(savedata.LastNnResult))
|
||||
{
|
||||
for ( i = 0; i < rsize; i++)
|
||||
@ -254,7 +258,7 @@ bool Verifi()
|
||||
}
|
||||
}
|
||||
if(CheckInsExit())break;//挿抜による中断
|
||||
if(exsave.Read(fileBuffer_ex,rsize) != rsize )
|
||||
if(exsave.Read(fileBuffer_ex,rsize) != rsize )//SD
|
||||
{
|
||||
res = RESULT_FAIL_READ;
|
||||
break;
|
||||
@ -264,6 +268,7 @@ bool Verifi()
|
||||
exsave.Close();
|
||||
if (res != RESULT_OK)break;
|
||||
if(isInsEject != InEx_None )break;//挿抜による中断
|
||||
//比較
|
||||
for (i=0;i<rsize;i++)if (fileBuffer[i]!=fileBuffer_ex[i]){
|
||||
res = RESULT_FAIL;
|
||||
break;
|
||||
@ -300,13 +305,14 @@ RetCode Card2Sd()
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
scr_Status("Get Dir",COLOR_YELLO);
|
||||
scr_Status("Get Directry",COLOR_YELLO);
|
||||
if(savedata.GetInfo(&arcInfo)==false)
|
||||
{
|
||||
savedata.Unmount();
|
||||
PutError(ERC_DEV_CARD);
|
||||
return ERROR;
|
||||
}
|
||||
strcpy(arcInfo.Pcode,savedata.PrdCode);
|
||||
|
||||
if (arcInfo.FileCount == 0)//ファイルが無い
|
||||
{
|
||||
@ -358,15 +364,39 @@ RetCode Card2Sd()
|
||||
res = RESULT_FAIL_OPEN;
|
||||
break;
|
||||
}
|
||||
|
||||
fsize = savedata.FileSize;
|
||||
total += fsize;
|
||||
if(CheckInsExit())break;//挿抜による中断
|
||||
if (exsave.OpenW(file_pathw,fsize)==false)
|
||||
//SDで支障あるパス名の場合は別ファイルに格納する
|
||||
exsave.GetRootPath(file_pathw2);//格納先ルート取得
|
||||
wcscat(file_pathw2,file_pathw);//実パス名に変換
|
||||
if (CheckPath(file_pathw2)==false)//パス名チェック
|
||||
{
|
||||
res = RESULT_FAIL_OPENW;
|
||||
break;
|
||||
if (exsave.OpenVnfW(file_pathw,fsize)==false)//退避ファイル
|
||||
{
|
||||
res = RESULT_FAIL_OPENW;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
if (exsave.OpenW(file_pathw,fsize)==false)
|
||||
{
|
||||
NN_LOG("%d\n",exsave.LastNnResult.GetDescription());
|
||||
if(nn::fs::ResultInvalidArgument::Includes(exsave.LastNnResult))
|
||||
{//パス名がFAT違反、パス長オーバ
|
||||
if (exsave.OpenVnfW(file_pathw,fsize)==false)//退避ファイル
|
||||
{
|
||||
res = RESULT_FAIL_OPENW;
|
||||
break;
|
||||
}
|
||||
}else
|
||||
{
|
||||
res = RESULT_FAIL_OPENW;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
msize=fsize;
|
||||
while(fsize)
|
||||
{
|
||||
@ -421,15 +451,21 @@ RetCode Card2Sd()
|
||||
//結果
|
||||
if(isInsEject != InEx_None )
|
||||
{//挿抜による中断
|
||||
TryDeleteDir();
|
||||
return INSEXIT;
|
||||
if(TryDeleteDir())return INSEXIT;
|
||||
return ERROR;//デリート失敗表示
|
||||
}else{
|
||||
if (res == RESULT_OK)
|
||||
{
|
||||
if(Verifi())
|
||||
if (ct != arcInfo.FileCount)//ファイル数に満たないパス検索終了
|
||||
{//ディレクトリ情報かパス取得で失敗してると思われる
|
||||
PutError(ERC_DEV_OTHER,ERC_EXEC);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
if(Verifi())//ベリファイ
|
||||
{
|
||||
if (exsave.WriteSys(&arcInfo))
|
||||
{//フォーマットパラメータなど情報ファイル
|
||||
{//最後に書き戻しに必要なパラメータファイルを記録
|
||||
if(CheckInsExit()==false)
|
||||
{
|
||||
if (exsave.GetInfo(&arcInfo_ex))
|
||||
@ -439,8 +475,8 @@ RetCode Card2Sd()
|
||||
(arcInfo.DirCount != arcInfo_ex.DirCount) ||
|
||||
(arcInfo.FileCount != arcInfo_ex.FileCount) ||
|
||||
(arcInfo.Dup != arcInfo_ex.Dup))res = RESULT_FAIL_WRITE;
|
||||
}else res = RESULT_FAIL_WRITE;
|
||||
}else res = RESULT_FAIL_WRITE;
|
||||
}
|
||||
}else res = RESULT_FAIL;
|
||||
}else res = RESULT_FAIL_WRITE;
|
||||
}else res = RESULT_FAIL_VERIFI;
|
||||
}
|
||||
@ -561,15 +597,6 @@ void WaitUI()
|
||||
|
||||
CheckSysBreak();//中断処理
|
||||
|
||||
// int i = nn::ndm::GetDaemonStatus( nn::ndm::DN_CEC );
|
||||
// if (i !=3 )NN_LOG("DN_CEC %d\n",i);
|
||||
// i = nn::ndm::GetDaemonStatus( nn::ndm::DN_BOSS );
|
||||
// if (i !=3 )NN_LOG("DN_BOSS %d\n",i);
|
||||
// i = nn::ndm::GetDaemonStatus( nn::ndm::DN_NIM );
|
||||
// if (i !=3 )NN_LOG("DN_NIM %d\n",i);
|
||||
// i = nn::ndm::GetDaemonStatus( nn::ndm::DN_FRIENDS );
|
||||
// if (i !=3 )NN_LOG("DN_FRIENDS %d\n",i);
|
||||
|
||||
//挿抜を検知したら中断して抜ける
|
||||
//トップ以外ではトップメニューへ戻るようする
|
||||
if (CheckInsExit())return;
|
||||
@ -591,8 +618,8 @@ void nnMain()
|
||||
nn::fs::Initialize();
|
||||
|
||||
//DEA-SUPにて推奨のフリーズ暫定対策:無線デーモンを停止 (2011.3.1 現在)
|
||||
//ただし、スリープ時は止まらない
|
||||
//心配なら本体スイッチで切っとく
|
||||
//スリープ中は止まらないので、本体スイッチ切るのが確実
|
||||
//SDK2.2以降で対策不要となったが、点滅が鬱陶しいので残しとく
|
||||
nn::ndm::Initialize();
|
||||
nn::ndm::SuspendScheduler();
|
||||
|
||||
|
||||
@ -547,11 +547,17 @@ void scr_TopMenu(bool formatted,bool inserted,bool sdins,int err)
|
||||
strcpy(scr_err,"Please Insert Card");
|
||||
gui.MessEffective(MESSAGE_MENU_CAUTION);
|
||||
|
||||
}else
|
||||
if (sdins == false)
|
||||
{
|
||||
strcpy(scr_err,"Please Insert SD");
|
||||
gui.MessEffective(MESSAGE_MENU_CAUTION);
|
||||
|
||||
}else{
|
||||
if (err & SDATA_ERRPUT_MEDIA) i = ERC_MEDIA + ERC_DEV_CARD;//バックアップがない
|
||||
else
|
||||
if (err & SDATA_ERRPUT_VERIFI) i = ERC_SDK_VERIFI + ERC_DEV_CARD;//データが壊れている
|
||||
else if (sdins == false) i = ERC_DEVICE + ERC_DEV_OUT;//書出し先デバイスが無い
|
||||
//else if (sdins == false) i = ERC_DEVICE + ERC_DEV_OUT;//書出し先デバイスが無い
|
||||
else i = ERC_FORMAT + ERC_DEV_CARD;//フォーマットエラー
|
||||
sprintf(scr_err,"ERROR %d",i);
|
||||
gui.MessEffective(MESSAGE_MENU_ERROR);
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
|
||||
//エラー表示コードの下位2桁
|
||||
0, //不明
|
||||
1, //デバイスが見つからない
|
||||
2,//プロダクトコード不一致
|
||||
3,//ベリファイエラー
|
||||
4,//パスが長すぎ
|
||||
5,//ディレクトリ深すぎ
|
||||
6, //メディアが見つからない(サブ基盤外れなど)
|
||||
10, //ファイルが見つからない
|
||||
20, //既に存在
|
||||
21, //空き容量がない
|
||||
22, //書込み禁止
|
||||
30, //アクセスエラー
|
||||
50, //フォーマットエラー
|
||||
60, //検証に失敗、改竄
|
||||
70, //ROM情報エラー
|
||||
80, //リトライ要求
|
||||
90, //実行時エラー
|
||||
99 //深刻なエラー
|
||||
|
||||
|
||||
//上位
|
||||
CARD = 100,
|
||||
BKUP DEVICE = 200,
|
||||
OTHER = 300
|
||||
|
||||
|
||||
これらの合成で表示される
|
||||
例えば、カードが刺さっていない場合は 101 となる
|
||||
|
||||
|
||||
通常時に発生しやすいと思われるもの
|
||||
|
||||
302 .. プロダクトコードが一致しない
|
||||
101 .. カードが見つからない
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
動作確認環境:
|
||||
ARM製 RVC_Nintendo 4.1
|
||||
omake 0.9.8.5
|
||||
CTR SDK2.0 + Repairtoolプライベートパッチ
|
||||
v1.03以降は ps_api.h と libnn_psも(SystemProgramKitに入っている)
|
||||
|
||||
動作要件:SDK2.31以降のシステム本体
|
||||
|
||||
準備)
|
||||
SDKのSampledemos のcommon,gxをビルドしておく
|
||||
omakerootのあるディレクトリにあるomakeファイルで
|
||||
SAMPLED_DEMOS_COMMON_INCLUDE_DIR に
|
||||
sampledemos/common/includeの位置を指定しておく
|
||||
公開鍵pubkeyをimp/omakeで指定
|
||||
|
||||
ビルド)
|
||||
omakerootのあるディレクトリでomake実行
|
||||
body下でビルドし出来たcia を、Imp下のomake(SRC_IMPORTEE_PATH)で指定
|
||||
(量産機で使うには、マスタリング後のciaを指定)
|
||||
ビルドするとNANDインポート用のcciができる
|
||||
|
||||
|
||||
インポート先:
|
||||
ciaをSDからインポート -> SD .. DevMenu使用,DevMenufullならnandにも入れられる
|
||||
カード起動しインポート -> NAND
|
||||
|
||||
量産実機での実行にはマスタリング必須
|
||||
body下で作成したcia をOLS付でマスタリングし
|
||||
そのciaを使って作成したcciをマスタリング
|
||||
|
||||
マスタリングの流れ:
|
||||
・body/images下に出来たciaをマスタリングしOLSを付ける
|
||||
・このciaをImpのomakeで指定、もしくは指定場所に置く
|
||||
(bodyのビルドで上書きされないよう場所かファイル名変えたほうが安全)
|
||||
・imp/omake実行し、cci作成
|
||||
・cciをマスタリング
|
||||
|
||||
OLSごとリマスタバージョン更新が必要
|
||||
common/ver.hは表示バージョン、ここだけ変更してもダメ
|
||||
body/omekeのコメントを参考
|
||||
|
||||
NANDインポートで失敗する場合はciaをチェック
|
||||
SDインポートし
|
||||
開発実機で動く-> マスタリングしてない
|
||||
量産実機で動く-> OLSが付いてない
|
||||
|
||||
インポートする本体をシリアル番号で制限してます
|
||||
"imp/imp_lis/"下にリストと署名サンプル
|
||||
OpenSSL0.9.6k,rと 1.0.0d で動作確認
|
||||
imp/imp_list 下にコマンドラインツール(win32版)用バッチ
|
||||
使い方はcygwinでも同じ
|
||||
ユーザにはomake指定のpubkeyと組のprivatekeyで作った署名を渡す
|
||||
|
||||
|
||||
本ツール開発時のマスタリングは推進G(高橋さん)に依頼した
|
||||
マスタリング済みDevMenu(full)および
|
||||
CUP作成は飯島さんに聞く
|
||||
@ -1,10 +0,0 @@
|
||||
<インポータのオプション有効化>
|
||||
|
||||
cms_inf.txtの名前でファイル作成
|
||||
以下の記述でオプションが有効になる
|
||||
|
||||
-t: テストメニュー
|
||||
カード上のセーブにテストパターン書き込み&ベリファイ
|
||||
|
||||
-p: 本体シリアルを表示
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
量産実機での動作にはマスタリングが必要
|
||||
|
||||
ciaはサーバ認証(OLS)必須
|
||||
OLSは前回取得時からリマスタバージョンを上げる必要あり(2011/2月現在)
|
||||
(例えば、前回 1.0.0 なら 1.0.1 )
|
||||
メジャーはrsfで指定(Remasterversion)
|
||||
マイナとマイクロはOmakefile
|
||||
MAKECIAFLAGS = -minor 0 -micro 1
|
||||
上の場合 *.0.1 (*はrsfのRemasterversion)
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
|
||||
<操作メニュー>
|
||||
|
||||
操作が出来る状態のとき下画面にボタン表示
|
||||
|
||||
・カードを差すと下画面に実行ボタン表示
|
||||
|
||||
|
||||
(バックアップ)
|
||||
タッチして実行画面
|
||||
カードからSDへ書き出す
|
||||
|
||||
(バックアップデリート)
|
||||
先頭画面で 方向キー LEFT + X 長押し4秒
|
||||
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
|
||||
ビルド時に組み込んだ公開鍵のペアとなるプライベート鍵を使って署名を行う
|
||||
|
||||
バージョンで鍵を識別する
|
||||
鍵変更だけの場合でもバージョンを変えること
|
||||
|
||||
Openssl.exe : cygwinのインスト、Win版がある
|
||||
RSA鍵、ビット長は2048のみ
|
||||
SHA256のダイジェストに署名する
|
||||
Openssl0.9.6.k(r),1.0.0d作成の書名で動作確認
|
||||
|
||||
(鍵作成)
|
||||
openssl genrsa -out private_key.pem 2048
|
||||
openssl enc -d -base64 -in private_key.pem -out private_key.der
|
||||
openssl rsa -pubout -inform DER -outform DER -in private_key.der -out public_key.der
|
||||
|
||||
(1.0.0の場合)
|
||||
openssl genpkey -out private_key.der -outform DER -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537
|
||||
openssl rsa -pubout -inform DER -outform DER -in private_key.der -out public_key.der
|
||||
|
||||
(署名)
|
||||
openssl dgst -sha256 -binary -keyform DER -sign private_key.der -out csm_sign.dat csm_list.txt
|
||||
|
||||
プライベート鍵のバイナリが不要なら
|
||||
openssl genrsa -out private_key.pem 2048
|
||||
openssl rsa -pubout -outform DER -in private_key.pem -out public_key.der
|
||||
|
||||
openssl dgst -sha256 -binary -sign private_key.pem -out csm_sign.dat csm_list.txt
|
||||
|
||||
作成したpub鍵をインポートアプリのomakeで指定
|
||||
OBJECTS[] =
|
||||
$`(ObjectFromBinary $(TARGET), ./Imp_list/Public_Key.der)
|
||||
|
||||
リストをプライベート鍵で署名作成、リストと署名をインポート時にSDから読む
|
||||
BIN
trunk/CardSaveData/common/null_banner/banner_null_icon.bsf
Normal file
BIN
trunk/CardSaveData/common/null_banner/banner_null_icon.bsf
Normal file
Binary file not shown.
@ -54,6 +54,7 @@ static nn::fs::Directory dcl;
|
||||
if ( n==0 )//終端
|
||||
{
|
||||
if (s_lv == 0){path[0]=0;return RESULT_OK;}// ---- rootなら終了
|
||||
dc_readed[s_lv]=0;
|
||||
s_lv--;//上の層に戻る
|
||||
wcscpy(path_w,pathu_w[s_lv]);//パス戻す
|
||||
}else{
|
||||
@ -121,6 +122,7 @@ static nn::fs::Directory dcl;
|
||||
if ( n==0 )//終端
|
||||
{
|
||||
if (lv == 0){cont=false;break;}// ---- 終了
|
||||
dc_readed[lv]=0;
|
||||
lv--;//上の層に戻る
|
||||
wcscpy(path_w,pathu_w[lv]);//パス戻す
|
||||
break;
|
||||
|
||||
@ -16,3 +16,32 @@ int GetPosDelmLast(wchar_t *s,int top)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
//パス名チェック for SD
|
||||
//APIで引数エラー(INVALID_ARGUMENT)にならないものをチェック
|
||||
bool CheckPath(wchar_t *s)
|
||||
{
|
||||
int i;
|
||||
size_t n = wcslen(s);
|
||||
|
||||
if (n > 253)return false;
|
||||
if (n>251)
|
||||
{//オープン時のディレクトリ名は251まで
|
||||
if ((s[252]==L'/') || (s[253]==L'/'))return false;
|
||||
}
|
||||
|
||||
for (i =1;i< n-1;i++)
|
||||
{
|
||||
if (s[i]==L'/')
|
||||
{
|
||||
//前後の半角スペース: "/ a"、"/a /" -> SD作成時 "/a" に変化
|
||||
if ((s[i-1] == ' ')||(s[i+1] == ' '))return false;
|
||||
if ((s[i-1] == 0x5c) ||(s[i+1] == 0x5c))return false;
|
||||
}
|
||||
}
|
||||
if (s[i] == ' ')return false;//最後尾
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -21,21 +21,27 @@ int GetPosDelmLast(wchar_t *s,int top);
|
||||
|
||||
//SDバックアップに同梱する情報
|
||||
//変更の際は後方互換とれるよう追加のみとする
|
||||
typedef struct{
|
||||
struct tArcInfo{
|
||||
u32 DirEntry,FileEntry;
|
||||
u32 DirCount,FileCount;
|
||||
bool Dup;
|
||||
u8 Ver;//バージョン
|
||||
char Pcode[20];//product code save,exsaveクラスのPrdCodeサイズを下回らないこと
|
||||
u8 padding[3];//パディング
|
||||
}tArcInfo;
|
||||
u8 padding[2];//パディング
|
||||
tArcInfo()
|
||||
: Ver(INFO_VERSION){}
|
||||
};
|
||||
|
||||
//パス名長 :SDK制限はアーカイブ名抜いて253文字
|
||||
//文字列操作で多少オーバしても心配ないよう大きくとっておく
|
||||
//アーカイブ名およびSD格納ディレクトリの余裕いれとく
|
||||
#define MAX_PATH_LENGTH 512
|
||||
//パス取得時の階層上限
|
||||
//メモリ食うので無駄に大きくしない、最短(例えば"/a")2文字で128で足りる
|
||||
//パス階層上限
|
||||
#define MAX_LEVEL 128
|
||||
|
||||
//パス名チェック
|
||||
//FAT違反の半角スペースあるかチェック
|
||||
//文字、予約名、パス長はAPIエラー(INVALID_ARGUMENT)で判定
|
||||
bool CheckPath(wchar_t *s);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@ -18,15 +18,16 @@
|
||||
const char *sdmcName = "sdmc:";
|
||||
#define PATHLENGTH_MAX_SD 512
|
||||
|
||||
wchar_t sdmcRoot_w[PATHLENGTH_MAX_SD];//sdmc:/filer/UserSaveData/YearMtDtHrMtSc/00000000
|
||||
wchar_t sdmcRoot_w[MAX_PATH_LENGTH];//sdmc:/filer/UserSaveData/YearMtDtHrMtSc/00000000
|
||||
#define ROOTLENGTH_SD 49
|
||||
wchar_t fp_path[PATHLENGTH_MAX_SD];
|
||||
wchar_t ti_path[PATHLENGTH_MAX_SD];
|
||||
wchar_t expath_w[PATHLENGTH_MAX_SD];//パス名
|
||||
wchar_t fp_path[MAX_PATH_LENGTH];
|
||||
wchar_t ti_path[MAX_PATH_LENGTH];
|
||||
wchar_t expath_w[MAX_PATH_LENGTH];//パス名
|
||||
//wchar_t expathu_w[100][PATHLENGTH_MAX_SD];//上層パス名
|
||||
wchar_t expathw_w[PATHLENGTH_MAX_SD];//パス名ワーク
|
||||
wchar_t latestPath_w[PATHLENGTH_MAX_SD];//sdmc:/filer/UserSaveData/YearMtDtHrMtSc
|
||||
wchar_t expathw_w[MAX_PATH_LENGTH];//パス名ワーク
|
||||
wchar_t latestPath_w[MAX_PATH_LENGTH];//sdmc:/filer/UserSaveData/YearMtDtHrMtSc
|
||||
bool created;
|
||||
bool IsMounted;
|
||||
|
||||
//SDKツールのSaveFilerのフォーマットに合わせる
|
||||
//------------ sources\tools\NandFiler\nandf_Dialog.h 参照
|
||||
@ -155,6 +156,15 @@ bool Sdmc::Create()
|
||||
Unmount();
|
||||
return false;
|
||||
}
|
||||
|
||||
//格納先パスの取得
|
||||
//先にCreateしとくこと
|
||||
void Sdmc::GetRootPath(wchar_t *path)
|
||||
{
|
||||
wcscpy(path,sdmcRoot_w);
|
||||
}
|
||||
|
||||
|
||||
//マウント
|
||||
myResult Sdmc::Mount()
|
||||
{
|
||||
@ -192,12 +202,13 @@ s32 Sdmc::Write(char *buffer,size_t size)
|
||||
bool Sdmc::OpenW(wchar_t *path,s64 size)
|
||||
{
|
||||
int pos,pos2;
|
||||
|
||||
wcscpy(expath_w,sdmcRoot_w);
|
||||
wcscat(expath_w,path);
|
||||
|
||||
while(1){
|
||||
LastNnResult = nn::fs::TryCreateFile(expath_w,size);
|
||||
if(LastNnResult.IsSuccess())break;
|
||||
if(nn::fs::ResultNotFound::Includes(LastNnResult)==false)return false;
|
||||
NN_LOG("%d\n",LastNnResult.GetDescription());
|
||||
//ディレクトリがなければディレクトリを作成
|
||||
pos = GetPosDelmLast(expath_w,ROOTLENGTH_SD);//ファイルが存在するディレクトリ
|
||||
@ -205,17 +216,75 @@ bool Sdmc::OpenW(wchar_t *path,s64 size)
|
||||
wcscpy(expathw_w,expath_w);//ワークにコピー
|
||||
while (LastNnResult.IsFailure())
|
||||
{//ディレクトリ作成できるまで遡る
|
||||
// if(LastNnResult.GetDescription()!=nn::fs::DESCRIPTION_DBM_DIRECTORY_NOT_FOUND)return false;
|
||||
if(nn::fs::ResultNotFound::Includes(LastNnResult)==false)return false;
|
||||
pos2 = GetPosDelmLast(expathw_w,ROOTLENGTH_SD);//境界位置を探す
|
||||
if (pos2 == 0)return false;//root到達
|
||||
expathw_w[pos2] = 0;//境界まで削除 (例) dir1/dir2/file -> dir1/dir2 -> dir1
|
||||
LastNnResult = nn::fs::TryCreateDirectory(expathw_w);
|
||||
}
|
||||
}
|
||||
|
||||
LastNnResult = writer.TryInitialize(expath_w,false);
|
||||
return LastNnResult.IsSuccess();
|
||||
}
|
||||
|
||||
//パス名エラーで作成できない場合の退避先
|
||||
//例:FAT規約違反、"/ test"->"/test"、SD格納先ディレクトリでパス長オーバー
|
||||
bool Sdmc::OpenVnfW(wchar_t *path,s64 size)
|
||||
{
|
||||
s32 sz;
|
||||
tVnf vnf;
|
||||
//パス名&オフセット用ファイル
|
||||
wcscpy(expath_w,latestPath_w);
|
||||
wcscat(expath_w,L"/00000000.vnf");
|
||||
if(reader.TryInitialize(expath_w).IsSuccess())
|
||||
{
|
||||
Close();
|
||||
LastNnResult = writer.TryInitialize(expath_w,false);
|
||||
if (LastNnResult.IsSuccess())
|
||||
LastNnResult = writer.TrySeek(0,nn::fs::POSITION_BASE_END);//追記
|
||||
}else LastNnResult = writer.TryInitialize(expath_w,true);//新規
|
||||
if (LastNnResult.IsSuccess())
|
||||
{
|
||||
wcscpy(vnf.path,path);
|
||||
vnf.size = size;
|
||||
LastNnResult = writer.TryWrite(&sz,&vnf,sizeof(tVnf));//ヘッダ格納
|
||||
}
|
||||
if (LastNnResult.IsFailure())
|
||||
{
|
||||
writer.Finalize();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
//退避ファイルをリード用に開く
|
||||
//成功時はパス名のデータ先頭位置にシーク
|
||||
bool Sdmc::OpenVnf(wchar_t *path)
|
||||
{
|
||||
s32 sz;
|
||||
tVnf vnf;
|
||||
wcscpy(expath_w,latestPath_w);
|
||||
wcscat(expath_w,L"/00000000.vnf");
|
||||
if(reader.TryInitialize(expath_w).IsSuccess())
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
LastNnResult = reader.TryRead(&sz, &vnf, sizeof(vnf));//ヘッダ
|
||||
if (LastNnResult.IsSuccess() && (sz == sizeof(tVnf)))
|
||||
{
|
||||
vnf.path[MAX_PATH_LENGTH-1] = 0;//念の為、終端
|
||||
if(wcscmp(vnf.path,path) ==0)return true;//パス名一致
|
||||
LastNnResult = reader.TrySeek(vnf.size,nn::fs::POSITION_BASE_CURRENT);//次
|
||||
if (LastNnResult.IsFailure())return false;
|
||||
}else return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//情報ファイル
|
||||
//
|
||||
@ -316,6 +385,7 @@ bool Sdmc::Open(wchar_t *path)
|
||||
if (LastNnResult.IsSuccess())return true;
|
||||
else Close();
|
||||
}
|
||||
NN_LOG("sdmc:Open %d",LastNnResult.GetDescription());
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -345,6 +415,7 @@ Sdmc::Sdmc()
|
||||
void Sdmc::Finalize()
|
||||
{
|
||||
CloseW();
|
||||
Close();
|
||||
Unmount();
|
||||
}
|
||||
//デストラクタ
|
||||
|
||||
@ -38,7 +38,6 @@ private:
|
||||
tArcInfo m_info;
|
||||
//int s_lv;
|
||||
int exrootlen;
|
||||
bool IsMounted;
|
||||
//bool s_serch;
|
||||
public:
|
||||
Sdmc();
|
||||
@ -52,6 +51,9 @@ public:
|
||||
bool DeleteAll();
|
||||
void CloseW();
|
||||
bool OpenW(wchar_t *path,s64 size);
|
||||
bool OpenVnfW(wchar_t *path,s64 size);
|
||||
bool OpenVnf(wchar_t *path);
|
||||
void GetRootPath(wchar_t *path);
|
||||
// bool OpenSysW();//暫定
|
||||
// void CloseSysW();//暫定
|
||||
// bool OpenSysR();//暫定
|
||||
@ -67,6 +69,12 @@ public:
|
||||
bool GetInfo(tArcInfo *pinfo);
|
||||
};
|
||||
|
||||
|
||||
//Fat違反パス格納データのヘッダ
|
||||
//直後にデータ配置
|
||||
//Header+Data,、Header+Data ... と連続して追記してゆく
|
||||
typedef struct{
|
||||
wchar_t path[MAX_PATH_LENGTH];
|
||||
s64 size;
|
||||
}tVnf;
|
||||
|
||||
#endif
|
||||
|
||||
Loading…
Reference in New Issue
Block a user