	SECTION 8

	XDEF	ODIVU
	XDEF	LN2DEC
	XDEF	WD2DEC
	XDEF	BY2DEC
	XDEF	WD2DECNT

	NOLIST
	INCLUDE STRINGS.MC
	LIST

* DIVIDE WITH OVERFLOW (FROM MTT8 CN)

* D0=DIVISOR
* D1=DIVIDEND

* D0=REMAINDER
* D1=QUOTIENT

ODIVU	MOVEM.L	D2/D3,-(A7)
	CLR.L	D3
	DIVU	D0,D1
	BVC.S	FORMAT
	MOVE.L	D1,D2
	CLR.W	D1
	SWAP	D1
	DIVU	D0,D1
	MOVE.W	D1,D3
	MOVE.W	D2,D1
	DIVU	D0,D1
FORMAT	MOVE.L	D1,D0
	SWAP	D1
	MOVE.W	D3,D1
	SWAP	D1
	CLR.W	D0
	SWAP	D0
	MOVEM.L	(A7)+,D2/D3
	RTS

* A4=STRING D1=VALUE
LN2DEC
	MOVEM.L	D0/D1/D2,-(A7)
	STRFIL	#32
	MOVE.W	D4,D1
	MOVE.W	#9,D2
B2DAG	MOVE.L	#10,D0
	JSR	ODIVU
	OR.B	#$30,D0
	MOVE.B	D0,0(A4,D2.W)
	TST.L	D1
	BEQ	B2D1
	DBRA	D2,B2DAG
B2D1
	LTRIM
	MOVEM.L	(A7)+,D0/D1/D2
	RTS

* A4=STRING D4=VALUE.W
WD2DEC
	MOVEM.L	D0/D1/D2,-(A7)
	STRFIL	#32
	CLR.L	D1
	MOVE.W	D4,D1
	MOVE.W	#4,D2
W2DAG	MOVE.L	#10,D0
	JSR	ODIVU
	OR.B	#$30,D0
	MOVE.B	D0,0(A4,D2.W)
	TST.L	D1
	BEQ	W2D1
	DBRA	D2,W2DAG
W2D1
	LTRIM
	MOVEM.L	(A7)+,D0/D1/D2
	RTS

* A4=STRING D4=VALUE.W NO TRIM
WD2DECNT
	MOVEM.L	D0/D1/D2,-(A7)
	STRFIL	#32
	CLR.L	D1
	MOVE.W	D4,D1
	MOVE.W	#4,D2
W2DNTAG	MOVE.L	#10,D0
	JSR	ODIVU
	OR.B	#$30,D0
	MOVE.B	D0,0(A4,D2.W)
	TST.L	D1
	BEQ	W2D1NT
	DBRA	D2,W2DNTAG
W2D1NT
	MOVEM.L	(A7)+,D0/D1/D2
	RTS

* A4=STRING D4=VALUE.B
BY2DEC
	MOVEM.L	D0/D1/D2,-(A7)
	STRFIL	#32
	CLR.L	D1
	MOVE.B	D4,D1
	MOVE.W	#2,D2
Y2DAG	MOVE.L	#10,D0
	JSR	ODIVU
	OR.B	#$30,D0
	MOVE.B	D0,0(A4,D2.W)
	TST.L	D1
	BEQ	Y2D1
	DBRA	D2,Y2DAG
Y2D1
	LTRIM
	MOVEM.L	(A7)+,D0/D1/D2
	RTS
	
	END