*
*				Macro- avrundning
*
* Det här är ett macro som går att använda på samma sätt som DIVU, men med
* följande skilnader:
* 1) Resultatet hamnar alltid i d0.
* 2) Om nämnaren var 0 nollställs d0, inget fel uppstår.
* 3) Kvoten returneras AVRUNDAD till närmaste HELTAL.
* 4) Båda talen kan vara antingen ett dataregister, ett adressregister,
*    en label, en adress eller ett absolut heltal.
*
*    Tänk på att resten kan bli negativ vid avrundningen (och är därför
*    inte så användbar). Inga andra register än d0 påverkas av anropet.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Divide:	MACRO
	movem.l	d1-d2,-(sp)
	move.w	\1,.Dummy\0
	move.l	\2,d0
	move.w	.Dummy\0,d1
	tst.w	d1
	beq	.Err\0
	move.l	d0,d2
	divu	d1,d0
	move.w	d0,.Dummy\0
	swap	d0
	lsl.w	#1,d0
	cmp.w	d1,d0
	blo	.Down\0
	add.w	#1,.Dummy\0
.Down\0:
	mulu	.Dummy\0,d1
	sub.l	d1,d2
	move.w	d2,d0
	swap	d0
	move.w	.Dummy\0,d0
	bra	.End\0
.Dummy\0:
	dc.w	0
.Err\0:
	moveq	#0,d0
.End\0:
	movem.l	(sp)+,d1-d2
	ENDM

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
*       Testanrop. Sätt Test till 1 för att testa.
*

Test:	EQU	1

	ifne	Test

	move.w	#4,d0		; nämnaren är ett word
	move.l	#11,d1		; täljaren är ettlongword (båda positiva)
	Divide	d0,d1		; Anropa Divide. Resultatet hamnar i d0.
	move.l	d0,d7		; Flytta resultatet till d7.
	Divide	TestSiffra,#72	; Anropa Divide igen.
	move.l	d0,d6		; Flytta resultatet till d6.
	rts			; Avsluta. Titta på d6 och d7!

TestSiffra:
	dc.w	6

	endc
