1987年4月19日日曜日

[通信][ポケコン] SHARP PC-G850シリーズとPCでプログラムを送受信する


[通信][ポケコン] SHARP PC-G850シリーズとPCでプログラムを送受信する
2019.4
PC-G850シリーズとPCでプログラムを送受信する方法
PC-G850シリーズはメモリが32KBしかありませんので少し大きいプログラムを作るとすぐにメモリが不足してしまいますが、
PCと接続するケーブルを使うとPC-G850で作成したプログラムをPCに保存できるようになります。
ここではPC-G850シリーズとWindows PCの間でプログラムの送受信をする方法を解説します。
対応機種はSHARP PC-E200,PC-G801,PC-G802,PC-G803,PC-G805,PC-G811,PC-G813,PC-G815,PC-G820,PC-G830,PC-G850,PC-G850S,PC-G850V,PC-G850VSです。
■手順
▽ケーブルを用意する
PC-G850とPCを接続するケーブルは自作することも可能ですが自作が難しい場合は高松製作所で販売しています
  USBタイプ→PC-G850/PC-E200シリーズ用 パソコン接続ケーブル(USB)
  シリアルタイプ→PC-G850/PC-E200シリーズ用 パソコン接続ケーブル(シリアル D-Sub9P)
自作の方法はこちらのサイトなどを参考にしてください
  PC-G850用USB通信ケーブルを作ろう!
▽USBドライバのンストール
高松製作所で販売しているUSBケーブルはFTDI社製のUSB-シリアル変換チップを使用していますので最初にFTDIのUSBドライバをインストールします。
こちらから対応するOSのドライバをダウンロードしてインストールしてください。(OSによってはドライバをインストールしなくても使用できます)
Virtual COM Port Drivers
※右側のComments欄のsetup executableと書かれたリンク先のドライバを使うとダブルクリックするだけでセットアップできますので簡単です。
ドライバのインストールが完了したらケーブルをPCのUSBポートとPC-G850に接続してください。
▽ポート番号の確認
システムのプロパティからデバイスマネージャを開き、「ポート」の下の「USB Serial Port(COM?)」のポート番号を確認してください。
※デバイスマネージャーの開き方
Windowsキー(CtrlキーとAltキーの間にあるWindowsのロゴが付いたキー)を押しながらBreakキー(キーボードの右上辺りにあるPause/Breakと書いてあるキー)を押してシステムのプロパティが表示されたらデバイスマネージャーをクリックする
通信ソフトの準備
こちらからTera Termをダウンロードしてパソコンにインストールします。
Tera Term
※Windows XP以前のOSをご利用の場合はTera Termの代わりにプリインストールされているハイパーターミナルを使うこともできます。
▽通信条件を合わせる
ポケコンで [TEXT]→[S]→[F]と操作して通信条件を下記の通りに設定します
  baud rate = 9600 end of line = CR LF
  data bit = 8 end of file = 1A
  stop bit = 1 line number = yes
  parity = none flow = RS/CS
パソコン側では、Tera Termを起動します。
「新しい接続」と表示されたらシリアルを選択してケーブルを接続したポートの番号を選択します。
 [設定]→[シリアルポート]で下記の通りに設定します。
  ボー・レート:9600
  データ:8bit
  パリティ:none
  ストップ:1
  フロー制御:hardware
 [設定]→[端末]で下記の通りに設定します。
  改行コード-受信:CR
  改行コード-送信:CR
  漢字-受信:SJIS
  漢字-送信:SJIS
 ※9600bpsに設定する場合の例です。機種によって4800bpsまでしか設定できませんので9600の部分を4800に変更してください。
▽パソコン→ポケコンのファイル転送
この操作では受信した内容はTEXTエディタに保存されます。
TEXTエディタの内容をBASICのプログラムに変換する場合は受信後に[TEXT]→[B]→[B]と操作してください。
 1.ポケコンを受信待機状態にする
  ポケコンで[TEXT]→[S]→[L]と操作します
 2.パソコンからファイルを送信する
Tera Termの[ファイル]→[ファイル送信]で送信するファイルを選択します。(又はTera Termの画面に送信するファイルをドラッグ&ドロップします)
送信が終了してもポケコン側で受信が終了しないときはTera TermでCTRLキーを押しながらZキーを押します
※ファイル転送時にエラーが発生する場合は通信速度を下げてください
▽ポケコン→パソコンのファイル転送
この操作ではTEXTエディタの内容が送信されます。
BASICのプログラムを送信する場合は送信前に[TEXT]→[B]→[T]と操作してBASICのプログラムをTEXTに変換してください。
 1.パソコンを受信待機状態にする
  Tera Termの[ファイル]→[ログ]で受信するファイル名を入力します。[追記]のチェックは外します。
 2.ポケコンからファイルを送信する
  ポケコンで[TEXT]→[S]→[S]と操作します
 転送が終了したら、Tera Termのログウインドウの[閉じる]をクリックします。

