MAGiC TOUCH - GBA Development Old#01
*GAME Development log #01
[Index / Back]

PCM Driver Test V0.003. (Jul21,2003)
[
DownLoad (69kBytes) ]
実機で動作するようになりました。原因はDMAでした。くわしくはreadme.txtをご覧ください。

やっとうごいた・・・。長かった。
PCM Driver V0.002 Sample 曲は、
Ys-2から、サルモンの神殿
そろそろ違う曲にしたいなぁ。

実機動作に加え、KeyON時のノイズとモタツキは、ほぼ解消されました。

やっぱりDMAプログラムはむづかしい。


PCM Driver and Visual Boy Advance. (Jul 6,2003)
[ No Object ]
昨日(July5,2003) Visual Boy Advance v1.6betaが発表された。VBAのWebPageには、こう書いてある。

>------------------------------------
>Saturday, July 5 2003 - Version 1.6 beta
>
> Please download version 1.6 beta and give it a try.
> IT has several changes which I will detail once it gets released next week.


>------------------------------------
>2003年7月5日(土曜日) バージョン 1.6β
>
> バージョン1.6ベータをダウンロードして試してみてください。
> いくつか変更点あり。来週あたりリリースするけど、詳細はそのときにでも。

 ってことだそうです(意訳しすぎ)。

 で、何が変わったかのかなーと思ったら、・・・下のPCM Driver Test V0.001/V0.002の動作が実機と同じ動作になりました!
 すなわち、VBA1.5.1まではPCM Driverがエミュレータ上では正常動作していたものが、v1.6betaでは動作しなくなったわけです(苦笑)。

 実機とエミュレータが同一動作をするということは、これでDriverのBugの究明が楽になりました。いままでは、コンパイルしたものをFAで焼いて実機で試していたため、かな〜り面倒だったのです。

 できればどの辺を修正したかのドキュメントをつけておいてほしかったけど、Betaだし。たぶんDMA周りの挙動か、割り込みまわりの挙動かが実機と同じ方式になったのではないかな?そういうことで、多分v1.6beta以降では、以下のプログラム(PCM Driver)がうまく動きません(変なノイズが出る)のでご注意ください。

 さて、DMAまわり検証してみますかね。


PCM Driver Test V0.002. (Jun30,2003)
[
DownLoad (61kBytes) ]

Sorry,does't operate in real hardware.Recommend Visual boy advance v1.5.1 or early version.
実機での動作はサポートされません。Visual Boy Advance v1.5.1かそれ以前のエミュレータを使用してください。


PCM切り替えが入りました。またPCM音程変換方法を変更。v0.001にくらべると、かなりPCMDriverっぽくなった気がしますが、私の自己満足でしょうか?(笑)
このプログラムに関してはV0.001同様、VisualBoyAdvance v1.5.1(WindowsXP)でのみ動作確認をしています。
実機での動作はサポートしていません(原因調査中)。

実機で動かないよ〜、なぞ〜。
PCM Driver V0.002 Sample 曲は、
Ys-2から、サルモンの神殿
V0.001との比較のため同じ曲にしました

KeyONのミスが時々起こるのと、全体的なもたつきが気になります。

それと、11kHzなので、音悪いです。でも、全体的に見て、V0.001に比べると飛躍的(?)に、良くなったのではないかと。


やっぱり割り込みプログラムはむづかしい。


PCM Driver Test V0.001. (Jun14,2003)
[
DownLoad (32kBytes) ]
Sorry,does't operate in real hardware.Recommend Visual Boy Advance v1.5.1 or early version.
実機での動作はサポートされません。Visual Boy Advance v1.5.1かそれ以前のエミュレータを使用してください。


何とかPCM合成ができたので暫定発表。いまのところ音量設定や音色切り替えが未実装です。
このプログラムに関してはVisualBoyAdvance v1.5.1(WindowsXP)でのみ動作確認をしています。
実機での動作はサポートしていません(原因調査中)。
音色は8bit/11kHzPCM Octave4 A(ラ)の音を音程変換して使いまわしています(一応ピアノ音)。
PCM合成。いろいろと面倒です。かなり処理をはしょり気味(苦笑)
PCM Driver V0.001 Sample 曲は、
Ys-2から、サルモンの神殿
名曲であります。作曲は永田英哉氏。

