		opt	c-,d-,l-,o1+,o2+,p-,x-

* ---------------------------------------------------------------------------
* -----                       NewBoot V1.1 Install                      -----
* -----                    ~~~~~~~~~~~~~~~~~~~~~~~~~~                   -----
* -----                  © by André Wichmann of CLUSTER                 -----
* -----                 Aragorn 29/09/1990 - 30/09/1990.                -----
* ---------------------------------------------------------------------------

*
*   PAL version
*

		incdir	ram:include/
		include	exec/exec_lib.i
		include	exec/execbase.i
		include	exec/memory.i
		include	intuition/intuition_lib.i
		include	graphics/graphics_lib.i
		include	graphics/rastport.i

		SECTION	"",CODE_C

_Main		lea	BootBlock(pc),a0	calc checksum
		move.w	#$ff,d0
		moveq	#0,d1
		move.l	a0,a2
Loop		add.l	(a0)+,d1
		bcc.s	Carry
		addq.l	#1,d1
Carry		dbra	d0,Loop
		not.l	d1
		add.l	4(a2),d1
		bcc.s	Carry2
		addq.l	#1,d1
Carry2		move.l	d1,4(a2)
		sub.l	a1,a1
		CALLEXEC FindTask
		move.l	d0,ReplyPort+16
		lea	ReplyPort(pc),a1
		CALLEXEC AddPort
		lea	DiskIO(pc),a1
		move.l	#ReplyPort,14(a1)
		move.l	#0,d0
		clr.l	d1
		lea	Trdname(pc),a0
		CALLEXEC OpenDevice
		lea	DiskIO(pc),a1
		move.w	#3,28(a1)
		move.l	#BootBlock,40(a1)
		move.l	#2*512,36(a1)
		move.l	#0*512,44(a1)
		CALLEXEC DoIO
		move.w	#4,28(a1)
		CALLEXEC DoIO
		move.w	#9,28(a1)
		move.l	#0,36(a1)
		CALLEXEC DoIO
		lea	ReplyPort(pc),a1
		CALLEXEC RemPort
		lea	DiskIO(pc),a1
		CALLEXEC CloseDevice
		moveq	#0,d0
		rts

Trdname		dc.b	"trackdisk.device",0
		even
DiskIO		ds.l	20
ReplyPort	ds.l	8

		opt	p+

tf_BaseLine	equ	26
tf_CharData	equ	34
tf_Modulo	equ	38

* Dos data

BootBlock	dc.b	"DOS",0			DOS ID
		dc.l	$0			Checksum
		dc.l	$370			Ptr on rootblock

* DOS stuff

		lea	dosname(pc),a1		DOS Startup
		move.l	4.w,a6
		jsr	-96(a6)			FindResident()
		move.l	d0,a0
		move.l	22(a0),a0
		clr.l	d0			and return

* Own code

		movem.l	d0-d7/a0-a6,-(sp)	save regs	
		btst	#10,$dff016		right mb ?
		bne.s	DoBB
		move.w	#$044,$dff180		set color
		move.w	#$044,$dff182
		move.w	#$044,$dff184
		move.w	#$044,$dff186
		bra	NoBB
DoBB		move.w	#$440,$dff180		set color
		move.w	#$440,$dff182
		move.w	#$440,$dff184
		move.w	#$440,$dff186

* Clear reset

		move.l	4.w,a6			get SysBase
		clr.l	CoolCapture(a6)		clear Reset-vectors
		clr.l	ColdCapture(a6)
		clr.l	KickMemPtr(a6)
		clr.l	KickTagPtr(a6)

* Test NTSC

		cmp.b	#50,VBlankFrequency(a6)	NTSC ?!?
		beq.s	NoNTSC
		move.l	#$fc0000,$80.w		Reset !!!
		trap	#0

* Install MaxCLI

NoNTSC		move.l	#NewOpenEnd-NewOpen,d0	Get mem
		clr.l	d1
		jsr	_LVOAllocMem(a6)
		move.l	d0,a5
		lea	Intname(pc),a1		open int-lib
		clr.l	d0
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,a0
		lea	OldOpen(pc),a1
		move.l	_LVOOpenWindow+2(a0),(a1)	save old OpenWindow ptr
		move.l	a5,_LVOOpenWindow+2(a0)	set new OpenWindow ptr
		lea	NewOpen(pc),a0		copy new routine
		move.l	#NewOpenEnd-NewOpen-1,d0
