
	SECTION TutDemo,CODE
	JUMPPTR Start

	INCDIR ""
	INCLUDE "PhotonsMiniStartup/PhotonsMiniWrapper1.02!.S"
	INCLUDE "Blitter-Register-List.S"
	INCLUDE "P61-Options.S"

;;    ---  screen buffer dimensions  ---

w	=352
h	=256
bplsize	=w*h/8
ScrBpl	=w/8

;;    ---  logo dimensions  ---

logow		=320
logoh		=99
logomargin	=(320-logow)/2
logobpl		=logow/8
logobwid	=logobpl*3

;;    ---  font dimensions  ---
fontw		=288
fonth		=100
fontbpls	=3
FontBpl		=fontw/8

plotY	=110
plotX	=w-32

logobgcol	=$44f
bgcol		=$225


********************  MACROS  ********************

logocolors:macro
	dc.w $068e,$0adf,$0dff
	dc.w $09bf,$056d,$044b,$033a
	endm

********************  DEMO  ********************


Demo:
	move.w #$87e0,$dff096

	bsr Init

	move.l #copper,$dff080
	move.l #VBint,$6c(a4)		;set vertb interrupt vector compatibly.
	move.w #$c020,$dff09a		;enable interrupts generally
					;and vertb specifically.

;;    ---  Call P61_Init  ---
	movem.l d0-a6,-(sp)

	lea Module1,a0
	sub.l a1,a1
	sub.l a2,a2
	moveq #0,d0
	jsr P61_Init

	movem.l (sp)+,d0-a6

	bsr Main

	movem.l d0-a6,-(sp)
	jsr P61_End
	movem.l (sp)+,d0-a6
	rts			;go back to system friendly wrapper exit.

********** ROUTINES **********
Main:
	movem.l d0-a6,-(sp)

**************************


WaitMouse:
	btst #6,$bfe001
	bne.w WaitMouse

**************************

	movem.l (sp)+,d0-a6
	rts

********************  Effect 1 subroutine  ********************

Part1:
	movem.l d0-a6,-(sp)
	bsr BounceScroller

	lea StarSpr,a1
	moveq #$2c,d0
	moveq #64-1,d7
.l7:	
	move.b d0,(a1)+			;vstart
	addq.b #1,(a1)+			;add speed to hpos
	addq.b #1,d0			;increase vstop value
	move.b d0,(a1)+			;vstop
	addq.b #1,d0			;increase vstop value
	addq.w #5,a1			;skip to next sprite control words

	move.b d0,(a1)+
	addq.b #2,(a1)+
	addq.b #1,d0
	move.b d0,(a1)+
	addq.b #1,d0			;increase vstop value
	addq.w #5,a1

	move.b d0,(a1)+
	addq.b #1,(a1)+
	addq.b #1,d0
	move.b d0,(a1)+
	addq.b #1,d0			;increase vstop value
	addq.w #5,a1

	move.b d0,(a1)+
	addq.b #3,(a1)+
	addq.b #1,d0
	move.b d0,(a1)+
	addq.b #1,d0			;increase vstop value
	addq.w #5,a1

	dbf d7,.l7	


;;    ---  sine lookup for raster bar vert. pos.  ---

	lea Sine,a0
	move.w SineCtr,d6
	move.w #$4d-6+37,d7
	add.w (a0,d6.w),d7

	addq.w #2,d6
	cmp.w #SineEnd-Sine,d6
	blt.s .nowrap2
	moveq #0,d6
.nowrap2:
	move.w d6,SineCtr

;;    ---  in front or behind flag  ---

	lea BarInFront,a2	;default source address for RGB color values 
	cmp.w #50*2,d6
	blt.s .behind
	cmp.w #150*2,d6
	bge.s .behind
	bra.s .cont
.behind:
	lea BarBehind,a2
.cont:

	lea waitras1,a0
	move d7,d0
	moveq #6-1,d1
.l:
	move.b d0,(a0)
	add.w #1,d0

	move.w (a2)+,d2			;background color from list
	move.w d2,6(a0)
	move.w (a2)+,6+4*1(a0)
	move.w (a2)+,6+4*2(a0)
	move.w (a2)+,6+4*3(a0)
	move.w (a2)+,6+4*4(a0)
	move.w (a2)+,6+4*5(a0)
	move.w (a2)+,6+4*6(a0)
	move.w (a2)+,6+4*7(a0)

	add.w #4*9,a0			;step to next.
	DBF d1,.l

	bsr Scrollit

	moveq #32,d2
	move.b LastChar(PC),d0
	cmp.b #'I',d0
	bne.s .noi
	moveq #16,d2