Kenji Takamatsu Homepage







ポケットコンピューターPC-E500シリーズ、PC-G850シリーズについて書いてます。
PC-E500シリーズというのはSHARPのポケットコンピューターPC-E500,PC-E550,PC-1480U,PC-1490U,PC-1490UII,PC-E650,PC-U6000の総称です。
PC-G850シリーズというのはSHARPのポケットコンピューターPC-E200,PC-G801,PC-G802,PC-G803,PC-G805,PC-G811,PC-G813,PC-G815,PC-G820,PC-G830,PC-G850,PC-G850S,PC-G850V,PC-G850VSの総称です。

Kenji Takamatsu Homepage
 

1987年4月3日金曜日

[ゲーム][PC] SharpMZシリーズ版SPACE HARRIER~3Dシューティング移植版(?)制作秘話


[ゲーム][PC] SharpMZシリーズ版SPACE HARRIER~3Dシューティング移植版(?)制作秘話
「SPACE HARRIER (c) SEGA」
■疑似3Dゲーム
スペースハリアーはセガの疑似3Dシューティグゲームです。
体感ゲーム第2弾として発売されたこのゲームは、今までの3Dゲームとは段違いにゲーム性、音楽、グラフィックに優れていました。高速に拡大縮小される敵キャラはプログラマーにとって格好のネタとなりました。私も当然興味を持ちましたが、ゲームの方は1面のボスが全然倒せずに「つらないゲームや~」と言って他人のプレイを傍観していました。
このスペースハリアーは、セガのコンシューマーマシン「Super 32X」用として発売されています。10年前のゲームとは思えないほど優れものです。機会と機械があったらぜひ遊んでみてください。
■座標変換の苦労
このスペースハリアーは、見事MZ-700に移植できました。
移植期間は半年。オリジナルモード(アーケード版と同じ)、X68000モード、FM-7モード、SEGA MarkIIIモード、タイル付きモードなど、つけるだけつけてあります(無謀ともいう)。
このゲームは一応3Dゲームなので、どうしても「座標変換」を行う必要があります。つまり、遠くの物体になると特定の消失点に近づいていくわけです。が、この座標変換作るのに以外と時間がかかってしまいました。計算式自体は「X座標÷Z座標」(Z座標は遠くにいくほど大きくなる)という単純なものです。まず小数演算を消す必要があります。というのも、Z80というCPUは小数演算ができないため、小数を含む(小数になってしまう)演算は、全て整数演算にする必要があります。この小数から整数演算に変更する方法は簡単です。X座標とZ座標を256倍しておき、割り算を行います。割り算を行った後に256で再度割り算をしてやれば無事に演算が行えます。というのはタテマエで、実際ゲーム中でやってみると、本物のようにいかない! どうなるかというと、近くだと瞬速で敵が通りすぎ、それを過ぎると極度に遅くなるという状態(笑)。
いろいろ思案したあげく実際に敵を動かしながら、本物と同じような動きに見えるようにするという事をやって、強引に解決させました。
■拡大縮小処理
このゲームは遠くにある物は小さく、近くにあるものは大きく表示するという「拡大縮小処理」を行っています。ハードウェアでこの機能がついていれば、なにも考えずにすむのですがMZ-700は、そのような機能はありませんのでプログラムで処理する事になります。が、困りました。というのも、そのような処理の方法を書いた本が見当たらなかったためです。実際、拡大縮小処理の方法を知ったのは移植した後でした(笑)。という事は、このMZ-700用スペースハリアーは「まともな拡大縮小処理をしていない」という事です。
まずキャラクタを拡大、縮小どちらかの処理のみ行うようにします。拡大するよりも縮小した方が処理が速くなるので、こちらの処理を選びました。縮小処理を楽にするために「キャラクタの大きさ」を固定しました。つまり、この「大きさ」を固定する事によって処理の軽減をはかろうという事です。しかし、大きさを固定すると言ってもキャラクタのサイズが結構異なるので、大きいブロックとその半分のブロックにわけるようにしました。
問題はどうやって縮小するか? 縮小させるには適当な1ライン分のデータを間引いて表示させてやればいいのですが、その間引き方がわからない(笑)。ちなみに「まともな方法」ではブレゼンハムアルゴリズムを用いて行います。つまりラインのアルゴリズムの応用です(詳しくはMZのアルゴリズムの所をみてください)。X座標(データ)が1進んだときにY座標(表示データ)が変化した時だけ表示してやればいいわけです。これが、まともな縮小処理です。
まともな縮小処理をしていないMZ-700用スペースハリアーは、非常に手抜きな方法を使っています。間引くべき座標(カウンタ)をあらかじめテーブルで用意してあるだけです。が、このテーブルに、ちょっとした細工がしてあります。前に大きいキャラクタと小さいキャラクタの2種類があると書きましたが、この間引くテーブルデータは、大きいキャラクタでも小さいキャラクタでも、どちらでもうまく縮小表示できるようにしてあります。また、キャラクタの中心は常に表示させるようテーブルデータを設定してあります。というのも、普通のグラフィックが描けるマシンならば、どんどん縮小していっても、消えてなくなる可能性は低いのですが、MZ-700の40x25の画面では、縮小処理をするとキャラクタが、間引かれて実際はあるのに表示されない場合が十分考えられるからです。消えてしまっては遠くにある敵は近くにきて突如として現われることになります。これでは、まずいわけです。そういう事を防ぐためにプログラムで中心点を消さないように、データの方も中心には必ず点が存在するようにしてあるという寸法です。
■V-RAM(実際の表示画面)
このゲームでも例によってメモリ内部に仮想画面を用意しておき最後に一括転送を行っています。ここでも仮想画面とV-RAMに工夫をしてあります。まず、MZ-700は文字などを表示する「V-RAM」と、文字の色を変更する「ATB V-RAM」があります。ここでV-RAMにアミ模様を描いておき、ATB V-RAMだけを変更するようにします。この方法を使うことで
(1)速度が速くなる(今まではV-RAMとATB V-RAM両方に転送しなければならなかった。つまり倍速になります)。
(2)使える色数が増えたように見える。
(2)の使える色数が増えるというのはアミ模様(タイリング)にしておくことで8色と8色の組み合わせで36色まで使えるわけで、うまく使えば8色では難しい灰色のグラデーションなども実現できます。普通、8色で灰色にする場合は「白」と「黒」を使います。絵の具でも白と黒を混ぜれば灰色になりますから、誰でもわかると思います。が、実際には「紫」と「緑」を交互にタイリングしても灰色に見えます。論より証拠やってみると以下のようになります。
これはカラーコードに置き換えてみるとよくわかります。MZ-700で使用できる8色のコードは以下のようになっています(8色しか使用できないマシンはどれも同じはずです)。
 黒色:0
 青色:1
 赤色:2
 紫色:3
 緑色:4
 水色:5
 黄色:6
 白色:7
