IO ポート (メイン) > 0x211F

0x211F - M7X (Mode7中央位置X)

アクセスフラグ : 書ワ強VH-

D7 D6 D5 D4 D3 D2 D1 D0
DF DE DD DC DB Dx D9 D8
x x x x x x x x
x x x x x x x x

0x2120 - M7Y (Mode7中央位置Y)

アクセスフラグ : 書ワ強VH-

D7 D6 D5 D4 D3 D2 D1 D0
DF DE DD DC DB Dx D9 D8
x x x x x x x x
x x x x x x x x

これらは、 M7A ~ M7D と同じように 2 度書きレジスタで、 値は 2 の補数表現になる。

行列変換の式 :

[ X ]   [ A B ]   [ SX + M7HOFS - CX ]   [ CX ]
[   ] = [     ] * [                  ] + [    ]
[ Y ]   [ C D ]   [ SY + M7VOFS - CY ]   [ CY ]

SX/SY はスクリーンの座標。 X/Y はプレイ中の画面から得られるピクセルの座標。 0x211a のビット 7 がクリアされている場合、 結果は 0<=X<=1023 と 0<=Y<=1023 の範囲に制限される。 0x211a のビット 6 と 7 が両方セットされていて、 X か Y が 0 より小さいか、 1023 より大きい場合、 それぞれの下位 3 ビットはキャラクタ 0 からピクセルが選択される。

ビット精度を考慮した式 :

#define CLIP(a) (((a)&0x2000)?((a)|~0x3ff):((a)&0x3ff))

X[0,y] = ((A*CLIP(HOFS-CX))&~63)
       + ((B*y)&~63) + ((B*CLIP(VOFS-CY))&~63)
       + (CX<<8)
Y[0,y] = ((C*CLIP(HOFS-CX))&~63)
       + ((D*y)&~63) + ((D*CLIP(VOFS-CY))&~63)
       + (CY<<8)

X[x,y] = X[x-1,y] + A
Y[x,y] = Y[x-1,y] + C

(全ての場合で、X[], Y[] は 8 ビットの固定小数点表現)

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2017年02月20日 19:11