diff --git a/.gitignore b/.gitignore
index 487e9f47fdc967dbb5e20191c9a0a90bee3b31d8..42e6204b0ab36b01dd9511b4e93422a01aebb6d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,6 @@
-jake/
\ No newline at end of file
+jake/
+**.elf
+**.hex
+**.lss
+**.map
+**.srec
\ No newline at end of file
diff --git a/circuit/xmega-128a4u-switch/xmega-128a4u-switch_01/eagle.epf b/circuit/xmega-128a4u-switch/xmega-128a4u-switch_01/eagle.epf
index ab0b6b40f4720aa063a60820beea45563c34ac8f..a7bfc32af255140221e9af5ea8e45c3054709e4b 100644
--- a/circuit/xmega-128a4u-switch/xmega-128a4u-switch_01/eagle.epf
+++ b/circuit/xmega-128a4u-switch/xmega-128a4u-switch_01/eagle.epf
@@ -351,8 +351,8 @@ UsedLibrary="D:/Dropbox (Personal)/CBA/doc/libraries/eagle/fab.lbr"
 
 [Win_1]
 Type="Schematic Editor"
-Loc="0 0 3839 2065"
-State=1
+Loc="0 0 1919 1039"
+State=3
 Number=2
 File="xmega-128a4u-switch.sch"
 View="15.0064 -41.1611 192.2 109.557"
@@ -399,12 +399,12 @@ Sheet="1"
 
 [Win_2]
 Type="Board Editor"
-Loc="0 0 3839 2065"
-State=1
+Loc="0 0 1919 1016"
+State=3
 Number=1
 File="xmega-128a4u-switch.brd"
-View="9.03818 1.12622 69.223 49.2745"
-WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524 0.3048"
+View="27.2798 4.87803 53.4537 24.2277"
+WireWidths=" 0.0762 0.1016 0.127 0.15 0.2 0.2032 0.254 0.3048 0.4064 0.508 0.6096 0.8128 1.016 1.27 2.54 0.1524"
 PadDiameters=" 0.254 0.3048 0.4064 0.6096 0.8128 1.016 1.27 1.4224 1.6764 1.778 1.9304 2.1844 2.54 3.81 6.4516 0"
 PadDrills=" 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.65 0.7 0.75 0.8 0.85 0.9 1 0.6"
 ViaDiameters=" 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.3 0"
@@ -445,12 +445,12 @@ Layer=1
 
 [Win_3]
 Type="Control Panel"
-Loc="-11 -11 3828 2054"
+Loc="0 0 1919 1016"
 State=1
 Number=0
 
 [Desktop]
-Screen="3840 2160"
+Screen="1920 1080"
 Window="Win_1"
 Window="Win_2"
 Window="Win_3"
diff --git a/embedded/atxmega-a4u-wakeup/.vs/atxmega-a4u-wakeup/v14/.atsuo b/embedded/atxmega-a4u-wakeup/.vs/atxmega-a4u-wakeup/v14/.atsuo
index 6c0cf447deec825e592e26bdf5fecb278f762af2..51ddd42b4eefcc47e56749b44a00db5c81469c18 100644
Binary files a/embedded/atxmega-a4u-wakeup/.vs/atxmega-a4u-wakeup/v14/.atsuo and b/embedded/atxmega-a4u-wakeup/.vs/atxmega-a4u-wakeup/v14/.atsuo differ
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.elf b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.elf
index fcef40a505c89f9767e76b8f309b58b75ae77038..89887a1997380b99591a908483561754bd7a01da 100644
Binary files a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.elf and b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.elf differ
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex
index a0e361c49626498dce43eaf14486bf23b909b538..873308464897f825e40693e95528309733321e2d 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex
@@ -4,8 +4,8 @@
 :100030000C9424010C9424010C9424010C942401AC
 :100040000C9424010C9424010C9424010C9424019C
 :100050000C9424010C9424010C9424010C9424018C
-:100060000C9424010C9424010C9424010C9424017C
-:100070000C9482010C94B9010C9424010C94240179
+:100060000C9424010C94AA010C94E1010C94240139
+:100070000C9418020C944F020C9424010C9424014B
 :100080000C9424010C9424010C9424010C9424015C
 :100090000C9424010C9424010C9424010C9424014C
 :1000A0000C9424010C9424010C9424010C9424013C
@@ -20,8 +20,8 @@
 :100130000C9424010C9424010C9424010C942401AB
 :100140000C9424010C9424010C9424010C9424019B
 :100150000C9424010C9424010C9424010C9424018B
-:100160000C94F0010C9427020C9424010C942401AB
-:100170000C9424010C9424010C9424010C9424016B
+:100160000C9486020C94BD020C9424010C9424017E
+:100170000C94F4020C9424010C9424010C9424019A
 :100180000C9424010C9424010C9424010C9424015B
 :100190000C9424010C9424010C9424010C9424014B
 :1001A0000C9424010C9424010C9424010C9424013B
@@ -31,126 +31,153 @@
 :1001E0000C9424010C9424010C9424010C942401FB
 :1001F0000C9424010C9424010C94240111241FBE9E
 :10020000CFEFCDBFDFE3DEBF00E00CBF18BE19BEED
-:100210001ABE1BBE20E2A6E0B0E201C01D92AE30C5
-:10022000B207E1F710E2A0E0B0E2E6E9F9E000E0B1
-:100230000BBF02C007900D92A630B107D9F71BBEC5
-:100240000E9432010C94C9040C940000E0EAF0E032
-:1002500082818FEF82830895E0EAF0E082818760F7
-:1002600082830895E0E5F0E088E1858380E1808382
-:10027000818184FFFDCF88ED84BF84E080934000BE
-:1002800000E220E840E460E476E080EB98E00E9441
-:10029000CA0280930620909307200E94000300E189
-:1002A00028E044E060E676E080EA99E00E94CA0235
-:1002B00080930820909309200E94000380E180939E
-:1002C0004106E0EAF0E0828187608283789400E46E
-:1002D00016E0C0E10E942601E0910620F09107207F
-:1002E0008585882351F0CF010E944503682F8091B6
-:1002F0000820909109200E949A03F801C7830E9468
-:100300002C01E8CF1F920F920FB60F92112408B65E
-:100310000F9218BE09B60F9219BE0BB60F921BBEF4
-:100320002F933F934F935F936F937F938F939F93FD
-:10033000AF93BF93EF93FF93809106209091072096
-:100340000E943603FF91EF91BF91AF919F918F91E2
-:100350007F916F915F914F913F912F910F900BBEC5
-:100360000F9009BE0F9008BE0F900FBE0F901F9008
-:1003700018951F920F920FB60F92112408B60F9284
-:1003800018BE09B60F9219BE0BB60F921BBE2F9363
-:100390003F934F935F936F937F938F939F93AF930D
-:1003A000BF93EF93FF9380910620909107200E94C6
-:1003B0007903FF91EF91BF91AF919F918F917F91C1
-:1003C0006F915F914F913F912F910F900BBE0F90C6
-:1003D00009BE0F9008BE0F900FBE0F901F9018958A
-:1003E0001F920F920FB60F92112408B60F9218BEEB
-:1003F00009B60F9219BE0BB60F921BBE2F933F93F7
-:100400004F935F936F937F938F939F93AF93BF931C
-:10041000EF93FF9380910820909109200E9436036A
-:10042000FF91EF91BF91AF919F918F917F916F91CC
-:100430005F914F913F912F910F900BBE0F9009BE8E
-:100440000F9008BE0F900FBE0F901F9018951F922F
-:100450000F920FB60F92112408B60F9218BE09B66C
-:100460000F9219BE0BB60F921BBE2F933F934F9363
-:100470005F936F937F938F939F93AF93BF93EF930C
-:10048000FF9380910820909109200E947903FF91A9
-:10049000EF91BF91AF919F918F917F916F915F91FC
-:1004A0004F913F912F910F900BBE0F9009BE0F906F
-:1004B00008BE0F900FBE0F901F901895CF92DF923D
-:1004C000EF92FF92CF93DF936B017C0188E090E085
-:1004D0000E94A803EC01892BD1F0D701C601019637
-:1004E000A11DB11D8C839D83AE83BF830E94A80391
-:1004F00088839983892B29F01A821B828C2F9D2F48
-:1005000008C0CE010E94400480E090E002C080E07C
-:1005100090E0DF91CF91FF90EF90DF90CF90089522
-:10052000FC018281A081B181A80FB11D6C93428131
-:100530004F5F428350E060E070E084819581A68146
-:10054000B7810197A109B109481759076A077B07C5
-:1005500008F0128208950F931F93FC014381A0813C
-:10056000B181A40FB11D8C914F5F438350E060E0D7
-:1005700070E004811581268137810150110921091C
-:100580003109401751076207730708F013821F9162
-:100590000F910895AF92BF92CF92DF92FF920F9387
-:1005A0001F93CF93DF935C016B01F42E122F8EE02B
-:1005B00090E00E94A803EC01A882B982CA82DB8283
-:1005C000FC821D830E8360E170E080E090E00E9479
-:1005D0005E028F83988760E170E080E090E00E9487
-:1005E0005E0289879A871C861D86CE01DF91CF9196
-:1005F0001F910F91FF90DF90CF90BF90AF90089523
-:10060000FC01A081B1818BE916968C93A081B18108
-:1006100017961C92A081B18113968C9113978061DB
-:1006200013968C93A081B18188E114968C93A0815C
-:10063000B18183E015968C93A281B3818581159653
-:100640008C93A281B381858111968C93A281B38111
-:10065000848112968C93A281B381848116968C93A7
-:10066000A281B381868111968C930895CF93DF93F5
-:10067000EC01E881F98160818F8198850E94900268
-:1006800081E08D87DF91CF910895CF93DF93EC01C7
-:100690008F8198850E94AB02EF81F885238192813A
-:1006A000291302C01D8602C091E09D87DF91CF9182
-:1006B0000895FC016487662371F0A081B1811396CF
-:1006C0008C911397816013968C93A281B38186815C
-:1006D00015968C930895A081B18113968C911397F0
-:1006E0008C7F13968C93A281B381868116968C930E
-:1006F00008950F931F93CF93DF93EC010881198125
-:1007000089859A850E94AB02F8018083E985FA8584
-:1007100093818281981305C060E0CE010E94590345
-:1007200004C061E0CE010E945903DF91CF911F9177
-:100730000F910895CF93DF93EC0189859A850E94EC
-:10074000900261E0CE010E945903DF91CF9108959C
-:100750000F931F93CF93DF938230910510F482E0C3
-:1007600090E0E0910C20F0910D2020E030E0A0E03E
-:10077000B0E0309719F1408151810281138148170F
-:100780005907C8F08417950769F4109731F012964D
-:100790000C93129713961C9327C000930C20109370
-:1007A0000D2022C02115310519F04217530718F406
-:1007B0009A01BD01EF01DF01F801DBCF2115310501
-:1007C000F9F0281B390B2430310580F48A819B8194
-:1007D0006115710521F0FB018283938304C080932E
-:1007E0000C2090930D20FE01329644C0FE01E20FD2
-:1007F000F31F8193919322503109288339833AC0A2
-:1008000020910A2030910B20232B41F420910220CB
-:100810003091032020930A2030930B202091002058
-:10082000309101202115310541F42DB73EB740919B
-:10083000042050910520241B350BE0910A20F091F3
-:100840000B20E217F307A0F42E1B3F0B28173907E4
-:1008500078F0AC014E5F5F4F2417350748F04E0F1C
-:100860005F1F40930A2050930B208193919302C005
-:10087000E0E0F0E0CF01DF91CF911F910F9108955B
-:10088000CF93DF93009709F481C0FC013297128265
-:100890001382A0910C20B0910D20109781F420813B
-:1008A0003181820F931F20910A2030910B2028174D
-:1008B000390751F5E0930A20F0930B2067C0ED0152
-:1008C00020E030E0CE17DF0740F44A815B819E01D3
-:1008D00041155105F1F0EA01F5CFC283D383408180
-:1008E0005181840F951FC817D90759F488819981C0
-:1008F000840F951F0296808391838A819B818283D6
-:1009000093832115310529F4E0930C20F0930D20F9
-:100910003DC0E901EA83FB8349915991C40FD51F7A
-:10092000EC17FD0761F480819181840F951F029679
-:10093000E90188839983828193818A839B83E0E0A4
-:10094000F0E012968D919C911397009719F0FD019C
-:10095000DC01F7CF8D919C9111979D012E5F3F4F48
-:10096000820F931F20910A2030910B2028173907FE
-:1009700069F4309729F410920C2010920D2002C0D7
-:1009800012821382A0930A20B0930B20DF91CF91A3
-:060990000895F894FFCF6A
-:0609960000000E2020000D
+:100210001ABE1BBE10E2A0E0B0E2EEE4FBE000E09C
+:100220000BBF02C007900D92A630B107D9F71BBED5
+:1002300020E2A6E0B0E201C01D92A231B207E1F7D0
+:100240000E9426010C94A5050C940000E0E5F0E066
+:1002500088E1858380E18083818184FFFDCF88ED03
+:1002600084BF84E08093400000E128E044E060E443
+:1002700076E080EA98E00E949803809308209093AB
+:1002800009200E94CF0300E220E840E460E476E029
+:1002900080EB98E00E9498038093062090930720BB
+:1002A0000E94CF0300E128E044E060E676E080EAC7
+:1002B00099E00E94980380930C2090930D200E9457
+:1002C000CF0300E220E840E460E676E080EB99E0CE
+:1002D0000E94980380930A2090930B200E94CF03E2
+:1002E000E0EAF0E082818760828378948091082040
+:1002F000909109200E94050480910C2090910D207E
+:100300000E9405042FE78AE196E02150804090404A
+:10031000E1F700C00000EACFCF93DF931F92CDB783
+:10032000DEB7BE016F5F7F4F0E9437046981809105
+:100330000A2090910B200E9476042FE78AE196E034
+:10034000215080409040E1F700C000000F90DF9105
+:10035000CF9108951F920F920FB60F92112408B6F5
+:100360000F9218BE09B60F9219BE0BB60F921BBEA4
+:100370002F933F934F935F936F937F938F939F93AD
+:10038000AF93BF93EF93FF93809108209091092042
+:100390000E940E04FF91EF91BF91AF919F918F91B9
+:1003A0007F916F915F914F913F912F910F900BBE75
+:1003B0000F9009BE0F9008BE0F900FBE0F901F90B8
+:1003C00018951F920F920FB60F92112408B60F9234
+:1003D00018BE09B60F9219BE0BB60F921BBE2F9313
+:1003E0003F934F935F936F937F938F939F93AF93BD
+:1003F000BF93EF93FF9380910820909109200E9472
+:100400005604FF91EF91BF91AF919F918F917F9192
+:100410006F915F914F913F912F910F900BBE0F9075
+:1004200009BE0F9008BE0F900FBE0F901F90189539
+:100430001F920F920FB60F92112408B60F9218BE9A
+:1004400009B60F9219BE0BB60F921BBE2F933F93A6
+:100450004F935F936F937F938F939F93AF93BF93CC
+:10046000EF93FF9380910620909107200E940E0445
+:10047000FF91EF91BF91AF919F918F917F916F917C
+:100480005F914F913F912F910F900BBE0F9009BE3E
+:100490000F9008BE0F900FBE0F901F9018951F92DF
+:1004A0000F920FB60F92112408B60F9218BE09B61C
+:1004B0000F9219BE0BB60F921BBE2F933F934F9313
+:1004C0005F936F937F938F939F93AF93BF93EF93BC
+:1004D000FF9380910620909107200E945604FF917F
+:1004E000EF91BF91AF919F918F917F916F915F91AC
+:1004F0004F913F912F910F900BBE0F9009BE0F901F
+:1005000008BE0F900FBE0F901F9018951F920F926C
+:100510000FB60F92112408B60F9218BE09B60F92AB
+:1005200019BE0BB60F921BBE2F933F934F935F9351
+:100530006F937F938F939F93AF93BF93EF93FF93AB
+:1005400080910C2090910D200E940E04FF91EF915C
+:10055000BF91AF919F918F917F916F915F914F91DB
+:100560003F912F910F900BBE0F9009BE0F9008BEC8
+:100570000F900FBE0F901F9018951F920F920FB6FD
+:100580000F92112408B60F9218BE09B60F9219BE29
+:100590000BB60F921BBE2F933F934F935F936F93B6
+:1005A0007F938F939F93AF93BF93EF93FF9380912C
+:1005B0000C2090910D200E945604FF91EF91BF9165
+:1005C000AF919F918F917F916F915F914F913F91EB
+:1005D0002F910F900BBE0F9009BE0F9008BE0F9089
+:1005E0000FBE0F901F9018951F920F920FB60F928B
+:1005F000112408B60F9218BE09B60F9219BE0BB699
+:100600000F921BBE2F933F934F935F936F937F93F4
+:100610008F939F93AF93BF93EF93FF9380910A20A3
+:1006200090910B200E945604FF91EF91BF91AF91E2
+:100630009F918F917F916F915F914F913F912F91FA
+:100640000F900BBE0F9009BE0F9008BE0F900FBE0B
+:100650000F901F901895CF92DF92EF92FF92CF9359
+:10066000DF936B017C0188E090E00E948404EC0140
+:10067000892BD1F0D701C6010196A11DB11D8C8334
+:100680009D83AE83BF830E94840488839983892BD2
+:1006900029F01A821B828C2F9D2F08C0CE010E9448
+:1006A0001C0580E090E002C080E090E0DF91CF91F7
+:1006B000FF90EF90DF90CF900895FC018281A081A0
+:1006C000B181A80FB11D6C9342814F5F428350E00E
+:1006D00060E070E084819581A681B7814817590751
+:1006E0006A077B0708F0128208950F931F93FC019D
+:1006F0004381A081B181A40FB11D8C914F5F4383D1
+:1007000050E060E070E00481158126813781401758
+:1007100051076207730708F013821F910F91089524
+:10072000FC0181E023819281291301C080E00895BA
+:10073000AF92BF92CF92DF92FF920F931F93CF930E
+:10074000DF935C016B01F42E122F8EE090E00E948B
+:100750008404EC01A882B982CA82DB82FC821D83F8
+:100760000E8360E170E080E090E00E942B038F83B5
+:10077000988760E170E080E090E00E942B03898719
+:100780009A871B861C861D86CE01DF91CF911F9113
+:100790000F91FF90DF90CF90BF90AF900895FC0134
+:1007A000A081B1818BE916968C93A081B1811796B7
+:1007B0001C92A081B18113968C911397806113963E
+:1007C0008C93A081B18188E114968C93A081B18132
+:1007D00083E015968C93A281B381858115968C93C5
+:1007E000A281B381858111968C93A281B38184818A
+:1007F00012968C93A281B381848116968C93A281E8
+:10080000B381868111968C930895DC011296ED9147
+:10081000FC91139716968C9187830895CF93DF935D
+:10082000EC01EA81FB818E818783E881F9819081E7
+:100830008D85882319F0813031F011C09E3779F40D
+:1008400081E08D870CC09E3729F41D86CE010E9461
+:100850008C0105C060818F8198850E945D038C8525
+:10086000813011F081E08C87DF91CF91089581E58F
+:10087000FB01808380E00895FC0183858617A9F041
+:10088000662351F0A081B18113968C9113978160FA
+:1008900013968C9363870895A081B18113968C91F0
+:1008A00013978C7F13968C93138608950F931F9341
+:1008B000CF93DF93EC01EA81FB818E8187830881EE
+:1008C000198189859A850E947503F801808389853D
+:1008D0009A850E949003811104C060E0CE010E94BD
+:1008E0003C04DF91CF911F910F910895CF93DF9337
+:1008F000EC0189859A850E945D0361E0CE010E942A
+:100900003C04DF91CF9108950F931F93CF93DF9312
+:100910008230910510F482E090E0E0911020F09197
+:10092000112020E030E0A0E0B0E0309719F14081E4
+:1009300051810281138148175907C8F08417950720
+:1009400069F4109731F012960C93129713961C933A
+:1009500027C0009310201093112022C021153105CB
+:1009600019F04217530718F49A01BD01EF01DF0196
+:10097000F801DBCF21153105F9F0281B390B2430A4
+:10098000310580F48A819B816115710521F0FB019D
+:100990008283938304C08093102090931120FE01E2
+:1009A000329644C0FE01E20FF31F819391932250CF
+:1009B0003109288339833AC020910E2030910F20CD
+:1009C000232B41F4209102203091032020930E200C
+:1009D00030930F2020910020309101202115310506
+:1009E00041F42DB73EB74091042050910520241BBF
+:1009F000350BE0910E20F0910F20E217F307A0F4E1
+:100A00002E1B3F0B2817390778F0AC014E5F5F4F64
+:100A10002417350748F04E0F5F1F40930E20509368
+:100A20000F208193919302C0E0E0F0E0CF01DF91CD
+:100A3000CF911F910F910895CF93DF93009709F401
+:100A400081C0FC01329712821382A0911020B091D4
+:100A50001120109781F420813181820F931F209102
+:100A60000E2030910F202817390751F5E0930E2002
+:100A7000F0930F2067C0ED0120E030E0CE17DF07D4
+:100A800040F44A815B819E0141155105F1F0EA0174
+:100A9000F5CFC283D38340815181840F951FC8173E
+:100AA000D90759F488819981840F951F0296808314
+:100AB00091838A819B81828393832115310529F457
+:100AC000E0931020F09311203DC0E901EA83FB83FD
+:100AD00049915991C40FD51FEC17FD0761F480812E
+:100AE0009181840F951F0296E90188839983828101
+:100AF00093818A839B83E0E0F0E012968D919C9134
+:100B00001397009719F0FD01DC01F7CF8D919C91AF
+:100B100011979D012E5F3F4F820F931F20910E2052
+:100B200030910F202817390769F4309729F4109273
+:100B300010201092112002C012821382A0930E2066
+:0E0B4000B0930F20DF91CF910895F894FFCF6E
+:060B4E000000122020004F
 :00000001FF
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss
index 08a6f06ae3ad319aa2c53bdf5b8ef00c4e26ed5b..5fbbbe0f4c69961d0beb2089c19ee1cb8da7d02a 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss
@@ -3,31 +3,31 @@ atxmega-a4u-wakeup.elf:     file format elf32-avr
 
 Sections:
 Idx Name          Size      VMA       LMA       File off  Algn
-  0 .text         00000996  00000000  00000000  00000094  2**1
+  0 .text         00000b4e  00000000  00000000  00000094  2**1
                   CONTENTS, ALLOC, LOAD, READONLY, CODE
-  1 .data         00000006  00802000  00000996  00000a2a  2**0
+  1 .data         00000006  00802000  00000b4e  00000be2  2**0
                   CONTENTS, ALLOC, LOAD, DATA
-  2 .bss          00000008  00802006  00802006  00000a30  2**0
+  2 .bss          0000000c  00802006  00802006  00000be8  2**0
                   ALLOC
-  3 .comment      00000030  00000000  00000000  00000a30  2**0
+  3 .comment      00000030  00000000  00000000  00000be8  2**0
                   CONTENTS, READONLY
-  4 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000a60  2**2
+  4 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000c18  2**2
                   CONTENTS, READONLY
-  5 .debug_aranges 00000110  00000000  00000000  00000aa0  2**0
+  5 .debug_aranges 00000138  00000000  00000000  00000c58  2**0
                   CONTENTS, READONLY, DEBUGGING
-  6 .debug_info   00003e75  00000000  00000000  00000bb0  2**0
+  6 .debug_info   00004072  00000000  00000000  00000d90  2**0
                   CONTENTS, READONLY, DEBUGGING
-  7 .debug_abbrev 00002bca  00000000  00000000  00004a25  2**0
+  7 .debug_abbrev 00002c94  00000000  00000000  00004e02  2**0
                   CONTENTS, READONLY, DEBUGGING
-  8 .debug_line   00000b13  00000000  00000000  000075ef  2**0
+  8 .debug_line   00000c49  00000000  00000000  00007a96  2**0
                   CONTENTS, READONLY, DEBUGGING
-  9 .debug_frame  0000038c  00000000  00000000  00008104  2**2
+  9 .debug_frame  000004b8  00000000  00000000  000086e0  2**2
                   CONTENTS, READONLY, DEBUGGING
- 10 .debug_str    00002311  00000000  00000000  00008490  2**0
+ 10 .debug_str    000023a2  00000000  00000000  00008b98  2**0
                   CONTENTS, READONLY, DEBUGGING
- 11 .debug_loc    00000b72  00000000  00000000  0000a7a1  2**0
+ 11 .debug_loc    00000d9c  00000000  00000000  0000af3a  2**0
                   CONTENTS, READONLY, DEBUGGING
- 12 .debug_ranges 000000e0  00000000  00000000  0000b313  2**0
+ 12 .debug_ranges 00000108  00000000  00000000  0000bcd6  2**0
                   CONTENTS, READONLY, DEBUGGING
 
 Disassembly of section .text:
@@ -58,11 +58,11 @@ Disassembly of section .text:
   58:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
   5c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
   60:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
-  64:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
-  68:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
+  64:	0c 94 aa 01 	jmp	0x354	; 0x354 <__vector_25>
+  68:	0c 94 e1 01 	jmp	0x3c2	; 0x3c2 <__vector_26>
   6c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
