Initial commit

This commit is contained in:
Elyan 2024-11-08 23:11:29 +01:00
commit f16b121c8d
9 changed files with 426 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Set default behavior to automatically normalize line endings.
* text=auto

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
node_modules
*.vsix

17
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,17 @@
// A launch configuration that launches the extension inside a new window
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": [
{
"name": "Extension",
"type": "extensionHost",
"request": "launch",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
]
}
]
}

4
.vscodeignore Normal file
View File

@ -0,0 +1,4 @@
.vscode/**
.vscode-test/**
.gitignore
vsc-extension-quickstart.md

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# VSCode Central(ASM)
This extension provides basic syntax highlighting for the Central(ASM) language.

70
examples/hello.s Normal file
View File

@ -0,0 +1,70 @@
@@ text.start
.g hello
//Set HELLO variable to 1234
%% set var="HELLO",
%- to=1234,
%% set var="RC_SUCCESS",to=0
mov r1, %(HELLO)
ldr.eq r0, [r1]
nop
.l world
//Include other file
%% include member="myfile"
//Use the alloc macro
%* alloc size=r0, align=0x1000,
%- out=r1,
svc 0x7b
adr r2, .my_fd.def
%* nextrec "OK",fd=r2,
%- out=.my_fd.out.data
%* endprocess rc=%(RC_SUCCESS)
@@ rodata
.l value
//Defaults to dd(2)
dd 0x1234
dd 0x01'1, 0x02'1, 0xFFEE'2
.l value.other
dd "Hello, world!\0"
//File descriptor
@@ data
.l my_fd.def
%* filedesc ddname="HELLO",recfm="FB",lrecl=200
@@ bss
.l my_fd.out
//Array of 4 integers
ds int(4)
//Named array of characters with last label prepended. 200 bytes in length.
.. data
ds char(200)
///////////////////////////////////////////////////////////////////////////////
%% macro name="nextrec"
%% param name="ok",type="(OK,KO)"
%% kwparam name="fd",type="label|reg"
%% kwparam name="out",type="label|reg"
%% if val="ok",neq="OK"
%% abort msg="Error: param 'ok' of macro 'nextrec' must be OK"
%% endif
//Handle fd
%% if type="fd",is="label"
add r0, pc, %(fd)
%% elif val="fd",neq=r0
mov r0, %(fd)
%% endif
//Handle out
%% if type="out",is="label"
add r1, pc, %(out)
%% elif val="fd",neq=r0
mov r1, %(out)
%% endif
//Call the privileged service
svc 0x10
%% endmacro
///////////////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,67 @@
{
"comments": {
// symbol used for single line comment. Remove this entry if your language does not support line comments
"lineComment": "//"
},
// symbols used as brackets
"brackets": [
[
"{",
"}"
],
[
"[",
"]"
],
[
"(",
")"
]
],
// symbols that are auto closed when typing
"autoClosingPairs": [
[
"{",
"}"
],
[
"[",
"]"
],
[
"(",
")"
],
[
"\"",
"\""
],
[
"'",
"'"
]
],
// symbols that can be used to surround a selection
"surroundingPairs": [
[
"{",
"}"
],
[
"[",
"]"
],
[
"(",
")"
],
[
"\"",
"\""
],
[
"'",
"'"
]
]
}

49
package.json Normal file
View File

@ -0,0 +1,49 @@
{
"name": "central-asm",
"displayName": "Central(ASM)",
"description": "Syntax highlighting for Central(ASM)",
"version": "1.0.0",
"engines": {
"vscode": "^1.95.0"
},
"categories": [
"Programming Languages"
],
"contributes": {
"languages": [
{
"id": "central-asm",
"aliases": [
"Central(ASM)",
"central-asm"
],
"extensions": [
".s",
".S",
".m",
".M"
],
"configuration": "./language-configuration.json"
}
],
"grammars": [
{
"language": "central-asm",
"scopeName": "source.central-asm",
"path": "./syntaxes/central-asm.tmLanguage.json"
}
],
"configurationDefaults": {
"[central-asm]": {
"editor.guides.indentation": false,
"editor.detectIndentation": false,
"editor.insertSpaces": true,
"editor.rulers": [
2,
4,
120
]
}
}
}
}

View File

@ -0,0 +1,212 @@
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "Central(ASM)",
"patterns": [
{
"include": "#strings"
},
{
"include": "#comments"
},
{
"include": "#sections"
},
{
"include": "#labels"
},
{
"include": "#numerics"
},
{
"include": "#registers"
},
{
"include": "#preprocessor-lines"
},
{
"include": "#preprocessor-variables"
},
{
"include": "#assembly"
}
],
"repository": {
"strings": {
"name": "string.quoted.double.central-asm",
"begin": "\"",
"end": "\"",
"patterns": [
{
"name": "constant.character.escape.central-asm",
"match": "\\\\."
}
]
},
"comments": {
"name": "comment.line.double-slash",
"match": "^.{2}//.*$"
},
"sections": {
"patterns": [
{
"name": "storage.section.named.central-asm",
"match": "^@{2}\\s{2,}[a-zA-Z][a-zA-Z0-9]*(\\.[a-zA-Z][a-zA-Z0-9]*)+\\s*$"
},
{
"name": "storage.section.auto-named.central-asm",
"match": "^@{2}\\s{2,}([a-zA-Z][a-zA-Z0-9]*)\\s*$",
"captures": {
"1": {
"name": "emphasis"
}
}
}
]
},
"labels": {
"patterns": [
{
"name": "entity.name.function.label.local.central-asm",
"match": "^\\.l\\s{2,}([a-zA-Z_][a-zA-Z_0-9]*(\\.[a-zA-Z_][a-zA-Z_0-9]*)*)\\s*$",
"captures": {
"1": {
"name": "emphasis"
}
}
},
{
"name": "entity.name.function.label.local.prepend-last.central-asm",
"match": "^\\.{2}\\s{2,}([a-zA-Z_][a-zA-Z_0-9]*(\\.[a-zA-Z_][a-zA-Z_0-9]*)*)\\s*$",
"captures": {
"1": {
"name": "emphasis"
}
}
},
{
"name": "entity.name.function.label.global.central-asm",
"match": "^\\.g\\s{2,}([a-zA-Z_][a-zA-Z_0-9]*(\\.[a-zA-Z_][a-zA-Z_0-9]*)*)\\s*$",
"captures": {
"1": {
"name": "strong"
}
}
},
{
"name": "entity.name.function.label.ref.relative.central-asm",
"match": "\\.[a-zA-Z_][a-zA-Z_0-9]*(\\.[a-zA-Z_][a-zA-Z_0-9]*)*"
},
{
"name": "entity.name.function.label.ref.absolute.central-asm",
"match": "&[a-zA-Z_][a-zA-Z_0-9]*(\\.[a-zA-Z_][a-zA-Z_0-9]*)*"
}
]
},
"numerics": {
"match": "((0x[0-9a-fA-F]+(_[0-9a-fA-F]+)*)|([0-9]+(_[0-9]+)*))('[0-9]+)?",
"captures": {
"1": {
"name": "constant.numeric.central-asm"
},
"6": {
"name": "storage.modifier.width.central-asm"
}
}
},
"registers": {
"patterns": [
{
"name": "variable.other.central-asm",
"match": "\\b((r[0-9]+)|lr|pc|sp|pc_user|sp_user|pc_svc|sp_svc|pc_fault|sp_fault)\\b"
},
{
"name": "variable.other.central-asm",
"match": "(ss[0-9]+)|(sr[0-9]+)"
}
]
},
"preprocessor-lines": {
"patterns": [
{
"name": "meta.preprocessor.line.central-asm",
"patterns": [
{
"name": "meta.preprocessor.directive.central-asm",
"match": "^%%\\s{2,}([a-zA-Z_][a-zA-Z_0-9]*)",
"captures": {
"1": {
"name": "emphasis"
}
}
},
{
"name": "meta.preprocessor.macro-call.central-asm",
"match": "^%\\*\\s{2,}([a-zA-Z_][a-zA-Z_0-9]*)",
"captures": {
"1": {
"name": "strong"
}
}
},
{
"name": "meta.preprocessor.continuation.central-asm",
"match": "^%-"
},
{
"include": "#preprocessor-key-value-args"
}
]
}
]
},
"preprocessor-key-value-args": {
"name": "meta.preprocessor.arg-key.central-asm",
"match": "\\b([a-zA-Z_][a-zA-Z_0-9]*)=",
"captures": {
"1": {
"name": "variable.parameter.central-asm"
}
}
},
"preprocessor-variables": {
"name": "meta.preprocessor.variable-substitution.central-asm",
"match": "%\\(([a-zA-Z_][a-zA-Z_0-9]*)\\)",
"captures": {
"1": {
"name": "variable.name.central-asm"
}
}
},
"assembly": {
"patterns": [
{
"match": "^\\s{4,}(nop|svc|ldr|str|add|adr|mov|movn|b|bx|ssr|ssw)(\\.(al|eq|neq|uge|cs|ult|cc|neg|pos|vs|vc|ugt|ule|sge|slt|sgt|sle))?\\b",
"captures": {
"1": {
"name": "keyword.control.instructions.central-asm"
},
"2": {
"name": "keyword.other.conditions.central-asm"
}
}
},
{
"name": "keyword.other.data-definition.central-asm",
"match": "^dd\\s{2,}"
},
{
"match": "^(ds)\\s{2,}(int|short|char|ptr)",
"captures": {
"1": {
"name": "keyword.other.data-space.central-asm"
},
"2": {
"name": "entity.name.type.data-space.central-asm"
}
}
}
]
}
},
"scopeName": "source.central-asm"
}