asm68k.vim 14 KB

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