-  70:	0c 94 82 01 	jmp	0x304	; 0x304 <__vector_28>
-  74:	0c 94 b9 01 	jmp	0x372	; 0x372 <__vector_29>
+  70:	0c 94 18 02 	jmp	0x430	; 0x430 <__vector_28>
+  74:	0c 94 4f 02 	jmp	0x49e	; 0x49e <__vector_29>
   78:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
   7c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
   80:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
@@ -121,11 +121,11 @@ Disassembly of section .text:
  154:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  158:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  15c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
- 160:	0c 94 f0 01 	jmp	0x3e0	; 0x3e0 <__vector_88>
- 164:	0c 94 27 02 	jmp	0x44e	; 0x44e <__vector_89>
+ 160:	0c 94 86 02 	jmp	0x50c	; 0x50c <__vector_88>
+ 164:	0c 94 bd 02 	jmp	0x57a	; 0x57a <__vector_89>
  168:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  16c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
- 170:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
+ 170:	0c 94 f4 02 	jmp	0x5e8	; 0x5e8 <__vector_92>
  174:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  178:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  17c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
@@ -175,1046 +175,1239 @@ Disassembly of section .text:
  210:	1a be       	out	0x3a, r1	; 58
  212:	1b be       	out	0x3b, r1	; 59
 
-00000214 <__do_clear_bss>:
- 214:	20 e2       	ldi	r18, 0x20	; 32
- 216:	a6 e0       	ldi	r26, 0x06	; 6
+00000214 <__do_copy_data>:
+ 214:	10 e2       	ldi	r17, 0x20	; 32
+ 216:	a0 e0       	ldi	r26, 0x00	; 0
  218:	b0 e2       	ldi	r27, 0x20	; 32
- 21a:	01 c0       	rjmp	.+2      	; 0x21e <.do_clear_bss_start>
+ 21a:	ee e4       	ldi	r30, 0x4E	; 78
+ 21c:	fb e0       	ldi	r31, 0x0B	; 11
+ 21e:	00 e0       	ldi	r16, 0x00	; 0
+ 220:	0b bf       	out	0x3b, r16	; 59
+ 222:	02 c0       	rjmp	.+4      	; 0x228 <__do_copy_data+0x14>
+ 224:	07 90       	elpm	r0, Z+
+ 226:	0d 92       	st	X+, r0
+ 228:	a6 30       	cpi	r26, 0x06	; 6
+ 22a:	b1 07       	cpc	r27, r17
+ 22c:	d9 f7       	brne	.-10     	; 0x224 <__do_copy_data+0x10>
+ 22e:	1b be       	out	0x3b, r1	; 59
 
-0000021c <.do_clear_bss_loop>:
- 21c:	1d 92       	st	X+, r1
+00000230 <__do_clear_bss>:
+ 230:	20 e2       	ldi	r18, 0x20	; 32
+ 232:	a6 e0       	ldi	r26, 0x06	; 6
+ 234:	b0 e2       	ldi	r27, 0x20	; 32
+ 236:	01 c0       	rjmp	.+2      	; 0x23a <.do_clear_bss_start>
 
-0000021e <.do_clear_bss_start>:
- 21e:	ae 30       	cpi	r26, 0x0E	; 14
- 220:	b2 07       	cpc	r27, r18
- 222:	e1 f7       	brne	.-8      	; 0x21c <.do_clear_bss_loop>
+00000238 <.do_clear_bss_loop>:
+ 238:	1d 92       	st	X+, r1
 
-00000224 <__do_copy_data>:
- 224:	10 e2       	ldi	r17, 0x20	; 32
- 226:	a0 e0       	ldi	r26, 0x00	; 0
- 228:	b0 e2       	ldi	r27, 0x20	; 32
- 22a:	e6 e9       	ldi	r30, 0x96	; 150
- 22c:	f9 e0       	ldi	r31, 0x09	; 9
- 22e:	00 e0       	ldi	r16, 0x00	; 0
- 230:	0b bf       	out	0x3b, r16	; 59
- 232:	02 c0       	rjmp	.+4      	; 0x238 <__do_copy_data+0x14>
- 234:	07 90       	elpm	r0, Z+
- 236:	0d 92       	st	X+, r0
- 238:	a6 30       	cpi	r26, 0x06	; 6
- 23a:	b1 07       	cpc	r27, r17
- 23c:	d9 f7       	brne	.-10     	; 0x234 <__do_copy_data+0x10>
- 23e:	1b be       	out	0x3b, r1	; 59
- 240:	0e 94 32 01 	call	0x264	; 0x264 <main>
- 244:	0c 94 c9 04 	jmp	0x992	; 0x992 <_exit>
+0000023a <.do_clear_bss_start>:
+ 23a:	a2 31       	cpi	r26, 0x12	; 18
+ 23c:	b2 07       	cpc	r27, r18
+ 23e:	e1 f7       	brne	.-8      	; 0x238 <.do_clear_bss_loop>
+ 240:	0e 94 26 01 	call	0x24c	; 0x24c <main>
+ 244:	0c 94 a5 05 	jmp	0xb4a	; 0xb4a <_exit>
 
 00000248 <__bad_interrupt>:
  248:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>
 
-0000024c <nointerrupts>:
-	tp_write(tp, 75);
-	tp_write(tp, 69);
-	tp_write(tp, 84);
-	tp_write(tp, 38);
-	tp_write(tp, 0x0A); // write wakes up txdref
+0000024c <main>:
+	tp_txISR(tp3);
+}
+
+IRS(USARTD1_RXC_vect){
+	tp_rxISR(tp4);
 }
- 24c:	e0 ea       	ldi	r30, 0xA0	; 160
+ 24c:	e0 e5       	ldi	r30, 0x50	; 80
  24e:	f0 e0       	ldi	r31, 0x00	; 0
- 250:	82 81       	ldd	r24, Z+2	; 0x02
- 252:	8f ef       	ldi	r24, 0xFF	; 255
- 254:	82 83       	std	Z+2, r24	; 0x02
- 256:	08 95       	ret
+ 250:	88 e1       	ldi	r24, 0x18	; 24
+ 252:	85 83       	std	Z+5, r24	; 0x05
+ 254:	80 e1       	ldi	r24, 0x10	; 16
+ 256:	80 83       	st	Z, r24
+ 258:	81 81       	ldd	r24, Z+1	; 0x01
+ 25a:	84 ff       	sbrs	r24, 4
+ 25c:	fd cf       	rjmp	.-6      	; 0x258 <main+0xc>
+ 25e:	88 ed       	ldi	r24, 0xD8	; 216
+ 260:	84 bf       	out	0x34, r24	; 52
+ 262:	84 e0       	ldi	r24, 0x04	; 4
+ 264:	80 93 40 00 	sts	0x0040, r24	; 0x800040 <__TEXT_REGION_LENGTH__+0x700040>
+ 268:	00 e1       	ldi	r16, 0x10	; 16
+ 26a:	28 e0       	ldi	r18, 0x08	; 8
+ 26c:	44 e0       	ldi	r20, 0x04	; 4
+ 26e:	60 e4       	ldi	r22, 0x40	; 64
+ 270:	76 e0       	ldi	r23, 0x06	; 6
+ 272:	80 ea       	ldi	r24, 0xA0	; 160
+ 274:	98 e0       	ldi	r25, 0x08	; 8
+ 276:	0e 94 98 03 	call	0x730	; 0x730 <tp_new>
+ 27a:	80 93 08 20 	sts	0x2008, r24	; 0x802008 <tp1>
+ 27e:	90 93 09 20 	sts	0x2009, r25	; 0x802009 <tp1+0x1>
+ 282:	0e 94 cf 03 	call	0x79e	; 0x79e <tp_init>
+ 286:	00 e2       	ldi	r16, 0x20	; 32
+ 288:	20 e8       	ldi	r18, 0x80	; 128
+ 28a:	40 e4       	ldi	r20, 0x40	; 64
+ 28c:	60 e4       	ldi	r22, 0x40	; 64
+ 28e:	76 e0       	ldi	r23, 0x06	; 6
+ 290:	80 eb       	ldi	r24, 0xB0	; 176
+ 292:	98 e0       	ldi	r25, 0x08	; 8
+ 294:	0e 94 98 03 	call	0x730	; 0x730 <tp_new>
+ 298:	80 93 06 20 	sts	0x2006, r24	; 0x802006 <__data_end>
+ 29c:	90 93 07 20 	sts	0x2007, r25	; 0x802007 <__data_end+0x1>
+ 2a0:	0e 94 cf 03 	call	0x79e	; 0x79e <tp_init>
+ 2a4:	00 e1       	ldi	r16, 0x10	; 16
+ 2a6:	28 e0       	ldi	r18, 0x08	; 8
+ 2a8:	44 e0       	ldi	r20, 0x04	; 4
+ 2aa:	60 e6       	ldi	r22, 0x60	; 96
+ 2ac:	76 e0       	ldi	r23, 0x06	; 6
+ 2ae:	80 ea       	ldi	r24, 0xA0	; 160
+ 2b0:	99 e0       	ldi	r25, 0x09	; 9
+ 2b2:	0e 94 98 03 	call	0x730	; 0x730 <tp_new>
+ 2b6:	80 93 0c 20 	sts	0x200C, r24	; 0x80200c <tp3>
+ 2ba:	90 93 0d 20 	sts	0x200D, r25	; 0x80200d <tp3+0x1>
+ 2be:	0e 94 cf 03 	call	0x79e	; 0x79e <tp_init>
+ 2c2:	00 e2       	ldi	r16, 0x20	; 32
+ 2c4:	20 e8       	ldi	r18, 0x80	; 128
+ 2c6:	40 e4       	ldi	r20, 0x40	; 64
+ 2c8:	60 e6       	ldi	r22, 0x60	; 96
+ 2ca:	76 e0       	ldi	r23, 0x06	; 6
+ 2cc:	80 eb       	ldi	r24, 0xB0	; 176
+ 2ce:	99 e0       	ldi	r25, 0x09	; 9
+ 2d0:	0e 94 98 03 	call	0x730	; 0x730 <tp_new>
+ 2d4:	80 93 0a 20 	sts	0x200A, r24	; 0x80200a <tp4>
+ 2d8:	90 93 0b 20 	sts	0x200B, r25	; 0x80200b <tp4+0x1>
+ 2dc:	0e 94 cf 03 	call	0x79e	; 0x79e <tp_init>
+ 2e0:	e0 ea       	ldi	r30, 0xA0	; 160
+ 2e2:	f0 e0       	ldi	r31, 0x00	; 0
+ 2e4:	82 81       	ldd	r24, Z+2	; 0x02
+ 2e6:	87 60       	ori	r24, 0x07	; 7
+ 2e8:	82 83       	std	Z+2, r24	; 0x02
+ 2ea:	78 94       	sei
+ 2ec:	80 91 08 20 	lds	r24, 0x2008	; 0x802008 <tp1>
+ 2f0:	90 91 09 20 	lds	r25, 0x2009	; 0x802009 <tp1+0x1>
+ 2f4:	0e 94 05 04 	call	0x80a	; 0x80a <tp_statflash>
+ 2f8:	80 91 0c 20 	lds	r24, 0x200C	; 0x80200c <tp3>
+ 2fc:	90 91 0d 20 	lds	r25, 0x200D	; 0x80200d <tp3+0x1>
+ 300:	0e 94 05 04 	call	0x80a	; 0x80a <tp_statflash>
+ 304:	2f e7       	ldi	r18, 0x7F	; 127
+ 306:	8a e1       	ldi	r24, 0x1A	; 26
+ 308:	96 e0       	ldi	r25, 0x06	; 6
+ 30a:	21 50       	subi	r18, 0x01	; 1
+ 30c:	80 40       	sbci	r24, 0x00	; 0
+ 30e:	90 40       	sbci	r25, 0x00	; 0
+ 310:	e1 f7       	brne	.-8      	; 0x30a <main+0xbe>
+ 312:	00 c0       	rjmp	.+0      	; 0x314 <main+0xc8>
+ 314:	00 00       	nop
+ 316:	ea cf       	rjmp	.-44     	; 0x2ec <main+0xa0>
 
-00000258 <interrupts>:
- 258:	e0 ea       	ldi	r30, 0xA0	; 160
- 25a:	f0 e0       	ldi	r31, 0x00	; 0
- 25c:	82 81       	ldd	r24, Z+2	; 0x02
- 25e:	87 60       	ori	r24, 0x07	; 7
- 260:	82 83       	std	Z+2, r24	; 0x02
- 262:	08 95       	ret
+00000318 <handoff>:
+ 318:	cf 93       	push	r28
+ 31a:	df 93       	push	r29
+ 31c:	1f 92       	push	r1
+ 31e:	cd b7       	in	r28, 0x3d	; 61
+ 320:	de b7       	in	r29, 0x3e	; 62
+ 322:	be 01       	movw	r22, r28
+ 324:	6f 5f       	subi	r22, 0xFF	; 255
+ 326:	7f 4f       	sbci	r23, 0xFF	; 255
+ 328:	0e 94 37 04 	call	0x86e	; 0x86e <tp_read>
+ 32c:	69 81       	ldd	r22, Y+1	; 0x01
+ 32e:	80 91 0a 20 	lds	r24, 0x200A	; 0x80200a <tp4>
+ 332:	90 91 0b 20 	lds	r25, 0x200B	; 0x80200b <tp4+0x1>
+ 336:	0e 94 76 04 	call	0x8ec	; 0x8ec <tp_write>
+ 33a:	2f e7       	ldi	r18, 0x7F	; 127
+ 33c:	8a e1       	ldi	r24, 0x1A	; 26
+ 33e:	96 e0       	ldi	r25, 0x06	; 6
+ 340:	21 50       	subi	r18, 0x01	; 1
+ 342:	80 40       	sbci	r24, 0x00	; 0
+ 344:	90 40       	sbci	r25, 0x00	; 0
+ 346:	e1 f7       	brne	.-8      	; 0x340 <handoff+0x28>
+ 348:	00 c0       	rjmp	.+0      	; 0x34a <handoff+0x32>
+ 34a:	00 00       	nop
+ 34c:	0f 90       	pop	r0
+ 34e:	df 91       	pop	r29
+ 350:	cf 91       	pop	r28
+ 352:	08 95       	ret
 
-00000264 <main>:
- 264:	e0 e5       	ldi	r30, 0x50	; 80
- 266:	f0 e0       	ldi	r31, 0x00	; 0
- 268:	88 e1       	ldi	r24, 0x18	; 24
- 26a:	85 83       	std	Z+5, r24	; 0x05
- 26c:	80 e1       	ldi	r24, 0x10	; 16
- 26e:	80 83       	st	Z, r24
- 270:	81 81       	ldd	r24, Z+1	; 0x01
- 272:	84 ff       	sbrs	r24, 4
- 274:	fd cf       	rjmp	.-6      	; 0x270 <main+0xc>
- 276:	88 ed       	ldi	r24, 0xD8	; 216
- 278:	84 bf       	out	0x34, r24	; 52
- 27a:	84 e0       	ldi	r24, 0x04	; 4
- 27c:	80 93 40 00 	sts	0x0040, r24	; 0x800040 <__TEXT_REGION_LENGTH__+0x700040>
- 280:	00 e2       	ldi	r16, 0x20	; 32
- 282:	20 e8       	ldi	r18, 0x80	; 128
- 284:	40 e4       	ldi	r20, 0x40	; 64
- 286:	60 e4       	ldi	r22, 0x40	; 64
- 288:	76 e0       	ldi	r23, 0x06	; 6
- 28a:	80 eb       	ldi	r24, 0xB0	; 176
- 28c:	98 e0       	ldi	r25, 0x08	; 8
- 28e:	0e 94 ca 02 	call	0x594	; 0x594 <tp_new>
- 292:	80 93 06 20 	sts	0x2006, r24	; 0x802006 <__data_end>
- 296:	90 93 07 20 	sts	0x2007, r25	; 0x802007 <__data_end+0x1>
- 29a:	0e 94 00 03 	call	0x600	; 0x600 <tp_init>
- 29e:	00 e1       	ldi	r16, 0x10	; 16
- 2a0:	28 e0       	ldi	r18, 0x08	; 8
- 2a2:	44 e0       	ldi	r20, 0x04	; 4
- 2a4:	60 e6       	ldi	r22, 0x60	; 96
- 2a6:	76 e0       	ldi	r23, 0x06	; 6
- 2a8:	80 ea       	ldi	r24, 0xA0	; 160
- 2aa:	99 e0       	ldi	r25, 0x09	; 9
- 2ac:	0e 94 ca 02 	call	0x594	; 0x594 <tp_new>
- 2b0:	80 93 08 20 	sts	0x2008, r24	; 0x802008 <tp3>
- 2b4:	90 93 09 20 	sts	0x2009, r25	; 0x802009 <tp3+0x1>
- 2b8:	0e 94 00 03 	call	0x600	; 0x600 <tp_init>
- 2bc:	80 e1       	ldi	r24, 0x10	; 16
- 2be:	80 93 41 06 	sts	0x0641, r24	; 0x800641 <__TEXT_REGION_LENGTH__+0x700641>
- 2c2:	e0 ea       	ldi	r30, 0xA0	; 160
- 2c4:	f0 e0       	ldi	r31, 0x00	; 0
- 2c6:	82 81       	ldd	r24, Z+2	; 0x02
- 2c8:	87 60       	ori	r24, 0x07	; 7
- 2ca:	82 83       	std	Z+2, r24	; 0x02
- 2cc:	78 94       	sei
- 2ce:	00 e4       	ldi	r16, 0x40	; 64
- 2d0:	16 e0       	ldi	r17, 0x06	; 6
- 2d2:	c0 e1       	ldi	r28, 0x10	; 16
- 2d4:	0e 94 26 01 	call	0x24c	; 0x24c <nointerrupts>
- 2d8:	e0 91 06 20 	lds	r30, 0x2006	; 0x802006 <__data_end>
- 2dc:	f0 91 07 20 	lds	r31, 0x2007	; 0x802007 <__data_end+0x1>
- 2e0:	85 85       	ldd	r24, Z+13	; 0x0d
- 2e2:	88 23       	and	r24, r24
- 2e4:	51 f0       	breq	.+20     	; 0x2fa <main+0x96>
- 2e6:	cf 01       	movw	r24, r30
- 2e8:	0e 94 45 03 	call	0x68a	; 0x68a <tp_read>
- 2ec:	68 2f       	mov	r22, r24
- 2ee:	80 91 08 20 	lds	r24, 0x2008	; 0x802008 <tp3>
- 2f2:	90 91 09 20 	lds	r25, 0x2009	; 0x802009 <tp3+0x1>
- 2f6:	0e 94 9a 03 	call	0x734	; 0x734 <tp_write>
- 2fa:	f8 01       	movw	r30, r16
- 2fc:	c7 83       	std	Z+7, r28	; 0x07
- 2fe:	0e 94 2c 01 	call	0x258	; 0x258 <interrupts>
- 302:	e8 cf       	rjmp	.-48     	; 0x2d4 <main+0x70>
+00000354 <__vector_25>:
+ 354:	1f 92       	push	r1
+ 356:	0f 92       	push	r0
+ 358:	0f b6       	in	r0, 0x3f	; 63
+ 35a:	0f 92       	push	r0
+ 35c:	11 24       	eor	r1, r1
+ 35e:	08 b6       	in	r0, 0x38	; 56
+ 360:	0f 92       	push	r0
+ 362:	18 be       	out	0x38, r1	; 56
+ 364:	09 b6       	in	r0, 0x39	; 57
+ 366:	0f 92       	push	r0
+ 368:	19 be       	out	0x39, r1	; 57
+ 36a:	0b b6       	in	r0, 0x3b	; 59
+ 36c:	0f 92       	push	r0
+ 36e:	1b be       	out	0x3b, r1	; 59
+ 370:	2f 93       	push	r18
+ 372:	3f 93       	push	r19
+ 374:	4f 93       	push	r20
+ 376:	5f 93       	push	r21
+ 378:	6f 93       	push	r22
+ 37a:	7f 93       	push	r23
+ 37c:	8f 93       	push	r24
+ 37e:	9f 93       	push	r25
+ 380:	af 93       	push	r26
+ 382:	bf 93       	push	r27
+ 384:	ef 93       	push	r30
+ 386:	ff 93       	push	r31
+ 388:	80 91 08 20 	lds	r24, 0x2008	; 0x802008 <tp1>
+ 38c:	90 91 09 20 	lds	r25, 0x2009	; 0x802009 <tp1+0x1>
+ 390:	0e 94 0e 04 	call	0x81c	; 0x81c <tp_rxISR>
+ 394:	ff 91       	pop	r31
+ 396:	ef 91       	pop	r30
+ 398:	bf 91       	pop	r27
+ 39a:	af 91       	pop	r26
+ 39c:	9f 91       	pop	r25
+ 39e:	8f 91       	pop	r24
+ 3a0:	7f 91       	pop	r23
+ 3a2:	6f 91       	pop	r22
+ 3a4:	5f 91       	pop	r21
+ 3a6:	4f 91       	pop	r20
+ 3a8:	3f 91       	pop	r19
+ 3aa:	2f 91       	pop	r18
+ 3ac:	0f 90       	pop	r0
+ 3ae:	0b be       	out	0x3b, r0	; 59
+ 3b0:	0f 90       	pop	r0
+ 3b2:	09 be       	out	0x39, r0	; 57
+ 3b4:	0f 90       	pop	r0
+ 3b6:	08 be       	out	0x38, r0	; 56
+ 3b8:	0f 90       	pop	r0
+ 3ba:	0f be       	out	0x3f, r0	; 63
+ 3bc:	0f 90       	pop	r0
+ 3be:	1f 90       	pop	r1
+ 3c0:	18 95       	reti
 
-00000304 <__vector_28>:
+000003c2 <__vector_26>:
+ 3c2:	1f 92       	push	r1
+ 3c4:	0f 92       	push	r0
+ 3c6:	0f b6       	in	r0, 0x3f	; 63
+ 3c8:	0f 92       	push	r0
+ 3ca:	11 24       	eor	r1, r1
+ 3cc:	08 b6       	in	r0, 0x38	; 56
+ 3ce:	0f 92       	push	r0
+ 3d0:	18 be       	out	0x38, r1	; 56
+ 3d2:	09 b6       	in	r0, 0x39	; 57
+ 3d4:	0f 92       	push	r0
+ 3d6:	19 be       	out	0x39, r1	; 57
+ 3d8:	0b b6       	in	r0, 0x3b	; 59
+ 3da:	0f 92       	push	r0
+ 3dc:	1b be       	out	0x3b, r1	; 59
+ 3de:	2f 93       	push	r18
+ 3e0:	3f 93       	push	r19
+ 3e2:	4f 93       	push	r20
+ 3e4:	5f 93       	push	r21
+ 3e6:	6f 93       	push	r22
+ 3e8:	7f 93       	push	r23
+ 3ea:	8f 93       	push	r24
+ 3ec:	9f 93       	push	r25
+ 3ee:	af 93       	push	r26
+ 3f0:	bf 93       	push	r27
+ 3f2:	ef 93       	push	r30
+ 3f4:	ff 93       	push	r31
+ 3f6:	80 91 08 20 	lds	r24, 0x2008	; 0x802008 <tp1>
+ 3fa:	90 91 09 20 	lds	r25, 0x2009	; 0x802009 <tp1+0x1>
+ 3fe:	0e 94 56 04 	call	0x8ac	; 0x8ac <tp_txISR>
+ 402:	ff 91       	pop	r31
+ 404:	ef 91       	pop	r30
+ 406:	bf 91       	pop	r27
+ 408:	af 91       	pop	r26
+ 40a:	9f 91       	pop	r25
+ 40c:	8f 91       	pop	r24
+ 40e:	7f 91       	pop	r23
+ 410:	6f 91       	pop	r22
+ 412:	5f 91       	pop	r21
+ 414:	4f 91       	pop	r20
+ 416:	3f 91       	pop	r19
+ 418:	2f 91       	pop	r18
+ 41a:	0f 90       	pop	r0
+ 41c:	0b be       	out	0x3b, r0	; 59
+ 41e:	0f 90       	pop	r0
+ 420:	09 be       	out	0x39, r0	; 57
+ 422:	0f 90       	pop	r0
+ 424:	08 be       	out	0x38, r0	; 56
+ 426:	0f 90       	pop	r0
+ 428:	0f be       	out	0x3f, r0	; 63
+ 42a:	0f 90       	pop	r0
+ 42c:	1f 90       	pop	r1
+ 42e:	18 95       	reti
 
