;----------------------------------------------------------------------------
; (c) 2015 by Mr.Spiv of Scoopex
;
; Ultra simple & ugly bootblock intro!
;
;

		incdir	"data:devel/asm/include_i/"
		include	"exec/types.i"
		include	"exec/libraries.i"
		include	"exec/macros.i"
		include	"exec/exec_lib.i"
		include	"exec/execbase.i"
		include	"graphics/gfx.i"
		include	"graphics/rastport.i"
		include	"graphics/graphics_lib.i"
		include	"graphics/text.i"
		include	"devices/trackdisk.i"


		rsreset
logobase:	rs.l	2
dmacon		rs.w	1
scrollx:	rs.l	1
gfxbase		rs.l	1
rastport	rs.b	rp_SIZEOF
bitmap		rs.b	bm_SIZEOF
textattr	rs.b	ta_SIZEOF
stackend	rs.l	0

; write bootblock into the disk
		AUTO	ws\s\0\2\cc\

;
scrollsize	EQU	(1024/8)*2
bplsize		EQU	42*256*3
memsize		EQU	bplsize+(scrollsize*9)


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

		org	$6fc00		; ugly absolute address stuff


s:		dc.b	"DOS",0		; OFS
		dc.l	0
		dc.l	880

;----------------------------------------------------------------------------
;BootBlock starts - read code into CHIP RAM
;----------------------------------------------------------------------------

j:		movem.l	d1-d7/a1-a6,-(sp)
		;move.l	$4.w,a6		; during boot this is provided
		;bra.b	codesta
		; A1=trackdisk device
		;
		clr.l	IO_OFFSET(a1)
		move.l	#$6fc00,IO_DATA(a1)
		move.l	#1024,IO_LENGTH(a1)
		move	#CMD_READ,IO_COMMAND(a1)
doio:		jsr	_LVODoIO(a6)
		jmp	$6fc00+codesta-s
		

codesta:	lea	-stackend(sp),sp
		move.l	sp,a4
		jsr	_LVODisable(a6)

; Clear mem
		lea	$70000,a0
		move.l	a0,a3
		moveq	#0,d0
.clear:		clr.l	(a0)+
		addq.w	#4,d0
		bne.b	.clear

;----------------------------------------------------------------------------
;Open graphics.library
;----------------------------------------------------------------------------
		lea	gfxlibname(pc),a1
		jsr	_LVOOldOpenLibrary(a6)
		move.l	d0,gfxbase(a4)		; gfxbase
		beq.w	gfx_error		; We assume no errors
		move.l	d0,a6			; A6=gfxbase

;----------------------------------------------------------------------------
;Initialize BitMap structure & pointers to bitplane
;----------------------------------------------------------------------------
		lea	bitmap(a4),a0
		move.l	a0,a2
		moveq	#1,d0
		move.w	#256*8,d1			; D1=2048
		moveq	#8,d2
		jsr	_LVOInitBitMap(a6)
		move.l	a3,bm_Planes(a2)
		add.w	#scrollsize*9,a3

		; set bitplane pointers for logos
		lea	logo1bpl+2(pc),a0
		lea	42*48(a3),a1
		movem.l	a1/a3,(a4)
		move.w	a1,(a0)				; logo 1
		move.w	a3,logo2bpl-logo1bpl(a0)	; logo 2

;----------------------------------------------------------------------------
;Initialize RasterPort structure
;----------------------------------------------------------------------------
		lea	rastport(a4),a1
		move.l	a1,a3
		jsr	_LVOInitRastPort(a6)
		move.l	a2,rp_BitMap(a3)	;a3=rastport <=> don't trash

;----------------------------------------------------------------------------
;Open topaz.font (rom)
;A3=rastport
;----------------------------------------------------------------------------
		lea	textattr+ta_SIZEOF(a4),a0
		lea	fontname(pc),a1
		move.l	#$00080000,-(a0)	;ta_YSize
		move.l	a1,-(a0)		;ta_Name
		jsr	_LVOOpenFont(a6)

