SORD m5のBASIC-Gは強力なスプライト移動命令があるが、『post』と呼ばれるスプライトの移動枠のようなものがあり、その数には上限(12個)が設けられている。
しかし、ワークメモリを書き換えすることでその数を増やすことができるとの事。
また、プログラム中に(見落としているのかもしれないが)BASIC-Gのマニュアルには記載されていない『postad』という関数が使用されており、その役割について調べてみた事のメモ。
(以下メモ)
postad関数について
この関数は、move命令で使用されるpostに割り当てられているメモリアドレスを与えるようだ。このpostad関数は変数で受けなくても、peek/poke命令で参照可能で、またオフセット指定も可能なようだ。
(ex)
A=peek(postad(0))
poke postad(1)+2,&FF
※調査実施
格納される値は一部不明なものもあるが、
【move in to命令の時】
postad():$0A0+スプライト番号(0~31)
postad()+1:速度
postad()+2:常に1?
postad()+3:移動先座標Y
postad()+4:移動先座標X
【move in step命令の時】
postad():$080+スプライト番号(0~31)
postad()+1:速度
postad()+2:常に1?
postad()+3:ベクトルY
postad()+4:ベクトルX
【move in on命令の時】
postad():$0C0+スプライト番号(0~31)
postad()+1:移動先座標Y
postad()+2:常に0?
postad()+3:移動先座標Y
postad()+4:常に0?
…このようになるようだ。
post数の変更について
少しあやふやだが、ワークメモリ$071BFの値を変更するとpost数が拡張されるようだ。
テスト的に値を書き換えしてみたが、postad関数で得られるアドレスが拡張された事は確認できたが、実際にmove命令で扱う事が可能になったかは未確認。
また、post数をスプライト定義数上限まで拡張しても良いかも不明。
(他のワークメモリを破壊してしまうかも?)
前述の『DARK FORCE』では、標準の倍まで拡張しているようだ。
※調査実施
ワークメモリ$071BFの値を変更し、move命令で標準(0~11)以上のpost番号を設定して実際にスプライトが移動することを確認した。
但し、post番号は0~30の範囲に留めておいた方が良いようだ。
$071BFへ10進数で31を書き込んだ際、move命令でpost番号31を使うことができ、実際にスプライトも移動したが、変数を格納するワークメモリを破壊した様子。
そもそもスプライトプレーン全てをmove命令でガンガン動かそうなんていうのは、いくらBASIC-Gが優秀とはいえ無謀だと思う…。
ここらへんの情報は雑誌などで公開されたものではなく、当時のm5ユーザーでも知る人ぞ知る『秘術』のような様子だが、他機種とは違って情報を全く見ないのは少し寂しい感じ。
まあ、俺は当時m5という存在を知らなかったんだけど…。
(おわり)
(2022.1.25追記)
BASIC-Gのマニュアルに載っていない事象をもうひとつ見つける。
m5はBASICプログラムでの画面モードの変更には制御文字を使用するが、 それを使用しなくてもconsole文に隠しパラメータ(なのか?)があり、第6パラメータに0~3の値を与えることでも画面モードの変更が可能となる。
これ、pioの欄外にチラッと書いてあったんだけど、当時のユーザーの方達はどうやって発見していたんだろ?
0 件のコメント:
コメントを投稿