diff --git a/components.js b/components.js index fa6a6b6ae9..84811c57e4 100644 --- a/components.js +++ b/components.js @@ -94,6 +94,10 @@ var components = { "title": "AsciiDoc", "owner": "Golmote" }, + "asm6502": { + "title": "6502 Assembly", + "owner": "kzurawel" + }, "aspnet": { "title": "ASP.NET (C#)", "require": "markup", diff --git a/components/prism-asm6502.js b/components/prism-asm6502.js new file mode 100644 index 0000000000..039203286a --- /dev/null +++ b/components/prism-asm6502.js @@ -0,0 +1,28 @@ +Prism.languages.asm6502 = { + 'comment': /;.*/, + 'directive': { + pattern: /\.\w+(?= )/, + alias: 'keyword' + }, + 'string': /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/, + 'opcode': { + pattern: /\b(?:adc|and|asl|bcc|bcs|beq|bit|bmi|bne|bpl|brk|bvc|bvs|clc|cld|cli|clv|cmp|cpx|cpy|dec|dex|dey|eor|inc|inx|iny|jmp|jsr|lda|ldx|ldy|lsr|nop|ora|pha|php|pla|plp|rol|ror|rti|rts|sbc|sec|sed|sei|sta|stx|sty|tax|tay|tsx|txa|txs|tya|ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX|DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR|NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC|SEC|SED|SEI|STA|STX|STY|TAX|TAY|TSX|TXA|TXS|TYA)\b/, + alias: 'property' + }, + 'hexnumber': { + pattern: /#?\$[\da-fA-F]{2,4}/, + alias: 'string' + }, + 'binarynumber': { + pattern: /#?%[01]+/, + alias: 'string' + }, + 'decimalnumber': { + pattern: /#?\d+/, + alias: 'string' + }, + 'register': { + pattern: /\b[xyaXYA]\b/, + alias: 'variable' + } +}; diff --git a/components/prism-asm6502.min.js b/components/prism-asm6502.min.js new file mode 100644 index 0000000000..7832a33af6 --- /dev/null +++ b/components/prism-asm6502.min.js @@ -0,0 +1 @@ +Prism.languages.asm6502={comment:/;.*/,directive:{pattern:/\.\w+(?= )/,alias:"keyword"},string:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,opcode:{pattern:/\b(?:adc|and|asl|bcc|bcs|beq|bit|bmi|bne|bpl|brk|bvc|bvs|clc|cld|cli|clv|cmp|cpx|cpy|dec|dex|dey|eor|inc|inx|iny|jmp|jsr|lda|ldx|ldy|lsr|nop|ora|pha|php|pla|plp|rol|ror|rti|rts|sbc|sec|sed|sei|sta|stx|sty|tax|tay|tsx|txa|txs|tya|ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX|DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR|NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC|SEC|SED|SEI|STA|STX|STY|TAX|TAY|TSX|TXA|TXS|TYA)\b/,alias:"property"},hexnumber:{pattern:/#?\$[\da-fA-F]{2,4}/,alias:"string"},binarynumber:{pattern:/#?%[01]+/,alias:"string"},decimalnumber:{pattern:/#?\d+/,alias:"string"},register:{pattern:/\b[xyaXYA]\b/,alias:"variable"}}; \ No newline at end of file diff --git a/examples/prism-asm6502.html b/examples/prism-asm6502.html new file mode 100644 index 0000000000..23d3aafc7d --- /dev/null +++ b/examples/prism-asm6502.html @@ -0,0 +1,42 @@ +
To use this language, use the class "language-asm6502".
+ +; This is a comment
+
+label1: ; a label
+
+
+SEI
+CLC
+
+; lowercase
+inx
+bne label1
+
+
+
+.segment CODE
+.word $07d3
+
+
+
+ASL A ; "A"
+LDA label1,x ; "x"
+
+
+
+.include "header.asm"
+
+
+
+LDA #127
+STA $80f0
+LDY #%01011000
+
diff --git a/plugins/show-language/prism-show-language.js b/plugins/show-language/prism-show-language.js
index 2ae6c11d12..a4662d3512 100644
--- a/plugins/show-language/prism-show-language.js
+++ b/plugins/show-language/prism-show-language.js
@@ -11,7 +11,7 @@ if (!Prism.plugins.toolbar) {
}
// The languages map is built automatically with gulp
-var Languages = /*languages_placeholder[*/{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","asciidoc":"AsciiDoc","aspnet":"ASP.NET (C#)","autohotkey":"AutoHotkey","autoit":"AutoIt","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","django":"Django/Jinja2","fsharp":"F#","glsl":"GLSL","graphql":"GraphQL","http":"HTTP","inform7":"Inform 7","json":"JSON","latex":"LaTeX","livescript":"LiveScript","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","n4js":"N4JS","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","opencl":"OpenCL","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","properties":".properties","protobuf":"Protocol Buffers","jsx":"React JSX","renpy":"Ren'py","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vbnet":"VB.Net","vhdl":"VHDL","vim":"vim","wiki":"Wiki markup","xojo":"Xojo (REALbasic)","yaml":"YAML"}/*]*/;
+var Languages = /*languages_placeholder[*/{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","asciidoc":"AsciiDoc","asm6502":"6502 Assembly","aspnet":"ASP.NET (C#)","autohotkey":"AutoHotkey","autoit":"AutoIt","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","django":"Django/Jinja2","fsharp":"F#","glsl":"GLSL","graphql":"GraphQL","http":"HTTP","inform7":"Inform 7","json":"JSON","latex":"LaTeX","livescript":"LiveScript","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","n4js":"N4JS","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","opencl":"OpenCL","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","properties":".properties","protobuf":"Protocol Buffers","jsx":"React JSX","renpy":"Ren'py","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vbnet":"VB.Net","vhdl":"VHDL","vim":"vim","wiki":"Wiki markup","xojo":"Xojo (REALbasic)","yaml":"YAML"}/*]*/;
Prism.plugins.toolbar.registerButton('show-language', function(env) {
var pre = env.element.parentNode;
if (!pre || !/pre/i.test(pre.nodeName)) {
diff --git a/plugins/show-language/prism-show-language.min.js b/plugins/show-language/prism-show-language.min.js
index 3894328cf6..ae3791564b 100644
--- a/plugins/show-language/prism-show-language.min.js
+++ b/plugins/show-language/prism-show-language.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document){if(!Prism.plugins.toolbar)return console.warn("Show Languages plugin loaded before Toolbar plugin."),void 0;var e={html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",asciidoc:"AsciiDoc",aspnet:"ASP.NET (C#)",autohotkey:"AutoHotkey",autoit:"AutoIt",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",django:"Django/Jinja2",fsharp:"F#",glsl:"GLSL",graphql:"GraphQL",http:"HTTP",inform7:"Inform 7",json:"JSON",latex:"LaTeX",livescript:"LiveScript",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",n4js:"N4JS",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",opencl:"OpenCL",parigp:"PARI/GP",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",properties:".properties",protobuf:"Protocol Buffers",jsx:"React JSX",renpy:"Ren'py",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vbnet:"VB.Net",vhdl:"VHDL",vim:"vim",wiki:"Wiki markup",xojo:"Xojo (REALbasic)",yaml:"YAML"};Prism.plugins.toolbar.registerButton("show-language",function(t){var a=t.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var s=a.getAttribute("data-language")||e[t.language]||t.language.substring(0,1).toUpperCase()+t.language.substring(1),r=document.createElement("span");return r.textContent=s,r}})}}();
\ No newline at end of file
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){if(!Prism.plugins.toolbar)return console.warn("Show Languages plugin loaded before Toolbar plugin."),void 0;var e={html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",asciidoc:"AsciiDoc",asm6502:"6502 Assembly",aspnet:"ASP.NET (C#)",autohotkey:"AutoHotkey",autoit:"AutoIt",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",django:"Django/Jinja2",fsharp:"F#",glsl:"GLSL",graphql:"GraphQL",http:"HTTP",inform7:"Inform 7",json:"JSON",latex:"LaTeX",livescript:"LiveScript",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",n4js:"N4JS",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",opencl:"OpenCL",parigp:"PARI/GP",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",properties:".properties",protobuf:"Protocol Buffers",jsx:"React JSX",renpy:"Ren'py",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vbnet:"VB.Net",vhdl:"VHDL",vim:"vim",wiki:"Wiki markup",xojo:"Xojo (REALbasic)",yaml:"YAML"};Prism.plugins.toolbar.registerButton("show-language",function(t){var a=t.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var s=a.getAttribute("data-language")||e[t.language]||t.language.substring(0,1).toUpperCase()+t.language.substring(1),r=document.createElement("span");return r.textContent=s,r}})}}();
\ No newline at end of file
diff --git a/tests/languages/asm6502/comment_feature.test b/tests/languages/asm6502/comment_feature.test
new file mode 100644
index 0000000000..d4b860167a
--- /dev/null
+++ b/tests/languages/asm6502/comment_feature.test
@@ -0,0 +1,13 @@
+;
+; foo bar baz
+
+-------------------------
+
+[
+ ["comment", ";"],
+ ["comment", "; foo bar baz"]
+]
+
+-------------------------
+
+Check for comments
diff --git a/tests/languages/asm6502/directive_feature.test b/tests/languages/asm6502/directive_feature.test
new file mode 100644
index 0000000000..1cf42c81d2
--- /dev/null
+++ b/tests/languages/asm6502/directive_feature.test
@@ -0,0 +1,12 @@
+.segment CODE
+
+-------------------------
+
+[
+ ["directive", ".segment"],
+ " CODE"
+]
+
+-------------------------
+
+Check for directives
diff --git a/tests/languages/asm6502/number_feature.test b/tests/languages/asm6502/number_feature.test
new file mode 100644
index 0000000000..55262f67bd
--- /dev/null
+++ b/tests/languages/asm6502/number_feature.test
@@ -0,0 +1,18 @@
+LDA #127
+STA $8000
+LDX #%10001010
+
+-------------------------
+
+[
+ ["opcode", "LDA"],
+ ["decimalnumber", "#127"],
+ ["opcode", "STA"],
+ ["hexnumber", "$8000"],
+ ["opcode", "LDX"],
+ ["binarynumber", "#%10001010"]
+]
+
+-------------------------
+
+Check for numbers
diff --git a/tests/languages/asm6502/opcode_feature.test b/tests/languages/asm6502/opcode_feature.test
new file mode 100644
index 0000000000..75e7b42806
--- /dev/null
+++ b/tests/languages/asm6502/opcode_feature.test
@@ -0,0 +1,17 @@
+LDA
+BNE
+inx
+clc
+
+-------------------------------------
+
+[
+ ["opcode", "LDA"],
+ ["opcode", "BNE"],
+ ["opcode", "inx"],
+ ["opcode", "clc"]
+]
+
+-------------------------------------
+
+Check for opcodes
diff --git a/tests/languages/asm6502/register_feature.test b/tests/languages/asm6502/register_feature.test
new file mode 100644
index 0000000000..91ec7c42be
--- /dev/null
+++ b/tests/languages/asm6502/register_feature.test
@@ -0,0 +1,17 @@
+LDA $8000,x
+ASL A
+
+-------------------------
+
+[
+ ["opcode", "LDA"],
+ ["hexnumber", "$8000"],
+ ",",
+ ["register", "x"],
+ ["opcode", "ASL"],
+ ["register", "A"]
+]
+
+-------------------------
+
+Check for registers
diff --git a/tests/languages/asm6502/string_feature.test b/tests/languages/asm6502/string_feature.test
new file mode 100644
index 0000000000..0205074449
--- /dev/null
+++ b/tests/languages/asm6502/string_feature.test
@@ -0,0 +1,12 @@
+.include "header.asm"
+
+-------------------------
+
+[
+ ["directive", ".include"],
+ ["string", "\"header.asm\""]
+]
+
+-------------------------
+
+Check for strings