こちらのS1用ジョイスティックカード組立ての続きです
なんとなく動作しているS1のジョイスティックカードですが、STRIG関数でトリガのレベル信号が検出できていないことがわかりました
こんな感じでぐるぐる回しながらBASICで信号を取り込んでみましたがSTRIG(1)やSTRIG(2)は反応しません。
トリガスイッチをレベル信号でPA4とPA5に取り込んでいると思いますが反応なしです・・^^;;
(S1BASICの取説が見当たらないので、STRIG関数の使い方が間違っている可能性もありそうです)
PA4,5に入っている電圧レベルはオシロスコープで見ても変化しているように見えますが反応なし^^;;
写真から回路をトレースした感じではPA4,5に入るレベル信号はセレクタで反転されたあと、
そのまま出力されているように見えましたが上下左右は非反転なので、それらに合わせて非反転にしてPA4,5に入力してみたものの変化なし・・・
S1側のPIAコネクタを解放した状態では、PA4,5のみプルアップされていないのでココは何か別扱いなのかもしれませんが良く分かりません^^;;;
PIAポートの状態を調べたものをメモっておきます
ジョイスティック関連の命令も整理しておきながら、何か勘違いしていないか引き続き調べます^^
STRIG命令
STRIG(No) ON/OFF/STOPでポートを設定
ジョイスティックからの割込みを許可、禁止、停止する
Noはジョイスティック番号を指定し1=A, 2=Bポートに対応する
STRIG(No) ONで指定のジョイスティックからの割込を許可し、以後ジョイスティックを操作するごとに割込が
発生しON STRIG(No) GOSUBの割込ルーチンに分岐する
STRIG(No) OFFで指定のジョイスティックからの割込を禁止し、以後は割込ルーチンに分岐しない
STRIG(No) STOPで割込を停止し、以後は操作されたことを覚えているだけで割込ルーチンに分岐しない。
→STRIG(No) ONすると記憶されている情報で割込ルーチンに分岐する
STRIG関数
TRG=STRIG(機能)
ジョイスティックのトリガボタンに関する情報を得る
STRIG(1) レベル信号でジョイスティックAのトリガボタンが押されていれば-1、そうでない場合0
STRIG(2) レベル信号でジョイスティックBのトリガボタンが押されていれば-1、そうでない場合0
STRIG(3) STRING(1) ONまたはSTRIG(3)が実行されてから1回以上トリガボタンが押されると-1、そうでない場合は0
STRIG(4) STRING(2) ONまたはSTRIG(4)が実行されてから1回以上トリガボタンが押されると-1、そうでない場合は0
STICK関数
POS = STICK(No)
Noはジョイスティック番号を指定し1=A, 2=Bポートに対応する
Noにジョイスティックポートを指定すると選択のジョイスティックの方向が10進数値(0~8)で戻る
取説にはトリガを押したときに方向の数字が返るとあるがトリガの状態にかかわらず方向は返るっぽい
戻り値
0 中立
1 上
2 右上
3 右
4 右下
5 下
6 左下
7 左
8 左上
STRIG命令やSTICK命令をぐるぐる回すとPIAポートの信号がオン/オフしているようです、一方的に入力に
なっている訳ではなく入力や出力に切り替わりながら信号を取り込んでいるのかもしれません・・・
FM-TOWNS用のジョイパッドが物置にあるはずなので探しているのですが見つかりません^^;;
これが見つかればトリガスイッチの感度が悪いのが回路の問題なのかジョイパッドの問題なのか切り分けできそうなのに・・・
そんなS1用ジョイスティック基板組み立ての記録^^;;;
View Comments
興味深い内容で、非常に参考になりました。
ぺるもさんのブログに載っている中部本多通商のジョイスティックカードのマニュアルによれば、トリガ1がPA5、トリガ2がPA4となっており、また上下左右と同様非反転となっています。純正品とサードパーティー品とでトリガの挙動が逆になるとは思えないため、マニュアルが間違っているのでしょうか?
STRIG関数は(1)(2)がPA5を、(3)がCA1、(4)がCA2を読んでいる感じですね。純正品のジョイスティックカードも割込み、PA5の双方に対応しているのは確定とみてよいように思えます。ピン7=トリガ2=PA4に対応しているかは不明ですが。
その3(http://asakita.net/kabekin/2022/08/23507.html)に記載のテストプログラムは日立から提供されたものでしょうか?
情報ありがとうございます^^
中部本多通商の取説を確認しました。確かにトリガ1はPA5になっていますね。
これは今回私が調べた回路が間違えているだけっぽいです^^;;;
ブログの記事修正しました。ありがとうございます
以前ぺるもさんに取説も頂いていましたが、現在行方不明で探していました。ブログにアップされていたんですね
Aモードのサンプルプログラムを見るとトリガのレベル入力も非反転ですね。
試しに非反転の回路にして実験してみましたがSTRIG(1)や(2)が反応しなかったのはPA4,5が反対だったのが原因っぽいです^^;;
(しかしPA4も5のどちらも反応しなかったのは不思議・・・)
こちらのジョイスティックテストプログラムは日立のサービスセンターで使用されていた日立純正のS1用テストプログラムです。
S1BASICのSTRIGとSTICK命令でできておりPIAの信号を直接見ているプログラムではないので結局はブラックボックスでした。
私の持っているS1のソフトとしては一番のレアソフトです
> STRIG命令やSTICK命令をぐるぐる回すとPIAポートの信号がオン/オフしているようです
なんとなくですが、ジョイスティック関係のルーチンを実行するたびにPIAのAポートのイニシャライズ(入出力の設定等)を行っていて、そのタイミングでプルアップが切れるタイミングがあるのかな、と思いました。
STRIG(n) ON/OFF/STOP命令でジョイスティックポートを選択するようなので、
ここでPIAの設定があるのかと思いループからは外してみましたがオシロで見る感じでは変化なしでした。
STRIGやSTICK命令の使い方が間違えている可能性もありそうなので資料を確認しようと思いますが、S1関連の資料がほとんど行方不明なのでこのお盆休みに探してみます^^
エミュ開発時にS1-BASICを解析したメモによると、ボタン1(PA5)も方向キー(PA0~PA3)と同じ負論理で0のとき押していると判断しているようです。また、CA1,CA2の立ち下りでIRQ割り込みを発生させる設定になっているようです。
情報ありがとうございます。
昨日、ぺるもさんのブログから中部本多通商の拡張PSGカードのジョイススティック部分のAモード用のサンプルプログラムを見て、トリガーも同じ論理だと感じました。
やはり非反転でよさそうですね。
簡単な回路なのに写真からのトレースに難儀しました・・・
ぺるもさんからは貸出OKとのご連絡を頂いていたので実基板をお借りしてトレースしたほうがよかったです^^;;;