-// hookup ISRs to port-abstracted interrupt functions
-ISR(USARTC1_RXC_vect){
- 304:	1f 92       	push	r1
- 306:	0f 92       	push	r0
- 308:	0f b6       	in	r0, 0x3f	; 63
- 30a:	0f 92       	push	r0
- 30c:	11 24       	eor	r1, r1
- 30e:	08 b6       	in	r0, 0x38	; 56
- 310:	0f 92       	push	r0
- 312:	18 be       	out	0x38, r1	; 56
- 314:	09 b6       	in	r0, 0x39	; 57
- 316:	0f 92       	push	r0
- 318:	19 be       	out	0x39, r1	; 57
- 31a:	0b b6       	in	r0, 0x3b	; 59
- 31c:	0f 92       	push	r0
- 31e:	1b be       	out	0x3b, r1	; 59
- 320:	2f 93       	push	r18
- 322:	3f 93       	push	r19
- 324:	4f 93       	push	r20
- 326:	5f 93       	push	r21
- 328:	6f 93       	push	r22
- 32a:	7f 93       	push	r23
- 32c:	8f 93       	push	r24
- 32e:	9f 93       	push	r25
- 330:	af 93       	push	r26
- 332:	bf 93       	push	r27
- 334:	ef 93       	push	r30
- 336:	ff 93       	push	r31
-	tp_rxISR(tp2);
- 338:	80 91 06 20 	lds	r24, 0x2006	; 0x802006 <__data_end>
- 33c:	90 91 07 20 	lds	r25, 0x2007	; 0x802007 <__data_end+0x1>
- 340:	0e 94 36 03 	call	0x66c	; 0x66c <tp_rxISR>
-}
- 344:	ff 91       	pop	r31
- 346:	ef 91       	pop	r30
- 348:	bf 91       	pop	r27
- 34a:	af 91       	pop	r26
- 34c:	9f 91       	pop	r25
- 34e:	8f 91       	pop	r24
- 350:	7f 91       	pop	r23
- 352:	6f 91       	pop	r22
- 354:	5f 91       	pop	r21
- 356:	4f 91       	pop	r20
- 358:	3f 91       	pop	r19
- 35a:	2f 91       	pop	r18
- 35c:	0f 90       	pop	r0
- 35e:	0b be       	out	0x3b, r0	; 59
- 360:	0f 90       	pop	r0
- 362:	09 be       	out	0x39, r0	; 57
- 364:	0f 90       	pop	r0
- 366:	08 be       	out	0x38, r0	; 56
- 368:	0f 90       	pop	r0
- 36a:	0f be       	out	0x3f, r0	; 63
- 36c:	0f 90       	pop	r0
- 36e:	1f 90       	pop	r1
- 370:	18 95       	reti
+00000430 <__vector_28>:
+ 430:	1f 92       	push	r1
+ 432:	0f 92       	push	r0
+ 434:	0f b6       	in	r0, 0x3f	; 63
+ 436:	0f 92       	push	r0
+ 438:	11 24       	eor	r1, r1
+ 43a:	08 b6       	in	r0, 0x38	; 56
+ 43c:	0f 92       	push	r0
+ 43e:	18 be       	out	0x38, r1	; 56
+ 440:	09 b6       	in	r0, 0x39	; 57
+ 442:	0f 92       	push	r0
+ 444:	19 be       	out	0x39, r1	; 57
+ 446:	0b b6       	in	r0, 0x3b	; 59
+ 448:	0f 92       	push	r0
+ 44a:	1b be       	out	0x3b, r1	; 59
+ 44c:	2f 93       	push	r18
+ 44e:	3f 93       	push	r19
+ 450:	4f 93       	push	r20
+ 452:	5f 93       	push	r21
+ 454:	6f 93       	push	r22
+ 456:	7f 93       	push	r23
+ 458:	8f 93       	push	r24
+ 45a:	9f 93       	push	r25
+ 45c:	af 93       	push	r26
+ 45e:	bf 93       	push	r27
+ 460:	ef 93       	push	r30
+ 462:	ff 93       	push	r31
+ 464:	80 91 06 20 	lds	r24, 0x2006	; 0x802006 <__data_end>
+ 468:	90 91 07 20 	lds	r25, 0x2007	; 0x802007 <__data_end+0x1>
+ 46c:	0e 94 0e 04 	call	0x81c	; 0x81c <tp_rxISR>
+ 470:	ff 91       	pop	r31
+ 472:	ef 91       	pop	r30
+ 474:	bf 91       	pop	r27
+ 476:	af 91       	pop	r26
+ 478:	9f 91       	pop	r25
+ 47a:	8f 91       	pop	r24
+ 47c:	7f 91       	pop	r23
+ 47e:	6f 91       	pop	r22
+ 480:	5f 91       	pop	r21
+ 482:	4f 91       	pop	r20
+ 484:	3f 91       	pop	r19
+ 486:	2f 91       	pop	r18
+ 488:	0f 90       	pop	r0
+ 48a:	0b be       	out	0x3b, r0	; 59
+ 48c:	0f 90       	pop	r0
+ 48e:	09 be       	out	0x39, r0	; 57
+ 490:	0f 90       	pop	r0
+ 492:	08 be       	out	0x38, r0	; 56
+ 494:	0f 90       	pop	r0
+ 496:	0f be       	out	0x3f, r0	; 63
+ 498:	0f 90       	pop	r0
+ 49a:	1f 90       	pop	r1
+ 49c:	18 95       	reti
 
-00000372 <__vector_29>:
+0000049e <__vector_29>:
+ 49e:	1f 92       	push	r1
+ 4a0:	0f 92       	push	r0
+ 4a2:	0f b6       	in	r0, 0x3f	; 63
+ 4a4:	0f 92       	push	r0
+ 4a6:	11 24       	eor	r1, r1
+ 4a8:	08 b6       	in	r0, 0x38	; 56
+ 4aa:	0f 92       	push	r0
+ 4ac:	18 be       	out	0x38, r1	; 56
+ 4ae:	09 b6       	in	r0, 0x39	; 57
+ 4b0:	0f 92       	push	r0
+ 4b2:	19 be       	out	0x39, r1	; 57
+ 4b4:	0b b6       	in	r0, 0x3b	; 59
+ 4b6:	0f 92       	push	r0
+ 4b8:	1b be       	out	0x3b, r1	; 59
+ 4ba:	2f 93       	push	r18
+ 4bc:	3f 93       	push	r19
+ 4be:	4f 93       	push	r20
+ 4c0:	5f 93       	push	r21
+ 4c2:	6f 93       	push	r22
+ 4c4:	7f 93       	push	r23
+ 4c6:	8f 93       	push	r24
+ 4c8:	9f 93       	push	r25
+ 4ca:	af 93       	push	r26
+ 4cc:	bf 93       	push	r27
+ 4ce:	ef 93       	push	r30
+ 4d0:	ff 93       	push	r31
+ 4d2:	80 91 06 20 	lds	r24, 0x2006	; 0x802006 <__data_end>
+ 4d6:	90 91 07 20 	lds	r25, 0x2007	; 0x802007 <__data_end+0x1>
+ 4da:	0e 94 56 04 	call	0x8ac	; 0x8ac <tp_txISR>
+ 4de:	ff 91       	pop	r31
+ 4e0:	ef 91       	pop	r30
+ 4e2:	bf 91       	pop	r27
+ 4e4:	af 91       	pop	r26
+ 4e6:	9f 91       	pop	r25
+ 4e8:	8f 91       	pop	r24
+ 4ea:	7f 91       	pop	r23
+ 4ec:	6f 91       	pop	r22
+ 4ee:	5f 91       	pop	r21
+ 4f0:	4f 91       	pop	r20
+ 4f2:	3f 91       	pop	r19
+ 4f4:	2f 91       	pop	r18
+ 4f6:	0f 90       	pop	r0
+ 4f8:	0b be       	out	0x3b, r0	; 59
+ 4fa:	0f 90       	pop	r0
+ 4fc:	09 be       	out	0x39, r0	; 57
+ 4fe:	0f 90       	pop	r0
+ 500:	08 be       	out	0x38, r0	; 56
+ 502:	0f 90       	pop	r0
+ 504:	0f be       	out	0x3f, r0	; 63
+ 506:	0f 90       	pop	r0
+ 508:	1f 90       	pop	r1
+ 50a:	18 95       	reti
 
-ISR(USARTC1_DRE_vect){
- 372:	1f 92       	push	r1
- 374:	0f 92       	push	r0
- 376:	0f b6       	in	r0, 0x3f	; 63
- 378:	0f 92       	push	r0
- 37a:	11 24       	eor	r1, r1
- 37c:	08 b6       	in	r0, 0x38	; 56
- 37e:	0f 92       	push	r0
- 380:	18 be       	out	0x38, r1	; 56
- 382:	09 b6       	in	r0, 0x39	; 57
- 384:	0f 92       	push	r0
- 386:	19 be       	out	0x39, r1	; 57
- 388:	0b b6       	in	r0, 0x3b	; 59
- 38a:	0f 92       	push	r0
- 38c:	1b be       	out	0x3b, r1	; 59
- 38e:	2f 93       	push	r18
- 390:	3f 93       	push	r19
- 392:	4f 93       	push	r20
- 394:	5f 93       	push	r21
- 396:	6f 93       	push	r22
- 398:	7f 93       	push	r23
- 39a:	8f 93       	push	r24
- 39c:	9f 93       	push	r25
- 39e:	af 93       	push	r26
- 3a0:	bf 93       	push	r27
- 3a2:	ef 93       	push	r30
- 3a4:	ff 93       	push	r31
-	tp_txISR(tp2);
- 3a6:	80 91 06 20 	lds	r24, 0x2006	; 0x802006 <__data_end>
- 3aa:	90 91 07 20 	lds	r25, 0x2007	; 0x802007 <__data_end+0x1>
- 3ae:	0e 94 79 03 	call	0x6f2	; 0x6f2 <tp_txISR>
-}
- 3b2:	ff 91       	pop	r31
- 3b4:	ef 91       	pop	r30
- 3b6:	bf 91       	pop	r27
- 3b8:	af 91       	pop	r26
- 3ba:	9f 91       	pop	r25
- 3bc:	8f 91       	pop	r24
- 3be:	7f 91       	pop	r23
- 3c0:	6f 91       	pop	r22
- 3c2:	5f 91       	pop	r21
- 3c4:	4f 91       	pop	r20
- 3c6:	3f 91       	pop	r19
- 3c8:	2f 91       	pop	r18
- 3ca:	0f 90       	pop	r0
- 3cc:	0b be       	out	0x3b, r0	; 59
- 3ce:	0f 90       	pop	r0
- 3d0:	09 be       	out	0x39, r0	; 57
- 3d2:	0f 90       	pop	r0
- 3d4:	08 be       	out	0x38, r0	; 56
- 3d6:	0f 90       	pop	r0
- 3d8:	0f be       	out	0x3f, r0	; 63
- 3da:	0f 90       	pop	r0
- 3dc:	1f 90       	pop	r1
- 3de:	18 95       	reti
+0000050c <__vector_88>:
+ 50c:	1f 92       	push	r1
+ 50e:	0f 92       	push	r0
+ 510:	0f b6       	in	r0, 0x3f	; 63
+ 512:	0f 92       	push	r0
+ 514:	11 24       	eor	r1, r1
+ 516:	08 b6       	in	r0, 0x38	; 56
+ 518:	0f 92       	push	r0
+ 51a:	18 be       	out	0x38, r1	; 56
+ 51c:	09 b6       	in	r0, 0x39	; 57
+ 51e:	0f 92       	push	r0
+ 520:	19 be       	out	0x39, r1	; 57
+ 522:	0b b6       	in	r0, 0x3b	; 59
+ 524:	0f 92       	push	r0
+ 526:	1b be       	out	0x3b, r1	; 59
+ 528:	2f 93       	push	r18
+ 52a:	3f 93       	push	r19
+ 52c:	4f 93       	push	r20
+ 52e:	5f 93       	push	r21
+ 530:	6f 93       	push	r22
+ 532:	7f 93       	push	r23
+ 534:	8f 93       	push	r24
+ 536:	9f 93       	push	r25
+ 538:	af 93       	push	r26
+ 53a:	bf 93       	push	r27
+ 53c:	ef 93       	push	r30
+ 53e:	ff 93       	push	r31
+ 540:	80 91 0c 20 	lds	r24, 0x200C	; 0x80200c <tp3>
+ 544:	90 91 0d 20 	lds	r25, 0x200D	; 0x80200d <tp3+0x1>
+ 548:	0e 94 0e 04 	call	0x81c	; 0x81c <tp_rxISR>
+ 54c:	ff 91       	pop	r31
+ 54e:	ef 91       	pop	r30
+ 550:	bf 91       	pop	r27
+ 552:	af 91       	pop	r26
+ 554:	9f 91       	pop	r25
+ 556:	8f 91       	pop	r24
+ 558:	7f 91       	pop	r23
+ 55a:	6f 91       	pop	r22
+ 55c:	5f 91       	pop	r21
+ 55e:	4f 91       	pop	r20
+ 560:	3f 91       	pop	r19
+ 562:	2f 91       	pop	r18
+ 564:	0f 90       	pop	r0
+ 566:	0b be       	out	0x3b, r0	; 59
+ 568:	0f 90       	pop	r0
+ 56a:	09 be       	out	0x39, r0	; 57
+ 56c:	0f 90       	pop	r0
+ 56e:	08 be       	out	0x38, r0	; 56
+ 570:	0f 90       	pop	r0
+ 572:	0f be       	out	0x3f, r0	; 63
+ 574:	0f 90       	pop	r0
+ 576:	1f 90       	pop	r1
+ 578:	18 95       	reti
 
-000003e0 <__vector_88>:
+0000057a <__vector_89>:
+ 57a:	1f 92       	push	r1
+ 57c:	0f 92       	push	r0
+ 57e:	0f b6       	in	r0, 0x3f	; 63
+ 580:	0f 92       	push	r0
+ 582:	11 24       	eor	r1, r1
+ 584:	08 b6       	in	r0, 0x38	; 56
+ 586:	0f 92       	push	r0
+ 588:	18 be       	out	0x38, r1	; 56
+ 58a:	09 b6       	in	r0, 0x39	; 57
+ 58c:	0f 92       	push	r0
+ 58e:	19 be       	out	0x39, r1	; 57
+ 590:	0b b6       	in	r0, 0x3b	; 59
+ 592:	0f 92       	push	r0
+ 594:	1b be       	out	0x3b, r1	; 59
+ 596:	2f 93       	push	r18
+ 598:	3f 93       	push	r19
+ 59a:	4f 93       	push	r20
+ 59c:	5f 93       	push	r21
+ 59e:	6f 93       	push	r22
+ 5a0:	7f 93       	push	r23
+ 5a2:	8f 93       	push	r24
+ 5a4:	9f 93       	push	r25
+ 5a6:	af 93       	push	r26
+ 5a8:	bf 93       	push	r27
+ 5aa:	ef 93       	push	r30
+ 5ac:	ff 93       	push	r31
+ 5ae:	80 91 0c 20 	lds	r24, 0x200C	; 0x80200c <tp3>
+ 5b2:	90 91 0d 20 	lds	r25, 0x200D	; 0x80200d <tp3+0x1>
+ 5b6:	0e 94 56 04 	call	0x8ac	; 0x8ac <tp_txISR>
+ 5ba:	ff 91       	pop	r31
+ 5bc:	ef 91       	pop	r30
+ 5be:	bf 91       	pop	r27
+ 5c0:	af 91       	pop	r26
+ 5c2:	9f 91       	pop	r25
+ 5c4:	8f 91       	pop	r24
+ 5c6:	7f 91       	pop	r23
+ 5c8:	6f 91       	pop	r22
+ 5ca:	5f 91       	pop	r21
+ 5cc:	4f 91       	pop	r20
+ 5ce:	3f 91       	pop	r19
+ 5d0:	2f 91       	pop	r18
+ 5d2:	0f 90       	pop	r0
+ 5d4:	0b be       	out	0x3b, r0	; 59
+ 5d6:	0f 90       	pop	r0
+ 5d8:	09 be       	out	0x39, r0	; 57
+ 5da:	0f 90       	pop	r0
+ 5dc:	08 be       	out	0x38, r0	; 56
+ 5de:	0f 90       	pop	r0
+ 5e0:	0f be       	out	0x3f, r0	; 63
+ 5e2:	0f 90       	pop	r0
+ 5e4:	1f 90       	pop	r1
+ 5e6:	18 95       	reti
 
-ISR(USARTD0_RXC_vect){
- 3e0:	1f 92       	push	r1
- 3e2:	0f 92       	push	r0
- 3e4:	0f b6       	in	r0, 0x3f	; 63
- 3e6:	0f 92       	push	r0
- 3e8:	11 24       	eor	r1, r1
- 3ea:	08 b6       	in	r0, 0x38	; 56
- 3ec:	0f 92       	push	r0
- 3ee:	18 be       	out	0x38, r1	; 56
- 3f0:	09 b6       	in	r0, 0x39	; 57
- 3f2:	0f 92       	push	r0
- 3f4:	19 be       	out	0x39, r1	; 57
- 3f6:	0b b6       	in	r0, 0x3b	; 59
- 3f8:	0f 92       	push	r0
- 3fa:	1b be       	out	0x3b, r1	; 59
- 3fc:	2f 93       	push	r18
- 3fe:	3f 93       	push	r19
- 400:	4f 93       	push	r20
- 402:	5f 93       	push	r21
- 404:	6f 93       	push	r22
- 406:	7f 93       	push	r23
- 408:	8f 93       	push	r24
- 40a:	9f 93       	push	r25
- 40c:	af 93       	push	r26
- 40e:	bf 93       	push	r27
- 410:	ef 93       	push	r30
- 412:	ff 93       	push	r31
-	tp_rxISR(tp3);
- 414:	80 91 08 20 	lds	r24, 0x2008	; 0x802008 <tp3>
- 418:	90 91 09 20 	lds	r25, 0x2009	; 0x802009 <tp3+0x1>
- 41c:	0e 94 36 03 	call	0x66c	; 0x66c <tp_rxISR>
-}
- 420:	ff 91       	pop	r31
- 422:	ef 91       	pop	r30
- 424:	bf 91       	pop	r27
- 426:	af 91       	pop	r26
- 428:	9f 91       	pop	r25
- 42a:	8f 91       	pop	r24
- 42c:	7f 91       	pop	r23
- 42e:	6f 91       	pop	r22
- 430:	5f 91       	pop	r21
- 432:	4f 91       	pop	r20
- 434:	3f 91       	pop	r19
- 436:	2f 91       	pop	r18
- 438:	0f 90       	pop	r0
- 43a:	0b be       	out	0x3b, r0	; 59
- 43c:	0f 90       	pop	r0
- 43e:	09 be       	out	0x39, r0	; 57
- 440:	0f 90       	pop	r0
- 442:	08 be       	out	0x38, r0	; 56
- 444:	0f 90       	pop	r0
- 446:	0f be       	out	0x3f, r0	; 63
- 448:	0f 90       	pop	r0
- 44a:	1f 90       	pop	r1
- 44c:	18 95       	reti
-
-0000044e <__vector_89>:
+000005e8 <__vector_92>:
 
