; Turrican 2 HD loader v1.0 by Kyzer/CSG

	include	jst.i

	HD_PARAMS "Turrican2.d",1085664,1	; 11264+(158*6800)
	Mac_printf "Turrican 2 HD Loader v1.0 © 1998 Kyzer/CSG"
	bsr	loadhiscores
	JSRABS	LoadDisks
	moveq	#0,d0
	move.l	#CACRF_CopyBack,d1
	JSRABS	Degrade
	GO_SUPERVISOR
	SAVE_OSDATA	$80000

	moveq	#0,d0
	move.l	#$800,d1
	move.l	#$400,d2
	move.l	#$60000,a0
	JSRGEN	ReadDiskPart	; D0=0 D1=LENGTH D2=OFFSET A0=LOADADDR

	PATCHUSRJSR $42(a0),intro
	PATCHUSRJMP $c0(a0),main
	PATCHUSRJMP $394(a0),rawloader

	JSRGEN	FlushCachesHard	

	moveq	#0,d0		; 'we found no extension mem' lie
	jmp	(a0)

;--------------------------------------

rawloader
; get rawloader    D0=bytelength  D1=track  D2=trackoffset  A0=loadaddr
; to readdiskpart  D0=0  D1=bytelength  D2=diskfileoffset  A0=loadaddr
	exg.l	d0,d1		; d1 = bytelength, d0=track
	mulu	#6800,d0	; offset = (track*6800)-2336 + trackoffset
	add.l	d0,d2
	sub.l	#2336,d2
	moveq	#0,d0
	JSRGEN	ReadDiskPart	; D0=0 D1=LENGTH D2=OFFSET A0=LOADADDR
	JSRGEN	FlushCachesHard
	rts

; patch the call to run the intro
intro	btst.b	#7,$bfe001	; don't run intro if fire pressed
	beq.s	.done
	jsr	$3010a		; run the intro
.again	cmp.w	#208,$30AE2	; wait for it to end
	bne.s	.again
.done	rts

main	; install patches on mainpart and run it
	PATCHUSRJMP $9e2.w,rawloader
	PATCHUSRJMP $be0.w,loadhi
	PATCHUSRJMP $c5e.w,savehi
	PATCHUSRJMP $6d18.w,keyb
	JSRGEN	FlushCachesHard	
	jmp	$c0.w

;--------------------------------------

keyb	move.b	d0,$249.w
	cmp.b	#$59,d0	; F10 key
	beq.s	.die
	jmp	$6d36.w
.die	JSRGEN	InGameExit


loadhi	move.l	highbuf(pc),a0
	lea	$25e.w,a1
	tst.l	(a0)
	beq.s	.exit
	moveq	#400/4-1,d0
.copy	move.l	(a0)+,(a1)+
	dbra	d0,.copy
.exit	rts

	
savehi	lea	$25e.w,a0
	move.l	highbuf(pc),a1
	moveq	#400/4-1,d0
.cp	move.l	(a0)+,(a1)+
	dbra	d0,.cp
	lea	savehiscores(pc),a0
	JSRGEN	SetExitRoutine
	rts

;--------------------------------------

loadhiscores
	move.l	#400,d0
	JSRABS	AllocExtMem	; easy allocate 400 byte!
	lea	highbuf(pc),a0
	move.l	d0,(a0)

	bsr.s	__hiset
	JSRGEN	ReadUserFileHD
	rts

savehiscores
	bsr.s	__hiset
	JSRGEN	WriteUserFileHD
	rts

__hiset	moveq	#0,d0
	move.l	#400,d1
	lea	hiname(pc),a0
	move.l	highbuf(pc),a1
	rts

highbuf	dc.l	0
hiname	dc.b	'turrican2.hisc',0
