1987年6月23日火曜日

[通信] Sharp PC-E 通信等設定


[通信] Sharp PC-E 通信等設定
私は1991年ぐらいまでポケコンに入れ込んでいましたが
マシン語をまるで使えないヘタレでした。
努力してみましたが、おぼえることを断念してます。
それもあってか、TYーDOS、PLINKなど重要そうなものまで全く導入しませんでした。
それと91年ごろ?壊れてしまったせいで、その後の技術については全くわかりません。
つまるところ漢字をいれるとか、常駐ソフトとか、そういった事はまるっきり知らないのです。(最近知ってビビりました)
ですので過度な期待はしないでください。
ここにあるメモは、
ポケコンとパソコンをつなぐ設定
エミュレータについて
文字のグラフィックを変更する
以上の3つは今回記述
その他の部分は
小技をまとめたメモ帳から抜粋した物が主体となっています。
(当時穴のあくほど見ていたPJから読者が投稿した物などです)
このメモを使っていろいろプログラムを組んでいました。なにかの参考になれば幸いです。
                    
PC-E500 回想録なぺーじ
http://www.geocities.jp/setokem/memo.html
http://www.geocities.jp/setokem/
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    


ポケコンとパソコンをつなぐ設定
■エミュレータについて
文字のグラフィックを変更する
文字のグラフィックを変更する2
ファンクションキー(キーバッファ関係中心)
EVALの用法
同時キー読み(簡略)
音関係
本体の設定など
その他
BASICテクニック関連
2008/01/09 
ご指摘部分をちょっと訂正しました(16進=>2進部分)。
まだまだ直す所がちょろちょろしてますので
時間見てちょくちょく直していく予定
■ポケコンとパソコンをつなぐ設定(BASICのようなテキストのみ)
パソコン側設定
高松製作所様のところにはハイパーターミナルで・・とあるけど
vistaにはありません。
ewterm2000 Ver1.32a というターミナルのフリーソフトで代用しました。作者様に感謝します。
各項目の設定は
設定の通信 
ポートCOM3 速度9600 パリティなし ストップ1ビット ビット長8ビット
送信ウエイトなし フローXON/XOFF 改行 CR+LF コードは全部 シフトSJIS
設定の環境
基本 プロトコル 無手順
設定のディレクトリ
アップロード、ダウンロード テキストファイルのフォルダを任意に設定
としました。
ポケコン側設定
POKE &BFD35;,0,255,0,80
OPEN "9600,N,8,1,A,L,&1A,X,S":CLOSE
としました。OPEN$で確認できます。
送るには
ポケコン側 LOAD リターン
パソコン側 転送からテキスト送信-ファイル選択-無手順
受けるには
パソコン側 転送から受信-ファイル名入力-送信
ポケコン側 SAVE リターン
これでできました。
反応が無い、終わらないなど、安定しない面がほんのちょっとありますが
ソフト再起動で回避できます。
ソフト切り替えやスクリーンセーバにからむところを考えるとこれは
vistaの問題であるようです。
■エミュレータについて
吸出しに3時間半かかりました。9600bpsなので注意が必要です。
パソコン エミュ間のデータ移動方法(バイナリ除く)
□取り込む
si.dat内に、入れたいベーシックをテキストのコピーアンドペーストでそのまま入れます。
このファイルはデフォルトで実行ファイルのフォルダにあります。
エミュ上で LOAD"COM:" これで読み込まれます。
□取り出す
エミュ上で SAVE"COM:"
これで so.dat内にテキストデータとして入ります。 
                    
PC-E500 回想録なぺーじ
http://www.geocities.jp/setokem/memo.html
http://www.geocities.jp/setokem/
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
■文字のグラフィックを変更する
一般的にカナ文字が変更に使われると思います。
以下はカナ文字 ア を自前のグラフィックに変更する方法です。
&BFE40以下192バイトは自由に使える空間で、ここに自前の
グラフィックデータをいれます。
POKE &BFE40;,&50,&20,&10,&0E,&0A,&0C
次にカナ文字のグラフィックデータが入っているアドレスを指定する
部分がありますので、そこに今回の&BFE40;から入れたデータを指定します。
この時 &BFDDA; を指定していますが、それは、ア にくる部分の
位置を考えてのことです。
POKE &BFC93;,&DA;,&FD;,&B;
以上で ア のグラフィックを変更しました。(鍵の絵のつもり)
直す場合
CTRL + +/-  又は
INIT"SRCN:  return
で直してください。
■文字のグラフィックを変更する(詳細)
E500シリーズは
PEEK&FFFF0; にて機種(又はバージョン)が調べられます。
文字のグラフィックを指定しているアドレスは機種によって異なります。
こんな感じです。
&FFFF0;の値
格納番地
BFC87
BFC90
BFC8A
BFC93
BFC8D
いじられたカナを直す場合、
CTRL + +/-  又は
INIT"SRCN:  return
を使いますが
プログラム中では再度、カナ文字のグラフィック指定アドレスを正規の物に指定し直す事が必要です。
この時、先の表にある番地が有効になります。
つまり
PEEK&FFFF0;の値
1 or 2 
3 or 7 
4   
6   
8
となります。
■ファンクションキー(キーバッファ関係中心)
・key0,???
 キーバッファにデータを入れる。???に入れる。
