MSXで楽しみながら何か作りましょう!
筆者紹介
最初に私の紹介から。私は1973年生まれのおじさん。システムエンジニアを生業にしています。セーラー服を着たりギターを弾いて歌ったり酒を飲んだりしています。ファミリーコンピュータ(通称ファミコン、世界的にはNES)が世の中に登場した頃に小学生でした。友人宅でファミコンで遊びながら「どうやってゲームって出来てるんだろう?」と思ったきっかけから、当時はファミコンよりもMSXを買いました。そしてBASICというものを知り、さらにはマシン語というものがあってめちゃくちゃ速度が早いプログラミングも出来るんだ!ということを知り頑張って勉強していたものの当時の少年の頭脳レベルではわからずじまいになっていました。時は流れ、いまでは当時わからなかったこともわかるようになってきたのでその情報をnoteにしたためようと思っています。何よりも”楽しく”をモットーにしていきたいです。
twitter:@brapunch2000
MSX爆誕
1983年にMSXの規格が制定され、その規格にそったコンピュータ機器はMSXとして発売されるようになります。規格にそっていればどのメーカーでもMSXをうたってよいため、SONY、Panasonic、CASIOなどさまざまなメーカーからMSXコンピュータが発売されるようになりました。MSXはホビーコンピュータと呼ばれるなど、キーボードに本体が一体化したやつで、ファミコンのようにROMカートリッジを挿入するスロットが本体についてます。ゲームも出来るし、プログラミングも出来る。当時の少年少女にプログラミングやらコンピュータの仕組みやらを教えるきっかけになったMSXの功績は偉大だと思っていますし、そのおかげで今の私の生業にもつながっていると思っています。MSXのCPU(頭脳)はザイログ社のZ80というCPUです。現在もパチンコとか組み込みで使われているようですが、8bitCPUということもあって初心者(?)にはうってつけの学習教材だと思います。
このnoteで取り上げる内容について
このnoteでは以下の点について書きつらねていこうと思います。
目的
自分でMSXのゲームがマシン語で作れるようになることを目的とします。筆者も自作ゲームの経験はありませんので説明しながらゲームが出来たらいいなあと考えています。プログラミングのきっかけは”楽しむ”ことです。現代におけるWebやらDBとかをきっかけにプログラミングを学んでいるひとたちは少しかわいそうに思えます。楽しいんでしょうか?キャラが手元のコントローラで操作して跳んだり跳ねたり、ボタンを押したら弾が飛んだり、音がなるほうが楽しいに決まってますよね?私はそう思いますが、どうなんでしょう?
学習ステップ
以下のステップで学習します。筆者はMSX2以降の技術要素を知りませんのでMSX1限定とします。たぶん説明中にトピックが前後することはあると思いますが、おおよそ以下のステップを学習すれば"ゲームっぽい何か"はできるはず。ゲームはバランス。以下の仕組みをいかにして組み合わせ、表現するかだけがゲーム作りの醍醐味です(たぶん)
VDPの説明
GRAPHICモードの説明
SCREEN1
SCREEN2
VRAMの説明
文字の表示とVRAMの関係
文字とパターンテーブル
パターンテーブルで文字の形を変えれる
GRAPHIC2
画面が上段、中段、下段に分割されてる
分割単位毎にパターンテーブル
分割単位毎にカラーテーブル
カラーテーブルが優秀(1ライン8ドットで2色が割当可能)
スプライト
スプライトは面という概念
水平に4面並ぶと5面以上は消える
スプライトの情報もVRAMにある
パターンで形が出来る
アトリビュートで表示座標と色を指定
スプライト同士の衝突判定
パターンテーブルで作った文字を動かす
VRAMがとにかくだいじ
スプライトとの当たり判定
文字どうしの当たり判定
キー入力
ジョイスティックとトリガー
PSG
割り込み
1/60毎に割込がかかる
マシン語とアセンブラ
マシン語についても解説中にちょこちょこ説明をいれてきます。マシン語のプログラミングではアセンブラを使います。コンパイラみたいなもんです。人間が読み解けるようなコードをコンピュータが理解できるデータ(マシン語)に翻訳してくれるソフトウェアがアセンブラです。とはいえ、他人が作ったコードは人間が読み解くのもしんどいんですけどね・・。
私の少年時代ではそんなソフトウェアはなくてハンドアセンブル(手作業でマシン語に変換)していました。おそろしくしんどいことを何も考えずにやっていたものですね・・。
現在は便利な世の中になっているので、z88dkというものが出回っておりそれを使ってマシン語のプログラミングを実践していきたいと思います。
コード→z88dkでマシン語にする→動かす!
という流れです。
私が少年時代ではマシン語はマシン語入門だけしかなく「このコードでいったい何が出来るの?ゲームとイメージつかない!!」というものばかりで、それが少年時代の私を苦しめました。なので、出来るだけ「こういうコードを書くとこうなるよ」というサンプルを入れていこうと思います。
WebMSX
これまた便利な世の中になったものでして、ブラウザ上で動作するMSXエミュレータのWebMSXというものがあります。z88dkでROMイメージを作ってWebMSXで動かしていきます。WebMSXの使いかたはまたのちほど。
公開GitHub
このnoteで説明するコードはGitHubに随時公開していきます。というのも先日、ある程度まで作ったマシン語プログラムのソースコードがぶっとびました。。。バックアップは大切ですね。なによりもコードがぶっとんだことによって、noteやGitHubで知識を共有するほうがひとりでコツコツ作るよりも有意義だし楽しいことに気づきました。雨ふって地かたまる。というやつでしょうか。コードが汚いかもしれませんがそこはご愛嬌でお願いします・・。GitHubのWikiにももっとたくさんの情報源について紹介していますのでそちらもあわせてご覧いただければと思います。
MSX2テクニカルハンドブック(通称:テクハン)
少年時代にもちろん買って何度も読んでいた本です。さっぱりわからなかってれど読んでいればそのうち何かわかるんじゃないか?と思ってずっと読んでました。結果、わかりませんでしたが。。。この本はMSXでプログラミングするためには必携の本です。マシン語でプログラミングするときは特に。有志のかたがWikiにまとめてくれているようでほんと助かります。感謝しきれませんね。こちらの情報も参考にしつつ解説していければなと思っています。
知識は共有するもの。
知識は楽しむもの。
次回から、ものづくりの解説をしていきます。
それではまた!