;************************************************
;*	 Non-system virus check bootblock	*
;*    An example of how to make Boot Blocks	*
;*						*
;*   AsmOne example coded by Rune Gram-Madsen	*
;*						*
;*   All rights reserved. Copyright (c) 1990	*
;************************************************

WriteFlag = 1	; 1 to write bootblock

;*****************
;*   Constants   *
;*****************

	IF	WriteFlag=1
	AUTO	WS\BEGIN\0\2\CC\
	ENDC

DMASET=		%1000000110000000
;		 -----a-bcdefghij

;		a: Blitter Nasty
;		b: Bitplane DMA (if this isn't set sprites disapear!)
;		c: Copper DMA
;		d: Blitter DMA
;		e: Sprite DMA
;		f: Disk DMA
;	      g-j: Audio 3-0 DMA

OpenLibrary=	-408
CloseLibrary=	-414
OpenFont=	-72
AllocRaster=	-492
FreeRaster=	-498

START	MOVE.W	#$4E75,EndAddr	; Put RTS into code
	BRA.B	GO

;*******  Boot block  *******

BEGIN	DC.B	'DOS',0
	DC.L	0
	DC.L	880

; A5 / FONTPTR
; D7 / MODULU

	RSRESET

OldCopper	RS.L	1
ScreenPtr	RS.L	1

GO:	MOVEM.L	D0-D7/A0-A6,-(A7)
	LEA.L	START(PC),A4
	MOVE.L	$4.W,A6
	LEA.L	GRAPNAME(PC),A1		; Gfx Name
	MOVEQ	#0,D0
	JSR	OPENLIBRARY(A6)
	MOVE.L	D0,A6			; Gfx Base
	MOVE.L	$26(A6),OldCopper(A4)	; Get old Copper Ptr.

;---  Get charset  ---

	LEA	TEXTATTR(PC),A0
	LEA	FONTNAME(PC),A1
	MOVE.L	A1,(A0)
	JSR	OPENFONT(A6)
	MOVE.L	D0,A0
	MOVE.L	34(A0),A5		; Bit ptr
	MOVE.W	38(A0),D7		; Modulo

;---  Allocate Raster  ---

	MOVE.W	#320,D0			; Width
	MOVE.W	#260,D1			; Higth
	JSR	AllocRaster(A6)
	MOVE.L	D0,ScreenPtr(A4)

;--- Clear screen  ---

	MOVE.L	D0,A0
	MOVE.W	#320/8*260/4-1,D1	; Clear 320/8 bytes wide
	MOVEQ	#0,D2			; times 260 bytes high
.LOOPC	MOVE.L	D2,(A0)+		; in longwords / 4
	DBF	D1,.LOOPC

;---  Set BPL ptrs  ---

	LEA.L	BITPLANES+2(PC),A0
	MOVEQ	#40,D1
	ADD.L	D0,D1
	SWAP	D0		; High word of pointer
	MOVE.W	D0,(A0)		; Store high 1
	ADDQ.W	#4,A0
	SWAP	D0		; Low word of pointer
	MOVE.W	D0,(A0)		; Store low 1
	ADDQ.W	#4,A0
	SWAP	D1		; High word of pointer
	MOVE.W	D1,(A0)		; Store high 2
	ADDQ.W	#4,A0
	SWAP	D1		; Low word of pointer
	MOVE.W	D1,(A0)		; Store low 2

	MOVE.L	A6,-(A7)	; Store Graphics library base

;---  Set DMA registers  ---

	MOVE.L	#$DFF000,A6
	MOVE.W	$1C(A6),-(A7)		; Store old inter data
	MOVE.W	$02(A6),-(A7)		; Store old DMA data
	MOVE.L	#$7FFF7FFF,$9A(A6)	; Disable interrupts
	MOVE.W	#$7FFF,$96(A6)		; Disable all DMA's

	LEA	COPLIST(PC),A0
	MOVE.L	A0,$80(A6)		; Copper1 start adress
	MOVE.W	#DMASET!$8200,$96(A6)	; Enable DMA's
	CLR.W	$88(A6)			; Start copper1

; A5 = CHARSET
; D7 = CHARDIST

PRINTTEXT:
	MOVE.L	ScreenPtr(A4),A1	; Screenptr
	LEA.L	TEXT(PC),A0
	ADD.W	#40,A1
	MOVEQ	#0,D1
.LOOP0
	MOVEQ	#0,D0
	MOVE.B	(A0)+,D0		; Get char
	BEQ.S	.END			; Last char ???

	CMP.B	#10,D0			; A return char
	BNE.S	.CONT
	MOVEQ	#0,D1			; first column
	ADD.W	#40*8,A1		; next line
	BRA.S	.LOOP0			; Get next char

.CONT	CMP.B	#1,D0			; Space mark
	BNE.S	.CONT2
	MOVE.B	(A0)+,D0		; Get spaces
	ADD.W	D0,D1			; Add spaces
	BRA.S	.LOOP0

.CONT2	MOVE.L	A1,A2			; a2 = screen ptr
	ADD.W	D1,A2			; a2 = screen char ptr
	MOVE.L	A5,A3
	SUB.W	#$20,D0
	ADD.W	D0,A3			; A3 = Char pointer

	MOVEQ	#8-1,D0			; copy 8 bytes
.LOOP1	MOVE.B	(A3),(A2)		; Copy one byte from char
	ADD.W	D7,A3			; next byte in char
	ADD.W	#40,A2			; next raster line
	DBF	D0,.LOOP1		; Loop ^
	ADDQ.W	#1,D1			; move 1 right
	BRA.S	.LOOP0			; Loop ^^

.END	BTST	#6,$BFE001		; Wait mouse
	BNE.S	.END			; Pressed ???

;---  The End  ---

	MOVE.L	#$7FFF7FFF,$9A(A6)	; Disable interrupts
	OR.L	#$8000C000,(A7)		; Set enable bits
	MOVE.W	(A7)+,$96(A6)		; Enable interruptr
	MOVE.W	(A7)+,$9A(A6)		; Restore old inter data
	MOVE.L	OldCopper(A4),$80(A6)	; Restore old copper ptr
	CLR.W	$88(A6)			; Start Copper

;---  DeAllocate Raster  ---

	MOVE.L	(A7)+,A6
	MOVE.L	ScreenPtr(A4),A0
	MOVE.W	#320,D0			; Width
	MOVE.W	#260,D1			; Higth
	JSR	FreeRaster(A6)

	MOVE.L	A6,A1			; Close graphics library
	MOVE.L	$4.W,A6
	JSR	CLOSELIBRARY(A6)

	MOVEM.L	(A7)+,D0-D7/A0-A6

EndAddr	MOVE.L	$0004.W,A6
	LEA	DOSNAME(PC),A1
	MOVE.W	#'do',(A1)
	JSR	-96(A6)
	MOVE.L	D0,A0
	MOVE.L	22(A0),A0
	MOVEQ	#0,D0
	RTS

TEXTATTR:
	DC.L	0
	DC.W	8
	DC.B	0
	DC.B	0
	DC.W	8
FONTNAME:	DC.B	'topaz.font',0
GRAPNAME:	DC.B	'graph'
DOSNAME:	DC.B	'ics.library',0

;*****************************
;*			     *
;*      COPPER1 PROGRAM      *
;*			     *
;*****************************

COPLIST:
	DC.L	$01820800
	DC.L	$01840f00
	DC.L	$01860b00
	DC.L	$01A20AAA
	DC.L	$01A40666
	DC.L	$01A60FFF
BITPLANES:
	DC.L	$00E00000
	DC.L	$00E20000
	DC.L	$00E40000
	DC.L	$00E60000
	DC.L	$01002200
	DC.L	$01020001
	DC.L	$01040000
	DC.L	$01080000
	DC.L	$010A0000
	DC.L	$008E2C78
	DC.L	$00902CC8
	DC.L	$00920038
	DC.L	$009400D0
	DC.L	$01800000
	DC.L	$3007FFFE
	DC.L	$01800003
	DC.L	$4007FFFE
	DC.L	$01800003
	DC.L	$5007FFFE
	DC.L	$01800005
	DC.L	$6007FFFE
	DC.L	$01800007
	DC.L	$7007FFFE
	DC.L	$01800009
	DC.L	$8007FFFE
	DC.L	$0180000b
	DC.L	$9007FFFE
	DC.L	$0180000d
	DC.L	$A007FFFE
	DC.L	$0180000f
	DC.L	$B007FFFE
	DC.L	$0180000f
	DC.L	$C007FFFE
	DC.L	$0180000d
	DC.L	$D007FFFE
	DC.L	$0180000b
	DC.L	$E007FFFE
	DC.L	$01800009
	DC.L	$F007FFFE
	DC.L	$01800007
	DC.L	$FFDFFFFE
	DC.L	$0007FFFE
	DC.L	$01800005
	DC.L	$1007FFFE
	DC.L	$01800003
	DC.L	$2007FFFE
	DC.L	$01800001
	DC.L	$FFFFFFFE

TEXT:
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	1,8,'    Anderz Karlsson',10
 DC.B	10
 DC.B	1,12,'Samernas konung',10
 DC.B	10
 DC.B	1,6,'Samerna har det bra pa manen!',10
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	1,2,'---  NO VIRUS ON THIS BOOTBLOCK  ---',10
 DC.B	10
 DC.B	10
 DC.B	10
 DC.B	1,6,'! Kill the rat to continue !',0

END:
	IF	END-BEGIN>1024
	FAIL
	ENDC
