[FM]FULLMSX for BLOG

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

MSXBASICで操作 入力デバイスの操作方法 キーボード、ジョイパッド、マウス

2022-04-16 10:55:06 | BlueMSX

今回はキーボードとジョイパッド、マウスの入力デバイスを考えてみます。

・キーボードの操作

MSXキーボードは109キーボードと比較してキーの数が少ないです。
キーボードにはGRPHキーがあり押しながら罫線や記号をプログラミング(テキスト)モードで書きます。
SPACEキーは横に2倍程度広いスペースがあります。

Windows、Alt、無変換、変換、アプリケーションキー、右ctrlはありません。
さらに109キーの上にend,PgUp,PgDn,Prt Sc,ScrollLockがありません。

Stop,Cls/Homeキーがあり、Pauseキー、テンキーはMSX2以降のパソコンにあります。
ファンクションキーはF5までの5キーでShiftを押すことでF10までできます。
比べてみればキーの種類が少ないので使いやすいと思いますね。

・ジョイパッド

MSXのジョイパッドはカーソルとABボタンです。2ポートあるので2人で操作もできます。
またATARI規格であればFM-TOWNS,メガドライブのパッドも代用できるようです。
過去にはゲーム(ATARI)ポートのハブのような同人で忍者タップというモノで4人接続など可能にしたり、
このポートからMIDIにつなげたりいろいろとできました。

MSXBASICで操作することもできるので便利です。
またMSXマウスで左クリックを押しながら差し込むとマウスがジョイパッドにもなります。
例えばグラディウスなどもマウスで操作可能になります。

・マウス

MSXマウスはゲームポートに差し込んで使用します。
MSXVIEWのほかビッツーのサウルスシリーズやA1コックピットなどGUIライクなアプリでマウス操作します。
お絵描きや音楽に使う程度でほとんど使いません。

という感じです。どちらかと言えばファミコン風なモノを作るのに最適ですね。
使い方によっては上下左右斜めと方向が決まっているので45度単位の移動はしやすいかなと思います。
BASIC画面で斜めに移動できます。
でも誰でもできそうなWindowsアプリのような操作にできないか考えてみました。

最初にスプライトの座標をsx,syにしてスティック判定をしています。
SX,SYはポインターの座標でssは移動値、PDはポート番号です。
CKは左クリックでCK=1,右クリックでCK=2.待ちでクリックでCK=3です。
あとは、、DUとかDEとかDRAWマクロのためのカウントをしています。
これは必要ありませんが再構築時のために;残しています。

CK=3はクリックボタンを押さないでポイントして操作待ちになると起動するものです。
よくアイコン上で待っていると「印刷します」とか「エクスプローラ」というあの機能です。
MSXパソコンでもできるようにしようと1998年くらいに考えました。

330行でキーマトリックスからctrlキーを押していればSS=3になり3倍速になります。
490行は長押し判定のプログラムが一部ありますね。

Windowsパソコンがなかったので見まねで作っていましたが、
今はプログラミングできるので不要な部分を消してかなりスマートになりました。
マウス操作は可能ですがGUIではジョイカード操作を前提にしていますね。
ということでMSXパソコンは知っている人にとってはおもしろいですね。
そういうこともあったのかと思い出してしまいました。では。

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

MSXBASICで図形を描く ATNを使って角度計測してみる

2022-04-11 22:08:38 | 1chipMSX

こんにちは。今回は前回の続きをやっていきます。
前回ではMSX2以降のマシンでMSXBASICのCIRCLE命令の弧の指定方法でラジアンを試してみました。

今回は座標系でラジアンを求める計算をやってやっとCIRCLE命令と一致しました。
また度数法も90度までしかまだ対応していませんが、座標の±判別で加算処理をすれば359度まで求めることができそうです。

このようにマウスをクリックする(指定点はSX,SY)と扇形ができます。
指定点から原点の2点間の距離を出して半径を求めました。

ATNアークタンジェントはMSXBASICで何に使うのかよくわかりませんでしたが、
X1,Y1座標を割ること(ATN(Y1/X1))で左下の1.2545~というラジアンの数値を出すことができます。

MSXBASICは遅いですが倍精度実数で計算してくれますが大きな数を扱う仕事にはあまり向かないです。
DEFINTA-Zは0000H~FFFFHの65535を割って±32767に0を含んだ小数点を含まない整数で
BASIC内部のmathpackというオブジェクトを使って浮動小数点演算に対応しています。
例えば42を42E+3とか42E-2とか試してみてください。
これが16ビット以上になるとCPUがやってくれるので高速になっています。



90度以上はラジアン値の補正をするテストプログラムです。
10番の10.RADを指定すると原点からの距離と角度を求めます。
1221行はSXがZXよりも小さいマイナスになる場合です。この場合は円周率を加えます。
1222行はSYがZYよりも大きい場合です。この場合は2倍の円周率を加えます。
メッシュと原点のラインはありませんが結果が出ます。


343度を指定することができました。
図形の重心を原点にしたりよくあります。
343度というような角度指定は製図ではあまり使いませんが90度までは使います。
今回はcircleの角度指定にならってみました。思った角度になったでしょうか?