;----------------------------------------------------------------------------
;And set font to topaz.font
;----------------------------------------------------------------------------
		move.l	d0,a0
		move.l	d0,a2
		move.l	a3,a1
		jsr	_LVOSetFont(a6)

;----------------------------------------------------------------------------
;Print scroll text into bitmap
;----------------------------------------------------------------------------
		move.w	#320,d0			; D0=1024
		move.w	tf_Baseline(a2),d1
		move.l	a3,a1
		jsr	_LVOMove(a6)

		lea	scrolltext(pc),a0
		move.l	a3,a1
		moveq	#0,d0
		move.b	(a0)+,d0
		jsr	_LVOText(a6)
		
		move.l	a2,a1
		jsr	_LVOCloseFont(a6)

;------------------------------------------------------------------------------
;Dma setup - screen to black
;------------------------------------------------------------------------------
		;
hardreg:	lea	$dff096,a5
		move.w	$002-$96(a5),d0
		or.w	#$8000,d0
		move.w	#$01a0,(a5)
		move.w	d0,dmacon(a4)		; dmacon
		clr.l	$140-$96(a5)
		;
		lea	coplist(pc),a0
		move.l	a0,$080-$96(a5)
		move.w	#$8380,(a5)

		clr.l	scrollx(a4)		;
		bsr.w	printLogo

;------------------------------------------------------------------------------
;Move mouse pointer loop
;------------------------------------------------------------------------------
mouse:		btst	#5,$1f-$96(a5)
		beq.b	mouse
		move.w	#$0020,$9c-$96(a5)

		bsr.b	scroll

		btst	#6,$bfe001
		bne.b	mouse

		; restore
		move	#$7fff,(a5)
		move.l	gfxbase(a4),a6
		move.l	38(a6),$080-$96(a5)
		move.w	dmacon(a4),(a5)
		move.l	a6,a1
		move.l	$04.w,a6
		jsr	_LVOCloseLibrary(a6)

;----------------------------------------------------------------------------
;Error exit part... restore system
;----------------------------------------------------------------------------
gfx_error:	lea	stackend(sp),sp
		jsr	_LVOEnable(a6)
		;
		lea	doslibname(pc),a1
		move.w	#"do",(a1)
		jsr	_LVOFindResident(a6)
		movem.l	(sp)+,d1-d7/a1-a6
		move.l	d0,a0
		tst.l	d0
		beq.s	boot_error
		move.l	22(a0),a0
		moveq	#0,d0
		rts

boot_error:	moveq	#-1,d0
		rts

;----------------------------------------------------------------------------
; The "intro"
;----------------------------------------------------------------------------

scroll:		lea	2+scrollbpl(pc),a1
		move.l	scrollx(a4),d1
		move.l	d1,d3
		addq.w	#1,d1
		and.w	#$3ff,d1
		move.l	d1,scrollx(a4)
		move.w	d1,d2
		move.w	d1,d3
		;
		not.w	d2
		and.w	#$000f,d2
		lsr.w	#3,d1
		;
		move.w	d1,(a1)
		move.w	d2,4(a1)
		;

colfade:	moveq	#$40,d4
		lsr.w	#2,d3
		moveq	#32,d2
		moveq	#63,d1
		and.w	d1,d3
		cmp.w	d2,d3
		bhs.b	.bpl0
		moveq	#$00,d4
.bpl0:		add.w	d3,d2
		and.w	d1,d2

		lea	fade(pc),a1
		lea	logo1col+3(pc),a0
		move.b	0(a1,d3.w),(a0)
		move.b	0(a1,d2.w),logo2col-logo1col(a0)
		move.b	d4,bplpri-logo1col(a0)
		rts

printLogo:	move.l	(a4),a0		; logobase
		lea	flashtro(pc),a2
		bsr.b	.draw
		lea	scoopex(pc),a2
		move.l	4(a4),a0	; logobase+4
		;
