歓迎光臨
"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関数で、ドットの点灯を確認することで取得しています。
	もっとうまいやり方もある気がしますが、まあ気にしない。