-ISR(USARTD0_DRE_vect){
- 44e:	1f 92       	push	r1
- 450:	0f 92       	push	r0
- 452:	0f b6       	in	r0, 0x3f	; 63
- 454:	0f 92       	push	r0
- 456:	11 24       	eor	r1, r1
- 458:	08 b6       	in	r0, 0x38	; 56
- 45a:	0f 92       	push	r0
- 45c:	18 be       	out	0x38, r1	; 56
- 45e:	09 b6       	in	r0, 0x39	; 57
- 460:	0f 92       	push	r0
- 462:	19 be       	out	0x39, r1	; 57
- 464:	0b b6       	in	r0, 0x3b	; 59
- 466:	0f 92       	push	r0
- 468:	1b be       	out	0x3b, r1	; 59
- 46a:	2f 93       	push	r18
- 46c:	3f 93       	push	r19
- 46e:	4f 93       	push	r20
- 470:	5f 93       	push	r21
- 472:	6f 93       	push	r22
- 474:	7f 93       	push	r23
- 476:	8f 93       	push	r24
- 478:	9f 93       	push	r25
- 47a:	af 93       	push	r26
- 47c:	bf 93       	push	r27
- 47e:	ef 93       	push	r30
- 480:	ff 93       	push	r31
-	tp_txISR(tp3);
- 482:	80 91 08 20 	lds	r24, 0x2008	; 0x802008 <tp3>
- 486:	90 91 09 20 	lds	r25, 0x2009	; 0x802009 <tp3+0x1>
- 48a:	0e 94 79 03 	call	0x6f2	; 0x6f2 <tp_txISR>
- 48e:	ff 91       	pop	r31
- 490:	ef 91       	pop	r30
- 492:	bf 91       	pop	r27
- 494:	af 91       	pop	r26
- 496:	9f 91       	pop	r25
- 498:	8f 91       	pop	r24
- 49a:	7f 91       	pop	r23
- 49c:	6f 91       	pop	r22
- 49e:	5f 91       	pop	r21
- 4a0:	4f 91       	pop	r20
- 4a2:	3f 91       	pop	r19
- 4a4:	2f 91       	pop	r18
- 4a6:	0f 90       	pop	r0
- 4a8:	0b be       	out	0x3b, r0	; 59
- 4aa:	0f 90       	pop	r0
- 4ac:	09 be       	out	0x39, r0	; 57
- 4ae:	0f 90       	pop	r0
- 4b0:	08 be       	out	0x38, r0	; 56
- 4b2:	0f 90       	pop	r0
- 4b4:	0f be       	out	0x3f, r0	; 63
- 4b6:	0f 90       	pop	r0
- 4b8:	1f 90       	pop	r1
- 4ba:	18 95       	reti
+ISR(USARTD1_DRE_vect){
+ 5e8:	1f 92       	push	r1
+ 5ea:	0f 92       	push	r0
+ 5ec:	0f b6       	in	r0, 0x3f	; 63
+ 5ee:	0f 92       	push	r0
+ 5f0:	11 24       	eor	r1, r1
+ 5f2:	08 b6       	in	r0, 0x38	; 56
+ 5f4:	0f 92       	push	r0
+ 5f6:	18 be       	out	0x38, r1	; 56
+ 5f8:	09 b6       	in	r0, 0x39	; 57
+ 5fa:	0f 92       	push	r0
+ 5fc:	19 be       	out	0x39, r1	; 57
+ 5fe:	0b b6       	in	r0, 0x3b	; 59
+ 600:	0f 92       	push	r0
+ 602:	1b be       	out	0x3b, r1	; 59
+ 604:	2f 93       	push	r18
+ 606:	3f 93       	push	r19
+ 608:	4f 93       	push	r20
+ 60a:	5f 93       	push	r21
+ 60c:	6f 93       	push	r22
+ 60e:	7f 93       	push	r23
+ 610:	8f 93       	push	r24
+ 612:	9f 93       	push	r25
+ 614:	af 93       	push	r26
+ 616:	bf 93       	push	r27
+ 618:	ef 93       	push	r30
+ 61a:	ff 93       	push	r31
+	tp_txISR(tp4);
+ 61c:	80 91 0a 20 	lds	r24, 0x200A	; 0x80200a <tp4>
+ 620:	90 91 0b 20 	lds	r25, 0x200B	; 0x80200b <tp4+0x1>
+ 624:	0e 94 56 04 	call	0x8ac	; 0x8ac <tp_txISR>
+ 628:	ff 91       	pop	r31
+ 62a:	ef 91       	pop	r30
+ 62c:	bf 91       	pop	r27
+ 62e:	af 91       	pop	r26
+ 630:	9f 91       	pop	r25
+ 632:	8f 91       	pop	r24
+ 634:	7f 91       	pop	r23
+ 636:	6f 91       	pop	r22
+ 638:	5f 91       	pop	r21
+ 63a:	4f 91       	pop	r20
+ 63c:	3f 91       	pop	r19
+ 63e:	2f 91       	pop	r18
+ 640:	0f 90       	pop	r0
+ 642:	0b be       	out	0x3b, r0	; 59
+ 644:	0f 90       	pop	r0
+ 646:	09 be       	out	0x39, r0	; 57
+ 648:	0f 90       	pop	r0
+ 64a:	08 be       	out	0x38, r0	; 56
+ 64c:	0f 90       	pop	r0
+ 64e:	0f be       	out	0x3f, r0	; 63
+ 650:	0f 90       	pop	r0
+ 652:	1f 90       	pop	r1
+ 654:	18 95       	reti
 
-000004bc <rb_new>:
+00000656 <rb_new>:
 	return rb;
 }
 
 void rb_reset(ringbuffer_t rb){
 	rb->head = 0;
 	rb->tail = 0;
- 4bc:	cf 92       	push	r12
- 4be:	df 92       	push	r13
- 4c0:	ef 92       	push	r14
- 4c2:	ff 92       	push	r15
- 4c4:	cf 93       	push	r28
- 4c6:	df 93       	push	r29
- 4c8:	6b 01       	movw	r12, r22
- 4ca:	7c 01       	movw	r14, r24
- 4cc:	88 e0       	ldi	r24, 0x08	; 8
- 4ce:	90 e0       	ldi	r25, 0x00	; 0
- 4d0:	0e 94 a8 03 	call	0x750	; 0x750 <malloc>
- 4d4:	ec 01       	movw	r28, r24
- 4d6:	89 2b       	or	r24, r25
- 4d8:	d1 f0       	breq	.+52     	; 0x50e <rb_new+0x52>
- 4da:	d7 01       	movw	r26, r14
- 4dc:	c6 01       	movw	r24, r12
- 4de:	01 96       	adiw	r24, 0x01	; 1
- 4e0:	a1 1d       	adc	r26, r1
- 4e2:	b1 1d       	adc	r27, r1
- 4e4:	8c 83       	std	Y+4, r24	; 0x04
- 4e6:	9d 83       	std	Y+5, r25	; 0x05
- 4e8:	ae 83       	std	Y+6, r26	; 0x06
- 4ea:	bf 83       	std	Y+7, r27	; 0x07
- 4ec:	0e 94 a8 03 	call	0x750	; 0x750 <malloc>
- 4f0:	88 83       	st	Y, r24
- 4f2:	99 83       	std	Y+1, r25	; 0x01
- 4f4:	89 2b       	or	r24, r25
- 4f6:	29 f0       	breq	.+10     	; 0x502 <rb_new+0x46>
- 4f8:	1a 82       	std	Y+2, r1	; 0x02
- 4fa:	1b 82       	std	Y+3, r1	; 0x03
- 4fc:	8c 2f       	mov	r24, r28
- 4fe:	9d 2f       	mov	r25, r29
- 500:	08 c0       	rjmp	.+16     	; 0x512 <rb_new+0x56>
- 502:	ce 01       	movw	r24, r28
- 504:	0e 94 40 04 	call	0x880	; 0x880 <free>
- 508:	80 e0       	ldi	r24, 0x00	; 0
- 50a:	90 e0       	ldi	r25, 0x00	; 0
- 50c:	02 c0       	rjmp	.+4      	; 0x512 <rb_new+0x56>
- 50e:	80 e0       	ldi	r24, 0x00	; 0
- 510:	90 e0       	ldi	r25, 0x00	; 0
- 512:	df 91       	pop	r29
- 514:	cf 91       	pop	r28
- 516:	ff 90       	pop	r15
- 518:	ef 90       	pop	r14
- 51a:	df 90       	pop	r13
- 51c:	cf 90       	pop	r12
- 51e:	08 95       	ret
+ 656:	cf 92       	push	r12
+ 658:	df 92       	push	r13
+ 65a:	ef 92       	push	r14
+ 65c:	ff 92       	push	r15
+ 65e:	cf 93       	push	r28
+ 660:	df 93       	push	r29
+ 662:	6b 01       	movw	r12, r22
+ 664:	7c 01       	movw	r14, r24
+ 666:	88 e0       	ldi	r24, 0x08	; 8
+ 668:	90 e0       	ldi	r25, 0x00	; 0
+ 66a:	0e 94 84 04 	call	0x908	; 0x908 <malloc>
+ 66e:	ec 01       	movw	r28, r24
+ 670:	89 2b       	or	r24, r25
+ 672:	d1 f0       	breq	.+52     	; 0x6a8 <rb_new+0x52>
+ 674:	d7 01       	movw	r26, r14
+ 676:	c6 01       	movw	r24, r12
+ 678:	01 96       	adiw	r24, 0x01	; 1
+ 67a:	a1 1d       	adc	r26, r1
+ 67c:	b1 1d       	adc	r27, r1
+ 67e:	8c 83       	std	Y+4, r24	; 0x04
+ 680:	9d 83       	std	Y+5, r25	; 0x05
+ 682:	ae 83       	std	Y+6, r26	; 0x06
+ 684:	bf 83       	std	Y+7, r27	; 0x07
+ 686:	0e 94 84 04 	call	0x908	; 0x908 <malloc>
+ 68a:	88 83       	st	Y, r24
+ 68c:	99 83       	std	Y+1, r25	; 0x01
+ 68e:	89 2b       	or	r24, r25
+ 690:	29 f0       	breq	.+10     	; 0x69c <rb_new+0x46>
+ 692:	1a 82       	std	Y+2, r1	; 0x02
+ 694:	1b 82       	std	Y+3, r1	; 0x03
+ 696:	8c 2f       	mov	r24, r28
+ 698:	9d 2f       	mov	r25, r29
+ 69a:	08 c0       	rjmp	.+16     	; 0x6ac <rb_new+0x56>
+ 69c:	ce 01       	movw	r24, r28
+ 69e:	0e 94 1c 05 	call	0xa38	; 0xa38 <free>
+ 6a2:	80 e0       	ldi	r24, 0x00	; 0
+ 6a4:	90 e0       	ldi	r25, 0x00	; 0
+ 6a6:	02 c0       	rjmp	.+4      	; 0x6ac <rb_new+0x56>
+ 6a8:	80 e0       	ldi	r24, 0x00	; 0
+ 6aa:	90 e0       	ldi	r25, 0x00	; 0
+ 6ac:	df 91       	pop	r29
+ 6ae:	cf 91       	pop	r28
+ 6b0:	ff 90       	pop	r15
+ 6b2:	ef 90       	pop	r14
+ 6b4:	df 90       	pop	r13
+ 6b6:	cf 90       	pop	r12
+ 6b8:	08 95       	ret
 
-00000520 <rb_write>:
+000006ba <rb_write>:
 }
 
 
 void rb_write(ringbuffer_t rb, uint8_t data){
- 520:	fc 01       	movw	r30, r24
+ 6ba:	fc 01       	movw	r30, r24
 	// write to head
 
 	rb->buf[rb->head] = data;
- 522:	82 81       	ldd	r24, Z+2	; 0x02
- 524:	a0 81       	ld	r26, Z
- 526:	b1 81       	ldd	r27, Z+1	; 0x01
- 528:	a8 0f       	add	r26, r24
- 52a:	b1 1d       	adc	r27, r1
- 52c:	6c 93       	st	X, r22
+ 6bc:	82 81       	ldd	r24, Z+2	; 0x02
+ 6be:	a0 81       	ld	r26, Z
+ 6c0:	b1 81       	ldd	r27, Z+1	; 0x01
+ 6c2:	a8 0f       	add	r26, r24
+ 6c4:	b1 1d       	adc	r27, r1
+ 6c6:	6c 93       	st	X, r22
 	
 	rb->head += 1;
- 52e:	42 81       	ldd	r20, Z+2	; 0x02
- 530:	4f 5f       	subi	r20, 0xFF	; 255
- 532:	42 83       	std	Z+2, r20	; 0x02
-	if(rb->head >= rb->size - 1){
- 534:	50 e0       	ldi	r21, 0x00	; 0
- 536:	60 e0       	ldi	r22, 0x00	; 0
- 538:	70 e0       	ldi	r23, 0x00	; 0
- 53a:	84 81       	ldd	r24, Z+4	; 0x04
- 53c:	95 81       	ldd	r25, Z+5	; 0x05
- 53e:	a6 81       	ldd	r26, Z+6	; 0x06
- 540:	b7 81       	ldd	r27, Z+7	; 0x07
- 542:	01 97       	sbiw	r24, 0x01	; 1
- 544:	a1 09       	sbc	r26, r1
- 546:	b1 09       	sbc	r27, r1
- 548:	48 17       	cp	r20, r24
- 54a:	59 07       	cpc	r21, r25
- 54c:	6a 07       	cpc	r22, r26
- 54e:	7b 07       	cpc	r23, r27
- 550:	08 f0       	brcs	.+2      	; 0x554 <rb_write+0x34>
+ 6c8:	42 81       	ldd	r20, Z+2	; 0x02
+ 6ca:	4f 5f       	subi	r20, 0xFF	; 255
+ 6cc:	42 83       	std	Z+2, r20	; 0x02
+	if(rb->head >= rb->size){
+ 6ce:	50 e0       	ldi	r21, 0x00	; 0
+ 6d0:	60 e0       	ldi	r22, 0x00	; 0
+ 6d2:	70 e0       	ldi	r23, 0x00	; 0
+ 6d4:	84 81       	ldd	r24, Z+4	; 0x04
+ 6d6:	95 81       	ldd	r25, Z+5	; 0x05
+ 6d8:	a6 81       	ldd	r26, Z+6	; 0x06
+ 6da:	b7 81       	ldd	r27, Z+7	; 0x07
+ 6dc:	48 17       	cp	r20, r24
+ 6de:	59 07       	cpc	r21, r25
+ 6e0:	6a 07       	cpc	r22, r26
+ 6e2:	7b 07       	cpc	r23, r27
+ 6e4:	08 f0       	brcs	.+2      	; 0x6e8 <rb_write+0x2e>
 		rb->head = 0;
- 552:	12 82       	std	Z+2, r1	; 0x02
- 554:	08 95       	ret
+ 6e6:	12 82       	std	Z+2, r1	; 0x02
+ 6e8:	08 95       	ret
 
-00000556 <rb_read>:
+000006ea <rb_read>:
 	}
 	// increment head and check wrap
-
 }
 
 uint8_t rb_read(ringbuffer_t rb){
- 556:	0f 93       	push	r16
- 558:	1f 93       	push	r17
- 55a:	fc 01       	movw	r30, r24
+ 6ea:	0f 93       	push	r16
+ 6ec:	1f 93       	push	r17
+ 6ee:	fc 01       	movw	r30, r24
 	// pull data from tail
 	uint8_t data = rb->buf[rb->tail];
- 55c:	43 81       	ldd	r20, Z+3	; 0x03
- 55e:	a0 81       	ld	r26, Z
- 560:	b1 81       	ldd	r27, Z+1	; 0x01
- 562:	a4 0f       	add	r26, r20
- 564:	b1 1d       	adc	r27, r1
- 566:	8c 91       	ld	r24, X
+ 6f0:	43 81       	ldd	r20, Z+3	; 0x03
+ 6f2:	a0 81       	ld	r26, Z
+ 6f4:	b1 81       	ldd	r27, Z+1	; 0x01
+ 6f6:	a4 0f       	add	r26, r20
+ 6f8:	b1 1d       	adc	r27, r1
+ 6fa:	8c 91       	ld	r24, X
 	// increment tail and check wrap
 	rb->tail += 1;
- 568:	4f 5f       	subi	r20, 0xFF	; 255
- 56a:	43 83       	std	Z+3, r20	; 0x03
-	if(rb->tail >= rb->size -1){
- 56c:	50 e0       	ldi	r21, 0x00	; 0
- 56e:	60 e0       	ldi	r22, 0x00	; 0
- 570:	70 e0       	ldi	r23, 0x00	; 0
- 572:	04 81       	ldd	r16, Z+4	; 0x04
- 574:	15 81       	ldd	r17, Z+5	; 0x05
- 576:	26 81       	ldd	r18, Z+6	; 0x06
- 578:	37 81       	ldd	r19, Z+7	; 0x07
- 57a:	01 50       	subi	r16, 0x01	; 1
- 57c:	11 09       	sbc	r17, r1
- 57e:	21 09       	sbc	r18, r1
- 580:	31 09       	sbc	r19, r1
- 582:	40 17       	cp	r20, r16
- 584:	51 07       	cpc	r21, r17
- 586:	62 07       	cpc	r22, r18
- 588:	73 07       	cpc	r23, r19
- 58a:	08 f0       	brcs	.+2      	; 0x58e <rb_read+0x38>
+ 6fc:	4f 5f       	subi	r20, 0xFF	; 255
+ 6fe:	43 83       	std	Z+3, r20	; 0x03
+	if(rb->tail >= rb->size){
+ 700:	50 e0       	ldi	r21, 0x00	; 0
+ 702:	60 e0       	ldi	r22, 0x00	; 0
+ 704:	70 e0       	ldi	r23, 0x00	; 0
+ 706:	04 81       	ldd	r16, Z+4	; 0x04
+ 708:	15 81       	ldd	r17, Z+5	; 0x05
+ 70a:	26 81       	ldd	r18, Z+6	; 0x06
+ 70c:	37 81       	ldd	r19, Z+7	; 0x07
+ 70e:	40 17       	cp	r20, r16
+ 710:	51 07       	cpc	r21, r17
+ 712:	62 07       	cpc	r22, r18
+ 714:	73 07       	cpc	r23, r19
+ 716:	08 f0       	brcs	.+2      	; 0x71a <rb_read+0x30>
 		rb->tail = 0;
- 58c:	13 82       	std	Z+3, r1	; 0x03
+ 718:	13 82       	std	Z+3, r1	; 0x03
 	}
 	return data;
 }
- 58e:	1f 91       	pop	r17
- 590:	0f 91       	pop	r16
- 592:	08 95       	ret
+ 71a:	1f 91       	pop	r17
+ 71c:	0f 91       	pop	r16
+ 71e:	08 95       	ret
 
-00000594 <tp_new>:
+00000720 <rb_hasdata>:
+
+uint8_t rb_hasdata(ringbuffer_t rb){
+ 720:	fc 01       	movw	r30, r24
+ 722:	81 e0       	ldi	r24, 0x01	; 1
+ 724:	23 81       	ldd	r18, Z+3	; 0x03
+ 726:	92 81       	ldd	r25, Z+2	; 0x02
+ 728:	29 13       	cpse	r18, r25
+ 72a:	01 c0       	rjmp	.+2      	; 0x72e <rb_hasdata+0xe>
+ 72c:	80 e0       	ldi	r24, 0x00	; 0
+	if (rb->tail == rb->head){
+		return 0;
+	} else {
+		return 1;
 	}
-	return data;
-}
+ 72e:	08 95       	ret
 
+00000730 <tp_new>:
 void tp_setRxStatus(tinyport_t tp, uint8_t state){
-	tp->rxstate = state;
- 594:	af 92       	push	r10
- 596:	bf 92       	push	r11
- 598:	cf 92       	push	r12
- 59a:	df 92       	push	r13
- 59c:	ff 92       	push	r15
- 59e:	0f 93       	push	r16
- 5a0:	1f 93       	push	r17
- 5a2:	cf 93       	push	r28
- 5a4:	df 93       	push	r29
- 5a6:	5c 01       	movw	r10, r24
- 5a8:	6b 01       	movw	r12, r22
- 5aa:	f4 2e       	mov	r15, r20
- 5ac:	12 2f       	mov	r17, r18
- 5ae:	8e e0       	ldi	r24, 0x0E	; 14
- 5b0:	90 e0       	ldi	r25, 0x00	; 0
- 5b2:	0e 94 a8 03 	call	0x750	; 0x750 <malloc>
- 5b6:	ec 01       	movw	r28, r24
- 5b8:	a8 82       	st	Y, r10
- 5ba:	b9 82       	std	Y+1, r11	; 0x01
- 5bc:	ca 82       	std	Y+2, r12	; 0x02
- 5be:	db 82       	std	Y+3, r13	; 0x03
- 5c0:	fc 82       	std	Y+4, r15	; 0x04
- 5c2:	1d 83       	std	Y+5, r17	; 0x05
- 5c4:	0e 83       	std	Y+6, r16	; 0x06
- 5c6:	60 e1       	ldi	r22, 0x10	; 16
- 5c8:	70 e0       	ldi	r23, 0x00	; 0
- 5ca:	80 e0       	ldi	r24, 0x00	; 0
- 5cc:	90 e0       	ldi	r25, 0x00	; 0
- 5ce:	0e 94 5e 02 	call	0x4bc	; 0x4bc <rb_new>
- 5d2:	8f 83       	std	Y+7, r24	; 0x07
- 5d4:	98 87       	std	Y+8, r25	; 0x08
- 5d6:	60 e1       	ldi	r22, 0x10	; 16
- 5d8:	70 e0       	ldi	r23, 0x00	; 0
- 5da:	80 e0       	ldi	r24, 0x00	; 0
- 5dc:	90 e0       	ldi	r25, 0x00	; 0
- 5de:	0e 94 5e 02 	call	0x4bc	; 0x4bc <rb_new>
- 5e2:	89 87       	std	Y+9, r24	; 0x09
- 5e4:	9a 87       	std	Y+10, r25	; 0x0a
- 5e6:	1c 86       	std	Y+12, r1	; 0x0c
- 5e8:	1d 86       	std	Y+13, r1	; 0x0d
- 5ea:	ce 01       	movw	r24, r28
- 5ec:	df 91       	pop	r29
- 5ee:	cf 91       	pop	r28
- 5f0:	1f 91       	pop	r17
- 5f2:	0f 91       	pop	r16
- 5f4:	ff 90       	pop	r15
- 5f6:	df 90       	pop	r13
- 5f8:	cf 90       	pop	r12
- 5fa:	bf 90       	pop	r11
- 5fc:	af 90       	pop	r10
- 5fe:	08 95       	ret
+	if(state == tp->rxstate){
+		// nothing
+		// nothing changes? always listening
+	} else {
+		tp->rxstate = state;
+ 730:	af 92       	push	r10
+ 732:	bf 92       	push	r11
+ 734:	cf 92       	push	r12
+ 736:	df 92       	push	r13
+ 738:	ff 92       	push	r15
+ 73a:	0f 93       	push	r16
+ 73c:	1f 93       	push	r17
+ 73e:	cf 93       	push	r28
+ 740:	df 93       	push	r29
+ 742:	5c 01       	movw	r10, r24
+ 744:	6b 01       	movw	r12, r22
+ 746:	f4 2e       	mov	r15, r20
+ 748:	12 2f       	mov	r17, r18
+ 74a:	8e e0       	ldi	r24, 0x0E	; 14
+ 74c:	90 e0       	ldi	r25, 0x00	; 0
+ 74e:	0e 94 84 04 	call	0x908	; 0x908 <malloc>
+ 752:	ec 01       	movw	r28, r24
+ 754:	a8 82       	st	Y, r10
+ 756:	b9 82       	std	Y+1, r11	; 0x01
+ 758:	ca 82       	std	Y+2, r12	; 0x02
+ 75a:	db 82       	std	Y+3, r13	; 0x03
+ 75c:	fc 82       	std	Y+4, r15	; 0x04
+ 75e:	1d 83       	std	Y+5, r17	; 0x05
+ 760:	0e 83       	std	Y+6, r16	; 0x06
+ 762:	60 e1       	ldi	r22, 0x10	; 16
+ 764:	70 e0       	ldi	r23, 0x00	; 0
+ 766:	80 e0       	ldi	r24, 0x00	; 0
+ 768:	90 e0       	ldi	r25, 0x00	; 0
+ 76a:	0e 94 2b 03 	call	0x656	; 0x656 <rb_new>
+ 76e:	8f 83       	std	Y+7, r24	; 0x07
+ 770:	98 87       	std	Y+8, r25	; 0x08
+ 772:	60 e1       	ldi	r22, 0x10	; 16
+ 774:	70 e0       	ldi	r23, 0x00	; 0
+ 776:	80 e0       	ldi	r24, 0x00	; 0
+ 778:	90 e0       	ldi	r25, 0x00	; 0
+ 77a:	0e 94 2b 03 	call	0x656	; 0x656 <rb_new>
+ 77e:	89 87       	std	Y+9, r24	; 0x09
+ 780:	9a 87       	std	Y+10, r25	; 0x0a
+ 782:	1b 86       	std	Y+11, r1	; 0x0b
+ 784:	1c 86       	std	Y+12, r1	; 0x0c
+ 786:	1d 86       	std	Y+13, r1	; 0x0d
+ 788:	ce 01       	movw	r24, r28
+ 78a:	df 91       	pop	r29
+ 78c:	cf 91       	pop	r28
+ 78e:	1f 91       	pop	r17
+ 790:	0f 91       	pop	r16
+ 792:	ff 90       	pop	r15
+ 794:	df 90       	pop	r13
+ 796:	cf 90       	pop	r12
+ 798:	bf 90       	pop	r11
+ 79a:	af 90       	pop	r10
+ 79c:	08 95       	ret
 
-00000600 <tp_init>:
- 600:	fc 01       	movw	r30, r24
- 602:	a0 81       	ld	r26, Z
- 604:	b1 81       	ldd	r27, Z+1	; 0x01
- 606:	8b e9       	ldi	r24, 0x9B	; 155
- 608:	16 96       	adiw	r26, 0x06	; 6
- 60a:	8c 93       	st	X, r24
- 60c:	a0 81       	ld	r26, Z
- 60e:	b1 81       	ldd	r27, Z+1	; 0x01
- 610:	17 96       	adiw	r26, 0x07	; 7
- 612:	1c 92       	st	X, r1
- 614:	a0 81       	ld	r26, Z
- 616:	b1 81       	ldd	r27, Z+1	; 0x01
- 618:	13 96       	adiw	r26, 0x03	; 3
- 61a:	8c 91       	ld	r24, X
- 61c:	13 97       	sbiw	r26, 0x03	; 3
- 61e:	80 61       	ori	r24, 0x10	; 16
- 620:	13 96       	adiw	r26, 0x03	; 3
- 622:	8c 93       	st	X, r24
- 624:	a0 81       	ld	r26, Z
- 626:	b1 81       	ldd	r27, Z+1	; 0x01
- 628:	88 e1       	ldi	r24, 0x18	; 24
- 62a:	14 96       	adiw	r26, 0x04	; 4
- 62c:	8c 93       	st	X, r24
- 62e:	a0 81       	ld	r26, Z
- 630:	b1 81       	ldd	r27, Z+1	; 0x01
- 632:	83 e0       	ldi	r24, 0x03	; 3
- 634:	15 96       	adiw	r26, 0x05	; 5
- 636:	8c 93       	st	X, r24
- 638:	a2 81       	ldd	r26, Z+2	; 0x02
- 63a:	b3 81       	ldd	r27, Z+3	; 0x03
- 63c:	85 81       	ldd	r24, Z+5	; 0x05
- 63e:	15 96       	adiw	r26, 0x05	; 5
- 640:	8c 93       	st	X, r24
- 642:	a2 81       	ldd	r26, Z+2	; 0x02
- 644:	b3 81       	ldd	r27, Z+3	; 0x03
- 646:	85 81       	ldd	r24, Z+5	; 0x05
- 648:	11 96       	adiw	r26, 0x01	; 1
- 64a:	8c 93       	st	X, r24
- 64c:	a2 81       	ldd	r26, Z+2	; 0x02
- 64e:	b3 81       	ldd	r27, Z+3	; 0x03
- 650:	84 81       	ldd	r24, Z+4	; 0x04
- 652:	12 96       	adiw	r26, 0x02	; 2
- 654:	8c 93       	st	X, r24
- 656:	a2 81       	ldd	r26, Z+2	; 0x02
- 658:	b3 81       	ldd	r27, Z+3	; 0x03
- 65a:	84 81       	ldd	r24, Z+4	; 0x04
- 65c:	16 96       	adiw	r26, 0x06	; 6
- 65e:	8c 93       	st	X, r24
- 660:	a2 81       	ldd	r26, Z+2	; 0x02
- 662:	b3 81       	ldd	r27, Z+3	; 0x03
- 664:	86 81       	ldd	r24, Z+6	; 0x06
- 666:	11 96       	adiw	r26, 0x01	; 1
- 668:	8c 93       	st	X, r24
- 66a:	08 95       	ret
+0000079e <tp_init>:
+ 79e:	fc 01       	movw	r30, r24
+ 7a0:	a0 81       	ld	r26, Z
+ 7a2:	b1 81       	ldd	r27, Z+1	; 0x01
+ 7a4:	8b e9       	ldi	r24, 0x9B	; 155
+ 7a6:	16 96       	adiw	r26, 0x06	; 6
+ 7a8:	8c 93       	st	X, r24
+ 7aa:	a0 81       	ld	r26, Z
+ 7ac:	b1 81       	ldd	r27, Z+1	; 0x01
+ 7ae:	17 96       	adiw	r26, 0x07	; 7
+ 7b0:	1c 92       	st	X, r1
+ 7b2:	a0 81       	ld	r26, Z
+ 7b4:	b1 81       	ldd	r27, Z+1	; 0x01
+ 7b6:	13 96       	adiw	r26, 0x03	; 3
+ 7b8:	8c 91       	ld	r24, X
+ 7ba:	13 97       	sbiw	r26, 0x03	; 3
+ 7bc:	80 61       	ori	r24, 0x10	; 16
+ 7be:	13 96       	adiw	r26, 0x03	; 3
+ 7c0:	8c 93       	st	X, r24
+ 7c2:	a0 81       	ld	r26, Z
+ 7c4:	b1 81       	ldd	r27, Z+1	; 0x01
+ 7c6:	88 e1       	ldi	r24, 0x18	; 24
+ 7c8:	14 96       	adiw	r26, 0x04	; 4
+ 7ca:	8c 93       	st	X, r24
+ 7cc:	a0 81       	ld	r26, Z
+ 7ce:	b1 81       	ldd	r27, Z+1	; 0x01
+ 7d0:	83 e0       	ldi	r24, 0x03	; 3
+ 7d2:	15 96       	adiw	r26, 0x05	; 5
+ 7d4:	8c 93       	st	X, r24
+ 7d6:	a2 81       	ldd	r26, Z+2	; 0x02
+ 7d8:	b3 81       	ldd	r27, Z+3	; 0x03
+ 7da:	85 81       	ldd	r24, Z+5	; 0x05
+ 7dc:	15 96       	adiw	r26, 0x05	; 5
+ 7de:	8c 93       	st	X, r24
+ 7e0:	a2 81       	ldd	r26, Z+2	; 0x02
+ 7e2:	b3 81       	ldd	r27, Z+3	; 0x03
+ 7e4:	85 81       	ldd	r24, Z+5	; 0x05
+ 7e6:	11 96       	adiw	r26, 0x01	; 1
+ 7e8:	8c 93       	st	X, r24
+ 7ea:	a2 81       	ldd	r26, Z+2	; 0x02
+ 7ec:	b3 81       	ldd	r27, Z+3	; 0x03
+ 7ee:	84 81       	ldd	r24, Z+4	; 0x04
+ 7f0:	12 96       	adiw	r26, 0x02	; 2
+ 7f2:	8c 93       	st	X, r24
+ 7f4:	a2 81       	ldd	r26, Z+2	; 0x02
+ 7f6:	b3 81       	ldd	r27, Z+3	; 0x03
+ 7f8:	84 81       	ldd	r24, Z+4	; 0x04
+ 7fa:	16 96       	adiw	r26, 0x06	; 6
+ 7fc:	8c 93       	st	X, r24
+ 7fe:	a2 81       	ldd	r26, Z+2	; 0x02
+ 800:	b3 81       	ldd	r27, Z+3	; 0x03
+ 802:	86 81       	ldd	r24, Z+6	; 0x06
+ 804:	11 96       	adiw	r26, 0x01	; 1
+ 806:	8c 93       	st	X, r24
+ 808:	08 95       	ret
 
-0000066c <tp_rxISR>:
- 66c:	cf 93       	push	r28
- 66e:	df 93       	push	r29
- 670:	ec 01       	movw	r28, r24
- 672:	e8 81       	ld	r30, Y
- 674:	f9 81       	ldd	r31, Y+1	; 0x01
- 676:	60 81       	ld	r22, Z
- 678:	8f 81       	ldd	r24, Y+7	; 0x07
- 67a:	98 85       	ldd	r25, Y+8	; 0x08
- 67c:	0e 94 90 02 	call	0x520	; 0x520 <rb_write>
- 680:	81 e0       	ldi	r24, 0x01	; 1
- 682:	8d 87       	std	Y+13, r24	; 0x0d
- 684:	df 91       	pop	r29
- 686:	cf 91       	pop	r28
- 688:	08 95       	ret
+0000080a <tp_statflash>:
+ 80a:	dc 01       	movw	r26, r24
+ 80c:	12 96       	adiw	r26, 0x02	; 2
+ 80e:	ed 91       	ld	r30, X+
+ 810:	fc 91       	ld	r31, X
+ 812:	13 97       	sbiw	r26, 0x03	; 3
+ 814:	16 96       	adiw	r26, 0x06	; 6
+ 816:	8c 91       	ld	r24, X
+ 818:	87 83       	std	Z+7, r24	; 0x07
+ 81a:	08 95       	ret
 
-0000068a <tp_read>:
- 68a:	cf 93       	push	r28
- 68c:	df 93       	push	r29
- 68e:	ec 01       	movw	r28, r24
- 690:	8f 81       	ldd	r24, Y+7	; 0x07
- 692:	98 85       	ldd	r25, Y+8	; 0x08
- 694:	0e 94 ab 02 	call	0x556	; 0x556 <rb_read>
- 698:	ef 81       	ldd	r30, Y+7	; 0x07
- 69a:	f8 85       	ldd	r31, Y+8	; 0x08
- 69c:	23 81       	ldd	r18, Z+3	; 0x03
- 69e:	92 81       	ldd	r25, Z+2	; 0x02
- 6a0:	29 13       	cpse	r18, r25
- 6a2:	02 c0       	rjmp	.+4      	; 0x6a8 <tp_read+0x1e>
- 6a4:	1d 86       	std	Y+13, r1	; 0x0d
- 6a6:	02 c0       	rjmp	.+4      	; 0x6ac <tp_read+0x22>
- 6a8:	91 e0       	ldi	r25, 0x01	; 1
- 6aa:	9d 87       	std	Y+13, r25	; 0x0d
- 6ac:	df 91       	pop	r29
- 6ae:	cf 91       	pop	r28
- 6b0:	08 95       	ret
+0000081c <tp_rxISR>:
+ 81c:	cf 93       	push	r28
+ 81e:	df 93       	push	r29
+ 820:	ec 01       	movw	r28, r24
+ 822:	ea 81       	ldd	r30, Y+2	; 0x02
+ 824:	fb 81       	ldd	r31, Y+3	; 0x03
+ 826:	8e 81       	ldd	r24, Y+6	; 0x06
+ 828:	87 83       	std	Z+7, r24	; 0x07
+ 82a:	e8 81       	ld	r30, Y
+ 82c:	f9 81       	ldd	r31, Y+1	; 0x01
+ 82e:	90 81       	ld	r25, Z
+ 830:	8d 85       	ldd	r24, Y+13	; 0x0d
+ 832:	88 23       	and	r24, r24
+ 834:	19 f0       	breq	.+6      	; 0x83c <tp_rxISR+0x20>
+ 836:	81 30       	cpi	r24, 0x01	; 1
+ 838:	31 f0       	breq	.+12     	; 0x846 <tp_rxISR+0x2a>
+ 83a:	11 c0       	rjmp	.+34     	; 0x85e <tp_rxISR+0x42>
+ 83c:	9e 37       	cpi	r25, 0x7E	; 126
+ 83e:	79 f4       	brne	.+30     	; 0x85e <tp_rxISR+0x42>
+ 840:	81 e0       	ldi	r24, 0x01	; 1
+ 842:	8d 87       	std	Y+13, r24	; 0x0d
+ 844:	0c c0       	rjmp	.+24     	; 0x85e <tp_rxISR+0x42>
+ 846:	9e 37       	cpi	r25, 0x7E	; 126
+ 848:	29 f4       	brne	.+10     	; 0x854 <tp_rxISR+0x38>
+ 84a:	1d 86       	std	Y+13, r1	; 0x0d
+ 84c:	ce 01       	movw	r24, r28
+ 84e:	0e 94 8c 01 	call	0x318	; 0x318 <handoff>
+ 852:	05 c0       	rjmp	.+10     	; 0x85e <tp_rxISR+0x42>
+ 854:	60 81       	ld	r22, Z
+ 856:	8f 81       	ldd	r24, Y+7	; 0x07
+ 858:	98 85       	ldd	r25, Y+8	; 0x08
+ 85a:	0e 94 5d 03 	call	0x6ba	; 0x6ba <rb_write>
+ 85e:	8c 85       	ldd	r24, Y+12	; 0x0c
+ 860:	81 30       	cpi	r24, 0x01	; 1
+ 862:	11 f0       	breq	.+4      	; 0x868 <tp_rxISR+0x4c>
+ 864:	81 e0       	ldi	r24, 0x01	; 1
+ 866:	8c 87       	std	Y+12, r24	; 0x0c
+ 868:	df 91       	pop	r29
+ 86a:	cf 91       	pop	r28
+ 86c:	08 95       	ret
+
+0000086e <tp_read>:
+ 86e:	81 e5       	ldi	r24, 0x51	; 81
+ 870:	fb 01       	movw	r30, r22
+ 872:	80 83       	st	Z, r24
+ 874:	80 e0       	ldi	r24, 0x00	; 0
+ 876:	08 95       	ret
 
-000006b2 <tp_setTxStatus>:
+00000878 <tp_setTxStatus>:
 void tp_write(tinyport_t tp, uint8_t data){
 	rb_write(tp->rbtx, data);
-	tp_setTxStatus(tp, TP_RX_STATE_HASDATA);
+	tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available
 }
 
 void tp_setTxStatus(tinyport_t tp, uint8_t state){
- 6b2:	fc 01       	movw	r30, r24
-	tp->txstate = state;
- 6b4:	64 87       	std	Z+12, r22	; 0x0c
-	if(state){
- 6b6:	66 23       	and	r22, r22
- 6b8:	71 f0       	breq	.+28     	; 0x6d6 <tp_setTxStatus+0x24>
+ 878:	fc 01       	movw	r30, r24
+	if(state == tp->txstate){ // if already set,
+ 87a:	83 85       	ldd	r24, Z+11	; 0x0b
+ 87c:	86 17       	cp	r24, r22
+ 87e:	a9 f0       	breq	.+42     	; 0x8aa <tp_setTxStatus+0x32>
+		// do nothing
+	} else if(state) { // if set to hi - have things to tx
+ 880:	66 23       	and	r22, r22
+ 882:	51 f0       	breq	.+20     	; 0x898 <tp_setTxStatus+0x20>
 		tp->uart->CTRLA |= USART_DREINTLVL_LO_gc; // now ready for out transmit - this would happen elsewhere - when there is tx to tx
- 6ba:	a0 81       	ld	r26, Z
- 6bc:	b1 81       	ldd	r27, Z+1	; 0x01
- 6be:	13 96       	adiw	r26, 0x03	; 3
- 6c0:	8c 91       	ld	r24, X
- 6c2:	13 97       	sbiw	r26, 0x03	; 3
- 6c4:	81 60       	ori	r24, 0x01	; 1
- 6c6:	13 96       	adiw	r26, 0x03	; 3
- 6c8:	8c 93       	st	X, r24
-void tp_statflash(tinyport_t tp){
-	tp->port->OUTTGL = tp->pinSTAT_bm;
-}
-
-void tp_stathi(tinyport_t tp){
-	tp->port->OUTSET = tp->pinSTAT_bm;
- 6ca:	a2 81       	ldd	r26, Z+2	; 0x02
- 6cc:	b3 81       	ldd	r27, Z+3	; 0x03
- 6ce:	86 81       	ldd	r24, Z+6	; 0x06
- 6d0:	15 96       	adiw	r26, 0x05	; 5
- 6d2:	8c 93       	st	X, r24
- 6d4:	08 95       	ret
-	tp->txstate = state;
-	if(state){
-		tp->uart->CTRLA |= USART_DREINTLVL_LO_gc; // now ready for out transmit - this would happen elsewhere - when there is tx to tx
-		tp_stathi(tp);
-		} else {
+ 884:	a0 81       	ld	r26, Z
+ 886:	b1 81       	ldd	r27, Z+1	; 0x01
+ 888:	13 96       	adiw	r26, 0x03	; 3
+ 88a:	8c 91       	ld	r24, X
+ 88c:	13 97       	sbiw	r26, 0x03	; 3
+ 88e:	81 60       	ori	r24, 0x01	; 1
+ 890:	13 96       	adiw	r26, 0x03	; 3
+ 892:	8c 93       	st	X, r24
+		tp->txstate = state;
+ 894:	63 87       	std	Z+11, r22	; 0x0b
+ 896:	08 95       	ret
+	} else { // if lo - buffer is empty, donot tx
 		tp->uart->CTRLA = (tp->uart->CTRLA & ~ USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc; // turn off interrupt
- 6d6:	a0 81       	ld	r26, Z
- 6d8:	b1 81       	ldd	r27, Z+1	; 0x01
- 6da:	13 96       	adiw	r26, 0x03	; 3
- 6dc:	8c 91       	ld	r24, X
- 6de:	13 97       	sbiw	r26, 0x03	; 3
- 6e0:	8c 7f       	andi	r24, 0xFC	; 252
- 6e2:	13 96       	adiw	r26, 0x03	; 3
- 6e4:	8c 93       	st	X, r24
-void tp_stathi(tinyport_t tp){
-	tp->port->OUTSET = tp->pinSTAT_bm;
+ 898:	a0 81       	ld	r26, Z
+ 89a:	b1 81       	ldd	r27, Z+1	; 0x01
+ 89c:	13 96       	adiw	r26, 0x03	; 3
+ 89e:	8c 91       	ld	r24, X
+ 8a0:	13 97       	sbiw	r26, 0x03	; 3
+ 8a2:	8c 7f       	andi	r24, 0xFC	; 252
+ 8a4:	13 96       	adiw	r26, 0x03	; 3
+ 8a6:	8c 93       	st	X, r24
+		tp->txstate = state;
+ 8a8:	13 86       	std	Z+11, r1	; 0x0b
+ 8aa:	08 95       	ret
+
+000008ac <tp_txISR>:
+	}
 }
 
-void tp_statlo(tinyport_t tp){
-	tp->port->OUTCLR = tp->pinSTAT_bm;
- 6e6:	a2 81       	ldd	r26, Z+2	; 0x02
- 6e8:	b3 81       	ldd	r27, Z+3	; 0x03
- 6ea:	86 81       	ldd	r24, Z+6	; 0x06
- 6ec:	16 96       	adiw	r26, 0x06	; 6
- 6ee:	8c 93       	st	X, r24
- 6f0:	08 95       	ret
+// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
 
-000006f2 <tp_txISR>:
-	}
+void tp_txISR(tinyport_t tp){
+ 8ac:	0f 93       	push	r16
+ 8ae:	1f 93       	push	r17
+ 8b0:	cf 93       	push	r28
+ 8b2:	df 93       	push	r29
+ 8b4:	ec 01       	movw	r28, r24
+	// stat pin
+	tp->port->DIRSET = tp->pinSTAT_bm;
 }
 
+void tp_statflash(tinyport_t tp){
+	tp->port->OUTTGL = tp->pinSTAT_bm;
+ 8b6:	ea 81       	ldd	r30, Y+2	; 0x02
+ 8b8:	fb 81       	ldd	r31, Y+3	; 0x03
+ 8ba:	8e 81       	ldd	r24, Y+6	; 0x06
+ 8bc:	87 83       	std	Z+7, r24	; 0x07
+
 // https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
 
 void tp_txISR(tinyport_t tp){
- 6f2:	0f 93       	push	r16
- 6f4:	1f 93       	push	r17
- 6f6:	cf 93       	push	r28
- 6f8:	df 93       	push	r29
- 6fa:	ec 01       	movw	r28, r24
+	tp_statflash(tp);
 	tp->uart->DATA = rb_read(tp->rbtx);
- 6fc:	08 81       	ld	r16, Y
- 6fe:	19 81       	ldd	r17, Y+1	; 0x01
- 700:	89 85       	ldd	r24, Y+9	; 0x09
- 702:	9a 85       	ldd	r25, Y+10	; 0x0a
- 704:	0e 94 ab 02 	call	0x556	; 0x556 <rb_read>
- 708:	f8 01       	movw	r30, r16
- 70a:	80 83       	st	Z, r24
-	uint8_t tail = tp->rbtx->tail;
- 70c:	e9 85       	ldd	r30, Y+9	; 0x09
- 70e:	fa 85       	ldd	r31, Y+10	; 0x0a
-	uint8_t head = tp->rbtx->head;
-	if(tail == head){
- 710:	93 81       	ldd	r25, Z+3	; 0x03
- 712:	82 81       	ldd	r24, Z+2	; 0x02
- 714:	98 13       	cpse	r25, r24
- 716:	05 c0       	rjmp	.+10     	; 0x722 <tp_txISR+0x30>
-		tp_setTxStatus(tp, TP_TX_STATE_EMPTY);
- 718:	60 e0       	ldi	r22, 0x00	; 0
- 71a:	ce 01       	movw	r24, r28
- 71c:	0e 94 59 03 	call	0x6b2	; 0x6b2 <tp_setTxStatus>
- 720:	04 c0       	rjmp	.+8      	; 0x72a <tp_txISR+0x38>
-	} else {
-		tp_setTxStatus(tp, TP_TX_STATE_HASDATA);
- 722:	61 e0       	ldi	r22, 0x01	; 1
- 724:	ce 01       	movw	r24, r28
- 726:	0e 94 59 03 	call	0x6b2	; 0x6b2 <tp_setTxStatus>
-	if(!(rb_hasdata(tp->rbtx))){ // if buffer empty, turn off DREF interrupt
+ 8be:	08 81       	ld	r16, Y
+ 8c0:	19 81       	ldd	r17, Y+1	; 0x01
+ 8c2:	89 85       	ldd	r24, Y+9	; 0x09
+ 8c4:	9a 85       	ldd	r25, Y+10	; 0x0a
+ 8c6:	0e 94 75 03 	call	0x6ea	; 0x6ea <rb_read>
+ 8ca:	f8 01       	movw	r30, r16
+ 8cc:	80 83       	st	Z, r24
+	if(!(rb_hasdata(tp->rbtx))){  // if no data left to tx,
+ 8ce:	89 85       	ldd	r24, Y+9	; 0x09
+ 8d0:	9a 85       	ldd	r25, Y+10	; 0x0a
+ 8d2:	0e 94 90 03 	call	0x720	; 0x720 <rb_hasdata>
+ 8d6:	81 11       	cpse	r24, r1
+ 8d8:	04 c0       	rjmp	.+8      	; 0x8e2 <tp_txISR+0x36>
 		tp_setTxStatus(tp, TP_TX_STATE_EMPTY);
+ 8da:	60 e0       	ldi	r22, 0x00	; 0
+ 8dc:	ce 01       	movw	r24, r28
+ 8de:	0e 94 3c 04 	call	0x878	; 0x878 <tp_setTxStatus>
 	}
-	*/
-	// handle buffer-ready status, enable interrupt
 }
- 72a:	df 91       	pop	r29
- 72c:	cf 91       	pop	r28
- 72e:	1f 91       	pop	r17
- 730:	0f 91       	pop	r16
- 732:	08 95       	ret
+ 8e2:	df 91       	pop	r29
+ 8e4:	cf 91       	pop	r28
+ 8e6:	1f 91       	pop	r17
+ 8e8:	0f 91       	pop	r16
+ 8ea:	08 95       	ret
 
-00000734 <tp_write>:
+000008ec <tp_write>:
 
 void tp_write(tinyport_t tp, uint8_t data){
- 734:	cf 93       	push	r28
- 736:	df 93       	push	r29
- 738:	ec 01       	movw	r28, r24
+ 8ec:	cf 93       	push	r28
+ 8ee:	df 93       	push	r29
+ 8f0:	ec 01       	movw	r28, r24
 	rb_write(tp->rbtx, data);
- 73a:	89 85       	ldd	r24, Y+9	; 0x09
- 73c:	9a 85       	ldd	r25, Y+10	; 0x0a
- 73e:	0e 94 90 02 	call	0x520	; 0x520 <rb_write>
-	tp_setTxStatus(tp, TP_RX_STATE_HASDATA);
- 742:	61 e0       	ldi	r22, 0x01	; 1
- 744:	ce 01       	movw	r24, r28
- 746:	0e 94 59 03 	call	0x6b2	; 0x6b2 <tp_setTxStatus>
+ 8f2:	89 85       	ldd	r24, Y+9	; 0x09
+ 8f4:	9a 85       	ldd	r25, Y+10	; 0x0a
+ 8f6:	0e 94 5d 03 	call	0x6ba	; 0x6ba <rb_write>
+	tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available
+ 8fa:	61 e0       	ldi	r22, 0x01	; 1
+ 8fc:	ce 01       	movw	r24, r28
+ 8fe:	0e 94 3c 04 	call	0x878	; 0x878 <tp_setTxStatus>
 }
- 74a:	df 91       	pop	r29
- 74c:	cf 91       	pop	r28
- 74e:	08 95       	ret
+ 902:	df 91       	pop	r29
+ 904:	cf 91       	pop	r28
+ 906:	08 95       	ret
 
-00000750 <malloc>:
- 750:	0f 93       	push	r16
- 752:	1f 93       	push	r17
- 754:	cf 93       	push	r28
- 756:	df 93       	push	r29
- 758:	82 30       	cpi	r24, 0x02	; 2
- 75a:	91 05       	cpc	r25, r1
- 75c:	10 f4       	brcc	.+4      	; 0x762 <malloc+0x12>
- 75e:	82 e0       	ldi	r24, 0x02	; 2
- 760:	90 e0       	ldi	r25, 0x00	; 0
- 762:	e0 91 0c 20 	lds	r30, 0x200C	; 0x80200c <__flp>
- 766:	f0 91 0d 20 	lds	r31, 0x200D	; 0x80200d <__flp+0x1>
- 76a:	20 e0       	ldi	r18, 0x00	; 0
- 76c:	30 e0       	ldi	r19, 0x00	; 0
- 76e:	a0 e0       	ldi	r26, 0x00	; 0
- 770:	b0 e0       	ldi	r27, 0x00	; 0
- 772:	30 97       	sbiw	r30, 0x00	; 0
- 774:	19 f1       	breq	.+70     	; 0x7bc <malloc+0x6c>
- 776:	40 81       	ld	r20, Z
- 778:	51 81       	ldd	r21, Z+1	; 0x01
- 77a:	02 81       	ldd	r16, Z+2	; 0x02
- 77c:	13 81       	ldd	r17, Z+3	; 0x03
- 77e:	48 17       	cp	r20, r24
- 780:	59 07       	cpc	r21, r25
- 782:	c8 f0       	brcs	.+50     	; 0x7b6 <malloc+0x66>
- 784:	84 17       	cp	r24, r20
- 786:	95 07       	cpc	r25, r21
- 788:	69 f4       	brne	.+26     	; 0x7a4 <malloc+0x54>
- 78a:	10 97       	sbiw	r26, 0x00	; 0
- 78c:	31 f0       	breq	.+12     	; 0x79a <malloc+0x4a>
- 78e:	12 96       	adiw	r26, 0x02	; 2
- 790:	0c 93       	st	X, r16
- 792:	12 97       	sbiw	r26, 0x02	; 2
- 794:	13 96       	adiw	r26, 0x03	; 3
- 796:	1c 93       	st	X, r17
- 798:	27 c0       	rjmp	.+78     	; 0x7e8 <malloc+0x98>
- 79a:	00 93 0c 20 	sts	0x200C, r16	; 0x80200c <__flp>
- 79e:	10 93 0d 20 	sts	0x200D, r17	; 0x80200d <__flp+0x1>
- 7a2:	22 c0       	rjmp	.+68     	; 0x7e8 <malloc+0x98>
- 7a4:	21 15       	cp	r18, r1
- 7a6:	31 05       	cpc	r19, r1
- 7a8:	19 f0       	breq	.+6      	; 0x7b0 <malloc+0x60>
- 7aa:	42 17       	cp	r20, r18
- 7ac:	53 07       	cpc	r21, r19
- 7ae:	18 f4       	brcc	.+6      	; 0x7b6 <malloc+0x66>
- 7b0:	9a 01       	movw	r18, r20
- 7b2:	bd 01       	movw	r22, r26
- 7b4:	ef 01       	movw	r28, r30
- 7b6:	df 01       	movw	r26, r30
- 7b8:	f8 01       	movw	r30, r16
- 7ba:	db cf       	rjmp	.-74     	; 0x772 <malloc+0x22>
- 7bc:	21 15       	cp	r18, r1
- 7be:	31 05       	cpc	r19, r1
- 7c0:	f9 f0       	breq	.+62     	; 0x800 <malloc+0xb0>
- 7c2:	28 1b       	sub	r18, r24
- 7c4:	39 0b       	sbc	r19, r25
- 7c6:	24 30       	cpi	r18, 0x04	; 4
- 7c8:	31 05       	cpc	r19, r1
- 7ca:	80 f4       	brcc	.+32     	; 0x7ec <malloc+0x9c>
- 7cc:	8a 81       	ldd	r24, Y+2	; 0x02
- 7ce:	9b 81       	ldd	r25, Y+3	; 0x03
- 7d0:	61 15       	cp	r22, r1
- 7d2:	71 05       	cpc	r23, r1
- 7d4:	21 f0       	breq	.+8      	; 0x7de <malloc+0x8e>
- 7d6:	fb 01       	movw	r30, r22
- 7d8:	82 83       	std	Z+2, r24	; 0x02
- 7da:	93 83       	std	Z+3, r25	; 0x03
- 7dc:	04 c0       	rjmp	.+8      	; 0x7e6 <malloc+0x96>
- 7de:	80 93 0c 20 	sts	0x200C, r24	; 0x80200c <__flp>
- 7e2:	90 93 0d 20 	sts	0x200D, r25	; 0x80200d <__flp+0x1>
- 7e6:	fe 01       	movw	r30, r28
- 7e8:	32 96       	adiw	r30, 0x02	; 2
- 7ea:	44 c0       	rjmp	.+136    	; 0x874 <malloc+0x124>
- 7ec:	fe 01       	movw	r30, r28
- 7ee:	e2 0f       	add	r30, r18
- 7f0:	f3 1f       	adc	r31, r19
- 7f2:	81 93       	st	Z+, r24
- 7f4:	91 93       	st	Z+, r25
- 7f6:	22 50       	subi	r18, 0x02	; 2
- 7f8:	31 09       	sbc	r19, r1
- 7fa:	28 83       	st	Y, r18
- 7fc:	39 83       	std	Y+1, r19	; 0x01
- 7fe:	3a c0       	rjmp	.+116    	; 0x874 <malloc+0x124>
- 800:	20 91 0a 20 	lds	r18, 0x200A	; 0x80200a <__brkval>
- 804:	30 91 0b 20 	lds	r19, 0x200B	; 0x80200b <__brkval+0x1>
- 808:	23 2b       	or	r18, r19
- 80a:	41 f4       	brne	.+16     	; 0x81c <malloc+0xcc>
- 80c:	20 91 02 20 	lds	r18, 0x2002	; 0x802002 <__malloc_heap_start>
- 810:	30 91 03 20 	lds	r19, 0x2003	; 0x802003 <__malloc_heap_start+0x1>
- 814:	20 93 0a 20 	sts	0x200A, r18	; 0x80200a <__brkval>
- 818:	30 93 0b 20 	sts	0x200B, r19	; 0x80200b <__brkval+0x1>
- 81c:	20 91 00 20 	lds	r18, 0x2000	; 0x802000 <__data_start>
- 820:	30 91 01 20 	lds	r19, 0x2001	; 0x802001 <__data_start+0x1>
- 824:	21 15       	cp	r18, r1
- 826:	31 05       	cpc	r19, r1
- 828:	41 f4       	brne	.+16     	; 0x83a <malloc+0xea>
- 82a:	2d b7       	in	r18, 0x3d	; 61
- 82c:	3e b7       	in	r19, 0x3e	; 62
- 82e:	40 91 04 20 	lds	r20, 0x2004	; 0x802004 <__malloc_margin>
- 832:	50 91 05 20 	lds	r21, 0x2005	; 0x802005 <__malloc_margin+0x1>
- 836:	24 1b       	sub	r18, r20
- 838:	35 0b       	sbc	r19, r21
- 83a:	e0 91 0a 20 	lds	r30, 0x200A	; 0x80200a <__brkval>
- 83e:	f0 91 0b 20 	lds	r31, 0x200B	; 0x80200b <__brkval+0x1>
- 842:	e2 17       	cp	r30, r18
- 844:	f3 07       	cpc	r31, r19
- 846:	a0 f4       	brcc	.+40     	; 0x870 <malloc+0x120>
- 848:	2e 1b       	sub	r18, r30
- 84a:	3f 0b       	sbc	r19, r31
- 84c:	28 17       	cp	r18, r24
- 84e:	39 07       	cpc	r19, r25
- 850:	78 f0       	brcs	.+30     	; 0x870 <malloc+0x120>
- 852:	ac 01       	movw	r20, r24
- 854:	4e 5f       	subi	r20, 0xFE	; 254
- 856:	5f 4f       	sbci	r21, 0xFF	; 255
- 858:	24 17       	cp	r18, r20
- 85a:	35 07       	cpc	r19, r21
- 85c:	48 f0       	brcs	.+18     	; 0x870 <malloc+0x120>
- 85e:	4e 0f       	add	r20, r30
- 860:	5f 1f       	adc	r21, r31
- 862:	40 93 0a 20 	sts	0x200A, r20	; 0x80200a <__brkval>
- 866:	50 93 0b 20 	sts	0x200B, r21	; 0x80200b <__brkval+0x1>
- 86a:	81 93       	st	Z+, r24
- 86c:	91 93       	st	Z+, r25
- 86e:	02 c0       	rjmp	.+4      	; 0x874 <malloc+0x124>
- 870:	e0 e0       	ldi	r30, 0x00	; 0
- 872:	f0 e0       	ldi	r31, 0x00	; 0
- 874:	cf 01       	movw	r24, r30
- 876:	df 91       	pop	r29
- 878:	cf 91       	pop	r28
- 87a:	1f 91       	pop	r17
- 87c:	0f 91       	pop	r16
- 87e:	08 95       	ret
+00000908 <malloc>:
+ 908:	0f 93       	push	r16
+ 90a:	1f 93       	push	r17
+ 90c:	cf 93       	push	r28
+ 90e:	df 93       	push	r29
+ 910:	82 30       	cpi	r24, 0x02	; 2
+ 912:	91 05       	cpc	r25, r1
+ 914:	10 f4       	brcc	.+4      	; 0x91a <malloc+0x12>
+ 916:	82 e0       	ldi	r24, 0x02	; 2
+ 918:	90 e0       	ldi	r25, 0x00	; 0
+ 91a:	e0 91 10 20 	lds	r30, 0x2010	; 0x802010 <__flp>
+ 91e:	f0 91 11 20 	lds	r31, 0x2011	; 0x802011 <__flp+0x1>
+ 922:	20 e0       	ldi	r18, 0x00	; 0
+ 924:	30 e0       	ldi	r19, 0x00	; 0
+ 926:	a0 e0       	ldi	r26, 0x00	; 0
+ 928:	b0 e0       	ldi	r27, 0x00	; 0
+ 92a:	30 97       	sbiw	r30, 0x00	; 0
+ 92c:	19 f1       	breq	.+70     	; 0x974 <malloc+0x6c>
+ 92e:	40 81       	ld	r20, Z
+ 930:	51 81       	ldd	r21, Z+1	; 0x01
+ 932:	02 81       	ldd	r16, Z+2	; 0x02
+ 934:	13 81       	ldd	r17, Z+3	; 0x03
+ 936:	48 17       	cp	r20, r24
+ 938:	59 07       	cpc	r21, r25
+ 93a:	c8 f0       	brcs	.+50     	; 0x96e <malloc+0x66>
+ 93c:	84 17       	cp	r24, r20
+ 93e:	95 07       	cpc	r25, r21
+ 940:	69 f4       	brne	.+26     	; 0x95c <malloc+0x54>
+ 942:	10 97       	sbiw	r26, 0x00	; 0
+ 944:	31 f0       	breq	.+12     	; 0x952 <malloc+0x4a>
+ 946:	12 96       	adiw	r26, 0x02	; 2
+ 948:	0c 93       	st	X, r16
+ 94a:	12 97       	sbiw	r26, 0x02	; 2
+ 94c:	13 96       	adiw	r26, 0x03	; 3
+ 94e:	1c 93       	st	X, r17
+ 950:	27 c0       	rjmp	.+78     	; 0x9a0 <malloc+0x98>
+ 952:	00 93 10 20 	sts	0x2010, r16	; 0x802010 <__flp>
+ 956:	10 93 11 20 	sts	0x2011, r17	; 0x802011 <__flp+0x1>
+ 95a:	22 c0       	rjmp	.+68     	; 0x9a0 <malloc+0x98>
+ 95c:	21 15       	cp	r18, r1
+ 95e:	31 05       	cpc	r19, r1
+ 960:	19 f0       	breq	.+6      	; 0x968 <malloc+0x60>
+ 962:	42 17       	cp	r20, r18
+ 964:	53 07       	cpc	r21, r19
+ 966:	18 f4       	brcc	.+6      	; 0x96e <malloc+0x66>
+ 968:	9a 01       	movw	r18, r20
+ 96a:	bd 01       	movw	r22, r26
+ 96c:	ef 01       	movw	r28, r30
+ 96e:	df 01       	movw	r26, r30
+ 970:	f8 01       	movw	r30, r16
+ 972:	db cf       	rjmp	.-74     	; 0x92a <malloc+0x22>
+ 974:	21 15       	cp	r18, r1
+ 976:	31 05       	cpc	r19, r1
+ 978:	f9 f0       	breq	.+62     	; 0x9b8 <malloc+0xb0>
+ 97a:	28 1b       	sub	r18, r24
+ 97c:	39 0b       	sbc	r19, r25
+ 97e:	24 30       	cpi	r18, 0x04	; 4
+ 980:	31 05       	cpc	r19, r1
+ 982:	80 f4       	brcc	.+32     	; 0x9a4 <malloc+0x9c>
+ 984:	8a 81       	ldd	r24, Y+2	; 0x02
+ 986:	9b 81       	ldd	r25, Y+3	; 0x03
+ 988:	61 15       	cp	r22, r1
+ 98a:	71 05       	cpc	r23, r1
+ 98c:	21 f0       	breq	.+8      	; 0x996 <malloc+0x8e>
+ 98e:	fb 01       	movw	r30, r22
+ 990:	82 83       	std	Z+2, r24	; 0x02
+ 992:	93 83       	std	Z+3, r25	; 0x03
+ 994:	04 c0       	rjmp	.+8      	; 0x99e <malloc+0x96>
+ 996:	80 93 10 20 	sts	0x2010, r24	; 0x802010 <__flp>
+ 99a:	90 93 11 20 	sts	0x2011, r25	; 0x802011 <__flp+0x1>
+ 99e:	fe 01       	movw	r30, r28
+ 9a0:	32 96       	adiw	r30, 0x02	; 2
+ 9a2:	44 c0       	rjmp	.+136    	; 0xa2c <malloc+0x124>
+ 9a4:	fe 01       	movw	r30, r28
+ 9a6:	e2 0f       	add	r30, r18
+ 9a8:	f3 1f       	adc	r31, r19
+ 9aa:	81 93       	st	Z+, r24
+ 9ac:	91 93       	st	Z+, r25
+ 9ae:	22 50       	subi	r18, 0x02	; 2
+ 9b0:	31 09       	sbc	r19, r1
+ 9b2:	28 83       	st	Y, r18
+ 9b4:	39 83       	std	Y+1, r19	; 0x01
+ 9b6:	3a c0       	rjmp	.+116    	; 0xa2c <malloc+0x124>
+ 9b8:	20 91 0e 20 	lds	r18, 0x200E	; 0x80200e <__brkval>
+ 9bc:	30 91 0f 20 	lds	r19, 0x200F	; 0x80200f <__brkval+0x1>
+ 9c0:	23 2b       	or	r18, r19
+ 9c2:	41 f4       	brne	.+16     	; 0x9d4 <malloc+0xcc>
+ 9c4:	20 91 02 20 	lds	r18, 0x2002	; 0x802002 <__malloc_heap_start>
+ 9c8:	30 91 03 20 	lds	r19, 0x2003	; 0x802003 <__malloc_heap_start+0x1>
+ 9cc:	20 93 0e 20 	sts	0x200E, r18	; 0x80200e <__brkval>
+ 9d0:	30 93 0f 20 	sts	0x200F, r19	; 0x80200f <__brkval+0x1>
+ 9d4:	20 91 00 20 	lds	r18, 0x2000	; 0x802000 <__data_start>
+ 9d8:	30 91 01 20 	lds	r19, 0x2001	; 0x802001 <__data_start+0x1>
+ 9dc:	21 15       	cp	r18, r1
+ 9de:	31 05       	cpc	r19, r1
+ 9e0:	41 f4       	brne	.+16     	; 0x9f2 <malloc+0xea>
+ 9e2:	2d b7       	in	r18, 0x3d	; 61
+ 9e4:	3e b7       	in	r19, 0x3e	; 62
+ 9e6:	40 91 04 20 	lds	r20, 0x2004	; 0x802004 <__malloc_margin>
+ 9ea:	50 91 05 20 	lds	r21, 0x2005	; 0x802005 <__malloc_margin+0x1>
+ 9ee:	24 1b       	sub	r18, r20
+ 9f0:	35 0b       	sbc	r19, r21
+ 9f2:	e0 91 0e 20 	lds	r30, 0x200E	; 0x80200e <__brkval>
+ 9f6:	f0 91 0f 20 	lds	r31, 0x200F	; 0x80200f <__brkval+0x1>
+ 9fa:	e2 17       	cp	r30, r18
+ 9fc:	f3 07       	cpc	r31, r19
+ 9fe:	a0 f4       	brcc	.+40     	; 0xa28 <malloc+0x120>
+ a00:	2e 1b       	sub	r18, r30
+ a02:	3f 0b       	sbc	r19, r31
+ a04:	28 17       	cp	r18, r24
+ a06:	39 07       	cpc	r19, r25
+ a08:	78 f0       	brcs	.+30     	; 0xa28 <malloc+0x120>
+ a0a:	ac 01       	movw	r20, r24
+ a0c:	4e 5f       	subi	r20, 0xFE	; 254
+ a0e:	5f 4f       	sbci	r21, 0xFF	; 255
+ a10:	24 17       	cp	r18, r20
+ a12:	35 07       	cpc	r19, r21
+ a14:	48 f0       	brcs	.+18     	; 0xa28 <malloc+0x120>
+ a16:	4e 0f       	add	r20, r30
+ a18:	5f 1f       	adc	r21, r31
+ a1a:	40 93 0e 20 	sts	0x200E, r20	; 0x80200e <__brkval>
+ a1e:	50 93 0f 20 	sts	0x200F, r21	; 0x80200f <__brkval+0x1>
+ a22:	81 93       	st	Z+, r24
+ a24:	91 93       	st	Z+, r25
+ a26:	02 c0       	rjmp	.+4      	; 0xa2c <malloc+0x124>
+ a28:	e0 e0       	ldi	r30, 0x00	; 0
+ a2a:	f0 e0       	ldi	r31, 0x00	; 0
+ a2c:	cf 01       	movw	r24, r30
+ a2e:	df 91       	pop	r29
+ a30:	cf 91       	pop	r28
+ a32:	1f 91       	pop	r17
+ a34:	0f 91       	pop	r16
+ a36:	08 95       	ret
 
-00000880 <free>:
- 880:	cf 93       	push	r28
- 882:	df 93       	push	r29
- 884:	00 97       	sbiw	r24, 0x00	; 0
- 886:	09 f4       	brne	.+2      	; 0x88a <free+0xa>
- 888:	81 c0       	rjmp	.+258    	; 0x98c <free+0x10c>
- 88a:	fc 01       	movw	r30, r24
- 88c:	32 97       	sbiw	r30, 0x02	; 2
- 88e:	12 82       	std	Z+2, r1	; 0x02
- 890:	13 82       	std	Z+3, r1	; 0x03
- 892:	a0 91 0c 20 	lds	r26, 0x200C	; 0x80200c <__flp>
- 896:	b0 91 0d 20 	lds	r27, 0x200D	; 0x80200d <__flp+0x1>
- 89a:	10 97       	sbiw	r26, 0x00	; 0
- 89c:	81 f4       	brne	.+32     	; 0x8be <free+0x3e>
- 89e:	20 81       	ld	r18, Z
- 8a0:	31 81       	ldd	r19, Z+1	; 0x01
- 8a2:	82 0f       	add	r24, r18
- 8a4:	93 1f       	adc	r25, r19
- 8a6:	20 91 0a 20 	lds	r18, 0x200A	; 0x80200a <__brkval>
- 8aa:	30 91 0b 20 	lds	r19, 0x200B	; 0x80200b <__brkval+0x1>
- 8ae:	28 17       	cp	r18, r24
- 8b0:	39 07       	cpc	r19, r25
- 8b2:	51 f5       	brne	.+84     	; 0x908 <free+0x88>
- 8b4:	e0 93 0a 20 	sts	0x200A, r30	; 0x80200a <__brkval>
- 8b8:	f0 93 0b 20 	sts	0x200B, r31	; 0x80200b <__brkval+0x1>
- 8bc:	67 c0       	rjmp	.+206    	; 0x98c <free+0x10c>
- 8be:	ed 01       	movw	r28, r26
- 8c0:	20 e0       	ldi	r18, 0x00	; 0
- 8c2:	30 e0       	ldi	r19, 0x00	; 0
- 8c4:	ce 17       	cp	r28, r30
- 8c6:	df 07       	cpc	r29, r31
- 8c8:	40 f4       	brcc	.+16     	; 0x8da <free+0x5a>
- 8ca:	4a 81       	ldd	r20, Y+2	; 0x02
- 8cc:	5b 81       	ldd	r21, Y+3	; 0x03
- 8ce:	9e 01       	movw	r18, r28
- 8d0:	41 15       	cp	r20, r1
- 8d2:	51 05       	cpc	r21, r1
- 8d4:	f1 f0       	breq	.+60     	; 0x912 <free+0x92>
- 8d6:	ea 01       	movw	r28, r20
- 8d8:	f5 cf       	rjmp	.-22     	; 0x8c4 <free+0x44>
- 8da:	c2 83       	std	Z+2, r28	; 0x02
- 8dc:	d3 83       	std	Z+3, r29	; 0x03
- 8de:	40 81       	ld	r20, Z
- 8e0:	51 81       	ldd	r21, Z+1	; 0x01
- 8e2:	84 0f       	add	r24, r20
- 8e4:	95 1f       	adc	r25, r21
- 8e6:	c8 17       	cp	r28, r24
- 8e8:	d9 07       	cpc	r29, r25
- 8ea:	59 f4       	brne	.+22     	; 0x902 <free+0x82>
- 8ec:	88 81       	ld	r24, Y
- 8ee:	99 81       	ldd	r25, Y+1	; 0x01
- 8f0:	84 0f       	add	r24, r20
- 8f2:	95 1f       	adc	r25, r21
- 8f4:	02 96       	adiw	r24, 0x02	; 2
- 8f6:	80 83       	st	Z, r24
- 8f8:	91 83       	std	Z+1, r25	; 0x01
- 8fa:	8a 81       	ldd	r24, Y+2	; 0x02
- 8fc:	9b 81       	ldd	r25, Y+3	; 0x03
- 8fe:	82 83       	std	Z+2, r24	; 0x02
- 900:	93 83       	std	Z+3, r25	; 0x03
- 902:	21 15       	cp	r18, r1
- 904:	31 05       	cpc	r19, r1
- 906:	29 f4       	brne	.+10     	; 0x912 <free+0x92>
- 908:	e0 93 0c 20 	sts	0x200C, r30	; 0x80200c <__flp>
- 90c:	f0 93 0d 20 	sts	0x200D, r31	; 0x80200d <__flp+0x1>
- 910:	3d c0       	rjmp	.+122    	; 0x98c <free+0x10c>
- 912:	e9 01       	movw	r28, r18
- 914:	ea 83       	std	Y+2, r30	; 0x02
- 916:	fb 83       	std	Y+3, r31	; 0x03
- 918:	49 91       	ld	r20, Y+
- 91a:	59 91       	ld	r21, Y+
- 91c:	c4 0f       	add	r28, r20
- 91e:	d5 1f       	adc	r29, r21
- 920:	ec 17       	cp	r30, r28
- 922:	fd 07       	cpc	r31, r29
- 924:	61 f4       	brne	.+24     	; 0x93e <free+0xbe>
- 926:	80 81       	ld	r24, Z
- 928:	91 81       	ldd	r25, Z+1	; 0x01
- 92a:	84 0f       	add	r24, r20
- 92c:	95 1f       	adc	r25, r21
- 92e:	02 96       	adiw	r24, 0x02	; 2
- 930:	e9 01       	movw	r28, r18
- 932:	88 83       	st	Y, r24
- 934:	99 83       	std	Y+1, r25	; 0x01
- 936:	82 81       	ldd	r24, Z+2	; 0x02
- 938:	93 81       	ldd	r25, Z+3	; 0x03
- 93a:	8a 83       	std	Y+2, r24	; 0x02
- 93c:	9b 83       	std	Y+3, r25	; 0x03
- 93e:	e0 e0       	ldi	r30, 0x00	; 0
- 940:	f0 e0       	ldi	r31, 0x00	; 0
- 942:	12 96       	adiw	r26, 0x02	; 2
- 944:	8d 91       	ld	r24, X+
- 946:	9c 91       	ld	r25, X
- 948:	13 97       	sbiw	r26, 0x03	; 3
- 94a:	00 97       	sbiw	r24, 0x00	; 0
- 94c:	19 f0       	breq	.+6      	; 0x954 <free+0xd4>
- 94e:	fd 01       	movw	r30, r26
- 950:	dc 01       	movw	r26, r24
- 952:	f7 cf       	rjmp	.-18     	; 0x942 <free+0xc2>
- 954:	8d 91       	ld	r24, X+
- 956:	9c 91       	ld	r25, X
- 958:	11 97       	sbiw	r26, 0x01	; 1
- 95a:	9d 01       	movw	r18, r26
- 95c:	2e 5f       	subi	r18, 0xFE	; 254
- 95e:	3f 4f       	sbci	r19, 0xFF	; 255
- 960:	82 0f       	add	r24, r18
- 962:	93 1f       	adc	r25, r19
- 964:	20 91 0a 20 	lds	r18, 0x200A	; 0x80200a <__brkval>
- 968:	30 91 0b 20 	lds	r19, 0x200B	; 0x80200b <__brkval+0x1>
- 96c:	28 17       	cp	r18, r24
- 96e:	39 07       	cpc	r19, r25
- 970:	69 f4       	brne	.+26     	; 0x98c <free+0x10c>
- 972:	30 97       	sbiw	r30, 0x00	; 0
- 974:	29 f4       	brne	.+10     	; 0x980 <free+0x100>
- 976:	10 92 0c 20 	sts	0x200C, r1	; 0x80200c <__flp>
- 97a:	10 92 0d 20 	sts	0x200D, r1	; 0x80200d <__flp+0x1>
- 97e:	02 c0       	rjmp	.+4      	; 0x984 <free+0x104>
- 980:	12 82       	std	Z+2, r1	; 0x02
- 982:	13 82       	std	Z+3, r1	; 0x03
- 984:	a0 93 0a 20 	sts	0x200A, r26	; 0x80200a <__brkval>
- 988:	b0 93 0b 20 	sts	0x200B, r27	; 0x80200b <__brkval+0x1>
- 98c:	df 91       	pop	r29
- 98e:	cf 91       	pop	r28
- 990:	08 95       	ret
+00000a38 <free>:
+ a38:	cf 93       	push	r28
+ a3a:	df 93       	push	r29
+ a3c:	00 97       	sbiw	r24, 0x00	; 0
+ a3e:	09 f4       	brne	.+2      	; 0xa42 <free+0xa>
+ a40:	81 c0       	rjmp	.+258    	; 0xb44 <free+0x10c>
+ a42:	fc 01       	movw	r30, r24
+ a44:	32 97       	sbiw	r30, 0x02	; 2
+ a46:	12 82       	std	Z+2, r1	; 0x02
+ a48:	13 82       	std	Z+3, r1	; 0x03
+ a4a:	a0 91 10 20 	lds	r26, 0x2010	; 0x802010 <__flp>
+ a4e:	b0 91 11 20 	lds	r27, 0x2011	; 0x802011 <__flp+0x1>
+ a52:	10 97       	sbiw	r26, 0x00	; 0
+ a54:	81 f4       	brne	.+32     	; 0xa76 <free+0x3e>
+ a56:	20 81       	ld	r18, Z
+ a58:	31 81       	ldd	r19, Z+1	; 0x01
+ a5a:	82 0f       	add	r24, r18
+ a5c:	93 1f       	adc	r25, r19
+ a5e:	20 91 0e 20 	lds	r18, 0x200E	; 0x80200e <__brkval>
+ a62:	30 91 0f 20 	lds	r19, 0x200F	; 0x80200f <__brkval+0x1>
+ a66:	28 17       	cp	r18, r24
+ a68:	39 07       	cpc	r19, r25
+ a6a:	51 f5       	brne	.+84     	; 0xac0 <free+0x88>
+ a6c:	e0 93 0e 20 	sts	0x200E, r30	; 0x80200e <__brkval>
+ a70:	f0 93 0f 20 	sts	0x200F, r31	; 0x80200f <__brkval+0x1>
+ a74:	67 c0       	rjmp	.+206    	; 0xb44 <free+0x10c>
+ a76:	ed 01       	movw	r28, r26
+ a78:	20 e0       	ldi	r18, 0x00	; 0
+ a7a:	30 e0       	ldi	r19, 0x00	; 0
+ a7c:	ce 17       	cp	r28, r30
+ a7e:	df 07       	cpc	r29, r31
+ a80:	40 f4       	brcc	.+16     	; 0xa92 <free+0x5a>
+ a82:	4a 81       	ldd	r20, Y+2	; 0x02
+ a84:	5b 81       	ldd	r21, Y+3	; 0x03
+ a86:	9e 01       	movw	r18, r28
+ a88:	41 15       	cp	r20, r1
+ a8a:	51 05       	cpc	r21, r1
+ a8c:	f1 f0       	breq	.+60     	; 0xaca <free+0x92>
+ a8e:	ea 01       	movw	r28, r20
+ a90:	f5 cf       	rjmp	.-22     	; 0xa7c <free+0x44>
+ a92:	c2 83       	std	Z+2, r28	; 0x02
+ a94:	d3 83       	std	Z+3, r29	; 0x03
+ a96:	40 81       	ld	r20, Z
+ a98:	51 81       	ldd	r21, Z+1	; 0x01
+ a9a:	84 0f       	add	r24, r20
+ a9c:	95 1f       	adc	r25, r21
+ a9e:	c8 17       	cp	r28, r24
+ aa0:	d9 07       	cpc	r29, r25
+ aa2:	59 f4       	brne	.+22     	; 0xaba <free+0x82>
+ aa4:	88 81       	ld	r24, Y
+ aa6:	99 81       	ldd	r25, Y+1	; 0x01
+ aa8:	84 0f       	add	r24, r20
+ aaa:	95 1f       	adc	r25, r21
+ aac:	02 96       	adiw	r24, 0x02	; 2
+ aae:	80 83       	st	Z, r24
+ ab0:	91 83       	std	Z+1, r25	; 0x01
+ ab2:	8a 81       	ldd	r24, Y+2	; 0x02
+ ab4:	9b 81       	ldd	r25, Y+3	; 0x03
+ ab6:	82 83       	std	Z+2, r24	; 0x02
+ ab8:	93 83       	std	Z+3, r25	; 0x03
+ aba:	21 15       	cp	r18, r1
+ abc:	31 05       	cpc	r19, r1
+ abe:	29 f4       	brne	.+10     	; 0xaca <free+0x92>
+ ac0:	e0 93 10 20 	sts	0x2010, r30	; 0x802010 <__flp>
+ ac4:	f0 93 11 20 	sts	0x2011, r31	; 0x802011 <__flp+0x1>
+ ac8:	3d c0       	rjmp	.+122    	; 0xb44 <free+0x10c>
+ aca:	e9 01       	movw	r28, r18
+ acc:	ea 83       	std	Y+2, r30	; 0x02
+ ace:	fb 83       	std	Y+3, r31	; 0x03
+ ad0:	49 91       	ld	r20, Y+
+ ad2:	59 91       	ld	r21, Y+
+ ad4:	c4 0f       	add	r28, r20
+ ad6:	d5 1f       	adc	r29, r21
+ ad8:	ec 17       	cp	r30, r28
+ ada:	fd 07       	cpc	r31, r29
+ adc:	61 f4       	brne	.+24     	; 0xaf6 <free+0xbe>
+ ade:	80 81       	ld	r24, Z
+ ae0:	91 81       	ldd	r25, Z+1	; 0x01
+ ae2:	84 0f       	add	r24, r20
+ ae4:	95 1f       	adc	r25, r21
+ ae6:	02 96       	adiw	r24, 0x02	; 2
+ ae8:	e9 01       	movw	r28, r18
+ aea:	88 83       	st	Y, r24
+ aec:	99 83       	std	Y+1, r25	; 0x01
+ aee:	82 81       	ldd	r24, Z+2	; 0x02
+ af0:	93 81       	ldd	r25, Z+3	; 0x03
+ af2:	8a 83       	std	Y+2, r24	; 0x02
+ af4:	9b 83       	std	Y+3, r25	; 0x03
+ af6:	e0 e0       	ldi	r30, 0x00	; 0
+ af8:	f0 e0       	ldi	r31, 0x00	; 0
+ afa:	12 96       	adiw	r26, 0x02	; 2
+ afc:	8d 91       	ld	r24, X+
+ afe:	9c 91       	ld	r25, X
+ b00:	13 97       	sbiw	r26, 0x03	; 3
+ b02:	00 97       	sbiw	r24, 0x00	; 0
+ b04:	19 f0       	breq	.+6      	; 0xb0c <free+0xd4>
+ b06:	fd 01       	movw	r30, r26
+ b08:	dc 01       	movw	r26, r24
+ b0a:	f7 cf       	rjmp	.-18     	; 0xafa <free+0xc2>
+ b0c:	8d 91       	ld	r24, X+
+ b0e:	9c 91       	ld	r25, X
+ b10:	11 97       	sbiw	r26, 0x01	; 1
+ b12:	9d 01       	movw	r18, r26
+ b14:	2e 5f       	subi	r18, 0xFE	; 254
+ b16:	3f 4f       	sbci	r19, 0xFF	; 255
+ b18:	82 0f       	add	r24, r18
+ b1a:	93 1f       	adc	r25, r19
+ b1c:	20 91 0e 20 	lds	r18, 0x200E	; 0x80200e <__brkval>
+ b20:	30 91 0f 20 	lds	r19, 0x200F	; 0x80200f <__brkval+0x1>
+ b24:	28 17       	cp	r18, r24
+ b26:	39 07       	cpc	r19, r25
+ b28:	69 f4       	brne	.+26     	; 0xb44 <free+0x10c>
+ b2a:	30 97       	sbiw	r30, 0x00	; 0
+ b2c:	29 f4       	brne	.+10     	; 0xb38 <free+0x100>
+ b2e:	10 92 10 20 	sts	0x2010, r1	; 0x802010 <__flp>
+ b32:	10 92 11 20 	sts	0x2011, r1	; 0x802011 <__flp+0x1>
+ b36:	02 c0       	rjmp	.+4      	; 0xb3c <free+0x104>
+ b38:	12 82       	std	Z+2, r1	; 0x02
+ b3a:	13 82       	std	Z+3, r1	; 0x03
+ b3c:	a0 93 0e 20 	sts	0x200E, r26	; 0x80200e <__brkval>
+ b40:	b0 93 0f 20 	sts	0x200F, r27	; 0x80200f <__brkval+0x1>
+ b44:	df 91       	pop	r29
+ b46:	cf 91       	pop	r28
+ b48:	08 95       	ret
 
-00000992 <_exit>:
- 992:	f8 94       	cli
+00000b4a <_exit>:
+ b4a:	f8 94       	cli
 
-00000994 <__stop_program>:
- 994:	ff cf       	rjmp	.-2      	; 0x994 <__stop_program>
+00000b4c <__stop_program>:
+ b4c:	ff cf       	rjmp	.-2      	; 0xb4c <__stop_program>
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map
index 84619e3a7ec47747a079183344307d731ac39260..4c23ba088c2496b2d4a7d886be9bdde429702fa9 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map
@@ -2,18 +2,20 @@ Archive member included to satisfy reference by file (symbol)
 
 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
                               C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o (exit)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+                              main.o (__do_copy_data)
 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
                               main.o (__do_clear_bss)
 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
                               ringbuffer.o (malloc)
-c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
-                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) (__do_copy_data)
 
 Allocating common symbols
 Common symbol       size              file
 
 tp2                 0x2               main.o
+tp1                 0x2               main.o
 __brkval            0x2               c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
+tp4                 0x2               main.o
 __flp               0x2               c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
 tp3                 0x2               main.o
 
@@ -24,27 +26,30 @@ Discarded input sections
  .text          0x00000000        0x0 main.o
  .data          0x00000000        0x0 main.o
  .bss           0x00000000        0x0 main.o
+ .text.nointerrupts
+                0x00000000        0xc main.o
+ .text.interrupts
+                0x00000000        0xc main.o
  .text.fakepacket
                 0x00000000       0x7a main.o
+ .text.IRS      0x00000000        0xe main.o
+ .data.psize    0x00000000        0x1 main.o
+ .bss.pcount    0x00000000        0x1 main.o
  .text          0x00000000        0x0 ringbuffer.o
  .data          0x00000000        0x0 ringbuffer.o
  .bss           0x00000000        0x0 ringbuffer.o
  .text.rb_reset
                 0x00000000        0x8 ringbuffer.o
- .text.rb_hasdata
-                0x00000000       0x10 ringbuffer.o
  .text          0x00000000        0x0 tinyport.o
  .data          0x00000000        0x0 tinyport.o
  .bss           0x00000000        0x0 tinyport.o
- .text.tp_statflash
-                0x00000000       0x12 tinyport.o
  .text.tp_stathi
                 0x00000000       0x12 tinyport.o
  .text.tp_statlo
                 0x00000000       0x12 tinyport.o
  .text.tp_test  0x00000000       0x3c tinyport.o
  .text.tp_setRxStatus
-                0x00000000        0x6 tinyport.o
+                0x00000000        0xa tinyport.o
  .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
  .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
  .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
@@ -61,6 +66,22 @@ Discarded input sections
                 0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
  .text.libgcc.fixed
                 0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
  .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
  .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
  .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
@@ -79,22 +100,6 @@ Discarded input sections
                 0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
  .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
  .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
- .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc.mul
-                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc.div
-                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc.prologue
-                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc.builtins
-                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc.fmul
-                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
- .text.libgcc.fixed
-                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
 
 Memory Configuration
 
@@ -221,7 +226,7 @@ END GROUP
 .rela.plt
  *(.rela.plt)
 
-.text           0x00000000      0x996
+.text           0x00000000      0xb4e
  *(.vectors)
  .vectors       0x00000000      0x1fc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o
                 0x00000000                __vector_default
@@ -262,10 +267,10 @@ END GROUP
  *(.init3)
  *(.init3)
  *(.init4)
- .init4         0x00000214       0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
-                0x00000214                __do_clear_bss
- .init4         0x00000224       0x1c c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
-                0x00000224                __do_copy_data
+ .init4         0x00000214       0x1c c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o)
+                0x00000214                __do_copy_data
+ .init4         0x00000230       0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_clear_bss.o)
+                0x00000230                __do_clear_bss
  *(.init4)
  *(.init5)
  *(.init5)
@@ -309,7 +314,6 @@ END GROUP
                 0x00000248                __vector_6
                 0x00000248                __vector_110
                 0x00000248                __vector_31
-                0x00000248                __vector_92
                 0x00000248                __vector_35
                 0x00000248                __vector_78
                 0x00000248                __vector_74
@@ -324,7 +328,6 @@ END GROUP
                 0x00000248                __vector_30
                 0x00000248                __vector_73
                 0x00000248                __vector_45
-                0x00000248                __vector_25
                 0x00000248                __vector_93
                 0x00000248                __vector_61
                 0x00000248                __vector_11
@@ -381,7 +384,6 @@ END GROUP
                 0x00000248                __vector_94
                 0x00000248                __vector_126
                 0x00000248                __vector_8
-                0x00000248                __vector_26
                 0x00000248                __vector_48
                 0x00000248                __vector_124
                 0x00000248                __vector_116
@@ -405,60 +407,71 @@ END GROUP
                 0x00000248                __vector_120
                 0x0000024c                . = ALIGN (0x2)
  *(.text.*)
- .text.nointerrupts
-                0x0000024c        0xc main.o
-                0x0000024c                nointerrupts
- .text.interrupts
-                0x00000258        0xc main.o
-                0x00000258                interrupts
- .text.main     0x00000264       0xa0 main.o
-                0x00000264                main
+ .text.main     0x0000024c       0xcc main.o
+                0x0000024c                main
+ .text.handoff  0x00000318       0x3c main.o
+                0x00000318                handoff
+ .text.__vector_25
+                0x00000354       0x6e main.o
+                0x00000354                __vector_25
+ .text.__vector_26
+                0x000003c2       0x6e main.o
+                0x000003c2                __vector_26
  .text.__vector_28
-                0x00000304       0x6e main.o
-                0x00000304                __vector_28
+                0x00000430       0x6e main.o
+                0x00000430                __vector_28
  .text.__vector_29
-                0x00000372       0x6e main.o
-                0x00000372                __vector_29
+                0x0000049e       0x6e main.o
+                0x0000049e                __vector_29
  .text.__vector_88
-                0x000003e0       0x6e main.o
-                0x000003e0                __vector_88
+                0x0000050c       0x6e main.o
+                0x0000050c                __vector_88
  .text.__vector_89
-                0x0000044e       0x6e main.o
-                0x0000044e                __vector_89
- .text.rb_new   0x000004bc       0x64 ringbuffer.o
-                0x000004bc                rb_new
+                0x0000057a       0x6e main.o
+                0x0000057a                __vector_89
+ .text.__vector_92
+                0x000005e8       0x6e main.o
+                0x000005e8                __vector_92
+ .text.rb_new   0x00000656       0x64 ringbuffer.o
+                0x00000656                rb_new
  .text.rb_write
-                0x00000520       0x36 ringbuffer.o
-                0x00000520                rb_write
- .text.rb_read  0x00000556       0x3e ringbuffer.o
-                0x00000556                rb_read
- .text.tp_new   0x00000594       0x6c tinyport.o
-                0x00000594                tp_new
- .text.tp_init  0x00000600       0x6c tinyport.o
-                0x00000600                tp_init
+                0x000006ba       0x30 ringbuffer.o
+                0x000006ba                rb_write
+ .text.rb_read  0x000006ea       0x36 ringbuffer.o
+                0x000006ea                rb_read
+ .text.rb_hasdata
+                0x00000720       0x10 ringbuffer.o
+                0x00000720                rb_hasdata
+ .text.tp_new   0x00000730       0x6e tinyport.o
+                0x00000730                tp_new
+ .text.tp_init  0x0000079e       0x6c tinyport.o
+                0x0000079e                tp_init
+ .text.tp_statflash
+                0x0000080a       0x12 tinyport.o
+                0x0000080a                tp_statflash
  .text.tp_rxISR
-                0x0000066c       0x1e tinyport.o
-                0x0000066c                tp_rxISR
- .text.tp_read  0x0000068a       0x28 tinyport.o
-                0x0000068a                tp_read
+                0x0000081c       0x52 tinyport.o
+                0x0000081c                tp_rxISR
+ .text.tp_read  0x0000086e        0xa tinyport.o
+                0x0000086e                tp_read
  .text.tp_setTxStatus
-                0x000006b2       0x40 tinyport.o
-                0x000006b2                tp_setTxStatus
+                0x00000878       0x34 tinyport.o
+                0x00000878                tp_setTxStatus
  .text.tp_txISR
-                0x000006f2       0x42 tinyport.o
-                0x000006f2                tp_txISR
+                0x000008ac       0x40 tinyport.o
+                0x000008ac                tp_txISR
  .text.tp_write
-                0x00000734       0x1c tinyport.o
-                0x00000734                tp_write
+                0x000008ec       0x1c tinyport.o
+                0x000008ec                tp_write
  .text.avr-libc
-                0x00000750      0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
-                0x00000750                malloc
-                0x00000880                free
-                0x00000992                . = ALIGN (0x2)
+                0x00000908      0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
+                0x00000908                malloc
+                0x00000a38                free
+                0x00000b4a                . = ALIGN (0x2)
  *(.fini9)
- .fini9         0x00000992        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
-                0x00000992                _exit
-                0x00000992                exit
+ .fini9         0x00000b4a        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
+                0x00000b4a                _exit
+                0x00000b4a                exit
  *(.fini9)
  *(.fini8)
  *(.fini8)
@@ -477,11 +490,11 @@ END GROUP
  *(.fini1)
  *(.fini1)
  *(.fini0)
- .fini0         0x00000992        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
+ .fini0         0x00000b4a        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o)
  *(.fini0)
-                0x00000996                _etext = .
+                0x00000b4e                _etext = .
 
-.data           0x00802000        0x6 load address 0x00000996
+.data           0x00802000        0x6 load address 0x00000b4e
                 0x00802000                PROVIDE (__data_start, .)
  *(.data)
  .data          0x00802000        0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
@@ -496,27 +509,29 @@ END GROUP
                 0x00802006                _edata = .
                 0x00802006                PROVIDE (__data_end, .)
 
-.bss            0x00802006        0x8
+.bss            0x00802006        0xc
                 0x00802006                PROVIDE (__bss_start, .)
  *(.bss)
  *(.bss*)
  *(COMMON)
- COMMON         0x00802006        0x4 main.o
+ COMMON         0x00802006        0x8 main.o
                 0x00802006                tp2
-                0x00802008                tp3
- COMMON         0x0080200a        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
-                0x0080200a                __brkval
-                0x0080200c                __flp
-                0x0080200e                PROVIDE (__bss_end, .)
-                0x00000996                __data_load_start = LOADADDR (.data)
-                0x0000099c                __data_load_end = (__data_load_start + SIZEOF (.data))
-
-.noinit         0x0080200e        0x0
+                0x00802008                tp1
+                0x0080200a                tp4
+                0x0080200c                tp3
+ COMMON         0x0080200e        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o)
+                0x0080200e                __brkval
+                0x00802010                __flp
+                0x00802012                PROVIDE (__bss_end, .)
+                0x00000b4e                __data_load_start = LOADADDR (.data)
+                0x00000b54                __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit         0x00802012        0x0
                 [!provide]                PROVIDE (__noinit_start, .)
  *(.noinit*)
                 [!provide]                PROVIDE (__noinit_end, .)
-                0x0080200e                _end = .
-                0x0080200e                PROVIDE (__heap_start, .)
+                0x00802012                _end = .
+                0x00802012                PROVIDE (__heap_start, .)
 
 .eeprom         0x00810000        0x0
  *(.eeprom*)
@@ -583,60 +598,60 @@ END GROUP
 .debug_sfnames
  *(.debug_sfnames)
 
-.debug_aranges  0x00000000      0x110
+.debug_aranges  0x00000000      0x138
  *(.debug_aranges)
  .debug_aranges
-                0x00000000       0x58 main.o
+                0x00000000       0x80 main.o
  .debug_aranges
-                0x00000058       0x40 ringbuffer.o
+                0x00000080       0x40 ringbuffer.o
  .debug_aranges
-                0x00000098       0x78 tinyport.o
+                0x000000c0       0x78 tinyport.o
 
 .debug_pubnames
  *(.debug_pubnames)
 
-.debug_info     0x00000000     0x3e75
+.debug_info     0x00000000     0x4072
  *(.debug_info .gnu.linkonce.wi.*)
  .debug_info    0x00000000     0x284f C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o
- .debug_info    0x0000284f      0xa0b main.o
- .debug_info    0x0000325a      0x281 ringbuffer.o
- .debug_info    0x000034db      0x99a tinyport.o
+ .debug_info    0x0000284f      0xc39 main.o
+ .debug_info    0x00003488      0x281 ringbuffer.o
+ .debug_info    0x00003709      0x969 tinyport.o
 
-.debug_abbrev   0x00000000     0x2bca
+.debug_abbrev   0x00000000     0x2c94
  *(.debug_abbrev)
  .debug_abbrev  0x00000000     0x262c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o
- .debug_abbrev  0x0000262c      0x1ac main.o
- .debug_abbrev  0x000027d8      0x1a9 ringbuffer.o
- .debug_abbrev  0x00002981      0x249 tinyport.o
+ .debug_abbrev  0x0000262c      0x246 main.o
+ .debug_abbrev  0x00002872      0x1a9 ringbuffer.o
+ .debug_abbrev  0x00002a1b      0x279 tinyport.o
 
-.debug_line     0x00000000      0xb13
+.debug_line     0x00000000      0xc49
  *(.debug_line .debug_line.* .debug_line_end)
  .debug_line    0x00000000      0x3b5 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o
- .debug_line    0x000003b5      0x2a3 main.o
- .debug_line    0x00000658      0x18b ringbuffer.o
- .debug_line    0x000007e3      0x330 tinyport.o
+ .debug_line    0x000003b5      0x3af main.o
+ .debug_line    0x00000764      0x18b ringbuffer.o
+ .debug_line    0x000008ef      0x35a tinyport.o
 
-.debug_frame    0x00000000      0x38c
+.debug_frame    0x00000000      0x4b8
  *(.debug_frame)
- .debug_frame   0x00000000      0x1c0 main.o
- .debug_frame   0x000001c0       0x90 ringbuffer.o
- .debug_frame   0x00000250      0x13c tinyport.o
+ .debug_frame   0x00000000      0x2f8 main.o
+ .debug_frame   0x000002f8       0x90 ringbuffer.o
+ .debug_frame   0x00000388      0x130 tinyport.o
 
-.debug_str      0x00000000     0x2311
+.debug_str      0x00000000     0x23a2
  *(.debug_str)
  .debug_str     0x00000000     0x1aa8 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o
- .debug_str     0x00001aa8      0x52b main.o
-                                0x586 (size before relaxing)
- .debug_str     0x00001fd3       0x5f ringbuffer.o
+ .debug_str     0x00001aa8      0x5c9 main.o
+                                0x623 (size before relaxing)
+ .debug_str     0x00002071       0x5f ringbuffer.o
                                 0x218 (size before relaxing)
- .debug_str     0x00002032      0x2df tinyport.o
-                                0x666 (size before relaxing)
+ .debug_str     0x000020d0      0x2d2 tinyport.o
+                                0x680 (size before relaxing)
 
-.debug_loc      0x00000000      0xb72
+.debug_loc      0x00000000      0xd9c
  *(.debug_loc)
- .debug_loc     0x00000000      0x3af main.o
- .debug_loc     0x000003af      0x1cd ringbuffer.o
- .debug_loc     0x0000057c      0x5f6 tinyport.o
+ .debug_loc     0x00000000      0x6ce main.o
+ .debug_loc     0x000006ce      0x1cd ringbuffer.o
+ .debug_loc     0x0000089b      0x501 tinyport.o
 
 .debug_macinfo
  *(.debug_macinfo)
@@ -656,11 +671,11 @@ END GROUP
 .debug_pubtypes
  *(.debug_pubtypes)
 
-.debug_ranges   0x00000000       0xe0
+.debug_ranges   0x00000000      0x108
  *(.debug_ranges)
- .debug_ranges  0x00000000       0x48 main.o
- .debug_ranges  0x00000048       0x30 ringbuffer.o
- .debug_ranges  0x00000078       0x68 tinyport.o
+ .debug_ranges  0x00000000       0x70 main.o
+ .debug_ranges  0x00000070       0x30 ringbuffer.o
+ .debug_ranges  0x000000a0       0x68 tinyport.o
 
 .debug_macro
  *(.debug_macro)
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec
index d745ab0cde52baf3fb8cff85d0ba192b630f349a..4dfc915df0fd95df68b579b7f2c6e5775b6f8df6 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec
@@ -5,8 +5,8 @@ S11300200C9424010C9424010C9424010C942401B8
 S11300300C9424010C9424010C9424010C942401A8
 S11300400C9424010C9424010C9424010C94240198
 S11300500C9424010C9424010C9424010C94240188
-S11300600C9424010C9424010C9424010C94240178
-S11300700C9482010C94B9010C9424010C94240175
+S11300600C9424010C94AA010C94E1010C94240135
+S11300700C9418020C944F020C9424010C94240147
 S11300800C9424010C9424010C9424010C94240158
 S11300900C9424010C9424010C9424010C94240148
 S11300A00C9424010C9424010C9424010C94240138
@@ -21,8 +21,8 @@ S11301200C9424010C9424010C9424010C942401B7
 S11301300C9424010C9424010C9424010C942401A7
 S11301400C9424010C9424010C9424010C94240197
 S11301500C9424010C9424010C9424010C94240187
-S11301600C94F0010C9427020C9424010C942401A7
-S11301700C9424010C9424010C9424010C94240167
+S11301600C9486020C94BD020C9424010C9424017A
+S11301700C94F4020C9424010C9424010C94240196
 S11301800C9424010C9424010C9424010C94240157
 S11301900C9424010C9424010C9424010C94240147
 S11301A00C9424010C9424010C9424010C94240137
@@ -32,126 +32,153 @@ S11301D00C9424010C9424010C9424010C94240107
 S11301E00C9424010C9424010C9424010C942401F7
 S11301F00C9424010C9424010C94240111241FBE9A
 S1130200CFEFCDBFDFE3DEBF00E00CBF18BE19BEE9
-S11302101ABE1BBE20E2A6E0B0E201C01D92AE30C1
-S1130220B207E1F710E2A0E0B0E2E6E9F9E000E0AD
-S11302300BBF02C007900D92A630B107D9F71BBEC1
-S11302400E9432010C94C9040C940000E0EAF0E02E
-S113025082818FEF82830895E0EAF0E082818760F3
-S113026082830895E0E5F0E088E1858380E180837E
-S1130270818184FFFDCF88ED84BF84E080934000BA
-S113028000E220E840E460E476E080EB98E00E943D
-S1130290CA0280930620909307200E94000300E185
-S11302A028E044E060E676E080EA99E00E94CA0231
-S11302B080930820909309200E94000380E180939A
-S11302C04106E0EAF0E0828187608283789400E46A
-S11302D016E0C0E10E942601E0910620F09107207B
-S11302E08585882351F0CF010E944503682F8091B2
-S11302F00820909109200E949A03F801C7830E9464
-S11303002C01E8CF1F920F920FB60F92112408B65A
-S11303100F9218BE09B60F9219BE0BB60F921BBEF0
-S11303202F933F934F935F936F937F938F939F93F9
-S1130330AF93BF93EF93FF93809106209091072092
-S11303400E943603FF91EF91BF91AF919F918F91DE
-S11303507F916F915F914F913F912F910F900BBEC1
-S11303600F9009BE0F9008BE0F900FBE0F901F9004
-S113037018951F920F920FB60F92112408B60F9280
-S113038018BE09B60F9219BE0BB60F921BBE2F935F
-S11303903F934F935F936F937F938F939F93AF9309
-S11303A0BF93EF93FF9380910620909107200E94C2
-S11303B07903FF91EF91BF91AF919F918F917F91BD
-S11303C06F915F914F913F912F910F900BBE0F90C2
-S11303D009BE0F9008BE0F900FBE0F901F90189586
-S11303E01F920F920FB60F92112408B60F9218BEE7
-S11303F009B60F9219BE0BB60F921BBE2F933F93F3
-S11304004F935F936F937F938F939F93AF93BF9318
-S1130410EF93FF9380910820909109200E94360366
-S1130420FF91EF91BF91AF919F918F917F916F91C8
-S11304305F914F913F912F910F900BBE0F9009BE8A
-S11304400F9008BE0F900FBE0F901F9018951F922B
-S11304500F920FB60F92112408B60F9218BE09B668
-S11304600F9219BE0BB60F921BBE2F933F934F935F
-S11304705F936F937F938F939F93AF93BF93EF9308
-S1130480FF9380910820909109200E947903FF91A5
-S1130490EF91BF91AF919F918F917F916F915F91F8
-S11304A04F913F912F910F900BBE0F9009BE0F906B
-S11304B008BE0F900FBE0F901F901895CF92DF9239
-S11304C0EF92FF92CF93DF936B017C0188E090E081
-S11304D00E94A803EC01892BD1F0D701C601019633
-S11304E0A11DB11D8C839D83AE83BF830E94A8038D
-S11304F088839983892B29F01A821B828C2F9D2F44
-S113050008C0CE010E94400480E090E002C080E078
-S113051090E0DF91CF91FF90EF90DF90CF9008951E
-S1130520FC018281A081B181A80FB11D6C9342812D
-S11305304F5F428350E060E070E084819581A68142
-S1130540B7810197A109B109481759076A077B07C1
-S113055008F0128208950F931F93FC014381A08138
-S1130560B181A40FB11D8C914F5F438350E060E0D3
-S113057070E0048115812681378101501109210918
-S11305803109401751076207730708F013821F915E
-S11305900F910895AF92BF92CF92DF92FF920F9383
-S11305A01F93CF93DF935C016B01F42E122F8EE027
-S11305B090E00E94A803EC01A882B982CA82DB827F
-S11305C0FC821D830E8360E170E080E090E00E9475
-S11305D05E028F83988760E170E080E090E00E9483
-S11305E05E0289879A871C861D86CE01DF91CF9192
-S11305F01F910F91FF90DF90CF90BF90AF9008951F
-S1130600FC01A081B1818BE916968C93A081B18104
-S113061017961C92A081B18113968C9113978061D7
-S113062013968C93A081B18188E114968C93A08158
-S1130630B18183E015968C93A281B381858115964F
-S11306408C93A281B381858111968C93A281B3810D
-S1130650848112968C93A281B381848116968C93A3
-S1130660A281B381868111968C930895CF93DF93F1
-S1130670EC01E881F98160818F8198850E94900264
-S113068081E08D87DF91CF910895CF93DF93EC01C3
-S11306908F8198850E94AB02EF81F8852381928136
-S11306A0291302C01D8602C091E09D87DF91CF917E
-S11306B00895FC016487662371F0A081B1811396CB
-S11306C08C911397816013968C93A281B381868158
-S11306D015968C930895A081B18113968C911397EC
-S11306E08C7F13968C93A281B381868116968C930A
-S11306F008950F931F93CF93DF93EC010881198121
-S113070089859A850E94AB02F8018083E985FA8580
-S113071093818281981305C060E0CE010E94590341
-S113072004C061E0CE010E945903DF91CF911F9173
-S11307300F910895CF93DF93EC0189859A850E94E8
-S1130740900261E0CE010E945903DF91CF91089598
-S11307500F931F93CF93DF938230910510F482E0BF
-S113076090E0E0910C20F0910D2020E030E0A0E03A
-S1130770B0E0309719F1408151810281138148170B
-S11307805907C8F08417950769F4109731F0129649
-S11307900C93129713961C9327C000930C2010936C
-S11307A00D2022C02115310519F04217530718F402
-S11307B09A01BD01EF01DF01F801DBCF21153105FD
-S11307C0F9F0281B390B2430310580F48A819B8190
-S11307D06115710521F0FB018283938304C080932A
-S11307E00C2090930D20FE01329644C0FE01E20FCE
-S11307F0F31F8193919322503109288339833AC09E
-S113080020910A2030910B20232B41F420910220C7
-S11308103091032020930A2030930B202091002054
-S1130820309101202115310541F42DB73EB7409197
-S1130830042050910520241B350BE0910A20F091EF
-S11308400B20E217F307A0F42E1B3F0B28173907E0
-S113085078F0AC014E5F5F4F2417350748F04E0F18
-S11308605F1F40930A2050930B208193919302C001
-S1130870E0E0F0E0CF01DF91CF911F910F91089557
-S1130880CF93DF93009709F481C0FC013297128261
-S11308901382A0910C20B0910D20109781F4208137
-S11308A03181820F931F20910A2030910B20281749
-S11308B0390751F5E0930A20F0930B2067C0ED014E
-S11308C020E030E0CE17DF0740F44A815B819E01CF
-S11308D041155105F1F0EA01F5CFC283D38340817C
-S11308E05181840F951FC817D90759F488819981BC
-S11308F0840F951F0296808391838A819B818283D2
-S113090093832115310529F4E0930C20F0930D20F5
-S11309103DC0E901EA83FB8349915991C40FD51F76
-S1130920EC17FD0761F480819181840F951F029675
-S1130930E90188839983828193818A839B83E0E0A0
-S1130940F0E012968D919C911397009719F0FD0198
-S1130950DC01F7CF8D919C9111979D012E5F3F4F44
-S1130960820F931F20910A2030910B2028173907FA
-S113097069F4309729F410920C2010920D2002C0D3
-S113098012821382A0930A20B0930B20DF91CF919F
-S10909900895F894FFCF66
-S109099600000E20200009
+S11302101ABE1BBE10E2A0E0B0E2EEE4FBE000E098
+S11302200BBF02C007900D92A630B107D9F71BBED1
+S113023020E2A6E0B0E201C01D92A231B207E1F7CC
+S11302400E9426010C94A5050C940000E0E5F0E062
+S113025088E1858380E18083818184FFFDCF88EDFF
+S113026084BF84E08093400000E128E044E060E43F
+S113027076E080EA98E00E949803809308209093A7
+S113028009200E94CF0300E220E840E460E476E025
+S113029080EB98E00E9498038093062090930720B7
+S11302A00E94CF0300E128E044E060E676E080EAC3
+S11302B099E00E94980380930C2090930D200E9453
+S11302C0CF0300E220E840E460E676E080EB99E0CA
+S11302D00E94980380930A2090930B200E94CF03DE
+S11302E0E0EAF0E08281876082837894809108203C
+S11302F0909109200E94050480910C2090910D207A
+S11303000E9405042FE78AE196E021508040904046
+S1130310E1F700C00000EACFCF93DF931F92CDB77F
+S1130320DEB7BE016F5F7F4F0E9437046981809101
+S11303300A2090910B200E9476042FE78AE196E030
+S1130340215080409040E1F700C000000F90DF9101
+S1130350CF9108951F920F920FB60F92112408B6F1
+S11303600F9218BE09B60F9219BE0BB60F921BBEA0
+S11303702F933F934F935F936F937F938F939F93A9
+S1130380AF93BF93EF93FF9380910820909109203E
+S11303900E940E04FF91EF91BF91AF919F918F91B5
+S11303A07F916F915F914F913F912F910F900BBE71
+S11303B00F9009BE0F9008BE0F900FBE0F901F90B4
+S11303C018951F920F920FB60F92112408B60F9230
+S11303D018BE09B60F9219BE0BB60F921BBE2F930F
+S11303E03F934F935F936F937F938F939F93AF93B9
+S11303F0BF93EF93FF9380910820909109200E946E
+S11304005604FF91EF91BF91AF919F918F917F918E
+S11304106F915F914F913F912F910F900BBE0F9071
+S113042009BE0F9008BE0F900FBE0F901F90189535
+S11304301F920F920FB60F92112408B60F9218BE96
+S113044009B60F9219BE0BB60F921BBE2F933F93A2
+S11304504F935F936F937F938F939F93AF93BF93C8
+S1130460EF93FF9380910620909107200E940E0441
+S1130470FF91EF91BF91AF919F918F917F916F9178
+S11304805F914F913F912F910F900BBE0F9009BE3A
+S11304900F9008BE0F900FBE0F901F9018951F92DB
+S11304A00F920FB60F92112408B60F9218BE09B618
+S11304B00F9219BE0BB60F921BBE2F933F934F930F
+S11304C05F936F937F938F939F93AF93BF93EF93B8
+S11304D0FF9380910620909107200E945604FF917B
+S11304E0EF91BF91AF919F918F917F916F915F91A8
+S11304F04F913F912F910F900BBE0F9009BE0F901B
+S113050008BE0F900FBE0F901F9018951F920F9268
+S11305100FB60F92112408B60F9218BE09B60F92A7
+S113052019BE0BB60F921BBE2F933F934F935F934D
+S11305306F937F938F939F93AF93BF93EF93FF93A7
+S113054080910C2090910D200E940E04FF91EF9158
+S1130550BF91AF919F918F917F916F915F914F91D7
+S11305603F912F910F900BBE0F9009BE0F9008BEC4
+S11305700F900FBE0F901F9018951F920F920FB6F9
+S11305800F92112408B60F9218BE09B60F9219BE25
+S11305900BB60F921BBE2F933F934F935F936F93B2
+S11305A07F938F939F93AF93BF93EF93FF93809128
+S11305B00C2090910D200E945604FF91EF91BF9161
+S11305C0AF919F918F917F916F915F914F913F91E7
+S11305D02F910F900BBE0F9009BE0F9008BE0F9085
+S11305E00FBE0F901F9018951F920F920FB60F9287
+S11305F0112408B60F9218BE09B60F9219BE0BB695
+S11306000F921BBE2F933F934F935F936F937F93F0
+S11306108F939F93AF93BF93EF93FF9380910A209F
+S113062090910B200E945604FF91EF91BF91AF91DE
+S11306309F918F917F916F915F914F913F912F91F6
+S11306400F900BBE0F9009BE0F9008BE0F900FBE07
+S11306500F901F901895CF92DF92EF92FF92CF9355
+S1130660DF936B017C0188E090E00E948404EC013C
+S1130670892BD1F0D701C6010196A11DB11D8C8330
+S11306809D83AE83BF830E94840488839983892BCE
+S113069029F01A821B828C2F9D2F08C0CE010E9444
+S11306A01C0580E090E002C080E090E0DF91CF91F3
+S11306B0FF90EF90DF90CF900895FC018281A0819C
+S11306C0B181A80FB11D6C9342814F5F428350E00A
+S11306D060E070E084819581A681B781481759074D
+S11306E06A077B0708F0128208950F931F93FC0199
+S11306F04381A081B181A40FB11D8C914F5F4383CD
+S113070050E060E070E00481158126813781401754
+S113071051076207730708F013821F910F91089520
+S1130720FC0181E023819281291301C080E00895B6
+S1130730AF92BF92CF92DF92FF920F931F93CF930A
+S1130740DF935C016B01F42E122F8EE090E00E9487
+S11307508404EC01A882B982CA82DB82FC821D83F4
+S11307600E8360E170E080E090E00E942B038F83B1
+S1130770988760E170E080E090E00E942B03898715
+S11307809A871B861C861D86CE01DF91CF911F910F
+S11307900F91FF90DF90CF90BF90AF900895FC0130
+S11307A0A081B1818BE916968C93A081B1811796B3
+S11307B01C92A081B18113968C911397806113963A
+S11307C08C93A081B18188E114968C93A081B1812E
+S11307D083E015968C93A281B381858115968C93C1
+S11307E0A281B381858111968C93A281B381848186
+S11307F012968C93A281B381848116968C93A281E4
+S1130800B381868111968C930895DC011296ED9143
+S1130810FC91139716968C9187830895CF93DF9359
+S1130820EC01EA81FB818E818783E881F9819081E3
+S11308308D85882319F0813031F011C09E3779F409
+S113084081E08D870CC09E3729F41D86CE010E945D
+S11308508C0105C060818F8198850E945D038C8521
+S1130860813011F081E08C87DF91CF91089581E58B
+S1130870FB01808380E00895FC0183858617A9F03D
+S1130880662351F0A081B18113968C9113978160F6
+S113089013968C9363870895A081B18113968C91EC
+S11308A013978C7F13968C93138608950F931F933D
+S11308B0CF93DF93EC01EA81FB818E8187830881EA
+S11308C0198189859A850E947503F8018083898539
+S11308D09A850E949003811104C060E0CE010E94B9
+S11308E03C04DF91CF911F910F910895CF93DF9333
+S11308F0EC0189859A850E945D0361E0CE010E9426
+S11309003C04DF91CF9108950F931F93CF93DF930E
+S11309108230910510F482E090E0E0911020F09193
+S1130920112020E030E0A0E0B0E0309719F14081E0
+S113093051810281138148175907C8F0841795071C
+S113094069F4109731F012960C93129713961C9336
+S113095027C0009310201093112022C021153105C7
+S113096019F04217530718F49A01BD01EF01DF0192
+S1130970F801DBCF21153105F9F0281B390B2430A0
+S1130980310580F48A819B816115710521F0FB0199
+S11309908283938304C08093102090931120FE01DE
+S11309A0329644C0FE01E20FF31F819391932250CB
+S11309B03109288339833AC020910E2030910F20C9
+S11309C0232B41F4209102203091032020930E2008
+S11309D030930F2020910020309101202115310502
+S11309E041F42DB73EB74091042050910520241BBB
+S11309F0350BE0910E20F0910F20E217F307A0F4DD
+S1130A002E1B3F0B2817390778F0AC014E5F5F4F60
+S1130A102417350748F04E0F5F1F40930E20509364
+S1130A200F208193919302C0E0E0F0E0CF01DF91C9
+S1130A30CF911F910F910895CF93DF93009709F4FD
+S1130A4081C0FC01329712821382A0911020B091D0
+S1130A501120109781F420813181820F931F2091FE
+S1130A600E2030910F202817390751F5E0930E20FE
+S1130A70F0930F2067C0ED0120E030E0CE17DF07D0
+S1130A8040F44A815B819E0141155105F1F0EA0170
+S1130A90F5CFC283D38340815181840F951FC8173A
+S1130AA0D90759F488819981840F951F0296808310
+S1130AB091838A819B81828393832115310529F453
+S1130AC0E0931020F09311203DC0E901EA83FB83F9
+S1130AD049915991C40FD51FEC17FD0761F480812A
+S1130AE09181840F951F0296E901888399838281FD
+S1130AF093818A839B83E0E0F0E012968D919C9130
+S1130B001397009719F0FD01DC01F7CF8D919C91AB
+S1130B1011979D012E5F3F4F820F931F20910E204E
+S1130B2030910F202817390769F4309729F410926F
+S1130B3010201092112002C012821382A0930E2062
+S1110B40B0930F20DF91CF910895F894FFCF6A
+S1090B4E0000122020004B
 S9030000FC
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.o b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.o
index 6419e839941a5f6067511c21370b9a1317b692e6..2dec92831b79c6032e0501569bfcf8b3b89a25e7 100644
Binary files a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.o and b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.o differ
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.o b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.o
index 165975ab8dbc898911e08465c64ff29b98a9cf55..3a03d39dbcc451a5647012b7257d7ecdd828c2a4 100644
Binary files a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.o and b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.o differ
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.o b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.o
index c451e82486525fd79bf00fc17ca45bfcb7cf1291..6f62e848cd04b7d3cf3ec7ae0400c17907c0633c 100644
Binary files a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.o and b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.o differ
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/atxmega-a4u-wakeup.cproj b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/atxmega-a4u-wakeup.cproj
index c7ead8a23ed6084e891d90b268693309fdaa99cf..c1a339cd3ede30c1855dcb9697270ae99491873a 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/atxmega-a4u-wakeup.cproj
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/atxmega-a4u-wakeup.cproj
@@ -96,41 +96,41 @@
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <ToolchainSettings>
       <AvrGcc>
-  <avrgcc.common.Device>-mmcu=atxmega128a4u -B "%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\gcc\dev\atxmega128a4u"</avrgcc.common.Device>
-  <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
-  <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
-  <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
-  <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
-  <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
-  <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
-  <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
-  <avrgcc.compiler.symbols.DefSymbols>
-    <ListValues>
-      <Value>DEBUG</Value>
-    </ListValues>
-  </avrgcc.compiler.symbols.DefSymbols>
-  <avrgcc.compiler.directories.IncludePaths>
-    <ListValues>
-      <Value>%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include</Value>
-    </ListValues>
-  </avrgcc.compiler.directories.IncludePaths>
-  <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
-  <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
-  <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
-  <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
-  <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
-  <avrgcc.linker.libraries.Libraries>
-    <ListValues>
-      <Value>libm</Value>
-    </ListValues>
-  </avrgcc.linker.libraries.Libraries>
-  <avrgcc.assembler.general.IncludePaths>
-    <ListValues>
-      <Value>%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include</Value>
-    </ListValues>
-  </avrgcc.assembler.general.IncludePaths>
-  <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
-</AvrGcc>
+        <avrgcc.common.Device>-mmcu=atxmega128a4u -B "%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\gcc\dev\atxmega128a4u"</avrgcc.common.Device>
+        <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+        <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+        <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+        <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
+        <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
+        <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+        <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+        <avrgcc.compiler.symbols.DefSymbols>
+          <ListValues>
+            <Value>DEBUG</Value>
+          </ListValues>
+        </avrgcc.compiler.symbols.DefSymbols>
+        <avrgcc.compiler.directories.IncludePaths>
+          <ListValues>
+            <Value>%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include</Value>
+          </ListValues>
+        </avrgcc.compiler.directories.IncludePaths>
+        <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
+        <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+        <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+        <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
+        <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+        <avrgcc.linker.libraries.Libraries>
+          <ListValues>
+            <Value>libm</Value>
+          </ListValues>
+        </avrgcc.linker.libraries.Libraries>
+        <avrgcc.assembler.general.IncludePaths>
+          <ListValues>
+            <Value>%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include</Value>
+          </ListValues>
+        </avrgcc.assembler.general.IncludePaths>
+        <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
+      </AvrGcc>
     </ToolchainSettings>
   </PropertyGroup>
   <ItemGroup>
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c
index 3a8be41a459371ec508ecd5eb15deaffb7562daf..6cd195a5fe7ecd6cc21cba82cfd3288b1bc4afc9 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c
@@ -22,8 +22,10 @@
 #include "ringbuffer.h"
 #include "tinyport.h"
 
+tinyport_t tp1; //power, at the moment
 tinyport_t tp2;
-tinyport_t tp3;
+tinyport_t tp3; //nhat used at the moment
+tinyport_t tp4;
 
 int main(void){
 	// Neil: overclocking (rad)
@@ -34,30 +36,65 @@ int main(void){
 	CLK.CTRL = CLK_SCLKSEL_PLL_gc; // switch to PLL
 		
 	// uart, port, rx, tx, stat
+	
+	tp1 = tp_new(&USARTC0, &PORTC, PIN2_bm, PIN3_bm, PIN4_bm);
+	tp_init(tp1);
+	
 	tp2 = tp_new(&USARTC1, &PORTC, PIN6_bm, PIN7_bm, PIN5_bm); 
 	tp_init(tp2);
 	
 	tp3 = tp_new(&USARTD0, &PORTD, PIN2_bm, PIN3_bm, PIN4_bm);
 	tp_init(tp3);
 	
-	PORTC.DIRSET = PIN4_bm;
-		
+	tp4 = tp_new(&USARTD1, &PORTD, PIN6_bm, PIN7_bm, PIN5_bm);
+	tp_init(tp4);
+	
+			
 	// system interrupt setup (allow low level interrupts)
 	PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
 	
 	// globally enable interrupts 
 	sei();
-			
+	
 	while(1){
+		
+		tp_statflash(tp1);
+		tp_statflash(tp3);
+		_delay_ms(100);
+		/*
+		// the below only works when bounded by nointerrupts() and interrupts();
 		nointerrupts();
-		// fast pass - TODO: use case: in rx interrupt, not this forever loop
 		if(tp2->rxstate){
 			uint8_t data = tp_read(tp2);
-			tp_write(tp3, data);
+			tp_write(tp4, data);
 		}
-		PORTC.OUTTGL = PIN4_bm;
 		interrupts();
+		*/
+	}
+}
+
+uint8_t pcount = 0;
+uint8_t psize = 12;
+
+// passing 2 -> 4
+
+void handoff(tinyport_t tp_from){ // puts data in 'core' of system
+	// dirty pass
+	uint8_t data;
+	//while(tp_read(tp_from, &data)){
+		tp_read(tp_from, &data);
+		tp_write(tp4, data);
+		_delay_ms(100);
+	//}
+	/*
+	//uint8_t data = 0x01;
+	pcount ++;
+	// would do port selection for pass
+	if(pcount > psize){
+		tp_write(tp3, data);
+		pcount = 0;
 	}
+	*/
 }
 
 /*
@@ -94,6 +131,15 @@ void fakepacket(tinyport_t tp){
 }
 
 // hookup ISRs to port-abstracted interrupt functions
+
+ISR(USARTC0_RXC_vect){
+	tp_rxISR(tp1);
+}
+
+ISR(USARTC0_DRE_vect){
+	tp_txISR(tp1);
+}
+
 ISR(USARTC1_RXC_vect){
 	tp_rxISR(tp2);
 }
@@ -108,4 +154,12 @@ ISR(USARTD0_RXC_vect){
 
 ISR(USARTD0_DRE_vect){
 	tp_txISR(tp3);
+}
+
+IRS(USARTD1_RXC_vect){
+	tp_rxISR(tp4);
+}
+
+ISR(USARTD1_DRE_vect){
+	tp_txISR(tp4);
 }
\ No newline at end of file
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c
index bc782ba57a2376461a24c014b712249d8511373d..55885f3b1f0f96ce6dbd78619a7ecd3656b1d7aa 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c
@@ -31,11 +31,10 @@ void rb_write(ringbuffer_t rb, uint8_t data){
 	rb->buf[rb->head] = data;
 	
 	rb->head += 1;
-	if(rb->head >= rb->size - 1){
+	if(rb->head >= rb->size){
 		rb->head = 0;
 	}
 	// increment head and check wrap
-
 }
 
 uint8_t rb_read(ringbuffer_t rb){
@@ -43,7 +42,7 @@ uint8_t rb_read(ringbuffer_t rb){
 	uint8_t data = rb->buf[rb->tail];
 	// increment tail and check wrap
 	rb->tail += 1;
-	if(rb->tail >= rb->size -1){
+	if(rb->tail >= rb->size){
 		rb->tail = 0;
 	}
 	return data;
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c
index 95dde8cc8494c1845d812b997a4fa186aad5b86b..462bcf4a78dd8aaee5ded34fe4e0ae2fb2f3d5f2 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c
@@ -20,6 +20,7 @@ tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_b
 	tp->rbtx = rb_new(TP_TXBUF_SIZE);
 	tp->txstate = TP_TX_STATE_EMPTY;
 	tp->rxstate = TP_RX_STATE_EMPTY;
+	tp->pstate = TP_PSTATE_OUTSIDE;
 	
 	return tp;
 }
@@ -74,63 +75,84 @@ void tp_test(tinyport_t tp){
 }
 
 void tp_rxISR(tinyport_t tp){ // towards a passalong
-	rb_write(tp->rbrx, tp->uart->DATA);
+	tp_statflash(tp);
+	
+	uint8_t data = tp->uart->DATA;
+	
+	switch(tp->pstate){
+		
+		case TP_PSTATE_OUTSIDE:
+			if(data == 126){ // ~
+				tp->pstate = TP_PSTATE_INSIDE;
+			} else {
+				// nothing for now, in future catch port-buffer-lengths list
+			}
+			break;
+			
+		case TP_PSTATE_INSIDE:
+			if(data == 126){ // ~
+				tp->pstate = TP_PSTATE_OUTSIDE;
+				handoff(tp);
+			} else {
+				rb_write(tp->rbrx, tp->uart->DATA);
+			}
+			// check for finish
+			break;
+			
+		default:
+			// heck 
+			break;
+	}
 	tp_setRxStatus(tp, TP_RX_STATE_HASDATA); // get it
+	//handoff(tp);
 }
 
-uint8_t tp_read(tinyport_t tp){
-	uint8_t data = rb_read(tp->rbrx);
-	uint8_t tail = tp->rbrx->tail;
-	uint8_t head = tp->rbrx->head;
-	if(tail == head){
+uint8_t tp_read(tinyport_t tp, uint8_t *data){ // TODO: set at pointer, return true if non empty
+	
+	*data = 81; // rb_read(tp->rbrx);
+	return 0;
+	/*
+	if(rb_hasdata(tp->rbrx)){
+		return 1;
+	} else {
 		tp_setRxStatus(tp, TP_RX_STATE_EMPTY);
-		} else {
-		tp_setRxStatus(tp, TP_RX_STATE_HASDATA);
+		return 0;
 	}
-	return data;
+	*/
 }
 
 void tp_setRxStatus(tinyport_t tp, uint8_t state){
-	tp->rxstate = state;
-	if(state){
+	if(state == tp->rxstate){
+		// nothing
 		// nothing changes? always listening
 	} else {
-		// ibid
+		tp->rxstate = state;
 	}
 }
 
 // https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
 
 void tp_txISR(tinyport_t tp){
+	tp_statflash(tp);
 	tp->uart->DATA = rb_read(tp->rbtx);
-	uint8_t tail = tp->rbtx->tail;
-	uint8_t head = tp->rbtx->head;
-	if(tail == head){
-		tp_setTxStatus(tp, TP_TX_STATE_EMPTY);
-	} else {
-		tp_setTxStatus(tp, TP_TX_STATE_HASDATA);
-	}
-	/*
-	// should b working now, test
-	if(!(rb_hasdata(tp->rbtx))){ // if buffer empty, turn off DREF interrupt
+	if(!(rb_hasdata(tp->rbtx))){  // if no data left to tx,
 		tp_setTxStatus(tp, TP_TX_STATE_EMPTY);
 	}
-	*/
-	// handle buffer-ready status, enable interrupt
 }
 
 void tp_write(tinyport_t tp, uint8_t data){
 	rb_write(tp->rbtx, data);
-	tp_setTxStatus(tp, TP_RX_STATE_HASDATA);
+	tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available
 }
 
 void tp_setTxStatus(tinyport_t tp, uint8_t state){
-	tp->txstate = state;
-	if(state){
+	if(state == tp->txstate){ // if already set,
+		// do nothing
+	} else if(state) { // if set to hi - have things to tx
 		tp->uart->CTRLA |= USART_DREINTLVL_LO_gc; // now ready for out transmit - this would happen elsewhere - when there is tx to tx
-		tp_stathi(tp);
-		} else {
+		tp->txstate = state;
+	} else { // if lo - buffer is empty, donot tx
 		tp->uart->CTRLA = (tp->uart->CTRLA & ~ USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc; // turn off interrupt
-		tp_statlo(tp);
+		tp->txstate = state;
 	}
 }
\ No newline at end of file
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h
index 8ce2d8ca080a92f38c5f42909867514b39c6d2c5..3824b53556132469f57f87173779340b90dcefd8 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h
@@ -20,7 +20,10 @@
 #define TP_RX_STATE_HASDATA 1
 
 #define TP_TX_STATE_EMPTY 0
-#define TP_TX_STATE_HASDATA 1
+#define TP_TX_STATE_TRANSMIT 1
+
+#define TP_PSTATE_OUTSIDE 0
+#define TP_PSTATE_INSIDE 1
 
 typedef struct tinyport_t {
 	USART_t *uart;
@@ -30,9 +33,9 @@ typedef struct tinyport_t {
 	uint8_t pinSTAT_bm;
 	ringbuffer_t rbrx; // is pointer-to
 	ringbuffer_t rbtx; // is pointer-to
-	uint8_t state;
 	uint8_t txstate;
 	uint8_t rxstate;
+	uint8_t pstate;
 };
 
 typedef struct tinyport_t *tinyport_t;
@@ -47,7 +50,7 @@ void tp_stathi(tinyport_t tp);
 void tp_test(tinyport_t tp);
 
 void tp_rxISR(tinyport_t tp);
-uint8_t tp_read(tinyport_t tp);
+uint8_t tp_read(tinyport_t tp, uint8_t *data);
 void tp_setRxStatus(tinyport_t, uint8_t state);
 
 void tp_txISR(tinyport_t tp);