#3MAMEコンパイル(2006-02/14)
■ずっと前のあらすじ
WEB徘徊してたらドイツのサイト(PSP ARCIVE)発見。サイト内検索で「SRC」で、
検索し、ソース21個GET。内容がよく解からんサンプルをコンパイル実行したら、
ボクセルフィールドもどきだったので、少し改造して遊ぶ。PSP_MAME04のソースも発見。
■前々回までのあらすじ
欲張っても仕方がないので、ターゲットをZシステムに決めるも68000が二個なので、
始めの実験(PSPで満足な速度が出る)には、ちとキツイ(管理人技術では)と思い、
ターゲットをシステムⅠ専用エミュとする。(8ビットx4個)
PSP_MAME04のコンパイルにはMAME0.97Sがいるが、最新版はMAME1.04Sだし、
(公式ページの)オールドアーカイブは最新が0.69Sで途中がWEB徘徊してみたがソースは
手に入らない。
MAME1.04Sでトライ→MAMEの仕様が新しく移植が大変そうで断念。
MAME0.69Sでトライ→MAMEの仕様が古くて移植が大変そうで断念。
仕方なく管理人の部屋をあさり、MAME0.65S、MAME0.72S、MAME0.82S、MAME1.02Sを
発見。0.82Sと1.02Sの間にもう1つDLしたVERがある筈だが、出てこない。
MAME0.82Sでトライ→なんとかなりそうな雰囲気なので今日の日記はこれ!
前々回:息抜き第2弾MAMEで行ってみよう。(2006-02/13) 前回:#2息抜き第2弾システムⅠで行ってみよう。(2006-02/13)
ふぅ。あらすじ纏めたら、疲れたよ。(今8:30)アメブロメンテ15日までなんだってね。
まさかそんなにかかるとは夢にも思わなかったんで、時間は読んだけど、日付は見もしなかった。
おし、今日はちゃんと(?)起きれたぞ。昨日のことは忘れたから(記憶力いいんじゃなかったの?)
すこし復習。(しばらくおまちください)ピンピロ♪ピンピロ♪ピンピロピン♪...
■昨日はnamcos1.makに
SOUNDS+=NAMCO_CUS30@
を追記したとこで、寝たんだっけ。
ker'
src/mame.c:2262: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2262: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2264: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2268: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2270: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2278: error: 'struct MachineSound' has no member named 'routes'
src/mame.c:2280: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2281: error: 'struct MachineSound' has no member named 'route'
src/mame.c:2281: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2283: error: 'struct InternalMachineDriver' has no member named 'spea
ker'
src/mame.c:2286: error: 'struct MachineSound' has no member named 'route'
src/mame.c:2290: error: 'struct MachineSound' has no member named 'route'
make: *** [obj/namcos1psp/mame.o] Error 1
InternalMachineDriverとMachineSoundの仕様が変わってますな。
MAME0.89のタイプと、
MAME0.97のタイプと、
どちらに統一しようか、を考える為にソースを見る。
「mame.c」と「mame.c」ね。(本当は「mame.h」と「mame.h」で比較すれば一発だが、肝心のMAME0.97の「mame.h」が無い)
管理人が弄ったMAMEは0.89まで。MAME0.97のソースは見た事がない。
MAME0.97には、管理人が見た事のない(~0.89までは無かった)
MachineSpeaker型の構造体が追加されてる。
これは、どっちに仕様を合わせようか、
MAME0.89にあわせる:変更部分が少なくて済む。が、最悪PSPで音が出なくて嵌まる可能性が...
MAME0.97にあわせる:変更部分が多いかもしれない。が、最悪PSPで音が出なくて嵌まる可能性が...
どっちにしても、音が出なくて嵌まる可能性はある訳か。
MAME0.89式の場合:097の仕様を102から想像し、変更。
MAME0.97式の場合:102の該当部分を097を想像し、移植。
どっちが楽かなぁ。やはり、MAME0.97はPSP実績があるんだから、たとえ、どんなに回りくどくても
こっちかな。どっちも嵌まるかもしんないから微妙だな。とりあえずバックアップかもな。
■うーん、MAME0.89とMAME0.97を比較するだけなら、簡単だけどそれにMAME1.02が入ると、
何がなんだか判らなくなっちゃって疲れちゃうよ。
MAME089対MAME097
MAME089対MAME102
MAME097対MAME102
の3種類の検討方法に切り替わる為。
それでもMAME097のファイルが全部あれば、簡単だけど。殆どないから推測しなくちゃいけないし。
■
src/mame.c:499: warning: implicit declaration of function 'printfnw_'
src/mame.c: In function 'run_machine_core':
src/mame.c:568: warning: implicit declaration of function 'pgFillvram'
src/mame.c:568: warning: implicit declaration of function 'pgScreenFlipV'
src/mame.c: In function 'vh_close':
src/mame.c:868: error: 'struct RunningMachine' has no member named 'uirotfont'
src/mame.c:870: error: 'struct RunningMachine' has no member named 'uirotfont'
src/mame.c:871: error: 'struct RunningMachine' has no member named 'uirotfont'
src/mame.c: In function 'init_buffered_spriteram':
src/mame.c:1094: warning: cast increases required alignment of target type
src/mame.c:1095: warning: cast increases required alignment of target type
src/mame.c:1096: warning: cast increases required alignment of target type
src/mame.c:1097: warning: cast increases required alignment of target type
src/mame.c: In function 'updatescreen':
src/mame.c:1395: warning: implicit declaration of function 'sound_frame_update'
src/mame.c: In function 'machine_add_speaker':
src/mame.c:1573: error: 'MAX_SPEAKER' undeclared (first use in this function)
src/mame.c:1573: error: (Each undeclared identifier is reported only once
src/mame.c:157^C
src/mame.c:1573: error: for each function it appears in.)make: *** [obj/namcos1p
sp/mame.o] Interrupt
あったあった。'uirotfont'がないってエラーメッセージ。実はMAME0.89SとMAME1.02Sでは、
MachineDriverの名前が変わってて、要らん心配をしたんだが、こういうエラーが出るってことは、
少なくともMAME0.89SとMAME0.97SではMachineDriverの名前は同じって事だな。
安心安心。変更部分が少なくて済む筈だ。
MachineDriver構造体のメンバuirotfontについては、元のMAME0.97Sにはあったが、PSPへの移植に
際して、「こんなもんいらん」という事で。取り外された模様。
■MAME初心者向け特別レクチャー:
uirotfontっていうのは、アーケードゲームには、画面を横にして遊ぶのと、縦にして遊ぶのがあるよね。
MAMEのメニュー画面用のフォントは、MAMEが独自に定義してるんだけど。「usrintrf.cのuifontdata」
縦のゲームなら縦用の(メニュー専用)フォント。
横のゲームなら横用の(メニュー専用)フォント。
を用意する必要がある。
(が、PSPでは必要がない。PSPを90度回転させれば済む話だ)
ちなみにMAMEでの実装は、
元データー(ROM)→転送→横フォント(RAM)
元データー(ROM)→回転し転送→縦フォント(RAM)
となっていて。
...まあ、ここまで説明すれば解かるじゃろ。(管理人無駄口多い為、自粛)
■参考にしている「MAME097PSP」の「mame.c」ではここが外れてるが、管理人の持ってきた。
MAME089Sの「mame.c」では残ってるので、コメントアウト。
/* free the font elements */
if (Machine->uifont)
{
freegfx(Machine->uifont);
Machine->uifont = NULL;
}
#if 000
if (Machine->uirotfont) 「mame.c」ではここだけ(開放だけ)だよ。
{
freegfx(Machine->uirotfont);
Machine->uirotfont = NULL;
}
#endif
それから、管理人。勘違いしてたみたい。実際は、
MAME089Sでは、MachineSpeakerはあった。
MAME097PSPでは、MachineSpeakerはない。
逆だな。
これは単純に要らないから廃止にしたんじゃろ。多分。
コメントアウトして様子をみよう。(多分それでOKの筈)
「mame.c」の
machine_add_speaker();
machine_find_speaker();
machine_remove_speaker();
を#if 000から#endifで、コメントアウト。
/* consistency checks on sound and speakers */から
end_resource_tracking();の直前まで
を#if 000から#endifで、コメントアウト。
■
src/mame.c: In function 'init_machine':
src/mame.c:457: warning: implicit declaration of function 'init_memcard'
src/mame.c: In function 'run_machine':
src/mame.c:499: warning: implicit declaration of function 'printfnw_'
src/mame.c: In function 'run_machine_core':
src/mame.c:568: warning: implicit declaration of function 'pgFillvram'
src/mame.c:568: warning: implicit declaration of function 'pgScreenFlipV'
src/mame.c: In function 'init_buffered_spriteram':
src/mame.c:1094: warning: cast increases required alignment of target type
src/mame.c:1095: warning: cast increases required alignment of target type
src/mame.c:1096: warning: cast increases required alignment of target type
src/mame.c:1097: warning: cast increases required alignment of target type
src/mame.c: In function 'updatescreen':
src/mame.c:1395: warning: implicit declaration of function 'sound_frame_update'
src/mame.c: At top level:
src/mame.c:1636: error: conflicting types for 'machine_add_sound'
src/driver.h:274: error: previous declaration of 'machine_add_sound' was here
src/mame.c: In function 'machine_add_sound':
src/mame.c:1644: error: 'struct MachineSound' has no member named 'clock'
src/mame.c:1645: error: 'struct MachineSound' has no member named 'config'
src/mame.c:1646: error: 'struct MachineSound' has no member named 'routes'
make: *** [obj/namcos1psp/mame.o] Error 1
ううぅ間違えた。
MAME089Sの「mame.c」と
MAME097PSPの「mame.c」を取り違えてた。
さっき逆だと思ったのは逆ではない。つまり廃止されたんじゃなくて、追加されたって事だ。
でも、このエラーメッセージもあとで役に立ちそうだから、ここにメモしとこう。
まてよ。って事はあれだな。
MAME0.89S自体に「uirotfontを開放しないで終了しちゃうバグ」があったって訳か。
まあ、ドスプロンプトでMAMEを実行させて終了したら普通はOSに戻るから影響は無いんだがな。
(Winやlinuxやその他のOSでは、空きリソース回収するから何も問題ない)
ドスプロンプトを終了させないで、これをしつこく再起動して終了を延々つづけると、
MSDOSが何もしないから、1回ごとにuirotfontの分だけ、メモリが狭くなる訳か。
uirotfontのサイズなんて微々たるもんだから、これでOSを落とすには何万~何億回も、
起動終了を繰り返さないと逝けないがな。
■
(DOS版MAMEについて初心者レクチャー:
なんでDOS版のMAMEなんてもんがなんであるの?
それってDOS用なんでしょ?
Win版は当然DirectX(Draw)でVRAM直描きだよ。
何が不満なの?
はい、MAMEについて全然判っとりませんね。
まずDOS版MAMEはDOS用ではありません。途中までは確かにDOS用でしたが、現状、本当に
ネイティブDOSからは起動できたり、できなかったり、いやまず間違いなく起動できません。
仮に運良く起動できたとしても、終了し。そのまま再起動するのは不可能であります。
あれは、実はWin用なんです。(正確に言うとWinのDPMIマネージャでしかテストしてません。
フリーのDPMIマネージャでは動作も出来ない様です。)
だからさあ。どおせWinで使うんでしょ?だったらなんでWin版使わない訳ぇ?
そもそもWinのドスプロンプトってコマンドプロンプトだから、ぜんぜん駄目なんじゃないの。
いいえ、Winのドスプロンプトはコマンドプロンプトの振りをしており、通常はWinがフックしてしまう為。
本当にコマンドプロンプトみたいになってしまいますが、MAMEではハッカーがハックした対策コードを
実装する事により。コマンドプロンプトではなくなって、実質ネイティブDOSとして動作できます。
メモリが最大まで利用できるDOSってことですね。
(でもXPの場合は、もしあれが2000/NT系のメモリ管理なら、最大までメモリを利用できるかどうか
解かりませんね。管理人には。)
えーMAMEのソース全部読んだけど、そんな対策コードなんて無かったよ。
はい、MAMEのソースリストには含まれません。
しかしDOS版のMAMEは、「Allegroライブラリ」という物を使用していて、
その「Allegroライブラリ」中に対策コードは実装されています。
「I love gates」とかそんなような名前で検索すれば、見つかると思いますよ。
じゃあWin上で実質ネイティブDOSが動くとしてWinのDirectX(Draw)でVRAM直描き版より、
どんなメリットがあるっていうの?同じか危険なら価値ないでしょ?
はい、メリットはあるんです。
えええ、DirectXだよ。くれって言えばVRAMくれて直描き可能なんだよ。今はなきIM使えば、
バッファに直接3Dコマンド(のようなもの)送り込めるんだよ。メリットはあってもデメリットなんて
考えられない。
MAMEでは基本的に3Dコマンド直接駆動方式は実装されていません。3Dコマンド部分も全て
含めてチップレベルでのエミュレートです。したがって3Dバリバリで、テクスチャーもグーロや半透明も
ステンシルバッファさえも実装してあり60fpsでバリバリ動いていても。それは全て2Dで描画しています。
VRAMは確かにどちらも直描きなんですが、そんな事が問題だったのはDOOMが出た頃のPCのような
とんでもなく古い時代の論議だったりします。
別にMAMEにとって見れば全て2Dにしてレンダリングし出来上がった結果
(これは多色高解像32ビット色640x480であったとしても、現在のPCのバス転送速度からみれば、
たいした量(転送時間)ではない)
をVRAMに流し込めばいいだけなので、無理にDirectXを使わなくても、blitのバッファに直書きする方式でも。
60fps以上叩き出せるので、実はなんの問題もないです。blit転送は裏でハードウェアーアクセラレーションが
効きますし。これはこれでもったいない使い方ではないんです。
(ただしこの場合、RAM→VRAMの実装方式に制限されてしまうが。DirectXを使わないと
VRAMにバッファが本当に取れたかどうかが判らない)
(DirectXで真にありがたいのは、DirectXが返すエラーメッセージで、「やったーVRAMにバッファ取れたにょ」
とか「ごめーんシステムメモリにしかテクスチャ取れなかったけん」とかいう一見地味な機能であって、
MSの宣伝とは全く関係がありません。それによってプログラマーがパフォーマンスの対策を立てられる所に
真の価値があります。もし結果が全てDD_OKになるのなら、DirectXいらないです。)
そんな事よりもパフォーマンスの鍵を握るのが、メモリ管理だったりします。WinとDOSでは基本的に
メモリ管理が違うためパフォーマンスに、差がでます。
<続く>
ううう管理人疲れて書けませんが、最近のPCではまた別の事情があり、
やっぱりDOS版は不要となりつつありますが、不要になった訳ではない所が面倒な所。
別に互換性の観点からのみ(そういう意味も一応あるが)DOS版を残してある訳ではなく。
(MAMEは前衛的だから、もしそうならメインのコードからバージョンUPで、
古いコードをすべて削減してしまう)
現在でも色々どろどろした裏事情がある訳なんです。詳しいことはハマって調べてね。
)
■
前記のスピーカー関連は元に戻さないで取り敢えずこのままにしておく。
もしかしたらここは、本質的に不要かもしれない。保留にして先に進もう。
さて、ワーニングメッセージ。簡単な所から。
'printfnw_'はデバッグメッセージの出力機能みたい。これのプロトタイプ宣言がない。
気分としては、driver.hに追加したい所だが、
(MAMEはdriver.hにさえ追加しておけば、あらゆるファイルから見える構造になっている。)
もちっとMAMEらしくosd_cpu.hに追加した。
(osd_cpu.hは名前はともかく(本当はインテル/モトローラ変換だけ吸収したかったらしい)
実際のMAMEは機種別の対策部分の意味合いが強い。
今はどうなってるのか知らんがWin版が始めに出た時に、真っ先にここに当てられてしまった為。
でも、現状のMAMEでは、改善されてるみたい。インテル/モトローラ変換関連しか入ってない
みたいだから、どっかに引っ越したらしい。管理人には引越し先が見つけられない為。
古いやり方で勘弁してね。driver.hのどれかのファイルなんだろうケド。)
前に殺した部分の直下。
///#define isunordered(x, y) __builtin_isunordered(x, y)
extern int printfnw_(const char *format);
こんなん。ついでに、pgFillvramとかpgScreenFlipVもでてるから、こうしよう
前に殺した部分の直下。
///#define isunordered(x, y) __builtin_isunordered(x, y)
extern int printfnw_(const char *format);
#include "pg.h"
さらに"pg.h"を多重インクルード防止の為対策コード(?)を追加。
#ifndef _PSP_PG_H
#define _PSP_PG_H
ここにもとの"pg.h"の中身をいれる。
#endif /* defined _PSP_PG_H */
■さてと、次はMachineSound構造体の'clock'と'config'と'routes'のメンバがない。ってエラーだったな。
こいつは、MAME0.89Sでは、「sndintrf.h」に
#ifndef SNDINTRF_H
#define SNDINTRF_H
struct MachineSound
{
int sound_type;
void *sound_interface;
const char *tag;
};
って書いてある。確かにそんなメンバはない。が、無いからといって安直に追加してはダメだ。
ここにないだけであって、それに相当する部分の実装はMAME0.89Sでもある筈だからだ。
取り敢えず'clock'か'config'か'routes'でソースを検索してみよう。
ここではあまりみかけん単語。ちぅことで'routes'で検索してみた。
検索で引っかかったファイルは、
mame.c
sndintrf.c
debughlp.c
の3つだけ。もしかしたらこの部分は全く使ってない可能性すらある。もうすこし詳しく調べてみよう。
うんにゃ。sndintrf.cを見る限り。スピーカの辺はないとまずいです。
まとめると、
MAME0.89S そんなものはない。 (「sndintrf.c」のsound_start();)
MAME0.97S 現在のroute_sound方式(「sndintrf.c」のsound_start();)
MAME1.02S 現在のroute_sound方式(「sndintrf.c」のsound_init();)
ですね。この辺はMAME1.02から盗んできても、特に問題なさそうな気がしますが、
(MAME0.89S時代の古い)ミキサーがどういう事になってんのか、いまいち解かりませんね。
適当にやっつけますか。
で、音が出なくて苦しむ事になりそうですが。
どうもroute_sound();ってのスピーカの接続を決めてるだけなのかもしれない。よく解かりませんが。
実装は、
MAME0.89S 「sndintrf.h」には構造体が二個
MAME0.97S 「sndintrf.h」?入手出来ないので不明。
MAME1.02S 「sndintrf.h」には構造体が五個
MAME1.02Sの「sndintrf.h」を使えばそれで済む話なんだろうか?その後名称を変える必要もあるんだろうか?
とにかくやってみるか。
from src/mame.c:135:
src/sndintrf.h: At top level:
src/sndintrf.h:326: error: parse error before 'xml_data_node'
src/sndintrf.h:326: warning: function declaration isn't a prototype
src/sndintrf.h:327: error: parse error before 'xml_data_node'
src/sndintrf.h:327: warning: function declaration isn't a prototype
In file included from src/mame.c:135:
src/driver.h:320: error: array type has incomplete element type
src/mame.c: In function 'init_machine':
src/mame.c:457: warning: implicit declaration of function 'init_memcard'
src/mame.c: In function 'run_machine':
src/mame.c:517: warning: implicit declaration of function 'sound_start'
src/mame.c:542: warning: implicit declaration of function 'sound_stop'
src/mame.c: In function 'init_buffered_spriteram':
src/mame.c:1096: warning: cast increases required alignment of target type
src/mame.c:1097: warning: cast increases required alignment of target type
src/mame.c:1098: warning: cast increases required alignment of target type
src/mame.c:1099: warning: cast increases required alignment of target type
src/mame.c: At top level:
src/mame.c:1638: error: conflicting types for 'machine_add_sound'
src/driver.h:274: error: previous declaration of 'machine_add_sound' was here
make: *** [obj/namcos1psp/mame.o] Error 1
こうなった。
1.'xml_data_node'ってのはさっきは出なくて今回は出た。MAME1.02Sにはあって、
MAME0.97Sにはないという可能性がある。
2.さっきねーよって怒られたメンバは今度は怒られなかったみたい。まだ判りませんがね。
3.'sound_start'と'sound_stop'はMAME102で名称が変更になっている為に(プロトタイプがなくて)ワーニング。
4.'machine_add_sound'の引数が違うって怒られた。
1.は、良くわからんが殺しておこう。対応は「sndintrf.h」(今度はMAME102の奴になった)
//void sndintrf_load(int config_type, xml_data_node *parentnode);
//void sndintrf_save(int config_type, xml_data_node *parentnode);
これは、MAME0.97になくて、最近追加された可能性がある。
3.これは名称をMAME0.97のタイプに合わせましょう。
int sound_start(void);//MAME102 was int sound_init(void);
void sound_stop(void);//MAME102 was void sound_exit(void);
4.
struct MachineSound *machine_add_sound(struct InternalMachineDriver *machine, const char *tag, int type, void *sndintf)MAME0.89Sの場合
struct MachineSound *machine_add_sound(struct InternalMachineDriver *machine, const char *tag, int type, int clock)MAME0.97SPSPの場合
最後だけ違いますね。driver.hの
struct MachineSound *machine_add_sound(struct InternalMachineDriver *machine, const char *tag, int type, void *sndintf);
をMAME0.97S_PSPのタイプに変更します。具体的には、MAME097Sのをコピーして貼り付け
最後に;を付けるだけです。
//ruct MachineSound *machine_add_sound(struct InternalMachineDriver *machine, const char *tag, int type, void *sndintf);//MAME089
struct MachineSound *machine_add_sound(struct InternalMachineDriver *machine, const char *tag, int type, int clock);//MAME097
こう変更しました。
■
src/memory.h:1054: warning: cast increases required alignment of target type
src/memory.h: In function 'cpu_readop32':
src/memory.h:1055: warning: cast increases required alignment of target type
src/memory.h: In function 'cpu_readop64':
src/memory.h:1056: warning: cast increases required alignment of target type
src/memory.h: In function 'cpu_readop_arg16':
src/memory.h:1058: warning: cast increases required alignment of target type
src/memory.h: In function 'cpu_readop_arg32':
src/memory.h:1059: warning: cast increases required alignment of target type
src/memory.h: In function 'cpu_readop_arg64':
src/memory.h:1060: warning: cast increases required alignment of target type
In file included from src/mame.c:135:
src/driver.h: At top level:
src/driver.h:322: error: array type has incomplete element type
src/mame.c: In function 'init_machine':
src/mame.c:457: warning: implicit declaration of function 'init_memcard'
src/mame.c: In function 'init_buffered_spriteram':
src/mame.c:1096: warning: cast increases required alignment of target type
src/mame.c:1097: warning: cast increases required alignment of target type
src/mame.c:1098: warning: cast increases required alignment of target type
src/mame.c:1099: warning: cast increases required alignment of target type
make: *** [obj/namcos1psp/mame.o] Error 1
src/driver.hの322行目とか妙に具体的な事を言うので見てみましょう。
MAME089Sの場合。
UINT32 sound_attributes;
struct MachineSound sound[MAX_SOUND];
MAME102Sの場合。
sound_config sound[MAX_SOUND];
speaker_config speaker[MAX_SPEAKER];
やはりスピーカーの仕様が変わってる部分ですね。
本当は前の奴を後の奴に変更すればそれでいいんですが、さきにコンパイルを優先させて
sound_attributesについては、後で現状を調べ手を入れましょう。(変な所でつまずくより、多分その方が早い)で、
UINT32 sound_attributes; // need after legacy (MAME089 type)
// struct MachineSound sound[MAX_SOUND];
sound_config sound[MAX_SOUND];
speaker_config speaker[MAX_SPEAKER];
こうしといた。それからMAX_SPEAKERがないから追記。(MAME102から持ってきた)
#define MAX_SPEAKER 4 /* MAX_SPEAKER is the maximum number of speakers */
これはMAME097でも多分、同じでしょう。
PSPはステレオだし、こんなの2で良いと思うでしょ?
これは実物のスピーカーの数の話ではなく、
仮想的なスピーカーの数の話です。管理者がすぐに思い浮かぶのはシステム21
(要するにウィニングランやエアーコンバット)のサラウンドスピーカーですね。左右とサラウンドで4ch
ですから。ダライアスのサブウーハはどうなっているんでしたっけ。
あれは、左右スビーカーからの合成なんだけど特別にソフトウェアーから合成出力が制御できたん
じゃあなかったでしたっけ。
MAMEシステムのMIXERにそんなコメントがあったような気がする。
(DRIVER関連ではなくて、MAMEシステムでのDARIUS対応です。)
まあ、PSPにサラウンドもサブウーハーもついてないんで、ちゃんと動いたらこの辺の実装は簡略化しちゃえば
いいんですが、ちゃんと動くまでは、弄るのは10年早い(c)アキラ氏
いや、本当に10年も経ったら年季が入りすぎちゃうよ!