MSXマシン語勉強レポート 第11回は、
引数を使って、BASICからマシン語のプログラムに値を渡します。
使うのはUSR関数の引数です。
USR関数に引数をつけてマシン語をコール
⬇︎
HLレジスタに入っているアドレスの2バイト先に、引数として渡した数が入る
む?よくわからないなぁ?
引数がメモリのどこかに入るんですね。
それがどこか?
HLレジスタの値->(アドレスが入っているですね)
そのアドレス + 2バイト先(2バイト先と3バイト先に)
なぜHLが示すアドレスの値をそのまま使わないのかなぁ。怒!
メモリ
HLレジスタ(アドレス) ーーーー>| 0 | 1 | 2 | 3 |
| HLのアドレス | | 値が入る |
2バイト先には、その引数の値(整数)の 下位8ビット
その次のアドレスの、3バイト先には、その引数の値(整数)の 上位8ビットが
入るそうです。
マシン語の方でHLの値を+2してやって、そのアドレスに入っている値を、
どこかのレジスタにいれてやって使えばいいんですね!
サンプルでは、
INC HL
INC HL
LD C , (HL)
ってやっています。
ちなみにINCって、インクリメントの意味で、1増やすってことです。
マシン語の命令は、LDしかやっていませんでしたね。
近いうちに他の命令もやらないといけないなぁ。
この引数渡しも、一度理解すれば簡単ですね。
この引数渡しを何に使うかですが、
例えば画面をスクロールさせたい時に、
メモリ内のマップデータをVRAMに転送する時に必要です。
(マップデータが入っている、最初のアドレスをマシン語に送ってやる)
MSX FANにもこの引数渡しが書いてありました。
<駿河屋>
(この号にメモリからVRAMへのブロック転送が書かれていて、そこに出てくる)
でも今日やった本と少しちがうような?
USR関数の引数は、
メモリのアドレス &HF7F8
に入っているとあります。はて?
どちらが正しいのか?
実際にやってみないとわからないですねぇ;
こういうの困るな〜。
試行錯誤しながらやっていきます!
では〜。
<駿河屋>