.draw:		addq.l	#2,a0
		moveq	#6-1,d0
.line:		moveq	#5-1,d1
		move.l	a0,-(sp)
.char:		moveq	#8-1,d2
		move.b	(a2)+,d3
.plot:		moveq	#0,d4
		add.b	d3,d3
		bcc.b	.clr
		moveq	#-2,d4		; #%11111110,d4
.clr:		move.b	d4,(a0)+
		dbf	d2,.plot
		dbf	d1,.char
		;
		moveq	#42/2*6-1,d1
		move.l	(sp)+,a1
		clr.w	(a0)+
.copy:		move.w	(a1)+,(a0)+
		dbf	d1,.copy
		lea	42(a0),a0
		;
		dbf	d0,.line
		rts

;------------------------------------------------------------------------------
;All other datas...
;------------------------------------------------------------------------------
		dc.b	0
gfxlibname:	dc.b	"graph"
doslibname:	dc.b	"ics.library",0
fontname:	dc.b	"topaz.font",0
scrolltext:	dc.b	et-st
			;1        1         2         3         4         5
st:		dc.b	"Scoopex & Flashtro releases in 2015 'Smarty and "
		dc.b	"the Nasty Gluttons' playable preview. "
et:		cnop	0,2

coplist:	dc.l	$01002600,$01060c00,$010c0011
bplpri:		dc.l	$01040064
		dc.l	$01fc0000,$008e5c81,$00902cc1,$01020000
		dc.l	$00e00007,$00e40007	; high bpl pointers
		dc.l	$00920030,$009400d0,$01080000,$010a0000
		dc.l	$01800000
logo1col:	dc.l	$01820000
logo2col:	dc.l	$01920000
		dc.l	$5b01fffe
logo1bpl:	dc.l	$00e20000
logo2bpl:	dc.l	$00e60000
		dc.l	$8c01fffe,$01000200
		dc.l	$a801fffe,$010800d6,$01001200
;scrollcol:	dc.l	$01820148
scrollbpl:	dc.l	$00e20000,$01020000
		dc.l	$b001fffe,$01000200,$fffffffe


fade:	dc.b	$b,$b,$c,$c,$d,$d,$e,$e
	dc.b	$e,$f,$f,$f,$f,$f,$f,$f
	dc.b	$f,$f,$f,$f,$f,$f,$f,$f
	dc.b	$e,$e,$e,$d,$d,$c,$c,$b
	dc.b	$b,$a,$a,$9,$8,$8,$7,$6
	dc.b	$6,$5,$4,$3,$3,$2,$1,$0

	dc.b	$0,$0,$1,$2,$3,$3,$4,$5
	dc.b	$6,$6,$7,$8,$8,$9,$a,$a


flashtro:
	dc.b	%11110110,%00011000,%11101101,%01111011,%10001100
	dc.b	%11000110,%00110101,%10001101,%01100011,%01011010
	dc.b	%11100110,%00111100,%01101111,%01100011,%10011010
	dc.b	%11000110,%00110100,%00101101,%01100011,%01011010
	dc.b	%11000110,%00110100,%00101101,%01100011,%01011010
	dc.b	%11000111,%10110101,%11001101,%01100011,%01001100
scoopex:
	dc.b	%00001110,%01110011,%00011001,%11001111,%01101000
	dc.b	%00011000,%11000110,%10110101,%10101100,%00010000
	dc.b	%00001100,%11000110,%10110101,%11001110,%00010000
	dc.b	%00000010,%11000110,%10110101,%10001100,%01101000
	dc.b	%00000010,%11000110,%10110101,%10001100,%01101000
	dc.b	%00011100,%01110011,%00011001,%10001111,%01101000

	dc.b	"Lousy & quick code work by Mr.Spiv"

copend:		dcb.b	1024-(copend-s),0

e:
