; ----------------------------------------------------------------------------
;            MULU.L och DIVU.L
; ----------------------------------------------------------------------------
	move.l	#$1000,d0
	move.l	#10000,d1
	bsr	MuluL
	rts

; ----------------------------------------------------------------------------
;                           d0 - Number to multiply         (32-bit)
;                           d1 - Number to multiply with    (16-bit)
; ----------------------------------------------------------------------------

MuluLong:
	movem.l	d2-d6,-(sp)	; Save registers
	move.w	#0,d5		; Clear Carry
	move.w	d0,d2		; Get lower word
	mulu	d1,d2		; Multiply lower word
	move.w	d2,d6		; Save result
	swap	d2		; Swap d2 to test
	tst.w	d2		; if there is any Carry
	beq	.NoCarry	; No Carry!
	move.w	d2,d5		; Save Carry
.NoCarry:
	swap	d0		; Swap to get higher word
	move.w	d0,d2		; Get higher word
	mulu	d1,d2		; Multiply h.w
	swap	d6		; Swap result register
	move.w	d2,d6		; Move result to register
	add.w	d5,d6		; Add Carry
	swap	d6		; Get normal order
	move.l	d6,d0		; Save result
	movem.l	(sp)+,d2-d6
	rts
; ----------------------------------------------------------------------------
;                           d0 - Number to divide
;                           d1 - Number to divide with
; ----------------------------------------------------------------------------
DivuLong:
	movem.l	d2-d7/a0-a6,-(sp)	; Save registers






;	move.w	d0,d2
;	divu	d1,d2
;	move.w	d2,d6

;	swap	d0
;	move.w	d0,d2
;	divu	d1,d2
;	swap	d6
;	move.w	d2,d6
;	swap	d6
;	move.l	d6,d0
	movem.l	(sp)+,d2-d7/a0-a6
	rts



