今日は、1日DGENを弄ってました。
(注:このDGENは1.00です。最新のDGENはもっとずっと進んでいます。
スキルがあり、開発をしたい方は開発者に直接コンタクトをとって下さい。
私は開発者とは全く関係のない第三者です。
あくまでこのページの話は実験用途(教育用)です。)
本当はソースコードには手を付けなくて、Makefileだけ作るつもり、だったんですが、
MakefileのPCengine対応部分とか、外しているうちに、ついソースの該当部分も外し、...
管理人も人の子です。誘惑につい負けてしまいました。
全体を見渡してみましたが、コーディング的には、特に問題がないようです。
DGENはほぼCですがC++の部分もあります。
C++の部分は、
mdクラスと
mdvdpクラスの
2つです。
mdクラスはメモリアクセス関係だし、
mdvdpクラスはvdpコマンド関係です。
「DGENはメガドライブの主要部分をクラスライブラリにして閉じ込めてあります。
このクラスが上記のクラスです。mdcore_main.cppからmdクラスを呼び出して
使用しています。具体的にはmd mdcore;とかやってmdcore.init();とか使う。
実験的にクラスを破壊して遊びましたが、だんだんめんどくさくなって止めました。
破壊したほうがパフォーマンスダウンするかもしれません。(2006-1/22追記)」
ここは、エミュレーター的にはどちらも速度的に厳しい部分です。
「ここをC化することにより、パフォーマンスアップするかどうか不明ですが、
管理人の予想ではC化した方がパフォーマンスアップするんじゃないかなと思います。
この場合C++の必要性はあまり感じませんし。(謎、2006-1/22追記)」
MUSASIを2.0→3.3化するのも効くかも知れません。
MAMEのソースの最新版から抜いてくればいいだけなので、コーティングの必要はないです。
同様に、簡単にZ80も入れ替えられるかも、しれません。
「最新のDGENでは入れ替えているようです。入れ替え元は、http://yoyofr.fr.st/の
(上のちっちゃいバーのProjectsから辿るとある)pspNEOCDPSPの
ソース「neocdpsp-0.5.src.zip」みたいです。これはMUSASI3.3のカスタム版の様です。
(2006-1/22追記)」
音に関しては、意外とカスタマイズされていません。
まるでMAMEのソースを見ているような錯覚におちいります。
void YM2612UpdateOne( FMSAMPLE **buffer, int length, int flags)
{
switch( g_YM2612.OPN.ST.rate )
{
default :
case 44100 : YM2612UpdateOne_44100( buffer, length, flags ) ; break ;
case 22050 : YM2612UpdateOne_22050( buffer, length, flags ) ; break ;
case 11025 : YM2612UpdateOne_11025( buffer, length, flags ) ; break ;
}
}
という実装は、手軽にパフォーマンスアップアップしたのかもしれませんが、
少し疑問です。今のままだと、エンバグしそうなので、もし実装方法を全く
変えないのならば、とりあえずdefineにして誤魔化しておこうかな。
管理人3つも似たようなものがあったら、絶対にエンバグする単純人間なので。
76496についてはMDの場合。一つしか積んでないので、チップ番号は不要です。
ここのカスタマイズについては、MAMEで経験があるのですが、
ノイズ関係に注意して慎重に操作しないとバグります。(ノイズ音が変わってしまう)
PSP用のプログラムとは別に単体チェックが必要かも知れないです。
PSPGenesisのソース(0.15)DLしてきました。(最新バイナリは0.18C)
PSEMUの初期サンプルじゃあないんだから、何もパスワードかけなくても...
で、ちらっと5秒くらいのぞいたら(libYumePSP.a)というオリジナルライブラリを
使用しています。(そのライブラリのソースはない)
バイナリエディターで中身覗いたら、コンパイル時のGCCは4.0.0なので、
うまくリンクできるかも知れないですけど、とりあえずやる気がないので、保留って気分です。