From dcc252a2e25d5eaf87a53cc4c932234af47e620f Mon Sep 17 00:00:00 2001
From: Jake <jake.read@cba.mit.edu>
Date: Thu, 2 Nov 2017 22:00:03 -0400
Subject: [PATCH] more better

---
 .../Debug/atxmega-a4u-wakeup.elf              |  Bin 55900 -> 52108 bytes
 .../Debug/atxmega-a4u-wakeup.hex              |  278 +-
 .../Debug/atxmega-a4u-wakeup.lss              | 2259 ++++++++---------
 .../Debug/atxmega-a4u-wakeup.map              |  249 +-
 .../Debug/atxmega-a4u-wakeup.srec             |  278 +-
 .../atxmega-a4u-wakeup/Debug/main.d           |   12 +-
 .../atxmega-a4u-wakeup/Debug/main.o           |  Bin 22792 -> 16264 bytes
 .../atxmega-a4u-wakeup/Debug/ringbuffer.d     |    5 +-
 .../atxmega-a4u-wakeup/Debug/ringbuffer.o     |  Bin 7628 -> 8700 bytes
 .../atxmega-a4u-wakeup/Debug/tinyport.d       |    9 +
 .../atxmega-a4u-wakeup/Debug/tinyport.o       |  Bin 17772 -> 14000 bytes
 .../atxmega-a4u-wakeup/main.c                 |   96 +-
 .../atxmega-a4u-wakeup/ringbuffer.c           |   77 +-
 .../atxmega-a4u-wakeup/ringbuffer.h           |   34 +-
 .../atxmega-a4u-wakeup/tinyport.c             |  133 +-
 .../atxmega-a4u-wakeup/tinyport.h             |   47 +-
 16 files changed, 1661 insertions(+), 1816 deletions(-)

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 89887a1997380b99591a908483561754bd7a01da..e7de41090e970ecf6a311ab762e94297d1a7d7f9 100644
GIT binary patch
delta 14369
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

delta 17829
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

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 8733084..6c7246a 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
-:100060000C9424010C94AA010C94E1010C94240139
-:100070000C9418020C944F020C9424010C9424014B
+:100060000C9424010C94C0010C9424010C942401E0
+:100070000C94F5010C9424010C9424010C9424019B
 :100080000C9424010C9424010C9424010C9424015C
 :100090000C9424010C9424010C9424010C9424014C
 :1000A0000C9424010C9424010C9424010C9424013C
@@ -20,8 +20,8 @@
 :100130000C9424010C9424010C9424010C942401AB
 :100140000C9424010C9424010C9424010C9424019B
 :100150000C9424010C9424010C9424010C9424018B
-:100160000C9486020C94BD020C9424010C9424017E
-:100170000C94F4020C9424010C9424010C9424019A
+:100160000C942A020C9424010C9424010C945F0238
+:100170000C9424010C9424010C9424010C9424016B
 :100180000C9424010C9424010C9424010C9424015B
 :100190000C9424010C9424010C9424010C9424014B
 :1001A0000C9424010C9424010C9424010C9424013B
@@ -31,153 +31,127 @@
 :1001E0000C9424010C9424010C9424010C942401FB
 :1001F0000C9424010C9424010C94240111241FBE9E
 :10020000CFEFCDBFDFE3DEBF00E00CBF18BE19BEED
-:100210001ABE1BBE10E2A0E0B0E2EEE4FBE000E09C
+:100210001ABE1BBE10E2A0E0B0E2E8EAF9E000E09E
 :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
+:1002300020E2A6E0B0E201C01D92A637B207E1F7C6
+:100240000E9426010C94D2040C940000CF93DF93FB
+:10025000CDB7DEB76C97CDBFDEBFE0E5F0E088E15B
+:10026000858380E18083818184FFFDCF88ED84BF19
+:1002700084E0809340006894EE24E4F808E024E0F1
+:1002800040E456E060EA78E0CE0102960E94FA026D
+:100290008BE1FE013296A1E2B0E201900D928A95C7
+:1002A000E1F781E290E20E942F036894EE24E5F8E2
+:1002B00000E820E440E456E060EB78E0CE010296EE
+:1002C0000E94FA028BE1FE013296A6E0B0E20190B4
+:1002D0000D928A95E1F786E090E20E942F036894E0
+:1002E000EE24E4F808E024E040E656E060EA79E035
+:1002F000CE0102960E94FA028BE1FE013296A7E53A
+:10030000B0E201900D928A95E1F787E590E20E94B4
+:100310002F036894EE24E5F800E820E440E656E078
+:1003200060EB79E0CE0102960E94FA028BE1FE01B9
+:100330003296ACE3B0E201900D928A95E1F78CE33E
+:1003400090E20E942F03E0EAF0E0828187608283DE
+:10035000789481E290E20E949403BE016F5F7F4F28
+:1003600086E090E20E948303882399F387E590E278
+:100370000E94940369818CE390E20E948C03E9CF90
+:100380001F920F920FB60F92112408B60F9218BE4B
+:1003900009B60F9219BE0BB60F921BBE2F933F9357
+:1003A0004F935F936F937F938F939F93AF93BF937D
+:1003B000EF93FF9381E290E20E946503FF91EF913A
+:1003C000BF91AF919F918F917F916F915F914F916D
+:1003D0003F912F910F900BBE0F9009BE0F9008BE5A
+:1003E0000F900FBE0F901F9018951F920F920FB68F
+:1003F0000F92112408B60F9218BE09B60F9219BEBB
+:100400000BB60F921BBE2F933F934F935F936F9347
+:100410007F938F939F93AF93BF93EF93FF9386E068
+:1004200090E20E946503FF91EF91BF91AF919F9180
+:100430008F917F916F915F914F913F912F910F908D
+:100440000BBE0F9009BE0F9008BE0F900FBE0F900D
+:100450001F9018951F920F920FB60F92112408B695
+:100460000F9218BE09B60F9219BE0BB60F921BBEA3
+:100470002F933F934F935F936F937F938F939F93AC
+:10048000AF93BF93EF93FF9387E590E20E946503DC
+:10049000FF91EF91BF91AF919F918F917F916F915C
+:1004A0005F914F913F912F910F900BBE0F9009BE1E
+:1004B0000F9008BE0F900FBE0F901F9018951F92BF
+:1004C0000F920FB60F92112408B60F9218BE09B6FC
+:1004D0000F9219BE0BB60F921BBE2F933F934F93F3
+:1004E0005F936F937F938F939F93AF93BF93EF939C
+:1004F000FF938CE390E20E946503FF91EF91BF911F
+:10050000AF919F918F917F916F915F914F913F91AB
+:100510002F910F900BBE0F9009BE0F9008BE0F9049
+:100520000FBE0F901F901895009739F0FC011282B2
+:1005300013821482158281E0089580E00895CF939C
+:10054000DF93EC01CB016E837F830E94B10388832C
+:100550009983CE010E94940281E0DF91CF910895AA
+:10056000FC01892BF1F0A081B18182819381A80FD8
+:10057000B91F6C9326813781828193810196B901DD
+:100580000E949D038283938344815581841795073C
+:1005900051F40196B9010E949D038483958381E003
+:1005A000089580E0089581E00895FC01892BE1F031
+:1005B00061157105D9F022813381848195812817D5
+:1005C0003907B1F0A081B181A80FB91F8C91DB016F
+:1005D0008C93848195810196668177810E949D0329
+:1005E0008483958381E0089580E0089580E00895F4
+:1005F00080E00895CF92DF92EF920F93CF93DF9335
+:10060000CDB7DEB76B97CDBFDEBF6C0169837A8350
+:100610004B835C832D830E83EF82188619861A869E
+:1006200060E870E0CE010C960E949F0260E870E0E6
+:10063000CE0144960E949F028BE1FE013196D601C5
+:1006400001900D928A95E1F7C6016B96CDBFDEBF92
+:10065000DF91CF910F91EF90DF90CF900895FC0143
+:10066000A081B1818BE916968C93A081B1811796F8
+:100670001C92A081B18113968C911397806113967F
+:100680008C93A081B18188E114968C93A081B18173
+:1006900083E015968C93A281B381858115968C9306
+:1006A000A281B381858111968C93A281B3818481CB
+:1006B00012968C93A281B381848116968C93A28129
+:1006C000B381868111968C930895FC01A281B38138
+:1006D000868117968C93A081B1816C916287818508
+:1006E000882319F0813031F008956E3759F481E094
+:1006F000818708956E3711F411860895CF010B9606
+:100700000E94B00208950B960E94D50291E08111DB
+:1007100001C090E0892F0895DC01ED91FC91818169
+:1007200085FFFDCF60830895DC011296ED91FC9169
+:10073000139716968C9187830895AA1BBB1B51E1D2
+:1007400007C0AA1FBB1FA617B70710F0A61BB70B41
+:10075000881F991F5A95A9F780959095BC01CD01E6
+:1007600008950F931F93CF93DF938230910510F478
+:1007700082E090E0E0917420F091752020E030E07C
+:10078000A0E0B0E0309719F14081518102811381DE
+:1007900048175907C8F08417950769F4109731F086
+:1007A00012960C93129713961C9327C000937420F3
+:1007B0001093752022C02115310519F042175307F7
+:1007C00018F49A01BD01EF01DF01F801DBCF21151B
+:1007D0003105F9F0281B390B2430310580F48A816A
+:1007E0009B816115710521F0FB018283938304C015
+:1007F0008093742090937520FE01329644C0FE01D0
+:10080000E20FF31F8193919322503109288339839A
+:100810003AC02091722030917320232B41F4209113
+:100820000220309103202093722030937320209176
+:100830000020309101202115310541F42DB73EB73C
+:100840004091042050910520241B350BE09172202B
+:10085000F0917320E217F307A0F42E1B3F0B28172B
+:10086000390778F0AC014E5F5F4F2417350748F029
+:100870004E0F5F1F4093722050937320819391938A
+:1008800002C0E0E0F0E0CF01DF91CF911F910F9126
+:100890000895CF93DF93009709F481C0FC0132974C
+:1008A00012821382A0917420B0917520109781F468
+:1008B00020813181820F931F20917220309173200B
+:1008C0002817390751F5E0937220F093732067C021
+:1008D000ED0120E030E0CE17DF0740F44A815B8174
+:1008E0009E0141155105F1F0EA01F5CFC283D38392
+:1008F00040815181840F951FC817D90759F4888109
+:100900009981840F951F0296808391838A819B81B0
+:10091000828393832115310529F4E0937420F093A9
+:1009200075203DC0E901EA83FB8349915991C40FC9
+:10093000D51FEC17FD0761F480819181840F951F0D
+:100940000296E90188839983828193818A839B83BC
+:10095000E0E0F0E012968D919C911397009719F0CA
+:10096000FD01DC01F7CF8D919C9111979D012E5FC8
+:100970003F4F820F931F20917220309173202817D0
+:10098000390769F4309729F4109274201092752079
+:1009900002C012821382A0937220B0937320DF9161
+:0809A000CF910895F894FFCFF8
+:0609A80000007620200093
 :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 5fbbbe0..ddadf42 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         00000b4e  00000000  00000000  00000094  2**1
+  0 .text         000009a8  00000000  00000000  00000094  2**1
                   CONTENTS, ALLOC, LOAD, READONLY, CODE
-  1 .data         00000006  00802000  00000b4e  00000be2  2**0
+  1 .data         00000006  00802000  000009a8  00000a3c  2**0
                   CONTENTS, ALLOC, LOAD, DATA
-  2 .bss          0000000c  00802006  00802006  00000be8  2**0
+  2 .bss          00000070  00802006  00802006  00000a42  2**0
                   ALLOC
-  3 .comment      00000030  00000000  00000000  00000be8  2**0
+  3 .comment      00000030  00000000  00000000  00000a42  2**0
                   CONTENTS, READONLY
-  4 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000c18  2**2
+  4 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000a74  2**2
                   CONTENTS, READONLY
-  5 .debug_aranges 00000138  00000000  00000000  00000c58  2**0
+  5 .debug_aranges 00000100  00000000  00000000  00000ab4  2**0
                   CONTENTS, READONLY, DEBUGGING
-  6 .debug_info   00004072  00000000  00000000  00000d90  2**0
+  6 .debug_info   00003c5f  00000000  00000000  00000bb4  2**0
                   CONTENTS, READONLY, DEBUGGING
-  7 .debug_abbrev 00002c94  00000000  00000000  00004e02  2**0
+  7 .debug_abbrev 00002add  00000000  00000000  00004813  2**0
                   CONTENTS, READONLY, DEBUGGING
-  8 .debug_line   00000c49  00000000  00000000  00007a96  2**0
+  8 .debug_line   00000bd5  00000000  00000000  000072f0  2**0
                   CONTENTS, READONLY, DEBUGGING
-  9 .debug_frame  000004b8  00000000  00000000  000086e0  2**2
+  9 .debug_frame  0000032c  00000000  00000000  00007ec8  2**2
                   CONTENTS, READONLY, DEBUGGING
- 10 .debug_str    000023a2  00000000  00000000  00008b98  2**0
+ 10 .debug_str    000022f6  00000000  00000000  000081f4  2**0
                   CONTENTS, READONLY, DEBUGGING
- 11 .debug_loc    00000d9c  00000000  00000000  0000af3a  2**0
+ 11 .debug_loc    0000092b  00000000  00000000  0000a4ea  2**0
                   CONTENTS, READONLY, DEBUGGING
- 12 .debug_ranges 00000108  00000000  00000000  0000bcd6  2**0
+ 12 .debug_ranges 000000d0  00000000  00000000  0000ae15  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 aa 01 	jmp	0x354	; 0x354 <__vector_25>
-  68:	0c 94 e1 01 	jmp	0x3c2	; 0x3c2 <__vector_26>
+  64:	0c 94 c0 01 	jmp	0x380	; 0x380 <__vector_25>
+  68:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
   6c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
-  70:	0c 94 18 02 	jmp	0x430	; 0x430 <__vector_28>
-  74:	0c 94 4f 02 	jmp	0x49e	; 0x49e <__vector_29>
+  70:	0c 94 f5 01 	jmp	0x3ea	; 0x3ea <__vector_28>
+  74:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
   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 86 02 	jmp	0x50c	; 0x50c <__vector_88>
- 164:	0c 94 bd 02 	jmp	0x57a	; 0x57a <__vector_89>
+ 160:	0c 94 2a 02 	jmp	0x454	; 0x454 <__vector_88>
+ 164:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  168:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
- 16c:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
- 170:	0c 94 f4 02 	jmp	0x5e8	; 0x5e8 <__vector_92>
+ 16c:	0c 94 5f 02 	jmp	0x4be	; 0x4be <__vector_91>
+ 170:	0c 94 24 01 	jmp	0x248	; 0x248 <__bad_interrupt>
  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>
@@ -179,8 +179,8 @@ Disassembly of section .text:
  214:	10 e2       	ldi	r17, 0x20	; 32
  216:	a0 e0       	ldi	r26, 0x00	; 0
  218:	b0 e2       	ldi	r27, 0x20	; 32
