SHARP PC-1600KでCP/M80!その5

f:id:PocketGriffon:20210503230237j:plain

ついにPC-1600K上のCP/M80で、スタートレック(ゲーム)が動くようになった!

これはMBASIC.COMの上で動く、それなりのサイズがあるプログラムだ。この規模のものが動くようになれば「とりあえず動くようになったよ」くらいは言っても良いかと思い始めた(^^;;

 

CP/M80 on PC-1600Kディスク事情

さて、前回に引き続きディスク関連を書いていこうと思うけど、前回ほど面倒な話ではなくて、運用面での話を書いてみようと思う。なんにも整備されてないって言いたいだけだw

 

一般的にエミュレータを使おうとすると「ディスクイメージがうんぬん」という、ちょっと面倒な手続きがあるかと思う。エミュレータ側からはホスト側のファイルを直接見ることが出来ないので、1つのファイルをディスクと見立ててアクセスをするようになっている。

ファイルの中に沢山のファイルが入っている…という表現が良いんだろうか。

そのため、そのファイルの中の構造を変更しようとしても簡単にはいかない。コピペなんて簡単には出来ないのだ。

 

今開発しているCP/M80もディスク事情は同じだ。

そのためファイルのやりとりは非常に面倒となる。

今、私が実際にやっている手順を書き記してみると…

 

1、ディスク(増設メモリ)をフォーマットする(独自開発したプログラム)

2、CP/M80が起動した時に0100h番地となるメモリにファイルをロードする

  →専用のローダーを開発

3、CP/M80を起動する(メモリはクリアされていない)

4、「SAVE xx ファイル名」として0100hにあるバイナリをファイルへセーブ

5、実行

 

ファイルのかず分だけ、2〜4を繰り返しているのだ!

なぜこんな面倒な事をしてるのかと言えば、まだまだシステムが安定してるとは言い難く、ツールなどで固めてしまうには時期尚早と感じていたからだ。

 

こんな煩雑な状態なのでドキュメントをまとめておかないと、次にチャレンジする時に絶対に思い出せない(^^; 私はそういうツール類がとても多い…(自慢じゃないけどw

cpmtoolsという便利なものがあるらしいので、自作するばっかりじゃなく使ってみたいと思う。

 

ちなみにディスクはAとBの2ドライブ構成にしてあり、Aドライブが448KB、Bドライブが512KBの容量を持つ。これは1MB増設メモリを装着する事を前提とした構成だ。512KBの増設メモリの場合は448KBドライブが1つとなる(もっと細かく分けても良いけど)。

 

かなり安定してきた!

f:id:PocketGriffon:20210504000607j:plain

ここ1〜2日の間の修正対応で、かなり安定した動作をするようになってきた。本体裏面にあるリセットボタンを押す回数が激減した。

 

開発面で一番効果が高かったのは、正しくCP/M80を終了させてBASICへ戻る事が出来るようになった事だ。今までは一度CP/M80をスタートさせるとリセットするしか復帰する方法が無かった(^^; メモリ周りや割り込みの処理が安定してきた事により、正しく終了させる方法を確立させる事ができた。

 

キー操作をきちんと実装した事も相当ストレス軽減になった。開発の初期にありがちなBS(Back Space)が機能しないなど、とにかく動かすだけでもストレスが溜まった。

PC-1600Kは「SHIFT+なんとか」というキーオペレーションが多く、特に「,(カンマ)」や「:(コロン)」がワンキーでは打てない。そして「"(ダブルクオート)」などは特殊キーに割り当てられていて、コードを変換しない限り使えない状態だ。

この辺りを整備した事でキー入力によるストレスはだいーぶ減った!

 

つい先日まで、しばらく使っていると気がつくとハングアップしていたり、シリアル経由で表示される文字が化けてみたり、どうにも怪しい動きをしていた。シリアルの文字化けは単純に通信状態の問題かと思っていたが、突然のハングアップはそういう事ではない。

MBASIC上で計算をした結果を表示させている時に、答えを間違う場合がある事に気がついた。1+1が2にならず、小数点以下が表示されてしまう。これはトンデモないバグだ(ToT)

これも症状が安定しない事から、真っ先に割り込み処理内のバグが疑われた(^^;;

そしたら案の定、フラグレジスタをPUSHする前に計算式が入っていた!割り込みから抜けてくるとフラグ状態が壊れる事があり、それにより答えを間違える…という現象だった。

これも無事に直せた!

 

同時にBIOSの実装も進めていったおかげで、MBASICからSYSTEMコマンドでCP/M80へ復帰できるようになったり、運用面での安定感が増していった。

 

意味もなくベンチマーク

世界標準のCP/M80が動いたという事で、なんとなくやってみたくなったベンチマーク

MBASICの単純ループで時間を測ったみた!手作業での判定なので1秒くらいの前後がある可能性があるよ!!(^^;

 

10 FOR I=0 TO 10000

20 NEXT I

 

このプログラムの実行速度を測ってみた!

20行の「I」が無い方が速かったり、先頭に「DEFINT I」とか入れると速くなるのは分かっているけど、とりあえずこのプログラムで統一する。

 

PC-1600K上のCP/M80で動くMBASICで測ってみたところ14.10秒となった。

同じくCP/M80上で動くBASICを主言語とするHC-40で測ってみると20.47秒と出た。

あれ…?CPUクロック同じだと思うんだけど、なぜかPC-1600Kの方が速い。

じゃあ…という事で、久しぶりにPC-8300にも登場してもらった。

f:id:PocketGriffon:20210504005218j:plain

その結果、17.69秒だった!

おお、PC-1600K、意外にも速い!!(^-^)

特に高速化のために何かしたわけでないけれども、1割2割も速くなると嬉しいね!

 

CP/M80自体の動作が安定してきた事もあるので、この先はCONOUTの出力先をRS-232Cから元の画面に戻していこうと思う。

その後は運用をもっと便利に出来る環境を整えて一旦キリかな…という感じだ!(^^)

 

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