PCエミュレーター統合スレッド Part6

1 : ナイコンさん[sage] : 2013/03/30(土) 09:38:10.17
古き良き、1970年代~90年代のマイコンエミュレーター統合スレッドです。
基本、開発・人柱・新バージョンの報告や話題等で進行をお願いします
たまには上記の延長線上での脱線も可

※家庭用ゲーム機器は板違いです。(ぴゅう太はOK)
※ジェネレーターや其れに準ずる質問等はスレが荒れる原因になるので華麗にスルーして下さい
※上記の事柄に反応した場合その人も同じ池沼扱いされますので決して反応してはなりません
※このスレは如何にスルーできるか問われるスレですので肝に銘じておいて下さい
※禿しく空気読め

前スレ:PCエミュレーター統合スレッド Part5
http://ikura.2ch.net/test/read.cgi/i4004/1326469824/
2 : ナイコンさん[sage] : 2013/03/30(土) 15:50:23.01
QEMU/9821でWIN1.0~WIN98まで動かしてみた。
http://www.nicovideo.jp/watch/sm20456675
3 : ナイコンさん[sage] : 2013/03/31(日) 11:46:23.64
外部描画フィルター整理
rpiフィルタを使えるdll添付

XM7Dash翼
ttp://www1.axfc.net/uploader/so/2851095
p:FD0D
4 : ナイコンさん[sage] : 2013/04/01(月) 21:02:43.61
>>3
乙です。何点か質問。

>明るさはSetFilterで後から調整も可能なのでマウスホイールで調整とか
対応してみたんだけどSetFilter呼ぶだけじゃダメだった。
まぁいろいろやってみる。

>hMainWnd代入タイミング(for w32_cfg.c:RestoreFrameWnd())
タイミングによってhMainWndがNULLの状態でRestoreFrameWnd()が呼ばれるケースが
ありえるってことかな。とりあえずNULL対策だけ入れた。

>TranslateAccelerator()以下のHWNDが無効のハンドルで呼ばれる場合がある
これって以前指摘されたときはdashも一応暫定対策入れてたけど、
本家側でOnDestroy()からはhMainWndをNULLにする処理が外され、
OnQuit()って関数が追加されてループからbreakするタイミングで
hMainWndをNULLにするようになったので
TranslateAccelerator()をNULLで呼ばなくなったと思って
暫定対策は消したんだけど、別のケースかな。
5 : ナイコンさん[sage] : 2013/04/01(月) 21:04:41.84
>>3
ちょっと気になっている点が…。
WtCalというフリーのデスクトップカレンダーソフトを使ってるんだけど、
このカレンダーソフトでデスクトップにカレンダーを描画した領域の
上に相当する所へDLLで描画すると、稀に書き損じる?ことがある。
ただし普通に描画されている状況で書き損じることはない。

一番簡単に症状を確認するには、
1.WtCalでカレンダーを表示しているところと重なるようにdashを実行
2.dashを最小化→最大化
3.dashのWindowメニューを表示(裏にカレンダーが表示されているところなら
 どれでもよい)→メニューを閉じるか隣のWindowメニューに移動
症状:カレンダーソフトのカレンダーと重なる箇所の画像が復帰しない。
※ただしエミュレータ側が常時画面を書き換えていれば大丈夫。
エミュレータ側で同じ画面が継続している状態でテストすると症状が確認しやすい。

ソフトの相性の問題なのか、カレンダーソフト側の問題なのか、
判断がつかなかったので、とりあえず報告。
個人的にはどうもカレンダーソフト側がなにかやってるようにもみえるんだけど、
DLLを使わない場合は発生しない問題なので、対策の手段はあるかもしれないかなと。
まぁ、どうしようもなさげであれば、相性の問題、ってことでFAでもOK。

おまけ。
デスクトップカレンダーはしののん氏のが一番使いやすくて、
WindowsXpの時まで使ってたんだけど、
Windows7にしたら何故か使えなくなっちゃったので、
いろいろ調べて一番似た使い方が出来るWtCalにしたんだ。
6 : ナイコンさん[sage] : 2013/04/01(月) 22:54:02.45
>>4-5
すみませんSetFilter修正してみました
無効ハンドルで呼ばれてもFALSE返ってくるだけだから放置でもいいかも
潰していくならウィンドウハンドル使うAPIの前に必ずチェック入れてみたり
書き損じはOnSizeの中とかでドローウィンドウ再描画で対処とかは

