CASIO FP-1100覚え書き!

FP-1100をげっとした!

最近、ブログを書いてる余裕すらないほど実務が忙しいんですけど、それでもやりたい事と、ちょっとやっちゃったけど忘れそうな事とかがいっぱいあるんですよね!(^^;

というわけで、今回はFP-1100の備忘録を書いてみる!

 

今回入手したFP-1100は、友人と共同で購入したもの。

今までは友人が使っていたが、もう思い残すことはない!?という事で私の手元に来た(^^;

 

そして私は、たまたまだけどFP-1100で使える拡張メモリパックを持っていた。

容量としては16Kバイトしかないメモリバックだけど、16KBって大きいよ!(^^)

これは秋葉原にある神田装備というお店のショーケースに展示されていたもの。

型番を見てすぐに「あ、これはFP-1100用だ!」と思ってげっとしていた!

 

脅威のバッテリーバックアップ機能付き!(^-^)

そういえばCASIOさんはFX-9000Pの頃からデータが消えないってのをウリにしてたね!

サイズ的にぴったりだったので、単5電池を2つ繋げて入れていた。

本当の電池は違うものを入れるんだろうなぁ……多分。

しかし電池ホルダのホールドが弱く、中で電池が外れてしまってバックアップが上手くできないという問題が発覚した。見栄えは悪いけれどテープでがっちり固定するよ!(^^;;

メモリパックへのアクセスはファイルディスクリプタPACK0:でアクセス出来る。

よし!これで安心してプログラム開発が行えるってモンですよ(^-^)

 

FP-1100の魅力

私自身、過去にFP-1100を使ったことはないけれど、いつかは使ってみたいと思っていたマシンの、かなり上位に君臨していた!

工学社のPIOという雑誌に書かれていた「サブCPUを制御して高速に画面描画を行っている」という情報を見て以来、いつかやってみたいと思っていたのだ!(^^)

こういう特殊な構造に魅力を感じる辺りがアレですが…(^^;;;

 

FP-1100付属のハードウェア解説書を見ると、C82-BASICは起動時にROMからRAMへコピーされ、それ以降はRAM上で動作しているらしい。ということはBASICの改造も比較的簡単にできそうな気がする!(^^)

 

メインCPUは言わずと知れたZ80で動作クロックは約4MHz。

VRAMが分離していることから、ノーウェイトで動いている気がする(勝手な予測)。

全体的にもっさり動く印象があるのは、おそらくBASIC内部でBCD演算をしているのと、表示が遅いせいなんだと思う。

 

そして表示系を司ってるサブCPUは、NECのμPD7801Gで動作クロックは約2MHz。

型番からZ80互換?と期待してしまったが、どうやら違うものらしい。

サブCPU側の事情については少しずつ書いていこうと思うけれど、噂ではかなり制限があるようで、こういった事情のあるマシンは大好きだ!(^-^)

なんとなくだけど、HC-80以上に苦労しそうな予感がバリバリにするw

 

メインのROMげっと大作戦!

何を解析するにも本体内部のROMをゲットしないことには始まらない!

まずは、FP-1100からROMを抜き出す方法を考えてみる。

てっとり早い方法はRS-232C経由でホストマシン(ここではMac)にコピーしちゃう事だけど、残念ながら我が家のFP-1100にはRS-232Cが付いていない(T-T)

 

じゃあ…というワケで、過去にJR-800で試してみた方法はどうだろうと検討。

pocketgriffon.hatenablog.com

この時はJR-800に表示させたダンプリストを、手作業で打ち込む方法を取った!

ROM容量は20KBだったけれど、かなーりの時間を要した覚えがある!

出張の移動時間にもJR-800とMacを広げ、ぷちぷちと打ち込んでいった(^^;;

 

今回、FP-1100のBASIC ROMは36KB分ある。

倍近い容量だよ!!無理でしょ…orz

この方法は努力と根性で出来そうな気もするが、失うもの(寿命とか)も多そうだ(T-T)

 

うーん、何か良い方法はないか…と考えていたところ、そうか画面に表示させたダンプリストを写真撮って、それをOCRしてみたらいいじゃん…!と思いついた!(^-^)

さっそく試してみるか!とやってみたところ……

めちゃくちゃ認識率が悪い!!(ToT)

これはなぜなんだ??あれだけ雑誌の写真をOCRしまくってるというのに…。

もしかして……これはフォントの問題だろうか??

CASIOフォントではなくてNECフォントにしてみたら認識率が上がるかも?

よし、PC-8001のフォントを利用してダンプ表示をしてみよう(^^)

 

FP-1100にはPCG定義命令があるので、これを利用して解決する(^^)

PCG定義が出来る文字は$E0〜$FFまでの32文字!

X1などのようにハードウェアで実現しているPCG機能ではなく、あくまでもソフトウェアで頑張るPCG機能のようだ!

試してみた結果、OCRの認識率が爆上がりすることが確認できた!(^^)

 

FP-1100のフォントとPC-8001のフォントの違いはこんな感じだ!

並べてみると結構違うんだなー(^^)

 

問題としては……1ブロック(256バイト)を表示するのに猛烈な時間がかかる。

動画で時間を確認してみたところ、256バイトを表示するのに約23秒!

写真撮って合計30秒。

36KB=144ブロックを写真撮るだけでも、休み無しで作業をしたとしても、最低で80分くらい掛かりそうな見込みだ(ToT)

これは……気が滅入りそうなので、時間があるときにちまちま進めるしか無いね(T-T)

 

でもこれでZ80側のROMはダンプできそうなメドがたった!(^-^)

これは一歩前進♪

 

サブCPU側のROMげっと大作戦!

次はサブCPU側のROMだ!

でも……サブCPU側のデータを読む方法なんてさっぱり分からぬ…orz

なんとなくだけど、サブCPU側にプログラムを送る必要がありそうな予感!

 

我が家にある唯一と言っても過言ではない技術資料を引っ張り出して読み漁る!

アセンブラも何もない環境で長いプログラムを作るわけにはいかないので、マシン語が極力小さくなるプログラムを考えてみた。

テストで以下にある写真のようなプログラムを作ってみた。

やってる事は、サブCPU側の任意のアドレスにある1バイトを表示する、だ。

 

70行80行がサブCPUに送るプログラムとなっている。

今回はハンドアセンブルしているが、プログラム的には以下のような感じ。

                mov a,nnnn

                mov $A000,a
                ret

指定されたアドレスの1バイトを、サブCPUのメモリ空間の$A000に書き込んでいるだけのプログラムだ。$A000は緑VRAMの先頭を指していて、これで画面上に緑のドットが表示される!

120行目からのプログラムで画面上のドットを1つずつ調べ、1バイトのデータに再構成する。VRAMは世にも珍しい反転型というもので、例えば$00を書き込むと$FFが入るという奇抜なものだ!そのため、BASICのプログラムで反転している。

これでメインCPUサブCPU側の特定のアドレスのデータが取得できる!

これを256回繰り返せば、任意の1ブロック分が表示できるという算段だ!(^^)

 

ちなみにNECの文豪ミニ5ZCという機種も反転型VRAMが使われている。

FP-1100だけではないということは、きっと何か反転型であるメリットがあるんだろうね…汗

 

おわりに

いまだかつて無いほど生活が忙しくなってしまい、なかなかレトロを触ってる時間が確保できなくなってしまった。

このFP-1100も取り組むまでに長い時間が掛かってしまいそうな予感がする。

気長に見ていってもらえれば…と思います!(^^)

 

ではまた次回!(^^)ノ