- 21a:	ee e4       	ldi	r30, 0x4E	; 78
- 21c:	fb e0       	ldi	r31, 0x0B	; 11
+ 21a:	e8 ea       	ldi	r30, 0xA8	; 168
+ 21c:	f9 e0       	ldi	r31, 0x09	; 9
  21e:	00 e0       	ldi	r16, 0x00	; 0
  220:	0b bf       	out	0x3b, r16	; 59
  222:	02 c0       	rjmp	.+4      	; 0x228 <__do_copy_data+0x14>
@@ -201,1213 +201,1124 @@ Disassembly of section .text:
  238:	1d 92       	st	X+, r1
 
 0000023a <.do_clear_bss_start>:
- 23a:	a2 31       	cpi	r26, 0x12	; 18
+ 23a:	a6 37       	cpi	r26, 0x76	; 118
  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>
+ 244:	0c 94 d2 04 	jmp	0x9a4	; 0x9a4 <_exit>
 
 00000248 <__bad_interrupt>:
  248:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>
 
 0000024c <main>:
-	tp_txISR(tp3);
-}
-
-IRS(USARTD1_RXC_vect){
-	tp_rxISR(tp4);
-}
- 24c:	e0 e5       	ldi	r30, 0x50	; 80
- 24e:	f0 e0       	ldi	r31, 0x00	; 0
- 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>
 
-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
+/*
+turns on global interrupt control
+*/
+void interrupts(){
+	PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
+ 24c:	cf 93       	push	r28
+ 24e:	df 93       	push	r29
+ 250:	cd b7       	in	r28, 0x3d	; 61
+ 252:	de b7       	in	r29, 0x3e	; 62
+ 254:	6c 97       	sbiw	r28, 0x1c	; 28
+ 256:	cd bf       	out	0x3d, r28	; 61
+ 258:	de bf       	out	0x3e, r29	; 62
+ 25a:	e0 e5       	ldi	r30, 0x50	; 80
+ 25c:	f0 e0       	ldi	r31, 0x00	; 0
+ 25e:	88 e1       	ldi	r24, 0x18	; 24
+ 260:	85 83       	std	Z+5, r24	; 0x05
+ 262:	80 e1       	ldi	r24, 0x10	; 16
+ 264:	80 83       	st	Z, r24
+ 266:	81 81       	ldd	r24, Z+1	; 0x01
+ 268:	84 ff       	sbrs	r24, 4
+ 26a:	fd cf       	rjmp	.-6      	; 0x266 <main+0x1a>
+ 26c:	88 ed       	ldi	r24, 0xD8	; 216
+ 26e:	84 bf       	out	0x34, r24	; 52
+ 270:	84 e0       	ldi	r24, 0x04	; 4
+ 272:	80 93 40 00 	sts	0x0040, r24	; 0x800040 <__TEXT_REGION_LENGTH__+0x700040>
+ 276:	68 94       	set
+ 278:	ee 24       	eor	r14, r14
+ 27a:	e4 f8       	bld	r14, 4
+ 27c:	08 e0       	ldi	r16, 0x08	; 8
+ 27e:	24 e0       	ldi	r18, 0x04	; 4
+ 280:	40 e4       	ldi	r20, 0x40	; 64
+ 282:	56 e0       	ldi	r21, 0x06	; 6
+ 284:	60 ea       	ldi	r22, 0xA0	; 160
+ 286:	78 e0       	ldi	r23, 0x08	; 8
+ 288:	ce 01       	movw	r24, r28
+ 28a:	02 96       	adiw	r24, 0x02	; 2
+ 28c:	0e 94 fa 02 	call	0x5f4	; 0x5f4 <tp_new>
+ 290:	8b e1       	ldi	r24, 0x1B	; 27
+ 292:	fe 01       	movw	r30, r28
+ 294:	32 96       	adiw	r30, 0x02	; 2
+ 296:	a1 e2       	ldi	r26, 0x21	; 33
+ 298:	b0 e2       	ldi	r27, 0x20	; 32
+ 29a:	01 90       	ld	r0, Z+
+ 29c:	0d 92       	st	X+, r0
+ 29e:	8a 95       	dec	r24
+ 2a0:	e1 f7       	brne	.-8      	; 0x29a <main+0x4e>
+ 2a2:	81 e2       	ldi	r24, 0x21	; 33
+ 2a4:	90 e2       	ldi	r25, 0x20	; 32
+ 2a6:	0e 94 2f 03 	call	0x65e	; 0x65e <tp_init>
+ 2aa:	68 94       	set
+ 2ac:	ee 24       	eor	r14, r14
+ 2ae:	e5 f8       	bld	r14, 5
+ 2b0:	00 e8       	ldi	r16, 0x80	; 128
+ 2b2:	20 e4       	ldi	r18, 0x40	; 64
+ 2b4:	40 e4       	ldi	r20, 0x40	; 64
+ 2b6:	56 e0       	ldi	r21, 0x06	; 6
+ 2b8:	60 eb       	ldi	r22, 0xB0	; 176
+ 2ba:	78 e0       	ldi	r23, 0x08	; 8
+ 2bc:	ce 01       	movw	r24, r28
+ 2be:	02 96       	adiw	r24, 0x02	; 2
+ 2c0:	0e 94 fa 02 	call	0x5f4	; 0x5f4 <tp_new>
+ 2c4:	8b e1       	ldi	r24, 0x1B	; 27
+ 2c6:	fe 01       	movw	r30, r28
+ 2c8:	32 96       	adiw	r30, 0x02	; 2
+ 2ca:	a6 e0       	ldi	r26, 0x06	; 6
+ 2cc:	b0 e2       	ldi	r27, 0x20	; 32
+ 2ce:	01 90       	ld	r0, Z+
+ 2d0:	0d 92       	st	X+, r0
+ 2d2:	8a 95       	dec	r24
+ 2d4:	e1 f7       	brne	.-8      	; 0x2ce <main+0x82>
+ 2d6:	86 e0       	ldi	r24, 0x06	; 6
+ 2d8:	90 e2       	ldi	r25, 0x20	; 32
+ 2da:	0e 94 2f 03 	call	0x65e	; 0x65e <tp_init>
+ 2de:	68 94       	set
+ 2e0:	ee 24       	eor	r14, r14
+ 2e2:	e4 f8       	bld	r14, 4
+ 2e4:	08 e0       	ldi	r16, 0x08	; 8
+ 2e6:	24 e0       	ldi	r18, 0x04	; 4
+ 2e8:	40 e6       	ldi	r20, 0x60	; 96
+ 2ea:	56 e0       	ldi	r21, 0x06	; 6
+ 2ec:	60 ea       	ldi	r22, 0xA0	; 160
+ 2ee:	79 e0       	ldi	r23, 0x09	; 9
+ 2f0:	ce 01       	movw	r24, r28
+ 2f2:	02 96       	adiw	r24, 0x02	; 2
+ 2f4:	0e 94 fa 02 	call	0x5f4	; 0x5f4 <tp_new>
+ 2f8:	8b e1       	ldi	r24, 0x1B	; 27
+ 2fa:	fe 01       	movw	r30, r28
+ 2fc:	32 96       	adiw	r30, 0x02	; 2
+ 2fe:	a7 e5       	ldi	r26, 0x57	; 87
+ 300:	b0 e2       	ldi	r27, 0x20	; 32
+ 302:	01 90       	ld	r0, Z+
+ 304:	0d 92       	st	X+, r0
+ 306:	8a 95       	dec	r24
+ 308:	e1 f7       	brne	.-8      	; 0x302 <main+0xb6>
+ 30a:	87 e5       	ldi	r24, 0x57	; 87
+ 30c:	90 e2       	ldi	r25, 0x20	; 32
+ 30e:	0e 94 2f 03 	call	0x65e	; 0x65e <tp_init>
+ 312:	68 94       	set
+ 314:	ee 24       	eor	r14, r14
+ 316:	e5 f8       	bld	r14, 5
+ 318:	00 e8       	ldi	r16, 0x80	; 128
+ 31a:	20 e4       	ldi	r18, 0x40	; 64
+ 31c:	40 e6       	ldi	r20, 0x60	; 96
+ 31e:	56 e0       	ldi	r21, 0x06	; 6
+ 320:	60 eb       	ldi	r22, 0xB0	; 176
+ 322:	79 e0       	ldi	r23, 0x09	; 9
+ 324:	ce 01       	movw	r24, r28
+ 326:	02 96       	adiw	r24, 0x02	; 2
+ 328:	0e 94 fa 02 	call	0x5f4	; 0x5f4 <tp_new>
+ 32c:	8b e1       	ldi	r24, 0x1B	; 27
+ 32e:	fe 01       	movw	r30, r28
+ 330:	32 96       	adiw	r30, 0x02	; 2
+ 332:	ac e3       	ldi	r26, 0x3C	; 60
+ 334:	b0 e2       	ldi	r27, 0x20	; 32
+ 336:	01 90       	ld	r0, Z+
+ 338:	0d 92       	st	X+, r0
+ 33a:	8a 95       	dec	r24
+ 33c:	e1 f7       	brne	.-8      	; 0x336 <main+0xea>
+ 33e:	8c e3       	ldi	r24, 0x3C	; 60
+ 340:	90 e2       	ldi	r25, 0x20	; 32
+ 342:	0e 94 2f 03 	call	0x65e	; 0x65e <tp_init>
+ 346:	e0 ea       	ldi	r30, 0xA0	; 160
+ 348:	f0 e0       	ldi	r31, 0x00	; 0
+ 34a:	82 81       	ldd	r24, Z+2	; 0x02
+ 34c:	87 60       	ori	r24, 0x07	; 7
+ 34e:	82 83       	std	Z+2, r24	; 0x02
+ 350:	78 94       	sei
+ 352:	81 e2       	ldi	r24, 0x21	; 33
+ 354:	90 e2       	ldi	r25, 0x20	; 32
+ 356:	0e 94 94 03 	call	0x728	; 0x728 <tp_statflash>
+ 35a:	be 01       	movw	r22, r28
+ 35c:	6f 5f       	subi	r22, 0xFF	; 255
+ 35e:	7f 4f       	sbci	r23, 0xFF	; 255
+ 360:	86 e0       	ldi	r24, 0x06	; 6
+ 362:	90 e2       	ldi	r25, 0x20	; 32
+ 364:	0e 94 83 03 	call	0x706	; 0x706 <tp_read>
+ 368:	88 23       	and	r24, r24
+ 36a:	99 f3       	breq	.-26     	; 0x352 <main+0x106>
+ 36c:	87 e5       	ldi	r24, 0x57	; 87
+ 36e:	90 e2       	ldi	r25, 0x20	; 32
+ 370:	0e 94 94 03 	call	0x728	; 0x728 <tp_statflash>
+ 374:	69 81       	ldd	r22, Y+1	; 0x01
+ 376:	8c e3       	ldi	r24, 0x3C	; 60
+ 378:	90 e2       	ldi	r25, 0x20	; 32
+ 37a:	0e 94 8c 03 	call	0x718	; 0x718 <tp_write>
+ 37e:	e9 cf       	rjmp	.-46     	; 0x352 <main+0x106>
 
-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
-
-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
+00000380 <__vector_25>:
+}
 
-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
+// hookup ISRs to port-abstracted interrupt functions
 
-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(USARTC0_RXC_vect){
+ 380:	1f 92       	push	r1
+ 382:	0f 92       	push	r0
+ 384:	0f b6       	in	r0, 0x3f	; 63
+ 386:	0f 92       	push	r0
+ 388:	11 24       	eor	r1, r1
+ 38a:	08 b6       	in	r0, 0x38	; 56
+ 38c:	0f 92       	push	r0
+ 38e:	18 be       	out	0x38, r1	; 56
+ 390:	09 b6       	in	r0, 0x39	; 57
+ 392:	0f 92       	push	r0
+ 394:	19 be       	out	0x39, r1	; 57
+ 396:	0b b6       	in	r0, 0x3b	; 59
+ 398:	0f 92       	push	r0
+ 39a:	1b be       	out	0x3b, r1	; 59
+ 39c:	2f 93       	push	r18
+ 39e:	3f 93       	push	r19
+ 3a0:	4f 93       	push	r20
+ 3a2:	5f 93       	push	r21
+ 3a4:	6f 93       	push	r22
+ 3a6:	7f 93       	push	r23
+ 3a8:	8f 93       	push	r24
+ 3aa:	9f 93       	push	r25
+ 3ac:	af 93       	push	r26
+ 3ae:	bf 93       	push	r27
+ 3b0:	ef 93       	push	r30
+ 3b2:	ff 93       	push	r31
+	tp_rxISR(&tp1);
+ 3b4:	81 e2       	ldi	r24, 0x21	; 33
+ 3b6:	90 e2       	ldi	r25, 0x20	; 32
+ 3b8:	0e 94 65 03 	call	0x6ca	; 0x6ca <tp_rxISR>
+}
+ 3bc:	ff 91       	pop	r31
+ 3be:	ef 91       	pop	r30
+ 3c0:	bf 91       	pop	r27
+ 3c2:	af 91       	pop	r26
+ 3c4:	9f 91       	pop	r25
+ 3c6:	8f 91       	pop	r24
+ 3c8:	7f 91       	pop	r23
+ 3ca:	6f 91       	pop	r22
+ 3cc:	5f 91       	pop	r21
+ 3ce:	4f 91       	pop	r20
+ 3d0:	3f 91       	pop	r19
+ 3d2:	2f 91       	pop	r18
+ 3d4:	0f 90       	pop	r0
+ 3d6:	0b be       	out	0x3b, r0	; 59
+ 3d8:	0f 90       	pop	r0
+ 3da:	09 be       	out	0x39, r0	; 57
+ 3dc:	0f 90       	pop	r0
+ 3de:	08 be       	out	0x38, r0	; 56
+ 3e0:	0f 90       	pop	r0
+ 3e2:	0f be       	out	0x3f, r0	; 63
+ 3e4:	0f 90       	pop	r0
+ 3e6:	1f 90       	pop	r1
+ 3e8:	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
+000003ea <__vector_28>:
 
-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
 
-000005e8 <__vector_92>:
+ISR(USARTC1_RXC_vect){
+ 3ea:	1f 92       	push	r1
+ 3ec:	0f 92       	push	r0
+ 3ee:	0f b6       	in	r0, 0x3f	; 63
+ 3f0:	0f 92       	push	r0
+ 3f2:	11 24       	eor	r1, r1
+ 3f4:	08 b6       	in	r0, 0x38	; 56
+ 3f6:	0f 92       	push	r0
+ 3f8:	18 be       	out	0x38, r1	; 56
+ 3fa:	09 b6       	in	r0, 0x39	; 57
+ 3fc:	0f 92       	push	r0
+ 3fe:	19 be       	out	0x39, r1	; 57
+ 400:	0b b6       	in	r0, 0x3b	; 59
+ 402:	0f 92       	push	r0
+ 404:	1b be       	out	0x3b, r1	; 59
+ 406:	2f 93       	push	r18
+ 408:	3f 93       	push	r19
+ 40a:	4f 93       	push	r20
+ 40c:	5f 93       	push	r21
+ 40e:	6f 93       	push	r22
+ 410:	7f 93       	push	r23
+ 412:	8f 93       	push	r24
+ 414:	9f 93       	push	r25
+ 416:	af 93       	push	r26
+ 418:	bf 93       	push	r27
+ 41a:	ef 93       	push	r30
+ 41c:	ff 93       	push	r31
+	tp_rxISR(&tp2);
+ 41e:	86 e0       	ldi	r24, 0x06	; 6
+ 420:	90 e2       	ldi	r25, 0x20	; 32
+ 422:	0e 94 65 03 	call	0x6ca	; 0x6ca <tp_rxISR>
+}
+ 426:	ff 91       	pop	r31
+ 428:	ef 91       	pop	r30
+ 42a:	bf 91       	pop	r27
+ 42c:	af 91       	pop	r26
+ 42e:	9f 91       	pop	r25
+ 430:	8f 91       	pop	r24
+ 432:	7f 91       	pop	r23
+ 434:	6f 91       	pop	r22
+ 436:	5f 91       	pop	r21
+ 438:	4f 91       	pop	r20
+ 43a:	3f 91       	pop	r19
+ 43c:	2f 91       	pop	r18
+ 43e:	0f 90       	pop	r0
+ 440:	0b be       	out	0x3b, r0	; 59
+ 442:	0f 90       	pop	r0
+ 444:	09 be       	out	0x39, r0	; 57
+ 446:	0f 90       	pop	r0
+ 448:	08 be       	out	0x38, r0	; 56
+ 44a:	0f 90       	pop	r0
+ 44c:	0f be       	out	0x3f, r0	; 63
+ 44e:	0f 90       	pop	r0
+ 450:	1f 90       	pop	r1
+ 452:	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
+00000454 <__vector_88>:
 
