*****************************************************************************
* Intro by M.Meany                                                          *
*	                                                            *
*  A small intro using a shell routine from Count Zeros intro. I did not    *
*have a music player and module to go together so I have used this. Thanks  *
*for the tunes Count, and notice Snowman I dont always use libraries !      *
*                                                                           *
* Sets up 3 part display, logo at top, flashing screens in middle, and text *
*at the bottom. Music was named Complications.                              *
*****************************************************************************

;	SECTION	LOWMEM,CODE_C	Force Code To Chip RAM
	OPT	C-,o+,ow-	Case Independant
	
	include	source_2:include/my_hardware.i


*****************************************************************************
* EXECUTE SEQUENCE	    	    *
*****************************************************************************

	MOVEM.L A0-A6/D0-D7,-(A7)	Save all Registers
	MOVE.L  A7,Stackpoint	Save Pointer
	JSR 	Kill_OS
	JSR 	setup
	JSR	Mt_Init	Initialise music
	JSR 	Main
	JSR	Mt_End	End Music
	JSR 	Help_OS
	MOVE.L  Stackpoint,A7	Restore Pointer
	MOVEM.L (A7)+,A0-A6/D0-D7	Restore Registers
	RTS

*****************************************************************************
* KILL OS	            	    *
*****************************************************************************

Kill_OS	MOVE.L	$4,A6
	CLR.L	D0
	LEA	GFXlib(PC),A1
	JSR	-552(A6)	Open GFX Lib
	MOVE.L	D0,GFXBase
	JSR	-132(A6)    	LVO_Forbid
	MOVE.W	$DFF002,DMAsave	  Save DMA
	MOVE.W	$DFF01C,INTensave Save Interupt Enable
	MOVE.W	$DFF01E,INTrqsave Save Interupt Request
Wt	BTSt	#0,$DFF004	Test MSB of VPOS
	BNE.S	Wt
Wtt	CMPI.B	#55,$DFF006	Wait Line 310
	BNE.S	Wtt	(stops Spurious Sprite Data)
	MOVE.W	#$7FFF,$DFF09A  Disable Interupts
	MOVE.W	#$7FFF,$DFF096	Disable DMA
	MOVE.L	#clist,$DFF080	Replace Copper 
	MOVE.W	$DFF088,D0	Strobe Copper
	MOVE.W	#%1000001111100000,$DFF096 Copper/Bitplane/Blit/Sprite
	RTS 
 
*****************************************************************************
* SET UP ROUTINES		    *
*****************************************************************************

; Write bitplane pointers into copperlist

setup	move.l	#scrn0,d0	logo bitplanes
	move.w	d0,bpl0l
	swap	d0
	move.w	d0,bpl0h
	
	move.l	#scrn1,d0	demo bitplanes
	move.w	d0,bpl1l
	swap	d0
	move.w	d0,bpl1h
	
	move.l	#scrn2,d0	text bitplanes
	move.w	d0,bpl2l
	swap	d0
	move.w	d0,bpl2h
	rts


*****************************************************************************
* MAIN		    	    *
*****************************************************************************

Main	CMPI.B	#255,$DFF006	Wait For line 255
	BNE.S	Main	
	jsr	flash
	jsr	scrl_logo
	jsr	scrl_text
	JSR	Mt_Music
	BTST   	#6,$BFE001	Test Mouse
	BNE.S  	Main
 	RTS	 
 	
;************************************************************************
; Switch screens
;************************************************************************

flash	move.l	list_pos,a4
	move.l	scrn_delay,d7
	subi.b	#1,d7	decrease counter
	bne.s	same_pic	jump if not zero
	move.l	(a4)+,d0	get addr of next screen
	bne.s	still_list	jump if not end of list
	lea	scrn_list,a4	reset list pointer
	move.l	(a4)+,d0	get addr of 1st screen
still_list	move.w	d0,bpl1l	put high addr in copper list
	swap	d0
	move.w	d0,bpl1h	put low addr in copper list
	move.l	(a4)+,d7	get delay counter from list
	move.w	(a4)+,col0	get color00 from list
	move.w	(a4)+,col1	get color01 from list
same_pic	move.l	d7,scrn_delay
	move.l	a4,list_pos
	rts		all done so return

****************************************************************************
*                 Scroll Logo Left And Right                               *
****************************************************************************

scrl_logo	lea	scrn0s,a0
	moveq.l	#40,d1
	subi.w	#1,scrl_count
	bne.s	same_direction
	not.b	scrl_flag
	move.w	#7,scrl_count
same_direction	tst.b	scrl_flag
	beq.s	left
	bsr	scrl_bplr
	rts
left	bsr	scrl_bpll
	rts
	
