;
; MULUW HL,BC (result in DEHL)
; In:         HL =>       First number
;             BC =>       Second number
; Out:        DE =>       MSW result
;             HL =>       LSW result
; Use:        AF, BC', DE' HL' (All Z80 only)
;
MULWRD: LD    A,(&H2D)        ; Check MSX-version
        CP    3
        JR    C,MULZ80        ; No MSX-turboR
        PUSH  BC
        CALL  &H0183
        POP   BC
        AND   A
        JR    Z,MULZ80        ; Z80 mode
        MULUW HL,BC           ; Note: This instruction is not included in WB-ASS2!
        RET

MULZ80: PUSH  HL              ; Routine by Ramon van der Winkel
        EXX                   ; Greatly improved by BiFi'97
        POP   DE              ; DE' = DE2
        EXX
        LD    DE,0            ; DE  = DE1
        LD    HL,0
        LD    A,15
MUL_LP: SLA   C
        RL    B
        CALL  C,MULW32
        ADC   HL,HL
        RL    E
        RL    D
        DEC   A
        JR    NZ,MUL_LP
        OR    B
        RET   P

MULW32: CALL  EXDEDE
        ADD   HL,DE

EXDEDE: PUSH  BC,HL           ; Store BC & HL
        EXX
        POP   HL,BC           ; Restore in BC' & HL'
        RET
