
CUSTOM	EQU	$DFF000
SERDATR	EQU	$018
SERPER	EQU	$032
INTENA	EQU	$09A
INTREQ	EQU	$09C


* it uses the DOS and EXEC libraries
	incdir	"df1:include/"		where to look

	include	exec/exec_lib.i		I want to call EXEC
	include exec/memory.i
	include	libraries/dos_lib.i	and DOS
	include	libraries/dos.i

* start by opening the DOS library
start	lea	dosname,a1
	moveq	#0,d0			any version
	CALLEXEC OpenLibrary
	tst.l	d0
	beq	quit_fast		quit if cant
	move.l	d0,_DOSBase		save pointer

	MOVE.l	#100000,D0		100,000 bytes 100K
	MOVE.l	#MEMF_CHIP,D1		bottom 512K
	CALLEXEC AllocMem
	tst.l	d0
	beq	quit_fast
	lea	MEMORY_START,a0
	move.l	d0,(a0)

*	MOVE.L	D0,A0
*	MOVE	#49999,D0
*CLEARM	MOVE	#$AAAA,(A0)+		RESET MY FREE AREA
*	DBRA	CLEARM

	CALLDOS	Output			Output a string
	move.l	d0,d1			pass handle
	lea	OUT_HANDLE,a0
	move.l	d0,(a0)
	lea	string,a0
	move.l	a0,d2			pass start of data
	move.l	#string_len,d3
	CALLDOS Write

	LEA	CUSTOM,A0
	MOVE	#$4000,INTENA(A0)	DISABLE ALL INTERRUPTS
	MOVE	#372,SERPER(A0)		9600 BAUD, 8 BIT (372-9600)
	MOVE.L	#FILE_LENGTH,D7		FILE LENGTH
	LEA	MEMORY_START,A1
	MOVE.L	(A1),A1			A1 POINTS TO START
	MOVE	#14,D6			BTST NUMBER
	MOVE	SERDATR(A0),D0		TEST FOR REDUNDANT STARTUP DATA
	BTST	D6,D0
	BEQ	FETCH			NO DATA YET
	MOVE	#$0800,INTREQ(A0)	RESET RBF FLAG SO IT SAYS
FETCH	MOVE	SERDATR(A0),D0
	BTST	D6,D0
	BEQ	FETCH			NO DATA YET
	MOVE.B	D0,(A1)+
	MOVE	#$0800,INTREQ(A0)	RESET RBF FLAG SO IT SAYS
	SUBQ.L	#1,D7
	BNE	FETCH			NO DBRA"S
	MOVE	#$C000,INTENA(A0)	PUT INTERRUPTS BACK ON

* open a file
DSAVE	LEA	FILE_NAME,A0
	MOVE.L	A0,D1
	MOVE.L	#MODE_NEWFILE,D2
	CALLDOS	Open
	tst.l	d0
	beq	quit_fast
	LEA	FILE_HANDLE,A0
	MOVE.L	D0,(A0)			SAVE FILE HANDLE
* SAVE SOME DATA - RANDOMLY SELECTED
	LEA 	FILE_HANDLE,A0
	MOVE.L	(A0),D1
	LEA	MEMORY_START,a0
	MOVE.L	(a0),D2		
	ADDQ.l	#1,D2			bodge, hope it works !	
	MOVE.L	#FILE_LENGTH,D3
	CALLDOS	Write
	cmpi.l	#-1,d0
	bne	DSAVEOK
	lea	OUT_HANDLE,a0
	move.l	(a0),d1
	lea	disk_err,a0
	move.l	a0,d2
	move.l	#disk_len,d3
	CALLDOS	Write
	bra	quit_fast
* CLOSE THE FILE
DSAVEOK	LEA	FILE_HANDLE,A0
	MOVE.L	(A0),D1
	CALLDOS	Close

* finished so close DOS library
	move.l	_DOSBase,a1
	CALLEXEC CloseLibrary

quit_fast
	rts				amd finish

dosname	DOSNAME				defines dos name

_DOSBase	DC.L	0		space for pointer
FILE_LENGTH	EQU	85200
FILE_HANDLE	DC.L	0
OUT_HANDLE	DC.L	0
MEMORY_START	DC.L	0
FILE_NAME	DC.B	"DF1:ROLLING.DTA",0
string		DC.B	"TIERTEX TRANSFER PROGRAM",10,13
		DC.B	"(C) 1987 TIERTEX LIMITED",10,13,10,13,10,13
string_len	EQU	*-string
disk_err	DC.B	"*** DISK ERROR ****",10,13
disk_len	EQU	*-disk_err

