Cybergoth, on Thu Sep 2, 2010 8:10 AM, said:
It would be cool if you could post this snippet tonight. It sounds interesting enough to have a look

Hi,
I need some more time to understand my own code
I think it does TEMP * TEMP2 where TEMP is 8bit and TEMP2 is 16bit. I see X2d_FRACT which could be skipped for increased speed.
Here it is, sorry for the mess:
;
;TEMP * X3d result in X2d
;
LDA #>SQUARES_H
STA ZP1+1
LDA TEMP ;number1
STA ZP1
LDA TEMP2 ;number2
TAY
SEC
SBC TEMP
BCS .CONT
EOR #$FF
CLC
ADC #$01
.CONT
TAX
LDA (ZP1),Y ;g(Y+A)
SEC
SBC SQUARES_H,X ;-g(Y-A)
STA X2d ;RESULT + 1
LDA #>SQUARES_L
STA ZP1+1
LDA (ZP1),Y ;g(Y+A)
SEC
SBC SQUARES_L,X ;-g(Y-A)
STA X2d_FRACT
BCS .CONT2
DEC X2d ;RESULT + 1
.CONT2
; CALC >NUMBER2 * NUMBER1
LDA #>SQUARES_H
STA ZP1+1
LDA TEMP2 + 1
TAY
SEC
SBC TEMP
BCS .CONT3
EOR #$FF
CLC
ADC #$01
.CONT3
TAX
LDA (ZP1),Y ;g(Y+A)
SEC
SBC SQUARES_H,X ;-g(Y-A)
STA X2d+1 ;RESULT+2
LDA #>SQUARES_L
STA ZP1+1
LDA (ZP1),Y ;g(Y+A)
SEC
SBC SQUARES_L,X ;-g(Y-A)
BCS .CONT4
DEC X2d+1 ;RESULT + 2
.CONT4
CLC
ADC X2d ;RESULT + 1
STA X2d ;RESULT + 1
BCC .CONT5
INC X2d+1 ;RESULT + 2
.CONT5
LDA X3d+1
BPL .NO_NEG2
LDA #0
SEC
SBC X2d_FRACT
STA X2d_FRACT
LDA #0
SBC X2d
STA X2d
LDA #0
SBC X2d + 1
STA X2d + 1
.NO_NEG2
This probably doesn't make any sense. I think the math behind the 3d>2d was something like:
;X2d = ((128 - <Z3d >>> 2) * X3d) * 3/4 >>> >Z3d + 21*X3d
;y2d = (128 - <Z3d >>> 2) >>> >Z3d
The 3/4 part is for compensating the first diagonals in the board, which arent 45 degrees. the 21*X3d is because tiles at the horizon are 21 pixels wide.