PC-98のプログラム作成に関するエトセトラ - X68000のクロスアセンブルを試してみた
たまにホビーユースでは98より68kだ!という主張を見かけていたので、どんなもんかと最近いくつか古書を購入して、眺めたりしてます。
で、気になったのでフリー配布になった動作環境や情報類をサイトから落として、ソフトもないのにエミュレータ環境を構築しました。
しかし動かすソフトがないので、当然のようにソフト開発のお試しをしてみるかとなりまして。
エミュ上で当時のアセンブラを動かすのが普通(ソフト開発を思い立つ時点で普通じゃないけど)でしょうが、PC98ソフトもPC88ソフトもwindows上でクロスアセンブルしてそのままテストできる(エミュが正常に動く範囲で)時代なので、X68000もクロスアセンブルでやってみようかなと試してみました。

用意するもの

the Macroassembler AS(88やV30のお試しでも使った多対応アセンブラ)
動作環境(エミュとDiskExplorerで十分)
テキストエディタ
好みでDOSCALL.MACとIOCSCALL.MAC(情報サイトのXC2102のファイルから取り出し)

やること

今回は名著「X68000マシン語プログラミング 入門編」のchap1ラスト(こちらの中身のvol1-chap1-4のソース)のプログラムを実行し、DOSCALL.MACとIOCSCALL.MACをthe Macroassembler AS用に書き換えます。
で、the Macroassembler ASでの問題点をいくつか挙げてみます。

クロスアセンブル

常識の範囲内で利用可、と記述があるので元のソースをそのまま転載します。
_GETC		equ	$ff08
_PUTCHAR	equ	$ff02
_EXIT		equ	$ff00
*
	.dc.w	_GETC
	move.w	d0,-(sp)
	.dc.w	_PUTCHAR
	addq.l	#2,sp
	.dc.w	_EXIT
これをテキストファイルにコピペして68ktest.txtと保存します。

次に、アセンブルをワンクリックで終わらせるためのバッチを作成します。
テキストファイルに以下の記述をして、68ktest.batとして保存しましょう。
asw 68ktest.TXT -CPU 68000
p2bin 68ktest.p 68ktest.r
pause

で、the Macroassembler ASのbinフォルダに2つのファイルを放り込んで実行してみましょう。
次の画面が出てエラーが出るはずです。


色々と試した結果のエラーの理由と解決法は以下です。
「*」が「;」の代わりにコメントとして使われているのがエラーに→*を;に置き換える
「.dc.w」が通らない→「.dc」は可能だがサイズが指定できないので将来的に困りそう→the Macroassembler ASのドキュメントを見ると、dc.wとか書けばOKな模様

ということで、以下のように書き換えます。
_GETC		equ	$ff08
_PUTCHAR	equ	$ff02
_EXIT		equ	$ff00
*
	dc.w	_GETC
	move.w	d0,-(sp)
	dc.w	_PUTCHAR
	addq.l	#2,sp
	dc.w	_EXIT

これは通るので、無事動作ファイル68ktest.rが作れました。

実行してみる

まず、x68エミュでXDF形式のファイルx68ktest.XDFを作成します。
この時、ファイルを論理フォーマットしておきましょう。
XDFは内容直書きのプレーンファイルなので、フォーマット済みならdiskexplorerで開くことができます。
で、そこに作成した68ktest.rを投入します。

あとはエミュを起動してA>が出たらフロッピーを読み込ませ、ドライブを移動してから68ktestを実行すればOK。
キーボードを押すと押した一文字が画面に出力されて終了し、文字の直後からaB>のようにドライブ名が続きます。
本を持っている人なら、これから改良したりして少しずつ発展していったなーとか思うんじゃないかと。

equ面倒

一々equで定義は面倒なので、DOSCALL.MACとIOCSCALL.MACを書き換えてinclude出来るようにしてみます。
結論から言うと、変更点は以下の通り。
・.nlist、最後の.list、最後の一行はエラーになるので削除か「;」でコメントアウト
・*のコメント行もエラーになるので;に置き換え


これだけの簡単な変更でOK。
ファイルの先頭に
	INCLUDE "DOSCALL.MAC"
のように書いてやればつかえます。
マクロはそのまま使えるっぽいので、DOS _GETCのようにして使ってもよいでしょう。

the Macroassembler ASの注意点

680x0系のCPUの命令はドキュメントを読む限りはほぼ使える模様。
しかし、実機で一般的だったであろう、「.」から始まる疑似命令の多くが使えないっぽいです(使い込んでないので未調査)。
一方、the Macroassembler ASではrepeatやらifやらは独自の仕様でマクロとして対応してるので、ある程度の構造化はできるみたいです。
まあ、当時のコードを流用できない私みたいな新参には十分だろう、という結論になりました。


まあそんな感じの休日のお遊びでした。
.xdfのイメージはT98でも読めるので、ユーザーデータとかフラグとかを共通ディスク、本体は68kと98、みたいなソフトも面白そうですね、とかつぶやいてこの項はお開きとします。