Music Driver Test V0.02のMMLデータを使用しています。

GBA Performance Meterで紹介した処理負荷メータを使ってます。

PCM MusicDriverとして動作させるには、今後かなり手を入れないといけないでしょうね。



GBA Performance Meter. (May30,2003)
[ No Object ]

MAGiC TOUCH BBSのほうで、質問が来たのでGBAの処理負荷の見方など(bcgさん、使用させていただいました。)。

>TITLE: CPU使用率について
>No.000365 AUTHOR:bcg DATE:[(Thu)May29.2003-0:21:29]

>それで1つ、質問なのですが…
>この「CPUの使用率」というのは、どんなロジックで算出されているのですか?
>理屈の部分だけでも良いので、教授願えませんでしょうか。

 解説の前に前提として、「ここでいう処理負荷とは 1Sync(約1/60sec)でどのくらいのCPUを使用しているか」をあらわすとします。それ以前に、VSyncってなに?というかたは、先にコチラで、GBAについていろいろと勉強していただくことを強くお勧めします。
それでは解説始めます。

 たとえば、

typedef volatile unsigned short vu16;

void VSyncWait()
{
    while(   *((vu16*)0x04000004) & (1<<0));
    while(!((*((vu16*)0x04000004) & (1<<0))));
}

void main()
{
    while(1)
    {
        VSyncWait();                // VSyncWait
        GameMain();                 // Main Program
        print(*(vu16*)0x4000006);   // VCount Print
    }
}
SampleList[A]

 というプログラムがあった場合、print()のところで現在のVCountが取れます(注:このままではコンパイルは通りません)。
 GBAの場合この値は、表示期間(0〜159) + 帰線期間(160〜228 [+68]) となっています。
 もしも戻り値が160〜228以内ならば、帰線期間内に処理を終えたことになります。0〜159までの場合には、表示期間に差し掛かっています。

 このプログラムの使用例として、下のほうで紹介している Music Driver Test #1/#2で、画面右上に表示されている 16x というのがこのVCountです。この値はいま画面のどこを書き換えているのかを知るための値です。
 表示期間が終わったところが必ず160になりますので MusicDriverでは、ほとんど処理を食っていないというのがわかると思います。表示期間や帰線期間の詳しいことについては、
GBAプログラミング研究所さんの 基礎から学ぶGBA のコーナの Step19 Blank&HBlank の項目に詳しく書いてありますので、そちらを参考にしていただくと良いと思います。ちゃんと説明するとCRTの描画方法から説明しないといけないので割愛。

 また、数字的にいわれてもよくわからん〜って方は、以下の方法がお勧めです。

typedef volatile unsigned short vu16; 
typedef volatile unsigned long vu32; 

#define RGB(_r,_g,_b)    (((_r)<<0) | ((_g)<<5) | ((_b)<<10))
#define REG_DISPCNT(_m)  (*(vu32*)0x4000000=(_m))

void VSyncWait()
{
    while(   *((vu16*)0x04000004) & (1<<0));
    while(!((*((vu16*)0x04000004) & (1<<0))));
}

void main()
{
    REG_DISPCNT(0);                            // Screen Init
    while(1)
    {
        VSyncWait();                           // VSyncWait
        *(vu16*)0x5000000 = RGB(31, 0, 0);     // * BackColor,Set to Red
        GameMain();                            // Main Program
        *(vu16*)0x5000000 = RGB( 0, 0, 0);     // * BackColor,Set to Black
    }
}
SampleList[B]

 

 // *BackColor のコメントのある行に注目してください。こうすると、GameMain関数の処理負荷に応じて画面のBG色が変化します(注:このままではコンパイルは通りません)。もしもBG色が黒いままならば帰線期間中に処理が終わっています(画面外で色が変化しているため)。
 しかし、帰線期間を超え表示期間に差し掛かっていた場合、画面の(上部から)一部が赤くなります。少しでも画面が赤くなれば、68(帰線期間)÷228(表示+帰線 期間)≒0.298... 約30%以上の処理負荷がかかっていることになります。それ以降この赤の範囲が処理負荷(30%〜100%)となります。もしも画面いっぱいに赤くなった場合の処理負荷は100%以上と、なります。

 どうしてこうなるかは、考えてみてください。それほどむづかしくないと思います。しかし・・・・自分で書いていてなんだかよくわからなくなってきたので、この辺で。説明下手ですいません(汗)。

 ちなみにきっちり時間を計りたいときには、タイマーを利用してくださいね。