****************************************************************************
*                 Scroll Bitplane Left One Pixel                           *
****************************************************************************
;Entry: a0=bitplane start address
;       d1=number of lines to scroll

scrl_bpll
	adda.l	#40,a0
	subi.w	#1,d1
.lp1	move.l	#19,d0
	move.w	#0,ccr
.lp2	roxl.w	-(a0)
	dbra	d0,.lp2
	adda.l	#80,a0
	dbra	d1,.lp1
	rts

****************************************************************************
*                 Scroll Bitplane Right One Pixel                          *
****************************************************************************
;Entry: a0=bitplane start address
;       d1=number of lines to scroll

scrl_bplr	subi.w	#1,d1
.lp1	move.l	#19,d0
	move.w	#0,ccr
.lp2	roxr.w	(a0)+
	dbra	d0,.lp2
	dbra	d1,.lp1
	rts

***************************************************************************
*                  Display And Scroll Text                                *
***************************************************************************

scrl_text	lea	scrn2+80,a0
	moveq.l	#8,d1
	subi.w	#1,text_count
	bne.s	scrl_only
	bsr	printchar
	move.w	#7,text_count
	rts
scrl_only	bsr	scrl_bpll
	rts

****************************************************************************
*                 Print A Character                                        *
****************************************************************************
 
printchar	move.l	msgpoint,a0
	moveq.l	#0,d0
	move.b	(a0),d0
	cmpi.b	#' ',d0
	bne.s	nospc
	move.b	#'@',d0
nospc	sub.w	#'@',d0
	mulu.w	#8,d0
	lea	alphadat,a0
	adda.l	d0,a0
	moveq.l	#7,d0
	move.l	#40,d1
	move.l	#scrn2+80,a1
	adda.l	#39,a1
nextln	move.b	(a0)+,(a1)
	adda.l	d1,a1
	dbra	d0,nextln
	addq.l	#1,msgpoint
	move.l	msgpoint,a0
	tst.b	(a0)
	bne.s	more
	move.l	#msg,msgpoint
more	rts

****************************************************************************
* 	  REPLAY ROUTINE V2.4	   *
****************************************************************************

mt_init lea	mt_data,a0
	add.l	#$03b8,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(pc),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(PC),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
mt_cool cmp.w	#6,mt_counter
	bne.s	mt_notsix
	clr.w	mt_counter
	bra	mt_rout2
mt_notsix
	lea	mt_aud1temp(PC),a6
	cmpi.w	#0,(a6)
;	beq.s	levm1
;	move.w	#$000E,Ch1	
levm1	tst.b	3(a6)
	beq.s	mt_arp1
	lea	$dff0a0,a5	
	bsr.s	mt_arprout
mt_arp1 lea	mt_aud2temp(PC),a6
	cmpi.w	#0,(a6)
;	beq.s	levm2
;	move.w	#$000C,Ch2	
levm2	tst.b	3(a6)
	beq.s	mt_arp2
	lea	$dff0b0,a5
	bsr.s	mt_arprout
mt_arp2 lea	mt_aud3temp(PC),a6
	cmpi.w	#0,(a6)
;	beq.s	levm3
;	move.w	#$000A,Ch3	
levm3	tst.b	3(a6)
	beq.s	mt_arp3
	lea	$dff0c0,a5
	bsr.s	mt_arprout
mt_arp3 lea	mt_aud4temp(PC),a6
	cmpi.w	#0,(a6)
