トップページgamedev
984コメント379KB

NintendoDS(NDS)非公式開発 Part1

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2005/04/18(月) 08:29:22ID:LMyYYz9X
NDSで何やら作ってみようという人の為のスレ。ライセンス不要。
初心者歓迎。質問歓迎。英語苦手な人歓迎。冷やかし歓迎。ネカマ歓迎。

資料、リンク等

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/

0216名前は開発中のものです。2006/08/05(土) 16:10:36ID:63ZUPrMH
ハードなんですれ違いがもしれんがUSBのキーボードや外付けHDDとかつなげるようにして欲しい
0217名前は開発中のものです。2006/08/05(土) 16:34:16ID:ThRSjFwo
>>216
インターフェイスは??

PSPなら普通のUSBがあるが
0218名前は開発中のものです。2006/08/05(土) 16:50:31ID:APzy0J3I
>>215=217
0219名前は開発中のものです。2006/08/05(土) 21:12:25ID:2FB+F25i
>>213
libpngを落としてきたけど、難しそうだ。
最低限ファイル名orポインタとか関数に渡せば、画像が取り出せれるといいんだけどなぁ〜
0220Moonlight2006/08/05(土) 23:28:48ID:IINTof3Z
>>219
純正libpngが難しければ、MoonShellのpngプラグインのソースからライブラリだけ引っこ抜いたら簡単かもです。
置換で_consolePrintfをconsolePrintfに変えたりとか、そういう作業は必要ですが。
0221名前は開発中のものです。2006/08/06(日) 13:43:10ID:dJkOtY4P
ゲーム製作技術板なのにViewer希望ばかりか藁
0222名前は開発中のものです。2006/08/06(日) 15:44:01ID:HEBinSu5
自作のプログラムをネット等で公開する場合
実行可能形式だけを配布するのは問題なし?
GPLなライブラリとか使ってたらソース公開必須?
実行形式のみ配布して、任○堂からクレーム付けられる可能性は?

今後の為に知識として知っておきたい。
0223名前は開発中のものです。2006/08/06(日) 16:16:55ID:ZtXOiPj6
>>222
何を言っているんだお前は
0224名前は開発中のものです。2006/08/07(月) 04:49:24ID:R/kak1DT
>任○堂からクレーム付けられる可能性
ライセンス違反といえなくもないので
ありえなくもない。

かつては、スーファミのSM調教師瞳ですら
任天堂の指令により制作者が逮捕されていた。
02251922006/08/07(月) 20:00:10ID:DnGCjQop
せっかくABXYボタンあるので、アケ版DDRが新作出てるし、BMSプレイヤとかどうだろう?
とか思った。
コナミは嫌われますか?
0226名前は開発中のものです。2006/08/07(月) 20:56:05ID:Ic5RSCDN
とりあえず作ってみれ
0227名前は開発中のものです。2006/08/08(火) 23:18:37ID:/ly5By2d
どんなゲームがやりたいですか?
0228名前は開発中のものです。2006/08/09(水) 02:02:49ID:y6tILUJU
>>227
偽春菜
0229名前は開発中のものです。2006/08/09(水) 09:51:37ID:wvfqQcJD
>>216
IS-NITRO-UICがUSB clientだけじゃなくってhostにもなればいいのにね。
0230名前は開発中のものです。2006/08/09(水) 12:39:26ID:V6L1h+27
ブラウザがほしい
純正のDSブラウザは遅いからなぁ
携帯サイト専用ブラウザでもいいから誰か作ってくれないですかねぇ
0231名前は開発中のものです。2006/08/09(水) 13:39:50ID:f1XrJuMC
>>230
クロックうp
0232名前は開発中のものです。2006/08/10(木) 11:27:32ID:eReYGMjp
クロックアップでどれだけ改善されるんだろうか
DSブラウザの為に本体改造のリスクかぁ
ちと悩むなぁ
0233名前は開発中のものです。2006/08/10(木) 18:33:02ID:niI4ueWm
当日に間に合うかわからんが、DS用の簡易カタログビューア作ってる

カタログの内容を全部携帯機に入れるんじゃなくて、
サークルチェック結果だけで良いと思うんだ