灰色は「黒:0」「白:7」、これを合計すると0+7で「7」になります。先ほどの「紫:3」と「緑:4」も合計すると3+4で「7」になります。もうわかったと思います。そう合計して7になるカラーコードの色をタイリングすると「灰色」になるというわけです。つまり「青:1」と「黄:6」も、やってみると灰色になります。
さらにカラーコードの差分が大きいほど明るい灰色になりますから、これを利用すれば奇麗に見えてしまう灰色のグラデーションの柱が描けるというわけです。カラーコードの差分というのは「白」と「黒」では7-0で「7」、「緑」と「紫」では4-3で「1」になります。つまり「白」と「黒」の方が「紫」と「緑」よりも明るい事になります。これは「色の吸収」が関係しています。
仮想画面の工夫
今までは実画面と同じ大きさ(40x25)の仮想画面を用意しておき、まとめて転送していました。が、SPACE BLUSTERシリーズはMZ-700で表示されないV-RAMの部分を使用して表示されないのをいい事に「仮想画面」に使っていました。この方法だとCPUがV-RAMにアクセスした時「ウェイト」がかかって遅くなってしまいます(実はだいぶ後になって知った・・・)。スペースハリアーからはメモリに仮想画面を取ることにしたのでV-RAMアクセスによるウェイトが減った分かなり速くなりました。
仮想画面の次の工夫は横のサイズを変更した事です。今までは40文字分でしたが、スペースハリアーからは横幅を64文字分に変更しました。この変更により「座標計算」「描画」等が楽になります。(2のn乗にすると楽になるのはマシン語を勉強した人はわかると思います)。
一番いいのは横のサイズを256にする事です。さらに高速化することができます。ちなみにSYSTEM-7cでは、この256サイズになっています。スペースハリアーの時64文字分にしたのはメモリの都合です(キャラクタが入らなくなる)。
高速化・・・せずに低速化
問題となる部分が解決するとトントン拍子で移植は進みました。他のマシンならば、ひたすら高速化するのですが、速度に余裕があったので前にも書いたX68000モードやタイルなどをつけたりしました。また、物体が遠くにあるのか近くにあるのか、わかりにくいという事で「影」もつけました。自分の撃った弾は障害物に当たると跳ね返って、どこかに飛んでいく処理などなど。背景も最初なかったのですが、近景、遠景と追加し2重スクロールするようにしました。
こうやって、どんどん「低速化」していきました。おかげでサイズも42Kという膨大な量になってしまいました。こんな巨大なプログラムをよく載せたものだと思います。Oh! Xの編集部の方々に感謝、感謝です。
■おわりに
結構、思い出のある作品です。それにしても、よく移植できるなあと思う人がいるでしょう。でも実際のプログラムは「らしく」動くようにプログラムされているだけです。はっきりいってMZ-700だからできたのであって、X68000でやれと言われても私にはできません。X68000も所有していますが私向きではありません。手抜きができるMZ-700というマシンは私にあっていたのだと思います。またサウンドも単音だったので、音楽も駄目な私にとって都合がよかった(ついでに音痴だったりする^^;)。グラフィック画面がないので、全部キャラクタ(文字)の組み合わせというのも絵が下手な私にはラッキーでしたし(笑)。
X68000を選べないまま時は流れMZ-700とその後購入したMacを使っていく事になりました。そしてMacとMacroMind Director (現在はMacromedia Director)を使用してゲームを作っています。また、MZの方もMZ-2500とMZ-2861というように変わっています。XシリーズとMZシリーズを使ってみると、やっぱりMZの方が練られているし私向きかな、と思います。ずっとMZを使っていこうと思ってもマシンの機械的寿命がやってきます。はてさて、この先どうしたものか・・・。

