【MSX向けゲーム開発をしよう】
MSXとは1980年代、西和彦氏がマイクロソフト副社長時代に提唱したパソコン共通規格です。
当時のMSXは低価格なパソコンとして、またゲーム機として人気があり、国内家電メーカーを巻き込む形でセンセーションを起こしました。
MSXアセンブラプログラミングを通し、80年代のハードウェア技術者がどのような思想でハードをデザインし、プログラマがソフトウェアを提供したか学ぶ事ができます。
さぁ、MSXアセンブラを始めませんか?
【開発環境をそろえよう】
まずはお手軽に開発という事で、「MSX MAGAZINE 永久保存版3」を購入すべし。
WindowsOS上でMSX用ソフトの開発から動作確認全て行える。
ある程度ソフトが完成に近づいたら、実機動作確認用に1台FDD付きMSX2本体を購入しよう。
ただしMSXは既に国内では生産中止だから、オークションで状態の良い個体を探そう。
ハードウェア横スクロールを試したいなら、もちろんMSX2+だ。
MSX2はFM音源はオプションだから、男なら要注意。2+も一部オプションあり
FDDだけ持っているという男気あふれる君、1ChipMSXという手もある。
1ChipMSXならば君だけのバージンガールを手に入れる事ができるぞ。
【MSX MAGAZINE 永久保存版3】
アセンブラやCコンパイラ、リンカからデバッガまで全て揃っている最強マガジン
MSXPlayer(MSXエミュレータ)付きだから、WindowsでMSXの開発が可能。
こんな激熱なマガズインが存在してよいのか!!いーんです
・MSXPlayer開発ツールのセーブ情報はどこ?
→以下のディレクトリを参考にしてください。
C:\Documents and Settings\ユーザ名\Application Data\MSX Association\MSXPLAYer
【アセンブラプログラミング(1)Hello worldを表示しよう】
まずはエディタ(akid)を利用してプログラムを入力してみましょう。
MSXPlayer起動後、akidを立ち上げます。
画面上に「File name:」と表示されますので、hello.macとして下さい。
その後以下のコードを入力して下さい。
.Z80
CR EQU 0DH
LF EQU 0AH
SYSTEM EQU 0005H
ASEG
ORG 100H
LD DE,MSG1
CALL PUTMSG
RET
MSG1: DB CR,LF,'Hello world! (^-^)/ $'
;
; putmsg
;
PUTMSG:
LD C,9
CALL SYSTEM
RET
END
入力し終えたら、F1キーを押下します。
画面上方に「 E..Save/End」とありますので、eキーを押して下さい。
これで先ほど入力したソースファイルがhello.macとして作成されました。
dirコマンドで確認してみましょう。どうですか、hello.macファイルはありますか?
次にアセンブラとリンカを利用し、実行ファイルを作成しましょう。
まずはアセンブラから。以下を入力します。
m80 =hello
「No Fatal error(s)」と表示されたら正常です。
次はリンカです。以下を入力します。
l80 hello,hello/n/e
これで実行ファイルが作成されました。以下を入力しましょう。
hello
どうです?「Hello world」が表示されましたか?
ではプログラムの説明に入ります。
.Z80
Z80CPUのコードを出力する指示です。
CR EQU 0DH
LF EQU 0AH
SYSTEM EQU 0005H
EQUは疑似命令です。記述方法としては「A EQU B」となり、以降AはBとみなします。
ASEG
ORG 100H
実行ファイルが実行時にメモリ上にロードされる際、コードエリアを100Hからロードする指示です。
なぜ100Hか、MSX-DOSが0H〜FFHを利用しているからです。
たとえばシステムコール関数のジャンプテーブルや、実行時のパラメータが格納されています。
MSX-DOSとプログラムが共存する場合は100H以降にコードエリアを設置する必要があります。
LD DE,MSG1
DEレジスタにラベル名MSG1で表したBYTE情報のアドレスを設置しています。
何故か。この後登場する文字列表示関数にて利用するからです。
CALL PUTMSG
ユーザ定義のPUTMSG関数を呼び出します。ここで制御がPUTMSGに飛びます。
PUTMSG:
LD C,9
CALL SYSTEM
RET
1行目は関数の開始を宣言します。
2行目、Cレジスタに数値の9を設定します。
3行目SYSTEM(0005H)を呼び出します。
MSXDOS領域の0005H番地は、システムコール関数のジャンプテーブルが設定されています。
システムコールとは、PCの処理でよく利用される入出力関数をMSXDOSが用意しており、その関数を呼び出す方法です。
つまりこのサンプルでは、MSXDOSのシステムコールを利用して、文字列の表示を行いました。
ここで改めて記しますと、文字列表示のシステムコール利用法は以下となります。
LD DE,文字列が設置されたアドレス
LD C,9
CALL 0005H
次に4行目のRETにて、PUTMSGを呼び出した行、
CALL PUTMSG
の次の行に制御が移ります。
RET
以上でhelloが終了し、MSXDOSに制御が戻ります。
どうでしたか、お分かり頂けましたか?
これであなたも立派なアセンブラプログラマです。
【アセンブラプログラミング(2)タイマー割り込みを利用しよう】
こちら
【その他】
以下は私がMマガの開発ツール利用時に遭遇した現象と対策である。
・ginit等のglib関数が利用できない。
→対処として、include\cc.batをakidにて開き、2行目、6行目を下のように変更すればOK。
Mマガ添付のMSX-CLibraryユーザーズマニュアルに記述されていました。

・akidの起動後にエラーが発生する。
→対処方調査中、一度発生するとそれ以降akidは利用できなくなるようだ。
セーブフォルダのsavファイルを削除し、初期状態に戻すのが吉(ただし今までの保存情報がなくなるよ)

【リンク】
MSXのゲーム開発で心が折れそうになった君、是非以下のサイトを参考にしてくれ。
・MSXForm(Windows上でMSX用に2DDフロッピーをフォーマットする)
http://homepage3.nifty.com/Tatsu_syo/MySoft/MSXForm/index.html
・テクハンWiki化計画(テクニカルハンドブックを持っていない人向け?)
http://ngs.no.coocan.jp/doc/wiki.cgi/TechHan?page=FrontPage
「MSX」はMSXライセンシングコーポレーションの登録商標です