.noi:
	move.w ScrollCtr(PC),d0
	addq.w #4,d0
	cmp.w d2,d0
	blo.s .nowrap

	move.l ScrollPtr(PC),a0
	cmp.l #ScrollTextWrap,a0
	blo.s .noplot
	lea ScrollText(PC),a0
.noplot:
	bsr PlotChar			;preserves a0

	addq.w #1,a0
	move.l a0,ScrollPtr

	clr.w d0
.nowrap:
	move.w d0,ScrollCtr
	movem.l (sp)+,d0-a6
	rts


VBint:					;Blank template VERTB interrupt
	movem.l d0-a6,-(sp)		;Save used registers
	lea $dff000,a6
	btst #5,$1f(a6)			;INTREQR check if it's our vertb int.
	beq.s .notvb

	bsr Part1

	moveq #$20,d0			;poll irq bit
	move.w d0,$9c(a6)		;$dff09c=INTREQ
	move.w d0,$9c(a6)
.notvb:	movem.l (sp)+,d0-a6		;restore
	rte


row	=288*3*20/8
col	=4

PlotChar:	;a0=scrollptr
	movem.l d0-a6,-(sp)
	lea $dff000,a6
	bsr BlitWait

	moveq #0,d0
	move.b (a0)+,d0			;ASCII value
	move.b d0,LastChar

	sub.w #32,d0
	lea FontTbl(PC),a0
	move.b (a0,d0.w),d0
	divu #9,d0			;row
	move.l d0,d1
	swap d1				;remainder (column)

	mulu #row,d0
	mulu #col,d1

	add.l d1,d0			;offset into font bitmap
	add.l #Font,d0

	move.l #$09f00000,BLTCON0(a6)
	move.l #$ffffffff,BLTAFWM(a6)
	move.l d0,BLTAPTH(a6)
	move.l #Screen+ScrBpl*3*plotY+plotX/8,BLTDPTH(a6)
	move.w #FontBpl-col,BLTAMOD(a6)
	move.w #ScrBpl-col,BLTDMOD(a6)

	move.w #20*3*64+2,BLTSIZE(a6)
	movem.l (sp)+,d0-a6
	rts

Scrollit:
;;    ---  scroll!  ---
bltoffs	=plotY*ScrBpl*3

blth	=20
bltw	=w/16
bltskip	=0				;modulo
brcorner=blth*ScrBpl*3-2

	movem.l d0-a6,-(sp)
	lea $dff000,a6
	bsr BlitWait

	move.l #$49f00002,BLTCON0(a6)
	move.l #$ffffffff,BLTAFWM(a6)
	move.l #Screen+bltoffs+brcorner,BLTAPTH(a6)
	move.l #Screen+bltoffs+brcorner,BLTDPTH(a6)
	move.w #bltskip,BLTAMOD(a6)
	move.w #bltskip,BLTDMOD(a6)

	move.w #blth*3*64+bltw,BLTSIZE(a6)
	movem.l (sp)+,d0-a6
	rts

Init:
	movem.l d0-a6,-(sp)

	moveq #0,d1
	lea Screen,a1
	move.w #bplsize*fontbpls/2-1,d0
.l:	move.w #0,(a1)+
	addq.w #1,d1
	dbf d0,.l

	lea Logo,a0		;ptr to first bitplane of logo
	lea CopBplP,a1		;where to poke the bitplane pointer words.
	move #3-1,d0
.bpll:
	move.l a0,d1
	swap d1
	move.w d1,2(a1)		;hi word
	swap d1
	move.w d1,6(a1)		;lo word

	addq #8,a1		;point to next bpl to poke in copper
	lea LogoBpl(a0),a0
	dbf d0,.bpll

	lea SprP,a1
	lea StarSpr,a0
	move.l a0,d1
	swap d1
	move.w d1,2(a1)
	swap d1
	move.w d1,6(a1)


	lea NullSpr,a0
	move.l a0,d1
	moveq #7-1,d0
.sprpl:
	addq.w #8,a1
	swap d1
	move.w d1,2(a1)
	swap d1
	move.w d1,6(a1)
	DBF d0,.sprpl

	lea FontE-7*2,a0
	lea FontPalP+2,a1
	moveq #7-1,d0
.coll:	move.w (a0)+,(a1)+
	addq.w #2,a1
	DBF d0,.coll

	movem.l (sp)+,d0-a6
	rts

