savファイル情報


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

スレで聞く前に

fsutil file createnew xxx.sav 8388608

これをコマンドプロンプトで打ち込んで、8MB0埋めセーブデータを作る必要があります。

sav基本構造

http://game14.2ch.net/test/read.cgi/gameurawaza/1214256294/597より

ちょっと解析結果まとめ
まず8MB.savを作成し、BBDXに読み込ませる。
Wifi楽曲ダウンロードは直接ROMから保存先をしていされるのではなく
楽曲を.savに書き込もうとするときにsavファイルにROMが書き込んだ文字列が、別チップに書き込むに指令をだすと仮定
略図つttp://blog-imgs-21.fc2.com/w/h/i/white1024/BB.jpg
savを解析。すると↓の結果が得られた
sav内を解析した結果
蘒 BBDX1234 9000 0,0 0ヒォ
ア BBDX1234 1000
9 BBDX1234 1000
BBDX1234 0000
s BBDX1234 9000 0,0 0ヒォ
- BBDX1234 1000 @ ツ調按 エソ ツ調按 エソラ嶄 JBXA ・V
という6種類のデータの保存先を指定しているっぽい文字列を発見
.BBDX12341000.がセーブデータ保存領域と仮定し、.BBDX12349000.の9000のところを全て1000に置換
そして起動
  ↓
セーブデータがなくなる
  ↓
1000はセーブデータ領域ではなかった。
同様に1000を9000に置換
    ↓
セーブデータは既存
    ↓
どうやら9000はセーブデータ領域の可能性大
最初にやれば良かったのだが0000が一番あやしい
0000を9000に置換し起動
楽曲ダウンロード
  ↓
エラー
とりあえず現段階ではここまでです。
引き続き解析を進めます。これとは異なるなんらかの解析結果をお持ちのかたは是非提供してくれるとありがたいです。
一応書いておきますが最初8MB.savを作った段階では残りDL曲数が18だったのだが9000や1000、0000を書き換えた状態だと2曲になる。指定先の誤りだと思われる。
とりあえずやったことをまとめると
1000を9000に置換
9000を1000に置換
0000を9000に置換
です。
やろうとしていること(やってないこと)
1000,0000を9000に置換
1000,9000を0000に置換
0000,90000を1000に置換
1000を0000に置換
9000を0000に置換
以上のことから
セーブ領域は9000or0000
wifi領域は0000or1000
自作曲領域は1000
だと考えられます。この値は更に解析することによって絞り込むことは可能です。
当方、DSTTでYSMENU環境ですので環境によって違う結果がでる可能性もありますのでそのときは報告してくれるとありがたいです。

セーブデータバイナリアドレス

一度0埋めを作ってやり直したが、やはりこのゲームのセーブデータは8000(16進アドレスで)ごとに区切られていて、
隣接するところに同じデータを書き込む仕様のようだ
上4桁0000代がBBDX1234 9000部分×2、
上4桁0001代がBBDX1234 0000部分×2、
上4桁0002代がBBDX1234 1000部分×2。
が、以降の上4桁0003~は自作曲領域の模様。
で、この8000セクションは、その領域に何かを書き込むとFFでそのセクション全体が埋まるようだ
自作曲領域は繰り返しなしかもしれないっぽ 

上4桁0004代がBBDX1234 9000部分×2、
上4桁0009代がBBDX1234 0000部分×2、
上4桁000C代がBBDX1234 1000部分×2、
上4桁000D代がBBDX1234 1000部分×2、
上4桁0010代がBBDX1234 1000部分×2、
上4桁0015代がBBDX1234 0000部分×2。

その後、0018部分にBBDX1234 3000が二つ点在するが、本当の自作データ格納部分は004Bから007Cまでみたいだ 
>>246
R4だと、4B0000以降の"BBDX12343000"をヘッダに持つデータが自作曲っぽいね。

あと、bbs2bdxで作ったbdxファイルにはヘッダが無いからbdxtoolにはじかれるっぽい 

BBDX1234埋め

