avrasm.js 2.7 KB

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