;	beq.s	levm4
;	move.w	#$0008,Ch4	
levm4	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(PC),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(PC),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(PC),d0
	moveq	#0,d1
	move.b	(a2,d0),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.l	mt_partnote(PC),d1
	move.l	d1,mt_partpoint
	clr.w	mt_dmacon
	lea	$dff0a0,a5
	lea	mt_aud1temp(PC),a6
	bsr	mt_playit
	lea	$dff0b0,a5
	lea	mt_aud2temp(PC),a6
	bsr	mt_playit
	lea	$dff0c0,a5
	lea	mt_aud3temp(PC),a6
	bsr	mt_playit
	lea	$dff0d0,a5
	lea	mt_aud4temp(PC),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(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice3
	move.l	10(a6),$dff0d0
	move.w	#1,$dff0d4
mt_voice3
	lea	mt_aud3temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice2
	move.l	10(a6),$dff0c0
	move.w	#1,$dff0c4
mt_voice2
	lea	mt_aud2temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice1
	move.l	10(a6),$dff0b0
	move.w	#1,$dff0b4
mt_voice1
	lea	mt_aud1temp(PC),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(PC),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(PC),d0
	move.l	mt_partnrplay(PC),d1
	cmp.l	d0,d1
	bne.s	mt_stop
	clr.l	mt_partnrplay
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(PC),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_cool+3
mt_back rts

mt_aud1temp
	dcb.w	10,0
	dc.w	1
	dcb.w	2,0
mt_aud2temp
	dcb.w	10,0
	dc.w	2
	dcb.w	2,0
mt_aud3temp
	dcb.w	10,0
	dc.w	4
	dcb.w	2,0
mt_aud4temp
	dcb.w	10,0
	dc.w	8
	dcb.w	2,0


mt_partnote	dc.l	0
mt_partnrplay	dc.l	0
mt_counter	dc.w	0
mt_partpoint	dc.l	0
mt_samples	dc.l	0
mt_sample1	dcb.l	31,0
mt_maxpart	dc.w	0
mt_dmacon	dc.w	0
mt_status	dc.w	0

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

*****************************************************************************
* RESTORE OS	    	    *
*****************************************************************************

Help_OS	MOVE.W  INTensave,D7
	BSET    #$F,D7	Set Write Bit
	MOVE.W  D7,$DFF09A	Restore INTen
	MOVE.W  INTrqsave,D7
	BSET    #$F,D7
	MOVE.W  D7,$DFF09C	Restore INTrq
	MOVE.W  DMAsave,D7
	BSET    #$F,D7
	MOVE.W  D7,$DFF096	  	Restore DMA
	MOVE.L  GFXbase,A0
	MOVE.L  $26(A0),$DFF080	Find/Replace System Copper
	MOVE.L  $4,A6
	JSR     -138(A6)	LVO_Permit
	RTS 

*****************************************************************************
* LABELS,INCLUDES		    *
*****************************************************************************

GFXlib	DC.B "graphics.library"
Stackpoint	DC.L 0
GFXbase	DC.L 0
INTrqsave	DC.W 0
INTensave	DC.W 0
DMAsave	DC.W 0
Offset	DC.L    0
;Delay	DC.B 	$12
;TextPos	DC.L	0
list_pos	dc.l	scrn_list
scrn_delay	dc.l	4
scrl_count	dc.w	7
text_count	dc.w	7
scrl_flag	dc.b	0
	even
	SECTION  LOWMEM,DATA_C		
	even

; New Copper List, sets up a three part display.

clist	dc.w	spr0pth,$0000
	dc.w	spr0ptl,$0000
	dc.w	spr1pth,$0000
	dc.w	spr1ptl,$0000
	dc.w	spr2pth,$0000
	dc.w	spr2ptl,$0000
	dc.w	spr3pth,$0000
	dc.w	spr3ptl,$0000
	dc.w	spr4pth,$0000
	dc.w	spr4ptl,$0000
	dc.w	spr5pth,$0000
	dc.w	spr5ptl,$0000
	dc.w	spr6pth,$0000
	dc.w	spr6ptl,$0000
	dc.w	spr7pth,$0000
	dc.w	spr7ptl,$0000
	dc.w	diwstrt,$1e81
	dc.w	diwstop,$38c1
	dc.w	ddfstrt,$0038
	dc.w	ddfstop,$00d0
	dc.w	bpl1mod,$0000
	dc.w	bpl2mod,$0000
	dc.w	bplcon1,$0000
	dc.w	bplcon0,$1200
	dc.w	color00,$0000	black background
	dc.w	color01,$0fb0	gold foreground
	dc.w	bpl1pth
bpl0h	dc.w	0
	dc.w	bpl1ptl
bpl0l	dc.w	0
	dc.w	$45e1,$fffe	wait for x=448,y=69
	dc.w	color00
col0	dc.w	$0000	black background
	dc.w	color01
col1	dc.w	$0fb0	gold foreground
	dc.w	bpl1pth
bpl1h	dc.w	0
	dc.w	bpl1ptl
bpl1l	dc.w	0
	dc.w	$ffe1,$fffe	wait for x=448,y=255
	dc.w	$0ee1,$fffe	wait for x=448,y=14
	dc.w	color00,$0000	black background
	dc.w	color01,$0c1f	grey foreground
	dc.w	bpl1pth
bpl2h	dc.w	0
	dc.w	bpl1ptl
bpl2l	dc.w	0
	dc.w	$ffff,$fffe
	
; Load in bitmaps

scrn0	ds.b	40*10
scrn0s	incbin	'source_2:bitmaps/logo.bm'
	even
scrn2	ds.b	(320/8)*40


scrn1	
bev	incbin	'source_2:bitmaps/bev.bm'
	even
acid	incbin	'source_2:bitmaps/acid.bm'
	even
snow	incbin	'source_2:bitmaps/snow.bm'
	even
hiphop	incbin	'source_2:bitmaps/hh.bm'
	even

; The following list defines what screen to display and for how long
;and also what colours are to be used. The delay is in 50th's of a second.


scrn_list	dc.l	bev+40*10,3
	dc.w	0,$0d00
	dc.l	acid+30,3
	dc.w	$0c00,$0fd0
	dc.l	snow,3
	dc.w	0,$0fff
	dc.l	acid+40,3
	dc.w	$0e40,$061f
	dc.l	hiphop+40*50,3
	dc.w	$0fff,$0b1
	dc.l	acid+50,3
	dc.w	0,$0c1f
	dc.l	hiphop+40*50,3
	dc.w	0,$0f90
	dc.l	snow,3
	dc.w	$0fff,$0999
	dc.l	bev+40*5,3
	dc.w	0,$0fac
	dc.l	hiphop+40*50,3
	dc.w	0,$91f
	dc.l	bev+40*10,3
	dc.w	0,$0fb0
	dc.l	snow,3
	dc.w	$0999,$0ccc
	dc.l	acid,3
	dc.w	$0ccc,$00db
	dc.l	0,0
	dc.w	0,0

Mt_Data	IncBin "source_2:modules/mod.complications"


; Text routine data

msgpoint	dc.l	msg
scrlcount	dc.b	7
	even
	DC.L	0

alphadat	dc.b	0,0,0,0,0,0,0,0		space	
	dc.b	0,56,68,68,68,124,68,68	a
	dc.b	0,112,72,80,120,76,68,120	b
	dc.b	0,60,64,64,64,64,64,60	c
	dc.b	0,112,72,68,68,68,72,112	d
	dc.b	0,60,64,64,48,64,64,60	e
	dc.b	0,60,64,64,48,64,64,64	f
	dc.b	0,60,64,64,64,92,68,56	g
	dc.b	0,68,68,68,124,68,68,68	h
	dc.b	0,124,16,16,16,16,16,124	i
	dc.b	0,118,8,8,8,8,72,48	j
	dc.b	0,68,72,80,96,80,72,68	k
	dc.b	0,64,64,64,64,64,64,60	l
	dc.b	0,68,108,84,68,68,68,68	m
	dc.b	0,68,100,84,84,84,76,68	n
	dc.b	0,16,40,68,68,68,40,16	o
	dc.b	0,120,68,68,120,64,64,64	p
	dc.b	0,24,36,66,66,74,36,26	q
	dc.b	0,120,68,68,120,80,72,68	r
	dc.b	0,60,64,64,56,4,4,120	s
	dc.b	0,124,16,16,16,16,16,16	t
	dc.b	0,68,68,68,68,68,68,58	u
	dc.b	0,68,68,68,68,40,40,16	v
	dc.b	0,68,68,68,68,84,108,68	w
	dc.b	0,68,68,40,16,40,68,68	x
	dc.b	0,68,68,40,16,16,16,16	y
	dc.b	0,124,4,8,16,32,64,124	z

msg	
	dc.b	'HI ALL                                                       '
	dc.b	'AS YOU CAN SEE THIS PROGRAM IS RIDDLED WITH GLITCHES AS I THREW '
	dc.b	'IT TOGETHER REALLY QUICKLY      I WANTED TO USE ALL LIBRARY ROUTINES TO '
	dc.b	'CODE THIS BUT GAVE UP AS I COULD NOT LINK TWO VIEWPORTS TOGETHER EVEN THOUGH '
	dc.b	'I FOLLOWED THE METHOD DISCRIBED IN THE ROM KERNEL REFERENCE MANUAL FOR C PROGRAMMERS '
	dc.b	'      IF YOU HAVE EXAMPLE CODE THAT SHOWS HOW TO DO THIS AND IT WORKS PLEASE SEND IT '
	dc.b	'TO ME                NO GREAT LIST OF GREETS IM AFRAID JUST THANKS TO ZAPHOD OF PENDLE EUROPA '
	dc.b	'FOR SUPPLYING MORE GOODIES     INTERRUPT PROGRAMMING IS SOMETHING I HAVE WANTED TO TRY FOR '
	dc.b	'SOME TIME NOW SO LOOK OUT FOR SOME NEXT MONTH   AND ALSO THANKS TO COUNT ZERO FOR THE MUSIC PLAYER AND TUNE      THATS IT SO ENJOY THE DISK      MARK     '
	dc.b	'     NOW THE BORING PART    '
	dc.b	'                                              ',0
	EVEN    


;EXEC LIB. OFFSETS

openlibrary	=	-30-522
forbid	=	-30-102
permit	=	-30-108
allocmem	=	-30-168
freemem	=	-30-180

;GRAPHICS LIB. OFFSETS

startlist	=	38

;OTHER STUFF

execbase	=	$4
chip	=	$2