-00000656 <rb_new>:
-	return rb;
+ISR(USARTD0_RXC_vect){
+ 454:	1f 92       	push	r1
+ 456:	0f 92       	push	r0
+ 458:	0f b6       	in	r0, 0x3f	; 63
+ 45a:	0f 92       	push	r0
+ 45c:	11 24       	eor	r1, r1
+ 45e:	08 b6       	in	r0, 0x38	; 56
+ 460:	0f 92       	push	r0
+ 462:	18 be       	out	0x38, r1	; 56
+ 464:	09 b6       	in	r0, 0x39	; 57
+ 466:	0f 92       	push	r0
+ 468:	19 be       	out	0x39, r1	; 57
+ 46a:	0b b6       	in	r0, 0x3b	; 59
+ 46c:	0f 92       	push	r0
+ 46e:	1b be       	out	0x3b, r1	; 59
+ 470:	2f 93       	push	r18
+ 472:	3f 93       	push	r19
+ 474:	4f 93       	push	r20
+ 476:	5f 93       	push	r21
+ 478:	6f 93       	push	r22
+ 47a:	7f 93       	push	r23
+ 47c:	8f 93       	push	r24
+ 47e:	9f 93       	push	r25
+ 480:	af 93       	push	r26
+ 482:	bf 93       	push	r27
+ 484:	ef 93       	push	r30
+ 486:	ff 93       	push	r31
+	tp_rxISR(&tp3);
+ 488:	87 e5       	ldi	r24, 0x57	; 87
+ 48a:	90 e2       	ldi	r25, 0x20	; 32
+ 48c:	0e 94 65 03 	call	0x6ca	; 0x6ca <tp_rxISR>
 }
+ 490:	ff 91       	pop	r31
+ 492:	ef 91       	pop	r30
+ 494:	bf 91       	pop	r27
+ 496:	af 91       	pop	r26
+ 498:	9f 91       	pop	r25
+ 49a:	8f 91       	pop	r24
+ 49c:	7f 91       	pop	r23
+ 49e:	6f 91       	pop	r22
+ 4a0:	5f 91       	pop	r21
+ 4a2:	4f 91       	pop	r20
+ 4a4:	3f 91       	pop	r19
+ 4a6:	2f 91       	pop	r18
+ 4a8:	0f 90       	pop	r0
+ 4aa:	0b be       	out	0x3b, r0	; 59
+ 4ac:	0f 90       	pop	r0
+ 4ae:	09 be       	out	0x39, r0	; 57
+ 4b0:	0f 90       	pop	r0
+ 4b2:	08 be       	out	0x38, r0	; 56
+ 4b4:	0f 90       	pop	r0
+ 4b6:	0f be       	out	0x3f, r0	; 63
+ 4b8:	0f 90       	pop	r0
+ 4ba:	1f 90       	pop	r1
+ 4bc:	18 95       	reti
 
-void rb_reset(ringbuffer_t rb){
-	rb->head = 0;
-	rb->tail = 0;
- 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
+000004be <__vector_91>:
 
-000006ba <rb_write>:
+ISR(USARTD1_RXC_vect){
+ 4be:	1f 92       	push	r1
+ 4c0:	0f 92       	push	r0
+ 4c2:	0f b6       	in	r0, 0x3f	; 63
+ 4c4:	0f 92       	push	r0
+ 4c6:	11 24       	eor	r1, r1
+ 4c8:	08 b6       	in	r0, 0x38	; 56
+ 4ca:	0f 92       	push	r0
+ 4cc:	18 be       	out	0x38, r1	; 56
+ 4ce:	09 b6       	in	r0, 0x39	; 57
+ 4d0:	0f 92       	push	r0
+ 4d2:	19 be       	out	0x39, r1	; 57
+ 4d4:	0b b6       	in	r0, 0x3b	; 59
+ 4d6:	0f 92       	push	r0
+ 4d8:	1b be       	out	0x3b, r1	; 59
+ 4da:	2f 93       	push	r18
+ 4dc:	3f 93       	push	r19
+ 4de:	4f 93       	push	r20
+ 4e0:	5f 93       	push	r21
+ 4e2:	6f 93       	push	r22
+ 4e4:	7f 93       	push	r23
+ 4e6:	8f 93       	push	r24
+ 4e8:	9f 93       	push	r25
+ 4ea:	af 93       	push	r26
+ 4ec:	bf 93       	push	r27
+ 4ee:	ef 93       	push	r30
+ 4f0:	ff 93       	push	r31
+	tp_rxISR(&tp4);
+ 4f2:	8c e3       	ldi	r24, 0x3C	; 60
+ 4f4:	90 e2       	ldi	r25, 0x20	; 32
+ 4f6:	0e 94 65 03 	call	0x6ca	; 0x6ca <tp_rxISR>
 }
+ 4fa:	ff 91       	pop	r31
+ 4fc:	ef 91       	pop	r30
+ 4fe:	bf 91       	pop	r27
+ 500:	af 91       	pop	r26
+ 502:	9f 91       	pop	r25
+ 504:	8f 91       	pop	r24
+ 506:	7f 91       	pop	r23
+ 508:	6f 91       	pop	r22
+ 50a:	5f 91       	pop	r21
+ 50c:	4f 91       	pop	r20
+ 50e:	3f 91       	pop	r19
+ 510:	2f 91       	pop	r18
+ 512:	0f 90       	pop	r0
+ 514:	0b be       	out	0x3b, r0	; 59
+ 516:	0f 90       	pop	r0
+ 518:	09 be       	out	0x39, r0	; 57
+ 51a:	0f 90       	pop	r0
+ 51c:	08 be       	out	0x38, r0	; 56
+ 51e:	0f 90       	pop	r0
+ 520:	0f be       	out	0x3f, r0	; 63
+ 522:	0f 90       	pop	r0
+ 524:	1f 90       	pop	r1
+ 526:	18 95       	reti
 
+00000528 <rb_reset>:
+	rb_reset(rb);
+	return 1;
+}
 
-void rb_write(ringbuffer_t rb, uint8_t data){
- 6ba:	fc 01       	movw	r30, r24
-	// write to head
-
-	rb->buf[rb->head] = data;
- 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;
- 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>
+uint8_t rb_reset(ringbuffer_t *rb){
+	if(rb){
+ 528:	00 97       	sbiw	r24, 0x00	; 0
+ 52a:	39 f0       	breq	.+14     	; 0x53a <rb_reset+0x12>
 		rb->head = 0;
- 6e6:	12 82       	std	Z+2, r1	; 0x02
- 6e8:	08 95       	ret
-
-000006ea <rb_read>:
+ 52c:	fc 01       	movw	r30, r24
+ 52e:	12 82       	std	Z+2, r1	; 0x02
+ 530:	13 82       	std	Z+3, r1	; 0x03
+		rb->tail = 0;
+ 532:	14 82       	std	Z+4, r1	; 0x04
+ 534:	15 82       	std	Z+5, r1	; 0x05
+		return 1;
+ 536:	81 e0       	ldi	r24, 0x01	; 1
+ 538:	08 95       	ret
+	} else {
+		return 0;
+ 53a:	80 e0       	ldi	r24, 0x00	; 0
 	}
-	// increment head and check wrap
 }
+ 53c:	08 95       	ret
 
-uint8_t rb_read(ringbuffer_t rb){
- 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];
- 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;
- 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;
- 718:	13 82       	std	Z+3, r1	; 0x03
+0000053e <rb_init>:
+#include "ringbuffer.h"
+#include <stdlib.h>
+#include <avr/io.h>
+
+uint8_t rb_init(ringbuffer_t *rb, size_t size){
+ 53e:	cf 93       	push	r28
+ 540:	df 93       	push	r29
+ 542:	ec 01       	movw	r28, r24
+ 544:	cb 01       	movw	r24, r22
+	rb->size = size;
+ 546:	6e 83       	std	Y+6, r22	; 0x06
+ 548:	7f 83       	std	Y+7, r23	; 0x07
+	rb->buffer = malloc(rb->size);
+ 54a:	0e 94 b1 03 	call	0x762	; 0x762 <malloc>
+ 54e:	88 83       	st	Y, r24
+ 550:	99 83       	std	Y+1, r25	; 0x01
+	rb_reset(rb);
+ 552:	ce 01       	movw	r24, r28
+ 554:	0e 94 94 02 	call	0x528	; 0x528 <rb_reset>
+	return 1;
+}
+ 558:	81 e0       	ldi	r24, 0x01	; 1
+ 55a:	df 91       	pop	r29
+ 55c:	cf 91       	pop	r28
+ 55e:	08 95       	ret
+
+00000560 <rb_put>:
+		return 0;
 	}
-	return data;
 }
- 71a:	1f 91       	pop	r17
- 71c:	0f 91       	pop	r16
- 71e:	08 95       	ret
 
-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;
+uint8_t rb_put(ringbuffer_t *rb, uint8_t data){
+ 560:	fc 01       	movw	r30, r24
+	if(rb){
+ 562:	89 2b       	or	r24, r25
+ 564:	f1 f0       	breq	.+60     	; 0x5a2 <rb_put+0x42>
+		rb->buffer[rb->head] = data;
+ 566:	a0 81       	ld	r26, Z
+ 568:	b1 81       	ldd	r27, Z+1	; 0x01
+ 56a:	82 81       	ldd	r24, Z+2	; 0x02
+ 56c:	93 81       	ldd	r25, Z+3	; 0x03
+ 56e:	a8 0f       	add	r26, r24
+ 570:	b9 1f       	adc	r27, r25
+ 572:	6c 93       	st	X, r22
+		rb->head = (rb->head + 1) % rb->size; // for wrap around
+ 574:	26 81       	ldd	r18, Z+6	; 0x06
+ 576:	37 81       	ldd	r19, Z+7	; 0x07
+ 578:	82 81       	ldd	r24, Z+2	; 0x02
+ 57a:	93 81       	ldd	r25, Z+3	; 0x03
+ 57c:	01 96       	adiw	r24, 0x01	; 1
+ 57e:	b9 01       	movw	r22, r18
+ 580:	0e 94 9d 03 	call	0x73a	; 0x73a <__udivmodhi4>
+ 584:	82 83       	std	Z+2, r24	; 0x02
+ 586:	93 83       	std	Z+3, r25	; 0x03
+		if(rb->head == rb->tail){
+ 588:	44 81       	ldd	r20, Z+4	; 0x04
+ 58a:	55 81       	ldd	r21, Z+5	; 0x05
+ 58c:	84 17       	cp	r24, r20
+ 58e:	95 07       	cpc	r25, r21
+ 590:	51 f4       	brne	.+20     	; 0x5a6 <rb_put+0x46>
+			rb->tail = (rb->tail + 1) % rb->size;
+ 592:	01 96       	adiw	r24, 0x01	; 1
+ 594:	b9 01       	movw	r22, r18
+ 596:	0e 94 9d 03 	call	0x73a	; 0x73a <__udivmodhi4>
+ 59a:	84 83       	std	Z+4, r24	; 0x04
+ 59c:	95 83       	std	Z+5, r25	; 0x05
+		}
+		return 1;
+ 59e:	81 e0       	ldi	r24, 0x01	; 1
+ 5a0:	08 95       	ret
 	} else {
+		return 0;
+ 5a2:	80 e0       	ldi	r24, 0x00	; 0
+ 5a4:	08 95       	ret
+		rb->buffer[rb->head] = data;
+		rb->head = (rb->head + 1) % rb->size; // for wrap around
+		if(rb->head == rb->tail){
+			rb->tail = (rb->tail + 1) % rb->size;
+		}
 		return 1;
-	}
- 72e:	08 95       	ret
-
-00000730 <tp_new>:
-void tp_setRxStatus(tinyport_t tp, uint8_t state){
-	if(state == tp->rxstate){
-		// nothing
-		// nothing changes? always listening
+ 5a6:	81 e0       	ldi	r24, 0x01	; 1
 	} 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
+		return 0;
+	}
+}
+ 5a8:	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
+000005aa <rb_get>:
 
-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
+uint8_t rb_get(ringbuffer_t *rb, uint8_t *data){
+ 5aa:	fc 01       	movw	r30, r24
+	if(rb && data && !rb_empty(*rb)){
+ 5ac:	89 2b       	or	r24, r25
+ 5ae:	e1 f0       	breq	.+56     	; 0x5e8 <rb_get+0x3e>
+ 5b0:	61 15       	cp	r22, r1
+ 5b2:	71 05       	cpc	r23, r1
+ 5b4:	d9 f0       	breq	.+54     	; 0x5ec <rb_get+0x42>
+ 5b6:	22 81       	ldd	r18, Z+2	; 0x02
+ 5b8:	33 81       	ldd	r19, Z+3	; 0x03
+ 5ba:	84 81       	ldd	r24, Z+4	; 0x04
+ 5bc:	95 81       	ldd	r25, Z+5	; 0x05
+ 5be:	28 17       	cp	r18, r24
+ 5c0:	39 07       	cpc	r19, r25
+ 5c2:	b1 f0       	breq	.+44     	; 0x5f0 <rb_get+0x46>
+		*data = rb->buffer[rb->tail];
+ 5c4:	a0 81       	ld	r26, Z
+ 5c6:	b1 81       	ldd	r27, Z+1	; 0x01
+ 5c8:	a8 0f       	add	r26, r24
+ 5ca:	b9 1f       	adc	r27, r25
+ 5cc:	8c 91       	ld	r24, X
+ 5ce:	db 01       	movw	r26, r22
+ 5d0:	8c 93       	st	X, r24
+		rb->tail = (rb->tail + 1) % rb->size;
+ 5d2:	84 81       	ldd	r24, Z+4	; 0x04
+ 5d4:	95 81       	ldd	r25, Z+5	; 0x05
+ 5d6:	01 96       	adiw	r24, 0x01	; 1
+ 5d8:	66 81       	ldd	r22, Z+6	; 0x06
+ 5da:	77 81       	ldd	r23, Z+7	; 0x07
+ 5dc:	0e 94 9d 03 	call	0x73a	; 0x73a <__udivmodhi4>
+ 5e0:	84 83       	std	Z+4, r24	; 0x04
+ 5e2:	95 83       	std	Z+5, r25	; 0x05
+		return 1;
+ 5e4:	81 e0       	ldi	r24, 0x01	; 1
+ 5e6:	08 95       	ret
+	} else {
+		return 0;
+ 5e8:	80 e0       	ldi	r24, 0x00	; 0
+ 5ea:	08 95       	ret
+ 5ec:	80 e0       	ldi	r24, 0x00	; 0
+ 5ee:	08 95       	ret
+ 5f0:	80 e0       	ldi	r24, 0x00	; 0
+	}
+}
+ 5f2:	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
+000005f4 <tp_new>:
+ */ 
 
