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