・入力後、編集
key0,A$:input a$
・RCL
key0、chr$0+chr$144
で前押した、又は最後の数値が表示される。
・16進数の訂正
key0,"&"+hex$A:INPUT"???";a$
a=eval a$
・リプレイに使う
ENDの前にkey0,"RUN"とすると、リターンキーでリプレイ
・key0の内容の場所
&BFD1A;の指す番地&EC;から後にkey0の内容がある
・プログラム中でrun、proモードの区別をなしにする
A$=CHR$0+CHR$5
b$=CHR$13
key0,a$+"list"+B$
・・・・runからproへ、そしてリスト表示
応用例
FI.+CHR$34+"E:"+B$+CHR$31+"LY"+"G.10"+B$
E:をfileして下に移動後ロードし10行目から実行。
RUNは文中使えない。
L.+STR$i+B$+CHR$28+CHR$24
i行の最後尾にいく
■ファンクションキー登録
CHR$&H81-;&H9F;
    &HE0-;&HEF;  は、普通登録できない。
例 KEY1,CHR$81+CHR$82 
ようするに2つならべると、できる。
■EVALの用法
・例1
print right$("0"+hex$ A,2)
これと同じ事が
h$="ri.(hex$(a+256),2)"
print eval h$
でできる。
・例2
a$="A.I.$ 1-48"
a=eval a$
キー入力待ちになり、0ー9を押すと0ー9の値を得る。
■同時キー読み
10 poke&fb;,&a;,&0
20 poke&f0;,xx,0
30 print peek &F2;
40 goto 30
20行目のxxが&20の場合
押されたキー
RCL
hyp
HEX
EXP
7
4
1
0
同時に押された場合、数値の合計が返ってくる。
解除はpoke&fb;,&e3;
■音関係
・音長指定
(Hz)=25600/(90+4*a) 
aは音の高低指定データ。半音ずつ変化する。 これに流す秒数をかける。
・音関係その1
T=150
L=38400/T
beep1,N,L/(22+N)*S
四分音符
八分音符
全音符
・音関係その2
マニュアルの高低指定値の周波数・・・・s
テンポ・・・・・t
四分音符は58*s/t
例 ド BEEP1,222,58,216.8/T
四分休符
forW=1to44118/T:next(nextWは駄目)
・beep 
print chr$7  beep1と同じ
・音を消す
11ピンの1番と2番をつなぐ。
絶えず1mA流れるので必要の無いときははずす。
・音を消す2
11Pコネクタ2番7番からイヤホンに
■本体の設定など
poke&fd;,&xx;
 xx ・・・・
