***************************************************************************
*             /                                                           *
*       _____.__ _                                         .___.          *
*      /    /_____________.  _________.__________.________ |   |________  *
*  ___/____      /    ____|_/         |         /|        \|   ._      /  *
*  \     \/      \    \     \    /    |    :___/Ż|    \    \   |/     /   *
*   \_____________\___/_____/___/_____|____|     |____|\_____________/    *
*     -========================/===========|______\================-      *
*                                                                         *
*   .---.----(*(         GUARDIAN IMAGER SLAVE              )*)---.---.   *
*   `-./                                                           \.-'   *
*                                                                         *
*                         (c)oded by StingRay                             *
*                         --------------------                            *
*                            September 2018                               *
*                                                                         *
*                                                                         *
***************************************************************************

***********************************
** History			***
***********************************

; 2022-06-06	- simplified for RawDIC 6.0
;
; 25-Sep-2018	- changed text to mention "Data Disk" so people
;		  won't be confused when installing the game :)
;		- tried to add saving of DOS files (disk.1) using my
;		  generic AmigaDOS imager code but there are problems so
;		  that has to wait until I update the AmigaDOS imager
;		  code

; 24-Sep-2018	- small fixes and checksum added
;		- file saving added

; 23-Sep-2018	- work started


	INCDIR	INCLUDEs:
	INCLUDE	RawDIC.i


	SLAVE_HEADER
	dc.b	6		; Slave version
	dc.b	0		; Slave flags
	dc.l	.disk1		; Pointer to the first disk structure
	dc.l	.text		; Pointer to the text displayed in the imager window


	dc.b	"$VER: "
.text	dc.b	"Guardian Data Disk imager V2.0",10
	dc.b	"by StingRay/[S]carab^Scoopex "
	dc.b	"(06.06.2022)",0
	CNOP	0,4

.disk1	dc.l	0		; Pointer to next disk structure
	dc.w	1		; Disk structure version
	dc.w	DFLG_NORESTRICTIONS		; Disk flags
	dc.l	tracks		; List of tracks which contain data
	dc.l	0		; UNUSED, ALWAYS SET TO 0!
	dc.l	FL_NOFILES
	dc.l	0		; Table of certain tracks with CRC values
	dc.l	0		; Alternative disk structure, if CRC failed
	dc.l	0		; Called before a disk is read
	dc.l	SaveFiles	; Called after a disk has been read


tracks	TLENTRY	159,0,$1800,SYNC_STD,DecodeTrack
	TLEND

; d0.w: track
; a0.l: MFM buffer
; a1.l: destination
; a5.l: rawdic

DecodeTrack
	addq.w	#2,a0

	move.l	a1,a3

	lea	$1808(a0),a2
	move.l	#$55555555,d2
	move.w	#$1800/4-1,d7
.loop	bsr.b	.decode
	move.l	d0,(a1)+
	dbf	d7,.loop

	addq.w	#4,a0			; skip unused data
	addq.w	#4,a2			; =""=

; decode checksum
	bsr.b	.decode			; -> d0.l: checksum (wanted)

	moveq	#0,d1
	move.w	#$1800/4-1,d3
.loop2	move.l	(a3)+,d4
	addx.l	d4,d1
	dbf	d3,.loop2
	moveq	#-1,d2
	sub.l	d1,d2

	cmp.l	d0,d2
	beq.b	.ok
	moveq	#IERR_CHECKSUM,d0
	rts


.ok	moveq	#IERR_OK,d0
	rts

.decode	move.l	(a0)+,d0
	and.l	d2,d0
	add.l	d0,d0
	move.l	(a2)+,d1
	and.l	d2,d1
	or.l	d1,d0
	rts


; directory is on track 159
; format:
; 00: dc.l ID (GUARD)
; 04: dc.w number of files
; 06: dc.w ?
; 08: dc.l ?
; 12: start of file entries 



SaveFiles
	move.w	#159,d0
	jsr	rawdic_ReadTrack(a5)

	move.w	4(a1),d5		; number of files
	lea	12(a1),a4		; start of file entries
.loop	move.w	$24(a4),d7		; track
	moveq	#0,d6
	move.w	$26(a4),d6		; offset

	mulu.w	#$1800,d7
	add.l	d6,d7
	move.l	d7,d0			; offset
	move.l	$20(a4),d1		; size
	move.l	a4,a0			; file name
	jsr	rawdic_SaveDiskFile(a5)

	add.w	#40,a4			; next file

	subq.w	#1,d5
	bne.b	.loop
	moveq	#IERR_OK,d0
	rts

	
