xref: /vim-8.2.3635/runtime/syntax/asm68k.vim (revision f37506f6)
1" 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" quit when a syntax file was already loaded
12if exists("b:current_syntax")
13  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.
328" Only when an item doesn't have highlighting yet
329
330" 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
339
340hi def link asm68kComment		Comment
341hi def link asm68kTodo		Todo
342
343hi 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
351
352hi def link asm68kImmediate	SpecialChar	" Statement
353"hi def link asm68kSymbol		Constant
354
355hi def link asm68kString		String		" Constant
356hi def link asm68kCharError	Error
357hi def link asm68kStringError	Error
358
359hi def link asm68kReg		Identifier
360hi def link asm68kOperator		Identifier
361
362hi def link asm68kInclude		Include		" PreProc
363hi def link asm68kMacro		Macro		" PreProc
364hi def link asm68kMacroParam	Keyword		" Statement
365
366hi def link asm68kDirective	Special
367hi def link asm68kPreCond		Special
368
369
370hi def link asm68kOpcode		Statement
371hi def link asm68kCond		Conditional	" Statement
372hi def link asm68kRepeat		Repeat		" Statement
373
374hi def link asm68kLabel		Type
375
376let b:current_syntax = "asm68k"
377
378" vim: ts=8 sw=2
379