2019年10月5日に発売されたPasocomMini PC-8001は、1979年の8ビットPCをミニ化した、レトロな玩具。実際にプログラミングができるほか、同梱ゲームを遊ぶこともできる。本記事は、2020年9月10日に配信されたアップデート情報をお届け。ファミ通編集部のででおがプログラミングに挑戦する企画も必見だ。
※本記事は週刊ファミ通2020年10月1日号に掲載した記事を増補改訂したものです。
PasocomMini PC-8001とは?
PC-8001は、1979年9月にNECより発売された、国産初期の8ビットPC。NEC初の本格的なPCで、国立科学博物館産業技術史資料センターによる2016年度の重要科学技術史資料に登録されるなど、産業史に残る名パソコンだ。
当時のPCは(当時としては)高性能かつ、非常に高価な存在だったが、PC-8001は比較的安価。大きな特徴は、会話型言語であるマイクロソフトのプログラミング言語“BASIC”を採用しており、初心者でも手軽にプログラミングを楽しむことができたこと。8色カラー表示というスペックで、比較的グラフィック面も表現しやすく、アーケードそのものとまではいかないものの、多彩なゲームを家庭で楽しめた(ちなみにファミリーコンピュータの発売は、4年後の1983年)。
そんなPC-8001をハル研究所が主体となりミニサイズ化にしたのが、PasocomMini PC-8001。本体に別途用意が必要なUSBキーボードとミニHDMIでディスプレイに接続すれば、BASICプログラミングが可能。さらに全21タイトルのゲームが同梱されており、すぐに遊ぶことができる。現代ならではの、ステートセーブ&ロード機能もアリ。また、ゲームパッドにも対応しており、多彩なコントローラーでゲームをプレイできるのもポイントだ。
2020年9月10日のアップデートでナムコ(当時)の名作3タイトルが新たに収録
今回のアップデートで既存の15タイトルに加えて、新たにナムコの『ラリーX』、『スーパーギャラクシアン』、『ディグダグ』の3タイトルが追加された。なおアップデートは、公式サイトにて配布されるアップデートツールをダウンロードし、パソコンミニのシステムが書き込まれているmicroSDカードに適用する。
スーパーギャラクシアン
画面に出現するエイリアンたちを、自機を操作し撃破していくシューティングゲーム。降下攻撃、一斉攻撃など、当時としては敵の動きが多彩。
ラリーX
クルマを操作し、ライバルや岩を避けながら、全10ヵ所のチェックポイント通過を目指す。PC-8001版は、マップ表示もきちんと再現されている。
ディグダグ
主人公のディグダグを操作して地面を掘り進みながら、敵を膨らませて撃破するアクションゲーム。同時撃破でハイスコアが狙える岩落としが攻略の鍵。
初めてでも誰もが楽しめる! N-BASICでプログラムを組んでみよう
本機器では、N-BASIC という言語を使ってプログラムを作成できる。本記事の記者(ででお)が、ゲーム作りにチャレンジしてみた。なお、1980~1990年代にファミリーベーシックやX68000でBASICに触れた経験はあり、当時何度か『マイコンBASICマガジン』にプログラムを投稿したものの、採用率はゼロ。以降、四半世紀ほどプログラミングをしていないため、当時覚えたプログラムの文法も記憶の彼方に飛んでいる。つまり、ほぼ初心者同然の素人だ。
しかし、PasocomMini PC-8001では、N-BASICのコマンド説明を画面内で参照しながらプログラミングが行えるのだ。これはプログラミング初心者にとって、かなりうれしい機能(何しろ昔は、分厚いマニュアルを片手に「このコマンドはどう使うんだっけ?」と、調べながらやっていたものだ)。
まずはどんなゲームを作るかを決める!
“ゲームを作る”といっても、初心者にとっては何から始めればいいかわからないだろう。そこでまずは、完成形がおもしろいものになるかどうかはさておき、シンプルでゲームっぽいものを目指してみてはどうだろうか。記者が考えたのは、『スペースインベーダー』風な操作とブロックくずしを組み合わせたようなプログラムだ。整理すると以下の感じ。
ファミ通ベーダー(仮称)
- 画面上部に巨大な“ファミ通”のロゴを表示する。
- 画面下に自機を表示し、キーボードの“4”と“6”で左右に動かせる。
- “Z”キーを押すとショットを発射可能に。ショットがロゴに当たるとその部分を壊せる。
作りたいものが決まったので、実際にどうやったのか、順を追って説明していこう。
“ファミ通”のロゴを表示する
画面に何かを表示する方法はいくつかあるが、基本的なBASICコマンド“LOCATE”と“PRINT”を使ってみる。LOCATEとは、カーソルの位置を設定する命令、PRINTは画面上に数値やテキストを表示する命令だ。
LOCATE X位置,Y位置(,カーソル表示スイッチ)
とりあえずカッコ内は忘れてほしい。位置の座標は画面の左上が0,0で、1文字分ずつずれていく。
PRINT [,|;|式……]
マニュアル通りに説明すると上記の通りだが、難しいことは考えないで PRINT "あ" のような使いかたでいい。これでカーソル位置に“あ”と表示できる。
ここまで覚えたところで、画面に大きな“ファミ通”を表示する方法はわかっただろうか。
100 LOCATE 0,1
110 PRINT " ■■■■■■■ ■■■■■■ ■■ ■■■■■ "
120 PRINT " ■ ■■ "
130 PRINT " ■ ■■■■■ ■■■■■ ■■ ■■■■■ "
140 PRINT " ■ ■■■ ■ ■■■■■ "
150 PRINT " ■ ■■ ■■■ ■ "
160 PRINT " ■■■■ ■■ ■■■ ■■■■■■■■■ "
この記事を読む環境(改行位置やフォント)によっては見づらいかもしれないが、このプログラムを組んでから実行する(“RUN”と打ち込んでEnterキーを押す)と、画面上部に"ファミ通"のロゴ風なブロックが描かれる。「左の行番号は何?」という疑問にお答えしておくと、BASICはこういうものとして受け止め、難しく考えないように。なお、行番号は10ごとじゃなくても大丈夫だ。
さて、表示はできたが、これは単に画面上に描いただけ。ゲームとして発展させていくことを考えると、ロゴの形をデータ化したい。そこで、“READ”と“DATA”というコマンドを使って0と1の信号として描くことにしてみる。それがこちら。
100行の“REM”は注釈のコマンドなので気にしなくていい。110行の説明も割愛(おまじないみたいなもの)。
120行から170行までのところを、192回(ファミ通ロゴ部分の32列×6行)くり返し実行している。FORの書式は以下。
FOR 変数名=式 TO 式[STEP 式]
NEXT [変数名[,変数名……]]
一見ややこしそうだが、FOR~TOとNEXTはワンセットで、指定した式のぶんだけくり返しループさせるコマンドだ。このループの中で、先述した“READ”と“DATA”で400行以降のデータを引っ張り出してきている。
READ 変数[,変数]
DATA 定数[,定数……]
400行以降で用意した“ファミ通”ロゴ風の地形を、130行のREADでDという変数に入れている。ループするたび、Dには0か1のどちらかが入るので、0なら空白を、1なら“■”を文字列用の変数A$に代入。150行のLOCATE文では、カーソルの位置をひとつずつずらして、160行で画面に表示している。“MOD”は整数を割り算した余り、"¥"は“÷”のこと。Iが0~191に変わっていく中で、カーソルがどう移動するのかを考えるとわかりやすいだろう。
なお、140行のIF~THENは、“もし~ならば~する。[違うなら~する]”という条件文だ。書式は以下で、[ ]部分はなくてもいい。
IF 条件式 THEN 文 [ELSE 文]
画面下に自機を表示し、左右に動かせるようにする
画面の装飾ができたので、つぎはいよいよメインルーチンを作成する。自機は簡単に“A”として、キー入力“4”で左に、“6”で右に動かせるようにしたい。それで組んでみたのが以下のルーチン。
まずは200行で自機の初期X座標を20(Y座標は17で不動)に設定して、210~260行をGOTO文で無制限にループさせる。GOTOの書式は以下の通りとてもシンプル。
GOTO 行番号
210行の“INKEY$”というのは、リアルタイムで入力されているキーのこと。220行と230行の“X>5”、“X<34”は、自機が画面端まで行かないための制限。
250行がPRINT "A"ではなくPRINT " A "なのは、自機が1マス横に移動するのと同時に残像を消すため。スペースを入れないとどうなるのかは、一度は試してみてほしい。
ショットを発射。ショットがロゴに当たると壊せるように?
メインルーチンも完成したので、弾の処理を入れてみた。“Z”キーが押されたらサブルーチンに飛ばす仕組みだ。
まず、GOTO文を270行にずらし、手前に以下の行を追加した。
260 IF A$="z" THEN GOSUB 310
“GOSUB”という命令で、310行から390行(“RETURN”のある行)まで実行して戻ってくる仕組みだ。
GOSUB 行番号
RETURN
自機の先端から画面上端まで16マスあるので、弾“|”を描いては消していく。このループのみだと最後に弾が画面上部に描かれたままになってしまうため、380行できれいに消した。ファミ通ロゴ部分の“■”に弾が当たったときの判定はまだ入れていないが、“|”で上書きするため、結果的に■を破壊したような感じになる。
PasocomMini PC-8001のN-BASICでゲーム風のプログラムを組んでみた!
現時点ではクリアーやミスの条件、敵の攻撃や時間制限なども入れていないため、ゲームと言い切るようなシロモノではないものの、“それっぽいモノ”にはなった気がする! せっかくなので、PasocomMiniのディレクター・郡司照幸氏にお見せして、感想のコメントをいただいた!
郡司照幸氏(ぐんじ てるゆき)
PasocomMiniディレクター。
郡司最初に思ったのが「ファミ通を撃っちゃってもいいの?!」でした(笑)。短いプログラムながらも、発射と移動の動作を取り入れてるのがいいですね。それと意外とややこしいのが、“もともと表示されていた自機をどうやって消すか?”なのですが、シンプルな処理で対応していますね。当時よくあったテクニックです。ここから少しずつ要素を足していけば、立派な自作ゲームが完成すると思います!
なお、最初に改良する点は、弾を発射しても移動可能にすることでしょう。ゲームプログラムの特徴のひとつとして、“すべてが同時に動く”というところですしね。
それと1行に複数の命令を記述するとプログラムがすっきりして、見やすくなります(“:”(コロン)で区切る)。たとえば LOCATE X,Y:PRINT " A " のように同じ要素をまとめてしまいます。
つぎに、敵から攻撃というのを足してみます。敵弾の軌跡は真っすぐより、ナナメに移動して来たほうが難度が上がりますので、お試し下さい。
そして最後に、たとえばここではすべてのブロックを消すというのをクリア条件とすれば、自作ゲームの完成です。
まとめ:プログラミングはとても楽しい!
これからは、郡司氏のアドバイスを参考に、ゲームとしての完成を目指してみようかと思う。プログラミングの知識がほぼない(=忘れていた)状態から、それほど時間をかけずにこのくらいのものを作ってみたが、アレコレと試行錯誤したプログラムが無事に実行できたのは感慨深いし、何より制作過程がとても楽しい!
本記事を読んでいただいた皆さんも、ぜひプログラミングの世界に足を踏み入れてほしい。がんばれば、内蔵のゲームと同等の作品を作り上げることも可能なはずだ。