・画面のon,off
off  poke&2000,&3E
on   poke&2000,&3F
・パワーオフ
poke&BFE00;,8,0,&41:call&FFFDC;
又は key0,chr$0+chr$15
・文字反転
poke&BFCA1;,&40
もどすのは&0
・width設定
poke&BFC9D;,40から1まで。
はじめは40
・行数制限設定
poke&BFC9E;,4から1まで。
はじめは4
C-CEキーを押すとファンクションキーを表示して元に戻ってしまいます。
・キーを押さえてからリピートするまでの時間
poke&BFCBA;,1から255まで
始めは43
・リピートの時間
poke&BFCBB;,1から255まで
始めは4
・テープの音待ち
poke&BFD48;,??
始めは80
・インサートモードのキャラクタをハートに
poke&BFC84;,&1c,&28,&F;
■その他
・メモリ
E500、E550において、&BFE40;より数バイトはフリー
&BFF00;まで192バイト(&C0;バイト)
小さいマシン語、キャラクタ変更データ入れるのに使用できます。
・外部電源
11Pコネクタ上から2番に+3番に-
乾電池4本直列分 300mA6Vいれる
・シンボルランプ点灯
E=&B8;
poke&2008,E:poke&2008,&7f
a=PEEK &200B:A=PEEK&200B:ifA<>3 LET E=E+1
poke&2008,E:poke&2008,&7F
poke&200A、????
注a=PEEK &200Bはダミーリード。レーンを調べてあわせている。
3がAレーン、8がBレーン、24がCレーン
A 0    PBL   PRO   RUN   BUSY
B 2rdF CAPS  HYP   カナ    小文字
C DE   G     RAD   E     PRINT
D 0    0     0     0     BATT
画面戻すのはPOKE&2000,&3F
・縦横比
31/28=1.107
・S1:に機械語セーブ
そのサイズのファイルを作っておく。
open"S1:MASHINE.BIN"for outputAS#1
print#1,そのサイズ分のデータ
close
のちに、savem"S1:MACHINE.BIN",番地
・BTEXT$について
初期値="S1:TEXT.BAS"
変更するとTEXT.BASの時が保存されたまま
他のプログラムが入力できる。
・エンジニアソフトウェア禁止
BTEXT$="ENG.$$$"なので
SET"ENG.$$$",Pとする。解除は、," "
・高速化改造
CPU・SC62015の上にある2.3のセラロックを3.00へ切り替える
1.31倍速くなる。
・キー入力
INKEY$1
INKEY$0
INPUT$(入力文字数)
INPUT$1
・画面転送
copy"S1:funckey"to"scrn:"
でファンクションキーの内容が画面転送される。
data.basにすると変数データを参照できる。
・コントロールキーでちょっと楽に入力
CTRL+E
CTRL+H
CTRL+K
CTRL+L
CTRL+M
CTRL+R
CTRL+U
■BASICテクニック関連
・for、next
fori=0to1step0
この間が無限ループになる。
next
・\、modを使いたい
a \ b   = int(a/b)
a mod b = a-int(a/b)*b
・-1or1
#NAME?
・ハイパーオリンピック技
k$=inkey$:if i$<>k$ LET y=y+1:i$=k$
前後をループさせる
・四捨五入
CINT(A)=INT(A+0.5)
・16=>2進データ変換
clear:cls
input w$:e=eval ("&"+w$)
t=128:fori=0to7:
a$=a$+chr$(&7F-((E AND t)<>0)*8)
t=t/2:next
print a$
変数 t を使わず
a$=a$+chr$(&7F-((E AND 2^(7-i))<>0)*8)
でもOK
a$=a$+chr$(&30-((E AND 2^(7-i))<>0))
とすると0、1で表現されます。
・RND命令 初期化
R=RND-1で乱数列を初期化する
・nextについて
nextの後の変数を書くか書かないかでスピードが異なる
・A=-1,1,-1,1・・・・
Z=1-Z:A=Z*2-1
良く考えれば、A=1:A=-A
・文字列1字挿入
1<=A<=LEN B$の範囲にある時
B$=LEFTt$(B$,A-1)+"?"+RIGHT$(B$,LENB$-A)
・0について
0は&でよい。メモリの短縮になる。スピードは犠牲になる。
・for、nextの時間差測定
fori=0to500:???:nextで実験
なお、ループ自体はfori=&to;&1f4:???:next
としても時間は変わらない。
???で
A=0  43秒
A=&  44秒
a=&0 45秒
※不必要としか思えない内容、全く理解できない内容など、内部RAM関連、BTEXT$、MEM$、reservedに関してかなりの部分割愛しました。
 ある程度確認しましたが、確認しきれていない部分もかなりあります。ですのでこの情報に関する質問にはほとんど答えられません。
 全て自己責任にてお願い致します。
                    
PC-E500 回想録なぺーじ
http://www.geocities.jp/setokem/memo.html
http://www.geocities.jp/setokem/















 

1987年6月14日日曜日

[機器][ゲーム] SEGA MASTER SYSTEM~セガ製8bitの完成型



[機器][ゲーム] SEGA MASTER SYSTEM~セガ製8bitの完成型
SEGA MASTER SYSTEM
新品価格:¥15000
中古価格:3000~13000
セガ製8bit機最後を飾ったのが,このMASTER SYSTEMです。 
黒い本体は後に発売されるメガドライブをイメージさせますネ。 FM音源と3Dグラス接続のジャック・連射機能を備えた,SG~MARK-IIIの完全上位互換マシンです。 このマシンが発売された頃はファミコンとPCエンジンの三つ巴での熾烈な販売合戦が行われていました。
実はこのマスターシステム,もともと海外用のMARK-IIIという位置付けで発売されたもので,日本で発売されるまでには少々間がありました。 ヨーロッパやアジアではかなり売れたマシンで(特にヨーロッパでは任天堂のNESより販売台数は多いという話)これまでのセガ製ハードの中では最も成功したハードであるという事が言えるかもしれませんね。
機能追加の分だけソケットが増えていますが,それ以外には別段これといった特徴はありません。 
ちなみに本体上面には相変わらずのポーズボタンに加え,連射機能をONにするボタンが追加されています。
前面部左より
電源スイッチ・コントローラソケット・マイカードソケット・3Dグラスソケット
後面部左より
映像&音声出力ソケット(RF.VIDEO.RGB)・電源ソケット
専用ジョイパッド「MODEL-3020」
デザイン的にはなかなかなのですが,海外仕様のせいか厚さが増し,少々扱い難くなった観があるマスターシステム専用パッド「MODEL-3020」従来のパッド同様に,十字キーの中央におまけスティックが取り付け可能となっています。 一応1番ボタンの所に「START」の文字がはいりましたね。 ファミコンに慣れ親しんだユーザーにとっては,8bit世代のセガマシンに触れた際に困惑する点が,このスタートボタンとポーズボタンである事は明白でしょう。ちなみに,マスターシステムに限ってはメガドライブのパッドが使用できますので,操作性に疑問を感じる方にはそちらがおすすめであります。

Tera Webpage
http://www6.airnet.ne.jp/tera/sega/item/ms.html
http://www6.airnet.ne.jp/tera/sega/item/sg1000.html
http://www6.airnet.ne.jp/tera/sega/item/sg1000_2.html









1987年5月7日木曜日

[機器] ATARI Spacy


[機器] ATARI 350








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/