MSX2モニタアセンブラプロジェクト

■ハンドアセンブラからツール活用へ

BASIC命令を使ってメモリにプログラムを書き、マシン語を実行させることができます。
これはアセンブルツールを準備してハンドアセンブラの作業の軽減をはかるものです。
アセンブラと違いシステムを作るものですが、原理がわかればマシン語もわかると思います。

■Assemble Tools 2012年3月頃正式公開予定

mac-r2b3.jpg

<画像は開発中の最新バージョン0.3です>

画像ではメモリのコードとアセンブルコメントが表示されます。
この画面ではアセンブルしたコードの確認などに使います。
最後に書き込んだメモリ領域が表示されます。
また、プログラムモードを拡張させることで、
通常のエラーを特殊コマンドとして認識させて実行させる方式を採用しています。
 現在は動作チェックと不具合修正を行っています。



 開発環境が整っていなくても、プログラムを揃えることで実行できます。
ニーモニックをリストしたものを選び、行番号に加えていくインライン方式と
テキストファイルからロードするテキスト方式の2つが選べる。

実行するとプログラムに戻りプログラムは終了するが、エラーを発生させることで
再び復帰して、F6〜F10のコマンドを実行させる仕組み。
#OPコード は行番号を指定してオペコードを選択する画面に。
#はりつけ は指定した行番号と選択したオペコードが自動でプログラムのDATA文に。
#SETJR はJR C,eなどのコードの場合はジャンプアドレスを入力するとパラメータが表示。
#ラベル はラベルを検索しながらアドレスも表示。
#RUN はマシン語プログラムのメモリ配置。

コードを加えたり、削除できるなど今までのMSXBASICのプログラムモードを使い
ラベルはコメントで入力することで文字制限を255文字まで拡張でき、さらに検索機能で
特定のラベルのみの表示も可能。
 さらにはニーモニック表示が不要ならばコメントを削除することも可能。
 また、従来のアセンブラにはない、アドレスカウンタを使って
JR命令のパラメータとしての相対アドレスを指定することが可能。
 さらにマクロ(擬似)命令もあるので、今までのマクロスタイルに大きな変化はない。
MSX2以降のパソコンで動作可能。テスト版はMSX-BWに付属しています。




■SCREEN7のダンプモード

FULLMSX:MON

左はアドレス、CDはCALL、C9はRET、00はデータなしと色分けしてみました。
いまのところはメモリからの16進ダンプのみですが、VRAMにページ1にプログラム、
ページ0にダンプ表示ができれば@8000という表記でVRAMのダンプにしたいです。
SCREEN7の特性を生かして256バイトのデータを表示させます。

MSXのBLOADはメモリのデータ、VRAMのデータともに
BSAVEのデータをVRAMで表示したり、メモリに書き込んだり
できることがわかりBSAVEの相性は今のところ問題ないようです。

■SCREEN8のアセンブラモード (通称:311アセンブラ)

マシン語モニタの製作の具体案が固まりそうです。
今回はアセンブラを入力したものをVRAMでデータ化して
からメモリに再配置するまでの限定した用途にします。
これはBSAVE,BLOADのVRAMのアドレスに保存すると
RAMの同じアドレスから実行できる特性を利用したものです。
メモリ内のディスアセンブル機能は今のところ考えていません。
アセンブラモードはSCREEN8、4行25桁のメッセージの横に
ゆるキャラを入れて命令のヘルプを入れてみたいです。
当時は小学生からマシン語が組めたので、そういう感じに描きました。

FULLMSX:ASM-KUN

SCREEN8ではキャラクタを鮮やかに描ける利点もありますが、
00〜FFを色として書くことで保存できるのは他のモードよりも
アセンブラ制作には好都合な事です。
ゆるキャラがあると少しやわらかいイメージが出ますね。
こんな感じにアシストしてくれれば、かなり便利そうな感じがします!

■擬似命令は未対応

擬似命令は未対応ですから、このように変えてください。

普通のアセンブラでは
ORG    0D000h
というふうになっている場合がありますが、
このテスト版アセンブラでは9000hからの実行になります。
擬似命令でははORG  9000hと同等です。
なお、ENDが使えません。
CHPUT    EQU  00A2h
の場合は
CALL CHPUT
と記述することでラベルが機能しますが、
このテスト版のアセンブラではラベルは使えませんので、
CALL 00A2h
と変えてください。

■入力から実行まで

[ESC]キーでコードかニーモニックの一部を検索します。
ニーモニックの確定は[Enter]です。
入力が終えると、[ESC]を2回押して、BSAVEを入力します。
これでマシン語プログラム TEST.BINができます。
実行は
BLOAD"TEST.BIN",R
です。

■メッセージは手抜き?!

メッセージは全ての命令に書いているわけではありません。
現在、メモリロード版でMSXBASICのDIM命令で配列変数で
メッセージをメモリーに入れてやっていますが、
「文法は間違っていないのに何で待ち時間があるの?」
ということがあります。
これはバイト数が増えると使わなくなったデータを消して
これから使うデータのバッファの確保を行うために
待ち時間が5秒ほどかかります。15000バイトくらいの表示です。
この時間が入るとディスクよりもメモリの方が時間がかかります。

そんなところで、ファイルロード版にするかメモリロード版にするか
まだ正式にメッセージを表示する方法が決まっていません。

■制限事項

プログラミングはできますが、アセンブラソースの保存はできません。
というのはコードはオペコードとデータがありますから、
オペコードのあるアドレスを知らないと別のコードになりソースが崩れてしまいます。
まずは、リンク情報を保存しておく必要があるわけです。