diff --git a/tools/pioasm/gen/lexer.cpp b/tools/pioasm/gen/lexer.cpp
index 5de6626f..6277a7a4 100644
--- a/tools/pioasm/gen/lexer.cpp
+++ b/tools/pioasm/gen/lexer.cpp
@@ -424,7 +424,7 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[263] =
+static const flex_int16_t yy_accept[266] =
     {   0,
         0,    0,    7,    7,   11,   11,    0,    0,   96,   94,
         1,    2,   40,   94,   37,   28,   29,   34,   30,   23,
@@ -432,49 +432,49 @@ static const flex_int16_t yy_accept[263] =
        92,   92,   92,   92,   92,   92,   92,   92,   92,   92,
        92,   73,   74,   92,   26,   27,   38,   36,   41,   94,
         7,    4,    5,    7,   11,    8,   12,   10,   19,   14,
-       20,   21,   16,   16,   15,    1,    2,   39,    0,    0,
-       31,   50,   50,   50,   50,   50,   50,   50,   22,   93,
-       89,    0,    0,   24,   93,   92,   92,   92,   92,   92,
-       92,   53,   92,   92,   92,   92,   92,   92,   92,   92,
+       20,   14,   21,   16,   16,   15,    1,    2,   39,    0,
+        0,   31,   50,   50,   50,   50,   50,   50,   50,   22,
+       93,   89,    0,    0,   24,   93,   92,   92,   92,   92,
+       92,   92,   53,   92,   92,   92,   92,   92,   92,   92,
 
-       92,   92,   75,   92,   92,   92,   92,   92,   92,   92,
-       92,    0,    7,    4,    5,    6,   11,    8,   12,    9,
-       19,   14,   20,    0,   13,   16,   19,   19,    0,    3,
-        0,   50,   50,   50,   50,   50,   50,   50,   50,   91,
-       90,   92,   92,   92,   92,   92,   92,   58,   77,   51,
-       57,   92,   60,   92,   92,   87,   63,   78,   54,   67,
-       92,   92,   92,   84,   59,   92,   92,   92,   92,    0,
-       18,   17,   50,   50,   50,   50,   50,   50,   50,   92,
-       92,   76,   68,   92,   92,   92,   92,   71,   92,   69,
-       92,   70,   92,   56,   55,   64,   92,   52,   88,    0,
+       92,   92,   92,   75,   92,   92,   92,   92,   92,   92,
+       92,   92,    0,    7,    4,    5,    6,   11,    8,   12,
+        9,   19,   14,   20,   14,    0,   13,   16,   19,   19,
+        0,    3,    0,   50,   50,   50,   50,   50,   50,   50,
+       50,   91,   90,   92,   92,   92,   92,   92,   92,   58,
+       77,   51,   57,   92,   60,   92,   92,   87,   63,   78,
+       54,   67,   92,   92,   92,   84,   59,   92,   92,   92,
+       92,    0,    6,   18,   17,   50,   50,   50,   50,   50,
+       50,   50,   92,   92,   76,   68,   92,   92,   92,   92,
+       71,   92,   69,   92,   70,   92,   56,   55,   64,   92,
 
-       50,   50,   50,   50,   50,   45,   44,   80,   85,   92,
-       92,   92,   92,   92,   92,   92,   92,   92,   92,    0,
-       50,   50,   50,   50,   50,   50,   92,   82,   92,   86,
-       92,   92,   61,   92,   92,   79,   32,   46,   50,   48,
-       50,   50,   50,   83,   81,   92,   72,   65,   92,   50,
-       42,   50,   50,   62,   66,   49,   47,   50,   50,   50,
-       43,    0
+       52,   88,    0,   50,   50,   50,   50,   50,   45,   44,
+       80,   85,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,    0,   50,   50,   50,   50,   50,   50,   92,
+       82,   92,   86,   92,   92,   61,   92,   92,   79,   32,
+       46,   50,   48,   50,   50,   50,   83,   81,   92,   72,
+       65,   92,   50,   42,   50,   50,   62,   66,   49,   47,
+       50,   50,   50,   43,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    4,    5,    1,    1,    6,    7,    1,    8,
-        9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
-       18,   18,   18,   18,   18,   18,   18,   19,   20,    1,
-       21,    1,    1,    1,   22,   23,   24,   25,   26,   27,
-       28,   29,   30,   31,   32,   33,   34,   35,   36,   37,
-       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
-       48,    1,   49,   50,   51,    1,   52,   53,   54,   55,
+        1,    2,    5,    6,    1,    1,    7,    8,    1,    9,
+       10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
+       19,   19,   19,   19,   19,   19,   19,   20,   21,    1,
+       22,    1,    1,    1,   23,   24,   25,   26,   27,   28,
+       29,   30,   31,   32,   33,   34,   35,   36,   37,   38,
+       39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
+       49,    1,   50,   51,   52,    1,   53,   54,   55,   56,
 
-       56,   57,   58,   59,   60,   61,   62,   63,   64,   65,
-       66,   67,   68,   69,   70,   71,   72,   73,   74,   75,
-       76,   77,   78,   79,   80,   81,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,   82,    1,    1,    1,    1,
+       57,   58,   59,   60,   61,   62,   63,   64,   65,   66,
+       67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
+       77,   78,   79,   80,   81,   82,    1,    1,    1,    1,
         1,    1,    1,    1,    1,   83,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,   84,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -483,173 +483,178 @@ static const YY_CHAR yy_ec[256] =
 
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,   84,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,   85,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[85] =
+static const YY_CHAR yy_meta[86] =
     {   0,
-        1,    2,    3,    1,    2,    4,    1,    1,    1,    5,
-        1,    1,    1,    1,    1,    6,    6,    6,    1,    1,
-        2,    7,    7,    7,    7,    7,    7,    8,    8,    8,
+        1,    2,    3,    1,    1,    2,    4,    1,    1,    1,
+        5,    1,    1,    1,    1,    1,    6,    6,    6,    1,
+        1,    2,    7,    7,    7,    7,    7,    7,    8,    8,
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    1,    1,    1,
-        8,    7,    7,    7,    7,    7,    7,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    1,    1,
+        1,    8,    7,    7,    7,    7,    7,    7,    8,    8,
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    1,    1,    1,
-        1,    1,    1,    1
+        8,    8,    8,    8,    8,    8,    8,    8,    1,    1,
+        1,    1,    1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[276] =
+static const flex_int16_t yy_base[279] =
     {   0,
-        0,    0,   83,   85,   90,   92,   94,  101,  516,  605,
-      513,  511,  492,  510,  605,  605,  605,  605,  605,  605,
-      498,   88,   99,  118,  113,  490,    0,    0,   57,   74,
-       63,   79,  113,   92,   91,  103,  107,  143,  124,  135,
-      137,    0,    0,  134,  605,  605,  605,  605,  605,  420,
-        0,  499,  497,  419,    0,  496,  494,  481,    0,  493,
-      491,  488,  182,  170,  605,  399,  364,  605,  103,  131,
-      605,    0,  138,  144,  145,  153,  171,  168,  605,    0,
-      194,  200,    0,  605,    0,    0,  166,  182,  187,  188,
-      193,    0,  183,  184,  187,  182,  203,  195,  203,  189,
+        0,    0,   84,   90,   96,   99,  102,  109,  540,  644,
+      112,  536,  516,  121,  644,  644,  644,  644,  644,  644,
+      523,   96,   79,  126,  121,  516,    0,    0,   83,   84,
+       83,   94,  125,  111,  112,  114,  132,  161,  127,  151,
+      132,    0,    0,  131,  644,  644,  644,  644,  644,  452,
+        0,  195,  531,  452,    0,  205,  529,  391,    0,  209,
+      401,  213,  393,  201,  209,  644,  227,  310,  644,  228,
+      231,  644,    0,  167,  183,  170,  174,  190,  201,  644,
+        0,  231,  118,    0,  644,    0,    0,  200,  212,  215,
+      212,  218,    0,  213,  213,  216,  212,  236,  223,  231,
 
-      194,  195,    0,  204,  238,  209,  203,  220,  224,  222,
-      223,  283,    0,  363,  361,    0,    0,  360,  355,  605,
-        0,  355,  353,  308,  285,  263,  248,  293,  265,  266,
-      281,    0,  246,  249,  263,  258,  270,  257,  275,  269,
-        0,  274,  277,  276,  266,  270,  263,    0,    0,    0,
-        0,  273,    0,  285,  279,    0,  291,  296,    0,  313,
-      298,  300,  310,    0,    0,  314,  300,  313,  319,  205,
-      271,  370,  330,  344,  345,  346,  349,  351,  340,  346,
-      340,    0,    0,  343,  348,  346,  359,    0,  355,    0,
-      368,    0,  369,    0,    0,  380,  358,    0,    0,  159,
+      217,  221,  220,    0,  227,  261,  230,  224,  244,  255,
+      248,  257,  214,    0,  297,  277,  301,    0,  310,  262,
+      644,    0,  314,  198,  315,  171,  168,  303,  172,  316,
+      322,  326,  327,    0,  278,  287,  306,  301,  319,  306,
+      324,  331,    0,  325,  328,  327,  317,  320,  313,    0,
+        0,    0,    0,  323,    0,  335,  325,    0,  329,  334,
+        0,  337,  328,  330,  335,    0,    0,  339,  337,  341,
+      360,   84,  396,  385,  411,  379,  382,  383,  385,  388,
+      390,  379,  385,  379,    0,    0,  382,  387,  385,  392,
+        0,  387,    0,  394,    0,  395,    0,    0,  391,  388,
 
-      378,  117,  384,  376,   72,    0,   50,    0,    0,  375,
-      384,  394,  391,  398,  395,  411,  410,  397,  398,   15,
-      413,  404,  406,  420,  409,  410,  406,    0,  421,    0,
-      432,  415,    0,  415,  431,    0,  605,    0,  421,    0,
-      425,  434,  439,    0,    0,  440,    0,    0,  433,  434,
-        0,  435,  438,    0,    0,    0,    0,  450,  454,  451,
-        0,  605,  522,  530,  538,  546,  548,  556,  559,  567,
-      575,  583,  591,  594,  597
+        0,    0,   73,  397,   90,  426,  418,   57,    0,   44,
+        0,    0,  417,  426,  445,  429,  436,  433,  449,  448,
+      435,  436,    5,  451,  442,  444,  458,  441,  441,  437,
+        0,  452,    0,  463,  450,    0,  450,  466,    0,  644,
+        0,  456,    0,  460,  469,  474,    0,    0,  464,    0,
+        0,  457,  475,    0,  476,  479,    0,    0,    0,    0,
+      491,  503,  489,    0,  644,  561,  569,  577,  585,  587,
+      595,  598,  606,  614,  622,  630,  633,  636
     } ;
 
-static const flex_int16_t yy_def[276] =
+static const flex_int16_t yy_def[279] =
     {   0,
-      262,    1,  263,  263,  264,  264,  265,  265,  262,  262,
-      262,  262,  262,  266,  262,  262,  262,  262,  262,  262,
-      262,  267,  262,  262,  262,  262,  268,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  269,
-      269,  269,  269,  269,  262,  262,  262,  262,  262,  262,
-      270,  270,  262,  270,  271,  271,  262,  262,  272,  262,
-      262,  273,  272,  272,  262,  262,  262,  262,  266,  266,
-      262,  274,  274,  274,  274,  274,  274,  274,  262,  268,
-      262,  262,  275,  262,  268,  269,  269,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  269,
+      265,    1,  266,  266,  267,  267,  268,  268,  265,  265,
+      265,  265,  265,  269,  265,  265,  265,  265,  265,  265,
+      265,  270,  265,  265,  265,  265,  271,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  265,  265,  265,  265,  265,  265,
+      273,  273,  265,  273,  274,  274,  265,  265,  275,  265,
+      265,  275,  276,  275,  275,  265,  265,  265,  265,  269,
+      269,  265,  277,  277,  277,  277,  277,  277,  277,  265,
+      271,  265,  265,  278,  265,  271,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
 
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  269,
-      269,  262,  270,  270,  262,  270,  271,  271,  262,  262,
-      272,  262,  262,  273,  273,  272,  272,  272,  266,  266,
-      266,  274,  274,  274,  274,  274,  274,  274,  274,  262,
-      275,  269,  269,  269,  269,  269,  269,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  262,
-      272,  272,  274,  274,  274,  274,  274,  274,  274,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  262,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  265,  273,  273,  265,  273,  274,  274,  265,
+      265,  275,  265,  265,  275,  276,  276,  275,  275,  275,
+      269,  269,  269,  277,  277,  277,  277,  277,  277,  277,
+      277,  265,  278,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  265,  273,  275,  275,  277,  277,  277,  277,  277,
+      277,  277,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
 
-      274,  274,  274,  274,  274,  274,  274,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  269,  269,  269,  262,
-      274,  274,  274,  274,  274,  274,  269,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  262,  274,  274,  274,
-      274,  274,  274,  269,  269,  269,  269,  269,  269,  274,
-      274,  274,  274,  269,  269,  274,  274,  274,  274,  274,
-      274,    0,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262
+      272,  272,  265,  277,  277,  277,  277,  277,  277,  277,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  265,  277,  277,  277,  277,  277,  277,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  265,
+      277,  277,  277,  277,  277,  277,  272,  272,  272,  272,
+      272,  272,  277,  277,  277,  277,  272,  272,  277,  277,
+      277,  277,  277,  277,    0,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265
     } ;
 
-static const flex_int16_t yy_nxt[690] =
+static const flex_int16_t yy_nxt[730] =
     {   0,
-       10,   11,   12,   13,   10,   14,   15,   16,   17,   18,
-       19,   20,   21,   22,   23,   24,   25,   25,   26,   27,
-       10,   28,   29,   30,   28,   31,   28,   32,   28,   33,
-       34,   28,   28,   35,   36,   37,   38,   28,   39,   40,
-       28,   28,   28,   41,   42,   43,   44,   45,   46,   47,
-       28,   28,   29,   30,   28,   31,   28,   32,   28,   33,
-       34,   28,   28,   35,   36,   37,   38,   28,   39,   40,
-       28,   28,   28,   41,   42,   43,   44,   10,   48,   10,
-       49,   10,   10,   50,   52,   53,   52,   53,   54,   87,
-       54,   56,   57,   56,   57,   60,   61,  237,   62,   58,
+       10,   11,   12,   11,   13,   10,   14,   15,   16,   17,
+       18,   19,   20,   21,   22,   23,   24,   25,   25,   26,
+       27,   10,   28,   29,   30,   28,   31,   28,   32,   28,
+       33,   34,   28,   28,   35,   36,   37,   38,   28,   39,
+       40,   28,   28,   28,   41,   42,   43,   44,   45,   46,
+       47,   28,   28,   29,   30,   28,   31,   28,   32,   28,
+       33,   34,   28,   28,   35,   36,   37,   38,   28,   39,
+       40,   28,   28,   28,   41,   42,   43,   44,   10,   48,
+       10,   49,   10,   10,   50,   52,   53,   52,  240,   80,
+       54,   52,   53,   52,   81,  229,   54,   56,   57,   56,
 
-      226,   58,   60,   61,  129,   62,   88,   89,   79,   63,
-       64,   64,   73,   80,   65,   90,   63,   64,   64,   87,
-       74,   65,  225,   75,   76,   95,   96,   77,   81,   81,
-       81,   78,  131,   81,   81,   81,   88,   89,   97,   91,
-       82,   99,   73,  100,   98,   90,  101,   92,  102,  106,
-       74,   93,   94,   75,   76,   95,   96,   77,  110,  111,
-      107,   78,   83,  133,  108,  134,  103,  222,   97,   91,
-       82,   99,  104,  100,   98,  109,  101,   92,  102,  106,
-      130,   93,   94,  135,  105,  126,  126,  126,  110,  111,
-      107,  136,   83,  133,  108,  134,  103,  126,  126,  126,
+       56,   57,   56,   60,   61,   62,   58,   63,  228,   58,
+       60,   61,   62,   67,   63,   67,   88,   89,   64,   65,
+       65,   74,   71,   66,   71,   64,   65,   65,   90,   75,
+       66,   91,   76,   77,  142,  142,   78,   82,   82,   82,
+       79,  225,   82,   82,   82,   96,   88,   89,   97,   83,
+       98,   74,   92,  107,  111,  223,   99,  112,   90,   75,
+       93,   91,   76,   77,   94,   95,   78,  100,  203,  101,
+       79,   84,  102,  127,  103,   96,  127,  108,   97,   83,
+       98,  109,   92,  107,  111,  104,   99,  112,  174,  174,
+       93,  105,  110,  135,   94,   95,  115,  100,  115,  101,
 
-      137,  142,  104,  138,  127,  109,  139,  143,  130,   81,
-       81,   81,  144,  135,  105,  140,  140,  145,  146,  147,
-      148,  136,  149,  150,  151,  152,  128,  155,  156,  157,
-      137,  142,  158,  138,  127,  159,  139,  143,  160,  153,
-      220,  164,  144,  165,  166,  167,  154,  145,  146,  147,
-      148,  168,  149,  150,  151,  152,  128,  155,  156,  157,
-      161,  169,  158,  171,  171,  159,  129,  129,  160,  153,
-      162,  164,  173,  165,  166,  167,  154,  163,  126,  126,
-      126,  168,  131,  174,  140,  140,  171,  171,  200,  125,
-      161,  169,  175,  176,  177,  178,  179,  180,  181,  182,
+      124,   84,  102,  106,  103,  136,  119,  108,  119,  137,
+      123,  109,  123,  138,  123,  104,  125,  128,  128,  128,
+      139,  105,  110,  135,  129,  128,  128,  128,   67,  131,
+       67,  131,  133,  106,  133,  136,  144,  140,  145,  137,
+      141,  146,  147,  138,  148,  149,  130,   82,   82,   82,
+      139,  150,  151,  152,  129,  153,  157,  158,  159,  154,
+      160,  161,  162,  166,  120,  167,  144,  140,  145,  168,
+      141,  146,  147,  155,  148,  149,  130,  169,  170,  116,
+      156,  150,  151,  152,  163,  153,  157,  158,  159,  154,
+      160,  161,  162,  166,  164,  167,  171,  172,  115,  168,
 
-      162,  183,  173,  184,  185,  186,  187,  163,  172,  172,
-      172,  188,  125,  174,  172,  172,  172,  172,  172,  172,
-      189,  190,  175,  176,  177,  178,  179,  180,  181,  182,
-      193,  183,  194,  184,  185,  186,  187,  191,  195,  196,
-      197,  188,  130,  130,  172,  172,  172,  172,  172,  172,
-      189,  190,  192,  198,  199,  123,  122,  119,  130,  201,
-      193,  118,  194,  115,  114,  170,   67,  191,  195,  196,
-      197,  202,  203,  204,  205,  206,  207,  208,  209,  210,
-      211,  212,  192,  198,  199,  172,  172,  172,  213,  201,
-      214,  172,  172,  172,  172,  172,  172,  215,  216,  219,
+      115,  165,  173,  155,  173,  176,  132,  169,  170,  132,
+      156,  119,   68,  119,  163,  123,  123,  123,  125,  128,
+      128,  128,  177,  131,  164,  131,  171,  131,  133,  131,
+      133,  165,  175,  175,  175,  176,  178,  179,  175,  175,
+      175,  175,  175,  175,  180,  181,  182,  142,  142,  183,
+      184,  185,  177,  186,  187,  188,  189,  190,  191,  192,
+      193,  196,  194,  197,  198,  199,  178,  179,  175,  175,
+      175,  175,  175,  175,  180,  181,  182,  195,  200,  183,
+      184,  185,  201,  186,  187,  188,  189,  190,  191,  192,
+      193,  196,  194,  197,  198,  199,  202,  173,  127,  173,
 
-       66,  202,  203,  204,  205,  206,  207,  208,  209,  210,
-      211,  212,  221,  223,  224,  227,  228,  229,  213,  217,
-      214,  172,  172,  172,  172,  172,  172,  215,  216,  219,
-      218,  230,  231,  232,  233,  234,  235,  236,  238,  239,
-      240,  241,  221,  223,  224,  227,  228,  229,  242,  217,
-      243,  244,  245,  246,  247,  248,  249,  250,  251,  252,
-      253,  230,  231,  232,  233,  234,  235,  236,  238,  239,
-      240,  241,  254,  255,  256,  257,  258,  259,  242,  260,
-      243,  244,  245,  246,  247,  248,  249,  250,  251,  252,
-      253,  261,  125,  123,  122,  120,  119,  118,  116,  115,
+      132,  174,  174,  124,  132,  132,  121,  195,  200,  204,
+      205,  206,  201,  207,  208,  209,  210,  211,  212,  213,
+      214,  215,  216,  217,  218,  219,  202,  175,  175,  175,
+      222,  220,  224,  175,  175,  175,  175,  175,  175,  204,
+      205,  206,  221,  207,  208,  209,  210,  211,  212,  213,
+      214,  215,  216,  217,  218,  219,  226,  227,  230,  231,
+      222,  220,  224,  175,  175,  175,  175,  175,  175,  232,
+      233,  234,  235,  236,  237,  238,  239,  241,  242,  243,
+      244,  245,  246,  247,  248,  249,  226,  227,  230,  231,
+      250,  251,  252,  253,  254,  255,  256,  257,  258,  232,
 
-      114,  112,  254,  255,  256,  257,  258,  259,   84,  260,
-       71,   70,   68,   67,   66,  262,  262,  262,  262,  262,
-      262,  261,   51,   51,   51,   51,   51,   51,   51,   51,
-       55,   55,   55,   55,   55,   55,   55,   55,   59,   59,
-       59,   59,   59,   59,   59,   59,   69,   69,  262,  262,
-       69,   69,   69,   69,   72,   72,   85,   85,  262,   85,
-       85,   85,   85,   85,   86,   86,   86,  113,  113,  262,
-      113,  113,  113,  113,  113,  117,  117,  262,  117,  262,
-      117,  117,  117,  121,  262,  262,  121,  121,  121,  121,
-      121,  124,  124,  262,  124,  124,  124,  124,  124,  132,
+      233,  234,  235,  236,  237,  238,  239,  241,  242,  243,
+      244,  245,  246,  247,  248,  249,  259,  260,  261,  262,
+      250,  251,  252,  253,  254,  255,  256,  257,  258,  263,
+      264,  120,  117,  116,  113,   85,   72,   69,   68,  265,
+      265,  265,  265,  265,  265,  265,  259,  260,  261,  262,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  263,
+      264,   51,   51,   51,   51,   51,   51,   51,   51,   55,
+       55,   55,   55,   55,   55,   55,   55,   59,   59,   59,
+       59,   59,   59,   59,   59,   70,   70,  265,  265,   70,
+       70,   70,   70,   73,   73,   86,   86,  265,   86,   86,
 
-      132,  132,  141,  141,    9,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262
+       86,   86,   86,   87,   87,   87,  114,  114,  265,  114,
+      114,  114,  114,  114,  118,  118,  265,  118,  265,  118,
+      118,  118,  122,  265,  265,  122,  122,  122,  122,  122,
+      126,  126,  265,  126,  126,  126,  126,  126,  134,  134,
+      134,  143,  143,    9,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265
     } ;
 
-static const flex_int16_t yy_chk[690] =
+static const flex_int16_t yy_chk[730] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -659,73 +664,78 @@ static const flex_int16_t yy_chk[690] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    3,    3,    4,    4,    3,   29,
-        4,    5,    5,    6,    6,    7,    7,  220,    7,    5,
+        1,    1,    1,    1,    1,    3,    3,    3,  223,   23,
+        3,    4,    4,    4,   23,  210,    4,    5,    5,    5,
 
-      207,    6,    8,    8,   69,    8,   30,   31,   23,    7,
-        7,    7,   22,   23,    7,   32,    8,    8,    8,   29,
-       22,    8,  205,   22,   22,   34,   35,   22,   25,   25,
-       25,   22,   70,   24,   24,   24,   30,   31,   36,   33,
-       24,   37,   22,   37,   36,   32,   37,   33,   37,   39,
-       22,   33,   33,   22,   22,   34,   35,   22,   41,   44,
-       40,   22,   24,   73,   40,   74,   38,  202,   36,   33,
-       24,   37,   38,   37,   36,   40,   37,   33,   37,   39,
-       69,   33,   33,   75,   38,   64,   64,   64,   41,   44,
-       40,   76,   24,   73,   40,   74,   38,   63,   63,   63,
+        6,    6,    6,    7,    7,    7,    5,    7,  208,    6,
+        8,    8,    8,   11,    8,   11,   29,   30,    7,    7,
+        7,   22,   14,    7,   14,    8,    8,    8,   31,   22,
+        8,   32,   22,   22,   83,   83,   22,   25,   25,   25,
+       22,  205,   24,   24,   24,   34,   29,   30,   35,   24,
+       36,   22,   33,   39,   41,  203,   36,   44,   31,   22,
+       33,   32,   22,   22,   33,   33,   22,   37,  172,   37,
+       22,   24,   37,  127,   37,   34,  126,   40,   35,   24,
+       36,   40,   33,   39,   41,   38,   36,   44,  129,  129,
+       33,   38,   40,   74,   33,   33,   52,   37,   52,   37,
 
-       77,   87,   38,   78,   63,   40,   78,   88,   70,   81,
-       81,   81,   89,   75,   38,   82,   82,   90,   91,   91,
-       93,   76,   94,   95,   96,   97,   63,   98,   99,  100,
-       77,   87,  101,   78,   63,  102,   78,   88,  104,   97,
-      200,  106,   89,  107,  108,  109,   97,   90,   91,   91,
-       93,  110,   94,   95,   96,   97,   63,   98,   99,  100,
-      105,  111,  101,  127,  127,  102,  129,  130,  104,   97,
-      105,  106,  133,  107,  108,  109,   97,  105,  126,  126,
-      126,  110,  131,  134,  140,  140,  171,  171,  170,  125,
-      105,  111,  135,  136,  137,  138,  139,  142,  143,  144,
+      124,   24,   37,   38,   37,   75,   56,   40,   56,   76,
+       60,   40,   60,   77,   62,   38,   62,   64,   64,   64,
+       78,   38,   40,   74,   64,   65,   65,   65,   67,   70,
+       67,   70,   71,   38,   71,   75,   88,   79,   89,   76,
+       79,   90,   91,   77,   92,   92,   64,   82,   82,   82,
+       78,   94,   95,   96,   64,   97,   99,  100,  101,   98,
+      102,  103,  105,  107,  120,  108,   88,   79,   89,  109,
+       79,   90,   91,   98,   92,   92,   64,  110,  111,  116,
+       98,   94,   95,   96,  106,   97,   99,  100,  101,   98,
+      102,  103,  105,  107,  106,  108,  112,  113,  115,  109,
 
-      105,  145,  133,  146,  147,  152,  154,  105,  128,  128,
-      128,  155,  124,  134,  128,  128,  128,  128,  128,  128,
-      157,  158,  135,  136,  137,  138,  139,  142,  143,  144,
-      161,  145,  162,  146,  147,  152,  154,  160,  163,  166,
-      167,  155,  129,  130,  128,  128,  128,  128,  128,  128,
-      157,  158,  160,  168,  169,  123,  122,  119,  131,  173,
-      161,  118,  162,  115,  114,  112,   67,  160,  163,  166,
-      167,  174,  175,  176,  177,  178,  179,  180,  181,  184,
-      185,  186,  160,  168,  169,  172,  172,  172,  187,  173,
-      189,  172,  172,  172,  172,  172,  172,  191,  193,  197,
+      115,  106,  117,   98,  117,  135,   70,  110,  111,   71,
+       98,  119,   68,  119,  106,  123,  125,  123,  125,  128,
+      128,  128,  136,  131,  106,  131,  112,  132,  133,  132,
+      133,  106,  130,  130,  130,  135,  137,  138,  130,  130,
+      130,  130,  130,  130,  139,  140,  141,  142,  142,  144,
+      145,  146,  136,  147,  148,  149,  154,  156,  157,  159,
+      160,  163,  162,  164,  165,  168,  137,  138,  130,  130,
+      130,  130,  130,  130,  139,  140,  141,  162,  169,  144,
+      145,  146,  170,  147,  148,  149,  154,  156,  157,  159,
+      160,  163,  162,  164,  165,  168,  171,  173,   63,  173,
 
-       66,  174,  175,  176,  177,  178,  179,  180,  181,  184,
-      185,  186,  201,  203,  204,  210,  211,  212,  187,  196,
-      189,  172,  172,  172,  172,  172,  172,  191,  193,  197,
-      196,  213,  214,  215,  216,  217,  218,  219,  221,  222,
-      223,  224,  201,  203,  204,  210,  211,  212,  225,  196,
-      226,  227,  229,  231,  232,  234,  235,  239,  241,  242,
-      243,  213,  214,  215,  216,  217,  218,  219,  221,  222,
-      223,  224,  246,  249,  250,  252,  253,  258,  225,  259,
-      226,  227,  229,  231,  232,  234,  235,  239,  241,  242,
-      243,  260,   62,   61,   60,   58,   57,   56,   54,   53,
+      131,  174,  174,   61,  132,  133,   58,  162,  169,  176,
+      177,  178,  170,  179,  180,  181,  182,  183,  184,  187,
+      188,  189,  190,  192,  194,  196,  171,  175,  175,  175,
+      200,  199,  204,  175,  175,  175,  175,  175,  175,  176,
+      177,  178,  199,  179,  180,  181,  182,  183,  184,  187,
+      188,  189,  190,  192,  194,  196,  206,  207,  213,  214,
+      200,  199,  204,  175,  175,  175,  175,  175,  175,  215,
+      216,  217,  218,  219,  220,  221,  222,  224,  225,  226,
+      227,  228,  229,  230,  232,  234,  206,  207,  213,  214,
+      235,  237,  238,  242,  244,  245,  246,  249,  252,  215,
 
-       52,   50,  246,  249,  250,  252,  253,  258,   26,  259,
-       21,   14,   13,   12,   11,    9,    0,    0,    0,    0,
-        0,  260,  263,  263,  263,  263,  263,  263,  263,  263,
-      264,  264,  264,  264,  264,  264,  264,  264,  265,  265,
-      265,  265,  265,  265,  265,  265,  266,  266,    0,    0,
-      266,  266,  266,  266,  267,  267,  268,  268,    0,  268,
-      268,  268,  268,  268,  269,  269,  269,  270,  270,    0,
-      270,  270,  270,  270,  270,  271,  271,    0,  271,    0,
-      271,  271,  271,  272,    0,    0,  272,  272,  272,  272,
-      272,  273,  273,    0,  273,  273,  273,  273,  273,  274,
+      216,  217,  218,  219,  220,  221,  222,  224,  225,  226,
+      227,  228,  229,  230,  232,  234,  253,  255,  256,  261,
+      235,  237,  238,  242,  244,  245,  246,  249,  252,  262,
+      263,   57,   54,   53,   50,   26,   21,   13,   12,    9,
+        0,    0,    0,    0,    0,    0,  253,  255,  256,  261,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  262,
+      263,  266,  266,  266,  266,  266,  266,  266,  266,  267,
+      267,  267,  267,  267,  267,  267,  267,  268,  268,  268,
+      268,  268,  268,  268,  268,  269,  269,    0,    0,  269,
+      269,  269,  269,  270,  270,  271,  271,    0,  271,  271,
 
-      274,  274,  275,  275,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
-      262,  262,  262,  262,  262,  262,  262,  262,  262
+      271,  271,  271,  272,  272,  272,  273,  273,    0,  273,
+      273,  273,  273,  273,  274,  274,    0,  274,    0,  274,
+      274,  274,  275,    0,    0,  275,  275,  275,  275,  275,
+      276,  276,    0,  276,  276,  276,  276,  276,  277,  277,
+      277,  278,  278,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1098,13 +1108,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 263 )
+				if ( yy_current_state >= 266 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 262 );
+		while ( yy_current_state != 265 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1866,7 +1876,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 263 )
+			if ( yy_current_state >= 266 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1899,11 +1909,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 263 )
+		if ( yy_current_state >= 266 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 262);
+	yy_is_jam = (yy_current_state == 265);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
diff --git a/tools/pioasm/lexer.ll b/tools/pioasm/lexer.ll
index 939b06f1..5604b701 100644
--- a/tools/pioasm/lexer.ll
+++ b/tools/pioasm/lexer.ll
@@ -27,7 +27,7 @@
   yy::parser::symbol_type make_BINARY(const std::string &s, const yy::parser::location_type& loc);
 %}
 
-blank         [ \t]
+blank         [ \t\r]
 whitesp       {blank}+
 
 comment       (";"|"//")[^\n]*
@@ -77,7 +77,7 @@ output_fmt    [^%\n]+
 <code_block>{
     {blank}+                        loc.step();
     \n+                             { auto loc_newline = loc; loc_newline.end = loc_newline.begin; loc.lines(yyleng); loc.step(); }
-    "%}"                            { BEGIN(INITIAL); auto loc2 = loc; loc2.begin = code_block_start.begin; return yy::parser::make_CODE_BLOCK_CONTENTS(code_block_contents, loc2); }
+    "%}"{blank}*                    { BEGIN(INITIAL); auto loc2 = loc; loc2.begin = code_block_start.begin; return yy::parser::make_CODE_BLOCK_CONTENTS(code_block_contents, loc2); }
     .*                              { code_block_contents += std::string(yytext) + "\n"; }
 }