というコンセプトで作ってるんだがどうなることやら
0234名前は開発中のものです。2006/08/10(木) 18:36:19ID:niI4ueWm
当日って明日だった(笑)

とりあえず3日目に間に合えば良いと思うんだ

無理っぽいけど
0235名前は開発中のものです。2006/08/10(木) 21:05:35ID:I9GN2H/u
ゲームじゃないなら板違い
0236名前は開発中のものです。2006/08/10(木) 22:32:57ID:zR3/h3yd
DSで自分を誘導するというゲーム性が
0237名前は開発中のものです。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
>>233
大期待してる
洩れは紙で済ましてるが

>>237
そこは基地外の場所なので
高尚なDSプログラム話にはふさわしくないw
0239名前は開発中のものです。2006/08/11(金) 21:52:33ID:4YheNsYP
devkitpro ARMSをインストールまではしたけど、それからの使い方がさっぱりわからん。

頼む誰か。
理解する取っ掛かりがほしいので、簡単なサンプルプログラムのmakeまでを
解説している日本語のサイトを教えてくれ。
0240Moonlight2006/08/11(金) 22:58:14ID:9yKR/DgJ
勝手にdevkitProUpdater-1.3.5.exeをオプションそのままでインストールと決め付けました。
[C:\devkitPro\examples\nds\templates\combined]フォルダに入って、makeと打てばOKです。
最初からコンパイル済みなので気になるようなら、make cleanとすればコンパイル済みバイナリは全部消えます。(なんで最初からコンパイルしてあるんだろう?)
サンプルに入ってる中でARM7とARM9がまとまっているのはcombinedしかないし、これが一番単純なのでおすすめです。
コマンドプロンプトの使い方は当然知っているとシンジテル…
0241名前は開発中のものです。2006/08/11(金) 23:44:13ID:4YheNsYP
>>240
ありがとう。
makeを実行したら色々なファイルが作られるのを確認しました。
NDSにWifiでndsファイルを送信したら、崩れたロゴが出て固まりましたが・・・。
このサンプルプログラムを動かすのにはFlashROMが必要なのでしょうか?
(実は持っていない)

Nintendo DS - Wireless Multiboot
http://users.belgacom.net/bn967347/

