[d24f17c] | 1 | /*
|
---|
| 2 | Language: AVR Assembly
|
---|
| 3 | Author: Vladimir Ermakov <vooon341@gmail.com>
|
---|
| 4 | Category: assembler
|
---|
| 5 | Website: https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html
|
---|
| 6 | */
|
---|
| 7 |
|
---|
| 8 | /** @type LanguageFn */
|
---|
| 9 | function avrasm(hljs) {
|
---|
| 10 | return {
|
---|
| 11 | name: 'AVR Assembly',
|
---|
| 12 | case_insensitive: true,
|
---|
| 13 | keywords: {
|
---|
| 14 | $pattern: '\\.?' + hljs.IDENT_RE,
|
---|
| 15 | keyword:
|
---|
| 16 | /* mnemonic */
|
---|
| 17 | 'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs ' +
|
---|
| 18 | 'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr ' +
|
---|
| 19 | 'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor ' +
|
---|
| 20 | 'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul ' +
|
---|
| 21 | 'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs ' +
|
---|
| 22 | 'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub ' +
|
---|
| 23 | 'subi swap tst wdr',
|
---|
| 24 | built_in:
|
---|
| 25 | /* general purpose registers */
|
---|
| 26 | 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 ' +
|
---|
| 27 | 'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ' +
|
---|
| 28 | /* IO Registers (ATMega128) */
|
---|
| 29 | 'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h ' +
|
---|
| 30 | 'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ' +
|
---|
| 31 | 'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ' +
|
---|
| 32 | 'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk ' +
|
---|
| 33 | 'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ' +
|
---|
| 34 | 'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr ' +
|
---|
| 35 | 'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ' +
|
---|
| 36 | 'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',
|
---|
| 37 | meta:
|
---|
| 38 | '.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list ' +
|
---|
| 39 | '.listmac .macro .nolist .org .set'
|
---|
| 40 | },
|
---|
| 41 | contains: [
|
---|
| 42 | hljs.C_BLOCK_COMMENT_MODE,
|
---|
| 43 | hljs.COMMENT(
|
---|
| 44 | ';',
|
---|
| 45 | '$',
|
---|
| 46 | {
|
---|
| 47 | relevance: 0
|
---|
| 48 | }
|
---|
| 49 | ),
|
---|
| 50 | hljs.C_NUMBER_MODE, // 0x..., decimal, float
|
---|
| 51 | hljs.BINARY_NUMBER_MODE, // 0b...
|
---|
| 52 | {
|
---|
| 53 | className: 'number',
|
---|
| 54 | begin: '\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...
|
---|
| 55 | },
|
---|
| 56 | hljs.QUOTE_STRING_MODE,
|
---|
| 57 | {
|
---|
| 58 | className: 'string',
|
---|
| 59 | begin: '\'',
|
---|
| 60 | end: '[^\\\\]\'',
|
---|
| 61 | illegal: '[^\\\\][^\']'
|
---|
| 62 | },
|
---|
| 63 | {
|
---|
| 64 | className: 'symbol',
|
---|
| 65 | begin: '^[A-Za-z0-9_.$]+:'
|
---|
| 66 | },
|
---|
| 67 | {
|
---|
| 68 | className: 'meta',
|
---|
| 69 | begin: '#',
|
---|
| 70 | end: '$'
|
---|
| 71 | },
|
---|
| 72 | { // substitution within a macro
|
---|
| 73 | className: 'subst',
|
---|
| 74 | begin: '@[0-9]+'
|
---|
| 75 | }
|
---|
| 76 | ]
|
---|
| 77 | };
|
---|
| 78 | }
|
---|
| 79 |
|
---|
| 80 | module.exports = avrasm;
|
---|