CopyB:	;d0,a0,a1=count,source,destination
.l:	move.b (a0)+,(a1)+
	subq.l #1,d0
	bne.s .l
	rts

BlitWait:
	tst DMACONR(a6)			;for compatibility
.waitblit:
	btst #6,DMACONR(a6)
	bne.s .waitblit
	rts

BounceScroller:
	MOVEM.L D0-A6,-(SP)

	lea Screen,a0		;ptr to first bitplane of font
	move.w BounceY(PC),d0
	move.w BounceYaccel(PC),d1
	add.w d1,BounceYspeed
	add.w BounceYspeed(PC),d0
	bpl.s .nobounce
	move.w #32,BounceYspeed
	clr.w d0
.nobounce:
	move.w d0,BounceY

	lsr.w #3,d0

	mulu #3*scrbpl,d0
	add.l d0,a0

	lea ScrBplP,a1		;where to poke the bitplane pointer words.
	moveq #fontbpls-1,d0
.bpll2:	move.l a0,d1
	swap d1
	move.w d1,2(a1)		;hi word
	swap d1
	move.w d1,6(a1)		;lo word

	addq #8,a1		;point to next bpl to poke in copper
	lea ScrBpl(a0),a0
	dbf d0,.bpll2

	MOVEM.L (SP)+,D0-A6
	RTS

	even

********** PLAYROUTINE CODE **********
;Note: if this is put in its own section (or compiled as separate binary), then
;jsr <addr>+P61_InitOffset,P61_MusicOffset,P61_EndOffset,P61_SetPositionOffset
;to call the routines.

Playrtn:
	include "P6111/P6111-Play.i"

********** DATA **********
FontTbl:
	dc.b 43,38
	blk.b 5,0
	dc.b 42
	blk.b 4,0
	dc.b 37,40,36,41
	dc.b 26,27,28,29,30,31,32,33,34,35
	blk.b 5,0
	dc.b 39,0
	dc.b 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
	dc.b 22,23,24,25
	EVEN

ScrollPtr:
	dc.l ScrollText
ScrollText:
	dc.b "JUST FOR THE RETRO FEELING OF IT! YOU DIG??"
	blk.b w/32,' '
ScrollTextWrap:

LastChar:dc.b 0
	EVEN
ScrollCtr:
	dc.w 0
BounceY:
	dc.w 48*8
BounceYspeed:
	dc.w 0
BounceYaccel:
	dc.w -1
SineCtr:
	dc.w 0

gfxname:
	dc.b "graphics.library",0
	EVEN

Sine:	INCBIN "Sine.37.200.w"
SineEnd:

	SECTION TutData,DATA_C
StarSpr:
.x:	SET $3457
	REPT 64
.tmpx:	SET ((.x*$751+$deadbeef)/$7)&$ff
	dc.w $2c00+.tmpx,$2d00	;Vstart.b,Hstart/2.b,Vstop.b,%A0000SEH
	dc.w $8000,$0000
.x:	SET (.x+$117)&$ffff
.tmpx:	SET ((.x*$751+$deadbeef)/$7)&$ff
	dc.w $2c00+.tmpx,$2d00	;Vstart.b,Hstart/2.b,Vstop.b,%A0000SEH
	dc.w $0000,$8000
.x:	SET (.x+$117)&$ffff
.tmpx:	SET ((.x*$751+$deadbeef)/$7)&$ff
	dc.w $2c00+.tmpx,$2d00	;Vstart.b,Hstart/2.b,Vstop.b,%A0000SEH
	dc.w $8000,$0000
.x:	SET (.x+$117)&$ffff
.tmpx:	SET ((.x*$751+$deadbeef)/$7)&$ff
	dc.w $2c00+.tmpx,$2d00	;Vstart.b,Hstart/2.b,Vstop.b,%A0000SEH
	dc.w $c000,$c000
.x:	SET (.x+$117)&$ffff
	ENDR
	dc.w 0,0

NullSpr:
	dc.w $2a20,$2b00
	dc.w 0,0
	dc.w 0,0

BarBehind:
	dc.w $558	;color00 value
	logocolors

	dc.w $99d	;color00...
	logocolors

	dc.w $fff
	logocolors

	dc.w $99d
	logocolors

	dc.w $558
	logocolors

	dc.w logobgcol
	logocolors

