mirror of
https://github.com/MatthewCallis/language-65asm.git
synced 2024-11-25 23:49:19 +00:00
174 lines
4.4 KiB
Plaintext
174 lines
4.4 KiB
Plaintext
scopeName: 'source.assembly.6502.kickass'
|
|
name: 'Kick Assembler'
|
|
|
|
fileTypes: [
|
|
'a'
|
|
'asm'
|
|
's'
|
|
'S'
|
|
]
|
|
|
|
patterns: [
|
|
{ include: 'source.65c02-opcodes' }
|
|
{ include: 'source.6502x-opcodes' }
|
|
{ include: '#comments' }
|
|
{ include: '#directives' }
|
|
{ include: '#symbols' }
|
|
|
|
]
|
|
|
|
repository:
|
|
comments:
|
|
patterns: [
|
|
{
|
|
match: '(\\/\\/[^\\n]+)'
|
|
name: 'comment.line'
|
|
}
|
|
{
|
|
begin: '\\/\\*'
|
|
end: '\\*\\/'
|
|
name: 'comment.block'
|
|
}
|
|
]
|
|
symbols:
|
|
patterns: [
|
|
|
|
# ===============================================================
|
|
# Assembler symbols
|
|
{ # Labels
|
|
name: 'entity.name.function.kickass'
|
|
match: '^\\s*[!a-zA-Z_][a-zA-Z0-9_]*:'
|
|
}
|
|
{ # Variable functions, like var.getValue()
|
|
match: '(\\w+(?=\\())'
|
|
name: 'entity.name.function.kickass'
|
|
}
|
|
|
|
# ===============================================================
|
|
# Data types
|
|
{ # Chars
|
|
match: "\\'\\S\\'"
|
|
name: 'string.char.kickass'
|
|
}
|
|
{ # Strings
|
|
name: 'string.quoted.kickass'
|
|
begin: '"'
|
|
end: '"'
|
|
}
|
|
|
|
{ # Hex numbers
|
|
match: '-?\\$[A-Fa-f0-9]+'
|
|
name: 'constant.numeric.hex.kickass'
|
|
}
|
|
{ # Octals
|
|
match: '@([0-7]+)\\b'
|
|
name: 'constant.numeric.octal.merlin'
|
|
}
|
|
{ # Binary numbers
|
|
match: '%[01]+'
|
|
name: 'constant.numeric.binary.merlin'
|
|
}
|
|
{ # Decimal numbers
|
|
match: '\\b([0-9]+)\\b'
|
|
name: 'constant.numeric.decimal.merlin'
|
|
}
|
|
|
|
{ # Operators
|
|
match: '[-+/*^><|#\\[\\](),=.!&]'
|
|
name: 'keyword.operator.kickass'
|
|
}
|
|
{ # Immediate values
|
|
match: '\\#(\'.\'|[^\\s\']+)'
|
|
name: 'constant.numeric.hex.kickass'
|
|
}
|
|
{ # Constants
|
|
match: '\\b([_A-Z]+)\\b'
|
|
name: 'variable.kickass'
|
|
}
|
|
]
|
|
directives:
|
|
patterns: [
|
|
|
|
# ===============================================================
|
|
# Preprocessor directives
|
|
{
|
|
match: '(\\#)((?:define|undef))([\\s\\w]+)'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
3: name: 'variable.kickass'
|
|
}
|
|
{
|
|
match: '(\\#)((?:endif|el(se|if)|if|importif))([\\s\\w]+)'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
4: name: 'variable.kickass'
|
|
}
|
|
{
|
|
match: '(\\#)((import(once)?))([\\s\\w]+)'
|
|
name: 'keyword.control.directive.kickass'
|
|
}
|
|
|
|
# ===============================================================
|
|
# Assembler directive conditionals
|
|
{
|
|
match: '(\\.)((?:elif|if))'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
}
|
|
{
|
|
match: '(\\}?(\\s+)?)(else)'
|
|
captures:
|
|
3: name: 'keyword.control.directive.kickass'
|
|
}
|
|
|
|
# ===============================================================
|
|
# Assembler directives misc
|
|
{ # Assembler directives that have inconsistant syntax
|
|
match: '(\\.)((?:return|namespace|print(now)?|by(te)?|align|assert(error)?|break|disk|dw(ord)?|encoding|enum|error(if)?|file(modify|namespace)?|fill(word)?|for|lohifill|memblock|modify|pc|plugin|pseudopc|segment(def|out)?|struct|te(xt)?|while|wo(rd)?|zp|import( binary| c64| source| text|once)))\\b'
|
|
name: 'keyword.control.directive.kickass'
|
|
}
|
|
{
|
|
match: '(\\}?(\\s+)?)(else)'
|
|
captures:
|
|
2: name: 'keyword.control.directive.kickass'
|
|
}
|
|
|
|
# ===============================================================
|
|
# Variables and Macros
|
|
{
|
|
match: '(\\.)(var|eval|const|label)(\\s*[a-zA-Z0-9_]*)(\\s*=)'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
3: name: 'support.function.kickass'
|
|
4: name: 'keyword.operator.kickass'
|
|
}
|
|
{
|
|
match: '(\\.)(var|eval|const|label)(\\s*[a-zA-Z0-9_]*)'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
3: name: 'support.function.kickass'
|
|
}
|
|
{
|
|
match: '(\\.)(function|macro)([\\s\\w_.]*)(\\()([^)]*)(\\))'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
3: name: 'entity.name.function.kickass'
|
|
4: name: 'keyword.operator.kickass'
|
|
5: name: 'constant.variable.kickass'
|
|
6: name: 'keyword.operator.kickass'
|
|
}
|
|
{
|
|
match: '(\\.)(pseudocommand)(\\s+)([^\\s\\n]+)'
|
|
captures:
|
|
1: name: 'keyword.control.directive.kickass'
|
|
2: name: 'keyword.control.directive.kickass'
|
|
4: name: 'entity.name.function.kickass'
|
|
}
|
|
]
|