別のメモリのアドレスに写すというものです。コレができると、マップの画面切り替えとか、そういったことができるようになります。マシン語ではこれが一番やりたいんですよね〜。BASICでは絶対に不可能なので。メモリからVRAMヘブロック転送するBIOSルーチンのLDIRVM(&H005C)コールするだけで、メモリからVRAMへブロック転送してくれます。どのデータをどこへコピーするかが分からないとできません。そこであらかじめレジスタにその値を入れておきます。FANの方がわかりやすいのでそちらを参考にします。1991年6月号に詳しく載っています。(F7F8H)これは、次の2バイトが指し示すアドレスにある数値をHLレジスタにセットします。&HF7F8そのものをセットするのではないところが味噌ですね。アドレス&HF7F8に入っている値です。これがややこしい!HLレジスタは、転送元のメモリの先頭アドレスをいれるのでした。&HF7F8はなにかといいますと、BASICのUSR関数の引数が入っているアドレスとなります。F7(プログラムに書く時は先頭のアドレスは書きません。2AF8F7と書いていきます)よくマシン語のプログラムに16進数が載っていますね。1800H次の2バイトの数値をDEレジスタにセット。DEレジスタは、転送先のメモリ(VRAM)の先頭アドレスいれるのでした。VRAMの、&H1800以降は画面のデータ(パターン名称テーブル)が入っているアドレスです。画面を描き変えるためにDEレジスタにセットします。0300H次の2バイトの数値をBCレジスタにセット。BCレジスタは、転送するメモリ内容の数(バイト)が入ります。&H0300は10進数でいうと、768です。768バイトはscreen1の1画面分のデータ量をさします。00CDがコールで、&H005Cのアドレスを呼ぶと、LDIRVMが呼ばれます。メインルーチンに戻る。C9BASICプログラムからマシン語を使う場合は、C9で、BASICプログラムに戻っていきます。雑誌に載っているサンプルプログラムもC9が出てきたら、そこまででがサブルーチンなんだなとわかります。BASICではDATA文にいれて使います。2AF8F7110018010003CD5C00C9という風にです。おお、今まで全くの意味不明だったマシン語が少しづつわかってきました!なお、ハンドアセンブルしておりますが、こちらの表を参考にしてください。画面を一瞬でパッと表示することに使えると思います。ゲームで画面の端にいったら、隣の画面がパッと出てくるというのがあると思いますが、それが出来ます。BASICでやっていると、上から下へ順番に画面が描かれていくのがわかってしまうんですよね。それが一瞬で出来るというのは非常にありがたいです!次回はVRAMからメモリへのブロック転送をやります。スクロールをさせるのには、今回と次回やるのの両方が必要となります。(追伸:よくよく考えると、別に今回のだけでもスクロールは出来るような気がします;)BASICとマシン語の併用では、スクロールのアクションゲームは無理なんじゃないかなぁと思っています。実際にはハイドライドの画面切り替え時にスクロールするようなものとか、ドラクエのようなアクション性のないRPGのスクロールに使うのではないでしょうか。名作20本をレビューしてみました^^www.nyaonyao21.comPCエンジンにも買い取り価格の高いゲームがたくさんあります。はてなブログPro個人ゲームアプリ開発者のnyaonyao21です。アプリ開発・ブログ等で生活しています。