Wracam do pytania związanego z zamiennikiem indexowania 6502 w Z80:
Mam przykładowy kod - jest to bardzo uproszczona, przykładowa pętla ruchu sprites na ekranie.
Pętla jest jedną, wspólną funkcją dla wszystkich sprites, jedynie zmieniane są wartości indexow i wykonywanu skok do tej funkcji.
Dla kodu 6502 używam indexu Y dla zmiennych, które w pamięci RAM są co jeden bajt, natomiast index X dla zmiennych sprite's, które są co 4 bajty.
Interesuje mnie jak lepiej to zrobić w przypadku kodu Z80 (bo domyślam się, można to zrobić lepiej...

)
; RAM:
ENEMY0_FLAGS ; te zmienne są jedna po drugiej w pamięci RAM
ENEMY1_FLAGS
ENEMY2_FLAGS
ENEMY3_FLAGS
(...)
ENEMY0_Y ; tu jest nieco inaczej bo każda zmienna np. Y jest co 4 bajty dla kolejnego Sprite'a
ENEMY0_X
ENEMY0_T
ENEMY0_P
ENEMY1_Y
ENEMY1_X
ENEMY1_T
ENEMY1_P
ENEMY2_Y
ENEMY2_X
ENEMY2_T
ENEMY2_P
ENEMY3_Y
ENEMY3_X
ENEMY3_T
ENEMY3_P
(...)
; ################################################
; 6502:
LDY $00 ; ENEMY0 FLAGS
LDX $00 ; ENEMY0 Y/X
JSR FUNKCJA_WSPOLNA
LDY $01 ; ENEMY1 FLAGS
LDX $04 ; ENEMY1 Y/X
JSR FUNKCJA_WSPOLNA
LDY $02 ; ENEMY2 FLAGS
LDX $08 ; ENEMY2 Y/X
JSR FUNKCJA_WSPOLNA
LDY $03 ; ENEMY3 FLAGS
LDX $0C ; ENEMY3 Y/X
JSR FUNKCJA_WSPOLNA
(...)
FUNKCJA_WSPOLNA:
LDA ENEMY0_FLAGS,Y
AND %00000001
BEQ FUNKCJA_WSPOLNA_NO
INC ENEMY0_Y,X
INC ENEMY0_X,X
FUNKCJA_WSPOLNA_NO:
RTS
; ################################################
; Z80:
LD HL,$0000
LD (TEMP1),HL ; ENEMY0 FLAGS
LD (TEMP2),HL ; ENEMY0 Y/X
CALL FUNKCJA_WSPOLNA
LD HL,$0001
LD (TEMP1),HL ; ENEMY1 FLAGS
LD HL,$0004
LD (TEMP2),HL ; ENEMY1 Y/X
CALL FUNKCJA_WSPOLNA
LD HL,$0002
LD (TEMP1),HL ; ENEMY2 FLAGS
LD HL,$0008
LD (TEMP2),HL ; ENEMY2 Y/X
CALL FUNKCJA_WSPOLNA
LD HL,$0003
LD (TEMP1),HL ; ENEMY3 FLAGS
LD HL,$000C
LD (TEMP2),HL ; ENEMY3 Y/X
CALL FUNKCJA_WSPOLNA
(...)
FUNKCJA_WSPOLNA:
LD HL,(TEMP1)
LD DE,HL
LD HL,(ENEMY0_FLAGS)
ADD HL,DE
LD A,(HL)
AND %00000001
JR Z,FUNKCJA_WSPOLNA_NO
LD HL,(TEMP2)
LD DE,HL
LD HL,(ENEMY0_Y)
ADD HL,DE
LD A,(HL)
INC A
LD (HL),A
LD HL,(ENEMY0_X)
ADD HL,DE
LD A,(HL)
INC A
LD (HL),A
FUNKCJA_WSPOLNA_NO:
RET