戻る

Step 1

メニュー

  1. 環境をそろえよう
  2. アセンブルしてみよう
  3. MSXで動くROMファイルを作ろう
  4. おさらい

環境をそろえよう

さて、何事にも準備は必要です。

WindowsでMSX用のROMファイルを作成する ということを目的として、必要な環境をそろえましょう。

(以降、すべて Windows7/Windows10 で動作確認しているので、それ以外のOSでは違う動作をするかもしれません。ご了承ください)

必要なもの

  1. WindowsPCと作業用フォルダ
  2. Z80用の「アセンブラ」と呼ばれるツール
  3. プログラムの書かれたテキストファイル

まず、作業用のフォルダを、Windowsからアクセスできるどこかに作成してください。

ここでは MSXPRG という名前の作業フォルダを作って、これからの作業はすべてそのフォルダの中で行うことにします。

次に「アセンブラ」という、プログラムをマシン語に変換してくれるツールを用意します。

アセンブラには色々な種類があり、それぞれ機能や特色が違いますが、なるべく一般的な書式で説明するつもりなので、Windows上で動く「Z80アセンブラ」であれば何でも良いです。

初めて使うのであれば、紅茶羊羹さん 作成の z80as などはオススメです。

We Love MZ-700(z80asはこちらにあります)
http://www.maroon.dti.ne.jp/youkan/mz700/index.html

その他のツール のところにある Z80ASをダウンロード・展開して、その中にある z80as.exe というファイルを、先ほど作成した作業フォルダに保存してください。

最後に、プログラムの書かれたテキストファイル を作成しましょう。

…といっても、プログラムはこれから書くので、空のファイルで構いません。

とりあえず、作業フォルダの中に、エクスプローラー右クリック→新規作成→テキストドキュメントで msxtest.txt というファイルを作成してください。

開発のための環境整備はこれで終わりです。

コマンドプロンプトを使ってみよう

環境も整ったことですし、すぐにでもROMを作成して遊んでみたいところですが、もう少しだけ我慢してください。

ここで、コマンドプロンプト の説明をします。知っている人は読み飛ばして構いません。

皆さんが普段使っている Windows のアプリケーションは、「エクスプローラーから実行ファイルをダブルクリック」で起動するものが多いと思います。

しかし、先ほどダウンロードしてきたアセンブラ z80as.exe は、エクスプローラー上でダブルクリックしても、一瞬黒いウィンドウのようなものが出るだけで、特に何が起こるわけでもありません。

z80as.exe は、「コマンドプロンプト」 と呼ばれる 黒い背景に文字だけが表示されるウィンドウの中で動作します。

コマンドプロンプトを簡単に開くには、エクスプローラーで先ほどの作業フォルダを開き、フォルダ名が入っているところに cmd と入力して Enter を押してください。

ここに cmd と入力してEnterを押すと…

画面のどこかにこのようなウィンドウが開きます。これが コマンドプロンプト です。

アセンブル作業は、このウィンドウの中で、キーボードからコマンドを直接入力することで行います

…といっても、決して難しいことはないので、安心してください。

コマンドプロンプトの中でアプリケーションを実行させるのは簡単です。例えば、z80as.exe を実行するには、

z80as

と入力して Enter を押してみてください。

ずらずらっと謎のメッセージが表示されたでしょうか。

本来であれば、z80as の後に「アセンブルするファイル名」などの記述が必要なのですが、今回は何も指定せずに実行したので、ヘルプが表示されました。

このように、アセンブラの実行はコマンドプロンプトの中で行い、メッセージもコマンドプロンプトに表示される と覚えておいてください。

(もちろん、すべてがそういうわけではなく、普通のWindowsアプリのようにウィンドウが開くアセンブラも存在します)

MSXで動くROMファイルを作ろう

では、いよいよMSXで実際に動かすことができるROMの作成です。

空のファイルだった msxtest.txt を以下のように編集し、保存してください。

サンプルプログラム1

ORG 04000H ; 先頭アドレス(メモリの位置)の指定。ROM版のソフトは(基本的に)4000H から置くことになっているので、必ずこの行を書くこと。 DB 041H,042H ; 最初の2バイトに 41H,42H (文字列に直すと"AB") が書かれているとMSXはROMカートリッジと判断する。これも必須。 DW START ; 次の2バイトにプログラムのスタートアドレスを書く。起動時にこのアドレスに自動的にジャンプする。 DB 0,0,0,0 ; DB 0,0,0,0 ; DB 0,0,0,0 ; 12バイト(400FHまで)を0で埋めるというのがお約束。 START: ; 実際のプログラムはここからスタートする。 JP $ ; アセンブラで $マークは「この行自身のアドレス」を表す。JP はジャンプ命令。つまり無限ループ。 DS 08000H-$ ; ファイルサイズがちょうど16KBになるように、最後に (8000H - この行のアドレス)バイト のスペースを追加。これがないとエミュによっては動かないものも。 END ; 多くのアセンブラは最後にENDと記述する必要がある。この行以降は何を書いても無視される。