BarInFront:
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558

	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d

	dc.w $fff
	dc.w $fff
	dc.w $fff
	dc.w $fff
	dc.w $fff
	dc.w $fff
	dc.w $fff
	dc.w $fff

	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d
	dc.w $99d

	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558
	dc.w $558

	dc.w logobgcol
	logocolors

Copper:
	dc.w $1fc,0			;slow fetch mode, AGA compatibility
	dc.w $100,$0200
	dc.b 0,$8e,$2c,$81
	dc.b 0,$90,$2c,$c1
	dc.w $92,$38
	dc.w $94,$d0

	dc.w $108,logobwid-logobpl
	dc.w $10a,logobwid-logobpl

	dc.w $102,0
	dc.w $104,0

	dc.w $1a2,$99b			;sprite colors
	dc.w $1a4,$cce
	dc.w $1a6,$fff
SprP:
	dc.w $120,0
	dc.w $122,0
	dc.w $124,0
	dc.w $126,0
	dc.w $128,0
	dc.w $12a,0
	dc.w $12c,0
	dc.w $12e,0
	dc.w $130,0
	dc.w $132,0
	dc.w $134,0
	dc.w $136,0
	dc.w $138,0
	dc.w $13a,0
	dc.w $13c,0
	dc.w $13e,0

CopBplP:
	dc.w $e0,0
	dc.w $e2,0
	dc.w $e4,0
	dc.w $e6,0
	dc.w $e8,0
	dc.w $ea,0
		
	dc.w $0180,logobgcol
	dc.w $100,$3200
	dc.w $2c07,$fffe

LogoPal:
	dc.w $0180,$044f,$0182,$068e,$0184,$0adf,$0186,$0dff
	dc.w $0188,$09bf,$018a,$056d,$018c,$044b,$018e,$033a

waitras1:
	dc.w $8007,$fffe
	dc.w $180,$558
	dc.w $182,0
	dc.w $184,0
	dc.w $186,0
	dc.w $188,0
	dc.w $18a,0
	dc.w $18c,0
	dc.w $18e,0
waitras2:
	dc.w $8107,$fffe
	dc.w $180,$99d
	dc.w $182,0
	dc.w $184,0
	dc.w $186,0
	dc.w $188,0
	dc.w $18a,0
	dc.w $18c,0
	dc.w $18e,0
waitras3:
	dc.w $8207,$fffe
	dc.w $180,$fff
	dc.w $182,0
	dc.w $184,0
	dc.w $186,0
	dc.w $188,0
	dc.w $18a,0
	dc.w $18c,0
	dc.w $18e,0
waitras4:
	dc.w $8307,$fffe
	dc.w $180,$99d
	dc.w $182,0
	dc.w $184,0
	dc.w $186,0
	dc.w $188,0
	dc.w $18a,0
	dc.w $18c,0
	dc.w $18e,0
waitras5:
	dc.w $8407,$fffe
	dc.w $180,$558
	dc.w $182,0
	dc.w $184,0
	dc.w $186,0
	dc.w $188,0
	dc.w $18a,0
	dc.w $18c,0
	dc.w $18e,0
waitras6:
	dc.w $8507,$fffe
	dc.w $180,logobgcol
	dc.w $182,0
	dc.w $184,0
	dc.w $186,0
	dc.w $188,0
	dc.w $18a,0
	dc.w $18c,0
	dc.w $18e,0

	dc.w $9607,$fffe
	dc.w $100,$0200
	dc.w $96bf,$fffe

FontPalP:
	dc.w $0182,$0ddd,$0184,$0833,$0186,$0334
	dc.w $0188,$0a88,$018a,$099a,$018c,$0556,$018e,$0633