セーブデータの初期化を、00でもFFでもなくBBDX1234の繰り返しで埋めると、Wi-Fiでxxできる模様。(現在は不可)

1バイト追加

8MBセーブデータに00のバイトを追加→セーブデータ自動修復でWi-Fiラジオのみxxできる(つまり、100曲DL済み状態)の模様。(現在は不可)

DL曲のbdx化

http://game14.2ch.net/test/read.cgi/gameurawaza/1214927818/128

128 :名無しさん@お腹いっぱい。 :2008/07/02(水) 13:08:55 ID:E0UcolYx 
つーかさ、0x00190000からDL曲が100曲(0x004AFFFFまで)入ってる。 
で、Edit曲が0x004B0000から100曲分格納可能。 
つまりバイナリエディタで0x00190000~0x004AFFFFまでを0x004B0000以降に移してやれば 
最新のbdxtoolでもDL曲をbdx化できる。 
検証済みだ。 
これで旧ツールくれくれの必要ないだろ。

DL曲領域について

128氏の方法でbdx化したDL曲(Aとする)を
自作曲領域にインポートした後、
バイナリエディタでDL曲領域のAと自作曲領域のAを比較すると
中身が全然違うデータになっている。
なので自作曲領域のAをDL曲領域にコピペしても未来予想図化けする。

じゃあDL曲領域のバイナリデータなら自由にコピペ出来るかと思いきゃ
そういう訳ではなく、
DL曲領域の先頭と2番目の曲を入れ替えただけでもこの2曲は化ける。

格納されている順番がどっかに記録されてる?

逆に言えば別savのDL曲でも
元と同じ位置(例えば先頭なら0x190000)にコピペすると化けない。
これを利用して1-100.savその他から好きな曲のバイナリだけコピーして
DL曲領域にまとめることが出来る。自作曲領域を空けたい人におすすめ。
ただしアドレス位置がかぶっている曲は大人しくbdx出力して自作曲領域にインポートすべき。
空いてしまった領域は全てFFで埋めれば、曲選択の際に余計な曲を挟まずに済む。

自作枠とDL枠の曲を総入れ替えする(128氏自動化+未来予想図回避)

http://retropc.net/apollo/download/xm7/bincut/index.htmからbincutをDL し、以下をswap.batにして保存する。

echo. すわっぷまじっく
bincut a.sav header.sav 0 18FFFF
bincut a.sav DL.sav 190000 4AFFFF
bincut a.sav 自作.sav 4B0000 7CFFFF
bincut a.sav footer.sav 7D0000 7FFFFF
copy/b header.sav + 自作.sav + DL.sav + footer.sav swap.sav
del header.sav
del 自作.sav
del DL.sav
del footer.sav

交換したいsavファイルをa.savにリネームしてさっき作ったbatを実行。 できたsaveを上の未来予想図回避のためdegauserv1.0bで読み込み保存する。起動して無事読めれば成功。 戻したいときはswap.savをまたa.savにリネームしてbat実行、再度degauserv1.0bで読み込み保存すればおk。#120小節越え譜面があるとエラーでできません。 成功時

純正カードリッジからセーブデータのバックアップ/リストア/クリア

皇帝氏のNDS Backup Tool Slot2 V0.31 MOD patch バックアップのみでリストア不可(消去は可能)

00001264: 14 17
00001270: 01 02
00001271: 06 05
000016A0: 14 17
000016AC: 01 02
000016AD: 06 05
00001A54: 14 17
00001A5E: 02 A0
00001A5F: 02 03
00001B6C: 14 17
00001B78: 01 02
00001B79: C6 C5

もしくはBBDXsaveでバックアップが可能、bdx単体でもDL自作枠挿入/消去可能だがローマ字に変換されるので注意。リストアの場合日本語はそのままです。Slot2のみ対応。 http://deufeufeu.free.fr/bbdx/bbdxsave/

http://www1.axfc.net/uploader/He/so/142135&key=BDX 人柱動画

http://www8.atpages.jp/ukkey3/ wifi吸い出し鶴、slot1対応

