	opt	l+

	incdir   	"vd0:include/"
	


	include	intuition/intuition.i
	include	intuition/intuition_lib.i
        	include 	exec/memory.i
	include	exec/exec_lib.i
	include	graphics/graphics_lib.i
	include	graphics/text.i
	include	libraries/dos_lib.i
	include	libraries/dos.i
	include	"misc/easystart.i"
	
	jmp	Start

PRINT	macro
	move	#\1,d0	
	move	#\2,d1	
	move.l	_Window,a1
	move.l	wd_RPort(a1),a1
	CALLGRAF	Move		
	move	#\3,d0	
	move.l	_Window,a1
	move.l	wd_RPort(a1),a1
	CALLGRAF	SetAPen
	lea	\4,a0	
	move.l	#\5,d0	
	move.l	_Window,a1		
	move.l	wd_RPort(a1),a1	
	CALLGRAF	Text
	endm

OpenThem	lea	dosname(pc),a1
	moveq.l	#0,d0
	CALLEXEC 	OpenLibrary
	move.l	d0,_DOSBase	
	lea	intname(pc),a1                 
	moveq.l	#0,d0		
	CALLEXEC 	OpenLibrary
	move.l	d0,_IntuitionBase  
	lea	grafname(pc),a1
	moveq.l	#0,d0
	CALLEXEC 	OpenLibrary
	move.l	d0,_GfxBase
	rts
_DOSBase	dc.l	0
dosname	DOSNAME
_GfxBase	dc.l	0
grafname	GRAFNAME
_IntuitionBase	dc.l	0
intname	INTNAME

_NewWindow	dc.w	300,100,160,45
	dc.b	1,2
	dc.l	CLOSEWINDOW!GADGETUP!MENUPICK
	dc.l	WINDOWCLOSE!ACTIVATE!WINDOWDRAG!WINDOWDEPTH
	dc.l	Gadget1
	dc.l	0,Title
	dc.l	0,0
	dc.w	0,0,0,0
	dc.w	WBENCHSCREEN
Title	dc.b	"FMC by RF",0
Gadget1	dc.l	0
	dc.w	9,13,32,30
	dc.w	GADGHCOMP!GADGHIMAGE!GADGIMAGE,RELVERIFY!TOGGLESELECT,BOOLGADGET
	dc.l	Image1,Image2,0,0,0
	dc.w	1
	dc.l	0
Image1	dc.w	0,0,32,30,2
	dc.l	Data1
	dc.b	1+2,0
	dc.l	0
Image2	dc.w	0,0,32,30,2
	dc.l	Data2
	dc.b	1+2,0
	dc.l	0
Font	dc.l	FName
	dc.w	TOPAZ_EIGHTY
	dc.b	FS_NORMAL
	dc.b	FPF_ROMFONT
FName	dc.b	"topaz.font",0

_Window	dc.l	0
	
Start	bsr	OpenThem
	lea.l	_NewWindow(pc),a0
	CALLINT	OpenWindow
	move.l	d0,_Window
	beq	exit
	jsr	Init
	lea.l	Font(pc),a0
	CALLGRAF	OpenFont
	move.l	_Window,a1
	move.l	wd_RPort(a1),a1
	move.l	d0,a0
	CALLGRAF	SetFont


wait	PRINT	50,20,2,Text1,4
	PRINT	50,30,3,Text2,4
	PRINT	50,40,3,Text3,4
	moveq	#MEMF_PUBLIC,d1 
	CALLEXEC 	AvailMem		
       	move.l  	d0,d2 
	lea	buffer,a0	
	bsr	ASCII
	PRINT	90,20,1,buffer,8
	moveq	#MEMF_FAST,d1 
	CALLEXEC 	AvailMem		
       	move.l  	d0,d2 
	lea	buffer,a0	
	bsr	ASCII
	PRINT	90,30,1,buffer,8
	moveq	#MEMF_CHIP,d1 
	CALLEXEC 	AvailMem		
       	move.l  	d0,d2 
	lea	buffer,a0	
	bsr	ASCII
	PRINT	90,40,1,buffer,8

	move.l	_Window,a0
	move.l	wd_UserPort(a0),a0
	CALLEXEC	GetMsg
	tst.l	d0
	bne	Message
	move.l	#30,d1
	CALLDOS	Delay
	bra	wait
Message	move.l	d0,a1
	move.l	im_Class(a1),d4
	CALLEXEC	ReplyMsg
	cmp.l	#MENUPICK,d4
	beq	Menue
	cmp.l	#CLOSEWINDOW,d4
	bne	Change
	move.l	_Window,a0
	CALLINT	CloseWindow
	jsr	Reset
exit	moveq	#0,d0
	rts
Change	eor.b	#$ff,FM_Flag
	bra	wait





ASCII	clr.b	d3	
	moveq	#7,d0	
	lea	buffer,a0	
	lea	pwrof10,a1	
nex	moveq	#'0',d1	
dec	addq	#1,d1	
	sub.l	(a1),d2	
	bcc.s	dec	
	subq	#1,d1	
	add.l	(a1),d2	
	move.b	d1,(a0)+	
	lea	4(a1),a1	
	dbra	d0,nex
	moveq	#6,d0	
	lea	buffer,a0
