roland p, on Wed Dec 14, 2011 3:59 AM, said:
Posted Wed Dec 14, 2011 4:47 AM
GroovyBee, on Wed Dec 14, 2011 4:21 AM, said:
;CALC_2d ; ;input: OBJECT_X3d OBJECT_Y3d ;output: OBJECT_X2d OBJECT_Y2d OBJECT_SIZE ;First calc Y2d: ;Y2d = (128 + <Y3d >> 1) >> >Y3d ; CALC_2d LDA #0 ;2 STA OBJECT_Y2d ;3 LDX OBJECT_Y3d + 1 ;3 CPX #11 ;2 BCC NOT_TOO_FAR ;2/3 LDA #-5 ;2 object is too far away. STA OBJECT_Y2d + 1 ;3 LDA #34 STA OBJECT_SIZE RTS ;6 NOT_TOO_FAR LDA DIV_JUMP_TABLE_HIGH,X ;4 PHA ;3 LDA DIV_JUMP_TABLE_LOW,X ;4 PHA ;3 LDY #4 ;OBJECT_SIZE LDA OBJECT_Y3d ;3 LSR ;2 EOR #$FF ;2 a = 255 - (<Y3d >> 1) RTS ;6 jump to DIV_... DIV_FAR ;$0000...$0080 SEC SBC SUBSTRACTION_TABLE,X STA OBJECT_Y2d LDA #0 STA OBJECT_Y2d + 1 LDA OBJECT_SIZES,X STA OBJECT_SIZE LDA CORRECTION_TABLE,X STA CORRECTION JMP CALC_X2d DIV_5 ;$0080...$0100 STA OBJECT_Y2d LDA #0 STA OBJECT_Y2d + 1 LDA #5 STA OBJECT_SIZE LDA #14 STA CORRECTION JMP CALC_X2d DIV_4 LSR ;2 128...255 >> 7 = $0100...$0200 ROR OBJECT_Y2d ;5 DIV_3 LSR ;2 128...255 >> 6 = $0200...$0400 ROR OBJECT_Y2d ;5 DIV_2 LSR ;2 128...255 >> 5 = $0400...$0800 ROR OBJECT_Y2d ;5 DIV_1 LSR ;2 128...255 >> 4 = $0800...$1000 ROR OBJECT_Y2d ;5 DIV_0 LSR ;2 128...255 >> 3 = $1000...$2000 ROR OBJECT_Y2d ;5 LSR ;2 128...255 >> 2 = $2000...$4000 ROR OBJECT_Y2d ;5 LSR ;2 $8000...$FF00 >> 1 = $4000...$8000 ROR OBJECT_Y2d ;5 STA OBJECT_Y2d + 1 ;3 LDA OBJECT_Y2d SEC SBC #$80 LDA OBJECT_Y2d + 1 SBC #0 CLC ADC #5 STA OBJECT_SIZE LDA #14 STA CORRECTION ; ;X2d = X3d * (Y2d * 3 + correction) ; CALC_X2d LDX OBJECT_Y2d + 1 ;3 LDA OBJECT_Y2d ;3 ASL ;2 BCC NO_ADD ;2/3 INX ;2 NO_ADD CLC ;2 ADC OBJECT_Y2d ;3 STA TEMP ;3 TEMP = <OBJECT_Y2d * 3 STA FAC_LOW_RESULT_LOW_PLUS ;set zp adresses STA FAC_LOW_RESULT_HIGH_PLUS EOR #$ff STA FAC_LOW_RESULT_LOW_MINUS STA FAC_LOW_RESULT_HIGH_MINUS TXA ;2 ADC OBJECT_Y2d + 1 ;3 ADC OBJECT_Y2d + 1 ;3 ADC CORRECTION ;3 STA TEMP + 1 ;3 TEMP + 1 = >OBJECT_Y2d * 3 + CORRECTION STA FAC_HIGH_RESULT_LOW_PLUS ;set zp adresses STA FAC_HIGH_RESULT_HIGH_PLUS EOR #$ff STA FAC_HIGH_RESULT_LOW_MINUS STA FAC_HIGH_RESULT_HIGH_MINUS ; AB (TEMP+1,TEMP) ; CD * (OBJECT_X3d+1, OBJECT_X3d) ; ------ ; HL (B*D) (TEMP * OBJECT_X3d) ; HL (A*D) (TEMP + 1 * OBJECT_X3d) ; HL (B*C) (TEMP * OBJECT_X3d + 1) ; HL (A*C) (TEMP + 1 * OBJECT_X3d + 1) ;TEMP * OBJECT_X3d = AAaa ;TEMP + 1 * OBJECT_X3d = BBbb ;TEMP * OBJECT_X3d + 1 = CCcc ;TEMP + 1 * OBJECT_X3d + 1 = DDdd ; ; AAaa ; BBbb ; CCcc ;DDdd + ; ;TEMP * OBJECT_X3d = AAaa LDY OBJECT_X3d SEC ; LDA (FAC_LOW_RESULT_LOW_PLUS),y ;Lowest byte of result not needed ; SBC (FAC_LOW_RESULT_LOW_MINUS),y ; STA PRODUCT LDA (FAC_LOW_RESULT_HIGH_PLUS),y SBC (FAC_LOW_RESULT_HIGH_MINUS),y STA AA ;TEMP + 1 * OBJECT_X3d = BBbb SEC LDA (FAC_HIGH_RESULT_LOW_PLUS),y SBC (FAC_HIGH_RESULT_LOW_MINUS),y STA bb LDA (FAC_HIGH_RESULT_HIGH_PLUS),y SBC (FAC_HIGH_RESULT_HIGH_MINUS),y STA BB LDY OBJECT_X3d + 1 ;TEMP * OBJECT_X3d + 1 = CCcc SEC LDA (FAC_LOW_RESULT_LOW_PLUS),y SBC (FAC_LOW_RESULT_LOW_MINUS),y STA cc LDA (FAC_LOW_RESULT_HIGH_PLUS),y SBC (FAC_LOW_RESULT_HIGH_MINUS),y STA CC ;TEMP + 1 * OBJECT_X3d + 1 = DDdd SEC LDA (FAC_HIGH_RESULT_LOW_PLUS),y SBC (FAC_HIGH_RESULT_LOW_MINUS),y STA dd LDA (FAC_HIGH_RESULT_HIGH_PLUS),y SBC (FAC_HIGH_RESULT_HIGH_MINUS),y STA PRODUCT + 3 clc lda AA adc bb sta PRODUCT+1 lda BB adc CC sta PRODUCT+2 bcc SKIP1 inc PRODUCT+3 clc SKIP1 lda cc adc PRODUCT+1 sta PRODUCT+1 lda dd adc PRODUCT+2 sta PRODUCT+2 bcc SKIP2 inc PRODUCT+3 SKIP2 ;Take care of signed OBJECT_X3d LDA OBJECT_X3d + 1 bpl NOT_NEG sec lda PRODUCT+2 sbc TEMP+0 sta PRODUCT+2 lda PRODUCT+3 sbc TEMP+1 sta PRODUCT+3 NOT_NEG CLC ;MAYBE THIS PART CAN BE REMOVED LDA PRODUCT+1 ADC #$80 STA OBJECT_X2d LDA PRODUCT+2 ADC #0 STA OBJECT_X2d + 1 LDA PRODUCT+3 ADC #0 STA OBJECT_X2d + 2 RTS
Edited by roland p, Wed Dec 14, 2011 4:48 AM.
Posted Thu Dec 15, 2011 4:55 AM
Posted Thu Dec 15, 2011 6:54 AM
Posted Thu Dec 15, 2011 7:00 AM
Posted Thu Dec 15, 2011 7:14 AM
GroovyBee, on Thu Dec 15, 2011 7:00 AM, said:
Posted Thu Dec 15, 2011 7:46 AM
Posted Sun Dec 18, 2011 4:20 PM
GroovyBee, on Thu Dec 15, 2011 7:46 AM, said:
Posted Mon Dec 19, 2011 3:29 PM
Posted Tue Dec 20, 2011 2:01 PM
theloon, on Mon Dec 19, 2011 3:29 PM, said:
Edited by roland p, Tue Dec 20, 2011 2:02 PM.
Posted Sat Dec 24, 2011 2:19 AM
Edited by roland p, Sat Dec 24, 2011 3:08 AM.
Posted Sat Dec 24, 2011 8:38 PM
Posted Thu Jan 5, 2012 10:10 AM
Posted Tue Jan 10, 2012 2:48 PM
enthusi, on Thu Jan 5, 2012 10:10 AM, said:
Posted Wed Jan 11, 2012 3:07 AM
Posted Wed Jan 11, 2012 1:34 PM
enthusi, on Wed Jan 11, 2012 3:07 AM, said:
Posted Wed Jan 11, 2012 1:41 PM
Posted Wed Jan 11, 2012 5:28 PM
Posted Wed Apr 18, 2012 11:30 PM
Posted Thu Apr 19, 2012 5:54 PM
Posted Fri Apr 20, 2012 2:29 AM
Posted Fri Apr 20, 2012 5:43 AM
Posted Fri Apr 20, 2012 5:47 AM
0 members, 1 guests, 0 anonymous users