suzukiplan / vgsasm

Z80 assembler for VGS-Zero
GNU General Public License v3.0
0 stars 0 forks source link

`HL += (IX+d|IY+d)` #25

Closed suzukiplan closed 2 days ago

suzukiplan commented 2 days ago

以下の処理で使いたい

https://github.com/suzukiplan/vgszero/blob/9357b86/example/05_sprite256-asm/program.asm#L114-L118

    ; X 座標を計算して OAM を更新
    hl = (ix + offset(OBJ.x))   ; X 座標(固定少数点数)を HL へ
    de = (ix + offset(OBJ.vx))  ; X 座標の移動速度(固定少数点数)を DE へ
    hl += de                    ; X += VX
    (ix + offset(OBJ.x)) = hl   ; X 座標を更新

対応すれば上記の処理をこういう風に書ける(1ステップ削れる)ようになる。

    ; X 座標を計算して OAM を更新
    hl = (ix + offset(OBJ.x))   ; X 座標(固定少数点数)を HL へ
    hl += (ix + offset(OBJ.vx)) ; X 座標に移動速度(固定少数点数)を加算
    (ix + offset(OBJ.x)) = hl   ; X 座標を更新
suzukiplan commented 2 days ago

BC,DEを使うとかなりステップが嵩む(2回PUSH/POPが必要)なので HL のみサポート