MZ Museum
http://www.shiojiri.ne.jp/~openspc/mz700/SH.html
http://www.shiojiri.ne.jp/~openspc/mz700/SBFZ.html
http://www.shiojiri.ne.jp/~openspc/mz700/XEVIOUS.html
http://may.csse.muroran-it.ac.jp/~ogawa/MZMuseum/
http://www.shiojiri.ne.jp/~openspc/


















[ゲーム][PC] SPACE BLUSTER FZ~作者が語るSharpMZシリーズ版シューティング制作秘話




[ゲーム][PC] SPACE BLUSTER FZ~SharpMZシリーズ版シューティング
SPACE BLUSTER FZ[Oh!mz 1987年3月号発表]
■制作の動機
tiny XEVIOUS for 700に続いて制作したオリジナルゲームが、この「SPACE BLUSTER FZ」です。
オリジナルとは言っても、セガのファンタジーゾーンのような、背景が奇麗なゲームが作りたいなあ、という不純な(笑)動機によるものです。その証拠?はキャラクタがファンタジーゾーンに似ているというのもありますし、タイトル画面に隠し文字で「FANTASY ZONE」と書いてあります。
動機は不純でしたが、作るとなると結構問題がでてきました。
■ツールがない
MZ-700というパソコンはグラフィックができないため、「お絵描きツール」のようなものが、ありませんでした。
あっても今のように簡単にツールを入手できたりする時代ではなくツールは自分で作るか、雑誌に掲載されているものを入力するのが普通でした。
そもそもグラフィック能力がないマシンでグラフィックツールを作る人はいません(笑)。
仕方がないのでツールを作って・・・といきたい所ですが、実は「ツール」たるものを知りませんでした(無知って偉大だ^^;)。
このツールがないという状況はゼビウスの頃までさかのぼります。ゼビウスは広大なマップを必要とするのですが、一体ツールもなくどうやって描いていたのか不思議に思う人がいるでしょう(皆、不思議かも・・・)。まず、画面の内容をそっくりメモリに転送するマシン語プログラムを作ります。例えば、
21 00 D0 11 00 B0 01 E8 03 ED B0 C3 AD 00
という具合にプログラムを組んで適当なメモリに入れておきます。
リロケータブルなので、どこのアドレスにおいても動作します。このプログラムを用意した後、画面に文字(キャラグラといいます。キャラグラ=キャラクターグラフィックス)を描きます。描き終わったらこのプログラムを実行させてやればマップの一部ができあがりです。
と、まあこのようにして作っていたわけです。
■ツールを作ろう
SB/FZの最初の面も、こんな感じで作っていましたが、途中でもっと楽にできないか、と思い簡単なツールを作る事にしました。本当に簡単なツールで、できる事といったら、カーソルの移動と色付け程度です。それでも、今までよりだいぶ楽になったので、結構凝った画面が作成できるようになりました。ここらへんもノウハウかなと思いますが、この初期の頃の画面と末期の頃では、雲泥の差があります。
なぜ、ゲーム自体よりも見栄え(?)にこだわるのか、といったら
グラフィックへのあこがれ
が全てだったと思います。そもそもゼビウスとこのSPACE BLUSTER FZの頃は「グリーンディスプレイ」を使っていました。つまり「色がでない」・・・全部緑色(笑)。だから家庭用のテレビに接続してカラー画面を見れる時は、すごく嬉しかったのです。それも、1ヵ月や数ヵ月に一度といった感じでした。
とにかく、ツールで描いてカラー画面で見た時は感激していたわけです。この時に色と色の関係を理解し、これが後のスペースハリアーへとつながっていくわけです。
■気合いをこめて、物まねだ(笑)
元がセガのファンタジーゾーンだけに、出てくる親玉も、そのままというほどいただいてきました。まあ、どこまで描けるか、といった実験的なものという意味あいもあったと思います。
ゼビウスの移植で培ったノウハウは、いくらか役にたちましたが、このゲームではゼビウスの時にやらなかった処理を、いろいろとやっています。私が作ったゲームの中でゼビウスだけが特殊なパターン/プログラムで作られていて、それ以外は全てこのSPACE BLUSTER FZが基礎となっています。これ以後のゲームは、ここで制作したプログラムを流用/改良する形で作られました。
当時の自分の実力の限界
このゲームは当時の私の実力の限界作品でした。作り終わった時、「ここまでやれば、もうどうしようもない」と思ってました(笑)。が、それもつかのま、次の作品を作り始めると非常に、なさけないというかプログラム的にも初心者レベルでどうしようもないものだというようになってしまいました。
最初は移植から始まりましたが、ここでオリジナルの道へしばらく走ります。スペースハリアー移植への道のりは、まだまだ始まったばかりでした。
このSPACE BLUSTER FZの後、SPACE BLUSTER SGの制作にとりかかりました。
これは、またの機会に書くとしましょう。
■プログラム的な事、あれこれ
このゲーム、巨大な敵がでてくるのですが、画面からはみだす処理、クリッピングというのですが、信じられない事をしてクリッピングしていました。普通ならば描く前に座標を調べてクリッピングするなりするのですが、このゲームの表示ルーチンは以下のようになっていました。
(1)X、Y座標を調べて画面外ならば表示しない
(2)X、Y座標から画面のアドレスを計算する
(3)1文字分描く
これを1文字づつ、ご丁寧にやっていました。それでも十分な速度で動いてしまうのはMZ-700さまさま(笑)といった所です。
ゼビウスの時から導入された「仮想画面」をこのゲームでも採用しました。Mac, Windowsなどで「オフスクリーン」と呼ばれるものと同等です。ゼビウスは「地形」+「敵スプライト」の2画面を「合成用仮想画面」に転送し、そこに自機等を描き、全部描き終わった所で実際の画面(実画面)に転送していました。SB/FZでは一枚の仮想画面だけを用意し、そこに地形から何から全て描くようにしました。ゼビウスの時の「敵スプライト」用の仮想画面がなくなったため、合成する必要がなくなりゲームの速度が向上しました。そのかわりきちんと当たり判定を行うようにプログラムを作り直しましたが。妙なプログラムでも動けばいいというのが私の持論ですので、とにかくゲームができあがったのでいいんです、これで(笑)。
あと、このゲームは画面の一部をアニメーションさせています。MZ-700の数少ない文字を使ってやるわけですから、当然できる事は限られてしまいます。滝や雲を流す、夕日を点滅させたり沈ませたり、とりあえず思いつく事はやりました。が、末期のゲームからすると、たいした処理ではなくなってしまいました。
意見と文句は、こっちまでくれくれ~メール(笑)。
Update : 1996/03/10

MZ Museum
http://www.shiojiri.ne.jp/~openspc/mz700/SBFZ.html
http://www.shiojiri.ne.jp/~openspc/mz700/XEVIOUS.html
http://may.csse.muroran-it.ac.jp/~ogawa/MZMuseum/
http://www.shiojiri.ne.jp/~openspc/