トップページ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じゃないとできないんじゃなかったかな
■ このスレッドは過去ログ倉庫に格納されています