トップページgamedev
990コメント372KB

NintendoDS(NDS)非公式開発 Part2

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

資料、リンク等
http://nocash.emubase.de/gbatek.htm
http://www.bottledlight.com/ds/index.php/Main/HomePage
http://www.helloworld.jp/~duke/nintendo_ds/

開発環境
http://www.devkitpro.org/
http://sourceforge.net/project/showfiles.php?group_id=114505

関連スレ
ゲームボーイアドバンス(GBA)開発@ゲ製板(避難所)
http://bbs.gamdev.org/test/read.cgi/gamedev/1055111303/
ゲームボーイアドバンス(GBA)非公式開発 Part2
http://pc5.2ch.net/test/read.cgi/gamedev/1099119005/

前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1113780562/
0002名前は開発中のものです。2007/04/06(金) 07:37:28ID:HYYJktDv
0003名前は開発中のものです。2007/04/06(金) 10:00:15ID:SXLSDWz9
おつかれー
0004名前は開発中のものです。2007/04/07(土) 14:53:35ID:+VlUtZQM
前スレ落ちました
以後、こちらで
0005名前は開発中のものです。2007/04/08(日) 02:06:48ID:ecimlsy5
devkitproに入っるサンプルの、16bit_color_bmpとか256_color_bmpに
あるようなイメージデータってどうやって作るの?

IrfanviewでRAW形式で保存してみたら24bitでしか保存できない・・・

