373 lines
5.2 KiB
Text
373 lines
5.2 KiB
Text
******** macro.amp
|
|
! .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
|
|
macro.asm:70 Too many positional arguments.
|
|
macro.asm:98 Can't mix positional and keyword arguments.
|