DS開発情報を集める
いじっていて、気づいた事などを書き留めてみる。
勘違い等あったら、こっそり教えてくれるとうれしかったり。
<< | 2025-2 | >> | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
2010-4-28
libndsドキュメント翻訳
適当に翻訳してみるテスト中...
video.h 位しか出来てないけど
いちいち、レジスタの内容をgbatechを見るの面倒なので、
gbatechの内容も取り込んでしまえたらいいなぁなんて、妄想中。
http://ngs.no.coocan.jp/libnds/
2010-3-20
HomebrewMenuから起動
vramDをarm7に指定してるとうまく起動出来ないみたい。
変なことをしていると、だめなのかな。
2010-3-12
HomebrewMenuとかfilesystemとか
HomebrewMenuの新しいバージョンがでてた。R4とかのブートローダーまで用意してくれている。argvに関してはこのメニューを使えってことで終了なのかな。
そういえば、いつの間やらプログラムの終了が出来るようになってたのね。R4ではHomebrewMenuから起動してmainを終了するとHomebrewMenuに戻るのを確認できた。ttdsでは終了で止まってしまうみたい。これからは無限ループはやめてプログラムを終了するようにしないといかんな。
DeSmuMEがargvに対応したのでデバッグもしやすいし、(最近のsvnじゃないとダメっぽい)やっとfilesystemを使う環境が整った感じかな。
DeSmuMEをコマンドラインで起動するとfilesystemの初期化でこけることがあるんだけど、コマンドライン起動の場合、「ROMパスを最後に選択したROMのパスにする」が効かないようで、CFのパスがROMパスとずれてしまい初期化に失敗している模様。なので--cflash-pathスイッチでCFのフォルダをROMフォルダに必ず指定するようにすればいいみたい。
あふだとこんな感じ
〜\DeSmuME_dev.exe "$P\$F" --cflash-path="$P"
HomebrewMenuをいじって俺専用メニューでも作ってみるかな。
2010-2-22
DeSmuMEのiDeasデバッグ出力
DeSmuMEでiDeasのデバッグ出力に対応したって書いてあったんだけど、やっぱり出力されないなーと。DeSmuMEのソースを確認したところprintfしているので、標準出力に出力されるはずなのだが、、、
2010-2-16
filesystemをハック(ってほどのことでもないが)
filesystem(元efslib)だけど、相変わらず、argv対応されたメニューじゃないと起動出来ない。(HomebrewMenuとか)すぐに何らかの対応がされると思って待ってたんだけど、結局そのままなのでなんとかならないかと調べてみた。
ndstoolではまった
maxmodを試してみようと、サンプルのmakeしてみると、ndstoolがエラーになった。
Nintendo DS rom tool 1.46 - Nov 30 2009 by Rafael Vuijk, Dave Murphy, Alexei Karpenko failed to open input file make[1]: *** [/c/devkitPro/nds-examples-20091201.tar/audio/maxmod /streaming/streaming.nds] Error 1 make: *** [build] Error 2
うーむ、また64bitの呪いか〜と萎えていた。
2009-6-26
libnds 更新
更新されてました。
2009/6/24 libnds-1.3.6
2009/6/24 default_arm7 0.5.5
2009/6/25 current
default_arm7は修正はいってないのにバージョンだけ上がってる。libndsと同期してバージョンあがるのかな?
current?ってなんぞやと思いきや、ポーティングされたライブラリが入るみたい。
pngとzlibがポーティングされたようです。
ってことは、libndsにpng読み込みが組み込まれたのか?
と期待したけど、libndsはfifo関連と、スプライトのモザイクのバグ修正のみのようです。
むー、pngのサポートはPSPだけなのかな。
今まさに、pngのライブラリをいじってたことろだったから、いいタイミングだと思ったのになぁ。
2009-6-12
libndsまたまたバージョンアップ
このところ、頻繁ですねぇ。
更新内容はまだ見てません。
2009/6/11 libnds 1.3.5
2009/6/11 dswifi 0.3.9
2009/6/11 default arm7 0.5.4
ideasのデバッグメッセージにバグが、、、
前に書いたideasのデバッグメッセージにバグがありました。
mallocした文字バッファの開放を忘れてました。
iDeasMessage関数の最後に以下を追加して下さい。
free( buf );
元の記事も修正済みですので、完全ソースはこちらをご覧下さい。
申し訳ありませんでした。
2009-6-2
libndsなど更新されてた
libnds 1.3.4
maxmod 1.0.5
dswifi 0.3.8
default_arm7 0.5.3
nds-examples-20090531
こんなところかな。
またまたfifo関係がかなり弄られているっぽい。
2009-5-3
gnuboyDSテスト
gnuboyを弄ってます。というか、ました。って感じだけど。
fmsxDSを弄っていて、もう少し速度が上げられないかと思っていたのだが、考えるられるのが、アセンブラ化とか、最適化とか動的コンパイルとかあるけど、どれもハードル高くて。もうひとつ、DSならでは(ってほどのことではないけど)の高速化として、ハードウェアをハードウェアでエミュレーションってのがある。要するにスプライトはスプライトで表示するようにするってこと。移植するソースはwindows用なので、1フレームごとに1画面描画するのでDSには重荷だったりします。さてやってみようかと思ったところ、どこから手をつけたらよいやら。そこで、GBとDSなら親和性高そうなので結構簡単にエミュできるんじゃないかと
スプライトとBGはとりあえず、表示できるようになった。(カラーとか全然ダメだけど。)後は、割り込み関係ができればいいんだけど。ってところで止まってます。
※割り込み関連が入っていないので、スクロールしたときなどに激しくちらついたりします。UIとか入っていないしゲームもろくに動きませんので、常用などできるレベルではありませんので、ソースがみたいとかどのくらい動くのか知りたい奇特な方だけどうぞ。
ndsファイルにDLDIパッチして、SDのルートにコピーしてください。ゲームはmario.gbというファイル名にリネームしてSDのルートにコピーしてください。
ソース(バイナリ付)
gnuboyDS_000.zip(861)
devkitARM バージョンアップ
devkitARMがr26にバージョンアップしています。
更新内容は、、、、分からん。
filesystemが0.9.2にバージョンアップしてます。
今回はディレクトリ一覧取得関連のバグフィックスのようなので速攻アップデートしておきましょう。
アップデートのついでにfilesystemを弄ってみたんだけど、エミュレーターでは動いてるんだけど、実機では初期化が成功しない。argv[0]がセットされないからダメなのかな。argvセットしてくれるランチャとかならいけると思うんだけど、あるんかいな。
サンプルソース
efs_libとほとんど同じ。
test_fs.zip(731)
2009-4-5
devkitproのバージョン上がってた
うーむ、チェックしていたはずだったんだけどなぁ。
今回は何が変わったんだろうなぁ。
じっくり見てないけど、目につくところでは、efs_libがfilesystemって改名したのか。
あとは、バグフィックスがメインかなぁ。
2009-3-15
iDeaSでデバッグメッセージ
DSは2画面あるのでデバッグメッセージの表示に困ることは少ないけど、両方の画面を使うアプリだと、面倒なことになってくるでしょう。iDeasでconsole表示ができそうなので、デバッグメッセージの表示を試してみた。
デバッグメッセージの出力先にお困りの方は使ってみてください。
2009-1-3
maxmodのバージョンあがってる
サウンドドライバのmaxmodのバージョンが25日にあがってた。
libwifiも微妙にバージョンあがってたのね。
年末にlibndsをバージョンアップするってgbadevのフォーラムにあったと思ったんだけどなぁ。
あ、これこれ、間に合わなかったのかな。
http://forum.gbadev.org/viewtopic.php?t=16263
2008-12-12
DevkitPro r24
やっと、新バージョンリリースですねぇ。
全更新なので、updater使ったほうが簡単です。
まだ、ちょこっとexample見ただけだけど、ARM7とARM9のやりとりはIPCからFIFOに変更されてる。libfatからインストール済みのドライバが削除されたり(Desmumeでのデバッグが面倒に)I/O直だったのが、関数が用意されてかなりシンプルにかける様になってるっぽい。
起動パラメータはダメだったのかな〜。
2008-10-8
DSLuaマニュアル翻訳中
何となく、DSLuaを弄ってみようかと思いきやマニュアルの翻訳見つからないなぁ。つーことで適当に翻訳しながら覚えるかなぁと。まぁ、必要ないと思うけど。
なんでエラーが表示されないんだろうと思ってたんだけど、文字色おかしいんじゃないか?
みんな、スクリプトのデバッグどうやってるんだろうねぇ。
横のメニューからどうぞ。
2008-7-20
LuaDSちょっと更新
一つ一つ関数を用意するの面倒なので、メモリを直接いじる関数を追加しました。
これだけあれば、BGだってスプライトだって好き勝手し放題。
あとファイル一覧の関数も追加してみた。
BG,スプライトのサンプルとファイル一覧のサンプルを作ってみた。
2008-7-19
SD→microSD変換アダプタ
さすがに実機でのテストでいちいち細かいmicroSDを出し入れするのにうんざりしていたし、マジコンのmicroSDスロットが壊れるんじゃないかと不安を感じてたんだけど、AKIBA PC HOTLINEでSD→microSD変換アダプタを見つけたので早速買ってきてみた。
2008-7-2
libnds cvs版
libfatをコンパイルするついでに、libndsを更新したところ、
IPCでワーニングがぽろぽろ出る様に。<deplicated>だって?、使っちゃダメってか?
arm7でタッチパネルのデータセットできないと思うんだけどなぁ。
ライブラリでそこまでやってくれるようになるのかなぁ。
libfatライブラリにR4のドライバ追加
お、新しいideas dldiの起動が早くなったっぽいですねぇ。
てなことで、libfatを更新したついでに、R4のドライバをライブラリに組み込んでみた。ideasでテストするのにいちいちdldiパッチ当てるの面倒ですからねぇ。
makefileにdldiパッチまで書けばいいじゃんて思われた方には必要ありません。
2008-6-30
Devkitpro r23b
いつの間にやら出てたんですなぁ。
rename問題も解消したいみたいね。
libfat20080530
いつの間にやら、こっちもアップデートされてたのでアップデートしてみた。
バイナリないところをみると、wiiのためのリリースなんだな。libndsをCVSから落とさないと、argv関連でコンパイルできない。
そろそろ、libndsリリースしてほしいなぁ。
で、コンパイルしてみたところ、ディレクトリの取得でフリーズしてしまう現象が。少し前にCVSから落としたやつで同じ状態だったんだけど、どうせライブラリのバグなんだろうと放置してた。ほかの人には特に問題なってないということは、おいらのソースの問題なのかと目をこらして見直してみたところ、やっとわかった。
dirnext()の第2パラメータファイル名が入るんだけど、utf-8対応でサイズが256バイトから3倍の768バイトに拡張されてた。長いファイル名のファイルなんてないから問題ないだろうとチェックしてなかったのが、いけなかったか。
というか、MAX_FILENAME_LENGTHがfat.hに定義されてないのがそもそも、、、、
なんか前にもこんなことがあった様な気もするなぁ。
void printdir( char * path ){ char fname[768]; ←256から変更 struct stat st; DIR_ITER * dir; dir = diropen( path ); if( dir != NULL ){ while( dirnext(dir, fname, &st)==0 ){ iprintf( "%s\n", fname ); } dirclose(dir); iprintf( "--------------\n"); }else{ iprintf( "diropen error!! %s\n", path ); } }
2008-6-29
luaでテキストエディタを作ってみる。
fmsxDSからfmsxを削除して、luaだけ動く様にしてみた。
名前は、luaDSとでもしておく(紛らわしいことこのうえないな。)。
まぁ、すでにDSLuaがあるので、今更することもないんだけど。実際にどこまでのソフトがluaで作れるのか試しに、手頃?かどうかはわからんけど、エディタでも作ってみるかと。ま、この手の開発でやりたくなることの一つだしね。
基本的なエディットはできる様になったかな。
もうちょっとで、簡単な変換くらいはできそうな予感。
使い方は面倒なので、また今度。
ダウンロード
バイナリLuaDS_001b.zip(1042)
ソースLuaDS_001s.zip(931)
エディタスクリプトedit001.zip(830)
スクリーンショット
2008-5-20
プロファイル その2
ヒントがプロファイラのソースに書かれていた。
no_instrument_function アトリビュート?を関数につけるとその関数は
プロファイル対象から外れるって寸法です。
つーことで、HblankHandlerを元のソースに戻して、
プロトタイプ宣言にアトリビュートを追加します。
void HblankHandler(void) __attribute__ ((no_instrument_function));
ついでに、cyg-profile-Sys.cに以下のプロトタイプ宣言を追加。
int Sys_FileOpenWrite (char *path) __attribute__ ((no_instrument_function)); int Sys_FileWrite (int handle, void *data, int count) __attribute__ ((no_instrument_function)); void Sys_FileClose (int handle) __attribute__ ((no_instrument_function));
makefileの CFLAGSN とcyg-profile-Sys.cのルールを削除します。
HBlankハンドラを移動しないですむのでちょっと楽になったかな。
サンプル(修正)
test_profile.ZIP(532)
過去の情報
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?)不具合対応のパッチをあててあるはず。
libLua_512.zip(859)
bitmapサンプル
MAINに2枚重ね、SUBに1枚表示してみる。
- bitmapテストtest_GFX.zip(594)
起動パス
まだ、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 |
サンプルソース
- BGテストtest_BG.ZIP(707)
- libfatテストtest_fat.ZIP(958)