-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
+#include "tinyport.h"
+#include <util/delay.h>
 
-00000878 <tp_setTxStatus>:
-void tp_write(tinyport_t tp, uint8_t data){
-	rb_write(tp->rbtx, data);
-	tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available
+tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_bm, uint8_t pinSTAT_bm){
+ 5f4:	cf 92       	push	r12
+ 5f6:	df 92       	push	r13
+ 5f8:	ef 92       	push	r14
+ 5fa:	0f 93       	push	r16
+ 5fc:	cf 93       	push	r28
+ 5fe:	df 93       	push	r29
+ 600:	cd b7       	in	r28, 0x3d	; 61
+ 602:	de b7       	in	r29, 0x3e	; 62
+ 604:	6b 97       	sbiw	r28, 0x1b	; 27
+ 606:	cd bf       	out	0x3d, r28	; 61
+ 608:	de bf       	out	0x3e, r29	; 62
+ 60a:	6c 01       	movw	r12, r24
+	
+	tinyport_t tp;
+	
+	tp.uart = uart;
+ 60c:	69 83       	std	Y+1, r22	; 0x01
+ 60e:	7a 83       	std	Y+2, r23	; 0x02
+	tp.port = port;
+ 610:	4b 83       	std	Y+3, r20	; 0x03
+ 612:	5c 83       	std	Y+4, r21	; 0x04
+	
+	tp.pinRX_bm = pinRX_bm;
+ 614:	2d 83       	std	Y+5, r18	; 0x05
+	tp.pinTX_bm = pinTX_bm;
+ 616:	0e 83       	std	Y+6, r16	; 0x06
+	tp.pinSTAT_bm = pinSTAT_bm;
+ 618:	ef 82       	std	Y+7, r14	; 0x07
+	
+	tp.txstate = TP_TX_STATE_EMPTY;
+ 61a:	18 86       	std	Y+8, r1	; 0x08
+	tp.rxstate = TP_RX_STATE_EMPTY;
+ 61c:	19 86       	std	Y+9, r1	; 0x09
+	tp.pstate = TP_PSTATE_OUTSIDE;
+ 61e:	1a 86       	std	Y+10, r1	; 0x0a
+	
+	rb_init(&tp.rbrx, TP_RXBUF_SIZE);
+ 620:	60 e8       	ldi	r22, 0x80	; 128
+ 622:	70 e0       	ldi	r23, 0x00	; 0
+ 624:	ce 01       	movw	r24, r28
+ 626:	0c 96       	adiw	r24, 0x0c	; 12
+ 628:	0e 94 9f 02 	call	0x53e	; 0x53e <rb_init>
+	rb_init(&tp.rbtx, TP_TXBUF_SIZE);
+ 62c:	60 e8       	ldi	r22, 0x80	; 128
+ 62e:	70 e0       	ldi	r23, 0x00	; 0
+ 630:	ce 01       	movw	r24, r28
+ 632:	44 96       	adiw	r24, 0x14	; 20
+ 634:	0e 94 9f 02 	call	0x53e	; 0x53e <rb_init>
+	
+	return tp;
+ 638:	8b e1       	ldi	r24, 0x1B	; 27
+ 63a:	fe 01       	movw	r30, r28
+ 63c:	31 96       	adiw	r30, 0x01	; 1
+ 63e:	d6 01       	movw	r26, r12
+ 640:	01 90       	ld	r0, Z+
+ 642:	0d 92       	st	X+, r0
+ 644:	8a 95       	dec	r24
+ 646:	e1 f7       	brne	.-8      	; 0x640 <tp_new+0x4c>
 }
+ 648:	c6 01       	movw	r24, r12
+ 64a:	6b 96       	adiw	r28, 0x1b	; 27
+ 64c:	cd bf       	out	0x3d, r28	; 61
+ 64e:	de bf       	out	0x3e, r29	; 62
+ 650:	df 91       	pop	r29
+ 652:	cf 91       	pop	r28
+ 654:	0f 91       	pop	r16
+ 656:	ef 90       	pop	r14
+ 658:	df 90       	pop	r13
+ 65a:	cf 90       	pop	r12
+ 65c:	08 95       	ret
 
-void tp_setTxStatus(tinyport_t tp, uint8_t state){
- 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
- 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
- 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
+0000065e <tp_init>:
 
-000008ac <tp_txISR>:
-	}
-}
-
-// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
+// mostly, start the uart port
+void tp_init(tinyport_t *tp){
+ 65e:	fc 01       	movw	r30, r24
+	// USART is in UART (async) mode automatically
+	// these registers setup the baudrate - the bitrate
+	// this seems a bit tricky. I am taking for granted that the clock is at 48MHz,
+	tp->uart->BAUDCTRLA = TP_UART_BAUDCONTROLA;
+ 660:	a0 81       	ld	r26, Z
+ 662:	b1 81       	ldd	r27, Z+1	; 0x01
+ 664:	8b e9       	ldi	r24, 0x9B	; 155
+ 666:	16 96       	adiw	r26, 0x06	; 6
+ 668:	8c 93       	st	X, r24
+	tp->uart->BAUDCTRLB = TP_UART_BAUDCONTROLB;
+ 66a:	a0 81       	ld	r26, Z
+ 66c:	b1 81       	ldd	r27, Z+1	; 0x01
+ 66e:	17 96       	adiw	r26, 0x07	; 7
+ 670:	1c 92       	st	X, r1
+	
+	// setup for interrupt
+	// receive complete interrupt low level, transmit complete interupt off, transmit buffer empty interupt off
+	tp->uart->CTRLA |= USART_RXCINTLVL_LO_gc | USART_TXCINTLVL_OFF_gc | USART_DREINTLVL_OFF_gc;
+ 672:	a0 81       	ld	r26, Z
+ 674:	b1 81       	ldd	r27, Z+1	; 0x01
+ 676:	13 96       	adiw	r26, 0x03	; 3
+ 678:	8c 91       	ld	r24, X
+ 67a:	13 97       	sbiw	r26, 0x03	; 3
+ 67c:	80 61       	ori	r24, 0x10	; 16
+ 67e:	13 96       	adiw	r26, 0x03	; 3
+ 680:	8c 93       	st	X, r24
 
-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
+	// enables tx and rx
+	tp->uart->CTRLB = USART_TXEN_bm | USART_RXEN_bm;
+ 682:	a0 81       	ld	r26, Z
+ 684:	b1 81       	ldd	r27, Z+1	; 0x01
+ 686:	88 e1       	ldi	r24, 0x18	; 24
+ 688:	14 96       	adiw	r26, 0x04	; 4
+ 68a:	8c 93       	st	X, r24
+	
+	// setup mode
+	tp->uart->CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc | USART_CHSIZE_8BIT_gc; // 8 bit word, async, no parity bit}
+ 68c:	a0 81       	ld	r26, Z
+ 68e:	b1 81       	ldd	r27, Z+1	; 0x01
+ 690:	83 e0       	ldi	r24, 0x03	; 3
+ 692:	15 96       	adiw	r26, 0x05	; 5
+ 694:	8c 93       	st	X, r24
+	
+	// some GPIO setup, to agree with the UART peripheral
+	// tx pin (pin mapping is in the 'Datasheet', registers etc are in the 'Manual') these are default pins
+	tp->port->OUTSET = tp->pinTX_bm;
+ 696:	a2 81       	ldd	r26, Z+2	; 0x02
+ 698:	b3 81       	ldd	r27, Z+3	; 0x03
+ 69a:	85 81       	ldd	r24, Z+5	; 0x05
+ 69c:	15 96       	adiw	r26, 0x05	; 5
+ 69e:	8c 93       	st	X, r24
+	tp->port->DIRSET = tp->pinTX_bm;
+ 6a0:	a2 81       	ldd	r26, Z+2	; 0x02
+ 6a2:	b3 81       	ldd	r27, Z+3	; 0x03
+ 6a4:	85 81       	ldd	r24, Z+5	; 0x05
+ 6a6:	11 96       	adiw	r26, 0x01	; 1
+ 6a8:	8c 93       	st	X, r24
+	// rx pin
+	tp->port->DIRCLR = tp->pinRX_bm;
+ 6aa:	a2 81       	ldd	r26, Z+2	; 0x02
+ 6ac:	b3 81       	ldd	r27, Z+3	; 0x03
+ 6ae:	84 81       	ldd	r24, Z+4	; 0x04
+ 6b0:	12 96       	adiw	r26, 0x02	; 2
+ 6b2:	8c 93       	st	X, r24
+	tp->port->OUTCLR = tp->pinRX_bm;
+ 6b4:	a2 81       	ldd	r26, Z+2	; 0x02
+ 6b6:	b3 81       	ldd	r27, Z+3	; 0x03
+ 6b8:	84 81       	ldd	r24, Z+4	; 0x04
+ 6ba:	16 96       	adiw	r26, 0x06	; 6
+ 6bc:	8c 93       	st	X, r24
 	// stat pin
 	tp->port->DIRSET = tp->pinSTAT_bm;
+ 6be:	a2 81       	ldd	r26, Z+2	; 0x02
+ 6c0:	b3 81       	ldd	r27, Z+3	; 0x03
+ 6c2:	86 81       	ldd	r24, Z+6	; 0x06
+ 6c4:	11 96       	adiw	r26, 0x01	; 1
+ 6c6:	8c 93       	st	X, r24
+ 6c8:	08 95       	ret
+
+000006ca <tp_rxISR>:
 }
 
-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
+void tp_rxISR(tinyport_t *tp){ // towards a passalong
+ 6ca:	fc 01       	movw	r30, r24
+	while(!(tp->uart->STATUS & USART_DREIF_bm)); // while not ready, wait (this is blocking)
+	tp->uart->DATA = data;
+}
 
-// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
+void tp_statflash(tinyport_t *tp){
+	tp->port->OUTTGL = tp->pinSTAT_bm;
+ 6cc:	a2 81       	ldd	r26, Z+2	; 0x02
+ 6ce:	b3 81       	ldd	r27, Z+3	; 0x03
+ 6d0:	86 81       	ldd	r24, Z+6	; 0x06
+ 6d2:	17 96       	adiw	r26, 0x07	; 7
+ 6d4:	8c 93       	st	X, r24
+}
 
