ユーザ用ツール

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
フルーツフィールド_for_pc-6001mkii [2020/12/24 00:24] – [開発環境] arakiフルーツフィールド_for_pc-6001mkii [2022/09/15 09:40] (現在) – [キー入力とジョイパッド] araki
行 163: 行 163:
 |グラフィックエリア|6000H-7FFFH| |グラフィックエリア|6000H-7FFFH|
 |キー入力|1061H|出力:A(ビットマップ)| |キー入力|1061H|出力:A(ビットマップ)|
 +|ジョイパッド入力|1CA6H|出力:A(ビットマップ)|
 |キー入力|0FBCH|出力:A=文字コード| |キー入力|0FBCH|出力:A=文字コード|
 |キーバッファクリア|1058H| |キーバッファクリア|1058H|
行 190: 行 191:
  
 WSL2はWindowsとのファイルの交換が容易なので、ビルドしたコードを即座にWindows上のエミュレータに送り込むことができます。 WSL2はWindowsとのファイルの交換が容易なので、ビルドしたコードを即座にWindows上のエミュレータに送り込むことができます。
-WSL2側からは ''/mnt/<ドライブ名>/<パス>''で、Windows側からは '\\wsl$\Ubuntu\<パス>''でそれぞれ、互いのファイル空間にアクセス可能です。+WSL2側からは ''/mnt/<ドライブ名>/<パス>''で、Windows側からは ''\\wsl$\Ubuntu\<パス>''でそれぞれ、互いのファイル空間にアクセス可能です。
  
 ==== ローダー  ==== ==== ローダー  ====
行 715: 行 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