MSXマシン語適当講座その1

前へもどる>mon.html



マシン語は誰でもプログラムできます!体験してみてください。

 やってみましょうZ80マシン語  初心者でマシン語を始めたい人向けです

 *MSXマシン語適当講座その1 マシン語からBASICの変数を取得、LD、CALL、INC

 MSXマシン語適当講座その2 SUPER-X、実行、アセンブラ、ソースを書く

 MSXマシン語適当講座その3 一時的にレジスタを使う、フラグ、レジスタ、転送

 MSXでマシン語BASIC 中級編  ハンドアセンブルから開発環境の話題です。

・マシン語から変数を取得?
・LD命令
・CALL命令
・INC命令
・さらにハンドアセンブルしたい方へ(New!!)
・Z80マシン語ニーモニック変換表(終了)
・オペコードを覚える(終了)

始めてマシン語をスタートしてもツールをどうやって使うのかわかりません。
その2からはプログラムもシンプルになってツールを使ってニーモニックで直接やります。
また、かなり古い情報なので、これから始める方向けに
ブログでもMSXマシン語適当講座がありますので、ご覧ください。



■命令の誤動作など

このページではMSXBASICリストを載せていますが、
間違いなく入力していないと誤動作します。
もし、命令を記述して思うように処理しない場合は
最初に初期処理などの事前の処理などをしていなかったりすることで
不具合が出る場合があります。
こういったものはソフトに多くありますので
一度プログラムなど間違いないかをチェックしてみてください。

■マシン語から変数を取得?

100 'i/o
110 CLEAR200,&HD000
120PRINTCHR$(12):GOSUB140:DEFUSER=&HD001:A= USR(0)
130 LOCATE0,0:PRINTHEX$(PEEK(&HD000));" ";:A$=INPUT$(1):PRINTA$;"   ":
140 'IN A,00H
150 POKE &HD001,&HDB
160 'I/O Port No.
170 POKE &HD002,&H98
180 'LD (D000H),A
190 POKE &HD003,&H32
200 POKE &HD004,0
210 POKE &HD005,&HD0
220 'RET
230 POKE &HD006,&HC9

マシン語はメモリとは別にレジスタに数字が入っています。
直接レジスタにアクセスすることはできませんが、
BASICではメモリの読み書きができます。これを利用してマシン語プログラムを作ります。
ダッシュのコメントがマシン語処理の内容で
POKEで記述されたプログラムがそのコードです。
次のプログラムは上のプログラムを修正しながら実行して変化を見てみることにします。
それでは120行と130行を修正します。
このプログラムはI/OのVRAMアクセスデータをAレジスタに数値を入れています。
そしてAレジスタに入った数値をD000Hで見ることができます。
1回のPOKEが1バイト、3回のPOKEが3バイトとわかります。
1バイト命令、3バイト命令などを使っています。
DBと98は1バイト、32は3バイト。これがわかればデータかプログラムかわかります。
これをマシン語解析用に書き換えましょう。

■LD命令

前項のリストから次の行を書き加えます。

130LOCATE0,0:PRINTPEEK(&HD000):DEFUSR=&HD001:A=USR(0):END
140 'LD A,10H
150 POKE &HD001,&H3E
160 '00-FF
170 POKE &HD002,10

LD A,10を表示するプログラムで実行すると10が表示されました。

■CALL命令

180行から230行までの書き換えは当分ないので
D100Hからサブルーチンにします。
190行にあります。
最後にRETのC9でCALLの次の命令から実行されます。

140 '
150 'LD A,0AH
160 POKE &HD001,&H3E
170 '00-FF
180 POKE &HD002,10
190 'CALL D100H
200 POKE &HD003,&HCD
210 'address:D100H
220 POKE &HD004,&H0
230 POKE &HD005,&HD1
240 'RET
250 POKE &HD006,&HC9
260 'LD (D000H),A
270 POKE &HD100,&H32
280 POKE &HD101,0
290 POKE &HD102,&HD0
300 'RET
310 POKE &HD103,&HC9

注意してもらいたいのは
マシン語ではアドレスが上位と下位が逆転します。
230行と220行がD100を00、D1となります。

■INC命令

次は数値を+1して11にします。
命令が加わるのでアドレスを打ち変えます。

140 'LD A,0AH
150 POKE &HD001,&H3E
160 '10
170 POKE &HD002,10
180 'INC A
190 POKE &HD003,&H3C
195 'RET
200 'CALL D100H
210 POKE &HD004,&HCD
220 'address:D100H
230 POKE &HD005,&H0
240 POKE &HD006,&HD1
250 'RET
260 POKE &HD007,&HC9
270 'LD (D000H),A
280 POKE &HD100,&H32
290 POKE &HD101,0
300 POKE &HD102,&HD0
310 'RET
320 POKE &HD103,&HC9

■さらにハンドアセンブルしたい方へNew!!

 公開から長い時間が経ちました。そして、今回は
マシン語コード、ニーモニックのリストを表示してカーソルで選択しながら
打ち込む環境をBASICで作ることができました。
BASICではDATA文でニーモニック、コードの順番で揃えればOKです。
マシン語で多少長いプログラムもできそうですね。

「アセンブラをどうやって使えばいいのか、忘れた、知らない。」などの
悩みは解決できるきっかけになればと、思います。

そのほか、ブログでも関連記事を揃えておりますが
関連データを調べて整理しています。2020/10月現在

<<マシン語の資料>>

アセンブルツールを創作したようですが進捗状況を調べています...

FULLMSX for BLOG:
http://blog.goo.ne.jp/u-yans/e/a5b25f43dfd3a4d7eee333769e54631b

■Z80コード変換インストラクション表

WEBで公開しているマシン語のホームページです。


命令動作表、ステート数表など
機械語の手帳onWWW、にゃんTAC氏のページ?
http://taku.izumisawa.jp/Msx/ktecho.htm

■体験を終えて

いかがでしょうか?
MSXのマシン語は誰でも使うことができるものです。
これでマシン語コード、ニーモニック記述がわかってきたと思います。
数列を見るとアレルギーを起こすイメージも少なくなります。
MSXBASICではプログラムが長くなりますので、アドレスに直書きすることにします。
マシン語モニタでは打ち込みと実行と状態表示の3つをコマンドで行います。
次からは打ち込んだプログラムをマシン語モニタSUPER-Xで見てみます。

>> MSXマシン語適当講座その2へ  >>