Save_File_Mode
	move.l	a0,filefix1
	move.l	a1,load_routine
	move.l	a2,a0
	bsr	copy_reqshow
	bsr	do_blank_status
	bsr	reset_system
	move.w	#FRQABSOLUTEXYM!FRQSAVINGM,loadsave
	lea	Filereq,a0
	LIB	filerequester,req
	tst.l	d0
	beq.s	.error
	lea	filereqpath,a0
	lea	savepath,a1
.Alp	cmp.b	#0,(a0)
	beq.s	.Ao
	cmp.b	#'.',(a0)
	bne.s	.Ao1
.ao	move.b	#'.',(a1)+
	move.l	a1,SaveChangeptr
	move.b	#0,(a1)+
	bra.s	.pastname
.ao1	move.b	(a0)+,(a1)+
	bra.s	.Alp			
.pastname
	move.w	#0,status_mode
	move.l	load_routine,a0
	jsr	(a0)
	bra.s	.exit
.error	move.w	#1,status_mode
.exit	bsr	do_status
	bra	takeback_system	

SaveChangePtr	dc.l	0
;---------------------------------------------
save_stuff_mode
	move.l	#savepath,d1
	move.l	#1006,d2
	LIB	open,dos
	move.l	d0,file_handle
	rts
;---------------------------------------------
Load_File	move.l	a0,filefix1
	move.l	a1,load_routine
	move.l	a2,a0
	bsr	copy_reqshow
	bsr	do_blank_status
	bsr	reset_system
	move.l	#30,d0
	bsr	waitframes
	move.w	#FRQABSOLUTEXYM!FRQLOADINGM,loadsave
	lea	Filereq,a0
	LIB	filerequester,req
	tst.l	d0
	beq	.error
	move.w	#0,status_mode
	bsr	load_stuff
	bsr	alloc_disk_fastmem
	bsr	read_stuff
	bsr	close_stuff	

	move.l	load_routine,a0
	jsr	(a0)
	bsr	free_disk_fastmem
	bra.s	.exit
.error	move.w	#1,status_mode
.exit	bsr	do_status
	move.l	#230,d0
	bsr	waitframes
	bra	takeback_system	
;---------------------------------------------
Load_File2	move.l	a0,filefix1
	move.l	a1,load_routine
	move.l	a2,a0
	bsr	copy_reqshow
	bsr	do_blank_status
	bsr	reset_system
	move.l	#30,d0
	bsr	waitframes
	move.w	#FRQABSOLUTEXYM!FRQLOADINGM,loadsave
	lea	Filereq,a0
	LIB	filerequester,req
	tst.l	d0
	beq	.error
	move.w	#0,status_mode
	bsr	load_stuff
	move.l	load_routine,a0
	jsr	(a0)
	bsr	close_stuff	
	bra.s	.exit
.error	move.w	#1,status_mode
.exit	bsr	do_status
	move.l	#230,d0
	bsr	waitframes
	bra	takeback_system	
;---------------------------------------------
Save_File	move.l	a0,filefix1
	move.l	a1,load_routine
	move.l	a2,a0
	bsr	copy_reqshow
	bsr	do_blank_status
	bsr	reset_system
	move.w	#FRQABSOLUTEXYM!FRQSAVINGM,loadsave
	lea	Filereq,a0
	LIB	filerequester,req
	tst.l	d0
	beq.s	.error
	bsr	save_stuff
	move.l	load_routine,a0
	jsr	(a0)
	bsr	close_stuff
	move.w	#0,status_mode
	bra.s	.exit
.error	move.w	#1,status_mode
.exit	bsr	do_status
	bra	takeback_system	
;---------------------------------------------
reset_system
	bsr	waitframe
	bsr	givesystem
	rts
;---------------------------------------------
takeback_system
	bsr	takesystem	
	bsr	waitframe
	rts
;---------------------------------------------
load_stuff	move.l	#filereqpath,d1
	move.l	#1005,d2
	LIB	open,dos
	move.l	d0,file_handle
	tst.l	d0
	beq.s	.out
	move.l	d0,d1
	move.l	#fileinfo,d2
	LIB	examineFH,dos		
.out	rts
;---------------------------------------------
save_stuff	move.l	#filereqpath,d1
	move.l	#1006,d2
	LIB	open,dos
	move.l	d0,file_handle
	rts
;---------------------------------------------
read_stuff	move.l	file_handle,d1
	move.l	file_address,d2
	move.l	fsize,d3
	LIB	read,dos
	move.l	d0,file_length
	rts
;---------------------------------------------
read_stuff2
	move.l	file_handle,d1
	move.l	file_address,d2
	move.l	file_length,d3
	LIB	read,dos
	move.l	d0,file_length
	rts
;---------------------------------------------
write_stuff
	move.l	file_handle,d1
	move.l	file_address,d2
	move.l	file_length,d3
	LIB	write,dos
	move.l	d0,file_length
	rts
;---------------------------------------------
close_stuff
	move.l	file_handle,d1
	LIB	close,dos
	rts
;---------------------------------------------
alloc_disk_fastmem
	move.l	fsize,d0
	move.l	d0,disk_mem
	move.l	#$10001,d1
	LIb	allocmem,exec
	move.l	d0,file_address
	rts

;---------------------------------------------
free_disk_fastmem
	move.l	file_address,a1
	move.l	disk_mem,d0
	LIB	freemem,exec
	rts
;---------------------------------------------
save_gensprites
	move.l	sprite_list,a6
	cmp.l	#-1,(a6)
	bne.s	.okay
	rts
.okay	move.l	#4,file_length
	move.l	#genhead,file_address
	bsr	write_stuff
	move.w	sprite_amount,gensize
	move.w	palettes,gensize+2
	move.l	#4,file_length
	move.l	#gensize,file_address
	bsr	write_stuff				
;---------------------------------------------
	moveq.l	#0,d0		
	move.w	sprite_amount,d0
	lsl.w	#2,d0
	move.l	d0,genlength
	move.l	#$10001,d1
	LIB	allocmem,exec
	move.l	d0,genaddress
;---------------------------------------------
; save sprite header
	move.w	sprite_amount,d7
	subq.w	#1,d7
	move.l	sprite_list,a6
	move.l	genaddress,a5
.loop	move.l	(a6)+,a1
	move.l	spr_size(a1),(a5)+		; size
	dbra	d7,.loop
	move.l	genaddress,file_address
	move.l	genlength,file_length
	bsr	write_stuff
;---------------------------------------------
; save palettes
	move.l	palette_list,a6
.loopA	cmp.l	#-1,(a6)
	beq.s	.next
	move.l	#$300,file_length
	move.l	(a6)+,file_address
	bsr	write_stuff
	bra.s	.loopA
;---------------------------------------------
; save sprites data
.next	move.w	sprite_amount,d7
	subq.w	#1,d7
	move.l	sprite_list,a6
.loop2	move.l	(a6)+,a1
	move.l	spr_size(a1),file_length
	move.l	a1,file_address
	move.l	d7,-(sp)
	bsr	write_stuff
	move.l	(sp)+,d7
	dbra	d7,.loop2			
;---------------------------------------------
	move.l	genlength,d0
	move.l	genaddress,a1
	LIB	freemem,exec
	rts		
;---------------------------------------------
copy_reqshow
	lea	reqshow+2,a1
.lp	cmp.b	#0,(a0)
	beq.s	.out
	move.b	(a0)+,(a1)+
	bra.s	.lp
.out	move.b	#0,(a1)
	rts
;---------------------------------------------
genhead	dc.b	'TOSH'
gensize	dc.l	0
genaddress	dc.l	0
genlength	dc.l	0
