!!!DS開発情報を集める いじっていて、気づいた事などを書き留めてみる。 勘違い等あったら、こっそり教えてくれるとうれしかったり。 {{calendar DS開発}} {{recentcalendar DS開発,20}} ---- !!!過去の情報 !!DeSmuMEでFlashのイメージを使う DeSmuMEはndsファイルのフォルダをFATカレントフォルダとしてエミュレートされるけど、ファイルの書き込みができない。 0.7.1あたりからイメージファイルに対応している。 *イメージファイルを作る ネタ元からFATImageApp.jarを落としてくる。 javaなので、コマンドラインから以下で起動 java -jar FATImageApp.jar ウィンドウが開くので File - Create FAT Image でイメージの作成。 できたJFATMADExxxを選択して、Add contentボタンでファイル選択で追加していく。 *DeSmuMEをスイッチ付きで起動(xxxxは作成したイメージファイル) DeSmuME.EXE --cflash=xxxx ネタ元:http://forums.desmume.org/viewtopic.php?id=102 !!insightでデバッグする DeSmuMEとinsightでソースコードデバッグ可能らしいので、ためしてみる。 insightのバイナリを落とす。(最新が欲しければ、ソースから自分でコンパイルする。) [http://sourceforge.net/project/showfiles.php?group_id=114505] *DeSmuMEをスイッチ付きで起動する。(xxxxはポート番号) DeSmuME.EXE --arm9gdb=xxxx (ARM9) --arm7gdb=xxxx (ARM7) *nds起動(DeSmuME) File - Open でデバッグするndsを開く *insightを起動 insight\bin\arm-eabi-insight.exe *ターゲット設定(insight) File - Target Settings Target : Remort/TCP HostName: localhost Port : xxxx (DeSmuMEで指定したポート番号) *elfファイルを実行(insight) File - Open で*.elfファイルを開く *ターゲットに接続(insight) Run - Connect to target Successflly Connected. ダイアログが表示されれば、接続完了。 エラーになる場合は、接続できていないのでポートが開いているか(ファイヤーウォール、アンチウィルスソフト等)を確認する。開いている場合は、何度かinsightを起動し直したりすると接続できたりする。(謎) *デバッグする _startで止まっているので、ツールバーの左プルダウンリストから、ソースを選択 行番号の左の-をクリックすると赤四角が表示され、ブレイクポイントが設定できる。 ツールバーのcontinueをクリック。設定したブレイクポイントまで実行される。 Step、Next等でデバッグする。 !!luaライブラリ 単にlua 5.1.2をライブラリにアーカイブしただけです。 fmsxDS ver.0.08からこれが必要です。 ま、lua本家からソース拾ってきてリンクすればいいんだけど。 2バイト(SJIS?)不具合対応のパッチをあててあるはず。 {{ref libLua_512.zip}} !!bitmapサンプル MAINに2枚重ね、SUBに1枚表示してみる。 *bitmapテスト{{ref test_GFX.zip}} !!起動パス まだ、argvに値がセットされていないのね。 起動パスは拾えないのかー。 !!Vistaでは devkitARMはVistaではうまく動作しないみたい。仕方なくVirtualPCで。 →なんとpathを追加するだけでOKでした。以下はおいらのパス指定。 c:\ndsdev\devkitARM\arm-eabi\bin c:\ndsdev\msys\1.0.11\bin c:\ndsdev\devkitARM\bin c:\ndsdev\devkitARM\libexec\gcc\arm-eabi\4.1.1 !!fatライブラリ gba_nds_fat(旧)とlibfat(新)がある。混同しないように気をつけましょう。 devkitARM r20からlibfatが標準装備された。 !!dldiドライバ .ndsファイルを直接書き換えることで、新しく出てきたマジコンのドライバに対応させてしまおうというすばらしい仕組み。nds_fat_lib、libfatの両方で使える。 !!libfatを使ってみる。 !インストール *libfatは別アーカイブなので、適宜ダウンロードする。 *fat.h をlibnds\includeにコピー *libfat.a をlibnds\libにコピー *Makefileにlibfatを追加 libndsより先に書かないとライブラリがエラーになる。 LIBS= -lfat -lnds9 !記述 *fatInitDefault()を実行後、ファイル関数は標準関数(fopenとかfreadとか)が使用できる。 if( fatInitDefault() != NULL ){ fp = fopen( "test.txt","r" ); fread( buf, 1, 10, fp ); *バイナリとテキストの区別はないみたいなことが書いてあったかな。(未確認) *DSスロットとGBAスロットは別パーテーションとして管理されているので、両方のスロットに挿してあっても使用できる。ファイル名の指定時にいわゆるドライブ名のごとくfat0:〜fat3:を指定する。fat:とfat0:は起動時のスロットがセットされるので、DSのスロットとGBAスロットを意識せずに記述できる。現状では、DSスロットのマジコンが主流なのでGBAスロットを考慮する必要があるかは微妙だけど、、、 ,指定,パーテーション ,fat: fat0:,起動したスロット(DSスロットかGBAスロット) ,fat1:,DSスロット ,fat2:,GBAスロット ,fat3:,カスタムスロット(その他のデバイス用?wifiとかdldiドライバ書けばいけるってことか?) !対応ドライバ 以下のドライバは入っているので、そのままつかえる。 ,ドライバ,対応機種 ,MPCF,ムービープレイヤー ,SCCF,Super Card CF ,SCSD,Super Card SD ,M3CF,M3 CF ,M3SD,M3 SD ,EFA2, ,FCSR,SRAM? ,NJSD,ninjaDS ,NMMC, これ以外のマジコンの場合は、dldiで書き換える必要がある。 !!サンプルソース *BGテスト{{ref test_BG.ZIP}} *libfatテスト{{ref test_fat.ZIP}}