************************************************************
* Tcount(CNT count[],int adrs,int wx,int wy)
* typedef struct {
*	unsint	cnt;	カウント
*	unsint	code;	コード
* } CNT = unint(h.w=カウント , l.w=コード);
* adrs=領域ホーム plane 0 address
* wx = 領域Ｘ幅（テキスト）
* wy = 領域Ｙ幅（グラフィック）
* 画面上領域内のコード出現回数カウント
* plane0/1をORしてカウントする
************************************************************

	.include	defines.mac
	.include	getput3.mac

times	equ	4	* count clearのループ展開回数
			* 必ず２の階乗のこと

************************************************************

	.xdef	_Tcount
_Tcount:
	movem.l	4(sp),a0/a2	* count
	*move.l	8(sp),a2	* plane 0 address
	movem.l	12(sp),d0/d2	* wx
	*move.l	16(sp),d2	* wy
	subq.w	#1,d2		* -1 for dbra
	movem.l	d3/a3-a4,-(sp)
	move.w	d0,d3		* wx
	subq.w	#1,d3		* -1 for dbra
	
	SUPERMODE		* SuperVisor mode
	move.l	d0,-(sp)	* push SSP
	*
	* counter clear
	move.l	a0,a1
	moveq.l	#0,d1		* l.w=code , h.w=count
	move.w	#256/times-1,d0
LL0:	rept	times
	move.l	d1,(a1)+	* code:count
	addq.l	#1,d1		* code No.
	endm
	dbra	d0,LL0
	*
	* count on TVRAM
	move.l	a2,a1		* plane 0
	add.l	#TPSIZE,a2	* plane 1
LL1:
	move.l	a1,a3
	move.l	a2,a4
	move.w	d3,d1		* wx
LL2:
	moveq.l	#0,d0		* for word
	move.b	(a3)+,d0	* plane 0
	or.b	(a4)+,d0	* plane 1
	add.w	d0,d0
	add.w	d0,d0		* code*4
	addq.w	#1,(a0,d0.w)	* count+1
	dbra	d1,LL2
	lea	TX(a1),a1
	lea	TX(a2),a2
	dbra	d2,LL1
	*
	move.l	(sp)+,a1	* pop SSP
	USERMODE		* to user mode
	movem.l	(sp)+,d3/a3-a4
	rts

************************************************************
