ユーザ用ツール

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
フルーツフィールド_for_pc-6001mkii [2022/09/15 07:53] – [PC-6001mkIIのBIOS/ワークエリア] arakiフルーツフィールド_for_pc-6001mkii [2022/09/15 09:40] (現在) – [キー入力とジョイパッド] araki
行 716: 行 716:
 なので、フルーツフィールド内でも同様にしていますが、とりあえず問題は起きてないので良いことにしておきます。 なので、フルーツフィールド内でも同様にしていますが、とりあえず問題は起きてないので良いことにしておきます。
  
 +==== キー入力とジョイパッド ====
 +
 +PC-6001にはゲーム用のキー入力ルーチンがあり、Aレジスタにビットマップ値でキー入力を返してくれます。
 +フルーツフィールドでもこれを利用していますが、[[DevTerm]]についているジョイパッドに対応するために、ジョイパッドの入力を拾うルーチンも呼び出す必要が発生しました。
 +このルーチンもジョイパッドの操作をAレジスタにビットマップとして返してくれるのですが、このマッピングが、キー入力のそれと違うのです。
 +NECは何を考えて異なるビットマップを返すようにしたのでしょう?
 +
 +^-^0^1^2^3^4^5^6^7^
 +|キー|SHIFT|STOP|↑|↓|→|←|-|SPACE|
 +|ジョイパッド|↑|↓|←|→|A|B|-|-|
 +
 +上のようなビットマップなんです。
 +いやらしいのは、そもそも方向とトリガー相当のもののマッピングがずれているし、右左が逆になっていたりするところ。
 +
 +都度、それぞれの処理を書くのは面倒なので、既に、キー入力に合わせて処理を組んでいるので、ジョイパッドの入力をキー入力に合わせるように変換するコードを書いて、対応しました。
 +
 +<code>
 +;;; gamekeypad
 +gamekeypad:
 +        call    gamekey
 +        and     a
 +        ret     nz        ; キー入力があったら戻る
 +
 +        ld      a,1       ; ジョイパッド#1からの入力を見る
 +        call    joystick
 +        and     a
 +        ret             ; 何も押されてなければ戻る
 +        push    bc
 +        ld      b,0
 +        ld      c,a
 +        rlc             ; 左に1bitローテートして 10hでマスクして→を取り出す。  |-|-|-|-|→|-|-|-|
 +        ld      a,10h
 +        and     c
 +        ld      b,a
 +        rlc             ; 左に1bitローテートして 0chでマスクして↑↓を取り出す。 |-|-|↑|↓|-|-|-|-|
 +        ld      a,0ch
 +        and     c
 +        or      b
 +        ld      b,a
 +        rlc             ; 左に1bitローテートして 0a3hでマスクして←とABを残す。 |B|-|-|-|-|←|-|A|
 +        ld      a,0a3h
 +        and     c
 +        or      b                                                              |B|-|↑|↓|→|←|-|A|
 +        pop     bc
 +        ret
 +</code>
 ===== 技術的ではないボヤキのようなもの  ===== ===== 技術的ではないボヤキのようなもの  =====
  

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information