[過去ログ]
PC-98エミュを語ろう17 [無断転載禁止]©2ch.net (1002レス)
PC-98エミュを語ろう17 [無断転載禁止]©2ch.net http://egg.5ch.net/test/read.cgi/software/1500009461/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
143: 名無しさん@お腹いっぱい。 [sage] 2017/08/21(月) 21:56:07 ID:uCq++gjh0 >>142 うちもnp21W rev.34/35のT98NextのHDDでMELEMM.386+FDで落ちてました。 MELEMM.386+FDは常用したいので、NHDにする等引き続き試してみます。 T98-Nextかnp21Wで開発環境を再構築したいのですが、 NextはHSB3.7がちゃんと動いてくれないようで np21WはMELEMM.386+FDでtriple fault。 http://egg.5ch.net/test/read.cgi/software/1500009461/143
144: 名無しさん@お腹いっぱい。 [sage] 2017/08/21(月) 23:53:46 ID:uCq++gjh0 >>143 SCSIでHDD形式を試してみましたが駄目でした。 http://egg.5ch.net/test/read.cgi/software/1500009461/144
147: 143 [sage] 2017/08/23(水) 00:11:41 ID:yfoiJMV/0 >>145 D8は既に外してました >>146 ありがとうございます。VEM486+FDは落ちませんでした。 実機で使ったことなかったですが、しばらくVEM486で環境構築してみます。 http://egg.5ch.net/test/read.cgi/software/1500009461/147
160: 143 [sage] 2017/08/26(土) 09:08:35 ID:8913H0D10 np21/Wでゲーム用のERCACHE.EXEのEMMを組み込んでもtriple faultになりました。 np21/Wのビルド環境を作るしかないか... http://egg.5ch.net/test/read.cgi/software/1500009461/160
161: 143 [sage] 2017/08/26(土) 16:37:13 ID:8913H0D10 試しにnp21w-0.85(16/3/11)で動かしてみる MELEMM.386+FDは、tripe faultにならないが、固まっている模様 ERCACHE.EXEは組み込み時にtriple faultになる ということで昔から動かないようです。 http://egg.5ch.net/test/read.cgi/software/1500009461/161
162: 143 [sage] 2017/08/26(土) 19:32:55 ID:8913H0D10 >>161 INIを触ってDebug Utilityが出てきたので眺めると。 ERCACHE.EXE は ERC1_V86.ASM の _go_virtual86内の最後から9行目で 仮想86モニタ作った直後の仮想I/Oポート5FEChに1001hをOUTするところでした。 CSはリアルモード側を示してますので、仮想86モニタがちゃんとできてないのかも。 MELEMM.386+FDの方はプロテクトモード内に起因してるように表示されてますが詳細不明。 http://egg.5ch.net/test/read.cgi/software/1500009461/162
180: 143 [sage] 2017/09/10(日) 22:50:47 ID:Gt03NgvE0 >> 162 ソース構成よくわからないのでデバッガで追ってみる。 x86版np21w_r34にERCACHE.EXEを組み込んで落ちるところを確認。 np21w+0x67210 の OUT DX,AX 処理の中で 変数 np21w+0xA09F94 は 1 変数 np21w+0xA09F96 は 1 そこから np21w+0x2B550 の関数を呼びに行って そのあと cpu_stack_push_check からの SS_EXCEPTION を2回流して triple fault になってる模様。 np21wの仮想86モード遷移の管理が一部正しくないような雰囲気ですが、 OUT DX,AX の処理がソースのどこにあるかわからず、変数の意味がわかりませぬ... 実機では、I/Oトラップの一般保護違反→仮想86モニタに飛ぶ→処理して帰る な部分なので 仮想86モニタに遷移せずスタックフォールトに判断されてる理屈が不明。 http://egg.5ch.net/test/read.cgi/software/1500009461/180
181: 名無しさん@お腹いっぱい。 [sage] 2017/09/11(月) 20:24:55 ID:4N63lD/F0 >>143 >>180 ソースを少し調べてみたので報告。コンパイルできるようなら以下の変更箇所確認して試してみるとよいかも。 それと、少し古いソース(np21w-0.86-rev26beta)で調べたので行数は違うかもです。 修正箇所はia32/cpu_mem.cの220行目からの関数cpu_stack_push_check内の229、230行目 start = sp - len; limit = is32bit ? 0xffffffff : 0x0000ffff; を sp = (sp - 1) & (SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff); start = (sp - len) & (SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff); limit = sdp->u.seg.g ? 0xffffffff : 0x0000ffff; に変更。SEG_IS_32BIT(sdp)のところは、意味的にはis32bitの方がよいのかも?(計算上は同じです) 一応変更の根拠としては、 まず検証環境として、config.sysに以下を追加 device=a:\ERCACHE.EXE /HM /M=A5-A7,D0-D3 /HSB- これで、修正前のnp21wでtriple faultが発生するのを確認。 この状況でこの関数に入ってくるとき、sp=0x0000、len=0x0028になっており、修正前だとstartが0xffffffd8になって、 その後の(start > sp)の条件に引っかかってしまいます。 しかし、スタックのプッシュ処理は最初に格納するサイズ分減算し、そこからサイズ分書き込むので、 実際にはアドレス0x0000に書き込まれることはなくそういう意味では保護範囲のチェックとしては必ずしも適切ではないといえます。 ということで、変数spを実際に値が書かれる最終アドレスに書き換えてその上でアドレス判定をするように変更しています。 ついでに、limitの上限値の判定がセグメントディスクリプタのD/Bビットと見受けたので、Gビットに変更しています。 これについては関連して他の場所も直した方がよいのでは?と思うところがいくつかあったのですが、 十分に検証できていないのでそのままにしています。 http://egg.5ch.net/test/read.cgi/software/1500009461/181
183: 181 [sage] 2017/09/12(火) 21:02:25 ID:b9fFTbG00 >>143 >>180 すみません。一点訂正です。 limit = sdp->u.seg.g ? 0xffffffff : 0x0000ffff; これは間違いで、もともとの limit = is32bit ? 0xffffffff : 0x0000ffff; のままで正しかったです。 セグメントディスクリプタの理解が不十分でした。失礼しました http://egg.5ch.net/test/read.cgi/software/1500009461/183
186: 143 [sage] 2017/09/15(金) 00:26:16 ID:km0esGyq0 >>184 >>185 ソース情報ありがとうございます。 開発環境は準備中なので、取り急ぎ、情報を元にソースの exc に行かないよう np21w+0x2BB3F からの5バイトを 90 90 90 90 90 に変更したところ、 ERCACHE.EXEドライバが無事組み込まれました。 ありがとうございました。 でもDOS=HIGH,UMBにすると、例外#5(BOUND CHECK)でERCACHEの仮想86モニタに落ちました。 MELEMM.386でtriple faultになる件も再現しました。 先は長そうです。 http://egg.5ch.net/test/read.cgi/software/1500009461/186
189: 143 [sage] 2017/09/16(土) 11:17:36 ID:mnVksUfr0 >>186 長くなかった 毎回デバッガで実行するのが面倒なので、r34(x86) EXEファイルの先頭から0x2AF31からの2バイトを 8B 55 → EB 11 にしてスタック例外を飛ばした版を作り、 ROM領域を眺めてD2,D8をUMBから外したら DOS=HIGH,UMB でも動くようになりました。 お騒がせしました。 残り ・ERCACHE環境でHSBの再起動が効かない ・MEMEMM.386+FDが落ちる件 ・開発環境 http://egg.5ch.net/test/read.cgi/software/1500009461/189
190: 143 [sage] 2017/09/16(土) 15:02:33 ID:mnVksUfr0 >>189 np21wのERCACHE環境でHSBが効かない件 ERCACHEが持ってるIO禁止マップに関係無く、I/OがERCACHEの仮想86モニタに飛んでくるため。 HSBからの OUT FFFEh 協調I/Fが誤って届くので、ERCACHEを残したHSB再起動機能が発動している。 これはパッチでの対処は無理ぽい。 http://egg.5ch.net/test/read.cgi/software/1500009461/190
191: 143 [sage] 2017/09/16(土) 16:37:15 ID:mnVksUfr0 >>190 ソース見たら check_io でIOMAPを見るコードはありましたが、 HSBのポートFFFEhからのWORDアクセスは誤判定されてGP_EXCEPTIONに。 ファイル+2AA06 72→EB にパッチしてGP_EXCEPTIONに行かないようにしたら、 ERCACHE環境でのHSB再起動は正しく動作するようになりました。 http://egg.5ch.net/test/read.cgi/software/1500009461/191
203: 143 [sage] 2017/09/17(日) 23:28:07 ID:q2ioCxxX0 やっと開発環境ができました。 >>187 こちらのERCACHE環境でも動きました。 ありがとうございました。 >>191 check_io.c if ((port + len - 1) / 8 >= CPU_STAT_IOLIMIT) { と -1 を追加したらERCACHE環境でもHSB再起動できました。 MELEMM.386+FDはTRACE出せたので眺めるつもり。 入口はCALL_Aw、落ちてる場所はpaging ぽいですが途中が。 http://egg.5ch.net/test/read.cgi/software/1500009461/203
205: 143 [sage] 2017/09/18(月) 17:19:23 ID:6yI4M3gP0 >>204 こちらのFDはv3.12 MELEMM.386 v5.22 +patch +FD v3.12 /HM があると、triple fault /HM が無いと、落ちない MELEMM.386 v5.36 +patch +FD v3.12 /HM があると、リセット /HM が無いと、落ちない v5.22の方が調べやすそうです。 既に暴走した後かもしれませんが... http://egg.5ch.net/test/read.cgi/software/1500009461/205
207: 143 [sage] 2017/09/18(月) 19:48:47 ID:6yI4M3gP0 >>206 MELEMM.386 v5.22 +patch +FD v3.13 無限ループになりました。 >>205 DOS=HIGH が条件に漏れてました。 VERBOSEが拾いにくいので、直接OutputDebugStringでデバッガに流してみました。 exceptionでログ採ると、triple faultよりだいぶ前に 0040:0000 で無効命令例外が起きてる模様。 アドレスが変なのと、cpu_disasm2str()でコードを出せないので、その前に暴走してるんだと思われます。 MELEMM.386のプロテクトモードコードのどこかを正しく処理できないんだと思います。 triple faultで落ちるときの命令は各種。CALL_Awに限りません。 そういう意味では5.1xから5.20への変更部分に起因してるのかもしれませんね。 昔調べた情報どこに置いたやら... http://egg.5ch.net/test/read.cgi/software/1500009461/207
209: 143 [sage] 2017/09/18(月) 23:53:25 ID:6yI4M3gP0 >>208 EMSUTY BENCH を試すと、物理ページが連続していないと指摘されました。 見ると、CC00 E000 E400 FFFF とか変なことになってました。 ということで、組み込み時点でC000-CFFFにならない理由を調べる必要がありそうです。 http://egg.5ch.net/test/read.cgi/software/1500009461/209
210: 143 [sage] 2017/09/19(火) 00:32:27 ID:pNETuhBV0 >>209 MELEMM.386 v5.11が発掘されましたが、E000 E400 0000 0400 とか変なのは変わらず。 5.14を持ってたかは記憶無し、v4.78とかはfloppyを探す必要があるのでパス。 v5.36で/SD C000 を指定すると、CC00の1ページだけになり、FDは落ちなくなりました。 FD起因ではなく、GVRAMとかHMAにページフレームが重なってるせいで確定のようです。 なんで重なるのかは引き続き。 http://egg.5ch.net/test/read.cgi/software/1500009461/210
213: 143 [sage] 2017/09/19(火) 10:11:14 ID:pNETuhBV0 >>211 v5.36で /P 指定するとC0-CFを確保でき、FD起動しても落ちませんでした。 ありがとうございました。 実機で /P 指定したことないので、指定しなくても通せれば吉。 余裕あれば眺めてみます。 http://egg.5ch.net/test/read.cgi/software/1500009461/213
214: 143 [sage] 2017/09/19(火) 12:32:36 ID:pNETuhBV0 >>213 WORD単位でページ全域AND取って、0になるページは「何かある」判定されてる模様。 C000-CFFFにFFhを埋めるコードを作ってDX.COMで実行してからMELEMM.386を組み込むと、 /SDや/P指定無くてもC000-CFFFを確保可能になり、FD動かしても落ちませんでした。 np2/21W環境て、RAM無しか、リセット時FFhにできないものでしょうか? http://egg.5ch.net/test/read.cgi/software/1500009461/214
215: 143 [sage] 2017/09/19(火) 14:58:01 ID:pNETuhBV0 >>214 mem\memems.c を触って、Cバンク全体を書き込み無視/読み込み0FFh固定 にしたら、 MELEMM.386もうまく組み込まれるようになりました。 この状態でしばらく使ってみます。 http://egg.5ch.net/test/read.cgi/software/1500009461/215
218: 143 [sage] 2017/09/23(土) 17:01:09 ID:RpMEkz8/0 >>217 作者様試験ありがとうございます。 ・MELEMM.386 v5.36のEMSはC0-CFで組み込まれました。もちろんFD 3.12起動もok。 ・RAM扱いぽかったので、C0000を00 00に更新してHSB再起動すると、C0が除外され、UMBと重なる領域が割り当てられました。 ・HSB R しても、C0000が00 00のままだったので、C0が除外されました。 ・Resetすると、再びFF FFになったので、C0も組み込まれました。 ということで機能的には「CバンクRAMじゃないモード」を作っていただいた方が助かります。 ...そのうち別のtriple faultとかI/O FFFEhのlimit 0系の件も吸収いただけると助かります。 >>187 >>203 http://egg.5ch.net/test/read.cgi/software/1500009461/218
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.218s*