NintendoDS(NDS)非公式開発 Part1
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2005/04/18(月) 08:29:22ID:LMyYYz9X初心者歓迎。質問歓迎。英語苦手な人歓迎。冷やかし歓迎。ネカマ歓迎。
資料、リンク等
NDSTech Wiki
http://www.bottledlight.com/ds/index.php/Main/HomePage
Home-Brew Programmers Guide to the Nintendo DS Home-Brew Programmers Guide to the Nintendo DS
http://www.dspassme.com/programmers_guide/Tutorial/index.html
開発環境
NDSDevEnv
http://www.aaronrogers.com/nintendods/ndsdevenv.php (Offline Installer 2.2.6 (8MB) をダウンロード)
NDS Development
http://j-gbadev.hp.infoseek.co.jp/ds/index.htm
GBAの資料が役に立つので関連スレ
ゲームボーイアドバンス(GBA)開発@ゲ製板(避難所)
http://bbs.gamdev.org/test/read.cgi/gamedev/1055111303/
ゲームボーイアドバンス(GBA)非公式開発 Part2
http://pc5.2ch.net/test/read.cgi/gamedev/1099119005/
0210名前は開発中のものです。
2006/08/02(水) 20:22:47ID:YLGAk7X1それは欲しいかも。
地図画像とか何枚か入れて持ち歩きたいなぁって思ったことがあったので
0211名前は開発中のものです。
2006/08/03(木) 00:08:11ID:9LOZqD/hMoonshell
jpegどころかpngやPSDファイルまで表示可能
AやXボタンで拡大縮小、タッチパネルやカーソルでスクロール可
0212名前は開発中のものです。
2006/08/04(金) 00:25:57ID:CrcWfCS3PNG画像をメモリに展開して使いたいんです。
0213Moonlight
2006/08/04(金) 15:38:31ID:HWZ8EDXAで、px/pyが補正後のデータ。(256x192の範囲内に収まる数値)
ファームから補正情報読み込んでスケーリングとか色々計算するのですが、libndsがやってくれるので基本的に気にしないでOKだと思います。
libndsのソースの、arm7/touch.cのtouchReadXY関数がそれなので眺めてみると楽しいかも。
>>198
ほんとは私がdpgツールの一部として作っておくべきだと思うのですが、WindowsでC言語が使えないので無理っ!(苦笑
>>205
ReinMoonVer0.5betaで修正しました。
Type3フラッシュメモリは書き込む前に全初期化しないといけないのを忘れていました。
教えてくれてTHXですー。
>>206
FATライブラリは同じもの使ってるんですけどね…。ただ、独自拡張してるのでバグがあるかも…(苦笑
>>208
(MoonShellを推したいけど)DSオーガナイズとか?
>>212
オープンソースのlibpngとzlibがそのままNDSでも使えました。
Windowsでlibpngを使ったことがあるなら違和感なく使えると思います。やったことはないですけど。
0214名前は開発中のものです。
2006/08/04(金) 18:16:44ID:eZAuZvRJ0215名前は開発中のものです。
2006/08/05(土) 15:51:37ID:ATzmwjnGCSV形式をエクセルみたいに表示できるCSVビュアー希望
0216名前は開発中のものです。
2006/08/05(土) 16:10:36ID:63ZUPrMH0217名前は開発中のものです。
2006/08/05(土) 16:34:16ID:ThRSjFwoインターフェイスは??
PSPなら普通のUSBがあるが
0218名前は開発中のものです。
2006/08/05(土) 16:50:31ID:APzy0J3I0219名前は開発中のものです。
2006/08/05(土) 21:12:25ID:2FB+F25ilibpngを落としてきたけど、難しそうだ。
最低限ファイル名orポインタとか関数に渡せば、画像が取り出せれるといいんだけどなぁ〜
0220Moonlight
2006/08/05(土) 23:28:48ID:IINTof3Z純正libpngが難しければ、MoonShellのpngプラグインのソースからライブラリだけ引っこ抜いたら簡単かもです。
置換で_consolePrintfをconsolePrintfに変えたりとか、そういう作業は必要ですが。
0221名前は開発中のものです。
2006/08/06(日) 13:43:10ID:dJkOtY4P0222名前は開発中のものです。
2006/08/06(日) 15:44:01ID:HEBinSu5実行可能形式だけを配布するのは問題なし?
GPLなライブラリとか使ってたらソース公開必須?
実行形式のみ配布して、任○堂からクレーム付けられる可能性は?
今後の為に知識として知っておきたい。
0223名前は開発中のものです。
2006/08/06(日) 16:16:55ID:ZtXOiPj6何を言っているんだお前は
0224名前は開発中のものです。
2006/08/07(月) 04:49:24ID:R/kak1DTライセンス違反といえなくもないので
ありえなくもない。
かつては、スーファミのSM調教師瞳ですら
任天堂の指令により制作者が逮捕されていた。
0225192
2006/08/07(月) 20:00:10ID:DnGCjQopとか思った。
コナミは嫌われますか?
0226名前は開発中のものです。
2006/08/07(月) 20:56:05ID:Ic5RSCDN0227名前は開発中のものです。
2006/08/08(火) 23:18:37ID:/ly5By2d0228名前は開発中のものです。
2006/08/09(水) 02:02:49ID:y6tILUJU偽春菜
0229名前は開発中のものです。
2006/08/09(水) 09:51:37ID:wvfqQcJDIS-NITRO-UICがUSB clientだけじゃなくってhostにもなればいいのにね。
0230名前は開発中のものです。
2006/08/09(水) 12:39:26ID:V6L1h+27純正のDSブラウザは遅いからなぁ
携帯サイト専用ブラウザでもいいから誰か作ってくれないですかねぇ
0231名前は開発中のものです。
2006/08/09(水) 13:39:50ID:f1XrJuMCクロックうp
0232名前は開発中のものです。
2006/08/10(木) 11:27:32ID:eReYGMjpDSブラウザの為に本体改造のリスクかぁ
ちと悩むなぁ
0233名前は開発中のものです。
2006/08/10(木) 18:33:02ID:niI4ueWmカタログの内容を全部携帯機に入れるんじゃなくて、
サークルチェック結果だけで良いと思うんだ
というコンセプトで作ってるんだがどうなることやら
0234名前は開発中のものです。
2006/08/10(木) 18:36:19ID:niI4ueWmとりあえず3日目に間に合えば良いと思うんだ
無理っぽいけど
0235名前は開発中のものです。
2006/08/10(木) 21:05:35ID:I9GN2H/u0236名前は開発中のものです。
2006/08/10(木) 22:32:57ID:zR3/h3yd0237名前は開発中のものです。
2006/08/11(金) 01:34:40ID:9U+ERiBW↓
■ニンテンドーDSの自作プログラムを作ろうぜえ■
http://game9.2ch.net/test/read.cgi/gameurawaza/1116614246/
0238名前は開発中のものです。
2006/08/11(金) 16:17:43ID:26yGIs2q大期待してる
洩れは紙で済ましてるが
>>237
そこは基地外の場所なので
高尚なDSプログラム話にはふさわしくないw
0239名前は開発中のものです。
2006/08/11(金) 21:52:33ID:4YheNsYP頼む誰か。
理解する取っ掛かりがほしいので、簡単なサンプルプログラムのmakeまでを
解説している日本語のサイトを教えてくれ。
0240Moonlight
2006/08/11(金) 22:58:14ID:9yKR/DgJ[C:\devkitPro\examples\nds\templates\combined]フォルダに入って、makeと打てばOKです。
最初からコンパイル済みなので気になるようなら、make cleanとすればコンパイル済みバイナリは全部消えます。(なんで最初からコンパイルしてあるんだろう?)
サンプルに入ってる中でARM7とARM9がまとまっているのはcombinedしかないし、これが一番単純なのでおすすめです。
コマンドプロンプトの使い方は当然知っているとシンジテル…
0241名前は開発中のものです。
2006/08/11(金) 23:44:13ID:4YheNsYPありがとう。
makeを実行したら色々なファイルが作られるのを確認しました。
NDSにWifiでndsファイルを送信したら、崩れたロゴが出て固まりましたが・・・。
このサンプルプログラムを動かすのにはFlashROMが必要なのでしょうか?
(実は持っていない)
Nintendo DS - Wireless Multiboot
http://users.belgacom.net/bn967347/
このサイトにあったサンプルのndsファイルは実行できたので、とりあえず
開発環境と、プログラムを実行させる環境は整ったので、後は自分の
努力しだいと判断します。
さて、今からC言語の勉強を始めます。(マテ
取っ掛かりができましたので、回答してくださって感謝します。
ありがとうございました。
0242名前は開発中のものです。
2006/08/12(土) 00:03:09ID:Eayw3C5n0243名前は開発中のものです。
2006/08/12(土) 00:10:55ID:h3w8Q1SXでも、C言語とC++はどちらにしても今から勉強するんですよ。
ナニモノモ オレヲ トメルコトハ デキナイ。
ついでにNDSでの開発も覚えようかという訳です。
0244名前は開発中のものです。
2006/08/12(土) 00:48:30ID:k4g8gfadというかGBにしておけ
0245名前は開発中のものです。
2006/08/12(土) 00:57:41ID:sfNXM7kP大丈夫
キミの能力がブレーキになるYO!
0246名前は開発中のものです。
2006/08/12(土) 01:12:30ID:S5X708ZL0247名前は開発中のものです。
2006/08/12(土) 01:12:32ID:h3w8Q1SXそうは思ったんだけどね。
NDSなら手持ちの物で環境が整えられるんで、これで行きます。
>>245
ダカラ ココロノ ブレーキハ カケラレナイ!
0248名前は開発中のものです。
2006/08/12(土) 01:24:09ID:h3w8Q1SXガンバル!
アリガトウ!
0249Moonlight
2006/08/12(土) 01:25:52ID:OVMMuGXv1・F2AなどのFLASHタイプのGBAカートに書き込んで、WifiMeからGBAカートを経由して起動する。
2・FlashMeする。
1はGBAROM領域からメインメモリにコピーするブートローダーが必要だったような気がします。たぶんSC/M3とかは不可。
2ならFlashMeがRSA認証を潰したので、未認証(要するにhomebrew)のROMイメージがそのまま起動できたと思います。
懐かしー。うろ覚えなので間違ってたらごめんなさい。
0250名前は開発中のものです。
2006/08/12(土) 01:41:37ID:rAKEFzkn0251129
2006/08/12(土) 05:16:09ID:d02VPBZkいまいち、「コレダ!」っていうセーブ先が決まらず放置に・・・
blogでリクエストもらったので、
とりあえず週末中に、日本語ファイル名対応版をリリースします。
0252233
2006/08/12(土) 12:36:03ID:/B751hXgゲームでない以上、確かにスレ違いだと思うので、こちらに移動させていただきました。
0253名前は開発中のものです。
2006/08/14(月) 15:12:18ID:kqJN+BQk基本的にwifi経由の実行はRSA認証がかかっているためhomebrewは実行できない。
ただ、認証がかかっているのはARM7とARM9のベースコード部分だけで、オーバレイ部分にはない。
MARIWOかなんかのコードがオーバレイ部分に飛んでいるものがあって、これを利用して
素のDSでhomebrewが実行できた…………………………………………………………時期もあった。
ある時期のDSから上記のMARIWOには対策が打たれて実行できなくなった。んで、FlashMeすればいいんだけど、
FlashMeするには結局ハードへ若干の改造が必要&失敗するとひどい目に遭うんで、結局PassMe系と比べた
利点がなくなって流行らなくなって現在に至る。
んじゃなかったかな。やっぱりうろおぼえスマン。
0254名前は開発中のものです。
2006/08/14(月) 15:20:46ID:kqJN+BQk最近の対策済みDSでも実行できる。
0255名前は開発中のものです。
2006/08/14(月) 15:43:44ID:3DqFE+/1セーブ機能マジで期待しております。夏ばてなどなされないようお体にはお気を付け下さい。
0256名前は開発中のものです。
2006/08/14(月) 21:47:50ID:TUBmIhpRSuperCARDでは起動して、M3だとロード画面で止まってしまう。
M3でプログラム動かす時は、何か手順踏まないと動作しないの?
0257名前は開発中のものです。
2006/08/15(火) 00:37:43ID:mCVrhKr9クライアント通す通さないぐらいしかチェックポイントが見当たらんが・・・。
liboggとlibvorbisをビルドしてみた。
サウンド周りってARM7かARM9どっちでビルドすればいいんだ?
横着してサウンド周りの資料やサンプルを見ずにビルドだけしたんだがorz
0258Moonlight
2006/08/15(火) 01:59:28ID:mQlnaCaz基本的にhomebrewモノはそれぞれのアダプタ毎に対応する必要があるみたいです。
せめて起動シーケンスくらい統一してくれれば…と思うのはワガママなんでしょうね。
一応私が調べた範囲だと、
・M2もしくはアドムービー
ブートローダ無し。これだけファイル名は'_BOOT_MP.nds'固定。別途FINEやMoonShellなどのメニューローダーを使えばファイル名は可変。
・SuperCardCF/SD(たぶんMiniSDもMicroSDも同じ)
フラッシュカートと同じタイプのブートローダが必要。ndstoolや色々なヘルパーアプリがある。
・M3CF/SD/MiniSD
ROM開始時にAボタンではなくSTARTボタンで起動するならヘッダ無しでOK。(DEMOモード?)
普通の感覚だとAボタンを押してしまう(と思う)ので、ブートローダを付けると親切だと思います。
私は、pepsiman-m3powerloader-20060117.binを使っています。
ブートローダ不要、ファイル名可変なアダプタ。
・MaxMediaLauncherCF
・EZ-Flash4(MiniSDもMicroSDも一緒?)
・Ewin2MicroSD
・MagicKey2/3
後発のアダプタはみんな大丈夫なんですよね。
生ROMイメージだけ配布して、ヘッダはユーザ各位勝手に自分用のを付けてくれってもアリだと思います。
ちなみに、ディスクアクセス方法は、物の見事に全部違います。まったく共通性がありません。少しは(ry
0259Moonlight
2006/08/15(火) 02:01:52ID:mQlnaCazストリームPCM再生ってどうやるんでしょうか。
どちらにしても、ARM7でまともに使えるメモリは64kbyteしかないし33MHzはデコードに非力すぎるので、ARM9で展開、ポインタか共有メモリ経由でARM7に渡して再生、という感じになると思います。
びっくりしたのですが、DevKitARMr18(r19?)以降は、C++サポートをARM7側にも拡張したらしく、ARM7メモリが残り5kbyteくらいしか使えなくなっています。
まともに組むならDevKitARMr17がオススメです。
MoonShellのストリーム再生はいまだにプチノイズが乗るのですよ…だから参考にしないで(笑
ぜひぜひ信頼性の高い方式を開拓してほしいです。そしてソースプリーズ。(笑
0260名前は開発中のものです。
2006/08/15(火) 05:53:55ID:LCNocl7z0261名前は開発中のものです。
2006/08/15(火) 08:22:30ID:t+707qIL現在試した方法は、
・SuperCard miniSD
devkitproでコンパイルしたファイルをそのままコピーして実行可能。
・M3
ある自作プログラムが、Devkitproでコンパイルしたファイルそのままで
Aボタン・スタートボタン共に動作可能。但し動かない時もあり?
別の自作プログラムは、Aボタン・スタートボタン共に動作せず。
ブートローダ付けて試してみようと思ったけど、
今から仕事なんで帰ってきてからだorz
0262名前は開発中のものです。
2006/08/15(火) 13:44:27ID:Z/PyVByn0263Moonlight
2006/08/15(火) 16:44:35ID:mQlnaCazM3でもローダ無しでAボタン起動できる可能性があるということでしょうか。
むぅ。改めて調べてみる必要がありそうです。
私が調べたのはずいぶん前なので、ファームの更新でhomebrewサポートが強化されているのかもしれませんね。
ファーム書かせろもしくは固定ファイル名起動専用ファーム作れと随分突っついたのですが無碍に断られました。(当たり前(苦笑
0264名前は開発中のものです。
2006/08/16(水) 13:35:24ID:mLNsWot8>作りたいゲームのねたが無い
moonshellのプラグインフォルダに入れて使える
mp4やdivxファイル再生プラグイン
0265名前は開発中のものです。
2006/08/17(木) 15:52:06ID:+BT+gal0どうやってわけるのだろう。
そして、同じプログラムで両方で動くものと
専用ものでないと動かないものの差は
どこから来るのだろう。
>>192
>作りたいゲームのねたが無い
N Scripter。
帽子屋、活動やめちゃったし
0266名前は開発中のものです。
2006/08/17(木) 16:00:34ID:TIHaO9Ud0267名前は開発中のものです。
2006/08/17(木) 21:18:14ID:MHdljUvu>どうやってわけるのだろう。
ちょっとググったらこんなのが出てきた
ttp://japan.cnet.com/news/media/story/0,2000056023,20203307,00.htm
0268名前は開発中のものです。
2006/08/17(木) 21:19:30ID:Iib4HyQhじゃあ、アイドルマスターDSをつくってくれ
wi-fiやタッチパネルの特性も活かせる良い媒体だ
0269名前は開発中のものです。
2006/08/17(木) 21:19:57ID:UU4Z/G1ESCとM3、同じプログラムが動いてくれないと開発が非常に面倒になりそう。
他の奴でも個別修正必要となったら、やってらんね〜
>>258
CFやSDのディスクアクセスは、gba_nds_fat使えば一応SCでもM3でも
プログラム的に互換性保てるんですよね?
ところで、書き込み不安定な原因って何なんでしょうか?
回避方法は、PCでダミーファイル作って、それに上書き?
0270Moonlight
2006/08/17(木) 21:48:04ID:PHnIFK0aNDS開発界隈で標準となっているchism氏作gba_nds_fatはFAT互換関数と多数のアダプタ対応とアダプタ自動検出が売りだと思います。
それ自体は素晴らしいのですが、いかんせん最近別のことをしているらしく開発が滞っています。
全てのアダプタを持っていないと自動検出コードは書けないので、新しいアダプタの追加などもできません。
そこで、対応できる範囲を狭めて一つのROMイメージで賄ったのがSaTa.氏です。独自拡張でM3MiniSDやSCSDなどが入っていますが、所持し自分で確認している範囲だと思います。
それとは別に、自動検出を捨て、とにかく多種のアダプタに対応したのが私です。このため、セットアップで(ユーザが)アダプタを選択する必要があります。
どちらが良いとは言えませんが、できるだけ同じROMが使えるのがベターですよね。セットアップ面倒くさいし。
また、アダプタ毎に違う部分はディスクアクセスだけではなく、拡張メモリ領域や起動方法が異なります。
ぶっちゃけ全てに対応するのは無理。(苦笑
>他の奴でも個別修正必要となったら、やってらんね〜
やってらんね〜〜〜〜。です。(苦笑
0271Moonlight
2006/08/17(木) 22:07:13ID:PHnIFK0a>ところで、書き込み不安定な原因って何なんでしょうか?
gba_nds_fatのFAT対応が不完全だからです。
fseekバグ、フリークラスタ検出バグ、二重FATエリアの無視、最適化オプションによる挙動の違い、などなど。
本当はchism氏が直してくれるといいのですが、前述のとおり彼はほかの事をしているみたいで。
ちなみに、fwriteバグは直っているそうなので、新規ファイルへのシーケンシャルな書き込みだけなら大丈夫…らしいです。私は信じていませんが。chkdskでエラー出るしね。
それなりに私も頑張ってみたのですが、FATわからない。お手上げっ!でした(苦笑
>回避方法は、PCでダミーファイル作って、それに上書き?
正直あんまり安全とは思えないのですが…普通にfwriteするより安全だと思える方法を。
1.Windows上で書き込み用ダミーファイルを作る。
2.gba_nds_fatでディレクトリエントリからダミーファイルの先頭クラスタを取得する。
3.クラスタリンクリストを使ってファイルサイズ分のセクタ番号一覧を作成して、テーブルにでも保存しておく。
4.あとはセクタ番号指定のダイレクト書き込みでディレクトリエントリやFATなどを一切触らず書き込む。
これで、とりあえずそれなりに安全な書き込みができると思います。
本当は、3のテーブル作成もgba_nds_fatに助けてもらいながらだと非常に楽なのですが、特にFAT32コードが信じられなくて。挙動が変なことが多数です。(最適化オプションによって安定するのかもしれませんが)
なんというか。面倒。すごい面倒。FAT16マンセー。SDFormatter最高。
でもなんというかチラ裏なのですが、「読み込めないぞなんだこれつかえねー」っていう被害と「書き込み失敗ディスク飛ばしたー」って被害では、レベルがまったく違うと思います。めんどくさいですが。
(うるせーよどこにも「正常に書き込めます」って書いてねーだろーってのもアリ…有?無?w)
まぁマジコンのファームウェアも自動セーブ退避やらなにやらでFAT壊すんだから、個人homebrew開発者が気にすることじゃないって思いますけどね。
0272名前は開発中のものです。
2006/08/17(木) 23:04:07ID:UU4Z/G1Eうへぇ。クラスタリンクまで管理せんとダメっすか〜
FAT16のみの対応でいいから、まともに書き込みできる奴が欲しいですね。
まぁ、自動判別できなくても、アダプタ毎に組み込むgba_nda_fatが違ったとしても、
まともに動くのが欲しいっす。
あ〜、FAT16って最大2Gまででしったっけ?NDSで2Gも必要?
書き込みに不安があると、ゲームでもアプリでもデータ保存に困ります。
書き込み失敗して、
「おきのどくですが、ぼうけんのしょはきえてしまいました」
と出て、orz な状態で呆然とするのは勘弁っすw
0273名前は開発中のものです。
2006/08/19(土) 21:34:55ID:Whiy4IfG524,AFFJ,Final Fantasy 3,ファイナルファンタジー3,0x0000,cd1000,
0274192
2006/08/19(土) 21:36:37ID:Qax6Q72R>>264
パワーが心配な気が・・・。
>>265
やってみたい気もする。
>>268
トレーニング(だっけ?)の練習クローンぐらいは考えたこともあった。
オリジナルを一回しか完結させてないので、その辺が疎い。
パイタッチって聞くけどなに? って感じなのでorz
何につけても、ogg再生からこつこつやっていくと行き着きそうな気もします。
がんばります。
0275名前は開発中のものです。
2006/08/21(月) 11:23:07ID:XEtRrwRichism氏がlibfatってやつを開発してるみたいだが試してみた?
0276Moonlight
2006/08/21(月) 15:04:59ID:1bPKqePnそうですねー。開発が面倒くさくても安定する方がいいですね。
個人的にはFAT16で十分だと思いますが、容量の問題ではなく「FAT32で使っている人も多い」という理由でFAT32コードを切っていません。
MoonShell内蔵FATライブラリはFAT16で最適化してるので(初速の遅い)SDを使うと特に速度が違うと思います。FAT32要らない。(苦笑
>>273
いまから(根本の)インストールフォルダを変えるのはちょっと。チュートリアルとかあるので。
ソースがありますので、文字列置換&再コンパイルだけで変えられます。
これに限らず、自分専用カスタムなどがんがん書き換えて自分の使いやすいように使ってくれればOK。
(私自身も公開用とは違うキー配置バージョンを使っていますし(笑
>>264
192氏の言うとおり「考えるだけ無駄」ってくらい全然無理です。
>>275
alpha版が本当にalphaだったころ(一ヶ月くらい前?)に試しました。文字通りalphaだったので即捨。
最近のは、IRCメインであること、CVSであること、ライブラリ形式であること、新DevKitARM向けであること、などの理由で全くさわっていません。
余談ですが、FatFsはコンパイルが通るところまでいじったのですが、LFN非対応だったのでそのまま放置です。
MoonShellが一段落したので、また色々さわってみたいですね。
0277192
2006/08/22(火) 02:29:51ID:3eB/98xjlibogg、libvorbisの最新ソースを拾ってビルド。
あちこち調べながら、ov_open_callbacksが帰ってこずに固まる現象に悩まされております。
# なんでov_open_callbacksかというと、binファイルをメモリブロックとして持っているから
ov_open_callbacksは、悪評が結構あるようで、RC3のものにしろとかいろいろ言われてるけど、今のところどっちもダメ。
ちなみにWindows2000+VisualStudio2005で同じことをすると動く。
スレ違いっぽいがこのあたりに通じている人いませんか?
あと、16チャンネル中、1チャンネルを再生用に占拠すれば意外にストリーミング再生はできるんじゃないかと軽く思ってみたり。
0278Moonlight
2006/08/22(火) 03:22:21ID:ifxxTdvS音出さないでoggデコードだけするシンプルなサンプルなら、mspv10_oggのソースがわかりやすいかもしれません。
MoonShell 1.31のダウンロードページのMSPV40SDKに入ってます。
ストリームPCM周りは全部MoonShellに依託するので音は出ませんが。
main.cppのStart関数が始めにファイルハンドル付きで呼ばれて、あとは定期的にUpdate関数が呼び出されるだけです。で、最後にFree関数で解放。
ov_open_callbacks使ってますが、別段問題ありませんでした。
メインメモリに直接マッピングされたoggバイナリを展開するなら、
size_t callbacks_read_func (void *ptr, size_t size, size_t nmemb, void *datasource){
s32 len=size*nmemb;
if((FileSize<=FileOffset)||(len<=0)) return(0);
if(len>(FileSize-FileOffset)) len=FileSize-FileOffset;
u8 *pu8=(u8*)ptr;
for(s32 cnt=0;cnt<len;cnt++){
pu8[cnt]=FileBuf[FileOffset];
FileOffset++;
}
return(len);
} // 開業多すぎと怒られたので詰めました…見づらい
ってな感じで。(上のは適当に書いたので動かないと思います。雰囲気だけ)
また、oggライブラリはoggTremorじゃないとCPUが間に合わなかった記憶があります。
-DLOW_ACCURACYしないとoggTremorでも音飛びしましたが、これは私の最適化技術の低さの成せる技だと思います。
あと蛇足ですが、-fsigned-charもやっとかないとダメだったような気がします。
とりあえず、いま192さんが作っているプロジェクトのMakefileに-fsigned-charを追加してみてはいかがでしょうか。
わたしも否定的なレスばかりにならないように心掛けたいです。(ほんとに(苦笑
0279名前は開発中のものです。
2006/08/22(火) 11:43:53ID:HyMmc4u+EXPERiENCE strikes back with a great release ...
Codewarrior for Nintendo DS 2.0,
The Best solution for Development on this handheld console.
It provides an IDE and a cross-compiler.
It's the latest version.
0280192
2006/08/23(水) 00:54:02ID:d5xAIo2F周りに詳しい人いないし、うpしてみます。
ttp://gamdev.org/up/img/7235.lzh
とりあえず、昨日までdualisで落ちていたんですが、落ちなくなりました。
0281Moonlight
2006/08/23(水) 02:46:26ID:tj4PgmzcDualisで音が出るか知らないのですが、とりあえずデコードができた(ような気がする)ので報告しまーす。
DevKitARMr19aで、oggライブラリはUPしてくださったlibogg7/9.aとlibvorbis7/9.aをそのまま使いました。
main.cから。TransferSound*snd = NULL; snd = IPC->soundData;
を、static TransferSound StaticTransferSound; snd = &StaticTransferSound;
に変更。(IPCサウンド処理を飛ばしているだけです)
vc.read_func = ovs_read;
とかを、ov_callbacks vc = {ovs_read,ovs_seek,ovs_close,ovs_tell};
に変更。(多分関係ないです)
if( snd->data[ 15 ].len == 0 ){
の前の行に、snd->data[ 15 ].len=0;
を追加。(IPCサウンド再生完了を待たないだけです)
次、ovstream.cの変更。
if( (readseek + readsize) >= pStream->srcsize ) readsize -= (readseek - pStream->srcsize); // 詰めました。
を、if( (readseek + readsize) > pStream->srcsize ) readsize=pStream->srcsize-readseek;
に変更。
case SEEK_END: seek = pStream->srcsize + offset; break;
を、case SEEK_END: seek=pStream->srcsize-offset; break;
に変更。
で、for(idx=0;idx<read/4;idx+=2) iprintf( "%04x", ((u16*)buffer)[idx]); でそれっぽい波形がでたので大丈夫かも。(音出ししてないので自信がないw
ちょっと気になったのは、IPCにreadではなくBUFFER_SIZEを渡していますが、oggライブラリは常に要求した分だけデコードしてくれる訳じゃないので注意です。BUFFER_SIZEを超えないだけで少ないことはあります。(というか基本的にてきとーなサイズを返してくるみたいです)
いちお、動いた(かもしれない)ファイルをアップしておきます。参考になればいいのですが…。
http://mdxonlinemirror.dyndns.org/oggtest200608230244.zip
0282名前は開発中のものです。
2006/08/23(水) 13:21:58ID:Ge0DwE+6>作りたいゲームのねたが無い
スーパーカード用のNDSプログラムを
M3上で強引に動かすSCエミュレーター
0283名前は開発中のものです。
2006/08/23(水) 18:42:26ID:M/2dONiCM3は糞だから困るね
0284Moonlight
2006/08/23(水) 21:13:25ID:tj4PgmzcSDカードや拡張メモリを使っていなければ、たぶん同じROMファイルがSTARTボタンで起動すると思います。
いまのところhomebrewで拡張メモリを使っているのはMoonShellだけなので問題はファイルシステムですね。
ちなみに、M3ブートローダーを付ければAボタンでも起動できるようになるはず。
SCはローダー無しでお手軽起動するのはいいのですが、メモリ周りをちゃんと初期化してくれなかったりレジスタが使いっぱなしだったりするので、注意が必要です。
特にARM7のDMAレジスタや、ARM9のCP15などは手動で初期化するように心掛けないとすぐSCで動かなくなります。
といってもSCの方が起動するまでの手順が少ないので一長一短ですね。
って話がずれましたが、SCで動くROMファイルならM3でも動くはずです。
0285192
2006/08/23(水) 23:02:57ID:d5xAIo2F確信犯ですが添削ありがとうございます。
ARM9のメインループでブチブチながら再生できることができました。
TransferSound* の割り付けを勘違いしていたことが大きな原因でした。
swiWaitForVBlank で待って、バッファいっこで鳴らしているので、割り込みとかに処理を移せばモノになりそうな気がします。
# 割り込みはGBAスレとかでみかけはしたので
あと、ARM7側からサウンドの再生完了をARM9に伝えることってできないんですかね?
IPCは、9→7への一方通行っぽいように思うんですが。
ちなみに実機でしか鳴りませんでした。
0286Moonlight
2006/08/24(木) 01:25:52ID:mWWi4ejnおめでとうございますー。
IPCですが、共有メモリでどちらからどちらへという決まりはありません。
Windowsでいうところのスレッド間衝突(メモリコンフリクト)さえ気を付ければ、どちらから書いても即反映されます。
ARM7でサウンド再生完了ってどうやって取得するんでしたっけ。SOUND_CRのBIT15とかを見ていればいいのかも。
いわゆる「サウンド再生完了割り込み」ってのは(多分)存在しません。
TIMER_xで同じ周期を設定すればそっちで割り込みは起こせます。
ちなみに、MoonShellのソースの、ipc3.hを見ていただければわかると思いますが、勝手に拡張すればOK。
容量が少ないのでサウンドバッファを丸々とかは無理だと思います。
がんばってくださいね。では。
0287Moonlight
2006/08/24(木) 15:37:37ID:mWWi4ejnごめん適当なこと書いた!
SCはSC用ブートローダーがくっついてるので、それを取り外してからM3用ブートローダーを付けなきゃダメでした。
ローダー無しで起動するのはSC/M3以外でした。
SC用とM3用は同じサイズ(先頭512byte)なので、取り外さなくても先頭512byteを置き換えるだけでも大丈夫です。
適当なこと言ってすいません。
0288名前は開発中のものです。
2006/08/26(土) 02:32:00ID:8D5laUkMDPGTOOL1.0では変換できて、1.1では変換できないようです
エラーメッセージ
WMV3 / Windows Media Video 9
ファイルの詳細
640x480 24Bit Windows Media Video 9 30.00fps 976.00kb/s
Windows Media Audio 9.1 44.10kHz 16Bit 2ch 48.02kb/s
[WindowsMedia] 00:09:21 (561.00sec) / 71,573,478Bytes
0289192
2006/08/26(土) 17:12:41ID:EAsOCuvpなるほど。libndsに書かれてるIPCのTransferSound*はポインタだからその先のデータに同期情報を持たせても意味がないんですね。
MoonShell関連のソースは読ませていただいています。勉強になります。
ただ、膨大なので動きを追うにはまだまだ読めていない状態です。
純粋にWavのストリーム再生だけのソース、とかあればとわがままを思ってみたり。
毎度の進捗としては、割り込み周りの情報を追いながらあちこちいじってます。
プチプチ、なくなんねぇかなぁ。
0290Moonlight
2006/08/26(土) 21:39:27ID:Md8I/quvTransferSoundはIPC構造体の一部なので、ぶっちゃけ独自でサウンド再生するなら無くしちゃっても大丈夫です。1からIPCを作ってみるのも理解促進かもです。
正規メーカーなら変えちゃだめかもしれませんが、私たちは関係ないので(笑
ちなみに、前も書きましたがMoonShellのストリームPCM再生はプチノイズ有りなので、参考にしないで。というか独自開拓してむしろ教えてほしいです。(苦笑
おまへの都合なんざどーだっていいんじゃサンプルよこせいえー。ってのも可。
無圧縮16bit2chPCM再生サンプルソースという感じで必要だったら言ってくださいね。ではー。
0291Moonlight
2006/08/27(日) 03:01:30ID:HMcpH5bwお詫びにストリームPCM再生をごちゃっと色々作ってアップしました。
宜しく御査収下さい。
0292名前は開発中のものです。
2006/08/27(日) 20:26:06ID:2lrmMVPV0293Moonlight
2006/08/27(日) 20:42:25ID:HMcpH5bwnds-examples-20060621に入ってるGraphics/2D/16bit_color_bmpじゃだめ?
0294名前は開発中のものです。
2006/08/27(日) 21:02:43ID:2lrmMVPVそれでOKです。ありがとうございます
0295名前は開発中のものです。
2006/08/28(月) 05:46:43ID:SjpAEkkH日本じゃこの手の開発誰もしないのは何故?
0296名前は開発中のものです。
2006/08/28(月) 12:12:39ID:8m9sThIq誰かが作り始めたら、新バージョンマダ〜?と言う奴ばっかり。
0297名前は開発中のものです。
2006/08/28(月) 16:32:50ID:SjpAEkkH1行目はともかく2行目について質問があるんだが・・・
『他の奴』に一体何を求めてるんだオマイは?
0298Moonlight
2006/08/28(月) 16:41:48ID:ihhROeC1まず自分で作り始めてみるが吉かも。(できるかどうかは後で考えればいいとか思ってる(笑
もしできればフロンティア(=孤独w)になれるかもヨ。
0299名前は開発中のものです。
2006/08/28(月) 23:17:39ID:AMPXn7n5じゃぁ、エロゲーコンバータ作ってくれ
任せたぞ
0300192
2006/08/28(月) 23:49:00ID:OA584+k4ttp://gamdev.org/up/img/7345.lzh
どんなデータ使っても、ぷちぷちだらけ→綺麗になっていきます。
レンダリングしていくとパフォーマンスあわせてくれるんでしょうか?
>>291
チャンネルひとつってモノラルだったんですね。
なんかボケてたのかステレオのデータ使ってました。
あと、こんなトピックがありました。
http://forum.gbadev.org/viewtopic.php?t=10778
0301Moonlight
2006/08/29(火) 02:58:26ID:E7nNg1D8ARM7ソースをざっと見た感じでは、やっぱり割り込みが原因だと思います。以下Timer1をPCMに使ってるとして。
FIFOを使っているようですが、現在libndsの割り込みハンドラは再入禁止コードなので、たとえばVsync割り込み中にTimer1割り込みが発生したりするとダメです。
Vsync割り込み発生->割り込みハンドラ開始->Vsyncユーザーコード->割り込みハンドラ終了->割り込みハンドラ開始->Timer1ユーザーコード->割り込みハンドラ終了
という感じになったとして、Vsync割り込みが完了する前にTimer1割り込みが発生すると、VsyncとTimer1が重なっている時間だけ、Timer1割り込みの実行が遅れます。
サウンドバッファの再生が完了しても次が開始されない時間がプチノイズになります。Timer1の周期が変わる訳じゃないので、そのバッファは再生が終わる前に次に進んでしまいます。
周期的にもVsyncとTimer1は同期していないと思うので、たとえば数秒プチノイズが入り、数分後に数秒プチノイズが入る、というような感じで。
で。解決方法は思いつくのは2つ。ひとつは、多重割り込みを許可する割り込みハンドラを書いて、Timer1割り込み実行中だけ多重割り込みを許可しない、という方法です。
ただこの方法も、割り込みハンドラが割り込み要因を判定する間は多重割り込みできないので、極まれに周期的なノイズが入ります。聞き取れませんけどね。気になる人は気になるということで。
確か、PowerLEDのグラデーションをしたときに、PWM用Timerが秒間1万回、PCM用Timerが秒間100回くらいで動作したので、普通は大丈夫だと思います。
0302Moonlight
2006/08/29(火) 02:59:39ID:E7nNg1D8要するにストリームPCM再生はTimer1割り込み発生からサウンド再生までの時間が(1バッファ時間以内であれば)遅れたとしても、厳密に一定であればいい話です。
なので、VCOUNTでVSYNCの発生を計算したり、FIFOのEMPTYフラグをずっと見ていたりすれば、Timer1割り込みは一定間隔で呼ばれることになります。
個人的にはIPC内容(タッチパネルとか時計とか)の更新は、FIFOなりIPC_SYNCなりを使って、ARM9から更新要求出して、ARM7でポーリングして受け取って更新して、その間ARM9はポーリングで待つっていうのが一番確実かなーと思いました。
そうそう余談ですが、これはDevKitProとlibndsのバージョンに依存するのですが、IRQモードで動く割り込みハンドラ(たぶん再入不可版はみんな)は、スタック領域もIRQ用に切り替わっているので極めて少量しか使えません。
今年初め頃に調べたときは256byteでした。いまはわかりませんが…。
ARM9のFIFO割り込みでoggストリームのデコードをしているみたいですが、ちょっと危ないかも〜と思いました。
もっとも、IRQモードからユーザーモードに移行しても今度はmallocに潰されたりするんですけどね。(笑
長文&読みづらい文章で申し訳ないです。参考になれば幸いですー。
0303192
2006/08/31(木) 07:57:12ID:3erodKoV・・・あんま変化ない。
むぅぅ。
0304Moonlight
2006/08/31(木) 14:26:24ID:rFaKnR6Rいま暇なのでもうちょっと見直してみようと思います。なんでなんだろう。謎だー。
0305Moonlight
2006/08/31(木) 15:25:45ID:rFaKnR6Rもし、リングバッファをARM9でmallocしているなら、なのですが、メモリの設定をしていますか?
ご存じの通り、NDSには2つのCPUがあって、それらが協調して動いているのですが、(たぶん標準のブートストラップは)メモリの調停機能がARM9優先になっていたと思いおます。
ためしに、以下のコードを入れて、VRAMの初期化直後にでも呼んでみてもらえますか。
#define _REG_WAIT_CR (*(vuint16*)0x04000204)
static inline void SetARM9_REG_WaitCR(void){
u16 bw=_REG_WAIT_CR;
bw&=BIT8 | BIT9 | BIT10 | BIT12 | BIT13;
bw|=2 << 0; // 0-1 RAM-region access cycle control 0..3=10,8,6,18 cycles def.0
bw|=0 << 2; // 2-3 ROM 1st access cycle control 0..3=10,8,6,18 cycles def.0
bw|=0 << 4; // 4 ROM 2nd access cycle control 0..1=6,4 cycles def.0
bw|=0 << 5; // 5-6 PHI-terminal output control 0..3=Lowlevel, 4.19MHz, 8.38MHZ, 16.76MHz clock output def.0
bw|=0 << 7; // 7 Cartridge access right 0=ARM9, 1=ARM7 def.0
bw|=0 << 11; // 11 Card access right 0=ARM9, 1=ARM7 def.1
bw|=1 << 14; // 14 Main Memory Interface mode 0=Asychronous (prohibited!), 1=Synchronous def.1
bw|=1 << 15; // 15 Main Memory priority 0=ARM9 priority, 1=ARM7 priority def.0
_REG_WAIT_CR=bw;
}
#undef _REG_WAIT_CR
自分用なので冗長ですが、関数を呼ばずに直接一行だけ
REG_WAIT_CR = (REG_WAIT_CR & (BIT8 | BIT9 | BIT10 | BIT12 | BIT13)) | (2 << 0) | (1 << 14) | (1 << 15);
と書いても大丈夫だと思います。
ARM7内部メモリ(通称ARM7/IWRAM)を使うなら問題ないのですが、4MByteのメインメモリをARM7とARM9で同時にアクセスすると、ARM7が待たされてしまいます。
BIT15を立てると、同時アクセスでARM9が待たされることになるので、デコード処理が遅くなりますがプチノイズが乗るよりはましという感じで、私はARM7優先にしています。
0306名前は開発中のものです。
2006/08/31(木) 16:23:47ID:mVy695Ds今日はとりあえず2D描画やってみたさ。2DはGBAとあんまり変わんないですね。でも速い!
とりあえず初DSプログラム記念のスクショ ttp://gamdev.org/up/img/7399.png
次はどっち方面いじろうかなー
0307名前は開発中のものです。
2006/08/31(木) 16:29:21ID:OMe+MWnUぶつ森の家具リスト作ってた人か
0308名前は開発中のものです。
2006/08/31(木) 16:57:01ID:mVy695Dsそーいや一月後にポケモソ発売だからポケモソデータベースとか作ったら便利かもなー。
でもDSで作っちゃうと同時に使えなくなるからGBAで作った方がイイな...
0309名前は開発中のものです。
2006/08/31(木) 22:12:35ID:vO+hnB+1レジューム最高!ブックマーク超便利なのにー。ぐすん、ぐすん。
■ このスレッドは過去ログ倉庫に格納されています