-void tp_txISR(tinyport_t tp){
+void tp_rxISR(tinyport_t *tp){ // towards a passalong
 	tp_statflash(tp);
-	tp->uart->DATA = rb_read(tp->rbtx);
- 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>
+	
+	tp->bumpdata = tp->uart->DATA;
+ 6d6:	a0 81       	ld	r26, Z
+ 6d8:	b1 81       	ldd	r27, Z+1	; 0x01
+ 6da:	6c 91       	ld	r22, X
+ 6dc:	62 87       	std	Z+10, r22	; 0x0a
+	
+	switch (tp->pstate){
+ 6de:	81 85       	ldd	r24, Z+9	; 0x09
+ 6e0:	88 23       	and	r24, r24
+ 6e2:	19 f0       	breq	.+6      	; 0x6ea <tp_rxISR+0x20>
+ 6e4:	81 30       	cpi	r24, 0x01	; 1
+ 6e6:	31 f0       	breq	.+12     	; 0x6f4 <tp_rxISR+0x2a>
+ 6e8:	08 95       	ret
+		
+		case TP_PSTATE_OUTSIDE:
+			if(tp->bumpdata == 126){
+ 6ea:	6e 37       	cpi	r22, 0x7E	; 126
+ 6ec:	59 f4       	brne	.+22     	; 0x704 <tp_rxISR+0x3a>
+				tp->pstate = TP_PSTATE_INSIDE;
+ 6ee:	81 e0       	ldi	r24, 0x01	; 1
+ 6f0:	81 87       	std	Z+9, r24	; 0x09
+ 6f2:	08 95       	ret
+			}
+			break;
+			
+		case TP_PSTATE_INSIDE:
+			if(tp->bumpdata == 126){
+ 6f4:	6e 37       	cpi	r22, 0x7E	; 126
+ 6f6:	11 f4       	brne	.+4      	; 0x6fc <tp_rxISR+0x32>
+				tp->pstate = TP_PSTATE_OUTSIDE;
+ 6f8:	11 86       	std	Z+9, r1	; 0x09
+ 6fa:	08 95       	ret
+ 6fc:	cf 01       	movw	r24, r30
+			} else {
+				rb_put(&tp->rbrx, tp->bumpdata);
+ 6fe:	0b 96       	adiw	r24, 0x0b	; 11
+ 700:	0e 94 b0 02 	call	0x560	; 0x560 <rb_put>
+ 704:	08 95       	ret
+
+00000706 <tp_read>:
+		break;	
+	}
+}
+
+uint8_t tp_read(tinyport_t *tp, uint8_t *data){ // TODO: set at pointer, return true if non empty
+	if(rb_get(&tp->rbrx, data)){
+ 706:	0b 96       	adiw	r24, 0x0b	; 11
+ 708:	0e 94 d5 02 	call	0x5aa	; 0x5aa <rb_get>
+ 70c:	91 e0       	ldi	r25, 0x01	; 1
+ 70e:	81 11       	cpse	r24, r1
+ 710:	01 c0       	rjmp	.+2      	; 0x714 <tp_read+0xe>
+ 712:	90 e0       	ldi	r25, 0x00	; 0
+		return 1;
+	} else {
+		return 0;
 	}
 }
- 8e2:	df 91       	pop	r29
- 8e4:	cf 91       	pop	r28
- 8e6:	1f 91       	pop	r17
- 8e8:	0f 91       	pop	r16
- 8ea:	08 95       	ret
+ 714:	89 2f       	mov	r24, r25
+ 716:	08 95       	ret
 
-000008ec <tp_write>:
+00000718 <tp_write>:
 
-void tp_write(tinyport_t tp, uint8_t data){
- 8ec:	cf 93       	push	r28
- 8ee:	df 93       	push	r29
- 8f0:	ec 01       	movw	r28, r24
-	rb_write(tp->rbtx, data);
- 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>
+// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
+
+void tp_write(tinyport_t *tp, uint8_t data){
+	while(!(tp->uart->STATUS & USART_DREIF_bm)); // while not ready, wait (this is blocking)
+ 718:	dc 01       	movw	r26, r24
+ 71a:	ed 91       	ld	r30, X+
+ 71c:	fc 91       	ld	r31, X
+ 71e:	81 81       	ldd	r24, Z+1	; 0x01
+ 720:	85 ff       	sbrs	r24, 5
+ 722:	fd cf       	rjmp	.-6      	; 0x71e <tp_write+0x6>
+	tp->uart->DATA = data;
+ 724:	60 83       	st	Z, r22
+ 726:	08 95       	ret
+
+00000728 <tp_statflash>:
 }
- 902:	df 91       	pop	r29
- 904:	cf 91       	pop	r28
- 906:	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
+void tp_statflash(tinyport_t *tp){
+	tp->port->OUTTGL = tp->pinSTAT_bm;
+ 728:	dc 01       	movw	r26, r24
+ 72a:	12 96       	adiw	r26, 0x02	; 2
+ 72c:	ed 91       	ld	r30, X+
+ 72e:	fc 91       	ld	r31, X
+ 730:	13 97       	sbiw	r26, 0x03	; 3
+ 732:	16 96       	adiw	r26, 0x06	; 6
+ 734:	8c 91       	ld	r24, X
+ 736:	87 83       	std	Z+7, r24	; 0x07
+ 738:	08 95       	ret
+
+0000073a <__udivmodhi4>:
+ 73a:	aa 1b       	sub	r26, r26
+ 73c:	bb 1b       	sub	r27, r27
+ 73e:	51 e1       	ldi	r21, 0x11	; 17
+ 740:	07 c0       	rjmp	.+14     	; 0x750 <__udivmodhi4_ep>
+
+00000742 <__udivmodhi4_loop>:
+ 742:	aa 1f       	adc	r26, r26
+ 744:	bb 1f       	adc	r27, r27
+ 746:	a6 17       	cp	r26, r22
+ 748:	b7 07       	cpc	r27, r23
+ 74a:	10 f0       	brcs	.+4      	; 0x750 <__udivmodhi4_ep>
+ 74c:	a6 1b       	sub	r26, r22
+ 74e:	b7 0b       	sbc	r27, r23
+
+00000750 <__udivmodhi4_ep>:
+ 750:	88 1f       	adc	r24, r24
+ 752:	99 1f       	adc	r25, r25
+ 754:	5a 95       	dec	r21
+ 756:	a9 f7       	brne	.-22     	; 0x742 <__udivmodhi4_loop>
+ 758:	80 95       	com	r24
+ 75a:	90 95       	com	r25
+ 75c:	bc 01       	movw	r22, r24
+ 75e:	cd 01       	movw	r24, r26
+ 760:	08 95       	ret
+
+00000762 <malloc>:
+ 762:	0f 93       	push	r16
+ 764:	1f 93       	push	r17
+ 766:	cf 93       	push	r28
+ 768:	df 93       	push	r29
+ 76a:	82 30       	cpi	r24, 0x02	; 2
+ 76c:	91 05       	cpc	r25, r1
+ 76e:	10 f4       	brcc	.+4      	; 0x774 <malloc+0x12>
+ 770:	82 e0       	ldi	r24, 0x02	; 2
+ 772:	90 e0       	ldi	r25, 0x00	; 0
+ 774:	e0 91 74 20 	lds	r30, 0x2074	; 0x802074 <__flp>
+ 778:	f0 91 75 20 	lds	r31, 0x2075	; 0x802075 <__flp+0x1>
+ 77c:	20 e0       	ldi	r18, 0x00	; 0
+ 77e:	30 e0       	ldi	r19, 0x00	; 0
+ 780:	a0 e0       	ldi	r26, 0x00	; 0
+ 782:	b0 e0       	ldi	r27, 0x00	; 0
+ 784:	30 97       	sbiw	r30, 0x00	; 0
+ 786:	19 f1       	breq	.+70     	; 0x7ce <malloc+0x6c>
+ 788:	40 81       	ld	r20, Z
+ 78a:	51 81       	ldd	r21, Z+1	; 0x01
+ 78c:	02 81       	ldd	r16, Z+2	; 0x02
+ 78e:	13 81       	ldd	r17, Z+3	; 0x03
+ 790:	48 17       	cp	r20, r24
+ 792:	59 07       	cpc	r21, r25
+ 794:	c8 f0       	brcs	.+50     	; 0x7c8 <malloc+0x66>
+ 796:	84 17       	cp	r24, r20
+ 798:	95 07       	cpc	r25, r21
+ 79a:	69 f4       	brne	.+26     	; 0x7b6 <malloc+0x54>
+ 79c:	10 97       	sbiw	r26, 0x00	; 0
+ 79e:	31 f0       	breq	.+12     	; 0x7ac <malloc+0x4a>
+ 7a0:	12 96       	adiw	r26, 0x02	; 2
+ 7a2:	0c 93       	st	X, r16
+ 7a4:	12 97       	sbiw	r26, 0x02	; 2
+ 7a6:	13 96       	adiw	r26, 0x03	; 3
+ 7a8:	1c 93       	st	X, r17
+ 7aa:	27 c0       	rjmp	.+78     	; 0x7fa <malloc+0x98>
+ 7ac:	00 93 74 20 	sts	0x2074, r16	; 0x802074 <__flp>
+ 7b0:	10 93 75 20 	sts	0x2075, r17	; 0x802075 <__flp+0x1>
+ 7b4:	22 c0       	rjmp	.+68     	; 0x7fa <malloc+0x98>
+ 7b6:	21 15       	cp	r18, r1
+ 7b8:	31 05       	cpc	r19, r1
+ 7ba:	19 f0       	breq	.+6      	; 0x7c2 <malloc+0x60>
+ 7bc:	42 17       	cp	r20, r18
+ 7be:	53 07       	cpc	r21, r19
+ 7c0:	18 f4       	brcc	.+6      	; 0x7c8 <malloc+0x66>
+ 7c2:	9a 01       	movw	r18, r20
+ 7c4:	bd 01       	movw	r22, r26
+ 7c6:	ef 01       	movw	r28, r30
+ 7c8:	df 01       	movw	r26, r30
+ 7ca:	f8 01       	movw	r30, r16
+ 7cc:	db cf       	rjmp	.-74     	; 0x784 <malloc+0x22>
+ 7ce:	21 15       	cp	r18, r1
+ 7d0:	31 05       	cpc	r19, r1
+ 7d2:	f9 f0       	breq	.+62     	; 0x812 <malloc+0xb0>
+ 7d4:	28 1b       	sub	r18, r24
+ 7d6:	39 0b       	sbc	r19, r25
+ 7d8:	24 30       	cpi	r18, 0x04	; 4
+ 7da:	31 05       	cpc	r19, r1
+ 7dc:	80 f4       	brcc	.+32     	; 0x7fe <malloc+0x9c>
+ 7de:	8a 81       	ldd	r24, Y+2	; 0x02
+ 7e0:	9b 81       	ldd	r25, Y+3	; 0x03
+ 7e2:	61 15       	cp	r22, r1
+ 7e4:	71 05       	cpc	r23, r1
+ 7e6:	21 f0       	breq	.+8      	; 0x7f0 <malloc+0x8e>
+ 7e8:	fb 01       	movw	r30, r22
+ 7ea:	82 83       	std	Z+2, r24	; 0x02
+ 7ec:	93 83       	std	Z+3, r25	; 0x03
+ 7ee:	04 c0       	rjmp	.+8      	; 0x7f8 <malloc+0x96>
+ 7f0:	80 93 74 20 	sts	0x2074, r24	; 0x802074 <__flp>
+ 7f4:	90 93 75 20 	sts	0x2075, r25	; 0x802075 <__flp+0x1>
+ 7f8:	fe 01       	movw	r30, r28
+ 7fa:	32 96       	adiw	r30, 0x02	; 2
+ 7fc:	44 c0       	rjmp	.+136    	; 0x886 <malloc+0x124>
+ 7fe:	fe 01       	movw	r30, r28
+ 800:	e2 0f       	add	r30, r18
+ 802:	f3 1f       	adc	r31, r19
+ 804:	81 93       	st	Z+, r24
+ 806:	91 93       	st	Z+, r25
+ 808:	22 50       	subi	r18, 0x02	; 2
+ 80a:	31 09       	sbc	r19, r1
+ 80c:	28 83       	st	Y, r18
+ 80e:	39 83       	std	Y+1, r19	; 0x01
+ 810:	3a c0       	rjmp	.+116    	; 0x886 <malloc+0x124>
+ 812:	20 91 72 20 	lds	r18, 0x2072	; 0x802072 <__brkval>
+ 816:	30 91 73 20 	lds	r19, 0x2073	; 0x802073 <__brkval+0x1>
+ 81a:	23 2b       	or	r18, r19
+ 81c:	41 f4       	brne	.+16     	; 0x82e <malloc+0xcc>
+ 81e:	20 91 02 20 	lds	r18, 0x2002	; 0x802002 <__malloc_heap_start>
+ 822:	30 91 03 20 	lds	r19, 0x2003	; 0x802003 <__malloc_heap_start+0x1>
+ 826:	20 93 72 20 	sts	0x2072, r18	; 0x802072 <__brkval>
+ 82a:	30 93 73 20 	sts	0x2073, r19	; 0x802073 <__brkval+0x1>
+ 82e:	20 91 00 20 	lds	r18, 0x2000	; 0x802000 <__data_start>
+ 832:	30 91 01 20 	lds	r19, 0x2001	; 0x802001 <__data_start+0x1>
+ 836:	21 15       	cp	r18, r1
+ 838:	31 05       	cpc	r19, r1
+ 83a:	41 f4       	brne	.+16     	; 0x84c <malloc+0xea>
+ 83c:	2d b7       	in	r18, 0x3d	; 61
+ 83e:	3e b7       	in	r19, 0x3e	; 62
+ 840:	40 91 04 20 	lds	r20, 0x2004	; 0x802004 <__malloc_margin>
+ 844:	50 91 05 20 	lds	r21, 0x2005	; 0x802005 <__malloc_margin+0x1>
+ 848:	24 1b       	sub	r18, r20
+ 84a:	35 0b       	sbc	r19, r21
+ 84c:	e0 91 72 20 	lds	r30, 0x2072	; 0x802072 <__brkval>
+ 850:	f0 91 73 20 	lds	r31, 0x2073	; 0x802073 <__brkval+0x1>
+ 854:	e2 17       	cp	r30, r18
+ 856:	f3 07       	cpc	r31, r19
+ 858:	a0 f4       	brcc	.+40     	; 0x882 <malloc+0x120>
+ 85a:	2e 1b       	sub	r18, r30
+ 85c:	3f 0b       	sbc	r19, r31
+ 85e:	28 17       	cp	r18, r24
+ 860:	39 07       	cpc	r19, r25
+ 862:	78 f0       	brcs	.+30     	; 0x882 <malloc+0x120>
+ 864:	ac 01       	movw	r20, r24
+ 866:	4e 5f       	subi	r20, 0xFE	; 254
+ 868:	5f 4f       	sbci	r21, 0xFF	; 255
+ 86a:	24 17       	cp	r18, r20
+ 86c:	35 07       	cpc	r19, r21
+ 86e:	48 f0       	brcs	.+18     	; 0x882 <malloc+0x120>
+ 870:	4e 0f       	add	r20, r30
+ 872:	5f 1f       	adc	r21, r31
+ 874:	40 93 72 20 	sts	0x2072, r20	; 0x802072 <__brkval>
+ 878:	50 93 73 20 	sts	0x2073, r21	; 0x802073 <__brkval+0x1>
+ 87c:	81 93       	st	Z+, r24
+ 87e:	91 93       	st	Z+, r25
+ 880:	02 c0       	rjmp	.+4      	; 0x886 <malloc+0x124>
+ 882:	e0 e0       	ldi	r30, 0x00	; 0
+ 884:	f0 e0       	ldi	r31, 0x00	; 0
+ 886:	cf 01       	movw	r24, r30
+ 888:	df 91       	pop	r29
+ 88a:	cf 91       	pop	r28
+ 88c:	1f 91       	pop	r17
+ 88e:	0f 91       	pop	r16
+ 890:	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
+00000892 <free>:
+ 892:	cf 93       	push	r28
+ 894:	df 93       	push	r29
+ 896:	00 97       	sbiw	r24, 0x00	; 0
+ 898:	09 f4       	brne	.+2      	; 0x89c <free+0xa>
+ 89a:	81 c0       	rjmp	.+258    	; 0x99e <free+0x10c>
+ 89c:	fc 01       	movw	r30, r24
+ 89e:	32 97       	sbiw	r30, 0x02	; 2
+ 8a0:	12 82       	std	Z+2, r1	; 0x02
+ 8a2:	13 82       	std	Z+3, r1	; 0x03
+ 8a4:	a0 91 74 20 	lds	r26, 0x2074	; 0x802074 <__flp>
+ 8a8:	b0 91 75 20 	lds	r27, 0x2075	; 0x802075 <__flp+0x1>
+ 8ac:	10 97       	sbiw	r26, 0x00	; 0
+ 8ae:	81 f4       	brne	.+32     	; 0x8d0 <free+0x3e>
+ 8b0:	20 81       	ld	r18, Z
+ 8b2:	31 81       	ldd	r19, Z+1	; 0x01
+ 8b4:	82 0f       	add	r24, r18
+ 8b6:	93 1f       	adc	r25, r19
+ 8b8:	20 91 72 20 	lds	r18, 0x2072	; 0x802072 <__brkval>
+ 8bc:	30 91 73 20 	lds	r19, 0x2073	; 0x802073 <__brkval+0x1>
+ 8c0:	28 17       	cp	r18, r24
+ 8c2:	39 07       	cpc	r19, r25
+ 8c4:	51 f5       	brne	.+84     	; 0x91a <free+0x88>
+ 8c6:	e0 93 72 20 	sts	0x2072, r30	; 0x802072 <__brkval>
+ 8ca:	f0 93 73 20 	sts	0x2073, r31	; 0x802073 <__brkval+0x1>
+ 8ce:	67 c0       	rjmp	.+206    	; 0x99e <free+0x10c>
+ 8d0:	ed 01       	movw	r28, r26
+ 8d2:	20 e0       	ldi	r18, 0x00	; 0
+ 8d4:	30 e0       	ldi	r19, 0x00	; 0
+ 8d6:	ce 17       	cp	r28, r30
+ 8d8:	df 07       	cpc	r29, r31
+ 8da:	40 f4       	brcc	.+16     	; 0x8ec <free+0x5a>
+ 8dc:	4a 81       	ldd	r20, Y+2	; 0x02
+ 8de:	5b 81       	ldd	r21, Y+3	; 0x03
+ 8e0:	9e 01       	movw	r18, r28
+ 8e2:	41 15       	cp	r20, r1
+ 8e4:	51 05       	cpc	r21, r1
+ 8e6:	f1 f0       	breq	.+60     	; 0x924 <free+0x92>
+ 8e8:	ea 01       	movw	r28, r20
+ 8ea:	f5 cf       	rjmp	.-22     	; 0x8d6 <free+0x44>
+ 8ec:	c2 83       	std	Z+2, r28	; 0x02
+ 8ee:	d3 83       	std	Z+3, r29	; 0x03
+ 8f0:	40 81       	ld	r20, Z
+ 8f2:	51 81       	ldd	r21, Z+1	; 0x01
+ 8f4:	84 0f       	add	r24, r20
+ 8f6:	95 1f       	adc	r25, r21
+ 8f8:	c8 17       	cp	r28, r24
+ 8fa:	d9 07       	cpc	r29, r25
+ 8fc:	59 f4       	brne	.+22     	; 0x914 <free+0x82>
+ 8fe:	88 81       	ld	r24, Y
+ 900:	99 81       	ldd	r25, Y+1	; 0x01
+ 902:	84 0f       	add	r24, r20
+ 904:	95 1f       	adc	r25, r21
+ 906:	02 96       	adiw	r24, 0x02	; 2
+ 908:	80 83       	st	Z, r24
+ 90a:	91 83       	std	Z+1, r25	; 0x01
+ 90c:	8a 81       	ldd	r24, Y+2	; 0x02
+ 90e:	9b 81       	ldd	r25, Y+3	; 0x03
+ 910:	82 83       	std	Z+2, r24	; 0x02
+ 912:	93 83       	std	Z+3, r25	; 0x03
+ 914:	21 15       	cp	r18, r1
+ 916:	31 05       	cpc	r19, r1
+ 918:	29 f4       	brne	.+10     	; 0x924 <free+0x92>
+ 91a:	e0 93 74 20 	sts	0x2074, r30	; 0x802074 <__flp>
+ 91e:	f0 93 75 20 	sts	0x2075, r31	; 0x802075 <__flp+0x1>
+ 922:	3d c0       	rjmp	.+122    	; 0x99e <free+0x10c>
+ 924:	e9 01       	movw	r28, r18
+ 926:	ea 83       	std	Y+2, r30	; 0x02
+ 928:	fb 83       	std	Y+3, r31	; 0x03
+ 92a:	49 91       	ld	r20, Y+
+ 92c:	59 91       	ld	r21, Y+
+ 92e:	c4 0f       	add	r28, r20
+ 930:	d5 1f       	adc	r29, r21
+ 932:	ec 17       	cp	r30, r28
+ 934:	fd 07       	cpc	r31, r29
+ 936:	61 f4       	brne	.+24     	; 0x950 <free+0xbe>
+ 938:	80 81       	ld	r24, Z
+ 93a:	91 81       	ldd	r25, Z+1	; 0x01
+ 93c:	84 0f       	add	r24, r20
+ 93e:	95 1f       	adc	r25, r21
+ 940:	02 96       	adiw	r24, 0x02	; 2
+ 942:	e9 01       	movw	r28, r18
+ 944:	88 83       	st	Y, r24
+ 946:	99 83       	std	Y+1, r25	; 0x01
+ 948:	82 81       	ldd	r24, Z+2	; 0x02
+ 94a:	93 81       	ldd	r25, Z+3	; 0x03
+ 94c:	8a 83       	std	Y+2, r24	; 0x02
+ 94e:	9b 83       	std	Y+3, r25	; 0x03
+ 950:	e0 e0       	ldi	r30, 0x00	; 0
+ 952:	f0 e0       	ldi	r31, 0x00	; 0
+ 954:	12 96       	adiw	r26, 0x02	; 2
+ 956:	8d 91       	ld	r24, X+
+ 958:	9c 91       	ld	r25, X
+ 95a:	13 97       	sbiw	r26, 0x03	; 3
+ 95c:	00 97       	sbiw	r24, 0x00	; 0
+ 95e:	19 f0       	breq	.+6      	; 0x966 <free+0xd4>
+ 960:	fd 01       	movw	r30, r26
+ 962:	dc 01       	movw	r26, r24
+ 964:	f7 cf       	rjmp	.-18     	; 0x954 <free+0xc2>
+ 966:	8d 91       	ld	r24, X+
+ 968:	9c 91       	ld	r25, X
+ 96a:	11 97       	sbiw	r26, 0x01	; 1
+ 96c:	9d 01       	movw	r18, r26
+ 96e:	2e 5f       	subi	r18, 0xFE	; 254
+ 970:	3f 4f       	sbci	r19, 0xFF	; 255
+ 972:	82 0f       	add	r24, r18
+ 974:	93 1f       	adc	r25, r19
+ 976:	20 91 72 20 	lds	r18, 0x2072	; 0x802072 <__brkval>
+ 97a:	30 91 73 20 	lds	r19, 0x2073	; 0x802073 <__brkval+0x1>
+ 97e:	28 17       	cp	r18, r24
+ 980:	39 07       	cpc	r19, r25
+ 982:	69 f4       	brne	.+26     	; 0x99e <free+0x10c>
+ 984:	30 97       	sbiw	r30, 0x00	; 0
+ 986:	29 f4       	brne	.+10     	; 0x992 <free+0x100>
+ 988:	10 92 74 20 	sts	0x2074, r1	; 0x802074 <__flp>
+ 98c:	10 92 75 20 	sts	0x2075, r1	; 0x802075 <__flp+0x1>
+ 990:	02 c0       	rjmp	.+4      	; 0x996 <free+0x104>
+ 992:	12 82       	std	Z+2, r1	; 0x02
+ 994:	13 82       	std	Z+3, r1	; 0x03
+ 996:	a0 93 72 20 	sts	0x2072, r26	; 0x802072 <__brkval>
+ 99a:	b0 93 73 20 	sts	0x2073, r27	; 0x802073 <__brkval+0x1>
+ 99e:	df 91       	pop	r29
+ 9a0:	cf 91       	pop	r28
+ 9a2:	08 95       	ret
 
-00000b4a <_exit>:
- b4a:	f8 94       	cli
+000009a4 <_exit>:
+ 9a4:	f8 94       	cli
 
-00000b4c <__stop_program>:
- b4c:	ff cf       	rjmp	.-2      	; 0xb4c <__stop_program>
+000009a6 <__stop_program>:
+ 9a6:	ff cf       	rjmp	.-2      	; 0x9a6 <__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 4c23ba0..a8db062 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
@@ -1,5 +1,7 @@
 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(_udivmodhi4.o)
+                              ringbuffer.o (__udivmodhi4)
 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)
@@ -12,12 +14,12 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/..
 Allocating common symbols
 Common symbol       size              file
 
-tp2                 0x2               main.o
-tp1                 0x2               main.o
+tp2                 0x1b              main.o
+tp1                 0x1b              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
+tp4                 0x1b              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
+tp3                 0x1b              main.o
 
 Discarded input sections
 
@@ -26,20 +28,19 @@ Discarded input sections
  .text          0x00000000        0x0 main.o
  .data          0x00000000        0x0 main.o
  .bss           0x00000000        0x0 main.o
+ .text.handoff  0x00000000        0x2 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_empty
+                0x00000000       0x34 ringbuffer.o
+ .text.rb_full  0x00000000       0x44 ringbuffer.o
  .text          0x00000000        0x0 tinyport.o
  .data          0x00000000        0x0 tinyport.o
  .bss           0x00000000        0x0 tinyport.o
@@ -48,8 +49,20 @@ Discarded input sections
  .text.tp_statlo
                 0x00000000       0x12 tinyport.o
  .text.tp_test  0x00000000       0x3c tinyport.o
- .text.tp_setRxStatus
-                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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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(_udivmodhi4.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)
@@ -226,7 +239,7 @@ END GROUP
 .rela.plt
  *(.rela.plt)
 
-.text           0x00000000      0xb4e
+.text           0x00000000      0x9a8
  *(.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
@@ -295,7 +308,6 @@ END GROUP
                 0x00000248                __vector_32
                 0x00000248                __vector_75
                 0x00000248                __vector_71
-                0x00000248                __vector_91
                 0x00000248                __vector_34
                 0x00000248                __vector_62
                 0x00000248                __vector_77
@@ -314,6 +326,7 @@ END GROUP
                 0x00000248                __vector_6
                 0x00000248                __vector_110
                 0x00000248                __vector_31
+                0x00000248                __vector_92
                 0x00000248                __vector_35
                 0x00000248                __vector_78
                 0x00000248                __vector_74
@@ -360,6 +373,7 @@ END GROUP
                 0x00000248                __vector_95
                 0x00000248                __vector_103
                 0x00000248                __vector_96
+                0x00000248                __vector_89
                 0x00000248                __vector_108
                 0x00000248                __vector_4
                 0x00000248                __vector_44
@@ -377,6 +391,7 @@ END GROUP
                 0x00000248                __vector_58
                 0x00000248                __vector_70
                 0x00000248                __vector_83
+                0x00000248                __vector_29
                 0x00000248                __vector_60
                 0x00000248                __vector_121
                 0x00000248                __vector_40
@@ -384,6 +399,7 @@ END GROUP
                 0x00000248                __vector_94
                 0x00000248                __vector_126
                 0x00000248                __vector_8
+                0x00000248                __vector_26
                 0x00000248                __vector_48
                 0x00000248                __vector_124
                 0x00000248                __vector_116
@@ -407,71 +423,56 @@ END GROUP
                 0x00000248                __vector_120
                 0x0000024c                . = ALIGN (0x2)
  *(.text.*)
- .text.main     0x0000024c       0xcc main.o
+ .text.main     0x0000024c      0x134 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
+                0x00000380       0x6a main.o
+                0x00000380                __vector_25
  .text.__vector_28
-                0x00000430       0x6e main.o
-                0x00000430                __vector_28
- .text.__vector_29
-                0x0000049e       0x6e main.o
-                0x0000049e                __vector_29
+                0x000003ea       0x6a main.o
+                0x000003ea                __vector_28
  .text.__vector_88
-                0x0000050c       0x6e main.o
-                0x0000050c                __vector_88
- .text.__vector_89
-                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
-                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
+                0x00000454       0x6a main.o
+                0x00000454                __vector_88
+ .text.__vector_91
+                0x000004be       0x6a main.o
+                0x000004be                __vector_91
+ .text.rb_reset
+                0x00000528       0x16 ringbuffer.o
+                0x00000528                rb_reset
+ .text.rb_init  0x0000053e       0x22 ringbuffer.o
+                0x0000053e                rb_init
+ .text.rb_put   0x00000560       0x4a ringbuffer.o
+                0x00000560                rb_put
+ .text.rb_get   0x000005aa       0x4a ringbuffer.o
+                0x000005aa                rb_get
+ .text.tp_new   0x000005f4       0x6a tinyport.o
+                0x000005f4                tp_new
+ .text.tp_init  0x0000065e       0x6c tinyport.o
+                0x0000065e                tp_init
  .text.tp_rxISR
-                0x0000081c       0x52 tinyport.o
-                0x0000081c                tp_rxISR
- .text.tp_read  0x0000086e        0xa tinyport.o
-                0x0000086e                tp_read
- .text.tp_setTxStatus
-                0x00000878       0x34 tinyport.o
-                0x00000878                tp_setTxStatus
- .text.tp_txISR
-                0x000008ac       0x40 tinyport.o
-                0x000008ac                tp_txISR
+                0x000006ca       0x3c tinyport.o
+                0x000006ca                tp_rxISR
+ .text.tp_read  0x00000706       0x12 tinyport.o
+                0x00000706                tp_read
  .text.tp_write
-                0x000008ec       0x1c tinyport.o
-                0x000008ec                tp_write
+                0x00000718       0x10 tinyport.o
+                0x00000718                tp_write
+ .text.tp_statflash
+                0x00000728       0x12 tinyport.o
+                0x00000728                tp_statflash
+ .text.libgcc.div
+                0x0000073a       0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_udivmodhi4.o)
+                0x0000073a                __udivmodhi4
  .text.avr-libc
-                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)
+                0x00000762      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)
+                0x00000762                malloc
+                0x00000892                free
+                0x000009a4                . = ALIGN (0x2)
  *(.fini9)
- .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         0x000009a4        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)
+                0x000009a4                _exit
+                0x000009a4                exit
  *(.fini9)
  *(.fini8)
  *(.fini8)
