OK, here is the matching bug-free and cleanily programmed division routine. In this test $AA00 is multipied with $F851EB85 and then the product is divided by $F851EB85 to find back $AA00
Code:
;TEST PROGRAM
;
;MULTIPLY AN UN-SIGNED 2 BYTE INTEGER (HERE $AA00) WITH 0.97 = $F851EB85/$100000000
*=$033A
;THE TWO-BYTE INTEGER TO BE MULTIPLIED LEFT-JUSTIFIED PADDED WITH ZEROS
LDA #$AA
STA $B0
STA $B1
LDA #$00
STA $B2
STA $B3
;THE INTEGER $F851EB85
LDA #$F8
STA $B4
LDA #$51
STA $B5
LDA #$EB
STA $B6
LDA #$85
STA $B7
JSR MULT
;THE SCALED 2-BYTE UNSIGNED VALUE IN $BC,.,&BF
;
;THE FULL RESULT OF THE MULTIPLICATION IN $BC,.,$C3
;DIVIDE IT WITH THE INTEGER $F851EB85
;THE RESULT WILL APPEAR IN $B0,..,$B3
LDA #$F8
STA $B4
LDA #$51
STA $B5
LDA #$EB
STA $B6
LDA #$85
STA $B7
JSR DIV
;THE QUOATION $AA00 BACK IN $B0-$B3
BRK
;SUBROUTINE TO MULTIPLY TWO 4 BYTE NUMBERS
;THE NUMBERS TO BE PUT IN $B0,$B1,$B2,$B3 AND IN
;$B4,$B5,$B6,$B7
;
;THE PRODUCT IN $BC,.,$C3
;
;IF THE TWO NUMBERS ARE IN THE FORM "FLOATING POINT
;MANTISSA", I.E LEFT JUSTIFIED WITH THE MSB SET THE
;MANTISSA OF THE PRODUCT IS IN $BC,$BD,$BE,$BF
;
;$B8,$B9,$BA,$BB IS WORKING AREA
MULT LDA #$00
LDX #$0D
L0 STA $B7,X ;SET WORK AREA TO ZERO
DEX
BNE L0
LDY #$20 ;NUMBER OF BITS IN 4 BYTES
L1 LDX #$F8 ;ROLL RIGHT 8 BYTES
CLC
L2 ROR $BC,X
INX
BNE L2
L3 ASL $B3
ROL $B2
ROL $B1
ROL $B0
BCC L5
LDX #$08 ;ADD CONTRIBUTION
CLC
L4 LDA $BB,X
ADC $B3,X
STA $BB,X
DEX
BNE L4
L5 DEY
BNE L1
RTS
; SUBROUTINE TO DIVIDE A 8 BYTE NUMBER WITH A 4 BYTE NUMBER
; THE 8 BYTE NUMBER TO BE PUT IN $BC,.,$C3
; THE 4 BYTE NUMBER TO BE PUT IN $B4,.,$B7
;
; THE RESULT TO $B0,.,$B3
;
; IF THE 4 BYTE MANTISSA OF A FLOATING POINT NUMBER IS PUT IN THE MORE SIGNIFICANT
; PART OF THE 8 BYTE FIELD PADDED WITH ZEROS AND THE MANTISSA OF ANOTHER FLOATING
; POINT NUMBER IS PUT IN $B4,..,$B7 THE MANTISSA OF THE QUOATION CAN BE FOUND IN
; $B0,..,$B3
;
; $B8,$B9,$BA,$BB IS WORKING AREA
DIV LDA #$00
LDX #$04
L6 STA $B7,X ;SET WORK AREA TO ZERO
DEX
BNE L6
LDY #$20 ;NUMBER OF BITS IN 4 BYTES
L7 LDX #$F8 ;ROLL RIGHT 8 BYTES
CLC
L8 ROR $BC,X
INX
BNE L8
LDX #$F8
L9 LDA $C4,X
CMP $BC,X
BCC LC
BNE LA
INX
BNE L9
LA LDX #$08
SEC
LB LDA $BB,X
SBC $B3,X
STA $BB,X
DEX
BNE LB
; CARRY IS SET AT THIS POINT!
LC ROL $B3 ;ROLL IN BINARY DIGIT
ROL $B2
ROL $B1
ROL $B0
DEY
BNE L7
RTS