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" 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 392