//------------------------------------------------ // Mult/Div routines, taken from "The Fridge" // Made with 65CM interfaces //------------------------------------------------ GOTO lib_multdiv_skip WORD lib_multdiv_acc WORD lib_multdiv_aux WORD lib_multdiv_ext //------------------------------------------------ // * MULTIPLY ROUTINE //* ACC*AUX -> [ACC,EXT] (low,hi) 32 bit result //------------------------------------------------ LABEL lib_multdiv_mult ASM lda #0 sta lib_multdiv_ext+1 ldy #$11 clc lib_multdiv_l1 ror lib_multdiv_ext+1 ror a ror lib_multdiv_acc+1 ror lib_multdiv_acc bcc lib_multdiv_mul2 clc adc lib_multdiv_aux pha lda lib_multdiv_aux+1 adc lib_multdiv_ext+1 sta lib_multdiv_ext+1 pla lib_multdiv_mul2 dey bne lib_multdiv_l1 sta lib_multdiv_ext ENDASM SUBEND //------------------------------------------------ // * DIVIDE ROUTINE //* ACC/AUX -> ACC, remainder in EXT //------------------------------------------------ LABEL lib_multdiv_div ASM lda #0 sta lib_multdiv_ext+1 ldy #$10 lib_multdiv_l2 asl lib_multdiv_acc rol lib_multdiv_acc+1 rol a rol lib_multdiv_ext+1 pha cmp lib_multdiv_aux lda lib_multdiv_ext+1 sbc lib_multdiv_aux+1 bcc lib_multdiv_div2 sta lib_multdiv_ext+1 pla sbc lib_multdiv_aux pha inc lib_multdiv_acc lib_multdiv_div2 pla dey bne lib_multdiv_l2 sta lib_multdiv_ext ENDASM SUBEND LABEL lib_multdiv_skip