適当に見つけたチュートリアル( http://patatersoft.info/manual.html)
見たら、gfx2gbaとhConverter使えって書いてある。
そこで256色BMP用意して、gfx2gba -fsrc test.bmp で出来たtest.cを
hConverterに読み込ませても何もおきない・・・

みんなどうやってイメージデータつくってんのか教えてくんなせ。
0006名前は開発中のものです。2007/04/08(日) 19:28:30ID:ecimlsy5
一部、自己解決した。

gfx2gba test.bmp
で256色のtest.rawとtest.palができたんで、それを使って256色のイメージ
だけは表示できた!
んでも、16bitカラーのイメージデータは作る方法がわからなーい。

とりあえず、256色でいろいろ試してみるわな。
0007名前は開発中のものです。2007/04/08(日) 23:18:21ID:ecimlsy5
16bitカラーの画像も自己解決したんで報告。

http://www.geocities.jp/momoonga/
の、BMP2NDSを使って、16bitカラー画像の表示もいけました。

あざーす!
0008名前は開発中のものです。2007/04/12(木) 01:25:38ID:Cr+2/GKK
開発環境がハードルたっけぇ
開発に入る前にコンパイル時点でつまづいたよ・・・
0009名前は開発中のものです。2007/04/12(木) 06:13:50ID:Jsfs0BwG
>>8
exampleの1個をProgrammerNotepadで開いてmake(Alt+1だっけ)するだけで要領はつかめんかな?
VC++のほうが、編集→ビルドの流れは楽だけど。
makefileも直すところが判れば流用しやすいし。
0010名前は開発中のものです。2007/04/12(木) 08:25:58ID:SeFFf7Ol
カメレオンUSB DS-RAMアダプター
http://optimize.ath.cx/NDS/cusbram.html
これ使って開発してる人いる?購入検討してんだけど、使い勝手とか聞きたい。
0011名前は開発中のものです。2007/04/12(木) 12:04:53ID:LqS5raGs
DSのVRAMは8bitではアクセスできないんですね〜
http://www.bottledlight.com/ds/index.php/Memory/Layout
見るとWidth / modesが16 / 16,32となってるし

DesmuMEでは動くのに実機じゃ動かないのでちょっとはまりました
no$gbaはこの辺もちゃんとエミュレートしてるようですね

256色パレットモードだと2ドットずつ処理しないといけないのが面倒
0012名前は開発中のものです。2007/04/12(木) 12:33:09ID:0IVewgP9
>>10
コマンド一発でGBAスロットに入れたRAMにNDSファイルを転送できる。
SD出し入れ、ファイル転送などから解放される。
リセットを配線すれば(俺はまだしてない),転送+リセット起動ができる。(DS側操作不要)
FlashMeは必須です。

batとかうまく作ればコンパイル完了後にNDS転送+リセット起動までできることになります。
デメリットはlibfatでSlot1,Slot2のメディアにアクセスできないところか。
Slot2は言うまでもなくSlot1の初期化が通らない。

ちなみにlibfat使ったデバッグだけであればDeSmuMEなどで可能。
実機じゃないと再現できないグラフィックとかWiFiなどやらない限りは不要と思う。
まだ使った事ないが同じ事するならDS-Xtremeあたりがよさそうな気がする。
0013102007/04/12(木) 18:24:32ID:SeFFf7Ol
>>12
devkit r20+libfat(DLDI)組み込んでエミュで動かそうとすると、自作プログラムはfatInitDefault()の部分で大抵コケてる。
r19+gba_nds_fatの時は、dualisでGBAMPと認識させてファイルアクセスしてた。
DLDI使っててもDeSmuME(wpも?)で動くようだったらいいんだけど...って試したらやっぱりコケた。
ところでDeSmuMEとかってDLDIに対応出来るん?

DS-XtermeはUSB接続だからSDカードとか抜き差しする必要がないから、少しは楽になるかもしれない。
ただ、DS起動させる時間が鬱陶しい。そして高い...
エミュだと即起動なんだけどね...

あと、DS-RAMアダプターでfgetcとかするの面倒そうなヤカン
0014名前は開発中のものです。2007/04/13(金) 09:23:07ID:Ifok8dwe
dldiを使ったサンプルROMとかないかな〜っと
0015122007/04/15(日) 07:53:20ID:jqid1ubY
>>13
>devkit r20+libfat(DLDI)
同じ環境だなぁ。
DeSmuME は ver 0.5.0
DLDIはデフォルトのまま(空)にしておいて起動してみた?
DLDIがなくてもGBAMPとして動作するはず。

動かないっていうソースとバイナリくれたら試してもいいが。
0016102007/04/16(月) 07:28:54ID:SJmsxErn
>>15
あ〜、DLDIいつも組み込んでる。
組み込まなかったらエミュで起動はしたけど、fgetcとかで正しい値返してこないね。
よくわからん
0017122007/04/16(月) 09:28:52ID:1IWCo6WN
>>16
DLDIドライバが悪さしてたか。
あとは問題のソース、読ませたファイル、fgetcの戻り値、errnoとか
0018102007/04/16(月) 23:58:30ID:SJmsxErn
>>17
ソースは適当にこんなの。test.txtの中身は半角英数適当に。
全部255が帰ってくるわ。(DeSmuME 0.60)
根本的に何か間違ってるような気がする。
Live2chだと改行大杉でエラーになっちゃうんで、該当部分だけ。適当に補完してくんろ。

if ( !fatInitDefault() ) { iprintf("init error"); while(1); }

FILE *fp;
if ( (fp=fopen("test.txt","r"))==NULL ) { iprintf("file open error\n"); while(1); }
int i;
char ch;
for (i=0;i<10;i++) {
ch=fgetc(fp);
iprintf("%d ",ch); }

fclose(fp);

0019名前は開発中のものです。2007/04/17(火) 07:36:56ID:jhZOjVgZ
>>18
同じくDeSmuMEでlibfatが使えないものです
fopen( )はできるんだけどfgets( )はNULLが返るしfreadも0バイトしか読み込めない
SDカードで実機テストは効率悪いです。
エミュのバージョン0.6.0と0.5.0でも試したけどだめでした
0020122007/04/17(火) 10:29:15ID:IHSQkBqI
>>18
確かにfread(),fgetc()とかは動きませんでした。
dirnext()は動作しているので動いているものと勘違いしていました。
というわけで実機以外ダメということになりました。
0021名前は開発中のものです。2007/04/17(火) 12:51:47ID:jhZOjVgZ
>>20
ディレクトリは読めて表示も出来るんですがね
誰かエミュ用のDLDIを頼む
0022名前は開発中のものです。2007/04/17(火) 13:27:01ID:3bpgwEwp
>>18
つttp://amponzi.googlepages.com/
0023122007/04/17(火) 13:53:20ID:IHSQkBqI
March 17, 2007 Build版でfread,fgetcも動いた
0024名前は開発中のものです。2007/04/17(火) 16:05:12ID:jhZOjVgZ
>>23
読めますね
でも書き込み系はだめですね
まあ読み込めるだけでも助かります
0025名前は開発中のものです。2007/04/17(火) 17:56:51ID:X+tElrNz
おまいら楽しそうだな
0026名前は開発中のものです。2007/04/17(火) 23:24:39ID:C1BCDQQc
新スレで早くも挫折っぽいな
0027名前は開発中のものです。2007/04/18(水) 19:31:10ID:2iKKJuRD
マイク使ってる人居る?
NitroTrackerぐらいしか見ないなーと思って
0028名前は開発中のものです。2007/04/19(木) 15:01:28ID:W38vL8ue
>>27
moonさんのお絵かきボイスチャット
0029名前は開発中のものです。2007/04/19(木) 22:02:38ID:9tB1+O5n
前スレ979辺りでフォントについて質問した者ですが、
レンダラの部分をフレームバッファに突っ込んでできました。ありがとうございました。
しかしvramSetMode(MODE_FB0);を使ってるとバックグラウンドが使えません。
何か指定することでできるようになりますか?
それかBG_GFXに文字をレンダリングするとして、2枚以上のバックグラウンドを表示させるにはどうすればいいんですか?
0030名前は開発中のものです。2007/04/19(木) 23:26:59ID:2jDSNcy8
>>29
前スレ980でフレームバッファに「見立てて」とあるわけだが。
あまり考えずにレスすると、やりたい事は多分出来ない。
フレームバッファじゃなくてタイルに書く。
例えば、10x10の文字を書こうとすると、右(2x8)と下(8x2)と右下(2x2)があふれる。
これを並べたときに隣接するタイルに書く。
文章だけだとややこしい。誰かフォローよろ。

# 3Dでビルボード重ねればできるかも?
0031名前は開発中のものです。2007/04/20(金) 07:41:55ID:KjZsdrCt
>>29
自分はMODE5使ってる

videoSetMode(MODE_5_2D | DISPLAY_BG2_ACTIVE | DISPLAY_BG3_ACTIVE);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
vramSetBankB(VRAM_B_MAIN_BG_0x06020000);
0032名前は開発中のものです。2007/04/20(金) 07:55:19ID:KjZsdrCt
framebuffer型背景レイヤ
* 最もシンプルな背景レイヤ。直接ピクセルを操作する。
* キャンバスサイズは256x192固定。
* 背景レイヤは一つのみ。重ね合わせ処理不可。
* 色深度は16bit固定。
* サブ画面では使用不可。
* せっかくのDSの各種ハードウェアサポートが全く得られないので、framebuffer型を選択する利点はほとんど無いと思われる。

extended rotation型背景レイヤ
* 基本的にはframebuffer型背景レイヤと同じ。以下の点が違う。
o 名前の通り、回転拡大縮小が可能。
o 色深度は16bit/8bit選択可能。
o キャンバスサイズも選択可能。
o 複数背景レイヤが使用可能。重ね合わせ処理ok。
0033名前は開発中のものです。2007/04/20(金) 13:21:39ID:q1lk0Smr
gbalzssについて、moonlight氏のサイトを読んで気になったので検証してみたところ、
DSのBIOSコールでは展開不可(データが化ける)であることがわかりました。

gbalzssでは最初に辞書テーブルの先頭4078バイトを0xFFで埋めていますが
DSのBIOSルーチンでは辞書テーブルすら存在せず、ただ展開後のデータから
同じ部分をコピーするだけになっています。
(つまりデータの頭のほうで0xFFが圧縮されると展開時に不定のデータで埋められてしまう)
0xFFが潰されているのはこれが原因です。(dectestだとパレットが死んでますね)
とりあえずこんなところでしょうか。見当違いだったらごめんなさい。
0034名前は開発中のものです。2007/04/22(日) 12:06:37ID:TfVa2cpF
スリープ機能を実装しようと思って前スレに書いてあった7sleep.hとか参考に組んだんだけど
EZ5では動くもののR4とかでは動かない状況になった
ちょっと見てみたらarm9側でtouchReadXY()をコール後に停まってるみたい。
液晶閉じるとバックライトは消えるからarm7側は生きてるっぽい。
arm7側でIPCに設定する項目のIPC->heartbeatはコンパイラ通らないのでコメントアウトしてある。
注意する項目とかそういうないかな?
0035名前は開発中のものです。2007/04/24(火) 21:00:34ID:NJ6jBP1q
背景2枚使うときって2枚目の背景データはどこに入れればいいんですか?
0036名前は開発中のものです。2007/04/24(火) 23:00:17ID:ul3qRtvV
>>35
まずどの画面モードを使うかを聞かせてくれ。それからだ。
0037名前は開発中のものです。2007/04/24(火) 23:04:18ID:NJ6jBP1q
videoSetMode(MODE_5_2D | DISPLAY_BG2_ACTIVE | DISPLAY_BG3_ACTIVE);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
vramSetBankB(VRAM_B_MAIN_BG_0x06020000);
です。1枚の時は
dmaCopy(haikei_Map, BG_GFX, haikei_Map_size);
dmaCopy(haikei_Palette, BG_PALETTE, haikei_Palette_size);
で表示してました。
0038名前は開発中のものです。2007/04/25(水) 11:37:03ID:33OeOyDS
>>37
自分で割り当てたメモリに書き込めむのでは
BG2_CR = BG_BMP8_256x256;

BG3_CR = BG_BMP8_256x256 | BG_BMP_BASE(8);

なら
dmaCopy(drunkenlogoBitmap, (void*)BG_BMP_RAM(0), 256*256); //BG2に書き込み
dmaCopy(drunkenlogoBitmap, (void*)BG_BMP_RAM(8), 256*256); //BG3に書き込み
0039名前は開発中のものです。2007/04/25(水) 13:37:30ID:gTKp5KH5
ttp://mdxonlinemirror.dyndns.org/resources/20051007_nokia888.designawards2005.winner.avi
0040Moonlight2007/04/25(水) 16:41:02ID:HxrT4e6P
>>37

私も聞きたいです。
haikei_Paletteが見えるので8bitパレットモードを使っているようですが、二枚同時に表示できる画面モードがあったら教えて欲しいです。
拡張パレットエリアを使ってBG0/1とBG2/3で上下分割すれば(BG4枚使えば)表示できる、というところまでいったのですが分割するとアルファブレンドが使えません。
なんとかBG2枚だけで賄えたらいいのですが…。
0041名前は開発中のものです。2007/04/25(水) 16:43:49ID:9PTGEnxc
パレットは1個しか使えないんですか?
0042Moonlight2007/04/25(水) 16:59:41ID:HxrT4e6P
>>41

NDSで追加された拡張パレットを使えばいけます。
アルファブレンドを使わないならば、普通に一枚ビットマップBG(BG2かBG3)を表示して、スプライト疑似ビットマップモード(勝手に銘々)でもう一枚使うのが簡単だと思います。
0043名前は開発中のものです。2007/04/25(水) 22:40:25ID:bi207Gqh
素人考えで思いついたこと。
256x192ドットの画像をメインメモリに4枚持ち、2枚づつブレンドしてキャプチャ。
そのキャプチャした2枚の画像を更にBG上でブレンド。

実際にそんな事が出来るか試す技術もないけど、静止画程度なら出来るんじゃないかと考えてみたり。
多分処理に時間が掛かって、使い物にならないだろうけど。
素人の考える事なので多分上手くいかない。
0044名前は開発中のものです。2007/04/26(木) 19:00:36ID:jP033NAs
BG3がVRAM_Fの拡張パレットを使うとして、それはBG3_CRにどう指定すればいいんですか?
あとパレットを書き込むときはVRAM_F_EXT_PALETTEでいいんですか?
0045名前は開発中のものです。2007/04/26(木) 19:57:11ID:vnhXkHDU


0046名前は開発中のものです。2007/04/26(木) 22:30:59ID:1ufEd1K7
拡張パレットの時に使用する拡張パレットスロット

BG0:0 or 2
BG1:1 or 3
BG2:2
BG3:3

と、手元の資料に書いてある。
0047Moonlight2007/04/26(木) 23:32:01ID:ulX9vZIH
>>44
BGx_CR関連のフラグがlibndsのヘッダファイルで定義されていますので、そこからコピペすればOKだと思います。
ちなみに、拡張パレットはCPUから直接読み書きできるエリアにマッピングされていませんので注意です。

>>46
拡張パレットは複数個持てる、とどこかに書いてあったような気がします。
改めて調べなおしてみます。示唆ありがとうございます。
0048名前は開発中のものです。2007/04/27(金) 01:37:33ID:E4LQ/b6I
無線LANカード+DSダウンロードプレイで、
改造なしで実行できるらしいがそれで開発してる人いますか?
0049名前は開発中のものです。2007/04/27(金) 01:56:43ID:ps+Zsnff
BG0〜2がどんな設定になってるか知らないから、適当に書いてみる。

VRAM-Fに拡張パレットのカラー設定をして、

vramSetBankF(VRAM_F_BG_EXT_PALETTE);

VRAM_F_CR |=(vuint8)0x08;


こうやったら、VRAM-Fに設定したカラーが、BG拡張パレットスロット2と3に設定された。
>>46 にも書いたけど、BG2とBG3が使う拡張パレットスロットは固定。
BG3_CRは標準パレット使ってた時と同じ設定。
0050名前は開発中のものです。2007/04/27(金) 07:50:40ID:vQAonU6X
ちょっとbookmark
http://www.dev-scene.com/NDS/Tutorials
http://ranekov.tir.jp/ndn
0051名前は開発中のものです。2007/04/28(土) 00:00:44ID:5RL/W00i
>>48
wifimeは昔のDSじゃないとできないんじゃなかったかな
0052名前は開発中のものです。2007/04/29(日) 13:58:59ID:FnWZvnH2
DSの自作ソフト開発をしたいのですがR4やM3 DS Simplyを買えばできるのでしょうか?
0053名前は開発中のものです。2007/05/01(火) 08:16:03ID:SB3umWqP
>>52
出来る
他にもSuperCardとかあるよ
0054名前は開発中のものです。2007/05/01(火) 16:23:58ID:Xh0zyFlr
その前にエミュで遊んでみてからでもいいんじゃない?
0055名前は開発中のものです。2007/05/02(水) 18:38:51ID:OD2Plci2
オプティマイズのカメレオンUSBとDS-RAMアダプタを試してみた。
ファイルアクセスしないようなプログラムだと全く問題なさそうだけど、DS-RAMアダプタ経由のPC上のファイルアクセスになると遅すぎ。
ファイルのアクセス方法によっては、これ止ってんじゃね?って思うほど。

PC上のファイルアクセスに期待してたんだけど、ちょっと期待はずれかな...
リセット信号線つけたら、自動で再起動してくれるとかは便利なんだけどね。
0056名前は開発中のものです。2007/05/04(金) 19:07:56ID:2UmfDvtL
WiFiMeを使って自作プログラムの実行はできますか?
0057名前は開発中のものです。2007/05/05(土) 01:02:08ID:fIbkcnTP
2年前からタイムスリップしてきた御方が降臨なさったぞ!
0058名前は開発中のものです。2007/05/06(日) 02:22:22ID:+OsIRxhX
あきらめたw
0059名前は開発中のものです。2007/05/07(月) 07:01:19ID:o4/cQJiO
DSMPlay Ver0.1

R4とSC LiteとSC SDで起動しない・・・
MicroSDが悪いのと思って変えたけどだめですた。

フォント Loasdで止るし・・
0060名前は開発中のものです。2007/05/08(火) 00:06:14ID:hPGMHvWN
R4とSCDSで普通に動いてる
明らかにお前のmicroSDが悪い
0061名前は開発中のものです。2007/05/08(火) 01:03:48ID:D70iJ7rj
うちもR4だけど うごくで?
ただ、画面から動画がはみ出してるけど\(^o^)/
0062612007/05/08(火) 01:07:20ID:D70iJ7rj
おっと訂正 最後の1フレーズで飛んでフリーズだわ
0063名前は開発中のものです。2007/05/08(火) 01:24:05ID:ooYgEOtg
>>59
置く場所間違ってるだけじゃね?
0064名前は開発中のものです。2007/05/08(火) 06:05:46ID:bToGIqLO
microSDは a-data 東芝で動かなかった・・・orz
0065名前は開発中のものです。2007/05/08(火) 07:18:14ID:bToGIqLO
http://up3.viploader.net/mini/src/viploader136244.zip

動いたー

っ すきん
0066名前は開発中のものです。2007/05/08(火) 10:22:42ID:cd24JBcZ
細かいことを言うとあれだが、本家WMPだと
再生中に「一時停止ボタン」が表示されて
一時停止中に「再生ボタン」が表示されるんだよね
ボタンの機能を表示するか、現在のステータスを表示するかなんだけどね
0067名前は開発中のものです。2007/05/08(火) 22:18:05ID:1OObYo6q
DSで動く、日本語(漢字など)も使えるエディタは作れないものか
0068名前は開発中のものです。2007/05/08(火) 22:28:12ID:SsfRj51a
>>67
ATOKとかMS-IMEみたいな漢字変換ライブラリを作ってくれたら作れるよ
0069名前は開発中のものです。2007/05/08(火) 23:14:14ID:cjZWy55g
Linuxとかで使われてるのならオープンソースでフリーのがあるよ
0070名前は開発中のものです。2007/05/09(水) 00:53:30ID:7zdYh5y4
>>69
任せた
0071名前は開発中のものです。2007/05/09(水) 02:15:50ID:BYMV35Oq
DSMPで再生中完全フリーズするのは、動画側のエラーなんかな?
物によっては完走するので
0072名前は開発中のものです。2007/05/09(水) 08:23:16ID:B4n4WDrd
再現したことがないのでわかりません
0073名前は開発中のものです。2007/05/11(金) 23:47:22ID:4e1ivnnK
えろげこんばぁたぁまってますよ
0074名前は開発中のものです。2007/05/12(土) 10:56:26ID:Jej5bFNf
まずははじるすですよ
0075名前は開発中のものです。2007/05/13(日) 23:07:47ID:XBYGxj8Z
http://up3.viploader.net/mini/src/viploader137808.zip.html
fmsxDS 0.6 DLDI対応 アンオフィシャルテスト版
う〜ん自分には無理かも…
0076名前は開発中のものです。2007/05/14(月) 04:36:41ID:mEyOEgzk
>75
0077名前は開発中のものです。2007/05/14(月) 04:38:17ID:mEyOEgzk
>>75
しまったPASSはdldi
0078名前は開発中のものです。2007/05/14(月) 12:15:28ID:Mb4m3oBs
とりあえずDeSmuMEのFAT部分をどうにかしようと考え中
今のところDSMPlayとかMoonshellとか動いてる状況
0079名前は開発中のものです。2007/05/14(月) 13:03:26ID:iunJLtuy
3g2とか再生できると熱いよね
0080名前は開発中のものです。2007/05/16(水) 05:17:45ID:h4OBkN9Q
OPLLのエミュレーションをARM7でやらせようとしたら、コードだけで0x8000越えてる罠。
0081名前は開発中のものです。2007/05/16(水) 06:53:31ID:h4OBkN9Q
ARM7用バイナリから、OPLLエミュのソースをはずしてコンパイルしても、容量空かない。
ndslibだけで容量食われてる?
色々情報集めてみます…
0082名前は開発中のものです。2007/05/22(火) 15:19:25ID:Lr8LbkHm
devkitProのdevkitARMでプログラムしてます
ARM7のスタックとヒープエリアはWRAMですよね
特に意識してプログラムしなくてもARM9と干渉することはないと考えてよいでしょうか
0083名前は開発中のものです。2007/05/23(水) 07:45:05ID:idMNbs3F
>>82
ARM7のプログラムが置かれるWRAMは専用の領域だそうです。
ttp://www.bottledlight.com/ds/index.php/Memory/Layout
のPrivate RAM(0x03800000〜0x0380FFFF:64 KB)

Shared RAM(0x037F8000〜0x037FFFFF:32 KB)
を、ARM9からWRAM_CR = 3を実行してARM7に割り当てようとしたんですが
0084名前は開発中のものです。2007/05/23(水) 07:49:34ID:idMNbs3F
すみません途中できれました。
(続き)
ARM7からShared RAMの部分をアクセスしたらフリーズしてしまいます。
しょうがないので、VRAM_DをARM7のメモリ空間に指定して使ってます。
(desmumeのソースを参考にしました)
0085822007/05/23(水) 11:58:16ID:motUPcYL
>>83
ARM7はプログラム自体がWRAMに置かれるのですね
それでプログラムサイズの制限が64Kだったんだ
私もVRAM_Dを使うことにします
0086名前は開発中のものです。2007/05/23(水) 14:29:57ID:CBYIFONF
それって高速動作が必要な関数だけじゃないの?
プログラム全部で64kてしょぼすぎる。
0087名前は開発中のものです。2007/05/23(水) 15:28:30ID:motUPcYL
>>86
http://www.helloworld.jp/~duke/nintendo_ds/nds_develop4.html
には
GBADEVフォーラムにおけるポストでは、DevKitPROでは、
ARM7実行可能コードは最大64KBに制限されると言及されました。
って書いてあるんだ。
0088名前は開発中のものです。2007/05/23(水) 15:34:36ID:motUPcYL
サウンドルーチンだけなのでコード部分は64Kあれば十分かな。
ただサウンドバッファ用のメモリをどうするかで悩んでました。

ところでVRAM_DはARM7からアクセスするときもワード単位ですかね。
0089Moonlight2007/05/23(水) 17:43:56ID:GSLlsCFn
横槍失礼します。

VRAMC/DはARM7からアクセスするときは8bit読み書きできて、普通にWRAMの増設に使えるので便利でした。
ARM7でmallocすると、WRAMのコード領域を除いたエリアから切り分けしてくれますが、普通の4MByteメモリをARM9でmallocしてIPCでARM7に渡してやれば、ARM7で自由に使えます。
malloc使わないで4MByteエリアを同時に使っても構わないのですが、メモリ管理が面倒なので普段はARM9からmallocするかな、くらいの感じです。

補足1。ARM9のデータキャッシュ(読み書き両方)さえ気を付けていれば、ARM7とARM9のデータ通信に4MByteエリアを使うことも出来ます。
補足2。4MByteエリアを同時にアクセスすると、どちらかのCPUがもう片方のCPUを待ちます。どちらのCPUが待つかはREG_WAIT_CR (*(vuint16*)0x04000204) で設定できます。
補足3。REG_WAIT_CRの設定はARM9側からしかできません。
補足4。DevKitProR20で正式採用されたARM7用WRAM96kbyte設定ですが、一部のファームウェアはこれを正しく扱えません。
問題があったときは(リンカスクリプトをいじるのは面倒なので)r17aかr19辺りを使うのが楽だと思います。SharedRAMを結合しないのでWRAMが64kbyteになります。
補足5。サウンドバッファを4MByteエリアに確保するときは、CPU優先設定をARM7優先にしておかないと、ARM9に負荷が掛かるたびにブツブツ切れます。
補足6。ARM7で大量のメモリをハンドリングするときは、VRAM_CとVRAM_Dを両方ともARM7に割り当てて(ついでに暇があればリンカスクリプトをいじってmallocをVRAM領域にして)256kbyte使うと便利です。
この場合はARM7優先設定する必要がありません。
補足7。libnds-20060719より前の基本ライブラリにはVRAM設定が不十分です。128kbyteまでしかdefineがありません。VRAMC/Dを256kbyte全部ARM7に割り当てるときは、libnds-20070127以降を使う必要があります。
defineを自分で定義すれば気にしなくても大丈夫だと思います。

長い上に箇条書きな補足ばかりですいませんです。

追記、C++を使うと(例外とか使わなくても)C++ライブラリが組み込まれるので、r18/r19b辺りを使うときは、ARM7でC++を使わない方がいいかも。
0090882007/05/24(木) 07:06:54ID:aj7YaroW
>>89
バイト単位で読み書きできるんですね
その他情報も参考になります
ありがとうございました。
0091名前は開発中のものです。2007/05/25(金) 03:43:00ID:4YzO8T1a
ありがとうございます。参考になりました。
なるほど、DevKitProR20はすでに共有WRAMもARM7に割り当てているのですか…
ファームによっては動かないのは困りますね。やはりVRAMをARM7に割り当てることにします。
そしてARM7のソースはCPPではなくCソースとしてコンパイルするようにしてみました。

頂いた情報を元にして色々弄ってみます。
0092名前は開発中のものです。2007/05/26(土) 14:07:43ID:prDWTsQK
すみませんが誰か助けていただきたく

最近になってdevkitProで遊び始めました
examplesのndsをmakeしまくったら全部動いたので、今度はデータを変えて動かしてみようと
SimpleSoundのrawデータを手持ちのwavをrawに変換して置き換えたところ
元のwavのそれっぽい音は鳴ったのですが同時にブチブチノイズが入って(´・ω・`)ショボーン
wavを8bit,16bitに変えたり周波数を変えてソースもそれに合わせて変えても同じでした

動作はエミュレータのdualisと実機で確認しました
wavはSoundEngineで編集、rawへの変換はHomebrewを参考にしてsoxを使いました
音量の制限とか特別なツールが要るとかなにかコツがあったら誰か教えて欲しいです

プログラムの話じゃなくてすみません
0093Moonlight2007/05/27(日) 21:05:25ID:MUD6Al/y
>>92

http://mdxonlinemirror.dyndns.org/sndtest.zip

A/B/X/Yボタンでそれぞれ違うフォーマットのサウンドファイルを再生するサンプルをでっち上げました。
変換にはSOXを使用しました。変換オプションはsndtest/arm9/data/convert/conv.batを参照してください。
DevKitProのcombinedサンプルをベースにしましたが、ARM7とARM9で8bit/16bitの設定方法が食い違っていたので、ARM7のtemplate.cを修正しました。
devkitPror20/nds-examples-20070327/templates/combined/arm7/source/template.cの10行目を、
SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==1?SOUND_8BIT:SOUND_16BIT);
から、
SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==0?SOUND_8BIT:SOUND_16BIT);
に変更してあります。
あと、ダミーの割り込みを有効にしないと、swiWaitForVBlankは使えないので、InitInterruptsで空の割り込みを有効にしてます。combinedサンプルはそのままじゃ動かない…ですよね?

ここから下は補足です。
NDSのサウンドチップは32768Hzをベースにしているので、これ以外の周波数を鳴らそうとすると量子化ノイズが入ります。
A/Bボタンの22kHz再生でチリチリ言うのがわかると思います。容量の問題ならもっと下げて16384Hzで二倍オーバーサンプリングするのが良いと思います。
ADPCMは未だになんだかよくわかりません。二種類のADPCMを使えるみたいですが。
ステレオデータを再生するときは、左右分離してデータを二つ用意して、パンを両端に振って同時に再生すればOKですが、libndsの標準関数を使うと1vsync(16ミリ秒)ずれるので、自分でステレオ再生用関数を作った方が良いと思います。
8bit/16bitは、平滑化フィルタを入れれば8bitでも充分かなと私は思っています。容量などを考えながらケースバイケースで使い分ける感じで。
ちなみに、DSMPlayは8bitデータで平滑化フィルタを使っています。sin波ボタンでON/OFFできるので、聴いてみたいだけなら試してみてください。
0094名前は開発中のものです。2007/05/28(月) 03:35:30ID:GoMQTjDv
量子化ノイズは振幅方向じゃないですか
■ このスレッドは過去ログ倉庫に格納されています