[FM]FULLMSX for BLOG

詳しいMSXパソコンなどの情報はホームページで!
https://fullmsx.web.fc2.com/

MSXマシン語適当講座 フラグあれこれ 割り算のモジュール ベースでエラー音

2011-11-27 12:55:27 | MSXマシン語適当講座

ゲームなどでフラグ判定をしたい場合にBIT,SET,RES命令を含んだ
マシン語プログラムを組むとプログラムをわからないようにできます。
例えばGOTO480と実行するとエンディングになったりするプログラムがあったりします。
ビットのフラグは複雑な条件などにも使えそうな感じがします。

さて、前回の終わりの続きです。
実はハンドだったのでD000Hに仮配置して実行してみました。

SUPER-Xのアセンブラのモニタです。
 左からアドレス、コード、文字コード、アセンブラという順番になっています。
もう1回おさらいしますが、BASICの変数はまったく使えません。
メモリに書き込むか、直接レジスタにマシン語で数をセットします。

Z(ゼット)フラグはCP nの数とイコールの時にZフラグが1になります。
NC(ノンゼロ)は逆の一致しない場合になります。
Aレジスタの数が1、CPのnの数が2の場合、1-1=0というわけです。
C(キャリー)フラグは繰り上がり、繰り下がりになった時のフラグです。
Aレジスタの数が1、CPのnの数が2の場合、1-2=-1となり、繰り下がりになります。
NC(ノンキャリー)は逆ですね。Zを含んだ場合になります。

ソースは(D000-D015H)で16+5=21バイトほどでした。
 前回の復習ですが、計算する前に計算をしない数を分岐してから、
計算させるようにしています。割り算は引き算を何回やったかをカウントして
Bレジスタに入れています。

LD A,64Hならば割り切れますので、レジスタペアAFのAレジスタはゼロになります。
カウントした数がレジスタペアのBCのBレジスタに32Hと入りましたね。
このモジュールができましたので、VRAMに書き込む準備が整ったことになります。

このように部分的にプログラムをしていきましたが、
やはりアセンブラが必要な感じになりました。
そこで、D000Hのアドレスからマシン語を書いていきましたが、
別のアドレスで仕上げていき、逆アセンブラでD000Hに戻すことにします。
 BASICのアセンブラはMSXポケットバンクのマシン語入門のものを使って
書き込みをしていきます。

次回は懐かしいのアスキーのMSXマシン語モニタの登場です。
MSXBASICのインラインアセンブラです!

こんなことも★

何か今でも通じるシンセっぽい音が欲しいと思っていましたが、
これなら、ちょっとMSXイメージが変わりそうな感じです!
夜中に目が覚めて、いびきの音とテレビのベースの音が妙に一致して

ちょこっとMSXでメロディを作ってみました。
 いびきの音?は(O2D)でベースの音が(O3D)とどうなったかといいますと
PLAY#2,"@33T80L8O2DO3DC16DO2D"
 でしたが、音が低いので1オクターブ上げました。

10 CALLMUSIC
20 PLAY#2,"@33T80L8O3DO4DC16DO3D"

結局はテンポ80の8分音符でオクターブ3のD、オクターブ4のD、16分音符でC
8分音符でD、オクターブ3でDというメロディで何か問題が発生したエラーの音になりました。
 ちょっと一発芸っぽいネタですね。C16でズッコケさせてDに戻しています。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする