歓迎光臨
"eFP-1100" - CASIO FP-1100 emulator for Win32

"eFP-1100" is CASIO FP-1100 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



eFP-1100 謎WIPページ

ずっと手付かずになっていた、メジャーなマイナー機の大物です。
100%活用やペーパウェアを落札できてから、一気に動き出しましたね。
資料提供いただいた、どぎゃしんさん、めがきらさんに感謝。



2015/3/12

uPD765Aで、WRITE DATAをTCで中断したときの処理を修正しました。
C86-BASIC上で、ディスクへのSAVEが正しく実行できるようになっています。

セクタの書き込み中にTCで中断された場合、残りを0で埋めて書き込むようになっていますが、
マルチセクタが指定されていて、次のセクタへの書き込み前に中断された場合に、
次のセクタを丸々0で潰してしまっていました。



2015/3/3

拡張ボックスのスロットの切り替えの不具合を修正しました。
uPD765AのライトIDの実行時、LOST DATAが発生するまでの時間を修正しました。
すべてのフロッピードライブおよびRAMパックで、フォーマット出来るようになっています。


SCREEN 1のとき、VRAMのプレーンマスクを無効にしました。
VRAMのクリア時、カラーレジスタの値で塗りつぶすようにしました。
CMTのボーレートを、メニューから選択できるように修正しました。
(FP-1100実機ユーザ様、不具合ご指摘ありがとうございました)



2015/2/21

データレコーダをサポートしました。

FP-1100では、データレコーダの信号の立ち上がりを検出したり、波長を算出したり、
ロード用の同期信号を生成したり、といった処理を、DFFやバイナリカウンタなどの
標準ロジックICの回路で実現しています。
この回路を、全部ICレベルからエミュレーションするという力技をやらかしました。
うんまあ、ハードウェアを忠実に表現するのはいいことですよね(苦笑)

サブCPUのuPD7801Gの方も、これまでシリアル通信周りの実装が適当だったのですが、
SI/SOを信号として接続したり、SCKの外部クロックで送受信するようにするなど、
より正確にエミュレーションするように修正しました。

その他、Pasteでの自動入力のタイミングの調整や、VRAMプレーンのマスクのサポート、
CRTCのクロックの修正、I/Oのウェイトの実装など、細かい修正をしています。



2015/2/13

フロッピードライブをようやくサポートしました。
56K CP/Mがブートするようになっています。
後はデータレコーダをサポートできれば一段落ですね。



2015/1/19
ステートセーブに対応しました。



2010/8/31
画面周りの不具合を修正しました。
残項目は、データレコーダ周りの実装と、フロッピードライブの動作確認ですね。
漢字ROMは、入手できたら対応を検討するということで。
100%活用に掲載されてたPSGボードとかも実装すると面白いかも。


画面の表示位置がずれいてたのと、カラーが正しく表示されないのを修正しました。
80桁モードだとこんな感じ。


40桁モードで同じプログラムを実行した場合。
画面の消去も実装されています。


320x200ドットモードでのグラフィック表示。
FM-7などと同じく、テキストとグラフィックは、同一の画面上に描画されます。


640x400ドットでは、単色表示となります。
この時代、高解像度のグラフィック画面を持つマシンとしては、かなり格安だったようですね。



2010/8/27
まだおかしいところだらけですが、何とかBASICがブートするようになりました。


Z80からサブCPUにコマンドを送る際、データを出力してINT2を発生させているのですが、
サブCPU側で、割り込みフラグを見てコマンド待ちループを抜けて、
何故か更にもう1回割り込みフラグが立つのを待つなど、よく分からない箇所が多いです。
(SKITやSKNITで割り込みフラグを参照すると、割り込みフラグがクリアされます)
現状では、実際の回路にはない割り込みを発生させるなど、多少のいんちき込みで動かしてます。


VRAMやCRTCなど、画面周りはサブCPUの管轄下にあります。
この辺りは資料がないため、回路図から得られた情報を元に実装していますが…
まだまだ、修正しなければいけない箇所が多いですね。
VRAMのクリアも外部回路でやってるらしいのですが、まずそこから解析しないと。



2010/6/16
メインCPU側のROMおよびサブCPUの内蔵ROMを吸い出しました。
RS-232CなどPCとデータをやり取りできるインタフェースもないし、
データレコーダに保存してフォーマットを解析するのも面倒くさかったので、
例によって、ビデオキャプチャ法で吸出しを行っています。


ROMイメージを、こんな感じで画面にパターンとして表示して、
それをデジカメで動画として録画してやって、
TMPGEnc辺りで連番jpegに出力して、
それをVB6ででっちあげたツールでテキストファイルとして出力、
って感じでPCに転送しています。
テレビ出力用のケーブルがあれば、デジカメで撮影なんてせずに済んだのですが。

サブCPUの吸出しプログラムはこんな感じです。
Z80側から直接参照できないため、転送プログラムをサブCPUに送り込む必要があります。

100 SCREEN 0:WIDTH 40
110 FOR H=0 TO 15:FOR LH=0 TO 31
120 CLS
130 FOR LL=0 TO 7
140 L=LH*8+LL
150 LOCATE 4,21:COLOR 1
160 DEFCHR$(255)="7069"+RIGHT$(HEX$(L),2)+RIGHT$(HEX$(H),2)+"70790020"
170 PRINT CHR$(255);
180 DEFCHR$(255)="0800000000000000"
190 PRINT CHR$(255)
200 CALL &HB00,&H6B
210 LOCATE 1,LL:COLOR 7:PRINT "+";
220 IF POINT(0,0)=0 THEN PRINT "●"; ELSE PRINT " ";
230 IF POINT(1,0)=0 THEN PRINT "●"; ELSE PRINT " ";
240 IF POINT(2,0)=0 THEN PRINT "●"; ELSE PRINT " ";
250 IF POINT(3,0)=0 THEN PRINT "●"; ELSE PRINT " ";
260 IF POINT(4,0)=0 THEN PRINT "●"; ELSE PRINT " ";
270 IF POINT(5,0)=0 THEN PRINT "●"; ELSE PRINT " ";
280 IF POINT(6,0)=0 THEN PRINT "●"; ELSE PRINT " ";
290 IF POINT(7,0)=0 THEN PRINT "●"; ELSE PRINT " ";
300 PRINT "+"
310 NEXT LL
320 PRINT "●";H*32+LH
330 FOR W=1 TO 512:NEXT W
340 NEXT LH:NEXT H

サブCPU側で、内蔵ROMの値を読み出してVRAMに書き込んで、
BASIC上でPOINT関数で、ドットの点灯を確認することで取得しています。
もっとうまいやり方もある気がしますが、まあ気にしない。