mirror of
https://github.com/ksherlock/65816.tmbundle.git
synced 2024-11-26 23:50:47 +00:00
221 lines
4.3 KiB
Plaintext
221 lines
4.3 KiB
Plaintext
|
%YAML 1.2
|
||
|
---
|
||
|
name: S-C Assembler
|
||
|
file_extensions: []
|
||
|
scope: source.asm.sc-asm
|
||
|
|
||
|
variables:
|
||
|
ws: '[ \t]+'
|
||
|
xws: '[ \t\x08]*'
|
||
|
ident: '[A-Za-z][A-Za-z0-9.]*'
|
||
|
lident: '.[0-9]{1,2}'
|
||
|
|
||
|
contexts:
|
||
|
prototype:
|
||
|
- include: eol
|
||
|
main:
|
||
|
|
||
|
- meta_include_prototype: false
|
||
|
|
||
|
- match: ^[*]
|
||
|
push:
|
||
|
- meta_scope: comment.line
|
||
|
- match: \n
|
||
|
pop: true
|
||
|
|
||
|
|
||
|
# assembler commands. there are others but these are used by a2osx...
|
||
|
- match: '^{{xws}}((?i)NEW|AUTO|MANUAL|MAN|ASM)\b'
|
||
|
captures:
|
||
|
1: keyword.directive
|
||
|
# scope: keyword.directive
|
||
|
push:
|
||
|
- match: $
|
||
|
pop: true
|
||
|
|
||
|
- match: '^{{xws}}((?i)SAVE|LOAD)\b'
|
||
|
captures:
|
||
|
1: keyword.directive
|
||
|
# scope: keyword.directive
|
||
|
push: operand-path
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
- match: '{{ws}}'
|
||
|
push: opcode
|
||
|
|
||
|
- match: '^{{ws}}((?i)\.MA)\s({{ident}})'
|
||
|
captures:
|
||
|
2: keyword.directive
|
||
|
1: entity.name.function
|
||
|
push: eol
|
||
|
|
||
|
|
||
|
- match: '^({{ident}}){{ws}}\.((?i)EQ)\b'
|
||
|
captures:
|
||
|
1: entity.name.constant
|
||
|
2: keyword.directive
|
||
|
push: operand
|
||
|
|
||
|
- match: '^{{lident}}'
|
||
|
scope: entity.name.label.local
|
||
|
|
||
|
|
||
|
- match: '^{{ident}}'
|
||
|
scope: entity.name.function
|
||
|
|
||
|
|
||
|
opcode:
|
||
|
- match: '{{ws}}'
|
||
|
set: operand
|
||
|
- include: scope:source.asm.65816#mnemonics-6502
|
||
|
- include: scope:source.asm.65816#mnemonics-65c02
|
||
|
- include: scope:source.asm.65816#mnemonics-65c02s
|
||
|
- include: scope:source.asm.65816#mnemonics-65816
|
||
|
- include: mnemonics-6502-alt
|
||
|
|
||
|
|
||
|
- match: \.(?i:DA)\b
|
||
|
scope: keyword.directive.data
|
||
|
set: operand
|
||
|
|
||
|
- match: \.(?i:HS)\b
|
||
|
scope: keyword.directive.data
|
||
|
set: operand-hex
|
||
|
|
||
|
- match: \.(?i:AS|AT|AZ)\b
|
||
|
scope: keyword.directive.data
|
||
|
set: operand-string
|
||
|
|
||
|
- match: \.(?i:OP)\b
|
||
|
scope: keyword.directive
|
||
|
set: operand-op
|
||
|
|
||
|
|
||
|
- match: \.(?i:INB|IN|TF)\b
|
||
|
scope: keyword.control.import
|
||
|
set: operand-path
|
||
|
|
||
|
|
||
|
- match: \.(?i:LIST)\b
|
||
|
scope: keyword.directive
|
||
|
set: operand-list
|
||
|
|
||
|
|
||
|
- match: \.(?i:AC|AS|AT|AZ|BS|DA|DO|DUMMY|ED|ELSE|EM|EN|EP|EQ|FIN|HS|IN|INB|LIST|MA|OP|OR|PG|PH|TA|TF|TI|US)\b
|
||
|
scope: keyword.directive
|
||
|
|
||
|
|
||
|
|
||
|
- match: '>{{ident}}'
|
||
|
scope: variable.function.macro
|
||
|
set: operand
|
||
|
|
||
|
|
||
|
|
||
|
operand:
|
||
|
- include: numbers
|
||
|
- include: strings
|
||
|
- match: ']\d+'
|
||
|
scope: variable.other
|
||
|
#- include: macro-parm
|
||
|
|
||
|
|
||
|
|
||
|
operand-op:
|
||
|
- match: '(?i:6502|SW16|65C02|65R02|65802|65816)'
|
||
|
scope: constant.language
|
||
|
set: comment
|
||
|
- include: error
|
||
|
|
||
|
operand-hex:
|
||
|
- match: '[0-9A-Fa-f]{2}'
|
||
|
scope: constant.numeric.hex
|
||
|
- include: expect-comment
|
||
|
|
||
|
|
||
|
operand-path:
|
||
|
- match: \S+
|
||
|
scope: string.unquoted
|
||
|
set: expect-comment
|
||
|
- include: expect-comment
|
||
|
|
||
|
# -? delimiter (anything but delimiter)* delimiter
|
||
|
# pop: 1 needed for \1 backref matching.
|
||
|
operand-string:
|
||
|
|
||
|
- match: '-?([^ \t-])'
|
||
|
scope: punctuation.definition.string.begin
|
||
|
push: [comment, operand-string-inner]
|
||
|
|
||
|
# - include: expect-comment
|
||
|
|
||
|
operand-string-inner:
|
||
|
- meta_scope: string.quoted
|
||
|
- match: \1
|
||
|
scope: punctuation.definition.string.end
|
||
|
pop: true
|
||
|
|
||
|
|
||
|
operand-list:
|
||
|
# .LIST ON | OFF | CON | COFF | MON | MOFF | XON | XOFF
|
||
|
- match: \b(?i:[CMX]?ON|[CMX]?OFF)\b
|
||
|
scope: constant.language
|
||
|
set: comment
|
||
|
|
||
|
- include: error
|
||
|
|
||
|
|
||
|
|
||
|
error:
|
||
|
- match: \S
|
||
|
scope: invalid.illegal.expect.comment
|
||
|
|
||
|
|
||
|
expect-comment:
|
||
|
- include: comment
|
||
|
- match: \S
|
||
|
scope: invalid.illegal.expect.comment
|
||
|
|
||
|
comment:
|
||
|
- match: (?<=[\t ])
|
||
|
push:
|
||
|
- meta_scope: comment.line
|
||
|
- match: \n
|
||
|
pop: true
|
||
|
- include: eol
|
||
|
|
||
|
|
||
|
mnemonics-6502-alt:
|
||
|
- match: \b(?i:BLT|BGE)\b
|
||
|
scope: keyword.mnemonic.6502.alt
|
||
|
|
||
|
numbers:
|
||
|
- match: \b\d+\b
|
||
|
scope: constant.numeric
|
||
|
- match: \$[0-9a-fA-F]+\b
|
||
|
scope: constant.numeric.hex
|
||
|
- match: \%[01_]+\b
|
||
|
scope: constant.numeric.binary
|
||
|
|
||
|
strings:
|
||
|
|
||
|
- match: "'"
|
||
|
scope: punctuation.definition.string.begin
|
||
|
push:
|
||
|
- meta_include_prototype: false
|
||
|
- meta_scope: string.quoted.single
|
||
|
- match: "'"
|
||
|
scope: punctuation.definition.string.end
|
||
|
pop: true
|
||
|
- match: \n
|
||
|
scope: invalid.illegal.newline.asm
|
||
|
pop: true
|
||
|
|
||
|
|
||
|
eol:
|
||
|
- match: '$'
|
||
|
pop: true
|
||
|
|