GBAで何やら作ってみようという人の為のスレ。ライセンス不要。
初心者歓迎。質問歓迎。英語苦手な人歓迎。冷やかし歓迎。ネカマ歓迎。
資料、リンク等
http://www.devrs.com/gba/
http://www.gbadev.org/
http://www.vsync.org/agb/
http://nocash.emubase.de/gbatek.htm
http://www.bomber.co.jp/chaola/docs/ARM/
開発環境
DevkitAdvance http://devkitadv.sourceforge.net/index.html
DevkitARM http://www.devkit.tk/
VisualHAM http://visualham.console-dev.de/
DragonBasic http://jm-basic.com/dragon/index.php
GBA Wiki
http://cgi.f26.aaacafe.ne.jp/~gbawiki/pukiwiki/pukiwiki.php
【GBA】Linuxから目覚めるぼくらのゲームボーイ!
http://pc5.2ch.net/test/read.cgi/linux/1070983168/
ゲームボーイアドバンス(GBA)開発@ゲ製板(避難所)
http://bbs.gamdev.org/test/read.cgi/gamedev/1055111303/
前スレ
http://pc5.2ch.net/test/read.cgi/gamedev/1013750899/
探検
ゲームボーイアドバンス(GBA)非公式開発 Part2
■ このスレッドは過去ログ倉庫に格納されています
04/10/30 15:50:05ID:XmInH8YR
700名前は開発中のものです。
2008/03/04(火) 04:09:00ID:ajlkIhCi すいません。この本「Linuxから目覚めるぼくらのゲームボーイ!」
を読みながら、第2章のbox_tile.cまで進んだんですが、
サンプルプログラムをそのまま使用して、
コンパイルまでできたのですが、VBAで実行させると画面が真っ暗なままで
何も起こりません。これは実機でないと動作しないのでしょうか?
を読みながら、第2章のbox_tile.cまで進んだんですが、
サンプルプログラムをそのまま使用して、
コンパイルまでできたのですが、VBAで実行させると画面が真っ暗なままで
何も起こりません。これは実機でないと動作しないのでしょうか?
701名前は開発中のものです。
2008/03/04(火) 12:37:05ID:23nZbsqP 半分あたり
その本はメモリからブートすることを前提にしているので
ROMからブートすることを前提にしているエミュだとそのままでは動作しない
VBAで動かすにはbox_tile.mb.binに名前を変えてあげな
その本はメモリからブートすることを前提にしているので
ROMからブートすることを前提にしているエミュだとそのままでは動作しない
VBAで動かすにはbox_tile.mb.binに名前を変えてあげな
702名前は開発中のものです。
2008/03/04(火) 21:25:47ID:ajlkIhCi >>701
レスありがとうございます。
ファイル名を変えてやってみましたがうまくいきませんでした。。
代わりにリンカスクリプトでプログラムの開始アドレスを0x08000000に変えたら動きました!
おかげで挫折する期間が延びましたwありがとうございました。
しかしbox_tile.cより前に出てくるプログラムは何で内部メモリブートでもうまくいったのかなあ
レスありがとうございます。
ファイル名を変えてやってみましたがうまくいきませんでした。。
代わりにリンカスクリプトでプログラムの開始アドレスを0x08000000に変えたら動きました!
おかげで挫折する期間が延びましたwありがとうございました。
しかしbox_tile.cより前に出てくるプログラムは何で内部メモリブートでもうまくいったのかなあ
703名前は開発中のものです。
2008/03/08(土) 22:06:12ID:IYGGmug3 すいません。「Linuxから目覚めるぼくらのゲームボーイ!」
を第3章まで読み進めたのですが、clock.cがうまく動作しません。
割り込みハンドラの中でvolatile修飾したグローバル変数の値を書き換えているのに
全く値が変わりません。なにか考えられる原因はありますか?
ちなみに割り込みハンドラ自体が実行されていることは自作のprintf文の実行結果から
画面に文字が出力されるので間違いありません。
を第3章まで読み進めたのですが、clock.cがうまく動作しません。
割り込みハンドラの中でvolatile修飾したグローバル変数の値を書き換えているのに
全く値が変わりません。なにか考えられる原因はありますか?
ちなみに割り込みハンドラ自体が実行されていることは自作のprintf文の実行結果から
画面に文字が出力されるので間違いありません。
704名前は開発中のものです。
2008/03/09(日) 00:32:24ID:9hgngbOa >ちなみに割り込みハンドラ自体が実行されていることは自作のprintf文の実行結果から
>画面に文字が出力されるので間違いありません。
釈然としない
どう出力されたからそう思ったの?
ちょっと貼ってみてよ
>画面に文字が出力されるので間違いありません。
釈然としない
どう出力されたからそう思ったの?
ちょっと貼ってみてよ
705名前は開発中のものです。
2008/03/09(日) 01:09:00ID:gfwS1uas 該当部分のソースを張ります。
これでタイマー0がオーバーフローしたときに下記関数が実行されて、
VBAver1.7.2だとなぜか0110100100111010が常に表示されます。
volatile int tmr0_cnt = 0x0000;
void int_handler(void){
int flag;
int i;
register(INT_IME) = INT_IME_OFF;
flag = register(INT_IF);
if(flag & INT_TMR0){
tmr0_cnt++;
draw_str("タイマーわりこみ", 0, 13, BG_1);
for(i=0; i<16; i++){
if(((tmr0_cnt >> i) & 0x0001) == 1){
draw_str("1", 16-i, 1, BG_1);
}
else{
draw_str("0", 16-i, 1, BG_1);
}
}
}
register(INT_IF) = flag;
register(INT_IME) = INT_IME_ON;
}
これでタイマー0がオーバーフローしたときに下記関数が実行されて、
VBAver1.7.2だとなぜか0110100100111010が常に表示されます。
volatile int tmr0_cnt = 0x0000;
void int_handler(void){
int flag;
int i;
register(INT_IME) = INT_IME_OFF;
flag = register(INT_IF);
if(flag & INT_TMR0){
tmr0_cnt++;
draw_str("タイマーわりこみ", 0, 13, BG_1);
for(i=0; i<16; i++){
if(((tmr0_cnt >> i) & 0x0001) == 1){
draw_str("1", 16-i, 1, BG_1);
}
else{
draw_str("0", 16-i, 1, BG_1);
}
}
}
register(INT_IF) = flag;
register(INT_IME) = INT_IME_ON;
}
706名前は開発中のものです。
2008/03/09(日) 01:10:28ID:gfwS1uas ちなみにメイン関数の方では下記処理を行っており、
タイマ0のカウンタは正常にカウントアップしていることが画面表示から確認できました。
何か分かりますでしょうか。よろしくお願い致します。
while(1){
sec = register(TMR_COUNT0);
for(i=0; i<16; i++){
if(((sec >> i) & 0x0001) == 1){
draw_str("1", 16-i, 0, BG_1);
}
else{
draw_str("0", 16-i, 0, BG_1);
}
}
}
タイマ0のカウンタは正常にカウントアップしていることが画面表示から確認できました。
何か分かりますでしょうか。よろしくお願い致します。
while(1){
sec = register(TMR_COUNT0);
for(i=0; i<16; i++){
if(((sec >> i) & 0x0001) == 1){
draw_str("1", 16-i, 0, BG_1);
}
else{
draw_str("0", 16-i, 0, BG_1);
}
}
}
707名前は開発中のものです。
2008/03/09(日) 01:16:20ID:gfwS1uas あと、リンカスクリプトを書き換えて、テキストセクションの開始アドレスを
0x80000000にしているのですが、このことが何か関係があるのでしょうか。。
0x80000000にしているのですが、このことが何か関係があるのでしょうか。。
708名前は開発中のものです。
2008/03/09(日) 05:29:51ID:9hgngbOa ひょっとして全て理解した上でからかってる?
>>707はたしかに関係ある
テキストセクションを0x08000000に置いたあと以降の
連続した領域にBSSセクションとデータセクションを置いているので
グローバル変数に書き込みたくてもROMだから書きこめない
今までよく動いてたな。。。
>>707はたしかに関係ある
テキストセクションを0x08000000に置いたあと以降の
連続した領域にBSSセクションとデータセクションを置いているので
グローバル変数に書き込みたくてもROMだから書きこめない
今までよく動いてたな。。。
709名前は開発中のものです。
2008/03/09(日) 09:31:57ID:gfwS1uas リンカスクリプトについての理解が不十分でした。
下記ホームページを参考にリンカスクリプトを書き換えたら、
見事1秒ごとにtmr0_cntが0からカウントアップされるようになりました。
おかげで挫折する期間が延びました。ありがとうございました。
http://www.nextappli.com/index.php?GBA%2FROM%B2%BD#content_1_0
下記ホームページを参考にリンカスクリプトを書き換えたら、
見事1秒ごとにtmr0_cntが0からカウントアップされるようになりました。
おかげで挫折する期間が延びました。ありがとうございました。
http://www.nextappli.com/index.php?GBA%2FROM%B2%BD#content_1_0
710名前は開発中のものです。
2008/03/09(日) 19:34:43ID:I/rPhsey 例えば
mov r1, #128
strh r1, [r3, #0]
ldrh r3, [r2, #0]
を実行するのに、何クロック掛かるか・・という事を説明してくれる
本やサイトご存知内ですか?
mov r1, #128
strh r1, [r3, #0]
ldrh r3, [r2, #0]
を実行するのに、何クロック掛かるか・・という事を説明してくれる
本やサイトご存知内ですか?
711名前は開発中のものです。
2008/03/11(火) 00:29:05ID:IfG+az6x 音の多重再生をするにはどうしたらいいのですか
712名前は開発中のものです。
2008/03/11(火) 00:36:17ID:IfG+az6x 数十曲の音楽データをROMに格納したいのですが容量が足りません。
何か工夫が必要なのでしょうか。
マザー3なんかは100曲ものBGMが入ってましたがあれはどうやって実現しているのでしょうか。
何か工夫が必要なのでしょうか。
マザー3なんかは100曲ものBGMが入ってましたがあれはどうやって実現しているのでしょうか。
713名前は開発中のものです。
2008/03/11(火) 00:38:46ID:IfG+az6x すいません。100曲でなく250曲の間違いでした。
714名前は開発中のものです。
2008/03/11(火) 01:46:18ID:UWuqXy/S 譜面データと、音源データを分けて持っているから、かな?
MIDI見たいな感じで。
それに、要所要所でPCMをかぶせれば
大抵の曲は再現できそう。
あとは、圧縮をかけるだね。
(譜面データにたいして、また、ADPCMとは言わないが適当な圧縮形式で。)
MIDI見たいな感じで。
それに、要所要所でPCMをかぶせれば
大抵の曲は再現できそう。
あとは、圧縮をかけるだね。
(譜面データにたいして、また、ADPCMとは言わないが適当な圧縮形式で。)
715名前は開発中のものです。
2008/03/11(火) 09:34:19ID:IfG+az6x そんなのは俺の手に負えねえ。ここで挫折しまするわ。
716名前は開発中のものです。
2008/03/12(水) 17:36:52ID:Us8flhJs ここでGBの事聞いても大丈夫かな?
バンク切り替えの事について調べてるんですけど
MBC2のバンク切り替えについてすずめさんところのウェブアーカイブと
お受験に出るゲームボーイのページを調べてみたんですけどMBC2に関する情報が載っていなくて…
恐らく0x2000番地への書き込みだと思うんですけどどこか正確な情報がある場所ってないでしょうか?
それと現在自分がどのバンクを操作しているのか判別する方法があるかないかご存知の方いらっしゃいますか?
もしかしてバンクの位置情報はどこにも展開されず完全に自分で管理する必要があるんでしょうか?
デバッグの際にバンク情報がないと調べるのが大変で…
バンク切り替えの事について調べてるんですけど
MBC2のバンク切り替えについてすずめさんところのウェブアーカイブと
お受験に出るゲームボーイのページを調べてみたんですけどMBC2に関する情報が載っていなくて…
恐らく0x2000番地への書き込みだと思うんですけどどこか正確な情報がある場所ってないでしょうか?
それと現在自分がどのバンクを操作しているのか判別する方法があるかないかご存知の方いらっしゃいますか?
もしかしてバンクの位置情報はどこにも展開されず完全に自分で管理する必要があるんでしょうか?
デバッグの際にバンク情報がないと調べるのが大変で…
717名前は開発中のものです。
2008/03/12(水) 17:53:19ID:Jo1vXsg5 スレ違い
ttp://www.geocities.co.jp/Playtown/2004/gmbspecj.txt
ttp://fms.komkon.org/GameBoy/Tech/Software.html
エミュレータのソースも併せて読むといい
ttp://www.geocities.co.jp/Playtown/2004/gmbspecj.txt
ttp://fms.komkon.org/GameBoy/Tech/Software.html
エミュレータのソースも併せて読むといい
718名前は開発中のものです。
2008/03/12(水) 18:12:53ID:Us8flhJs すみません該当するようなスレが無かった物で。
挙げて頂いた上記サイト等も参考にしてみます。
エミュのソースをみれば確かに内部動作はカンペキに把握できますね。
GBのエミュも大分こなれてる様なのでその辺も参考にしてみます。
ご親切にどうもありがとうございました。スレ汚し失礼しました。
挙げて頂いた上記サイト等も参考にしてみます。
エミュのソースをみれば確かに内部動作はカンペキに把握できますね。
GBのエミュも大分こなれてる様なのでその辺も参考にしてみます。
ご親切にどうもありがとうございました。スレ汚し失礼しました。
719名前は開発中のものです。
2008/03/13(木) 15:11:16ID:d99ZfhW7720名前は開発中のものです。
2008/03/16(日) 06:19:18ID:RXPkoV7l devkitProを使ってGBAでゲームを作っているのですが、
const int hoge1 = 1 ;
const int hoge2 = hoge1 ;
のようにすると、「initializer element is not constant」と出てしまいます。
VC++だと普通にコンパイルが成功しました。
Cではこういう事は出来ないのでしょうか?
const int hoge1 = 1 ;
const int hoge2 = hoge1 ;
のようにすると、「initializer element is not constant」と出てしまいます。
VC++だと普通にコンパイルが成功しました。
Cではこういう事は出来ないのでしょうか?
721名前は開発中のものです。
2008/03/16(日) 12:05:58ID:0SBCpDyI >>720
スレ違いだが回答。
C言語とC++のconst修飾子の動作の違いのために起きる問題。
const int hoge1 = 1 ;
がC言語では変数として定義されるのに対し、C++では定数として定義される。
このため、
const int hoge2 = hoge1 ;
がエラーとなる(初期値つき変数に定数以外を指定したから)。
結論:C++でなくC言語で書くなら、定数はマクロやenumで定義しましょう。
余談だが、const修飾子には他にも違いがあり、グローバル変数をconst修飾した場合に、
C言語ではデフォルトで外部リンケージ(要するにextern)になるのに対し、
C++では内部リンケージ(要するにstatic)となる。
スレ違いだが回答。
C言語とC++のconst修飾子の動作の違いのために起きる問題。
const int hoge1 = 1 ;
がC言語では変数として定義されるのに対し、C++では定数として定義される。
このため、
const int hoge2 = hoge1 ;
がエラーとなる(初期値つき変数に定数以外を指定したから)。
結論:C++でなくC言語で書くなら、定数はマクロやenumで定義しましょう。
余談だが、const修飾子には他にも違いがあり、グローバル変数をconst修飾した場合に、
C言語ではデフォルトで外部リンケージ(要するにextern)になるのに対し、
C++では内部リンケージ(要するにstatic)となる。
722名前は開発中のものです。
2008/03/16(日) 12:18:17ID:0SBCpDyI >>721
スレ違うというか板違いでしたね。
あと、一応補足。
当たり前だけどC++でグローバルな
const int hoge0 = 1;
static const int hoge1 = 1;
extern const int hoge2 = 1;
を定義すると、hoge0とhoge1は定数、hoge2は変数となる。
スレ違うというか板違いでしたね。
あと、一応補足。
当たり前だけどC++でグローバルな
const int hoge0 = 1;
static const int hoge1 = 1;
extern const int hoge2 = 1;
を定義すると、hoge0とhoge1は定数、hoge2は変数となる。
723名前は開発中のものです。
2008/03/16(日) 15:31:08ID:3fassPpA724名前は開発中のものです。
2008/03/17(月) 02:10:37ID:xMktvNUH725720
2008/03/17(月) 03:34:16ID:C1jKoyjP なるほど、そもそもCとC++じゃconstの仕様が違うのですね。
良く分かりました。
板違いの質問に答えて頂き、ありがとうございました。
良く分かりました。
板違いの質問に答えて頂き、ありがとうございました。
726名前は開発中のものです。
2008/03/17(月) 10:01:08ID:7F2zgz+N >>724
やっぱり変数と定数の意味に無理があるだろ。どこで
そんなネタ仕込まれたんだ?
722 の3つは全部 const int 型変数の定義。
const int 型変数が定数式で初期化されていれば、
それもまた定数式となる。
リンケージはそれぞれ決まっているし、外部リンケージ
じゃなければ初期化が必須だったりするけど、それらは
定数式として使えるかどうかとは別の話。
やっぱり変数と定数の意味に無理があるだろ。どこで
そんなネタ仕込まれたんだ?
722 の3つは全部 const int 型変数の定義。
const int 型変数が定数式で初期化されていれば、
それもまた定数式となる。
リンケージはそれぞれ決まっているし、外部リンケージ
じゃなければ初期化が必須だったりするけど、それらは
定数式として使えるかどうかとは別の話。
727名前は開発中のものです。
2008/03/24(月) 05:51:58ID:UCF17QKn GB音源(例えばチャンネル1)でエンベロープをハードウェアでは無く自力でやりたい場合、
SOUND1CNT_Hのbit12-15をいじって、
SOUND1CNT_Xのbit15を立てて初期化するしかないのでしょうか?
これだと発音中の波形の状態も最初に戻ってしまうらしく、
音が自然にならないので困っています。
何か良い方法をご存知の方はいらっしゃらないでしょうか?
SOUND1CNT_Hのbit12-15をいじって、
SOUND1CNT_Xのbit15を立てて初期化するしかないのでしょうか?
これだと発音中の波形の状態も最初に戻ってしまうらしく、
音が自然にならないので困っています。
何か良い方法をご存知の方はいらっしゃらないでしょうか?
728名前は開発中のものです。
2008/03/24(月) 08:16:50ID:bI8PsKud その方法しか無いがチャンネル1と2は必ず発音がリセットされるので実質使えない
チャンネル3はリセットされないからソフト制御可能
チャンネル3はリセットされないからソフト制御可能
729名前は開発中のものです。
2008/03/24(月) 13:22:21ID:o6pWhQxB GBAのスペックに
サウンド:アナログ(パルス波2ch+波形メモリ1ch+ノイズ1chの音源、従来機と同様)+デジタル(PCM)2ch
ってあるけどこれと同時発音数は別の話だよね
もっと沢山鳴らしてるようなメガデモはあるし、実際は何音までなんでしょ
サウンド:アナログ(パルス波2ch+波形メモリ1ch+ノイズ1chの音源、従来機と同様)+デジタル(PCM)2ch
ってあるけどこれと同時発音数は別の話だよね
もっと沢山鳴らしてるようなメガデモはあるし、実際は何音までなんでしょ
730名前は開発中のものです。
2008/03/24(月) 16:23:44ID:bI8PsKud それで全部だけど?
731名前は開発中のものです。
2008/03/24(月) 18:13:20ID:o6pWhQxB では同じトラック三つコピペして全部違うPCMにしても
音切れがないのはどういう仕組み?
音切れがないのはどういう仕組み?
732名前は開発中のものです。
2008/03/24(月) 18:22:44ID:+9oLoWUN733名前は開発中のものです。
2008/03/24(月) 18:22:59ID:bI8PsKud 自分でPCMと書いてるじゃん・・・
734名前は開発中のものです。
2008/03/24(月) 18:32:15ID:o6pWhQxB デジタル(PCM)2chって書いてあるけど
合成すればいいってんなら何音まで?
合成すればいいってんなら何音まで?
735名前は開発中のものです。
2008/03/24(月) 21:01:23ID:+9oLoWUN736727
2008/03/25(火) 03:27:18ID:XMS5LhkT >728
うへぇそうなんですかorz レスありがとうございます。
こんなキッツイ制限があるのにGBのゲームには一杯名曲があるというのが信じられません。
というかFCよりもキツイですねこれは。
FCミニとか、エミュレーターとかも結構苦労して再現してそうですね。
うへぇそうなんですかorz レスありがとうございます。
こんなキッツイ制限があるのにGBのゲームには一杯名曲があるというのが信じられません。
というかFCよりもキツイですねこれは。
FCミニとか、エミュレーターとかも結構苦労して再現してそうですね。
737名前は開発中のものです。
2008/03/25(火) 21:01:25ID:cUljzw0d Raylight Studios - Resident Evil GBA + Bonus
http://jp.youtube.com/watch?v=DBHNtTNPzV0
やっぱ出なかったのは容量の問題かな
http://jp.youtube.com/watch?v=DBHNtTNPzV0
やっぱ出なかったのは容量の問題かな
738名前は開発中のものです。
2008/03/25(火) 22:32:13ID:DSvlIXZK すげえな
739名前は開発中のものです。
2008/04/04(金) 05:56:12ID:hXz7vhFd GBAよりスーファミの方が開発意欲がそそられる
740名前は開発中のものです。
2008/04/27(日) 02:28:18ID:BegmYBqI devkitProを使ってみようかと思ってるのですが、
コレを使ってGBAソフトを作ってネットで配布する場合、
ソースも配布可能にしなきゃいけないのでしょうか?
コレを使ってGBAソフトを作ってネットで配布する場合、
ソースも配布可能にしなきゃいけないのでしょうか?
741名前は開発中のものです。
2008/04/27(日) 09:09:17ID:gOa+IOAb ライブラリを改変しなければ配布しなくてもよかったと思います。
742名前は開発中のものです。
2008/04/27(日) 14:36:38ID:gA0/oGVB743740
2008/04/28(月) 03:52:19ID:fpXnuQEH744名前は開発中のものです。
2008/06/22(日) 12:06:27ID:/JClv6am >>50
サイト消えてる・・・
サイト消えてる・・・
745名前は開発中のものです。
2008/07/22(火) 08:08:44ID:UkA+4UPJ 海外ソフトの和訳ハックとか作れますか?
もし可能性が少しでもあるなら頑張ってみようかなと・・・
予備知識ゼロだけど・・・orz
もし可能性が少しでもあるなら頑張ってみようかなと・・・
予備知識ゼロだけど・・・orz
746名前は開発中のものです。
2008/10/15(水) 19:46:04ID:BTWkaFv3 GB伊次郎ってどっかで手に入らないものだろうか…
747名前は開発中のものです。
2008/10/20(月) 09:28:59ID:udn3EoyF >>746
GBXchangerと任天堂パワーのGB用カートリッジがあれば、似たようなことができると思う
GBXchangerと任天堂パワーのGB用カートリッジがあれば、似たようなことができると思う
748名前は開発中のものです。
2008/10/21(火) 00:04:47ID:Izk3rpBS それが手に入れば苦労はしないっての…
749名前は開発中のものです。
2008/10/21(火) 09:46:42ID:weSdSC9r この手のものは時期逃すと手に入りにくいからなあ・・・
数年前なら、数少ないが売っている店はあった
あとは今あるとしたらオークション
数年前なら、数少ないが売っている店はあった
あとは今あるとしたらオークション
750名前は開発中のものです。
2008/10/22(水) 12:38:33ID:nJuXMnla ヤフオクで1点だけ見かけた
751名前は開発中のものです。
2008/11/01(土) 00:24:39ID:Tvk5Kt8k GBのマジコンって今でも需要あるんだね
KOMAKUYAはもうスターターキット出さないのかな
KOMAKUYAはもうスターターキット出さないのかな
752名前は開発中のものです。
2008/11/16(日) 05:12:20ID:yRHdgsS9 void line(hword Xa, hword Ya, hword Xb, hword Yb, hword color) {
hword x, y;
int j = Ya;
int e = 0;
for(x = Xa; x < Xb; x++) {
draw_point(x, j, color);
e = e + (Yb-Ya);
if((Xb-Xa)< e) {
e = e - (Xb - Xa);
j = j + 1;
}
}
}
このメソッドがどのように動いて斜線を引いているか分かり易く教えていただけないでしょうか?
draw_pointメソッドは指定された(x,j)座標にcolorで指定した色のドットを表示するメソッドです。
斜線の範囲は(Xa, Ya)から(Xb, Yb)です。
hword x, y;
int j = Ya;
int e = 0;
for(x = Xa; x < Xb; x++) {
draw_point(x, j, color);
e = e + (Yb-Ya);
if((Xb-Xa)< e) {
e = e - (Xb - Xa);
j = j + 1;
}
}
}
このメソッドがどのように動いて斜線を引いているか分かり易く教えていただけないでしょうか?
draw_pointメソッドは指定された(x,j)座標にcolorで指定した色のドットを表示するメソッドです。
斜線の範囲は(Xa, Ya)から(Xb, Yb)です。
753名前は開発中のものです。
2008/11/16(日) 12:27:42ID:yRHdgsS9 void line(hword Xa, hword Ya, hword Xb, hword Yb, hword color) {
hword x, y;
int j = Ya;
int e = 0;
for(x = Xa; x < Xb; x++) {
draw_point(x, j, color);
e = e + (Yb-Ya);
if((Xb-Xa)< e) {
e = e - (Xb - Xa);
j = j + 1;
}
}
}
このメソッドがどのように動いて斜線を引いているか分かり易く教えていただけないでしょうか?
draw_pointメソッドは指定された(x,j)座標にcolorで指定した色のドットを表示するメソッドです。
斜線の範囲は(Xa, Ya)から(Xb, Yb)です。
hword x, y;
int j = Ya;
int e = 0;
for(x = Xa; x < Xb; x++) {
draw_point(x, j, color);
e = e + (Yb-Ya);
if((Xb-Xa)< e) {
e = e - (Xb - Xa);
j = j + 1;
}
}
}
このメソッドがどのように動いて斜線を引いているか分かり易く教えていただけないでしょうか?
draw_pointメソッドは指定された(x,j)座標にcolorで指定した色のドットを表示するメソッドです。
斜線の範囲は(Xa, Ya)から(Xb, Yb)です。
754名前は開発中のものです。
2008/11/16(日) 18:17:08ID:9y44eiNe ブレゼンハムでググれ
こんなところで聞くよりいい解説がどこかにある
こんなところで聞くよりいい解説がどこかにある
755名前は開発中のものです。
2008/11/17(月) 12:01:38ID:M2eDLwwk デジタル微分解析(DDA)でググ・・・ったら余計わからんくて俺が吹いた
756名前は開発中のものです。
2008/11/17(月) 22:21:48ID:0FeRBUS+ 厳密に考えるとやっかいなところは多々あるが
2Dで直線や多角形描くぐらいならただの差分方程式だろ
2Dで直線や多角形描くぐらいならただの差分方程式だろ
757名前は開発中のものです。
2008/11/18(火) 22:54:21ID:35X+8Y/i GBAで1〜10までのランダム値を取ろうと思ったらどうすればよいのでしょうか?
rand()は使えませんよね
rand()は使えませんよね
758名前は開発中のものです。
2008/11/19(水) 03:13:42ID:iECaJTAb759名前は開発中のものです。
2008/12/03(水) 21:17:08ID:ZUsaZJd3 Homebrew BOF
ゲーム機など開発環境が公開されていないハード、及びマイナーハード開発者の集いを企画しています。
日時:コミケ(12/28-30)前後 当日なら17-19時くらい + 宴会
場所:東京都区内
費用:会場実費(0-数百円?)
たぶん日本全体で100人もいないんじゃないかと思いますが、
コミケで上京する人もいるでしょうからその時期を予定しています。
http://www27.atwiki.jp/homebrew/
マルチすまん
ゲーム機など開発環境が公開されていないハード、及びマイナーハード開発者の集いを企画しています。
日時:コミケ(12/28-30)前後 当日なら17-19時くらい + 宴会
場所:東京都区内
費用:会場実費(0-数百円?)
たぶん日本全体で100人もいないんじゃないかと思いますが、
コミケで上京する人もいるでしょうからその時期を予定しています。
http://www27.atwiki.jp/homebrew/
マルチすまん
760名前は開発中のものです。
2009/01/09(金) 21:44:01ID:JmGx4bkn age
761名前は開発中のものです。
2009/01/09(金) 21:54:46ID:JmGx4bkn おtingting
762名前は開発中のものです。
2009/01/09(金) 22:02:00ID:JmGx4bkn マジキチ動画(ββ)
763名前は開発中のものです。
2009/01/17(土) 21:22:00ID:/uotE80P GBAでMP3を再生する方法を教えてください
764名前は開発中のものです。
2009/01/18(日) 02:54:34ID:eSDINTKa 市販プレーヤー買った方が手間取らない
765名前は開発中のものです。
2009/01/18(日) 05:28:35ID:vCC7QsmR プレイやん
766名前は開発中のものです。
2009/01/18(日) 13:23:24ID:F84aYW6Z サウンドプレイヤーを自作したいと思っています。20曲程入れたいんですが何らかの形で圧縮して組み込みことが必要だと思うのですがどうしたらいいですか。
767名前は開発中のものです。
2009/01/18(日) 14:23:20ID:+OkZIPbY PCでそのプログラムは作ってみた?
768名前は開発中のものです。
2009/01/18(日) 14:26:28ID:F84aYW6Z PCではDXライブラリを使えばMP3の再生ができるので作れることが分かっています。
769名前は開発中のものです。
2009/01/19(月) 01:08:21ID:4HQkQlpM じゃ、DXライブラリ使わずにmp3再生できるように頑張れ
770名前は開発中のものです。
2009/02/06(金) 17:43:16ID:6cgXmSA9 じゃあ脳内再生しかないな
771名前は開発中のものです。
2009/02/06(金) 19:56:14ID:BaBBx5bc GBAの性能じゃmp3プレイヤーは厳しくないか?
772名前は開発中のものです。
2009/02/15(日) 02:31:54ID:boVc3Mdt DMA1&2とTIMER0&1を使って、ダイレクトサウンドA&Bで同時に音を鳴らしたいのですが
片方しか音が鳴りません。
VBAのIOViewerでFIFOが変化しているのは確認したのですが
何も音がしない理由としては、どんな事が考えられますか?
SGCNT0_H(0x4000082)
SGCNT1(0x4000084)
の音量他もちゃんと値が入ってます。
片方しか音が鳴りません。
VBAのIOViewerでFIFOが変化しているのは確認したのですが
何も音がしない理由としては、どんな事が考えられますか?
SGCNT0_H(0x4000082)
SGCNT1(0x4000084)
の音量他もちゃんと値が入ってます。
773名前は開発中のものです。
2009/02/15(日) 05:26:13ID:PZvLdBG/ 本当に値が正しいなら
あとはVBA側でDirect Sound A,Bのどちらかがオフになってる位しか無いな
あとはVBA側でDirect Sound A,Bのどちらかがオフになってる位しか無いな
774772
2009/02/15(日) 06:41:13ID:boVc3Mdt レスありがとうございます。
VBAの設定も間違いなかったみたいです。
あれから色々試してました。
実は多重再生の為に、FIFOにコピーするバッファはサウンドデータと別にしていて、
TIMERのハンドラ内で手動でDMAを使ってFIFOにコピーをしてました。
鳴らないのはダイレクトサウンドAの方(BGM用)で、
ダイレクトサウンドB(効果音用)が鳴った時に何故かAも鳴ったので
調べてみると、効果音用のTIMER1が動くと鳴ると解りました。
とりあえず、AとBのFIFOコピーにどちらもTIMER1を使用することで一応解決しました。
タイマーを分けると鳴らなくなる理由がわからないままですが。
もしやDSOUNDCTRL(0x4000082)以外にも、
TIMERとダイレクトサウンドを関連付けるレジスタがあるのでしょうか?
VBAの設定も間違いなかったみたいです。
あれから色々試してました。
実は多重再生の為に、FIFOにコピーするバッファはサウンドデータと別にしていて、
TIMERのハンドラ内で手動でDMAを使ってFIFOにコピーをしてました。
鳴らないのはダイレクトサウンドAの方(BGM用)で、
ダイレクトサウンドB(効果音用)が鳴った時に何故かAも鳴ったので
調べてみると、効果音用のTIMER1が動くと鳴ると解りました。
とりあえず、AとBのFIFOコピーにどちらもTIMER1を使用することで一応解決しました。
タイマーを分けると鳴らなくなる理由がわからないままですが。
もしやDSOUNDCTRL(0x4000082)以外にも、
TIMERとダイレクトサウンドを関連付けるレジスタがあるのでしょうか?
775772
2009/02/15(日) 08:59:40ID:boVc3Mdt 原因が解りました…。
DSOUNDCTRLの初期化にor演算子しか使っていなかったこと
(タイマーを指定するのに、DSOUNDCTRL |= DSOUNDCTRL_ATIMER(0)としかやってませんでした)
自分の使っているgba_sound.hのDSOUNDCTRL_ARESETが
0x0400と定義されていた事(実際は0x0800。0x0400はタイマーの指定に使用)
が原因でした…。
お騒がせしてしまってすみませんでした。
DSOUNDCTRLの初期化にor演算子しか使っていなかったこと
(タイマーを指定するのに、DSOUNDCTRL |= DSOUNDCTRL_ATIMER(0)としかやってませんでした)
自分の使っているgba_sound.hのDSOUNDCTRL_ARESETが
0x0400と定義されていた事(実際は0x0800。0x0400はタイマーの指定に使用)
が原因でした…。
お騒がせしてしまってすみませんでした。
776名前は開発中のものです。
2009/02/20(金) 20:47:15ID:Oxql6lkt GBAとかファミコンは開発環境が強力じゃないから
そういう所でハマっちゃうと、抜けるの大変だよね
そういう所でハマっちゃうと、抜けるの大変だよね
777名前は開発中のものです。
2009/03/10(火) 20:46:38ID:yBs8MUSr GBAではないですが、GBCの板が見当たらなかったので試しに書いてみます。
ttp://nagasaki.cool.ne.jp/xor-a/
ユーザーアプリがロッピーとかで配信出来たらなぁと思うのは愚痴ですが。
ttp://nagasaki.cool.ne.jp/xor-a/
ユーザーアプリがロッピーとかで配信出来たらなぁと思うのは愚痴ですが。
778名前は開発中のものです。
2009/03/20(金) 18:11:44ID:RqzCAhzX GBCの板は昔あったんだが、過疎すぎて落ちちゃった
VCとかに配信できたら面白そうだけどね>自作ゲーム
VCとかに配信できたら面白そうだけどね>自作ゲーム
779名前は開発中のものです。
2009/03/31(火) 03:30:28ID:LhzYAQbh 今まではメインループの始めにV-Blankを待って、それから各処理を行っていたのですが、
開発が進むにつれてV-Blank中だけじゃ処理が間に合わなくなってしまいました。
そこでゲーム処理と描画関係の処理にわけて
while( V_COUNT != 0 ){}
GameProc() ; // ゲーム処理
while( V_COUNT < 160) {}
GraphicProc() ; // 描画関係の処理
と、二つに分けてやる事にしました。
表面上はうまく動いているように見えるのですが、
こういう事をやってしまっても大丈夫なのでしょうか?
開発が進むにつれてV-Blank中だけじゃ処理が間に合わなくなってしまいました。
そこでゲーム処理と描画関係の処理にわけて
while( V_COUNT != 0 ){}
GameProc() ; // ゲーム処理
while( V_COUNT < 160) {}
GraphicProc() ; // 描画関係の処理
と、二つに分けてやる事にしました。
表面上はうまく動いているように見えるのですが、
こういう事をやってしまっても大丈夫なのでしょうか?
780名前は開発中のものです。
2009/03/31(火) 12:58:22ID:WlDU8zsj 分けること自体は問題ないけど
ゲーム処理でV_COUNT != 0を待つ意味は無いよ
描画が終わったらすぐに処理を始めていい
while( V_COUNT < 160) ;
GraphicProc();
GameProc();
ゲーム処理でV_COUNT != 0を待つ意味は無いよ
描画が終わったらすぐに処理を始めていい
while( V_COUNT < 160) ;
GraphicProc();
GameProc();
781779
2009/04/01(水) 03:36:13ID:2baejuDU >780
おおなるほど。
確かにそうした方が処理時間をより多くさけますね。
レスありがとうございます。
おおなるほど。
確かにそうした方が処理時間をより多くさけますね。
レスありがとうございます。
782名前は開発中のものです。
2009/04/23(木) 20:20:06ID:jG2DENZH ここってまだ人いますかね……
自分で作ったプログラムをPogoShellから起動する場合,「終了してPogoShellに戻る」
という機能をつけると便利だと思うんですが,やりかたがさっぱりわかりません.
どこで調べればいいのかご存知のかた,教えてくださいませ.
自分で作ったプログラムをPogoShellから起動する場合,「終了してPogoShellに戻る」
という機能をつけると便利だと思うんですが,やりかたがさっぱりわかりません.
どこで調べればいいのかご存知のかた,教えてくださいませ.
783名前は開発中のものです。
2009/04/23(木) 23:16:10ID:GrL4nFHE Pogoshell resetでググってみた。
ttp://boards.pocketheaven.com/viewtopic.php?p=52627&sid=a2b1ee533e1a9b52029d305b2c611034
になんか書いてあるような気がする。
あとは自分でガンバレ
ttp://boards.pocketheaven.com/viewtopic.php?p=52627&sid=a2b1ee533e1a9b52029d305b2c611034
になんか書いてあるような気がする。
あとは自分でガンバレ
784名前は開発中のものです。
2009/04/24(金) 08:02:45ID:7kCUCgG4 カートリッジのバンクセレクタを元に戻してswi 1, swi 0の順でリセットかければおk
Visoly系(F2A)とEZ/XG-Flashはlibpogoのrestart.Sを使えばいいよ
Visoly系(F2A)とEZ/XG-Flashはlibpogoのrestart.Sを使えばいいよ
785名前は開発中のものです。
2009/04/24(金) 08:52:53ID:oh9KlDGe おお,回答ありがとうございます.
リブート自体はbiosコールでできるのかなとは思ってたんですが,
バンクセレクタ云々というのが俺がよくわかってない点のようですね.
F2Aを使ってるので,とりあえずrestart.sを見てみます.
実はC言語しか知らないので時間がかかりそうですが.
リブート自体はbiosコールでできるのかなとは思ってたんですが,
バンクセレクタ云々というのが俺がよくわかってない点のようですね.
F2Aを使ってるので,とりあえずrestart.sを見てみます.
実はC言語しか知らないので時間がかかりそうですが.
786名前は開発中のものです。
2009/08/16(日) 22:24:12ID:DZlUccKL 圧縮した音楽ファイルはどうやって再生すればいいのでしょうか。wavじゃサイズ大きすぎる。
787名前は開発中のものです。
2009/08/17(月) 12:45:32ID:SfTpCTHN 何で圧縮した音楽ファイル?まずはそこからだけど。
mp3は再生できないよ。
mp3は再生できないよ。
788名前は開発中のものです。
2009/08/17(月) 17:31:39ID:SHxtq19H そもそも、サンプリングされた音の再生がGBAじゃ無理だと思うんだが
スペックが足りない
スペックが足りない
789名前は開発中のものです。
2009/08/18(火) 04:34:22ID:GgRqyFMU それはさすがにGBAなめすぎ。
44kHzで16トラック合成出来るくらいのスペックはあるよ。
44kHzで16トラック合成出来るくらいのスペックはあるよ。
790名前は開発中のものです。
2009/08/29(土) 13:25:09ID:ajW9NjPM >>786
> wavじゃサイズ大きすぎる
というのはちょっと理解が足りないと思います。
wavやaviは単なる入れ物なので、中身が問題。
多分、PCM(非圧縮)のことを言ってるのですよね?
同じwavでも中身がmp3だったりADPCMだったりするならサイズは小さくなります。
IMA ADPCMなら約1/4になるし、デコード処理も軽いのでオススメ。
また、Windows付属のサウンドレコーダーでデータが作成できるので手軽。
http://wiki.multimedia.cx/index.php?title=Microsoft_IMA_ADPCM
http://wiki.multimedia.cx/index.php?title=IMA_ADPCM
が参考になります。
wav内での格納形式は前者のURL、デコード処理は後者のURLを参照して作ってください。
データはwav内のブロック単位で処理し、ブロック内でデータは完結します。
デコード処理はURLに書かれている4行の処理が全てです(最適化についても書かれていますが)。
また、sox等のソースも参考になります。
> wavじゃサイズ大きすぎる
というのはちょっと理解が足りないと思います。
wavやaviは単なる入れ物なので、中身が問題。
多分、PCM(非圧縮)のことを言ってるのですよね?
同じwavでも中身がmp3だったりADPCMだったりするならサイズは小さくなります。
IMA ADPCMなら約1/4になるし、デコード処理も軽いのでオススメ。
また、Windows付属のサウンドレコーダーでデータが作成できるので手軽。
http://wiki.multimedia.cx/index.php?title=Microsoft_IMA_ADPCM
http://wiki.multimedia.cx/index.php?title=IMA_ADPCM
が参考になります。
wav内での格納形式は前者のURL、デコード処理は後者のURLを参照して作ってください。
データはwav内のブロック単位で処理し、ブロック内でデータは完結します。
デコード処理はURLに書かれている4行の処理が全てです(最適化についても書かれていますが)。
また、sox等のソースも参考になります。
791名前は開発中のものです。
2009/09/18(金) 03:08:25ID:si+yuBJ2 効果音の周波数って、どれくらいが良いんでしょうか?
アクションゲームを作っているのですが、
現在8000kHzで同時再生させる為に自力合成で結構処理が重いです。
アクションゲームを作っているのですが、
現在8000kHzで同時再生させる為に自力合成で結構処理が重いです。
792名前は開発中のものです。
2009/09/25(金) 03:10:20ID:JAA61hM3 77.8MHzがオススメだよ。
793791
2009/09/26(土) 02:31:51ID:IAonhfHR794名前は開発中のものです。
2009/09/27(日) 16:50:00ID:fPKTk+yY795791
2009/09/30(水) 04:44:16ID:BCNooBfe なん・・・だと?
出来るかわかりませんが市販のゲームを調べてみます。
出来るかわかりませんが市販のゲームを調べてみます。
796名前は開発中のものです。
2009/10/01(木) 00:00:06ID:NOpZROc8 8kHzくらいで重くなるってことはほとんど無いから
なにかやり方間違ってるんじゃないの?
DirectSoundからサウンド要求があるたびに割り込んでたりとか
なにかやり方間違ってるんじゃないの?
DirectSoundからサウンド要求があるたびに割り込んでたりとか
797791
2009/10/03(土) 05:07:24ID:UpJ1HpGL やっぱり8000Hzは低い部類になるって事ですね。
現在は、合成用バッファを1フレームで消費する量の2倍確保して、
前半を再生中なら後半に書き込み、後半を再生中なら前半を書き込む処理を
1フレームに一度呼び出す方法を取っています。
2チャンネル同時再生するとHBlankの数値が30弱くらいの重さです。
やっぱり何かやり方が間違ってそうなので、ソース見直して見ます。
現在は、合成用バッファを1フレームで消費する量の2倍確保して、
前半を再生中なら後半に書き込み、後半を再生中なら前半を書き込む処理を
1フレームに一度呼び出す方法を取っています。
2チャンネル同時再生するとHBlankの数値が30弱くらいの重さです。
やっぱり何かやり方が間違ってそうなので、ソース見直して見ます。
798名前は開発中のものです。
2009/10/03(土) 21:37:39ID:5IuFgICN 重いというからどれほどかと思ったら2音合成でHBlank30ライン分か。
チューニングしてなければ、それくらいはいくかもね。
軽くポイントだけ。
7884Hzにしろ8121Hzにしろバッファのサイズは4の倍数なのでループを4回分展開出来るな。
10512Hzだと16の倍数になるから、16回展開出来る分更に速いかもしれない。
どっちにしてもDuff's Deviceを使えばいい。
効果音は1フレーム単位のサイズに揃えれば、終了判定は毎フレ1回/チャンネルに抑えられる。
これをやった上でそれ以上速くしたかったら、既成のライブラリを検討した方がいいかもしれないよ。
チューニングしてなければ、それくらいはいくかもね。
軽くポイントだけ。
7884Hzにしろ8121Hzにしろバッファのサイズは4の倍数なのでループを4回分展開出来るな。
10512Hzだと16の倍数になるから、16回展開出来る分更に速いかもしれない。
どっちにしてもDuff's Deviceを使えばいい。
効果音は1フレーム単位のサイズに揃えれば、終了判定は毎フレ1回/チャンネルに抑えられる。
これをやった上でそれ以上速くしたかったら、既成のライブラリを検討した方がいいかもしれないよ。
799名前は開発中のものです。
2009/10/04(日) 23:37:24ID:vY9mcI2T void mixAudio(); // プロトタイプ宣言
void mixAudio() { ... } // コード
があるとして
void mixAudio() IWRAM_CODE;
IWRAM_CODE void mixAudio() { ... }
にして、そのソースを-marmでコンパイルするだけで、おそらく負荷が1/3になる。
手元で軽く組んでみたが馬鹿正直に作って2チャンネル合成でHBlank30弱だったのが
IWRAM_CODEにしたら10弱になった。
void mixAudio() { ... } // コード
があるとして
void mixAudio() IWRAM_CODE;
IWRAM_CODE void mixAudio() { ... }
にして、そのソースを-marmでコンパイルするだけで、おそらく負荷が1/3になる。
手元で軽く組んでみたが馬鹿正直に作って2チャンネル合成でHBlank30弱だったのが
IWRAM_CODEにしたら10弱になった。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国防省が再反論 SNSで公開した音声とは“別の通報”で日本に訓練の時間や海域を通報したと主張★3 [夜のけいちゃん★]
- 男女2人死亡の赤坂・個室サウナ火災、非常ボタン押された形跡…従業員は煙感知の報知機で気づく [蚤の市★]
- 【東京】赤坂サウナ火事2人死亡 サウナ室のドアノブ外れ閉じ込められた可能性 ★7 [nita★]
- BreakingDown選手がくも膜下出血、瓜田純士、平手打ちを行った江口響は「もう格闘技も辞めます。責任取りたいです』とまで言ってきてる」 [muffin★]
- 資さんうどんが「PayPay」の取り扱いを停止 他のキャッシュレス決済は引き続き利用可能 [少考さん★]
- れいわ議員「母親はね、子どもを戦争に行かせるために産んだんじゃないんだよ」 高市総理に“10秒回答”迫り、残り5分は“独壇場”★2 [♪♪♪★]
- 5円玉と10円玉、資源高騰でついに原価突破した模様、日本も硬貨廃止まもなく来るぞ [709039863]
- 【速報】高市早苗、文春砲wwwwwwwwwwwwwwwwwwwwwwwwwwwww [339035499]
- 【高市悲報】「デマ発信」自民党の国光あやの外務副大臣、アカウント消して逃亡! [115996789]
- サウナ火災焼死事件、死亡した夫婦は非常ボタンを押すも扉は開かず蒸し焼きに [963243619]
- 一文字の言葉って10個無いだろ
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ184
