; *** Written by Jean-François Fabre


	include	"/jst/jst.i"

	HD_PARAMS	"katakis.d",STD_DISK_SIZE,1

loader:
	RELOC_MOVEL	D0,trainer

	Mac_printf	"Katakis HD Loader V1.0"
	Mac_printf	"Coded by Jean-François Fabre © 1998"

	RELOC_TSTL	trainer
	beq	skip$

	NEWLINE
	Mac_printf	"Trainer activated"
skip$
	bsr	LoadScores

	JSRABS	LoadDisks

	moveq.l	#0,D0
	move.l	#CACRF_CopyBack,D1
	JSRABS	Degrade

;;	WAIT_LMB

	GO_SUPERVISOR
	SAVE_OSDATA	$80000

	JSRGEN	FreezeAll

	bsr	InstallBoot

	move.w	#$8040,$DFF096
	move	#$2000,SR

	; **** boot stuff and patch

	PATCHGENJMP	$BA.W,InGameExit
	JSRGEN	FlushCachesHard
	moveq	#0,D7

	nop
	nop
	jmp	$C0.W
	nop
	nop

LoadScores:
	moveq.l	#0,D0
	move.l	#200,D1
	lea	hiscname(pc),A0
	lea	hiscbuff(pc),A1
	JSRGEN	ReadUserFileHD
	tst.l	D0
	beq	exit$

	Mac_printf	"** Hi-score file not found"
exit$
	rts

SaveScores:
	moveq.l	#0,D0
	move.l	#200,D1
	lea	hiscname(pc),A0
	lea	hiscbuff(pc),A1
	JSRGEN	WriteUserFileHD
	tst.l	D0
	beq	exit$

	Mac_printf	"** Cannot save hi-score file"
	Mac_printf	"   Hit RETURN to exit"
	JSRABS	WaitReturn
exit$
	rts

InstallBoot:
	JSRGEN	InitTrackDisk
	MOVE	#$0002,28(A1)		;0C: 337C0002001C
	MOVE.L	#$0004EF6C,40(A1)	;12: 237C0004EF6C0028
	MOVE.L	#$00022600,36(A1)	;1A: 237C000226000024
	MOVE.L	#$0008DA00,44(A1)	;22: 237C0008DA00002C
	JSRGEN	TrackLoad

	lea	$4F000,A0
	lea	$C0.W,A1
	lea	$300C0,A2
copy$
	move.l	(A0)+,(A1)+
	cmp.l	A1,A2
	bne.b	copy$

	; hiscore read

	PATCH_RTS	$A60

	; hiscore save

	PATCHUSRJMP	$AFC,StoreHiscores

	; trackload

	PATCHUSRJMP	$1D2FE,ReadAndUnpack
	
	; keyboard

	PATCHUSRJSR	$30C0,KbInt
	move.w	#$C038,$152.W

	; hiscores

	lea	hiscbuff(pc),A0
	lea	$1CA12,A1
	move.w	#79,D0
copy2$
	move.l	(A0)+,(A1)+
	dbf	D0,copy2$

	rts

StoreHiscores:
	STORE_REGS
	lea	hiscbuff(pc),A0
	lea	$1CA12,A1
	move.w	#79,D0
copy2$
	move.l	(A1)+,(A0)+
	dbf	D0,copy2$
	
	lea	SaveScores(pc),A0
	JSRGEN	SetExitRoutine
	
	RESTORE_REGS
	rts

KbInt:
	cmp.b	#$59,D0
	bne	noquit$
	JSRGEN	InGameExit
noquit$
	BEAM_DELAY	#2
	rts

ReadAndUnpack:
	STORE_REGS

	subq.l	#8,D2
	move.l	D2,A0
	mulu	#$1600,D0
	mulu	#$1600,D1
	
	move.l	D0,D2		; offset
	moveq	#0,D0		; disk 1

	JSRGEN	ReadDiskPart

	move.l	A0,A1
	addq.l	#8,A1
	bsr	Decrunch

	RESTORE_REGS
	rts


trainer:
	dc.l	0
ExtBase:
	dc.l	0

hiscname:
	dc.b	"katakis.hisc",0
	cnop	0,4

hiscbuff:
	incbin	"def_hisc.bin"
	blk.l	10,0
Decrunch:
	incbin	"dec_1d770.bin"
	rts
