ユーザ用ツール

サイト用ツール


フルーツフィールド_for_pc-6001mkii

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
フルーツフィールド_for_pc-6001mkii [2022/09/15 16:53] – [PC-6001mkIIのBIOS/ワークエリア] arakiフルーツフィールド_for_pc-6001mkii [2022/09/15 18: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>
 ===== 技術的ではないボヤキのようなもの  ===== ===== 技術的ではないボヤキのようなもの  =====
  
フルーツフィールド_for_pc-6001mkii.1663228424.txt.gz · 最終更新: 2022/09/15 16:53 by araki