CopyNew		move.b	(a0)+,(a5)+
		dbra	d0,CopyNew

* Kill Fastmem optionally

		btst	#6,$bfe001
		bne.s	NoAllocFast
AllocFast	move.l	#32768,d7		Start with 60000 bytes
AllocLoop_1	move.l	d7,d0			Alloc mem
		move.l	#MEMF_FAST,d1
		jsr	_LVOAllocMem(a6)
		tst.l	d0
		bne.s	AllocLoop_1
		lsr.l	#1,d7			half size
		tst.l	d7
		bne.s	AllocLoop_1
		move.w	#$404,$dff180		set color
		move.w	#$404,$dff182
		move.w	#$404,$dff184
		move.w	#$404,$dff186
NoAllocFast	

* DOS stuff

NoBB		movem.l	(sp)+,d0-d7/a0-a6
		rts

* New _LVOOpenWindow routine

NewOpen		move.w	#256,6(a0)		set new height
		lea	Windowtitle(pc),a1	set new title
		move.l	a1,$1a(a0)
		move.l	OldOpen(pc),_LVOOpenWindow+2(a6)
		jsr	_LVOOpenWindow(a6)
		movem.l	d0-d7/a0-a6,-(sp)
		move.l	4.w,a6
		jsr	_LVOForbid(a6)
		lea	Topazname(pc),a0	set ptr
		lea	Topazstruct(pc),a1
		move.l	a0,(a1)
		lea	Gfxname(pc),a1		open gfx-lib
		clr.l	d0
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,a5
		move.l	#TurboEnd-TurboText+8*256,d0
		move.l	#MEMF_CLEAR!MEMF_PUBLIC,d1
		jsr	_LVOAllocMem(a6)
		lea	TTBase(pc),a0
		move.l	d0,(a0)
		lea	OldText+2(pc),a0
		move.l	_LVOText+2(a5),(a0)
		move.l	TTBase(pc),_LVOText+2(a5)
		move.l	#92*8,d0		Mem for text-plane (blit)
		move.l	#MEMF_CLEAR!MEMF_CHIP!MEMF_PUBLIC,d1
		jsr	_LVOAllocMem(a6)
		lea	PlaneMem(pc),a0
		move.l	d0,(a0)
		move.l	a5,a6
		lea	TopazStruct(pc),a0
		jsr	_LVOOpenFont(a6)
		lea	TT_Font(pc),a0
		move.l	d0,(a0)
		move.l	d0,a0
		lea	Basel_store+2(pc),a1
		move.w	tf_BaseLine(a0),(a1)
		move.l	TTBase(pc),a2
		add.l	#CharMem-TurboText,a2
		moveq	#31,d0
Create_0to31	move.b	#%00010000,(a2)+
		move.b	#%00111000,(a2)+
		move.b	#%00111000,(a2)+
		move.b	#%01101100,(a2)+
		move.b	#%01101100,(a2)+
		move.b	#%11111110,(a2)+
		move.b	#%11111110,(a2)+
		move.b	#%00000000,(a2)+
		dbra	d0,Create_0to31
		move.l	TT_Font(pc),a5
		clr.l	d4
		move.w	tf_Modulo(a5),d4
		move.l	tf_CharData(a5),a5
		moveq	#95,d1
Convert_Topaz	move.l	a5,a4
		moveq	#7,d0
Convert_Char	move.b	(a4),(a2)+
		add.l	d4,a4
		dbra	d0,Convert_Char
		addq.l	#1,a5
		dbra	d1,Convert_Topaz
		moveq	#31,d0
Create_128to159	move.b	#%00010000,(a2)+
		move.b	#%00111000,(a2)+
		move.b	#%01101100,(a2)+
		move.b	#%11000110,(a2)+
		move.b	#%01101100,(a2)+
		move.b	#%00111000,(a2)+
		move.b	#%00010000,(a2)+
		move.b	#%00000000,(a2)+
		dbra	d0,Create_128to159
		moveq	#95,d1
