;BootKit v1.00 by Zebedee/Area 51 (14-Aug-97)
;First written using Amiga E to create the gadgets easily then
;ReSourced to add the final code that makes it tick!

	SECTION	BootKit2000000,CODE_C

norsk	equ	-1	;-1 for Norwegian, 0 for serious

	bra.b	ProgStart

Version	dc.b	'$VER: BootKit v1.00 (14-Aug-97)',0

ProgStart
	MOVE.L	4.W,A6
	MOVE.L	A0,A5
	MOVE.L	D0,D7
	MOVE.L	#10028,D0
	MOVE.L	#$10000,D1	;MEMF_CLEAR
	MOVE.L	D0,D2
	JSR	-$C6(A6)	;AllocMem(d0,d1)exec
	TST.L	D0
	BNE.S	StartProgram
	MOVEQ	#20,D0
	RTS

StartProgram
	MOVE.L	D0,D6
	ADD.L	D2,D0
	JSR	-$84(A6)	;Forbid()exec
	EXG	D0,SP
	MOVE.L	D0,-(SP)
	ADD.L	#0,SP
	LINK	A4,#-$218
	JSR	-$8A(A6)	;Permit()exec
	MOVE.L	D6,-$40(A4)
	SUB.L	A1,A1
	JSR	-$126(A6)	;FindTask(a1)exec
	MOVE.L	D0,A3
	move.l	d0,MyTask
	TST.L	$AC(A3)
	BNE.S	StartedFromDOS
	LEA	$5C(A3),A0
	JSR	-$180(A6)	;WaitPort(a0)exec
	LEA	$5C(A3),A0
	JSR	-$174(A6)	;GetMsg(a0)exec
	MOVE.L	D0,-$24(A4)
	LEA	lbB000103(PC),A0
	MOVE.L	A0,-$20(A4)
	BRA.S	InitialiseSystem

StartedFromDOS
	MOVE.L	A5,A0
	MOVE.L	D7,D0
	MOVE.L	A0,-$20(A4)
	NOP
	NOP
	NOP
InitialiseSystem
	MOVE.L	A6,-$28(A4)
	LEA	lbC00010A(PC),A0
	MOVE.L	A0,-$18(A4)
	LEA	IntName(PC),A1
	MOVEQ	#$21,D0
	JSR	-$228(A6)	;OpenLibrary(a1,d0)exec
	MOVE.L	D0,-$30(A4)
	BEQ	BadInt
	move.l	d0,IntBAdr
	LEA	GfxName(PC),A1
	MOVEQ	#$21,D0
	JSR	-$228(A6)	;OpenLibrary(a1,d0)exec
	MOVE.L	D0,-$34(A4)
	BEQ	BadGfx
	move.l	d0,GfxBAdr
	LEA	DosName(PC),A1
	MOVEQ	#$21,D0
	JSR	-$228(A6)	;OpenLibrary(a1,d0)exec
	MOVE.L	D0,-$2C(A4)
	BEQ	BadDos
	move.l	d0,DosBAdr
	MOVE.L	D0,A6
	JSR	-$3C(A6)	;Output()dos
	MOVE.L	D0,-8(A4)
	move.l	d0,Output
	JSR	-$36(A6)	;Input()dos
	MOVE.L	D0,-$5C(A4)
	MOVE.L	SP,-4(A4)
	BRA.S	lbC000104

DosName	dc.b	'dos.library',0
IntName	dc.b	'intuition.library',0
GfxName	dc.b	'graphics.library',0
lbB000103
	dc.b	0

lbC000104
	JSR	StartMainProgram.L
lbC00010A
	JSR	ReturnSubroutine.L
	MOVE.L	-4(A4),SP
	TST.L	-12(A4)
	BEQ.S	.skip
	MOVE.L	-$2C(A4),A6
	MOVE.L	-12(A4),D1
	MOVE.L	D1,D4
	MOVEQ	#0,D2
	MOVEQ	#0,D3
	JSR	-$2A(A6)	;Read(d1,d2,d3)dos
	MOVE.L	D4,D1
	JSR	-$24(A6)	;Close(d1)dos
.skip	MOVE.L	4.W,A6
	MOVE.L	-$14(A4),A2
	MOVE.L	A2,D0
	BEQ.S	.error
.loop	MOVE.L	A2,A1
	MOVE.L	4(A2),D0
	MOVE.L	(A2),A2
	JSR	-$D2(A6)	;FreeMem(a1,d0)exec
	MOVE.L	A2,D0
	BNE.S	.loop
.error	MOVE.L	-$2C(A4),A1
	JSR	-$19E(A6)	;CloseLibrary(a1)exec
BadDos	MOVE.L	-$34(A4),A1
	JSR	-$19E(A6)	;CloseLibrary(a1)exec
BadGfx	MOVE.L	-$30(A4),A1
	JSR	-$19E(A6)	;CloseLibrary(a1)exec
BadInt	MOVE.L	-$24(A4),D3
	BEQ.S	lbC000176
	JSR	-$84(A6)	;Forbid()exec
	MOVE.L	D3,A1
	JSR	-$17A(A6)	;ReplyMsg(a1)exec
lbC000176
	MOVE.L	-$1C(A4),D2
	UNLK	A4
	ADD.L	#0,SP
	MOVE.L	#$272C,D0
	MOVE.L	(SP)+,A1
	EXG	A1,SP
	SUB.L	D0,A1
	JSR	-$D2(A6)	;FreeMem(a1,d0)exec
	MOVE.L	D2,D0
	RTS

StartMainProgram
	MOVEQ	#0,D0
	MOVE.L	D0,-$218(A4)
	MOVEQ	#-1,D0
	MOVE.L	D0,-$208(A4)
	MOVEQ	#-1,D0
	MOVE.L	D0,-$210(A4)
	MOVEQ	#-1,D0
	MOVE.L	D0,-$20C(A4)
	BSR	SetReturnCode
	BSR	MainProgramLoop
	MOVE.L	D0,-$1C(A4)
	RTS

HandleGadgetEvents
	LINK	A5,#-4
	MOVE.L	$10(A5),A0
	MOVE.W	$26(A0),D0
	EXT.L	D0
	MOVE.L	D0,-4(A5)
	MOVEQ	#0,D0
	CMP.L	-4(A5),D0
	BNE	DisplayText_Read
	LEA	ItemSelected(PC),A0
	MOVE.L	A0,-(SP)
	LEA	-4(SP),SP
	MOVE.L	12(A5),D0
	MOVE.L	D0,(SP)
	PEA	4
	BSR	PrintText
	LEA	12(SP),SP
	MOVEQ	#0,D0
	CMP.L	12(A5),D0
	BNE.S	lbC000214
	LEA	OutDF0(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA.S	lbC000270

lbC000214
	MOVEQ	#1,D0
	CMP.L	12(A5),D0
	BNE.S	lbC000234
	LEA	OutDF1(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA.S	lbC000270

lbC000234
	MOVEQ	#2,D0
	CMP.L	12(A5),D0
	BNE.S	lbC000254
	LEA	OutDF2(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA.S	lbC000270

lbC000254
	MOVEQ	#3,D0
	CMP.L	12(A5),D0
	BNE.S	lbC000270
	LEA	OutDF3(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
lbC000270
	BRA	DisplayText_Unknown

DisplayText_Read
	MOVEQ	#2,D0
	CMP.L	-4(A5),D0
	BNE.S	DisplayText_Write
	bsr	OpenTrackDisk
	tst.l	d0
	bne	Err_TrackDiskNotOpen
	bsr	ReadBootblock
	tst.l	d0
	bne.b	Err_UnableToReadBootblock
	bsr	StopDriveCloseTD
	BRA	DisplayText_Unknown

Err_UnableToReadBootblock
	bsr	StopDriveCloseTD
	lea	ReqBody_ErrReadBootblock(pc),a0
	bsr	DisplayRequester
	bra	DisplayText_Unknown

ReqBody_ErrReadBootblock
	dc.l	$14,0
	dc.l	ReqTitle_ErrReadBootblock
	dc.l	ReqMain_ErrReadBootblock
	dc.l	ReqButtons_ErrReadBootblock

ReqTitle_ErrReadBootblock
	dc.b	'Error...',0
ReqMain_ErrReadBootblock
	dc.b	'Unable to read the bootblock!',0
ReqButtons_ErrReadBootblock
	dc.b	'Ok',0
	even

DisplayText_Write
	MOVEQ	#3,D0
	CMP.L	-4(A5),D0
	BNE	DisplayText_GadString
	bsr	OpenTrackDisk
	tst.l	d0
	bne.b	Err_TrackDiskNotOpenW
	bsr	WriteBootblock
	tst.l	d0
	bne.b	Err_UnableToWriteBootblock
	bsr	StopDriveCloseTD
	BRA	DisplayText_Unknown

Err_UnableToWriteBootblock
	bsr	StopDriveCloseTD
	lea	ReqBody_ErrWriteBootblock(pc),a0
	bsr	DisplayRequester
	bra	DisplayText_Unknown

ReqBody_ErrWriteBootblock
	dc.l	$14,0
	dc.l	ReqTitle_ErrWriteBootblock
	dc.l	ReqMain_ErrWriteBootblock
	dc.l	ReqButtons_ErrWriteBootblock

ReqTitle_ErrWriteBootblock
	dc.b	'Error...',0
ReqMain_ErrWriteBootblock
	dc.b	'Unable to write the bootblock!',0
ReqButtons_ErrWriteBootblock
	dc.b	'Ok',0
	even

Err_TrackDiskNotOpenR
	bsr.b	Err_TrackDiskNotOpen
	bra	DisplayText_Unknown

Err_TrackDiskNotOpenW
	bsr.b	Err_TrackDiskNotOpen
	bra	DisplayText_Unknown

Err_TrackDiskNotOpen
	lea	ReqBody_ErrTrackDiskNotOpen(pc),a0
	bsr	DisplayRequester
	rts

ReqBody_ErrTrackDiskNotOpen
	dc.l	$14,0
	dc.l	ReqTitle_ErrTrackDiskNotOpen
	dc.l	ReqMain_ErrTrackDiskNotOpen
	dc.l	ReqButtons_ErrTrackDiskNotOpen

ReqTitle_ErrTrackDiskNotOpen
	dc.b	'Error...',0
ReqMain_ErrTrackDiskNotOpen
	dc.b	'Unable to open trackdisk.device',0
ReqButtons_ErrTrackDiskNotOpen
	dc.b	'Ok',0
	even

DisplayText_GadString
	MOVEQ	#1,D0
	CMP.L	-4(A5),D0
	BNE.S	DisplayText_Load
	MOVE.L	-8(A4),D1
	MOVE.L	D2,A0
	LEA	GadgetString(PC),A0
	MOVE.L	A0,-(SP)
	LEA	-4(SP),SP
	MOVE.L	$10(A5),A0
	MOVE.L	$22(A0),A0
	MOVE.L	(A0),D0
	MOVE.L	D0,(SP)
	PEA	4
	bsr.s	FormatText
	LEA	12(SP),SP
	BRA	DisplayText_Unknown

FormatText
	LEA	8(SP),A1
	MOVE.L	4(SP),D0
	MOVE.L	8(SP,D0.L),A0
	LEA	lbC0014F2(PC),A2
	MOVE.L	4.W,A6
	MOVE.L	-$40(A4),A3
	MOVE.L	A3,D2
	JSR	-$20A(A6)	;RawDoFmt(a0,a1,a2,a3)exec
	MOVE.L	-8(A4),D1
	MOVE.L	D2,A0
	move.l	d2,StringBuffer
;.loop	TST.B	(A0)+
;	BNE	.loop
;	SUB.L	D2,A0
;	MOVE.L	D3,A3
;	MOVE.L	A0,D3
;	SUBQ.L	#1,D3
;	MOVE.L	-$2C(A4),A6
;	JSR	-$30(A6)	;Write(d1,d2,d3)dos
;	MOVE.L	D3,D0
;	MOVE.L	A3,D3
	RTS

DisplayText_Load
	MOVEQ	#4,D0
	CMP.L	-4(A5),D0
	BNE.S	DisplayText_Save
	bsr	LoadBootblock
	BRA.S	DisplayText_Unknown

DisplayText_Save
	MOVEQ	#5,D0
	CMP.L	-4(A5),D0
	BNE.S	DisplayText_Run
	bsr	SaveBootblock
	BRA.S	DisplayText_Unknown

DisplayText_Run
	MOVEQ	#6,D0
	CMP.L	-4(A5),D0
	BNE.S	DisplayText_About
	lea	ReqBody_Run(pc),a0
	bsr	DisplayRequester
	LEA	8(SP),SP
	BRA.S	DisplayText_Unknown

ReqBody_Run
	dc.l	$14,0
	dc.l	ReqTitle_Run
	dc.l	ReqMain_Run
	dc.l	ReqButtons_Run

ReqTitle_Run
	dc.b	'Notice...',0
ReqMain_Run
	ifne	norsk
	dc.b	'Nei du rasshøle!',0
	else
	dc.b	'Not yet implemented!',0
	endc
ReqButtons_Run
	dc.b	'Ok',0

DisplayText_About
	MOVEQ	#7,D0
	CMP.L	-4(A5),D0
	BNE.S	DisplayText_Unknown
	lea	ReqBody_About(pc),a0
	bsr	DisplayRequester
DisplayText_Unknown
	MOVEQ	#0,D0
	UNLK	A5
	RTS

ReqBody_About
	dc.l	$14,0
	dc.l	ReqTitle_About
	dc.l	ReqMain_About
	dc.l	ReqButtons_About

ReqTitle_About
	dc.b	'About...',0
ReqMain_About
	dc.b	'BootKit v1.00 (14-Aug-97)',$a
	dc.b	'By Zebedee/Area 51',$a,$a
	dc.b	'Preview copy - not for release!',$a,$a
	dc.b	'©1997 An Area 51 Production!',0
ReqButtons_About
	dc.b	'Ok',0
	even

SizeWindow
	LINK	A5,#0
	MOVE.L	-$210(A4),D0
	BEQ.S	ExpandWindow
	MOVEQ	#0,D0
	MOVE.L	D0,-$210(A4)
	MOVE.L	-$218(A4),A0
	MOVEQ	#0,D0
	MOVEQ	#-$5d,D1
	MOVE.L	-$30(A4),A6
	JSR	-$120(A6)	;SizeWindow(a0,d0,d1)int
	BRA.S	Exit_SizeWindow

ExpandWindow
	MOVEQ	#-1,D0
	MOVE.L	D0,-$210(A4)
	MOVE.L	-$218(A4),A0
	MOVEQ	#0,D0
	MOVEQ	#$5d,D1
	MOVE.L	-$30(A4),A6
	JSR	-$120(A6)	;SizeWindow(a0,d0,d1)int
	bsr	DrawGraphicData
Exit_SizeWindow
	MOVEQ	#0,D0
	UNLK	A5
	RTS

CreateGadgets
	LINK	A5,#-8
	MOVE.L	$10(A5),A0
	MOVE.L	-$204(A4),A6
	JSR	-$72(A6)	;CreateContext(a0)gadtools
	MOVE.L	D0,-8(A5)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	lbL00064C(PC),A0
	MOVE.L	A0,D0
	BRA.S	CreateGadget_Drive

lbL00064C
	dc.w	71,30
	dc.w	97,12
	dc.l	GadList0
	dcb.l	4,0
	dc.w	0

CreateGadget_Drive
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#7,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	Drive_CycleText(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC0006B0

Drive_CycleText
	dc.l	DF0,DF1,DF2,DF3,0

lbC0006B0
	MOVE.L	D0,-(SP)
	LEA	lbL0006BE(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC0006DA

lbL0006BE
	dc.l	$8008000E,0		;GTCY_LABELS
	dc.l	$8008000F,0		;GTCY_ACTIVE,0
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC0006DA
	MOVE.L	(SP)+,4(A0)
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_Read(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC00073C

Gadget_Read
	dc.w	170,30
	dc.w	56,12
	dc.l	GadRead
	dc.l	0
	dc.l	$20000
	dcb.l	2,0
	dc.w	0

lbC00073C
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#1,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	lbL00076E(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC00077A

lbL00076E
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC00077A
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,8(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_Write(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC0007DA

Gadget_Write
	dc.w	228,30
	dc.w	56,12
	dc.l	GadWrite
	dc.l	0
	dc.l	$30000
	dcb.l	2,0
	dc.w	0

lbC0007DA
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#1,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	lbL00080C(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC000818

lbL00080C
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC000818
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,12(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_File(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC000878

Gadget_File
	dc.w	71,43
	dc.w	213,13
	dc.l	GadFile
	dc.l	0
	dc.l	$10000
	dcb.l	2,0
	dc.w	0

lbC000878
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#12,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	StringGadget_DefaultText(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC0008C6

StringGadget_DefaultText
	dc.l	$8008002D,DefaultText	;GTST_STRING
	dc.l	$8008002E,$32		;GTST_MAXCHARS
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC0008C6
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,4(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_Load(PC),A0
	MOVE.L	A0,D0
	BRA.S	lbC000926

Gadget_Load
	dc.w	71,57
	dc.w	105,13
	dc.l	GadLoad
	dc.l	0
	dc.l	$40000
	dcb.l	2,0
	dc.w	0

lbC000926
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#1,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	lbL000958(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000964

lbL000958
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC000964
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,$10(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_Save(PC),A0
	MOVE.L	A0,D0
	BRA	lbC0009C4

Gadget_Save
	dc.w	178,57
	dc.w	105,13
	dc.l	GadSave
	dc.l	0
	dc.l	$50000
	dcb.l	2,0
	dc.w	0

lbC0009C4
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#1,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	lbL0009F6(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000A02

lbL0009F6
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC000A02
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,$14(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_Run(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000A62

Gadget_Run
	dc.w	71,71
	dc.w	105,13
	dc.l	GadRun
	dc.l	0
	dc.l	$60000
	dcb.l	2,0
	dc.w	0

lbC000A62
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#1,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	lbL000A94(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000AA0

lbL000A94
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC000AA0
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,$18(A0)
	MOVE.L	-$214(A4),D0
	MOVE.L	D0,-(SP)
	MOVE.L	12(A5),D0
	MOVE.L	D0,-(SP)
	LEA	Gadget_About(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000B00

Gadget_About
	dc.w	178,71
	dc.w	105,13
	dc.l	GadAbout
	dc.l	0
	dc.l	$70000
	dcb.l	2,0
	dc.w	0

lbC000B00
	MOVE.L	(SP)+,$16(A0)
	MOVE.L	(SP)+,12(A0)
	MOVE.L	D0,-4(A5)
	LEA	-$10(SP),SP
	MOVEQ	#1,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-8(A5),D0
	MOVE.L	D0,4(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,8(SP)
	LEA	lbL000B32(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000B3E

lbL000B32
;	dc.l	$80080040,$5f		;UNDERSCORE,"_"
	dc.l	0

lbC000B3E
	MOVE.L	D0,12(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,D0/A0-A2
	JSR	-$1E(A6)	;CreateGadgetA(d0,a0,a1,a2)gadtools
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#2,-(SP)
	BSR	lbC00155E
.skip	MOVE.L	D0,-8(A5)
	MOVE.L	8(A5),A0
	MOVE.L	D0,$1C(A0)
	MOVE.L	-8(A5),D0
	UNLK	A5
	RTS

CheckDisk
	LINK	A5,#0
	MOVE.L	-$20C(A4),D0
	BEQ	.skip
	lea	ReqBody_StrangeDisk(pc),a0
	bsr	DisplayRequester
	LEA	CheckingBootblock(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
.skip	MOVEQ	#0,D0
	UNLK	A5
	RTS

ReqBody_StrangeDisk
	dc.l	$14,0
	dc.l	ReqTitle_StrangeDisk
	dc.l	ReqMain_StrangeDisk
	dc.l	ReqButtons_StrangeDisk

ReqTitle_StrangeDisk
	ifne	norsk
	dc.b	'Oi...',0
	else
	dc.b	'Notice...',0
	endc
ReqMain_StrangeDisk
	ifne	norsk
	dc.b	'Get that fucking disk out',$a
	dc.b	'of my disk drive...NOW!!!',0
	else
	dc.b	'The disk in the selected',$a
	dc.b	'drive doesn''t appear to',$a
	dc.b	'be a standard DOS disk!',0
	endc
ReqButtons_StrangeDisk
 	ifne	norsk
	dc.b	'Yes O''Master',0
	else
	dc.b	'Ok',0
	endc
	even

lbC000B94
	LINK	A5,#-$10
MainLoop
	MOVE.L	-$208(A4),D0
	BEQ	lbC000D92
	LEA	-4(SP),SP
	PEA	1
	MOVE.L	12(A5),A0
	MOVE.L	$56(A0),A0
	MOVEQ	#0,D0
	MOVE.B	15(A0),D0
	MOVE.L	D0,-(SP)
	BSR	lbC001552
	LEA	8(SP),SP
	MOVE.L	D0,0(SP)
	MOVE.L	-$28(A4),A6
	MOVEM.L	(SP)+,D0
	JSR	-$13E(A6)	;Wait(d0)exec
;	bsr	FlashScreen
GadLoop	MOVE.L	-$208(A4),D0
	MOVE.L	D0,-(SP)
	LEA	-4(SP),SP
	MOVE.L	12(A5),A0
	MOVE.L	$56(A0),D0
	MOVE.L	D0,0(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,A0
	JSR	-$48(A6)	;GT_GetIMsg(a0)gadtools
	MOVE.L	D0,-12(A5)
	MOVE.L	D0,D1
	MOVE.L	(SP)+,D0
	AND.L	D1,D0
	TST.L	D0
	BEQ	lbC000D8E
	MOVE.L	-12(A5),A0
	MOVE.L	$1C(A0),D0
	MOVE.L	D0,-$10(A5)
	MOVE.L	-12(A5),A0
	MOVE.L	$14(A0),D0
	MOVE.L	D0,-4(A5)
	MOVE.L	-12(A5),A0
	MOVE.W	$18(A0),D0
	EXT.L	D0
	MOVE.L	D0,-8(A5)
	MOVE.L	-12(A5),A1
	MOVE.L	-$204(A4),A6
	JSR	-$4E(A6)	;GT_ReplyIMsg(a1)gadtools
	MOVEQ	#$20,D0
	CMP.L	-4(A5),D0
	BNE	CheckGadgets
	MOVE.L	12(A5),-(SP)
	MOVE.L	-$10(A5),-(SP)
	MOVE.L	-8(A5),-(SP)
	MOVE.L	8(A5),-(SP)
	BSR	HandleGadgetEvents
	LEA	$10(SP),SP
	BRA	Exit_CheckRoutines

CheckGadgets
	MOVEQ	#$10,D0
	CMP.L	-4(A5),D0
	BNE	CheckGadgetUp
	MOVE.L	12(A5),-(SP)
	MOVE.L	-$10(A5),-(SP)
	MOVE.L	-8(A5),-(SP)
	MOVE.L	8(A5),-(SP)
	BSR	HandleGadgetEvents
	LEA	$10(SP),SP
	BRA	Exit_CheckRoutines

CheckGadgetUp
	MOVEQ	#$40,D0
	CMP.L	-4(A5),D0
	BNE	CheckVanillaKey
	MOVE.L	12(A5),-(SP)
	MOVE.L	-$10(A5),-(SP)
	MOVE.L	-8(A5),-(SP)
	MOVE.L	8(A5),-(SP)
	BSR	HandleGadgetEvents
	LEA	$10(SP),SP
	BRA	Exit_CheckRoutines

CheckVanillaKey
	MOVE.L	#$200000,D0
	CMP.L	-4(A5),D0
	BNE	CheckDiskInserted
	MOVE.L	12(A5),-(SP)
	MOVE.L	-8(A5),-(SP)
	MOVE.L	8(A5),-(SP)
	LEA	12(SP),SP
	BRA	Exit_CheckRoutines

CheckDiskInserted
	MOVE.L	#$8000,D0
	CMP.L	-4(A5),D0
	BNE	CheckRightMouse
	BSR	CheckDisk
	BRA	Exit_CheckRoutines

CheckRightMouse
	MOVE.L	#$100,D0
	CMP.L	-4(A5),D0
	BNE	CheckWindowActive
	BSR	SizeWindow
	BRA	Exit_CheckRoutines

CheckWindowActive
	MOVE.L	#$40000,D0
	CMP.L	-4(A5),D0
	BNE	CheckWindowInactive
	MOVE.L	12(A5),A0
	LEA	WindowTitleActive(PC),A1
	LEA	ScreenTitle(PC),A2
	MOVE.L	-$30(A4),A6
	JSR	-$114(A6)	;SetWindowTitles(a0,a1,a2)int
	MOVEQ	#-1,D0
	MOVE.L	D0,-$20C(A4)
	BRA	Exit_CheckRoutines

CheckWindowInactive
	MOVE.L	#$80000,D0
	CMP.L	-4(A5),D0
	BNE	CheckCloseGadget
	MOVE.L	12(A5),A0
	LEA	WindowTitleInactive(PC),A1
	MOVE.W	#-1,A2
	MOVE.L	-$30(A4),A6
	JSR	-$114(A6)	;SetWindowTitles(a0,a1,a2)int
	MOVEQ	#0,D0
	MOVE.L	D0,-$20C(A4)
	BRA	Exit_CheckRoutines

CheckCloseGadget
	MOVE.L	#$200,D0
	CMP.L	-4(A5),D0
	BNE	CheckWindowRedrawn
	BSR	DisplayQuitRequester
	BRA	Exit_CheckRoutines

CheckWindowRedrawn
	MOVEQ	#4,D0
	CMP.L	-4(A5),D0
	BNE	Exit_CheckRoutines
	MOVE.L	12(A5),A0
	MOVE.L	-$204(A4),A6
	JSR	-$5A(A6)	;GT_BeginRefresh(a0)gadtools
	MOVE.L	12(A5),A0
	MOVEQ	#-1,D0
	MOVE.L	-$204(A4),A6
	JSR	-$60(A6)	;GT_EndRefresh(a0,d0)gadtools
Exit_CheckRoutines
	BRA	GadLoop

lbC000D8E
	BRA	MainLoop

lbC000D92
	MOVEQ	#0,D0
	UNLK	A5
	RTS

DisplayQuitRequester
	LINK	A5,#0
	LEA	-$10(SP),SP
	MOVEQ	#0,D0
	MOVE.L	D0,0(SP)
	LEA	ReqBody_Quit(PC),A0
	MOVE.L	A0,D0
	MOVE.L	D0,4(SP)
	MOVEQ	#0,D0
	MOVE.L	D0,8(SP)
	MOVEQ	#0,D0
	MOVE.L	D0,12(SP)
	MOVE.L	-$30(A4),A6
	MOVEM.L	(SP)+,A0-A3
	JSR	-$24C(A6)	;EasyRequestArgs(a0,a1,a2,a3)int
	CMP.L	#1,D0
	BNE	lbC000DF2
	MOVEQ	#0,D0
	MOVE.L	D0,-$208(A4)
lbC000DF2
	MOVEQ	#0,D0
	UNLK	A5
	RTS

ReqBody_Quit
	dc.l	$14,0
	dc.l	ReqTitle_Quit
	dc.l	ReqMain_Quit
	dc.l	ReqButtons_Quit

ReqTitle_Quit
	dc.b	'Quit...',0
ReqMain_Quit
	ifne	norsk
	dc.b	'Tuller Du?',0
	else
	dc.b	'Are you sure?',0
	endc
ReqButtons_Quit
	ifne	norsk
	dc.b	'Ja|Nei',0
	else
	dc.b	'Yes|No',0
	endc
	even

lbC000DF8
	LINK	A5,#-$14
	MOVEM.L	D3-D7,-(SP)
	MOVEQ	#0,D0
	MOVE.L	D0,-8(A5)
	MOVEQ	#0,D0
	MOVE.L	D0,-4(A5)
	MOVEQ	#0,D0
	MOVE.L	D0,-$10(A5)
	LEA	-$1C(SP),SP
	MOVE.L	SP,-$14(A5)
	MOVE.L	-$50(A4),-(SP)
	MOVE.L	-$4C(A4),-(SP)
	MOVE.L	-$58(A4),-(SP)
	MOVE.L	SP,-$50(A4)
	LEA	lbC000FF0(PC),A0
	MOVE.L	A0,-$4C(A4)
	MOVE.L	A5,-$58(A4)
	LEA	FontName(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000E4A

FontName
	dc.l	TopazFont,$80000

lbC000E4A
	MOVE.L	D0,-$214(A4)
	MOVE.L	-$214(A4),A0
	MOVE.L	-$34(A4),A6
	JSR	-$48(A6)	;OpenFont(a0)gfx
	TST.L	D0
	BNE.S	lbC000E68
	MOVE.L	#1,-(SP)
	BSR	lbC00155E
lbC000E68
	MOVE.L	D0,-8(A5)
	MOVE.W	#0,A0
	MOVE.L	-$30(A4),A6
	JSR	-$1FE(A6)	;LockPubScreen(a0)int
	TST.L	D0
	BNE.S	lbC000E86
	MOVE.L	#5,-(SP)
	BSR	lbC00155E
lbC000E86
	MOVE.L	D0,-4(A5)
	LEA	-8(SP),SP
	MOVE.L	-4(A5),D0
	MOVE.L	D0,0(SP)
	LEA	lbL000EA2(PC),A0
	MOVE.L	A0,D0
	BRA	OpenWindow

lbL000EA2
	dc.l	0

OpenWindow
	MOVE.L	D0,4(SP)
	MOVE.L	-$204(A4),A6
	MOVEM.L	(SP)+,A0/A1
	JSR	-$7E(A6)	;GetVisualInfoA(a0,a1)gadtools
	TST.L	D0
	BNE.S	lbC000EC4
	MOVE.L	#6,-(SP)
	BSR	lbC00155E
lbC000EC4
	MOVE.L	D0,-12(A5)
	LEA	-$10(A5),A0
	MOVE.L	A0,D0
	MOVE.L	D0,-(SP)
	MOVE.L	-12(A5),-(SP)
	MOVE.L	-$14(A5),-(SP)
	BSR	CreateGadgets
	LEA	12(SP),SP
	LEA	-8(SP),SP
	MOVEQ	#0,D0
	MOVE.L	D0,0(SP)
	MOVE.L	-$10(A5),D0
	MOVE.L	D0,-(SP)
	MOVE.L	-4(A5),D0
	MOVE.L	D0,-(SP)
	LEA	WinDefs(PC),A0
	MOVE.L	A0,D0
	BRA	lbC000F96

WinDefs
	dc.l	$8000006E,WindowTitleActive	;WA_TITLE
	dc.l	$8000006F,ScreenTitle	;WA_SCREENTITLE
	dc.l	$80000064,0		;WA_LEFT (174)
	dc.l	$80000065,11		;WA_TOP (76)
	dc.l	$80000066,292		;WA_WIDTH
	dc.l	$80000067,104		;WA_HEIGHT
	dc.l	$80000072,5		;WA_MINWIDTH
	dc.l	$80000073,5		;WA_MINHEIGHT
	dc.l	$80000074,$FFFF		;WA_MAXWIDTH
	dc.l	$80000075,$FFFF		;WA_MAXHEIGHT
	dc.l	$8000006C,0		;WA_GADGETS
	dc.l	$8000008D,$FFFFFFFF	;WA_SMARTREFRESH
	dc.l	$80000082,$FFFFFFFF	;WA_DRAGBAR
	dc.l	$80000083,$FFFFFFFF	;WA_DEPTHGADGET
	dc.l	$80000089,$FFFFFFFF	;WA_ACTIVATE
	dc.l	$80000084,$FFFFFFFF	;WA_CLOSEGADGET
	dc.l	$8000006A,$2C8344	;IDCMP_CLOSEWINDOW!IDCMP_REFRESHWINDOW!
					;IDCMP_VANILLAKEY!STRINGIDCMP!IDCMP_MENUPICK!
					;BUTTONIDCMP!IDCMP_DISKINSERTED!IDCMP!
					;IDCMP_ACTIVEWINDOW!
	dc.l	$80000079,0		;WA_PUBSCREEN
	dc.l	0

lbC000F96
	MOVE.L	(SP)+,$8C(A0)
	MOVE.L	(SP)+,$54(A0)
	MOVE.L	D0,4(SP)
	MOVE.L	-$30(A4),A6
	MOVEM.L	(SP)+,A0/A1
	JSR	-$25E(A6)	;OpenWindowTagList(a0,a1)int
	TST.L	D0
	BNE.S	lbC000FBC
	MOVE.L	#7,-(SP)
	BSR	lbC00155E
lbC000FBC
	move.l	d0,WinPtr
	move.l	d0,a0
	move.l	$32(a0),RPort
	move.l	$56(a0),VPort
	MOVE.L	D0,-$218(A4)
	MOVE.L	-$218(A4),A0
	MOVE.W	#0,A1
	MOVE.L	-$204(A4),A6
	JSR	-$54(A6)	;GT_RefreshWindow(a0,a1)gadtools
	MOVE.L	-$218(A4),-(SP)
	MOVE.L	-$14(A5),-(SP)
	bsr	DrawGraphicData
	BSR	lbC000B94
	LEA	8(SP),SP
	MOVE.L	(SP)+,-$58(A4)
	MOVE.L	(SP)+,-$4C(A4)
	MOVE.L	(SP)+,-$50(A4)
	CLR.L	-$54(A4)
lbC000FF0
	MOVE.L	-$218(A4),D0
	BEQ	lbC001004
	MOVE.L	-$218(A4),A0
	MOVE.L	-$30(A4),A6
	JSR	-$48(A6)	;CloseWindow(a0)int
lbC001004
	MOVE.L	-$10(A5),A0
	MOVE.L	-$204(A4),A6
	JSR	-$24(A6)	;FreeGadgets(a0)gadtools
	MOVE.L	-12(A5),D0
	BEQ	lbC001024
	MOVE.L	-12(A5),A0
	MOVE.L	-$204(A4),A6
	JSR	-$84(A6)	;FreeVisualInfo(a0)gadtools
lbC001024
	MOVE.L	-4(A5),D0
	BEQ	lbC00103C
	MOVE.L	-4(A5),A0
	MOVE.W	#0,A1
	MOVE.L	-$30(A4),A6
	JSR	-$204(A6)	;UnlockPubScreen(a0,a1)int
lbC00103C
	MOVE.L	-8(A5),D0
	BEQ	lbC001050
	MOVE.L	-8(A5),A1
	MOVE.L	-$34(A4),A6
	JSR	-$4E(A6)	;CloseFont(a1)gfx
lbC001050
	BSR	lbC001588
	MOVEQ	#0,D0
	ADD.L	#$1C,SP
	MOVEM.L	(SP)+,D3-D7
	UNLK	A5
	RTS

DrawGraphicData
	movem.l	d0-d7/a0-a6,-(sp)
	move.l	DosBAdr(pc),a6
	move.l	#10,d1
	jsr	-$c6(a6)		;Delay(d1)dos
	move.l	IntBAdr(pc),a6
	move.l	RPort(pc),a0
	lea	BufferS(pc),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	jsr	-$d8(a6)		;PrintIText(a0/a1,d0/d1)int
	move.l	IntBAdr(pc),a6
	move.l	RPort(pc),a0
	lea	TopGfx(pc),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.l	IntBAdr(pc),a6
	jsr	-$72(a6)		;DrawImage(a0/a1,d0/d1)int
	move.l	IntBAdr(pc),a6
	move.l	RPort(pc),a0
	lea	BotGfx(pc),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.l	IntBAdr(pc),a6
	jsr	-$72(a6)		;DrawImage(a0/a1,d0/d1)int
	bsr	DrawDoubleLines
	movem.l	(sp)+,d0-d7/a0-a6
	rts

BufferS	dc.l	$01000001		;dp,bp,md,??
	dc.w	7,60			;xxxx,yyyy	;32
	dc.l	FontName
	dc.l	BufferT
	dc.l	0
BufferT	dc.b	'Buffer:',0

DrawDoubleLines
	moveq.l	#1,d0			;***TOP LINE BLACK***
	bsr.b	InitGfx
	jsr	-$156(a6)		;SetAPen(a1,d0)gfx
	moveq.l	#4,d0
	moveq.l	#26,d1
	bsr.b	InitGfx
	jsr	-$f0(a6)		;Move(a1,d0,d1)gfx
	move.l	#287,d0
	moveq.l	#26,d1
	bsr.b	InitGfx
	jsr	-$f6(a6)		;Draw(a1,d0,d1)gfx
	moveq.l	#2,d0			;***TOP LINE WHITE***
	bsr.b	InitGfx
	jsr	-$156(a6)		;SetAPen(a1,d0)gfx
	moveq.l	#4,d0
	moveq.l	#27,d1
	bsr.b	InitGfx
	jsr	-$f0(a6)		;Move(a1,d0,d1)gfx
	move.l	#287,d0
	moveq.l	#27,d1
	bsr.b	InitGfx
	jsr	-$f6(a6)		;Draw(a1,d0,d1)gfx
	moveq.l	#1,d0			;***BOTTOM LINE BLACK***
	bsr.b	InitGfx
	jsr	-$156(a6)		;SetAPen(a1,d0)gfx
	moveq.l	#4,d0
	moveq.l	#86,d1
	bsr.b	InitGfx
	jsr	-$f0(a6)		;Move(a1,d0,d1)gfx
	move.l	#287,d0
	moveq.l	#86,d1
	bsr.b	InitGfx
	jsr	-$f6(a6)		;Draw(a1,d0,d1)gfx
	moveq.l	#2,d0			;***BOTTOM LINE WHITE***
	bsr.b	InitGfx
	jsr	-$156(a6)		;SetAPen(a1,d0)gfx
	moveq.l	#4,d0
	moveq.l	#87,d1
	bsr.b	InitGfx
	jsr	-$f0(a6)		;Move(a1,d0,d1)gfx
	move.l	#287,d0
	moveq.l	#87,d1
	bsr.b	InitGfx
	jmp	-$f6(a6)		;Draw(a1,d0,d1)gfx

InitGfx
	move.l	GfxBAdr(pc),a6
	move.l	RPort(pc),a1
	rts

MainProgramLoop
	LINK	A5,#0
	MOVEM.L	D3-D7,-(SP)
	MOVE.L	-$50(A4),-(SP)
	MOVE.L	-$4C(A4),-(SP)
	MOVE.L	-$58(A4),-(SP)
	MOVE.L	SP,-$50(A4)
	LEA	lbC0010D6(PC),A0
	MOVE.L	A0,-$4C(A4)
	MOVE.L	A5,-$58(A4)
	PEA	$25
	BSR	lbC00153A
	TST.L	D0
	BNE.S	.skip
	MOVE.L	#3,-(SP)
	BSR	lbC00155E
.skip	LEA	4(SP),SP
	LEA	GadName(PC),A1
	MOVEQ	#$25,D0
	MOVE.L	-$28(A4),A6
	JSR	-$228(A6)	;OpenLibrary(a1,d0)exec
	TST.L	D0
	BNE.S	lbC0010BE
	move.l	d0,GadBAdr
	MOVE.L	#4,-(SP)
	BSR	lbC00155E
lbC0010BE
	MOVE.L	D0,-$204(A4)
	BSR	lbC000DF8
	MOVE.L	(SP)+,-$58(A4)
	MOVE.L	(SP)+,-$4C(A4)
	MOVE.L	(SP)+,-$50(A4)
	CLR.L	-$54(A4)
lbC0010D6
	MOVE.L	-$204(A4),D0
	BEQ	lbC0010EA
	MOVE.L	-$204(A4),A1
	MOVE.L	-$28(A4),A6
	JSR	-$19E(A6)	;CloseLibrary(a1)exec
lbC0010EA
	MOVEQ	#1,D0
	CMP.L	-$54(A4),D0
	BNE	ShowErr_CreateGadgets
	LEA	ErrFailedToOpenFont(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA	Exit_ShowErr

ShowErr_CreateGadgets
	MOVEQ	#2,D0
	CMP.L	-$54(A4),D0
	BNE	ShowErr_Kickstart
	LEA	ErrCreateAllGadgetsFailed(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA	Exit_ShowErr

ShowErr_Kickstart
	MOVEQ	#3,D0
	CMP.L	-$54(A4),D0
	BNE	ShowErr_GadTools
	LEA	ErrRequiresKickstart(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA	Exit_ShowErr

ShowErr_GadTools
	MOVEQ	#4,D0
	CMP.L	-$54(A4),D0
	BNE	ShowErr_PublicScreen
	LEA	ErrRequiresGadTools(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA	Exit_ShowErr

ShowErr_PublicScreen
	MOVEQ	#5,D0
	CMP.L	-$54(A4),D0
	BNE	ShowErr_GetVisualInfo
	LEA	ErrCouldntLockPublicScreen(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA	Exit_ShowErr

ShowErr_GetVisualInfo
	MOVEQ	#6,D0
	CMP.L	-$54(A4),D0
	BNE	ShowErr_OpenWindow
	LEA	ErrGetVisualInfoFailed(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
	BRA	Exit_ShowErr

ShowErr_OpenWindow
	MOVEQ	#7,D0
	CMP.L	-$54(A4),D0
	BNE	Exit_ShowErr
	LEA	ErrOpenWindowFailed(PC),A0
	MOVE.L	A0,-(SP)
	PEA	0
	BSR	PrintText
	LEA	8(SP),SP
Exit_ShowErr
	MOVEQ	#0,D0
	MOVEM.L	(SP)+,D3-D7
	UNLK	A5
	RTS

ErrOpenWindowFailed
	dc.b	'BootKit Error: Unable to open the window',$A,0
ErrGetVisualInfoFailed
	dc.b	'BootKit Error: Unable to get visual info',$A,0
ErrCouldntLockPublicScreen
	dc.b	'BootKit Error: Unable to lock default public screen',$A,0
ErrRequiresGadTools
	dc.b	'BootKit Error: Requires gadtools.library v37',$A,0
ErrRequiresKickstart
	dc.b	'BootKit Error: Requires Kickstart v37',$A,0
ErrCreateAllGadgetsFailed
	dc.b	'BootKit Error: Unable to create all gadgets',$A,0
ErrFailedToOpenFont
	dc.b	'BootKit Error: Unable to open topaz.font 8',$A,0
GadName	dc.b	'gadtools.library',0
ScreenTitle
	dc.b	'BootKit v1.00 by Zebedee/Area 51 (14-Aug-97)',0
WindowTitleActive
	dc.b	'BootKit v1.00',0
TopazFont
	dc.b	'topaz.font',0
WindowTitleInactive
	dc.b	'BootKit is inactive...',0
CheckingBootblock
	dc.b	'Checking bootblock...',$A,0
GadAbout
	dc.b	'About',0
GadRun	dc.b	'Run',0
GadSave	dc.b	'Save',0
GadLoad	dc.b	'Load',0
DefaultText
	dc.b	'RAM:Bootblock.grab',0
GadFile	dc.b	'File:',0
GadWrite
	dc.b	'Write',0
GadRead	dc.b	'Read',0
DF3	dc.b	'DF3:',0
DF2	dc.b	'DF2:',0
DF1	dc.b	'DF1:',0
DF0	dc.b	'DF0:',0
GadList0
	dc.b	'Drive:',0
	dc.b	'About',$A,0
	dc.b	'Run',$A,0
	dc.b	'Load',$A,0
	dc.b	'Save',$A,0
GadList1
	dc.b	'Default text',0
	dc.b	'Write',$A,0
	dc.b	'Read',$A,0
OutRun	dc.b	'Run',$A,0
GadgetString
	dc.b	'%s',0
	even
OutDF3	dc.b	'DF3:',$A,0
OutDF2	dc.b	'DF2:',$A,0
OutDF1	dc.b	'DF1:',$A,0
OutDF0	dc.b	'DF0:',$A,0
ItemSelected
	dc.b	'Item selected is %ld - ',0
	even

SetReturnCode
	MOVEQ	#-1,D2
	RTS

ReturnSubroutine
	RTS

PrintText
	TST.L	-8(A4)
	BEQ	OpenConsole
PrintText_Skip
	LEA	8(SP),A1
	MOVE.L	4(SP),D0
	MOVE.L	8(SP,D0.L),A0
	LEA	lbC0014F2(PC),A2
	MOVE.L	4.W,A6
	MOVE.L	-$40(A4),A3
	MOVE.L	A3,D2
	JSR	-$20A(A6)	;RawDoFmt(a0,a1,a2,a3)exec
	MOVE.L	-8(A4),D1
	MOVE.L	D2,A0
Write_DOS
	TST.B	(A0)+
	BNE	Write_DOS
	SUB.L	D2,A0
	MOVE.L	D3,A3
	MOVE.L	A0,D3
	SUBQ.L	#1,D3
	MOVE.L	-$2C(A4),A6
	JSR	-$30(A6)	;Write(d1,d2,d3)dos
	MOVE.L	D3,D0
	MOVE.L	A3,D3
	RTS

lbC0014F2
	MOVE.B	D0,(A3)+
	RTS

OpenConsole
	LEA	ConsoleName(PC),A0
	MOVE.L	A0,D1
	MOVE.L	#$3EE,D2	;MODE_NEW
	MOVE.L	-$2C(A4),A6
	JSR	-$1E(A6)	;Open(d1,d2)dos
	MOVE.L	D0,-12(A4)
	MOVE.L	D0,-8(A4)
	TST.L	D0
	BNE.S	PrintText_Skip
	MOVEQ	#$14,D0
	MOVE.L	D0,-$1C(A4)
	MOVE.L	-$18(A4),A0
	JMP	(A0)

ConsoleName
	dc.b	'CON:0/11/640/80/BootKit',0
	even

lbC00153A
	MOVE.L	4(SP),D0
	MOVE.L	4.W,A6
	MOVE.W	$14(A6),D1
	CMP.W	D0,D1
	BMI.S	lbC00154E
	MOVEQ	#-1,D0
	RTS

lbC00154E
	MOVEQ	#0,D0
	RTS

lbC001552
	MOVE.L	8(SP),D0
	MOVE.L	4(SP),D1
	ASL.L	D1,D0
	RTS

lbC00155E
	MOVE.L	4(SP),-$54(A4)
	MOVE.L	-$4C(A4),D0
	BEQ.S	lbC001582
	MOVE.L	D0,A0
	MOVE.L	-$50(A4),SP
	MOVE.L	-$58(A4),A5
	MOVE.L	(SP)+,-$58(A4)
	MOVE.L	(SP)+,-$4C(A4)
	MOVE.L	(SP)+,-$50(A4)
	JMP	(A0)

lbC001582
	MOVE.L	-$18(A4),A0
	JMP	(A0)

lbC001588
	TST.L	-$54(A4)
	BEQ.S	lbC0015B2
	MOVE.L	-$4C(A4),D0
	BEQ.S	lbC0015AC
	MOVE.L	D0,A0
	MOVE.L	-$50(A4),SP
	MOVE.L	-$58(A4),A5
	MOVE.L	(SP)+,-$58(A4)
	MOVE.L	(SP)+,-$4C(A4)
	MOVE.L	(SP)+,-$50(A4)
	JMP	(A0)

lbC0015AC
	MOVE.L	-$18(A4),A0
	JMP	(A0)

lbC0015B2
	RTS

OpenTrackDisk
	move.l	MyTask(pc),a1
	move.l	4.w,a6
	sub.l	a1,a1
	jsr	-$126(a6)			;FindTask(a1)exec
	move.l	d0,RdReply+$10
	lea	RdReply(pc),a1
	jsr	-$162(a6)			;AddPort(a1)exec
	lea	DiskIO(pc),a1
;	move.l	CmdTxt(pc),a5
	moveq.l	#0,d0
;	move.b	2(a5),d0
	move.l	DriveUnit(pc),d0		;Drive to read
	moveq.l	#0,d1				;No flags
	lea	TrakDvc(pc),a0
	jmp	-$1bc(a6)			;OpenDevice(a0/a1,d0/d1)exec

ReadBootblock
	lea	DiskIO(pc),a1
	move.l	#RdReply,$e(a1)			;Set reply port
	move.w	#2,$1c(a1)			;CMD_READ
	move.l	#Buffer,$28(a1)			;Buffer
	move.l	#1024,$24(a1)			;Length (2 sectors)
	move.l	#0,$2c(a1)			;Offset
	move.l	4.w,a6
	jmp	-$1c8(a6)			;DoIO(a1)exec

WriteBootblock
	lea	DiskIO(pc),a1
	move.l	#RdReply,$e(a1)			;Set reply port
	move.w	#3,$1c(a1)			;CMD_WRITE
	move.l	#Buffer,$28(a1)			;Buffer
	move.l	#1024,$24(a1)			;Length (2 sectors)
	move.l	#0,$2c(a1)			;Offset
	move.l	4.w,a6
	jmp	-$1c8(a6)			;DoIO(a1)exec

StopDriveCloseTD
	move.l	DiskIO+$20(pc),d6
	lea	DiskIO(pc),a1
	move	#9,$1c(a1)			;TD_MOTOR
	move.l	#0,$24(a1)			;Turn motor off
	jsr	-$1c8(a6)			;DoIO(a1)exec
	lea	RdReply(pc),a1
	jsr	-$168(a6)			;RemPort(a1)exec
	lea	DiskIO(pc),a1
	jmp	-$1c2(a6)			;CloseDevice(a1)exec

RPort	dc.l	0
VPort	dc.l	0
WinPtr	dc.l	0
GfxBAdr	dc.l	0
IntBAdr	dc.l	0
DosBAdr	dc.l	0
GadBAdr	dc.l	0
Output	dc.l	0
DriveUnit
	dc.l	0
TrakDvc	dc.b	'trackdisk.device',0
	even
MyTask	dc.l	0
DiskIO	dcb.l	20,0
RdReply	dcb.l	8,0
Buffer	dcb.b	1024,0
StringBuffer
	dc.b	'RAM:Bootblock.grab'
	dcb.b	15,0
	even
FilePtr	dc.l	0
TopGfx	dc.w	50,13			;x,y
	dc.w	192,11			;w,h
	dc.w	3			;bitplanes
	dc.l	TopGfxData
	dc.w	$0300			;plane pick
	dc.l	0
TopGfxData
	dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
	dc.l	$0c200000,$f0c000c0,$00000c00,$00000430,$80000000,$0003fc18
	dc.l	$0c200000,$01c00000,$00000c00,$00000c30,$80000000,$00030018
	dc.l	$0c218600,$038610c2,$18430861,$0c201c30,$8610c238,$40000018
	dc.l	$00618600,$070610c2,$18430861,$0c303800,$8670c300,$600f0818
	dc.l	$0c218600,$0e0030c2,$00c30803,$00707030,$86000700,$60000c18
	dc.l	$0c218600,$1c07f0c2,$1fc3087f,$0fe0e030,$8600fe18,$60000c18
	dc.l	$0c300600,$380600c2,$18030860,$0c01c030,$8600c018,$60000c18
	dc.l	$00738600,$00000007,$00000c00,$00038030,$86000000,$60001c18
	dc.l	$3fe00e00,$ffcff3fe,$3fc7fcff,$1fe300f3,$de01fe3f,$e007f878
	dc.l	$0003fc00,$00000000,$00000000,$00000000,$00000000,$00000000
	dc.l	$ff800003,$ff000f00,$0000f000,$000031fe,$00000000,$003ff1e0
	dc.l	$f3c00000,$0f000f00,$0000f000,$00007bcf,$00000000,$003c03e0
	dc.l	$f3de7800,$1e3fcff8,$ff1ff3fc,$7f80f3cf,$7fc7f8ff,$003c07e0
	dc.l	$f3de7800,$3c79ef3d,$e7bcf79e,$f3c1e3cf,$79ef3c07,$803fe1e0
	dc.l	$ff9e7800,$7879ef3d,$e7bcf79e,$f3c3c3ff,$780f3c07,$8000f1e0
	dc.l	$f3de7800,$f07fcf3d,$ff3cf7fc,$ff8783cf,$780ff8ff,$8000f1e0
	dc.l	$f3de7801,$e0780f3d,$e03cf780,$f00f03cf,$780f01e7,$8000f1e0
	dc.l	$f3cff803,$c0780f3d,$e03cf780,$f01e03cf,$780f01e7,$803cf1e0
	dc.l	$ff807803,$ff3fcff8,$ff1ff3fc,$7f8c03cf,$7807f8ff,$801fe1e0
	dc.l	$000ff000,$00000000,$00000000,$00000000,$00000000,$00000000
	dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000

BotGfx	dc.w	32,90			;x,y
	dc.w	240,10			;w,h
	dc.w	3			;bitplanes
	dc.l	BotGfxData
	dc.w	$0300			;plane pick
	dc.l	0
BotGfxData
	dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
	dc.l	$00000000,$00001fa0,$4308613c,$30018400,$000610ff,$06003080
	dc.l	$00000060,$0000031e,$00000000,$20004308,$61803001,$84000006
	dc.l	$10c00600,$30800000,$00400000,$00000000,$00000790,$43086180
	dc.l	$70018430,$80061000,$06003086,$10c21843,$08610384,$30861000
	dc.l	$0610600c,$0180e000,$0430c000,$1bc20600,$018670c2,$18430867
	dc.l	$83043086,$18000610,$670ce181,$c0018430,$c0061803,$06003f86
	dc.l	$00c21843,$08600304,$30861800,$2010600c,$01818001,$8430c006
	dc.l	$18030600,$300600c2,$18430860,$03043086,$18002790,$40080181
	dc.l	$80018430,$c0061003,$06003006,$00c21843,$08600304,$30861800
	dc.l	$0010601c,$03818001,$8430c006,$18070600,$30060007,$00600c03
	dc.l	$80060186,$18001fe1,$e7f8ff07,$80079ef3,$c01e79fe,$1e00f01e
	dc.l	$01fe3fe7,$fcff07de,$7f9e7800,$7f879fe3,$fcffc00f,$f000003f
	dc.l	$cffc7803,$fe000000,$07800000,$3c780000,$0000804f,$bcf79e03
	dc.l	$c01e7800,$0079ef00,$f803cf00,$00000780,$00003c00,$00000000
	dc.l	$9f5fbcf7,$9e03c01e,$7bfe0079,$ef01f803,$cf7fc7f8,$ffbcf3fc
	dc.l	$ff79fe7f,$c000b847,$bcf79e07,$801e7bcf,$0079eff8,$7803cf79
	dc.l	$ef3de7bc,$f79e3c7b,$cf79e000,$b8479ff3,$fe0f001f,$fbcf007f
	dc.l	$e03c7803,$fe780f3d,$e7bcf780,$3c7bcf79,$e000b847,$80f01e1e
	dc.l	$001e7bcf,$0079e03c,$7803c078,$0f3de7bc,$f7803c7b,$cf79e000
	dc.l	$9f4780f0,$1e1e001e,$7bcf0079,$e03c7803,$c0780f3d,$e7bcf780
	dc.l	$3c7bcf79,$e0008047,$bcf79e1e,$001e7bcf,$0079ef3c,$7803c078
	dc.l	$0f3de7bc,$f79e3c7b,$cf79e000,$7f879fe3,$fc1e001e,$7bcf0079
	dc.l	$e7f87803,$c07807f8,$ff9ff3fc,$1f79fe79,$e0000000,$00000000
	dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000

FlashScreen
	move.l	d0,-(sp)
	move.l	#$fff,d0
.loop	move.l	#$f00,$dff180
	move.l	#$f00,$dff182
	move.l	#$f00,$dff184
	dbf	d0,.loop
	move.l	(sp)+,d0
	rts

SaveBootblock
	movem.l	d0-d7/a0-a6,-(sp)
	move.l	DosBAdr(pc),a6
	move.l	StringBuffer(pc),d1
	move.l	#$3ee,d2		;MODE_NEWFILE
	jsr	-$1e(a6)		;Open(d1,d2)dos
	move.l	d0,FilePtr
	beq	DisplayRequester_FileCreationError
	move.l	d0,d1
	move.l	DosBAdr(pc),a6
	move.l	#Buffer,d2
	move.l	#1024,d3
	jsr	-$30(a6)		;Write(d1,d2,d3)dos
	cmp.l	#1024,d0
	bne.b	DisplayRequester_ErrSaving
RetSave	move.l	DosBAdr(pc),a6
	move.l	FilePtr(pc),d1
	jsr	-$24(a6)		;Close(d1)dos
RetSFnd	movem.l	(sp)+,d0-d7/a0-a6
	rts

DisplayRequester_ErrSaving
	lea	ReqBody_ErrSaving(pc),a0
	bsr	DisplayRequester
	bra.b	RetSave

ReqBody_ErrSaving
	dc.l	$14,0
	dc.l	ReqTitle_ErrSaving
	dc.l	ReqMain_ErrSaving
	dc.l	ReqButtons_ErrSaving

ReqTitle_ErrSaving
	dc.b	'Error...',0
ReqMain_ErrSaving
	dc.b	'Problem writing the bootblock',$a
	dc.b	'data to disk - cause unknown!',0
ReqButtons_ErrSaving
	dc.b	'Ok',0
	even

DisplayRequester_FileCreationError
	lea	ReqBody_FileCreationError(pc),a0
	bsr	DisplayRequester
	bra.b	RetSFnd

ReqBody_FileCreationError
	dc.l	$14,0
	dc.l	ReqTitle_FileCreationError
	dc.l	ReqMain_FileCreationError
	dc.l	ReqButtons_FileCreationError

ReqTitle_FileCreationError
	dc.b	'Error...',0
ReqMain_FileCreationError
	dc.b	'Unable to create file!',0
ReqButtons_FileCreationError
	dc.b	'Ok',0
	even

LoadBootblock
	movem.l	d0-d7/a0-a6,-(sp)
	move.l	DosBAdr(pc),a6
	move.l	#StringBuffer,d1
	move.l	#$3ed,d2		;MODE_OLDFILE
	jsr	-$1e(a6)		;Open(d1,d2)dos
	move.l	d0,FilePtr
	beq	DisplayRequester_FileNotFound
	move.l	d0,d1
	move.l	DosBAdr(pc),a6
	move.l	#Buffer,d2
	move.l	#1024,d3
	jsr	-$2a(a6)		;Read(d1,d2,d3)dos
	cmp.l	#1024,d0
	bne.b	DisplayRequester_ErrLoading
RetLoad	move.l	DosBAdr(pc),a6
	move.l	FilePtr(pc),d1
	jsr	-$24(a6)		;Close(d1)dos
RetLFnd	movem.l	(sp)+,d0-d7/a0-a6
	rts

DisplayRequester_ErrLoading
	lea	ReqBody_ErrLoading(pc),a0
	bsr	DisplayRequester
	bra.b	RetLoad

ReqBody_ErrLoading
	dc.l	$14,0
	dc.l	ReqTitle_ErrLoading
	dc.l	ReqMain_ErrLoading
	dc.l	ReqButtons_ErrLoading

ReqTitle_ErrLoading
	dc.b	'Error...',0
ReqMain_ErrLoading
	dc.b	'Problem reading the bootblock',$a
	dc.b	'data from disk - cause unknown!',0
ReqButtons_ErrLoading
	dc.b	'Ok',0
	even

DisplayRequester_FileNotFound
	lea	ReqBody_FileNotFound(pc),a0
	bsr	DisplayRequester
	bra.b	RetLFnd

ReqBody_FileNotFound
	dc.l	$14,0
	dc.l	ReqTitle_FileNotFound
	dc.l	ReqMain_FileNotFound
	dc.l	ReqButtons_FileNotFound

ReqTitle_FileNotFound
	dc.b	'Error...',0
ReqMain_FileNotFound
	dc.b	'File not found!',0
ReqButtons_FileNotFound
	dc.b	'Ok',0
	even

DisplayRequester
	LINK	A5,#0
	LEA	-$10(SP),SP
	MOVEQ	#0,D0
	MOVE.L	D0,0(SP)
	MOVE.L	A0,D0
	MOVE.L	D0,4(SP)
	MOVEQ	#0,D0
	MOVE.L	D0,8(SP)
	MOVEQ	#0,D0
	MOVE.L	D0,12(SP)
	MOVE.L	-$30(A4),A6
	MOVEM.L	(SP)+,A0-A3
	JSR	-$24C(A6)	;EasyRequestArgs(a0,a1,a2,a3)int
	MOVEQ	#0,D0
	UNLK	A5
	RTS
	end