ScrBplP:
	dc.w $e0,0
	dc.w $e2,0
	dc.w $e4,0
	dc.w $e6,0
	dc.w $e8,0
	dc.w $ea,0
	dc.w $108,ScrBpl*FontBpls-320/8
	dc.w $10a,ScrBpl*Fontbpls-320/8
	dc.w $92,$38
	dc.w $94,$d0
	dc.w $100,fontbpls*$1000+$200

	dc.w $9707,$fffe
	dc.w $180,$44e
	dc.w $9807,$fffe
	dc.w $180,$44f
	dc.w $9907,$fffe
	dc.w $180,$44e

	dc.w $9d07,$fffe
	dc.w $180,$44d
	dc.w $9e07,$fffe
	dc.w $180,$44e
	dc.w $9f07,$fffe
	dc.w $180,$44d

	dc.w $a407,$fffe
	dc.w $180,$44c
	dc.w $a507,$fffe
	dc.w $180,$44d
	dc.w $a607,$fffe
	dc.w $180,$44c

	dc.w $ab07,$fffe
	dc.w $180,$43c
	dc.w $ac07,$fffe
	dc.w $180,$44c
	dc.w $ad07,$fffe
	dc.w $180,$43c

	dc.w $b207,$fffe
	dc.w $180,$33b
	dc.w $b307,$fffe
	dc.w $180,$43c
	dc.w $b407,$fffe
	dc.w $180,$33b

	dc.w $b907,$fffe
	dc.w $180,$33a
	dc.w $ba07,$fffe
	dc.w $180,$33b
	dc.w $bb07,$fffe
	dc.w $180,$33a

	dc.w $c007,$fffe
	dc.w $180,$339
	dc.w $c107,$fffe
	dc.w $180,$33a
	dc.w $c207,$fffe
	dc.w $180,$339

	dc.w $c707,$fffe
	dc.w $180,$329
	dc.w $c807,$fffe
	dc.w $180,$339
	dc.w $c907,$fffe
	dc.w $180,$329

	dc.w $ce07,$fffe
	dc.w $180,$228
	dc.w $cf07,$fffe
	dc.w $180,$329
	dc.w $d007,$fffe
	dc.w $180,$228

	dc.w $d507,$fffe
	dc.w $180,$227
	dc.w $d607,$fffe
	dc.w $180,$228
	dc.w $d707,$fffe
	dc.w $180,$227

	dc.w $dc07,$fffe
	dc.w $180,$226
	dc.w $dd07,$fffe
	dc.w $180,$227
	dc.w $de07,$fffe
	dc.w $180,$226

	dc.w $e307,$fffe
	dc.w $180,bgcol
	dc.w $e407,$fffe
	dc.w $180,$226
	dc.w $e507,$fffe
	dc.w $180,bgcol

	dc.w $ffdf,$fffe
;;    ---  bottom plate start  ---
	dc.w $0807,$fffe
	dc.w $180,$236
	dc.w $0a07,$fffe
	dc.w $180,$247
	dc.w $0b07,$fffe
	dc.w $180,$236
	dc.w $0e07,$fffe
	dc.w $180,$258
	dc.w $0f07,$fffe
	dc.w $180,$236
	dc.w $1507,$fffe
	dc.w $180,$269
	dc.w $1607,$fffe
	dc.w $180,$236
;;    ---  mirror split  ---	
	dc.w $17df,$fffe
	dc.w $182,$0468
	dc.w $184,$0235
	dc.w $186,$0358
	dc.w $188,$0689
	dc.w $18a,$069a
	dc.w $18c,$07bc
	dc.w $18e,$08dd
	dc.w $108,(ScrBpl*FontBpls-320/8)-(ScrBpl*FontBpls*2)
	dc.w $10a,(ScrBpl*Fontbpls-320/8)-(ScrBpl*FontBpls*2)

	dc.w $2007,$fffe
	dc.w $180,$27a
	dc.w $182,$27a
	dc.w $184,$27a
	dc.w $186,$27a
	dc.w $188,$27a
	dc.w $18a,$27a
	dc.w $18c,$27a
	dc.w $18e,$27a
	dc.w $2107,$fffe
	dc.w $180,$236
	dc.w $182,$0468
	dc.w $184,$0235
	dc.w $186,$0358
	dc.w $188,$0689
	dc.w $18a,$069a
	dc.w $18c,$07bc
	dc.w $18e,$08dd
;;    ---  bottom plate stop  ---
	dc.w $2c07,$fffe
	dc.w $180,$38b
	dc.w $2d07,$fffe
	dc.w $180,$235
	dc.w $2e07,$fffe
	dc.w $180,$247
	dc.w $2f07,$fffe
	dc.w $180,$258
;;    ---  bottom plate thickness  ---
	dc.w $3007,$fffe
	dc.w $180,bgcol

	dc.w $ffff,$fffe
CopperE:

Font:
	INCBIN "media/FastCarFont.284x100x3"
FontE:

Logo:	INCBIN "sky3centered.raw"
LogoE:
	dcb.b logobwid*6,0

Module1:
	incbin "P61.new_ditty"		;usecode $c00b43b


	SECTION TutBSS,BSS_C
Screen:
	ds.b bplsize*fontbpls

	END


Bit	Channel


	1001
	ABCD -> D

0	000	0
1	001	0
2	010	0
3	011	0
4	100	1
5	101	1
6	110	1
7	111	1


%11110000	=$f0



