2014年10月18日

グラフィックの座標バグ

ども、ぺるもです。

IGエディタを作ってて気付いた事。
このエディタ、320x200ドットモードで作っているんですが、
座標指定が命令によって違います
バグといっていいのかな…いやバグだろ、これは。

画面をご覧ください。

141017_01.jpg

こちらが640x320ドットモード(SCREEN 1)、

141017_02.jpg

こちらが320x200ドットモード(SCREEN 0)です。
S1の文字の大きさと位置が違う事が一見して分かるかと思います。
対して四角は同じ大きさです。
調べた限りではLINE文とPSET文が右端639固定です。
そして、SYMBOL文、POINT関数はモードにより右端の座標が変化(319/639)します。

ここで不思議な現象が起こってきます。
640x200モードでは
PSET(200,100),4

Ready
?POINT(200,100)
4

Ready

まぁ、これは当然でしょう。
しかし、320x200モードでは
PSET(200,100),4

Ready
?POINT(200,100)
0

Ready


と、同じ座標に点を打って調べているにもかかわらず、打った点の色が帰ってきません。
なぜこのような事が起こっているのか…原因はLEVEL3 BASICにあるようです。

LEVEL3 BASICでは160x100ドットのノーマルグラフィックモードと640x200ドットのハイレゾグラフィックモードが使えます。

ノーマルグラフィックモード(SCRREN 0)だとこんな感じ、

141018_01.jpg

ハイレゾグラフィックモード(SCREEN 1)だとこんな感じです。

141018_02.jpg

ドットの荒さに違いはありますが、線の角度が一緒である事は確認できるかと思います。
LEVEL3 BASICでも右端の座標は639で固定です。

そして、LEVEL 3はグラフィック命令がLINE、PSET、PRESETしかありません。
SYMBOL命令、POINT関数はS1 BASICのみサポートされています。
つまり
L3から引き継いでいる命令…右端639で固定
S1からサポートされた命令…右端はモードによって変化
という事になります。
互換性を重視したとも取れますが、こんな中途半端な対応するくらいなら、統一すべき話だったと思います。
前回の4,800BPS非サポートの件といい、S1もリリース時期が迫って十分な仕様を固定できずに出してしまった感がありますね。
640ドットモードで使う分には問題がないですし、チェックに漏れがあったのかもしれません。

にほんブログ村 PC家電ブログ パソコン・周辺機器へ
にほんブログ村
posted by ぺるも at 12:24| Comment(4) | S1-Chips
この記事へのコメント
VIEW命令使ってみては?
Posted by at 2014年11月02日 22:17
コメントありがとうございます!
VIEW命令は画面の一部分だけを描画できるようにする命令なので、座標そのものは変化しないと思います。
LINEやPSETに座標の補正かけるしかなさそうですが…。
てか、よくVIEW命令をご存知ですね(^o^)
個人的に使い所が分からなくて使った事がありません…ベーマガによくあったピープホールゲームくらいでしょうか?(^^;;
Posted by ぺるも at 2014年11月04日 16:48
VIEW命令は画面の一部分だけを描画できるようにするのではなく
スクリーン座標をコントロールする命令です。
S1はスクリーン座標を使って描画するのでディスプレイ座標とはずれることがあります。
ディスプレイ座標の(0,0)とスクリーン座標の(0,0)が一致するとは限らないので
VIEW命令を使うということです。
Posted by at 2014年11月07日 23:03
すみません、コメント入ってるのを見落としておりました。(_o_)
前のコメントにも書いたように自分自身VIEW命令をよく把握していないのでちょっと検証してみようと思います。
実際どのような変化があるかはブログ記事でお知らせいたします。
助言いただきありがとうございます(_o_)
Posted by ぺるも at 2014年11月14日 20:00
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: