1 ;; Originally from GBDK by Pascal Felber.
15 ;; Need to sign extend before going in.
66 ;; HL, DE (left, right irrelivent)
70 ;; 16-bit multiplication
77 ;; DE = less significant word of product
79 ;; Register used: AF,BC,DE,HL
82 LD HL,#0x00 ; Product = 0
83 LD A,#15 ; Count = bit length - 1
84 ;; Shift-and-add algorithm
85 ;; If MSB of multiplier is 1, add multiplicand to partial product
86 ;; Shift partial product, multiplier left 1 bit
88 SLA E ; Shift multiplier left 1 bit
90 jp NC,.mlp1 ; Jump if MSB of multiplier = 0
91 ADD HL,BC ; Add multiplicand to partial product
93 ADD HL,HL ; Shift partial product left
95 jp NZ,.mlp ; Continue until count = 0
96 ;; Add multiplicand one last time if MSB of multiplier is 1
97 BIT 7,D ; Get MSB of multiplier
98 JR Z,.mend ; Exit if MSB of multiplier is 0
99 ADD HL,BC ; Add multiplicand to product