#吸出し/書き込みはNDSスロット部をNDSADAPTORから流用した自作マイコンでも可能とのこと>同人誌

BDXデータ構成

http://neobeo.threeplusfive.com/ の一番下のspecification、下機械翻訳

最初の0x48バイトはSAV専用のヘッダーです。
そのあとROMイメージをNDSTOOLで分解してできるGAKファイルが続きます。
サンプルは残酷な天使のテーゼ
詳細,オフセット,サイズ,サンプル,説明
CRC16,0x0000,4,0xAB08B27C,チェックサム
署名,0x0004,8,"BBDX1234","Band,Brothers,DX,1234"
ID,0x000C,4,"3000",Always,"3000",for,a,record.
スロット可否?,0x0010,4,0x80000001,使用=0x80000001,未使用=0,
LZSS圧縮のサイズ,0x0014,4,0x00001AF1,LZSSで圧縮されたデータサイズ,(GAKデータはsavでは圧縮されます),
HMAC-SHA1,0x0018,20,76-DF-E5-29-A6-EE-…,20バイトチェックサム、bdxでは0
歌詞関連?,0x002C,20,BC-BC-BB-DE-CF-A4-…,カラオケに関連がある?
不明,0x0040,4,0x00000000,0x00000000~0x00000044の値?,
不明,0x0044,4,0x000000FF,いつも0x000000FF
----------------------------------
次の0x1A0バイトはGAKのヘッダーです
CDのラベルライン1 ) 0x0048 32 "ざんこくなてんしの"の最初の行のCDラベルテキストのエンコーディングを参照)
CDのラベルライン2 ) 0x0068 32 "テーゼ" 、 CDのラベルの2行目です。空白行が1行の場合の値= 0x10
CDのラベル3号線) 0x0088 32 " " 3行目のCDラベルです。空白行が1行の場合の値= 0x10
パディング0x00a8 2 0x0000を常にゼロ
0x00aa 1時間署名0x04 0x03 = 3 / 4または0x04 = 4 / 4
0x00ab 1小節のカウント0x5f減算6実際の小節のカウントを取得するには、 0x5f - 6 = 89
0x00ac 1 0x00のパディング常にゼロ
測定関連?不確かな値0x00ad 1 0x5a ;のいずれかまたは5に等しい未満の最初の小節のカウント
主な楽器0x00ae 1 0x00のインデックスをメイン楽器0 ~ 7 ) 、 -1ていない場合はメイン音源
カラオケ? 0x00af 1が0x01 0x01の場合にはカラオケ、 0x00の他の
日付不明)を0x00b0 4日の16進= 0x20080116この場合、 2008年1月16日
カスタム関連? 0x00b4 1 0x01に不明な値;可能性が0x01の場合、カスタム、および0x00の場合の公式
未知の0x00b5 2 0x0000を未知の値0x0000を私は見ただけ、 0x0001 、 0x0100
マスターボリューム0x00b7 1 0x40の範囲は0 50 % )を0x7Fエラーが発生する150 % ) 。通常は0x40 100 % )
レコード番号0x00b8 4 0x0000356eレコード番号= 28213この場合です。できる前のn * 10 ^ 9
作成日0x00bc 3 0x190608日= 2008年6月19日この場合には、影響を与えるように"はカラオケ"
カスタム関連? 0x00bf 1 0x00の不確かな値;可能性が0x00の場合、カスタム、および0x01の場合の公式
更新日時0x00c0 3日= 0x1a0608この場合、 2008年6月20日
カスタム関連?不確かな値0x00c3 1 0x02 ;可能性が0x02の場合、カスタム、および0x00の場合の公式
パディング0x00c4 4 0x00000000 、常にゼロ
instrheader1 [ 8 ] 0x00c8 16 × 8 個々の部品を参照 )音源ヘッダーをそれぞれの8部品
0x00c8 2巻 0x0060の範囲は0から、おそらく0x7Fエラーが発生します。
サウンドバンク 0x0088サウンドバンク136 = 0x00ca 2スクエアリードこの場合健全な銀行を参照)
パン 0x00cc 1 0x07 - 0x80をより完全な範囲のPANを左右0x7Fエラーが発生する完全なパン
マスター評価 0x00cd 0.5 0x7星印の数マスターの難しさ
プロの評価 0x00cd 0.5 0x5星印の数プロの難しさ
クローンのインデックス 0x00ce 1 0x00のインデックス楽器の名前が表示されますつまりピアノ3 ) 、 0他の
アマチュアの評価 0x00cf 0.5 0x4星印の数アマチュアの難しさ
初心者評価 0x00cf 0.5 0x2星印の数ビギナーの難しさ
パディング 0x00d0 8 0x00000000 、常にゼロ
カスタム関連? 0x0148 2 0x0000を不確かな値;可能性が0x00の場合、カスタム、および0x10の場合の公式
文字列の長さ0x014a 2 0x000A発生は、次の寄稿者の文字列の長さを、パスカル-スタイル
寄稿者0x014c 156 "ゲーマガ♪ウメ"コメント数: 156 、非同盟の長さは、不審な
--------------------------------------------
SAV上ではLZSSで圧縮されます。ここでは無圧縮時
instrheader2 [ 8 ] 0x1e8 12 × 8 個々の部品を参照 )正直なところ、私はなぜ表示されていないことはないのヘッダーに結合さギャック
アタック 0x1e8 1 0x61アタック
ディケイ 0x1e9 1 0x14ディケイ
サスティーン 0x1ea 1 0x3cサスティーン
リリース 0x1eb 1 0x28リリース
形 0x1ec 1 0x01の形状
保留 0x1ed 1 0x0fホールド
崩壊 0x1ee 1 0x14崩壊
深さ 0x1ef 1 0x32の深さ
速度 0x110 1 0x14速度
パディング 0x111 1 0x00の常にゼロ
エフェクターのタイプ 0x112 1 0x03エフェクターの種類正弦波/スクエア/のこぎり/等)
エフェクター値 0x113 1 0x12エフェクターの値0 ~ 20 )
musicalnotes [ 8 ] 0x248 2048 × 8 個々の部品を参照 )
ノート[ 4096 ]  0x248 2048 48 - c8 - c8 - c8 - 4b - cb - …を使用するほとんどの1920バイト、法的にします。 ミュージカルノートを参照)
tempochange [ 32 ] 0x4248 4 × 32 個々の部品を参照 )
ダニの位置 0x4248 2 0x0000の位置をタイマーでダニ、 0xFFFFの意味の他のテンポの変更
テンポの値 0x424a 2 0x0050テンポを設定この場合は0x0050 = 80
otherchange [ 8 ] 0x42c8 8 × 32 × 8 個々の部品を参照 )
otherstruct [ 32 ]  0x42c8 8 × 32 ({{{{個々の部品のいずれか}}}}!)ボリューム、またはキー署名、オクターブの範囲、和音等)を変更
ダニの位置  0x42c8 2 0x0000の位置をタイマーでダニ、 0xFFFFの意味の他のテンポの変更
キーの値  0x42ca 2オクターブの範囲0xfd3cいくつかの重要な署名
巻  0x42cc 2 0x007f新しいボリュームをセット0x007f = 127この場合、
変更のタイプ  0x42ce 2 0x0000を0x0000の意味体積変化、 0xですか?ですか?ですか?ですか?キーを変更する手段
originalchord [ 16 ] 0x4ac8 4 × 16
chorddata  0x4ac8 4ビットフィールドに応じて分割さ0x00000000かどうかは、ピアノやギターの弦
toinvestigate 0x4b08 768 個々の部品を参照 )のいずれかのグループ4またはグループの12

小ネタ

半角英数について

BBDX内で英数を打ち込むと、バイナリでは

xx 00 yy 00 zz 00 ...

となります。これを、

xx yy zz ... 00 00 00 ...

と書き換えると、半角英数に見えます

添付ファイル