アセンブラでソフトを開発しよう (original) (raw)
アセンブラでソフトを開発しよう
Windowsを使って、PC-6001やMSXのソフトを開発してみましょう。
ここに書く方法は、ベストな開発環境ではないかもしれませんが、とてもシンプルで、初めて開発をするには十分だと思いますし、私もずっとこの環境で開発をしています。
できるだけ初心者の方にも分かりやすく説明したいと思います。
準備するもの
1) Windowsが動くPC
エミュレーターやアセンブラは、なんといってもWindows用が充実しているので、それらが動作するWindowsPCが必要です。
以下、「Windows10/64bit環境」ということで話を進めます。
2) エミュレーター
PC-6001シリーズ 「PC6001VW」
デバッガ機能も、実機の再現性も素晴らしいエミュレーターです。
Bernieさんのページ「Burnout!」
http://p6ers.net/bernie/
ここの「Develop」から、最新版をダウンロードしてください。
実行方法などもそちらに詳しく書いてありますので、とりあえず「PC6001VWでBASICが起動する」というところまでは頑張りましょう。
MSXシリーズ 「blueMSX」
GUIデバッガもついており、機種ごとのカスタマイズも簡単なので、ぜひおすすめしたいエミュレーターです。
ただ、現在すでに更新を停止してしまっているのが残念です。
blueMSX日本語サイト
http://bluemsx.msxblue.com/jindex.htm
外部周辺機器のエミュレートなどの挙動が一部実機と違う場合があるので、そういう特殊なアプリケーションを開発する場合は、別のエミュレータ「openMsx」を使うのも良いでしょう。
ただ、openMsxは初心者には設定が難しかったり、デバッガが別になっていたりするので、基本的には blueMSX で大丈夫だと思います。
3) Z80アセンブラ「ZASM」
とてもシンプルで軽量なZ80アセンブラです。
Vectorにありますので、こちらからダウンロードしてください。
ZASM
http://www.vector.co.jp/soft/dl/dos/prog/se010314.html
実は、ZASMは、旧MS-DOS環境で動作するアプリなので、最新のWindowsでは動作しません。
しかし、それを動作するように変換してくれる素晴らしいツールがあります。
MS-DOS Player
http://takeda-toshiya.my.coocan.jp/msdos/
- "Binaries and Source Codes" をダウンロードして解凍してください。
- msdos\binary以下にいくつかのフォルダが作成されると思うので、エクスプローラーでi86_64フォルダを開き、事前にダウンロードした ZASM.EXE をそこにコピーしてください。
- そのフォルダを開いたまま、エクスプローラーのパス名のところに cmd と入力してEnterを押すと、コマンドプロンプトが開きます。
- コマンドプロンプト上で、msdos -cZASM64.EXE ZASM.EXE と入力してください。
- ZASM64.EXE というファイルが作成されればOKです。
4) テキストエディタ(なんでも良い)
プログラムを書く作業自体は、PCで行います。そのため、テキストファイルを編集できる、なんらかのアプリケーションが必要です。
プログラムを書くのに適したエディタがあったほうが良いと思いますが、「普段エディタなんて使ったことがない。ちょっと試してみたいだけ」という方であれば、「メモ帳」でも「Word」でも大丈夫です。
(ちなみに私は「サクラエディタ」を使っています)
環境整備(PC-6001)
それでは、サンプルとして、BASICerの夢であった(?)「逆スクロールするマシン語プログラムの作成」を例にしながら、説明していきます。
1) 開発用フォルダを作る
アセンブラ開発用のフォルダを新規に作り、すべてそのフォルダ内で作業をすすめたほうが良いと思います。
例えば、D:\Emulator\PC\PC60\REVSCR というフォルダを作ることにしましょう。
先ほど作成した ZASM64.EXE も、ここにコピーしてしまうと楽です。
2) PC6001VWの設定
まず、PC6001VWを起動して、「Option2」のタブを開いてください。そして、「Development-Folder」に、1)で作成したフォルダを指定してください。
例えば、こんな感じに。(画像では「Log-Folder」にもセットしてありますが、普通は何もしなくても良いです)
これで、PC6001VWのデバッガ上から、開発用フォルダの下にあるバッチファイルを実行したり、ファイルをロードしたりできるようになります。
3) プログラムファイルの作成
本来の開発ではここがメインとなる作業ですが、説明の都合上、サクっと作成したことにします。
テキストエディタから、プログラムを入力し、保存します。
サンプルとして、逆スクロールのプログラムを入力してみましょう。
PC-6001(32K)(PC-6001mkIIのMODE2)・PAGE2で、ページ1のテキスト画面を逆スクロールさせるプログラムは、以下の通りです。
ORG 0D000H ; プログラム開始アドレス
; シンボル定義 PG1VRM EQU 08200H ; ページ1のテキストデータがあるVRAMを「PG1VRM」という名前で定義
; プログラム REVSCROLL: ; ラベル(このプログラムの場合はなくても良いけど、どこかから呼び出すときに使う) LD DE,PG1VRM+3215+31 ; ページ1の16行目の右端のアドレスをDEに入れる LD HL,PG1VRM+3214+31 ; ページ1の15行目の右端のアドレスをHLに入れる LD BC,32*15 ; 転送するサイズ(32文字×15行) LDDR ; 「HLの内容をDEに書き込んで、HLとDEをそれぞれ-1」をBC回繰り返す便利な命令 RET ; 呼び出し元(EXECコマンドで呼ばれた場合はBASIC)に戻る
END ; ここまでアセンブルするということを示す
お約束として、最初に必ず 「ORG」 でアドレスを指定することと、最後は 「END」 を書くのは忘れないようにしてください。
また、16進数を表す場合、末尾に「H」を付けますが、「A」~「F」を表す場合は、レジスタ名と混同しないように、先頭に「0」が必要です(例えば、10進数で 255 は「0FFH」になります)。
普段から、数値を表す場合は先頭に「0」をつける習慣をつけると良いでしょう。
ちなみに、「;」以降はコメントなので、打ち込まなくても構いません。
その他、Z80アセンブラの細かい書式やニーモニックについては、ここでは説明しきれないので、専門書なり説明用のサイトを探してください。
入力が終わったら、これをテキストファイルとして保存します。
ここでは、あえてメモ帳で書いて、revscroll.txt という名前で保存してみました。
4) アセンブル用バッチファイルの作成
次に、プログラムファイルをアセンブルするバッチファイルを作成します。
以下のようなテキストファイルを作成し、 a.bat という名前で保存します。
zasm64 -Z -Crevscroll.bin -Lrevscroll.prn revscroll.txt pause
ファイル名は適当でも構いませんが、短いほうが良いと思います。拡張子は必ず「.bat」にしてください。
-Zは、インテルヘキサ形式は不必要なので出力しないようにするオプションです。
-Cが、実際にエミュレーターでロードするためのバイナリーデータファイルです。
-Lで、リストファイルを出力しています。とてもデバッグがしやすくなります。
最後に書いてあるのが、先ほど保存したプログラムファイル名(revscroll.txt)です。
これらは皆さんの必要に応じて変更してください。
最後にpauseコマンドを入れているのは、エラーなどを確認しやすくするためです。
では、実行確認です。エクスプローラーから a.bat をダブルクリックしてみましょう。
このように「 0 error(s) 」であれば、アセンブルは成功です。
サンプルの場合、revscroll.bin および revscroll.prn というファイルが作成されるはずです。
正しくアセンブルできたかどうかは、リストファイル revscroll.prn を開いて確認することができます。
D000番地から 11 FF 83 … と並んでいるのは、まぎれもなく、Z80のマシン語コードになります。アセンブルできているようですね。
5) ロード用バッチファイルの作成
最後に、エミュレーター PC6001VWからバイナリーデータファイルを簡単にロードするために、ロード用バッチファイルを作成します。
以下のようなテキストファイルを作成し、r という名前で保存します。
setbin revscroll.bin 0xd000 g
ファイル名が短いほうが楽なので、r などという名前にしてしまいました。
このバッチファイルは、PC6001VWのデバッガ用のコマンドが書かれています。
setbin は、PC6001VWにバイナリーファイルをロードする命令です。ロードするバイナリーデータファイル名の後に、プログラム内で「ORG」で定義した開始アドレスを書いてください。
g は、デバッガからBASICに戻るコマンドです。ロード後にデバッガのままにしておきたい場合は必要ありません。お好みでどうぞ。
ここまでのまとめ
サンプルを実行させた都合で、説明が長くなってしまいましたが、やっていることはとてもシンプルで、たった3つのファイルを作成しただけです。
開発用フォルダはこうなっているはずです。
ダウンロードしたファイルを変換したものが黄、自分で新規作成したファイルが紫、アセンブラが出力したファイルが赤になります。
これで準備は完了です。
ロードと実行
PC6001VWを起動します。
ここでは、サンプル実行のために、mkIIモードの、MODE2・PAGE2を選択してください。
BASIC画面になったら、デバッガへ入るコマンドの [ALT]+[F6] を入力してください。
すると、以下のようにデバッガ画面になります。
そして、ここで以下のコマンドを入力します。
! a.bat
(aの前に半角スペースを忘れずに)
すると、ウィンドウが開いてアセンブラが実行され、何かキーを押すとデバッガに戻ります。
(エクスプローラーから a.bat を直接実行しても構いません)
エラーがなければ、次に以下のコマンドを入力してください。
bat r
これで自動的にバイナリーデータをロードし、BASICに戻ります。
BASICの画面上は何も変わっていませんが、0D000H からマシン語データが読み込まれた状態になっています。
さあ、いよいよマシン語の実行です。
BASIC画面で、「exec &hd000」を入力してみましょう。
ついに夢の逆スクロールが!
プログラムの修正など
基本的に、プログラムを作る際には、
エディタでプログラムの修正 → PC6001VWのデバッガに入る → ! a.bat → bat r → BASICから exec → プログラムの修正 …
の繰り返しになります。
a.bat の実行については、デバッガ上から実行する他にも、エクスプローラーからダブルクリックや、コマンドプロンプトを出しておいて直接実行するなど、皆さんのやりやすい形で良いと思います。
最後に
ここまで書いたのはあくまでも私のやり方なので、もっと効率が良い方法もあると思いますし、皆さんが独自でカスタマイズしてみてください。
ご意見・ご質問等ありましたら、
twitter http://twitter.com/tiny_yarou
メール mailto:tiny_yarou@yahoo.co.jp
まで、お気軽にどうぞ。
2011.6.18 TINY野郎