歓迎光臨
"eFMR-30" - FUJITSU FMR-30 emulator for Win32
"eFMR-30" is FUJITSU FMR-30 emulator for Win32.
This software is under GNU GENERAL PUBLIC LICENSE.
This software requires Windows 2000/XP/Vista/7.
Download: Jump to Common Source Code Project
eFMR-30 謎WIPページ
FMR-30は液晶一体型の、今で言う省スペースPCのはしり、なのでしょうか。
FMR-50シリーズとは全く異なるアーキテクチャです。
存在自体は、当時買った「いいパソコン、悪いパソコン 88年度版」で知っていましたが。
まさか今更になって、本当に入手できるとは思いませんでした。
いやはや、何でも問い合わせてみるものですね。
いつもお世話になっております>ミリオンリース販売様
需要?
まあ、いつものことです、気にしない気にしない(苦笑)
2023/5/29
MB8877で各セクタの記録密度をチェックするようになったのに対応するため、
記録密度を指定するI/Oポートを実装しました。
2018/5/24
疑似BIOSについて、新しいハードディスクイメージハンドラを使用するよう修正しました。
SCSI HDDについても同様に修正しています。
THD/NHD/HDI/ベタイメージの各形式をサポートしています。
2018/2/25
I/Oポートで、2DDと2HDの切り替えをできるようにしました。
また、疑似BIOSで、ドライブの切り替えや、メディアの種類の取得をできるようにしました。
2017/3/8
8086と80286のバイナリをビルドするようにしました。
実機では、FMR-30FD/HD/BXが80C86、FMR-30HXが80C286を搭載しています。
80286版については、まだFMR-30HXのIPLで正常にブートできていませんが、
内蔵の疑似BIOSを使えば、フロッピーからMS-DOS V3.1をブートできることを確認しました。
2016/3/5
SCSIインタフェースと、SCSIハードディスクドライブをガチンコでサポートできました。
それに伴い、実機IPLを使用時は、疑似BIOSによらないディスクアクセスを実現しています。
実機IPLがない場合は、従来通り疑似BIOSが有効となります。
これに合わせて、コモン側で、i8237を修正しました。
ターミナルカウント時に割り込みを掛けられるように、TC信号を出力するようにしました。
また、MB8877を修正して、MB89311をサポートしました。
MB89311は、MB8877の改良版で、幾つかのコマンドが追加されています。
FMR-30では、リセットとMB8877モードに切り替えるコマンドだけを使っているみたいです。
フォーマットコマンド以外は実装しましたが、使う機会はなさそうですね(苦笑)
2015/8/5
疑似BIOSにおいて、フロッピーディスクの処理を改良しました。
フォーマット時に、データフィールドの存在しないセクターを書き込めるようにしました。
また、ID CRCエラーと、DATA CRCエラーを分けて扱うようにしました。
2015/3/15
ステートセーブに対応しました。
2015/3/13
フロッピーディスクの物理フォーマットをサポートしました。
BIOSエミュレーションの実装をeFMR-50と共有していますので、こちらでもサポートしています。
2014/9/7
カレンダが更新されなくなっていた問題を修正しました。
FILMTNがいつの間にか起動しなくなっていたのですが、FILMTNでは起動時に秒が変わるのを
チェックしていて、そこで無限ループしていたようです。
本件は、実際にはFMR-30のRTCの実装の問題ではなく、コモン側のMB8877の問題です。
MB8877が、他のデバイスが登録したイベントを、間違えてキャンセルしてしまったのが原因でした。
同じ問題が他で発生しないよう、イベントマネージャ側で、キャンセルを要求したデバイスが、
そのイベントを登録したデバイスと同一であるかチェックする処理を追加しています。
FMR-30を含む幾つかの機種で、CPUコアを新しいMAME i86コアに差し替えました。
デバッガをサポートした際の都合です。
2009/2/8
メモリのバンク切り替えの処理を高速化しました。
FMR-50の方で、2009/1/16に行った修正と同じ要領です。
2009/1/2
push sp; pop ax; cmp ax,sp; というのは、8086と80286の識別に使う常套手段みたいです。
push spするときに、8086/80186だとsp-2が、80286以降だとspが保存されるようで。
うーむ、奥が深い。
そこから先の処理で、lgdtを実行したり、smswで読んだ値にor 1をしてlmswしたりしてますね。
その中で$26のbit7を弄ってたりしていますので、これがA20の操作だと思うんですが。
その後の処理は、CPUそのものか、プロテクトモードでのメモリ周りの診断なのかな?
A20の操作を追加しても、まだHLTに突入してしまうのは、CPUコアの問題なんでしょう。
初代FMR-30FDにあわせて、コアの種類を8086にしたところ、何とかブートするようになりました。
(本当は、FMR-30HXは80C286らしいのですが…)
後は互換BIOSの実装をすれば、取り敢えずは一段落ですね。
![](090102-1.png)
MS-DOS V3.10がブートしたところ。
![](090102-2.png)
DISK BIOSのエミュレーションによって、SCSI HDDもサポートしています。
システムを転送することで、SCSI HDDからのブートも可能です。
![](090102-3.png)
![](090102-4.png)
FILMTNは、FMR-50と同じバイナリがそのまま動作しました。
FMRシリーズのBIOSがよく整備されていた事が伺われますね。
![](090102-5.png)
![](090102-6.png)
![](090102-7.png)
ホバーアタックのFMR-30版はこんな感じです。
2009/1/1
どうも$26を弄る辺りのルーチンから脱出する手段がなさそうな感じです。
PICのIMRは$ffにしているので、割り込みで脱出はできませんし。
ループの外に抜けるjmp命令もないみたいですし。
$26でNMIを発生させてみても、すぐループに戻ってきてしまいますし。
で、これがそのルーチンに突入する直前の処理。
F000:AC07 push sp
F000:AC08 pop ax
F000:AC09 cmp ax,sp
F000:AC0B jz AC10
F000:AC0D jmp AE2C
F000:AC10から件の処理ですが…うーん、意味がわからん。
取り敢えず、F000:AC0Bをnopで潰して、無理やり処理を先に進めてみました。
![](090101-1.png)
ディスクの挿入待ち状態。
![](090101-2.png)
ディスクからデータを読んで、そちらに処理が移ったところ。
DISK BIOSはFMR-50で実装したものを流用しています。
ここで処理が止まってしまいますが、原因の追究はまだです。
![](090101-3.png)
次回起動時、CMOSのデータに異常が発生して診断エラーが発生してしまいます。
2008/12/31
今回のターゲットはFMR-30HXBです。
資料では80C86となっているのですが、msmwとかlmswとかがIPL内で使用されています。
初代とは違って、HXは80286マシンなのでしょうか?
![](081231-1.png)
現状では、メモリチェックをした後で停止してしまいます。
CPUをトレースしたところ、I/Oの$26を弄って、暫くループでメモリ弄って、HLTしている模様。
何かしらの診断処理で応答待ちして、タイムアウトでエラー判定されているっぽい挙動ですね。
手持ちのFMRシリーズ徹底解析マニュアルに記述されていないI/Oを幾つか叩いています。
$1Dのbit4は、80286のA20ラインの処理?
$26のbit7は、NMIかIRQの操作?
$47のbit1も、NMI絡みかしら?
増補版の方で、これらのI/Oについて記述が追加されていませんでしょうか、情報ぷりーず。