このサイトにあったサンプルのndsファイルは実行できたので、とりあえず
開発環境と、プログラムを実行させる環境は整ったので、後は自分の
努力しだいと判断します。
さて、今からC言語の勉強を始めます。(マテ

取っ掛かりができましたので、回答してくださって感謝します。
ありがとうございました。
0242名前は開発中のものです。2006/08/12(土) 00:03:09ID:Eayw3C5n
マジで今からC言語を勉強するなら悪いことは言わない、やめとけ
0243名前は開発中のものです。2006/08/12(土) 00:10:55ID:h3w8Q1SX
ご助言感謝。

でも、C言語とC++はどちらにしても今から勉強するんですよ。
ナニモノモ オレヲ トメルコトハ デキナイ。
ついでにNDSでの開発も覚えようかという訳です。
0244名前は開発中のものです。2006/08/12(土) 00:48:30ID:k4g8gfad
NDSじゃなくてGBAからはじめた方が無難
というかGBにしておけ
0245名前は開発中のものです。2006/08/12(土) 00:57:41ID:sfNXM7kP
>>243
大丈夫
キミの能力がブレーキになるYO!
0246名前は開発中のものです。2006/08/12(土) 01:12:30ID:S5X708ZL
応援するお^^
0247名前は開発中のものです。2006/08/12(土) 01:12:32ID:h3w8Q1SX
>>244
そうは思ったんだけどね。
NDSなら手持ちの物で環境が整えられるんで、これで行きます。

>>245
ダカラ ココロノ ブレーキハ カケラレナイ!
0248名前は開発中のものです。2006/08/12(土) 01:24:09ID:h3w8Q1SX
>>246
ガンバル!
アリガトウ!
0249Moonlight2006/08/12(土) 01:25:52ID:OVMMuGXv
うろ覚えで。Wifiでhomebrewを起動する方法は、(私が知ってるのは)2種類あったと思います。
1・F2AなどのFLASHタイプのGBAカートに書き込んで、WifiMeからGBAカートを経由して起動する。
2・FlashMeする。

1はGBAROM領域からメインメモリにコピーするブートローダーが必要だったような気がします。たぶんSC/M3とかは不可。
2ならFlashMeがRSA認証を潰したので、未認証(要するにhomebrew)のROMイメージがそのまま起動できたと思います。

懐かしー。うろ覚えなので間違ってたらごめんなさい。
0250名前は開発中のものです。2006/08/12(土) 01:41:37ID:rAKEFzkn
NDSkybookのセーブ機能まだー?
02511292006/08/12(土) 05:16:09ID:d02VPBZk
>>250
いまいち、「コレダ!」っていうセーブ先が決まらず放置に・・・
blogでリクエストもらったので、
とりあえず週末中に、日本語ファイル名対応版をリリースします。
02522332006/08/12(土) 12:36:03ID:/B751hXg
http://sports2.2ch.net/test/read.cgi/comiket/1060629408/
ゲームでない以上、確かにスレ違いだと思うので、こちらに移動させていただきました。
0253名前は開発中のものです。2006/08/14(月) 15:12:18ID:kqJN+BQk
>>241
基本的にwifi経由の実行はRSA認証がかかっているためhomebrewは実行できない。
ただ、認証がかかっているのはARM7とARM9のベースコード部分だけで、オーバレイ部分にはない。
MARIWOかなんかのコードがオーバレイ部分に飛んでいるものがあって、これを利用して
素のDSでhomebrewが実行できた…………………………………………………………時期もあった。

ある時期のDSから上記のMARIWOには対策が打たれて実行できなくなった。んで、FlashMeすればいいんだけど、
FlashMeするには結局ハードへ若干の改造が必要&失敗するとひどい目に遭うんで、結局PassMe系と比べた
利点がなくなって流行らなくなって現在に至る。

んじゃなかったかな。やっぱりうろおぼえスマン。
0254名前は開発中のものです。2006/08/14(月) 15:20:46ID:kqJN+BQk
ちなみに、belgacomにあるサンプルは、単に「正式にRSAキーを取った」wifi配布ゲームをキャプチャしただけなんで、
最近の対策済みDSでも実行できる。
0255名前は開発中のものです。2006/08/14(月) 15:43:44ID:3DqFE+/1
>>251
セーブ機能マジで期待しております。夏ばてなどなされないようお体にはお気を付け下さい。
0256名前は開発中のものです。2006/08/14(月) 21:47:50ID:TUBmIhpR
テストで作ったプログラムが、
SuperCARDでは起動して、M3だとロード画面で止まってしまう。

M3でプログラム動かす時は、何か手順踏まないと動作しないの?
0257名前は開発中のものです。2006/08/15(火) 00:37:43ID:mCVrhKr9
>>256
クライアント通す通さないぐらいしかチェックポイントが見当たらんが・・・。

liboggとlibvorbisをビルドしてみた。
サウンド周りってARM7かARM9どっちでビルドすればいいんだ?
横着してサウンド周りの資料やサンプルを見ずにビルドだけしたんだがorz
0258Moonlight2006/08/15(火) 01:59:28ID:mQlnaCaz
>>256
基本的に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
0259Moonlight2006/08/15(火) 02:01:52ID:mQlnaCaz
>>257
ストリームPCM再生ってどうやるんでしょうか。
どちらにしても、ARM7でまともに使えるメモリは64kbyteしかないし33MHzはデコードに非力すぎるので、ARM9で展開、ポインタか共有メモリ経由でARM7に渡して再生、という感じになると思います。
びっくりしたのですが、DevKitARMr18(r19?)以降は、C++サポートをARM7側にも拡張したらしく、ARM7メモリが残り5kbyteくらいしか使えなくなっています。
まともに組むならDevKitARMr17がオススメです。
MoonShellのストリーム再生はいまだにプチノイズが乗るのですよ…だから参考にしないで(笑
ぜひぜひ信頼性の高い方式を開拓してほしいです。そしてソースプリーズ。(笑
0260名前は開発中のものです。2006/08/15(火) 05:53:55ID:LCNocl7z
トラックバック:http://game9.2ch.net/test/read.cgi/gameurawaza/1116614246/
0261名前は開発中のものです。2006/08/15(火) 08:22:30ID:t+707qIL
>>258
現在試した方法は、
・SuperCard miniSD
devkitproでコンパイルしたファイルをそのままコピーして実行可能。
・M3
ある自作プログラムが、Devkitproでコンパイルしたファイルそのままで
Aボタン・スタートボタン共に動作可能。但し動かない時もあり?
別の自作プログラムは、Aボタン・スタートボタン共に動作せず。

ブートローダ付けて試してみようと思ったけど、
今から仕事なんで帰ってきてからだorz
0262名前は開発中のものです。2006/08/15(火) 13:44:27ID:Z/PyVByn
M3は糞だから対応しなくても問題ないよ
0263Moonlight2006/08/15(火) 16:44:35ID:mQlnaCaz
>>261
M3でもローダ無しでAボタン起動できる可能性があるということでしょうか。
むぅ。改めて調べてみる必要がありそうです。
私が調べたのはずいぶん前なので、ファームの更新でhomebrewサポートが強化されているのかもしれませんね。
ファーム書かせろもしくは固定ファイル名起動専用ファーム作れと随分突っついたのですが無碍に断られました。(当たり前(苦笑
0264名前は開発中のものです。2006/08/16(水) 13:35:24ID:mLNsWot8
>>192
>作りたいゲームのねたが無い
moonshellのプラグインフォルダに入れて使える
mp4やdivxファイル再生プラグイン
0265名前は開発中のものです。2006/08/17(木) 15:52:06ID:+BT+gal0
作る際、SC用とM3用の違いというのは
どうやってわけるのだろう。
そして、同じプログラムで両方で動くものと
専用ものでないと動かないものの差は
どこから来るのだろう。



>>192
>作りたいゲームのねたが無い

N Scripter。

帽子屋、活動やめちゃったし
0266名前は開発中のものです。2006/08/17(木) 16:00:34ID:TIHaO9Ud
どっちもゲームじゃねぇYO!
0267名前は開発中のものです。2006/08/17(木) 21:18:14ID:MHdljUvu
>作る際、SC用とM3用の違いというのは
>どうやってわけるのだろう。

ちょっとググったらこんなのが出てきた
ttp://japan.cnet.com/news/media/story/0,2000056023,20203307,00.htm
0268名前は開発中のものです。2006/08/17(木) 21:19:30ID:Iib4HyQh
>>192

じゃあ、アイドルマスターDSをつくってくれ
wi-fiやタッチパネルの特性も活かせる良い媒体だ
0269名前は開発中のものです。2006/08/17(木) 21:19:57ID:UU4Z/G1E
>>265
SCとM3、同じプログラムが動いてくれないと開発が非常に面倒になりそう。
他の奴でも個別修正必要となったら、やってらんね〜

>>258
CFやSDのディスクアクセスは、gba_nds_fat使えば一応SCでもM3でも
プログラム的に互換性保てるんですよね?
ところで、書き込み不安定な原因って何なんでしょうか?
回避方法は、PCでダミーファイル作って、それに上書き?
0270Moonlight2006/08/17(木) 21:48:04ID:PHnIFK0a
アダプタごとの違いについての私感。(あくまで私感で)
NDS開発界隈で標準となっているchism氏作gba_nds_fatはFAT互換関数と多数のアダプタ対応とアダプタ自動検出が売りだと思います。
それ自体は素晴らしいのですが、いかんせん最近別のことをしているらしく開発が滞っています。
全てのアダプタを持っていないと自動検出コードは書けないので、新しいアダプタの追加などもできません。

そこで、対応できる範囲を狭めて一つのROMイメージで賄ったのがSaTa.氏です。独自拡張でM3MiniSDやSCSDなどが入っていますが、所持し自分で確認している範囲だと思います。
それとは別に、自動検出を捨て、とにかく多種のアダプタに対応したのが私です。このため、セットアップで(ユーザが)アダプタを選択する必要があります。

どちらが良いとは言えませんが、できるだけ同じROMが使えるのがベターですよね。セットアップ面倒くさいし。

また、アダプタ毎に違う部分はディスクアクセスだけではなく、拡張メモリ領域や起動方法が異なります。
ぶっちゃけ全てに対応するのは無理。(苦笑

>他の奴でも個別修正必要となったら、やってらんね〜

やってらんね〜〜〜〜。です。(苦笑
0271Moonlight2006/08/17(木) 22:07:13ID:PHnIFK0a
>>269

>ところで、書き込み不安定な原因って何なんでしょうか?
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
>>271
うへぇ。クラスタリンクまで管理せんとダメっすか〜
FAT16のみの対応でいいから、まともに書き込みできる奴が欲しいですね。
まぁ、自動判別できなくても、アダプタ毎に組み込むgba_nda_fatが違ったとしても、
まともに動くのが欲しいっす。
あ〜、FAT16って最大2Gまででしったっけ?NDSで2Gも必要?


書き込みに不安があると、ゲームでもアプリでもデータ保存に困ります。
書き込み失敗して、
「おきのどくですが、ぼうけんのしょはきえてしまいました」
と出て、orz な状態で呆然とするのは勘弁っすw
0273名前は開発中のものです。2006/08/19(土) 21:34:55ID:Whiy4IfG
ReinMoonのインストールフォルダを、MoonShellと同じフォルダに統合して欲しいです。

524,AFFJ,Final Fantasy 3,ファイナルファンタジー3,0x0000,cd1000,
02741922006/08/19(土) 21:36:37ID:Qax6Q72R
諸用で時間が取れず。

>>264
パワーが心配な気が・・・。

>>265
やってみたい気もする。

>>268
トレーニング(だっけ?)の練習クローンぐらいは考えたこともあった。
オリジナルを一回しか完結させてないので、その辺が疎い。
パイタッチって聞くけどなに? って感じなのでorz

何につけても、ogg再生からこつこつやっていくと行き着きそうな気もします。
がんばります。
0275名前は開発中のものです。2006/08/21(月) 11:23:07ID:XEtRrwRi
>moonlight
chism氏がlibfatってやつを開発してるみたいだが試してみた?
0276Moonlight2006/08/21(月) 15:04:59ID:1bPKqePn
>>272
そうですねー。開発が面倒くさくても安定する方がいいですね。
個人的にはFAT16で十分だと思いますが、容量の問題ではなく「FAT32で使っている人も多い」という理由でFAT32コードを切っていません。
MoonShell内蔵FATライブラリはFAT16で最適化してるので(初速の遅い)SDを使うと特に速度が違うと思います。FAT32要らない。(苦笑

>>273
いまから(根本の)インストールフォルダを変えるのはちょっと。チュートリアルとかあるので。
ソースがありますので、文字列置換&再コンパイルだけで変えられます。
これに限らず、自分専用カスタムなどがんがん書き換えて自分の使いやすいように使ってくれればOK。
(私自身も公開用とは違うキー配置バージョンを使っていますし(笑

>>264
192氏の言うとおり「考えるだけ無駄」ってくらい全然無理です。

>>275
alpha版が本当にalphaだったころ(一ヶ月くらい前?)に試しました。文字通りalphaだったので即捨。
最近のは、IRCメインであること、CVSであること、ライブラリ形式であること、新DevKitARM向けであること、などの理由で全くさわっていません。
余談ですが、FatFsはコンパイルが通るところまでいじったのですが、LFN非対応だったのでそのまま放置です。
MoonShellが一段落したので、また色々さわってみたいですね。
02771922006/08/22(火) 02:29:51ID:3eB/98xj
頭ごなしに否定的なレスばかりではアレなので報告&質問。
libogg、libvorbisの最新ソースを拾ってビルド。
あちこち調べながら、ov_open_callbacksが帰ってこずに固まる現象に悩まされております。
# なんでov_open_callbacksかというと、binファイルをメモリブロックとして持っているから

ov_open_callbacksは、悪評が結構あるようで、RC3のものにしろとかいろいろ言われてるけど、今のところどっちもダメ。
ちなみにWindows2000+VisualStudio2005で同じことをすると動く。
スレ違いっぽいがこのあたりに通じている人いませんか?

あと、16チャンネル中、1チャンネルを再生用に占拠すれば意外にストリーミング再生はできるんじゃないかと軽く思ってみたり。
0278Moonlight2006/08/22(火) 03:22:21ID:ifxxTdvS
>>277
音出さないで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+
Metrowerks.CodeWarrior.for.Nintendo.DS.v2.0-EXPERiENCE

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.
02801922006/08/23(水) 00:54:02ID:d5xAIo2F
漏れ一人じゃどうにもなんねぇ気がしてきた。
周りに詳しい人いないし、うpしてみます。
ttp://gamdev.org/up/img/7235.lzh
とりあえず、昨日までdualisで落ちていたんですが、落ちなくなりました。
0281Moonlight2006/08/23(水) 02:46:26ID:tj4Pgmzc
>>280
Dualisで音が出るか知らないのですが、とりあえずデコードができた(ような気がする)ので報告しまーす。
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
>>192
>作りたいゲームのねたが無い
スーパーカード用のNDSプログラムを
M3上で強引に動かすSCエミュレーター
0283名前は開発中のものです。2006/08/23(水) 18:42:26ID:M/2dONiC
>>282
M3は糞だから困るね
0284Moonlight2006/08/23(水) 21:13:25ID:tj4Pgmzc
>>282
SDカードや拡張メモリを使っていなければ、たぶん同じROMファイルがSTARTボタンで起動すると思います。
いまのところhomebrewで拡張メモリを使っているのはMoonShellだけなので問題はファイルシステムですね。
ちなみに、M3ブートローダーを付ければAボタンでも起動できるようになるはず。
SCはローダー無しでお手軽起動するのはいいのですが、メモリ周りをちゃんと初期化してくれなかったりレジスタが使いっぱなしだったりするので、注意が必要です。
特にARM7のDMAレジスタや、ARM9のCP15などは手動で初期化するように心掛けないとすぐSCで動かなくなります。
といってもSCの方が起動するまでの手順が少ないので一長一短ですね。
って話がずれましたが、SCで動くROMファイルならM3でも動くはずです。
02851922006/08/23(水) 23:02:57ID:d5xAIo2F
>>281
確信犯ですが添削ありがとうございます。
ARM9のメインループでブチブチながら再生できることができました。
TransferSound* の割り付けを勘違いしていたことが大きな原因でした。
swiWaitForVBlank で待って、バッファいっこで鳴らしているので、割り込みとかに処理を移せばモノになりそうな気がします。
# 割り込みはGBAスレとかでみかけはしたので

あと、ARM7側からサウンドの再生完了をARM9に伝えることってできないんですかね?
IPCは、9→7への一方通行っぽいように思うんですが。

ちなみに実機でしか鳴りませんでした。
0286Moonlight2006/08/24(木) 01:25:52ID:mWWi4ejn
>>285
おめでとうございますー。
IPCですが、共有メモリでどちらからどちらへという決まりはありません。
Windowsでいうところのスレッド間衝突(メモリコンフリクト)さえ気を付ければ、どちらから書いても即反映されます。
ARM7でサウンド再生完了ってどうやって取得するんでしたっけ。SOUND_CRのBIT15とかを見ていればいいのかも。
いわゆる「サウンド再生完了割り込み」ってのは(多分)存在しません。
TIMER_xで同じ周期を設定すればそっちで割り込みは起こせます。
ちなみに、MoonShellのソースの、ipc3.hを見ていただければわかると思いますが、勝手に拡張すればOK。
容量が少ないのでサウンドバッファを丸々とかは無理だと思います。
がんばってくださいね。では。
0287Moonlight2006/08/24(木) 15:37:37ID:mWWi4ejn
>>282
ごめん適当なこと書いた!
SCはSC用ブートローダーがくっついてるので、それを取り外してからM3用ブートローダーを付けなきゃダメでした。
ローダー無しで起動するのはSC/M3以外でした。
SC用とM3用は同じサイズ(先頭512byte)なので、取り外さなくても先頭512byteを置き換えるだけでも大丈夫です。
適当なこと言ってすいません。
0288名前は開発中のものです。2006/08/26(土) 02:32:00ID:8D5laUkM
ストリーム配信されている動画(wmv)をダウンロードしたんですが、
DPGTOOL1.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
02891922006/08/26(土) 17:12:41ID:EAsOCuvp
>>286
なるほど。libndsに書かれてるIPCのTransferSound*はポインタだからその先のデータに同期情報を持たせても意味がないんですね。
MoonShell関連のソースは読ませていただいています。勉強になります。
ただ、膨大なので動きを追うにはまだまだ読めていない状態です。
純粋にWavのストリーム再生だけのソース、とかあればとわがままを思ってみたり。

毎度の進捗としては、割り込み周りの情報を追いながらあちこちいじってます。
プチプチ、なくなんねぇかなぁ。
0290Moonlight2006/08/26(土) 21:39:27ID:Md8I/quv
>>289
TransferSoundはIPC構造体の一部なので、ぶっちゃけ独自でサウンド再生するなら無くしちゃっても大丈夫です。1からIPCを作ってみるのも理解促進かもです。
正規メーカーなら変えちゃだめかもしれませんが、私たちは関係ないので(笑
ちなみに、前も書きましたがMoonShellのストリームPCM再生はプチノイズ有りなので、参考にしないで。というか独自開拓してむしろ教えてほしいです。(苦笑

おまへの都合なんざどーだっていいんじゃサンプルよこせいえー。ってのも可。
無圧縮16bit2chPCM再生サンプルソースという感じで必要だったら言ってくださいね。ではー。
0291Moonlight2006/08/27(日) 03:01:30ID:HMcpH5bw
ageてしまいました。すいませんっ。
お詫びにストリームPCM再生をごちゃっと色々作ってアップしました。
宜しく御査収下さい。
0292名前は開発中のものです。2006/08/27(日) 20:26:06ID:2lrmMVPV
bmpの表示デモが見つからないんだけど、どこにある?
0293Moonlight2006/08/27(日) 20:42:25ID:HMcpH5bw
>>292
nds-examples-20060621に入ってるGraphics/2D/16bit_color_bmpじゃだめ?
0294名前は開発中のものです。2006/08/27(日) 21:02:43ID:2lrmMVPV
>>293
それでOKです。ありがとうございます
0295名前は開発中のものです。2006/08/28(月) 05:46:43ID:SjpAEkkH
DS用Snes開発が全部止まってて悲しい・・・
日本じゃこの手の開発誰もしないのは何故?
0296名前は開発中のものです。2006/08/28(月) 12:12:39ID:8m9sThIq
めんどくさいから。
誰かが作り始めたら、新バージョンマダ〜?と言う奴ばっかり。
0297名前は開発中のものです。2006/08/28(月) 16:32:50ID:SjpAEkkH
>>296
1行目はともかく2行目について質問があるんだが・・・

『他の奴』に一体何を求めてるんだオマイは?
0298Moonlight2006/08/28(月) 16:41:48ID:ihhROeC1
>>295
まず自分で作り始めてみるが吉かも。(できるかどうかは後で考えればいいとか思ってる(笑
もしできればフロンティア(=孤独w)になれるかもヨ。
0299名前は開発中のものです。2006/08/28(月) 23:17:39ID:AMPXn7n5
>>296
じゃぁ、エロゲーコンバータ作ってくれ
任せたぞ
03001922006/08/28(月) 23:49:00ID:OA584+k4
一応、鳴るようになりました。
ttp://gamdev.org/up/img/7345.lzh
どんなデータ使っても、ぷちぷちだらけ→綺麗になっていきます。
レンダリングしていくとパフォーマンスあわせてくれるんでしょうか?

>>291
チャンネルひとつってモノラルだったんですね。
なんかボケてたのかステレオのデータ使ってました。

あと、こんなトピックがありました。
http://forum.gbadev.org/viewtopic.php?t=10778
0301Moonlight2006/08/29(火) 02:58:26ID:E7nNg1D8
>>300
ARM7ソースをざっと見た感じでは、やっぱり割り込みが原因だと思います。以下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回くらいで動作したので、普通は大丈夫だと思います。
0302Moonlight2006/08/29(火) 02:59:39ID:E7nNg1D8
もひとつは、Timer1割り込み以外の割り込み処理を全てmainループでポーリングする方法です。
要するにストリーム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に潰されたりするんですけどね。(笑

長文&読みづらい文章で申し訳ないです。参考になれば幸いですー。
03031922006/08/31(木) 07:57:12ID:3erodKoV
案2を試したり、リングバッファをトリプルバッファにしてみたりしました。
・・・あんま変化ない。
むぅぅ。
0304Moonlight2006/08/31(木) 14:26:24ID:rFaKnR6R
そうですか…。残念です。割り込みだと思ったのですが当てが外れたみたいです。(笑
いま暇なのでもうちょっと見直してみようと思います。なんでなんだろう。謎だー。
0305Moonlight2006/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
突然DSでプログラム作ってみたくなってマジコン買ってみた。
今日はとりあえず2D描画やってみたさ。2DはGBAとあんまり変わんないですね。でも速い!

とりあえず初DSプログラム記念のスクショ ttp://gamdev.org/up/img/7399.png
次はどっち方面いじろうかなー
0307名前は開発中のものです。2006/08/31(木) 16:29:21ID:OMe+MWnU
>>306
ぶつ森の家具リスト作ってた人か
0308名前は開発中のものです。2006/08/31(木) 16:57:01ID:mVy695Ds
Σ(゚д゚lll)ガーン 一瞬でバレた! ...そりゃ分かるわな

そーいや一月後にポケモソ発売だからポケモソデータベースとか作ったら便利かもなー。
でもDSで作っちゃうと同時に使えなくなるからGBAで作った方がイイな...
0309名前は開発中のものです。2006/08/31(木) 22:12:35ID:vO+hnB+1
いやーん、SupercardでMoonShellが動かなくなる日が来るなんて嫌ー!!
レジューム最高!ブックマーク超便利なのにー。ぐすん、ぐすん。
03101922006/08/31(木) 23:22:37ID:3erodKoV
>>305
バッファはグローバル変数で準備してます。
libvorbisでもcallocが通っていて驚いたのですが、malloc/freeがあるんですね>DS
Windows→ドリキャス/GC(メモリ確保系なし環境)とわたってきたので、変数で確保するのと
alloc系関数で確保することの違いがよくわからないのですが、次はそれでいってみようと思います。

今日はしょんぼり休みなのでコード触りませんorz
0311Moonlight2006/09/01(金) 00:41:40ID:G6nEj0d/
>>309
すいません。ごめんなさい。本当に。
たぶん動くはずなのですが、動かないとメールがすごいので…。
ドライバ自体は入っているので、「動かない前提」でもよろしければこき使ってやってください。
(「動かない」だけじゃどうにもできないんだー!ってのはプログラマ的な考え方なんでしょうね(笑
0312Moonlight2006/09/01(金) 00:44:49ID:G6nEj0d/
>>310
お疲れ様ですー。
そうなんですよ。組み込み系なのにメモり支援があるのはほんとに助かりますよね。

雑談など。ARM9でstaticしてもmallocしてもメインメモリに確保されて、ARM7だと両方ともARM7内部メモリに確保される設定になってます。
ARM9からARM7内部メモリは触れない罠。ずいぶん悩みました(笑

でわでわ。
0313名前は開発中のものです。2006/09/01(金) 21:35:11ID:8rPSQyLY
NitroRom File Systemのライブラリってdevkitproに含まれてないのかなー?
そしてswiDecompressLZSSWramとswiDecompressLZSSVramが動作してくれないよー

探しても情報がなかなか見つからないから、両方とも自分で作っちゃったさ...
嗚呼、車輪の再発明...
0314名前は開発中のものです。2006/09/01(金) 22:41:51ID:JtqgKQGL
うp!うp!
03153132006/09/02(土) 09:06:00ID:s6zzCzVQ
一応うpするけど、テスト用なんで超テキトーだよ?見てしょんぼりするがいい
ttp://gamdev.org/up/img/7427.zip
・lzssdec.cpp  LZSSのデーコード
  gbalzssのソースをちょっと変えただけ。
  1byte単位で書き込みと2byte単位で書き込みの2種の関数が入ってる。
・nitrofs.cpp  NitroROMFileSystemアクセス
  ディレクトリ未対応、コンテンツは全部ルートにぶちこむべし。
  32MBまでROMにしか対応してない。
  ファイルIDが0から始まると仮定してる。ndstoolで作ればイマノトコ大丈夫みたい(?)

32MB以降のROMエリアにアクセスするにはどうすればよいのでしょう...?
■ このスレッドは過去ログ倉庫に格納されています