CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

アセンブル実行

ハンドアセンブルでやってみたLEDチカチカのソースコードをそのままアセンブルしてみます。

最低限必要なアセンブラへのディレクティブ:.MODULE.ENDMODで囲み、どこのメモリ空間に配置するか・・セクション指示としてBOOTメモリのpage0とします。

あとSYSファイルで宣言したI/O定義を.PORT LED_OUTで参照できます。ここでちょっと嵌まったのがLED_OUTというラベルはアドレスのマクロ定義ではなく、変数そのものを示すようでソースコードの最初の行:I4LED_OUTのアドレスを即値で代入するときI4=LED_OUT; はエラーになってしまいます

変数のアドレスを示す「」(キャレット)演算子を前に付ければいいようで、これはx86系のアセンブラでのOFFSET演算子のようなものかもしれません。

あとはラベルLOOP予約語のようなのでCLOOPに変更。

TEST1.DSP

f:id:O3I:20210623095705j:plain

 

これをアセンブラに食わせます

f:id:O3I:20210623095650j:plain

 

アセンブラは何事もないと何のメッセージを出さずに終わってしまうので事前に-helpでusageを表示させてます

f:id:O3I:20210623101022j:plain

 

アセンブル後のLSTファイルです。なんか見覚えのあるコードが生成されています。I/OアドレスとCLOOPの飛び先は、この後リンカが解決してくれます。

 

TEST1.LST

f:id:O3I:20210623095736j:plain