フイルタのみ再
ttp://www1.axfc.net/uploader/so/2853414
p:filter
7 : ナイコンさん[sage] : 2013/04/02(火) 13:43:28.69
ちゃんとテストしてんのかよ
8 : ナイコンさん[sage] : 2013/04/02(火) 15:34:29.45
>>7
すいませんぜんぜんてすとしてませんでちゅたしね
9 : ナイコンさん[sage] : 2013/04/02(火) 18:42:00.51
XM6でもrpi使えるかどうかのテスト含めてフィルタ更新追加

XM6+XM7dash
ttp://www1.axfc.net/uploader/so/2854427
p:filter
10 : ナイコンさん[sage] : 2013/04/02(火) 20:20:20.43
商売で作ってるんじゃないソフトで「テストしてるのかよ」とか…
個人が趣味で作ってるものに何「使ってやってる客」ぶってんだよ

うわあ
11 : ナイコンさん[sage] : 2013/04/03(水) 01:02:40.83
>>6
>SetFilter
処理後描画ウィンドウへWM_PAINT投げとけばOKですた。

>無効ハンドル
dashで追加したロジックにおける箇所は対応しときました。
本家からのロジックは本家に任せようかと…

>書き損じ(というか復帰し損じ)
OnSize()呼んでる訳じゃないので…、とりあえず調査した結果、
メニュー閉じるときWM_UNINITMENUPOPUPメッセージが飛んでくることがわかったんで、
このときに描画ウィンドウを再描画することに。
描画ウィンドウへWM_PAINT投げるのが一番適切なんだけど、
ソレだと一瞬書き損じてるのが見えちゃうんで、仕方なく直接OnPaint。
書き損じはなくなったんだけど、dashを終了したとき「書き損じてたはず」の領域だけ、
デスクトップにdashの描画ウィンドウの跡が残った。
…これはもう、カレンダーソフトとの相性としかいえないなw

>>9
乙です。また見てみるよー
12 : ナイコンさん[sage] : 2013/04/03(水) 02:22:28.18
>>9
dashでのみ確認。
○stretch.dll
×2xRpi.dll
○2xRpi+.dll
ですた。
2xRpi.dllも、>>6の時は動いてたんだけどな。
あ、2xRpi.dllも2xRpi+.dllも、同じプラグイン使ってる。

まだdash側の内部動作チェックはしてない。
なんかあればまたコメントしとく。
13 : ナイコンさん[sage] : 2013/04/03(水) 18:32:34.37
フィルタ修正しました

XM6+XM7dash東郷
ttp://www1.axfc.net/uploader/so/2855591
p:filter
14 : ナイコンさん[sage] : 2013/04/06(土) 00:09:13.28
>>13
乙です。
とりあえずどれも動作中。2xRpi.dllの問題も解決。

ところで復帰し損じ(+終了時の書き残し)の件、
2xRpi.dll, 2xRpi+.dllでは生じなかったので、
どうもstretch.dllだけの問題っぽい。
ま、stretch.dllでもWM_UNINITMENUPOPUPで再描画させとければ
イィんだけど(終了時除く)、とりあえず情報として一応報告。
15 : ナイコンさん[sage] : 2013/04/06(土) 18:20:29.60
終了時はInvalidateRect(NULL,NULL,TRUE);とかは
16 : ナイコンさん[sage] : 2013/04/06(土) 19:42:20.32
>>15
OnClose()のメインウインドウを一端消した直後でCALLすると消し損じる。
OnDestroy()のINIファイル書き込み後位まで待たないとダメっぽい。
ただここまで待ってCALLすると、明らかに消し残しが目に見えるwので、
ちょっと…ねw

とりあえず、WM_UNINITMENUPOPUPの方も含めてデフォルトでは入れず、
XM7.iniにフラグ入れてONの時のみ処理するようにしとく。
さしあたり、WtCalってカレンダーソフト使ってなければ発生しない症状だしね。
17 : ナイコンさん[sage] : 2013/04/06(土) 21:12:10.94
追記
終了時の消し残しは、
XM7dash以外のソフトでも(エミュレータじゃなくても)発生した。
というわけで、あまり気にしない方がいいかもしれない。
一応>>16の対応は入れとくつもり…。
18 : ナイコンさん[sage] : 2013/04/11(木) 00:48:19.23
そういえば、dash V1.2L13, V2.9/V3.4L52aR130409のドキュメントには
>明るさはSetFilterで後から調整も可能なのでマウスホイールで調整とか
をネタに放り込んだマウスホイールで明るさ調整の件を書かなかったのでこちらへ。
・マウスホイール↑で明るく、↓で暗くなります。
マウスモード切替にホイールを設定していた場合は明るさ調整できません。
これはstrech.dll専用の機能であり汎用性がないので隠し機能ってとこで。
19 : ナイコンさん[sage] : 2013/04/11(木) 20:39:40.97
>>18
すばらっ
外部音源dllで動かないものはCreateせずにMixが呼ぶのに対応していないから
genpfmで音が変になるのはプリスケーラ変更に対応していないからでした
np2fmなんかも結局対応していないので動いても意味が無いけど
LoadMenuしたらDestroyMenuしたほうが良いかも