繰り返しになりますがホームページ移行のため、
みなさんに何かMSXパソコンで特典ができないか考えています。
具体的に決まりましたらホームページでお知らせします。では。



 

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

MSXBASICで図形を描く 他のBASICとの違い

2022-04-08 17:32:32 | 1chipMSX

お久しぶりです。プログラミングの近道は新たに覚えて慣れることです。
既に他の言語ができる方も多いと思いますが移植とかそんな難しいことは考えないで
これはカンタンにできる、これはできないと割り切ってその言語やモードが最適かを見極めることです。
言語などが多様化していますのでこういうのがいいと思います。
今回は1980年代に戻ってMSXBASICで図形を描くことをしています。
MSX2のSCREEN5を使いました。

 MSXパソコンはキーボード操作がメインになりビッツーなどグラフィックソフト(GUI)を使ったかたならマウスを使っていました。
この両方のデバイスに対応するために数年前からプログラムを調整していました。

 今回は255x211の解像度で10cmであれば100pxというふうに1mm間隔で描けるようにします。
グリッドは10mm間隔です。
最大で横が255mm、縦が211mmでだいたいA4サイズ横方向で(297x210)に収まる感じです。
寸法を設定すると図形が表示できるようなプログラムにしていこうと思います。
MSXパソコンで残念?なことは低解像度ですがスケールで計算すると何かできそうな感じがしてきました。
低解像度は粗いので逆に座標をクリックしやすいことがよいです。

N88-BASICを使ったことがありますが図形と文字入力を簡単に表示させることができます。
MSXBASICは文字出力という定義をして文字を表示させることはできますが入力はできません。
まだ仮の設定なのでSCREEN0でやっていきます。
この設定の場合プログラムを書き加えたり書き直しをしてもグラフィックを描画しなければ画像が残ります。

文字入力はSCREEN0でグラフィックは文字データと重ならないようにSETPAGEで使用しないエリアにしました。
今のところ四角形、円など基本図形を指定された寸法で表示できるようにしていきます。

例えばスマホの寸法を入力するとこんな感じです。



ブラウン管とは違って液晶モニタなので見え方に若干違いがあるのか、
ぜんぜん縦横比が悪い感じではないです。

または倍精度実数で座標データの入力は可能ですが、
将来的に整数型に変えると32767までの数値に限定されますが処理が高速になります。
小数点が使えないのでデータ閲覧や入力時に変換するようにしました。
例えばデータ値の1が0.01になり、50では0.5です。
このプログラムの有効範囲は0~255.00で変換の場合は小数点2位まで入力する必要があります。
こんなふうにグラフィックモードでプログラムを変えることはN88-BASICではできます。

これはわかりやすいように合成したのですが、CIRCLEは100,100が中心点、R=50、15は白色、Sが開始点、Eが終点の反時計回りに指定します。
単位はラジアンでラジアンとかわからなくても実行結果に慣れれば平気です。
半円が3.14です。円が0か3.14*2になります。度数法の場合は360を割った数になりますがラジアンは3等分とか5等分とか自由です。
高校の数学なのでちょっと難しいかな。またMSXBASICでは工夫する必要があります。
実行画面は円弧の表示のみで90行で入力待ちにして画面が変わるのを止めています。

これを応用して1ドット1ドット移動して文字などの「図形の移動とかできそうな気がしますが」どうなんでしょうか?


ガタガタになりますがこんなふうにできます。(スゴイ)
X軸だけならこうなりますがY軸の場合は角度が変わってくるので半径と角度を算出する必要がありそうでます。

8ドットのMならば8*8px=64の座標の回転角を出す感じです。
このようにディスク面に付箋紙をはってぐるっと回したようになります。
一見簡単そうに見えますがCADで出力すると矩形範囲がテクニカルな部分ということがわかります。

もう少し試してみたいと思います。

最後にグラフィックプログラムで私の最高作品と言えば

1994年に箱根寄木細工の七宝矢羽根のシミュレーションを作りました。
当時は神奈川県に住んでいて厚木から小田原まで通っていました。
まだWindows95が発売される前でパソコン通信が流行していた時代です。

電話代の計算とか雷が光って雷鳴する時間差で推定距離を出したり仕事のほうでは
高校の数学を駆使して木工作業でどんな感じになるのかをシミュレーションしてみました。
七宝の弧の出し方は円をカットしてそれを裏ページでコピーしているのですが、
たしか弧の開始点と終了点の計算をにニ点間の距離で計算していると思います。

このプログラムはMSX2+の漢字BASICとSCREEN8を使っています。
また1chipMSX改ならここまで使うことができます。
漢字BASICではシフトJISコードを使って漢字表示しています。
通常のBASICで漢字の部分は記号や半角ひらがななどのMSX文字に化けています。

僅かな数値の違いで雰囲気が大きく変わることがわかりました。
でもまだ満足していない弧のプログラムを改良したかった(カッターフカスギル)のが心残りですね。
90度の弧ではなく45度くらいの弧とかにできたら良かったです。
その後、サヤ形とか麻の葉とか作ったのですがやっぱりこれがいいです。
さくらじゃなくて七宝の円弧の柔らかい感じがあるとなんとなくいいです。
矢羽根だけも試したのですがやっぱりカクカクカタイ感じですね。
面白そうなものがあればまた載せてみたいと思います。では。

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