githubでモトローラの書式のアセンブラソースをアセンブリできるクロスアセンブラが公開されていました。けっこう前から公開されていたみたいでしたが、気がついてませんでした。
これだと、古い形式で書かれた6800アセンブラソースを打ち込んでアセンブリするのに便利そうです。
モトローラの古い書式(疑似命令)のソースをアセンブリしたい
MIKBUGのオリジナルソースなんかもそうですけど、MC6800向けのアセンブラソースの疑似命令が最近のクロスアセンブラとちょっと違って独特です。文字列が / /で括られていたり、文字定数のシングルクォートが左側1つだけだったり…..MIKBUG2.0のソースの一部ですが以下のような感じ。
*
* JUMP TABLE TO ROUTINE
*
FCTABL EQU *
FCC /B/
FDB PNTBRK
FCC /C/
FDB CONT
FCC /D/
FDB DELBRK
FCC /G/
:
LOAD4 EQU *
CMPA #'S
BNE LOAD3
BSR INCH
CMPA #'3
:
そんなに行数は無いので修正してアセンブリを通せば良いという話もありますが、オリジナルのままアセンブリできると便利そう….で、知らなかったんですが、DOS時代のモトローラアランブラがUNIX系で動くように移植されているではないですか。これは使ってみたい
クロスアセンブラのビルド
MC6800向けのクロスアセンブラですが、以下のgithubで公開されています。
gccでコンパイルできますので、LinuxやMacでコンパイル環境があればすぐにビルドできます。上記リポジトリのREADMEにかいてあるとおり、リポジトリをcloneしてきて `make all` するだけです。
ビルドに成功すると、以下の実行ファイルが出来上がります。適当にパスが通ったところにCOPYしましょう。6800だけではなくて、モトローラ系CPUのいろいろなアセンブラが出来上がります。
./bin/as0 6800/6802 processors
./bin/as1 6801 processor
./bin/as4 6804 processor
./bin/as5 6805 processor
./bin/as9 6809 processor
./bin/as11 68HC11 processor
MC6800アセンブラソースのアセンブリ
クロスアセンブラができたので、MC6800用のソースをアセンブリしてみます。クロスアセンブラをコマンドラインで起動するのも良いですが、トライアンドエラーがつづくと思いましたので、Makefileをつくってみました。アセンブラの起動コマンド等は上記githubのリポジトリの `documentation`フォルダにPDFも入ってますんで読むといろいろなオプションがわかります。
ちなみに雛形はUniversal Monitorのソースに入っていたものであります。ありがとうございます!!
.SUFFIXES: .asm .hex .s19
all: mikbug2.hex
.s19.hex:
srec_cat $*.s19 -o $*.hex -Intel
.asm.s19:
as0 $*.asm -l cre c s > $*.lst
rom:
srec_cat mikbug2.hex -Intel -offset -0X8000 -o conv_mikbug2.hex -Intel
rom_write:
miniprohex -p CAT28C256 -w conv_mikbug2.hex
clean:
rm -f *.hex *.lst *.s19
ちなみに、上記のMakefileはアセンブラが出力するモトローラS形式ダンプファイルをIntelHex形式へ変換するのにSRecordを使ってまして、出来上がったIntelHex形式のファイルを 28C256 フラッシュROMへ書き込むために 書き込みアドレスを変更したIntelHex形式ファイルを生成。最後はminiproコマンドでROMへ書き込みまでやっちゃおうという欲張り仕様です。^^)
Makefileにまだ慣れてないので、ファイル名直書きがたくさんあってイマイチですが….
実際のアセンブリですが、以下のようにmakeコマンドを実施することで mikbug2.asm から mikbug2.hexができちゃうわけです。便利です。
$ make
注意点
ちょっと何点か注意点がありまして….
あまりエラーを出さないので意図しないオブジェクトコードが生成されることがあります。
インデクスアドレシングの書式
以下のように、インデクスレジスタ Xを使ってインデクスアドレシングでストア、コンペア、ジャンプなどを書きたい場合 `STAA X`などと書くとたいていの最近のアセンブラではエラーを吐きますが、このアセンブラはエラーを吐かずエクステンデッドアドレシングの謎なコードを吐いてきます。
STAA X ⇢ STAA ,X
CMPA X ⇢ CMPA ,X
JMP X ⇢ JMP ,X
ただしくは `STAA ,X`のように書かないと、インデクスアドレシングになった正しいコードが生成されないので注意してください。
「文字」の定義は シングルクォート 1つ
モトローラのオリジナルのアセンブラの書式に準拠してますので、最近のクロスアセンブラと違って「文字」の定義はシングルクォートが1つだけです。
FCB 'A,'B,'C,0
STAA #'Z
以下のように書くとエラーは出ませんが、コード生成が途中で止まったりとヘンテコになりますので注意してください。(エラーが出てほしいなぁ…)
FCB 'A','B','C',0 ☓この書き方はダメ
これで古い?表記のアセンブラソースもバッチリ
このクロスアセンブラで、MIKBUG2.0のソースみたいな古い表記のMC6800 CPUアセンブラソースもバッチリアセンブリできまして、ROM化もできますよ。みなさまも、ぜひぜひ。
コメント