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