にゃごすwiki

DS開発/2009-5-3

  gnuboyDSテスト

gnuboyを弄ってます。というか、ました。って感じだけど。
fmsxDSを弄っていて、もう少し速度が上げられないかと思っていたのだが、考えるられるのが、アセンブラ化とか、最適化とか動的コンパイルとかあるけど、どれもハードル高くて。もうひとつ、DSならでは(ってほどのことではないけど)の高速化として、ハードウェアをハードウェアでエミュレーションってのがある。要するにスプライトはスプライトで表示するようにするってこと。移植するソースはwindows用なので、1フレームごとに1画面描画するのでDSには重荷だったりします。さてやってみようかと思ったところ、どこから手をつけたらよいやら。そこで、GBとDSなら親和性高そうなので結構簡単にエミュできるんじゃないかと
スプライトとBGはとりあえず、表示できるようになった。(カラーとか全然ダメだけど。)後は、割り込み関係ができればいいんだけど。ってところで止まってます。

※割り込み関連が入っていないので、スクロールしたときなどに激しくちらついたりします。UIとか入っていないしゲームもろくに動きませんので、常用などできるレベルではありませんので、ソースがみたいとかどのくらい動くのか知りたい奇特な方だけどうぞ。

ndsファイルにDLDIパッチして、SDのルートにコピーしてください。ゲームはmario.gbというファイル名にリネームしてSDのルートにコピーしてください。

ソース(バイナリ付)
gnuboyDS_000.zip(789)

  devkitARM バージョンアップ


devkitARMがr26にバージョンアップしています。
更新内容は、、、、分からん。
filesystemが0.9.2にバージョンアップしてます。
今回はディレクトリ一覧取得関連のバグフィックスのようなので速攻アップデートしておきましょう。
アップデートのついでにfilesystemを弄ってみたんだけど、エミュレーターでは動いてるんだけど、実機では初期化が成功しない。argv[0]がセットされないからダメなのかな。argvセットしてくれるランチャとかならいけると思うんだけど、あるんかいな。

サンプルソース
efs_libとほとんど同じ。
test_fs.zip(665)


filesystemについて要点のまとめ

  • データをndsファイル内に格納できる
    • ndsファイルを配布するだけでよくなるし、データむき出しよりは多少読まれにくいでしょう。(バイナリエディタ等で見ようと思えば見れるけど)
  • ファイルの書き込みは出来ない
    • DSのROMを読み込む為の処理なので、書き込みは出来ません。(efs_libだと限定的に出来るようですが。)
  • ndsのファイルサイズは4Mbyte以上になっても大丈夫
    • arm9バイナリの最大サイズは4Mbyte弱なので、データをソースに含めてしまうと4Mbyte弱までが上限ですが、データとして格納すれば、4Mbyte以上になっても大丈夫です。最大がどのくらいかは謎。1ファイルの最大サイズは4M以上でも大丈夫だと思われますが、読み込める最大サイズは4Mbyte - arm9バイナリサイズです。

使い方

ソース
インクルードを追加

#include <filesystem.h>

初期化

  if( !nitroFSInit() ){
    iprintf( "nitroFSInit error\n" );
    loop();
  }

初期化後は普通にアクセスできる。(読み込みのみ)

  file = fopen("nitro:/folder/test.txt", "rb");
  fread( buf, 1, 10, file );
  iprintf( "buf[%s]\n", buf );
  fclose( file );

ディレクトリの取得もlibfatと同じ方法です。

データファイル
ルートフォルダを作成してデータファイルを入れておく(サブフォルダも可)

nitrofs
└─folder
    └─test.txt

makefile
ファイルシステムのルートフォルダ指定

NITROFS := -d $(CURDIR)/../nitrofs

ライブラリをlibfatの前に挿入

LIBS	:=-lfilesystem -lfat -lnds9

ルールを修正

%.nds: %.bin
    @ndstool -c $@ -9 $(TARGET).bin $(ARM7BIN) $(ICON) $(NITROFS)

makeしてDLDIパッチを当てる。

エミュレーター(ideas)では、以下をチェックする。

□Use GBA ROM for EFS Lib