blob: e13dfe638962e28d5f37549c66047f3f56679d6b [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Motorola 68000 Assembler
3" Maintainer: Steve Wall
4" Last change: 2001 May 01
5"
6" This is incomplete. In particular, support for 68020 and
7" up and 68851/68881 co-processors is partial or non-existant.
8" Feel free to contribute...
9"
10
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020011" quit when a syntax file was already loaded
12if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000013 finish
14endif
15
16syn case ignore
17
18" Partial list of register symbols
19syn keyword asm68kReg a0 a1 a2 a3 a4 a5 a6 a7 d0 d1 d2 d3 d4 d5 d6 d7
20syn keyword asm68kReg pc sr ccr sp usp ssp
21
22" MC68010
23syn keyword asm68kReg vbr sfc sfcr dfc dfcr
24
25" MC68020
26syn keyword asm68kReg msp isp zpc cacr caar
27syn keyword asm68kReg za0 za1 za2 za3 za4 za5 za6 za7
28syn keyword asm68kReg zd0 zd1 zd2 zd3 zd4 zd5 zd6 zd7
29
30" MC68030
31syn keyword asm68kReg crp srp tc ac0 ac1 acusr tt0 tt1 mmusr
32
33" MC68040
34syn keyword asm68kReg dtt0 dtt1 itt0 itt1 urp
35
36" MC68851 registers
37syn keyword asm68kReg cal val scc crp srp drp tc ac psr pcsr
38syn keyword asm68kReg bac0 bac1 bac2 bac3 bac4 bac5 bac6 bac7
39syn keyword asm68kReg bad0 bad1 bad2 bad3 bad4 bad5 bad6 bad7
40
41" MC68881/82 registers
42syn keyword asm68kReg fp0 fp1 fp2 fp3 fp4 fp5 fp6 fp7
43syn keyword asm68kReg control status iaddr fpcr fpsr fpiar
44
45" M68000 opcodes - order is important!
46syn match asm68kOpcode "\<abcd\(\.b\)\=\s"
47syn match asm68kOpcode "\<adda\(\.[wl]\)\=\s"
48syn match asm68kOpcode "\<addi\(\.[bwl]\)\=\s"
49syn match asm68kOpcode "\<addq\(\.[bwl]\)\=\s"
50syn match asm68kOpcode "\<addx\(\.[bwl]\)\=\s"
51syn match asm68kOpcode "\<add\(\.[bwl]\)\=\s"
52syn match asm68kOpcode "\<andi\(\.[bwl]\)\=\s"
53syn match asm68kOpcode "\<and\(\.[bwl]\)\=\s"
54syn match asm68kOpcode "\<as[lr]\(\.[bwl]\)\=\s"
55syn match asm68kOpcode "\<b[vc][cs]\(\.[bwls]\)\=\s"
56syn match asm68kOpcode "\<beq\(\.[bwls]\)\=\s"
57syn match asm68kOpcode "\<bg[et]\(\.[bwls]\)\=\s"
58syn match asm68kOpcode "\<b[hm]i\(\.[bwls]\)\=\s"
59syn match asm68kOpcode "\<bl[est]\(\.[bwls]\)\=\s"
60syn match asm68kOpcode "\<bne\(\.[bwls]\)\=\s"
61syn match asm68kOpcode "\<bpl\(\.[bwls]\)\=\s"
62syn match asm68kOpcode "\<bchg\(\.[bl]\)\=\s"
63syn match asm68kOpcode "\<bclr\(\.[bl]\)\=\s"
64syn match asm68kOpcode "\<bfchg\s"
65syn match asm68kOpcode "\<bfclr\s"
66syn match asm68kOpcode "\<bfexts\s"
67syn match asm68kOpcode "\<bfextu\s"
68syn match asm68kOpcode "\<bfffo\s"
69syn match asm68kOpcode "\<bfins\s"
70syn match asm68kOpcode "\<bfset\s"
71syn match asm68kOpcode "\<bftst\s"
72syn match asm68kOpcode "\<bkpt\s"
73syn match asm68kOpcode "\<bra\(\.[bwls]\)\=\s"
74syn match asm68kOpcode "\<bset\(\.[bl]\)\=\s"
75syn match asm68kOpcode "\<bsr\(\.[bwl]\)\=\s"
76syn match asm68kOpcode "\<btst\(\.[bl]\)\=\s"
77syn match asm68kOpcode "\<callm\s"
78syn match asm68kOpcode "\<cas2\(\.[wl]\)\=\s"
79syn match asm68kOpcode "\<cas\(\.[bwl]\)\=\s"
80syn match asm68kOpcode "\<chk2\(\.[bwl]\)\=\s"
81syn match asm68kOpcode "\<chk\(\.[wl]\)\=\s"
82syn match asm68kOpcode "\<clr\(\.[bwl]\)\=\s"
83syn match asm68kOpcode "\<cmpa\(\.[wl]\)\=\s"
84syn match asm68kOpcode "\<cmpi\(\.[bwl]\)\=\s"
85syn match asm68kOpcode "\<cmpm\(\.[bwl]\)\=\s"
86syn match asm68kOpcode "\<cmp2\(\.[bwl]\)\=\s"
87syn match asm68kOpcode "\<cmp\(\.[bwl]\)\=\s"
88syn match asm68kOpcode "\<db[cv][cs]\(\.w\)\=\s"
89syn match asm68kOpcode "\<dbeq\(\.w\)\=\s"
90syn match asm68kOpcode "\<db[ft]\(\.w\)\=\s"
91syn match asm68kOpcode "\<dbg[et]\(\.w\)\=\s"
92syn match asm68kOpcode "\<db[hm]i\(\.w\)\=\s"
93syn match asm68kOpcode "\<dbl[est]\(\.w\)\=\s"
94syn match asm68kOpcode "\<dbne\(\.w\)\=\s"
95syn match asm68kOpcode "\<dbpl\(\.w\)\=\s"
96syn match asm68kOpcode "\<dbra\(\.w\)\=\s"
97syn match asm68kOpcode "\<div[su]\(\.[wl]\)\=\s"
98syn match asm68kOpcode "\<div[su]l\(\.l\)\=\s"
99syn match asm68kOpcode "\<eori\(\.[bwl]\)\=\s"
100syn match asm68kOpcode "\<eor\(\.[bwl]\)\=\s"
101syn match asm68kOpcode "\<exg\(\.l\)\=\s"
102syn match asm68kOpcode "\<extb\(\.l\)\=\s"
103syn match asm68kOpcode "\<ext\(\.[wl]\)\=\s"
104syn match asm68kOpcode "\<illegal\>"
105syn match asm68kOpcode "\<jmp\(\.[ls]\)\=\s"
106syn match asm68kOpcode "\<jsr\(\.[ls]\)\=\s"
107syn match asm68kOpcode "\<lea\(\.l\)\=\s"
108syn match asm68kOpcode "\<link\(\.[wl]\)\=\s"
109syn match asm68kOpcode "\<ls[lr]\(\.[bwl]\)\=\s"
110syn match asm68kOpcode "\<movea\(\.[wl]\)\=\s"
111syn match asm68kOpcode "\<movec\(\.l\)\=\s"
112syn match asm68kOpcode "\<movem\(\.[wl]\)\=\s"
113syn match asm68kOpcode "\<movep\(\.[wl]\)\=\s"
114syn match asm68kOpcode "\<moveq\(\.l\)\=\s"
115syn match asm68kOpcode "\<moves\(\.[bwl]\)\=\s"
116syn match asm68kOpcode "\<move\(\.[bwl]\)\=\s"
117syn match asm68kOpcode "\<mul[su]\(\.[wl]\)\=\s"
118syn match asm68kOpcode "\<nbcd\(\.b\)\=\s"
119syn match asm68kOpcode "\<negx\(\.[bwl]\)\=\s"
120syn match asm68kOpcode "\<neg\(\.[bwl]\)\=\s"
121syn match asm68kOpcode "\<nop\>"
122syn match asm68kOpcode "\<not\(\.[bwl]\)\=\s"
123syn match asm68kOpcode "\<ori\(\.[bwl]\)\=\s"
124syn match asm68kOpcode "\<or\(\.[bwl]\)\=\s"
125syn match asm68kOpcode "\<pack\s"
126syn match asm68kOpcode "\<pea\(\.l\)\=\s"
127syn match asm68kOpcode "\<reset\>"
128syn match asm68kOpcode "\<ro[lr]\(\.[bwl]\)\=\s"
129syn match asm68kOpcode "\<rox[lr]\(\.[bwl]\)\=\s"
130syn match asm68kOpcode "\<rt[dm]\s"
131syn match asm68kOpcode "\<rt[ers]\>"
132syn match asm68kOpcode "\<sbcd\(\.b\)\=\s"
133syn match asm68kOpcode "\<s[cv][cs]\(\.b\)\=\s"
134syn match asm68kOpcode "\<seq\(\.b\)\=\s"
135syn match asm68kOpcode "\<s[ft]\(\.b\)\=\s"
136syn match asm68kOpcode "\<sg[et]\(\.b\)\=\s"
137syn match asm68kOpcode "\<s[hm]i\(\.b\)\=\s"
138syn match asm68kOpcode "\<sl[est]\(\.b\)\=\s"
139syn match asm68kOpcode "\<sne\(\.b\)\=\s"
140syn match asm68kOpcode "\<spl\(\.b\)\=\s"
141syn match asm68kOpcode "\<suba\(\.[wl]\)\=\s"
142syn match asm68kOpcode "\<subi\(\.[bwl]\)\=\s"
143syn match asm68kOpcode "\<subq\(\.[bwl]\)\=\s"
144syn match asm68kOpcode "\<subx\(\.[bwl]\)\=\s"
145syn match asm68kOpcode "\<sub\(\.[bwl]\)\=\s"
146syn match asm68kOpcode "\<swap\(\.w\)\=\s"
147syn match asm68kOpcode "\<tas\(\.b\)\=\s"
148syn match asm68kOpcode "\<tdiv[su]\(\.l\)\=\s"
149syn match asm68kOpcode "\<t\(rap\)\=[cv][cs]\(\.[wl]\)\=\s"
150syn match asm68kOpcode "\<t\(rap\)\=eq\(\.[wl]\)\=\s"
151syn match asm68kOpcode "\<t\(rap\)\=[ft]\(\.[wl]\)\=\s"
152syn match asm68kOpcode "\<t\(rap\)\=g[et]\(\.[wl]\)\=\s"
153syn match asm68kOpcode "\<t\(rap\)\=[hm]i\(\.[wl]\)\=\s"
154syn match asm68kOpcode "\<t\(rap\)\=l[est]\(\.[wl]\)\=\s"
155syn match asm68kOpcode "\<t\(rap\)\=ne\(\.[wl]\)\=\s"
156syn match asm68kOpcode "\<t\(rap\)\=pl\(\.[wl]\)\=\s"
157syn match asm68kOpcode "\<t\(rap\)\=v\>"
158syn match asm68kOpcode "\<t\(rap\)\=[cv][cs]\>"
159syn match asm68kOpcode "\<t\(rap\)\=eq\>"
160syn match asm68kOpcode "\<t\(rap\)\=[ft]\>"
161syn match asm68kOpcode "\<t\(rap\)\=g[et]\>"
162syn match asm68kOpcode "\<t\(rap\)\=[hm]i\>"
163syn match asm68kOpcode "\<t\(rap\)\=l[est]\>"
164syn match asm68kOpcode "\<t\(rap\)\=ne\>"
165syn match asm68kOpcode "\<t\(rap\)\=pl\>"
166syn match asm68kOpcode "\<trap\s"
167syn match asm68kOpcode "\<tst\(\.[bwl]\)\=\s"
168syn match asm68kOpcode "\<unlk\s"
169syn match asm68kOpcode "\<unpk\s"
170
171" Valid labels
172syn match asm68kLabel "^[a-z_?.][a-z0-9_?.$]*$"
173syn match asm68kLabel "^[a-z_?.][a-z0-9_?.$]*\s"he=e-1
174syn match asm68kLabel "^\s*[a-z_?.][a-z0-9_?.$]*:"he=e-1
175
176" Various number formats
177syn match hexNumber "\$[0-9a-fA-F]\+\>"
178syn match hexNumber "\<[0-9][0-9a-fA-F]*H\>"
179syn match octNumber "@[0-7]\+\>"
180syn match octNumber "\<[0-7]\+[QO]\>"
181syn match binNumber "%[01]\+\>"
182syn match binNumber "\<[01]\+B\>"
183syn match decNumber "\<[0-9]\+D\=\>"
184syn match floatE "_*E_*" contained
185syn match floatExponent "_*E_*[-+]\=[0-9]\+" contained contains=floatE
186syn match floatNumber "[-+]\=[0-9]\+_*E_*[-+]\=[0-9]\+" contains=floatExponent
187syn match floatNumber "[-+]\=[0-9]\+\.[0-9]\+\(E[-+]\=[0-9]\+\)\=" contains=floatExponent
188syn match floatNumber ":\([0-9a-f]\+_*\)\+"
189
190" Character string constants
191syn match asm68kStringError "'[ -~]*'"
192syn match asm68kStringError "'[ -~]*$"
193syn region asm68kString start="'" skip="''" end="'" oneline contains=asm68kCharError
194syn match asm68kCharError "[^ -~]" contained
195
196" Immediate data
197syn match asm68kImmediate "#\$[0-9a-fA-F]\+" contains=hexNumber
198syn match asm68kImmediate "#[0-9][0-9a-fA-F]*H" contains=hexNumber
199syn match asm68kImmediate "#@[0-7]\+" contains=octNumber
200syn match asm68kImmediate "#[0-7]\+[QO]" contains=octNumber
201syn match asm68kImmediate "#%[01]\+" contains=binNumber
202syn match asm68kImmediate "#[01]\+B" contains=binNumber
203syn match asm68kImmediate "#[0-9]\+D\=" contains=decNumber
204syn match asm68kSymbol "[a-z_?.][a-z0-9_?.$]*" contained
205syn match asm68kImmediate "#[a-z_?.][a-z0-9_?.]*" contains=asm68kSymbol
206
207" Special items for comments
208syn keyword asm68kTodo contained TODO
209
210" Operators
211syn match asm68kOperator "[-+*/]" " Must occur before Comments
212syn match asm68kOperator "\.SIZEOF\."
213syn match asm68kOperator "\.STARTOF\."
214syn match asm68kOperator "<<" " shift left
215syn match asm68kOperator ">>" " shift right
216syn match asm68kOperator "&" " bit-wise logical and
217syn match asm68kOperator "!" " bit-wise logical or
218syn match asm68kOperator "!!" " exclusive or
219syn match asm68kOperator "<>" " inequality
220syn match asm68kOperator "=" " must be before other ops containing '='
221syn match asm68kOperator ">="
222syn match asm68kOperator "<="
223syn match asm68kOperator "==" " operand existance - used in macro definitions
224
225" Condition code style operators
226syn match asm68kOperator "<[CV][CS]>"
227syn match asm68kOperator "<EQ>"
228syn match asm68kOperator "<G[TE]>"
229syn match asm68kOperator "<[HM]I>"
230syn match asm68kOperator "<L[SET]>"
231syn match asm68kOperator "<NE>"
232syn match asm68kOperator "<PL>"
233
234" Comments
235syn match asm68kComment ";.*" contains=asm68kTodo
236syn match asm68kComment "\s!.*"ms=s+1 contains=asm68kTodo
237syn match asm68kComment "^\s*[*!].*" contains=asm68kTodo
238
239" Include
240syn match asm68kInclude "\<INCLUDE\s"
241
242" Standard macros
243syn match asm68kCond "\<IF\(\.[BWL]\)\=\s"
244syn match asm68kCond "\<THEN\(\.[SL]\)\=\>"
245syn match asm68kCond "\<ELSE\(\.[SL]\)\=\>"
246syn match asm68kCond "\<ENDI\>"
247syn match asm68kCond "\<BREAK\(\.[SL]\)\=\>"
248syn match asm68kRepeat "\<FOR\(\.[BWL]\)\=\s"
249syn match asm68kRepeat "\<DOWNTO\s"
250syn match asm68kRepeat "\<TO\s"
251syn match asm68kRepeat "\<BY\s"
252syn match asm68kRepeat "\<DO\(\.[SL]\)\=\>"
253syn match asm68kRepeat "\<ENDF\>"
254syn match asm68kRepeat "\<NEXT\(\.[SL]\)\=\>"
255syn match asm68kRepeat "\<REPEAT\>"
256syn match asm68kRepeat "\<UNTIL\(\.[BWL]\)\=\s"
257syn match asm68kRepeat "\<WHILE\(\.[BWL]\)\=\s"
258syn match asm68kRepeat "\<ENDW\>"
259
260" Macro definition
261syn match asm68kMacro "\<MACRO\>"
262syn match asm68kMacro "\<LOCAL\s"
263syn match asm68kMacro "\<MEXIT\>"
264syn match asm68kMacro "\<ENDM\>"
265syn match asm68kMacroParam "\\[0-9]"
266
267" Conditional assembly
268syn match asm68kPreCond "\<IFC\s"
269syn match asm68kPreCond "\<IFDEF\s"
270syn match asm68kPreCond "\<IFEQ\s"
271syn match asm68kPreCond "\<IFGE\s"
272syn match asm68kPreCond "\<IFGT\s"
273syn match asm68kPreCond "\<IFLE\s"
274syn match asm68kPreCond "\<IFLT\s"
275syn match asm68kPreCond "\<IFNC\>"
276syn match asm68kPreCond "\<IFNDEF\s"
277syn match asm68kPreCond "\<IFNE\s"
278syn match asm68kPreCond "\<ELSEC\>"
279syn match asm68kPreCond "\<ENDC\>"
280
281" Loop control
282syn match asm68kPreCond "\<REPT\s"
283syn match asm68kPreCond "\<IRP\s"
284syn match asm68kPreCond "\<IRPC\s"
285syn match asm68kPreCond "\<ENDR\>"
286
287" Directives
288syn match asm68kDirective "\<ALIGN\s"
289syn match asm68kDirective "\<CHIP\s"
290syn match asm68kDirective "\<COMLINE\s"
291syn match asm68kDirective "\<COMMON\(\.S\)\=\s"
292syn match asm68kDirective "\<DC\(\.[BWLSDXP]\)\=\s"
293syn match asm68kDirective "\<DC\.\\[0-9]\s"me=e-3 " Special use in a macro def
294syn match asm68kDirective "\<DCB\(\.[BWLSDXP]\)\=\s"
295syn match asm68kDirective "\<DS\(\.[BWLSDXP]\)\=\s"
296syn match asm68kDirective "\<END\>"
297syn match asm68kDirective "\<EQU\s"
298syn match asm68kDirective "\<FEQU\(\.[SDXP]\)\=\s"
299syn match asm68kDirective "\<FAIL\>"
300syn match asm68kDirective "\<FOPT\s"
301syn match asm68kDirective "\<\(NO\)\=FORMAT\>"
302syn match asm68kDirective "\<IDNT\>"
303syn match asm68kDirective "\<\(NO\)\=LIST\>"
304syn match asm68kDirective "\<LLEN\s"
305syn match asm68kDirective "\<MASK2\>"
306syn match asm68kDirective "\<NAME\s"
307syn match asm68kDirective "\<NOOBJ\>"
308syn match asm68kDirective "\<OFFSET\s"
309syn match asm68kDirective "\<OPT\>"
310syn match asm68kDirective "\<ORG\(\.[SL]\)\=\>"
311syn match asm68kDirective "\<\(NO\)\=PAGE\>"
312syn match asm68kDirective "\<PLEN\s"
313syn match asm68kDirective "\<REG\s"
314syn match asm68kDirective "\<RESTORE\>"
315syn match asm68kDirective "\<SAVE\>"
316syn match asm68kDirective "\<SECT\(\.S\)\=\s"
317syn match asm68kDirective "\<SECTION\(\.S\)\=\s"
318syn match asm68kDirective "\<SET\s"
319syn match asm68kDirective "\<SPC\s"
320syn match asm68kDirective "\<TTL\s"
321syn match asm68kDirective "\<XCOM\s"
322syn match asm68kDirective "\<XDEF\s"
323syn match asm68kDirective "\<XREF\(\.S\)\=\s"
324
325syn case match
326
327" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200328" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200330" The default methods for highlighting. Can be overridden later
331" Comment Constant Error Identifier PreProc Special Statement Todo Type
332"
333" Constant Boolean Character Number String
334" Identifier Function
335" PreProc Define Include Macro PreCondit
336" Special Debug Delimiter SpecialChar SpecialComment Tag
337" Statement Conditional Exception Keyword Label Operator Repeat
338" Type StorageClass Structure Typedef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000339
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200340hi def link asm68kComment Comment
341hi def link asm68kTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200343hi def link hexNumber Number " Constant
344hi def link octNumber Number " Constant
345hi def link binNumber Number " Constant
346hi def link decNumber Number " Constant
347hi def link floatNumber Number " Constant
348hi def link floatExponent Number " Constant
349hi def link floatE SpecialChar " Statement
350"hi def link floatE Number " Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200352hi def link asm68kImmediate SpecialChar " Statement
353"hi def link asm68kSymbol Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200355hi def link asm68kString String " Constant
356hi def link asm68kCharError Error
357hi def link asm68kStringError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200359hi def link asm68kReg Identifier
360hi def link asm68kOperator Identifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200362hi def link asm68kInclude Include " PreProc
363hi def link asm68kMacro Macro " PreProc
364hi def link asm68kMacroParam Keyword " Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200366hi def link asm68kDirective Special
367hi def link asm68kPreCond Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368
369
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200370hi def link asm68kOpcode Statement
371hi def link asm68kCond Conditional " Statement
372hi def link asm68kRepeat Repeat " Statement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200374hi def link asm68kLabel Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000375
376let b:current_syntax = "asm68k"
377
378" vim: ts=8 sw=2