S-C Assembler

This commit is contained in:
Kelvin Sherlock 2021-07-29 17:59:57 -04:00
parent f3fb502073
commit d2a2e53078
2 changed files with 254 additions and 0 deletions

View File

@ -0,0 +1,220 @@
%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

View File

@ -0,0 +1,34 @@
{
"scope": "source.asm.sc-asm meta.directive",
"completions":
[
".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"
]
}