; ;CONVERT 2 BYTE UNSIGNED INTEGER IX2 TO FLOAT LDA #$00 STA FAC+1 STA FAC+2 LDA IX2 STA FAC+3 LDA IX2+1 STA FAC+4 JSR FLOAT ; ;MOVE TO "ARG" JSR TOARG ; ;CONVERT 2 BYTE UNSIGNED INTEGER IX1 TO FLOAT LDA #$00 STA FAC+1 STA FAC+2 LDA IX1 STA FAC+3 LDA IX1+1 STA FAC+4 JSR FLOAT ; ;SAVE FLOATING POINT NUMBER FX1 LDX #$06 L0 LDA FAC-1,X STA FX1-1,X DEX BNE L0 ; ;COMPUTE FX2-FX1 JSR FSUB ; ;SAVE FX2-FX1 ON STACK FOR LATER USE LDX #$06 L1 LDA FAC-1,X PHA DEX BNE L1 ; ;CONVERT 2 BYTE UNSIGNED INTEGER IY2 TO FLOAT LDA #$00 STA FAC+1 STA FAC+2 LDA IY2 STA FAC+3 LDA IY2+1 STA FAC+4 JSR FLOAT ; JSR TOARG ;MOVE TO "ARG" ; ;CONVERT 2 BYTE UNSIGNED INTEGER IY1 TO FLOAT LDA #$00 STA FAC STA FAC+1 STA FAC+2 LDA IY1 STA FAC+3 LDA IY1+1 STA FAC+4 JSR FLOAT ; ;SAVE FLOATING POINT NUMBER FY1 LDX #$06 L2 LDA FAC-1,X STA FY1-1,X DEX BNE L2 ; ;COMPUTE FY2-FY1 JSR FSUB ; JSR TOARG ;MOVE TO "ARG" ; ;RETRIEVE FX2-FX1 FROM STACK LDX #$FA L3 PLA STA FAC+6,X INX BNE L3 ; ;COMPUTE (FY2-FY1)/(FX2-FX1) JSR FDIV ; ;SAVE FLOATING POINT NUMBER (FY2-FY1)/(FX2-FX1) LDX #$06 L4 LDA FAC-1,X STA CO-1,X DEX BNE L4 ; ;CONVERT 2 BYTE UNSIGNED INTEGER IX TO FLOAT LDA #$00 STA FAC+1 STA FAC+2 LDA IX STA FAC+3 LDA IX+1 STA FAC+4 JSR FLOAT ; ;MOVE TO "ARG" JSR TOARG ; ;RETRIEVE FX1 LDX #$06 L5 LDA FX1-1,X STA FAC-1,X DEX BNE L5 ; ;COMPUTE FX-FX1 JSR FSUB ; ;MOVE TO "ARG" JSR TOARG ; ;RETRIEVE FLOATING POINT NUMBER (FY2-FY1)/(FX2-FX1) LDX #$06 L6 LDA CO-1,X STA FAC-1,X DEX BNE L6 ; ;COMPUTE (FX-FX1)*(FY2-FY1)/(FX2-FX1) JSR FMUL ; ;MOVE TO "ARG" JSR TOARG ; ;RETRIEVE FLOATING POINT NUMBER FY1 LDX #$06 L7 LDA FY1-1,X STA FAC-1,X DEX BNE L7 ; ;COMPUTE FY+(FX-FX1)*(FY2-FY1)/(FX2-FX1) JSR FADD ; ;CONVERT TO 32 BIT INTEGER JSR FIX ; ;SAVE THE 2 LEAST SIGNIFICANT BYTES LDA FAC+3 STA IY LDA FAC+4 STA IY+1 BRK IX .DB $61 ;X =25000 .DB $A8 IX1 .DB $00 ;X1=231 .DB $E7 IX2 .DB $72 ;X2=29239 .DB $37 IY1 .DB $01 ;Y1=499 .DB $F3 IY2 .DB $7F ;Y2=32767 .DB $FF ;IY SHOULD BE $6D93 28051.6 FX1 *=*+6 FY1 *=*+6 CO *=*+6 IY *=*+2