;**************************************************************************
;**
;** dsk_Disk.asm
;** Copyright (c) 1995,1996 Daniel Kahlin <tlr@stacken.kth.se>
;**
;******



;**************************************************************************
;**
;** SaveFile
;**
;** Carry=0 OK! 
;**
;******
SaveFile:
	lda	#1
	ldx	BUFFER+HEADER_DEVICE
	ldy	#1
	jsr	$ffba

	ldx	#<[BUFFER+HEADER_FILENAME]
	ldy	#>[BUFFER+HEADER_FILENAME]
	jsr	mySetNam

	lda	modeflags
	and	#MODEF_TURBO
	beq	sf_noturbo
	jmp	SaveFileFast
sf_noturbo:
	jmp	SaveFileSlow

;**************************************************************************
;**
;** LoadFile
;**
;** Carry=0 OK! 
;**
;******
LoadFile:

	lda	#1
	ldx	BUFFER+HEADER_DEVICE
	ldy	#0
	jsr	$ffba

	ldx	#<[BUFFER+HEADER_FILENAME]
	ldy	#>[BUFFER+HEADER_FILENAME]
	jsr	mySetNam

	lda	modeflags
	and	#MODEF_TURBO
	beq	lf_noturbo
	lda	BUFFER+HEADER_FILENAME
	cmp	#"$"
	beq	lf_noturbo
	jmp	LoadFileFast
lf_noturbo:
	jmp	LoadFileSlow




;**************************************************************************
;**
;** SaveFileSLOW
;**
;** Carry=0 OK! 
;**
;******
SaveFileSlow:
	IFNCONST NOCOLOR
	lda	#SAVECOLOR
	sta	$d020
	ENDIF

	IFCONST CARTRIDGE
	jsr	disk_installgetmem
	ENDIF

	lda	#$00
	sta	$90

	lda	#$61
	sta	$b9
	jsr	$f3d5	;iec-open
	lda	$ba	;enhets num
	jsr	$ed0c	;listen
	lda	$b9
	jsr	$edb9	;lsnsek
	lda	#<FileBufferStart
	sta	currzp
	lda	#>FileBufferStart
	sta	currzp+1

sf_lp2:
	ldy	#0
	IFNCONST CARTRIDGE
	sei
	ldx	#$34
	stx	$01
	lda	(currzp),y
	ldx	#$37
	stx	$01
	cli
	ELSE
	sei
	ldx	#$34
	jsr	disk_getmem
	cli
	ENDIF

	jsr	$eddd

	lda	$90
	and	#%10000011
	bne	sf_fl1

	inc	currzp
	bne	sf_skp2
	IFNCONST NOCOLOR
	lda	$d020
	eor	#$8
	sta	$d020
	ENDIF
	inc	currzp+1
sf_skp2:
	lda	currzp
	cmp	endzp
	bne	sf_lp2
	lda	currzp+1
	cmp	endzp+1
	bne	sf_lp2

	jsr	$edfe	;unlsn
	jsr	$f642	;iec-close
	clc
	rts

sf_fl1:
	jsr	$edfe	;unlsn
	jsr	$f642	;iec-close
	sec
	rts

;**************************************************************************
;**
;** Load file to buffer...SLOW
;**
;** Carry=0 OK! 
;**
;******
LoadFileSlow:
	IFNCONST NOCOLOR
	lda	#LOADCOLOR
	sta	$d020
	ENDIF

	lda	#$00
	sta	$90

	lda	#$60
	sta	$b9
	jsr	$f3d5
	lda	$ba
	jsr	$ffb4
	lda	$b9
	jsr	$ff96


	lda	#<FileBufferStart
	sta	currzp
	lda	#>FileBufferStart
	sta	currzp+1

lf_lp2:
	jsr	$ffa5
	tay

	lda	$90
	and	#%10000011
	bne	lf_fl1	

	tya
	sei
	IFNCONST CARTRIDGE
	ldx	#$34
	ELSE
	ldx	#$33
	ENDIF
	stx	$01
	ldy	#0
	sta	(currzp),y
	ldx	#$37
	stx	$01
	cli

	inc	currzp
	bne	lf_skp2

	IFNCONST NOCOLOR
	lda	$d020
	eor	#$8
	sta	$d020
	ENDIF
	inc	currzp+1
lf_skp2:

	bit	$90
	bvc	lf_lp2

	lda	currzp
	sta	endzp
	lda	currzp+1
	sta	endzp+1

	jsr	$ffab
	jsr	$f642
	clc
	rts
lf_fl1:
	jsr	$ffab
	jsr	$f642
	sec
	rts



;**************************************************************************
;**
;** Get Dosmessage...
;** Puts it in FileBufferStart, returns size in Y
;******
GetStatus:
	IFNCONST NOCOLOR
	lda	#STATUSCOLOR
	sta	$d020
	ENDIF
	lda	#15
	tay
	ldx	BUFFER+HEADER_DEVICE
	jsr	$ffba
	lda	#0
	jsr	$ffbd
	jsr	$ffc0
	ldx	#15
	jsr	$ffc6
	ldy	#0
gs_lp1:
	jsr	$ffcf
	sta	FileBufferStart,y
	iny
	cmp	#13
	bne	gs_lp1
	lda	#0
	dey
	sta	FileBufferStart,y
	iny
	jsr	$ffe7
	rts


;**************************************************************************
;**
;** Send DiskCommand...
;**
;******
DiskCommand:
	jsr	mySetNam
DiskCommand2:
	IFNCONST NOCOLOR
	lda	#COMMANDCOLOR
	sta	$d020
	ENDIF

;* turbo ? *
	lda	modeflags
	and	#MODEF_TURBO
	beq	dc2_noturbo

;* null filename *
	lda	$b7
	beq	dc2_noturbo

;* format ? *
	ldy	#0
	lda	($bb),y
	cmp	#"N"
	bne	dc2_noturbo

;* if ',' do FastFormat *
	ldy	$b7
	dey
dc2_lp1:
	lda	($bb),y
	cmp	#","
	beq	dc2_turbo
	dey
	bpl	dc2_lp1

;* do normal command *
dc2_noturbo:
	lda	#15
	tay
	ldx	BUFFER+HEADER_DEVICE
	jsr	$ffba
	jsr	$ffc0
	jsr	$ffe7
	clc
	rts

dc2_turbo:
	jmp	TurboFormat

;**************************************************************************
;**
;** My setname
;** x,y nameaddress (points to a null terminated string)
;**
;******
mySetNam:
	stx	currzp
	sty	currzp+1
	ldy	#0
msn_lp1:
	lda	(currzp),y
	beq	msn_skp1
	iny
	bne	msn_lp1
msn_skp1:
	tya
	ldx	currzp
	ldy	currzp+1
	jsr	$ffbd
	rts


	IFCONST CARTRIDGE
;**************************************************************************
;**
;** install get mem
;**
;******
disk_installgetmem:
	ldx	#0
igr_lp1:
	lda	disk_getmemsource,x
	sta	disk_getmem,x
	inx
	cpx	#disk_getmemend-disk_getmem
	bne	igr_lp1
	rts


;**************************************************************************
;**
;** Special get mem
;**
;******
disk_getmemsource:
	RORG	disk_getmemplace
	ECHO	"disk_getmem... ",.
disk_getmem:
	stx	$01
	lda	(currzp),y
	ldx	#$37
	stx	$01
	rts
	ECHO	"... ",.
disk_getmemend:
	REND

	ENDIF

