2013.4.15
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第370回]


●CP/M互換DOSの説明書作成に着手しました

昨日は全く予期していなかった不可思議な症状に悩まされ、その解明に終日没頭したため、ホームページの更新ができませんでした。
本日になりましてからやっとバグの存在を突き止めて、修正することができてほっと一息つきました。
そのデバッグ作業のためにCP/M互換DOS上で動作するテストプログラムを作成しようとしまして、過去記事を参照したのですが、自分で書いておいてなになのですけれど、実にまとまりが悪く不得要領なことはこのうえもありませぬ。

当初はもうとても説明書までは書いておれませんから、ホームページの過去記事を参照してくださいということで逃げるつもりだったのでありますが、さすがにこれではいかんと思いました。
そこでまたまた発売時期が遅れてしまうのでありますが、せめて簡単なガイドブック程度の説明書を作成するべく、その作業に着手いたしました。
それほど詳細な説明書を書き上げる時間も知識もありませんから、今までホームページ上で説明しました内容をもとに簡単にまとめるだけにいたします。
おそらくは数日で完了すると思います。
そういたしましたら、やっとCP/M互換DOSの発売ということになります。
今はただその間に新たな問題点が出てこないことをひたすら祈るのみです。

現時点でまだ改良したい点も多々ありますが、それには目をつぶって見切り発車をいたします。
おそらくCP/M互換DOSを入手される皆様方からは要望(あるいは不満)が寄せられることと覚悟しておりますので、それを待ちましてからバージョンアップを計りたいと思います。
再三の延期にてまことに申し訳ありませんが、今しばらくのご猶予をお願いいたします。

楽屋裏でその作業を進めます間、まずはSTARTREKの続きと、先日来から書く書くと言っておきながらなかなか書けないでおります、この間からの悩ましい問題についてなどを書いていきたいと思います。

●またZB3BASIC用のSTARTREKプログラムにバグがみつかりました

当記事用にZB3BASIC用のSTARTREKプログラムを実行していましたら、エラーでブレークしてしまいました。
ずいぶん注意して見たつもりなのですが、いまだにバグが見つかります。
多分まだ残っているかもしれないバグは、PRINT文か文字変数への代入文で文字数が長すぎるエラーです。
MBASICなどでは文字定数は80文字以上でも扱えますが、ZB3BASICはもともと制御用に開発したため、効率を重視して文字数は最大39文字までに制限しています。
オリジナルのSTARTREKプログラムをZB3BASIC用に直すためには、39文字を越える文字型変数、定数を2つ以上に分割して39文字以内にする必要があります。
今回みつかったバグはさっそく修正しました。
[第367回]のBASICプログラムは最新のものに差し換え済みです。

[2013.4.16追記]
昨日は遅かったので急いでアップして寝てしまいました。
今朝になりましてから読み直していて気が付きました。
うっかりしていて[第367回]のBASICプログラムを差し換えるのを忘れておりました。
今は最新のものに差し換え済みです。
行番号7560が下のようになっていましたら更新前のプログラムです。

7560 O1$="    +-----+-----+-----+-----+-----+-----+-----+-----+"


下が更新後のプログラムです。

7560 O1$="    +-----+-----+-----+-----+"
7565 O2$="-----+-----+-----+-----+"

[追記ここまで]

私はゲームが苦手でありますし、そもそもそんなことをしております余裕などまったくないのでありますが、しかし、昨日発見しましたバグ(ZB3BASIC用のSTRTRKプログラムとは別の問題です)も、記事を書くための参考としてMBASIC用のSTARTREKプログラムを実行しようとしたときに発生したCP/M互換DOSのバグでありますから、今回のSTARTREKプログラムはCP/M互換DOSのバグ修正に大いに役立っております。
その意味では私にとりまして今回のSTARTREKプログラムはたかがゲームではなくて、もうゲーム様さまであります。

●STARTREKのルールについて(その2)

さて私の性分といたしまして、たとえゲームであろうとなかろうと、ことコンピュータに関することで、まったく分からないままで済ますといいますのは、どうにも面白くありません。
そこで貴重な時間を費やしまして[第366回]でもご紹介いたしました「BASIC COMPUTER GAMES」(
http://www.atariarchives.org/basicgames/
)の英文の説明をぼそぼそと読みながらゲームを実行したりしてみました。
その甲斐もあってか、だんだんに内容が理解できてきまして、なんとかゲームを進めることができるようになってきました。

あ。しかし。
私ができることはここまでで、そのスキルを磨くとか、使命をクリアするまでがんばるというのは、それこそ私のガラではありませぬ。
ここはSTARTREKプログラムに初めて挑戦される皆様方に、ごく初歩的な操作のための知識をかんたんにまとめてお伝えするだけにとどめます。

もし皆様方で[第367回]のSTRTRKプログラムを実際に実行するにあたって、不明点や疑問点、あるいはお気付きの点などがありましたらどうぞメールにてお尋ねまたはお伝えいただきますようお願いいたします。
その内容につきましては調べましてからまた記事としてご報告させていただきます。