PCM Synthetic Sound Test. (May26,2003)
[ No Object ]

先日からGBA上でPCM合成の実験を行っていた。割り込みで常時PCMを再生しつつ、音声バッファにPCMを合成して多重再生ができるところまで完成。しかし、たかだか4重和音でCPUの50%の処理を持っていく。原因は簡単で、Cで書いたルーチンが冗長であるということ。このレベルのことをするとなると、アセンブラは必須だろう。
 一昔前のコンピュータ環境を経験している身としては、下のGB互換MusicDriverなどは、割り込み内のプログラムをCで記述しているということ自体、かなり気持ちが悪かったりする。また、のちのちはコチラと統合したいと考えている。

 なんとか8重和音くらいは出したいと思いつつも、私的にコレからますます時間が取れなさそうで。たぶんまじめに合成している部分をはしょれば、もう少しまともになりそうな予感。現在単純合成なので、ノイズが載りやすくそのあたりをどうするかも思案中。問題は山積みだが、今年中にはコレを使って音楽ドライバーを完成させたいものである(おぃおぃ)。


Music Driver Test V0.02. (May 8,2003)
[
DownLoad (28kBytes) ]


いそがしい。というより、頭の中の整理が付かない。
 現実逃避するために、ちょっとバージョンアップ

Sample 曲は、
Ys-2から、サルモンの神殿
名曲であります。

作曲は永田英哉氏。原曲を脳内変換しつつ聞いてみてください。

 エミュレータで各チャンネルを単独で鳴らすと、音色が切り替わっているのがわかると思います。


 それと、ちょっとしたGBA開発に関する資料の紹介(直接リンクはしていません)。

  アーム株式会社[https://www.jp.arm.com/]
   -テクニカルサポート
    -ドキュメンテーション [日本語版]
     -アプリケーションノート
      -アプリケーションノート34 ARMで使用する効率的なCの記述

 トップページから上記の階層をたどっていくとアプリケーションノートというページがあります。ここに ARMで使用する効率的なCの記述 というPDFがあるのですが、なかなか勉強になります。GCCを使用してのレポートではないので、記述されている項目がすべてGCC(DevkitAdv等)に該当するわけではありませんが、気に留めておくと良い事など書かれています。 また、アプリケーションノート34以外のPDFもなかなか勉強になります。


Music Driver Test V0.01 Source Code. (May 4,2003)
[
DownLoad (24kBytes) ]


 ソース公開の要望がありましたので、v0.01の画像表示部分をはずしたドライバー部分の公開です。テストで作ったものなので、あまり見やすいプログラムではありませんが、制作期間4日ということで、お許しを。
 またこのプログラムは無保証です。このプログラムに関しての質問は一切受け付けませんのでよろしくお願いします。


Music Driver Test V0.01. (Apr21,2003)
[
DownLoad (27kBytes) ]


 無いものは作る。そんな感じで今こんなの作ってます。


先日、某ミーティング(呑み会ともいう)会場での会話

A .. AND
Y .. YuYou師匠(仮名、偉い人)

A 「あ、そうそうYuYou師匠、GBA用のサウンドドライバー書きません?」
Y 「ん?それって需要ある?」
A 「う〜ん、あんまり…無いかも」
Y 「んじゃ、イヤ(即答)」
A 「あぅ〜〜」

 と、見事に交渉決裂したので、自分で作ってみました。せっかくNAGDrv Advance作ってもらえるかと思ったんだけどなぁ。

Sample 曲は、
Dragon Slayer IVから、Ending Theme.
名曲であります。

GB互換音源用です。Driver 制作期間4日なら、こんなものでしょう。現在、音色切り替え製作中。

 DirectSoundは、PCMの合成法がよくわからんので研究中。なんとなくはわかる気がするんだけど、どっかにPCM合成の資料ないかしらん。

 


[Back]

©Copyright MAGiC TOUCH All rights reserved.