ここで使われている謎の言葉が ニーモニック と呼ばれるものです。

ここまで入力し、保存できたら、いよいよ初めてのアセンブルを行ってみましょう。

z80as msxtest.txt -o msxtest.rom

エラーがなければ、msxtest.rom という 16KBのファイルが作成されているはずです。

これがMSX用のROMファイルとなります。

エミュレーターに読み込ませれば動作しますし、このファイルを実際にROMに焼けばMSX実機で動作させることもできます。

どうでしょうか。ROM用のプログラム、意外と簡単に作れると思いませんか?私は思います!

せっかくROMファイルができたので、実際に動作させてみましょう。

動作確認には、WebMSX という、ブラウザ上で動くエミュレータを使います。

これならインストールもいらないですし、誰でも今すぐに実行することができるので、とても便利です。

起動するには下のリンクをクリックしてみてください。

WebMSX
http://webmsx.org/

WebMSXが起動したら、できたばかりの msxtest.rom をブラウザにドラッグ&ドロップして、Cartridge 1 にセットしてください。

さて、どうでしょうか…

青い画面で停止してしまいましたか?

それなら成功です!おめでとうございます!

先ほどのプログラムは、「ROMが起動したらその状態で停止する」というプログラムなので、それが正しい動作となります。

さて、ここまでで MSX用のROMファイルの作り方のチュートリアルは終わりです。

MSXのことを何も知らなかったり、プログラムを全くやったことがない人でもわかるように、なるべく丁寧に書いたつもりですが、いかがだったでしょうか?

もし、わからないことがあれば、ぜひ twitter でコメントいただければと思います。

次の章からは、MSXを制御する方法について、少しずつ書いていきたいと思います。

おさらい

アセンブラの復習1

ORG アドレス
プログラムを配置するアドレスを指定します。アドレスの部分には、ラベルを書くこともできます。アセンブラプログラムの先頭には必ず書くようにしてください。MSXのROMファイルの場合は 4000H に配置するのが一般的です。
04000H 041H など
末尾にHが付いた数字は16進数を表します。また、A~Fで始まる場合は先頭に0をつけなければならないので、とりあえず先頭に0を付ける癖をつけておくと良いかもしれません。
; コメント
セミコロン(;)以降、行末までは、コメントとみなされ、アセンブル時には無視されます。
START: など
任意の文字列の後にコロン(:)を書くことで、そのアドレスに名前(ラベル)をつけて記憶します。プログラムのジャンプ先や、データの先頭アドレスなどに使います。
DB データ,データ,…
define byte の略です。8ビット(1バイト)のデータをプログラム中に埋め込みます。カンマで区切ることで、複数の8ビットデータを並べて埋め込むことができます。
DW データ,データ,…
define word の略です。16ビット(2バイト)のデータをプログラム中に埋め込みます。カンマで区切ることで、複数の16ビットデータを並べて埋め込むことができます。アドレスやラベルも16ビットの数値なので、この命令でデータとして埋め込むことができます。
DS サイズ
define space の略です。指定したサイズの空白(普通は00Hの連続)を埋め込みます。MSXのROMファイルを作成する場合、プログラムの最後にこれを書くことで、ファイルサイズの調整に使ったりもします。
$
この行のマシン語アドレスを示す文字です。アセンブルした際に、実際の値に置換されます。
JP アドレス
指定したアドレスにジャンプします。アドレスの部分には、ラベルを書くこともできます。
END
アセンブルするプログラムの最後に記述します。

MSXの仕様の復習1

ROMファイルのアドレス
MSXのROMカートリッジ用のマシン語プログラムを書く場合、必ず先頭アドレスが 4000H になるように書きましょう。プログラムの先頭に

ORG 04000H

のように指定します。
ROMファイルのヘッダ
ROMカートリッジの先頭から16バイト(4000H-400FH)には意味があります。最初の2バイトは 41H,42H(文字列で"AB")、次の2バイトはスタートアドレス、その後 400FH までは0で埋めてください。実際のプログラムは 4010H以降に書きましょう。

DB 041H,042H DW 04010H ; スタートアドレス。4010Hからプログラムをスタートさせる DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0

ROMファイルのサイズ
サイズの小さなROMからメガROMまで、MSXは色々なサイズのROMを読むことができますが、とりあえず、自作するときは 16KB(4000H-7FFFH)にしておきましょう。プログラムの最後、ENDの直前に

DS 08000H-$

と書けばOKです。

参考リンク


戻る