2024年6月14日金曜日

キーボードとジョイスティック

以前、パソピアのキーの信号に関する書き込みで紹介したキーマトリックス

どのキーが押されたか判断する場合、
スキャンする行(nKS 0~B)から、スキャンデータ(KSL)とキーブロック(KB)を決めて
KSL 0KSL 1KSL 2KSL 3
KB_AnKS 0nKS 1nKS 2nKS 3
KB_BnKS 4nKS 5nKS 6nKS 7
KB_CnKS 8nKS 9nKS AnKS B

KBインターフェイススキャンデータ(Port 30h)で出力

続いてKBインターフェイスリターンデータ(Port 31h)を読み込む
キーが押された場合、その列のbitが0になる。押されていない場合は1。
全て押されてない場合は、FFhが返ってくる


ジョイスティックの押されたキーを取得する場合は、ジョイスティックアダプタ入力ポート ( ポートA 19h, ポートB 1Ah)の値を読み込む
ボタンが押された場合、その列のbitが0になる。押されていない場合は1
全て押されてない場合は、FFhが返ってくる

スピタル産業のジョイスティックには、SELECTとRUNボタンが付いており、
・SELECTボタン:↑+↓
・RUNボタン:←+→
が割り当てられている

-----
UOOTOYのキー操作について
基本はMZ-2000と同じキーを使うが、いくつかキーを追加しジョイスティックをサポート。
BASICに戻るキーも追加。

パスワード入力画面
MZ-2000Pasopia7 KeyboardPasopia7 Joystick動作
A~ZA~Zパスワード入力
SPACESPACE, INS/DEL一文字戻る
CRRETURNSELECT, Aボタン, Bボタンパスワード確定
カナカナ, HOME/CLS, PF8ROOM選択画面に進む

ROOM選択画面
MZ-2000Pasopia7 KeyboardPasopia7 Joystick動作
←, 4(テンキー)←(十字キー)ROOM数デクリメント
→, 6(テンキー)→(十字キー)ROOM数インクリメント
CRRETURNSELECT, Aボタン, Bボタンゲームスタート
F2~7同時押しPF2~7同時押し隠しメッセージ
(STOP)RUNボタンBASICに戻る

ゲーム中画面
MZ-2000Pasopia7 KeyboardPasopia7 Joystick動作
4(テンキー)←, 4(テンキー)←(十字キー)左に移動
6(テンキー)→, 6(テンキー)→(十字キー)右に移動
5, 8(テンキー)↓/↑キー, 5, 8(テンキー)↑(十字キー)ジャンプ
1(!)1(!), ZBボタンブロックを積む
2(")2("), XAボタンブロックを消す
Break(STOP)RUNボタン一時停止/解除
NNSELECTボタン次の面に進む
(クリア済みの面まで)

MZ版は、PiO 1986年6月号 42ページにあるパッチを当てると、ブロックを積む(カナ→1キー)、消す(1→2キー)に変更される。MZ-2500もそうだがパソピア7もカナキーが右側にあるので、1キーと2キーの方が操作しやすい。ただ上の列は間違って別のキーを押しそうなので、ZキーとXキーも割り当てておく。

パスワード入力のA~Zのキー入力はBIOSからの取得も考えたが、カナモードの制御ができず、アルファベットを入力しているつもりがカナが返ってくる可能性もあったので、I/Oポートで直接キーを読み込むロジックを作った。

あと、ゲーム中にキー入力のポチポチ音が気になったので、キーの割り込み処理を無効化
; キーボードリターン用の割り込みベクタを何もしないアドレスに変更
LD HL, (0FEF8h)
LD (0FEFAh), HL
元のアドレスは事前に保存しておき、BASICに戻る際に戻す。

0 件のコメント:

コメントを投稿