@@ -490,11 +491,11 @@ END GROUP
  *(.fini1)
  *(.fini1)
  *(.fini0)
- .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         0x000009a4        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)
-                0x00000b4e                _etext = .
+                0x000009a8                _etext = .
 
-.data           0x00802000        0x6 load address 0x00000b4e
+.data           0x00802000        0x6 load address 0x000009a8
                 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)
@@ -509,29 +510,29 @@ END GROUP
                 0x00802006                _edata = .
                 0x00802006                PROVIDE (__data_end, .)
 
-.bss            0x00802006        0xc
+.bss            0x00802006       0x70
                 0x00802006                PROVIDE (__bss_start, .)
  *(.bss)
  *(.bss*)
  *(COMMON)
- COMMON         0x00802006        0x8 main.o
+ COMMON         0x00802006       0x6c main.o
                 0x00802006                tp2
-                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
+                0x00802021                tp1
+                0x0080203c                tp4
+                0x00802057                tp3
+ COMMON         0x00802072        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)
+                0x00802072                __brkval
+                0x00802074                __flp
+                0x00802076                PROVIDE (__bss_end, .)
+                0x000009a8                __data_load_start = LOADADDR (.data)
+                0x000009ae                __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit         0x00802076        0x0
                 [!provide]                PROVIDE (__noinit_start, .)
  *(.noinit*)
                 [!provide]                PROVIDE (__noinit_end, .)
-                0x00802012                _end = .
-                0x00802012                PROVIDE (__heap_start, .)
+                0x00802076                _end = .
+                0x00802076                PROVIDE (__heap_start, .)
 
 .eeprom         0x00810000        0x0
  *(.eeprom*)
@@ -598,60 +599,60 @@ END GROUP
 .debug_sfnames
  *(.debug_sfnames)
 
-.debug_aranges  0x00000000      0x138
+.debug_aranges  0x00000000      0x100
  *(.debug_aranges)
  .debug_aranges
-                0x00000000       0x80 main.o
+                0x00000000       0x58 main.o
  .debug_aranges
-                0x00000080       0x40 ringbuffer.o
+                0x00000058       0x48 ringbuffer.o
  .debug_aranges
-                0x000000c0       0x78 tinyport.o
+                0x000000a0       0x60 tinyport.o
 
 .debug_pubnames
  *(.debug_pubnames)
 
