	opt	d+,w-,c-,l-

; if you want this file to be legible, set the tab size to 14

;*********************************************************
;****                                                 ****
;****        UNIQUE PRODUCTIONS DEMO SEQUENCE         ****
;****                                                 ****
;*********************************************************

;*************************************************************************
;****                                                                 ****
;**** WRITTEN WITH GENAM AND ASSEMBLED WITH ARGASM (1/3 a second!!)   ****
;****     (ARGED HADN'T BEEN WRITTEN WHEN I WROTE IT)                 ****
;****                                                                 ****
;*************************************************************************


;***************************************************************
;****                                                       ****
;****                NOW FOR SOME GROOVY MACROS             ****
;****                                                       ****
;***************************************************************




OPEN_LIB:	MACRO
	lea	\1name,a1
	moveq.l	#0,d0
	CALLEXEC	OpenLibrary
	move.l	d0,\1base
	ENDM

CLOSE_LIB:	MACRO
	move.l	\1base,a1
	CALLEXEC	CloseLibrary
	ENDM

TEXT:	MACRO
	dc.b	"\1",0
	even
	ENDM

PUSH:	MACRO
	move.\0	\1,-(sp)
	ENDM
POP:	MACRO
	move.\0	(sp)+,\1
	ENDM

; the following are for other assemblers that don't incorporate builtin copper ops

CWAIT:	MACRO
	dc.w	(((\2)&$ff)<<8)!1!(((\1)&$7f)<<1),$fffe
	ENDM

CMOVE:	MACRO
	dc.w	\2,\1
	ENDM
	
CSKIP:	MACRO
	dc.w	(((\2)&$ff)<<8)!1!(((\1)&$7f)<<1),$ffff
	ENDM
	
CALLEXEC	MACRO
	move.l	4,a6
	jsr	_LVO\1(a6)
	ENDM

	



;*****************************************************************
;****                                                         ****
;****  INSTEAD OF USING INCLUDES, THE DEFINES ARE AS FOLLOWS  ****
;****                                                         ****
;*****************************************************************


NT_INTERRUPT	EQU	2
INTB_VERTB	EQU	(5)

	rsset	0
LN_SUCC	rs.l	1
LN_PRED	rs.l	1
LN_TYPE	rs.b	1
LN_PRI	rs.b	1
LN_NAME	rs.l	1
LN_SIZE	rs.w	0

	rsset	LN_SIZE
LIB_FLAGS	rs.b	1
LIB_pad	rs.b	1
LIB_NEGSIZE	rs.w	1
LIB_POSSIZE	rs.w	1
LIB_VERSION	rs.w	1
LIB_REVISION	rs.w	1
LIB_IDSTRING	rs.l	1
LIB_SUM	rs.l	1
LIB_OPENCNT	rs.w	1
LIB_SIZE	rs.w	0


; Now the exec interrupt structure

	rsset	LN_SIZE
IS_DATA	rs.l	1
IS_CODE	rs.l	1
IS_SIZE	rs.w	0

; And some library vectors:

_LVODisable	equ	-120
_LVOEnable	equ	-126
_LVOForbid	equ	-132
_LVOPermit	equ	-138
_LVOAddIntServer equ	-168
_LVORemIntServer equ	-174
_LVOAllocMem	equ	-198
_LVOAllocAbs	equ	-204
_LVOFreeMem	equ	-210
_LVOCloseLibrary equ	-414
_LVOOpenLibrary equ	-552

; and some hardware defs

bltddat	EQU	$000
dmaconr	EQU	$002

copcon	EQU	$02E

bltcon0	EQU	$040
bltcon1	EQU	$042
bltafwm	EQU	$044
bltalwm	EQU	$046
bltcpt	EQU	$048
bltbpt	EQU	$04C
bltapt	EQU	$050
bltdpt	EQU	$054
bltsize	EQU	$058

bltcmod	EQU	$060
bltbmod	EQU	$062
bltamod	EQU	$064
bltdmod	EQU	$066

bltcdat	EQU	$070
bltbdat	EQU	$072
bltadat	EQU	$074

cop1lc	EQU	$080
cop2lc	EQU	$084
copjmp1	EQU	$088
copjmp2	EQU	$08A
copins	EQU	$08C
diwstrt	EQU	$08E
diwstop	EQU	$090
ddfstrt	EQU	$092
ddfstop	EQU	$094
dmacon	EQU	$096
clxcon	EQU	$098
intena	EQU	$09A
intreq	EQU	$09C
adkcon	EQU	$09E

aud	EQU	$0A0
aud0	EQU	$0A0
aud1	EQU	$0B0
aud2	EQU	$0C0
aud3	EQU	$0D0

ac_ptr	EQU	$00
ac_len	EQU	$04
ac_per	EQU	$06
ac_vol	EQU	$08
ac_dat	EQU	$0A
ac_SIZEOF	EQU	$10

bplpt	EQU	$0E0
bplpth	EQU	bplpt
bplptl	EQU	bplpth+2

bplcon0	EQU	$100
bplcon1	EQU	$102
bplcon2	EQU	$104
bpl1mod	EQU	$108
bpl2mod	EQU	$10A

bpldat	EQU	$110

sprpt	EQU	$120

spr	EQU	$140
sd_pos	EQU	$00
sd_ctl	EQU	$02
sd_dataa	EQU	$04
sd_datab	EQU	$08

color	EQU	$180

custombase	equ	$dff000


;********************************************************************
;****                                                            ****
;**** NOW THE FUN BEGINS - THE ACTUAL CODE (DOESN'T WORK ON ECS) ****
;****                                                            ****
;********************************************************************


	SECTION	Main_Program,CODE

XOFFSET	=	$64
YOFFSET	=	$28
YOFFSET2	=	48
YOFFET3	=	0
WIDTH	=	352
BWIDTH	=	(WIDTH/8)
SWIDTH	=	352
HEIGHT	=	414
SHEIGHT	=	256
MHEIGHT	=	48
DEPTH	=	1
DEPTH2	=	1
PLANESIZE	=	BWIDTH*HEIGHT
PLANESIZE2	=	BWIDTH*MHEIGHT
SCR_SIZE	=	PLANESIZE*DEPTH
MSG_SCR_SIZE	=	PLANESIZE2*DEPTH2
SCROLL_SPEED	=	4
MSG_SCROLL_SPEED =	4
CHAR_HEIGHT:	=	10	; height of character set
BHEIGHT	=	CHAR_HEIGHT
BINSET	=	0
MSG_BUF_SIZE	=	(BWIDTH+2)*BHEIGHT*DEPTH2

WaitTOF:	equ	-270
QBlit:	equ	-276
_LVOOwnBlitter equ	-456
_LVODisownBlitter equ	-462




;---------------------------------------------------------------------
;
;  This is the address loaded into PC
;
;---------------------------------------------------------------------



CODE_START:	

PCEntry:
	move	#%1000000000000100,intena+custombase
			; enable vertb interrupts
			
	bset.b	#1,$bfe001	; power led off
	CALLEXEC	Forbid	; no multi-tasking
;!!	jsr	mt_init	; initialise music
	bsr	SetUpScreen
	
	move.l	_GfxBase,a6
	jsr	_LVOOwnBlitter(a6)
		; nobody else can have the blitter
		; trouble is the disk is left on - maybe put
		; a slight pause in to let the disk settle
		
	moveq	#0,d0	; x,y = 0 
	move	d0,d1
	bsr	PrintLogo	; print the logo
	bsr	PrintLogo	; 4 times one after another
	bsr	PrintLogo	; for the hardware scrolling
	bsr	PrintLogo	; bar
	bsr	PrintLogo
	
	lea	INTER,a1	; address of interrupt struct
	move.b	#NT_INTERRUPT,ln_Type(a1) ; node type = interrupt
	move.b	#$7f,ln_Pri(a1)           ; highest priority
	move.l	#Server,is_Code(a1)
	move.l	#ScrollOffset,is_Data(a1)
	move.l	#INTB_VERTB,d0            ; type = vertical blank
	CALLEXEC	AddIntServer	            ; add my interrupt to the list
	
	bsr	ConvertOffsets
			; adjust the scroller y offsets by
			; multiplying each of the values
			; by BWIDTH
	

	move.l	_GfxBase,a6
	jsr	WaitTOF(a6)	; wait until vblank
	
	bsr	setup_copper	; poke values into copper
	
	bsr	Scroll	; call the main loop
	
	lea	INTER,a1
	move.l	#INTB_VERTB,d0
	CALLEXEC	RemIntServer	; remove my interrupt
	
	move.l	_GfxBase,a6
	jsr	_LVODisOwnBlitter(a6)
			; welcome back everyone
			
	bsr	RemoveScreen	; close graphics library
			; and restore old copper list
	
	move	#%1000000000100000,custombase+dmacon
			; enable hardware sprites
			
	CALLEXEC	Permit	; permit multi-tasking
;!!	jsr	mt_end	; turn music off
	bclr.b	#1,$bfe001	; power led... ON!
	rts





Flib_db:
	lea	MSG_SCR1,a0	; address of first playfield
	lea	MSG_SCR2,a1	; address of second playfield
	lea	MSG_SCR3,a2	; address of third playfield
	
	move	MSG_TB,d0	; which playfield are we on now?
	addq	#1,d0	; increment the value
	cmp	#3,d0	; only triple buffered
	blt	noreset
	moveq	#0,d0	; reset count
noreset:
	move	d0,MSG_TB	; store result
	cmp	#1,d0	; is it one??
	bne	the_other
	move.l	a1,a0
	move.l	a2,a1
the_other:
	cmp	#2,d0	; is it two??
	bne	the_other2
	move.l	a0,a1
	move.l	a2,a0
the_other2:
	exg	a0,a1
	move.l	a0,MSG_SCR
	
	move.l	a1,d0	; now poke the values into the copper
	lea	MsgPlanes,a0
	move	d0,6(a0)
	swap	d0
	move	d0,2(a0)
	lea	MsgPlanes2,a0
	swap	d0
	add.l	#BWIDTH*7,d0
	move	d0,6(a0)
	swap	d0
	move	d0,2(a0)
	rts
	



SetUpScreen:

	OPEN_LIB	_Gfx	; open the graphics library
	bsr	Flib_db	; do triple buffering
	rts
	
	

RemoveScreen:
	move.l	_GfxBase,a1	; address of graphics lib base
	lea	custombase,a0
			; now reset the copper list
	move.l	LIB_SIZE+4(a1),cop1lc(a0)
	move.l	LIB_SIZE+4(a1),cop2lc(a0)
	move	copjmp1(a0),d0 ; and... GO!
	
	CALLEXEC	CloseLibrary	; close the graphics library
	rts



PrintLogo:
** D0,D1 = x,y
	lea	UNIQUE_LOGO,a0 ; address of logo data
	move	d0,d6
	moveq	#9,d2
pl_YLoop:
	moveq	#1,d3
pl_XLoop:
	move.l	(a0)+,d5
	
	moveq	#31,d4
pl_rotate:
	rol.l	d5
	bcc	pl_miss

	movem	d0-d3,-(sp)	
	lea	SCR,a1
	mulu	#WIDTH,d1
	add	d0,d1
	add.l	d1,a1
	moveq	#7,d0
pb_loop:
	move.b	#255,(a1)
	add.l	#WIDTH/8,a1
	dbra	d0,pb_loop
	movem	(sp)+,d0-d3
pl_miss:
	
	addq	#1,d0
	
	dbra	d4,pl_rotate
	dbra	d3,pl_XLoop
	move	d6,d0
	addq	#1,d1
	dbra	d2,pl_YLoop
	addq	#1,d1	** leave a space if repeated
	rts


;************************************************************
;****                                                    ****
;****         Now for the main loop, here it goes        ****
;****                                                    ****
;************************************************************


Scroll:
	tst	VertBlank
	beq	Scroll	; wait for the vertical blank
	
	clr	VertBlank	; clear vblank flag
	bsr	BufTrans	; transfer buffer into bitmap
	bsr	ScrollBuf	; scroll the buffer
	bsr	ScrollBars	; scroll the copper bars
	btst.b	#6,$bfe001	; wait for left mouse button
	bne	scroll	; illegal, i know, but who cares?
	rts
	
	
	
	
Server:
	st	VertBlank	; set the vblank flag
	move	ScrollOffset,d1 ; get the position of the centre bar
		; now turn off sprites
		; and enable everything else
		
	move	#%1000001111011111,dmacon(a0)
	move	#%0000000000100000,dmacon(a0)
	add	#BWIDTH*SCROLL_SPEED,d1
	cmp	#BWIDTH*(11*8),d1
	blt	s_con
	moveq	#0,d1
s_con:
	move.l	#SCR,d0
	move	d1,ScrollOffset
	ext.l	d1
	add.l	d1,d0
	move	d0,Planes+6	; write new offsets into copper list
	swap	d0
	move	d0,Planes+2
	movem.l	a0-a6/d0-d7,-(sp)
;!!	jsr	mt_music	; music routine
	movem.l	(sp)+,a0-a6/d0-d7
	moveq	#0,d0	; no more interrupts thank you
	rts
	
	
	
BufTrans:
	bsr	Flib_db	; do triple buffering
	lea	MSG_BUF,a0	; set up pointers
	move.l	MSG_SCR,a1
	lea	custombase,a6
; first clear the message screen area
Waitforit:
	btst.b	#6,dmaconr+custombase
	bne	Waitforit
	move.l	a1,bltdpt(a6)
	move	#0,bltdmod(a6)
	move	#%100000000,bltcon0(a6)
	move	#0,bltcon1(a6)
	move	#(MHEIGHT<<6)!(BWIDTH/2),bltsize(a6)
; it should now be cleared,
	
	move	Rot_ptr,d4
	sub	sine_speed,d4
	bcc	missres
	move	#94*2,d4
missres:
	move	d4,Rot_ptr
	lea	OffsetTable,a3
	moveq	#2,d0		; d0=addition to address regs
	moveq	#BWIDTH/2-1,d7
	move	#$c000,d5
bt_NextWord:
	moveq	#7,d6
bt_Nextpixel:
	btst.b	#6,dmaconr+custombase
	bne	bt_Nextpixel	; wait for blitter to finish
	
	move	(a3,d4),d1
	move.l	a1,a2
	add	d1,a2
	move.l	a0,bltapt(a6)
	move.l	a2,bltdpt(a6)
	move.l	a2,bltcpt(a6)	; set pointers
	move	d5,bltafwm(a6)
	move	d5,bltalwm(a6)	; set masks
	move	#BWIDTH,bltamod(a6)
	move	#BWIDTH-2,bltcmod(a6)
	move	#BWIDTH-2,bltdmod(a6)	; set modulii
	move	#%101111111010,bltcon0(a6) ; Minterm: D=A+C (A,C,D set up)
	move	#0,bltcon1(a6)	; set the blitter control regs
	
	move	#(BHEIGHT<<6)!1,bltsize(a6)	; set blitter going
	
	ror	#2,d5	; rotate mask for next bit
	addq	#2,d4
	cmp	#96*2,d4	; get next 'sine' value
	bcs	missres2
	moveq	#0,d4
missres2:
	
	dbra	d6,bt_NextPixel
	add	d0,a0		; increment source pointer
	add	d0,a1		; increment destination pointer
	dbra	d7,bt_NextWord
	rts



ScrollBuf:
	lea	PauseCount,a1
	tst	(a1)
	beq	sb_goscroll
	sub	#1,(a1)
	bra	exit_route
sb_goscroll:
	lea	TimerCount,a1
	sub	#1,(a1)
	bpl	sb_noreset
	bsr	PrintMsg
	moveq	#CHAR_WIDTH,d0
	divu	Msg_speed,d0
	subq	#1,d0
	move	d0,TimerCount
sb_noreset:
	lea	custombase,a0
	btst.b	#6,dmaconr+custombase
	bne	ScrollBuf
	lea	MSG_BUF+MSG_BUF_SIZE-2,a1
	move.l	a1,bltapt(a0)
	move.l	a1,bltdpt(a0)
	move	Msg_speed,d7
	move	d7,d0
	moveq	#12,d1
	lsl	d1,d0
	or	#%100111110000,d0
	move	d0,bltcon0(a0)
	move	#%10,bltcon1(a0)
	move	#0,bltamod(a0)
	move	#0,bltdmod(a0)
	move	#%1111111111111111,bltafwm(a0)
	moveq	#-1,d0
	lsr	d7,d0
	move	d0,bltalwm(a0)
	move	#(BHEIGHT<<6)!((BWIDTH+2)>>1),bltsize(a0)
exit_route:
	rts
	
	
	
ConvertOffsets:
	lea	flag,a1
	btst	#1,(a1)
	bne	exit_route
	bset	#1,(a1)
	lea	OffsetTable,a1
	move.l	#ot_end,d0
	sub.l	a1,d0
	lsr	d0
	subq	#1,d0
co_loop:
	move	(a1),d1
	mulu	#BWIDTH,d1
	move	d1,(a1)+
	dbra	d0,co_loop
	rts
	
	
	
PrintMsg:
	lea	TextMsg,a1
	move	MsgPointer,d1
	move.b	(a1,d1),d0
	beq	pm_repeat
	add	#1,MsgPointer
	tst.b	d0
	bpl	char_okay
	neg.b	d0
	ext	d0
	add	d0,d0
	move	d0,PauseCount
	bra	PrintMsg
char_okay:
	cmp.b	#32,d0	; test option bit
	bge	char_okay2
	lea	msg_speed,a2
	btst	#4,d0
	beq	msg_alter
	lea	sine_speed,a2
msg_alter:	and	#15,d0		; clear the bit
	move	d0,(a2)		; set speed
	bra	PrintMsg		; loop to print a normal char
char_okay2:
	lea	MSG_BUF+(BWIDTH+2)*BINSET+BWIDTH,a0
	lea	CharBase,a1
	sub.b	#" ",d0
	ext	d0
	mulu	#(2*CHAR_HEIGHT),d0
	add.l	d0,a1
	moveq	#CHAR_HEIGHT-1,d7
pm_NextDown:
	move	(a1)+,(a0)
	add.l	#BWIDTH+2,a0
	
	dbra	d7,pm_NextDown
	
	rts
	
pm_repeat:
	clr	MsgPointer
	rts
	
	
	
setup_copper:
	lea	custombase,a0
	lea	cop_loopaddr,a6
	move.l	#copper_loop,d0
	move	d0,6(a6)
	swap	d0	; poke copper_loop address
	move	d0,2(a6)	; into copper list
	lea	copper_restore,a6
	move.l	#cop,d0
	move	d0,6(a6)
	swap	d0	; poke restoration address into
	move	d0,2(a6)	; copper list
	swap	d0	
	move.l	d0,cop1lc(a0)	; set copper list going
	move	d0,copjmp1(a0)
	rts
	
	
	
ScrollBars:

	btst.b	#6,custombase+dmaconr
	bne	ScrollBars
	
	lea	custombase,a6
	lea	copper_loop,a0
	
	move.l	a0,bltdpt(a6)
	move.l	(a0)+,d7
	move.l	a0,bltcpt(a6)

	move	#%1110101010,bltcon0(a6)	; D=C
	moveq	#0,d0
	move	d0,bltcon1(a6)
	move	d0,bltcmod(a6)
	move	d0,bltdmod(a6)
	
	move	#(2<<6)!(57),bltsize(a6)	; 57 copper instructions
	
sb_waitblit1:
	btst.b	#6,custombase+dmaconr
	bne	sb_waitblit1
	
	move.l	d7,last_bar-4
	rts
	



	SECTION	Some_Data,DATA
	
OffsetTable:
	dcb	10,7
	dcb	6,8
	dcb	4,9
	dcb	3,10
	dcb	2,11
	dcb	1,12
	dcb	2,13
	dcb	1,14
	dcb	1,15
	dcb	1,16
	dcb	2,17
	dcb	1,18
	dcb	2,19
	dcb	2,20
	dcb	4,21
	dcb	6,22
	dcb	10,23
	dcb	6,22
	dcb	4,21
	dcb	3,20
	dcb	2,19
	dcb	1,18
	dcb	2,17
	dcb	1,16
	dcb	1,15
	dcb	1,14
	dcb	2,13
	dcb	1,12
	dcb	2,11
	dcb	2,10
	dcb	4,9
	dcb	6,8
ot_end:

Msg_speed:	dc.w	2
sine_speed:	dc.w	2

TextMsg:
	dc.b	2,2+16
	dc.b	"HELLO AND WELCOME TO UNIQUE PRODUCTIONS FIRST SCROLLEE DEMO! "
	DC.B	"ASSEMBLED WITH ",1,"ARGASM !!!!!!!!!! IT ONLY TAKES THREE ",2,"SECONDS TO ASSEMBLE !!!!!!!!  IT WAS CODED BY "
	DC.B	"BUGBLATTER (THE ORIGINAL VERSION TOOK A DAY) BUT OVER THE LAST "
	DC.B	"FEW MONTHS HUNDREDS OF ENHANCEMENTS HAVE GONE IN.  "
	DC.B	"MY THANKS AND HELLOS GO TO:      ",2
	DC.B	" *** VEGE OF THE ANTI-SOCIALS",8
	DC.B	" *** STEG *** ROB ",-75,2,4+16,"A",2+16,"ND SIMON RADCLIFF"
	DC.B	" *** ",8,"JAMES PRINCE *** ",-75,"BARRY *** RUSS",-75,"ELL"
	DC.B	" *** AD",-75,"RIAN FRIDAY ***",-75," PJ"
	DC.B	" *** FUZZZ",-75," *** TUF",-75,"TY *** AL ",-75,"*** CHRIS",-75," AND CHRIS"
	DC.B	" **",-75,"* IAN *** RIC *",-75,4+16,"** PAUL ",-75,"*** PET",-75,"E *** JEZ"
	DC.B	" ",-75,"*** STEVE",-75," *** THE",-75," POLICE *** J",-75,6+16," M JARRE"
	DC.B	" ***  ",-75,"                  ",2,6+16
	DC.B	"THE SOURCE CODE IS AVAILABLE TO ANYONE WHO "
	DC.B	"REQUESTS IT.  I AM CODING ON THE KONIX MULTI-SYSTEM "
	DC.B	"AT THE MOMENT SO WISH ME LUCK!!",4
	dc.b	"                         AND FINALLY... ",4+16
	DC.B	"A FEW MORE HELLOS:      STEPHEN DE-RYKE, PAUL SMITH (SMITTY), "
	DC.B	"PETER DAVIES, JEZZER BROWN, ANDREW CAIN, ROSS GRIFFITHS, DAVID MORRIS, "
	DC.B	"TONY AND CHRIS GARSTON",-75,", STEVEN GRIFFITH, CAROL EVANS, SARAH JONES, "
	DC.B	"DAVID DISKIN, MICHAEL BALLARD, PHIL BLEASDALE, SHARON KNOWLES, MEL AND CHRIS (THE FAT BOYS), "
	DC.B	"LOUISE AIMES, WOGGY, CURTIS CAMPBELL, STUART MORAN, JUSTINE THOMAS, NEA",-75,"L HORSEFALL "
	DC.B	"(THE PRAT!), OLIVIA A. PHOENIX (OAP), NICOLA MARTIN, JILL STANLEY, EMMA ARTHUR (YCH A FI!), "
	DC.B	"HELEN GARSTON, NICKY HOLT, CHIMP, MARK GARSTON, SAMANTHA ROBERTS, CLARE CAWTHORN, "
	DC.B	"SUZANNE MUMFORD, NICOLA STEVENS, KAREN TONGUE (NICE NAME! - PRONOUNCED 'TONJ' THOUGH), "
	DC.B	"JANE AND HELEN FARRELLY (YUM YUM).    ",2+16,2,"WELL I THINK THAT'S ABOUT IT THEN, SEE YOU ON MY "
	DC.B	"NEXT DEMO!"
	dc.b	'                            '
	dc.b	0
	even
	
_GfxName:	TEXT	<graphics.library>

	
	
	SECTION	Copper_list,DATA_C

Cop:
	CMOVE	(0<<12)!(1<<9)!(1<<10),bplcon0
	CMOVE	$000,color
cop_loopaddr:
	CMOVE	0,cop1lc
	CMOVE	0,cop1lc+2
	CMOVE	6<<4,bplcon1	; pf2 horz scroll
	CMOVE	0,bplcon2
MsgPlanes:
	CMOVE	0,bplpth
	CMOVE	0,bplptl
MsgPlanes2:
	CMOVE	0,bplpth+4
	CMOVE	0,bplptl+4
	CMOVE	$0,color+18
	CMOVE	$0,bpl1mod
	CMOVE	0,bpl2mod
	CMOVE	((80)<<8)!(XOFFSET),diwstrt	** Starting pos
	CMOVE	(((YOFFSET+SHEIGHT)&$ff)<<8)!(XOFFSET+SWIDTH-256),diwstop	** Stopping pos
	CMOVE	XOFFSET/2,ddfstrt
	CMOVE	(XOFFSET+SWIDTH-16)/2,ddfstop
	CMOVE	(2<<12)!(1<<9)!(1<<10),bplcon0

copper_loop:	
	CMOVE	$022,color
	CMOVE	$122,color
	CMOVE	$222,color
	CMOVE	$322,color
	CMOVE	$422,color
	CMOVE	$522,color
	CMOVE	$622,color
	CMOVE	$722,color
	CMOVE	$822,color
	CMOVE	$922,color
	CMOVE	$a22,color
	CMOVE	$b22,color
	CMOVE	$c22,color
	CMOVE	$d22,color
	CMOVE	$e22,color
	CMOVE	$f22,color
	CMOVE	$f22,color
	CMOVE	$e22,color
	CMOVE	$d22,color
	CMOVE	$c22,color
	CMOVE	$b22,color
	CMOVE	$a22,color
	CMOVE	$922,color
	CMOVE	$822,color
	CMOVE	$722,color
	CMOVE	$622,color
	CMOVE	$522,color
	CMOVE	$422,color
	CMOVE	$322,color
	CMOVE	$222,color
	CMOVE	$122,color
	CMOVE	$022,color
	
	CMOVE	$fef,color+2
	CMOVE	$cf,color+2
	CMOVE	$bf,color+2
	CMOVE	$af,color+2
	CMOVE	$9f,color+2
	CMOVE	$8f,color+2
	CMOVE	$6f,color+2
	CMOVE	$5f,color+2
	CMOVE	$4f,color+2
	CMOVE	$3f,color+2
	CMOVE	$2f,color+2
	CMOVE	$1f,color+2
	CMOVE	$0f,color+2
	CMOVE	$1f,color+2
	CMOVE	$2f,color+2
	CMOVE	$3f,color+2
	CMOVE	$4f,color+2
	CMOVE	$5f,color+2
	CMOVE	$6f,color+2
	CMOVE	$8f,color+2
	CMOVE	$9f,color+2
	CMOVE	$af,color+2
	CMOVE	$bf,color+2
	CMOVE	$cf,color+2
	CMOVE	$fef,color+2
	CMOVE	$fff,color+2
last_bar:
	
	CSKIP	0,117	; WOW!! a use for the SKIP instruction!
	CMOVE	0,copjmp1	; strobe the other copper list
	
bar1stop:
	CMOVE	(1<<9),$100
	CWAIT	0,118
	CMOVE	$00f,color+2
	CMOVE	$110,color
Planes:
	CMOVE	0,bplpt
	CMOVE	0,bplpt+2
	CMOVE	(DEPTH<<12)!(1<<9),bplcon0
	CMOVE	$0,bplcon1
	CMOVE	BWIDTH*8,bpl1mod
	CWAIT	0,119
	CWAIT	0,120
	CMOVE	$220,color
	CMOVE	BWIDTH*4,bpl1mod
	CWAIT	0,122
	CMOVE	$330,color
	CWAIT	0,124
	CMOVE	$440,color
	CMOVE	BWIDTH*2,bpl1mod
	CWAIT	0,126
	CMOVE	$550,color
	CWAIT	0,128
	CMOVE	$660,color
	CWAIT	0,130
	CMOVE	$770,color
	CWAIT	0,131
	CWAIT	0,132
	CMOVE	$880,color
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,134
	CMOVE	$990,color
	CWAIT	0,136
	CWAIT	0,137
	CMOVE	$aa0,color
	CWAIT	0,140
	CMOVE	$bb0,color
	CWAIT	0,142
	CWAIT	0,148
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,149
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,150
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,151
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,152
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,153
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,154
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,157
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,158
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,161
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,162
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,165
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,166
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,168
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,169
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,171
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,172
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,174
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,175
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,178
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,179
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,182
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,183
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,184
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,185
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,186
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,187
	CMOVE	BWIDTH*0,bpl1mod
	CWAIT	0,188
	CMOVE	BWIDTH*1,bpl1mod
	CWAIT	0,195
	CMOVE	$aa0,color
	CWAIT	0,198
	CMOVE	$990,color
	CWAIT	0,200
	CMOVE	$880,color
	CWAIT	0,202
	CMOVE	$770,color
	CWAIT	0,204
	CMOVE	$660,color
	CMOVE	BWIDTH*2,bpl1mod
	CWAIT	0,206
	CMOVE	$550,color
	CWAIT	0,208
	CMOVE	$440,color
	CWAIT	0,210
	CMOVE	$330,color
	CWAIT	0,212
	CMOVE	$220,color
	CMOVE	BWIDTH*4,bpl1mod
	CWAIT	0,214
	CMOVE	$110,color
	CWAIT	0,216
	CMOVE	$000,color
	CMOVE	BWIDTH*8,bpl1mod
	CWAIT	0,218
	CMOVE	$0,bplcon1
	CMOVE	(1<<9),$100
	
	CMOVE	(0<<12)!(1<<9),bplcon0
	
copper_restore:
	CMOVE	0,cop1lc
	CMOVE	0,cop1lc+2
	
	CWAIT	$ff,$ff
	CWAIT	$ff,$ff
	




*####################################################
*####  The music routine follows (SOUNDTRACKER)  ####
*####################################################


; -----------------------------------------------------
; ------- D.O.C Soundtracker V2.3 - playroutine -------
; -----------------------------------------------------
; ---- Improved and optimized by  Unknown of D.O.C ----
; --------- Based on the playroutine from TJC ---------
; -----------------------------------------------------

	SECTION MUSIC_PLAYER,CODE

mt_init:
	move.b	#6,mt_speed
	lea	mt_data+$3b8,a0
	moveq	#$7f,d0
	moveq	#0,d1
mt_init1:
	move.l	d1,d2
	subq.w	#1,d0
mt_init2:
	move.b	(a0)+,d1
	cmp.b	d2,d1
	bgt.s	mt_init1
	dbf	d0,mt_init2
	addq.b	#1,d2

mt_init3:
	lea	mt_data,a0
	lea	mt_sample1,a1
	asl.l	#8,d2
	asl.l	#2,d2
	add.l	#$438,d2
	add.l	a0,d2
	moveq	#$1e,d0
mt_init4:
	move.l	d2,(a1)+
	moveq	#0,d1
	move.w	42(a0),d1
	asl.l	#1,d1
	add.l	d1,d2
	add.l	#$1e,a0
	dbf	d0,mt_init4

	lea	mt_sample1,a0
	moveq	#0,d0
mt_clear:
	move.l	(a0,d0.w),a1
	clr.l	(a1)
	addq.w	#4,d0
	cmp.w	#$7c,d0
	bne.s	mt_clear

	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	clr.l	mt_partnrplay
	clr.l	mt_partnote
	clr.l	mt_partpoint

	move.b	mt_data+$3b6,mt_maxpart+1
	rts

mt_end:	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	move.w	#$f,$dff096
	rts

mt_music:
	addq.w	#1,mt_counter
	move.b mt_speed,d0
	ext d0
	cmp.w	mt_counter,d0
	bne.s	mt_notsix
	clr.w	mt_counter
	bra	mt_rout2

mt_notsix:
	lea	mt_aud1temp,a6
	tst.b	3(a6)
	beq.s	mt_arp1
	lea	$dff0a0,a5		
	bsr.s	mt_arprout
mt_arp1:	lea	mt_aud2temp,a6
	tst.b	3(a6)
	beq.s	mt_arp2
	lea	$dff0b0,a5
	bsr.s	mt_arprout
mt_arp2:	lea	mt_aud3temp,a6
	tst.b	3(a6)
	beq.s	mt_arp3
	lea	$dff0c0,a5
	bsr.s	mt_arprout
mt_arp3:	lea	mt_aud4temp,a6
	tst.b	3(a6)
	beq.s	mt_arp4
	lea	$dff0d0,a5
	bra.s	mt_arprout
mt_arp4:rts

mt_arprout:
	move.b	2(a6),d0
	and.b	#$0f,d0
	tst.b	d0
	beq	mt_arpegrt
	cmp.b	#$01,d0
	beq.s	mt_portup
	cmp.b	#$02,d0
	beq.s	mt_portdwn
	cmp.b	#$0a,d0
	beq.s	mt_volslide
	rts

mt_portup:
	moveq	#0,d0
	move.b	3(a6),d0
	sub.w	d0,22(a6)
	cmp.w	#$71,22(a6)
	bpl.s	mt_ok1
	move.w	#$71,22(a6)
mt_ok1:	move.w	22(a6),6(a5)
	rts

mt_portdwn:
	moveq	#0,d0
	move.b	3(a6),d0
	add.w	d0,22(a6)
	cmp.w	#$538,22(a6)
	bmi.s	mt_ok2
	move.w	#$538,22(a6)
mt_ok2:	move.w	22(a6),6(a5)
	rts

mt_volslide:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	tst.b	d0
	beq.s	mt_voldwn
	add.w	d0,18(a6)
	cmp.w	#64,18(a6)
	bmi.s	mt_ok3
	move.w	#64,18(a6)
mt_ok3:	move.w	18(a6),8(a5)
	rts
mt_voldwn:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	sub.w	d0,18(a6)
	bpl.s	mt_ok4
	clr.w	18(a6)
mt_ok4:	move.w	18(a6),8(a5)
	rts

mt_arpegrt:
	move.w	mt_counter,d0
	cmp.w	#1,d0
	beq.s	mt_loop2
	cmp.w	#2,d0
	beq.s	mt_loop3
	cmp.w	#3,d0
	beq.s	mt_loop4
	cmp.w	#4,d0
	beq.s	mt_loop2
	cmp.w	#5,d0
	beq.s	mt_loop3
	rts

mt_loop2:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	bra.s	mt_cont
mt_loop3:
	moveq	#$00,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	bra.s	mt_cont
mt_loop4:
	move.w	16(a6),d2
	bra.s	mt_endpart
mt_cont:
	add.w	d0,d0
	moveq	#0,d1
	move.w	16(a6),d1
	lea	mt_arpeggio,a0
mt_loop5:
	move.w	(a0,d0),d2
	cmp.w	(a0),d1
	beq.s	mt_endpart
	addq.l	#2,a0
	bra.s	mt_loop5
mt_endpart:
	move.w	d2,6(a5)
	rts

mt_rout2:
	lea	mt_data,a0
	move.l	a0,a3
	add.l	#$0c,a3
	move.l	a0,a2
	add.l	#$3b8,a2
	add.l	#$43c,a0
	move.l	mt_partnrplay,d0
	moveq	#0,d1
	move.b	(a2,d0),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.l	mt_partnote,d1
	move.l	d1,mt_partpoint
	clr.w	mt_dmacon

	lea	$dff0a0,a5
	lea	mt_aud1temp,a6
	bsr	mt_playit
	lea	$dff0b0,a5
	lea	mt_aud2temp,a6
	bsr	mt_playit
	lea	$dff0c0,a5
	lea	mt_aud3temp,a6
	bsr	mt_playit
	lea	$dff0d0,a5
	lea	mt_aud4temp,a6
	bsr	mt_playit
	move.w	#$01f4,d0
mt_rls:	dbf	d0,mt_rls

	move.w	#$8000,d0
	or.w	mt_dmacon,d0
	move.w	d0,$dff096

	lea	mt_aud4temp,a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice3
	move.l	10(a6),$dff0d0
	move.w	#1,$dff0d4
mt_voice3:
	lea	mt_aud3temp,a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice2
	move.l	10(a6),$dff0c0
	move.w	#1,$dff0c4
mt_voice2:
	lea	mt_aud2temp,a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice1
	move.l	10(a6),$dff0b0
	move.w	#1,$dff0b4
mt_voice1:
	lea	mt_aud1temp,a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice0
	move.l	10(a6),$dff0a0
	move.w	#1,$dff0a4
mt_voice0:
	move.l	mt_partnote,d0
	add.l	#$10,d0
	move.l	d0,mt_partnote
	cmp.l	#$400,d0
	bne.s	mt_stop
mt_higher:
	clr.l	mt_partnote
	addq.l	#1,mt_partnrplay
	moveq	#0,d0
	move.w	mt_maxpart,d0
	move.l	mt_partnrplay,d1
	cmp.l	d0,d1
	bne.s	mt_stop
	clr.l	mt_partnrplay
	st	Pflag
mt_stop:tst.w	mt_status
	beq.s	mt_stop2
	clr.w	mt_status
	bra.s	mt_higher
mt_stop2:
	rts

mt_playit:
	move.l	(a0,d1.l),(a6)
	addq.l	#4,d1
	moveq	#0,d2
	move.b	2(a6),d2
	and.b	#$f0,d2
	lsr.b	#4,d2

	move.b	(a6),d0
	and.b	#$f0,d0
	or.b	d0,d2
	tst.b	d2
	beq.s	mt_nosamplechange

	moveq	#0,d3
	lea	mt_samples,a1
	move.l	d2,d4
	asl.l	#2,d2
	mulu	#$1e,d4
	move.l	(a1,d2),4(a6)
	move.w	(a3,d4.l),8(a6)
	move.w	2(a3,d4.l),18(a6)
	move.w	4(a3,d4.l),d3
	tst.w	d3
	beq.s	mt_displace
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,4(a6)
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),8(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
	bra.s	mt_nosamplechange

mt_displace:
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
mt_nosamplechange:
	tst.w	(a6)
	beq.s	mt_retrout
	move.w	(a6),16(a6)
	move.w	20(a6),$dff096
	move.l	4(a6),(a5)
	move.w	8(a6),4(a5)
	move.w	(a6),6(a5)
	move.w	20(a6),d0
	or.w	d0,mt_dmacon

mt_retrout:
	tst.w	(a6)
	beq.s	mt_nonewper
	move.w	(a6),22(a6)

mt_nonewper:
	move.b	2(a6),d0
	and.b	#$0f,d0
	cmp.b	#$0b,d0
	beq.s	mt_posjmp
	cmp.b	#$0c,d0
	beq.s	mt_setvol
	cmp.b	#$0d,d0
	beq.s	mt_break
	cmp.b	#$0e,d0
	beq.s	mt_setfil
	cmp.b	#$0f,d0
	beq.s	mt_setspeed
	rts

mt_posjmp:
	not.w	mt_status
	moveq	#0,d0
	move.b	3(a6),d0
	subq.b	#1,d0
	move.l	d0,mt_partnrplay
	rts

mt_setvol:
	move.b	3(a6),8(a5)
	rts

mt_break:
	not.w	mt_status
	rts

mt_setfil:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#1,d0
	rol.b	#1,d0
	and.b	#$fd,$bfe001
	or.b	d0,$bfe001
	rts

mt_setspeed:
	move.b	3(a6),d0
	and.b	#$0f,d0
	beq.s	mt_back
	clr.w	mt_counter
	move.b	d0,mt_speed
mt_back:rts

mt_arpeggio:
	dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
	dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
	dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
	dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
	dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000

	SECTION MUSIC_DATA,DATA_C
mt_data:
;!!	incbin "mod.whimsy_music"
	



CODE_END:

	SECTION	Alloc,BSS_C

MsgPointer:
	ds.w	1
	
PauseCount:	ds.w	1
flag:	ds.w	1
ScrollOffset:
	ds.w	1
TimerCount:
	ds.w	1
	
mt_speed:	ds.b	1
	even
PFlag:	ds.l	1


INTER:	ds.b	IS_SIZE
SCR:	ds.b	SCR_SIZE
MSG_SCR1	ds.b	MSG_SCR_SIZE
MSG_SCR2	ds.b	MSG_SCR_SIZE
MSG_SCR3	ds.b	MSG_SCR_SIZE
MSG_BUF	ds.b	MSG_BUF_SIZE
MSG_SCR	ds.l	1	; triple buffered message screen
MSG_TB	ds.w	1

_GfxBase:	ds.l	1
VertBlank:	ds.w	1

ROT_ptr:	ds.w	1
	
mt_aud1temp:
	ds.w	10
	ds.w	1	;1
	ds.w	2
mt_aud2temp:
	ds.w	10
	ds.w	1	;2
	ds.w	2
mt_aud3temp:
	ds.w	10
	ds.w	1	;4
	ds.w	2
mt_aud4temp:
	ds.w	10
	ds.w	1	;8
	ds.w	2

mt_partnote:	ds.l	1
mt_partnrplay:	ds.l	1
mt_counter:		ds.w	1
mt_partpoint:	ds.l	1
mt_samples:		ds.l	1
mt_sample1:		ds.l	31
mt_maxpart:		ds.w	1
mt_dmacon:		ds.w	1
mt_status:		ds.w	1




	SECTION	Some_more_data,DATA
	
UNIQUE_LOGO:
	dc.l	%11100000000000000000000000000000,%00000000000000000000000000000000
	dc.l	%10100111111111111111111111111111,%11111111111000000000000000000000
	dc.l	%10100000000000000000000000000000,%00000000000000000000000000000000
	dc.l	%11110101011100111001000111101111,%10111011110000000000000000000000
	dc.l	%10010101010000101001000100100101,%00100010010000000000000000000000
	dc.l	%10010101010110111101000111100101,%00110011110000000000000000000000
	dc.l	%10010101010010100101000100100101,%00100010100000000000000000000000
	dc.l	%11110111011110111101110100100101,%00111010100000000000000000000000
	dc.l	%00000000000000000000000000000000,%00000000000000000000000000000000
	dc.l	%11111111111111111111111111111111,%11111111111000000000000000000000
	
CharBase:

*************************************************************
** Character Set Defined as a series of dc.ws			   **
*************************************************************

CHAR_WIDTH:	equ 16
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000

	dc.w	%0000011111000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011111000000
	dc.w	%0000000000000000
	dc.w	%0000011111000000
	dc.w	%0000011101000000
	dc.w	%0000011111000000

	dc.w	%0000000000000000
	dc.w	%0011111001111100
	dc.w	%0011101001110100
	dc.w	%0011111001111100
	dc.w	%0111100011110000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0011111001111100
	dc.w	%0111101111110110
	dc.w	%0111101111110110
	dc.w	%0011101001110100
	dc.w	%0011101001110100
	dc.w	%0111101111110110
	dc.w	%0111101111110110
	dc.w	%0011111001111100
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000011111000000
	dc.w	%0001111101111000
	dc.w	%0011011101000000
	dc.w	%0001111101110000
	dc.w	%0000011101011000
	dc.w	%0011111101111000
	dc.w	%0011111101110000
	dc.w	%0000011111000000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0111000011111000
	dc.w	%0111000111010000
	dc.w	%0111001110100000
	dc.w	%0000011101000000
	dc.w	%0000111010000000
	dc.w	%0001110100111000
	dc.w	%0011101000111000
	dc.w	%0111110000111000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000011110000000
	dc.w	%0000110011000000
	dc.w	%0001111110000000
	dc.w	%0011111101000000
	dc.w	%0110101101001100
	dc.w	%0110100110111000
	dc.w	%0011011101111100
	dc.w	%0001111110000110
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000111110000000
	dc.w	%0000111010000000
	dc.w	%0000111110000000
	dc.w	%0001111000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000

	dc.w	%0000011110000000
	dc.w	%0001110100000000
	dc.w	%0011101000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0011101000000000
	dc.w	%0001110100000000
	dc.w	%0000011110000000

	dc.w	%0000000111100000
	dc.w	%0000000011011000
	dc.w	%0000000001110100
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000001110100
	dc.w	%0000000011011000
	dc.w	%0000000111100000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0111110111110000
	dc.w	%0011101110100000
	dc.w	%0001111101000000
	dc.w	%0111111011110000
	dc.w	%0001110101000000
	dc.w	%0011101110100000
	dc.w	%0111110111110000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000011111000000
	dc.w	%0000011101000000
	dc.w	%0111111101111100
	dc.w	%0111111101111100
	dc.w	%0000011101000000
	dc.w	%0000011111000000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000011111000000
	dc.w	%0000011101000000
	dc.w	%0000011111000000
	dc.w	%0000111100000000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0111111111110000
	dc.w	%0111111111110000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000011111000000
	dc.w	%0000011101000000
	dc.w	%0000011111000000

	dc.w	%0000000000000000
	dc.w	%0000000011111000
	dc.w	%0000000111010000
	dc.w	%0000001110100000
	dc.w	%0000011101000000
	dc.w	%0000111010000000
	dc.w	%0001110100000000
	dc.w	%0011101000000000
	dc.w	%0111110000000000
	dc.w	%0000000000000000

	dc.w	%0000011111100000
	dc.w	%0001110111011000
	dc.w	%0011101001110100
	dc.w	%0111010011111010
	dc.w	%0111010111111010
	dc.w	%0111011110111010
	dc.w	%0111011100111010
	dc.w	%0011101001110100
	dc.w	%0001110111011000
	dc.w	%0000011111100000

	dc.w	%0000011111000000
	dc.w	%0000111101000000
	dc.w	%0001111101000000
	dc.w	%0001111101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0011111111111000
	dc.w	%0011111111111000

	dc.w	%0111111111111100
	dc.w	%0111111111110110
	dc.w	%0000000000111010
	dc.w	%0011111111110110
	dc.w	%0111101111111100
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111111111111110
	dc.w	%0111111111111110

	dc.w	%0001111111111000
	dc.w	%0111111111111110
	dc.w	%0110000000111010
	dc.w	%0000000000111010
	dc.w	%0000001111110100
	dc.w	%0000001111110100
	dc.w	%0000000000111010
	dc.w	%0110000000111010
	dc.w	%0111111111111110
	dc.w	%0001111111111000

	dc.w	%0111110000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010011111000
	dc.w	%0111010011101000
	dc.w	%0111010011101000
	dc.w	%0111010011101000
	dc.w	%0111111111111110
	dc.w	%0111111111111110
	dc.w	%0000000011111000

	dc.w	%0111111111111110
	dc.w	%0111111111111110
	dc.w	%0111010000000000
	dc.w	%0111111111111000
	dc.w	%0111111111110110
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0110000000111010
	dc.w	%0111111111110110
	dc.w	%0001111111111000

	dc.w	%0001111100000000
	dc.w	%0011101100000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111011111111000
	dc.w	%0111011111110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0011101111110100
	dc.w	%0001111111111000

	dc.w	%0111111111111110
	dc.w	%0111111111111110
	dc.w	%0000000001110100
	dc.w	%0000000011101000
	dc.w	%0000000111010000
	dc.w	%0000001110100000
	dc.w	%0000001110100000
	dc.w	%0000011101000000
	dc.w	%0000111010000000
	dc.w	%0001111100000000

	dc.w	%0001111111111000
	dc.w	%0011101111110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0011111111111100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0011101111110100
	dc.w	%0001111111111000

	dc.w	%0011111111111100
	dc.w	%0111101111110110
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111101111111010
	dc.w	%0011111111111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000001110100
	dc.w	%0000001111111000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000111110000000
	dc.w	%0000111010000000
	dc.w	%0000111110000000
	dc.w	%0000000000000000
	dc.w	%0000111110000000
	dc.w	%0000111010000000
	dc.w	%0000111110000000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000111110000000
	dc.w	%0000111010000000
	dc.w	%0000111110000000
	dc.w	%0000000000000000
	dc.w	%0000111110000000
	dc.w	%0000111010000000
	dc.w	%0000111110000000
	dc.w	%0001111000000000

	dc.w	%0000000000000000
	dc.w	%0000111110000000
	dc.w	%0001110100000000
	dc.w	%0011101000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0011101000000000
	dc.w	%0001110100000000
	dc.w	%0000111110000000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0000000000000000
	dc.w	%0111111111110000
	dc.w	%0111111111110000
	dc.w	%0000000000000000
	dc.w	%0111111111110000
	dc.w	%0111111111110000
	dc.w	%0000000000000000
	dc.w	%0000000000000000

	dc.w	%0000000000000000
	dc.w	%0000000111110000
	dc.w	%0000000011101000
	dc.w	%0000000001110100
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000001110100
	dc.w	%0000000011101000
	dc.w	%0000000111110000
	dc.w	%0000000000000000

	dc.w	%0011111111111000
	dc.w	%0111100001110100
	dc.w	%0000000111111000
	dc.w	%0000011110100000
	dc.w	%0000011110100000
	dc.w	%0000011111000000
	dc.w	%0000000000000000
	dc.w	%0000011111000000
	dc.w	%0000011101000000
	dc.w	%0000011111000000

	dc.w	%0000000000000000
	dc.w	%0001111111100000
	dc.w	%0011000000110000
	dc.w	%0110011100011000
	dc.w	%0110100010011000
	dc.w	%0110100010111000
	dc.w	%0110011101110000
	dc.w	%0011000000000000
	dc.w	%0001111111000000
	dc.w	%0000000000000000


	dc.w	%0000111111110000
	dc.w	%0001111111101000
	dc.w	%0011101111110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111011111111010
	dc.w	%0111011111111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111110000111110

	dc.w	%0111111111111000
	dc.w	%0111010001110100
	dc.w	%0111010000111010
	dc.w	%0111010001110100
	dc.w	%0111011111111100
	dc.w	%0111010001110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010001110100
	dc.w	%0111111111111000

	dc.w	%0000111111110000
	dc.w	%0011110100111100
	dc.w	%0111001000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111001000000000
	dc.w	%0011110100111100
	dc.w	%0000111111110000

	dc.w	%0111111111000000
	dc.w	%0111011110110000
	dc.w	%0111010111001000
	dc.w	%0111010001110100
	dc.w	%0111010001110100
	dc.w	%0111010001110100
	dc.w	%0111010001110100
	dc.w	%0111010111001000
	dc.w	%0111011110110000
	dc.w	%0111111111000000

	dc.w	%0111111111111110
	dc.w	%0111011111111110
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111011111000000
	dc.w	%0111011111000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111011111111110
	dc.w	%0111111111111110

	dc.w	%0111111111111110
	dc.w	%0111011111111110
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111011111000000
	dc.w	%0111011111000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111110000000000

	dc.w	%0000011111111000
	dc.w	%0001110100011110
	dc.w	%0011101000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010011111110
	dc.w	%0111010000111010
	dc.w	%0011101000111010
	dc.w	%0001110101110100
	dc.w	%0000011111111000

	dc.w	%0111110000111110
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111011111111010
	dc.w	%0111011111111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111110000111110

	dc.w	%1111111111111110
	dc.w	%1111111111111110
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%1111111111111110
	dc.w	%1111111111111110

	dc.w	%0000000000111110
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0111100001111100
	dc.w	%0001111111110000

	dc.w	%0111110001111100
	dc.w	%0111010011101000
	dc.w	%0111010111010000
	dc.w	%0111011110100000
	dc.w	%0111011110100000
	dc.w	%0111011110100000
	dc.w	%0111010111010000
	dc.w	%0111010011101000
	dc.w	%0111010001110100
	dc.w	%0111110000111010

	dc.w	%0111110000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111011111111110
	dc.w	%0111111111111110

	dc.w	%0111110000111110
	dc.w	%0111011001111010
	dc.w	%0111011111111010
	dc.w	%0111011111111010
	dc.w	%0111011111111010
	dc.w	%0111010110111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111110000111110

	dc.w	%0111110000111110
	dc.w	%0111011000111010
	dc.w	%0111011100111010
	dc.w	%0111011110111010
	dc.w	%0111011111111010
	dc.w	%0111011111111010
	dc.w	%0111010111111010
	dc.w	%0111010011111010
	dc.w	%0111010001111010
	dc.w	%0111110000111110

	dc.w	%0000011111100000
	dc.w	%0001110111011000
	dc.w	%0011101001110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0011101001110100
	dc.w	%0001110111011000
	dc.w	%0000011111100000


	dc.w	%0111111111111000
	dc.w	%0111011111110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111011111110100
	dc.w	%0111011111111000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111110000000000

	dc.w	%0000011111100000
	dc.w	%0001110111011000
	dc.w	%0011101001110100
	dc.w	%0111010001111010
	dc.w	%0111010001111010
	dc.w	%0111010011111010
	dc.w	%0111010111111010
	dc.w	%0011101011110100
	dc.w	%0001110111011100
	dc.w	%0000011111111110

	dc.w	%0111111111111000
	dc.w	%0111011111110100
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111011111110100
	dc.w	%0111011111111000
	dc.w	%0111010001110100
	dc.w	%0111010001110100
	dc.w	%0111110000111110

	dc.w	%0011111111110000
	dc.w	%0111111111110000
	dc.w	%0111010000000000
	dc.w	%0111010000000000
	dc.w	%0111101111111000
	dc.w	%0011111111110100
	dc.w	%0000000000111010
	dc.w	%0000000000111010
	dc.w	%0011111111110100
	dc.w	%0011111111111000

	dc.w	%1111111111111110
	dc.w	%1111111111111110
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011101000000
	dc.w	%0000011111000000

	dc.w	%0111110000111110
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0011011001110100
	dc.w	%0001101111011000
	dc.w	%0000011111100000

	dc.w	%0111110000111110
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0011101001110100
	dc.w	%0011101001110100
	dc.w	%0001110111101000
	dc.w	%0001110111101000
	dc.w	%0000111111010000
	dc.w	%0000011110100000

	dc.w	%0111110000111110
	dc.w	%0111010000111010
	dc.w	%0111010000111010
	dc.w	%0111010110111010
	dc.w	%0111010110111010
	dc.w	%0111010110111010
	dc.w	%0111010110111010
	dc.w	%0111011111111010
	dc.w	%0011101001110100
	dc.w	%0001110000111000

	dc.w	%0111110001111100
	dc.w	%0011101011101000
	dc.w	%0001110111010000
	dc.w	%0000111110100000
	dc.w	%0000111101000000
	dc.w	%0000111101000000
	dc.w	%0000111010100000
	dc.w	%0001110111010000
	dc.w	%0011101011101000
	dc.w	%0111110001111100

	dc.w	%0111110000111110
	dc.w	%0011101001110100
	dc.w	%0001110111101000
	dc.w	%0000111111010000
	dc.w	%0000011110100000
	dc.w	%0000011101000000
	dc.w	%0000111010000000
	dc.w	%0001110100000000
	dc.w	%0011101000000000
	dc.w	%0111110000000000

	dc.w	%0111111111111110
	dc.w	%0111111111111110
	dc.w	%0000000011110100
	dc.w	%0000000111101000
	dc.w	%0000001111010000
	dc.w	%0000011110100000
	dc.w	%0000111101000000
	dc.w	%0001111010000000
	dc.w	%0011111111111110
	dc.w	%0111111111111110