前回はSTARTREKの舞台となっております銀河宇宙が8×8の小宇宙(QUADRANT)から構成されると書きました。
QUADRANTとはその綴りからも連想されますように4分円とか4分座標とかと訳されます。
「BASIC COMPUTER GAMES」のサイトの説明を読んでみましたら、その各小宇宙は全銀河宇宙を8×8に分割したときの、全宇宙内の位置を示す座標値であらわされるほかに、それぞれに固有の名前がつけられていることがわかりました。
その名前は、COMコマンドで数値5を入力すると画面に表示されます。



さらに同じ名前のついたQUADRANTは、それぞれ左からT、U、V、Wのローマ数字が付加されて区別されます。
たとえば前回図で説明しましたQUADRANT(6,7)はREGULUSVになります。
この名前は前回お見せしましたゲーム開始画面にも表示されています(下の画面中ほどに表示されています)。



前回は説明が途中になってしまいましたが、ゲームの進行は全てCOMMAND?に対してコマンドを入力することで行なわれます。
コマンドは以下のものがあります(全て大文字で入力します)。
COMMAND?に対してコマンド以外の文字を入力すると、下のように全コマンドが表示されます。



NAVはエンタープライズ号をワープさせる命令です(後述)。
SRS(ショートレンジセンサースキャン)は今いるQUADRANT内の情報をサーチして示します。
QUADRANTの座標画面とともに右側に基本的な情報が表示されます。



LRS(ロングレンジセンサースキャン)は今いるQUADRANTを中心にしてその回りの9個のQUADRANTの情報を示します。



今いるQUADRANTは銀河内座標(1,1)で、銀河の左上隅ですから、上と左のQUADRANTの情報はありません(***が表示されます。
3桁の情報はそのQUADRANTの状態を示します。
1位の数は含まれる星の数を示します。
中央に表示されているのが現在いるQUADRANTで、上の座標画面を見て分かるように星(*)が2つあります。
10位の数はSTARBASE(宇宙基地)を示します。
100位の数は敵(KLINGON)の数を示します。
この範囲には敵はいませんから別のQUADRANTに移動して敵を探します。
移動するにはNAVコマンドを使います。



ううう。
(2,4)に移動するつもりでCOURSE(方向)に8.66667と入力するところをうっかりして8.33333と入力してしまいました。
そのため1つ下のQUADRANT(3,4)に行ってしまいました。
でも怪我の功名で敵(+K+)を発見しました。
戦闘モードが発令されCONDITIONは*RED*になりました(通常はGREENです)。
シールドがしてありませんから、SHIELDS DENGEROUSLY LOWと表示されています。

さてまずはQUADRANT間移動について説明します。
移動する方向は図のように1〜8の数値で示されます。
図の(9)は8〜1の間の方向を示すときに仮に使う数です。



図のように水平、垂直、斜め45度の方向は整数で示されます。
画面は横長表示ですが計算では図のように正方形と考えます。
さて問題は上の図のいずれでもない方向(方角ではありません!)の数値での示し方です。
ちょっと見ると45度が”1”ですから三角関数のTANのように思えます。
[第366回]でご紹介いたしました日本語の説明があるサイト
http://www.yossyisland.com/Page/Yossy_StarTrek_Form.aspx
の管理者のかたもそのように書いてみえます。
逆三角関数を計算して…と書いていらっしゃいますが、おそらく思い違いです。
そういうバージョンもあったかもしれませんが、おそらくそんなレベルのものはなかったのでは?
ちなみにMBASICにはATN(アークタンジェント、逆正接)もありますが、STARTREKでは使われていません。
この方向は敵の方向を計算するときにも使われていてCOMコマンドで得ることができますが、上記サイトの管理者様はCOMで得られる数値は不正確と書いていらっしゃいます。
三角関数で計算されているという仮定での批評ですがCOMの計算結果は正確です。

実はSTARTREKでは三角関数などは使われていません。
方向の算出は結構シンプルな考え方で算出しているようです。
いくつかのケースで確認してみましたがそれに間違いはないと思います。
ゲームの進行に合わせて説明をいたしますが、まずは今回のケースについて説明をします。

本当は(1,1)から(2,4)に移動するつもりでした。
するとそれは下の図のようになります。


下へ1ポイント右へ3ポイントの移動です。
下へ3、右へも3の移動方向は8で、右へ3の移動方向は1(9)ですから、(1,1)から(2,4)への移動方向はその間の数値です。
その間は3等分して考えます。
すると図のように8.66667という数値が得られます。
そのようにするところを間違って8.33333と入力してしまったものですから、ひとつ下の(2,4)に行ってしまいました。

ところでWARP FACTOR(ワープ距離)ですが、これはQUADRANT間の水平垂直移動距離を1とします。
QUADRANT内の小移動は1未満の少数値になります。
今回は斜め方向への移動です。
この場合にはどのようにに計算するのでしょうか?

おわかりですね。
そうです。中学校で習ったピタゴラスの定理(三平方の定理)で計算をします。
下に1、右に3ですから、その距離は1+3=10の平方根3.1622になります。
しかし実際には下に2、右に3の移動方向を指定してしまいましたから、その移動距離は2+3=13の平方根3.6056が必要でした。
それでもなんとか(2,4)にたどりつきましたが元いた(1,1)内の位置からは少しずれてしまいました。

説明の途中ですが時間がなくなってしまいました。
続きは次回にいたします。

ワンボードマイコンでCP/Mを![第370回]
2013.4.15upload

前へ
次へ
ホームページトップへ戻る