Convert_Topaz2	move.l	a5,a4
		moveq	#7,d0
Convert_Char2	move.b	(a4),(a2)+
		add.l	d4,a4
		dbra	d0,Convert_Char2
		addq.l	#1,a5
		dbra	d1,Convert_Topaz2
		lea	TurboText(pc),a0
		move.l	TTBase(pc),a1		Copy tt to MEMF_PUBLIC
		move.l	#TurboEnd-TurboText-1,d0
Copy_TT		move.b	(a0)+,(a1)+
		dbra	d0,Copy_TT
		jsr	_LVOPermit(a6)
		movem.l	(sp)+,d0-d7/a0-a6
		rts

OldOpen		ds.l	1
Gfxname		dc.b	"graphics.library",0
		even
TopazStruct	dc.l	0
		dc.w	8
		dc.b	0,0
TopazName	dc.b	"topaz.font",0
		even

* New _LVOText routine

TurboText	cmp.w	#90,d0
		bhi	OldText
		tst.w	d0
		beq	TTExit
		move.l	TT_Font(pc),d1
		cmp.l	rp_Font(a1),d1
		bne	OldText
		tst.b	rp_AlgoStyle(a1)
		bne	OldText
		movem.l	d2-d6/a2-a5,-(sp)
		move.l	PlaneMem(pc),a4
		lea	CharMem(pc),a2
		moveq	#0,d6
		tst.b	-16(a2)
		bne.s	GetMem
		bset.b	#1,-16(a2)
		bra.s	Continue
GetMem		movem.l	d0/a0-a1,-(sp)
		move.l	a6,d5
		move.l	4.w,a6
		move.l	#92*8,d0
		move.l	#MEMF_CLEAR!MEMF_CHIP!MEMF_PUBLIC,d1
		jsr	_LVOAllocMem(a6)
		move.l	d0,a4
		move.l	d0,d6
		movem.l	(sp)+,d0/a0-a1
		move.l	d5,a6
Continue	move.l	a4,a5
		move.l	d0,d4
		subq.w	#1,d0
Create_Text	moveq	#0,d2
		move.b	(a0)+,d2
		lsl.w	#3,d2
		move.l	a2,a3
		add.w	d2,a3
		move.b	(a3)+,(a4)+
		move.b	(a3)+,0*92+91(a4)
		move.b	(a3)+,1*92+91(a4)
		move.b	(a3)+,2*92+91(a4)
		move.b	(a3)+,3*92+91(a4)
		move.b	(a3)+,4*92+91(a4)
		move.b	(a3)+,5*92+91(a4)
		move.b	(a3)+,6*92+91(a4)
		dbra	d0,Create_Text
		move.l	a5,a0
		moveq	#0,d0
		moveq	#92,d1
		movem.w	rp_cp_x(a1),d2-d3
Basel_store	sub.w	#$1234,d3
		lsl.w	#3,d4
		add.w	d4,rp_cp_x(a1)
		moveq	#8,d5
		jsr	_LVOBltTemplate(a6)
WaitBlt		btst	#14,$dff002
		bne.s	WaitBlt
		tst.l	d6
		beq.s	No_Mem
		move.l	d6,a1
		move.l	#92*8,d0
		move.l	a6,a5
		move.l	4.w,a6
		jsr	_LVOFreeMem(a6)
		move.l	a5,a6
		bra.s	Leave
No_Mem		lea	BusyFlag(pc),a2
		clr.b	(a2)
Leave		movem.l	(sp)+,d2-d6/a2-a5
TTExit		rts

OldText		jmp	$fffffe			Dummy

BusyFlag	dc.l	0
PlaneMem	dc.l	0
TT_Font		dc.l	0
TTBase		dc.l	0
CharMem		ds.b	2
		even

TurboEnd

WindowTitle	dc.b	"NewBoot V1.1 by André Wichmann of CLUSTER.",0
		even

NewOpenEnd

Dosname		dc.b	"dos.library",0
		even
Intname		dc.b	"intuition.library",0
		even

		cnop	0,32
		dc.b	"!!! THIS IS NO VIRUS !!! -AW-"
		ds.b	128
		even

