/*

 16 bit multiply and divide routines.
 Three 16 bit (two-byte) locations
 ACC, AUX and EXT must be set up,
 preferably on zero page.

 MULTIPLY ROUTINE

 ACC*AUX -> [ACC,EXT] (low,hi) 32 bit result

 http://www.ffd2.com/fridge/math/mult-div.s

*/

;---
        org $2000

        mwa #317 mul16.acc
        mwa #13 mul16.aux
        jsr mul16

loop    jmp loop


.proc mul16

acc     equ $80
aux     equ acc+2
ext     equ aux+2

          LDA #0
          STA EXT+1
          LDY #$11
	  CLC
LOOP      ROR EXT+1
          ROR @
          ROR ACC+1
          ROR ACC
          BCC MUL2
          CLC
          ADC AUX
          PHA
          LDA AUX+1
          ADC EXT+1
          STA EXT+1
          PLA
MUL2      DEY
          BNE LOOP
          STA EXT
          RTS
.endp


 icl '..\xasm_macro.asm'
