Fragment pętli dla każdej współrzędnej zajmuje 64 cykle:
RotateXYZ_l0:
sty Mode ; 3
iny ; 2
mwa Xx Mul1 ; 10
mva PointIn_x,x Mul2+1 ; 6
sty Mode ; 3
mwa Xy Mul1 ; 10
mva PointIn_y,x Mul2+1 ; 6
mwa Xz Mul1 ; 10
mva PointIn_z,x Mul2+1 ; 6
dey ; 2
mva Out1+2 PointOut_x,x ; 6 2*2 + 2*3 + 4*6 + 3*10 = 64
W takim loopie trudno już zjechać jakoś znacząco w dół - 6 cykli da się zaoszczędzić np trzymając w rejestrze Y któryś PointIn_:
ldy #0
RotateXYZ_l0:
sty Mode ; 3
mwa Xx Mul1 ; 10
mvy PointIn_x,x Mul2+1 ; 6 <- Y
mva #1 Mode ; 5
mwa Xy Mul1 ; 10
mva PointIn_y,x Mul2+1 ; 6
mwa Xz Mul1 ; 10
mva PointIn_z,x Mul2+1 ; 6
mva #0 Mode ; 5
mva Out1+2 PointOut_x,x ; 6 3+10+24+30=67
mwa Yx Mul1 ; 10
sty Mul2+1 ; 3 <- Y
mva #1 Mode ; 5
mwa Yy Mul1 ; 10
mva PointIn_y,x Mul2+1 ; 6
mwa Yz Mul1 ; 10
mva PointIn_z,x Mul2+1 ; 6
mva #0 Mode ; 5
mva Out1+2 PointOut_y,x ; 6 3+10+18+30=61
mwa Zx Mul1 ; 10
sty Mul2+1 ; 3 <- Y
mva #1 Mode ; 5
mwa Zy Mul1 ; 10
mva PointIn_y,x Mul2+1 ; 6
mwa Zz Mul1 ; 10
mva PointIn_z,x Mul2+1 ; 6
ldy #0 ; 2
mva Out1+2 PointOut_z,x ; 6 2+3+5+18+30=58
Czy tak będzie działać?
Może udałoby się więcej wykombinować gdybyś napisał dokładniej jak działają te rejestry - bo jeśli np. Mode rozróżnia jedynie zero-niezero, to zamiast:
można - indeksując X'em od jedynki - zaoszczędzić kolejnych 6 cykli:
Czy hardware zmienia zawartość Mul1/Mul2+1?