HC-88でプログラミング! その1

HC-88の資料が少ない!

やっとHC-88でプログラミングを楽しむ段階まで来る事が出来た。

 

レトロパソコンの楽しみ方は人それぞれ、ゲームするもヨシ、ハードを充実させるもヨシ、動かさずに飾っとくのもヨシ、実用という段階から卒業してるマシンなんだから、楽しみ方なんて多岐にわたると思う。

 

私の楽しみ方は、なんといってもプログラミング。一生懸命に修理して動かすようにしているのも、その先にあるプログラミングをしたい!という大目的があるからだ。そのため、プログラミングするのに必要なものだけを最優先に修理し、本来であれば「え?これ必要でしょ?」というモノを後回しにしちゃったりもしてる(フロッピーディスクドライブとか)。

 

そんなプログラミングを楽しみにしている私でも、どーにもならない事がある。

そう、当時の資料が手に入らない事だ。

先日のブログにもちょろっと書いたけど、CAPSロックの仕方が分からないとか、マニュアルみたら一発なんだろうな…と思う事を何日も悩んだりする。

通常使用の方法ですらこうなのだから、プログラムを組む上での技術資料などは見つからなかったら手を出せないというのがホンネだ。

 

昔のマニュアルは、技術的なところにもだいぶ踏み込んで書いてくれているので、マニュアルさえ手元にあれば、あとは解析でなんとかしのげる場合もある。

しかし解析はとても時間が掛かる…。

 

そんな私が愛用しているのが国会図書館

本のタイトルが分かれば国会図書館へ出向いていき、実物を見つつ複写サービスを受ける事が出来る。著作権保護の兼ね合いから丸々1冊の複写は許されない。本の50%、または100ページの範囲で複写サービスを受ける事が出来る。

50%って事は2回行けば1冊分?とか思うかも知れないが、複写した記録は残るようになっているので、生涯を通じて50%の複写しか出来ない。

50%または100ページであっても、複写出来る恩恵は計り知れない。

どうしても手に入りにくい書籍は、こんな方法で部分的に手に入れていってる。

 

f:id:PocketGriffon:20201013004133j:plain

今、手元にあるのは「HC-80/88 テニクカルマスター」という書籍の複写だ。

この本はボリューミーかつ濃厚で、とても100ページで必要な情報が収まるような本ではなかった!仕方が無いので「ここぞ」というページを複写したつもりだったのだが、今みると「なんでココ?」って思うところも複写されてる。そう、プログラムをするには情報が足りないのだ。

 

幸い、HC-40のマニュアルは手元にあるので、なんとなく似てる…という事を頼りにHC-40の資料からHC-88の構造を予測し、解析しながら進めているというのが実情だ。

そんなワケもあり、HC-88について書いていく情報は半分ホント、半分間違ってると思って読んでもらえると助かる(^^;;

 

なにはともあれ文字を表示をさせる

HC-88は基本OSにCP/M-80を採用しているおかげで、たとえBASIC上からであってもマシン語レベルではCP/Mシステムコールが使える。

CP/Mシステムコールを使えば、文字列の表示など造作も無い。

でもそれだと、HC-88でプログラムをしているというよりは、CP/Mマシンでプログラムをしている事であり、別にHC-88である必要性はない。

せっかくなのでHC-88の特徴を活かした方法でプログラミングしたいのが親心?だろう!

 

というわけで、基本方針は以下のように考えた。

HC-88はメインCPUのZ80、スレーブCPUの6301、補助CPUの7508というトリプル構成となっている。

このうち、表示系を担当しているのは6301CPU。

実際、HC-88の中では表示に関する事は、全て6301へ仕事を渡すというカタチで成り立っている。

作ってみる文字表示については、Z80から6301へコマンドを発行して表示させてみる事にした。

f:id:PocketGriffon:20201013012033j:plain

幸い、先ほどの複写サービスで、6301のコントロールの仕方が書かれた箇所を複写していた。日本語でぺろんと書いてあるのは良いけれども、情報として足りていない。ここから行間を読みつつ組み立てていくしかない。

どうやらBIOSコール[SLAVE]の、サブコマンドという形で存在するモノらしい。

 

LCDには表示モードというのがあるようで、大きく分けてキャラクタモード、グラフィックモードの2つがある。これはSCREENコマンドで指定するパラメータらしい(HC-40のマニュアルを参考にしたいが、HC-40にはSCREENコマンドが存在しない[SCREEN関数はある])。

そしてモードによってVRAMのアドレスが変化する…らしい。

 

この辺りをいろいろと試しながら作ったプログラムが↓。

f:id:PocketGriffon:20201013012726j:plain

画面左上に「#」を表示させる事が出来るようになった!

ここに来るまでに半日くらい掛かってしまった(T-T)

ちなみにプログラムの多くはC言語で書き、一部BIOSコールに近いところはアセンブラで書いている。

 

f:id:PocketGriffon:20201013012710j:plain

「#」が表示出来るようになった数分後、文字列も表示出来るようになった。

文字列を1文字ずつスレーブCPUに送り込みつつ表示させているのだが…この段階ですでに「あれ?かなり遅いぞ」って思うようになった。

どうやらZ80→6301のコミュニケーション回数が多ければ多いほど遅くなる。

文字列の場合は一気に送ってやらないといけないらしい。

 

f:id:PocketGriffon:20201013013152j:plain

若干怪しいところはあるものの、コミュニケーション回数を減らしたことですぱっと表示されるようになった!(^-^)

 

メモリダンププログラムを作る

この先は、解析に必要と思われるメモリダンプから作っていこうと思う。

文字さえ表示出来るようになればコッチのもの!

さっそくそれっぽい表示をさせてみた。

f:id:PocketGriffon:20201013013435j:plain

光の加減が悪くて見えづらいのは申し訳ないです!

カーソルキーでメモリダンプのアドレスを変更する事が出来る。

 

ここまで一気に作っていたが、問題が出てきました…。

Mac→HC-88への転送に時間が掛かってしまうのと、実行時にマシン語プログラムをメモリへ書き込むPOKE文の辺りが強烈に重いのだ。

メモリダンプを「利用するだけ」なら、ロード&実行の時間が掛かる事も致し方がない…となるのだろうが、今は開発中。ちょっと気になる箇所を直しては動作確認…というたびにわんさか時間が掛かる。

ロードについても実行(POKEでメモリへ書き込み)についても、HC-40に比べるとかなり時間が掛かってしまうため、へこたれてしまった(^^;;

 

そんな事情で、メモリダンプの開発途中だけど、ロード&実行時間を短縮するためのプログラムを書き始めた!

とりあえず今日はここまで!(^^;

 

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