The Macro Assembler ASは、一つの実行ファイルASW.exeで多数のマイクロプロセッサに対応しています。単にASWと入力して実行すると、使用できるオプションに続けて、膨大な対応マイクロプロセッサのリストが出てきます。
現状では、取得したプログラムの開発にThe Macro Assembler ASが使用されていたのであれば、The Macro Assembler ASを使用するという使い方になっています。
海外で作成されたアセンブリ言語のプログラムは、The Macro Assembler ASを使用することを前提に作成されているものがあり、それらをアセンブルするときに利用しています。
また、6502-CORE に搭載されているUniversal Monitor のアセンブルにもThe Macro Assemler ASが使われているので、その修正等でも使用しています。
新規のプログラムの作成では、次の節で説明しているアークピットのX6502.exeをよく使用しているのですが、その正式な配布サイトが閉じられてしまったので、The Macro Assembler ASをメインのアセンブラとして使用すべきなのかもしれません。
The Macro Assembler ASのインストール
The Macro Assembler ASは、以下のWEBページで公開されています。
また、このページに示されている最初のリンクで、以下のダウンロードページに移行します。
このページの初めの方の[Win32 Binaries]の下にあるリンクから[latest beta version, german+english]と書かれていますが、Windows版をの実行ファイルをダウンロードできます。
ダウンロードファイル名はaswcurr.zipです。
この圧縮ファイルを解凍するとbin,includeなど4つのフォルダが出てきます。
これらのフォルダをアクセスしやすい場所にドラッグアンドドロップで解凍・コピーしてやれば、それでインストールは終了です。
この文書中では、binをはじめとするフォルダ群が以下のパスに置かれたものとして説明を行っています。
- C:\XENESIS\TMA
ASW.exeによるプログラムのアセンブル
図\ref{fig:asm-echo-tma}に示すecho.asmを例としてASW.exeによるアセンブルの方法を示します。
このecho.asmはアセンブリ言語のソースコードとしては、目を引く点はない一般的な記述になっているように思います。
このコードの内容的な特徴としては、実際にプログラムを格納している領域の開始位置がORG $0300で指定されていますが、その前に、ORG $02F0でプログラムの開始アドレスの保存場所が指定されていることです。
この$02F0は、Universal Monitor のGコマンドでプログラムを実行する際のデフォルトの開始アドレスが記録されています。この記述により、生成されたコードを6502-CORE にロードした際に、明示的に開始アドレスを指定しなくても、Gコマンドでプログラムの実行を開始できるようになります。
; MONITOR I/O Routines
CSTART EQU $FF80
CONOUTLF EQU $FF8F
CONIN EQU $FF98
; Constants
CTRLC EQU $03
; START ADDRESS SETTING for Universal Monitor
ORG $02F0 ; Universal Monitor REG:PC
; DW START ; for X6502
FDB START ; for ASW: The Macro Assembler AS
; エコープログラム
ORG $0300 ; プログラムの開始位置
START JSR CONIN
CMP #CTRLC
BEQ CEXIT
JSR CONOUTLF
JMP START
CEXIT JMP CSTART
TMA用 echox.asm
ASW2.exeでプログラムを手軽にアセンブルするためのバッチファイルTMA.batを「TMAの tma.bat」に示します。
このバッチファイルでは、65C02で新設された命令も処理ができます。したがって、最後から2行目のJMP STARTはBRA STARTと書くこともできます。
このバッチファイルでは、アセンブルした結果のSレコードファイルと、リストファイルが得られます。
PATH=C:\XENESIS\TMA\bin
ASW -L -cpu 65C02 %1.asm -olist %1.lst -o %1.p
p2hex -F Moto %1.p %1.SREC
TMAの tma.bat
生成されたSレコードファイルの内容を「TMAの echo.SREC」に示します。
ソースコードでも説明したように、このファイルにはUniversal Monitor用の実行開始アドレスの指定が埋め込まれているので、6502-CORE にロードしたら、単にGコマンドを入力するだけで実行できます。
S0030000FC
S5030001FB
S10502F0000305
S5030001FB
S11303002098FFC903F006208FFF4C00034C80FFA8
S9030000FC
TMAの echo.SREC
特徴的な動き
- エラーがある時点では、絶対アドレスや相対アドレスの計算が行われない。
- 絶対アドレスの値が、そのラベルが書かれている場所のアドレスで示される。
- 相対アドレスの変位が$FEとか$FFになっている。
ニモニックやオペランドのエラーがすべて解決すると、これまで示されていなかったシンボル未定義などのアドレス関係のエラーが報告されて、ちょっと戸惑う。