外部音源DLLセット
ttp://www1.axfc.net/uploader/so/2865336
p:9801
20 : ナイコンさん[sage] : 2013/04/12(金) 01:47:17.93
MZ-2000+16bitボード
ttp://takeda-toshiya.seesaa.net/article/354697912.html
21 : ナイコンさん[sage] : 2013/04/12(金) 20:56:48.08
emuz-2000 tf 0.92.0のソースどっかにないですかねぇ。
22 : ナイコンさん[sage] : 2013/04/12(金) 21:41:51.53
>>19
乙です。

>genpfmで音が変になるのはプリスケーラ変更に対応していないからでした
なるほどー。そこまではGetCapsでとれませんよねぇ。

>LoadMenuしたらDestroyMenuしたほうが良いかも
DestroyMenu抜けてた…V2/V3はもう更新しないつもりだったけど
バグ放置する気もないので、こっそり差し替えますた(笑
表向き変化無いので、V/L/R番号は変えてません。
ついでに最新の音源DLLセットでgenpfmやnp2fmで落ちなくなってたので、
複数chip可能チェックは最初の1回だけに戻しときました。
まぁ、>>プリスケーラ変更(ryのせいなかはわかりませんが、
どちらにしろ鳴らないのでサポート範囲は
相変わらずfmgen.dllとmamefm(2).dllのみで。

fmgen.dllは内蔵のと同じだけど、昔話題に上ってた
「最新のfmgen」で聞きたい人向けかな。SSGも対応したし。
23 : ナイコンさん[sage] : 2013/04/12(金) 22:06:02.42
>>22
>複数chip可能チェックは最初の1回だけに戻しときました。
なんか変だな…。
複数chip可能フラグがOFFの時のDLLを使用しない制限を解除しといたので、
標準FM音源カードのパートのみDLLを使用するようになってる、ってことで。

genpfmやnp2fm、np2fm+をテストするのにどうぞ、って感じで。
まぁこっちでやんなくてもソース弄れるでしょうから別にいぃのだろうけどw
24 : ナイコンさん[sage] : 2013/04/12(金) 23:33:42.48
そう言えばDLL(V1)のdllの外部公開関数の仕様ってどこかに公開されてたっけ?
DLL作ろうと思ったけどgetcupsとかがない古い仕様しかわからなくて作れん
25 : ナイコンさん[sage] : 2013/04/12(金) 23:52:41.51
XM7DASHのソースfmdll.hを見て推測。
26 : ナイコンさん[sage] : 2013/04/13(土) 02:14:59.08
一番多く関数を実装してあるfmgenのラッパー部のみだけど参考になれば
PSGやリズムの音量設定の機能等も組み込んであります
未だにアバウトな仕様なのですがこれが基本という事で

fmgen wrapperソース
ttp://www1.axfc.net/uploader/so/2866773
p:wrapper
27 : ナイコンさん[sage] : 2013/04/13(土) 02:16:17.89
>>25ありがとうできた
でもfmしか使ってないソフトばっかりでだめだ、レジスタ出力もフィルタされてるし
28 : ナイコンさん[sage] : 2013/04/13(土) 08:39:23.85
mamefmのソースってありますか?
29 : ナイコンさん[sage] : 2013/04/13(土) 10:07:24.87
あるんじゃねーの
30 : ナイコンさん[sage] : 2013/04/13(土) 12:20:53.21
>>27
SSGでよければdashの最新版が対応してるよ。
31 : ナイコンさん[sage] : 2013/04/13(土) 20:04:49.67
88でも対応したの上がってた
32 : ナイコンさん[sage] : 2013/04/13(土) 21:22:36.20
>>26
とりあえず現状わかる範囲で仕様書っぽいの作ってみた。
ttp://tomatoma.s54.xrea.com/pc/fmdll.html
まだindex.shtmlとのリンクとかは張ってない。

fmdll.hからのコピペだし、チェックとかまだ全然だけど、
各DLLの使用可不可○×は各DLLの中身みて確認したからあってるはず。
33 : ナイコンさん[sage] : 2013/04/14(日) 00:14:25.26
おお凄い
>>26のfmdll.hはバグってて使いものにならない状態だったようです
34 : ナイコンさん[sage] : 2013/04/14(日) 00:58:10.35
>>33
とりあえず>>26のfmdll.hをdash用に加工したモノ
ttp://tomatoma.s54.xrea.com/data/fmdll_xm7dash.zip

>>26のバグって、追加されたAPIの一部のAPI存在フラグチェックかな。
35 : ナイコンさん[sage] : 2013/04/14(日) 01:04:58.44
>>34
リンク先まちがえたw
ttp://tomatoma.s54.xrea.com/xm7/data/fmdll_xm7dash.zip
こっちで~。
36 : 34[sage] : 2013/04/14(日) 02:01:02.38
ちがった、関数ポインタとGetProcAddressだけ//で消してるんだけど、
実処理側が消してないので、多分そこでコンパイルが通らないんだね。
無効化してある関数ポインタとGetProcAddressの//をとっちゃえば
コンパイル通るよ。
37 : ナイコンさん[sage] : 2013/04/14(日) 13:19:55.05
>>36
CSMをCMSと間違えたりもしてました
独自に拡張してXM7dashのレベルメータ対応dllなんかも作れます
あまり独自にしすぎるとカオスになりますが

豆FMV
ttp://www1.axfc.net/uploader/so/2868353
p:fmv
38 : ナイコンさん[sage] : 2013/04/14(日) 15:57:22.62
>>37
ちょw
レベルメータはrbufを直で見てるからどうしようもないだろうな~
と思ってたのに、まさか独自拡張してくるとは…w

またこっそり差し替えとこうかなと思ったけど、
今度はデバッグじゃないのでさすがにアレかなと思ったので、
次回更新分にいれときます。
本家最新版が出る前には公開するつもり…。

でもせっかくなので、とりあえず使いたい方は↓どうぞ。
ttp://tomatoma.s54.xrea.com/xm7/data/xm7dash_130414.zip
バージョン・レベル・リリース番号とか更新日時とかw変えてません。
β版扱いということで。

% 個人的に…普段はmamefm2.dllで鳴らしてるので、
mamefm2+mamefmvのmamefmv2.dllみたいなのあると泣いて喜ぶかも?w
39 : ナイコンさん[sage] : 2013/04/14(日) 17:05:25.98
mamefmv2追加してみました

豆FMV(2)
ttp://www1.axfc.net/uploader/so/2868608
p:fmv
40 : ナイコンさん[sage] : 2013/04/14(日) 21:11:22.38
>>39
マジキタコレw
…ありがと!
今後はデフォこれにするわ~w

ttp://tomatoma.s54.xrea.com/pc/fmdll.html
一応修正しといたけど、このページの扱いをどうするか考察中。。。
41 : ナイコンさん[sage] : 2013/04/15(月) 20:42:13.94
*v.dllから取得するデータは実際に再生する音量計算後のデータなので
XM7dashのrbufに格納されるデータより小さくなります
あとXM7dashは特殊的にレジスタ0xffをタイマーA起動用に使っているので
dll側がCSMに対応していない場合は自前で実行した方がいいかも
pFmDll->SetReg(pOPNA[*], (uint8) reg, (uint8) dat);
の部分を
if (reg == 0xff) {
 if (!(pFmDll->GetCaps(pOPNA[*]) & SUPPORT_CSM)) {
  pFmDll->SetReg(pOPNA[*], (uint8) 0x28, (uint8) 0x02);
  pFmDll->SetReg(pOPNA[*], (uint8) 0x28, (uint8) 0xf2);
 }
} else
 pFmDll->SetReg(pOPNA[*], (uint8) reg, (uint8) dat);
みたいに
42 : ナイコンさん[sage] : 2013/04/16(火) 20:50:30.78
>>41
対応してみた。β版その2
ttp://tomatoma.s54.xrea.com/xm7/data/xm7dash_130416beta.zip

ディスプレイの音量補正は擬似的に掛けてみたけど、
音量設定-10未満まで下げるとさすがにダメっぽい。
まぁデフォ設定で使うレベルなら気にならない感覚かなと…。