-.debug_info     0x00000000     0x4072
+.debug_info     0x00000000     0x3c5f
  *(.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      0xc39 main.o
- .debug_info    0x00003488      0x281 ringbuffer.o
- .debug_info    0x00003709      0x969 tinyport.o
+ .debug_info    0x0000284f      0x9fa main.o
+ .debug_info    0x00003249      0x25d ringbuffer.o
+ .debug_info    0x000034a6      0x7b9 tinyport.o
 
-.debug_abbrev   0x00000000     0x2c94
+.debug_abbrev   0x00000000     0x2add
  *(.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      0x246 main.o
- .debug_abbrev  0x00002872      0x1a9 ringbuffer.o
- .debug_abbrev  0x00002a1b      0x279 tinyport.o
+ .debug_abbrev  0x0000262c      0x1a3 main.o
+ .debug_abbrev  0x000027cf      0x136 ringbuffer.o
+ .debug_abbrev  0x00002905      0x1d8 tinyport.o
 
-.debug_line     0x00000000      0xc49
+.debug_line     0x00000000      0xbd5
  *(.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      0x3af main.o
- .debug_line    0x00000764      0x18b ringbuffer.o
- .debug_line    0x000008ef      0x35a tinyport.o
+ .debug_line    0x000003b5      0x2b9 main.o
+ .debug_line    0x0000066e      0x23f ringbuffer.o
+ .debug_line    0x000008ad      0x328 tinyport.o
 
-.debug_frame    0x00000000      0x4b8
+.debug_frame    0x00000000      0x32c
  *(.debug_frame)
- .debug_frame   0x00000000      0x2f8 main.o
- .debug_frame   0x000002f8       0x90 ringbuffer.o
- .debug_frame   0x00000388      0x130 tinyport.o
+ .debug_frame   0x00000000      0x1c4 main.o
+ .debug_frame   0x000001c4       0xa0 ringbuffer.o
+ .debug_frame   0x00000264       0xc8 tinyport.o
 
-.debug_str      0x00000000     0x23a2
+.debug_str      0x00000000     0x22f6
  *(.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      0x5c9 main.o
-                                0x623 (size before relaxing)
- .debug_str     0x00002071       0x5f ringbuffer.o
-                                0x218 (size before relaxing)
- .debug_str     0x000020d0      0x2d2 tinyport.o
-                                0x680 (size before relaxing)
-
-.debug_loc      0x00000000      0xd9c
+ .debug_str     0x00001aa8      0x551 main.o
+                                0x5ab (size before relaxing)
+ .debug_str     0x00001ff9       0x49 ringbuffer.o
+                                0x207 (size before relaxing)
+ .debug_str     0x00002042      0x2b4 tinyport.o
+                                0x645 (size before relaxing)
+
+.debug_loc      0x00000000      0x92b
  *(.debug_loc)
- .debug_loc     0x00000000      0x6ce main.o
- .debug_loc     0x000006ce      0x1cd ringbuffer.o
- .debug_loc     0x0000089b      0x501 tinyport.o
+ .debug_loc     0x00000000      0x373 main.o
+ .debug_loc     0x00000373      0x29b ringbuffer.o
+ .debug_loc     0x0000060e      0x31d tinyport.o
 
 .debug_macinfo
  *(.debug_macinfo)
@@ -671,11 +672,11 @@ END GROUP
 .debug_pubtypes
  *(.debug_pubtypes)
 
-.debug_ranges   0x00000000      0x108
+.debug_ranges   0x00000000       0xd0
  *(.debug_ranges)
- .debug_ranges  0x00000000       0x70 main.o
- .debug_ranges  0x00000070       0x30 ringbuffer.o
- .debug_ranges  0x000000a0       0x68 tinyport.o
+ .debug_ranges  0x00000000       0x48 main.o
+ .debug_ranges  0x00000048       0x38 ringbuffer.o
+ .debug_ranges  0x00000080       0x50 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 4dfc915..1f16bf2 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
-S11300600C9424010C94AA010C94E1010C94240135
-S11300700C9418020C944F020C9424010C94240147
+S11300600C9424010C94C0010C9424010C942401DC
+S11300700C94F5010C9424010C9424010C94240197
 S11300800C9424010C9424010C9424010C94240158
 S11300900C9424010C9424010C9424010C94240148
 S11300A00C9424010C9424010C9424010C94240138
@@ -21,8 +21,8 @@ S11301200C9424010C9424010C9424010C942401B7
 S11301300C9424010C9424010C9424010C942401A7
 S11301400C9424010C9424010C9424010C94240197
 S11301500C9424010C9424010C9424010C94240187
-S11301600C9486020C94BD020C9424010C9424017A
-S11301700C94F4020C9424010C9424010C94240196
+S11301600C942A020C9424010C9424010C945F0234
+S11301700C9424010C9424010C9424010C94240167
 S11301800C9424010C9424010C9424010C94240157
 S11301900C9424010C9424010C9424010C94240147
 S11301A00C9424010C9424010C9424010C94240137
@@ -32,153 +32,127 @@ S11301D00C9424010C9424010C9424010C94240107
 S11301E00C9424010C9424010C9424010C942401F7
 S11301F00C9424010C9424010C94240111241FBE9A
 S1130200CFEFCDBFDFE3DEBF00E00CBF18BE19BEE9
-S11302101ABE1BBE10E2A0E0B0E2EEE4FBE000E098
+S11302101ABE1BBE10E2A0E0B0E2E8EAF9E000E09A
 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
+S113023020E2A6E0B0E201C01D92A637B207E1F7C2
+S11302400E9426010C94D2040C940000CF93DF93F7
+S1130250CDB7DEB76C97CDBFDEBFE0E5F0E088E157
+S1130260858380E18083818184FFFDCF88ED84BF15
+S113027084E0809340006894EE24E4F808E024E0ED
+S113028040E456E060EA78E0CE0102960E94FA0269
+S11302908BE1FE013296A1E2B0E201900D928A95C3
+S11302A0E1F781E290E20E942F036894EE24E5F8DE
+S11302B000E820E440E456E060EB78E0CE010296EA
+S11302C00E94FA028BE1FE013296A6E0B0E20190B0
+S11302D00D928A95E1F786E090E20E942F036894DC
+S11302E0EE24E4F808E024E040E656E060EA79E031
+S11302F0CE0102960E94FA028BE1FE013296A7E536
+S1130300B0E201900D928A95E1F787E590E20E94B0
+S11303102F036894EE24E5F800E820E440E656E074
+S113032060EB79E0CE0102960E94FA028BE1FE01B5
+S11303303296ACE3B0E201900D928A95E1F78CE33A
+S113034090E20E942F03E0EAF0E0828187608283DA
+S1130350789481E290E20E949403BE016F5F7F4F24
+S113036086E090E20E948303882399F387E590E274
+S11303700E94940369818CE390E20E948C03E9CF8C
+S11303801F920F920FB60F92112408B60F9218BE47
+S113039009B60F9219BE0BB60F921BBE2F933F9353
+S11303A04F935F936F937F938F939F93AF93BF9379
+S11303B0EF93FF9381E290E20E946503FF91EF9136
+S11303C0BF91AF919F918F917F916F915F914F9169
+S11303D03F912F910F900BBE0F9009BE0F9008BE56
+S11303E00F900FBE0F901F9018951F920F920FB68B
+S11303F00F92112408B60F9218BE09B60F9219BEB7
+S11304000BB60F921BBE2F933F934F935F936F9343
+S11304107F938F939F93AF93BF93EF93FF9386E064
+S113042090E20E946503FF91EF91BF91AF919F917C
+S11304308F917F916F915F914F913F912F910F9089
+S11304400BBE0F9009BE0F9008BE0F900FBE0F9009
+S11304501F9018951F920F920FB60F92112408B691
+S11304600F9218BE09B60F9219BE0BB60F921BBE9F
+S11304702F933F934F935F936F937F938F939F93A8
+S1130480AF93BF93EF93FF9387E590E20E946503D8
+S1130490FF91EF91BF91AF919F918F917F916F9158
+S11304A05F914F913F912F910F900BBE0F9009BE1A
+S11304B00F9008BE0F900FBE0F901F9018951F92BB
+S11304C00F920FB60F92112408B60F9218BE09B6F8
+S11304D00F9219BE0BB60F921BBE2F933F934F93EF
+S11304E05F936F937F938F939F93AF93BF93EF9398
+S11304F0FF938CE390E20E946503FF91EF91BF911B
+S1130500AF919F918F917F916F915F914F913F91A7
+S11305102F910F900BBE0F9009BE0F9008BE0F9045
+S11305200FBE0F901F901895009739F0FC011282AE
+S113053013821482158281E0089580E00895CF9398
+S1130540DF93EC01CB016E837F830E94B103888328
+S11305509983CE010E94940281E0DF91CF910895A6
+S1130560FC01892BF1F0A081B18182819381A80FD4
+S1130570B91F6C9326813781828193810196B901D9
+S11305800E949D0382839383448155818417950738
+S113059051F40196B9010E949D038483958381E0FF
+S11305A0089580E0089581E00895FC01892BE1F02D
+S11305B061157105D9F022813381848195812817D1
+S11305C03907B1F0A081B181A80FB91F8C91DB016B
+S11305D08C93848195810196668177810E949D0325
+S11305E08483958381E0089580E0089580E00895F0
+S11305F080E00895CF92DF92EF920F93CF93DF9331
+S1130600CDB7DEB76B97CDBFDEBF6C0169837A834C
+S11306104B835C832D830E83EF82188619861A869A
+S113062060E870E0CE010C960E949F0260E870E0E2
+S1130630CE0144960E949F028BE1FE013196D601C1
+S113064001900D928A95E1F7C6016B96CDBFDEBF8E
+S1130650DF91CF910F91EF90DF90CF900895FC013F
+S1130660A081B1818BE916968C93A081B1811796F4
+S11306701C92A081B18113968C911397806113967B
+S11306808C93A081B18188E114968C93A081B1816F
+S113069083E015968C93A281B381858115968C9302
+S11306A0A281B381858111968C93A281B3818481C7
+S11306B012968C93A281B381848116968C93A28125
+S11306C0B381868111968C930895FC01A281B38134
+S11306D0868117968C93A081B1816C916287818504
+S11306E0882319F0813031F008956E3759F481E090
+S11306F0818708956E3711F411860895CF010B9602
+S11307000E94B00208950B960E94D50291E08111D7
+S113071001C090E0892F0895DC01ED91FC91818165
+S113072085FFFDCF60830895DC011296ED91FC9165
+S1130730139716968C9187830895AA1BBB1B51E1CE
+S113074007C0AA1FBB1FA617B70710F0A61BB70B3D
+S1130750881F991F5A95A9F780959095BC01CD01E2
+S113076008950F931F93CF93DF938230910510F474
+S113077082E090E0E0917420F091752020E030E078
+S1130780A0E0B0E0309719F14081518102811381DA
+S113079048175907C8F08417950769F4109731F082
+S11307A012960C93129713961C9327C000937420EF
+S11307B01093752022C02115310519F042175307F3
+S11307C018F49A01BD01EF01DF01F801DBCF211517
+S11307D03105F9F0281B390B2430310580F48A8166
+S11307E09B816115710521F0FB018283938304C011
+S11307F08093742090937520FE01329644C0FE01CC
+S1130800E20FF31F81939193225031092883398396
+S11308103AC02091722030917320232B41F420910F
+S11308200220309103202093722030937320209172
+S11308300020309101202115310541F42DB73EB738
+S11308404091042050910520241B350BE091722027
+S1130850F0917320E217F307A0F42E1B3F0B281727
+S1130860390778F0AC014E5F5F4F2417350748F025
+S11308704E0F5F1F40937220509373208193919386
+S113088002C0E0E0F0E0CF01DF91CF911F910F9122
+S11308900895CF93DF93009709F481C0FC01329748
+S11308A012821382A0917420B0917520109781F464
+S11308B020813181820F931F209172203091732007
+S11308C02817390751F5E0937220F093732067C01D
+S11308D0ED0120E030E0CE17DF0740F44A815B8170
+S11308E09E0141155105F1F0EA01F5CFC283D3838E
+S11308F040815181840F951FC817D90759F4888105
+S11309009981840F951F0296808391838A819B81AC
+S1130910828393832115310529F4E0937420F093A5
+S113092075203DC0E901EA83FB8349915991C40FC5
+S1130930D51FEC17FD0761F480819181840F951F09
+S11309400296E90188839983828193818A839B83B8
+S1130950E0E0F0E012968D919C911397009719F0C6
+S1130960FD01DC01F7CF8D919C9111979D012E5FC4
+S11309703F4F820F931F20917220309173202817CC
+S1130980390769F4309729F4109274201092752075
+S113099002C012821382A0937220B0937320DF915D
+S10B09A0CF910895F894FFCFF4
+S10909A80000762020008F
 S9030000FC
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d
index ba0cd99..ae35a70 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d
@@ -15,7 +15,11 @@ main.d main.o: .././main.c \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \
- .././ringbuffer.h .././tinyport.h
+ .././ringbuffer.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \
+ .././tinyport.h
 
 c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
 
@@ -51,4 +55,10 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\
 
 .././ringbuffer.h:
 
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h:
+
 .././tinyport.h:
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 2dec92831b79c6032e0501569bfcf8b3b89a25e7..e52ec26ba24cba5fed2866b0c3f0bc8bb3a3722c 100644
GIT binary patch
literal 16264
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

literal 22792
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
T7i9B1bQl<tL7G8^AcY?Qh=-%z

diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d
index f0efec6..e0511b2 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d
@@ -12,7 +12,8 @@ ringbuffer.d ringbuffer.o: .././ringbuffer.c .././ringbuffer.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \
- c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h
 
 .././ringbuffer.h:
 
@@ -43,3 +44,5 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\
 c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h:
 
 c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h:
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 3a03d39dbcc451a5647012b7257d7ecdd828c2a4..d87984964eb41246709489308b70dcceb61f3fab 100644
GIT binary patch
literal 8700
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

literal 7628
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

diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d
index 35d6ca6..8103a16 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d
@@ -11,6 +11,9 @@ tinyport.d tinyport.o: .././tinyport.c .././tinyport.h .././ringbuffer.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\xmega.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
  c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h
@@ -43,6 +46,12 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\
 
 c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
 
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h:
+
 c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h:
 
 c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
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 6f62e848cd04b7d3cf3ec7ae0400c17907c0633c..74ba40bff7328fc3e6bdf7c76a3dd359514a9027 100644
GIT binary patch
literal 14000
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
U3d+mK<`u|5!WpCogkk0Z05Oi*Q2+n{

literal 17772
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
TL^kh=5@aqNWHtzc%mL8=Qx+}r

diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c
index 6cd195a..61a8260 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c
@@ -38,16 +38,16 @@ int main(void){
 	// uart, port, rx, tx, stat
 	
 	tp1 = tp_new(&USARTC0, &PORTC, PIN2_bm, PIN3_bm, PIN4_bm);
-	tp_init(tp1);
+	tp_init(&tp1);
 	
 	tp2 = tp_new(&USARTC1, &PORTC, PIN6_bm, PIN7_bm, PIN5_bm); 
-	tp_init(tp2);
+	tp_init(&tp2);
 	
 	tp3 = tp_new(&USARTD0, &PORTD, PIN2_bm, PIN3_bm, PIN4_bm);
-	tp_init(tp3);
+	tp_init(&tp3);
 	
 	tp4 = tp_new(&USARTD1, &PORTD, PIN6_bm, PIN7_bm, PIN5_bm);
-	tp_init(tp4);
+	tp_init(&tp4);
 	
 			
 	// system interrupt setup (allow low level interrupts)
@@ -57,19 +57,15 @@ int main(void){
 	sei();
 	
 	while(1){
+		uint8_t data;
+		tp_statflash(&tp1);
 		
-		tp_statflash(tp1);
-		tp_statflash(tp3);
-		_delay_ms(100);
-		/*
-		// the below only works when bounded by nointerrupts() and interrupts();
-		nointerrupts();
-		if(tp2->rxstate){
-			uint8_t data = tp_read(tp2);
-			tp_write(tp4, data);
+		if(tp_read(&tp2, &data)){
+			tp_statflash(&tp3);
+			tp_write(&tp4, data);
 		}
-		interrupts();
-		*/
+		
+		// the below only works when bounded by nointerrupts() and interrupts();
 	}
 }
 
@@ -78,23 +74,8 @@ 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;
-	}
-	*/
+void handoff(tinyport_t *tp_from){ // puts data in 'core' of system
+	//
 }
 
 /*
@@ -113,53 +94,40 @@ void interrupts(){
 	PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
 }
 
-void fakepacket(tinyport_t tp){
-	tp_write(tp, 80);
-	tp_write(tp, 65);
-	tp_write(tp, 67);
-	tp_write(tp, 75);
-	tp_write(tp, 69);
-	tp_write(tp, 84);
-	tp_write(tp, 80);
-	tp_write(tp, 65);
-	tp_write(tp, 67);
-	tp_write(tp, 75);
-	tp_write(tp, 69);
-	tp_write(tp, 84);
-	tp_write(tp, 38);
-	tp_write(tp, 0x0A); // write wakes up txdref
-}
-
 // hookup ISRs to port-abstracted interrupt functions
 
 ISR(USARTC0_RXC_vect){
-	tp_rxISR(tp1);
+	tp_rxISR(&tp1);
 }
 
-ISR(USARTC0_DRE_vect){
-	tp_txISR(tp1);
-}
 
 ISR(USARTC1_RXC_vect){
-	tp_rxISR(tp2);
+	tp_rxISR(&tp2);
 }
 
-ISR(USARTC1_DRE_vect){
-	tp_txISR(tp2);
+ISR(USARTD0_RXC_vect){
+	tp_rxISR(&tp3);
 }
 
-ISR(USARTD0_RXC_vect){
-	tp_rxISR(tp3);
+ISR(USARTD1_RXC_vect){
+	tp_rxISR(&tp4);
 }
 
-ISR(USARTD0_DRE_vect){
-	tp_txISR(tp3);
+
+/*
+ISR(USARTC1_DRE_vect){
+	tp_txISR(&tp2);
 }
 
-IRS(USARTD1_RXC_vect){
-	tp_rxISR(tp4);
+ISR(USARTC0_DRE_vect){
+	tp_txISR(&tp1);
+}
+
+ISR(USARTD0_DRE_vect){
+	tp_txISR(&tp3);
 }
 
 ISR(USARTD1_DRE_vect){
-	tp_txISR(tp4);
-}
\ No newline at end of file
+	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 55885f3..effb733 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c
@@ -2,56 +2,51 @@
 #include <stdlib.h>
 #include <avr/io.h>
 
-ringbuffer_t rb_new (uint32_t capacity){
-	ringbuffer_t rb = malloc(sizeof(struct ringbuffer_t));
-	if(rb){
-		rb->size = capacity + 1; // one byte is used for detecting full condition
-		rb->buf = malloc(rb->size);
-		if(rb->buf){
-			rb_reset(rb); // point head to tail to beginning
-			uint8_t tail1 = rb->tail;
-			uint8_t head1 = rb->head;
-		} else {
-			free(rb); // deallocate memory block if fails to allocate b/c full
-			return 0;
-		}
-	}
-	return rb;
+uint8_t rb_init(ringbuffer_t *rb, size_t size){
+	rb->size = size;
+	rb->buffer = malloc(rb->size);
+	rb_reset(rb);
+	return 1;
 }
 
-void rb_reset(ringbuffer_t rb){
-	rb->head = 0;
-	rb->tail = 0;
-}
-
-
-void rb_write(ringbuffer_t rb, uint8_t data){
-	// write to head
-
-	rb->buf[rb->head] = data;
-	
-	rb->head += 1;
-	if(rb->head >= rb->size){
+uint8_t rb_reset(ringbuffer_t *rb){
+	if(rb){
 		rb->head = 0;
+		rb->tail = 0;
+		return 1;
+	} else {
+		return 0;
 	}
-	// increment head and check wrap
 }
 
-uint8_t rb_read(ringbuffer_t rb){
-	// pull data from tail
-	uint8_t data = rb->buf[rb->tail];
-	// increment tail and check wrap
-	rb->tail += 1;
-	if(rb->tail >= rb->size){
-		rb->tail = 0;
+
+uint8_t rb_put(ringbuffer_t *rb, uint8_t data){
+	if(rb){
+		rb->buffer[rb->head] = data;
+		rb->head = (rb->head + 1) % rb->size; // for wrap around
+		if(rb->head == rb->tail){
+			rb->tail = (rb->tail + 1) % rb->size;
+		}
+		return 1;
+	} else {
+		return 0;
 	}
-	return data;
 }
 
-uint8_t rb_hasdata(ringbuffer_t rb){
-	if (rb->tail == rb->head){
-		return 0;
-	} else {
+uint8_t rb_get(ringbuffer_t *rb, uint8_t *data){
+	if(rb && data && !rb_empty(*rb)){
+		*data = rb->buffer[rb->tail];
+		rb->tail = (rb->tail + 1) % rb->size;
 		return 1;
+	} else {
+		return 0;
 	}
+}
+
+uint8_t rb_empty(ringbuffer_t rb){
+	return (rb.head == rb.tail);
+}
+
+uint8_t rb_full(ringbuffer_t rb){
+	return ((rb.head + 1) % rb.size) == rb.tail;
 }
\ No newline at end of file
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h
index ee8edba..d6d2a8f 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h
@@ -4,33 +4,35 @@
 /*
 a ringbuffer,
 s/o https://github.com/dhess/c-ringbuf
+s/o https://embeddedartistry.com/blog/2017/4/6/circular-buffers-in-cc
 */
 
 #include <avr/io.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
 
+typedef struct {
+	uint8_t * buffer;
+	size_t head;
+	size_t tail; 
+	size_t size;
+} ringbuffer_t;
 
-struct ringbuffer_t {
-	uint8_t *buf;
-	uint8_t head;
-	uint8_t tail;
-	uint32_t size;
-};
-
-typedef struct ringbuffer_t *ringbuffer_t;  // ALERT: ptr to struct?
-
-// makes new ringbuffer
-ringbuffer_t rb_new(uint32_t capacity);
+uint8_t rb_init(ringbuffer_t *rb, size_t size);
 
 // sets tail to head
-void rb_reset(ringbuffer_t rb);
+uint8_t rb_reset(ringbuffer_t *rb);
 
 // writes one byte to next slot
-// TODO: 2nd fn for writing chunks to buffer, i-e complete packets
-void rb_write(ringbuffer_t rb, uint8_t data);
+uint8_t rb_put(ringbuffer_t *rb, uint8_t data);
 
 // reads one byte from buffer
-uint8_t rb_read(ringbuffer_t rb);
+uint8_t rb_get(ringbuffer_t *rb, uint8_t *data);
+
+uint8_t rb_empty(ringbuffer_t rb);
 
-uint8_t rb_hasdata(ringbuffer_t rb);
+uint8_t rb_full(ringbuffer_t rb);
 
 #endif
\ No newline at end of file
diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c
index 462bcf4..0a8747f 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c
@@ -9,24 +9,28 @@
 #include <util/delay.h>
 
 tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_bm, uint8_t pinSTAT_bm){
-	tinyport_t tp = malloc(sizeof(struct tinyport_t));
 	
-	tp->uart = uart;
-	tp->port = port;
-	tp->pinRX_bm = pinRX_bm;
-	tp->pinTX_bm = pinTX_bm;
-	tp->pinSTAT_bm = pinSTAT_bm;
-	tp->rbrx = rb_new(TP_RXBUF_SIZE);
-	tp->rbtx = rb_new(TP_TXBUF_SIZE);
-	tp->txstate = TP_TX_STATE_EMPTY;
-	tp->rxstate = TP_RX_STATE_EMPTY;
-	tp->pstate = TP_PSTATE_OUTSIDE;
+	tinyport_t tp;
+	
+	tp.uart = uart;
+	tp.port = port;
+	
+	tp.pinRX_bm = pinRX_bm;
+	tp.pinTX_bm = pinTX_bm;
+	tp.pinSTAT_bm = pinSTAT_bm;
+	
+	tp.txstate = TP_TX_STATE_EMPTY;
+	tp.rxstate = TP_RX_STATE_EMPTY;
+	tp.pstate = TP_PSTATE_OUTSIDE;
+	
+	rb_init(&tp.rbrx, TP_RXBUF_SIZE);
+	rb_init(&tp.rbtx, TP_TXBUF_SIZE);
 	
 	return tp;
 }
 
 // mostly, start the uart port
-void tp_init(tinyport_t tp){
+void tp_init(tinyport_t *tp){
 	// USART is in UART (async) mode automatically
 	// these registers setup the baudrate - the bitrate
 	// this seems a bit tricky. I am taking for granted that the clock is at 48MHz,
@@ -54,98 +58,82 @@ void tp_init(tinyport_t tp){
 	tp->port->DIRSET = tp->pinSTAT_bm;
 }
 
-void tp_statflash(tinyport_t tp){
-	tp->port->OUTTGL = tp->pinSTAT_bm;
-}
-
-void tp_stathi(tinyport_t tp){
-	tp->port->OUTSET = tp->pinSTAT_bm;
-}
-
-void tp_statlo(tinyport_t tp){
-	tp->port->OUTCLR = tp->pinSTAT_bm;
-}
-
-void tp_test(tinyport_t tp){
-	tp_stathi(tp);
-	while(!(tp->uart->STATUS & USART_DREIF_bm));
-	tp->uart->DATA = 0xFF;
-	tp->uart->DATA = 0x0A;
-	tp_statlo(tp);
-}
-
-void tp_rxISR(tinyport_t tp){ // towards a passalong
+void tp_rxISR(tinyport_t *tp){ // towards a passalong
 	tp_statflash(tp);
 	
-	uint8_t data = tp->uart->DATA;
+	tp->bumpdata = tp->uart->DATA;
 	
-	switch(tp->pstate){
-		
+	switch (tp->pstate){
 		case TP_PSTATE_OUTSIDE:
-			if(data == 126){ // ~
+			if(tp->bumpdata == 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){ // ~
+			if(tp->bumpdata == 126){
 				tp->pstate = TP_PSTATE_OUTSIDE;
-				handoff(tp);
 			} else {
-				rb_write(tp->rbrx, tp->uart->DATA);
+				rb_put(&tp->rbrx, tp->bumpdata);
 			}
-			// check for finish
 			break;
-			
 		default:
-			// heck 
-			break;
+			break;	
 	}
-	tp_setRxStatus(tp, TP_RX_STATE_HASDATA); // get it
-	//handoff(tp);
 }
 
-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)){
+uint8_t tp_read(tinyport_t *tp, uint8_t *data){ // TODO: set at pointer, return true if non empty
+	if(rb_get(&tp->rbrx, data)){
 		return 1;
 	} else {
-		tp_setRxStatus(tp, TP_RX_STATE_EMPTY);
 		return 0;
 	}
-	*/
 }
 
-void tp_setRxStatus(tinyport_t tp, uint8_t state){
-	if(state == tp->rxstate){
-		// nothing
-		// nothing changes? always listening
-	} else {
-		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_write(tinyport_t *tp, uint8_t data){
+	while(!(tp->uart->STATUS & USART_DREIF_bm)); // while not ready, wait (this is blocking)
+	tp->uart->DATA = data;
 }
 
-// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970
+void tp_statflash(tinyport_t *tp){
+	tp->port->OUTTGL = tp->pinSTAT_bm;
+}
+
+void tp_stathi(tinyport_t *tp){
+	tp->port->OUTSET = tp->pinSTAT_bm;
+}
+
+void tp_statlo(tinyport_t *tp){
+	tp->port->OUTCLR = tp->pinSTAT_bm;
+}
 
-void tp_txISR(tinyport_t tp){
+void tp_test(tinyport_t *tp){ // barebones write
+	tp_stathi(tp);
+	while(!(tp->uart->STATUS & USART_DREIF_bm));
+	tp->uart->DATA = 0xFF;
+	tp->uart->DATA = 0x0A;
+	tp_statlo(tp);
+}
+
+/*
+
+old code, for handling tx'ing with interrupts - we want more determinism on sends, so do straightforward
+
+void tp_txISR(tinyport_t *tp){
 	tp_statflash(tp);
-	tp->uart->DATA = rb_read(tp->rbtx);
-	if(!(rb_hasdata(tp->rbtx))){  // if no data left to tx,
+	rb_put(&tp->rbtx, tp->uart->DATA);
+	if(rb_empty(tp->rbtx)){  // if no data left to tx,
 		tp_setTxStatus(tp, TP_TX_STATE_EMPTY);
 	}
 }
 
-void tp_write(tinyport_t tp, uint8_t data){
-	rb_write(tp->rbtx, data);
+void tp_write(tinyport_t *tp, uint8_t data){
+	rb_put(&tp->rbtx, data);
 	tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available
 }
 
-void tp_setTxStatus(tinyport_t tp, uint8_t state){
+void tp_setTxStatus(tinyport_t *tp, uint8_t state){
 	if(state == tp->txstate){ // if already set,
 		// do nothing
 	} else if(state) { // if set to hi - have things to tx
@@ -155,4 +143,5 @@ void tp_setTxStatus(tinyport_t tp, uint8_t state){
 		tp->uart->CTRLA = (tp->uart->CTRLA & ~ USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc; // turn off interrupt
 		tp->txstate = state;
 	}
-}
\ No newline at end of file
+}
+*/
\ 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 3824b53..22ca10c 100644
--- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h
+++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h
@@ -11,8 +11,8 @@
 
 #include "ringbuffer.h"
 
-#define TP_TXBUF_SIZE 16
-#define TP_RXBUF_SIZE 16
+#define TP_TXBUF_SIZE 128
+#define TP_RXBUF_SIZE 128
 #define TP_UART_BAUDCONTROLB 0
 #define TP_UART_BAUDCONTROLA 155 // 19200: 155, 1M: 2
 
@@ -25,36 +25,45 @@
 #define TP_PSTATE_OUTSIDE 0
 #define TP_PSTATE_INSIDE 1
 
-typedef struct tinyport_t {
+typedef struct {
 	USART_t *uart;
 	PORT_t *port;
+	
 	uint8_t pinRX_bm;
 	uint8_t pinTX_bm;
 	uint8_t pinSTAT_bm;
-	ringbuffer_t rbrx; // is pointer-to
-	ringbuffer_t rbtx; // is pointer-to
+	
 	uint8_t txstate;
 	uint8_t rxstate;
 	uint8_t pstate;
-};
-
-typedef struct tinyport_t *tinyport_t;
+	
+	uint8_t bumpdata;
+	
+	ringbuffer_t rbrx;
+	ringbuffer_t rbtx;
+	
+} tinyport_t;
 
 tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_bm, uint8_t pinSTAT_bm);
 
-void tp_init(tinyport_t tp);
+void tp_init(tinyport_t *tp);
+
+void tp_statflash(tinyport_t *tp);
+void tp_statlo(tinyport_t *tp);
+void tp_stathi(tinyport_t *tp);
+void tp_test(tinyport_t *tp);
 
-void tp_statflash(tinyport_t tp);
-void tp_statlo(tinyport_t tp);
-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 *data);
+void tp_setRxStatus(tinyport_t *tp, uint8_t state);
 
-void tp_rxISR(tinyport_t tp);
-uint8_t tp_read(tinyport_t tp, uint8_t *data);
-void tp_setRxStatus(tinyport_t, uint8_t state);
+void tp_write(tinyport_t *tp, uint8_t data);
 
-void tp_txISR(tinyport_t tp);
-void tp_write(tinyport_t tp, uint8_t data);
-void tp_setTxStatus(tinyport_t tp, uint8_t state);
+
+void tp_txISR(tinyport_t *tp);
+/*
+void tp_write(tinyport_t *tp, uint8_t data);
+void tp_setTxStatus(tinyport_t *tp, uint8_t state);
+*/
 
 #endif /* TINYPORT_H_ */
\ No newline at end of file
-- 
GitLab