rep	cmp.b	#'0',(a0)
	bne	done
	move.b	#' ',(a0)+
	dbra	d0,rep	
done	rts

pwrof10	dc.l	10000000
	dc.l	1000000
	dc.l	100000
	dc.l	10000
	dc.l	1000
	dc.l	100
	dc.l	10
	dc.l	1
buffer	ds.b	10


Text1	dc.b	"RAM "
Text2	dc.b	"Fast"
Text3	dc.b	"Chip"
Init	move.l	4,a6
	move.l	_LVOAvailMem+2(a6),NAvM+2
	move.l	#NewAvailMem,_LVOAvailMem+2(a6)
	move.l	_LVOAllocMem+2(a6),NAcM+2
	move.l	#NewAllocMem,_LVOAllocMem+2(a6)
	rts
Reset	move.l	4,a6
	move.l	NAvM+2,_LVOAvailMem+2(a6)
	move.l	NAcM+2,_LVOAllocMem+2(a6)
	rts

FM_Flag	dc.b	0
	even
NewAvailMem	tst.b	FM_Flag
	beq.s	NAvM
	btst	#2,d1
	bne	NAvM2
	or.b	#%11,d1
NAvM	jmp	0
NAvM2	moveq.l	#0,d0
	rts

NewAllocMem	tst.b	FM_Flag
	beq.s	NAcM
	btst	#2,d1
	bne	NAvM2
	or.b	#%11,d1
NAcM	jmp	0


	



Menue	CALLEXEC	Forbid		
	move.l	_Window,a0
	cmp.w	#20,wd_Height(a0)
	bls	MakeBig		;  stretch window to normal size  
	moveq.l	#0,d0
	move.w	#10,d1
	sub.w	wd_Height(a0),d1
	CALLINT	SizeWindow
	CALLEXEC	Permit
	bra	wait
MakeBig	move.l	_Window,a0		;crunch window to min. size
	moveq.l	#0,d0
	move.w	wd_TopEdge(a0),d1
	neg.w	d1
	CALLINT	MoveWindow		; move window to top (to have enough room)
	move.l	_Window,a0
	moveq.l	#0,d0
	move.w	#35,d1
	CALLINT	SizeWindow		; resize window
	CALLEXEC	Permit
	move.l	#10,d1		; Intuition needs time to understand it 
	CALLDOS	Delay		; (don't ask me why !)
	bra	wait


	section	"data",DATA_C

Data1	dc.b $ff,$ff,$ff,$ff,$c0,$00,$00,$03,$c0,$79,$f0,$03,$c0,$cd,$98,$03
	dc.b $c0,$cd,$98,$03,$c0,$79,$98,$03,$c0,$00,$00,$03,$c0,$03,$c0,$03
	dc.b $c0,$07,$e0,$03,$c0,$07,$e0,$03,$c0,$03,$c0,$03,$c0,$03,$c0,$03
	dc.b $c0,$07,$e0,$03,$c0,$0b,$d0,$03,$c0,$13,$c8,$03,$c0,$13,$c8,$03
	dc.b $c0,$08,$10,$03,$c0,$07,$e0,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$01,$c7,$03
	dc.b $c1,$e3,$0c,$03,$c3,$37,$9e,$03,$c3,$33,$0c,$03,$c1,$e3,$0c,$03
	dc.b $c0,$00,$00,$03,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$28,$00,$03,$c0,$57,$c0,$03,$c0,$2f,$e0,$03,$c0,$17,$e0,$03
	dc.b $c0,$2b,$c0,$03,$c0,$17,$c0,$03,$c0,$2b,$c0,$03,$c0,$17,$e0,$03
	dc.b $c0,$2f,$f0,$03,$c0,$0f,$f0,$03,$c0,$07,$e0,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$ff,$ff,$ff,$ff
	
Data2	dc.b $ff,$ff,$ff,$ff,$c0,$00,$00,$03,$c0,$79,$f0,$03,$c0,$cd,$98,$03
	dc.b $c0,$cd,$98,$03,$c0,$79,$98,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$07,$e0,$03,$c0,$08,$10,$03,$c0,$13,$c8,$03,$c0,$13,$c8,$03
	dc.b $c0,$0b,$d0,$03,$c0,$07,$e0,$03,$c0,$03,$c0,$03,$c0,$03,$c0,$03
	dc.b $c0,$07,$e0,$03,$c0,$07,$e0,$03,$c0,$03,$c0,$03,$c0,$01,$c7,$03
	dc.b $c1,$e3,$0c,$03,$c3,$37,$9e,$03,$c3,$33,$0c,$03,$c1,$e3,$0c,$03
	dc.b $c0,$00,$00,$03,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$07,$e0,$03
	dc.b $c0,$0f,$f0,$03,$c0,$2f,$f0,$03,$c0,$17,$e0,$03,$c0,$2b,$c0,$03
	dc.b $c0,$17,$c0,$03,$c0,$2b,$c0,$03,$c0,$17,$e0,$03,$c0,$2f,$e0,$03
	dc.b $c0,$57,$c0,$03,$c0,$28,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
	dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$ff,$ff,$ff,$ff

