; SpinDizzy Worlds HD installer by Keith Krellwitz
; updated to include JOYPAD support by Kyzer/CSG
	include	jst.i

	HD_PARAMS "sdw.d",STD_DISK_SIZE,1

	lea	trainer(pc),a1
	tst.l	d0
	sne.b	(a1)
	lea	joypad(pc),a1
	tst.l	d2
	sne.b	(a1)

	Mac_printf 	"Spindizzy Worlds Loader v1.1\nProgrammed by Keith Krellwitz (Abaddon) ©1997\nUpdated by Kyzer in 1999"
	tst.l	d0
	beq.s	.notrn
	Mac_printf	"Trainer activated"
.notrn	tst.l	d2
	beq.s	.nojoy
	Mac_printf	"Joypad mode active"
.nojoy

	JSRABS	LoadDisks

	moveq	#0,d0
	moveq	#-1,d1
	JSRABS	Degrade
	GO_SUPERVISOR
	SAVE_OSDATA	$80000

	moveq	#0,d0
	moveq	#0,d1
	moveq	#1,d2
	moveq	#0,d3
	lea	$5c40,a0
	JSRGEN	ReadRobSectors		; load bootblock

	PATCHUSRJMP	$5c6e,patch1	; patch us in
	JSRGEN	FlushCachesHard
	jmp	$5c4c			; run bootblock


patch1	PATCHGENJMP	$47168,ReadRobSectors
	PATCHUSRJMP	$470a0,patch2
	JSRGEN	FlushCachesHard
	jmp	$47014

patch2	PATCHUSRJMP	$41af0,diskio
	PATCHUSRJMP	$107f4,keyb
	PATCHUSRJMP	$11D28,patch3
	move.w	#$6030,$19ffa

	move.l	d1,-(sp)
	; add trainer if wanted
	move.b	trainer(pc),d1
	beq.s	.notrn
	PATCH_NOPNOP	$10EB0
	PATCH_NOPNOP	$10EB4
	PATCH_NOPNOP	$10ED6
	PATCH_NOPNOP	$10EDA
	PATCH_NOPNOP	$1534E
	move.w	#$603a,$15352
.notrn	move.l	(sp)+,d1

	JSRGEN	ResetSprites
	JSRGEN	FlushCachesHard
	jmp	$1001c


patch3	lea	$616e8,a5
	lea	$7fffe,sp
	move.l	#$18954,-(sp)
	move.l	#$18970,-(sp)
	move.l	#$cc0c62c0,$63b9c
	JSRGEN	FlushCachesHard
	rts

;---------------------
diskio	cmpi.w	#$3D3,d1
	beq.s	.savef
	JSRGEN	ReadRobSectors		; normal load
	JSRGEN	FlushCachesHard
	rts
.savef	movem.l	d0-d7/a0-a6,-(sp)	; savefile load/save
	movea.l	a0,a1
	lea	sname(pc),a0
	move.l	#$A00,d1
	moveq	#0,d0
	cmpi.w	#$8001,d3
	beq.s	.save
	JSRGEN	ReadUserFileHD
	bra.s	.done
.save	JSRGEN	WriteUserFileHD
.done	movem.l	(sp)+,d0-d7/a0-a6
	JSRGEN	FlushCachesHard
	rts

;---------------------
keyb	move.b	joypad(pc),d0
	beq.s	.normal		; only if joypad mode is on

 	btst.b	#14-8,$dff016	; test joypad button
	seq.b	d0		; d0 = -1 if pressed, 0 if not
	lea	joystat(pc),a0
 	cmp.b	(a0),d0		; test if joypad button has changed
	beq.s	.normal		; if not, do nothing
	move.b	d0,(a0)		; remember new state

	beq.s	.upkey
	move.w	#$40,d0		; send space keypress
	bra.s	.ok
.upkey	move.w	#$c0,d0		; send space!keyup keypress
	bra.s	.ok

.normal	move.b	$bfed01,d0
	btst	#3,d0
	bne.s	.cont
	jmp	$107ba		; no keys pressed
.cont	move.b	$bfec01,d0
	move.b	#$40,$bfee01
	clr.b	$bfec01
	ror.b	#1,d0
	not.b	d0
	cmpi.b	#$59,d0		; exit if F10 pressed
	bne.s	.ok
	JSRGEN	InGameExit
.ok	jmp	$1081a

joystat	dc.b	0
joypad	dc.b	0
trainer	dc.b	0
sname	dc.b	"save.bin",0
