326 lines
11 KiB
VimL
326 lines
11 KiB
VimL
" Vim syntax file
|
|
" Language: CA65 Assembler for 6502 Architectures
|
|
" Maintainer: Max Bane <max.bane@gmail.com>
|
|
" Last Change: 2014 Feb 04
|
|
|
|
" Heavily derived from the 2014-Feb-04 version of Erik Wognsen's asm.vim,
|
|
" included in the Vim distribution.
|
|
|
|
" For version 5.x: Clear all syntax items
|
|
" For version 6.0 and later: Quit when a syntax file was already loaded
|
|
if version < 600
|
|
syntax clear
|
|
elseif exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
let s:cpo_save = &cpo
|
|
set cpo&vim
|
|
|
|
syn case ignore
|
|
|
|
" Numeric literals
|
|
syn match asm_ca65DecNumber "\<\d\+\>"
|
|
syn match asm_ca65HexNumber "\$[0-9a-fA-F]\+\>"
|
|
syn match asm_ca65HexNumber "\<[0-9a-fA-F]\+h\>"
|
|
syn match asm_ca65BinNumber "%[0-1]\+\>"
|
|
|
|
" labels and identifiers
|
|
syn match asm_ca65Identifier "[a-z_][a-z0-9_]*"
|
|
syn match asm_ca65Label "[a-z_][a-z0-9_]*:"he=e-1
|
|
syn match asm_ca65Identifier "[a-z_][a-z0-9_]*::"he=e-2
|
|
" FIXME this doesn't hightlight :-/
|
|
syn match asm_ca65Op "::"
|
|
|
|
syn match asm_ca65UnknownCommand "\.\w*\>"
|
|
|
|
" expression operators
|
|
syn match asm_ca65Op "+"
|
|
syn match asm_ca65Op "-"
|
|
syn match asm_ca65Op "\~"
|
|
syn match asm_ca65Op "\.BITNOT\>"
|
|
syn match asm_ca65Op "<"
|
|
syn match asm_ca65Op "\.LOBYTE\>"
|
|
syn match asm_ca65Op ">"
|
|
syn match asm_ca65Op "\.HIBYTE\>"
|
|
syn match asm_ca65Op "\^"
|
|
syn match asm_ca65Op "\.BANKBYTE\>"
|
|
syn match asm_ca65Op "*"
|
|
syn match asm_ca65Op "/"
|
|
syn match asm_ca65Op "\.MOD\>"
|
|
syn match asm_ca65Op "&"
|
|
syn match asm_ca65Op "\.BITAND\>"
|
|
syn match asm_ca65Op "\.BITXOR\>"
|
|
syn match asm_ca65Op "<<"
|
|
syn match asm_ca65Op "\.SHL\>"
|
|
syn match asm_ca65Op ">>"
|
|
syn match asm_ca65Op "\.SHR\>"
|
|
syn match asm_ca65Op "|"
|
|
syn match asm_ca65Op "\.BITOR\>"
|
|
syn match asm_ca65Op "="
|
|
syn match asm_ca65Op "<>"
|
|
syn match asm_ca65Op "<"
|
|
syn match asm_ca65Op ">"
|
|
syn match asm_ca65Op "<="
|
|
syn match asm_ca65Op ">="
|
|
syn match asm_ca65Op "&&"
|
|
syn match asm_ca65Op "\.AND\>"
|
|
syn match asm_ca65Op "\.XOR\>"
|
|
syn match asm_ca65Op "||"
|
|
syn match asm_ca65Op "\.OR\>"
|
|
syn match asm_ca65Op "!"
|
|
syn match asm_ca65Op "\.NOT\>"
|
|
|
|
" 6502 instruction mnemonics
|
|
syn keyword asm_ca65Mnemonic
|
|
\ ADC AND ASL BCC BCS BEQ BIT BMI BNE BPL BRK BVC BVS CLC CLD CLI CLV CMP CPX
|
|
\ CPY DEC DEX DEY EOR INC INX INY JMP JSR LDA LDX LDY LSR NOP ORA PHA PHP PLA
|
|
\ PLP ROL ROR RTI RTS SBC SEC SED SEI STA STX STY TAX TAY TSX TXA TXS TYA
|
|
|
|
" 6502 illegal instruction mnemonics
|
|
syn keyword asm_ca65MnemonicIllegal
|
|
\ ALR ANC ARR AXS DCP ISC LAS LAX RLA RRA SAX SLO SRE
|
|
|
|
" Special prefix characters on literals
|
|
" @foo -- cheap local label
|
|
syn match asm_ca65SpecialPrefix "@"
|
|
" #123 -- immediate mode
|
|
syn match asm_ca65SpecialPrefix "#"
|
|
|
|
"
|
|
" Control commands
|
|
"
|
|
" Fileopts
|
|
syn match asm_ca65FileOpt "\.fileopt\s\+.\+" contains=asm_ca65FileOptKeyword,asm_ca65FileOptString
|
|
syn keyword asm_ca65FileOptKeyword contained author comment compiler
|
|
syn region asm_ca65FileOptString contained start=+"+ skip=+\\"+ end=+"+
|
|
" Segments and address size keywords
|
|
syn region asm_ca65Segment start=/.segment\s\+"/ skip=/\\"/ end=/"/ contains=asm_ca65SpecialSegment
|
|
syn keyword asm_ca65AddressSize DIRECT ZEROPAGE ZP ABS ABSOLUTE NEAR FAR LONG DWORD
|
|
syn keyword asm_ca65SpecialSegment contained ZEROPAGE ZP CODE RODATA BSS DATA
|
|
syn match asm_ca65Segment "\.popseg\>"
|
|
syn match asm_ca65SpecialSegmentCommand "\.bss\>"
|
|
syn match asm_ca65SpecialSegmentCommand "\.data\>"
|
|
syn match asm_ca65SpecialSegmentCommand "\.rodata\>"
|
|
syn match asm_ca65SpecialSegmentCommand "\.rodata\>"
|
|
syn match asm_ca65SpecialSegmentCommand "\.zeropage\>"
|
|
" Includes
|
|
syn match asm_ca65Include "\.include\>"
|
|
syn match asm_ca65Include "\.incbin\>"
|
|
syn match asm_ca65Include "\.macpack\>"
|
|
" Imports / Exports
|
|
" Storage types
|
|
syn match asm_ca65Type "\.addr\>"
|
|
syn match asm_ca65Type "\.faraddr\>"
|
|
syn match asm_ca65Type "\.asciiz\>"
|
|
syn match asm_ca65Type "\.byt\>"
|
|
syn match asm_ca65Type "\.byte\>"
|
|
syn match asm_ca65Type "\.bankbytes\>"
|
|
syn match asm_ca65Type "\.dbyt\>"
|
|
syn match asm_ca65Type "\.dword\>"
|
|
syn match asm_ca65Type "\.hibytes\>"
|
|
syn match asm_ca65Type "\.lobytes\>"
|
|
syn match asm_ca65Type "\.tag\>"
|
|
syn match asm_ca65Type "\.word\>"
|
|
" Conditionals
|
|
syn match asm_ca65Cond "\.if\>"
|
|
syn match asm_ca65Cond "\.ifp02\>"
|
|
syn match asm_ca65Cond "\.ifpc02\>"
|
|
syn match asm_ca65Cond "\.ifpsc02\>"
|
|
syn match asm_ca65Cond "\.ifp816\>"
|
|
syn match asm_ca65Cond "\.ifblank\>"
|
|
syn match asm_ca65Cond "\.ifconst\>"
|
|
syn match asm_ca65Cond "\.ifnblank\>"
|
|
syn match asm_ca65Cond "\.ifdef\>"
|
|
syn match asm_ca65Cond "\.ifndef\>"
|
|
syn match asm_ca65Cond "\.ifref\>"
|
|
syn match asm_ca65Cond "\.ifnref\>"
|
|
syn match asm_ca65Cond "\.else\>"
|
|
syn match asm_ca65Cond "\.elseif\>"
|
|
syn match asm_ca65Cond "\.endif\>"
|
|
" Macro stuff
|
|
syn match asm_ca65Macro "\.macro\s\+[a-z0-9_]*" contains=asm_ca65MacroName
|
|
syn match asm_ca65MacroName "\s[a-z_][a-z0-9_]*"hs=s+1 contained
|
|
syn match asm_ca65Macro "\.endmacro\>"
|
|
syn match asm_ca65Macro "\.exitmacro\>"
|
|
syn match asm_ca65Macro "\.exitmac\>"
|
|
syn match asm_ca65Macro "\.delmacro\>"
|
|
syn match asm_ca65Macro "\.local\>"
|
|
syn match asm_ca65Define "\.define\>"
|
|
syn match asm_ca65Define "\.undefine\>"
|
|
syn match asm_ca65Define "\.undef\>"
|
|
" Structy stuff
|
|
syn match asm_ca65Struct "\.\(struct\|union\|scope\)\s\+[a-z0-9_]*" contains=asm_ca65StructName
|
|
syn match asm_ca65Struct "\.enum\s\?[a-z0-9_]*" contains=asm_ca65StructName
|
|
syn match asm_ca65Struct "\.end\(struct\|union\|enum\|scope\|proc\)\>"
|
|
syn match asm_ca65StructName "\s[a-z_][a-z0-9_]*"hs=s+1 contained
|
|
syn match asm_ca65Struct "\.proc\s\+[a-z0-9_]*" contains=asm_ca65ProcName
|
|
syn match asm_ca65ProcName "\s[a-z_][a-z0-9_]*"hs=s+1 contained
|
|
" FIXME: this doesn't seem to catch the end of the struct (folds all the way to
|
|
" EOF)
|
|
"syn region asm_ca65StructFold start="\.struct" end="\.endstruct" fold transparent
|
|
" Pseudo-variables
|
|
syn match asm_ca65PseudoVar "\.cpu\>"
|
|
syn match asm_ca65PseudoVar "\.paramcount\>"
|
|
syn match asm_ca65PseudoVar "\.time\>"
|
|
syn match asm_ca65PseudoVar "\.version\>"
|
|
" Psuedo-functions
|
|
syn match asm_ca65PseudoFun "\.BANK\>"
|
|
syn match asm_ca65PseudoFun "\.BANKBYTE\>"
|
|
syn match asm_ca65PseudoFun "\.BLANK\>"
|
|
syn match asm_ca65PseudoFun "\.CONCAT\>"
|
|
syn match asm_ca65PseudoFun "\.CONST\>"
|
|
syn match asm_ca65PseudoFun "\.DEF\>"
|
|
syn match asm_ca65PseudoFun "\.DEFINED\>"
|
|
syn match asm_ca65PseudoFun "\.HIBYTE\>"
|
|
syn match asm_ca65PseudoFun "\.HIWORD\>"
|
|
syn match asm_ca65PseudoFun "\.IDENT\>"
|
|
syn match asm_ca65PseudoFun "\.LEFT\>"
|
|
syn match asm_ca65PseudoFun "\.LOBYTE\>"
|
|
syn match asm_ca65PseudoFun "\.LOWORD\>"
|
|
syn match asm_ca65PseudoFun "\.MATCH\>"
|
|
syn match asm_ca65PseudoFun "\.MAX\>"
|
|
syn match asm_ca65PseudoFun "\.MID\>"
|
|
syn match asm_ca65PseudoFun "\.MIN\>"
|
|
syn match asm_ca65PseudoFun "\.REF\>"
|
|
syn match asm_ca65PseudoFun "\.REFERENCED\>"
|
|
syn match asm_ca65PseudoFun "\.RIGHT\>"
|
|
syn match asm_ca65PseudoFun "\.SIZEOF\>"
|
|
syn match asm_ca65PseudoFun "\.STRAT\>"
|
|
syn match asm_ca65PseudoFun "\.SPRINTF\>"
|
|
syn match asm_ca65PseudoFun "\.STRING\>"
|
|
syn match asm_ca65PseudoFun "\.STRLEN\>"
|
|
syn match asm_ca65PseudoFun "\.TCOUNT\>"
|
|
syn match asm_ca65PseudoFun "\.XMATCH\>"
|
|
" Console output directives
|
|
syn match asm_ca65ConsoleOut "\.out\>"
|
|
syn match asm_ca65ConsoleWarn "\.warning\>"
|
|
syn match asm_ca65ConsoleError "\.error\>"
|
|
syn match asm_ca65ConsoleFatal "\.fatal\>"
|
|
" Linker symbol import/export commands
|
|
syn match asm_ca65Linker "\.export\>"
|
|
syn match asm_ca65Linker "\.exportzp\>"
|
|
syn match asm_ca65Linker "\.import\>"
|
|
syn match asm_ca65Linker "\.importzp\>"
|
|
syn match asm_ca65Linker "\.global\>"
|
|
syn match asm_ca65Linker "\.globalzp\>"
|
|
syn match asm_ca65Linker "\.forceimport\>"
|
|
syn match asm_ca65Linker "\.constructor\>"
|
|
syn match asm_ca65Linker "\.destructor\>"
|
|
syn match asm_ca65Linker "\.condes\>"
|
|
syn match asm_ca65Linker "\.interruptor\>"
|
|
syn match asm_ca65Linker "\.autoimport\>"
|
|
syn match asm_ca65Linker "\.align\>"
|
|
syn match asm_ca65Linker "\.reloc\>"
|
|
syn match asm_ca65Linker "\.org\>"
|
|
" Special flags, switches, etc.
|
|
syn match asm_ca65SpecialSwitch "\.a16\>"
|
|
syn match asm_ca65SpecialSwitch "\.a8\>"
|
|
syn match asm_ca65SpecialSwitch "\.i16\>"
|
|
syn match asm_ca65SpecialSwitch "\.i8\>"
|
|
syn match asm_ca65SpecialSwitch "\.smart\>"
|
|
syn match asm_ca65SpecialSwitch "\.case\>"
|
|
syn match asm_ca65SpecialSwitch "\.debuginfo\>"
|
|
syn match asm_ca65SpecialSwitch "\.linecont\>"
|
|
syn match asm_ca65SpecialSwitch "\.list\>"
|
|
syn match asm_ca65SpecialSwitch "\.listbytes\>"
|
|
syn match asm_ca65SpecialSwitch "\.localchar\>"
|
|
syn match asm_ca65SpecialSwitch "\.p02\>"
|
|
syn match asm_ca65SpecialSwitch "\.p816\>"
|
|
syn match asm_ca65SpecialSwitch "\.pagelen\>"
|
|
syn match asm_ca65SpecialSwitch "\.pagelength\>"
|
|
syn match asm_ca65SpecialSwitch "\.pc02\>"
|
|
syn match asm_ca65SpecialSwitch "\.popcpu\>"
|
|
syn match asm_ca65SpecialSwitch "\.psc02\>"
|
|
syn match asm_ca65SpecialSwitch "\.pushcpu\>"
|
|
syn match asm_ca65SpecialSwitch "\.setcpu\>"
|
|
syn match asm_ca65SpecialSwitch "\.feature\>"
|
|
" Built-in macros and function-likes
|
|
syn match asm_ca65Builtin "\.assert\>"
|
|
syn match asm_ca65Builtin "\.set\>"
|
|
|
|
" String and char literals
|
|
syn region asm_ca65String start=+"+ skip=+\\"+ end=+"+
|
|
syn region asm_ca65Char start=+'+ skip=+\\'+ end=+'+
|
|
|
|
" Line comments
|
|
syn match asm_ca65Comment ";.*" contains=asm_ca65Todo
|
|
syn keyword asm_ca65Todo contained TODO FIXME XXX HACK
|
|
|
|
syn case match
|
|
|
|
" Define the default highlighting.
|
|
" For version 5.7 and earlier: only when not done already
|
|
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
if version >= 508 || !exists("did_asm_ca65_syntax_inits")
|
|
if version < 508
|
|
let did_asm_ca65_syntax_inits = 1
|
|
command -nargs=+ HiLink hi link <args>
|
|
else
|
|
command -nargs=+ HiLink hi def link <args>
|
|
endif
|
|
|
|
HiLink asm_ca65Comment Comment
|
|
HiLink asm_ca65Todo Todo
|
|
HiLink asm_ca65Mnemonic Keyword
|
|
HiLink asm_ca65Label Identifier
|
|
HiLink asm_ca65Identifier NONE
|
|
|
|
HiLink asm_ca65MnemonicIllegal Special
|
|
|
|
HiLink asm_ca65Include Include
|
|
HiLink asm_ca65Cond PreCondit
|
|
HiLink asm_ca65Macro Macro
|
|
HiLink asm_ca65Define Define
|
|
HiLink asm_ca65MacroName Function
|
|
|
|
HiLink asm_ca65HexNumber Number
|
|
HiLink asm_ca65DecNumber Number
|
|
HiLink asm_ca65BinNumber Number
|
|
HiLink asm_ca65String String
|
|
HiLink asm_ca65Char Character
|
|
|
|
HiLink asm_ca65UnknownCommand Error
|
|
|
|
HiLink asm_ca65Type Type
|
|
HiLink asm_ca65Segment PreProc
|
|
HiLink asm_ca65AddressSize StorageClass
|
|
HiLink asm_ca65SpecialSegment Delimiter
|
|
HiLink asm_ca65SpecialSegmentCommand Delimiter
|
|
|
|
HiLink asm_ca65FileOpt PreProc
|
|
HiLink asm_ca65FileOptKeyword Special
|
|
HiLink asm_ca65FileOptString Underlined
|
|
|
|
HiLink asm_ca65SpecialPrefix SpecialChar
|
|
HiLink asm_ca65Op Operator
|
|
|
|
HiLink asm_ca65Struct Keyword
|
|
HiLink asm_ca65StructName Structure
|
|
HiLink asm_ca65ProcName Function
|
|
|
|
HiLink asm_ca65PseudoVar Special
|
|
HiLink asm_ca65PseudoFun Function
|
|
|
|
HiLink asm_ca65ConsoleOut Function
|
|
HiLink asm_ca65ConsoleWarn Debug
|
|
HiLink asm_ca65ConsoleError Special
|
|
HiLink asm_ca65ConsoleFatal Underlined
|
|
|
|
HiLink asm_ca65Linker StorageClass
|
|
|
|
HiLink asm_ca65SpecialSwitch Underlined
|
|
HiLink asm_ca65Builtin Function
|
|
|
|
|
|
delcommand HiLink
|
|
endif
|
|
|
|
let b:current_syntax = "asm_ca65"
|
|
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|
|
|
|
" vim: ts=8
|
|
|