フルーツフィールド_for_pc-6001mkii
差分
このページの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|-|-| | ||
+ | |||
+ | 上のようなビットマップなんです。 | ||
+ | いやらしいのは、そもそも方向とトリガー相当のもののマッピングがずれているし、右左が逆になっていたりするところ。 | ||
+ | |||
+ | 都度、それぞれの処理を書くのは面倒なので、既に、キー入力に合わせて処理を組んでいるので、ジョイパッドの入力をキー入力に合わせるように変換するコードを書いて、対応しました。 | ||
+ | |||
+ | < | ||
+ | ;;; gamekeypad | ||
+ | gamekeypad: | ||
+ | call gamekey | ||
+ | and a | ||
+ | ret | ||
+ | |||
+ | ld a,1 ; ジョイパッド# | ||
+ | call joystick | ||
+ | and a | ||
+ | ret | ||
+ | push bc | ||
+ | ld b,0 | ||
+ | ld c,a | ||
+ | rlc | ||
+ | ld a,10h | ||
+ | and c | ||
+ | ld b,a | ||
+ | rlc | ||
+ | ld a,0ch | ||
+ | and c | ||
+ | or b | ||
+ | ld b,a | ||
+ | rlc | ||
+ | ld a,0a3h | ||
+ | and c | ||
+ | or b |B|-|↑|↓|→|←|-|A| | ||
+ | pop bc | ||
+ | ret | ||
+ | </ | ||
===== 技術的ではないボヤキのようなもの | ===== 技術的ではないボヤキのようなもの | ||
フルーツフィールド_for_pc-6001mkii.1663228424.txt.gz · 最終更新: 2022/09/15 07:53 by araki