Added separate syntax highlighting for stack pointer vs. normal address registers.

This commit is contained in:
2021-07-20 11:02:11 +02:00
parent c00a403638
commit 9a37b9c569
16 changed files with 386 additions and 364 deletions
@@ -35,7 +35,7 @@ import static de.platon42.intellij.plugins.m68k.lexer.LexerUtil.*;
EOL=\R
WHITE_SPACE=\p{Blank}+
AREG=((a[0-7])|sp)
AREG=(a[0-6])
DREG=(d[0-7])
ASSIGNMENT=(([:letter:]|_)(([:letter:]|[:digit:])|_)*:?((\p{Blank}+equ\p{Blank}+)|(\p{Blank}+set\p{Blank}+)|\p{Blank}*=\p{Blank}*))
LOCAL_LABEL=(\.([:letter:]|_)(([:letter:]|[:digit:])|_)*:?)|(([:letter:]|_)(([:letter:]|[:digit:])|_)*\$:?)
@@ -216,6 +216,7 @@ SKIP_TO_EOL=[^\r\n]+
{AREG} { yybegin(ASMOPS_OP); return AREG; }
{DREG} { yybegin(ASMOPS_OP); return DREG; }
"sp"|"a7" { yybegin(ASMOPS_OP); return REG_SP; }
"pc" { yybegin(ASMOPS_OP); return PC; }
"ccr" { yybegin(ASMOPS_OP); return REG_CCR; }
"sr" { yybegin(ASMOPS_OP); return REG_SR; }
@@ -195,7 +195,7 @@ DataRegister ::= DREG {
extends = Register
}
AddressRegister ::= AREG {
AddressRegister ::= AREG | REG_SP {
name = "address register"
extends = Register
}
@@ -25,6 +25,7 @@ import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.PROGRAM_COUNTER
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SEPARATOR
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SPECIAL_REG
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.STACK_POINTER
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.STRING
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SYMBOLDEF
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SYMBOLREF
@@ -65,6 +66,12 @@ demo_init ; global label
POPM
.skip rts
irq: move.l a0,-(sp)
move usp,a0
move.l a0,$400.w
move.l (sp)+,a0
rte
hello: dc.b 'Hello World!',10,0
even
dc.w *-hello ; length of string
@@ -97,17 +104,18 @@ hello: dc.b 'Hello World!',10,0
AttributesDescriptor("Symbol reference", SYMBOLREF),
AttributesDescriptor("Assembly mnemonic", MNEMONIC),
AttributesDescriptor("Macro invocation", MACRO_CALL),
AttributesDescriptor("Byte/short data width", DATA_WIDTH_BS),
AttributesDescriptor("Word data width", DATA_WIDTH_W),
AttributesDescriptor("Long data width", DATA_WIDTH_L),
AttributesDescriptor("Data width: Byte/short", DATA_WIDTH_BS),
AttributesDescriptor("Data width: Word", DATA_WIDTH_W),
AttributesDescriptor("Data width: Long", DATA_WIDTH_L),
AttributesDescriptor("Data preprocessor directives", DATA_PREPROCESSOR),
AttributesDescriptor("Other preprocessor directives", OTHER_PREPROCESSOR),
AttributesDescriptor("Strings", STRING),
AttributesDescriptor("Numbers", NUMBER),
AttributesDescriptor("Address registers", AREG),
AttributesDescriptor("Data registers", DREG),
AttributesDescriptor("Program counter", PROGRAM_COUNTER),
AttributesDescriptor("Special registers", SPECIAL_REG),
AttributesDescriptor("Registers: Address registers", AREG),
AttributesDescriptor("Registers: Stack pointer", STACK_POINTER),
AttributesDescriptor("Registers: Data registers", DREG),
AttributesDescriptor("Registers: Program counter", PROGRAM_COUNTER),
AttributesDescriptor("Registers: Special registers", SPECIAL_REG),
AttributesDescriptor("Comments", COMMENT),
AttributesDescriptor("Bad characters", BAD_CHARACTER)
)
@@ -39,6 +39,7 @@ class M68kSyntaxHighlighter(val project: Project?) : SyntaxHighlighterBase() {
M68kTypes.OPSIZE_W -> arrayOf(DATA_WIDTH_W)
M68kTypes.OPSIZE_L -> arrayOf(DATA_WIDTH_L)
M68kTypes.AREG -> arrayOf(AREG)
M68kTypes.REG_SP -> arrayOf(STACK_POINTER)
M68kTypes.DREG -> arrayOf(DREG)
M68kTypes.REG_USP, M68kTypes.REG_SR, M68kTypes.REG_CCR, M68kTypes.REG_VBR -> arrayOf(SPECIAL_REG)
M68kTypes.COMMENT -> arrayOf(COMMENT)
@@ -66,6 +67,7 @@ class M68kSyntaxHighlighter(val project: Project?) : SyntaxHighlighterBase() {
val STRING = TextAttributesKey.createTextAttributesKey("MC68000_STRING", DefaultLanguageHighlighterColors.STRING)
val NUMBER = TextAttributesKey.createTextAttributesKey("MC68000_NUMBER", DefaultLanguageHighlighterColors.NUMBER)
val AREG = TextAttributesKey.createTextAttributesKey("MC68000_AREG", DefaultLanguageHighlighterColors.PARAMETER)
val STACK_POINTER = TextAttributesKey.createTextAttributesKey("MC68000_SP", DefaultLanguageHighlighterColors.PARAMETER)
val DREG = TextAttributesKey.createTextAttributesKey("MC68000_DREG", DefaultLanguageHighlighterColors.PARAMETER)
val SPECIAL_REG = TextAttributesKey.createTextAttributesKey("MC68000_SPECIALREG", DefaultLanguageHighlighterColors.PARAMETER)
val PROGRAM_COUNTER = TextAttributesKey.createTextAttributesKey("MC68000_PROGRAM_COUNTER", DefaultLanguageHighlighterColors.PARAMETER)