#4お魚サウンド調査中(2006-02/03) | //www.旧型、PSP開発幼稚園.game.jp/(本館)

#4お魚サウンド調査中(2006-02/03)

#4お魚サウンド調査中(2006-02/03)



一番始めに、なんとなくソースを眺めた。FM音源あるっぽい。リンクもされてる。 SNしか鳴らないのはFM入れたら重くてゲームにならんかったから、切ったに決まってる。 ソースはあるんだから、切り口を探さんと、で、68のメモリから辿ってくと、「mem68k.c」 (Z80からでも辿れる筈だが実装してないかもしれないので。しなくても動くゲームも多い)
else { switch(address & 0x6000) { case 0x0000: case 0x2000: zram[(address & 0x1FFF)] = value; return; case 0x4000: fm_write(address & 3, value); return;
ああ、この辺のfm_writeが臭いなぁ。だって、わたしなら、FM_WRITEとUPDATE_ONEを殺すよ。 あと、IRQとか変な割り込みも殺さなきゃなんないかも知れないが、メガドラの場合。そんな仕組みは 無いかもしれない。(なくても実装してある可能性だってある) ほら、YM2203とかあの辺は結構タイマーが複雑で、実機でやたらあの辺弄ると簡単にハングアップする。 (だって、割り込みピンがCPUに直結したりしてるんだよ) YM2612のその辺はよく知らんが、だめだ無駄口だ。却下。
そんで、FM_WRITEの中身。
void fm_write(int address, int data) { int a0 = (address & 1); int a1 = (address >> 1) & 1; return;///////////////////////////////////////////////////////////////////////// 以下略
はい、簡単ですね。 FM音源のレジスタにセットしても、なかった事になってます。ここをまずはずして、コンパイルPSPで実行。
「OutRun2019」でDACがなってるー。 ってことは、取り敢えずFMは、鳴ってないけどOKなんだ。つまり、割り込み系は別として、 基本的なUP_DATEONEはOKって事。(だって鳴るんだもん)ただし、タイマーは別。 タイマーが動作してないから、レジスタに書き込んでも、FM音が出ない可能性はある。
そんで、この辺まで調査したら、めんどくさくなってきたんで、管理人が昔(2週間くらい前?) DGEN100用にカスタマイズしたソースをそっくりコピーして来た。で、コンパイルPSPで実行。 (FM音源はインターフェイスが少ないから、こう言う離れ業が簡単にできる。CPUコアとかだと、 FM音源と違ってインターフェイスが違ってめんどくさいから、こんな簡単にはいかない。 なんせ基本的に、 初期化(タイマー等セット)。 レジスタ読み書きして、(CPUがギャーギャー言ってるのを横流し)READ・WRITE レンダリング。(音源もレンダリングって言います)用はUP_DATEONE この三つしかない。(割り込み系は特殊)   )
音が出ないっていうか、出過ぎっていうか、ガビガビ音がするだけになってしまった。
で、も一回ソースを調査。 うふふ。 お魚さんのサウンドは少し調査しないとうまくリンク出来ない事が判った。 っていうかYM2612UpdateOne呼びすぎ、どれが本物か判らん。 そりゃサウンド入れたら重くなる訳だい。 (2006-02/03-13:40)
この辺で(本物の)頭痛がしてきた。んで、頭使わなくても出来る。部屋の掃除をした。(16:43まで)
そんで、再調査したら、多すぎって事はないみたい。「YM2612UpdateOne」で検索してみた。 おかしいな、ギャーギャー音が出るってのは、直感で、**bufferの受け渡し仕様が変わってると思う。 もちっと調査してみる。DGEN100も調べる。(16:45) 取り敢えず、理屈上「上記fm_write」の中の「YM2612UpdateOne」を殺しても、音はでる筈だから、 まずこれを殺してみよう。(他の「YM2612UpdateOne」があるから大丈夫だ。)

この先、いろいろーーーーーーーーーーーーーーーーやったんですが、やっぱ諦めて。 この辺のVerまで戻します。(つまり何も変わらない)(2006-02/04-10:53) でも、参考としてはとっとこ(上手くいくまで)「MD022A03X.zip」。
取り敢えずこのVerをMD022A03.zipにして別館に上げときます。(予定)(2006-02/04-10:55) FM音源初心者へ、特別レクチャー。 やっぱり、一般人には、きっと何の事やら解からんだろな。多分読んでも、やっぱ解からんって事に なりそーだが、もしかしたら解かるかもしんないので。(人間の理解力はなめたらあかんで)とにかく 説明しとこう。 えーと、FM音源てのは、基本的な使い方として、とにかくCPUがガシガシ音源ポートに書き込む。 もうひとつ応用的な使い方というのがあるが、後ではなす。 (この(アクセス用)ポートは基本的にたったの2つしかない。) さて、メガドラの場合。を理解する為には、音源チップの歴史が重要。 まずPSG。これはAY-3-なんたら(8910だっけ?)互換のチップを差し。 これは76496(や76477)の事とは全く関係がない。 76496はセガマークⅢやマスターシステムやゲームギア等に搭載されている 音源チップ(正確には互換音源)で、世間ではPSGと呼ばれているが、 全く別物のチップである。これは仕様もまったく違うし、そもそも音作りの「思想」自体が全く違う。 言い換えれば、「こういう音をだそう!」っていう設計自体からぜんぜん違うチップなんである。
重要な事。(音源チップの基本知識)

PSG==AY-3-なんたら互換。 76496==SN系の代表チップ(生産量を加味) PSGと76496は全く別物。関係がない。


これが判らない事には、混乱して訳が判らない筈である。
さてPSGとは何か。それは、古くは昔のアーケードゲームに時々乗っていた。 今の子供が遊んで本当に面白いのか?と管理人は懐疑的になる。ふるーーーーい。ゲームたちである。 無駄口WARP はっきりいって今の子供たちあんなの買わされたら、(新作ゲームかと思って、なけなしの こずかいをはたいて買ってみれば、あんなの。しかも値段が結構高い) もし、管理人が、今の子供で、あんなの買わされたら「だまされた!」って絶対に思う。 PS2かせいぜいPSクラスが、「ゲーム」であって、「アドバンス・DS」は携帯だからしょぼくても許容範囲。 って考えが、今の「ゲーム」だろ。それ以外は、当然「ゲーム以外」だ。 当時は「ゲーム」として成立しても、今は「ゲーム」とは認められていない。 これは、あくまで管理人の考えではないぞ。今の子供の代表的な考えはこうだから、今あんな値段で売るの は詐欺と言っているだけなんである。(安ければ詐欺ではない。まあ10本ぐらい入って、出来が良くて そんで¥500ぐらいなら、ついでにコンビニで売ってて、お菓子のオマケとかさ。でも、これなら明らかに 商売としてペイしないだろ。たぶん)まあこの件はどおでもいいが
とにかくアーケード業界は進化した。 FM音源が出てきたからである。旧式のPSGは処分に困った。 で、当時のパソコンに乗せて、在庫処分をする。(正確な表現ではないが半分ぐらいはあたっている 下記のPCが延命したのは、在庫がたくさんあったからである。在庫なければもっと早くFM音源に進化した) MSXとかFM7とかPC6001、PC8001とかPC8801とかX1とか、黎明期のパソコン達には、 音源チップとして、PSG==AY-3-なんたら互換音源が乗ってた。 中にはSN系のチップを乗せた奴もあったが、極少数派であった。(アーケード業界ではSN系は それなりのシェアがあった)
そのうちPC業界も進歩した。上記のPC達は、すべて上位互換となり、 MSX2(OPL、OPLL、一部OPM)、FM77AV(OPN)、PC6001SR(OPN)、 PC8001mk2SR(OPN)、PC8801mk2SR(OPN)、PC9801系(OPN)、 MZ2500(OPN)、X1turbo系(OPM)、X68000(OPM) 等のクラスのPCが出現した。OP#というのは、音源チップ製造元のYAMAHAが付けたあだ名であり、 値段の安い順に、(貧弱な音の順に) (OPL、OPLL(2OP、同時、説明が難しい音)←このチップだけは微妙に時代が違い後で出た。) 「YM2203」OPN(4OP、同時3音)+PSG(同時3音)(←正確にはSSG名前が違うだけで同じもの) 「YM2151」OPM(4OP、同時8音) となっていた。
OPL・OPLLは後のPC「サウンドブラスタ」に搭載され需要をみたすが、ここでは関係がない。 現在のPCでもしつこくOPLLの互換機能が残っているPCも多いが、2OPのFMなんて、 ちゃっちくて聞けない(FM音源とは思えない)程の低音質だ。 セガマスターシステム(又はFMパック)のあの音がOPL。
処でFM音源は、基本的にOPが多いほど、いい音(複雑な音)が作れる。44100kHzのPCMが あるのに、アナログ音源やFM音源をあえてシミュレートする程だ。エフェクタ系も作りこむ。 PCMでエフェクタをかけて録音した音は確かにいい音では、あるんだけれども、人間それだけでは、 満足出来ない仕組みで。結局アナログ音源やFM音源やその他しょぼい音源やTVの音声や ラジオのノイズやレコードノイズや風や雷や滝の音やPCのプログラムやデーターや基盤のROMや とにかくなんでもかんでも音材として、必要なんである。
当時FM7とかの頃。YAMAHAのシンセはDX7で、音源は6OPのFM音源。YMOなどもアナログと 共に使っていたあの音だ。パソコン用の4OPのしょぼい(っていうかまあまあの)FM音源では、絶対に 再現できない、アルゴリズム0の音とか、 説明がぜんぜん終わりません。(1/3も進んでない気がする) とにかくご飯(18:04)
そうそうセガマークⅢの音源はSN系です。(PSGでない) えっと、音源チップの規模は、 SN系 < PSG < OPN(YM2203、FM3+PSG)  です。 とにかくメガドラは、PC8801mk2SR時代の次の時代で、 SN系チップは規模が小さいので簡単に SEGAのカスタムチップ 「315-5313(たくさん亜種がある。これも亜種。一例)==VDP」 内に作りこめるから、無理にYAMAHAからPSG(AY)を買う必要はないし、
メガドラには、セガマークⅢとの互換性の問題で既にSN系が乗ることが決定している。 「OPM」はでかいし、高いから、セガはYAMAHAに特注チップを、頼んだ。 これが、「YM2612」(もったいないから、アーケードでも使用された。同じではないが似たチップで YM2608だっけ。それとも同じだっけ。たとえばコンチ(コンチネンタルサーカスという名前の3Dグラスで みるF1ゲーム)とかナイスト(PS版みたいにショボクてダサくて長くてタルい奴じゃあないぞ。まあ昔の ゲームだからそこそこだが。テンポがいい)とかのタイトー「Zシステム」基盤)
仕様は一チップに「OPN」2つ乗っけてくれ。(同じ回路を二組焼きこむ) それぞれのOPNにSSGって名前のPSGが載ってるがそいつは(SNがあるから)要らん。 その分ダイサイズ小さくして歩留まり上げて、(沢山注文するから)値段下げてくれ。 SSGカットしても、(回路が不定形なので)まだ少し余るから。そこには勿体無いから、 代わりにDACを乗せてくれ。8ビットDACでいいから、アッテネーター三つも作る位の 回路規模があれば(PSGの事)8ビットDACぐらい簡単だろ。
と言う訳で、誕生したチップだったのです。
だからメガドラの音源は、 1.SN系チップ(マークⅢ互換) 2.OPN(その1)但しPSG部分はDACに改造。 3.OPN(その2)但しPSG部分はDACに改造。
の3種類の音源がソフトウェアーからは乗っている様に見えるのです。(1.はVDP、2+3は、YM2612) 長かった。やっとここまで辿り着いた。 処で、2612の改造DACってPSGの匂いがぷんぷんする。前に管理人は、そおいえば さとうたつゆき様の、MAMEとかでみんなが使ってる。AY-3-なんちゃら(PSG)の初期化テーブルも、 実機と違うんだよ。測定してみ。違うから、大体あってるけど、あんな単純な関数じゃあないよ。どうせ 人間の耳にゃあ聞き取れないからいいけど。PSG使ってる限り、ベリファイは無理だな。音の出力を録音し、 「実機の出力」と「エミュの出力」との差を測定する技術。FM音だけなら既に可能な技術だ。 PSGのアッテネーター出力。15段階しか(内部32)ないんだから、オシロでちゃんと測定した人がいて、 (1990年4月号日本ソフトバンク刊Oh!FM、戸田 浩様)その記事によると、
レジスタセット値101112131415
測定値10141927375270100133192256
これは、確かに正しくて、管理人のデビルイヤーで確認しても、正しい。(多分誤差せいぜい±1ぐらい) 誤差は最大に見積もっても±2~4ぐらい。これ以上って事はありえん。 (V13が128の可能性は絶対にありえん!64っていう音も絶対にないぞ!) (ここまでぐらいしか自信がない。管理人の耳だって精度が有限だ。 さすがにlogで256段階もあるわけない(あるかも)) が、ひどく実際とずれている事はなく。測定に失敗している形跡はない。(誤植の可能性もない) MAMEの関数では明らかに導き出せないということが判る。(定数変えても無駄だよ) 特に256、192(!!)、133(?)、100(これも近い)のあたりは絶対だ。保証する。 (256は255より256っぽい) 色々値を変えて聞き比べてみたが、どう考えてもあそこ(V14)は192!!。 V13だって128なんかじゃあ絶対にない。 何も管理人のデビルイヤーを駆使しなくてもV9以上の違いは常人にも分かる筈。 (ちょっと詳しいひとなら)(下は人間の耳だから所詮精度がないが上はよく判るだろ) MAMEの関数では酷くずれるだろ、確か。 この特性をごにょごにょすると、もしかしたら、2612のDAC特性が割り出せるかもしれん。(歴史から) まあこの件は保留だが。わたしはこの16段階のテーブルを元に32段階に拡張して、 (PSGは内部32段階の為。LFO等)MAME等で使っている。(異様に音が良くなる) ちなみにこの測定した人は、独自の理論を元に、推定値を出している。 管理人のデビルイヤーでこの推定値と上記の測定値を聞き比べてみたが、 (多分常人には違いが判りにくいかもしれんが、何度も聞けば判る筈。...と思いたい) この推定値は間違っている。ということは理論が正しくないか考慮に入れてない要素がある。 という事だ。(たとえばフィルターでなまるとかさ、簡単な積分回路になっちゃうとか、 その特性がリニアでないとか) 一つ前の世代の音源IC) レジスタに書き込んで 無駄口WARP2
(ここにのメガドラの基盤VERは「M5VA1、837-6832」あるけど、XTAL一個(53.693175MHz表記) 使いのタイプだから中期?でも1988年。シルクから多分12月製造。 例えばこれでは315-5313==VDPの95ピンがSNの出力(アナログ)だったよ確か。 とにかくこのピン付近だった。 メガドラハード基礎知識。 とにかく以下のもんしかついてない。 スイッチ、コネクタ、コンデンサ、抵抗、ダイオード、フィルター、基盤、ねじ。 315-5313==VDP。 315-5308==Z80用バス調停関連(I/Oチップ)。 315-5309==68000バス調停関連(I/Oチップ)。 315-5339:よくわかんない。(Z80の関係?プロテクト?リージョン?)初期の奴にはなかった。 BIOS-ROM Z80 共有メインRAM 68000 デュアルポートVRAM XTAL:53.693175MHz YM2612(音源チップ) OPアンプ。(背面のモノラル出力用) SONYのしょぼい(ステレオ)デジタル(電流増幅)アンプ(使い方間違ってる。ウォークマン用?) SONY、CXA1145、(RGBをビデオに変換するチップ。専門用語ではRGBエンコーダ。これも使えないことはないが、使い方厳しい。というのはセガVDP315-5313はRGB出力が5V。つまり0V~5V。アンペアは知らんが。対するこれは民生ビデオ信号用で、±0.5Vp-p。つまり-0.5V~0.5Vの波形で入力してくれ、ってチップ。VDPの27,28,29ピン出力を簡単な抵抗による分圧(5.6kと4.7kと1.2kと高周波カット用のコンデンサ)で流し込んでるが、 +5Vレベル                         値不明なコンデンサ(高調波カット用) VDP出力--+ーーーーーR(4.7k)ー+ーーー||ーーーー>CXA入力(Vpp)±0.5          |                |          R(5.6k)           R(1.2k)          |                |          ?(多分GND)        GND こんなやりかたじゃあ、メガドラノイズがすさまじいんだから、ACでは良くっても一体基盤じゃあ無理だよ。 画質改善なら、VDP5Vから専用のアナログ別基盤へ入力し、ここの1.2kや5.6kは特にやばそうだ。 4.7kと1.2kは物理的にとても熱くなる位置に配置!(温度によって抵抗値って変わるの。 既に精度うんぬんの話じゃあないぞ)) ああ、また無駄口か。そおいえばSFCもCXA1145使ってるけど、VDP出力が(多分電圧でなくて電流) ここまで凄まじくないか、根本的に回路が違うか。あるいは単に熱くならないか。消費電力の桁が違うか。 68000食いそう、 <続く。そのうちね>