!	.MACRO	SUM FROM=0, TO=9
!	; \FROM \TO
!	MOV	R\FROM,R10
!COUNT	.ASSIGNA	\FROM+1
!	.AWHILE	\&COUNT LE \TO
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	.ENDM
!

!	SUM 0,5
!	; 0 5
	; 0 5
!	MOV	R0,R10
	MOV	R0,R10
!COUNT	.ASSIGNA	0+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R1,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R2,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R3,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R4,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R5,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	SUM 	TO=5
!	; 0 5
	; 0 5
!	MOV	R0,R10
	MOV	R0,R10
!COUNT	.ASSIGNA	0+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R1,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R2,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R3,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R4,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R5,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	SUM 	FROM=2, TO=5
!	; 2 5
	; 2 5
!	MOV	R2,R10
	MOV	R2,R10
!COUNT	.ASSIGNA	2+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R3,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R4,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!	MOV	R\&COUNT,R10
	MOV	R5,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AWHILE	\&COUNT LE 5
!	MOV	R\&COUNT,R10
!COUNT	.ASSIGNA	\&COUNT+1
!	.AENDW
!

!

!; hi this is a comment
	; hi this is a comment
!	.MACRO	BACK_SLASH_SET
!	\(MOV	#"\",R0) 
!	.ENDM
!	BACK_SLASH_SET
!	MOV	#"\",R0 
	MOV	#"\",R0 
!	.MACRO	COMM
!	bar	; this comment will get copied out
!	foo	\; this one will get dropped
!	.ENDM
!	COMM
!	bar	; this comment will get copied out
	bar	; this comment will get copied out
!	foo	\; this one will get dropped
	foo	\; this one will get dropped
!	BACK_SLASH_SET
!	MOV	#"\",R0 
	MOV	#"\",R0 
!	.MACRO	PLUS2
!	ADD	#1,R\&V1
!	.SDATA	"\&V'1"
!	.ENDM
!V	.ASSIGNC	"R"
!V1	.ASSIGNA	1
!	PLUS2
!	ADD	#1,R\&V1
	ADD	#1,R1
!	.SDATA	"\&V'1"
	.byte	82,49
!	.MACRO	PLUS1	P,P1
!	ADD	#1,\P1
!	.SDATA	"\P'1"
!	.ENDM
!	PLUS1	R,R1
!	ADD	#1,R1
	ADD	#1,R1
!	.SDATA	"R1"
	.byte	82,49
!

!	.MACRO	SUM P1
!	MOV	R0,R10
!	ADD	R1,R10
!	ADD	R2,R10
!	\P1	
!	ADD	R3,R10
!	.ENDM
!

!	SUM	.EXITM
!	MOV	R0,R10
	MOV	R0,R10
!	ADD	R1,R10
	ADD	R1,R10
!	ADD	R2,R10
	ADD	R2,R10
!	.EXITM	
!

!	.MACRO foo bar=a default=b
!	\bar
!	\default
!	bar
!	default
!	.ENDM
!	foo default=dog bar=cat
!	cat
	cat
!	dog
	dog
!	bar
	bar
!	default
	default
!	foo X Y
!	X
	X
!	Y
	Y
!	bar
	bar
!	default
	default
!	foo
!	a
	a
!	b
	b
!	bar
	bar
!	default
	default
!	foo bar=cat default=dog
!	cat
	cat
!	dog
	dog
!	bar
	bar
!	default
	default
!

!

!	.MACRO	foo bar
!	HI
!	HI \bar
!	HI
!	.ENDM
!

!	foo 1
!	HI
	HI
!	HI 1
	HI 1
!	HI
	HI
!	foo 123
!	HI
	HI
!	HI 123
	HI 123
!	HI
	HI
!	foo 1 2 3 4
!	foo
!	HI
	HI
!	HI 
	HI 
!	HI
	HI
!

!	
!	.MACRO	PUSH Rn
!	MOV.L	\Rn,@-r15
!	.ENDM
!	PUSH	R0
!	MOV.L	R0,@-r15
	MOV.L	R0,@-r15
!	PUSH	R1
!	MOV.L	R1,@-r15
	MOV.L	R1,@-r15
!

!

!	.MACRO	RES_STR STR, Rn
!	MOV.L	#str\@,\Rn
!	BRA	end_str\@
!	NOP
!str\@	.SDATA "\STR"
!	.ALIGN	2
!end_str\@
!	.ENDM
!	
!	RES_STR	"ONE",R0	
!	MOV.L	#str00018,R0
	MOV.L	#str00018,R0
!	BRA	end_str00018
	BRA	end_str00018
!	NOP
	NOP
!str00018	.SDATA "ONE"
str00018:	.byte	79,78,69
!	.ALIGN	2
	.align	2
!end_str00018
end_str00018:
!	RES_STR	"TWO",R1
!	MOV.L	#str00019,R1
	MOV.L	#str00019,R1
!	BRA	end_str00019
	BRA	end_str00019
!	NOP
	NOP
!str00019	.SDATA "TWO"
str00019:	.byte	84,87,79
!	.ALIGN	2
	.align	2
!end_str00019
end_str00019:
!	RES_STR	"THREE",R2
!	MOV.L	#str00020,R2
	MOV.L	#str00020,R2
!	BRA	end_str00020
	BRA	end_str00020
!	NOP
	NOP
!str00020	.SDATA "THREE"
str00020:	.byte	84,72,82,69,69
!	.ALIGN	2
	.align	2
!end_str00020
end_str00020:
!

!

!

!	RES_STR STR=donkey Rn=R1
!	MOV.L	#str00021,R1
	MOV.L	#str00021,R1
!	BRA	end_str00021
	BRA	end_str00021
!	NOP
	NOP
!str00021	.SDATA "donkey"
str00021:	.byte	100,111,110,107,101,121
!	.ALIGN	2
	.align	2
!end_str00021
end_str00021:
!	RES_STR donkey,R1
!	MOV.L	#str00022,R1
	MOV.L	#str00022,R1
!	BRA	end_str00022
	BRA	end_str00022
!	NOP
	NOP
!str00022	.SDATA "donkey"
str00022:	.byte	100,111,110,107,101,121
!	.ALIGN	2
	.align	2
!end_str00022
end_str00022:
! 	RES_STR donkey Rn=R1
!	.END
