diff --git a/.github/workflows/build-BITSv4.yml b/.github/workflows/build-BITSv4.yml new file mode 100644 index 00000000..30389731 --- /dev/null +++ b/.github/workflows/build-BITSv4.yml @@ -0,0 +1,55 @@ +# This is a basic workflow to help you get started with Actions + +name: Build BITSv4 + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the "master" branch + push: + branches: + - "master" + - "feature/build-system" + paths: + - "**/BITSv4/test/**" + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + pull_request: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + sudo apt update + curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=/usr/local/bin sh + pwd + cd Code/BITS/ + arduino-cli compile -e BITSv4 + cd BITSv4/build + ls + pwd + + - name: Release + uses: softprops/action-gh-release@v1 + with: + tag_name: BITSv5-latest-unstable + files: | + /home/runner/work/command_module/command_module/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.hex + /home/runner/work/command_module/command_module/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.elf + /home/runner/work/command_module/command_module/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.eep + /home/runner/work/command_module/command_module/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.lst + /home/runner/work/command_module/command_module/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.sym + + diff --git a/.gitignore b/.gitignore index 26446572..4a7f403b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ *.l#7 *.l#8 *.l#9 -.DS_Store +**/.DS_Store +build/ diff --git a/Code/.DS_Store b/Code/.DS_Store deleted file mode 100644 index 3af62970..00000000 Binary files a/Code/.DS_Store and /dev/null differ diff --git a/Code/BITS/.DS_Store b/Code/BITS/.DS_Store deleted file mode 100644 index 89f2752f..00000000 Binary files a/Code/BITS/.DS_Store and /dev/null differ diff --git a/Code/BITS/BITSv4/README.md b/Code/BITS/BITSv4/README.md index 2ee223ef..020a02a6 100644 --- a/Code/BITS/BITSv4/README.md +++ b/Code/BITS/BITSv4/README.md @@ -4,3 +4,7 @@ The UMDBPP Iridium payload, armed with an Iridium 9603 on a RockBlock carrier bo WIP: XBee Mesh net support for other payloads New PCB for smaller, lighter, better looking tracking Battery Voltage sensing for long haul flights + + +# Building Code +Hi, from the `BITS` folder, run `arduino-cli compile -e BITSv4` to do reproducible builds. I also created a Github Action that will automatically build the BITSv4 code when you push any changes to the master branch. You can find the build artifacts at [https://github.com/UMDBPP/command_module/releases](https://github.com/UMDBPP/command_module/releases). diff --git a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.elf b/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.elf deleted file mode 100755 index 603f31cc..00000000 Binary files a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.elf and /dev/null differ diff --git a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.hex b/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.hex deleted file mode 100644 index 000e3dce..00000000 --- a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.hex +++ /dev/null @@ -1,6475 +0,0 @@ -:1000000000800020BD01000025C00000E1BF00000D -:10001000E1BF0000E1BF0000E1BF0000E1BF000060 -:10002000E1BF0000E1BF0000E1BF000025C000000B -:1000300025C00000E1BF00009DB40000A1B4000095 -:1000400025C0000025C0000025C0000025C000001C -:1000500025C0000025C0000025C0000025C000000C -:1000600025C0000025C0000025C0000025C00000FC -:1000700025C0000025C0000025C0000025C00000EC -:1000800025C0000025C0000025C0000025C00000DC -:1000900025C0000025C0000025C0000025C00000CC -:1000A00025C0000025C0000025C0000025C00000BC -:1000B00025C0000025C0000025C0000025C00000AC -:1000C00025C0000025C0000025C0000025C000009C -:1000D00025C0000025C0000025C0000025C000008C -:1000E00025C0000025C0000025C0000025C000007C -:1000F00025C000009DCE000025C000000DD80000E6 -:1001000025C0000055DF000025C0000025C000000C -:1001100025C0000025C0000025C0000025C000004B -:1001200025C0000025C0000025C0000025C000003B -:1001300025C0000025C0000025C0000025C000002B -:1001400025C0000025C0000025C0000025C000001B -:1001500025C0000025C0000025C0000025C000000B -:1001600025C0000059E2000025C0000025C00000A5 -:1001700025C0000025C0000025C0000025C00000EB -:1001800025C0000025C0000025C0000025C00000DB -:1001900025C0000025C0000025C0000025C00000CB -:1001A00025C0000025C0000025C0000025C00000BB -:1001B00025C0000025C0000025C00000574B4CF2B0 -:1001C000205210B5DA814DF62812DA8100BF00BF47 -:1001D0000BF02CFF524B4FF010621A63514A9A6396 -:1001E000514ADA63514A136913F4807303D153619E -:1001F0004FF4A85313614E4B9A78110703D59A78A0 -:1002000042F008029A704B4B4B482A221A704B4B13 -:10021000DA1C121AC11E22F00302994288BF002282 -:1002200047490BF009FE474B4748DA1C121AC11E1A -:1002300022F00302994288BF0022002110F09AFFA9 -:10024000424943484FF4DE720BF0F6FD414B424AFF -:10025000802103F8011B9342FBD14FF0E0233C4A7D -:10026000C3F8082D3D4B8A221A70A3F5805324222F -:100270005A70A0221A709A799207FCD59A79D406FE -:10028000FCD4374B9A7902F00C02082AFAD10322E7 -:100290001A7140225A719A799006FCD5304A9379A6 -:1002A0005906FCD51E4B2F4959640221996420211F -:1002B0001170917901F00C010C29FAD12A4A5A6087 -:1002C0004FF0E023294A5A6100229A6107221A61FD -:1002D000274AC3F8202D62B60CF000F9134B5B6976 -:1002E000DA0705D523480CF0EDF8234B234ADA61F1 -:1002F000234B1B785B0609D51F4C204BE2699A42C1 -:1003000004D11C480CF0DEF80023E3610BF094FEEE -:1003100011F022FD0BF088FDFEE700BF0020054034 -:1003200000800440823F04000100002B00D0034005 -:1003300000D0074000E007402087FF1FB08FFF1F5D -:10034000EC8B01007C9DFF1FB08FFF1F00000000A1 -:100350000082FF1F00E400E05FE400E00050064080 -:100360000040064000000301C0100500FF760100B8 -:1003700000002020AD36276900E00340A5C3945A51 -:1003800000F00740FFFFFFFFFFFFFFFFFFFFFFFF42 -:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D -:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D -:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D -:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D -:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D -:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D -:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D -:10040000FFFFFFFFFFFFFFFFFFFFFFFFDEF9FFFF23 -:100410000548064B1B1AD90F01EBA301491002D066 -:10042000034B03B118477047B08FFF1FB08FFF1FFA -:100430000000000008B5054B1BB105490548AFF3A6 -:100440000080BDE80840FFF7E3BF00BF00000000E8 -:10045000B08FFF1FE48B010000207047704700BF82 -:10046000036D0BB101207047406D003818BF0120AB -:10047000704700BF10B50446806D18B10FF020FE24 -:100480000023A365236D2BB104F11800BDE81040D3 -:1004900009F032B8636D002BF6D110BD10B50446DB -:1004A000806D00B110BD4FF480700FF001FEA065AB -:1004B000B0B1236D002202703BB101464FF480724F -:1004C000184608F041FDA06D10BD636D002BE9D00A -:1004D00001464FF48072184606F098FAA06D10BDE0 -:1004E0000148A06510BD00BFC88FFF1F38B5056D5E -:1004F0006DB10BB1002038BD1146284607F082FAD5 -:100500000028F7D02846BDE8384007F013BC446DFA -:10051000002CEFD0204604F03FFF0028EAD0204610 -:10052000BDE8384005F05ABD8A79A2F150031B0698 -:1005300020D4F0B54B79046D0D798E784F78097819 -:10054000013385B002F26C72DBB244B103918DE8E5 -:10055000E0000221204607F081FB05B0F0BD406DB0 -:100560000028FAD003918DE8E000022105F086FC16 -:1005700005B0F0BD0020704710B50446006D80B195 -:10058000037813F0700F00D110BD002107F03AFA84 -:10059000606D0028F8D0BDE810400022002304F070 -:1005A000FBBE606D0028EFD090F8313013F0500F93 -:1005B000EAD0BDE810400022002304F0EDBE00BFE9 -:1005C00010B50346006D82B00C4620B30DF1060253 -:1005D00001A906F03FFE38B3BDF80430BDF806208F -:1005E00053EA020120D0C2F3451C02F01F00D20AD8 -:1005F000C3F343114000A2705A0A0139207003F07E -:100600001F0302F5EA62012084F801C023716171C1 -:10061000A27102B010BD586D30B10DF1060201A9F2 -:1006200004F054FD0028D7D1002002B010BD00BF57 -:1006300010B50346006D82B00C4620B30DF10602E2 -:1006400001A906F0F7FD38B3BDF80430BDF8062067 -:1006500053EA020120D0C2F3451C02F01F00D20A67 -:10066000C3F343114000A2705A0A0139207003F00D -:100670001F0302F5EA62012084F801C02371617151 -:10068000A27102B010BD586D30B10DF1060201A982 -:1006900004F00AFD0028D7D1002002B010BD00BF31 -:1006A0000369B3B110B41C680B48E46884420CD1F0 -:1006B000186D10B110BC07F077BB586D10B110BCAD -:1006C00005F000BD002010BC70471846234610BC42 -:1006D00018470020704700BFAD090000006990B1C5 -:1006E0000368154A1B69934225D1036D63B11878DD -:1006F00010F0080007D0D8695B69C01A48BF6FF0D6 -:100700000040704718467047436D002BFAD093F8AD -:10071000310010F00800F6D0186919685A695B6852 -:10072000401A62EB0303B0F1004F73F10003EAD308 -:100730006FF0004070471847910A0000036973B1D9 -:100740001A68084952698A4207D1186D08B107F042 -:100750001DB8586D18B104F007BE184610474FF089 -:10076000FF307047E1080000036963B11A68074968 -:1007700092698A4208D1186D08B107F069BA586DBC -:1007800008B105F033BA70471846104771090000E8 -:10079000036923B310B51968124A8C68944282B079 -:1007A00014D1186D48B101220DF1070106F020FFA8 -:1007B00090B19DF8070002B010BD586D0028F8D028 -:1007C00001220DF1070104F0FBFCF1E701220DF11C -:1007D00007011846A047EBE74FF0FF30EBE74FF07B -:1007E000FF30704721090000036D13B158690021E3 -:1007F0007047436D13B1D3E900017047184619469D -:10080000704700BF036D13B1D86900217047436D75 -:1008100013B1D3E90401704718461946704700BF69 -:10082000F0B595B00022234F01924FF47A7418313D -:10083000054604A8CDE9122202948DF80C200097F9 -:1008400008F0C6FE129B002B29D05C200BF044FC64 -:10085000019BC360029B03619DF80C300375164B2E -:1008600003600026154B83600446466004A91830D7 -:1008700008F014FE4FF47A73AB606368104AA76007 -:100880000133A6656E602A602E732C6163600D4B88 -:10089000009304A808F030FE284615B0F0BD139B65 -:1008A000002BD2D1064A6B60AC602B732A602B619F -:1008B000EDE700BF147B0100647B0100CC7A0100EE -:1008C000387B0100F07A01000346806C08B106F025 -:1008D0005DBFD86C08B104F047BD4FF0FF307047E2 -:1008E0000346006D08B106F051BF586D08B104F021 -:1008F0003BBD4FF0FF307047036D33B11B7813F0F1 -:10090000700F14BF012000207047406D30B190F887 -:10091000313013F0500F14BF01200020704700BF8A -:100920000346006D08B106F063BE586D08B104F0CF -:1009300047BC4FF0FF30704700B50346806C83B072 -:1009400058B101220DF1070106F052FE01280CD129 -:100950009DF8070003B05DF804FBD86C28B10122B4 -:100960000DF1070104F02CFCF0E74FF0FF30F1E748 -:100970000346006D08B107F06BB9586D08B105F07A -:1009800035B970470346806C08B107F061B9D86C7F -:1009900008B105F02BB970470346806C08B107F029 -:1009A00003BAD86C08B105F08DBB70470346006DE3 -:1009B00008B107F0F9B9586D08B105F083BB70476D -:1009C00000B5034683B0806C8DF8071038B1012262 -:1009D0000DF1070107F0E8F903B05DF804FBD86CEE -:1009E0000028F9D001220DF1070105F06BFB03B0DF -:1009F0005DF804FB8A79A2F150031B0620D4F0B500 -:100A00004B79046D0D798E784F780978013385B074 -:100A100002F26C72DBB244B103918DE8E000042174 -:100A2000204607F01BF905B0F0BD406D0028FAD054 -:100A300003918DE8E000042105F020FA05B0F0BD37 -:100A400000207047836C53B1187810F008000DD067 -:100A5000D8695B69C01A48BF6FF000407047C36C2B -:100A6000A3B193F8310010F0080000D17047186965 -:100A700019685A695B68401A62EB0303B0F1004FD2 -:100A800073F10003F2D36FF0004070471846EDE7B2 -:100A9000036D53B1187810F008000DD0D8695B6968 -:100AA000C01A48BF6FF000407047436DA3B193F880 -:100AB000310010F0080000D17047186919685A69B0 -:100AC0005B68401A62EB0303B0F1004F73F100035F -:100AD000F2D36FF0004070471846EDE710B5036998 -:100AE00082B08DF80710BBB11968104ACC689442E7 -:100AF00015D1186D30B101220DF1070107F054F93D -:100B000002B010BD586D0028FAD001220DF1070186 -:100B100005F0D8FA02B010BD184602B010BD01228F -:100B20000DF107011846A04702B010BDAD09000045 -:100B300038B50446806D0C4B236018B10FF0C0FA35 -:100B40000023A365236D04F118054BB1284608F076 -:100B5000D3FC064BA360284608F0CEFC204638BDE7 -:100B6000636D002BF2D1F4E7647B0100F07A0100A1 -:100B700038B50446806D0E4B236018B10FF0A0FA13 -:100B80000023A365236D04F118056BB1284608F016 -:100B9000B3FC084BA360284608F0AEFC20465C215D -:100BA0000BF09CFA204638BD636D002BEED1F0E7C8 -:100BB000647B0100F07A010038B5044649B108466B -:100BC0000D4611F05DF9236802465B682946204610 -:100BD00098472046BDE838400AF0EABE30B4029C8F -:100BE00011469C4634B1012C1CD0022C0ED00020A2 -:100BF00030BC7047056DF5B14FF0FF33934274EB95 -:100C00000C04F4D3284630BC06F0FCBE026D0AB3D7 -:100C1000D36959184CF10003002BE8D130BC1046C1 -:100C200006F0F0BE026D62B1536959184CF1000331 -:100C3000002BDCD1F2E7406D0028D8D030BC04F0A6 -:100C4000ABBB406D0028D2D0D0E900238A184CEB12 -:100C50000303F3E7406D0028C9D0D0E904238A18C4 -:100C600030BC4CEB030304F097BB00BFF0B53C4C29 -:100C70003C4AA3689BB007210AA80FF0DDFE07AE2F -:100C800002220AA906A810F0C1FB002502220DF1DC -:100C90002A0108AF30468DF81A5010F0B7FB022237 -:100CA0000BA938468DF81E5010F0B0FB2E4A009666 -:100CB00006AB092101970AA88DF822500FF0BCFE5F -:100CC000E3686068A66804930EF03CFB02460B469E -:100CD0002068264DCDE902230EF034FB244ACDE9ED -:100CE000000133462D210DA80FF0A6FE2C696CB132 -:100CF0000DA811F0C5F823681E49DB688B42024637 -:100D000027D1206DC0B10DA907F04EF817480AF0A1 -:100D10004FFE2B6943B11A68174992698A421CD168 -:100D2000186D80B106F094FF144A154B12680992B1 -:100D3000099A1A601BB0F0BD606D0028E6D00DA9BD -:100D400005F0C0F9E2E7586D0028EDD004F04EFF41 -:100D5000EAE70DA920469847D8E718469047E3E709 -:100D60002C87FF1F087501000C7501004087FF1FCD -:100D700018750100AD090000710900008C97FF1F74 -:100D80000891FF1F70B50569234B03600446002DD1 -:100D900032D06E68013E6E6076BB2B681F4ADB6AFC -:100DA00093422FD1A86D10B10FF08AF9AE652B6D6B -:100DB00023B305F1180008F09FFB2569E5B12B6806 -:100DC000174A5B68934224D1A86D164B2B6018B16B -:100DD0000FF076F90023AB652B6D05F11806A3B172 -:100DE000304608F089FB104BAB60304608F084FBBE -:100DF0005C2128460BF072F9204670BD6B6D002B0C -:100E0000D7D1DAE728469847D7E76B6D002BE7D1B3 -:100E1000E9E728469847EFE7387B010075040000B2 -:100E2000710B0000647B0100F07A010070B5056968 -:100E3000254B03600446002D32D06E68013E6E6083 -:100E400076BB2B68214ADB6A934233D1A86D10B17F -:100E50000FF036F9AE652B6D43B305F1180008F0BD -:100E60004BFB2569E5B12B68194A5B68934228D191 -:100E7000A86D184B2B6018B10FF022F90023AB6559 -:100E80002B6D05F11806C3B1304608F035FB124B47 -:100E9000AB60304608F030FB5C2128460BF01EF9B1 -:100EA000204614210BF01AF9204670BD6B6D002B03 -:100EB000D3D1D6E728469847D3E76B6D002BE3D113 -:100EC000E5E728469847EBE7387B0100750400000A -:100ED000710B0000647B0100F07A01002DE9F04104 -:100EE000554B56491A689AB044F20223064606A8A2 -:100EF00008F01EFC189B002B7BD05C200BF0ECF85C -:100F00004F4B0025C0E90035079BC3604D4B836004 -:100F1000089B03610AAF9DF82430037504463946E7 -:100F2000183008F0BBFA484BA3604FF47A73039370 -:100F30006368464AA5650133029501928DF8105009 -:100F400005946360DFF80881CDF81880384608F012 -:100F5000D3FA314601A80AF0FDFC059C002C45D0CF -:100F600023683C4EDB6AB34259D1A06D18B10FF033 -:100F7000A7F80023A365236D002B48D004F11800C7 -:100F800008F0BAFA059D6C68013C6C6074BB2B6874 -:100F9000DB6AB34246D1A86D10B10FF091F8AC6591 -:100FA0002B6D002B37D005F1180008F0A5FA059C31 -:100FB000E4B12368284A5B6893423AD1A06D204B84 -:100FC000236018B10FF07CF80023A365236D04F1B2 -:100FD000180553B3284608F08FFAC4F8088028464D -:100FE00008F08AFA5C2120460BF078F81AB0BDE8C8 -:100FF000F081199B002B80D1144A02934FF47A712F -:1010000003918DF81030019205930AAF9AE7636D52 -:10101000002BB3D1B6E76B6D002BC4D1C7E72046D8 -:101020009847AFE728469847C1E7636D002BD1D1B9 -:10103000D3E720469847D9E72887FF1FA492FF1FD0 -:10104000647B0100CC7A0100147B0100387B010035 -:10105000F07A010075040000710B00002DE9F041E9 -:10106000574B58491A689AB044F20223064606A81C -:1010700008F05EFB189B002B7ED05C200BF02CF858 -:10108000514B0025C0E90035079BC3604F4B83607F -:10109000089B03610AAF9DF8243003750446394666 -:1010A000183008F0FBF94A4BA3604FF47A730393AE -:1010B0006368484AA5650133029501928DF8105086 -:1010C00005946360DFF81081CDF81880384608F089 -:1010D00013FA314601A80AF03DFC01A80AF068FCA9 -:1010E000059C002C45D023683C4EDB6AB3425AD1A4 -:1010F000A06D18B10EF0E4FF0023A365236D002B53 -:1011000049D004F1180008F0F7F9059D6C68013C1E -:101110006C6074BB2B68DB6AB34247D1A86D10B119 -:101120000EF0CEFFAC652B6D002B38D005F118000A -:1011300008F0E2F9059CE4B12368294A5B68934210 -:101140003BD1A06D204B236018B10EF0B9FF0023F6 -:10115000A365236D04F118055BB3284608F0CCF9AC -:10116000C4F80880284608F0C7F95C2120460AF038 -:10117000B5FF1AB0BDE8F081199B002B7FF47DAF5D -:10118000144A02934FF47A7103918DF81030019252 -:1011900005930AAF96E7636D002BB2D1B5E76B6D8F -:1011A000002BC3D1C6E720469847AEE728469847AC -:1011B000C0E7636D002BD0D1D2E720469847D8E72F -:1011C0002887FF1FA492FF1F647B0100CC7A0100D7 -:1011D000147B0100387B0100F07A010075040000E7 -:1011E000710B00002DE9F041574B58491A689AB02D -:1011F00044F20223064606A808F09AFA189B002B30 -:101200007ED05C200AF068FF514B0025C0E9003514 -:10121000079BC3604F4B8360089B03610AAF9DF837 -:101220002430037504463946183008F037F94A4B24 -:10123000A3604FF47A7303936368484AA56501334A -:10124000029501928DF8105005946360DFF81081CB -:10125000CDF81880384608F04FF9314601A80AF059 -:101260009FFB01A80AF0A4FB059C002C45D0236835 -:101270003C4EDB6AB3425AD1A06D18B10EF020FF8C -:101280000023A365236D002B49D004F1180008F05A -:1012900033F9059D6C68013C6C6074BB2B68DB6A9C -:1012A000B34247D1A86D10B10EF00AFFAC652B6DAB -:1012B000002B38D005F1180008F01EF9059CE4B1A8 -:1012C0002368294A5B6893423BD1A06D204B236081 -:1012D00018B10EF0F5FE0023A365236D04F1180587 -:1012E0005BB3284608F008F9C4F80880284608F0DF -:1012F00003F95C2120460AF0F1FE1AB0BDE8F08146 -:10130000199B002B7FF47DAF144A02934FF47A713E -:1013100003918DF81030019205930AAF96E7636D43 -:10132000002BB2D1B5E76B6D002BC3D1C6E72046C9 -:101330009847AEE728469847C0E7636D002BD0D1A9 -:10134000D2E720469847D8E72887FF1FA492FF1FBF -:10135000647B0100CC7A0100147B0100387B010022 -:10136000F07A010075040000710B000010B58AB01E -:1013700002460C4601A82C4902F03CFA22232246E0 -:1013800001A903A802F03CFA284803A902F076FA62 -:101390002222002126480FF0EDFE2448322102F0DF -:1013A0000DFA044650B1214802F07CF902F0FEF833 -:1013B0008B281FD0002420460AB010BD1B4802F025 -:1013C00071F902F0F7F80028F4D0062119480DF061 -:1013D0000BFC164802F066F902F0F2F823460146CB -:1013E0000A2215480AF0FCFA13480AF0E1FA2046EE -:1013F0000AB010BD0D4802F055F9104902F0E8F8A6 -:101400000E4802F0E1F8062130B90D480DF0ECFB72 -:1014100009480AF0CDFACEE70A480DF0E5FB064888 -:101420000AF0C6FAC6E700BF00A21300BC91FF1F76 -:101430007492FF1F3C7501004488FF1FB091FF1F8D -:101440002C7501003475010000B5092185B03C48B8 -:101450000DF0CAFB3B480AF0ABFA3B493B4810F0A1 -:10146000A3F908B30E213A480DF0BEFB35480AF047 -:101470009FFA374901A80AF073FB01A8FFF7EEFDB8 -:1014800001A80AF0A7FB334901A80AF069FB324919 -:101490000023222201A80AF0ADFC01A80AF09AFB61 -:1014A0002D492E48FFF762FF2D49284810F07CF99E -:1014B000002841D002212A480DF096FB21480AF06D -:1014C00077FA284901A80AF04BFB01A8FFF7C6FDEF -:1014D00001A80AF07FFB244901A80AF041FB002380 -:1014E00022221D4901A80AF085FC01A80AF072FB1E -:1014F00019491A48FFF73AFF1C4B1D4801221A7080 -:1015000010F0BEFC1149C0F1630219480FF00AFF48 -:10151000184901A80AF024FB01A8FFF7DFFC01A885 -:101520000AF058FB124901A80AF01AFB01A8FFF7BC -:1015300095FD01A80AF04EFB05B05DF804FB00BF65 -:10154000447501004488FF1F507501004092FF1F41 -:1015500058750100687501007492FF1F364A7B417F -:1015600070750100747501007C750100C98FFF1F43 -:10157000CC8FFF1F8875010000B5072185B03A4860 -:101580000DF032FB39480AF013FA374901A80AF086 -:10159000E7FA01A8FFF762FD01A80AF01BFB344936 -:1015A000344810F001F9002830D0072132480DF0FE -:1015B0001BFB2E480AF0FCF92F4901A80AF0D0FACB -:1015C00001A8FFF74BFD01A80AF004FB2B4B2C48A8 -:1015D00001221A7010F054FC2649C0F16302284819 -:1015E0000FF0A0FE274901A80AF0BAFA01A8FFF7F8 -:1015F00075FC01A80AF0EEFA214901A80AF0B0FA38 -:1016000001A8FFF72BFD01A80AF0E4FA1E491948CA -:1016100010F0CAF820B30C211C480DF0E5FA13486D -:101620000AF0C6F9194901A80AF09AFA01A8FFF7C9 -:1016300015FD01A80AF0CEFA154901A80AF090FAA2 -:1016400014490023222201A80AF0D4FB01A80AF0C1 -:10165000C1FA1049104805B05DF804EBFFF786BEEB -:1016600005B05DF804FB00BF987501004488FF1FBA -:10167000707501004092FF1FA0750100C98FFF1F08 -:10168000CC8FFF1FA875010050750100B8750100CF -:10169000687501007492FF1F3A4A7B4100B507212B -:1016A00085B03A480DF0A0FA39480AF081F9374977 -:1016B00001A80AF055FA01A8FFF7D0FC01A80AF02A -:1016C00089FA3449344810F06FF8002830D00721E7 -:1016D00032480DF089FA2E480AF06AF92F4901A81C -:1016E0000AF03EFA01A8FFF7B9FC01A80AF072FA65 -:1016F0002B4B2C4801221A7010F0C2FB2649C0F176 -:10170000630228480FF00EFE274901A80AF028FAC4 -:1017100001A8FFF7E3FB01A80AF05CFA214901A840 -:101720000AF01EFA01A8FFF799FC01A80AF052FA84 -:101730001E49194810F038F820B30C211C480DF050 -:1017400053FA13480AF034F9194901A80AF008FAC3 -:1017500001A8FFF783FC01A80AF03CFA154901A88B -:101760000AF0FEF914490023222201A80AF042FBE4 -:1017700001A80AF02FFA1049104805B05DF804EBF3 -:10178000FFF7F4BD05B05DF804FB00BFC8750100AC -:101790004488FF1F707501004092FF1FD075010043 -:1017A000C98FFF1FCC8FFF1FD87501005075010036 -:1017B000E8750100687501007492FF1F3A4A7B4189 -:1017C00000B5082185B025480DF00EFA24480AF02E -:1017D000EFF8224901A80AF0C3F901A8FFF73EFC7F -:1017E00001A80AF0F7F91F491F480FF0DDFF002894 -:1017F00030D009211D480DF0F7F919480AF0D8F842 -:101800001A4901A80AF0ACF901A8FFF727FC01A8C2 -:101810000AF0E0F9164B174801221A7010F030FB5D -:101820001149C0F1630213480FF07CFD124901A871 -:101830000AF096F901A8FFF751FB01A80AF0CAF9CE -:101840000C4901A80AF08CF901A8FFF707FC01A8D0 -:101850000AF0C0F905B05DF804FB00BFF87501009F -:101860004488FF1F047601004092FF1F08760100A4 -:10187000C98FFF1FCC8FFF1F147601002DE9F041A7 -:1018800093489AB001F010FF914801F00BFF01F06E -:101890008FFE10B91AB0BDE8F0818D4801F002FF4B -:1018A00001F084FE9028F5D1894801F0FBFE8949BA -:1018B00001F0ACFE884801F0A7FE01F09FFF8749C8 -:1018C000054606A80AF04CF906A8FFF707FB06A88C -:1018D0000AF080F9824B83491A6806A844F2022371 -:1018E00007F026FF189B002B00F0BD805C200AF05B -:1018F000F3FB7D4B0026C0E90036079BC3607B4BA2 -:101900008360089B03610AAF9DF824300375044689 -:101910003946183007F0C2FD754B01936368A66520 -:1019200001336360734BA3604FF47A7302968DF8B2 -:10193000106005940393DFF8C081CDF81880384615 -:1019400007F0DAFD00231022294601A80AF048F822 -:1019500001A80AF02DF8059C002C4CD02368674F95 -:10196000DB6ABB4240F09D80A06D18B10EF0A8FB71 -:101970000023A365236D002B00F08E8004F1180076 -:1019800007F0BAFD059E7468013C7460002C32D1EA -:101990003368DB6ABB4240F09180B06D10B10EF04D -:1019A0008FFBB465336D002B00F0838006F11800C7 -:1019B00007F0A2FD059CF4B12368514A5B6893428D -:1019C00040F08380A06D484B236018B10EF078FB87 -:1019D0000023A365236D04F11806002B71D0304657 -:1019E00007F08AFDC4F80880304607F085FD5C21C9 -:1019F00020460AF073FB374801F03CFE302822D81D -:101A0000312200213F480FF0B5FB334801F028FE9A -:101A10000446304801F02EFE2146024639480AF0BD -:101A20000BFA394B9D4232D0384B9D422AD0384B6D -:101A30009D4239D0374B9D427FF42CAF1AB0BDE8A0 -:101A4000F041FFF7BDBE344906A80AF089F806A8A0 -:101A5000FFF744FA06A80AF0BDF81E4801F00AFE96 -:101A6000FFF7C0FBCCE7199B002B7FF43FAF204A68 -:101A700002934FF47A7103918DF81030019205931F -:101A80000AAF58E71AB0BDE8F041FFF7DDBC1AB065 -:101A9000BDE8F041FFF770BD636D002B7FF46EAFC2 -:101AA00070E7204698476DE71AB0BDE8F041FFF7B0 -:101AB000F5BD736D002B7FF479AF7BE73046984717 -:101AC00078E7636D002B8AD18CE72046984792E730 -:101AD000BC91FF1F6491FF1F6091FF1F24760100DE -:101AE0002887FF1FA492FF1F647B0100CC7A0100AE -:101AF000387B0100147B0100F07A010075040000BE -:101B0000710B00004092FF1F3A4A7B41364A7B41ED -:101B1000AC919041BCDD5642307601002DE9F04198 -:101B20002F4C0FCC90B005AD0FC50FCC0FC594E86E -:101B300007000C3485E8070094E8030003AC84E850 -:101B4000030005AD0DF13F06B52001E015F8010FCA -:101B50000CF02CF9B542F9D1224E4FF47A700AF00C -:101B60007FFD33680193019D05F59C5508350DF106 -:101B70001307B52001E014F8010F0CF017F9A74284 -:101B8000F9D100240227A04602E00CF051F948B92F -:101B900033680293029B9D42F7D80024204610B080 -:101BA000BDE8F0810CF058F907F140036B443CB1FB -:101BB00013F82C3C834207F10107EED12B2FEDDC0B -:101BC000B52804D0622805D04FF00008E0E74FF0B8 -:101BD0000108DDE7B8F1000F18BF4446D8E700BFA1 -:101BE000C07C01008C97FF1F2DE9704F194D0446F2 -:101BF000284609F0AFFB824628468B4609F0CAFB0F -:101C000000238046D5F8800085F8893085F8493072 -:101C100085F8793089460DF0CFFF0F490EF0D4F8E2 -:101C20000EF0FAF95946064650460DF0BBFE4946FD -:101C3000206040460DF0B6FE084AEB6CD5F89010D7 -:101C40006060A2FB03235B09E6602046A36021617C -:101C5000BDE8708F3090FF1F0000C8421F85EB5118 -:101C600030B5164C89B006E00CF0F6F8C1B220464B -:101C700009F00CFB90B90CF0DBF80028F4D1FFF769 -:101C8000FDFD0F4B0F4A1B680793079B12689B1AB9 -:101C9000B3F57A7F0CD8012009B030BD68466C4698 -:101CA000FFF7A2FF0FCC084D0FC523682B60E6E7B6 -:101CB000FEF7DCFF012009B030BD00BF3090FF1FF0 -:101CC0008C97FF1F0891FF1F2C87FF1F38B501213C -:101CD00004200AF089FC002104200AF051FC0021B4 -:101CE00005200AF04DFC0D4D00242146284609F040 -:101CF00057FE284609F05CFE64200AF0B1FC012181 -:101D000004200AF03DFC19200AF0AAFC013400214D -:101D100004200AF035FC0A2CE7D138BD4488FF1FA7 -:101D200038B51E481E4C1F4D01F0A6FC1E4801F0A0 -:101D30003BFC1E4801F046FC1D4801F05BFC1D48C1 -:101D400001F096FC1C4808F0DDFF21462A461B489E -:101D50000DF08EF921462A4619480DF089F92146E1 -:101D60002A461848184C0DF083F9184B18491C6086 -:101D70001E204FF496744FF0FF3258609860DC607C -:101D8000002001241A619C829A61DA611C8483F824 -:101D9000220058629962D9621A6338BDBC91FF1F54 -:101DA000850D00002087FF1F5491FF1FB091FF1F7A -:101DB0006091FF1F4891FF1F3090FF1F4087FF1F5A -:101DC0005C87FF1F7487FF1FC487FF1F1491FF1FCD -:101DD0006C80010030B54FF4165189B01348144C93 -:101DE00009F0A6FC32200AF03BFC0FCC0DF1040CEC -:101DF000ACE80F0094E807000DF11F058CE8070020 -:101E000001ACB52001E014F8010F0BF0CFFFAC429C -:101E1000F9D10BF009FF05484FF4E13109F088FCD6 -:101E2000642009B0BDE830400AF01ABCEC87FF1FFF -:101E3000887C0100F0B595B06D46FFF7CBFF2B49CC -:101E40005022284609F0F8FF2C460DF14F06B52028 -:101E500001E014F8010F0BF0A9FFB442F9D1244BB3 -:101E60000FCB2C4685E80F000DF10F06B52001E0E1 -:101E700014F8010F0BF09AFFB442F9D1FFF74EFEB0 -:101E800060BB1C4811210CF0AFFE1B4809F090FD0F -:101E90001A4B0FCB2F4607C72C460DF10D063B8082 -:101EA000B52001E014F8010F0BF080FFA642F9D134 -:101EB000134F0FCF2C460FC597E8030045F8040BCE -:101EC00005AE4FF0B50C297001E014F801CF604663 -:101ED0000BF06CFFA642F8D115B0F0BD08210948FF -:101EE0000CF082FE044809F063FDD1E7DC7B0100C1 -:101EF0002C7C01004C7601004488FF1F3C7C0100D3 -:101F0000F47C0100607601002DE9F047A64DA74C56 -:101F10002E68A74FDFF89C92ACB040F2EE280CF090 -:101F200069FF2378002B00F05F833B78DB0740F1EB -:101F30005B832B68D9F800209B1A0E2B40F2548348 -:101F40009D484FF4165109F03BFB4FF496419B48D6 -:101F500009F0BEFA4FF47A700AF082FB0821984823 -:101F60000CF042FE974809F023FDFFF763FF92490A -:101F7000954801F093FBFFF7A9FE0621934802F074 -:101F8000F9FF934B93491A6818A844F2022307F00B -:101F9000CFFB2A9B002B00F085845C200AF09CF884 -:101FA0009DF86C3003758C4B199903601A9A8B4B12 -:101FB000C16000261CAD044683600261466029466C -:101FC000183007F06BFA864BA3606368A66501338F -:101FD0006360844FDFF81082CDF86080284607F0F8 -:101FE0008BFA3E6936B17368013B73600093002B36 -:101FF00000F08C837D4B77491A683C6144F20223E0 -:1020000018A807F095FB2A9B002B00F045845C2064 -:102010000AF062F8199BC3601A9B03619DF86C304B -:1020200003756D4B036004466C4B8360002646606D -:102030002946183007F032FA6368A66501336360F9 -:10204000674BA3606A4ECDF86080284607F054FACB -:10205000336933B15A68013A5A600092002A00F09D -:102060001383644B5B491A68346144F2022318A855 -:1020700007F05EFB2A9B002B00F01B845C200AF01B -:102080002BF8199BC3601A9B03619DF86C30037594 -:10209000514B03600446514B83604FF00009C0F878 -:1020A00004902946183007F0F9F96368C4F858908D -:1020B000013363604A4BA36028464F4DCDF86080E2 -:1020C00007F01AFA2B6933B15A68013A5A60009244 -:1020D000002A00F097820A202C610AF0C1FA3B69BD -:1020E0006BB11A68D468454A944240F03984186D3F -:1020F000002800F04D8342490C2205F055FE394876 -:1021000009F056FC33696BB11A68D4683B4A9442B3 -:1021100040F01D84186D002800F0318339490B22EE -:1021200005F042FE324809F043FC2B696BB11A6896 -:10213000D468324A944240F01C84186D002800F0A4 -:10214000458331490B2205F02FFE2B4809F030FC66 -:102150003B695BB11A682D4992698A4240F0FD8360 -:10216000186D002800F01D8305F072FD33695BB126 -:102170001A68264992698A4240F0E683186D002861 -:1021800000F01D8305F064FD2B69002B40D01A6818 -:102190001E4992698A4240F0E983186D002800F0D8 -:1021A000078305F055FD33E08C97FF1F289AFF1F2A -:1021B0004C9AFF1F509AFF1FD887FF1FC487FF1F2D -:1021C0006C7601004488FF1FBC91FF1FA092FF1F87 -:1021D0005487FF1FA492FF1F647B0100CC7A01008B -:1021E000147B01004087FF1FF07A01007087FF1FFA -:1021F0005C87FF1F8887FF1F7487FF1FAD090000E2 -:10220000787601008876010094760100710900005B -:102210000821BA480CF0E8FCB94809F0C9FBB949F3 -:1022200018A809F09DFC18A8FEF718FF18A809F0D7 -:10223000D1FCB54918A809F093FC00232222B34928 -:1022400018A809F0D7FD18A809F0C4FCAF49B04898 -:10225000FFF78CF81121AF480CF0C6FCA84809F034 -:10226000A7FBAD4802F0C4FB00210446AA4801F0D8 -:1022700069FBA948782101F063FB002C40F0E8825B -:102280000D21A648A64D0CF0AFFC9D4809F090FB2F -:10229000A44918A809F064FC234622229B4918A8E7 -:1022A00009F0A8FD18A809F095FC98499848FFF78F -:1022B0005DF89948294601F0A7FD0446002840F042 -:1022C0008E821D219848994E994F0CF08DFC2968FB -:1022D0008B4809F065FB8A4809F06AFB954915A807 -:1022E00009F03EFC0A22296812A809F0C7FC12A9CD -:1022F00015A809F069FD014618A809F04FFC23460E -:102300002222824918A809F075FD18A809F062FC7C -:1023100012A809F05FFC15A809F05CFC7B497C4819 -:10232000FFF724F8844918A809F01AFC2346222252 -:10233000764918A809F05EFD18A809F04BFC73490E -:102340007348FFF713F8214609A809F009FC092191 -:102350007A487B4C0CF048FC694809F029FBF3688B -:10236000013BBB421BD90BF063FD0028F7D00BF0FB -:1023700073FDC1B2204608F089FF0028F3D002A8FF -:10238000FFF732FC0DF1080CBCE80F00674D0FC5DC -:10239000DCF800302B60F368013BBB42E3D80A2233 -:1023A000B1680CA809F096FC0CA90FA809F0F6FB7F -:1023B00064490FA809F010FD04220446316812A8F0 -:1023C00009F09EFC12A9204609F0FEFC5D4909F0C7 -:1023D00003FD04220446716815A809F091FC15A9B3 -:1023E000204609F0F1FC574909F0F6FC0A220446A0 -:1023F000F16818A809F058FC18A9204609F0E4FC77 -:10240000014609A809F098FC18A809F0E3FB15A8F3 -:1024100009F0E0FB12A809F0DDFB0FA809F0DAFBD8 -:102420000CA809F0D7FB09A9474809F093FA4648D8 -:1024300009F0BEFA454918A809F092FB18A8FEF762 -:102440000DFE18A809F0C6FB05244FF4FA700AF037 -:1024500007F9012104200AF093F8FA200AF000F9A4 -:10246000002104200AF08CF8013CEED1384918A86C -:1024700009F076FB09A915A809F090FB15A918A881 -:1024800009F0A2FC01461E4809F064FA1C4809F054 -:102490008FFA15A809F09EFB18A809F09BFB2D499F -:1024A00018A809F05DFB23462222184918A809F054 -:1024B000A1FC18A809F08EFB14491548FEF756FF39 -:1024C0003F2125480CF090FB2346312209A818A98A -:1024D00009F090FC104818A902F0C8F8044600283A -:1024E00000F0ED811D4915A809F03AFB0A222146AA -:1024F00012A809F0C3FB12A932E000BFA0760100C8 -:102500004488FF1FAC760100BC7601007492FF1F67 -:10251000364A7B41C47601001491FF1F14770100F5 -:10252000AC91FF1F24770100547701002C87FF1F17 -:102530009F86010074770100807701009877010081 -:102540003090FF1F447601007487FF1FA4770100BD -:10255000AC770100B8770100C07701000078010076 -:1025600015A809F031FC0146AC4809F0F3F9AB4875 -:1025700009F01EFA12A809F02DFB15A809F02AFB94 -:10258000A64809F015FAA64915A809F0E9FA15A810 -:10259000FEF7A4FC15A809F01DFB2046FEF722FE5D -:1025A000072C00F0F5819F4915A809F0D9FA15A864 -:1025B000FEF754FD15A809F00DFB9B4915A809F07D -:1025C000CFFA00232222994915A809F013FC15A877 -:1025D00009F000FB95499648FEF7C8FE09A809F0E6 -:1025E000F9FA2CB0BDE8F0872B6822789B1B32B13A -:1025F000B3F5FA6F3FF6A4AC0CF0FCFB8FE4434557 -:10260000FAD99DE419688B48C96A814240F0B781C4 -:10261000986D28B101930DF053FDDDE900239A6513 -:102620001A6D002A00F0868103F1180006F064FF9D -:10263000D5F81090B9F1000F3FF44DADD9F8003046 -:102640007D4A5B68934240F0C081D9F858007B4BCB -:10265000C9F8003020B10DF033FD0023C9F858301F -:10266000D9F8503009F1180A002B00F09981504632 -:1026700006F042FFC9F80880504606F03DFF484684 -:102680005C2109F02BFD26E519686A48C96A814278 -:1026900040F07B81986D28B101930DF011FDDDE9CB -:1026A00000239A651A6D002A00F03F8103F118009B -:1026B00006F022FFD6F81090B9F1000F3FF4D1AC2C -:1026C000D9F800305C4A5B68934240F08281D9F8C7 -:1026D00058005A4BC9F8003020B10DF0F1FC00232E -:1026E000C9F85830D9F8503009F1180A002B00F019 -:1026F0005D81504606F000FFC9F80880504606F09C -:10270000FBFE48465C2109F0E9FCAAE4326849492D -:10271000D26A8A4240F03681B06D18B10DF0D0FC1B -:10272000009BB365336D002B00F0098106F11800A2 -:1027300006F0E2FE3E69002E3FF45CAC33683E4A90 -:102740005B68934240F03D81B06D3C4B336018B103 -:102750000DF0B6FC0023B365336D06F11809002BAC -:1027600000F02A81484606F0C7FEC6F808804846B1 -:1027700006F0C2FE30465C2109F0B0FC3AE4586D28 -:1027800000283FF4CFAC2E490B2203F09BFCC9E498 -:10279000586D00283FF4B3AC2A490C2203F092FC98 -:1027A000ADE4586D00283FF4E1AC03F01FFADDE41E -:1027B000586D00283FF42CAD03F018FA28E5586D49 -:1027C00000283FF4E1AC03F011FADDE4586D002875 -:1027D0003FF4BBAC1C490B2203F074FCB5E41C2194 -:1027E0001A480CF001FA21460C4809F0D9F80B48B8 -:1027F00009F0DEF8154918A809F0B2F918A8FEF793 -:102800006DFB18A809F0E6F92046FEF7EBFC4FF047 -:10281000FF332B602CB0BDE8F08700BF4488FF1F5A -:10282000007801001C7801005C7801007492FF1FA1 -:10283000364A7B4175040000710B0000647B010087 -:1028400088760100787601009476010034770100E3 -:10285000142162480CF0C8F92146614809F0A0F83B -:102860005F4809F0A5F85D4918A809F079F918A89A -:10287000FEF734FB18A809F0ADF92046FEF7B2FCCC -:10288000052CC7D1202157480CF0AEF954482CB084 -:10289000BDE8F04709F08CB82B9C002C7FF4B7AB57 -:1028A000FFF7D0BB2B9C002C7FF477AB1CADFFF760 -:1028B00090BB2B9C002C7FF4E1ABFFF7FDBB4A499A -:1028C00015A809F04DF918A912A809F049F912A99B -:1028D00015A809F079FA0146414809F03BF840484B -:1028E00009F066F812A809F075F915A809F072F94F -:1028F0003D4912A809F034F918A90FA809F030F9D8 -:102900000FA912A809F060FA014615A809F046F9C6 -:1029100015A8FEF7A3FB15A809F05CF90FA809F0AC -:1029200059F912A809F056F947E65A6D002A7FF4C2 -:10293000BDAEBFE65A6D002A7FF476AE78E6736DC1 -:10294000002B7FF4F3AEF5E6184690471CE42749C8 -:1029500018460B22A047FFF7E5BB1846904705E451 -:10296000234918460C22A047FFF7C9BB18469047D9 -:102970004EE4204918460B22A047FFF7E6BB184655 -:10298000884755E630469047D4E61846884791E692 -:10299000282119480CF028F9114809F009F802E635 -:1029A000D9F85430002B7FF462AE63E6D9F8543086 -:1029B000002B7FF49EAE9FE6736D002B7FF4D2AEAA -:1029C000D3E630469847FFF715BB48469847FFF7D0 -:1029D00082BB48469847FFF744BB00BFD87601004A -:1029E0004488FF1FF07601004878010088760100D6 -:1029F00078760100947601001C78010030B5AB496F -:102A0000AB4889B00EF0D0FE18B3AA4BAA480022FA -:102A100010211A600CF0E8F8A84808F0C9FFA64990 -:102A200004A809F09DF804A8FEF718FB04A809F013 -:102A3000D1F8A34BA34801221A700FF021FAA24942 -:102A40000246A048C2F1630209B0BDE830400EF072 -:102A500069BC9E4996480EF0A7FE0446E0B1954B2E -:102A60009B482A220D211A600CF0BEF8934808F00A -:102A70009FFF974904A809F073F804A8FEF7EEFA3F -:102A800004A809F0A7F88E4B8E4801221A700FF0A7 -:102A9000F7F990490246D4E78F4985480EF084FE45 -:102AA000E8B1844B1B682A2B44D08C4904A809F058 -:102AB00057F804A8FEF7D2FA04A809F08BF81421FD -:102AC00086480CF091F87D4808F072FF7C4B7D48F9 -:102AD00001221A700FF0D4F981490246B1E7814909 -:102AE00073480EF061FE0446002848D07E497048C5 -:102AF0000EF05AFE002871D00D217C480CF074F8BD -:102B00006E4808F055FF794904A809F029F804A88F -:102B1000FEF7A4FA04A809F05DF87549684B694806 -:102B200001224EF660240C601A700FF0A9F9714969 -:102B3000024686E7042170480CF056F85F4808F01A -:102B400037FF6E4904A809F00BF804A8FEF786FACF -:102B500004A809F03FF8684904A809F001F82346E1 -:102B60006749222204A809F045F904A809F032F8BF -:102B70006349644809B0BDE83040FEF7F7BB6249DD -:102B80004B480EF011FE00286ED009215E480CF073 -:102B90002BF84A4808F00CFF5B4904A808F0E0FF56 -:102BA00004A8FEF75BFA04A809F014F8564904A833 -:102BB00008F0D6FF23462222514904A809F01AF949 -:102BC00004A809F007F84E495048FEF7CFFB0BF078 -:102BD0002BF809B0BDE83040FFF72CB94C49344818 -:102BE0000EF0E2FDE0B10D214A484B4C0BF0FCFF2A -:102BF000324808F0DDFE474904A808F0B1FF04A8F8 -:102C0000FEF72CFA04A808F0E5FF39492C4B2D48B3 -:102C10000C6001221A700FF033F94049024610E7A8 -:102C20003F4923480EF0C0FD002800F087800D21A9 -:102C30003C483D4C0BF0D8FF204808F0B9FE39491C -:102C400004A808F08DFF04A8FEF708FA04A808F00D -:102C5000C1FF27491A4B1B480C6001221A700FF064 -:102C60000FF932490246ECE6314911480EF09CFD5D -:102C70000446002800F086800C212E480BF0B4FF9B -:102C80000E4808F095FE2C4904A808F069FF04A836 -:102C9000FEF7E4F904A808F09DFF094B094801225A -:102CA0001A700FF0EDF822490246CAE66C7801006E -:102CB0007891FF1F2487FF1F747801004488FF1F4D -:102CC000C98FFF1FCC8FFF1F88780100907801000B -:102CD00094780100D8780100A4780100BC78010044 -:102CE000D4780100E0780100E8780100F078010074 -:102CF0005887FF1F00790100AC780100B47801000B -:102D00007492FF1F3A4A7B4158790100364A7B4151 -:102D1000047901000C790100E09304001C790100A2 -:102D20002079010028790100A0BB0D00387901004D -:102D3000847901006479010074790100A749A848E9 -:102D40000EF032FD002800F088800F21A548A64C27 -:102D50000BF04AFFA54808F02BFEA54904A808F08F -:102D6000FFFE04A8FEF77AF904A808F033FFA14992 -:102D7000A14BA2480C6001221A700FF081F8A04903 -:102D800002465EE69F4996480EF00EFD0546002875 -:102D900065D009219C480BF027FF944808F008FEF5 -:102DA000994904A808F0DCFE04A8FEF757F904A826 -:102DB00008F010FF944904A808F0D2FE9349234676 -:102DC000222204A809F016F804A808F003FF8F498E -:102DD0008F48CFE68F4982480EF0E6FC002800F0CD -:102DE00098808C498148FDF7E7FE7D4987480EF0C1 -:102DF00013FA894B93E803000A2204908DF814100B -:102E00000DF1150000210EF0B5F980498048FEF75C -:102E1000ADFA00286CD17D497D48FEF7A7FA00285D -:102E200066D17E4901A808F09BFE01A8FEF716F9BD -:102E300001A808F0CFFE7A4B93E8030005908DF8C7 -:102E400018106D4B6D4801221A700FF019F804A983 -:102E5000C0F1630269480EF065FA09B030BD7149EE -:102E60005F480EF0A1FCB0B10A216F480BF0BCFE28 -:102E70005E4808F09DFD6C4904A808F071FE04A8A6 -:102E8000FEF7ECF804A808F0A5FE674904A808F0CE -:102E900067FE2B4664E6654951480EF085FC002824 -:102EA00098D063495148FDF787FE4D4957480EF0C9 -:102EB000B3F956495F48FEF759FAB8B953495D4826 -:102EC000FEF754FA90B95C4904A808F049FE04A83A -:102ED000FEF7C4F804A808F07DFE474B47480122DE -:102EE0001A700EF0CDFF55490246AAE55049EBE7AE -:102EF000484901A808F034FE01A8FEF7AFF801A880 -:102F000008F068FE4E4B93E8030005908DF818100A -:102F100097E74C4932480EF047FC0546002800F080 -:102F2000998004AC47493148FDF746FE45492046A3 -:102F300008F016FE2046FEF791F8204608F04AFEFB -:102F4000274932480EF068F93F4B93E8030000230D -:102F50000490ADF814103D482C49ADF81630ADF88A -:102F60001830ADF81A30ADF81C308DF81E30FEF771 -:102F7000FDF9002840F0CB8024493448FEF7F6F9EB -:102F8000002840F0C48021493048FEF7EFF90028BE -:102F900040F0BD801D492D48FEF7E8F9002840F0BB -:102FA000B6802B4901A808F0DBFD01A8FEF756F812 -:102FB00001A808F00FFE1A4905220DF1150008F0CE -:102FC0003BFF0D4B0D4801221A700EF059FF2146B0 -:102FD000C0F1630209480EF0A5F93EE73C79010013 -:102FE0007891FF1F4479010080EE36004488FF1F6E -:102FF000287901005887FF1FC98FFF1FCC8FFF1F43 -:1030000054790100807901008C7901007492FF1FCE -:10301000364A7B41E47901000C7D0100EC79010026 -:10302000F879010098790100A4790100B0790100D4 -:10303000BC7901003A4A7B41C8790100D879010086 -:10304000047A0100007A01001C7D0100AC919041DE -:103050000C7A01003F4940480EF0A6FB00283FF4DF -:10306000FCAE04AC3B493D48FDF7A6FD394920467E -:1030700008F076FD2046FDF7F1FF204608F0AAFD96 -:10308000354937480EF0C8F8364B93E8030008225C -:103090000B0C0490ADF814100DF1170029468DF8B3 -:1030A00016300EF067F82E492F48FEF75FF900281A -:1030B0003ED12B492C48FEF759F9002838D1284930 -:1030C0002948FEF753F9002832D125492648FEF752 -:1030D0004DF968BB254901A808F042FD01A8FDF79C -:1030E000BDFF01A808F076FD214905220DF116006B -:1030F00008F0A2FE1F4B204801221A700EF0C0FEFD -:103100002146C0F163021C480EF00CF9A5E61B49EC -:1031100001A808F025FD01A8FDF7A0FF01A808F00F -:1031200059FD174905220DF1150008F085FE48E705 -:10313000084901A808F014FD01A8FDF78FFF01A8B8 -:1031400008F048FD0E4905220DF1160008F074FE46 -:10315000D0E700BF1C7A01007891FF1F4488FF1F51 -:103160007492FF1F2C7D0100BCDD5642287A0100BD -:10317000F8790100C98FFF1FCC8FFF1F007A010073 -:10318000047A01002DE9F04FA54FB3B0FEF768FDBA -:10319000FEF774FB3B68A34A0B930B9B12689B1AC8 -:1031A000B3F57A7F3CD83B689F4C0893089B216815 -:1031B00043F698225B1A934212D89C4B1B68002B53 -:1031C0000BDD3B68DFF868A29A4A0A930A9BDAF89B -:1031D000001012685B1A934225D833B0BDE8F08F17 -:1031E000002395480F930FA900F00EFE0546002816 -:1031F00000F0F48009280CD0904912A808F0B0FC27 -:1032000012A8FDF76BFE12A808F0E4FC2846FDF7B3 -:10321000E9FF864B1B683A680992099A2260CEE75B -:10322000FDF724FDBFE7864D31230793EB68AC68BB -:10323000049368680CF086F8CDE9020128680CF068 -:1032400081F823467F4C804ACDE90001802112A8F5 -:103250000DF0F2FB23780FAE002B40F00B8112A98A -:10326000304608F07DFC3046FDF738FE304608F069 -:10327000B1FC7649DFF8D881304608F071FC304661 -:10328000FDF7ECFE304608F0A5FC0C216F480BF072 -:10329000ABFC704808F08CFBD8F8104084B112A841 -:1032A0000EF0EEFD23686C49DB688B42024640F06D -:1032B0002E81206D002800F0078112A904F074FD12 -:1032C000634808F075FBD8F810305BB11A686349A1 -:1032D00092698A4240F01881186D002800F0FC8045 -:1032E00004F0B6FC07AB5E4A5348DFF8788112A9B8 -:1032F00001F0D0F95C49C4B2304608F031FC3046E8 -:10330000FDF7ECFD304608F065FC2046FDF76AFF4E -:103310005649304608F024FC21460CA808F096FCDB -:103320000CA9304608F050FD01464A4808F012FB4F -:10333000484808F03DFB0CA808F04CFC304608F06B -:1033400049FC0A22A968304608F0C4FC31464046D0 -:1033500008F000FB304608F03DFCD8F810306BB1A7 -:103360001A68D4683C4A944240F0C980186D00281D -:1033700000F0B9803E49012204F016FDFFF73EFB44 -:10338000079B002B33D00024354DDFF8CCB0A1468D -:103390000BE0314604F008FD012005F8019C09F01E -:1033A0005FF9079B0134A34221D9D8F8101015F812 -:1033B000013B8DF83C300029EED00B68DB685B45A3 -:1033C0004FF001020ED1086D0028E2D1486D0122B4 -:1033D0000028E1D0314602F075FEDDE7134A0F9B6D -:1033E000136018E70846012231469847D4E71D4884 -:1033F00008F0DEFAD8F810304BB11A681749926914 -:103400008A4279D1186D002858D004F021FC3B681D -:103410000F930F9BCAF8003033B0BDE8F08F00BFA8 -:103420008C97FF1F0891FF1F1091FF1FAC91FF1F8A -:103430000C91FF1F5887FF1F1491FF1F387A01005E -:103440002C87FF1FC98FFF1F4C7A0100707A010083 -:103450007487FF1F4488FF1FAD0900007109000039 -:103460007891FF1F5C87FF1F807A0100B07A01000E -:10347000C07A01002849304608F072FB3046FDF75B -:103480002DFD304608F0A6FB2449304608F068FBC5 -:103490003046FDF7E3FD304608F09CFB12A80EF025 -:1034A000EFFC1E49C0F17F0212A80DF03BFF002186 -:1034B00064221A4821700DF05DFED0E6586D002898 -:1034C000A5D002F093FBA2E7606D00283FF4F8AEB0 -:1034D00012A902F0F7FDF3E6586D00283FF402AFA1 -:1034E00002F084FBFEE6586D00283FF447AF0C491C -:1034F000012202F0E7FD41E71846904787E70849B7 -:1035000018460122A04739E718469047EAE62046C8 -:1035100012A99847D4E600BF607A0100CC8FFF1F44 -:10352000C07A01000B2070470B2920D8DFE801F09A -:10353000080A0C0E10121416181B1D06C07E7047C8 -:10354000C07C7047807C7047407C7047007C70472F -:10355000C07D7047807D7047407D7047007D70471B -:10356000008B000A7047007E7047807E704783683A -:103570000B4413F80C0C7047007B0C30C0B2704742 -:1035800010B50168074A4B68847A934204D1013C24 -:103590000B20201AC0B210BD9847013C201AC0B2BF -:1035A00010BD00BF25350000704700BF007970478F -:1035B000407A7047807A003818BF0120704700BFFA -:1035C000807A7047704700BF03681879704700BF62 -:1035D00003680B6003790B71437A4B72C379CB712B -:1035E000837A8B72037A0B7243794B7183798B7177 -:1035F000704700BF10B4034C0460002110BC01618F -:1036000041617047547D01001030704702680A60C4 -:1036100003790B71437A4B72C379CB71837A8B72C6 -:10362000037A0B7243794B7183798B71537892F8DB -:1036300000C0D0781B0403EB0C630344907803EBC9 -:103640000023CB60537992F804C0D07992791B049F -:1036500003EB0C63034403EB02230B61704700BFD1 -:1036600010B5D0E9002453689847204410BD00BF2E -:10367000704700BF80797047002210B400F1110438 -:1036800005490460828110BCC27302744272827266 -:10369000C271C0F880107047C487FF1FC0F8801047 -:1036A000704700BF704700BFF8B5437A0446002B4F -:1036B0003AD1837A002B37D1012704260325D4F889 -:1036C000800003681B699847002852D0D4F8800016 -:1036D00003685B699847637BC0B2A07353B37E28CD -:1036E00045D07D2831D0227B2AB1A27B002182F0F7 -:1036F0002002A2732173022B03D9E27BA17B0A442F -:10370000E273032B36D8DFE803F01B0A0602A37B23 -:1037100023716673D3E7A37BA3716573CFE7A27BA5 -:10372000627102236373CAE70023A381636023816C -:10373000A372C1E7227B1AB180F02000A07323732B -:10374000A37B7E2BBBD16773B9E7D4F880000368F5 -:103750001B69984748B1D4F8800003685B699847B3 -:1037600080F02000637BA073BDE72773A7E70323E6 -:10377000A372F8BD6E2B0CD8A279033293420BD002 -:1037800022681A44A37B02F8043C637B0133637311 -:1037900095E70223A372F8BDE27BFF2A07D001213F -:1037A0000022043BA17223726273E273F8BDA17B15 -:1037B000E171012262720021F2E700BFF0B50D1E37 -:1037C00083B012DB0A4E33680093009F044605E085 -:1037D000FFF76AFF607A48B9A37A33B93368019377 -:1037E000019BDB1BAB422046F2DB002003B0F0BDA7 -:1037F0008C97FF1FC0E90012704700BF40687047F8 -:1038000084464FF4887010B48CF80C30ACF8040087 -:10381000634603C9064CCCF8082043F8104B4FF61A -:10382000FE7283E80300CCF81820604610BC704795 -:10383000447D010070B505460C463AB1A1F17D0307 -:10384000012B0BD901F0FD03112B07D0D5F8800017 -:10385000036821461B68BDE870401847D5F8800012 -:1038600003687D211B689847D5F88000036884F0C1 -:1038700020011B68BDE87040184700BF2DE9F041EA -:103880008046D0F8800003680C461B687E2198476C -:10389000236820465B689847236805465B68204696 -:1038A0009847A91C01220546C1F307214046FFF7AE -:1038B000C1FFA91C0122C9B24046FFF7BBFF217915 -:1038C00001224046FFF7B6FF617901224046FFF72B -:1038D000B1FF277963791F440025FFB20FE0236809 -:1038E0001B689847012201464046FFF7A3FF236863 -:1038F00031461B682046984738440135C7B22368D3 -:1039000020465B6898470346EEB2AB4231462046FC -:10391000E5DCF94340460122C9B2FFF78BFFD8F836 -:1039200080000368BDE8F041DB681847034B0021C5 -:103930004FF6FF72C3E90012704700BF9892FF1F55 -:10394000C160704780F82010704700BF2DE9F04338 -:10395000144D154F2B6883B081460093009E4FF4A1 -:103960007A7303FB01F44FF001082B680193019B6C -:103970009B1BA34212D2D9F81C30D8B2013304D019 -:1039800008F024FE08B989F82280002FEDD0FEF758 -:1039900067F90028E9D103B0BDE8F083012003B046 -:1039A000BDE8F0838C97FF1F611C000030B5044612 -:1039B000806981F001032375431C83B02FD00D462D -:1039C000C0B2012108F010FEBDB9194B606A1B6836 -:1039D0000193019B1A1AB2F5FA6F22D3154D5021AB -:1039E0002046AFF3008015F8011B0029F8D1207E96 -:1039F00003B0BDE8304008F0C3BD0F4D5021204654 -:103A0000AFF3008015F8011B0029F8D1207E0121B9 -:103A100008F0B6FD064B1B680093009B636203B081 -:103A200030BDC3F5FA63184408F01AFED6E700BFAC -:103A30008C97FF1F757D01005D7D01002DE9F04130 -:103A400005460E461F46BAB9344614F8011B31B17B -:103A50002846AFF3008014F8011B0029F8D1AFB954 -:103A60002C6830460EF00CFA236802463146204698 -:103A70005B68BDE8F0411847094C3E212846AFF38A -:103A8000008014F8011B0029F8D1DDE7054C0D2159 -:103A90002846AFF3008014F8011B0029F8D1DFE7B6 -:103AA0008D7D0100D17E010070B5154D0E46044696 -:103AB0003E212046AFF3008015F8011B0029F8D104 -:103AC0003178354631B12046AFF3008015F8011F3B -:103AD0000029F8D10B4D0D212046AFF3008015F8D9 -:103AE000011B0029F8D1246830460EF0C9F923687B -:103AF0000246314620465B68BDE87040184700BF6B -:103B00008D7D0100D17E01002DE9F043284E294F23 -:103B100083B004464FF00108206803681B6998478A -:103B2000002824DD236B013321D1206803685B6901 -:103B30009847C5B229462046AFF30080A26A1378A1 -:103B40000BB1AB4201D02563E6E7531CA362537867 -:103B500083B9194D84F8228053212046AFF30080A9 -:103B600015F8011B0029F8D1E762A762D4E703B07A -:103B7000BDE8F08333680093DDF8009006E0336819 -:103B80000193019BA3EB0903092B05D82068036867 -:103B90001B6998470028F2D0206803681B69984782 -:103BA0000028B9D1A36A2563013BA362B4E700BF33 -:103BB0008C97FF1F6C800100957D01002DE9F04F6F -:103BC00085B06C4C0E9E0092894683461F46572155 -:103BD0005846AFF3008014F8011B0029F8D1317862 -:103BE000344631B15846AFF3008014F8011F002964 -:103BF000F8D1614C0D215846AFF3008014F8011B39 -:103C00000029F8D1B9F1000F03D0009A48460DF011 -:103C1000B1FAB7FA87F56D09584C6D003C2158464A -:103C2000AFF3008014F8011B0029F8D1544CDBF8E5 -:103C3000080022680292029B22680392039A019371 -:103C40004FF47A74D21A04FB00F0904240F28D8057 -:103C50000C468846DBF81C00411C07D0C0B208F0B7 -:103C6000B5FC18B94FF001038BF82230454B1BB15E -:103C7000FDF7F6FF002878D04FF0FF3A5846FFF7DF -:103C800043FFDBF82C20DBF828309B1ADBF83020D0 -:103C9000B2F1FF3F18BF0133002B57DD5846FFF745 -:103CA00033FFDBF82820DBF82C309A422DD8DBF8E4 -:103CB00030305A1C1ABFCBF830A0DBB2FF2377B1EB -:103CC0007DB3012D14D1B9F1000F08D00D2B0FD009 -:103CD000009A012A0CDD013A09F8013B0092325D9D -:103CE0009A420AD03478E41AB4FA84F46409C5E735 -:103CF000325D9A424FF00205F4D10134335D002B5E -:103D0000BCD1012005B0BDE8F08F591CCBF82C10B8 -:103D10008A421B78D3D11C4ACBF82C20CBF8282020 -:103D2000CDE717F808209A4208D097F80080A8EB52 -:103D30000308B8FA88F84FEA5818D0E708F10108E4 -:103D400017F80850B5FA85F56D09C8E70C4B1A68E5 -:103D500003920399019BDBF808204FF47A70C91A8B -:103D600000FB02F29142FFF475AF002005B0BDE800 -:103D7000F08F00BFAD7D0100D17E0100C57D010047 -:103D80008C97FF1F611C00006C80010030B501237F -:103D900085B01A460D4618490446FFF74FFE174AEC -:103DA0000092174B022203A92046FFF707FF70B1CC -:103DB0009DF80C30303B092B02D9032005B030BDF3 -:103DC00003A80CF057F92860002005B030BDE06969 -:103DD000431C08D10B4B002BEFD0FDF741FFC0F186 -:103DE000040005B030BDC0B208F0F0FB0028F1D1EE -:103DF000012384F82230EDE7107E0100E07D010010 -:103E0000187E0100611C0000437D73B9037D01220F -:103E100010B50446427523B9FFF7B8FF0023637558 -:103E200010BD00230A20637510BD0920704700BF34 -:103E300030B5012389B01A460D4617490446FFF7ED -:103E4000FDFD164A0092164B182202A92046FFF7E4 -:103E5000B5FE50B19DF808000CF004F9003818BF09 -:103E600001202870002009B030BDE069431C07D153 -:103E70000C4B73B1FDF7F4FEC0F1040009B030BD86 -:103E8000C0B208F0A3FB0028F2D1012384F822304D -:103E9000EEE7032009B030BDC87D0100E07D0100E0 -:103EA000D47D0100611C00002DE9F0411D46012375 -:103EB00090B0884617462B491A460446FFF7BEFDC8 -:103EC000294B00932022294B0DEB02012046FFF7DE -:103ED00075FE70B3169B264E05930124179B06931F -:103EE000012C189B0495CDE90287079302AD31465A -:103EF0004FF0000010D00DF0BBFA30B30CF0BEF85C -:103F00002B68062C188010D00134012C05F1040513 -:103F100031464FF00000EED108A80DF0A9FAA0B18B -:103F20000CF0ACF82B681880EEE7002010B0BDE86C -:103F3000F081E069431C0CD10E4B33B1FDF790FECC -:103F4000C0F1040010B0BDE8F081032010B0BDE85E -:103F5000F081C0B208F03AFB0028EDD1012384F8CB -:103F60002230E9E7207E0100E07D01002C7E010087 -:103F7000387E0100611C00002DE9F04F9C4D0123AB -:103F80008DB08846924629461A460446FFF756FDEC -:103F9000002300951A4619462046FFF70FFE0290AF -:103FA000002800F00981934DDFF84C922B680593AF -:103FB000059E4FF47A774FF0010B2B680693069A13 -:103FC000A368921B07FB03F39A4215D2E369D8B2A8 -:103FD000013304D008F0FAFA08B984F822B0B9F134 -:103FE000000F03D0FDF73CFE00287BD0206803685B -:103FF0001B6998470128E0DD206803681B69984722 -:1040000001286BDD20687D4F03685B699847814616 -:10401000206803685B69984700EB09291FFA89F952 -:104020005B212046AFF3008017F8011B0029F8D16F -:1040300073494A4609A80CF0EBFE9DF8241039B1EB -:1040400009AF2046AFF3008017F8011F0029F8D10F -:1040500020465D21AFF3008000274346DFF898B18A -:104060000397A0461C464F4543D2D8F81C00431C7A -:1040700007D0C0B208F0AAFA18B94FF0010388F8C7 -:104080002230BBF1000F02D0FDF7EAFD50B3D8F8A3 -:10409000000003681B699847A0B1D8F800000368C6 -:1040A00001375B699847BFB264B1BAF1000F09D01C -:1040B000DAF80030D3B104F8010BDAF80030013B34 -:1040C000CAF800302B6807930799D8F808304FF4E6 -:1040D0007A70891B00FB03F39942C4D307200DB00B -:1040E000BDE8F08F04200DB0BDE8F08F029B039374 -:1040F000E8E74446DFF800814FF47A774FF0010B90 -:104100002B680893089AA368921B07FB03F39A4253 -:1041100015D2E369D8B2013304D008F057FA08B9D0 -:1041200084F822B0B8F1000F03D0FDF799FD002804 -:10413000D8D0206803681B6998470128E0DD206813 -:1041400003681B6998470128C8DD20682D4D036866 -:104150005B6998470646206803685B69984700EBEF -:104160000626B6B25B212046AFF3008015F8011B8E -:104170000029F8D12249324609A80CF049FE9DF8E1 -:10418000241039B109AD2046AFF3008015F8011FA6 -:104190000029F8D15D212046AFF30080BAF1000F6D -:1041A00001D0CAF80090184A009200231A46194616 -:1041B0002046FFF703FDC0B9E069421C08D10E4B51 -:1041C0007BB1FDF74DFDC0F104000DB0BDE8F08FEF -:1041D000C0B208F0FBF90028F1D1012384F82230A5 -:1041E000EDE703200DB0BDE8F08F039BD8007AE720 -:1041F000547E01008C97FF1F611C00003D7E010072 -:10420000907D01004D7E0100E07D01002DE9F04F21 -:10421000BA4D0E468FB0044690461F46692120468F -:10422000AFF3008015F8011B0029F8D1237D002B86 -:1042300040F05D81B8F1000F00F0A580002F00F084 -:10424000A280B7F5AA7F00F24C810B460122AC494F -:104250002046FFF7F3FBAB493A460BA80CF0D8FD1C -:104260009DF82C1039B10BAD2046AFF3008015F846 -:10427000011F0029F8D13946206807F091FBA249B7 -:10428000012300222046FFF7D9FBA04B0093002317 -:104290001A4619462046FFF791FC002863D07B1E82 -:1042A00008F1FF3500269844206815F8011F0368BF -:1042B0001B6898472B78454533449EB2F4D15B2167 -:1042C0002046AFF300808F493A460BA80CF0A0FDC2 -:1042D0009DF82C100BAD31B12046AFF3008015F8DE -:1042E000011F0029F8D18A4D20212046AFF300801C -:1042F00015F8011B0029F8D1864D43212046AFF364 -:10430000008015F8011B0029F8D17E4932460BA820 -:104310000CF07EFD9DF82C1039B10BAD2046AFF3AB -:10432000008015F8011F0029F8D17B4F0D25294683 -:104330002046AFF3008017F8015B002DF7D120680D -:104340000368310A1B68984720680368F1B21B684C -:104350009847724B00932B461A4619462046FFF7A2 -:104360002DFC002842D1E069421C40F0E3806C4BF8 -:10437000002B00F0E980FDF773FCC0F1040A504601 -:104380000FB0BDE8F08F002E00F0E4800D21304624 -:104390000CF062FF08B10023037030460DF070FD91 -:1043A000B0F5AA7F00F29D8001231A465D492046A0 -:1043B000FFF744FB554A009200231A46194620464F -:1043C000FFF7FCFB0028CED031462046FFF76CFB00 -:1043D0004D492046FFF768FB504A009200231A46D9 -:1043E00019462046FFF7EAFB0028BCD04E4EE36892 -:1043F00032680992099F32680A920A9A4FF47A71D8 -:10440000D21B01FB03F39A4280F0D880DFF8F490CE -:104410004FF00108002594F820308DF81780002B0C -:1044200040F0A2800DF1220108AA0DF11E030291B5 -:10443000019200930DF11A0207AB06A92046ADF8D0 -:104440001850ADF81A50ADF81C50ADF81E50ADF82C -:104450002050ADF82250FFF727FD8246002842D1B8 -:10446000DFF8C8B053212046AFF300801BF8011BD2 -:104470000029F8D14946BDF818200BA80CF0C8FC5B -:104480009DF82C1041B10DF12C0B2046AFF30080AC -:104490001BF8011F0029F8D1DFF87CB00D21204660 -:1044A000AFF300801BF8011B0029F8D1BDF81830CC -:1044B000042B40F2A280102B00F28C804FF4A83223 -:1044C00022FA03F3DB0740F18580194D5321204682 -:1044D000AFF3008015F8011B0029F8D14FF0060A50 -:1044E00001E04FF00D0A50460FB0BDE8F08F4FF0DD -:1044F0000A0A50460FB0BDE8F08F00BF617E010090 -:10450000287F0100907D01004C800100347F010074 -:10451000797E0100817E0100D17E01003C7F010097 -:10452000611C0000547F01008C97FF1F8D7E0100ED -:10453000C57E0100C0B208F049F800287FF417AF2B -:10454000012384F8223012E74FF0030A50460FB0DF -:10455000BDE8F08F01231A463D492046FFF76EFA69 -:104560003C4B009333463AE70DF1170120468DF896 -:104570001750FFF75DFC82460028B4D19DF8173034 -:10458000002B7FF44FAFDFF8D0A057212046AFF3C8 -:1045900000801AF8011B0029F8D10A212046FFF7F4 -:1045A000D5F938B333680A930A9AE3684FF47A71FD -:1045B000D21B01FB03F39A42FFF42DAF274D532189 -:1045C0002046AFF3008015F8011B0029F8D14FF009 -:1045D000070A88E7DFF888A057212046AFF300805C -:1045E0001AF8011B0029F8D161682046FFF7AEF9DF -:1045F0000028D7D14FF0040A75E71A4D5321204601 -:10460000AFF3008015F8011B0029F8D1BDF81C306C -:10461000BDF822202261012B11D1189B7BB1124DD4 -:1046200049212046AFF3008015F8011B0029F8D17D -:10463000DDE918122046FFF79FFC824653E7199BDD -:10464000002B3FF450AF199A002313604BE700BFD3 -:10465000487F0100E07D0100F57E0100157F01002B -:10466000D57E01009D7E0100B17E010030B5457D03 -:1046700083B05DB9012343752A46019500952B4609 -:104680000446FFF7C3FD657503B030BD092003B0D4 -:1046900030BD00BF30B5457D83B05DB9CDE90023A5 -:1046A00001222B4642752A460446FFF7AFFD657589 -:1046B00003B030BD092003B030BD00BF2DE9F04F7D -:1046C000044680690023411C8DB0237500F00F81E2 -:1046D0000121C0B2A44D07F087FF50212046AFF35F -:1046E000008015F8011B0029F8D1A04D207E012182 -:1046F00007F046FF2B680693069B63622B680393C3 -:10470000039E9B4F4FF001082B680293029B9B1B5B -:10471000B3F5FA7F12D2E369D8B2013304D007F0BF -:1047200055FF08B984F82280002FEDD0FDF798FAE4 -:104730000028E9D104200DB0BDE8F08F2B68059367 -:10474000DDF814A0DFF82C92DFF82C828B4F2E6856 -:104750000496DDF810C0864EACEB0A0C0123CC4564 -:104760001A464146204600F2DB80FFF767F9002336 -:104770001A46194600972046FFF720FAE369834658 -:10478000D8B2013305D007F021FF10B9012384F816 -:1047900022301EB1FDF764FA0028CBD0BBF1000F28 -:1047A000D5D0774A07CA09AB83E807001D460DF14B -:1047B000300801231A4655F8041B2046FFF73EF93E -:1047C000002300971A4619462046FFF7F7F90028FC -:1047D00000F08F80A845ECD16A4D52212046AFF3FE -:1047E000008015F8011B0029F8D194F82130002B26 -:1047F00000F08C80DFF89081202529462046AFF319 -:10480000008018F8015B002DF7D194F821105F4A61 -:104810005F4B002914BF1146194601231A46204652 -:10482000FFF70CF900972B462A4629462046FFF74A -:10483000C5F900285DD001231A4656492046FFF7E6 -:10484000FDF8554B0097082207A92046FFF7B6F957 -:10485000002800F0B180514D46212046AFF3008082 -:1048600015F8011B0029F8D19DF81C1007AD31B1D6 -:104870002046AFF3008015F8011F0029F8D1484DFC -:104880000D212046AFF3008015F8011B0029F8D157 -:104890009DF81C30542B54D0424D4D212046AFF38F -:1048A000008015F8011B0029F8D194F8203043B995 -:1048B0003D4D20212046AFF3008015F8011B002953 -:1048C000F8D13A4D20212046AFF3008015F8011BA6 -:1048D0000029F8D1364D49212046AFF3008015F864 -:1048E000011B0029F8D108460DB0BDE8F08F1F4D1F -:1048F00004E7E069421C03D0C0B207F067FEE0B1F4 -:10490000CEB1FDF7ADF9C0F1040014E7264D20212A -:104910002046AFF3008015F8011B0029F8D169E7A4 -:10492000244D4E212046AFF3008015F8011B0029CD -:10493000F8D10520FFE60320FDE6012384F82230AC -:10494000DEE79DF81D30412BA6D10A220DF11E0095 -:104950000CF002FA43F2C82398428CBF00230123D3 -:1049600084F8203098E700BF5D7D01008C97FF1F21 -:10497000611C00007FA903002C800100E07D010084 -:1049800060800100797F0100917F01009C7F010020 -:10499000AC7F0100E87D0100F47D0100D57F0100BE -:1049A000D17E0100ED7F0100897F010001800100BF -:1049B00011800100617F0100E069431C06D0C0B294 -:1049C00007F004FE10B9012384F822300EB1FDF780 -:1049D00047F9064D55212046AFF3008015F8011B1D -:1049E0000029F8D1012384F8203055E7BD7F01006C -:1049F00030B5437D83B013BB0123134D437504468B -:104A000043212046AFF3008015F8011B0029F8D19F -:104A1000237D43B96175012520460021FEF7C6FFBD -:104A2000284603B030BD20460191FFF747FE0199AB -:104A3000617505460028EFD1284603B030BD092531 -:104A4000284603B030BD00BF31800100704700BF71 -:104A500030B583B005460C4607F02EFD1C4B98423E -:104A600004D800232B80238003B030BD694606F0B4 -:104A7000C1FF9DF806309DF805109DF80420503BBD -:104A80009BB27F2B05D80131C9B20C2901D81F2A4E -:104A900011D900239DF802202B80172A9DF80130A0 -:104AA0009DF8001003D83B2B01D83B2909D90023DE -:104AB000238003B030BD42EA411242EA43239BB255 -:104AC000E8E75B0143EAC22343EA51039BB2EFE705 -:104AD000FFA5CE12F0B5012B95B0054638D0022BBC -:104AE00040F202200CBF034600230431684604F064 -:104AF0001FFE129B002B34D05C2007F0EDFA1F4BF9 -:104B00000026C0E90036019BC3601D4B8360029BF9 -:104B1000036104AF9DF80C30037504463946183024 -:104B200004F0BCFC174BA3604FF47A73AB6063686E -:104B3000154AA66501336E602A602E732C6163608E -:104B4000124B0093384604F0D7FC284615B0F0BD50 -:104B500044F202230431684604F0EAFD129B002B64 -:104B6000CAD1139B002BC7D1074A6B604FF47A71EF -:104B7000A9602B732A602B6104AFE1E7647B01001D -:104B8000CC7A0100147B0100387B0100F07A01002F -:104B900010B5D0F884448EB00A4644B100232146B3 -:104BA0006846009302F0D4FC80B90EB010BDD0F876 -:104BB000881441B1234668460C9400F08FFE50B92A -:104BC00000200EB010BD08460EB010BD684602F0C1 -:104BD000D1FE0EB010BD684600F03EFF0028EFD0B9 -:104BE000E3E700BF70B5D0F884548EB016465DB1CF -:104BF00005F5896500230A4668462946009302F0B8 -:104C000029FC90B90EB070BDD0F888040028F9D006 -:104C100000F589640A462B46214668460C9500F04B -:104C2000F5FD48B900200EB070BD324629466846F1 -:104C300002F0E4FD0EB070BD32462146684601F038 -:104C40005DF80028EED0DDE710B5D0F884448EB0D2 -:104C50000A464CB10020009001232146684602F02C -:104C600077FC80B90EB010BDD0F8881441B1012393 -:104C700068460C9400F032FE50B900200EB010BD12 -:104C800008460EB010BD684603F00AFD0EB010BD18 -:104C9000684600F087FE0028EFD0E3E730B5D0F893 -:104CA00084448FB00A464CB10025012304F5896184 -:104CB0006846009502F05AFB0FB030BDD0F888046A -:104CC0000028F9D000F58961012368460C9401F0B1 -:104CD00083F80FB030BD00BF10B5D0F884448EB05B -:104CE0000A463CB1002321466846009302F030FC9E -:104CF0000EB010BDD0F8881431B1234668460C942C -:104D000000F0ECFD0EB010BD08460EB010BD00BFA7 -:104D100070B5054690F8C00408B9014670BDD5F8D5 -:104D20008404002838D0C469D5F89034013C1BB302 -:104D30001A7E0ABB0121184605F016FB88B1D5F88A -:104D4000840400283ED1D5F8880408B102F0D4F8D4 -:104D50000646D5F8900420B1002105F005FB00B10E -:104D6000A41BD5F8843473B19B794FF4007199403A -:104D700089B2A1FB040170BD04F042FAD5F8843475 -:104D8000241A002BF0D1D5F888040028C5D0D0F81B -:104D90003C14A4FB010170BDD5F88804D5F890340B -:104DA00050B1D0F8304423B11A7E002AC2D0002876 -:104DB000B3D002F0A1F8E1E70BB10446F4E71846DE -:104DC0000146ABE704F01CFA0646C2E72DE9F043C2 -:104DD000D0F890548DB04DB198462B680446DB69ED -:104DE00028469847B0F5405F064604D8002630466E -:104DF0000DB0BDE8F0834FF400700BF059F9074691 -:104E00000028F3D00DF10409B6F1806F0246434645 -:104E10002946484616D901F053FB064638460BF0A2 -:104E20004FF9002EE2D02B6828461B6A984794F869 -:104E3000B034FF2B0AD100233046C4F890340DB0B3 -:104E4000BDE8F08303F040FF0646E7E7D4F8B4344A -:104E5000B4F8B0240293D4F8B834ADF80420039326 -:104E600004F2944599E80E00284605F069FA94F892 -:104E7000A134C4F89054002BB9D101231A46294615 -:104E8000201D04F0E1FBB2E790F8C03463B1D0F824 -:104E9000843463B19A79D9694FF40070904080B23C -:104EA0000139A0FB01017047184601467047D0F850 -:104EB00088040028F9D0D0F83C14D0F83004A1FBC5 -:104EC0000001704770B5D0F8903484B00446ABB19F -:104ED00090F8C05490F8C2045DB1212820D807F0A2 -:104EE00075FB051E18BF0125284684F8C05404B080 -:104EF00070BD212808D807F069FB28B9002528468D -:104F000084F8C05404B070BD94F8B034FF2B12D1B3 -:104F100000232846C4F8903484F8C05404B070BD0F -:104F20006A460A21184604F0ADFE0546284684F874 -:104F3000C05404B070BDD4F8B424D4F8B834B4F874 -:104F4000B0140293ADF80010019204F294466B463F -:104F50000ECB304605F0F4F994F8A134C4F890640F -:104F6000002BCCD101231A463146201D04F06CFBE6 -:104F70000546C4E7F0B50D46044685B0194805F06E -:104F800031FB212D84F8C15402D9002005B0F0BDB9 -:104F90000026154B02938DF804508DF8056003969A -:104FA00004F29447C4F8B43404AB13E90E0084F857 -:104FB000B05484F8B164C4F8B864384605F0C0F958 -:104FC00094F8A134C4F8907423B1304684F8C00436 -:104FD00005B0F0BD01231A463946201D04F034FB0C -:104FE000F4E700BF514A000040787D0110B5144835 -:104FF000144C1549154A04604FF0290C002380F821 -:10500000A1C44FF47F4E4FF0FF0C80F8A53480F818 -:10501000BC34A0F8C0E480F8C2C4C0F89C14C0F846 -:105020009424BDE810400A4A0A49C0F88434C0F804 -:105030008834C0F8903480F8AC340AF019B800BF56 -:10504000A092FF1F808001000110013874810100CF -:105050002087FF1F4D4A000070B500F124038C46E5 -:105060000546164693E8070084B001AC84E80700C3 -:10507000286A4FEA4C12214601F05EFE012806D153 -:10508000286A3246214601F03BFE04B070BD002084 -:1050900004B070BD10B5044600F0A8FD002384F8EC -:1050A000313084F8333010BD38B513460D46002238 -:1050B00000F12401006A1C4601F022FE20B1438960 -:1050C0002B8003892380012038BD00BF38B51346EB -:1050D0000D46002200F12401006A1C4601F010FE7A -:1050E00020B1C3892B8083892380012038BD00BF74 -:1050F00038B590F831300BB1002038BD04460D466C -:10510000382219460CF036F80120402384F831305B -:1051100084F83300256238BD70B40C78202C0D461D -:10512000114603D115F8014F202CFBD00D608D6086 -:105130002C783CB3214E0CE0A4F1220C5FFA8CFCDD -:1051400026FA0CFC1CF0010F10D12E2C16D12C7855 -:10515000C4B12F2C24D03C2C05F1010509D8212CF9 -:10516000EAD804F1FF3CBCF11E0F15D8002070BC3A -:1051700070475C2CFAD009D97C2CF7D08D602C7844 -:10518000002CE6D11D6070BC01F0A4BC3E3C012C9B -:10519000F4D8002070BC7047202CD8D08D60EEE78A -:1051A0002C46254614F801CBBCF1200FF9D0BCF1F8 -:1051B0002F0FF6D01D6070BC01F08CBC01210005E2 -:1051C0002DE9F04790F83330DC0782B005466DD505 -:1051D00058060F46904640F1B580D5E90023D5E941 -:1051E000041018EB020443F10003A14270EB030327 -:1051F000C0F0AE80B8F1000F54D0D5E90032464679 -:10520000D5F82090D9F838441C40C4F3080A002C83 -:1052100057D1134377D195F831305A064CBFD9F89E -:105220003414E969A96199F84534D9F82C24023974 -:1052300099401144B6F5007F50D3D9F81C228A4218 -:105240004CD0B6F5806F65D34FF0010A0AFA03FA25 -:10525000AAEB040A730A9A4528BF9A468A424FEA83 -:105260004A240AD30AEB01039A4206D209F50470D4 -:10527000019105F05DF90199C0B1D9F81402D0F897 -:1052800000C05346DCF814903A46C84770B1234634 -:10529000D5E900125B1842F10002361BC5E9003265 -:1052A0002744ADD1404602B0BDE8F08795F83230D2 -:1052B0004FF0FF3043F0020385F8323002B0BDE812 -:1052C000F087AA6999F84534D9F82C04911E9940C1 -:1052D000640A01442144BAF1000FABD0CAF500744E -:1052E000B4424FF0000209F5047028BF344605F0BF -:1052F00047F90028DAD000EB0A012246384606F0CA -:105300009BFD2346C4E795F83330A9695B060DD5AC -:10531000013187E7D9F8140203683A461B699847B8 -:105320000028C3D04FF400731C46B1E705F1180202 -:10533000484601F043FD0028B8DB0CD0A969D5F838 -:10534000209070E795F8313019077FF553AF44E7A7 -:10535000A1EB02084EE795F8313013F0500FA5D0BD -:10536000A8EB060840469EE7F0B583B001220DF198 -:1053700007010446D0E900678569FFF721FF01288E -:1053800008BF9DF80700A56118BF4FF0FF30C4E9C2 -:10539000006703B0F0BD00BF2DE9F84F90F8311061 -:1053A000D0F818800446002950D01646D0E9002CC9 -:1053B0009C4508BFB2421F4658D056EA07034AD060 -:1053C000080704D5D4E90403B042BB413ED3D4F866 -:1053D000209099F845340933751EDBB247F1FF3A46 -:1053E000C3F120000AFA00FBDD40A3F1200E2AFAE7 -:1053F0000EFA45EA0B0545EA0A0594F833A01AF0BF -:10540000400F2FD112F1FF3A2AFA03F34CF1FF3A81 -:105410000AFA00F003432AFA0EFA43EA0A039D420D -:1054200002D352EA0C0C24D14B064CBFD9F83434C9 -:10543000E369A36104F118094A4675B1A169206ABC -:1054400001F0BCFC002805F1FF35F5DCC4F818803C -:105450000020BDE8F88F00238361C4E900670120C4 -:10546000BDE8F88FE3692B44A361F6E70120BDE8AE -:10547000F88FED1ADEE700BF2DE9F04F064690F8F1 -:1054800031008FB0002840F0D880174691F83120C5 -:1054900012F0500F8B4600F0D08003F00302032A75 -:1054A0009A4600F0CA80013203F0080142EA010383 -:1054B0000293002F00F0CA803A6902F10E08A84A50 -:1054C000A2FB0828DBE900214FEAD80808F102080E -:1054D0000A435FFA88F805D0CBF8180000210020B5 -:1054E000CBE90001029B002443F0400325460393CF -:1054F000202206A95846FFF763FE00B3202840F09B -:105500009C809DF918209DF81830002AC0F2A180D7 -:1055100034B9DBF80020A2F12009DBF81820019251 -:1055200044453CBF0134E4B2002B00F0128120223C -:1055300006A958460025FFF743FE0028DED11AF4DD -:10554000007F7AD0029B9B0777D5002F75D044450A -:1055500017D2DDF804A0202206A95846FFF730FE36 -:10556000631C002861D0202867D12CB9DBF800200B -:10557000DBF818A0A2F12009DCB2A045EBD8CDF8E9 -:1055800004A03822002130469BF833400BF0F2FD96 -:10559000DBF820303362019B7362082386F83130D8 -:1055A0003B68C6F82890C4F38014002586F82C4088 -:1055B0007B60BD81B8F1000F32D008F1FF39DFF810 -:1055C000A4A15FFA89F9AB46012259463046FFF79C -:1055D00043FD044688B390F90020002A2DDB2022E9 -:1055E00000210BF0C7FD002D00F0BE80BBF1010FC4 -:1055F00000F0D480C1232370A3461E34BB893846F3 -:105600001BB97A68BB689A4205D004F0F7FF2BF803 -:10561000020FA345F2D101355FFA85FBD845D3D8F7 -:10562000304600F0E3FA05460CE05846DBF8185027 -:1056300000F00CFB002840F09080002586F83150E7 -:1056400086F8335028460FB0BDE8F08F4FF00308BE -:1056500048E755BB444538BF0024852B7FF448AF4D -:105660002946382230460BF085FD9DF81C209DF818 -:10567000193086F8303002F03703D20658BF43F0B5 -:10568000080386F83130DBF80030DBF82020326286 -:10569000203BDBF818207262B3629BF83330C3F30F -:1056A000801386F82C30012522E7C02B28D0C12B8F -:1056B0007FF43DAF3A4606A9304601F081F9E8B1E2 -:1056C000BB89DBB9BA687B689A4217D11AF4006FBC -:1056D000B3D11AF4884F6FD196F833309C076BD44E -:1056E0001AF4806FA9D11AF4804FABD0D6E9042305 -:1056F0003046FFF751FE0028A4D19EE70546F7E6A5 -:10570000029B86F833309DF819309B0744BF039BFA -:1057100086F833300B9BF361DDE90823C6E90423E7 -:10572000DDE90C23C6E90223002FCFD04FF00003A0 -:105730003A69BB819DF81B30396879609A427FF4E1 -:10574000F6AEBD8ABDF81C30ED1AB5FA85F56D09C7 -:10575000CEE6002F7FF4F3AE6FE7CBF818500CE7DE -:10576000898888887097FF1F8523237086F830907A -:1057700084F80190DAF80030002B41D00DF11302CB -:105780000DF1160105A89847BDF814306381BDF8E6 -:10579000163023819DF8133023753CE7C023237016 -:1057A000029B84F801B063F07F0386F833303B69D5 -:1057B000E370BB8AA3802EE796F83130D8063FF518 -:1057C0003CAF13F001027FF438AF1AF4806F8AD037 -:1057D00096F8331089077FF530AF002B3FF42DAFDB -:1057E000D6E900310B4304D000200021C6E90001B6 -:1057F000B261304600F0F2FB00283FF41EAF21E713 -:1058000045F621236381E381638204E72DE9F043B8 -:10581000044697B0994694F83130019200201490D4 -:10582000ADF814006BBB91F8313013F0500F0E46F9 -:1058300027D013782F2B154627D04FF0000813E000 -:10584000019D2F78A7B3FFF717FE064634222146A5 -:1058500008A8B6B106F0F0FA204600F0C7F908AE85 -:1058600084F8318084F83380294601AB02AA2046AF -:10587000FFF752FC0546002302AA31462046002DC0 -:10588000DED1002017B0BDE8F08315F8011F2F29E5 -:10589000FBD0019599B938222046356A0BF06AFC95 -:1058A0000120402384F83130256284F83300E9E791 -:1058B0004B4602AAFFF7E0FD17B0BDE8F08338229F -:1058C000002108A8366A0BF055FC01238DF85330EF -:1058D000402310968DF8513008AEAEE719B101F5AE -:1058E0008961FFF793BF0846704700BF90F83130D9 -:1058F00063B991F8313013F0500F07D00B6813F0F3 -:105900001F0C03D113466246FFF7B6BD0020704757 -:105910008169F8B50446006A01B10131012201F044 -:105920000FF90128054632D9012301461A46206A9B -:1059300001F066F9064650B3A3695BB394F83320CF -:10594000510612D5591CA94218D022F04002E16933 -:1059500084F8332005E0206A01F050FAB8B1A36959 -:1059600039464F1C99423A46F5D3206A4FF0FF3230 -:10597000294601F043FA50B1A16911B9A561304639 -:10598000F8BD206A2A4601F039FA0028F6D100262F -:105990003046F8BD94F8333043F0400384F8333098 -:1059A000ECE700BF90F833309A0736D5C16970B57F -:1059B0000546A1B90024214607E0037803F07F03E0 -:1059C000037095F830308B4229D301222846FFF727 -:1059D00043FB0134E1B20028EFD1002070BD5B062B -:1059E000006A34D5D5E9022490F845340933013AE8 -:1059F000DBB244F1FF34C3F1200CDA4004FA0CFCB2 -:105A0000203B24FA03F342EA0C021A43013200233A -:105A100001F0F6F80028CDD1DFE7002070472C6AAE -:105A2000002385F8313085F83330204604F080FDBE -:105A30000028D2D004F5047004F07AFD0028CCD000 -:105A4000D4F840040368BDE870401B6A184701F0B1 -:105A5000F5F90028AED1C0E790F83130DB0601D46B -:105A60000020704710B5002288B000230446FFF7DD -:105A700093FC08E020281BD19DF900309DF8002000 -:105A8000002B15DB32B1202269462046FFF798FB38 -:105A90000028EFD194F83330082243F0020384F851 -:105AA000312084F833302046FFF77CFF08B010BD6A -:105AB000002008B010BD00BF2DE9F0414FF00008F4 -:105AC000494F82B006464446414600223046FFF721 -:105AD000C3FA054630B10078C02867D0C1282BD062 -:105AE000852809D096F8323043F00103002086F86B -:105AF000323002B0BDE8F08196F8313003F0370360 -:105B0000AB803B6883B10DF103020DF1060101A8E2 -:105B10009847BDF80630AB812B82BDF80430EB818D -:105B20006B829DF803306B75326A92F8103243F045 -:105B3000010382F8103228780146002202E01F2A71 -:105B40000FD8A95CE30343EA540311FA83F3012A53 -:105B50009CB202F10102F2D1852814BF0222042274 -:105B6000EFE796F8303008F101085FFA88F18B42D0 -:105B7000ABD2306A012206F1240101F0C1F80028FD -:105B8000B0D0356A4480284604F0D2FC0028A9D061 -:105B900005F5047004F0CCFC0028A3D0D5F840042F -:105BA00003681B6A98470028A3D19BE796F8333017 -:105BB00013F0400F6B7814BF43F0020303F0FD03B2 -:105BC0006B70D6E90423F069316A6861C5E9022384 -:105BD000D6E90223C5E9062391F8103243F0010308 -:105BE00081F810322878A7E77097FF1F38B590F832 -:105BF000313043B390F9332090F83330002A044613 -:105C00000CDB056A284604F093FC78B994F832302E -:105C100043F0010384F83230002038BD03F07F03E5 -:105C200080F83330BDE83840FFF746BF05F5047013 -:105C300004F07EFC0028E9D0D5F8400403681B6A14 -:105C400098470028E2D0012038BD00BF70B590F819 -:105C500031305A0605464CD480682B6AD3F83C3460 -:105C60001844B0F1806F01D3002070BD2846FFF7C3 -:105C70004FFE0028F8D0286AAE6990F84524D0F885 -:105C80002C34023E96401E4400243119052200F5B2 -:105C9000047004F075FC01344FF4007200210028F8 -:105CA000E2D00BF067FA286A90F84524012393406C -:105CB0009C42EAD395F831305B0615D495F8333021 -:105CC000AA6863F07F0385F83330D0F83C142B6961 -:105CD000E8685218AA606A6940F100005B1842F156 -:105CE0000002C5E90432E8602846BDE87040FFF7CD -:105CF0007DBF006A01F0A6F9AFE700BF30B50446EA -:105D000090F831009DB0002510F0180F0C951A95F1 -:105D100003D00B6A206A984202D000201DB030BD2B -:105D200040F601236846FFF771FD0028F5D03422C4 -:105D300021460EA806F080F809AA07CA04F1240338 -:105D400083E8070094F833309DF830C084F830C001 -:105D500063F07F03204684F83330FFF747FF0028C5 -:105D6000DBD0022208230EA815958DF86B208DF844 -:105D70006930FFF717FED1E738B591F8313013F0ED -:105D8000500F02D10025284638BD40F602230446B4 -:105D9000FFF772FB0028F5D0102384F8313020463D -:105DA000FFF754FF05460028ECD0A369E361002209 -:105DB00000232046FFF7F0FA94F83130C12284F82E -:105DC0003320002BDFD0412384F833302046BDE858 -:105DD0003840FFF771BE00BFF0B5044697B01F46CC -:105DE00094F8313001920020ADF8140014907BBB80 -:105DF00091F8313013F0500F0D4629D013782F2B26 -:105E0000114619D127E0019E3678002E31D0FFF7D8 -:105E100033FB034602AA294620461BB9C7B1FFF748 -:105E2000ABFFA8B12146342208A806F005F82046A9 -:105E3000FFF730F9019908AD01AB02AA2046FFF740 -:105E40006BF90646002302AA29462046002EDAD125 -:105E5000002017B0F0BD013101910B782F2BFAD043 -:105E6000296A08A8FFF744F90028F1D0019908AD84 -:105E7000E2E702AAFFF780FF17B0F0BD2DE9F04F6F -:105E800090F8314083B024079DF830709DF834902D -:105E90009DF838A09DF83C8057D5A2F2BC7294B210 -:105EA0007F2C52D85A1E0B2A01934ED87A1E1E2AD6 -:105EB0004BD8B9F1170F48D8BAF13B0F45D8B8F114 -:105EC0003B0F42D805460E46FFF790FE00283CD017 -:105ED000019B47EA431747EA44244FEA580747EA39 -:105EE0004A1747EAC9274FF0000A18F00108A4B280 -:105EF000BFB218BF4FF06408D346514606F00109FF -:105F000000222846FFF7A8F8F8B10178852946D085 -:105F100001F14003DBB2012B17D88C46002203E0CD -:105F20001F2A16D810F802C04FEACB3343EA5B03AE -:105F30001CFA83F3012A1FFA83FB02F10102EFD15D -:105F4000852914BF02220422ECE7002003B0BDE83B -:105F5000F08F95F830300AF1010A5FFA8AF18B422E -:105F6000CED2286A012205F1240100F0C9FE0028E2 -:105F7000EBD02C6AA0F802B0204604F0D9FA002831 -:105F8000E3D004F5047004F0D3FA0028DDD0D4F88F -:105F9000400403681B6A03B0BDE8F04F184795F84A -:105FA00031302A6A03F03703838092F8103243F0CD -:105FB000010382F81032B9F1000F01D00782448248 -:105FC000B20703D580F814800781448173070178F4 -:105FD00042BF80F815808781C4819EE790F83330F6 -:105FE0009A0764D570B5C56982B00446002D35D0D6 -:105FF00013F0400635D0006AA26890F845C4E16805 -:106000000CF1090C5FFA8CFC013A41F1FF31CCF143 -:10601000200E22FA0CF201FA0EFEACF1200C21FA4D -:106020000CFC42EA0E02A16942EA0C02013221B3E1 -:10603000013D6D1A01312A440191002A2ED1D4E983 -:10604000000163F07F03C4E90201C4E9040184F89C -:1060500033302046FFF7CAFD02B070BD012002B008 -:1060600070BD816961B90195C161206A294600F05E -:10607000E5FEC8B194F83330E1E70195E161DCE772 -:10608000006A019601AA00F099FE00280CDB10D1ED -:10609000019D002DE9D194F83330D0E70199002318 -:1060A00000F0AEFD0028E5D1002002B070BD002058 -:1060B0007047A169206A4FF0FF3200F09FFE002870 -:1060C000E6D1F1E72DE9F84390F833309D07044617 -:1060D00040F1A28017461A070E4600F19680002F65 -:1060E00000F0288123683D46206AA169D0F8382451 -:1060F00002EA0309C9F30808B9F1000F40F09580DE -:10610000002900F0D58094F833305B0640F1ED8033 -:10611000D4E9023290F845C40CF1090C013B5FFA56 -:106120008CFC42F1FF32CCF1200E23FA0CF302FA80 -:106130000EFEACF1200C22FA0CFC43EA0E03E269DD -:1061400043EA0C031344994280F0D6800131A161E7 -:1061500090F84524D0F82C34023991401944B5F513 -:10616000007FC0F08D80B5F5806FC0F0A78001235F -:106170009340A3EB09036A0A934228BF1346D0F861 -:106180001C228A424FEA43290AD303EB010C6245E1 -:1061900006D2002280F810224FF0FF32C0F81C22F5 -:1061A000D0F814020268D2F828803246C04798B36B -:1061B0004B46D4E900125B182169606942F1000284 -:1061C00099429041C4E900324E44A5EB090507D23B -:1061D00094F83310236161F07F0184F83310626119 -:1061E000002D81D1D4E9020198429141C0F09580FF -:1061F000524B1B68002B00F09B8094F8333063F007 -:106200007F03384684F833300DE0D0E90423FFF7EC -:10621000C3F800287FF463AF94F8323043F00103F1 -:10622000002084F83230BDE8F88390F84524D0F897 -:106230002C3402394FEA5929914049441944B8F1A4 -:10624000000F8CD0C8F50079A9454FF0010200F588 -:10625000047028BFA94604F093F90028DCD040441C -:106260004A463146C84405F0E7FDB8F5007F206A8C -:106270009ED100F5047004F05BF9002898D1CBE7BB -:106280002268D4F810C063696245626872EB030348 -:1062900012D2012200F5047004F072F90028BBD07C -:1062A0002A463146404405F0C7FDA9462B4680E703 -:1062B000E16949B3A1614BE70522EBE7D0F81C3255 -:1062C0008B4206D1002380F810324FF0FF33C0F824 -:1062D0001C32D0F81402036832465B6A98470028E3 -:1062E0009AD04FF40073994663E704F1180200F066 -:1062F00065FD002890DB04D12046FFF709FB00284C -:106300008AD0A169206A23E72046FFF701FB002815 -:1063100082D0A169206AE1611AE794F83310A36082 -:1063200061F07F0384F83330E2603846BDE8F883DB -:10633000384678E7D4E9003254E700BF7097FF1F72 -:1063400069B170B5054608460C460BF099FD2B68FF -:106350000246214628465B68BDE8704018477047F2 -:106360008368C3F30803014663B100200A69D0546F -:106370000133B3F5007FF9D1C8680A690368096879 -:106380005B6A18470120704782680346C2F308021F -:1063900000698154586801EB70019868596040F2B7 -:1063A000FF1C01306245986001D001207047D86819 -:1063B000196810B40468646A4A1C1A601A69234692 -:1063C00010BC184738B583680446C3F30803006956 -:1063D000CAB2C2540D46616802EB7102A1686260E4 -:1063E00040F2FF1201319342A16005D0290A2046F4 -:1063F000BDE83840FFF7C8BFE068216803684A1C61 -:106400005B6A2260226998470028EFD138BD00BF3F -:10641000F8B50025C0E9001506468560A8B204F06D -:10642000F7F9A842044607D0C1B23046FFF7ACFFE7 -:1064300000283BD10020F8BD6C1CB4F5803F04D18E -:106440002AE00134B4F5803F04D0A0B204F0E0F9B2 -:10645000A042F6D0671BB7F5007F1DD34FF6FF7142 -:106460003046FFF7AFFF0028E4D0B9B23046FFF75F -:10647000A9FF0028DED02546B5F5803FCED13046B5 -:10648000BDE8F840FFF76CBFC5F307213046FFF7C2 -:106490007BFF01350028CDD0A542E9B23046EBD2D2 -:1064A000FFF772FF0028EFD10020F8BDC4F30721E9 -:1064B0003046FFF769FF0028BCD00135DCE700BF9C -:1064C0002DE9F04F0F4689B0096804901546CA6956 -:1064D000C7600561384698469047B0F5801FC0F008 -:1064E000C0800646002301220133DBB2202B4FEA95 -:1064F000420200F0C1809642F6D81C2B00F2BC800C -:106500001A2B4FF0080A00F237824FF480430193B0 -:106510004FF4004303934FF4807307934FF40053F9 -:10652000CDF808A00693039B0298019CF31AC34080 -:1065300003FA00F94FF400720021284605930AF08F -:1065400019FEFF2385F8C43185F8C531072385F886 -:10655000C231A144FE230194C5F8C641012485F847 -:10656000BF4185F8C04185F8C3313B68C5F8CA9181 -:106570004AF6552B5B6AA5F8FEB12A46002138463B -:10658000984700285ED04FF40072002128460AF098 -:10659000F1FD019B2B64AB65059BEB6520232B7202 -:1065A0006B72AB72EB232B7076236B709023AB7006 -:1065B0004523EB7058232B7146236B714123AB713C -:1065C0005423EB7104232B664FF48073A5F86830D5 -:1065D0000923069A85F86C3080236E662A656A6501 -:1065E000C5F848904FF4C37285F86DA085F86E40E9 -:1065F00085F86F30F42105F178000AF0BBFD002624 -:10660000A5F8FEB16A1E00E00134A4F16B03012B72 -:10661000FAD9712CF8D0135DB4F5007F03EB760640 -:10662000F2D13B68DDF804905B6A2A464946384659 -:10663000984738B13B682A465B6A09F10C01384635 -:10664000984780BBB8F1000F06D0D8F80030B649A3 -:106650005B680F22404698470024204609B0BDE8F9 -:10666000F08FB8F1000FF7D0D8F80030AF495B6871 -:10667000152240469847E8E7A3F10B0A4FEA6A0162 -:1066800001228A400291CAF3470A079201335B1044 -:1066900001229A40069204229A400392022202FAB0 -:1066A00003F301933FE72246002128460AF062FDEA -:1066B0004AF65523A5F8FE3109F1010A09F1090B43 -:1066C000002305F2FF192C4601E014F8013FA14513 -:1066D00003EB7606F9D13B682A465B6A5146384699 -:1066E00098470028AED03B682A465B6A0AF10C0145 -:1066F000384698470028A5D00AF101039B4502D0EF -:106700009A462B78DFE74FF40072002128469B461B -:106710000AF030FD00220AF1030A11462B4601E07F -:1067200013F8011F9C4201EB7606F9D13B682A461B -:106730005B6A594638469847002883D03B682A460A -:106740005B6A0BF10C013846984700283FF47AAF9A -:106750000BF101018A4564D12B1F05F5FE7243F848 -:10676000046F9A42FBD13B682A465B6A38469847D9 -:1067700000283FF467AF3B680BF10D015B6A2A46C6 -:106780003846984700283FF45DAFB8F1000F06D0B7 -:10679000D8F8003066495B680C2240469847019B58 -:1067A000DDF81890DFF88CB19944059B4FF4007226 -:1067B000002128469E000AF0DDFC2846F82306F258 -:1067C000072600F8013B1322FF214FEA562A0AF060 -:1067D000D1FCB60B002402E00134A24524D0B4FB66 -:1067E000F6F306FB13434BB90122B8F1000F05D0B5 -:1067F000D8F8003059465B68404698473B6809EB3B -:1068000004015B6A2A463846984700283FF41AAFCD -:10681000002CE1D121464FF4007228460AF0AAFC70 -:10682000DAE78B46297879E7B8F1000F2BD0D8F852 -:10683000003041495B68022240469847059C079A10 -:106840000734E40804F2FF13B2EB532F4FEA532945 -:10685000FFF4FBAE4FF40072002128460AF08AFCD8 -:1068600007232B70002604E006B92E700136B145CF -:1068700016D9039A3B68B1185B6A2A46384698478E -:106880000028F1D1DEE6059C079A0734E40804F2FB -:10689000FF13B2EB532F4FEA5329FFF4DDAED9E7D4 -:1068A000B8F1000F77D0D8F8003024495B68162281 -:1068B00040469847039B079A04989918FFF7A8FD4C -:1068C00000283FF4C2AE029A4FF400739340049A3A -:1068D00092689A423FF6B9AE19494046FFF730FD3B -:1068E000029B4FF0020909FA03F6039B4FF4007272 -:1068F000002128461E440AF03DFC8122032385F82E -:1069000020200499C5F8349082222B7085F840200D -:106910004A686A646B658B68AB650023013EAC63B3 -:10692000EB654FF0010912E008810100A880010029 -:10693000C0800100D4760100D07E0100D08001002B -:10694000E8800100079B99451CD209F101093B68C9 -:1069500006EB09015B6A2A46384698470446002838 -:106960003FF470AEB9F1010FECD14FF40072002189 -:1069700028460AF0FFFBE8E74FF480720792CDF853 -:1069800008A083E6B8F1000F3FF467AE0B4940461C -:10699000FFF7D6FC61E6039B079A04989918FFF766 -:1069A00037FD00283FF458AE029A4FF4007393402D -:1069B000049A92689A4293D94EE600BFF88001008B -:1069C0002DE9F0410C46154601F11E08AB8934F85B -:1069D000027F28461BB96A68AB689A420ED003F062 -:1069E0000DFE03F015FF0646384603F011FF864200 -:1069F00009D14445EAD10120BDE8F081B7FA87F01A -:106A00004009BDE8F0810020BDE8F0812DE9F04F9C -:106A100090F8313083B08846002B4ED090F830305B -:106A2000012B074651D9013ADFF8A4B00B464FF0CD -:106A3000020A8E1800240022514638460193FEF7C0 -:106A40000BFB0546C8B30278C12A36D1019B00F181 -:106A50001E0935F8020F24B300F5105292B2B2F5B8 -:106A6000806F2AD20BEA8424C0F30900204300F58A -:106A700080301946324603F037FE0346E8B1002461 -:106A80004D45E6D197F830200AF1010A5FFA8AFAFB -:106A90005245D0D2A3EB08009846002388F8003076 -:106AA0000EE000F5205292B2B2F5006F02D300283A -:106AB000DFD1EFE7B2F5806F05D3002088F8000042 -:106AC00003B0BDE8F08F0446DAE70020E5E700BF39 -:106AD00000FC0F0070B50C460A686260002319467E -:106AE000A38123611E464FF6FF7517E003F086FD74 -:106AF000A84222D003F08CFEF30343EA560353FA74 -:106B000080F399B22269C3F34E0343EAC133000A0A -:106B100010FA83F30132A18922619EB22046002936 -:106B2000E4D16268A3689A42E0D12069A682013864 -:106B3000FE288CBF0020012070BD002070BD00BF6A -:106B40002DE9F84F074691468A46002942D0D7F8EA -:106B50003034A1F10208434542D908F0070301256A -:106B60009D40C8F3C80BEDB246464446D7F82C14F6 -:106B7000002201EB1431384603F002FDE8B10BF1BD -:106B8000FF3B834400F2FF101BF8011F0AE04A4557 -:106B90002BD0A04510D0D7F83054A54214D913F00B -:106BA000FF050CD0013429424FEA4503A4EB06024D -:106BB000EDD0A0452646EED10120BDE8F88F58451E -:106BC0004FF00105E0D101E00026344601254FF0E9 -:106BD000000BCBE7D0F82084D7F830344345BCD83D -:106BE0004FF000080125C346BEE7BAF1000F04D1FB -:106BF000B9F1010F08BFC7F82064B01CBDE8F88FD9 -:106C00002DE9F843154698468A1ED0F830345119BC -:106C100099423AD80646B8F1000F39D1D0F820345D -:106C2000934288BFC0F82024D6F82C7402F00703E2 -:106C300001249C4007EB1231C2F3C809E4B20122DF -:106C400030468F1803F09CFCF8B109F1FF3E8644F2 -:106C500000F2FF101EF801CF1CEA040F14BF01223E -:106C6000002242458CEA040C4FEA44040DD0013D59 -:106C70008EF800C018D014F0FF04EDD17045A14685 -:106C80004FF00104E6D13946D9E70020BDE8F8838A -:106C9000D0F820049042C7D38142C5D9994228BF79 -:106CA0000021C6F82014BFE70120BDE8F88300BF2B -:106CB000F8B5D0F8303401338B4201D20020F8BD52 -:106CC00007460C4600F50476002506E0D7F8303478 -:106CD0000133A34205F10105F0D3D7F824140022B3 -:106CE00001EBD411304603F04BFCA400C4F30804BC -:106CF0000028E3D00459631CE8D1681CF8BD00BF2C -:106D000038B50C460B6890F845C4D0F8381465685F -:106D1000023B294003FA0CF303EB5123D0F82C1467 -:106D200000F50470194403F02BFC18B16368C3F339 -:106D30000803184438BD00BF2DE9F843D0F83834B3 -:106D40000C4649680B401144616090F845141344A7 -:106D500001F10902D2B2D3402BB380465D1E00F58B -:106D6000047905E02368013D03F1010323601AD390 -:106D7000267A002EF6D1D8F83034276801339F42A6 -:106D80003246484612D8D8F8241401EBD71103F044 -:106D9000F7FBBF00C7F3080740B1C3595A1C09D01D -:106DA000013D2360E4D20120BDE8F8834FF0FF30BD -:106DB000BDE8F8833046BDE8F88300BF38B5D0F8A9 -:106DC000303401338B4202D24FF0FF3038BD0C46D5 -:106DD000D0F82414154601EBD411002200F50470FC -:106DE00003F0CEFB0028EFD0A400C4F3080403593D -:106DF0005A1C1ABF2B600120002038BD01291BD965 -:106E000038B5D0F8303401338B420C4601D2002023 -:106E100038BDD0F82414154601EBD411012200F539 -:106E2000047003F0ADFB03460028F0D0A400C4F3C7 -:106E3000080401201D5138BD00207047D0F83034BF -:106E40000133994201D9002070472DE9F04F0546E2 -:106E500081B00C4600F504790F464FF00008D5F8D4 -:106E60002414002201EBD411484603F089FBE30906 -:106E700098B14FEA840BCBF3080B50F80B20511C50 -:106E800016BF16464FF0000A4FF0010A012C04D934 -:106E9000D5F830240132944203D9002001B0BDE876 -:106EA000F08FD5F8241401221944484603F068FBFA -:106EB0000028F2D040F80B80BAF1000F12D0013454 -:106EC000B44208D00023E21B39462846FFF798FE5B -:106ED0000028E2D03746D5F830340133B342DCD352 -:106EE0003446BCE7621C5346D21B3946284601B0E3 -:106EF000BDE8F04FFFF784BE2DE9F843D0F82C141D -:106F00000025064600F504782C46002240464F1C1A -:106F100003F036FBB0B100F1FF3E04F58059D6F81E -:106F2000300405E081B9083484420AD24C4517D0B8 -:106F30001EF8011FFF29F5D10834844205F1080528 -:106F4000F4D3401BBDE8F8830822012319424FEA1D -:106F5000430C18BF0135013A5FFA8CF3F6D1E2E732 -:106F60003946D2E7F8B5044600234FF0FF3004F568 -:106F70000477C4F840146160E060C4F81412C4F8E7 -:106F80001C02154684F84434237084F810321A46E3 -:106F90001946384603F0F4FA042D0CD8064650B1D1 -:106FA0005DB927490522F01C0AF0EAF918B996F8EC -:106FB0006C30092B19D00020F8BD6B1E00EB0313B9 -:106FC00093F8BE2112F07F02F5D193F8C231002B65 -:106FD000F1D000EB05163846D6F8B651294603F035 -:106FE000CFFA06460028DCD1E5E7336D2B44C4F820 -:106FF0002434736DC4F82834B36D2B44C4F82C3496 -:10700000F36DC4F83034336EC4F8343496F86D2020 -:1070100084F84524012502F1090305FA03F3C4F8B5 -:107020003C34013BC4F83834C4F8200401462A46F5 -:107030002046FFF785FD402384F844342846F8BDF8 -:107040001881010010B50446D0F83414FFF730FE63 -:1070500094F845340933DBB2984010BD70B590F90F -:107060000230002B82B004460DDBA56805F1280034 -:1070700003F05EFA00283BD1637843F0010300205F -:10708000637002B070BD8068A1690122283003F0EE -:1070900077FA0028F0D0A58805F00F056B0100EB0A -:1070A0004515C35CE52BE7D02378184A1B0744BF7E -:1070B000E369EB61236A16686B831A0CAA8266B1D6 -:1070C0000DF103020DF1060101A8B047BDF804302F -:1070D000BDF806202B836B82EA82A378A56803F0B3 -:1070E0007F03A37005F1280003F022FA0028C3D023 -:1070F00005F50E7003F01CFA0028BDD0286803685F -:107100001B6A98470028B7D0BBE700BF7097FF1FE6 -:10711000024638B552F8105F04462946806801F0EF -:10712000D9FF50B155B123690135AB42A37818BFDF -:1071300003F0BF0363F07F03A37038BDA37843F06F -:107140004003F7E7F8B5047814F0200404D11A4B93 -:1071500042699A42054602D300273846F8BDFFF738 -:10716000D7FF07460028F7D0A8682E6982794369BF -:10717000023E96401E440379ABB1214606E009F079 -:10718000F9FFA8680379E1B28B420BD9314405229B -:10719000283003F0F5F901344FF400720021002883 -:1071A000EDD1D9E7827969694FF40073934011FA00 -:1071B00083F36B613846F8BD00FE1F0010B504462E -:1071C00080680A462830A16903F0DAF920B1A38863 -:1071D00003F00F0300EB431010BD00BF10B50378A0 -:1071E00004462BB1FFF73AFF00232370A37010BDB4 -:1071F00000232370A370012010BD00BF38B50378B1 -:1072000004460D4613B1FFF729FF88B1A068A169B4 -:107210000022283003F0B4F950B1A38803F00F0323 -:1072200000EB43112022284604F006FE012038BD61 -:10723000002038BD30B589B00D4669461446FFF7C9 -:10724000DDFF28B1BDF81020BDF80E302A80238064 -:1072500009B030BD30B589B00D4669461446FFF718 -:10726000CDFF28B1BDF81820BDF816302A80238044 -:1072700009B030BD0B7813F0700F01D100207047BA -:10728000F0B540F6022389B00D46044601F060F8DF -:1072900038B101221023A27023702046FFF752FF5D -:1072A00010B9002009B0F0BD2378226922626BB1C9 -:1072B000636933B1A378002223F020032261626165 -:1072C000A3702046FFF7CAFE0028EAD0A068A16993 -:1072D0000122283003F054F90028E2D0A38803F0FB -:1072E0000F0300EB43111022CA726846202204F0FB -:1072F000A3FD0A2220210DF1010009F03BFFA06847 -:10730000216A83790239994043690122194428305E -:1073100003F036F906460028C3D02E2720226946FE -:107320008DF8007004F088FD2B6A8DF801701A0C3E -:10733000ADF81420694606F120002022ADF81A307D -:1073400004F07AFDA46804F1280003F0F1F80028A5 -:10735000A7D004F50E7003F0EBF80028A1D0206848 -:1073600003681B6A09B0BDE8F04018472DE9F041F9 -:10737000044694B09846237801920020ADF814009A -:107380000B90002B40D10B7813F0700F0D463BD0C3 -:1073900013782F2B16463BD0002728E0019E367825 -:1073A000002E4ED000F0D4FF034602AA2946204604 -:1073B0002BB9B8F1000F27D0FFF75CFF20B3A6462A -:1073C000BEE80F000DF12C0CACE80F00BEE80F007A -:1073D000ACE80F002378DEF80020CCF8002020462F -:1073E0000BB1FFF73BFE019E2770A7700BAD314636 -:1073F00001AB02AA204601F0EDF8064602AA294692 -:1074000000232046002EC9D1002014B0BDE8F08131 -:107410000136019633782F2BFAD0AD682422002153 -:107420000BA809F0A7FE0D95EB79102B0FD0202BA0 -:10743000EAD140238DF82C3001238DF82E300BAD8E -:10744000AAE702AAFFF716FF14B0BDE8F0812023D7 -:10745000F0E700BF2DE9F041044694B09846237848 -:10746000019200200290ADF83800002B36D10B7845 -:1074700013F0700F0E4631D013782F2B154631D0F4 -:1074800000271EE0019D2D78002D41D000F060FF07 -:10749000A6460DF1080C08B3BEE80F006646ACE83E -:1074A0000F00BEE80F00ACE80F002578DEF80030D2 -:1074B000CCF8003020460DB1FFF7D0FD019D2770BC -:1074C000A770294601AB0BAA204601F083F80546B8 -:1074D0000BAA314600232046002DD3D1002014B042 -:1074E000BDE8F0810135019529782F29FAD0B1B98D -:1074F000B5682422204609F03DFEA560EB79102BEB -:1075000023D0202BEAD1402301202370A070E6E78E -:1075100043460BAA00F01CFF14B0BDE8F081B6682A -:107520002422002102A809F025FE0496F379102BED -:1075300009D0202BD2D140238DF8083001238DF8BB -:107540000A3002AE9CE72023F6E72023DCE700BFE9 -:1075500019B101F58961FFF77DBF0846704700BF8B -:10756000CB6870B50D460446A3B906780EB118462F -:1075700070BD8D682422314609F0FCFDA560EB79D1 -:10758000102B17D0202B13D1402201232270A3707F -:10759000184670BD2422002109F0ECFD01231022C1 -:1075A0002270A370A968EA682262A160184670BDC3 -:1075B000304670BD2022E8E770B504780CB1002099 -:1075C00070BD05460E462422214609F0D3FDAE606B -:1075D000F379102B09D0202B05D1402301242B70E7 -:1075E000AC70204670BD204670BD2023F6E700BF7A -:1075F0002DE9F04F8378DF0785B0054640F18C8098 -:10760000884601780E07924600F18F808C0608D5D7 -:1076100083685A894369C3EB42139BB29A4528BFDA -:107620009A46BAF1000F00F0AC806A69AF6805F1C4 -:107630001003880656464FF000090193C2F3080B69 -:107640003DD5396A01EB5221BBF1000F51D1B6F59E -:10765000007F4ED37A6B91424BD0B6F5806F6DD3DD -:10766000287880064FEA562305D43879A0EB090024 -:10767000834228BF034691424FEA43240CD8C818DE -:10768000824209D207F128000393029102F050FFD1 -:107690000299039B00283FD0F86A02685769424666 -:1076A000B847002838D06A69361B2244A0446A6172 -:1076B00067D02978AF688806C2F3080BC1D497F861 -:1076C000059009EA5229BBF1000F35D1B9F1000F3D -:1076D00032D1002A3CD14A064CBF3A6A2A6A2A6152 -:1076E000B9797869023A8A4048441118BBF1000F11 -:1076F000ADD0CBF50074B4424FF0000207F1280082 -:1077000028BF344602F03CFF30B100EB0B012246AB -:10771000404604F091FBC6E76B784FF0FF3043F032 -:1077200002036B7005B0BDE8F08FC36942699B1A14 -:107730009A4528BF9A4674E72A69D1E7F86A036830 -:1077400042461B6998470028E6D04FF40074AAE728 -:107750000B0705D5AA78540602D52A690132BEE77F -:107760002969019A384601F001FD0028D4DB02D0D6 -:10777000AF682A69B4E72B7813F0700FCCD0AAEB6E -:10778000060A504605B0BDE8F08F00BF70B582B064 -:1077900001220DF10701044646690569FFF728FF3C -:1077A000012808BF9DF80700666118BF4FF0FF3041 -:1077B000256102B070BD00BF30B5436913F4F07F9E -:1077C00083B00446C3F3431500D089B901220DF1FB -:1077D00007012046FFF70CFF40B201280BD1636977 -:1077E0001F336361A068383000EB451003B030BD33 -:1077F00020334361F6E7002003B030BDF0B50378D5 -:107800009BB0002613F0180F0896119606D08368D7 -:1078100017468A689A4204460D4602D000201BB0E3 -:10782000F0BDFFF71BFCA646BEE80F000DF1440CAF -:10783000ACE80F00BEE80F00ACE80F00DEF8003047 -:10784000CCF80030A368A16903F12800324602F0A9 -:1078500097FE0028E2D0A18801F00F0100EB411152 -:107860002022684604F0E8FA237813F008033A4629 -:10787000294677D108A8FFF779FD0028CED0109EC1 -:10788000BDF82430A068A3809DF823300E99E370E2 -:107890000B9BA16100272830E36001228DF8207046 -:1078A0008DF8227002F06CFE0028B7D0A38803F098 -:1078B0000F0300EB431513220DF10D0105F10D002F -:1078C00004F0BAFA9DF80B30EB724EB3A0688179E0 -:1078D000B31E8B4041693A461944283002F050FEED -:1078E00000289BD000F120012022684604F0A4FA71 -:1078F000A068314601F058FC00288FD0A068236AA8 -:1079000082794169023B934019442830012202F0F8 -:1079100037FE002882D020226946104404F08CFAF9 -:1079200000210222082311A819918DF846208DF814 -:10793000443000F0B5FE00283FF470AFA46804F1B5 -:10794000280002F0F5FD00283FF468AF04F50E7042 -:1079500002F0EEFD00283FF461AF206803681B6A67 -:1079600098475CE740F6012308A8FFF773FD00285D -:1079700086D153E70378DA0601D40020704730B58A -:10798000436983B0044633B18378002223F0200397 -:1079900002614261837000230FE06361A3686A01A2 -:1079A000383303EB45159B5CEBB1E52B04D02E2B54 -:1079B00002D0EB7A1B0722D5636913F4F07FC3F37F -:1079C000431503F12003E8D101220DF10701204600 -:1079D000FFF70EFE40B2012803D163691F336361D4 -:1079E000DCE763785BB9A378082243F00203204602 -:1079F0002270A37003B0BDE8304000F051BE0020FB -:107A000003B030BD2DE9F041037807690446002B2F -:107A10003AD00D464169A94243D0002D38D018070D -:107A20002BD5E269AA422FD3D4F808C0A2789CF8DB -:107A300006000930C0B26E1E12F0400F26FA00F6A2 -:107A400032D14A1EC240964201D3002930D15B0692 -:107A50004CBFDCF82030236A236104F1100807E0F2 -:107A60002169A06801F082FB002806F1FF360BDDDA -:107A70004246002EF4D1A2780CE09A06D4D5A36831 -:107A80005B89B5EB431FF6D927610020BDE8F08183 -:107A90008278056122F02002A27065610120BDE8B4 -:107AA000F0810120BDE8F081236A33442361F1E7CE -:107AB000B61AD2E72DE9F041884615460021242266 -:107AC00004461F469DF8186009F054FBD8F80800DA -:107AD000D8F82030A58000F1380205F00F0502EB40 -:107AE0004512E360A060D17A0D0712D401F01701AE -:107AF0002170D37AE67013F0180F08BF41F0080127 -:107B000007F0030308BF2170012B33D0022B05D0EF -:107B1000DBB100202070A070BDE8F0810323217844 -:107B2000CD06F6D4CE07F4D407F008010B43A370BA -:107B3000958A518B41EA0541456BA5617D0511D5BB -:107B400009BB63F07F03A3700FE07B05E1D407F06E -:107B5000080343F00103A370416B938AA161518B29 -:107B600041EA03412162D369E3617E0404D4012028 -:107B7000BDE8F0810223D2E7E1692046FFF742FF2A -:107B80000028F4D1C5E701F00FFB0028C1D0A3788D -:107B9000D7E700BF0378002B3FD12DE9F0470B78E2 -:107BA00013F0700F84B00C462CD04B6913F01F05F6 -:107BB00028D106469046A94601220DF10F01204624 -:107BC0005F09C3F3431AFFF713FD40B2012819D12F -:107BD0006369A2681F3302F1380C4FEA4A126361ED -:107BE0001CF802200CEB4A1C62B12E2A08D0E52AB0 -:107BF00006D09CF80B1011F0080010D00F2905D00A -:107C00000025D9E7002004B0BDE8F0875106D3D5A0 -:107C10009CF80D9002F01F05CEE70020704775B16B -:107C20000CF10A0101E01CF8012FC30143EA5003E3 -:107C300052FA83F36145D8B2F5D14845E2D10095B7 -:107C40004346BAB221463046FFF734FFDBE700BFB8 -:107C500003780BB1FFF702BA012070472DE9F04716 -:107C60000E46017882B009079DF828709DF82C8097 -:107C70009DF830909DF834A057D5A2F2BC7294B212 -:107C80007F2C52D85A1E0B2A01934ED87A1E1E2AD8 -:107C90004BD8B8F1170F48D8B9F13B0F45D8BAF116 -:107CA0003B0F42D80546FFF7D9F900283DD0A86818 -:107CB000A9692830012202F063FC002835D0AA8887 -:107CC000019B02F00F0247EA431343EA442300EB0F -:107CD00042124FEA5A01F7079BB241EA491141EAC1 -:107CE000C82148BF5382B40789B208D51AF0010AE7 -:107CF00018BF4FF0640A82F80DA01382D181AC68DE -:107D0000700744BF1383D18204F1280002F010FCF5 -:107D100058B104F50E7002F00BFC30B12068036816 -:107D20001B6A02B0BDE8F0471847002002B0BDE86A -:107D3000F08700BF83789B0727D510B5036A82B010 -:107D40000446ABB1016911BB01930162A0681946F9 -:107D500001F02AFAB0B1A37822786169E16163F099 -:107D60007F03A37022B12046FFF778F902B010BD5F -:107D7000012002B010BD2169A0686FF0704201F0CF -:107D800005FA68B9002002B010BD0020704700233A -:107D90008068019301AA01F0E9F90028F2DBEAD139 -:107DA000019B002BD7D0D1E72DE9F04783789C07C2 -:107DB00005467BD588461907914600F1BD806B6961 -:107DC00013EB090272D2B9F1000F44D04F464FF4C1 -:107DD000007AA8682969447914EA5324C3F3080691 -:107DE00043D1002E73D100297ED0AA78520603D544 -:107DF000EA699A4200F28F8005F1100201F0B6F9AB -:107E0000002853DB00F09180A86829698379023942 -:107E1000994043691944B7F5007F4ED3B7F5806F99 -:107E200066D303797A0A1B1B934228BF1346426B21 -:107E30008A424FEA432402D35E18B2426ED3C06A2C -:107E40000268966A4246B04780B36B693F1B234481 -:107E5000A0446B61BDD1EA699A427DD2AA78EB61F8 -:107E600062F07F03AB70484625E0827943690239AE -:107E7000914019442144002ECDD0C6F50074BC4277 -:107E800028BF3C460122283002F07AFB70B1304412 -:107E900022464146264403F0CFFFB6F5007FA8688E -:107EA000D3D1283002F044FB0028CED16B7843F0C8 -:107EB000010300206B70BDE8F0876A69EB69BA4581 -:107EC000544628BF3C469A4207D30522DBE7827915 -:107ED0004369023991401944CFE7AB7813F0200F82 -:107EE00014BF05220122CEE7296A61B329618DE71B -:107EF000436B8B4205D1002380F828304FF0FF33CD -:107F00004363C06A036842465B6A98470028CDD045 -:107F10004FF4007499E70131296177E7002280F876 -:107F200028204FF0FF32426389E72846FFF7F0F838 -:107F300000287FF469AFB9E7C169FFF763FD002846 -:107F40007FF43DAFB2E72846FFF7E2F80028ADD056 -:107F50002969A868296259E7054B1B682BB1AB78E2 -:107F600063F07F034846AB70A5E74846A3E700BF30 -:107F70007097FF1F2DE9F04F8DB08446156801936F -:107F80001446984606468946BCE80F0003AF0FC763 -:107F9000BCE80F000FC7DCF800303B604FF0000E6C -:107FA00043466560A4F80CE0002B3FD04FF0010A77 -:107FB000A9EB0A0189B2490103A8FFF723FD50B3D9 -:107FC000002103A8FFF7F8FB074620B300250DE0CA -:107FD00002F014FB8046584602F01AFC83464046E5 -:107FE00002F016FC834516D10D2D18D0EAB23946A1 -:107FF000304600F0C3FEA389834601352046002B9E -:10800000E6D16368A2689342E2D1BBFA8BF04009E3 -:108010000DB0BDE8F08F00200DB0BDE8F08F019BE2 -:108020000AF1010A5FFA8AFA5345C1D20120EFE74B -:108030002DE9F04F8DB00746164601919A4602F1A0 -:10804000150402F120050FCF0DF10C0CACE80F0068 -:108050000FCFACE80F003B68CCF800304FF00009C0 -:1080600014F8012F4FEAC91343EA590352FA83F374 -:10807000A5425FFA83F9F3D1336873604FF00008CB -:10808000A6F80C80BAF1000F4BD00127019BD91B39 -:1080900089B2490103A8FFF7B5FC002852D000219E -:1080A00003A8FFF789FB00284CD0059A92F82830E6 -:1080B00043F0010382F828300F235745C3724FF075 -:1080C00000030CBF47F040023A4603734FF0000331 -:1080D000027080F80D90438300F1010B012400250C -:1080E00006E0ABF8000001340135E4B20BF1020BFD -:1080F000B08918B97268B3689A4216D0304602F057 -:108100007DFA042DEBB2ECD90A2B02D8ABF80300B0 -:10811000E9E70D2CABF80500E5D10137FFB2BA4510 -:10812000B4D201200DB0BDE8F08FB8F1000F06D039 -:1081300008F101085FFA88F84FF6FF70E1E74FF0A9 -:108140000108DEE700200DB0BDE8F08F2DE9F8430F -:10815000054650F8164BAE680B22202109F00AF8AC -:1081600023782E2B14BF0120002003D114F8013FE7 -:108170002E2BFBD0721EA24209D9134602E09C426C -:108180001A4604D01A46013B11782E29F7D1A6428F -:108190004FF0000E7CD907277146F1464FF00808D2 -:1081A00023782E2B25D0222B25D07C2B23D0A3F176 -:1081B0005B0CBCF1020F1ED9A3F12A0CBCF1050F18 -:1081C00051D9A3F13A0CBCF1050F5AD9A3F1210CF6 -:1081D000BCF15D0F55D8B9422BD8A3F1610CBCF1AD -:1081E000190F46D8203B4EEA080EDBB25FFA8EFE2E -:1081F00005E0A24231D0B9421BD800205F2301F133 -:10820000010C294401348B755FFA8CF3062B98BF5F -:108210002B751946B442C3D3AB7D202B10D090B13F -:108220001EEA090F18BF4FF0020E85F815E0BDE8F1 -:10823000F8830A2F01D0A24218D2AB7D202B02D1A5 -:108240000020BDE8F8832B7D2B4401207E213122C4 -:1082500068759975DA75BDE8F883541C0A270821FA -:108260004FF01008D6E72D2BB5D0C4E714460020F8 -:10827000D0E7A3F1410CBCF1190F98BF49EA0809F6 -:10828000BDE703F0C003802BB5D101340020C1E766 -:10829000F146C1E72DE9F04FDFF8B0B091F8148056 -:1082A00083B00F4604464FF0620900254FF07E0A66 -:1082B00001F11606DBF800300193019BB8F1030FC2 -:1082C0002B4428BF4FF003089DB208F10403DBB232 -:1082D00005F00F02F918013B092ADBB294BF3032D6 -:1082E000373298458A754FEA1515F1D107EB080327 -:1082F000002183F816A02046FFF784FB01212046C9 -:10830000FFF75AFA03460B223046194693B193F809 -:1083100000C0BCF1000F14D0DB7A1B07EED408F0CC -:108320007BFE0028EAD109F1FF3919F0FF09C1D11C -:10833000484603E06078B0FA80F0400903B0BDE839 -:10834000F08F012003B0BDE8F08F00BF8C97FF1FB6 -:108350002DE9F04F0E468DB089680593337807916B -:1083600013F0700F039051D0039B1B78002B4DD15D -:1083700013699246954A0C33A2FB0323C3F3870289 -:108380009AF81530089298071CBF13465F1C4FF0EF -:108390000003194630461C46099314BFFFB201275B -:1083A000FFF730FB0AF11603A346A146A046069448 -:1083B0000493756900213046C5F34F15FFF7FCF9AA -:1083C00008B30378E52B25D023B3BC4238BF002483 -:1083D0002E2B29D0C27A0F2A29D012F0080223D1DD -:1083E000B9F1000F40F0D08004990B2208F014FE80 -:1083F0000028DED19AF8153013F0010300F0DB807D -:1084000001230693D5E77378002B3AD000200DB0F6 -:10841000BDE8F08F002C08BFA846BC423CBF013429 -:10842000E4B273B3E52BD3D14FF00009C1E7B9F142 -:10843000000F19D1089A03F01F0B5A45B9D113F058 -:108440004009B6D0437B09939146BBF1010FB0D1EF -:10845000691C4B4689B252463046FFF78BFD002817 -:1084600008BF4FF00009A4E70BF1FF3B5FFA8BFB5D -:108470005B45D9D1437B099A9342E6D04FF000097E -:1084800097E7059B9A05C1D503F00303013B012B38 -:10849000BCD8002C08BFA846BC4203D31CE0DCB209 -:1084A000A74219D000213046FFF786F9631C002847 -:1084B000F5D17378002BA9D1BC420DD2079D05E000 -:1084C0002B7904EB0314E4B2A74205D93046FEF73A -:1084D00039FE0028F4D199E7069B002B4DD17B1E75 -:1084E000DBB208EB0305ADB2524629463046049391 -:1084F000FFF79EFD002889D069013046FFF782FA18 -:10850000002883D000213046FFF756F904460028A2 -:108510003FF47CAF2022002108F02CFE0B220AF150 -:108520001601204603F088FC9AF81520049B02F0FF -:1085300018022273264A1768002F41D00DF12B0232 -:108540000DF12E010BA8B847BDF82C202282BDF8F2 -:108550002E20E281049B9DF82B206273079991F8ED -:10856000282042F0010281F8282000930398059BFF -:108570002A463146FFF79EFA49E751463046FFF753 -:1085800089FE0028ABD141E7BBF1010F7FF43EAF7C -:1085900000F10A04194601E010F8011FD30143EA73 -:1085A000520351FA83F3A042DAB2F5D1099B934208 -:1085B0007FF42CAF4B46059A11053FF527AFD4E762 -:1085C00045F62122228222836282C7E74FECC44E05 -:1085D0007097FF1FF0B508460978202983B014462C -:1085E0001E4603D110F8013F202BFBD020600378FA -:1085F00033B32A4D002712E07F2B07F101073DD846 -:108600003C2BD9B22CD8212925D92239C9B225FA37 -:1086100001F1CA0721D42E2B0DD1037883B12F2B62 -:108620002FD0011D01AA02F0ABF8B0B1019BB3F548 -:10863000803FE1D302372761A0600378002BEED1A1 -:108640002369013BFE2B08D83060204603B0BDE80B -:10865000F040FFF77BBD1F290ED8002003B0F0BD0E -:108660005C29FAD004D97C29E5D1002003B0F0BD03 -:108670003E390129F1D9DEE72E2BCED0202BCCD0EC -:10868000D9E72369013BFE2BE7D80346184613F8C8 -:10869000012B202AFAD02F2AF8D0D5E70121000596 -:1086A000F0B583788BB0002201929A0724D5016A35 -:1086B000054619B1806800F077FDE8B10121284630 -:1086C000FEF77CFDC0B1421E00F10A0C002412F836 -:1086D000011FE30143EA540351FA83F39445DCB2EA -:1086E000F5D1E5270770AE6800232B70AB7006F15B -:1086F000280001F01DFF10B900200BB0F0BD06F5F9 -:108700000E7001F015FF0028F6D0306803681B6A70 -:1087100098470028F0D0EB78002BEED0294601A82E -:10872000FEF71EFF0028E7D0EB78002BE4D00126EF -:1087300021E001A8FFF740F8731CF1B25FFA83FC57 -:108740009EB20028D8D0C37A0F2BD5D1027802F080 -:108750001F038B42D0D1437BA342CDD10770A968C0 -:1087600091F8283043F0010381F8283053060DD4E6 -:10877000EB786345C0D3A988891B89B2490101A858 -:10878000FFF740F900210028D3D1B5E7AC6804F128 -:10879000280001F0CDFE0028AED004F50E7001F0E7 -:1087A000C7FE0028A8D0206803681B6A9847A4E782 -:1087B0002DE9F843DDF82090A2B105460C46984615 -:1087C000571801E0BC420DD02B68204649465E6A2E -:1087D000C0472146024628460134B0470028F1D15F -:1087E000BDE8F8830120BDE8F88300BF486810B5F4 -:1087F0000C4630B10B894A8901339BB29A420B81F6 -:1088000001D9206810BD036803495B6801229847BD -:1088100000232068238110BDD47601002DE9F04F9C -:10882000054687B0406A8846924600214FF40072A0 -:1088300008F0A0FC286A28B103683B495B680C2259 -:108840009847286AEE696B6A03933368DFF8DCC0E7 -:10885000DF6AE96804904FEA5A124FF00009674551 -:10886000ADF81620ADF8149001F101040AF1FF32C1 -:1088700026D16AB301EB0A07DFF8B4A00AE021466B -:10888000039A30460134D84700283ED0A7421ED074 -:1088900033680498D3F824B00028F0D0BDF8143021 -:1088A000BDF8162001339BB29A42ADF81430E6D8D9 -:1088B000036851465B6801229847ADF81490DEE7E3 -:1088C00003AB009321461B4B3046B847E8B1286AFA -:1088D00020B1036818495B68022298476B6AB8F1B7 -:1088E000100F4FF0F8021A700CBF04200C20012367 -:1088F000FF216A6AD15401339842FAD1E8696A6A61 -:108900000368E9685B6A984718B9002007B0BDE8BA -:10891000F08FAB68E869E9686A6A194403685B6AC2 -:10892000984707B0BDE8F08FC0800100B187000014 -:10893000D4760100ED870000D07E010070B5446A56 -:108940004FF40076054632460021204608F012FC1E -:108950007623EB22637090232270A37008222021DB -:10896000E01C08F007FCA4F80B6095F82B3063734B -:108970000222F823298D227463752B69E361AA69A9 -:1089800022624AF65523E181A4F8FE3170BD00BF92 -:1089900070B504464FF400720021406A08F0EAFB0B -:1089A000656A2269216805F2BF1001F04DFEA369D6 -:1089B000226921681A4405F2C310013A01F044FE0D -:1089C00094F82A3085F8C231E06922690368C5F855 -:1089D000C621A169626A5B6AC5F8CA114AF65521C7 -:1089E000A5F8FE11BDE870400021184770B5466932 -:1089F00090F82BE0456A4FF4807304464360A6F577 -:108A00008072B2FBFEF202F20110000AA060400088 -:108A100000F1A10C9C450DD98033F21AB2FBFEF295 -:108A200002F20111090A480000F1A10C6345F3D3D9 -:108A3000A1606360A3EB0C0303F180012161A2F646 -:108A4000F571B1F5704F4CD2213002FB0E0081332D -:108A5000B0F5803FE36034BF0423062384F82A3056 -:108A60000123A06123852046FFF792FF08B900206B -:108A700070BD2046FFF762FFA1681F4BE9824FF4EB -:108A80000072A5F811202921802285F8242085F87C -:108A900026100B22C5F82730202105F12B0008F005 -:108AA00069FB4622412385F8362085F8373054216A -:108AB0003122362385F8381085F8392085F83A3088 -:108AC000E069626A036821695B6A98470028CED032 -:108AD0006268E36820461021BDE87040D21AFFF7B3 -:108AE0009DBE206A0028C2D0036804495B68132237 -:108AF0009847002070BD00BF87D61200208101007A -:108B0000F8B5466990F82BC0456A4FF400530361ED -:108B1000A6F58041B1FBFCF101F181034FF48042E5 -:108B2000DB0942F2090E0446426083600EEB43000B -:108B3000904240F2BB8002F50052B11AB1FBFCF149 -:108B400001F18103DB090EEB430082424FEA430748 -:108B5000F1D3A36062604FF6F473994240F29B80B8 -:108B600001FB0C2CA2F50052D21B92B202F500536D -:108B700022854F4AE360ACF50053944594BF4FF013 -:108B80000B0C4FF00C0CA36184F82AC02046FFF7B1 -:108B9000FFFE08B90020F8BD2046FFF7CFFEA16810 -:108BA000444A454B696202202A6380212922E862F7 -:108BB00085F8401085F8422020210B22C5F843306B -:108BC00005F1470008F0D6FA4622412385F85220E5 -:108BD00085F8533054213322322385F8541085F818 -:108BE000552085F85630E069626A036821695B6A3E -:108BF00098470028CED0E06921690368626A5B6A01 -:108C0000063198470028C5D04FF400720021606AF1 -:108C100008F0B0FAE069294BC5F8FC312169036816 -:108C2000626A5B6A023198470028B3D0E069216923 -:108C30000368626A5B6A083198470028AAD0204A14 -:108C4000E0692A6002F1FF5202F500524FF0FF3353 -:108C50002032C5F8E421C5F8E831C5F8EC312169C6 -:108C60000368626A5B6A01319847002892D0E06924 -:108C700021690368626A5B6A07319847002889D0D6 -:108C8000A26894F82B30204603EB42022021BDE875 -:108C9000F840FFF7C3BD206A00283FF47BAF0368AC -:108CA00008495B68132298470020F8BD5F0052E72F -:108CB0000004FB000100060087D61200000055AA40 -:108CC000525261412081010038B504460868C569E7 -:108CD0002362E16162620846A84700F2FF73DB0A83 -:108CE000062B6061236024D9102B13D80223B0F522 -:108CF000800F84F82B3020462ED2FFF777FE0546F2 -:108D0000206A05B320B1036819495B680D229847B2 -:108D1000284638BD202B23D9402B23D9802B23D99B -:108D2000B3F5806F22D9B3F5004F8CBF8023402369 -:108D3000DDE7206A20B103680E495B68142298477A -:108D40000025284638BD0028FAD003680A495B6828 -:108D50000F229847284638BDFFF7D2FE0546CFE7D9 -:108D60000423C4E70823C2E71023C0E72023BEE79B -:108D70004C810100348101005C810100042A04D887 -:108D800001EB4201B1F8010070470A2A03D801EB58 -:108D90004201888870470C2A9ABF01EB4201C888BB -:108DA00000207047F8B504780D467CB114F06004DB -:108DB000164607D0012A09D92F2200230A704B70CA -:108DC0000120F8BD2146FEF7F9F910B900202870FE -:108DD000F8BD0346A446082711E0027B174203D0E2 -:108DE0000EF1200E5FFA8EFE611CB142EED20CF144 -:108DF000010CBCF10C0F05F804E0CCB210D0BCF1B2 -:108E0000080F11D013F801EBAEF14102192AE4D991 -:108E1000BEF1200FE8D10CF1010CBCF10C0FEED12A -:108E200000232B552046F8BD1A78202AF8D01027A9 -:108E30004FF02E0ED8E700BF2DE9F04F8BB003782E -:108E4000002488460194002B55D0C3780646002B99 -:108E500057D0014601A89146FEF782FB00284AD070 -:108E6000F078002843D009F1FF39C144C3464FF0E0 -:108E7000010AB188A1EB0A0189B2490101A8FEF7F4 -:108E8000C1FDC0B3002101A8FEF796FC98B3C27AD9 -:108E90000F2A30D102785FFA8AF102F01F028A426B -:108EA00029D1471C0025042DEAB23ED838886CBB76 -:108EB00000F5205292B2B2F5006F3DD3A0B15946F1 -:108EC0004A4601F011FC8346A8B1002401350D2D5E -:108ED00007F10207E7D10AF1010AF1785FFA8AF295 -:108EE00091421FFA8AFAC4D2ABEB0800D84600239D -:108EF00088F8003002E0002088F800000BB0BDE8E0 -:108F0000F08FFFF74FFF0BB0BDE8F08F00F5105268 -:108F100092B2B2F5806FEED20A4BC0F3090003EAB9 -:108F20008424204300F58030C9E70A2A94BFB7F8AB -:108F30000300B7F80500BAE7B2F5806FDBD204464C -:108F4000C4E700BF00FC0F00FFF776BF2DE9F84330 -:108F5000DDE90898BBB105460C4616465F1802E0ED -:108F6000C847BC420FD02B6821461B6932462846B1 -:108F7000984703464246204631460134002BEFD144 -:108F80001846BDE8F88301231846BDE8F88300BF02 -:108F900010B41468B4F5807FA44628BF4FF4807CD9 -:108FA00001EB4C00814207D231F8023B13B9536800 -:108FB000013353608842F7D8A4EB0C04146010BC52 -:108FC000704700BF10B41468802CA44628BF4FF02F -:108FD000800C01EB8C00814207D251F8043B13B99D -:108FE0005368013353608842F7D8A4EB0C04146033 -:108FF00010BC704770B5C379202B04460D46164649 -:109000001FD0102B1AD1027A8369A2F10202B2FAA0 -:1090100082F2C1F3072152095200194400F50E7083 -:1090200001F0AEFA50B16D0005F4FF75435BE269E3 -:109030009A4226BF33600120002070BD4FF0FF3000 -:1090400070BD027A8169A2F10202B2FA82F252097B -:10905000520001EBD51100F50E7001F091FA0028D5 -:10906000ECD0AD0005F4FE754359E0E738B5C3799F -:10907000202B0C46154618D0102B14D1027A836988 -:10908000022AC1F30721194400F50E7014BF012212 -:10909000032201F075FA034628B1640004F4FF745A -:1090A00001201D5338BD002038BD037A8169022B91 -:1090B00014BF0122032201EBD41100F50E7001F060 -:1090C0005FFA03460028EED0A40004F4FE740120E9 -:1090D0001D5138BD2DE9F041C4688C4282B005466F -:1090E0000E4690462EBF01270C460027EB6901343F -:1090F000A34201AA284605D29FBBEC6801273C4445 -:10910000A3422ED3A64221462BD0012C29D9FFF70A -:1091100071FF002825DBE9D0019B002BE6D107B1C8 -:10912000EC60EB69A3421CD36FF0704221462846E5 -:10913000FFF79CFF0746A0B13EB96B6A002B01DB2D -:10914000013B6B62C8F800400CE0012E09D0EB69CE -:109150009E4206D8314622462846FFF787FF002860 -:10916000EBD10027384602B0BDE8F08101290AD9C9 -:1091700010B4C4698C4202D310BCFFF73BBF4FF060 -:10918000FF3010BC70474FF0FF307047012909D9FC -:1091900010B4C4698C4202D310BCFFF767BF002033 -:1091A00010BC70470020704770B5054682B00C4671 -:1091B0001DE0EB699C421FD8FFF71CFF0646002EFE -:1091C00021464FF00002284616DBEB699C4213D87B -:1091D000FFF74CFF80B16B6A002BA4BF01336B62B9 -:1091E000EB68621EA34288BFEA60019C2EB1012C8D -:1091F000214601AA2846DCD8002002B070BD00BF7D -:109200002DE9F0470746406A002884B002DB04B02D -:10921000BDE8F087FB6997F838223C6901330021EB -:10922000CDE90231D30700F19380FB7900214FF0A3 -:10923000FF32202B87F83812C7F8442207F5127640 -:109240004FD0D7F80080494BD8F80020D7F818A0A5 -:1092500095699D4235D1002C3ED013695146324666 -:1092600040460AEB0409984730B30299B1F5807F74 -:109270008E4628BF4FF4807E06EB4E0CB4450BD9CA -:10928000039D3346002233F8024B0CB901350246E8 -:109290009C45F8D802B103950AF1010AA1EB0E0131 -:1092A000D145029118D0D8F80020514613694046A4 -:1092B000324698470028D8D14FF0FF3004B0BDE8BF -:1092C000F08723462A4C324651464046009402AC71 -:1092D0000194A8470028EFD00398786204B0BDE855 -:1092E000F087D7F800A0214BDAF80020D7F81890C3 -:1092F00095699D4234D1002CEED009EB0408136926 -:1093000049463246504698470028D5D0DDF808C077 -:10931000BCF1800FE64628BF4FF0800E06EB8E02B0 -:10932000B2420BD9039D3346002153F8044B0CB9CC -:10933000013501469A42F8D801B1039509F10109B6 -:10934000ACEB0E03C8450293C6D0DAF80020D6E78E -:1093500007F50E7001F0ECF800287FF466AFABE77C -:1093600023463246034C49465046AFE74D8F000036 -:10937000918F0000C58F000070B5044600230120C6 -:1093800015464FF0FF322160E371E06004F12806DA -:10939000E162C4F83C1284F8283084F83832626301 -:1093A000C4F84422CDB1042D01D9002070BD194666 -:1093B0001A46304601F0E4F805F18055013D00F50C -:1093C000DF73290103EB05150028EED02A79002A66 -:1093D000EBD05B5C5B06E8D1AD68002229463046E5 -:1093E00001F0CEF80028E0D0B0F80B30B3F5007FE4 -:1093F000DBD1037C2372013B012BD6D8467B26713F -:10940000731E0022012E6371A2710ED00122134639 -:109410005B00DBB29E4202F1010105D0CAB2092A0B -:10942000F6D10823A371C0E7A271C68A26610EB9DE -:10943000466A2661C189B0F8113063812944A1616F -:1094400090F810C05B0106FB0C1103F2FF1301EB57 -:1094500053232162B0F81310636101B9016AED1A58 -:109460006B18D3405A1CE2614FF0FF32626240F643 -:10947000F47293420DD94FF6F472934285BFC36ADA -:10948000236210232023E3712663C4F84062012085 -:1094900070BD0C23E371002070BD00BFF8B58F6B69 -:1094A00000260D4604468663C6639FB1014624200C -:1094B00000F0C8F806808670AD6BA06384460FCDBF -:1094C000ACE80F000FCDACE80F002B68CCF80030F3 -:1094D0002046F8BDCB6B002BFAD00146382000F0B7 -:1094E000B1F880F831704786E96BE063342202F00E -:1094F000A3FC2046F8BD00BF10B50446806B10B138 -:10950000FDF76CFE30B9E06B10B1FBF7C3FD20B97D -:10951000002010BD0023A36310BD0023E36310BD32 -:10952000002952D02DE9F0410446806B17461E46B3 -:109530000D4610B1FDF752FEA0BBE06B10B1FBF77A -:10954000A9FDB8BBD5F88084B8F1000F11D0214631 -:10955000242000F077F83346002606808670D5F880 -:109560008014A0633A46FDF7F3FF58BBA063BDE843 -:10957000F081D5F8843493B12146382000F062F8A8 -:1095800080F83180A0F83280D5F88414E063334647 -:109590003A46FCF7A3F9A8B9E063BDE8F0810020E2 -:1095A000BDE8F081D5F880840023A363B8F1000FF3 -:1095B000CDD1DEE7D5F880840023E363B8F1000F56 -:1095C000C5D1D6E70120BDE8F0810020704700BF7B -:1095D000F8B50446806B0D46164610B1FDF7FEFD4A -:1095E00038BBE06B10B1FBF755FD38BBAF6B77B103 -:1095F0002146242000F026F8002101808170A0631C -:10960000A96B3246FEF7C6FA88B9A063F8BDE86BCD -:109610000028FBD02146382000F014F880F8317083 -:109620004786E063E96B3246FCF760F920B1012020 -:10963000F8BD0023A363D9E7E063F8BD0023E3632B -:10964000D4E700BF084670472DE9F04100260446E4 -:10965000C0F88814C0F8806401464FF490601F463B -:109660009046FFF7EFFF80F8446480F87964A0F833 -:109670007A64D4F88814C4F884043A460546FDF7A1 -:1096800071FCA8BB00262146C4F8846440F26C40FB -:10969000FFF7D8FF0223C671A0F8486480F84A6437 -:1096A0000372D4F88814C4F880043A460546FFF7DC -:1096B00063FE30B91B4B00201860C4F88004BDE87D -:1096C000F08105F589663046FDF788FD294630466C -:1096D000FDF772FF0028EDD0134B1A68BAB91D6070 -:1096E000104BB8F1000F16D01C600120BDE8F081CE -:1096F00005F589663046FBF7CDFC29463046FBF779 -:10970000F7FC0028BED0094B1A68002AE7D0054BA9 -:10971000B8F1000FE8D11A68002AE5D00120BDE8B1 -:10972000F08100BF6C97FF1F6897FF1F6497FF1FB2 -:1097300070B50446002060602073A064E064204699 -:10974000044D4FF47A76A66040F8105BFFF7E8FE10 -:10975000204670BD147B0100704700BF043000F04C -:109760008FBE00BF10B51C21044602F0B7FC204696 -:1097700010BD00BF2DE9F041C37B012B35D0867BA6 -:1097800004464EB1043000F07FFEB0F1FF0518BF73 -:1097900001252846BDE8F081071D384600F00AFE85 -:1097A000207B314600F004FE4FF00108FF213846CF -:1097B00000F088FE84F80E80384600F065FEA37B3A -:1097C000B0F1FF0518BF0125002BE2D0207B4146F8 -:1097D00000F0EEFDFF21384600F074FE384600F040 -:1097E00035FEA6732846BDE8F08100252846BDE871 -:1097F000F08100BF2DE9F043234F83B03B68009315 -:10980000009D05F59675044688469146ADB2061D45 -:1098100005E03B680193019BEB1A1B040ED4304614 -:1098200000F032FEFF282074F3D0FE281BD018234E -:10983000A07B637338B903B0BDE8F083A07B1D2320 -:1098400063730028F7D0207B012100F0B1FDFF21D8 -:10985000304600F037FE304600F0F8FD0020A073DF -:1098600003B0BDE8F0834A464146304600F01AFE98 -:10987000207438B9304600F007FE304600F004FE90 -:109880000120D8E72523D3E78C97FF1F70B5061D6D -:1098900015460446304600F015FE4FF40072294686 -:1098A000304600F01BFEFF21304600F00BFEFF218A -:1098B000304600F007FE304600F0E6FD00F01F03E2 -:1098C000052B207404D0A07B2023637310B970BDD6 -:1098D000012070BD207B012100F06AFDFF21304690 -:1098E00000F0F0FD304600F0B1FD0020A07370BD27 -:1098F0002DE9F041264F82B03B680193019D05F5AB -:1099000016758046ADB2061D05E03B680093009BCE -:10991000EB1A1B0413D4304600F0B6FDFF280446B2 -:10992000F3D1FD21304600F0CDFD98F80E30FBB9A3 -:10993000002388F80F30012002B0BDE8F08198F8CC -:109940000E001E2388F80D300028F5D098F80C0082 -:10995000012100F02DFDFF21304600F0B3FD30461F -:1099600000F074FD002088F80E0002B0BDE8F08120 -:1099700098F80C00012100F01BFD2146304600F054 -:10998000A1FD304600F062FD002388F80E30CFE7DD -:109990008C97FF1F2DE9F04103683A4C1B6A84B095 -:1099A000A342064601920F465DD1C37B022B5FD0D6 -:1099B000012B62D0B47B002C40D0351D0C2F15D06C -:1099C000DFF8C480D8F800300393039C04F5967444 -:1099D000A4B206E0D8F800300293029BE31A1B04FD -:1099E0003BD4284600F050FDFF28F3D147F040015A -:1099F000284600F067FD0DF1040802AC14F8011DC3 -:109A0000284600F05FFDA045F8D1002F0CBF95213E -:109A10008721284600F056FD284600F035FD0A242F -:109A2000284600F031FD013C10F0800F3074A4B2E4 -:109A300001D0002CF4D104B0BDE8F081351D2846DA -:109A400000F0B8FC307B214600F0B2FCFF21284634 -:109A500000F038FD0123B373B0E7002FC6D0FF201C -:109A600004B0BDE8F08198470028A3D1FF20F7E7B4 -:109A7000FFF73EFF0028F9D09CE700F07DF90028B1 -:109A8000F4D097E7DD9D00008C97FF1F2DE9F04390 -:109A900089B001AC84E80E00054600269DF804005C -:109AA0002873AE736E736E74904600F07DFC287B55 -:109AB000012100F07DFC6E4AAA6094E8070005AB26 -:109AC00083E807002F1D0ECB384600F0AFFCAC7BBF -:109AD000EE73002C57D0287B012100F069FC0A248A -:109AE000FF21384600F0EEFC611E11F0FF04F7D1B3 -:109AF0002146287B00F05CFC0A24002211462846FF -:109B0000FFF748FF0128064604F1FF330AD013F09F -:109B1000FF04F2D10123A87B6B73002841D109B067 -:109B2000BDE8F0834FF4D57208212846FFF732FFD5 -:109B3000420746D56E740026DFF83891D9F8003018 -:109B40000493049C04F5FA64A4B206E0D9F800304A -:109B50000593059BE31A1B045BD43721002228469A -:109B6000FFF718FF324629212846FFF713FF002888 -:109B7000ECD16B7C022B5ED0AB7B002B4DD13E49F0 -:109B80003E48002235E0384600F014FC287B214690 -:109B900000F00EFCFF21384600F094FC0123AB736B -:109BA00099E7287B012100F003FCFF21384600F0F3 -:109BB00089FC384600F04AFC0020A87309B0BDE8D3 -:109BC000F08302236B740424384600F05DFC631EAE -:109BD00013F0FF042874F7D1AA281CD16E7CA6F1DB -:109BE0000206B6FA86F67609B607A5E70132172A05 -:109BF0003CD031F8023BB0FBF3F34345F6D8204BA1 -:109C000053F82230012043F06053AB6009B0BDE847 -:109C1000F08317237FE706237DE7287B012100F0EF -:109C2000C7FBFF21384600F04DFC384600F00EFC23 -:109C30000023AB73A3E702463A212846FFF7AAFEAA -:109C400090B9384600F020FC00F0C003C02B04BFE0 -:109C500003236B74384600F017FC384600F014FC00 -:109C6000384600F011FC87E7122354E71622C6E7B6 -:109C7000065000388C97FF1FA4830100006CDC02A3 -:109C8000D4830100F8B5164600220446FFF782FE91 -:109C900098B11B236373A07B00B9F8BD207B251D01 -:109CA000012100F085FBFF21284600F00BFC28462F -:109CB00000F0CCFB0020A073F8BD05461022314611 -:109CC0002046FFF797FD0028E5D0A67B002EE4D0C4 -:109CD000207B271D012100F06BFBFF21384600F09F -:109CE000F1FB384600F0B2FBA5733046F8BD00BF6B -:109CF00000B585B06A460921FFF7C4FF38B19DF869 -:109D0000003013F0C00305D0402B24D0002005B054 -:109D10005DF804FB9DF809309DF80A209DF80610B7 -:109D20009DF807009DF808C003F003035B0043EAB9 -:109D3000D2139DF8052001F00301800040EA812044 -:109D400002F00F0240EA9C101344073B0130984098 -:109D500005B05DF804FB9DF809009DF807309DF8FB -:109D6000082003F03F03013000EB034000EB02202A -:109D7000800205B05DF804FBF8B50027C7733A46CA -:109D80000C210446FFF706FEA67B98B916B90126FA -:109D90003046F8BD0546271D207B012100F008FB59 -:109DA000FF21384600F08EFB384600F04FFBA573CC -:109DB0003046F8BD09236373002EE9D0207B251DB2 -:109DC000012100F0F5FAFF21284600F07BFB3E461A -:109DD000284600F03BFBA7733046F8BDC37B022B3F -:109DE00003D0012B03D001207047FFF781BDFFF79F -:109DF000C3BF00BFF8B5437C032B18BF490216460A -:109E00000A4618210446FFF7C5FD054698B10D2303 -:109E10006373A07B00B9F8BD207B251D012100F0F4 -:109E2000C7FAFF21284600F04DFB284600F00EFB44 -:109E30000020A073F8BD3246FE212046FFF726FD24 -:109E40000028E6D0A67B002EE5D0207B271D01212F -:109E500000F0AEFAFF21384600F034FB384600F03F -:109E6000F5FAA5733046F8BDF8B50646C07B012863 -:109E70000D4614461F4602D173698B420CD0737C89 -:109E8000032B14BF6A022A4612213046FFF782FDD7 -:109E9000F8B90123F3737561002517B90EE0AF42DD -:109EA0000CD021464FF400723046FFF7A3FC013579 -:109EB00004F500740028F2D10020F8BD7369307EEB -:109EC0003B4473610028F8D13046BDE8F840FFF705 -:109ED00053BFB37B0C227273002BEDD0307B341D4B -:109EE000012100F065FAFF21204600F0EBFA204640 -:109EF00000F0ACFA0020B073F8BD00BF2DE9F84FB8 -:109F00009B46C37BDDF82890DDF82C80012B0646AC -:109F10000C46154602D143698B420CD0737C032B4F -:109F200014BF6202224612213046FFF733FD30BBD8 -:109F300001237461F37304EB0B0ABBF1000F03D12F -:109F400012E0C847A2450FD04FF4007229463046B0 -:109F5000FFF750FC07464246204629460134002FB1 -:109F6000EFD10020BDE8F88F7369307E5B447361E8 -:109F70000028F7D13046BDE8F84FFFF7FDBEB37BB0 -:109F80000C227273002BECD0307B0121341D00F0C9 -:109F90000FFAFF21204600F095FA204600F056FA0D -:109FA0000020B073DEE700BF03682DE9F0415E6971 -:109FB000234B9E422AD1C37B012B04460D461746F4 -:109FC00002D1436999420CD0637C032B14BF6A020F -:109FD0002A4612212046FFF7DDFC80B90123E373F6 -:109FE00065614FF4007239462046FFF703FC50B11B -:109FF0006369207E01336361E0B1BDE8F081A37B3A -:10A000000C2262733BB90020BDE8F081B446012305 -:10A01000BDE8F0416047207B0121251D00F0C8F913 -:10A02000FF21284600F04EFA284600F00FFA0020E3 -:10A03000A073E2E72046BDE8F041FFF79DBE00BFF8 -:10A04000699E00002DE9F0470746C07B022882B0D8 -:10A050000C4691469A4602D17B698B420DD07B7C9F -:10A06000032B14BF6202224619213846FFF792FCE7 -:10A0700000284AD10223FB737C61BAF1000F21D082 -:10A080002C4D3E1D4FF000082B680193019C04F5F8 -:10A090001674A4B205E02B6800930099611A0B04B2 -:10A0A0001BD4304600F0F0F9FF28F4D14A46FC21D9 -:10A0B0003846FFF7EBFB90B108F10108C24509F5FE -:10A0C0000079E1D17B69387E53447B6150B93846D1 -:10A0D00002B0BDE8F047FFF70BBC24237B73BB7BCA -:10A0E0001BB9002002B0BDE8F087387B012100F0E9 -:10A0F0005FF9FF21304600F0E5F9304600F0A6F99F -:10A100000020B87302B0BDE8F087BB7B0E227A73E3 -:10A11000002BE6D0387B01213C1D00F049F9FF21DE -:10A12000204600F0CFF9204600F090F90020B873E7 -:10A13000D8E700BF8C97FF1F2DE9F04F85B0804610 -:10A140000093C37BDDF838B00192022B0F4602D199 -:10A1500043698B4210D098F81130032B14BF7A0258 -:10A160003A4619214046FFF715FC002857D1022333 -:10A17000C8F8147088F80F30019B2BB3019B344D45 -:10A1800008F1040607EB030A009B59463846984736 -:10A190002B680393039C04F516748146A4B205E072 -:10A1A0002B680293029BE31A1B041CD4304600F078 -:10A1B0006BF9FF28F4D14A46FC214046FFF766FBC5 -:10A1C000A0B10137BA45DFD1D8F81430019A98F818 -:10A1D00018001344C8F8143060B9404605B0BDE813 -:10A1E000F04FFFF785BB242388F80D3098F80E3028 -:10A1F0001BB9002005B0BDE8F08F98F80C000121D4 -:10A2000000F0D6F8FF21304600F05CF9304600F04F -:10A210001DF9002088F80E0005B0BDE8F08F98F811 -:10A220000E300E2288F80D20002BE2D098F80C009A -:10A23000012108F1040400F0BBF8FF21204600F0E2 -:10A2400041F9204600F002F9002088F80E00D1E71D -:10A250008C97FF1F037E002B56D02DE9F041036839 -:10A260009D6A354B9D4282B0074658D1C37B022B75 -:10A270000C46904602D1436999420DD07B7C032B5A -:10A2800014BF6202224619213846FFF783FB0028DB -:10A290003CD10223FB737C61284E33680193019DFE -:10A2A00005F516753C1DADB205E033680093009BC3 -:10A2B000EB1A1B0412D4204600F0E6F8FF28F4D174 -:10A2C0004246FC213846FFF7E1FA48B17B69387E07 -:10A2D00001337B6148B302B0BDE8F08124237B7376 -:10A2E000BB7B1BB9002002B0BDE8F081387B0121A7 -:10A2F00000F05EF8FF21204600F0E4F8204600F070 -:10A30000A5F80020B873E6E7FFF774BDBB7B0E220B -:10A310007A73002BE6D0387B01213C1DE8E701234E -:10A32000AC4602B0BDE8F0416047384602B0BDE837 -:10A33000F041FFF7DDBA00BF45A000008C97FF1F7A -:10A3400010B584B00DF1040C8CE80E009CE80E00F2 -:10A350000446FFF79BFB20B19DF8053003F0010395 -:10A36000237604B010BD00BF38B503680D4A1B6AE0 -:10A37000934204460D4607D1C37B022B08D0012B24 -:10A380000BD02576012038BD98470028F9D138BD7B -:10A39000FFF7AEFA0028FAD0F3E7FFF7EDFC00284C -:10A3A000F5D0EEE7DD9D0000012102F01DB900BFF0 -:10A3B00002F0E6B830B403684268D97AD1B172B617 -:10A3C000D97ACC0708D54FF0E024DD68D4F88001B5 -:10A3D00028409861C4F88001880708D54FF0E02430 -:10A3E0001D69D4F884012840D861C4F88401490764 -:10A3F0000ED462B61B68D968914207D0094C0A494D -:10A400001C6042F08040DA601861196030BC70470F -:10A410004FF0E0205C69D0F8881121401962C0F843 -:10A420008811E6E701403F0000003F8084B00DF155 -:10A43000100C0CE90E00044A002B08BF1346036001 -:10A44000184604B000F04CBB8C87FF1F0268D37A1B -:10A45000A3B1D80704D54FF0E0219069C1F80001FD -:10A46000990704D54FF0E021D069C1F804015B07DA -:10A4700004D54FF0E023126AC3F80821704700BFEB -:10A48000006800F06BBB00BF026812684FF000412B -:10A49000FF23D1625363D36A002BFCDA906BC0B206 -:10A4A000704700BF70B50C4605461646FF21204692 -:10A4B00006F060FE286833462246214600F078FB0D -:10A4C000002070BD03681A684FF00043D3625163E7 -:10A4D000D36A002BFCDA936B704700BF30B5531E74 -:10A4E000B3F5007FADF5017D1446054613D37AB16F -:10A4F0002B68481E196882184FF0004410F8013F7D -:10A50000CC624B63CB6A002BFCDA90428B6BF5D1AB -:10A510000DF5017D30BD684601F08EFC6A46286865 -:10A520002346114600F044FB0DF5017D30BD00BF10 -:10A5300070B50378D9071CD504464068E168036804 -:10A5400004F110065B6A324698470546A0B12378AD -:10A550009A0709D5A3686068E16819440368324620 -:10A560005B6A984740B1237823F0010323702846A3 -:10A5700070BD0125284670BD0025284670BD00BF6E -:10A58000F8B543680BB3C3688B4204460E461546C4 -:10A5900006D110F8103B05F003052B432370F8BDDE -:10A5A000FFF7C6FF88B16B0705D504F110073846E1 -:10A5B000E6600023EFE76068036804F110071B6999 -:10A5C0003A46314698470028F1D10020F8BD00BF37 -:10A5D000034B4FF0000C82F800C01B68184700BF07 -:10A5E0007497FF1F024A034B0349116018607047BC -:10A5F0007097FF1F7497FF1FD1A5000010B5044688 -:10A60000808982B018B10023A38102B010BD6368B5 -:10A61000A1688B42F9D201AA184600F0B1F880B1C6 -:10A62000019B6060B3F5803F01D298B2EDE7980AD4 -:10A63000C3F30902A2F51053A0F52150A38180B203 -:10A64000E3E74FF6FF70E0E7B1F5807F20D81029EF -:10A650002DD840234FF0200CB2FBF3F1B1F5806F01 -:10A660001FD210B5B2FBFCF403FB11234FEA910E8D -:10A670000CFB14222EF03F0E013242EA0E02C9B248 -:10A68000D2B2B3FBFCF3DBB203704270817010BD39 -:10A690003F239C46802910D9B1F5FC7F0FD81B01C0 -:10A6A000DAE7FF21FE230370417081707047202993 -:10A6B00016D880234FF0200CCEE7DB00CCE7B1F5B5 -:10A6C0007C7F04D9B1F5FC6F03D89B01C4E75B0123 -:10A6D000C2E7B1F57C6F94BFDB01C3EB0323BBE79B -:10A6E00020239C46D6E700BF7F280346A2EB010249 -:10A6F00005D8002A42D0084600F8013B7047B0F563 -:10A70000006F0DD2012A39D9820903F03F030846B0 -:10A7100062F03F0263F07F0300F8022B4B7070473A -:10A72000B0F5803F11D2022A28D9C3F38512000B5D -:10A7300003F03F0360F01F0062F07F0263F07F03CD -:10A7400008704A70C81C8B707047032A16D94FEAEC -:10A75000904CC3F38512C0F3053003F03F036CF057 -:10A760000F0C60F07F0062F07F0263F07F0348709F -:10A77000CB7081F800C08A70081D704700207047B8 -:10A78000884239D210B4034690F900001C780028A2 -:10A790002BDA04F0E000C02830D004F0F000E0280C -:10A7A00030D004F0F800F02823D104F0070404208E -:10A7B000184488421DD8013313F8011B01F0C00C66 -:10A7C000BCF1800F01F03F0141EA841411D18342B2 -:10A7D000F2D10E4BA4F1800199420AD8A4F5584356 -:10A7E000B3F5006F05D3146001E01460581C10BC71 -:10A7F0007047002010BC70470020704704F01F0411 -:10A800000220D5E704F00F040320D1E77FFF1000FA -:10A810007E2841D910B44FF0350C284C002305E0B8 -:10A8200034F8221081428CBF94461346ACEB0301EE -:10A83000012903EB5102F3D89BB234F82320904254 -:10A840001AD21F4C4FF04B0C002305E034F82210B5 -:10A8500081428CBF94461346ACEB0301012903EB04 -:10A860005102F3D89BB234F82320824204BF04EB98 -:10A870008304608810BC704704EB8304821AE37879 -:10A880009A42DEDA94F90230012B0FD09BB19BB2D1 -:10A89000034498B210BC7047A0F16103192B8CBF20 -:10A8A00000230123A0EB431398B2704702F001028A -:10A8B000831A98B2DEE74EF2A033E9E7D0820100B6 -:10A8C000A481010090F81CC04160BCF1020FC2607D -:10A8D00001D18368184700F07DBD00BF8446006841 -:10A8E0002DE9F0410C4611461A46C36813F0807FEB -:10A8F0007A4B03604BD1D30700F1D1809CF82460E0 -:10A90000174646EA0626002F00F0B78034B12678B5 -:10A91000637846EA032676BA0234B6B2DCF804302D -:10A9200093F808E0022F0EF1FF3E4FEA0E3E0CBFF7 -:10A9300046F0805346F010431FFA8EFE4363023FF9 -:10A940000AE011B105F8010B2946013A03F47043FE -:10A95000734517D9DCF80000C36A13F0F00FF5D087 -:10A9600012F0010F806B0D46EBD1C0F3072819B12F -:10A9700005F8028B4870294603F470437345A2F131 -:10A980000202E7D8002F78D0DCF80000BEE7D3073A -:10A990005FD49CF824701646BFB2002E45D024B177 -:10A9A000637814F8027B47EA0327DCF8043093F855 -:10A9B00008E0022E0EF1FF3E4FEA0E3E0CBF47F0BC -:10A9C000805347F010431FFA8EFE4363023E0AE0B5 -:10A9D00011B105F8010B2946013A03F470437345A0 -:10A9E00017D9DCF80000C36A13F0F00FF5D012F0AD -:10A9F000010F806B0D46EBD129B105F8020BC0F3B6 -:10AA000007204870294603F470437345A2F10202FF -:10AA1000E7D856B1DCF80000C1E729B100F8023BE5 -:10AA2000C3F307234B700146023A82B1DCF80030D1 -:10AA3000D86A10F0F00FF8D0D4079B6B0846ECD51D -:10AA400011B100F8013B0146013A002AEED1BDE800 -:10AA5000F08184B314F8013B012A18BF43F000438E -:10AA600043639CF82470561E96E7C3F3072419B17C -:10AA700000F8024B4B700146023A002AE7D0DCF89E -:10AA80000030D86A10F0F00FF7D0D4079B6B08465F -:10AA9000EBD511B100F8013B0146013AEDE79CB15D -:10AAA00014F8013B012A18BF43F0004343639CF8AC -:10AAB0002460571E25E79CF82470012A1ABF47F02E -:10AAC000004343634763CEE79CF82460012A1ABF22 -:10AAD00046F0004343634663EBE700BF00041F807A -:10AAE000436810B41C685A682168114302682160E9 -:10AAF000154C16491460D160154C1649146111604B -:10AB0000417A154A5C180A3194F824C053F8214060 -:10AB100002EBCC0149680C60017A5C1803EB8101FF -:10AB200094F818C0CC6902EBCC0149680C60817ABA -:10AB300010BC581803EB810390F83000596B02EBFE -:10AB4000C00253681960704701401F0001100038AF -:10AB50000110007800001F801486010010B44268C4 -:10AB600090F809C0104B944400219CF824C003EBDA -:10AB7000CC0CDCF80440216090F808C094449CF8A8 -:10AB800018C003EBCC0CDCF804402160847A006828 -:10AB90002244064C92F8302003EBC2035B68196034 -:10ABA000046010BC704700BF1486010001401F0004 -:10ABB0000BB1FFF793BE704770B4016B4A4A097935 -:10ABC000D177C16A09791177016B09791177826AA6 -:10ABD00003462AB34168C9688A4243D9C46A006BF4 -:10ABE000521A21689A620D6803F12404A5424FF0BD -:10ABF000010259D01C68E56815F0804F0D6829D115 -:10AC00002D780E6845F0004501360E6065633649C3 -:10AC10000079C87612B1DB6A1B79CB7670BC7047BD -:10AC20000168324C406B0A63CC62CC6824F08044EB -:10AC3000CC6004682E4924684FF0030C8C4283F8E2 -:10AC400025C039D1037F4260022BC26038D170BC6D -:10AC5000836818472D880E6845F0004502360E605F -:10AC60006563D4E7C16A0968CC8B260402F1FF3022 -:10AC700031D4C0F30E00C883CC8B186BA4B2CC8245 -:10AC80000468E58B2D041ED4C2F30E05E583E58B25 -:10AC9000ADB2E5820D680024013A9C6203F1240400 -:10ACA00018BF0122A542A5D11968CC6893F82440A9 -:10ACB00044F000444C63AAE72346114670BC184791 -:10ACC00070BC00F087BBE58BC2F3080605F47E4537 -:10ACD0003543E583DBE7CC8BC0F3080004F47E4406 -:10ACE0002043C883C8E700BF0080004000000FFF7A -:10ACF000C5A8000008B50248FFF75EFF08BD00BF09 -:10AD00008C87FF1F002202210280828082600273F2 -:10AD10000282426102768283026280F824200285E8 -:10AD2000C26280F830200287C263A0F84820C26463 -:10AD3000A0F858200266A0F868200267A0F87820E2 -:10AD4000C0F88020A0F88820C0F89020A0F89820B3 -:10AD5000C0F8A02080F8B910A0F8BA2080F8BC2074 -:10AD6000C0F8C020C0F8C420C0F8C820C0F8CC206B -:10AD7000C0F8D020C0F8D420A0F8A82080F8AA20DD -:10AD8000704700BF38B5057804462D2D08BF013443 -:10AD9000204605F073F92378642202FB00F0A3F14A -:10ADA0003002092A05D814F8013FA3F13002092A1C -:10ADB000F9D92E2B03D02D2D08BF404238BD637822 -:10ADC000303B092BF7D8A27803EB8303303A00EB32 -:10ADD0004300092A98BF80182D2D08BF404238BD76 -:10ADE00070B50D46044605F049F91C4BA3FB002342 -:10ADF0005B092B80642202FB13002278184BA2F11E -:10AE00003001092900FB03F305D814F8012FA2F142 -:10AE100030010929F9D92E2A0AD0124A03EB8303FB -:10AE20000133A2FB03235B0800226B602A7270BD12 -:10AE30006078A0F13001092904F10104EDD8084A35 -:10AE4000094E14F8010FA6FB02C2D20802FB01331F -:10AE5000A0F130010929F4D9DFE700BF1F85EB51CC -:10AE600080969800ABAAAAAACDCCCCCC2DE9F04113 -:10AE700090F8A9608CB004465EB390F8AA30A3F1B4 -:10AE80004102052A76D9A3F16102052A94BF573BF6 -:10AE9000303B94F8AB20A2F141011B010529DBB244 -:10AEA00040F23981A2F16101052994BF573A303A45 -:10AEB000134494F8A820DBB29A4200F0B780D4F88B -:10AEC000D03001330026C4F8D03030460CB0BDE895 -:10AED000F08190F8BA7037B390F8B930022B03D0F4 -:10AEE00090F8AA20002A47D1D4F8C450002DECD005 -:10AEF0002B4604F1AA0704E02D6B002DE5D0D4F811 -:10AF0000C430996AA86A06F05FFD0028DDD1EA6ABC -:10AF100094F8BA309A42D8DCEED11022394628464D -:10AF200006F074FAE8E700F1AA08BE49404606F0C8 -:10AF30004BFD30B1BC49404606F046FD002840F0CC -:10AF4000EC800127D4F8C05084F8B970C4F8C4501C -:10AF50002DB9BAE72D6BC4F8C450002DB5D0A86A3E -:10AF6000414606F031FD0028F4DBAED00023C4F8E2 -:10AF7000C430AAE7373B8CE747EA4317013F282F45 -:10AF8000B2D801A353F827F0BBB10000AFB1000065 -:10AF90009FB1000093B1000083B10000C5B1000073 -:10AFA00019B200000DB20000F7B10000E9AE0000D8 -:10AFB000E9AE0000E9AE0000E9AE0000E9AE000035 -:10AFC000E9AE0000E9AE0000E9AE0000E9AE000025 -:10AFD000E9AE0000E9AE0000E9AE0000E9AE000015 -:10AFE000E9AE0000E9AE0000E9AE0000E9AE000005 -:10AFF000E9AE0000E9AE0000E9AE0000E9AE0000F5 -:10B00000E9AE0000E9AE0000BBB10000E7B100000E -:10B01000AFB100009FB1000093B1000083B1000008 -:10B02000DDB10000D3B1000003B20000D4F8D43089 -:10B0300094F8BC200133C4F8D4307AB3D4F8CC30BF -:10B0400094F8B9100133C4F8CC30002900F0F48032 -:10B05000012929D0D4F8C450002D3FF436AFDFF8D1 -:10B06000CC812B4640F201170DE006F017FED8F810 -:10B0700000300B930B9B2B62AF842D6B002D3FF4A4 -:10B0800024AFD4F8C430996AA86A06F09DFC034640 -:10B09000294605F11000002BE7D016E794F8B930E7 -:10B0A000002B4AD0012BD5D1604F236CE3633B6862 -:10B0B0000293029B63643B680193236DE36440F257 -:10B0C0000115019B2587A4F848506365002AC1D06B -:10B0D000092204F11C01201D00F0AEFE092204F13A -:10B0E000280104F1100000F0A7FE3B680993099BBA -:10B0F0006363636E23663B680493049A3B6803931F -:10B10000039BE265626F2580A4F858502267E366CE -:10B11000A4F868509EE7373ACAE64549404606F02B -:10B1200053FC00283FF40EAF4249404606F04CFC69 -:10B13000071E18BF01277F0004E73C4D226D2B68D6 -:10B140000593059B636540F20113E264A4F848305F -:10B150002B680893089A2B680793D4F894100798E3 -:10B16000C4F88C2040F20113D4F8A420C4F89C0049 -:10B17000C4F89010A4F88830C4F8A020A4F898303F -:10B1800068E7A2F15702B2FA82F2520980F8302041 -:10B19000AAE600F12801AA30FFF722FEA4E6A2F1F8 -:10B1A0005302B2FA82F2520980F824209CE600F1A0 -:10B1B0001C01AA30FFF714FE96E6AA30FFF7E2FD65 -:10B1C000206591E6302A94BF0022012280F8BC203D -:10B1D0008AE6AA30FFF7D6FD606785E6AA30FFF75A -:10B1E000D1FD606680E6A2F14102B2FA82F2520914 -:10B1F00080F8BC2078E6AA30FFF7C4FDC4F88400CC -:10B2000072E6AA3004F03AFF20646DE6AA30FFF738 -:10B21000B9FDC4F8A40067E6AA3004F02FFFC4F813 -:10B22000940061E6A8840100B08401008C97FF1FA0 -:10B23000B8840100C0840100134D2B680593059A62 -:10B24000236DE36440F20117626504F11C010922D9 -:10B25000A4F84870201D00F0EFFD092204F1280138 -:10B2600004F1100000F0E8FD2B680A930A9B636369 -:10B27000D4F88430C4F880302B680693069B27806E -:10B28000E367A4F8787063E78C97FF1F38B5D0F8B0 -:10B29000C830A1F10A02013304460D46C0F8C83097 -:10B2A000222A2ED8DFE802F0182D2D182D2D2D2D55 -:10B2B0002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DBE -:10B2C0002D2D402D2D2D2D2D182D120090F8A8304C -:10B2D00083F02C0380F8A83094F8BB300E2B2ED9C5 -:10B2E000002094F8BA30A5F12A0500220133B5FAFE -:10B2F00085F56D0984F8BA3084F8BB2084F8A9502C -:10B3000038BD90F8BB300D2B05D8C218013380F83A -:10B31000BB3082F8AA1094F8A900C0B994F8A830FC -:10B320005D4084F8A85038BD00200223A4F8A8008E -:10B3300084F8B930A4F8BA0084F8BC0038BD2344BE -:10B34000002283F8AA202046FFF790FDC9E70020DD -:10B3500038BD00BF38B5044600238068637004F030 -:10B3600027FC0B4904F030FD0546A08804F024FCBE -:10B370000146284604F06CFB03F0E4FF247B024600 -:10B380000B460CB101F100431046194638BD00BF11 -:10B39000286B6E4E38B5044600234069637004F094 -:10B3A00007FC0B4904F010FD0546208A04F004FC5C -:10B3B0000146284604F04CFB03F0C4FF247E0246FD -:10B3C0000B460CB101F100431046194638BD00BFD1 -:10B3D000286B6E4EEFF3108272B6437F5BB9017F2C -:10B3E000012930B40BD0032913D00123437702B9CC -:10B3F00062B630BC70470AB962B670477047124CEB -:10B400002168B1B1114943610B68836108605861DB -:10B41000EBE70F4D0F492C688CB143610B688361DA -:10B4200058614FF0E0234FF080540860C3F8044D9A -:10B43000DBE7064B4161816120601860D5E744611C -:10B4400084612860EDE700BF7897FF1F8897FF1F92 -:10B450008097FF1F7C97FF1F70B5EFF3108272B6C5 -:10B460000C4C206880B10C4E00254369236073B1F9 -:10B470009D6102B962B6836845779847EFF3108201 -:10B4800072B620680028F0D102B962B670BD336090 -:10B49000EFE700BF8097FF1F7C97FF1FFFF7DCBF20 -:10B4A000024A136801331360704700BF8C97FF1F77 -:10B4B0000368C9B21B6818470368C9B21B681847FC -:10B4C0000368C9B21B6818470368C9B21B681847EC -:10B4D0004B0803F1376303F5D83310B50446B3FBCB -:10B4E000F1F001F07FF9044B1B7803B110BD204649 -:10B4F000BDE8104003F0F6BC4188FF1F08B50846C0 -:10B5000001F072FB012008BD08B5084601F06CFB94 -:10B51000012008BD38B508460D4606F0B1FC0446CA -:10B520000146284601F06AFB204638BD10B50846A2 -:10B530001446114601F062FB204610BD0846114634 -:10B5400001F08ABD0846114601F06ABD01F082BCD7 -:10B5500008B5084601F01EFB003818BF012008BDE1 -:10B5600008B5084601F0F4FA003818BF012008BDFC -:10B570000846114601F084BA084601F0BFBA00BF80 -:10B58000084601F061BA00BF01F0F8B910B54B08E8 -:10B5900003F13763144603F5D833B3FBF1F001F040 -:10B5A00021F92046BDE8104001F08AB901F02CBC19 -:10B5B00001F0E4BB01F0CEBB01F0A8BB01F0B2BBCF -:10B5C0004B0803F1376303F5D83310B50446B3FBDA -:10B5D000F1F001F051FD044B1B7803B110BD204682 -:10B5E000BDE8104003F07EBC4288FF1F08B5084646 -:10B5F00001F040FF012008BD08B5084601F03AFF00 -:10B60000012008BD38B508460D4606F039FC044651 -:10B610000146284601F0AAFF204638BD10B508466D -:10B620001446114601F0A2FF204610BD08461146FF -:10B6300002F0CAB90846114602F0AAB902F0C2B82F -:10B6400008B5084601F0F6FE003818BF012008BD15 -:10B6500008B5084601F0CCFE003818BF012008BD2F -:10B660000846114601F058BE084601F093BE00BFDF -:10B67000084601F035BE00BF01F0CABD10B54B0849 -:10B6800003F13763144603F5D833B3FBF1F001F04F -:10B69000F3FC2046BDE8104001F05CBD02F06CB840 -:10B6A00002F024B802F00EB801F0E8BF01F0F2BFDA -:10B6B0000368064A1B68934205D110B5C8B201F071 -:10B6C000D9FE012010BDC9B2184700BFF9B500006E -:10B6D0000368064A1B68934205D110B5C8B201F051 -:10B6E000C9FE012010BDC9B2184700BFF9B500005E -:10B6F0000368064A1B68934205D110B5C8B201F031 -:10B70000B9FE012010BDC9B2184700BFF9B500004D -:10B710000368064A1B68934205D110B5C8B201F010 -:10B72000A9FE012010BDC9B2184700BFF9B500003D -:10B730004B0803F1B76303F5584310B50446B3FB58 -:10B74000F1F002F0C7F9044B1B7803B110BD20469D -:10B75000BDE8104003F0C6BB4388FF1F08B508468C -:10B7600002F024FB012008BD08B5084602F01EFBCC -:10B77000012008BD38B508460D4606F081FB044699 -:10B780000146284602F01CFB204638BD10B508468D -:10B790001446114602F014FB204610BD084611461F -:10B7A00002F088BC0846114602F068BC02F0C0BB3B -:10B7B00008B5084602F0DAFA003818BF012008BDC3 -:10B7C00008B5084602F0B0FA003818BF012008BDDD -:10B7D0000846114602F07ABA084602F0A3BA00BF42 -:10B7E000084602F057BA00BF02F01EBA10B54B0867 -:10B7F00003F1B763144603F55843B3FBF1F002F0CD -:10B8000069F92046BDE8104002F0B0B902F06ABB09 -:10B8100002F022BB02F00CBB02F0E6BA02F0F0BA72 -:10B820000368064A1B68934205D110B5C8B202F0FE -:10B83000BDFA012010BDC9B2184700BF69B70000AA -:10B840000368064A1B68934205D110B5C8B202F0DE -:10B85000ADFA012010BDC9B2184700BF69B700009A -:10B860000368064A1B68934205D110B5C8B202F0BE -:10B870009DFA012010BDC9B2184700BF69B700008A -:10B880000368064A1B68934205D110B5C8B202F09E -:10B890008DFA012010BDC9B2184700BF69B700007A -:10B8A000F8B50C4671B182B106468F180025336891 -:10B8B00014F8011B1B6830469847BC420544F6D17A -:10B8C0002846F8BD0D462846F8BD1546F8E700BFE6 -:10B8D00070B5012A8AB008BF0A22A1B34FF0210E29 -:10B8E00002E05FFA86FE2946B1FBF2F502FB151471 -:10B8F0005FFA84FC092C0CF1300498BF5FFA84FCD9 -:10B900000EF1280488BF0CF1370C6C4488BF5FFA35 -:10B910008CFC91420EF1FF3604F824CCE1D24BB1FD -:10B920000EF1FF3E5FFA8EFE0EF128036B442D22CE -:10B9300003F8242C036801A95B68CEF1220271444C -:10B9400098470AB070BD30228DF825204FF0210EA7 -:10B95000E5E700BF2DE9F0418C688AB0DCB1002535 -:10B96000884606462F462B46212201A9404600F074 -:10B9700041FA3368202C22465B6828BF202201A9A7 -:10B9800030461544A41A98470744002CEBD138469A -:10B990000AB0BDE8F081274638460AB0BDE8F0811C -:10B9A0000029BABF49422D2300230A22FFF790BF86 -:10B9B00000B5036883B040F60D22ADF804205B6843 -:10B9C000022201A9984703B05DF804FB034B02284B -:10B9D00088BF034618461B685B6818474488FF1FEA -:10B9E00032B9036800B51B685DF804EBC9B21847AB -:10B9F000FFF76EBF524A2DE9F043A2FB00435B09FB -:10BA0000A2FB0342C3EB03145209A0EB84004D4C8C -:10BA10000870C2EB0215A4FB024EA3EB85034FEAAC -:10BA20001E1E4B70484B494E494FDFF828810EF1DE -:10BA30000400A3FB00430EEB4E04A2EBC4028A7089 -:10BA4000C21A03EB52039B08C3EBC303C31A0020C3 -:10BA5000CB70024640F26D190DE0B7EBB40F48D33E -:10BA6000B8EB341F34BF4C464FF4B77422449645AC -:10BA700000F101000FD35FFA80FC0CF2B27313F0F7 -:10BA8000030506FB03F4E8D040F26D14224496450A -:10BA900000F10100EFD2304E0CF1460CA6FB03067C -:10BAA00081F806C0770995B36420F60900FB1737C3 -:10BAB0004FF4C87000FB163640F26D10AEEB020E6C -:10BAC00070440122DFF894E000230AE013F80E40EE -:10BAD000844211D80C2AA0EB04000ED001320133AD -:10BAE000D2B2012B5FFA83FCF0D15DB9DFB11D2426 -:10BAF00009E04FF4B774B9E7624601304A71087142 -:10BB0000BDE8F0831C24A04217D3001BE6E76420A5 -:10BB100000FB1737F6094FF4C87000FB16363FB12B -:10BB20004FF4B770CAE7002E14BF1C241D24EAE7A7 -:10BB3000002EC1D14FF4B770C0E70122DDE700BF8E -:10BB400089888888ABAAAAAA25499224295C8FC231 -:10BB5000285C8F020AD7A3001F85EB5100860100E5 -:10BB6000F8B50026044606604660866029B108469E -:10BB70000D4606F085F9074608B92046F8BD0130A4 -:10BB800004F096FA0028F8D0C4E900070670A76010 -:10BB9000294606F083F82046F8BD00BFF8B5884274 -:10BBA0004FF00005044605604560856002D08E6850 -:10BBB0000F680EB92046F8BD701C04F079FA002811 -:10BBC000F8D0C4E900060570A660394606F066F8AC -:10BBD0002046F8BD10B50446006804F071FA20460E -:10BBE00010BD00BFF8B50446154632B9036803B16D -:10BBF0001A700023A3602046F8BD43689A420E469F -:10BC00001CD90068511C04F01FFD074660B1A368F1 -:10BC1000206065600BB903702768A560314638461F -:10BC200006F03CF82046F8BD206810B104F048FA50 -:10BC3000276000236360A3602046F8BD0768A56005 -:10BC40003146384606F02AF8ECE700BF10B500236D -:10BC500082B003604360836004460A22084601A95B -:10BC600005F0D4F801A806F00BF901A90246204618 -:10BC7000FFF7B8FF204602B010BD00BF10B500238B -:10BC80008AB00360436083600446084601A904F05B -:10BC9000F9F901A806F0F4F801A902462046FFF7D9 -:10BCA000A1FF20460AB010BD10B500238AB0036082 -:10BCB000436083600446084601A900F03FFA01A8EA -:10BCC00006F0DEF801A902462046FFF78BFF20466A -:10BCD0000AB010BD10B500238AB0036043608360D2 -:10BCE0000446084601A900F0FBF901A806F0C8F8CF -:10BCF00001A902462046FFF775FF20460AB010BD95 -:10BD000030B5044600238BB0084623606360A3600F -:10BD1000911C6B4600F020FA054648B106F0B0F8D9 -:10BD2000294602462046FFF75DFF20460BB030BD96 -:10BD3000A06020460BB030BD814203D08A680968FC -:10BD4000FFF750BF704700BF2DE9F8430446006875 -:10BD5000A36888420D46164609D8C218914206D2F9 -:10BD60000F1A4FF0010936B92046BDE8F8834FF0AD -:10BD70000009002EF8D0626803EB060890450CD944 -:10BD800008F1010104F060FC0028EDD0A368C4E9CB -:10BD9000000813B903702068A368B9F1000F08D137 -:10BDA0002946184405F07AFFC4F808802046BDE80B -:10BDB000F8833246C119184400F03EF82368002287 -:10BDC00003F80820F0E700BF10B58A680968044648 -:10BDD000FFF7BAFF204610BD38B5054641B1084609 -:10BDE0000C4606F04DF8214602462846FFF7ACFF08 -:10BDF000284638BDBAB138B50C4621B185689D4298 -:10BE000002D800230B7038BDED1A02F1FF3C016827 -:10BE1000654528BF654619442A46204605F0F6FACE -:10BE20000023635538BD704708B5F6F76DF8F7F78E -:10BE3000A9F902F0DFFFFAE701B441EA000313F0C9 -:10BE400003036FD1403A41D351F8043B40F8043B1F -:10BE500051F8043B40F8043B51F8043B40F8043BE4 -:10BE600051F8043B40F8043B51F8043B40F8043BD4 -:10BE700051F8043B40F8043B51F8043B40F8043BC4 -:10BE800051F8043B40F8043B51F8043B40F8043BB4 -:10BE900051F8043B40F8043B51F8043B40F8043BA4 -:10BEA00051F8043B40F8043B51F8043B40F8043B94 -:10BEB00051F8043B40F8043B51F8043B40F8043B84 -:10BEC00051F8043B40F8043B403ABDD2303211D324 -:10BED00051F8043B40F8043B51F8043B40F8043B64 -:10BEE00051F8043B40F8043B51F8043B40F8043B54 -:10BEF000103AEDD20C3205D351F8043B40F8043B24 -:10BF0000043AF9D204320AD0D2071CBF11F8013B1F -:10BF100000F8013B03D30B7803704B78437001BCEE -:10BF2000704700BF0C2A4AD310F0030311D0C3F1AD -:10BF30000403D21ADB071CBF11F8013B00F8013BD8 -:10BF400007D311F8013B00F8013B11F8013B00F861 -:10BF5000013B11F003033FF475AF30B4043AC91A42 -:10BF6000C3F1040C51F8044B022B19D0032B0BD056 -:10BF7000240A51F8043B1D0644EA050440F8044B2A -:10BF80001C46043AF4D216E0240E51F8043B1D027C -:10BF900044EA050440F8044B1C46043AF4D20AE093 -:10BFA000240C51F8043B1D0444EA050440F8044BFA -:10BFB0001C46043AF4D20432B1EB0C0130BC043A12 -:10BFC000A0D3013A11F8013B00F8013BF9D20B78FC -:10BFD00003704B7843708B78837001BC704700BF4F -:10BFE00008B50F4C636B58030DD4636B59050FD420 -:10BFF000636B1A0511D4636BDB04F3D501F0AAFF60 -:10C00000636B5803F1D502F027F9636B5905EFD53F -:10C0100000F044FF636B1A05EDD501F0F7FBEAE78A -:10C020000080044008B5FFF7DBFF00BF014B102282 -:10C030001A80704700200540704700BF094A08B5C4 -:10C040000346106833B169460344A1F580518B4221 -:10C0500001D2136008BD05F09FFC0C2303604FF074 -:10C06000FF3008BD0088FF1F002070474FF0FF30F1 -:10C07000704700BF4FF400534B600020704700BF73 -:10C08000012070474FF0FF30704700BFFEE700BF50 -:10C09000FEE7FFFFEFF31383CBB9EFF31080A0B9F6 -:10C0A000EFF3058343B94FF48070EFF311835BB175 -:10C0B000984228BF184670470F2BF6D9054AD05C26 -:10C0C000EFF31183002BF3D17047184670474FF000 -:10C0D000FF307047F0E300E003F0EABF03F0F0BF89 -:10C0E00001F1FF3C70B56546002401E07046013463 -:10C0F000B0FBF2FE02FB1E03092B03F130068ABFE0 -:10C100003733F3B2DBB2904205F8013FEED2631C45 -:10C110000022CA54C8187CB162461CF8015F10F8AE -:10C1200001ED8CF800E0A1EB0C030232013B521A46 -:10C1300023449A420570EFDB084670BD031E01DB05 -:10C14000FFF7CEBF10B52D200C4601F8010B584269 -:10C15000FFF7C6FF204610BD2DE9F04F894685B098 -:10C160000146044690461F4603F040FF89EAE976FF -:10C17000A6EBE976002840F0458124F00045B64959 -:10C18000284603F033FF78BBB349284603F010FF7D -:10C1900050BB0021204603F001FF002840F0EC8056 -:10C1A000032E6FDD0325B9F1000FA6EB050562DB59 -:10C1B0000021204603F0F2FE002840F078814E2353 -:10C1C000492146227B703970FB1CBA7035B1184684 -:10C1D0002A46202104F0CEFF03462B4400221846B5 -:10C1E0001A7005B0BDE8F08F02AB01AA41462046A7 -:10C1F00005F09AFBDDF804B058EA0B034646054605 -:10C2000051D101230278954D01939B46944BDA4618 -:10C21000342A88BF1D46029B002B5DD00AF1010A1B -:10C22000A9EB0A04002C07EB0A0640F3A180224682 -:10C230002021384604F09EFF264407EB040C2D23F2 -:10C24000BBF1000F0CF8013B57D061DAB8F1000FD9 -:10C250005ED06346302103F8021BCBF1000B2E2287 -:10C260008CF8012018465A4604F084FF002300EBA6 -:10C270000B0C01934CE02DB138462A46202104F0E6 -:10C2800079FF2F440021204603F088FE002800F0AB -:10C29000DB804E232D2049214622BB7038707970F7 -:10C2A0003B1DFA709AE7CBF10003984580F2A68017 -:10C2B000C8F1000B4FF0010A684DCDF804B05046AC -:10C2C000D345B8BF0AF1010ABBF1000F68D1029B48 -:10C2D0000AF1010A002BA1D1A9EB0A04002C07EBFB -:10C2E0000A0647DD22462021384604F043FF264453 -:10C2F00007EB040CBBF1000FA7D1B8F1000F07D07A -:10C300006346302203F8022B2E228CF801209C4633 -:10C31000B44522D2634615F8012B03F8012BB34232 -:10C320001CD0019A2E20013A0EE08CF801000CF18D -:10C33000020CB445634602F1FF320ED215F8011B20 -:10C3400003F8011BB34209D00192002AEDD09C46AC -:10C35000B445634602F1FF32F0D36646B9F1000FEF -:10C360000EDB002333703B46184605B0BDE8F08F66 -:10C37000BC4664E7BC46BDE7042E8ADD042512E70F -:10C38000CA44BAF1000F6FEA0A04EADA24EAE47454 -:10C39000013430462246202104F0ECFE2644E0E73A -:10C3A000BFF639AFB8F1000F3FF435AF0BEB080320 -:10C3B000984208F1020A7FF62EAFB8F1000F07DDB0 -:10C3C000284D2046294603F04BFC013E0446F8D197 -:10C3D00002AB03AA3146204605F0A6FADDF804B008 -:10C3E000039B08F10102A3EB0B03934208BF0BF17F -:10C3F000010B054608BFCDF804B00CE705F040FD81 -:10C4000082465DE70021204603F0C8FD002814BFE6 -:10C4100004250325B5422EDAB9F1000FA6EB050578 -:10C4200022DB4FF07E53204663F31E00002103F011 -:10C43000B5FDC0BB4E2241237B703A70FB1CBA7025 -:10C44000002D7FF4C4AEC9E64E23492146227B70FD -:10C450003970FB1CBA70C1E6FFFF7F7F0C860100BC -:10C4600010860100000020412DB138462A462021C7 -:10C4700004F080FE2F444FF07E53204663F31E00ED -:10C48000002103F08BFD4E2238B141232D21BB70DA -:10C4900039707A703B1DFA70A0E641237B703A70C8 -:10C4A000FB1CBA709AE62D2307F8013BC2E72D2347 -:10C4B00007F8013B83E600BF014B1868704700BFD7 -:10C4C00000D00340034B002210215A615A601860CB -:10C4D0005961704700D00340704700BFF0B54FF07E -:10C4E000E0244FF400054FF0807CC4F80851C4F8F4 -:10C4F00008C14FF0007CC4F808C11D4A1D481E4900 -:10C500004FF0806CC4F808C1282300274BF6FF7653 -:10C5100009254FF0006CC4F808C183B057609660DD -:10C52000D3605361D3615362D3625363D363536463 -:10C53000156047608660C360436105604F608E6030 -:10C54000CB604B610D6002F0F5FCFFF7C5FF0B4CB3 -:10C5500023680093009B132BFAD902F037FA236863 -:10C560000193019BB3F5967FF9D303B0F0BD00BFF3 -:10C57000008003400090034000800B408C97FF1F19 -:10C58000212816D810B4104B53F8302092F880426E -:10C590002CB1012371B982F8003110BC704703EB54 -:10C5A000C0035B681A6849B142F0030210BC1A600C -:10C5B0007047704782F8803010BC704722F002024A -:10C5C00010BC1A60704700BF14860100212806D8ED -:10C5D000044B53F8303093F80002C0B2704700208B -:10C5E000704700BF14860100212820D81B4A02EBA7 -:10C5F000C00301295B680FD004291DD052F8300018 -:10C60000002280F8802299B1022922D003290DD17D -:10C610004FF481721A60704752F830004FF4A272E2 -:10C6200080F880121A601A6822F020021A6070479F -:10C630004FF480721A60704752F830104FF4A272B3 -:10C64000012081F880021A601A6842F020021A6004 -:10C65000704740F203121A60704700BF1486010051 -:10C660002DE9F843044672B6204F4FF0E02293695B -:10C670003D68D2F8042D62B6520102D5322B88BF34 -:10C6800001350CB9BDE8F883DFF86490DFF8648009 -:10C69000A9EB0303A8FB03234FF47A7202FB05F511 -:10C6A00005EB93154FF0E02672B6B1693A68D6F8FB -:10C6B00004CD62B6A9EB0103A8FB03031CF0806F55 -:10C6C000C5EB93134FF47A7002D0322988BF013240 -:10C6D00000FB0233B3F57A7F04D3013CD2D005F5D9 -:10C6E0007A75E1E702F086FBDEE700BF8C97FF1F5B -:10C6F000FF760100ABAAAAAA2DE9F84F314B1B68BF -:10C7000007460BB101221A70DFF8BC90DFF8BC803D -:10C7100099F80040D8F800302D4D01349C422B7818 -:10C720002AD303F0FF0A002B3ED15446294EDFF8EE -:10C73000A8B005E033791B0623D42B78A3420AD195 -:10C74000FFF7A8FC4028F5DDFF28F6DD02F052FBDC -:10C750002B78A342F4D03F2C29D9204B403C1B68B6 -:10C76000FFB21F551E4A1B4B01211170BC2289F8D4 -:10C7700000A0DA70BDE8F88F9C425FFA84FAD5D049 -:10C78000E9E72B78D8F800105A1C8A42DBB203D2B2 -:10C790003F2A10D8D1B201E000210A461BF802302E -:10C7A000DBB2F3712970C8E74FF0000A54460A4B18 -:10C7B000FFB21F55D6E7D1B2084A3F3B1268D35C9F -:10C7C000DBB2EEE7E097FF1F2898FF1F1088FF1FDE -:10C7D0003098FF1F00A00640E897FF1F2C98FF1F0E -:10C7E000E497FF1F2A4A2B49536B70B443F48063CC -:10C7F000294D536300232B70284E0B70284C294978 -:10C80000237032780B7028490B709AB3152A03D124 -:10C81000264B40F213329A61254B1B78012B31D005 -:10C82000052B03D1214B4FF45172DA612028214BA3 -:10C83000214C38BF2020C0F3443C83F800C0C0F333 -:10C84000471C00F01F0083F801C0042298720220E8 -:10C850009A70D87488205A754FF0E02118744022DD -:10C860003C20D87084F82D204FF4005370BCC1F8E0 -:10C8700004317047114B40F213321A640C4B1B7891 -:10C88000012BCDD10D4B4FF451725A64CEE700BF4E -:10C8900000800440DC97FF1FD497FF1FDD97FF1F28 -:10C8A0002898FF1F3098FF1FE497FF1F00C0044027 -:10C8B0001488FF1F00A0064000E400E000A0044030 -:10C8C000294B29499B7800F0030203F0EC03134342 -:10C8D000420700F00F0248BF43F01003042A8B7098 -:10C8E00003D18B7943F040038B711F4B5A79C306F8 -:10C8F00002F0EF021C4B48BF42F010025A719A79C5 -:10C90000810602F0EF0211D542F0100281059A7102 -:10C910000FD59A78154942F0A0029A700978144B05 -:10C9200003EBC10340F246325B6814E09A71820562 -:10C9300005D4104B104A1968914211D070479A786B -:10C940000A4942F0A0029A700978094B03EBC1032F -:10C9500040F247325B68074907481A600860704731 -:10C9600000221A60704700BF00A006401488FF1F15 -:10C9700014860100E097FF1FD400D442284B5B6B64 -:10C980005B054CD510B5274C237823B102F032FA61 -:10C990002378002BFAD1244A244B4FF0E0204FF4A7 -:10C9A00000540021C0F88441D1701B7863B3152B6B -:10C9B0001BD01F4B1B7803F07F03012B1FD0052BCF -:10C9C0000ED01C4B184A1C4C1C48196892F804C025 -:10C9D000D27900232370037009B101230B7010BDBD -:10C9E000174B40F20312DA61EBE7154B40F20312EA -:10C9F0009A610F4B1B7803F07F03012BDFD1114BA2 -:10CA000040F203125A64DCE70E4B40F203121A6440 -:10CA1000074B1B7803F07F03012BD0D1EFE7704762 -:10CA200000800440E497FF1F00A00640DD97FF1F31 -:10CA30001488FF1F9097FF1FD497FF1FDC97FF1FDD -:10CA400000C0044000A004400A4A38B505461378E7 -:10CA500003F0FF04002BFAD101212846FFF7C4FDA3 -:10CA600021462846FFF78CFD034A044B52F8352037 -:10CA70001A6038BDE497FF1F14860100E097FF1F7E -:10CA800009B140F08000194A1378834217D010B4DE -:10CA9000174C646B64050FD503F07F03012B21D085 -:10CAA000052B14D0002900F07F0314BF602144211E -:10CAB000012B10D0052B03D0107010BC70477047AD -:10CAC0000C4B41F44071D961107010BC7047094B98 -:10CAD0000024DC61E6E7084B41F4407159641070B2 -:10CAE00010BC7047044B00245C64DBE71488FF1F14 -:10CAF0000080044000C0044000A00440104A1378A5 -:10CB000083420AD00F49496B490505D5ABB1152BB6 -:10CB100009D068B1152801D0107070470A4B40F257 -:10CB200013319961F8E7084B002199610028F1D190 -:10CB3000064B40F213311964EEE704490B64E8E751 -:10CB4000DD97FF1F0080044000C0044000A00440A7 -:10CB50000D4B5B6B13F4806313D0212803D90B4B6F -:10CB60000020186070470A4B10B5084C53F830305D -:10CB700023600121FFF738FD236800221A7001208D -:10CB800010BD1846704700BF008004409097FF1FFB -:10CB900014860100104B5B6B13F4806312D01228D3 -:10CBA0000BD0142810D10D4B40F202325A610C4ABE -:10CBB000537B01200343537370470A4B40F2023208 -:10CBC000DA60F4E718467047054A537B03F0FE032A -:10CBD00000205373704700BF0080044000C0044031 -:10CBE00000A0064000A00440034B5B6B5B0501D531 -:10CBF000FFF782BD704700BF008004402DE9F84F69 -:10CC0000394B5B6B5A053CD5384B1B680BB1012285 -:10CC10001A704718B84231D2354EDFF8D880364CFA -:10CC2000DFF8D89000F1010A13E003F0FF0B53B3D3 -:10CC30004FF0000B5D46324A1AF8013C53555246FC -:10CC400030490123BA420B700AF1010A86F800B09C -:10CC500014D23578D8F800300135AB422378E4D9C6 -:10CC6000AB425FFA85FB0FD03F2DE4D9264B1AF873 -:10CC7000012C1B68403D5A555246E1E71F4BBC2230 -:10CC8000DA70BDE8F88F5D466FF0430389F8033032 -:10CC900006E099F804301B060BD42378AB42E3D1AD -:10CCA000FFF7F8F94028F4DDFF28F6DD02F0A2F8DE -:10CCB000F3E72378D8F800105A1C9142DBB203D96D -:10CCC0003F2A0AD8D1B201E000210A460C4B9B5CF6 -:10CCD000DBB289F807302170DFE7D1B20A4A3F3B67 -:10CCE0001268D35CDBB2F4E700800440E097FF1FDA -:10CCF0002898FF1F1088FF1F3098FF1F00A00640D4 -:10CD0000E897FF1FE497FF1F2C98FF1F10B5044CF6 -:10CD1000237823B102F06EF82378002BFAD110BDEE -:10CD2000E497FF1F084A094B11781A789142C8B25C -:10CD3000D3B202D2013B181A7047054A1268013A71 -:10CD40001344181A704700BF2898FF1F3098FF1F20 -:10CD50001088FF1F064A074B11781A789142D0B20B -:10CD60003CBF054A1268CBB238BF9B18181A7047EF -:10CD7000D497FF1FDC97FF1F0C88FF1F1B4B1C491C -:10CD80001A780B789A422ED010B55FFA82FE194AB3 -:10CD9000D8B21268431C9A4219D93F2B1BD85FFAAC -:10CDA00083FC1548C05CC0B281F800C01349096813 -:10CDB00061B19E453CBF7244D31A114A126828BF24 -:10CDC000AEEB03039A4201D300230B7010BD4FF06A -:10CDD000000C6346E5E70B4C3F382468205C5FFAA3 -:10CDE00083FCC0B2E0E74FF0FF307047D497FF1FDD -:10CDF000DC97FF1F0C88FF1F9497FF1F9097FF1F62 -:10CE00000888FF1FD897FF1F0D4A0E4B11781B781B -:10CE10009942DAB211D00C490968531C994207D9DA -:10CE20003F2B06D9094B3F3A1B68985CC0B270474C -:10CE30000023074AD05CC0B270474FF0FF30704704 -:10CE4000D497FF1FDC97FF1F0C88FF1FD897FF1F89 -:10CE50009497FF1F0C4B5B6B5B0514D50B4B0C4879 -:10CE6000DA78402102F0CB02DA705974DA78094995 -:10CE700042F03402DA70084A03781268DBB20B70B1 -:10CE80000AB10023137070470080044000A00640E0 -:10CE9000DC97FF1FD497FF1F9097FF1F2DE9F041EC -:10CEA000504C237913F0300F47D072B6A37D03F0B6 -:10CEB000FF01002B58D062B6DFF82C814B4898F860 -:10CEC00000304B4A057816684A4F5FFA83FC4A4B9C -:10CED000EDB2D3F800E008E01DB14FF0000C07F808 -:10CEE0000C304A1E12F0FF0112D0E3790CF101025E -:10CEF0009642DBB2F0D99542ACF13F00F1D03F2A27 -:10CF00006DD994464A1E12F0FF010EF80030ECD1A4 -:10CF10005FFA8CF388F80030384B196869B1AC457A -:10CF20003CBF721B02EB0C03354A126828BFACEB06 -:10CF300005039A429CBF01230B702A48C3781E0642 -:10CF4000DDB216D46A060DD5264B1B795B0609D5D2 -:10CF50002C4B2D491B6800220A7003B11A70214B1B -:10CF60003C22DA70BDE8F0814023E279637462B656 -:10CF7000E3E703791C06E5D5244B254ADFF894E066 -:10CF80001C7816689EF80030234A244FD2F800C05F -:10CF9000E4B2DBB207E003790023FA5CD2B2C271DB -:10CFA000027D072A11D8A34203F101010ED08E425F -:10CFB000F1D93F290279A3F13F0301D80B46ECE7F1 -:10CFC0001CF803200B46D2B2E9E7DCB2054B8EF821 -:10CFD00000401A79110644BF7C22DA70B2E7944609 -:10CFE0007DE700BF00A00640D497FF1FDC97FF1F1E -:10CFF0000C88FF1F9497FF1FD897FF1F9097FF1F64 -:10D000000488FF1FE097FF1FE497FF1F2898FF1F6A -:10D010001088FF1F3098FF1F2C98FF1FE897FF1FF5 -:10D02000094B10B4186060B101F14004074B084887 -:10D0300001F11A021A60074B0460283110BC196014 -:10D0400070474024F2E700BFD897FF1F0888FF1FF2 -:10D050000C88FF1F0488FF1F054B186018B1054B93 -:10D06000403119607047034B40211960704700BF81 -:10D070002C98FF1F1088FF1F2A4A2B49536B70B44E -:10D0800043F40063294D5363294E2A4C3278002320 -:10D090002B700B70284923700B702849092A0B70DC -:10D0A00033D01A2A03D1264B40F213325A60254B53 -:10D0B0001B780A2B31D01F2B03D1214B4FF4517217 -:10D0C0001A602028204B214C38BF2020C0F3443C5C -:10D0D00083F800C0C0F3471C00F01F0083F801C0B4 -:10D0E0000422987202209A70D87488205A754FF0E2 -:10D0F000E021187440223C20D87084F82F204FF48F -:10D10000004370BCC1F804317047114B40F2133238 -:10D11000DA600C4B1B780A2BCDD10D4B4FF45172BA -:10D120001A61CEE7008004408098FF1F7898FF1FA7 -:10D130002488FF1FB498FF1FBC98FF1F8898FF1F0B -:10D1400000D004402C88FF1F00B0064000E400E03F -:10D1500000B00440294B29499B7800F0030203F0FA -:10D16000EC031343420700F00F0248BF43F01003E3 -:10D17000042A8B7003D18B7943F040038B711F4BD2 -:10D180005A79C30602F0EF021C4B48BF42F010026E -:10D190005A719A79810602F0EF0211D542F010021D -:10D1A00081059A710FD59A78154942F0A0029A70BC -:10D1B0000978144B03EBC10340F246325B6814E07C -:10D1C0009A71820505D4104B104A1968914211D00A -:10D1D00070479A780A4942F0A0029A700978094B80 -:10D1E00003EBC10340F247325B68074907481A6006 -:10D1F0000860704700221A60704700BF00B0064008 -:10D200002C88FF1F148601008498FF1FD400D6428B -:10D21000294B5B6B1B054DD510B5284C237823B1EA -:10D2200001F0E8FD2378002BFAD1254A254B4FF079 -:10D23000E0204FF400440021C0F88441D1701B78F5 -:10D24000092B2CD01A2B1BD01F4B1B7803F07F030C -:10D250000A2B1FD01F2B0ED01C4B194A1C4C1D48EB -:10D26000196892F804C0D27900232370037009B1C1 -:10D2700001230B7010BD184B40F203121A60EBE74C -:10D28000154B40F203125A600F4B1B7803F07F03DB -:10D290000A2BDFD1114B40F203121A61DCE70F4B6E -:10D2A00040F20312DA60084B1B7803F07F030A2B6D -:10D2B000D0D1EFE7704700BF008004408898FF1F7F -:10D2C00000B006402488FF1F2C88FF1F3498FF1FE2 -:10D2D0007898FF1F8098FF1F00D0044000B00440E2 -:10D2E0000A4A38B50546137803F0FF04002BFAD13B -:10D2F00001212846FFF778F921462846FFF740F933 -:10D30000034A044B52F835201A6038BD8898FF1F35 -:10D31000148601008498FF1F09B140F08000194A6B -:10D320001378834217D010B4174C646B24050FD5C3 -:10D3300003F07F030A2B21D01F2B14D0002900F00B -:10D340007F0314BF602144210A2B10D01F2B03D070 -:10D35000107010BC704770470C4B41F4407119605D -:10D36000107010BC7047094B00241C60E6E7084BA6 -:10D3700041F440711961107010BC7047044B0024D7 -:10D380001C61DBE72C88FF1F0080044000D00440B4 -:10D3900000B00440124B1A7882420CD01149496BFC -:10D3A000090507D5092A16D01A2A0AD009280DD04E -:10D3B0001A2801D0187070470B4A40F2133151609F -:10D3C000F8E7094A002109285160F1D1074A40F2E3 -:10D3D0001331D160EEE7054A0021D160E6E700BFD6 -:10D3E0002488FF1F0080044000D0044000B00440A7 -:10D3F0000D4B5B6B13F4006313D0212803D90B4B47 -:10D400000020186070470A4B10B5084C53F83030B4 -:10D4100023600121FFF7E8F8236800221A70012039 -:10D4200010BD1846704700BF008004403498FF1FAD -:10D43000148601000C4B5B6B13F4006312D01728A9 -:10D4400009D10A4B0A4A40F202319960537B01200C -:10D45000034353737047064A537B03F0FE030020D7 -:10D4600053737047184670470080044000B0044072 -:10D4700000B006402DE9F84F334B5B6B1A053AD5E7 -:10D48000324B1B6806460BB101221A70DFF8C090C0 -:10D49000DFF8C08099F80040D8F800302E4D0134F4 -:10D4A000A3422B7829D99C425FFA84FA14D12B4FDE -:10D4B000DFF8ACB005E03B791B0623D42B78A34200 -:10D4C0000AD1FEF7E7FD4028F5DDFF28F6DD01F083 -:10D4D00091FC2B78A342F4D0272C29D9214B283C4E -:10D4E0001B68F6B21E55204A1C4B01211170BC224C -:10D4F00089F800A0DA70BDE8F88F03F0FF0AA3B93D -:10D500005446D4E72B78D8F800105A1C9142DBB26D -:10D5100008D9272A10D8D1B21BF80230DBB2FB7130 -:10D520002970CBE700210A46F6E74FF0000A54467F -:10D530000B4BF6B21E55D6E7D1B20A4A273B12680A -:10D54000D35CDBB2EBE700BF008004408498FF1F90 -:10D55000B498FF1F2888FF1FBC98FF1F00B006402B -:10D560008C98FF1FB898FF1F8898FF1F2DE9F84F70 -:10D57000394B5B6B1A053CD5384B1B680BB101224C -:10D580001A704718B84231D2354EDFF8D880364C81 -:10D59000DFF8D89000F1010A13E003F0FF0B53B35A -:10D5A0004FF0000B5D46324A1AF8013C5355524683 -:10D5B00030490123BA420B700AF1010A86F800B023 -:10D5C00014D23578D8F800300135AB422378E4D94D -:10D5D000AB425FFA85FB0FD0272DE4D9264B1AF812 -:10D5E000012C1B68283D5A555246E1E71F4BBC22CF -:10D5F000DA70BDE8F88F5D466FF0430389F80330B9 -:10D6000006E099F804301B060BD42378AB42E3D133 -:10D61000FEF740FD4028F4DDFF28F6DD01F0EAFBCF -:10D62000F3E72378D8F800105A1C9142DBB203D9F3 -:10D63000272A0AD8D1B201E000210A460C4B9B5C94 -:10D64000DBB289F807302170DFE7D1B20A4A273B05 -:10D650001268D35CDBB2F4E7008004408498FF1FBB -:10D66000B498FF1F2888FF1FBC98FF1F00B006401A -:10D670008C98FF1F8898FF1FB898FF1F10B5044CA7 -:10D68000237823B101F0B6FB2378002BFAD110BD2B -:10D690008898FF1F084A094B11781A789142C8B23E -:10D6A000D3B202D2013B181A7047054A1268013AF8 -:10D6B0001344181A704700BFB498FF1FBC98FF1F8F -:10D6C0002888FF1F064A074B11781A789142D0B27A -:10D6D0003CBF054A1268CBB238BF9B18181A704776 -:10D6E0007898FF1F8098FF1F2088FF1F1B4B1C4945 -:10D6F0001A780B789A422ED010B55FFA82FE194A3A -:10D70000D8B21268431C9A4219D93F2B1BD85FFA32 -:10D7100083FC1548C05CC0B281F800C01349096899 -:10D7200061B19E453CBF7244D31A114A126828BFAA -:10D73000AEEB03039A4201D300230B7010BD4FF0F0 -:10D74000000C6346E5E70B4C3F382468205C5FFA29 -:10D7500083FCC0B2E0E74FF0FF3070477898FF1FBE -:10D760008098FF1F2088FF1F3898FF1F3498FF1FE5 -:10D770001C88FF1F7C98FF1F0D4A0E4B11781B78E9 -:10D780009942DAB211D00C490968531C994207D961 -:10D790003F2B06D9094B3F3A1B68985CC0B27047D3 -:10D7A0000023074AD05CC0B270474FF0FF3070478B -:10D7B0007898FF1F8098FF1F2088FF1F7C98FF1F0D -:10D7C0003898FF1F0C4B5B6B1B0514D50B4B0C489B -:10D7D000DA78402102F0CB02DA705974DA7809491C -:10D7E00042F03402DA70084A03781268DBB20B7038 -:10D7F0000AB10023137070470080044000B0064057 -:10D800008098FF1F7898FF1F3498FF1F2DE9F04183 -:10D81000504C237913F0300F47D072B6A37D03F03C -:10D82000FF01002B58D062B6DFF82C814B4898F8E6 -:10D8300000304B4A057816684A4F5FFA83FC4A4B22 -:10D84000EDB2D3F800E008E01DB14FF0000C07F88E -:10D850000C304A1E12F0FF0112D0E3790CF10102E4 -:10D860009642DBB2F0D99542ACF13F00F1D03F2AAD -:10D870006DD994464A1E12F0FF010EF80030ECD12B -:10D880005FFA8CF388F80030384B196869B1AC4501 -:10D890003CBF721B02EB0C03354A126828BFACEB8D -:10D8A00005039A429CBF01230B702A48C3781E06C9 -:10D8B000DDB216D46A060DD5264B1B795B0609D559 -:10D8C0002C4B2D491B6800220A7003B11A70214BA2 -:10D8D0003C22DA70BDE8F0814023E279637462B6DD -:10D8E000E3E703791C06E5D5244B254ADFF894E0ED -:10D8F0001C7816689EF80030234A244FD2F800C0E6 -:10D90000E4B2DBB207E003790023FA5CD2B2C27161 -:10D91000027D072A11D8A34203F101010ED08E42E5 -:10D92000F1D927290279A3F1270301D80B46ECE7A7 -:10D930001CF803200B46D2B2E9E7DCB2054B8EF8A7 -:10D9400000401A79110644BF7C22DA70B2E794468F -:10D950007DE700BF00B006407898FF1F8098FF1F4A -:10D960002088FF1F3898FF1F7C98FF1F3498FF1FE7 -:10D970001888FF1F8498FF1F8898FF1FB498FF1F07 -:10D980002888FF1FBC98FF1FB898FF1F8C98FF1FA7 -:10D99000094B10B4186060B101F14004074B08480E -:10D9A00001F11A021A60074B0460283110BC19609B -:10D9B00070474024F2E700BF7C98FF1F1C88FF1FC0 -:10D9C0002088FF1F1888FF1F054B186018B1054BF2 -:10D9D000283119607047034B28211960704700BF38 -:10D9E000B898FF1F2888FF1F2DE9F84F314B1B689F -:10D9F00007460BB101221A70DFF8BC90DFF8BC803B -:10DA000099F80040D8F800302D4D01349C422B7815 -:10DA10002AD303F0FF0A002B3ED15446294EDFF8EB -:10DA2000A8B005E033791B0623D42B78A3420AD192 -:10DA3000FEF730FB4028F5DDFF28F6DD01F0DAF9CE -:10DA40002B78A342F4D0272C29D9204B283C1B68E3 -:10DA5000FFB21F551E4A1B4B01211170AC2289F8E1 -:10DA600000A0DA70BDE8F88F9C425FFA84FAD5D046 -:10DA7000E9E72B78D8F800105A1C8A42DBB203D2AF -:10DA8000272A10D8D1B201E000210A461BF8023043 -:10DA9000DBB2F3712970C8E74FF0000A54460A4B15 -:10DAA000FFB21F55D6E7D1B2084A273B1268D35CB4 -:10DAB000DBB2EEE71099FF1F4099FF1F3C88FF1F64 -:10DAC0004899FF1F00C006401899FF1F4499FF1F87 -:10DAD0001499FF1F1D4A1E49536B2DE9F04343F46F -:10DAE00080531C4DDFF87080DFF870901C4F1D4E86 -:10DAF0005363002388F80030202889F800303B70F9 -:10DB000033702B7040F213358D6002F5103238BF40 -:10DB100020204FF45175CD60C0F344311170C0F333 -:10DB2000471E114C82F801E000F01F002C2190727A -:10DB30004FF0E02C93701374D17040224FF40033F7 -:10DB400084F83120CCF80431BDE8F0830080044033 -:10DB500000C004401499FF1F0499FF1F0C99FF1F78 -:10DB60004099FF1F4899FF1F00E400E0294B294915 -:10DB70009B7800F0030203F0EC031343420700F02C -:10DB80000F0248BF43F01003042A8B7003D18B7936 -:10DB900043F040038B711F4B5A79C30602F0EF022A -:10DBA0001C4B48BF42F010025A719A79810602F06C -:10DBB000EF0211D542F0100281059A710FD59A78C3 -:10DBC000154942F0A0029A700978144B03EBC10387 -:10DBD00040F246325B6814E09A71820505D4104B1E -:10DBE000104A1968914211D070479A780A4942F058 -:10DBF000A0029A700978094B03EBC10340F2473247 -:10DC00005B68074907481A600860704700221A607D -:10DC1000704700BF00C006404088FF1F1486010007 -:10DC20001099FF1FD400D84238B5134B5B6BDB044F -:10DC300020D5124C237823B101F0DCF82378002B97 -:10DC4000FAD10F4A0F494FF0E024002340F20310AD -:10DC50004FF40035C4F88451D3708860C8600A4915 -:10DC60000A4C0B4809681579D2792370037009B101 -:10DC700001230B7038BD00BF008004401499FF1FC2 -:10DC800000C0064000C00440C098FF1F0499FF1F59 -:10DC90000C99FF1F0A4A38B50546137803F0FF04B4 -:10DCA000002BFAD101212846FEF79EFC214628468A -:10DCB000FEF766FC034A044B52F835201A6038BD63 -:10DCC0001499FF1F148601001099FF1F09B140F03D -:10DCD0008000114A1378834216D010B40F4C646B45 -:10DCE000E4040ED503F07F03082B02D10C4B002473 -:10DCF000DC60002900F07F0314BF60214421082B61 -:10DD000003D0107010BC70477047054B41F4407150 -:10DD1000D960107010BC70474088FF1F008004401D -:10DD200000C00440704700BF0D4B5B6B13F4805381 -:10DD300013D0212803D90B4B0020186070470A4BE1 -:10DD400010B5084C53F8303023600121FEF74CFC2D -:10DD5000236800221A70012010BD1846704700BFCA -:10DD600000800440C098FF1F148601000C4B5B6BC1 -:10DD700013F4805312D00E2809D10A4B0A4A40F2FC -:10DD800002315960537B0120034353737047064AA5 -:10DD9000537B03F0FE03002053737047184670470F -:10DDA0000080044000C0044000C00640034B5B6B91 -:10DDB000DB0401D5FFF718BE704700BF00800440A8 -:10DDC00079B170B5074E04464518736BDB0404F156 -:10DDD000010403D514F8010CFFF706FEAC42F4D1A0 -:10DDE00070BD70470080044010B5044C237823B107 -:10DDF00001F000F82378002BFAD110BD1499FF1F11 -:10DE0000084A094B11781A789142C8B2D3B202D2AB -:10DE1000013B181A7047054A1268013A1344181A50 -:10DE2000704700BF4099FF1F4899FF1F3C88FF1FA4 -:10DE3000064A074B11781A789142D0B23CBF054A86 -:10DE40001268CBB238BF9B18181A70470499FF1F8D -:10DE50000C99FF1F3888FF1F1B4B1C491A780B7841 -:10DE60009A422ED010B55FFA82FE194AD8B21268D3 -:10DE7000431C9A4219D93F2B1BD85FFA83FC1548E3 -:10DE8000C05CC0B281F800C01349096861B19E4509 -:10DE90003CBF7244D31A114A126828BFAEEB030389 -:10DEA0009A4201D300230B7010BD4FF0000C634663 -:10DEB000E5E70B4C3F382468205C5FFA83FCC0B276 -:10DEC000E0E74FF0FF3070470499FF1F0C99FF1FE8 -:10DED0003888FF1FC498FF1FC098FF1F3488FF1F9A -:10DEE0000899FF1F0D4A0E4B11781B789942DAB240 -:10DEF00011D00C490968531C994207D93F2B06D908 -:10DF0000094B3F3A1B68985CC0B270470023074A30 -:10DF1000D05CC0B270474FF0FF3070470499FF1FCC -:10DF20000C99FF1F3888FF1F0899FF1FC498FF1F17 -:10DF3000054B064A1B7806491268DBB20B700AB122 -:10DF400000231370704700BF0C99FF1FC098FF1F7C -:10DF50000499FF1F30B43A4B1A79950624D5394DF0 -:10DF60003949DB792A780C68D8B2531C9C42D2B26A -:10DF700031D8364B1A7802F0FF0322B10022134643 -:10DF80003349C8542A703349096869B1324A107854 -:10DF90009842C2B28ABFA21A9B1A9B182F4A1268D3 -:10DFA0009A429CBF01230B70254AD3781C06D9B234 -:10DFB0001ED44A060DD5224B1B795B0609D5284B8A -:10DFC00028491B6800220A7003B11A701C4B2C22CE -:10DFD000DA7030BC70471D4909789942D3D03F2B85 -:10DFE0002CD921493F3A09688854DAB22A70CAE725 -:10DFF00013791806DDD51D4B17481D7803789D420F -:10E00000DCB208D01A4A1268631C9A4206D9272B40 -:10E010000DD8DAB204E06C23D370CAE700221346AD -:10E02000144CE35CDBB2064CE3710270C1E7124AA8 -:10E03000273C1568DAB22B5DDBB2F4E7DAB29FE772 -:10E0400000C006400499FF1F3888FF1F0C99FF1F6E -:10E05000C498FF1FC098FF1F4899FF1F3088FF1FFB -:10E060001099FF1F1499FF1F0899FF1F4099FF1F68 -:10E070003C88FF1F1899FF1F4499FF1F094B10B4DC -:10E08000186060B101F14004074B084801F11A0221 -:10E090001A60074B0460283110BC19607047402497 -:10E0A000F2E700BF0899FF1F3488FF1F3888FF1F61 -:10E0B0003088FF1F054B186018B1054B28311960D7 -:10E0C0007047034B28211960704700BF4499FF1F18 -:10E0D0003C88FF1F704700BF704700BF704700BFFC -:10E0E000431E032B17D872B60C4951F8230080B198 -:10E0F00010B40B4CB0F800C034F81320A2EB0C02A3 -:10E10000D0F804C041F823C024F8132062B610BC34 -:10E11000704762B670470020704700BFDC99FF1F50 -:10E120002C9AFF1F013803280BD872B6074B53F8FF -:10E13000203043B100205B680130002BFBD162B678 -:10E140007047002070471846F9E700BF049AFF1F88 -:10E1500010B472B6194A1A4C042312F8011B0907AD -:10E1600043F0010C05D554F8331061B154F83C105C -:10E17000B9B10433142BF0D162B6124B00221A70DD -:10E1800010BC00F09BBC0F4904EBC3020830506088 -:10E190000A780D4844F83300013A0A7062B610BCA0 -:10E1A0007047084A094904EBCC03083058601378DB -:10E1B00044F83C10013B137062B6F0E7A087010001 -:10E1C0000080FF1F349AFF1F88004000C8004000F5 -:10E1D000421E032A0ED81C4B400140F0100010B420 -:10E1E000034472B6194CA05C03281CD8DFE800F089 -:10E1F0001315031870470520A05413F0080F088862 -:10E2000014BFC8228822083142EA004259601A60CD -:10E2100062B610BC70470320EEE708330220EBE73C -:10E2200008330420E8E70A4B53F8220038B1094BC1 -:10E2300053F82200416043F8221062B6E9E743F840 -:10E240002210044BF7E700BF0080FF1F249AFF1F36 -:10E25000049AFF1F149AFF1F2DE9F04FDFF8CCA29C -:10E26000DFF8CCB285B03DE0B24D9E0805EBC607A5 -:10E27000013A796813F00803D4B2A1F1080040F024 -:10E28000B88055F836204FEA124C120C21F808CC11 -:10E2900000F0A78021F8063C41F8043CA64B53F857 -:10E2A0002420002A00F00182A44B53F8242050605F -:10E2B00043F82400A24B33F81420944423F814C0EC -:10E2C00000F0DCFB002800F0E98117F0080F9D4BFF -:10E2D00000F1080018BF5B46786045F83630082327 -:10E2E0008AF880309AF880305907DCB21BD5964BFB -:10E2F0001B78ABB195490A7802F0FF032AB1013BC4 -:10E30000DBB20B70002B00F0468391490A7802F0D3 -:10E31000FF032AB1013BDBB20B70002B00F0EB8155 -:10E3200004238AF8803014F0080200F0CC819AF8B7 -:10E330009020D3B2120997D1DFF8F8919B0809EB2E -:10E34000C30459F833006468C0F3830009287CD003 -:10E350000FD80138012808D87E4A158842F22100DA -:10E36000854200F0FB8149F833B001238AF89430EC -:10E37000B5E70D28F9D1D4E90007774D49F833B056 -:10E38000744E764CC9F8102083B240F2816CC9F803 -:10E3900018202A6063454FF00102C6E90007227089 -:10E3A00000F2FF80B3F5D06F80F0CB82B3F5817FB0 -:10E3B00000F0268240F2DE8040F2023293427BD1AE -:10E3C00007F07F07042F00F20881020C40F005815E -:10E3D000634911F8273043F0020301F82730134650 -:10E3E00070E017F0080F574B18BF5B4645F8363002 -:10E3F00075E700F063FB5B495B4A51F82430002B62 -:10E4000000F05781586841F82400115D03F10800BD -:10E410007860032905D8DFE801F0120F1502042106 -:10E4200011551A8817F0080F14BFC823882343EA30 -:10E43000024345F8363052E702211155F1E7032136 -:10E440001155EEE705211155EBE7434D2A683AB324 -:10E450004649424C0F88464894F800E00678402F21 -:10E460003B4628BF4023BEF1000F8EF0010E84F81A -:10E4700000E046F0020486F00106067009EBC400D5 -:10E48000426014BFC820882040EA03401A44FB1AA7 -:10E490009BB249F834000B80002B00F036812A60D3 -:10E4A0002C4B1A88B2F5A06F7FF45FAF9A788AF888 -:10E4B000982000225A7058E7B3F5A06F40F08D8085 -:10E4C00000221346B6F806C02948944528BF944652 -:10E4D00067460278402F28BF402742F0020E3E04D4 -:10E4E00009EBCE0846F0C806C8F8043049F83E608B -:10E4F00000263B442670BCEB070782F0010606703D -:10E5000040F01181BCF13F0F4FF0010509D946F0F1 -:10E510000206027009EBC60225705360882349F891 -:10E52000363001238AF894301FE700BF00200740EF -:10E53000C80040000080FF1FDC99FF1FEC99FF1FFF -:10E540002C9AFF1F88004000289AFF1F299AFF1F5E -:10E55000549AFF1FFC99FF1FD099FF1FCD99FF1FF1 -:10E56000C0200740049AFF1F249AFF1FCE99FF1F67 -:10E57000CC99FF1F802B00F08B81822B2DD107F0CF -:10E580007F07042F29D8A74A00231380A64B13F82E -:10E5900027309F0740F1FC8101231370A14B022219 -:10E5A00090E742F2210C6345BBD01DD942F22122F3 -:10E5B00093420DD1BFB2002F82D19C4B1A689C4B65 -:10E5C0001A609C4BC0F3074000221870134679E78D -:10E5D00042F2213293423FF473AF0F238AF8C030E6 -:10E5E00001238AF89430C0E6B3F5086F00F04A8141 -:10E5F000B3F5106FF1D1904BC0F3074004251870AC -:10E6000059F835301A0606D40135142D0CD059F8B6 -:10E6100035301A06F8D509EBC503013558680838B6 -:10E6200000F04CFA142DF2D1844A854B0292854AAF -:10E630000192854E854ADFF81882039400920025E6 -:10E640001C4656F8047B2FB138467F6800F036FA36 -:10E65000002FF9D1009BD8F8007043F8045B46F80E -:10E66000045C00932FB138467F6800F027FA002F32 -:10E67000F9D1029B48F8045B43F8045B0293019BC9 -:10E6800023F8025B01932378023B032B00F20981FC -:10E69000DFE813F03F0104013F0104016D4A45F832 -:10E6A000360013780133137019E643F82400674BE2 -:10E6B000FEE5115D022926D07FF611AE03291DD19A -:10E6C000012313550BE6E0076ED4210621D4A207DF -:10E6D00008D5614B93F888200221D2B283F88820B4 -:10E6E00083F88010E30603D55B4B102283F880206B -:10E6F00005B0BDE8F08F00F059FB11E617F0080FE8 -:10E7000014BF032302231355E9E53F2F98BF0022CE -:10E71000C5E6514B80220D2183F8C01083F880207C -:10E72000A207DFD5D5E746F002060270402F09EBBD -:10E73000C6003A4628BF402243601004134440F00C -:10E7400088000121BA1A49F83600217055D02B6093 -:10E75000424B1A8001238AF8943006E692885AB90F -:10E760003F4AE51D14F8011B02F8011FAC42F9D124 -:10E770003C4A1268862A3CD03B4C3C4825780278BB -:10E78000002D85F00105257042F0020482F001029F -:10E79000027009EBC4024FF00000506014BFC822A1 -:10E7A000882249F83420DEE52B4B30483049314C83 -:10E7B000022583F8945002702F480C602F4D48605A -:10E7C0008C600D24CD60FF200A618A6183F8C0400F -:10E7D00001219F2483F8880083F8800083F8982023 -:10E7E00083F88C0083F8844083F8941005B0BDE86A -:10E7F000F08F234A0F201070BEE73F2FA7D890E676 -:10E8000007F07F07042F3FF6E8AE000C7FF4E5AE7B -:10E81000054A12F8273023F0020302F827300022BD -:10E8200013464FE6D499FF1FC02007408C97FF1F67 -:10E83000509AFF1F4C9AFF1F289AFF1F149AFF1F20 -:10E84000249AFF1F2C9AFF1FDC99FF1FEC99FF1FD2 -:10E85000049AFF1F349AFF1F00200740CE99FF1F24 -:10E86000439AFF1F449AFF1FCD99FF1FCC99FF1FAA -:10E870000080FF1F880040004C99FF1F8C99FF1FEC -:10E88000299AFF1F484B49491B780B700B4619E624 -:10E89000464A00231380454B022213E64FF0010342 -:10E8A0002370434BB34204F101047FF4CAAE414EDE -:10E8B000039CDFF80481414F00233370042518F8CE -:10E8C000013B3F4AAB541B0725D445F0020145F0FC -:10E8D000030204350023142D49F8313049F8323051 -:10E8E000EDD1384F25783A7842F0020009EBC00CA0 -:10E8F00085F00106CCF80430002D4DD1882382F03C -:10E90000010226703A7049F8303001238AF89430B9 -:10E910002BE52570C5E700F0B1F8002832D009EBEF -:10E92000C5030830586049F8357000F0A7F808B3FF -:10E9300045F0010309EBC3020830506049F833B0D9 -:10E94000C3E7214A5368002B3FF447AE000CBFB227 -:10E9500004E013690C32002B3FF43FAE1188814272 -:10E96000F7D15188B942F4D1000A03280CBF1A78B4 -:10E970001289A7E533780133337045F0010349F874 -:10E980003300A2E7337849F8350001333370CCE720 -:10E99000064B022296E500BE2670C82382F00106CF -:10E9A0003E7049F83030BCE5289AFF1FD499FF1F0C -:10E9B000EC99FF1F349AFF1FA087010088004000D8 -:10E9C000C0200740CC99FF1F4C87010070B500F0B4 -:10E9D00017FB00231A4A194642F8331002EBC30012 -:10E9E0000133142B4160F7D1164C174B606B174D58 -:10E9F00040F480206063C2F3072483F89C40144CE9 -:10EA0000FF204FF0010CC2F30746120E83F8B060EE -:10EA10004FF0E02E83F8B42083F8800083F888005C -:10EA2000187483F894C0217083F884C0702385F82B -:10EA300049304FF400721023CEF80821237270BDC4 -:10EA40000080FF1F008004400020074000E400E039 -:10EA50000021074000F0ACB800F07CB800F056B8D8 -:10EA600000F090B800F076B900F050B908461146B1 -:10EA700000F0BAB8084600F03BB900BF72B60D49C5 -:10EA80000B68B3FA83F00B2810DC4FF00042C24051 -:10EA900023EA02030B6062B6074A00EBC000C10024 -:10EAA00002EBC000002353504360704762B6002061 -:10EAB000704700BF5488FF1FBC83FF1F0E4BC31A53 -:10EAC000B3F5587F10D20D4A127872B972B60C4A5B -:10EAD0000C49A2FB032308684FF000421B0922FAED -:10EAE00003F303430B6062B67047074A1278002AAB -:10EAF000ECD0FFF72DBB00BFBC83FF1F349AFF1F74 -:10EB0000398EE3385488FF1F289AFF1F38B50F4C01 -:10EB1000206878B143880288C11801339A420D7A7F -:10EB200002D94380284638BDFFF7C8FF0023236081 -:10EB3000284638BD064B1B782BB10320FFF7D0FACF -:10EB400020600028E6D14FF0FF35EBE7389AFF1F31 -:10EB5000289AFF1F10B5094C206818B14388184443 -:10EB6000007A10BD064B1B782BB10320FFF7B8FAD3 -:10EB700020600028F2D14FF0FF3010BD389AFF1FFF -:10EB8000289AFF1F084B094A1B6810B594881BB1CF -:10EB90001A885B88D31A1C440CB1204610BD00F0C3 -:10EBA00029F9204610BD00BF389AFF1F2C9AFF1F7D -:10EBB0000B4B1B789BB110B50A4C206848B1FFF78E -:10EBC0007DFF002303202360FFF78AFA30B1FFF7AF -:10EBD00075FF0320FFF784FA0028F8D110BD7047B5 -:10EBE000289AFF1F389AFF1F2DE9F04FDFF8EC90AD -:10EBF00083B0012289F80020019179B3384FDFF802 -:10EC0000E480019D384EDFF8E4A083463968A1B363 -:10EC1000B1F802E0CEF1400CAC4528BFAC460EEB9B -:10EC20000C040022A4B23270A5EB0C054C8001F15B -:10EC30000802BCF1000F0AD00EF1FF3E7244DC4422 -:10EC40001BF8014B02F8014FDC45F9D14C883F2CF1 -:10EC50000BD805228AF80020002DD7D10198002377 -:10EC600089F8003003B0BDE8F08F40220A8004200C -:10EC7000FFF7AEFA00223A60EBE798F800202AB3DB -:10EC80004AF2F92408E0013C19D03278BAB900F010 -:10EC9000B1F898F80020CAB10420FFF743FA07281A -:10ECA000F1D84FF0010389F80030FFF7E7FE014685 -:10ECB00038600028ACD1013C89F80000E5D101237F -:10ECC0004FF0FF30337003B0BDE8F08F00234FF0FA -:10ECD000FF3089F8003003B0BDE8F08F3D9AFF1F88 -:10ECE000409AFF1F289AFF1F3C9AFF1F549AFF1F4C -:10ECF00000B583B0034601210DF107008DF8073000 -:10ED0000FFF772FF03B05DF804FB00BF38B50E4D8E -:10ED10000E4C28680123237028B140880023C0F1DD -:10ED20004000237038BD0A4B1B7813B900202070B7 -:10ED300038BD0420FFF7F6F90728F7D8FFF79EFE45 -:10ED400028600028E9D1F1E7409AFF1F3D9AFF1F94 -:10ED5000289AFF1FF8B5114B1B788BB1104E114D3F -:10ED6000346801272F7064B10F4B00271F70638830 -:10ED7000238021460420FFF72BFA376000232B70F5 -:10ED8000F8BDFFF77BFE084B014620B104201C7044 -:10ED9000FFF71EFAF2E71F70F0E700BF289AFF1F87 -:10EDA000409AFF1F3D9AFF1F549AFF1F38B50E4B24 -:10EDB0001B7853B90D4C216841B103F0FF054B8816 -:10EDC0000B800420FFF704FA256038BDFFF756FEDC -:10EDD000014620B1BDE838400420FFF7F9B9044BE3 -:10EDE00001221A7038BD00BF3D9AFF1F409AFF1FD5 -:10EDF000549AFF1F2DE9F843324E337863B1324FF6 -:10EE00003A784AB90122D9073A7043D49A0726D4EE -:10EE100000225B073A7001D4BDE8F8832B4B1A68D7 -:10EE2000002AF9D0EFF30582002AF5D1EFF310851F -:10EE300072B6186800283AD0254C2178002936D1BE -:10EE400042691A6001232370002A37D0916105B905 -:10EE500062B600258368457798472570DCE7DFF8C0 -:10EE6000748098F80020002AD2D00025DFF868903E -:10EE70002B4659F82340236820461B6901359847E3 -:10EE800008B12369984798F80020EBB29A42F0D86D -:10EE90003378BDE7FFF776FE68B9104B1B780BB9E6 -:10EEA0003378B3E7337803F0FE033370AEE7002D19 -:10EEB000B2D162B6B0E700F0A1F8EEE7084B1A60F5 -:10EEC000C5E700BF5888FF1F559AFF1F7897FF1F9F -:10EED0008497FF1F649AFF1F589AFF1FC684010082 -:10EEE0008897FF1F70B4104E104D3478D4B1621E55 -:10EEF000D2B2291D2B4601EB820101E08B4205D0E5 -:10EF000053F8042B8242F9D170BC7047631CDBB20A -:10EF1000074A3370137845F8240043F00203137056 -:10EF200070BC70470123F3E7649AFF1F589AFF1FD4 -:10EF30005888FF1F2A4B2B4A6020E1211870597016 -:10EF400013782948082B34D00A2B20D00C2B274BC0 -:10EF50000CBF35213D2112228160C2609960DA60C8 -:10EF6000234B21491B78214ACBB101230B62136249 -:10EF7000204B1D491B781D4A012B13D9042B1BD88C -:10EF800084234B6253621C4B01221A707047174B4B -:10EF9000392113228160C2609960DA60E0E70B6278 -:10EFA0001362E5E780234B625362134B01221A7010 -:10EFB00070470E4B0121ECE7082B06D885234B62E6 -:10EFC00053620D4B01221A707047102B94BF862399 -:10EFD00087234B625362084B01221A70704700BFAF -:10EFE000004007405988FF1F00B0034000B00B40AD -:10EFF000659AFF1F5A88FF1F669AFF1F704700BF60 -:10F0000010B584B072B6174A702441200F218023B6 -:10F010001470D0719171137013781B06FCD5906831 -:10F0200062B6114B114C984238BF00EB800001A929 -:10F0300038BF40000A22FDF753F801A920460023FB -:10F0400011F8012B01333AB10A2B20F8022FF7D126 -:10F050001623237004B010BD5B00DBB2237004B034 -:10F0600010BD00BF0000024080969800E888FF1F96 -:10F0700003460846194602F051BC00BF81F000412A -:10F0800002E000BF83F0004330B54FEA41044FEA8D -:10F09000430594EA050F08BF90EA020F1FBF54EA28 -:10F0A000000C55EA020C7FEA645C7FEA655C00F0C4 -:10F0B000E2804FEA5454D4EB5555B8BF6D420CDD95 -:10F0C0002C4480EA020281EA030382EA000083EA18 -:10F0D000010180EA020281EA0303362D88BF30BDB8 -:10F0E00011F0004F4FEA01314FF4801C4CEA11310E -:10F0F00002D0404261EB410113F0004F4FEA03336D -:10F100004CEA133302D0524263EB430394EA050FF7 -:10F1100000F0A780A4F10104D5F1200E0DDB02FA66 -:10F120000EFC22FA05F2801841F1000103FA0EF2FA -:10F13000801843FA05F359410EE0A5F120050EF1C0 -:10F14000200E012A03FA0EFC28BF4CF0020C43FAF1 -:10F1500005F3C01851EBE37101F0004507D54FF0FE -:10F16000000EDCF1000C7EEB00006EEB0101B1F54E -:10F17000801F1BD3B1F5001F0CD349085FEA300094 -:10F180004FEA3C0C04F101044FEA445212F5800F9F -:10F1900080F09A80BCF1004F08BF5FEA500C50F13C -:10F1A000000041EB045141EA050130BD5FEA4C0C1F -:10F1B000404141EB0101013C28BFB1F5801FE9D27C -:10F1C00091F0000F04BF01460020B1FA81F308BF9F -:10F1D0002033A3F10B03B3F120020CDA0C3208DD6B -:10F1E00002F1140CC2F10C0201FA0CF021FA02F146 -:10F1F0000CE002F11402D8BFC2F1200C01FA02F1B6 -:10F2000020FA0CFCDCBF41EA0C019040E41AA2BFDA -:10F2100001EB0451294330BD6FEA04041F3C1CDAA2 -:10F220000C340EDC04F11404C4F1200220FA04F0C2 -:10F2300001FA02F340EA030021FA04F345EA03016C -:10F2400030BDC4F10C04C4F1200220FA02F001FA2E -:10F2500004F340EA0300294630BD21FA04F02946B0 -:10F2600030BD94F0000F83F4801306BF81F4801149 -:10F270000134013D4EE77FEA645C18BF7FEA655CBC -:10F2800029D094EA050F08BF90EA020F05D054EA8E -:10F29000000C04BF1946104630BD91EA030F1EBF93 -:10F2A0000021002030BD5FEA545C05D14000494197 -:10F2B00028BF41F0004130BD14F580043CBF01F58A -:10F2C000801130BD01F0004545F0FE4141F4700170 -:10F2D0004FF0000030BD7FEA645C1ABF194610464B -:10F2E0007FEA655C1CBF0B46024650EA013406BF4C -:10F2F00052EA033591EA030F41F4002130BD00BF0B -:10F3000090F0000F04BF0021704730B54FF48064C7 -:10F3100004F132044FF000054FF0000150E700BF48 -:10F3200090F0000F04BF0021704730B54FF48064A7 -:10F3300004F1320410F0004548BF40424FF0000194 -:10F340003EE700BF42004FEAE2014FEA31014FEAD7 -:10F3500002701FBF12F07F4393F07F4F81F0605126 -:10F36000704732F07F4208BF704793F07F4F04BF71 -:10F3700041F40021704730B54FF4607401F000454E -:10F3800021F000411CE700BF50EA010208BF7047AE -:10F3900030B54FF000050AE050EA010208BF70479F -:10F3A00030B511F0004502D5404261EB41014FF408 -:10F3B000806404F132045FEA915C3FF4D8AE4FF010 -:10F3C00003025FEADC0C18BF03325FEADC0C18BFF3 -:10F3D000033202EBDC02C2F1200300FA03FC20FA44 -:10F3E00002F001FA03FE40EA0E0021FA02F1144491 -:10F3F000BDE600BF70B54FF0FF0C4CF4E06C1CEAAA -:10F4000011541DBF1CEA135594EA0C0F95EA0C0F1A -:10F4100000F0DEF82C4481EA030621EA4C5123EA8D -:10F420004C5350EA013518BF52EA033541F48011BC -:10F4300043F4801338D0A0FB02CE4FF00005E1FB6F -:10F4400002E506F00042E0FB03E54FF00006E1FBB9 -:10F4500003569CF0000F18BF4EF0010EA4F1FF04FC -:10F46000B6F5007F64F5407404D25FEA4E0E6D413C -:10F4700046EB060642EAC62141EA55514FEAC5204D -:10F4800040EA5E504FEACE2EB4F1FD0C88BFBCF5C9 -:10F49000E06F1ED8BEF1004F08BF5FEA500E50F17A -:10F4A000000041EB045170BD06F0004646EA010140 -:10F4B00040EA020081EA0301B4EB5C04C2BFD4EB72 -:10F4C0000C0541EA045170BD41F480114FF0000E6B -:10F4D000013C00F3AB8014F1360FDEBF002001F0D9 -:10F4E000004170BDC4F10004203C35DA0C341BDC53 -:10F4F00004F11404C4F1200500FA05F320FA04F025 -:10F5000001FA05F240EA020001F0004221F0004158 -:10F5100010EBD37021FA04F642EB06015EEA430ECB -:10F5200008BF20EAD37070BDC4F10C04C4F12005FB -:10F5300000FA04F320FA05F001FA04F240EA0200AE -:10F5400001F0004110EBD37041F100015EEA430E7F -:10F5500008BF20EAD37070BDC4F1200500FA05F29F -:10F560004EEA020E20FA04F301FA05F243EA02031E -:10F5700021FA04F001F0004121FA04F220EA02002D -:10F5800000EBD3705EEA430E08BF20EAD37070BD73 -:10F5900094F0000F0FD101F00046400041EB010153 -:10F5A00011F4801F08BF013CF7D041EA060195F035 -:10F5B000000F18BF704703F00046520043EB0303EF -:10F5C00013F4801F08BF013DF7D043EA06037047DC -:10F5D00094EA0C0F0CEA135518BF95EA0C0F0CD0E7 -:10F5E00050EA410618BF52EA4306D1D181EA03012D -:10F5F00001F000414FF0000070BD50EA410606BF27 -:10F600001046194652EA430619D094EA0C0F02D16B -:10F6100050EA013613D195EA0C0F05D152EA0336B0 -:10F620001CBF104619460AD181EA030101F00041CE -:10F6300041F0FE4141F470014FF0000070BD41F017 -:10F64000FE4141F4780170BD70B54FF0FF0C4CF4F1 -:10F65000E06C1CEA11541DBF1CEA135594EA0C0F10 -:10F6600095EA0C0F00F0A7F8A4EB050481EA030E5D -:10F6700052EA03354FEA013100F088804FEA033344 -:10F680004FF0805545EA131343EA12634FEA022212 -:10F6900045EA111545EA10654FEA00260EF00041D3 -:10F6A0009D4208BF964244F1FD0404F5407402D225 -:10F6B0005B084FEA3202B61A65EB03055B084FEAB6 -:10F6C00032024FF480104FF4002CB6EB020E75EBB3 -:10F6D000030E22BFB61A754640EA0C005B084FEADB -:10F6E0003202B6EB020E75EB030E22BFB61A754658 -:10F6F00040EA5C005B084FEA3202B6EB020E75EBA3 -:10F70000030E22BFB61A754640EA9C005B084FEA1A -:10F710003202B6EB020E75EB030E22BFB61A754627 -:10F7200040EADC0055EA060E18D04FEA051545EA16 -:10F7300016754FEA06164FEAC30343EA52734FEABF -:10F74000C2025FEA1C1CC0D111F4801F0BD141EA38 -:10F7500000014FF000004FF0004CB6E711F4801F9D -:10F7600004BF01430020B4F1FD0C88BFBCF5E06F7D -:10F770003FF6AFAEB5EB030C04BFB6EB020C5FEA8D -:10F78000500C50F1000041EB045170BD0EF0004EE2 -:10F790004EEA113114EB5C04C2BFD4EB0C0541EA14 -:10F7A000045170BD41F480114FF0000E013C90E611 -:10F7B00045EA060E8DE60CEA135594EA0C0F08BFD5 -:10F7C00095EA0C0F3FF43BAF94EA0C0F0AD150EAD4 -:10F7D00001347FF434AF95EA0C0F7FF425AF104667 -:10F7E00019462CE795EA0C0F06D152EA03353FF48F -:10F7F000FDAE1046194622E750EA410618BF52EA0C -:10F8000043067FF4C5AE50EA41047FF40DAF52EADF -:10F8100043057FF4EBAE12E74FF0FF3C06E000BF7C -:10F820004FF0010C02E000BF4FF0010C4DF804CD89 -:10F830004FEA410C7FEA6C5C4FEA430C18BF7FEA49 -:10F840006C5C1BD001B050EA410C0CBF52EA430C77 -:10F8500091EA030F02BF90EA020F0020704710F1F7 -:10F86000000F91EA030F58BF994208BF90422CBF86 -:10F87000D8176FEAE37040F0010070474FEA410C7F -:10F880007FEA6C5C02D150EA013C07D14FEA430C9D -:10F890007FEA6C5CD6D152EA033CD3D05DF8040B0E -:10F8A000704700BF8446104662468C461946634640 -:10F8B00000E000BF01B5FFF7B7FF002848BF10F117 -:10F8C000000F01BD4DF808EDFFF7F4FF0CBF01205C -:10F8D00000205DF808FB00BF4DF808EDFFF7EAFFD8 -:10F8E00034BF012000205DF808FB00BF4DF808ED93 -:10F8F000FFF7E0FF94BF012000205DF808FB00BF88 -:10F900004DF808EDFFF7CEFF94BF012000205DF811 -:10F9100008FB00BF4DF808EDFFF7C4FF34BF01201E -:10F9200000205DF808FB00BF4FEA410C7FEA6C5CE9 -:10F9300002D150EA013C0AD14FEA430C7FEA6C5CE9 -:10F9400002D152EA033C02D14FF0000070474FF061 -:10F95000010070474FEA410212F5001215D211D58D -:10F960006FF47873B3EB625212D94FEAC12343F0BC -:10F97000004343EA505311F0004F23FA02F018BF3E -:10F98000404270474FF00000704750EA013005D107 -:10F9900011F0004008BF6FF0004070474FF00000CA -:10F9A000704700BF4FEA4102B2F1E04324BFB3F514 -:10F9B000001CDCF1FE5C0DD901F0004C4FEAC002E6 -:10F9C0004CEA5070B2F1004F40EB830008BF20F0CA -:10F9D0000100704711F0804F21D113F13872BCBF84 -:10F9E00001F00040704741F480114FEA5252C2F1D9 -:10F9F0001802C2F1200C10FA0CF320FA02F018BF22 -:10FA000040F001004FEAC1234FEAD32303FA0CFC74 -:10FA100040EA0C0023FA02F34FEA4303CCE77FEA03 -:10FA2000625307D150EA01331EBF4FF0FE4040F44D -:10FA30004000704701F0004040F0FE4040F40000FC -:10FA4000704700BF80F0004002E000BF81F000413D -:10FA500042001FBF5FEA410392EA030F7FEA226C74 -:10FA60007FEA236C6AD04FEA1262D2EB1363C1BF04 -:10FA7000D218414048404140B8BF5B42192B88BF73 -:10FA8000704710F0004F40F4000020F07F4018BF96 -:10FA9000404211F0004F41F4000121F07F4118BFB6 -:10FAA000494292EA030F3FD0A2F1010241FA03FC5E -:10FAB00010EB0C00C3F1200301FA03F100F0004346 -:10FAC00002D5494260EB4000B0F5000F13D3B0F10E -:10FAD000807F06D340084FEA310102F10102FE2A7D -:10FAE00051D2B1F1004F40EBC25008BF20F00100ED -:10FAF00040EA03007047490040EB0000013A28BF8C -:10FB0000B0F5000FEDD2B0FA80FCACF1080CB2EB0E -:10FB10000C0200FA0CF0AABF00EBC250524218438C -:10FB2000BCBFD0401843704792F0000F81F4000131 -:10FB300006BF80F400000132013BB5E74FEA410304 -:10FB40007FEA226C18BF7FEA236C21D092EA030F70 -:10FB500004D092F0000F08BF0846704790EA010FEA -:10FB60001CBF0020704712F07F4F04D1400028BF17 -:10FB700040F00040704712F100723CBF00F50000F9 -:10FB8000704700F0004343F0FE4040F4000070472F -:10FB90007FEA226216BF08467FEA236301464202DB -:10FBA00006BF5FEA412390EA010F40F480007047EE -:10FBB0004FF0000304E000BF10F0004348BF404294 -:10FBC0005FEA000C08BF704743F0964301464FF0D0 -:10FBD00000001CE050EA010208BF70474FF000032C -:10FBE0000AE000BF50EA010208BF704711F000436D -:10FBF00002D5404261EB41015FEA010C02BF84463D -:10FC00000146002043F0B64308BFA3F18053A3F59B -:10FC10000003BCFA8CF2083AA3EBC25310DB01FAE2 -:10FC200002FC634400FA02FCC2F12002BCF1004F66 -:10FC300020FA02F243EB020008BF20F001007047F7 -:10FC400002F1200201FA02FCC2F1200250EA4C004B -:10FC500021FA02F243EB020008BF20EADC70704791 -:10FC60004FF0FF0C1CEAD0521EBF1CEAD15392EA9F -:10FC70000C0F93EA0C0F6FD01A4480EA010C40027B -:10FC800018BF5FEA41211ED04FF0006343EA5010D5 -:10FC900043EA5111A0FB01310CF00040B1F5000F17 -:10FCA0003EBF490041EAD3715B0040EA010062F1C6 -:10FCB0007F02FD2A1DD8B3F1004F40EBC25008BFB0 -:10FCC00020F00100704790F0000F0CF0004C08BFCE -:10FCD00049024CEA502040EA51207F3AC2BFD2F19B -:10FCE000FF0340EAC250704740F400004FF00003A9 -:10FCF000013A5DDC12F1190FDCBF00F000407047E3 -:10FD0000C2F10002410021FA02F1C2F1200200FA20 -:10FD100002FC5FEA310040F1000053EA4C0308BFE7 -:10FD200020EADC70704792F0000F00F0004C02BF38 -:10FD3000400010F4000F013AF9D040EA0C0093F0B3 -:10FD4000000F01F0004C02BF490011F4000F013B0D -:10FD5000F9D041EA0C018FE70CEAD15392EA0C0F7B -:10FD600018BF93EA0C0F0AD030F0004C18BF31F0E6 -:10FD7000004CD8D180EA010000F00040704790F0BC -:10FD8000000F17BF90F0004F084691F0000F91F060 -:10FD9000004F14D092EA0C0F01D142020FD193EA26 -:10FDA0000C0F03D14B0218BF084608D180EA0100AE -:10FDB00000F0004040F0FE4040F40000704740F08A -:10FDC000FE4040F4400070474FF0FF0C1CEAD05258 -:10FDD0001EBF1CEAD15392EA0C0F93EA0C0F69D0B4 -:10FDE000A2EB030280EA010C49024FEA402037D01F -:10FDF0004FF0805343EA111143EA10130CF0004016 -:10FE00008B4238BF5B0042F17D024FF4000C8B4205 -:10FE100024BF5B1A40EA0C00B3EB510F24BFA3EBE5 -:10FE2000510340EA5C00B3EB910F24BFA3EB9103B5 -:10FE300040EA9C00B3EBD10F24BFA3EBD10340EA0F -:10FE4000DC001B0118BF5FEA1C1CE0D1FD2A3FF655 -:10FE500050AF8B4240EBC25008BF20F0010070470A -:10FE60000CF0004C4CEA50207F32C2BFD2F1FF03AD -:10FE700040EAC250704740F400004FF00003013ADE -:10FE800037E792F0000F00F0004C02BF400010F482 -:10FE9000000F013AF9D040EA0C0093F0000F01F096 -:10FEA000004C02BF490011F4000F013BF9D041EAB8 -:10FEB0000C0195E70CEAD15392EA0C0F08D14202EB -:10FEC0007FF47DAF93EA0C0F7FF470AF084676E7BE -:10FED00093EA0C0F04D14B023FF44CAF08466EE797 -:10FEE00030F0004C18BF31F0004CCAD130F0004265 -:10FEF0007FF45CAF31F000437FF43CAF5FE700BFBD -:10FF00004FF0FF3C06E000BF4FF0010C02E000BFE5 -:10FF10004FF0010C4DF804CD4FEA40024FEA410387 -:10FF20007FEA226C18BF7FEA236C11D001B052EA3D -:10FF3000530C18BF90EA010F58BFB2EB030088BF03 -:10FF4000C81738BF6FEAE17018BF40F00100704772 -:10FF50007FEA226C02D15FEA402C05D17FEA236C54 -:10FF6000E4D15FEA412CE1D05DF8040B704700BF9B -:10FF7000844608466146FFE70FB5FFF7C9FF002832 -:10FF800048BF10F1000F0FBD4DF808EDFFF7F4FF6B -:10FF90000CBF012000205DF808FB00BF4DF808ED04 -:10FFA000FFF7EAFF34BF012000205DF808FB00BF27 -:10FFB0004DF808EDFFF7E0FF94BF012000205DF849 -:10FFC00008FB00BF4DF808EDFFF7D2FF94BF0120FA -:10FFD00000205DF808FB00BF4DF808EDFFF7C8FFF3 -:10FFE00034BF012000205DF808FB00BF4FEA40024B -:10FFF0004FEA41037FEA226C02D15FEA402C08D12C -:020000021000EC -:100000007FEA236C02D15FEA412C02D14FF000005D -:1000100070474FF0010070474FEA4002B2F1FE4FC7 -:100020000FD34FF09E03B3EB12620DD94FEA0023BA -:1000300043F0004310F0004F23FA02F018BF404293 -:1000400070474FF00000704712F1610F01D142027A -:1000500005D110F0004008BF6FF0004070474FF02E -:1000600000007047024B0344587800F0440070478A -:10007000108801000A22002100F0C2BD0A220021DE -:1000800000F0BEBD931E222B10B50C460CD80A2AD8 -:1000900003D000F06DFE204610BD0028F9DA2D23B4 -:1000A00001F8013B4042F4E700230B70184610BDF5 -:1000B000024B0146186800F00BB800BFA88FFF1F65 -:1000C000024B0146186801F0EDBF00BFA88FFF1F6B -:1000D0002DE9F04F01F10B06162E83B0044624D80B -:1000E000102900F2BA8000F0A3FA1026182202208C -:1000F000B54F3A44A2F1080153688B4200F0BA8030 -:100100005A68D96822F003021A449D68E9608D603C -:10011000516841F001012046516003F1080500F0EB -:100120008DFA284603B0BDE8F08F36F0070600F1DF -:100130009480B14200F2918000F07AFAB6F5FC7F2B -:10014000C0F09A81730A00F08F80042B00F26F8157 -:10015000B30903F1390003F1380CC3009A4F3B4453 -:10016000A3F108055B689D4206D10CE0002980F2EE -:100170002781DB689D4206D05A6822F00302911B5A -:100180000F29F3DD60463D69DFF840C265457CD04C -:100190006A6822F00302931B0F2B00F37B81002B74 -:1001A000C7E904CC80F26C81B2F5007F80F01A813F -:1001B000D308796801334FEA521E012202FA0EF287 -:1001C0000A4357F833E0C5F808E007EBC3010839E4 -:1001D000E9607A6047F83350CEF80C508310012163 -:1001E0009940914257D8114206D120F003004900AE -:1001F000114200F10400FAD007EBC0094D468646D3 -:10020000D5F80C80454508D11DE1002B80F22481F2 -:10021000D8F80C80454500F01681D8F8042022F06B -:100220000302931B0F2BF0DD2046D8E9025408EBA4 -:10023000060146F00106C8F80460EC60A56043F0D2 -:100240000104C7E90411C1E902CC4C6048F802304E -:1002500000F0F4F908F1080502E00C232360002502 -:10026000284603B0BDE8F08F4FF4007340204FF0F4 -:100270003F0C73E7D3689A4208BF02307FF440AF67 -:100280003D69DFF848C1654582D17A688310012154 -:1002900099409142A7D9BD686B6823F003094E4588 -:1002A00003D8A9EB06030F2B7ADCDFF824B1494B06 -:1002B000DBF800201B680132334405EB090A00F02B -:1002C000338103F580530F3323F47F6828F00F0840 -:1002D0004146204601F038FB411C024600F0F38005 -:1002E000824500F2EE803C4B196841441960084693 -:1002F00000F04E81DBF80010019301311BBFA2EB2F -:100300000A010918CBF80020196012F0070B00F061 -:100310001781CBF108010A44CBF580519044083194 -:10032000A1EB0801C1F30B0A51462046009201F0EF -:100330000BFB421CDDE9002300F04F81801A00EB2B -:100340000A081968BA6048F001005144BD42506083 -:10035000196000F02981B9F10F0F40F22781686818 -:10036000A9F10C0C2CF0070C00F0010040EA0C0085 -:1003700068604FF0050E05EB0C00BCF10F0FC0E9F3 -:1003800001EE00F2328150681546144B1A688A4219 -:1003900038BF1960124B1A688A4238BF196094E05E -:1003A000AA1943F0010346F001066E602046BA60C8 -:1003B000536000F043F90835284603B0BDE8F08FDC -:1003C000D9681A44A1E600BF0089FF1F0889FF1FF2 -:1003D000088DFF1F989AFF1F689AFF1F909AFF1FB2 -:1003E000949AFF1FB2F5206F4FEA522363D3142B68 -:1003F00000F2B78003F15C01C9005B3307EB010E2B -:100400007958AEF1080E8E4500F091804B6823F0CC -:100410000303934202D989688E45F7D1D1F80CE0E5 -:100420007A68C5E9021ECEF80850CD60D6E6142BD6 -:1004300059D9542B00F29D80330B03F16F0003F167 -:100440006E0CC3008AE60EF1010E1EF0030F05F1DB -:1004500008057FF4D5AE51E0424445465368D8F8CC -:100460000C1043F00103536055F8083F2046D96053 -:100470008B6000F0E3F8F3E6F00806F1080237E6D7 -:100480002A442046536843F001035360083500F0C6 -:10049000D5F8E5E6A919204646F0010643F0010427 -:1004A0006E60C7E90411C1E902CC4C60AB5000F0AA -:1004B000C5F80835D4E6930903F13901C90038338A -:1004C0009CE7BD425FD0BD68686820F003084645E0 -:1004D000A8EB060302D80F2B3FF762AF204600F0CF -:1004E000ADF80025BCE603F15C0003F15B0CC30032 -:1004F00034E659F808394B4540F0968010F0030F68 -:1005000000F1FF30F5D17B6823EA01037B604900ED -:1005100099423FF6C0AE19B9BDE649000EF1040E8E -:100520001942FAD0704667E603F11008D0E69A1037 -:100530004FF001087B6808FA02F21A437A6070E70C -:1005400002EB08014942C1F30B0A514620460092D2 -:1005500001F0FAF9431CDDE900237FF4EFAEDA463F -:10056000EFE6542B25D8130B03F16F01C9006E334E -:1005700044E7B3F5AA7F25D8F30B03F1780003F124 -:10058000770CC300EAE5294B186840441860B1E6CF -:10059000CAF30B0CBCF1000F7FF4ACAEBD68C844CD -:1005A00048F001006860F0E61546EEE6012353606E -:1005B00094E7B3F5AA7F23D8D30B03F17801C900E0 -:1005C00077331BE740F25452934223D8B30C03F124 -:1005D0007D0003F17C0CC300C0E5ABF1080BD844EF -:1005E000A8EB02084FF0000AABE605F1080120462F -:1005F000009301F057FDBD68009B68681968C4E668 -:1006000040F254518B420BD8930C03F17D01C90089 -:100610007C33F3E64FF47E737F204FF07E0C9DE534 -:100620004FF47E717E23E9E67B6870E7689AFF1FCE -:10063000014801F0B9BB00BFDC9BFF1F014801F07E -:10064000B5BB00BFDC9BFF1F10B4044C03460A4639 -:10065000206810BC194600F003B800BFA88FFF1F28 -:100660002DE9F84F1746002900F098800C4607F155 -:100670000B058046FFF7DCFF162D54F8041C5BD8F1 -:1006800010252A46AF425CD821F003069642A4F119 -:10069000080962DABC4BD3F808C009EB06008445B0 -:1006A00000F09780D0F804C02CF0010303445B688D -:1006B000DB0768D42CF0030C06EB0C03934247DAFB -:1006C000CB0710D454F8083CA9EB030ADAF804303D -:1006D00023F003018C44B444944580F211817318D3 -:1006E000934280F2E88039464046FFF7F1FC074626 -:1006F000E0B154F8043C23F001034B44A0F108029C -:10070000934200F0D280321F242A00F2F580132A8F -:1007100000F2AC80034622461168196051685960A6 -:1007200092689A602146404601F0BCFC4046FFF7C3 -:1007300085FF3846BDE8F88F25F00705002D2A46CD -:10074000A0DA0C23C8F8003000273846BDE8F88F3F -:100750001E46D0E90223D3609A60731B0F2B22D868 -:10076000D9F8043003F0010333434E44C9F8043090 -:10077000736843F00103736040462746FFF75EFF4E -:100780003846BDE8F88FC907ADD454F8083CA9EB4A -:10079000030ADAF8041021F00301A0E7BDE8F84FDE -:1007A0001146FFF795BCD9F8042009EB050102F0CA -:1007B00001024E4443F001032A43C9F804204B6070 -:1007C000736843F0010308317360404601F06AFC2E -:1007D000D2E7DCF8040020F0030B06EB0B0C05F16C -:1007E000100084454DDAC9073FF57DAF54F8081C69 -:1007F000A9EB010ADAF8041021F003018B44B34499 -:1008000058453FF76CAF5746DAF80C1057F8080F09 -:10081000321F242AC160886000F2DB80132A40F274 -:10082000D6802168CAF808106168CAF80C101B2A23 -:1008300000F2DF8008340AF110022168116061685B -:100840005160A16891600AEB0501ABEB050242F033 -:10085000010299604A60DAF8043003F001032B4387 -:100860004046CAF80430FFF7E9FE6EE723680360EC -:10087000636843601B2A68D804F1080200F108038A -:100880004AE709EB05029A60ACEB050343F001036C -:10089000536054F8043C03F001032B43404644F8F2 -:1008A000043CFFF7CBFE27464FE750F8043C23F00B -:1008B00003031E4451E75746DAF80C1057F8080FA7 -:1008C000321F242AC16088604CD8132A48D9216875 -:1008D000CAF808106168CAF80C101B2A56D80834E8 -:1008E0000AF110021E462368136063685360A36810 -:1008F0009360D1463C4630E7214600F0BFFB11E74C -:10090000D0E902135746CB60996057F8081FDAF810 -:100910000C30CB60321F242A99602DD8132A29D994 -:100920002368CAF808306368CAF80C301B2A42D81A -:1009300008340AF1100322681A6062685A60A268DB -:100940009A606646D1463C4607E7A3688360E36841 -:10095000C360242A26D004F1100200F11003DBE664 -:100960003A46BFE7214638461E46D14600F086FB90 -:100970003C46F2E63B46DEE7214638466646D1462F -:1009800000F07CFB3C46E8E60089FF1FA168CAF83E -:100990001010E168CAF81410242A20D010340AF18B -:1009A00018029FE7236903616169416104F118023C -:1009B00000F11803B0E6A368CAF81030E368CAF87B -:1009C0001430242A21D010340AF11803B3E73A4630 -:1009D00033E72146384600F051FB164B33E72269D6 -:1009E000CAF818206269CAF81C2018340AF12002DB -:1009F00078E7A168CAF81010E168CAF81410242A30 -:100A00000DD010340AF1180217E72369CAF818301C -:100A10006369CAF81C3018340AF120038BE7226995 -:100A2000CAF818206269CAF81C2018340AF120029A -:100A300003E700BF0089FF1F0CB410B51F4B00294E -:100A40001C689CB035DB4FF40273ADF81430029093 -:100A500006901FAB18D001394FF6FF720491079131 -:100A6000ADF8162002A91E9A0193204601F036FC2B -:100A7000421C01DA8B232360029B00221A701CB0F7 -:100A8000BDE8104002B070474FF6FF720491079125 -:100A9000ADF8162002A91E9A0193204601F01EFC13 -:100AA000431C01DA8B2323601CB0BDE8104002B068 -:100AB00070478B2323604FF0FF30F5E7A88FFF1FAF -:100AC000012B2DE9F84F41D0242B1F463ED88046FC -:100AD0004A488E4675461EF801BB10F80B4014F0CC -:100AE0000804F7D1BBF12D0F71D0BBF12B0F08BF5C -:100AF0009EF800B06FF0004908BF05F1020E002B10 -:100B000042D0102B55D0B9FBF7F60025284607FB3D -:100B1000169A05E033D007FB00C001251EF801BB83 -:100B2000ABF1300CBCF1090F06D9ABF1410CBCF1B3 -:100B3000190F12D8ABF1370C634517DDB5F1FF3F44 -:100B4000ECD08642E6D24FF0FF35E7E700F024FF15 -:100B5000162303600020BDE8F88FABF1610CBCF1F7 -:100B6000190F03D8ABF1570C6345E7DC6B1C25D09C -:100B700084B9002AEFD095BB1160BDE8F88FE2453B -:100B8000C9DA4FF0FF35C9E7BBF1300F04D00A27AF -:100B90003B46B8E74042ECE79EF8003003F0DF0345 -:100BA000582B20D110279EF801B03B460EF1020EC3 -:100BB000A9E7BBF1300F19D01F46A4E72223C8F8DC -:100BC000003072B10EF1FF3148461160D5E79EF852 -:100BD00000B04FF0004905F1020E01248FE7814675 -:100BE000F0E74846B7E708273B468CE79EF8000049 -:100BF00000F0DF005828D5D01F4684E71188010097 -:100C000010B4044C84461346206810BC0A46614662 -:100C1000FFF756BFA88FFF1F2DE9F04707464C4846 -:100C20000E46354616F801EB10F80EC01CF0080C05 -:100C3000F7D1BEF12D0F5AD0BEF12B0F03BF96F89E -:100C400000E06446AE1C64465BB1102B54D04FF0FC -:100C5000FF38B8FBF3F803FB08FA6FEA0A0A994673 -:100C600008E0BEF1300F5AD00A23DFF8E8804FF0D9 -:100C7000050A99460025284605E02CD009FB00C04E -:100C8000012516F801EBAEF1300CBCF1090F06D9C5 -:100C9000AEF1410CBCF1190F0BD8AEF1370C634526 -:100CA00010DDB5F1FF3FECD04045E6D94FF0FF3500 -:100CB000E7E7AEF1610CBCF1190F03D8AEF1570CA8 -:100CC0006345EEDC6B1C0BD004B140420AB165B940 -:100CD0001160BDE8F087D445D0DD4FF0FF35D0E797 -:100CE00022233B602846002AF3D0711EF0E796F8D5 -:100CF00000E00124AE1CA7E7BEF1300F21D130780F -:100D000000F0DF00582816D14FF0100996F801E0E6 -:100D10004FF00F0A02366FF070484B46AAE733785F -:100D200003F0DF03582BEFD008234FF0070A6FF0D2 -:100D3000604899469EE799466FF070484FF00F0A59 -:100D400098E74FF00F0A6FF07048994692E700BF9E -:100D5000118801009999991910B4044C84461346DE -:100D6000206810BC0A466146FFF756BFA88FFF1FD8 -:100D7000F0B5254FA2F1020E164605460C460FCFE0 -:100D80008BB0EC46ACE80F000FCFACE80F0097E853 -:100D900003004CF8040BBEF1220F8CF800102ED883 -:100DA00004F1FF3E70464FF0000CB5FBF6F206FB77 -:100DB000125328336B44614613F828CC00F801CF56 -:100DC0002B469E4201F1010C1546EED9002304F892 -:100DD0000C3089B1A44472461EF8010F1CF8015D65 -:100DE0008EF80050A4EB0E030232013B121B0B44A1 -:100DF0009A428CF80000EEDB20460BB0F0BD0023D9 -:100E0000184623700BB0F0BDA4870100FFF7B0BFF8 -:100E10000EB410B59DB06FF000411FABCDE90601D7 -:100E20000491094953F8042B0290084C0868019377 -:100E300002A9059401F052FA029B00221A701DB01B -:100E4000BDE8104003B07047A88FFF1F0802FFFFE6 -:100E5000024A0349034800F0BBB800BF108DFF1FD2 -:100E6000DD450100888EFF1F0C4B4168994210B58B -:100E7000044601D003F0B2FBA168094B994202D0AD -:100E8000204603F0ABFBE168064B994204D02046B4 -:100E9000BDE8104003F0A2BB10BD00BF9C9AFF1F2D -:100EA000049BFF1F6C9BFF1F2DE9F8432A4C2B4B23 -:100EB0002B48DFF8B090DFF8B0802C4F1860002589 -:100EC00004230822294604F15C00294E6566C4E922 -:100ED0000253C4E90055C4E90455A56100F04AF97C -:100EE000244B63670822294604F1C400C4E907497A -:100EF000C4E90987C4E91A55C4E91E55C4F8CC50A1 -:100F00002567C4F88050E66200F034F91A4BC4F843 -:100F1000DC30294604F16803082204F59670C4F811 -:100F20008430C4E92298C4E92476C4E93455C4E97C -:100F30003855C4F83451C4F8D850C4F8E85000F01B -:100F400019F904F1D003C4E93C98C4E93E76C4F829 -:100F5000EC30BDE8F88300BF9C9AFF1FD49BFF1FB5 -:100F6000510E0100194801003D4801007D48010073 -:100F70009D480100090001001200020010B504465E -:100F80000A4800F011FF636B23B9094B094A1B683B -:100F9000626323B1BDE81040044800F007BFFFF7CB -:100FA00083FFBDE81040014800F000BFE09BFF1F39 -:100FB000D49BFF1F690E0100014800F0F5BE00BF81 -:100FC000E09BFF1F014800F0F1BE00BFE09BFF1F48 -:100FD0002DE9F84380460F4616464FF00009D6E942 -:100FE0000154013D11D4A389012B05F1FF3508D926 -:100FF000B4F90E300133214603D04046B84749EAE0 -:1010000000096B1C04F16804EDD13668002EE6D1AE -:101010004846BDE8F88300BF032A10B516D940EA58 -:1010200001039B0724D104460B4619462046D1F8FC -:1010300000E0D0F800C0F44504F1040403F1040317 -:1010400016D1043A032A20461946EED8541E9AB106 -:10105000421E013901E0C3180CD012F801EF11F85B -:1010600001CFE645A4EB0203F5D0AEEB0C0010BDBA -:10107000541EEDE7184610BD104610BD88420DD92C -:101080008B1883420AD900EB020CBAB1624613F8FE -:1010900001CD02F801CD9942F9D170470F2A0ED83F -:1010A000034602F1FF3C4AB10CF1010C013B8C44B8 -:1010B00011F8012B03F8012F6145F9D1704740EA7F -:1010C00001039B0750D1A2F1100370B501F1200C70 -:1010D00023F00F0501F1100E00F11004AC441B09C0 -:1010E0005EF8105C44F8105C5EF80C5C44F80C5C34 -:1010F0005EF8085C44F8085C5EF8045C44F8045C44 -:101100000EF1100EE64504F11004E9D1013312F09E -:101110000C0F01EB031102F00F0400EB031327D0B7 -:10112000043C24F003064FEA940C1E441C1F8E4618 -:101130005EF8045B44F8045FB442F9D10CF1010499 -:1011400002F0030203EB840301EB840102F1FF3C94 -:101150004AB10CF1010C013B8C4411F8012B03F84E -:10116000012F6145F9D170BD02F1FF3C03469BE7B9 -:101170002246EBE7830730B548D0541E002A3FD003 -:10118000CAB2034601E0013C3AD303F8012B9D07A4 -:10119000F9D1032C2DD9CDB245EA05250F2C45EA0E -:1011A000054536D9A4F1100222F00F0C03F1200EF0 -:1011B000E6444FEA121C03F1100242E9045542E9E9 -:1011C000025510327245F8D10CF1010214F00C0FE7 -:1011D00003EB021204F00F0C13D0ACF1040323F064 -:1011E00003030433134442F8045B9342FBD10CF035 -:1011F00003042CB1C9B21C4403F8011B9C42FBD16F -:1012000030BD64461346002CF4D1F9E7034614467A -:10121000BFE71A46A446E0E7830710B5044610D19D -:101220000268A2F1013323EA020313F0803F08D1E0 -:1012300050F8042FA2F1013323EA020313F0803F98 -:10124000F6D003781BB110F8013F002BFBD100F062 -:1012500025FD204610BD00BF11F0FF01034644D01C -:10126000820732D110B5046841EA012E4EEA0E4ED3 -:101270008EEA0402A2F1013323EA0203A4F101324F -:1012800022EA0402134313F0803F0FD150F8044FB9 -:1012900084EA0E0CA4F10133ACF1013223EA040319 -:1012A00022EA0C02134313F0803FEFD0037823B9F6 -:1012B00036E010F8013F002B32D09942F9D110BD31 -:1012C0008A4211D09A071846CCD0184613F8012B41 -:1012D000002AF5D1104670479907184607D01846DE -:1012E00001330278002AF7D170478207F7D10268EC -:1012F000A2F1013323EA020313F0803F08D150F832 -:10130000042FA2F1013323EA020313F0803FF6D049 -:101310000378002BE8D010F8013F002BFBD1704779 -:10132000184610BD830730B427D10468A4F10133F7 -:1013300023EA040313F0803F034608D153F8045F07 -:10134000A5F1013424EA050414F0803FF6D01C789E -:101350001CB113F8014F002CFBD1013903EB020C37 -:101360009C4508D011F8012F03F8012B1AB16345F1 -:10137000F6D100221A7030BC70470346E7E700BF81 -:10138000002A3ED040EA01039B0730B584462FD1A6 -:10139000032A2DD90B4608E0043A8446194625D085 -:1013A0001EF0803F22D1032A22D90468194653F83F -:1013B000045BA4F1013EAC4284462EEA040E00F127 -:1013C0000400E9D09CF800000C78A0421BD1E6464E -:1013D00068B11EF8010F11F8014FA2EB0E03A042F5 -:1013E00003F1FF330FD11CEB0303F1D1002030BD1B -:1013F0009CF800000C78844205D1012AF6D0E6461C -:10140000E6E710467047001B30BD00BF40EA01030D -:101410009B0730B501D1032A0FD8844601F1FF3E66 -:1014200007E01EF8011F03F8011B541EC1B19C46C2 -:1014300022466346002AF4D130BD0B468446194645 -:1014400053F8045BA5F1013424EA050414F0803F4D -:10145000E4D1043A032A4CF8045B1946EFD8DDE7DF -:101460009444002CE8D003F8011B6345FBD130BD48 -:10147000024A12680123503200F002B8A88FFF1F01 -:10148000F0B4074610B33E468C4616F8010B01E057 -:10149000A04216D01CF8014B002CF9D1D8B116F897 -:1014A000015B0C4601E0002BF9D014F8013B9D4292 -:1014B000F9D14DB1002306F8013C16603846F0BC66 -:1014C00070475BB13746DEE72E46F6E71768002F18 -:1014D000D9D13846F3E7F0BC106070471660384643 -:1014E0003B70ECE701292DE9F0415BD94FF0010891 -:1014F000C64600244FF0FF35434608E0A3EB05083D -:101500001C464FF0010E04EB0E038B4210D200EB91 -:101510000E0CC75C1CF80560B742EFD332D04FF019 -:1015200001082546C646444404EB0E038B42EED325 -:101530000127C2F80080BE4600244FF0FF363B462C -:1015400007E09F1B1C464FF0010E04EB0E038B427D -:1015500010D200EB060C10F803801CF80EC0E0451A -:10156000EFD817D001272646BE463C4404EB0E03B5 -:101570008B42EED30136681C864201D31760304699 -:10158000BDE8F081C6450ABF74440EF1010E4FF06C -:10159000010EB8E7BE450ABF74440EF1010E4FF0CC -:1015A000010ED2E701270026E8E700BF2DE9F04F42 -:1015B0009246ADF21C4D05AA81460F46504619468B -:1015C0001D46FFF78FFF134683460DF2144243F882 -:1015D000045F9342FBD1002D00F0E0806C1E06AE4C -:1015E0000AF1FF320AEB0400009612F8011FAB1A51 -:1015F000013B5344824246F82130F6D105995A46C0 -:1016000051445046FFF708FD00286FD10BF1FF331E -:101610000393CBF1010380460646019309EB060EC6 -:10162000009A1EF8043052F82330DBB1B8F1000FF5 -:1016300003D0059A9A4200D9AB1A1E444FF0000815 -:101640007B1B9E42EAD909EB070045F4006103F0D9 -:1016500037F907447B1B9E42E0D900200DF21C4D58 -:10166000BDE8F08FC3455B4638BF4346A34210D266 -:10167000591EF21851444A4402E00133A34208D2F1 -:1016800012F8010B11F801CF8445F6D0019A1644E7 -:10169000D3E7C345039B7AD906EB0B024A440AEB16 -:1016A0000B01029602E0434515D0034612F8010DE6 -:1016B00011F8016D864203F1010C03F1FF30F2D005 -:1016C000029E634608F1010898450AD8059B1E440E -:1016D000A5EB0308B4E7434608F101089845029ECC -:1016E000F4D970460DF21C4DBDE8F08FA5EB0B034D -:1016F0005B4538BF5B46013305930BF1FF33019324 -:10170000CBF101030026029345F4006809EB060EB5 -:10171000009A1EF8043052F823306BB11E447B1B34 -:10172000B342F3D209EB0700414603F0C9F807447E -:101730007B1BB342EAD290E7A34514D2019B0BEB8B -:1017400006020AEB03014A445B4602E00133A3426E -:1017500009D212F8010B11F801CF8445F6D0029A94 -:1017600016441E44DBE7BBF1000F12D00BEB060161 -:1017700049440AEB0B0201E053450AD012F801CDAF -:1017800011F8010D84451346F6D0059BC6E75B466C -:1017900098E770460DF21C4DBDE8F08F06AB4FF098 -:1017A000FF3400932AE700BF2DE9F0410D46097888 -:1017B00090B00446002954D06A78002A00F0838053 -:1017C000AB78002B51D0E8782E68002800F082809A -:1017D0002B79002B57D0284600F052FB064640F4E8 -:1017E0000071204603F06CF886425BD8FE2E00F2B2 -:1017F0008680801B27184022711C6846FFF7BAFCC0 -:101800007EB16A1E5FFA86FC901912F8013F03F060 -:101810003F0340336B44A91A6144824203F8401CE1 -:10182000F3D1013CA35D03F03F0340336B4413F855 -:10183000403C1C44A74203D239E04444A74236D37B -:1018400014F806C00CF03F0C0CF140030DEB030C38 -:101850002046324629461CF8408CFFF7DDFB002865 -:10186000EBD1204610B0BDE8F081007842EA014299 -:1018700000E00C4640EA0343611C98B19A4260784C -:10188000F7D1013CEDE7227862B131BA01E099422B -:101890001ED042EA0323204614F8012F002AF6D175 -:1018A000994215D00024204610B0BDE8F081BB5D00 -:1018B000B819002BF6D04FF4006103F001F807448B -:1018C000BC42AED9EEE710B0BDE8F041FFF7C4BCB2 -:1018D000C41EC6E7120442EA016242EA03232178E9 -:1018E000024600E02C4641EA0200651C0202002983 -:1018F000D8D0B3EB002F6178F4D1023CB1E70146B8 -:1019000033462A46204610B0BDE8F041FFF74EBEF0 -:10191000014B93F8280170471C8DFF1F13460A46A0 -:101920000146022000F01ABB70B50C4682B0154685 -:101930001E46FDF707FD2246002400962B46019423 -:1019400003F012F802B070BD38B5074D002204460E -:1019500008462A60FAF772FB431C00D038BD2B689A -:10196000002BFBD0236038BD789DFF1F38B50C4697 -:10197000084D8446114620461A4600232B606446D3 -:10198000FAF724F8431C00D038BD2B68002BFBD09D -:10199000236038BD789DFF1F014B1868704700BF5A -:1019A000A88FFF1FFFFFFFFFFFFFFFFFFFFFFFFFEE -:1019B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 -:1019C000A2EB0300704700BF02780B78012A28BF02 -:1019D0009A42F5D16DE9044540EA0104CDE9026778 -:1019E0006FF0000C4FEA447212B380EA010414F065 -:1019F000070F6AD100F0070420F0070004F0030588 -:101A000021F007014FEAC505F0E8042314F0040FA4 -:101A1000F1E804670CFA05F462EA040266EA0406D7 -:101A20000AD063EA0403624667EA0407664603E0F5 -:101A3000F0E80423F1E8046782FA4CF582EA060430 -:101A4000A4FA8CF46CBB83FA4CF583EA0705A5FA7B -:101A50008CF595B950E9022351E9026782FA4CF5F9 -:101A600082EA0604A4FA8CF483FA4CF583EA0705AB -:101A7000A5FA8CF52543DBD09CB92DBAB5FA85F4CF -:101A800024F0070427FA04F1DDE9026723FA04F3DE -:101A900003F0FF0001F0FF01FDE80445A0EB0100A9 -:101AA000704724BAB4FA84F424F0070426FA04F147 -:101AB000DDE9026722FA04F202F0FF0001F0FF0103 -:101AC000FDE80445A0EB0100704714F0030F3CD182 -:101AD00010F0030428D150F8082B51F8083B82FA83 -:101AE0004CF582EA0305A5FA8CF55DB950F8042C93 -:101AF00051F8043C82FA4CF582EA0305A5FA8CF50C -:101B0000002DE8D02DBAB5FA85F424F0070423FAA5 -:101B100004F122FA04F202F0FF0001F0FF01FDE8F7 -:101B20000445A0EB010070474FEAC40420F0030015 -:101B300050F8082B21F0030151F8083B0CFA04F48B -:101B400062EA040263EA0403C9E710F003041AD04E -:101B5000A1EB040120F00300E40750F8042B06D0A9 -:101B60000FD28B785FFAA2F4E41A06D12BB1CB78AE -:101B70005FFAB2F4E41A00D11BB920465DF8104BAD -:101B8000704701F1040150F8042BCC0721F0030148 -:101B900051F8043B48D824D222F07F4482FA4CF515 -:101BA00094EA1325A5FA8CF50AD165B951F8043BDE -:101BB00084EA0204B4EB036F0ED150F8042BEBE778 -:101BC0004FEA132355E035F07F454DD10878FDE805 -:101BD0000445C0F1000070474FEA126203F0FF03B2 -:101BE00047E002EA1C4482FA4CF594EA1345A5FA50 -:101BF0008CF50AD165B951F8043B84EA0204B4EBD0 -:101C0000034F0CD150F8042BEBE74FEA134330E0BD -:101C100015EA1C4528D10B884FEA124229E04FEA09 -:101C2000124203EA1C4324E002F0FF0482FA4CF55E -:101C300094EA1365A5FA8CF50AD165B951F8043B0D -:101C400084EA0204B4EB032F09D150F8042BEBE72C -:101C50004FEA13630DE015F0FF0F05D10B684FEA53 -:101C6000122223F07F4304E04FF00000FDE804451A -:101C7000704712BA1BBA82FA4CF482EA0304A4FA3F -:101C80008CF5B5FA85F402FA04F203FA04F34FEA8C -:101C90001260FDE80445A0EB1360704780EA010282 -:101CA000844612F0030F4FD111F0030F32D14DF8DB -:101CB000044D11F0040F51F8043B0BD0A3F1013295 -:101CC0009A4312F0803F04BF4CF8043B51F8043BA8 -:101CD00016D100BF51F8044BA3F101329A4312F020 -:101CE000803FA4F101320BD14CF8043BA24312F027 -:101CF000803F04BF51F8043B4CF8044BEAD0234624 -:101D00000CF8013B13F0FF0F4FEA3323F8D15DF8D5 -:101D1000044B704711F0010F06D011F8012B0CF89D -:101D2000012B002A08BF704711F0020FBFD031F815 -:101D3000022B12F0FF0F16BF2CF8022B8CF800209C -:101D400012F47F4FB3D1704711F8012B0CF8012B1F -:101D5000002AF9D1704700BF70B50D4E0D4D761BAE -:101D6000B61006D0002455F8043B01349847A6422B -:101D7000F9D1094E094D761B06F022FFB61006D0A8 -:101D8000002455F8043B01349847A642F9D170BDB0 -:101D9000CC8B0100CC8B0100E08B0100CC8B0100CF -:101DA000704700BF704700BF704700BF704700BF5B -:101DB00001F0FF01102A2BDB10F0070F08D010F8FC -:101DC000013B013A8B422DD010F0070F42B3F6D100 -:101DD000F0B441EA012141EA014122F007047FF019 -:101DE00000070023F0E80256083C85EA010586EA70 -:101DF000010685FA47F5A3FA87F586FA47F6A5FAAC -:101E000087F68EB9EED1F0BC01F0FF0102F00702B7 -:101E100032B110F8013B013A83EA010313B1F8D162 -:101E20000020704701387047002D06BF3546033843 -:101E3000073815F0010F07D1013015F4807F02BF7C -:101E4000013015F4C03F0130F0BC0138704700BFCD -:101E5000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 -:101E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 -:101E7000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 -:101E800090F800F06DE9024520F007016FF0000CBA -:101E900010F0070491F820F040F049804FF0000462 -:101EA0006FF00700D1E9002391F840F000F108003D -:101EB00082FA4CF2A4FA8CF283FA4CF3A2FA8CF375 -:101EC0004BBBD1E9022382FA4CF200F10800A4FADC -:101ED0008CF283FA4CF3A2FA8CF3E3B9D1E9042330 -:101EE00082FA4CF200F10800A4FA8CF283FA4CF367 -:101EF000A2FA8CF37BB9D1E9062301F1200182FA21 -:101F00004CF200F10800A4FA8CF283FA4CF3A2FA26 -:101F10008CF3002BC6D0002A04BF04301A4612BA34 -:101F2000B2FA82F2FDE8024500EBD2007047D1E937 -:101F3000002304F00305C4F100004FEAC50514F0C6 -:101F4000040F91F840F00CFA05F562EA05021CBF97 -:101F500063EA050362464FF00004A9E72DE9F04764 -:101F6000DFF874A00646DAF8000098460F4691465E -:101F7000FFF71AFF194B1C6824B365681F2D24DC7A -:101F80005EB96B1C0235DAF80000636044F8257016 -:101F9000FFF70CFF0020BDE8F08704EB850101236B -:101FA000C1F88890D4F88821AB401A43022EC4F8B7 -:101FB0008821C1F80881E4D1D4F88C211A43C4F8EF -:101FC0008C21DEE7064C1C60D7E7DAF80000FFF74B -:101FD000EDFE4FF0FF30DEE7AC8FFF1F749DFF1F5B -:101FE000E49BFF1F024B13B1024800F005B8704795 -:101FF000000000000D4A0100002301461A46184661 -:10200000FFF7ACBFF8B5244F0C460646FEF710FBB1 -:10201000BB685D68C4F57E610F3125F003054B197F -:1020200023F47F6323F00F03A3F58054B4F5805F9E -:1020300007DB00213046FFF787FCBB682B44984242 -:1020400004D03046FEF7FAFA0020F8BD614230466F -:10205000FFF77AFC01300DD0104ABB682D1B45F00C -:1020600001055D60136830461B1B1360FEF7E6FA3E -:102070000120F8BD00213046FFF766FCBA68831ADC -:102080000F2BDEDD43F001035360054B03491B6852 -:10209000C01A0860D5E700BF0089FF1F689AFF1FBC -:1020A000088DFF1F002961D0F8B50C460646FEF7E3 -:1020B000BFFA54F8042C7B4FA4F1080522F001016B -:1020C00005EB010CB868DCF80430604523F003032D -:1020D00000F08B80D207CCF8043032D454F8082CAE -:1020E000AD1A1144AA6807F1080082426AD00CEBCD -:1020F0000304D4F804E0EC68D4601EF0010FA26081 -:1021000000F0978041F001036B60CCF80010B1F54E -:10211000007F35D27868CB080122490901338A4013 -:10212000024357F833107A6007EBC302083AC5E957 -:10213000021247F83350CD603046BDE8F840FEF754 -:102140007DBA0CEB03025268D00710D4194407F192 -:102150000800DCF80830834273D0DCF80C20DA6029 -:10216000936041F001036B606950D0E7704741F024 -:102170000103B1F5007F44F8043CCCF80010C9D34A -:10218000B1F5206F4FEA512348D28B0903F1390092 -:1021900003F13802C300F818FB580838984259D0A8 -:1021A0005A6822F003028A4202D99B689842F7D10A -:1021B000D868C5E902308560DD603046BDE8F8408A -:1021C000FEF73CBA0CEB03025268D20763D40B440F -:1021D000DCE90212CA60916043F001026A60304695 -:1021E000EB50BDE8F840FEF729BA0B44D10707D4FD -:1021F00054F8082CAD1A1344D5E90212CA60916054 -:1022000043F001026A60284ABD6012689A4293D87E -:10221000264B30461968FFF7F5FE8DE7142B0AD9D7 -:10222000542B1FD80B0B03F16F0003F16E02C30098 -:10223000B1E719448DE703F15C0003F15B02C300D1 -:10224000A9E741F00103C7E90455C5E902006B6045 -:10225000695071E779689210012404FA02F20A4386 -:102260007A60A6E7B3F5AA7F06D8CB0B03F1780016 -:1022700003F17702C3008EE740F25452934206D82E -:102280008B0C03F17D0003F17C02C30083E74FF464 -:102290007E737E227FE741F001036B60CCF8001073 -:1022A0004AE700BF0089FF1F0C8DFF1F989AFF1F90 -:1022B00082B049B15AB16BB113780B601278101E1D -:1022C00018BF012002B0704701A9002AF3D11046BF -:1022D00002B070476FF00100F4E700BF2DE9F04F46 -:1022E000D9B00C460C9190460E93824602F0FAFA51 -:1022F000036819931846FFF7C3FD082217900021C1 -:1023000028A8FEF737FFA3891F0603D52369002BF2 -:1023100000F03F8700232FAA0024CDE92D33CDE91B -:102320001A33CDE91C331393189309930023CDE995 -:1023300014342C9291464446A046784BD3F8E4508E -:10234000FFF7E6FA034628A80090424624A9504623 -:10235000A847002800F0B080C0F2A680249A252A61 -:10236000034601D09844E8E7B8EB0407064640F07E -:10237000A78000234FF0FF328DF887309B460B93E8 -:1023800008F1010898F8003008922B25202608F162 -:102390000108A3F120025A2A00F2C280DFE812F0FD -:1023A000E602C000C000E102C000C000C0006A0038 -:1023B000C000C00008028402C0001302C702C000AF -:1023C000C2025B005B005B005B005B005B005B00CC -:1023D0005B005B00C000C000C000C000C000C000C7 -:1023E000C0004301C00089011D02430143014301B4 -:1023F000C000C000C000C0001802C000C0009602AB -:10240000C000C000C000B101C000A902C000C000EF -:10241000DD06C000C000C000C000C000C000C00099 -:10242000C0004301C0008901E201430143014301AF -:102430007702E2017F00C0008902C0005F02DA0675 -:1024400032027F00C000B1017C00B406C000C000B1 -:10245000B806C0007C00A3F13002002118F8013B4F -:1024600001EB810102EB4101A3F13002092AF5D908 -:102470000B918EE7504602F035FA43681C931846DC -:10248000FFF7FEFC1D900746504602F02BFA8368CA -:102490001A93002F40F0B18598F8003077E798F84C -:1024A00000304BF0200B72E70822002128A8FEF72D -:1024B00061FE0123984440E7B8EB0407064611D0BB -:1024C0002E9B3B442E932D9B0133072BC9E90047DC -:1024D0002D9319DC09F10809099B3B440993002E4F -:1024E0007FF447AF2E9B002B41F001820C9BB3F988 -:1024F0000C3013F0400F099B18BF4FF0FF330993C6 -:10250000099859B0BDE8F08F0C992CAA504603F0F9 -:102510005FFB0028EAD10DF1BC09DDE71C8DFF1F30 -:102520001093002BDED000228DF8FC3001238DF8B3 -:10253000872007930D920A93089212921692119295 -:102540003FAC1BF0020302D00799023107911BF048 -:1025500084010F9105D10B9907980F1A002F00F3F2 -:1025600082832E9E82B10122C9F804202D9A013265 -:1025700001360DF18701072A2E962D92C9F8001019 -:1025800000F3BD8309F1080983B12D9B22AA013311 -:102590000236C9F80020072B4FF002022E962D9329 -:1025A000C9F8042000F3C08309F108090F9B802BB0 -:1025B00000F08182089B0A9A9F1A002F00F3BC82C8 -:1025C0001BF4807F40F01E820A9BC9F804301E4431 -:1025D0002D9BC9F800400133072B2E962D9300F355 -:1025E000378309F108091BF0040F05D00B9B079AEC -:1025F0009C1A002C00F3A483099B0B9A07998A422A -:10260000ACBF9B185B180993002E40F0CA820023D0 -:102610002D930D9B1BB10D995046FFF743FD0DF116 -:10262000BC09444688E610930E9B073323F007014C -:10263000F1E80223CDE91423DDE9142323F000455A -:102640000E9116461046B34B29464FF0FF32FDF768 -:102650006BF9002840F0FC84AE4B304629464FF021 -:10266000FF32FDF743F9002840F0F284DDE9140160 -:1026700000220023FDF730F9002841F038809DF852 -:102680008720A54CA54B2BF0800B10994729C8BF7C -:102690001C46002303210D9307910A91089312937E -:1026A00016931193002A3FF44CAF079B0133079315 -:1026B00047E7432B109303D01BF0100F00F0518518 -:1026C0000E9E082200212AA83FACFEF753FD2AAB3C -:1026D00056F8042B2146504602F0ACF9034601336C -:1026E0000A9001F0C3820A9B0E9623EAE3730793D4 -:1026F00000228DF887200D92089212921692119264 -:102700001FE70E9F109357F8044B00238DF8873076 -:10271000002C00F04D85109B532B00F0D4861BF04D -:102720001003119340F0CF86089B5D1C01F0CC8014 -:1027300011991A462046FFF73BFB0D90002801F047 -:1027400051830D9B11999DF887200E971B1B0A93AF -:1027500023EAE373079373230891129116910D9165 -:1027600010939FE71BF0200F10930E9B3CD0073374 -:1027700023F007031A4611465B6851F8082B0E91A7 -:102780001946002BC0F20184089B013300F0A88297 -:1027900052EA01032BF0800540F0A382089B002B36 -:1027A00040F0A482AB46002308930A9358ACFFE0A4 -:1027B0000E9B53F8042B0B92002A80F20C840B9A88 -:1027C0000E9352420B9298F800304BF0040BDEE56A -:1027D00098F800304BF0080BD9E54BF0100B1BF0CC -:1027E000200F10930E9BC2D11BF0100F40F0FE8300 -:1027F0001BF0400F00F0F68333F9042B0E93D11732 -:102800000B46BEE70E9B53F8042B0E9347F630039E -:10281000ADF888307820424B18934BF00205002128 -:10282000022310900020089C8DF88700601C00F0A7 -:10283000A88052EA010025F0800B40F0A180002C16 -:1028400040F09586002BAED115F001030A9300F0FD -:10285000C78330238DF85F310DF25F14A8E01BF0C1 -:10286000200F40F0E5831BF0100F40F086861BF030 -:10287000400F40F07F871BF4007F00F07E860E9BA8 -:10288000099953F8042B0E931170444654E598F8B7 -:102890000030682B03BF98F801304BF4007B08F13F -:1028A00001084BF0400B72E598F800308DF8875026 -:1028B0006DE598F800306C2B03BF98F801304BF0B1 -:1028C000200B08F101084BF0100B60E510934BF062 -:1028D000100B1BF0200100F04A830E9B073323F0FE -:1028E0000703596853F8082B0E932BF480650023D7 -:1028F00098E710934BF0100515F0200100F02883A5 -:102900000E9B073323F00703596853F8082B0E93E7 -:10291000012387E7FFFFEF7F148901001889010079 -:102920002489010098F800304BF0800B2FE54146D8 -:1029300011F8013B2A2B01F07F82A3F13002092A12 -:10294000884698BF002101F2768118F8013B01EB1F -:10295000810102EB4101A3F13002092AF5D9089166 -:1029600017E598F800304BF0010B10E59DF8873023 -:10297000002B7FF491AD98F800308DF8876006E564 -:102980005D46012B00F0AD81022B58AC1FD1189889 -:1029900002F00F031209C35C04F8013D42EA017220 -:1029A000090952EA0103F3D158AB1B1BAB460A934A -:1029B0000A9908989DF8872081424FF00003B8BF1C -:1029C00001460D9307911293169311936AE602F054 -:1029D0000703D20842EA4172C908303352EA0106BD -:1029E000204604F8013DF2D1E907DDD5302BDBD0DC -:1029F0003023023804F8013C58AB1B1AAB460A934B -:102A00000446D5E7109B652B40F3DC80DDE914011B -:102A100000220023FCF756FF002800F0C8810123A4 -:102A2000C9F804302D9BBD4AC9F800200133013696 -:102A3000072B2E962D9300F3398509F10809239B66 -:102A4000139A934280F2C282179B199A1E44C9E9D5 -:102A500000232D9B2E960133072B2D9300F38D839E -:102A600009F10809139B5C1E002C7FF7BCAD102CEC -:102A70002D9BAB4D40F35585324610270C9E05E04B -:102A800009F10809103C102C40F34A85013310323B -:102A9000072BC9E90057CDE92D32F1DD2CAA3146CB -:102AA000504603F095F8002840F08380DDE92D3290 -:102AB0000DF1BC09E6E70B9B079A9F1A002F7FF7E1 -:102AC00079AD102F2D9B964D23DD324626460C9C6A -:102AD00004E0103F102F09F1080918DD013310320E -:102AE0001021072BCDE92D32C9F80050C9F8041088 -:102AF000EFDD2CAA214650460DF1BC0903F068F821 -:102B0000002856D1103F102FDDE92D32E6DC344687 -:102B1000164601333E44072BCDE92D36C9F8005047 -:102B2000C9F8047000F31685089B0A9A9F1A002FB3 -:102B300009F108097FF744AD102F2D9B784D22DD58 -:102B4000324626460C9C04E0103F102F09F108097C -:102B500017DD013310321021072BCDE92D32C9F8D2 -:102B60000050C9F80410EFDD2CAA2146504603F0AE -:102B70002FF8F0B9103F102FDDE92D320DF1BC090F -:102B8000E7DC3446164601333E44072BCDE92D36AB -:102B9000C9F80050C9F8047000F3CD8109F10809A3 -:102BA0000EE50C992CAA504603F012F800283FF4C9 -:102BB0002EAD0D9B002B3FF499AC0D995046FFF7BD -:102BC00071FA93E4139B012B40F36E812D9FC9F89A -:102BD000004001231F440136072FC9F804302E9608 -:102BE0002D9700F3D98109F10809179B199A01372C -:102BF0001E44072FC9E90023CDE92D7600F3D981C2 -:102C000009F10809DDE9140100220023FCF75AFE4E -:102C1000002840F06781139B0137013B01341E44BB -:102C2000072FC9F800402D97C9F804302E9600F3FD -:102C30004C8109F108091B9BC9F8043001371E4477 -:102C4000072F26ABCDE92D76C9F800307FF7C9AC48 -:102C50000C992CAA504602F0BBFF0028A9D12E9E49 -:102C60000DF1BC09BFE4102FDDE92D212D4D27DD2D -:102C7000CDE91E381026D046A2460C9C04E0103F39 -:102C8000102F09F1080916DD01321031072AC9E9B0 -:102C90000056CDE92D21F2DD2CAA214640460DF14A -:102CA000BC0902F095FF002840F0F283103F102F7E -:102CB000DDE92D21E8DC54461E9BC246DDF87C8010 -:102CC000C9F8005001327E18072ACDE92D26C9F82F -:102CD000047000F3CC839DF8872009F1080941E4D2 -:102CE0005D460A2A71F1000380F029833032012306 -:102CF0008DF85F21AB460A930DF25F1458E60C99EC -:102D00001E932CAA504602F063FF00287FF451AFB7 -:102D10002E9E1E9B0DF1BC0936E400BF0C860100FF -:102D200064890100548901000C992CAA504602F0D4 -:102D30004FFF00287FF43DAF2E9E0DF1BC0935E416 -:102D4000102C2D9BB84D1FDDDDF830B0102704E0AE -:102D5000103C102C09F1080916DD01331036072B41 -:102D6000C9E90057CDE92D36F2DD2CAA5946504667 -:102D70000DF1BC0902F02CFF00287FF41AAF103CC3 -:102D8000102CDDE92D36E8DC01332644072BC9E998 -:102D90000054CDE92D367FF72FAC0C992CAA504664 -:102DA00002F016FF00287FF404AF2E9E24E423993E -:102DB000002940F32783119D139B9D42A8BF1D4608 -:102DC000002D0BDD2D9B01332E44072BC9E9004557 -:102DD0002E962D9300F3DD8609F10809119F002D31 -:102DE000A8BF7F1B002F00F3F481119B1BF4806FA1 -:102DF00023440A9340F01482239B139A934203DBEB -:102E00001BF0010F00F0A584179A19991644C9E91F -:102E100000122D9A2E960132072A2D9200F3C686B3 -:102E200009F10809139AA518D41A0A9BED1AA542AC -:102E3000A8BF2546002D0DDDC9F800302D9BC9F82F -:102E4000045001332E44072B2E962D9300F3BE869B -:102E500009F10809002DA8BF641B002C7FF7C3AB44 -:102E6000102C2D9B714D40F35C83324610270C9E35 -:102E700005E009F10809103C102C40F3518301339F -:102E80001032072BC9E90057CDE92D32F1DD2CAA0C -:102E90003146504602F09CFE00287FF48AAEDDE900 -:102EA0002D320DF1BC09E6E71BF0010F7FF48EAE69 -:102EB0002D9FC9F8004001231F440136072FC9F890 -:102EC00004302E962D977FF7B4AE0C992CAA50465D -:102ED00002F07EFE00287FF46CAEDDE92D760DF168 -:102EE000BC09A8E6139B5C1E002C7FF7A4AE102C37 -:102EF0004E4D40F34C83324610230C9E05E009F101 -:102F00000809103C102C40F3418301371032072F81 -:102F1000C9E90053CDE92D72F1DD2CAA31465046A6 -:102F200002F056FE00287FF444AEDDE92D720DF16B -:102F3000BC091023E5E70C992CAA504602F048FE84 -:102F400000287FF436AE2E9E0DF1BC09FFF738BB8A -:102F500015F0100360D115F0400200F073830E9855 -:102F600050F8042B0E90194692B201235AE41BF03C -:102F7000100368D11BF0400200F056830E9850F801 -:102F8000042B0E90194692B2AFE4524261EB41011C -:102F90005D462D20012346E40C992CAA504602F0F0 -:102FA00017FE00287FF405AEDDE92D760DF1BC0992 -:102FB0001BE60C992CAA504602F00AFE00287FF46A -:102FC000F8ADDDE92D760DF1BC091BE61BF0010F14 -:102FD0003FF409AB38E50E9398F80030FFF7D7B906 -:102FE00058ACE5E41BF4007F40F0BD8353F8042B9C -:102FF0000E93D1170B46FFF7C4BB1A9B002B3FF46F -:103000004BAA1A9B1B78002B3FF446AA98F8003075 -:103010004BF4806BFFF7BBB90E9B53F8042B0E9358 -:103020000123FFF7FFBB00BF548901006489010041 -:103030000E9B099853F8041B0E93C217C1E90002B6 -:103040004446FFF779B90E9B53F8042B0E934CE4DA -:10305000DDE9140102460B46FCF766FC002840F04F -:103060007586109B612B00F05B85412B00F0AC85D1 -:10307000089B0133109B23F02003079300F0638427 -:10308000472B04D1089B002B08BF01230893DDE9DF -:1030900014010A46002A4BF48073CDF83CB0C0F20C -:1030A000E1859B46002316461E9307460D93109B11 -:1030B000413B252B00F26783DFE813F052046503E0 -:1030C0006503650349044E046503650365036503F1 -:1030D00065036503650365036503650365036503B0 -:1030E00065036503650365036503650365036503A0 -:1030F0006503650365036503650365036503650390 -:103100006503650349044E0410935D46FFF7F4BB65 -:103110001093B74B18931BF0200100F0FC800E9B1E -:10312000073323F00703596853F8082B0E931BF05D -:10313000010F0AD052EA010307D0109B8DF88930A5 -:1031400030234BF0020B8DF888302BF4806502237E -:10315000FFF768BB1093FFF7BCBB1093A54B189308 -:10316000D9E70E9B012153F8042B07918DF8FC2021 -:103170000E930A913FACFFF7BBBA0C992CAA5046AC -:1031800002F026FD00287FF414AD2E9E0DF1BC093F -:1031900068E440215046FCF79BFF0C9B18601861C7 -:1031A000002800F060860C9A40235361FFF7B2B804 -:1031B000089B0D94062B214628BF0623089422461F -:1031C00007938D4C0E970A93129116911191FFF768 -:1031D00069BA102F2D9B894D40F345823246264611 -:1031E0000C9C05E009F10809103F102F40F33982CB -:1031F000013310321021072BCDE92D32C9F80050D0 -:10320000C9F80410EEDD2CAA2146504602F0E0FC7D -:1032100000287FF4CEACDDE92D320DF1BC09E3E7E7 -:10322000139B0A9DCDF83C804A46DDF85890CDF8B6 -:1032300028B0E31808931A9FDDF874B0DDF83080E9 -:10324000129B10943146B9F1000F2ED083BB013F81 -:1032500009F1FF391C9BC2E9003B2D9B0133594406 -:10326000072B2E912D935FDC0832089B38785B1B6F -:103270008342A8BF0346002B1E460BDD2D9801306C -:1032800019440728C2E900532E912D9000F356816E -:1032900038780832002EACBF841B0446002C0BDCAF -:1032A0000544129BB9F1000FD0D1002B00F0D4835C -:1032B000129B013B1293CDE7102C2D981DDD10269B -:1032C00004E0103C102C02F1080216DD01304B4BDB -:1032D00010310728C2E90036CDE92D01F1DD2CAA15 -:1032E0004146504602F074FC00287FF462AC103C6A -:1032F000102CDDE92D012FAAE8DC01303F4B546092 -:1033000021440728CDE92D01136000F3FB833878B1 -:1033100008320544C5E71BF0100300F0BC800E9B8B -:1033200053F8042B0E9302E72CAA4146504602F0B4 -:103330004FFC00287FF43DAC2E992FAA95E7CDF8DD -:1033400034902F4BDDF86890CDF81C8005F4806731 -:103350004FF0000C58AC4FF0CC3B0A9505E00A2A20 -:1033600071F1000134D342463146501840F100005B -:10337000A3FB005626F0030505EB9605401B151A26 -:1033800061F1000E0BFB05F603FB0E66A5FB038542 -:103390002E4408F0010E0525AEFB055E2D184FEA00 -:1033A0005808303504F8015C48EAC6780CF1010C85 -:1033B000013C7608002FD2D099F800008445CED188 -:1033C000BCF1FF0FCBD00A2A71F1000180F0988187 -:1033D0000A9DCDF8689058AB1B1BDDF81C80DDF80A -:1033E0003490CDF84CC0AB460A93FFF7E1BA00BF6A -:1033F00024890100388901004C8901006489010099 -:10340000CDCCCCCC0123C9F804302D9BBA4AC9F8E5 -:10341000002001330136072B2E962D9300F38C816B -:1034200009F10809002940F0BE80139A0BF001034E -:1034300013433FF4D8A8179B19999A19C9E90013A7 -:103440002D9B2E920133072B2D9300F36E8209F1F1 -:1034500008091399C9F8004001338E18072BCDE9EC -:103460002D36C9F804107FF7BCA8FFF7F1BB0C9903 -:103470001E932CAA504602F0ABFB00287FF499ABB8 -:103480009DF887202E9E1E9B0DF1BC09FFF76AB8A0 -:10349000C246FFF78EBB1BF0400200F0B8800E98CA -:1034A00050F8042B0E90194692B240E60C992CAAC3 -:1034B000504602F08DFB00287FF47BAB2E9E0DF171 -:1034C000BC09FFF7BCBA2AAE082200213046259479 -:1034D000FDF750FE089B5A1C00F0D4800025CDF863 -:1034E0001C80CDF834B0A8469B460CE03FA950465E -:1034F00001F0A0FA431C404400F0B883584508DCB2 -:1035000000F035848046259A525933460435002A06 -:10351000ECD1CDF82880DDF834B0DDF81C80BEE0B9 -:10352000164601332644072BC9F80050C9F8044059 -:10353000CDE92D367FF755A8FFF78ABB2CAA414667 -:10354000504602F045FB00287FF433AB38782E99C3 -:103550002FAA9FE60C992CAA504602F039FB0028AE -:103560007FF427AB2E9E0DF1BC09FFF723B8012B8A -:103570005D467FF409AAFFF7B9BB0E9B099953F882 -:10358000042B444611600E93FEF7D6BE1646013753 -:103590002644072FCDE92D76C9F80050C9F804401C -:1035A0007FF747AB91E4179B19989A19C9E9000373 -:1035B0002D9B2E920133072B2D9300F3B68109F139 -:1035C00008090029BFF645AF4F4210314B4D80F23C -:1035D000888349461026A1460C9C04E00831103F20 -:1035E000102F40F37C8301331032072BC1E90056C2 -:1035F000CDE92D32F2DD2CAA2146504602F0E8FA40 -:1036000000287FF4D6AADDE92D322FA9E7E70E9B2B -:103610001BF400711ABF114653F8042B53F8042B06 -:103620000E9318BFD2B282E50E9B1BF400711ABF35 -:10363000114653F8042B53F8042B0E9318BFD2B243 -:10364000FFF753B90E9B15F400711ABF114653F8DA -:10365000042B53F8042B0E9318BFD2B20123FFF7AB -:10366000E1B83446164601333E44072BCDE92D36EA -:10367000C9F80050C9F8047000F34A8109F108093B -:10368000FFF7B3BB00231946009625AA504601F068 -:10369000F7F9034601330A9000F0E88225940A9B6B -:1036A000002B3DD0632B00F3298100230D933FAC09 -:1036B000082200213046FDF75DFD0A9D00962B464D -:1036C00025AA2146504601F0DBF9854240F0C4832B -:1036D0000A990E970023635421EAE1719DF887202F -:1036E00008930791129316931193FEF7DBBF2D22D7 -:1036F0008DF88720FEF7C5BF0C86010064890100A4 -:103700001D9B1C99E41A1A462046FDF77FFE99F886 -:103710000120A54B0AB109F101094FF0000C22E686 -:103720000A9B9DF887200E97CDE9073312931693D5 -:1037300011930D93FEF7B6BF0C992CAA504602F0D8 -:1037400047FA00287FF435AA23992E9E0DF1BC0973 -:1037500068E6139A0A99A5186D1AD41AA542A8BF4B -:103760002546FFF777BB13F9042B0E93D1170B46B1 -:10377000FFF707B80E9B099953F8042B0E9311809D -:103780004446FEF7D9BD089B0A9302232AA9049157 -:1037900025A90A9D039123A900933A463346019532 -:1037A0000291504601F0A4FA079B472B044600F013 -:1037B000A381462B054405D10378302B00F0B88255 -:1037C000239B1D443846314600220023FCF77AF83B -:1037D000002800F066812B461B1B1393079B472B89 -:1037E00000F04A81079B462B00F00082239B119337 -:1037F000119B079A013B412A239300F023829DF8F5 -:1038000040200021002BB8BF119B8DF89820BABF33 -:10381000C3F101032D222B22092B8DF8992040F3AF -:103820004F820DF1AF05614E2A46104686FB0321FB -:10383000DA17C2EBA10202EB8201A3EB41013031A6 -:1038400000F8011C19466329134600F1FF32ECDC35 -:103850003033D9B2831E9D4202F8011C40F2E98246 -:1038600013460DF19A0201E013F8011B02F8011B47 -:103870009D42F9D10DF1B1030DF19A021B1A1344C7 -:1038800026AA9B1A1B93139B1B9A012B1A440A927C -:1038900040F349820A9B179A13440A930F9B0A9A92 -:1038A00023F4806343F4807B22EAE27200231293C4 -:1038B0000792169311931E9B002B40F0EB809DF80E -:1038C00087200893FEF7EEBE20460E97FEF7D8FA43 -:1038D000119B089320EAE071129316930D937323C2 -:1038E0009DF887200A9007911093FEF7DBBE0C9994 -:1038F0002CAA504602F06CF9FEF7F8BD591C504650 -:10390000FCF7E6FB0446002800F0B0810D90CFE6FE -:103910000C992CAA504602F05BF900287FF449A9C3 -:103920002E9E0DF1BC09FFF760BA0C992CAA5046E7 -:1039300002F04EF900287FF43CA9DDE92D322399ED -:103940000DF1BC093DE606230893FFF7A0BB089BD9 -:1039500001330A93022319E7089B0A93032315E70F -:103960003846314623AA01F099F800224FF07F53E0 -:10397000FBF740FD0022002306460F46FBF7A2FF9F -:1039800008B1012323930A4B0A93089BCDF84C906E -:10399000013BCDE9118B2546DDF828B0CDF858A0C4 -:1039A00098461F940DE000BFCDCCCCCC6766666610 -:1039B000388901000022002308F1FF38FBF782FF5D -:1039C000E8B9AE4B002230463946FBF713FD0F46EF -:1039D0000646FBF7BFFF0446FBF7A2FC0B46024678 -:1039E00039463046FBF74EFB1BF80430B8F1FF3F79 -:1039F000AA46C14605F8013B06460F46DAD1A04B60 -:103A0000002230463946DDE9118BCDF84490DDF8CF -:103A10004C90CDE912A4DDF858A01F9CFBF77AFF6B -:103A2000002840F03181964B304639460022FBF7A2 -:103A300049FF18B1139BDE0700F12681119B002B73 -:103A400007DB119B01332B44302205F8012BAB42DD -:103A5000FBD12B1B1393C1E6109C139BDDF828B000 -:103A6000DDF83C801A97E3189D4228BF1D46914619 -:103A70000E460A95FFF7C0B9239B1193DD1C02DBAC -:103A8000089A934219DD109B023B109323F0200308 -:103A90000793ADE62D2200238DF887200893FEF7CB -:103AA00004BE2A9BAB42BFF497AE30215A1C2A9227 -:103AB00019702A9B9D42F9D88EE6119B139A934266 -:103AC000C0F2C5800F9B13F0010F119B00F04D81D8 -:103AD000179A13440A930F9B590503D5119B002B8A -:103AE00000F356810A9B23EAE3730793672310933D -:103AF000002312931693DEE60F9BDB0700F19F80F5 -:103B00002A9B69E62CAA4146504602F061F800283B -:103B10007FF44FA838782E992FAA0544FFF7C1BB30 -:103B200078238DF8893030238DF888304BF00203EC -:103B30000F93089B632B00F3ED8000230D933FACA4 -:103B4000DDE914121346002B4BF4817B67DB1E4624 -:103B5000109B23F02003079300230F461E93109B16 -:103B6000612B7FF4A4AA3846314623AA00F096FFC1 -:103B700000224FF07F53FBF73DFC00220023064656 -:103B80000F46FBF79FFE08B1012323933D4B0A9399 -:103B9000FBE60C992CAA504602F01AF800287FF494 -:103BA00008A82E9E0DF1BC09FFF718B90C992CAA94 -:103BB000504602F00DF800287EF4FBAF239B2E9EAA -:103BC0000DF1BC09FFF72EB95823AAE70C992CAACE -:103BD000504601F0FDFF00287EF4EBAF239C139BC1 -:103BE0002E9E1C1B0DF1BC09FFF734B9239A0F9BC5 -:103BF0001192002A03F0010340F3088108990B4356 -:103C000040F0FD80119B0A93662310930F9B5A0589 -:103C100000F1C0800A9B23EAE373079368E7109BD7 -:103C200023F020030793DDE9142303F100462D233D -:103C300017461E9393E700220892FEF7AABB0A9D3F -:103C40002544BFE5109A0F32D2B20121DAE5139B69 -:103C5000179A9A18119B0A92002B40F38F806723C2 -:103C60001093D3E79B4600230D93DCE70C9AB2F93F -:103C70000C3043F040039381FEF73BBC0000304022 -:103C80000000E03F24890100129B0A9A2A93D17B0D -:103C900015F8013C8B422A4609D1302002F8010C6C -:103CA0002A9A531E2A9312F8013C9942F6D0392BD6 -:103CB0000BBF0A9B01339B7ADBB202F8013CC8E6DA -:103CC000002940F08C8030228DF89A200DF19B0263 -:103CD000303302F8013B26ABD31A1B93D3E54C4695 -:103CE000894601333A44072BCDE92D32C9F80050FB -:103CF000C9F804707FF7ABAB0C992CAA504601F0C1 -:103D000067FF00287EF455AFDDE92D320DF1BC09C7 -:103D1000FFF79FBB591C5046FCF7DAF90446002810 -:103D2000A4D00D900CE70F9BD8077FF5B7ADB1E598 -:103D30003846314600220023FBF7C4FD00287FF4FB -:103D40003FAD0A9BC3F1010323933AE5159B4A4C0F -:103D5000002BB4BF2D229DF88720484BB8BF8DF8AB -:103D600087202BF0800BFEF790BC0A93B3E6089BEC -:103D7000DDF81C80DDF834B00A9390E4C3F1010350 -:103D80001A4422EAE273079367230A921093AFE67C -:103D9000672310931A990B78FF2B59D00025119A9D -:103DA000284603E001300131FF2B08D0934206DAA8 -:103DB000D21A4B78002BF5D10B780135F4E711922C -:103DC0001A9116901295129A169B1D9913440A9AED -:103DD00001FB03230A9323EAE37307936BE50DF1D9 -:103DE0009A0275E7089B07930A9373239DF887202F -:103DF0000E970890129016901093FEF753BC179BE5 -:103E0000D518294466230A911093FFE6089A1343B4 -:103E100005D101236622079310920A9368E6179B47 -:103E20005D1C2A4422EAE273079366230A921093E8 -:103E30005EE602231B9326E50E9A98F80130884629 -:103E400052F8041B0E9241EAE1710891FEF79FBA05 -:103E5000002312931693B6E70C9A938943F040031C -:103E60009381FEF7A6BE0C23CAF800304FF0FF3353 -:103E70000993FEF745BB00BF1C89010020890100A2 -:103E8000436C70B505460C464BB153F8240080B125 -:103E9000026843F824200023C0E9033370BD2122C7 -:103EA000042100F053FE034668640028EDD1002091 -:103EB00070BD012101FA04F6721D9200284600F03F -:103EC00045FE0028F3D0C0E90146E4E731B1436C78 -:103ED0004A6853F82200086043F82210704700BF78 -:103EE0002DE9F0410D6907460E461C4601F1140EFE -:103EF0000020DEF800108BB202FB03434FEA134CA4 -:103F0000090C02FB01CC01309BB203EB0C43854250 -:103F10004EF8043B4FEA1C44EBDC3CB1B368AB42C7 -:103F200007DD06EB850301355C6135613046BDE890 -:103F3000F081716838460131FFF7A2FF8046A8B1D1 -:103F40003269023206F10C0192000C30F7F774FF6F -:103F50007B6C726853F82210316043F82260464649 -:103F600006EB850301355C613561DFE7024B0348F1 -:103F70004246BA2100F0CAFD748901008889010017 -:103F8000020C12040346CAB90304102013F07F4F39 -:103F900004BF1B02083013F0704F04BF1B01043034 -:103FA00013F0404F04BF9B000230002B05DB13F0E1 -:103FB000804F00F1010008BF202070470020E5E796 -:103FC000036813F00702014607D0DA071FD49807E9 -:103FD00021D55B080B600120704798B2A0B1104654 -:103FE000DAB20AB908301B0A1A0704BF1B090430E9 -:103FF0009A0704BF9B080230DA0703D45B0800F17C -:10400000010006D00B6070471B0C1020E8E7002071 -:104010007047202070479B080B600220704700BF4C -:1040200038B5436C04460D464BB15868B0B10268D0 -:104030005A6000220123C0E90435C26038BD212244 -:10404000042100F083FD034660640028EDD1094B94 -:104050000948002240F2451100F058FD1C220121C0 -:10406000204600F073FD0028F1D001220223C0E9B0 -:104070000123DEE774890100888901002DE9F04FF2 -:104080000E691569AE4285B08846144605DB2A469E -:10409000234635460C4616469846A3686168AF1914 -:1040A000BB42B8BF0131FFF7EBFE0190002800F0E2 -:1040B0008780019B03F1140909EB870AD14505D2DA -:1040C0004B46002243F8042B9A45FBD808F114080C -:1040D00008EB860B04F11403D8451A4603EB85055B -:1040E0005FD22B1B153B23F0030304331534A54289 -:1040F00038BF0423CDE902A7AC461F46924605E02F -:10410000090C29D1C34509F1040948D958F8041B01 -:104110008DB2002DF4D056464C46002356F8041BB1 -:1041200022681FFA81FE90B2090C05FB0E00120CEA -:10413000034405FB012202EB13429BB243EA024314 -:10414000B44544F8043B4FEA1243E7D849F8073036 -:1041500058F8041C090CD5D0D9F8003050461A463E -:104160004C4600260588120C01FB052216449BB222 -:1041700043EA064344F8043B50F8045B22682D0CE4 -:1041800093B201FB053303EB164384454FEA134614 -:10419000E8D8C34549F8073009F10409B6D8DDE984 -:1041A00002A7002F02DC05E0013F03D05AF8043DCE -:1041B000002BF9D0019B18461F6105B0BDE8F08FB8 -:1041C000034B0448019A4FF4B17100F09FFC00BF0B -:1041D000748901008889010012F003032DE9F04180 -:1041E0001446064632D10D46A41020D0D6F84080A1 -:1041F000B8F1000F33D0E3074FF0000707D4641085 -:1042000015D0D8F80000A8B18046E307F7D542469C -:1042100029463046FFF732FFB5B16968736C641008 -:1042200053F821202A6043F821500546E9D1284659 -:10423000BDE8F081424641463046FFF71FFFC8F80F -:10424000000007608046E0E70546D8E7013B0F4ADB -:1042500052F823200023FFF743FE0546C4E701215F -:104260003046FFF70DFE804640B1012340F2712237 -:10427000C0E90432002330640360BCE7044B054806 -:10428000424640F2451100F041FC00BFE08A0100C7 -:1042900074890100888901002DE9F0470C46904699 -:1042A0002669A368496806EB6216751C9D4207469D -:1042B0004FEA621904DD5B009D4201F10101FADC65 -:1042C0003846FFF7DDFD8446002851D0B9F1000FD4 -:1042D00000F114000EDD09F105024FEA820E0346DB -:1042E0000CEB8202002143F8041B9342FBD1AEF198 -:1042F00014031844216904F1140318F01F0803EB98 -:1043000081012DD0C8F1200986464FF0000A1A68B5 -:1043100002FA08F242EA0A024EF8042B53F8042B80 -:10432000994222FA09FAF2D80B1B153B23F003033A -:10433000043304F11502914238BF0423BAF1000F8F -:1043400018BF2E4640F803A07B6C6268CCF8106062 -:1043500053F822102160604643F82240BDE8F08700 -:10436000043853F8042B40F8042F9942F9D8EBE7AE -:10437000034B044862464FF4EF7100F0C7FB00BFE7 -:1043800074890100888901000B6984460069C01A9C -:1043900015D10CF1140C14310CEB830210B401EBA9 -:1043A000830301E0944508D252F8044D53F8041DEC -:1043B0008C42F7D004D24FF0FF3010BC70477047EA -:1043C000012010BC704700BF2DE9F84F0F69136939 -:1043D000FF1A002F0E4690467FD101F114051432CA -:1043E00002EB830205EB830301E09D4278D253F890 -:1043F000041D52F8044DA142F7D069D37168FFF74C -:104400003FFD8146002877D03569D8F81020C76075 -:1044100008F1140E06F1140009F1140A06F1100156 -:104420000EEB820200EB850756464FF0000C5EF85B -:10443000044B51F804BFA3B21CFA8BFCACEB030392 -:104440004FEA144CCCEB1B4C0CEB234C9BB243EAD5 -:104450000C43724546F8043B4FEA2C4CE7D8A2EBDC -:104460000801153908F11508424521F0030404F14B -:10447000040438BF0424204421F0030238BF002282 -:1044800087425244544418D92646014651F8043B09 -:104490001CFA83FC4FEA2C4202EB13421FFA8CFCFD -:1044A0004CEA02438F4246F8043B4FEA224CEDD8D7 -:1044B000013F3F1A27F00307E21923B952F8043DE0 -:1044C000013D002BFAD0C9F810504846BDE8F88FDE -:1044D000334601274646984690E7F9DB00278DE7EB -:1044E0000021FFF7CDFC814668B101220023C9E914 -:1044F00004234846BDE8F88F064B07484A4640F279 -:10450000452100F003FB034B03484A4640F23721A4 -:1045100000F0FCFA748901008889010070B501215E -:1045200082B016461D46FFF7ABFC044600284AD071 -:104530002B46C5F30A55C3F313030DB143F480139F -:10454000002E019314D101A8FFF73AFD019B63618E -:1045500001212030216115B3069BA5F233450544A6 -:104560001D60079BC0F135001860204602B070BD89 -:1045700068460096FFF724FD08B3019B0099C0F13F -:10458000200203FA02F20A43C34001936261002B46 -:1045900014BF02210121A3612161002DDCD104EBB4 -:1045A0008102A0F232431069069A1360FFF7E8FC1B -:1045B000079BC0EB41101860204602B070BDDDE9DA -:1045C00000236261E3E7034B0348224640F20F31C8 -:1045D00000F09CFA748901008889010070B50029F7 -:1045E0004BD006460C4610B1436B002B48D0636E8F -:1045F000D80734D5B4F90C30002B3ED021463046D4 -:1046000000F050F8E36A054633B1E1693046984757 -:104610000028B8BF4FF0FF35A3891A063CD4216BA0 -:1046200041B104F14003994202D03046FDF73AFD12 -:1046300000232363616C21B13046FDF733FD002375 -:104640006364FCF7B9FC636E0022DB07A2811FD50F -:10465000A06DFDF7A7FBFCF7B5FC284670BDA3894C -:104660009905CBD4A06DFDF79FFBB4F90C30002B5E -:10467000C4D1656E15F0010505D00025284670BD32 -:10468000FCF77CFCB3E7A06DFDF790FB284670BDFE -:10469000A06DFDF78BFBDBE721693046FDF702FDDE -:1046A000BDE700BFB1F90C20F8B50C46110707466D -:1046B00042D4636842F40062002BA28159DDA56AEE -:1046C000002D54D000233E683B6093B212F4805218 -:1046D00053D1E16901233846A847421C63D0A3891E -:1046E000A56A5B0705D56368C01A236B0BB1E36B42 -:1046F000C01AE169024600233846A847411C3ED152 -:104700003B68002B3BD01D2B01D0162B52D1A38927 -:104710002269226023F4006300216160A381216B80 -:104720003E6021B304F14003994202D03846FDF7C0 -:10473000B9FC00202063F8BD2669C6B193B2256894 -:1047400026609A070CBF63690023AD1BA3600CE0D1 -:10475000D4F824C0E1692B4632463846E047B0F130 -:10476000000CA5EB0C05664416DD002DF0DC0020E6 -:10477000F8BDE36B002BA2DCF9E7206DB1E7B4F9DB -:104780000C302269226023F40063A3810022DB0441 -:104790006260C4D52065C2E7A38943F040034FF0AF -:1047A000FF30A381F8BD3B68002B98D01D2B06D0AD -:1047B000162B04D0A38943F04003A381F8BD3E60CB -:1047C000D5E700BF38B50C46054608B1436B03B3C7 -:1047D000B4F90C0088B1636EDB0701D481050FD5F5 -:1047E00028462146FFF75EFF636EDA07054602D4CE -:1047F000A3899B0508D5284638BD0546284638BDFF -:10480000A06DFDF7D1FAEBE7A06DFDF7CFFA2846D2 -:1048100038BDFCF7B3FBDBE710B50C46B1F90E1061 -:1048200000F08CF8002803DB236D0344236510BDE2 -:10483000A38923F48053A38110BD00BF2DE9F0416B -:104840000C46B1F90C101F46CB05054616460BD495 -:1048500021F48051A1813B46B4F90E10324628461E -:10486000BDE8F041FDF782B8B4F90E100223002232 -:1048700000F04EF8B4F90C10EAE700BF10B50C4692 -:10488000B1F90E1000F044F8A389421C0EBF23F4C6 -:10489000805343F480532065A38110BDB1F90E10FD -:1048A00000F024B849B1FF2A02D80A7001207047ED -:1048B0008A2303604FF0FF3070470846704700BFFF -:1048C00071B1034600EB010C01E0634506D01A46C6 -:1048D000013311780029F8D1101A7047181A70475F -:1048E00008467047004870470C8EFF1F38B5074DCB -:1048F0000022044608462A60F7F7B8FB431C00D0A4 -:1049000038BD2B68002BFBD0236038BD789DFF1F7E -:1049100038B50C46084D8446114620461A460023F9 -:104920002B606446F7F7AEFB431C00D038BD2B6804 -:10493000002BFBD0236038BD789DFF1F38B50C4697 -:10494000084D8446114620461A4600232B606446D3 -:10495000F7F78AFB431C00D038BD2B68002BFBD037 -:10496000236038BD789DFF1F2DE9F04788B01E46B3 -:10497000119D254B80461F68894614466DB3109BD8 -:10498000019407A904910321CDE9026300914B46EC -:104990004246384600F0ACF9079B31689842C1F1B5 -:1049A00000012B460AD2A1EB000C10F8012B03F8F2 -:1049B000012B079A82420CEB0001F6D88C4220DDD5 -:1049C000621A1A44302103F8011B9342FBD10023E1 -:1049D0001370284608B0BDE8F087BA6C04F12303D1 -:1049E0009A4201DDFD6CCAE704F1240AF96C5246D3 -:1049F0003846FBF735FE05460028EAD0C7E912A085 -:104A0000BDE71A46E3E700BFA88FFF1F38B5074D83 -:104A1000074C2C1BA41005D0013C55F8043D9847C9 -:104A2000002CF9D1BDE8384004F0DAB800000000ED -:104A30000000000070B5054684B05BB11C4669B14A -:104A40000E4B2846D3F8E0602346B047431C0FD0F6 -:104A500004B070BD00F582740029F1D1074A2346E5 -:104A6000D2F8E06028460A4601A9B047431CEFD1BE -:104A700000228A2322602B6004B070BD1C8DFF1FB2 -:104A800000B583B0DDF810C0CDE9003C4FF0FF3336 -:104A900002F03CFC03B05DF804FB00BFDFF860C02F -:104AA000F8B521F000430027634504460D4616463D -:104AB000176022DC844653EA0C0C1ED0DFF844C099 -:104AC00001EA0C0C0A46BCF1000F09D10E4B002282 -:104AD000FAF790FC6FF0350704460A4621F00043D0 -:104AE00022F0FF421B1522F4E002A3F2FE3342F053 -:104AF0007F553B4445F40015336020462946F8BDF8 -:104B0000FFFFEF7F0000F07F0000504300B50B4C2B -:104B100025681446EE681A4685B003460D464CB12A -:104B200007490095CDE901143046064901F03CF8EB -:104B3000F7F7AEFA04490C46F3E700BFA88FFF1F52 -:104B4000EC8A0100FC8A0100AC7E010038B5A1FBB3 -:104B500002148CBBFBF7BCFA0546E0B150F8042CFC -:104B600022F00302043A242A17D8132A1AD91B2A3E -:104B7000C0E900441DD9242A14BF00F1100200F13D -:104B800018024FF00003C0E9024404BF046144610D -:104B9000C2E900339360284638BD2146FCF7EAFAA3 -:104BA000284638BD02460023C2E9003393602846F8 -:104BB00038BD00F10802F6E7FCF7EEFE0C230025F5 -:104BC0000360E8E72DE9F04F03690C69A34283B065 -:104BD000C0F28880013C01F11405A30000F1140823 -:104BE000009355F8243058F8242001338A469A421D -:104BF00008EB8401814605EB84070191B2FBF3F6D3 -:104C00003AD34FF0000CAE464046624663465EF82B -:104C100004BB01681FFA8BFC06FB0C334FEA134CF4 -:104C20004FEA1B4B06FB0BCC9BB2D31A1FFA8CF23C -:104C300013FA81F3C2EB114202EB23429BB243EA27 -:104C40000243774540F8043B4FEA22424FEA1C43B7 -:104C5000DDD2009B58F8033073B9019B043B9845A3 -:104C600004D307E0984504F1FF3403D253F8042934 -:104C7000002AF7D0C9F8104051464846FFF784FB98 -:104C800000282BDB01364146002355F8040BD1F8F0 -:104C900000C082B29A1A030C12FA8CF2C3EB1C43C6 -:104CA00003EB224392B242EA0342AF4241F8042BA3 -:104CB0004FEA2343E9D258F8242008EB84036AB969 -:104CC000043B984504D307E0984504F1FF3403D230 -:104CD00053F80429002AF7D0C9F81040304603B031 -:104CE000BDE8F08F002003B0BDE8F08FFFFFFFFFAD -:104CF0002DE9F04F816B99B090469946CDE9048932 -:104D0000259D044641B1C26B4A60012393408B60EC -:104D1000FFF7DCF80023A363B9F1000AB4BF012355 -:104D200000232B60764BBCBF2AF0004ACDF814A0BC -:104D300033EA0A0300F0AB80DDE90423104619468C -:104D400000220023CDE90A01FAF7BCFD074678B13D -:104D5000249A01231360269B002B00F0AE83694B3D -:104D6000269A1360013B0393039819B0BDE8F08FB6 -:104D700016AB019317AB00932046DDE90A23FFF73A -:104D8000CDFB5FEA1A56054640F09780DDE91676BE -:104D90003E4406F23243202B40F3A683C3F1400386 -:104DA0000AFA03FA06F2124328FA03F04AEA00006C -:104DB000FAF7A6FA0123013EA1F1F8710F93524BC5 -:104DC0000022FAF75FF948A3D3E90023FAF712FBB0 -:104DD00047A3D3E90023FAF757F9804630468946BE -:104DE000FAF79EFA44A3D3E90023FAF703FB02463D -:104DF0000B4640464946FAF747F980468946FAF796 -:104E0000A9FD00228346002340464946FAF764FD87 -:104E1000002840F04583BBF1160F00F234833B4B72 -:104E200003EBCB03D3E90023DDE90A01FAF754FDD4 -:104E3000002871D00023BF1B0E937B1E0BF1FF3B9C -:104E4000069300F1278300230993BBF1000F6ADA70 -:104E5000099BCDF81CB0A3EB0B030993CBF1000326 -:104E60000D93229B092B4FF0000B65D8052B40F3C7 -:104E70003983043B22930026229B023B032B00F242 -:104E80006786DFE813F04E044B0442042504249A9D -:104E9000CAF3130A42F20F735AEA080A13601AD1CE -:104EA000269B002B00F06386194B03930833269A48 -:104EB0000398136019B0BDE8F08FDDE90A12C2F360 -:104EC0001303084643F07F510F97A6F2FF36169F53 -:104ED00041F4401173E7269B002B40F0DB830D4B20 -:104EE000039341E7AFF3008061436F63A787D23F2D -:104EF000B3C8608B288AC63FFB799F501344D33FC9 -:104F00000000F07F0D8601000000F83F188A0100C4 -:104F10002C8B0100388B0100BF1B7B1E069300F118 -:104F20007E840E900990069B5B44CDE9063B0023EE -:104F30000D93229B092B99D90023CDE92233012619 -:104F40004FF0FF330C960893089B12930021E16306 -:104F50002046FEF795FF0390002800F00186039B92 -:104F6000A363089B0E2B00F21381002E00F010812A -:104F70000799002940F35584AE4B01F00F0203EB73 -:104F8000C2034FEA2118C905D3E9006740F1118433 -:104F9000A94BDDE90A01D3E90823FAF755FBCDE96E -:104FA000100108F00F084FF0030AB8F1000F13D0FA -:104FB000DFF8849218F0010F09D030463946D9E95C -:104FC0000023FAF717FA0AF1010A06460F465FEACC -:104FD000680809F10809EDD1DDE9100132463B46C8 -:104FE000FAF732FB804689460E9B43B1934B002271 -:104FF00040464946FAF770FC002840F02A855046A2 -:10500000FAF78EF942464B46FAF7F4F98C4B002238 -:10501000FAF73AF8A1F15073CDE910011193089B0A -:10502000002B00F09980079B1493089B13930C9B13 -:10503000002B00F0A584139A7E4B8249039E03EB5C -:10504000C20353E902230020FAF7FEFADDE9102338 -:10505000FAF718F8CDE9100149464046FAF77AFC0C -:105060000746FAF75DF902460B4640464946FAF70D -:1050700009F830378046894602460B4606F8017B20 -:10508000DDE91001FAF746FC002840F02785CDF84D -:1050900054B00027DDE910AB1095139D13942AE05E -:1050A0000137AF4280F22A85674B504659460022AD -:1050B000FAF7A0F9644B002282468B4640464946E7 -:1050C000FAF798F989468046FAF744FC0446FAF75D -:1050D00027F902460B4640464946F9F7D3FF3034DC -:1050E00006F8014B52465B4680468946FAF7F4FBC8 -:1050F000002840F0F18442464B4650490020F9F721 -:10510000C1FF52465B46FAF7E7FB0028C8D0DDE94D -:105110001343109D039A079302E0B24200F0C68445 -:10512000B14616F8013D392BF7D00133DBB23370AD -:10513000079B0133079392E15046FAF7F1F8424694 -:105140004B46FAF757F93E4B0022F9F79DFFA1F1C4 -:105150005073CDE9100111933C4B40464946002263 -:10516000F9F790FFDDE9108942464B4606460F46A7 -:10517000FAF7D0FB8246002840F0A884424609F1A5 -:10518000004330463946FAF7A7FB002840F0458334 -:10519000179B002BC0F28C80079A0E2A00F38880A0 -:1051A000244B03EBC203D3E900AB239B002B1BDA98 -:1051B000089B002B18DC40F02E83244B5046002225 -:1051C0005946FAF717F902460B46DDE90A01FAF7E4 -:1051D0008DFBDDF820A05646002800F0B982239B05 -:1051E000DDF80C80DF43BBE2DDE90A7852465B461E -:1051F00038464146FAF728FAFAF7ACFB814609909F -:10520000FAF78EF852465B46FAF7F4F8039E0B461F -:10521000024641463846F9F735FF09F1300306F8F2 -:10522000013B089B012B00F05C8306940127049549 -:105230001C462AE0188A0100F08901000000F03FB6 -:1052400000001C400000E03F00002440000014402B -:1052500052465B4640464946FAF7F6F9FAF77AFBBA -:105260000546FAF75DF852465B46FAF7C3F8013790 -:105270000B46024649464046F9F704FF05F1300364 -:10528000A74206F8013B00F02983A54B0022FAF75C -:10529000B1F80022002380468946FAF713FB002864 -:1052A000D6D0049D069C079B01330793B146D6E0F8 -:1052B0000C9A002A00F00781229A012A40F3948276 -:1052C000089B03F1FF380D9B434580F25E820D9BE6 -:1052D000CDF83480A8EB03039B444FF00008089BF3 -:1052E000002BC0F22F83069A1A440692099A174699 -:1052F0001A44099201212046FEF792FE064667B144 -:10530000069900290B4608DD099AB942A8BF3B4619 -:10531000D21AFF1ACB1A099206930D9B63B10C9B0C -:10532000002B00F0B682B8F1000F00F331820D9B24 -:10533000B3EB080240F0168301212046FEF770FE11 -:10534000BBF1000F824600F3D480229B012B40F377 -:10535000A7814FF000090120BBF1000F40F0D5807C -:10536000069B184410F01F0000F09881C0F1200344 -:10537000042B00F3AD8040F02482099B002B05DD57 -:1053800029461A462046FEF787FF0546069B002B56 -:1053900005DD51461A462046FEF77EFF82460E9BEB -:1053A000002B40F05C81089B002B40F343810C9B59 -:1053B000002B40F0C680079B01330793DDF80C807B -:1053C000DDF82090012707E0294600230A22204625 -:1053D000FEF786FD0137054651462846FFF7F2FBEA -:1053E000B94500F1300308F8013BEDDC089A002ACA -:1053F000C8BF9346039AD8BF4FF0010B93440027D0 -:105400002946012220460493FEF746FF51460546F1 -:10541000FEF7BAFF002840F3DC811BF8013C039A39 -:105420000BF1FF3B04E05A4500F0EE811BF8013D13 -:10543000392B0BF10109F6D001338BF800305146BE -:105440002046FEF743FD56B12FB1B74203D039468F -:105450002046FEF73BFD31462046FEF737FD294644 -:105460002046FEF733FD002389F80030249B079A7D -:105470001A60269B002B3FF477AC0398C3F800908A -:1054800019B0BDE8F08F0123BF1B0E937B1E06935E -:105490007FF5D9ACC7F10103099300230693D4E447 -:1054A0005846F9F73DFF42464B46FAF70BFA0028FB -:1054B0007FF4B1AC0BF1FF3BADE41A4B03930398BF -:1054C00019B0BDE8F08FDDF83480099F0C9E16E717 -:1054D000C0F11C00099B03440993069B0344074445 -:1054E00006934AE70126C7E4C3F1200308FA03F054 -:1054F0005EE401465A462046FEF76EFE229B012BD3 -:10550000824640F3BA814FF00009DAF810300AEB16 -:1055100083031869FEF734FDC0F1200020E700BFC7 -:10552000000024400C860100314600230A22204658 -:10553000FEF7D6FC129B002B064640F3F382CDE922 -:105540000783002F00F31A81B9F1000F40F0E381C7 -:10555000B046049B039F089903F001027B1E194487 -:10556000229B0C92134309910A9351462846FFF758 -:1055700029FB314683462846FEF706FF4246514640 -:1055800081462046FEF720FFC26801460BF130033A -:10559000002A42D1069028460893FEF7F5FE0699A8 -:1055A00004902046FEF792FC049A089B1AB90A99C7 -:1055B000002900F0A982B9F1000FC0F2718122998F -:1055C00049EA01090C9951EA090900F06981002AA8 -:1055D00000F3BC81099A3B7007F101099742CB4661 -:1055E00000F0BA81294600230A222046FEF778FC03 -:1055F0004645054631464FF000034FF00A0220466B -:1056000012D0FEF76DFC4146064600230A222046D2 -:10561000FEF766FC4F468046A7E720460493FEF758 -:1056200055FC049B0122C6E7FEF75AFC4F4606468E -:1056300080469AE7229B022B79DC0C9B002B80D1C1 -:10564000079B5146013328460793FFF7BBFADDF865 -:105650000CB000F130030BF8013B0027D0E65146B7 -:105660002846FEF791FE0028BFF69DAE294600238E -:105670000A222046FEF734FC079B03F1FF380C9BFF -:105680000546002B7FF450AF129B002B40F3438262 -:10569000089393E6B64B0393033308E41C2019E701 -:1056A000DDE9041200297FF454AEC2F31303002B8A -:1056B0007FF44FAEAF4B1340002B00F00B82099BE1 -:1056C00001330993069B013306934FF0010942E62B -:1056D00001230C93239B079A134412930133012B4C -:1056E0001F460893B8BF01270021172FE1637FF7FA -:1056F0002FAC012204235B0003F11400B8421146D1 -:1057000002F10102F7D9E16322E401230C93239B08 -:10571000002B59DD129308931F46E5E700230C93F5 -:10572000D8E700230C93F2E7129BCDE90783089B8F -:10573000002B7FF454AD514605222046FEF7D0FBE6 -:10574000014682462846FEF71FFE00287FF747AD38 -:10575000039B079F3122984603F8012B01370393DF -:1057600051462046FEF7B2FB7B1CDDF80C900793F8 -:10577000CDF80C80002E7FF46EAE70E631463A46CE -:105780002046FEF789FD0646DEE6A3EB0808A6E5FF -:10579000314642462046FEF71FFD2A460146064690 -:1057A0002046FEF76BFC294605462046FEF78EFB99 -:1057B000BDE5DDE90A234FF0020ACDE91023FFF72A -:1057C000F4BBC0F13C0085E6012323930893FFF767 -:1057D000BBBB03D1049BDB073FF51FAED9461BF8CB -:1057E000013D302BFAD02AE60F9A002A00F02D81D5 -:1057F00003F23343069ADDF834801A440692099A7C -:1058000017461A44099275E5079B039A01330793DB -:105810003123137013E64FF0000A5646DFE40E9072 -:1058200038E600F03D81079A534B564206F00F02CE -:1058300003EBC203D3E90023DDE90A01F9F7DAFD3E -:1058400036118046894600F078814C4F00234FF096 -:10585000020AF20706D5D7E90023F9F7CBFD0AF1D2 -:10586000010A0123761007F10807F2D1002B3FF45B -:10587000BBAB80468946FFF7B7BB049B002B7FF488 -:1058800042AEDDE90412C2F31303002B3FF412AF62 -:1058900039E629460D9A2046FEF79EFC05464BE563 -:1058A000002A12DD2946012220460493FEF7F4FC6B -:1058B00051460546FEF768FD0028049B40F3188119 -:1058C000392B00F0F9800BF13103B94609F8013B9F -:1058D000079B0133374607934646B0E50995069C7A -:1058E000049D02460B46F9F7CFFB52465B468046C5 -:1058F0008946FAF70FF860B952465B46404649467A -:10590000F9F7E0FF00283FF4CEAC099BD9077FF5FB -:10591000CAAC039A04E471682046FEF7B1FA074660 -:10592000002800F00E81336902339A0006F10C0161 -:105930000C30F6F781FA394601222046FEF7ACFC1E -:10594000804606E6DDE908239F1AD3E4392B00F0F0 -:10595000B380B9460133B9E7079A01323746079257 -:1059600046464DE529462046FEF736FC0546E3E46B -:10597000388B01000000F07F188A0100F0890100D7 -:10598000DDF84CA0814901EBCA01DDE9102351E9A2 -:105990000201F9F72FFDCDE9100149464046F9F71C -:1059A000D9FF0646F9F7BCFC0B460246494640467D -:1059B000F9F768FB039F53463036012B07F8016B5C -:1059C0008046894600F0B780139E039B1E44704BAF -:1059D000002240464946F9F70DFD89468046F9F711 -:1059E000B9FF8246F9F79CFC0AF1300A02460B46E1 -:1059F00040464946F9F746FB07F801ABBE428046F0 -:105A00008946E4D1634B0022DDE91001F9F73CFB44 -:105A100042464B46F9F760FF002864D1DDE91023C8 -:105A20005C490020F9F72EFB42464B46F9F772FF1E -:105A300000283FF4ADABB146013E19F8013C302BD4 -:105A4000F9D0149B0133079309E5169BC3F1360384 -:105A5000D0E6089B002B3FF46FAB129B002B7FF727 -:105A600097AB079A013ACDE913324046484B0022E2 -:105A70004946F9F7BFFC804689460AF10100F9F76B -:105A80004FFC42464B46F9F7B5FC434B0022F9F771 -:105A9000FBFAA1F15073CDE910011193FFF7C7BADA -:105AA000DDE90A894FF0020AFFF79EBA079B01332E -:105AB00007933123FFF73BBB079BBB46013307939B -:105AC000392337460BF8013B4646A8E44FF0000A5D -:105AD00056463DE699463EE4109D139C149B0133C7 -:105AE0000793B146BBE4149B039A0793FFF718BBD7 -:105AF0007FF4EBAEDA077FF5E8AEE1E6DDF854B00F -:105B0000109D139CFFF744BB392BD5D0B9F1000F82 -:105B10003FF7D9AED9E6229B022B3FF705AECDF871 -:105B20001C808DE5229B022B3FF7FEAD129BCDF82A -:105B30001C80089305E53E4664E74FF0020AFFF734 -:105B400053BA164B16483A4640F2EF21FEF7DEFFF5 -:105B50000026E66331462046FEF792F9039050B9DD -:105B60000E4B0F48002240F2AF11FEF7CFFF0D4B56 -:105B70000393FFF7F9B8039BA3634FF0FF3312932E -:105B80000893012323960C93FFF702BB188A0100A8 -:105B9000000024400000E03F00001C407489010028 -:105BA0003C8B01002C8B01000EB410B583B005AB0B -:105BB000064C53F8042B01930146206800F0C4F80A -:105BC00003B0BDE8104003B0704700BFA88FFF1FAF -:105BD0002DE9F04F9368176883B09246002B70D080 -:105BE00081468A6808680C46083743E0A38913F4A5 -:105BF000906F2ED0D4E90416A0EB010806EB460600 -:105C000006EBD67608F1010076102844B042324601 -:105C100084BF064632465B0537D511464846FAF73B -:105C200057FA019000283AD042462169F6F704F964 -:105C3000A289019B22F4906242F08002A281A6EB2D -:105C4000080203EB08006661A260236120602E4613 -:105C5000A84642465946FBF711FADAF80830A2681E -:105C60002068921B40445B1BA2602060CAF8083089 -:105C70003BB3083757E902B5002DFAD0AA421646C1 -:105C80009046B3D92E46A846E3E74846FAF7E8FC23 -:105C900003460028D3D121694846FCF703FAA389BB -:105CA0000C2243F04003C9F800204FF0FF30A381DD -:105CB00000220023CAF80820CAF8043003B0BDE867 -:105CC000F08F00200023CAF8043003B0BDE8F08F45 -:105CD0002DE9F84F4B6E9C0490462DD593681268C1 -:105CE00043B38B46064602F1080959E9025A5FEAB6 -:105CF0009A0715D0043D002401E0A7420ED055F8C4 -:105D0000041F5A46304601F051FA431C04F10104C5 -:105D1000F3D10023C8E90133BDE8F88FD8F8083083 -:105D20002AF0030AA3EB0A03C8F8083009F10809AE -:105D3000002BDAD10020ECE701F008F80023C8E9D5 -:105D40000133BDE8F88F00BF2DE9F04FC5B00DF16C -:105D5000500A8346039116460021082250461C46ED -:105D60000793FBF707FABBF1000F04D0DBF83430E0 -:105D7000002B00F0A186039A536EDB0740F11C85CF -:105D8000B2F90C108AB2950409D4039B41F4005176 -:105D900099818AB219465B6E23F400534B66100753 -:105DA00040F10481039B1B69002B00F0FF8002F08F -:105DB0001A030A2B00F008810023CDE91933CDE93D -:105DC0000D331BAA0B93189291460C930593B04682 -:105DD0004446A64BD3F8E450FBF79AFD224603460F -:105DE00012A9CDF800A05846A847002800F040812D -:105DF000C0F23381129A252A034601D01C44E8E7F9 -:105E0000B4EB0806054640F03781002361788DF831 -:105E1000433004F1010806934FF0FF371E462B2450 -:105E200008F10108A1F120035A2B00F26581DFE897 -:105E300013F09F02630163019A026301630163012E -:105E40006A006301630167027702630172028102E3 -:105E500063017C025B005B005B005B005B005B003E -:105E60005B005B005B00630163016301630163012D -:105E700063016301630163014602840063016301FE -:105E800063016301630163016301630163016301F2 -:105E9000E2006301630163011D026301C402630147 -:105EA000630194056301630163016301630163019D -:105EB00063016301630163014602860063016301BC -:105EC0006301B70286007F006301AA026301E70253 -:105ED000E400D7027F0063011D027C0072056301AC -:105EE0006301740563017C00A1F13003002218F8FE -:105EF000011B02EB820203EB4202A1F13003092BEA -:105F0000F5D906928EE75846FEF7ECFC43680D93F0 -:105F10001846FBF7B5FF0E9005465846FEF7E2FC23 -:105F200083680C93002D40F0DF8498F8001077E729 -:105F300098F8001046F0200672E746F01006B40606 -:105F400040F17881079B073323F007031A4659680D -:105F500052F8083B07920A460029C0F27A84791C5D -:105F600000F0A78526F08001029153EA020100F0BB -:105F700048840A2B72F1000180F0498530338DF896 -:105F80000F31029E012304930DF20F14049BBB42B8 -:105F9000B8BF3B460293002308939DF84330002B83 -:105FA00000F0B880029B01330293B3E0039D584692 -:105FB000294601F03FF8002840F05686AA8902F0F1 -:105FC0001A030A2B7FF4F8AE0399B1F90E30002BB7 -:105FD000FFF6F2AE4B6EDB0702D4970540F1188650 -:105FE000039923463246584600F070FE0590059806 -:105FF00045B0BDE8F08F46F0100616F0200200F024 -:106000002681079B073323F0070319465A6851F886 -:10601000083B079126F480610291002100208DF851 -:106020004300781C00F00082029820F0800653EABA -:10603000020040F0F881002F40F04385002940F035 -:10604000E483029B13F00103049300F020843023C7 -:106050008DF80F310DF20F1498E7082200215046F9 -:10606000FBF788F801231C44B3E600BF1C8DFF1F1B -:10607000B4EB080605461AD0199B1A9A013332442C -:10608000072BC9E900861A9219931ADD002A00F03D -:10609000B483039918AA5846FFF71AFED8B90DF130 -:1060A0006C09059B33440593002D7FF4AEAE1A9B1B -:1060B000002B40F0CA85039B0022B3F90C301992E3 -:1060C0000CE009F10809ECE7B346089B1BB10899FD -:1060D0005846FBF7E7FF039BB3F90C30039A526E67 -:1060E00012F0010F9AB200F09C80500600F1C885B2 -:1060F000059845B0BDE8F08F0029D8D000238DF871 -:10610000433001238DF8AC10029304932BAC002391 -:1061100008931F4616F00203099302D0029B023334 -:10612000029316F084030A9305D1069B029A9D1AE6 -:10613000002D00F39482DDE91903411C9DF84320F2 -:1061400082B101220133C9F8042007290DF143026D -:10615000CDE91913C9F8002000F36482084609F15B -:1061600008090131099ADAB111AA0233C9F80020ED -:1061700007294FF00202CDE91913C9F8042040F3B2 -:106180006982002B00F05883039918AA5846FFF73C -:106190009FFD002899D1DDE919030DF16C09411C1F -:1061A0000A9A802A00F08281049ABD1A002D00F319 -:1061B000E081049AC9F8004013440729CDE9191376 -:1061C000C9F8042040F36C81002B00F09E820399F3 -:1061D00018AA5846FFF77CFD00287FF476AF1A9B7B -:1061E0000DF16C09750705D5069A0299541A002C11 -:1061F00000F39582DDE9052102988142ACBF521877 -:1062000012180592002B40F0FE8108990023199383 -:10621000002900F048815846FBF744FF0DF16C0956 -:10622000D6E59C053FF561AF039CA06DFBF7BEFD75 -:10623000A2895AE7F006079A00F13E83710640F101 -:10624000388332F9043B0792DA17114684E616F0D8 -:106250001003079940F0288316F0400000F02083D7 -:106260001A4651F8043B07919BB2D3E6079B1A46A6 -:1062700000238DF84330134653F8044B0293002C4F -:1062800000F02D84532900F08A8316F0100540F0A9 -:1062900086837B1C00F0CC843A4629462046FBF7D7 -:1062A00087FD0890002800F0B884031B029A04932D -:1062B00023EAE3732F460792029308956DE643297C -:1062C00002D0F50640F15283079D0822002116A84E -:1062D0002BACFAF74FFF16AB55F8042B2146584666 -:1062E000FEF7A8FB03460133049000F0CE84049B24 -:1062F000079523EAE373029300238DF8433006E702 -:10630000079B53F8042B0692002A80F2BB82069A60 -:106310005242CDE9062398F8001046F004067FE5C6 -:1063200098F800108DF843407AE598F8001046F090 -:10633000800675E5424612F8011B2A2900F0B08458 -:10634000A1F13003092B90464FF000073FF66AADEC -:1063500018F8011B07EB870703EB4707A1F1300390 -:10636000092BF5D95EE598F8001046F0010657E5CF -:106370009DF84330002B7FF4D8AD202398F800100F -:106380008DF843304CE598F800106C2903BF98F85D -:10639000011046F0200608F1010846F010063FE51E -:1063A00098F80010682903BF98F8011046F40076A9 -:1063B00008F1010846F0400632E546F0100302936A -:1063C000029B13F0200200F02582079B073323F085 -:1063D000070319465A6851F8083B079101211DE649 -:1063E000079A46F00203029352F8043B079247F6DD -:1063F0003002ADF84420A14A0B92022100220DE6A2 -:10640000B70600F16782F50600F16183740600F1BA -:10641000EE83B00540F15B83079B059953F8042B8D -:1064200007931170D4E4029601293FF4A2AD02292A -:1064300044AC11D10B9803F00F011B09415C04F827 -:10644000011D43EA0273120953EA0201F3D1029ECD -:1064500044AB1B1B049399E503F00701DB0843EAF7 -:106460004273D208303153EA0205204604F8011D78 -:10647000F2D1029EF307EBD53029E8D03023023861 -:1064800004F8013C44AB1B1A029E049304467DE5CC -:10649000049B1B9401221C931A9319920DF16C0911 -:1064A00009F108099EE60DF16C0991E4069A029D36 -:1064B000551B002D7FF778AE102D40F3D38319467E -:1064C00043460994B846039C37465E469B4607E020 -:1064D00000F1020C09F108091046103D102D1FDDD6 -:1064E000674BC9F80030421C10311023072ACDE950 -:1064F0001921C9F80430EBDD18AA002900F08C80BE -:10650000214630460DF16C09FFF7E2FB00287FF4CD -:10651000DBADDDE91901103D102D00F1010CDFDCD0 -:106520005A46099CB3460B463E4647469046544A57 -:10653000C9F804502B44BCF1070FCDE919C3C9F8C1 -:10654000002040F3A781002B00F02C83039918AAA8 -:106550005846FFF7BDFB00287FF4B7AD049ADDE98C -:106560001903BD1A002D00F101010DF16C097FF72F -:1065700020AE102D32DD194643460994B046039CE7 -:106580005E4610279B4607E000F1020C09F108095E -:106590001046103D102D1ADD421C394B1031072AD0 -:1065A000C9E90037CDE91921EEDD18AA29B3214642 -:1065B00030460DF16C09FFF78BFB00287FF484ADAA -:1065C000DDE91901103D102D00F1010CE4DC5A4603 -:1065D000099C0B46B346614646469046284AC9F890 -:1065E00004502B440729CDE91913C9F8002000F302 -:1065F000F38009F108090131DBE54FF0010C084691 -:106600000DF16C09C5E7039918AA5846FFF760FB1E -:1066100000283FF4FAAD58E54FF0010C08460DF1A3 -:106620006C095AE7002B00F00C81039918AA584610 -:10663000FFF74EFB00287FF448ADDDE919030DF1AB -:106640006C09411C8EE5022311AA1C931B920121A7 -:106650000DF16C09084609F10809411CA0E5102D4F -:1066600040F3E282DDE91913184643460F94B84619 -:10667000039C37465E469B460CE000BF2489010020 -:10668000B08B010001F1020C09F108091146103D1F -:10669000102D1DDDB24BC9F800304A1C10301023FC -:1066A000072ACDE91920C9F80430EBDD18AA30B368 -:1066B000214630460DF16C09FFF70AFB00287FF4F4 -:1066C00003ADDDE91910103D102D01F1010CE1DCE5 -:1066D0005A460F9C0346B34660463E4647469046A0 -:1066E0009F4AC9F804502B440728CDE91903C9F87B -:1066F000002000F3B68009F10809411C1EE501469F -:106700004FF0010C0DF16C09C1E7760719934AD5DA -:10671000069A0299541A002C45DD0DF16C09102CD3 -:1067200040F39D821999039E102506E0881C09F10B -:1067300008091146103C102C1ADD4A1C88481033F9 -:10674000072AC9E90005CDE91923EFDD18AA2BB303 -:1067500031465846FFF7BCFA00287FF4B6ACDDE9B5 -:106760001913103C102C01F101000DF16C09E4DC4F -:106770007B4AC9F8044023440728CDE91903C9F826 -:1067800000207FF737AD73B1039918AA5846FFF779 -:106790009FFA00287FF499AC1A9B2BE5012019463B -:1067A0000DF16C09C6E7DDE9053202998A42ACBFFA -:1067B0009B185B18059328E5039BB3F90C108F0514 -:1067C0008AB23FF5E0AA1D46986DFBF7EDFAB5F9E0 -:1067D0000C108AB2FFF7D7BA002B3FF459AE0399D9 -:1067E00018AA5846FFF774FA00287FF46EAC19997E -:1067F0001A9B01310DF16C09DBE419920DF16C0962 -:106800004FE4002F7FF4BAAB029E0027049744ACFC -:10681000FFF7BCBB029B13F0100354D1029A12F095 -:10682000400000F0678107991A4651F8043B079130 -:106830009BB20121FFF7F2BB012118460DF16C0953 -:10684000AEE4099A002A5ED1184601210DF16C09C7 -:10685000A6E45B4262EB420202962D200121FFF783 -:10686000DEBB002B00F08D80039918AA5846FFF775 -:106870002FFA00287FF429ACDDE919030DF16C092A -:10688000411C5BE498F800100793FFF7C9BA44ACC9 -:10689000FFF77CBB09F108090CF10101604683E4B4 -:1068A00016F4007240F0918151F8043B0791FFF714 -:1068B000B1BBB30500F1828152F8043B0792DA17AD -:1068C0001146FFF749BB079951F8043B0791012195 -:1068D000FFF7A4BB079B059853F8041B0793C21747 -:1068E000C1E90002FFF774BA0C9B002B3FF41DAB0B -:1068F0000C9B1B78002B3FF418AB98F8001046F463 -:106900008066FFF78DBA022311AA1C931B92012007 -:106910000DF16C099FE6029652E5124B0B9316F0AF -:1069200020025FD0079B073323F0070318465A68FD -:1069300050F8083B0790F40709D553EA020006D047 -:106940008DF84510302146F002068DF8441026F4EB -:10695000806102910221FFF761BB034B0B93DEE7DD -:10696000A08B01002489010038890100079B0121C7 -:1069700053F8042B02918DF8AC20079304912BACB3 -:10698000BAE49DF84320002A40F02681099A002AA3 -:106990007FF459AE184601210DF16C0904E4002181 -:1069A000082216A81394FAF7E5FB791C00F0B280D0 -:1069B000002507942C460CE02BA95846FEF73AF820 -:1069C000421C204400F06181B84208DC00F065817F -:1069D0000446139A525916AB0435002AECD104949C -:1069E000079CA5E016F0100307980CD116F04004A0 -:1069F00005D01A4650F8043B07909BB29BE716F46B -:106A0000007240F0D58050F8043B079093E702995C -:106A1000CDF8208001F48066DDF8308004974FF0D7 -:106A2000000C44AC05E00A2B72F1000236D33B4661 -:106A30002A46DFF890E2991841F10001AEFB01050A -:106A400025F0030000EB9500091A581A4FF0CC35D9 -:106A500062F1000705FB00F50EFB0755A0FB0E7069 -:106A6000054407F0010E0520AEFB000E40187F081C -:106A7000303004F8010C47EAC5770CF1010C013CF9 -:106A80006D08002ECFD098F800106145CBD1BCF135 -:106A9000FF0FC8D00A2B72F100026CD244AB1B1B53 -:106AA000049FCDF83080029EDDF820800493FFF72C -:106AB0006DBA0296FFF75DBA5846FAF75FFAFFF72C -:106AC0005AB9012902967FF4B2ACFFF757BA079B77 -:106AD000059953F8042B11600793FFF779B9062F36 -:106AE0003B46029A784C079228BF062304930293F0 -:106AF000FFF70DBB029B079913F4007214BF51F806 -:106B0000043B51F8043B07911CBF0246DBB2012154 -:106B1000FFF784BA16AB00930023194613AA584610 -:106B2000FDF7AEFF03460133049000F0AE801394EE -:106B3000049B7BB3632B62DC002308932BAC0822FD -:106B4000002116A8FAF716FB049D16AB009313AAB2 -:106B50002B4621465846FDF793FF854240F0AB8017 -:106B6000029B049A07930023A3541F4622EAE27370 -:106B70000293FFF712BA0E9B0D99E41A1A462046AB -:106B8000FAF744FC98F801300BB108F101084FF016 -:106B9000000C4CE7029B0793049B02931F4608934B -:106BA000FFF7FBB9012118460DF16C09FFF7FCBA9C -:106BB00050F8043B07902246DBB2BCE612F9043BD6 -:106BC0000792DA171146FFF7C7B951F8043B07914E -:106BD0000246DBB2FFF71EBA01231C9301210DF11F -:106BE00043031B930DF16C090B46FFF7B7BA079BE4 -:106BF000059953F8042B07931180FFF7E9B8591C46 -:106C00005846F9F765FA044600283ED0089096E702 -:106C1000886DFBF7CBF8FFF7E3B9029B0497029767 -:106C20000793089FFFF7B9B919981A9B013057E5E8 -:106C3000029B07932046FBF723F920EAE0732F46D7 -:106C4000049002930895FFF7A8B9039918AA58462B -:106C5000FFF73EF800283FF42EAAFFF73CBA199838 -:106C6000013085E58C4662E4039B5B6ED90707D44F -:106C7000039B9B899A0503D4039B986DFBF796F8B9 -:106C80004FF0FF330593FFF733BA039AB2F90C3094 -:106C900043F040039381FFF721BA079C049747E72D -:106CA000079B98F8011053F8047B0793904647EA36 -:106CB000E777FFF7B5B8039A938943F040039381D0 -:106CC000FFF703BACDCCCCCC4C890100F0B51F4600 -:106CD0008B89ADF26C4D23F00203ADF80C304B6E96 -:106CE0001993CB89ADF80E30CB6907934B6A0993A2 -:106CF0001AAB009304934FF4806315460646029343 -:106D0000059316A800230C460693FBF749F82A467C -:106D10003B4669463046FFF717F8051E07DB694614 -:106D20003046FDF74FFD002818BF4FF0FF35BDF886 -:106D30000C305B0603D5A38943F04003A38116986A -:106D4000FBF730F828460DF26C4DF0BD9368002B30 -:106D500000F081802DE9F04FB1F90C300C46190795 -:106D6000804683B0174698B223D523690BB310F041 -:106D700002033D682BD04FF0000ADFF8B4B256464C -:106D80005E453346524628BF5B464046002E4FD0F4 -:106D9000E169D4F824C0E047002852DDBB681B1A23 -:106DA0008244361ABB60002BEAD1002003B0BDE854 -:106DB000F08F2146404600F03DF9002840F0348134 -:106DC000B4F90C303D6898B210F00203D3D110F042 -:106DD000010942D14E463EB38205D4F808B040F1D5 -:106DE0008180B3455A4600F2B18010F4906F40F0B4 -:106DF000BE80206801924946FAF740F9A368019ADB -:106E0000A3EB0B012368A1601344B2462360002664 -:106E1000BB68A3EB0A03D144BB60002BC5D0B4F917 -:106E20000C0080B2002ED7D1D5E900960835D2E704 -:106E3000D5E900A60835A3E721464046FDF7C2FC88 -:106E400080B3B4F90C3043F040034FF0FF30A3811E -:106E500003B0BDE8F08F002070471E46BA46994641 -:106E600018461F4666B388B34A46D4E904C320686F -:106E7000A168B24228BF3246604504D901EB030B3A -:106E80005A4500F3A780934264DCE169D4F824C03A -:106E90003A464046E047B0F1000BD2DDB9EB0B09B2 -:106EA000CAD00120DAF80830A3EB0B035F44A6EB4D -:106EB0000B06CAF80830002B3FF477AF002ED2D172 -:106EC0006E682B460835002EFAD01F6832460A211C -:106ED0003846FAF76DFF002800F09D800130A0EBE6 -:106EE0000709C1E720682369984217D86269B2424E -:106EF00014D86FF00043B34228BF3346E16993FBD7 -:106F0000F2F3D4F824C002FB03F340464A46E047BC -:106F1000B0F1000A95DDA6EB0A0679E7B345DA463B -:106F200028BFB24652464946FAF7A8F8A368226835 -:106F3000A3EB0A035244A3602260002BEBD121464D -:106F40004046FDF73FFC0028E5D07AE72068B346CD -:106F500032464FE739460192FAF790F8019AA36852 -:106F60009B1AA360236813442360934696E7236823 -:106F70002169A3EB010B636903EB430A0AEBDA7A9D -:106F80000BF101034FEA6A0A33445345524684BF6A -:106F90009A46524643052CD511464046F9F798F8D3 -:106FA00000283BD05A4621690190F4F745FFA28999 -:106FB000019B22F4906242F08002A28103EB0B005D -:106FC0002361AAEB0B03C4F814A0A3602060B346AE -:106FD00032460FE739465A46FAF750F823685B44C1 -:106FE000236021464046FDF7EDFB00283FF456AFF5 -:106FF00027E74046F9F734FB03460028DED1216934 -:107000004046FBF74FF8B4F90C300C2223F0800314 -:10701000C8F8002017E7721C914626E70C22B4F945 -:107020000C30C8F800200EE74FF0FF30BEE600BF7E -:1070300000FCFF7F38B5314B1B6805460C4613B189 -:107040005A6B002A4ED0B4F90C3018079AB21CD5EE -:10705000216929B312F0010007D00020A060606907 -:107060004042A06139B1002038BD950758BF606922 -:10707000A0600029F7D1120658BF0846F4D543F0A6 -:107080004003A3814FF0FF3038BDD1062ED5520703 -:1070900014D4216943F00803A3819AB20029D9D1FD -:1070A00002F42070B0F5007FD4D02146284600F0CD -:1070B0003FF9B4F90C3021699AB2CBE7216B51B199 -:1070C00004F14002914204D02846FAF7EBFFB4F9EC -:1070D0000C300022226321690022C4E9001223F04F -:1070E0002403D7E71846F9F749FFACE7092243F034 -:1070F00040032A604FF0FF30A38138BDA88FFF1FE7 -:107100002DE9F04383B0074688461446FAF700FCA1 -:10711000012803D108F1FF33FE2B37D90DF1040903 -:10712000424604F15C0349463846FDF783FC421CA5 -:10713000064633D028B39DF804C0002509E0236833 -:107140005A1C226083F800C00135B54219D219F8E3 -:1071500001CFA368013B002BA360F0DAD4F818E05C -:10716000734561462246384602DBBCF10A0FE6D180 -:1071700000F04AF9431CE7D10646304603B0BDE8AB -:10718000F0834646304603B0BDE8F0835FFA88FCE2 -:107190008DF804C006460DF10409CEE7A3893046F8 -:1071A00043F04003A38103B0BDE8F08330B5536ED4 -:1071B00013F0010FB2F90C30144683B005469AB2B1 -:1071C00001D198051CD5900406D4626E43F4005397 -:1071D00042F40052A381626622462846FFF790FFE0 -:1071E000636EDA07054602D4A3899B0502D52846BB -:1071F00003B030BDA06DFAF7D9FD284603B030BD0D -:10720000A06D0191FAF7D0FDB4F90C3001999AB252 -:10721000D9E700BF2DE9F04F89B0DDE9138A129F4D -:107220000191814603921E46B8F1000F55D0019B93 -:10723000002B57D0039B1D68002F63D0741E2EB304 -:10724000019B0293043D00260AE0019B13BB2A68C0 -:10725000002A35D0BC4557D2013C631C664615D088 -:10726000D8F8003055F8042F0093DAF8E0C0D8F8C9 -:1072700004B0434605A94846E047421C37D000EB1E -:10728000060CBC45E1D9009BC8E9003B304609B07B -:10729000BDE8F08F00280CDD029B18445A1E05A99A -:1072A00000F1FF3E11F8013B02F8013F7245F9D1B0 -:1072B0000290039B1A6804321A602A68002AC9D116 -:1072C000019B0BB1039B1A600CF1FF360022304684 -:1072D000C8F8002009B0BDE8F08F019B00F5867862 -:1072E000002BA7D1039B4FF0FF371D68A6E706468A -:1072F0008A2100223046C9F80010C8F8002009B0E1 -:10730000BDE8F08F3E46C1E76646BFE710B584B0E2 -:10731000054C069800900798019004480068029474 -:10732000FFF778FF04B010BD1C8DFF1FA88FFF1F53 -:107330002DE9F0418B890C46990796B008D504F1E8 -:1073400043030122C4E90432236016B0BDE8F08192 -:10735000B4F90E100029064625DB6A4600F0ACF8A9 -:1073600000281FDB019D05F47045A5F50055B5FA11 -:1073700085F54FF480686D094FF40067414630464B -:10738000F8F7A6FEE0B1B4F90C30C4F8148043F06D -:10739000800320602061A38135BB3B43A38116B0ED -:1073A000BDE8F081A38913F0800519D04FF04008A3 -:1073B0000025414630462F46F8F78AFE0028E2D1E4 -:1073C000B4F90C309A05C0D423F0030304F143024E -:1073D00043F002030121C4E90421A3812260B4E740 -:1073E0004FF480682F46C9E7B4F90E10304600F01C -:1073F00079F810B9B4F90C30CFE7A38923F003036F -:1074000043F001031BB2C8E7F8B50D461446064623 -:1074100010B1436B002B4CD0B4F90C20A369A360CE -:10742000170790B21BD52369CBB1EDB281042F466B -:1074300022D522686169D31A994229DD0133A168F6 -:107440000139A160511C2160157062699A4227D0F0 -:10745000A389DB0701D50A2D22D03846F8BD214685 -:107460003046FFF7E7FD08BBB4F90C20236990B262 -:10747000EDB281042F46DCD442F40052A281626E48 -:10748000616922F4005262662268D31A9942D5DCFF -:1074900021463046FDF796F940B922680123CEE730 -:1074A00021463046FDF78EF90028D6D04FF0FF3741 -:1074B000D3E7F9F763FDAFE770B50C46084D034617 -:1074C0000026204611461C462E60F4F7D3FD431CCF -:1074D00000D070BD2B68002BFBD0236070BD00BFB7 -:1074E000789DFF1F38B5074D0022044608462A60E4 -:1074F000F4F7C6FD431C00D038BD2B68002BFBD031 -:10750000236038BD789DFF1F2564000025733A2550 -:10751000733A257300000000253036642C25342E84 -:1075200035662C25342E35662C257500476F6F6423 -:107530005478000054784661696C000050636B45D4 -:10754000727200FF52656347726F756E64000000CF -:1075500070696E670000000067726F756E64506935 -:107560006E67506F6E670000706F6E6700000000FE -:10757000544700005447676E640000005447676E2C -:107580006452657100000000474E44446F776E41BD -:107590007070656E6400FFFF526563426C75650034 -:1075A00054475F426C756500426C7565446F776E39 -:1075B000417070656E640000426C756550696E675D -:1075C000506F6E6700FFFFFF526563576972650079 -:1075D00054475F576972650057697265446F776EEB -:1075E000417070656E6400005769726550696E671E -:1075F000506F6E6700FFFFFF52656347484F554C61 -:107600000000000041636B0041636B5F47484F55CA -:107610004C00000047484F554C446F776E417070E6 -:10762000656E6400496E6350636B46726F6D200037 -:107630004F76657273697A6564204D65737361670F -:10764000653A20002C000000657272006E61766D54 -:107650006F64655F636F6E665F6661696C000000F2 -:107660006974776F726B656400FFFFFF4249545382 -:107670007265763400000000494E49545F4750530C -:107680005F4C4F4700000000494E49545F52585F1D -:107690004C4F4700494E49545F54585F4C4F470088 -:1076A0004D6164654C6F677300000000494E49549A -:1076B0005F4C4F475F4C4F4700000000496E6974B4 -:1076C000000000005374617274696E67206D6F640E -:1076D000656D2E2E2E000000426567696E20666182 -:1076E000696C65643A206572726F72200000000058 -:1076F0004E6F206D6F64656D20646574656374659D -:10770000643A20636865636B20776972696E672EDF -:10771000000000004D6F64656D20737461727465C4 -:10772000640000004D6F64656D537461727465642C -:10773000000000005369676E616C5175616C69747B -:1077400079206661696C65643A206572726F722097 -:107750000000000046726F6D203020746F20352CC1 -:10776000207369676E616C207175616C2069733A72 -:10777000200000004D6F64656D4353513A000000D6 -:107780004750535F4163717569736974696F6E5FC8 -:107790005068617365000000547279696E674750E4 -:1077A00053000000476F744C6F636B006770735039 -:1077B00061636B6574202000676F744C6F636B00AE -:1077C000547279696E6720746F2073656E642074DB -:1077D0006865206D6573736167652E202054686944 -:1077E00073206D696768742074616B6520736576BA -:1077F0006572616C206D696E757465732E0D0A007B -:1078000073656E6453424454657874206661696C94 -:1078100065643A206572726F72200000547279209C -:10782000616761696E2077697468206120626574A0 -:107830007465722076696577206F662074686520AC -:10784000736B792E00000000537563636573732CAE -:107850002073656E74203D2000000000456E746545 -:1078600072696E674C6F6F7000FFFFFF6469736130 -:10787000726D00005061796C6F61642044697361BE -:10788000726D6564000000005341464544000000ED -:1078900061726D005061796C6F61642041726D6539 -:1078A0006400000064726F70000000006F70656E0D -:1078B0000000000044524F5000000000554E41525D -:1078C0004D45445F44524F505F415454454D5054D0 -:1078D000000000004E4F545F41524D4544000000EF -:1078E00073657472617465006661737400000000F2 -:1078F0005345545F524154455F4641535400000084 -:107900002C7246006E6F726D000000005345545F8C -:10791000524154455F4E4F524D0000002C724E00B4 -:10792000736C6F77000000005345545F524154451B -:107930005F534C4F570000002C7253006C616E6413 -:10794000000000005345545F524154455F4C414E86 -:10795000444544002C724C006770735F7265736518 -:1079600074000000544553545F53554343455353EB -:1079700000000000544553545F5041535300000031 -:10798000676E645F7465737400000000676E645F07 -:10799000636865636B000000626C75655F74657396 -:1079A00074000000626C75655F636865636B00005E -:1079B000424C55455041535300000000426C7565E0 -:1079C0005061737300000000426C75655061737301 -:1079D0004661696C000000002C426C756550617353 -:1079E00073000000474E445041535300474E4450EB -:1079F0004153534661696C004641494C0000000008 -:107A000057495245504153530000000057495245D1 -:107A1000504153535F4641494C00000047484F5581 -:107A20004C5041535300000047484F554C50415370 -:107A3000535F4641494C00FF435351206572726FBA -:107A40007220636F6465203D20000000253036649D -:107A50002C25342E34662C25342E34662C257500C6 -:107A6000446F776E417474656D70743A2000000045 -:107A70004C6F6F702053656E64696E670000000084 -:107A80005342442073656E64207265636569766550 -:107A900020636F6D706C657465642077697468200D -:107AA00072657475726E20636F64653A2000000021 -:107AB00053656E64204572726F723A202000000098 -:107AC0000900FFFF00000000000000008DC0000062 -:107AD000A1B80000590400005D0400008DC0000042 -:107AE0008DC000008DC000000000000000000000FC -:107AF000C10900009909000059040000850900002F -:107B0000450A000039090000C90800000000000013 -:107B100000000000C109000099090000590400009C -:107B200085090000450A000039090000C908000065 -:107B30000000000000000000DD0A0000A1060000B7 -:107B40005904000069070000DD06000091070000ED -:107B50003D070000850D00002D0E00000000000014 -:107B600000000000310B0000710B00002109000033 -:107B7000AD090000910A0000E10800007109000051 -:107B8000ED040000DD0B0000E9070000050800001F -:107B900075040000610400009D040000F908000065 -:107BA000210800007905000031060000C105000031 -:107BB00029050000F509000054582E4C4F470000DD -:107BC00052582E4C4F4700004556454E542E4C4FB0 -:107BD000470000004750532E4C4F4700B562060146 -:107BE0000800F004000000000000033FB562060139 -:107BF0000800F001000000000000002AB562060144 -:107C00000800F0020000000000000131B56206012A -:107C10000800F0030000000000000238B562060111 -:107C20000800F0050000000000000446B5620601EF -:107C30000800F0000001000000000028B5620608FE -:107C40000600E8030100010001390000B5620608E2 -:107C50000600C80001000100DE6A0000B5620608E7 -:107C600006006400010001007A120000B5620600FF -:107C7000140001000000D00800008025000007006B -:107C8000030000000000A2B5B56206001400010068 -:107C90000000D008000000C201000700030000003F -:107CA0000000C07EB5620600140001000000D0088C -:107CB000000000100E0007000300000000001B5A27 -:107CC000B56206242400FFFF060300000000102711 -:107CD00000000500FA00FA0064002C01000000001A -:107CE0000000000000000000000016DCB562062461 -:107CF00000002A84B56206090D0000000000FFFFA5 -:107D0000000000000000031DAB0000002C474E44A3 -:107D10000000000000000000000000002C57697205 -:107D20006500000000000000000000002C47484FE4 -:107D3000554C000000000000000000FF00000000A3 -:107D40000000000029350000793500000000000027 -:107D5000000000008135000025350000506F776578 -:107D600072696E67206F6E206D6F64656D2E2E2EAA -:107D70000D0A0000506F776572696E67206F666646 -:107D8000206D6F64656D2E2E2E0D0A003E3E200084 -:107D9000257500FF53424452494E4720616C65727D -:107DA00074207365656E210D0A00FFFF57616974C9 -:107DB000696E6720666F7220726573706F6E73658F -:107DC000200000003C3C200041542D4D5353544DA5 -:107DD0000D0000002D4D5353544D3A20000000007B -:107DE0004F4B0D0A00FFFFFF41542B43474D520DEF -:107DF0000000000043616C6C2050726F6365737308 -:107E00006F722056657273696F6E3A2000FFFFFF34 -:107E100041542B4353510D002B4353513A00FFFF64 -:107E200041542B53424449580D0000002B53424407 -:107E300049583A20000000002C2000FF5B42696E88 -:107E40006172792073697A653A0000005B6373752B -:107E50006D3A000041542B53424452420D00FFFF43 -:107E6000696E7465726E616C53656E6452656365AC -:107E70006976650D0A0000002062797465735D0003 -:107E8000436865636B73756D3A0000005342444963 -:107E900058204D4F20636F64653A20005342444997 -:107EA000582073756363657373210D0A0000000029 -:107EB000496E636F6D696E67206D65737361676589 -:107EC000210D0A00534244495820666174616C21B7 -:107ED0000D0A000057616974696E6720666F722031 -:107EE00053424449582072657472792E2E2E0D0A21 -:107EF0000000000057616974696E6720666F722028 -:107F00004D5353544D2072657472792E2E2E0D0AE6 -:107F10000000000053424449582074696D656F7534 -:107F200074210D0A0000000041542B534244574273 -:107F30003D00000052454144590D0A00300D0A0D24 -:107F40000A4F4B0D0A00000041542B534244575432 -:107F50003D0D000041542B53424457540D00FFFF88 -:107F60004E6F206D6F64656D206465746563746524 -:107F7000642E0D0A0000000052696E6720616C6576 -:107F80007274732061726500204E4F54000000002F -:107F900020656E61626C65642E0D0A0041542B539E -:107FA00042444D54413D310D0000000041542B53DB -:107FB00042444D54413D300D00000000556E6B6E43 -:107FC0006F776E2046572076657273696F6E0D0A63 -:107FD000000000004669726D7761726520766572F7 -:107FE00073696F6E20697320000000004D53535475 -:107FF0004D20776F726B61726F756E6420697300CC -:1080000020656E666F726365642E0D0A00000000C5 -:10801000496E7465726E616C426567696E3A207371 -:10802000756363657373210D0A00000041540D00F0 -:1080300043616C6C696E6720696E7465726E616C09 -:10804000426567696E0D0A00415445310D0000001C -:1080500041542644300D00004154264B300D00FFA2 -:108060004880010050800100588001005342445272 -:10807000494E470D0A00FFFF00000000000000000D -:10808000D54A0000D94C00009D4C0000E54B000093 -:10809000494C0000914B0000114D0000894E00003A -:1080A000CD4D0000C54E00004465766963652069CA -:1080B0007320746F6F20736D616C6C0D0A0000008B -:1080C00057726974696E67204641542000000000B1 -:1080D00057726974696E6720757063617365207487 -:1080E00061626C650D0A000057726974696E6720E1 -:1080F000726F6F740D0A0000466F726D61742064B8 -:108100006F6E650D0A000000466F726D6174206627 -:1081100061696C65640D0A00455846415400FFFFD3 -:1081200042616420636C757374657220636F756E51 -:10813000740D0A004361726420697320746F6F20AC -:10814000736D616C6C2E0D0A00000000466F726D3D -:10815000617420446F6E650D0A000000466F726DF9 -:108160006174204661696C65640D0A0000000000BE -:108170000000000059970000659700005D9700001F -:1081800075970000A99F0000699E0000FD9E0000F9 -:10819000F19C0000DD9D000055A2000045A00000FC -:1081A00039A10000FF0078018001430288018701A6 -:1081B0008C018B01920191019501F60199019801C1 -:1081C0009A013D029E012002A801A701AD01AC0168 -:1081D000B001AF01B901B801BD01BC01BF01F70198 -:1081E000C601C401C901C701CC01CA01DD018E016C -:1081F000F301F101F501F4013A02652C3C023B0266 -:108200003E02662C42024102530281015402860161 -:108210005602890157028A0159028F015B029001BF -:10822000600293016302940168029701690296015A -:108230006B02622C6F029C0172029D0175029F010C -:108240007D02642C8002A6018302A9018802AE018E -:10825000890244028A02B1018B02B2018C024502FA -:108260009202B7017B03FD037C03FE037D03FF0342 -:10827000AC038603C203A303CC038C03CD038E039C -:10828000CE038F03F203F903F803F703FB03FA03AA -:10829000CF04C0047D1D632C511F591F531F5B1F4A -:1082A000551F5D1F571F5F1F781FF81F791FF91F8C -:1082B000B31FBC1FCC1FC31FE51FEC1FFC1FF31F08 -:1082C0004E21322184218321612C602C762C752C47 -:1082D0006100E01AE000E017F800E007000101305B -:1082E00032010106390101104A01012E790101060E -:1082F00082010104A0010106B3010104CD010110B6 -:10830000DE010112F8010128220201124602010ACF -:10831000AD03DB03B103E011C303E009D803011887 -:108320003004E0205004B010600401228A040136B9 -:10833000C104010ED00401446105D026001E01963F -:10834000A01E015A001F0808101F0806201F080859 -:10835000301F0808401F0806601F0808701F4A02E7 -:10836000721F5604761F64027A1F70027C1F7E0201 -:10837000801F0808901F0808A01F0808B01F0802E7 -:10838000D01F0802E01F08027021F010D024E61A66 -:10839000302CD02F672C0106802C0164002D002684 -:1083A00041FFE01A02000300040005000600080077 -:1083B0000A000C00100014001800200028003800EB -:1083C000400060008000C0000001800100028002C7 -:1083D0000003FFFF0000008000000180000000009B -:1083E00000000280000001000110000000000200F7 -:1083F0000110010003200000010002000320010021 -:1084000004300000032002000320030005400000A8 -:108410000540010006500000065001000760000002 -:10842000076001000870000007600200087001008A -:108430003C80044000100000041A0000FF7F000090 -:1084400011100000F5AC00000C0800000002000054 -:10845000000200000B0700004002000000020000C4 -:108460000D0E000040020000000200000A02090692 -:10847000141715160F000000000200000002000093 -:1084800000020000000200000002000000020000E4 -:1084900000020000000200000002000001010202D0 -:1084A00004040808100000004750524D430000002B -:1084B000474E524D430000004750474741000000DF -:1084C000474E4747410000FF000000000000000049 -:1084D00009B500002DB50000BDB50000B9B500001C -:1084E000B5B50000B1B50000ADB50000D1B40000D5 -:1084F0008DB5000089B5000081B5000079B5000098 -:1085000071B5000061B5000051B500004DB5000027 -:1085100045B500003DB50000B1B40000B9B400009D -:10852000C1B40000C9B4000015B50000FDB40000DE -:108530000000000000000000F9B500001DB60000BA -:10854000ADB60000A9B60000A5B60000A1B60000B7 -:108550009DB60000C1B500007DB6000079B60000F0 -:1085600071B6000069B6000061B6000051B60000A7 -:1085700041B600003DB6000035B600002DB6000043 -:10858000D1B60000F1B6000011B70000B1B600008E -:1085900005B60000EDB5000000000000000000007E -:1085A00069B700008DB700001DB8000019B80000C1 -:1085B00015B8000011B800000DB8000031B7000078 -:1085C000EDB70000E9B70000E1B70000D9B700003F -:1085D000D1B70000C1B70000B1B70000ADB70000CF -:1085E000A5B700009DB7000041B8000061B80000C9 -:1085F00081B8000021B8000075B700005DB7000029 -:108600001F1C1F1E1F1E1F1F1E1F1E1F30000000CD -:108610003100FFFF4008FE4340A004404408FE43F1 -:1086200044A004400018FE4300C004403000FE4354 -:10863000309004403400FE43349004401C18FE4344 -:108640001CC004401018FE4310C004400818FE432C -:1086500008C004400C18FE430CC004400C10FE433C -:108660000CB004401010FE4310B004401810FE433C -:1086700018B004401C10FE431CB004401410FE430C -:1086800014B004400418FE4304C004400010FE432C -:1086900000B004400008FE4300A004400408FE436C -:1086A00004A004400C08FE430CA004400808FE434C -:1086B00008A004401418FE4314C004401818FE43D8 -:1086C00018C004400410FE4304B004400810FE43E8 -:1086D00008B004401400FE43149004404C08FE43CC -:1086E0004CA004400420FE4304D004402410FE4368 -:1086F00024B004402010FE4320B004402810FE4364 -:1087000028B004402C10FE432CB004400020FE434F -:1087100000D004404808FE4348A004401000FE4337 -:1087200010900440000000000000000075EA000006 -:108730006DEA000069EA000065EA000061EA0000F5 -:108740005DEA000059EA000055EA0000000100005F -:10875000A088FF1F12000000000200005C88FF1FBD -:108760004300000000030000B488FF1F0000000069 -:1087700001030904B888FF1F000000000203090478 -:10878000D088FF1F0000000003030904E888FF1FD2 -:1087900000000000000000000000000000000000D9 -:1087A00000151915303132333435363738396162B6 -:1087B000636465666768696A6B6C6D6E6F70717211 -:1087C000737475767778797A00FFFFFF4C435F43C7 -:1087D0004F4C4C41544500004C435F435459504565 -:1087E000000000004C435F4D4F4E4554415259002C -:1087F0004C435F4E554D4552494300004C435F5436 -:10880000494D45004C435F4D455353414745530047 -:108810000020202020202020202028282828282050 -:108820002020202020202020202020202020202048 -:1088300020881010101010101010101010101010B0 -:1088400010040404040404040404041010101010A0 -:10885000101041414141414101010101010101016A -:1088600001010101010101010101010110101010BC -:10887000101042424242424202020202020202023C -:108880000202020202020202020202021010101090 -:1088900020000000000000000000000000000000B8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:1089100000FFFFFF494E4600696E66004E414E0063 -:108920006E616E003031323334353637383961623A -:108930006364656600000000303132333435363709 -:10894000383941424344454600000000286E756CAA -:108950006C2900FF20202020202020202020202003 -:108960002020202030303030303030303030303047 -:108970003030303042616C6C6F63207375636365B7 -:1089800065646564000000002F566F6C756D65733B -:108990002F646174612F6A656E6B696E732F776FD8 -:1089A000726B73706163652F474E552D746F6F6CDA -:1089B000636861696E2F61726D2D31312F7372633F -:1089C0002F6E65776C69622D63796777696E2F6E9C -:1089D00065776C69622F6C6962632F7374646C696C -:1089E000622F6D707265632E6300FFFFFFFFFFFF54 -:1089F0000080E03779C34143176E05B5B5B893469B -:108A0000F5F93FE9034F384D321D30F94877825A66 -:108A10003CBF737FDD4F1575000000000000F03F84 -:108A20000000000000002440000000000000594049 -:108A30000000000000408F40000000000088C3409C -:108A400000000000006AF8400000000080842E4111 -:108A500000000000D01263410000000084D797415D -:108A60000000000065CDCD41000000205FA0024263 -:108A7000000000E876483742000000A2941A6D42D8 -:108A8000000040E59C30A2420000901EC4BCD642CB -:108A900000003426F56B0C430080E03779C3414376 -:108AA00000A0D8855734764300C84E676DC1AB43EC -:108AB000003D9160E458E143408CB5781DAF15440A -:108AC00050EFE2D6E41A4B4492D54D06CFF08044E5 -:108AD000F64AE1C7022DB544B49DD9794378EA44FA -:108AE00005000000190000007D0000002C206675C4 -:108AF0006E6374696F6E3A200000000061737365E5 -:108B00007274696F6E2022257322206661696C651C -:108B1000643A2066696C6520222573222C206C69DA -:108B20006E65202564257325730A00FF496E66690A -:108B30006E697479000000004E614E002F566F6C14 -:108B4000756D65732F646174612F6A656E6B696EF4 -:108B5000732F776F726B73706163652F474E552D5E -:108B6000746F6F6C636861696E2F61726D2D313146 -:108B70002F7372632F6E65776C69622D63796777E7 -:108B8000696E2F6E65776C69622F6C6962632F73F3 -:108B900074646C69622F64746F612E6300FFFFFF61 -:108BA00020202020202020202020202020202020C5 -:108BB00030303030303030303030303030303030B5 -:108BC000F8B500BFF8BC08BC9E467047E51F010021 -:108BD00035040000211D00002D390000ED4F00007C -:048BE000F8B500BF25 -:088BE4008C64FF7F010000001A -:108BEC00000000002A000000C87B0100000080BFCC -:108BFC00000080BFFFFFFFFFFFFFFFFFFFFFFFFF36 -:108C0C00387B010000000000E803000000000000B9 -:108C1C0000000000D47B010060EA0000387B0100FA -:108C2C0000000000E803000000000000000000004D -:108C3C00C07B0100387B010000000000E80300004D -:108C4C000000000000000000B87B010000C00240E2 -:108C5C003084010000000000000000000000000053 -:108C6C0000000000000000000000000000000000F8 -:108C7C0000000000000000000000000000000000E8 -:108C8C0000000000D084010000000000E803000098 -:108C9C0000000000D5E00000388501000000000055 -:108CAC00E803000000000000D9E00000A0850100EE -:108CBC0000000000E803000000000000DDE0000000 -:108CCC007C9DFF1F280000001A00000040000000DF -:108CDC004000000001000000280000001A00000005 -:108CEC004000000009000000280000000A000000FD -:108CFC00280000001A0000004000000028000000BE -:108D0C00080101012C87010000000000E8030000AD -:108D1C0000000000FFFFFFFF010A040009024300EE -:108D2C00020100C032090400000102020100052406 -:108D3C00001001052401010104240206052406008B -:108D4C00010705820310004009040100020A00001B -:108D5C0000070503024000000705840240000000E4 -:108D6C001201100102000040C016830475020102BA -:108D7C000301000004030904180354006500650096 -:108D8C006E00730079006400750069006E006F005E -:108D9C00160355005300420020005300650072007A -:108DAC00690061006C0000000C0300000000000072 -:108DBC0000000000000000000000000000000000A7 -:108DCC0000000000000000000089FF1F0089FF1F49 -:108DDC000889FF1F0889FF1F1089FF1F1089FF1FBB -:108DEC001889FF1F1889FF1F2089FF1F2089FF1F6B -:108DFC002889FF1F2889FF1F3089FF1F3089FF1F1B -:108E0C003889FF1F3889FF1F4089FF1F4089FF1FCA -:108E1C004889FF1F4889FF1F5089FF1F5089FF1F7A -:108E2C005889FF1F5889FF1F6089FF1F6089FF1F2A -:108E3C006889FF1F6889FF1F7089FF1F7089FF1FDA -:108E4C007889FF1F7889FF1F8089FF1F8089FF1F8A -:108E5C008889FF1F8889FF1F9089FF1F9089FF1F3A -:108E6C009889FF1F9889FF1FA089FF1FA089FF1FEA -:108E7C00A889FF1FA889FF1FB089FF1FB089FF1F9A -:108E8C00B889FF1FB889FF1FC089FF1FC089FF1F4A -:108E9C00C889FF1FC889FF1FD089FF1FD089FF1FFA -:108EAC00D889FF1FD889FF1FE089FF1FE089FF1FAA -:108EBC00E889FF1FE889FF1FF089FF1FF089FF1F5A -:108ECC00F889FF1FF889FF1F008AFF1F008AFF1F08 -:108EDC00088AFF1F088AFF1F108AFF1F108AFF1FB6 -:108EEC00188AFF1F188AFF1F208AFF1F208AFF1F66 -:108EFC00288AFF1F288AFF1F308AFF1F308AFF1F16 -:108F0C00388AFF1F388AFF1F408AFF1F408AFF1FC5 -:108F1C00488AFF1F488AFF1F508AFF1F508AFF1F75 -:108F2C00588AFF1F588AFF1F608AFF1F608AFF1F25 -:108F3C00688AFF1F688AFF1F708AFF1F708AFF1FD5 -:108F4C00788AFF1F788AFF1F808AFF1F808AFF1F85 -:108F5C00888AFF1F888AFF1F908AFF1F908AFF1F35 -:108F6C00988AFF1F988AFF1FA08AFF1FA08AFF1FE5 -:108F7C00A88AFF1FA88AFF1FB08AFF1FB08AFF1F95 -:108F8C00B88AFF1FB88AFF1FC08AFF1FC08AFF1F45 -:108F9C00C88AFF1FC88AFF1FD08AFF1FD08AFF1FF5 -:108FAC00D88AFF1FD88AFF1FE08AFF1FE08AFF1FA5 -:108FBC00E88AFF1FE88AFF1FF08AFF1FF08AFF1F55 -:108FCC00F88AFF1FF88AFF1F008BFF1F008BFF1F03 -:108FDC00088BFF1F088BFF1F108BFF1F108BFF1FB1 -:108FEC00188BFF1F188BFF1F208BFF1F208BFF1F61 -:108FFC00288BFF1F288BFF1F308BFF1F308BFF1F11 -:10900C00388BFF1F388BFF1F408BFF1F408BFF1FC0 -:10901C00488BFF1F488BFF1F508BFF1F508BFF1F70 -:10902C00588BFF1F588BFF1F608BFF1F608BFF1F20 -:10903C00688BFF1F688BFF1F708BFF1F708BFF1FD0 -:10904C00788BFF1F788BFF1F808BFF1F808BFF1F80 -:10905C00888BFF1F888BFF1F908BFF1F908BFF1F30 -:10906C00988BFF1F988BFF1FA08BFF1FA08BFF1FE0 -:10907C00A88BFF1FA88BFF1FB08BFF1FB08BFF1F90 -:10908C00B88BFF1FB88BFF1FC08BFF1FC08BFF1F40 -:10909C00C88BFF1FC88BFF1FD08BFF1FD08BFF1FF0 -:1090AC00D88BFF1FD88BFF1FE08BFF1FE08BFF1FA0 -:1090BC00E88BFF1FE88BFF1FF08BFF1FF08BFF1F50 -:1090CC00F88BFF1FF88BFF1F008CFF1F008CFF1FFE -:1090DC00088CFF1F088CFF1F108CFF1F108CFF1FAC -:1090EC00188CFF1F188CFF1F208CFF1F208CFF1F5C -:1090FC00288CFF1F288CFF1F308CFF1F308CFF1F0C -:10910C00388CFF1F388CFF1F408CFF1F408CFF1FBB -:10911C00488CFF1F488CFF1F508CFF1F508CFF1F6B -:10912C00588CFF1F588CFF1F608CFF1F608CFF1F1B -:10913C00688CFF1F688CFF1F708CFF1F708CFF1FCB -:10914C00788CFF1F788CFF1F808CFF1F808CFF1F7B -:10915C00888CFF1F888CFF1F908CFF1F908CFF1F2B -:10916C00988CFF1F988CFF1FA08CFF1FA08CFF1FDB -:10917C00A88CFF1FA88CFF1FB08CFF1FB08CFF1F8B -:10918C00B88CFF1FB88CFF1FC08CFF1FC08CFF1F3B -:10919C00C88CFF1FC88CFF1FD08CFF1FD08CFF1FEB -:1091AC00D88CFF1FD88CFF1FE08CFF1FE08CFF1F9B -:1091BC00E88CFF1FE88CFF1FF08CFF1FF08CFF1F4B -:1091CC00F88CFF1FF88CFF1FFFFFFFFF0000020051 -:1091DC0000000000030000009C9AFF1F43000000E9 -:1091EC000000000000000000000000000000000073 -:1091FC000000000000000000000000004300000020 -:10920C000000000000000000000000000000000052 -:10921C0000000000000000000000000043000000FF -:10922C000000000000000000000000000000000032 -:10923C0000000000000000000000000043000000DF -:10924C000000000000000000000000000000000012 -:10925C0000000000000000000000000043000000BF -:10926C0000000000000000000000000000000000F2 -:10927C00000000000000000000000000430000009F -:10928C0000000000000000000000000000000000D2 -:10929C00000000000000000000000000430000007F -:1092AC0000000000000000000000000000000000B2 -:1092BC00000000000000000000000000A5480100B4 -:1092CC00B12201000000000010880100D4760100DA -:1092DC00AC7E0100AC7E0100AC7E0100AC7E0100D6 -:1092EC00AC7E0100AC7E0100AC7E0100AC7E0100C6 -:1092FC00AC7E0100FFFFFFFFFFFFFFFFFFFFFFFF43 -:10930C00FFFF0000010041534349490000000000E9 -:10931C000000000000000000000000000000000041 -:10932C0000000000000041534349490000000000C8 -:10933C000000000000000000000000000000000021 -:10934C000000000000000000000000009C9AFF1FBD -:10935C00049BFF1F6C9BFF1F00000000000000001F -:10936C0000000000000000000000000000000000F1 -:10937C0000000000000000000000000000000000E1 -:10938C0000000000000000000000000000000000D1 -:10939C0000000000000000000000000000000000C1 -:1093AC0000000000000000000000000000000000B1 -:1093BC0000000000000000000000000000000000A1 -:1093CC000000000000000000000000000000000091 -:1093DC000000000000000000000000000000000081 -:1093EC0001000000000000000E33CDAB34126DE61E -:1093FC00ECDE05000B000000000000000000000087 -:10940C000000000000000000000000000000000050 -:10941C000000000000000000000000000000000040 -:10942C000000000000000000000000000000000030 -:10943C000000000000000000000000000000000020 -:10944C000000000000000000000000000000000010 -:10945C000000000000000000000000000000000000 -:10946C000000000000000000888EFF1FD89BFF1F2B -:00000001FF diff --git a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.lst b/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.lst deleted file mode 100644 index 52c8e95e..00000000 --- a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.lst +++ /dev/null @@ -1,52108 +0,0 @@ - -/Users/michaelshipman/Library/Caches/arduino/sketches/18A565F5B3539745F387FBAB06991CCA/BITSv4.ino.elf: file format elf32-littlearm - - -Disassembly of section .text: - -00000000 <_VectorsFlash>: - return gpsInfo; -} - - -// DEBUG PRINT METHOD -void output(){ - 0: 00 80 00 20 bd 01 00 00 25 c0 00 00 e1 bf 00 00 ... ....%....... - String gpspacket; - if(gpsInfo.GPSSats!=-1){ - 10: e1 bf 00 00 e1 bf 00 00 e1 bf 00 00 e1 bf 00 00 ................ -}; - -class StringSumHelper : public String -{ -public: - StringSumHelper(const String &s) : String(s) {} - 20: e1 bf 00 00 e1 bf 00 00 e1 bf 00 00 25 c0 00 00 ............%... - gpspacket = String(gpsInfo.GPSTime)+","+String(gpsInfo.GPSLat,6) + "," + String(gpsInfo.GPSLon,6)+","+gpsInfo.GPSAlt+","+gpsInfo.GPSSats; - 30: 25 c0 00 00 e1 bf 00 00 9d b4 00 00 a1 b4 00 00 %............... - 40: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 50: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 60: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 70: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 80: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 90: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - size_t print(uint64_t n, int base) { return printNumber64(n, base, 0); } - - size_t print(double n, int digits = 2) { return printFloat(n, digits); } - size_t print(const Printable &obj) { return obj.printTo(*this); } - size_t println(void); - size_t println(const String &s) { return print(s) + println(); } - a0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - StringSumHelper(const char *p) : String(p) {} - b0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - }else{ - //gpspacket = String(preserve.GPSTime/100)+","+String(preserve.GPSLat,6) + "," + String(preserve.GPSLon,6)+","+preserve.GPSAlt+","+preserve.GPSSats; - gpspacket = "err" + String(gpsInfo.GPSTime/100)+","+String(gpsInfo.GPSLat,6) + "," + String(gpsInfo.GPSLon,6)+","+gpsInfo.GPSAlt+","+gpsInfo.GPSSats; - c0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - d0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - e0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - f0: 25 c0 00 00 9d ce 00 00 25 c0 00 00 0d d8 00 00 %.......%....... - 100: 25 c0 00 00 55 df 00 00 25 c0 00 00 25 c0 00 00 %...U...%...%... - 110: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 120: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - 130: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... -class StringSumHelper : public String - 140: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - * - * \return true if busy else false. - */ - bool isBusy() {return m_blockDev->isBusy();} - /** \return the root directory start cluster number. */ - uint32_t rootDirectoryCluster() const {return m_rootDirectoryCluster;} - 150: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - //Serial.printf("\n$$$ PFsVolume::setVolumeLabel(Ex): %u %x %x %u\n", root_dir_size, chs, rdc, spc); - uint32_t root_dir = chs + (rdc-2)*spc; - //Serial.printf(" $$$ Guess sector: %x\n", root_dir); - - uint16_t index_in_sector=0; - m_blockDev->readSector(root_dir, buf); - 160: 25 c0 00 00 59 e2 00 00 25 c0 00 00 25 c0 00 00 %...Y...%...%... - 170: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - //if (dir->name[0] == 0) break; // at end of list... - if (dir->type == EXFAT_TYPE_LABEL) { - label_found = true; - break; - } else if (dir->type == 0) break; - index_in_sector += 32; // increment to next entry... - 180: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - if (dir->type == EXFAT_TYPE_LABEL) { - 190: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - root_dir_size-=32; - if (index_in_sector >= 512 && root_dir_size) { - 1a0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%...%... - m_xVol->cacheClear(); - m_blockDev->syncDevice(); - return true; - } - } - return false; // no volume label was found - 1b0: 25 c0 00 00 25 c0 00 00 25 c0 00 00 %...%...%... - -000001bc : -} - 1bc: 4b57 ldr r3, [pc, #348] ; (31c ) - m_blockDev->readSector(root_dir, buf); - 1be: f24c 5220 movw r2, #50464 ; 0xc520 - 1c2: b510 push {r4, lr} - root_dir++; - 1c4: 81da strh r2, [r3, #14] - 1c6: f64d 1228 movw r2, #55592 ; 0xd928 - m_blockDev->readSector(root_dir, buf); - 1ca: 81da strh r2, [r3, #14] - 1cc: bf00 nop - index_in_sector = 0; - 1ce: bf00 nop - 1d0: f00b ff2c bl c02c - while (root_dir_size) { - 1d4: 4b52 ldr r3, [pc, #328] ; (320 ) - 1d6: f04f 6210 mov.w r2, #150994944 ; 0x9000000 - if (!volume_label || !*volume_label) { - 1da: 631a str r2, [r3, #48] ; 0x30 - 1dc: 4a51 ldr r2, [pc, #324] ; (324 ) - 1de: 639a str r2, [r3, #56] ; 0x38 - 1e0: 4a51 ldr r2, [pc, #324] ; (328 ) - 1e2: 63da str r2, [r3, #60] ; 0x3c - uint8_t cb = strlen(volume_label); - 1e4: 4a51 ldr r2, [pc, #324] ; (32c ) - 1e6: 6913 ldr r3, [r2, #16] - 1e8: f413 7380 ands.w r3, r3, #256 ; 0x100 - if (cb > 11) cb = 11; // truncate off. - 1ec: d103 bne.n 1f6 - 1ee: 6153 str r3, [r2, #20] - 1f0: f44f 53a8 mov.w r3, #5376 ; 0x1500 - dir->labelLength = cb; - 1f4: 6113 str r3, [r2, #16] - dir->type = EXFAT_TYPE_LABEL; - 1f6: 4b4e ldr r3, [pc, #312] ; (330 ) - while (cb--) { - 1f8: 789a ldrb r2, [r3, #2] - 1fa: 0711 lsls r1, r2, #28 - dir->type = EXFAT_TYPE_LABEL; - 1fc: d503 bpl.n 206 - while (cb--) { - 1fe: 789a ldrb r2, [r3, #2] - 200: f042 0208 orr.w r2, r2, #8 - 204: 709a strb r2, [r3, #2] - *puni = *volume_label++; - 206: 4b4b ldr r3, [pc, #300] ; (334 ) - 208: 484b ldr r0, [pc, #300] ; (338 ) - 20a: 222a movs r2, #42 ; 0x2a - 20c: 701a strb r2, [r3, #0] - while (cb--) { - 20e: 4b4b ldr r3, [pc, #300] ; (33c ) - 210: 1cda adds r2, r3, #3 - 212: 1a12 subs r2, r2, r0 - 214: 1ec1 subs r1, r0, #3 - m_blockDev->writeSector(root_dir, buf); - 216: f022 0203 bic.w r2, r2, #3 - 21a: 4299 cmp r1, r3 - 21c: bf88 it hi - 21e: 2200 movhi r2, #0 - 220: 4947 ldr r1, [pc, #284] ; (340 ) - 222: f00b fe09 bl be38 - m_xVol->cacheClear(); - 226: 4b47 ldr r3, [pc, #284] ; (344 ) - bool isCached(uint32_t sector, size_t count) { - return sector <= m_sector && m_sector < (sector + count); - } - /** \return dirty status */ - bool isDirty() { - return m_status & CACHE_STATUS_DIRTY; - 228: 4847 ldr r0, [pc, #284] ; (348 ) - 22a: 1cda adds r2, r3, #3 - if (isDirty() && !sync()) { - 22c: 1a12 subs r2, r2, r0 - 22e: 1ec1 subs r1, r0, #3 - m_status = 0; - 230: f022 0203 bic.w r2, r2, #3 - m_sector = 0XFFFFFFFF; - 234: 4299 cmp r1, r3 - m_status = 0; - 236: bf88 it hi - 238: 2200 movhi r2, #0 - m_sector = 0XFFFFFFFF; - 23a: 2100 movs r1, #0 - 23c: f010 ff9a bl 11174 - m_blockDev->syncDevice(); - 240: 4942 ldr r1, [pc, #264] ; (34c ) - 242: 4843 ldr r0, [pc, #268] ; (350 ) - 244: f44f 72de mov.w r2, #444 ; 0x1bc - return true; - 248: f00b fdf6 bl be38 -} - 24c: 4b41 ldr r3, [pc, #260] ; (354 ) - 24e: 4a42 ldr r2, [pc, #264] ; (358 ) - 250: 2180 movs r1, #128 ; 0x80 - 252: f803 1b01 strb.w r1, [r3], #1 - dir->type &= 0x7f; // mark item as deleted - 256: 4293 cmp r3, r2 - 258: d1fb bne.n 252 - m_blockDev->writeSector(root_dir, buf); - 25a: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 - return true; - 25e: 4a3c ldr r2, [pc, #240] ; (350 ) - 260: f8c3 2d08 str.w r2, [r3, #3336] ; 0xd08 - if (!volume_label || !*volume_label) { - 264: 4b3d ldr r3, [pc, #244] ; (35c ) - 266: 228a movs r2, #138 ; 0x8a - 268: 701a strb r2, [r3, #0] - 26a: f5a3 5380 sub.w r3, r3, #4096 ; 0x1000 - m_blockDev->writeSector(root_dir, buf); - 26e: 2224 movs r2, #36 ; 0x24 - 270: 705a strb r2, [r3, #1] - dir->name[0] = FAT_NAME_DELETED; // mark item as deleted - 272: 22a0 movs r2, #160 ; 0xa0 - 274: 701a strb r2, [r3, #0] - m_blockDev->writeSector(root_dir, buf); - 276: 799a ldrb r2, [r3, #6] - 278: 0792 lsls r2, r2, #30 - dir->attributes = 0; - 27a: d5fc bpl.n 276 - dir->attributes = 8; // mark as a volume label. - 27c: 799a ldrb r2, [r3, #6] - 27e: 06d4 lsls r4, r2, #27 - m_blockDev->writeSector(root_dir, buf); - 280: d4fc bmi.n 27c - 282: 4b37 ldr r3, [pc, #220] ; (360 ) - 284: 799a ldrb r2, [r3, #6] - m_blockDev->syncDevice(); - 286: f002 020c and.w r2, r2, #12 - 28a: 2a08 cmp r2, #8 - 28c: d1fa bne.n 284 - 28e: 2203 movs r2, #3 - return true; - 290: 711a strb r2, [r3, #4] - else if (dir->name[0] == FAT_NAME_FREE) label_found = true; - 292: 2240 movs r2, #64 ; 0x40 - 294: 715a strb r2, [r3, #5] - 296: 799a ldrb r2, [r3, #6] - 298: 0690 lsls r0, r2, #26 - 29a: d5fc bpl.n 296 - 29c: 4a30 ldr r2, [pc, #192] ; (360 ) - if (isDirty() && !sync()) { - 29e: 7993 ldrb r3, [r2, #6] - 2a0: 0659 lsls r1, r3, #25 - 2a2: d5fc bpl.n 29e - 2a4: 4b1e ldr r3, [pc, #120] ; (320 ) - 2a6: 492f ldr r1, [pc, #188] ; (364 ) - 2a8: 6459 str r1, [r3, #68] ; 0x44 - 2aa: 2102 movs r1, #2 - m_blockDev->writeSector(root_dir, buf); - 2ac: 6499 str r1, [r3, #72] ; 0x48 - 2ae: 2120 movs r1, #32 - 2b0: 7011 strb r1, [r2, #0] - 2b2: 7991 ldrb r1, [r2, #6] - dir->attributes = 8; // mark as a volume label. - 2b4: f001 010c and.w r1, r1, #12 - uint32_t first_deleted_entry_sector = 0; - 2b8: 290c cmp r1, #12 - uint16_t first_deleted_entry_index = 0; - 2ba: d1fa bne.n 2b2 - DirFat_t *dir = nullptr; - 2bc: 4a2a ldr r2, [pc, #168] ; (368 ) - 2be: 605a str r2, [r3, #4] - 2c0: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 - RTC_CR = RTC_CR_SC16P | RTC_CR_SC4P | RTC_CR_OSCE; - } -#endif - - // initialize the SysTick counter - SYST_RVR = (F_CPU / 1000) - 1; - 2c4: 4a29 ldr r2, [pc, #164] ; (36c ) - 2c6: 615a str r2, [r3, #20] - SYST_CVR = 0; - 2c8: 2200 movs r2, #0 - 2ca: 619a str r2, [r3, #24] - SYST_CSR = SYST_CSR_CLKSOURCE | SYST_CSR_TICKINT | SYST_CSR_ENABLE; - 2cc: 2207 movs r2, #7 - 2ce: 611a str r2, [r3, #16] - SCB_SHPR3 = 0x20200000; // Systick = priority 32 - 2d0: 4a27 ldr r2, [pc, #156] ; (370 ) - 2d2: f8c3 2d20 str.w r2, [r3, #3360] ; 0xd20 - - //init_pins(); - __enable_irq(); - 2d6: b662 cpsie i - - _init_Teensyduino_internal_(); - 2d8: f00c f900 bl c4dc <_init_Teensyduino_internal_> - -#if defined(KINETISK) - // RTC initialization - if (RTC_SR & RTC_SR_TIF) { - 2dc: 4b13 ldr r3, [pc, #76] ; (32c ) - 2de: 695b ldr r3, [r3, #20] - 2e0: 07da lsls r2, r3, #31 - 2e2: d505 bpl.n 2f0 - // compiled-in time will be stale. Write a special - // flag into the VBAT register file indicating the - // RTC is set with known-stale time and should be - // updated when fresh time is known. - #if ARDUINO >= 10600 - rtc_set((uint32_t)&__rtc_localtime); - 2e4: 4823 ldr r0, [pc, #140] ; (374 ) - 2e6: f00c f8ed bl c4c4 - #else - rtc_set(TIME_T); - #endif - *(uint32_t *)0x4003E01C = 0x5A94C3A5; - 2ea: 4b23 ldr r3, [pc, #140] ; (378 ) - 2ec: 4a23 ldr r2, [pc, #140] ; (37c ) - 2ee: 61da str r2, [r3, #28] - } - if ((RCM_SRS0 & RCM_SRS0_PIN) && (*(uint32_t *)0x4003E01C == 0x5A94C3A5)) { - 2f0: 4b23 ldr r3, [pc, #140] ; (380 ) - 2f2: 781b ldrb r3, [r3, #0] - 2f4: 065b lsls r3, r3, #25 - 2f6: d509 bpl.n 30c - 2f8: 4c1f ldr r4, [pc, #124] ; (378 ) - 2fa: 4b20 ldr r3, [pc, #128] ; (37c ) - 2fc: 69e2 ldr r2, [r4, #28] - 2fe: 429a cmp r2, r3 - 300: d104 bne.n 30c - // Our compiled-in time will be very fresh, so set - // the RTC with this, and clear the VBAT resister file - // data so we don't mess with the time after it's been - // set well. - #if ARDUINO >= 10600 - rtc_set((uint32_t)&__rtc_localtime); - 302: 481c ldr r0, [pc, #112] ; (374 ) - 304: f00c f8de bl c4c4 - #else - rtc_set(TIME_T); - #endif - *(uint32_t *)0x4003E01C = 0; - 308: 2300 movs r3, #0 - 30a: 61e3 str r3, [r4, #28] - } -#endif - - startup_late_hook(); - 30c: f00b fe94 bl c038 - __libc_init_array(); - 310: f011 fd22 bl 11d58 <__libc_init_array> - - main(); - 314: f00b fd88 bl be28
- - while (1) ; - 318: e7fe b.n 318 - 31a: bf00 nop - 31c: 40052000 .word 0x40052000 - 320: 40048000 .word 0x40048000 - 324: 00043f82 .word 0x00043f82 - 328: 2b000001 .word 0x2b000001 - 32c: 4003d000 .word 0x4003d000 - 330: 4007d000 .word 0x4007d000 - 334: 4007e000 .word 0x4007e000 - 338: 1fff8720 .word 0x1fff8720 - 33c: 1fff8fb0 .word 0x1fff8fb0 - 340: 00018bec .word 0x00018bec - 344: 1fff9d7c .word 0x1fff9d7c - 348: 1fff8fb0 .word 0x1fff8fb0 - 34c: 00000000 .word 0x00000000 - 350: 1fff8200 .word 0x1fff8200 - 354: e000e400 .word 0xe000e400 - 358: e000e45f .word 0xe000e45f - 35c: 40065000 .word 0x40065000 - 360: 40064000 .word 0x40064000 - 364: 01030000 .word 0x01030000 - 368: 000510c0 .word 0x000510c0 - 36c: 000176ff .word 0x000176ff - 370: 20200000 .word 0x20200000 - 374: 692736ad .word 0x692736ad - 378: 4003e000 .word 0x4003e000 - 37c: 5a94c3a5 .word 0x5a94c3a5 - 380: 4007f000 .word 0x4007f000 - 384: ffffffff .word 0xffffffff - 388: ffffffff .word 0xffffffff - 38c: ffffffff .word 0xffffffff - 390: ffffffff .word 0xffffffff - 394: ffffffff .word 0xffffffff - 398: ffffffff .word 0xffffffff - 39c: ffffffff .word 0xffffffff - 3a0: ffffffff .word 0xffffffff - 3a4: ffffffff .word 0xffffffff - 3a8: ffffffff .word 0xffffffff - 3ac: ffffffff .word 0xffffffff - 3b0: ffffffff .word 0xffffffff - 3b4: ffffffff .word 0xffffffff - 3b8: ffffffff .word 0xffffffff - 3bc: ffffffff .word 0xffffffff - 3c0: ffffffff .word 0xffffffff - 3c4: ffffffff .word 0xffffffff - 3c8: ffffffff .word 0xffffffff - 3cc: ffffffff .word 0xffffffff - 3d0: ffffffff .word 0xffffffff - 3d4: ffffffff .word 0xffffffff - 3d8: ffffffff .word 0xffffffff - 3dc: ffffffff .word 0xffffffff - 3e0: ffffffff .word 0xffffffff - 3e4: ffffffff .word 0xffffffff - 3e8: ffffffff .word 0xffffffff - 3ec: ffffffff .word 0xffffffff - 3f0: ffffffff .word 0xffffffff - 3f4: ffffffff .word 0xffffffff - 3f8: ffffffff .word 0xffffffff - 3fc: ffffffff .word 0xffffffff - -00000400 : - 400: ffffffff ffffffff ffffffff fffff9de ................ - -00000410 : - 410: 4805 ldr r0, [pc, #20] ; (428 ) - 412: 4b06 ldr r3, [pc, #24] ; (42c ) - 414: 1a1b subs r3, r3, r0 - 416: 0fd9 lsrs r1, r3, #31 - 418: eb01 01a3 add.w r1, r1, r3, asr #2 - 41c: 1049 asrs r1, r1, #1 - 41e: d002 beq.n 426 - 420: 4b03 ldr r3, [pc, #12] ; (430 ) - 422: b103 cbz r3, 426 - 424: 4718 bx r3 - 426: 4770 bx lr - 428: 1fff8fb0 .word 0x1fff8fb0 - 42c: 1fff8fb0 .word 0x1fff8fb0 - 430: 00000000 .word 0x00000000 - -00000434 : - 434: b508 push {r3, lr} - 436: 4b05 ldr r3, [pc, #20] ; (44c ) - 438: b11b cbz r3, 442 - 43a: 4905 ldr r1, [pc, #20] ; (450 ) - 43c: 4805 ldr r0, [pc, #20] ; (454 ) - 43e: f3af 8000 nop.w - 442: e8bd 4008 ldmia.w sp!, {r3, lr} - 446: f7ff bfe3 b.w 410 - 44a: bf00 nop - 44c: 00000000 .word 0x00000000 - 450: 1fff8fb0 .word 0x1fff8fb0 - 454: 00018be4 .word 0x00018be4 - -00000458 : - virtual int availableForWrite(void) { return 0; } - 458: 2000 movs r0, #0 - 45a: 4770 bx lr - -0000045c : - virtual void flush() { } - 45c: 4770 bx lr - 45e: bf00 nop - -00000460 : - bool isHidden() const { - return m_fFile ? m_fFile->isHidden() : - m_xFile ? m_xFile->isHidden() : false; - } - /** \return True if this is an open file/directory else false. */ - bool isOpen() const {return m_fFile || m_xFile;} - 460: 6d03 ldr r3, [r0, #80] ; 0x50 - 462: b10b cbz r3, 468 - 464: 2001 movs r0, #1 - sdfatfile.close(); - } - } - virtual bool isOpen() { - return sdfatfile.isOpen(); - } - 466: 4770 bx lr - 468: 6d40 ldr r0, [r0, #84] ; 0x54 - 46a: 3800 subs r0, #0 - 46c: bf18 it ne - 46e: 2001 movne r0, #1 - 470: 4770 bx lr - 472: bf00 nop - -00000474 : - virtual void close() { - 474: b510 push {r4, lr} - 476: 4604 mov r4, r0 - if (filename) { - 478: 6d80 ldr r0, [r0, #88] ; 0x58 - 47a: b118 cbz r0, 484 - free(filename); - 47c: f00f fe20 bl 100c0 - filename = nullptr; - 480: 2300 movs r3, #0 - 482: 65a3 str r3, [r4, #88] ; 0x58 - 484: 6d23 ldr r3, [r4, #80] ; 0x50 - 486: b12b cbz r3, 494 - sdfatfile.close(); - 488: f104 0018 add.w r0, r4, #24 - } - 48c: e8bd 4010 ldmia.w sp!, {r4, lr} - sdfatfile.close(); - 490: f009 b832 b.w 94f8 - 494: 6d63 ldr r3, [r4, #84] ; 0x54 - 496: 2b00 cmp r3, #0 - 498: d1f6 bne.n 488 - } - 49a: bd10 pop {r4, pc} - -0000049c : - virtual const char * name() { - 49c: b510 push {r4, lr} - 49e: 4604 mov r4, r0 - if (!filename) { - 4a0: 6d80 ldr r0, [r0, #88] ; 0x58 - 4a2: b100 cbz r0, 4a6 - static char zeroterm = 0; - filename = &zeroterm; - } - } - return filename; - } - 4a4: bd10 pop {r4, pc} - filename = (char *)malloc(MAX_FILENAME_LEN); - 4a6: f44f 7080 mov.w r0, #256 ; 0x100 - 4aa: f00f fe01 bl 100b0 - 4ae: 65a0 str r0, [r4, #88] ; 0x58 - if (filename) { - 4b0: b1b0 cbz r0, 4e0 - return m_fFile ? m_fFile->getName(name, len) : - 4b2: 6d23 ldr r3, [r4, #80] ; 0x50 - *name = 0; - 4b4: 2200 movs r2, #0 - 4b6: 7002 strb r2, [r0, #0] - return m_fFile ? m_fFile->getName(name, len) : - 4b8: b13b cbz r3, 4ca - 4ba: 4601 mov r1, r0 - 4bc: f44f 7280 mov.w r2, #256 ; 0x100 - 4c0: 4618 mov r0, r3 - 4c2: f008 fd41 bl 8f48 - return filename; - 4c6: 6da0 ldr r0, [r4, #88] ; 0x58 - } - 4c8: bd10 pop {r4, pc} - 4ca: 6d63 ldr r3, [r4, #84] ; 0x54 - m_xFile ? m_xFile->getName(name, len) : 0; - 4cc: 2b00 cmp r3, #0 - 4ce: d0e9 beq.n 4a4 - * \param[in] size The size of the array in characters. - * \return the name length. - */ - size_t getName(char* name, size_t size) { -#if USE_UTF8_LONG_NAMES - return getName8(name, size); - 4d0: 4601 mov r1, r0 - 4d2: f44f 7280 mov.w r2, #256 ; 0x100 - 4d6: 4618 mov r0, r3 - 4d8: f006 fa98 bl 6a0c - return filename; - 4dc: 6da0 ldr r0, [r4, #88] ; 0x58 - } - 4de: bd10 pop {r4, pc} - filename = &zeroterm; - 4e0: 4801 ldr r0, [pc, #4] ; (4e8 ) - 4e2: 65a0 str r0, [r4, #88] ; 0x58 - } - 4e4: bd10 pop {r4, pc} - 4e6: bf00 nop - 4e8: 1fff8fc8 .word 0x1fff8fc8 - -000004ec : - virtual bool truncate(uint64_t size=0) { - 4ec: b538 push {r3, r4, r5, lr} - * \param[in] length The desired length for the file. - * - * \return true for success or false for failure. - */ - bool truncate(uint64_t length) { - return m_fFile ? length < (1ULL << 32) && m_fFile->truncate(length) : - 4ee: 6d05 ldr r5, [r0, #80] ; 0x50 - 4f0: b16d cbz r5, 50e - 4f2: b10b cbz r3, 4f8 - } - 4f4: 2000 movs r0, #0 - 4f6: bd38 pop {r3, r4, r5, pc} - * \param[in] length The desired length for the file. - * - * \return true for success or false for failure. - */ - bool truncate(uint32_t length) { - return seekSet(length) && truncate(); - 4f8: 4611 mov r1, r2 - 4fa: 4628 mov r0, r5 - 4fc: f007 fa82 bl 7a04 - 500: 2800 cmp r0, #0 - 502: d0f7 beq.n 4f4 - 504: 4628 mov r0, r5 - 506: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 50a: f007 bc13 b.w 7d34 - 50e: 6d44 ldr r4, [r0, #84] ; 0x54 - m_xFile ? m_xFile->truncate(length) : false; - 510: 2c00 cmp r4, #0 - 512: d0ef beq.n 4f4 - * \param[in] length The desired length for the file. - * - * \return true for success or false for failure. - */ - bool truncate(uint64_t length) { - return seekSet(length) && truncate(); - 514: 4620 mov r0, r4 - 516: f004 ff3f bl 5398 - 51a: 2800 cmp r0, #0 - 51c: d0ea beq.n 4f4 - 51e: 4620 mov r0, r4 - 520: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 524: f005 bd5a b.w 5fdc - -00000528 : - tm.mon = FS_MONTH(fat_date) - 1; - tm.year = FS_YEAR(fat_date) - 1900; - return true; - } - virtual bool setCreateTime(const DateTimeFields &tm) { - if (tm.year < 80 || tm.year > 207) return false; - 528: 798a ldrb r2, [r1, #6] - 52a: f1a2 0350 sub.w r3, r2, #80 ; 0x50 - 52e: 061b lsls r3, r3, #24 - 530: d420 bmi.n 574 - virtual bool setCreateTime(const DateTimeFields &tm) { - 532: b5f0 push {r4, r5, r6, r7, lr} - return sdfatfile.timestamp(T_CREATE, tm.year + 1900, tm.mon + 1, - 534: 794b ldrb r3, [r1, #5] - return m_fFile ? - 536: 6d04 ldr r4, [r0, #80] ; 0x50 - tm.mday, tm.hour, tm.min, tm.sec); - 538: 790d ldrb r5, [r1, #4] - 53a: 788e ldrb r6, [r1, #2] - 53c: 784f ldrb r7, [r1, #1] - 53e: 7809 ldrb r1, [r1, #0] - return sdfatfile.timestamp(T_CREATE, tm.year + 1900, tm.mon + 1, - 540: 3301 adds r3, #1 - virtual bool setCreateTime(const DateTimeFields &tm) { - 542: b085 sub sp, #20 - return sdfatfile.timestamp(T_CREATE, tm.year + 1900, tm.mon + 1, - 544: f202 726c addw r2, r2, #1900 ; 0x76c - 548: b2db uxtb r3, r3 - 54a: b144 cbz r4, 55e - m_fFile->timestamp(flags, year, month, day, hour, minute, second) : - 54c: 9103 str r1, [sp, #12] - 54e: e88d 00e0 stmia.w sp, {r5, r6, r7} - 552: 2102 movs r1, #2 - 554: 4620 mov r0, r4 - 556: f007 fb81 bl 7c5c - } - 55a: b005 add sp, #20 - 55c: bdf0 pop {r4, r5, r6, r7, pc} - 55e: 6d40 ldr r0, [r0, #84] ; 0x54 - m_xFile ? - 560: 2800 cmp r0, #0 - 562: d0fa beq.n 55a - m_xFile->timestamp(flags, year, month, day, hour, minute, second) : - 564: 9103 str r1, [sp, #12] - 566: e88d 00e0 stmia.w sp, {r5, r6, r7} - 56a: 2102 movs r1, #2 - 56c: f005 fc86 bl 5e7c - 570: b005 add sp, #20 - 572: bdf0 pop {r4, r5, r6, r7, pc} - if (tm.year < 80 || tm.year > 207) return false; - 574: 2000 movs r0, #0 - } - 576: 4770 bx lr - -00000578 : - virtual void rewindDirectory(void) { - 578: b510 push {r4, lr} - 57a: 4604 mov r4, r0 - return m_fFile ? m_fFile->isDir() : - 57c: 6d00 ldr r0, [r0, #80] ; 0x50 - 57e: b180 cbz r0, 5a2 - int read() { - return BaseFile::read(); - } - /** Rewind a file if it is a directory */ - void rewindDirectory() { - if (BaseFile::isDir()) { - 580: 7803 ldrb r3, [r0, #0] - 582: f013 0f70 tst.w r3, #112 ; 0x70 - 586: d100 bne.n 58a - } - 588: bd10 pop {r4, pc} - seekSet(0); - 58a: 2100 movs r1, #0 - 58c: f007 fa3a bl 7a04 - if (m_xFile) m_xFile->rewind(); - 590: 6d60 ldr r0, [r4, #84] ; 0x54 - 592: 2800 cmp r0, #0 - 594: d0f8 beq.n 588 - 596: e8bd 4010 ldmia.w sp!, {r4, lr} - seekSet(0); - 59a: 2200 movs r2, #0 - 59c: 2300 movs r3, #0 - 59e: f004 befb b.w 5398 - 5a2: 6d60 ldr r0, [r4, #84] ; 0x54 - m_xFile ? m_xFile->isDir() : false; - 5a4: 2800 cmp r0, #0 - 5a6: d0ef beq.n 588 - 5a8: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 5ac: f013 0f50 tst.w r3, #80 ; 0x50 - 5b0: d0ea beq.n 588 - 5b2: e8bd 4010 ldmia.w sp!, {r4, lr} - 5b6: 2200 movs r2, #0 - 5b8: 2300 movs r3, #0 - 5ba: f004 beed b.w 5398 - 5be: bf00 nop - -000005c0 : - virtual bool getModifyTime(DateTimeFields &tm) { - 5c0: b510 push {r4, lr} - 5c2: 4603 mov r3, r0 - return m_fFile ? m_fFile->getModifyDateTime(pdate, ptime) : - 5c4: 6d00 ldr r0, [r0, #80] ; 0x50 - 5c6: b082 sub sp, #8 - 5c8: 460c mov r4, r1 - 5ca: b320 cbz r0, 616 - 5cc: f10d 0206 add.w r2, sp, #6 - 5d0: a901 add r1, sp, #4 - 5d2: f006 fe3f bl 7254 - if (!sdfatfile.getModifyDateTime(&fat_date, &fat_time)) return false; - 5d6: b338 cbz r0, 628 - if ((fat_date == 0) && (fat_time == 0)) return false; - 5d8: f8bd 3004 ldrh.w r3, [sp, #4] - 5dc: f8bd 2006 ldrh.w r2, [sp, #6] - 5e0: ea53 0102 orrs.w r1, r3, r2 - 5e4: d020 beq.n 628 - * \param[in] fatTime Time in packed dir format. - * - * \return Extracted minute [0,59] - */ -static inline uint8_t FS_MINUTE(uint16_t fatTime) { - return (fatTime >> 5) & 0X3F; - 5e6: f3c2 1c45 ubfx ip, r2, #5, #6 - * \param[in] fatTime Time in packed dir format. - * - * \return Extracted second [0,58] - */ -static inline uint8_t FS_SECOND(uint16_t fatTime) { - return 2*(fatTime & 0X1F); - 5ea: f002 001f and.w r0, r2, #31 - return fatTime >> 11; - 5ee: 0ad2 lsrs r2, r2, #11 - return (fatDate >> 5) & 0XF; - 5f0: f3c3 1143 ubfx r1, r3, #5, #4 - return 2*(fatTime & 0X1F); - 5f4: 0040 lsls r0, r0, #1 - return fatTime >> 11; - 5f6: 70a2 strb r2, [r4, #2] - return 1980 + (fatDate >> 9); - 5f8: 0a5a lsrs r2, r3, #9 - tm.mon = FS_MONTH(fat_date) - 1; - 5fa: 3901 subs r1, #1 - tm.sec = FS_SECOND(fat_time); - 5fc: 7020 strb r0, [r4, #0] - return fatDate & 0X1F; - 5fe: f003 031f and.w r3, r3, #31 - tm.year = FS_YEAR(fat_date) - 1900; - 602: f502 62ea add.w r2, r2, #1872 ; 0x750 - return true; - 606: 2001 movs r0, #1 - tm.min = FS_MINUTE(fat_time); - 608: f884 c001 strb.w ip, [r4, #1] - tm.mday = FS_DAY(fat_date); - 60c: 7123 strb r3, [r4, #4] - tm.mon = FS_MONTH(fat_date) - 1; - 60e: 7161 strb r1, [r4, #5] - tm.year = FS_YEAR(fat_date) - 1900; - 610: 71a2 strb r2, [r4, #6] - } - 612: b002 add sp, #8 - 614: bd10 pop {r4, pc} - 616: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->getModifyDateTime(pdate, ptime) : false; - 618: b130 cbz r0, 628 - 61a: f10d 0206 add.w r2, sp, #6 - 61e: a901 add r1, sp, #4 - 620: f004 fd54 bl 50cc - 624: 2800 cmp r0, #0 - 626: d1d7 bne.n 5d8 - if (!sdfatfile.getModifyDateTime(&fat_date, &fat_time)) return false; - 628: 2000 movs r0, #0 - } - 62a: b002 add sp, #8 - 62c: bd10 pop {r4, pc} - 62e: bf00 nop - -00000630 : - virtual bool getCreateTime(DateTimeFields &tm) { - 630: b510 push {r4, lr} - 632: 4603 mov r3, r0 - return m_fFile ? m_fFile->getCreateDateTime(pdate, ptime) : - 634: 6d00 ldr r0, [r0, #80] ; 0x50 - 636: b082 sub sp, #8 - 638: 460c mov r4, r1 - 63a: b320 cbz r0, 686 - 63c: f10d 0206 add.w r2, sp, #6 - 640: a901 add r1, sp, #4 - 642: f006 fdf7 bl 7234 - if (!sdfatfile.getCreateDateTime(&fat_date, &fat_time)) return false; - 646: b338 cbz r0, 698 - if ((fat_date == 0) && (fat_time == 0)) return false; - 648: f8bd 3004 ldrh.w r3, [sp, #4] - 64c: f8bd 2006 ldrh.w r2, [sp, #6] - 650: ea53 0102 orrs.w r1, r3, r2 - 654: d020 beq.n 698 - return (fatTime >> 5) & 0X3F; - 656: f3c2 1c45 ubfx ip, r2, #5, #6 - return 2*(fatTime & 0X1F); - 65a: f002 001f and.w r0, r2, #31 - return fatTime >> 11; - 65e: 0ad2 lsrs r2, r2, #11 - return (fatDate >> 5) & 0XF; - 660: f3c3 1143 ubfx r1, r3, #5, #4 - return 2*(fatTime & 0X1F); - 664: 0040 lsls r0, r0, #1 - return fatTime >> 11; - 666: 70a2 strb r2, [r4, #2] - return 1980 + (fatDate >> 9); - 668: 0a5a lsrs r2, r3, #9 - tm.mon = FS_MONTH(fat_date) - 1; - 66a: 3901 subs r1, #1 - tm.sec = FS_SECOND(fat_time); - 66c: 7020 strb r0, [r4, #0] - return fatDate & 0X1F; - 66e: f003 031f and.w r3, r3, #31 - tm.year = FS_YEAR(fat_date) - 1900; - 672: f502 62ea add.w r2, r2, #1872 ; 0x750 - return true; - 676: 2001 movs r0, #1 - tm.min = FS_MINUTE(fat_time); - 678: f884 c001 strb.w ip, [r4, #1] - tm.mday = FS_DAY(fat_date); - 67c: 7123 strb r3, [r4, #4] - tm.mon = FS_MONTH(fat_date) - 1; - 67e: 7161 strb r1, [r4, #5] - tm.year = FS_YEAR(fat_date) - 1900; - 680: 71a2 strb r2, [r4, #6] - } - 682: b002 add sp, #8 - 684: bd10 pop {r4, pc} - 686: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->getCreateDateTime(pdate, ptime) : false; - 688: b130 cbz r0, 698 - 68a: f10d 0206 add.w r2, sp, #6 - 68e: a901 add r1, sp, #4 - 690: f004 fd0a bl 50a8 - 694: 2800 cmp r0, #0 - 696: d1d7 bne.n 648 - if (!sdfatfile.getCreateDateTime(&fat_date, &fat_time)) return false; - 698: 2000 movs r0, #0 - } - 69a: b002 add sp, #8 - 69c: bd10 pop {r4, pc} - 69e: bf00 nop - -000006a0 : - return (f) ? f->read(buf, nbyte) : 0; - } - - // override print version - virtual size_t write(const uint8_t *buf, size_t size) { - return (f) ? f->write((void*)buf, size) : 0; - 6a0: 6903 ldr r3, [r0, #16] - 6a2: b1b3 cbz r3, 6d2 - virtual size_t write(const uint8_t *buf, size_t size) { - 6a4: b410 push {r4} - return (f) ? f->write((void*)buf, size) : 0; - 6a6: 681c ldr r4, [r3, #0] - 6a8: 480b ldr r0, [pc, #44] ; (6d8 ) - 6aa: 68e4 ldr r4, [r4, #12] - 6ac: 4284 cmp r4, r0 - 6ae: d10c bne.n 6ca - * - * \return For success write() returns the number of bytes written, always - * \a nbyte. If an error occurs, write() returns zero and writeError is set. - */ - size_t write(const void* buf, size_t count) { - return m_fFile ? m_fFile->write(buf, count) : - 6b0: 6d18 ldr r0, [r3, #80] ; 0x50 - 6b2: b110 cbz r0, 6ba - } - 6b4: bc10 pop {r4} - 6b6: f007 bb77 b.w 7da8 - 6ba: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 6bc: b110 cbz r0, 6c4 - 6be: bc10 pop {r4} - 6c0: f005 bd00 b.w 60c4 - 6c4: 2000 movs r0, #0 - 6c6: bc10 pop {r4} - 6c8: 4770 bx lr - return (f) ? f->write((void*)buf, size) : 0; - 6ca: 4618 mov r0, r3 - 6cc: 4623 mov r3, r4 - } - 6ce: bc10 pop {r4} - return (f) ? f->write((void*)buf, size) : 0; - 6d0: 4718 bx r3 - } - 6d2: 2000 movs r0, #0 - 6d4: 4770 bx lr - 6d6: bf00 nop - 6d8: 000009ad .word 0x000009ad - -000006dc : - - size_t write(const void *buf, size_t size) { - return (f) ? f->write(buf, size) : 0; - } - int available() { - return (f) ? f->available() : 0; - 6dc: 6900 ldr r0, [r0, #16] - 6de: b190 cbz r0, 706 - 6e0: 6803 ldr r3, [r0, #0] - 6e2: 4a15 ldr r2, [pc, #84] ; (738 ) - 6e4: 691b ldr r3, [r3, #16] - 6e6: 4293 cmp r3, r2 - 6e8: d125 bne.n 736 - return m_fFile ? m_fFile->available() : - 6ea: 6d03 ldr r3, [r0, #80] ; 0x50 - 6ec: b163 cbz r3, 708 - return isFile() ? fileSize() - curPosition() : 0; - 6ee: 7818 ldrb r0, [r3, #0] - 6f0: f010 0008 ands.w r0, r0, #8 - 6f4: d007 beq.n 706 - 6f6: 69d8 ldr r0, [r3, #28] - 6f8: 695b ldr r3, [r3, #20] - return n > INT_MAX ? INT_MAX : n; - 6fa: 1ac0 subs r0, r0, r3 - 6fc: bf48 it mi - 6fe: f06f 4000 mvnmi.w r0, #2147483648 ; 0x80000000 - 702: 4770 bx lr - 704: 4618 mov r0, r3 - } - 706: 4770 bx lr - 708: 6d43 ldr r3, [r0, #84] ; 0x54 - m_xFile ? m_xFile->available() : 0; - 70a: 2b00 cmp r3, #0 - 70c: d0fa beq.n 704 - return isFile() ? fileSize() - curPosition() : 0; - 70e: f893 0031 ldrb.w r0, [r3, #49] ; 0x31 - 712: f010 0008 ands.w r0, r0, #8 - 716: d0f6 beq.n 706 - 718: 6918 ldr r0, [r3, #16] - 71a: 6819 ldr r1, [r3, #0] - 71c: 695a ldr r2, [r3, #20] - 71e: 685b ldr r3, [r3, #4] - 720: 1a40 subs r0, r0, r1 - 722: eb62 0303 sbc.w r3, r2, r3 - return n > INT_MAX ? INT_MAX : n; - 726: f1b0 4f00 cmp.w r0, #2147483648 ; 0x80000000 - 72a: f173 0300 sbcs.w r3, r3, #0 - 72e: d3ea bcc.n 706 - 730: f06f 4000 mvn.w r0, #2147483648 ; 0x80000000 - 734: 4770 bx lr - return (f) ? f->available() : 0; - 736: 4718 bx r3 - 738: 00000a91 .word 0x00000a91 - -0000073c : - int peek() { - return (f) ? f->peek() : -1; - 73c: 6903 ldr r3, [r0, #16] - 73e: b173 cbz r3, 75e - 740: 681a ldr r2, [r3, #0] - 742: 4908 ldr r1, [pc, #32] ; (764 ) - 744: 6952 ldr r2, [r2, #20] - 746: 428a cmp r2, r1 - 748: d107 bne.n 75a - return m_fFile ? m_fFile->peek() : - 74a: 6d18 ldr r0, [r3, #80] ; 0x50 - 74c: b108 cbz r0, 752 - 74e: f007 b81d b.w 778c - 752: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->peek() : -1; - 754: b118 cbz r0, 75e - 756: f004 be07 b.w 5368 - 75a: 4618 mov r0, r3 - 75c: 4710 bx r2 - } - 75e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 762: 4770 bx lr - 764: 000008e1 .word 0x000008e1 - -00000768 : - void flush() { - if (f) f->flush(); - 768: 6903 ldr r3, [r0, #16] - 76a: b163 cbz r3, 786 - 76c: 681a ldr r2, [r3, #0] - 76e: 4907 ldr r1, [pc, #28] ; (78c ) - 770: 6992 ldr r2, [r2, #24] - 772: 428a cmp r2, r1 - 774: d108 bne.n 788 - return m_fFile ? m_fFile->sync() : - 776: 6d18 ldr r0, [r3, #80] ; 0x50 - 778: b108 cbz r0, 77e - 77a: f007 ba69 b.w 7c50 - 77e: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->sync() : false; - 780: b108 cbz r0, 786 - 782: f005 ba33 b.w 5bec - } - 786: 4770 bx lr - if (f) f->flush(); - 788: 4618 mov r0, r3 - 78a: 4710 bx r2 - 78c: 00000971 .word 0x00000971 - -00000790 : - } - bool seek(uint64_t pos) { - return seek(pos, SeekSet); - } - int read() { - if (!f) return -1; - 790: 6903 ldr r3, [r0, #16] - 792: b323 cbz r3, 7de - int read() { - 794: b510 push {r4, lr} - unsigned char b; - if (f->read(&b, 1) < 1) return -1; - 796: 6819 ldr r1, [r3, #0] - 798: 4a12 ldr r2, [pc, #72] ; (7e4 ) - 79a: 688c ldr r4, [r1, #8] - 79c: 4294 cmp r4, r2 - int read() { - 79e: b082 sub sp, #8 - 7a0: d114 bne.n 7cc - return m_fFile ? m_fFile->read(buf, count) : - 7a2: 6d18 ldr r0, [r3, #80] ; 0x50 - 7a4: b148 cbz r0, 7ba - 7a6: 2201 movs r2, #1 - 7a8: f10d 0107 add.w r1, sp, #7 - 7ac: f006 ff20 bl 75f0 - if (f->read(&b, 1) < 1) return -1; - 7b0: b190 cbz r0, 7d8 - return b; - 7b2: f89d 0007 ldrb.w r0, [sp, #7] - } - 7b6: b002 add sp, #8 - 7b8: bd10 pop {r4, pc} - 7ba: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->read(buf, count) : -1; - 7bc: 2800 cmp r0, #0 - 7be: d0f8 beq.n 7b2 - 7c0: 2201 movs r2, #1 - 7c2: f10d 0107 add.w r1, sp, #7 - 7c6: f004 fcfb bl 51c0 - 7ca: e7f1 b.n 7b0 - if (f->read(&b, 1) < 1) return -1; - 7cc: 2201 movs r2, #1 - 7ce: f10d 0107 add.w r1, sp, #7 - 7d2: 4618 mov r0, r3 - 7d4: 47a0 blx r4 - 7d6: e7eb b.n 7b0 - if (!f) return -1; - 7d8: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 7dc: e7eb b.n 7b6 - 7de: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - } - 7e2: 4770 bx lr - 7e4: 00000921 .word 0x00000921 - -000007e8 : - return m_fFile ? m_fFile->curPosition() : - 7e8: 6d03 ldr r3, [r0, #80] ; 0x50 - 7ea: b113 cbz r3, 7f2 - 7ec: 6958 ldr r0, [r3, #20] - 7ee: 2100 movs r1, #0 - 7f0: 4770 bx lr - 7f2: 6d43 ldr r3, [r0, #84] ; 0x54 - m_xFile ? m_xFile->curPosition() : 0; - 7f4: b113 cbz r3, 7fc - uint64_t curPosition() const {return m_curPosition;} - 7f6: e9d3 0100 ldrd r0, r1, [r3] - 7fa: 4770 bx lr - 7fc: 4618 mov r0, r3 - 7fe: 4619 mov r1, r3 - } - 800: 4770 bx lr - 802: bf00 nop - -00000804 : - return m_fFile ? m_fFile->fileSize() : - 804: 6d03 ldr r3, [r0, #80] ; 0x50 - 806: b113 cbz r3, 80e - 808: 69d8 ldr r0, [r3, #28] - 80a: 2100 movs r1, #0 - 80c: 4770 bx lr - 80e: 6d43 ldr r3, [r0, #84] ; 0x54 - m_xFile ? m_xFile->fileSize() : 0; - 810: b113 cbz r3, 818 - uint64_t fileSize() const {return m_validLength;} - 812: e9d3 0104 ldrd r0, r1, [r3, #16] - 816: 4770 bx lr - 818: 4618 mov r0, r3 - 81a: 4619 mov r1, r3 - } - 81c: 4770 bx lr - 81e: bf00 nop - -00000820 : - virtual File openNextFile(uint8_t mode=0) { - 820: b5f0 push {r4, r5, r6, r7, lr} - 822: b095 sub sp, #84 ; 0x54 - constexpr Print() : write_error(0) {} - 824: 2200 movs r2, #0 -}; -/** - * \class FsFile - * \brief FsBaseFile file with Arduino Stream. - */ -class FsFile : public StreamFile { - 826: 4f23 ldr r7, [pc, #140] ; (8b4 ) - 828: 9201 str r2, [sp, #4] -enum LookaheadMode {SKIP_ALL, SKIP_NONE, SKIP_WHITESPACE}; - -class Stream : public Print -{ - public: - constexpr Stream() : _timeout(1000), read_error(0) {} - 82a: f44f 747a mov.w r4, #1000 ; 0x3e8 - * \param[in] oflag open flags. - * \return a FatStream object. - */ - FsFile openNextFile(oflag_t oflag = O_RDONLY) { - FsFile tmpFile; - tmpFile.openNext(this, oflag); - 82e: 3118 adds r1, #24 - 830: 4605 mov r5, r0 - 832: a804 add r0, sp, #16 - FsBaseFile() {} - 834: e9cd 2212 strd r2, r2, [sp, #72] ; 0x48 - 838: 9402 str r4, [sp, #8] - 83a: f88d 200c strb.w r2, [sp, #12] -class FsFile : public StreamFile { - 83e: 9700 str r7, [sp, #0] - tmpFile.openNext(this, oflag); - 840: f008 fec6 bl 95d0 - bool isOpen() const {return m_fFile || m_xFile;} - 844: 9b12 ldr r3, [sp, #72] ; 0x48 - 846: 2b00 cmp r3, #0 - 848: d029 beq.n 89e - if (file) return File(new SDFile(file)); - 84a: 205c movs r0, #92 ; 0x5c - 84c: f00b fc44 bl c0d8 -class Print - 850: 9b01 ldr r3, [sp, #4] - 852: 60c3 str r3, [r0, #12] -class Stream : public Print - 854: 9b02 ldr r3, [sp, #8] - 856: 6103 str r3, [r0, #16] - 858: f89d 300c ldrb.w r3, [sp, #12] - 85c: 7503 strb r3, [r0, #20] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 85e: 4b16 ldr r3, [pc, #88] ; (8b8 ) - 860: 6003 str r3, [r0, #0] -class FileImpl { - 862: 2600 movs r6, #0 - 864: 4b15 ldr r3, [pc, #84] ; (8bc ) - 866: 6083 str r3, [r0, #8] - if (file) return File(new SDFile(file)); - 868: 4604 mov r4, r0 - 86a: 6046 str r6, [r0, #4] -class StreamFile : public stream_t, public BaseFile { - 86c: a904 add r1, sp, #16 - 86e: 3018 adds r0, #24 - 870: f008 fe14 bl 949c - constexpr Stream() : _timeout(1000), read_error(0) {} - 874: f44f 737a mov.w r3, #1000 ; 0x3e8 - 878: 60ab str r3, [r5, #8] - if (f) f->refcount++; - 87a: 6863 ldr r3, [r4, #4] - File(FileImpl *file) { - 87c: 4a10 ldr r2, [pc, #64] ; (8c0 ) -class FsFile : public StreamFile { - 87e: 60a7 str r7, [r4, #8] - if (f) f->refcount++; - 880: 3301 adds r3, #1 - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 882: 65a6 str r6, [r4, #88] ; 0x58 - constexpr Print() : write_error(0) {} - 884: 606e str r6, [r5, #4] - File(FileImpl *file) { - 886: 602a str r2, [r5, #0] - 888: 732e strb r6, [r5, #12] - f = file; - 88a: 612c str r4, [r5, #16] - if (f) f->refcount++; - 88c: 6063 str r3, [r4, #4] - 88e: 4b0d ldr r3, [pc, #52] ; (8c4 ) - 890: 9300 str r3, [sp, #0] - ~FsBaseFile() {close();} - 892: a804 add r0, sp, #16 - 894: f008 fe30 bl 94f8 - } - 898: 4628 mov r0, r5 - 89a: b015 add sp, #84 ; 0x54 - 89c: bdf0 pop {r4, r5, r6, r7, pc} - bool isOpen() const {return m_fFile || m_xFile;} - 89e: 9b13 ldr r3, [sp, #76] ; 0x4c - 8a0: 2b00 cmp r3, #0 - 8a2: d1d2 bne.n 84a - constexpr File() : f(nullptr) { } - 8a4: 4a06 ldr r2, [pc, #24] ; (8c0 ) - 8a6: 606b str r3, [r5, #4] - 8a8: 60ac str r4, [r5, #8] - 8aa: 732b strb r3, [r5, #12] - 8ac: 602a str r2, [r5, #0] - 8ae: 612b str r3, [r5, #16] - 8b0: e7ed b.n 88e - 8b2: bf00 nop - 8b4: 00017b14 .word 0x00017b14 - 8b8: 00017b64 .word 0x00017b64 - 8bc: 00017acc .word 0x00017acc - 8c0: 00017b38 .word 0x00017b38 - 8c4: 00017af0 .word 0x00017af0 - -000008c8 ::peek()>: - int peek() { - 8c8: 4603 mov r3, r0 - return m_fFile ? m_fFile->peek() : - 8ca: 6c80 ldr r0, [r0, #72] ; 0x48 - 8cc: b108 cbz r0, 8d2 ::peek()+0xa> - 8ce: f006 bf5d b.w 778c - 8d2: 6cd8 ldr r0, [r3, #76] ; 0x4c - m_xFile ? m_xFile->peek() : -1; - 8d4: b108 cbz r0, 8da ::peek()+0x12> - 8d6: f004 bd47 b.w 5368 - } - 8da: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 8de: 4770 bx lr - -000008e0 : - virtual int peek() { - 8e0: 4603 mov r3, r0 - return m_fFile ? m_fFile->peek() : - 8e2: 6d00 ldr r0, [r0, #80] ; 0x50 - 8e4: b108 cbz r0, 8ea - 8e6: f006 bf51 b.w 778c - 8ea: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->peek() : -1; - 8ec: b108 cbz r0, 8f2 - 8ee: f004 bd3b b.w 5368 - } - 8f2: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 8f6: 4770 bx lr - -000008f8 : - return m_fFile ? m_fFile->isDir() : - 8f8: 6d03 ldr r3, [r0, #80] ; 0x50 - 8fa: b133 cbz r3, 90a - bool isDir() const {return m_attributes & FILE_ATTR_DIR;} - 8fc: 781b ldrb r3, [r3, #0] - 8fe: f013 0f70 tst.w r3, #112 ; 0x70 - 902: bf14 ite ne - 904: 2001 movne r0, #1 - 906: 2000 moveq r0, #0 - 908: 4770 bx lr - 90a: 6d40 ldr r0, [r0, #84] ; 0x54 - m_xFile ? m_xFile->isDir() : false; - 90c: b130 cbz r0, 91c - 90e: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 912: f013 0f50 tst.w r3, #80 ; 0x50 - 916: bf14 ite ne - 918: 2001 movne r0, #1 - 91a: 2000 moveq r0, #0 - } - 91c: 4770 bx lr - 91e: bf00 nop - -00000920 : - virtual size_t read(void *buf, size_t nbyte) { - 920: 4603 mov r3, r0 - return m_fFile ? m_fFile->read(buf, count) : - 922: 6d00 ldr r0, [r0, #80] ; 0x50 - 924: b108 cbz r0, 92a - 926: f006 be63 b.w 75f0 - 92a: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->read(buf, count) : -1; - 92c: b108 cbz r0, 932 - 92e: f004 bc47 b.w 51c0 - } - 932: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 936: 4770 bx lr - -00000938 ::read()>: - int read() { - 938: b500 push {lr} - 93a: 4603 mov r3, r0 - return m_fFile ? m_fFile->read(buf, count) : - 93c: 6c80 ldr r0, [r0, #72] ; 0x48 - 93e: b083 sub sp, #12 - 940: b158 cbz r0, 95a ::read()+0x22> - 942: 2201 movs r2, #1 - 944: f10d 0107 add.w r1, sp, #7 - 948: f006 fe52 bl 75f0 - return read(&b, 1) == 1 ? b : -1; - 94c: 2801 cmp r0, #1 - 94e: d10c bne.n 96a ::read()+0x32> - 950: f89d 0007 ldrb.w r0, [sp, #7] - } - 954: b003 add sp, #12 - 956: f85d fb04 ldr.w pc, [sp], #4 - 95a: 6cd8 ldr r0, [r3, #76] ; 0x4c - m_xFile ? m_xFile->read(buf, count) : -1; - 95c: b128 cbz r0, 96a ::read()+0x32> - 95e: 2201 movs r2, #1 - 960: f10d 0107 add.w r1, sp, #7 - 964: f004 fc2c bl 51c0 - 968: e7f0 b.n 94c ::read()+0x14> - return read(&b, 1) == 1 ? b : -1; - 96a: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 96e: e7f1 b.n 954 ::read()+0x1c> - -00000970 : - virtual void flush() { - 970: 4603 mov r3, r0 - return m_fFile ? m_fFile->sync() : - 972: 6d00 ldr r0, [r0, #80] ; 0x50 - 974: b108 cbz r0, 97a - 976: f007 b96b b.w 7c50 - 97a: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->sync() : false; - 97c: b108 cbz r0, 982 - 97e: f005 b935 b.w 5bec - } - 982: 4770 bx lr - -00000984 ::flush()>: - void flush() { - 984: 4603 mov r3, r0 - return m_fFile ? m_fFile->sync() : - 986: 6c80 ldr r0, [r0, #72] ; 0x48 - 988: b108 cbz r0, 98e ::flush()+0xa> - 98a: f007 b961 b.w 7c50 - 98e: 6cd8 ldr r0, [r3, #76] ; 0x4c - m_xFile ? m_xFile->sync() : false; - 990: b108 cbz r0, 996 ::flush()+0x12> - 992: f005 b92b b.w 5bec - } - 996: 4770 bx lr - -00000998 ::write(unsigned char const*, unsigned int)>: - * \param[in] size Number of bytes to write. - * - * \return For success write() returns the number of bytes written, always - * \a size. - */ - size_t write(const uint8_t* buffer, size_t size) { - 998: 4603 mov r3, r0 - return m_fFile ? m_fFile->write(buf, count) : - 99a: 6c80 ldr r0, [r0, #72] ; 0x48 - 99c: b108 cbz r0, 9a2 ::write(unsigned char const*, unsigned int)+0xa> - 99e: f007 ba03 b.w 7da8 - 9a2: 6cd8 ldr r0, [r3, #76] ; 0x4c - m_xFile ? m_xFile->write(buf, count) : 0; - 9a4: b108 cbz r0, 9aa ::write(unsigned char const*, unsigned int)+0x12> - 9a6: f005 bb8d b.w 60c4 - return BaseFile::write(buffer, size); - } - 9aa: 4770 bx lr - -000009ac : - virtual size_t write(const void *buf, size_t size) { - 9ac: 4603 mov r3, r0 - return m_fFile ? m_fFile->write(buf, count) : - 9ae: 6d00 ldr r0, [r0, #80] ; 0x50 - 9b0: b108 cbz r0, 9b6 - 9b2: f007 b9f9 b.w 7da8 - 9b6: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 9b8: b108 cbz r0, 9be - 9ba: f005 bb83 b.w 60c4 - } - 9be: 4770 bx lr - -000009c0 ::write(unsigned char)>: - size_t write(uint8_t b) { - 9c0: b500 push {lr} - 9c2: 4603 mov r3, r0 - 9c4: b083 sub sp, #12 - return m_fFile ? m_fFile->write(buf, count) : - 9c6: 6c80 ldr r0, [r0, #72] ; 0x48 - 9c8: f88d 1007 strb.w r1, [sp, #7] - 9cc: b138 cbz r0, 9de ::write(unsigned char)+0x1e> - 9ce: 2201 movs r2, #1 - 9d0: f10d 0107 add.w r1, sp, #7 - 9d4: f007 f9e8 bl 7da8 - } - 9d8: b003 add sp, #12 - 9da: f85d fb04 ldr.w pc, [sp], #4 - 9de: 6cd8 ldr r0, [r3, #76] ; 0x4c - m_xFile ? m_xFile->write(buf, count) : 0; - 9e0: 2800 cmp r0, #0 - 9e2: d0f9 beq.n 9d8 ::write(unsigned char)+0x18> - 9e4: 2201 movs r2, #1 - 9e6: f10d 0107 add.w r1, sp, #7 - 9ea: f005 fb6b bl 60c4 - 9ee: b003 add sp, #12 - 9f0: f85d fb04 ldr.w pc, [sp], #4 - -000009f4 : - virtual bool setModifyTime(const DateTimeFields &tm) { - if (tm.year < 80 || tm.year > 207) return false; - 9f4: 798a ldrb r2, [r1, #6] - 9f6: f1a2 0350 sub.w r3, r2, #80 ; 0x50 - 9fa: 061b lsls r3, r3, #24 - 9fc: d420 bmi.n a40 - virtual bool setModifyTime(const DateTimeFields &tm) { - 9fe: b5f0 push {r4, r5, r6, r7, lr} - return sdfatfile.timestamp(T_WRITE, tm.year + 1900, tm.mon + 1, - a00: 794b ldrb r3, [r1, #5] - return m_fFile ? - a02: 6d04 ldr r4, [r0, #80] ; 0x50 - tm.mday, tm.hour, tm.min, tm.sec); - a04: 790d ldrb r5, [r1, #4] - a06: 788e ldrb r6, [r1, #2] - a08: 784f ldrb r7, [r1, #1] - a0a: 7809 ldrb r1, [r1, #0] - return sdfatfile.timestamp(T_WRITE, tm.year + 1900, tm.mon + 1, - a0c: 3301 adds r3, #1 - virtual bool setModifyTime(const DateTimeFields &tm) { - a0e: b085 sub sp, #20 - return sdfatfile.timestamp(T_WRITE, tm.year + 1900, tm.mon + 1, - a10: f202 726c addw r2, r2, #1900 ; 0x76c - a14: b2db uxtb r3, r3 - a16: b144 cbz r4, a2a - m_fFile->timestamp(flags, year, month, day, hour, minute, second) : - a18: 9103 str r1, [sp, #12] - a1a: e88d 00e0 stmia.w sp, {r5, r6, r7} - a1e: 2104 movs r1, #4 - a20: 4620 mov r0, r4 - a22: f007 f91b bl 7c5c - } - a26: b005 add sp, #20 - a28: bdf0 pop {r4, r5, r6, r7, pc} - a2a: 6d40 ldr r0, [r0, #84] ; 0x54 - m_xFile ? - a2c: 2800 cmp r0, #0 - a2e: d0fa beq.n a26 - m_xFile->timestamp(flags, year, month, day, hour, minute, second) : - a30: 9103 str r1, [sp, #12] - a32: e88d 00e0 stmia.w sp, {r5, r6, r7} - a36: 2104 movs r1, #4 - a38: f005 fa20 bl 5e7c - a3c: b005 add sp, #20 - a3e: bdf0 pop {r4, r5, r6, r7, pc} - if (tm.year < 80 || tm.year > 207) return false; - a40: 2000 movs r0, #0 - } - a42: 4770 bx lr - -00000a44 ::available()>: - return m_fFile ? m_fFile->available() : - a44: 6c83 ldr r3, [r0, #72] ; 0x48 - a46: b153 cbz r3, a5e ::available()+0x1a> - return isFile() ? fileSize() - curPosition() : 0; - a48: 7818 ldrb r0, [r3, #0] - a4a: f010 0008 ands.w r0, r0, #8 - a4e: d00d beq.n a6c ::available()+0x28> - a50: 69d8 ldr r0, [r3, #28] - a52: 695b ldr r3, [r3, #20] - return n > INT_MAX ? INT_MAX : n; - a54: 1ac0 subs r0, r0, r3 - a56: bf48 it mi - a58: f06f 4000 mvnmi.w r0, #2147483648 ; 0x80000000 - a5c: 4770 bx lr - a5e: 6cc3 ldr r3, [r0, #76] ; 0x4c - m_xFile ? m_xFile->available() : 0; - a60: b1a3 cbz r3, a8c ::available()+0x48> - return isFile() ? fileSize() - curPosition() : 0; - a62: f893 0031 ldrb.w r0, [r3, #49] ; 0x31 - a66: f010 0008 ands.w r0, r0, #8 - a6a: d100 bne.n a6e ::available()+0x2a> - } - a6c: 4770 bx lr - a6e: 6918 ldr r0, [r3, #16] - a70: 6819 ldr r1, [r3, #0] - a72: 695a ldr r2, [r3, #20] - a74: 685b ldr r3, [r3, #4] - a76: 1a40 subs r0, r0, r1 - a78: eb62 0303 sbc.w r3, r2, r3 - return n > INT_MAX ? INT_MAX : n; - a7c: f1b0 4f00 cmp.w r0, #2147483648 ; 0x80000000 - a80: f173 0300 sbcs.w r3, r3, #0 - a84: d3f2 bcc.n a6c ::available()+0x28> - a86: f06f 4000 mvn.w r0, #2147483648 ; 0x80000000 - a8a: 4770 bx lr - a8c: 4618 mov r0, r3 - return BaseFile::available(); - a8e: e7ed b.n a6c ::available()+0x28> - -00000a90 : - return m_fFile ? m_fFile->available() : - a90: 6d03 ldr r3, [r0, #80] ; 0x50 - a92: b153 cbz r3, aaa - return isFile() ? fileSize() - curPosition() : 0; - a94: 7818 ldrb r0, [r3, #0] - a96: f010 0008 ands.w r0, r0, #8 - a9a: d00d beq.n ab8 - a9c: 69d8 ldr r0, [r3, #28] - a9e: 695b ldr r3, [r3, #20] - return n > INT_MAX ? INT_MAX : n; - aa0: 1ac0 subs r0, r0, r3 - aa2: bf48 it mi - aa4: f06f 4000 mvnmi.w r0, #2147483648 ; 0x80000000 - aa8: 4770 bx lr - aaa: 6d43 ldr r3, [r0, #84] ; 0x54 - m_xFile ? m_xFile->available() : 0; - aac: b1a3 cbz r3, ad8 - return isFile() ? fileSize() - curPosition() : 0; - aae: f893 0031 ldrb.w r0, [r3, #49] ; 0x31 - ab2: f010 0008 ands.w r0, r0, #8 - ab6: d100 bne.n aba - } - ab8: 4770 bx lr - aba: 6918 ldr r0, [r3, #16] - abc: 6819 ldr r1, [r3, #0] - abe: 695a ldr r2, [r3, #20] - ac0: 685b ldr r3, [r3, #4] - ac2: 1a40 subs r0, r0, r1 - ac4: eb62 0303 sbc.w r3, r2, r3 - return n > INT_MAX ? INT_MAX : n; - ac8: f1b0 4f00 cmp.w r0, #2147483648 ; 0x80000000 - acc: f173 0300 sbcs.w r3, r3, #0 - ad0: d3f2 bcc.n ab8 - ad2: f06f 4000 mvn.w r0, #2147483648 ; 0x80000000 - ad6: 4770 bx lr - ad8: 4618 mov r0, r3 - return sdfatfile.available(); - ada: e7ed b.n ab8 - -00000adc : - size_t write(uint8_t b) { - adc: b510 push {r4, lr} - return (f) ? f->write(&b, 1) : 0; - ade: 6903 ldr r3, [r0, #16] - size_t write(uint8_t b) { - ae0: b082 sub sp, #8 - ae2: f88d 1007 strb.w r1, [sp, #7] - return (f) ? f->write(&b, 1) : 0; - ae6: b1bb cbz r3, b18 - ae8: 6819 ldr r1, [r3, #0] - aea: 4a10 ldr r2, [pc, #64] ; (b2c ) - aec: 68cc ldr r4, [r1, #12] - aee: 4294 cmp r4, r2 - af0: d115 bne.n b1e - return m_fFile ? m_fFile->write(buf, count) : - af2: 6d18 ldr r0, [r3, #80] ; 0x50 - af4: b130 cbz r0, b04 - af6: 2201 movs r2, #1 - af8: f10d 0107 add.w r1, sp, #7 - afc: f007 f954 bl 7da8 - } - b00: b002 add sp, #8 - b02: bd10 pop {r4, pc} - b04: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - b06: 2800 cmp r0, #0 - b08: d0fa beq.n b00 - b0a: 2201 movs r2, #1 - b0c: f10d 0107 add.w r1, sp, #7 - b10: f005 fad8 bl 60c4 - b14: b002 add sp, #8 - b16: bd10 pop {r4, pc} - return (f) ? f->write(&b, 1) : 0; - b18: 4618 mov r0, r3 - } - b1a: b002 add sp, #8 - b1c: bd10 pop {r4, pc} - return (f) ? f->write(&b, 1) : 0; - b1e: 2201 movs r2, #1 - b20: f10d 0107 add.w r1, sp, #7 - b24: 4618 mov r0, r3 - b26: 47a0 blx r4 - } - b28: b002 add sp, #8 - b2a: bd10 pop {r4, pc} - b2c: 000009ad .word 0x000009ad - -00000b30 : - virtual ~SDFile(void) { - b30: b538 push {r3, r4, r5, lr} - b32: 4604 mov r4, r0 - if (filename) { - b34: 6d80 ldr r0, [r0, #88] ; 0x58 - virtual ~SDFile(void) { - b36: 4b0c ldr r3, [pc, #48] ; (b68 ) - b38: 6023 str r3, [r4, #0] - if (filename) { - b3a: b118 cbz r0, b44 - free(filename); - b3c: f00f fac0 bl 100c0 - filename = nullptr; - b40: 2300 movs r3, #0 - b42: 65a3 str r3, [r4, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - b44: 6d23 ldr r3, [r4, #80] ; 0x50 - sdfatfile.close(); - b46: f104 0518 add.w r5, r4, #24 - b4a: b14b cbz r3, b60 - b4c: 4628 mov r0, r5 - b4e: f008 fcd3 bl 94f8 -class StreamFile : public stream_t, public BaseFile { - b52: 4b06 ldr r3, [pc, #24] ; (b6c ) - b54: 60a3 str r3, [r4, #8] - ~FsBaseFile() {close();} - b56: 4628 mov r0, r5 - b58: f008 fcce bl 94f8 - } - b5c: 4620 mov r0, r4 - b5e: bd38 pop {r3, r4, r5, pc} - bool isOpen() const {return m_fFile || m_xFile;} - b60: 6d63 ldr r3, [r4, #84] ; 0x54 - b62: 2b00 cmp r3, #0 - b64: d1f2 bne.n b4c - b66: e7f4 b.n b52 - b68: 00017b64 .word 0x00017b64 - b6c: 00017af0 .word 0x00017af0 - -00000b70 : - virtual ~SDFile(void) { - b70: b538 push {r3, r4, r5, lr} - b72: 4604 mov r4, r0 - if (filename) { - b74: 6d80 ldr r0, [r0, #88] ; 0x58 - virtual ~SDFile(void) { - b76: 4b0e ldr r3, [pc, #56] ; (bb0 ) - b78: 6023 str r3, [r4, #0] - if (filename) { - b7a: b118 cbz r0, b84 - free(filename); - b7c: f00f faa0 bl 100c0 - filename = nullptr; - b80: 2300 movs r3, #0 - b82: 65a3 str r3, [r4, #88] ; 0x58 - b84: 6d23 ldr r3, [r4, #80] ; 0x50 - sdfatfile.close(); - b86: f104 0518 add.w r5, r4, #24 - b8a: b16b cbz r3, ba8 - b8c: 4628 mov r0, r5 - b8e: f008 fcb3 bl 94f8 - b92: 4b08 ldr r3, [pc, #32] ; (bb4 ) - b94: 60a3 str r3, [r4, #8] - ~FsBaseFile() {close();} - b96: 4628 mov r0, r5 - b98: f008 fcae bl 94f8 - } - b9c: 4620 mov r0, r4 - b9e: 215c movs r1, #92 ; 0x5c - ba0: f00b fa9c bl c0dc - ba4: 4620 mov r0, r4 - ba6: bd38 pop {r3, r4, r5, pc} - bool isOpen() const {return m_fFile || m_xFile;} - ba8: 6d63 ldr r3, [r4, #84] ; 0x54 - baa: 2b00 cmp r3, #0 - bac: d1ee bne.n b8c - bae: e7f0 b.n b92 - bb0: 00017b64 .word 0x00017b64 - bb4: 00017af0 .word 0x00017af0 - -00000bb8 : - size_t println(char c) { return print(c) + println(); } - size_t println(const char s[]) { return print(s) + println(); } - bb8: b538 push {r3, r4, r5, lr} - bba: 4604 mov r4, r0 - size_t write(const char *str) { if (str == nullptr) return 0; - bbc: b149 cbz r1, bd2 - return write((const uint8_t *)str, strlen(str)); } - bbe: 4608 mov r0, r1 - bc0: 460d mov r5, r1 - bc2: f011 f95d bl 11e80 - bc6: 6823 ldr r3, [r4, #0] - bc8: 4602 mov r2, r0 - bca: 685b ldr r3, [r3, #4] - bcc: 4629 mov r1, r5 - bce: 4620 mov r0, r4 - bd0: 4798 blx r3 - size_t println(const char s[]) { return print(s) + println(); } - bd2: 4620 mov r0, r4 - bd4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - bd8: f00a beea b.w b9b0 - -00000bdc : - virtual bool seek(uint64_t pos, int mode = SeekSet) { - bdc: b430 push {r4, r5} - bde: 9c02 ldr r4, [sp, #8] - be0: 4611 mov r1, r2 - be2: 469c mov ip, r3 - if (mode == SeekSet) return sdfatfile.seekSet(pos); - be4: b134 cbz r4, bf4 - if (mode == SeekCur) return sdfatfile.seekCur(pos); - be6: 2c01 cmp r4, #1 - be8: d01c beq.n c24 - if (mode == SeekEnd) return sdfatfile.seekEnd(pos); - bea: 2c02 cmp r4, #2 - bec: d00e beq.n c0c - } - bee: 2000 movs r0, #0 - bf0: bc30 pop {r4, r5} - bf2: 4770 bx lr - return m_fFile ? pos < (1ULL << 32) && m_fFile->seekSet(pos) : - bf4: 6d05 ldr r5, [r0, #80] ; 0x50 - bf6: b1f5 cbz r5, c36 - bf8: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - bfc: 4293 cmp r3, r2 - bfe: eb74 040c sbcs.w r4, r4, ip - c02: d3f4 bcc.n bee - c04: 4628 mov r0, r5 - c06: bc30 pop {r4, r5} - c08: f006 befc b.w 7a04 - return m_fFile ? m_fFile->fileSize() : - c0c: 6d02 ldr r2, [r0, #80] ; 0x50 - c0e: b30a cbz r2, c54 - c10: 69d3 ldr r3, [r2, #28] - return seekSet(fileSize() + offset); - c12: 1859 adds r1, r3, r1 - c14: f14c 0300 adc.w r3, ip, #0 - return m_fFile ? pos < (1ULL << 32) && m_fFile->seekSet(pos) : - c18: 2b00 cmp r3, #0 - c1a: d1e8 bne.n bee - c1c: bc30 pop {r4, r5} - c1e: 4610 mov r0, r2 - c20: f006 bef0 b.w 7a04 - return m_fFile ? m_fFile->curPosition() : - c24: 6d02 ldr r2, [r0, #80] ; 0x50 - c26: b162 cbz r2, c42 - c28: 6953 ldr r3, [r2, #20] - return seekSet(curPosition() + offset); - c2a: 1859 adds r1, r3, r1 - c2c: f14c 0300 adc.w r3, ip, #0 - return m_fFile ? pos < (1ULL << 32) && m_fFile->seekSet(pos) : - c30: 2b00 cmp r3, #0 - c32: d1dc bne.n bee - c34: e7f2 b.n c1c - c36: 6d40 ldr r0, [r0, #84] ; 0x54 - m_xFile ? m_xFile->seekSet(pos) : false; - c38: 2800 cmp r0, #0 - c3a: d0d8 beq.n bee - c3c: bc30 pop {r4, r5} - c3e: f004 bbab b.w 5398 - c42: 6d40 ldr r0, [r0, #84] ; 0x54 - m_xFile ? m_xFile->curPosition() : 0; - c44: 2800 cmp r0, #0 - c46: d0d2 beq.n bee - return seekSet(curPosition() + offset); - c48: e9d0 2300 ldrd r2, r3, [r0] - c4c: 188a adds r2, r1, r2 - m_xFile ? m_xFile->seekSet(pos) : false; - c4e: eb4c 0303 adc.w r3, ip, r3 - c52: e7f3 b.n c3c - c54: 6d40 ldr r0, [r0, #84] ; 0x54 - m_xFile ? m_xFile->fileSize() : 0; - c56: 2800 cmp r0, #0 - c58: d0c9 beq.n bee - return seekSet(fileSize() + offset); - c5a: e9d0 2304 ldrd r2, r3, [r0, #16] - c5e: 188a adds r2, r1, r2 - c60: bc30 pop {r4, r5} - m_xFile ? m_xFile->seekSet(pos) : false; - c62: eb4c 0303 adc.w r3, ip, r3 - c66: f004 bb97 b.w 5398 - c6a: bf00 nop - -00000c6c : -{ - OutputSerial.write(c); -} -#endif - -void LogPacket(){ - c6c: b5f0 push {r4, r5, r6, r7, lr} - if(millis()-lastLog>gpsLogInterval){ - char gpsLogPacket2[50]; - - char exactTime[9];//A somewhat convaluted way of adding : into the integer timestamp... //TEST - snprintf(exactTime,7,"%d",gpsInfo.GPSTime); - c6e: 4c3c ldr r4, [pc, #240] ; (d60 ) - c70: 4a3c ldr r2, [pc, #240] ; (d64 ) - c72: 68a3 ldr r3, [r4, #8] -void LogPacket(){ - c74: b09b sub sp, #108 ; 0x6c - snprintf(exactTime,7,"%d",gpsInfo.GPSTime); - c76: 2107 movs r1, #7 - c78: a80a add r0, sp, #40 ; 0x28 - c7a: f00f fedd bl 10a38 - char hour[3];char min[3];char sec[3]; - strncpy(hour, &exactTime[0], 2);hour[2] = '\0'; - strncpy(min, &exactTime[2], 2);min[2] = '\0'; - c7e: ae07 add r6, sp, #28 - strncpy(hour, &exactTime[0], 2);hour[2] = '\0'; - c80: 2202 movs r2, #2 - c82: a90a add r1, sp, #40 ; 0x28 - c84: a806 add r0, sp, #24 - c86: f010 fbc1 bl 1140c - c8a: 2500 movs r5, #0 - strncpy(min, &exactTime[2], 2);min[2] = '\0'; - c8c: 2202 movs r2, #2 - c8e: f10d 012a add.w r1, sp, #42 ; 0x2a - strncpy(sec, &exactTime[4], 2);sec[2] = '\0'; - c92: af08 add r7, sp, #32 - strncpy(min, &exactTime[2], 2);min[2] = '\0'; - c94: 4630 mov r0, r6 - strncpy(hour, &exactTime[0], 2);hour[2] = '\0'; - c96: f88d 501a strb.w r5, [sp, #26] - strncpy(min, &exactTime[2], 2);min[2] = '\0'; - c9a: f010 fbb7 bl 1140c - strncpy(sec, &exactTime[4], 2);sec[2] = '\0'; - c9e: 2202 movs r2, #2 - ca0: a90b add r1, sp, #44 ; 0x2c - ca2: 4638 mov r0, r7 - strncpy(min, &exactTime[2], 2);min[2] = '\0'; - ca4: f88d 501e strb.w r5, [sp, #30] - strncpy(sec, &exactTime[4], 2);sec[2] = '\0'; - ca8: f010 fbb0 bl 1140c - snprintf(exactTime,9,"%s:%s:%s",hour,min,sec); - cac: 4a2e ldr r2, [pc, #184] ; (d68 ) - cae: 9600 str r6, [sp, #0] - cb0: ab06 add r3, sp, #24 - cb2: 2109 movs r1, #9 - cb4: 9701 str r7, [sp, #4] - cb6: a80a add r0, sp, #40 ; 0x28 - strncpy(sec, &exactTime[4], 2);sec[2] = '\0'; - cb8: f88d 5022 strb.w r5, [sp, #34] ; 0x22 - snprintf(exactTime,9,"%s:%s:%s",hour,min,sec); - cbc: f00f febc bl 10a38 - - //snprintf(gpsLogPacket2,35,"%s,%4.4f,%4.4f,%u",exactTime,gpsInfo.GPSLat,gpsInfo.GPSLon,gpsInfo.GPSAlt); //Fix Timestep - snprintf(gpsLogPacket2,45,"%06d,%4.5f,%4.5f,%u",gpsInfo.GPSTime,gpsInfo.GPSLat,gpsInfo.GPSLon,gpsInfo.GPSAlt); //Build the packet - cc0: 68e3 ldr r3, [r4, #12] - cc2: 6860 ldr r0, [r4, #4] - cc4: 68a6 ldr r6, [r4, #8] - cc6: 9304 str r3, [sp, #16] - cc8: f00e fb3c bl f344 <__aeabi_f2d> - ccc: 4602 mov r2, r0 - cce: 460b mov r3, r1 - cd0: 6820 ldr r0, [r4, #0] - return (f) ? f->write((void*)buf, size) : 0; - cd2: 4d26 ldr r5, [pc, #152] ; (d6c ) - cd4: e9cd 2302 strd r2, r3, [sp, #8] - cd8: f00e fb34 bl f344 <__aeabi_f2d> - cdc: 4a24 ldr r2, [pc, #144] ; (d70 ) - cde: e9cd 0100 strd r0, r1, [sp] - ce2: 4633 mov r3, r6 - ce4: 212d movs r1, #45 ; 0x2d - ce6: a80d add r0, sp, #52 ; 0x34 - ce8: f00f fea6 bl 10a38 - cec: 692c ldr r4, [r5, #16] - cee: b16c cbz r4, d0c - return write((const uint8_t *)str, strlen(str)); } - cf0: a80d add r0, sp, #52 ; 0x34 - cf2: f011 f8c5 bl 11e80 - cf6: 6823 ldr r3, [r4, #0] - cf8: 491e ldr r1, [pc, #120] ; (d74 ) - cfa: 68db ldr r3, [r3, #12] - cfc: 428b cmp r3, r1 - cfe: 4602 mov r2, r0 - d00: d127 bne.n d52 - return m_fFile ? m_fFile->write(buf, count) : - d02: 6d20 ldr r0, [r4, #80] ; 0x50 - d04: b1c0 cbz r0, d38 - d06: a90d add r1, sp, #52 ; 0x34 - d08: f007 f84e bl 7da8 - size_t println(const char s[]) { return print(s) + println(); } - d0c: 4817 ldr r0, [pc, #92] ; (d6c ) - d0e: f00a fe4f bl b9b0 - if (f) f->flush(); - d12: 692b ldr r3, [r5, #16] - d14: b143 cbz r3, d28 - d16: 681a ldr r2, [r3, #0] - d18: 4917 ldr r1, [pc, #92] ; (d78 ) - d1a: 6992 ldr r2, [r2, #24] - d1c: 428a cmp r2, r1 - d1e: d11c bne.n d5a - return m_fFile ? m_fFile->sync() : - d20: 6d18 ldr r0, [r3, #80] ; 0x50 - d22: b180 cbz r0, d46 - d24: f006 ff94 bl 7c50 - // do not remove this "redundant" code without - // carefully verifying the case mentioned here: - // - // https://forum.pjrc.com/threads/17469-millis%28%29-on-teensy-3?p=104924&viewfull=1#post104924 - // - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - d28: 4a14 ldr r2, [pc, #80] ; (d7c ) - gpsLogFile.println(gpsLogPacket2); - - gpsLogFile.flush(); //WIP - lastLog=millis(); - d2a: 4b15 ldr r3, [pc, #84] ; (d80 ) - d2c: 6812 ldr r2, [r2, #0] - d2e: 9209 str r2, [sp, #36] ; 0x24 - return ret; - d30: 9a09 ldr r2, [sp, #36] ; 0x24 - d32: 601a str r2, [r3, #0] - } -} - d34: b01b add sp, #108 ; 0x6c - d36: bdf0 pop {r4, r5, r6, r7, pc} - d38: 6d60 ldr r0, [r4, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - d3a: 2800 cmp r0, #0 - d3c: d0e6 beq.n d0c - d3e: a90d add r1, sp, #52 ; 0x34 - d40: f005 f9c0 bl 60c4 - d44: e7e2 b.n d0c - d46: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->sync() : false; - d48: 2800 cmp r0, #0 - d4a: d0ed beq.n d28 - d4c: f004 ff4e bl 5bec - d50: e7ea b.n d28 - return (f) ? f->write((void*)buf, size) : 0; - d52: a90d add r1, sp, #52 ; 0x34 - d54: 4620 mov r0, r4 - d56: 4798 blx r3 - d58: e7d8 b.n d0c - if (f) f->flush(); - d5a: 4618 mov r0, r3 - d5c: 4790 blx r2 - d5e: e7e3 b.n d28 - d60: 1fff872c .word 0x1fff872c - d64: 00017508 .word 0x00017508 - d68: 0001750c .word 0x0001750c - d6c: 1fff8740 .word 0x1fff8740 - d70: 00017518 .word 0x00017518 - d74: 000009ad .word 0x000009ad - d78: 00000971 .word 0x00000971 - d7c: 1fff978c .word 0x1fff978c - d80: 1fff9108 .word 0x1fff9108 - -00000d84 : - virtual ~File() { - d84: b570 push {r4, r5, r6, lr} - if (f) dec_refcount(); - d86: 6905 ldr r5, [r0, #16] - virtual ~File() { - d88: 4b23 ldr r3, [pc, #140] ; (e18 ) - d8a: 6003 str r3, [r0, #0] - d8c: 4604 mov r4, r0 - if (f) dec_refcount(); - d8e: 2d00 cmp r5, #0 - d90: d032 beq.n df8 - size_t write(unsigned int n) { return write((uint8_t)n); } - size_t write(int n) { return write((uint8_t)n); } - using Print::write; -private: - void dec_refcount() { - if (--(f->refcount) == 0) { - d92: 686e ldr r6, [r5, #4] - d94: 3e01 subs r6, #1 - d96: 606e str r6, [r5, #4] - d98: bb76 cbnz r6, df8 - f->close(); - d9a: 682b ldr r3, [r5, #0] - d9c: 4a1f ldr r2, [pc, #124] ; (e1c ) - d9e: 6adb ldr r3, [r3, #44] ; 0x2c - da0: 4293 cmp r3, r2 - da2: d12f bne.n e04 - if (filename) { - da4: 6da8 ldr r0, [r5, #88] ; 0x58 - da6: b110 cbz r0, dae - free(filename); - da8: f00f f98a bl 100c0 - filename = nullptr; - dac: 65ae str r6, [r5, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - dae: 6d2b ldr r3, [r5, #80] ; 0x50 - db0: b323 cbz r3, dfc - sdfatfile.close(); - db2: f105 0018 add.w r0, r5, #24 - db6: f008 fb9f bl 94f8 - delete f; - dba: 6925 ldr r5, [r4, #16] - dbc: b1e5 cbz r5, df8 - dbe: 682b ldr r3, [r5, #0] - dc0: 4a17 ldr r2, [pc, #92] ; (e20 ) - dc2: 685b ldr r3, [r3, #4] - dc4: 4293 cmp r3, r2 - dc6: d124 bne.n e12 - if (filename) { - dc8: 6da8 ldr r0, [r5, #88] ; 0x58 - virtual ~SDFile(void) { - dca: 4b16 ldr r3, [pc, #88] ; (e24 ) - dcc: 602b str r3, [r5, #0] - if (filename) { - dce: b118 cbz r0, dd8 - free(filename); - dd0: f00f f976 bl 100c0 - filename = nullptr; - dd4: 2300 movs r3, #0 - dd6: 65ab str r3, [r5, #88] ; 0x58 - dd8: 6d2b ldr r3, [r5, #80] ; 0x50 - sdfatfile.close(); - dda: f105 0618 add.w r6, r5, #24 - dde: b1a3 cbz r3, e0a - de0: 4630 mov r0, r6 - de2: f008 fb89 bl 94f8 - de6: 4b10 ldr r3, [pc, #64] ; (e28 ) - de8: 60ab str r3, [r5, #8] - ~FsBaseFile() {close();} - dea: 4630 mov r0, r6 - dec: f008 fb84 bl 94f8 - } - df0: 215c movs r1, #92 ; 0x5c - df2: 4628 mov r0, r5 - df4: f00b f972 bl c0dc - } - df8: 4620 mov r0, r4 - dfa: bd70 pop {r4, r5, r6, pc} - bool isOpen() const {return m_fFile || m_xFile;} - dfc: 6d6b ldr r3, [r5, #84] ; 0x54 - dfe: 2b00 cmp r3, #0 - e00: d1d7 bne.n db2 - e02: e7da b.n dba - f->close(); - e04: 4628 mov r0, r5 - e06: 4798 blx r3 - e08: e7d7 b.n dba - e0a: 6d6b ldr r3, [r5, #84] ; 0x54 - e0c: 2b00 cmp r3, #0 - e0e: d1e7 bne.n de0 - e10: e7e9 b.n de6 - delete f; - e12: 4628 mov r0, r5 - e14: 4798 blx r3 - e16: e7ef b.n df8 - e18: 00017b38 .word 0x00017b38 - e1c: 00000475 .word 0x00000475 - e20: 00000b71 .word 0x00000b71 - e24: 00017b64 .word 0x00017b64 - e28: 00017af0 .word 0x00017af0 - -00000e2c : - virtual ~File() { - e2c: b570 push {r4, r5, r6, lr} - if (f) dec_refcount(); - e2e: 6905 ldr r5, [r0, #16] - virtual ~File() { - e30: 4b25 ldr r3, [pc, #148] ; (ec8 ) - e32: 6003 str r3, [r0, #0] - e34: 4604 mov r4, r0 - if (f) dec_refcount(); - e36: 2d00 cmp r5, #0 - e38: d032 beq.n ea0 - if (--(f->refcount) == 0) { - e3a: 686e ldr r6, [r5, #4] - e3c: 3e01 subs r6, #1 - e3e: 606e str r6, [r5, #4] - e40: bb76 cbnz r6, ea0 - f->close(); - e42: 682b ldr r3, [r5, #0] - e44: 4a21 ldr r2, [pc, #132] ; (ecc ) - e46: 6adb ldr r3, [r3, #44] ; 0x2c - e48: 4293 cmp r3, r2 - e4a: d133 bne.n eb4 - if (filename) { - e4c: 6da8 ldr r0, [r5, #88] ; 0x58 - e4e: b110 cbz r0, e56 - free(filename); - e50: f00f f936 bl 100c0 - filename = nullptr; - e54: 65ae str r6, [r5, #88] ; 0x58 - e56: 6d2b ldr r3, [r5, #80] ; 0x50 - e58: b343 cbz r3, eac - sdfatfile.close(); - e5a: f105 0018 add.w r0, r5, #24 - e5e: f008 fb4b bl 94f8 - delete f; - e62: 6925 ldr r5, [r4, #16] - e64: b1e5 cbz r5, ea0 - e66: 682b ldr r3, [r5, #0] - e68: 4a19 ldr r2, [pc, #100] ; (ed0 ) - e6a: 685b ldr r3, [r3, #4] - e6c: 4293 cmp r3, r2 - e6e: d128 bne.n ec2 - if (filename) { - e70: 6da8 ldr r0, [r5, #88] ; 0x58 - virtual ~SDFile(void) { - e72: 4b18 ldr r3, [pc, #96] ; (ed4 ) - e74: 602b str r3, [r5, #0] - if (filename) { - e76: b118 cbz r0, e80 - free(filename); - e78: f00f f922 bl 100c0 - filename = nullptr; - e7c: 2300 movs r3, #0 - e7e: 65ab str r3, [r5, #88] ; 0x58 - e80: 6d2b ldr r3, [r5, #80] ; 0x50 - sdfatfile.close(); - e82: f105 0618 add.w r6, r5, #24 - e86: b1c3 cbz r3, eba - e88: 4630 mov r0, r6 - e8a: f008 fb35 bl 94f8 - e8e: 4b12 ldr r3, [pc, #72] ; (ed8 ) - e90: 60ab str r3, [r5, #8] - ~FsBaseFile() {close();} - e92: 4630 mov r0, r6 - e94: f008 fb30 bl 94f8 - } - e98: 215c movs r1, #92 ; 0x5c - e9a: 4628 mov r0, r5 - e9c: f00b f91e bl c0dc - } - ea0: 4620 mov r0, r4 - ea2: 2114 movs r1, #20 - ea4: f00b f91a bl c0dc - ea8: 4620 mov r0, r4 - eaa: bd70 pop {r4, r5, r6, pc} - bool isOpen() const {return m_fFile || m_xFile;} - eac: 6d6b ldr r3, [r5, #84] ; 0x54 - eae: 2b00 cmp r3, #0 - eb0: d1d3 bne.n e5a - eb2: e7d6 b.n e62 - f->close(); - eb4: 4628 mov r0, r5 - eb6: 4798 blx r3 - eb8: e7d3 b.n e62 - eba: 6d6b ldr r3, [r5, #84] ; 0x54 - ebc: 2b00 cmp r3, #0 - ebe: d1e3 bne.n e88 - ec0: e7e5 b.n e8e - delete f; - ec2: 4628 mov r0, r5 - ec4: 4798 blx r3 - ec6: e7eb b.n ea0 - ec8: 00017b38 .word 0x00017b38 - ecc: 00000475 .word 0x00000475 - ed0: 00000b71 .word 0x00000b71 - ed4: 00017b64 .word 0x00017b64 - ed8: 00017af0 .word 0x00017af0 - -00000edc : -{ - edc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - File dataFile = SD.open(eventLogName, FILE_WRITE); - ee0: 4b55 ldr r3, [pc, #340] ; (1038 ) - bool begin(uint8_t csPin = 10); - File open(const char *filepath, uint8_t mode = FILE_READ) { - oflag_t flags = O_READ; - if (mode == FILE_WRITE) flags = O_RDWR | O_CREAT | O_AT_END; - else if (mode == FILE_WRITE_BEGIN) flags = O_RDWR | O_CREAT; - SDFAT_FILE file = sdfs.open(filepath, flags); - ee2: 4956 ldr r1, [pc, #344] ; (103c ) - ee4: 681a ldr r2, [r3, #0] -{ - ee6: b09a sub sp, #104 ; 0x68 - ee8: f244 2302 movw r3, #16898 ; 0x4202 - eec: 4606 mov r6, r0 - eee: a806 add r0, sp, #24 - ef0: f008 fc1e bl 9730 - ef4: 9b18 ldr r3, [sp, #96] ; 0x60 - ef6: 2b00 cmp r3, #0 - ef8: d07b beq.n ff2 - if (file) return File(new SDFile(file)); - efa: 205c movs r0, #92 ; 0x5c - efc: f00b f8ec bl c0d8 - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - f00: 4b4f ldr r3, [pc, #316] ; (1040 ) -class FileImpl { - f02: 2500 movs r5, #0 - f04: e9c0 3500 strd r3, r5, [r0] -class Print - f08: 9b07 ldr r3, [sp, #28] - f0a: 60c3 str r3, [r0, #12] -class Stream : public Print - f0c: 4b4d ldr r3, [pc, #308] ; (1044 ) - f0e: 6083 str r3, [r0, #8] - f10: 9b08 ldr r3, [sp, #32] - f12: 6103 str r3, [r0, #16] - f14: af0a add r7, sp, #40 ; 0x28 - f16: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 - f1a: 7503 strb r3, [r0, #20] - if (file) return File(new SDFile(file)); - f1c: 4604 mov r4, r0 - f1e: 4639 mov r1, r7 - f20: 3018 adds r0, #24 - f22: f008 fabb bl 949c -class FsFile : public StreamFile { - f26: 4b48 ldr r3, [pc, #288] ; (1048 ) - f28: 60a3 str r3, [r4, #8] - constexpr Stream() : _timeout(1000), read_error(0) {} - f2a: f44f 737a mov.w r3, #1000 ; 0x3e8 - f2e: 9303 str r3, [sp, #12] - if (f) f->refcount++; - f30: 6863 ldr r3, [r4, #4] - File(FileImpl *file) { - f32: 4a46 ldr r2, [pc, #280] ; (104c ) - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - f34: 65a5 str r5, [r4, #88] ; 0x58 - if (f) f->refcount++; - f36: 3301 adds r3, #1 - constexpr Print() : write_error(0) {} - f38: 9502 str r5, [sp, #8] - File(FileImpl *file) { - f3a: 9201 str r2, [sp, #4] - f3c: f88d 5010 strb.w r5, [sp, #16] - f = file; - f40: 9405 str r4, [sp, #20] - if (f) f->refcount++; - f42: 6063 str r3, [r4, #4] - f44: f8df 8108 ldr.w r8, [pc, #264] ; 1050 - f48: f8cd 8018 str.w r8, [sp, #24] - ~FsBaseFile() {close();} - f4c: 4638 mov r0, r7 - f4e: f008 fad3 bl 94f8 - dataFile.print(s); - f52: 4631 mov r1, r6 - f54: a801 add r0, sp, #4 - f56: f00a fcfd bl b954 - if (f) { - f5a: 9c05 ldr r4, [sp, #20] - f5c: 2c00 cmp r4, #0 - f5e: d045 beq.n fec - f->close(); - f60: 6823 ldr r3, [r4, #0] - f62: 4e3c ldr r6, [pc, #240] ; (1054 ) - f64: 6adb ldr r3, [r3, #44] ; 0x2c - f66: 42b3 cmp r3, r6 - f68: d159 bne.n 101e - if (filename) { - f6a: 6da0 ldr r0, [r4, #88] ; 0x58 - f6c: b118 cbz r0, f76 - free(filename); - f6e: f00f f8a7 bl 100c0 - filename = nullptr; - f72: 2300 movs r3, #0 - f74: 65a3 str r3, [r4, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - f76: 6d23 ldr r3, [r4, #80] ; 0x50 - f78: 2b00 cmp r3, #0 - f7a: d048 beq.n 100e - sdfatfile.close(); - f7c: f104 0018 add.w r0, r4, #24 - f80: f008 faba bl 94f8 - if (--(f->refcount) == 0) { - f84: 9d05 ldr r5, [sp, #20] - f86: 686c ldr r4, [r5, #4] - f88: 3c01 subs r4, #1 - f8a: 606c str r4, [r5, #4] - f8c: bb74 cbnz r4, fec - f->close(); - f8e: 682b ldr r3, [r5, #0] - f90: 6adb ldr r3, [r3, #44] ; 0x2c - f92: 42b3 cmp r3, r6 - f94: d146 bne.n 1024 - if (filename) { - f96: 6da8 ldr r0, [r5, #88] ; 0x58 - f98: b110 cbz r0, fa0 - free(filename); - f9a: f00f f891 bl 100c0 - filename = nullptr; - f9e: 65ac str r4, [r5, #88] ; 0x58 - fa0: 6d2b ldr r3, [r5, #80] ; 0x50 - fa2: 2b00 cmp r3, #0 - fa4: d037 beq.n 1016 - sdfatfile.close(); - fa6: f105 0018 add.w r0, r5, #24 - faa: f008 faa5 bl 94f8 - delete f; - fae: 9c05 ldr r4, [sp, #20] - fb0: b1e4 cbz r4, fec - fb2: 6823 ldr r3, [r4, #0] - fb4: 4a28 ldr r2, [pc, #160] ; (1058 ) - fb6: 685b ldr r3, [r3, #4] - fb8: 4293 cmp r3, r2 - fba: d13a bne.n 1032 - if (filename) { - fbc: 6da0 ldr r0, [r4, #88] ; 0x58 - virtual ~SDFile(void) { - fbe: 4b20 ldr r3, [pc, #128] ; (1040 ) - fc0: 6023 str r3, [r4, #0] - if (filename) { - fc2: b118 cbz r0, fcc - free(filename); - fc4: f00f f87c bl 100c0 - filename = nullptr; - fc8: 2300 movs r3, #0 - fca: 65a3 str r3, [r4, #88] ; 0x58 - fcc: 6d23 ldr r3, [r4, #80] ; 0x50 - sdfatfile.close(); - fce: f104 0518 add.w r5, r4, #24 - fd2: b353 cbz r3, 102a - fd4: 4628 mov r0, r5 - fd6: f008 fa8f bl 94f8 - fda: f8c4 8008 str.w r8, [r4, #8] - ~FsBaseFile() {close();} - fde: 4628 mov r0, r5 - fe0: f008 fa8a bl 94f8 - } - fe4: 215c movs r1, #92 ; 0x5c - fe6: 4620 mov r0, r4 - fe8: f00b f878 bl c0dc -} - fec: b01a add sp, #104 ; 0x68 - fee: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - bool isOpen() const {return m_fFile || m_xFile;} - ff2: 9b19 ldr r3, [sp, #100] ; 0x64 - ff4: 2b00 cmp r3, #0 - ff6: d180 bne.n efa - constexpr File() : f(nullptr) { } - ff8: 4a14 ldr r2, [pc, #80] ; (104c ) - ffa: 9302 str r3, [sp, #8] - ffc: f44f 717a mov.w r1, #1000 ; 0x3e8 - 1000: 9103 str r1, [sp, #12] - 1002: f88d 3010 strb.w r3, [sp, #16] - 1006: 9201 str r2, [sp, #4] - 1008: 9305 str r3, [sp, #20] - 100a: af0a add r7, sp, #40 ; 0x28 - 100c: e79a b.n f44 - 100e: 6d63 ldr r3, [r4, #84] ; 0x54 - 1010: 2b00 cmp r3, #0 - 1012: d1b3 bne.n f7c - 1014: e7b6 b.n f84 - 1016: 6d6b ldr r3, [r5, #84] ; 0x54 - 1018: 2b00 cmp r3, #0 - 101a: d1c4 bne.n fa6 - 101c: e7c7 b.n fae - f->close(); - 101e: 4620 mov r0, r4 - 1020: 4798 blx r3 - 1022: e7af b.n f84 - f->close(); - 1024: 4628 mov r0, r5 - 1026: 4798 blx r3 - 1028: e7c1 b.n fae - 102a: 6d63 ldr r3, [r4, #84] ; 0x54 - 102c: 2b00 cmp r3, #0 - 102e: d1d1 bne.n fd4 - 1030: e7d3 b.n fda - delete f; - 1032: 4620 mov r0, r4 - 1034: 4798 blx r3 - 1036: e7d9 b.n fec - 1038: 1fff8728 .word 0x1fff8728 - 103c: 1fff92a4 .word 0x1fff92a4 - 1040: 00017b64 .word 0x00017b64 - 1044: 00017acc .word 0x00017acc - 1048: 00017b14 .word 0x00017b14 - 104c: 00017b38 .word 0x00017b38 - 1050: 00017af0 .word 0x00017af0 - 1054: 00000475 .word 0x00000475 - 1058: 00000b71 .word 0x00000b71 - -0000105c : -{ - 105c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - File dataFile = SD.open(eventLogName, FILE_WRITE); - 1060: 4b57 ldr r3, [pc, #348] ; (11c0 ) - SDFAT_FILE file = sdfs.open(filepath, flags); - 1062: 4958 ldr r1, [pc, #352] ; (11c4 ) - 1064: 681a ldr r2, [r3, #0] -{ - 1066: b09a sub sp, #104 ; 0x68 - 1068: f244 2302 movw r3, #16898 ; 0x4202 - 106c: 4606 mov r6, r0 - 106e: a806 add r0, sp, #24 - 1070: f008 fb5e bl 9730 - 1074: 9b18 ldr r3, [sp, #96] ; 0x60 - 1076: 2b00 cmp r3, #0 - 1078: d07e beq.n 1178 - if (file) return File(new SDFile(file)); - 107a: 205c movs r0, #92 ; 0x5c - 107c: f00b f82c bl c0d8 - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 1080: 4b51 ldr r3, [pc, #324] ; (11c8 ) -class FileImpl { - 1082: 2500 movs r5, #0 - 1084: e9c0 3500 strd r3, r5, [r0] -class Print - 1088: 9b07 ldr r3, [sp, #28] - 108a: 60c3 str r3, [r0, #12] -class Stream : public Print - 108c: 4b4f ldr r3, [pc, #316] ; (11cc ) - 108e: 6083 str r3, [r0, #8] - 1090: 9b08 ldr r3, [sp, #32] - 1092: 6103 str r3, [r0, #16] - 1094: af0a add r7, sp, #40 ; 0x28 - 1096: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 - 109a: 7503 strb r3, [r0, #20] - if (file) return File(new SDFile(file)); - 109c: 4604 mov r4, r0 - 109e: 4639 mov r1, r7 - 10a0: 3018 adds r0, #24 - 10a2: f008 f9fb bl 949c -class FsFile : public StreamFile { - 10a6: 4b4a ldr r3, [pc, #296] ; (11d0 ) - 10a8: 60a3 str r3, [r4, #8] - constexpr Stream() : _timeout(1000), read_error(0) {} - 10aa: f44f 737a mov.w r3, #1000 ; 0x3e8 - 10ae: 9303 str r3, [sp, #12] - if (f) f->refcount++; - 10b0: 6863 ldr r3, [r4, #4] - File(FileImpl *file) { - 10b2: 4a48 ldr r2, [pc, #288] ; (11d4 ) - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 10b4: 65a5 str r5, [r4, #88] ; 0x58 - if (f) f->refcount++; - 10b6: 3301 adds r3, #1 - constexpr Print() : write_error(0) {} - 10b8: 9502 str r5, [sp, #8] - File(FileImpl *file) { - 10ba: 9201 str r2, [sp, #4] - 10bc: f88d 5010 strb.w r5, [sp, #16] - f = file; - 10c0: 9405 str r4, [sp, #20] - if (f) f->refcount++; - 10c2: 6063 str r3, [r4, #4] - 10c4: f8df 8110 ldr.w r8, [pc, #272] ; 11d8 - 10c8: f8cd 8018 str.w r8, [sp, #24] - ~FsBaseFile() {close();} - 10cc: 4638 mov r0, r7 - 10ce: f008 fa13 bl 94f8 - size_t println(const String &s) { return print(s) + println(); } - 10d2: 4631 mov r1, r6 - 10d4: a801 add r0, sp, #4 - 10d6: f00a fc3d bl b954 - 10da: a801 add r0, sp, #4 - 10dc: f00a fc68 bl b9b0 - if (f) { - 10e0: 9c05 ldr r4, [sp, #20] - 10e2: 2c00 cmp r4, #0 - 10e4: d045 beq.n 1172 - f->close(); - 10e6: 6823 ldr r3, [r4, #0] - 10e8: 4e3c ldr r6, [pc, #240] ; (11dc ) - 10ea: 6adb ldr r3, [r3, #44] ; 0x2c - 10ec: 42b3 cmp r3, r6 - 10ee: d15a bne.n 11a6 - if (filename) { - 10f0: 6da0 ldr r0, [r4, #88] ; 0x58 - 10f2: b118 cbz r0, 10fc - free(filename); - 10f4: f00e ffe4 bl 100c0 - filename = nullptr; - 10f8: 2300 movs r3, #0 - 10fa: 65a3 str r3, [r4, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - 10fc: 6d23 ldr r3, [r4, #80] ; 0x50 - 10fe: 2b00 cmp r3, #0 - 1100: d049 beq.n 1196 - sdfatfile.close(); - 1102: f104 0018 add.w r0, r4, #24 - 1106: f008 f9f7 bl 94f8 - if (--(f->refcount) == 0) { - 110a: 9d05 ldr r5, [sp, #20] - 110c: 686c ldr r4, [r5, #4] - 110e: 3c01 subs r4, #1 - 1110: 606c str r4, [r5, #4] - 1112: bb74 cbnz r4, 1172 - f->close(); - 1114: 682b ldr r3, [r5, #0] - 1116: 6adb ldr r3, [r3, #44] ; 0x2c - 1118: 42b3 cmp r3, r6 - 111a: d147 bne.n 11ac - if (filename) { - 111c: 6da8 ldr r0, [r5, #88] ; 0x58 - 111e: b110 cbz r0, 1126 - free(filename); - 1120: f00e ffce bl 100c0 - filename = nullptr; - 1124: 65ac str r4, [r5, #88] ; 0x58 - 1126: 6d2b ldr r3, [r5, #80] ; 0x50 - 1128: 2b00 cmp r3, #0 - 112a: d038 beq.n 119e - sdfatfile.close(); - 112c: f105 0018 add.w r0, r5, #24 - 1130: f008 f9e2 bl 94f8 - delete f; - 1134: 9c05 ldr r4, [sp, #20] - 1136: b1e4 cbz r4, 1172 - 1138: 6823 ldr r3, [r4, #0] - 113a: 4a29 ldr r2, [pc, #164] ; (11e0 ) - 113c: 685b ldr r3, [r3, #4] - 113e: 4293 cmp r3, r2 - 1140: d13b bne.n 11ba - if (filename) { - 1142: 6da0 ldr r0, [r4, #88] ; 0x58 - virtual ~SDFile(void) { - 1144: 4b20 ldr r3, [pc, #128] ; (11c8 ) - 1146: 6023 str r3, [r4, #0] - if (filename) { - 1148: b118 cbz r0, 1152 - free(filename); - 114a: f00e ffb9 bl 100c0 - filename = nullptr; - 114e: 2300 movs r3, #0 - 1150: 65a3 str r3, [r4, #88] ; 0x58 - 1152: 6d23 ldr r3, [r4, #80] ; 0x50 - sdfatfile.close(); - 1154: f104 0518 add.w r5, r4, #24 - 1158: b35b cbz r3, 11b2 - 115a: 4628 mov r0, r5 - 115c: f008 f9cc bl 94f8 - 1160: f8c4 8008 str.w r8, [r4, #8] - ~FsBaseFile() {close();} - 1164: 4628 mov r0, r5 - 1166: f008 f9c7 bl 94f8 - } - 116a: 215c movs r1, #92 ; 0x5c - 116c: 4620 mov r0, r4 - 116e: f00a ffb5 bl c0dc -} - 1172: b01a add sp, #104 ; 0x68 - 1174: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - bool isOpen() const {return m_fFile || m_xFile;} - 1178: 9b19 ldr r3, [sp, #100] ; 0x64 - 117a: 2b00 cmp r3, #0 - 117c: f47f af7d bne.w 107a - constexpr File() : f(nullptr) { } - 1180: 4a14 ldr r2, [pc, #80] ; (11d4 ) - constexpr Print() : write_error(0) {} - 1182: 9302 str r3, [sp, #8] - 1184: f44f 717a mov.w r1, #1000 ; 0x3e8 - 1188: 9103 str r1, [sp, #12] - 118a: f88d 3010 strb.w r3, [sp, #16] - 118e: 9201 str r2, [sp, #4] - 1190: 9305 str r3, [sp, #20] - 1192: af0a add r7, sp, #40 ; 0x28 - 1194: e796 b.n 10c4 - 1196: 6d63 ldr r3, [r4, #84] ; 0x54 - 1198: 2b00 cmp r3, #0 - 119a: d1b2 bne.n 1102 - 119c: e7b5 b.n 110a - 119e: 6d6b ldr r3, [r5, #84] ; 0x54 - 11a0: 2b00 cmp r3, #0 - 11a2: d1c3 bne.n 112c - 11a4: e7c6 b.n 1134 - f->close(); - 11a6: 4620 mov r0, r4 - 11a8: 4798 blx r3 - 11aa: e7ae b.n 110a - f->close(); - 11ac: 4628 mov r0, r5 - 11ae: 4798 blx r3 - 11b0: e7c0 b.n 1134 - 11b2: 6d63 ldr r3, [r4, #84] ; 0x54 - 11b4: 2b00 cmp r3, #0 - 11b6: d1d0 bne.n 115a - 11b8: e7d2 b.n 1160 - delete f; - 11ba: 4620 mov r0, r4 - 11bc: 4798 blx r3 - 11be: e7d8 b.n 1172 - 11c0: 1fff8728 .word 0x1fff8728 - 11c4: 1fff92a4 .word 0x1fff92a4 - 11c8: 00017b64 .word 0x00017b64 - 11cc: 00017acc .word 0x00017acc - 11d0: 00017b14 .word 0x00017b14 - 11d4: 00017b38 .word 0x00017b38 - 11d8: 00017af0 .word 0x00017af0 - 11dc: 00000475 .word 0x00000475 - 11e0: 00000b71 .word 0x00000b71 - -000011e4 : -{ - 11e4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - File dataFile = SD.open(eventLogName, FILE_WRITE); - 11e8: 4b57 ldr r3, [pc, #348] ; (1348 ) - SDFAT_FILE file = sdfs.open(filepath, flags); - 11ea: 4958 ldr r1, [pc, #352] ; (134c ) - 11ec: 681a ldr r2, [r3, #0] -{ - 11ee: b09a sub sp, #104 ; 0x68 - 11f0: f244 2302 movw r3, #16898 ; 0x4202 - 11f4: 4606 mov r6, r0 - 11f6: a806 add r0, sp, #24 - 11f8: f008 fa9a bl 9730 - 11fc: 9b18 ldr r3, [sp, #96] ; 0x60 - 11fe: 2b00 cmp r3, #0 - 1200: d07e beq.n 1300 - if (file) return File(new SDFile(file)); - 1202: 205c movs r0, #92 ; 0x5c - 1204: f00a ff68 bl c0d8 - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 1208: 4b51 ldr r3, [pc, #324] ; (1350 ) -class FileImpl { - 120a: 2500 movs r5, #0 - 120c: e9c0 3500 strd r3, r5, [r0] -class Print - 1210: 9b07 ldr r3, [sp, #28] - 1212: 60c3 str r3, [r0, #12] -class Stream : public Print - 1214: 4b4f ldr r3, [pc, #316] ; (1354 ) - 1216: 6083 str r3, [r0, #8] - 1218: 9b08 ldr r3, [sp, #32] - 121a: 6103 str r3, [r0, #16] - 121c: af0a add r7, sp, #40 ; 0x28 - 121e: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 - 1222: 7503 strb r3, [r0, #20] - if (file) return File(new SDFile(file)); - 1224: 4604 mov r4, r0 - 1226: 4639 mov r1, r7 - 1228: 3018 adds r0, #24 - 122a: f008 f937 bl 949c -class FsFile : public StreamFile { - 122e: 4b4a ldr r3, [pc, #296] ; (1358 ) - 1230: 60a3 str r3, [r4, #8] - constexpr Stream() : _timeout(1000), read_error(0) {} - 1232: f44f 737a mov.w r3, #1000 ; 0x3e8 - 1236: 9303 str r3, [sp, #12] - if (f) f->refcount++; - 1238: 6863 ldr r3, [r4, #4] - File(FileImpl *file) { - 123a: 4a48 ldr r2, [pc, #288] ; (135c ) - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 123c: 65a5 str r5, [r4, #88] ; 0x58 - if (f) f->refcount++; - 123e: 3301 adds r3, #1 - constexpr Print() : write_error(0) {} - 1240: 9502 str r5, [sp, #8] - File(FileImpl *file) { - 1242: 9201 str r2, [sp, #4] - 1244: f88d 5010 strb.w r5, [sp, #16] - f = file; - 1248: 9405 str r4, [sp, #20] - if (f) f->refcount++; - 124a: 6063 str r3, [r4, #4] - 124c: f8df 8110 ldr.w r8, [pc, #272] ; 1360 - 1250: f8cd 8018 str.w r8, [sp, #24] - ~FsBaseFile() {close();} - 1254: 4638 mov r0, r7 - 1256: f008 f94f bl 94f8 - size_t print(int n) { return print((long)n); } - 125a: 4631 mov r1, r6 - 125c: a801 add r0, sp, #4 - 125e: f00a fb9f bl b9a0 - size_t println(const __FlashStringHelper *f) { return print(f) + println(); } - - size_t println(uint8_t b) { return print(b) + println(); } - size_t println(int n) { return print(n) + println(); } - 1262: a801 add r0, sp, #4 - 1264: f00a fba4 bl b9b0 - if (f) { - 1268: 9c05 ldr r4, [sp, #20] - 126a: 2c00 cmp r4, #0 - 126c: d045 beq.n 12fa - f->close(); - 126e: 6823 ldr r3, [r4, #0] - 1270: 4e3c ldr r6, [pc, #240] ; (1364 ) - 1272: 6adb ldr r3, [r3, #44] ; 0x2c - 1274: 42b3 cmp r3, r6 - 1276: d15a bne.n 132e - if (filename) { - 1278: 6da0 ldr r0, [r4, #88] ; 0x58 - 127a: b118 cbz r0, 1284 - free(filename); - 127c: f00e ff20 bl 100c0 - filename = nullptr; - 1280: 2300 movs r3, #0 - 1282: 65a3 str r3, [r4, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - 1284: 6d23 ldr r3, [r4, #80] ; 0x50 - 1286: 2b00 cmp r3, #0 - 1288: d049 beq.n 131e - sdfatfile.close(); - 128a: f104 0018 add.w r0, r4, #24 - 128e: f008 f933 bl 94f8 - if (--(f->refcount) == 0) { - 1292: 9d05 ldr r5, [sp, #20] - 1294: 686c ldr r4, [r5, #4] - 1296: 3c01 subs r4, #1 - 1298: 606c str r4, [r5, #4] - 129a: bb74 cbnz r4, 12fa - f->close(); - 129c: 682b ldr r3, [r5, #0] - 129e: 6adb ldr r3, [r3, #44] ; 0x2c - 12a0: 42b3 cmp r3, r6 - 12a2: d147 bne.n 1334 - if (filename) { - 12a4: 6da8 ldr r0, [r5, #88] ; 0x58 - 12a6: b110 cbz r0, 12ae - free(filename); - 12a8: f00e ff0a bl 100c0 - filename = nullptr; - 12ac: 65ac str r4, [r5, #88] ; 0x58 - 12ae: 6d2b ldr r3, [r5, #80] ; 0x50 - 12b0: 2b00 cmp r3, #0 - 12b2: d038 beq.n 1326 - sdfatfile.close(); - 12b4: f105 0018 add.w r0, r5, #24 - 12b8: f008 f91e bl 94f8 - delete f; - 12bc: 9c05 ldr r4, [sp, #20] - 12be: b1e4 cbz r4, 12fa - 12c0: 6823 ldr r3, [r4, #0] - 12c2: 4a29 ldr r2, [pc, #164] ; (1368 ) - 12c4: 685b ldr r3, [r3, #4] - 12c6: 4293 cmp r3, r2 - 12c8: d13b bne.n 1342 - if (filename) { - 12ca: 6da0 ldr r0, [r4, #88] ; 0x58 - virtual ~SDFile(void) { - 12cc: 4b20 ldr r3, [pc, #128] ; (1350 ) - 12ce: 6023 str r3, [r4, #0] - if (filename) { - 12d0: b118 cbz r0, 12da - free(filename); - 12d2: f00e fef5 bl 100c0 - filename = nullptr; - 12d6: 2300 movs r3, #0 - 12d8: 65a3 str r3, [r4, #88] ; 0x58 - 12da: 6d23 ldr r3, [r4, #80] ; 0x50 - sdfatfile.close(); - 12dc: f104 0518 add.w r5, r4, #24 - 12e0: b35b cbz r3, 133a - 12e2: 4628 mov r0, r5 - 12e4: f008 f908 bl 94f8 - 12e8: f8c4 8008 str.w r8, [r4, #8] - ~FsBaseFile() {close();} - 12ec: 4628 mov r0, r5 - 12ee: f008 f903 bl 94f8 - } - 12f2: 215c movs r1, #92 ; 0x5c - 12f4: 4620 mov r0, r4 - 12f6: f00a fef1 bl c0dc -} - 12fa: b01a add sp, #104 ; 0x68 - 12fc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - bool isOpen() const {return m_fFile || m_xFile;} - 1300: 9b19 ldr r3, [sp, #100] ; 0x64 - 1302: 2b00 cmp r3, #0 - 1304: f47f af7d bne.w 1202 - constexpr File() : f(nullptr) { } - 1308: 4a14 ldr r2, [pc, #80] ; (135c ) - constexpr Print() : write_error(0) {} - 130a: 9302 str r3, [sp, #8] - 130c: f44f 717a mov.w r1, #1000 ; 0x3e8 - 1310: 9103 str r1, [sp, #12] - 1312: f88d 3010 strb.w r3, [sp, #16] - 1316: 9201 str r2, [sp, #4] - 1318: 9305 str r3, [sp, #20] - 131a: af0a add r7, sp, #40 ; 0x28 - 131c: e796 b.n 124c - 131e: 6d63 ldr r3, [r4, #84] ; 0x54 - 1320: 2b00 cmp r3, #0 - 1322: d1b2 bne.n 128a - 1324: e7b5 b.n 1292 - 1326: 6d6b ldr r3, [r5, #84] ; 0x54 - 1328: 2b00 cmp r3, #0 - 132a: d1c3 bne.n 12b4 - 132c: e7c6 b.n 12bc - f->close(); - 132e: 4620 mov r0, r4 - 1330: 4798 blx r3 - 1332: e7ae b.n 1292 - f->close(); - 1334: 4628 mov r0, r5 - 1336: 4798 blx r3 - 1338: e7c0 b.n 12bc - 133a: 6d63 ldr r3, [r4, #84] ; 0x54 - 133c: 2b00 cmp r3, #0 - 133e: d1d0 bne.n 12e2 - 1340: e7d2 b.n 12e8 - delete f; - 1342: 4620 mov r0, r4 - 1344: 4798 blx r3 - 1346: e7d8 b.n 12fa - 1348: 1fff8728 .word 0x1fff8728 - 134c: 1fff92a4 .word 0x1fff92a4 - 1350: 00017b64 .word 0x00017b64 - 1354: 00017acc .word 0x00017acc - 1358: 00017b14 .word 0x00017b14 - 135c: 00017b38 .word 0x00017b38 - 1360: 00017af0 .word 0x00017af0 - 1364: 00000475 .word 0x00000475 - 1368: 00000b71 .word 0x00000b71 - -0000136c : - - -// -----------------------------------------TX/RX Methods------------------------------------------ - -//Transmit -bool xbeeSend(uint32_t TargetSL,uint8_t* payload){ - 136c: b510 push {r4, lr} - 136e: b08a sub sp, #40 ; 0x28 - 1370: 4602 mov r2, r0 - 1372: 460c mov r4, r1 - XBeeAddress64 TargetAddress = XBeeAddress64(UniSH,TargetSL); - 1374: a801 add r0, sp, #4 - 1376: 492c ldr r1, [pc, #176] ; (1428 ) - 1378: f002 fa3c bl 37f4 - ZBTxRequest zbTx = ZBTxRequest(TargetAddress, payload, xbeeSendBufSize); //Assembles Packet - 137c: 2322 movs r3, #34 ; 0x22 - 137e: 4622 mov r2, r4 - 1380: a901 add r1, sp, #4 - 1382: a803 add r0, sp, #12 - 1384: f002 fa3c bl 3800 - xbee.send(zbTx); //Sends packet - 1388: 4828 ldr r0, [pc, #160] ; (142c ) - 138a: a903 add r1, sp, #12 - 138c: f002 fa76 bl 387c - memset(xbeeSendBuf, 0, xbeeSendBufSize); //Clear tx_buf - 1390: 2222 movs r2, #34 ; 0x22 - 1392: 2100 movs r1, #0 - 1394: 4826 ldr r0, [pc, #152] ; (1430 ) - 1396: f00f feed bl 11174 - if (xbee.readPacket(50)) { //Checks Reception for 50ms - 139a: 4824 ldr r0, [pc, #144] ; (142c ) - 139c: 2132 movs r1, #50 ; 0x32 - 139e: f002 fa0d bl 37bc - 13a2: 4604 mov r4, r0 - 13a4: b150 cbz r0, 13bc - if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) { - 13a6: 4821 ldr r0, [pc, #132] ; (142c ) - 13a8: f002 f97c bl 36a4 - 13ac: f002 f8fe bl 35ac - 13b0: 288b cmp r0, #139 ; 0x8b - 13b2: d01f beq.n 13f4 - if (txStatus.getDeliveryStatus() == SUCCESS) { - Serial.println("GoodTx");//Received ACK - return true; - } else { - Serial.println("TxFail");//Missing ACK - return false; - 13b4: 2400 movs r4, #0 - } else if (xbee.getResponse().isError()) { - Serial.print("PckErr"); - Serial.println(xbee.getResponse().getErrorCode()); - } - return false; -} - 13b6: 4620 mov r0, r4 - 13b8: b00a add sp, #40 ; 0x28 - 13ba: bd10 pop {r4, pc} - } else if (xbee.getResponse().isError()) { - 13bc: 481b ldr r0, [pc, #108] ; (142c ) - 13be: f002 f971 bl 36a4 - 13c2: f002 f8f7 bl 35b4 - 13c6: 2800 cmp r0, #0 - 13c8: d0f4 beq.n 13b4 - virtual int read() { return usb_serial_getchar(); } - virtual int peek() { return usb_serial_peekchar(); } - virtual void flush() { usb_serial_flush_output(); } // TODO: actually wait for data to leave USB... - virtual void clear(void) { usb_serial_flush_input(); } - virtual size_t write(uint8_t c) { return usb_serial_putchar(c); } - virtual size_t write(const uint8_t *buffer, size_t size) { return usb_serial_write(buffer, size); } - 13ca: 2106 movs r1, #6 - 13cc: 4819 ldr r0, [pc, #100] ; (1434 ) - 13ce: f00d fc0b bl ebe8 - Serial.println(xbee.getResponse().getErrorCode()); - 13d2: 4816 ldr r0, [pc, #88] ; (142c ) - 13d4: f002 f966 bl 36a4 - 13d8: f002 f8f2 bl 35c0 - size_t print(uint8_t b) { return printNumber(b, 10, 0); } - 13dc: 4623 mov r3, r4 - 13de: 4601 mov r1, r0 - 13e0: 220a movs r2, #10 - 13e2: 4815 ldr r0, [pc, #84] ; (1438 ) - 13e4: f00a fafc bl b9e0 - size_t println(uint8_t b) { return print(b) + println(); } - 13e8: 4813 ldr r0, [pc, #76] ; (1438 ) - 13ea: f00a fae1 bl b9b0 -} - 13ee: 4620 mov r0, r4 - 13f0: b00a add sp, #40 ; 0x28 - 13f2: bd10 pop {r4, pc} - xbee.getResponse().getZBTxStatusResponse(txStatus); - 13f4: 480d ldr r0, [pc, #52] ; (142c ) - 13f6: f002 f955 bl 36a4 - 13fa: 4910 ldr r1, [pc, #64] ; (143c ) - 13fc: f002 f8e8 bl 35d0 - if (txStatus.getDeliveryStatus() == SUCCESS) { - 1400: 480e ldr r0, [pc, #56] ; (143c ) - 1402: f002 f8e1 bl 35c8 - 1406: 2106 movs r1, #6 - 1408: b930 cbnz r0, 1418 - 140a: 480d ldr r0, [pc, #52] ; (1440 ) - 140c: f00d fbec bl ebe8 - size_t println(const char s[]) { return print(s) + println(); } - 1410: 4809 ldr r0, [pc, #36] ; (1438 ) - 1412: f00a facd bl b9b0 - 1416: e7ce b.n 13b6 - 1418: 480a ldr r0, [pc, #40] ; (1444 ) - 141a: f00d fbe5 bl ebe8 - 141e: 4806 ldr r0, [pc, #24] ; (1438 ) - 1420: f00a fac6 bl b9b0 - 1424: e7c6 b.n 13b4 - 1426: bf00 nop - 1428: 0013a200 .word 0x0013a200 - 142c: 1fff91bc .word 0x1fff91bc - 1430: 1fff9274 .word 0x1fff9274 - 1434: 0001753c .word 0x0001753c - 1438: 1fff8844 .word 0x1fff8844 - 143c: 1fff91b0 .word 0x1fff91b0 - 1440: 0001752c .word 0x0001752c - 1444: 00017534 .word 0x00017534 - -00001448 : -// ex. Commands are locked to specific senders, so while command might be able to send a trigger, a secondary could not -// -// Without a proper naming scheme, the current XBee's are named Bits, Ground, Blue and Wire - -//----------------------Ground Messages---------------------- -void processGroundMessage(){ - 1448: b500 push {lr} - 144a: 2109 movs r1, #9 - 144c: b085 sub sp, #20 - 144e: 483c ldr r0, [pc, #240] ; (1540 ) - 1450: f00d fbca bl ebe8 - 1454: 483b ldr r0, [pc, #236] ; (1544 ) - 1456: f00a faab bl b9b0 - - OutputSerial.println("RecGround");//DEBUG - - //Ping Pong Test - if(strstr((char*)xbeeRecBuf,"ping")){ //Received "ping", attempt to "pong" - 145a: 493b ldr r1, [pc, #236] ; (1548 ) - 145c: 483b ldr r0, [pc, #236] ; (154c ) - 145e: f010 f9a3 bl 117a8 - 1462: b308 cbz r0, 14a8 - 1464: 210e movs r1, #14 - 1466: 483a ldr r0, [pc, #232] ; (1550 ) - 1468: f00d fbbe bl ebe8 - 146c: 4835 ldr r0, [pc, #212] ; (1544 ) - 146e: f00a fa9f bl b9b0 - OutputSerial.println("groundPingPong"); - logprintln("groundPingPong"); - 1472: 4937 ldr r1, [pc, #220] ; (1550 ) - 1474: a801 add r0, sp, #4 - 1476: f00a fb73 bl bb60 - 147a: a801 add r0, sp, #4 - 147c: f7ff fdee bl 105c - 1480: a801 add r0, sp, #4 - 1482: f00a fba7 bl bbd4 - String("pong").getBytes(xbeeSendBuf,xbeeSendBufSize); - 1486: 4933 ldr r1, [pc, #204] ; (1554 ) - 1488: a801 add r0, sp, #4 - 148a: f00a fb69 bl bb60 - 148e: 4932 ldr r1, [pc, #200] ; (1558 ) - 1490: 2300 movs r3, #0 - 1492: 2222 movs r2, #34 ; 0x22 - 1494: a801 add r0, sp, #4 - 1496: f00a fcad bl bdf4 - 149a: a801 add r0, sp, #4 - 149c: f00a fb9a bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 14a0: 492d ldr r1, [pc, #180] ; (1558 ) - 14a2: 482e ldr r0, [pc, #184] ; (155c ) - 14a4: f7ff ff62 bl 136c - } - - // Relay message through Iridium to the ground - if(strstr((char*)xbeeRecBuf,"TG")){ //If contains TG tag, commence - 14a8: 492d ldr r1, [pc, #180] ; (1560 ) - 14aa: 4828 ldr r0, [pc, #160] ; (154c ) - 14ac: f010 f97c bl 117a8 - 14b0: 2800 cmp r0, #0 - 14b2: d041 beq.n 1538 - 14b4: 2102 movs r1, #2 - 14b6: 482a ldr r0, [pc, #168] ; (1560 ) - 14b8: f00d fb96 bl ebe8 - 14bc: 4821 ldr r0, [pc, #132] ; (1544 ) - 14be: f00a fa77 bl b9b0 - OutputSerial.println("TG"); - logprintln("TGgnd"); - 14c2: 4928 ldr r1, [pc, #160] ; (1564 ) - 14c4: a801 add r0, sp, #4 - 14c6: f00a fb4b bl bb60 - 14ca: a801 add r0, sp, #4 - 14cc: f7ff fdc6 bl 105c - 14d0: a801 add r0, sp, #4 - 14d2: f00a fb7f bl bbd4 - String("TGgndReq").getBytes(xbeeSendBuf,xbeeSendBufSize); - 14d6: 4924 ldr r1, [pc, #144] ; (1568 ) - 14d8: a801 add r0, sp, #4 - 14da: f00a fb41 bl bb60 - 14de: 2300 movs r3, #0 - 14e0: 2222 movs r2, #34 ; 0x22 - 14e2: 491d ldr r1, [pc, #116] ; (1558 ) - 14e4: a801 add r0, sp, #4 - 14e6: f00a fc85 bl bdf4 - 14ea: a801 add r0, sp, #4 - 14ec: f00a fb72 bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); //Let Ground XBee know request to TX via Iridium has been filed - 14f0: 4919 ldr r1, [pc, #100] ; (1558 ) - 14f2: 481a ldr r0, [pc, #104] ; (155c ) - 14f4: f7ff ff3a bl 136c - downlinkData = true; - 14f8: 4b1c ldr r3, [pc, #112] ; (156c ) - //strcat(downlinkMessage2,(char*)xbeeRecBuf); //NEVER EVER USE THIS - - //Append the message to Iridium's packet in a safe manner. Excess bits will be deleted - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 14fa: 481d ldr r0, [pc, #116] ; (1570 ) - downlinkData = true; - 14fc: 2201 movs r2, #1 - 14fe: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 1500: f010 fcbe bl 11e80 - 1504: 4911 ldr r1, [pc, #68] ; (154c ) - 1506: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 150a: 4819 ldr r0, [pc, #100] ; (1570 ) - 150c: f00f ff0a bl 11324 - logprint("GNDDownAppend"); - 1510: 4918 ldr r1, [pc, #96] ; (1574 ) - 1512: a801 add r0, sp, #4 - 1514: f00a fb24 bl bb60 - 1518: a801 add r0, sp, #4 - 151a: f7ff fcdf bl edc - 151e: a801 add r0, sp, #4 - 1520: f00a fb58 bl bbd4 - logprintln(downlinkMessage2); - 1524: 4912 ldr r1, [pc, #72] ; (1570 ) - 1526: a801 add r0, sp, #4 - 1528: f00a fb1a bl bb60 - 152c: a801 add r0, sp, #4 - 152e: f7ff fd95 bl 105c - 1532: a801 add r0, sp, #4 - 1534: f00a fb4e bl bbd4 - } -} - 1538: b005 add sp, #20 - 153a: f85d fb04 ldr.w pc, [sp], #4 - 153e: bf00 nop - 1540: 00017544 .word 0x00017544 - 1544: 1fff8844 .word 0x1fff8844 - 1548: 00017550 .word 0x00017550 - 154c: 1fff9240 .word 0x1fff9240 - 1550: 00017558 .word 0x00017558 - 1554: 00017568 .word 0x00017568 - 1558: 1fff9274 .word 0x1fff9274 - 155c: 417b4a36 .word 0x417b4a36 - 1560: 00017570 .word 0x00017570 - 1564: 00017574 .word 0x00017574 - 1568: 0001757c .word 0x0001757c - 156c: 1fff8fc9 .word 0x1fff8fc9 - 1570: 1fff8fcc .word 0x1fff8fcc - 1574: 00017588 .word 0x00017588 - -00001578 : - -//----------------------Blue XBee Messages---------------------- -void processBlueMessage(){ - 1578: b500 push {lr} - 157a: 2107 movs r1, #7 - 157c: b085 sub sp, #20 - 157e: 483a ldr r0, [pc, #232] ; (1668 ) - 1580: f00d fb32 bl ebe8 - 1584: 4839 ldr r0, [pc, #228] ; (166c ) - 1586: f00a fa13 bl b9b0 - OutputSerial.println("RecBlue"); - logprintln("RecBlue"); - 158a: 4937 ldr r1, [pc, #220] ; (1668 ) - 158c: a801 add r0, sp, #4 - 158e: f00a fae7 bl bb60 - 1592: a801 add r0, sp, #4 - 1594: f7ff fd62 bl 105c - 1598: a801 add r0, sp, #4 - 159a: f00a fb1b bl bbd4 - - // To Ground Relay - if(strstr((char*)xbeeRecBuf,"TG")){ - 159e: 4934 ldr r1, [pc, #208] ; (1670 ) - 15a0: 4834 ldr r0, [pc, #208] ; (1674 ) - 15a2: f010 f901 bl 117a8 - 15a6: 2800 cmp r0, #0 - 15a8: d030 beq.n 160c - 15aa: 2107 movs r1, #7 - 15ac: 4832 ldr r0, [pc, #200] ; (1678 ) - 15ae: f00d fb1b bl ebe8 - 15b2: 482e ldr r0, [pc, #184] ; (166c ) - 15b4: f00a f9fc bl b9b0 - OutputSerial.println("TG_Blue"); - logprintln("TG_Blue"); - 15b8: 492f ldr r1, [pc, #188] ; (1678 ) - 15ba: a801 add r0, sp, #4 - 15bc: f00a fad0 bl bb60 - 15c0: a801 add r0, sp, #4 - 15c2: f7ff fd4b bl 105c - 15c6: a801 add r0, sp, #4 - 15c8: f00a fb04 bl bbd4 - downlinkData = true; - 15cc: 4b2b ldr r3, [pc, #172] ; (167c ) - //strcat(downlinkMessage2,(char*)xbeeRecBuf);//DELETE on TEST - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 15ce: 482c ldr r0, [pc, #176] ; (1680 ) - downlinkData = true; - 15d0: 2201 movs r2, #1 - 15d2: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 15d4: f010 fc54 bl 11e80 - 15d8: 4926 ldr r1, [pc, #152] ; (1674 ) - 15da: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 15de: 4828 ldr r0, [pc, #160] ; (1680 ) - 15e0: f00f fea0 bl 11324 - logprint("BlueDownAppend"); - 15e4: 4927 ldr r1, [pc, #156] ; (1684 ) - 15e6: a801 add r0, sp, #4 - 15e8: f00a faba bl bb60 - 15ec: a801 add r0, sp, #4 - 15ee: f7ff fc75 bl edc - 15f2: a801 add r0, sp, #4 - 15f4: f00a faee bl bbd4 - logprintln(downlinkMessage2); - 15f8: 4921 ldr r1, [pc, #132] ; (1680 ) - 15fa: a801 add r0, sp, #4 - 15fc: f00a fab0 bl bb60 - 1600: a801 add r0, sp, #4 - 1602: f7ff fd2b bl 105c - 1606: a801 add r0, sp, #4 - 1608: f00a fae4 bl bbd4 - //concat( target , source ,downlink_buffer_size - current_downlink_packet_size) //Prevents payloads from overflowing the downlink and nuking BITS - } - - // PING-PONG - if(strstr((char*)xbeeRecBuf,"ping")){ - 160c: 491e ldr r1, [pc, #120] ; (1688 ) - 160e: 4819 ldr r0, [pc, #100] ; (1674 ) - 1610: f010 f8ca bl 117a8 - 1614: b320 cbz r0, 1660 - 1616: 210c movs r1, #12 - 1618: 481c ldr r0, [pc, #112] ; (168c ) - 161a: f00d fae5 bl ebe8 - 161e: 4813 ldr r0, [pc, #76] ; (166c ) - 1620: f00a f9c6 bl b9b0 - OutputSerial.println("BluePingPong"); - logprintln("BluePingPong"); - 1624: 4919 ldr r1, [pc, #100] ; (168c ) - 1626: a801 add r0, sp, #4 - 1628: f00a fa9a bl bb60 - 162c: a801 add r0, sp, #4 - 162e: f7ff fd15 bl 105c - 1632: a801 add r0, sp, #4 - 1634: f00a face bl bbd4 - String("pong").getBytes(xbeeSendBuf,xbeeSendBufSize); - 1638: 4915 ldr r1, [pc, #84] ; (1690 ) - 163a: a801 add r0, sp, #4 - 163c: f00a fa90 bl bb60 - 1640: 4914 ldr r1, [pc, #80] ; (1694 ) - 1642: 2300 movs r3, #0 - 1644: 2222 movs r2, #34 ; 0x22 - 1646: a801 add r0, sp, #4 - 1648: f00a fbd4 bl bdf4 - 164c: a801 add r0, sp, #4 - 164e: f00a fac1 bl bbd4 - xbeeSend(BlueSL,xbeeSendBuf); - 1652: 4910 ldr r1, [pc, #64] ; (1694 ) - 1654: 4810 ldr r0, [pc, #64] ; (1698 ) - } -} - 1656: b005 add sp, #20 - 1658: f85d eb04 ldr.w lr, [sp], #4 - xbeeSend(BlueSL,xbeeSendBuf); - 165c: f7ff be86 b.w 136c -} - 1660: b005 add sp, #20 - 1662: f85d fb04 ldr.w pc, [sp], #4 - 1666: bf00 nop - 1668: 00017598 .word 0x00017598 - 166c: 1fff8844 .word 0x1fff8844 - 1670: 00017570 .word 0x00017570 - 1674: 1fff9240 .word 0x1fff9240 - 1678: 000175a0 .word 0x000175a0 - 167c: 1fff8fc9 .word 0x1fff8fc9 - 1680: 1fff8fcc .word 0x1fff8fcc - 1684: 000175a8 .word 0x000175a8 - 1688: 00017550 .word 0x00017550 - 168c: 000175b8 .word 0x000175b8 - 1690: 00017568 .word 0x00017568 - 1694: 1fff9274 .word 0x1fff9274 - 1698: 417b4a3a .word 0x417b4a3a - -0000169c : - -//----------------------Wire XBee Messages---------------------- -void processWireMessage(){ - 169c: b500 push {lr} - 169e: 2107 movs r1, #7 - 16a0: b085 sub sp, #20 - 16a2: 483a ldr r0, [pc, #232] ; (178c ) - 16a4: f00d faa0 bl ebe8 - 16a8: 4839 ldr r0, [pc, #228] ; (1790 ) - 16aa: f00a f981 bl b9b0 - OutputSerial.println("RecWire"); - logprintln("RecWire"); - 16ae: 4937 ldr r1, [pc, #220] ; (178c ) - 16b0: a801 add r0, sp, #4 - 16b2: f00a fa55 bl bb60 - 16b6: a801 add r0, sp, #4 - 16b8: f7ff fcd0 bl 105c - 16bc: a801 add r0, sp, #4 - 16be: f00a fa89 bl bbd4 - - // To Ground Relay - if(strstr((char*)xbeeRecBuf,"TG")){ - 16c2: 4934 ldr r1, [pc, #208] ; (1794 ) - 16c4: 4834 ldr r0, [pc, #208] ; (1798 ) - 16c6: f010 f86f bl 117a8 - 16ca: 2800 cmp r0, #0 - 16cc: d030 beq.n 1730 - 16ce: 2107 movs r1, #7 - 16d0: 4832 ldr r0, [pc, #200] ; (179c ) - 16d2: f00d fa89 bl ebe8 - 16d6: 482e ldr r0, [pc, #184] ; (1790 ) - 16d8: f00a f96a bl b9b0 - OutputSerial.println("TG_Wire"); - logprintln("TG_Wire"); - 16dc: 492f ldr r1, [pc, #188] ; (179c ) - 16de: a801 add r0, sp, #4 - 16e0: f00a fa3e bl bb60 - 16e4: a801 add r0, sp, #4 - 16e6: f7ff fcb9 bl 105c - 16ea: a801 add r0, sp, #4 - 16ec: f00a fa72 bl bbd4 - downlinkData = true; - 16f0: 4b2b ldr r3, [pc, #172] ; (17a0 ) - //strcat(downlinkMessage2,(char*)xbeeRecBuf);//DELETE on TEST - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 16f2: 482c ldr r0, [pc, #176] ; (17a4 ) - downlinkData = true; - 16f4: 2201 movs r2, #1 - 16f6: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 16f8: f010 fbc2 bl 11e80 - 16fc: 4926 ldr r1, [pc, #152] ; (1798 ) - 16fe: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 1702: 4828 ldr r0, [pc, #160] ; (17a4 ) - 1704: f00f fe0e bl 11324 - logprint("WireDownAppend"); - 1708: 4927 ldr r1, [pc, #156] ; (17a8 ) - 170a: a801 add r0, sp, #4 - 170c: f00a fa28 bl bb60 - 1710: a801 add r0, sp, #4 - 1712: f7ff fbe3 bl edc - 1716: a801 add r0, sp, #4 - 1718: f00a fa5c bl bbd4 - logprintln(downlinkMessage2); - 171c: 4921 ldr r1, [pc, #132] ; (17a4 ) - 171e: a801 add r0, sp, #4 - 1720: f00a fa1e bl bb60 - 1724: a801 add r0, sp, #4 - 1726: f7ff fc99 bl 105c - 172a: a801 add r0, sp, #4 - 172c: f00a fa52 bl bbd4 - } - - // PING-PONG - if(strstr((char*)xbeeRecBuf,"ping")){ - 1730: 491e ldr r1, [pc, #120] ; (17ac ) - 1732: 4819 ldr r0, [pc, #100] ; (1798 ) - 1734: f010 f838 bl 117a8 - 1738: b320 cbz r0, 1784 - 173a: 210c movs r1, #12 - 173c: 481c ldr r0, [pc, #112] ; (17b0 ) - 173e: f00d fa53 bl ebe8 - 1742: 4813 ldr r0, [pc, #76] ; (1790 ) - 1744: f00a f934 bl b9b0 - OutputSerial.println("WirePingPong"); - logprintln("WirePingPong"); - 1748: 4919 ldr r1, [pc, #100] ; (17b0 ) - 174a: a801 add r0, sp, #4 - 174c: f00a fa08 bl bb60 - 1750: a801 add r0, sp, #4 - 1752: f7ff fc83 bl 105c - 1756: a801 add r0, sp, #4 - 1758: f00a fa3c bl bbd4 - String("pong").getBytes(xbeeSendBuf,xbeeSendBufSize); - 175c: 4915 ldr r1, [pc, #84] ; (17b4 ) - 175e: a801 add r0, sp, #4 - 1760: f00a f9fe bl bb60 - 1764: 4914 ldr r1, [pc, #80] ; (17b8 ) - 1766: 2300 movs r3, #0 - 1768: 2222 movs r2, #34 ; 0x22 - 176a: a801 add r0, sp, #4 - 176c: f00a fb42 bl bdf4 - 1770: a801 add r0, sp, #4 - 1772: f00a fa2f bl bbd4 - xbeeSend(BlueSL,xbeeSendBuf); - 1776: 4910 ldr r1, [pc, #64] ; (17b8 ) - 1778: 4810 ldr r0, [pc, #64] ; (17bc ) - } -} - 177a: b005 add sp, #20 - 177c: f85d eb04 ldr.w lr, [sp], #4 - xbeeSend(BlueSL,xbeeSendBuf); - 1780: f7ff bdf4 b.w 136c -} - 1784: b005 add sp, #20 - 1786: f85d fb04 ldr.w pc, [sp], #4 - 178a: bf00 nop - 178c: 000175c8 .word 0x000175c8 - 1790: 1fff8844 .word 0x1fff8844 - 1794: 00017570 .word 0x00017570 - 1798: 1fff9240 .word 0x1fff9240 - 179c: 000175d0 .word 0x000175d0 - 17a0: 1fff8fc9 .word 0x1fff8fc9 - 17a4: 1fff8fcc .word 0x1fff8fcc - 17a8: 000175d8 .word 0x000175d8 - 17ac: 00017550 .word 0x00017550 - 17b0: 000175e8 .word 0x000175e8 - 17b4: 00017568 .word 0x00017568 - 17b8: 1fff9274 .word 0x1fff9274 - 17bc: 417b4a3a .word 0x417b4a3a - -000017c0 : - -void processGHOULMessage(){ - 17c0: b500 push {lr} - 17c2: 2108 movs r1, #8 - 17c4: b085 sub sp, #20 - 17c6: 4825 ldr r0, [pc, #148] ; (185c ) - 17c8: f00d fa0e bl ebe8 - 17cc: 4824 ldr r0, [pc, #144] ; (1860 ) - 17ce: f00a f8ef bl b9b0 - OutputSerial.println("RecGHOUL"); - logprintln("RecGHOUL"); - 17d2: 4922 ldr r1, [pc, #136] ; (185c ) - 17d4: a801 add r0, sp, #4 - 17d6: f00a f9c3 bl bb60 - 17da: a801 add r0, sp, #4 - 17dc: f7ff fc3e bl 105c - 17e0: a801 add r0, sp, #4 - 17e2: f00a f9f7 bl bbd4 - - if(strstr((char*)xbeeRecBuf,"Ack")){ - 17e6: 491f ldr r1, [pc, #124] ; (1864 ) - 17e8: 481f ldr r0, [pc, #124] ; (1868 ) - 17ea: f00f ffdd bl 117a8 - 17ee: 2800 cmp r0, #0 - 17f0: d030 beq.n 1854 - 17f2: 2109 movs r1, #9 - 17f4: 481d ldr r0, [pc, #116] ; (186c ) - 17f6: f00d f9f7 bl ebe8 - 17fa: 4819 ldr r0, [pc, #100] ; (1860 ) - 17fc: f00a f8d8 bl b9b0 - OutputSerial.println("Ack_GHOUL"); - logprintln("Ack_GHOUL"); - 1800: 491a ldr r1, [pc, #104] ; (186c ) - 1802: a801 add r0, sp, #4 - 1804: f00a f9ac bl bb60 - 1808: a801 add r0, sp, #4 - 180a: f7ff fc27 bl 105c - 180e: a801 add r0, sp, #4 - 1810: f00a f9e0 bl bbd4 - downlinkData = true; - 1814: 4b16 ldr r3, [pc, #88] ; (1870 ) - //strcat(downlinkMessage2,(char*)xbeeRecBuf);//DELETE on TEST - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 1816: 4817 ldr r0, [pc, #92] ; (1874 ) - downlinkData = true; - 1818: 2201 movs r2, #1 - 181a: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,(char*)xbeeRecBuf,downlinkMessageSize - strlen(downlinkMessage2) - 1); - 181c: f010 fb30 bl 11e80 - 1820: 4911 ldr r1, [pc, #68] ; (1868 ) - 1822: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 1826: 4813 ldr r0, [pc, #76] ; (1874 ) - 1828: f00f fd7c bl 11324 - logprint("GHOULDownAppend"); - 182c: 4912 ldr r1, [pc, #72] ; (1878 ) - 182e: a801 add r0, sp, #4 - 1830: f00a f996 bl bb60 - 1834: a801 add r0, sp, #4 - 1836: f7ff fb51 bl edc - 183a: a801 add r0, sp, #4 - 183c: f00a f9ca bl bbd4 - logprintln(downlinkMessage2); - 1840: 490c ldr r1, [pc, #48] ; (1874 ) - 1842: a801 add r0, sp, #4 - 1844: f00a f98c bl bb60 - 1848: a801 add r0, sp, #4 - 184a: f7ff fc07 bl 105c - 184e: a801 add r0, sp, #4 - 1850: f00a f9c0 bl bbd4 - } -} - 1854: b005 add sp, #20 - 1856: f85d fb04 ldr.w pc, [sp], #4 - 185a: bf00 nop - 185c: 000175f8 .word 0x000175f8 - 1860: 1fff8844 .word 0x1fff8844 - 1864: 00017604 .word 0x00017604 - 1868: 1fff9240 .word 0x1fff9240 - 186c: 00017608 .word 0x00017608 - 1870: 1fff8fc9 .word 0x1fff8fc9 - 1874: 1fff8fcc .word 0x1fff8fcc - 1878: 00017614 .word 0x00017614 - -0000187c : -void xbeeRead(){ - 187c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - xbee.readPacket(); //read buffer - 1880: 4893 ldr r0, [pc, #588] ; (1ad0 ) -void xbeeRead(){ - 1882: b09a sub sp, #104 ; 0x68 - xbee.readPacket(); //read buffer - 1884: f001 ff10 bl 36a8 - if (xbee.getResponse().isAvailable()) { //got something - 1888: 4891 ldr r0, [pc, #580] ; (1ad0 ) - 188a: f001 ff0b bl 36a4 - 188e: f001 fe8f bl 35b0 - 1892: b910 cbnz r0, 189a -} - 1894: b01a add sp, #104 ; 0x68 - 1896: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) { //got a TxRequestPacket - 189a: 488d ldr r0, [pc, #564] ; (1ad0 ) - 189c: f001 ff02 bl 36a4 - 18a0: f001 fe84 bl 35ac - 18a4: 2890 cmp r0, #144 ; 0x90 - 18a6: d1f5 bne.n 1894 - xbee.getResponse().getZBRxResponse(rx); - 18a8: 4889 ldr r0, [pc, #548] ; (1ad0 ) - 18aa: f001 fefb bl 36a4 - 18ae: 4989 ldr r1, [pc, #548] ; (1ad4 ) - 18b0: f001 feac bl 360c - uint32_t incominglsb = rx.getRemoteAddress64().getLsb(); //ID the message sender - 18b4: 4888 ldr r0, [pc, #544] ; (1ad8 ) - 18b6: f001 fea7 bl 3608 - 18ba: f001 ff9f bl 37fc - logprint("IncPckFrom "); - 18be: 4987 ldr r1, [pc, #540] ; (1adc ) - uint32_t incominglsb = rx.getRemoteAddress64().getLsb(); //ID the message sender - 18c0: 4605 mov r5, r0 - logprint("IncPckFrom "); - 18c2: a806 add r0, sp, #24 - 18c4: f00a f94c bl bb60 - 18c8: a806 add r0, sp, #24 - 18ca: f7ff fb07 bl edc - 18ce: a806 add r0, sp, #24 - 18d0: f00a f980 bl bbd4 - File dataFile = SD.open(eventLogName, FILE_WRITE); - 18d4: 4b82 ldr r3, [pc, #520] ; (1ae0 ) - SDFAT_FILE file = sdfs.open(filepath, flags); - 18d6: 4983 ldr r1, [pc, #524] ; (1ae4 ) - 18d8: 681a ldr r2, [r3, #0] - 18da: a806 add r0, sp, #24 - 18dc: f244 2302 movw r3, #16898 ; 0x4202 - 18e0: f007 ff26 bl 9730 - 18e4: 9b18 ldr r3, [sp, #96] ; 0x60 - 18e6: 2b00 cmp r3, #0 - 18e8: f000 80bd beq.w 1a66 - if (file) return File(new SDFile(file)); - 18ec: 205c movs r0, #92 ; 0x5c - 18ee: f00a fbf3 bl c0d8 - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 18f2: 4b7d ldr r3, [pc, #500] ; (1ae8 ) -class FileImpl { - 18f4: 2600 movs r6, #0 - 18f6: e9c0 3600 strd r3, r6, [r0] -class Print - 18fa: 9b07 ldr r3, [sp, #28] - 18fc: 60c3 str r3, [r0, #12] -class Stream : public Print - 18fe: 4b7b ldr r3, [pc, #492] ; (1aec ) - 1900: 6083 str r3, [r0, #8] - 1902: 9b08 ldr r3, [sp, #32] - 1904: 6103 str r3, [r0, #16] - 1906: af0a add r7, sp, #40 ; 0x28 - 1908: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 - 190c: 7503 strb r3, [r0, #20] - if (file) return File(new SDFile(file)); - 190e: 4604 mov r4, r0 - 1910: 4639 mov r1, r7 - 1912: 3018 adds r0, #24 - 1914: f007 fdc2 bl 949c - File(FileImpl *file) { - 1918: 4b75 ldr r3, [pc, #468] ; (1af0 ) - 191a: 9301 str r3, [sp, #4] - if (f) f->refcount++; - 191c: 6863 ldr r3, [r4, #4] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 191e: 65a6 str r6, [r4, #88] ; 0x58 - 1920: 3301 adds r3, #1 - 1922: 6063 str r3, [r4, #4] -class FsFile : public StreamFile { - 1924: 4b73 ldr r3, [pc, #460] ; (1af4 ) - 1926: 60a3 str r3, [r4, #8] - constexpr Stream() : _timeout(1000), read_error(0) {} - 1928: f44f 737a mov.w r3, #1000 ; 0x3e8 - constexpr Print() : write_error(0) {} - 192c: 9602 str r6, [sp, #8] - 192e: f88d 6010 strb.w r6, [sp, #16] - f = file; - 1932: 9405 str r4, [sp, #20] - 1934: 9303 str r3, [sp, #12] - 1936: f8df 81c0 ldr.w r8, [pc, #448] ; 1af8 - 193a: f8cd 8018 str.w r8, [sp, #24] - ~FsBaseFile() {close();} - 193e: 4638 mov r0, r7 - 1940: f007 fdda bl 94f8 - size_t print(unsigned long n, int base) { return printNumber(n, base, 0); } - 1944: 2300 movs r3, #0 - 1946: 2210 movs r2, #16 - 1948: 4629 mov r1, r5 - 194a: a801 add r0, sp, #4 - 194c: f00a f848 bl b9e0 - - size_t println(unsigned char n, int base) { return print(n, base) + println(); } - size_t println(int n, int base) { return print(n, base) + println(); } - size_t println(unsigned int n, int base) { return print(n, base) + println(); } - size_t println(long n, int base) { return print(n, base) + println(); } - size_t println(unsigned long n, int base) { return print(n, base) + println(); } - 1950: a801 add r0, sp, #4 - 1952: f00a f82d bl b9b0 - if (f) { - 1956: 9c05 ldr r4, [sp, #20] - 1958: 2c00 cmp r4, #0 - 195a: d04c beq.n 19f6 - f->close(); - 195c: 6823 ldr r3, [r4, #0] - 195e: 4f67 ldr r7, [pc, #412] ; (1afc ) - 1960: 6adb ldr r3, [r3, #44] ; 0x2c - 1962: 42bb cmp r3, r7 - 1964: f040 809d bne.w 1aa2 - if (filename) { - 1968: 6da0 ldr r0, [r4, #88] ; 0x58 - 196a: b118 cbz r0, 1974 - free(filename); - 196c: f00e fba8 bl 100c0 - filename = nullptr; - 1970: 2300 movs r3, #0 - 1972: 65a3 str r3, [r4, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - 1974: 6d23 ldr r3, [r4, #80] ; 0x50 - 1976: 2b00 cmp r3, #0 - 1978: f000 808e beq.w 1a98 - sdfatfile.close(); - 197c: f104 0018 add.w r0, r4, #24 - 1980: f007 fdba bl 94f8 - if (--(f->refcount) == 0) { - 1984: 9e05 ldr r6, [sp, #20] - 1986: 6874 ldr r4, [r6, #4] - 1988: 3c01 subs r4, #1 - 198a: 6074 str r4, [r6, #4] - 198c: 2c00 cmp r4, #0 - 198e: d132 bne.n 19f6 - f->close(); - 1990: 6833 ldr r3, [r6, #0] - 1992: 6adb ldr r3, [r3, #44] ; 0x2c - 1994: 42bb cmp r3, r7 - 1996: f040 8091 bne.w 1abc - if (filename) { - 199a: 6db0 ldr r0, [r6, #88] ; 0x58 - 199c: b110 cbz r0, 19a4 - free(filename); - 199e: f00e fb8f bl 100c0 - filename = nullptr; - 19a2: 65b4 str r4, [r6, #88] ; 0x58 - 19a4: 6d33 ldr r3, [r6, #80] ; 0x50 - 19a6: 2b00 cmp r3, #0 - 19a8: f000 8083 beq.w 1ab2 - sdfatfile.close(); - 19ac: f106 0018 add.w r0, r6, #24 - 19b0: f007 fda2 bl 94f8 - delete f; - 19b4: 9c05 ldr r4, [sp, #20] - 19b6: b1f4 cbz r4, 19f6 - 19b8: 6823 ldr r3, [r4, #0] - 19ba: 4a51 ldr r2, [pc, #324] ; (1b00 ) - 19bc: 685b ldr r3, [r3, #4] - 19be: 4293 cmp r3, r2 - 19c0: f040 8083 bne.w 1aca - if (filename) { - 19c4: 6da0 ldr r0, [r4, #88] ; 0x58 - virtual ~SDFile(void) { - 19c6: 4b48 ldr r3, [pc, #288] ; (1ae8 ) - 19c8: 6023 str r3, [r4, #0] - if (filename) { - 19ca: b118 cbz r0, 19d4 - free(filename); - 19cc: f00e fb78 bl 100c0 - filename = nullptr; - 19d0: 2300 movs r3, #0 - 19d2: 65a3 str r3, [r4, #88] ; 0x58 - 19d4: 6d23 ldr r3, [r4, #80] ; 0x50 - sdfatfile.close(); - 19d6: f104 0618 add.w r6, r4, #24 - 19da: 2b00 cmp r3, #0 - 19dc: d071 beq.n 1ac2 - 19de: 4630 mov r0, r6 - 19e0: f007 fd8a bl 94f8 - 19e4: f8c4 8008 str.w r8, [r4, #8] - ~FsBaseFile() {close();} - 19e8: 4630 mov r0, r6 - 19ea: f007 fd85 bl 94f8 - } - 19ee: 215c movs r1, #92 ; 0x5c - 19f0: 4620 mov r0, r4 - 19f2: f00a fb73 bl c0dc - if(rx.getPacketLength()>=xbeeRecBufSize){ - 19f6: 4837 ldr r0, [pc, #220] ; (1ad4 ) - 19f8: f001 fe3c bl 3674 - 19fc: 2830 cmp r0, #48 ; 0x30 - 19fe: d822 bhi.n 1a46 - memset(xbeeRecBuf, 0, xbeeRecBufSize); // Clears old buffer - 1a00: 2231 movs r2, #49 ; 0x31 - 1a02: 2100 movs r1, #0 - 1a04: 483f ldr r0, [pc, #252] ; (1b04 ) - 1a06: f00f fbb5 bl 11174 - memcpy(xbeeRecBuf,rx.getData(),rx.getPacketLength());//Safely fills buffer - 1a0a: 4833 ldr r0, [pc, #204] ; (1ad8 ) - 1a0c: f001 fe28 bl 3660 - 1a10: 4604 mov r4, r0 - 1a12: 4830 ldr r0, [pc, #192] ; (1ad4 ) - 1a14: f001 fe2e bl 3674 - 1a18: 4621 mov r1, r4 - 1a1a: 4602 mov r2, r0 - 1a1c: 4839 ldr r0, [pc, #228] ; (1b04 ) - 1a1e: f00a fa0b bl be38 - if(incominglsb == BlueSL){ - 1a22: 4b39 ldr r3, [pc, #228] ; (1b08 ) - 1a24: 429d cmp r5, r3 - 1a26: d032 beq.n 1a8e - else if(incominglsb == GroundSL){ - 1a28: 4b38 ldr r3, [pc, #224] ; (1b0c ) - 1a2a: 429d cmp r5, r3 - 1a2c: d02a beq.n 1a84 - else if(incominglsb == WireSL){ - 1a2e: 4b38 ldr r3, [pc, #224] ; (1b10 ) - 1a30: 429d cmp r5, r3 - 1a32: d039 beq.n 1aa8 - else if(incominglsb == GHOULSL){ - 1a34: 4b37 ldr r3, [pc, #220] ; (1b14 ) - 1a36: 429d cmp r5, r3 - 1a38: f47f af2c bne.w 1894 -} - 1a3c: b01a add sp, #104 ; 0x68 - 1a3e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - processGHOULMessage(); - 1a42: f7ff bebd b.w 17c0 - logprint("Oversized Message: "); - 1a46: 4934 ldr r1, [pc, #208] ; (1b18 ) - 1a48: a806 add r0, sp, #24 - 1a4a: f00a f889 bl bb60 - 1a4e: a806 add r0, sp, #24 - 1a50: f7ff fa44 bl edc - 1a54: a806 add r0, sp, #24 - 1a56: f00a f8bd bl bbd4 - logprintln(rx.getPacketLength()); - 1a5a: 481e ldr r0, [pc, #120] ; (1ad4 ) - 1a5c: f001 fe0a bl 3674 - 1a60: f7ff fbc0 bl 11e4 - 1a64: e7cc b.n 1a00 - bool isOpen() const {return m_fFile || m_xFile;} - 1a66: 9b19 ldr r3, [sp, #100] ; 0x64 - 1a68: 2b00 cmp r3, #0 - 1a6a: f47f af3f bne.w 18ec - constexpr File() : f(nullptr) { } - 1a6e: 4a20 ldr r2, [pc, #128] ; (1af0 ) - constexpr Print() : write_error(0) {} - 1a70: 9302 str r3, [sp, #8] - 1a72: f44f 717a mov.w r1, #1000 ; 0x3e8 - 1a76: 9103 str r1, [sp, #12] - 1a78: f88d 3010 strb.w r3, [sp, #16] - 1a7c: 9201 str r2, [sp, #4] - 1a7e: 9305 str r3, [sp, #20] - 1a80: af0a add r7, sp, #40 ; 0x28 - 1a82: e758 b.n 1936 -} - 1a84: b01a add sp, #104 ; 0x68 - 1a86: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - processGroundMessage(); - 1a8a: f7ff bcdd b.w 1448 -} - 1a8e: b01a add sp, #104 ; 0x68 - 1a90: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - processBlueMessage(); - 1a94: f7ff bd70 b.w 1578 - 1a98: 6d63 ldr r3, [r4, #84] ; 0x54 - 1a9a: 2b00 cmp r3, #0 - 1a9c: f47f af6e bne.w 197c - 1aa0: e770 b.n 1984 - f->close(); - 1aa2: 4620 mov r0, r4 - 1aa4: 4798 blx r3 - 1aa6: e76d b.n 1984 -} - 1aa8: b01a add sp, #104 ; 0x68 - 1aaa: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - processWireMessage(); - 1aae: f7ff bdf5 b.w 169c - 1ab2: 6d73 ldr r3, [r6, #84] ; 0x54 - 1ab4: 2b00 cmp r3, #0 - 1ab6: f47f af79 bne.w 19ac - 1aba: e77b b.n 19b4 - f->close(); - 1abc: 4630 mov r0, r6 - 1abe: 4798 blx r3 - 1ac0: e778 b.n 19b4 - 1ac2: 6d63 ldr r3, [r4, #84] ; 0x54 - 1ac4: 2b00 cmp r3, #0 - 1ac6: d18a bne.n 19de - 1ac8: e78c b.n 19e4 - delete f; - 1aca: 4620 mov r0, r4 - 1acc: 4798 blx r3 - if (f) dec_refcount(); - 1ace: e792 b.n 19f6 - 1ad0: 1fff91bc .word 0x1fff91bc - 1ad4: 1fff9164 .word 0x1fff9164 - 1ad8: 1fff9160 .word 0x1fff9160 - 1adc: 00017624 .word 0x00017624 - 1ae0: 1fff8728 .word 0x1fff8728 - 1ae4: 1fff92a4 .word 0x1fff92a4 - 1ae8: 00017b64 .word 0x00017b64 - 1aec: 00017acc .word 0x00017acc - 1af0: 00017b38 .word 0x00017b38 - 1af4: 00017b14 .word 0x00017b14 - 1af8: 00017af0 .word 0x00017af0 - 1afc: 00000475 .word 0x00000475 - 1b00: 00000b71 .word 0x00000b71 - 1b04: 1fff9240 .word 0x1fff9240 - 1b08: 417b4a3a .word 0x417b4a3a - 1b0c: 417b4a36 .word 0x417b4a36 - 1b10: 419091ac .word 0x419091ac - 1b14: 4256ddbc .word 0x4256ddbc - 1b18: 00017630 .word 0x00017630 - -00001b1c : -bool gps_set_navmode_one_g(){ - 1b1c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - const char navmode_one_g[] PROGMEM = { - 1b20: 4c2f ldr r4, [pc, #188] ; (1be0 ) - 1b22: cc0f ldmia r4!, {r0, r1, r2, r3} -bool gps_set_navmode_one_g(){ - 1b24: b090 sub sp, #64 ; 0x40 - const char navmode_one_g[] PROGMEM = { - 1b26: ad05 add r5, sp, #20 - 1b28: c50f stmia r5!, {r0, r1, r2, r3} - 1b2a: cc0f ldmia r4!, {r0, r1, r2, r3} - 1b2c: c50f stmia r5!, {r0, r1, r2, r3} - 1b2e: e894 0007 ldmia.w r4, {r0, r1, r2} - const char navmode_poll[] PROGMEM = {0xB5, 0x62, 0x06, 0x24, 0x00, 0x00, 0x2A, 0x84}; - 1b32: 340c adds r4, #12 - const char navmode_one_g[] PROGMEM = { - 1b34: e885 0007 stmia.w r5, {r0, r1, r2} - const char navmode_poll[] PROGMEM = {0xB5, 0x62, 0x06, 0x24, 0x00, 0x00, 0x2A, 0x84}; - 1b38: e894 0003 ldmia.w r4, {r0, r1} - 1b3c: ac03 add r4, sp, #12 - 1b3e: e884 0003 stmia.w r4, {r0, r1} - for(int i = 0; i - gpsserial.write(pgm_read_byte(config_string+i)); - 1b4c: f815 0f01 ldrb.w r0, [r5, #1]! - virtual void clear(void) { serial3_clear(); } - virtual int availableForWrite(void) { return serial3_write_buffer_free(); } - virtual void addMemoryForRead(void *buffer, size_t length) {serial3_add_memory_for_read(buffer, length);} - virtual void addMemoryForWrite(void *buffer, size_t length){serial3_add_memory_for_write(buffer, length);} - using Print::write; - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - 1b50: f00c f92c bl ddac - for(int i = 0; i - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 1b58: 4e22 ldr r6, [pc, #136] ; (1be4 ) - delay(1000); - 1b5a: f44f 707a mov.w r0, #1000 ; 0x3e8 - 1b5e: f00a fd7f bl c660 - 1b62: 6833 ldr r3, [r6, #0] - 1b64: 9301 str r3, [sp, #4] - return ret; - 1b66: 9d01 ldr r5, [sp, #4] - unsigned int stop_time = millis() + 5000; - 1b68: f505 559c add.w r5, r5, #4992 ; 0x1380 - 1b6c: 3508 adds r5, #8 - for(int i = 0; i - gpsserial.write(pgm_read_byte(config_string+i)); - 1b76: f814 0f01 ldrb.w r0, [r4, #1]! - 1b7a: f00c f917 bl ddac - for(int i = 0; i - bool rec_ubx = false; - 1b82: 2400 movs r4, #0 - int ubx_index = 2; - 1b84: 2702 movs r7, #2 - bool rec_ubx_first = false; - 1b86: 46a0 mov r8, r4 - 1b88: e002 b.n 1b90 - virtual int available(void) { return serial3_available(); } - 1b8a: f00c f951 bl de30 - if(gpsserial.available()){ - 1b8e: b948 cbnz r0, 1ba4 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 1b90: 6833 ldr r3, [r6, #0] - 1b92: 9302 str r3, [sp, #8] - return ret; - 1b94: 9b02 ldr r3, [sp, #8] - while(stop_time > millis()){ - 1b96: 429d cmp r5, r3 - 1b98: d8f7 bhi.n 1b8a - return false; - 1b9a: 2400 movs r4, #0 -} - 1b9c: 4620 mov r0, r4 - 1b9e: b010 add sp, #64 ; 0x40 - 1ba0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - virtual int read(void) { return serial3_getchar(); } - 1ba4: f00c f958 bl de58 - if(parsed_char == pgm_read_byte(navmode_one_g+ubx_index)){ - 1ba8: f107 0340 add.w r3, r7, #64 ; 0x40 - 1bac: 446b add r3, sp - if(rec_ubx){ - 1bae: b13c cbz r4, 1bc0 - if(parsed_char == pgm_read_byte(navmode_one_g+ubx_index)){ - 1bb0: f813 3c2c ldrb.w r3, [r3, #-44] - 1bb4: 4283 cmp r3, r0 - ubx_index++; - 1bb6: f107 0701 add.w r7, r7, #1 - if(parsed_char == pgm_read_byte(navmode_one_g+ubx_index)){ - 1bba: d1ee bne.n 1b9a - if(ubx_index > 43){ - 1bbc: 2f2b cmp r7, #43 ; 0x2b - 1bbe: dced bgt.n 1b9c - if(parsed_char == 181){ - 1bc0: 28b5 cmp r0, #181 ; 0xb5 - 1bc2: d004 beq.n 1bce - }else if(parsed_char == 98 && rec_ubx_first == true){ - 1bc4: 2862 cmp r0, #98 ; 0x62 - 1bc6: d005 beq.n 1bd4 - rec_ubx_first = false; - 1bc8: f04f 0800 mov.w r8, #0 - 1bcc: e7e0 b.n 1b90 - rec_ubx_first = true; - 1bce: f04f 0801 mov.w r8, #1 - 1bd2: e7dd b.n 1b90 - rec_ubx = true; - 1bd4: f1b8 0f00 cmp.w r8, #0 - 1bd8: bf18 it ne - 1bda: 4644 movne r4, r8 - 1bdc: e7d8 b.n 1b90 - 1bde: bf00 nop - 1be0: 00017cc0 .word 0x00017cc0 - 1be4: 1fff978c .word 0x1fff978c - -00001be8 : -GPSdata getGPS() { - 1be8: e92d 4f70 stmdb sp!, {r4, r5, r6, r8, r9, sl, fp, lr} - GPSLat = gps.location.lat(); - 1bec: 4d19 ldr r5, [pc, #100] ; (1c54 ) -GPSdata getGPS() { - 1bee: 4604 mov r4, r0 - GPSLat = gps.location.lat(); - 1bf0: 4628 mov r0, r5 - 1bf2: f009 fbaf bl b354 - 1bf6: 4682 mov sl, r0 - GPSLon = gps.location.lng(); - 1bf8: 4628 mov r0, r5 - GPSLat = gps.location.lat(); - 1bfa: 468b mov fp, r1 - GPSLon = gps.location.lng(); - 1bfc: f009 fbca bl b394 - friend class TinyGPSPlus; -public: - bool isValid() const { return valid; } - bool isUpdated() const { return updated; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - uint32_t value() { updated = false; return val; } - 1c00: 2300 movs r3, #0 - 1c02: 4680 mov r8, r0 - double deg() { return value() / 100.0; } -}; - -struct TinyGPSAltitude : TinyGPSDecimal -{ - double meters() { return value() / 100.0; } - 1c04: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 - uint32_t value() { updated = false; return val; } - 1c08: f885 3089 strb.w r3, [r5, #137] ; 0x89 - uint32_t value() { updated = false; return time; } - 1c0c: f885 3049 strb.w r3, [r5, #73] ; 0x49 - int32_t value() { updated = false; return val; } - 1c10: f885 3079 strb.w r3, [r5, #121] ; 0x79 - 1c14: 4689 mov r9, r1 - double meters() { return value() / 100.0; } - 1c16: f00d ffcf bl fbb8 <__aeabi_i2f> - 1c1a: 490f ldr r1, [pc, #60] ; (1c58 ) - 1c1c: f00e f8d4 bl fdc8 <__aeabi_fdiv> - GPSAlt = gps.altitude.meters(); - 1c20: f00e f9fa bl 10018 <__aeabi_f2iz> - GPSLat = gps.location.lat(); - 1c24: 4659 mov r1, fp - GPSAlt = gps.altitude.meters(); - 1c26: 4606 mov r6, r0 - GPSLat = gps.location.lat(); - 1c28: 4650 mov r0, sl - 1c2a: f00d febb bl f9a4 <__aeabi_d2f> - GPSLon = gps.location.lng(); - 1c2e: 4649 mov r1, r9 - GPSLat = gps.location.lat(); - 1c30: 6020 str r0, [r4, #0] - GPSLon = gps.location.lng(); - 1c32: 4640 mov r0, r8 - 1c34: f00d feb6 bl f9a4 <__aeabi_d2f> - gpsInfo.GPSTime = GPSTime/100; - 1c38: 4a08 ldr r2, [pc, #32] ; (1c5c ) - uint32_t value() { updated = false; return time; } - 1c3a: 6ceb ldr r3, [r5, #76] ; 0x4c - GPSSats = gps.satellites.value(); - 1c3c: f8d5 1090 ldr.w r1, [r5, #144] ; 0x90 - GPSLon = gps.location.lng(); - 1c40: 6060 str r0, [r4, #4] - gpsInfo.GPSTime = GPSTime/100; - 1c42: fba2 2303 umull r2, r3, r2, r3 - 1c46: 095b lsrs r3, r3, #5 - gpsInfo.GPSAlt = GPSAlt; - 1c48: 60e6 str r6, [r4, #12] -} - 1c4a: 4620 mov r0, r4 - gpsInfo.GPSTime = GPSTime/100; - 1c4c: 60a3 str r3, [r4, #8] - gpsInfo.GPSSats = GPSSats; - 1c4e: 6121 str r1, [r4, #16] -} - 1c50: e8bd 8f70 ldmia.w sp!, {r4, r5, r6, r8, r9, sl, fp, pc} - 1c54: 1fff9030 .word 0x1fff9030 - 1c58: 42c80000 .word 0x42c80000 - 1c5c: 51eb851f .word 0x51eb851f - -00001c60 : -{ - 1c60: b530 push {r4, r5, lr} - if (gps.encode(gpsserial.read())){ - 1c62: 4c16 ldr r4, [pc, #88] ; (1cbc ) -{ - 1c64: b089 sub sp, #36 ; 0x24 - while (gpsserial.available()){ - 1c66: e006 b.n 1c76 - 1c68: f00c f8f6 bl de58 - if (gps.encode(gpsserial.read())){ - 1c6c: b2c1 uxtb r1, r0 - 1c6e: 4620 mov r0, r4 - 1c70: f009 fb0c bl b28c - 1c74: b990 cbnz r0, 1c9c - virtual int available(void) { return serial3_available(); } - 1c76: f00c f8db bl de30 - while (gpsserial.available()){ - 1c7a: 2800 cmp r0, #0 - 1c7c: d1f4 bne.n 1c68 - xbeeRead(); - 1c7e: f7ff fdfd bl 187c - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 1c82: 4b0f ldr r3, [pc, #60] ; (1cc0 ) - if(millis()-lastLog>gpsLogInterval){ - 1c84: 4a0f ldr r2, [pc, #60] ; (1cc4 ) - 1c86: 681b ldr r3, [r3, #0] - 1c88: 9307 str r3, [sp, #28] - return ret; - 1c8a: 9b07 ldr r3, [sp, #28] - 1c8c: 6812 ldr r2, [r2, #0] - 1c8e: 1a9b subs r3, r3, r2 - 1c90: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 - 1c94: d80c bhi.n 1cb0 -} - 1c96: 2001 movs r0, #1 - 1c98: b009 add sp, #36 ; 0x24 - 1c9a: bd30 pop {r4, r5, pc} - gpsInfo = getGPS(); - 1c9c: 4668 mov r0, sp - 1c9e: 466c mov r4, sp - 1ca0: f7ff ffa2 bl 1be8 - 1ca4: cc0f ldmia r4!, {r0, r1, r2, r3} - 1ca6: 4d08 ldr r5, [pc, #32] ; (1cc8 ) - 1ca8: c50f stmia r5!, {r0, r1, r2, r3} - 1caa: 6823 ldr r3, [r4, #0] - 1cac: 602b str r3, [r5, #0] - break; - 1cae: e7e6 b.n 1c7e - 1cb0: f7fe ffdc bl c6c -} - 1cb4: 2001 movs r0, #1 - 1cb6: b009 add sp, #36 ; 0x24 - 1cb8: bd30 pop {r4, r5, pc} - 1cba: bf00 nop - 1cbc: 1fff9030 .word 0x1fff9030 - 1cc0: 1fff978c .word 0x1fff978c - 1cc4: 1fff9108 .word 0x1fff9108 - 1cc8: 1fff872c .word 0x1fff872c - -00001ccc : -//Advanced blinking -void startBlinks(){ - 1ccc: b538 push {r3, r4, r5, lr} -//LED Indicators - //pinMode(redLED,OUTPUT);//Red - pinMode(greenLED,OUTPUT);//Green - 1cce: 2101 movs r1, #1 - 1cd0: 2004 movs r0, #4 - 1cd2: f00a fc89 bl c5e8 - digitalWrite(4, LOW); - 1cd6: 2100 movs r1, #0 - 1cd8: 2004 movs r0, #4 - 1cda: f00a fc51 bl c580 - digitalWrite(5, LOW); - 1cde: 2100 movs r1, #0 - 1ce0: 2005 movs r0, #5 - 1ce2: f00a fc4d bl c580 - size_t print(int n) { return print((long)n); } - 1ce6: 4d0d ldr r5, [pc, #52] ; (1d1c ) - for (int i = 0; i < 10; i++) - 1ce8: 2400 movs r4, #0 - 1cea: 4621 mov r1, r4 - 1cec: 4628 mov r0, r5 - 1cee: f009 fe57 bl b9a0 - size_t println(int n) { return print(n) + println(); } - 1cf2: 4628 mov r0, r5 - 1cf4: f009 fe5c bl b9b0 - { - Serial.println(i); - delay(100); - 1cf8: 2064 movs r0, #100 ; 0x64 - 1cfa: f00a fcb1 bl c660 - //digitalWrite(redLED, HIGH); - digitalWrite(greenLED, HIGH); - 1cfe: 2101 movs r1, #1 - 1d00: 2004 movs r0, #4 - 1d02: f00a fc3d bl c580 - delay(25); - 1d06: 2019 movs r0, #25 - 1d08: f00a fcaa bl c660 - for (int i = 0; i < 10; i++) - 1d0c: 3401 adds r4, #1 - //digitalWrite(redLED, LOW); - digitalWrite(greenLED, LOW); - 1d0e: 2100 movs r1, #0 - 1d10: 2004 movs r0, #4 - 1d12: f00a fc35 bl c580 - for (int i = 0; i < 10; i++) - 1d16: 2c0a cmp r4, #10 - 1d18: d1e7 bne.n 1cea - } -} - 1d1a: bd38 pop {r3, r4, r5, pc} - 1d1c: 1fff8844 .word 0x1fff8844 - -00001d20 <_GLOBAL__sub_I_xbee>: - //digitalWrite(redLED,LOW); - digitalWrite(greenLED,HIGH); - delay(100); - digitalWrite(greenLED,LOW); - } -} - 1d20: b538 push {r3, r4, r5, lr} -XBee xbee = XBee(); - 1d22: 481e ldr r0, [pc, #120] ; (1d9c <_GLOBAL__sub_I_xbee+0x7c>) -File gpsLogFile; - 1d24: 4c1e ldr r4, [pc, #120] ; (1da0 <_GLOBAL__sub_I_xbee+0x80>) - 1d26: 4d1f ldr r5, [pc, #124] ; (1da4 <_GLOBAL__sub_I_xbee+0x84>) -XBee xbee = XBee(); - 1d28: f001 fca6 bl 3678 -XBeeResponse response = XBeeResponse(); - 1d2c: 481e ldr r0, [pc, #120] ; (1da8 <_GLOBAL__sub_I_xbee+0x88>) - 1d2e: f001 fc3b bl 35a8 -ZBTxStatusResponse txStatus = ZBTxStatusResponse(); - 1d32: 481e ldr r0, [pc, #120] ; (1dac <_GLOBAL__sub_I_xbee+0x8c>) - 1d34: f001 fc46 bl 35c4 -ZBRxResponse rx = ZBRxResponse(); - 1d38: 481d ldr r0, [pc, #116] ; (1db0 <_GLOBAL__sub_I_xbee+0x90>) - 1d3a: f001 fc5b bl 35f4 -ModemStatusResponse msr = ModemStatusResponse(); - 1d3e: 481d ldr r0, [pc, #116] ; (1db4 <_GLOBAL__sub_I_xbee+0x94>) - 1d40: f001 fc96 bl 3670 -TinyGPSPlus gps; - 1d44: 481c ldr r0, [pc, #112] ; (1db8 <_GLOBAL__sub_I_xbee+0x98>) - 1d46: f008 ffdd bl ad04 -File gpsLogFile; - 1d4a: 4621 mov r1, r4 - 1d4c: 462a mov r2, r5 - 1d4e: 481b ldr r0, [pc, #108] ; (1dbc <_GLOBAL__sub_I_xbee+0x9c>) - 1d50: f00d f98e bl f070 <__aeabi_atexit> -File rxLogFile; - 1d54: 4621 mov r1, r4 - 1d56: 462a mov r2, r5 - 1d58: 4819 ldr r0, [pc, #100] ; (1dc0 <_GLOBAL__sub_I_xbee+0xa0>) - 1d5a: f00d f989 bl f070 <__aeabi_atexit> -File txLogFile; - 1d5e: 4621 mov r1, r4 - 1d60: 462a mov r2, r5 - 1d62: 4818 ldr r0, [pc, #96] ; (1dc4 <_GLOBAL__sub_I_xbee+0xa4>) - void adjustSendReceiveTimeout(int seconds); // default value = 300 seconds - void useMSSTMWorkaround(bool useMSSTMWorkAround); // true to use workaround from Iridium Alert 5/7/13 - void enableRingAlerts(bool enable); - - IridiumSBD(Stream &str, int sleepPinNo = -1, int ringPinNo = -1) : - stream(str), - 1d64: 4c18 ldr r4, [pc, #96] ; (1dc8 <_GLOBAL__sub_I_xbee+0xa8>) - 1d66: f00d f983 bl f070 <__aeabi_atexit> - 1d6a: 4b18 ldr r3, [pc, #96] ; (1dcc <_GLOBAL__sub_I_xbee+0xac>) - ringPin(ringPinNo), - msstmWorkaroundRequested(true), - ringAlertsEnabled(ringPinNo != -1), - ringAsserted(false), - lastPowerOnTime(0UL), - head(SBDRING), - 1d6c: 4918 ldr r1, [pc, #96] ; (1dd0 <_GLOBAL__sub_I_xbee+0xb0>) - stream(str), - 1d6e: 601c str r4, [r3, #0] - sbdixInterval(ISBD_USB_SBDIX_INTERVAL), - 1d70: 201e movs r0, #30 - sendReceiveTimeout(ISBD_DEFAULT_SENDRECEIVE_TIME), - 1d72: f44f 7496 mov.w r4, #300 ; 0x12c - remainingMessages(-1), - 1d76: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - sbdixInterval(ISBD_USB_SBDIX_INTERVAL), - 1d7a: 6058 str r0, [r3, #4] - atTimeout(ISBD_DEFAULT_AT_TIMEOUT), - 1d7c: 6098 str r0, [r3, #8] - sendReceiveTimeout(ISBD_DEFAULT_SENDRECEIVE_TIME), - 1d7e: 60dc str r4, [r3, #12] - ringAsserted(false), - 1d80: 2000 movs r0, #0 - asleep(true), - 1d82: 2401 movs r4, #1 - remainingMessages(-1), - 1d84: 611a str r2, [r3, #16] - asleep(true), - 1d86: 829c strh r4, [r3, #20] - sleepPin(sleepPinNo), - 1d88: 619a str r2, [r3, #24] - ringPin(ringPinNo), - 1d8a: 61da str r2, [r3, #28] - msstmWorkaroundRequested(true), - 1d8c: 841c strh r4, [r3, #32] - ringAsserted(false), - 1d8e: f883 0022 strb.w r0, [r3, #34] ; 0x22 - lastPowerOnTime(0UL), - 1d92: 6258 str r0, [r3, #36] ; 0x24 - head(SBDRING), - 1d94: 6299 str r1, [r3, #40] ; 0x28 - tail(SBDRING), - 1d96: 62d9 str r1, [r3, #44] ; 0x2c - nextChar(-1) - 1d98: 631a str r2, [r3, #48] ; 0x30 - 1d9a: bd38 pop {r3, r4, r5, pc} - 1d9c: 1fff91bc .word 0x1fff91bc - 1da0: 00000d85 .word 0x00000d85 - 1da4: 1fff8720 .word 0x1fff8720 - 1da8: 1fff9154 .word 0x1fff9154 - 1dac: 1fff91b0 .word 0x1fff91b0 - 1db0: 1fff9160 .word 0x1fff9160 - 1db4: 1fff9148 .word 0x1fff9148 - 1db8: 1fff9030 .word 0x1fff9030 - 1dbc: 1fff8740 .word 0x1fff8740 - 1dc0: 1fff875c .word 0x1fff875c - 1dc4: 1fff8774 .word 0x1fff8774 - 1dc8: 1fff87c4 .word 0x1fff87c4 - 1dcc: 1fff9114 .word 0x1fff9114 - 1dd0: 0001806c .word 0x0001806c - -00001dd4 : -void gps_baud_init(){ - 1dd4: b530 push {r4, r5, lr} - gpsserial.begin(9600); - 1dd6: f44f 5116 mov.w r1, #9600 ; 0x2580 -void gps_baud_init(){ - 1dda: b089 sub sp, #36 ; 0x24 - gpsserial.begin(9600); - 1ddc: 4813 ldr r0, [pc, #76] ; (1e2c ) - const char quickBaud[] PROGMEM = { - 1dde: 4c14 ldr r4, [pc, #80] ; (1e30 ) - gpsserial.begin(9600); - 1de0: f009 fca6 bl b730 - delay(50); - 1de4: 2032 movs r0, #50 ; 0x32 - 1de6: f00a fc3b bl c660 - const char quickBaud[] PROGMEM = { - 1dea: cc0f ldmia r4!, {r0, r1, r2, r3} - 1dec: f10d 0c04 add.w ip, sp, #4 - 1df0: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 1df4: e894 0007 ldmia.w r4, {r0, r1, r2} - 1df8: f10d 051f add.w r5, sp, #31 - 1dfc: e88c 0007 stmia.w ip, {r0, r1, r2} - for(int i = 0; i - gpsserial.write(pgm_read_byte(config_string+i)); - 1e06: f814 0f01 ldrb.w r0, [r4, #1]! - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - 1e0a: f00b ffcf bl ddac - for(int i = 0; i - virtual void end(void) { serial3_end(); } - 1e12: f00b ff09 bl dc28 - gpsserial.begin(115200); - 1e16: 4805 ldr r0, [pc, #20] ; (1e2c ) - 1e18: f44f 31e1 mov.w r1, #115200 ; 0x1c200 - 1e1c: f009 fc88 bl b730 - delay(100); - 1e20: 2064 movs r0, #100 ; 0x64 -} - 1e22: b009 add sp, #36 ; 0x24 - 1e24: e8bd 4030 ldmia.w sp!, {r4, r5, lr} - delay(100); - 1e28: f00a bc1a b.w c660 - 1e2c: 1fff87ec .word 0x1fff87ec - 1e30: 00017c88 .word 0x00017c88 - -00001e34 : -void gps_init(){ - 1e34: b5f0 push {r4, r5, r6, r7, lr} - 1e36: b095 sub sp, #84 ; 0x54 - const char nuke_msg[] PROGMEM = { - 1e38: 466d mov r5, sp - gps_baud_init(); - 1e3a: f7ff ffcb bl 1dd4 - const char nuke_msg[] PROGMEM = { - 1e3e: 492b ldr r1, [pc, #172] ; (1eec ) - 1e40: 2250 movs r2, #80 ; 0x50 - 1e42: 4628 mov r0, r5 - 1e44: f009 fff8 bl be38 - for(int i = 0; i - gpsserial.write(pgm_read_byte(config_string+i)); - 1e52: f814 0f01 ldrb.w r0, [r4, #1]! - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - 1e56: f00b ffa9 bl ddac - for(int i = 0; i - const char gga_msg[] PROGMEM = { - 1e5e: 4b24 ldr r3, [pc, #144] ; (1ef0 ) - 1e60: cb0f ldmia r3, {r0, r1, r2, r3} - 1e62: 462c mov r4, r5 - 1e64: e885 000f stmia.w r5, {r0, r1, r2, r3} - for(int i = 0; i - gpsserial.write(pgm_read_byte(config_string+i)); - 1e70: f814 0f01 ldrb.w r0, [r4, #1]! - 1e74: f00b ff9a bl ddac - for(int i = 0; i - if(!gps_set_navmode_one_g()){ - 1e7c: f7ff fe4e bl 1b1c - 1e80: bb60 cbnz r0, 1edc - 1e82: 481c ldr r0, [pc, #112] ; (1ef4 ) - 1e84: 2111 movs r1, #17 - 1e86: f00c feaf bl ebe8 - size_t println(const char s[]) { return print(s) + println(); } - 1e8a: 481b ldr r0, [pc, #108] ; (1ef8 ) - 1e8c: f009 fd90 bl b9b0 - const char one_hertz[] PROGMEM = {0xB5, 0x62, 0x06, 0x08 ,0x06 ,0x00 ,0xE8 ,0x03 ,0x01 ,0x00 ,0x01 ,0x00 ,0x01 ,0x39}; - 1e90: 4b1a ldr r3, [pc, #104] ; (1efc ) - 1e92: cb0f ldmia r3, {r0, r1, r2, r3} - 1e94: 462f mov r7, r5 - 1e96: c707 stmia r7!, {r0, r1, r2} - 1e98: 462c mov r4, r5 - 1e9a: f10d 060d add.w r6, sp, #13 - 1e9e: 803b strh r3, [r7, #0] - 1ea0: 20b5 movs r0, #181 ; 0xb5 - 1ea2: e001 b.n 1ea8 - gpsserial.write(pgm_read_byte(config_string+i)); - 1ea4: f814 0f01 ldrb.w r0, [r4, #1]! - 1ea8: f00b ff80 bl ddac - for(int i = 0; i - const char save_gps_conf[] PROGMEM = { - 1eb0: 4f13 ldr r7, [pc, #76] ; (1f00 ) - 1eb2: cf0f ldmia r7!, {r0, r1, r2, r3} - 1eb4: 462c mov r4, r5 - 1eb6: c50f stmia r5!, {r0, r1, r2, r3} - 1eb8: e897 0003 ldmia.w r7, {r0, r1} - 1ebc: f845 0b04 str.w r0, [r5], #4 - 1ec0: ae05 add r6, sp, #20 - 1ec2: f04f 0cb5 mov.w ip, #181 ; 0xb5 - 1ec6: 7029 strb r1, [r5, #0] - for(int i = 0; i - gpsserial.write(pgm_read_byte(config_string+i)); - 1eca: f814 cf01 ldrb.w ip, [r4, #1]! - 1ece: 4660 mov r0, ip - 1ed0: f00b ff6c bl ddac - for(int i = 0; i -} - 1ed8: b015 add sp, #84 ; 0x54 - 1eda: bdf0 pop {r4, r5, r6, r7, pc} - 1edc: 2108 movs r1, #8 - 1ede: 4809 ldr r0, [pc, #36] ; (1f04 ) - 1ee0: f00c fe82 bl ebe8 - 1ee4: 4804 ldr r0, [pc, #16] ; (1ef8 ) - 1ee6: f009 fd63 bl b9b0 - 1eea: e7d1 b.n 1e90 - 1eec: 00017bdc .word 0x00017bdc - 1ef0: 00017c2c .word 0x00017c2c - 1ef4: 0001764c .word 0x0001764c - 1ef8: 1fff8844 .word 0x1fff8844 - 1efc: 00017c3c .word 0x00017c3c - 1f00: 00017cf4 .word 0x00017cf4 - 1f04: 00017660 .word 0x00017660 - -00001f08 : -{ - 1f08: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - uint32_t millis_begin = systick_millis_count; - 1f0c: 4da6 ldr r5, [pc, #664] ; (21a8 ) - 1f0e: 4ca7 ldr r4, [pc, #668] ; (21ac ) - 1f10: 682e ldr r6, [r5, #0] - uint8_t numbits(void) { return usb_cdc_line_coding[1] >> 16; } - uint8_t dtr(void) { return (usb_cdc_line_rtsdtr & USB_SERIAL_DTR) ? 1 : 0; } - uint8_t rts(void) { return (usb_cdc_line_rtsdtr & USB_SERIAL_RTS) ? 1 : 0; } - operator bool() { - yield(); - return usb_configuration && (usb_cdc_line_rtsdtr & USB_SERIAL_DTR) && - 1f12: 4fa7 ldr r7, [pc, #668] ; (21b0 ) - ((uint32_t)(systick_millis_count - usb_cdc_line_rtsdtr_millis) >= 15); - 1f14: f8df 929c ldr.w r9, [pc, #668] ; 21b4 - 1f18: b0ac sub sp, #176 ; 0xb0 - if (elapsed > 750) break; - 1f1a: f240 28ee movw r8, #750 ; 0x2ee - yield(); - 1f1e: f00c ff69 bl edf4 - return usb_configuration && (usb_cdc_line_rtsdtr & USB_SERIAL_DTR) && - 1f22: 7823 ldrb r3, [r4, #0] - 1f24: 2b00 cmp r3, #0 - 1f26: f000 835f beq.w 25e8 - 1f2a: 783b ldrb r3, [r7, #0] - 1f2c: 07db lsls r3, r3, #31 - 1f2e: f140 835b bpl.w 25e8 - ((uint32_t)(systick_millis_count - usb_cdc_line_rtsdtr_millis) >= 15); - 1f32: 682b ldr r3, [r5, #0] - 1f34: f8d9 2000 ldr.w r2, [r9] - 1f38: 1a9b subs r3, r3, r2 - return usb_configuration && (usb_cdc_line_rtsdtr & USB_SERIAL_DTR) && - 1f3a: 2b0e cmp r3, #14 - 1f3c: f240 8354 bls.w 25e8 - Serial2.begin(9600); - 1f40: 489d ldr r0, [pc, #628] ; (21b8 ) - 1f42: f44f 5116 mov.w r1, #9600 ; 0x2580 - 1f46: f009 fb3b bl b5c0 - IridiumSerial.begin(SBD_BAUD); - 1f4a: f44f 4196 mov.w r1, #19200 ; 0x4b00 - 1f4e: 489b ldr r0, [pc, #620] ; (21bc ) - 1f50: f009 fabe bl b4d0 - delay(1000); - 1f54: f44f 707a mov.w r0, #1000 ; 0x3e8 - 1f58: f00a fb82 bl c660 - virtual size_t write(const uint8_t *buffer, size_t size) { return usb_serial_write(buffer, size); } - 1f5c: 2108 movs r1, #8 - 1f5e: 4898 ldr r0, [pc, #608] ; (21c0 ) - 1f60: f00c fe42 bl ebe8 - 1f64: 4897 ldr r0, [pc, #604] ; (21c4 ) - 1f66: f009 fd23 bl b9b0 - gps_init(); //Setup the GPS - 1f6a: f7ff ff63 bl 1e34 - xbee.setSerial(Serial2); - 1f6e: 4992 ldr r1, [pc, #584] ; (21b8 ) - 1f70: 4895 ldr r0, [pc, #596] ; (21c8 ) - 1f72: f001 fb93 bl 369c - startBlinks(); - 1f76: f7ff fea9 bl 1ccc - SD.begin(chipSelect); - 1f7a: 2106 movs r1, #6 - 1f7c: 4893 ldr r0, [pc, #588] ; (21cc ) - 1f7e: f002 fff9 bl 4f74 - gpsLogFile = SD.open(gpsLogName, FILE_WRITE); - 1f82: 4b93 ldr r3, [pc, #588] ; (21d0 ) - SDFAT_FILE file = sdfs.open(filepath, flags); - 1f84: 4993 ldr r1, [pc, #588] ; (21d4 ) - 1f86: 681a ldr r2, [r3, #0] - 1f88: a818 add r0, sp, #96 ; 0x60 - 1f8a: f244 2302 movw r3, #16898 ; 0x4202 - 1f8e: f007 fbcf bl 9730 - 1f92: 9b2a ldr r3, [sp, #168] ; 0xa8 - 1f94: 2b00 cmp r3, #0 - 1f96: f000 8485 beq.w 28a4 - if (file) return File(new SDFile(file)); - 1f9a: 205c movs r0, #92 ; 0x5c - 1f9c: f00a f89c bl c0d8 -class Stream : public Print - 1fa0: f89d 306c ldrb.w r3, [sp, #108] ; 0x6c - 1fa4: 7503 strb r3, [r0, #20] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 1fa6: 4b8c ldr r3, [pc, #560] ; (21d8 ) -class Print - 1fa8: 9919 ldr r1, [sp, #100] ; 0x64 - 1faa: 6003 str r3, [r0, #0] - 1fac: 9a1a ldr r2, [sp, #104] ; 0x68 - 1fae: 4b8b ldr r3, [pc, #556] ; (21dc ) - 1fb0: 60c1 str r1, [r0, #12] -class FileImpl { - 1fb2: 2600 movs r6, #0 - 1fb4: ad1c add r5, sp, #112 ; 0x70 - if (file) return File(new SDFile(file)); - 1fb6: 4604 mov r4, r0 - 1fb8: 6083 str r3, [r0, #8] - 1fba: 6102 str r2, [r0, #16] - 1fbc: 6046 str r6, [r0, #4] - 1fbe: 4629 mov r1, r5 - 1fc0: 3018 adds r0, #24 - 1fc2: f007 fa6b bl 949c -class FsFile : public StreamFile { - 1fc6: 4b86 ldr r3, [pc, #536] ; (21e0 ) - 1fc8: 60a3 str r3, [r4, #8] - if (f) f->refcount++; - 1fca: 6863 ldr r3, [r4, #4] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 1fcc: 65a6 str r6, [r4, #88] ; 0x58 - 1fce: 3301 adds r3, #1 - 1fd0: 6063 str r3, [r4, #4] - if (f) { dec_refcount(); /*Serial.println("File move assignment autoclose");*/ } - 1fd2: 4f84 ldr r7, [pc, #528] ; (21e4 ) - 1fd4: f8df 8210 ldr.w r8, [pc, #528] ; 21e8 - 1fd8: f8cd 8060 str.w r8, [sp, #96] ; 0x60 - ~FsBaseFile() {close();} - 1fdc: 4628 mov r0, r5 - 1fde: f007 fa8b bl 94f8 - 1fe2: 693e ldr r6, [r7, #16] - 1fe4: b136 cbz r6, 1ff4 - if (--(f->refcount) == 0) { - 1fe6: 6873 ldr r3, [r6, #4] - 1fe8: 3b01 subs r3, #1 - 1fea: 6073 str r3, [r6, #4] - 1fec: 9300 str r3, [sp, #0] - 1fee: 2b00 cmp r3, #0 - 1ff0: f000 838c beq.w 270c - rxLogFile = SD.open(rxLogName, FILE_WRITE); - 1ff4: 4b7d ldr r3, [pc, #500] ; (21ec ) - SDFAT_FILE file = sdfs.open(filepath, flags); - 1ff6: 4977 ldr r1, [pc, #476] ; (21d4 ) - 1ff8: 681a ldr r2, [r3, #0] - f = file.f; - 1ffa: 613c str r4, [r7, #16] - 1ffc: f244 2302 movw r3, #16898 ; 0x4202 - 2000: a818 add r0, sp, #96 ; 0x60 - 2002: f007 fb95 bl 9730 - bool isOpen() const {return m_fFile || m_xFile;} - 2006: 9b2a ldr r3, [sp, #168] ; 0xa8 - 2008: 2b00 cmp r3, #0 - 200a: f000 8445 beq.w 2898 - if (file) return File(new SDFile(file)); - 200e: 205c movs r0, #92 ; 0x5c - 2010: f00a f862 bl c0d8 - 2014: 9b19 ldr r3, [sp, #100] ; 0x64 - 2016: 60c3 str r3, [r0, #12] - 2018: 9b1a ldr r3, [sp, #104] ; 0x68 - 201a: 6103 str r3, [r0, #16] - 201c: f89d 306c ldrb.w r3, [sp, #108] ; 0x6c - 2020: 7503 strb r3, [r0, #20] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 2022: 4b6d ldr r3, [pc, #436] ; (21d8 ) - 2024: 6003 str r3, [r0, #0] - if (file) return File(new SDFile(file)); - 2026: 4604 mov r4, r0 - 2028: 4b6c ldr r3, [pc, #432] ; (21dc ) - 202a: 6083 str r3, [r0, #8] -class FileImpl { - 202c: 2600 movs r6, #0 - 202e: 6046 str r6, [r0, #4] - 2030: 4629 mov r1, r5 - 2032: 3018 adds r0, #24 - 2034: f007 fa32 bl 949c - if (f) f->refcount++; - 2038: 6863 ldr r3, [r4, #4] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 203a: 65a6 str r6, [r4, #88] ; 0x58 - 203c: 3301 adds r3, #1 - 203e: 6063 str r3, [r4, #4] -class FsFile : public StreamFile { - 2040: 4b67 ldr r3, [pc, #412] ; (21e0 ) - 2042: 60a3 str r3, [r4, #8] - if (f) { dec_refcount(); /*Serial.println("File move assignment autoclose");*/ } - 2044: 4e6a ldr r6, [pc, #424] ; (21f0 ) - 2046: f8cd 8060 str.w r8, [sp, #96] ; 0x60 - ~FsBaseFile() {close();} - 204a: 4628 mov r0, r5 - 204c: f007 fa54 bl 94f8 - 2050: 6933 ldr r3, [r6, #16] - 2052: b133 cbz r3, 2062 - if (--(f->refcount) == 0) { - 2054: 685a ldr r2, [r3, #4] - 2056: 3a01 subs r2, #1 - 2058: 605a str r2, [r3, #4] - 205a: 9200 str r2, [sp, #0] - 205c: 2a00 cmp r2, #0 - 205e: f000 8313 beq.w 2688 - txLogFile = SD.open(txLogName, FILE_WRITE); - 2062: 4b64 ldr r3, [pc, #400] ; (21f4 ) - SDFAT_FILE file = sdfs.open(filepath, flags); - 2064: 495b ldr r1, [pc, #364] ; (21d4 ) - 2066: 681a ldr r2, [r3, #0] - f = file.f; - 2068: 6134 str r4, [r6, #16] - 206a: f244 2302 movw r3, #16898 ; 0x4202 - 206e: a818 add r0, sp, #96 ; 0x60 - 2070: f007 fb5e bl 9730 - bool isOpen() const {return m_fFile || m_xFile;} - 2074: 9b2a ldr r3, [sp, #168] ; 0xa8 - 2076: 2b00 cmp r3, #0 - 2078: f000 841b beq.w 28b2 - if (file) return File(new SDFile(file)); - 207c: 205c movs r0, #92 ; 0x5c - 207e: f00a f82b bl c0d8 - 2082: 9b19 ldr r3, [sp, #100] ; 0x64 - 2084: 60c3 str r3, [r0, #12] - 2086: 9b1a ldr r3, [sp, #104] ; 0x68 - 2088: 6103 str r3, [r0, #16] - 208a: f89d 306c ldrb.w r3, [sp, #108] ; 0x6c - 208e: 7503 strb r3, [r0, #20] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 2090: 4b51 ldr r3, [pc, #324] ; (21d8 ) - 2092: 6003 str r3, [r0, #0] - if (file) return File(new SDFile(file)); - 2094: 4604 mov r4, r0 - 2096: 4b51 ldr r3, [pc, #324] ; (21dc ) - 2098: 6083 str r3, [r0, #8] -class FileImpl { - 209a: f04f 0900 mov.w r9, #0 - 209e: f8c0 9004 str.w r9, [r0, #4] - 20a2: 4629 mov r1, r5 - 20a4: 3018 adds r0, #24 - 20a6: f007 f9f9 bl 949c - if (f) f->refcount++; - 20aa: 6863 ldr r3, [r4, #4] - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 20ac: f8c4 9058 str.w r9, [r4, #88] ; 0x58 - 20b0: 3301 adds r3, #1 - 20b2: 6063 str r3, [r4, #4] -class FsFile : public StreamFile { - 20b4: 4b4a ldr r3, [pc, #296] ; (21e0 ) - 20b6: 60a3 str r3, [r4, #8] - ~FsBaseFile() {close();} - 20b8: 4628 mov r0, r5 - if (f) { dec_refcount(); /*Serial.println("File move assignment autoclose");*/ } - 20ba: 4d4f ldr r5, [pc, #316] ; (21f8 ) - 20bc: f8cd 8060 str.w r8, [sp, #96] ; 0x60 - 20c0: f007 fa1a bl 94f8 - 20c4: 692b ldr r3, [r5, #16] - 20c6: b133 cbz r3, 20d6 - if (--(f->refcount) == 0) { - 20c8: 685a ldr r2, [r3, #4] - 20ca: 3a01 subs r2, #1 - 20cc: 605a str r2, [r3, #4] - 20ce: 9200 str r2, [sp, #0] - 20d0: 2a00 cmp r2, #0 - 20d2: f000 8297 beq.w 2604 - delay(10); - 20d6: 200a movs r0, #10 - f = file.f; - 20d8: 612c str r4, [r5, #16] - 20da: f00a fac1 bl c660 - return (f) ? f->write((void*)buf, size) : 0; - 20de: 693b ldr r3, [r7, #16] - 20e0: b16b cbz r3, 20fe - 20e2: 681a ldr r2, [r3, #0] - 20e4: 68d4 ldr r4, [r2, #12] - 20e6: 4a45 ldr r2, [pc, #276] ; (21fc ) - 20e8: 4294 cmp r4, r2 - 20ea: f040 8439 bne.w 2960 - return m_fFile ? m_fFile->write(buf, count) : - 20ee: 6d18 ldr r0, [r3, #80] ; 0x50 - 20f0: 2800 cmp r0, #0 - 20f2: f000 834d beq.w 2790 - 20f6: 4942 ldr r1, [pc, #264] ; (2200 ) - 20f8: 220c movs r2, #12 - 20fa: f005 fe55 bl 7da8 - size_t println(const char s[]) { return print(s) + println(); } - 20fe: 4839 ldr r0, [pc, #228] ; (21e4 ) - 2100: f009 fc56 bl b9b0 - 2104: 6933 ldr r3, [r6, #16] - 2106: b16b cbz r3, 2124 - 2108: 681a ldr r2, [r3, #0] - 210a: 68d4 ldr r4, [r2, #12] - 210c: 4a3b ldr r2, [pc, #236] ; (21fc ) - 210e: 4294 cmp r4, r2 - 2110: f040 841d bne.w 294e - 2114: 6d18 ldr r0, [r3, #80] ; 0x50 - 2116: 2800 cmp r0, #0 - 2118: f000 8331 beq.w 277e - 211c: 4939 ldr r1, [pc, #228] ; (2204 ) - 211e: 220b movs r2, #11 - 2120: f005 fe42 bl 7da8 - 2124: 4832 ldr r0, [pc, #200] ; (21f0 ) - 2126: f009 fc43 bl b9b0 - 212a: 692b ldr r3, [r5, #16] - 212c: b16b cbz r3, 214a - 212e: 681a ldr r2, [r3, #0] - 2130: 68d4 ldr r4, [r2, #12] - 2132: 4a32 ldr r2, [pc, #200] ; (21fc ) - 2134: 4294 cmp r4, r2 - 2136: f040 841c bne.w 2972 - 213a: 6d18 ldr r0, [r3, #80] ; 0x50 - 213c: 2800 cmp r0, #0 - 213e: f000 8345 beq.w 27cc - 2142: 4931 ldr r1, [pc, #196] ; (2208 ) - 2144: 220b movs r2, #11 - 2146: f005 fe2f bl 7da8 - 214a: 482b ldr r0, [pc, #172] ; (21f8 ) - 214c: f009 fc30 bl b9b0 - if (f) f->flush(); - 2150: 693b ldr r3, [r7, #16] - 2152: b15b cbz r3, 216c - 2154: 681a ldr r2, [r3, #0] - 2156: 492d ldr r1, [pc, #180] ; (220c ) - 2158: 6992 ldr r2, [r2, #24] - 215a: 428a cmp r2, r1 - 215c: f040 83fd bne.w 295a - return m_fFile ? m_fFile->sync() : - 2160: 6d18 ldr r0, [r3, #80] ; 0x50 - 2162: 2800 cmp r0, #0 - 2164: f000 831d beq.w 27a2 - 2168: f005 fd72 bl 7c50 - 216c: 6933 ldr r3, [r6, #16] - 216e: b15b cbz r3, 2188 - 2170: 681a ldr r2, [r3, #0] - 2172: 4926 ldr r1, [pc, #152] ; (220c ) - 2174: 6992 ldr r2, [r2, #24] - 2176: 428a cmp r2, r1 - 2178: f040 83e6 bne.w 2948 - 217c: 6d18 ldr r0, [r3, #80] ; 0x50 - 217e: 2800 cmp r0, #0 - 2180: f000 831d beq.w 27be - 2184: f005 fd64 bl 7c50 - 2188: 692b ldr r3, [r5, #16] - 218a: 2b00 cmp r3, #0 - 218c: d040 beq.n 2210 - 218e: 681a ldr r2, [r3, #0] - 2190: 491e ldr r1, [pc, #120] ; (220c ) - 2192: 6992 ldr r2, [r2, #24] - 2194: 428a cmp r2, r1 - 2196: f040 83e9 bne.w 296c - 219a: 6d18 ldr r0, [r3, #80] ; 0x50 - 219c: 2800 cmp r0, #0 - 219e: f000 8307 beq.w 27b0 - 21a2: f005 fd55 bl 7c50 - 21a6: e033 b.n 2210 - 21a8: 1fff978c .word 0x1fff978c - 21ac: 1fff9a28 .word 0x1fff9a28 - 21b0: 1fff9a4c .word 0x1fff9a4c - 21b4: 1fff9a50 .word 0x1fff9a50 - 21b8: 1fff87d8 .word 0x1fff87d8 - 21bc: 1fff87c4 .word 0x1fff87c4 - 21c0: 0001766c .word 0x0001766c - 21c4: 1fff8844 .word 0x1fff8844 - 21c8: 1fff91bc .word 0x1fff91bc - 21cc: 1fff92a0 .word 0x1fff92a0 - 21d0: 1fff8754 .word 0x1fff8754 - 21d4: 1fff92a4 .word 0x1fff92a4 - 21d8: 00017b64 .word 0x00017b64 - 21dc: 00017acc .word 0x00017acc - 21e0: 00017b14 .word 0x00017b14 - 21e4: 1fff8740 .word 0x1fff8740 - 21e8: 00017af0 .word 0x00017af0 - 21ec: 1fff8770 .word 0x1fff8770 - 21f0: 1fff875c .word 0x1fff875c - 21f4: 1fff8788 .word 0x1fff8788 - 21f8: 1fff8774 .word 0x1fff8774 - 21fc: 000009ad .word 0x000009ad - 2200: 00017678 .word 0x00017678 - 2204: 00017688 .word 0x00017688 - 2208: 00017694 .word 0x00017694 - 220c: 00000971 .word 0x00000971 - 2210: 2108 movs r1, #8 - 2212: 48ba ldr r0, [pc, #744] ; (24fc ) - 2214: f00c fce8 bl ebe8 - 2218: 48b9 ldr r0, [pc, #740] ; (2500 ) - 221a: f009 fbc9 bl b9b0 - logprintln("INIT_LOG_LOG"); - 221e: 49b9 ldr r1, [pc, #740] ; (2504 ) - 2220: a818 add r0, sp, #96 ; 0x60 - 2222: f009 fc9d bl bb60 - 2226: a818 add r0, sp, #96 ; 0x60 - 2228: f7fe ff18 bl 105c - 222c: a818 add r0, sp, #96 ; 0x60 - 222e: f009 fcd1 bl bbd4 - String("Init").getBytes(xbeeSendBuf,xbeeSendBufSize); //Convert "Init" 2 bytes, dump into Message buffer - 2232: 49b5 ldr r1, [pc, #724] ; (2508 ) - 2234: a818 add r0, sp, #96 ; 0x60 - 2236: f009 fc93 bl bb60 - 223a: 2300 movs r3, #0 - 223c: 2222 movs r2, #34 ; 0x22 - 223e: 49b3 ldr r1, [pc, #716] ; (250c ) - 2240: a818 add r0, sp, #96 ; 0x60 - 2242: f009 fdd7 bl bdf4 - 2246: a818 add r0, sp, #96 ; 0x60 - 2248: f009 fcc4 bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); //(Target,Message) - 224c: 49af ldr r1, [pc, #700] ; (250c ) - 224e: 48b0 ldr r0, [pc, #704] ; (2510 ) - 2250: f7ff f88c bl 136c - 2254: 2111 movs r1, #17 - 2256: 48af ldr r0, [pc, #700] ; (2514 ) - 2258: f00c fcc6 bl ebe8 - 225c: 48a8 ldr r0, [pc, #672] ; (2500 ) - 225e: f009 fba7 bl b9b0 - err = modem.begin(); - 2262: 48ad ldr r0, [pc, #692] ; (2518 ) - 2264: f002 fbc4 bl 49f0 - modem.useMSSTMWorkaround(false);//SUPER NF TESTTHIS TODO(2) - 2268: 2100 movs r1, #0 - err = modem.begin(); - 226a: 4604 mov r4, r0 - modem.useMSSTMWorkaround(false);//SUPER NF TESTTHIS TODO(2) - 226c: 48aa ldr r0, [pc, #680] ; (2518 ) - 226e: f001 fb69 bl 3944 - modem.adjustSendReceiveTimeout(120); - 2272: 48a9 ldr r0, [pc, #676] ; (2518 ) - 2274: 2178 movs r1, #120 ; 0x78 - 2276: f001 fb63 bl 3940 - if (err != ISBD_SUCCESS) - 227a: 2c00 cmp r4, #0 - 227c: f040 82e8 bne.w 2850 - 2280: 210d movs r1, #13 - 2282: 48a6 ldr r0, [pc, #664] ; (251c ) - err = modem.getSignalQuality(sbd_csq); - 2284: 4da6 ldr r5, [pc, #664] ; (2520 ) - 2286: f00c fcaf bl ebe8 - 228a: 489d ldr r0, [pc, #628] ; (2500 ) - 228c: f009 fb90 bl b9b0 - String("ModemStarted").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2290: 49a4 ldr r1, [pc, #656] ; (2524 ) - 2292: a818 add r0, sp, #96 ; 0x60 - 2294: f009 fc64 bl bb60 - 2298: 4623 mov r3, r4 - 229a: 2222 movs r2, #34 ; 0x22 - 229c: 499b ldr r1, [pc, #620] ; (250c ) - 229e: a818 add r0, sp, #96 ; 0x60 - 22a0: f009 fda8 bl bdf4 - 22a4: a818 add r0, sp, #96 ; 0x60 - 22a6: f009 fc95 bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 22aa: 4998 ldr r1, [pc, #608] ; (250c ) - 22ac: 4898 ldr r0, [pc, #608] ; (2510 ) - 22ae: f7ff f85d bl 136c - err = modem.getSignalQuality(sbd_csq); - 22b2: 4899 ldr r0, [pc, #612] ; (2518 ) - 22b4: 4629 mov r1, r5 - 22b6: f001 fda7 bl 3e08 - if (err != ISBD_SUCCESS) - 22ba: 4604 mov r4, r0 - 22bc: 2800 cmp r0, #0 - 22be: f040 828e bne.w 27de - 22c2: 211d movs r1, #29 - 22c4: 4898 ldr r0, [pc, #608] ; (2528 ) - 22c6: 4e99 ldr r6, [pc, #612] ; (252c ) - while((gpsInfo.GPSAlt<=0)||(gpsInfo.GPSAlt>100000)) //Outside of a reasonable range - 22c8: 4f99 ldr r7, [pc, #612] ; (2530 ) - 22ca: f00c fc8d bl ebe8 - size_t print(int n) { return print((long)n); } - 22ce: 6829 ldr r1, [r5, #0] - 22d0: 488b ldr r0, [pc, #556] ; (2500 ) - 22d2: f009 fb65 bl b9a0 - size_t println(int n) { return print(n) + println(); } - 22d6: 488a ldr r0, [pc, #552] ; (2500 ) - 22d8: f009 fb6a bl b9b0 - StringSumHelper(const char *p) : String(p) {} - 22dc: 4995 ldr r1, [pc, #596] ; (2534 ) - 22de: a815 add r0, sp, #84 ; 0x54 - 22e0: f009 fc3e bl bb60 - String("ModemCSQ:"+String(sbd_csq)).getBytes(xbeeSendBuf,xbeeSendBufSize); - 22e4: 220a movs r2, #10 - 22e6: 6829 ldr r1, [r5, #0] - 22e8: a812 add r0, sp, #72 ; 0x48 - 22ea: f009 fcc7 bl bc7c - 22ee: a912 add r1, sp, #72 ; 0x48 - 22f0: a815 add r0, sp, #84 ; 0x54 - 22f2: f009 fd69 bl bdc8 - 22f6: 4601 mov r1, r0 - 22f8: a818 add r0, sp, #96 ; 0x60 - 22fa: f009 fc4f bl bb9c - 22fe: 4623 mov r3, r4 - 2300: 2222 movs r2, #34 ; 0x22 - 2302: 4982 ldr r1, [pc, #520] ; (250c ) - 2304: a818 add r0, sp, #96 ; 0x60 - 2306: f009 fd75 bl bdf4 - 230a: a818 add r0, sp, #96 ; 0x60 - 230c: f009 fc62 bl bbd4 - 2310: a812 add r0, sp, #72 ; 0x48 - 2312: f009 fc5f bl bbd4 -class StringSumHelper : public String - 2316: a815 add r0, sp, #84 ; 0x54 - 2318: f009 fc5c bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 231c: 497b ldr r1, [pc, #492] ; (250c ) - 231e: 487c ldr r0, [pc, #496] ; (2510 ) - 2320: f7ff f824 bl 136c - String("GPS_Acquisition_Phase").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2324: 4984 ldr r1, [pc, #528] ; (2538 ) - 2326: a818 add r0, sp, #96 ; 0x60 - 2328: f009 fc1a bl bb60 - 232c: 4623 mov r3, r4 - 232e: 2222 movs r2, #34 ; 0x22 - 2330: 4976 ldr r1, [pc, #472] ; (250c ) - 2332: a818 add r0, sp, #96 ; 0x60 - 2334: f009 fd5e bl bdf4 - 2338: a818 add r0, sp, #96 ; 0x60 - 233a: f009 fc4b bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 233e: 4973 ldr r1, [pc, #460] ; (250c ) - 2340: 4873 ldr r0, [pc, #460] ; (2510 ) - 2342: f7ff f813 bl 136c -String gpsPacket; - 2346: 4621 mov r1, r4 - 2348: a809 add r0, sp, #36 ; 0x24 - 234a: f009 fc09 bl bb60 - 234e: 2109 movs r1, #9 - 2350: 487a ldr r0, [pc, #488] ; (253c ) - if (gps.encode(gpsserial.read())){ - 2352: 4c7b ldr r4, [pc, #492] ; (2540 ) - 2354: f00c fc48 bl ebe8 - size_t println(const char s[]) { return print(s) + println(); } - 2358: 4869 ldr r0, [pc, #420] ; (2500 ) - 235a: f009 fb29 bl b9b0 - while((gpsInfo.GPSAlt<=0)||(gpsInfo.GPSAlt>100000)) //Outside of a reasonable range - 235e: 68f3 ldr r3, [r6, #12] - 2360: 3b01 subs r3, #1 - 2362: 42bb cmp r3, r7 - 2364: d91b bls.n 239e - virtual int available(void) { return serial3_available(); } - 2366: f00b fd63 bl de30 - while (gpsserial.available()){ - 236a: 2800 cmp r0, #0 - 236c: d0f7 beq.n 235e - virtual int read(void) { return serial3_getchar(); } - 236e: f00b fd73 bl de58 - if (gps.encode(gpsserial.read())){ - 2372: b2c1 uxtb r1, r0 - 2374: 4620 mov r0, r4 - 2376: f008 ff89 bl b28c - 237a: 2800 cmp r0, #0 - 237c: d0f3 beq.n 2366 - gpsInfo = getGPS(); - 237e: a802 add r0, sp, #8 - 2380: f7ff fc32 bl 1be8 - 2384: f10d 0c08 add.w ip, sp, #8 - 2388: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} - 238c: 4d67 ldr r5, [pc, #412] ; (252c ) - 238e: c50f stmia r5!, {r0, r1, r2, r3} - 2390: f8dc 3000 ldr.w r3, [ip] - 2394: 602b str r3, [r5, #0] - while((gpsInfo.GPSAlt<=0)||(gpsInfo.GPSAlt>100000)) //Outside of a reasonable range - 2396: 68f3 ldr r3, [r6, #12] - 2398: 3b01 subs r3, #1 - 239a: 42bb cmp r3, r7 - 239c: d8e3 bhi.n 2366 - gpsPacket = String(gpsInfo.GPSTime)+","+String(gpsInfo.GPSLat,4)+","+String(gpsInfo.GPSLon,4)+","+String(gpsInfo.GPSAlt); - 239e: 220a movs r2, #10 - 23a0: 68b1 ldr r1, [r6, #8] - 23a2: a80c add r0, sp, #48 ; 0x30 - 23a4: f009 fc96 bl bcd4 - StringSumHelper(const String &s) : String(s) {} - 23a8: a90c add r1, sp, #48 ; 0x30 - 23aa: a80f add r0, sp, #60 ; 0x3c - 23ac: f009 fbf6 bl bb9c - 23b0: 4964 ldr r1, [pc, #400] ; (2544 ) - 23b2: a80f add r0, sp, #60 ; 0x3c - 23b4: f009 fd10 bl bdd8 - 23b8: 2204 movs r2, #4 - 23ba: 4604 mov r4, r0 - 23bc: 6831 ldr r1, [r6, #0] - 23be: a812 add r0, sp, #72 ; 0x48 - 23c0: f009 fc9e bl bd00 - 23c4: a912 add r1, sp, #72 ; 0x48 - 23c6: 4620 mov r0, r4 - 23c8: f009 fcfe bl bdc8 - 23cc: 495d ldr r1, [pc, #372] ; (2544 ) - 23ce: f009 fd03 bl bdd8 - 23d2: 2204 movs r2, #4 - 23d4: 4604 mov r4, r0 - 23d6: 6871 ldr r1, [r6, #4] - 23d8: a815 add r0, sp, #84 ; 0x54 - 23da: f009 fc91 bl bd00 - 23de: a915 add r1, sp, #84 ; 0x54 - 23e0: 4620 mov r0, r4 - 23e2: f009 fcf1 bl bdc8 - 23e6: 4957 ldr r1, [pc, #348] ; (2544 ) - 23e8: f009 fcf6 bl bdd8 - 23ec: 220a movs r2, #10 - 23ee: 4604 mov r4, r0 - 23f0: 68f1 ldr r1, [r6, #12] - 23f2: a818 add r0, sp, #96 ; 0x60 - 23f4: f009 fc58 bl bca8 - 23f8: a918 add r1, sp, #96 ; 0x60 - 23fa: 4620 mov r0, r4 - 23fc: f009 fce4 bl bdc8 - 2400: 4601 mov r1, r0 - 2402: a809 add r0, sp, #36 ; 0x24 - 2404: f009 fc98 bl bd38 - 2408: a818 add r0, sp, #96 ; 0x60 - 240a: f009 fbe3 bl bbd4 - 240e: a815 add r0, sp, #84 ; 0x54 - 2410: f009 fbe0 bl bbd4 - 2414: a812 add r0, sp, #72 ; 0x48 - 2416: f009 fbdd bl bbd4 -class StringSumHelper : public String - 241a: a80f add r0, sp, #60 ; 0x3c - 241c: f009 fbda bl bbd4 - 2420: a80c add r0, sp, #48 ; 0x30 - 2422: f009 fbd7 bl bbd4 - size_t println(const String &s) { return print(s) + println(); } - 2426: a909 add r1, sp, #36 ; 0x24 - 2428: 4847 ldr r0, [pc, #284] ; (2548 ) - 242a: f009 fa93 bl b954 - 242e: 4846 ldr r0, [pc, #280] ; (2548 ) - 2430: f009 fabe bl b9b0 - logprintln("GotLock"); - 2434: 4945 ldr r1, [pc, #276] ; (254c ) - 2436: a818 add r0, sp, #96 ; 0x60 - 2438: f009 fb92 bl bb60 - 243c: a818 add r0, sp, #96 ; 0x60 - 243e: f7fe fe0d bl 105c - 2442: a818 add r0, sp, #96 ; 0x60 - 2444: f009 fbc6 bl bbd4 - 2448: 2405 movs r4, #5 - delay(500); - 244a: f44f 70fa mov.w r0, #500 ; 0x1f4 - 244e: f00a f907 bl c660 - digitalWrite(greenLED, HIGH); - 2452: 2101 movs r1, #1 - 2454: 2004 movs r0, #4 - 2456: f00a f893 bl c580 - delay(250); - 245a: 20fa movs r0, #250 ; 0xfa - 245c: f00a f900 bl c660 - digitalWrite(greenLED, LOW); - 2460: 2100 movs r1, #0 - 2462: 2004 movs r0, #4 - 2464: f00a f88c bl c580 - for (int i = 0; i < 5; i++) - 2468: 3c01 subs r4, #1 - 246a: d1ee bne.n 244a - StringSumHelper(const char *p) : String(p) {} - 246c: 4938 ldr r1, [pc, #224] ; (2550 ) - 246e: a818 add r0, sp, #96 ; 0x60 - 2470: f009 fb76 bl bb60 - OutputSerial.println("gpsPacket " +String(gpsPacket)); - 2474: a909 add r1, sp, #36 ; 0x24 - 2476: a815 add r0, sp, #84 ; 0x54 - 2478: f009 fb90 bl bb9c - 247c: a915 add r1, sp, #84 ; 0x54 - 247e: a818 add r0, sp, #96 ; 0x60 - 2480: f009 fca2 bl bdc8 - 2484: 4601 mov r1, r0 - 2486: 481e ldr r0, [pc, #120] ; (2500 ) - 2488: f009 fa64 bl b954 - 248c: 481c ldr r0, [pc, #112] ; (2500 ) - 248e: f009 fa8f bl b9b0 - 2492: a815 add r0, sp, #84 ; 0x54 - 2494: f009 fb9e bl bbd4 -class StringSumHelper : public String - 2498: a818 add r0, sp, #96 ; 0x60 - 249a: f009 fb9b bl bbd4 - String("gotLock").getBytes(xbeeSendBuf,xbeeSendBufSize); - 249e: 492d ldr r1, [pc, #180] ; (2554 ) - 24a0: a818 add r0, sp, #96 ; 0x60 - 24a2: f009 fb5d bl bb60 - 24a6: 4623 mov r3, r4 - 24a8: 2222 movs r2, #34 ; 0x22 - 24aa: 4918 ldr r1, [pc, #96] ; (250c ) - 24ac: a818 add r0, sp, #96 ; 0x60 - 24ae: f009 fca1 bl bdf4 - 24b2: a818 add r0, sp, #96 ; 0x60 - 24b4: f009 fb8e bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 24b8: 4914 ldr r1, [pc, #80] ; (250c ) - 24ba: 4815 ldr r0, [pc, #84] ; (2510 ) - 24bc: f7fe ff56 bl 136c - 24c0: 213f movs r1, #63 ; 0x3f - 24c2: 4825 ldr r0, [pc, #148] ; (2558 ) - 24c4: f00c fb90 bl ebe8 - {getBytes((unsigned char *)buf, bufsize, index);} - 24c8: 4623 mov r3, r4 - 24ca: 2231 movs r2, #49 ; 0x31 - 24cc: a809 add r0, sp, #36 ; 0x24 - 24ce: a918 add r1, sp, #96 ; 0x60 - 24d0: f009 fc90 bl bdf4 - err = modem.sendSBDText(sbd_buf);//Sends an initial packet AFTER gps has locked. - 24d4: 4810 ldr r0, [pc, #64] ; (2518 ) - 24d6: a918 add r1, sp, #96 ; 0x60 - 24d8: f002 f8c8 bl 466c - if (err != ISBD_SUCCESS) - 24dc: 4604 mov r4, r0 - 24de: 2800 cmp r0, #0 - 24e0: f000 81ed beq.w 28be - StringSumHelper(const char *p) : String(p) {} - 24e4: 491d ldr r1, [pc, #116] ; (255c ) - 24e6: a815 add r0, sp, #84 ; 0x54 - 24e8: f009 fb3a bl bb60 - OutputSerial.println("sendSBDText failed: error "+String(err)); - 24ec: 220a movs r2, #10 - 24ee: 4621 mov r1, r4 - 24f0: a812 add r0, sp, #72 ; 0x48 - 24f2: f009 fbc3 bl bc7c - 24f6: a912 add r1, sp, #72 ; 0x48 - 24f8: e032 b.n 2560 - 24fa: bf00 nop - 24fc: 000176a0 .word 0x000176a0 - 2500: 1fff8844 .word 0x1fff8844 - 2504: 000176ac .word 0x000176ac - 2508: 000176bc .word 0x000176bc - 250c: 1fff9274 .word 0x1fff9274 - 2510: 417b4a36 .word 0x417b4a36 - 2514: 000176c4 .word 0x000176c4 - 2518: 1fff9114 .word 0x1fff9114 - 251c: 00017714 .word 0x00017714 - 2520: 1fff91ac .word 0x1fff91ac - 2524: 00017724 .word 0x00017724 - 2528: 00017754 .word 0x00017754 - 252c: 1fff872c .word 0x1fff872c - 2530: 0001869f .word 0x0001869f - 2534: 00017774 .word 0x00017774 - 2538: 00017780 .word 0x00017780 - 253c: 00017798 .word 0x00017798 - 2540: 1fff9030 .word 0x1fff9030 - 2544: 00017644 .word 0x00017644 - 2548: 1fff8774 .word 0x1fff8774 - 254c: 000177a4 .word 0x000177a4 - 2550: 000177ac .word 0x000177ac - 2554: 000177b8 .word 0x000177b8 - 2558: 000177c0 .word 0x000177c0 - 255c: 00017800 .word 0x00017800 - 2560: a815 add r0, sp, #84 ; 0x54 - 2562: f009 fc31 bl bdc8 - 2566: 4601 mov r1, r0 - 2568: 48ac ldr r0, [pc, #688] ; (281c ) - 256a: f009 f9f3 bl b954 - 256e: 48ab ldr r0, [pc, #684] ; (281c ) - 2570: f009 fa1e bl b9b0 - 2574: a812 add r0, sp, #72 ; 0x48 - 2576: f009 fb2d bl bbd4 -class StringSumHelper : public String - 257a: a815 add r0, sp, #84 ; 0x54 - 257c: f009 fb2a bl bbd4 - OutputSerial.println(); - 2580: 48a6 ldr r0, [pc, #664] ; (281c ) - 2582: f009 fa15 bl b9b0 - logprint("sendSBDText failed: error "); - 2586: 49a6 ldr r1, [pc, #664] ; (2820 ) - 2588: a815 add r0, sp, #84 ; 0x54 - 258a: f009 fae9 bl bb60 - 258e: a815 add r0, sp, #84 ; 0x54 - 2590: f7fe fca4 bl edc - 2594: a815 add r0, sp, #84 ; 0x54 - 2596: f009 fb1d bl bbd4 - logprintln(err); - 259a: 4620 mov r0, r4 - 259c: f7fe fe22 bl 11e4 - if (err == ISBD_SENDRECEIVE_TIMEOUT) - 25a0: 2c07 cmp r4, #7 - 25a2: f000 81f5 beq.w 2990 - logprintln("Try again with a better view of the sky."); - 25a6: 499f ldr r1, [pc, #636] ; (2824 ) - 25a8: a815 add r0, sp, #84 ; 0x54 - 25aa: f009 fad9 bl bb60 - 25ae: a815 add r0, sp, #84 ; 0x54 - 25b0: f7fe fd54 bl 105c - 25b4: a815 add r0, sp, #84 ; 0x54 - 25b6: f009 fb0d bl bbd4 - String("EnteringLoop").getBytes(xbeeSendBuf,xbeeSendBufSize); - 25ba: 499b ldr r1, [pc, #620] ; (2828 ) - 25bc: a815 add r0, sp, #84 ; 0x54 - 25be: f009 facf bl bb60 - 25c2: 2300 movs r3, #0 - 25c4: 2222 movs r2, #34 ; 0x22 - 25c6: 4999 ldr r1, [pc, #612] ; (282c ) - 25c8: a815 add r0, sp, #84 ; 0x54 - 25ca: f009 fc13 bl bdf4 - 25ce: a815 add r0, sp, #84 ; 0x54 - 25d0: f009 fb00 bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 25d4: 4995 ldr r1, [pc, #596] ; (282c ) - 25d6: 4896 ldr r0, [pc, #600] ; (2830 ) - 25d8: f7fe fec8 bl 136c -} - 25dc: a809 add r0, sp, #36 ; 0x24 - 25de: f009 faf9 bl bbd4 - 25e2: b02c add sp, #176 ; 0xb0 - 25e4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - uint32_t elapsed = systick_millis_count - millis_begin; - 25e8: 682b ldr r3, [r5, #0] - if (usb_configuration) { - 25ea: 7822 ldrb r2, [r4, #0] - uint32_t elapsed = systick_millis_count - millis_begin; - 25ec: 1b9b subs r3, r3, r6 - if (usb_configuration) { - 25ee: b132 cbz r2, 25fe - if (elapsed > 2000) break; - 25f0: f5b3 6ffa cmp.w r3, #2000 ; 0x7d0 - 25f4: f63f aca4 bhi.w 1f40 - yield(); - 25f8: f00c fbfc bl edf4 - 25fc: e48f b.n 1f1e - if (elapsed > 750) break; - 25fe: 4543 cmp r3, r8 - 2600: d9fa bls.n 25f8 - 2602: e49d b.n 1f40 - f->close(); - 2604: 6819 ldr r1, [r3, #0] - 2606: 488b ldr r0, [pc, #556] ; (2834 ) - 2608: 6ac9 ldr r1, [r1, #44] ; 0x2c - 260a: 4281 cmp r1, r0 - 260c: f040 81b7 bne.w 297e - if (filename) { - 2610: 6d98 ldr r0, [r3, #88] ; 0x58 - 2612: b128 cbz r0, 2620 - 2614: 9301 str r3, [sp, #4] - free(filename); - 2616: f00d fd53 bl 100c0 - filename = nullptr; - 261a: e9dd 2300 ldrd r2, r3, [sp] - 261e: 659a str r2, [r3, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - 2620: 6d1a ldr r2, [r3, #80] ; 0x50 - 2622: 2a00 cmp r2, #0 - 2624: f000 8186 beq.w 2934 - sdfatfile.close(); - 2628: f103 0018 add.w r0, r3, #24 - 262c: f006 ff64 bl 94f8 - delete f; - 2630: f8d5 9010 ldr.w r9, [r5, #16] - 2634: f1b9 0f00 cmp.w r9, #0 - 2638: f43f ad4d beq.w 20d6 - 263c: f8d9 3000 ldr.w r3, [r9] - 2640: 4a7d ldr r2, [pc, #500] ; (2838 ) - 2642: 685b ldr r3, [r3, #4] - 2644: 4293 cmp r3, r2 - 2646: f040 81c0 bne.w 29ca - if (filename) { - 264a: f8d9 0058 ldr.w r0, [r9, #88] ; 0x58 - virtual ~SDFile(void) { - 264e: 4b7b ldr r3, [pc, #492] ; (283c ) - 2650: f8c9 3000 str.w r3, [r9] - if (filename) { - 2654: b120 cbz r0, 2660 - free(filename); - 2656: f00d fd33 bl 100c0 - filename = nullptr; - 265a: 2300 movs r3, #0 - 265c: f8c9 3058 str.w r3, [r9, #88] ; 0x58 - 2660: f8d9 3050 ldr.w r3, [r9, #80] ; 0x50 - sdfatfile.close(); - 2664: f109 0a18 add.w sl, r9, #24 - 2668: 2b00 cmp r3, #0 - 266a: f000 8199 beq.w 29a0 - 266e: 4650 mov r0, sl - 2670: f006 ff42 bl 94f8 - 2674: f8c9 8008 str.w r8, [r9, #8] - ~FsBaseFile() {close();} - 2678: 4650 mov r0, sl - 267a: f006 ff3d bl 94f8 - } - 267e: 4648 mov r0, r9 - 2680: 215c movs r1, #92 ; 0x5c - 2682: f009 fd2b bl c0dc - 2686: e526 b.n 20d6 - f->close(); - 2688: 6819 ldr r1, [r3, #0] - 268a: 486a ldr r0, [pc, #424] ; (2834 ) - 268c: 6ac9 ldr r1, [r1, #44] ; 0x2c - 268e: 4281 cmp r1, r0 - 2690: f040 817b bne.w 298a - if (filename) { - 2694: 6d98 ldr r0, [r3, #88] ; 0x58 - 2696: b128 cbz r0, 26a4 - 2698: 9301 str r3, [sp, #4] - free(filename); - 269a: f00d fd11 bl 100c0 - filename = nullptr; - 269e: e9dd 2300 ldrd r2, r3, [sp] - 26a2: 659a str r2, [r3, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - 26a4: 6d1a ldr r2, [r3, #80] ; 0x50 - 26a6: 2a00 cmp r2, #0 - 26a8: f000 813f beq.w 292a - sdfatfile.close(); - 26ac: f103 0018 add.w r0, r3, #24 - 26b0: f006 ff22 bl 94f8 - delete f; - 26b4: f8d6 9010 ldr.w r9, [r6, #16] - 26b8: f1b9 0f00 cmp.w r9, #0 - 26bc: f43f acd1 beq.w 2062 - 26c0: f8d9 3000 ldr.w r3, [r9] - 26c4: 4a5c ldr r2, [pc, #368] ; (2838 ) - 26c6: 685b ldr r3, [r3, #4] - 26c8: 4293 cmp r3, r2 - 26ca: f040 8182 bne.w 29d2 - if (filename) { - 26ce: f8d9 0058 ldr.w r0, [r9, #88] ; 0x58 - virtual ~SDFile(void) { - 26d2: 4b5a ldr r3, [pc, #360] ; (283c ) - 26d4: f8c9 3000 str.w r3, [r9] - if (filename) { - 26d8: b120 cbz r0, 26e4 - free(filename); - 26da: f00d fcf1 bl 100c0 - filename = nullptr; - 26de: 2300 movs r3, #0 - 26e0: f8c9 3058 str.w r3, [r9, #88] ; 0x58 - 26e4: f8d9 3050 ldr.w r3, [r9, #80] ; 0x50 - sdfatfile.close(); - 26e8: f109 0a18 add.w sl, r9, #24 - 26ec: 2b00 cmp r3, #0 - 26ee: f000 815d beq.w 29ac - 26f2: 4650 mov r0, sl - 26f4: f006 ff00 bl 94f8 - 26f8: f8c9 8008 str.w r8, [r9, #8] - ~FsBaseFile() {close();} - 26fc: 4650 mov r0, sl - 26fe: f006 fefb bl 94f8 - } - 2702: 4648 mov r0, r9 - 2704: 215c movs r1, #92 ; 0x5c - 2706: f009 fce9 bl c0dc - 270a: e4aa b.n 2062 - f->close(); - 270c: 6832 ldr r2, [r6, #0] - 270e: 4949 ldr r1, [pc, #292] ; (2834 ) - 2710: 6ad2 ldr r2, [r2, #44] ; 0x2c - 2712: 428a cmp r2, r1 - 2714: f040 8136 bne.w 2984 - if (filename) { - 2718: 6db0 ldr r0, [r6, #88] ; 0x58 - 271a: b118 cbz r0, 2724 - free(filename); - 271c: f00d fcd0 bl 100c0 - filename = nullptr; - 2720: 9b00 ldr r3, [sp, #0] - 2722: 65b3 str r3, [r6, #88] ; 0x58 - bool isOpen() const {return m_fFile || m_xFile;} - 2724: 6d33 ldr r3, [r6, #80] ; 0x50 - 2726: 2b00 cmp r3, #0 - 2728: f000 8109 beq.w 293e - sdfatfile.close(); - 272c: f106 0018 add.w r0, r6, #24 - 2730: f006 fee2 bl 94f8 - delete f; - 2734: 693e ldr r6, [r7, #16] - 2736: 2e00 cmp r6, #0 - 2738: f43f ac5c beq.w 1ff4 - 273c: 6833 ldr r3, [r6, #0] - 273e: 4a3e ldr r2, [pc, #248] ; (2838 ) - 2740: 685b ldr r3, [r3, #4] - 2742: 4293 cmp r3, r2 - 2744: f040 813d bne.w 29c2 - if (filename) { - 2748: 6db0 ldr r0, [r6, #88] ; 0x58 - virtual ~SDFile(void) { - 274a: 4b3c ldr r3, [pc, #240] ; (283c ) - 274c: 6033 str r3, [r6, #0] - if (filename) { - 274e: b118 cbz r0, 2758 - free(filename); - 2750: f00d fcb6 bl 100c0 - filename = nullptr; - 2754: 2300 movs r3, #0 - 2756: 65b3 str r3, [r6, #88] ; 0x58 - 2758: 6d33 ldr r3, [r6, #80] ; 0x50 - sdfatfile.close(); - 275a: f106 0918 add.w r9, r6, #24 - 275e: 2b00 cmp r3, #0 - 2760: f000 812a beq.w 29b8 - 2764: 4648 mov r0, r9 - 2766: f006 fec7 bl 94f8 - 276a: f8c6 8008 str.w r8, [r6, #8] - ~FsBaseFile() {close();} - 276e: 4648 mov r0, r9 - 2770: f006 fec2 bl 94f8 - } - 2774: 4630 mov r0, r6 - 2776: 215c movs r1, #92 ; 0x5c - 2778: f009 fcb0 bl c0dc - 277c: e43a b.n 1ff4 - 277e: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 2780: 2800 cmp r0, #0 - 2782: f43f accf beq.w 2124 - 2786: 492e ldr r1, [pc, #184] ; (2840 ) - 2788: 220b movs r2, #11 - 278a: f003 fc9b bl 60c4 - 278e: e4c9 b.n 2124 - 2790: 6d58 ldr r0, [r3, #84] ; 0x54 - 2792: 2800 cmp r0, #0 - 2794: f43f acb3 beq.w 20fe - 2798: 492a ldr r1, [pc, #168] ; (2844 ) - 279a: 220c movs r2, #12 - 279c: f003 fc92 bl 60c4 - 27a0: e4ad b.n 20fe - 27a2: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->sync() : false; - 27a4: 2800 cmp r0, #0 - 27a6: f43f ace1 beq.w 216c - 27aa: f003 fa1f bl 5bec - 27ae: e4dd b.n 216c - 27b0: 6d58 ldr r0, [r3, #84] ; 0x54 - 27b2: 2800 cmp r0, #0 - 27b4: f43f ad2c beq.w 2210 - 27b8: f003 fa18 bl 5bec - 27bc: e528 b.n 2210 - 27be: 6d58 ldr r0, [r3, #84] ; 0x54 - 27c0: 2800 cmp r0, #0 - 27c2: f43f ace1 beq.w 2188 - 27c6: f003 fa11 bl 5bec - 27ca: e4dd b.n 2188 - 27cc: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 27ce: 2800 cmp r0, #0 - 27d0: f43f acbb beq.w 214a - 27d4: 491c ldr r1, [pc, #112] ; (2848 ) - 27d6: 220b movs r2, #11 - 27d8: f003 fc74 bl 60c4 - 27dc: e4b5 b.n 214a - virtual size_t write(const uint8_t *buffer, size_t size) { return usb_serial_write(buffer, size); } - 27de: 211c movs r1, #28 - 27e0: 481a ldr r0, [pc, #104] ; (284c ) - 27e2: f00c fa01 bl ebe8 - size_t print(int n) { return print((long)n); } - 27e6: 4621 mov r1, r4 - 27e8: 480c ldr r0, [pc, #48] ; (281c ) - 27ea: f009 f8d9 bl b9a0 - size_t println(int n) { return print(n) + println(); } - 27ee: 480b ldr r0, [pc, #44] ; (281c ) - 27f0: f009 f8de bl b9b0 - logprint("SignalQuality failed: error "); - 27f4: 4915 ldr r1, [pc, #84] ; (284c ) - 27f6: a818 add r0, sp, #96 ; 0x60 - 27f8: f009 f9b2 bl bb60 - 27fc: a818 add r0, sp, #96 ; 0x60 - 27fe: f7fe fb6d bl edc - 2802: a818 add r0, sp, #96 ; 0x60 - 2804: f009 f9e6 bl bbd4 - logprintln(err); - 2808: 4620 mov r0, r4 - 280a: f7fe fceb bl 11e4 - sbd_csq = -1; - 280e: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 2812: 602b str r3, [r5, #0] -} - 2814: b02c add sp, #176 ; 0xb0 - 2816: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 281a: bf00 nop - 281c: 1fff8844 .word 0x1fff8844 - 2820: 00017800 .word 0x00017800 - 2824: 0001781c .word 0x0001781c - 2828: 0001785c .word 0x0001785c - 282c: 1fff9274 .word 0x1fff9274 - 2830: 417b4a36 .word 0x417b4a36 - 2834: 00000475 .word 0x00000475 - 2838: 00000b71 .word 0x00000b71 - 283c: 00017b64 .word 0x00017b64 - 2840: 00017688 .word 0x00017688 - 2844: 00017678 .word 0x00017678 - 2848: 00017694 .word 0x00017694 - 284c: 00017734 .word 0x00017734 - 2850: 2114 movs r1, #20 - 2852: 4862 ldr r0, [pc, #392] ; (29dc ) - 2854: f00c f9c8 bl ebe8 - size_t print(int n) { return print((long)n); } - 2858: 4621 mov r1, r4 - 285a: 4861 ldr r0, [pc, #388] ; (29e0 ) - 285c: f009 f8a0 bl b9a0 - size_t println(int n) { return print(n) + println(); } - 2860: 485f ldr r0, [pc, #380] ; (29e0 ) - 2862: f009 f8a5 bl b9b0 - logprint("Begin failed: error "); - 2866: 495d ldr r1, [pc, #372] ; (29dc ) - 2868: a818 add r0, sp, #96 ; 0x60 - 286a: f009 f979 bl bb60 - 286e: a818 add r0, sp, #96 ; 0x60 - 2870: f7fe fb34 bl edc - 2874: a818 add r0, sp, #96 ; 0x60 - 2876: f009 f9ad bl bbd4 - logprintln(err); - 287a: 4620 mov r0, r4 - 287c: f7fe fcb2 bl 11e4 - if ((err == ISBD_NO_MODEM_DETECTED) || (err == 5)) - 2880: 2c05 cmp r4, #5 - 2882: d1c7 bne.n 2814 - 2884: 2120 movs r1, #32 - 2886: 4857 ldr r0, [pc, #348] ; (29e4 ) - 2888: f00c f9ae bl ebe8 - size_t println(const char s[]) { return print(s) + println(); } - 288c: 4854 ldr r0, [pc, #336] ; (29e0 ) -} - 288e: b02c add sp, #176 ; 0xb0 - 2890: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 2894: f009 b88c b.w b9b0 - bool isOpen() const {return m_fFile || m_xFile;} - 2898: 9c2b ldr r4, [sp, #172] ; 0xac - 289a: 2c00 cmp r4, #0 - 289c: f47f abb7 bne.w 200e - 28a0: f7ff bbd0 b.w 2044 - 28a4: 9c2b ldr r4, [sp, #172] ; 0xac - 28a6: 2c00 cmp r4, #0 - 28a8: f47f ab77 bne.w 1f9a - 28ac: ad1c add r5, sp, #112 ; 0x70 - 28ae: f7ff bb90 b.w 1fd2 - 28b2: 9c2b ldr r4, [sp, #172] ; 0xac - 28b4: 2c00 cmp r4, #0 - 28b6: f47f abe1 bne.w 207c - 28ba: f7ff bbfd b.w 20b8 - StringSumHelper(const char *p) : String(p) {} - 28be: 494a ldr r1, [pc, #296] ; (29e8 ) - 28c0: a815 add r0, sp, #84 ; 0x54 - 28c2: f009 f94d bl bb60 - OutputSerial.println("Success, sent = "+String(sbd_buf)); - 28c6: a918 add r1, sp, #96 ; 0x60 - 28c8: a812 add r0, sp, #72 ; 0x48 - 28ca: f009 f949 bl bb60 - 28ce: a912 add r1, sp, #72 ; 0x48 - 28d0: a815 add r0, sp, #84 ; 0x54 - 28d2: f009 fa79 bl bdc8 - 28d6: 4601 mov r1, r0 - size_t println(const String &s) { return print(s) + println(); } - 28d8: 4841 ldr r0, [pc, #260] ; (29e0 ) - 28da: f009 f83b bl b954 - 28de: 4840 ldr r0, [pc, #256] ; (29e0 ) - 28e0: f009 f866 bl b9b0 - 28e4: a812 add r0, sp, #72 ; 0x48 - 28e6: f009 f975 bl bbd4 -class StringSumHelper : public String - 28ea: a815 add r0, sp, #84 ; 0x54 - 28ec: f009 f972 bl bbd4 - StringSumHelper(const char *p) : String(p) {} - 28f0: 493d ldr r1, [pc, #244] ; (29e8 ) - 28f2: a812 add r0, sp, #72 ; 0x48 - 28f4: f009 f934 bl bb60 - logprintln("Success, sent = "+String(sbd_buf)); - 28f8: a918 add r1, sp, #96 ; 0x60 - 28fa: a80f add r0, sp, #60 ; 0x3c - 28fc: f009 f930 bl bb60 - 2900: a90f add r1, sp, #60 ; 0x3c - 2902: a812 add r0, sp, #72 ; 0x48 - 2904: f009 fa60 bl bdc8 - 2908: 4601 mov r1, r0 - 290a: a815 add r0, sp, #84 ; 0x54 - 290c: f009 f946 bl bb9c - 2910: a815 add r0, sp, #84 ; 0x54 - 2912: f7fe fba3 bl 105c - 2916: a815 add r0, sp, #84 ; 0x54 - 2918: f009 f95c bl bbd4 - 291c: a80f add r0, sp, #60 ; 0x3c - 291e: f009 f959 bl bbd4 -class StringSumHelper : public String - 2922: a812 add r0, sp, #72 ; 0x48 - 2924: f009 f956 bl bbd4 - 2928: e647 b.n 25ba - 292a: 6d5a ldr r2, [r3, #84] ; 0x54 - 292c: 2a00 cmp r2, #0 - 292e: f47f aebd bne.w 26ac - 2932: e6bf b.n 26b4 - 2934: 6d5a ldr r2, [r3, #84] ; 0x54 - 2936: 2a00 cmp r2, #0 - 2938: f47f ae76 bne.w 2628 - 293c: e678 b.n 2630 - 293e: 6d73 ldr r3, [r6, #84] ; 0x54 - 2940: 2b00 cmp r3, #0 - 2942: f47f aef3 bne.w 272c - 2946: e6f5 b.n 2734 - if (f) f->flush(); - 2948: 4618 mov r0, r3 - 294a: 4790 blx r2 - 294c: e41c b.n 2188 - return (f) ? f->write((void*)buf, size) : 0; - 294e: 4927 ldr r1, [pc, #156] ; (29ec ) - 2950: 4618 mov r0, r3 - 2952: 220b movs r2, #11 - 2954: 47a0 blx r4 - 2956: f7ff bbe5 b.w 2124 - if (f) f->flush(); - 295a: 4618 mov r0, r3 - 295c: 4790 blx r2 - 295e: e405 b.n 216c - return (f) ? f->write((void*)buf, size) : 0; - 2960: 4923 ldr r1, [pc, #140] ; (29f0 ) - 2962: 4618 mov r0, r3 - 2964: 220c movs r2, #12 - 2966: 47a0 blx r4 - 2968: f7ff bbc9 b.w 20fe - if (f) f->flush(); - 296c: 4618 mov r0, r3 - 296e: 4790 blx r2 - 2970: e44e b.n 2210 - return (f) ? f->write((void*)buf, size) : 0; - 2972: 4920 ldr r1, [pc, #128] ; (29f4 ) - 2974: 4618 mov r0, r3 - 2976: 220b movs r2, #11 - 2978: 47a0 blx r4 - 297a: f7ff bbe6 b.w 214a - f->close(); - 297e: 4618 mov r0, r3 - 2980: 4788 blx r1 - 2982: e655 b.n 2630 - 2984: 4630 mov r0, r6 - 2986: 4790 blx r2 - 2988: e6d4 b.n 2734 - 298a: 4618 mov r0, r3 - 298c: 4788 blx r1 - 298e: e691 b.n 26b4 - 2990: 2128 movs r1, #40 ; 0x28 - 2992: 4819 ldr r0, [pc, #100] ; (29f8 ) - 2994: f00c f928 bl ebe8 - size_t println(const char s[]) { return print(s) + println(); } - 2998: 4811 ldr r0, [pc, #68] ; (29e0 ) - 299a: f009 f809 bl b9b0 - 299e: e602 b.n 25a6 - 29a0: f8d9 3054 ldr.w r3, [r9, #84] ; 0x54 - 29a4: 2b00 cmp r3, #0 - 29a6: f47f ae62 bne.w 266e - 29aa: e663 b.n 2674 - 29ac: f8d9 3054 ldr.w r3, [r9, #84] ; 0x54 - 29b0: 2b00 cmp r3, #0 - 29b2: f47f ae9e bne.w 26f2 - 29b6: e69f b.n 26f8 - 29b8: 6d73 ldr r3, [r6, #84] ; 0x54 - 29ba: 2b00 cmp r3, #0 - 29bc: f47f aed2 bne.w 2764 - 29c0: e6d3 b.n 276a - delete f; - 29c2: 4630 mov r0, r6 - 29c4: 4798 blx r3 - 29c6: f7ff bb15 b.w 1ff4 - 29ca: 4648 mov r0, r9 - 29cc: 4798 blx r3 - 29ce: f7ff bb82 b.w 20d6 - 29d2: 4648 mov r0, r9 - 29d4: 4798 blx r3 - 29d6: f7ff bb44 b.w 2062 - 29da: bf00 nop - 29dc: 000176d8 .word 0x000176d8 - 29e0: 1fff8844 .word 0x1fff8844 - 29e4: 000176f0 .word 0x000176f0 - 29e8: 00017848 .word 0x00017848 - 29ec: 00017688 .word 0x00017688 - 29f0: 00017678 .word 0x00017678 - 29f4: 00017694 .word 0x00017694 - 29f8: 0001781c .word 0x0001781c - -000029fc : -// Supporting uplink command for BITS - -// Everything related from ground to BITS commands - -void uplink(){ - 29fc: b530 push {r4, r5, lr} - //------------------------------------ARMING SECTION------------------------------------ - if(strstr((char*)rxBuf,"disarm")) - 29fe: 49ab ldr r1, [pc, #684] ; (2cac ) - 2a00: 48ab ldr r0, [pc, #684] ; (2cb0 ) -void uplink(){ - 2a02: b089 sub sp, #36 ; 0x24 - if(strstr((char*)rxBuf,"disarm")) - 2a04: f00e fed0 bl 117a8 - 2a08: b318 cbz r0, 2a52 - { - //pingBlink(); - arm_status = 0; - 2a0a: 4baa ldr r3, [pc, #680] ; (2cb4 ) - 2a0c: 48aa ldr r0, [pc, #680] ; (2cb8 ) - 2a0e: 2200 movs r2, #0 - 2a10: 2110 movs r1, #16 - 2a12: 601a str r2, [r3, #0] - 2a14: f00c f8e8 bl ebe8 - 2a18: 48a8 ldr r0, [pc, #672] ; (2cbc ) - 2a1a: f008 ffc9 bl b9b0 - OutputSerial.println("Payload Disarmed"); - logprintln("Payload Disarmed"); - 2a1e: 49a6 ldr r1, [pc, #664] ; (2cb8 ) - 2a20: a804 add r0, sp, #16 - 2a22: f009 f89d bl bb60 - 2a26: a804 add r0, sp, #16 - 2a28: f7fe fb18 bl 105c - 2a2c: a804 add r0, sp, #16 - 2a2e: f009 f8d1 bl bbd4 - downlinkData = true; - 2a32: 4ba3 ldr r3, [pc, #652] ; (2cc0 ) - //strcat(downlinkMessage2,"SAFED"); - strncat(downlinkMessage2,"SAFED",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2a34: 48a3 ldr r0, [pc, #652] ; (2cc4 ) - downlinkData = true; - 2a36: 2201 movs r2, #1 - 2a38: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,"SAFED",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2a3a: f00f fa21 bl 11e80 - 2a3e: 49a2 ldr r1, [pc, #648] ; (2cc8 ) - 2a40: 4602 mov r2, r0 - logprintln("BluePassFail"); // if failed twice, log the fail // TODO write a retry system - strcat(conf,"FAIL"); - } - - downlinkData = true; - strncat(downlinkMessage2,",BluePass",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2a42: 48a0 ldr r0, [pc, #640] ; (2cc4 ) - 2a44: f1c2 0263 rsb r2, r2, #99 ; 0x63 - } - - downlinkData = true; - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - } -} - 2a48: b009 add sp, #36 ; 0x24 - 2a4a: e8bd 4030 ldmia.w sp!, {r4, r5, lr} - strncat(downlinkMessage2,",BluePass",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2a4e: f00e bc69 b.w 11324 - }else if(strstr((char*)rxBuf,"arm")) - 2a52: 499e ldr r1, [pc, #632] ; (2ccc ) - 2a54: 4896 ldr r0, [pc, #600] ; (2cb0 ) - 2a56: f00e fea7 bl 117a8 - 2a5a: 4604 mov r4, r0 - 2a5c: b1e0 cbz r0, 2a98 - arm_status = 42; - 2a5e: 4b95 ldr r3, [pc, #596] ; (2cb4 ) - 2a60: 489b ldr r0, [pc, #620] ; (2cd0 ) - 2a62: 222a movs r2, #42 ; 0x2a - 2a64: 210d movs r1, #13 - 2a66: 601a str r2, [r3, #0] - 2a68: f00c f8be bl ebe8 - 2a6c: 4893 ldr r0, [pc, #588] ; (2cbc ) - 2a6e: f008 ff9f bl b9b0 - logprintln("Payload Armed"); - 2a72: 4997 ldr r1, [pc, #604] ; (2cd0 ) - 2a74: a804 add r0, sp, #16 - 2a76: f009 f873 bl bb60 - 2a7a: a804 add r0, sp, #16 - 2a7c: f7fe faee bl 105c - 2a80: a804 add r0, sp, #16 - 2a82: f009 f8a7 bl bbd4 - downlinkData = true; - 2a86: 4b8e ldr r3, [pc, #568] ; (2cc0 ) - strncat(downlinkMessage2,"ARMED",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2a88: 488e ldr r0, [pc, #568] ; (2cc4 ) - downlinkData = true; - 2a8a: 2201 movs r2, #1 - 2a8c: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,"ARMED",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2a8e: f00f f9f7 bl 11e80 - 2a92: 4990 ldr r1, [pc, #576] ; (2cd4 ) - 2a94: 4602 mov r2, r0 - 2a96: e7d4 b.n 2a42 - }else if(strstr((char*)rxBuf,"drop")) - 2a98: 498f ldr r1, [pc, #572] ; (2cd8 ) - 2a9a: 4885 ldr r0, [pc, #532] ; (2cb0 ) - 2a9c: f00e fe84 bl 117a8 - 2aa0: b1e8 cbz r0, 2ade - if(arm_status == 42){ - 2aa2: 4b84 ldr r3, [pc, #528] ; (2cb4 ) - 2aa4: 681b ldr r3, [r3, #0] - 2aa6: 2b2a cmp r3, #42 ; 0x2a - 2aa8: d044 beq.n 2b34 - logprintln("UNARMED_DROP_ATTEMPT"); - 2aaa: 498c ldr r1, [pc, #560] ; (2cdc ) - 2aac: a804 add r0, sp, #16 - 2aae: f009 f857 bl bb60 - 2ab2: a804 add r0, sp, #16 - 2ab4: f7fe fad2 bl 105c - 2ab8: a804 add r0, sp, #16 - 2aba: f009 f88b bl bbd4 - 2abe: 2114 movs r1, #20 - 2ac0: 4886 ldr r0, [pc, #536] ; (2cdc ) - 2ac2: f00c f891 bl ebe8 - 2ac6: 487d ldr r0, [pc, #500] ; (2cbc ) - 2ac8: f008 ff72 bl b9b0 - downlinkData = true; - 2acc: 4b7c ldr r3, [pc, #496] ; (2cc0 ) - strncat(downlinkMessage2,"NOT_ARMED",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2ace: 487d ldr r0, [pc, #500] ; (2cc4 ) - downlinkData = true; - 2ad0: 2201 movs r2, #1 - 2ad2: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,"NOT_ARMED",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2ad4: f00f f9d4 bl 11e80 - 2ad8: 4981 ldr r1, [pc, #516] ; (2ce0 ) - 2ada: 4602 mov r2, r0 - 2adc: e7b1 b.n 2a42 - else if(strstr((char*)rxBuf,"setrate")) //Change SBD message frequency - 2ade: 4981 ldr r1, [pc, #516] ; (2ce4 ) - 2ae0: 4873 ldr r0, [pc, #460] ; (2cb0 ) - 2ae2: f00e fe61 bl 117a8 - 2ae6: 4604 mov r4, r0 - 2ae8: 2800 cmp r0, #0 - 2aea: d048 beq.n 2b7e - if(strstr((char*)rxBuf,"fast")){ //For testing / accurate drops - 2aec: 497e ldr r1, [pc, #504] ; (2ce8 ) - 2aee: 4870 ldr r0, [pc, #448] ; (2cb0 ) - 2af0: f00e fe5a bl 117a8 - 2af4: 2800 cmp r0, #0 - 2af6: d071 beq.n 2bdc - 2af8: 210d movs r1, #13 - 2afa: 487c ldr r0, [pc, #496] ; (2cec ) - 2afc: f00c f874 bl ebe8 - 2b00: 486e ldr r0, [pc, #440] ; (2cbc ) - 2b02: f008 ff55 bl b9b0 - logprintln("SET_RATE_FAST"); - 2b06: 4979 ldr r1, [pc, #484] ; (2cec ) - 2b08: a804 add r0, sp, #16 - 2b0a: f009 f829 bl bb60 - 2b0e: a804 add r0, sp, #16 - 2b10: f7fe faa4 bl 105c - 2b14: a804 add r0, sp, #16 - 2b16: f009 f85d bl bbd4 - messageTimeInterval = 60000;// 1 minute - 2b1a: 4975 ldr r1, [pc, #468] ; (2cf0 ) - downlinkData = true; - 2b1c: 4b68 ldr r3, [pc, #416] ; (2cc0 ) - strncat(downlinkMessage2,",rF",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2b1e: 4869 ldr r0, [pc, #420] ; (2cc4 ) - downlinkData = true; - 2b20: 2201 movs r2, #1 - messageTimeInterval = 60000;// 1 minute - 2b22: f64e 2460 movw r4, #60000 ; 0xea60 - 2b26: 600c str r4, [r1, #0] - downlinkData = true; - 2b28: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,",rF",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2b2a: f00f f9a9 bl 11e80 - 2b2e: 4971 ldr r1, [pc, #452] ; (2cf4 ) - 2b30: 4602 mov r2, r0 - 2b32: e786 b.n 2a42 - 2b34: 2104 movs r1, #4 - 2b36: 4870 ldr r0, [pc, #448] ; (2cf8 ) - 2b38: f00c f856 bl ebe8 - 2b3c: 485f ldr r0, [pc, #380] ; (2cbc ) - 2b3e: f008 ff37 bl b9b0 - logprintln("DROP"); - 2b42: 496e ldr r1, [pc, #440] ; (2cfc ) - 2b44: a804 add r0, sp, #16 - 2b46: f009 f80b bl bb60 - 2b4a: a804 add r0, sp, #16 - 2b4c: f7fe fa86 bl 105c - 2b50: a804 add r0, sp, #16 - 2b52: f009 f83f bl bbd4 - String("open").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2b56: 4968 ldr r1, [pc, #416] ; (2cf8 ) - 2b58: a804 add r0, sp, #16 - 2b5a: f009 f801 bl bb60 - 2b5e: 4623 mov r3, r4 - String("blue_check").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2b60: 4967 ldr r1, [pc, #412] ; (2d00 ) - 2b62: 2222 movs r2, #34 ; 0x22 - 2b64: a804 add r0, sp, #16 - 2b66: f009 f945 bl bdf4 - 2b6a: a804 add r0, sp, #16 - 2b6c: f009 f832 bl bbd4 - xbeeSend(BlueSL,xbeeSendBuf); - 2b70: 4963 ldr r1, [pc, #396] ; (2d00 ) - 2b72: 4864 ldr r0, [pc, #400] ; (2d04 ) -} - 2b74: b009 add sp, #36 ; 0x24 - 2b76: e8bd 4030 ldmia.w sp!, {r4, r5, lr} - xbeeSend(BlueSL,xbeeSendBuf); - 2b7a: f7fe bbf7 b.w 136c - else if(strstr((char*)rxBuf,"gps_reset")){ //Sends test message to ground XBee - 2b7e: 4962 ldr r1, [pc, #392] ; (2d08 ) - 2b80: 484b ldr r0, [pc, #300] ; (2cb0 ) - 2b82: f00e fe11 bl 117a8 - 2b86: 2800 cmp r0, #0 - 2b88: d06e beq.n 2c68 - 2b8a: 2109 movs r1, #9 - 2b8c: 485e ldr r0, [pc, #376] ; (2d08 ) - 2b8e: f00c f82b bl ebe8 - 2b92: 484a ldr r0, [pc, #296] ; (2cbc ) - 2b94: f008 ff0c bl b9b0 - logprintln("gps_reset"); - 2b98: 495b ldr r1, [pc, #364] ; (2d08 ) - 2b9a: a804 add r0, sp, #16 - 2b9c: f008 ffe0 bl bb60 - 2ba0: a804 add r0, sp, #16 - 2ba2: f7fe fa5b bl 105c - 2ba6: a804 add r0, sp, #16 - 2ba8: f009 f814 bl bbd4 - String("gps_reset").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2bac: 4956 ldr r1, [pc, #344] ; (2d08 ) - 2bae: a804 add r0, sp, #16 - 2bb0: f008 ffd6 bl bb60 - 2bb4: 4623 mov r3, r4 - 2bb6: 2222 movs r2, #34 ; 0x22 - 2bb8: 4951 ldr r1, [pc, #324] ; (2d00 ) - 2bba: a804 add r0, sp, #16 - 2bbc: f009 f91a bl bdf4 - 2bc0: a804 add r0, sp, #16 - 2bc2: f009 f807 bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 2bc6: 494e ldr r1, [pc, #312] ; (2d00 ) - 2bc8: 4850 ldr r0, [pc, #320] ; (2d0c ) - 2bca: f7fe fbcf bl 136c - virtual void end(void) { serial3_end(); } - 2bce: f00b f82b bl dc28 -} - 2bd2: b009 add sp, #36 ; 0x24 - 2bd4: e8bd 4030 ldmia.w sp!, {r4, r5, lr} - gps_init(); - 2bd8: f7ff b92c b.w 1e34 - else if(strstr((char*)rxBuf,"norm")){ - 2bdc: 494c ldr r1, [pc, #304] ; (2d10 ) - 2bde: 4834 ldr r0, [pc, #208] ; (2cb0 ) - 2be0: f00e fde2 bl 117a8 - 2be4: b1e0 cbz r0, 2c20 - 2be6: 210d movs r1, #13 - 2be8: 484a ldr r0, [pc, #296] ; (2d14 ) - messageTimeInterval = 300000; //5 minutes - 2bea: 4c4b ldr r4, [pc, #300] ; (2d18 ) - 2bec: f00b fffc bl ebe8 - 2bf0: 4832 ldr r0, [pc, #200] ; (2cbc ) - 2bf2: f008 fedd bl b9b0 - logprintln("SET_RATE_NORM"); - 2bf6: 4947 ldr r1, [pc, #284] ; (2d14 ) - 2bf8: a804 add r0, sp, #16 - 2bfa: f008 ffb1 bl bb60 - 2bfe: a804 add r0, sp, #16 - 2c00: f7fe fa2c bl 105c - 2c04: a804 add r0, sp, #16 - 2c06: f008 ffe5 bl bbd4 - messageTimeInterval = 300000; //5 minutes - 2c0a: 4939 ldr r1, [pc, #228] ; (2cf0 ) - downlinkData = true; - 2c0c: 4b2c ldr r3, [pc, #176] ; (2cc0 ) - strncat(downlinkMessage2,",rN",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2c0e: 482d ldr r0, [pc, #180] ; (2cc4 ) - messageTimeInterval = 300000; //5 minutes - 2c10: 600c str r4, [r1, #0] - downlinkData = true; - 2c12: 2201 movs r2, #1 - 2c14: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,",rN",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2c16: f00f f933 bl 11e80 - 2c1a: 4940 ldr r1, [pc, #256] ; (2d1c ) - 2c1c: 4602 mov r2, r0 - 2c1e: e710 b.n 2a42 - }else if(strstr((char*)rxBuf,"slow")){ - 2c20: 493f ldr r1, [pc, #252] ; (2d20 ) - 2c22: 4823 ldr r0, [pc, #140] ; (2cb0 ) - 2c24: f00e fdc0 bl 117a8 - 2c28: 2800 cmp r0, #0 - 2c2a: f000 8087 beq.w 2d3c - 2c2e: 210d movs r1, #13 - 2c30: 483c ldr r0, [pc, #240] ; (2d24 ) - messageTimeInterval = 900000; //15 minutes - 2c32: 4c3d ldr r4, [pc, #244] ; (2d28 ) - 2c34: f00b ffd8 bl ebe8 - 2c38: 4820 ldr r0, [pc, #128] ; (2cbc ) - 2c3a: f008 feb9 bl b9b0 - logprintln("SET_RATE_SLOW"); - 2c3e: 4939 ldr r1, [pc, #228] ; (2d24 ) - 2c40: a804 add r0, sp, #16 - 2c42: f008 ff8d bl bb60 - 2c46: a804 add r0, sp, #16 - 2c48: f7fe fa08 bl 105c - 2c4c: a804 add r0, sp, #16 - 2c4e: f008 ffc1 bl bbd4 - messageTimeInterval = 900000; //15 minutes - 2c52: 4927 ldr r1, [pc, #156] ; (2cf0 ) - downlinkData = true; - 2c54: 4b1a ldr r3, [pc, #104] ; (2cc0 ) - strncat(downlinkMessage2,",rS",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2c56: 481b ldr r0, [pc, #108] ; (2cc4 ) - messageTimeInterval = 900000; //15 minutes - 2c58: 600c str r4, [r1, #0] - downlinkData = true; - 2c5a: 2201 movs r2, #1 - 2c5c: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,",rS",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2c5e: f00f f90f bl 11e80 - 2c62: 4932 ldr r1, [pc, #200] ; (2d2c ) - 2c64: 4602 mov r2, r0 - 2c66: e6ec b.n 2a42 - else if(strstr((char*)rxBuf,"test")) - 2c68: 4931 ldr r1, [pc, #196] ; (2d30 ) - 2c6a: 4811 ldr r0, [pc, #68] ; (2cb0 ) - 2c6c: f00e fd9c bl 117a8 - 2c70: 4604 mov r4, r0 - 2c72: 2800 cmp r0, #0 - 2c74: f000 8086 beq.w 2d84 - 2c78: 210c movs r1, #12 - 2c7a: 482e ldr r0, [pc, #184] ; (2d34 ) - 2c7c: f00b ffb4 bl ebe8 - 2c80: 480e ldr r0, [pc, #56] ; (2cbc ) - 2c82: f008 fe95 bl b9b0 - logprintln("TEST_PASS"); - 2c86: 492c ldr r1, [pc, #176] ; (2d38 ) - 2c88: a804 add r0, sp, #16 - 2c8a: f008 ff69 bl bb60 - 2c8e: a804 add r0, sp, #16 - 2c90: f7fe f9e4 bl 105c - 2c94: a804 add r0, sp, #16 - 2c96: f008 ff9d bl bbd4 - downlinkData = true; - 2c9a: 4b09 ldr r3, [pc, #36] ; (2cc0 ) - strncat(downlinkMessage2,"test",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2c9c: 4809 ldr r0, [pc, #36] ; (2cc4 ) - downlinkData = true; - 2c9e: 2201 movs r2, #1 - 2ca0: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,"test",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2ca2: f00f f8ed bl 11e80 - 2ca6: 4922 ldr r1, [pc, #136] ; (2d30 ) - 2ca8: 4602 mov r2, r0 - 2caa: e6ca b.n 2a42 - 2cac: 0001786c .word 0x0001786c - 2cb0: 1fff9178 .word 0x1fff9178 - 2cb4: 1fff8724 .word 0x1fff8724 - 2cb8: 00017874 .word 0x00017874 - 2cbc: 1fff8844 .word 0x1fff8844 - 2cc0: 1fff8fc9 .word 0x1fff8fc9 - 2cc4: 1fff8fcc .word 0x1fff8fcc - 2cc8: 00017888 .word 0x00017888 - 2ccc: 00017890 .word 0x00017890 - 2cd0: 00017894 .word 0x00017894 - 2cd4: 000178d8 .word 0x000178d8 - 2cd8: 000178a4 .word 0x000178a4 - 2cdc: 000178bc .word 0x000178bc - 2ce0: 000178d4 .word 0x000178d4 - 2ce4: 000178e0 .word 0x000178e0 - 2ce8: 000178e8 .word 0x000178e8 - 2cec: 000178f0 .word 0x000178f0 - 2cf0: 1fff8758 .word 0x1fff8758 - 2cf4: 00017900 .word 0x00017900 - 2cf8: 000178ac .word 0x000178ac - 2cfc: 000178b4 .word 0x000178b4 - 2d00: 1fff9274 .word 0x1fff9274 - 2d04: 417b4a3a .word 0x417b4a3a - 2d08: 00017958 .word 0x00017958 - 2d0c: 417b4a36 .word 0x417b4a36 - 2d10: 00017904 .word 0x00017904 - 2d14: 0001790c .word 0x0001790c - 2d18: 000493e0 .word 0x000493e0 - 2d1c: 0001791c .word 0x0001791c - 2d20: 00017920 .word 0x00017920 - 2d24: 00017928 .word 0x00017928 - 2d28: 000dbba0 .word 0x000dbba0 - 2d2c: 00017938 .word 0x00017938 - 2d30: 00017984 .word 0x00017984 - 2d34: 00017964 .word 0x00017964 - 2d38: 00017974 .word 0x00017974 - else if(strstr((char*)rxBuf,"land")){ - 2d3c: 49a7 ldr r1, [pc, #668] ; (2fdc ) - 2d3e: 48a8 ldr r0, [pc, #672] ; (2fe0 ) - 2d40: f00e fd32 bl 117a8 - 2d44: 2800 cmp r0, #0 - 2d46: f000 8088 beq.w 2e5a - 2d4a: 210f movs r1, #15 - 2d4c: 48a5 ldr r0, [pc, #660] ; (2fe4 ) - messageTimeInterval = 3600000; //1 hour - 2d4e: 4ca6 ldr r4, [pc, #664] ; (2fe8 ) - 2d50: f00b ff4a bl ebe8 - 2d54: 48a5 ldr r0, [pc, #660] ; (2fec ) - 2d56: f008 fe2b bl b9b0 - logprintln("SET_RATE_SLOW"); - 2d5a: 49a5 ldr r1, [pc, #660] ; (2ff0 ) - 2d5c: a804 add r0, sp, #16 - 2d5e: f008 feff bl bb60 - 2d62: a804 add r0, sp, #16 - 2d64: f7fe f97a bl 105c - 2d68: a804 add r0, sp, #16 - 2d6a: f008 ff33 bl bbd4 - messageTimeInterval = 3600000; //1 hour - 2d6e: 49a1 ldr r1, [pc, #644] ; (2ff4 ) - downlinkData = true; - 2d70: 4ba1 ldr r3, [pc, #644] ; (2ff8 ) - strncat(downlinkMessage2,",rL",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2d72: 48a2 ldr r0, [pc, #648] ; (2ffc ) - messageTimeInterval = 3600000; //1 hour - 2d74: 600c str r4, [r1, #0] - downlinkData = true; - 2d76: 2201 movs r2, #1 - 2d78: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,",rL",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2d7a: f00f f881 bl 11e80 - 2d7e: 49a0 ldr r1, [pc, #640] ; (3000 ) - 2d80: 4602 mov r2, r0 - 2d82: e65e b.n 2a42 - else if(strstr((char*)rxBuf,"gnd_test")){ //Sends test message to ground XBee - 2d84: 499f ldr r1, [pc, #636] ; (3004 ) - 2d86: 4896 ldr r0, [pc, #600] ; (2fe0 ) - 2d88: f00e fd0e bl 117a8 - 2d8c: 4605 mov r5, r0 - 2d8e: 2800 cmp r0, #0 - 2d90: d065 beq.n 2e5e - 2d92: 2109 movs r1, #9 - 2d94: 489c ldr r0, [pc, #624] ; (3008 ) - 2d96: f00b ff27 bl ebe8 - 2d9a: 4894 ldr r0, [pc, #592] ; (2fec ) - 2d9c: f008 fe08 bl b9b0 - logprintln("gnd_check"); - 2da0: 4999 ldr r1, [pc, #612] ; (3008 ) - 2da2: a804 add r0, sp, #16 - 2da4: f008 fedc bl bb60 - 2da8: a804 add r0, sp, #16 - 2daa: f7fe f957 bl 105c - 2dae: a804 add r0, sp, #16 - 2db0: f008 ff10 bl bbd4 - String("gnd_check").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2db4: 4994 ldr r1, [pc, #592] ; (3008 ) - 2db6: a804 add r0, sp, #16 - 2db8: f008 fed2 bl bb60 - 2dbc: 4993 ldr r1, [pc, #588] ; (300c ) - 2dbe: 4623 mov r3, r4 - 2dc0: 2222 movs r2, #34 ; 0x22 - 2dc2: a804 add r0, sp, #16 - 2dc4: f009 f816 bl bdf4 - 2dc8: a804 add r0, sp, #16 - 2dca: f008 ff03 bl bbd4 - xbeeSend(GroundSL,xbeeSendBuf); - 2dce: 498f ldr r1, [pc, #572] ; (300c ) - 2dd0: 488f ldr r0, [pc, #572] ; (3010 ) - 2dd2: e6cf b.n 2b74 - else if(strstr((char*)rxBuf,"GNDPASS")){ - 2dd4: 498f ldr r1, [pc, #572] ; (3014 ) - 2dd6: 4882 ldr r0, [pc, #520] ; (2fe0 ) - 2dd8: f00e fce6 bl 117a8 - 2ddc: 2800 cmp r0, #0 - 2dde: f000 8098 beq.w 2f12 - OutputSerial.println("GNDPASS"); - 2de2: 498c ldr r1, [pc, #560] ; (3014 ) - 2de4: 4881 ldr r0, [pc, #516] ; (2fec ) - 2de6: f7fd fee7 bl bb8 - strcat((char*)xbeeSendBuf,(char*)rxBuf); - 2dea: 497d ldr r1, [pc, #500] ; (2fe0 ) - 2dec: 4887 ldr r0, [pc, #540] ; (300c ) - 2dee: f00e fa13 bl 11218 - char conf[15] = ",GND"; - 2df2: 4b89 ldr r3, [pc, #548] ; (3018 ) - 2df4: e893 0003 ldmia.w r3, {r0, r1} - 2df8: 220a movs r2, #10 - 2dfa: 9004 str r0, [sp, #16] - 2dfc: f88d 1014 strb.w r1, [sp, #20] - 2e00: f10d 0015 add.w r0, sp, #21 - 2e04: 2100 movs r1, #0 - 2e06: f00e f9b5 bl 11174 - if(xbeeSend(GroundSL,xbeeSendBuf)) //try to passthrough with xbee - 2e0a: 4980 ldr r1, [pc, #512] ; (300c ) - 2e0c: 4880 ldr r0, [pc, #512] ; (3010 ) - 2e0e: f7fe faad bl 136c - 2e12: 2800 cmp r0, #0 - 2e14: d16c bne.n 2ef0 - else if(xbeeSend(GroundSL,xbeeSendBuf)) //try again if failed - 2e16: 497d ldr r1, [pc, #500] ; (300c ) - 2e18: 487d ldr r0, [pc, #500] ; (3010 ) - 2e1a: f7fe faa7 bl 136c - 2e1e: 2800 cmp r0, #0 - 2e20: d166 bne.n 2ef0 - logprintln("GNDPASSFail"); // if failed twice, log the fail // TODO write a retry system - 2e22: 497e ldr r1, [pc, #504] ; (301c ) - 2e24: a801 add r0, sp, #4 - 2e26: f008 fe9b bl bb60 - 2e2a: a801 add r0, sp, #4 - 2e2c: f7fe f916 bl 105c - 2e30: a801 add r0, sp, #4 - 2e32: f008 fecf bl bbd4 - strcat(conf,"FAIL"); - 2e36: 4b7a ldr r3, [pc, #488] ; (3020 ) - 2e38: e893 0003 ldmia.w r3, {r0, r1} - 2e3c: 9005 str r0, [sp, #20] - 2e3e: f88d 1018 strb.w r1, [sp, #24] - downlinkData = true; - 2e42: 4b6d ldr r3, [pc, #436] ; (2ff8 ) - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2e44: 486d ldr r0, [pc, #436] ; (2ffc ) - downlinkData = true; - 2e46: 2201 movs r2, #1 - 2e48: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2e4a: f00f f819 bl 11e80 - 2e4e: a904 add r1, sp, #16 - 2e50: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 2e54: 4869 ldr r0, [pc, #420] ; (2ffc ) - 2e56: f00e fa65 bl 11324 -} - 2e5a: b009 add sp, #36 ; 0x24 - 2e5c: bd30 pop {r4, r5, pc} - else if(strstr((char*)rxBuf,"blue_test")){ - 2e5e: 4971 ldr r1, [pc, #452] ; (3024 ) - 2e60: 485f ldr r0, [pc, #380] ; (2fe0 ) - 2e62: f00e fca1 bl 117a8 - 2e66: b1b0 cbz r0, 2e96 - 2e68: 210a movs r1, #10 - 2e6a: 486f ldr r0, [pc, #444] ; (3028 ) - 2e6c: f00b febc bl ebe8 - 2e70: 485e ldr r0, [pc, #376] ; (2fec ) - 2e72: f008 fd9d bl b9b0 - logprintln("blue_check"); - 2e76: 496c ldr r1, [pc, #432] ; (3028 ) - 2e78: a804 add r0, sp, #16 - 2e7a: f008 fe71 bl bb60 - 2e7e: a804 add r0, sp, #16 - 2e80: f7fe f8ec bl 105c - 2e84: a804 add r0, sp, #16 - 2e86: f008 fea5 bl bbd4 - String("blue_check").getBytes(xbeeSendBuf,xbeeSendBufSize); - 2e8a: 4967 ldr r1, [pc, #412] ; (3028 ) - 2e8c: a804 add r0, sp, #16 - 2e8e: f008 fe67 bl bb60 - 2e92: 462b mov r3, r5 - 2e94: e664 b.n 2b60 - else if(strstr((char*)rxBuf,"BLUEPASS")){ - 2e96: 4965 ldr r1, [pc, #404] ; (302c ) - 2e98: 4851 ldr r0, [pc, #324] ; (2fe0 ) - 2e9a: f00e fc85 bl 117a8 - 2e9e: 2800 cmp r0, #0 - 2ea0: d098 beq.n 2dd4 - OutputSerial.println("BluePass"); - 2ea2: 4963 ldr r1, [pc, #396] ; (3030 ) - 2ea4: 4851 ldr r0, [pc, #324] ; (2fec ) - 2ea6: f7fd fe87 bl bb8 - strcat((char*)xbeeSendBuf,(char*)rxBuf); // assemble passthrough packet - 2eaa: 494d ldr r1, [pc, #308] ; (2fe0 ) - 2eac: 4857 ldr r0, [pc, #348] ; (300c ) - 2eae: f00e f9b3 bl 11218 - if(xbeeSend(BlueSL,xbeeSendBuf)) //try to passthrough with xbee - 2eb2: 4956 ldr r1, [pc, #344] ; (300c ) - 2eb4: 485f ldr r0, [pc, #380] ; (3034 ) - 2eb6: f7fe fa59 bl 136c - 2eba: b9b8 cbnz r0, 2eec - else if(xbeeSend(BlueSL,xbeeSendBuf)) //try again if failed - 2ebc: 4953 ldr r1, [pc, #332] ; (300c ) - 2ebe: 485d ldr r0, [pc, #372] ; (3034 ) - 2ec0: f7fe fa54 bl 136c - 2ec4: b990 cbnz r0, 2eec - logprintln("BluePassFail"); // if failed twice, log the fail // TODO write a retry system - 2ec6: 495c ldr r1, [pc, #368] ; (3038 ) - 2ec8: a804 add r0, sp, #16 - 2eca: f008 fe49 bl bb60 - 2ece: a804 add r0, sp, #16 - 2ed0: f7fe f8c4 bl 105c - 2ed4: a804 add r0, sp, #16 - 2ed6: f008 fe7d bl bbd4 - downlinkData = true; - 2eda: 4b47 ldr r3, [pc, #284] ; (2ff8 ) - strncat(downlinkMessage2,",BluePass",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2edc: 4847 ldr r0, [pc, #284] ; (2ffc ) - downlinkData = true; - 2ede: 2201 movs r2, #1 - 2ee0: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,",BluePass",(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2ee2: f00e ffcd bl 11e80 - 2ee6: 4955 ldr r1, [pc, #340] ; (303c ) - 2ee8: 4602 mov r2, r0 - 2eea: e5aa b.n 2a42 - logprintln("BluePass"); - 2eec: 4950 ldr r1, [pc, #320] ; (3030 ) - 2eee: e7eb b.n 2ec8 - logprintln("GNDPASS"); - 2ef0: 4948 ldr r1, [pc, #288] ; (3014 ) - 2ef2: a801 add r0, sp, #4 - 2ef4: f008 fe34 bl bb60 - 2ef8: a801 add r0, sp, #4 - 2efa: f7fe f8af bl 105c - 2efe: a801 add r0, sp, #4 - 2f00: f008 fe68 bl bbd4 - strcat(conf,"PASS"); - 2f04: 4b4e ldr r3, [pc, #312] ; (3040 ) - 2f06: e893 0003 ldmia.w r3, {r0, r1} - 2f0a: 9005 str r0, [sp, #20] - 2f0c: f88d 1018 strb.w r1, [sp, #24] - 2f10: e797 b.n 2e42 - else if(strstr((char*)rxBuf,"WIREPASS")){ - 2f12: 494c ldr r1, [pc, #304] ; (3044 ) - 2f14: 4832 ldr r0, [pc, #200] ; (2fe0 ) - 2f16: f00e fc47 bl 117a8 - 2f1a: 4605 mov r5, r0 - 2f1c: 2800 cmp r0, #0 - 2f1e: f000 8099 beq.w 3054 - logprintln("WIREPASS"); - 2f22: ac04 add r4, sp, #16 - OutputSerial.println("WIREPASS"); - 2f24: 4947 ldr r1, [pc, #284] ; (3044 ) - 2f26: 4831 ldr r0, [pc, #196] ; (2fec ) - 2f28: f7fd fe46 bl bb8 - logprintln("WIREPASS"); - 2f2c: 4945 ldr r1, [pc, #276] ; (3044 ) - 2f2e: 4620 mov r0, r4 - 2f30: f008 fe16 bl bb60 - 2f34: 4620 mov r0, r4 - 2f36: f7fe f891 bl 105c - 2f3a: 4620 mov r0, r4 - 2f3c: f008 fe4a bl bbd4 - strcat((char*)xbeeSendBuf,(char*)rxBuf); - 2f40: 4927 ldr r1, [pc, #156] ; (2fe0 ) - 2f42: 4832 ldr r0, [pc, #200] ; (300c ) - 2f44: f00e f968 bl 11218 - char conf[15] = ",Wire"; - 2f48: 4b3f ldr r3, [pc, #252] ; (3048 ) - 2f4a: e893 0003 ldmia.w r3, {r0, r1} - 2f4e: 2300 movs r3, #0 - 2f50: 9004 str r0, [sp, #16] - 2f52: f8ad 1014 strh.w r1, [sp, #20] - if(xbeeSend(WireSL,xbeeSendBuf)) //try to passthrough with xbee - 2f56: 483d ldr r0, [pc, #244] ; (304c ) - 2f58: 492c ldr r1, [pc, #176] ; (300c ) - char conf[15] = ",Wire"; - 2f5a: f8ad 3016 strh.w r3, [sp, #22] - 2f5e: f8ad 3018 strh.w r3, [sp, #24] - 2f62: f8ad 301a strh.w r3, [sp, #26] - 2f66: f8ad 301c strh.w r3, [sp, #28] - 2f6a: f88d 301e strb.w r3, [sp, #30] - if(xbeeSend(WireSL,xbeeSendBuf)) //try to passthrough with xbee - 2f6e: f7fe f9fd bl 136c - 2f72: 2800 cmp r0, #0 - 2f74: f040 80cb bne.w 310e - else if(xbeeSend(WireSL,xbeeSendBuf)) //try again if failed - 2f78: 4924 ldr r1, [pc, #144] ; (300c ) - 2f7a: 4834 ldr r0, [pc, #208] ; (304c ) - 2f7c: f7fe f9f6 bl 136c - 2f80: 2800 cmp r0, #0 - 2f82: f040 80c4 bne.w 310e - else if(xbeeSend(WireSL,xbeeSendBuf)) //try again if failed - 2f86: 4921 ldr r1, [pc, #132] ; (300c ) - 2f88: 4830 ldr r0, [pc, #192] ; (304c ) - 2f8a: f7fe f9ef bl 136c - 2f8e: 2800 cmp r0, #0 - 2f90: f040 80bd bne.w 310e - else if(xbeeSend(WireSL,xbeeSendBuf)) //try again if failed - 2f94: 491d ldr r1, [pc, #116] ; (300c ) - 2f96: 482d ldr r0, [pc, #180] ; (304c ) - 2f98: f7fe f9e8 bl 136c - 2f9c: 2800 cmp r0, #0 - 2f9e: f040 80b6 bne.w 310e - logprintln("WIREPASS_FAIL"); // if failed twice, log the fail // TODO write a retry system - 2fa2: 492b ldr r1, [pc, #172] ; (3050 ) - 2fa4: a801 add r0, sp, #4 - 2fa6: f008 fddb bl bb60 - 2faa: a801 add r0, sp, #4 - 2fac: f7fe f856 bl 105c - 2fb0: a801 add r0, sp, #4 - 2fb2: f008 fe0f bl bbd4 - strcat(conf,"FAIL"); - 2fb6: 491a ldr r1, [pc, #104] ; (3020 ) - 2fb8: 2205 movs r2, #5 - 2fba: f10d 0015 add.w r0, sp, #21 - 2fbe: f008 ff3b bl be38 - downlinkData = true; - 2fc2: 4b0d ldr r3, [pc, #52] ; (2ff8 ) - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2fc4: 480d ldr r0, [pc, #52] ; (2ffc ) - downlinkData = true; - 2fc6: 2201 movs r2, #1 - 2fc8: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 2fca: f00e ff59 bl 11e80 - 2fce: 4621 mov r1, r4 - 2fd0: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 2fd4: 4809 ldr r0, [pc, #36] ; (2ffc ) - 2fd6: f00e f9a5 bl 11324 - 2fda: e73e b.n 2e5a - 2fdc: 0001793c .word 0x0001793c - 2fe0: 1fff9178 .word 0x1fff9178 - 2fe4: 00017944 .word 0x00017944 - 2fe8: 0036ee80 .word 0x0036ee80 - 2fec: 1fff8844 .word 0x1fff8844 - 2ff0: 00017928 .word 0x00017928 - 2ff4: 1fff8758 .word 0x1fff8758 - 2ff8: 1fff8fc9 .word 0x1fff8fc9 - 2ffc: 1fff8fcc .word 0x1fff8fcc - 3000: 00017954 .word 0x00017954 - 3004: 00017980 .word 0x00017980 - 3008: 0001798c .word 0x0001798c - 300c: 1fff9274 .word 0x1fff9274 - 3010: 417b4a36 .word 0x417b4a36 - 3014: 000179e4 .word 0x000179e4 - 3018: 00017d0c .word 0x00017d0c - 301c: 000179ec .word 0x000179ec - 3020: 000179f8 .word 0x000179f8 - 3024: 00017998 .word 0x00017998 - 3028: 000179a4 .word 0x000179a4 - 302c: 000179b0 .word 0x000179b0 - 3030: 000179bc .word 0x000179bc - 3034: 417b4a3a .word 0x417b4a3a - 3038: 000179c8 .word 0x000179c8 - 303c: 000179d8 .word 0x000179d8 - 3040: 00017a04 .word 0x00017a04 - 3044: 00017a00 .word 0x00017a00 - 3048: 00017d1c .word 0x00017d1c - 304c: 419091ac .word 0x419091ac - 3050: 00017a0c .word 0x00017a0c - else if(strstr((char*)rxBuf,"GHOULPASS")){ - 3054: 493f ldr r1, [pc, #252] ; (3154 ) - 3056: 4840 ldr r0, [pc, #256] ; (3158 ) - 3058: f00e fba6 bl 117a8 - 305c: 2800 cmp r0, #0 - 305e: f43f aefc beq.w 2e5a - logprintln("GHOULPASS"); - 3062: ac04 add r4, sp, #16 - OutputSerial.println("GHOULPASS"); - 3064: 493b ldr r1, [pc, #236] ; (3154 ) - 3066: 483d ldr r0, [pc, #244] ; (315c ) - 3068: f7fd fda6 bl bb8 - logprintln("GHOULPASS"); - 306c: 4939 ldr r1, [pc, #228] ; (3154 ) - 306e: 4620 mov r0, r4 - 3070: f008 fd76 bl bb60 - 3074: 4620 mov r0, r4 - 3076: f7fd fff1 bl 105c - 307a: 4620 mov r0, r4 - 307c: f008 fdaa bl bbd4 - strcat((char*)xbeeSendBuf,(char*)rxBuf); - 3080: 4935 ldr r1, [pc, #212] ; (3158 ) - 3082: 4837 ldr r0, [pc, #220] ; (3160 ) - 3084: f00e f8c8 bl 11218 - char conf[15] = ",GHOUL"; - 3088: 4b36 ldr r3, [pc, #216] ; (3164 ) - 308a: e893 0003 ldmia.w r3, {r0, r1} - 308e: 2208 movs r2, #8 - 3090: 0c0b lsrs r3, r1, #16 - 3092: 9004 str r0, [sp, #16] - 3094: f8ad 1014 strh.w r1, [sp, #20] - 3098: f10d 0017 add.w r0, sp, #23 - 309c: 4629 mov r1, r5 - 309e: f88d 3016 strb.w r3, [sp, #22] - 30a2: f00e f867 bl 11174 - if(xbeeSend(GHOULSL,xbeeSendBuf)) //try to passthrough with xbee - 30a6: 492e ldr r1, [pc, #184] ; (3160 ) - 30a8: 482f ldr r0, [pc, #188] ; (3168 ) - 30aa: f7fe f95f bl 136c - 30ae: 2800 cmp r0, #0 - 30b0: d13e bne.n 3130 - else if(xbeeSend(GHOULSL,xbeeSendBuf)) //try again if failed - 30b2: 492b ldr r1, [pc, #172] ; (3160 ) - 30b4: 482c ldr r0, [pc, #176] ; (3168 ) - 30b6: f7fe f959 bl 136c - 30ba: 2800 cmp r0, #0 - 30bc: d138 bne.n 3130 - else if(xbeeSend(GHOULSL,xbeeSendBuf)) //try again if failed - 30be: 4928 ldr r1, [pc, #160] ; (3160 ) - 30c0: 4829 ldr r0, [pc, #164] ; (3168 ) - 30c2: f7fe f953 bl 136c - 30c6: 2800 cmp r0, #0 - 30c8: d132 bne.n 3130 - else if(xbeeSend(GHOULSL,xbeeSendBuf)) //try again if failed - 30ca: 4925 ldr r1, [pc, #148] ; (3160 ) - 30cc: 4826 ldr r0, [pc, #152] ; (3168 ) - 30ce: f7fe f94d bl 136c - 30d2: bb68 cbnz r0, 3130 - logprintln("GHOULPASS_FAIL"); // if failed twice, log the fail // TODO write a retry system - 30d4: 4925 ldr r1, [pc, #148] ; (316c ) - 30d6: a801 add r0, sp, #4 - 30d8: f008 fd42 bl bb60 - 30dc: a801 add r0, sp, #4 - 30de: f7fd ffbd bl 105c - 30e2: a801 add r0, sp, #4 - 30e4: f008 fd76 bl bbd4 - strcat(conf,"FAIL"); - 30e8: 4921 ldr r1, [pc, #132] ; (3170 ) - 30ea: 2205 movs r2, #5 - 30ec: f10d 0016 add.w r0, sp, #22 - 30f0: f008 fea2 bl be38 - downlinkData = true; - 30f4: 4b1f ldr r3, [pc, #124] ; (3174 ) - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 30f6: 4820 ldr r0, [pc, #128] ; (3178 ) - downlinkData = true; - 30f8: 2201 movs r2, #1 - 30fa: 701a strb r2, [r3, #0] - strncat(downlinkMessage2,conf,(downlinkMessageSize - strlen(downlinkMessage2) - 1)); - 30fc: f00e fec0 bl 11e80 - 3100: 4621 mov r1, r4 - 3102: f1c0 0263 rsb r2, r0, #99 ; 0x63 - 3106: 481c ldr r0, [pc, #112] ; (3178 ) - 3108: f00e f90c bl 11324 -} - 310c: e6a5 b.n 2e5a - logprintln("WIREPASS"); - 310e: 491b ldr r1, [pc, #108] ; (317c ) - 3110: a801 add r0, sp, #4 - 3112: f008 fd25 bl bb60 - 3116: a801 add r0, sp, #4 - 3118: f7fd ffa0 bl 105c - 311c: a801 add r0, sp, #4 - 311e: f008 fd59 bl bbd4 - strcat(conf,"PASS"); - 3122: 4917 ldr r1, [pc, #92] ; (3180 ) - 3124: 2205 movs r2, #5 - 3126: f10d 0015 add.w r0, sp, #21 - 312a: f008 fe85 bl be38 - 312e: e748 b.n 2fc2 - logprintln("GHOULPASS"); - 3130: 4908 ldr r1, [pc, #32] ; (3154 ) - 3132: a801 add r0, sp, #4 - 3134: f008 fd14 bl bb60 - 3138: a801 add r0, sp, #4 - 313a: f7fd ff8f bl 105c - 313e: a801 add r0, sp, #4 - 3140: f008 fd48 bl bbd4 - strcat(conf,"PASS"); - 3144: 490e ldr r1, [pc, #56] ; (3180 ) - 3146: 2205 movs r2, #5 - 3148: f10d 0016 add.w r0, sp, #22 - 314c: f008 fe74 bl be38 - 3150: e7d0 b.n 30f4 - 3152: bf00 nop - 3154: 00017a1c .word 0x00017a1c - 3158: 1fff9178 .word 0x1fff9178 - 315c: 1fff8844 .word 0x1fff8844 - 3160: 1fff9274 .word 0x1fff9274 - 3164: 00017d2c .word 0x00017d2c - 3168: 4256ddbc .word 0x4256ddbc - 316c: 00017a28 .word 0x00017a28 - 3170: 000179f8 .word 0x000179f8 - 3174: 1fff8fc9 .word 0x1fff8fc9 - 3178: 1fff8fcc .word 0x1fff8fcc - 317c: 00017a00 .word 0x00017a00 - 3180: 00017a04 .word 0x00017a04 - -00003184 : -{ - 3184: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3188: 4fa5 ldr r7, [pc, #660] ; (3420 ) - 318a: b0b3 sub sp, #204 ; 0xcc - ISBDCallback(); //During the Iridium retry protocol anything that still needs to happen needs to go in here - 318c: f7fe fd68 bl 1c60 - xbeeRead(); - 3190: f7fe fb74 bl 187c - 3194: 683b ldr r3, [r7, #0] - if(millis()-lastLog>gpsLogInterval){ - 3196: 4aa3 ldr r2, [pc, #652] ; (3424 ) - 3198: 930b str r3, [sp, #44] ; 0x2c - return ret; - 319a: 9b0b ldr r3, [sp, #44] ; 0x2c - 319c: 6812 ldr r2, [r2, #0] - 319e: 1a9b subs r3, r3, r2 - 31a0: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 - 31a4: d83c bhi.n 3220 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 31a6: 683b ldr r3, [r7, #0] - if (((millis() - lastSignalCheck) > signalCheckInterval)) { - 31a8: 4c9f ldr r4, [pc, #636] ; (3428 ) - 31aa: 9308 str r3, [sp, #32] - return ret; - 31ac: 9b08 ldr r3, [sp, #32] - 31ae: 6821 ldr r1, [r4, #0] - 31b0: f643 2298 movw r2, #15000 ; 0x3a98 - 31b4: 1a5b subs r3, r3, r1 - 31b6: 4293 cmp r3, r2 - 31b8: d812 bhi.n 31e0 - if ((sbd_csq > 0 && (millis() - lastMillisOfMessage) > messageTimeInterval) && sendingMessages) { - 31ba: 4b9c ldr r3, [pc, #624] ; (342c ) - 31bc: 681b ldr r3, [r3, #0] - 31be: 2b00 cmp r3, #0 - 31c0: dd0b ble.n 31da - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 31c2: 683b ldr r3, [r7, #0] - 31c4: f8df a268 ldr.w sl, [pc, #616] ; 3430 - 31c8: 4a9a ldr r2, [pc, #616] ; (3434 ) - 31ca: 930a str r3, [sp, #40] ; 0x28 - return ret; - 31cc: 9b0a ldr r3, [sp, #40] ; 0x28 - 31ce: f8da 1000 ldr.w r1, [sl] - 31d2: 6812 ldr r2, [r2, #0] - 31d4: 1a5b subs r3, r3, r1 - 31d6: 4293 cmp r3, r2 - 31d8: d825 bhi.n 3226 -}//End of Loop - 31da: b033 add sp, #204 ; 0xcc - 31dc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - int new_csq = 0; - 31e0: 2300 movs r3, #0 - int csq_err = modem.getSignalQuality(new_csq); - 31e2: 4895 ldr r0, [pc, #596] ; (3438 ) - int new_csq = 0; - 31e4: 930f str r3, [sp, #60] ; 0x3c - int csq_err = modem.getSignalQuality(new_csq); - 31e6: a90f add r1, sp, #60 ; 0x3c - 31e8: f000 fe0e bl 3e08 - if(csq_err == 0) // if executed during an Iridium session, this will yield an ISBD_REENTRANT; keep previous value - 31ec: 4605 mov r5, r0 - 31ee: 2800 cmp r0, #0 - 31f0: f000 80f4 beq.w 33dc - else if(csq_err == ISBD_REENTRANT){ - 31f4: 2809 cmp r0, #9 - 31f6: d00c beq.n 3212 - logprint("CSQ error code = "); - 31f8: 4990 ldr r1, [pc, #576] ; (343c ) - 31fa: a812 add r0, sp, #72 ; 0x48 - 31fc: f008 fcb0 bl bb60 - 3200: a812 add r0, sp, #72 ; 0x48 - 3202: f7fd fe6b bl edc - 3206: a812 add r0, sp, #72 ; 0x48 - 3208: f008 fce4 bl bbd4 - logprintln(csq_err); - 320c: 4628 mov r0, r5 - 320e: f7fd ffe9 bl 11e4 - if ((sbd_csq > 0 && (millis() - lastMillisOfMessage) > messageTimeInterval) && sendingMessages) { - 3212: 4b86 ldr r3, [pc, #536] ; (342c ) - 3214: 681b ldr r3, [r3, #0] - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3216: 683a ldr r2, [r7, #0] - 3218: 9209 str r2, [sp, #36] ; 0x24 - return ret; - 321a: 9a09 ldr r2, [sp, #36] ; 0x24 - lastSignalCheck = millis(); - 321c: 6022 str r2, [r4, #0] - 321e: e7ce b.n 31be - 3220: f7fd fd24 bl c6c - 3224: e7bf b.n 31a6 - snprintf(Packet2,maxPacketSize,"%06d,%4.4f,%4.4f,%u",gpsInfo.GPSTime,gpsInfo.GPSLat,gpsInfo.GPSLon,gpsInfo.GPSAlt); //Build the packet - 3226: 4d86 ldr r5, [pc, #536] ; (3440 ) - size_t rx_buf_size = RX_BUF_LENGTH; //RECENT CHANGE via TODO(1) - 3228: 2331 movs r3, #49 ; 0x31 - 322a: 9307 str r3, [sp, #28] - snprintf(Packet2,maxPacketSize,"%06d,%4.4f,%4.4f,%u",gpsInfo.GPSTime,gpsInfo.GPSLat,gpsInfo.GPSLon,gpsInfo.GPSAlt); //Build the packet - 322c: 68eb ldr r3, [r5, #12] - 322e: 68ac ldr r4, [r5, #8] - 3230: 9304 str r3, [sp, #16] - 3232: 6868 ldr r0, [r5, #4] - 3234: f00c f886 bl f344 <__aeabi_f2d> - 3238: e9cd 0102 strd r0, r1, [sp, #8] - 323c: 6828 ldr r0, [r5, #0] - 323e: f00c f881 bl f344 <__aeabi_f2d> - 3242: 4623 mov r3, r4 - if(downlinkData){ - 3244: 4c7f ldr r4, [pc, #508] ; (3444 ) - snprintf(Packet2,maxPacketSize,"%06d,%4.4f,%4.4f,%u",gpsInfo.GPSTime,gpsInfo.GPSLat,gpsInfo.GPSLon,gpsInfo.GPSAlt); //Build the packet - 3246: 4a80 ldr r2, [pc, #512] ; (3448 ) - 3248: e9cd 0100 strd r0, r1, [sp] - 324c: 2180 movs r1, #128 ; 0x80 - 324e: a812 add r0, sp, #72 ; 0x48 - 3250: f00d fbf2 bl 10a38 - if(downlinkData){ - 3254: 7823 ldrb r3, [r4, #0] - logprint("DownAttempt: "); - 3256: ae0f add r6, sp, #60 ; 0x3c - if(downlinkData){ - 3258: 2b00 cmp r3, #0 - 325a: f040 810b bne.w 3474 - logprint(Packet2);logprintln("Loop Sending"); - 325e: a912 add r1, sp, #72 ; 0x48 - 3260: 4630 mov r0, r6 - 3262: f008 fc7d bl bb60 - 3266: 4630 mov r0, r6 - 3268: f7fd fe38 bl edc - 326c: 4630 mov r0, r6 - 326e: f008 fcb1 bl bbd4 - 3272: 4976 ldr r1, [pc, #472] ; (344c ) - return (f) ? f->write((void*)buf, size) : 0; - 3274: f8df 81d8 ldr.w r8, [pc, #472] ; 3450 - 3278: 4630 mov r0, r6 - 327a: f008 fc71 bl bb60 - 327e: 4630 mov r0, r6 - 3280: f7fd feec bl 105c - 3284: 4630 mov r0, r6 - 3286: f008 fca5 bl bbd4 - 328a: 210c movs r1, #12 - 328c: 486f ldr r0, [pc, #444] ; (344c ) - 328e: f00b fcab bl ebe8 - 3292: 4870 ldr r0, [pc, #448] ; (3454 ) - 3294: f008 fb8c bl b9b0 - 3298: f8d8 4010 ldr.w r4, [r8, #16] - 329c: b184 cbz r4, 32c0 - return write((const uint8_t *)str, strlen(str)); } - 329e: a812 add r0, sp, #72 ; 0x48 - 32a0: f00e fdee bl 11e80 - 32a4: 6823 ldr r3, [r4, #0] - 32a6: 496c ldr r1, [pc, #432] ; (3458 ) - 32a8: 68db ldr r3, [r3, #12] - 32aa: 428b cmp r3, r1 - 32ac: 4602 mov r2, r0 - 32ae: f040 812e bne.w 350e - return m_fFile ? m_fFile->write(buf, count) : - 32b2: 6d20 ldr r0, [r4, #80] ; 0x50 - 32b4: 2800 cmp r0, #0 - 32b6: f000 8107 beq.w 34c8 - 32ba: a912 add r1, sp, #72 ; 0x48 - 32bc: f004 fd74 bl 7da8 - size_t println(const char s[]) { return print(s) + println(); } - 32c0: 4863 ldr r0, [pc, #396] ; (3450 ) - 32c2: f008 fb75 bl b9b0 - if (f) f->flush(); - 32c6: f8d8 3010 ldr.w r3, [r8, #16] - 32ca: b15b cbz r3, 32e4 - 32cc: 681a ldr r2, [r3, #0] - 32ce: 4963 ldr r1, [pc, #396] ; (345c ) - 32d0: 6992 ldr r2, [r2, #24] - 32d2: 428a cmp r2, r1 - 32d4: f040 8118 bne.w 3508 - return m_fFile ? m_fFile->sync() : - 32d8: 6d18 ldr r0, [r3, #80] ; 0x50 - 32da: 2800 cmp r0, #0 - 32dc: f000 80fc beq.w 34d8 - 32e0: f004 fcb6 bl 7c50 - uint8_t sbd_err = modem.sendReceiveSBDText(Packet2,rxBuf,rx_buf_size); //Message, RecieveBuffer, SizeOfBuffer - 32e4: ab07 add r3, sp, #28 - 32e6: 4a5e ldr r2, [pc, #376] ; (3460 ) - 32e8: 4853 ldr r0, [pc, #332] ; (3438 ) - rxLogFile.print(String(gpsInfo.GPSTime)); //Log time of RX - 32ea: f8df 8178 ldr.w r8, [pc, #376] ; 3464 - uint8_t sbd_err = modem.sendReceiveSBDText(Packet2,rxBuf,rx_buf_size); //Message, RecieveBuffer, SizeOfBuffer - 32ee: a912 add r1, sp, #72 ; 0x48 - 32f0: f001 f9d0 bl 4694 - logprint("SBD send receive completed with return code: "); - 32f4: 495c ldr r1, [pc, #368] ; (3468 ) - logprintln(sbd_err); // 0 is good - 32f6: b2c4 uxtb r4, r0 - logprint("SBD send receive completed with return code: "); - 32f8: 4630 mov r0, r6 - 32fa: f008 fc31 bl bb60 - 32fe: 4630 mov r0, r6 - 3300: f7fd fdec bl edc - 3304: 4630 mov r0, r6 - 3306: f008 fc65 bl bbd4 - logprintln(sbd_err); // 0 is good - 330a: 4620 mov r0, r4 - 330c: f7fd ff6a bl 11e4 - StringSumHelper(const char *p) : String(p) {} - 3310: 4956 ldr r1, [pc, #344] ; (346c ) - 3312: 4630 mov r0, r6 - 3314: f008 fc24 bl bb60 - OutputSerial.println("Send Error: " +String(sbd_err)); - 3318: 4621 mov r1, r4 - 331a: a80c add r0, sp, #48 ; 0x30 - 331c: f008 fc96 bl bc4c - 3320: a90c add r1, sp, #48 ; 0x30 - 3322: 4630 mov r0, r6 - 3324: f008 fd50 bl bdc8 - 3328: 4601 mov r1, r0 - size_t println(const String &s) { return print(s) + println(); } - 332a: 484a ldr r0, [pc, #296] ; (3454 ) - 332c: f008 fb12 bl b954 - 3330: 4848 ldr r0, [pc, #288] ; (3454 ) - 3332: f008 fb3d bl b9b0 - 3336: a80c add r0, sp, #48 ; 0x30 - 3338: f008 fc4c bl bbd4 -class StringSumHelper : public String - 333c: 4630 mov r0, r6 - 333e: f008 fc49 bl bbd4 - rxLogFile.print(String(gpsInfo.GPSTime)); //Log time of RX - 3342: 220a movs r2, #10 - 3344: 68a9 ldr r1, [r5, #8] - 3346: 4630 mov r0, r6 - 3348: f008 fcc4 bl bcd4 - 334c: 4631 mov r1, r6 - 334e: 4640 mov r0, r8 - 3350: f008 fb00 bl b954 - 3354: 4630 mov r0, r6 - 3356: f008 fc3d bl bbd4 - return (f) ? f->write((void*)buf, size) : 0; - 335a: f8d8 3010 ldr.w r3, [r8, #16] - 335e: b16b cbz r3, 337c - 3360: 681a ldr r2, [r3, #0] - 3362: 68d4 ldr r4, [r2, #12] - 3364: 4a3c ldr r2, [pc, #240] ; (3458 ) - 3366: 4294 cmp r4, r2 - 3368: f040 80c9 bne.w 34fe - return m_fFile ? m_fFile->write(buf, count) : - 336c: 6d18 ldr r0, [r3, #80] ; 0x50 - 336e: 2800 cmp r0, #0 - 3370: f000 80b9 beq.w 34e6 - 3374: 493e ldr r1, [pc, #248] ; (3470 ) - 3376: 2201 movs r2, #1 - 3378: f004 fd16 bl 7da8 - uplink(); //Run uplink message handling (bitsIncoming) - 337c: f7ff fb3e bl 29fc - for (int k = 0; k < rx_buf_size; k++)//Prints RX characters to SD file - 3380: 9b07 ldr r3, [sp, #28] - 3382: 2b00 cmp r3, #0 - 3384: d033 beq.n 33ee - 3386: 2400 movs r4, #0 - 3388: 4d35 ldr r5, [pc, #212] ; (3460 ) - 338a: f8df b0cc ldr.w fp, [pc, #204] ; 3458 - rxBuf[k] = 0; - 338e: 46a1 mov r9, r4 - 3390: e00b b.n 33aa - 3392: 4631 mov r1, r6 - 3394: f004 fd08 bl 7da8 - delay(1); - 3398: 2001 movs r0, #1 - rxBuf[k] = 0; - 339a: f805 9c01 strb.w r9, [r5, #-1] - delay(1); - 339e: f009 f95f bl c660 - for (int k = 0; k < rx_buf_size; k++)//Prints RX characters to SD file - 33a2: 9b07 ldr r3, [sp, #28] - 33a4: 3401 adds r4, #1 - 33a6: 42a3 cmp r3, r4 - 33a8: d921 bls.n 33ee - return (f) ? f->write(&b, 1) : 0; - 33aa: f8d8 1010 ldr.w r1, [r8, #16] - rxLogFile.write(rxBuf[k]); //Trying write instead of print, shoud fix garbage data - 33ae: f815 3b01 ldrb.w r3, [r5], #1 - 33b2: f88d 303c strb.w r3, [sp, #60] ; 0x3c - 33b6: 2900 cmp r1, #0 - 33b8: d0ee beq.n 3398 - 33ba: 680b ldr r3, [r1, #0] - 33bc: 68db ldr r3, [r3, #12] - 33be: 455b cmp r3, fp - 33c0: f04f 0201 mov.w r2, #1 - 33c4: d10e bne.n 33e4 - 33c6: 6d08 ldr r0, [r1, #80] ; 0x50 - 33c8: 2800 cmp r0, #0 - 33ca: d1e2 bne.n 3392 - 33cc: 6d48 ldr r0, [r1, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 33ce: 2201 movs r2, #1 - 33d0: 2800 cmp r0, #0 - 33d2: d0e1 beq.n 3398 - 33d4: 4631 mov r1, r6 - 33d6: f002 fe75 bl 60c4 - 33da: e7dd b.n 3398 - sbd_csq = new_csq; - 33dc: 4a13 ldr r2, [pc, #76] ; (342c ) - 33de: 9b0f ldr r3, [sp, #60] ; 0x3c - 33e0: 6013 str r3, [r2, #0] - 33e2: e718 b.n 3216 - 33e4: 4608 mov r0, r1 - 33e6: 2201 movs r2, #1 - 33e8: 4631 mov r1, r6 - 33ea: 4798 blx r3 - 33ec: e7d4 b.n 3398 - rxLogFile.println(); - 33ee: 481d ldr r0, [pc, #116] ; (3464 ) - 33f0: f008 fade bl b9b0 - if (f) f->flush(); - 33f4: f8d8 3010 ldr.w r3, [r8, #16] - 33f8: b14b cbz r3, 340e - 33fa: 681a ldr r2, [r3, #0] - 33fc: 4917 ldr r1, [pc, #92] ; (345c ) - 33fe: 6992 ldr r2, [r2, #24] - 3400: 428a cmp r2, r1 - 3402: d179 bne.n 34f8 - return m_fFile ? m_fFile->sync() : - 3404: 6d18 ldr r0, [r3, #80] ; 0x50 - 3406: 2800 cmp r0, #0 - 3408: d058 beq.n 34bc - 340a: f004 fc21 bl 7c50 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 340e: 683b ldr r3, [r7, #0] - 3410: 930f str r3, [sp, #60] ; 0x3c - return ret; - 3412: 9b0f ldr r3, [sp, #60] ; 0x3c - lastMillisOfMessage = millis(); - 3414: f8ca 3000 str.w r3, [sl] -}//End of Loop - 3418: b033 add sp, #204 ; 0xcc - 341a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 341e: bf00 nop - 3420: 1fff978c .word 0x1fff978c - 3424: 1fff9108 .word 0x1fff9108 - 3428: 1fff9110 .word 0x1fff9110 - 342c: 1fff91ac .word 0x1fff91ac - 3430: 1fff910c .word 0x1fff910c - 3434: 1fff8758 .word 0x1fff8758 - 3438: 1fff9114 .word 0x1fff9114 - 343c: 00017a38 .word 0x00017a38 - 3440: 1fff872c .word 0x1fff872c - 3444: 1fff8fc9 .word 0x1fff8fc9 - 3448: 00017a4c .word 0x00017a4c - 344c: 00017a70 .word 0x00017a70 - 3450: 1fff8774 .word 0x1fff8774 - 3454: 1fff8844 .word 0x1fff8844 - 3458: 000009ad .word 0x000009ad - 345c: 00000971 .word 0x00000971 - 3460: 1fff9178 .word 0x1fff9178 - 3464: 1fff875c .word 0x1fff875c - 3468: 00017a80 .word 0x00017a80 - 346c: 00017ab0 .word 0x00017ab0 - 3470: 00017ac0 .word 0x00017ac0 - logprint("DownAttempt: "); - 3474: 4928 ldr r1, [pc, #160] ; (3518 ) - 3476: 4630 mov r0, r6 - 3478: f008 fb72 bl bb60 - 347c: 4630 mov r0, r6 - 347e: f7fd fd2d bl edc - 3482: 4630 mov r0, r6 - 3484: f008 fba6 bl bbd4 - logprintln(downlinkMessage2); - 3488: 4924 ldr r1, [pc, #144] ; (351c ) - 348a: 4630 mov r0, r6 - 348c: f008 fb68 bl bb60 - 3490: 4630 mov r0, r6 - 3492: f7fd fde3 bl 105c - 3496: 4630 mov r0, r6 - 3498: f008 fb9c bl bbd4 - strncat(Packet2,downlinkMessage2,(maxPacketSize - strlen(Packet2) - 1)); //Add data from downlinkMessage2 into Packet2, check for size - 349c: a812 add r0, sp, #72 ; 0x48 - 349e: f00e fcef bl 11e80 - 34a2: 491e ldr r1, [pc, #120] ; (351c ) - 34a4: f1c0 027f rsb r2, r0, #127 ; 0x7f - 34a8: a812 add r0, sp, #72 ; 0x48 - 34aa: f00d ff3b bl 11324 - downlinkData = false; - 34ae: 2100 movs r1, #0 - memset(downlinkMessage2, 0, downlinkMessageSize); //Clear downlink message - 34b0: 2264 movs r2, #100 ; 0x64 - 34b2: 481a ldr r0, [pc, #104] ; (351c ) - downlinkData = false; - 34b4: 7021 strb r1, [r4, #0] - memset(downlinkMessage2, 0, downlinkMessageSize); //Clear downlink message - 34b6: f00d fe5d bl 11174 - 34ba: e6d0 b.n 325e - 34bc: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->sync() : false; - 34be: 2800 cmp r0, #0 - 34c0: d0a5 beq.n 340e - 34c2: f002 fb93 bl 5bec - 34c6: e7a2 b.n 340e - 34c8: 6d60 ldr r0, [r4, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 34ca: 2800 cmp r0, #0 - 34cc: f43f aef8 beq.w 32c0 - 34d0: a912 add r1, sp, #72 ; 0x48 - 34d2: f002 fdf7 bl 60c4 - 34d6: e6f3 b.n 32c0 - 34d8: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->sync() : false; - 34da: 2800 cmp r0, #0 - 34dc: f43f af02 beq.w 32e4 - 34e0: f002 fb84 bl 5bec - 34e4: e6fe b.n 32e4 - 34e6: 6d58 ldr r0, [r3, #84] ; 0x54 - m_xFile ? m_xFile->write(buf, count) : 0; - 34e8: 2800 cmp r0, #0 - 34ea: f43f af47 beq.w 337c - 34ee: 490c ldr r1, [pc, #48] ; (3520 ) - 34f0: 2201 movs r2, #1 - 34f2: f002 fde7 bl 60c4 - 34f6: e741 b.n 337c - 34f8: 4618 mov r0, r3 - 34fa: 4790 blx r2 - 34fc: e787 b.n 340e - return (f) ? f->write((void*)buf, size) : 0; - 34fe: 4908 ldr r1, [pc, #32] ; (3520 ) - 3500: 4618 mov r0, r3 - 3502: 2201 movs r2, #1 - 3504: 47a0 blx r4 - 3506: e739 b.n 337c - if (f) f->flush(); - 3508: 4618 mov r0, r3 - 350a: 4790 blx r2 - 350c: e6ea b.n 32e4 - return (f) ? f->write((void*)buf, size) : 0; - 350e: 4620 mov r0, r4 - 3510: a912 add r1, sp, #72 ; 0x48 - 3512: 4798 blx r3 - 3514: e6d4 b.n 32c0 - 3516: bf00 nop - 3518: 00017a60 .word 0x00017a60 - 351c: 1fff8fcc .word 0x1fff8fcc - 3520: 00017ac0 .word 0x00017ac0 - -00003524 : -} - -// markers to read data from packet array. this is the index, so the 12th item in the array -uint8_t ZBRxResponse::getDataOffset() { - return 11; -} - 3524: 200b movs r0, #11 - 3526: 4770 bx lr - -00003528 : - _broadcastRadius = ZB_BROADCAST_RADIUS_MAX_HOPS; - _option = ZB_TX_UNICAST; -} - -uint8_t ZBTxRequest::getFrameData(uint8_t pos) { - if (pos == 0) { - 3528: 290b cmp r1, #11 - 352a: d820 bhi.n 356e - 352c: e8df f001 tbb [pc, r1] - 3530: 0e0c0a08 .word 0x0e0c0a08 - 3534: 16141210 .word 0x16141210 - 3538: 061d1b18 .word 0x061d1b18 - } else if (pos == 9) { - return _addr16 & 0xff; - } else if (pos == 10) { - return _broadcastRadius; - } else if (pos == 11) { - return _option; - 353c: 7ec0 ldrb r0, [r0, #27] - 353e: 4770 bx lr - return (_addr64.getMsb() >> 24) & 0xff; - 3540: 7cc0 ldrb r0, [r0, #19] - 3542: 4770 bx lr - return (_addr64.getMsb() >> 16) & 0xff; - 3544: 7c80 ldrb r0, [r0, #18] - 3546: 4770 bx lr - return (_addr64.getMsb() >> 8) & 0xff; - 3548: 7c40 ldrb r0, [r0, #17] - 354a: 4770 bx lr - return _addr64.getMsb() & 0xff; - 354c: 7c00 ldrb r0, [r0, #16] - 354e: 4770 bx lr - return (_addr64.getLsb() >> 24) & 0xff; - 3550: 7dc0 ldrb r0, [r0, #23] - 3552: 4770 bx lr - return (_addr64.getLsb() >> 16) & 0xff; - 3554: 7d80 ldrb r0, [r0, #22] - 3556: 4770 bx lr - return (_addr64.getLsb() >> 8) & 0xff; - 3558: 7d40 ldrb r0, [r0, #21] - 355a: 4770 bx lr - return _addr64.getLsb() & 0xff; - 355c: 7d00 ldrb r0, [r0, #20] - 355e: 4770 bx lr - return (_addr16 >> 8) & 0xff; - 3560: 8b00 ldrh r0, [r0, #24] - 3562: 0a00 lsrs r0, r0, #8 - 3564: 4770 bx lr - return _addr16 & 0xff; - 3566: 7e00 ldrb r0, [r0, #24] - 3568: 4770 bx lr - return _broadcastRadius; - 356a: 7e80 ldrb r0, [r0, #26] - 356c: 4770 bx lr - } else { - return getPayload()[pos - ZB_TX_API_LENGTH]; - 356e: 6883 ldr r3, [r0, #8] - 3570: 440b add r3, r1 - 3572: f813 0c0c ldrb.w r0, [r3, #-12] - } -} - 3576: 4770 bx lr - -00003578 : - -uint8_t ZBTxRequest::getFrameDataLength() { - return ZB_TX_API_LENGTH + getPayloadLength(); - 3578: 7b00 ldrb r0, [r0, #12] - 357a: 300c adds r0, #12 -} - 357c: b2c0 uxtb r0, r0 - 357e: 4770 bx lr - -00003580 : -uint8_t ZBRxResponse::getDataLength() { - 3580: b510 push {r4, lr} - return getPacketLength() - getDataOffset() - 1; - 3582: 6801 ldr r1, [r0, #0] - 3584: 4a07 ldr r2, [pc, #28] ; (35a4 ) - 3586: 684b ldr r3, [r1, #4] - return ((_msbLength << 8) & 0xff) + (_lsbLength & 0xff); - 3588: 7a84 ldrb r4, [r0, #10] - 358a: 4293 cmp r3, r2 - 358c: d104 bne.n 3598 - return getPacketLength() - getDataOffset() - 1; - 358e: 3c01 subs r4, #1 - 3590: 200b movs r0, #11 - 3592: 1a20 subs r0, r4, r0 -} - 3594: b2c0 uxtb r0, r0 - 3596: bd10 pop {r4, pc} - return getPacketLength() - getDataOffset() - 1; - 3598: 4798 blx r3 - 359a: 3c01 subs r4, #1 - 359c: 1a20 subs r0, r4, r0 -} - 359e: b2c0 uxtb r0, r0 - 35a0: bd10 pop {r4, pc} - 35a2: bf00 nop - 35a4: 00003525 .word 0x00003525 - -000035a8 : -} - 35a8: 4770 bx lr - 35aa: bf00 nop - -000035ac : -} - 35ac: 7900 ldrb r0, [r0, #4] - 35ae: 4770 bx lr - -000035b0 : -} - 35b0: 7a40 ldrb r0, [r0, #9] - 35b2: 4770 bx lr - -000035b4 : - return _errorCode > 0; - 35b4: 7a80 ldrb r0, [r0, #10] -} - 35b6: 3800 subs r0, #0 - 35b8: bf18 it ne - 35ba: 2001 movne r0, #1 - 35bc: 4770 bx lr - 35be: bf00 nop - -000035c0 : -} - 35c0: 7a80 ldrb r0, [r0, #10] - 35c2: 4770 bx lr - -000035c4 : -} - 35c4: 4770 bx lr - 35c6: bf00 nop - -000035c8 : - return getFrameData()[4]; - 35c8: 6803 ldr r3, [r0, #0] -} - 35ca: 7918 ldrb r0, [r3, #4] - 35cc: 4770 bx lr - 35ce: bf00 nop - -000035d0 : - return _frameDataPtr; - 35d0: 6803 ldr r3, [r0, #0] - _frameDataPtr = frameDataPtr; - 35d2: 600b str r3, [r1, #0] - return _apiId; - 35d4: 7903 ldrb r3, [r0, #4] - _apiId = apiId; - 35d6: 710b strb r3, [r1, #4] - return _complete; - 35d8: 7a43 ldrb r3, [r0, #9] - _complete = complete; - 35da: 724b strb r3, [r1, #9] - return _checksum; - 35dc: 79c3 ldrb r3, [r0, #7] - _checksum = checksum; - 35de: 71cb strb r3, [r1, #7] - return _errorCode; - 35e0: 7a83 ldrb r3, [r0, #10] - _errorCode = errorCode; - 35e2: 728b strb r3, [r1, #10] - return _frameLength; - 35e4: 7a03 ldrb r3, [r0, #8] - _frameLength = frameLength; - 35e6: 720b strb r3, [r1, #8] - return _msbLength; - 35e8: 7943 ldrb r3, [r0, #5] - _msbLength = msbLength; - 35ea: 714b strb r3, [r1, #5] - return _lsbLength; - 35ec: 7983 ldrb r3, [r0, #6] - _lsbLength = lsbLength; - 35ee: 718b strb r3, [r1, #6] -} - 35f0: 4770 bx lr - 35f2: bf00 nop - -000035f4 : -ZBRxResponse::ZBRxResponse(): RxDataResponse() { - 35f4: b410 push {r4} - 35f6: 4c03 ldr r4, [pc, #12] ; (3604 ) - 35f8: 6004 str r4, [r0, #0] - _remoteAddress64 = XBeeAddress64(); - 35fa: 2100 movs r1, #0 -} - 35fc: bc10 pop {r4} - _remoteAddress64 = XBeeAddress64(); - 35fe: 6101 str r1, [r0, #16] - 3600: 6141 str r1, [r0, #20] -} - 3602: 4770 bx lr - 3604: 00017d54 .word 0x00017d54 - -00003608 : -} - 3608: 3010 adds r0, #16 - 360a: 4770 bx lr - -0000360c : - return _frameDataPtr; - 360c: 6802 ldr r2, [r0, #0] - _frameDataPtr = frameDataPtr; - 360e: 600a str r2, [r1, #0] - return _apiId; - 3610: 7903 ldrb r3, [r0, #4] - _apiId = apiId; - 3612: 710b strb r3, [r1, #4] - return _complete; - 3614: 7a43 ldrb r3, [r0, #9] - _complete = complete; - 3616: 724b strb r3, [r1, #9] - return _checksum; - 3618: 79c3 ldrb r3, [r0, #7] - _checksum = checksum; - 361a: 71cb strb r3, [r1, #7] - return _errorCode; - 361c: 7a83 ldrb r3, [r0, #10] - _errorCode = errorCode; - 361e: 728b strb r3, [r1, #10] - return _frameLength; - 3620: 7a03 ldrb r3, [r0, #8] - _frameLength = frameLength; - 3622: 720b strb r3, [r1, #8] - return _msbLength; - 3624: 7943 ldrb r3, [r0, #5] - _msbLength = msbLength; - 3626: 714b strb r3, [r1, #5] - return _lsbLength; - 3628: 7983 ldrb r3, [r0, #6] - _lsbLength = lsbLength; - 362a: 718b strb r3, [r1, #6] - zb->getRemoteAddress64().setMsb((uint32_t(getFrameData()[0]) << 24) + (uint32_t(getFrameData()[1]) << 16) + (uint16_t(getFrameData()[2]) << 8) + getFrameData()[3]); - 362c: 7853 ldrb r3, [r2, #1] - 362e: f892 c000 ldrb.w ip, [r2] - 3632: 78d0 ldrb r0, [r2, #3] - 3634: 041b lsls r3, r3, #16 - 3636: eb03 630c add.w r3, r3, ip, lsl #24 - 363a: 4403 add r3, r0 - 363c: 7890 ldrb r0, [r2, #2] - 363e: eb03 2300 add.w r3, r3, r0, lsl #8 - _msb = msb; - 3642: 60cb str r3, [r1, #12] - zb->getRemoteAddress64().setLsb((uint32_t(getFrameData()[4]) << 24) + (uint32_t(getFrameData()[5]) << 16) + (uint16_t(getFrameData()[6]) << 8) + (getFrameData()[7])); - 3644: 7953 ldrb r3, [r2, #5] - 3646: f892 c004 ldrb.w ip, [r2, #4] - 364a: 79d0 ldrb r0, [r2, #7] - 364c: 7992 ldrb r2, [r2, #6] - 364e: 041b lsls r3, r3, #16 - 3650: eb03 630c add.w r3, r3, ip, lsl #24 - 3654: 4403 add r3, r0 - 3656: eb03 2302 add.w r3, r3, r2, lsl #8 - _lsb = lsb; - 365a: 610b str r3, [r1, #16] -} - 365c: 4770 bx lr - 365e: bf00 nop - -00003660 : -uint8_t* RxDataResponse::getData() { - 3660: b510 push {r4, lr} - return _frameDataPtr; - 3662: e9d0 2400 ldrd r2, r4, [r0] - return getFrameData() + getDataOffset(); - 3666: 6853 ldr r3, [r2, #4] - 3668: 4798 blx r3 -} - 366a: 4420 add r0, r4 - 366c: bd10 pop {r4, pc} - 366e: bf00 nop - -00003670 : -} - 3670: 4770 bx lr - 3672: bf00 nop - -00003674 : -} - 3674: 7980 ldrb r0, [r0, #6] - 3676: 4770 bx lr - -00003678 : - _escape = false; - 3678: 2200 movs r2, #0 -XBee::XBee(): _response(XBeeResponse()) { - 367a: b410 push {r4} - _response.setFrameData(_responseFrameData); - 367c: f100 0411 add.w r4, r0, #17 - _serial = &Serial1; - 3680: 4905 ldr r1, [pc, #20] ; (3698 ) - _frameDataPtr = frameDataPtr; - 3682: 6004 str r4, [r0, #0] - _escape = false; - 3684: 8182 strh r2, [r0, #12] -} - 3686: bc10 pop {r4} - _checksumTotal = 0; - 3688: 73c2 strb r2, [r0, #15] - _nextFrameId = 0; - 368a: 7402 strb r2, [r0, #16] - _complete = false; - 368c: 7242 strb r2, [r0, #9] - _errorCode = NO_ERROR; - 368e: 7282 strb r2, [r0, #10] - _checksum = 0; - 3690: 71c2 strb r2, [r0, #7] - _serial = &Serial1; - 3692: f8c0 1080 str.w r1, [r0, #128] ; 0x80 -} - 3696: 4770 bx lr - 3698: 1fff87c4 .word 0x1fff87c4 - -0000369c : - 369c: f8c0 1080 str.w r1, [r0, #128] ; 0x80 - 36a0: 4770 bx lr - 36a2: bf00 nop - -000036a4 : -} - 36a4: 4770 bx lr - 36a6: bf00 nop - -000036a8 : -void XBee::readPacket() { - 36a8: b5f8 push {r3, r4, r5, r6, r7, lr} - if (_response.isAvailable() || _response.isError()) { - 36aa: 7a43 ldrb r3, [r0, #9] -void XBee::readPacket() { - 36ac: 4604 mov r4, r0 - if (_response.isAvailable() || _response.isError()) { - 36ae: 2b00 cmp r3, #0 - 36b0: d13a bne.n 3728 - 36b2: 7a83 ldrb r3, [r0, #10] - 36b4: 2b00 cmp r3, #0 - 36b6: d137 bne.n 3728 - _pos++; - 36b8: 2701 movs r7, #1 - _pos++; - 36ba: 2604 movs r6, #4 - _pos++; - 36bc: 2503 movs r5, #3 - return _serial->available(); - 36be: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 - 36c2: 6803 ldr r3, [r0, #0] - 36c4: 691b ldr r3, [r3, #16] - 36c6: 4798 blx r3 - while (available()) { - 36c8: 2800 cmp r0, #0 - 36ca: d052 beq.n 3772 - return _serial->read(); - 36cc: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 - 36d0: 6803 ldr r3, [r0, #0] - 36d2: 695b ldr r3, [r3, #20] - 36d4: 4798 blx r3 - if (_pos > 0 && b == START_BYTE && ATAP == 2) { - 36d6: 7b63 ldrb r3, [r4, #13] - return _serial->read(); - 36d8: b2c0 uxtb r0, r0 - b = read(); - 36da: 73a0 strb r0, [r4, #14] - if (_pos > 0 && b == START_BYTE && ATAP == 2) { - 36dc: b353 cbz r3, 3734 - 36de: 287e cmp r0, #126 ; 0x7e - 36e0: d045 beq.n 376e - if (_pos > 0 && b == ESCAPE) { - 36e2: 287d cmp r0, #125 ; 0x7d - 36e4: d031 beq.n 374a - if (_escape == true) { - 36e6: 7b22 ldrb r2, [r4, #12] - 36e8: b12a cbz r2, 36f6 - b = 0x20 ^ b; - 36ea: 7ba2 ldrb r2, [r4, #14] - _escape = false; - 36ec: 2100 movs r1, #0 - b = 0x20 ^ b; - 36ee: f082 0220 eor.w r2, r2, #32 - 36f2: 73a2 strb r2, [r4, #14] - _escape = false; - 36f4: 7321 strb r1, [r4, #12] - if (_pos >= API_ID_INDEX) { - 36f6: 2b02 cmp r3, #2 - 36f8: d903 bls.n 3702 - _checksumTotal+= b; - 36fa: 7be2 ldrb r2, [r4, #15] - 36fc: 7ba1 ldrb r1, [r4, #14] - 36fe: 440a add r2, r1 - 3700: 73e2 strb r2, [r4, #15] - switch(_pos) { - 3702: 2b03 cmp r3, #3 - 3704: d836 bhi.n 3774 - 3706: e8df f003 tbb [pc, r3] - 370a: 0a1b .short 0x0a1b - 370c: 0206 .short 0x0206 - _apiId = apiId; - 370e: 7ba3 ldrb r3, [r4, #14] - 3710: 7123 strb r3, [r4, #4] - _pos++; - 3712: 7366 strb r6, [r4, #13] - break; - 3714: e7d3 b.n 36be - _lsbLength = lsbLength; - 3716: 7ba3 ldrb r3, [r4, #14] - 3718: 71a3 strb r3, [r4, #6] - _pos++; - 371a: 7365 strb r5, [r4, #13] - break; - 371c: e7cf b.n 36be - _msbLength = msbLength; - 371e: 7ba2 ldrb r2, [r4, #14] - 3720: 7162 strb r2, [r4, #5] - _pos++; - 3722: 2302 movs r3, #2 - 3724: 7363 strb r3, [r4, #13] - break; - 3726: e7ca b.n 36be - _escape = false; - 3728: 2300 movs r3, #0 - 372a: 81a3 strh r3, [r4, #12] - _apiId = 0; - 372c: 6063 str r3, [r4, #4] - _frameLength = 0; - 372e: 8123 strh r3, [r4, #8] - _errorCode = NO_ERROR; - 3730: 72a3 strb r3, [r4, #10] -} - 3732: e7c1 b.n 36b8 - if (_escape == true) { - 3734: 7b22 ldrb r2, [r4, #12] - 3736: b11a cbz r2, 3740 - b = 0x20 ^ b; - 3738: f080 0020 eor.w r0, r0, #32 - 373c: 73a0 strb r0, [r4, #14] - _escape = false; - 373e: 7323 strb r3, [r4, #12] - if (b == START_BYTE) { - 3740: 7ba3 ldrb r3, [r4, #14] - 3742: 2b7e cmp r3, #126 ; 0x7e - 3744: d1bb bne.n 36be - _pos++; - 3746: 7367 strb r7, [r4, #13] - 3748: e7b9 b.n 36be - return _serial->available(); - 374a: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 - 374e: 6803 ldr r3, [r0, #0] - 3750: 691b ldr r3, [r3, #16] - 3752: 4798 blx r3 - if (available()) { - 3754: b148 cbz r0, 376a - return _serial->read(); - 3756: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 - 375a: 6803 ldr r3, [r0, #0] - 375c: 695b ldr r3, [r3, #20] - 375e: 4798 blx r3 - b = 0x20 ^ b; - 3760: f080 0020 eor.w r0, r0, #32 - if (_pos >= API_ID_INDEX) { - 3764: 7b63 ldrb r3, [r4, #13] - b = 0x20 ^ b; - 3766: 73a0 strb r0, [r4, #14] - 3768: e7bd b.n 36e6 - _escape = true; - 376a: 7327 strb r7, [r4, #12] - continue; - 376c: e7a7 b.n 36be - _errorCode = errorCode; - 376e: 2303 movs r3, #3 - 3770: 72a3 strb r3, [r4, #10] -} - 3772: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (_pos > MAX_FRAME_DATA_SIZE) { - 3774: 2b6e cmp r3, #110 ; 0x6e - 3776: d80c bhi.n 3792 - if (_pos == (_response.getPacketLength() + 3)) { - 3778: 79a2 ldrb r2, [r4, #6] - 377a: 3203 adds r2, #3 - 377c: 4293 cmp r3, r2 - 377e: d00b beq.n 3798 - _response.getFrameData()[_pos - 4] = b; - 3780: 6822 ldr r2, [r4, #0] - 3782: 441a add r2, r3 - 3784: 7ba3 ldrb r3, [r4, #14] - 3786: f802 3c04 strb.w r3, [r2, #-4] - _pos++; - 378a: 7b63 ldrb r3, [r4, #13] - 378c: 3301 adds r3, #1 - 378e: 7363 strb r3, [r4, #13] - 3790: e795 b.n 36be - _errorCode = errorCode; - 3792: 2302 movs r3, #2 - 3794: 72a3 strb r3, [r4, #10] -} - 3796: bdf8 pop {r3, r4, r5, r6, r7, pc} - if ((_checksumTotal & 0xff) == 0xff) { - 3798: 7be2 ldrb r2, [r4, #15] - 379a: 2aff cmp r2, #255 ; 0xff - 379c: d007 beq.n 37ae - 379e: 2101 movs r1, #1 - _pos = 0; - 37a0: 2200 movs r2, #0 - _response.setFrameLength(_pos - 4); - 37a2: 3b04 subs r3, #4 - _errorCode = errorCode; - 37a4: 72a1 strb r1, [r4, #10] - _frameLength = frameLength; - 37a6: 7223 strb r3, [r4, #8] - _pos = 0; - 37a8: 7362 strb r2, [r4, #13] - _checksumTotal = 0; - 37aa: 73e2 strb r2, [r4, #15] -} - 37ac: bdf8 pop {r3, r4, r5, r6, r7, pc} - _checksum = checksum; - 37ae: 7ba1 ldrb r1, [r4, #14] - 37b0: 71e1 strb r1, [r4, #7] - _complete = complete; - 37b2: 2201 movs r2, #1 - 37b4: 7262 strb r2, [r4, #9] -} - 37b6: 2100 movs r1, #0 - 37b8: e7f2 b.n 37a0 - 37ba: bf00 nop - -000037bc : -bool XBee::readPacket(int timeout) { - 37bc: b5f0 push {r4, r5, r6, r7, lr} - if (timeout < 0) { - 37be: 1e0d subs r5, r1, #0 -bool XBee::readPacket(int timeout) { - 37c0: b083 sub sp, #12 - if (timeout < 0) { - 37c2: db12 blt.n 37ea - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 37c4: 4e0a ldr r6, [pc, #40] ; (37f0 ) - 37c6: 6833 ldr r3, [r6, #0] - 37c8: 9300 str r3, [sp, #0] - return ret; - 37ca: 9f00 ldr r7, [sp, #0] - 37cc: 4604 mov r4, r0 - while (int((millis() - start)) < timeout) { - 37ce: e005 b.n 37dc - readPacket(); - 37d0: f7ff ff6a bl 36a8 - return _complete; - 37d4: 7a60 ldrb r0, [r4, #9] - if (getResponse().isAvailable()) { - 37d6: b948 cbnz r0, 37ec - } else if (getResponse().isError()) { - 37d8: 7aa3 ldrb r3, [r4, #10] - 37da: b933 cbnz r3, 37ea - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 37dc: 6833 ldr r3, [r6, #0] - 37de: 9301 str r3, [sp, #4] - return ret; - 37e0: 9b01 ldr r3, [sp, #4] - while (int((millis() - start)) < timeout) { - 37e2: 1bdb subs r3, r3, r7 - 37e4: 42ab cmp r3, r5 - readPacket(); - 37e6: 4620 mov r0, r4 - while (int((millis() - start)) < timeout) { - 37e8: dbf2 blt.n 37d0 - return false; - 37ea: 2000 movs r0, #0 -} - 37ec: b003 add sp, #12 - 37ee: bdf0 pop {r4, r5, r6, r7, pc} - 37f0: 1fff978c .word 0x1fff978c - -000037f4 : - _lsb = lsb; - 37f4: e9c0 1200 strd r1, r2, [r0] -} - 37f8: 4770 bx lr - 37fa: bf00 nop - -000037fc : -} - 37fc: 6840 ldr r0, [r0, #4] - 37fe: 4770 bx lr - -00003800 : -ZBTxRequest::ZBTxRequest(XBeeAddress64 &addr64, uint8_t *data, uint8_t dataLength): PayloadRequest(ZB_TX_REQUEST, DEFAULT_FRAME_ID, data, dataLength) { - 3800: 4684 mov ip, r0 - _apiId = apiId; - 3802: f44f 7088 mov.w r0, #272 ; 0x110 -ZBTxRequest::ZBTxRequest(XBeeAddress64 &addr64, uint8_t *data, uint8_t dataLength): PayloadRequest(ZB_TX_REQUEST, DEFAULT_FRAME_ID, data, dataLength) { - 3806: b410 push {r4} - _payloadLength = payloadLength; - 3808: f88c 300c strb.w r3, [ip, #12] - _apiId = apiId; - 380c: f8ac 0004 strh.w r0, [ip, #4] -ZBTxRequest::ZBTxRequest(XBeeAddress64 &addr64, uint8_t *data, uint8_t dataLength): PayloadRequest(ZB_TX_REQUEST, DEFAULT_FRAME_ID, data, dataLength) { - 3810: 4663 mov r3, ip - _addr64 = addr64; - 3812: c903 ldmia r1, {r0, r1} -ZBTxRequest::ZBTxRequest(XBeeAddress64 &addr64, uint8_t *data, uint8_t dataLength): PayloadRequest(ZB_TX_REQUEST, DEFAULT_FRAME_ID, data, dataLength) { - 3814: 4c06 ldr r4, [pc, #24] ; (3830 ) - _payloadPtr = payload; - 3816: f8cc 2008 str.w r2, [ip, #8] -ZBTxRequest::ZBTxRequest(XBeeAddress64 &addr64, uint8_t *data, uint8_t dataLength): PayloadRequest(ZB_TX_REQUEST, DEFAULT_FRAME_ID, data, dataLength) { - 381a: f843 4b10 str.w r4, [r3], #16 - _addr16 = ZB_BROADCAST_ADDRESS; - 381e: f64f 72fe movw r2, #65534 ; 0xfffe - _addr64 = addr64; - 3822: e883 0003 stmia.w r3, {r0, r1} - _addr16 = ZB_BROADCAST_ADDRESS; - 3826: f8cc 2018 str.w r2, [ip, #24] -} - 382a: 4660 mov r0, ip - 382c: bc10 pop {r4} - 382e: 4770 bx lr - 3830: 00017d44 .word 0x00017d44 - -00003834 : - - // send packet (Note: prior to Arduino 1.0 this flushed the incoming buffer, which of course was not so great) - flush(); -} - -void XBee::sendByte(uint8_t b, bool escape) { - 3834: b570 push {r4, r5, r6, lr} - 3836: 4605 mov r5, r0 - 3838: 460c mov r4, r1 - - if (escape && (b == START_BYTE || b == ESCAPE || b == XON || b == XOFF)) { - 383a: b13a cbz r2, 384c - 383c: f1a1 037d sub.w r3, r1, #125 ; 0x7d - 3840: 2b01 cmp r3, #1 - 3842: d90b bls.n 385c - 3844: f001 03fd and.w r3, r1, #253 ; 0xfd - 3848: 2b11 cmp r3, #17 - 384a: d007 beq.n 385c - _serial->write(val); - 384c: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 - 3850: 6803 ldr r3, [r0, #0] - 3852: 4621 mov r1, r4 - 3854: 681b ldr r3, [r3, #0] - write(ESCAPE); - write(b ^ 0x20); - } else { - write(b); - } -} - 3856: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - _serial->write(val); - 385a: 4718 bx r3 - 385c: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 - 3860: 6803 ldr r3, [r0, #0] - 3862: 217d movs r1, #125 ; 0x7d - 3864: 681b ldr r3, [r3, #0] - 3866: 4798 blx r3 - 3868: f8d5 0080 ldr.w r0, [r5, #128] ; 0x80 - 386c: 6803 ldr r3, [r0, #0] - 386e: f084 0120 eor.w r1, r4, #32 - 3872: 681b ldr r3, [r3, #0] -} - 3874: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - _serial->write(val); - 3878: 4718 bx r3 - 387a: bf00 nop - -0000387c : -void XBee::send(XBeeRequest &request) { - 387c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 3880: 4680 mov r8, r0 - _serial->write(val); - 3882: f8d0 0080 ldr.w r0, [r0, #128] ; 0x80 - 3886: 6803 ldr r3, [r0, #0] -void XBee::send(XBeeRequest &request) { - 3888: 460c mov r4, r1 - _serial->write(val); - 388a: 681b ldr r3, [r3, #0] - 388c: 217e movs r1, #126 ; 0x7e - 388e: 4798 blx r3 - uint8_t msbLen = ((request.getFrameDataLength() + 2) >> 8) & 0xff; - 3890: 6823 ldr r3, [r4, #0] - 3892: 4620 mov r0, r4 - 3894: 685b ldr r3, [r3, #4] - 3896: 4798 blx r3 - uint8_t lsbLen = (request.getFrameDataLength() + 2) & 0xff; - 3898: 6823 ldr r3, [r4, #0] - uint8_t msbLen = ((request.getFrameDataLength() + 2) >> 8) & 0xff; - 389a: 4605 mov r5, r0 - uint8_t lsbLen = (request.getFrameDataLength() + 2) & 0xff; - 389c: 685b ldr r3, [r3, #4] - 389e: 4620 mov r0, r4 - 38a0: 4798 blx r3 - uint8_t msbLen = ((request.getFrameDataLength() + 2) >> 8) & 0xff; - 38a2: 1ca9 adds r1, r5, #2 - sendByte(msbLen, true); - 38a4: 2201 movs r2, #1 - uint8_t lsbLen = (request.getFrameDataLength() + 2) & 0xff; - 38a6: 4605 mov r5, r0 - sendByte(msbLen, true); - 38a8: f3c1 2107 ubfx r1, r1, #8, #8 - 38ac: 4640 mov r0, r8 - 38ae: f7ff ffc1 bl 3834 - uint8_t lsbLen = (request.getFrameDataLength() + 2) & 0xff; - 38b2: 1ca9 adds r1, r5, #2 - sendByte(lsbLen, true); - 38b4: 2201 movs r2, #1 - 38b6: b2c9 uxtb r1, r1 - 38b8: 4640 mov r0, r8 - 38ba: f7ff ffbb bl 3834 - sendByte(request.getApiId(), true); - 38be: 7921 ldrb r1, [r4, #4] - 38c0: 2201 movs r2, #1 - 38c2: 4640 mov r0, r8 - 38c4: f7ff ffb6 bl 3834 - sendByte(request.getFrameId(), true); - 38c8: 7961 ldrb r1, [r4, #5] - 38ca: 2201 movs r2, #1 - 38cc: 4640 mov r0, r8 - 38ce: f7ff ffb1 bl 3834 - checksum+= request.getFrameId(); - 38d2: 7927 ldrb r7, [r4, #4] - 38d4: 7963 ldrb r3, [r4, #5] - 38d6: 441f add r7, r3 - for (int i = 0; i < request.getFrameDataLength(); i++) { - 38d8: 2500 movs r5, #0 - checksum+= request.getFrameId(); - 38da: b2ff uxtb r7, r7 - for (int i = 0; i < request.getFrameDataLength(); i++) { - 38dc: e00f b.n 38fe - sendByte(request.getFrameData(i), true); - 38de: 6823 ldr r3, [r4, #0] - 38e0: 681b ldr r3, [r3, #0] - 38e2: 4798 blx r3 - 38e4: 2201 movs r2, #1 - 38e6: 4601 mov r1, r0 - 38e8: 4640 mov r0, r8 - 38ea: f7ff ffa3 bl 3834 - checksum+= request.getFrameData(i); - 38ee: 6823 ldr r3, [r4, #0] - 38f0: 4631 mov r1, r6 - 38f2: 681b ldr r3, [r3, #0] - 38f4: 4620 mov r0, r4 - 38f6: 4798 blx r3 - 38f8: 4438 add r0, r7 - for (int i = 0; i < request.getFrameDataLength(); i++) { - 38fa: 3501 adds r5, #1 - checksum+= request.getFrameData(i); - 38fc: b2c7 uxtb r7, r0 - for (int i = 0; i < request.getFrameDataLength(); i++) { - 38fe: 6823 ldr r3, [r4, #0] - 3900: 4620 mov r0, r4 - 3902: 685b ldr r3, [r3, #4] - 3904: 4798 blx r3 - 3906: 4603 mov r3, r0 - 3908: b2ee uxtb r6, r5 - 390a: 42ab cmp r3, r5 - sendByte(request.getFrameData(i), true); - 390c: 4631 mov r1, r6 - 390e: 4620 mov r0, r4 - for (int i = 0; i < request.getFrameDataLength(); i++) { - 3910: dce5 bgt.n 38de - checksum = 0xff - checksum; - 3912: 43f9 mvns r1, r7 - sendByte(checksum, true); - 3914: 4640 mov r0, r8 - 3916: 2201 movs r2, #1 - 3918: b2c9 uxtb r1, r1 - 391a: f7ff ff8b bl 3834 - _serial->flush(); - 391e: f8d8 0080 ldr.w r0, [r8, #128] ; 0x80 - 3922: 6803 ldr r3, [r0, #0] -} - 3924: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - _serial->flush(); - 3928: 68db ldr r3, [r3, #12] - 392a: 4718 bx r3 - -0000392c <_GLOBAL__sub_I__ZN12XBeeResponseC2Ev>: - _msb = msb; - 392c: 4b03 ldr r3, [pc, #12] ; (393c <_GLOBAL__sub_I__ZN12XBeeResponseC2Ev+0x10>) - _lsb = lsb; - 392e: 2100 movs r1, #0 - 3930: f64f 72ff movw r2, #65535 ; 0xffff - 3934: e9c3 1200 strd r1, r2, [r3] -} - 3938: 4770 bx lr - 393a: bf00 nop - 393c: 1fff9298 .word 0x1fff9298 - -00003940 : -} - -// Tweak Send/Receive SBDIX process timeout -void IridiumSBD::adjustSendReceiveTimeout(int seconds) -{ - this->sendReceiveTimeout = seconds; - 3940: 60c1 str r1, [r0, #12] -} - 3942: 4770 bx lr - -00003944 : - -void IridiumSBD::useMSSTMWorkaround(bool useWorkAround) // true to use workaround from Iridium Alert 5/7 -{ - this->msstmWorkaroundRequested = useWorkAround; - 3944: f880 1020 strb.w r1, [r0, #32] -} - 3948: 4770 bx lr - 394a: bf00 nop - -0000394c : - - return ISBD_SUCCESS; -} - -bool IridiumSBD::noBlockWait(int seconds) -{ - 394c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3950: 4d14 ldr r5, [pc, #80] ; (39a4 ) -bool IridiumSBD::cancelled() -{ - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - ringAsserted = true; - - if (ISBDCallback != NULL) - 3952: 4f15 ldr r7, [pc, #84] ; (39a8 ) - 3954: 682b ldr r3, [r5, #0] -{ - 3956: b083 sub sp, #12 - 3958: 4681 mov r9, r0 - 395a: 9300 str r3, [sp, #0] - return ret; - 395c: 9e00 ldr r6, [sp, #0] - for (unsigned long start=millis(); millis() - start < 1000UL * seconds;) - 395e: f44f 737a mov.w r3, #1000 ; 0x3e8 - 3962: fb03 f401 mul.w r4, r3, r1 - ringAsserted = true; - 3966: f04f 0801 mov.w r8, #1 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 396a: 682b ldr r3, [r5, #0] - 396c: 9301 str r3, [sp, #4] - return ret; - 396e: 9b01 ldr r3, [sp, #4] - for (unsigned long start=millis(); millis() - start < 1000UL * seconds;) - 3970: 1b9b subs r3, r3, r6 - 3972: 42a3 cmp r3, r4 - 3974: d212 bcs.n 399c - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3976: f8d9 301c ldr.w r3, [r9, #28] - 397a: b2d8 uxtb r0, r3 - 397c: 3301 adds r3, #1 - 397e: d004 beq.n 398a - 3980: f008 fe24 bl c5cc - 3984: b908 cbnz r0, 398a - ringAsserted = true; - 3986: f889 8022 strb.w r8, [r9, #34] ; 0x22 - if (ISBDCallback != NULL) - 398a: 2f00 cmp r7, #0 - 398c: d0ed beq.n 396a - return !ISBDCallback(); - 398e: f7fe f967 bl 1c60 - if (cancelled()) - 3992: 2800 cmp r0, #0 - 3994: d1e9 bne.n 396a -} - 3996: b003 add sp, #12 - 3998: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - return true; - 399c: 2001 movs r0, #1 -} - 399e: b003 add sp, #12 - 39a0: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 39a4: 1fff978c .word 0x1fff978c - 39a8: 00001c61 .word 0x00001c61 - -000039ac : - - return rxOverflow ? ISBD_RX_OVERFLOW : ISBD_SUCCESS; -} - -void IridiumSBD::power(bool on) -{ - 39ac: b530 push {r4, r5, lr} - 39ae: 4604 mov r4, r0 - this->asleep = !on; - - if (this->sleepPin == -1) - 39b0: 6980 ldr r0, [r0, #24] - this->asleep = !on; - 39b2: f081 0301 eor.w r3, r1, #1 - 39b6: 7523 strb r3, [r4, #20] - if (this->sleepPin == -1) - 39b8: 1c43 adds r3, r0, #1 -{ - 39ba: b083 sub sp, #12 - if (this->sleepPin == -1) - 39bc: d02f beq.n 3a1e - return; - - pinMode(this->sleepPin, OUTPUT); - 39be: 460d mov r5, r1 - 39c0: b2c0 uxtb r0, r0 - 39c2: 2101 movs r1, #1 - 39c4: f008 fe10 bl c5e8 - - if (on) - 39c8: b9bd cbnz r5, 39fa - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 39ca: 4b19 ldr r3, [pc, #100] ; (3a30 ) - - else - { - // Best Practices Guide suggests waiting at least 2 seconds - // before powering off again - unsigned long elapsed = millis() - lastPowerOnTime; - 39cc: 6a60 ldr r0, [r4, #36] ; 0x24 - 39ce: 681b ldr r3, [r3, #0] - 39d0: 9301 str r3, [sp, #4] - return ret; - 39d2: 9b01 ldr r3, [sp, #4] - 39d4: 1a1a subs r2, r3, r0 - if (elapsed < 2000UL) - 39d6: f5b2 6ffa cmp.w r2, #2000 ; 0x7d0 - 39da: d322 bcc.n 3a22 -void IridiumSBD::diagprint(FlashString str) -{ - PGM_P p = reinterpret_cast(str); - while (1) - { - char c = pgm_read_byte(p++); - 39dc: 4d15 ldr r5, [pc, #84] ; (3a34 ) - 39de: 2150 movs r1, #80 ; 0x50 - if (c == 0) break; - ISBDDiagsCallback(this, c); - 39e0: 4620 mov r0, r4 - 39e2: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 39e6: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 39ea: 2900 cmp r1, #0 - 39ec: d1f8 bne.n 39e0 - digitalWrite(this->sleepPin, LOW); // LOW = asleep - 39ee: 7e20 ldrb r0, [r4, #24] -} - 39f0: b003 add sp, #12 - 39f2: e8bd 4030 ldmia.w sp!, {r4, r5, lr} - digitalWrite(this->sleepPin, LOW); // LOW = asleep - 39f6: f008 bdc3 b.w c580 - char c = pgm_read_byte(p++); - 39fa: 4d0f ldr r5, [pc, #60] ; (3a38 ) - 39fc: 2150 movs r1, #80 ; 0x50 - ISBDDiagsCallback(this, c); - 39fe: 4620 mov r0, r4 - 3a00: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3a04: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 3a08: 2900 cmp r1, #0 - 3a0a: d1f8 bne.n 39fe - digitalWrite(this->sleepPin, HIGH); // HIGH = awake - 3a0c: 7e20 ldrb r0, [r4, #24] - 3a0e: 2101 movs r1, #1 - 3a10: f008 fdb6 bl c580 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3a14: 4b06 ldr r3, [pc, #24] ; (3a30 ) - 3a16: 681b ldr r3, [r3, #0] - 3a18: 9300 str r3, [sp, #0] - return ret; - 3a1a: 9b00 ldr r3, [sp, #0] - lastPowerOnTime = millis(); - 3a1c: 6263 str r3, [r4, #36] ; 0x24 -} - 3a1e: b003 add sp, #12 - 3a20: bd30 pop {r4, r5, pc} - delay(2000UL - elapsed); - 3a22: f5c3 63fa rsb r3, r3, #2000 ; 0x7d0 - 3a26: 4418 add r0, r3 - 3a28: f008 fe1a bl c660 - 3a2c: e7d6 b.n 39dc - 3a2e: bf00 nop - 3a30: 1fff978c .word 0x1fff978c - 3a34: 00017d75 .word 0x00017d75 - 3a38: 00017d5d .word 0x00017d5d - -00003a3c : -{ - 3a3c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 3a40: 4605 mov r5, r0 - 3a42: 460e mov r6, r1 - 3a44: 461f mov r7, r3 - if (beginLine) - 3a46: b9ba cbnz r2, 3a78 -void IridiumSBD::consoleprint(FlashString str) -{ - PGM_P p = reinterpret_cast(str); - while (1) - { - char c = pgm_read_byte(p++); - 3a48: 4634 mov r4, r6 - 3a4a: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3a4e: b131 cbz r1, 3a5e - ISBDConsoleCallback(this, c); - 3a50: 4628 mov r0, r5 - 3a52: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3a56: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3a5a: 2900 cmp r1, #0 - 3a5c: d1f8 bne.n 3a50 - if (endLine) - 3a5e: b9af cbnz r7, 3a8c - stream.print(str); - 3a60: 682c ldr r4, [r5, #0] - return write((const uint8_t *)str, strlen(str)); } - 3a62: 4630 mov r0, r6 - 3a64: f00e fa0c bl 11e80 - 3a68: 6823 ldr r3, [r4, #0] - 3a6a: 4602 mov r2, r0 - 3a6c: 4631 mov r1, r6 - 3a6e: 4620 mov r0, r4 - 3a70: 685b ldr r3, [r3, #4] -} - 3a72: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 3a76: 4718 bx r3 - char c = pgm_read_byte(p++); - 3a78: 4c09 ldr r4, [pc, #36] ; (3aa0 ) - 3a7a: 213e movs r1, #62 ; 0x3e - ISBDConsoleCallback(this, c); - 3a7c: 4628 mov r0, r5 - 3a7e: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3a82: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3a86: 2900 cmp r1, #0 - 3a88: d1f8 bne.n 3a7c - 3a8a: e7dd b.n 3a48 - char c = pgm_read_byte(p++); - 3a8c: 4c05 ldr r4, [pc, #20] ; (3aa4 ) - 3a8e: 210d movs r1, #13 - ISBDConsoleCallback(this, c); - 3a90: 4628 mov r0, r5 - 3a92: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3a96: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3a9a: 2900 cmp r1, #0 - 3a9c: d1f8 bne.n 3a90 - 3a9e: e7df b.n 3a60 - 3aa0: 00017d8d .word 0x00017d8d - 3aa4: 00017ed1 .word 0x00017ed1 - -00003aa8 : -{ - 3aa8: b570 push {r4, r5, r6, lr} - char c = pgm_read_byte(p++); - 3aaa: 4d15 ldr r5, [pc, #84] ; (3b00 ) -{ - 3aac: 460e mov r6, r1 - 3aae: 4604 mov r4, r0 - char c = pgm_read_byte(p++); - 3ab0: 213e movs r1, #62 ; 0x3e - ISBDConsoleCallback(this, c); - 3ab2: 4620 mov r0, r4 - 3ab4: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3ab8: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 3abc: 2900 cmp r1, #0 - 3abe: d1f8 bne.n 3ab2 - } -} - -void IridiumSBD::consoleprint(const char *str) -{ - while (*str) - 3ac0: 7831 ldrb r1, [r6, #0] - 3ac2: 4635 mov r5, r6 - 3ac4: b131 cbz r1, 3ad4 - ISBDConsoleCallback(this, *str++); - 3ac6: 4620 mov r0, r4 - 3ac8: f3af 8000 nop.w - while (*str) - 3acc: f815 1f01 ldrb.w r1, [r5, #1]! - 3ad0: 2900 cmp r1, #0 - 3ad2: d1f8 bne.n 3ac6 - char c = pgm_read_byte(p++); - 3ad4: 4d0b ldr r5, [pc, #44] ; (3b04 ) - 3ad6: 210d movs r1, #13 - ISBDConsoleCallback(this, c); - 3ad8: 4620 mov r0, r4 - 3ada: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3ade: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 3ae2: 2900 cmp r1, #0 - 3ae4: d1f8 bne.n 3ad8 - stream.print(str); - 3ae6: 6824 ldr r4, [r4, #0] - 3ae8: 4630 mov r0, r6 - 3aea: f00e f9c9 bl 11e80 - 3aee: 6823 ldr r3, [r4, #0] - 3af0: 4602 mov r2, r0 - 3af2: 4631 mov r1, r6 - 3af4: 4620 mov r0, r4 - 3af6: 685b ldr r3, [r3, #4] -} - 3af8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - 3afc: 4718 bx r3 - 3afe: bf00 nop - 3b00: 00017d8d .word 0x00017d8d - 3b04: 00017ed1 .word 0x00017ed1 - -00003b08 : -// Read characters until we find one that doesn't match SBDRING -// If nextChar is -1 it means we are still entertaining a possible -// match with SBDRING\r\n. Once we find a mismatch, stuff it into -// nextChar. -void IridiumSBD::filterSBDRING() -{ - 3b08: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3b0c: 4e28 ldr r6, [pc, #160] ; (3bb0 ) - { - ++head; - if (*head == 0) - { - SBDRINGSeen(); - head = tail = SBDRING; - 3b0e: 4f29 ldr r7, [pc, #164] ; (3bb4 ) -{ - 3b10: b083 sub sp, #12 - 3b12: 4604 mov r4, r0 - ringAsserted = true; - 3b14: f04f 0801 mov.w r8, #1 - while (stream.available() > 0 && nextChar == -1) - 3b18: 6820 ldr r0, [r4, #0] - 3b1a: 6803 ldr r3, [r0, #0] - 3b1c: 691b ldr r3, [r3, #16] - 3b1e: 4798 blx r3 - 3b20: 2800 cmp r0, #0 - 3b22: dd24 ble.n 3b6e - 3b24: 6b23 ldr r3, [r4, #48] ; 0x30 - 3b26: 3301 adds r3, #1 - 3b28: d121 bne.n 3b6e - char c = stream.read(); - 3b2a: 6820 ldr r0, [r4, #0] - 3b2c: 6803 ldr r3, [r0, #0] - 3b2e: 695b ldr r3, [r3, #20] - 3b30: 4798 blx r3 - 3b32: b2c5 uxtb r5, r0 - ISBDConsoleCallback(this, c); - 3b34: 4629 mov r1, r5 - 3b36: 4620 mov r0, r4 - 3b38: f3af 8000 nop.w - if (*head != 0 && c == *head) - 3b3c: 6aa2 ldr r2, [r4, #40] ; 0x28 - 3b3e: 7813 ldrb r3, [r2, #0] - 3b40: b10b cbz r3, 3b46 - 3b42: 42ab cmp r3, r5 - 3b44: d001 beq.n 3b4a - } - } - } - else - { - nextChar = c; - 3b46: 6325 str r5, [r4, #48] ; 0x30 - 3b48: e7e6 b.n 3b18 - ++head; - 3b4a: 1c53 adds r3, r2, #1 - 3b4c: 62a3 str r3, [r4, #40] ; 0x28 - if (*head == 0) - 3b4e: 7853 ldrb r3, [r2, #1] - 3b50: b983 cbnz r3, 3b74 - char c = pgm_read_byte(p++); - 3b52: 4d19 ldr r5, [pc, #100] ; (3bb8 ) - ringAsserted = true; - 3b54: f884 8022 strb.w r8, [r4, #34] ; 0x22 - char c = pgm_read_byte(p++); - 3b58: 2153 movs r1, #83 ; 0x53 - ISBDDiagsCallback(this, c); - 3b5a: 4620 mov r0, r4 - 3b5c: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3b60: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 3b64: 2900 cmp r1, #0 - 3b66: d1f8 bne.n 3b5a - head = tail = SBDRING; - 3b68: 62e7 str r7, [r4, #44] ; 0x2c - 3b6a: 62a7 str r7, [r4, #40] ; 0x28 - 3b6c: e7d4 b.n 3b18 - } - } -} - 3b6e: b003 add sp, #12 - 3b70: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 3b74: 6833 ldr r3, [r6, #0] - 3b76: 9300 str r3, [sp, #0] - return ret; - 3b78: f8dd 9000 ldr.w r9, [sp] - for (unsigned long start = millis(); stream.available() == 0 && millis() - start < FILTERTIMEOUT; ); - 3b7c: e006 b.n 3b8c - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3b7e: 6833 ldr r3, [r6, #0] - 3b80: 9301 str r3, [sp, #4] - return ret; - 3b82: 9b01 ldr r3, [sp, #4] - 3b84: eba3 0309 sub.w r3, r3, r9 - 3b88: 2b09 cmp r3, #9 - 3b8a: d805 bhi.n 3b98 - 3b8c: 6820 ldr r0, [r4, #0] - 3b8e: 6803 ldr r3, [r0, #0] - 3b90: 691b ldr r3, [r3, #16] - 3b92: 4798 blx r3 - 3b94: 2800 cmp r0, #0 - 3b96: d0f2 beq.n 3b7e - if (stream.available() == 0) // pop the character back into nextChar - 3b98: 6820 ldr r0, [r4, #0] - 3b9a: 6803 ldr r3, [r0, #0] - 3b9c: 691b ldr r3, [r3, #16] - 3b9e: 4798 blx r3 - 3ba0: 2800 cmp r0, #0 - 3ba2: d1b9 bne.n 3b18 - --head; - 3ba4: 6aa3 ldr r3, [r4, #40] ; 0x28 - nextChar = c; - 3ba6: 6325 str r5, [r4, #48] ; 0x30 - --head; - 3ba8: 3b01 subs r3, #1 - 3baa: 62a3 str r3, [r4, #40] ; 0x28 - nextChar = c; - 3bac: e7b4 b.n 3b18 - 3bae: bf00 nop - 3bb0: 1fff978c .word 0x1fff978c - 3bb4: 0001806c .word 0x0001806c - 3bb8: 00017d95 .word 0x00017d95 - -00003bbc : -{ - 3bbc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 3bc0: b085 sub sp, #20 - char c = pgm_read_byte(p++); - 3bc2: 4c6c ldr r4, [pc, #432] ; (3d74 ) -{ - 3bc4: 9e0e ldr r6, [sp, #56] ; 0x38 - 3bc6: 9200 str r2, [sp, #0] - 3bc8: 4689 mov r9, r1 - 3bca: 4683 mov fp, r0 - 3bcc: 461f mov r7, r3 - char c = pgm_read_byte(p++); - 3bce: 2157 movs r1, #87 ; 0x57 - ISBDDiagsCallback(this, c); - 3bd0: 4658 mov r0, fp - 3bd2: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3bd6: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3bda: 2900 cmp r1, #0 - 3bdc: d1f8 bne.n 3bd0 - while (*str) - 3bde: 7831 ldrb r1, [r6, #0] - 3be0: 4634 mov r4, r6 - 3be2: b131 cbz r1, 3bf2 - ISBDDiagsCallback(this, *str++); - 3be4: 4658 mov r0, fp - 3be6: f3af 8000 nop.w - while (*str) - 3bea: f814 1f01 ldrb.w r1, [r4, #1]! - 3bee: 2900 cmp r1, #0 - 3bf0: d1f8 bne.n 3be4 - char c = pgm_read_byte(p++); - 3bf2: 4c61 ldr r4, [pc, #388] ; (3d78 ) - 3bf4: 210d movs r1, #13 - ISBDDiagsCallback(this, c); - 3bf6: 4658 mov r0, fp - 3bf8: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3bfc: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3c00: 2900 cmp r1, #0 - 3c02: d1f8 bne.n 3bf6 - if (response) - 3c04: f1b9 0f00 cmp.w r9, #0 - 3c08: d003 beq.n 3c12 - memset(response, 0, responseSize); - 3c0a: 9a00 ldr r2, [sp, #0] - 3c0c: 4648 mov r0, r9 - 3c0e: f00d fab1 bl 11174 - int promptState = prompt ? LOOKING_FOR_PROMPT : LOOKING_FOR_TERMINATOR; - 3c12: fab7 f587 clz r5, r7 - 3c16: 096d lsrs r5, r5, #5 - char c = pgm_read_byte(p++); - 3c18: 4c58 ldr r4, [pc, #352] ; (3d7c ) - int promptState = prompt ? LOOKING_FOR_PROMPT : LOOKING_FOR_TERMINATOR; - 3c1a: 006d lsls r5, r5, #1 - char c = pgm_read_byte(p++); - 3c1c: 213c movs r1, #60 ; 0x3c - ISBDConsoleCallback(this, c); - 3c1e: 4658 mov r0, fp - 3c20: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 3c24: f814 1b01 ldrb.w r1, [r4], #1 - if (c == 0) break; - 3c28: 2900 cmp r1, #0 - 3c2a: d1f8 bne.n 3c1e - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3c2c: 4c54 ldr r4, [pc, #336] ; (3d80 ) - for (unsigned long start=millis(); millis() - start < 1000UL * atTimeout;) - 3c2e: f8db 0008 ldr.w r0, [fp, #8] - 3c32: 6822 ldr r2, [r4, #0] - 3c34: 9202 str r2, [sp, #8] - return ret; - 3c36: 9b02 ldr r3, [sp, #8] - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3c38: 6822 ldr r2, [r4, #0] - 3c3a: 9203 str r2, [sp, #12] - return ret; - 3c3c: 9a03 ldr r2, [sp, #12] - 3c3e: 9301 str r3, [sp, #4] - 3c40: f44f 747a mov.w r4, #1000 ; 0x3e8 - 3c44: 1ad2 subs r2, r2, r3 - 3c46: fb04 f000 mul.w r0, r4, r0 - 3c4a: 4290 cmp r0, r2 - 3c4c: f240 808d bls.w 3d6a - int matchTerminatorPos = 0; // Matches chars in terminator - 3c50: 460c mov r4, r1 - int matchPromptPos = 0; // Matches chars in prompt - 3c52: 4688 mov r8, r1 - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3c54: f8db 001c ldr.w r0, [fp, #28] - 3c58: 1c41 adds r1, r0, #1 - 3c5a: d007 beq.n 3c6c - 3c5c: b2c0 uxtb r0, r0 - 3c5e: f008 fcb5 bl c5cc - 3c62: b918 cbnz r0, 3c6c - ringAsserted = true; - 3c64: f04f 0301 mov.w r3, #1 - 3c68: f88b 3022 strb.w r3, [fp, #34] ; 0x22 - if (ISBDCallback != NULL) - 3c6c: 4b45 ldr r3, [pc, #276] ; (3d84 ) - 3c6e: b11b cbz r3, 3c78 - return !ISBDCallback(); - 3c70: f7fd fff6 bl 1c60 - if (cancelled()) - 3c74: 2800 cmp r0, #0 - 3c76: d078 beq.n 3d6a - - // Then the "extra" char - else if (nextChar != -1) - { - char c = (char)nextChar; - nextChar = -1; - 3c78: f04f 3aff mov.w sl, #4294967295 ; 0xffffffff - filterSBDRING(); - 3c7c: 4658 mov r0, fp - 3c7e: f7ff ff43 bl 3b08 - return head - tail + (nextChar != -1 ? 1 : 0); - 3c82: f8db 202c ldr.w r2, [fp, #44] ; 0x2c - 3c86: f8db 3028 ldr.w r3, [fp, #40] ; 0x28 - 3c8a: 1a9b subs r3, r3, r2 - 3c8c: f8db 2030 ldr.w r2, [fp, #48] ; 0x30 - 3c90: f1b2 3fff cmp.w r2, #4294967295 ; 0xffffffff - 3c94: bf18 it ne - 3c96: 3301 addne r3, #1 - while (filteredavailable() > 0) - 3c98: 2b00 cmp r3, #0 - 3c9a: dd57 ble.n 3d4c - filterSBDRING(); - 3c9c: 4658 mov r0, fp - 3c9e: f7ff ff33 bl 3b08 - if (head > tail) - 3ca2: f8db 2028 ldr.w r2, [fp, #40] ; 0x28 - 3ca6: f8db 302c ldr.w r3, [fp, #44] ; 0x2c - 3caa: 429a cmp r2, r3 - 3cac: d82d bhi.n 3d0a - else if (nextChar != -1) - 3cae: f8db 3030 ldr.w r3, [fp, #48] ; 0x30 - 3cb2: 1c5a adds r2, r3, #1 - nextChar = -1; - 3cb4: bf1a itte ne - 3cb6: f8cb a030 strne.w sl, [fp, #48] ; 0x30 - char c = filteredread(); - 3cba: b2db uxtbne r3, r3 - 3cbc: 23ff moveq r3, #255 ; 0xff - if (prompt) - 3cbe: b177 cbz r7, 3cde - switch (promptState) - 3cc0: b37d cbz r5, 3d22 - 3cc2: 2d01 cmp r5, #1 - 3cc4: d114 bne.n 3cf0 - if (response) - 3cc6: f1b9 0f00 cmp.w r9, #0 - 3cca: d008 beq.n 3cde - if (c == '\r' || responseSize < 2) - 3ccc: 2b0d cmp r3, #13 - 3cce: d00f beq.n 3cf0 - 3cd0: 9a00 ldr r2, [sp, #0] - 3cd2: 2a01 cmp r2, #1 - 3cd4: dd0c ble.n 3cf0 - responseSize--; - 3cd6: 3a01 subs r2, #1 - *response++ = c; - 3cd8: f809 3b01 strb.w r3, [r9], #1 - responseSize--; - 3cdc: 9200 str r2, [sp, #0] - if (c == terminator[matchTerminatorPos]) - 3cde: 5d32 ldrb r2, [r6, r4] - 3ce0: 429a cmp r2, r3 - 3ce2: d00a beq.n 3cfa - matchTerminatorPos = c == terminator[0] ? 1 : 0; - 3ce4: 7834 ldrb r4, [r6, #0] - 3ce6: 1ae4 subs r4, r4, r3 - 3ce8: fab4 f484 clz r4, r4 - 3cec: 0964 lsrs r4, r4, #5 - 3cee: e7c5 b.n 3c7c - if (c == terminator[matchTerminatorPos]) - 3cf0: 5d32 ldrb r2, [r6, r4] - 3cf2: 429a cmp r2, r3 - promptState = LOOKING_FOR_TERMINATOR; - 3cf4: f04f 0502 mov.w r5, #2 - if (c == terminator[matchTerminatorPos]) - 3cf8: d1f4 bne.n 3ce4 - ++matchTerminatorPos; - 3cfa: 3401 adds r4, #1 - if (terminator[matchTerminatorPos] == '\0') - 3cfc: 5d33 ldrb r3, [r6, r4] - 3cfe: 2b00 cmp r3, #0 - 3d00: d1bc bne.n 3c7c - return true; - 3d02: 2001 movs r0, #1 -} - 3d04: b005 add sp, #20 - 3d06: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - char c = *tail++; - 3d0a: 1c59 adds r1, r3, #1 - 3d0c: f8cb 102c str.w r1, [fp, #44] ; 0x2c - if (head == tail) - 3d10: 428a cmp r2, r1 - char c = *tail++; - 3d12: 781b ldrb r3, [r3, #0] - if (head == tail) - 3d14: d1d3 bne.n 3cbe - head = tail = SBDRING; - 3d16: 4a1c ldr r2, [pc, #112] ; (3d88 ) - 3d18: f8cb 202c str.w r2, [fp, #44] ; 0x2c - 3d1c: f8cb 2028 str.w r2, [fp, #40] ; 0x28 - return c; - 3d20: e7cd b.n 3cbe - if (c == prompt[matchPromptPos]) - 3d22: f817 2008 ldrb.w r2, [r7, r8] - 3d26: 429a cmp r2, r3 - 3d28: d008 beq.n 3d3c - matchPromptPos = c == prompt[0] ? 1 : 0; - 3d2a: f897 8000 ldrb.w r8, [r7] - 3d2e: eba8 0803 sub.w r8, r8, r3 - 3d32: fab8 f888 clz r8, r8 - 3d36: ea4f 1858 mov.w r8, r8, lsr #5 - 3d3a: e7d0 b.n 3cde - ++matchPromptPos; - 3d3c: f108 0801 add.w r8, r8, #1 - if (prompt[matchPromptPos] == '\0') - 3d40: f817 5008 ldrb.w r5, [r7, r8] - 3d44: fab5 f585 clz r5, r5 - 3d48: 096d lsrs r5, r5, #5 - 3d4a: e7c8 b.n 3cde - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3d4c: 4b0c ldr r3, [pc, #48] ; (3d80 ) - 3d4e: 681a ldr r2, [r3, #0] - 3d50: 9203 str r2, [sp, #12] - return ret; - 3d52: 9903 ldr r1, [sp, #12] - for (unsigned long start=millis(); millis() - start < 1000UL * atTimeout;) - 3d54: 9b01 ldr r3, [sp, #4] - 3d56: f8db 2008 ldr.w r2, [fp, #8] - 3d5a: f44f 707a mov.w r0, #1000 ; 0x3e8 - 3d5e: 1ac9 subs r1, r1, r3 - 3d60: fb00 f202 mul.w r2, r0, r2 - 3d64: 4291 cmp r1, r2 - 3d66: f4ff af75 bcc.w 3c54 - return false; - 3d6a: 2000 movs r0, #0 -} - 3d6c: b005 add sp, #20 - 3d6e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 3d72: bf00 nop - 3d74: 00017dad .word 0x00017dad - 3d78: 00017ed1 .word 0x00017ed1 - 3d7c: 00017dc5 .word 0x00017dc5 - 3d80: 1fff978c .word 0x1fff978c - 3d84: 00001c61 .word 0x00001c61 - 3d88: 0001806c .word 0x0001806c - -00003d8c : -int IridiumSBD::internalGetSignalQuality(int &quality) - 3d8c: b530 push {r4, r5, lr} - send(F("AT+CSQ\r")); - 3d8e: 2301 movs r3, #1 -int IridiumSBD::internalGetSignalQuality(int &quality) - 3d90: b085 sub sp, #20 - send(F("AT+CSQ\r")); - 3d92: 461a mov r2, r3 -int IridiumSBD::internalGetSignalQuality(int &quality) - 3d94: 460d mov r5, r1 - send(F("AT+CSQ\r")); - 3d96: 4918 ldr r1, [pc, #96] ; (3df8 ) -int IridiumSBD::internalGetSignalQuality(int &quality) - 3d98: 4604 mov r4, r0 - send(F("AT+CSQ\r")); - 3d9a: f7ff fe4f bl 3a3c - if (!waitForATResponse(csqResponseBuf, sizeof(csqResponseBuf), "+CSQ:")) - 3d9e: 4a17 ldr r2, [pc, #92] ; (3dfc ) - 3da0: 9200 str r2, [sp, #0] - 3da2: 4b17 ldr r3, [pc, #92] ; (3e00 ) - 3da4: 2202 movs r2, #2 - 3da6: a903 add r1, sp, #12 - 3da8: 4620 mov r0, r4 - 3daa: f7ff ff07 bl 3bbc - 3dae: b170 cbz r0, 3dce - if (isdigit(csqResponseBuf[0])) - 3db0: f89d 300c ldrb.w r3, [sp, #12] - 3db4: 3b30 subs r3, #48 ; 0x30 - 3db6: 2b09 cmp r3, #9 - 3db8: d902 bls.n 3dc0 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 3dba: 2003 movs r0, #3 -} - 3dbc: b005 add sp, #20 - 3dbe: bd30 pop {r4, r5, pc} - quality = atoi(csqResponseBuf); - 3dc0: a803 add r0, sp, #12 - 3dc2: f00c f957 bl 10074 - 3dc6: 6028 str r0, [r5, #0] - return ISBD_SUCCESS; - 3dc8: 2000 movs r0, #0 -} - 3dca: b005 add sp, #20 - 3dcc: bd30 pop {r4, r5, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3dce: 69e0 ldr r0, [r4, #28] - 3dd0: 1c43 adds r3, r0, #1 - 3dd2: d108 bne.n 3de6 - if (ISBDCallback != NULL) - 3dd4: 4b0b ldr r3, [pc, #44] ; (3e04 ) - 3dd6: 2b00 cmp r3, #0 - 3dd8: d0ef beq.n 3dba - return !ISBDCallback(); - 3dda: f7fd ff41 bl 1c60 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 3dde: f1c0 0004 rsb r0, r0, #4 -} - 3de2: b005 add sp, #20 - 3de4: bd30 pop {r4, r5, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3de6: b2c0 uxtb r0, r0 - 3de8: f008 fbf0 bl c5cc - 3dec: 2800 cmp r0, #0 - 3dee: d1f1 bne.n 3dd4 - ringAsserted = true; - 3df0: 2301 movs r3, #1 - 3df2: f884 3022 strb.w r3, [r4, #34] ; 0x22 - 3df6: e7ed b.n 3dd4 - 3df8: 00017e10 .word 0x00017e10 - 3dfc: 00017de0 .word 0x00017de0 - 3e00: 00017e18 .word 0x00017e18 - 3e04: 00001c61 .word 0x00001c61 - -00003e08 : - if (this->reentrant) - 3e08: 7d43 ldrb r3, [r0, #21] - 3e0a: b973 cbnz r3, 3e2a - if (this->asleep) - 3e0c: 7d03 ldrb r3, [r0, #20] - this->reentrant = true; - 3e0e: 2201 movs r2, #1 -{ - 3e10: b510 push {r4, lr} - 3e12: 4604 mov r4, r0 - this->reentrant = true; - 3e14: 7542 strb r2, [r0, #21] - if (this->asleep) - 3e16: b923 cbnz r3, 3e22 - 3e18: f7ff ffb8 bl 3d8c - this->reentrant = false; - 3e1c: 2300 movs r3, #0 - 3e1e: 7563 strb r3, [r4, #21] -} - 3e20: bd10 pop {r4, pc} - this->reentrant = false; - 3e22: 2300 movs r3, #0 - return ISBD_IS_ASLEEP; - 3e24: 200a movs r0, #10 - this->reentrant = false; - 3e26: 7563 strb r3, [r4, #21] -} - 3e28: bd10 pop {r4, pc} - return ISBD_REENTRANT; - 3e2a: 2009 movs r0, #9 -} - 3e2c: 4770 bx lr - 3e2e: bf00 nop - -00003e30 : -{ - 3e30: b530 push {r4, r5, lr} - send(F("AT-MSSTM\r")); - 3e32: 2301 movs r3, #1 -{ - 3e34: b089 sub sp, #36 ; 0x24 - send(F("AT-MSSTM\r")); - 3e36: 461a mov r2, r3 -{ - 3e38: 460d mov r5, r1 - send(F("AT-MSSTM\r")); - 3e3a: 4917 ldr r1, [pc, #92] ; (3e98 ) -{ - 3e3c: 4604 mov r4, r0 - send(F("AT-MSSTM\r")); - 3e3e: f7ff fdfd bl 3a3c - if (!waitForATResponse(msstmResponseBuf, sizeof(msstmResponseBuf), "-MSSTM: ")) - 3e42: 4a16 ldr r2, [pc, #88] ; (3e9c ) - 3e44: 9200 str r2, [sp, #0] - 3e46: 4b16 ldr r3, [pc, #88] ; (3ea0 ) - 3e48: 2218 movs r2, #24 - 3e4a: a902 add r1, sp, #8 - 3e4c: 4620 mov r0, r4 - 3e4e: f7ff feb5 bl 3bbc - 3e52: b150 cbz r0, 3e6a - okToProceed = isxdigit(msstmResponseBuf[0]); - 3e54: f89d 0008 ldrb.w r0, [sp, #8] - 3e58: f00c f904 bl 10064 - 3e5c: 3800 subs r0, #0 - 3e5e: bf18 it ne - 3e60: 2001 movne r0, #1 - 3e62: 7028 strb r0, [r5, #0] - return ISBD_SUCCESS; - 3e64: 2000 movs r0, #0 -} - 3e66: b009 add sp, #36 ; 0x24 - 3e68: bd30 pop {r4, r5, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3e6a: 69e0 ldr r0, [r4, #28] - 3e6c: 1c43 adds r3, r0, #1 - 3e6e: d107 bne.n 3e80 - if (ISBDCallback != NULL) - 3e70: 4b0c ldr r3, [pc, #48] ; (3ea4 ) - 3e72: b173 cbz r3, 3e92 - return !ISBDCallback(); - 3e74: f7fd fef4 bl 1c60 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 3e78: f1c0 0004 rsb r0, r0, #4 -} - 3e7c: b009 add sp, #36 ; 0x24 - 3e7e: bd30 pop {r4, r5, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3e80: b2c0 uxtb r0, r0 - 3e82: f008 fba3 bl c5cc - 3e86: 2800 cmp r0, #0 - 3e88: d1f2 bne.n 3e70 - ringAsserted = true; - 3e8a: 2301 movs r3, #1 - 3e8c: f884 3022 strb.w r3, [r4, #34] ; 0x22 - 3e90: e7ee b.n 3e70 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 3e92: 2003 movs r0, #3 -} - 3e94: b009 add sp, #36 ; 0x24 - 3e96: bd30 pop {r4, r5, pc} - 3e98: 00017dc8 .word 0x00017dc8 - 3e9c: 00017de0 .word 0x00017de0 - 3ea0: 00017dd4 .word 0x00017dd4 - 3ea4: 00001c61 .word 0x00001c61 - -00003ea8 : -{ - 3ea8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 3eac: 461d mov r5, r3 - send(F("AT+SBDIX\r")); - 3eae: 2301 movs r3, #1 -{ - 3eb0: b090 sub sp, #64 ; 0x40 - 3eb2: 4688 mov r8, r1 - 3eb4: 4617 mov r7, r2 - send(F("AT+SBDIX\r")); - 3eb6: 492b ldr r1, [pc, #172] ; (3f64 ) - 3eb8: 461a mov r2, r3 -{ - 3eba: 4604 mov r4, r0 - send(F("AT+SBDIX\r")); - 3ebc: f7ff fdbe bl 3a3c - if (!waitForATResponse(sbdixResponseBuf, sizeof(sbdixResponseBuf), "+SBDIX: ")) - 3ec0: 4b29 ldr r3, [pc, #164] ; (3f68 ) - 3ec2: 9300 str r3, [sp, #0] - 3ec4: 2220 movs r2, #32 - 3ec6: 4b29 ldr r3, [pc, #164] ; (3f6c ) - 3ec8: eb0d 0102 add.w r1, sp, r2 - 3ecc: 4620 mov r0, r4 - 3ece: f7ff fe75 bl 3bbc - 3ed2: b370 cbz r0, 3f32 - uint16_t *values[6] = { &moCode, &moMSN, &mtCode, &mtMSN, &mtLen, &mtRemaining }; - 3ed4: 9b16 ldr r3, [sp, #88] ; 0x58 - char *p = strtok(i == 0 ? sbdixResponseBuf : NULL, ", "); - 3ed6: 4e26 ldr r6, [pc, #152] ; (3f70 ) - uint16_t *values[6] = { &moCode, &moMSN, &mtCode, &mtMSN, &mtLen, &mtRemaining }; - 3ed8: 9305 str r3, [sp, #20] - 3eda: 2401 movs r4, #1 - 3edc: 9b17 ldr r3, [sp, #92] ; 0x5c - 3ede: 9306 str r3, [sp, #24] - char *p = strtok(i == 0 ? sbdixResponseBuf : NULL, ", "); - 3ee0: 2c01 cmp r4, #1 - uint16_t *values[6] = { &moCode, &moMSN, &mtCode, &mtMSN, &mtLen, &mtRemaining }; - 3ee2: 9b18 ldr r3, [sp, #96] ; 0x60 - 3ee4: 9504 str r5, [sp, #16] - 3ee6: e9cd 8702 strd r8, r7, [sp, #8] - 3eea: 9307 str r3, [sp, #28] - char *p = strtok(i == 0 ? sbdixResponseBuf : NULL, ", "); - 3eec: ad02 add r5, sp, #8 - 3eee: 4631 mov r1, r6 - 3ef0: f04f 0000 mov.w r0, #0 - 3ef4: d010 beq.n 3f18 - 3ef6: f00d fabb bl 11470 - if (p == NULL) - 3efa: b330 cbz r0, 3f4a - *values[i] = atol(p); - 3efc: f00c f8be bl 1007c - 3f00: 682b ldr r3, [r5, #0] - for (int i=0; i<6; ++i) - 3f02: 2c06 cmp r4, #6 - *values[i] = atol(p); - 3f04: 8018 strh r0, [r3, #0] - for (int i=0; i<6; ++i) - 3f06: d010 beq.n 3f2a - 3f08: 3401 adds r4, #1 - char *p = strtok(i == 0 ? sbdixResponseBuf : NULL, ", "); - 3f0a: 2c01 cmp r4, #1 - 3f0c: f105 0504 add.w r5, r5, #4 - 3f10: 4631 mov r1, r6 - 3f12: f04f 0000 mov.w r0, #0 - 3f16: d1ee bne.n 3ef6 - 3f18: a808 add r0, sp, #32 - 3f1a: f00d faa9 bl 11470 - if (p == NULL) - 3f1e: b1a0 cbz r0, 3f4a - *values[i] = atol(p); - 3f20: f00c f8ac bl 1007c - 3f24: 682b ldr r3, [r5, #0] - 3f26: 8018 strh r0, [r3, #0] - for (int i=0; i<6; ++i) - 3f28: e7ee b.n 3f08 - return ISBD_SUCCESS; - 3f2a: 2000 movs r0, #0 -} - 3f2c: b010 add sp, #64 ; 0x40 - 3f2e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3f32: 69e0 ldr r0, [r4, #28] - 3f34: 1c43 adds r3, r0, #1 - 3f36: d10c bne.n 3f52 - if (ISBDCallback != NULL) - 3f38: 4b0e ldr r3, [pc, #56] ; (3f74 ) - 3f3a: b133 cbz r3, 3f4a - return !ISBDCallback(); - 3f3c: f7fd fe90 bl 1c60 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 3f40: f1c0 0004 rsb r0, r0, #4 -} - 3f44: b010 add sp, #64 ; 0x40 - 3f46: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 3f4a: 2003 movs r0, #3 -} - 3f4c: b010 add sp, #64 ; 0x40 - 3f4e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3f52: b2c0 uxtb r0, r0 - 3f54: f008 fb3a bl c5cc - 3f58: 2800 cmp r0, #0 - 3f5a: d1ed bne.n 3f38 - ringAsserted = true; - 3f5c: 2301 movs r3, #1 - 3f5e: f884 3022 strb.w r3, [r4, #34] ; 0x22 - 3f62: e7e9 b.n 3f38 - 3f64: 00017e20 .word 0x00017e20 - 3f68: 00017de0 .word 0x00017de0 - 3f6c: 00017e2c .word 0x00017e2c - 3f70: 00017e38 .word 0x00017e38 - 3f74: 00001c61 .word 0x00001c61 - -00003f78 : -{ - 3f78: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - send(F("AT+SBDRB\r")); - 3f7c: 4d9c ldr r5, [pc, #624] ; (41f0 ) - 3f7e: 2301 movs r3, #1 -{ - 3f80: b08d sub sp, #52 ; 0x34 - 3f82: 4688 mov r8, r1 - 3f84: 4692 mov sl, r2 - send(F("AT+SBDRB\r")); - 3f86: 4629 mov r1, r5 - 3f88: 461a mov r2, r3 -{ - 3f8a: 4604 mov r4, r0 - send(F("AT+SBDRB\r")); - 3f8c: f7ff fd56 bl 3a3c - if (!waitForATResponse(NULL, 0, NULL, "AT+SBDRB\r")) // waits for its own echo - 3f90: 2300 movs r3, #0 - 3f92: 9500 str r5, [sp, #0] - 3f94: 461a mov r2, r3 - 3f96: 4619 mov r1, r3 - 3f98: 4620 mov r0, r4 - 3f9a: f7ff fe0f bl 3bbc - 3f9e: 9002 str r0, [sp, #8] - 3fa0: 2800 cmp r0, #0 - 3fa2: f000 8109 beq.w 41b8 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3fa6: 4d93 ldr r5, [pc, #588] ; (41f4 ) - if (ISBDCallback != NULL) - 3fa8: f8df 924c ldr.w r9, [pc, #588] ; 41f8 - 3fac: 682b ldr r3, [r5, #0] - 3fae: 9305 str r3, [sp, #20] - return ret; - 3fb0: 9e05 ldr r6, [sp, #20] - while (millis() - start < 1000UL * atTimeout) - 3fb2: f44f 777a mov.w r7, #1000 ; 0x3e8 - ringAsserted = true; - 3fb6: f04f 0b01 mov.w fp, #1 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 3fba: 682b ldr r3, [r5, #0] - 3fbc: 9306 str r3, [sp, #24] - return ret; - 3fbe: 9a06 ldr r2, [sp, #24] - while (millis() - start < 1000UL * atTimeout) - 3fc0: 68a3 ldr r3, [r4, #8] - 3fc2: 1b92 subs r2, r2, r6 - 3fc4: fb07 f303 mul.w r3, r7, r3 - 3fc8: 429a cmp r2, r3 - 3fca: d215 bcs.n 3ff8 - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 3fcc: 69e3 ldr r3, [r4, #28] - 3fce: b2d8 uxtb r0, r3 - 3fd0: 3301 adds r3, #1 - 3fd2: d004 beq.n 3fde - 3fd4: f008 fafa bl c5cc - 3fd8: b908 cbnz r0, 3fde - ringAsserted = true; - 3fda: f884 b022 strb.w fp, [r4, #34] ; 0x22 - if (ISBDCallback != NULL) - 3fde: f1b9 0f00 cmp.w r9, #0 - 3fe2: d003 beq.n 3fec - return !ISBDCallback(); - 3fe4: f7fd fe3c bl 1c60 - if (cancelled()) - 3fe8: 2800 cmp r0, #0 - 3fea: d07b beq.n 40e4 - if (stream.available() >= 2) - 3fec: 6820 ldr r0, [r4, #0] - 3fee: 6803 ldr r3, [r0, #0] - 3ff0: 691b ldr r3, [r3, #16] - 3ff2: 4798 blx r3 - 3ff4: 2801 cmp r0, #1 - 3ff6: dde0 ble.n 3fba - if (stream.available() < 2) - 3ff8: 6820 ldr r0, [r4, #0] - 3ffa: 6803 ldr r3, [r0, #0] - 3ffc: 691b ldr r3, [r3, #16] - 3ffe: 4798 blx r3 - 4000: 2801 cmp r0, #1 - 4002: dd6b ble.n 40dc - uint16_t size = 256 * stream.read() + stream.read(); - 4004: 6820 ldr r0, [r4, #0] - char c = pgm_read_byte(p++); - 4006: 4f7d ldr r7, [pc, #500] ; (41fc ) - uint16_t size = 256 * stream.read() + stream.read(); - 4008: 6803 ldr r3, [r0, #0] - 400a: 695b ldr r3, [r3, #20] - 400c: 4798 blx r3 - 400e: 4681 mov r9, r0 - 4010: 6820 ldr r0, [r4, #0] - 4012: 6803 ldr r3, [r0, #0] - 4014: 695b ldr r3, [r3, #20] - 4016: 4798 blx r3 - 4018: eb00 2909 add.w r9, r0, r9, lsl #8 - 401c: fa1f f989 uxth.w r9, r9 - char c = pgm_read_byte(p++); - 4020: 215b movs r1, #91 ; 0x5b - ISBDConsoleCallback(this, c); - 4022: 4620 mov r0, r4 - 4024: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4028: f817 1b01 ldrb.w r1, [r7], #1 - if (c == 0) break; - 402c: 2900 cmp r1, #0 - 402e: d1f8 bne.n 4022 - sprintf(str, "%u", n); - 4030: 4973 ldr r1, [pc, #460] ; (4200 ) - 4032: 464a mov r2, r9 - 4034: a809 add r0, sp, #36 ; 0x24 - 4036: f00c feeb bl 10e10 - while (*str) - 403a: f89d 1024 ldrb.w r1, [sp, #36] ; 0x24 - 403e: b139 cbz r1, 4050 - 4040: af09 add r7, sp, #36 ; 0x24 - ISBDConsoleCallback(this, *str++); - 4042: 4620 mov r0, r4 - 4044: f3af 8000 nop.w - while (*str) - 4048: f817 1f01 ldrb.w r1, [r7, #1]! - 404c: 2900 cmp r1, #0 - 404e: d1f8 bne.n 4042 - ISBDConsoleCallback(this, c); - 4050: 4620 mov r0, r4 - 4052: 215d movs r1, #93 ; 0x5d - 4054: f3af 8000 nop.w - for (uint16_t bytesRead = 0; bytesRead < size;) - 4058: 2700 movs r7, #0 - 405a: 4643 mov r3, r8 - if (ISBDCallback != NULL) - 405c: f8df b198 ldr.w fp, [pc, #408] ; 41f8 - bool rxOverflow = false; - 4060: 9703 str r7, [sp, #12] - 4062: 46a0 mov r8, r4 - 4064: 461c mov r4, r3 - for (uint16_t bytesRead = 0; bytesRead < size;) - 4066: 454f cmp r7, r9 - 4068: d243 bcs.n 40f2 - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 406a: f8d8 001c ldr.w r0, [r8, #28] - 406e: 1c43 adds r3, r0, #1 - 4070: d007 beq.n 4082 - 4072: b2c0 uxtb r0, r0 - 4074: f008 faaa bl c5cc - 4078: b918 cbnz r0, 4082 - ringAsserted = true; - 407a: f04f 0301 mov.w r3, #1 - 407e: f888 3022 strb.w r3, [r8, #34] ; 0x22 - if (ISBDCallback != NULL) - 4082: f1bb 0f00 cmp.w fp, #0 - 4086: d002 beq.n 408e - return !ISBDCallback(); - 4088: f7fd fdea bl 1c60 - if (cancelled()) - 408c: b350 cbz r0, 40e4 - if (stream.available()) - 408e: f8d8 0000 ldr.w r0, [r8] - 4092: 6803 ldr r3, [r0, #0] - 4094: 691b ldr r3, [r3, #16] - 4096: 4798 blx r3 - 4098: b1a0 cbz r0, 40c4 - uint8_t c = stream.read(); - 409a: f8d8 0000 ldr.w r0, [r8] - 409e: 6803 ldr r3, [r0, #0] - bytesRead++; - 40a0: 3701 adds r7, #1 - uint8_t c = stream.read(); - 40a2: 695b ldr r3, [r3, #20] - 40a4: 4798 blx r3 - bytesRead++; - 40a6: b2bf uxth r7, r7 - if (rxBuffer && prxBufferSize) - 40a8: b164 cbz r4, 40c4 - 40aa: f1ba 0f00 cmp.w sl, #0 - 40ae: d009 beq.n 40c4 - if (*prxBufferSize > 0) - 40b0: f8da 3000 ldr.w r3, [sl] - 40b4: b1d3 cbz r3, 40ec - uint8_t c = stream.read(); - 40b6: f804 0b01 strb.w r0, [r4], #1 - (*prxBufferSize)--; - 40ba: f8da 3000 ldr.w r3, [sl] - 40be: 3b01 subs r3, #1 - 40c0: f8ca 3000 str.w r3, [sl] - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 40c4: 682b ldr r3, [r5, #0] - 40c6: 9307 str r3, [sp, #28] - return ret; - 40c8: 9907 ldr r1, [sp, #28] - if (millis() - start >= 1000UL * atTimeout) - 40ca: f8d8 3008 ldr.w r3, [r8, #8] - 40ce: f44f 707a mov.w r0, #1000 ; 0x3e8 - 40d2: 1b89 subs r1, r1, r6 - 40d4: fb00 f303 mul.w r3, r0, r3 - 40d8: 4299 cmp r1, r3 - 40da: d3c4 bcc.n 4066 - return ISBD_SENDRECEIVE_TIMEOUT; - 40dc: 2007 movs r0, #7 -} - 40de: b00d add sp, #52 ; 0x34 - 40e0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - return ISBD_CANCELLED; - 40e4: 2004 movs r0, #4 -} - 40e6: b00d add sp, #52 ; 0x34 - 40e8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - rxOverflow = true; - 40ec: 9b02 ldr r3, [sp, #8] - 40ee: 9303 str r3, [sp, #12] - 40f0: e7e8 b.n 40c4 - if (ISBDCallback != NULL) - 40f2: 4644 mov r4, r8 - 40f4: f8df 8100 ldr.w r8, [pc, #256] ; 41f8 - while (millis() - start < 1000UL * atTimeout) - 40f8: f44f 777a mov.w r7, #1000 ; 0x3e8 - ringAsserted = true; - 40fc: f04f 0b01 mov.w fp, #1 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 4100: 682b ldr r3, [r5, #0] - 4102: 9308 str r3, [sp, #32] - return ret; - 4104: 9a08 ldr r2, [sp, #32] - while (millis() - start < 1000UL * atTimeout) - 4106: 68a3 ldr r3, [r4, #8] - 4108: 1b92 subs r2, r2, r6 - 410a: fb07 f303 mul.w r3, r7, r3 - 410e: 429a cmp r2, r3 - 4110: d215 bcs.n 413e - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 4112: 69e3 ldr r3, [r4, #28] - 4114: b2d8 uxtb r0, r3 - 4116: 3301 adds r3, #1 - 4118: d004 beq.n 4124 - 411a: f008 fa57 bl c5cc - 411e: b908 cbnz r0, 4124 - ringAsserted = true; - 4120: f884 b022 strb.w fp, [r4, #34] ; 0x22 - if (ISBDCallback != NULL) - 4124: f1b8 0f00 cmp.w r8, #0 - 4128: d003 beq.n 4132 - return !ISBDCallback(); - 412a: f7fd fd99 bl 1c60 - if (cancelled()) - 412e: 2800 cmp r0, #0 - 4130: d0d8 beq.n 40e4 - if (stream.available() >= 2) - 4132: 6820 ldr r0, [r4, #0] - 4134: 6803 ldr r3, [r0, #0] - 4136: 691b ldr r3, [r3, #16] - 4138: 4798 blx r3 - 413a: 2801 cmp r0, #1 - 413c: dde0 ble.n 4100 - if (stream.available() < 2) - 413e: 6820 ldr r0, [r4, #0] - 4140: 6803 ldr r3, [r0, #0] - 4142: 691b ldr r3, [r3, #16] - 4144: 4798 blx r3 - 4146: 2801 cmp r0, #1 - 4148: ddc8 ble.n 40dc - uint16_t checksum = 256 * stream.read() + stream.read(); - 414a: 6820 ldr r0, [r4, #0] - char c = pgm_read_byte(p++); - 414c: 4d2d ldr r5, [pc, #180] ; (4204 ) - uint16_t checksum = 256 * stream.read() + stream.read(); - 414e: 6803 ldr r3, [r0, #0] - 4150: 695b ldr r3, [r3, #20] - 4152: 4798 blx r3 - 4154: 4606 mov r6, r0 - 4156: 6820 ldr r0, [r4, #0] - 4158: 6803 ldr r3, [r0, #0] - 415a: 695b ldr r3, [r3, #20] - 415c: 4798 blx r3 - 415e: eb00 2606 add.w r6, r0, r6, lsl #8 - 4162: b2b6 uxth r6, r6 - char c = pgm_read_byte(p++); - 4164: 215b movs r1, #91 ; 0x5b - ISBDConsoleCallback(this, c); - 4166: 4620 mov r0, r4 - 4168: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 416c: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 4170: 2900 cmp r1, #0 - 4172: d1f8 bne.n 4166 - sprintf(str, "%u", n); - 4174: 4922 ldr r1, [pc, #136] ; (4200 ) - 4176: 4632 mov r2, r6 - 4178: a809 add r0, sp, #36 ; 0x24 - 417a: f00c fe49 bl 10e10 - while (*str) - 417e: f89d 1024 ldrb.w r1, [sp, #36] ; 0x24 - 4182: b139 cbz r1, 4194 - 4184: ad09 add r5, sp, #36 ; 0x24 - ISBDConsoleCallback(this, *str++); - 4186: 4620 mov r0, r4 - 4188: f3af 8000 nop.w - while (*str) - 418c: f815 1f01 ldrb.w r1, [r5, #1]! - 4190: 2900 cmp r1, #0 - 4192: d1f8 bne.n 4186 - ISBDConsoleCallback(this, c); - 4194: 215d movs r1, #93 ; 0x5d - 4196: 4620 mov r0, r4 - 4198: f3af 8000 nop.w - if (prxBufferSize) - 419c: f1ba 0f00 cmp.w sl, #0 - 41a0: d001 beq.n 41a6 - *prxBufferSize = (size_t)size; - 41a2: f8ca 9000 str.w r9, [sl] - if (!waitForATResponse()) - 41a6: 4a18 ldr r2, [pc, #96] ; (4208 ) - 41a8: 9200 str r2, [sp, #0] - 41aa: 2300 movs r3, #0 - 41ac: 461a mov r2, r3 - 41ae: 4619 mov r1, r3 - 41b0: 4620 mov r0, r4 - 41b2: f7ff fd03 bl 3bbc - 41b6: b9c0 cbnz r0, 41ea - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 41b8: 69e0 ldr r0, [r4, #28] - 41ba: 1c42 adds r2, r0, #1 - 41bc: d108 bne.n 41d0 - if (ISBDCallback != NULL) - 41be: 4b0e ldr r3, [pc, #56] ; (41f8 ) - 41c0: b17b cbz r3, 41e2 - return !ISBDCallback(); - 41c2: f7fd fd4d bl 1c60 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 41c6: f1c0 0004 rsb r0, r0, #4 -} - 41ca: b00d add sp, #52 ; 0x34 - 41cc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 41d0: b2c0 uxtb r0, r0 - 41d2: f008 f9fb bl c5cc - 41d6: 2800 cmp r0, #0 - 41d8: d1f1 bne.n 41be - ringAsserted = true; - 41da: 2301 movs r3, #1 - 41dc: f884 3022 strb.w r3, [r4, #34] ; 0x22 - 41e0: e7ed b.n 41be - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 41e2: 2003 movs r0, #3 -} - 41e4: b00d add sp, #52 ; 0x34 - 41e6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - return rxOverflow ? ISBD_RX_OVERFLOW : ISBD_SUCCESS; - 41ea: 9b03 ldr r3, [sp, #12] - 41ec: 00d8 lsls r0, r3, #3 - 41ee: e77a b.n 40e6 - 41f0: 00017e54 .word 0x00017e54 - 41f4: 1fff978c .word 0x1fff978c - 41f8: 00001c61 .word 0x00001c61 - 41fc: 00017e3d .word 0x00017e3d - 4200: 00017d90 .word 0x00017d90 - 4204: 00017e4d .word 0x00017e4d - 4208: 00017de0 .word 0x00017de0 - -0000420c : -{ - 420c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - char c = pgm_read_byte(p++); - 4210: 4dba ldr r5, [pc, #744] ; (44fc ) -{ - 4212: 460e mov r6, r1 - 4214: b08f sub sp, #60 ; 0x3c - 4216: 4604 mov r4, r0 - 4218: 4690 mov r8, r2 - 421a: 461f mov r7, r3 - char c = pgm_read_byte(p++); - 421c: 2169 movs r1, #105 ; 0x69 - ISBDDiagsCallback(this, c); - 421e: 4620 mov r0, r4 - 4220: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4224: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 4228: 2900 cmp r1, #0 - 422a: d1f8 bne.n 421e - if (this->asleep) - 422c: 7d23 ldrb r3, [r4, #20] - 422e: 2b00 cmp r3, #0 - 4230: f040 815d bne.w 44ee - if (txData && txDataSize) - 4234: f1b8 0f00 cmp.w r8, #0 - 4238: f000 80a5 beq.w 4386 - 423c: 2f00 cmp r7, #0 - 423e: f000 80a2 beq.w 4386 - if (txDataSize > ISBD_MAX_MESSAGE_LENGTH) - 4242: f5b7 7faa cmp.w r7, #340 ; 0x154 - 4246: f200 814c bhi.w 44e2 - send(F("AT+SBDWB="), true, false); - 424a: 460b mov r3, r1 - 424c: 2201 movs r2, #1 - 424e: 49ac ldr r1, [pc, #688] ; (4500 ) - 4250: 4620 mov r0, r4 - 4252: f7ff fbf3 bl 3a3c - sprintf(str, "%u", n); - 4256: 49ab ldr r1, [pc, #684] ; (4504 ) - 4258: 463a mov r2, r7 - 425a: a80b add r0, sp, #44 ; 0x2c - 425c: f00c fdd8 bl 10e10 - while (*str) - 4260: f89d 102c ldrb.w r1, [sp, #44] ; 0x2c - 4264: b139 cbz r1, 4276 - 4266: ad0b add r5, sp, #44 ; 0x2c - ISBDConsoleCallback(this, *str++); - 4268: 4620 mov r0, r4 - 426a: f3af 8000 nop.w - while (*str) - 426e: f815 1f01 ldrb.w r1, [r5, #1]! - 4272: 2900 cmp r1, #0 - 4274: d1f8 bne.n 4268 - size_t print(int n) { return print((long)n); } - 4276: 4639 mov r1, r7 - 4278: 6820 ldr r0, [r4, #0] - 427a: f007 fb91 bl b9a0 - send(F("\r"), false); - 427e: 49a2 ldr r1, [pc, #648] ; (4508 ) - 4280: 2301 movs r3, #1 - 4282: 2200 movs r2, #0 - 4284: 4620 mov r0, r4 - 4286: f7ff fbd9 bl 3a3c - if (!waitForATResponse(NULL, 0, NULL, "READY\r\n")) - 428a: 4ba0 ldr r3, [pc, #640] ; (450c ) - 428c: 9300 str r3, [sp, #0] - 428e: 2300 movs r3, #0 - 4290: 461a mov r2, r3 - 4292: 4619 mov r1, r3 - 4294: 4620 mov r0, r4 - 4296: f7ff fc91 bl 3bbc - 429a: 2800 cmp r0, #0 - 429c: d063 beq.n 4366 - 429e: 1e7b subs r3, r7, #1 - 42a0: f108 35ff add.w r5, r8, #4294967295 ; 0xffffffff - uint16_t checksum = 0; - 42a4: 2600 movs r6, #0 - 42a6: 4498 add r8, r3 - stream.write(txData[i]); - 42a8: 6820 ldr r0, [r4, #0] - 42aa: f815 1f01 ldrb.w r1, [r5, #1]! - 42ae: 6803 ldr r3, [r0, #0] - 42b0: 681b ldr r3, [r3, #0] - 42b2: 4798 blx r3 - checksum += (uint16_t)txData[i]; - 42b4: 782b ldrb r3, [r5, #0] - for (size_t i=0; i - ISBDConsoleCallback(this, c); - 42be: 215b movs r1, #91 ; 0x5b - 42c0: 4620 mov r0, r4 - 42c2: f3af 8000 nop.w - sprintf(str, "%u", n); - 42c6: 498f ldr r1, [pc, #572] ; (4504 ) - 42c8: 463a mov r2, r7 - 42ca: a80b add r0, sp, #44 ; 0x2c - 42cc: f00c fda0 bl 10e10 - while (*str) - 42d0: f89d 102c ldrb.w r1, [sp, #44] ; 0x2c - 42d4: ad0b add r5, sp, #44 ; 0x2c - 42d6: b131 cbz r1, 42e6 - ISBDConsoleCallback(this, *str++); - 42d8: 4620 mov r0, r4 - 42da: f3af 8000 nop.w - while (*str) - 42de: f815 1f01 ldrb.w r1, [r5, #1]! - 42e2: 2900 cmp r1, #0 - 42e4: d1f8 bne.n 42d8 - char c = pgm_read_byte(p++); - 42e6: 4d8a ldr r5, [pc, #552] ; (4510 ) - 42e8: 2120 movs r1, #32 - ISBDConsoleCallback(this, c); - 42ea: 4620 mov r0, r4 - 42ec: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 42f0: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 42f4: 2900 cmp r1, #0 - 42f6: d1f8 bne.n 42ea - char c = pgm_read_byte(p++); - 42f8: 4d86 ldr r5, [pc, #536] ; (4514 ) - 42fa: 2143 movs r1, #67 ; 0x43 - ISBDDiagsCallback(this, c); - 42fc: 4620 mov r0, r4 - 42fe: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4302: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 4306: 2900 cmp r1, #0 - 4308: d1f8 bne.n 42fc - sprintf(str, "%u", n); - 430a: 497e ldr r1, [pc, #504] ; (4504 ) - 430c: 4632 mov r2, r6 - 430e: a80b add r0, sp, #44 ; 0x2c - 4310: f00c fd7e bl 10e10 - while (*str) - 4314: f89d 102c ldrb.w r1, [sp, #44] ; 0x2c - 4318: b139 cbz r1, 432a - 431a: ad0b add r5, sp, #44 ; 0x2c - ISBDDiagsCallback(this, *str++); - 431c: 4620 mov r0, r4 - 431e: f3af 8000 nop.w - while (*str) - 4322: f815 1f01 ldrb.w r1, [r5, #1]! - 4326: 2900 cmp r1, #0 - 4328: d1f8 bne.n 431c - char c = pgm_read_byte(p++); - 432a: 4f7b ldr r7, [pc, #492] ; (4518 ) - 432c: 250d movs r5, #13 - ISBDDiagsCallback(this, c); - 432e: 4629 mov r1, r5 - 4330: 4620 mov r0, r4 - 4332: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4336: f817 5b01 ldrb.w r5, [r7], #1 - if (c == 0) break; - 433a: 2d00 cmp r5, #0 - 433c: d1f7 bne.n 432e - stream.write(checksum >> 8); - 433e: 6820 ldr r0, [r4, #0] - 4340: 6803 ldr r3, [r0, #0] - 4342: 0a31 lsrs r1, r6, #8 - 4344: 681b ldr r3, [r3, #0] - 4346: 4798 blx r3 - stream.write(checksum & 0xFF); - 4348: 6820 ldr r0, [r4, #0] - 434a: 6803 ldr r3, [r0, #0] - 434c: b2f1 uxtb r1, r6 - 434e: 681b ldr r3, [r3, #0] - 4350: 4798 blx r3 - if (!waitForATResponse(NULL, 0, NULL, "0\r\n\r\nOK\r\n")) - 4352: 4b72 ldr r3, [pc, #456] ; (451c ) - 4354: 9300 str r3, [sp, #0] - 4356: 462b mov r3, r5 - if (!waitForATResponse()) - 4358: 461a mov r2, r3 - 435a: 4619 mov r1, r3 - 435c: 4620 mov r0, r4 - 435e: f7ff fc2d bl 3bbc - 4362: 2800 cmp r0, #0 - 4364: d142 bne.n 43ec - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 4366: 69e0 ldr r0, [r4, #28] - 4368: 1c42 adds r2, r0, #1 - 436a: f040 80e3 bne.w 4534 - if (ISBDCallback != NULL) - 436e: 4b6c ldr r3, [pc, #432] ; (4520 ) - 4370: 2b00 cmp r3, #0 - 4372: f000 80e9 beq.w 4548 - return !ISBDCallback(); - 4376: f7fd fc73 bl 1c60 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 437a: f1c0 0a04 rsb sl, r0, #4 -} - 437e: 4650 mov r0, sl - 4380: b00f add sp, #60 ; 0x3c - 4382: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (txTxtMessage == NULL) // It's ok to have a NULL txtTxtMessage if the transaction is RX only - 4386: 2e00 cmp r6, #0 - 4388: f000 80e4 beq.w 4554 - char *p = strchr(txTxtMessage, '\r'); - 438c: 210d movs r1, #13 - 438e: 4630 mov r0, r6 - 4390: f00c ff62 bl 11258 - if (p) *p = 0; - 4394: b108 cbz r0, 439a - 4396: 2300 movs r3, #0 - 4398: 7003 strb r3, [r0, #0] - if (strlen(txTxtMessage) > ISBD_MAX_MESSAGE_LENGTH) - 439a: 4630 mov r0, r6 - 439c: f00d fd70 bl 11e80 - 43a0: f5b0 7faa cmp.w r0, #340 ; 0x154 - 43a4: f200 809d bhi.w 44e2 - send(F("AT+SBDWT\r")); - 43a8: 2301 movs r3, #1 - 43aa: 461a mov r2, r3 - 43ac: 495d ldr r1, [pc, #372] ; (4524 ) - 43ae: 4620 mov r0, r4 - 43b0: f7ff fb44 bl 3a3c - if (!waitForATResponse(NULL, 0, NULL, "READY\r\n")) - 43b4: 4a55 ldr r2, [pc, #340] ; (450c ) - 43b6: 9200 str r2, [sp, #0] - 43b8: 2300 movs r3, #0 - 43ba: 461a mov r2, r3 - 43bc: 4619 mov r1, r3 - 43be: 4620 mov r0, r4 - 43c0: f7ff fbfc bl 3bbc - 43c4: 2800 cmp r0, #0 - 43c6: d0ce beq.n 4366 - send(txTxtMessage); - 43c8: 4631 mov r1, r6 - 43ca: 4620 mov r0, r4 - 43cc: f7ff fb6c bl 3aa8 - send("\r"); - 43d0: 494d ldr r1, [pc, #308] ; (4508 ) - 43d2: 4620 mov r0, r4 - 43d4: f7ff fb68 bl 3aa8 - if (!waitForATResponse(NULL, 0, NULL, "0\r\n\r\nOK\r\n")) - 43d8: 4a50 ldr r2, [pc, #320] ; (451c ) - 43da: 9200 str r2, [sp, #0] - 43dc: 2300 movs r3, #0 - if (!waitForATResponse()) - 43de: 461a mov r2, r3 - 43e0: 4619 mov r1, r3 - 43e2: 4620 mov r0, r4 - 43e4: f7ff fbea bl 3bbc - 43e8: 2800 cmp r0, #0 - 43ea: d0bc beq.n 4366 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 43ec: 4e4e ldr r6, [pc, #312] ; (4528 ) - for (unsigned long start = millis(); millis() - start < 1000UL * this->sendReceiveTimeout;) - 43ee: 68e3 ldr r3, [r4, #12] - 43f0: 6832 ldr r2, [r6, #0] - 43f2: 9209 str r2, [sp, #36] ; 0x24 - return ret; - 43f4: 9f09 ldr r7, [sp, #36] ; 0x24 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 43f6: 6832 ldr r2, [r6, #0] - 43f8: 920a str r2, [sp, #40] ; 0x28 - return ret; - 43fa: 9a0a ldr r2, [sp, #40] ; 0x28 - 43fc: f44f 717a mov.w r1, #1000 ; 0x3e8 - 4400: 1bd2 subs r2, r2, r7 - 4402: fb01 f303 mul.w r3, r1, r3 - 4406: 429a cmp r2, r3 - 4408: f080 80d8 bcs.w 45bc - sprintf(str, "%u", n); - 440c: f8df 90f4 ldr.w r9, [pc, #244] ; 4504 - bool okToProceed = true; - 4410: f04f 0801 mov.w r8, #1 - okToProceed = false; - 4414: 2500 movs r5, #0 - if (this->msstmWorkaroundRequested) - 4416: f894 3020 ldrb.w r3, [r4, #32] - bool okToProceed = true; - 441a: f88d 8017 strb.w r8, [sp, #23] - if (this->msstmWorkaroundRequested) - 441e: 2b00 cmp r3, #0 - 4420: f040 80a2 bne.w 4568 - int ret = doSBDIX(moCode, moMSN, mtCode, mtMSN, mtLen, mtRemaining); - 4424: f10d 0122 add.w r1, sp, #34 ; 0x22 - 4428: aa08 add r2, sp, #32 - 442a: f10d 031e add.w r3, sp, #30 - 442e: 9102 str r1, [sp, #8] - 4430: 9201 str r2, [sp, #4] - 4432: 9300 str r3, [sp, #0] - 4434: f10d 021a add.w r2, sp, #26 - 4438: ab07 add r3, sp, #28 - 443a: a906 add r1, sp, #24 - 443c: 4620 mov r0, r4 - uint16_t moCode = 0, moMSN = 0, mtCode = 0, mtMSN = 0, mtLen = 0, mtRemaining = 0; - 443e: f8ad 5018 strh.w r5, [sp, #24] - 4442: f8ad 501a strh.w r5, [sp, #26] - 4446: f8ad 501c strh.w r5, [sp, #28] - 444a: f8ad 501e strh.w r5, [sp, #30] - 444e: f8ad 5020 strh.w r5, [sp, #32] - 4452: f8ad 5022 strh.w r5, [sp, #34] ; 0x22 - int ret = doSBDIX(moCode, moMSN, mtCode, mtMSN, mtLen, mtRemaining); - 4456: f7ff fd27 bl 3ea8 - if (ret != ISBD_SUCCESS) - 445a: 4682 mov sl, r0 - 445c: 2800 cmp r0, #0 - 445e: d142 bne.n 44e6 - char c = pgm_read_byte(p++); - 4460: f8df b0c8 ldr.w fp, [pc, #200] ; 452c - 4464: 2153 movs r1, #83 ; 0x53 - ISBDDiagsCallback(this, c); - 4466: 4620 mov r0, r4 - 4468: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 446c: f81b 1b01 ldrb.w r1, [fp], #1 - if (c == 0) break; - 4470: 2900 cmp r1, #0 - 4472: d1f8 bne.n 4466 - sprintf(str, "%u", n); - 4474: 4649 mov r1, r9 - 4476: f8bd 2018 ldrh.w r2, [sp, #24] - 447a: a80b add r0, sp, #44 ; 0x2c - 447c: f00c fcc8 bl 10e10 - while (*str) - 4480: f89d 102c ldrb.w r1, [sp, #44] ; 0x2c - 4484: b141 cbz r1, 4498 - 4486: f10d 0b2c add.w fp, sp, #44 ; 0x2c - ISBDDiagsCallback(this, *str++); - 448a: 4620 mov r0, r4 - 448c: f3af 8000 nop.w - while (*str) - 4490: f81b 1f01 ldrb.w r1, [fp, #1]! - 4494: 2900 cmp r1, #0 - 4496: d1f8 bne.n 448a - char c = pgm_read_byte(p++); - 4498: f8df b07c ldr.w fp, [pc, #124] ; 4518 - 449c: 210d movs r1, #13 - ISBDDiagsCallback(this, c); - 449e: 4620 mov r0, r4 - 44a0: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 44a4: f81b 1b01 ldrb.w r1, [fp], #1 - if (c == 0) break; - 44a8: 2900 cmp r1, #0 - 44aa: d1f8 bne.n 449e - if (moCode >= 0 && moCode <= 4) // this range indicates successful return! - 44ac: f8bd 3018 ldrh.w r3, [sp, #24] - 44b0: 2b04 cmp r3, #4 - 44b2: f240 80a2 bls.w 45fa - else if (moCode == 12 || moCode == 14 || moCode == 16) // fatal failure: no retry - 44b6: 2b10 cmp r3, #16 - 44b8: f200 808c bhi.w 45d4 - 44bc: f44f 32a8 mov.w r2, #86016 ; 0x15000 - 44c0: fa22 f303 lsr.w r3, r2, r3 - 44c4: 07db lsls r3, r3, #31 - 44c6: f140 8085 bpl.w 45d4 - if (moCode >= 0 && moCode <= 4) // this range indicates successful return! - 44ca: 4d19 ldr r5, [pc, #100] ; (4530 ) - 44cc: 2153 movs r1, #83 ; 0x53 - ISBDDiagsCallback(this, c); - 44ce: 4620 mov r0, r4 - 44d0: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 44d4: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 44d8: 2900 cmp r1, #0 - 44da: d1f8 bne.n 44ce - return ISBD_SBDIX_FATAL_ERROR; - 44dc: f04f 0a06 mov.w sl, #6 - 44e0: e001 b.n 44e6 - return ISBD_MSG_TOO_LONG; - 44e2: f04f 0a0d mov.w sl, #13 -} - 44e6: 4650 mov r0, sl - 44e8: b00f add sp, #60 ; 0x3c - 44ea: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - return ISBD_IS_ASLEEP; - 44ee: f04f 0a0a mov.w sl, #10 -} - 44f2: 4650 mov r0, sl - 44f4: b00f add sp, #60 ; 0x3c - 44f6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 44fa: bf00 nop - 44fc: 00017e61 .word 0x00017e61 - 4500: 00017f28 .word 0x00017f28 - 4504: 00017d90 .word 0x00017d90 - 4508: 0001804c .word 0x0001804c - 450c: 00017f34 .word 0x00017f34 - 4510: 00017e79 .word 0x00017e79 - 4514: 00017e81 .word 0x00017e81 - 4518: 00017ed1 .word 0x00017ed1 - 451c: 00017f3c .word 0x00017f3c - 4520: 00001c61 .word 0x00001c61 - 4524: 00017f54 .word 0x00017f54 - 4528: 1fff978c .word 0x1fff978c - 452c: 00017e8d .word 0x00017e8d - 4530: 00017ec5 .word 0x00017ec5 - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 4534: b2c0 uxtb r0, r0 - 4536: f008 f849 bl c5cc - 453a: 2800 cmp r0, #0 - 453c: f47f af17 bne.w 436e - ringAsserted = true; - 4540: 2301 movs r3, #1 - 4542: f884 3022 strb.w r3, [r4, #34] ; 0x22 - 4546: e712 b.n 436e - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 4548: f04f 0a03 mov.w sl, #3 -} - 454c: 4650 mov r0, sl - 454e: b00f add sp, #60 ; 0x3c - 4550: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - send(F("AT+SBDWT=\r")); - 4554: 2301 movs r3, #1 - 4556: 461a mov r2, r3 - 4558: 493d ldr r1, [pc, #244] ; (4650 ) - 455a: 4620 mov r0, r4 - 455c: f7ff fa6e bl 3a3c - if (!waitForATResponse()) - 4560: 4b3c ldr r3, [pc, #240] ; (4654 ) - 4562: 9300 str r3, [sp, #0] - 4564: 4633 mov r3, r6 - 4566: e73a b.n 43de - int ret = internalMSSTMWorkaround(okToProceed); - 4568: f10d 0117 add.w r1, sp, #23 - 456c: 4620 mov r0, r4 - okToProceed = false; - 456e: f88d 5017 strb.w r5, [sp, #23] - int ret = internalMSSTMWorkaround(okToProceed); - 4572: f7ff fc5d bl 3e30 - if (ret != ISBD_SUCCESS) - 4576: 4682 mov sl, r0 - 4578: 2800 cmp r0, #0 - 457a: d1b4 bne.n 44e6 - if (okToProceed) - 457c: f89d 3017 ldrb.w r3, [sp, #23] - 4580: 2b00 cmp r3, #0 - 4582: f47f af4f bne.w 4424 - char c = pgm_read_byte(p++); - 4586: f8df a0d0 ldr.w sl, [pc, #208] ; 4658 - 458a: 2157 movs r1, #87 ; 0x57 - ISBDDiagsCallback(this, c); - 458c: 4620 mov r0, r4 - 458e: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4592: f81a 1b01 ldrb.w r1, [sl], #1 - if (c == 0) break; - 4596: 2900 cmp r1, #0 - 4598: d1f8 bne.n 458c - if (!noBlockWait(ISBD_MSSTM_RETRY_INTERVAL)) - 459a: 210a movs r1, #10 - 459c: 4620 mov r0, r4 - 459e: f7ff f9d5 bl 394c - 45a2: b338 cbz r0, 45f4 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 45a4: 6833 ldr r3, [r6, #0] - 45a6: 930a str r3, [sp, #40] ; 0x28 - return ret; - 45a8: 9a0a ldr r2, [sp, #40] ; 0x28 - for (unsigned long start = millis(); millis() - start < 1000UL * this->sendReceiveTimeout;) - 45aa: 68e3 ldr r3, [r4, #12] - 45ac: f44f 717a mov.w r1, #1000 ; 0x3e8 - 45b0: 1bd2 subs r2, r2, r7 - 45b2: fb01 f303 mul.w r3, r1, r3 - 45b6: 429a cmp r2, r3 - 45b8: f4ff af2d bcc.w 4416 - char c = pgm_read_byte(p++); - 45bc: 4d27 ldr r5, [pc, #156] ; (465c ) - 45be: 2153 movs r1, #83 ; 0x53 - ISBDDiagsCallback(this, c); - 45c0: 4620 mov r0, r4 - 45c2: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 45c6: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 45ca: 2900 cmp r1, #0 - 45cc: d1f8 bne.n 45c0 - return ISBD_SENDRECEIVE_TIMEOUT; - 45ce: f04f 0a07 mov.w sl, #7 - 45d2: e788 b.n 44e6 - if (moCode >= 0 && moCode <= 4) // this range indicates successful return! - 45d4: f8df a088 ldr.w sl, [pc, #136] ; 4660 - 45d8: 2157 movs r1, #87 ; 0x57 - ISBDDiagsCallback(this, c); - 45da: 4620 mov r0, r4 - 45dc: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 45e0: f81a 1b01 ldrb.w r1, [sl], #1 - if (c == 0) break; - 45e4: 2900 cmp r1, #0 - 45e6: d1f8 bne.n 45da - if (!noBlockWait(sbdixInterval)) - 45e8: 6861 ldr r1, [r4, #4] - 45ea: 4620 mov r0, r4 - 45ec: f7ff f9ae bl 394c - 45f0: 2800 cmp r0, #0 - 45f2: d1d7 bne.n 45a4 - return ISBD_CANCELLED; - 45f4: f04f 0a04 mov.w sl, #4 - 45f8: e775 b.n 44e6 - char c = pgm_read_byte(p++); - 45fa: 4d1a ldr r5, [pc, #104] ; (4664 ) - 45fc: 2153 movs r1, #83 ; 0x53 - ISBDDiagsCallback(this, c); - 45fe: 4620 mov r0, r4 - 4600: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4604: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 4608: 2900 cmp r1, #0 - 460a: d1f8 bne.n 45fe - if (mtCode == 1 && rxBuffer) // retrieved 1 message - 460c: f8bd 301c ldrh.w r3, [sp, #28] - this->remainingMessages = mtRemaining; - 4610: f8bd 2022 ldrh.w r2, [sp, #34] ; 0x22 - 4614: 6122 str r2, [r4, #16] - if (mtCode == 1 && rxBuffer) // retrieved 1 message - 4616: 2b01 cmp r3, #1 - 4618: d111 bne.n 463e - 461a: 9b18 ldr r3, [sp, #96] ; 0x60 - 461c: b17b cbz r3, 463e - char c = pgm_read_byte(p++); - 461e: 4d12 ldr r5, [pc, #72] ; (4668 ) - 4620: 2149 movs r1, #73 ; 0x49 - ISBDDiagsCallback(this, c); - 4622: 4620 mov r0, r4 - 4624: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4628: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 462c: 2900 cmp r1, #0 - 462e: d1f8 bne.n 4622 - return doSBDRB(rxBuffer, prxBufferSize); - 4630: e9dd 1218 ldrd r1, r2, [sp, #96] ; 0x60 - 4634: 4620 mov r0, r4 - 4636: f7ff fc9f bl 3f78 - 463a: 4682 mov sl, r0 - 463c: e753 b.n 44e6 - if (prxBufferSize) - 463e: 9b19 ldr r3, [sp, #100] ; 0x64 - 4640: 2b00 cmp r3, #0 - 4642: f43f af50 beq.w 44e6 - *prxBufferSize = 0; - 4646: 9a19 ldr r2, [sp, #100] ; 0x64 - 4648: 2300 movs r3, #0 - 464a: 6013 str r3, [r2, #0] - 464c: e74b b.n 44e6 - 464e: bf00 nop - 4650: 00017f48 .word 0x00017f48 - 4654: 00017de0 .word 0x00017de0 - 4658: 00017ef5 .word 0x00017ef5 - 465c: 00017f15 .word 0x00017f15 - 4660: 00017ed5 .word 0x00017ed5 - 4664: 00017e9d .word 0x00017e9d - 4668: 00017eb1 .word 0x00017eb1 - -0000466c : -{ - 466c: b530 push {r4, r5, lr} - if (this->reentrant) - 466e: 7d45 ldrb r5, [r0, #21] -{ - 4670: b083 sub sp, #12 - if (this->reentrant) - 4672: b95d cbnz r5, 468c - this->reentrant = true; - 4674: 2301 movs r3, #1 - 4676: 7543 strb r3, [r0, #21] - int ret = internalSendReceiveSBD(message, NULL, 0, NULL, NULL); - 4678: 462a mov r2, r5 - 467a: 9501 str r5, [sp, #4] - 467c: 9500 str r5, [sp, #0] - 467e: 462b mov r3, r5 - 4680: 4604 mov r4, r0 - 4682: f7ff fdc3 bl 420c - this->reentrant = false; - 4686: 7565 strb r5, [r4, #21] -} - 4688: b003 add sp, #12 - 468a: bd30 pop {r4, r5, pc} - return ISBD_REENTRANT; - 468c: 2009 movs r0, #9 -} - 468e: b003 add sp, #12 - 4690: bd30 pop {r4, r5, pc} - 4692: bf00 nop - -00004694 : -{ - 4694: b530 push {r4, r5, lr} - if (this->reentrant) - 4696: 7d45 ldrb r5, [r0, #21] -{ - 4698: b083 sub sp, #12 - if (this->reentrant) - 469a: b95d cbnz r5, 46b4 - int ret = internalSendReceiveSBD(message, NULL, 0, rxBuffer, &rxBufferSize); - 469c: e9cd 2300 strd r2, r3, [sp] - this->reentrant = true; - 46a0: 2201 movs r2, #1 - int ret = internalSendReceiveSBD(message, NULL, 0, rxBuffer, &rxBufferSize); - 46a2: 462b mov r3, r5 - this->reentrant = true; - 46a4: 7542 strb r2, [r0, #21] - int ret = internalSendReceiveSBD(message, NULL, 0, rxBuffer, &rxBufferSize); - 46a6: 462a mov r2, r5 - 46a8: 4604 mov r4, r0 - 46aa: f7ff fdaf bl 420c - this->reentrant = false; - 46ae: 7565 strb r5, [r4, #21] -} - 46b0: b003 add sp, #12 - 46b2: bd30 pop {r4, r5, pc} - return ISBD_REENTRANT; - 46b4: 2009 movs r0, #9 -} - 46b6: b003 add sp, #12 - 46b8: bd30 pop {r4, r5, pc} - 46ba: bf00 nop - -000046bc : -int IridiumSBD::internalBegin() - 46bc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 46c0: 4604 mov r4, r0 - if (this->sleepPin == -1) - 46c2: 6980 ldr r0, [r0, #24] - this->asleep = !on; - 46c4: 2300 movs r3, #0 - if (this->sleepPin == -1) - 46c6: 1c41 adds r1, r0, #1 -int IridiumSBD::internalBegin() - 46c8: b08d sub sp, #52 ; 0x34 - this->asleep = !on; - 46ca: 7523 strb r3, [r4, #20] - if (this->sleepPin == -1) - 46cc: f000 810f beq.w 48ee - pinMode(this->sleepPin, OUTPUT); - 46d0: 2101 movs r1, #1 - 46d2: b2c0 uxtb r0, r0 - char c = pgm_read_byte(p++); - 46d4: 4da4 ldr r5, [pc, #656] ; (4968 ) - pinMode(this->sleepPin, OUTPUT); - 46d6: f007 ff87 bl c5e8 - char c = pgm_read_byte(p++); - 46da: 2150 movs r1, #80 ; 0x50 - ISBDDiagsCallback(this, c); - 46dc: 4620 mov r0, r4 - 46de: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 46e2: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 46e6: 2900 cmp r1, #0 - 46e8: d1f8 bne.n 46dc - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 46ea: 4da0 ldr r5, [pc, #640] ; (496c ) - digitalWrite(this->sleepPin, HIGH); // HIGH = awake - 46ec: 7e20 ldrb r0, [r4, #24] - 46ee: 2101 movs r1, #1 - 46f0: f007 ff46 bl c580 - 46f4: 682b ldr r3, [r5, #0] - 46f6: 9306 str r3, [sp, #24] - return ret; - 46f8: 9b06 ldr r3, [sp, #24] - lastPowerOnTime = millis(); - 46fa: 6263 str r3, [r4, #36] ; 0x24 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 46fc: 682b ldr r3, [r5, #0] - 46fe: 9303 str r3, [sp, #12] - return ret; - 4700: 9e03 ldr r6, [sp, #12] - if (ISBDCallback != NULL) - 4702: 4f9b ldr r7, [pc, #620] ; (4970 ) - ringAsserted = true; - 4704: f04f 0801 mov.w r8, #1 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 4708: 682b ldr r3, [r5, #0] - 470a: 9302 str r3, [sp, #8] - return ret; - 470c: 9b02 ldr r3, [sp, #8] - for (unsigned long start = millis(); millis() - start < startupTime;) - 470e: 1b9b subs r3, r3, r6 - 4710: f5b3 7ffa cmp.w r3, #500 ; 0x1f4 - 4714: d212 bcs.n 473c - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 4716: 69e3 ldr r3, [r4, #28] - 4718: b2d8 uxtb r0, r3 - 471a: 3301 adds r3, #1 - 471c: d004 beq.n 4728 - 471e: f007 ff55 bl c5cc - 4722: b908 cbnz r0, 4728 - ringAsserted = true; - 4724: f884 8022 strb.w r8, [r4, #34] ; 0x22 - if (ISBDCallback != NULL) - 4728: 2f00 cmp r7, #0 - 472a: d0ed beq.n 4708 - return !ISBDCallback(); - 472c: f7fd fa98 bl 1c60 - if (cancelled()) - 4730: 2800 cmp r0, #0 - 4732: d1e9 bne.n 4708 - return ISBD_CANCELLED; - 4734: 2004 movs r0, #4 -} - 4736: b00d add sp, #52 ; 0x34 - 4738: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 473c: 682b ldr r3, [r5, #0] - 473e: 9305 str r3, [sp, #20] - return ret; - 4740: f8dd a014 ldr.w sl, [sp, #20] - for (unsigned long start = millis(); !modemAlive && millis() - start < 1000UL * ISBD_STARTUP_MAX_TIME;) - 4744: f8df 922c ldr.w r9, [pc, #556] ; 4974 - send(F("AT\r")); - 4748: f8df 822c ldr.w r8, [pc, #556] ; 4978 - modemAlive = waitForATResponse(); - 474c: 4f8b ldr r7, [pc, #556] ; (497c ) - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 474e: 682e ldr r6, [r5, #0] - 4750: 9604 str r6, [sp, #16] - return ret; - 4752: f8dd c010 ldr.w ip, [sp, #16] - if (ISBDCallback != NULL) - 4756: 4e86 ldr r6, [pc, #536] ; (4970 ) - for (unsigned long start = millis(); !modemAlive && millis() - start < 1000UL * ISBD_STARTUP_MAX_TIME;) - 4758: ebac 0c0a sub.w ip, ip, sl - send(F("AT\r")); - 475c: 2301 movs r3, #1 - for (unsigned long start = millis(); !modemAlive && millis() - start < 1000UL * ISBD_STARTUP_MAX_TIME;) - 475e: 45cc cmp ip, r9 - send(F("AT\r")); - 4760: 461a mov r2, r3 - 4762: 4641 mov r1, r8 - 4764: 4620 mov r0, r4 - for (unsigned long start = millis(); !modemAlive && millis() - start < 1000UL * ISBD_STARTUP_MAX_TIME;) - 4766: f200 80db bhi.w 4920 - send(F("AT\r")); - 476a: f7ff f967 bl 3a3c - modemAlive = waitForATResponse(); - 476e: 2300 movs r3, #0 - 4770: 461a mov r2, r3 - 4772: 4619 mov r1, r3 - 4774: 9700 str r7, [sp, #0] - 4776: 4620 mov r0, r4 - 4778: f7ff fa20 bl 3bbc - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 477c: 69e3 ldr r3, [r4, #28] - modemAlive = waitForATResponse(); - 477e: 4683 mov fp, r0 - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 4780: b2d8 uxtb r0, r3 - 4782: 3301 adds r3, #1 - 4784: d005 beq.n 4792 - 4786: f007 ff21 bl c5cc - 478a: b910 cbnz r0, 4792 - ringAsserted = true; - 478c: 2301 movs r3, #1 - 478e: f884 3022 strb.w r3, [r4, #34] ; 0x22 - if (ISBDCallback != NULL) - 4792: b11e cbz r6, 479c - return !ISBDCallback(); - 4794: f7fd fa64 bl 1c60 - if (cancelled()) - 4798: 2800 cmp r0, #0 - 479a: d0cb beq.n 4734 - for (unsigned long start = millis(); !modemAlive && millis() - start < 1000UL * ISBD_STARTUP_MAX_TIME;) - 479c: f1bb 0f00 cmp.w fp, #0 - 47a0: d0d5 beq.n 474e - FlashString strings[3] = { F("ATE1\r"), F("AT&D0\r"), F("AT&K0\r") }; - 47a2: 4a77 ldr r2, [pc, #476] ; (4980 ) - 47a4: ca07 ldmia r2, {r0, r1, r2} - 47a6: ab09 add r3, sp, #36 ; 0x24 - 47a8: e883 0007 stmia.w r3, {r0, r1, r2} - for (int i=0; i<3; ++i) - 47ac: 461d mov r5, r3 - 47ae: f10d 0830 add.w r8, sp, #48 ; 0x30 - send(strings[i]); - 47b2: 2301 movs r3, #1 - 47b4: 461a mov r2, r3 - 47b6: f855 1b04 ldr.w r1, [r5], #4 - 47ba: 4620 mov r0, r4 - 47bc: f7ff f93e bl 3a3c - if (!waitForATResponse()) - 47c0: 2300 movs r3, #0 - 47c2: 9700 str r7, [sp, #0] - 47c4: 461a mov r2, r3 - 47c6: 4619 mov r1, r3 - 47c8: 4620 mov r0, r4 - 47ca: f7ff f9f7 bl 3bbc - 47ce: 2800 cmp r0, #0 - 47d0: f000 808f beq.w 48f2 - for (int i=0; i<3; ++i) - 47d4: 45a8 cmp r8, r5 - 47d6: d1ec bne.n 47b2 - char c = pgm_read_byte(p++); - 47d8: 4d6a ldr r5, [pc, #424] ; (4984 ) - 47da: 2152 movs r1, #82 ; 0x52 - ISBDDiagsCallback(this, c); - 47dc: 4620 mov r0, r4 - 47de: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 47e2: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 47e6: 2900 cmp r1, #0 - 47e8: d1f8 bne.n 47dc - diagprint(F("Ring alerts are")); diagprint(ringAlertsEnabled ? F("") : F(" NOT")); diagprint(F(" enabled.\r\n")); - 47ea: f894 3021 ldrb.w r3, [r4, #33] ; 0x21 - 47ee: 2b00 cmp r3, #0 - 47f0: f000 808c beq.w 490c - char c = pgm_read_byte(p++); - 47f4: f8df 8190 ldr.w r8, [pc, #400] ; 4988 - 47f8: 2520 movs r5, #32 - ISBDDiagsCallback(this, c); - 47fa: 4629 mov r1, r5 - 47fc: 4620 mov r0, r4 - 47fe: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4802: f818 5b01 ldrb.w r5, [r8], #1 - if (c == 0) break; - 4806: 2d00 cmp r5, #0 - 4808: d1f7 bne.n 47fa - send(ringAlertsEnabled ? F("AT+SBDMTA=1\r") : F("AT+SBDMTA=0\r")); - 480a: f894 1021 ldrb.w r1, [r4, #33] ; 0x21 - 480e: 4a5f ldr r2, [pc, #380] ; (498c ) - 4810: 4b5f ldr r3, [pc, #380] ; (4990 ) - 4812: 2900 cmp r1, #0 - 4814: bf14 ite ne - 4816: 4611 movne r1, r2 - 4818: 4619 moveq r1, r3 - 481a: 2301 movs r3, #1 - 481c: 461a mov r2, r3 - 481e: 4620 mov r0, r4 - 4820: f7ff f90c bl 3a3c - if (!waitForATResponse()) - 4824: 9700 str r7, [sp, #0] - 4826: 462b mov r3, r5 - 4828: 462a mov r2, r5 - 482a: 4629 mov r1, r5 - 482c: 4620 mov r0, r4 - 482e: f7ff f9c5 bl 3bbc - 4832: 2800 cmp r0, #0 - 4834: d05d beq.n 48f2 - send(F("AT+CGMR\r")); - 4836: 2301 movs r3, #1 - 4838: 461a mov r2, r3 - 483a: 4956 ldr r1, [pc, #344] ; (4994 ) - 483c: 4620 mov r0, r4 - 483e: f7ff f8fd bl 3a3c - if (!waitForATResponse(version, bufferSize, "Call Processor Version: ")) - 4842: 4b55 ldr r3, [pc, #340] ; (4998 ) - 4844: 9700 str r7, [sp, #0] - 4846: 2208 movs r2, #8 - 4848: a907 add r1, sp, #28 - 484a: 4620 mov r0, r4 - 484c: f7ff f9b6 bl 3bbc - 4850: 2800 cmp r0, #0 - 4852: f000 80b1 beq.w 49b8 - char c = pgm_read_byte(p++); - 4856: 4d51 ldr r5, [pc, #324] ; (499c ) - 4858: 2146 movs r1, #70 ; 0x46 - ISBDDiagsCallback(this, c); - 485a: 4620 mov r0, r4 - 485c: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4860: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 4864: 2900 cmp r1, #0 - 4866: d1f8 bne.n 485a - while (*str) - 4868: f89d 101c ldrb.w r1, [sp, #28] - 486c: ad07 add r5, sp, #28 - 486e: b131 cbz r1, 487e - ISBDDiagsCallback(this, *str++); - 4870: 4620 mov r0, r4 - 4872: f3af 8000 nop.w - while (*str) - 4876: f815 1f01 ldrb.w r1, [r5, #1]! - 487a: 2900 cmp r1, #0 - 487c: d1f8 bne.n 4870 - char c = pgm_read_byte(p++); - 487e: 4d48 ldr r5, [pc, #288] ; (49a0 ) - 4880: 210d movs r1, #13 - ISBDDiagsCallback(this, c); - 4882: 4620 mov r0, r4 - 4884: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4888: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 488c: 2900 cmp r1, #0 - 488e: d1f8 bne.n 4882 - if (version[0] == 'T' && version[1] == 'A') - 4890: f89d 301c ldrb.w r3, [sp, #28] - 4894: 2b54 cmp r3, #84 ; 0x54 - 4896: d054 beq.n 4942 - char c = pgm_read_byte(p++); - 4898: 4d42 ldr r5, [pc, #264] ; (49a4 ) - 489a: 214d movs r1, #77 ; 0x4d - ISBDDiagsCallback(this, c); - 489c: 4620 mov r0, r4 - 489e: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 48a2: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 48a6: 2900 cmp r1, #0 - 48a8: d1f8 bne.n 489c - diagprint(F("MSSTM workaround is")); diagprint(msstmWorkaroundRequested ? F("") : F(" NOT")); diagprint(F(" enforced.\r\n")); - 48aa: f894 3020 ldrb.w r3, [r4, #32] - 48ae: b943 cbnz r3, 48c2 - 48b0: 4d3d ldr r5, [pc, #244] ; (49a8 ) - 48b2: 2120 movs r1, #32 - ISBDDiagsCallback(this, c); - 48b4: 4620 mov r0, r4 - 48b6: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 48ba: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 48be: 2900 cmp r1, #0 - 48c0: d1f8 bne.n 48b4 - char c = pgm_read_byte(p++); - 48c2: 4d3a ldr r5, [pc, #232] ; (49ac ) - 48c4: 2120 movs r1, #32 - ISBDDiagsCallback(this, c); - 48c6: 4620 mov r0, r4 - 48c8: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 48cc: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 48d0: 2900 cmp r1, #0 - 48d2: d1f8 bne.n 48c6 - char c = pgm_read_byte(p++); - 48d4: 4d36 ldr r5, [pc, #216] ; (49b0 ) - 48d6: 2149 movs r1, #73 ; 0x49 - ISBDDiagsCallback(this, c); - 48d8: 4620 mov r0, r4 - 48da: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 48de: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 48e2: 2900 cmp r1, #0 - 48e4: d1f8 bne.n 48d8 - return ISBD_SUCCESS; - 48e6: 4608 mov r0, r1 -} - 48e8: b00d add sp, #52 ; 0x34 - 48ea: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 48ee: 4d1f ldr r5, [pc, #124] ; (496c ) - 48f0: e704 b.n 46fc - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 48f2: 69e0 ldr r0, [r4, #28] - 48f4: 1c42 adds r2, r0, #1 - 48f6: d003 beq.n 4900 - 48f8: b2c0 uxtb r0, r0 - 48fa: f007 fe67 bl c5cc - 48fe: b1e0 cbz r0, 493a - if (ISBDCallback != NULL) - 4900: b1ce cbz r6, 4936 - return !ISBDCallback(); - 4902: f7fd f9ad bl 1c60 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 4906: f1c0 0004 rsb r0, r0, #4 - 490a: e714 b.n 4736 - 490c: 4d26 ldr r5, [pc, #152] ; (49a8 ) - 490e: 2120 movs r1, #32 - ISBDDiagsCallback(this, c); - 4910: 4620 mov r0, r4 - 4912: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4916: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 491a: 2900 cmp r1, #0 - 491c: d1f8 bne.n 4910 - 491e: e769 b.n 47f4 - char c = pgm_read_byte(p++); - 4920: 4d24 ldr r5, [pc, #144] ; (49b4 ) - 4922: 214e movs r1, #78 ; 0x4e - ISBDDiagsCallback(this, c); - 4924: 4620 mov r0, r4 - 4926: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 492a: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 492e: 2900 cmp r1, #0 - 4930: d1f8 bne.n 4924 - return ISBD_NO_MODEM_DETECTED; - 4932: 2005 movs r0, #5 - 4934: e6ff b.n 4736 - return cancelled() ? ISBD_CANCELLED : ISBD_PROTOCOL_ERROR; - 4936: 2003 movs r0, #3 - 4938: e6fd b.n 4736 - ringAsserted = true; - 493a: 2301 movs r3, #1 - 493c: f884 3022 strb.w r3, [r4, #34] ; 0x22 - 4940: e7de b.n 4900 - if (version[0] == 'T' && version[1] == 'A') - 4942: f89d 301d ldrb.w r3, [sp, #29] - 4946: 2b41 cmp r3, #65 ; 0x41 - 4948: d1a6 bne.n 4898 - unsigned long ver = strtoul(version + 2, NULL, 10); - 494a: 220a movs r2, #10 - 494c: f10d 001e add.w r0, sp, #30 - 4950: f00c fa02 bl 10d58 - msstmWorkaroundRequested = ver < ISBD_MSSTM_WORKAROUND_FW_VER; - 4954: f243 23c8 movw r3, #13000 ; 0x32c8 - 4958: 4298 cmp r0, r3 - 495a: bf8c ite hi - 495c: 2300 movhi r3, #0 - 495e: 2301 movls r3, #1 - 4960: f884 3020 strb.w r3, [r4, #32] - 4964: e798 b.n 4898 - 4966: bf00 nop - 4968: 00017d5d .word 0x00017d5d - 496c: 1fff978c .word 0x1fff978c - 4970: 00001c61 .word 0x00001c61 - 4974: 0003a97f .word 0x0003a97f - 4978: 0001802c .word 0x0001802c - 497c: 00017de0 .word 0x00017de0 - 4980: 00018060 .word 0x00018060 - 4984: 00017f79 .word 0x00017f79 - 4988: 00017f91 .word 0x00017f91 - 498c: 00017f9c .word 0x00017f9c - 4990: 00017fac .word 0x00017fac - 4994: 00017de8 .word 0x00017de8 - 4998: 00017df4 .word 0x00017df4 - 499c: 00017fd5 .word 0x00017fd5 - 49a0: 00017ed1 .word 0x00017ed1 - 49a4: 00017fed .word 0x00017fed - 49a8: 00017f89 .word 0x00017f89 - 49ac: 00018001 .word 0x00018001 - 49b0: 00018011 .word 0x00018011 - 49b4: 00017f61 .word 0x00017f61 - if (ringPin != -1 && digitalRead(ringPin) == LOW) // Active low per guide - 49b8: 69e0 ldr r0, [r4, #28] - 49ba: 1c43 adds r3, r0, #1 - 49bc: d006 beq.n 49cc - 49be: b2c0 uxtb r0, r0 - 49c0: f007 fe04 bl c5cc - 49c4: b910 cbnz r0, 49cc - ringAsserted = true; - 49c6: 2301 movs r3, #1 - 49c8: f884 3022 strb.w r3, [r4, #34] ; 0x22 - if (ISBDCallback != NULL) - 49cc: b10e cbz r6, 49d2 - return !ISBDCallback(); - 49ce: f7fd f947 bl 1c60 - char c = pgm_read_byte(p++); - 49d2: 4d06 ldr r5, [pc, #24] ; (49ec ) - 49d4: 2155 movs r1, #85 ; 0x55 - ISBDDiagsCallback(this, c); - 49d6: 4620 mov r0, r4 - 49d8: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 49dc: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 49e0: 2900 cmp r1, #0 - 49e2: d1f8 bne.n 49d6 - msstmWorkaroundRequested = true; - 49e4: 2301 movs r3, #1 - 49e6: f884 3020 strb.w r3, [r4, #32] - 49ea: e755 b.n 4898 - 49ec: 00017fbd .word 0x00017fbd - -000049f0 : -{ - 49f0: b530 push {r4, r5, lr} - if (this->reentrant) - 49f2: 7d43 ldrb r3, [r0, #21] -{ - 49f4: b083 sub sp, #12 - if (this->reentrant) - 49f6: bb13 cbnz r3, 4a3e - this->reentrant = true; - 49f8: 2301 movs r3, #1 - char c = pgm_read_byte(p++); - 49fa: 4d13 ldr r5, [pc, #76] ; (4a48 ) - this->reentrant = true; - 49fc: 7543 strb r3, [r0, #21] - 49fe: 4604 mov r4, r0 - char c = pgm_read_byte(p++); - 4a00: 2143 movs r1, #67 ; 0x43 - ISBDDiagsCallback(this, c); - 4a02: 4620 mov r0, r4 - 4a04: f3af 8000 nop.w - char c = pgm_read_byte(p++); - 4a08: f815 1b01 ldrb.w r1, [r5], #1 - if (c == 0) break; - 4a0c: 2900 cmp r1, #0 - 4a0e: d1f8 bne.n 4a02 - if (!this->asleep) - 4a10: 7d23 ldrb r3, [r4, #20] - 4a12: b943 cbnz r3, 4a26 - this->reentrant = false; - 4a14: 7561 strb r1, [r4, #21] - return ISBD_ALREADY_AWAKE; - 4a16: 2501 movs r5, #1 - power(false); - 4a18: 4620 mov r0, r4 - 4a1a: 2100 movs r1, #0 - 4a1c: f7fe ffc6 bl 39ac -} - 4a20: 4628 mov r0, r5 - 4a22: b003 add sp, #12 - 4a24: bd30 pop {r4, r5, pc} - 4a26: 4620 mov r0, r4 - 4a28: 9101 str r1, [sp, #4] - 4a2a: f7ff fe47 bl 46bc - this->reentrant = false; - 4a2e: 9901 ldr r1, [sp, #4] - 4a30: 7561 strb r1, [r4, #21] - if (ret != ISBD_SUCCESS) - 4a32: 4605 mov r5, r0 - 4a34: 2800 cmp r0, #0 - 4a36: d1ef bne.n 4a18 -} - 4a38: 4628 mov r0, r5 - 4a3a: b003 add sp, #12 - 4a3c: bd30 pop {r4, r5, pc} - return ISBD_REENTRANT; - 4a3e: 2509 movs r5, #9 -} - 4a40: 4628 mov r0, r5 - 4a42: b003 add sp, #12 - 4a44: bd30 pop {r4, r5, pc} - 4a46: bf00 nop - 4a48: 00018031 .word 0x00018031 - -00004a4c : -class SDClass : public FS - 4a4c: 4770 bx lr - 4a4e: bf00 nop - -00004a50 : -// #define _SD_DAT3 62 // currently not doing on 3.5/6... -#endif - -#ifdef __arm__ -void SDClass::dateTime(uint16_t *date, uint16_t *time) -{ - 4a50: b530 push {r4, r5, lr} - 4a52: b083 sub sp, #12 - 4a54: 4605 mov r5, r0 - 4a56: 460c mov r4, r1 -uint32_t makeTime(const DateTimeFields &tm); // convert DateTimeFields to 32 bit time - -class teensy3_clock_class -{ -public: - static unsigned long get(void) __attribute__((always_inline)) { return rtc_get(); } - 4a58: f007 fd2e bl c4b8 - uint32_t now = Teensy3Clock.get(); - if (now < 315532800) { // before 1980 - 4a5c: 4b1c ldr r3, [pc, #112] ; (4ad0 ) - 4a5e: 4298 cmp r0, r3 - 4a60: d804 bhi.n 4a6c - *date = 0; - 4a62: 2300 movs r3, #0 - 4a64: 802b strh r3, [r5, #0] - *time = 0; - 4a66: 8023 strh r3, [r4, #0] - DateTimeFields datetime; - breakTime(now, datetime); - *date = FS_DATE(datetime.year + 1900, datetime.mon + 1, datetime.mday); - *time = FS_TIME(datetime.hour, datetime.min, datetime.sec); - } -} - 4a68: b003 add sp, #12 - 4a6a: bd30 pop {r4, r5, pc} - breakTime(now, datetime); - 4a6c: 4669 mov r1, sp - 4a6e: f006 ffc1 bl b9f4 - *date = FS_DATE(datetime.year + 1900, datetime.mon + 1, datetime.mday); - 4a72: f89d 3006 ldrb.w r3, [sp, #6] - 4a76: f89d 1005 ldrb.w r1, [sp, #5] - 4a7a: f89d 2004 ldrb.w r2, [sp, #4] - year -= 1980; - 4a7e: 3b50 subs r3, #80 ; 0x50 - 4a80: b29b uxth r3, r3 - year << 9 | month << 5 | day; - 4a82: 2b7f cmp r3, #127 ; 0x7f - 4a84: d805 bhi.n 4a92 - 4a86: 3101 adds r1, #1 - 4a88: b2c9 uxtb r1, r1 - return year > 127 || month > 12 || day > 31 ? 0 : - 4a8a: 290c cmp r1, #12 - 4a8c: d801 bhi.n 4a92 - 4a8e: 2a1f cmp r2, #31 - 4a90: d911 bls.n 4ab6 - year << 9 | month << 5 | day; - 4a92: 2300 movs r3, #0 - *time = FS_TIME(datetime.hour, datetime.min, datetime.sec); - 4a94: f89d 2002 ldrb.w r2, [sp, #2] - *date = FS_DATE(datetime.year + 1900, datetime.mon + 1, datetime.mday); - 4a98: 802b strh r3, [r5, #0] - hour << 11 | minute << 5 | second >> 1; - 4a9a: 2a17 cmp r2, #23 - *time = FS_TIME(datetime.hour, datetime.min, datetime.sec); - 4a9c: f89d 3001 ldrb.w r3, [sp, #1] - 4aa0: f89d 1000 ldrb.w r1, [sp] - 4aa4: d803 bhi.n 4aae - return hour > 23 || minute > 59 || second > 59 ? 0 : - 4aa6: 2b3b cmp r3, #59 ; 0x3b - 4aa8: d801 bhi.n 4aae - 4aaa: 293b cmp r1, #59 ; 0x3b - 4aac: d909 bls.n 4ac2 - hour << 11 | minute << 5 | second >> 1; - 4aae: 2300 movs r3, #0 - 4ab0: 8023 strh r3, [r4, #0] -} - 4ab2: b003 add sp, #12 - 4ab4: bd30 pop {r4, r5, pc} - year << 9 | month << 5 | day; - 4ab6: ea42 1241 orr.w r2, r2, r1, lsl #5 - 4aba: ea42 2343 orr.w r3, r2, r3, lsl #9 - 4abe: b29b uxth r3, r3 - 4ac0: e7e8 b.n 4a94 - hour << 11 | minute << 5 | second >> 1; - 4ac2: 015b lsls r3, r3, #5 - 4ac4: ea43 23c2 orr.w r3, r3, r2, lsl #11 - 4ac8: ea43 0351 orr.w r3, r3, r1, lsr #1 - 4acc: b29b uxth r3, r3 - 4ace: e7ef b.n 4ab0 - 4ad0: 12cea5ff .word 0x12cea5ff - -00004ad4 : - File open(const char *filepath, uint8_t mode = FILE_READ) { - 4ad4: b5f0 push {r4, r5, r6, r7, lr} - if (mode == FILE_WRITE) flags = O_RDWR | O_CREAT | O_AT_END; - 4ad6: 2b01 cmp r3, #1 - File open(const char *filepath, uint8_t mode = FILE_READ) { - 4ad8: b095 sub sp, #84 ; 0x54 - 4ada: 4605 mov r5, r0 - if (mode == FILE_WRITE) flags = O_RDWR | O_CREAT | O_AT_END; - 4adc: d038 beq.n 4b50 - else if (mode == FILE_WRITE_BEGIN) flags = O_RDWR | O_CREAT; - 4ade: 2b02 cmp r3, #2 - 4ae0: f240 2002 movw r0, #514 ; 0x202 - 4ae4: bf0c ite eq - 4ae6: 4603 moveq r3, r0 - 4ae8: 2300 movne r3, #0 - SDFAT_FILE file = sdfs.open(filepath, flags); - 4aea: 3104 adds r1, #4 - 4aec: 4668 mov r0, sp - 4aee: f004 fe1f bl 9730 - bool isOpen() const {return m_fFile || m_xFile;} - 4af2: 9b12 ldr r3, [sp, #72] ; 0x48 - 4af4: 2b00 cmp r3, #0 - 4af6: d034 beq.n 4b62 - if (file) return File(new SDFile(file)); - 4af8: 205c movs r0, #92 ; 0x5c - 4afa: f007 faed bl c0d8 - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 4afe: 4b1f ldr r3, [pc, #124] ; (4b7c ) -class FileImpl { - 4b00: 2600 movs r6, #0 - 4b02: e9c0 3600 strd r3, r6, [r0] -class Print - 4b06: 9b01 ldr r3, [sp, #4] - 4b08: 60c3 str r3, [r0, #12] - 4b0a: 4b1d ldr r3, [pc, #116] ; (4b80 ) - 4b0c: 6083 str r3, [r0, #8] - 4b0e: 9b02 ldr r3, [sp, #8] - 4b10: 6103 str r3, [r0, #16] - 4b12: af04 add r7, sp, #16 - 4b14: f89d 300c ldrb.w r3, [sp, #12] - 4b18: 7503 strb r3, [r0, #20] - if (file) return File(new SDFile(file)); - 4b1a: 4604 mov r4, r0 - 4b1c: 4639 mov r1, r7 - 4b1e: 3018 adds r0, #24 - 4b20: f004 fcbc bl 949c -class FsFile : public StreamFile { - 4b24: 4b17 ldr r3, [pc, #92] ; (4b84 ) - 4b26: 60a3 str r3, [r4, #8] - constexpr Stream() : _timeout(1000), read_error(0) {} - 4b28: f44f 737a mov.w r3, #1000 ; 0x3e8 - 4b2c: 60ab str r3, [r5, #8] - if (f) f->refcount++; - 4b2e: 6863 ldr r3, [r4, #4] - File(FileImpl *file) { - 4b30: 4a15 ldr r2, [pc, #84] ; (4b88 ) - SDFile(const SDFAT_FILE &file) : sdfatfile(file), filename(nullptr) { } - 4b32: 65a6 str r6, [r4, #88] ; 0x58 - if (f) f->refcount++; - 4b34: 3301 adds r3, #1 - constexpr Print() : write_error(0) {} - 4b36: 606e str r6, [r5, #4] - File(FileImpl *file) { - 4b38: 602a str r2, [r5, #0] - 4b3a: 732e strb r6, [r5, #12] - f = file; - 4b3c: 612c str r4, [r5, #16] - if (f) f->refcount++; - 4b3e: 6063 str r3, [r4, #4] - 4b40: 4b12 ldr r3, [pc, #72] ; (4b8c ) - 4b42: 9300 str r3, [sp, #0] - ~FsBaseFile() {close();} - 4b44: 4638 mov r0, r7 - 4b46: f004 fcd7 bl 94f8 - return File(); - } - 4b4a: 4628 mov r0, r5 - 4b4c: b015 add sp, #84 ; 0x54 - 4b4e: bdf0 pop {r4, r5, r6, r7, pc} - if (mode == FILE_WRITE) flags = O_RDWR | O_CREAT | O_AT_END; - 4b50: f244 2302 movw r3, #16898 ; 0x4202 - SDFAT_FILE file = sdfs.open(filepath, flags); - 4b54: 3104 adds r1, #4 - 4b56: 4668 mov r0, sp - 4b58: f004 fdea bl 9730 - bool isOpen() const {return m_fFile || m_xFile;} - 4b5c: 9b12 ldr r3, [sp, #72] ; 0x48 - 4b5e: 2b00 cmp r3, #0 - 4b60: d1ca bne.n 4af8 - 4b62: 9b13 ldr r3, [sp, #76] ; 0x4c - 4b64: 2b00 cmp r3, #0 - 4b66: d1c7 bne.n 4af8 - constexpr File() : f(nullptr) { } - 4b68: 4a07 ldr r2, [pc, #28] ; (4b88 ) - 4b6a: 606b str r3, [r5, #4] - 4b6c: f44f 717a mov.w r1, #1000 ; 0x3e8 - 4b70: 60a9 str r1, [r5, #8] - 4b72: 732b strb r3, [r5, #12] - 4b74: 602a str r2, [r5, #0] - 4b76: 612b str r3, [r5, #16] - 4b78: af04 add r7, sp, #16 - 4b7a: e7e1 b.n 4b40 - 4b7c: 00017b64 .word 0x00017b64 - 4b80: 00017acc .word 0x00017acc - 4b84: 00017b14 .word 0x00017b14 - 4b88: 00017b38 .word 0x00017b38 - 4b8c: 00017af0 .word 0x00017af0 - -00004b90 : - return sdfs.rename(oldfilepath, newfilepath); - } - bool remove(const char *filepath) { - return sdfs.remove(filepath); - } - bool rmdir(const char *filepath) { - 4b90: b510 push {r4, lr} - * The subdirectory file will be removed only if it is empty. - * - * \return true for success or false for failure. - */ - bool rmdir(const char *path) { - return m_fVol ? m_fVol->rmdir(path) : - 4b92: f8d0 4484 ldr.w r4, [r0, #1156] ; 0x484 - 4b96: b08e sub sp, #56 ; 0x38 - 4b98: 460a mov r2, r1 - 4b9a: b144 cbz r4, 4bae - FatFile() {} - 4b9c: 2300 movs r3, #0 - * - * \return true for success or false for failure. - */ - bool rmdir(const char* path) { - FatFile sub; - return sub.open(this, path, O_RDONLY) && sub.rmdir(); - 4b9e: 4621 mov r1, r4 - 4ba0: 4668 mov r0, sp - 4ba2: 9300 str r3, [sp, #0] - 4ba4: f002 fcd4 bl 7550 - 4ba8: b980 cbnz r0, 4bcc - return sdfs.rmdir(filepath); - } - 4baa: b00e add sp, #56 ; 0x38 - 4bac: bd10 pop {r4, pc} - 4bae: f8d0 1488 ldr.w r1, [r0, #1160] ; 0x488 - m_xVol ? m_xVol->rmdir(path) : false; - 4bb2: b141 cbz r1, 4bc6 - * - * \return true for success or false for failure. - */ - bool rmdir(const char* path) { - ExFatFile sub; - return sub.open(this, path, O_RDONLY) && sub.rmdir(); - 4bb4: 4623 mov r3, r4 - 4bb6: 4668 mov r0, sp - ExFatFile() {} - 4bb8: 940c str r4, [sp, #48] ; 0x30 - 4bba: f000 fe8f bl 58dc - 4bbe: b950 cbnz r0, 4bd6 - 4bc0: 2000 movs r0, #0 - 4bc2: b00e add sp, #56 ; 0x38 - 4bc4: bd10 pop {r4, pc} - 4bc6: 4608 mov r0, r1 - 4bc8: b00e add sp, #56 ; 0x38 - 4bca: bd10 pop {r4, pc} - 4bcc: 4668 mov r0, sp - 4bce: f002 fed1 bl 7974 - 4bd2: b00e add sp, #56 ; 0x38 - 4bd4: bd10 pop {r4, pc} - 4bd6: 4668 mov r0, sp - 4bd8: f000 ff3e bl 5a58 - 4bdc: 2800 cmp r0, #0 - 4bde: d0ef beq.n 4bc0 - 4be0: e7e3 b.n 4baa - 4be2: bf00 nop - -00004be4 : - bool rename(const char *oldfilepath, const char *newfilepath) { - 4be4: b570 push {r4, r5, r6, lr} - return m_fVol ? m_fVol->rename(oldPath, newPath) : - 4be6: f8d0 5484 ldr.w r5, [r0, #1156] ; 0x484 - 4bea: b08e sub sp, #56 ; 0x38 - 4bec: 4616 mov r6, r2 - 4bee: b15d cbz r5, 4c08 -#endif // ENABLE_ARDUINO_STRING - - private: - friend FatFile; - static FatVolume* cwv() {return m_cwv;} - FatFile* vwd() {return &m_vwd;} - 4bf0: f505 6589 add.w r5, r5, #1096 ; 0x448 - 4bf4: 2300 movs r3, #0 - return file.open(vwd(), oldPath, O_RDONLY) && file.rename(vwd(), newPath); - 4bf6: 460a mov r2, r1 - 4bf8: 4668 mov r0, sp - 4bfa: 4629 mov r1, r5 - 4bfc: 9300 str r3, [sp, #0] - 4bfe: f002 fc29 bl 7454 - 4c02: b990 cbnz r0, 4c2a - } - 4c04: b00e add sp, #56 ; 0x38 - 4c06: bd70 pop {r4, r5, r6, pc} - 4c08: f8d0 0488 ldr.w r0, [r0, #1160] ; 0x488 - m_xVol ? m_xVol->rename(oldPath, newPath) : false; - 4c0c: 2800 cmp r0, #0 - 4c0e: d0f9 beq.n 4c04 -#endif // ENABLE_ARDUINO_STRING - - private: - friend ExFatFile; - static ExFatVolume* cwv() {return m_cwv;} - ExFatFile* vwd() {return &m_vwd;} - 4c10: f500 6489 add.w r4, r0, #1096 ; 0x448 - return file.open(vwd(), oldPath, O_RDONLY) && file.rename(vwd(), newPath); - 4c14: 460a mov r2, r1 - 4c16: 462b mov r3, r5 - 4c18: 4621 mov r1, r4 - 4c1a: 4668 mov r0, sp - 4c1c: 950c str r5, [sp, #48] ; 0x30 - 4c1e: f000 fdf5 bl 580c - 4c22: b948 cbnz r0, 4c38 - 4c24: 2000 movs r0, #0 - 4c26: b00e add sp, #56 ; 0x38 - 4c28: bd70 pop {r4, r5, r6, pc} - 4c2a: 4632 mov r2, r6 - 4c2c: 4629 mov r1, r5 - 4c2e: 4668 mov r0, sp - 4c30: f002 fde4 bl 77fc - 4c34: b00e add sp, #56 ; 0x38 - 4c36: bd70 pop {r4, r5, r6, pc} - 4c38: 4632 mov r2, r6 - 4c3a: 4621 mov r1, r4 - 4c3c: 4668 mov r0, sp - 4c3e: f001 f85d bl 5cfc - 4c42: 2800 cmp r0, #0 - 4c44: d0ee beq.n 4c24 - 4c46: e7dd b.n 4c04 - -00004c48 : - bool remove(const char *filepath) { - 4c48: b510 push {r4, lr} - return m_fVol ? m_fVol->remove(path) : - 4c4a: f8d0 4484 ldr.w r4, [r0, #1156] ; 0x484 - 4c4e: b08e sub sp, #56 ; 0x38 - 4c50: 460a mov r2, r1 - 4c52: b14c cbz r4, 4c68 - 4c54: 2000 movs r0, #0 - 4c56: 9000 str r0, [sp, #0] - return tmp.open(this, path, O_WRONLY) && tmp.remove(); - 4c58: 2301 movs r3, #1 - 4c5a: 4621 mov r1, r4 - 4c5c: 4668 mov r0, sp - 4c5e: f002 fc77 bl 7550 - 4c62: b980 cbnz r0, 4c86 - } - 4c64: b00e add sp, #56 ; 0x38 - 4c66: bd10 pop {r4, pc} - 4c68: f8d0 1488 ldr.w r1, [r0, #1160] ; 0x488 - m_xVol ? m_xVol->remove(path) : false; - 4c6c: b141 cbz r1, 4c80 - return tmp.open(this, path, O_WRONLY) && tmp.remove(); - 4c6e: 2301 movs r3, #1 - 4c70: 4668 mov r0, sp - 4c72: 940c str r4, [sp, #48] ; 0x30 - 4c74: f000 fe32 bl 58dc - 4c78: b950 cbnz r0, 4c90 - 4c7a: 2000 movs r0, #0 - 4c7c: b00e add sp, #56 ; 0x38 - 4c7e: bd10 pop {r4, pc} - 4c80: 4608 mov r0, r1 - 4c82: b00e add sp, #56 ; 0x38 - 4c84: bd10 pop {r4, pc} - 4c86: 4668 mov r0, sp - 4c88: f003 fd0a bl 86a0 - 4c8c: b00e add sp, #56 ; 0x38 - 4c8e: bd10 pop {r4, pc} - 4c90: 4668 mov r0, sp - 4c92: f000 fe87 bl 59a4 - 4c96: 2800 cmp r0, #0 - 4c98: d0ef beq.n 4c7a - 4c9a: e7e3 b.n 4c64 - -00004c9c : - bool mkdir(const char *filepath) { - 4c9c: b530 push {r4, r5, lr} - return m_fVol ? m_fVol->mkdir(path, pFlag) : - 4c9e: f8d0 4484 ldr.w r4, [r0, #1156] ; 0x484 - 4ca2: b08f sub sp, #60 ; 0x3c - 4ca4: 460a mov r2, r1 - 4ca6: b14c cbz r4, 4cbc - 4ca8: 2500 movs r5, #0 - return sub.mkdir(vwd(), path, pFlag); - 4caa: 2301 movs r3, #1 - 4cac: f504 6189 add.w r1, r4, #1096 ; 0x448 - 4cb0: 4668 mov r0, sp - 4cb2: 9500 str r5, [sp, #0] - 4cb4: f002 fb5a bl 736c - } - 4cb8: b00f add sp, #60 ; 0x3c - 4cba: bd30 pop {r4, r5, pc} - 4cbc: f8d0 0488 ldr.w r0, [r0, #1160] ; 0x488 - m_xVol ? m_xVol->mkdir(path, pFlag) : false; - 4cc0: 2800 cmp r0, #0 - 4cc2: d0f9 beq.n 4cb8 - return sub.mkdir(vwd(), path, pFlag); - 4cc4: f500 6189 add.w r1, r0, #1096 ; 0x448 - 4cc8: 2301 movs r3, #1 - 4cca: 4668 mov r0, sp - 4ccc: 940c str r4, [sp, #48] ; 0x30 - 4cce: f001 f883 bl 5dd8 - 4cd2: b00f add sp, #60 ; 0x3c - 4cd4: bd30 pop {r4, r5, pc} - 4cd6: bf00 nop - -00004cd8 : - bool exists(const char *filepath) { - 4cd8: b510 push {r4, lr} - return m_fVol ? m_fVol->exists(path) : - 4cda: f8d0 4484 ldr.w r4, [r0, #1156] ; 0x484 - 4cde: b08e sub sp, #56 ; 0x38 - 4ce0: 460a mov r2, r1 - 4ce2: b13c cbz r4, 4cf4 - 4ce4: 2300 movs r3, #0 - return tmp.open(this, path, O_RDONLY); - 4ce6: 4621 mov r1, r4 - 4ce8: 4668 mov r0, sp - 4cea: 9300 str r3, [sp, #0] - 4cec: f002 fc30 bl 7550 - } - 4cf0: b00e add sp, #56 ; 0x38 - 4cf2: bd10 pop {r4, pc} - 4cf4: f8d0 1488 ldr.w r1, [r0, #1160] ; 0x488 - m_xVol ? m_xVol->exists(path) : false; - 4cf8: b131 cbz r1, 4d08 - return tmp.open(this, path, O_RDONLY); - 4cfa: 4623 mov r3, r4 - 4cfc: 4668 mov r0, sp - 4cfe: 940c str r4, [sp, #48] ; 0x30 - 4d00: f000 fdec bl 58dc - 4d04: b00e add sp, #56 ; 0x38 - 4d06: bd10 pop {r4, pc} - 4d08: 4608 mov r0, r1 - 4d0a: b00e add sp, #56 ; 0x38 - 4d0c: bd10 pop {r4, pc} - 4d0e: bf00 nop - -00004d10 : - uint64_t usedSize() { - 4d10: b570 push {r4, r5, r6, lr} - 4d12: 4605 mov r5, r0 - if (!cardPreviouslyPresent) return (uint64_t)0; - 4d14: f890 04c0 ldrb.w r0, [r0, #1216] ; 0x4c0 - 4d18: b908 cbnz r0, 4d1e - } - return rtn; - } - //---------------------------------------------------------------------------- - /** \return true if can be in dedicated SPI state */ - bool hasDedicatedSpi() {return m_card ? m_card->hasDedicatedSpi() : false;} - 4d1a: 4601 mov r1, r0 - return (uint64_t)(sdfs.clusterCount() - sdfs.freeClusterCount()) - * (uint64_t)sdfs.bytesPerCluster(); - } - 4d1c: bd70 pop {r4, r5, r6, pc} - return m_fVol ? m_fVol->clusterCount() : - 4d1e: f8d5 0484 ldr.w r0, [r5, #1156] ; 0x484 - 4d22: 2800 cmp r0, #0 - 4d24: d038 beq.n 4d98 - uint8_t* cacheClear() { - return m_cache.clear(); - } - /** \return The total number of clusters in the volume. */ - uint32_t clusterCount() const { - return m_lastCluster - 1; - 4d26: 69c4 ldr r4, [r0, #28] - 4d28: f8d5 3490 ldr.w r3, [r5, #1168] ; 0x490 - 4d2c: 3c01 subs r4, #1 - 4d2e: b31b cbz r3, 4d78 - } - errorPrint(pr); - } - //---------------------------------------------------------------------------- - /** \return true if in dedicated SPI state. */ - bool isDedicatedSpi() {return m_card ? m_card->isDedicatedSpi() : false;} - 4d30: 7e1a ldrb r2, [r3, #24] - 4d32: bb0a cbnz r2, 4d78 - * \param[in] value desired state. - * \return true for success else false; - */ - bool setDedicatedSpi(bool value) { - if (m_card) { - return m_card->setDedicatedSpi(value); - 4d34: 2101 movs r1, #1 - 4d36: 4618 mov r0, r3 - 4d38: f005 fb16 bl a368 - if (switchSpi && !setDedicatedSpi(true)) { - 4d3c: b188 cbz r0, 4d62 - return m_fVol ? m_fVol->freeClusterCount() : - 4d3e: f8d5 0484 ldr.w r0, [r5, #1156] ; 0x484 - 4d42: 2800 cmp r0, #0 - 4d44: d13e bne.n 4dc4 - 4d46: f8d5 0488 ldr.w r0, [r5, #1160] ; 0x488 - m_xVol ? m_xVol->freeClusterCount() : 0; - 4d4a: b108 cbz r0, 4d50 - 4d4c: f002 f8d4 bl 6ef8 - 4d50: 4606 mov r6, r0 - if (m_card) { - 4d52: f8d5 0490 ldr.w r0, [r5, #1168] ; 0x490 - 4d56: b120 cbz r0, 4d62 - return m_card->setDedicatedSpi(value); - 4d58: 2100 movs r1, #0 - 4d5a: f005 fb05 bl a368 - if (switchSpi && !setDedicatedSpi(false)) { - 4d5e: b100 cbz r0, 4d62 - return (uint64_t)(sdfs.clusterCount() - sdfs.freeClusterCount()) - 4d60: 1ba4 subs r4, r4, r6 - return m_fVol ? m_fVol->bytesPerCluster() : - 4d62: f8d5 3484 ldr.w r3, [r5, #1156] ; 0x484 - 4d66: b173 cbz r3, 4d86 - return m_bytesPerSector << m_sectorsPerClusterShift; - 4d68: 799b ldrb r3, [r3, #6] - 4d6a: f44f 7100 mov.w r1, #512 ; 0x200 - 4d6e: 4099 lsls r1, r3 - * (uint64_t)sdfs.bytesPerCluster(); - 4d70: b289 uxth r1, r1 - 4d72: fba1 0104 umull r0, r1, r1, r4 - } - 4d76: bd70 pop {r4, r5, r6, pc} - return m_fVol ? m_fVol->freeClusterCount() : - 4d78: f004 fa42 bl 9200 - return m_fVol ? m_fVol->bytesPerCluster() : - 4d7c: f8d5 3484 ldr.w r3, [r5, #1156] ; 0x484 - return (uint64_t)(sdfs.clusterCount() - sdfs.freeClusterCount()) - 4d80: 1a24 subs r4, r4, r0 - 4d82: 2b00 cmp r3, #0 - 4d84: d1f0 bne.n 4d68 - 4d86: f8d5 0488 ldr.w r0, [r5, #1160] ; 0x488 - m_xVol ? m_xVol->bytesPerCluster() : 0; - 4d8a: 2800 cmp r0, #0 - 4d8c: d0c5 beq.n 4d1a - * (uint64_t)sdfs.bytesPerCluster(); - 4d8e: f8d0 143c ldr.w r1, [r0, #1084] ; 0x43c - 4d92: fba4 0101 umull r0, r1, r4, r1 - } - 4d96: bd70 pop {r4, r5, r6, pc} - 4d98: f8d5 0488 ldr.w r0, [r5, #1160] ; 0x488 - bool hasDedicatedSpi() {return m_card ? m_card->hasDedicatedSpi() : false;} - 4d9c: f8d5 3490 ldr.w r3, [r5, #1168] ; 0x490 - m_xVol ? m_xVol->clusterCount() : 0; - 4da0: b150 cbz r0, 4db8 - */ - uint8_t* cacheClear() { - return m_dataCache.clear(); - } - /** \return the cluster count for the partition. */ - uint32_t clusterCount() const {return m_clusterCount;} - 4da2: f8d0 4430 ldr.w r4, [r0, #1072] ; 0x430 - 4da6: b123 cbz r3, 4db2 - bool isDedicatedSpi() {return m_card ? m_card->isDedicatedSpi() : false;} - 4da8: 7e1a ldrb r2, [r3, #24] - 4daa: 2a00 cmp r2, #0 - 4dac: d0c2 beq.n 4d34 - m_xVol ? m_xVol->freeClusterCount() : 0; - 4dae: 2800 cmp r0, #0 - 4db0: d0b3 beq.n 4d1a - 4db2: f002 f8a1 bl 6ef8 - 4db6: e7e1 b.n 4d7c - bool hasDedicatedSpi() {return m_card ? m_card->hasDedicatedSpi() : false;} - 4db8: b10b cbz r3, 4dbe - m_xVol ? m_xVol->clusterCount() : 0; - 4dba: 4604 mov r4, r0 - 4dbc: e7f4 b.n 4da8 - 4dbe: 4618 mov r0, r3 - 4dc0: 4601 mov r1, r0 - 4dc2: e7ab b.n 4d1c - return m_fVol ? m_fVol->freeClusterCount() : - 4dc4: f004 fa1c bl 9200 - 4dc8: 4606 mov r6, r0 - 4dca: e7c2 b.n 4d52 - -00004dcc : -#endif - -bool SDClass::format(int type, char progressChar, Print& pr) -{ - 4dcc: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - SdCard* card() {return m_card;} - 4dd0: f8d0 5490 ldr.w r5, [r0, #1168] ; 0x490 - 4dd4: b08d sub sp, #52 ; 0x34 - SdCard *card = sdfs.card(); - if (!card) return false; // no SD card - 4dd6: b14d cbz r5, 4dec - 4dd8: 4698 mov r8, r3 - uint32_t sectors = card->sectorCount(); - 4dda: 682b ldr r3, [r5, #0] - 4ddc: 4604 mov r4, r0 - 4dde: 69db ldr r3, [r3, #28] - 4de0: 4628 mov r0, r5 - 4de2: 4798 blx r3 - if (sectors <= 12288) return false; // card too small - 4de4: f5b0 5f40 cmp.w r0, #12288 ; 0x3000 - uint32_t sectors = card->sectorCount(); - 4de8: 4606 mov r6, r0 - if (sectors <= 12288) return false; // card too small - 4dea: d804 bhi.n 4df6 - if (!card) return false; // no SD card - 4dec: 2600 movs r6, #0 - // TODO: Is begin() really necessary? Is a quicker way possible? - card->syncDevice(); - sdfs.restart(); // TODO: is sdfs.volumeBegin() enough?? - } - return ret; -} - 4dee: 4630 mov r0, r6 - 4df0: b00d add sp, #52 ; 0x34 - 4df2: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - uint8_t *buf = (uint8_t *)malloc(512); - 4df6: f44f 7000 mov.w r0, #512 ; 0x200 - 4dfa: f00b f959 bl 100b0 - if (!buf) return false; // unable to allocate memory - 4dfe: 4607 mov r7, r0 - 4e00: 2800 cmp r0, #0 - 4e02: d0f3 beq.n 4dec - ret = exFatFormatter.format(card, buf, &pr); - 4e04: f10d 0904 add.w r9, sp, #4 - if (sectors > 67108864) { - 4e08: f1b6 6f80 cmp.w r6, #67108864 ; 0x4000000 - ret = exFatFormatter.format(card, buf, &pr); - 4e0c: 4602 mov r2, r0 - 4e0e: 4643 mov r3, r8 - 4e10: 4629 mov r1, r5 - 4e12: 4648 mov r0, r9 - if (sectors > 67108864) { - 4e14: d916 bls.n 4e44 - ret = exFatFormatter.format(card, buf, &pr); - 4e16: f001 fb53 bl 64c0 - 4e1a: 4606 mov r6, r0 - free(buf); - 4e1c: 4638 mov r0, r7 - 4e1e: f00b f94f bl 100c0 - if (ret) { - 4e22: 2e00 cmp r6, #0 - 4e24: d0e2 beq.n 4dec - card->syncDevice(); - 4e26: 682b ldr r3, [r5, #0] - 4e28: 4628 mov r0, r5 - 4e2a: 6a1b ldr r3, [r3, #32] - 4e2c: 4798 blx r3 - if (spiConfigBackupPin == 255) { - 4e2e: f894 34b0 ldrb.w r3, [r4, #1200] ; 0x4b0 - 4e32: 2bff cmp r3, #255 ; 0xff - 4e34: d10a bne.n 4e4c - m_card = m_cardFactory.newCard(sdioConfig); - 4e36: 2300 movs r3, #0 -} - 4e38: 4630 mov r0, r6 - 4e3a: f8c4 3490 str.w r3, [r4, #1168] ; 0x490 - 4e3e: b00d add sp, #52 ; 0x34 - 4e40: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - ret = fatFormatter.format(card, buf, &pr); - 4e44: f003 ff40 bl 8cc8 - 4e48: 4606 mov r6, r0 - 4e4a: e7e7 b.n 4e1c - SdSpiConfig spiConfig(spiConfigBackupPin, spiConfigBackupOptions, - 4e4c: f8d4 34b4 ldr.w r3, [r4, #1204] ; 0x4b4 - 4e50: f8b4 24b0 ldrh.w r2, [r4, #1200] ; 0x4b0 - 4e54: 9302 str r3, [sp, #8] - 4e56: f8d4 34b8 ldr.w r3, [r4, #1208] ; 0x4b8 - bool cardBegin(SdSpiConfig spiConfig) { - 4e5a: f8ad 2004 strh.w r2, [sp, #4] - 4e5e: 9303 str r3, [sp, #12] - * - * \param[in] config SPI configuration. - * \return generic card pointer. - */ - SdCard* newCard(SdSpiConfig config) { - m_spiCard.begin(config); - 4e60: f204 4594 addw r5, r4, #1172 ; 0x494 - 4e64: e899 000e ldmia.w r9, {r1, r2, r3} - 4e68: 4628 mov r0, r5 - 4e6a: f005 fa69 bl a340 - return m_card && !m_card->errorCode(); - 4e6e: f894 34a1 ldrb.w r3, [r4, #1185] ; 0x4a1 - m_card = m_cardFactory.newCard(spiConfig); - 4e72: f8c4 5490 str.w r5, [r4, #1168] ; 0x490 - return m_card && !m_card->errorCode(); - 4e76: 2b00 cmp r3, #0 - 4e78: d1b9 bne.n 4dee - return cardBegin(spiConfig) && Vol::begin(m_card); - 4e7a: 2301 movs r3, #1 - 4e7c: 461a mov r2, r3 - 4e7e: 4629 mov r1, r5 - 4e80: 1d20 adds r0, r4, #4 - 4e82: f004 fbe1 bl 9648 - 4e86: e7b2 b.n 4dee - -00004e88 : - uint64_t totalSize() { - if (!cardPreviouslyPresent) return (uint64_t)0; - 4e88: f890 34c0 ldrb.w r3, [r0, #1216] ; 0x4c0 - 4e8c: b163 cbz r3, 4ea8 - return m_fVol ? m_fVol->clusterCount() : - 4e8e: f8d0 3484 ldr.w r3, [r0, #1156] ; 0x484 - 4e92: b163 cbz r3, 4eae - 4e94: 799a ldrb r2, [r3, #6] - return m_lastCluster - 1; - 4e96: 69d9 ldr r1, [r3, #28] - return m_bytesPerSector << m_sectorsPerClusterShift; - 4e98: f44f 7000 mov.w r0, #512 ; 0x200 - 4e9c: 4090 lsls r0, r2 - return (uint64_t)sdfs.clusterCount() * (uint64_t)sdfs.bytesPerCluster(); - 4e9e: b280 uxth r0, r0 - return m_lastCluster - 1; - 4ea0: 3901 subs r1, #1 - 4ea2: fba0 0101 umull r0, r1, r0, r1 - 4ea6: 4770 bx lr - if (!cardPreviouslyPresent) return (uint64_t)0; - 4ea8: 4618 mov r0, r3 - 4eaa: 4601 mov r1, r0 - } - 4eac: 4770 bx lr - 4eae: f8d0 0488 ldr.w r0, [r0, #1160] ; 0x488 - m_xVol ? m_xVol->clusterCount() : 0; - 4eb2: 2800 cmp r0, #0 - 4eb4: d0f9 beq.n 4eaa - return (uint64_t)sdfs.clusterCount() * (uint64_t)sdfs.bytesPerCluster(); - 4eb6: f8d0 143c ldr.w r1, [r0, #1084] ; 0x43c - 4eba: f8d0 0430 ldr.w r0, [r0, #1072] ; 0x430 - 4ebe: fba1 0100 umull r0, r1, r1, r0 - 4ec2: 4770 bx lr - -00004ec4 : - } - return false; -} - -bool SDClass::mediaPresent() -{ - 4ec4: b570 push {r4, r5, r6, lr} - SdCard* card() {return m_card;} - 4ec6: f8d0 3490 ldr.w r3, [r0, #1168] ; 0x490 - 4eca: b084 sub sp, #16 - 4ecc: 4604 mov r4, r0 - //Serial.print("mediaPresent: "); - bool ret; - SdCard *card = sdfs.card(); -// Serial.printf("mediaPresent: card:%x cs:%u cd:%u\n", (uint32_t)card, csPin_, cdPin_); - if (card) { - 4ece: b1ab cbz r3, 4efc - if (cardPreviouslyPresent) { - 4ed0: f890 54c0 ldrb.w r5, [r0, #1216] ; 0x4c0 - #else - const uint32_t s = 0xFFFFFFFF; - #endif - if (s == 0xFFFFFFFF) { - // see if we have digital pin to bypass... - if (cdPin_ < NUM_DIGITAL_PINS) ret = digitalRead(cdPin_); - 4ed4: f890 04c2 ldrb.w r0, [r0, #1218] ; 0x4c2 - if (cardPreviouslyPresent) { - 4ed8: b15d cbz r5, 4ef2 - if (cdPin_ < NUM_DIGITAL_PINS) ret = digitalRead(cdPin_); - 4eda: 2821 cmp r0, #33 ; 0x21 - 4edc: d820 bhi.n 4f20 - 4ede: f007 fb75 bl c5cc - 4ee2: 1e05 subs r5, r0, #0 - 4ee4: bf18 it ne - 4ee6: 2501 movne r5, #1 - ret = false; - } - //Serial.println(); - cardPreviouslyPresent = ret; - return ret; -} - 4ee8: 4628 mov r0, r5 - cardPreviouslyPresent = ret; - 4eea: f884 54c0 strb.w r5, [r4, #1216] ; 0x4c0 -} - 4eee: b004 add sp, #16 - 4ef0: bd70 pop {r4, r5, r6, pc} - if (cdPin_ < NUM_DIGITAL_PINS) ret = digitalRead(cdPin_); - 4ef2: 2821 cmp r0, #33 ; 0x21 - 4ef4: d808 bhi.n 4f08 - 4ef6: f007 fb69 bl c5cc - if (ret) - 4efa: b928 cbnz r0, 4f08 - ret = false; - 4efc: 2500 movs r5, #0 -} - 4efe: 4628 mov r0, r5 - cardPreviouslyPresent = ret; - 4f00: f884 54c0 strb.w r5, [r4, #1216] ; 0x4c0 -} - 4f04: b004 add sp, #16 - 4f06: bd70 pop {r4, r5, r6, pc} - if (spiConfigBackupPin == 255) { - 4f08: f894 34b0 ldrb.w r3, [r4, #1200] ; 0x4b0 - 4f0c: 2bff cmp r3, #255 ; 0xff - 4f0e: d112 bne.n 4f36 - m_card = m_cardFactory.newCard(sdioConfig); - 4f10: 2300 movs r3, #0 - 4f12: 4628 mov r0, r5 - 4f14: f8c4 3490 str.w r3, [r4, #1168] ; 0x490 - cardPreviouslyPresent = ret; - 4f18: f884 54c0 strb.w r5, [r4, #1216] ; 0x4c0 -} - 4f1c: b004 add sp, #16 - 4f1e: bd70 pop {r4, r5, r6, pc} - * \param[out] cid pointer to area for returned data. - * - * \return true for success or false for failure. - */ - bool readCID(cid_t* cid) { - return readRegister(CMD10, cid); - 4f20: 466a mov r2, sp - 4f22: 210a movs r1, #10 - 4f24: 4618 mov r0, r3 - 4f26: f004 fead bl 9c84 - 4f2a: 4605 mov r5, r0 - 4f2c: 4628 mov r0, r5 - cardPreviouslyPresent = ret; - 4f2e: f884 54c0 strb.w r5, [r4, #1216] ; 0x4c0 -} - 4f32: b004 add sp, #16 - 4f34: bd70 pop {r4, r5, r6, pc} - SdSpiConfig spiConfig(spiConfigBackupPin, spiConfigBackupOptions, - 4f36: f8d4 24b4 ldr.w r2, [r4, #1204] ; 0x4b4 - 4f3a: f8d4 34b8 ldr.w r3, [r4, #1208] ; 0x4b8 - bool cardBegin(SdSpiConfig spiConfig) { - 4f3e: f8b4 14b0 ldrh.w r1, [r4, #1200] ; 0x4b0 - 4f42: 9302 str r3, [sp, #8] - 4f44: f8ad 1000 strh.w r1, [sp] - 4f48: 9201 str r2, [sp, #4] - 4f4a: f204 4694 addw r6, r4, #1172 ; 0x494 - 4f4e: 466b mov r3, sp - 4f50: cb0e ldmia r3, {r1, r2, r3} - 4f52: 4630 mov r0, r6 - 4f54: f005 f9f4 bl a340 - return m_card && !m_card->errorCode(); - 4f58: f894 34a1 ldrb.w r3, [r4, #1185] ; 0x4a1 - m_card = m_cardFactory.newCard(spiConfig); - 4f5c: f8c4 6490 str.w r6, [r4, #1168] ; 0x490 - return m_card && !m_card->errorCode(); - 4f60: 2b00 cmp r3, #0 - 4f62: d1cc bne.n 4efe - return cardBegin(spiConfig) && Vol::begin(m_card); - 4f64: 2301 movs r3, #1 - 4f66: 461a mov r2, r3 - 4f68: 4631 mov r1, r6 - 4f6a: 1d20 adds r0, r4, #4 - 4f6c: f004 fb6c bl 9648 - 4f70: 4605 mov r5, r0 - 4f72: e7c4 b.n 4efe - -00004f74 : -bool SDClass::begin(uint8_t csPin) { - 4f74: b5f0 push {r4, r5, r6, r7, lr} - 4f76: 460d mov r5, r1 - 4f78: 4604 mov r4, r0 - 4f7a: b085 sub sp, #20 - FsDateTime::setCallback(dateTime); - 4f7c: 4819 ldr r0, [pc, #100] ; (4fe4 ) - 4f7e: f005 fb31 bl a5e4 - if (csPin < NUM_DIGITAL_PINS) { - 4f82: 2d21 cmp r5, #33 ; 0x21 - csPin_ = csPin; // remember which one passed in. - 4f84: f884 54c1 strb.w r5, [r4, #1217] ; 0x4c1 - if (csPin < NUM_DIGITAL_PINS) { - 4f88: d902 bls.n 4f90 - return false; - 4f8a: 2000 movs r0, #0 -} - 4f8c: b005 add sp, #20 - 4f8e: bdf0 pop {r4, r5, r6, r7, pc} - spiConfigBackupOptions = spiConfig.options; - 4f90: 2600 movs r6, #0 - spiConfigBackupClock = spiConfig.maxSck; - 4f92: 4b15 ldr r3, [pc, #84] ; (4fe8 ) - 4f94: 9302 str r3, [sp, #8] - 4f96: f88d 5004 strb.w r5, [sp, #4] - 4f9a: f88d 6005 strb.w r6, [sp, #5] - 4f9e: 9603 str r6, [sp, #12] - 4fa0: f204 4794 addw r7, r4, #1172 ; 0x494 - 4fa4: f8c4 34b4 str.w r3, [r4, #1204] ; 0x4b4 - 4fa8: ab04 add r3, sp, #16 - 4faa: e913 000e ldmdb r3, {r1, r2, r3} - spiConfigBackupPin = spiConfig.csPin; - 4fae: f884 54b0 strb.w r5, [r4, #1200] ; 0x4b0 - spiConfigBackupOptions = spiConfig.options; - 4fb2: f884 64b1 strb.w r6, [r4, #1201] ; 0x4b1 - spiConfigBackupPort = spiConfig.spiPort; - 4fb6: f8c4 64b8 str.w r6, [r4, #1208] ; 0x4b8 - 4fba: 4638 mov r0, r7 - 4fbc: f005 f9c0 bl a340 - return m_card && !m_card->errorCode(); - 4fc0: f894 34a1 ldrb.w r3, [r4, #1185] ; 0x4a1 - m_card = m_cardFactory.newCard(spiConfig); - 4fc4: f8c4 7490 str.w r7, [r4, #1168] ; 0x490 - return m_card && !m_card->errorCode(); - 4fc8: b123 cbz r3, 4fd4 - return cardBegin(spiConfig) && Vol::begin(m_card); - 4fca: 4630 mov r0, r6 - cardPreviouslyPresent = ret; - 4fcc: f884 04c0 strb.w r0, [r4, #1216] ; 0x4c0 -} - 4fd0: b005 add sp, #20 - 4fd2: bdf0 pop {r4, r5, r6, r7, pc} - 4fd4: 2301 movs r3, #1 - 4fd6: 461a mov r2, r3 - 4fd8: 4639 mov r1, r7 - 4fda: 1d20 adds r0, r4, #4 - 4fdc: f004 fb34 bl 9648 - 4fe0: e7f4 b.n 4fcc - 4fe2: bf00 nop - 4fe4: 00004a51 .word 0x00004a51 - 4fe8: 017d7840 .word 0x017d7840 - -00004fec <_GLOBAL__sub_I_SD>: - } else { - cdPin_ = 0xff; - return false; - } - return true; -} - 4fec: b510 push {r4, lr} - SDClass() { } - 4fee: 4814 ldr r0, [pc, #80] ; (5040 <_GLOBAL__sub_I_SD+0x54>) - 4ff0: 4c14 ldr r4, [pc, #80] ; (5044 <_GLOBAL__sub_I_SD+0x58>) - } - if (dataMode & 0x04) { - c |= SPI_CTAR_CPHA; - t = (t & 0xFFFF0FFF) | ((t & 0xF000) >> 4); - } - ctar = c | t; - 4ff2: 4915 ldr r1, [pc, #84] ; (5048 <_GLOBAL__sub_I_SD+0x5c>) - * \brief Raw access to SD and SDHC flash memory cards via dedicate SPI port. - */ -class DedicatedSpiCard : public SharedSpiCard { - public: - /** Construct an instance of DedicatedSpiCard. */ - DedicatedSpiCard() {} - 4ff4: 4a15 ldr r2, [pc, #84] ; (504c <_GLOBAL__sub_I_SD+0x60>) - 4ff6: 6004 str r4, [r0, #0] - SharedSpiCard() {} - 4ff8: f04f 0c29 mov.w ip, #41 ; 0x29 - FsVolume() {} - 4ffc: 2300 movs r3, #0 - 4ffe: f880 c4a1 strb.w ip, [r0, #1185] ; 0x4a1 - 5002: f44f 4e7f mov.w lr, #65280 ; 0xff00 - 5006: f04f 0cff mov.w ip, #255 ; 0xff - 500a: f880 34a5 strb.w r3, [r0, #1189] ; 0x4a5 - * \class SdioConfig - * \brief SDIO card configuration. - */ -class SdioConfig { - public: - SdioConfig() {} - 500e: f880 34bc strb.w r3, [r0, #1212] ; 0x4bc - 5012: f8a0 e4c0 strh.w lr, [r0, #1216] ; 0x4c0 - 5016: f880 c4c2 strb.w ip, [r0, #1218] ; 0x4c2 - 501a: f8c0 149c str.w r1, [r0, #1180] ; 0x49c - DedicatedSpiCard() {} - 501e: f8c0 2494 str.w r2, [r0, #1172] ; 0x494 - 5022: e8bd 4010 ldmia.w sp!, {r4, lr} -SDClass SD; - 5026: 4a0a ldr r2, [pc, #40] ; (5050 <_GLOBAL__sub_I_SD+0x64>) - 5028: 490a ldr r1, [pc, #40] ; (5054 <_GLOBAL__sub_I_SD+0x68>) - 502a: f8c0 3484 str.w r3, [r0, #1156] ; 0x484 - 502e: f8c0 3488 str.w r3, [r0, #1160] ; 0x488 -class SdBase : public Vol { - 5032: f8c0 3490 str.w r3, [r0, #1168] ; 0x490 - 5036: f880 34ac strb.w r3, [r0, #1196] ; 0x4ac - 503a: f00a b819 b.w f070 <__aeabi_atexit> - 503e: bf00 nop - 5040: 1fff92a0 .word 0x1fff92a0 - 5044: 00018080 .word 0x00018080 - 5048: 38011001 .word 0x38011001 - 504c: 00018174 .word 0x00018174 - 5050: 1fff8720 .word 0x1fff8720 - 5054: 00004a4d .word 0x00004a4d - -00005058 : -#else // USE_UTF8_LONG_NAMES - return !(lfnReservedChar(c) || c & 0X80); -#endif // USE_UTF8_LONG_NAMES -} -//------------------------------------------------------------------------------ -uint8_t* ExFatFile::dirCache(uint8_t set, uint8_t options) { - 5058: b570 push {r4, r5, r6, lr} - DirPos_t pos = m_dirPos; - 505a: f100 0324 add.w r3, r0, #36 ; 0x24 -uint8_t* ExFatFile::dirCache(uint8_t set, uint8_t options) { - 505e: 468c mov ip, r1 - 5060: 4605 mov r5, r0 - 5062: 4616 mov r6, r2 - DirPos_t pos = m_dirPos; - 5064: e893 0007 ldmia.w r3, {r0, r1, r2} -uint8_t* ExFatFile::dirCache(uint8_t set, uint8_t options) { - 5068: b084 sub sp, #16 - DirPos_t pos = m_dirPos; - 506a: ac01 add r4, sp, #4 - 506c: e884 0007 stmia.w r4, {r0, r1, r2} - if (m_vol->dirSeek(&pos, FS_DIR_SIZE*set) != 1) { - 5070: 6a28 ldr r0, [r5, #32] - 5072: ea4f 124c mov.w r2, ip, lsl #5 - 5076: 4621 mov r1, r4 - 5078: f001 fe5e bl 6d38 - 507c: 2801 cmp r0, #1 - 507e: d106 bne.n 508e - return nullptr; - } - return m_vol->dirCache(&pos, options); - 5080: 6a28 ldr r0, [r5, #32] - 5082: 4632 mov r2, r6 - 5084: 4621 mov r1, r4 - 5086: f001 fe3b bl 6d00 -} - 508a: b004 add sp, #16 - 508c: bd70 pop {r4, r5, r6, pc} - return nullptr; - 508e: 2000 movs r0, #0 -} - 5090: b004 add sp, #16 - 5092: bd70 pop {r4, r5, r6, pc} - -00005094 : -//------------------------------------------------------------------------------ -bool ExFatFile::close() { - 5094: b510 push {r4, lr} - 5096: 4604 mov r4, r0 - bool rtn = sync(); - 5098: f000 fda8 bl 5bec - m_attributes = FILE_ATTR_CLOSED; - 509c: 2300 movs r3, #0 - 509e: f884 3031 strb.w r3, [r4, #49] ; 0x31 - m_flags = 0; - 50a2: f884 3033 strb.w r3, [r4, #51] ; 0x33 - return rtn; -} - 50a6: bd10 pop {r4, pc} - -000050a8 : - - fail: - return false; -} -//------------------------------------------------------------------------------ -bool ExFatFile::getCreateDateTime(uint16_t* pdate, uint16_t* ptime) { - 50a8: b538 push {r3, r4, r5, lr} - 50aa: 4613 mov r3, r2 - 50ac: 460d mov r5, r1 - DirFile_t* df = reinterpret_cast - (m_vol->dirCache(&m_dirPos, FsCache::CACHE_FOR_READ)); - 50ae: 2200 movs r2, #0 - 50b0: f100 0124 add.w r1, r0, #36 ; 0x24 - 50b4: 6a00 ldr r0, [r0, #32] -bool ExFatFile::getCreateDateTime(uint16_t* pdate, uint16_t* ptime) { - 50b6: 461c mov r4, r3 - (m_vol->dirCache(&m_dirPos, FsCache::CACHE_FOR_READ)); - 50b8: f001 fe22 bl 6d00 - if (!df) { - 50bc: b120 cbz r0, 50c8 -void lbaToMbrChs(uint8_t* chs, uint32_t capacityMB, uint32_t lba); -//----------------------------------------------------------------------------- -#if !defined(USE_SIMPLE_LITTLE_ENDIAN) || USE_SIMPLE_LITTLE_ENDIAN -// assumes CPU is little-endian and handles alignment issues. -inline uint16_t getLe16(const uint8_t* src) { - return *reinterpret_cast(src); - 50be: 8943 ldrh r3, [r0, #10] - DBG_FAIL_MACRO; - goto fail; - } - *pdate = getLe16(df->createDate); - 50c0: 802b strh r3, [r5, #0] - 50c2: 8903 ldrh r3, [r0, #8] - *ptime = getLe16(df->createTime); - 50c4: 8023 strh r3, [r4, #0] - return true; - 50c6: 2001 movs r0, #1 - - fail: - return false; -} - 50c8: bd38 pop {r3, r4, r5, pc} - 50ca: bf00 nop - -000050cc : -//------------------------------------------------------------------------------ -bool ExFatFile::getModifyDateTime(uint16_t* pdate, uint16_t* ptime) { - 50cc: b538 push {r3, r4, r5, lr} - 50ce: 4613 mov r3, r2 - 50d0: 460d mov r5, r1 - DirFile_t* df = reinterpret_cast - (m_vol->dirCache(&m_dirPos, FsCache::CACHE_FOR_READ)); - 50d2: 2200 movs r2, #0 - 50d4: f100 0124 add.w r1, r0, #36 ; 0x24 - 50d8: 6a00 ldr r0, [r0, #32] -bool ExFatFile::getModifyDateTime(uint16_t* pdate, uint16_t* ptime) { - 50da: 461c mov r4, r3 - (m_vol->dirCache(&m_dirPos, FsCache::CACHE_FOR_READ)); - 50dc: f001 fe10 bl 6d00 - if (!df) { - 50e0: b120 cbz r0, 50ec - 50e2: 89c3 ldrh r3, [r0, #14] - DBG_FAIL_MACRO; - goto fail; - } - *pdate = getLe16(df->modifyDate); - 50e4: 802b strh r3, [r5, #0] - 50e6: 8983 ldrh r3, [r0, #12] - *ptime = getLe16(df->modifyTime); - 50e8: 8023 strh r3, [r4, #0] - return true; - 50ea: 2001 movs r0, #1 - - fail: - return false; -} - 50ec: bd38 pop {r3, r4, r5, pc} - 50ee: bf00 nop - -000050f0 : - m_attributes = FILE_ATTR_CLOSED; - m_flags = 0; - return false; -} -//------------------------------------------------------------------------------ -bool ExFatFile::openRoot(ExFatVolume* vol) { - 50f0: b538 push {r3, r4, r5, lr} - if (isOpen()) { - 50f2: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 50f6: b10b cbz r3, 50fc - m_vol = vol; - m_flags = FILE_FLAG_READ; - return true; - - fail: - return false; - 50f8: 2000 movs r0, #0 -} - 50fa: bd38 pop {r3, r4, r5, pc} - 50fc: 4604 mov r4, r0 - 50fe: 460d mov r5, r1 - memset(this, 0, sizeof(ExFatFile)); - 5100: 2238 movs r2, #56 ; 0x38 - 5102: 4619 mov r1, r3 - 5104: f00c f836 bl 11174 - m_flags = FILE_FLAG_READ; - 5108: 2001 movs r0, #1 - m_attributes = FILE_ATTR_ROOT; - 510a: 2340 movs r3, #64 ; 0x40 - 510c: f884 3031 strb.w r3, [r4, #49] ; 0x31 - m_flags = FILE_FLAG_READ; - 5110: f884 0033 strb.w r0, [r4, #51] ; 0x33 - m_vol = vol; - 5114: 6225 str r5, [r4, #32] -} - 5116: bd38 pop {r3, r4, r5, pc} - -00005118 : -//------------------------------------------------------------------------------ -bool ExFatFile::parsePathName(const char* path, - ExName_t* fname, const char** ptr) { - 5118: b470 push {r4, r5, r6} - // Skip leading spaces. - while (*path == ' ') { - 511a: 780c ldrb r4, [r1, #0] - 511c: 2c20 cmp r4, #32 - ExName_t* fname, const char** ptr) { - 511e: 460d mov r5, r1 - 5120: 4611 mov r1, r2 - while (*path == ' ') { - 5122: d103 bne.n 512c - 5124: f815 4f01 ldrb.w r4, [r5, #1]! - 5128: 2c20 cmp r4, #32 - 512a: d0fb beq.n 5124 - path++; - } - fname->begin = path; - 512c: 600d str r5, [r1, #0] - fname->end = path; - 512e: 608d str r5, [r1, #8] - while (*path && !isDirSeparator(*path)) { - 5130: 782c ldrb r4, [r5, #0] - 5132: b33c cbz r4, 5184 - 5134: 4e21 ldr r6, [pc, #132] ; (51bc ) - 5136: e00c b.n 5152 - 5138: f1a4 0c22 sub.w ip, r4, #34 ; 0x22 - 513c: fa5f fc8c uxtb.w ip, ip - 5140: fa26 fc0c lsr.w ip, r6, ip - 5144: f01c 0f01 tst.w ip, #1 - 5148: d110 bne.n 516c - uint8_t c = *path++; - if (!lfnLegalChar(c)) { - DBG_FAIL_MACRO; - goto fail; - } - if (c != '.' && c != ' ') { - 514a: 2c2e cmp r4, #46 ; 0x2e - 514c: d116 bne.n 517c - while (*path && !isDirSeparator(*path)) { - 514e: 782c ldrb r4, [r5, #0] - 5150: b1c4 cbz r4, 5184 - 5152: 2c2f cmp r4, #47 ; 0x2f - 5154: d024 beq.n 51a0 - uint8_t c = *path++; - 5156: 2c3c cmp r4, #60 ; 0x3c - 5158: f105 0501 add.w r5, r5, #1 - if (!lfnLegalChar(c)) { - 515c: d809 bhi.n 5172 - 515e: 2c21 cmp r4, #33 ; 0x21 - 5160: d8ea bhi.n 5138 - 5162: f104 3cff add.w ip, r4, #4294967295 ; 0xffffffff - 5166: f1bc 0f1e cmp.w ip, #30 - 516a: d815 bhi.n 5198 - *ptr = path; - return hashName(fname); - - fail: - return false; -} - 516c: 2000 movs r0, #0 - 516e: bc70 pop {r4, r5, r6} - 5170: 4770 bx lr - 5172: 2c5c cmp r4, #92 ; 0x5c - 5174: d0fa beq.n 516c - 5176: d909 bls.n 518c - 5178: 2c7c cmp r4, #124 ; 0x7c - 517a: d0f7 beq.n 516c - fname->end = path; - 517c: 608d str r5, [r1, #8] - while (*path && !isDirSeparator(*path)) { - 517e: 782c ldrb r4, [r5, #0] - 5180: 2c00 cmp r4, #0 - 5182: d1e6 bne.n 5152 - *ptr = path; - 5184: 601d str r5, [r3, #0] -} - 5186: bc70 pop {r4, r5, r6} - return hashName(fname); - 5188: f001 bca4 b.w 6ad4 - 518c: 3c3e subs r4, #62 ; 0x3e - 518e: 2c01 cmp r4, #1 - 5190: d8f4 bhi.n 517c -} - 5192: 2000 movs r0, #0 - 5194: bc70 pop {r4, r5, r6} - 5196: 4770 bx lr - if (c != '.' && c != ' ') { - 5198: 2c20 cmp r4, #32 - 519a: d0d8 beq.n 514e - fname->end = path; - 519c: 608d str r5, [r1, #8] - 519e: e7ee b.n 517e - 51a0: 462c mov r4, r5 - 51a2: 4625 mov r5, r4 - for (; *path == ' ' || isDirSeparator(*path); path++) {} - 51a4: f814 cb01 ldrb.w ip, [r4], #1 - 51a8: f1bc 0f20 cmp.w ip, #32 - 51ac: d0f9 beq.n 51a2 - 51ae: f1bc 0f2f cmp.w ip, #47 ; 0x2f - 51b2: d0f6 beq.n 51a2 - *ptr = path; - 51b4: 601d str r5, [r3, #0] -} - 51b6: bc70 pop {r4, r5, r6} - return hashName(fname); - 51b8: f001 bc8c b.w 6ad4 - 51bc: 05002101 .word 0x05002101 - -000051c0 : - m_curPosition = curPosition; - m_curCluster = curCluster; - return c; -} -//------------------------------------------------------------------------------ -int ExFatFile::read(void* buf, size_t count) { - 51c0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - bool isReadable() const {return m_flags & FILE_FLAG_READ;} - 51c4: f890 3033 ldrb.w r3, [r0, #51] ; 0x33 - uint8_t* cache; - uint16_t sectorOffset; - uint32_t sector; - uint32_t clusterOffset; - - if (!isReadable()) { - 51c8: 07dc lsls r4, r3, #31 -int ExFatFile::read(void* buf, size_t count) { - 51ca: b082 sub sp, #8 - 51cc: 4605 mov r5, r0 - if (!isReadable()) { - 51ce: d56d bpl.n 52ac - DBG_FAIL_MACRO; - goto fail; - } - if (isContiguous() || isFile()) { - 51d0: 0658 lsls r0, r3, #25 - 51d2: 460f mov r7, r1 - 51d4: 4690 mov r8, r2 - 51d6: f140 80b5 bpl.w 5344 - if ((m_curPosition + count) > m_validLength) { - 51da: e9d5 2300 ldrd r2, r3, [r5] - 51de: e9d5 1004 ldrd r1, r0, [r5, #16] - 51e2: eb18 0402 adds.w r4, r8, r2 - 51e6: f143 0300 adc.w r3, r3, #0 - 51ea: 42a1 cmp r1, r4 - 51ec: eb70 0303 sbcs.w r3, r0, r3 - 51f0: f0c0 80ae bcc.w 5350 - count = toRead = m_validLength - m_curPosition; - } - } - while (toRead) { - 51f4: f1b8 0f00 cmp.w r8, #0 - 51f8: d054 beq.n 52a4 - if ((m_curPosition + count) > m_validLength) { - 51fa: e9d5 3200 ldrd r3, r2, [r5] - 51fe: 4646 mov r6, r8 - clusterOffset = m_curPosition & m_vol->clusterMask(); - 5200: f8d5 9020 ldr.w r9, [r5, #32] - 5204: f8d9 4438 ldr.w r4, [r9, #1080] ; 0x438 - 5208: 401c ands r4, r3 - sectorOffset = clusterOffset & m_vol->sectorMask(); - 520a: f3c4 0a08 ubfx sl, r4, #0, #9 - if (clusterOffset == 0) { - 520e: 2c00 cmp r4, #0 - 5210: d157 bne.n 52c2 - if (m_curPosition == 0) { - 5212: 4313 orrs r3, r2 - 5214: d177 bne.n 5306 - m_curCluster = isRoot() - ? m_vol->rootDirectoryCluster() : m_firstCluster; - 5216: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 - 521a: 065a lsls r2, r3, #25 - * - * \return true if busy else false. - */ - bool isBusy() {return m_blockDev->isBusy();} - /** \return the root directory start cluster number. */ - uint32_t rootDirectoryCluster() const {return m_rootDirectoryCluster;} - 521c: bf4c ite mi - 521e: f8d9 1434 ldrmi.w r1, [r9, #1076] ; 0x434 - 5222: 69e9 ldrpl r1, [r5, #28] - } else if (isContiguous()) { - m_curCluster++; - 5224: 61a9 str r1, [r5, #24] - bool dataCacheSync() {return m_dataCache.sync();} - //---------------------------------------------------------------------------- - uint32_t clusterMask() const {return m_clusterMask;} - uint32_t clusterStartSector(uint32_t cluster) { - return m_clusterHeapStartSector + - ((cluster - 2) << m_sectorsPerClusterShift); - 5226: f899 3445 ldrb.w r3, [r9, #1093] ; 0x445 - DBG_FAIL_MACRO; - goto fail; - } - } - } - sector = m_vol->clusterStartSector(m_curCluster) + - 522a: f8d9 242c ldr.w r2, [r9, #1068] ; 0x42c - 522e: 3902 subs r1, #2 - 5230: 4099 lsls r1, r3 - 5232: 4411 add r1, r2 - (clusterOffset >> m_vol->bytesPerSectorShift()); - if (sectorOffset != 0 || toRead < m_vol->bytesPerSector() - 5234: f5b6 7f00 cmp.w r6, #512 ; 0x200 - 5238: d350 bcc.n 52dc - * \return Address of cached sector. - */ - uint8_t* prepare(uint32_t sector, uint8_t option); - /** \return Logical sector number for cached sector. */ - uint32_t sector() { - return m_sector; - 523a: f8d9 221c ldr.w r2, [r9, #540] ; 0x21c - || sector == m_vol->dataCacheSector()) { - 523e: 428a cmp r2, r1 - 5240: d04c beq.n 52dc - goto fail; - } - uint8_t* src = cache + sectorOffset; - memcpy(dst, src, n); -#if USE_MULTI_SECTOR_IO - } else if (toRead >= 2*m_vol->bytesPerSector()) { - 5242: f5b6 6f80 cmp.w r6, #1024 ; 0x400 - 5246: d365 bcc.n 5314 - uint32_t sectorsPerCluster() const {return 1UL << m_sectorsPerClusterShift;} - 5248: f04f 0a01 mov.w sl, #1 - 524c: fa0a fa03 lsl.w sl, sl, r3 - uint32_t ns = toRead >> m_vol->bytesPerSectorShift(); - // Limit reads to current cluster. - uint32_t maxNs = m_vol->sectorsPerCluster() - - (clusterOffset >> m_vol->bytesPerSectorShift()); - 5250: ebaa 0a04 sub.w sl, sl, r4 - uint32_t ns = toRead >> m_vol->bytesPerSectorShift(); - 5254: 0a73 lsrs r3, r6, #9 - 5256: 459a cmp sl, r3 - 5258: bf28 it cs - 525a: 469a movcs sl, r3 - return sector <= m_sector && m_sector < (sector + count); - 525c: 428a cmp r2, r1 - if (ns > maxNs) { - ns = maxNs; - } - n = ns << m_vol->bytesPerSectorShift(); - 525e: ea4f 244a mov.w r4, sl, lsl #9 - 5262: d30a bcc.n 527a - 5264: eb0a 0301 add.w r3, sl, r1 - 5268: 429a cmp r2, r3 - 526a: d206 bcs.n 527a - if (isCached(sector, count) && !sync()) { - 526c: f509 7004 add.w r0, r9, #528 ; 0x210 - 5270: 9101 str r1, [sp, #4] - 5272: f005 f95d bl a530 - 5276: 9901 ldr r1, [sp, #4] - 5278: b1c0 cbz r0, 52ac - return m_blockDev->readSectors(sector, dst, count); - 527a: f8d9 0214 ldr.w r0, [r9, #532] ; 0x214 - 527e: f8d0 c000 ldr.w ip, [r0] - 5282: 4653 mov r3, sl - 5284: f8dc 9014 ldr.w r9, [ip, #20] - 5288: 463a mov r2, r7 - 528a: 47c8 blx r9 - if (!m_vol->cacheSafeRead(sector, dst, ns)) { - 528c: b170 cbz r0, 52ac - DBG_FAIL_MACRO; - goto fail; - } - } - dst += n; - m_curPosition += n; - 528e: 4623 mov r3, r4 - 5290: e9d5 1200 ldrd r1, r2, [r5] - 5294: 185b adds r3, r3, r1 - 5296: f142 0200 adc.w r2, r2, #0 - while (toRead) { - 529a: 1b36 subs r6, r6, r4 - m_curPosition += n; - 529c: e9c5 3200 strd r3, r2, [r5] - dst += n; - 52a0: 4427 add r7, r4 - while (toRead) { - 52a2: d1ad bne.n 5200 - toRead -= n; - } - return count - toRead; - 52a4: 4640 mov r0, r8 - - fail: - m_error |= READ_ERROR; - return -1; -} - 52a6: b002 add sp, #8 - 52a8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - m_error |= READ_ERROR; - 52ac: f895 3032 ldrb.w r3, [r5, #50] ; 0x32 - return -1; - 52b0: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - m_error |= READ_ERROR; - 52b4: f043 0302 orr.w r3, r3, #2 - 52b8: f885 3032 strb.w r3, [r5, #50] ; 0x32 -} - 52bc: b002 add sp, #8 - 52be: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - ((cluster - 2) << m_sectorsPerClusterShift); - 52c2: 69aa ldr r2, [r5, #24] - 52c4: f899 3445 ldrb.w r3, [r9, #1093] ; 0x445 - sector = m_vol->clusterStartSector(m_curCluster) + - 52c8: f8d9 042c ldr.w r0, [r9, #1068] ; 0x42c - 52cc: 1e91 subs r1, r2, #2 - 52ce: 4099 lsls r1, r3 - (clusterOffset >> m_vol->bytesPerSectorShift()); - 52d0: 0a64 lsrs r4, r4, #9 - sector = m_vol->clusterStartSector(m_curCluster) + - 52d2: 4401 add r1, r0 - 52d4: 4421 add r1, r4 - || sector == m_vol->dataCacheSector()) { - 52d6: f1ba 0f00 cmp.w sl, #0 - 52da: d0ab beq.n 5234 - n = m_vol->bytesPerSector() - sectorOffset; - 52dc: f5ca 7400 rsb r4, sl, #512 ; 0x200 - 52e0: 42b4 cmp r4, r6 - return m_dataCache.prepare(sector, option); - 52e2: f04f 0200 mov.w r2, #0 - 52e6: f509 7004 add.w r0, r9, #528 ; 0x210 - 52ea: bf28 it cs - 52ec: 4634 movcs r4, r6 - 52ee: f005 f947 bl a580 - if (!cache) { - 52f2: 2800 cmp r0, #0 - 52f4: d0da beq.n 52ac - memcpy(dst, src, n); - 52f6: eb00 010a add.w r1, r0, sl - 52fa: 4622 mov r2, r4 - 52fc: 4638 mov r0, r7 - 52fe: f006 fd9b bl be38 - m_curPosition += n; - 5302: 4623 mov r3, r4 - 5304: e7c4 b.n 5290 - } else if (isContiguous()) { - 5306: f895 3033 ldrb.w r3, [r5, #51] ; 0x33 - m_curCluster++; - 530a: 69a9 ldr r1, [r5, #24] - } else if (isContiguous()) { - 530c: 065b lsls r3, r3, #25 - 530e: d50d bpl.n 532c - m_curCluster++; - 5310: 3101 adds r1, #1 - 5312: e787 b.n 5224 - return m_blockDev->readSector(sector, dst); - 5314: f8d9 0214 ldr.w r0, [r9, #532] ; 0x214 - 5318: 6803 ldr r3, [r0, #0] - 531a: 463a mov r2, r7 - 531c: 691b ldr r3, [r3, #16] - 531e: 4798 blx r3 - if (!m_vol->cacheSafeRead(sector, dst)) { - 5320: 2800 cmp r0, #0 - 5322: d0c3 beq.n 52ac - 5324: f44f 7300 mov.w r3, #512 ; 0x200 - n = m_vol->bytesPerSector(); - 5328: 461c mov r4, r3 - 532a: e7b1 b.n 5290 - fg = m_vol->fatGet(m_curCluster, &m_curCluster); - 532c: f105 0218 add.w r2, r5, #24 - 5330: 4648 mov r0, r9 - 5332: f001 fd43 bl 6dbc - if (fg < 0) { - 5336: 2800 cmp r0, #0 - 5338: dbb8 blt.n 52ac - if (fg == 0) { - 533a: d00c beq.n 5356 - sector = m_vol->clusterStartSector(m_curCluster) + - 533c: 69a9 ldr r1, [r5, #24] - 533e: f8d5 9020 ldr.w r9, [r5, #32] - 5342: e770 b.n 5226 - if (isContiguous() || isFile()) { - 5344: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 - 5348: 0719 lsls r1, r3, #28 - 534a: f57f af53 bpl.w 51f4 - 534e: e744 b.n 51da - count = toRead = m_validLength - m_curPosition; - 5350: eba1 0802 sub.w r8, r1, r2 - 5354: e74e b.n 51f4 - if (isDir()) { - 5356: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 - 535a: f013 0f50 tst.w r3, #80 ; 0x50 - 535e: d0a5 beq.n 52ac - return count - toRead; - 5360: eba8 0806 sub.w r8, r8, r6 - 5364: 4640 mov r0, r8 - 5366: e79e b.n 52a6 - -00005368 : -int ExFatFile::peek() { - 5368: b5f0 push {r4, r5, r6, r7, lr} - 536a: b083 sub sp, #12 - return read(&b, 1) == 1 ? b : -1; - 536c: 2201 movs r2, #1 - 536e: f10d 0107 add.w r1, sp, #7 - 5372: 4604 mov r4, r0 - uint64_t curPosition = m_curPosition; - 5374: e9d0 6700 ldrd r6, r7, [r0] - uint32_t curCluster = m_curCluster; - 5378: 6985 ldr r5, [r0, #24] - 537a: f7ff ff21 bl 51c0 - 537e: 2801 cmp r0, #1 - 5380: bf08 it eq - 5382: f89d 0007 ldrbeq.w r0, [sp, #7] - m_curCluster = curCluster; - 5386: 61a5 str r5, [r4, #24] - 5388: bf18 it ne - 538a: f04f 30ff movne.w r0, #4294967295 ; 0xffffffff - m_curPosition = curPosition; - 538e: e9c4 6700 strd r6, r7, [r4] -} - 5392: b003 add sp, #12 - 5394: bdf0 pop {r4, r5, r6, r7, pc} - 5396: bf00 nop - -00005398 : - - fail: - return false; -} -//------------------------------------------------------------------------------ -bool ExFatFile::seekSet(uint64_t pos) { - 5398: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - bool isOpen() const {return m_attributes;} - 539c: f890 1031 ldrb.w r1, [r0, #49] ; 0x31 - uint32_t nCur; - uint32_t nNew; - uint32_t tmp = m_curCluster; - 53a0: f8d0 8018 ldr.w r8, [r0, #24] -bool ExFatFile::seekSet(uint64_t pos) { - 53a4: 4604 mov r4, r0 - // error if file not open - if (!isOpen()) { - 53a6: 2900 cmp r1, #0 - 53a8: d050 beq.n 544c - 53aa: 4616 mov r6, r2 - DBG_FAIL_MACRO; - goto fail; - } - // Optimize O_APPEND writes. - if (pos == m_curPosition) { - 53ac: e9d0 2c00 ldrd r2, ip, [r0] - 53b0: 459c cmp ip, r3 - 53b2: bf08 it eq - 53b4: 42b2 cmpeq r2, r6 - 53b6: 461f mov r7, r3 - 53b8: d058 beq.n 546c - return true; - } - if (pos == 0) { - 53ba: ea56 0307 orrs.w r3, r6, r7 - 53be: d04a beq.n 5456 - // set position to start of file - m_curCluster = 0; - goto done; - } - if (isFile()) { - 53c0: 0708 lsls r0, r1, #28 - 53c2: d504 bpl.n 53ce - if (pos > m_validLength) { - 53c4: e9d4 0304 ldrd r0, r3, [r4, #16] - 53c8: 42b0 cmp r0, r6 - 53ca: 41bb sbcs r3, r7 - 53cc: d33e bcc.n 544c - DBG_FAIL_MACRO; - goto fail; - } - } - // calculate cluster index for new position - nNew = (pos - 1) >> m_vol->bytesPerClusterShift(); - 53ce: f8d4 9020 ldr.w r9, [r4, #32] - return m_bytesPerSectorShift + m_sectorsPerClusterShift; - 53d2: f899 3445 ldrb.w r3, [r9, #1093] ; 0x445 - 53d6: 3309 adds r3, #9 - 53d8: 1e75 subs r5, r6, #1 - 53da: b2db uxtb r3, r3 - 53dc: f147 3aff adc.w sl, r7, #4294967295 ; 0xffffffff - 53e0: f1c3 0020 rsb r0, r3, #32 - 53e4: fa0a fb00 lsl.w fp, sl, r0 - 53e8: 40dd lsrs r5, r3 - 53ea: f1a3 0e20 sub.w lr, r3, #32 - 53ee: fa2a fa0e lsr.w sl, sl, lr - 53f2: ea45 050b orr.w r5, r5, fp - 53f6: ea45 050a orr.w r5, r5, sl - if (isContiguous()) { - 53fa: f894 a033 ldrb.w sl, [r4, #51] ; 0x33 - 53fe: f01a 0f40 tst.w sl, #64 ; 0x40 - 5402: d12f bne.n 5464 - m_curCluster = m_firstCluster + nNew; - goto done; - } - // calculate cluster index for current position - nCur = (m_curPosition - 1) >> m_vol->bytesPerClusterShift(); - 5404: f112 3aff adds.w sl, r2, #4294967295 ; 0xffffffff - 5408: fa2a f303 lsr.w r3, sl, r3 - 540c: f14c 3aff adc.w sl, ip, #4294967295 ; 0xffffffff - 5410: fa0a f000 lsl.w r0, sl, r0 - 5414: 4303 orrs r3, r0 - 5416: fa2a fa0e lsr.w sl, sl, lr - 541a: ea43 030a orr.w r3, r3, sl - if (nNew < nCur || m_curPosition == 0) { - 541e: 429d cmp r5, r3 - 5420: d302 bcc.n 5428 - 5422: ea52 0c0c orrs.w ip, r2, ip - 5426: d124 bne.n 5472 - // must follow chain from first cluster - m_curCluster = isRoot() ? m_vol->rootDirectoryCluster() : m_firstCluster; - 5428: 064b lsls r3, r1, #25 - uint32_t rootDirectoryCluster() const {return m_rootDirectoryCluster;} - 542a: bf4c ite mi - 542c: f8d9 3434 ldrmi.w r3, [r9, #1076] ; 0x434 - 5430: 69e3 ldrpl r3, [r4, #28] - 5432: 61a3 str r3, [r4, #24] - } else { - // advance from curPosition - nNew -= nCur; - } - while (nNew--) { - if (m_vol->fatGet(m_curCluster, &m_curCluster) <= 0) { - 5434: f104 0918 add.w r9, r4, #24 - 5438: 464a mov r2, r9 - while (nNew--) { - 543a: b175 cbz r5, 545a - if (m_vol->fatGet(m_curCluster, &m_curCluster) <= 0) { - 543c: 69a1 ldr r1, [r4, #24] - 543e: 6a20 ldr r0, [r4, #32] - 5440: f001 fcbc bl 6dbc - 5444: 2800 cmp r0, #0 - 5446: f105 35ff add.w r5, r5, #4294967295 ; 0xffffffff - 544a: dcf5 bgt.n 5438 - done: - m_curPosition = pos; - return true; - - fail: - m_curCluster = tmp; - 544c: f8c4 8018 str.w r8, [r4, #24] - return false; - 5450: 2000 movs r0, #0 -} - 5452: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - m_curCluster = 0; - 5456: 2300 movs r3, #0 - 5458: 6183 str r3, [r0, #24] - m_curPosition = pos; - 545a: e9c4 6700 strd r6, r7, [r4] - return true; - 545e: 2001 movs r0, #1 -} - 5460: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - m_curCluster = m_firstCluster + nNew; - 5464: 69e3 ldr r3, [r4, #28] - 5466: 442b add r3, r5 - 5468: 61a3 str r3, [r4, #24] - goto done; - 546a: e7f6 b.n 545a - return true; - 546c: 2001 movs r0, #1 -} - 546e: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - nNew -= nCur; - 5472: 1aed subs r5, r5, r3 - 5474: e7de b.n 5434 - 5476: bf00 nop - -00005478 : -bool ExFatFile::openPrivate(ExFatFile* dir, ExName_t* fname, oflag_t oflag) { - 5478: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 547c: 4606 mov r6, r0 - 547e: f890 0031 ldrb.w r0, [r0, #49] ; 0x31 - 5482: b08f sub sp, #60 ; 0x3c - if (isOpen() || !dir->isDir()) { - 5484: 2800 cmp r0, #0 - 5486: f040 80d8 bne.w 563a - bool isDir() const {return m_attributes & FILE_ATTR_DIR;} - 548a: 4617 mov r7, r2 - 548c: f891 2031 ldrb.w r2, [r1, #49] ; 0x31 - 5490: f012 0f50 tst.w r2, #80 ; 0x50 - 5494: 468b mov fp, r1 - 5496: f000 80d0 beq.w 563a - switch (oflag & O_ACCMODE) { - 549a: f003 0203 and.w r2, r3, #3 - 549e: 2a03 cmp r2, #3 - 54a0: 469a mov sl, r3 - 54a2: f000 80ca beq.w 563a - modeFlags |= oflag & O_APPEND ? FILE_FLAG_APPEND : 0; - 54a6: 3201 adds r2, #1 - 54a8: f003 0108 and.w r1, r3, #8 - 54ac: ea42 0301 orr.w r3, r2, r1 - 54b0: 9302 str r3, [sp, #8] - if (fname) { - 54b2: 2f00 cmp r7, #0 - 54b4: f000 80ca beq.w 564c - freeNeed = 2 + (fname->nameLength + 14)/15; - 54b8: 693a ldr r2, [r7, #16] - 54ba: f102 080e add.w r8, r2, #14 - 54be: 4aa8 ldr r2, [pc, #672] ; (5760 ) - 54c0: fba2 2808 umull r2, r8, r2, r8 - if (pos == m_curPosition) { - 54c4: e9db 2100 ldrd r2, r1, [fp] - freeNeed = 2 + (fname->nameLength + 14)/15; - 54c8: ea4f 08d8 mov.w r8, r8, lsr #3 - 54cc: f108 0802 add.w r8, r8, #2 - if (pos == m_curPosition) { - 54d0: 430a orrs r2, r1 - freeNeed = 2 + (fname->nameLength + 14)/15; - 54d2: fa5f f888 uxtb.w r8, r8 - if (pos == m_curPosition) { - 54d6: d005 beq.n 54e4 - m_curCluster = 0; - 54d8: f8cb 0018 str.w r0, [fp, #24] - m_curPosition = pos; - 54dc: 2100 movs r1, #0 - 54de: 2000 movs r0, #0 - 54e0: e9cb 0100 strd r0, r1, [fp] - m_flags |= FILE_FLAG_CONTIGUOUS; - 54e4: 9b02 ldr r3, [sp, #8] - inSet = false; - 54e6: 2400 movs r4, #0 - m_flags |= FILE_FLAG_CONTIGUOUS; - 54e8: f043 0340 orr.w r3, r3, #64 ; 0x40 - inSet = false; - 54ec: 4625 mov r5, r4 - m_flags |= FILE_FLAG_CONTIGUOUS; - 54ee: 9303 str r3, [sp, #12] - n = dir->read(buf, FS_DIR_SIZE); - 54f0: 2220 movs r2, #32 - 54f2: a906 add r1, sp, #24 - 54f4: 4658 mov r0, fp - 54f6: f7ff fe63 bl 51c0 - if (n == 0) { - 54fa: b300 cbz r0, 553e - if (n != FS_DIR_SIZE) { - 54fc: 2820 cmp r0, #32 - 54fe: f040 809c bne.w 563a - if (!(buf[0] & 0x80)) { - 5502: f99d 2018 ldrsb.w r2, [sp, #24] - 5506: f89d 3018 ldrb.w r3, [sp, #24] - 550a: 2a00 cmp r2, #0 - 550c: f2c0 80a1 blt.w 5652 - if (freeCount == 0) { - 5510: b934 cbnz r4, 5520 - freePos.position = dir->curPosition() - FS_DIR_SIZE; - 5512: f8db 2000 ldr.w r2, [fp] - 5516: f1a2 0920 sub.w r9, r2, #32 - bool mkdir(ExFatFile* parent, ExName_t* fname); - - bool openPrivate(ExFatFile* dir, ExName_t* fname, oflag_t oflag); - bool parsePathName(const char* path, - ExName_t* fname, const char** ptr); - uint32_t curCluster() const {return m_curCluster;} - 551a: f8db 2018 ldr.w r2, [fp, #24] - 551e: 9201 str r2, [sp, #4] - if (freeCount < freeNeed) { - 5520: 4544 cmp r4, r8 - freeCount++; - 5522: bf3c itt cc - 5524: 3401 addcc r4, #1 - 5526: b2e4 uxtbcc r4, r4 - if (!buf[0]) { - 5528: 2b00 cmp r3, #0 - 552a: f000 8112 beq.w 5752 - n = dir->read(buf, FS_DIR_SIZE); - 552e: 2220 movs r2, #32 - 5530: a906 add r1, sp, #24 - 5532: 4658 mov r0, fp - inSet = false; - 5534: 2500 movs r5, #0 - n = dir->read(buf, FS_DIR_SIZE); - 5536: f7ff fe43 bl 51c0 - if (n == 0) { - 553a: 2800 cmp r0, #0 - 553c: d1de bne.n 54fc - if (!(oflag & O_CREAT) || !(modeFlags & FILE_FLAG_WRITE) || !fname) { - 553e: f41a 7f00 tst.w sl, #512 ; 0x200 - 5542: d07a beq.n 563a - 5544: 9b02 ldr r3, [sp, #8] - 5546: 079b lsls r3, r3, #30 - 5548: d577 bpl.n 563a - 554a: 2f00 cmp r7, #0 - 554c: d075 beq.n 563a - while (freeCount < freeNeed) { - 554e: 4544 cmp r4, r8 - 5550: d217 bcs.n 5582 - 5552: f8dd a004 ldr.w sl, [sp, #4] - n = dir->read(buf, FS_DIR_SIZE); - 5556: 2220 movs r2, #32 - 5558: a906 add r1, sp, #24 - 555a: 4658 mov r0, fp - 555c: f7ff fe30 bl 51c0 - freeCount++; - 5560: 1c63 adds r3, r4, #1 - if (n == 0) { - 5562: 2800 cmp r0, #0 - 5564: d061 beq.n 562a - if (n != FS_DIR_SIZE) { - 5566: 2820 cmp r0, #32 - 5568: d167 bne.n 563a - if (freeCount == 0) { - 556a: b92c cbnz r4, 5578 - freePos.position = dir->curPosition() - FS_DIR_SIZE; - 556c: f8db 2000 ldr.w r2, [fp] - 5570: f8db a018 ldr.w sl, [fp, #24] - 5574: f1a2 0920 sub.w r9, r2, #32 - freeCount++; - 5578: b2dc uxtb r4, r3 - while (freeCount < freeNeed) { - 557a: 45a0 cmp r8, r4 - 557c: d8eb bhi.n 5556 - 557e: f8cd a004 str.w sl, [sp, #4] - memset(this, 0, sizeof(ExFatFile)); - 5582: 2238 movs r2, #56 ; 0x38 - 5584: 2100 movs r1, #0 - 5586: 4630 mov r0, r6 - bool isContiguous() const {return m_flags & FILE_FLAG_CONTIGUOUS;} - 5588: f89b 4033 ldrb.w r4, [fp, #51] ; 0x33 - 558c: f00b fdf2 bl 11174 - ExFatVolume* volume() const {return m_vol;} - 5590: f8db 3020 ldr.w r3, [fp, #32] - m_vol = dir->volume(); - 5594: 6233 str r3, [r6, #32] - m_dirPos = freePos; - 5596: 9b01 ldr r3, [sp, #4] - 5598: 6273 str r3, [r6, #36] ; 0x24 - m_attributes = FILE_ATTR_FILE; - 559a: 2308 movs r3, #8 - 559c: f886 3031 strb.w r3, [r6, #49] ; 0x31 - uint16_t ls = 0; - bool atEnd() { - return !ls && next == end; - } - void reset() { - next = begin; - 55a0: 683b ldr r3, [r7, #0] - m_dirPos = freePos; - 55a2: f8c6 9028 str.w r9, [r6, #40] ; 0x28 - freePos.isContiguous = dir->isContiguous(); - 55a6: f3c4 1480 ubfx r4, r4, #6, #1 - ls = 0; // lowSurrogate - 55aa: 2500 movs r5, #0 - m_dirPos = freePos; - 55ac: f886 402c strb.w r4, [r6, #44] ; 0x2c - next = begin; - 55b0: 607b str r3, [r7, #4] - ls = 0; // lowSurrogate - 55b2: 81bd strh r5, [r7, #12] - for (uint8_t i = 0; i < freeNeed; i++) { - 55b4: f1b8 0f00 cmp.w r8, #0 - 55b8: d032 beq.n 5620 - m_setCount = freeNeed - 1; - 55ba: f108 39ff add.w r9, r8, #4294967295 ; 0xffffffff - if (FsDateTime::callback) { - 55be: f8df a1a4 ldr.w sl, [pc, #420] ; 5764 - m_setCount = freeNeed - 1; - 55c2: fa5f f989 uxtb.w r9, r9 - 55c6: 46ab mov fp, r5 - cache = dirCache(i, FsCache::CACHE_FOR_WRITE); - 55c8: 2201 movs r2, #1 - 55ca: 4659 mov r1, fp - 55cc: 4630 mov r0, r6 - 55ce: f7ff fd43 bl 5058 - if (!cache || (cache[0] & 0x80)) { - 55d2: 4604 mov r4, r0 - 55d4: b388 cbz r0, 563a - 55d6: f990 2000 ldrsb.w r2, [r0] - 55da: 2a00 cmp r2, #0 - 55dc: db2d blt.n 563a - memset(cache, 0 , FS_DIR_SIZE); - 55de: 2220 movs r2, #32 - 55e0: 2100 movs r1, #0 - 55e2: f00b fdc7 bl 11174 - if (i == 0) { - 55e6: 2d00 cmp r5, #0 - 55e8: f000 80be beq.w 5768 - } else if (i == 1) { - 55ec: f1bb 0f01 cmp.w fp, #1 - 55f0: f000 80d4 beq.w 579c - dirName->type = EXFAT_TYPE_NAME; - 55f4: 23c1 movs r3, #193 ; 0xc1 - 55f6: 7023 strb r3, [r4, #0] - for (size_t k = 0; k < 15; k++) { - 55f8: 46a3 mov fp, r4 - 55fa: 341e adds r4, #30 - return !ls && next == end; - 55fc: 89bb ldrh r3, [r7, #12] - uint16_t u = fname->get16(); - 55fe: 4638 mov r0, r7 - 5600: b91b cbnz r3, 560a - 5602: 687a ldr r2, [r7, #4] - 5604: 68bb ldr r3, [r7, #8] - 5606: 429a cmp r2, r3 - 5608: d005 beq.n 5616 - 560a: f004 fff7 bl a5fc -} -inline uint64_t getLe64(const uint8_t* src) { - return *reinterpret_cast(src); -} -inline void setLe16(uint8_t* dst, uint16_t src) { - *reinterpret_cast(dst) = src; - 560e: f82b 0f02 strh.w r0, [fp, #2]! - for (size_t k = 0; k < 15; k++) { - 5612: 45a3 cmp fp, r4 - 5614: d1f2 bne.n 55fc - for (uint8_t i = 0; i < freeNeed; i++) { - 5616: 3501 adds r5, #1 - 5618: fa5f fb85 uxtb.w fp, r5 - 561c: 45d8 cmp r8, fp - 561e: d8d3 bhi.n 55c8 - return sync(); - 5620: 4630 mov r0, r6 - 5622: f000 fae3 bl 5bec - 5626: 4605 mov r5, r0 - 5628: e00c b.n 5644 - if (!dir->addDirCluster()) { - 562a: 4658 mov r0, fp - curCluster = dir->m_curCluster; - 562c: f8db 5018 ldr.w r5, [fp, #24] - if (!dir->addDirCluster()) { - 5630: f000 fb0c bl 5c4c - 5634: 2800 cmp r0, #0 - 5636: f040 8090 bne.w 575a - m_attributes = FILE_ATTR_CLOSED; - 563a: 2500 movs r5, #0 - 563c: f886 5031 strb.w r5, [r6, #49] ; 0x31 - m_flags = 0; - 5640: f886 5033 strb.w r5, [r6, #51] ; 0x33 -} - 5644: 4628 mov r0, r5 - 5646: b00f add sp, #60 ; 0x3c - 5648: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - uint8_t freeNeed = 3; - 564c: f04f 0803 mov.w r8, #3 - 5650: e748 b.n 54e4 - } else if (!inSet) { - 5652: bb55 cbnz r5, 56aa - freeCount = 0; - 5654: 4544 cmp r4, r8 - 5656: bf38 it cc - 5658: 2400 movcc r4, #0 - if (buf[0] != EXFAT_TYPE_FILE) { - 565a: 2b85 cmp r3, #133 ; 0x85 - 565c: f47f af48 bne.w 54f0 - memset(this, 0, sizeof(ExFatFile)); - 5660: 4629 mov r1, r5 - 5662: 2238 movs r2, #56 ; 0x38 - 5664: 4630 mov r0, r6 - 5666: f00b fd85 bl 11174 - m_attributes = getLe16(dirFile->attributes) & FILE_ATTR_COPY; - 566a: f89d 201c ldrb.w r2, [sp, #28] - m_setCount = dirFile->setCount; - 566e: f89d 3019 ldrb.w r3, [sp, #25] - 5672: f886 3030 strb.w r3, [r6, #48] ; 0x30 - m_attributes = getLe16(dirFile->attributes) & FILE_ATTR_COPY; - 5676: f002 0337 and.w r3, r2, #55 ; 0x37 - if (!(m_attributes & EXFAT_ATTRIB_DIRECTORY)) { - 567a: 06d2 lsls r2, r2, #27 - m_attributes |= FILE_ATTR_FILE; - 567c: bf58 it pl - 567e: f043 0308 orrpl.w r3, r3, #8 - 5682: f886 3031 strb.w r3, [r6, #49] ; 0x31 - m_dirPos.position = dir->curPosition() - FS_DIR_SIZE; - 5686: f8db 3000 ldr.w r3, [fp] - 568a: f8db 2020 ldr.w r2, [fp, #32] - m_vol = dir->volume(); - 568e: 6232 str r2, [r6, #32] - m_dirPos.position = dir->curPosition() - FS_DIR_SIZE; - 5690: 3b20 subs r3, #32 - m_dirPos.cluster = dir->curCluster(); - 5692: f8db 2018 ldr.w r2, [fp, #24] - 5696: 6272 str r2, [r6, #36] ; 0x24 - m_dirPos.position = dir->curPosition() - FS_DIR_SIZE; - 5698: 62b3 str r3, [r6, #40] ; 0x28 - bool isContiguous() const {return m_flags & FILE_FLAG_CONTIGUOUS;} - 569a: f89b 3033 ldrb.w r3, [fp, #51] ; 0x33 - 569e: f3c3 1380 ubfx r3, r3, #6, #1 - m_dirPos.isContiguous = dir->isContiguous(); - 56a2: f886 302c strb.w r3, [r6, #44] ; 0x2c - inSet = true; - 56a6: 2501 movs r5, #1 - 56a8: e722 b.n 54f0 - } else if (buf[0] == EXFAT_TYPE_STREAM) { - 56aa: 2bc0 cmp r3, #192 ; 0xc0 - 56ac: d028 beq.n 5700 - } else if (buf[0] == EXFAT_TYPE_NAME) { - 56ae: 2bc1 cmp r3, #193 ; 0xc1 - 56b0: f47f af3d bne.w 552e - if (!cmpName(dirName, fname)) { - 56b4: 463a mov r2, r7 - 56b6: a906 add r1, sp, #24 - 56b8: 4630 mov r0, r6 - 56ba: f001 f981 bl 69c0 - 56be: b1e8 cbz r0, 56fc - 56c0: 89bb ldrh r3, [r7, #12] - 56c2: b9db cbnz r3, 56fc - 56c4: 68ba ldr r2, [r7, #8] - 56c6: 687b ldr r3, [r7, #4] - 56c8: 429a cmp r2, r3 - 56ca: d117 bne.n 56fc - if (oflag & O_EXCL) { - 56cc: f41a 6f00 tst.w sl, #2048 ; 0x800 - 56d0: d1b3 bne.n 563a - if ((oflag & (O_TRUNC | O_AT_END)) || (m_flags & FILE_FLAG_WRITE)) { - 56d2: f41a 4f88 tst.w sl, #17408 ; 0x4400 - 56d6: d16f bne.n 57b8 - 56d8: f896 3033 ldrb.w r3, [r6, #51] ; 0x33 - 56dc: 079c lsls r4, r3, #30 - 56de: d46b bmi.n 57b8 - if (oflag & O_TRUNC) { - 56e0: f41a 6f80 tst.w sl, #1024 ; 0x400 - 56e4: d1a9 bne.n 563a - } else if ((oflag & O_AT_END) && !seekSet(fileSize())) { - 56e6: f41a 4f80 tst.w sl, #16384 ; 0x4000 - 56ea: d0ab beq.n 5644 - 56ec: e9d6 2304 ldrd r2, r3, [r6, #16] - 56f0: 4630 mov r0, r6 - 56f2: f7ff fe51 bl 5398 - 56f6: 2800 cmp r0, #0 - 56f8: d1a4 bne.n 5644 - 56fa: e79e b.n 563a - 56fc: 4605 mov r5, r0 - 56fe: e6f7 b.n 54f0 - m_flags = modeFlags; - 5700: 9b02 ldr r3, [sp, #8] - 5702: f886 3033 strb.w r3, [r6, #51] ; 0x33 - if (dirStream->flags & EXFAT_FLAG_CONTIGUOUS) { - 5706: f89d 3019 ldrb.w r3, [sp, #25] - 570a: 079b lsls r3, r3, #30 - m_flags |= FILE_FLAG_CONTIGUOUS; - 570c: bf44 itt mi - 570e: 9b03 ldrmi r3, [sp, #12] - 5710: f886 3033 strbmi.w r3, [r6, #51] ; 0x33 - m_firstCluster = getLe32(dirStream->firstCluster); - 5714: 9b0b ldr r3, [sp, #44] ; 0x2c - 5716: 61f3 str r3, [r6, #28] - m_validLength = getLe64(dirStream->validLength); - 5718: e9dd 2308 ldrd r2, r3, [sp, #32] - 571c: e9c6 2304 strd r2, r3, [r6, #16] - m_dataLength = getLe64(dirStream->dataLength); - 5720: e9dd 230c ldrd r2, r3, [sp, #48] ; 0x30 - 5724: e9c6 2302 strd r2, r3, [r6, #8] - if (!fname) { - 5728: 2f00 cmp r7, #0 - 572a: d0cf beq.n 56cc - ls = 0; // lowSurrogate - 572c: f04f 0300 mov.w r3, #0 - if (fname->nameLength != dirStream->nameLength || - 5730: 693a ldr r2, [r7, #16] - 5732: 81bb strh r3, [r7, #12] - 5734: f89d 301b ldrb.w r3, [sp, #27] - next = begin; - 5738: 6839 ldr r1, [r7, #0] - 573a: 6079 str r1, [r7, #4] - 573c: 429a cmp r2, r3 - 573e: f47f aef6 bne.w 552e - 5742: 8abd ldrh r5, [r7, #20] - 5744: f8bd 301c ldrh.w r3, [sp, #28] - 5748: 1aed subs r5, r5, r3 - 574a: fab5 f585 clz r5, r5 - 574e: 096d lsrs r5, r5, #5 - 5750: e6ce b.n 54f0 - if (fname) { - 5752: 2f00 cmp r7, #0 - 5754: f47f aef3 bne.w 553e - 5758: e76f b.n 563a - dir->m_curCluster = curCluster; - 575a: f8cb 5018 str.w r5, [fp, #24] - continue; - 575e: e70c b.n 557a - 5760: 88888889 .word 0x88888889 - 5764: 1fff9770 .word 0x1fff9770 - dirFile->type = EXFAT_TYPE_FILE; - 5768: 2385 movs r3, #133 ; 0x85 - 576a: 7023 strb r3, [r4, #0] - m_setCount = freeNeed - 1; - 576c: f886 9030 strb.w r9, [r6, #48] ; 0x30 - dirFile->setCount = m_setCount; - 5770: f884 9001 strb.w r9, [r4, #1] - if (FsDateTime::callback) { - 5774: f8da 3000 ldr.w r3, [sl] - 5778: 2b00 cmp r3, #0 - 577a: d041 beq.n 5800 - FsDateTime::callback(&date, &time, &ms10); - 577c: f10d 0213 add.w r2, sp, #19 - 5780: f10d 0116 add.w r1, sp, #22 - 5784: a805 add r0, sp, #20 - 5786: 4798 blx r3 - 5788: f8bd 3014 ldrh.w r3, [sp, #20] - 578c: 8163 strh r3, [r4, #10] - 578e: f8bd 3016 ldrh.w r3, [sp, #22] - 5792: 8123 strh r3, [r4, #8] - dirFile->createTimeMs = ms10; - 5794: f89d 3013 ldrb.w r3, [sp, #19] - 5798: 7523 strb r3, [r4, #20] - 579a: e73c b.n 5616 - dirStream->type = EXFAT_TYPE_STREAM; - 579c: 23c0 movs r3, #192 ; 0xc0 - 579e: 7023 strb r3, [r4, #0] - m_flags = modeFlags | FILE_FLAG_DIR_DIRTY; - 57a0: 9b02 ldr r3, [sp, #8] - dirStream->flags = EXFAT_FLAG_ALWAYS1; - 57a2: f884 b001 strb.w fp, [r4, #1] - m_flags = modeFlags | FILE_FLAG_DIR_DIRTY; - 57a6: f063 037f orn r3, r3, #127 ; 0x7f - 57aa: f886 3033 strb.w r3, [r6, #51] ; 0x33 - dirStream->nameLength = fname->nameLength; - 57ae: 693b ldr r3, [r7, #16] - 57b0: 70e3 strb r3, [r4, #3] - setLe16(dirStream->nameHash, fname->nameHash); - 57b2: 8abb ldrh r3, [r7, #20] - 57b4: 80a3 strh r3, [r4, #4] -} - 57b6: e72e b.n 5616 - bool isSubDir() const {return m_attributes & FILE_ATTR_SUBDIR;} - 57b8: f896 3031 ldrb.w r3, [r6, #49] ; 0x31 - if (isSubDir() || isReadOnly() || EXFAT_READ_ONLY) { - 57bc: 06d8 lsls r0, r3, #27 - 57be: f53f af3c bmi.w 563a - 57c2: f013 0201 ands.w r2, r3, #1 - 57c6: f47f af38 bne.w 563a - if (oflag & O_TRUNC) { - 57ca: f41a 6f80 tst.w sl, #1024 ; 0x400 - 57ce: d08a beq.n 56e6 - if (!(m_flags & FILE_FLAG_WRITE)) { - 57d0: f896 1033 ldrb.w r1, [r6, #51] ; 0x33 - 57d4: 0789 lsls r1, r1, #30 - 57d6: f57f af30 bpl.w 563a - if (!isOpen()) { - 57da: 2b00 cmp r3, #0 - 57dc: f43f af2d beq.w 563a - if (pos == m_curPosition) { - 57e0: e9d6 3100 ldrd r3, r1, [r6] - 57e4: 430b orrs r3, r1 - 57e6: d004 beq.n 57f2 - m_curPosition = pos; - 57e8: 2000 movs r0, #0 - 57ea: 2100 movs r1, #0 - 57ec: e9c6 0100 strd r0, r1, [r6] - m_curCluster = 0; - 57f0: 61b2 str r2, [r6, #24] - return seekSet(length) && truncate(); - 57f2: 4630 mov r0, r6 - 57f4: f000 fbf2 bl 5fdc - 57f8: 2800 cmp r0, #0 - 57fa: f43f af1e beq.w 563a - 57fe: e721 b.n 5644 - *reinterpret_cast(dst) = src; - 5800: f645 2321 movw r3, #23073 ; 0x5a21 - 5804: 8163 strh r3, [r4, #10] - 5806: 81e3 strh r3, [r4, #14] - 5808: 8263 strh r3, [r4, #18] - if (FS_DEFAULT_TIME) { - 580a: e704 b.n 5616 - -0000580c : -bool ExFatFile::open(ExFatFile* dirFile, const char* path, oflag_t oflag) { - 580c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - 5810: 4604 mov r4, r0 - 5812: b097 sub sp, #92 ; 0x5c - 5814: 4699 mov r9, r3 - if (isOpen() || !dirFile->isDir()) { - 5816: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 -bool ExFatFile::open(ExFatFile* dirFile, const char* path, oflag_t oflag) { - 581a: 9201 str r2, [sp, #4] - ExFatFile() {} - 581c: 2000 movs r0, #0 - 581e: 9014 str r0, [sp, #80] ; 0x50 -class FsName { - 5820: f8ad 0014 strh.w r0, [sp, #20] - if (isOpen() || !dirFile->isDir()) { - 5824: bb6b cbnz r3, 5882 - 5826: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 - 582a: f013 0f50 tst.w r3, #80 ; 0x50 - 582e: 460e mov r6, r1 - 5830: d027 beq.n 5882 - if (isDirSeparator(*path)) { - 5832: 7813 ldrb r3, [r2, #0] - 5834: 2b2f cmp r3, #47 ; 0x2f - 5836: 4615 mov r5, r2 - 5838: d027 beq.n 588a - if (!openPrivate(dirFile, &fname, O_RDONLY)) { - 583a: f04f 0800 mov.w r8, #0 - 583e: e013 b.n 5868 - if (*path == 0) { - 5840: 9d01 ldr r5, [sp, #4] - 5842: 782f ldrb r7, [r5, #0] - 5844: b3a7 cbz r7, 58b0 - if (!openPrivate(dirFile, &fname, O_RDONLY)) { - 5846: f7ff fe17 bl 5478 - 584a: 4606 mov r6, r0 - tmpDir = *this; - 584c: 2234 movs r2, #52 ; 0x34 - 584e: 4621 mov r1, r4 - 5850: a808 add r0, sp, #32 - if (!openPrivate(dirFile, &fname, O_RDONLY)) { - 5852: b1b6 cbz r6, 5882 - tmpDir = *this; - 5854: f006 faf0 bl be38 - bool rtn = sync(); - 5858: 4620 mov r0, r4 - 585a: f000 f9c7 bl 5bec - dirFile = &tmpDir; - 585e: ae08 add r6, sp, #32 - m_attributes = FILE_ATTR_CLOSED; - 5860: f884 8031 strb.w r8, [r4, #49] ; 0x31 - m_flags = 0; - 5864: f884 8033 strb.w r8, [r4, #51] ; 0x33 - if (!parsePathName(path, &fname, &path)) { - 5868: 4629 mov r1, r5 - 586a: ab01 add r3, sp, #4 - 586c: aa02 add r2, sp, #8 - 586e: 4620 mov r0, r4 - 5870: f7ff fc52 bl 5118 - 5874: 4605 mov r5, r0 - if (!openPrivate(dirFile, &fname, O_RDONLY)) { - 5876: 2300 movs r3, #0 - 5878: aa02 add r2, sp, #8 - 587a: 4631 mov r1, r6 - 587c: 4620 mov r0, r4 - if (!parsePathName(path, &fname, &path)) { - 587e: 2d00 cmp r5, #0 - 5880: d1de bne.n 5840 - return false; - 5882: 2000 movs r0, #0 -} - 5884: b017 add sp, #92 ; 0x5c - 5886: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - while (isDirSeparator(*path)) { - 588a: f815 1f01 ldrb.w r1, [r5, #1]! - 588e: 292f cmp r1, #47 ; 0x2f - 5890: d0fb beq.n 588a - 5892: 9501 str r5, [sp, #4] - if (*path == 0) { - 5894: b999 cbnz r1, 58be - memset(this, 0, sizeof(ExFatFile)); - 5896: 2238 movs r2, #56 ; 0x38 - 5898: 4620 mov r0, r4 - return openRoot(dirFile->m_vol); - 589a: 6a35 ldr r5, [r6, #32] - memset(this, 0, sizeof(ExFatFile)); - 589c: f00b fc6a bl 11174 - m_flags = FILE_FLAG_READ; - 58a0: 2001 movs r0, #1 - m_attributes = FILE_ATTR_ROOT; - 58a2: 2340 movs r3, #64 ; 0x40 - 58a4: f884 3031 strb.w r3, [r4, #49] ; 0x31 - m_vol = vol; - 58a8: 6225 str r5, [r4, #32] - m_flags = FILE_FLAG_READ; - 58aa: f884 0033 strb.w r0, [r4, #51] ; 0x33 - return openRoot(dirFile->m_vol); - 58ae: e7e9 b.n 5884 - return openPrivate(dirFile, &fname, oflag); - 58b0: 464b mov r3, r9 - 58b2: aa02 add r2, sp, #8 - 58b4: f7ff fde0 bl 5478 -} - 58b8: b017 add sp, #92 ; 0x5c - 58ba: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - memset(this, 0, sizeof(ExFatFile)); - 58be: 2238 movs r2, #56 ; 0x38 - 58c0: 2100 movs r1, #0 - 58c2: a808 add r0, sp, #32 - if (!tmpDir.openRoot(dirFile->m_vol)) { - 58c4: 6a36 ldr r6, [r6, #32] - memset(this, 0, sizeof(ExFatFile)); - 58c6: f00b fc55 bl 11174 - m_flags = FILE_FLAG_READ; - 58ca: 2301 movs r3, #1 - 58cc: f88d 3053 strb.w r3, [sp, #83] ; 0x53 - m_attributes = FILE_ATTR_ROOT; - 58d0: 2340 movs r3, #64 ; 0x40 - m_vol = vol; - 58d2: 9610 str r6, [sp, #64] ; 0x40 - m_attributes = FILE_ATTR_ROOT; - 58d4: f88d 3051 strb.w r3, [sp, #81] ; 0x51 - dirFile = &tmpDir; - 58d8: ae08 add r6, sp, #32 - 58da: e7ae b.n 583a - -000058dc : - return vol && open(vol->vwd(), path, oflag); - 58dc: b119 cbz r1, 58e6 - 58de: f501 6189 add.w r1, r1, #1096 ; 0x448 - 58e2: f7ff bf93 b.w 580c -} - 58e6: 4608 mov r0, r1 - 58e8: 4770 bx lr - 58ea: bf00 nop - -000058ec : - if (isOpen() || !dir->isDir() || (dir->curPosition() & 0X1F)) { - 58ec: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 58f0: b963 cbnz r3, 590c - 58f2: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 - 58f6: f013 0f50 tst.w r3, #80 ; 0x50 - 58fa: d007 beq.n 590c - 58fc: 680b ldr r3, [r1, #0] - 58fe: f013 0c1f ands.w ip, r3, #31 - 5902: d103 bne.n 590c - return openPrivate(dir, nullptr, oflag); - 5904: 4613 mov r3, r2 - 5906: 4662 mov r2, ip - 5908: f7ff bdb6 b.w 5478 -} - 590c: 2000 movs r0, #0 - 590e: 4770 bx lr - -00005910 : - } - return checksum; -} -//------------------------------------------------------------------------------ -bool ExFatFile::addCluster() { - uint32_t find = m_vol->bitmapFind(m_curCluster ? m_curCluster + 1 : 0, 1); - 5910: 6981 ldr r1, [r0, #24] -bool ExFatFile::addCluster() { - 5912: b5f8 push {r3, r4, r5, r6, r7, lr} - 5914: 4604 mov r4, r0 - uint32_t find = m_vol->bitmapFind(m_curCluster ? m_curCluster + 1 : 0, 1); - 5916: 6a00 ldr r0, [r0, #32] - 5918: b101 cbz r1, 591c - 591a: 3101 adds r1, #1 - 591c: 2201 movs r2, #1 - 591e: f001 f90f bl 6b40 - if (find < 2) { - 5922: 2801 cmp r0, #1 - uint32_t find = m_vol->bitmapFind(m_curCluster ? m_curCluster + 1 : 0, 1); - 5924: 4605 mov r5, r0 - if (find < 2) { - 5926: d932 bls.n 598e - DBG_FAIL_MACRO; - goto fail; - } - if (!m_vol->bitmapModify(find, 1, 1)) { - 5928: 2301 movs r3, #1 - 592a: 4601 mov r1, r0 - 592c: 461a mov r2, r3 - 592e: 6a20 ldr r0, [r4, #32] - 5930: f001 f966 bl 6c00 - 5934: 4606 mov r6, r0 - 5936: b350 cbz r0, 598e - DBG_FAIL_MACRO; - goto fail; - } - if (m_curCluster == 0) { - 5938: 69a3 ldr r3, [r4, #24] - 593a: b35b cbz r3, 5994 - bool isContiguous() const {return m_flags & FILE_FLAG_CONTIGUOUS;} - 593c: f894 2033 ldrb.w r2, [r4, #51] ; 0x33 - m_flags |= FILE_FLAG_CONTIGUOUS; - goto done; - } - if (isContiguous()) { - 5940: 0651 lsls r1, r2, #25 - 5942: d512 bpl.n 596a - if (find == (m_curCluster + 1)) { - 5944: 1c59 adds r1, r3, #1 - 5946: 42a9 cmp r1, r5 - 5948: d018 beq.n 597c - goto done; - } - // No longer contiguous so make FAT chain. - m_flags &= ~FILE_FLAG_CONTIGUOUS; - 594a: f022 0240 bic.w r2, r2, #64 ; 0x40 - - for (uint32_t c = m_firstCluster; c < m_curCluster; c++) { - 594e: 69e1 ldr r1, [r4, #28] - m_flags &= ~FILE_FLAG_CONTIGUOUS; - 5950: f884 2033 strb.w r2, [r4, #51] ; 0x33 - for (uint32_t c = m_firstCluster; c < m_curCluster; c++) { - 5954: e005 b.n 5962 - if (!m_vol->fatPut(c, c + 1)) { - 5956: 6a20 ldr r0, [r4, #32] - 5958: f001 fa50 bl 6dfc - 595c: b1b8 cbz r0, 598e - for (uint32_t c = m_firstCluster; c < m_curCluster; c++) { - 595e: 69a3 ldr r3, [r4, #24] - 5960: 4639 mov r1, r7 - if (!m_vol->fatPut(c, c + 1)) { - 5962: 1c4f adds r7, r1, #1 - for (uint32_t c = m_firstCluster; c < m_curCluster; c++) { - 5964: 4299 cmp r1, r3 - if (!m_vol->fatPut(c, c + 1)) { - 5966: 463a mov r2, r7 - for (uint32_t c = m_firstCluster; c < m_curCluster; c++) { - 5968: d3f5 bcc.n 5956 - goto fail; - } - } - } - // New cluster is EOC. - if (!m_vol->fatPut(find, EXFAT_EOC)) { - 596a: 6a20 ldr r0, [r4, #32] - 596c: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 5970: 4629 mov r1, r5 - 5972: f001 fa43 bl 6dfc - 5976: b150 cbz r0, 598e - DBG_FAIL_MACRO; - goto fail; - } - // Connect new cluster to existing chain. - if (m_curCluster) { - 5978: 69a1 ldr r1, [r4, #24] - 597a: b911 cbnz r1, 5982 - goto fail; - } - } - - done: - m_curCluster = find; - 597c: 61a5 str r5, [r4, #24] - return true; - - fail: - return false; -} - 597e: 4630 mov r0, r6 - 5980: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (!m_vol->fatPut(m_curCluster, find)) { - 5982: 6a20 ldr r0, [r4, #32] - 5984: 462a mov r2, r5 - 5986: f001 fa39 bl 6dfc - 598a: 2800 cmp r0, #0 - 598c: d1f6 bne.n 597c - return false; - 598e: 2600 movs r6, #0 -} - 5990: 4630 mov r0, r6 - 5992: bdf8 pop {r3, r4, r5, r6, r7, pc} - m_flags |= FILE_FLAG_CONTIGUOUS; - 5994: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - 5998: f043 0340 orr.w r3, r3, #64 ; 0x40 - 599c: f884 3033 strb.w r3, [r4, #51] ; 0x33 - goto done; - 59a0: e7ec b.n 597c - 59a2: bf00 nop - -000059a4 : - bool isWritable() const {return m_flags & FILE_FLAG_WRITE;} - 59a4: f890 3033 ldrb.w r3, [r0, #51] ; 0x33 - return false; -} -//------------------------------------------------------------------------------ -bool ExFatFile::remove() { - uint8_t* cache; - if (!isWritable()) { - 59a8: 079a lsls r2, r3, #30 - 59aa: d536 bpl.n 5a1a - DBG_FAIL_MACRO; - goto fail; - } - // Free any clusters. - if (m_firstCluster) { - 59ac: 69c1 ldr r1, [r0, #28] -bool ExFatFile::remove() { - 59ae: b570 push {r4, r5, r6, lr} - 59b0: 4605 mov r5, r0 - if (m_firstCluster) { - 59b2: b9a1 cbnz r1, 59de -bool ExFatFile::remove() { - 59b4: 2400 movs r4, #0 - 59b6: 4621 mov r1, r4 - 59b8: e007 b.n 59ca - if (!cache) { - DBG_FAIL_MACRO; - goto fail; - } - // Mark entry not used. - cache[0] &= 0x7F; - 59ba: 7803 ldrb r3, [r0, #0] - 59bc: f003 037f and.w r3, r3, #127 ; 0x7f - 59c0: 7003 strb r3, [r0, #0] - for (uint8_t is = 0; is <= m_setCount; is++) { - 59c2: f895 3030 ldrb.w r3, [r5, #48] ; 0x30 - 59c6: 428b cmp r3, r1 - 59c8: d329 bcc.n 5a1e - cache = dirCache(is, FsCache::CACHE_FOR_WRITE); - 59ca: 2201 movs r2, #1 - 59cc: 4628 mov r0, r5 - 59ce: f7ff fb43 bl 5058 - for (uint8_t is = 0; is <= m_setCount; is++) { - 59d2: 3401 adds r4, #1 - 59d4: b2e1 uxtb r1, r4 - if (!cache) { - 59d6: 2800 cmp r0, #0 - 59d8: d1ef bne.n 59ba - // Write entry to device. - return m_vol->cacheSync(); - - fail: - return false; -} - 59da: 2000 movs r0, #0 - 59dc: bd70 pop {r4, r5, r6, pc} - if (isContiguous()) { - 59de: 065b lsls r3, r3, #25 - uint32_t nc = 1 + ((m_dataLength - 1) >> m_vol->bytesPerClusterShift()); - 59e0: 6a00 ldr r0, [r0, #32] - if (isContiguous()) { - 59e2: d534 bpl.n 5a4e - uint32_t nc = 1 + ((m_dataLength - 1) >> m_vol->bytesPerClusterShift()); - 59e4: e9d5 2402 ldrd r2, r4, [r5, #8] - return m_bytesPerSectorShift + m_sectorsPerClusterShift; - 59e8: f890 3445 ldrb.w r3, [r0, #1093] ; 0x445 - 59ec: 3309 adds r3, #9 - 59ee: 3a01 subs r2, #1 - 59f0: b2db uxtb r3, r3 - 59f2: f144 34ff adc.w r4, r4, #4294967295 ; 0xffffffff - 59f6: f1c3 0c20 rsb ip, r3, #32 - 59fa: 40da lsrs r2, r3 - 59fc: fa04 fc0c lsl.w ip, r4, ip - 5a00: 3b20 subs r3, #32 - 5a02: fa24 f303 lsr.w r3, r4, r3 - 5a06: ea42 020c orr.w r2, r2, ip - 5a0a: 431a orrs r2, r3 - if (!m_vol->bitmapModify(m_firstCluster, nc, 0)) { - 5a0c: 3201 adds r2, #1 - 5a0e: 2300 movs r3, #0 - 5a10: f001 f8f6 bl 6c00 - 5a14: 2800 cmp r0, #0 - 5a16: d1cd bne.n 59b4 - 5a18: e7df b.n 59da -} - 5a1a: 2000 movs r0, #0 - 5a1c: 4770 bx lr - return m_vol->cacheSync(); - 5a1e: 6a2c ldr r4, [r5, #32] - m_attributes = FILE_ATTR_CLOSED; - 5a20: 2300 movs r3, #0 - 5a22: f885 3031 strb.w r3, [r5, #49] ; 0x31 - m_flags = 0; - 5a26: f885 3033 strb.w r3, [r5, #51] ; 0x33 - return m_bitmapCache.sync() && m_dataCache.sync() && syncDevice(); - 5a2a: 4620 mov r0, r4 - 5a2c: f004 fd80 bl a530 - 5a30: 2800 cmp r0, #0 - 5a32: d0d2 beq.n 59da - 5a34: f504 7004 add.w r0, r4, #528 ; 0x210 - 5a38: f004 fd7a bl a530 - 5a3c: 2800 cmp r0, #0 - 5a3e: d0cc beq.n 59da - 5a40: f8d4 0440 ldr.w r0, [r4, #1088] ; 0x440 - bool fatPut(uint32_t cluster, uint32_t value); - uint32_t chainSize(uint32_t cluster); - bool freeChain(uint32_t cluster); - uint16_t sectorMask() const {return m_sectorMask;} - bool syncDevice() { - return m_blockDev->syncDevice(); - 5a44: 6803 ldr r3, [r0, #0] -} - 5a46: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - 5a4a: 6a1b ldr r3, [r3, #32] - 5a4c: 4718 bx r3 - if (!m_vol->freeChain(m_firstCluster)) { - 5a4e: f001 f9f5 bl 6e3c - 5a52: 2800 cmp r0, #0 - 5a54: d1ae bne.n 59b4 - 5a56: e7c0 b.n 59da - -00005a58 : -//------------------------------------------------------------------------------ -bool ExFatFile::rmdir() { - int n; - uint8_t dir[FS_DIR_SIZE]; - // must be open subdirectory - if (!isSubDir()) { - 5a58: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 5a5c: 06db lsls r3, r3, #27 - 5a5e: d401 bmi.n 5a64 - m_attributes = FILE_ATTR_FILE; - m_flags |= FILE_FLAG_WRITE; - return remove(); - - fail: - return false; - 5a60: 2000 movs r0, #0 -} - 5a62: 4770 bx lr -bool ExFatFile::rmdir() { - 5a64: b510 push {r4, lr} - seekSet(0); - 5a66: 2200 movs r2, #0 - 5a68: b088 sub sp, #32 - 5a6a: 2300 movs r3, #0 - 5a6c: 4604 mov r4, r0 - 5a6e: f7ff fc93 bl 5398 - } - 5a72: e008 b.n 5a86 - if (n != FS_DIR_SIZE || dir[0] & 0X80) { - 5a74: 2820 cmp r0, #32 - 5a76: d11b bne.n 5ab0 - 5a78: f99d 3000 ldrsb.w r3, [sp] - 5a7c: f89d 2000 ldrb.w r2, [sp] - 5a80: 2b00 cmp r3, #0 - 5a82: db15 blt.n 5ab0 - if (dir[0] == 0) { - 5a84: b132 cbz r2, 5a94 - n = read(dir, FS_DIR_SIZE); - 5a86: 2220 movs r2, #32 - 5a88: 4669 mov r1, sp - 5a8a: 4620 mov r0, r4 - 5a8c: f7ff fb98 bl 51c0 - if (n == 0) { - 5a90: 2800 cmp r0, #0 - 5a92: d1ef bne.n 5a74 - m_flags |= FILE_FLAG_WRITE; - 5a94: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - m_attributes = FILE_ATTR_FILE; - 5a98: 2208 movs r2, #8 - m_flags |= FILE_FLAG_WRITE; - 5a9a: f043 0302 orr.w r3, r3, #2 - m_attributes = FILE_ATTR_FILE; - 5a9e: f884 2031 strb.w r2, [r4, #49] ; 0x31 - m_flags |= FILE_FLAG_WRITE; - 5aa2: f884 3033 strb.w r3, [r4, #51] ; 0x33 - return remove(); - 5aa6: 4620 mov r0, r4 - 5aa8: f7ff ff7c bl 59a4 -} - 5aac: b008 add sp, #32 - 5aae: bd10 pop {r4, pc} - return false; - 5ab0: 2000 movs r0, #0 -} - 5ab2: b008 add sp, #32 - 5ab4: bd10 pop {r4, pc} - 5ab6: bf00 nop - -00005ab8 : - fail: - m_error |= WRITE_ERROR; - return false; -} -//------------------------------------------------------------------------------ -bool ExFatFile::syncDir() { - 5ab8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 5abc: f04f 0800 mov.w r8, #0 - } - switch (cache[0]) { - case EXFAT_TYPE_FILE: - df = reinterpret_cast(cache); - setLe16(df->attributes, m_attributes & FILE_ATTR_COPY); - if (FsDateTime::callback) { - 5ac0: 4f49 ldr r7, [pc, #292] ; (5be8 ) -bool ExFatFile::syncDir() { - 5ac2: b082 sub sp, #8 - 5ac4: 4606 mov r6, r0 - uint16_t checksum = 0; - 5ac6: 4644 mov r4, r8 - 5ac8: 4641 mov r1, r8 - cache = dirCache(is, FsCache::CACHE_FOR_READ); - 5aca: 2200 movs r2, #0 - 5acc: 4630 mov r0, r6 - 5ace: f7ff fac3 bl 5058 - if (!cache) { - 5ad2: 4605 mov r5, r0 - 5ad4: b130 cbz r0, 5ae4 - switch (cache[0]) { - 5ad6: 7800 ldrb r0, [r0, #0] - 5ad8: 28c0 cmp r0, #192 ; 0xc0 - 5ada: d067 beq.n 5bac - 5adc: 28c1 cmp r0, #193 ; 0xc1 - 5ade: d02b beq.n 5b38 - 5ae0: 2885 cmp r0, #133 ; 0x85 - 5ae2: d009 beq.n 5af8 - goto fail; - } - return true; - - fail: - m_error |= WRITE_ERROR; - 5ae4: f896 3032 ldrb.w r3, [r6, #50] ; 0x32 - 5ae8: f043 0301 orr.w r3, r3, #1 - return false; - 5aec: 2000 movs r0, #0 - m_error |= WRITE_ERROR; - 5aee: f886 3032 strb.w r3, [r6, #50] ; 0x32 -} - 5af2: b002 add sp, #8 - 5af4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - setLe16(df->attributes, m_attributes & FILE_ATTR_COPY); - 5af8: f896 3031 ldrb.w r3, [r6, #49] ; 0x31 - 5afc: f003 0337 and.w r3, r3, #55 ; 0x37 - 5b00: 80ab strh r3, [r5, #4] - if (FsDateTime::callback) { - 5b02: 683b ldr r3, [r7, #0] - 5b04: b183 cbz r3, 5b28 - FsDateTime::callback(&date, &time, &ms10); - 5b06: f10d 0203 add.w r2, sp, #3 - 5b0a: f10d 0106 add.w r1, sp, #6 - 5b0e: a801 add r0, sp, #4 - 5b10: 4798 blx r3 - setLe16(df->modifyTime, time); - 5b12: f8bd 3006 ldrh.w r3, [sp, #6] - 5b16: 81ab strh r3, [r5, #12] - 5b18: 822b strh r3, [r5, #16] - setLe16(df->modifyDate, date); - 5b1a: f8bd 3004 ldrh.w r3, [sp, #4] - 5b1e: 81eb strh r3, [r5, #14] - 5b20: 826b strh r3, [r5, #18] - df->modifyTimeMs = ms10; - 5b22: f89d 3003 ldrb.w r3, [sp, #3] - 5b26: 756b strb r3, [r5, #21] - m_vol->dataCacheDirty(); - 5b28: 6a32 ldr r2, [r6, #32] - m_status |= CACHE_STATUS_DIRTY; - 5b2a: f892 3210 ldrb.w r3, [r2, #528] ; 0x210 - 5b2e: f043 0301 orr.w r3, r3, #1 - 5b32: f882 3210 strb.w r3, [r2, #528] ; 0x210 - bool skip = data[0] == EXFAT_TYPE_FILE; - 5b36: 7828 ldrb r0, [r5, #0] - uint16_t checksum = 0; - 5b38: 4601 mov r1, r0 - for (size_t i = 0; i < 32; i += i == 1 && skip ? 3 : 1) { - 5b3a: 2200 movs r2, #0 - 5b3c: e002 b.n 5b44 - 5b3e: 2a1f cmp r2, #31 - 5b40: d80f bhi.n 5b62 - checksum = ((checksum << 15) | (checksum >> 1)) + data[i]; - 5b42: 5ca9 ldrb r1, [r5, r2] - 5b44: 03e3 lsls r3, r4, #15 - 5b46: ea43 0354 orr.w r3, r3, r4, lsr #1 - 5b4a: fa11 f383 uxtah r3, r1, r3 - for (size_t i = 0; i < 32; i += i == 1 && skip ? 3 : 1) { - 5b4e: 2a01 cmp r2, #1 - checksum = ((checksum << 15) | (checksum >> 1)) + data[i]; - 5b50: b29c uxth r4, r3 - for (size_t i = 0; i < 32; i += i == 1 && skip ? 3 : 1) { - 5b52: f102 0201 add.w r2, r2, #1 - 5b56: d1f2 bne.n 5b3e - 5b58: 2885 cmp r0, #133 ; 0x85 - 5b5a: bf14 ite ne - 5b5c: 2202 movne r2, #2 - 5b5e: 2204 moveq r2, #4 - 5b60: e7ef b.n 5b42 - for (uint8_t is = 0; is <= m_setCount ; is++) { - 5b62: f896 3030 ldrb.w r3, [r6, #48] ; 0x30 - 5b66: f108 0801 add.w r8, r8, #1 - 5b6a: fa5f f188 uxtb.w r1, r8 - 5b6e: 428b cmp r3, r1 - 5b70: d2ab bcs.n 5aca - (m_vol->dirCache(&m_dirPos, FsCache::CACHE_FOR_WRITE)); - 5b72: 6a30 ldr r0, [r6, #32] - 5b74: 2201 movs r2, #1 - 5b76: f106 0124 add.w r1, r6, #36 ; 0x24 - 5b7a: f001 f8c1 bl 6d00 - if (!df) { - 5b7e: 2800 cmp r0, #0 - 5b80: d0b0 beq.n 5ae4 - if (!m_vol->cacheSync()) { - 5b82: 6a35 ldr r5, [r6, #32] - 5b84: 8044 strh r4, [r0, #2] - return m_bitmapCache.sync() && m_dataCache.sync() && syncDevice(); - 5b86: 4628 mov r0, r5 - 5b88: f004 fcd2 bl a530 - 5b8c: 2800 cmp r0, #0 - 5b8e: d0a9 beq.n 5ae4 - 5b90: f505 7004 add.w r0, r5, #528 ; 0x210 - 5b94: f004 fccc bl a530 - 5b98: 2800 cmp r0, #0 - 5b9a: d0a3 beq.n 5ae4 - 5b9c: f8d5 0440 ldr.w r0, [r5, #1088] ; 0x440 - return m_blockDev->syncDevice(); - 5ba0: 6803 ldr r3, [r0, #0] - 5ba2: 6a1b ldr r3, [r3, #32] - 5ba4: 4798 blx r3 - return m_bitmapCache.sync() && m_dataCache.sync() && syncDevice(); - 5ba6: 2800 cmp r0, #0 - 5ba8: d1a3 bne.n 5af2 - 5baa: e79b b.n 5ae4 - if (isContiguous()) { - 5bac: f896 3033 ldrb.w r3, [r6, #51] ; 0x33 - 5bb0: f013 0f40 tst.w r3, #64 ; 0x40 - ds->flags |= EXFAT_FLAG_CONTIGUOUS; - 5bb4: 786b ldrb r3, [r5, #1] - 5bb6: bf14 ite ne - 5bb8: f043 0302 orrne.w r3, r3, #2 - ds->flags &= ~EXFAT_FLAG_CONTIGUOUS; - 5bbc: f003 03fd andeq.w r3, r3, #253 ; 0xfd - 5bc0: 706b strb r3, [r5, #1] - setLe64(ds->validLength, m_validLength); - 5bc2: e9d6 2304 ldrd r2, r3, [r6, #16] - setLe32(ds->firstCluster, m_firstCluster); - 5bc6: 69f0 ldr r0, [r6, #28] - m_vol->dataCacheDirty(); - 5bc8: 6a31 ldr r1, [r6, #32] -inline void setLe32(uint8_t* dst, uint32_t src) { - *reinterpret_cast(dst) = src; - 5bca: 6168 str r0, [r5, #20] -} -inline void setLe64(uint8_t* dst, uint64_t src) { - *reinterpret_cast(dst) = src; - 5bcc: e9c5 2302 strd r2, r3, [r5, #8] - setLe64(ds->dataLength, m_dataLength); - 5bd0: e9d6 2302 ldrd r2, r3, [r6, #8] - 5bd4: e9c5 2306 strd r2, r3, [r5, #24] - 5bd8: f891 3210 ldrb.w r3, [r1, #528] ; 0x210 - 5bdc: f043 0301 orr.w r3, r3, #1 - 5be0: f881 3210 strb.w r3, [r1, #528] ; 0x210 - bool skip = data[0] == EXFAT_TYPE_FILE; - 5be4: 7828 ldrb r0, [r5, #0] - void dataCacheDirty() {m_dataCache.dirty();} - 5be6: e7a7 b.n 5b38 - 5be8: 1fff9770 .word 0x1fff9770 - -00005bec : -bool ExFatFile::sync() { - 5bec: b538 push {r3, r4, r5, lr} - if (!isOpen()) { - 5bee: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 5bf2: b343 cbz r3, 5c46 - if (m_flags & FILE_FLAG_DIR_DIRTY) { - 5bf4: f990 2033 ldrsb.w r2, [r0, #51] ; 0x33 - 5bf8: f890 3033 ldrb.w r3, [r0, #51] ; 0x33 - 5bfc: 2a00 cmp r2, #0 - 5bfe: 4604 mov r4, r0 - 5c00: db0c blt.n 5c1c - if (!m_vol->cacheSync()) { - 5c02: 6a05 ldr r5, [r0, #32] - return m_bitmapCache.sync() && m_dataCache.sync() && syncDevice(); - 5c04: 4628 mov r0, r5 - 5c06: f004 fc93 bl a530 - 5c0a: b978 cbnz r0, 5c2c - m_error |= WRITE_ERROR; - 5c0c: f894 3032 ldrb.w r3, [r4, #50] ; 0x32 - 5c10: f043 0301 orr.w r3, r3, #1 - 5c14: f884 3032 strb.w r3, [r4, #50] ; 0x32 - return false; - 5c18: 2000 movs r0, #0 -} - 5c1a: bd38 pop {r3, r4, r5, pc} - m_flags &= ~FILE_FLAG_DIR_DIRTY; - 5c1c: f003 037f and.w r3, r3, #127 ; 0x7f - 5c20: f880 3033 strb.w r3, [r0, #51] ; 0x33 -} - 5c24: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - return syncDir(); - 5c28: f7ff bf46 b.w 5ab8 - 5c2c: f505 7004 add.w r0, r5, #528 ; 0x210 - 5c30: f004 fc7e bl a530 - 5c34: 2800 cmp r0, #0 - 5c36: d0e9 beq.n 5c0c - 5c38: f8d5 0440 ldr.w r0, [r5, #1088] ; 0x440 - return m_blockDev->syncDevice(); - 5c3c: 6803 ldr r3, [r0, #0] - 5c3e: 6a1b ldr r3, [r3, #32] - 5c40: 4798 blx r3 - return m_bitmapCache.sync() && m_dataCache.sync() && syncDevice(); - 5c42: 2800 cmp r0, #0 - 5c44: d0e2 beq.n 5c0c - return true; - 5c46: 2001 movs r0, #1 -} - 5c48: bd38 pop {r3, r4, r5, pc} - 5c4a: bf00 nop - -00005c4c : -bool ExFatFile::addDirCluster() { - 5c4c: b570 push {r4, r5, r6, lr} - uint32_t dl = isRoot() ? m_vol->rootLength() : m_dataLength; - 5c4e: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 - 5c52: 065a lsls r2, r3, #25 -bool ExFatFile::addDirCluster() { - 5c54: 4605 mov r5, r0 - uint32_t dl = isRoot() ? m_vol->rootLength() : m_dataLength; - 5c56: d44c bmi.n 5cf2 - 5c58: 6880 ldr r0, [r0, #8] - uint32_t bytesPerCluster() const {return m_bytesPerCluster;} - 5c5a: 6a2b ldr r3, [r5, #32] - dl += m_vol->bytesPerCluster(); - 5c5c: f8d3 343c ldr.w r3, [r3, #1084] ; 0x43c - 5c60: 4418 add r0, r3 - if (dl >= 0X4000000) { - 5c62: f1b0 6f80 cmp.w r0, #67108864 ; 0x4000000 - 5c66: d301 bcc.n 5c6c -} - 5c68: 2000 movs r0, #0 - 5c6a: bd70 pop {r4, r5, r6, pc} - if (!addCluster()) { - 5c6c: 4628 mov r0, r5 - 5c6e: f7ff fe4f bl 5910 - 5c72: 2800 cmp r0, #0 - 5c74: d0f8 beq.n 5c68 - sector = m_vol->clusterStartSector(m_curCluster); - 5c76: 6a28 ldr r0, [r5, #32] - ((cluster - 2) << m_sectorsPerClusterShift); - 5c78: 69ae ldr r6, [r5, #24] - 5c7a: f890 2445 ldrb.w r2, [r0, #1093] ; 0x445 - 5c7e: f8d0 342c ldr.w r3, [r0, #1068] ; 0x42c - 5c82: 3e02 subs r6, #2 - 5c84: 4096 lsls r6, r2 - 5c86: 441e add r6, r3 - for (uint32_t i = 0; i < m_vol->sectorsPerCluster(); i++) { - 5c88: 2400 movs r4, #0 - return m_dataCache.prepare(sector, option); - 5c8a: 1931 adds r1, r6, r4 - 5c8c: 2205 movs r2, #5 - 5c8e: f500 7004 add.w r0, r0, #528 ; 0x210 - 5c92: f004 fc75 bl a580 - 5c96: 3401 adds r4, #1 - memset(cache, 0, m_vol->bytesPerSector()); - 5c98: f44f 7200 mov.w r2, #512 ; 0x200 - 5c9c: 2100 movs r1, #0 - if (!cache) { - 5c9e: 2800 cmp r0, #0 - 5ca0: d0e2 beq.n 5c68 - memset(cache, 0, m_vol->bytesPerSector()); - 5ca2: f00b fa67 bl 11174 - for (uint32_t i = 0; i < m_vol->sectorsPerCluster(); i++) { - 5ca6: 6a28 ldr r0, [r5, #32] - uint32_t sectorsPerCluster() const {return 1UL << m_sectorsPerClusterShift;} - 5ca8: f890 2445 ldrb.w r2, [r0, #1093] ; 0x445 - 5cac: 2301 movs r3, #1 - 5cae: 4093 lsls r3, r2 - 5cb0: 429c cmp r4, r3 - 5cb2: d3ea bcc.n 5c8a - if (!isRoot()) { - 5cb4: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 - 5cb8: 065b lsls r3, r3, #25 - 5cba: d415 bmi.n 5ce8 - m_flags |= FILE_FLAG_DIR_DIRTY; - 5cbc: f895 3033 ldrb.w r3, [r5, #51] ; 0x33 - m_dataLength += m_vol->bytesPerCluster(); - 5cc0: 68aa ldr r2, [r5, #8] - m_flags |= FILE_FLAG_DIR_DIRTY; - 5cc2: f063 037f orn r3, r3, #127 ; 0x7f - 5cc6: f885 3033 strb.w r3, [r5, #51] ; 0x33 - m_dataLength += m_vol->bytesPerCluster(); - 5cca: f8d0 143c ldr.w r1, [r0, #1084] ; 0x43c - m_validLength += m_vol->bytesPerCluster(); - 5cce: 692b ldr r3, [r5, #16] - m_dataLength += m_vol->bytesPerCluster(); - 5cd0: 68e8 ldr r0, [r5, #12] - 5cd2: 1852 adds r2, r2, r1 - 5cd4: 60aa str r2, [r5, #8] - m_validLength += m_vol->bytesPerCluster(); - 5cd6: 696a ldr r2, [r5, #20] - m_dataLength += m_vol->bytesPerCluster(); - 5cd8: f140 0000 adc.w r0, r0, #0 - m_validLength += m_vol->bytesPerCluster(); - 5cdc: 185b adds r3, r3, r1 - 5cde: f142 0200 adc.w r2, r2, #0 - 5ce2: e9c5 3204 strd r3, r2, [r5, #16] - m_dataLength += m_vol->bytesPerCluster(); - 5ce6: 60e8 str r0, [r5, #12] - return sync(); - 5ce8: 4628 mov r0, r5 -} - 5cea: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - return sync(); - 5cee: f7ff bf7d b.w 5bec - uint32_t dl = isRoot() ? m_vol->rootLength() : m_dataLength; - 5cf2: 6a00 ldr r0, [r0, #32] - 5cf4: f001 f9a6 bl 7044 - 5cf8: e7af b.n 5c5a - 5cfa: bf00 nop - -00005cfc : -bool ExFatFile::rename(ExFatFile* dirFile, const char* newPath) { - 5cfc: b530 push {r4, r5, lr} - 5cfe: 4604 mov r4, r0 - if (!(isFile() || isSubDir())) { - 5d00: f890 0031 ldrb.w r0, [r0, #49] ; 0x31 -bool ExFatFile::rename(ExFatFile* dirFile, const char* newPath) { - 5d04: b09d sub sp, #116 ; 0x74 - ExFatFile() {} - 5d06: 2500 movs r5, #0 - if (!(isFile() || isSubDir())) { - 5d08: f010 0f18 tst.w r0, #24 - 5d0c: 950c str r5, [sp, #48] ; 0x30 - 5d0e: 951a str r5, [sp, #104] ; 0x68 - 5d10: d003 beq.n 5d1a - if (m_vol != dirFile->m_vol) { - 5d12: 6a0b ldr r3, [r1, #32] - 5d14: 6a20 ldr r0, [r4, #32] - 5d16: 4298 cmp r0, r3 - 5d18: d002 beq.n 5d20 - return false; - 5d1a: 2000 movs r0, #0 -} - 5d1c: b01d add sp, #116 ; 0x74 - 5d1e: bd30 pop {r4, r5, pc} - if (!file.open(dirFile, newPath, O_CREAT | O_EXCL | O_WRONLY)) { - 5d20: f640 2301 movw r3, #2561 ; 0xa01 - 5d24: 4668 mov r0, sp - 5d26: f7ff fd71 bl 580c - 5d2a: 2800 cmp r0, #0 - 5d2c: d0f5 beq.n 5d1a - oldFile = *this; - 5d2e: 2234 movs r2, #52 ; 0x34 - 5d30: 4621 mov r1, r4 - 5d32: a80e add r0, sp, #56 ; 0x38 - 5d34: f006 f880 bl be38 - m_dirPos = file.m_dirPos; - 5d38: aa09 add r2, sp, #36 ; 0x24 - 5d3a: ca07 ldmia r2, {r0, r1, r2} - 5d3c: f104 0324 add.w r3, r4, #36 ; 0x24 - 5d40: e883 0007 stmia.w r3, {r0, r1, r2} - m_flags |= FILE_FLAG_DIR_DIRTY; - 5d44: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - m_setCount = file.m_setCount; - 5d48: f89d c030 ldrb.w ip, [sp, #48] ; 0x30 - 5d4c: f884 c030 strb.w ip, [r4, #48] ; 0x30 - m_flags |= FILE_FLAG_DIR_DIRTY; - 5d50: f063 037f orn r3, r3, #127 ; 0x7f - if (!sync()) { - 5d54: 4620 mov r0, r4 - m_flags |= FILE_FLAG_DIR_DIRTY; - 5d56: f884 3033 strb.w r3, [r4, #51] ; 0x33 - if (!sync()) { - 5d5a: f7ff ff47 bl 5bec - 5d5e: 2800 cmp r0, #0 - 5d60: d0db beq.n 5d1a - oldFile.m_flags = FILE_FLAG_WRITE; - 5d62: 2202 movs r2, #2 - oldFile.m_attributes = FILE_ATTR_FILE; - 5d64: 2308 movs r3, #8 - return oldFile.remove(); - 5d66: a80e add r0, sp, #56 ; 0x38 - oldFile.m_firstCluster = 0; - 5d68: 9515 str r5, [sp, #84] ; 0x54 - oldFile.m_flags = FILE_FLAG_WRITE; - 5d6a: f88d 206b strb.w r2, [sp, #107] ; 0x6b - oldFile.m_attributes = FILE_ATTR_FILE; - 5d6e: f88d 3069 strb.w r3, [sp, #105] ; 0x69 - return oldFile.remove(); - 5d72: f7ff fe17 bl 59a4 - 5d76: e7d1 b.n 5d1c - -00005d78 : -bool ExFatFile::mkdir(ExFatFile* parent, ExName_t* fname) { - 5d78: b538 push {r3, r4, r5, lr} - if (!parent->isDir()) { - 5d7a: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 - 5d7e: f013 0f50 tst.w r3, #80 ; 0x50 - 5d82: d102 bne.n 5d8a - return false; - 5d84: 2500 movs r5, #0 -} - 5d86: 4628 mov r0, r5 - 5d88: bd38 pop {r3, r4, r5, pc} - if (!openPrivate(parent, fname, O_CREAT | O_EXCL | O_RDWR)) { - 5d8a: f640 2302 movw r3, #2562 ; 0xa02 - 5d8e: 4604 mov r4, r0 - 5d90: f7ff fb72 bl 5478 - 5d94: 2800 cmp r0, #0 - 5d96: d0f5 beq.n 5d84 - m_attributes = FILE_ATTR_SUBDIR; - 5d98: 2310 movs r3, #16 - 5d9a: f884 3031 strb.w r3, [r4, #49] ; 0x31 - if (!addDirCluster()) { - 5d9e: 4620 mov r0, r4 - 5da0: f7ff ff54 bl 5c4c - 5da4: 4605 mov r5, r0 - 5da6: 2800 cmp r0, #0 - 5da8: d0ec beq.n 5d84 - m_firstCluster = m_curCluster; - 5daa: 69a3 ldr r3, [r4, #24] - 5dac: 61e3 str r3, [r4, #28] - seekSet(0); - 5dae: 2200 movs r2, #0 - 5db0: 2300 movs r3, #0 - 5db2: 4620 mov r0, r4 - 5db4: f7ff faf0 bl 5398 - if (!isOpen()) { - 5db8: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 - m_flags = FILE_FLAG_READ | FILE_FLAG_CONTIGUOUS | FILE_FLAG_DIR_DIRTY; - 5dbc: 22c1 movs r2, #193 ; 0xc1 - 5dbe: f884 2033 strb.w r2, [r4, #51] ; 0x33 - if (!isOpen()) { - 5dc2: 2b00 cmp r3, #0 - 5dc4: d0df beq.n 5d86 - m_flags &= ~FILE_FLAG_DIR_DIRTY; - 5dc6: 2341 movs r3, #65 ; 0x41 - 5dc8: f884 3033 strb.w r3, [r4, #51] ; 0x33 - return syncDir(); - 5dcc: 4620 mov r0, r4 -} - 5dce: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - return syncDir(); - 5dd2: f7ff be71 b.w 5ab8 - 5dd6: bf00 nop - -00005dd8 : -bool ExFatFile::mkdir(ExFatFile* parent, const char* path, bool pFlag) { - 5dd8: b5f0 push {r4, r5, r6, r7, lr} - 5dda: 4604 mov r4, r0 - 5ddc: b097 sub sp, #92 ; 0x5c - 5dde: 461f mov r7, r3 - if (isOpen() || !parent->isDir()) { - 5de0: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 -bool ExFatFile::mkdir(ExFatFile* parent, const char* path, bool pFlag) { - 5de4: 9201 str r2, [sp, #4] - 5de6: 2000 movs r0, #0 - 5de8: f8ad 0014 strh.w r0, [sp, #20] - ExFatFile() {} - 5dec: 9014 str r0, [sp, #80] ; 0x50 - if (isOpen() || !parent->isDir()) { - 5dee: bb7b cbnz r3, 5e50 - 5df0: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 - 5df4: f013 0f50 tst.w r3, #80 ; 0x50 - 5df8: 460d mov r5, r1 - 5dfa: d029 beq.n 5e50 - if (isDirSeparator(*path)) { - 5dfc: 7813 ldrb r3, [r2, #0] - 5dfe: 2b2f cmp r3, #47 ; 0x2f - 5e00: 4611 mov r1, r2 - 5e02: d119 bne.n 5e38 - 5e04: e027 b.n 5e56 - if (!*path) { - 5e06: 9e01 ldr r6, [sp, #4] - 5e08: 7836 ldrb r6, [r6, #0] - 5e0a: 2e00 cmp r6, #0 - 5e0c: d031 beq.n 5e72 - if (!openPrivate(parent, &fname, O_RDONLY)) { - 5e0e: f7ff fb33 bl 5478 - 5e12: 4603 mov r3, r0 - if (!pFlag || !mkdir(parent, &fname)) { - 5e14: aa02 add r2, sp, #8 - 5e16: 4629 mov r1, r5 - 5e18: 4620 mov r0, r4 - if (!openPrivate(parent, &fname, O_RDONLY)) { - 5e1a: b91b cbnz r3, 5e24 - if (!pFlag || !mkdir(parent, &fname)) { - 5e1c: b1c7 cbz r7, 5e50 - 5e1e: f7ff ffab bl 5d78 - 5e22: b1a8 cbz r0, 5e50 - tmpDir = *this; - 5e24: 4621 mov r1, r4 - 5e26: 2234 movs r2, #52 ; 0x34 - 5e28: a808 add r0, sp, #32 - 5e2a: f006 f805 bl be38 - close(); - 5e2e: 4620 mov r0, r4 - 5e30: f7ff f930 bl 5094 - if (!parsePathName(path, &fname, &path)) { - 5e34: 9901 ldr r1, [sp, #4] - parent = &tmpDir; - 5e36: ad08 add r5, sp, #32 - if (!parsePathName(path, &fname, &path)) { - 5e38: ab01 add r3, sp, #4 - 5e3a: aa02 add r2, sp, #8 - 5e3c: 4620 mov r0, r4 - 5e3e: f7ff f96b bl 5118 - 5e42: 4606 mov r6, r0 - if (!openPrivate(parent, &fname, O_RDONLY)) { - 5e44: 2300 movs r3, #0 - 5e46: aa02 add r2, sp, #8 - 5e48: 4629 mov r1, r5 - 5e4a: 4620 mov r0, r4 - if (!parsePathName(path, &fname, &path)) { - 5e4c: 2e00 cmp r6, #0 - 5e4e: d1da bne.n 5e06 - return false; - 5e50: 2000 movs r0, #0 -} - 5e52: b017 add sp, #92 ; 0x5c - 5e54: bdf0 pop {r4, r5, r6, r7, pc} - path++; - 5e56: 3101 adds r1, #1 - 5e58: 9101 str r1, [sp, #4] - while (isDirSeparator(*path)) { - 5e5a: 780b ldrb r3, [r1, #0] - 5e5c: 2b2f cmp r3, #47 ; 0x2f - 5e5e: d0fa beq.n 5e56 - if (!tmpDir.openRoot(parent->m_vol)) { - 5e60: 6a29 ldr r1, [r5, #32] - 5e62: a808 add r0, sp, #32 - 5e64: f7ff f944 bl 50f0 - 5e68: 2800 cmp r0, #0 - 5e6a: d0f1 beq.n 5e50 - if (!parsePathName(path, &fname, &path)) { - 5e6c: 9901 ldr r1, [sp, #4] - parent = &tmpDir; - 5e6e: ad08 add r5, sp, #32 - 5e70: e7e2 b.n 5e38 - return mkdir(parent, &fname); - 5e72: aa02 add r2, sp, #8 - 5e74: f7ff ff80 bl 5d78 -} - 5e78: b017 add sp, #92 ; 0x5c - 5e7a: bdf0 pop {r4, r5, r6, r7, pc} - -00005e7c : -//------------------------------------------------------------------------------ -bool ExFatFile::timestamp(uint8_t flags, uint16_t year, uint8_t month, - uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { - 5e7c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - || month > 12 - || day < 1 - || day > 31 - || hour > 23 - || minute > 59 - || second > 59) { - 5e80: f890 4031 ldrb.w r4, [r0, #49] ; 0x31 - uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { - 5e84: b083 sub sp, #12 - || second > 59) { - 5e86: 0724 lsls r4, r4, #28 - uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { - 5e88: f89d 7030 ldrb.w r7, [sp, #48] ; 0x30 - 5e8c: f89d 9034 ldrb.w r9, [sp, #52] ; 0x34 - 5e90: f89d a038 ldrb.w sl, [sp, #56] ; 0x38 - 5e94: f89d 803c ldrb.w r8, [sp, #60] ; 0x3c - || second > 59) { - 5e98: d557 bpl.n 5f4a - || year < 1980 - 5e9a: f2a2 72bc subw r2, r2, #1980 ; 0x7bc - 5e9e: b294 uxth r4, r2 - 5ea0: 2c7f cmp r4, #127 ; 0x7f - 5ea2: d852 bhi.n 5f4a - || month < 1 - 5ea4: 1e5a subs r2, r3, #1 - 5ea6: 2a0b cmp r2, #11 - 5ea8: 9301 str r3, [sp, #4] - 5eaa: d84e bhi.n 5f4a - || day < 1 - 5eac: 1e7a subs r2, r7, #1 - 5eae: 2a1e cmp r2, #30 - 5eb0: d84b bhi.n 5f4a - || hour > 23 - 5eb2: f1b9 0f17 cmp.w r9, #23 - 5eb6: d848 bhi.n 5f4a - || minute > 59 - 5eb8: f1ba 0f3b cmp.w sl, #59 ; 0x3b - 5ebc: d845 bhi.n 5f4a - || second > 59) { - 5ebe: f1b8 0f3b cmp.w r8, #59 ; 0x3b - 5ec2: d842 bhi.n 5f4a - DBG_FAIL_MACRO; - goto fail; - } - // update directory entry - if (!sync()) { - 5ec4: 4605 mov r5, r0 - 5ec6: 460e mov r6, r1 - 5ec8: f7ff fe90 bl 5bec - 5ecc: 2800 cmp r0, #0 - 5ece: d03c beq.n 5f4a - year << 9 | month << 5 | day; - 5ed0: 9b01 ldr r3, [sp, #4] - 5ed2: ea47 1743 orr.w r7, r7, r3, lsl #5 - 5ed6: ea47 2444 orr.w r4, r7, r4, lsl #9 - hour << 11 | minute << 5 | second >> 1; - 5eda: ea4f 0758 mov.w r7, r8, lsr #1 - 5ede: ea47 174a orr.w r7, r7, sl, lsl #5 - 5ee2: ea47 27c9 orr.w r7, r7, r9, lsl #11 - goto fail; - } - - date = FS_DATE(year, month, day); - time = FS_TIME(hour, minute, second); - ms10 = second & 1 ? 100 : 0; - 5ee6: f04f 0a00 mov.w sl, #0 - 5eea: f018 0801 ands.w r8, r8, #1 - year << 9 | month << 5 | day; - 5eee: b2a4 uxth r4, r4 - hour << 11 | minute << 5 | second >> 1; - 5ef0: b2bf uxth r7, r7 - 5ef2: bf18 it ne - 5ef4: f04f 0864 movne.w r8, #100 ; 0x64 - uint16_t checksum = 0; - 5ef8: 46d3 mov fp, sl - 5efa: 4651 mov r1, sl - switch (cache[0]) { - case EXFAT_TYPE_FILE: - df = reinterpret_cast(cache); - setLe16(df->attributes, m_attributes & FILE_ATTR_COPY); - m_vol->dataCacheDirty(); - if (flags & T_ACCESS) { - 5efc: f006 0901 and.w r9, r6, #1 - cache = dirCache(is, FsCache::CACHE_FOR_READ); - 5f00: 2200 movs r2, #0 - 5f02: 4628 mov r0, r5 - 5f04: f7ff f8a8 bl 5058 - if (!cache) { - 5f08: b1f8 cbz r0, 5f4a - switch (cache[0]) { - 5f0a: 7801 ldrb r1, [r0, #0] - 5f0c: 2985 cmp r1, #133 ; 0x85 - 5f0e: d046 beq.n 5f9e - 5f10: f101 0340 add.w r3, r1, #64 ; 0x40 - 5f14: b2db uxtb r3, r3 - 5f16: 2b01 cmp r3, #1 - 5f18: d817 bhi.n 5f4a - uint16_t checksum = 0; - 5f1a: 468c mov ip, r1 - for (size_t i = 0; i < 32; i += i == 1 && skip ? 3 : 1) { - 5f1c: 2200 movs r2, #0 - 5f1e: e003 b.n 5f28 - 5f20: 2a1f cmp r2, #31 - 5f22: d816 bhi.n 5f52 - checksum = ((checksum << 15) | (checksum >> 1)) + data[i]; - 5f24: f810 c002 ldrb.w ip, [r0, r2] - 5f28: ea4f 33cb mov.w r3, fp, lsl #15 - 5f2c: ea43 035b orr.w r3, r3, fp, lsr #1 - 5f30: fa1c f383 uxtah r3, ip, r3 - for (size_t i = 0; i < 32; i += i == 1 && skip ? 3 : 1) { - 5f34: 2a01 cmp r2, #1 - checksum = ((checksum << 15) | (checksum >> 1)) + data[i]; - 5f36: fa1f fb83 uxth.w fp, r3 - for (size_t i = 0; i < 32; i += i == 1 && skip ? 3 : 1) { - 5f3a: f102 0201 add.w r2, r2, #1 - 5f3e: d1ef bne.n 5f20 - 5f40: 2985 cmp r1, #133 ; 0x85 - 5f42: bf14 ite ne - 5f44: 2202 movne r2, #2 - 5f46: 2204 moveq r2, #4 - 5f48: e7ec b.n 5f24 - } - return true; - - fail: - return false; -} - 5f4a: 2000 movs r0, #0 - 5f4c: b003 add sp, #12 - 5f4e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - for (uint8_t is = 0; is <= m_setCount; is++) { - 5f52: f895 3030 ldrb.w r3, [r5, #48] ; 0x30 - 5f56: f10a 0a01 add.w sl, sl, #1 - 5f5a: fa5f f18a uxtb.w r1, sl - 5f5e: 428b cmp r3, r1 - 5f60: d2ce bcs.n 5f00 - (m_vol->dirCache(&m_dirPos, FsCache::CACHE_FOR_WRITE)); - 5f62: 6a28 ldr r0, [r5, #32] - 5f64: 2201 movs r2, #1 - 5f66: f105 0124 add.w r1, r5, #36 ; 0x24 - 5f6a: f000 fec9 bl 6d00 - if (!df) { - 5f6e: 2800 cmp r0, #0 - 5f70: d0eb beq.n 5f4a - if (!m_vol->cacheSync()) { - 5f72: 6a2c ldr r4, [r5, #32] - *reinterpret_cast(dst) = src; - 5f74: f8a0 b002 strh.w fp, [r0, #2] - return m_bitmapCache.sync() && m_dataCache.sync() && syncDevice(); - 5f78: 4620 mov r0, r4 - 5f7a: f004 fad9 bl a530 - 5f7e: 2800 cmp r0, #0 - 5f80: d0e3 beq.n 5f4a - 5f82: f504 7004 add.w r0, r4, #528 ; 0x210 - 5f86: f004 fad3 bl a530 - 5f8a: 2800 cmp r0, #0 - 5f8c: d0dd beq.n 5f4a - 5f8e: f8d4 0440 ldr.w r0, [r4, #1088] ; 0x440 - return m_blockDev->syncDevice(); - 5f92: 6803 ldr r3, [r0, #0] - 5f94: 6a1b ldr r3, [r3, #32] -} - 5f96: b003 add sp, #12 - 5f98: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 5f9c: 4718 bx r3 - setLe16(df->attributes, m_attributes & FILE_ATTR_COPY); - 5f9e: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 - m_vol->dataCacheDirty(); - 5fa2: 6a2a ldr r2, [r5, #32] - setLe16(df->attributes, m_attributes & FILE_ATTR_COPY); - 5fa4: f003 0337 and.w r3, r3, #55 ; 0x37 - 5fa8: 8083 strh r3, [r0, #4] - 5faa: f892 3210 ldrb.w r3, [r2, #528] ; 0x210 - 5fae: f043 0301 orr.w r3, r3, #1 - 5fb2: f882 3210 strb.w r3, [r2, #528] ; 0x210 - if (flags & T_ACCESS) { - 5fb6: f1b9 0f00 cmp.w r9, #0 - 5fba: d001 beq.n 5fc0 - 5fbc: 8207 strh r7, [r0, #16] - 5fbe: 8244 strh r4, [r0, #18] - if (flags & T_CREATE) { - 5fc0: 07b2 lsls r2, r6, #30 - 5fc2: d503 bpl.n 5fcc - df->createTimeMs = ms10; - 5fc4: f880 8014 strb.w r8, [r0, #20] - 5fc8: 8107 strh r7, [r0, #8] - 5fca: 8144 strh r4, [r0, #10] - if (flags & T_WRITE) { - 5fcc: 0773 lsls r3, r6, #29 - bool skip = data[0] == EXFAT_TYPE_FILE; - 5fce: 7801 ldrb r1, [r0, #0] - df->modifyTimeMs = ms10; - 5fd0: bf42 ittt mi - 5fd2: f880 8015 strbmi.w r8, [r0, #21] - 5fd6: 8187 strhmi r7, [r0, #12] - 5fd8: 81c4 strhmi r4, [r0, #14] -} - 5fda: e79e b.n 5f1a - -00005fdc : - bool isWritable() const {return m_flags & FILE_FLAG_WRITE;} - 5fdc: f890 3033 ldrb.w r3, [r0, #51] ; 0x33 -//------------------------------------------------------------------------------ -bool ExFatFile::truncate() { - uint32_t toFree; - // error if not a normal file or read-only - if (!isWritable()) { - 5fe0: 079a lsls r2, r3, #30 - 5fe2: d564 bpl.n 60ae -bool ExFatFile::truncate() { - 5fe4: b570 push {r4, r5, r6, lr} - DBG_FAIL_MACRO; - goto fail; - } - if (m_firstCluster == 0) { - 5fe6: 69c5 ldr r5, [r0, #28] -bool ExFatFile::truncate() { - 5fe8: b082 sub sp, #8 - 5fea: 4604 mov r4, r0 - if (m_firstCluster == 0) { - 5fec: 2d00 cmp r5, #0 - 5fee: d035 beq.n 605c - return true; - } - if (isContiguous()) { - 5ff0: f013 0640 ands.w r6, r3, #64 ; 0x40 - 5ff4: d035 beq.n 6062 - uint32_t nc = 1 + ((m_dataLength - 1) >> m_vol->bytesPerClusterShift()); - 5ff6: 6a00 ldr r0, [r0, #32] - 5ff8: 68a2 ldr r2, [r4, #8] - return m_bytesPerSectorShift + m_sectorsPerClusterShift; - 5ffa: f890 c445 ldrb.w ip, [r0, #1093] ; 0x445 - 5ffe: 68e1 ldr r1, [r4, #12] - 6000: f10c 0c09 add.w ip, ip, #9 - 6004: fa5f fc8c uxtb.w ip, ip - 6008: 3a01 subs r2, #1 - 600a: f141 31ff adc.w r1, r1, #4294967295 ; 0xffffffff - 600e: f1cc 0e20 rsb lr, ip, #32 - 6012: fa22 f20c lsr.w r2, r2, ip - 6016: fa01 fe0e lsl.w lr, r1, lr - 601a: f1ac 0c20 sub.w ip, ip, #32 - 601e: fa21 fc0c lsr.w ip, r1, ip - 6022: ea42 020e orr.w r2, r2, lr - if (m_curCluster) { - 6026: 69a1 ldr r1, [r4, #24] - uint32_t nc = 1 + ((m_dataLength - 1) >> m_vol->bytesPerClusterShift()); - 6028: ea42 020c orr.w r2, r2, ip - 602c: 3201 adds r2, #1 - if (m_curCluster) { - 602e: b321 cbz r1, 607a - toFree = m_curCluster + 1; - nc -= 1 + m_curCluster - m_firstCluster; - 6030: 3d01 subs r5, #1 - 6032: 1a6d subs r5, r5, r1 - toFree = m_curCluster + 1; - 6034: 3101 adds r1, #1 - nc -= 1 + m_curCluster - m_firstCluster; - 6036: 442a add r2, r5 - toFree = m_curCluster + 1; - 6038: 9101 str r1, [sp, #4] - } else { - toFree = m_firstCluster; - m_firstCluster = 0; - } - if (nc && !m_vol->bitmapModify(toFree, nc, 0)) { - 603a: 2a00 cmp r2, #0 - 603c: d12e bne.n 609c - DBG_FAIL_MACRO; - goto fail; - } - } - } - m_dataLength = m_curPosition; - 603e: e9d4 0100 ldrd r0, r1, [r4] - m_validLength = m_curPosition; - m_flags |= FILE_FLAG_DIR_DIRTY; - 6042: f063 037f orn r3, r3, #127 ; 0x7f - m_dataLength = m_curPosition; - 6046: e9c4 0102 strd r0, r1, [r4, #8] - m_validLength = m_curPosition; - 604a: e9c4 0104 strd r0, r1, [r4, #16] - m_flags |= FILE_FLAG_DIR_DIRTY; - 604e: f884 3033 strb.w r3, [r4, #51] ; 0x33 - return sync(); - 6052: 4620 mov r0, r4 - 6054: f7ff fdca bl 5bec - - fail: - return false; -} - 6058: b002 add sp, #8 - 605a: bd70 pop {r4, r5, r6, pc} - return true; - 605c: 2001 movs r0, #1 -} - 605e: b002 add sp, #8 - 6060: bd70 pop {r4, r5, r6, pc} - if (m_curCluster) { - 6062: 6981 ldr r1, [r0, #24] - 6064: b961 cbnz r1, 6080 - toFree = m_firstCluster; - 6066: 9501 str r5, [sp, #4] - m_firstCluster = 0; - 6068: 61c1 str r1, [r0, #28] - if (!m_vol->freeChain(toFree)) { - 606a: 6a20 ldr r0, [r4, #32] - 606c: 4629 mov r1, r5 - 606e: f000 fee5 bl 6e3c - 6072: b1c8 cbz r0, 60a8 - m_flags |= FILE_FLAG_DIR_DIRTY; - 6074: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - 6078: e7e1 b.n 603e - toFree = m_firstCluster; - 607a: 9501 str r5, [sp, #4] - m_firstCluster = 0; - 607c: 61e1 str r1, [r4, #28] - 607e: e7dc b.n 603a - int8_t fg = m_vol->fatGet(m_curCluster, &toFree); - 6080: 6a00 ldr r0, [r0, #32] - toFree = 0; - 6082: 9601 str r6, [sp, #4] - int8_t fg = m_vol->fatGet(m_curCluster, &toFree); - 6084: aa01 add r2, sp, #4 - 6086: f000 fe99 bl 6dbc - if (fg < 0) { - 608a: 2800 cmp r0, #0 - 608c: db0c blt.n 60a8 - if (fg) { - 608e: d110 bne.n 60b2 - if (toFree) { - 6090: 9d01 ldr r5, [sp, #4] - 6092: 2d00 cmp r5, #0 - 6094: d1e9 bne.n 606a - m_flags |= FILE_FLAG_DIR_DIRTY; - 6096: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - 609a: e7d0 b.n 603e - if (nc && !m_vol->bitmapModify(toFree, nc, 0)) { - 609c: 9901 ldr r1, [sp, #4] - 609e: 2300 movs r3, #0 - 60a0: f000 fdae bl 6c00 - 60a4: 2800 cmp r0, #0 - 60a6: d1e5 bne.n 6074 - return false; - 60a8: 2000 movs r0, #0 -} - 60aa: b002 add sp, #8 - 60ac: bd70 pop {r4, r5, r6, pc} - return false; - 60ae: 2000 movs r0, #0 -} - 60b0: 4770 bx lr - if (!m_vol->fatPut(m_curCluster, EXFAT_EOC)) { - 60b2: 69a1 ldr r1, [r4, #24] - 60b4: 6a20 ldr r0, [r4, #32] - 60b6: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 60ba: f000 fe9f bl 6dfc - 60be: 2800 cmp r0, #0 - 60c0: d1e6 bne.n 6090 - 60c2: e7f1 b.n 60a8 - -000060c4 : -//------------------------------------------------------------------------------ -size_t ExFatFile::write(const void* buf, size_t nbyte) { - 60c4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 60c8: f890 3033 ldrb.w r3, [r0, #51] ; 0x33 - - // number of bytes left to write - must be before goto statements - size_t toWrite = nbyte; - size_t n; - // error if not an open file or is read-only - if (!isWritable()) { - 60cc: 079d lsls r5, r3, #30 -size_t ExFatFile::write(const void* buf, size_t nbyte) { - 60ce: 4604 mov r4, r0 - if (!isWritable()) { - 60d0: f140 80a2 bpl.w 6218 - DBG_FAIL_MACRO; - goto fail; - } - // seek to end of file if append flag - if ((m_flags & FILE_FLAG_APPEND)) { - 60d4: 4617 mov r7, r2 - 60d6: 071a lsls r2, r3, #28 - 60d8: 460e mov r6, r1 - 60da: f100 8096 bmi.w 620a - if (!seekSet(m_validLength)) { - DBG_FAIL_MACRO; - goto fail; - } - } - while (toWrite) { - 60de: 2f00 cmp r7, #0 - 60e0: f000 8128 beq.w 6334 - if (m_curPosition > m_validLength) { - m_flags |= FILE_FLAG_DIR_DIRTY; - m_validLength = m_curPosition; - } - } - if (m_curPosition > m_dataLength) { - 60e4: 6823 ldr r3, [r4, #0] - 60e6: 463d mov r5, r7 - clusterOffset = m_curPosition & m_vol->clusterMask(); - 60e8: 6a20 ldr r0, [r4, #32] - if (m_curCluster != 0) { - 60ea: 69a1 ldr r1, [r4, #24] - clusterOffset = m_curPosition & m_vol->clusterMask(); - 60ec: f8d0 2438 ldr.w r2, [r0, #1080] ; 0x438 - 60f0: ea02 0903 and.w r9, r2, r3 - sectorOffset = clusterOffset & m_vol->sectorMask(); - 60f4: f3c9 0808 ubfx r8, r9, #0, #9 - if (clusterOffset == 0) { - 60f8: f1b9 0f00 cmp.w r9, #0 - 60fc: f040 8095 bne.w 622a - if (m_curCluster != 0) { - 6100: 2900 cmp r1, #0 - 6102: f000 80d5 beq.w 62b0 - if (isContiguous()) { - 6106: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - 610a: 065b lsls r3, r3, #25 - 610c: f140 80ed bpl.w 62ea - lc += (m_dataLength - 1) >> m_vol->bytesPerClusterShift(); - 6110: e9d4 3202 ldrd r3, r2, [r4, #8] - 6114: f890 c445 ldrb.w ip, [r0, #1093] ; 0x445 - 6118: f10c 0c09 add.w ip, ip, #9 - 611c: 3b01 subs r3, #1 - 611e: fa5f fc8c uxtb.w ip, ip - 6122: f142 32ff adc.w r2, r2, #4294967295 ; 0xffffffff - 6126: f1cc 0e20 rsb lr, ip, #32 - 612a: fa23 f30c lsr.w r3, r3, ip - 612e: fa02 fe0e lsl.w lr, r2, lr - 6132: f1ac 0c20 sub.w ip, ip, #32 - 6136: fa22 fc0c lsr.w ip, r2, ip - 613a: ea43 030e orr.w r3, r3, lr - 613e: 69e2 ldr r2, [r4, #28] - 6140: ea43 030c orr.w r3, r3, ip - 6144: 4413 add r3, r2 - if (m_curCluster < lc) { - 6146: 4299 cmp r1, r3 - 6148: f080 80d6 bcs.w 62f8 - m_curCluster++; - 614c: 3101 adds r1, #1 - 614e: 61a1 str r1, [r4, #24] - ((cluster - 2) << m_sectorsPerClusterShift); - 6150: f890 2445 ldrb.w r2, [r0, #1093] ; 0x445 - sector = m_vol->clusterStartSector(m_curCluster) + - 6154: f8d0 342c ldr.w r3, [r0, #1068] ; 0x42c - 6158: 3902 subs r1, #2 - 615a: 4091 lsls r1, r2 - 615c: 4419 add r1, r3 - if (sectorOffset != 0 || toWrite < m_vol->bytesPerSector()) { - 615e: f5b5 7f00 cmp.w r5, #512 ; 0x200 - 6162: f0c0 808d bcc.w 6280 - } else if (toWrite >= 2*m_vol->bytesPerSector()) { - 6166: f5b5 6f80 cmp.w r5, #1024 ; 0x400 - 616a: f0c0 80a7 bcc.w 62bc - uint32_t sectorsPerCluster() const {return 1UL << m_sectorsPerClusterShift;} - 616e: 2301 movs r3, #1 - 6170: 4093 lsls r3, r2 - - (clusterOffset >> m_vol->bytesPerSectorShift()); - 6172: eba3 0309 sub.w r3, r3, r9 - uint32_t ns = toWrite >> m_vol->bytesPerSectorShift(); - 6176: 0a6a lsrs r2, r5, #9 - 6178: 4293 cmp r3, r2 - 617a: bf28 it cs - 617c: 4613 movcs r3, r2 - return sector <= m_sector && m_sector < (sector + count); - 617e: f8d0 221c ldr.w r2, [r0, #540] ; 0x21c - 6182: 428a cmp r2, r1 - n = ns << m_vol->bytesPerSectorShift(); - 6184: ea4f 2943 mov.w r9, r3, lsl #9 - 6188: d30a bcc.n 61a0 - 618a: eb03 0c01 add.w ip, r3, r1 - 618e: 4562 cmp r2, ip - 6190: d206 bcs.n 61a0 - m_status = 0; - 6192: 2200 movs r2, #0 - 6194: f880 2210 strb.w r2, [r0, #528] ; 0x210 - m_sector = 0XFFFFFFFF; - 6198: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 619c: f8c0 221c str.w r2, [r0, #540] ; 0x21c - return m_blockDev->writeSectors(sector, src, count); - 61a0: f8d0 0214 ldr.w r0, [r0, #532] ; 0x214 - 61a4: 6802 ldr r2, [r0, #0] - 61a6: f8d2 8028 ldr.w r8, [r2, #40] ; 0x28 - 61aa: 4632 mov r2, r6 - 61ac: 47c0 blx r8 - if (!m_vol->cacheSafeWrite(sector, src, ns)) { - 61ae: b398 cbz r0, 6218 - m_curPosition += n; - 61b0: 464b mov r3, r9 - 61b2: e9d4 1200 ldrd r1, r2, [r4] - 61b6: 185b adds r3, r3, r1 - if (m_curPosition > m_validLength) { - 61b8: 6921 ldr r1, [r4, #16] - 61ba: 6960 ldr r0, [r4, #20] - m_curPosition += n; - 61bc: f142 0200 adc.w r2, r2, #0 - if (m_curPosition > m_validLength) { - 61c0: 4299 cmp r1, r3 - 61c2: 4190 sbcs r0, r2 - m_curPosition += n; - 61c4: e9c4 3200 strd r3, r2, [r4] - src += n; - 61c8: 444e add r6, r9 - toWrite -= n; - 61ca: eba5 0509 sub.w r5, r5, r9 - if (m_curPosition > m_validLength) { - 61ce: d207 bcs.n 61e0 - m_flags |= FILE_FLAG_DIR_DIRTY; - 61d0: f894 1033 ldrb.w r1, [r4, #51] ; 0x33 - m_validLength = m_curPosition; - 61d4: 6123 str r3, [r4, #16] - m_flags |= FILE_FLAG_DIR_DIRTY; - 61d6: f061 017f orn r1, r1, #127 ; 0x7f - 61da: f884 1033 strb.w r1, [r4, #51] ; 0x33 - m_validLength = m_curPosition; - 61de: 6162 str r2, [r4, #20] - while (toWrite) { - 61e0: 2d00 cmp r5, #0 - 61e2: d181 bne.n 60e8 - if (m_curPosition > m_dataLength) { - 61e4: e9d4 0102 ldrd r0, r1, [r4, #8] - 61e8: 4298 cmp r0, r3 - 61ea: 4191 sbcs r1, r2 - 61ec: f0c0 8095 bcc.w 631a - m_dataLength = m_curPosition; - // update fileSize and insure sync will update dir entry - m_flags |= FILE_FLAG_DIR_DIRTY; - } else if (FsDateTime::callback) { - 61f0: 4b52 ldr r3, [pc, #328] ; (633c ) - 61f2: 681b ldr r3, [r3, #0] - 61f4: 2b00 cmp r3, #0 - 61f6: f000 809b beq.w 6330 - // insure sync will update modified date and time - m_flags |= FILE_FLAG_DIR_DIRTY; - 61fa: f894 3033 ldrb.w r3, [r4, #51] ; 0x33 - 61fe: f063 037f orn r3, r3, #127 ; 0x7f - 6202: 4638 mov r0, r7 - 6204: f884 3033 strb.w r3, [r4, #51] ; 0x33 - 6208: e00d b.n 6226 - if (!seekSet(m_validLength)) { - 620a: e9d0 2304 ldrd r2, r3, [r0, #16] - 620e: f7ff f8c3 bl 5398 - 6212: 2800 cmp r0, #0 - 6214: f47f af63 bne.w 60de - } - return nbyte; - - fail: - // return for write error - m_error |= WRITE_ERROR; - 6218: f894 3032 ldrb.w r3, [r4, #50] ; 0x32 - 621c: f043 0301 orr.w r3, r3, #1 - return 0; - 6220: 2000 movs r0, #0 - m_error |= WRITE_ERROR; - 6222: f884 3032 strb.w r3, [r4, #50] ; 0x32 -} - 6226: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - ((cluster - 2) << m_sectorsPerClusterShift); - 622a: f890 2445 ldrb.w r2, [r0, #1093] ; 0x445 - sector = m_vol->clusterStartSector(m_curCluster) + - 622e: f8d0 342c ldr.w r3, [r0, #1068] ; 0x42c - 6232: 3902 subs r1, #2 - (clusterOffset >> m_vol->bytesPerSectorShift()); - 6234: ea4f 2959 mov.w r9, r9, lsr #9 - 6238: 4091 lsls r1, r2 - sector = m_vol->clusterStartSector(m_curCluster) + - 623a: 4449 add r1, r9 - 623c: 4419 add r1, r3 - if (sectorOffset != 0 || toWrite < m_vol->bytesPerSector()) { - 623e: f1b8 0f00 cmp.w r8, #0 - 6242: d08c beq.n 615e - n = m_vol->bytesPerSector() - sectorOffset; - 6244: f5c8 7900 rsb r9, r8, #512 ; 0x200 - 6248: 45a9 cmp r9, r5 - return m_dataCache.prepare(sector, option); - 624a: f04f 0201 mov.w r2, #1 - 624e: f500 7004 add.w r0, r0, #528 ; 0x210 - 6252: bf28 it cs - 6254: 46a9 movcs r9, r5 - 6256: f004 f993 bl a580 - if (!cache) { - 625a: 2800 cmp r0, #0 - 625c: d0dc beq.n 6218 - memcpy(dst, src, n); - 625e: 4440 add r0, r8 - 6260: 464a mov r2, r9 - 6262: 4631 mov r1, r6 - if (m_vol->bytesPerSector() == (n + sectorOffset)) { - 6264: 44c8 add r8, r9 - memcpy(dst, src, n); - 6266: f005 fde7 bl be38 - if (m_vol->bytesPerSector() == (n + sectorOffset)) { - 626a: f5b8 7f00 cmp.w r8, #512 ; 0x200 - 626e: 6a20 ldr r0, [r4, #32] - 6270: d19e bne.n 61b0 - bool dataCacheSync() {return m_dataCache.sync();} - 6272: f500 7004 add.w r0, r0, #528 ; 0x210 - 6276: f004 f95b bl a530 - if (!m_vol->dataCacheSync()) { - 627a: 2800 cmp r0, #0 - 627c: d198 bne.n 61b0 - 627e: e7cb b.n 6218 - if (sectorOffset == 0 && m_curPosition >= m_validLength) { - 6280: 6822 ldr r2, [r4, #0] - 6282: f8d4 c010 ldr.w ip, [r4, #16] - 6286: 6963 ldr r3, [r4, #20] - 6288: 4562 cmp r2, ip - 628a: 6862 ldr r2, [r4, #4] - 628c: eb72 0303 sbcs.w r3, r2, r3 - 6290: d212 bcs.n 62b8 - cacheOption = FsCache::CACHE_FOR_WRITE; - 6292: 2201 movs r2, #1 - return m_dataCache.prepare(sector, option); - 6294: f500 7004 add.w r0, r0, #528 ; 0x210 - 6298: f004 f972 bl a580 - if (!cache) { - 629c: 2800 cmp r0, #0 - 629e: d0bb beq.n 6218 - memcpy(dst, src, n); - 62a0: 462a mov r2, r5 - 62a2: 4631 mov r1, r6 - 62a4: 4440 add r0, r8 - 62a6: f005 fdc7 bl be38 - m_curPosition += n; - 62aa: 46a9 mov r9, r5 - 62ac: 462b mov r3, r5 - 62ae: e780 b.n 61b2 - if (m_firstCluster == 0) { - 62b0: 69e1 ldr r1, [r4, #28] - 62b2: b349 cbz r1, 6308 - m_curCluster = m_firstCluster; - 62b4: 61a1 str r1, [r4, #24] - 62b6: e74b b.n 6150 - cacheOption = FsCache::CACHE_RESERVE_FOR_WRITE; - 62b8: 2205 movs r2, #5 - 62ba: e7eb b.n 6294 - if (isCached(sector)) { - 62bc: f8d0 321c ldr.w r3, [r0, #540] ; 0x21c - 62c0: 428b cmp r3, r1 - 62c2: d106 bne.n 62d2 - m_status = 0; - 62c4: 2300 movs r3, #0 - 62c6: f880 3210 strb.w r3, [r0, #528] ; 0x210 - m_sector = 0XFFFFFFFF; - 62ca: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 62ce: f8c0 321c str.w r3, [r0, #540] ; 0x21c - return m_blockDev->writeSector(sector, src); - 62d2: f8d0 0214 ldr.w r0, [r0, #532] ; 0x214 - 62d6: 6803 ldr r3, [r0, #0] - 62d8: 4632 mov r2, r6 - 62da: 6a5b ldr r3, [r3, #36] ; 0x24 - 62dc: 4798 blx r3 - if (!m_vol->cacheSafeWrite(sector, src)) { - 62de: 2800 cmp r0, #0 - 62e0: d09a beq.n 6218 - 62e2: f44f 7300 mov.w r3, #512 ; 0x200 - n = m_vol->bytesPerSector(); - 62e6: 4699 mov r9, r3 - 62e8: e763 b.n 61b2 - fg = m_vol->fatGet(m_curCluster, &m_curCluster); - 62ea: f104 0218 add.w r2, r4, #24 - 62ee: f000 fd65 bl 6dbc - if (fg < 0) { - 62f2: 2800 cmp r0, #0 - 62f4: db90 blt.n 6218 - if (fg == 0) { - 62f6: d104 bne.n 6302 - if (!addCluster()) { - 62f8: 4620 mov r0, r4 - 62fa: f7ff fb09 bl 5910 - 62fe: 2800 cmp r0, #0 - 6300: d08a beq.n 6218 - sector = m_vol->clusterStartSector(m_curCluster) + - 6302: 69a1 ldr r1, [r4, #24] - 6304: 6a20 ldr r0, [r4, #32] - 6306: e723 b.n 6150 - if (!addCluster()) { - 6308: 4620 mov r0, r4 - 630a: f7ff fb01 bl 5910 - 630e: 2800 cmp r0, #0 - 6310: d082 beq.n 6218 - m_firstCluster = m_curCluster; - 6312: 69a1 ldr r1, [r4, #24] - sector = m_vol->clusterStartSector(m_curCluster) + - 6314: 6a20 ldr r0, [r4, #32] - m_firstCluster = m_curCluster; - 6316: 61e1 str r1, [r4, #28] - 6318: e71a b.n 6150 - m_flags |= FILE_FLAG_DIR_DIRTY; - 631a: f894 1033 ldrb.w r1, [r4, #51] ; 0x33 - m_dataLength = m_curPosition; - 631e: 60a3 str r3, [r4, #8] - m_flags |= FILE_FLAG_DIR_DIRTY; - 6320: f061 037f orn r3, r1, #127 ; 0x7f - 6324: f884 3033 strb.w r3, [r4, #51] ; 0x33 - m_dataLength = m_curPosition; - 6328: 60e2 str r2, [r4, #12] - m_flags |= FILE_FLAG_DIR_DIRTY; - 632a: 4638 mov r0, r7 -} - 632c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 6330: 4638 mov r0, r7 - 6332: e778 b.n 6226 - if (m_curPosition > m_dataLength) { - 6334: e9d4 3200 ldrd r3, r2, [r4] - 6338: e754 b.n 61e4 - 633a: bf00 nop - 633c: 1fff9770 .word 0x1fff9770 - -00006340 : - size_t write(const char *str) { if (str == nullptr) return 0; - 6340: b169 cbz r1, 635e - 6342: b570 push {r4, r5, r6, lr} - 6344: 4605 mov r5, r0 - return write((const uint8_t *)str, strlen(str)); } - 6346: 4608 mov r0, r1 - 6348: 460c mov r4, r1 - 634a: f00b fd99 bl 11e80 - 634e: 682b ldr r3, [r5, #0] - 6350: 4602 mov r2, r0 - 6352: 4621 mov r1, r4 - 6354: 4628 mov r0, r5 - 6356: 685b ldr r3, [r3, #4] - 6358: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - 635c: 4718 bx r3 - 635e: 4770 bx lr - -00006360 : - writeMsg(pr, "Format failed\r\n"); - return false; -} -//------------------------------------------------------------------------------ -bool ExFatFormatter::syncUpcase() { - uint16_t index = m_upcaseSize & SECTOR_MASK; - 6360: 6883 ldr r3, [r0, #8] - 6362: f3c3 0308 ubfx r3, r3, #0, #9 -bool ExFatFormatter::syncUpcase() { - 6366: 4601 mov r1, r0 - if (!index) { - 6368: b163 cbz r3, 6384 - return true; - } - for (size_t i = index; i < BYTES_PER_SECTOR; i++) { - m_secBuf[i] = 0; - 636a: 2000 movs r0, #0 - 636c: 690a ldr r2, [r1, #16] - 636e: 54d0 strb r0, [r2, r3] - for (size_t i = index; i < BYTES_PER_SECTOR; i++) { - 6370: 3301 adds r3, #1 - 6372: f5b3 7f00 cmp.w r3, #512 ; 0x200 - 6376: d1f9 bne.n 636c - } - return m_dev->writeSector(m_upcaseSector, m_secBuf); - 6378: 68c8 ldr r0, [r1, #12] - 637a: 690a ldr r2, [r1, #16] - 637c: 6803 ldr r3, [r0, #0] - 637e: 6809 ldr r1, [r1, #0] - 6380: 6a5b ldr r3, [r3, #36] ; 0x24 - 6382: 4718 bx r3 -} - 6384: 2001 movs r0, #1 - 6386: 4770 bx lr - -00006388 : -//------------------------------------------------------------------------------ -bool ExFatFormatter::writeUpcaseByte(uint8_t b) { - uint16_t index = m_upcaseSize & SECTOR_MASK; - 6388: 6882 ldr r2, [r0, #8] -bool ExFatFormatter::writeUpcaseByte(uint8_t b) { - 638a: 4603 mov r3, r0 - uint16_t index = m_upcaseSize & SECTOR_MASK; - 638c: f3c2 0208 ubfx r2, r2, #0, #9 - m_secBuf[index] = b; - 6390: 6900 ldr r0, [r0, #16] - 6392: 5481 strb r1, [r0, r2] - uint8_t mustBeZero2[2]; - uint8_t unicode3[4]; -} DirLfn_t; -//============================================================================= -inline uint32_t exFatChecksum(uint32_t sum, uint8_t data) { - return (sum << 31) + (sum >> 1) + data; - 6394: 6858 ldr r0, [r3, #4] - 6396: eb01 0170 add.w r1, r1, r0, ror #1 - m_upcaseChecksum = exFatChecksum(m_upcaseChecksum, b); - m_upcaseSize++; - 639a: 6898 ldr r0, [r3, #8] - m_upcaseChecksum = exFatChecksum(m_upcaseChecksum, b); - 639c: 6059 str r1, [r3, #4] - uint16_t index = m_upcaseSize & SECTOR_MASK; - 639e: f240 1cff movw ip, #511 ; 0x1ff - m_upcaseSize++; - 63a2: 3001 adds r0, #1 - if (index == SECTOR_MASK) { - 63a4: 4562 cmp r2, ip - m_upcaseSize++; - 63a6: 6098 str r0, [r3, #8] - if (index == SECTOR_MASK) { - 63a8: d001 beq.n 63ae - return m_dev->writeSector(m_upcaseSector++, m_secBuf); - } - return true; -} - 63aa: 2001 movs r0, #1 - 63ac: 4770 bx lr - return m_dev->writeSector(m_upcaseSector++, m_secBuf); - 63ae: 68d8 ldr r0, [r3, #12] - 63b0: 6819 ldr r1, [r3, #0] -bool ExFatFormatter::writeUpcaseByte(uint8_t b) { - 63b2: b410 push {r4} - return m_dev->writeSector(m_upcaseSector++, m_secBuf); - 63b4: 6804 ldr r4, [r0, #0] - 63b6: 6a64 ldr r4, [r4, #36] ; 0x24 - 63b8: 1c4a adds r2, r1, #1 - 63ba: 601a str r2, [r3, #0] - 63bc: 691a ldr r2, [r3, #16] - 63be: 4623 mov r3, r4 -} - 63c0: bc10 pop {r4} - return m_dev->writeSector(m_upcaseSector++, m_secBuf); - 63c2: 4718 bx r3 - -000063c4 : -//------------------------------------------------------------------------------ -bool ExFatFormatter::writeUpcaseUnicode(uint16_t unicode) { - 63c4: b538 push {r3, r4, r5, lr} - uint16_t index = m_upcaseSize & SECTOR_MASK; - 63c6: 6883 ldr r3, [r0, #8] -bool ExFatFormatter::writeUpcaseUnicode(uint16_t unicode) { - 63c8: 4604 mov r4, r0 - uint16_t index = m_upcaseSize & SECTOR_MASK; - 63ca: f3c3 0308 ubfx r3, r3, #0, #9 - m_secBuf[index] = b; - 63ce: 6900 ldr r0, [r0, #16] - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 63d0: b2ca uxtb r2, r1 - m_secBuf[index] = b; - 63d2: 54c2 strb r2, [r0, r3] -bool ExFatFormatter::writeUpcaseUnicode(uint16_t unicode) { - 63d4: 460d mov r5, r1 - 63d6: 6861 ldr r1, [r4, #4] - 63d8: eb02 0271 add.w r2, r2, r1, ror #1 - m_upcaseSize++; - 63dc: 68a1 ldr r1, [r4, #8] - m_upcaseChecksum = exFatChecksum(m_upcaseChecksum, b); - 63de: 6062 str r2, [r4, #4] - uint16_t index = m_upcaseSize & SECTOR_MASK; - 63e0: f240 12ff movw r2, #511 ; 0x1ff - m_upcaseSize++; - 63e4: 3101 adds r1, #1 - if (index == SECTOR_MASK) { - 63e6: 4293 cmp r3, r2 - m_upcaseSize++; - 63e8: 60a1 str r1, [r4, #8] - if (index == SECTOR_MASK) { - 63ea: d005 beq.n 63f8 - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 63ec: 0a29 lsrs r1, r5, #8 - 63ee: 4620 mov r0, r4 -} - 63f0: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 63f4: f7ff bfc8 b.w 6388 - return m_dev->writeSector(m_upcaseSector++, m_secBuf); - 63f8: 68e0 ldr r0, [r4, #12] - 63fa: 6821 ldr r1, [r4, #0] - 63fc: 6803 ldr r3, [r0, #0] - 63fe: 1c4a adds r2, r1, #1 - 6400: 6a5b ldr r3, [r3, #36] ; 0x24 - 6402: 6022 str r2, [r4, #0] - 6404: 6922 ldr r2, [r4, #16] - 6406: 4798 blx r3 - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 6408: 2800 cmp r0, #0 - 640a: d1ef bne.n 63ec -} - 640c: bd38 pop {r3, r4, r5, pc} - 640e: bf00 nop - -00006410 : -//------------------------------------------------------------------------------ -bool ExFatFormatter::writeUpcase(uint32_t sector) { - 6410: b5f8 push {r3, r4, r5, r6, r7, lr} - uint32_t n; - uint32_t ns; - uint32_t ch = 0; - uint16_t uc; - - m_upcaseSize = 0; - 6412: 2500 movs r5, #0 - m_upcaseChecksum = 0; - m_upcaseSector = sector; - 6414: e9c0 1500 strd r1, r5, [r0] -bool ExFatFormatter::writeUpcase(uint32_t sector) { - 6418: 4606 mov r6, r0 - m_upcaseSize = 0; - 641a: 6085 str r5, [r0, #8] - - while (ch < 0X10000) { - uc = toUpcase(ch); - 641c: b2a8 uxth r0, r5 - 641e: f004 f9f7 bl a810 - if (uc != ch) { - 6422: 42a8 cmp r0, r5 - uc = toUpcase(ch); - 6424: 4604 mov r4, r0 - if (uc != ch) { - 6426: d007 beq.n 6438 - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 6428: b2c1 uxtb r1, r0 - 642a: 4630 mov r0, r6 - 642c: f7ff ffac bl 6388 - 6430: 2800 cmp r0, #0 - 6432: d13b bne.n 64ac - } - return true; - - fail: - return false; -} - 6434: 2000 movs r0, #0 - 6436: bdf8 pop {r3, r4, r5, r6, r7, pc} - for (n = ch + 1; n < 0X10000 && n == toUpcase(n); n++) {} - 6438: 1c6c adds r4, r5, #1 - 643a: f5b4 3f80 cmp.w r4, #65536 ; 0x10000 - 643e: d104 bne.n 644a - 6440: e02a b.n 6498 - 6442: 3401 adds r4, #1 - 6444: f5b4 3f80 cmp.w r4, #65536 ; 0x10000 - 6448: d004 beq.n 6454 - 644a: b2a0 uxth r0, r4 - 644c: f004 f9e0 bl a810 - 6450: 42a0 cmp r0, r4 - 6452: d0f6 beq.n 6442 - ns = n - ch; - 6454: 1b67 subs r7, r4, r5 - if (ns >= MINIMUM_UPCASE_SKIP) { - 6456: f5b7 7f00 cmp.w r7, #512 ; 0x200 - 645a: d31d bcc.n 6498 - if (!writeUpcaseUnicode(0XFFFF) || !writeUpcaseUnicode(ns)) { - 645c: f64f 71ff movw r1, #65535 ; 0xffff - 6460: 4630 mov r0, r6 - 6462: f7ff ffaf bl 63c4 - 6466: 2800 cmp r0, #0 - 6468: d0e4 beq.n 6434 - 646a: b2b9 uxth r1, r7 - 646c: 4630 mov r0, r6 - 646e: f7ff ffa9 bl 63c4 - 6472: 2800 cmp r0, #0 - 6474: d0de beq.n 6434 - 6476: 4625 mov r5, r4 - while (ch < 0X10000) { - 6478: f5b5 3f80 cmp.w r5, #65536 ; 0x10000 - 647c: d1ce bne.n 641c - if (!syncUpcase()) { - 647e: 4630 mov r0, r6 -} - 6480: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - if (!syncUpcase()) { - 6484: f7ff bf6c b.w 6360 - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 6488: f3c5 2107 ubfx r1, r5, #8, #8 - 648c: 4630 mov r0, r6 - 648e: f7ff ff7b bl 6388 - 6492: 3501 adds r5, #1 - 6494: 2800 cmp r0, #0 - 6496: d0cd beq.n 6434 - while (ch < n) { - 6498: 42a5 cmp r5, r4 - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 649a: b2e9 uxtb r1, r5 - 649c: 4630 mov r0, r6 - while (ch < n) { - 649e: d2eb bcs.n 6478 - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 64a0: f7ff ff72 bl 6388 - 64a4: 2800 cmp r0, #0 - 64a6: d1ef bne.n 6488 -} - 64a8: 2000 movs r0, #0 - 64aa: bdf8 pop {r3, r4, r5, r6, r7, pc} - return writeUpcaseByte(unicode) && writeUpcaseByte(unicode >> 8); - 64ac: f3c4 2107 ubfx r1, r4, #8, #8 - 64b0: 4630 mov r0, r6 - 64b2: f7ff ff69 bl 6388 - 64b6: 2800 cmp r0, #0 - 64b8: d0bc beq.n 6434 - ch++; - 64ba: 3501 adds r5, #1 - 64bc: e7dc b.n 6478 - 64be: bf00 nop - -000064c0 : -bool ExFatFormatter::format(FsBlockDevice* dev, uint8_t* secBuf, print_t* pr) { - 64c0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 64c4: 460f mov r7, r1 - 64c6: b089 sub sp, #36 ; 0x24 - sectorCount = dev->sectorCount(); - 64c8: 6809 ldr r1, [r1, #0] -bool ExFatFormatter::format(FsBlockDevice* dev, uint8_t* secBuf, print_t* pr) { - 64ca: 9004 str r0, [sp, #16] - 64cc: 4615 mov r5, r2 - sectorCount = dev->sectorCount(); - 64ce: 69ca ldr r2, [r1, #28] - m_dev = dev; - 64d0: 60c7 str r7, [r0, #12] - m_secBuf = secBuf; - 64d2: 6105 str r5, [r0, #16] - sectorCount = dev->sectorCount(); - 64d4: 4638 mov r0, r7 -bool ExFatFormatter::format(FsBlockDevice* dev, uint8_t* secBuf, print_t* pr) { - 64d6: 4698 mov r8, r3 - sectorCount = dev->sectorCount(); - 64d8: 4790 blx r2 - if (sectorCount < 0X100000) { - 64da: f5b0 1f80 cmp.w r0, #1048576 ; 0x100000 - 64de: f0c0 80c0 bcc.w 6662 - 64e2: 4606 mov r6, r0 - for (m = 1, vs = 0; m && sectorCount > m; m <<= 1, vs++) {} - 64e4: 2300 movs r3, #0 - 64e6: 2201 movs r2, #1 - 64e8: 3301 adds r3, #1 - 64ea: b2db uxtb r3, r3 - 64ec: 2b20 cmp r3, #32 - 64ee: ea4f 0242 mov.w r2, r2, lsl #1 - 64f2: f000 80c1 beq.w 6678 - 64f6: 4296 cmp r6, r2 - 64f8: d8f6 bhi.n 64e8 - sectorsPerClusterShift = vs < 29 ? 8 : (vs - 11)/2; - 64fa: 2b1c cmp r3, #28 - 64fc: f200 80bc bhi.w 6678 - fatLength = 1UL << (vs < 27 ? 13 : (vs + 1)/2); - 6500: 2b1a cmp r3, #26 - sectorsPerClusterShift = vs < 29 ? 8 : (vs - 11)/2; - 6502: f04f 0a08 mov.w sl, #8 - fatLength = 1UL << (vs < 27 ? 13 : (vs + 1)/2); - 6506: f200 8237 bhi.w 6978 - 650a: f44f 4380 mov.w r3, #16384 ; 0x4000 - 650e: 9301 str r3, [sp, #4] - 6510: f44f 4300 mov.w r3, #32768 ; 0x8000 - 6514: 9303 str r3, [sp, #12] - sectorsPerCluster = 1UL << sectorsPerClusterShift; - 6516: f44f 7380 mov.w r3, #256 ; 0x100 - 651a: 9307 str r3, [sp, #28] - fatLength = 1UL << (vs < 27 ? 13 : (vs + 1)/2); - 651c: f44f 5300 mov.w r3, #8192 ; 0x2000 - sectorsPerCluster = 1UL << sectorsPerClusterShift; - 6520: f8cd a008 str.w sl, [sp, #8] - fatLength = 1UL << (vs < 27 ? 13 : (vs + 1)/2); - 6524: 9306 str r3, [sp, #24] - clusterCount = (sectorCount - 4*fatLength) >> sectorsPerClusterShift; - 6526: 9b03 ldr r3, [sp, #12] - 6528: 9802 ldr r0, [sp, #8] - volumeLength = clusterHeapOffset + (clusterCount << sectorsPerClusterShift); - 652a: 9c01 ldr r4, [sp, #4] - clusterCount = (sectorCount - 4*fatLength) >> sectorsPerClusterShift; - 652c: 1af3 subs r3, r6, r3 - 652e: 40c3 lsrs r3, r0 - volumeLength = clusterHeapOffset + (clusterCount << sectorsPerClusterShift); - 6530: fa03 f900 lsl.w r9, r3, r0 - memset(secBuf, 0, BYTES_PER_SECTOR); - 6534: f44f 7200 mov.w r2, #512 ; 0x200 - 6538: 2100 movs r1, #0 - 653a: 4628 mov r0, r5 - volumeLength = clusterHeapOffset + (clusterCount << sectorsPerClusterShift); - 653c: 9305 str r3, [sp, #20] - memset(secBuf, 0, BYTES_PER_SECTOR); - 653e: f00a fe19 bl 11174 - mbr->part->endCHS[1] = 0XFF; - 6542: 23ff movs r3, #255 ; 0xff - 6544: f885 31c4 strb.w r3, [r5, #452] ; 0x1c4 - mbr->part->endCHS[2] = 0XFF; - 6548: f885 31c5 strb.w r3, [r5, #453] ; 0x1c5 - mbr->part->type = 7; - 654c: 2307 movs r3, #7 - 654e: f885 31c2 strb.w r3, [r5, #450] ; 0x1c2 - volumeLength = clusterHeapOffset + (clusterCount << sectorsPerClusterShift); - 6552: 44a1 add r9, r4 - mbr->part->endCHS[0] = 0XFE; - 6554: 23fe movs r3, #254 ; 0xfe - *reinterpret_cast(dst) = src; - 6556: 9401 str r4, [sp, #4] - 6558: f8c5 41c6 str.w r4, [r5, #454] ; 0x1c6 - mbr->part->beginCHS[0] = 1; - 655c: 2401 movs r4, #1 - 655e: f885 41bf strb.w r4, [r5, #447] ; 0x1bf - mbr->part->beginCHS[1] = 1; - 6562: f885 41c0 strb.w r4, [r5, #448] ; 0x1c0 - mbr->part->endCHS[0] = 0XFE; - 6566: f885 31c3 strb.w r3, [r5, #451] ; 0x1c3 - if (!dev->writeSector(0, secBuf)) { - 656a: 683b ldr r3, [r7, #0] - 656c: f8c5 91ca str.w r9, [r5, #458] ; 0x1ca - *reinterpret_cast(dst) = src; - 6570: f64a 2b55 movw fp, #43605 ; 0xaa55 - 6574: 6a5b ldr r3, [r3, #36] ; 0x24 - 6576: f8a5 b1fe strh.w fp, [r5, #510] ; 0x1fe - 657a: 462a mov r2, r5 - 657c: 2100 movs r1, #0 - 657e: 4638 mov r0, r7 - 6580: 4798 blx r3 - 6582: 2800 cmp r0, #0 - 6584: d05e beq.n 6644 - memset(secBuf, 0, BYTES_PER_SECTOR); - 6586: f44f 7200 mov.w r2, #512 ; 0x200 - 658a: 2100 movs r1, #0 - 658c: 4628 mov r0, r5 - 658e: f00a fdf1 bl 11174 - setLe64(pbs->bpb.partitionOffset, partitionOffset); - 6592: 9b01 ldr r3, [sp, #4] - 6594: 642b str r3, [r5, #64] ; 0x40 - *reinterpret_cast(dst) = src; - 6596: 65ab str r3, [r5, #88] ; 0x58 - 6598: 9b05 ldr r3, [sp, #20] - 659a: 65eb str r3, [r5, #92] ; 0x5c - pbs->oemName[5] = ' '; - 659c: 2320 movs r3, #32 - 659e: 722b strb r3, [r5, #8] - pbs->oemName[6] = ' '; - 65a0: 726b strb r3, [r5, #9] - pbs->oemName[7] = ' '; - 65a2: 72ab strb r3, [r5, #10] - pbs->jmpInstruction[0] = 0XEB; - 65a4: 23eb movs r3, #235 ; 0xeb - 65a6: 702b strb r3, [r5, #0] - pbs->jmpInstruction[1] = 0X76; - 65a8: 2376 movs r3, #118 ; 0x76 - 65aa: 706b strb r3, [r5, #1] - pbs->jmpInstruction[2] = 0X90; - 65ac: 2390 movs r3, #144 ; 0x90 - 65ae: 70ab strb r3, [r5, #2] - pbs->oemName[0] = 'E'; - 65b0: 2345 movs r3, #69 ; 0x45 - 65b2: 70eb strb r3, [r5, #3] - pbs->oemName[1] = 'X'; - 65b4: 2358 movs r3, #88 ; 0x58 - 65b6: 712b strb r3, [r5, #4] - pbs->oemName[2] = 'F'; - 65b8: 2346 movs r3, #70 ; 0x46 - 65ba: 716b strb r3, [r5, #5] - pbs->oemName[3] = 'A'; - 65bc: 2341 movs r3, #65 ; 0x41 - 65be: 71ab strb r3, [r5, #6] - pbs->oemName[4] = 'T'; - 65c0: 2354 movs r3, #84 ; 0x54 - 65c2: 71eb strb r3, [r5, #7] - 65c4: 2304 movs r3, #4 - 65c6: 662b str r3, [r5, #96] ; 0x60 - *reinterpret_cast(dst) = src; - 65c8: f44f 7380 mov.w r3, #256 ; 0x100 - 65cc: f8a5 3068 strh.w r3, [r5, #104] ; 0x68 - pbs->bpb.bytesPerSectorShift = BYTES_PER_SECTOR_SHIFT; - 65d0: 2309 movs r3, #9 - *reinterpret_cast(dst) = src; - 65d2: 9a06 ldr r2, [sp, #24] - 65d4: f885 306c strb.w r3, [r5, #108] ; 0x6c - pbs->bpb.driveSelect = 0X80; - 65d8: 2380 movs r3, #128 ; 0x80 - 65da: 666e str r6, [r5, #100] ; 0x64 - 65dc: 652a str r2, [r5, #80] ; 0x50 - 65de: 656a str r2, [r5, #84] ; 0x54 - setLe64(pbs->bpb.volumeLength, volumeLength); - 65e0: f8c5 9048 str.w r9, [r5, #72] ; 0x48 - pbs->bootCode[i] = 0XF4; - 65e4: f44f 72c3 mov.w r2, #390 ; 0x186 - pbs->bpb.sectorsPerClusterShift = sectorsPerClusterShift; - 65e8: f885 a06d strb.w sl, [r5, #109] ; 0x6d - pbs->bpb.numberOfFats = 1; - 65ec: f885 406e strb.w r4, [r5, #110] ; 0x6e - pbs->bpb.driveSelect = 0X80; - 65f0: f885 306f strb.w r3, [r5, #111] ; 0x6f - pbs->bootCode[i] = 0XF4; - 65f4: 21f4 movs r1, #244 ; 0xf4 - 65f6: f105 0078 add.w r0, r5, #120 ; 0x78 - 65fa: f00a fdbb bl 11174 - uint32_t checksum = 0; - 65fe: 2600 movs r6, #0 - *reinterpret_cast(dst) = src; - 6600: f8a5 b1fe strh.w fp, [r5, #510] ; 0x1fe - for (size_t i = 0; i < BYTES_PER_SECTOR; i++) { - 6604: 1e6a subs r2, r5, #1 - 6606: e000 b.n 660a - 6608: 3401 adds r4, #1 - if (i == offsetof(ExFatPbs_t, bpb.volumeFlags[0]) || - 660a: f1a4 036b sub.w r3, r4, #107 ; 0x6b - 660e: 2b01 cmp r3, #1 - 6610: d9fa bls.n 6608 - i == offsetof(ExFatPbs_t, bpb.volumeFlags[1]) || - 6612: 2c71 cmp r4, #113 ; 0x71 - 6614: d0f8 beq.n 6608 - return (sum << 31) + (sum >> 1) + data; - 6616: 5d13 ldrb r3, [r2, r4] - for (size_t i = 0; i < BYTES_PER_SECTOR; i++) { - 6618: f5b4 7f00 cmp.w r4, #512 ; 0x200 - 661c: eb03 0676 add.w r6, r3, r6, ror #1 - 6620: d1f2 bne.n 6608 - if (!dev->writeSector(sector, secBuf) || - 6622: 683b ldr r3, [r7, #0] - 6624: f8dd 9004 ldr.w r9, [sp, #4] - 6628: 6a5b ldr r3, [r3, #36] ; 0x24 - 662a: 462a mov r2, r5 - 662c: 4649 mov r1, r9 - 662e: 4638 mov r0, r7 - 6630: 4798 blx r3 - 6632: b138 cbz r0, 6644 - !dev->writeSector(sector + BOOT_BACKUP_OFFSET , secBuf)) { - 6634: 683b ldr r3, [r7, #0] - 6636: 462a mov r2, r5 - 6638: 6a5b ldr r3, [r3, #36] ; 0x24 - 663a: f109 010c add.w r1, r9, #12 - 663e: 4638 mov r0, r7 - 6640: 4798 blx r3 - if (!dev->writeSector(sector, secBuf) || - 6642: bb80 cbnz r0, 66a6 - writeMsg(pr, "Format failed\r\n"); - 6644: f1b8 0f00 cmp.w r8, #0 - 6648: d006 beq.n 6658 - 664a: f8d8 3000 ldr.w r3, [r8] - 664e: 49b6 ldr r1, [pc, #728] ; (6928 ) - 6650: 685b ldr r3, [r3, #4] - 6652: 220f movs r2, #15 - 6654: 4640 mov r0, r8 - 6656: 4798 blx r3 - return false; - 6658: 2400 movs r4, #0 -} - 665a: 4620 mov r0, r4 - 665c: b009 add sp, #36 ; 0x24 - 665e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - writeMsg(pr, "Device is too small\r\n"); - 6662: f1b8 0f00 cmp.w r8, #0 - 6666: d0f7 beq.n 6658 - 6668: f8d8 3000 ldr.w r3, [r8] - 666c: 49af ldr r1, [pc, #700] ; (692c ) - 666e: 685b ldr r3, [r3, #4] - 6670: 2215 movs r2, #21 - 6672: 4640 mov r0, r8 - 6674: 4798 blx r3 - writeMsg(pr, "Format failed\r\n"); - 6676: e7e8 b.n 664a - sectorsPerClusterShift = vs < 29 ? 8 : (vs - 11)/2; - 6678: f1a3 0a0b sub.w sl, r3, #11 - 667c: ea4f 016a mov.w r1, sl, asr #1 - sectorsPerCluster = 1UL << sectorsPerClusterShift; - 6680: 2201 movs r2, #1 - 6682: 408a lsls r2, r1 - sectorsPerClusterShift = vs < 29 ? 8 : (vs - 11)/2; - 6684: 9102 str r1, [sp, #8] - 6686: f3ca 0a47 ubfx sl, sl, #1, #8 - sectorsPerCluster = 1UL << sectorsPerClusterShift; - 668a: 9207 str r2, [sp, #28] - fatLength = 1UL << (vs < 27 ? 13 : (vs + 1)/2); - 668c: 3301 adds r3, #1 - 668e: 105b asrs r3, r3, #1 - 6690: 2201 movs r2, #1 - 6692: 409a lsls r2, r3 - 6694: 9206 str r2, [sp, #24] - clusterCount = (sectorCount - 4*fatLength) >> sectorsPerClusterShift; - 6696: 2204 movs r2, #4 - 6698: 409a lsls r2, r3 - 669a: 9203 str r2, [sp, #12] - partitionOffset = 2*fatLength; - 669c: 2202 movs r2, #2 - 669e: fa02 f303 lsl.w r3, r2, r3 - 66a2: 9301 str r3, [sp, #4] - 66a4: e73f b.n 6526 - memset(secBuf, 0, BYTES_PER_SECTOR); - 66a6: 4622 mov r2, r4 - 66a8: 2100 movs r1, #0 - 66aa: 4628 mov r0, r5 - 66ac: f00a fd62 bl 11174 - *reinterpret_cast(dst) = src; - 66b0: f64a 2355 movw r3, #43605 ; 0xaa55 - 66b4: f8a5 31fe strh.w r3, [r5, #510] ; 0x1fe - sector++; - 66b8: f109 0a01 add.w sl, r9, #1 - for (int j = 0; j < 8; j++) { - 66bc: f109 0b09 add.w fp, r9, #9 - 66c0: 2300 movs r3, #0 - 66c2: f205 19ff addw r9, r5, #511 ; 0x1ff - uint32_t checksum = 0; - 66c6: 462c mov r4, r5 - 66c8: e001 b.n 66ce - checksum = exFatChecksum(checksum, secBuf[i]); - 66ca: f814 3f01 ldrb.w r3, [r4, #1]! - for (size_t i = 0; i < BYTES_PER_SECTOR; i++) { - 66ce: 45a1 cmp r9, r4 - return (sum << 31) + (sum >> 1) + data; - 66d0: eb03 0676 add.w r6, r3, r6, ror #1 - 66d4: d1f9 bne.n 66ca - if (!dev->writeSector(sector, secBuf) || - 66d6: 683b ldr r3, [r7, #0] - 66d8: 462a mov r2, r5 - 66da: 6a5b ldr r3, [r3, #36] ; 0x24 - 66dc: 4651 mov r1, sl - 66de: 4638 mov r0, r7 - 66e0: 4798 blx r3 - 66e2: 2800 cmp r0, #0 - 66e4: d0ae beq.n 6644 - !dev->writeSector(sector + BOOT_BACKUP_OFFSET , secBuf)) { - 66e6: 683b ldr r3, [r7, #0] - 66e8: 462a mov r2, r5 - 66ea: 6a5b ldr r3, [r3, #36] ; 0x24 - 66ec: f10a 010c add.w r1, sl, #12 - 66f0: 4638 mov r0, r7 - 66f2: 4798 blx r3 - if (!dev->writeSector(sector, secBuf) || - 66f4: 2800 cmp r0, #0 - 66f6: d0a5 beq.n 6644 - sector++; - 66f8: f10a 0301 add.w r3, sl, #1 - for (int j = 0; j < 8; j++) { - 66fc: 459b cmp fp, r3 - 66fe: d002 beq.n 6706 - checksum = exFatChecksum(checksum, secBuf[i]); - 6700: 469a mov sl, r3 - 6702: 782b ldrb r3, [r5, #0] - 6704: e7df b.n 66c6 - memset(secBuf, 0, BYTES_PER_SECTOR); - 6706: f44f 7200 mov.w r2, #512 ; 0x200 - 670a: 2100 movs r1, #0 - 670c: 4628 mov r0, r5 - 670e: 469b mov fp, r3 - 6710: f00a fd30 bl 11174 - 6714: 2200 movs r2, #0 - 6716: f10a 0a03 add.w sl, sl, #3 - 671a: 4611 mov r1, r2 - *reinterpret_cast(dst) = src; - 671c: 462b mov r3, r5 - 671e: e001 b.n 6724 - checksum = exFatChecksum(checksum, secBuf[i]); - 6720: f813 1f01 ldrb.w r1, [r3, #1]! - for (size_t i = 0; i < BYTES_PER_SECTOR; i++) { - 6724: 429c cmp r4, r3 - return (sum << 31) + (sum >> 1) + data; - 6726: eb01 0676 add.w r6, r1, r6, ror #1 - 672a: d1f9 bne.n 6720 - if (!dev->writeSector(sector, secBuf) || - 672c: 683b ldr r3, [r7, #0] - 672e: 462a mov r2, r5 - 6730: 6a5b ldr r3, [r3, #36] ; 0x24 - 6732: 4659 mov r1, fp - 6734: 4638 mov r0, r7 - 6736: 4798 blx r3 - 6738: 2800 cmp r0, #0 - 673a: d083 beq.n 6644 - !dev->writeSector(sector + BOOT_BACKUP_OFFSET , secBuf)) { - 673c: 683b ldr r3, [r7, #0] - 673e: 462a mov r2, r5 - 6740: 6a5b ldr r3, [r3, #36] ; 0x24 - 6742: f10b 010c add.w r1, fp, #12 - 6746: 4638 mov r0, r7 - 6748: 4798 blx r3 - if (!dev->writeSector(sector, secBuf) || - 674a: 2800 cmp r0, #0 - 674c: f43f af7a beq.w 6644 - sector++; - 6750: f10b 0101 add.w r1, fp, #1 - for (int j = 0; j < 2; j++) { - 6754: 458a cmp sl, r1 - 6756: d164 bne.n 6822 - 6758: 1f2b subs r3, r5, #4 - 675a: f505 72fe add.w r2, r5, #508 ; 0x1fc - *reinterpret_cast(dst) = src; - 675e: f843 6f04 str.w r6, [r3, #4]! - for (size_t i = 0; i < BYTES_PER_SECTOR; i += 4) { - 6762: 429a cmp r2, r3 - 6764: d1fb bne.n 675e - if (!dev->writeSector(sector, secBuf) || - 6766: 683b ldr r3, [r7, #0] - 6768: 462a mov r2, r5 - 676a: 6a5b ldr r3, [r3, #36] ; 0x24 - 676c: 4638 mov r0, r7 - 676e: 4798 blx r3 - 6770: 2800 cmp r0, #0 - 6772: f43f af67 beq.w 6644 - !dev->writeSector(sector + BOOT_BACKUP_OFFSET , secBuf)) { - 6776: 683b ldr r3, [r7, #0] - 6778: f10b 010d add.w r1, fp, #13 - 677c: 6a5b ldr r3, [r3, #36] ; 0x24 - 677e: 462a mov r2, r5 - 6780: 4638 mov r0, r7 - 6782: 4798 blx r3 - if (!dev->writeSector(sector, secBuf) || - 6784: 2800 cmp r0, #0 - 6786: f43f af5d beq.w 6644 - writeMsg(pr, "Writing FAT "); - 678a: f1b8 0f00 cmp.w r8, #0 - 678e: d006 beq.n 679e - 6790: f8d8 3000 ldr.w r3, [r8] - 6794: 4966 ldr r1, [pc, #408] ; (6930 ) - 6796: 685b ldr r3, [r3, #4] - 6798: 220c movs r2, #12 - 679a: 4640 mov r0, r8 - 679c: 4798 blx r3 - sector = partitionOffset + fatOffset; - 679e: 9b01 ldr r3, [sp, #4] - 67a0: f8dd 9018 ldr.w r9, [sp, #24] - 67a4: f8df b18c ldr.w fp, [pc, #396] ; 6934 - 67a8: 4499 add r9, r3 - ns = ((clusterCount + 2)*4 + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 67aa: 9b05 ldr r3, [sp, #20] - memset(secBuf, 0, BYTES_PER_SECTOR); - 67ac: f44f 7200 mov.w r2, #512 ; 0x200 - 67b0: 2100 movs r1, #0 - 67b2: 4628 mov r0, r5 - ns = ((clusterCount + 2)*4 + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 67b4: 009e lsls r6, r3, #2 - memset(secBuf, 0, BYTES_PER_SECTOR); - 67b6: f00a fcdd bl 11174 - secBuf[0] = 0XF8; - 67ba: 4628 mov r0, r5 - 67bc: 23f8 movs r3, #248 ; 0xf8 - ns = ((clusterCount + 2)*4 + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 67be: f206 2607 addw r6, r6, #519 ; 0x207 - secBuf[0] = 0XF8; - 67c2: f800 3b01 strb.w r3, [r0], #1 - secBuf[i] = 0XFF; - 67c6: 2213 movs r2, #19 - 67c8: 21ff movs r1, #255 ; 0xff - ns = ((clusterCount + 2)*4 + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 67ca: ea4f 2a56 mov.w sl, r6, lsr #9 - secBuf[i] = 0XFF; - 67ce: f00a fcd1 bl 11174 - if (i%(ns/32) == 0) { - 67d2: 0bb6 lsrs r6, r6, #14 - for (uint32_t i = 0; i < ns; i++) { - 67d4: 2400 movs r4, #0 - 67d6: e002 b.n 67de - 67d8: 3401 adds r4, #1 - 67da: 45a2 cmp sl, r4 - 67dc: d024 beq.n 6828 - if (i%(ns/32) == 0) { - 67de: fbb4 f3f6 udiv r3, r4, r6 - 67e2: fb06 4313 mls r3, r6, r3, r4 - 67e6: b94b cbnz r3, 67fc - 67e8: 2201 movs r2, #1 - writeMsg(pr, "."); - 67ea: f1b8 0f00 cmp.w r8, #0 - 67ee: d005 beq.n 67fc - 67f0: f8d8 3000 ldr.w r3, [r8] - 67f4: 4659 mov r1, fp - 67f6: 685b ldr r3, [r3, #4] - 67f8: 4640 mov r0, r8 - 67fa: 4798 blx r3 - if (!dev->writeSector(sector + i, secBuf)) { - 67fc: 683b ldr r3, [r7, #0] - 67fe: eb09 0104 add.w r1, r9, r4 - 6802: 6a5b ldr r3, [r3, #36] ; 0x24 - 6804: 462a mov r2, r5 - 6806: 4638 mov r0, r7 - 6808: 4798 blx r3 - 680a: 2800 cmp r0, #0 - 680c: f43f af1a beq.w 6644 - if (i == 0) { - 6810: 2c00 cmp r4, #0 - 6812: d1e1 bne.n 67d8 - memset(secBuf, 0, BYTES_PER_SECTOR); - 6814: 4621 mov r1, r4 - 6816: f44f 7200 mov.w r2, #512 ; 0x200 - 681a: 4628 mov r0, r5 - 681c: f00a fcaa bl 11174 - 6820: e7da b.n 67d8 - checksum = exFatChecksum(checksum, secBuf[i]); - 6822: 468b mov fp, r1 - 6824: 7829 ldrb r1, [r5, #0] - 6826: e779 b.n 671c - writeMsg(pr, "\r\n"); - 6828: f1b8 0f00 cmp.w r8, #0 - 682c: d02b beq.n 6886 - 682e: f8d8 3000 ldr.w r3, [r8] - 6832: 4941 ldr r1, [pc, #260] ; (6938 ) - 6834: 685b ldr r3, [r3, #4] - 6836: 2202 movs r2, #2 - 6838: 4640 mov r0, r8 - 683a: 4798 blx r3 - bitmapSize = (clusterCount + 7)/8; - 683c: 9c05 ldr r4, [sp, #20] - if (ns > sectorsPerCluster) { - 683e: 9a07 ldr r2, [sp, #28] - bitmapSize = (clusterCount + 7)/8; - 6840: 3407 adds r4, #7 - 6842: 08e4 lsrs r4, r4, #3 - ns = (bitmapSize + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 6844: f204 13ff addw r3, r4, #511 ; 0x1ff - if (ns > sectorsPerCluster) { - 6848: ebb2 2f53 cmp.w r2, r3, lsr #9 - ns = (bitmapSize + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 684c: ea4f 2953 mov.w r9, r3, lsr #9 - if (ns > sectorsPerCluster) { - 6850: f4ff aefb bcc.w 664a - memset(secBuf, 0, BYTES_PER_SECTOR); - 6854: f44f 7200 mov.w r2, #512 ; 0x200 - 6858: 2100 movs r1, #0 - 685a: 4628 mov r0, r5 - 685c: f00a fc8a bl 11174 - secBuf[0] = 0X7; - 6860: 2307 movs r3, #7 - 6862: 702b strb r3, [r5, #0] - for (uint32_t i = 0; i < ns; i++) { - 6864: 2600 movs r6, #0 - 6866: e004 b.n 6872 - if (i == 0) { - 6868: b906 cbnz r6, 686c - secBuf[0] = 0; - 686a: 702e strb r6, [r5, #0] - for (uint32_t i = 0; i < ns; i++) { - 686c: 3601 adds r6, #1 - 686e: 45b1 cmp r9, r6 - 6870: d916 bls.n 68a0 - if (!dev->writeSector(sector + i, secBuf)) { - 6872: 9a03 ldr r2, [sp, #12] - 6874: 683b ldr r3, [r7, #0] - 6876: 18b1 adds r1, r6, r2 - 6878: 6a5b ldr r3, [r3, #36] ; 0x24 - 687a: 462a mov r2, r5 - 687c: 4638 mov r0, r7 - 687e: 4798 blx r3 - 6880: 2800 cmp r0, #0 - 6882: d1f1 bne.n 6868 - 6884: e6de b.n 6644 - bitmapSize = (clusterCount + 7)/8; - 6886: 9c05 ldr r4, [sp, #20] - if (ns > sectorsPerCluster) { - 6888: 9a07 ldr r2, [sp, #28] - bitmapSize = (clusterCount + 7)/8; - 688a: 3407 adds r4, #7 - 688c: 08e4 lsrs r4, r4, #3 - ns = (bitmapSize + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 688e: f204 13ff addw r3, r4, #511 ; 0x1ff - if (ns > sectorsPerCluster) { - 6892: ebb2 2f53 cmp.w r2, r3, lsr #9 - ns = (bitmapSize + BYTES_PER_SECTOR - 1)/BYTES_PER_SECTOR; - 6896: ea4f 2953 mov.w r9, r3, lsr #9 - if (ns > sectorsPerCluster) { - 689a: f4ff aedd bcc.w 6658 - 689e: e7d9 b.n 6854 - writeMsg(pr, "Writing upcase table\r\n"); - 68a0: f1b8 0f00 cmp.w r8, #0 - 68a4: d077 beq.n 6996 - 68a6: f8d8 3000 ldr.w r3, [r8] - 68aa: 4924 ldr r1, [pc, #144] ; (693c ) - 68ac: 685b ldr r3, [r3, #4] - 68ae: 2216 movs r2, #22 - 68b0: 4640 mov r0, r8 - 68b2: 4798 blx r3 - if (!writeUpcase(partitionOffset + clusterHeapOffset + sectorsPerCluster)) { - 68b4: 9b03 ldr r3, [sp, #12] - 68b6: 9a07 ldr r2, [sp, #28] - 68b8: 9804 ldr r0, [sp, #16] - 68ba: 1899 adds r1, r3, r2 - 68bc: f7ff fda8 bl 6410 - 68c0: 2800 cmp r0, #0 - 68c2: f43f aec2 beq.w 664a - if (m_upcaseSize > BYTES_PER_SECTOR*sectorsPerCluster) { - 68c6: 9a02 ldr r2, [sp, #8] - 68c8: f44f 7300 mov.w r3, #512 ; 0x200 - 68cc: 4093 lsls r3, r2 - 68ce: 9a04 ldr r2, [sp, #16] - 68d0: 6892 ldr r2, [r2, #8] - 68d2: 429a cmp r2, r3 - 68d4: f63f aeb9 bhi.w 664a - writeMsg(pr, "Writing root\r\n"); - 68d8: 4919 ldr r1, [pc, #100] ; (6940 ) - 68da: 4640 mov r0, r8 - 68dc: f7ff fd30 bl 6340 - sector = partitionOffset + clusterHeapOffset + 2*sectorsPerCluster; - 68e0: 9b02 ldr r3, [sp, #8] - 68e2: f04f 0902 mov.w r9, #2 - 68e6: fa09 f603 lsl.w r6, r9, r3 - 68ea: 9b03 ldr r3, [sp, #12] - memset(secBuf, 0, BYTES_PER_SECTOR); - 68ec: f44f 7200 mov.w r2, #512 ; 0x200 - 68f0: 2100 movs r1, #0 - 68f2: 4628 mov r0, r5 - sector = partitionOffset + clusterHeapOffset + 2*sectorsPerCluster; - 68f4: 441e add r6, r3 - memset(secBuf, 0, BYTES_PER_SECTOR); - 68f6: f00a fc3d bl 11174 - dbm->type = EXFAT_TYPE_BITMAP; - 68fa: 2281 movs r2, #129 ; 0x81 - label->type = EXFAT_TYPE_LABEL & 0X7F; - 68fc: 2303 movs r3, #3 - dbm->type = EXFAT_TYPE_BITMAP; - 68fe: f885 2020 strb.w r2, [r5, #32] - setLe32(dup->checksum, m_upcaseChecksum); - 6902: 9904 ldr r1, [sp, #16] - 6904: f8c5 9034 str.w r9, [r5, #52] ; 0x34 - dup->type = EXFAT_TYPE_UPCASE; - 6908: 2282 movs r2, #130 ; 0x82 - label->type = EXFAT_TYPE_LABEL & 0X7F; - 690a: 702b strb r3, [r5, #0] - dup->type = EXFAT_TYPE_UPCASE; - 690c: f885 2040 strb.w r2, [r5, #64] ; 0x40 - setLe32(dup->checksum, m_upcaseChecksum); - 6910: 684a ldr r2, [r1, #4] - 6912: 646a str r2, [r5, #68] ; 0x44 - 6914: 656b str r3, [r5, #84] ; 0x54 - setLe64(dup->size, m_upcaseSize); - 6916: 688b ldr r3, [r1, #8] - 6918: 65ab str r3, [r5, #88] ; 0x58 - setLe64(dbm->size, bitmapSize); - 691a: 2300 movs r3, #0 - 691c: 3e01 subs r6, #1 - 691e: 63ac str r4, [r5, #56] ; 0x38 - setLe64(dup->size, m_upcaseSize); - 6920: 65eb str r3, [r5, #92] ; 0x5c - *reinterpret_cast(dst) = src; - 6922: f04f 0901 mov.w r9, #1 - 6926: e012 b.n 694e - 6928: 00018108 .word 0x00018108 - 692c: 000180a8 .word 0x000180a8 - 6930: 000180c0 .word 0x000180c0 - 6934: 000176d4 .word 0x000176d4 - 6938: 00017ed0 .word 0x00017ed0 - 693c: 000180d0 .word 0x000180d0 - 6940: 000180e8 .word 0x000180e8 - for (uint32_t i = 0; i < ns; i++) { - 6944: 9b07 ldr r3, [sp, #28] - 6946: 4599 cmp r9, r3 - 6948: d21c bcs.n 6984 - 694a: f109 0901 add.w r9, r9, #1 - if (!dev->writeSector(sector + i, secBuf)) { - 694e: 683b ldr r3, [r7, #0] - 6950: eb06 0109 add.w r1, r6, r9 - 6954: 6a5b ldr r3, [r3, #36] ; 0x24 - 6956: 462a mov r2, r5 - 6958: 4638 mov r0, r7 - 695a: 4798 blx r3 - 695c: 4604 mov r4, r0 - 695e: 2800 cmp r0, #0 - 6960: f43f ae70 beq.w 6644 - if (i == 0) { - 6964: f1b9 0f01 cmp.w r9, #1 - 6968: d1ec bne.n 6944 - memset(secBuf, 0, BYTES_PER_SECTOR); - 696a: f44f 7200 mov.w r2, #512 ; 0x200 - 696e: 2100 movs r1, #0 - 6970: 4628 mov r0, r5 - 6972: f00a fbff bl 11174 - for (uint32_t i = 0; i < ns; i++) { - 6976: e7e8 b.n 694a - sectorsPerCluster = 1UL << sectorsPerClusterShift; - 6978: f44f 7280 mov.w r2, #256 ; 0x100 - 697c: 9207 str r2, [sp, #28] - 697e: f8cd a008 str.w sl, [sp, #8] - 6982: e683 b.n 668c - writeMsg(pr, "Format done\r\n"); - 6984: f1b8 0f00 cmp.w r8, #0 - 6988: f43f ae67 beq.w 665a - 698c: 490b ldr r1, [pc, #44] ; (69bc ) - 698e: 4640 mov r0, r8 - 6990: f7ff fcd6 bl 6340 - 6994: e661 b.n 665a - if (!writeUpcase(partitionOffset + clusterHeapOffset + sectorsPerCluster)) { - 6996: 9b03 ldr r3, [sp, #12] - 6998: 9a07 ldr r2, [sp, #28] - 699a: 9804 ldr r0, [sp, #16] - 699c: 1899 adds r1, r3, r2 - 699e: f7ff fd37 bl 6410 - 69a2: 2800 cmp r0, #0 - 69a4: f43f ae58 beq.w 6658 - if (m_upcaseSize > BYTES_PER_SECTOR*sectorsPerCluster) { - 69a8: 9a02 ldr r2, [sp, #8] - 69aa: f44f 7300 mov.w r3, #512 ; 0x200 - 69ae: 4093 lsls r3, r2 - 69b0: 9a04 ldr r2, [sp, #16] - 69b2: 6892 ldr r2, [r2, #8] - 69b4: 429a cmp r2, r3 - 69b6: d993 bls.n 68e0 - 69b8: e64e b.n 6658 - 69ba: bf00 nop - 69bc: 000180f8 .word 0x000180f8 - -000069c0 : - hash = ((hash << 15) | (hash >> 1)) + (c & 0XFF); - hash = ((hash << 15) | (hash >> 1)) + (c >> 8); - return hash; -} -//------------------------------------------------------------------------------ -bool ExFatFile::cmpName(const DirName_t* dirName, ExName_t* fname) { - 69c0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 69c4: 460c mov r4, r1 - 69c6: 4615 mov r5, r2 - 69c8: f101 081e add.w r8, r1, #30 - return !ls && next == end; - 69cc: 89ab ldrh r3, [r5, #12] - return *reinterpret_cast(src); - 69ce: f834 7f02 ldrh.w r7, [r4, #2]! - uint16_t u = getLe16(dirName->unicode + 2*i); - if (fname->atEnd()) { - return u == 0; - } -#if USE_UTF8_LONG_NAMES - uint16_t cp = fname->get16(); - 69d2: 4628 mov r0, r5 - 69d4: b91b cbnz r3, 69de - 69d6: 686a ldr r2, [r5, #4] - 69d8: 68ab ldr r3, [r5, #8] - 69da: 429a cmp r2, r3 - 69dc: d00e beq.n 69fc - 69de: f003 fe0d bl a5fc - if (toUpcase(cp) != toUpcase(u)) { - 69e2: f003 ff15 bl a810 - 69e6: 4606 mov r6, r0 - 69e8: 4638 mov r0, r7 - 69ea: f003 ff11 bl a810 - 69ee: 4286 cmp r6, r0 - 69f0: d109 bne.n 6a06 - for (uint8_t i = 0; i < 15; i++) { - 69f2: 4544 cmp r4, r8 - 69f4: d1ea bne.n 69cc - if (u >= 0x7F || toUpper(c) != toUpper(u)) { - return false; - } -#endif // USE_UTF8_LONG_NAMES - } - return true; - 69f6: 2001 movs r0, #1 -} - 69f8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return u == 0; - 69fc: fab7 f087 clz r0, r7 - 6a00: 0940 lsrs r0, r0, #5 -} - 6a02: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return false; - 6a06: 2000 movs r0, #0 -} - 6a08: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -00006a0c : - fail: - *name = 0; - return 0; -} -//------------------------------------------------------------------------------ -size_t ExFatFile::getName8(char* name, size_t count) { - 6a0c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - char* str = name; - char* ptr; - DirName_t* dn; - uint16_t hs = 0; - uint32_t cp; - if (!isOpen()) { - 6a10: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 -size_t ExFatFile::getName8(char* name, size_t count) { - 6a14: b083 sub sp, #12 - 6a16: 4688 mov r8, r1 - if (!isOpen()) { - 6a18: 2b00 cmp r3, #0 - 6a1a: d04e beq.n 6aba - DBG_FAIL_MACRO; - goto fail; - } - for (uint8_t is = 2; is <= m_setCount; is++) { - 6a1c: f890 3030 ldrb.w r3, [r0, #48] ; 0x30 - 6a20: 2b01 cmp r3, #1 - 6a22: 4607 mov r7, r0 - 6a24: d951 bls.n 6aca - } else { - DBG_FAIL_MACRO; - goto fail; - } - // Save space for zero byte. - ptr = FsUtf::cpToMb(cp, str, end - 1); - 6a26: 3a01 subs r2, #1 - * \param[in] hs high surrogate. - * \param[in] ls low surrogate. - * \return code point. - */ - inline uint32_t u16ToCp(uint16_t hs, uint16_t ls) { - return 0X10000 + (((hs & 0X3FF) << 10) | (ls & 0X3FF)); - 6a28: f8df b0a4 ldr.w fp, [pc, #164] ; 6ad0 - char* str = name; - 6a2c: 460b mov r3, r1 - for (uint8_t is = 2; is <= m_setCount; is++) { - 6a2e: f04f 0a02 mov.w sl, #2 - ptr = FsUtf::cpToMb(cp, str, end - 1); - 6a32: 188e adds r6, r1, r2 - uint16_t hs = 0; - 6a34: 2400 movs r4, #0 - (dirCache(is, FsCache::CACHE_FOR_READ)); - 6a36: 2200 movs r2, #0 - 6a38: 4651 mov r1, sl - 6a3a: 4638 mov r0, r7 - 6a3c: 9301 str r3, [sp, #4] - 6a3e: f7fe fb0b bl 5058 - if (!dn || dn->type != EXFAT_TYPE_NAME) { - 6a42: 4605 mov r5, r0 - 6a44: b3c8 cbz r0, 6aba - 6a46: 7802 ldrb r2, [r0, #0] - 6a48: 2ac1 cmp r2, #193 ; 0xc1 - 6a4a: d136 bne.n 6aba - 6a4c: 9b01 ldr r3, [sp, #4] - 6a4e: f100 091e add.w r9, r0, #30 - 6a52: f835 0f02 ldrh.w r0, [r5, #2]! - if (hs) { - 6a56: b324 cbz r4, 6aa2 - return 0XDC00 <= c && c <= 0XDFFF; - 6a58: f500 5210 add.w r2, r0, #9216 ; 0x2400 - if (!FsUtf::isLowSurrogate(c)) { - 6a5c: b292 uxth r2, r2 - 6a5e: f5b2 6f80 cmp.w r2, #1024 ; 0x400 - 6a62: d22a bcs.n 6aba - return 0X10000 + (((hs & 0X3FF) << 10) | (ls & 0X3FF)); - 6a64: ea0b 2484 and.w r4, fp, r4, lsl #10 - 6a68: f3c0 0009 ubfx r0, r0, #0, #10 - 6a6c: 4320 orrs r0, r4 - 6a6e: f500 3080 add.w r0, r0, #65536 ; 0x10000 - ptr = FsUtf::cpToMb(cp, str, end - 1); - 6a72: 4619 mov r1, r3 - 6a74: 4632 mov r2, r6 - 6a76: f003 fe37 bl a6e8 - if (!ptr) { - 6a7a: 4603 mov r3, r0 - 6a7c: b1e8 cbz r0, 6aba - 6a7e: 2400 movs r4, #0 - for (uint8_t in = 0; in < 15; in++) { - 6a80: 454d cmp r5, r9 - 6a82: d1e6 bne.n 6a52 - for (uint8_t is = 2; is <= m_setCount; is++) { - 6a84: f897 2030 ldrb.w r2, [r7, #48] ; 0x30 - 6a88: f10a 0a01 add.w sl, sl, #1 - 6a8c: fa5f fa8a uxtb.w sl, sl - 6a90: 4552 cmp r2, sl - 6a92: d2d0 bcs.n 6a36 - str = ptr; - } - } - done: - *str = '\0'; - return str - name; - 6a94: eba3 0008 sub.w r0, r3, r8 - 6a98: 4698 mov r8, r3 - *str = '\0'; - 6a9a: 2300 movs r3, #0 - 6a9c: f888 3000 strb.w r3, [r8] - return str - name; - 6aa0: e00e b.n 6ac0 - return 0XD800 <= c && c <= 0XDFFF; - 6aa2: f500 5220 add.w r2, r0, #10240 ; 0x2800 - 6aa6: b292 uxth r2, r2 - } else if (!FsUtf::isSurrogate(c)) { - 6aa8: f5b2 6f00 cmp.w r2, #2048 ; 0x800 - 6aac: d302 bcc.n 6ab4 - if (c == 0) { - 6aae: 2800 cmp r0, #0 - 6ab0: d1df bne.n 6a72 - 6ab2: e7ef b.n 6a94 - } else if (FsUtf::isHighSurrogate(c)) { - 6ab4: f5b2 6f80 cmp.w r2, #1024 ; 0x400 - 6ab8: d305 bcc.n 6ac6 - - fail: - *name = 0; - 6aba: 2000 movs r0, #0 - 6abc: f888 0000 strb.w r0, [r8] - return 0; -} - 6ac0: b003 add sp, #12 - 6ac2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 6ac6: 4604 mov r4, r0 - 6ac8: e7da b.n 6a80 - for (uint8_t is = 2; is <= m_setCount; is++) { - 6aca: 2000 movs r0, #0 - 6acc: e7e5 b.n 6a9a - 6ace: bf00 nop - 6ad0: 000ffc00 .word 0x000ffc00 - -00006ad4 : -//------------------------------------------------------------------------------ -bool ExFatFile::hashName(ExName_t* fname) { - 6ad4: b570 push {r4, r5, r6, lr} - 6ad6: 460c mov r4, r1 - next = begin; - 6ad8: 680a ldr r2, [r1, #0] - 6ada: 6062 str r2, [r4, #4] - ls = 0; // lowSurrogate - 6adc: 2300 movs r3, #0 - uint16_t hash = 0; - fname->reset(); -#if USE_UTF8_LONG_NAMES - fname->nameLength = 0; - while (!fname->atEnd()) { - 6ade: 4619 mov r1, r3 - 6ae0: 81a3 strh r3, [r4, #12] - fname->nameLength = 0; - 6ae2: 6123 str r3, [r4, #16] - uint16_t hash = 0; - 6ae4: 461e mov r6, r3 - uint16_t u = fname->get16(); - if (u == 0XFFFF) { - 6ae6: f64f 75ff movw r5, #65535 ; 0xffff - while (!fname->atEnd()) { - 6aea: e017 b.n 6b1c - uint16_t u = fname->get16(); - 6aec: f003 fd86 bl a5fc - if (u == 0XFFFF) { - 6af0: 42a8 cmp r0, r5 - 6af2: d022 beq.n 6b3a - uint16_t c = toUpcase(u); - 6af4: f003 fe8c bl a810 - hash = ((hash << 15) | (hash >> 1)) + (c & 0XFF); - 6af8: 03f3 lsls r3, r6, #15 - 6afa: ea43 0356 orr.w r3, r3, r6, lsr #1 - 6afe: fa53 f380 uxtab r3, r3, r0 - 6b02: b299 uxth r1, r3 - DBG_FAIL_MACRO; - goto fail; - } - hash = exFatHash(u, hash); - fname->nameLength++; - 6b04: 6922 ldr r2, [r4, #16] - hash = ((hash << 15) | (hash >> 1)) + (c >> 8); - 6b06: f3c3 034e ubfx r3, r3, #1, #15 - 6b0a: ea43 33c1 orr.w r3, r3, r1, lsl #15 - 6b0e: 0a00 lsrs r0, r0, #8 - 6b10: fa10 f383 uxtah r3, r0, r3 - fname->nameLength++; - 6b14: 3201 adds r2, #1 - return !ls && next == end; - 6b16: 89a1 ldrh r1, [r4, #12] - 6b18: 6122 str r2, [r4, #16] - hash = ((hash << 15) | (hash >> 1)) + (c >> 8); - 6b1a: b29e uxth r6, r3 - uint16_t u = fname->get16(); - 6b1c: 4620 mov r0, r4 - 6b1e: 2900 cmp r1, #0 - 6b20: d1e4 bne.n 6aec - 6b22: 6862 ldr r2, [r4, #4] - 6b24: 68a3 ldr r3, [r4, #8] - 6b26: 429a cmp r2, r3 - 6b28: d1e0 bne.n 6aec - hash = exFatHash(c, hash); - } - fname->nameLength = fname->end - fname->begin; -#endif // USE_UTF8_LONG_NAMES - fname->nameHash = hash; - if (!fname->nameLength || fname->nameLength > EXFAT_MAX_NAME_LENGTH) { - 6b2a: 6920 ldr r0, [r4, #16] - fname->nameHash = hash; - 6b2c: 82a6 strh r6, [r4, #20] - if (!fname->nameLength || fname->nameLength > EXFAT_MAX_NAME_LENGTH) { - 6b2e: 3801 subs r0, #1 - 6b30: 28fe cmp r0, #254 ; 0xfe - 6b32: bf8c ite hi - 6b34: 2000 movhi r0, #0 - 6b36: 2001 movls r0, #1 - } - return true; - - fail: - return false; -} - 6b38: bd70 pop {r4, r5, r6, pc} - return false; - 6b3a: 2000 movs r0, #0 -} - 6b3c: bd70 pop {r4, r5, r6, pc} - 6b3e: bf00 nop - -00006b40 : -#define DBG_FILE "ExFatPartition.cpp" -#include "../common/DebugMacros.h" -#include "ExFatLib.h" -//------------------------------------------------------------------------------ -// return 0 if error, 1 if no space, else start cluster. -uint32_t ExFatPartition::bitmapFind(uint32_t cluster, uint32_t count) { - 6b40: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 6b44: 4607 mov r7, r0 - 6b46: 4691 mov r9, r2 - uint32_t start = cluster ? cluster - 2 : m_bitmapStart; - 6b48: 468a mov sl, r1 - 6b4a: 2900 cmp r1, #0 - 6b4c: d042 beq.n 6bd4 - if (start >= m_clusterCount) { - 6b4e: f8d7 3430 ldr.w r3, [r7, #1072] ; 0x430 - uint32_t start = cluster ? cluster - 2 : m_bitmapStart; - 6b52: f1a1 0802 sub.w r8, r1, #2 - if (start >= m_clusterCount) { - 6b56: 4543 cmp r3, r8 - 6b58: d942 bls.n 6be0 - uint32_t endAlloc = start; - uint32_t bgnAlloc = start; - uint16_t sectorSize = 1 << m_bytesPerSectorShift; - size_t i = (start >> 3) & (sectorSize - 1); - uint8_t* cache; - uint8_t mask = 1 << (start & 7); - 6b5a: f008 0307 and.w r3, r8, #7 - 6b5e: 2501 movs r5, #1 - 6b60: 409d lsls r5, r3 - size_t i = (start >> 3) & (sectorSize - 1); - 6b62: f3c8 0bc8 ubfx fp, r8, #3, #9 - uint8_t mask = 1 << (start & 7); - 6b66: b2ed uxtb r5, r5 - uint32_t bgnAlloc = start; - 6b68: 4646 mov r6, r8 - uint32_t endAlloc = start; - 6b6a: 4644 mov r4, r8 - while (true) { - uint32_t sector = m_clusterHeapStartSector + - 6b6c: f8d7 142c ldr.w r1, [r7, #1068] ; 0x42c - return m_bitmapCache.prepare(sector, option); - 6b70: 2200 movs r2, #0 - 6b72: eb01 3114 add.w r1, r1, r4, lsr #12 - 6b76: 4638 mov r0, r7 - 6b78: f003 fd02 bl a580 - (endAlloc >> (m_bytesPerSectorShift + 3)); - cache = bitmapCachePrepare(sector, FsCache::CACHE_FOR_READ); - if (!cache) { - 6b7c: b1e8 cbz r0, 6bba - 6b7e: f10b 3bff add.w fp, fp, #4294967295 ; 0xffffffff - 6b82: 4483 add fp, r0 - 6b84: f200 10ff addw r0, r0, #511 ; 0x1ff - return 0; - } - for (; i < sectorSize; i++) { - for (; mask; mask <<= 1) { - endAlloc++; - if (!(mask & cache[i])) { - 6b88: f81b 1f01 ldrb.w r1, [fp, #1]! - 6b8c: e00a b.n 6ba4 - if ((endAlloc - bgnAlloc) == count) { - 6b8e: 454a cmp r2, r9 - 6b90: d02b beq.n 6bea - return bgnAlloc + 2; - } - } else { - bgnAlloc = endAlloc; - } - if (endAlloc == start) { - 6b92: 45a0 cmp r8, r4 - 6b94: d010 beq.n 6bb8 - return 1; - } - if (endAlloc >= m_clusterCount) { - 6b96: f8d7 5430 ldr.w r5, [r7, #1072] ; 0x430 - 6b9a: 42a5 cmp r5, r4 - 6b9c: d914 bls.n 6bc8 - for (; mask; mask <<= 1) { - 6b9e: f013 05ff ands.w r5, r3, #255 ; 0xff - 6ba2: d00c beq.n 6bbe - endAlloc++; - 6ba4: 3401 adds r4, #1 - if (!(mask & cache[i])) { - 6ba6: 4229 tst r1, r5 - for (; mask; mask <<= 1) { - 6ba8: ea4f 0345 mov.w r3, r5, lsl #1 - if ((endAlloc - bgnAlloc) == count) { - 6bac: eba4 0206 sub.w r2, r4, r6 - if (!(mask & cache[i])) { - 6bb0: d0ed beq.n 6b8e - if (endAlloc == start) { - 6bb2: 45a0 cmp r8, r4 - endAlloc++; - 6bb4: 4626 mov r6, r4 - if (endAlloc == start) { - 6bb6: d1ee bne.n 6b96 - return 1; - 6bb8: 2001 movs r0, #1 - mask = 1; - } - i = 0; - } - return 0; -} - 6bba: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - for (; i < sectorSize; i++) { - 6bbe: 4558 cmp r0, fp - mask = 1; - 6bc0: f04f 0501 mov.w r5, #1 - for (; i < sectorSize; i++) { - 6bc4: d1e0 bne.n 6b88 - 6bc6: e001 b.n 6bcc - endAlloc = bgnAlloc = 0; - 6bc8: 2600 movs r6, #0 - 6bca: 4634 mov r4, r6 - uint32_t endAlloc = start; - 6bcc: 2501 movs r5, #1 - i = 0; - 6bce: f04f 0b00 mov.w fp, #0 - 6bd2: e7cb b.n 6b6c - uint32_t start = cluster ? cluster - 2 : m_bitmapStart; - 6bd4: f8d0 8420 ldr.w r8, [r0, #1056] ; 0x420 - if (start >= m_clusterCount) { - 6bd8: f8d7 3430 ldr.w r3, [r7, #1072] ; 0x430 - 6bdc: 4543 cmp r3, r8 - 6bde: d8bc bhi.n 6b5a - 6be0: f04f 0800 mov.w r8, #0 - 6be4: 2501 movs r5, #1 - start = 0; - 6be6: 46c3 mov fp, r8 - 6be8: e7be b.n 6b68 - if (cluster == 0 && count == 1) { - 6bea: f1ba 0f00 cmp.w sl, #0 - 6bee: d104 bne.n 6bfa - 6bf0: f1b9 0f01 cmp.w r9, #1 - m_bitmapStart = bgnAlloc; - 6bf4: bf08 it eq - 6bf6: f8c7 6420 streq.w r6, [r7, #1056] ; 0x420 - return bgnAlloc + 2; - 6bfa: 1cb0 adds r0, r6, #2 -} - 6bfc: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - -00006c00 : -//------------------------------------------------------------------------------ -bool ExFatPartition::bitmapModify(uint32_t cluster, - uint32_t count, bool value) { - 6c00: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 6c04: 4615 mov r5, r2 - 6c06: 4698 mov r8, r3 - uint32_t sector; - uint32_t start = cluster - 2; - 6c08: 1e8a subs r2, r1, #2 - size_t i; - uint8_t* cache; - uint8_t mask; - cluster -= 2; - if ((start + count) > m_clusterCount) { - 6c0a: f8d0 3430 ldr.w r3, [r0, #1072] ; 0x430 - 6c0e: 1951 adds r1, r2, r5 - 6c10: 4299 cmp r1, r3 - 6c12: d83a bhi.n 6c8a - DBG_FAIL_MACRO; - goto fail; - } - if (value) { - 6c14: 4606 mov r6, r0 - 6c16: f1b8 0f00 cmp.w r8, #0 - 6c1a: d139 bne.n 6c90 - if (start <= m_bitmapStart && m_bitmapStart < (start + count)) { - m_bitmapStart = (start + count) < m_clusterCount ? start + count : 0; - } - } else { - if (start < m_bitmapStart) { - 6c1c: f8d0 3420 ldr.w r3, [r0, #1056] ; 0x420 - 6c20: 4293 cmp r3, r2 - m_bitmapStart = start; - 6c22: bf88 it hi - 6c24: f8c0 2420 strhi.w r2, [r0, #1056] ; 0x420 - } - } - mask = 1 << (start & 7); - sector = m_clusterHeapStartSector + - 6c28: f8d6 742c ldr.w r7, [r6, #1068] ; 0x42c - mask = 1 << (start & 7); - 6c2c: f002 0307 and.w r3, r2, #7 - 6c30: 2401 movs r4, #1 - 6c32: 409c lsls r4, r3 - sector = m_clusterHeapStartSector + - 6c34: eb07 3112 add.w r1, r7, r2, lsr #12 - (start >> (m_bytesPerSectorShift + 3)); - i = (start >> 3) & m_sectorMask; - 6c38: f3c2 09c8 ubfx r9, r2, #3, #9 - mask = 1 << (start & 7); - 6c3c: b2e4 uxtb r4, r4 - 6c3e: 2201 movs r2, #1 - 6c40: 4630 mov r0, r6 - while (true) { - cache = bitmapCachePrepare(sector++, FsCache::CACHE_FOR_WRITE); - 6c42: 188f adds r7, r1, r2 - 6c44: f003 fc9c bl a580 - if (!cache) { - 6c48: b1f8 cbz r0, 6c8a - 6c4a: f109 3eff add.w lr, r9, #4294967295 ; 0xffffffff - 6c4e: 4486 add lr, r0 - 6c50: f200 10ff addw r0, r0, #511 ; 0x1ff - DBG_FAIL_MACRO; - goto fail; - } - for (; i < m_bytesPerSector; i++) { - for (; mask; mask <<= 1) { - if (value == static_cast(cache[i] & mask)) { - 6c54: f81e cf01 ldrb.w ip, [lr, #1]! - 6c58: ea1c 0f04 tst.w ip, r4 - 6c5c: bf14 ite ne - 6c5e: 2201 movne r2, #1 - 6c60: 2200 moveq r2, #0 - 6c62: 4542 cmp r2, r8 - DBG_FAIL_MACRO; - goto fail; - } - cache[i] ^= mask; - 6c64: ea8c 0c04 eor.w ip, ip, r4 - for (; mask; mask <<= 1) { - 6c68: ea4f 0444 mov.w r4, r4, lsl #1 - if (value == static_cast(cache[i] & mask)) { - 6c6c: d00d beq.n 6c8a - if (--count == 0) { - 6c6e: 3d01 subs r5, #1 - cache[i] ^= mask; - 6c70: f88e c000 strb.w ip, [lr] - if (--count == 0) { - 6c74: d018 beq.n 6ca8 - for (; mask; mask <<= 1) { - 6c76: f014 04ff ands.w r4, r4, #255 ; 0xff - 6c7a: d1ed bne.n 6c58 - for (; i < m_bytesPerSector; i++) { - 6c7c: 4570 cmp r0, lr - return true; - } - } - mask = 1; - } - i = 0; - 6c7e: 46a1 mov r9, r4 - 6c80: f04f 0401 mov.w r4, #1 - for (; i < m_bytesPerSector; i++) { - 6c84: d1e6 bne.n 6c54 - cache = bitmapCachePrepare(sector++, FsCache::CACHE_FOR_WRITE); - 6c86: 4639 mov r1, r7 - 6c88: e7d9 b.n 6c3e - } - - fail: - return false; - 6c8a: 2000 movs r0, #0 -} - 6c8c: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - if (start <= m_bitmapStart && m_bitmapStart < (start + count)) { - 6c90: f8d0 0420 ldr.w r0, [r0, #1056] ; 0x420 - 6c94: 4290 cmp r0, r2 - 6c96: d3c7 bcc.n 6c28 - 6c98: 4281 cmp r1, r0 - 6c9a: d9c5 bls.n 6c28 - m_bitmapStart = (start + count) < m_clusterCount ? start + count : 0; - 6c9c: 4299 cmp r1, r3 - 6c9e: bf28 it cs - 6ca0: 2100 movcs r1, #0 - 6ca2: f8c6 1420 str.w r1, [r6, #1056] ; 0x420 - 6ca6: e7bf b.n 6c28 - return true; - 6ca8: 2001 movs r0, #1 -} - 6caa: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 6cae: bf00 nop - -00006cb0 : -//------------------------------------------------------------------------------ -uint32_t ExFatPartition::chainSize(uint32_t cluster) { - 6cb0: b5f8 push {r3, r4, r5, r6, r7, lr} -int8_t ExFatPartition::fatGet(uint32_t cluster, uint32_t* value) { - uint8_t* cache; - uint32_t next; - uint32_t sector; - - if (cluster > (m_clusterCount + 1)) { - 6cb2: f8d0 3430 ldr.w r3, [r0, #1072] ; 0x430 - 6cb6: 3301 adds r3, #1 - 6cb8: 428b cmp r3, r1 - 6cba: d201 bcs.n 6cc0 - if (status < 0) return 0; - 6cbc: 2000 movs r0, #0 -} - 6cbe: bdf8 pop {r3, r4, r5, r6, r7, pc} - 6cc0: 4607 mov r7, r0 - 6cc2: 460c mov r4, r1 - return m_dataCache.prepare(sector, option); - 6cc4: f500 7604 add.w r6, r0, #528 ; 0x210 - uint32_t n = 0; - 6cc8: 2500 movs r5, #0 - 6cca: e006 b.n 6cda - if (cluster > (m_clusterCount + 1)) { - 6ccc: f8d7 3430 ldr.w r3, [r7, #1072] ; 0x430 - 6cd0: 3301 adds r3, #1 - 6cd2: 42a3 cmp r3, r4 - n++; - 6cd4: f105 0501 add.w r5, r5, #1 - if (cluster > (m_clusterCount + 1)) { - 6cd8: d3f0 bcc.n 6cbc - DBG_FAIL_MACRO; - return -1; - } - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 6cda: f8d7 1424 ldr.w r1, [r7, #1060] ; 0x424 - 6cde: 2200 movs r2, #0 - 6ce0: eb01 11d4 add.w r1, r1, r4, lsr #7 - 6ce4: 4630 mov r0, r6 - 6ce6: f003 fc4b bl a580 - - cache = dataCachePrepare(sector, FsCache::CACHE_FOR_READ); - if (!cache) { - return -1; - } - next = getLe32(cache + ((cluster << 2) & m_sectorMask)); - 6cea: 00a4 lsls r4, r4, #2 - 6cec: f3c4 0408 ubfx r4, r4, #0, #9 - if (!cache) { - 6cf0: 2800 cmp r0, #0 - 6cf2: d0e3 beq.n 6cbc - return *reinterpret_cast(src); - 6cf4: 5904 ldr r4, [r0, r4] - if (next == EXFAT_EOC) { - 6cf6: 1c63 adds r3, r4, #1 - 6cf8: d1e8 bne.n 6ccc - n++; - 6cfa: 1c68 adds r0, r5, #1 -} - 6cfc: bdf8 pop {r3, r4, r5, r6, r7, pc} - 6cfe: bf00 nop - -00006d00 : -uint8_t* ExFatPartition::dirCache(DirPos_t* pos, uint8_t options) { - 6d00: b538 push {r3, r4, r5, lr} - 6d02: 460c mov r4, r1 - ((cluster - 2) << m_sectorsPerClusterShift); - 6d04: 680b ldr r3, [r1, #0] - 6d06: f890 c445 ldrb.w ip, [r0, #1093] ; 0x445 - sector += (m_clusterMask & pos->position) >> m_bytesPerSectorShift; - 6d0a: f8d0 1438 ldr.w r1, [r0, #1080] ; 0x438 - 6d0e: 6865 ldr r5, [r4, #4] - 6d10: 3b02 subs r3, #2 - 6d12: 4029 ands r1, r5 - 6d14: fa03 f30c lsl.w r3, r3, ip - 6d18: eb03 2351 add.w r3, r3, r1, lsr #9 - 6d1c: f8d0 142c ldr.w r1, [r0, #1068] ; 0x42c - return m_dataCache.prepare(sector, option); - 6d20: f500 7004 add.w r0, r0, #528 ; 0x210 - 6d24: 4419 add r1, r3 - 6d26: f003 fc2b bl a580 - return cache ? cache + (pos->position & m_sectorMask) : nullptr; - 6d2a: b118 cbz r0, 6d34 - 6d2c: 6863 ldr r3, [r4, #4] - 6d2e: f3c3 0308 ubfx r3, r3, #0, #9 - 6d32: 4418 add r0, r3 -} - 6d34: bd38 pop {r3, r4, r5, pc} - 6d36: bf00 nop - -00006d38 : -int8_t ExFatPartition::dirSeek(DirPos_t* pos, uint32_t offset) { - 6d38: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - uint32_t tmp = (m_clusterMask & pos->position) + offset; - 6d3c: f8d0 3438 ldr.w r3, [r0, #1080] ; 0x438 -int8_t ExFatPartition::dirSeek(DirPos_t* pos, uint32_t offset) { - 6d40: 460c mov r4, r1 - uint32_t tmp = (m_clusterMask & pos->position) + offset; - 6d42: 6849 ldr r1, [r1, #4] - 6d44: 400b ands r3, r1 - pos->position += offset; - 6d46: 4411 add r1, r2 - 6d48: 6061 str r1, [r4, #4] - return m_bytesPerSectorShift + m_sectorsPerClusterShift; - 6d4a: f890 1445 ldrb.w r1, [r0, #1093] ; 0x445 - uint32_t tmp = (m_clusterMask & pos->position) + offset; - 6d4e: 4413 add r3, r2 - 6d50: f101 0209 add.w r2, r1, #9 - tmp >>= bytesPerClusterShift(); - 6d54: b2d2 uxtb r2, r2 - 6d56: 40d3 lsrs r3, r2 - while (tmp--) { - 6d58: b32b cbz r3, 6da6 - 6d5a: 4680 mov r8, r0 - 6d5c: 1e5d subs r5, r3, #1 - return m_dataCache.prepare(sector, option); - 6d5e: f500 7904 add.w r9, r0, #528 ; 0x210 - 6d62: e005 b.n 6d70 - pos->cluster++; - 6d64: 6823 ldr r3, [r4, #0] - while (tmp--) { - 6d66: 3d01 subs r5, #1 - pos->cluster++; - 6d68: f103 0301 add.w r3, r3, #1 - 6d6c: 6023 str r3, [r4, #0] - while (tmp--) { - 6d6e: d31a bcc.n 6da6 - if (pos->isContiguous) { - 6d70: 7a26 ldrb r6, [r4, #8] - 6d72: 2e00 cmp r6, #0 - 6d74: d1f6 bne.n 6d64 - if (cluster > (m_clusterCount + 1)) { - 6d76: f8d8 3430 ldr.w r3, [r8, #1072] ; 0x430 - status = fatGet(pos->cluster, &pos->cluster); - 6d7a: 6827 ldr r7, [r4, #0] - if (cluster > (m_clusterCount + 1)) { - 6d7c: 3301 adds r3, #1 - 6d7e: 429f cmp r7, r3 - 6d80: 4632 mov r2, r6 - 6d82: 4648 mov r0, r9 - 6d84: d812 bhi.n 6dac - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 6d86: f8d8 1424 ldr.w r1, [r8, #1060] ; 0x424 - 6d8a: eb01 11d7 add.w r1, r1, r7, lsr #7 - 6d8e: f003 fbf7 bl a580 - next = getLe32(cache + ((cluster << 2) & m_sectorMask)); - 6d92: 00bf lsls r7, r7, #2 - 6d94: f3c7 0708 ubfx r7, r7, #0, #9 - if (!cache) { - 6d98: b140 cbz r0, 6dac - 6d9a: 59c3 ldr r3, [r0, r7] - if (next == EXFAT_EOC) { - 6d9c: 1c5a adds r2, r3, #1 - 6d9e: d009 beq.n 6db4 - while (tmp--) { - 6da0: 3d01 subs r5, #1 - return 0; - } - *value = next; - 6da2: 6023 str r3, [r4, #0] - while (tmp--) { - 6da4: d2e4 bcs.n 6d70 - return 1; - 6da6: 2001 movs r0, #1 -} - 6da8: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - return -1; - 6dac: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - 6db0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - return 0; - 6db4: 4630 mov r0, r6 -} - 6db6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 6dba: bf00 nop - -00006dbc : -int8_t ExFatPartition::fatGet(uint32_t cluster, uint32_t* value) { - 6dbc: b538 push {r3, r4, r5, lr} - if (cluster > (m_clusterCount + 1)) { - 6dbe: f8d0 3430 ldr.w r3, [r0, #1072] ; 0x430 - 6dc2: 3301 adds r3, #1 - 6dc4: 428b cmp r3, r1 - 6dc6: d202 bcs.n 6dce - return -1; - 6dc8: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - return 1; -} - 6dcc: bd38 pop {r3, r4, r5, pc} - 6dce: 460c mov r4, r1 - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 6dd0: f8d0 1424 ldr.w r1, [r0, #1060] ; 0x424 - 6dd4: 4615 mov r5, r2 - 6dd6: eb01 11d4 add.w r1, r1, r4, lsr #7 - 6dda: 2200 movs r2, #0 - 6ddc: f500 7004 add.w r0, r0, #528 ; 0x210 - 6de0: f003 fbce bl a580 - if (!cache) { - 6de4: 2800 cmp r0, #0 - 6de6: d0ef beq.n 6dc8 - next = getLe32(cache + ((cluster << 2) & m_sectorMask)); - 6de8: 00a4 lsls r4, r4, #2 - 6dea: f3c4 0408 ubfx r4, r4, #0, #9 - 6dee: 5903 ldr r3, [r0, r4] - if (next == EXFAT_EOC) { - 6df0: 1c5a adds r2, r3, #1 - *value = next; - 6df2: bf1a itte ne - 6df4: 602b strne r3, [r5, #0] - return 1; - 6df6: 2001 movne r0, #1 - return 0; - 6df8: 2000 moveq r0, #0 -} - 6dfa: bd38 pop {r3, r4, r5, pc} - -00006dfc : -//------------------------------------------------------------------------------ -bool ExFatPartition::fatPut(uint32_t cluster, uint32_t value) { - uint32_t sector; - uint8_t* cache; - if (cluster < 2 || cluster > (m_clusterCount + 1)) { - 6dfc: 2901 cmp r1, #1 - 6dfe: d91b bls.n 6e38 -bool ExFatPartition::fatPut(uint32_t cluster, uint32_t value) { - 6e00: b538 push {r3, r4, r5, lr} - if (cluster < 2 || cluster > (m_clusterCount + 1)) { - 6e02: f8d0 3430 ldr.w r3, [r0, #1072] ; 0x430 - 6e06: 3301 adds r3, #1 - 6e08: 428b cmp r3, r1 - 6e0a: 460c mov r4, r1 - 6e0c: d201 bcs.n 6e12 - } - setLe32(cache + ((cluster << 2) & m_sectorMask), value); - return true; - - fail: - return false; - 6e0e: 2000 movs r0, #0 -} - 6e10: bd38 pop {r3, r4, r5, pc} - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 6e12: f8d0 1424 ldr.w r1, [r0, #1060] ; 0x424 - 6e16: 4615 mov r5, r2 - 6e18: eb01 11d4 add.w r1, r1, r4, lsr #7 - 6e1c: 2201 movs r2, #1 - 6e1e: f500 7004 add.w r0, r0, #528 ; 0x210 - 6e22: f003 fbad bl a580 - if (!cache) { - 6e26: 4603 mov r3, r0 - 6e28: 2800 cmp r0, #0 - 6e2a: d0f0 beq.n 6e0e - setLe32(cache + ((cluster << 2) & m_sectorMask), value); - 6e2c: 00a4 lsls r4, r4, #2 - 6e2e: f3c4 0408 ubfx r4, r4, #0, #9 - return true; - 6e32: 2001 movs r0, #1 - *reinterpret_cast(dst) = src; - 6e34: 511d str r5, [r3, r4] -} - 6e36: bd38 pop {r3, r4, r5, pc} - return false; - 6e38: 2000 movs r0, #0 -} - 6e3a: 4770 bx lr - -00006e3c : - if (cluster > (m_clusterCount + 1)) { - 6e3c: f8d0 3430 ldr.w r3, [r0, #1072] ; 0x430 - 6e40: 3301 adds r3, #1 - 6e42: 4299 cmp r1, r3 - 6e44: d901 bls.n 6e4a - - return true; - - fail: - return false; -} - 6e46: 2000 movs r0, #0 - 6e48: 4770 bx lr -bool ExFatPartition::freeChain(uint32_t cluster) { - 6e4a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 6e4e: 4605 mov r5, r0 - 6e50: b081 sub sp, #4 - 6e52: 460c mov r4, r1 - 6e54: f500 7904 add.w r9, r0, #528 ; 0x210 - 6e58: 460f mov r7, r1 - 6e5a: f04f 0800 mov.w r8, #0 - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 6e5e: f8d5 1424 ldr.w r1, [r5, #1060] ; 0x424 - 6e62: 2200 movs r2, #0 - 6e64: eb01 11d4 add.w r1, r1, r4, lsr #7 - 6e68: 4648 mov r0, r9 - 6e6a: f003 fb89 bl a580 - 6e6e: 09e3 lsrs r3, r4, #7 - if (!cache) { - 6e70: b198 cbz r0, 6e9a - next = getLe32(cache + ((cluster << 2) & m_sectorMask)); - 6e72: ea4f 0b84 mov.w fp, r4, lsl #2 - 6e76: f3cb 0b08 ubfx fp, fp, #0, #9 - return *reinterpret_cast(src); - 6e7a: f850 200b ldr.w r2, [r0, fp] - if (next == EXFAT_EOC) { - 6e7e: 1c51 adds r1, r2, #1 - 6e80: bf16 itet ne - 6e82: 4616 movne r6, r2 - 6e84: f04f 0a00 moveq.w sl, #0 - 6e88: f04f 0a01 movne.w sl, #1 - if (cluster < 2 || cluster > (m_clusterCount + 1)) { - 6e8c: 2c01 cmp r4, #1 - 6e8e: d904 bls.n 6e9a - 6e90: f8d5 2430 ldr.w r2, [r5, #1072] ; 0x430 - 6e94: 3201 adds r2, #1 - 6e96: 4294 cmp r4, r2 - 6e98: d903 bls.n 6ea2 -} - 6e9a: 2000 movs r0, #0 - 6e9c: b001 add sp, #4 - 6e9e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 6ea2: f8d5 1424 ldr.w r1, [r5, #1060] ; 0x424 - 6ea6: 2201 movs r2, #1 - 6ea8: 4419 add r1, r3 - 6eaa: 4648 mov r0, r9 - 6eac: f003 fb68 bl a580 - if (!cache) { - 6eb0: 2800 cmp r0, #0 - 6eb2: d0f2 beq.n 6e9a - *reinterpret_cast(dst) = src; - 6eb4: f840 800b str.w r8, [r0, fp] - if (status == 0 || (cluster + 1) != next) { - 6eb8: f1ba 0f00 cmp.w sl, #0 - 6ebc: d012 beq.n 6ee4 - 6ebe: 3401 adds r4, #1 - 6ec0: 42b4 cmp r4, r6 - 6ec2: d008 beq.n 6ed6 - if (!bitmapModify(start, cluster - start + 1, 0)) { - 6ec4: 2300 movs r3, #0 - 6ec6: 1be2 subs r2, r4, r7 - 6ec8: 4639 mov r1, r7 - 6eca: 4628 mov r0, r5 - 6ecc: f7ff fe98 bl 6c00 - 6ed0: 2800 cmp r0, #0 - 6ed2: d0e2 beq.n 6e9a - 6ed4: 4637 mov r7, r6 - if (cluster > (m_clusterCount + 1)) { - 6ed6: f8d5 3430 ldr.w r3, [r5, #1072] ; 0x430 - 6eda: 3301 adds r3, #1 - 6edc: 42b3 cmp r3, r6 - 6ede: d3dc bcc.n 6e9a - 6ee0: 4634 mov r4, r6 - 6ee2: e7bc b.n 6e5e - if (!bitmapModify(start, cluster - start + 1, 0)) { - 6ee4: 1c62 adds r2, r4, #1 - 6ee6: 4653 mov r3, sl - 6ee8: 1bd2 subs r2, r2, r7 - 6eea: 4639 mov r1, r7 - 6eec: 4628 mov r0, r5 -} - 6eee: b001 add sp, #4 - 6ef0: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - if (!bitmapModify(start, cluster - start + 1, 0)) { - 6ef4: f7ff be84 b.w 6c00 - -00006ef8 : -//------------------------------------------------------------------------------ -uint32_t ExFatPartition::freeClusterCount() { - 6ef8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - uint32_t nc = 0; - uint32_t sector = m_clusterHeapStartSector; - 6efc: f8d0 142c ldr.w r1, [r0, #1068] ; 0x42c - uint32_t usedCount = 0; - 6f00: 2500 movs r5, #0 -uint32_t ExFatPartition::freeClusterCount() { - 6f02: 4606 mov r6, r0 - 6f04: f500 7804 add.w r8, r0, #528 ; 0x210 - uint32_t nc = 0; - 6f08: 462c mov r4, r5 - 6f0a: 2200 movs r2, #0 - 6f0c: 4640 mov r0, r8 - uint8_t* cache; - - while (true) { - cache = dataCachePrepare(sector++, FsCache::CACHE_FOR_READ); - 6f0e: 1c4f adds r7, r1, #1 - 6f10: f003 fb36 bl a580 - if (!cache) { - 6f14: b1b0 cbz r0, 6f44 - 6f16: f100 3eff add.w lr, r0, #4294967295 ; 0xffffffff - 6f1a: f504 5980 add.w r9, r4, #4096 ; 0x1000 - usedCount++; - } - } - } - nc += 8; - if (nc >= m_clusterCount) { - 6f1e: f8d6 0430 ldr.w r0, [r6, #1072] ; 0x430 - 6f22: e005 b.n 6f30 - } else if (cache[i]) { - 6f24: b981 cbnz r1, 6f48 - nc += 8; - 6f26: 3408 adds r4, #8 - if (nc >= m_clusterCount) { - 6f28: 4284 cmp r4, r0 - 6f2a: d20a bcs.n 6f42 - for (size_t i = 0; i < m_bytesPerSector; i++) { - 6f2c: 454c cmp r4, r9 - 6f2e: d017 beq.n 6f60 - if (cache[i] == 0XFF) { - 6f30: f81e 1f01 ldrb.w r1, [lr, #1]! - 6f34: 29ff cmp r1, #255 ; 0xff - 6f36: d1f5 bne.n 6f24 - nc += 8; - 6f38: 3408 adds r4, #8 - if (nc >= m_clusterCount) { - 6f3a: 4284 cmp r4, r0 - usedCount+= 8; - 6f3c: f105 0508 add.w r5, r5, #8 - if (nc >= m_clusterCount) { - 6f40: d3f4 bcc.n 6f2c - return m_clusterCount - usedCount; - 6f42: 1b40 subs r0, r0, r5 - } - } - } -} - 6f44: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 6f48: 2208 movs r2, #8 - for (uint8_t mask = 1; mask ; mask <<=1) { - 6f4a: 2301 movs r3, #1 - if ((mask & cache[i])) { - 6f4c: 4219 tst r1, r3 - for (uint8_t mask = 1; mask ; mask <<=1) { - 6f4e: ea4f 0c43 mov.w ip, r3, lsl #1 - usedCount++; - 6f52: bf18 it ne - 6f54: 3501 addne r5, #1 - for (uint8_t mask = 1; mask ; mask <<=1) { - 6f56: 3a01 subs r2, #1 - 6f58: fa5f f38c uxtb.w r3, ip - 6f5c: d1f6 bne.n 6f4c - 6f5e: e7e2 b.n 6f26 - cache = dataCachePrepare(sector++, FsCache::CACHE_FOR_READ); - 6f60: 4639 mov r1, r7 - 6f62: e7d2 b.n 6f0a - -00006f64 : -//------------------------------------------------------------------------------ -bool ExFatPartition::init(FsBlockDevice* dev, uint8_t part) { - 6f64: b5f8 push {r3, r4, r5, r6, r7, lr} - 6f66: 4604 mov r4, r0 - pbs_t* pbs; - BpbExFat_t* bpb; - MbrSector_t* mbr; - MbrPart_t* mp; - - m_fatType = 0; - 6f68: 2300 movs r3, #0 - m_sector = 0XFFFFFFFF; - 6f6a: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 6f6e: f504 7704 add.w r7, r4, #528 ; 0x210 - m_blockDev = dev; - 6f72: f8c4 1440 str.w r1, [r4, #1088] ; 0x440 - m_blockDev = blockDev; - 6f76: 6061 str r1, [r4, #4] - m_sector = 0XFFFFFFFF; - 6f78: 60e0 str r0, [r4, #12] - m_blockDev = blockDev; - 6f7a: f8c4 1214 str.w r1, [r4, #532] ; 0x214 - m_sector = 0XFFFFFFFF; - 6f7e: f8c4 021c str.w r0, [r4, #540] ; 0x21c -bool ExFatPartition::init(FsBlockDevice* dev, uint8_t part) { - 6f82: 4615 mov r5, r2 - m_fatType = 0; - 6f84: f884 3444 strb.w r3, [r4, #1092] ; 0x444 - m_status = 0; - 6f88: 7023 strb r3, [r4, #0] - 6f8a: f884 3210 strb.w r3, [r4, #528] ; 0x210 - 6f8e: 461a mov r2, r3 - 6f90: 4619 mov r1, r3 - 6f92: 4638 mov r0, r7 - 6f94: f003 faf4 bl a580 - cacheInit(m_blockDev); - cache = dataCachePrepare(0, FsCache::CACHE_FOR_READ); - if (part > 4 || !cache) { - 6f98: 2d04 cmp r5, #4 - 6f9a: d80c bhi.n 6fb6 - 6f9c: 4606 mov r6, r0 - 6f9e: b150 cbz r0, 6fb6 - DBG_FAIL_MACRO; - goto fail; - } - if (part >= 1) { - 6fa0: b95d cbnz r5, 6fba - DBG_FAIL_MACRO; - goto fail; - } - } - pbs = reinterpret_cast(cache); - if (strncmp(pbs->oemName, "EXFAT", 5)) { - 6fa2: 4927 ldr r1, [pc, #156] ; (7040 ) - 6fa4: 2205 movs r2, #5 - 6fa6: 1cf0 adds r0, r6, #3 - 6fa8: f00a f9ea bl 11380 - 6fac: b918 cbnz r0, 6fb6 - DBG_FAIL_MACRO; - goto fail; - } - bpb = reinterpret_cast(pbs->bpb); - if (bpb->bytesPerSectorShift != m_bytesPerSectorShift) { - 6fae: f896 306c ldrb.w r3, [r6, #108] ; 0x6c - 6fb2: 2b09 cmp r3, #9 - 6fb4: d019 beq.n 6fea - bitmapFind(0, 1); - m_fatType = FAT_TYPE_EXFAT; - return true; - - fail: - return false; - 6fb6: 2000 movs r0, #0 -} - 6fb8: bdf8 pop {r3, r4, r5, r6, r7, pc} - mp = &mbr->part[part - 1]; - 6fba: 1e6b subs r3, r5, #1 - if ((mp->boot != 0 && mp->boot != 0X80) || mp->type == 0) { - 6fbc: eb00 1303 add.w r3, r0, r3, lsl #4 - 6fc0: f893 21be ldrb.w r2, [r3, #446] ; 0x1be - 6fc4: f012 027f ands.w r2, r2, #127 ; 0x7f - 6fc8: d1f5 bne.n 6fb6 - 6fca: f893 31c2 ldrb.w r3, [r3, #450] ; 0x1c2 - 6fce: 2b00 cmp r3, #0 - 6fd0: d0f1 beq.n 6fb6 - return *reinterpret_cast(src); - 6fd2: eb00 1605 add.w r6, r0, r5, lsl #4 - 6fd6: 4638 mov r0, r7 - 6fd8: f8d6 51b6 ldr.w r5, [r6, #438] ; 0x1b6 - 6fdc: 4629 mov r1, r5 - 6fde: f003 facf bl a580 - if (!cache) { - 6fe2: 4606 mov r6, r0 - 6fe4: 2800 cmp r0, #0 - 6fe6: d1dc bne.n 6fa2 - 6fe8: e7e5 b.n 6fb6 - m_fatStartSector = volStart + getLe32(bpb->fatOffset); - 6fea: 6d33 ldr r3, [r6, #80] ; 0x50 - 6fec: 442b add r3, r5 - 6fee: f8c4 3424 str.w r3, [r4, #1060] ; 0x424 - 6ff2: 6d73 ldr r3, [r6, #84] ; 0x54 - m_fatLength = getLe32(bpb->fatLength); - 6ff4: f8c4 3428 str.w r3, [r4, #1064] ; 0x428 - m_clusterHeapStartSector = volStart + getLe32(bpb->clusterHeapOffset); - 6ff8: 6db3 ldr r3, [r6, #88] ; 0x58 - 6ffa: 442b add r3, r5 - 6ffc: f8c4 342c str.w r3, [r4, #1068] ; 0x42c - 7000: 6df3 ldr r3, [r6, #92] ; 0x5c - m_clusterCount = getLe32(bpb->clusterCount); - 7002: f8c4 3430 str.w r3, [r4, #1072] ; 0x430 - 7006: 6e33 ldr r3, [r6, #96] ; 0x60 - m_rootDirectoryCluster = getLe32(bpb->rootDirectoryCluster); - 7008: f8c4 3434 str.w r3, [r4, #1076] ; 0x434 - m_sectorsPerClusterShift = bpb->sectorsPerClusterShift; - 700c: f896 206d ldrb.w r2, [r6, #109] ; 0x6d - 7010: f884 2445 strb.w r2, [r4, #1093] ; 0x445 - m_bytesPerCluster = 1UL << (m_bytesPerSectorShift + m_sectorsPerClusterShift); - 7014: 2501 movs r5, #1 - 7016: f102 0309 add.w r3, r2, #9 - 701a: fa05 f303 lsl.w r3, r5, r3 - 701e: f8c4 343c str.w r3, [r4, #1084] ; 0x43c - m_clusterMask = m_bytesPerCluster - 1; - 7022: 3b01 subs r3, #1 - 7024: f8c4 3438 str.w r3, [r4, #1080] ; 0x438 - m_bitmapStart = 0; - 7028: f8c4 0420 str.w r0, [r4, #1056] ; 0x420 - bitmapFind(0, 1); - 702c: 4601 mov r1, r0 - 702e: 462a mov r2, r5 - 7030: 4620 mov r0, r4 - 7032: f7ff fd85 bl 6b40 - m_fatType = FAT_TYPE_EXFAT; - 7036: 2340 movs r3, #64 ; 0x40 - 7038: f884 3444 strb.w r3, [r4, #1092] ; 0x444 - return true; - 703c: 4628 mov r0, r5 -} - 703e: bdf8 pop {r3, r4, r5, r6, r7, pc} - 7040: 00018118 .word 0x00018118 - -00007044 : - - fail: - return false; -} -//------------------------------------------------------------------------------ -uint32_t ExFatPartition::rootLength() { - 7044: b510 push {r4, lr} - 7046: 4604 mov r4, r0 - uint32_t nc = chainSize(m_rootDirectoryCluster); - 7048: f8d0 1434 ldr.w r1, [r0, #1076] ; 0x434 - 704c: f7ff fe30 bl 6cb0 - return m_bytesPerSectorShift + m_sectorsPerClusterShift; - 7050: f894 3445 ldrb.w r3, [r4, #1093] ; 0x445 - 7054: 3309 adds r3, #9 - return nc << bytesPerClusterShift(); - 7056: b2db uxtb r3, r3 -} - 7058: 4098 lsls r0, r3 - 705a: bd10 pop {r4, pc} - -0000705c : - fail: - m_curCluster = tmp; - return false; -} -//------------------------------------------------------------------------------ -bool FatFile::sync() { - 705c: b570 push {r4, r5, r6, lr} - uint16_t date, time; - uint8_t ms10; - if (!isOpen()) { - return true; - } - if (m_flags & FILE_FLAG_DIR_DIRTY) { - 705e: f990 3002 ldrsb.w r3, [r0, #2] - 7062: 2b00 cmp r3, #0 -bool FatFile::sync() { - 7064: b082 sub sp, #8 - 7066: 4604 mov r4, r0 - if (m_flags & FILE_FLAG_DIR_DIRTY) { - 7068: db0d blt.n 7086 - setLe16(dir->modifyTime, time); - } - // clear directory dirty - m_flags &= ~FILE_FLAG_DIR_DIRTY; - } - if (m_vol->cacheSync()) { - 706a: 68a5 ldr r5, [r4, #8] - uint8_t* fatCachePrepare(uint32_t sector, uint8_t options) { - if (m_fatCount == 2) options |= FsCache::CACHE_STATUS_MIRROR_FAT; - return m_fatCache.prepare(sector, options); - } - bool cacheSync() { - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 706c: f105 0028 add.w r0, r5, #40 ; 0x28 - 7070: f003 fa5e bl a530 - 7074: 2800 cmp r0, #0 - 7076: d13b bne.n 70f0 - return true; - } - DBG_FAIL_MACRO; - - fail: - m_error |= WRITE_ERROR; - 7078: 7863 ldrb r3, [r4, #1] - 707a: f043 0301 orr.w r3, r3, #1 - return false; - 707e: 2000 movs r0, #0 - m_error |= WRITE_ERROR; - 7080: 7063 strb r3, [r4, #1] -} - 7082: b002 add sp, #8 - 7084: bd70 pop {r4, r5, r6, pc} - bool cacheSync() { - return m_cache.sync() && syncDevice(); - } -#endif // USE_SEPARATE_FAT_CACHE - uint8_t* dataCachePrepare(uint32_t sector, uint8_t options) { - return m_cache.prepare(sector, options); - 7086: 6880 ldr r0, [r0, #8] - 7088: 69a1 ldr r1, [r4, #24] - 708a: 2201 movs r2, #1 - 708c: 3028 adds r0, #40 ; 0x28 - 708e: f003 fa77 bl a580 - if (!dir) { - 7092: 2800 cmp r0, #0 - 7094: d0f0 beq.n 7078 - return dir + (m_dirIndex & 0XF); - 7096: 88a5 ldrh r5, [r4, #4] - 7098: f005 050f and.w r5, r5, #15 - 709c: 016b lsls r3, r5, #5 - 709e: eb00 1545 add.w r5, r0, r5, lsl #5 - if (!dir || dir->name[0] == FAT_NAME_DELETED) { - 70a2: 5cc3 ldrb r3, [r0, r3] - 70a4: 2be5 cmp r3, #229 ; 0xe5 - 70a6: d0e7 beq.n 7078 - if (isFile()) { - 70a8: 7823 ldrb r3, [r4, #0] - if (FsDateTime::callback) { - 70aa: 4a18 ldr r2, [pc, #96] ; (710c ) - if (isFile()) { - 70ac: 071b lsls r3, r3, #28 - setLe32(dir->fileSize, m_fileSize); - 70ae: bf44 itt mi - 70b0: 69e3 ldrmi r3, [r4, #28] -} -inline void setLe16(uint8_t* dst, uint16_t src) { - *reinterpret_cast(dst) = src; -} -inline void setLe32(uint8_t* dst, uint32_t src) { - *reinterpret_cast(dst) = src; - 70b2: 61eb strmi r3, [r5, #28] - setLe16(dir->firstClusterLow, m_firstCluster & 0XFFFF); - 70b4: 6a23 ldr r3, [r4, #32] - if (FsDateTime::callback) { - 70b6: 6816 ldr r6, [r2, #0] - setLe16(dir->firstClusterLow, m_firstCluster & 0XFFFF); - 70b8: 836b strh r3, [r5, #26] - setLe16(dir->firstClusterHigh, m_firstCluster >> 16); - 70ba: 0c1a lsrs r2, r3, #16 - 70bc: 82aa strh r2, [r5, #20] - if (FsDateTime::callback) { - 70be: b166 cbz r6, 70da - FsDateTime::callback(&date, &time, &ms10); - 70c0: f10d 0203 add.w r2, sp, #3 - 70c4: f10d 0106 add.w r1, sp, #6 - 70c8: a801 add r0, sp, #4 - 70ca: 47b0 blx r6 - setLe16(dir->modifyDate, date); - 70cc: f8bd 3004 ldrh.w r3, [sp, #4] - *reinterpret_cast(dst) = src; - 70d0: f8bd 2006 ldrh.w r2, [sp, #6] - 70d4: 832b strh r3, [r5, #24] - 70d6: 826b strh r3, [r5, #18] - 70d8: 82ea strh r2, [r5, #22] - m_flags &= ~FILE_FLAG_DIR_DIRTY; - 70da: 78a3 ldrb r3, [r4, #2] - if (m_vol->cacheSync()) { - 70dc: 68a5 ldr r5, [r4, #8] - m_flags &= ~FILE_FLAG_DIR_DIRTY; - 70de: f003 037f and.w r3, r3, #127 ; 0x7f - 70e2: 70a3 strb r3, [r4, #2] - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 70e4: f105 0028 add.w r0, r5, #40 ; 0x28 - 70e8: f003 fa22 bl a530 - 70ec: 2800 cmp r0, #0 - 70ee: d0c3 beq.n 7078 - 70f0: f505 700e add.w r0, r5, #568 ; 0x238 - 70f4: f003 fa1c bl a530 - 70f8: 2800 cmp r0, #0 - 70fa: d0bd beq.n 7078 - 70fc: 6828 ldr r0, [r5, #0] - return m_blockDev->syncDevice(); - 70fe: 6803 ldr r3, [r0, #0] - 7100: 6a1b ldr r3, [r3, #32] - 7102: 4798 blx r3 - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 7104: 2800 cmp r0, #0 - 7106: d0b7 beq.n 7078 - 7108: e7bb b.n 7082 - 710a: bf00 nop - 710c: 1fff9770 .word 0x1fff9770 - -00007110 : - uint32_t cc = m_curCluster; - 7110: 4602 mov r2, r0 -bool FatFile::addCluster() { - 7112: b538 push {r3, r4, r5, lr} - uint32_t cc = m_curCluster; - 7114: f852 5f10 ldr.w r5, [r2, #16]! -bool FatFile::addCluster() { - 7118: 4604 mov r4, r0 - if (!m_vol->allocateCluster(m_curCluster, &m_curCluster)) { - 711a: 4629 mov r1, r5 - 711c: 6880 ldr r0, [r0, #8] - 711e: f001 ffd9 bl 90d4 - 7122: b150 cbz r0, 713a - if (cc == 0) { - 7124: b155 cbz r5, 713c - } else if (m_curCluster != (cc + 1)) { - 7126: 6923 ldr r3, [r4, #16] - 7128: 3501 adds r5, #1 - 712a: 42ab cmp r3, r5 - m_flags &= ~FILE_FLAG_CONTIGUOUS; - 712c: 78a3 ldrb r3, [r4, #2] - 712e: bf18 it ne - 7130: f003 03bf andne.w r3, r3, #191 ; 0xbf - m_flags |= FILE_FLAG_DIR_DIRTY; - 7134: f063 037f orn r3, r3, #127 ; 0x7f - 7138: 70a3 strb r3, [r4, #2] -} - 713a: bd38 pop {r3, r4, r5, pc} - m_flags |= FILE_FLAG_CONTIGUOUS; - 713c: 78a3 ldrb r3, [r4, #2] - 713e: f043 0340 orr.w r3, r3, #64 ; 0x40 - 7142: e7f7 b.n 7134 - -00007144 : -bool FatFile::addDirCluster() { - 7144: b5f8 push {r3, r4, r5, r6, r7, lr} - if (isRootFixed()) { - 7146: 7804 ldrb r4, [r0, #0] - 7148: f014 0420 ands.w r4, r4, #32 - 714c: d104 bne.n 7158 - if (m_curPosition >= 512UL*4095) { - 714e: 4b1a ldr r3, [pc, #104] ; (71b8 ) - 7150: 6942 ldr r2, [r0, #20] - 7152: 429a cmp r2, r3 - 7154: 4605 mov r5, r0 - 7156: d302 bcc.n 715e - return false; - 7158: 2700 movs r7, #0 -} - 715a: 4638 mov r0, r7 - 715c: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (!addCluster()) { - 715e: f7ff ffd7 bl 7110 - 7162: 4607 mov r7, r0 - 7164: 2800 cmp r0, #0 - 7166: d0f7 beq.n 7158 - sector = m_vol->clusterStartSector(m_curCluster); - 7168: 68a8 ldr r0, [r5, #8] - bool allocContiguous(uint32_t count, uint32_t* firstCluster); - uint8_t sectorOfCluster(uint32_t position) const { - return (position >> 9) & m_clusterSectorMask; - } - uint32_t clusterStartSector(uint32_t cluster) const { - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 716a: 692e ldr r6, [r5, #16] - 716c: 7982 ldrb r2, [r0, #6] - 716e: 6943 ldr r3, [r0, #20] - 7170: 3e02 subs r6, #2 - 7172: 4096 lsls r6, r2 - 7174: 441e add r6, r3 - for (uint8_t i = 0; i < m_vol->sectorsPerCluster(); i++) { - 7176: 7903 ldrb r3, [r0, #4] - 7178: b1ab cbz r3, 71a6 - 717a: 4621 mov r1, r4 - 717c: e006 b.n 718c - memset(pc, 0, m_vol->bytesPerSector()); - 717e: f009 fff9 bl 11174 - for (uint8_t i = 0; i < m_vol->sectorsPerCluster(); i++) { - 7182: 68a8 ldr r0, [r5, #8] - 7184: 7903 ldrb r3, [r0, #4] - 7186: b2e1 uxtb r1, r4 - 7188: 428b cmp r3, r1 - 718a: d90b bls.n 71a4 - return m_cache.prepare(sector, options); - 718c: 4431 add r1, r6 - 718e: 2205 movs r2, #5 - 7190: 3028 adds r0, #40 ; 0x28 - 7192: f003 f9f5 bl a580 - 7196: 3401 adds r4, #1 - memset(pc, 0, m_vol->bytesPerSector()); - 7198: f44f 7200 mov.w r2, #512 ; 0x200 - 719c: 2100 movs r1, #0 - if (!pc) { - 719e: 2800 cmp r0, #0 - 71a0: d1ed bne.n 717e - 71a2: e7d9 b.n 7158 - return m_bytesPerSector << m_sectorsPerClusterShift; - 71a4: 7982 ldrb r2, [r0, #6] - m_curPosition += m_vol->bytesPerCluster(); - 71a6: 6969 ldr r1, [r5, #20] - 71a8: f44f 7300 mov.w r3, #512 ; 0x200 - 71ac: 4093 lsls r3, r2 - 71ae: fa11 f383 uxtah r3, r1, r3 - 71b2: 616b str r3, [r5, #20] -} - 71b4: 4638 mov r0, r7 - 71b6: bdf8 pop {r3, r4, r5, r6, r7, pc} - 71b8: 001ffe00 .word 0x001ffe00 - -000071bc : -DirFat_t* FatFile::cacheDirEntry(uint8_t action) { - 71bc: b510 push {r4, lr} - 71be: 4604 mov r4, r0 - return m_cache.prepare(sector, options); - 71c0: 6880 ldr r0, [r0, #8] - 71c2: 460a mov r2, r1 - 71c4: 3028 adds r0, #40 ; 0x28 - 71c6: 69a1 ldr r1, [r4, #24] - 71c8: f003 f9da bl a580 - if (!dir) { - 71cc: b120 cbz r0, 71d8 - return dir + (m_dirIndex & 0XF); - 71ce: 88a3 ldrh r3, [r4, #4] - 71d0: f003 030f and.w r3, r3, #15 - 71d4: eb00 1043 add.w r0, r0, r3, lsl #5 -} - 71d8: bd10 pop {r4, pc} - 71da: bf00 nop - -000071dc : -bool FatFile::close() { - 71dc: b510 push {r4, lr} - if (!isOpen()) { - 71de: 7803 ldrb r3, [r0, #0] -bool FatFile::close() { - 71e0: 4604 mov r4, r0 - if (!isOpen()) { - 71e2: b12b cbz r3, 71f0 - 71e4: f7ff ff3a bl 705c - m_attributes = FILE_ATTR_CLOSED; - 71e8: 2300 movs r3, #0 - 71ea: 7023 strb r3, [r4, #0] - m_flags = 0; - 71ec: 70a3 strb r3, [r4, #2] -} - 71ee: bd10 pop {r4, pc} - m_attributes = FILE_ATTR_CLOSED; - 71f0: 2300 movs r3, #0 - 71f2: 7023 strb r3, [r4, #0] - m_flags = 0; - 71f4: 70a3 strb r3, [r4, #2] - return true; - 71f6: 2001 movs r0, #1 -} - 71f8: bd10 pop {r4, pc} - 71fa: bf00 nop - -000071fc : -bool FatFile::dirEntry(DirFat_t* dst) { - 71fc: b538 push {r3, r4, r5, lr} - if (!isOpen()) { - 71fe: 7803 ldrb r3, [r0, #0] -bool FatFile::dirEntry(DirFat_t* dst) { - 7200: 4604 mov r4, r0 - 7202: 460d mov r5, r1 - if (!isOpen()) { - 7204: b113 cbz r3, 720c - 7206: f7ff ff29 bl 705c - if (!sync()) { - 720a: b188 cbz r0, 7230 - 720c: 68a0 ldr r0, [r4, #8] - 720e: 69a1 ldr r1, [r4, #24] - 7210: 2200 movs r2, #0 - 7212: 3028 adds r0, #40 ; 0x28 - 7214: f003 f9b4 bl a580 - if (!dir) { - 7218: b150 cbz r0, 7230 - return dir + (m_dirIndex & 0XF); - 721a: 88a3 ldrh r3, [r4, #4] - 721c: f003 030f and.w r3, r3, #15 - memcpy(dst, dir, sizeof(DirFat_t)); - 7220: eb00 1143 add.w r1, r0, r3, lsl #5 - 7224: 2220 movs r2, #32 - 7226: 4628 mov r0, r5 - 7228: f004 fe06 bl be38 - return true; - 722c: 2001 movs r0, #1 -} - 722e: bd38 pop {r3, r4, r5, pc} - return false; - 7230: 2000 movs r0, #0 -} - 7232: bd38 pop {r3, r4, r5, pc} - -00007234 : -bool FatFile::getCreateDateTime(uint16_t* pdate, uint16_t* ptime) { - 7234: b530 push {r4, r5, lr} - 7236: b089 sub sp, #36 ; 0x24 - 7238: 460d mov r5, r1 - if (!dirEntry(&dir)) { - 723a: 4669 mov r1, sp -bool FatFile::getCreateDateTime(uint16_t* pdate, uint16_t* ptime) { - 723c: 4614 mov r4, r2 - if (!dirEntry(&dir)) { - 723e: f7ff ffdd bl 71fc - 7242: b128 cbz r0, 7250 - *pdate = getLe16(dir.createDate); - 7244: f8bd 2010 ldrh.w r2, [sp, #16] - *ptime = getLe16(dir.createTime); - 7248: f8bd 300e ldrh.w r3, [sp, #14] - *pdate = getLe16(dir.createDate); - 724c: 802a strh r2, [r5, #0] - *ptime = getLe16(dir.createTime); - 724e: 8023 strh r3, [r4, #0] -} - 7250: b009 add sp, #36 ; 0x24 - 7252: bd30 pop {r4, r5, pc} - -00007254 : -bool FatFile::getModifyDateTime(uint16_t* pdate, uint16_t* ptime) { - 7254: b530 push {r4, r5, lr} - 7256: b089 sub sp, #36 ; 0x24 - 7258: 460d mov r5, r1 - if (!dirEntry(&dir)) { - 725a: 4669 mov r1, sp -bool FatFile::getModifyDateTime(uint16_t* pdate, uint16_t* ptime) { - 725c: 4614 mov r4, r2 - if (!dirEntry(&dir)) { - 725e: f7ff ffcd bl 71fc - 7262: b128 cbz r0, 7270 - *pdate = getLe16(dir.modifyDate); - 7264: f8bd 2018 ldrh.w r2, [sp, #24] - *ptime = getLe16(dir.modifyTime); - 7268: f8bd 3016 ldrh.w r3, [sp, #22] - *pdate = getLe16(dir.modifyDate); - 726c: 802a strh r2, [r5, #0] - *ptime = getLe16(dir.modifyTime); - 726e: 8023 strh r3, [r4, #0] -} - 7270: b009 add sp, #36 ; 0x24 - 7272: bd30 pop {r4, r5, pc} - -00007274 : - if (!parent->isDir()) { - 7274: 780b ldrb r3, [r1, #0] - 7276: f013 0f70 tst.w r3, #112 ; 0x70 - 727a: d101 bne.n 7280 -} - 727c: 2000 movs r0, #0 - 727e: 4770 bx lr -bool FatFile::mkdir(FatFile* parent, FatName_t* fname) { - 7280: b5f0 push {r4, r5, r6, r7, lr} - if (!open(parent, fname, O_CREAT | O_EXCL | O_RDWR)) { - 7282: f640 2302 movw r3, #2562 ; 0xa02 -bool FatFile::mkdir(FatFile* parent, FatName_t* fname) { - 7286: b089 sub sp, #36 ; 0x24 - 7288: 460d mov r5, r1 - 728a: 4604 mov r4, r0 - if (!open(parent, fname, O_CREAT | O_EXCL | O_RDWR)) { - 728c: f001 f860 bl 8350 - 7290: b138 cbz r0, 72a2 - m_flags = FILE_FLAG_READ; - 7292: 2201 movs r2, #1 - m_attributes = FILE_ATTR_SUBDIR; - 7294: 2310 movs r3, #16 - m_flags = FILE_FLAG_READ; - 7296: 70a2 strb r2, [r4, #2] - m_attributes = FILE_ATTR_SUBDIR; - 7298: 7023 strb r3, [r4, #0] - if (!addDirCluster()) { - 729a: 4620 mov r0, r4 - 729c: f7ff ff52 bl 7144 - 72a0: b910 cbnz r0, 72a8 -} - 72a2: 2000 movs r0, #0 - 72a4: b009 add sp, #36 ; 0x24 - 72a6: bdf0 pop {r4, r5, r6, r7, pc} - if (!isOpen()) { - 72a8: 7823 ldrb r3, [r4, #0] - m_firstCluster = m_curCluster; - 72aa: 6922 ldr r2, [r4, #16] - 72ac: 6222 str r2, [r4, #32] - if (!isOpen()) { - 72ae: b16b cbz r3, 72cc - if (pos == m_curPosition) { - 72b0: 6963 ldr r3, [r4, #20] - 72b2: b133 cbz r3, 72c2 - m_flags &= ~FILE_FLAG_PREALLOCATE; - 72b4: 78a3 ldrb r3, [r4, #2] - m_curCluster = 0; - 72b6: 2200 movs r2, #0 - m_flags &= ~FILE_FLAG_PREALLOCATE; - 72b8: f023 0320 bic.w r3, r3, #32 - m_curCluster = 0; - 72bc: 6122 str r2, [r4, #16] - m_curPosition = pos; - 72be: 6162 str r2, [r4, #20] - m_flags &= ~FILE_FLAG_PREALLOCATE; - 72c0: 70a3 strb r3, [r4, #2] - if (!isOpen()) { - 72c2: 4620 mov r0, r4 - 72c4: f7ff feca bl 705c - if (!sync()) { - 72c8: 2800 cmp r0, #0 - 72ca: d0ea beq.n 72a2 - 72cc: 68a0 ldr r0, [r4, #8] - 72ce: 69a1 ldr r1, [r4, #24] - 72d0: 2201 movs r2, #1 - 72d2: 3028 adds r0, #40 ; 0x28 - 72d4: f003 f954 bl a580 - if (!dir) { - 72d8: 2800 cmp r0, #0 - 72da: d0e2 beq.n 72a2 - return dir + (m_dirIndex & 0XF); - 72dc: 88a3 ldrh r3, [r4, #4] - 72de: f003 030f and.w r3, r3, #15 - 72e2: eb00 1143 add.w r1, r0, r3, lsl #5 - dir->attributes = FAT_ATTRIB_DIRECTORY; - 72e6: 2210 movs r2, #16 - 72e8: 72ca strb r2, [r1, #11] - memcpy(&dot, dir, sizeof(dot)); - 72ea: 4668 mov r0, sp - 72ec: 2220 movs r2, #32 - 72ee: f004 fda3 bl be38 - dot.name[i] = ' '; - 72f2: 220a movs r2, #10 - 72f4: 2120 movs r1, #32 - 72f6: f10d 0001 add.w r0, sp, #1 - 72fa: f009 ff3b bl 11174 - sector = m_vol->clusterStartSector(m_firstCluster); - 72fe: 68a0 ldr r0, [r4, #8] - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 7300: 6a21 ldr r1, [r4, #32] - 7302: 7983 ldrb r3, [r0, #6] - 7304: 3902 subs r1, #2 - 7306: 4099 lsls r1, r3 - 7308: 6943 ldr r3, [r0, #20] - return m_cache.prepare(sector, options); - 730a: 2201 movs r2, #1 - 730c: 4419 add r1, r3 - 730e: 3028 adds r0, #40 ; 0x28 - 7310: f003 f936 bl a580 - if (!dir) { - 7314: 4606 mov r6, r0 - 7316: 2800 cmp r0, #0 - 7318: d0c3 beq.n 72a2 - memcpy(&dir[0], &dot, sizeof(dot)); - 731a: 272e movs r7, #46 ; 0x2e - 731c: 2220 movs r2, #32 - 731e: 4669 mov r1, sp - 7320: f88d 7000 strb.w r7, [sp] - 7324: f004 fd88 bl be38 - setLe16(dot.firstClusterLow, parent->m_firstCluster & 0XFFFF); - 7328: 6a2b ldr r3, [r5, #32] - dot.name[1] = '.'; - 732a: f88d 7001 strb.w r7, [sp, #1] - setLe16(dot.firstClusterHigh, parent->m_firstCluster >> 16); - 732e: 0c1a lsrs r2, r3, #16 - 7330: f8ad 2014 strh.w r2, [sp, #20] - memcpy(&dir[1], &dot, sizeof(dot)); - 7334: 4669 mov r1, sp - 7336: f106 0020 add.w r0, r6, #32 - 733a: 2220 movs r2, #32 - setLe16(dot.firstClusterLow, parent->m_firstCluster & 0XFFFF); - 733c: f8ad 301a strh.w r3, [sp, #26] - memcpy(&dir[1], &dot, sizeof(dot)); - 7340: f004 fd7a bl be38 - return m_vol->cacheSync(); - 7344: 68a4 ldr r4, [r4, #8] - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 7346: f104 0028 add.w r0, r4, #40 ; 0x28 - 734a: f003 f8f1 bl a530 - 734e: 2800 cmp r0, #0 - 7350: d0a7 beq.n 72a2 - 7352: f504 700e add.w r0, r4, #568 ; 0x238 - 7356: f003 f8eb bl a530 - 735a: 2800 cmp r0, #0 - 735c: d0a1 beq.n 72a2 - 735e: 6820 ldr r0, [r4, #0] - return m_blockDev->syncDevice(); - 7360: 6803 ldr r3, [r0, #0] - 7362: 6a1b ldr r3, [r3, #32] -} - 7364: b009 add sp, #36 ; 0x24 - 7366: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} - 736a: 4718 bx r3 - -0000736c : -bool FatFile::mkdir(FatFile* parent, const char* path, bool pFlag) { - 736c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 7370: 4604 mov r4, r0 - 7372: b094 sub sp, #80 ; 0x50 - 7374: 4698 mov r8, r3 - if (isOpen() || !parent->isDir()) { - 7376: 7823 ldrb r3, [r4, #0] -bool FatFile::mkdir(FatFile* parent, const char* path, bool pFlag) { - 7378: 9201 str r2, [sp, #4] - */ -/** - * \class FsName - * \brief Handle UTF-8 file names. - */ -class FsName { - 737a: 2000 movs r0, #0 - 737c: f8ad 0014 strh.w r0, [sp, #20] - 7380: 900b str r0, [sp, #44] ; 0x2c - if (isOpen() || !parent->isDir()) { - 7382: 2b00 cmp r3, #0 - 7384: d140 bne.n 7408 - 7386: 780b ldrb r3, [r1, #0] - 7388: f013 0f70 tst.w r3, #112 ; 0x70 - 738c: 460d mov r5, r1 - 738e: d03b beq.n 7408 - if (isDirSeparator(*path)) { - 7390: 7813 ldrb r3, [r2, #0] - 7392: 2b2f cmp r3, #47 ; 0x2f - 7394: 4616 mov r6, r2 - 7396: d03b beq.n 7410 - if (!open(parent, &fname, O_RDONLY)) { - 7398: 2700 movs r7, #0 - 739a: e028 b.n 73ee - if (!*path) { - 739c: 9e01 ldr r6, [sp, #4] - 739e: 7836 ldrb r6, [r6, #0] - 73a0: 2e00 cmp r6, #0 - 73a2: d04e beq.n 7442 - if (!open(parent, &fname, O_RDONLY)) { - 73a4: f000 ffd4 bl 8350 - 73a8: 4603 mov r3, r0 - if (!pFlag || !mkdir(parent, &fname)) { - 73aa: aa02 add r2, sp, #8 - 73ac: 4629 mov r1, r5 - 73ae: 4620 mov r0, r4 - if (!open(parent, &fname, O_RDONLY)) { - 73b0: b92b cbnz r3, 73be - if (!pFlag || !mkdir(parent, &fname)) { - 73b2: f1b8 0f00 cmp.w r8, #0 - 73b6: d027 beq.n 7408 - 73b8: f7ff ff5c bl 7274 - 73bc: b320 cbz r0, 7408 - tmpDir = *this; - 73be: 46a6 mov lr, r4 - 73c0: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} - 73c4: f10d 0c2c add.w ip, sp, #44 ; 0x2c - 73c8: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 73cc: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} - 73d0: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - if (!isOpen()) { - 73d4: 7823 ldrb r3, [r4, #0] - tmpDir = *this; - 73d6: f8de 2000 ldr.w r2, [lr] - 73da: f8cc 2000 str.w r2, [ip] - bool isOpen() const {return m_attributes;} - 73de: 4620 mov r0, r4 - if (!isOpen()) { - 73e0: b10b cbz r3, 73e6 - 73e2: f7ff fe3b bl 705c - if (!parsePathName(path, &fname, &path)) { - 73e6: 9e01 ldr r6, [sp, #4] - m_attributes = FILE_ATTR_CLOSED; - 73e8: 7027 strb r7, [r4, #0] - m_flags = 0; - 73ea: 70a7 strb r7, [r4, #2] - parent = &tmpDir; - 73ec: ad0b add r5, sp, #44 ; 0x2c - if (!parsePathName(path, &fname, &path)) { - 73ee: 4631 mov r1, r6 - 73f0: ab01 add r3, sp, #4 - 73f2: aa02 add r2, sp, #8 - 73f4: 4620 mov r0, r4 - 73f6: f001 f8ed bl 85d4 - 73fa: 4606 mov r6, r0 - if (!open(parent, &fname, O_RDONLY)) { - 73fc: aa02 add r2, sp, #8 - 73fe: 4629 mov r1, r5 - 7400: 2300 movs r3, #0 - 7402: 4620 mov r0, r4 - if (!parsePathName(path, &fname, &path)) { - 7404: 2e00 cmp r6, #0 - 7406: d1c9 bne.n 739c - switch (vol->fatType()) { - 7408: 2000 movs r0, #0 -} - 740a: b014 add sp, #80 ; 0x50 - 740c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - path++; - 7410: 3601 adds r6, #1 - 7412: 9601 str r6, [sp, #4] - while (isDirSeparator(*path)) { - 7414: 7833 ldrb r3, [r6, #0] - 7416: 2b2f cmp r3, #47 ; 0x2f - 7418: d0fa beq.n 7410 - if (!tmpDir.openRoot(parent->m_vol)) { - 741a: 68ad ldr r5, [r5, #8] - memset(this, 0, sizeof(FatFile)); - 741c: 2224 movs r2, #36 ; 0x24 - 741e: 2100 movs r1, #0 - 7420: a80b add r0, sp, #44 ; 0x2c - 7422: f009 fea7 bl 11174 - m_vol = vol; - 7426: 950d str r5, [sp, #52] ; 0x34 - return m_fatType; - 7428: 79eb ldrb r3, [r5, #7] - switch (vol->fatType()) { - 742a: 2b10 cmp r3, #16 - 742c: d00f beq.n 744e - 742e: 2b20 cmp r3, #32 - 7430: d1ea bne.n 7408 - 7432: 2340 movs r3, #64 ; 0x40 - m_attributes = FILE_ATTR_ROOT_FIXED; - 7434: f88d 302c strb.w r3, [sp, #44] ; 0x2c - m_flags = FILE_FLAG_READ; - 7438: 2301 movs r3, #1 - 743a: f88d 302e strb.w r3, [sp, #46] ; 0x2e - parent = &tmpDir; - 743e: ad0b add r5, sp, #44 ; 0x2c - 7440: e7aa b.n 7398 - return mkdir(parent, &fname); - 7442: aa02 add r2, sp, #8 - 7444: f7ff ff16 bl 7274 -} - 7448: b014 add sp, #80 ; 0x50 - 744a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - switch (vol->fatType()) { - 744e: 2320 movs r3, #32 - 7450: e7f0 b.n 7434 - 7452: bf00 nop - -00007454 : -bool FatFile::open(FatFile* dirFile, const char* path, oflag_t oflag) { - 7454: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 7458: 4604 mov r4, r0 - 745a: b094 sub sp, #80 ; 0x50 - 745c: 4698 mov r8, r3 - if (isOpen() || !dirFile->isDir()) { - 745e: 7823 ldrb r3, [r4, #0] -bool FatFile::open(FatFile* dirFile, const char* path, oflag_t oflag) { - 7460: 9201 str r2, [sp, #4] - FatFile() {} - 7462: 2000 movs r0, #0 - 7464: 9002 str r0, [sp, #8] - 7466: f8ad 0038 strh.w r0, [sp, #56] ; 0x38 - if (isOpen() || !dirFile->isDir()) { - 746a: 2b00 cmp r3, #0 - 746c: d136 bne.n 74dc - 746e: 780b ldrb r3, [r1, #0] - 7470: f013 0f70 tst.w r3, #112 ; 0x70 - 7474: 460e mov r6, r1 - 7476: d031 beq.n 74dc - if (isDirSeparator(*path)) { - 7478: 7813 ldrb r3, [r2, #0] - 747a: 2b2f cmp r3, #47 ; 0x2f - 747c: 4615 mov r5, r2 - 747e: d031 beq.n 74e4 - if (!open(dirFile, &fname, O_RDONLY)) { - 7480: 2700 movs r7, #0 - 7482: e01e b.n 74c2 - if (*path == 0) { - 7484: 9d01 ldr r5, [sp, #4] - 7486: 782d ldrb r5, [r5, #0] - 7488: 2d00 cmp r5, #0 - 748a: d041 beq.n 7510 - if (!open(dirFile, &fname, O_RDONLY)) { - 748c: f000 ff60 bl 8350 - tmpDir = *this; - 7490: 46a6 mov lr, r4 - 7492: f10d 0c08 add.w ip, sp, #8 - if (!open(dirFile, &fname, O_RDONLY)) { - 7496: b308 cbz r0, 74dc - tmpDir = *this; - 7498: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} - dirFile = &tmpDir; - 749c: 4666 mov r6, ip - tmpDir = *this; - 749e: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 74a2: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} - 74a6: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - if (!isOpen()) { - 74aa: 7825 ldrb r5, [r4, #0] - tmpDir = *this; - 74ac: f8de 3000 ldr.w r3, [lr] - 74b0: f8cc 3000 str.w r3, [ip] - bool isOpen() const {return m_attributes;} - 74b4: 4620 mov r0, r4 - if (!isOpen()) { - 74b6: b10d cbz r5, 74bc - 74b8: f7ff fdd0 bl 705c - if (!parsePathName(path, &fname, &path)) { - 74bc: 9d01 ldr r5, [sp, #4] - m_attributes = FILE_ATTR_CLOSED; - 74be: 7027 strb r7, [r4, #0] - m_flags = 0; - 74c0: 70a7 strb r7, [r4, #2] - if (!parsePathName(path, &fname, &path)) { - 74c2: 4629 mov r1, r5 - 74c4: ab01 add r3, sp, #4 - 74c6: aa0b add r2, sp, #44 ; 0x2c - 74c8: 4620 mov r0, r4 - 74ca: f001 f883 bl 85d4 - 74ce: 4605 mov r5, r0 - if (!open(dirFile, &fname, O_RDONLY)) { - 74d0: aa0b add r2, sp, #44 ; 0x2c - 74d2: 4631 mov r1, r6 - 74d4: 2300 movs r3, #0 - 74d6: 4620 mov r0, r4 - if (!parsePathName(path, &fname, &path)) { - 74d8: 2d00 cmp r5, #0 - 74da: d1d3 bne.n 7484 - return false; - 74dc: 2000 movs r0, #0 -} - 74de: b014 add sp, #80 ; 0x50 - 74e0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - path++; - 74e4: 3501 adds r5, #1 - 74e6: 9501 str r5, [sp, #4] - while (isDirSeparator(*path)) { - 74e8: 7829 ldrb r1, [r5, #0] - 74ea: 292f cmp r1, #47 ; 0x2f - 74ec: d0fa beq.n 74e4 - if (*path == 0) { - 74ee: b9b1 cbnz r1, 751e - return openRoot(dirFile->m_vol); - 74f0: 68b5 ldr r5, [r6, #8] - memset(this, 0, sizeof(FatFile)); - 74f2: 2224 movs r2, #36 ; 0x24 - 74f4: 4620 mov r0, r4 - 74f6: f009 fe3d bl 11174 - m_vol = vol; - 74fa: 60a5 str r5, [r4, #8] - 74fc: 79eb ldrb r3, [r5, #7] - switch (vol->fatType()) { - 74fe: 2b10 cmp r3, #16 - 7500: d023 beq.n 754a - 7502: 2b20 cmp r3, #32 - 7504: d1ea bne.n 74dc - 7506: 2340 movs r3, #64 ; 0x40 - m_flags = FILE_FLAG_READ; - 7508: 2001 movs r0, #1 - m_attributes = FILE_ATTR_ROOT_FIXED; - 750a: 7023 strb r3, [r4, #0] - m_flags = FILE_FLAG_READ; - 750c: 70a0 strb r0, [r4, #2] - return true; - 750e: e7e6 b.n 74de - return open(dirFile, &fname, oflag); - 7510: 4643 mov r3, r8 - 7512: aa0b add r2, sp, #44 ; 0x2c - 7514: f000 ff1c bl 8350 -} - 7518: b014 add sp, #80 ; 0x50 - 751a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (!tmpDir.openRoot(dirFile->m_vol)) { - 751e: 68b6 ldr r6, [r6, #8] - memset(this, 0, sizeof(FatFile)); - 7520: 2224 movs r2, #36 ; 0x24 - 7522: 2100 movs r1, #0 - 7524: a802 add r0, sp, #8 - 7526: f009 fe25 bl 11174 - m_vol = vol; - 752a: 9604 str r6, [sp, #16] - 752c: 79f3 ldrb r3, [r6, #7] - switch (vol->fatType()) { - 752e: 2b10 cmp r3, #16 - 7530: d009 beq.n 7546 - 7532: 2b20 cmp r3, #32 - 7534: d1d2 bne.n 74dc - 7536: 2340 movs r3, #64 ; 0x40 - m_attributes = FILE_ATTR_ROOT_FIXED; - 7538: f88d 3008 strb.w r3, [sp, #8] - m_flags = FILE_FLAG_READ; - 753c: 2301 movs r3, #1 - 753e: f88d 300a strb.w r3, [sp, #10] - dirFile = &tmpDir; - 7542: ae02 add r6, sp, #8 - 7544: e79c b.n 7480 - switch (vol->fatType()) { - 7546: 2320 movs r3, #32 - 7548: e7f6 b.n 7538 - 754a: 2320 movs r3, #32 - 754c: e7dc b.n 7508 - 754e: bf00 nop - -00007550 : - return vol && open(vol->vwd(), path, oflag); - 7550: b119 cbz r1, 755a - 7552: f501 6189 add.w r1, r1, #1096 ; 0x448 - 7556: f7ff bf7d b.w 7454 -} - 755a: 4608 mov r0, r1 - 755c: 4770 bx lr - 755e: bf00 nop - -00007560 : - if (file->m_dirCluster == 0) { - 7560: 68cb ldr r3, [r1, #12] -bool FatFile::openCluster(FatFile* file) { - 7562: b570 push {r4, r5, r6, lr} - 7564: 460d mov r5, r1 - 7566: 4604 mov r4, r0 - if (file->m_dirCluster == 0) { - 7568: b9a3 cbnz r3, 7594 - if (isOpen()) { - 756a: 7806 ldrb r6, [r0, #0] - 756c: b10e cbz r6, 7572 - return false; - 756e: 4618 mov r0, r3 -} - 7570: bd70 pop {r4, r5, r6, pc} - return openRoot(file->m_vol); - 7572: 688d ldr r5, [r1, #8] - memset(this, 0, sizeof(FatFile)); - 7574: 2224 movs r2, #36 ; 0x24 - 7576: 4631 mov r1, r6 - 7578: f009 fdfc bl 11174 - m_vol = vol; - 757c: 60a5 str r5, [r4, #8] - 757e: 79eb ldrb r3, [r5, #7] - switch (vol->fatType()) { - 7580: 2b10 cmp r3, #16 - 7582: d017 beq.n 75b4 - 7584: 2b20 cmp r3, #32 - 7586: d113 bne.n 75b0 - 7588: 2240 movs r2, #64 ; 0x40 - m_flags = FILE_FLAG_READ; - 758a: 2301 movs r3, #1 - m_attributes = FILE_ATTR_ROOT_FIXED; - 758c: 7022 strb r2, [r4, #0] - m_flags = FILE_FLAG_READ; - 758e: 70a3 strb r3, [r4, #2] - return true; - 7590: 4618 mov r0, r3 -} - 7592: bd70 pop {r4, r5, r6, pc} - memset(this, 0, sizeof(FatFile)); - 7594: 2224 movs r2, #36 ; 0x24 - 7596: 2100 movs r1, #0 - 7598: f009 fdec bl 11174 - m_flags = FILE_FLAG_READ; - 759c: 2301 movs r3, #1 - m_attributes = FILE_ATTR_SUBDIR; - 759e: 2210 movs r2, #16 - 75a0: 7022 strb r2, [r4, #0] - m_flags = FILE_FLAG_READ; - 75a2: 70a3 strb r3, [r4, #2] - m_vol = file->m_vol; - 75a4: 68a9 ldr r1, [r5, #8] - m_firstCluster = file->m_dirCluster; - 75a6: 68ea ldr r2, [r5, #12] - 75a8: 6222 str r2, [r4, #32] - m_vol = file->m_vol; - 75aa: 60a1 str r1, [r4, #8] - return true; - 75ac: 4618 mov r0, r3 -} - 75ae: bd70 pop {r4, r5, r6, pc} - switch (vol->fatType()) { - 75b0: 4630 mov r0, r6 -} - 75b2: bd70 pop {r4, r5, r6, pc} - switch (vol->fatType()) { - 75b4: 2220 movs r2, #32 - 75b6: e7e8 b.n 758a - -000075b8 : -bool FatFile::openRoot(FatVolume* vol) { - 75b8: b570 push {r4, r5, r6, lr} - if (isOpen()) { - 75ba: 7804 ldrb r4, [r0, #0] - 75bc: b10c cbz r4, 75c2 - return false; - 75be: 2000 movs r0, #0 -} - 75c0: bd70 pop {r4, r5, r6, pc} - 75c2: 4605 mov r5, r0 - 75c4: 460e mov r6, r1 - memset(this, 0, sizeof(FatFile)); - 75c6: 2224 movs r2, #36 ; 0x24 - 75c8: 4621 mov r1, r4 - 75ca: f009 fdd3 bl 11174 - m_vol = vol; - 75ce: 60ae str r6, [r5, #8] - 75d0: 79f3 ldrb r3, [r6, #7] - switch (vol->fatType()) { - 75d2: 2b10 cmp r3, #16 - 75d4: d009 beq.n 75ea - 75d6: 2b20 cmp r3, #32 - 75d8: d105 bne.n 75e6 - 75da: 2340 movs r3, #64 ; 0x40 - m_flags = FILE_FLAG_READ; - 75dc: 2401 movs r4, #1 - m_attributes = FILE_ATTR_ROOT_FIXED; - 75de: 702b strb r3, [r5, #0] - m_flags = FILE_FLAG_READ; - 75e0: 70ac strb r4, [r5, #2] - return true; - 75e2: 4620 mov r0, r4 -} - 75e4: bd70 pop {r4, r5, r6, pc} - switch (vol->fatType()) { - 75e6: 4620 mov r0, r4 -} - 75e8: bd70 pop {r4, r5, r6, pc} - switch (vol->fatType()) { - 75ea: 2320 movs r3, #32 - 75ec: e7f6 b.n 75dc - 75ee: bf00 nop - -000075f0 : -int FatFile::read(void* buf, size_t nbyte) { - 75f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - bool isReadable() const {return m_flags & FILE_FLAG_READ;} - 75f4: 7883 ldrb r3, [r0, #2] - if (!isReadable()) { - 75f6: 07df lsls r7, r3, #31 -int FatFile::read(void* buf, size_t nbyte) { - 75f8: b085 sub sp, #20 - 75fa: 4605 mov r5, r0 - if (!isReadable()) { - 75fc: f140 808c bpl.w 7718 - bool isFile() const {return m_attributes & FILE_ATTR_FILE;} - 7600: 4688 mov r8, r1 - 7602: 7801 ldrb r1, [r0, #0] - if (isFile()) { - 7604: 070e lsls r6, r1, #28 - 7606: 4692 mov sl, r2 - 7608: f100 808f bmi.w 772a - } else if (isRootFixed()) { - 760c: 068c lsls r4, r1, #26 - 760e: d508 bpl.n 7622 - FS_DIR_SIZE*m_vol->m_rootDirEntryCount - (uint16_t)m_curPosition; - 7610: 6883 ldr r3, [r0, #8] - 7612: 895a ldrh r2, [r3, #10] - 7614: 6943 ldr r3, [r0, #20] - uint16_t tmp16 = - 7616: ebc3 1342 rsb r3, r3, r2, lsl #5 - if (nbyte > tmp16) { - 761a: b29b uxth r3, r3 - 761c: 459a cmp sl, r3 - 761e: bf28 it cs - 7620: 469a movcs sl, r3 - while (toRead) { - 7622: f1ba 0f00 cmp.w sl, #0 - 7626: f000 80ac beq.w 7782 - uint32_t tmp32 = m_fileSize - m_curPosition; - 762a: 696a ldr r2, [r5, #20] - offset = m_curPosition & m_vol->sectorMask(); // offset in sector - 762c: 68af ldr r7, [r5, #8] - fg = m_vol->fatGet(m_curCluster, &m_curCluster); - 762e: f105 0310 add.w r3, r5, #16 - if (isRootFixed()) { - 7632: 0688 lsls r0, r1, #26 - uint32_t tmp32 = m_fileSize - m_curPosition; - 7634: 4656 mov r6, sl - uint8_t sectorOfCluster = 0; - 7636: f04f 0900 mov.w r9, #0 - fg = m_vol->fatGet(m_curCluster, &m_curCluster); - 763a: 9301 str r3, [sp, #4] - offset = m_curPosition & m_vol->sectorMask(); // offset in sector - 763c: f3c2 0b08 ubfx fp, r2, #0, #9 - if (isRootFixed()) { - 7640: d53d bpl.n 76be - sector = m_vol->rootDirStart() - 7642: 6a39 ldr r1, [r7, #32] - 7644: eb01 2152 add.w r1, r1, r2, lsr #9 - || sector == m_vol->cacheSectorNumber()) { - 7648: f1bb 0f00 cmp.w fp, #0 - 764c: d151 bne.n 76f2 - if (offset != 0 || toRead < m_vol->bytesPerSector() - 764e: f5b6 7f00 cmp.w r6, #512 ; 0x200 - 7652: d34e bcc.n 76f2 - * \return Address of cached sector. - */ - uint8_t* prepare(uint32_t sector, uint8_t option); - /** \return Logical sector number for cached sector. */ - uint32_t sector() { - return m_sector; - 7654: 6b7a ldr r2, [r7, #52] ; 0x34 - || sector == m_vol->cacheSectorNumber()) { - 7656: 4291 cmp r1, r2 - 7658: d04b beq.n 76f2 - } else if (toRead >= 2*m_vol->bytesPerSector()) { - 765a: f5b6 6f80 cmp.w r6, #1024 ; 0x400 - 765e: d36d bcc.n 773c - if (!isRootFixed()) { - 7660: 7828 ldrb r0, [r5, #0] - 7662: 0680 lsls r0, r0, #26 - uint32_t ns = toRead >> m_vol->bytesPerSectorShift(); - 7664: ea4f 2356 mov.w r3, r6, lsr #9 - if (!isRootFixed()) { - 7668: d405 bmi.n 7676 - uint32_t mb = m_vol->sectorsPerCluster() - sectorOfCluster; - 766a: 7938 ldrb r0, [r7, #4] - 766c: eba0 0009 sub.w r0, r0, r9 - 7670: 4283 cmp r3, r0 - 7672: bf28 it cs - 7674: 4603 movcs r3, r0 - return sector <= m_sector && m_sector < (sector + count); - 7676: 4291 cmp r1, r2 - n = ns << m_vol->bytesPerSectorShift(); - 7678: ea4f 2443 mov.w r4, r3, lsl #9 - 767c: d80c bhi.n 7698 - 767e: 18c8 adds r0, r1, r3 - 7680: 4282 cmp r2, r0 - 7682: d209 bcs.n 7698 - if (isCached(sector, count) && !sync()) { - 7684: f107 0028 add.w r0, r7, #40 ; 0x28 - 7688: 9303 str r3, [sp, #12] - 768a: 9102 str r1, [sp, #8] - 768c: f002 ff50 bl a530 - 7690: 9902 ldr r1, [sp, #8] - 7692: 9b03 ldr r3, [sp, #12] - 7694: 2800 cmp r0, #0 - 7696: d03f beq.n 7718 - return m_blockDev->readSectors(sector, dst, count); - 7698: 6af8 ldr r0, [r7, #44] ; 0x2c - 769a: 6802 ldr r2, [r0, #0] - 769c: 6957 ldr r7, [r2, #20] - 769e: 4642 mov r2, r8 - 76a0: 47b8 blx r7 - if (!m_vol->cacheSafeRead(sector, dst, ns)) { - 76a2: 2800 cmp r0, #0 - 76a4: d038 beq.n 7718 - m_curPosition += n; - 76a6: 696a ldr r2, [r5, #20] - while (toRead) { - 76a8: 1b36 subs r6, r6, r4 - m_curPosition += n; - 76aa: 4422 add r2, r4 - dst += n; - 76ac: 44a0 add r8, r4 - m_curPosition += n; - 76ae: 616a str r2, [r5, #20] - while (toRead) { - 76b0: d067 beq.n 7782 - bool isRootFixed() const {return m_attributes & FILE_ATTR_ROOT_FIXED;} - 76b2: 7829 ldrb r1, [r5, #0] - offset = m_curPosition & m_vol->sectorMask(); // offset in sector - 76b4: 68af ldr r7, [r5, #8] - if (isRootFixed()) { - 76b6: 0688 lsls r0, r1, #26 - offset = m_curPosition & m_vol->sectorMask(); // offset in sector - 76b8: f3c2 0b08 ubfx fp, r2, #0, #9 - if (isRootFixed()) { - 76bc: d4c1 bmi.n 7642 - return (position >> 9) & m_clusterSectorMask; - 76be: f897 9005 ldrb.w r9, [r7, #5] - 76c2: ea09 2952 and.w r9, r9, r2, lsr #9 - if (offset == 0 && sectorOfCluster == 0) { - 76c6: f1bb 0f00 cmp.w fp, #0 - 76ca: d135 bne.n 7738 - 76cc: f1b9 0f00 cmp.w r9, #0 - 76d0: d132 bne.n 7738 - if (m_curPosition == 0) { - 76d2: 2a00 cmp r2, #0 - 76d4: d13c bne.n 7750 - m_curCluster = isRoot32() ? m_vol->rootDirStart() : m_firstCluster; - 76d6: 064a lsls r2, r1, #25 - return m_rootDirStart; - 76d8: bf4c ite mi - 76da: 6a3a ldrmi r2, [r7, #32] - 76dc: 6a2a ldrpl r2, [r5, #32] - m_curCluster++; - 76de: 612a str r2, [r5, #16] - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 76e0: 79b9 ldrb r1, [r7, #6] - sector = m_vol->clusterStartSector(m_curCluster) + sectorOfCluster; - 76e2: 6978 ldr r0, [r7, #20] - 76e4: 3a02 subs r2, #2 - 76e6: 408a lsls r2, r1 - 76e8: 4448 add r0, r9 - 76ea: 1811 adds r1, r2, r0 - || sector == m_vol->cacheSectorNumber()) { - 76ec: f1bb 0f00 cmp.w fp, #0 - 76f0: d0ad beq.n 764e - n = m_vol->bytesPerSector() - offset; - 76f2: f5cb 7400 rsb r4, fp, #512 ; 0x200 - 76f6: 42b4 cmp r4, r6 - return m_cache.prepare(sector, options); - 76f8: f04f 0200 mov.w r2, #0 - 76fc: f107 0028 add.w r0, r7, #40 ; 0x28 - 7700: bf28 it cs - 7702: 4634 movcs r4, r6 - 7704: f002 ff3c bl a580 - if (!pc) { - 7708: b130 cbz r0, 7718 - memcpy(dst, src, n); - 770a: eb00 010b add.w r1, r0, fp - 770e: 4622 mov r2, r4 - 7710: 4640 mov r0, r8 - 7712: f004 fb91 bl be38 - 7716: e7c6 b.n 76a6 - m_error |= READ_ERROR; - 7718: 786b ldrb r3, [r5, #1] - return -1; - 771a: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - m_error |= READ_ERROR; - 771e: f043 0302 orr.w r3, r3, #2 - 7722: 706b strb r3, [r5, #1] -} - 7724: b005 add sp, #20 - 7726: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - uint32_t tmp32 = m_fileSize - m_curPosition; - 772a: 69c3 ldr r3, [r0, #28] - 772c: 6942 ldr r2, [r0, #20] - 772e: 1a9b subs r3, r3, r2 - 7730: 459a cmp sl, r3 - 7732: bf28 it cs - 7734: 469a movcs sl, r3 - 7736: e774 b.n 7622 - m_curCluster++; - 7738: 692a ldr r2, [r5, #16] - 773a: e7d1 b.n 76e0 - return m_blockDev->readSector(sector, dst); - 773c: 6af8 ldr r0, [r7, #44] ; 0x2c - 773e: 6803 ldr r3, [r0, #0] - 7740: 4642 mov r2, r8 - 7742: 691b ldr r3, [r3, #16] - 7744: 4798 blx r3 - if (!m_vol->cacheSafeRead(sector, dst)) { - 7746: 2800 cmp r0, #0 - 7748: d0e6 beq.n 7718 - n = m_vol->bytesPerSector(); - 774a: f44f 7400 mov.w r4, #512 ; 0x200 - 774e: e7aa b.n 76a6 - } else if (isFile() && isContiguous()) { - 7750: 070b lsls r3, r1, #28 - 7752: d505 bpl.n 7760 - 7754: 78aa ldrb r2, [r5, #2] - 7756: 0654 lsls r4, r2, #25 - 7758: d502 bpl.n 7760 - m_curCluster++; - 775a: 692a ldr r2, [r5, #16] - 775c: 3201 adds r2, #1 - 775e: e7be b.n 76de - fg = m_vol->fatGet(m_curCluster, &m_curCluster); - 7760: 6929 ldr r1, [r5, #16] - 7762: 9a01 ldr r2, [sp, #4] - 7764: 4638 mov r0, r7 - 7766: f001 fd01 bl 916c - if (fg < 0) { - 776a: 2800 cmp r0, #0 - 776c: dbd4 blt.n 7718 - if (fg == 0) { - 776e: d002 beq.n 7776 - sector = m_vol->clusterStartSector(m_curCluster) + sectorOfCluster; - 7770: 68af ldr r7, [r5, #8] - 7772: 692a ldr r2, [r5, #16] - 7774: e7b4 b.n 76e0 - if (isDir()) { - 7776: 782b ldrb r3, [r5, #0] - 7778: f013 0f70 tst.w r3, #112 ; 0x70 - 777c: d0cc beq.n 7718 - return nbyte - toRead; - 777e: ebaa 0a06 sub.w sl, sl, r6 - 7782: 4650 mov r0, sl -} - 7784: b005 add sp, #20 - 7786: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 778a: bf00 nop - -0000778c : -int FatFile::peek() { - 778c: b570 push {r4, r5, r6, lr} - 778e: b082 sub sp, #8 - return read(&b, 1) == 1 ? b : -1; - 7790: 2201 movs r2, #1 - 7792: f10d 0107 add.w r1, sp, #7 - 7796: 4604 mov r4, r0 - uint32_t curPosition = m_curPosition; - 7798: 6946 ldr r6, [r0, #20] - uint32_t curCluster = m_curCluster; - 779a: 6905 ldr r5, [r0, #16] - 779c: f7ff ff28 bl 75f0 - 77a0: 2801 cmp r0, #1 - 77a2: bf08 it eq - 77a4: f89d 0007 ldrbeq.w r0, [sp, #7] - m_curPosition = curPosition; - 77a8: 6166 str r6, [r4, #20] - 77aa: bf18 it ne - 77ac: f04f 30ff movne.w r0, #4294967295 ; 0xffffffff - m_curCluster = curCluster; - 77b0: 6125 str r5, [r4, #16] -} - 77b2: b002 add sp, #8 - 77b4: bd70 pop {r4, r5, r6, pc} - 77b6: bf00 nop - -000077b8 : -DirFat_t* FatFile::readDirCache(bool skipReadOk) { - 77b8: b530 push {r4, r5, lr} - uint8_t i = (m_curPosition >> 5) & 0XF; - 77ba: 6943 ldr r3, [r0, #20] - if (i == 0 || !skipReadOk) { - 77bc: f413 7ff0 tst.w r3, #480 ; 0x1e0 -DirFat_t* FatFile::readDirCache(bool skipReadOk) { - 77c0: b083 sub sp, #12 - 77c2: 4604 mov r4, r0 - uint8_t i = (m_curPosition >> 5) & 0XF; - 77c4: f3c3 1543 ubfx r5, r3, #5, #4 - if (i == 0 || !skipReadOk) { - 77c8: d000 beq.n 77cc - 77ca: b989 cbnz r1, 77f0 - int8_t n = read(&n, 1); - 77cc: 2201 movs r2, #1 - 77ce: f10d 0107 add.w r1, sp, #7 - 77d2: 4620 mov r0, r4 - 77d4: f7ff ff0c bl 75f0 - if (n != 1) { - 77d8: b240 sxtb r0, r0 - 77da: 2801 cmp r0, #1 - 77dc: d10b bne.n 77f6 - m_curPosition += FS_DIR_SIZE - 1; - 77de: 6963 ldr r3, [r4, #20] - 77e0: 331f adds r3, #31 - 77e2: 6163 str r3, [r4, #20] - return m_buffer; - 77e4: 68a0 ldr r0, [r4, #8] - 77e6: 3038 adds r0, #56 ; 0x38 - return reinterpret_cast(m_vol->cacheAddress()) + i; - 77e8: eb00 1045 add.w r0, r0, r5, lsl #5 -} - 77ec: b003 add sp, #12 - 77ee: bd30 pop {r4, r5, pc} - m_curPosition += FS_DIR_SIZE; - 77f0: 3320 adds r3, #32 - 77f2: 6143 str r3, [r0, #20] - 77f4: e7f6 b.n 77e4 - return nullptr; - 77f6: 2000 movs r0, #0 -} - 77f8: b003 add sp, #12 - 77fa: bd30 pop {r4, r5, pc} - -000077fc : -bool FatFile::rename(FatFile* dirFile, const char* newPath) { - 77fc: b5f0 push {r4, r5, r6, r7, lr} - if (!(isFile() || isSubDir())) { - 77fe: 7803 ldrb r3, [r0, #0] -bool FatFile::rename(FatFile* dirFile, const char* newPath) { - 7800: b09b sub sp, #108 ; 0x6c - FatFile() {} - 7802: 2600 movs r6, #0 - if (!(isFile() || isSubDir())) { - 7804: f013 0f18 tst.w r3, #24 - 7808: 9608 str r6, [sp, #32] - 780a: 9611 str r6, [sp, #68] ; 0x44 - 780c: d006 beq.n 781c - if (m_vol != dirFile->m_vol) { - 780e: 6883 ldr r3, [r0, #8] - 7810: 4617 mov r7, r2 - 7812: 688a ldr r2, [r1, #8] - 7814: 429a cmp r2, r3 - 7816: 4604 mov r4, r0 - 7818: 460d mov r5, r1 - 781a: d002 beq.n 7822 - return false; - 781c: 2000 movs r0, #0 -} - 781e: b01b add sp, #108 ; 0x6c - 7820: bdf0 pop {r4, r5, r6, r7, pc} - 7822: f7ff fc1b bl 705c - oldFile = *this; - 7826: 46a6 mov lr, r4 - 7828: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} - 782c: f10d 0c44 add.w ip, sp, #68 ; 0x44 - 7830: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 7834: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} - 7838: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 783c: f8de 3000 ldr.w r3, [lr] - 7840: f8cc 3000 str.w r3, [ip] - 7844: 68a3 ldr r3, [r4, #8] - 7846: 69a1 ldr r1, [r4, #24] - 7848: f103 0028 add.w r0, r3, #40 ; 0x28 - 784c: 4632 mov r2, r6 - 784e: f002 fe97 bl a580 - if (!dir) { - 7852: 2800 cmp r0, #0 - 7854: d0e2 beq.n 781c - return dir + (m_dirIndex & 0XF); - 7856: 88a1 ldrh r1, [r4, #4] - 7858: f001 010f and.w r1, r1, #15 - memcpy(&entry, dir, sizeof(entry)); - 785c: eb00 1141 add.w r1, r0, r1, lsl #5 - 7860: 2220 movs r2, #32 - 7862: 4668 mov r0, sp - 7864: f004 fae8 bl be38 - if (isFile()) { - 7868: 7823 ldrb r3, [r4, #0] - 786a: f013 0308 ands.w r3, r3, #8 - if (!file.open(dirFile, newPath, O_CREAT | O_EXCL | O_WRONLY)) { - 786e: 463a mov r2, r7 - 7870: 4629 mov r1, r5 - if (isFile()) { - 7872: d177 bne.n 7964 - if (!file.mkdir(dirFile, newPath, false)) { - 7874: a808 add r0, sp, #32 - 7876: f7ff fd79 bl 736c - 787a: 2800 cmp r0, #0 - 787c: d0ce beq.n 781c - dirCluster = file.m_firstCluster; - 787e: 9e10 ldr r6, [sp, #64] ; 0x40 - m_dirIndex = file.m_dirIndex; - 7880: f8bd 3024 ldrh.w r3, [sp, #36] ; 0x24 - 7884: 68a0 ldr r0, [r4, #8] - 7886: 80a3 strh r3, [r4, #4] - m_lfnOrd = file.m_lfnOrd; - 7888: f89d 3023 ldrb.w r3, [sp, #35] ; 0x23 - m_dirSector = file.m_dirSector; - 788c: 990e ldr r1, [sp, #56] ; 0x38 - m_lfnOrd = file.m_lfnOrd; - 788e: 70e3 strb r3, [r4, #3] - m_dirCluster = file.m_dirCluster; - 7890: 9b0b ldr r3, [sp, #44] ; 0x2c - m_dirSector = file.m_dirSector; - 7892: 61a1 str r1, [r4, #24] - file.m_attributes = FILE_ATTR_CLOSED; - 7894: 2700 movs r7, #0 - 7896: 3028 adds r0, #40 ; 0x28 - m_dirCluster = file.m_dirCluster; - 7898: 60e3 str r3, [r4, #12] - 789a: 2201 movs r2, #1 - file.m_attributes = FILE_ATTR_CLOSED; - 789c: f88d 7020 strb.w r7, [sp, #32] - file.m_flags = 0; - 78a0: f88d 7022 strb.w r7, [sp, #34] ; 0x22 - 78a4: f002 fe6c bl a580 - if (!dir) { - 78a8: 2800 cmp r0, #0 - 78aa: d0b7 beq.n 781c - return dir + (m_dirIndex & 0XF); - 78ac: 88a3 ldrh r3, [r4, #4] - 78ae: f003 030f and.w r3, r3, #15 - 78b2: eb00 1543 add.w r5, r0, r3, lsl #5 - memcpy(&dir->createTimeMs, &entry.createTimeMs, - 78b6: 2213 movs r2, #19 - 78b8: f10d 010d add.w r1, sp, #13 - 78bc: f105 000d add.w r0, r5, #13 - 78c0: f004 faba bl be38 - dir->attributes = entry.attributes; - 78c4: f89d 300b ldrb.w r3, [sp, #11] - 78c8: 72eb strb r3, [r5, #11] - if (dirCluster) { - 78ca: b34e cbz r6, 7920 - uint32_t sector = m_vol->clusterStartSector(dirCluster); - 78cc: 68a0 ldr r0, [r4, #8] - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 78ce: 7981 ldrb r1, [r0, #6] - 78d0: 1eb3 subs r3, r6, #2 - 78d2: 408b lsls r3, r1 - 78d4: 6941 ldr r1, [r0, #20] - return m_cache.prepare(sector, options); - 78d6: 463a mov r2, r7 - 78d8: 4419 add r1, r3 - 78da: 3028 adds r0, #40 ; 0x28 - 78dc: f002 fe50 bl a580 - if (!dir) { - 78e0: 2800 cmp r0, #0 - 78e2: d09b beq.n 781c - memcpy(&entry, &dir[1], sizeof(entry)); - 78e4: f100 0120 add.w r1, r0, #32 - 78e8: 2220 movs r2, #32 - 78ea: 4668 mov r0, sp - 78ec: f004 faa4 bl be38 - if (!m_vol->freeChain(dirCluster)) { - 78f0: 68a0 ldr r0, [r4, #8] - 78f2: 4631 mov r1, r6 - 78f4: f001 fc58 bl 91a8 - 78f8: 2800 cmp r0, #0 - 78fa: d08f beq.n 781c - sector = m_vol->clusterStartSector(m_firstCluster); - 78fc: 68a0 ldr r0, [r4, #8] - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 78fe: 6a23 ldr r3, [r4, #32] - 7900: 7982 ldrb r2, [r0, #6] - 7902: 6941 ldr r1, [r0, #20] - 7904: 3b02 subs r3, #2 - 7906: 4093 lsls r3, r2 - return m_cache.prepare(sector, options); - 7908: 4419 add r1, r3 - 790a: 3028 adds r0, #40 ; 0x28 - 790c: 2201 movs r2, #1 - 790e: f002 fe37 bl a580 - if (!dir) { - 7912: 2800 cmp r0, #0 - 7914: d082 beq.n 781c - memcpy(&dir[1], &entry, sizeof(entry)); - 7916: 2220 movs r2, #32 - 7918: 4669 mov r1, sp - 791a: 4410 add r0, r2 - 791c: f004 fa8c bl be38 - oldFile.m_firstCluster = 0; - 7920: 2100 movs r1, #0 - oldFile.m_flags = FILE_FLAG_WRITE; - 7922: 2202 movs r2, #2 - oldFile.m_attributes = FILE_ATTR_FILE; - 7924: 2308 movs r3, #8 - if (!oldFile.remove()) { - 7926: a811 add r0, sp, #68 ; 0x44 - oldFile.m_firstCluster = 0; - 7928: 9119 str r1, [sp, #100] ; 0x64 - oldFile.m_flags = FILE_FLAG_WRITE; - 792a: f88d 2046 strb.w r2, [sp, #70] ; 0x46 - oldFile.m_attributes = FILE_ATTR_FILE; - 792e: f88d 3044 strb.w r3, [sp, #68] ; 0x44 - if (!oldFile.remove()) { - 7932: f000 feb5 bl 86a0 - 7936: 2800 cmp r0, #0 - 7938: f43f af70 beq.w 781c - return m_vol->cacheSync(); - 793c: 68a4 ldr r4, [r4, #8] - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 793e: f104 0028 add.w r0, r4, #40 ; 0x28 - 7942: f002 fdf5 bl a530 - 7946: 2800 cmp r0, #0 - 7948: f43f af68 beq.w 781c - 794c: f504 700e add.w r0, r4, #568 ; 0x238 - 7950: f002 fdee bl a530 - 7954: 2800 cmp r0, #0 - 7956: f43f af61 beq.w 781c - 795a: 6820 ldr r0, [r4, #0] - return m_blockDev->syncDevice(); - 795c: 6803 ldr r3, [r0, #0] - 795e: 6a1b ldr r3, [r3, #32] - 7960: 4798 blx r3 - 7962: e75c b.n 781e - if (!file.open(dirFile, newPath, O_CREAT | O_EXCL | O_WRONLY)) { - 7964: f640 2301 movw r3, #2561 ; 0xa01 - 7968: a808 add r0, sp, #32 - 796a: f7ff fd73 bl 7454 - 796e: 2800 cmp r0, #0 - 7970: d186 bne.n 7880 - 7972: e753 b.n 781c - -00007974 : - if (!isSubDir() || (!USE_LONG_FILE_NAMES && isLFN())) { - 7974: 7803 ldrb r3, [r0, #0] - 7976: 06da lsls r2, r3, #27 - 7978: d401 bmi.n 797e -} - 797a: 2000 movs r0, #0 - 797c: 4770 bx lr -bool FatFile::rmdir() { - 797e: b530 push {r4, r5, lr} - if (pos == m_curPosition) { - 7980: 6943 ldr r3, [r0, #20] -bool FatFile::rmdir() { - 7982: b083 sub sp, #12 - 7984: 4604 mov r4, r0 - if (pos == m_curPosition) { - 7986: b133 cbz r3, 7996 - m_flags &= ~FILE_FLAG_PREALLOCATE; - 7988: 7883 ldrb r3, [r0, #2] - m_curCluster = 0; - 798a: 2200 movs r2, #0 - m_flags &= ~FILE_FLAG_PREALLOCATE; - 798c: f023 0320 bic.w r3, r3, #32 - m_curCluster = 0; - 7990: 6102 str r2, [r0, #16] - m_curPosition = pos; - 7992: 6142 str r2, [r0, #20] - m_flags &= ~FILE_FLAG_PREALLOCATE; - 7994: 7083 strb r3, [r0, #2] -bool FatFile::rmdir() { - 7996: 2300 movs r3, #0 - 7998: e00f b.n 79ba - m_curPosition += FS_DIR_SIZE; - 799a: 6163 str r3, [r4, #20] - 799c: 68a3 ldr r3, [r4, #8] - return reinterpret_cast(m_vol->cacheAddress()) + i; - 799e: 016a lsls r2, r5, #5 - 79a0: 3338 adds r3, #56 ; 0x38 - 79a2: eb03 1545 add.w r5, r3, r5, lsl #5 - if (dir->name[0] == FAT_NAME_FREE) { - 79a6: 5c9b ldrb r3, [r3, r2] - 79a8: b1eb cbz r3, 79e6 - if (dir->name[0] == FAT_NAME_DELETED || dir->name[0] == '.') { - 79aa: 2be5 cmp r3, #229 ; 0xe5 - 79ac: d004 beq.n 79b8 - 79ae: 2b2e cmp r3, #46 ; 0x2e - 79b0: d002 beq.n 79b8 - if (isFileOrSubdir(dir)) { - 79b2: 7aeb ldrb r3, [r5, #11] - 79b4: 071b lsls r3, r3, #28 - 79b6: d522 bpl.n 79fe - uint8_t i = (m_curPosition >> 5) & 0XF; - 79b8: 6963 ldr r3, [r4, #20] - if (i == 0 || !skipReadOk) { - 79ba: f413 7ff0 tst.w r3, #480 ; 0x1e0 - uint8_t i = (m_curPosition >> 5) & 0XF; - 79be: f3c3 1543 ubfx r5, r3, #5, #4 - m_curPosition += FS_DIR_SIZE; - 79c2: f103 0320 add.w r3, r3, #32 - if (i == 0 || !skipReadOk) { - 79c6: d1e8 bne.n 799a - int8_t n = read(&n, 1); - 79c8: 2201 movs r2, #1 - 79ca: f10d 0107 add.w r1, sp, #7 - 79ce: 4620 mov r0, r4 - 79d0: f7ff fe0e bl 75f0 - if (n != 1) { - 79d4: b240 sxtb r0, r0 - 79d6: 2801 cmp r0, #1 - 79d8: d103 bne.n 79e2 - m_curPosition += FS_DIR_SIZE - 1; - 79da: 6963 ldr r3, [r4, #20] - 79dc: 331f adds r3, #31 - 79de: 6163 str r3, [r4, #20] - } else { - 79e0: e7dc b.n 799c - if (!getError()) { - 79e2: 7863 ldrb r3, [r4, #1] - 79e4: b95b cbnz r3, 79fe - m_flags |= FILE_FLAG_WRITE; - 79e6: 78a3 ldrb r3, [r4, #2] - m_attributes = FILE_ATTR_FILE; - 79e8: 2208 movs r2, #8 - m_flags |= FILE_FLAG_WRITE; - 79ea: f043 0302 orr.w r3, r3, #2 - return remove(); - 79ee: 4620 mov r0, r4 - m_attributes = FILE_ATTR_FILE; - 79f0: 7022 strb r2, [r4, #0] - m_flags |= FILE_FLAG_WRITE; - 79f2: 70a3 strb r3, [r4, #2] -} - 79f4: b003 add sp, #12 - 79f6: e8bd 4030 ldmia.w sp!, {r4, r5, lr} - return remove(); - 79fa: f000 be51 b.w 86a0 -} - 79fe: 2000 movs r0, #0 - 7a00: b003 add sp, #12 - 7a02: bd30 pop {r4, r5, pc} - -00007a04 : -bool FatFile::seekSet(uint32_t pos) { - 7a04: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - bool isOpen() const {return m_attributes;} - 7a08: 7803 ldrb r3, [r0, #0] - uint32_t tmp = m_curCluster; - 7a0a: 6907 ldr r7, [r0, #16] -bool FatFile::seekSet(uint32_t pos) { - 7a0c: 4604 mov r4, r0 - if (!isOpen()) { - 7a0e: 2b00 cmp r3, #0 - 7a10: d03a beq.n 7a88 - 7a12: 460d mov r5, r1 - if (pos == m_curPosition) { - 7a14: 6941 ldr r1, [r0, #20] - 7a16: 42a9 cmp r1, r5 - 7a18: d043 beq.n 7aa2 - if (pos == 0) { - 7a1a: 2d00 cmp r5, #0 - 7a1c: d038 beq.n 7a90 - if (isFile()) { - 7a1e: 0718 lsls r0, r3, #28 - 7a20: d52b bpl.n 7a7a - if (pos > m_fileSize) { - 7a22: 69e2 ldr r2, [r4, #28] - 7a24: 42aa cmp r2, r5 - 7a26: d32f bcc.n 7a88 - nNew = (pos - 1) >> (m_vol->bytesPerClusterShift()); - 7a28: f8d4 c008 ldr.w ip, [r4, #8] - bool isContiguous() const {return m_flags & FILE_FLAG_CONTIGUOUS;} - 7a2c: 78a2 ldrb r2, [r4, #2] - return m_sectorsPerClusterShift + m_bytesPerSectorShift; - 7a2e: f89c 0006 ldrb.w r0, [ip, #6] - 7a32: 3009 adds r0, #9 - 7a34: b2c0 uxtb r0, r0 - 7a36: 1e6e subs r6, r5, #1 - if (isContiguous()) { - 7a38: f012 0f40 tst.w r2, #64 ; 0x40 - nNew = (pos - 1) >> (m_vol->bytesPerClusterShift()); - 7a3c: fa26 f600 lsr.w r6, r6, r0 - if (isContiguous()) { - 7a40: d132 bne.n 7aa8 - nCur = (m_curPosition - 1) >> (m_vol->bytesPerClusterShift()); - 7a42: 1e4a subs r2, r1, #1 - 7a44: 40c2 lsrs r2, r0 - if (nNew < nCur || m_curPosition == 0) { - 7a46: 4296 cmp r6, r2 - 7a48: d301 bcc.n 7a4e - 7a4a: 2900 cmp r1, #0 - 7a4c: d130 bne.n 7ab0 - m_curCluster = isRoot32() ? m_vol->rootDirStart() : m_firstCluster; - 7a4e: 065b lsls r3, r3, #25 - return m_rootDirStart; - 7a50: bf4c ite mi - 7a52: f8dc 3020 ldrmi.w r3, [ip, #32] - 7a56: 6a23 ldrpl r3, [r4, #32] - 7a58: 6123 str r3, [r4, #16] - if (m_vol->fatGet(m_curCluster, &m_curCluster) <= 0) { - 7a5a: f104 0810 add.w r8, r4, #16 - 7a5e: e007 b.n 7a70 - 7a60: 6921 ldr r1, [r4, #16] - 7a62: 68a0 ldr r0, [r4, #8] - 7a64: f001 fb82 bl 916c - 7a68: 2800 cmp r0, #0 - 7a6a: f106 36ff add.w r6, r6, #4294967295 ; 0xffffffff - 7a6e: dd0b ble.n 7a88 - 7a70: 4642 mov r2, r8 - while (nNew--) { - 7a72: 2e00 cmp r6, #0 - 7a74: d1f4 bne.n 7a60 - m_flags &= ~FILE_FLAG_PREALLOCATE; - 7a76: 78a2 ldrb r2, [r4, #2] - 7a78: e00c b.n 7a94 - } else if (isRootFixed()) { - 7a7a: 069a lsls r2, r3, #26 - 7a7c: d5d4 bpl.n 7a28 - return m_rootDirEntryCount; - 7a7e: 68a3 ldr r3, [r4, #8] - if (pos <= FS_DIR_SIZE*m_vol->rootDirEntryCount()) { - 7a80: 895b ldrh r3, [r3, #10] - 7a82: ebb5 1f43 cmp.w r5, r3, lsl #5 - 7a86: d9f6 bls.n 7a76 - m_curCluster = tmp; - 7a88: 6127 str r7, [r4, #16] - return false; - 7a8a: 2000 movs r0, #0 -} - 7a8c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 7a90: 7882 ldrb r2, [r0, #2] - m_curCluster = 0; - 7a92: 6105 str r5, [r0, #16] - m_flags &= ~FILE_FLAG_PREALLOCATE; - 7a94: f022 0220 bic.w r2, r2, #32 - 7a98: 70a2 strb r2, [r4, #2] - m_curPosition = pos; - 7a9a: 6165 str r5, [r4, #20] - return true; - 7a9c: 2001 movs r0, #1 -} - 7a9e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return true; - 7aa2: 2001 movs r0, #1 -} - 7aa4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - m_curCluster = m_firstCluster + nNew; - 7aa8: 6a23 ldr r3, [r4, #32] - 7aaa: 4433 add r3, r6 - 7aac: 6123 str r3, [r4, #16] - goto done; - 7aae: e7f1 b.n 7a94 - nNew -= nCur; - 7ab0: 1ab6 subs r6, r6, r2 - 7ab2: e7d2 b.n 7a5a - -00007ab4 : - oflag_t oflag, uint8_t lfnOrd) { - 7ab4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 7ab8: 4688 mov r8, r1 - 7aba: 4615 mov r5, r2 - memset(this, 0, sizeof(FatFile)); - 7abc: 2100 movs r1, #0 - 7abe: 2224 movs r2, #36 ; 0x24 - oflag_t oflag, uint8_t lfnOrd) { - 7ac0: 4604 mov r4, r0 - 7ac2: 461f mov r7, r3 - 7ac4: f89d 6018 ldrb.w r6, [sp, #24] - memset(this, 0, sizeof(FatFile)); - 7ac8: f009 fb54 bl 11174 - m_vol = dirFile->m_vol; - 7acc: f8d8 0008 ldr.w r0, [r8, #8] - m_dirCluster = dirFile->m_firstCluster; - 7ad0: f8d8 3020 ldr.w r3, [r8, #32] - m_dirIndex = dirIndex; - 7ad4: 80a5 strh r5, [r4, #4] - 7ad6: f100 0238 add.w r2, r0, #56 ; 0x38 - dir += 0XF & dirIndex; - 7ada: f005 050f and.w r5, r5, #15 - 7ade: eb02 1245 add.w r2, r2, r5, lsl #5 - m_dirCluster = dirFile->m_firstCluster; - 7ae2: 60e3 str r3, [r4, #12] - m_vol = dirFile->m_vol; - 7ae4: 60a0 str r0, [r4, #8] - -static inline bool isFileDir(const DirFat_t* dir) { - return (dir->attributes & (FAT_ATTRIB_DIRECTORY | FAT_ATTRIB_LABEL)) == 0; -} -static inline bool isFileOrSubdir(const DirFat_t* dir) { - return (dir->attributes & FAT_ATTRIB_LABEL) == 0; - 7ae6: 7ad1 ldrb r1, [r2, #11] - if (!isFileOrSubdir(dir)) { - 7ae8: 070d lsls r5, r1, #28 - 7aea: d412 bmi.n 7b12 - m_attributes = dir->attributes & FILE_ATTR_COPY; - 7aec: f001 0117 and.w r1, r1, #23 - 7af0: 7021 strb r1, [r4, #0] - if (isFileDir(dir)) { - 7af2: 7ad3 ldrb r3, [r2, #11] - m_lfnOrd = lfnOrd; - 7af4: 70e6 strb r6, [r4, #3] - if (isFileDir(dir)) { - 7af6: f013 0f18 tst.w r3, #24 - m_attributes |= FILE_ATTR_FILE; - 7afa: bf08 it eq - 7afc: f041 0108 orreq.w r1, r1, #8 - switch (oflag & O_ACCMODE) { - 7b00: f007 0303 and.w r3, r7, #3 - m_attributes |= FILE_ATTR_FILE; - 7b04: bf08 it eq - 7b06: 7021 strbeq r1, [r4, #0] - switch (oflag & O_ACCMODE) { - 7b08: 2b01 cmp r3, #1 - 7b0a: d033 beq.n 7b74 - 7b0c: 2b02 cmp r3, #2 - 7b0e: d005 beq.n 7b1c - 7b10: b1db cbz r3, 7b4a - m_attributes = FILE_ATTR_CLOSED; - 7b12: 2000 movs r0, #0 - 7b14: 7020 strb r0, [r4, #0] - m_flags = 0; - 7b16: 70a0 strb r0, [r4, #2] -} - 7b18: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - switch (oflag & O_ACCMODE) { - 7b1c: 2303 movs r3, #3 - bool isSubDir() const {return m_attributes & FILE_ATTR_SUBDIR;} - 7b1e: 7821 ldrb r1, [r4, #0] - if (isSubDir() || isReadOnly()) { - 7b20: 06cd lsls r5, r1, #27 - 7b22: d4f6 bmi.n 7b12 - 7b24: 07ce lsls r6, r1, #31 - 7b26: d4f4 bmi.n 7b12 - m_flags |= (oflag & O_APPEND ? FILE_FLAG_APPEND : 0); - 7b28: f007 0108 and.w r1, r7, #8 - 7b2c: 430b orrs r3, r1 - 7b2e: 70a3 strb r3, [r4, #2] - firstCluster = ((uint32_t)getLe16(dir->firstClusterHigh) << 16) - 7b30: 8a95 ldrh r5, [r2, #20] - | getLe16(dir->firstClusterLow); - 7b32: 8b51 ldrh r1, [r2, #26] - firstCluster = ((uint32_t)getLe16(dir->firstClusterHigh) << 16) - 7b34: ea41 4105 orr.w r1, r1, r5, lsl #16 - return m_sector; - 7b38: 6b45 ldr r5, [r0, #52] ; 0x34 - m_dirSector = m_vol->cacheSectorNumber(); - 7b3a: 61a5 str r5, [r4, #24] - if (oflag & O_TRUNC) { - 7b3c: 057d lsls r5, r7, #21 - 7b3e: d511 bpl.n 7b64 - if (firstCluster && !m_vol->freeChain(firstCluster)) { - 7b40: bb09 cbnz r1, 7b86 - m_flags |= FILE_FLAG_DIR_DIRTY; - 7b42: f063 037f orn r3, r3, #127 ; 0x7f - 7b46: 70a3 strb r3, [r4, #2] - 7b48: e00f b.n 7b6a - if (oflag & O_TRUNC) { - 7b4a: 057b lsls r3, r7, #21 - 7b4c: d4e1 bmi.n 7b12 - m_flags |= (oflag & O_APPEND ? FILE_FLAG_APPEND : 0); - 7b4e: f007 0308 and.w r3, r7, #8 - 7b52: f043 0301 orr.w r3, r3, #1 - 7b56: 70a3 strb r3, [r4, #2] - 7b58: 6b41 ldr r1, [r0, #52] ; 0x34 - firstCluster = ((uint32_t)getLe16(dir->firstClusterHigh) << 16) - 7b5a: 8a93 ldrh r3, [r2, #20] - m_dirSector = m_vol->cacheSectorNumber(); - 7b5c: 61a1 str r1, [r4, #24] - | getLe16(dir->firstClusterLow); - 7b5e: 8b51 ldrh r1, [r2, #26] - firstCluster = ((uint32_t)getLe16(dir->firstClusterHigh) << 16) - 7b60: ea41 4103 orr.w r1, r1, r3, lsl #16 - m_firstCluster = firstCluster; - 7b64: 6221 str r1, [r4, #32] - return *reinterpret_cast(src); - 7b66: 69d3 ldr r3, [r2, #28] - m_fileSize = getLe32(dir->fileSize); - 7b68: 61e3 str r3, [r4, #28] - if ((oflag & O_AT_END) && !seekSet(m_fileSize)) { - 7b6a: 047e lsls r6, r7, #17 - 7b6c: d404 bmi.n 7b78 - return true; - 7b6e: 2001 movs r0, #1 -} - 7b70: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - switch (oflag & O_ACCMODE) { - 7b74: 2302 movs r3, #2 - 7b76: e7d2 b.n 7b1e - if ((oflag & O_AT_END) && !seekSet(m_fileSize)) { - 7b78: 69e1 ldr r1, [r4, #28] - 7b7a: 4620 mov r0, r4 - 7b7c: f7ff ff42 bl 7a04 - 7b80: 2800 cmp r0, #0 - 7b82: d1f4 bne.n 7b6e - 7b84: e7c5 b.n 7b12 - if (firstCluster && !m_vol->freeChain(firstCluster)) { - 7b86: f001 fb0f bl 91a8 - 7b8a: 2800 cmp r0, #0 - 7b8c: d0c1 beq.n 7b12 - m_flags |= FILE_FLAG_DIR_DIRTY; - 7b8e: 78a3 ldrb r3, [r4, #2] - 7b90: e7d7 b.n 7b42 - 7b92: bf00 nop - -00007b94 : - bool isOpen() const {return m_attributes;} - 7b94: 7803 ldrb r3, [r0, #0] - if (isOpen() || !dirFile->isDir() || (dirFile->curPosition() & 0X1F)) { - 7b96: 2b00 cmp r3, #0 - 7b98: d13f bne.n 7c1a -bool FatFile::openNext(FatFile* dirFile, oflag_t oflag) { - 7b9a: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - if (isOpen() || !dirFile->isDir() || (dirFile->curPosition() & 0X1F)) { - 7b9e: 780b ldrb r3, [r1, #0] - 7ba0: f013 0f70 tst.w r3, #112 ; 0x70 -bool FatFile::openNext(FatFile* dirFile, oflag_t oflag) { - 7ba4: b084 sub sp, #16 - 7ba6: 460c mov r4, r1 - if (isOpen() || !dirFile->isDir() || (dirFile->curPosition() & 0X1F)) { - 7ba8: d02c beq.n 7c04 - uint32_t curPosition() const {return m_curPosition;} - 7baa: 694b ldr r3, [r1, #20] - 7bac: f013 051f ands.w r5, r3, #31 - 7bb0: d128 bne.n 7c04 - 7bb2: 4606 mov r6, r0 - 7bb4: 4690 mov r8, r2 - 7bb6: 46a9 mov r9, r5 - int8_t n = read(&n, 1); - 7bb8: 2201 movs r2, #1 - 7bba: f10d 010f add.w r1, sp, #15 - 7bbe: 4620 mov r0, r4 - index = dirFile->curPosition()/FS_DIR_SIZE; - 7bc0: 095f lsrs r7, r3, #5 - uint8_t i = (m_curPosition >> 5) & 0XF; - 7bc2: f3c3 1a43 ubfx sl, r3, #5, #4 - int8_t n = read(&n, 1); - 7bc6: f7ff fd13 bl 75f0 - if (n != 1) { - 7bca: b240 sxtb r0, r0 - 7bcc: 2801 cmp r0, #1 - 7bce: d119 bne.n 7c04 - m_curPosition += FS_DIR_SIZE - 1; - 7bd0: 6963 ldr r3, [r4, #20] - return m_buffer; - 7bd2: 68a2 ldr r2, [r4, #8] - 7bd4: 331f adds r3, #31 - 7bd6: f102 0c38 add.w ip, r2, #56 ; 0x38 - return reinterpret_cast(m_vol->cacheAddress()) + i; - 7bda: ea4f 124a mov.w r2, sl, lsl #5 - m_curPosition += FS_DIR_SIZE - 1; - 7bde: 6163 str r3, [r4, #20] - if (dir->name[0] == FAT_NAME_FREE) { - 7be0: f81c 2002 ldrb.w r2, [ip, r2] - return reinterpret_cast(m_vol->cacheAddress()) + i; - 7be4: eb0c 1c4a add.w ip, ip, sl, lsl #5 - if (dir->name[0] == FAT_NAME_FREE) { - 7be8: b162 cbz r2, 7c04 - if (dir->name[0] == '.' || dir->name[0] == FAT_NAME_DELETED) { - 7bea: 2a2e cmp r2, #46 ; 0x2e - 7bec: d008 beq.n 7c00 - 7bee: 2ae5 cmp r2, #229 ; 0xe5 - 7bf0: d006 beq.n 7c00 - return (dir->attributes & FAT_ATTRIB_LABEL) == 0; - 7bf2: f89c 100b ldrb.w r1, [ip, #11] - } else if (isFileOrSubdir(dir)) { - 7bf6: f011 0008 ands.w r0, r1, #8 - 7bfa: d010 beq.n 7c1e - } else if (isLongName(dir)) { - 7bfc: 290f cmp r1, #15 - 7bfe: d005 beq.n 7c0c - lfnOrd = 0; - 7c00: 2500 movs r5, #0 - 7c02: e7d9 b.n 7bb8 - return false; - 7c04: 2000 movs r0, #0 -} - 7c06: b004 add sp, #16 - 7c08: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - if (ldir->order & FAT_ORDER_LAST_LONG_ENTRY) { - 7c0c: 0651 lsls r1, r2, #25 - 7c0e: d5d3 bpl.n 7bb8 - checksum = ldir->checksum; - 7c10: f89c 900d ldrb.w r9, [ip, #13] - lfnOrd = ldir->order & 0X1F; - 7c14: f002 051f and.w r5, r2, #31 - checksum = ldir->checksum; - 7c18: e7ce b.n 7bb8 - return false; - 7c1a: 2000 movs r0, #0 -} - 7c1c: 4770 bx lr - if (lfnOrd && checksum != lfnChecksum(dir->name)) { - 7c1e: b175 cbz r5, 7c3e - bool cmpName(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd); - bool createLFN(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd); - uint16_t getLfnChar(DirLfn_t* ldir, uint8_t i); - uint8_t lfnChecksum(uint8_t* name) { - uint8_t sum = 0; - for (uint8_t i = 0; i < 11; i++) { - 7c20: f10c 010a add.w r1, ip, #10 - 7c24: e001 b.n 7c2a - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 7c26: f81c 2f01 ldrb.w r2, [ip, #1]! - 7c2a: 01c3 lsls r3, r0, #7 - 7c2c: ea43 0350 orr.w r3, r3, r0, lsr #1 - 7c30: fa52 f383 uxtab r3, r2, r3 - for (uint8_t i = 0; i < 11; i++) { - 7c34: 4561 cmp r1, ip - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 7c36: b2d8 uxtb r0, r3 - for (uint8_t i = 0; i < 11; i++) { - 7c38: d1f5 bne.n 7c26 - 7c3a: 4548 cmp r0, r9 - 7c3c: d1e2 bne.n 7c04 - if (!openCachedEntry(dirFile, index, oflag, lfnOrd)) { - 7c3e: 9500 str r5, [sp, #0] - 7c40: 4643 mov r3, r8 - 7c42: b2ba uxth r2, r7 - 7c44: 4621 mov r1, r4 - 7c46: 4630 mov r0, r6 - 7c48: f7ff ff34 bl 7ab4 - 7c4c: e7db b.n 7c06 - 7c4e: bf00 nop - -00007c50 : - if (!isOpen()) { - 7c50: 7803 ldrb r3, [r0, #0] - 7c52: b10b cbz r3, 7c58 - 7c54: f7ff ba02 b.w 705c -} - 7c58: 2001 movs r0, #1 - 7c5a: 4770 bx lr - -00007c5c : -//------------------------------------------------------------------------------ -bool FatFile::timestamp(uint8_t flags, uint16_t year, uint8_t month, - uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { - 7c5c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 7c60: 460e mov r6, r1 - || month > 12 - || day < 1 - || day > 31 - || hour > 23 - || minute > 59 - || second > 59) { - 7c62: 7801 ldrb r1, [r0, #0] - uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { - 7c64: b082 sub sp, #8 - || second > 59) { - 7c66: 0709 lsls r1, r1, #28 - uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { - 7c68: f89d 7028 ldrb.w r7, [sp, #40] ; 0x28 - 7c6c: f89d 802c ldrb.w r8, [sp, #44] ; 0x2c - 7c70: f89d 9030 ldrb.w r9, [sp, #48] ; 0x30 - 7c74: f89d a034 ldrb.w sl, [sp, #52] ; 0x34 - || second > 59) { - 7c78: d557 bpl.n 7d2a - || year < 1980 - 7c7a: f2a2 72bc subw r2, r2, #1980 ; 0x7bc - 7c7e: b294 uxth r4, r2 - 7c80: 2c7f cmp r4, #127 ; 0x7f - 7c82: d852 bhi.n 7d2a - || month < 1 - 7c84: 1e5a subs r2, r3, #1 - 7c86: 2a0b cmp r2, #11 - 7c88: 9301 str r3, [sp, #4] - 7c8a: d84e bhi.n 7d2a - || day < 1 - 7c8c: 1e7a subs r2, r7, #1 - 7c8e: 2a1e cmp r2, #30 - 7c90: d84b bhi.n 7d2a - || hour > 23 - 7c92: f1b8 0f17 cmp.w r8, #23 - 7c96: d848 bhi.n 7d2a - || minute > 59 - 7c98: f1b9 0f3b cmp.w r9, #59 ; 0x3b - 7c9c: d845 bhi.n 7d2a - || second > 59) { - 7c9e: f1ba 0f3b cmp.w sl, #59 ; 0x3b - 7ca2: d842 bhi.n 7d2a - DBG_FAIL_MACRO; - goto fail; - } - // update directory entry - if (!sync()) { - 7ca4: 4605 mov r5, r0 - if (!isOpen()) { - 7ca6: f7ff f9d9 bl 705c - if (!sync()) { - 7caa: 2800 cmp r0, #0 - 7cac: d03d beq.n 7d2a - return m_cache.prepare(sector, options); - 7cae: 68a8 ldr r0, [r5, #8] - 7cb0: 69a9 ldr r1, [r5, #24] - 7cb2: 3028 adds r0, #40 ; 0x28 - 7cb4: 2201 movs r2, #1 - 7cb6: f002 fc63 bl a580 - if (!dir) { - 7cba: 2800 cmp r0, #0 - 7cbc: d035 beq.n 7d2a - return dir + (m_dirIndex & 0XF); - 7cbe: 88aa ldrh r2, [r5, #4] - * \return Packed date for directory entry. - */ -static inline uint16_t FS_DATE(uint16_t year, uint8_t month, uint8_t day) { - year -= 1980; - return year > 127 || month > 12 || day > 31 ? 0 : - year << 9 | month << 5 | day; - 7cc0: 9b01 ldr r3, [sp, #4] - 7cc2: f002 020f and.w r2, r2, #15 - 7cc6: ea47 1343 orr.w r3, r7, r3, lsl #5 - 7cca: ea43 2344 orr.w r3, r3, r4, lsl #9 - 7cce: eb00 1242 add.w r2, r0, r2, lsl #5 - * - * \return Packed time for directory entry. - */ -static inline uint16_t FS_TIME(uint8_t hour, uint8_t minute, uint8_t second) { - return hour > 23 || minute > 59 || second > 59 ? 0 : - hour << 11 | minute << 5 | second >> 1; - 7cd2: ea4f 015a mov.w r1, sl, lsr #1 - DBG_FAIL_MACRO; - goto fail; - } - dirDate = FS_DATE(year, month, day); - dirTime = FS_TIME(hour, minute, second); - if (flags & T_ACCESS) { - 7cd6: 07f7 lsls r7, r6, #31 - year << 9 | month << 5 | day; - 7cd8: b29b uxth r3, r3 - hour << 11 | minute << 5 | second >> 1; - 7cda: ea41 1149 orr.w r1, r1, r9, lsl #5 - 7cde: ea41 21c8 orr.w r1, r1, r8, lsl #11 - *reinterpret_cast(dst) = src; - 7ce2: bf48 it mi - 7ce4: 8253 strhmi r3, [r2, #18] - setLe16(dir->accessDate, dirDate); - } - if (flags & T_CREATE) { - 7ce6: 07b4 lsls r4, r6, #30 - 7ce8: b289 uxth r1, r1 - 7cea: d508 bpl.n 7cfe - setLe16(dir->createDate, dirDate); - setLe16(dir->createTime, dirTime); - // units of 10 ms - dir->createTimeMs = second & 1 ? 100 : 0; - 7cec: f01a 0a01 ands.w sl, sl, #1 - 7cf0: bf18 it ne - 7cf2: f04f 0a64 movne.w sl, #100 ; 0x64 - 7cf6: f882 a00d strb.w sl, [r2, #13] - 7cfa: 8213 strh r3, [r2, #16] - 7cfc: 81d1 strh r1, [r2, #14] - } - if (flags & T_WRITE) { - setLe16(dir->modifyDate, dirDate); - setLe16(dir->modifyTime, dirTime); - } - return m_vol->cacheSync(); - 7cfe: 68ac ldr r4, [r5, #8] - if (flags & T_WRITE) { - 7d00: 0770 lsls r0, r6, #29 - 7d02: bf44 itt mi - 7d04: 8313 strhmi r3, [r2, #24] - 7d06: 82d1 strhmi r1, [r2, #22] - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 7d08: f104 0028 add.w r0, r4, #40 ; 0x28 - 7d0c: f002 fc10 bl a530 - 7d10: b158 cbz r0, 7d2a - 7d12: f504 700e add.w r0, r4, #568 ; 0x238 - 7d16: f002 fc0b bl a530 - 7d1a: b130 cbz r0, 7d2a - 7d1c: 6820 ldr r0, [r4, #0] - return m_blockDev->syncDevice(); - 7d1e: 6803 ldr r3, [r0, #0] - 7d20: 6a1b ldr r3, [r3, #32] - - fail: - return false; -} - 7d22: b002 add sp, #8 - 7d24: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 7d28: 4718 bx r3 - 7d2a: 2000 movs r0, #0 - 7d2c: b002 add sp, #8 - 7d2e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 7d32: bf00 nop - -00007d34 : -//------------------------------------------------------------------------------ -bool FatFile::truncate() { - uint32_t toFree; - // error if not a normal file or read-only - if (!isWritable()) { - 7d34: 7883 ldrb r3, [r0, #2] - 7d36: 079b lsls r3, r3, #30 - 7d38: d527 bpl.n 7d8a -bool FatFile::truncate() { - 7d3a: b510 push {r4, lr} - DBG_FAIL_MACRO; - goto fail; - } - if (m_firstCluster == 0) { - 7d3c: 6a03 ldr r3, [r0, #32] -bool FatFile::truncate() { - 7d3e: b082 sub sp, #8 - 7d40: 4604 mov r4, r0 - if (m_firstCluster == 0) { - 7d42: b1ab cbz r3, 7d70 - return true; - } - if (m_curCluster) { - 7d44: 6901 ldr r1, [r0, #16] - 7d46: bb11 cbnz r1, 7d8e - DBG_FAIL_MACRO; - goto fail; - } - } - } else { - toFree = m_firstCluster; - 7d48: 9301 str r3, [sp, #4] - m_firstCluster = 0; - 7d4a: 6201 str r1, [r0, #32] - } - if (toFree) { - if (!m_vol->freeChain(toFree)) { - 7d4c: 68a0 ldr r0, [r4, #8] - 7d4e: 4619 mov r1, r3 - 7d50: f001 fa2a bl 91a8 - 7d54: b1b0 cbz r0, 7d84 - } - } - m_fileSize = m_curPosition; - - // need to update directory entry - m_flags |= FILE_FLAG_DIR_DIRTY; - 7d56: 78a3 ldrb r3, [r4, #2] - if (!isOpen()) { - 7d58: 7822 ldrb r2, [r4, #0] - m_fileSize = m_curPosition; - 7d5a: 6961 ldr r1, [r4, #20] - 7d5c: 61e1 str r1, [r4, #28] - m_flags |= FILE_FLAG_DIR_DIRTY; - 7d5e: f063 037f orn r3, r3, #127 ; 0x7f - 7d62: 70a3 strb r3, [r4, #2] - if (!isOpen()) { - 7d64: b122 cbz r2, 7d70 - 7d66: 4620 mov r0, r4 - 7d68: f7ff f978 bl 705c - return sync(); - - fail: - return false; -} - 7d6c: b002 add sp, #8 - 7d6e: bd10 pop {r4, pc} - return true; - 7d70: 2001 movs r0, #1 -} - 7d72: b002 add sp, #8 - 7d74: bd10 pop {r4, pc} - } - int8_t fatGet(uint32_t cluster, uint32_t* value); - bool fatPut(uint32_t cluster, uint32_t value); - bool fatPutEOC(uint32_t cluster) { - return fatPut(cluster, 0x0FFFFFFF); - 7d76: 6921 ldr r1, [r4, #16] - 7d78: 68a0 ldr r0, [r4, #8] - 7d7a: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 - 7d7e: f001 fa05 bl 918c - if (!m_vol->fatPutEOC(m_curCluster)) { - 7d82: b968 cbnz r0, 7da0 - return false; - 7d84: 2000 movs r0, #0 -} - 7d86: b002 add sp, #8 - 7d88: bd10 pop {r4, pc} - return false; - 7d8a: 2000 movs r0, #0 -} - 7d8c: 4770 bx lr - toFree = 0; - 7d8e: 2300 movs r3, #0 - int8_t fg = m_vol->fatGet(m_curCluster, &toFree); - 7d90: 6880 ldr r0, [r0, #8] - toFree = 0; - 7d92: 9301 str r3, [sp, #4] - int8_t fg = m_vol->fatGet(m_curCluster, &toFree); - 7d94: aa01 add r2, sp, #4 - 7d96: f001 f9e9 bl 916c - if (fg < 0) { - 7d9a: 2800 cmp r0, #0 - 7d9c: dbf2 blt.n 7d84 - if (fg) { - 7d9e: d1ea bne.n 7d76 - if (toFree) { - 7da0: 9b01 ldr r3, [sp, #4] - 7da2: 2b00 cmp r3, #0 - 7da4: d0d7 beq.n 7d56 - 7da6: e7d1 b.n 7d4c - -00007da8 : -//------------------------------------------------------------------------------ -size_t FatFile::write(const void* buf, size_t nbyte) { - 7da8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - bool isWritable() const {return m_flags & FILE_FLAG_WRITE;} - 7dac: 7883 ldrb r3, [r0, #2] - uint8_t cacheOption; - // number of bytes left to write - must be before goto statements - size_t nToWrite = nbyte; - size_t n; - // error if not a normal file or is read-only - if (!isWritable()) { - 7dae: 079c lsls r4, r3, #30 -size_t FatFile::write(const void* buf, size_t nbyte) { - 7db0: 4605 mov r5, r0 - if (!isWritable()) { - 7db2: d57b bpl.n 7eac - DBG_FAIL_MACRO; - goto fail; - } - // seek to end of file if append flag - if ((m_flags & FILE_FLAG_APPEND)) { - 7db4: 4688 mov r8, r1 - 7db6: 0719 lsls r1, r3, #28 - 7db8: 4691 mov r9, r2 - 7dba: f100 80bd bmi.w 7f38 - DBG_FAIL_MACRO; - goto fail; - } - } - // Don't exceed max fileSize. - if (nbyte > (0XFFFFFFFF - m_curPosition)) { - 7dbe: 696b ldr r3, [r5, #20] - 7dc0: eb13 0209 adds.w r2, r3, r9 - 7dc4: d272 bcs.n 7eac - DBG_FAIL_MACRO; - goto fail; - } - while (nToWrite) { - 7dc6: f1b9 0f00 cmp.w r9, #0 - 7dca: d044 beq.n 7e56 - 7dcc: 464f mov r7, r9 - + sectorOfCluster; - - if (sectorOffset != 0 || nToWrite < m_vol->bytesPerSector()) { - // partial sector - must use cache - // max space in sector - n = m_vol->bytesPerSector() - sectorOffset; - 7dce: f44f 7a00 mov.w sl, #512 ; 0x200 - uint8_t sectorOfCluster = m_vol->sectorOfCluster(m_curPosition); - 7dd2: 68a8 ldr r0, [r5, #8] - if (m_curCluster != 0) { - 7dd4: 6929 ldr r1, [r5, #16] - return (position >> 9) & m_clusterSectorMask; - 7dd6: 7944 ldrb r4, [r0, #5] - if (sectorOfCluster == 0 && sectorOffset == 0) { - 7dd8: ea14 2453 ands.w r4, r4, r3, lsr #9 - uint16_t sectorOffset = m_curPosition & m_vol->sectorMask(); - 7ddc: f3c3 0608 ubfx r6, r3, #0, #9 - if (sectorOfCluster == 0 && sectorOffset == 0) { - 7de0: d143 bne.n 7e6a - 7de2: 2e00 cmp r6, #0 - 7de4: d173 bne.n 7ece - if (m_curCluster != 0) { - 7de6: 2900 cmp r1, #0 - 7de8: d07e beq.n 7ee8 - if (isContiguous() && m_fileSize > m_curPosition) { - 7dea: 78aa ldrb r2, [r5, #2] - 7dec: 0652 lsls r2, r2, #25 - 7dee: d503 bpl.n 7df8 - 7df0: 69ea ldr r2, [r5, #28] - 7df2: 429a cmp r2, r3 - 7df4: f200 808f bhi.w 7f16 - fg = m_vol->fatGet(m_curCluster, &m_curCluster); - 7df8: f105 0210 add.w r2, r5, #16 - 7dfc: f001 f9b6 bl 916c - if (fg < 0) { - 7e00: 2800 cmp r0, #0 - 7e02: db53 blt.n 7eac - if (fg == 0) { - 7e04: f000 8091 beq.w 7f2a - uint32_t sector = m_vol->clusterStartSector(m_curCluster) - 7e08: 68a8 ldr r0, [r5, #8] - 7e0a: 6929 ldr r1, [r5, #16] - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 7e0c: 7983 ldrb r3, [r0, #6] - 7e0e: 3902 subs r1, #2 - 7e10: 4099 lsls r1, r3 - 7e12: 6943 ldr r3, [r0, #20] - 7e14: 4419 add r1, r3 - if (sectorOffset != 0 || nToWrite < m_vol->bytesPerSector()) { - 7e16: f5b7 7f00 cmp.w r7, #512 ; 0x200 - 7e1a: d34e bcc.n 7eba - DBG_FAIL_MACRO; - goto fail; - } - } -#if USE_MULTI_SECTOR_IO - } else if (nToWrite >= 2*m_vol->bytesPerSector()) { - 7e1c: f5b7 6f80 cmp.w r7, #1024 ; 0x400 - 7e20: d366 bcc.n 7ef0 - // use multiple sector write command - uint32_t maxSectors = m_vol->sectorsPerCluster() - sectorOfCluster; - 7e22: 7903 ldrb r3, [r0, #4] - uint32_t nSector = nToWrite >> m_vol->bytesPerSectorShift(); - 7e24: 0a7a lsrs r2, r7, #9 - uint32_t maxSectors = m_vol->sectorsPerCluster() - sectorOfCluster; - 7e26: 1b1b subs r3, r3, r4 - 7e28: 4293 cmp r3, r2 - 7e2a: bf28 it cs - 7e2c: 4613 movcs r3, r2 - return sector <= m_sector && m_sector < (sector + count); - 7e2e: 6b42 ldr r2, [r0, #52] ; 0x34 - 7e30: 428a cmp r2, r1 - if (nSector > maxSectors) { - nSector = maxSectors; - } - n = nSector << m_vol->bytesPerSectorShift(); - 7e32: ea4f 2443 mov.w r4, r3, lsl #9 - 7e36: d302 bcc.n 7e3e - 7e38: 185e adds r6, r3, r1 - 7e3a: 42b2 cmp r2, r6 - 7e3c: d36e bcc.n 7f1c - return m_blockDev->writeSectors(sector, src, count); - 7e3e: 6ac0 ldr r0, [r0, #44] ; 0x2c - 7e40: 6802 ldr r2, [r0, #0] - 7e42: 6a96 ldr r6, [r2, #40] ; 0x28 - 7e44: 4642 mov r2, r8 - 7e46: 47b0 blx r6 - if (!m_vol->cacheSafeWrite(sector, src, nSector)) { - 7e48: b380 cbz r0, 7eac - if (!m_vol->cacheSafeWrite(sector, src)) { - DBG_FAIL_MACRO; - goto fail; - } - } - m_curPosition += n; - 7e4a: 696b ldr r3, [r5, #20] - while (nToWrite) { - 7e4c: 1b3f subs r7, r7, r4 - m_curPosition += n; - 7e4e: 4423 add r3, r4 - src += n; - 7e50: 44a0 add r8, r4 - m_curPosition += n; - 7e52: 616b str r3, [r5, #20] - while (nToWrite) { - 7e54: d1bd bne.n 7dd2 - nToWrite -= n; - } - if (m_curPosition > m_fileSize) { - 7e56: 69ea ldr r2, [r5, #28] - 7e58: 429a cmp r2, r3 - 7e5a: d27d bcs.n 7f58 - // update fileSize and insure sync will update dir entry - m_fileSize = m_curPosition; - m_flags |= FILE_FLAG_DIR_DIRTY; - 7e5c: 78aa ldrb r2, [r5, #2] - m_fileSize = m_curPosition; - 7e5e: 61eb str r3, [r5, #28] - m_flags |= FILE_FLAG_DIR_DIRTY; - 7e60: f062 037f orn r3, r2, #127 ; 0x7f - 7e64: 70ab strb r3, [r5, #2] - 7e66: 4648 mov r0, r9 - 7e68: e025 b.n 7eb6 - 7e6a: 7982 ldrb r2, [r0, #6] - 7e6c: 6943 ldr r3, [r0, #20] - 7e6e: 3902 subs r1, #2 - 7e70: 4091 lsls r1, r2 - 7e72: 4419 add r1, r3 - + sectorOfCluster; - 7e74: 4421 add r1, r4 - if (sectorOffset != 0 || nToWrite < m_vol->bytesPerSector()) { - 7e76: 2e00 cmp r6, #0 - 7e78: d0cd beq.n 7e16 - n = m_vol->bytesPerSector() - sectorOffset; - 7e7a: f5c6 7400 rsb r4, r6, #512 ; 0x200 - 7e7e: 42bc cmp r4, r7 - 7e80: bf28 it cs - 7e82: 463c movcs r4, r7 - cacheOption = FsCache::CACHE_FOR_WRITE; - 7e84: 2201 movs r2, #1 - return m_cache.prepare(sector, options); - 7e86: 3028 adds r0, #40 ; 0x28 - 7e88: f002 fb7a bl a580 - if (!pc) { - 7e8c: b170 cbz r0, 7eac - memcpy(dst, src, n); - 7e8e: 4430 add r0, r6 - 7e90: 4622 mov r2, r4 - 7e92: 4641 mov r1, r8 - if (m_vol->bytesPerSector() == (n + sectorOffset)) { - 7e94: 4426 add r6, r4 - memcpy(dst, src, n); - 7e96: f003 ffcf bl be38 - if (m_vol->bytesPerSector() == (n + sectorOffset)) { - 7e9a: f5b6 7f00 cmp.w r6, #512 ; 0x200 - 7e9e: 68a8 ldr r0, [r5, #8] - 7ea0: d1d3 bne.n 7e4a - return m_cache.sync(); - 7ea2: 3028 adds r0, #40 ; 0x28 - 7ea4: f002 fb44 bl a530 - if (!m_vol->cacheSyncData()) { - 7ea8: 2800 cmp r0, #0 - 7eaa: d1ce bne.n 7e4a - } - return nbyte; - - fail: - // return for write error - m_error |= WRITE_ERROR; - 7eac: 786b ldrb r3, [r5, #1] - 7eae: f043 0301 orr.w r3, r3, #1 - return 0; - 7eb2: 2000 movs r0, #0 - m_error |= WRITE_ERROR; - 7eb4: 706b strb r3, [r5, #1] -} - 7eb6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - if (sectorOffset == 0 && - 7eba: 696a ldr r2, [r5, #20] - 7ebc: 69eb ldr r3, [r5, #28] - 7ebe: 45ba cmp sl, r7 - 7ec0: 4654 mov r4, sl - 7ec2: bf28 it cs - 7ec4: 463c movcs r4, r7 - 7ec6: 429a cmp r2, r3 - 7ec8: d307 bcc.n 7eda - cacheOption = FsCache::CACHE_RESERVE_FOR_WRITE; - 7eca: 2205 movs r2, #5 - 7ecc: e7db b.n 7e86 - return m_dataStartSector + ((cluster - 2) << m_sectorsPerClusterShift); - 7ece: 7982 ldrb r2, [r0, #6] - 7ed0: 6943 ldr r3, [r0, #20] - 7ed2: 3902 subs r1, #2 - 7ed4: 4091 lsls r1, r2 - 7ed6: 4419 add r1, r3 - if (sectorOffset != 0 || nToWrite < m_vol->bytesPerSector()) { - 7ed8: e7cf b.n 7e7a - (m_curPosition >= m_fileSize || m_flags & FILE_FLAG_PREALLOCATE)) { - 7eda: 78ab ldrb r3, [r5, #2] - cacheOption = FsCache::CACHE_FOR_WRITE; - 7edc: f013 0f20 tst.w r3, #32 - 7ee0: bf14 ite ne - 7ee2: 2205 movne r2, #5 - 7ee4: 2201 moveq r2, #1 - 7ee6: e7ce b.n 7e86 - if (m_firstCluster == 0) { - 7ee8: 6a29 ldr r1, [r5, #32] - 7eea: b361 cbz r1, 7f46 - m_curCluster = m_firstCluster; - 7eec: 6129 str r1, [r5, #16] - 7eee: e78d b.n 7e0c - if (isCached(sector)) { - 7ef0: 6b43 ldr r3, [r0, #52] ; 0x34 - 7ef2: 428b cmp r3, r1 - 7ef4: d105 bne.n 7f02 - m_status = 0; - 7ef6: 2300 movs r3, #0 - 7ef8: f880 3028 strb.w r3, [r0, #40] ; 0x28 - m_sector = 0XFFFFFFFF; - 7efc: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 7f00: 6343 str r3, [r0, #52] ; 0x34 - return m_blockDev->writeSector(sector, src); - 7f02: 6ac0 ldr r0, [r0, #44] ; 0x2c - 7f04: 6803 ldr r3, [r0, #0] - 7f06: 4642 mov r2, r8 - 7f08: 6a5b ldr r3, [r3, #36] ; 0x24 - 7f0a: 4798 blx r3 - if (!m_vol->cacheSafeWrite(sector, src)) { - 7f0c: 2800 cmp r0, #0 - 7f0e: d0cd beq.n 7eac - n = m_vol->bytesPerSector(); - 7f10: f44f 7400 mov.w r4, #512 ; 0x200 - 7f14: e799 b.n 7e4a - m_curCluster++; - 7f16: 3101 adds r1, #1 - 7f18: 6129 str r1, [r5, #16] - if (fg == 0) { - 7f1a: e777 b.n 7e0c - m_status = 0; - 7f1c: 2200 movs r2, #0 - 7f1e: f880 2028 strb.w r2, [r0, #40] ; 0x28 - m_sector = 0XFFFFFFFF; - 7f22: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 7f26: 6342 str r2, [r0, #52] ; 0x34 - } - 7f28: e789 b.n 7e3e - if (!addCluster()) { - 7f2a: 4628 mov r0, r5 - 7f2c: f7ff f8f0 bl 7110 - 7f30: 2800 cmp r0, #0 - 7f32: f47f af69 bne.w 7e08 - 7f36: e7b9 b.n 7eac - if (!seekSet(m_fileSize)) { - 7f38: 69c1 ldr r1, [r0, #28] - 7f3a: f7ff fd63 bl 7a04 - 7f3e: 2800 cmp r0, #0 - 7f40: f47f af3d bne.w 7dbe - 7f44: e7b2 b.n 7eac - if (!addCluster()) { - 7f46: 4628 mov r0, r5 - 7f48: f7ff f8e2 bl 7110 - 7f4c: 2800 cmp r0, #0 - 7f4e: d0ad beq.n 7eac - m_firstCluster = m_curCluster; - 7f50: 6929 ldr r1, [r5, #16] - uint32_t sector = m_vol->clusterStartSector(m_curCluster) - 7f52: 68a8 ldr r0, [r5, #8] - m_firstCluster = m_curCluster; - 7f54: 6229 str r1, [r5, #32] - 7f56: e759 b.n 7e0c - } else if (FsDateTime::callback) { - 7f58: 4b05 ldr r3, [pc, #20] ; (7f70 ) - 7f5a: 681b ldr r3, [r3, #0] - 7f5c: b12b cbz r3, 7f6a - m_flags |= FILE_FLAG_DIR_DIRTY; - 7f5e: 78ab ldrb r3, [r5, #2] - 7f60: f063 037f orn r3, r3, #127 ; 0x7f - 7f64: 4648 mov r0, r9 - 7f66: 70ab strb r3, [r5, #2] - 7f68: e7a5 b.n 7eb6 - 7f6a: 4648 mov r0, r9 - 7f6c: e7a3 b.n 7eb6 - 7f6e: bf00 nop - 7f70: 1fff9770 .word 0x1fff9770 - -00007f74 : - hash = ((hash << 5) + hash) ^ (*bgn++); - } - return hash; -} -//============================================================================== -bool FatFile::cmpName(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd) { - 7f74: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 7f78: b08d sub sp, #52 ; 0x34 - FatFile dir = *this; - 7f7a: 4684 mov ip, r0 - uint16_t ls = 0; - bool atEnd() { - return !ls && next == end; - } - void reset() { - next = begin; - 7f7c: 6815 ldr r5, [r2, #0] - DirLfn_t* ldir; - fname->reset(); - for (uint8_t order = 1; order <= lfnOrd; order++) { - 7f7e: 9301 str r3, [sp, #4] -bool FatFile::cmpName(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd) { - 7f80: 4614 mov r4, r2 - for (uint8_t order = 1; order <= lfnOrd; order++) { - 7f82: 4698 mov r8, r3 -bool FatFile::cmpName(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd) { - 7f84: 4606 mov r6, r0 - 7f86: 4689 mov r9, r1 - FatFile dir = *this; - 7f88: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} - 7f8c: af03 add r7, sp, #12 - 7f8e: c70f stmia r7!, {r0, r1, r2, r3} - 7f90: e8bc 000f ldmia.w ip!, {r0, r1, r2, r3} - 7f94: c70f stmia r7!, {r0, r1, r2, r3} - 7f96: f8dc 3000 ldr.w r3, [ip] - 7f9a: 603b str r3, [r7, #0] - ls = 0; // lowSurrogate - 7f9c: f04f 0e00 mov.w lr, #0 - for (uint8_t order = 1; order <= lfnOrd; order++) { - 7fa0: 4643 mov r3, r8 - next = begin; - 7fa2: 6065 str r5, [r4, #4] - ls = 0; // lowSurrogate - 7fa4: f8a4 e00c strh.w lr, [r4, #12] - 7fa8: 2b00 cmp r3, #0 - 7faa: d03f beq.n 802c - 7fac: f04f 0a01 mov.w sl, #1 - ldir = reinterpret_cast(dir.cacheDir(index - order)); - 7fb0: eba9 010a sub.w r1, r9, sl - return seekSet(32UL*index) ? readDirCache() : nullptr; - 7fb4: b289 uxth r1, r1 - 7fb6: 0149 lsls r1, r1, #5 - 7fb8: a803 add r0, sp, #12 - 7fba: f7ff fd23 bl 7a04 - 7fbe: b350 cbz r0, 8016 - 7fc0: 2100 movs r1, #0 - 7fc2: a803 add r0, sp, #12 - 7fc4: f7ff fbf8 bl 77b8 - if (!ldir) { - 7fc8: 4607 mov r7, r0 - 7fca: b320 cbz r0, 8016 - 7fcc: 2500 movs r5, #0 - 7fce: e00d b.n 7fec - uint16_t u = getLfnChar(ldir, i); - if (fname->atEnd()) { - return u == 0; - } -#if USE_UTF8_LONG_NAMES - uint16_t cp = fname->get16(); - 7fd0: f002 fb14 bl a5fc - 7fd4: 4680 mov r8, r0 - // Make sure caller checked for valid UTF-8. - DBG_HALT_IF(cp == 0XFFFF); - if (toUpcase(u) != toUpcase(cp)) { - 7fd6: 4658 mov r0, fp - 7fd8: f002 fc1a bl a810 - 7fdc: 4683 mov fp, r0 - 7fde: 4640 mov r0, r8 - 7fe0: f002 fc16 bl a810 - 7fe4: 4583 cmp fp, r0 - 7fe6: d116 bne.n 8016 - for (uint8_t i = 0; i < 13; i++) { - 7fe8: 2d0d cmp r5, #13 - 7fea: d018 beq.n 801e - uint16_t u = getLfnChar(ldir, i); - 7fec: b2ea uxtb r2, r5 - 7fee: 4639 mov r1, r7 - 7ff0: 4630 mov r0, r6 - 7ff2: f000 fec3 bl 8d7c - return !ls && next == end; - 7ff6: 89a3 ldrh r3, [r4, #12] - 7ff8: 4683 mov fp, r0 - for (uint8_t i = 0; i < 13; i++) { - 7ffa: 3501 adds r5, #1 - uint16_t cp = fname->get16(); - 7ffc: 4620 mov r0, r4 - 7ffe: 2b00 cmp r3, #0 - 8000: d1e6 bne.n 7fd0 - 8002: 6863 ldr r3, [r4, #4] - 8004: 68a2 ldr r2, [r4, #8] - 8006: 4293 cmp r3, r2 - 8008: d1e2 bne.n 7fd0 - return u == 0; - 800a: fabb f08b clz r0, fp - 800e: 0940 lsrs r0, r0, #5 - } - return true; - - fail: - return false; -} - 8010: b00d add sp, #52 ; 0x34 - 8012: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - return false; - 8016: 2000 movs r0, #0 -} - 8018: b00d add sp, #52 ; 0x34 - 801a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - for (uint8_t order = 1; order <= lfnOrd; order++) { - 801e: 9b01 ldr r3, [sp, #4] - 8020: f10a 0a01 add.w sl, sl, #1 - 8024: fa5f fa8a uxtb.w sl, sl - 8028: 4553 cmp r3, sl - 802a: d2c1 bcs.n 7fb0 - return true; - 802c: 2001 movs r0, #1 - 802e: e7ef b.n 8010 - -00008030 : -//------------------------------------------------------------------------------ -bool FatFile::createLFN(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd) { - 8030: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8034: b08d sub sp, #52 ; 0x34 - FatFile dir = *this; - 8036: 4607 mov r7, r0 -bool FatFile::createLFN(uint16_t index, FatLfn_t* fname, uint8_t lfnOrd) { - 8038: 4616 mov r6, r2 - 803a: 9101 str r1, [sp, #4] - 803c: 469a mov sl, r3 - 803e: f102 0415 add.w r4, r2, #21 - 8042: f102 0520 add.w r5, r2, #32 - FatFile dir = *this; - 8046: cf0f ldmia r7!, {r0, r1, r2, r3} - 8048: f10d 0c0c add.w ip, sp, #12 - 804c: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 8050: cf0f ldmia r7!, {r0, r1, r2, r3} - 8052: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 8056: 683b ldr r3, [r7, #0] - 8058: f8cc 3000 str.w r3, [ip] - uint8_t sum = 0; - 805c: f04f 0900 mov.w r9, #0 - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 8060: f814 2f01 ldrb.w r2, [r4, #1]! - 8064: ea4f 13c9 mov.w r3, r9, lsl #7 - 8068: ea43 0359 orr.w r3, r3, r9, lsr #1 - 806c: fa52 f383 uxtab r3, r2, r3 - for (uint8_t i = 0; i < 11; i++) { - 8070: 42a5 cmp r5, r4 - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 8072: fa5f f983 uxtb.w r9, r3 - for (uint8_t i = 0; i < 11; i++) { - 8076: d1f3 bne.n 8060 - next = begin; - 8078: 6833 ldr r3, [r6, #0] - 807a: 6073 str r3, [r6, #4] - ls = 0; // lowSurrogate - 807c: f04f 0800 mov.w r8, #0 - 8080: f8a6 800c strh.w r8, [r6, #12] - DirLfn_t* ldir; - uint8_t checksum = lfnChecksum(fname->sfn); - uint8_t fc = 0; - fname->reset(); - - for (uint8_t order = 1; order <= lfnOrd; order++) { - 8084: f1ba 0f00 cmp.w sl, #0 - 8088: d04b beq.n 8122 - 808a: 2701 movs r7, #1 - ldir = reinterpret_cast(dir.cacheDir(index - order)); - 808c: 9b01 ldr r3, [sp, #4] - 808e: 1bd9 subs r1, r3, r7 - return seekSet(32UL*index) ? readDirCache() : nullptr; - 8090: b289 uxth r1, r1 - 8092: 0149 lsls r1, r1, #5 - 8094: a803 add r0, sp, #12 - 8096: f7ff fcb5 bl 7a04 - 809a: 2800 cmp r0, #0 - 809c: d052 beq.n 8144 - 809e: 2100 movs r1, #0 - 80a0: a803 add r0, sp, #12 - 80a2: f7ff fb89 bl 77b8 - if (!ldir) { - 80a6: 2800 cmp r0, #0 - 80a8: d04c beq.n 8144 - DBG_FAIL_MACRO; - goto fail; - } - dir.m_vol->cacheDirty(); - 80aa: 9a05 ldr r2, [sp, #20] - m_status |= CACHE_STATUS_DIRTY; - 80ac: f892 3028 ldrb.w r3, [r2, #40] ; 0x28 - 80b0: f043 0301 orr.w r3, r3, #1 - 80b4: f882 3028 strb.w r3, [r2, #40] ; 0x28 - ldir->order = order == lfnOrd ? FAT_ORDER_LAST_LONG_ENTRY | order : order; - ldir->attributes = FAT_ATTRIB_LONG_NAME; - 80b8: 230f movs r3, #15 - ldir->order = order == lfnOrd ? FAT_ORDER_LAST_LONG_ENTRY | order : order; - 80ba: 4557 cmp r7, sl - ldir->attributes = FAT_ATTRIB_LONG_NAME; - 80bc: 72c3 strb r3, [r0, #11] - ldir->mustBeZero1 = 0; - 80be: f04f 0300 mov.w r3, #0 - ldir->order = order == lfnOrd ? FAT_ORDER_LAST_LONG_ENTRY | order : order; - 80c2: bf0c ite eq - 80c4: f047 0240 orreq.w r2, r7, #64 ; 0x40 - 80c8: 463a movne r2, r7 - ldir->mustBeZero1 = 0; - 80ca: 7303 strb r3, [r0, #12] - 80cc: f04f 0300 mov.w r3, #0 - ldir->order = order == lfnOrd ? FAT_ORDER_LAST_LONG_ENTRY | order : order; - 80d0: 7002 strb r2, [r0, #0] - ldir->checksum = checksum; - 80d2: f880 900d strb.w r9, [r0, #13] - 80d6: 8343 strh r3, [r0, #26] - setLe16(ldir->mustBeZero2, 0); - for (uint8_t i = 0; i < 13; i++) { - 80d8: f100 0b01 add.w fp, r0, #1 - 80dc: 2401 movs r4, #1 - 80de: 2500 movs r5, #0 - 80e0: e006 b.n 80f0 - 80e2: f8ab 0000 strh.w r0, [fp] - 80e6: 3401 adds r4, #1 - 80e8: 3501 adds r5, #1 - 80ea: b2e4 uxtb r4, r4 - 80ec: f10b 0b02 add.w fp, fp, #2 - return !ls && next == end; - 80f0: 89b0 ldrh r0, [r6, #12] - 80f2: b918 cbnz r0, 80fc - 80f4: 6872 ldr r2, [r6, #4] - 80f6: 68b3 ldr r3, [r6, #8] - 80f8: 429a cmp r2, r3 - 80fa: d016 beq.n 812a - uint16_t cp; - if (fname->atEnd()) { - cp = fc++ ? 0XFFFF : 0; - } else { - cp = fname->get16(); - 80fc: 4630 mov r0, r6 - 80fe: f002 fa7d bl a5fc - if (i < 5) { - 8102: 2d04 cmp r5, #4 - 8104: b2eb uxtb r3, r5 - 8106: d9ec bls.n 80e2 - } else if (i < 11) { - 8108: 2b0a cmp r3, #10 - 810a: d802 bhi.n 8112 - 810c: f8ab 0003 strh.w r0, [fp, #3] -} - 8110: e7e9 b.n 80e6 - for (uint8_t i = 0; i < 13; i++) { - 8112: 2c0d cmp r4, #13 - *reinterpret_cast(dst) = src; - 8114: f8ab 0005 strh.w r0, [fp, #5] - 8118: d1e5 bne.n 80e6 - for (uint8_t order = 1; order <= lfnOrd; order++) { - 811a: 3701 adds r7, #1 - 811c: b2ff uxtb r7, r7 - 811e: 45ba cmp sl, r7 - 8120: d2b4 bcs.n 808c - DBG_HALT_IF(cp == 0XFFFF); - } - putLfnChar(ldir, i, cp); - } - } - return true; - 8122: 2001 movs r0, #1 - - fail: - return false; -} - 8124: b00d add sp, #52 ; 0x34 - 8126: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - cp = fc++ ? 0XFFFF : 0; - 812a: f1b8 0f00 cmp.w r8, #0 - 812e: d006 beq.n 813e - 8130: f108 0801 add.w r8, r8, #1 - 8134: fa5f f888 uxtb.w r8, r8 - 8138: f64f 70ff movw r0, #65535 ; 0xffff - 813c: e7e1 b.n 8102 - 813e: f04f 0801 mov.w r8, #1 - 8142: e7de b.n 8102 - return false; - 8144: 2000 movs r0, #0 -} - 8146: b00d add sp, #52 ; 0x34 - 8148: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -0000814c : -//------------------------------------------------------------------------------ -bool FatFile::makeSFN(FatLfn_t* fname) { - 814c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 8150: 4605 mov r5, r0 - uint8_t uc = 0; - uint8_t i = 0; - uint8_t in = 7; - const char* dot; - const char* end = fname->end; - const char* ptr = fname->begin; - 8152: f850 4b16 ldr.w r4, [r0], #22 - const char* end = fname->end; - 8156: 68ae ldr r6, [r5, #8] - // Assume blanks removed from start and end. - DBG_HALT_IF(*ptr == ' ' || *(end - 1) == ' ' || *(end - 1) == '.'); - - // Blank file short name. - for (uint8_t k = 0; k < 11; k++) { - fname->sfn[k] = ' '; - 8158: 220b movs r2, #11 - 815a: 2120 movs r1, #32 - 815c: f009 f80a bl 11174 - } - // Not 8.3 if starts with dot. - is83 = *ptr == '.' ? false : true; - 8160: 7823 ldrb r3, [r4, #0] - 8162: 2b2e cmp r3, #46 ; 0x2e - 8164: bf14 ite ne - 8166: 2001 movne r0, #1 - 8168: 2000 moveq r0, #0 - // Skip leading dots. - for (; *ptr == '.'; ptr++) {} - 816a: d103 bne.n 8174 - 816c: f814 3f01 ldrb.w r3, [r4, #1]! - 8170: 2b2e cmp r3, #46 ; 0x2e - 8172: d0fb beq.n 816c - // Find last dot. - for (dot = end - 1; dot > ptr && *dot != '.'; dot--) {} - 8174: 1e72 subs r2, r6, #1 - 8176: 42a2 cmp r2, r4 - 8178: d909 bls.n 818e - 817a: 4613 mov r3, r2 - 817c: e002 b.n 8184 - 817e: 429c cmp r4, r3 - 8180: 461a mov r2, r3 - 8182: d004 beq.n 818e - 8184: 461a mov r2, r3 - 8186: 3b01 subs r3, #1 - 8188: 7811 ldrb r1, [r2, #0] - 818a: 292e cmp r1, #46 ; 0x2e - 818c: d1f7 bne.n 817e - - for (; ptr < end; ptr++) { - 818e: 42a6 cmp r6, r4 - 8190: f04f 0e00 mov.w lr, #0 - 8194: d97c bls.n 8290 - 8196: 2707 movs r7, #7 - 8198: 4671 mov r1, lr - 819a: 46f1 mov r9, lr - 819c: f04f 0808 mov.w r8, #8 - c = *ptr; - 81a0: 7823 ldrb r3, [r4, #0] - if (c == '.' && ptr == dot) { - 81a2: 2b2e cmp r3, #46 ; 0x2e - 81a4: d025 beq.n 81f2 - if (c == '"' || c == '|' || c == '[' || c == '\\' || c == ']') { - 81a6: 2b22 cmp r3, #34 ; 0x22 - 81a8: d025 beq.n 81f6 - 81aa: 2b7c cmp r3, #124 ; 0x7c - 81ac: d023 beq.n 81f6 - 81ae: f1a3 0c5b sub.w ip, r3, #91 ; 0x5b - 81b2: f1bc 0f02 cmp.w ip, #2 - 81b6: d91e bls.n 81f6 - if ((0X2A <= c && c <= 0X2F && c != 0X2D) || (0X3A <= c && c <= 0X3F)) { - 81b8: f1a3 0c2a sub.w ip, r3, #42 ; 0x2a - 81bc: f1bc 0f05 cmp.w ip, #5 - 81c0: d951 bls.n 8266 - 81c2: f1a3 0c3a sub.w ip, r3, #58 ; 0x3a - 81c6: f1bc 0f05 cmp.w ip, #5 - 81ca: d95a bls.n 8282 - in = 10; // Max index for full 8.3 name. - i = 8; // Place for extension. - bit = FAT_CASE_LC_EXT; // bit for extension. - } else { - if (sfnReservedChar(c)) { - 81cc: f1a3 0c21 sub.w ip, r3, #33 ; 0x21 - 81d0: f1bc 0f5d cmp.w ip, #93 ; 0x5d - 81d4: d855 bhi.n 8282 - if ((c & 0XC0) == 0X80) { - continue; - } - c = '_'; - } - if (i > in) { - 81d6: 42b9 cmp r1, r7 - 81d8: d82b bhi.n 8232 - } - // Skip to dot. - ptr = dot - 1; - continue; - } - if (isLower(c)) { - 81da: f1a3 0c61 sub.w ip, r3, #97 ; 0x61 - 81de: f1bc 0f19 cmp.w ip, #25 - 81e2: d846 bhi.n 8272 - c += 'A' - 'a'; - 81e4: 3b20 subs r3, #32 - lc |= bit; - 81e6: ea4e 0e08 orr.w lr, lr, r8 - c += 'A' - 'a'; - 81ea: b2db uxtb r3, r3 - lc |= bit; - 81ec: fa5f fe8e uxtb.w lr, lr - 81f0: e005 b.n 81fe - if (c == '.' && ptr == dot) { - 81f2: 42a2 cmp r2, r4 - 81f4: d031 beq.n 825a - if (i > in) { - 81f6: 42b9 cmp r1, r7 - 81f8: d81b bhi.n 8232 - is83 = false; - 81fa: 2000 movs r0, #0 - c = '_'; - 81fc: 235f movs r3, #95 ; 0x5f - } else if (isUpper(c)) { - uc |= bit; - } - fname->sfn[i++] = c; - 81fe: f101 0c01 add.w ip, r1, #1 - 8202: 4429 add r1, r5 - for (; ptr < end; ptr++) { - 8204: 3401 adds r4, #1 - fname->sfn[i++] = c; - 8206: 758b strb r3, [r1, #22] - 8208: fa5f f38c uxtb.w r3, ip - if (i < 7) { - 820c: 2b06 cmp r3, #6 - fname->seqPos = i; - 820e: bf98 it ls - 8210: 752b strbls r3, [r5, #20] - 8212: 4619 mov r1, r3 - for (; ptr < end; ptr++) { - 8214: 42b4 cmp r4, r6 - 8216: d3c3 bcc.n 81a0 - } - } - } - if (fname->sfn[0] == ' ') { - 8218: 7dab ldrb r3, [r5, #22] - 821a: 2b20 cmp r3, #32 - 821c: d010 beq.n 8240 - DBG_HALT_MACRO; - goto fail; - } - if (is83) { - 821e: b190 cbz r0, 8246 - fname->flags = lc & uc ? FNAME_FLAG_MIXED_CASE : lc; - 8220: ea1e 0f09 tst.w lr, r9 - 8224: bf18 it ne - 8226: f04f 0e02 movne.w lr, #2 - 822a: f885 e015 strb.w lr, [r5, #21] - } - return true; - - fail: - return false; -} - 822e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - if (in == 10 || ptr > dot) { - 8232: 2f0a cmp r7, #10 - 8234: d001 beq.n 823a - 8236: 42a2 cmp r2, r4 - 8238: d218 bcs.n 826c - if (fname->sfn[0] == ' ') { - 823a: 7dab ldrb r3, [r5, #22] - 823c: 2b20 cmp r3, #32 - 823e: d102 bne.n 8246 - return false; - 8240: 2000 movs r0, #0 -} - 8242: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - fname->sfn[fname->seqPos] = '~'; - 8246: 7d2b ldrb r3, [r5, #20] - 8248: 442b add r3, r5 - fname->flags = FNAME_FLAG_LOST_CHARS; - 824a: 2001 movs r0, #1 - fname->sfn[fname->seqPos] = '~'; - 824c: 217e movs r1, #126 ; 0x7e - fname->sfn[fname->seqPos + 1] = '1'; - 824e: 2231 movs r2, #49 ; 0x31 - fname->flags = FNAME_FLAG_LOST_CHARS; - 8250: 7568 strb r0, [r5, #21] - fname->sfn[fname->seqPos] = '~'; - 8252: 7599 strb r1, [r3, #22] - fname->sfn[fname->seqPos + 1] = '1'; - 8254: 75da strb r2, [r3, #23] -} - 8256: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - for (; ptr < end; ptr++) { - 825a: 1c54 adds r4, r2, #1 - in = 10; // Max index for full 8.3 name. - 825c: 270a movs r7, #10 - i = 8; // Place for extension. - 825e: 2108 movs r1, #8 - bit = FAT_CASE_LC_EXT; // bit for extension. - 8260: f04f 0810 mov.w r8, #16 - 8264: e7d6 b.n 8214 - 8266: 2b2d cmp r3, #45 ; 0x2d - 8268: d0b5 beq.n 81d6 - 826a: e7c4 b.n 81f6 - 826c: 4614 mov r4, r2 - is83 = false; - 826e: 2000 movs r0, #0 - 8270: e7d0 b.n 8214 - } else if (isUpper(c)) { - 8272: f1a3 0c41 sub.w ip, r3, #65 ; 0x41 - 8276: f1bc 0f19 cmp.w ip, #25 - uc |= bit; - 827a: bf98 it ls - 827c: ea49 0908 orrls.w r9, r9, r8 - 8280: e7bd b.n 81fe - if ((c & 0XC0) == 0X80) { - 8282: f003 03c0 and.w r3, r3, #192 ; 0xc0 - 8286: 2b80 cmp r3, #128 ; 0x80 - 8288: d1b5 bne.n 81f6 - for (; ptr < end; ptr++) { - 828a: 3401 adds r4, #1 - is83 = false; - 828c: 2000 movs r0, #0 - 828e: e7c1 b.n 8214 - for (; ptr < end; ptr++) { - 8290: 46f1 mov r9, lr - 8292: e7c1 b.n 8218 - -00008294 : -//------------------------------------------------------------------------------ -bool FatFile::makeUniqueSfn(FatLfn_t* fname) { - 8294: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8298: f8df b0b0 ldr.w fp, [pc, #176] ; 834c - const uint8_t FIRST_HASH_SEQ = 2; // min value is 2 - uint8_t pos = fname->seqPos; - 829c: f891 8014 ldrb.w r8, [r1, #20] -bool FatFile::makeUniqueSfn(FatLfn_t* fname) { - 82a0: b083 sub sp, #12 - 82a2: 460f mov r7, r1 - 82a4: 4604 mov r4, r0 - uint8_t pos = fname->seqPos; - 82a6: f04f 0962 mov.w r9, #98 ; 0x62 - DirFat_t* dir; - uint16_t hex = 0; - 82aa: 2500 movs r5, #0 - for (uint8_t i = pos + 4 ; i > pos; i--) { - uint8_t h = hex & 0XF; - fname->sfn[i] = h < 10 ? h + '0' : h + 'A' - 10; - hex >>= 4; - } - fname->sfn[pos] = '~'; - 82ac: f04f 0a7e mov.w sl, #126 ; 0x7e - goto fail; - } - if (dir->name[0] == FAT_NAME_FREE) { - goto done; - } - if (isFileOrSubdir(dir) && !memcmp(fname->sfn, dir->name, 11)) { - 82b0: f101 0616 add.w r6, r1, #22 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 82b4: f8db 3000 ldr.w r3, [fp] - 82b8: 9301 str r3, [sp, #4] - return ret; - 82ba: 9b01 ldr r3, [sp, #4] - 82bc: f1b8 0f03 cmp.w r8, #3 - hex += millis(); - 82c0: 442b add r3, r5 - 82c2: bf28 it cs - 82c4: f04f 0803 movcs.w r8, #3 - 82c8: b29d uxth r5, r3 - for (uint8_t i = pos + 4 ; i > pos; i--) { - 82ca: f108 0304 add.w r3, r8, #4 - 82ce: b2db uxtb r3, r3 - uint8_t h = hex & 0XF; - 82d0: f005 020f and.w r2, r5, #15 - fname->sfn[i] = h < 10 ? h + '0' : h + 'A' - 10; - 82d4: 18f9 adds r1, r7, r3 - for (uint8_t i = pos + 4 ; i > pos; i--) { - 82d6: 3b01 subs r3, #1 - fname->sfn[i] = h < 10 ? h + '0' : h + 'A' - 10; - 82d8: 2a09 cmp r2, #9 - for (uint8_t i = pos + 4 ; i > pos; i--) { - 82da: b2db uxtb r3, r3 - fname->sfn[i] = h < 10 ? h + '0' : h + 'A' - 10; - 82dc: bf94 ite ls - 82de: 3230 addls r2, #48 ; 0x30 - 82e0: 3237 addhi r2, #55 ; 0x37 - for (uint8_t i = pos + 4 ; i > pos; i--) { - 82e2: 4598 cmp r8, r3 - fname->sfn[i] = h < 10 ? h + '0' : h + 'A' - 10; - 82e4: 758a strb r2, [r1, #22] - hex >>= 4; - 82e6: ea4f 1515 mov.w r5, r5, lsr #4 - for (uint8_t i = pos + 4 ; i > pos; i--) { - 82ea: d1f1 bne.n 82d0 - fname->sfn[pos] = '~'; - 82ec: eb07 0308 add.w r3, r7, r8 - seekSet(0); - 82f0: 2100 movs r1, #0 - 82f2: f883 a016 strb.w sl, [r3, #22] - 82f6: 4620 mov r0, r4 - 82f8: f7ff fb84 bl 7a04 - dir = readDirCache(true); - 82fc: 2101 movs r1, #1 - 82fe: 4620 mov r0, r4 - 8300: f7ff fa5a bl 77b8 - 8304: 4603 mov r3, r0 - if (isFileOrSubdir(dir) && !memcmp(fname->sfn, dir->name, 11)) { - 8306: 220b movs r2, #11 - 8308: 4630 mov r0, r6 - 830a: 4619 mov r1, r3 - if (!dir) { - 830c: b193 cbz r3, 8334 - if (dir->name[0] == FAT_NAME_FREE) { - 830e: f893 c000 ldrb.w ip, [r3] - 8312: f1bc 0f00 cmp.w ip, #0 - 8316: d014 beq.n 8342 - if (isFileOrSubdir(dir) && !memcmp(fname->sfn, dir->name, 11)) { - 8318: 7adb ldrb r3, [r3, #11] - 831a: 071b lsls r3, r3, #28 - 831c: d4ee bmi.n 82fc - 831e: f008 fe7b bl 11018 - 8322: 2800 cmp r0, #0 - 8324: d1ea bne.n 82fc - for (uint8_t seq = FIRST_HASH_SEQ; seq < 100; seq++) { - 8326: f109 39ff add.w r9, r9, #4294967295 ; 0xffffffff - 832a: f019 09ff ands.w r9, r9, #255 ; 0xff - 832e: d1c1 bne.n 82b4 - } - // fall inti fail - too many tries. - DBG_FAIL_MACRO; - - fail: - return false; - 8330: 4648 mov r0, r9 - fail: - 8332: e003 b.n 833c - if (!getError()) { - 8334: 7860 ldrb r0, [r4, #1] - 8336: fab0 f080 clz r0, r0 - 833a: 0940 lsrs r0, r0, #5 - - done: - return true; -} - 833c: b003 add sp, #12 - 833e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - return true; - 8342: 2001 movs r0, #1 -} - 8344: b003 add sp, #12 - 8346: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 834a: bf00 nop - 834c: 1fff978c .word 0x1fff978c - -00008350 : -//------------------------------------------------------------------------------ -bool FatFile::open(FatFile* dirFile, FatLfn_t* fname, oflag_t oflag) { - 8350: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8354: 460e mov r6, r1 - 8356: b08d sub sp, #52 ; 0x34 - uint16_t curIndex; - uint16_t date; - uint16_t time; - DirFat_t* dir; - DirLfn_t* ldir; - auto vol = dirFile->m_vol; - 8358: 6889 ldr r1, [r1, #8] -bool FatFile::open(FatFile* dirFile, FatLfn_t* fname, oflag_t oflag) { - 835a: 9305 str r3, [sp, #20] - - if (!dirFile->isDir() || isOpen()) { - 835c: 7833 ldrb r3, [r6, #0] - auto vol = dirFile->m_vol; - 835e: 9107 str r1, [sp, #28] - if (!dirFile->isDir() || isOpen()) { - 8360: f013 0f70 tst.w r3, #112 ; 0x70 -bool FatFile::open(FatFile* dirFile, FatLfn_t* fname, oflag_t oflag) { - 8364: 9003 str r0, [sp, #12] - if (!dirFile->isDir() || isOpen()) { - 8366: d051 beq.n 840c - bool isOpen() const {return m_attributes;} - 8368: 9b03 ldr r3, [sp, #12] - 836a: 781b ldrb r3, [r3, #0] - 836c: 2b00 cmp r3, #0 - 836e: d14d bne.n 840c - DBG_FAIL_MACRO; - goto fail; - } - // Number of directory entries needed. - nameOrd = (fname->len + 12)/13; - 8370: 6913 ldr r3, [r2, #16] - 8372: 4692 mov sl, r2 - 8374: 4a95 ldr r2, [pc, #596] ; (85cc ) - 8376: 330c adds r3, #12 - 8378: fba2 2303 umull r2, r3, r2, r3 - 837c: f3c3 0287 ubfx r2, r3, #2, #8 - freeNeed = fname->flags & FNAME_FLAG_NEED_LFN ? 1 + nameOrd : 1; - 8380: f89a 3015 ldrb.w r3, [sl, #21] - nameOrd = (fname->len + 12)/13; - 8384: 9208 str r2, [sp, #32] - freeNeed = fname->flags & FNAME_FLAG_NEED_LFN ? 1 + nameOrd : 1; - 8386: 0798 lsls r0, r3, #30 - 8388: bf1c itt ne - 838a: 4613 movne r3, r2 - 838c: 1c5f addne r7, r3, #1 - uint8_t checksum = 0; - 838e: f04f 0300 mov.w r3, #0 - seekSet(0); - 8392: 4619 mov r1, r3 - 8394: 4630 mov r0, r6 - 8396: 461c mov r4, r3 - 8398: 9309 str r3, [sp, #36] ; 0x24 - freeNeed = fname->flags & FNAME_FLAG_NEED_LFN ? 1 + nameOrd : 1; - 839a: bf14 ite ne - 839c: b2ff uxtbne r7, r7 - 839e: 2701 moveq r7, #1 - 83a0: f7ff fb30 bl 7a04 - goto found; - } - DBG_FAIL_MACRO; - goto fail; - } - if (!memcmp(dir->name, fname->sfn, sizeof(fname->sfn))) { - 83a4: f10a 0316 add.w r3, sl, #22 - uint8_t order = 0; - 83a8: 46a3 mov fp, r4 - uint8_t lfnOrd = 0; - 83aa: 46a1 mov r9, r4 - uint16_t freeIndex = 0; - 83ac: 46a0 mov r8, r4 - bool fnameFound = false; - 83ae: 9406 str r4, [sp, #24] - if (!memcmp(dir->name, fname->sfn, sizeof(fname->sfn))) { - 83b0: 9304 str r3, [sp, #16] - curIndex = dirFile->m_curPosition/FS_DIR_SIZE; - 83b2: 6975 ldr r5, [r6, #20] - dir = dirFile->readDirCache(); - 83b4: 2100 movs r1, #0 - 83b6: 4630 mov r0, r6 - curIndex = dirFile->m_curPosition/FS_DIR_SIZE; - 83b8: f3c5 154f ubfx r5, r5, #5, #16 - dir = dirFile->readDirCache(); - 83bc: f7ff f9fc bl 77b8 - if (!dir) { - 83c0: b308 cbz r0, 8406 - if (dir->name[0] == FAT_NAME_DELETED || dir->name[0] == FAT_NAME_FREE) { - 83c2: 7803 ldrb r3, [r0, #0] - 83c4: 2be5 cmp r3, #229 ; 0xe5 - 83c6: d025 beq.n 8414 - 83c8: b323 cbz r3, 8414 - freeFound = 0; - 83ca: 42bc cmp r4, r7 - 83cc: bf38 it cc - 83ce: 2400 movcc r4, #0 - if (dir->name[0] == FAT_NAME_DELETED || dir->name[0] == '.') { - 83d0: 2b2e cmp r3, #46 ; 0x2e - 83d2: d029 beq.n 8428 -} -static inline uint8_t isLongName(const DirFat_t* dir) { - return dir->attributes == FAT_ATTRIB_LONG_NAME; - 83d4: 7ac2 ldrb r2, [r0, #11] - } else if (isLongName(dir)) { - 83d6: 2a0f cmp r2, #15 - 83d8: d029 beq.n 842e - } else if (isFileOrSubdir(dir)) { - 83da: f012 0208 ands.w r2, r2, #8 - 83de: d123 bne.n 8428 - if (lfnOrd) { - 83e0: f1b9 0f00 cmp.w r9, #0 - 83e4: f040 80d0 bne.w 8588 - if (!memcmp(dir->name, fname->sfn, sizeof(fname->sfn))) { - 83e8: 9904 ldr r1, [sp, #16] - 83ea: 220b movs r2, #11 - 83ec: f008 fe14 bl 11018 - 83f0: 2800 cmp r0, #0 - 83f2: d1de bne.n 83b2 - if (!(fname->flags & FNAME_FLAG_LOST_CHARS)) { - 83f4: f89a 3015 ldrb.w r3, [sl, #21] - 83f8: f013 0301 ands.w r3, r3, #1 - 83fc: f000 80db beq.w 85b6 - goto found; - } - fnameFound = true; - 8400: 2301 movs r3, #1 - 8402: 9306 str r3, [sp, #24] - 8404: e7d5 b.n 83b2 - if (dirFile->getError()) { - 8406: 7873 ldrb r3, [r6, #1] - 8408: 2b00 cmp r3, #0 - 840a: d03a beq.n 8482 - goto fail; - } - return true; - - fail: - return false; - 840c: 2000 movs r0, #0 -} - 840e: b00d add sp, #52 ; 0x34 - 8410: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - curIndex = dirFile->m_curPosition/FS_DIR_SIZE; - 8414: 2c00 cmp r4, #0 - 8416: bf08 it eq - 8418: 46a8 moveq r8, r5 - if (freeFound < freeNeed) { - 841a: 42bc cmp r4, r7 - freeFound++; - 841c: bf3c itt cc - 841e: 3401 addcc r4, #1 - 8420: b2e4 uxtbcc r4, r4 - if (dir->name[0] == FAT_NAME_FREE) { - 8422: b373 cbz r3, 8482 - if (dir->name[0] == FAT_NAME_DELETED || dir->name[0] == '.') { - 8424: 2be5 cmp r3, #229 ; 0xe5 - 8426: d1d3 bne.n 83d0 - lfnOrd = 0; - 8428: f04f 0900 mov.w r9, #0 - 842c: e7c1 b.n 83b2 - if (!lfnOrd) { - 842e: f1b9 0f00 cmp.w r9, #0 - 8432: d119 bne.n 8468 - if (order != nameOrd || - 8434: 9a08 ldr r2, [sp, #32] - order = ldir->order & 0X1F; - 8436: f003 0b1f and.w fp, r3, #31 - if (order != nameOrd || - 843a: 455a cmp r2, fp - 843c: d1b9 bne.n 83b2 - 843e: f013 0940 ands.w r9, r3, #64 ; 0x40 - 8442: d0b6 beq.n 83b2 - checksum = ldir->checksum; - 8444: 7b43 ldrb r3, [r0, #13] - 8446: 9309 str r3, [sp, #36] ; 0x24 - 8448: 4691 mov r9, r2 - if (order == 1) { - 844a: f1bb 0f01 cmp.w fp, #1 - 844e: d1b0 bne.n 83b2 - if (!dirFile->cmpName(curIndex + 1, fname, lfnOrd)) { - 8450: 1c69 adds r1, r5, #1 - 8452: 464b mov r3, r9 - 8454: b289 uxth r1, r1 - 8456: 4652 mov r2, sl - 8458: 4630 mov r0, r6 - 845a: f7ff fd8b bl 7f74 - lfnOrd = 0; - 845e: 2800 cmp r0, #0 - 8460: bf08 it eq - 8462: f04f 0900 moveq.w r9, #0 - 8466: e7a4 b.n 83b2 - } else if (ldir->order != --order || checksum != ldir->checksum) { - 8468: f10b 3bff add.w fp, fp, #4294967295 ; 0xffffffff - 846c: fa5f fb8b uxtb.w fp, fp - 8470: 455b cmp r3, fp - 8472: d1d9 bne.n 8428 - 8474: 7b43 ldrb r3, [r0, #13] - 8476: 9a09 ldr r2, [sp, #36] ; 0x24 - 8478: 4293 cmp r3, r2 - 847a: d0e6 beq.n 844a - lfnOrd = 0; - 847c: f04f 0900 mov.w r9, #0 - 8480: e797 b.n 83b2 - if (!(oflag & O_CREAT) || !isWriteMode(oflag)) { - 8482: 9b05 ldr r3, [sp, #20] - 8484: 059a lsls r2, r3, #22 - 8486: d5c1 bpl.n 840c - -#define O_READ O_RDONLY -#define O_WRITE O_WRONLY - -inline bool isWriteMode(oflag_t oflag) { - oflag &= O_ACCMODE; - 8488: f003 0303 and.w r3, r3, #3 - return oflag == O_WRONLY || oflag == O_RDWR; - 848c: 3b01 subs r3, #1 - 848e: 2b01 cmp r3, #1 - 8490: d8bc bhi.n 840c - if (freeFound == 0) { - 8492: 2c00 cmp r4, #0 - 8494: bf08 it eq - 8496: 46a8 moveq r8, r5 - while (freeFound < freeNeed) { - 8498: 42bc cmp r4, r7 - 849a: d303 bcc.n 84a4 - 849c: e01c b.n 84d8 - freeFound++; - 849e: b2dc uxtb r4, r3 - while (freeFound < freeNeed) { - 84a0: 42a7 cmp r7, r4 - 84a2: d019 beq.n 84d8 - dir = dirFile->readDirCache(); - 84a4: 2100 movs r1, #0 - 84a6: 4630 mov r0, r6 - 84a8: f7ff f986 bl 77b8 - freeFound++; - 84ac: 1c63 adds r3, r4, #1 - if (!dir) { - 84ae: 2800 cmp r0, #0 - 84b0: d1f5 bne.n 849e - if (dirFile->getError()) { - 84b2: 7873 ldrb r3, [r6, #1] - 84b4: 2b00 cmp r3, #0 - 84b6: d1a9 bne.n 840c - while (freeFound < freeNeed) { - 84b8: 42bc cmp r4, r7 - 84ba: d20d bcs.n 84d8 - 84bc: 9d07 ldr r5, [sp, #28] - 84be: e005 b.n 84cc - return m_sectorsPerCluster*(m_bytesPerSector/FS_DIR_SIZE); - 84c0: 792b ldrb r3, [r5, #4] - freeFound += vol->dirEntriesPerCluster(); - 84c2: eb04 1403 add.w r4, r4, r3, lsl #4 - 84c6: b2e4 uxtb r4, r4 - while (freeFound < freeNeed) { - 84c8: 42a7 cmp r7, r4 - 84ca: d905 bls.n 84d8 - if (!dirFile->addDirCluster()) { - 84cc: 4630 mov r0, r6 - 84ce: f7fe fe39 bl 7144 - 84d2: 2800 cmp r0, #0 - 84d4: d1f4 bne.n 84c0 - 84d6: e799 b.n 840c - if (fnameFound) { - 84d8: 9b06 ldr r3, [sp, #24] - 84da: 2b00 cmp r3, #0 - 84dc: d14d bne.n 857a - lfnOrd = freeNeed - 1; - 84de: 1e7b subs r3, r7, #1 - 84e0: b2db uxtb r3, r3 - curIndex = freeIndex + lfnOrd; - 84e2: eb08 0503 add.w r5, r8, r3 - 84e6: b2ad uxth r5, r5 - if (!dirFile->createLFN(curIndex, fname, lfnOrd)) { - 84e8: 4652 mov r2, sl - 84ea: 4629 mov r1, r5 - 84ec: 4630 mov r0, r6 - 84ee: 9304 str r3, [sp, #16] - 84f0: f7ff fd9e bl 8030 - 84f4: 2800 cmp r0, #0 - 84f6: d089 beq.n 840c - return seekSet(32UL*index) ? readDirCache() : nullptr; - 84f8: 0169 lsls r1, r5, #5 - 84fa: 4630 mov r0, r6 - 84fc: f7ff fa82 bl 7a04 - 8500: 2800 cmp r0, #0 - 8502: d083 beq.n 840c - 8504: 2100 movs r1, #0 - 8506: 4630 mov r0, r6 - 8508: f7ff f956 bl 77b8 - if (!dir) { - 850c: 4604 mov r4, r0 - 850e: 2800 cmp r0, #0 - 8510: f43f af7c beq.w 840c - memset(dir, 0, sizeof(DirFat_t)); - 8514: 2220 movs r2, #32 - 8516: 2100 movs r1, #0 - 8518: f008 fe2c bl 11174 - memcpy(dir->name, fname->sfn, 11); - 851c: 220b movs r2, #11 - 851e: f10a 0116 add.w r1, sl, #22 - 8522: 4620 mov r0, r4 - 8524: f003 fc88 bl be38 - dir->caseFlags = (FAT_CASE_LC_BASE | FAT_CASE_LC_EXT) & fname->flags; - 8528: f89a 2015 ldrb.w r2, [sl, #21] - if (FsDateTime::callback) { - 852c: 9b04 ldr r3, [sp, #16] - dir->caseFlags = (FAT_CASE_LC_BASE | FAT_CASE_LC_EXT) & fname->flags; - 852e: f002 0218 and.w r2, r2, #24 - 8532: 7322 strb r2, [r4, #12] - if (FsDateTime::callback) { - 8534: 4a26 ldr r2, [pc, #152] ; (85d0 ) - 8536: 6817 ldr r7, [r2, #0] - 8538: 2f00 cmp r7, #0 - 853a: d041 beq.n 85c0 - FsDateTime::callback(&date, &time, &ms10); - 853c: f10d 022b add.w r2, sp, #43 ; 0x2b - 8540: f10d 012e add.w r1, sp, #46 ; 0x2e - 8544: a80b add r0, sp, #44 ; 0x2c - 8546: 47b8 blx r7 - *reinterpret_cast(dst) = src; - 8548: f8bd 202c ldrh.w r2, [sp, #44] ; 0x2c - 854c: 8222 strh r2, [r4, #16] - 854e: f8bd 202e ldrh.w r2, [sp, #46] ; 0x2e - 8552: 81e2 strh r2, [r4, #14] - dir->createTimeMs = ms10; - 8554: 9b04 ldr r3, [sp, #16] - 8556: f89d 202b ldrb.w r2, [sp, #43] ; 0x2b - 855a: 7362 strb r2, [r4, #13] - 855c: 9907 ldr r1, [sp, #28] - 855e: f891 2028 ldrb.w r2, [r1, #40] ; 0x28 - 8562: f042 0201 orr.w r2, r2, #1 - 8566: f881 2028 strb.w r2, [r1, #40] ; 0x28 - if (!openCachedEntry(dirFile, curIndex, oflag, lfnOrd)) { - 856a: 9300 str r3, [sp, #0] - 856c: 9803 ldr r0, [sp, #12] - 856e: 9b05 ldr r3, [sp, #20] - 8570: 462a mov r2, r5 - 8572: 4631 mov r1, r6 - 8574: f7ff fa9e bl 7ab4 - 8578: e749 b.n 840e - if (!dirFile->makeUniqueSfn(fname)) { - 857a: 4651 mov r1, sl - 857c: 4630 mov r0, r6 - 857e: f7ff fe89 bl 8294 - 8582: 2800 cmp r0, #0 - 8584: d1ab bne.n 84de - 8586: e741 b.n 840c - if (1 == order && lfnChecksum(dir->name) == checksum) { - 8588: f1bb 0f01 cmp.w fp, #1 - 858c: f47f af3e bne.w 840c - for (uint8_t i = 0; i < 11; i++) { - 8590: f100 040a add.w r4, r0, #10 - 8594: 4619 mov r1, r3 - 8596: e001 b.n 859c - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 8598: f810 1f01 ldrb.w r1, [r0, #1]! - 859c: 01d3 lsls r3, r2, #7 - 859e: ea43 0352 orr.w r3, r3, r2, lsr #1 - 85a2: fa51 f383 uxtab r3, r1, r3 - for (uint8_t i = 0; i < 11; i++) { - 85a6: 42a0 cmp r0, r4 - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 85a8: b2da uxtb r2, r3 - for (uint8_t i = 0; i < 11; i++) { - 85aa: d1f5 bne.n 8598 - 85ac: 9b09 ldr r3, [sp, #36] ; 0x24 - 85ae: 4293 cmp r3, r2 - 85b0: f47f af2c bne.w 840c - 85b4: 464b mov r3, r9 - if (oflag & O_EXCL) { - 85b6: 9a05 ldr r2, [sp, #20] - 85b8: 0511 lsls r1, r2, #20 - 85ba: f53f af27 bmi.w 840c - 85be: e7d4 b.n 856a - 85c0: f645 2221 movw r2, #23073 ; 0x5a21 - 85c4: 8222 strh r2, [r4, #16] - 85c6: 8322 strh r2, [r4, #24] - 85c8: 8262 strh r2, [r4, #18] - if (FS_DEFAULT_TIME) { - 85ca: e7c7 b.n 855c - 85cc: 4ec4ec4f .word 0x4ec4ec4f - 85d0: 1fff9770 .word 0x1fff9770 - -000085d4 : -//------------------------------------------------------------------------------ -bool FatFile::parsePathName(const char* path, - FatLfn_t* fname, const char** ptr) { - 85d4: b5f0 push {r4, r5, r6, r7, lr} - 85d6: 4608 mov r0, r1 - size_t len = 0; - // Skip leading spaces. - while (*path == ' ') { - 85d8: 7809 ldrb r1, [r1, #0] - 85da: 2920 cmp r1, #32 - FatLfn_t* fname, const char** ptr) { - 85dc: b083 sub sp, #12 - 85de: 4614 mov r4, r2 - 85e0: 461e mov r6, r3 - while (*path == ' ') { - 85e2: d103 bne.n 85ec - 85e4: f810 3f01 ldrb.w r3, [r0, #1]! - 85e8: 2b20 cmp r3, #32 - 85ea: d0fb beq.n 85e4 - path++; - } - fname->begin = path; - 85ec: 6020 str r0, [r4, #0] - while (*path && !isDirSeparator(*path)) { - 85ee: 7803 ldrb r3, [r0, #0] - 85f0: b333 cbz r3, 8640 - 85f2: 4d2a ldr r5, [pc, #168] ; (869c ) - size_t len = 0; - 85f4: 2700 movs r7, #0 - 85f6: e012 b.n 861e - if (!path) { - DBG_FAIL_MACRO; - goto fail; - } - len += cp <= 0XFFFF ? 1 : 2; - if (cp < 0X80 && lfnReservedChar(cp)) { - 85f8: 2b7f cmp r3, #127 ; 0x7f - len += cp <= 0XFFFF ? 1 : 2; - 85fa: f107 0701 add.w r7, r7, #1 - if (cp < 0X80 && lfnReservedChar(cp)) { - 85fe: d83d bhi.n 867c - 8600: 2b3c cmp r3, #60 ; 0x3c - 8602: b2d9 uxtb r1, r3 - 8604: d82c bhi.n 8660 - 8606: 2921 cmp r1, #33 ; 0x21 - 8608: d925 bls.n 8656 - 860a: 3922 subs r1, #34 ; 0x22 - 860c: b2c9 uxtb r1, r1 - 860e: fa25 f101 lsr.w r1, r5, r1 - 8612: 07ca lsls r2, r1, #31 - 8614: d421 bmi.n 865a - DBG_FAIL_MACRO; - goto fail; - } - len++; -#endif // USE_UTF8_LONG_NAMES - if (cp != '.' && cp != ' ') { - 8616: 2b2e cmp r3, #46 ; 0x2e - 8618: d10d bne.n 8636 - while (*path && !isDirSeparator(*path)) { - 861a: 7803 ldrb r3, [r0, #0] - 861c: b183 cbz r3, 8640 - 861e: 2b2f cmp r3, #47 ; 0x2f - 8620: d02f beq.n 8682 - path = FsUtf::mbToCp(path, path + 4, &cp); - 8622: 1d01 adds r1, r0, #4 - 8624: aa01 add r2, sp, #4 - 8626: f002 f8ab bl a780 - if (!path) { - 862a: b1b0 cbz r0, 865a - len += cp <= 0XFFFF ? 1 : 2; - 862c: 9b01 ldr r3, [sp, #4] - 862e: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8632: d3e1 bcc.n 85f8 - 8634: 3702 adds r7, #2 - // Need to trim trailing dots spaces. - fname->len = len; - 8636: 6127 str r7, [r4, #16] - fname->end = path; - 8638: 60a0 str r0, [r4, #8] - while (*path && !isDirSeparator(*path)) { - 863a: 7803 ldrb r3, [r0, #0] - 863c: 2b00 cmp r3, #0 - 863e: d1ee bne.n 861e - } - } - if (!fname->len || fname->len > FAT_MAX_LFN_LENGTH) { - 8640: 6923 ldr r3, [r4, #16] - 8642: 3b01 subs r3, #1 - 8644: 2bfe cmp r3, #254 ; 0xfe - 8646: d808 bhi.n 865a - DBG_FAIL_MACRO; - goto fail; - } - // Advance to next path component. - for (; *path == ' ' || isDirSeparator(*path); path++) {} - *ptr = path; - 8648: 6030 str r0, [r6, #0] - return makeSFN(fname); - 864a: 4620 mov r0, r4 - - fail: - return false; -} - 864c: b003 add sp, #12 - 864e: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} - return makeSFN(fname); - 8652: f7ff bd7b b.w 814c - 8656: 291f cmp r1, #31 - 8658: d80e bhi.n 8678 -} - 865a: 2000 movs r0, #0 - 865c: b003 add sp, #12 - 865e: bdf0 pop {r4, r5, r6, r7, pc} - 8660: 295c cmp r1, #92 ; 0x5c - 8662: d0fa beq.n 865a - 8664: d904 bls.n 8670 - 8666: 297c cmp r1, #124 ; 0x7c - 8668: d1e5 bne.n 8636 - 866a: 2000 movs r0, #0 - 866c: b003 add sp, #12 - 866e: bdf0 pop {r4, r5, r6, r7, pc} - 8670: 393e subs r1, #62 ; 0x3e - 8672: 2901 cmp r1, #1 - 8674: d9f1 bls.n 865a - 8676: e7de b.n 8636 - if (cp != '.' && cp != ' ') { - 8678: 2b2e cmp r3, #46 ; 0x2e - 867a: d0ce beq.n 861a - 867c: 2b20 cmp r3, #32 - 867e: d0cc beq.n 861a - 8680: e7d9 b.n 8636 - if (!fname->len || fname->len > FAT_MAX_LFN_LENGTH) { - 8682: 6923 ldr r3, [r4, #16] - 8684: 3b01 subs r3, #1 - 8686: 2bfe cmp r3, #254 ; 0xfe - 8688: d8e7 bhi.n 865a - 868a: 4603 mov r3, r0 - 868c: 4618 mov r0, r3 - for (; *path == ' ' || isDirSeparator(*path); path++) {} - 868e: f813 2b01 ldrb.w r2, [r3], #1 - 8692: 2a20 cmp r2, #32 - 8694: d0fa beq.n 868c - 8696: 2a2f cmp r2, #47 ; 0x2f - 8698: d0f8 beq.n 868c - 869a: e7d5 b.n 8648 - 869c: 05002101 .word 0x05002101 - -000086a0 : -//------------------------------------------------------------------------------ -bool FatFile::remove() { - 86a0: b5f0 push {r4, r5, r6, r7, lr} - FatFile dirFile; - DirFat_t* dir; - DirLfn_t* ldir; - - // Cant' remove not open for write. - if (!isWritable()) { - 86a2: 7883 ldrb r3, [r0, #2] -bool FatFile::remove() { - 86a4: b08b sub sp, #44 ; 0x2c - FatFile() {} - 86a6: 2200 movs r2, #0 - 86a8: 9201 str r2, [sp, #4] - if (!isWritable()) { - 86aa: 079a lsls r2, r3, #30 - 86ac: d524 bpl.n 86f8 - DBG_FAIL_MACRO; - goto fail; - } - // Free any clusters. - if (m_firstCluster && !m_vol->freeChain(m_firstCluster)) { - 86ae: 6a01 ldr r1, [r0, #32] - 86b0: 4605 mov r5, r0 - 86b2: b119 cbz r1, 86bc - 86b4: 6880 ldr r0, [r0, #8] - 86b6: f000 fd77 bl 91a8 - 86ba: b1e8 cbz r0, 86f8 - DBG_FAIL_MACRO; - goto fail; - } - // Cache directory entry. - dir = cacheDirEntry(FsCache::CACHE_FOR_WRITE); - 86bc: 2101 movs r1, #1 - 86be: 4628 mov r0, r5 - 86c0: f7fe fd7c bl 71bc - if (!dir) { - 86c4: b1c0 cbz r0, 86f8 - for (uint8_t i = 0; i < 11; i++) { - 86c6: 1e42 subs r2, r0, #1 - 86c8: f100 0c0a add.w ip, r0, #10 - uint8_t sum = 0; - 86cc: 2400 movs r4, #0 - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 86ce: f812 1f01 ldrb.w r1, [r2, #1]! - 86d2: 01e3 lsls r3, r4, #7 - 86d4: ea43 0354 orr.w r3, r3, r4, lsr #1 - 86d8: fa51 f383 uxtab r3, r1, r3 - for (uint8_t i = 0; i < 11; i++) { - 86dc: 4594 cmp ip, r2 - sum = (((sum & 1) << 7) | (sum >> 1)) + name[i]; - 86de: b2dc uxtb r4, r3 - for (uint8_t i = 0; i < 11; i++) { - 86e0: d1f5 bne.n 86ce - goto fail; - } - checksum = lfnChecksum(dir->name); - - // Mark entry deleted. - dir->name[0] = FAT_NAME_DELETED; - 86e2: 27e5 movs r7, #229 ; 0xe5 - 86e4: 7007 strb r7, [r0, #0] - // Set this file closed. - m_attributes = FILE_ATTR_CLOSED; - m_flags = 0; - - // Write entry to device. - if (!m_vol->cacheSync()) { - 86e6: 68ae ldr r6, [r5, #8] - m_attributes = FILE_ATTR_CLOSED; - 86e8: 2300 movs r3, #0 - 86ea: 702b strb r3, [r5, #0] - m_flags = 0; - 86ec: 70ab strb r3, [r5, #2] - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 86ee: f106 0028 add.w r0, r6, #40 ; 0x28 - 86f2: f001 ff1d bl a530 - 86f6: b910 cbnz r0, 86fe - } - // Fall into fail. - DBG_FAIL_MACRO; - - fail: - return false; - 86f8: 2000 movs r0, #0 -} - 86fa: b00b add sp, #44 ; 0x2c - 86fc: bdf0 pop {r4, r5, r6, r7, pc} - 86fe: f506 700e add.w r0, r6, #568 ; 0x238 - 8702: f001 ff15 bl a530 - 8706: 2800 cmp r0, #0 - 8708: d0f6 beq.n 86f8 - 870a: 6830 ldr r0, [r6, #0] - return m_blockDev->syncDevice(); - 870c: 6803 ldr r3, [r0, #0] - 870e: 6a1b ldr r3, [r3, #32] - 8710: 4798 blx r3 - return m_cache.sync() && m_fatCache.sync() && syncDevice(); - 8712: 2800 cmp r0, #0 - 8714: d0f0 beq.n 86f8 - if (!isLFN()) { - 8716: 78eb ldrb r3, [r5, #3] - 8718: 2b00 cmp r3, #0 - 871a: d0ee beq.n 86fa - if (!dirFile.openCluster(this)) { - 871c: 4629 mov r1, r5 - 871e: a801 add r0, sp, #4 - 8720: f7fe ff1e bl 7560 - 8724: 2800 cmp r0, #0 - 8726: d0e7 beq.n 86f8 - for (uint8_t order = 1; order <= m_lfnOrd; order++) { - 8728: 78eb ldrb r3, [r5, #3] - 872a: 2b00 cmp r3, #0 - 872c: d0e4 beq.n 86f8 - 872e: 2601 movs r6, #1 - 8730: e021 b.n 8776 - return seekSet(32UL*index) ? readDirCache() : nullptr; - 8732: a801 add r0, sp, #4 - 8734: f7ff f840 bl 77b8 - 8738: 1c73 adds r3, r6, #1 - if (ldir->attributes != FAT_ATTRIB_LONG_NAME || - 873a: b2f1 uxtb r1, r6 - for (uint8_t order = 1; order <= m_lfnOrd; order++) { - 873c: fa5f fc83 uxtb.w ip, r3 - 8740: b29e uxth r6, r3 - if (!ldir) { - 8742: 2800 cmp r0, #0 - 8744: d0d8 beq.n 86f8 - if (ldir->attributes != FAT_ATTRIB_LONG_NAME || - 8746: 7ac3 ldrb r3, [r0, #11] - 8748: 2b0f cmp r3, #15 - 874a: d1d5 bne.n 86f8 - order != (ldir->order & 0X1F) || - 874c: 7802 ldrb r2, [r0, #0] - if (ldir->attributes != FAT_ATTRIB_LONG_NAME || - 874e: f002 031f and.w r3, r2, #31 - 8752: 428b cmp r3, r1 - 8754: d1d0 bne.n 86f8 - order != (ldir->order & 0X1F) || - 8756: 7b43 ldrb r3, [r0, #13] - 8758: 42a3 cmp r3, r4 - 875a: d1cd bne.n 86f8 - ldir->order = FAT_NAME_DELETED; - 875c: 7007 strb r7, [r0, #0] - m_vol->cacheDirty(); - 875e: 68a9 ldr r1, [r5, #8] - 8760: f891 3028 ldrb.w r3, [r1, #40] ; 0x28 - 8764: f043 0301 orr.w r3, r3, #1 - 8768: f881 3028 strb.w r3, [r1, #40] ; 0x28 - if (last) { - 876c: 0653 lsls r3, r2, #25 - 876e: d40d bmi.n 878c - for (uint8_t order = 1; order <= m_lfnOrd; order++) { - 8770: 78eb ldrb r3, [r5, #3] - 8772: 4563 cmp r3, ip - 8774: d3c0 bcc.n 86f8 - ldir = reinterpret_cast(dirFile.cacheDir(m_dirIndex - order)); - 8776: 88a9 ldrh r1, [r5, #4] - 8778: 1b89 subs r1, r1, r6 - 877a: b289 uxth r1, r1 - 877c: 0149 lsls r1, r1, #5 - 877e: a801 add r0, sp, #4 - 8780: f7ff f940 bl 7a04 - 8784: 2100 movs r1, #0 - 8786: 2800 cmp r0, #0 - 8788: d1d3 bne.n 8732 - 878a: e7b5 b.n 86f8 - if (!m_vol->cacheSync()) { - 878c: 68ac ldr r4, [r5, #8] - 878e: f104 0028 add.w r0, r4, #40 ; 0x28 - 8792: f001 fecd bl a530 - 8796: 2800 cmp r0, #0 - 8798: d0ae beq.n 86f8 - 879a: f504 700e add.w r0, r4, #568 ; 0x238 - 879e: f001 fec7 bl a530 - 87a2: 2800 cmp r0, #0 - 87a4: d0a8 beq.n 86f8 - 87a6: 6820 ldr r0, [r4, #0] - return m_blockDev->syncDevice(); - 87a8: 6803 ldr r3, [r0, #0] - 87aa: 6a1b ldr r3, [r3, #32] - 87ac: 4798 blx r3 - 87ae: e7a4 b.n 86fa - -000087b0 : - * \param[in] ns Number of sectors to be written. - * \param[in] callback Function to be called for each sector's data - * \param[in] context Context to pass to callback function - * \return true for success or false for failure. - */ - virtual bool writeSectorsCallback(uint32_t sector, size_t ns, - 87b0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 87b4: f8dd 9020 ldr.w r9, [sp, #32] - const uint8_t * (*callback)(uint32_t sector, void *context), void *context) { - for (size_t i = 0; i < ns; i++) { - 87b8: b1a2 cbz r2, 87e4 - 87ba: 4605 mov r5, r0 - 87bc: 460c mov r4, r1 - 87be: 4698 mov r8, r3 - 87c0: 1857 adds r7, r2, r1 - 87c2: e001 b.n 87c8 - 87c4: 42bc cmp r4, r7 - 87c6: d00d beq.n 87e4 - if (!writeSector(sector + i, callback(sector + i, context))) return false; - 87c8: 682b ldr r3, [r5, #0] - 87ca: 4620 mov r0, r4 - 87cc: 4649 mov r1, r9 - 87ce: 6a5e ldr r6, [r3, #36] ; 0x24 - 87d0: 47c0 blx r8 - 87d2: 4621 mov r1, r4 - 87d4: 4602 mov r2, r0 - 87d6: 4628 mov r0, r5 - for (size_t i = 0; i < ns; i++) { - 87d8: 3401 adds r4, #1 - if (!writeSector(sector + i, callback(sector + i, context))) return false; - 87da: 47b0 blx r6 - 87dc: 2800 cmp r0, #0 - 87de: d1f1 bne.n 87c4 - } - return true; - } - 87e0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - return true; - 87e4: 2001 movs r0, #1 - } - 87e6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 87ea: bf00 nop - -000087ec : - uint16_t count; - uint16_t dotcount; -}; -static const uint8_t * initFatDirCallback(uint32_t sector, void *context) { - struct initFatDirState * state = (struct initFatDirState *)context; - if (state->pr && ++state->count >= state->dotcount) { - 87ec: 6848 ldr r0, [r1, #4] -static const uint8_t * initFatDirCallback(uint32_t sector, void *context) { - 87ee: b510 push {r4, lr} - 87f0: 460c mov r4, r1 - if (state->pr && ++state->count >= state->dotcount) { - 87f2: b130 cbz r0, 8802 - 87f4: 890b ldrh r3, [r1, #8] - 87f6: 894a ldrh r2, [r1, #10] - 87f8: 3301 adds r3, #1 - 87fa: b29b uxth r3, r3 - 87fc: 429a cmp r2, r3 - 87fe: 810b strh r3, [r1, #8] - 8800: d901 bls.n 8806 - state->pr->write("."); - state->count = 0; - } - return state->buffer; -} - 8802: 6820 ldr r0, [r4, #0] - 8804: bd10 pop {r4, pc} - 8806: 6803 ldr r3, [r0, #0] - 8808: 4903 ldr r1, [pc, #12] ; (8818 ) - 880a: 685b ldr r3, [r3, #4] - 880c: 2201 movs r2, #1 - 880e: 4798 blx r3 - state->count = 0; - 8810: 2300 movs r3, #0 -} - 8812: 6820 ldr r0, [r4, #0] - state->count = 0; - 8814: 8123 strh r3, [r4, #8] -} - 8816: bd10 pop {r4, pc} - 8818: 000176d4 .word 0x000176d4 - -0000881c : -bool FatFormatter::initFatDir(uint8_t fatType, uint32_t sectorCount) { - 881c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8820: 4605 mov r5, r0 - 8822: b087 sub sp, #28 - size_t n; - memset(m_secBuf, 0, BYTES_PER_SECTOR); - 8824: 6a40 ldr r0, [r0, #36] ; 0x24 -bool FatFormatter::initFatDir(uint8_t fatType, uint32_t sectorCount) { - 8826: 4688 mov r8, r1 - 8828: 4692 mov sl, r2 - memset(m_secBuf, 0, BYTES_PER_SECTOR); - 882a: 2100 movs r1, #0 - 882c: f44f 7200 mov.w r2, #512 ; 0x200 - 8830: f008 fca0 bl 11174 - writeMsg("Writing FAT "); - 8834: 6a28 ldr r0, [r5, #32] - 8836: b128 cbz r0, 8844 - 8838: 6803 ldr r3, [r0, #0] - 883a: 493b ldr r1, [pc, #236] ; (8928 ) - 883c: 685b ldr r3, [r3, #4] - 883e: 220c movs r2, #12 - 8840: 4798 blx r3 - struct initFatDirState state; - state.buffer = m_secBuf; - state.pr = m_pr; - 8842: 6a28 ldr r0, [r5, #32] - state.count = 0; - state.dotcount = sectorCount/32; - if (!m_dev->writeSectorsCallback(m_fatStart + 1, sectorCount - 1, initFatDirCallback, &state)) { - 8844: 69ee ldr r6, [r5, #28] - state.buffer = m_secBuf; - 8846: 6a6b ldr r3, [r5, #36] ; 0x24 - 8848: 9303 str r3, [sp, #12] - if (!m_dev->writeSectorsCallback(m_fatStart + 1, sectorCount - 1, initFatDirCallback, &state)) { - 884a: 6833 ldr r3, [r6, #0] - 884c: f8df c0dc ldr.w ip, [pc, #220] ; 892c - 8850: 6adf ldr r7, [r3, #44] ; 0x2c - 8852: 68e9 ldr r1, [r5, #12] - state.pr = m_pr; - 8854: 9004 str r0, [sp, #16] - state.dotcount = sectorCount/32; - 8856: ea4f 125a mov.w r2, sl, lsr #5 - state.count = 0; - 885a: f04f 0900 mov.w r9, #0 - 885e: 4567 cmp r7, ip - state.dotcount = sectorCount/32; - 8860: f8ad 2016 strh.w r2, [sp, #22] - state.count = 0; - 8864: f8ad 9014 strh.w r9, [sp, #20] - if (!m_dev->writeSectorsCallback(m_fatStart + 1, sectorCount - 1, initFatDirCallback, &state)) { - 8868: f101 0401 add.w r4, r1, #1 - 886c: f10a 32ff add.w r2, sl, #4294967295 ; 0xffffffff - 8870: d126 bne.n 88c0 - for (size_t i = 0; i < ns; i++) { - 8872: b36a cbz r2, 88d0 - 8874: eb01 070a add.w r7, r1, sl - 8878: f8df a0b4 ldr.w sl, [pc, #180] ; 8930 - 887c: e00a b.n 8894 - if (!writeSector(sector + i, callback(sector + i, context))) return false; - 887e: 4621 mov r1, r4 - 8880: 9a03 ldr r2, [sp, #12] - 8882: 4630 mov r0, r6 - for (size_t i = 0; i < ns; i++) { - 8884: 3401 adds r4, #1 - if (!writeSector(sector + i, callback(sector + i, context))) return false; - 8886: 47d8 blx fp - 8888: 2800 cmp r0, #0 - 888a: d03e beq.n 890a - for (size_t i = 0; i < ns; i++) { - 888c: 42a7 cmp r7, r4 - 888e: d01e beq.n 88ce - if (!writeSector(sector + i, callback(sector + i, context))) return false; - 8890: 6833 ldr r3, [r6, #0] - if (state->pr && ++state->count >= state->dotcount) { - 8892: 9804 ldr r0, [sp, #16] - 8894: f8d3 b024 ldr.w fp, [r3, #36] ; 0x24 - 8898: 2800 cmp r0, #0 - 889a: d0f0 beq.n 887e - 889c: f8bd 3014 ldrh.w r3, [sp, #20] - 88a0: f8bd 2016 ldrh.w r2, [sp, #22] - 88a4: 3301 adds r3, #1 - 88a6: b29b uxth r3, r3 - 88a8: 429a cmp r2, r3 - 88aa: f8ad 3014 strh.w r3, [sp, #20] - 88ae: d8e6 bhi.n 887e - 88b0: 6803 ldr r3, [r0, #0] - 88b2: 4651 mov r1, sl - 88b4: 685b ldr r3, [r3, #4] - 88b6: 2201 movs r2, #1 - 88b8: 4798 blx r3 - state->count = 0; - 88ba: f8ad 9014 strh.w r9, [sp, #20] - 88be: e7de b.n 887e - if (!m_dev->writeSectorsCallback(m_fatStart + 1, sectorCount - 1, initFatDirCallback, &state)) { - 88c0: ab03 add r3, sp, #12 - 88c2: 9300 str r3, [sp, #0] - 88c4: 4621 mov r1, r4 - 88c6: 4b1b ldr r3, [pc, #108] ; (8934 ) - 88c8: 4630 mov r0, r6 - 88ca: 47b8 blx r7 - 88cc: b1e8 cbz r0, 890a - return false; - } - writeMsg("\r\n"); - 88ce: 6a28 ldr r0, [r5, #32] - 88d0: b120 cbz r0, 88dc - 88d2: 6803 ldr r3, [r0, #0] - 88d4: 4918 ldr r1, [pc, #96] ; (8938 ) - 88d6: 685b ldr r3, [r3, #4] - 88d8: 2202 movs r2, #2 - 88da: 4798 blx r3 - // Allocate reserved clusters and root for FAT32. - m_secBuf[0] = 0XF8; - 88dc: 6a6b ldr r3, [r5, #36] ; 0x24 - n = fatType == 16 ? 4 : 12; - 88de: f1b8 0f10 cmp.w r8, #16 - m_secBuf[0] = 0XF8; - 88e2: f04f 02f8 mov.w r2, #248 ; 0xf8 - 88e6: 701a strb r2, [r3, #0] - n = fatType == 16 ? 4 : 12; - 88e8: bf0c ite eq - 88ea: 2004 moveq r0, #4 - 88ec: 200c movne r0, #12 - for (size_t i = 1; i < n; i++) { - 88ee: 2301 movs r3, #1 - m_secBuf[i] = 0XFF; - 88f0: 21ff movs r1, #255 ; 0xff - 88f2: 6a6a ldr r2, [r5, #36] ; 0x24 - 88f4: 54d1 strb r1, [r2, r3] - for (size_t i = 1; i < n; i++) { - 88f6: 3301 adds r3, #1 - 88f8: 4298 cmp r0, r3 - 88fa: d1fa bne.n 88f2 - } - return m_dev->writeSector(m_fatStart, m_secBuf) && - 88fc: 69e8 ldr r0, [r5, #28] - 88fe: 6a6a ldr r2, [r5, #36] ; 0x24 - 8900: 6803 ldr r3, [r0, #0] - 8902: 68e9 ldr r1, [r5, #12] - 8904: 6a5b ldr r3, [r3, #36] ; 0x24 - 8906: 4798 blx r3 - 8908: b918 cbnz r0, 8912 - return false; - 890a: 2000 movs r0, #0 - m_dev->writeSector(m_fatStart + m_fatSize, m_secBuf); -} - 890c: b007 add sp, #28 - 890e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - m_dev->writeSector(m_fatStart + m_fatSize, m_secBuf); - 8912: 68ab ldr r3, [r5, #8] - 8914: 69e8 ldr r0, [r5, #28] - 8916: 68e9 ldr r1, [r5, #12] - 8918: 6a6a ldr r2, [r5, #36] ; 0x24 - 891a: 4419 add r1, r3 - 891c: 6803 ldr r3, [r0, #0] - 891e: 6a5b ldr r3, [r3, #36] ; 0x24 - 8920: 4798 blx r3 -} - 8922: b007 add sp, #28 - 8924: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8928: 000180c0 .word 0x000180c0 - 892c: 000087b1 .word 0x000087b1 - 8930: 000176d4 .word 0x000176d4 - 8934: 000087ed .word 0x000087ed - 8938: 00017ed0 .word 0x00017ed0 - -0000893c : -//------------------------------------------------------------------------------ -void FatFormatter::initPbs() { - 893c: b570 push {r4, r5, r6, lr} - PbsFat_t* pbs = reinterpret_cast(m_secBuf); - 893e: 6a44 ldr r4, [r0, #36] ; 0x24 - memset(m_secBuf, 0, BYTES_PER_SECTOR); - 8940: f44f 7600 mov.w r6, #512 ; 0x200 -void FatFormatter::initPbs() { - 8944: 4605 mov r5, r0 - memset(m_secBuf, 0, BYTES_PER_SECTOR); - 8946: 4632 mov r2, r6 - 8948: 2100 movs r1, #0 - 894a: 4620 mov r0, r4 - 894c: f008 fc12 bl 11174 - pbs->jmpInstruction[0] = 0XEB; - pbs->jmpInstruction[1] = 0X76; - 8950: 2376 movs r3, #118 ; 0x76 - pbs->jmpInstruction[0] = 0XEB; - 8952: 22eb movs r2, #235 ; 0xeb - pbs->jmpInstruction[1] = 0X76; - 8954: 7063 strb r3, [r4, #1] - pbs->jmpInstruction[2] = 0X90; - 8956: 2390 movs r3, #144 ; 0x90 - pbs->jmpInstruction[0] = 0XEB; - 8958: 7022 strb r2, [r4, #0] - pbs->jmpInstruction[2] = 0X90; - 895a: 70a3 strb r3, [r4, #2] - for (uint8_t i = 0; i < sizeof(pbs->oemName); i++) { - pbs->oemName[i] = ' '; - 895c: 2208 movs r2, #8 - 895e: 2120 movs r1, #32 - 8960: 1ce0 adds r0, r4, #3 - 8962: f008 fc07 bl 11174 - 8966: f8a4 600b strh.w r6, [r4, #11] - } - setLe16(pbs->bpb.bpb16.bytesPerSector, BYTES_PER_SECTOR); - pbs->bpb.bpb16.sectorsPerCluster = m_sectorsPerCluster; - 896a: f895 302b ldrb.w r3, [r5, #43] ; 0x2b - 896e: 7363 strb r3, [r4, #13] - setLe16(pbs->bpb.bpb16.reservedSectorCount, m_reservedSectorCount); - pbs->bpb.bpb16.fatCount = 2; - 8970: 2202 movs r2, #2 - // skip rootDirEntryCount - // skip totalSectors16 - pbs->bpb.bpb16.mediaType = 0XF8; - 8972: 23f8 movs r3, #248 ; 0xf8 - setLe16(pbs->bpb.bpb16.reservedSectorCount, m_reservedSectorCount); - 8974: 8d29 ldrh r1, [r5, #40] ; 0x28 - pbs->bpb.bpb16.fatCount = 2; - 8976: 7422 strb r2, [r4, #16] - pbs->bpb.bpb16.mediaType = 0XF8; - 8978: 7563 strb r3, [r4, #21] - // skip sectorsPerFat16 - // skip sectorsPerTrack - // skip headCount - setLe32(pbs->bpb.bpb16.hidddenSectors, m_relativeSectors); - 897a: 692b ldr r3, [r5, #16] - *reinterpret_cast(dst) = src; - 897c: 61e3 str r3, [r4, #28] - setLe32(pbs->bpb.bpb16.totalSectors32, m_totalSectors); - 897e: 69aa ldr r2, [r5, #24] - 8980: 6222 str r2, [r4, #32] - *reinterpret_cast(dst) = src; - 8982: f64a 2355 movw r3, #43605 ; 0xaa55 - 8986: 81e1 strh r1, [r4, #14] - 8988: f8a4 31fe strh.w r3, [r4, #510] ; 0x1fe - // skip rest of bpb - setLe16(pbs->signature, PBR_SIGNATURE); -} - 898c: bd70 pop {r4, r5, r6, pc} - 898e: bf00 nop - -00008990 : - return false; - } - return initFatDir(32, 2*m_fatSize + m_sectorsPerCluster); -} -//------------------------------------------------------------------------------ -bool FatFormatter::writeMbr() { - 8990: b570 push {r4, r5, r6, lr} - 8992: 4604 mov r4, r0 - memset(m_secBuf, 0, BYTES_PER_SECTOR); - 8994: f44f 7200 mov.w r2, #512 ; 0x200 - 8998: 2100 movs r1, #0 - 899a: 6a40 ldr r0, [r0, #36] ; 0x24 - 899c: f008 fbea bl 11174 - MbrSector_t* mbr = reinterpret_cast(m_secBuf); - 89a0: 6a65 ldr r5, [r4, #36] ; 0x24 - -#if USE_LBA_TO_CHS - lbaToMbrChs(mbr->part->beginCHS, m_capacityMB, m_relativeSectors); - 89a2: 6922 ldr r2, [r4, #16] - 89a4: 6821 ldr r1, [r4, #0] - 89a6: f205 10bf addw r0, r5, #447 ; 0x1bf - 89aa: f001 fe4d bl a648 - lbaToMbrChs(mbr->part->endCHS, m_capacityMB, - m_relativeSectors + m_totalSectors -1); - 89ae: 69a3 ldr r3, [r4, #24] - 89b0: 6922 ldr r2, [r4, #16] - lbaToMbrChs(mbr->part->endCHS, m_capacityMB, - 89b2: 6821 ldr r1, [r4, #0] - m_relativeSectors + m_totalSectors -1); - 89b4: 441a add r2, r3 - lbaToMbrChs(mbr->part->endCHS, m_capacityMB, - 89b6: f205 10c3 addw r0, r5, #451 ; 0x1c3 - 89ba: 3a01 subs r2, #1 - 89bc: f001 fe44 bl a648 - mbr->part->endCHS[0] = 0XFE; - mbr->part->endCHS[1] = 0XFF; - mbr->part->endCHS[2] = 0XFF; -#endif // USE_LBA_TO_CHS - - mbr->part->type = m_partType; - 89c0: f894 302a ldrb.w r3, [r4, #42] ; 0x2a - 89c4: f885 31c2 strb.w r3, [r5, #450] ; 0x1c2 - setLe32(mbr->part->relativeSectors, m_relativeSectors); - setLe32(mbr->part->totalSectors, m_totalSectors); - setLe16(mbr->signature, MBR_SIGNATURE); - return m_dev->writeSector(0, m_secBuf); - 89c8: 69e0 ldr r0, [r4, #28] - setLe32(mbr->part->relativeSectors, m_relativeSectors); - 89ca: 6922 ldr r2, [r4, #16] - return m_dev->writeSector(0, m_secBuf); - 89cc: 6803 ldr r3, [r0, #0] - *reinterpret_cast(dst) = src; - 89ce: f8c5 21c6 str.w r2, [r5, #454] ; 0x1c6 - setLe32(mbr->part->totalSectors, m_totalSectors); - 89d2: 69a1 ldr r1, [r4, #24] - return m_dev->writeSector(0, m_secBuf); - 89d4: 6a62 ldr r2, [r4, #36] ; 0x24 - 89d6: 6a5b ldr r3, [r3, #36] ; 0x24 - 89d8: f8c5 11ca str.w r1, [r5, #458] ; 0x1ca - *reinterpret_cast(dst) = src; - 89dc: f64a 2155 movw r1, #43605 ; 0xaa55 - 89e0: f8a5 11fe strh.w r1, [r5, #510] ; 0x1fe -} - 89e4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - return m_dev->writeSector(0, m_secBuf); - 89e8: 2100 movs r1, #0 - 89ea: 4718 bx r3 - -000089ec : -bool FatFormatter::makeFat16() { - 89ec: b570 push {r4, r5, r6, lr} - nc = (m_sectorCount - m_dataStart)/m_sectorsPerCluster; - 89ee: 6946 ldr r6, [r0, #20] - 89f0: f890 e02b ldrb.w lr, [r0, #43] ; 0x2b - PbsFat_t* pbs = reinterpret_cast(m_secBuf); - 89f4: 6a45 ldr r5, [r0, #36] ; 0x24 - for (m_dataStart = 2*BU16; ; m_dataStart += BU16) { - 89f6: f44f 7380 mov.w r3, #256 ; 0x100 -bool FatFormatter::makeFat16() { - 89fa: 4604 mov r4, r0 - for (m_dataStart = 2*BU16; ; m_dataStart += BU16) { - 89fc: 6043 str r3, [r0, #4] - nc = (m_sectorCount - m_dataStart)/m_sectorsPerCluster; - 89fe: f5a6 7280 sub.w r2, r6, #256 ; 0x100 - 8a02: fbb2 f2fe udiv r2, r2, lr - m_fatSize = (nc + 2 + (BYTES_PER_SECTOR/2) - 1)/(BYTES_PER_SECTOR/2); - 8a06: f202 1001 addw r0, r2, #257 ; 0x101 - 8a0a: 0a00 lsrs r0, r0, #8 - 8a0c: 60a0 str r0, [r4, #8] - r = BU16 + 1 + 2*m_fatSize + FAT16_ROOT_SECTOR_COUNT; - 8a0e: 0040 lsls r0, r0, #1 - 8a10: f100 0ca1 add.w ip, r0, #161 ; 0xa1 - if (m_dataStart >= r) { - 8a14: 459c cmp ip, r3 - 8a16: d90d bls.n 8a34 - for (m_dataStart = 2*BU16; ; m_dataStart += BU16) { - 8a18: 3380 adds r3, #128 ; 0x80 - nc = (m_sectorCount - m_dataStart)/m_sectorsPerCluster; - 8a1a: 1af2 subs r2, r6, r3 - 8a1c: fbb2 f2fe udiv r2, r2, lr - m_fatSize = (nc + 2 + (BYTES_PER_SECTOR/2) - 1)/(BYTES_PER_SECTOR/2); - 8a20: f202 1101 addw r1, r2, #257 ; 0x101 - 8a24: 0a09 lsrs r1, r1, #8 - r = BU16 + 1 + 2*m_fatSize + FAT16_ROOT_SECTOR_COUNT; - 8a26: 0048 lsls r0, r1, #1 - 8a28: f100 0ca1 add.w ip, r0, #161 ; 0xa1 - if (m_dataStart >= r) { - 8a2c: 4563 cmp r3, ip - 8a2e: d3f3 bcc.n 8a18 - 8a30: 60a1 str r1, [r4, #8] - 8a32: 6063 str r3, [r4, #4] - m_relativeSectors = m_dataStart - r + BU16; - 8a34: eba3 030c sub.w r3, r3, ip - 8a38: f103 0180 add.w r1, r3, #128 ; 0x80 - 8a3c: 6121 str r1, [r4, #16] - if (nc < 4085 || nc >= 65525) { - 8a3e: f6a2 71f5 subw r1, r2, #4085 ; 0xff5 - 8a42: f5b1 4f70 cmp.w r1, #61440 ; 0xf000 - 8a46: d24c bcs.n 8ae2 - + 2*m_fatSize + m_reservedSectorCount + 32; - 8a48: 3021 adds r0, #33 ; 0x21 - 8a4a: fb02 000e mla r0, r2, lr, r0 - m_fatStart = m_relativeSectors + m_reservedSectorCount; - 8a4e: 3381 adds r3, #129 ; 0x81 - m_partType = 0X06; - 8a50: f5b0 3f80 cmp.w r0, #65536 ; 0x10000 - m_fatStart = m_relativeSectors + m_reservedSectorCount; - 8a54: 60e3 str r3, [r4, #12] - m_partType = 0X06; - 8a56: bf34 ite cc - 8a58: 2304 movcc r3, #4 - 8a5a: 2306 movcs r3, #6 - 8a5c: f884 302a strb.w r3, [r4, #42] ; 0x2a - m_reservedSectorCount = 1; - 8a60: 2301 movs r3, #1 - m_totalSectors = nc*m_sectorsPerCluster - 8a62: 61a0 str r0, [r4, #24] - m_reservedSectorCount = 1; - 8a64: 8523 strh r3, [r4, #40] ; 0x28 - if (!writeMbr()) { - 8a66: 4620 mov r0, r4 - 8a68: f7ff ff92 bl 8990 - 8a6c: b908 cbnz r0, 8a72 -} - 8a6e: 2000 movs r0, #0 - 8a70: bd70 pop {r4, r5, r6, pc} - initPbs(); - 8a72: 4620 mov r0, r4 - 8a74: f7ff ff62 bl 893c - setLe16(pbs->bpb.bpb16.sectorsPerFat16, m_fatSize); - 8a78: 68a1 ldr r1, [r4, #8] - *reinterpret_cast(dst) = src; - 8a7a: 4b1f ldr r3, [pc, #124] ; (8af8 ) - 8a7c: 82e9 strh r1, [r5, #22] - *reinterpret_cast(dst) = src; - 8a7e: f44f 7200 mov.w r2, #512 ; 0x200 - 8a82: f8a5 2011 strh.w r2, [r5, #17] - pbs->bpb.bpb16.extSignature = EXTENDED_BOOT_SIGNATURE; - 8a86: 2129 movs r1, #41 ; 0x29 - pbs->bpb.bpb16.physicalDriveNumber = 0X80; - 8a88: 2280 movs r2, #128 ; 0x80 - 8a8a: f885 2024 strb.w r2, [r5, #36] ; 0x24 - pbs->bpb.bpb16.extSignature = EXTENDED_BOOT_SIGNATURE; - 8a8e: f885 1026 strb.w r1, [r5, #38] ; 0x26 - pbs->bpb.bpb16.volumeLabel[i] = ' '; - 8a92: 220b movs r2, #11 - *reinterpret_cast(dst) = src; - 8a94: f8c5 3027 str.w r3, [r5, #39] ; 0x27 - 8a98: 2120 movs r1, #32 - 8a9a: f105 002b add.w r0, r5, #43 ; 0x2b - 8a9e: f008 fb69 bl 11174 - pbs->bpb.bpb16.volumeType[0] = 'F'; - 8aa2: 2246 movs r2, #70 ; 0x46 - pbs->bpb.bpb16.volumeType[1] = 'A'; - 8aa4: 2341 movs r3, #65 ; 0x41 - pbs->bpb.bpb16.volumeType[0] = 'F'; - 8aa6: f885 2036 strb.w r2, [r5, #54] ; 0x36 - pbs->bpb.bpb16.volumeType[1] = 'A'; - 8aaa: f885 3037 strb.w r3, [r5, #55] ; 0x37 - pbs->bpb.bpb16.volumeType[2] = 'T'; - 8aae: 2154 movs r1, #84 ; 0x54 - pbs->bpb.bpb16.volumeType[3] = '1'; - 8ab0: 2231 movs r2, #49 ; 0x31 - pbs->bpb.bpb16.volumeType[4] = '6'; - 8ab2: 2336 movs r3, #54 ; 0x36 - pbs->bpb.bpb16.volumeType[2] = 'T'; - 8ab4: f885 1038 strb.w r1, [r5, #56] ; 0x38 - pbs->bpb.bpb16.volumeType[3] = '1'; - 8ab8: f885 2039 strb.w r2, [r5, #57] ; 0x39 - pbs->bpb.bpb16.volumeType[4] = '6'; - 8abc: f885 303a strb.w r3, [r5, #58] ; 0x3a - if (!m_dev->writeSector(m_relativeSectors, m_secBuf)) { - 8ac0: 69e0 ldr r0, [r4, #28] - 8ac2: 6a62 ldr r2, [r4, #36] ; 0x24 - 8ac4: 6803 ldr r3, [r0, #0] - 8ac6: 6921 ldr r1, [r4, #16] - 8ac8: 6a5b ldr r3, [r3, #36] ; 0x24 - 8aca: 4798 blx r3 - 8acc: 2800 cmp r0, #0 - 8ace: d0ce beq.n 8a6e - return initFatDir(16, m_dataStart - m_fatStart); - 8ad0: 6862 ldr r2, [r4, #4] - 8ad2: 68e3 ldr r3, [r4, #12] - 8ad4: 4620 mov r0, r4 - 8ad6: 2110 movs r1, #16 -} - 8ad8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} - return initFatDir(16, m_dataStart - m_fatStart); - 8adc: 1ad2 subs r2, r2, r3 - 8ade: f7ff be9d b.w 881c - writeMsg("Bad cluster count\r\n"); - 8ae2: 6a20 ldr r0, [r4, #32] - 8ae4: 2800 cmp r0, #0 - 8ae6: d0c2 beq.n 8a6e - 8ae8: 6803 ldr r3, [r0, #0] - 8aea: 4904 ldr r1, [pc, #16] ; (8afc ) - 8aec: 685b ldr r3, [r3, #4] - 8aee: 2213 movs r2, #19 - 8af0: 4798 blx r3 -} - 8af2: 2000 movs r0, #0 - 8af4: bd70 pop {r4, r5, r6, pc} - 8af6: bf00 nop - 8af8: 0012d687 .word 0x0012d687 - 8afc: 00018120 .word 0x00018120 - -00008b00 : -bool FatFormatter::makeFat32() { - 8b00: b5f8 push {r3, r4, r5, r6, r7, lr} - nc = (m_sectorCount - m_dataStart)/m_sectorsPerCluster; - 8b02: 6946 ldr r6, [r0, #20] - 8b04: f890 c02b ldrb.w ip, [r0, #43] ; 0x2b - PbsFat_t* pbs = reinterpret_cast(m_secBuf); - 8b08: 6a45 ldr r5, [r0, #36] ; 0x24 - m_relativeSectors = BU32; - 8b0a: f44f 5300 mov.w r3, #8192 ; 0x2000 - 8b0e: 6103 str r3, [r0, #16] - nc = (m_sectorCount - m_dataStart)/m_sectorsPerCluster; - 8b10: f5a6 4180 sub.w r1, r6, #16384 ; 0x4000 - 8b14: fbb1 f1fc udiv r1, r1, ip - m_fatSize = (nc + 2 + (BYTES_PER_SECTOR/4) - 1)/(BYTES_PER_SECTOR/4); - 8b18: f101 0381 add.w r3, r1, #129 ; 0x81 - for (m_dataStart = 2*BU32; ; m_dataStart += BU32) { - 8b1c: f44f 4280 mov.w r2, #16384 ; 0x4000 - m_fatSize = (nc + 2 + (BYTES_PER_SECTOR/4) - 1)/(BYTES_PER_SECTOR/4); - 8b20: 09db lsrs r3, r3, #7 - r = m_relativeSectors + 9 + 2*m_fatSize; - 8b22: f242 0e09 movw lr, #8201 ; 0x2009 -bool FatFormatter::makeFat32() { - 8b26: 4604 mov r4, r0 - for (m_dataStart = 2*BU32; ; m_dataStart += BU32) { - 8b28: 6042 str r2, [r0, #4] - m_fatSize = (nc + 2 + (BYTES_PER_SECTOR/4) - 1)/(BYTES_PER_SECTOR/4); - 8b2a: 6083 str r3, [r0, #8] - r = m_relativeSectors + 9 + 2*m_fatSize; - 8b2c: eb0e 0043 add.w r0, lr, r3, lsl #1 - if (m_dataStart >= r) { - 8b30: 4290 cmp r0, r2 - 8b32: f240 80bb bls.w 8cac - for (m_dataStart = 2*BU32; ; m_dataStart += BU32) { - 8b36: f502 5200 add.w r2, r2, #8192 ; 0x2000 - nc = (m_sectorCount - m_dataStart)/m_sectorsPerCluster; - 8b3a: 1ab1 subs r1, r6, r2 - 8b3c: fbb1 f1fc udiv r1, r1, ip - m_fatSize = (nc + 2 + (BYTES_PER_SECTOR/4) - 1)/(BYTES_PER_SECTOR/4); - 8b40: f101 0381 add.w r3, r1, #129 ; 0x81 - 8b44: 09db lsrs r3, r3, #7 - r = m_relativeSectors + 9 + 2*m_fatSize; - 8b46: eb0e 0043 add.w r0, lr, r3, lsl #1 - if (m_dataStart >= r) { - 8b4a: 4282 cmp r2, r0 - r = m_relativeSectors + 9 + 2*m_fatSize; - 8b4c: ea4f 0743 mov.w r7, r3, lsl #1 - if (m_dataStart >= r) { - 8b50: d3f1 bcc.n 8b36 - 8b52: 60a3 str r3, [r4, #8] - 8b54: 6062 str r2, [r4, #4] - if (nc < 65525) { - 8b56: f64f 73f4 movw r3, #65524 ; 0xfff4 - 8b5a: 4299 cmp r1, r3 - 8b5c: f240 809b bls.w 8c96 - m_totalSectors = nc*m_sectorsPerCluster + m_dataStart - m_relativeSectors; - 8b60: fb01 2c0c mla ip, r1, ip, r2 - m_reservedSectorCount = m_dataStart - m_relativeSectors - 2*m_fatSize; - 8b64: f5a2 5200 sub.w r2, r2, #8192 ; 0x2000 - 8b68: 1bd2 subs r2, r2, r7 - 8b6a: b292 uxth r2, r2 - m_fatStart = m_relativeSectors + m_reservedSectorCount; - 8b6c: f502 5300 add.w r3, r2, #8192 ; 0x2000 - m_reservedSectorCount = m_dataStart - m_relativeSectors - 2*m_fatSize; - 8b70: 8522 strh r2, [r4, #40] ; 0x28 - if ((m_relativeSectors + m_totalSectors) <= 16450560) { - 8b72: 4a4f ldr r2, [pc, #316] ; (8cb0 ) - m_fatStart = m_relativeSectors + m_reservedSectorCount; - 8b74: 60e3 str r3, [r4, #12] - m_totalSectors = nc*m_sectorsPerCluster + m_dataStart - m_relativeSectors; - 8b76: f5ac 5300 sub.w r3, ip, #8192 ; 0x2000 - m_partType = 0X0C; - 8b7a: 4594 cmp ip, r2 - 8b7c: bf94 ite ls - 8b7e: f04f 0c0b movls.w ip, #11 - 8b82: f04f 0c0c movhi.w ip, #12 - m_totalSectors = nc*m_sectorsPerCluster + m_dataStart - m_relativeSectors; - 8b86: 61a3 str r3, [r4, #24] - if ((m_relativeSectors + m_totalSectors) <= 16450560) { - 8b88: f884 c02a strb.w ip, [r4, #42] ; 0x2a - if (!writeMbr()) { - 8b8c: 4620 mov r0, r4 - 8b8e: f7ff feff bl 8990 - 8b92: b908 cbnz r0, 8b98 -} - 8b94: 2000 movs r0, #0 - 8b96: bdf8 pop {r3, r4, r5, r6, r7, pc} - initPbs(); - 8b98: 4620 mov r0, r4 - 8b9a: f7ff fecf bl 893c - setLe32(pbs->bpb.bpb32.sectorsPerFat32, m_fatSize); - 8b9e: 68a1 ldr r1, [r4, #8] - *reinterpret_cast(dst) = src; - 8ba0: 4a44 ldr r2, [pc, #272] ; (8cb4 ) - *reinterpret_cast(dst) = src; - 8ba2: 4b45 ldr r3, [pc, #276] ; (8cb8 ) - 8ba4: 6269 str r1, [r5, #36] ; 0x24 - 8ba6: 2002 movs r0, #2 - *reinterpret_cast(dst) = src; - 8ba8: 632a str r2, [r5, #48] ; 0x30 - pbs->bpb.bpb32.physicalDriveNumber = 0X80; - 8baa: 2180 movs r1, #128 ; 0x80 - pbs->bpb.bpb32.extSignature = EXTENDED_BOOT_SIGNATURE; - 8bac: 2229 movs r2, #41 ; 0x29 - *reinterpret_cast(dst) = src; - 8bae: 62e8 str r0, [r5, #44] ; 0x2c - pbs->bpb.bpb32.physicalDriveNumber = 0X80; - 8bb0: f885 1040 strb.w r1, [r5, #64] ; 0x40 - pbs->bpb.bpb32.extSignature = EXTENDED_BOOT_SIGNATURE; - 8bb4: f885 2042 strb.w r2, [r5, #66] ; 0x42 - pbs->bpb.bpb32.volumeLabel[i] = ' '; - 8bb8: 2120 movs r1, #32 - 8bba: 220b movs r2, #11 - 8bbc: f8c5 3043 str.w r3, [r5, #67] ; 0x43 - 8bc0: f105 0047 add.w r0, r5, #71 ; 0x47 - 8bc4: f008 fad6 bl 11174 - pbs->bpb.bpb32.volumeType[0] = 'F'; - 8bc8: 2246 movs r2, #70 ; 0x46 - pbs->bpb.bpb32.volumeType[1] = 'A'; - 8bca: 2341 movs r3, #65 ; 0x41 - pbs->bpb.bpb32.volumeType[0] = 'F'; - 8bcc: f885 2052 strb.w r2, [r5, #82] ; 0x52 - pbs->bpb.bpb32.volumeType[1] = 'A'; - 8bd0: f885 3053 strb.w r3, [r5, #83] ; 0x53 - pbs->bpb.bpb32.volumeType[2] = 'T'; - 8bd4: 2154 movs r1, #84 ; 0x54 - pbs->bpb.bpb32.volumeType[3] = '3'; - 8bd6: 2233 movs r2, #51 ; 0x33 - pbs->bpb.bpb32.volumeType[4] = '2'; - 8bd8: 2332 movs r3, #50 ; 0x32 - pbs->bpb.bpb32.volumeType[2] = 'T'; - 8bda: f885 1054 strb.w r1, [r5, #84] ; 0x54 - pbs->bpb.bpb32.volumeType[3] = '3'; - 8bde: f885 2055 strb.w r2, [r5, #85] ; 0x55 - pbs->bpb.bpb32.volumeType[4] = '2'; - 8be2: f885 3056 strb.w r3, [r5, #86] ; 0x56 - if (!m_dev->writeSector(m_relativeSectors, m_secBuf) || - 8be6: 69e0 ldr r0, [r4, #28] - 8be8: 6a62 ldr r2, [r4, #36] ; 0x24 - 8bea: 6803 ldr r3, [r0, #0] - 8bec: 6921 ldr r1, [r4, #16] - 8bee: 6a5b ldr r3, [r3, #36] ; 0x24 - 8bf0: 4798 blx r3 - 8bf2: 2800 cmp r0, #0 - 8bf4: d0ce beq.n 8b94 - !m_dev->writeSector(m_relativeSectors + 6, m_secBuf)) { - 8bf6: 69e0 ldr r0, [r4, #28] - 8bf8: 6921 ldr r1, [r4, #16] - 8bfa: 6803 ldr r3, [r0, #0] - 8bfc: 6a62 ldr r2, [r4, #36] ; 0x24 - 8bfe: 6a5b ldr r3, [r3, #36] ; 0x24 - 8c00: 3106 adds r1, #6 - 8c02: 4798 blx r3 - if (!m_dev->writeSector(m_relativeSectors, m_secBuf) || - 8c04: 2800 cmp r0, #0 - 8c06: d0c5 beq.n 8b94 - memset(m_secBuf, 0 , BYTES_PER_SECTOR); - 8c08: f44f 7200 mov.w r2, #512 ; 0x200 - 8c0c: 2100 movs r1, #0 - 8c0e: 6a60 ldr r0, [r4, #36] ; 0x24 - 8c10: f008 fab0 bl 11174 - if (!m_dev->writeSector(m_relativeSectors + 2, m_secBuf) || - 8c14: 69e0 ldr r0, [r4, #28] - 8c16: 4b29 ldr r3, [pc, #164] ; (8cbc ) - 8c18: f8c5 31fc str.w r3, [r5, #508] ; 0x1fc - 8c1c: 6921 ldr r1, [r4, #16] - 8c1e: 6803 ldr r3, [r0, #0] - 8c20: 6a62 ldr r2, [r4, #36] ; 0x24 - 8c22: 6a5b ldr r3, [r3, #36] ; 0x24 - 8c24: 3102 adds r1, #2 - 8c26: 4798 blx r3 - 8c28: 2800 cmp r0, #0 - 8c2a: d0b3 beq.n 8b94 - !m_dev->writeSector(m_relativeSectors + 8, m_secBuf)) { - 8c2c: 69e0 ldr r0, [r4, #28] - 8c2e: 6921 ldr r1, [r4, #16] - 8c30: 6803 ldr r3, [r0, #0] - 8c32: 6a62 ldr r2, [r4, #36] ; 0x24 - 8c34: 6a5b ldr r3, [r3, #36] ; 0x24 - 8c36: 3108 adds r1, #8 - 8c38: 4798 blx r3 - if (!m_dev->writeSector(m_relativeSectors + 2, m_secBuf) || - 8c3a: 2800 cmp r0, #0 - 8c3c: d0aa beq.n 8b94 - 8c3e: 4a20 ldr r2, [pc, #128] ; (8cc0 ) - if (!m_dev->writeSector(m_relativeSectors + 1, m_secBuf) || - 8c40: 69e0 ldr r0, [r4, #28] - 8c42: 602a str r2, [r5, #0] - 8c44: f102 52ff add.w r2, r2, #534773760 ; 0x1fe00000 - 8c48: f502 5200 add.w r2, r2, #8192 ; 0x2000 - 8c4c: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 8c50: 3220 adds r2, #32 - 8c52: f8c5 21e4 str.w r2, [r5, #484] ; 0x1e4 - 8c56: f8c5 31e8 str.w r3, [r5, #488] ; 0x1e8 - 8c5a: f8c5 31ec str.w r3, [r5, #492] ; 0x1ec - 8c5e: 6921 ldr r1, [r4, #16] - 8c60: 6803 ldr r3, [r0, #0] - 8c62: 6a62 ldr r2, [r4, #36] ; 0x24 - 8c64: 6a5b ldr r3, [r3, #36] ; 0x24 - 8c66: 3101 adds r1, #1 - 8c68: 4798 blx r3 - 8c6a: 2800 cmp r0, #0 - 8c6c: d092 beq.n 8b94 - !m_dev->writeSector(m_relativeSectors + 7, m_secBuf)) { - 8c6e: 69e0 ldr r0, [r4, #28] - 8c70: 6921 ldr r1, [r4, #16] - 8c72: 6803 ldr r3, [r0, #0] - 8c74: 6a62 ldr r2, [r4, #36] ; 0x24 - 8c76: 6a5b ldr r3, [r3, #36] ; 0x24 - 8c78: 3107 adds r1, #7 - 8c7a: 4798 blx r3 - if (!m_dev->writeSector(m_relativeSectors + 1, m_secBuf) || - 8c7c: 2800 cmp r0, #0 - 8c7e: d089 beq.n 8b94 - return initFatDir(32, 2*m_fatSize + m_sectorsPerCluster); - 8c80: 68a2 ldr r2, [r4, #8] - 8c82: f894 302b ldrb.w r3, [r4, #43] ; 0x2b - 8c86: 4620 mov r0, r4 - 8c88: eb03 0242 add.w r2, r3, r2, lsl #1 - 8c8c: 2120 movs r1, #32 -} - 8c8e: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - return initFatDir(32, 2*m_fatSize + m_sectorsPerCluster); - 8c92: f7ff bdc3 b.w 881c - writeMsg("Bad cluster count\r\n"); - 8c96: 6a20 ldr r0, [r4, #32] - 8c98: 2800 cmp r0, #0 - 8c9a: f43f af7b beq.w 8b94 - 8c9e: 6803 ldr r3, [r0, #0] - 8ca0: 4908 ldr r1, [pc, #32] ; (8cc4 ) - 8ca2: 685b ldr r3, [r3, #4] - 8ca4: 2213 movs r2, #19 - 8ca6: 4798 blx r3 -} - 8ca8: 2000 movs r0, #0 - 8caa: bdf8 pop {r3, r4, r5, r6, r7, pc} - 8cac: 005f lsls r7, r3, #1 - 8cae: e752 b.n 8b56 - 8cb0: 00fb0400 .word 0x00fb0400 - 8cb4: 00060001 .word 0x00060001 - 8cb8: 0012d687 .word 0x0012d687 - 8cbc: aa550000 .word 0xaa550000 - 8cc0: 41615252 .word 0x41615252 - 8cc4: 00018120 .word 0x00018120 - -00008cc8 : -bool FatFormatter::format(FsBlockDevice* dev, uint8_t* secBuf, print_t* pr) { - 8cc8: b538 push {r3, r4, r5, lr} - 8cca: 4604 mov r4, r0 - m_sectorCount = m_dev->sectorCount(); - 8ccc: 6808 ldr r0, [r1, #0] - 8cce: 69c5 ldr r5, [r0, #28] - m_pr = pr; - 8cd0: 6223 str r3, [r4, #32] - m_dev = dev; - 8cd2: 61e1 str r1, [r4, #28] - m_secBuf = secBuf; - 8cd4: 6262 str r2, [r4, #36] ; 0x24 - m_sectorCount = m_dev->sectorCount(); - 8cd6: 4608 mov r0, r1 - 8cd8: 47a8 blx r5 - m_capacityMB = (m_sectorCount + SECTORS_PER_MB - 1)/SECTORS_PER_MB; - 8cda: f200 73ff addw r3, r0, #2047 ; 0x7ff - 8cde: 0adb lsrs r3, r3, #11 - if (m_capacityMB <= 6) { - 8ce0: 2b06 cmp r3, #6 - m_sectorCount = m_dev->sectorCount(); - 8ce2: 6160 str r0, [r4, #20] - m_capacityMB = (m_sectorCount + SECTORS_PER_MB - 1)/SECTORS_PER_MB; - 8ce4: 6023 str r3, [r4, #0] - if (m_capacityMB <= 6) { - 8ce6: d924 bls.n 8d32 - } else if (m_capacityMB <= 16) { - 8ce8: 2b10 cmp r3, #16 - 8cea: d813 bhi.n 8d14 - 8cec: 2302 movs r3, #2 - rtn = m_sectorCount < 0X400000 ? makeFat16() : makeFat32(); - 8cee: f5b0 0f80 cmp.w r0, #4194304 ; 0x400000 - m_sectorsPerCluster = 2; - 8cf2: f884 302b strb.w r3, [r4, #43] ; 0x2b - rtn = m_sectorCount < 0X400000 ? makeFat16() : makeFat32(); - 8cf6: 4620 mov r0, r4 - 8cf8: d22e bcs.n 8d58 - 8cfa: f7ff fe77 bl 89ec - 8cfe: 4605 mov r5, r0 - writeMsg("Format Done\r\n"); - 8d00: 6a20 ldr r0, [r4, #32] - if (rtn) { - 8d02: b305 cbz r5, 8d46 - writeMsg("Format Done\r\n"); - 8d04: b120 cbz r0, 8d10 - 8d06: 6803 ldr r3, [r0, #0] - 8d08: 4919 ldr r1, [pc, #100] ; (8d70 ) - 8d0a: 685b ldr r3, [r3, #4] - 8d0c: 220d movs r2, #13 - 8d0e: 4798 blx r3 -} - 8d10: 4628 mov r0, r5 - 8d12: bd38 pop {r3, r4, r5, pc} - } else if (m_capacityMB <= 32) { - 8d14: 2b20 cmp r3, #32 - 8d16: d923 bls.n 8d60 - } else if (m_capacityMB <= 64) { - 8d18: 2b40 cmp r3, #64 ; 0x40 - 8d1a: d923 bls.n 8d64 - } else if (m_capacityMB <= 128) { - 8d1c: 2b80 cmp r3, #128 ; 0x80 - 8d1e: d923 bls.n 8d68 - } else if (m_capacityMB <= 1024) { - 8d20: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 8d24: d922 bls.n 8d6c - } else if (m_capacityMB <= 32768) { - 8d26: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 8d2a: bf8c ite hi - 8d2c: 2380 movhi r3, #128 ; 0x80 - 8d2e: 2340 movls r3, #64 ; 0x40 - 8d30: e7dd b.n 8cee - writeMsg("Card is too small.\r\n"); - 8d32: 6a20 ldr r0, [r4, #32] - 8d34: b120 cbz r0, 8d40 - 8d36: 6803 ldr r3, [r0, #0] - 8d38: 490e ldr r1, [pc, #56] ; (8d74 ) - 8d3a: 685b ldr r3, [r3, #4] - 8d3c: 2214 movs r2, #20 - 8d3e: 4798 blx r3 - return false; - 8d40: 2500 movs r5, #0 -} - 8d42: 4628 mov r0, r5 - 8d44: bd38 pop {r3, r4, r5, pc} - writeMsg("Format Failed\r\n"); - 8d46: 2800 cmp r0, #0 - 8d48: d0fa beq.n 8d40 - 8d4a: 6803 ldr r3, [r0, #0] - 8d4c: 490a ldr r1, [pc, #40] ; (8d78 ) - 8d4e: 685b ldr r3, [r3, #4] - 8d50: 220f movs r2, #15 - 8d52: 4798 blx r3 -} - 8d54: 4628 mov r0, r5 - 8d56: bd38 pop {r3, r4, r5, pc} - rtn = m_sectorCount < 0X400000 ? makeFat16() : makeFat32(); - 8d58: f7ff fed2 bl 8b00 - 8d5c: 4605 mov r5, r0 - 8d5e: e7cf b.n 8d00 - 8d60: 2304 movs r3, #4 - 8d62: e7c4 b.n 8cee - 8d64: 2308 movs r3, #8 - 8d66: e7c2 b.n 8cee - 8d68: 2310 movs r3, #16 - 8d6a: e7c0 b.n 8cee - 8d6c: 2320 movs r3, #32 - 8d6e: e7be b.n 8cee - 8d70: 0001814c .word 0x0001814c - 8d74: 00018134 .word 0x00018134 - 8d78: 0001815c .word 0x0001815c - -00008d7c : -#include "../common/DebugMacros.h" -#include "../common/FsUtf.h" -#include "FatLib.h" -//------------------------------------------------------------------------------ -uint16_t FatFile::getLfnChar(DirLfn_t* ldir, uint8_t i) { - if (i < 5) { - 8d7c: 2a04 cmp r2, #4 - 8d7e: d804 bhi.n 8d8a - return *reinterpret_cast(src); - 8d80: eb01 0142 add.w r1, r1, r2, lsl #1 - 8d84: f8b1 0001 ldrh.w r0, [r1, #1] - return getLe16(ldir->unicode1 + 2*i); - 8d88: 4770 bx lr - } else if (i < 11) { - 8d8a: 2a0a cmp r2, #10 - 8d8c: d803 bhi.n 8d96 - return getLe16(ldir->unicode2 + 2*i - 10); - 8d8e: eb01 0142 add.w r1, r1, r2, lsl #1 - 8d92: 8888 ldrh r0, [r1, #4] - 8d94: 4770 bx lr - } else if (i < 13) { - 8d96: 2a0c cmp r2, #12 - return getLe16(ldir->unicode3 + 2*i - 22); - 8d98: bf9a itte ls - 8d9a: eb01 0142 addls.w r1, r1, r2, lsl #1 - 8d9e: 88c8 ldrhls r0, [r1, #6] - } - DBG_HALT_IF(i >= 13); - return 0; - 8da0: 2000 movhi r0, #0 -} - 8da2: 4770 bx lr - -00008da4 : - fail: - *name = 0; - return 0; -} -//------------------------------------------------------------------------------ -size_t FatFile::getSFN(char* name, size_t size) { - 8da4: b5f8 push {r3, r4, r5, r6, r7, lr} - bool isOpen() const {return m_attributes;} - 8da6: 7804 ldrb r4, [r0, #0] - 8da8: 460d mov r5, r1 - char c; - uint8_t j = 0; - uint8_t lcBit = FAT_CASE_LC_BASE; - uint8_t* ptr; - DirFat_t* dir; - if (!isOpen()) { - 8daa: b17c cbz r4, 8dcc - DBG_FAIL_MACRO; - goto fail; - } - if (isRoot()) { - 8dac: f014 0460 ands.w r4, r4, #96 ; 0x60 - 8db0: 4616 mov r6, r2 - 8db2: d007 beq.n 8dc4 - if (size < 2) { - 8db4: 2a01 cmp r2, #1 - 8db6: d909 bls.n 8dcc - DBG_FAIL_MACRO; - goto fail; - } - name[0] = '/'; - 8db8: 222f movs r2, #47 ; 0x2f - name[1] = '\0'; - 8dba: 2300 movs r3, #0 - name[0] = '/'; - 8dbc: 700a strb r2, [r1, #0] - name[1] = '\0'; - 8dbe: 704b strb r3, [r1, #1] - return 1; - 8dc0: 2001 movs r0, #1 - return j; - - fail: - name[0] = '\0'; - return 0; -} - 8dc2: bdf8 pop {r3, r4, r5, r6, r7, pc} - dir = cacheDirEntry(FsCache::CACHE_FOR_READ); - 8dc4: 4621 mov r1, r4 - 8dc6: f7fe f9f9 bl 71bc - if (!dir) { - 8dca: b910 cbnz r0, 8dd2 - name[0] = '\0'; - 8dcc: 2000 movs r0, #0 - 8dce: 7028 strb r0, [r5, #0] -} - 8dd0: bdf8 pop {r3, r4, r5, r6, r7, pc} - ptr = dir->name; - 8dd2: 4603 mov r3, r0 - 8dd4: 46a4 mov ip, r4 - uint8_t lcBit = FAT_CASE_LC_BASE; - 8dd6: 2708 movs r7, #8 - 8dd8: e011 b.n 8dfe - if ('A' <= c && c <= 'Z' && (lcBit & dir->caseFlags)) { - 8dda: 7b02 ldrb r2, [r0, #12] - 8ddc: 4217 tst r7, r2 - 8dde: d003 beq.n 8de8 - c += 'a' - 'A'; - 8de0: f10e 0e20 add.w lr, lr, #32 - 8de4: fa5f fe8e uxtb.w lr, lr - if ((j + 1u) >= size) { - 8de8: 1c61 adds r1, r4, #1 - 8dea: 42b1 cmp r1, r6 - 8dec: d2ee bcs.n 8dcc - for (uint8_t i = 0; i < 12; i++) { - 8dee: f10c 0c01 add.w ip, ip, #1 - 8df2: f1bc 0f0c cmp.w ip, #12 - name[j++] = c; - 8df6: f805 e004 strb.w lr, [r5, r4] - 8dfa: b2cc uxtb r4, r1 - for (uint8_t i = 0; i < 12; i++) { - 8dfc: d010 beq.n 8e20 - if (i == 8) { - 8dfe: f1bc 0f08 cmp.w ip, #8 - 8e02: d011 beq.n 8e28 - c = *ptr++; - 8e04: f813 eb01 ldrb.w lr, [r3], #1 - if ('A' <= c && c <= 'Z' && (lcBit & dir->caseFlags)) { - 8e08: f1ae 0241 sub.w r2, lr, #65 ; 0x41 - 8e0c: 2a19 cmp r2, #25 - 8e0e: d9e4 bls.n 8dda - if (c == ' ') { - 8e10: f1be 0f20 cmp.w lr, #32 - 8e14: d1e8 bne.n 8de8 - for (uint8_t i = 0; i < 12; i++) { - 8e16: f10c 0c01 add.w ip, ip, #1 - 8e1a: f1bc 0f0c cmp.w ip, #12 - 8e1e: d1ee bne.n 8dfe - name[j] = '\0'; - 8e20: 2300 movs r3, #0 - 8e22: 552b strb r3, [r5, r4] - 8e24: 4620 mov r0, r4 -} - 8e26: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (*ptr == ' ') { - 8e28: 781a ldrb r2, [r3, #0] - 8e2a: 2a20 cmp r2, #32 - 8e2c: d0f8 beq.n 8e20 - lcBit = FAT_CASE_LC_EXT; - 8e2e: 2710 movs r7, #16 - c = '.'; - 8e30: f04f 0e2e mov.w lr, #46 ; 0x2e - 8e34: e7d8 b.n 8de8 - 8e36: bf00 nop - -00008e38 : -size_t FatFile::getName8(char* name, size_t size) { - 8e38: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8e3c: b08b sub sp, #44 ; 0x2c - if (!isOpen()) { - 8e3e: 7803 ldrb r3, [r0, #0] - FatFile() {} - 8e40: 2400 movs r4, #0 -size_t FatFile::getName8(char* name, size_t size) { - 8e42: 4688 mov r8, r1 - 8e44: 9401 str r4, [sp, #4] - if (!isOpen()) { - 8e46: 2b00 cmp r3, #0 - 8e48: d055 beq.n 8ef6 - if (!isLFN()) { - 8e4a: 78c3 ldrb r3, [r0, #3] - 8e4c: 4606 mov r6, r0 - 8e4e: 2b00 cmp r3, #0 - 8e50: d057 beq.n 8f02 - if (!dir.openCluster(this)) { - 8e52: 4601 mov r1, r0 - 8e54: a801 add r0, sp, #4 - 8e56: 4691 mov r9, r2 - 8e58: f7fe fb82 bl 7560 - 8e5c: 2800 cmp r0, #0 - 8e5e: d04a beq.n 8ef6 - for (uint8_t order = 1; order <= m_lfnOrd; order++) { - 8e60: 78f0 ldrb r0, [r6, #3] - 8e62: 2800 cmp r0, #0 - 8e64: d043 beq.n 8eee - ptr = FsUtf::cpToMb(cp, str, end - 1); - 8e66: f109 39ff add.w r9, r9, #4294967295 ; 0xffffffff - 8e6a: 44c1 add r9, r8 - char* str = name; - 8e6c: 46c3 mov fp, r8 - for (uint8_t order = 1; order <= m_lfnOrd; order++) { - 8e6e: f04f 0a01 mov.w sl, #1 - ldir = reinterpret_cast(dir.cacheDir(m_dirIndex - order)); - 8e72: 88b1 ldrh r1, [r6, #4] - 8e74: eba1 010a sub.w r1, r1, sl - return seekSet(32UL*index) ? readDirCache() : nullptr; - 8e78: b289 uxth r1, r1 - 8e7a: 0149 lsls r1, r1, #5 - 8e7c: a801 add r0, sp, #4 - 8e7e: f7fe fdc1 bl 7a04 - 8e82: b3c0 cbz r0, 8ef6 - 8e84: 2100 movs r1, #0 - 8e86: a801 add r0, sp, #4 - 8e88: f7fe fc96 bl 77b8 - if (!ldir) { - 8e8c: b398 cbz r0, 8ef6 - if (ldir->attributes != FAT_ATTRIB_LONG_NAME || - 8e8e: 7ac2 ldrb r2, [r0, #11] - 8e90: 2a0f cmp r2, #15 - 8e92: d130 bne.n 8ef6 - 8e94: 7802 ldrb r2, [r0, #0] - 8e96: fa5f f18a uxtb.w r1, sl - 8e9a: f002 021f and.w r2, r2, #31 - 8e9e: 428a cmp r2, r1 - 8ea0: d129 bne.n 8ef6 - 8ea2: 1c47 adds r7, r0, #1 - 8ea4: 2500 movs r5, #0 - if (i < 5) { - 8ea6: 2d04 cmp r5, #4 - 8ea8: b2ea uxtb r2, r5 - 8eaa: d83e bhi.n 8f2a - 8eac: 8838 ldrh r0, [r7, #0] - if (hs) { - 8eae: bb6c cbnz r4, 8f0c - /** Check for UTF-16 surrogate. - * \param[in] c UTF-16 unit. - * \return true if c is a surrogate else false. - */ - inline bool isSurrogate(uint16_t c) { - return 0XD800 <= c && c <= 0XDFFF; - 8eb0: f500 5220 add.w r2, r0, #10240 ; 0x2800 - 8eb4: b292 uxth r2, r2 - } else if (!FsUtf::isSurrogate(c)) { - 8eb6: f5b2 6f00 cmp.w r2, #2048 ; 0x800 - 8eba: d33d bcc.n 8f38 - if (c == 0) { - 8ebc: b1a0 cbz r0, 8ee8 - ptr = FsUtf::cpToMb(cp, str, end - 1); - 8ebe: 4659 mov r1, fp - 8ec0: 464a mov r2, r9 - 8ec2: f001 fc11 bl a6e8 - if (!ptr) { - 8ec6: 4683 mov fp, r0 - 8ec8: b1a8 cbz r0, 8ef6 - 8eca: 2400 movs r4, #0 - for (uint8_t i = 0; i < 13; i++) { - 8ecc: 3501 adds r5, #1 - 8ece: 2d0d cmp r5, #13 - 8ed0: f107 0702 add.w r7, r7, #2 - 8ed4: d1e7 bne.n 8ea6 - for (uint8_t order = 1; order <= m_lfnOrd; order++) { - 8ed6: f10a 0a01 add.w sl, sl, #1 - 8eda: 78f1 ldrb r1, [r6, #3] - 8edc: fa5f f28a uxtb.w r2, sl - 8ee0: 4291 cmp r1, r2 - 8ee2: fa1f fa8a uxth.w sl, sl - 8ee6: d2c4 bcs.n 8e72 - return str - name; - 8ee8: ebab 0008 sub.w r0, fp, r8 - 8eec: 46d8 mov r8, fp - *str = '\0'; - 8eee: 2300 movs r3, #0 - 8ef0: f888 3000 strb.w r3, [r8] - return str - name; - 8ef4: e002 b.n 8efc - *name = 0; - 8ef6: 2000 movs r0, #0 - 8ef8: f888 0000 strb.w r0, [r8] -} - 8efc: b00b add sp, #44 ; 0x2c - 8efe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - return getSFN(name, size); - 8f02: f7ff ff4f bl 8da4 -} - 8f06: b00b add sp, #44 ; 0x2c - 8f08: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - /** Check for UTF-16 low surrogate. - * \param[in] c UTF-16 unit.. - * \return true if c is a low surrogate else false. - */ - inline bool isLowSurrogate(uint16_t c) { - return 0XDC00 <= c && c <= 0XDFFF; - 8f0c: f500 5210 add.w r2, r0, #9216 ; 0x2400 - if (!FsUtf::isLowSurrogate(c)) { - 8f10: b292 uxth r2, r2 - 8f12: f5b2 6f80 cmp.w r2, #1024 ; 0x400 - 8f16: d2ee bcs.n 8ef6 - * \param[in] hs high surrogate. - * \param[in] ls low surrogate. - * \return code point. - */ - inline uint32_t u16ToCp(uint16_t hs, uint16_t ls) { - return 0X10000 + (((hs & 0X3FF) << 10) | (ls & 0X3FF)); - 8f18: 4b0a ldr r3, [pc, #40] ; (8f44 ) - 8f1a: f3c0 0009 ubfx r0, r0, #0, #10 - 8f1e: ea03 2484 and.w r4, r3, r4, lsl #10 - 8f22: 4320 orrs r0, r4 - 8f24: f500 3080 add.w r0, r0, #65536 ; 0x10000 - hs = 0; - 8f28: e7c9 b.n 8ebe - } else if (i < 11) { - 8f2a: 2a0a cmp r2, #10 - 8f2c: bf94 ite ls - 8f2e: f8b7 0003 ldrhls.w r0, [r7, #3] - 8f32: f8b7 0005 ldrhhi.w r0, [r7, #5] - return getLe16(ldir->unicode3 + 2*i - 22); - 8f36: e7ba b.n 8eae - } else if (FsUtf::isHighSurrogate(c)) { - 8f38: f5b2 6f80 cmp.w r2, #1024 ; 0x400 - 8f3c: d2db bcs.n 8ef6 - 8f3e: 4604 mov r4, r0 - 8f40: e7c4 b.n 8ecc - 8f42: bf00 nop - 8f44: 000ffc00 .word 0x000ffc00 - -00008f48 : - return getName8(name, size); - 8f48: f7ff bf76 b.w 8e38 - -00008f4c : - virtual bool readSectorsCallback(uint32_t sector, uint8_t* dst, size_t ns, - 8f4c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 8f50: e9dd 9808 ldrd r9, r8, [sp, #32] - for (size_t i = 0; i < ns; i++) { - 8f54: b1bb cbz r3, 8f86 - 8f56: 4605 mov r5, r0 - 8f58: 460c mov r4, r1 - 8f5a: 4616 mov r6, r2 - 8f5c: 185f adds r7, r3, r1 - 8f5e: e002 b.n 8f66 - callback(sector + i, dst, context); - 8f60: 47c8 blx r9 - for (size_t i = 0; i < ns; i++) { - 8f62: 42bc cmp r4, r7 - 8f64: d00f beq.n 8f86 - if (!readSector(sector + i, dst)) return false; - 8f66: 682b ldr r3, [r5, #0] - 8f68: 4621 mov r1, r4 - 8f6a: 691b ldr r3, [r3, #16] - 8f6c: 4632 mov r2, r6 - 8f6e: 4628 mov r0, r5 - 8f70: 4798 blx r3 - 8f72: 4603 mov r3, r0 - callback(sector + i, dst, context); - 8f74: 4642 mov r2, r8 - 8f76: 4620 mov r0, r4 - 8f78: 4631 mov r1, r6 - for (size_t i = 0; i < ns; i++) { - 8f7a: 3401 adds r4, #1 - if (!readSector(sector + i, dst)) return false; - 8f7c: 2b00 cmp r3, #0 - 8f7e: d1ef bne.n 8f60 - } - 8f80: 4618 mov r0, r3 - 8f82: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - return true; - 8f86: 2301 movs r3, #1 - } - 8f88: 4618 mov r0, r3 - 8f8a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 8f8e: bf00 nop - -00008f90 : - uint32_t clusters_to_do; - uint32_t free_count; -}; - -//------------------------------------------------------------------------------ -void FatPartition::freeClusterCount_cb_fat16(uint32_t sector, uint8_t *buf, void *context) { - 8f90: b410 push {r4} - struct FreeClusterCountStruct *state = (struct FreeClusterCountStruct *)context; - uint16_t *p = (uint16_t *)buf; - unsigned int n = state->clusters_to_do; - 8f92: 6814 ldr r4, [r2, #0] - if (n > 256) n = 256; - 8f94: f5b4 7f80 cmp.w r4, #256 ; 0x100 - 8f98: 46a4 mov ip, r4 - 8f9a: bf28 it cs - 8f9c: f44f 7c80 movcs.w ip, #256 ; 0x100 - uint16_t *e = p + n; - 8fa0: eb01 004c add.w r0, r1, ip, lsl #1 - while (p < e) { - 8fa4: 4281 cmp r1, r0 - 8fa6: d207 bcs.n 8fb8 - if (*p++ == 0) state->free_count++; - 8fa8: f831 3b02 ldrh.w r3, [r1], #2 - 8fac: b913 cbnz r3, 8fb4 - 8fae: 6853 ldr r3, [r2, #4] - 8fb0: 3301 adds r3, #1 - 8fb2: 6053 str r3, [r2, #4] - while (p < e) { - 8fb4: 4288 cmp r0, r1 - 8fb6: d8f7 bhi.n 8fa8 - } - state->clusters_to_do -= n; - 8fb8: eba4 040c sub.w r4, r4, ip - 8fbc: 6014 str r4, [r2, #0] -} - 8fbe: bc10 pop {r4} - 8fc0: 4770 bx lr - 8fc2: bf00 nop - -00008fc4 : - -//------------------------------------------------------------------------------ -void FatPartition::freeClusterCount_cb_fat32(uint32_t sector, uint8_t *buf, void *context) { - 8fc4: b410 push {r4} - struct FreeClusterCountStruct *state = (struct FreeClusterCountStruct *)context; - uint32_t *p = (uint32_t *)buf; - unsigned int n = state->clusters_to_do; - 8fc6: 6814 ldr r4, [r2, #0] - if (n > 128) n = 128; - 8fc8: 2c80 cmp r4, #128 ; 0x80 - 8fca: 46a4 mov ip, r4 - 8fcc: bf28 it cs - 8fce: f04f 0c80 movcs.w ip, #128 ; 0x80 - uint32_t *e = p + n; - 8fd2: eb01 008c add.w r0, r1, ip, lsl #2 - while (p < e) { - 8fd6: 4281 cmp r1, r0 - 8fd8: d207 bcs.n 8fea - if (*p++ == 0) state->free_count++; - 8fda: f851 3b04 ldr.w r3, [r1], #4 - 8fde: b913 cbnz r3, 8fe6 - 8fe0: 6853 ldr r3, [r2, #4] - 8fe2: 3301 adds r3, #1 - 8fe4: 6053 str r3, [r2, #4] - while (p < e) { - 8fe6: 4288 cmp r0, r1 - 8fe8: d8f7 bhi.n 8fda - } - state->clusters_to_do -= n; - 8fea: eba4 040c sub.w r4, r4, ip - 8fee: 6014 str r4, [r2, #0] -} - 8ff0: bc10 pop {r4} - 8ff2: 4770 bx lr - -00008ff4 : -int8_t FatPartition::fatGet(uint32_t cluster, uint32_t* value) { - 8ff4: b570 push {r4, r5, r6, lr} - return m_fatType; - 8ff6: 79c3 ldrb r3, [r0, #7] - if (fatType() == 32) { - 8ff8: 2b20 cmp r3, #32 -int8_t FatPartition::fatGet(uint32_t cluster, uint32_t* value) { - 8ffa: 4604 mov r4, r0 - 8ffc: 460d mov r5, r1 - 8ffe: 4616 mov r6, r2 - if (fatType() == 32) { - 9000: d01f beq.n 9042 - } else if (fatType() == 16) { - 9002: 2b10 cmp r3, #16 - 9004: d11a bne.n 903c - if (m_fatCount == 2) options |= FsCache::CACHE_STATUS_MIRROR_FAT; - 9006: 7a02 ldrb r2, [r0, #8] - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 1) ); - 9008: 6983 ldr r3, [r0, #24] - 900a: f1a2 0202 sub.w r2, r2, #2 - 900e: fab2 f282 clz r2, r2 - 9012: f3c1 2107 ubfx r1, r1, #8, #8 - 9016: 0952 lsrs r2, r2, #5 - return m_fatCache.prepare(sector, options); - 9018: 0052 lsls r2, r2, #1 - 901a: 4419 add r1, r3 - 901c: f500 700e add.w r0, r0, #568 ; 0x238 - 9020: f001 faae bl a580 - if (!pc) { - 9024: b150 cbz r0, 903c - uint16_t offset = (cluster << 1) & m_sectorMask; - 9026: 006d lsls r5, r5, #1 - next = getLe16(pc + offset); - 9028: f405 75ff and.w r5, r5, #510 ; 0x1fe - 902c: 5b43 ldrh r3, [r0, r5] - if (isEOC(next)) { - 902e: 69e2 ldr r2, [r4, #28] - 9030: 429a cmp r2, r3 - *value = next; - 9032: bf26 itte cs - 9034: 6033 strcs r3, [r6, #0] - return 1; - 9036: 2001 movcs r0, #1 - return 0; - 9038: 2000 movcc r0, #0 -} - 903a: bd70 pop {r4, r5, r6, pc} - return -1; - 903c: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - 9040: bd70 pop {r4, r5, r6, pc} - if (m_fatCount == 2) options |= FsCache::CACHE_STATUS_MIRROR_FAT; - 9042: 7a02 ldrb r2, [r0, #8] - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 9044: 6981 ldr r1, [r0, #24] - 9046: f1a2 0202 sub.w r2, r2, #2 - 904a: fab2 f282 clz r2, r2 - 904e: 0952 lsrs r2, r2, #5 - return m_fatCache.prepare(sector, options); - 9050: 0052 lsls r2, r2, #1 - 9052: eb01 11d5 add.w r1, r1, r5, lsr #7 - 9056: f500 700e add.w r0, r0, #568 ; 0x238 - 905a: f001 fa91 bl a580 - if (!pc) { - 905e: 2800 cmp r0, #0 - 9060: d0ec beq.n 903c - uint16_t offset = (cluster << 2) & m_sectorMask; - 9062: 00ad lsls r5, r5, #2 - next = getLe32(pc + offset); - 9064: f405 75fe and.w r5, r5, #508 ; 0x1fc - return *reinterpret_cast(src); - 9068: 5943 ldr r3, [r0, r5] - 906a: e7e0 b.n 902e - -0000906c : -bool FatPartition::fatPut(uint32_t cluster, uint32_t value) { - 906c: b538 push {r3, r4, r5, lr} - return m_fatType; - 906e: 79c3 ldrb r3, [r0, #7] - if (fatType() == 32) { - 9070: 2b20 cmp r3, #32 -bool FatPartition::fatPut(uint32_t cluster, uint32_t value) { - 9072: 460c mov r4, r1 - 9074: 4615 mov r5, r2 - if (fatType() == 32) { - 9076: d018 beq.n 90aa - if (fatType() == 16) { - 9078: 2b10 cmp r3, #16 - 907a: d114 bne.n 90a6 - if (m_fatCount == 2) options |= FsCache::CACHE_STATUS_MIRROR_FAT; - 907c: 7a02 ldrb r2, [r0, #8] - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 1) ); - 907e: 6983 ldr r3, [r0, #24] - 9080: 2a02 cmp r2, #2 - 9082: f3c1 2107 ubfx r1, r1, #8, #8 - return m_fatCache.prepare(sector, options); - 9086: 4419 add r1, r3 - 9088: f500 700e add.w r0, r0, #568 ; 0x238 - 908c: bf14 ite ne - 908e: 2201 movne r2, #1 - 9090: 2203 moveq r2, #3 - 9092: f001 fa75 bl a580 - if (!pc) { - 9096: 4603 mov r3, r0 - 9098: b128 cbz r0, 90a6 - uint16_t offset = (cluster << 1) & m_sectorMask; - 909a: 0064 lsls r4, r4, #1 - setLe16(pc + offset, value); - 909c: f404 74ff and.w r4, r4, #510 ; 0x1fe - return true; - 90a0: 2001 movs r0, #1 - setLe16(pc + offset, value); - 90a2: 531d strh r5, [r3, r4] -} - 90a4: bd38 pop {r3, r4, r5, pc} - return false; - 90a6: 2000 movs r0, #0 -} - 90a8: bd38 pop {r3, r4, r5, pc} - if (m_fatCount == 2) options |= FsCache::CACHE_STATUS_MIRROR_FAT; - 90aa: 7a03 ldrb r3, [r0, #8] - sector = m_fatStartSector + (cluster >> (m_bytesPerSectorShift - 2)); - 90ac: 6981 ldr r1, [r0, #24] - 90ae: 2b02 cmp r3, #2 - return m_fatCache.prepare(sector, options); - 90b0: bf14 ite ne - 90b2: 2201 movne r2, #1 - 90b4: 2203 moveq r2, #3 - 90b6: eb01 11d4 add.w r1, r1, r4, lsr #7 - 90ba: f500 700e add.w r0, r0, #568 ; 0x238 - 90be: f001 fa5f bl a580 - if (!pc) { - 90c2: 4603 mov r3, r0 - 90c4: 2800 cmp r0, #0 - 90c6: d0ee beq.n 90a6 - uint16_t offset = (cluster << 2) & m_sectorMask; - 90c8: 00a4 lsls r4, r4, #2 - setLe32(pc + offset, value); - 90ca: f404 74fe and.w r4, r4, #508 ; 0x1fc - return true; - 90ce: 2001 movs r0, #1 - *reinterpret_cast(dst) = src; - 90d0: 511d str r5, [r3, r4] -} - 90d2: bd38 pop {r3, r4, r5, pc} - -000090d4 : -bool FatPartition::allocateCluster(uint32_t current, uint32_t* next) { - 90d4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - if (m_allocSearchStart < current) { - 90d8: 68c4 ldr r4, [r0, #12] - 90da: 428c cmp r4, r1 -bool FatPartition::allocateCluster(uint32_t current, uint32_t* next) { - 90dc: b082 sub sp, #8 - 90de: 4605 mov r5, r0 - 90e0: 460e mov r6, r1 - 90e2: 4690 mov r8, r2 - setStart = true; - 90e4: bf2e itee cs - 90e6: 2701 movcs r7, #1 - 90e8: 460c movcc r4, r1 - setStart = false; - 90ea: 2700 movcc r7, #0 - if (find > m_lastCluster) { - 90ec: 69eb ldr r3, [r5, #28] - find++; - 90ee: 3401 adds r4, #1 - if (find > m_lastCluster) { - 90f0: 42a3 cmp r3, r4 - 90f2: aa01 add r2, sp, #4 - 90f4: 4628 mov r0, r5 - 90f6: d205 bcs.n 9104 - if (setStart) { - 90f8: bb9f cbnz r7, 9162 - find = m_allocSearchStart; - 90fa: 68ec ldr r4, [r5, #12] - setStart = true; - 90fc: 2701 movs r7, #1 - find++; - 90fe: 443c add r4, r7 - if (find > m_lastCluster) { - 9100: 42a3 cmp r3, r4 - 9102: d32e bcc.n 9162 - if (find == current) { - 9104: 42a6 cmp r6, r4 - 9106: 4621 mov r1, r4 - 9108: d02b beq.n 9162 - if (cluster < 2 || cluster > m_lastCluster) { - 910a: 2c01 cmp r4, #1 - 910c: d929 bls.n 9162 - 910e: f7ff ff71 bl 8ff4 - if (fg < 0) { - 9112: 2800 cmp r0, #0 - 9114: db25 blt.n 9162 - if (fg && f == 0) { - 9116: d0e9 beq.n 90ec - 9118: 9b01 ldr r3, [sp, #4] - 911a: 2b00 cmp r3, #0 - 911c: d1e6 bne.n 90ec - if (setStart) { - 911e: b107 cbz r7, 9122 - m_allocSearchStart = find; - 9120: 60ec str r4, [r5, #12] - if (cluster < 2 || cluster > m_lastCluster) { - 9122: 69eb ldr r3, [r5, #28] - 9124: 42a3 cmp r3, r4 - 9126: d31c bcc.n 9162 - 9128: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 - 912c: 4621 mov r1, r4 - 912e: 4628 mov r0, r5 - 9130: f7ff ff9c bl 906c - if (!fatPutEOC(find)) { - 9134: 4607 mov r7, r0 - 9136: b1a0 cbz r0, 9162 - if (current) { - 9138: b93e cbnz r6, 914a - if (m_freeClusterCount >= 0) { - 913a: 6a6b ldr r3, [r5, #36] ; 0x24 - 913c: 2b00 cmp r3, #0 - 913e: db01 blt.n 9144 - m_freeClusterCount += change; - 9140: 3b01 subs r3, #1 - 9142: 626b str r3, [r5, #36] ; 0x24 - *next = find; - 9144: f8c8 4000 str.w r4, [r8] - return true; - 9148: e00c b.n 9164 - if (cluster < 2 || cluster > m_lastCluster) { - 914a: 2e01 cmp r6, #1 - 914c: d009 beq.n 9162 - 914e: 69eb ldr r3, [r5, #28] - 9150: 429e cmp r6, r3 - 9152: d806 bhi.n 9162 - 9154: 4631 mov r1, r6 - 9156: 4622 mov r2, r4 - 9158: 4628 mov r0, r5 - 915a: f7ff ff87 bl 906c - if (!fatPut(current, find)) { - 915e: 2800 cmp r0, #0 - 9160: d1eb bne.n 913a - return false; - 9162: 2700 movs r7, #0 -} - 9164: 4638 mov r0, r7 - 9166: b002 add sp, #8 - 9168: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -0000916c : - if (cluster < 2 || cluster > m_lastCluster) { - 916c: 2901 cmp r1, #1 - 916e: d90a bls.n 9186 -int8_t FatPartition::fatGet(uint32_t cluster, uint32_t* value) { - 9170: b410 push {r4} - if (cluster < 2 || cluster > m_lastCluster) { - 9172: 69c4 ldr r4, [r0, #28] - 9174: 428c cmp r4, r1 - 9176: d302 bcc.n 917e -} - 9178: bc10 pop {r4} - 917a: f7ff bf3b b.w 8ff4 - 917e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 9182: bc10 pop {r4} - 9184: 4770 bx lr - 9186: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 918a: 4770 bx lr - -0000918c : - if (cluster < 2 || cluster > m_lastCluster) { - 918c: 2901 cmp r1, #1 - 918e: d909 bls.n 91a4 -bool FatPartition::fatPut(uint32_t cluster, uint32_t value) { - 9190: b410 push {r4} - if (cluster < 2 || cluster > m_lastCluster) { - 9192: 69c4 ldr r4, [r0, #28] - 9194: 428c cmp r4, r1 - 9196: d302 bcc.n 919e -} - 9198: bc10 pop {r4} - 919a: f7ff bf67 b.w 906c - 919e: 2000 movs r0, #0 - 91a0: bc10 pop {r4} - 91a2: 4770 bx lr - 91a4: 2000 movs r0, #0 - 91a6: 4770 bx lr - -000091a8 : -bool FatPartition::freeChain(uint32_t cluster) { - 91a8: b570 push {r4, r5, r6, lr} - 91aa: 4605 mov r5, r0 - 91ac: b082 sub sp, #8 - 91ae: 460c mov r4, r1 - 91b0: e01d b.n 91ee - if (cluster < 2 || cluster > m_lastCluster) { - 91b2: 69eb ldr r3, [r5, #28] - 91b4: 429c cmp r4, r3 - 91b6: d81f bhi.n 91f8 - 91b8: f7ff ff1c bl 8ff4 - if (cluster < 2 || cluster > m_lastCluster) { - 91bc: 4606 mov r6, r0 - if (fg < 0) { - 91be: 2e00 cmp r6, #0 - 91c0: 4621 mov r1, r4 - 91c2: f04f 0200 mov.w r2, #0 - 91c6: 4628 mov r0, r5 - 91c8: db16 blt.n 91f8 - if (cluster < 2 || cluster > m_lastCluster) { - 91ca: 69eb ldr r3, [r5, #28] - 91cc: 429c cmp r4, r3 - 91ce: d813 bhi.n 91f8 - 91d0: f7ff ff4c bl 906c - if (!fatPut(cluster, 0)) { - 91d4: b180 cbz r0, 91f8 - if (m_freeClusterCount >= 0) { - 91d6: 6a6b ldr r3, [r5, #36] ; 0x24 - 91d8: 2b00 cmp r3, #0 - m_freeClusterCount += change; - 91da: bfa4 itt ge - 91dc: 3301 addge r3, #1 - 91de: 626b strge r3, [r5, #36] ; 0x24 - if (cluster < m_allocSearchStart) { - 91e0: 68eb ldr r3, [r5, #12] - m_allocSearchStart = cluster - 1; - 91e2: 1e62 subs r2, r4, #1 - if (cluster < m_allocSearchStart) { - 91e4: 42a3 cmp r3, r4 - m_allocSearchStart = cluster - 1; - 91e6: bf88 it hi - 91e8: 60ea strhi r2, [r5, #12] - cluster = next; - 91ea: 9c01 ldr r4, [sp, #4] - } while (fg); - 91ec: b12e cbz r6, 91fa - if (cluster < 2 || cluster > m_lastCluster) { - 91ee: 2c01 cmp r4, #1 - 91f0: 4621 mov r1, r4 - 91f2: aa01 add r2, sp, #4 - 91f4: 4628 mov r0, r5 - 91f6: d8dc bhi.n 91b2 - return false; - 91f8: 2000 movs r0, #0 -} - 91fa: b002 add sp, #8 - 91fc: bd70 pop {r4, r5, r6, pc} - 91fe: bf00 nop - -00009200 : - -//------------------------------------------------------------------------------ -int32_t FatPartition::freeClusterCount() { - 9200: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 9204: 4607 mov r7, r0 -#if MAINTAIN_FREE_CLUSTER_COUNT - if (m_freeClusterCount >= 0) { - 9206: 6a40 ldr r0, [r0, #36] ; 0x24 - 9208: 2800 cmp r0, #0 -int32_t FatPartition::freeClusterCount() { - 920a: b084 sub sp, #16 - if (m_freeClusterCount >= 0) { - 920c: db02 blt.n 9214 - if (!m_blockDev->readSectorsCallback(m_fatStartSector, buf, num_sectors, freeClusterCount_cb_fat16, &state)) return -1; - } - - setFreeClusterCount(state.free_count); - return state.free_count; -} - 920e: b004 add sp, #16 - 9210: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - state.clusters_to_do = m_lastCluster + 1; - 9214: 69fb ldr r3, [r7, #28] - return m_status & CACHE_STATUS_DIRTY; - 9216: f897 2238 ldrb.w r2, [r7, #568] ; 0x238 - num_sectors = m_sectorsPerFat; - 921a: 693c ldr r4, [r7, #16] - state.clusters_to_do = m_lastCluster + 1; - 921c: 3301 adds r3, #1 - state.free_count = 0; - 921e: 2100 movs r1, #0 - state.clusters_to_do = m_lastCluster + 1; - 9220: e9cd 3102 strd r3, r1, [sp, #8] - if (isDirty() && !sync()) { - 9224: 07d3 lsls r3, r2, #31 - 9226: f100 8093 bmi.w 9350 - if (fatType() == FAT_TYPE_FAT32) { - 922a: 79fb ldrb r3, [r7, #7] - m_status = 0; - 922c: 2100 movs r1, #0 - m_sector = 0XFFFFFFFF; - 922e: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 9232: 2b20 cmp r3, #32 - m_status = 0; - 9234: f887 1238 strb.w r1, [r7, #568] ; 0x238 - m_sector = 0XFFFFFFFF; - 9238: f8c7 2244 str.w r2, [r7, #580] ; 0x244 - return m_buffer; - 923c: f507 7612 add.w r6, r7, #584 ; 0x248 - 9240: d04f beq.n 92e2 - if (!m_blockDev->readSectorsCallback(m_fatStartSector, buf, num_sectors, freeClusterCount_cb_fat16, &state)) return -1; - 9242: f8d7 8000 ldr.w r8, [r7] - 9246: 4b49 ldr r3, [pc, #292] ; (936c ) - 9248: f8d8 2000 ldr.w r2, [r8] - 924c: f8d7 a018 ldr.w sl, [r7, #24] - 9250: 6995 ldr r5, [r2, #24] - 9252: 429d cmp r5, r3 - 9254: d135 bne.n 92c2 - for (size_t i = 0; i < ns; i++) { - 9256: 2c00 cmp r4, #0 - 9258: d03e beq.n 92d8 - if (!readSector(sector + i, dst)) return false; - 925a: 6913 ldr r3, [r2, #16] - 925c: 4651 mov r1, sl - 925e: 4632 mov r2, r6 - 9260: 4640 mov r0, r8 - 9262: eb0a 0904 add.w r9, sl, r4 - 9266: 4798 blx r3 - 9268: b330 cbz r0, 92b8 - unsigned int n = state->clusters_to_do; - 926a: 9902 ldr r1, [sp, #8] - if (n > 256) n = 256; - 926c: f5b1 7f80 cmp.w r1, #256 ; 0x100 - 9270: 468e mov lr, r1 - 9272: bf28 it cs - 9274: f44f 7e80 movcs.w lr, #256 ; 0x100 - uint16_t *e = p + n; - 9278: eb06 0c4e add.w ip, r6, lr, lsl #1 - while (p < e) { - 927c: 45b4 cmp ip, r6 - 927e: d90b bls.n 9298 - 9280: 9d03 ldr r5, [sp, #12] - 9282: 4633 mov r3, r6 - 9284: 2200 movs r2, #0 - if (*p++ == 0) state->free_count++; - 9286: f833 4b02 ldrh.w r4, [r3], #2 - 928a: b90c cbnz r4, 9290 - 928c: 3501 adds r5, #1 - 928e: 4602 mov r2, r0 - while (p < e) { - 9290: 459c cmp ip, r3 - 9292: d8f8 bhi.n 9286 - 9294: b102 cbz r2, 9298 - 9296: 9503 str r5, [sp, #12] - for (size_t i = 0; i < ns; i++) { - 9298: f10a 0a01 add.w sl, sl, #1 - state->clusters_to_do -= n; - 929c: eba1 010e sub.w r1, r1, lr - 92a0: 45d1 cmp r9, sl - 92a2: 9102 str r1, [sp, #8] - 92a4: d018 beq.n 92d8 - if (!readSector(sector + i, dst)) return false; - 92a6: f8d8 2000 ldr.w r2, [r8] - 92aa: 4651 mov r1, sl - 92ac: 6913 ldr r3, [r2, #16] - 92ae: 4640 mov r0, r8 - 92b0: 4632 mov r2, r6 - 92b2: 4798 blx r3 - 92b4: 2800 cmp r0, #0 - 92b6: d1d8 bne.n 926a - if (buf == nullptr) return -1; - 92b8: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - 92bc: b004 add sp, #16 - 92be: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - if (!m_blockDev->readSectorsCallback(m_fatStartSector, buf, num_sectors, freeClusterCount_cb_fat16, &state)) return -1; - 92c2: 4623 mov r3, r4 - 92c4: 4c2a ldr r4, [pc, #168] ; (9370 ) - 92c6: 4632 mov r2, r6 - 92c8: 4651 mov r1, sl - 92ca: 4640 mov r0, r8 - 92cc: 9400 str r4, [sp, #0] - 92ce: ac02 add r4, sp, #8 - 92d0: 9401 str r4, [sp, #4] - 92d2: 47a8 blx r5 - 92d4: 2800 cmp r0, #0 - 92d6: d0ef beq.n 92b8 - setFreeClusterCount(state.free_count); - 92d8: 9803 ldr r0, [sp, #12] - m_freeClusterCount = value; - 92da: 6278 str r0, [r7, #36] ; 0x24 -} - 92dc: b004 add sp, #16 - 92de: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - if (!m_blockDev->readSectorsCallback(m_fatStartSector, buf, num_sectors, freeClusterCount_cb_fat32, &state)) return -1; - 92e2: f8d7 a000 ldr.w sl, [r7] - 92e6: 4b21 ldr r3, [pc, #132] ; (936c ) - 92e8: f8da 2000 ldr.w r2, [sl] - 92ec: f8d7 9018 ldr.w r9, [r7, #24] - 92f0: 6995 ldr r5, [r2, #24] - 92f2: 429d cmp r5, r3 - 92f4: d134 bne.n 9360 - for (size_t i = 0; i < ns; i++) { - 92f6: 2c00 cmp r4, #0 - 92f8: d0ee beq.n 92d8 - 92fa: eb09 0804 add.w r8, r9, r4 - if (!readSector(sector + i, dst)) return false; - 92fe: 6913 ldr r3, [r2, #16] - 9300: 4649 mov r1, r9 - 9302: 4632 mov r2, r6 - 9304: 4650 mov r0, sl - 9306: 4798 blx r3 - 9308: 2800 cmp r0, #0 - 930a: d0d5 beq.n 92b8 - unsigned int n = state->clusters_to_do; - 930c: f8dd c008 ldr.w ip, [sp, #8] - if (n > 128) n = 128; - 9310: f1bc 0f80 cmp.w ip, #128 ; 0x80 - 9314: 46e6 mov lr, ip - 9316: bf28 it cs - 9318: f04f 0e80 movcs.w lr, #128 ; 0x80 - uint32_t *e = p + n; - 931c: eb06 028e add.w r2, r6, lr, lsl #2 - while (p < e) { - 9320: 42b2 cmp r2, r6 - 9322: d90b bls.n 933c - 9324: 9d03 ldr r5, [sp, #12] - 9326: 4633 mov r3, r6 - 9328: 2100 movs r1, #0 - if (*p++ == 0) state->free_count++; - 932a: f853 4b04 ldr.w r4, [r3], #4 - 932e: b90c cbnz r4, 9334 - 9330: 3501 adds r5, #1 - 9332: 4601 mov r1, r0 - while (p < e) { - 9334: 429a cmp r2, r3 - 9336: d8f8 bhi.n 932a - 9338: b101 cbz r1, 933c - 933a: 9503 str r5, [sp, #12] - for (size_t i = 0; i < ns; i++) { - 933c: f109 0901 add.w r9, r9, #1 - state->clusters_to_do -= n; - 9340: ebac 030e sub.w r3, ip, lr - 9344: 45c8 cmp r8, r9 - 9346: 9302 str r3, [sp, #8] - 9348: d0c6 beq.n 92d8 - if (!readSector(sector + i, dst)) return false; - 934a: f8da 2000 ldr.w r2, [sl] - 934e: e7d6 b.n 92fe - if (isDirty() && !sync()) { - 9350: f507 700e add.w r0, r7, #568 ; 0x238 - 9354: f001 f8ec bl a530 - 9358: 2800 cmp r0, #0 - 935a: f47f af66 bne.w 922a - 935e: e7ab b.n 92b8 - if (!m_blockDev->readSectorsCallback(m_fatStartSector, buf, num_sectors, freeClusterCount_cb_fat32, &state)) return -1; - 9360: 4623 mov r3, r4 - 9362: 4632 mov r2, r6 - 9364: 4c03 ldr r4, [pc, #12] ; (9374 ) - 9366: 4649 mov r1, r9 - 9368: 4650 mov r0, sl - 936a: e7af b.n 92cc - 936c: 00008f4d .word 0x00008f4d - 9370: 00008f91 .word 0x00008f91 - 9374: 00008fc5 .word 0x00008fc5 - -00009378 : - - -//------------------------------------------------------------------------------ -bool FatPartition::init(FsBlockDevice* dev, uint8_t part) { - 9378: b570 push {r4, r5, r6, lr} - 937a: 4604 mov r4, r0 - m_blockDev = dev; - pbs_t* pbs; - BpbFat32_t* bpb; - MbrSector_t* mbr; - uint8_t tmp; - m_fatType = 0; - 937c: 2300 movs r3, #0 - m_allocSearchStart = 1; - 937e: 2001 movs r0, #1 -#if USE_SEPARATE_FAT_CACHE - m_fatCache.init(dev); -#endif // USE_SEPARATE_FAT_CACHE - // if part == 0 assume super floppy with FAT boot sector in sector zero - // if part > 0 assume mbr volume with partition table - if (part) { - 9380: 4615 mov r5, r2 - m_sector = 0XFFFFFFFF; - 9382: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - m_blockDev = dev; - 9386: 6021 str r1, [r4, #0] - m_fatType = 0; - 9388: 71e3 strb r3, [r4, #7] - m_allocSearchStart = 1; - 938a: 60e0 str r0, [r4, #12] - m_cache.init(dev); - 938c: f104 0628 add.w r6, r4, #40 ; 0x28 - m_blockDev = blockDev; - 9390: 62e1 str r1, [r4, #44] ; 0x2c - 9392: f8c4 123c str.w r1, [r4, #572] ; 0x23c - m_status = 0; - 9396: f884 3028 strb.w r3, [r4, #40] ; 0x28 - 939a: f884 3238 strb.w r3, [r4, #568] ; 0x238 - m_sector = 0XFFFFFFFF; - 939e: 6362 str r2, [r4, #52] ; 0x34 - 93a0: f8c4 2244 str.w r2, [r4, #580] ; 0x244 - if (part) { - 93a4: b1cd cbz r5, 93da - if (part > 4) { - 93a6: 2d04 cmp r5, #4 - 93a8: d901 bls.n 93ae - m_fatCache.setMirrorOffset(m_sectorsPerFat); -#endif // USE_SEPARATE_FAT_CACHE - return true; - - fail: - return false; - 93aa: 2000 movs r0, #0 -} - 93ac: bd70 pop {r4, r5, r6, pc} - return m_cache.prepare(sector, options); - 93ae: 4619 mov r1, r3 - 93b0: 461a mov r2, r3 - 93b2: 4630 mov r0, r6 - 93b4: f001 f8e4 bl a580 - MbrPart_t* mp = mbr->part + part - 1; - 93b8: f105 5580 add.w r5, r5, #268435456 ; 0x10000000 - 93bc: 3d01 subs r5, #1 - 93be: f500 73df add.w r3, r0, #446 ; 0x1be - 93c2: 0129 lsls r1, r5, #4 - 93c4: eb03 1505 add.w r5, r3, r5, lsl #4 - if (!mbr || mp->type == 0 || (mp->boot != 0 && mp->boot != 0X80)) { - 93c8: 2800 cmp r0, #0 - 93ca: d0ee beq.n 93aa - 93cc: 792a ldrb r2, [r5, #4] - 93ce: 2a00 cmp r2, #0 - 93d0: d0eb beq.n 93aa - 93d2: 5c5b ldrb r3, [r3, r1] - 93d4: 065b lsls r3, r3, #25 - 93d6: d1e8 bne.n 93aa - return *reinterpret_cast(src); - 93d8: 68ad ldr r5, [r5, #8] - 93da: 2200 movs r2, #0 - 93dc: 4629 mov r1, r5 - 93de: 4630 mov r0, r6 - 93e0: f001 f8ce bl a580 - if (!pbs || getLe16(bpb->bytesPerSector) != m_bytesPerSector) { - 93e4: 2800 cmp r0, #0 - 93e6: d0e0 beq.n 93aa - 93e8: f8b0 300b ldrh.w r3, [r0, #11] - 93ec: f5b3 7f00 cmp.w r3, #512 ; 0x200 - 93f0: d1db bne.n 93aa - m_fatCount = bpb->fatCount; - 93f2: 7c03 ldrb r3, [r0, #16] - 93f4: 7223 strb r3, [r4, #8] - if ((m_fatCount != 1) && (m_fatCount != 2)) { - 93f6: 3b01 subs r3, #1 - 93f8: 2b01 cmp r3, #1 - 93fa: d8d6 bhi.n 93aa - m_sectorsPerCluster = bpb->sectorsPerCluster; - 93fc: 7b46 ldrb r6, [r0, #13] - 93fe: 7126 strb r6, [r4, #4] - m_clusterSectorMask = m_sectorsPerCluster - 1; - 9400: 1e73 subs r3, r6, #1 - m_sectorsPerClusterShift = 0; - 9402: 2200 movs r2, #0 - for (tmp = 1; m_sectorsPerCluster != tmp; tmp <<= 1) { - 9404: 2e01 cmp r6, #1 - m_clusterSectorMask = m_sectorsPerCluster - 1; - 9406: 7163 strb r3, [r4, #5] - m_sectorsPerClusterShift = 0; - 9408: 71a2 strb r2, [r4, #6] - for (tmp = 1; m_sectorsPerCluster != tmp; tmp <<= 1) { - 940a: d00e beq.n 942a - 940c: 2201 movs r2, #1 - 940e: 4613 mov r3, r2 - 9410: 005b lsls r3, r3, #1 - 9412: b2db uxtb r3, r3 - 9414: 429e cmp r6, r3 - if (tmp == 0) { - 9416: f102 0101 add.w r1, r2, #1 - for (tmp = 1; m_sectorsPerCluster != tmp; tmp <<= 1) { - 941a: d005 beq.n 9428 - if (tmp == 0) { - 941c: b2ca uxtb r2, r1 - 941e: 2a09 cmp r2, #9 - 9420: d1f6 bne.n 9410 - 9422: 2308 movs r3, #8 - 9424: 71a3 strb r3, [r4, #6] - 9426: e7c0 b.n 93aa - 9428: 71a2 strb r2, [r4, #6] - m_sectorsPerFat = getLe16(bpb->sectorsPerFat16); - 942a: 8ac6 ldrh r6, [r0, #22] - 942c: 6126 str r6, [r4, #16] - if (m_sectorsPerFat == 0) { - 942e: b90e cbnz r6, 9434 - 9430: 6a46 ldr r6, [r0, #36] ; 0x24 - m_sectorsPerFat = getLe32(bpb->sectorsPerFat32); - 9432: 6126 str r6, [r4, #16] - m_fatStartSector = volumeStartSector + getLe16(bpb->reservedSectorCount); - 9434: 89c1 ldrh r1, [r0, #14] - return *reinterpret_cast(src); - 9436: f8b0 3011 ldrh.w r3, [r0, #17] - m_rootDirEntryCount = getLe16(bpb->rootDirEntryCount); - 943a: 8163 strh r3, [r4, #10] - m_fatStartSector = volumeStartSector + getLe16(bpb->reservedSectorCount); - 943c: 4429 add r1, r5 - 943e: 61a1 str r1, [r4, #24] - m_rootDirStart = m_fatStartSector + bpb->fatCount * m_sectorsPerFat; - 9440: f890 c010 ldrb.w ip, [r0, #16] - ((FS_DIR_SIZE*m_rootDirEntryCount + m_bytesPerSector - 1)/m_bytesPerSector); - 9444: 015b lsls r3, r3, #5 - m_rootDirStart = m_fatStartSector + bpb->fatCount * m_sectorsPerFat; - 9446: fb06 110c mla r1, r6, ip, r1 - ((FS_DIR_SIZE*m_rootDirEntryCount + m_bytesPerSector - 1)/m_bytesPerSector); - 944a: f203 13ff addw r3, r3, #511 ; 0x1ff - m_dataStartSector = m_rootDirStart + - 944e: eb01 2353 add.w r3, r1, r3, lsr #9 - m_rootDirStart = m_fatStartSector + bpb->fatCount * m_sectorsPerFat; - 9452: 6221 str r1, [r4, #32] - totalSectors = getLe16(bpb->totalSectors16); - 9454: f8b0 1013 ldrh.w r1, [r0, #19] - m_dataStartSector = m_rootDirStart + - 9458: 6163 str r3, [r4, #20] - if (totalSectors == 0) { - 945a: b901 cbnz r1, 945e - return *reinterpret_cast(src); - 945c: 6a01 ldr r1, [r0, #32] - clusterCount = totalSectors - (m_dataStartSector - volumeStartSector); - 945e: 1aed subs r5, r5, r3 - 9460: 186b adds r3, r5, r1 - clusterCount >>= m_sectorsPerClusterShift; - 9462: 40d3 lsrs r3, r2 - m_lastCluster = clusterCount + 1; - 9464: 1c5a adds r2, r3, #1 - 9466: 61e2 str r2, [r4, #28] - m_freeClusterCount = value; - 9468: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 946c: 6262 str r2, [r4, #36] ; 0x24 - if (clusterCount < 4085) { - 946e: f640 72f4 movw r2, #4084 ; 0xff4 - 9472: 4293 cmp r3, r2 - 9474: d90d bls.n 9492 - } else if (clusterCount < 65525) { - 9476: f64f 72f4 movw r2, #65524 ; 0xfff4 - 947a: 4293 cmp r3, r2 - 947c: bf85 ittet hi - 947e: 6ac3 ldrhi r3, [r0, #44] ; 0x2c - m_rootDirStart = getLe32(bpb->fat32RootCluster); - 9480: 6223 strhi r3, [r4, #32] - m_fatType = 32; - 9482: 2310 movls r3, #16 - m_rootDirStart = getLe32(bpb->fat32RootCluster); - 9484: 2320 movhi r3, #32 - m_fatType = 16; - 9486: 71e3 strb r3, [r4, #7] - } - /** Set the offset to the second FAT for mirroring. - * \param[in] offset Sector offset to second FAT. - */ - void setMirrorOffset(uint32_t offset) { - m_mirrorOffset = offset; - 9488: 6326 str r6, [r4, #48] ; 0x30 - 948a: f8c4 6240 str.w r6, [r4, #576] ; 0x240 - return true; - 948e: 2001 movs r0, #1 -} - 9490: bd70 pop {r4, r5, r6, pc} - m_fatType = 12; - 9492: 230c movs r3, #12 - 9494: 71e3 strb r3, [r4, #7] - return false; - 9496: 2000 movs r0, #0 -} - 9498: bd70 pop {r4, r5, r6, pc} - 949a: bf00 nop - -0000949c : - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#include "FsLib.h" -//------------------------------------------------------------------------------ -FsBaseFile::FsBaseFile(const FsBaseFile& from) { - 949c: b5f8 push {r3, r4, r5, r6, r7, lr} - m_fFile = nullptr; - m_xFile = nullptr; - if (from.m_fFile) { - 949e: 6b8f ldr r7, [r1, #56] ; 0x38 -FsBaseFile::FsBaseFile(const FsBaseFile& from) { - 94a0: 2600 movs r6, #0 - 94a2: 460d mov r5, r1 - 94a4: 4604 mov r4, r0 - 94a6: 6386 str r6, [r0, #56] ; 0x38 - 94a8: 63c6 str r6, [r0, #60] ; 0x3c - if (from.m_fFile) { - 94aa: b19f cbz r7, 94d4 - m_fFile = new (m_fileMem) FatFile; - 94ac: 4601 mov r1, r0 - 94ae: 2024 movs r0, #36 ; 0x24 - 94b0: f000 f8c8 bl 9644 - * \brief Basic file class. - */ -class FatFile { - public: - /** Create an instance. */ - FatFile() {} - 94b4: 8006 strh r6, [r0, #0] - 94b6: 7086 strb r6, [r0, #2] - *m_fFile = *from.m_fFile; - 94b8: 6bad ldr r5, [r5, #56] ; 0x38 - m_fFile = new (m_fileMem) FatFile; - 94ba: 63a0 str r0, [r4, #56] ; 0x38 - *m_fFile = *from.m_fFile; - 94bc: 4684 mov ip, r0 - 94be: cd0f ldmia r5!, {r0, r1, r2, r3} - 94c0: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 94c4: cd0f ldmia r5!, {r0, r1, r2, r3} - 94c6: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 94ca: 682b ldr r3, [r5, #0] - 94cc: f8cc 3000 str.w r3, [ip] - } else if (from.m_xFile) { - m_xFile = new (m_fileMem) ExFatFile; - *m_xFile = *from.m_xFile; - } -} - 94d0: 4620 mov r0, r4 - 94d2: bdf8 pop {r3, r4, r5, r6, r7, pc} - } else if (from.m_xFile) { - 94d4: 6bcb ldr r3, [r1, #60] ; 0x3c - 94d6: 2b00 cmp r3, #0 - 94d8: d0fa beq.n 94d0 - m_xFile = new (m_fileMem) ExFatFile; - 94da: 4601 mov r1, r0 - 94dc: 2038 movs r0, #56 ; 0x38 - 94de: f000 f8b1 bl 9644 - * \brief Basic file class. - */ -class ExFatFile { - public: - /** Create an instance. */ - ExFatFile() {} - 94e2: f880 7031 strb.w r7, [r0, #49] ; 0x31 - 94e6: 8647 strh r7, [r0, #50] ; 0x32 - *m_xFile = *from.m_xFile; - 94e8: 6be9 ldr r1, [r5, #60] ; 0x3c - m_xFile = new (m_fileMem) ExFatFile; - 94ea: 63e0 str r0, [r4, #60] ; 0x3c - *m_xFile = *from.m_xFile; - 94ec: 2234 movs r2, #52 ; 0x34 - 94ee: f002 fca3 bl be38 -} - 94f2: 4620 mov r0, r4 - 94f4: bdf8 pop {r3, r4, r5, r6, r7, pc} - 94f6: bf00 nop - -000094f8 : - *m_xFile = *from.m_xFile; - } - return *this; -} -//------------------------------------------------------------------------------ -bool FsBaseFile::close() { - 94f8: b510 push {r4, lr} - 94fa: 4604 mov r4, r0 - if (m_fFile && m_fFile->close()) { - 94fc: 6b80 ldr r0, [r0, #56] ; 0x38 - 94fe: b110 cbz r0, 9506 - 9500: f7fd fe6c bl 71dc - 9504: b930 cbnz r0, 9514 - m_fFile = nullptr; - return true; - } - if (m_xFile && m_xFile->close()) { - 9506: 6be0 ldr r0, [r4, #60] ; 0x3c - 9508: b110 cbz r0, 9510 - 950a: f7fb fdc3 bl 5094 - 950e: b920 cbnz r0, 951a - m_xFile = nullptr; - return true; - } - return false; - 9510: 2000 movs r0, #0 -} - 9512: bd10 pop {r4, pc} - m_fFile = nullptr; - 9514: 2300 movs r3, #0 - 9516: 63a3 str r3, [r4, #56] ; 0x38 -} - 9518: bd10 pop {r4, pc} - m_xFile = nullptr; - 951a: 2300 movs r3, #0 - 951c: 63e3 str r3, [r4, #60] ; 0x3c -} - 951e: bd10 pop {r4, pc} - -00009520 : - } - return false; -} -//------------------------------------------------------------------------------ -bool FsBaseFile::open(FsVolume* vol, const char* path, oflag_t oflag) { - if (!vol) { - 9520: 2900 cmp r1, #0 - 9522: d052 beq.n 95ca -bool FsBaseFile::open(FsVolume* vol, const char* path, oflag_t oflag) { - 9524: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 9528: 4604 mov r4, r0 - if (m_fFile && m_fFile->close()) { - 952a: 6b80 ldr r0, [r0, #56] ; 0x38 - 952c: 4617 mov r7, r2 - 952e: 461e mov r6, r3 - 9530: 460d mov r5, r1 - 9532: b110 cbz r0, 953a - 9534: f7fd fe52 bl 71dc - 9538: bba0 cbnz r0, 95a4 - if (m_xFile && m_xFile->close()) { - 953a: 6be0 ldr r0, [r4, #60] ; 0x3c - 953c: b110 cbz r0, 9544 - 953e: f7fb fda9 bl 5094 - 9542: bbb8 cbnz r0, 95b4 - return false; - } - close(); - if (vol->m_fVol) { - 9544: f8d5 8480 ldr.w r8, [r5, #1152] ; 0x480 - 9548: f1b8 0f00 cmp.w r8, #0 - 954c: d011 beq.n 9572 - m_fFile = new (m_fileMem) FatFile; - 954e: 4621 mov r1, r4 - 9550: 2024 movs r0, #36 ; 0x24 - 9552: f000 f877 bl 9644 - if (m_fFile && m_fFile->open(vol->m_fVol, path, oflag)) { - 9556: 4633 mov r3, r6 - 9558: 2600 movs r6, #0 - 955a: 8006 strh r6, [r0, #0] - 955c: 7086 strb r6, [r0, #2] - 955e: f8d5 1480 ldr.w r1, [r5, #1152] ; 0x480 - m_fFile = new (m_fileMem) FatFile; - 9562: 63a0 str r0, [r4, #56] ; 0x38 - if (m_fFile && m_fFile->open(vol->m_fVol, path, oflag)) { - 9564: 463a mov r2, r7 - 9566: f7fd fff3 bl 7550 - 956a: bb58 cbnz r0, 95c4 - return true; - } - m_fFile = nullptr; - 956c: 63a0 str r0, [r4, #56] ; 0x38 - return true; - } - m_xFile = nullptr; - } - return false; -} - 956e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - } else if (vol->m_xVol) { - 9572: f8d5 3484 ldr.w r3, [r5, #1156] ; 0x484 - 9576: b193 cbz r3, 959e - m_xFile = new (m_fileMem) ExFatFile; - 9578: 4621 mov r1, r4 - 957a: 2038 movs r0, #56 ; 0x38 - 957c: f000 f862 bl 9644 - 9580: f880 8031 strb.w r8, [r0, #49] ; 0x31 - 9584: f8a0 8032 strh.w r8, [r0, #50] ; 0x32 - if (m_xFile && m_xFile->open(vol->m_xVol, path, oflag)) { - 9588: f8d5 1484 ldr.w r1, [r5, #1156] ; 0x484 - m_xFile = new (m_fileMem) ExFatFile; - 958c: 63e0 str r0, [r4, #60] ; 0x3c - if (m_xFile && m_xFile->open(vol->m_xVol, path, oflag)) { - 958e: 4633 mov r3, r6 - 9590: 463a mov r2, r7 - 9592: f7fc f9a3 bl 58dc - 9596: b9a8 cbnz r0, 95c4 - m_xFile = nullptr; - 9598: 63e0 str r0, [r4, #60] ; 0x3c -} - 959a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return false; - 959e: 2000 movs r0, #0 -} - 95a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (vol->m_fVol) { - 95a4: f8d5 8480 ldr.w r8, [r5, #1152] ; 0x480 - m_fFile = nullptr; - 95a8: 2300 movs r3, #0 - 95aa: 63a3 str r3, [r4, #56] ; 0x38 - if (vol->m_fVol) { - 95ac: f1b8 0f00 cmp.w r8, #0 - 95b0: d1cd bne.n 954e - 95b2: e7de b.n 9572 - 95b4: f8d5 8480 ldr.w r8, [r5, #1152] ; 0x480 - m_xFile = nullptr; - 95b8: 2300 movs r3, #0 - 95ba: 63e3 str r3, [r4, #60] ; 0x3c - if (vol->m_fVol) { - 95bc: f1b8 0f00 cmp.w r8, #0 - 95c0: d1c5 bne.n 954e - 95c2: e7d6 b.n 9572 - return true; - 95c4: 2001 movs r0, #1 -} - 95c6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return false; - 95ca: 2000 movs r0, #0 -} - 95cc: 4770 bx lr - 95ce: bf00 nop - -000095d0 : - m_xFile = nullptr; - } - return false; -} -//------------------------------------------------------------------------------ -bool FsBaseFile::openNext(FsBaseFile* dir, oflag_t oflag) { - 95d0: b5f8 push {r3, r4, r5, r6, r7, lr} - 95d2: 4604 mov r4, r0 - if (m_fFile && m_fFile->close()) { - 95d4: 6b80 ldr r0, [r0, #56] ; 0x38 -bool FsBaseFile::openNext(FsBaseFile* dir, oflag_t oflag) { - 95d6: 460d mov r5, r1 - 95d8: 4616 mov r6, r2 - if (m_fFile && m_fFile->close()) { - 95da: b110 cbz r0, 95e2 - 95dc: f7fd fdfe bl 71dc - 95e0: bb38 cbnz r0, 9632 - if (m_xFile && m_xFile->close()) { - 95e2: 6be0 ldr r0, [r4, #60] ; 0x3c - 95e4: b110 cbz r0, 95ec - 95e6: f7fb fd55 bl 5094 - 95ea: bb38 cbnz r0, 963c - close(); - if (dir->m_fFile) { - 95ec: 6baf ldr r7, [r5, #56] ; 0x38 - 95ee: b177 cbz r7, 960e - m_fFile = new (m_fileMem) FatFile; - 95f0: 4621 mov r1, r4 - 95f2: 2024 movs r0, #36 ; 0x24 - 95f4: f000 f826 bl 9644 - 95f8: 2100 movs r1, #0 - 95fa: 8001 strh r1, [r0, #0] - 95fc: 7081 strb r1, [r0, #2] - 95fe: 63a0 str r0, [r4, #56] ; 0x38 - if (m_fFile->openNext(dir->m_fFile, oflag)) { - 9600: 6ba9 ldr r1, [r5, #56] ; 0x38 - 9602: 4632 mov r2, r6 - 9604: f7fe fac6 bl 7b94 - 9608: b988 cbnz r0, 962e - return true; - } - m_fFile = nullptr; - 960a: 63a0 str r0, [r4, #56] ; 0x38 - return true; - } - m_xFile = nullptr; - } - return false; -} - 960c: bdf8 pop {r3, r4, r5, r6, r7, pc} - } else if (dir->m_xFile) { - 960e: 6be8 ldr r0, [r5, #60] ; 0x3c - 9610: 2800 cmp r0, #0 - 9612: d0fb beq.n 960c - m_xFile = new (m_fileMem) ExFatFile; - 9614: 4621 mov r1, r4 - 9616: 2038 movs r0, #56 ; 0x38 - 9618: f000 f814 bl 9644 - 961c: f880 7031 strb.w r7, [r0, #49] ; 0x31 - 9620: 8647 strh r7, [r0, #50] ; 0x32 - 9622: 63e0 str r0, [r4, #60] ; 0x3c - if (m_xFile->openNext(dir->m_xFile, oflag)) { - 9624: 6be9 ldr r1, [r5, #60] ; 0x3c - 9626: 4632 mov r2, r6 - 9628: f7fc f960 bl 58ec - 962c: b120 cbz r0, 9638 - return true; - 962e: 2001 movs r0, #1 -} - 9630: bdf8 pop {r3, r4, r5, r6, r7, pc} - m_fFile = nullptr; - 9632: 2300 movs r3, #0 - 9634: 63a3 str r3, [r4, #56] ; 0x38 - return true; - 9636: e7d9 b.n 95ec - m_xFile = nullptr; - 9638: 63e0 str r0, [r4, #60] ; 0x3c -} - 963a: bdf8 pop {r3, r4, r5, r6, r7, pc} - m_xFile = nullptr; - 963c: 2300 movs r3, #0 - 963e: 63e3 str r3, [r4, #60] ; 0x3c - return true; - 9640: e7d4 b.n 95ec - 9642: bf00 nop - -00009644 : - */ -#include "FsNew.h" -void* operator new(size_t size, newalign_t* ptr) { - (void)size; - return ptr; -} - 9644: 4608 mov r0, r1 - 9646: 4770 bx lr - -00009648 : -bool FsVolume::begin(FsBlockDevice* blockDev, bool setCwv, uint8_t part) { - 9648: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - m_fVol = nullptr; - 964c: 2600 movs r6, #0 -bool FsVolume::begin(FsBlockDevice* blockDev, bool setCwv, uint8_t part) { - 964e: 4604 mov r4, r0 - m_blockDev = blockDev; - 9650: f8c0 1488 str.w r1, [r0, #1160] ; 0x488 - m_fVol = nullptr; - 9654: f8c0 6480 str.w r6, [r0, #1152] ; 0x480 - m_xVol = new (m_volMem) ExFatVolume; - 9658: 4601 mov r1, r0 - 965a: f44f 6090 mov.w r0, #1152 ; 0x480 -bool FsVolume::begin(FsBlockDevice* blockDev, bool setCwv, uint8_t part) { - 965e: 461f mov r7, r3 - 9660: 4690 mov r8, r2 - m_xVol = new (m_volMem) ExFatVolume; - 9662: f7ff ffef bl 9644 - ExFatPartition() {} - 9666: f880 6444 strb.w r6, [r0, #1092] ; 0x444 - 966a: f880 6479 strb.w r6, [r0, #1145] ; 0x479 - 966e: f8a0 647a strh.w r6, [r0, #1146] ; 0x47a - * \param[in] setCwv Set current working volume if true. - * \param[in] part partition to initialize. - * \return true for success or false for failure. - */ - bool begin(FsBlockDevice* dev, bool setCwv = true, uint8_t part = 1) { - if (!init(dev, part)) { - 9672: f8d4 1488 ldr.w r1, [r4, #1160] ; 0x488 - 9676: f8c4 0484 str.w r0, [r4, #1156] ; 0x484 - 967a: 463a mov r2, r7 - 967c: 4605 mov r5, r0 - 967e: f7fd fc71 bl 6f64 - 9682: bba8 cbnz r0, 96f0 - m_xVol = nullptr; - 9684: 2600 movs r6, #0 - m_fVol = new (m_volMem) FatVolume; - 9686: 4621 mov r1, r4 - m_xVol = nullptr; - 9688: f8c4 6484 str.w r6, [r4, #1156] ; 0x484 - m_fVol = new (m_volMem) FatVolume; - 968c: f240 406c movw r0, #1132 ; 0x46c - 9690: f7ff ffd8 bl 9644 - */ -class FatPartition { - public: - /** Create an instance of FatPartition - */ - FatPartition() {} - 9694: 2302 movs r3, #2 - 9696: 71c6 strb r6, [r0, #7] - 9698: f8a0 6448 strh.w r6, [r0, #1096] ; 0x448 - 969c: f880 644a strb.w r6, [r0, #1098] ; 0x44a - 96a0: 7203 strb r3, [r0, #8] - * \param[in] setCwv Set current working volume if true. - * \param[in] part partition to initialize. - * \return true for success or false for failure. - */ - bool begin(FsBlockDevice* dev, bool setCwv = true, uint8_t part = 1) { - if (!init(dev, part)) { - 96a2: f8d4 1488 ldr.w r1, [r4, #1160] ; 0x488 - 96a6: f8c4 0480 str.w r0, [r4, #1152] ; 0x480 - 96aa: 463a mov r2, r7 - 96ac: 4605 mov r5, r0 - 96ae: f7ff fe63 bl 9378 - 96b2: b930 cbnz r0, 96c2 - m_cwv = nullptr; - 96b4: 4b1b ldr r3, [pc, #108] ; (9724 ) - 96b6: 2000 movs r0, #0 - 96b8: 6018 str r0, [r3, #0] - m_fVol = nullptr; - 96ba: f8c4 0480 str.w r0, [r4, #1152] ; 0x480 -} - 96be: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - /** - * Set volume working directory to root. - * \return true for success or false for failure. - */ - bool chdir() { - m_vwd.close(); - 96c2: f505 6689 add.w r6, r5, #1096 ; 0x448 - 96c6: 4630 mov r0, r6 - 96c8: f7fd fd88 bl 71dc - return m_vwd.openRoot(this); - 96cc: 4629 mov r1, r5 - 96ce: 4630 mov r0, r6 - 96d0: f7fd ff72 bl 75b8 - if (!chdir()) { - 96d4: 2800 cmp r0, #0 - 96d6: d0ed beq.n 96b4 - if (setCwv || !m_cwv) { - 96d8: 4b13 ldr r3, [pc, #76] ; (9728 ) - 96da: 681a ldr r2, [r3, #0] - 96dc: b9ba cbnz r2, 970e - m_cwv = this; - 96de: 601d str r5, [r3, #0] - if (setCwv || !m_cwv) { - 96e0: 4b10 ldr r3, [pc, #64] ; (9724 ) - 96e2: f1b8 0f00 cmp.w r8, #0 - 96e6: d016 beq.n 9716 - m_cwv = this; - 96e8: 601c str r4, [r3, #0] - return true; - 96ea: 2001 movs r0, #1 -} - 96ec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - /** - * Set volume working directory to root. - * \return true for success or false for failure. - */ - bool chdir() { - m_vwd.close(); - 96f0: f505 6689 add.w r6, r5, #1096 ; 0x448 - 96f4: 4630 mov r0, r6 - 96f6: f7fb fccd bl 5094 - return m_vwd.openRoot(this); - 96fa: 4629 mov r1, r5 - 96fc: 4630 mov r0, r6 - 96fe: f7fb fcf7 bl 50f0 - if (!chdir()) { - 9702: 2800 cmp r0, #0 - 9704: d0be beq.n 9684 - if (setCwv || !m_cwv) { - 9706: 4b09 ldr r3, [pc, #36] ; (972c ) - 9708: 681a ldr r2, [r3, #0] - 970a: 2a00 cmp r2, #0 - 970c: d0e7 beq.n 96de - if (setCwv || !m_cwv) { - 970e: 4b05 ldr r3, [pc, #20] ; (9724 ) - 9710: f1b8 0f00 cmp.w r8, #0 - 9714: d1e8 bne.n 96e8 - 9716: 681a ldr r2, [r3, #0] - 9718: 2a00 cmp r2, #0 - 971a: d0e5 beq.n 96e8 - return true; - 971c: 2001 movs r0, #1 -} - 971e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 9722: bf00 nop - 9724: 1fff976c .word 0x1fff976c - 9728: 1fff9768 .word 0x1fff9768 - 972c: 1fff9764 .word 0x1fff9764 - -00009730 : -FsFile FsVolume::open(const char *path, oflag_t oflag) { - 9730: b570 push {r4, r5, r6, lr} - 9732: 4604 mov r4, r0 - constexpr Print() : write_error(0) {} - 9734: 2000 movs r0, #0 - 9736: 6060 str r0, [r4, #4] - 9738: 7320 strb r0, [r4, #12] - FsBaseFile() {} - 973a: 64a0 str r0, [r4, #72] ; 0x48 - 973c: 64e0 str r0, [r4, #76] ; 0x4c -class FsFile : public StreamFile { - 973e: 4620 mov r0, r4 - 9740: 4d04 ldr r5, [pc, #16] ; (9754 ) - 9742: f44f 767a mov.w r6, #1000 ; 0x3e8 - 9746: 60a6 str r6, [r4, #8] - 9748: f840 5b10 str.w r5, [r0], #16 - tmpFile.open(this, path, oflag); - 974c: f7ff fee8 bl 9520 -} - 9750: 4620 mov r0, r4 - 9752: bd70 pop {r4, r5, r6, pc} - 9754: 00017b14 .word 0x00017b14 - -00009758 : -class DedicatedSpiCard : public SharedSpiCard { - 9758: 4770 bx lr - 975a: bf00 nop - -0000975c : - m_spiDriver.end(); - 975c: 3004 adds r0, #4 - 975e: f000 be8f b.w a480 - 9762: bf00 nop - -00009764 : -class DedicatedSpiCard : public SharedSpiCard { - 9764: b510 push {r4, lr} - 9766: 211c movs r1, #28 - 9768: 4604 mov r4, r0 - 976a: f002 fcb7 bl c0dc - 976e: 4620 mov r0, r4 - 9770: bd10 pop {r4, pc} - 9772: bf00 nop - -00009774 : -bool SharedSpiCard::eraseSingleSectorEnable() { - csd_t csd; - return readCSD(&csd) ? csd.v1.erase_blk_en : false; -} -//------------------------------------------------------------------------------ -bool SharedSpiCard::isBusy() { - 9774: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - if (m_state == READ_STATE) { - 9778: 7bc3 ldrb r3, [r0, #15] - 977a: 2b01 cmp r3, #1 - 977c: d035 beq.n 97ea - return false; - } - bool spiActive = m_spiActive; - if (!spiActive) { - 977e: 7b86 ldrb r6, [r0, #14] - 9780: 4604 mov r4, r0 - 9782: b14e cbz r6, 9798 - return m_spiDriver.receive(); - 9784: 3004 adds r0, #4 - 9786: f000 fe7f bl a488 - spiStart(); - } - bool rtn = 0XFF != spiReceive(); - 978a: f1b0 05ff subs.w r5, r0, #255 ; 0xff - 978e: bf18 it ne - 9790: 2501 movne r5, #1 - if (!spiActive) { - spiStop(); - } - return rtn; -} - 9792: 4628 mov r0, r5 - 9794: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - m_spiDriver.activate(); - 9798: 1d07 adds r7, r0, #4 - 979a: 4638 mov r0, r7 - 979c: f000 fe0a bl a3b4 - sdCsWrite(m_csPin, false); - 97a0: 7b20 ldrb r0, [r4, #12] - 97a2: 4631 mov r1, r6 - 97a4: f000 fe04 bl a3b0 - if (!m_spiActive) { - spiActivate(); - spiSelect(); - // Dummy byte to drive MISO busy status. - spiSend(0XFF); - m_spiActive = true; - 97a8: f04f 0801 mov.w r8, #1 - m_spiDriver.send(data); - 97ac: 21ff movs r1, #255 ; 0xff - 97ae: 4638 mov r0, r7 - 97b0: f000 fe88 bl a4c4 - 97b4: f884 800e strb.w r8, [r4, #14] - return m_spiDriver.receive(); - 97b8: 4638 mov r0, r7 - 97ba: f000 fe65 bl a488 - } -} -//------------------------------------------------------------------------------ -void SharedSpiCard::spiStop() { - if (m_spiActive) { - 97be: 7ba3 ldrb r3, [r4, #14] - bool rtn = 0XFF != spiReceive(); - 97c0: f1b0 05ff subs.w r5, r0, #255 ; 0xff - 97c4: bf18 it ne - 97c6: 2501 movne r5, #1 - if (m_spiActive) { - 97c8: 2b00 cmp r3, #0 - 97ca: d0e2 beq.n 9792 - sdCsWrite(m_csPin, true); - 97cc: 7b20 ldrb r0, [r4, #12] - 97ce: 4641 mov r1, r8 - 97d0: f000 fdee bl a3b0 - m_spiDriver.send(data); - 97d4: 21ff movs r1, #255 ; 0xff - 97d6: 4638 mov r0, r7 - 97d8: f000 fe74 bl a4c4 - m_spiDriver.deactivate(); - 97dc: 4638 mov r0, r7 - 97de: f000 fe35 bl a44c - spiUnselect(); - // Insure MISO goes to low Z. - spiSend(0XFF); - spiDeactivate(); - m_spiActive = false; - 97e2: 73a6 strb r6, [r4, #14] -} - 97e4: 4628 mov r0, r5 - 97e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return false; - 97ea: 2500 movs r5, #0 -} - 97ec: 4628 mov r0, r5 - 97ee: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 97f2: bf00 nop - -000097f4 : -bool SharedSpiCard::readData(uint8_t* dst, size_t count) { - 97f4: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 97f8: 4f23 ldr r7, [pc, #140] ; (9888 ) - 97fa: b083 sub sp, #12 - 97fc: 683b ldr r3, [r7, #0] - 97fe: 9300 str r3, [sp, #0] - return ret; - 9800: 9d00 ldr r5, [sp, #0] - m_endTime = ms + millis16(); - 9802: f505 7596 add.w r5, r5, #300 ; 0x12c -bool SharedSpiCard::readData(uint8_t* dst, size_t count) { - 9806: 4604 mov r4, r0 - 9808: 4688 mov r8, r1 - 980a: 4691 mov r9, r2 - m_endTime = ms + millis16(); - 980c: b2ad uxth r5, r5 - return m_spiDriver.receive(); - 980e: 1d06 adds r6, r0, #4 - explicit Timeout(uint16_t ms) {set(ms);} - 9810: e005 b.n 981e - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 9812: 683b ldr r3, [r7, #0] - 9814: 9301 str r3, [sp, #4] - return ret; - 9816: 9b01 ldr r3, [sp, #4] - return (int16_t)(m_endTime - millis16()) < 0; - 9818: 1aeb subs r3, r5, r3 - if (timeout.timedOut()) { - 981a: 041b lsls r3, r3, #16 - 981c: d40e bmi.n 983c - 981e: 4630 mov r0, r6 - 9820: f000 fe32 bl a488 - while ((m_status = spiReceive()) == 0XFF) { - 9824: 28ff cmp r0, #255 ; 0xff - 9826: 7420 strb r0, [r4, #16] - 9828: d0f3 beq.n 9812 - if (m_status != DATA_START_SECTOR) { - 982a: 28fe cmp r0, #254 ; 0xfe - 982c: d01b beq.n 9866 - 982e: 2318 movs r3, #24 - if (m_spiActive) { - 9830: 7ba0 ldrb r0, [r4, #14] - m_errorCode = code; - 9832: 7363 strb r3, [r4, #13] - 9834: b938 cbnz r0, 9846 -} - 9836: b003 add sp, #12 - 9838: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - if (m_spiActive) { - 983c: 7ba0 ldrb r0, [r4, #14] - 983e: 231d movs r3, #29 - 9840: 7363 strb r3, [r4, #13] - 9842: 2800 cmp r0, #0 - 9844: d0f7 beq.n 9836 - sdCsWrite(m_csPin, true); - 9846: 7b20 ldrb r0, [r4, #12] - 9848: 2101 movs r1, #1 - 984a: f000 fdb1 bl a3b0 - m_spiDriver.send(data); - 984e: 21ff movs r1, #255 ; 0xff - 9850: 4630 mov r0, r6 - 9852: f000 fe37 bl a4c4 - m_spiDriver.deactivate(); - 9856: 4630 mov r0, r6 - 9858: f000 fdf8 bl a44c - m_spiActive = false; - 985c: 2000 movs r0, #0 - 985e: 73a0 strb r0, [r4, #14] -} - 9860: b003 add sp, #12 - 9862: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - return m_spiDriver.receive(buf, n); - 9866: 464a mov r2, r9 - 9868: 4641 mov r1, r8 - 986a: 4630 mov r0, r6 - 986c: f000 fe1a bl a4a4 - if ((m_status = spiReceive(dst, count))) { - 9870: 7420 strb r0, [r4, #16] - 9872: b938 cbnz r0, 9884 - return m_spiDriver.receive(); - 9874: 4630 mov r0, r6 - 9876: f000 fe07 bl a488 - 987a: 4630 mov r0, r6 - 987c: f000 fe04 bl a488 - return true; - 9880: 2001 movs r0, #1 - 9882: e7d8 b.n 9836 - 9884: 2325 movs r3, #37 ; 0x25 - 9886: e7d3 b.n 9830 - 9888: 1fff978c .word 0x1fff978c - -0000988c : - spiStop(); - return false; -} -//------------------------------------------------------------------------------ -// send one sector of data for write sector or write multiple sectors -bool SharedSpiCard::writeData(uint8_t token, const uint8_t* src) { - 988c: b570 push {r4, r5, r6, lr} - m_spiDriver.send(data); - 988e: 1d06 adds r6, r0, #4 - 9890: 4615 mov r5, r2 - 9892: 4604 mov r4, r0 - 9894: 4630 mov r0, r6 - 9896: f000 fe15 bl a4c4 - m_spiDriver.send(buf, n); - 989a: f44f 7200 mov.w r2, #512 ; 0x200 - 989e: 4629 mov r1, r5 - 98a0: 4630 mov r0, r6 - 98a2: f000 fe1b bl a4dc - m_spiDriver.send(data); - 98a6: 21ff movs r1, #255 ; 0xff - 98a8: 4630 mov r0, r6 - 98aa: f000 fe0b bl a4c4 - 98ae: 21ff movs r1, #255 ; 0xff - 98b0: 4630 mov r0, r6 - 98b2: f000 fe07 bl a4c4 - return m_spiDriver.receive(); - 98b6: 4630 mov r0, r6 - 98b8: f000 fde6 bl a488 - spiSend(src, 512); - spiSend(crc >> 8); - spiSend(crc & 0XFF); - - m_status = spiReceive(); - if ((m_status & DATA_RES_MASK) != DATA_RES_ACCEPTED) { - 98bc: f000 031f and.w r3, r0, #31 - 98c0: 2b05 cmp r3, #5 - m_status = spiReceive(); - 98c2: 7420 strb r0, [r4, #16] - if ((m_status & DATA_RES_MASK) != DATA_RES_ACCEPTED) { - 98c4: d004 beq.n 98d0 - if (m_spiActive) { - 98c6: 7ba0 ldrb r0, [r4, #14] - m_errorCode = code; - 98c8: 2320 movs r3, #32 - 98ca: 7363 strb r3, [r4, #13] - 98cc: b910 cbnz r0, 98d4 - return true; - - fail: - spiStop(); - return false; -} - 98ce: bd70 pop {r4, r5, r6, pc} - return true; - 98d0: 2001 movs r0, #1 -} - 98d2: bd70 pop {r4, r5, r6, pc} - sdCsWrite(m_csPin, true); - 98d4: 7b20 ldrb r0, [r4, #12] - 98d6: 2101 movs r1, #1 - 98d8: f000 fd6a bl a3b0 - m_spiDriver.send(data); - 98dc: 21ff movs r1, #255 ; 0xff - 98de: 4630 mov r0, r6 - 98e0: f000 fdf0 bl a4c4 - m_spiDriver.deactivate(); - 98e4: 4630 mov r0, r6 - 98e6: f000 fdb1 bl a44c - m_spiActive = false; - 98ea: 2000 movs r0, #0 - 98ec: 73a0 strb r0, [r4, #14] -} - 98ee: bd70 pop {r4, r5, r6, pc} - -000098f0 : - fail: - spiStop(); - return false; -} -//------------------------------------------------------------------------------ -bool SharedSpiCard::writeStop() { - 98f0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 98f4: 4f26 ldr r7, [pc, #152] ; (9990 ) - 98f6: b082 sub sp, #8 - 98f8: 683b ldr r3, [r7, #0] - 98fa: 9301 str r3, [sp, #4] - return ret; - 98fc: 9d01 ldr r5, [sp, #4] - m_endTime = ms + millis16(); - 98fe: f505 7516 add.w r5, r5, #600 ; 0x258 -bool SharedSpiCard::writeStop() { - 9902: 4680 mov r8, r0 - m_endTime = ms + millis16(); - 9904: b2ad uxth r5, r5 - return m_spiDriver.receive(); - 9906: 1d06 adds r6, r0, #4 - explicit Timeout(uint16_t ms) {set(ms);} - 9908: e005 b.n 9916 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 990a: 683b ldr r3, [r7, #0] - 990c: 9300 str r3, [sp, #0] - return ret; - 990e: 9b00 ldr r3, [sp, #0] - return (int16_t)(m_endTime - millis16()) < 0; - 9910: 1aeb subs r3, r5, r3 - if (timeout.timedOut()) { - 9912: 041b lsls r3, r3, #16 - 9914: d413 bmi.n 993e - 9916: 4630 mov r0, r6 - 9918: f000 fdb6 bl a488 - while (spiReceive() != 0XFF) { - 991c: 28ff cmp r0, #255 ; 0xff - 991e: 4604 mov r4, r0 - 9920: d1f3 bne.n 990a - m_spiDriver.send(data); - 9922: 21fd movs r1, #253 ; 0xfd - 9924: 4630 mov r0, r6 - 9926: f000 fdcd bl a4c4 - if (m_spiActive) { - 992a: f898 300e ldrb.w r3, [r8, #14] - 992e: b9fb cbnz r3, 9970 - if (!waitReady(SD_WRITE_TIMEOUT)) { - goto fail; - } - spiSend(STOP_TRAN_TOKEN); - spiStop(); - m_state = IDLE_STATE; - 9930: 2300 movs r3, #0 - 9932: f888 300f strb.w r3, [r8, #15] - 9936: 2001 movs r0, #1 - - fail: - error(SD_CARD_ERROR_STOP_TRAN); - spiStop(); - return false; -} - 9938: b002 add sp, #8 - 993a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (m_spiActive) { - 993e: f898 000e ldrb.w r0, [r8, #14] - m_errorCode = code; - 9942: 231e movs r3, #30 - 9944: f888 300d strb.w r3, [r8, #13] - 9948: 2800 cmp r0, #0 - 994a: d0f5 beq.n 9938 - sdCsWrite(m_csPin, true); - 994c: f898 000c ldrb.w r0, [r8, #12] - 9950: 2101 movs r1, #1 - 9952: f000 fd2d bl a3b0 - m_spiDriver.send(data); - 9956: 21ff movs r1, #255 ; 0xff - 9958: 4630 mov r0, r6 - 995a: f000 fdb3 bl a4c4 - m_spiDriver.deactivate(); - 995e: 4630 mov r0, r6 - 9960: f000 fd74 bl a44c - m_spiActive = false; - 9964: 2000 movs r0, #0 - 9966: f888 000e strb.w r0, [r8, #14] -} - 996a: b002 add sp, #8 - 996c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - sdCsWrite(m_csPin, true); - 9970: f898 000c ldrb.w r0, [r8, #12] - 9974: 2101 movs r1, #1 - 9976: f000 fd1b bl a3b0 - m_spiDriver.send(data); - 997a: 4621 mov r1, r4 - 997c: 4630 mov r0, r6 - 997e: f000 fda1 bl a4c4 - m_spiDriver.deactivate(); - 9982: 4630 mov r0, r6 - 9984: f000 fd62 bl a44c - m_spiActive = false; - 9988: 2300 movs r3, #0 - 998a: f888 300e strb.w r3, [r8, #14] -} - 998e: e7cf b.n 9930 - 9990: 1fff978c .word 0x1fff978c - -00009994 : -uint8_t SharedSpiCard::cardCommand(uint8_t cmd, uint32_t arg) { - 9994: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - if (!syncDevice()) { - 9998: 6803 ldr r3, [r0, #0] - 999a: 4c3a ldr r4, [pc, #232] ; (9a84 ) - 999c: 6a1b ldr r3, [r3, #32] -uint8_t SharedSpiCard::cardCommand(uint8_t cmd, uint32_t arg) { - 999e: b084 sub sp, #16 - 99a0: 42a3 cmp r3, r4 - 99a2: 4606 mov r6, r0 - 99a4: 9201 str r2, [sp, #4] - 99a6: 460f mov r7, r1 - 99a8: d15d bne.n 9a66 - if (m_state == WRITE_STATE) { - 99aa: 7bc3 ldrb r3, [r0, #15] - 99ac: 2b02 cmp r3, #2 - 99ae: d05f beq.n 9a70 - if (m_state == READ_STATE) { - 99b0: 2b01 cmp r3, #1 - 99b2: d062 beq.n 9a7a - if (!m_spiActive) { - 99b4: 7bb4 ldrb r4, [r6, #14] - 99b6: 2c00 cmp r4, #0 - 99b8: d040 beq.n 9a3c - m_spiDriver.activate(); - 99ba: 1d35 adds r5, r6, #4 - if (cmd != CMD12) { - 99bc: 2f0c cmp r7, #12 - 99be: d015 beq.n 99ec - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 99c0: f8df 80c4 ldr.w r8, [pc, #196] ; 9a88 - 99c4: f8d8 3000 ldr.w r3, [r8] - 99c8: 9303 str r3, [sp, #12] - return ret; - 99ca: 9c03 ldr r4, [sp, #12] - m_endTime = ms + millis16(); - 99cc: f504 7496 add.w r4, r4, #300 ; 0x12c - 99d0: b2a4 uxth r4, r4 - explicit Timeout(uint16_t ms) {set(ms);} - 99d2: e006 b.n 99e2 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 99d4: f8d8 3000 ldr.w r3, [r8] - 99d8: 9302 str r3, [sp, #8] - return ret; - 99da: 9b02 ldr r3, [sp, #8] - return (int16_t)(m_endTime - millis16()) < 0; - 99dc: 1ae3 subs r3, r4, r3 - if (timeout.timedOut()) { - 99de: 041b lsls r3, r3, #16 - 99e0: d43b bmi.n 9a5a - return m_spiDriver.receive(); - 99e2: 4628 mov r0, r5 - 99e4: f000 fd50 bl a488 - while (spiReceive() != 0XFF) { - 99e8: 28ff cmp r0, #255 ; 0xff - 99ea: d1f3 bne.n 99d4 - m_spiDriver.send(data); - 99ec: f047 0140 orr.w r1, r7, #64 ; 0x40 - 99f0: 4628 mov r0, r5 - 99f2: f000 fd67 bl a4c4 - for (int8_t i = 3; i >= 0; i--) { - 99f6: f10d 0804 add.w r8, sp, #4 - 99fa: ac02 add r4, sp, #8 - 99fc: f814 1d01 ldrb.w r1, [r4, #-1]! - 9a00: 4628 mov r0, r5 - 9a02: f000 fd5f bl a4c4 - 9a06: 45a0 cmp r8, r4 - 9a08: d1f8 bne.n 99fc - spiSend(cmd == CMD0 ? 0X95 : 0X87); - 9a0a: 2f00 cmp r7, #0 - 9a0c: bf0c ite eq - 9a0e: 2195 moveq r1, #149 ; 0x95 - 9a10: 2187 movne r1, #135 ; 0x87 - 9a12: 4628 mov r0, r5 - 9a14: f000 fd56 bl a4c4 - return m_spiDriver.receive(); - 9a18: 4628 mov r0, r5 - 9a1a: f000 fd35 bl a488 - 9a1e: 240a movs r4, #10 - 9a20: 4628 mov r0, r5 - 9a22: f000 fd31 bl a488 - } while (m_status & 0X80 && ++n < 10); - 9a26: 3c01 subs r4, #1 - 9a28: f010 0f80 tst.w r0, #128 ; 0x80 - m_status = spiReceive(); - 9a2c: 7430 strb r0, [r6, #16] - } while (m_status & 0X80 && ++n < 10); - 9a2e: b2a4 uxth r4, r4 - 9a30: d001 beq.n 9a36 - 9a32: 2c00 cmp r4, #0 - 9a34: d1f4 bne.n 9a20 -} - 9a36: b004 add sp, #16 - 9a38: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - m_spiDriver.activate(); - 9a3c: 1d35 adds r5, r6, #4 - 9a3e: 4628 mov r0, r5 - 9a40: f000 fcb8 bl a3b4 - sdCsWrite(m_csPin, false); - 9a44: 7b30 ldrb r0, [r6, #12] - 9a46: 4621 mov r1, r4 - 9a48: f000 fcb2 bl a3b0 - m_spiDriver.send(data); - 9a4c: 21ff movs r1, #255 ; 0xff - 9a4e: 4628 mov r0, r5 - 9a50: f000 fd38 bl a4c4 - m_spiActive = true; - 9a54: 2301 movs r3, #1 - 9a56: 73b3 strb r3, [r6, #14] -} - 9a58: e7b0 b.n 99bc - if (!waitReady(SD_CMD_TIMEOUT) && cmd != CMD0) { - 9a5a: 2f00 cmp r7, #0 - 9a5c: d0c6 beq.n 99ec - return 0XFF; - 9a5e: 20ff movs r0, #255 ; 0xff -} - 9a60: b004 add sp, #16 - 9a62: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (!syncDevice()) { - 9a66: 4798 blx r3 - 9a68: 2800 cmp r0, #0 - 9a6a: d1a3 bne.n 99b4 - return 0XFF; - 9a6c: 20ff movs r0, #255 ; 0xff - 9a6e: e7f7 b.n 9a60 - return writeStop(); - 9a70: f7ff ff3e bl 98f0 - if (!syncDevice()) { - 9a74: 2800 cmp r0, #0 - 9a76: d0f9 beq.n 9a6c - 9a78: e79c b.n 99b4 - return readStop(); - 9a7a: f000 f97d bl 9d78 - if (!syncDevice()) { - 9a7e: 2800 cmp r0, #0 - 9a80: d0f4 beq.n 9a6c - 9a82: e797 b.n 99b4 - 9a84: 00009ddd .word 0x00009ddd - 9a88: 1fff978c .word 0x1fff978c - -00009a8c : -bool SharedSpiCard::begin(SdSpiConfig spiConfig) { - 9a8c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - 9a90: b089 sub sp, #36 ; 0x24 - 9a92: ac01 add r4, sp, #4 - 9a94: e884 000e stmia.w r4, {r1, r2, r3} - 9a98: 4605 mov r5, r0 - m_spiActive = false; - 9a9a: 2600 movs r6, #0 - 9a9c: f89d 0004 ldrb.w r0, [sp, #4] - m_csPin = spiConfig.csPin; - 9aa0: 7328 strb r0, [r5, #12] - m_spiActive = false; - 9aa2: 73ae strb r6, [r5, #14] - m_errorCode = SD_CARD_ERROR_NONE; - 9aa4: 736e strb r6, [r5, #13] - m_type = 0; - 9aa6: 746e strb r6, [r5, #17] - 9aa8: 4690 mov r8, r2 - sdCsInit(m_csPin); - 9aaa: f000 fc7d bl a3a8 - sdCsWrite(m_csPin, true); - 9aae: 7b28 ldrb r0, [r5, #12] - 9ab0: 2101 movs r1, #1 - 9ab2: f000 fc7d bl a3b0 - /** Save high speed SPISettings after SD initialization. - * - * \param[in] maxSck Maximum SCK frequency. - */ - void setSckSpeed(uint32_t maxSck) { - m_spiSettings = SPISettings(maxSck, MSBFIRST, SPI_MODE0); - 9ab6: 4a6e ldr r2, [pc, #440] ; (9c70 ) - 9ab8: 60aa str r2, [r5, #8] - 9aba: e894 0007 ldmia.w r4, {r0, r1, r2} - 9abe: ab05 add r3, sp, #20 - 9ac0: e883 0007 stmia.w r3, {r0, r1, r2} - m_spiDriver.setSckSpeed(maxSck); - 9ac4: 1d2f adds r7, r5, #4 - m_spiDriver.begin(spiConfig); - 9ac6: cb0e ldmia r3, {r1, r2, r3} - 9ac8: 4638 mov r0, r7 - 9aca: f000 fcaf bl a42c - if (!m_spiActive) { - 9ace: 7bac ldrb r4, [r5, #14] - m_state = IDLE_STATE; - 9ad0: 73ee strb r6, [r5, #15] - if (!m_spiActive) { - 9ad2: 2c00 cmp r4, #0 - 9ad4: d057 beq.n 9b86 - sdCsWrite(m_csPin, true); - 9ad6: 7b28 ldrb r0, [r5, #12] - 9ad8: 2101 movs r1, #1 - 9ada: f000 fc69 bl a3b0 - 9ade: 240a movs r4, #10 - m_spiDriver.send(data); - 9ae0: 21ff movs r1, #255 ; 0xff - 9ae2: 4638 mov r0, r7 - 9ae4: f000 fcee bl a4c4 - for (uint8_t i = 0; i < 10; i++) { - 9ae8: 1e61 subs r1, r4, #1 - 9aea: f011 04ff ands.w r4, r1, #255 ; 0xff - 9aee: d1f7 bne.n 9ae0 - sdCsWrite(m_csPin, false); - 9af0: 4621 mov r1, r4 - 9af2: 7b28 ldrb r0, [r5, #12] - 9af4: f000 fc5c bl a3b0 - 9af8: 240a movs r4, #10 - if (cardCommand(CMD0, 0) == R1_IDLE_STATE) { - 9afa: 2200 movs r2, #0 - 9afc: 4611 mov r1, r2 - 9afe: 4628 mov r0, r5 - 9b00: f7ff ff48 bl 9994 - 9b04: 2801 cmp r0, #1 - 9b06: 4606 mov r6, r0 - if (i == SD_CMD0_RETRY) { - 9b08: f104 33ff add.w r3, r4, #4294967295 ; 0xffffffff - if (cardCommand(CMD0, 0) == R1_IDLE_STATE) { - 9b0c: d00a beq.n 9b24 - if (i == SD_CMD0_RETRY) { - 9b0e: f013 04ff ands.w r4, r3, #255 ; 0xff - 9b12: d1f2 bne.n 9afa - 9b14: 2301 movs r3, #1 - if (m_spiActive) { - 9b16: 7ba8 ldrb r0, [r5, #14] - m_errorCode = code; - 9b18: 736b strb r3, [r5, #13] - 9b1a: 2800 cmp r0, #0 - 9b1c: d141 bne.n 9ba2 -} - 9b1e: b009 add sp, #36 ; 0x24 - 9b20: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - if (!(cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) { - 9b24: f44f 72d5 mov.w r2, #426 ; 0x1aa - 9b28: 2108 movs r1, #8 - 9b2a: 4628 mov r0, r5 - 9b2c: f7ff ff32 bl 9994 - 9b30: 0742 lsls r2, r0, #29 - 9b32: d546 bpl.n 9bc2 - m_type = value; - 9b34: 746e strb r6, [r5, #17] - } - 9b36: 2600 movs r6, #0 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 9b38: f8df 9138 ldr.w r9, [pc, #312] ; 9c74 - 9b3c: f8d9 3000 ldr.w r3, [r9] - 9b40: 9304 str r3, [sp, #16] - return ret; - 9b42: 9c04 ldr r4, [sp, #16] - m_endTime = ms + millis16(); - 9b44: f504 64fa add.w r4, r4, #2000 ; 0x7d0 - 9b48: b2a4 uxth r4, r4 - } - 9b4a: e006 b.n 9b5a - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - 9b4c: f8d9 3000 ldr.w r3, [r9] - 9b50: 9305 str r3, [sp, #20] - return ret; - 9b52: 9b05 ldr r3, [sp, #20] - return (int16_t)(m_endTime - millis16()) < 0; - 9b54: 1ae3 subs r3, r4, r3 - if (timeout.timedOut()) { - 9b56: 041b lsls r3, r3, #16 - 9b58: d45b bmi.n 9c12 - cardCommand(CMD55, 0); - 9b5a: 2137 movs r1, #55 ; 0x37 - 9b5c: 2200 movs r2, #0 - 9b5e: 4628 mov r0, r5 - 9b60: f7ff ff18 bl 9994 - return cardCommand(cmd, arg); - 9b64: 4632 mov r2, r6 - 9b66: 2129 movs r1, #41 ; 0x29 - 9b68: 4628 mov r0, r5 - 9b6a: f7ff ff13 bl 9994 - while (cardAcmd(ACMD41, arg) != R1_READY_STATE) { - 9b6e: 2800 cmp r0, #0 - 9b70: d1ec bne.n 9b4c - if (type() == SD_CARD_TYPE_SD2) { - 9b72: 7c6b ldrb r3, [r5, #17] - 9b74: 2b02 cmp r3, #2 - 9b76: d05e beq.n 9c36 - if (m_spiActive) { - 9b78: 7bab ldrb r3, [r5, #14] - 9b7a: 2b00 cmp r3, #0 - 9b7c: d14d bne.n 9c1a - for (uint32_t i=0; i<23; i++) { - 9b7e: 493e ldr r1, [pc, #248] ; (9c78 ) - if (clock >= F_BUS / ctar_div_table[i]) break; - 9b80: 483e ldr r0, [pc, #248] ; (9c7c ) - } - 9b82: 2200 movs r2, #0 - 9b84: e035 b.n 9bf2 - m_spiDriver.activate(); - 9b86: 4638 mov r0, r7 - 9b88: f000 fc14 bl a3b4 - sdCsWrite(m_csPin, false); - 9b8c: 7b28 ldrb r0, [r5, #12] - 9b8e: 4621 mov r1, r4 - 9b90: f000 fc0e bl a3b0 - m_spiDriver.send(data); - 9b94: 21ff movs r1, #255 ; 0xff - 9b96: 4638 mov r0, r7 - 9b98: f000 fc94 bl a4c4 - m_spiActive = true; - 9b9c: 2301 movs r3, #1 - 9b9e: 73ab strb r3, [r5, #14] -} - 9ba0: e799 b.n 9ad6 - sdCsWrite(m_csPin, true); - 9ba2: 7b28 ldrb r0, [r5, #12] - 9ba4: 2101 movs r1, #1 - 9ba6: f000 fc03 bl a3b0 - m_spiDriver.send(data); - 9baa: 21ff movs r1, #255 ; 0xff - 9bac: 4638 mov r0, r7 - 9bae: f000 fc89 bl a4c4 - m_spiDriver.deactivate(); - 9bb2: 4638 mov r0, r7 - 9bb4: f000 fc4a bl a44c - m_spiActive = false; - 9bb8: 2000 movs r0, #0 - 9bba: 73a8 strb r0, [r5, #14] -} - 9bbc: b009 add sp, #36 ; 0x24 - 9bbe: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - m_type = value; - 9bc2: 2302 movs r3, #2 - 9bc4: 746b strb r3, [r5, #17] - 9bc6: 2404 movs r4, #4 - return m_spiDriver.receive(); - 9bc8: 4638 mov r0, r7 - 9bca: f000 fc5d bl a488 - for (uint8_t i = 0; i < 4; i++) { - 9bce: 1e63 subs r3, r4, #1 - 9bd0: f013 04ff ands.w r4, r3, #255 ; 0xff - m_status = spiReceive(); - 9bd4: 7428 strb r0, [r5, #16] - for (uint8_t i = 0; i < 4; i++) { - 9bd6: d1f7 bne.n 9bc8 - if (m_status != 0XAA) { - 9bd8: 28aa cmp r0, #170 ; 0xaa - 9bda: d11c bne.n 9c16 - arg = type() == SD_CARD_TYPE_SD2 ? 0X40000000 : 0; - 9bdc: 7c6e ldrb r6, [r5, #17] - 9bde: f1a6 0602 sub.w r6, r6, #2 - 9be2: fab6 f686 clz r6, r6 - 9be6: 0976 lsrs r6, r6, #5 - 9be8: 07b6 lsls r6, r6, #30 - 9bea: e7a5 b.n 9b38 - for (uint32_t i=0; i<23; i++) { - 9bec: 3201 adds r2, #1 - 9bee: 2a17 cmp r2, #23 - 9bf0: d03c beq.n 9c6c - if (clock >= F_BUS / ctar_div_table[i]) break; - 9bf2: f831 3b02 ldrh.w r3, [r1], #2 - 9bf6: fbb0 f3f3 udiv r3, r0, r3 - 9bfa: 4543 cmp r3, r8 - 9bfc: d8f6 bhi.n 9bec - t = ctar_clock_table[i]; - 9bfe: 4b20 ldr r3, [pc, #128] ; (9c80 ) - ctar = c | t; - 9c00: f853 3022 ldr.w r3, [r3, r2, lsl #2] - return true; - 9c04: 2001 movs r0, #1 - 9c06: f043 5360 orr.w r3, r3, #939524096 ; 0x38000000 - 9c0a: 60ab str r3, [r5, #8] -} - 9c0c: b009 add sp, #36 ; 0x24 - 9c0e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 9c12: 2317 movs r3, #23 - 9c14: e77f b.n 9b16 - 9c16: 2306 movs r3, #6 - 9c18: e77d b.n 9b16 - sdCsWrite(m_csPin, true); - 9c1a: 7b28 ldrb r0, [r5, #12] - 9c1c: 2101 movs r1, #1 - 9c1e: f000 fbc7 bl a3b0 - m_spiDriver.send(data); - 9c22: 21ff movs r1, #255 ; 0xff - 9c24: 4638 mov r0, r7 - 9c26: f000 fc4d bl a4c4 - m_spiDriver.deactivate(); - 9c2a: 4638 mov r0, r7 - 9c2c: f000 fc0e bl a44c - m_spiActive = false; - 9c30: 2300 movs r3, #0 - 9c32: 73ab strb r3, [r5, #14] -} - 9c34: e7a3 b.n 9b7e - if (cardCommand(CMD58, 0)) { - 9c36: 4602 mov r2, r0 - 9c38: 213a movs r1, #58 ; 0x3a - 9c3a: 4628 mov r0, r5 - 9c3c: f7ff feaa bl 9994 - 9c40: b990 cbnz r0, 9c68 - return m_spiDriver.receive(); - 9c42: 4638 mov r0, r7 - 9c44: f000 fc20 bl a488 - if ((spiReceive() & 0XC0) == 0XC0) { - 9c48: f000 03c0 and.w r3, r0, #192 ; 0xc0 - 9c4c: 2bc0 cmp r3, #192 ; 0xc0 - m_type = value; - 9c4e: bf04 itt eq - 9c50: 2303 moveq r3, #3 - 9c52: 746b strbeq r3, [r5, #17] - return m_spiDriver.receive(); - 9c54: 4638 mov r0, r7 - 9c56: f000 fc17 bl a488 - 9c5a: 4638 mov r0, r7 - 9c5c: f000 fc14 bl a488 - 9c60: 4638 mov r0, r7 - 9c62: f000 fc11 bl a488 - for (uint8_t i = 0; i < 3; i++) { - 9c66: e787 b.n 9b78 - 9c68: 2312 movs r3, #18 - 9c6a: e754 b.n 9b16 - 9c6c: 2216 movs r2, #22 - 9c6e: e7c6 b.n 9bfe - 9c70: 38005006 .word 0x38005006 - 9c74: 1fff978c .word 0x1fff978c - 9c78: 000183a4 .word 0x000183a4 - 9c7c: 02dc6c00 .word 0x02dc6c00 - 9c80: 000183d4 .word 0x000183d4 - -00009c84 : -bool SharedSpiCard::readRegister(uint8_t cmd, void* buf) { - 9c84: b5f8 push {r3, r4, r5, r6, r7, lr} - 9c86: 4616 mov r6, r2 - if (cardCommand(cmd, 0)) { - 9c88: 2200 movs r2, #0 -bool SharedSpiCard::readRegister(uint8_t cmd, void* buf) { - 9c8a: 4604 mov r4, r0 - if (cardCommand(cmd, 0)) { - 9c8c: f7ff fe82 bl 9994 - 9c90: b198 cbz r0, 9cba - m_errorCode = code; - 9c92: 231b movs r3, #27 - 9c94: 7363 strb r3, [r4, #13] - if (m_spiActive) { - 9c96: 7ba0 ldrb r0, [r4, #14] - 9c98: b900 cbnz r0, 9c9c -} - 9c9a: bdf8 pop {r3, r4, r5, r6, r7, pc} - sdCsWrite(m_csPin, true); - 9c9c: 7b20 ldrb r0, [r4, #12] - m_spiDriver.send(data); - 9c9e: 1d25 adds r5, r4, #4 - sdCsWrite(m_csPin, true); - 9ca0: 2101 movs r1, #1 - 9ca2: f000 fb85 bl a3b0 - m_spiDriver.send(data); - 9ca6: 21ff movs r1, #255 ; 0xff - 9ca8: 4628 mov r0, r5 - 9caa: f000 fc0b bl a4c4 - m_spiDriver.deactivate(); - 9cae: 4628 mov r0, r5 - 9cb0: f000 fbcc bl a44c - m_spiActive = false; - 9cb4: 2000 movs r0, #0 - 9cb6: 73a0 strb r0, [r4, #14] -} - 9cb8: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (!readData(dst, 16)) { - 9cba: 4605 mov r5, r0 - 9cbc: 2210 movs r2, #16 - 9cbe: 4631 mov r1, r6 - 9cc0: 4620 mov r0, r4 - 9cc2: f7ff fd97 bl 97f4 - 9cc6: 2800 cmp r0, #0 - 9cc8: d0e5 beq.n 9c96 - if (m_spiActive) { - 9cca: 7ba6 ldrb r6, [r4, #14] - 9ccc: 2e00 cmp r6, #0 - 9cce: d0e4 beq.n 9c9a - sdCsWrite(m_csPin, true); - 9cd0: 7b20 ldrb r0, [r4, #12] - m_spiDriver.send(data); - 9cd2: 1d27 adds r7, r4, #4 - sdCsWrite(m_csPin, true); - 9cd4: 2101 movs r1, #1 - 9cd6: f000 fb6b bl a3b0 - m_spiDriver.send(data); - 9cda: 21ff movs r1, #255 ; 0xff - 9cdc: 4638 mov r0, r7 - 9cde: f000 fbf1 bl a4c4 - m_spiDriver.deactivate(); - 9ce2: 4638 mov r0, r7 - 9ce4: f000 fbb2 bl a44c - m_spiActive = false; - 9ce8: 73a5 strb r5, [r4, #14] -} - 9cea: 4630 mov r0, r6 -} - 9cec: bdf8 pop {r3, r4, r5, r6, r7, pc} - 9cee: bf00 nop - -00009cf0 : -uint32_t SharedSpiCard::sectorCount() { - 9cf0: b500 push {lr} - 9cf2: b085 sub sp, #20 - return readRegister(CMD9, csd); - 9cf4: 466a mov r2, sp - 9cf6: 2109 movs r1, #9 - 9cf8: f7ff ffc4 bl 9c84 - return readCSD(&csd) ? sdCardCapacity(&csd) : 0; - 9cfc: b138 cbz r0, 9d0e - csd1_t v1; - csd2_t v2; -}; -//----------------------------------------------------------------------------- -inline uint32_t sdCardCapacity(csd_t* csd) { - if (csd->v1.csd_ver == 0) { - 9cfe: f89d 3000 ldrb.w r3, [sp] - 9d02: f013 03c0 ands.w r3, r3, #192 ; 0xc0 - 9d06: d005 beq.n 9d14 - uint16_t c_size = (csd->v1.c_size_high << 10) - | (csd->v1.c_size_mid << 2) | csd->v1.c_size_low; - uint8_t c_size_mult = (csd->v1.c_size_mult_high << 1) - | csd->v1.c_size_mult_low; - return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); - } else if (csd->v2.csd_ver == 1) { - 9d08: 2b40 cmp r3, #64 ; 0x40 - 9d0a: d024 beq.n 9d56 - 9d0c: 2000 movs r0, #0 -} - 9d0e: b005 add sp, #20 - 9d10: f85d fb04 ldr.w pc, [sp], #4 - uint8_t c_size_mult = (csd->v1.c_size_mult_high << 1) - 9d14: f89d 3009 ldrb.w r3, [sp, #9] - | csd->v1.c_size_mult_low; - 9d18: f89d 200a ldrb.w r2, [sp, #10] - uint16_t c_size = (csd->v1.c_size_high << 10) - 9d1c: f89d 1006 ldrb.w r1, [sp, #6] - | (csd->v1.c_size_mid << 2) | csd->v1.c_size_low; - 9d20: f89d 0007 ldrb.w r0, [sp, #7] - 9d24: f89d c008 ldrb.w ip, [sp, #8] - uint8_t c_size_mult = (csd->v1.c_size_mult_high << 1) - 9d28: f003 0303 and.w r3, r3, #3 - | csd->v1.c_size_mult_low; - 9d2c: 005b lsls r3, r3, #1 - return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); - 9d2e: ea43 13d2 orr.w r3, r3, r2, lsr #7 - uint8_t read_bl_len = csd->v1.read_bl_len; - 9d32: f89d 2005 ldrb.w r2, [sp, #5] - uint16_t c_size = (csd->v1.c_size_high << 10) - 9d36: f001 0103 and.w r1, r1, #3 - | (csd->v1.c_size_mid << 2) | csd->v1.c_size_low; - 9d3a: 0080 lsls r0, r0, #2 - 9d3c: ea40 2081 orr.w r0, r0, r1, lsl #10 - return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); - 9d40: f002 020f and.w r2, r2, #15 - | (csd->v1.c_size_mid << 2) | csd->v1.c_size_low; - 9d44: ea40 109c orr.w r0, r0, ip, lsr #6 - return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); - 9d48: 4413 add r3, r2 - 9d4a: 3b07 subs r3, #7 - 9d4c: 3001 adds r0, #1 - 9d4e: 4098 lsls r0, r3 - 9d50: b005 add sp, #20 - 9d52: f85d fb04 ldr.w pc, [sp], #4 - return (((uint32_t)csd->v2.c_size_high << 16) + - ((uint16_t)csd->v2.c_size_mid << 8) + csd->v2.c_size_low + 1) << 10; - 9d56: f89d 0009 ldrb.w r0, [sp, #9] - return (((uint32_t)csd->v2.c_size_high << 16) + - 9d5a: f89d 3007 ldrb.w r3, [sp, #7] - ((uint16_t)csd->v2.c_size_mid << 8) + csd->v2.c_size_low + 1) << 10; - 9d5e: f89d 2008 ldrb.w r2, [sp, #8] - return (((uint32_t)csd->v2.c_size_high << 16) + - 9d62: f003 033f and.w r3, r3, #63 ; 0x3f - ((uint16_t)csd->v2.c_size_mid << 8) + csd->v2.c_size_low + 1) << 10; - 9d66: 3001 adds r0, #1 - 9d68: eb00 4003 add.w r0, r0, r3, lsl #16 - 9d6c: eb00 2002 add.w r0, r0, r2, lsl #8 - 9d70: 0280 lsls r0, r0, #10 - 9d72: b005 add sp, #20 - 9d74: f85d fb04 ldr.w pc, [sp], #4 - -00009d78 : -bool SharedSpiCard::readStop() { - 9d78: b5f8 push {r3, r4, r5, r6, r7, lr} - m_state = IDLE_STATE; - 9d7a: 2700 movs r7, #0 - 9d7c: 73c7 strb r7, [r0, #15] - if (cardCommand(CMD12, 0)) { - 9d7e: 463a mov r2, r7 - 9d80: 210c movs r1, #12 -bool SharedSpiCard::readStop() { - 9d82: 4604 mov r4, r0 - if (cardCommand(CMD12, 0)) { - 9d84: f7ff fe06 bl 9994 - if (m_spiActive) { - 9d88: 7ba6 ldrb r6, [r4, #14] - if (cardCommand(CMD12, 0)) { - 9d8a: b998 cbnz r0, 9db4 - if (m_spiActive) { - 9d8c: b916 cbnz r6, 9d94 - return true; - 9d8e: 2601 movs r6, #1 -} - 9d90: 4630 mov r0, r6 - 9d92: bdf8 pop {r3, r4, r5, r6, r7, pc} - sdCsWrite(m_csPin, true); - 9d94: 4605 mov r5, r0 - m_spiDriver.send(data); - 9d96: 1d27 adds r7, r4, #4 - sdCsWrite(m_csPin, true); - 9d98: 7b20 ldrb r0, [r4, #12] - 9d9a: 2101 movs r1, #1 - 9d9c: f000 fb08 bl a3b0 - m_spiDriver.send(data); - 9da0: 21ff movs r1, #255 ; 0xff - 9da2: 4638 mov r0, r7 - 9da4: f000 fb8e bl a4c4 - m_spiDriver.deactivate(); - 9da8: 4638 mov r0, r7 - 9daa: f000 fb4f bl a44c - m_spiActive = false; - 9dae: 73a5 strb r5, [r4, #14] -} - 9db0: 4630 mov r0, r6 - 9db2: bdf8 pop {r3, r4, r5, r6, r7, pc} - m_errorCode = code; - 9db4: 2309 movs r3, #9 - 9db6: 7363 strb r3, [r4, #13] - if (m_spiActive) { - 9db8: 2e00 cmp r6, #0 - 9dba: d0e9 beq.n 9d90 - sdCsWrite(m_csPin, true); - 9dbc: 7b20 ldrb r0, [r4, #12] - m_spiDriver.send(data); - 9dbe: 1d25 adds r5, r4, #4 - sdCsWrite(m_csPin, true); - 9dc0: 2101 movs r1, #1 - 9dc2: f000 faf5 bl a3b0 - m_spiDriver.send(data); - 9dc6: 21ff movs r1, #255 ; 0xff - 9dc8: 4628 mov r0, r5 - 9dca: f000 fb7b bl a4c4 -} - 9dce: 463e mov r6, r7 - m_spiDriver.deactivate(); - 9dd0: 4628 mov r0, r5 - 9dd2: f000 fb3b bl a44c - m_spiActive = false; - 9dd6: 73a7 strb r7, [r4, #14] -} - 9dd8: 4630 mov r0, r6 - 9dda: bdf8 pop {r3, r4, r5, r6, r7, pc} - -00009ddc : - if (m_state == WRITE_STATE) { - 9ddc: 7bc3 ldrb r3, [r0, #15] - 9dde: 2b02 cmp r3, #2 - 9de0: d003 beq.n 9dea - if (m_state == READ_STATE) { - 9de2: 2b01 cmp r3, #1 - 9de4: d003 beq.n 9dee -} - 9de6: 2001 movs r0, #1 - 9de8: 4770 bx lr - return writeStop(); - 9dea: f7ff bd81 b.w 98f0 - return readStop(); - 9dee: f7ff bfc3 b.w 9d78 - 9df2: bf00 nop - -00009df4 : -bool SharedSpiCard::writeSector(uint32_t sector, const uint8_t* src) { - 9df4: b5f8 push {r3, r4, r5, r6, r7, lr} - if (type() != SD_CARD_TYPE_SDHC) { - 9df6: 7c43 ldrb r3, [r0, #17] - 9df8: 2b03 cmp r3, #3 - sector <<= 9; - 9dfa: bf18 it ne - 9dfc: 0249 lslne r1, r1, #9 -bool SharedSpiCard::writeSector(uint32_t sector, const uint8_t* src) { - 9dfe: 4616 mov r6, r2 - if (cardCommand(CMD24, sector)) { - 9e00: 460a mov r2, r1 - 9e02: 2118 movs r1, #24 -bool SharedSpiCard::writeSector(uint32_t sector, const uint8_t* src) { - 9e04: 4604 mov r4, r0 - if (cardCommand(CMD24, sector)) { - 9e06: f7ff fdc5 bl 9994 - 9e0a: 4605 mov r5, r0 - 9e0c: b198 cbz r0, 9e36 - m_errorCode = code; - 9e0e: 230d movs r3, #13 - 9e10: 7363 strb r3, [r4, #13] - if (m_spiActive) { - 9e12: 7ba0 ldrb r0, [r4, #14] - 9e14: b900 cbnz r0, 9e18 -} - 9e16: bdf8 pop {r3, r4, r5, r6, r7, pc} - sdCsWrite(m_csPin, true); - 9e18: 7b20 ldrb r0, [r4, #12] - m_spiDriver.send(data); - 9e1a: 1d25 adds r5, r4, #4 - sdCsWrite(m_csPin, true); - 9e1c: 2101 movs r1, #1 - 9e1e: f000 fac7 bl a3b0 - m_spiDriver.send(data); - 9e22: 21ff movs r1, #255 ; 0xff - 9e24: 4628 mov r0, r5 - 9e26: f000 fb4d bl a4c4 - m_spiDriver.deactivate(); - 9e2a: 4628 mov r0, r5 - 9e2c: f000 fb0e bl a44c - m_spiActive = false; - 9e30: 2000 movs r0, #0 - 9e32: 73a0 strb r0, [r4, #14] -} - 9e34: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (!writeData(DATA_START_SECTOR, src)) { - 9e36: 4632 mov r2, r6 - 9e38: 21fe movs r1, #254 ; 0xfe - 9e3a: 4620 mov r0, r4 - 9e3c: f7ff fd26 bl 988c - 9e40: 2800 cmp r0, #0 - 9e42: d0e6 beq.n 9e12 - if (m_spiActive) { - 9e44: 7ba6 ldrb r6, [r4, #14] - 9e46: 2e00 cmp r6, #0 - 9e48: d0e5 beq.n 9e16 - sdCsWrite(m_csPin, true); - 9e4a: 7b20 ldrb r0, [r4, #12] - m_spiDriver.send(data); - 9e4c: 1d27 adds r7, r4, #4 - sdCsWrite(m_csPin, true); - 9e4e: 2101 movs r1, #1 - 9e50: f000 faae bl a3b0 - m_spiDriver.send(data); - 9e54: 21ff movs r1, #255 ; 0xff - 9e56: 4638 mov r0, r7 - 9e58: f000 fb34 bl a4c4 - m_spiDriver.deactivate(); - 9e5c: 4638 mov r0, r7 - 9e5e: f000 faf5 bl a44c - m_spiActive = false; - 9e62: 73a5 strb r5, [r4, #14] - return true; - 9e64: 4630 mov r0, r6 -} - 9e66: bdf8 pop {r3, r4, r5, r6, r7, pc} - -00009e68 : -bool DedicatedSpiCard::readSector(uint32_t sector, uint8_t* dst) { - return readSectors(sector, dst, 1); -} -//------------------------------------------------------------------------------ -bool DedicatedSpiCard::readSectors( - uint32_t sector, uint8_t* dst, size_t ns) { - 9e68: b5f8 push {r3, r4, r5, r6, r7, lr} - 9e6a: 4606 mov r6, r0 - if (sdState() != READ_STATE || sector != m_curSector) { - 9e6c: 7bc0 ldrb r0, [r0, #15] - 9e6e: 2801 cmp r0, #1 - uint32_t sector, uint8_t* dst, size_t ns) { - 9e70: 460d mov r5, r1 - 9e72: 4614 mov r4, r2 - 9e74: 461f mov r7, r3 - if (sdState() != READ_STATE || sector != m_curSector) { - 9e76: d102 bne.n 9e7e - 9e78: 6973 ldr r3, [r6, #20] - 9e7a: 428b cmp r3, r1 - 9e7c: d00c beq.n 9e98 - if (type() != SD_CARD_TYPE_SDHC) { - 9e7e: 7c73 ldrb r3, [r6, #17] - 9e80: 2b03 cmp r3, #3 - sector <<= 9; - 9e82: bf14 ite ne - 9e84: 026a lslne r2, r5, #9 - 9e86: 462a moveq r2, r5 - if (cardCommand(CMD18, sector)) { - 9e88: 2112 movs r1, #18 - 9e8a: 4630 mov r0, r6 - 9e8c: f7ff fd82 bl 9994 - 9e90: b9f8 cbnz r0, 9ed2 - m_state = READ_STATE; - 9e92: 2301 movs r3, #1 - 9e94: 73f3 strb r3, [r6, #15] - if (!readStart(sector)) { - goto fail; - } - m_curSector = sector; - 9e96: 6175 str r5, [r6, #20] - if (!readStart(sector)) { - 9e98: 2500 movs r5, #0 - } - for (size_t i = 0; i < ns; i++, dst += 512) { - 9e9a: b917 cbnz r7, 9ea2 - 9e9c: e00e b.n 9ebc - 9e9e: 42af cmp r7, r5 - 9ea0: d00c beq.n 9ebc - return readData(dst, 512); - 9ea2: 4621 mov r1, r4 - 9ea4: f44f 7200 mov.w r2, #512 ; 0x200 - 9ea8: 4630 mov r0, r6 - 9eaa: f7ff fca3 bl 97f4 - for (size_t i = 0; i < ns; i++, dst += 512) { - 9eae: 3501 adds r5, #1 - 9eb0: f504 7400 add.w r4, r4, #512 ; 0x200 - if (!readData(dst)) { - 9eb4: 2800 cmp r0, #0 - 9eb6: d1f2 bne.n 9e9e - } - m_curSector += ns; - return m_dedicatedSpi ? true : readStop(); - - fail: - return false; - 9eb8: 2000 movs r0, #0 -} - 9eba: bdf8 pop {r3, r4, r5, r6, r7, pc} - m_curSector += ns; - 9ebc: 6973 ldr r3, [r6, #20] - return m_dedicatedSpi ? true : readStop(); - 9ebe: 7e30 ldrb r0, [r6, #24] - m_curSector += ns; - 9ec0: 443b add r3, r7 - 9ec2: 6173 str r3, [r6, #20] - return m_dedicatedSpi ? true : readStop(); - 9ec4: 2800 cmp r0, #0 - 9ec6: d1f8 bne.n 9eba - 9ec8: 4630 mov r0, r6 -} - 9eca: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - return m_dedicatedSpi ? true : readStop(); - 9ece: f7ff bf53 b.w 9d78 - if (m_spiActive) { - 9ed2: 7bb3 ldrb r3, [r6, #14] - m_errorCode = code; - 9ed4: 220c movs r2, #12 - 9ed6: 7372 strb r2, [r6, #13] - 9ed8: 2b00 cmp r3, #0 - 9eda: d0ed beq.n 9eb8 - sdCsWrite(m_csPin, true); - 9edc: 7b30 ldrb r0, [r6, #12] - m_spiDriver.send(data); - 9ede: 1d34 adds r4, r6, #4 - sdCsWrite(m_csPin, true); - 9ee0: 2101 movs r1, #1 - 9ee2: f000 fa65 bl a3b0 - m_spiDriver.send(data); - 9ee6: 21ff movs r1, #255 ; 0xff - 9ee8: 4620 mov r0, r4 - 9eea: f000 faeb bl a4c4 - m_spiDriver.deactivate(); - 9eee: 4620 mov r0, r4 - 9ef0: f000 faac bl a44c - m_spiActive = false; - 9ef4: 2000 movs r0, #0 - 9ef6: 73b0 strb r0, [r6, #14] -} - 9ef8: bdf8 pop {r3, r4, r5, r6, r7, pc} - 9efa: bf00 nop - -00009efc : -//------------------------------------------------------------------------------ -bool DedicatedSpiCard::readSectorsCallback(uint32_t sector, uint8_t* dst, size_t ns, - void (*callback)(uint32_t sector, uint8_t *buf, void *context), void *context) { - 9efc: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 9f00: 469b mov fp, r3 - if (sdState() != READ_STATE || sector != m_curSector) { - 9f02: 7bc3 ldrb r3, [r0, #15] - void (*callback)(uint32_t sector, uint8_t *buf, void *context), void *context) { - 9f04: f8dd 9028 ldr.w r9, [sp, #40] ; 0x28 - 9f08: f8dd 802c ldr.w r8, [sp, #44] ; 0x2c - if (sdState() != READ_STATE || sector != m_curSector) { - 9f0c: 2b01 cmp r3, #1 - void (*callback)(uint32_t sector, uint8_t *buf, void *context), void *context) { - 9f0e: 4606 mov r6, r0 - 9f10: 460c mov r4, r1 - 9f12: 4615 mov r5, r2 - if (sdState() != READ_STATE || sector != m_curSector) { - 9f14: d102 bne.n 9f1c - 9f16: 6943 ldr r3, [r0, #20] - 9f18: 428b cmp r3, r1 - 9f1a: d00c beq.n 9f36 - if (type() != SD_CARD_TYPE_SDHC) { - 9f1c: 7c73 ldrb r3, [r6, #17] - 9f1e: 2b03 cmp r3, #3 - sector <<= 9; - 9f20: bf14 ite ne - 9f22: 0262 lslne r2, r4, #9 - 9f24: 4622 moveq r2, r4 - if (cardCommand(CMD18, sector)) { - 9f26: 2112 movs r1, #18 - 9f28: 4630 mov r0, r6 - 9f2a: f7ff fd33 bl 9994 - 9f2e: bb30 cbnz r0, 9f7e - m_state = READ_STATE; - 9f30: 2301 movs r3, #1 - if (!readStart(sector)) { - goto fail; - } - m_curSector = sector; - 9f32: 6174 str r4, [r6, #20] - m_state = READ_STATE; - 9f34: 73f3 strb r3, [r6, #15] - } - for (size_t i = 0; i < ns; i++) { - 9f36: eb04 0a0b add.w sl, r4, fp - 9f3a: f1bb 0f00 cmp.w fp, #0 - 9f3e: d103 bne.n 9f48 - 9f40: e012 b.n 9f68 - if (readData(dst)) { - callback(sector + i, dst, context); - 9f42: 47c8 blx r9 - for (size_t i = 0; i < ns; i++) { - 9f44: 45a2 cmp sl, r4 - 9f46: d00f beq.n 9f68 - return readData(dst, 512); - 9f48: f44f 7200 mov.w r2, #512 ; 0x200 - 9f4c: 4629 mov r1, r5 - 9f4e: 4630 mov r0, r6 - 9f50: f7ff fc50 bl 97f4 - 9f54: 4607 mov r7, r0 - callback(sector + i, dst, context); - 9f56: 4642 mov r2, r8 - 9f58: 4620 mov r0, r4 - 9f5a: 4629 mov r1, r5 - for (size_t i = 0; i < ns; i++) { - 9f5c: 3401 adds r4, #1 - if (readData(dst)) { - 9f5e: 2f00 cmp r7, #0 - 9f60: d1ef bne.n 9f42 - } - } - m_curSector += ns; - return m_dedicatedSpi ? true : readStop(); - fail: - return false; - 9f62: 2000 movs r0, #0 -} - 9f64: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - m_curSector += ns; - 9f68: 6973 ldr r3, [r6, #20] - return m_dedicatedSpi ? true : readStop(); - 9f6a: 7e30 ldrb r0, [r6, #24] - m_curSector += ns; - 9f6c: 445b add r3, fp - 9f6e: 6173 str r3, [r6, #20] - return m_dedicatedSpi ? true : readStop(); - 9f70: 2800 cmp r0, #0 - 9f72: d1f7 bne.n 9f64 - 9f74: 4630 mov r0, r6 -} - 9f76: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - return m_dedicatedSpi ? true : readStop(); - 9f7a: f7ff befd b.w 9d78 - if (m_spiActive) { - 9f7e: 7bb3 ldrb r3, [r6, #14] - m_errorCode = code; - 9f80: 220c movs r2, #12 - 9f82: 7372 strb r2, [r6, #13] - 9f84: 2b00 cmp r3, #0 - 9f86: d0ec beq.n 9f62 - sdCsWrite(m_csPin, true); - 9f88: 7b30 ldrb r0, [r6, #12] - 9f8a: 2101 movs r1, #1 - m_spiDriver.send(data); - 9f8c: 1d34 adds r4, r6, #4 - sdCsWrite(m_csPin, true); - 9f8e: f000 fa0f bl a3b0 - m_spiDriver.send(data); - 9f92: 21ff movs r1, #255 ; 0xff - 9f94: 4620 mov r0, r4 - 9f96: f000 fa95 bl a4c4 - m_spiDriver.deactivate(); - 9f9a: 4620 mov r0, r4 - 9f9c: f000 fa56 bl a44c - m_spiActive = false; - 9fa0: 2000 movs r0, #0 - 9fa2: 73b0 strb r0, [r6, #14] - 9fa4: e7de b.n 9f64 - 9fa6: bf00 nop - -00009fa8 : - return readSectors(sector, dst, 1); - 9fa8: 6803 ldr r3, [r0, #0] -bool DedicatedSpiCard::readSector(uint32_t sector, uint8_t* dst) { - 9faa: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - return readSectors(sector, dst, 1); - 9fae: 695e ldr r6, [r3, #20] - 9fb0: 4b23 ldr r3, [pc, #140] ; (a040 ) - 9fb2: 429e cmp r6, r3 - 9fb4: d12a bne.n a00c - if (sdState() != READ_STATE || sector != m_curSector) { - 9fb6: 7bc3 ldrb r3, [r0, #15] - 9fb8: 2b01 cmp r3, #1 - 9fba: 4604 mov r4, r0 - 9fbc: 460d mov r5, r1 - 9fbe: 4617 mov r7, r2 - 9fc0: d102 bne.n 9fc8 - 9fc2: 6943 ldr r3, [r0, #20] - 9fc4: 4299 cmp r1, r3 - 9fc6: d00c beq.n 9fe2 - if (type() != SD_CARD_TYPE_SDHC) { - 9fc8: 7c63 ldrb r3, [r4, #17] - 9fca: 2b03 cmp r3, #3 - sector <<= 9; - 9fcc: bf14 ite ne - 9fce: 026a lslne r2, r5, #9 - 9fd0: 462a moveq r2, r5 - if (cardCommand(CMD18, sector)) { - 9fd2: 2112 movs r1, #18 - 9fd4: 4620 mov r0, r4 - 9fd6: f7ff fcdd bl 9994 - 9fda: b980 cbnz r0, 9ffe - m_state = READ_STATE; - 9fdc: 2301 movs r3, #1 - 9fde: 73e3 strb r3, [r4, #15] - m_curSector = sector; - 9fe0: 6165 str r5, [r4, #20] - return readData(dst, 512); - 9fe2: f44f 7200 mov.w r2, #512 ; 0x200 - 9fe6: 4639 mov r1, r7 - 9fe8: 4620 mov r0, r4 - 9fea: f7ff fc03 bl 97f4 - if (!readData(dst)) { - 9fee: b150 cbz r0, a006 - m_curSector += ns; - 9ff0: 6963 ldr r3, [r4, #20] - return m_dedicatedSpi ? true : readStop(); - 9ff2: 7e20 ldrb r0, [r4, #24] - m_curSector += ns; - 9ff4: 3301 adds r3, #1 - 9ff6: 6163 str r3, [r4, #20] - return m_dedicatedSpi ? true : readStop(); - 9ff8: b1e0 cbz r0, a034 -} - 9ffa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (m_spiActive) { - 9ffe: 7ba3 ldrb r3, [r4, #14] - m_errorCode = code; - a000: 220c movs r2, #12 - a002: 7362 strb r2, [r4, #13] - a004: b93b cbnz r3, a016 - return false; - a006: 2000 movs r0, #0 -} - a008: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - return readSectors(sector, dst, 1); - a00c: 46b4 mov ip, r6 - a00e: 2301 movs r3, #1 -} - a010: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - return readSectors(sector, dst, 1); - a014: 4760 bx ip - sdCsWrite(m_csPin, true); - a016: 7b20 ldrb r0, [r4, #12] - a018: 2101 movs r1, #1 - m_spiDriver.send(data); - a01a: 1d25 adds r5, r4, #4 - sdCsWrite(m_csPin, true); - a01c: f000 f9c8 bl a3b0 - m_spiDriver.send(data); - a020: 21ff movs r1, #255 ; 0xff - a022: 4628 mov r0, r5 - a024: f000 fa4e bl a4c4 - m_spiDriver.deactivate(); - a028: 4628 mov r0, r5 - a02a: f000 fa0f bl a44c - m_spiActive = false; - a02e: 2000 movs r0, #0 - a030: 73a0 strb r0, [r4, #14] - a032: e7e2 b.n 9ffa - return m_dedicatedSpi ? true : readStop(); - a034: 4620 mov r0, r4 -} - a036: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - return m_dedicatedSpi ? true : readStop(); - a03a: f7ff be9d b.w 9d78 - a03e: bf00 nop - a040: 00009e69 .word 0x00009e69 - -0000a044 : - } - return SharedSpiCard::writeSector(sector, src); -} -//------------------------------------------------------------------------------ -bool DedicatedSpiCard::writeSectors( - uint32_t sector, const uint8_t* src, size_t ns) { - a044: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - a048: 4607 mov r7, r0 - if (sdState() != WRITE_STATE || m_curSector != sector) { - a04a: 7bc0 ldrb r0, [r0, #15] - a04c: 2802 cmp r0, #2 - uint32_t sector, const uint8_t* src, size_t ns) { - a04e: b082 sub sp, #8 - a050: 460c mov r4, r1 - a052: 4691 mov r9, r2 - a054: 469a mov sl, r3 - if (sdState() != WRITE_STATE || m_curSector != sector) { - a056: d102 bne.n a05e - a058: 697b ldr r3, [r7, #20] - a05a: 428b cmp r3, r1 - a05c: d00d beq.n a07a - if (type() != SD_CARD_TYPE_SDHC) { - a05e: 7c7b ldrb r3, [r7, #17] - a060: 2b03 cmp r3, #3 - sector <<= 9; - a062: bf14 ite ne - a064: 0262 lslne r2, r4, #9 - a066: 4622 moveq r2, r4 - if (cardCommand(CMD25, sector)) { - a068: 2119 movs r1, #25 - a06a: 4638 mov r0, r7 - a06c: f7ff fc92 bl 9994 - a070: 2800 cmp r0, #0 - a072: d14a bne.n a10a - m_state = WRITE_STATE; - a074: 2302 movs r3, #2 - a076: 73fb strb r3, [r7, #15] - if (!writeStart(sector)) { - goto fail; - } - m_curSector = sector; - a078: 617c str r4, [r7, #20] - } - for (size_t i = 0; i < ns; i++, src += 512) { - a07a: f1ba 0f00 cmp.w sl, #0 - a07e: d021 beq.n a0c4 - a080: 4d2c ldr r5, [pc, #176] ; (a134 ) - m_spiDriver.send(data); - a082: 1d3e adds r6, r7, #4 - a084: f04f 0800 mov.w r8, #0 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - a088: 682b ldr r3, [r5, #0] - a08a: 9301 str r3, [sp, #4] - return ret; - a08c: 9c01 ldr r4, [sp, #4] - m_endTime = ms + millis16(); - a08e: f504 7416 add.w r4, r4, #600 ; 0x258 - a092: b2a4 uxth r4, r4 - explicit Timeout(uint16_t ms) {set(ms);} - a094: e005 b.n a0a2 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - a096: 682b ldr r3, [r5, #0] - a098: 9300 str r3, [sp, #0] - return ret; - a09a: 9900 ldr r1, [sp, #0] - return (int16_t)(m_endTime - millis16()) < 0; - a09c: 1a61 subs r1, r4, r1 - if (timeout.timedOut()) { - a09e: 040b lsls r3, r1, #16 - a0a0: d41b bmi.n a0da - return m_spiDriver.receive(); - a0a2: 4630 mov r0, r6 - a0a4: f000 f9f0 bl a488 - while (spiReceive() != 0XFF) { - a0a8: 28ff cmp r0, #255 ; 0xff - a0aa: d1f4 bne.n a096 - if (!writeData(WRITE_MULTIPLE_TOKEN, src)) { - a0ac: 464a mov r2, r9 - a0ae: 21fc movs r1, #252 ; 0xfc - a0b0: 4638 mov r0, r7 - a0b2: f7ff fbeb bl 988c - a0b6: b190 cbz r0, a0de - for (size_t i = 0; i < ns; i++, src += 512) { - a0b8: f108 0801 add.w r8, r8, #1 - a0bc: 45c2 cmp sl, r8 - a0be: f509 7900 add.w r9, r9, #512 ; 0x200 - a0c2: d1e1 bne.n a088 - if (!writeData(src)) { - goto fail; - } - } - m_curSector += ns; - a0c4: 697b ldr r3, [r7, #20] - return m_dedicatedSpi ? true : writeStop(); - a0c6: 7e38 ldrb r0, [r7, #24] - m_curSector += ns; - a0c8: 4453 add r3, sl - a0ca: 617b str r3, [r7, #20] - return m_dedicatedSpi ? true : writeStop(); - a0cc: b950 cbnz r0, a0e4 - a0ce: 4638 mov r0, r7 - -fail: - return false; -} - a0d0: b002 add sp, #8 - a0d2: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - return m_dedicatedSpi ? true : writeStop(); - a0d6: f7ff bc0b b.w 98f0 - m_errorCode = code; - a0da: 2324 movs r3, #36 ; 0x24 - a0dc: 737b strb r3, [r7, #13] - if (m_spiActive) { - a0de: 7bbb ldrb r3, [r7, #14] - a0e0: b91b cbnz r3, a0ea - return false; - a0e2: 2000 movs r0, #0 -} - a0e4: b002 add sp, #8 - a0e6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - sdCsWrite(m_csPin, true); - a0ea: 7b38 ldrb r0, [r7, #12] - a0ec: 2101 movs r1, #1 - a0ee: f000 f95f bl a3b0 - m_spiDriver.send(data); - a0f2: 21ff movs r1, #255 ; 0xff - a0f4: 4630 mov r0, r6 - a0f6: f000 f9e5 bl a4c4 - m_spiDriver.deactivate(); - a0fa: 4630 mov r0, r6 - a0fc: f000 f9a6 bl a44c - m_spiActive = false; - a100: 2000 movs r0, #0 - a102: 73b8 strb r0, [r7, #14] -} - a104: b002 add sp, #8 - a106: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - if (m_spiActive) { - a10a: 7bbb ldrb r3, [r7, #14] - m_errorCode = code; - a10c: 220e movs r2, #14 - a10e: 737a strb r2, [r7, #13] - a110: 2b00 cmp r3, #0 - a112: d0e6 beq.n a0e2 - sdCsWrite(m_csPin, true); - a114: 7b38 ldrb r0, [r7, #12] - a116: 2101 movs r1, #1 - m_spiDriver.send(data); - a118: 1d3c adds r4, r7, #4 - sdCsWrite(m_csPin, true); - a11a: f000 f949 bl a3b0 - m_spiDriver.send(data); - a11e: 21ff movs r1, #255 ; 0xff - a120: 4620 mov r0, r4 - a122: f000 f9cf bl a4c4 - m_spiDriver.deactivate(); - a126: 4620 mov r0, r4 - a128: f000 f990 bl a44c - m_spiActive = false; - a12c: 2000 movs r0, #0 - a12e: 73b8 strb r0, [r7, #14] - a130: e7d8 b.n a0e4 - a132: bf00 nop - a134: 1fff978c .word 0x1fff978c - -0000a138 : -//------------------------------------------------------------------------------ -bool DedicatedSpiCard::writeSectorsCallback(uint32_t sector, size_t ns, - const uint8_t * (*callback)(uint32_t sector, void *context), void *context) { - a138: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - a13c: b085 sub sp, #20 - a13e: 4680 mov r8, r0 - a140: 9300 str r3, [sp, #0] - if (sdState() != WRITE_STATE || m_curSector != sector) { - a142: 7bc3 ldrb r3, [r0, #15] - const uint8_t * (*callback)(uint32_t sector, void *context), void *context) { - a144: f8dd b038 ldr.w fp, [sp, #56] ; 0x38 - a148: 9201 str r2, [sp, #4] - if (sdState() != WRITE_STATE || m_curSector != sector) { - a14a: 2b02 cmp r3, #2 - const uint8_t * (*callback)(uint32_t sector, void *context), void *context) { - a14c: 460f mov r7, r1 - if (sdState() != WRITE_STATE || m_curSector != sector) { - a14e: d102 bne.n a156 - a150: 6943 ldr r3, [r0, #20] - a152: 428b cmp r3, r1 - a154: d010 beq.n a178 - if (type() != SD_CARD_TYPE_SDHC) { - a156: f898 3011 ldrb.w r3, [r8, #17] - a15a: 2b03 cmp r3, #3 - sector <<= 9; - a15c: bf14 ite ne - a15e: 027a lslne r2, r7, #9 - a160: 463a moveq r2, r7 - if (cardCommand(CMD25, sector)) { - a162: 2119 movs r1, #25 - a164: 4640 mov r0, r8 - a166: f7ff fc15 bl 9994 - a16a: 2800 cmp r0, #0 - a16c: d157 bne.n a21e - m_state = WRITE_STATE; - a16e: 2302 movs r3, #2 - if (!writeStart(sector)) { - goto fail; - } - m_curSector = sector; - a170: f8c8 7014 str.w r7, [r8, #20] - m_state = WRITE_STATE; - a174: f888 300f strb.w r3, [r8, #15] - } - for (size_t i = 0; i < ns; i++) { - a178: 9b01 ldr r3, [sp, #4] - a17a: b32b cbz r3, a1c8 - a17c: 9b01 ldr r3, [sp, #4] - a17e: 4d34 ldr r5, [pc, #208] ; (a250 ) - m_spiDriver.send(data); - a180: f108 0604 add.w r6, r8, #4 - a184: eb07 0a03 add.w sl, r7, r3 - const uint8_t *src = callback(sector + i, context); - a188: 9b00 ldr r3, [sp, #0] - a18a: 4659 mov r1, fp - a18c: 4638 mov r0, r7 - a18e: 4798 blx r3 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - a190: 682b ldr r3, [r5, #0] - a192: 9303 str r3, [sp, #12] - return ret; - a194: 9c03 ldr r4, [sp, #12] - m_endTime = ms + millis16(); - a196: f504 7416 add.w r4, r4, #600 ; 0x258 - const uint8_t *src = callback(sector + i, context); - a19a: 4681 mov r9, r0 - m_endTime = ms + millis16(); - a19c: b2a4 uxth r4, r4 - explicit Timeout(uint16_t ms) {set(ms);} - a19e: e005 b.n a1ac - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - a1a0: 682b ldr r3, [r5, #0] - a1a2: 9302 str r3, [sp, #8] - return ret; - a1a4: 9b02 ldr r3, [sp, #8] - return (int16_t)(m_endTime - millis16()) < 0; - a1a6: 1ae3 subs r3, r4, r3 - if (timeout.timedOut()) { - a1a8: 041b lsls r3, r3, #16 - a1aa: d41c bmi.n a1e6 - return m_spiDriver.receive(); - a1ac: 4630 mov r0, r6 - a1ae: f000 f96b bl a488 - while (spiReceive() != 0XFF) { - a1b2: 28ff cmp r0, #255 ; 0xff - a1b4: d1f4 bne.n a1a0 - if (!writeData(WRITE_MULTIPLE_TOKEN, src)) { - a1b6: 464a mov r2, r9 - a1b8: 21fc movs r1, #252 ; 0xfc - a1ba: 4640 mov r0, r8 - a1bc: f7ff fb66 bl 988c - a1c0: b1a0 cbz r0, a1ec - for (size_t i = 0; i < ns; i++) { - a1c2: 3701 adds r7, #1 - a1c4: 45ba cmp sl, r7 - a1c6: d1df bne.n a188 - if (!writeData(src)) { - goto fail; - } - } - m_curSector += ns; - a1c8: f8d8 3014 ldr.w r3, [r8, #20] - a1cc: 9a01 ldr r2, [sp, #4] - return m_dedicatedSpi ? true : writeStop(); - a1ce: f898 0018 ldrb.w r0, [r8, #24] - m_curSector += ns; - a1d2: 4413 add r3, r2 - a1d4: f8c8 3014 str.w r3, [r8, #20] - return m_dedicatedSpi ? true : writeStop(); - a1d8: b960 cbnz r0, a1f4 - a1da: 4640 mov r0, r8 - - fail: - return false; -} - a1dc: b005 add sp, #20 - a1de: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - return m_dedicatedSpi ? true : writeStop(); - a1e2: f7ff bb85 b.w 98f0 - m_errorCode = code; - a1e6: 2324 movs r3, #36 ; 0x24 - a1e8: f888 300d strb.w r3, [r8, #13] - if (m_spiActive) { - a1ec: f898 300e ldrb.w r3, [r8, #14] - a1f0: b91b cbnz r3, a1fa - return false; - a1f2: 2000 movs r0, #0 -} - a1f4: b005 add sp, #20 - a1f6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - sdCsWrite(m_csPin, true); - a1fa: f898 000c ldrb.w r0, [r8, #12] - a1fe: 2101 movs r1, #1 - a200: f000 f8d6 bl a3b0 - m_spiDriver.send(data); - a204: 21ff movs r1, #255 ; 0xff - a206: 4630 mov r0, r6 - a208: f000 f95c bl a4c4 - m_spiDriver.deactivate(); - a20c: 4630 mov r0, r6 - a20e: f000 f91d bl a44c - m_spiActive = false; - a212: 2000 movs r0, #0 - a214: f888 000e strb.w r0, [r8, #14] -} - a218: b005 add sp, #20 - a21a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (m_spiActive) { - a21e: f898 300e ldrb.w r3, [r8, #14] - m_errorCode = code; - a222: 220e movs r2, #14 - a224: f888 200d strb.w r2, [r8, #13] - a228: 2b00 cmp r3, #0 - a22a: d0e2 beq.n a1f2 - sdCsWrite(m_csPin, true); - a22c: f898 000c ldrb.w r0, [r8, #12] - a230: 2101 movs r1, #1 - m_spiDriver.send(data); - a232: f108 0404 add.w r4, r8, #4 - sdCsWrite(m_csPin, true); - a236: f000 f8bb bl a3b0 - m_spiDriver.send(data); - a23a: 21ff movs r1, #255 ; 0xff - a23c: 4620 mov r0, r4 - a23e: f000 f941 bl a4c4 - m_spiDriver.deactivate(); - a242: 4620 mov r0, r4 - a244: f000 f902 bl a44c - m_spiActive = false; - a248: 2000 movs r0, #0 - a24a: f888 000e strb.w r0, [r8, #14] - a24e: e7d1 b.n a1f4 - a250: 1fff978c .word 0x1fff978c - -0000a254 : - if (m_dedicatedSpi) { - a254: 7e03 ldrb r3, [r0, #24] - a256: 2b00 cmp r3, #0 - a258: d056 beq.n a308 -bool DedicatedSpiCard::writeSector(uint32_t sector, const uint8_t* src) { - a25a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - return writeSectors(sector, src, 1); - a25e: 6803 ldr r3, [r0, #0] - a260: 6a9d ldr r5, [r3, #40] ; 0x28 - a262: 4b35 ldr r3, [pc, #212] ; (a338 ) - a264: 429d cmp r5, r3 -bool DedicatedSpiCard::writeSector(uint32_t sector, const uint8_t* src) { - a266: b082 sub sp, #8 - a268: 4607 mov r7, r0 - return writeSectors(sector, src, 1); - a26a: d158 bne.n a31e - if (sdState() != WRITE_STATE || m_curSector != sector) { - a26c: 7bc3 ldrb r3, [r0, #15] - a26e: 2b02 cmp r3, #2 - a270: 460c mov r4, r1 - a272: 4690 mov r8, r2 - a274: d102 bne.n a27c - a276: 6943 ldr r3, [r0, #20] - a278: 4299 cmp r1, r3 - a27a: d00d beq.n a298 - if (type() != SD_CARD_TYPE_SDHC) { - a27c: 7c7b ldrb r3, [r7, #17] - a27e: 2b03 cmp r3, #3 - sector <<= 9; - a280: bf14 ite ne - a282: 0262 lslne r2, r4, #9 - a284: 4622 moveq r2, r4 - if (cardCommand(CMD25, sector)) { - a286: 2119 movs r1, #25 - a288: 4638 mov r0, r7 - a28a: f7ff fb83 bl 9994 - a28e: 2800 cmp r0, #0 - a290: d13c bne.n a30c - m_state = WRITE_STATE; - a292: 2302 movs r3, #2 - a294: 73fb strb r3, [r7, #15] - m_curSector = sector; - a296: 617c str r4, [r7, #20] - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - a298: 4e28 ldr r6, [pc, #160] ; (a33c ) - a29a: 6833 ldr r3, [r6, #0] - a29c: 9301 str r3, [sp, #4] - return ret; - a29e: 9d01 ldr r5, [sp, #4] - m_endTime = ms + millis16(); - a2a0: f505 7516 add.w r5, r5, #600 ; 0x258 - m_spiDriver.send(data); - a2a4: 1d3c adds r4, r7, #4 - a2a6: b2ad uxth r5, r5 - explicit Timeout(uint16_t ms) {set(ms);} - a2a8: e005 b.n a2b6 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - a2aa: 6833 ldr r3, [r6, #0] - a2ac: 9300 str r3, [sp, #0] - return ret; - a2ae: 9b00 ldr r3, [sp, #0] - return (int16_t)(m_endTime - millis16()) < 0; - a2b0: 1aeb subs r3, r5, r3 - if (timeout.timedOut()) { - a2b2: 041b lsls r3, r3, #16 - a2b4: d412 bmi.n a2dc - return m_spiDriver.receive(); - a2b6: 4620 mov r0, r4 - a2b8: f000 f8e6 bl a488 - while (spiReceive() != 0XFF) { - a2bc: 28ff cmp r0, #255 ; 0xff - a2be: d1f4 bne.n a2aa - if (!writeData(WRITE_MULTIPLE_TOKEN, src)) { - a2c0: 4642 mov r2, r8 - a2c2: 21fc movs r1, #252 ; 0xfc - a2c4: 4638 mov r0, r7 - a2c6: f7ff fae1 bl 988c - a2ca: b148 cbz r0, a2e0 - m_curSector += ns; - a2cc: 697b ldr r3, [r7, #20] - return m_dedicatedSpi ? true : writeStop(); - a2ce: 7e38 ldrb r0, [r7, #24] - m_curSector += ns; - a2d0: 3301 adds r3, #1 - a2d2: 617b str r3, [r7, #20] - return m_dedicatedSpi ? true : writeStop(); - a2d4: b348 cbz r0, a32a -} - a2d6: b002 add sp, #8 - a2d8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - m_errorCode = code; - a2dc: 2324 movs r3, #36 ; 0x24 - a2de: 737b strb r3, [r7, #13] - if (m_spiActive) { - a2e0: 7bbb ldrb r3, [r7, #14] - a2e2: b91b cbnz r3, a2ec - return false; - a2e4: 2000 movs r0, #0 -} - a2e6: b002 add sp, #8 - a2e8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - sdCsWrite(m_csPin, true); - a2ec: 7b38 ldrb r0, [r7, #12] - a2ee: 2101 movs r1, #1 - a2f0: f000 f85e bl a3b0 - m_spiDriver.send(data); - a2f4: 21ff movs r1, #255 ; 0xff - a2f6: 4620 mov r0, r4 - a2f8: f000 f8e4 bl a4c4 - m_spiDriver.deactivate(); - a2fc: 4620 mov r0, r4 - a2fe: f000 f8a5 bl a44c - m_spiActive = false; - a302: 2000 movs r0, #0 - a304: 73b8 strb r0, [r7, #14] - a306: e7e6 b.n a2d6 - return SharedSpiCard::writeSector(sector, src); - a308: f7ff bd74 b.w 9df4 - if (m_spiActive) { - a30c: 7bbb ldrb r3, [r7, #14] - m_errorCode = code; - a30e: 220e movs r2, #14 - a310: 737a strb r2, [r7, #13] - a312: 2b00 cmp r3, #0 - a314: d0e6 beq.n a2e4 - sdCsWrite(m_csPin, true); - a316: 7b38 ldrb r0, [r7, #12] - a318: 2101 movs r1, #1 - m_spiDriver.send(data); - a31a: 1d3c adds r4, r7, #4 - a31c: e7e8 b.n a2f0 - return writeSectors(sector, src, 1); - a31e: 2301 movs r3, #1 - a320: 46ac mov ip, r5 -} - a322: b002 add sp, #8 - a324: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - return writeSectors(sector, src, 1); - a328: 4760 bx ip - return m_dedicatedSpi ? true : writeStop(); - a32a: 4638 mov r0, r7 -} - a32c: b002 add sp, #8 - a32e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - return m_dedicatedSpi ? true : writeStop(); - a332: f7ff badd b.w 98f0 - a336: bf00 nop - a338: 0000a045 .word 0x0000a045 - a33c: 1fff978c .word 0x1fff978c - -0000a340 : -bool DedicatedSpiCard::begin(SdSpiConfig spiConfig) { - a340: b510 push {r4, lr} - a342: b084 sub sp, #16 - a344: f10d 0c04 add.w ip, sp, #4 - a348: e88c 000e stmia.w ip, {r1, r2, r3} - if (!SharedSpiCard::begin(spiConfig)) { - a34c: e89c 000e ldmia.w ip, {r1, r2, r3} -bool DedicatedSpiCard::begin(SdSpiConfig spiConfig) { - a350: 4604 mov r4, r0 - if (!SharedSpiCard::begin(spiConfig)) { - a352: f7ff fb9b bl 9a8c - a356: b120 cbz r0, a362 -const uint8_t DEDICATED_SPI = 1; -/** - * \param[in] opt option field of SdSpiConfig. - * \return true for dedicated SPI. - */ -inline bool spiOptionDedicated(uint8_t opt) {return opt & DEDICATED_SPI;} - a358: f89d 3005 ldrb.w r3, [sp, #5] - a35c: f003 0301 and.w r3, r3, #1 - a360: 7623 strb r3, [r4, #24] -} - a362: b004 add sp, #16 - a364: bd10 pop {r4, pc} - a366: bf00 nop - -0000a368 : -bool DedicatedSpiCard::setDedicatedSpi(bool value) { - a368: b538 push {r3, r4, r5, lr} - if (!syncDevice()) { - a36a: 6803 ldr r3, [r0, #0] - a36c: 4a0d ldr r2, [pc, #52] ; (a3a4 ) - a36e: 6a1b ldr r3, [r3, #32] - a370: 4293 cmp r3, r2 -bool DedicatedSpiCard::setDedicatedSpi(bool value) { - a372: 4604 mov r4, r0 - a374: 460d mov r5, r1 - a376: d107 bne.n a388 - if (m_state == WRITE_STATE) { - a378: 7bc3 ldrb r3, [r0, #15] - a37a: 2b02 cmp r3, #2 - a37c: d008 beq.n a390 - if (m_state == READ_STATE) { - a37e: 2b01 cmp r3, #1 - a380: d00b beq.n a39a - m_dedicatedSpi = value; - a382: 7625 strb r5, [r4, #24] - return true; - a384: 2001 movs r0, #1 -} - a386: bd38 pop {r3, r4, r5, pc} - if (!syncDevice()) { - a388: 4798 blx r3 - a38a: 2800 cmp r0, #0 - a38c: d1f9 bne.n a382 -} - a38e: bd38 pop {r3, r4, r5, pc} - return writeStop(); - a390: f7ff faae bl 98f0 - if (!syncDevice()) { - a394: 2800 cmp r0, #0 - a396: d0fa beq.n a38e - a398: e7f3 b.n a382 - return readStop(); - a39a: f7ff fced bl 9d78 - if (!syncDevice()) { - a39e: 2800 cmp r0, #0 - a3a0: d0f5 beq.n a38e - a3a2: e7ee b.n a382 - a3a4: 00009ddd .word 0x00009ddd - -0000a3a8 : -#include "SdSpiDriver.h" -#if ENABLE_ARDUINO_FEATURES -#if SD_CHIP_SELECT_MODE == 0 -//------------------------------------------------------------------------------ -void sdCsInit(SdCsPin_t pin) { - pinMode(pin, OUTPUT); - a3a8: 2101 movs r1, #1 - a3aa: f002 b91d b.w c5e8 - a3ae: bf00 nop - -0000a3b0 : -} -//------------------------------------------------------------------------------ -void sdCsWrite(SdCsPin_t pin, bool level) { - digitalWrite(pin, level); - a3b0: f002 b8e6 b.w c580 - -0000a3b4 : - */ -#include "SdSpiDriver.h" -#if defined(SD_USE_CUSTOM_SPI) && defined(__arm__) && defined(CORE_TEENSY) -#define USE_BLOCK_TRANSFER 1 -//------------------------------------------------------------------------------ -void SdSpiArduinoDriver::activate() { - a3b4: b430 push {r4, r5} - m_spi->beginTransaction(m_spiSettings); - a3b6: 6803 ldr r3, [r0, #0] - a3b8: 6842 ldr r2, [r0, #4] - - // Before using SPI.transfer() or asserting chip select pins, - // this function is used to gain exclusive access to the SPI bus - // and configure the correct settings. - void beginTransaction(SPISettings settings) { - if (interruptMasksUsed) { - a3ba: 7ad9 ldrb r1, [r3, #11] - a3bc: b1d1 cbz r1, a3f4 - __disable_irq(); - a3be: b672 cpsid i - if (interruptMasksUsed & 0x01) { - a3c0: 7ad9 ldrb r1, [r3, #11] - a3c2: 07cc lsls r4, r1, #31 - a3c4: d508 bpl.n a3d8 - interruptSave[0] = NVIC_ICER0 & interruptMask[0]; - a3c6: f04f 24e0 mov.w r4, #3758153728 ; 0xe000e000 - a3ca: 68dd ldr r5, [r3, #12] - a3cc: f8d4 0180 ldr.w r0, [r4, #384] ; 0x180 - a3d0: 4028 ands r0, r5 - a3d2: 6198 str r0, [r3, #24] - NVIC_ICER0 = interruptSave[0]; - a3d4: f8c4 0180 str.w r0, [r4, #384] ; 0x180 - } - #if NVIC_NUM_INTERRUPTS > 32 - if (interruptMasksUsed & 0x02) { - a3d8: 0788 lsls r0, r1, #30 - a3da: d508 bpl.n a3ee - interruptSave[1] = NVIC_ICER1 & interruptMask[1]; - a3dc: f04f 24e0 mov.w r4, #3758153728 ; 0xe000e000 - a3e0: 691d ldr r5, [r3, #16] - a3e2: f8d4 0184 ldr.w r0, [r4, #388] ; 0x184 - a3e6: 4028 ands r0, r5 - a3e8: 61d8 str r0, [r3, #28] - NVIC_ICER1 = interruptSave[1]; - a3ea: f8c4 0184 str.w r0, [r4, #388] ; 0x184 - } - #endif - #if NVIC_NUM_INTERRUPTS > 64 && defined(NVIC_ISER2) - if (interruptMasksUsed & 0x04) { - a3ee: 0749 lsls r1, r1, #29 - a3f0: d40e bmi.n a410 - if (interruptMasksUsed & 0x08) { - interruptSave[3] = NVIC_ICER3 & interruptMask[3]; - NVIC_ICER3 = interruptSave[3]; - } - #endif - __enable_irq(); - a3f2: b662 cpsie i - // setCS() is a special function, not intended for use from normal Arduino - // programs/sketches. See the ILI3941_t3 library for an example. - uint8_t setCS(uint8_t pin); - -private: - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - a3f4: 681b ldr r3, [r3, #0] - if (port().CTAR0 != settings.ctar) { - a3f6: 68d9 ldr r1, [r3, #12] - a3f8: 4291 cmp r1, r2 - a3fa: d007 beq.n a40c - port().MCR = SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x3F); - a3fc: 4c09 ldr r4, [pc, #36] ; (a424 ) - port().MCR = SPI_MCR_MSTR | SPI_MCR_PCSIS(0x3F); - a3fe: 490a ldr r1, [pc, #40] ; (a428 ) - port().MCR = SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x3F); - a400: 601c str r4, [r3, #0] - port().CTAR1 = settings.ctar| SPI_CTAR_FMSZ(8); - a402: f042 4080 orr.w r0, r2, #1073741824 ; 0x40000000 - port().CTAR0 = settings.ctar; - a406: 60da str r2, [r3, #12] - port().CTAR1 = settings.ctar| SPI_CTAR_FMSZ(8); - a408: 6118 str r0, [r3, #16] - port().MCR = SPI_MCR_MSTR | SPI_MCR_PCSIS(0x3F); - a40a: 6019 str r1, [r3, #0] -} - a40c: bc30 pop {r4, r5} - a40e: 4770 bx lr - interruptSave[2] = NVIC_ICER2 & interruptMask[2]; - a410: f04f 20e0 mov.w r0, #3758153728 ; 0xe000e000 - a414: 695c ldr r4, [r3, #20] - a416: f8d0 1188 ldr.w r1, [r0, #392] ; 0x188 - a41a: 4021 ands r1, r4 - a41c: 6219 str r1, [r3, #32] - NVIC_ICER2 = interruptSave[2]; - a41e: f8c0 1188 str.w r1, [r0, #392] ; 0x188 - a422: e7e6 b.n a3f2 - a424: 003f4001 .word 0x003f4001 - a428: 803f0000 .word 0x803f0000 - -0000a42c : -//------------------------------------------------------------------------------ -void SdSpiArduinoDriver::begin(SdSpiConfig spiConfig) { - a42c: b084 sub sp, #16 - a42e: f10d 0c10 add.w ip, sp, #16 - a432: e90c 000e stmdb ip, {r1, r2, r3} - m_spi->setMISO(SDFAT_SDCARD_MISO_PIN); - m_spi->setMOSI(SDFAT_SDCARD_MOSI_PIN); - m_spi->setSCK(SDFAT_SDCARD_SCK_PIN); -#endif // defined(SDFAT_SDCARD_SPI) && defined(SDFAT_SDCARD_SS_PIN) - } else { - m_spi = &SPI; - a436: 4a04 ldr r2, [pc, #16] ; (a448 ) - a438: 2b00 cmp r3, #0 - a43a: bf08 it eq - a43c: 4613 moveq r3, r2 - a43e: 6003 str r3, [r0, #0] - } - m_spi->begin(); - a440: 4618 mov r0, r3 -} - a442: b004 add sp, #16 - m_spi->begin(); - a444: f000 bb4c b.w aae0 - a448: 1fff878c .word 0x1fff878c - -0000a44c : -//------------------------------------------------------------------------------ -void SdSpiArduinoDriver::deactivate() { - m_spi->endTransaction(); - a44c: 6802 ldr r2, [r0, #0] - if (interruptMasksUsed) { - a44e: 7ad3 ldrb r3, [r2, #11] - a450: b1a3 cbz r3, a47c - if (interruptMasksUsed & 0x01) { - a452: 07d8 lsls r0, r3, #31 - a454: d504 bpl.n a460 - NVIC_ISER0 = interruptSave[0]; - a456: f04f 21e0 mov.w r1, #3758153728 ; 0xe000e000 - a45a: 6990 ldr r0, [r2, #24] - a45c: f8c1 0100 str.w r0, [r1, #256] ; 0x100 - if (interruptMasksUsed & 0x02) { - a460: 0799 lsls r1, r3, #30 - a462: d504 bpl.n a46e - NVIC_ISER1 = interruptSave[1]; - a464: f04f 21e0 mov.w r1, #3758153728 ; 0xe000e000 - a468: 69d0 ldr r0, [r2, #28] - a46a: f8c1 0104 str.w r0, [r1, #260] ; 0x104 - if (interruptMasksUsed & 0x04) { - a46e: 075b lsls r3, r3, #29 - a470: d504 bpl.n a47c - NVIC_ISER2 = interruptSave[2]; - a472: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 - a476: 6a12 ldr r2, [r2, #32] - a478: f8c3 2108 str.w r2, [r3, #264] ; 0x108 -} - a47c: 4770 bx lr - a47e: bf00 nop - -0000a480 : -//------------------------------------------------------------------------------ -void SdSpiArduinoDriver::end() { - m_spi->end(); - a480: 6800 ldr r0, [r0, #0] - a482: f000 bb6b b.w ab5c - a486: bf00 nop - -0000a488 : - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - a488: 6802 ldr r2, [r0, #0] - a48a: 6812 ldr r2, [r2, #0] - port().SR = SPI_SR_TCF; - a48c: f04f 4100 mov.w r1, #2147483648 ; 0x80000000 - port().PUSHR = data; - a490: 23ff movs r3, #255 ; 0xff - port().SR = SPI_SR_TCF; - a492: 62d1 str r1, [r2, #44] ; 0x2c - port().PUSHR = data; - a494: 6353 str r3, [r2, #52] ; 0x34 - while (!(port().SR & SPI_SR_TCF)) ; // wait - a496: 6ad3 ldr r3, [r2, #44] ; 0x2c - a498: 2b00 cmp r3, #0 - a49a: dafc bge.n a496 - return port().POPR; - a49c: 6b90 ldr r0, [r2, #56] ; 0x38 -} -//------------------------------------------------------------------------------ -uint8_t SdSpiArduinoDriver::receive() { - return m_spi->transfer(0XFF); -} - a49e: b2c0 uxtb r0, r0 - a4a0: 4770 bx lr - a4a2: bf00 nop - -0000a4a4 : -//------------------------------------------------------------------------------ -uint8_t SdSpiArduinoDriver::receive(uint8_t* buf, size_t count) { - a4a4: b570 push {r4, r5, r6, lr} - a4a6: 460c mov r4, r1 - a4a8: 4605 mov r5, r0 - a4aa: 4616 mov r6, r2 -#if USE_BLOCK_TRANSFER - memset(buf, 0XFF, count); - a4ac: 21ff movs r1, #255 ; 0xff - a4ae: 4620 mov r0, r4 - a4b0: f006 fe60 bl 11174 - void inline transfer(void *buf, size_t count) {transfer(buf, buf, count);} - a4b4: 6828 ldr r0, [r5, #0] - a4b6: 4633 mov r3, r6 - a4b8: 4622 mov r2, r4 - a4ba: 4621 mov r1, r4 - a4bc: f000 fb78 bl abb0 - for (size_t i = 0; i < count; i++) { - buf[i] = m_spi->transfer(0XFF); - } -#endif // USE_BLOCK_TRANSFER - return 0; -} - a4c0: 2000 movs r0, #0 - a4c2: bd70 pop {r4, r5, r6, pc} - -0000a4c4 : - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - a4c4: 6803 ldr r3, [r0, #0] - a4c6: 681a ldr r2, [r3, #0] - port().SR = SPI_SR_TCF; - a4c8: f04f 4300 mov.w r3, #2147483648 ; 0x80000000 - a4cc: 62d3 str r3, [r2, #44] ; 0x2c - port().PUSHR = data; - a4ce: 6351 str r1, [r2, #52] ; 0x34 - while (!(port().SR & SPI_SR_TCF)) ; // wait - a4d0: 6ad3 ldr r3, [r2, #44] ; 0x2c - a4d2: 2b00 cmp r3, #0 - a4d4: dafc bge.n a4d0 - return port().POPR; - a4d6: 6b93 ldr r3, [r2, #56] ; 0x38 -//------------------------------------------------------------------------------ -void SdSpiArduinoDriver::send(uint8_t data) { - m_spi->transfer(data); -} - a4d8: 4770 bx lr - a4da: bf00 nop - -0000a4dc : -//------------------------------------------------------------------------------ -void SdSpiArduinoDriver::send(const uint8_t* buf , size_t count) { - a4dc: b530 push {r4, r5, lr} -#if USE_BLOCK_TRANSFER - uint32_t tmp[128]; - if (0 < count && count <= 512) { - a4de: 1e53 subs r3, r2, #1 - a4e0: f5b3 7f00 cmp.w r3, #512 ; 0x200 -void SdSpiArduinoDriver::send(const uint8_t* buf , size_t count) { - a4e4: f5ad 7d01 sub.w sp, sp, #516 ; 0x204 - a4e8: 4614 mov r4, r2 - a4ea: 4605 mov r5, r0 - if (0 < count && count <= 512) { - a4ec: d313 bcc.n a516 - memcpy(tmp, buf, count); - m_spi->transfer(tmp, count); - return; - } -#endif // USE_BLOCK_TRANSFER - for (size_t i = 0; i < count; i++) { - a4ee: b17a cbz r2, a510 - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - a4f0: 682b ldr r3, [r5, #0] - a4f2: 1e48 subs r0, r1, #1 - a4f4: 6819 ldr r1, [r3, #0] - a4f6: 1882 adds r2, r0, r2 - port().SR = SPI_SR_TCF; - a4f8: f04f 4400 mov.w r4, #2147483648 ; 0x80000000 - m_spi->transfer(buf[i]); - a4fc: f810 3f01 ldrb.w r3, [r0, #1]! - a500: 62cc str r4, [r1, #44] ; 0x2c - port().PUSHR = data; - a502: 634b str r3, [r1, #52] ; 0x34 - while (!(port().SR & SPI_SR_TCF)) ; // wait - a504: 6acb ldr r3, [r1, #44] ; 0x2c - a506: 2b00 cmp r3, #0 - a508: dafc bge.n a504 - for (size_t i = 0; i < count; i++) { - a50a: 4290 cmp r0, r2 - return port().POPR; - a50c: 6b8b ldr r3, [r1, #56] ; 0x38 - a50e: d1f5 bne.n a4fc - } -} - a510: f50d 7d01 add.w sp, sp, #516 ; 0x204 - a514: bd30 pop {r4, r5, pc} - memcpy(tmp, buf, count); - a516: 4668 mov r0, sp - a518: f001 fc8e bl be38 - void inline transfer(void *buf, size_t count) {transfer(buf, buf, count);} - a51c: 466a mov r2, sp - a51e: 6828 ldr r0, [r5, #0] - a520: 4623 mov r3, r4 - a522: 4611 mov r1, r2 - a524: f000 fb44 bl abb0 -} - a528: f50d 7d01 add.w sp, sp, #516 ; 0x204 - a52c: bd30 pop {r4, r5, pc} - a52e: bf00 nop - -0000a530 : - - fail: - return nullptr; -} -//------------------------------------------------------------------------------ -bool FsCache::sync() { - a530: b570 push {r4, r5, r6, lr} - if (m_status & CACHE_STATUS_DIRTY) { - a532: 7803 ldrb r3, [r0, #0] - a534: 07d9 lsls r1, r3, #31 - a536: d51c bpl.n a572 - if (!m_blockDev->writeSector(m_sector, m_buffer)) { - a538: 4604 mov r4, r0 - a53a: 6840 ldr r0, [r0, #4] - a53c: 68e1 ldr r1, [r4, #12] - a53e: 6803 ldr r3, [r0, #0] - a540: f104 0610 add.w r6, r4, #16 - a544: 6a5b ldr r3, [r3, #36] ; 0x24 - a546: 4632 mov r2, r6 - a548: 4798 blx r3 - a54a: 4605 mov r5, r0 - a54c: b1a0 cbz r0, a578 - DBG_FAIL_MACRO; - goto fail; - } - // mirror second FAT - if (m_status & CACHE_STATUS_MIRROR_FAT) { - a54e: 7823 ldrb r3, [r4, #0] - a550: 079a lsls r2, r3, #30 - a552: d509 bpl.n a568 - uint32_t sector = m_sector + m_mirrorOffset; - a554: 68a3 ldr r3, [r4, #8] - if (!m_blockDev->writeSector(sector, m_buffer)) { - a556: 6860 ldr r0, [r4, #4] - uint32_t sector = m_sector + m_mirrorOffset; - a558: 68e1 ldr r1, [r4, #12] - if (!m_blockDev->writeSector(sector, m_buffer)) { - a55a: 4419 add r1, r3 - a55c: 6803 ldr r3, [r0, #0] - a55e: 4632 mov r2, r6 - a560: 6a5b ldr r3, [r3, #36] ; 0x24 - a562: 4798 blx r3 - a564: b140 cbz r0, a578 - DBG_FAIL_MACRO; - goto fail; - } - } - m_status &= ~CACHE_STATUS_DIRTY; - a566: 7823 ldrb r3, [r4, #0] - a568: f023 0301 bic.w r3, r3, #1 - a56c: 7023 strb r3, [r4, #0] - } - return true; - - fail: - return false; -} - a56e: 4628 mov r0, r5 - a570: bd70 pop {r4, r5, r6, pc} - return true; - a572: 2501 movs r5, #1 -} - a574: 4628 mov r0, r5 - a576: bd70 pop {r4, r5, r6, pc} - return false; - a578: 2500 movs r5, #0 -} - a57a: 4628 mov r0, r5 - a57c: bd70 pop {r4, r5, r6, pc} - a57e: bf00 nop - -0000a580 : -uint8_t* FsCache::prepare(uint32_t sector, uint8_t option) { - a580: b5f8 push {r3, r4, r5, r6, r7, lr} - if (!m_blockDev) { - a582: 6843 ldr r3, [r0, #4] - a584: b30b cbz r3, a5ca - if (m_sector != sector) { - a586: 68c3 ldr r3, [r0, #12] - a588: 428b cmp r3, r1 - a58a: 4604 mov r4, r0 - a58c: 460e mov r6, r1 - a58e: 4615 mov r5, r2 - a590: d106 bne.n a5a0 - m_status |= option & CACHE_STATUS_MASK; - a592: f810 3b10 ldrb.w r3, [r0], #16 - a596: f005 0503 and.w r5, r5, #3 - a59a: 432b orrs r3, r5 - a59c: 7023 strb r3, [r4, #0] -} - a59e: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (!sync()) { - a5a0: f7ff ffc6 bl a530 - a5a4: b188 cbz r0, a5ca - if (!(option & CACHE_OPTION_NO_READ)) { - a5a6: 076b lsls r3, r5, #29 - a5a8: d505 bpl.n a5b6 - a5aa: f104 0710 add.w r7, r4, #16 - if (!m_blockDev->readSector(sector, m_buffer)) { - a5ae: 4638 mov r0, r7 - m_sector = sector; - a5b0: 60e6 str r6, [r4, #12] - a5b2: 2300 movs r3, #0 - a5b4: e7ef b.n a596 - if (!m_blockDev->readSector(sector, m_buffer)) { - a5b6: 6860 ldr r0, [r4, #4] - a5b8: 6803 ldr r3, [r0, #0] - a5ba: f104 0710 add.w r7, r4, #16 - a5be: 691b ldr r3, [r3, #16] - a5c0: 463a mov r2, r7 - a5c2: 4631 mov r1, r6 - a5c4: 4798 blx r3 - a5c6: 2800 cmp r0, #0 - a5c8: d1f1 bne.n a5ae - return nullptr; - a5ca: 2000 movs r0, #0 -} - a5cc: bdf8 pop {r3, r4, r5, r6, r7, pc} - a5ce: bf00 nop - -0000a5d0 : -#include "FsDateTime.h" -#include "FmtNumber.h" - -static void dateTimeMs10(uint16_t* date, uint16_t* time, uint8_t* ms10) { - *ms10 = 0; - FsDateTime::callback2(date, time); - a5d0: 4b03 ldr r3, [pc, #12] ; (a5e0 ) - *ms10 = 0; - a5d2: f04f 0c00 mov.w ip, #0 - a5d6: f882 c000 strb.w ip, [r2] - FsDateTime::callback2(date, time); - a5da: 681b ldr r3, [r3, #0] - a5dc: 4718 bx r3 - a5de: bf00 nop - a5e0: 1fff9774 .word 0x1fff9774 - -0000a5e4 : - void (*callback2)(uint16_t* date, uint16_t* time) = nullptr; - void clearCallback() { - callback = nullptr; - } - void setCallback(void (*dateTime)(uint16_t* date, uint16_t* time)) { - callback = dateTimeMs10; - a5e4: 4a02 ldr r2, [pc, #8] ; (a5f0 ) - callback2 = dateTime; - a5e6: 4b03 ldr r3, [pc, #12] ; (a5f4 ) - callback = dateTimeMs10; - a5e8: 4903 ldr r1, [pc, #12] ; (a5f8 ) - a5ea: 6011 str r1, [r2, #0] - callback2 = dateTime; - a5ec: 6018 str r0, [r3, #0] - } - a5ee: 4770 bx lr - a5f0: 1fff9770 .word 0x1fff9770 - a5f4: 1fff9774 .word 0x1fff9774 - a5f8: 0000a5d1 .word 0x0000a5d1 - -0000a5fc : - * DEALINGS IN THE SOFTWARE. - */ -#include "FsName.h" -#include "FsUtf.h" -#if USE_UTF8_LONG_NAMES -uint16_t FsName::get16() { - a5fc: b510 push {r4, lr} - a5fe: 4604 mov r4, r0 - uint16_t rtn; - if (ls) { - a600: 8980 ldrh r0, [r0, #12] -uint16_t FsName::get16() { - a602: b082 sub sp, #8 - if (ls) { - a604: b118 cbz r0, a60e - rtn = ls; - ls = 0; - a606: 2300 movs r3, #0 - a608: 81a3 strh r3, [r4, #12] - } - return rtn; - - fail: - return 0XFFFF; -} - a60a: b002 add sp, #8 - a60c: bd10 pop {r4, pc} - } else if (next >= end) { - a60e: 6863 ldr r3, [r4, #4] - a610: 68a1 ldr r1, [r4, #8] - a612: 428b cmp r3, r1 - a614: d2f9 bcs.n a60a - const char* ptr = FsUtf::mbToCp(next, end, &cp); - a616: aa01 add r2, sp, #4 - a618: 4618 mov r0, r3 - a61a: f000 f8b1 bl a780 - if (!ptr) { - a61e: b180 cbz r0, a642 - if (cp <= 0XFFFF) { - a620: 9b01 ldr r3, [sp, #4] - next = ptr; - a622: 6060 str r0, [r4, #4] - if (cp <= 0XFFFF) { - a624: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - a628: d201 bcs.n a62e - rtn = cp; - a62a: b298 uxth r0, r3 - a62c: e7ed b.n a60a - /** High surrogate for a code point. - * \param{in} cp code point. - * \return high surrogate. - */ - inline uint16_t highSurrogate(uint32_t cp) { - return (cp >> 10) + (0XD800 - (0X10000 >> 10)); - a62e: 0a98 lsrs r0, r3, #10 - /** Low surrogate for a code point. - * \param{in} cp code point. - * \return low surrogate. - */ - inline uint16_t lowSurrogate(uint32_t cp) { - return (cp & 0X3FF) + 0XDC00; - a630: f3c3 0209 ubfx r2, r3, #0, #10 - a634: f5a2 5310 sub.w r3, r2, #9216 ; 0x2400 - return (cp >> 10) + (0XD800 - (0X10000 >> 10)); - a638: f5a0 5021 sub.w r0, r0, #10304 ; 0x2840 - ls = FsUtf::lowSurrogate(cp); - a63c: 81a3 strh r3, [r4, #12] - a63e: b280 uxth r0, r0 - a640: e7e3 b.n a60a - return 0XFFFF; - a642: f64f 70ff movw r0, #65535 ; 0xffff - a646: e7e0 b.n a60a - -0000a648 : - uint32_t c; - uint8_t h; - uint8_t s; - - uint8_t numberOfHeads; - uint8_t sectorsPerTrack = capacityMB <= 256 ? 32 : 63; - a648: f5b1 7f80 cmp.w r1, #256 ; 0x100 - a64c: d820 bhi.n a690 - if (capacityMB <= 16) { - a64e: 2910 cmp r1, #16 - a650: d82d bhi.n a6ae - a652: 2340 movs r3, #64 ; 0x40 - uint8_t sectorsPerTrack = capacityMB <= 256 ? 32 : 63; - a654: f04f 0c20 mov.w ip, #32 - } else if (capacityMB <= 4032) { - numberOfHeads = 128; - } else { - numberOfHeads = 255; - } - c = lba / (numberOfHeads * sectorsPerTrack); - a658: fbb2 f1f3 udiv r1, r2, r3 - if (c <= 1023) { - a65c: f5b1 6f80 cmp.w r1, #1024 ; 0x400 - a660: d21f bcs.n a6a2 -void lbaToMbrChs(uint8_t* chs, uint32_t capacityMB, uint32_t lba) { - a662: b510 push {r4, lr} - h = (lba % (numberOfHeads * sectorsPerTrack)) / sectorsPerTrack; - s = (lba % sectorsPerTrack) + 1; - a664: fbb2 f4fc udiv r4, r2, ip - h = (lba % (numberOfHeads * sectorsPerTrack)) / sectorsPerTrack; - a668: fb03 2311 mls r3, r3, r1, r2 - c = 1023; - h = 254; - s = 63; - } - chs[0] = h; - chs[1] = ((c >> 2) & 0XC0) | s; - a66c: ea4f 0e91 mov.w lr, r1, lsr #2 - s = (lba % sectorsPerTrack) + 1; - a670: fb0c 2214 mls r2, ip, r4, r2 - chs[1] = ((c >> 2) & 0XC0) | s; - a674: f02e 0e3f bic.w lr, lr, #63 ; 0x3f - s = (lba % sectorsPerTrack) + 1; - a678: 3201 adds r2, #1 - chs[1] = ((c >> 2) & 0XC0) | s; - a67a: ea42 020e orr.w r2, r2, lr - chs[2] = c; - a67e: b2c9 uxtb r1, r1 - chs[1] = ((c >> 2) & 0XC0) | s; - a680: b2d2 uxtb r2, r2 - h = (lba % (numberOfHeads * sectorsPerTrack)) / sectorsPerTrack; - a682: fbb3 f3fc udiv r3, r3, ip - a686: b2db uxtb r3, r3 - chs[0] = h; - a688: 7003 strb r3, [r0, #0] - chs[1] = ((c >> 2) & 0XC0) | s; - a68a: 7042 strb r2, [r0, #1] - chs[2] = c; - a68c: 7081 strb r1, [r0, #2] -} - a68e: bd10 pop {r4, pc} - a690: 233f movs r3, #63 ; 0x3f - uint8_t sectorsPerTrack = capacityMB <= 256 ? 32 : 63; - a692: 469c mov ip, r3 - } else if (capacityMB <= 128) { - a694: 2980 cmp r1, #128 ; 0x80 - a696: d910 bls.n a6ba - } else if (capacityMB <= 504) { - a698: f5b1 7ffc cmp.w r1, #504 ; 0x1f8 - a69c: d80f bhi.n a6be - c = lba / (numberOfHeads * sectorsPerTrack); - a69e: 011b lsls r3, r3, #4 - a6a0: e7da b.n a658 - a6a2: 21ff movs r1, #255 ; 0xff - h = 254; - a6a4: 23fe movs r3, #254 ; 0xfe - chs[0] = h; - a6a6: 7003 strb r3, [r0, #0] - chs[1] = ((c >> 2) & 0XC0) | s; - a6a8: 7041 strb r1, [r0, #1] - chs[2] = c; - a6aa: 7081 strb r1, [r0, #2] - a6ac: 4770 bx lr - } else if (capacityMB <= 32) { - a6ae: 2920 cmp r1, #32 - a6b0: d816 bhi.n a6e0 - a6b2: 2380 movs r3, #128 ; 0x80 - uint8_t sectorsPerTrack = capacityMB <= 256 ? 32 : 63; - a6b4: f04f 0c20 mov.w ip, #32 - a6b8: e7ce b.n a658 - c = lba / (numberOfHeads * sectorsPerTrack); - a6ba: 00db lsls r3, r3, #3 - a6bc: e7cc b.n a658 - } else if (capacityMB <= 1008) { - a6be: f5b1 7f7c cmp.w r1, #1008 ; 0x3f0 - a6c2: d904 bls.n a6ce - } else if (capacityMB <= 2016) { - a6c4: f5b1 6ffc cmp.w r1, #2016 ; 0x7e0 - a6c8: d803 bhi.n a6d2 - c = lba / (numberOfHeads * sectorsPerTrack); - a6ca: 019b lsls r3, r3, #6 - a6cc: e7c4 b.n a658 - a6ce: 015b lsls r3, r3, #5 - a6d0: e7c2 b.n a658 - } else if (capacityMB <= 4032) { - a6d2: f5b1 6f7c cmp.w r1, #4032 ; 0xfc0 - c = lba / (numberOfHeads * sectorsPerTrack); - a6d6: bf94 ite ls - a6d8: 01db lslls r3, r3, #7 - a6da: ebc3 2303 rsbhi r3, r3, r3, lsl #8 - a6de: e7bb b.n a658 - a6e0: 2320 movs r3, #32 - uint8_t sectorsPerTrack = capacityMB <= 256 ? 32 : 63; - a6e2: 469c mov ip, r3 - a6e4: e7d6 b.n a694 - a6e6: bf00 nop - -0000a6e8 : -#include "FsUtf.h" -namespace FsUtf { - //---------------------------------------------------------------------------- - char* cpToMb(uint32_t cp, char* str, char* end) { - size_t n = end - str; - if (cp < 0X80) { - a6e8: 287f cmp r0, #127 ; 0x7f - char* cpToMb(uint32_t cp, char* str, char* end) { - a6ea: 4603 mov r3, r0 - size_t n = end - str; - a6ec: eba2 0201 sub.w r2, r2, r1 - if (cp < 0X80) { - a6f0: d805 bhi.n a6fe - if (n < 1) goto fail; - a6f2: 2a00 cmp r2, #0 - a6f4: d042 beq.n a77c - *(str++) = static_cast(cp); - a6f6: 4608 mov r0, r1 - a6f8: f800 3b01 strb.w r3, [r0], #1 - a6fc: 4770 bx lr - } else if (cp < 0X800) { - a6fe: f5b0 6f00 cmp.w r0, #2048 ; 0x800 - a702: d20d bcs.n a720 - if (n < 2) goto fail; - a704: 2a01 cmp r2, #1 - a706: d939 bls.n a77c - *(str++) = static_cast((cp >> 6) | 0XC0); - a708: 0982 lsrs r2, r0, #6 - *(str++) = static_cast((cp & 0X3F) | 0X80); - a70a: f003 033f and.w r3, r3, #63 ; 0x3f - *(str++) = static_cast((cp >> 6) | 0XC0); - a70e: 4608 mov r0, r1 - a710: f062 023f orn r2, r2, #63 ; 0x3f - *(str++) = static_cast((cp & 0X3F) | 0X80); - a714: f063 037f orn r3, r3, #127 ; 0x7f - *(str++) = static_cast((cp >> 6) | 0XC0); - a718: f800 2b02 strb.w r2, [r0], #2 - *(str++) = static_cast((cp & 0X3F) | 0X80); - a71c: 704b strb r3, [r1, #1] - a71e: 4770 bx lr - } else if (cp < 0X10000) { - a720: f5b0 3f80 cmp.w r0, #65536 ; 0x10000 - a724: d211 bcs.n a74a - if (n < 3) goto fail; - a726: 2a02 cmp r2, #2 - a728: d928 bls.n a77c - *(str++) = static_cast((cp >> 12) | 0XE0); - *(str++) = static_cast(((cp >> 6) & 0X3F) | 0X80); - a72a: f3c3 1285 ubfx r2, r3, #6, #6 - *(str++) = static_cast((cp >> 12) | 0XE0); - a72e: 0b00 lsrs r0, r0, #12 - *(str++) = static_cast((cp & 0X3F) | 0X80); - a730: f003 033f and.w r3, r3, #63 ; 0x3f - *(str++) = static_cast((cp >> 12) | 0XE0); - a734: f060 001f orn r0, r0, #31 - *(str++) = static_cast(((cp >> 6) & 0X3F) | 0X80); - a738: f062 027f orn r2, r2, #127 ; 0x7f - *(str++) = static_cast((cp & 0X3F) | 0X80); - a73c: f063 037f orn r3, r3, #127 ; 0x7f - *(str++) = static_cast((cp >> 12) | 0XE0); - a740: 7008 strb r0, [r1, #0] - *(str++) = static_cast(((cp >> 6) & 0X3F) | 0X80); - a742: 704a strb r2, [r1, #1] - *(str++) = static_cast((cp & 0X3F) | 0X80); - a744: 1cc8 adds r0, r1, #3 - a746: 708b strb r3, [r1, #2] - a748: 4770 bx lr - } else { - if (n < 4) goto fail; - a74a: 2a03 cmp r2, #3 - a74c: d916 bls.n a77c - *(str++) = static_cast((cp >> 18) | 0XF0); - a74e: ea4f 4c90 mov.w ip, r0, lsr #18 - *(str++) = static_cast(((cp >> 12) & 0X3F)| 0X80); - *(str++) = static_cast(((cp >> 6) & 0X3F) | 0X80); - a752: f3c3 1285 ubfx r2, r3, #6, #6 - *(str++) = static_cast(((cp >> 12) & 0X3F)| 0X80); - a756: f3c0 3005 ubfx r0, r0, #12, #6 - *(str++) = static_cast((cp & 0X3F) | 0X80); - a75a: f003 033f and.w r3, r3, #63 ; 0x3f - *(str++) = static_cast((cp >> 18) | 0XF0); - a75e: f06c 0c0f orn ip, ip, #15 - *(str++) = static_cast(((cp >> 12) & 0X3F)| 0X80); - a762: f060 007f orn r0, r0, #127 ; 0x7f - *(str++) = static_cast(((cp >> 6) & 0X3F) | 0X80); - a766: f062 027f orn r2, r2, #127 ; 0x7f - *(str++) = static_cast((cp & 0X3F) | 0X80); - a76a: f063 037f orn r3, r3, #127 ; 0x7f - *(str++) = static_cast(((cp >> 12) & 0X3F)| 0X80); - a76e: 7048 strb r0, [r1, #1] - *(str++) = static_cast((cp & 0X3F) | 0X80); - a770: 70cb strb r3, [r1, #3] - *(str++) = static_cast((cp >> 18) | 0XF0); - a772: f881 c000 strb.w ip, [r1] - *(str++) = static_cast(((cp >> 6) & 0X3F) | 0X80); - a776: 708a strb r2, [r1, #2] - *(str++) = static_cast((cp & 0X3F) | 0X80); - a778: 1d08 adds r0, r1, #4 - a77a: 4770 bx lr - } - return str; - - fail: - return nullptr; - a77c: 2000 movs r0, #0 - } - a77e: 4770 bx lr - -0000a780 : - //---------------------------------------------------------------------------- - // to do? improve error check - const char* mbToCp(const char* str, const char* end, uint32_t* rtn) { - size_t n; - uint32_t cp; - if (str >= end) { - a780: 4288 cmp r0, r1 - a782: d239 bcs.n a7f8 - const char* mbToCp(const char* str, const char* end, uint32_t* rtn) { - a784: b410 push {r4} - a786: 4603 mov r3, r0 - return nullptr; - } - uint8_t ch = str[0]; - if ((ch & 0X80) == 0) { - a788: f990 0000 ldrsb.w r0, [r0] - uint8_t ch = str[0]; - a78c: 781c ldrb r4, [r3, #0] - if ((ch & 0X80) == 0) { - a78e: 2800 cmp r0, #0 - a790: da2b bge.n a7ea - *rtn = ch; - return str + 1; - } - if ((ch & 0XE0) == 0XC0) { - a792: f004 00e0 and.w r0, r4, #224 ; 0xe0 - a796: 28c0 cmp r0, #192 ; 0xc0 - a798: d030 beq.n a7fc - cp = ch & 0X1F; - n = 2; - } else if ((ch & 0XF0) == 0XE0) { - a79a: f004 00f0 and.w r0, r4, #240 ; 0xf0 - a79e: 28e0 cmp r0, #224 ; 0xe0 - a7a0: d030 beq.n a804 - cp = ch & 0X0F; - n = 3; - } else if ((ch & 0XF8) == 0XF0) { - a7a2: f004 00f8 and.w r0, r4, #248 ; 0xf8 - a7a6: 28f0 cmp r0, #240 ; 0xf0 - a7a8: d123 bne.n a7f2 - cp = ch & 0X07; - a7aa: f004 0407 and.w r4, r4, #7 - n = 4; - a7ae: 2004 movs r0, #4 - } else { - return nullptr; - } - if ((str + n) > end) { - a7b0: 4418 add r0, r3 - a7b2: 4288 cmp r0, r1 - a7b4: d81d bhi.n a7f2 - a7b6: 3301 adds r3, #1 - return nullptr; - } - for (size_t i = 1; i < n; i++) { - ch = str[i]; - a7b8: f813 1b01 ldrb.w r1, [r3], #1 - if ((ch & 0XC0) != 0X80) { - a7bc: f001 0cc0 and.w ip, r1, #192 ; 0xc0 - a7c0: f1bc 0f80 cmp.w ip, #128 ; 0x80 - return nullptr; - } - cp <<= 6; - cp |= ch & 0X3F; - a7c4: f001 013f and.w r1, r1, #63 ; 0x3f - a7c8: ea41 1484 orr.w r4, r1, r4, lsl #6 - if ((ch & 0XC0) != 0X80) { - a7cc: d111 bne.n a7f2 - for (size_t i = 1; i < n; i++) { - a7ce: 4283 cmp r3, r0 - a7d0: d1f2 bne.n a7b8 - } - // Don't allow over long as ASCII. - if (cp < 0X80 || !isValidCp(cp)) { - a7d2: 4b0e ldr r3, [pc, #56] ; (a80c ) - a7d4: f1a4 0180 sub.w r1, r4, #128 ; 0x80 - a7d8: 4299 cmp r1, r3 - a7da: d80a bhi.n a7f2 - /** Check for a valid code point. - * \param[in] cp code point. - * \return true if valid else false. - */ - inline bool isValidCp(uint32_t cp) { - return cp <= 0x10FFFF && (cp < 0XD800 || cp > 0XDFFF); - a7dc: f5a4 4358 sub.w r3, r4, #55296 ; 0xd800 - a7e0: f5b3 6f00 cmp.w r3, #2048 ; 0x800 - a7e4: d305 bcc.n a7f2 - return nullptr; - } - *rtn = cp; - a7e6: 6014 str r4, [r2, #0] - return str + n; - a7e8: e001 b.n a7ee - *rtn = ch; - a7ea: 6014 str r4, [r2, #0] - return str + 1; - a7ec: 1c58 adds r0, r3, #1 - } - a7ee: bc10 pop {r4} - a7f0: 4770 bx lr - return nullptr; - a7f2: 2000 movs r0, #0 - } - a7f4: bc10 pop {r4} - a7f6: 4770 bx lr - return nullptr; - a7f8: 2000 movs r0, #0 - } - a7fa: 4770 bx lr - cp = ch & 0X1F; - a7fc: f004 041f and.w r4, r4, #31 - n = 2; - a800: 2002 movs r0, #2 - a802: e7d5 b.n a7b0 - cp = ch & 0X0F; - a804: f004 040f and.w r4, r4, #15 - n = 3; - a808: 2003 movs r0, #3 - a80a: e7d1 b.n a7b0 - a80c: 0010ff7f .word 0x0010ff7f - -0000a810 : -} -//------------------------------------------------------------------------------ -uint16_t toUpcase(uint16_t chr) { - uint16_t i, first; - // Optimize for simple ASCII. - if (chr < 127) { - a810: 287e cmp r0, #126 ; 0x7e - a812: d941 bls.n a898 -uint16_t toUpcase(uint16_t chr) { - a814: b410 push {r4} - size_t right = size; - a816: f04f 0c35 mov.w ip, #53 ; 0x35 - a81a: 4c28 ldr r4, [pc, #160] ; (a8bc ) - size_t left = 0; - a81c: 2300 movs r3, #0 - a81e: e005 b.n a82c - if (readTable16(table[mid].key) <= key) { - a820: f834 1022 ldrh.w r1, [r4, r2, lsl #2] - mid = left + (right - left)/2; - a824: 4281 cmp r1, r0 - a826: bf8c ite hi - a828: 4694 movhi ip, r2 - a82a: 4613 movls r3, r2 - while (right - left > 1) { - a82c: ebac 0103 sub.w r1, ip, r3 - a830: 2901 cmp r1, #1 - mid = left + (right - left)/2; - a832: eb03 0251 add.w r2, r3, r1, lsr #1 - while (right - left > 1) { - a836: d8f3 bhi.n a820 - return chr - ('a' <= chr && chr <= 'z' ? 'a' - 'A' : 0); - } - i = searchPair16(reinterpret_cast(mapTable), MAP_DIM, chr); - first = readTable16(mapTable[i].base); - a838: b29b uxth r3, r3 - a83a: f834 2023 ldrh.w r2, [r4, r3, lsl #2] - if (first <= chr && (chr - first) < readTable8(mapTable[i].count)) { - a83e: 4290 cmp r0, r2 - a840: d21a bcs.n a878 - a842: 4c1f ldr r4, [pc, #124] ; (a8c0 ) - a844: f04f 0c4b mov.w ip, #75 ; 0x4b - a848: 2300 movs r3, #0 - a84a: e005 b.n a858 - if (readTable16(table[mid].key) <= key) { - a84c: f834 1022 ldrh.w r1, [r4, r2, lsl #2] - mid = left + (right - left)/2; - a850: 4281 cmp r1, r0 - a852: bf8c ite hi - a854: 4694 movhi ip, r2 - a856: 4613 movls r3, r2 - while (right - left > 1) { - a858: ebac 0103 sub.w r1, ip, r3 - a85c: 2901 cmp r1, #1 - mid = left + (right - left)/2; - a85e: eb03 0251 add.w r2, r3, r1, lsr #1 - while (right - left > 1) { - a862: d8f3 bhi.n a84c - return chr - ((chr - first) & 1); - } - return chr + (off ? off : -0x1C60); - } - i = searchPair16(lookupTable, LOOKUP_DIM, chr); - if (readTable16(lookupTable[i].key) == chr) { - a864: b29b uxth r3, r3 - a866: f834 2023 ldrh.w r2, [r4, r3, lsl #2] - a86a: 4282 cmp r2, r0 - return readTable16(lookupTable[i].val); - a86c: bf04 itt eq - a86e: eb04 0483 addeq.w r4, r4, r3, lsl #2 - a872: 8860 ldrheq r0, [r4, #2] - } - return chr; -} - a874: bc10 pop {r4} - a876: 4770 bx lr - if (first <= chr && (chr - first) < readTable8(mapTable[i].count)) { - a878: eb04 0483 add.w r4, r4, r3, lsl #2 - a87c: 1a82 subs r2, r0, r2 - a87e: 78e3 ldrb r3, [r4, #3] - a880: 429a cmp r2, r3 - a882: dade bge.n a842 - int8_t off = readTable8(mapTable[i].off); - a884: f994 3002 ldrsb.w r3, [r4, #2] - if (off == 1) { - a888: 2b01 cmp r3, #1 - a88a: d00f beq.n a8ac - return chr + (off ? off : -0x1C60); - a88c: b19b cbz r3, a8b6 - a88e: b29b uxth r3, r3 - a890: 4403 add r3, r0 - a892: b298 uxth r0, r3 -} - a894: bc10 pop {r4} - a896: 4770 bx lr - return chr - ('a' <= chr && chr <= 'z' ? 'a' - 'A' : 0); - a898: f1a0 0361 sub.w r3, r0, #97 ; 0x61 - a89c: 2b19 cmp r3, #25 - a89e: bf8c ite hi - a8a0: 2300 movhi r3, #0 - a8a2: 2301 movls r3, #1 - a8a4: eba0 1343 sub.w r3, r0, r3, lsl #5 - a8a8: b298 uxth r0, r3 -} - a8aa: 4770 bx lr - return chr - ((chr - first) & 1); - a8ac: f002 0201 and.w r2, r2, #1 - a8b0: 1a83 subs r3, r0, r2 - a8b2: b298 uxth r0, r3 - a8b4: e7de b.n a874 - return chr + (off ? off : -0x1C60); - a8b6: f24e 33a0 movw r3, #58272 ; 0xe3a0 - a8ba: e7e9 b.n a890 - a8bc: 000182d0 .word 0x000182d0 - a8c0: 000181a4 .word 0x000181a4 - -0000a8c4 : - // The code triggering the event does NOT control which of the above - // response methods will be used. - virtual void triggerEvent(int status=0, void *data=nullptr) { - _status = status; - _data = data; - if (_type == EventTypeImmediate) { - a8c4: f890 c01c ldrb.w ip, [r0, #28] - _status = status; - a8c8: 6041 str r1, [r0, #4] - if (_type == EventTypeImmediate) { - a8ca: f1bc 0f02 cmp.w ip, #2 - _data = data; - a8ce: 60c2 str r2, [r0, #12] - if (_type == EventTypeImmediate) { - a8d0: d101 bne.n a8d6 - (*_function)(*this); - a8d2: 6883 ldr r3, [r0, #8] - a8d4: 4718 bx r3 - } else { - triggerEventNotImmediate(); - a8d6: f000 bd7d b.w b3d4 - a8da: bf00 nop - -0000a8dc : - } - } - } -} - -void SPIClass::transfer(const void * buf, void * retbuf, size_t count) - a8dc: 4684 mov ip, r0 - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - a8de: 6800 ldr r0, [r0, #0] - a8e0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - a8e4: 460c mov r4, r1 - a8e6: 4611 mov r1, r2 - a8e8: 461a mov r2, r3 -{ - - if (count == 0) return; - if (!(port().CTAR0 & SPI_CTAR_LSBFE)) { - a8ea: 68c3 ldr r3, [r0, #12] - a8ec: f013 7f80 tst.w r3, #16777216 ; 0x1000000 - const uint8_t *p_write = (const uint8_t *)buf; - uint8_t *p_read = (uint8_t *)retbuf; - size_t count_read = count; - - // Lets clear the reader queue - port().MCR = SPI_MCR_MSTR | SPI_MCR_CLR_RXF | SPI_MCR_PCSIS(0x1F); - a8f0: 4b7a ldr r3, [pc, #488] ; (aadc ) - a8f2: 6003 str r3, [r0, #0] - if (!(port().CTAR0 & SPI_CTAR_LSBFE)) { - a8f4: d14b bne.n a98e - - uint32_t sr; - - // Now lets loop while we still have data to output - if (count & 1) { - a8f6: 07d3 lsls r3, r2, #31 - a8f8: f100 80d1 bmi.w aa9e - port().PUSHR = *p_write++ | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - else - port().PUSHR = *p_write++ | SPI_PUSHR_CTAS(0); - } else { - if (count > 1) - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - a8fc: f89c 6024 ldrb.w r6, [ip, #36] ; 0x24 - a900: 4617 mov r7, r2 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CTAS(0); - } - count--; - } - - uint16_t w = (uint16_t)(_transferWriteFill << 8) | _transferWriteFill; - a902: ea46 2606 orr.w r6, r6, r6, lsl #8 - - while (count > 0) { - a906: 2f00 cmp r7, #0 - a908: f000 80b7 beq.w aa7a - // Push out the next byte; - if (p_write) { - a90c: b134 cbz r4, a91c - w = (*p_write++) << 8; - a90e: 7826 ldrb r6, [r4, #0] - a910: 7863 ldrb r3, [r4, #1] - a912: ea46 2603 orr.w r6, r6, r3, lsl #8 - a916: ba76 rev16 r6, r6 - w |= *p_write++; - a918: 3402 adds r4, #2 - a91a: b2b6 uxth r6, r6 - } - uint16_t queue_full_status_mask = (hardware().queue_size-1) << 12; - a91c: f8dc 3004 ldr.w r3, [ip, #4] - a920: f893 e008 ldrb.w lr, [r3, #8] - if (count == 2) - a924: 2f02 cmp r7, #2 - uint16_t queue_full_status_mask = (hardware().queue_size-1) << 12; - a926: f10e 3eff add.w lr, lr, #4294967295 ; 0xffffffff - a92a: ea4f 3e0e mov.w lr, lr, lsl #12 - port().PUSHR = w | SPI_PUSHR_CTAS(1); - a92e: bf0c ite eq - a930: f046 5380 orreq.w r3, r6, #268435456 ; 0x10000000 - else - port().PUSHR = w | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1); - a934: f046 4310 orrne.w r3, r6, #2415919104 ; 0x90000000 - uint16_t queue_full_status_mask = (hardware().queue_size-1) << 12; - a938: fa1f fe8e uxth.w lr, lr - port().PUSHR = w | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1); - a93c: 6343 str r3, [r0, #52] ; 0x34 - count -= 2; // how many bytes to output. - a93e: 3f02 subs r7, #2 - a940: e00a b.n a958 - do { - sr = port().SR; - if (sr & 0xF0) { - uint16_t w = port().POPR; // Read any pending RX bytes in - if (count_read & 1) { - if (p_read) { - a942: b111 cbz r1, a94a - *p_read++ = w; // Read any pending RX bytes in - a944: f805 0b01 strb.w r0, [r5], #1 - a948: 4629 mov r1, r5 - } - count_read--; - a94a: 3a01 subs r2, #1 - *p_read++ = (w & 0xff); - } - count_read -= 2; - } - } - } while ((sr & (15 << 12)) > queue_full_status_mask); - a94c: f403 4370 and.w r3, r3, #61440 ; 0xf000 - a950: 4573 cmp r3, lr - a952: d917 bls.n a984 - a954: f8dc 0000 ldr.w r0, [ip] - sr = port().SR; - a958: 6ac3 ldr r3, [r0, #44] ; 0x2c - if (sr & 0xF0) { - a95a: f013 0ff0 tst.w r3, #240 ; 0xf0 - a95e: d0f5 beq.n a94c - if (count_read & 1) { - a960: f012 0f01 tst.w r2, #1 - uint16_t w = port().POPR; // Read any pending RX bytes in - a964: 6b80 ldr r0, [r0, #56] ; 0x38 - *p_read++ = w; // Read any pending RX bytes in - a966: 460d mov r5, r1 - if (count_read & 1) { - a968: d1eb bne.n a942 - *p_read++ = w >> 8; - a96a: f3c0 2807 ubfx r8, r0, #8, #8 - if (p_read) { - a96e: b119 cbz r1, a978 - *p_read++ = w >> 8; - a970: f805 8b02 strb.w r8, [r5], #2 - *p_read++ = (w & 0xff); - a974: 7048 strb r0, [r1, #1] - a976: 4629 mov r1, r5 - } while ((sr & (15 << 12)) > queue_full_status_mask); - a978: f403 4370 and.w r3, r3, #61440 ; 0xf000 - a97c: 4573 cmp r3, lr - count_read -= 2; - a97e: f1a2 0202 sub.w r2, r2, #2 - } while ((sr & (15 << 12)) > queue_full_status_mask); - a982: d8e7 bhi.n a954 - while (count > 0) { - a984: 2f00 cmp r7, #0 - a986: d078 beq.n aa7a - a988: f8dc 0000 ldr.w r0, [ip] - a98c: e7be b.n a90c - port().MCR = SPI_MCR_MSTR | SPI_MCR_CLR_RXF | SPI_MCR_PCSIS(0x1F); - - uint32_t sr; - - // Now lets loop while we still have data to output - if (count & 1) { - a98e: 07d3 lsls r3, r2, #31 - a990: d45f bmi.n aa52 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - a992: f89c 7024 ldrb.w r7, [ip, #36] ; 0x24 - a996: 4616 mov r6, r2 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CTAS(0); - } - count--; - } - - uint16_t w = _transferWriteFill; - a998: b2bf uxth r7, r7 - - while (count > 0) { - a99a: 2e00 cmp r6, #0 - a99c: d045 beq.n aa2a - // Push out the next byte; - if (p_write) { - a99e: b124 cbz r4, a9aa - w = *p_write++; - w |= ((*p_write++) << 8); - a9a0: 7863 ldrb r3, [r4, #1] - a9a2: f814 7b02 ldrb.w r7, [r4], #2 - a9a6: ea47 2703 orr.w r7, r7, r3, lsl #8 - } - uint16_t queue_full_status_mask = (hardware().queue_size-1) << 12; - a9aa: f8dc 3004 ldr.w r3, [ip, #4] - a9ae: f893 e008 ldrb.w lr, [r3, #8] - if (count == 2) - a9b2: 2e02 cmp r6, #2 - uint16_t queue_full_status_mask = (hardware().queue_size-1) << 12; - a9b4: f10e 3eff add.w lr, lr, #4294967295 ; 0xffffffff - a9b8: ea4f 3e0e mov.w lr, lr, lsl #12 - port().PUSHR = w | SPI_PUSHR_CTAS(1); - a9bc: bf0c ite eq - a9be: f047 5380 orreq.w r3, r7, #268435456 ; 0x10000000 - else - port().PUSHR = w | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1); - a9c2: f047 4310 orrne.w r3, r7, #2415919104 ; 0x90000000 - uint16_t queue_full_status_mask = (hardware().queue_size-1) << 12; - a9c6: fa1f fe8e uxth.w lr, lr - port().PUSHR = w | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(1); - a9ca: 6343 str r3, [r0, #52] ; 0x34 - count -= 2; // how many bytes to output. - a9cc: 3e02 subs r6, #2 - a9ce: e00a b.n a9e6 - do { - sr = port().SR; - if (sr & 0xF0) { - uint16_t w = port().POPR; // Read any pending RX bytes in - if (count_read & 1) { - if (p_read) { - a9d0: b111 cbz r1, a9d8 - *p_read++ = w; // Read any pending RX bytes in - a9d2: f805 0b01 strb.w r0, [r5], #1 - a9d6: 4629 mov r1, r5 - } - count_read--; - a9d8: 3a01 subs r2, #1 - *p_read++ = w >> 8; - } - count_read -= 2; - } - } - } while ((sr & (15 << 12)) > queue_full_status_mask); - a9da: f403 4370 and.w r3, r3, #61440 ; 0xf000 - a9de: 4573 cmp r3, lr - a9e0: d917 bls.n aa12 - a9e2: f8dc 0000 ldr.w r0, [ip] - sr = port().SR; - a9e6: 6ac3 ldr r3, [r0, #44] ; 0x2c - if (sr & 0xF0) { - a9e8: f013 0ff0 tst.w r3, #240 ; 0xf0 - a9ec: d0f5 beq.n a9da - if (count_read & 1) { - a9ee: f012 0f01 tst.w r2, #1 - uint16_t w = port().POPR; // Read any pending RX bytes in - a9f2: 6b80 ldr r0, [r0, #56] ; 0x38 - *p_read++ = w; // Read any pending RX bytes in - a9f4: 460d mov r5, r1 - if (count_read & 1) { - a9f6: d1eb bne.n a9d0 - if (p_read) { - a9f8: b129 cbz r1, aa06 - *p_read++ = (w & 0xff); - a9fa: f805 0b02 strb.w r0, [r5], #2 - *p_read++ = w >> 8; - a9fe: f3c0 2007 ubfx r0, r0, #8, #8 - aa02: 7048 strb r0, [r1, #1] - aa04: 4629 mov r1, r5 - } while ((sr & (15 << 12)) > queue_full_status_mask); - aa06: f403 4370 and.w r3, r3, #61440 ; 0xf000 - aa0a: 4573 cmp r3, lr - count_read -= 2; - aa0c: f1a2 0202 sub.w r2, r2, #2 - } while ((sr & (15 << 12)) > queue_full_status_mask); - aa10: d8e7 bhi.n a9e2 - while (count > 0) { - aa12: b156 cbz r6, aa2a - aa14: f8dc 0000 ldr.w r0, [ip] - aa18: e7c1 b.n a99e - if (count_read & 1) { - if (p_read) - *p_read++ = w; // Read any pending RX bytes in - count_read--; - } else { - if (p_read) { - aa1a: b129 cbz r1, aa28 - *p_read++ = (w & 0xff); - aa1c: f800 3b02 strb.w r3, [r0], #2 - *p_read++ = w >> 8; - aa20: f3c3 2307 ubfx r3, r3, #8, #8 - aa24: 704b strb r3, [r1, #1] - aa26: 4601 mov r1, r0 - } - count_read -= 2; - aa28: 3a02 subs r2, #2 - while (count_read) { - aa2a: b182 cbz r2, aa4e - aa2c: f8dc 3000 ldr.w r3, [ip] - sr = port().SR; - aa30: 6ad8 ldr r0, [r3, #44] ; 0x2c - if (sr & 0xF0) { - aa32: f010 0ff0 tst.w r0, #240 ; 0xf0 - aa36: d0f8 beq.n aa2a - if (count_read & 1) { - aa38: 07d4 lsls r4, r2, #31 - uint16_t w = port().POPR; // Read any pending RX bytes in - aa3a: 6b9b ldr r3, [r3, #56] ; 0x38 - *p_read++ = w; // Read any pending RX bytes in - aa3c: 4608 mov r0, r1 - if (count_read & 1) { - aa3e: d5ec bpl.n aa1a - if (p_read) - aa40: b111 cbz r1, aa48 - *p_read++ = w; // Read any pending RX bytes in - aa42: f800 3b01 strb.w r3, [r0], #1 - aa46: 4601 mov r1, r0 - count_read--; - aa48: 3a01 subs r2, #1 - while (count_read) { - aa4a: 2a00 cmp r2, #0 - aa4c: d1ee bne.n aa2c - } - } - } - } -} - aa4e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (p_write) { - aa52: b384 cbz r4, aab6 - port().PUSHR = *p_write++ | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aa54: f814 3b01 ldrb.w r3, [r4], #1 - if (count > 1) - aa58: 2a01 cmp r2, #1 - port().PUSHR = *p_write++ | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aa5a: bf18 it ne - aa5c: f043 4300 orrne.w r3, r3, #2147483648 ; 0x80000000 - port().PUSHR = *p_write++ | SPI_PUSHR_CTAS(0); - aa60: 6343 str r3, [r0, #52] ; 0x34 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aa62: f89c 7024 ldrb.w r7, [ip, #36] ; 0x24 - count--; - aa66: 1e56 subs r6, r2, #1 - aa68: e796 b.n a998 - *p_read++ = w >> 8; - aa6a: f3c3 2407 ubfx r4, r3, #8, #8 - if (p_read) { - aa6e: b119 cbz r1, aa78 - *p_read++ = w >> 8; - aa70: f800 4b02 strb.w r4, [r0], #2 - *p_read++ = (w & 0xff); - aa74: 704b strb r3, [r1, #1] - aa76: 4601 mov r1, r0 - count_read -= 2; - aa78: 3a02 subs r2, #2 - while (count_read) { - aa7a: 2a00 cmp r2, #0 - aa7c: d0e7 beq.n aa4e - aa7e: f8dc 3000 ldr.w r3, [ip] - sr = port().SR; - aa82: 6ad8 ldr r0, [r3, #44] ; 0x2c - if (sr & 0xF0) { - aa84: f010 0ff0 tst.w r0, #240 ; 0xf0 - aa88: d0f7 beq.n aa7a - if (count_read & 1) { - aa8a: 07d4 lsls r4, r2, #31 - uint16_t w = port().POPR; // Read any pending RX bytes in - aa8c: 6b9b ldr r3, [r3, #56] ; 0x38 - *p_read++ = w; // Read any pending RX bytes in - aa8e: 4608 mov r0, r1 - if (count_read & 1) { - aa90: d5eb bpl.n aa6a - if (p_read) - aa92: b111 cbz r1, aa9a - *p_read++ = w; // Read any pending RX bytes in - aa94: f800 3b01 strb.w r3, [r0], #1 - aa98: 4601 mov r1, r0 - count_read--; - aa9a: 3a01 subs r2, #1 - aa9c: e7ed b.n aa7a - if (p_write) { - aa9e: b19c cbz r4, aac8 - port().PUSHR = *p_write++ | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aaa0: f814 3b01 ldrb.w r3, [r4], #1 - if (count > 1) - aaa4: 2a01 cmp r2, #1 - port().PUSHR = *p_write++ | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aaa6: bf18 it ne - aaa8: f043 4300 orrne.w r3, r3, #2147483648 ; 0x80000000 - port().PUSHR = *p_write++ | SPI_PUSHR_CTAS(0); - aaac: 6343 str r3, [r0, #52] ; 0x34 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aaae: f89c 6024 ldrb.w r6, [ip, #36] ; 0x24 - count--; - aab2: 1e57 subs r7, r2, #1 - aab4: e725 b.n a902 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aab6: f89c 7024 ldrb.w r7, [ip, #36] ; 0x24 - if (count > 1) - aaba: 2a01 cmp r2, #1 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aabc: bf1a itte ne - aabe: f047 4300 orrne.w r3, r7, #2147483648 ; 0x80000000 - aac2: 6343 strne r3, [r0, #52] ; 0x34 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CTAS(0); - aac4: 6347 streq r7, [r0, #52] ; 0x34 - aac6: e7ce b.n aa66 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aac8: f89c 6024 ldrb.w r6, [ip, #36] ; 0x24 - if (count > 1) - aacc: 2a01 cmp r2, #1 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CONT | SPI_PUSHR_CTAS(0); - aace: bf1a itte ne - aad0: f046 4300 orrne.w r3, r6, #2147483648 ; 0x80000000 - aad4: 6343 strne r3, [r0, #52] ; 0x34 - port().PUSHR = _transferWriteFill | SPI_PUSHR_CTAS(0); - aad6: 6346 streq r6, [r0, #52] ; 0x34 - aad8: e7eb b.n aab2 - aada: bf00 nop - aadc: 801f0400 .word 0x801f0400 - -0000aae0 : - const SPI_Hardware_t & hardware() { return *(const SPI_Hardware_t *)hardware_addr; } - aae0: 6843 ldr r3, [r0, #4] -{ - aae2: b410 push {r4} - hardware().clock_gate_register |= hardware().clock_gate_mask; - aae4: 681c ldr r4, [r3, #0] - aae6: 685a ldr r2, [r3, #4] - aae8: 6821 ldr r1, [r4, #0] - aaea: 4311 orrs r1, r2 - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - aaec: 6802 ldr r2, [r0, #0] - aaee: 6021 str r1, [r4, #0] - port().MCR = SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x1F); - aaf0: 4c15 ldr r4, [pc, #84] ; (ab48 ) - port().CTAR0 = SPI_CTAR_FMSZ(7) | SPI_CTAR_PBR(0) | SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1); - aaf2: 4916 ldr r1, [pc, #88] ; (ab4c ) - port().MCR = SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x1F); - aaf4: 6014 str r4, [r2, #0] - port().CTAR0 = SPI_CTAR_FMSZ(7) | SPI_CTAR_PBR(0) | SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1); - aaf6: 60d1 str r1, [r2, #12] - port().CTAR1 = SPI_CTAR_FMSZ(15) | SPI_CTAR_PBR(0) | SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1); - aaf8: 4c15 ldr r4, [pc, #84] ; (ab50 ) - port().MCR = SPI_MCR_MSTR | SPI_MCR_PCSIS(0x1F); - aafa: 4916 ldr r1, [pc, #88] ; (ab54 ) - port().CTAR1 = SPI_CTAR_FMSZ(15) | SPI_CTAR_PBR(0) | SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1); - aafc: 6114 str r4, [r2, #16] - port().MCR = SPI_MCR_MSTR | SPI_MCR_PCSIS(0x1F); - aafe: 6011 str r1, [r2, #0] - reg = portConfigRegister(hardware().mosi_pin[mosi_pin_index]); - ab00: 7a41 ldrb r1, [r0, #9] - ab02: 4a15 ldr r2, [pc, #84] ; (ab58 ) - ab04: 185c adds r4, r3, r1 - *reg = hardware().mosi_mux[mosi_pin_index]; - ab06: 310a adds r1, #10 - reg = portConfigRegister(hardware().mosi_pin[mosi_pin_index]); - ab08: f894 c024 ldrb.w ip, [r4, #36] ; 0x24 - *reg = hardware().mosi_mux[mosi_pin_index]; - ab0c: f853 4021 ldr.w r4, [r3, r1, lsl #2] - reg = portConfigRegister(hardware().mosi_pin[mosi_pin_index]); - ab10: eb02 01cc add.w r1, r2, ip, lsl #3 - ab14: 6849 ldr r1, [r1, #4] - *reg = hardware().mosi_mux[mosi_pin_index]; - ab16: 600c str r4, [r1, #0] - reg = portConfigRegister(hardware().miso_pin[miso_pin_index]); - ab18: 7a01 ldrb r1, [r0, #8] - ab1a: 185c adds r4, r3, r1 - *reg= hardware().miso_mux[miso_pin_index]; - ab1c: eb03 0181 add.w r1, r3, r1, lsl #2 - reg = portConfigRegister(hardware().miso_pin[miso_pin_index]); - ab20: f894 c018 ldrb.w ip, [r4, #24] - *reg= hardware().miso_mux[miso_pin_index]; - ab24: 69cc ldr r4, [r1, #28] - reg = portConfigRegister(hardware().miso_pin[miso_pin_index]); - ab26: eb02 01cc add.w r1, r2, ip, lsl #3 - ab2a: 6849 ldr r1, [r1, #4] - *reg= hardware().miso_mux[miso_pin_index]; - ab2c: 600c str r4, [r1, #0] - reg = portConfigRegister(hardware().sck_pin[sck_pin_index]); - ab2e: 7a81 ldrb r1, [r0, #10] -} - ab30: bc10 pop {r4} - reg = portConfigRegister(hardware().sck_pin[sck_pin_index]); - ab32: 1858 adds r0, r3, r1 - *reg = hardware().sck_mux[sck_pin_index]; - ab34: eb03 0381 add.w r3, r3, r1, lsl #2 - reg = portConfigRegister(hardware().sck_pin[sck_pin_index]); - ab38: f890 0030 ldrb.w r0, [r0, #48] ; 0x30 - *reg = hardware().sck_mux[sck_pin_index]; - ab3c: 6b59 ldr r1, [r3, #52] ; 0x34 - reg = portConfigRegister(hardware().sck_pin[sck_pin_index]); - ab3e: eb02 02c0 add.w r2, r2, r0, lsl #3 - ab42: 6853 ldr r3, [r2, #4] - *reg = hardware().sck_mux[sck_pin_index]; - ab44: 6019 str r1, [r3, #0] -} - ab46: 4770 bx lr - ab48: 001f4001 .word 0x001f4001 - ab4c: 38001001 .word 0x38001001 - ab50: 78001001 .word 0x78001001 - ab54: 801f0000 .word 0x801f0000 - ab58: 00018614 .word 0x00018614 - -0000ab5c : -{ - ab5c: b410 push {r4} - const SPI_Hardware_t & hardware() { return *(const SPI_Hardware_t *)hardware_addr; } - ab5e: 6842 ldr r2, [r0, #4] - reg = portConfigRegister(hardware().mosi_pin[mosi_pin_index]); - ab60: f890 c009 ldrb.w ip, [r0, #9] - ab64: 4b10 ldr r3, [pc, #64] ; (aba8 ) - ab66: 4494 add ip, r2 - *reg = 0; - ab68: 2100 movs r1, #0 - reg = portConfigRegister(hardware().mosi_pin[mosi_pin_index]); - ab6a: f89c c024 ldrb.w ip, [ip, #36] ; 0x24 - ab6e: eb03 0ccc add.w ip, r3, ip, lsl #3 - ab72: f8dc 4004 ldr.w r4, [ip, #4] - *reg = 0; - ab76: 6021 str r1, [r4, #0] - reg = portConfigRegister(hardware().miso_pin[miso_pin_index]); - ab78: f890 c008 ldrb.w ip, [r0, #8] - ab7c: 4494 add ip, r2 - ab7e: f89c c018 ldrb.w ip, [ip, #24] - ab82: eb03 0ccc add.w ip, r3, ip, lsl #3 - ab86: f8dc 4004 ldr.w r4, [ip, #4] - *reg = 0; - ab8a: 6021 str r1, [r4, #0] - reg = portConfigRegister(hardware().sck_pin[sck_pin_index]); - ab8c: 7a84 ldrb r4, [r0, #10] - KINETISK_SPI_t & port() { return *(KINETISK_SPI_t *)port_addr; } - ab8e: 6800 ldr r0, [r0, #0] - ab90: 4422 add r2, r4 - port().MCR = SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x1F); - ab92: 4c06 ldr r4, [pc, #24] ; (abac ) - reg = portConfigRegister(hardware().sck_pin[sck_pin_index]); - ab94: f892 2030 ldrb.w r2, [r2, #48] ; 0x30 - ab98: eb03 03c2 add.w r3, r3, r2, lsl #3 - ab9c: 685b ldr r3, [r3, #4] - *reg = 0; - ab9e: 6019 str r1, [r3, #0] - port().MCR = SPI_MCR_MDIS | SPI_MCR_HALT | SPI_MCR_PCSIS(0x1F); - aba0: 6004 str r4, [r0, #0] -} - aba2: bc10 pop {r4} - aba4: 4770 bx lr - aba6: bf00 nop - aba8: 00018614 .word 0x00018614 - abac: 001f4001 .word 0x001f4001 - -0000abb0 : - if (count == 0) return; - abb0: b10b cbz r3, abb6 - abb2: f7ff be93 b.w a8dc -} - abb6: 4770 bx lr - -0000abb8 : - - -//------------------------------------------------------------------------- -// DMA RX ISR -//------------------------------------------------------------------------- -void SPIClass::dma_rxisr(void) { - abb8: b470 push {r4, r5, r6} - void detachInterrupt(void) { - NVIC_DISABLE_IRQ(IRQ_DMA_CH0 + channel); - } - - void clearInterrupt(void) { - DMA_CINT = channel; - abba: 6b01 ldr r1, [r0, #48] ; 0x30 - abbc: 4a4a ldr r2, [pc, #296] ; (ace8 ) - abbe: 7909 ldrb r1, [r1, #4] - abc0: 77d1 strb r1, [r2, #31] - bool complete(void) { - if (TCD->CSR & DMA_TCD_CSR_DONE) return true; - return false; - } - void clearComplete(void) { - DMA_CDNE = channel; - abc2: 6ac1 ldr r1, [r0, #44] ; 0x2c - abc4: 7909 ldrb r1, [r1, #4] - abc6: 7711 strb r1, [r2, #28] - abc8: 6b01 ldr r1, [r0, #48] ; 0x30 - abca: 7909 ldrb r1, [r1, #4] - abcc: 7711 strb r1, [r2, #28] - _dmaRX->clearInterrupt(); - _dmaTX->clearComplete(); - _dmaRX->clearComplete(); - - uint8_t should_reenable_tx = true; // should we re-enable TX maybe not if count will be 0... - if (_dma_count_remaining) { - abce: 6a82 ldr r2, [r0, #40] ; 0x28 -void SPIClass::dma_rxisr(void) { - abd0: 4603 mov r3, r0 - if (_dma_count_remaining) { - abd2: b32a cbz r2, ac20 - // What do I need to do to start it back up again... - // We will use the BITR/CITR from RX as TX may have prefed some stuff - if (_dma_count_remaining > hardware().max_dma_count) { - abd4: 6841 ldr r1, [r0, #4] - abd6: 68c9 ldr r1, [r1, #12] - abd8: 428a cmp r2, r1 - abda: d943 bls.n ac64 - _dma_count_remaining -= hardware().max_dma_count; - abdc: 6ac4 ldr r4, [r0, #44] ; 0x2c - } else { - DMAChanneltransferCount(_dmaTX, _dma_count_remaining-1); - DMAChanneltransferCount(_dmaRX, _dma_count_remaining); - abde: 6b00 ldr r0, [r0, #48] ; 0x30 - _dma_count_remaining -= hardware().max_dma_count; - abe0: 1a52 subs r2, r2, r1 - abe2: 6821 ldr r1, [r4, #0] - abe4: 629a str r2, [r3, #40] ; 0x28 - if (_dma_count_remaining == 1) should_reenable_tx = false; - - _dma_count_remaining = 0; - } - // In some cases we need to again start the TX manually to get it to work... - if (_dmaTX->TCD->SADDR == &_transferWriteFill) { - abe6: 680d ldr r5, [r1, #0] - abe8: f103 0424 add.w r4, r3, #36 ; 0x24 - abec: 42a5 cmp r5, r4 - uint8_t should_reenable_tx = true; // should we re-enable TX maybe not if count will be 0... - abee: f04f 0201 mov.w r2, #1 - if (_dmaTX->TCD->SADDR == &_transferWriteFill) { - abf2: d059 beq.n aca8 - abf4: 681c ldr r4, [r3, #0] - port().PUSHR = (_transferWriteFill | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - } else { - port().PUSHR = (_transferWriteFill | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - } - } else { - if (port().CTAR0 & SPI_CTAR_FMSZ(8)) { - abf6: 68e5 ldr r5, [r4, #12] - abf8: f015 4f80 tst.w r5, #1073741824 ; 0x40000000 - // 16 bit mode - uint16_t w = *((uint16_t*)_dmaTX->TCD->SADDR); - abfc: 680d ldr r5, [r1, #0] - if (port().CTAR0 & SPI_CTAR_FMSZ(8)) { - abfe: d129 bne.n ac54 - _dmaTX->TCD->SADDR = (volatile uint8_t*)(_dmaTX->TCD->SADDR) + 2; - port().PUSHR = (w | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - } else { - uint8_t w = *((uint8_t*)_dmaTX->TCD->SADDR); - ac00: 782d ldrb r5, [r5, #0] - _dmaTX->TCD->SADDR = (volatile uint8_t*)(_dmaTX->TCD->SADDR) + 1; - ac02: 680e ldr r6, [r1, #0] - port().PUSHR = (w | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - ac04: f045 4500 orr.w r5, r5, #2147483648 ; 0x80000000 - _dmaTX->TCD->SADDR = (volatile uint8_t*)(_dmaTX->TCD->SADDR) + 1; - ac08: 3601 adds r6, #1 - ac0a: 600e str r6, [r1, #0] - port().PUSHR = (w | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - ac0c: 6365 str r5, [r4, #52] ; 0x34 - DMA_SERQ = channel; - ac0e: 4936 ldr r1, [pc, #216] ; (ace8 ) - ac10: 7900 ldrb r0, [r0, #4] - ac12: 76c8 strb r0, [r1, #27] - } - } - _dmaRX->enable(); - if (should_reenable_tx) - ac14: b112 cbz r2, ac1c - ac16: 6adb ldr r3, [r3, #44] ; 0x2c - ac18: 791b ldrb r3, [r3, #4] - ac1a: 76cb strb r3, [r1, #27] - - _dma_state = DMAState::completed; // set back to 1 in case our call wants to start up dma again - _dma_event_responder->triggerEvent(); - - } -} - ac1c: bc70 pop {r4, r5, r6} - ac1e: 4770 bx lr - ac20: 6801 ldr r1, [r0, #0] - port().SR = 0xFF0F0000; - ac22: 4c32 ldr r4, [pc, #200] ; (acec ) - _dma_event_responder->triggerEvent(); - ac24: 6b40 ldr r0, [r0, #52] ; 0x34 - port().RSER = 0; - ac26: 630a str r2, [r1, #48] ; 0x30 - port().SR = 0xFF0F0000; - ac28: 62cc str r4, [r1, #44] ; 0x2c - port().CTAR0 &= ~(SPI_CTAR_FMSZ(8)); // Hack restore back to 8 bits - ac2a: 68cc ldr r4, [r1, #12] - ac2c: f024 4480 bic.w r4, r4, #1073741824 ; 0x40000000 - ac30: 60cc str r4, [r1, #12] - _dma_event_responder->triggerEvent(); - ac32: 6804 ldr r4, [r0, #0] - ac34: 492e ldr r1, [pc, #184] ; (acf0 ) - ac36: 6824 ldr r4, [r4, #0] - _dma_state = DMAState::completed; // set back to 1 in case our call wants to start up dma again - ac38: f04f 0c03 mov.w ip, #3 - ac3c: 428c cmp r4, r1 - ac3e: f883 c025 strb.w ip, [r3, #37] ; 0x25 - _dma_event_responder->triggerEvent(); - ac42: d139 bne.n acb8 - if (_type == EventTypeImmediate) { - ac44: 7f03 ldrb r3, [r0, #28] - _status = status; - ac46: 6042 str r2, [r0, #4] - if (_type == EventTypeImmediate) { - ac48: 2b02 cmp r3, #2 - _data = data; - ac4a: 60c2 str r2, [r0, #12] - if (_type == EventTypeImmediate) { - ac4c: d138 bne.n acc0 -} - ac4e: bc70 pop {r4, r5, r6} - (*_function)(*this); - ac50: 6883 ldr r3, [r0, #8] - ac52: 4718 bx r3 - uint16_t w = *((uint16_t*)_dmaTX->TCD->SADDR); - ac54: 882d ldrh r5, [r5, #0] - _dmaTX->TCD->SADDR = (volatile uint8_t*)(_dmaTX->TCD->SADDR) + 2; - ac56: 680e ldr r6, [r1, #0] - port().PUSHR = (w | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - ac58: f045 4500 orr.w r5, r5, #2147483648 ; 0x80000000 - _dmaTX->TCD->SADDR = (volatile uint8_t*)(_dmaTX->TCD->SADDR) + 2; - ac5c: 3602 adds r6, #2 - ac5e: 600e str r6, [r1, #0] - port().PUSHR = (w | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - ac60: 6365 str r5, [r4, #52] ; 0x34 - ac62: e7d4 b.n ac0e - DMAChanneltransferCount(_dmaTX, _dma_count_remaining-1); - ac64: 6ac1 ldr r1, [r0, #44] ; 0x2c - ac66: 6809 ldr r1, [r1, #0] - if (!(tcd->BITER & DMA_TCD_BITER_ELINK)) { - ac68: 8bcc ldrh r4, [r1, #30] - ac6a: 0426 lsls r6, r4, #16 - DMAChanneltransferCount(_dmaTX, _dma_count_remaining-1); - ac6c: f102 30ff add.w r0, r2, #4294967295 ; 0xffffffff - if (!(tcd->BITER & DMA_TCD_BITER_ELINK)) { - ac70: d431 bmi.n acd6 - tcd->BITER = len & 0x7fff; - ac72: f3c0 000e ubfx r0, r0, #0, #15 - ac76: 83c8 strh r0, [r1, #30] - tcd->CITER = tcd->BITER; - ac78: 8bcc ldrh r4, [r1, #30] - DMAChanneltransferCount(_dmaRX, _dma_count_remaining); - ac7a: 6b18 ldr r0, [r3, #48] ; 0x30 - tcd->CITER = tcd->BITER; - ac7c: b2a4 uxth r4, r4 - ac7e: 82cc strh r4, [r1, #22] - DMAChanneltransferCount(_dmaRX, _dma_count_remaining); - ac80: 6804 ldr r4, [r0, #0] - if (!(tcd->BITER & DMA_TCD_BITER_ELINK)) { - ac82: 8be5 ldrh r5, [r4, #30] - ac84: 042d lsls r5, r5, #16 - ac86: d41e bmi.n acc6 - tcd->BITER = len & 0x7fff; - ac88: f3c2 050e ubfx r5, r2, #0, #15 - ac8c: 83e5 strh r5, [r4, #30] - tcd->CITER = tcd->BITER; - ac8e: 8be5 ldrh r5, [r4, #30] - ac90: b2ad uxth r5, r5 - ac92: 82e5 strh r5, [r4, #22] - if (_dmaTX->TCD->SADDR == &_transferWriteFill) { - ac94: 680d ldr r5, [r1, #0] - _dma_count_remaining = 0; - ac96: 2400 movs r4, #0 - uint8_t should_reenable_tx = true; // should we re-enable TX maybe not if count will be 0... - ac98: 3a01 subs r2, #1 - _dma_count_remaining = 0; - ac9a: 629c str r4, [r3, #40] ; 0x28 - if (_dmaTX->TCD->SADDR == &_transferWriteFill) { - ac9c: f103 0424 add.w r4, r3, #36 ; 0x24 - uint8_t should_reenable_tx = true; // should we re-enable TX maybe not if count will be 0... - aca0: bf18 it ne - aca2: 2201 movne r2, #1 - if (_dmaTX->TCD->SADDR == &_transferWriteFill) { - aca4: 42a5 cmp r5, r4 - aca6: d1a5 bne.n abf4 - aca8: 6819 ldr r1, [r3, #0] - if (port().CTAR0 & SPI_CTAR_FMSZ(8)) { - acaa: 68cc ldr r4, [r1, #12] - port().PUSHR = (_transferWriteFill | SPI_PUSHR_CTAS(0) | SPI_PUSHR_CONT); - acac: f893 4024 ldrb.w r4, [r3, #36] ; 0x24 - acb0: f044 4400 orr.w r4, r4, #2147483648 ; 0x80000000 - acb4: 634c str r4, [r1, #52] ; 0x34 - acb6: e7aa b.n ac0e - _dma_event_responder->triggerEvent(); - acb8: 4623 mov r3, r4 - acba: 4611 mov r1, r2 -} - acbc: bc70 pop {r4, r5, r6} - _dma_event_responder->triggerEvent(); - acbe: 4718 bx r3 -} - acc0: bc70 pop {r4, r5, r6} - triggerEventNotImmediate(); - acc2: f000 bb87 b.w b3d4 - tcd->BITER = (tcd->BITER & 0xFE00) | (len & 0x1ff); - acc6: 8be5 ldrh r5, [r4, #30] - acc8: f3c2 0608 ubfx r6, r2, #0, #9 - accc: f405 457e and.w r5, r5, #65024 ; 0xfe00 - acd0: 4335 orrs r5, r6 - acd2: 83e5 strh r5, [r4, #30] - acd4: e7db b.n ac8e - acd6: 8bcc ldrh r4, [r1, #30] - acd8: f3c0 0008 ubfx r0, r0, #0, #9 - acdc: f404 447e and.w r4, r4, #65024 ; 0xfe00 - ace0: 4320 orrs r0, r4 - ace2: 83c8 strh r0, [r1, #30] - ace4: e7c8 b.n ac78 - ace6: bf00 nop - ace8: 40008000 .word 0x40008000 - acec: ff0f0000 .word 0xff0f0000 - acf0: 0000a8c5 .word 0x0000a8c5 - -0000acf4 <_spi_dma_rxISR0()>: -void _spi_dma_rxISR0(void) {SPI.dma_rxisr();} - acf4: b508 push {r3, lr} - acf6: 4802 ldr r0, [pc, #8] ; (ad00 <_spi_dma_rxISR0()+0xc>) - acf8: f7ff ff5e bl abb8 - acfc: bd08 pop {r3, pc} - acfe: bf00 nop - ad00: 1fff878c .word 0x1fff878c - -0000ad04 : - TinyGPSLocation() : valid(false), updated(false) - ad04: 2200 movs r2, #0 -#define _GNGGAterm "GNGGA" - -TinyGPSPlus::TinyGPSPlus() - : parity(0) - , isChecksumTerm(false) - , curSentenceType(GPS_SENTENCE_OTHER) - ad06: 2102 movs r1, #2 - ad08: 8002 strh r2, [r0, #0] - RawDegrees() : deg(0), billionths(0), negative(false) - ad0a: 8082 strh r2, [r0, #4] - ad0c: 6082 str r2, [r0, #8] - ad0e: 7302 strb r2, [r0, #12] - ad10: 8202 strh r2, [r0, #16] - ad12: 6142 str r2, [r0, #20] - ad14: 7602 strb r2, [r0, #24] - ad16: 8382 strh r2, [r0, #28] - ad18: 6202 str r2, [r0, #32] - ad1a: f880 2024 strb.w r2, [r0, #36] ; 0x24 - ad1e: 8502 strh r2, [r0, #40] ; 0x28 - ad20: 62c2 str r2, [r0, #44] ; 0x2c - ad22: f880 2030 strb.w r2, [r0, #48] ; 0x30 - TinyGPSDate() : valid(false), updated(false), date(0) - ad26: 8702 strh r2, [r0, #56] ; 0x38 - ad28: 63c2 str r2, [r0, #60] ; 0x3c - TinyGPSTime() : valid(false), updated(false), time(0) - ad2a: f8a0 2048 strh.w r2, [r0, #72] ; 0x48 - ad2e: 64c2 str r2, [r0, #76] ; 0x4c - TinyGPSDecimal() : valid(false), updated(false), val(0) - ad30: f8a0 2058 strh.w r2, [r0, #88] ; 0x58 - ad34: 6602 str r2, [r0, #96] ; 0x60 - ad36: f8a0 2068 strh.w r2, [r0, #104] ; 0x68 - ad3a: 6702 str r2, [r0, #112] ; 0x70 - ad3c: f8a0 2078 strh.w r2, [r0, #120] ; 0x78 - ad40: f8c0 2080 str.w r2, [r0, #128] ; 0x80 - TinyGPSInteger() : valid(false), updated(false), val(0) - ad44: f8a0 2088 strh.w r2, [r0, #136] ; 0x88 - ad48: f8c0 2090 str.w r2, [r0, #144] ; 0x90 - TinyGPSDecimal() : valid(false), updated(false), val(0) - ad4c: f8a0 2098 strh.w r2, [r0, #152] ; 0x98 - ad50: f8c0 20a0 str.w r2, [r0, #160] ; 0xa0 - ad54: f880 10b9 strb.w r1, [r0, #185] ; 0xb9 - , curTermNumber(0) - ad58: f8a0 20ba strh.w r2, [r0, #186] ; 0xba - , curTermOffset(0) - , sentenceHasFix(false) - ad5c: f880 20bc strb.w r2, [r0, #188] ; 0xbc - , customElts(0) - ad60: f8c0 20c0 str.w r2, [r0, #192] ; 0xc0 - , customCandidates(0) - ad64: f8c0 20c4 str.w r2, [r0, #196] ; 0xc4 - , encodedCharCount(0) - ad68: f8c0 20c8 str.w r2, [r0, #200] ; 0xc8 - , sentencesWithFixCount(0) - ad6c: f8c0 20cc str.w r2, [r0, #204] ; 0xcc - , failedChecksumCount(0) - ad70: f8c0 20d0 str.w r2, [r0, #208] ; 0xd0 - , passedChecksumCount(0) - ad74: f8c0 20d4 str.w r2, [r0, #212] ; 0xd4 - : parity(0) - ad78: f8a0 20a8 strh.w r2, [r0, #168] ; 0xa8 -{ - term[0] = '\0'; - ad7c: f880 20aa strb.w r2, [r0, #170] ; 0xaa -} - ad80: 4770 bx lr - ad82: bf00 nop - -0000ad84 : -} - -// static -// Parse a (potentially negative) number with up to 2 decimal digits -xxxx.yy -int32_t TinyGPSPlus::parseDecimal(const char *term) -{ - ad84: b538 push {r3, r4, r5, lr} - bool negative = *term == '-'; - ad86: 7805 ldrb r5, [r0, #0] -{ - ad88: 4604 mov r4, r0 - if (negative) ++term; - ad8a: 2d2d cmp r5, #45 ; 0x2d - ad8c: bf08 it eq - ad8e: 3401 addeq r4, #1 - int32_t ret = 100 * (int32_t)atol(term); - ad90: 4620 mov r0, r4 - ad92: f005 f973 bl 1007c - while (isdigit(*term)) ++term; - ad96: 7823 ldrb r3, [r4, #0] - int32_t ret = 100 * (int32_t)atol(term); - ad98: 2264 movs r2, #100 ; 0x64 - ad9a: fb02 f000 mul.w r0, r2, r0 - while (isdigit(*term)) ++term; - ad9e: f1a3 0230 sub.w r2, r3, #48 ; 0x30 - ada2: 2a09 cmp r2, #9 - ada4: d805 bhi.n adb2 - ada6: f814 3f01 ldrb.w r3, [r4, #1]! - adaa: f1a3 0230 sub.w r2, r3, #48 ; 0x30 - adae: 2a09 cmp r2, #9 - adb0: d9f9 bls.n ada6 - if (*term == '.' && isdigit(term[1])) - adb2: 2b2e cmp r3, #46 ; 0x2e - adb4: d003 beq.n adbe - { - ret += 10 * (term[1] - '0'); - if (isdigit(term[2])) - ret += term[2] - '0'; - } - return negative ? -ret : ret; - adb6: 2d2d cmp r5, #45 ; 0x2d - adb8: bf08 it eq - adba: 4240 negeq r0, r0 -} - adbc: bd38 pop {r3, r4, r5, pc} - if (*term == '.' && isdigit(term[1])) - adbe: 7863 ldrb r3, [r4, #1] - adc0: 3b30 subs r3, #48 ; 0x30 - adc2: 2b09 cmp r3, #9 - adc4: d8f7 bhi.n adb6 - if (isdigit(term[2])) - adc6: 78a2 ldrb r2, [r4, #2] - ret += 10 * (term[1] - '0'); - adc8: eb03 0383 add.w r3, r3, r3, lsl #2 - if (isdigit(term[2])) - adcc: 3a30 subs r2, #48 ; 0x30 - ret += 10 * (term[1] - '0'); - adce: eb00 0043 add.w r0, r0, r3, lsl #1 - if (isdigit(term[2])) - add2: 2a09 cmp r2, #9 - ret += term[2] - '0'; - add4: bf98 it ls - add6: 1880 addls r0, r0, r2 - return negative ? -ret : ret; - add8: 2d2d cmp r5, #45 ; 0x2d - adda: bf08 it eq - addc: 4240 negeq r0, r0 -} - adde: bd38 pop {r3, r4, r5, pc} - -0000ade0 : - -// static -// Parse degrees in that funny NMEA format DDMM.MMMM -void TinyGPSPlus::parseDegrees(const char *term, RawDegrees °) -{ - ade0: b570 push {r4, r5, r6, lr} - ade2: 460d mov r5, r1 - ade4: 4604 mov r4, r0 - uint32_t leftOfDecimal = (uint32_t)atol(term); - ade6: f005 f949 bl 1007c - uint16_t minutes = (uint16_t)(leftOfDecimal % 100); - adea: 4b1c ldr r3, [pc, #112] ; (ae5c ) - adec: fba3 2300 umull r2, r3, r3, r0 - adf0: 095b lsrs r3, r3, #5 - uint32_t multiplier = 10000000UL; - uint32_t tenMillionthsOfMinutes = minutes * multiplier; - - deg.deg = (int16_t)(leftOfDecimal / 100); - adf2: 802b strh r3, [r5, #0] - uint16_t minutes = (uint16_t)(leftOfDecimal % 100); - adf4: 2264 movs r2, #100 ; 0x64 - adf6: fb02 0013 mls r0, r2, r3, r0 - - while (isdigit(*term)) - adfa: 7822 ldrb r2, [r4, #0] - uint32_t tenMillionthsOfMinutes = minutes * multiplier; - adfc: 4b18 ldr r3, [pc, #96] ; (ae60 ) - while (isdigit(*term)) - adfe: f1a2 0130 sub.w r1, r2, #48 ; 0x30 - ae02: 2909 cmp r1, #9 - uint32_t tenMillionthsOfMinutes = minutes * multiplier; - ae04: fb00 f303 mul.w r3, r0, r3 - while (isdigit(*term)) - ae08: d805 bhi.n ae16 - ae0a: f814 2f01 ldrb.w r2, [r4, #1]! - ae0e: f1a2 0130 sub.w r1, r2, #48 ; 0x30 - ae12: 2909 cmp r1, #9 - ae14: d9f9 bls.n ae0a - ++term; - - if (*term == '.') - ae16: 2a2e cmp r2, #46 ; 0x2e - ae18: d00a beq.n ae30 - { - multiplier /= 10; - tenMillionthsOfMinutes += (*term - '0') * multiplier; - } - - deg.billionths = (5 * tenMillionthsOfMinutes + 1) / 3; - ae1a: 4a12 ldr r2, [pc, #72] ; (ae64 ) - ae1c: eb03 0383 add.w r3, r3, r3, lsl #2 - ae20: 3301 adds r3, #1 - ae22: fba2 2303 umull r2, r3, r2, r3 - ae26: 085b lsrs r3, r3, #1 - deg.negative = false; - ae28: 2200 movs r2, #0 - deg.billionths = (5 * tenMillionthsOfMinutes + 1) / 3; - ae2a: 606b str r3, [r5, #4] - deg.negative = false; - ae2c: 722a strb r2, [r5, #8] -} - ae2e: bd70 pop {r4, r5, r6, pc} - while (isdigit(*++term)) - ae30: 7860 ldrb r0, [r4, #1] - ae32: f1a0 0130 sub.w r1, r0, #48 ; 0x30 - ae36: 2909 cmp r1, #9 - ae38: f104 0401 add.w r4, r4, #1 - ae3c: d8ed bhi.n ae1a - uint32_t multiplier = 10000000UL; - ae3e: 4a08 ldr r2, [pc, #32] ; (ae60 ) - multiplier /= 10; - ae40: 4e09 ldr r6, [pc, #36] ; (ae68 ) - while (isdigit(*++term)) - ae42: f814 0f01 ldrb.w r0, [r4, #1]! - multiplier /= 10; - ae46: fba6 c202 umull ip, r2, r6, r2 - ae4a: 08d2 lsrs r2, r2, #3 - tenMillionthsOfMinutes += (*term - '0') * multiplier; - ae4c: fb02 3301 mla r3, r2, r1, r3 - while (isdigit(*++term)) - ae50: f1a0 0130 sub.w r1, r0, #48 ; 0x30 - ae54: 2909 cmp r1, #9 - ae56: d9f4 bls.n ae42 - ae58: e7df b.n ae1a - ae5a: bf00 nop - ae5c: 51eb851f .word 0x51eb851f - ae60: 00989680 .word 0x00989680 - ae64: aaaaaaab .word 0xaaaaaaab - ae68: cccccccd .word 0xcccccccd - -0000ae6c : -#define COMBINE(sentence_type, term_number) (((unsigned)(sentence_type) << 5) | term_number) - -// Processes a just-completed term -// Returns true if new sentence has just passed checksum test and is validated -bool TinyGPSPlus::endOfTermHandler() -{ - ae6c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - // If it's the checksum term, and the checksum checks out, commit - if (isChecksumTerm) - ae70: f890 60a9 ldrb.w r6, [r0, #169] ; 0xa9 -{ - ae74: b08c sub sp, #48 ; 0x30 - ae76: 4604 mov r4, r0 - if (isChecksumTerm) - ae78: b35e cbz r6, aed2 - { - byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]); - ae7a: f890 30aa ldrb.w r3, [r0, #170] ; 0xaa - if (a >= 'A' && a <= 'F') - ae7e: f1a3 0241 sub.w r2, r3, #65 ; 0x41 - ae82: 2a05 cmp r2, #5 - ae84: d976 bls.n af74 - else if (a >= 'a' && a <= 'f') - ae86: f1a3 0261 sub.w r2, r3, #97 ; 0x61 - ae8a: 2a05 cmp r2, #5 - return a - 'a' + 10; - ae8c: bf94 ite ls - ae8e: 3b57 subls r3, #87 ; 0x57 - return a - '0'; - ae90: 3b30 subhi r3, #48 ; 0x30 - byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]); - ae92: f894 20ab ldrb.w r2, [r4, #171] ; 0xab - if (a >= 'A' && a <= 'F') - ae96: f1a2 0141 sub.w r1, r2, #65 ; 0x41 - byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]); - ae9a: 011b lsls r3, r3, #4 - if (a >= 'A' && a <= 'F') - ae9c: 2905 cmp r1, #5 - byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]); - ae9e: b2db uxtb r3, r3 - if (a >= 'A' && a <= 'F') - aea0: f240 8139 bls.w b116 - else if (a >= 'a' && a <= 'f') - aea4: f1a2 0161 sub.w r1, r2, #97 ; 0x61 - aea8: 2905 cmp r1, #5 - return a - 'a' + 10; - aeaa: bf94 ite ls - aeac: 3a57 subls r2, #87 ; 0x57 - return a - '0'; - aeae: 3a30 subhi r2, #48 ; 0x30 - byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]); - aeb0: 4413 add r3, r2 - if (checksum == parity) - aeb2: f894 20a8 ldrb.w r2, [r4, #168] ; 0xa8 - aeb6: b2db uxtb r3, r3 - aeb8: 429a cmp r2, r3 - aeba: f000 80b7 beq.w b02c - return true; - } - - else - { - ++failedChecksumCount; - aebe: f8d4 30d0 ldr.w r3, [r4, #208] ; 0xd0 - aec2: 3301 adds r3, #1 - } - - return false; - aec4: 2600 movs r6, #0 - ++failedChecksumCount; - aec6: f8c4 30d0 str.w r3, [r4, #208] ; 0xd0 - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0 && p->termNumber <= curTermNumber; p = p->next) - if (p->termNumber == curTermNumber) - p->set(term); - - return false; -} - aeca: 4630 mov r0, r6 - aecc: b00c add sp, #48 ; 0x30 - aece: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - if (curTermNumber == 0) - aed2: f890 70ba ldrb.w r7, [r0, #186] ; 0xba - aed6: b337 cbz r7, af26 - if (curSentenceType != GPS_SENTENCE_OTHER && term[0]) - aed8: f890 30b9 ldrb.w r3, [r0, #185] ; 0xb9 - aedc: 2b02 cmp r3, #2 - aede: d003 beq.n aee8 - aee0: f890 20aa ldrb.w r2, [r0, #170] ; 0xaa - aee4: 2a00 cmp r2, #0 - aee6: d147 bne.n af78 - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0 && p->termNumber <= curTermNumber; p = p->next) - aee8: f8d4 50c4 ldr.w r5, [r4, #196] ; 0xc4 - aeec: 2d00 cmp r5, #0 - aeee: d0ec beq.n aeca - aef0: 462b mov r3, r5 - valid = updated = true; -} - -void TinyGPSCustom::set(const char *term) -{ - strncpy(this->stagingBuffer, term, sizeof(this->stagingBuffer)); - aef2: f104 07aa add.w r7, r4, #170 ; 0xaa - aef6: e004 b.n af02 - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0 && p->termNumber <= curTermNumber; p = p->next) - aef8: 6b2d ldr r5, [r5, #48] ; 0x30 - aefa: 2d00 cmp r5, #0 - aefc: d0e5 beq.n aeca - aefe: f8d4 30c4 ldr.w r3, [r4, #196] ; 0xc4 - af02: 6a99 ldr r1, [r3, #40] ; 0x28 - af04: 6aa8 ldr r0, [r5, #40] ; 0x28 - af06: f006 fd5f bl 119c8 - af0a: 2800 cmp r0, #0 - af0c: d1dd bne.n aeca - af0e: 6aea ldr r2, [r5, #44] ; 0x2c - af10: f894 30ba ldrb.w r3, [r4, #186] ; 0xba - af14: 429a cmp r2, r3 - af16: dcd8 bgt.n aeca - if (p->termNumber == curTermNumber) - af18: d1ee bne.n aef8 - strncpy(this->stagingBuffer, term, sizeof(this->stagingBuffer)); - af1a: 2210 movs r2, #16 - af1c: 4639 mov r1, r7 - af1e: 4628 mov r0, r5 - af20: f006 fa74 bl 1140c -} - af24: e7e8 b.n aef8 - if (!strcmp(term, _GPRMCterm) || !strcmp(term, _GNRMCterm)) - af26: f100 08aa add.w r8, r0, #170 ; 0xaa - af2a: 49be ldr r1, [pc, #760] ; (b224 ) - af2c: 4640 mov r0, r8 - af2e: f006 fd4b bl 119c8 - af32: b130 cbz r0, af42 - af34: 49bc ldr r1, [pc, #752] ; (b228 ) - af36: 4640 mov r0, r8 - af38: f006 fd46 bl 119c8 - af3c: 2800 cmp r0, #0 - af3e: f040 80ec bne.w b11a - af42: 2701 movs r7, #1 - for (customCandidates = customElts; customCandidates != NULL && strcmp(customCandidates->sentenceName, term) < 0; customCandidates = customCandidates->next); - af44: f8d4 50c0 ldr.w r5, [r4, #192] ; 0xc0 - curSentenceType = GPS_SENTENCE_GPRMC; - af48: f884 70b9 strb.w r7, [r4, #185] ; 0xb9 - for (customCandidates = customElts; customCandidates != NULL && strcmp(customCandidates->sentenceName, term) < 0; customCandidates = customCandidates->next); - af4c: f8c4 50c4 str.w r5, [r4, #196] ; 0xc4 - af50: b92d cbnz r5, af5e - af52: e7ba b.n aeca - af54: 6b2d ldr r5, [r5, #48] ; 0x30 - af56: f8c4 50c4 str.w r5, [r4, #196] ; 0xc4 - af5a: 2d00 cmp r5, #0 - af5c: d0b5 beq.n aeca - af5e: 6aa8 ldr r0, [r5, #40] ; 0x28 - af60: 4641 mov r1, r8 - af62: f006 fd31 bl 119c8 - af66: 2800 cmp r0, #0 - af68: dbf4 blt.n af54 - if (customCandidates != NULL && strcmp(customCandidates->sentenceName, term) > 0) - af6a: d0ae beq.n aeca - customCandidates = NULL; - af6c: 2300 movs r3, #0 - af6e: f8c4 30c4 str.w r3, [r4, #196] ; 0xc4 - af72: e7aa b.n aeca - return a - 'A' + 10; - af74: 3b37 subs r3, #55 ; 0x37 - af76: e78c b.n ae92 - switch(COMBINE(curSentenceType, curTermNumber)) - af78: ea47 1743 orr.w r7, r7, r3, lsl #5 - af7c: 3f01 subs r7, #1 - af7e: 2f28 cmp r7, #40 ; 0x28 - af80: d8b2 bhi.n aee8 - af82: a301 add r3, pc, #4 ; (adr r3, af88 ) - af84: f853 f027 ldr.w pc, [r3, r7, lsl #2] - af88: 0000b1bb .word 0x0000b1bb - af8c: 0000b1af .word 0x0000b1af - af90: 0000b19f .word 0x0000b19f - af94: 0000b193 .word 0x0000b193 - af98: 0000b183 .word 0x0000b183 - af9c: 0000b1c5 .word 0x0000b1c5 - afa0: 0000b219 .word 0x0000b219 - afa4: 0000b20d .word 0x0000b20d - afa8: 0000b1f7 .word 0x0000b1f7 - afac: 0000aee9 .word 0x0000aee9 - afb0: 0000aee9 .word 0x0000aee9 - afb4: 0000aee9 .word 0x0000aee9 - afb8: 0000aee9 .word 0x0000aee9 - afbc: 0000aee9 .word 0x0000aee9 - afc0: 0000aee9 .word 0x0000aee9 - afc4: 0000aee9 .word 0x0000aee9 - afc8: 0000aee9 .word 0x0000aee9 - afcc: 0000aee9 .word 0x0000aee9 - afd0: 0000aee9 .word 0x0000aee9 - afd4: 0000aee9 .word 0x0000aee9 - afd8: 0000aee9 .word 0x0000aee9 - afdc: 0000aee9 .word 0x0000aee9 - afe0: 0000aee9 .word 0x0000aee9 - afe4: 0000aee9 .word 0x0000aee9 - afe8: 0000aee9 .word 0x0000aee9 - afec: 0000aee9 .word 0x0000aee9 - aff0: 0000aee9 .word 0x0000aee9 - aff4: 0000aee9 .word 0x0000aee9 - aff8: 0000aee9 .word 0x0000aee9 - affc: 0000aee9 .word 0x0000aee9 - b000: 0000aee9 .word 0x0000aee9 - b004: 0000aee9 .word 0x0000aee9 - b008: 0000b1bb .word 0x0000b1bb - b00c: 0000b1e7 .word 0x0000b1e7 - b010: 0000b1af .word 0x0000b1af - b014: 0000b19f .word 0x0000b19f - b018: 0000b193 .word 0x0000b193 - b01c: 0000b183 .word 0x0000b183 - b020: 0000b1dd .word 0x0000b1dd - b024: 0000b1d3 .word 0x0000b1d3 - b028: 0000b203 .word 0x0000b203 - passedChecksumCount++; - b02c: f8d4 30d4 ldr.w r3, [r4, #212] ; 0xd4 - if (sentenceHasFix) - b030: f894 20bc ldrb.w r2, [r4, #188] ; 0xbc - passedChecksumCount++; - b034: 3301 adds r3, #1 - b036: f8c4 30d4 str.w r3, [r4, #212] ; 0xd4 - if (sentenceHasFix) - b03a: b37a cbz r2, b09c - ++sentencesWithFixCount; - b03c: f8d4 30cc ldr.w r3, [r4, #204] ; 0xcc - switch(curSentenceType) - b040: f894 10b9 ldrb.w r1, [r4, #185] ; 0xb9 - ++sentencesWithFixCount; - b044: 3301 adds r3, #1 - b046: f8c4 30cc str.w r3, [r4, #204] ; 0xcc - switch(curSentenceType) - b04a: 2900 cmp r1, #0 - b04c: f000 80f4 beq.w b238 - b050: 2901 cmp r1, #1 - b052: d029 beq.n b0a8 - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0; p = p->next) - b054: f8d4 50c4 ldr.w r5, [r4, #196] ; 0xc4 - b058: 2d00 cmp r5, #0 - b05a: f43f af36 beq.w aeca - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b05e: f8df 81cc ldr.w r8, [pc, #460] ; b22c - b062: 462b mov r3, r5 - valid = updated = true; - b064: f240 1701 movw r7, #257 ; 0x101 - b068: e00d b.n b086 - strcpy(this->buffer, this->stagingBuffer); - b06a: f006 fe17 bl 11c9c - b06e: f8d8 3000 ldr.w r3, [r8] - b072: 930b str r3, [sp, #44] ; 0x2c - return ret; - b074: 9b0b ldr r3, [sp, #44] ; 0x2c - lastCommitTime = millis(); - b076: 622b str r3, [r5, #32] - valid = updated = true; - b078: 84af strh r7, [r5, #36] ; 0x24 - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0; p = p->next) - b07a: 6b2d ldr r5, [r5, #48] ; 0x30 - b07c: 2d00 cmp r5, #0 - b07e: f43f af24 beq.w aeca - b082: f8d4 30c4 ldr.w r3, [r4, #196] ; 0xc4 - b086: 6a99 ldr r1, [r3, #40] ; 0x28 - b088: 6aa8 ldr r0, [r5, #40] ; 0x28 - b08a: f006 fc9d bl 119c8 - b08e: 4603 mov r3, r0 - strcpy(this->buffer, this->stagingBuffer); - b090: 4629 mov r1, r5 - b092: f105 0010 add.w r0, r5, #16 - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0; p = p->next) - b096: 2b00 cmp r3, #0 - b098: d0e7 beq.n b06a - b09a: e716 b.n aeca - switch(curSentenceType) - b09c: f894 30b9 ldrb.w r3, [r4, #185] ; 0xb9 - b0a0: 2b00 cmp r3, #0 - b0a2: d04a beq.n b13a - b0a4: 2b01 cmp r3, #1 - b0a6: d1d5 bne.n b054 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b0a8: 4f60 ldr r7, [pc, #384] ; (b22c ) - date = newDate; - b0aa: 6c23 ldr r3, [r4, #64] ; 0x40 - b0ac: 63e3 str r3, [r4, #60] ; 0x3c - b0ae: 683b ldr r3, [r7, #0] - b0b0: 9302 str r3, [sp, #8] - return ret; - b0b2: 9b02 ldr r3, [sp, #8] - lastCommitTime = millis(); - b0b4: 6463 str r3, [r4, #68] ; 0x44 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b0b6: 683b ldr r3, [r7, #0] - b0b8: 9301 str r3, [sp, #4] - time = newTime; - b0ba: 6d23 ldr r3, [r4, #80] ; 0x50 - b0bc: 64e3 str r3, [r4, #76] ; 0x4c - valid = updated = true; - b0be: f240 1501 movw r5, #257 ; 0x101 - return ret; - b0c2: 9b01 ldr r3, [sp, #4] - b0c4: 8725 strh r5, [r4, #56] ; 0x38 - valid = updated = true; - b0c6: f8a4 5048 strh.w r5, [r4, #72] ; 0x48 - lastCommitTime = millis(); - b0ca: 6563 str r3, [r4, #84] ; 0x54 - if (sentenceHasFix) - b0cc: 2a00 cmp r2, #0 - b0ce: d0c1 beq.n b054 - rawLatData = rawNewLatData; - b0d0: 2209 movs r2, #9 - b0d2: f104 011c add.w r1, r4, #28 - b0d6: 1d20 adds r0, r4, #4 - b0d8: f000 feae bl be38 - rawLngData = rawNewLngData; - b0dc: 2209 movs r2, #9 - b0de: f104 0128 add.w r1, r4, #40 ; 0x28 - b0e2: f104 0010 add.w r0, r4, #16 - b0e6: f000 fea7 bl be38 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b0ea: 683b ldr r3, [r7, #0] - b0ec: 9309 str r3, [sp, #36] ; 0x24 - return ret; - b0ee: 9b09 ldr r3, [sp, #36] ; 0x24 - lastCommitTime = millis(); - b0f0: 6363 str r3, [r4, #52] ; 0x34 - val = newval; - b0f2: 6e63 ldr r3, [r4, #100] ; 0x64 - b0f4: 6623 str r3, [r4, #96] ; 0x60 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b0f6: 683b ldr r3, [r7, #0] - b0f8: 9304 str r3, [sp, #16] - return ret; - b0fa: 9a04 ldr r2, [sp, #16] - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b0fc: 683b ldr r3, [r7, #0] - b0fe: 9303 str r3, [sp, #12] - return ret; - b100: 9b03 ldr r3, [sp, #12] - lastCommitTime = millis(); - b102: 65e2 str r2, [r4, #92] ; 0x5c - val = newval; - b104: 6f62 ldr r2, [r4, #116] ; 0x74 - valid = updated = true; - b106: 8025 strh r5, [r4, #0] - valid = updated = true; - b108: f8a4 5058 strh.w r5, [r4, #88] ; 0x58 - val = newval; - b10c: 6722 str r2, [r4, #112] ; 0x70 - lastCommitTime = millis(); - b10e: 66e3 str r3, [r4, #108] ; 0x6c - valid = updated = true; - b110: f8a4 5068 strh.w r5, [r4, #104] ; 0x68 -} - b114: e79e b.n b054 - return a - 'A' + 10; - b116: 3a37 subs r2, #55 ; 0x37 - b118: e6ca b.n aeb0 - else if (!strcmp(term, _GPGGAterm) || !strcmp(term, _GNGGAterm)) - b11a: 4945 ldr r1, [pc, #276] ; (b230 ) - b11c: 4640 mov r0, r8 - b11e: f006 fc53 bl 119c8 - b122: 2800 cmp r0, #0 - b124: f43f af0e beq.w af44 - b128: 4942 ldr r1, [pc, #264] ; (b234 ) - b12a: 4640 mov r0, r8 - b12c: f006 fc4c bl 119c8 - b130: 1e07 subs r7, r0, #0 - b132: bf18 it ne - b134: 2701 movne r7, #1 - b136: 007f lsls r7, r7, #1 - b138: e704 b.n af44 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b13a: 4d3c ldr r5, [pc, #240] ; (b22c ) - time = newTime; - b13c: 6d22 ldr r2, [r4, #80] ; 0x50 - b13e: 682b ldr r3, [r5, #0] - b140: 9305 str r3, [sp, #20] - return ret; - b142: 9b05 ldr r3, [sp, #20] - lastCommitTime = millis(); - b144: 6563 str r3, [r4, #84] ; 0x54 - valid = updated = true; - b146: f240 1301 movw r3, #257 ; 0x101 - time = newTime; - b14a: 64e2 str r2, [r4, #76] ; 0x4c - valid = updated = true; - b14c: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b150: 682b ldr r3, [r5, #0] - b152: 9308 str r3, [sp, #32] - return ret; - b154: 9a08 ldr r2, [sp, #32] - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b156: 682b ldr r3, [r5, #0] - b158: 9307 str r3, [sp, #28] - val = newval; - b15a: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94 - return ret; - b15e: 9807 ldr r0, [sp, #28] - lastCommitTime = millis(); - b160: f8c4 208c str.w r2, [r4, #140] ; 0x8c - valid = updated = true; - b164: f240 1301 movw r3, #257 ; 0x101 - val = newval; - b168: f8d4 20a4 ldr.w r2, [r4, #164] ; 0xa4 - lastCommitTime = millis(); - b16c: f8c4 009c str.w r0, [r4, #156] ; 0x9c - val = newval; - b170: f8c4 1090 str.w r1, [r4, #144] ; 0x90 - valid = updated = true; - b174: f8a4 3088 strh.w r3, [r4, #136] ; 0x88 - val = newval; - b178: f8c4 20a0 str.w r2, [r4, #160] ; 0xa0 - valid = updated = true; - b17c: f8a4 3098 strh.w r3, [r4, #152] ; 0x98 -} - b180: e768 b.n b054 - location.rawNewLngData.negative = term[0] == 'W'; - b182: f1a2 0257 sub.w r2, r2, #87 ; 0x57 - b186: fab2 f282 clz r2, r2 - b18a: 0952 lsrs r2, r2, #5 - b18c: f880 2030 strb.w r2, [r0, #48] ; 0x30 - break; - b190: e6aa b.n aee8 - TinyGPSPlus::parseDegrees(term, rawNewLngData); - b192: f100 0128 add.w r1, r0, #40 ; 0x28 - b196: 30aa adds r0, #170 ; 0xaa - b198: f7ff fe22 bl ade0 -} - b19c: e6a4 b.n aee8 - location.rawNewLatData.negative = term[0] == 'S'; - b19e: f1a2 0253 sub.w r2, r2, #83 ; 0x53 - b1a2: fab2 f282 clz r2, r2 - b1a6: 0952 lsrs r2, r2, #5 - b1a8: f880 2024 strb.w r2, [r0, #36] ; 0x24 - break; - b1ac: e69c b.n aee8 - TinyGPSPlus::parseDegrees(term, rawNewLatData); - b1ae: f100 011c add.w r1, r0, #28 - b1b2: 30aa adds r0, #170 ; 0xaa - b1b4: f7ff fe14 bl ade0 -} - b1b8: e696 b.n aee8 - newTime = (uint32_t)TinyGPSPlus::parseDecimal(term); - b1ba: 30aa adds r0, #170 ; 0xaa - b1bc: f7ff fde2 bl ad84 - b1c0: 6520 str r0, [r4, #80] ; 0x50 -} - b1c2: e691 b.n aee8 - sentenceHasFix = term[0] > '0'; - b1c4: 2a30 cmp r2, #48 ; 0x30 - b1c6: bf94 ite ls - b1c8: 2200 movls r2, #0 - b1ca: 2201 movhi r2, #1 - b1cc: f880 20bc strb.w r2, [r0, #188] ; 0xbc - break; - b1d0: e68a b.n aee8 - newval = TinyGPSPlus::parseDecimal(term); - b1d2: 30aa adds r0, #170 ; 0xaa - b1d4: f7ff fdd6 bl ad84 - b1d8: 6760 str r0, [r4, #116] ; 0x74 -} - b1da: e685 b.n aee8 - newval = TinyGPSPlus::parseDecimal(term); - b1dc: 30aa adds r0, #170 ; 0xaa - b1de: f7ff fdd1 bl ad84 - b1e2: 6660 str r0, [r4, #100] ; 0x64 -} - b1e4: e680 b.n aee8 - sentenceHasFix = term[0] == 'A'; - b1e6: f1a2 0241 sub.w r2, r2, #65 ; 0x41 - b1ea: fab2 f282 clz r2, r2 - b1ee: 0952 lsrs r2, r2, #5 - b1f0: f880 20bc strb.w r2, [r0, #188] ; 0xbc - break; - b1f4: e678 b.n aee8 - newval = TinyGPSPlus::parseDecimal(term); - b1f6: 30aa adds r0, #170 ; 0xaa - b1f8: f7ff fdc4 bl ad84 - b1fc: f8c4 0084 str.w r0, [r4, #132] ; 0x84 -} - b200: e672 b.n aee8 - newDate = atol(term); - b202: 30aa adds r0, #170 ; 0xaa - b204: f004 ff3a bl 1007c - b208: 6420 str r0, [r4, #64] ; 0x40 -} - b20a: e66d b.n aee8 - newval = TinyGPSPlus::parseDecimal(term); - b20c: 30aa adds r0, #170 ; 0xaa - b20e: f7ff fdb9 bl ad84 - b212: f8c4 00a4 str.w r0, [r4, #164] ; 0xa4 -} - b216: e667 b.n aee8 - newval = atol(term); - b218: 30aa adds r0, #170 ; 0xaa - b21a: f004 ff2f bl 1007c - b21e: f8c4 0094 str.w r0, [r4, #148] ; 0x94 -} - b222: e661 b.n aee8 - b224: 000184a8 .word 0x000184a8 - b228: 000184b0 .word 0x000184b0 - b22c: 1fff978c .word 0x1fff978c - b230: 000184b8 .word 0x000184b8 - b234: 000184c0 .word 0x000184c0 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b238: 4d13 ldr r5, [pc, #76] ; (b288 ) - b23a: 682b ldr r3, [r5, #0] - b23c: 9305 str r3, [sp, #20] - return ret; - b23e: 9a05 ldr r2, [sp, #20] - time = newTime; - b240: 6d23 ldr r3, [r4, #80] ; 0x50 - b242: 64e3 str r3, [r4, #76] ; 0x4c - valid = updated = true; - b244: f240 1701 movw r7, #257 ; 0x101 - lastCommitTime = millis(); - b248: 6562 str r2, [r4, #84] ; 0x54 - rawLatData = rawNewLatData; - b24a: f104 011c add.w r1, r4, #28 - b24e: 2209 movs r2, #9 - valid = updated = true; - b250: f8a4 7048 strh.w r7, [r4, #72] ; 0x48 - rawLatData = rawNewLatData; - b254: 1d20 adds r0, r4, #4 - b256: f000 fdef bl be38 - rawLngData = rawNewLngData; - b25a: 2209 movs r2, #9 - b25c: f104 0128 add.w r1, r4, #40 ; 0x28 - b260: f104 0010 add.w r0, r4, #16 - b264: f000 fde8 bl be38 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b268: 682b ldr r3, [r5, #0] - b26a: 930a str r3, [sp, #40] ; 0x28 - return ret; - b26c: 9b0a ldr r3, [sp, #40] ; 0x28 - lastCommitTime = millis(); - b26e: 6363 str r3, [r4, #52] ; 0x34 - val = newval; - b270: f8d4 3084 ldr.w r3, [r4, #132] ; 0x84 - b274: f8c4 3080 str.w r3, [r4, #128] ; 0x80 - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - b278: 682b ldr r3, [r5, #0] - b27a: 9306 str r3, [sp, #24] - return ret; - b27c: 9b06 ldr r3, [sp, #24] - valid = updated = true; - b27e: 8027 strh r7, [r4, #0] - lastCommitTime = millis(); - b280: 67e3 str r3, [r4, #124] ; 0x7c - valid = updated = true; - b282: f8a4 7078 strh.w r7, [r4, #120] ; 0x78 -} - b286: e763 b.n b150 - b288: 1fff978c .word 0x1fff978c - -0000b28c : -{ - b28c: b538 push {r3, r4, r5, lr} - ++encodedCharCount; - b28e: f8d0 30c8 ldr.w r3, [r0, #200] ; 0xc8 - switch(c) - b292: f1a1 020a sub.w r2, r1, #10 - ++encodedCharCount; - b296: 3301 adds r3, #1 -{ - b298: 4604 mov r4, r0 - b29a: 460d mov r5, r1 - ++encodedCharCount; - b29c: f8c0 30c8 str.w r3, [r0, #200] ; 0xc8 - switch(c) - b2a0: 2a22 cmp r2, #34 ; 0x22 - b2a2: d82e bhi.n b302 - b2a4: e8df f002 tbb [pc, r2] - b2a8: 182d2d18 .word 0x182d2d18 - b2ac: 2d2d2d2d .word 0x2d2d2d2d - b2b0: 2d2d2d2d .word 0x2d2d2d2d - b2b4: 2d2d2d2d .word 0x2d2d2d2d - b2b8: 2d2d2d2d .word 0x2d2d2d2d - b2bc: 2d2d2d2d .word 0x2d2d2d2d - b2c0: 2d402d2d .word 0x2d402d2d - b2c4: 2d2d2d2d .word 0x2d2d2d2d - b2c8: 2d18 .short 0x2d18 - b2ca: 12 .byte 0x12 - b2cb: 00 .byte 0x00 - parity ^= (uint8_t)c; - b2cc: f890 30a8 ldrb.w r3, [r0, #168] ; 0xa8 - b2d0: f083 032c eor.w r3, r3, #44 ; 0x2c - b2d4: f880 30a8 strb.w r3, [r0, #168] ; 0xa8 - if (curTermOffset < sizeof(term)) - b2d8: f894 30bb ldrb.w r3, [r4, #187] ; 0xbb - b2dc: 2b0e cmp r3, #14 - b2de: d92e bls.n b33e - bool isValidSentence = false; - b2e0: 2000 movs r0, #0 - ++curTermNumber; - b2e2: f894 30ba ldrb.w r3, [r4, #186] ; 0xba - isChecksumTerm = c == '*'; - b2e6: f1a5 052a sub.w r5, r5, #42 ; 0x2a - curTermOffset = 0; - b2ea: 2200 movs r2, #0 - ++curTermNumber; - b2ec: 3301 adds r3, #1 - isChecksumTerm = c == '*'; - b2ee: fab5 f585 clz r5, r5 - b2f2: 096d lsrs r5, r5, #5 - ++curTermNumber; - b2f4: f884 30ba strb.w r3, [r4, #186] ; 0xba - curTermOffset = 0; - b2f8: f884 20bb strb.w r2, [r4, #187] ; 0xbb - isChecksumTerm = c == '*'; - b2fc: f884 50a9 strb.w r5, [r4, #169] ; 0xa9 -} - b300: bd38 pop {r3, r4, r5, pc} - if (curTermOffset < sizeof(term) - 1) - b302: f890 30bb ldrb.w r3, [r0, #187] ; 0xbb - b306: 2b0d cmp r3, #13 - b308: d805 bhi.n b316 - term[curTermOffset++] = c; - b30a: 18c2 adds r2, r0, r3 - b30c: 3301 adds r3, #1 - b30e: f880 30bb strb.w r3, [r0, #187] ; 0xbb - b312: f882 10aa strb.w r1, [r2, #170] ; 0xaa - if (!isChecksumTerm) - b316: f894 00a9 ldrb.w r0, [r4, #169] ; 0xa9 - b31a: b9c0 cbnz r0, b34e - parity ^= c; - b31c: f894 30a8 ldrb.w r3, [r4, #168] ; 0xa8 - b320: 405d eors r5, r3 - b322: f884 50a8 strb.w r5, [r4, #168] ; 0xa8 -} - b326: bd38 pop {r3, r4, r5, pc} - parity = 0; - b328: 2000 movs r0, #0 - curSentenceType = GPS_SENTENCE_OTHER; - b32a: 2302 movs r3, #2 - parity = 0; - b32c: f8a4 00a8 strh.w r0, [r4, #168] ; 0xa8 - curSentenceType = GPS_SENTENCE_OTHER; - b330: f884 30b9 strb.w r3, [r4, #185] ; 0xb9 - curTermNumber = curTermOffset = 0; - b334: f8a4 00ba strh.w r0, [r4, #186] ; 0xba - sentenceHasFix = false; - b338: f884 00bc strb.w r0, [r4, #188] ; 0xbc -} - b33c: bd38 pop {r3, r4, r5, pc} - term[curTermOffset] = 0; - b33e: 4423 add r3, r4 - b340: 2200 movs r2, #0 - b342: f883 20aa strb.w r2, [r3, #170] ; 0xaa - isValidSentence = endOfTermHandler(); - b346: 4620 mov r0, r4 - b348: f7ff fd90 bl ae6c - b34c: e7c9 b.n b2e2 - return false; - b34e: 2000 movs r0, #0 -} - b350: bd38 pop {r3, r4, r5, pc} - b352: bf00 nop - -0000b354 : -{ - b354: b538 push {r3, r4, r5, lr} - b356: 4604 mov r4, r0 - updated = false; - b358: 2300 movs r3, #0 - double ret = rawLatData.deg + rawLatData.billionths / 1000000000.0; - b35a: 6880 ldr r0, [r0, #8] - updated = false; - b35c: 7063 strb r3, [r4, #1] - double ret = rawLatData.deg + rawLatData.billionths / 1000000000.0; - b35e: f004 fc27 bl fbb0 <__aeabi_ui2f> - b362: 490b ldr r1, [pc, #44] ; (b390 ) - b364: f004 fd30 bl fdc8 <__aeabi_fdiv> - b368: 4605 mov r5, r0 - b36a: 88a0 ldrh r0, [r4, #4] - b36c: f004 fc24 bl fbb8 <__aeabi_i2f> - b370: 4601 mov r1, r0 - b372: 4628 mov r0, r5 - b374: f004 fb6c bl fa50 <__addsf3> - b378: f003 ffe4 bl f344 <__aeabi_f2d> - return rawLatData.negative ? -ret : ret; - b37c: 7b24 ldrb r4, [r4, #12] - double ret = rawLatData.deg + rawLatData.billionths / 1000000000.0; - b37e: 4602 mov r2, r0 - b380: 460b mov r3, r1 - return rawLatData.negative ? -ret : ret; - b382: b10c cbz r4, b388 - b384: f101 4300 add.w r3, r1, #2147483648 ; 0x80000000 -} - b388: 4610 mov r0, r2 - b38a: 4619 mov r1, r3 - b38c: bd38 pop {r3, r4, r5, pc} - b38e: bf00 nop - b390: 4e6e6b28 .word 0x4e6e6b28 - -0000b394 : -{ - b394: b538 push {r3, r4, r5, lr} - b396: 4604 mov r4, r0 - updated = false; - b398: 2300 movs r3, #0 - double ret = rawLngData.deg + rawLngData.billionths / 1000000000.0; - b39a: 6940 ldr r0, [r0, #20] - updated = false; - b39c: 7063 strb r3, [r4, #1] - double ret = rawLngData.deg + rawLngData.billionths / 1000000000.0; - b39e: f004 fc07 bl fbb0 <__aeabi_ui2f> - b3a2: 490b ldr r1, [pc, #44] ; (b3d0 ) - b3a4: f004 fd10 bl fdc8 <__aeabi_fdiv> - b3a8: 4605 mov r5, r0 - b3aa: 8a20 ldrh r0, [r4, #16] - b3ac: f004 fc04 bl fbb8 <__aeabi_i2f> - b3b0: 4601 mov r1, r0 - b3b2: 4628 mov r0, r5 - b3b4: f004 fb4c bl fa50 <__addsf3> - b3b8: f003 ffc4 bl f344 <__aeabi_f2d> - return rawLngData.negative ? -ret : ret; - b3bc: 7e24 ldrb r4, [r4, #24] - double ret = rawLngData.deg + rawLngData.billionths / 1000000000.0; - b3be: 4602 mov r2, r0 - b3c0: 460b mov r3, r1 - return rawLngData.negative ? -ret : ret; - b3c2: b10c cbz r4, b3c8 - b3c4: f101 4300 add.w r3, r1, #2147483648 ; 0x80000000 -} - b3c8: 4610 mov r0, r2 - b3ca: 4619 mov r1, r3 - b3cc: bd38 pop {r3, r4, r5, pc} - b3ce: bf00 nop - b3d0: 4e6e6b28 .word 0x4e6e6b28 - -0000b3d4 : - static EventResponder *lastInterrupt; - static bool runningFromYield; -private: - static bool disableInterrupts() { - uint32_t primask; - __asm__ volatile("mrs %0, primask\n" : "=r" (primask)::); - b3d4: f3ef 8210 mrs r2, PRIMASK - __disable_irq(); - b3d8: b672 cpsid i -extern const uint8_t _serialEventUSB2_default __attribute__((weak)) PROGMEM = 0 ; - -void EventResponder::triggerEventNotImmediate() -{ - bool irq = disableInterrupts(); - if (_triggered == false) { - b3da: 7f43 ldrb r3, [r0, #29] - b3dc: b95b cbnz r3, b3f6 - // not already triggered - if (_type == EventTypeYield) { - b3de: 7f01 ldrb r1, [r0, #28] - b3e0: 2901 cmp r1, #1 -{ - b3e2: b430 push {r4, r5} - if (_type == EventTypeYield) { - b3e4: d00b beq.n b3fe - _next = nullptr; - _prev = lastYield; - _prev->_next = this; - lastYield = this; - } - } else if (_type == EventTypeInterrupt) { - b3e6: 2903 cmp r1, #3 - b3e8: d013 beq.n b412 - } - SCB_ICSR = SCB_ICSR_PENDSVSET; // set PendSV interrupt - } else { - // detached, easy :-) - } - _triggered = true; - b3ea: 2301 movs r3, #1 - b3ec: 7743 strb r3, [r0, #29] - return (primask == 0) ? true : false; - } - static void enableInterrupts(bool doit) { - if (doit) __enable_irq(); - b3ee: b902 cbnz r2, b3f2 - b3f0: b662 cpsie i - } - enableInterrupts(irq); -} - b3f2: bc30 pop {r4, r5} - b3f4: 4770 bx lr - b3f6: b90a cbnz r2, b3fc - b3f8: b662 cpsie i - b3fa: 4770 bx lr - b3fc: 4770 bx lr - if (firstYield == nullptr) { - b3fe: 4c12 ldr r4, [pc, #72] ; (b448 ) - b400: 6821 ldr r1, [r4, #0] - b402: b1b1 cbz r1, b432 - _prev = lastYield; - b404: 4911 ldr r1, [pc, #68] ; (b44c ) - _next = nullptr; - b406: 6143 str r3, [r0, #20] - _prev = lastYield; - b408: 680b ldr r3, [r1, #0] - b40a: 6183 str r3, [r0, #24] - lastYield = this; - b40c: 6008 str r0, [r1, #0] - _prev->_next = this; - b40e: 6158 str r0, [r3, #20] - lastYield = this; - b410: e7eb b.n b3ea - if (firstInterrupt == nullptr) { - b412: 4d0f ldr r5, [pc, #60] ; (b450 ) - b414: 490f ldr r1, [pc, #60] ; (b454 ) - b416: 682c ldr r4, [r5, #0] - b418: b18c cbz r4, b43e - _next = nullptr; - b41a: 6143 str r3, [r0, #20] - _prev = lastInterrupt; - b41c: 680b ldr r3, [r1, #0] - b41e: 6183 str r3, [r0, #24] - _prev->_next = this; - b420: 6158 str r0, [r3, #20] - SCB_ICSR = SCB_ICSR_PENDSVSET; // set PendSV interrupt - b422: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 - b426: f04f 5480 mov.w r4, #268435456 ; 0x10000000 - lastInterrupt = this; - b42a: 6008 str r0, [r1, #0] - SCB_ICSR = SCB_ICSR_PENDSVSET; // set PendSV interrupt - b42c: f8c3 4d04 str.w r4, [r3, #3332] ; 0xd04 - b430: e7db b.n b3ea - lastYield = this; - b432: 4b06 ldr r3, [pc, #24] ; (b44c ) - _next = nullptr; - b434: 6141 str r1, [r0, #20] - _prev = nullptr; - b436: 6181 str r1, [r0, #24] - firstYield = this; - b438: 6020 str r0, [r4, #0] - lastYield = this; - b43a: 6018 str r0, [r3, #0] - b43c: e7d5 b.n b3ea - _next = nullptr; - b43e: 6144 str r4, [r0, #20] - _prev = nullptr; - b440: 6184 str r4, [r0, #24] - firstInterrupt = this; - b442: 6028 str r0, [r5, #0] - lastInterrupt = this; - b444: e7ed b.n b422 - b446: bf00 nop - b448: 1fff9778 .word 0x1fff9778 - b44c: 1fff9788 .word 0x1fff9788 - b450: 1fff9780 .word 0x1fff9780 - b454: 1fff977c .word 0x1fff977c - -0000b458 : -{ - EventResponder::runFromInterrupt(); -} - -void EventResponder::runFromInterrupt() -{ - b458: b570 push {r4, r5, r6, lr} - __asm__ volatile("mrs %0, primask\n" : "=r" (primask)::); - b45a: f3ef 8210 mrs r2, PRIMASK - __disable_irq(); - b45e: b672 cpsid i - while (1) { - bool irq = disableInterrupts(); - EventResponder *first = firstInterrupt; - b460: 4c0c ldr r4, [pc, #48] ; (b494 ) - b462: 6820 ldr r0, [r4, #0] - if (first) { - b464: b180 cbz r0, b488 - firstInterrupt = first->_next; - if (firstInterrupt) { - firstInterrupt->_prev = nullptr; - } else { - lastInterrupt = nullptr; - b466: 4e0c ldr r6, [pc, #48] ; (b498 ) - firstInterrupt->_prev = nullptr; - b468: 2500 movs r5, #0 - firstInterrupt = first->_next; - b46a: 6943 ldr r3, [r0, #20] - b46c: 6023 str r3, [r4, #0] - if (firstInterrupt) { - b46e: b173 cbz r3, b48e - firstInterrupt->_prev = nullptr; - b470: 619d str r5, [r3, #24] - if (doit) __enable_irq(); - b472: b902 cbnz r2, b476 - b474: b662 cpsie i - } - enableInterrupts(irq); - first->_triggered = false; - (*(first->_function))(*first); - b476: 6883 ldr r3, [r0, #8] - first->_triggered = false; - b478: 7745 strb r5, [r0, #29] - (*(first->_function))(*first); - b47a: 4798 blx r3 - __asm__ volatile("mrs %0, primask\n" : "=r" (primask)::); - b47c: f3ef 8210 mrs r2, PRIMASK - __disable_irq(); - b480: b672 cpsid i - EventResponder *first = firstInterrupt; - b482: 6820 ldr r0, [r4, #0] - if (first) { - b484: 2800 cmp r0, #0 - b486: d1f0 bne.n b46a - if (doit) __enable_irq(); - b488: b902 cbnz r2, b48c - b48a: b662 cpsie i - } else { - enableInterrupts(irq); - break; - } - } -} - b48c: bd70 pop {r4, r5, r6, pc} - lastInterrupt = nullptr; - b48e: 6033 str r3, [r6, #0] - b490: e7ef b.n b472 - b492: bf00 nop - b494: 1fff9780 .word 0x1fff9780 - b498: 1fff977c .word 0x1fff977c - -0000b49c : - EventResponder::runFromInterrupt(); - b49c: f7ff bfdc b.w b458 - -0000b4a0 : - -extern "C" volatile uint32_t systick_millis_count; - -void systick_isr(void) -{ - systick_millis_count++; - b4a0: 4a02 ldr r2, [pc, #8] ; (b4ac ) - b4a2: 6813 ldr r3, [r2, #0] - b4a4: 3301 adds r3, #1 - b4a6: 6013 str r3, [r2, #0] -} - b4a8: 4770 bx lr - b4aa: bf00 nop - b4ac: 1fff978c .word 0x1fff978c - -0000b4b0 : - virtual size_t write(unsigned long n) { return write((uint8_t)n); } - b4b0: 6803 ldr r3, [r0, #0] - b4b2: b2c9 uxtb r1, r1 - b4b4: 681b ldr r3, [r3, #0] - b4b6: 4718 bx r3 - -0000b4b8 : - virtual size_t write(long n) { return write((uint8_t)n); } - b4b8: 6803 ldr r3, [r0, #0] - b4ba: b2c9 uxtb r1, r1 - b4bc: 681b ldr r3, [r3, #0] - b4be: 4718 bx r3 - -0000b4c0 : - virtual size_t write(unsigned int n) { return write((uint8_t)n); } - b4c0: 6803 ldr r3, [r0, #0] - b4c2: b2c9 uxtb r1, r1 - b4c4: 681b ldr r3, [r3, #0] - b4c6: 4718 bx r3 - -0000b4c8 : - virtual size_t write(int n) { return write((uint8_t)n); } - b4c8: 6803 ldr r3, [r0, #0] - b4ca: b2c9 uxtb r1, r1 - b4cc: 681b ldr r3, [r3, #0] - b4ce: 4718 bx r3 - -0000b4d0 : -uint8_t _serialEvent1_default __attribute__((weak)) PROGMEM = 0 ; - -HardwareSerial Serial1(&serialEvent1); - -void HardwareSerial::begin(uint32_t baud) { - serial_begin(BAUD2DIV(baud)); - b4d0: 084b lsrs r3, r1, #1 - b4d2: f103 6337 add.w r3, r3, #191889408 ; 0xb700000 - b4d6: f503 33d8 add.w r3, r3, #110592 ; 0x1b000 -void HardwareSerial::begin(uint32_t baud) { - b4da: b510 push {r4, lr} - b4dc: 4604 mov r4, r0 - serial_begin(BAUD2DIV(baud)); - b4de: fbb3 f0f1 udiv r0, r3, r1 - b4e2: f001 f97f bl c7e4 - if (!_serialEvent1_default) addToSerialEventsList(); - b4e6: 4b04 ldr r3, [pc, #16] ; (b4f8 ) - b4e8: 781b ldrb r3, [r3, #0] - b4ea: b103 cbz r3, b4ee -} - b4ec: bd10 pop {r4, pc} - if (!_serialEvent1_default) addToSerialEventsList(); - b4ee: 4620 mov r0, r4 -} - b4f0: e8bd 4010 ldmia.w sp!, {r4, lr} - if (!_serialEvent1_default) addToSerialEventsList(); - b4f4: f003 bcf6 b.w eee4 - b4f8: 1fff8841 .word 0x1fff8841 - -0000b4fc : - virtual size_t write9bit(uint32_t c) { serial_putchar(c); return 1; } - b4fc: b508 push {r3, lr} - b4fe: 4608 mov r0, r1 - b500: f001 fb72 bl cbe8 - b504: 2001 movs r0, #1 - b506: bd08 pop {r3, pc} - -0000b508 : - virtual size_t write(uint8_t c) { serial_putchar(c); return 1; } - b508: b508 push {r3, lr} - b50a: 4608 mov r0, r1 - b50c: f001 fb6c bl cbe8 - b510: 2001 movs r0, #1 - b512: bd08 pop {r3, pc} - -0000b514 : - virtual size_t write(const char *str) { size_t len = strlen(str); - b514: b538 push {r3, r4, r5, lr} - b516: 4608 mov r0, r1 - b518: 460d mov r5, r1 - b51a: f006 fcb1 bl 11e80 - b51e: 4604 mov r4, r0 - serial_write((const uint8_t *)str, len); - b520: 4601 mov r1, r0 - b522: 4628 mov r0, r5 - b524: f001 fb6a bl cbfc - return len; } - b528: 4620 mov r0, r4 - b52a: bd38 pop {r3, r4, r5, pc} - -0000b52c : - virtual size_t write(const uint8_t *buffer, size_t size) - b52c: b510 push {r4, lr} - b52e: 4608 mov r0, r1 - b530: 4614 mov r4, r2 - { serial_write(buffer, size); return size; } - b532: 4611 mov r1, r2 - b534: f001 fb62 bl cbfc - b538: 4620 mov r0, r4 - b53a: bd10 pop {r4, pc} - -0000b53c : - virtual void addMemoryForWrite(void *buffer, size_t length){serial_add_memory_for_write(buffer, length);} - b53c: 4608 mov r0, r1 - b53e: 4611 mov r1, r2 - b540: f001 bd8a b.w d058 - -0000b544 : - virtual void addMemoryForRead(void *buffer, size_t length) {serial_add_memory_for_read(buffer, length);} - b544: 4608 mov r0, r1 - b546: 4611 mov r1, r2 - b548: f001 bd6a b.w d020 - -0000b54c : - virtual void clear(void) { serial_clear(); } - b54c: f001 bc82 b.w ce54 - -0000b550 : - virtual bool attachCts(uint8_t pin) { return serial_set_cts(pin); } - b550: b508 push {r3, lr} - b552: 4608 mov r0, r1 - b554: f001 fb1e bl cb94 - b558: 3800 subs r0, #0 - b55a: bf18 it ne - b55c: 2001 movne r0, #1 - b55e: bd08 pop {r3, pc} - -0000b560 : - virtual bool attachRts(uint8_t pin) { return serial_set_rts(pin); } - b560: b508 push {r3, lr} - b562: 4608 mov r0, r1 - b564: f001 faf4 bl cb50 - b568: 3800 subs r0, #0 - b56a: bf18 it ne - b56c: 2001 movne r0, #1 - b56e: bd08 pop {r3, pc} - -0000b570 : - virtual void setTX(uint8_t pin, bool opendrain=false) { serial_set_tx(pin, opendrain); } - b570: 4608 mov r0, r1 - b572: 4611 mov r1, r2 - b574: f001 ba84 b.w ca80 - -0000b578 : - virtual void setRX(uint8_t pin) { serial_set_rx(pin); } - b578: 4608 mov r0, r1 - b57a: f001 babf b.w cafc - b57e: bf00 nop - -0000b580 : - virtual void transmitterEnable(uint8_t pin) { serial_set_transmit_pin(pin); } - b580: 4608 mov r0, r1 - b582: f001 ba61 b.w ca48 - b586: bf00 nop - -0000b588 : - virtual void end(void) { serial_end(); } - b588: f001 b9f8 b.w c97c - -0000b58c : - virtual void begin(uint32_t baud, uint32_t format) { - b58c: b510 push {r4, lr} - serial_begin(BAUD2DIV(baud)); - b58e: 084b lsrs r3, r1, #1 - b590: f103 6337 add.w r3, r3, #191889408 ; 0xb700000 - virtual void begin(uint32_t baud, uint32_t format) { - b594: 4614 mov r4, r2 - serial_begin(BAUD2DIV(baud)); - b596: f503 33d8 add.w r3, r3, #110592 ; 0x1b000 - b59a: fbb3 f0f1 udiv r0, r3, r1 - b59e: f001 f921 bl c7e4 - serial_format(format); } - b5a2: 4620 mov r0, r4 - b5a4: e8bd 4010 ldmia.w sp!, {r4, lr} - b5a8: f001 b98a b.w c8c0 - -0000b5ac : - virtual int peek(void) { return serial_peek(); } - b5ac: f001 bc2c b.w ce08 - -0000b5b0 : - virtual int read(void) { return serial_getchar(); } - b5b0: f001 bbe4 b.w cd7c - -0000b5b4 : - virtual int available(void) { return serial_available(); } - b5b4: f001 bbce b.w cd54 - -0000b5b8 : - virtual void flush(void) { serial_flush(); } - b5b8: f001 bba8 b.w cd0c - -0000b5bc : - virtual int availableForWrite(void) { return serial_write_buffer_free(); } - b5bc: f001 bbb2 b.w cd24 - -0000b5c0 : -HardwareSerial2 Serial2(&serialEvent2); - -uint8_t _serialEvent2_default __attribute__((weak)) PROGMEM = 0 ; - -void HardwareSerial2::begin(uint32_t baud) { - serial2_begin(BAUD2DIV2(baud)); - b5c0: 084b lsrs r3, r1, #1 - b5c2: f103 6337 add.w r3, r3, #191889408 ; 0xb700000 - b5c6: f503 33d8 add.w r3, r3, #110592 ; 0x1b000 -void HardwareSerial2::begin(uint32_t baud) { - b5ca: b510 push {r4, lr} - b5cc: 4604 mov r4, r0 - serial2_begin(BAUD2DIV2(baud)); - b5ce: fbb3 f0f1 udiv r0, r3, r1 - b5d2: f001 fd51 bl d078 - if (!_serialEvent2_default) addToSerialEventsList(); - b5d6: 4b04 ldr r3, [pc, #16] ; (b5e8 ) - b5d8: 781b ldrb r3, [r3, #0] - b5da: b103 cbz r3, b5de -} - b5dc: bd10 pop {r4, pc} - if (!_serialEvent2_default) addToSerialEventsList(); - b5de: 4620 mov r0, r4 -} - b5e0: e8bd 4010 ldmia.w sp!, {r4, lr} - if (!_serialEvent2_default) addToSerialEventsList(); - b5e4: f003 bc7e b.w eee4 - b5e8: 1fff8842 .word 0x1fff8842 - -0000b5ec : - virtual size_t write9bit(uint32_t c) { serial2_putchar(c); return 1; } - b5ec: b508 push {r3, lr} - b5ee: 4608 mov r0, r1 - b5f0: f001 ff40 bl d474 - b5f4: 2001 movs r0, #1 - b5f6: bd08 pop {r3, pc} - -0000b5f8 : - virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; } - b5f8: b508 push {r3, lr} - b5fa: 4608 mov r0, r1 - b5fc: f001 ff3a bl d474 - b600: 2001 movs r0, #1 - b602: bd08 pop {r3, pc} - -0000b604 : - virtual size_t write(const char *str) { size_t len = strlen(str); - b604: b538 push {r3, r4, r5, lr} - b606: 4608 mov r0, r1 - b608: 460d mov r5, r1 - b60a: f006 fc39 bl 11e80 - b60e: 4604 mov r4, r0 - serial2_write((const uint8_t *)str, len); - b610: 4601 mov r1, r0 - b612: 4628 mov r0, r5 - b614: f001 ffaa bl d56c - return len; } - b618: 4620 mov r0, r4 - b61a: bd38 pop {r3, r4, r5, pc} - -0000b61c : - virtual size_t write(const uint8_t *buffer, size_t size) - b61c: b510 push {r4, lr} - b61e: 4608 mov r0, r1 - b620: 4614 mov r4, r2 - { serial2_write(buffer, size); return size; } - b622: 4611 mov r1, r2 - b624: f001 ffa2 bl d56c - b628: 4620 mov r0, r4 - b62a: bd10 pop {r4, pc} - -0000b62c : - virtual void addMemoryForWrite(void *buffer, size_t length){serial2_add_memory_for_write(buffer, length);} - b62c: 4608 mov r0, r1 - b62e: 4611 mov r1, r2 - b630: f002 b9ca b.w d9c8 - -0000b634 : - virtual void addMemoryForRead(void *buffer, size_t length) {serial2_add_memory_for_read(buffer, length);} - b634: 4608 mov r0, r1 - b636: 4611 mov r1, r2 - b638: f002 b9aa b.w d990 - -0000b63c : - virtual void clear(void) { serial2_clear(); } - b63c: f002 b8c2 b.w d7c4 - -0000b640 : - virtual bool attachCts(uint8_t pin) { return serial2_set_cts(pin); } - b640: b508 push {r3, lr} - b642: 4608 mov r0, r1 - b644: f001 fef6 bl d434 - b648: 3800 subs r0, #0 - b64a: bf18 it ne - b64c: 2001 movne r0, #1 - b64e: bd08 pop {r3, pc} - -0000b650 : - virtual bool attachRts(uint8_t pin) { return serial2_set_rts(pin); } - b650: b508 push {r3, lr} - b652: 4608 mov r0, r1 - b654: f001 fecc bl d3f0 - b658: 3800 subs r0, #0 - b65a: bf18 it ne - b65c: 2001 movne r0, #1 - b65e: bd08 pop {r3, pc} - -0000b660 : - virtual void setTX(uint8_t pin, bool opendrain=false) { serial2_set_tx(pin, opendrain); } - b660: 4608 mov r0, r1 - b662: 4611 mov r1, r2 - b664: f001 be58 b.w d318 - -0000b668 : - virtual void setRX(uint8_t pin) { serial2_set_rx(pin); } - b668: 4608 mov r0, r1 - b66a: f001 be93 b.w d394 - b66e: bf00 nop - -0000b670 : - virtual void transmitterEnable(uint8_t pin) { serial2_set_transmit_pin(pin); } - b670: 4608 mov r0, r1 - b672: f001 be35 b.w d2e0 - b676: bf00 nop - -0000b678 : - virtual void end(void) { serial2_end(); } - b678: f001 bdca b.w d210 - -0000b67c : - virtual void begin(uint32_t baud, uint32_t format) { - b67c: b510 push {r4, lr} - serial2_begin(BAUD2DIV2(baud)); - b67e: 084b lsrs r3, r1, #1 - b680: f103 6337 add.w r3, r3, #191889408 ; 0xb700000 - virtual void begin(uint32_t baud, uint32_t format) { - b684: 4614 mov r4, r2 - serial2_begin(BAUD2DIV2(baud)); - b686: f503 33d8 add.w r3, r3, #110592 ; 0x1b000 - b68a: fbb3 f0f1 udiv r0, r3, r1 - b68e: f001 fcf3 bl d078 - serial2_format(format); } - b692: 4620 mov r0, r4 - b694: e8bd 4010 ldmia.w sp!, {r4, lr} - b698: f001 bd5c b.w d154 - -0000b69c : - virtual int peek(void) { return serial2_peek(); } - b69c: f002 b86c b.w d778 - -0000b6a0 : - virtual int read(void) { return serial2_getchar(); } - b6a0: f002 b824 b.w d6ec - -0000b6a4 : - virtual int available(void) { return serial2_available(); } - b6a4: f002 b80e b.w d6c4 - -0000b6a8 : - virtual void flush(void) { serial2_flush(); } - b6a8: f001 bfe8 b.w d67c - -0000b6ac : - virtual int availableForWrite(void) { return serial2_write_buffer_free(); } - b6ac: f001 bff2 b.w d694 - -0000b6b0 : - virtual size_t write(int n) { return write((uint8_t)n); } - b6b0: 6803 ldr r3, [r0, #0] - b6b2: 4a06 ldr r2, [pc, #24] ; (b6cc ) - b6b4: 681b ldr r3, [r3, #0] - b6b6: 4293 cmp r3, r2 - b6b8: d105 bne.n b6c6 - b6ba: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; } - b6bc: b2c8 uxtb r0, r1 - b6be: f001 fed9 bl d474 - virtual size_t write(int n) { return write((uint8_t)n); } - b6c2: 2001 movs r0, #1 - b6c4: bd10 pop {r4, pc} - b6c6: b2c9 uxtb r1, r1 - b6c8: 4718 bx r3 - b6ca: bf00 nop - b6cc: 0000b5f9 .word 0x0000b5f9 - -0000b6d0 : - virtual size_t write(unsigned long n) { return write((uint8_t)n); } - b6d0: 6803 ldr r3, [r0, #0] - b6d2: 4a06 ldr r2, [pc, #24] ; (b6ec ) - b6d4: 681b ldr r3, [r3, #0] - b6d6: 4293 cmp r3, r2 - b6d8: d105 bne.n b6e6 - b6da: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; } - b6dc: b2c8 uxtb r0, r1 - b6de: f001 fec9 bl d474 - virtual size_t write(unsigned long n) { return write((uint8_t)n); } - b6e2: 2001 movs r0, #1 - b6e4: bd10 pop {r4, pc} - b6e6: b2c9 uxtb r1, r1 - b6e8: 4718 bx r3 - b6ea: bf00 nop - b6ec: 0000b5f9 .word 0x0000b5f9 - -0000b6f0 : - virtual size_t write(long n) { return write((uint8_t)n); } - b6f0: 6803 ldr r3, [r0, #0] - b6f2: 4a06 ldr r2, [pc, #24] ; (b70c ) - b6f4: 681b ldr r3, [r3, #0] - b6f6: 4293 cmp r3, r2 - b6f8: d105 bne.n b706 - b6fa: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; } - b6fc: b2c8 uxtb r0, r1 - b6fe: f001 feb9 bl d474 - virtual size_t write(long n) { return write((uint8_t)n); } - b702: 2001 movs r0, #1 - b704: bd10 pop {r4, pc} - b706: b2c9 uxtb r1, r1 - b708: 4718 bx r3 - b70a: bf00 nop - b70c: 0000b5f9 .word 0x0000b5f9 - -0000b710 : - virtual size_t write(unsigned int n) { return write((uint8_t)n); } - b710: 6803 ldr r3, [r0, #0] - b712: 4a06 ldr r2, [pc, #24] ; (b72c ) - b714: 681b ldr r3, [r3, #0] - b716: 4293 cmp r3, r2 - b718: d105 bne.n b726 - b71a: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial2_putchar(c); return 1; } - b71c: b2c8 uxtb r0, r1 - b71e: f001 fea9 bl d474 - virtual size_t write(unsigned int n) { return write((uint8_t)n); } - b722: 2001 movs r0, #1 - b724: bd10 pop {r4, pc} - b726: b2c9 uxtb r1, r1 - b728: 4718 bx r3 - b72a: bf00 nop - b72c: 0000b5f9 .word 0x0000b5f9 - -0000b730 : -HardwareSerial3 Serial3(&serialEvent3); - -uint8_t _serialEvent3_default __attribute__((weak)) PROGMEM = 0 ; - -void HardwareSerial3::begin(uint32_t baud) { - serial3_begin(BAUD2DIV3(baud)); - b730: 084b lsrs r3, r1, #1 - b732: f103 63b7 add.w r3, r3, #95944704 ; 0x5b80000 - b736: f503 4358 add.w r3, r3, #55296 ; 0xd800 -void HardwareSerial3::begin(uint32_t baud) { - b73a: b510 push {r4, lr} - b73c: 4604 mov r4, r0 - serial3_begin(BAUD2DIV3(baud)); - b73e: fbb3 f0f1 udiv r0, r3, r1 - b742: f002 f9c7 bl dad4 - if (!_serialEvent3_default) addToSerialEventsList(); - b746: 4b04 ldr r3, [pc, #16] ; (b758 ) - b748: 781b ldrb r3, [r3, #0] - b74a: b103 cbz r3, b74e -} - b74c: bd10 pop {r4, pc} - if (!_serialEvent3_default) addToSerialEventsList(); - b74e: 4620 mov r0, r4 -} - b750: e8bd 4010 ldmia.w sp!, {r4, lr} - if (!_serialEvent3_default) addToSerialEventsList(); - b754: f003 bbc6 b.w eee4 - b758: 1fff8843 .word 0x1fff8843 - -0000b75c : - virtual size_t write(const uint8_t *buffer, size_t size) - { serial3_write(buffer, size); return size; } - virtual size_t write(const char *str) { size_t len = strlen(str); - serial3_write((const uint8_t *)str, len); - return len; } - virtual size_t write9bit(uint32_t c) { serial3_putchar(c); return 1; } - b75c: b508 push {r3, lr} - b75e: 4608 mov r0, r1 - b760: f002 fb24 bl ddac - b764: 2001 movs r0, #1 - b766: bd08 pop {r3, pc} - -0000b768 : - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - b768: b508 push {r3, lr} - b76a: 4608 mov r0, r1 - b76c: f002 fb1e bl ddac - b770: 2001 movs r0, #1 - b772: bd08 pop {r3, pc} - -0000b774 : - virtual size_t write(const char *str) { size_t len = strlen(str); - b774: b538 push {r3, r4, r5, lr} - b776: 4608 mov r0, r1 - b778: 460d mov r5, r1 - b77a: f006 fb81 bl 11e80 - b77e: 4604 mov r4, r0 - serial3_write((const uint8_t *)str, len); - b780: 4601 mov r1, r0 - b782: 4628 mov r0, r5 - b784: f002 fb1c bl ddc0 - return len; } - b788: 4620 mov r0, r4 - b78a: bd38 pop {r3, r4, r5, pc} - -0000b78c : - virtual size_t write(const uint8_t *buffer, size_t size) - b78c: b510 push {r4, lr} - b78e: 4608 mov r0, r1 - b790: 4614 mov r4, r2 - { serial3_write(buffer, size); return size; } - b792: 4611 mov r1, r2 - b794: f002 fb14 bl ddc0 - b798: 4620 mov r0, r4 - b79a: bd10 pop {r4, pc} - -0000b79c : - virtual void addMemoryForWrite(void *buffer, size_t length){serial3_add_memory_for_write(buffer, length);} - b79c: 4608 mov r0, r1 - b79e: 4611 mov r1, r2 - b7a0: f002 bc88 b.w e0b4 - -0000b7a4 : - virtual void addMemoryForRead(void *buffer, size_t length) {serial3_add_memory_for_read(buffer, length);} - b7a4: 4608 mov r0, r1 - b7a6: 4611 mov r1, r2 - b7a8: f002 bc68 b.w e07c - -0000b7ac : - virtual void clear(void) { serial3_clear(); } - b7ac: f002 bbc0 b.w df30 - -0000b7b0 : - virtual bool attachCts(uint8_t pin) { return serial3_set_cts(pin); } - b7b0: b508 push {r3, lr} - b7b2: 4608 mov r0, r1 - b7b4: f002 fada bl dd6c - b7b8: 3800 subs r0, #0 - b7ba: bf18 it ne - b7bc: 2001 movne r0, #1 - b7be: bd08 pop {r3, pc} - -0000b7c0 : - virtual bool attachRts(uint8_t pin) { return serial3_set_rts(pin); } - b7c0: b508 push {r3, lr} - b7c2: 4608 mov r0, r1 - b7c4: f002 fab0 bl dd28 - b7c8: 3800 subs r0, #0 - b7ca: bf18 it ne - b7cc: 2001 movne r0, #1 - b7ce: bd08 pop {r3, pc} - -0000b7d0 : - virtual void setTX(uint8_t pin, bool opendrain=false) { serial3_set_tx(pin, opendrain); } - b7d0: 4608 mov r0, r1 - b7d2: 4611 mov r1, r2 - b7d4: f002 ba7a b.w dccc - -0000b7d8 : - virtual void setRX(uint8_t pin) { serial3_set_rx(pin); } - b7d8: 4608 mov r0, r1 - b7da: f002 baa3 b.w dd24 - b7de: bf00 nop - -0000b7e0 : - virtual void transmitterEnable(uint8_t pin) { serial3_set_transmit_pin(pin); } - b7e0: 4608 mov r0, r1 - b7e2: f002 ba57 b.w dc94 - b7e6: bf00 nop - -0000b7e8 : - virtual void end(void) { serial3_end(); } - b7e8: f002 ba1e b.w dc28 - -0000b7ec : - virtual void begin(uint32_t baud, uint32_t format) { - b7ec: b510 push {r4, lr} - serial3_begin(BAUD2DIV3(baud)); - b7ee: 084b lsrs r3, r1, #1 - b7f0: f103 63b7 add.w r3, r3, #95944704 ; 0x5b80000 - virtual void begin(uint32_t baud, uint32_t format) { - b7f4: 4614 mov r4, r2 - serial3_begin(BAUD2DIV3(baud)); - b7f6: f503 4358 add.w r3, r3, #55296 ; 0xd800 - b7fa: fbb3 f0f1 udiv r0, r3, r1 - b7fe: f002 f969 bl dad4 - serial3_format(format); } - b802: 4620 mov r0, r4 - b804: e8bd 4010 ldmia.w sp!, {r4, lr} - b808: f002 b9b0 b.w db6c - -0000b80c : - virtual int peek(void) { return serial3_peek(); } - b80c: f002 bb6a b.w dee4 - -0000b810 : - virtual int read(void) { return serial3_getchar(); } - b810: f002 bb22 b.w de58 - -0000b814 : - virtual int available(void) { return serial3_available(); } - b814: f002 bb0c b.w de30 - -0000b818 : - virtual void flush(void) { serial3_flush(); } - b818: f002 bae6 b.w dde8 - -0000b81c : - virtual int availableForWrite(void) { return serial3_write_buffer_free(); } - b81c: f002 baf0 b.w de00 - -0000b820 : - virtual size_t write(int n) { return write((uint8_t)n); } - b820: 6803 ldr r3, [r0, #0] - b822: 4a06 ldr r2, [pc, #24] ; (b83c ) - b824: 681b ldr r3, [r3, #0] - b826: 4293 cmp r3, r2 - b828: d105 bne.n b836 - b82a: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - b82c: b2c8 uxtb r0, r1 - b82e: f002 fabd bl ddac - virtual size_t write(int n) { return write((uint8_t)n); } - b832: 2001 movs r0, #1 - b834: bd10 pop {r4, pc} - b836: b2c9 uxtb r1, r1 - b838: 4718 bx r3 - b83a: bf00 nop - b83c: 0000b769 .word 0x0000b769 - -0000b840 : - virtual size_t write(unsigned long n) { return write((uint8_t)n); } - b840: 6803 ldr r3, [r0, #0] - b842: 4a06 ldr r2, [pc, #24] ; (b85c ) - b844: 681b ldr r3, [r3, #0] - b846: 4293 cmp r3, r2 - b848: d105 bne.n b856 - b84a: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - b84c: b2c8 uxtb r0, r1 - b84e: f002 faad bl ddac - virtual size_t write(unsigned long n) { return write((uint8_t)n); } - b852: 2001 movs r0, #1 - b854: bd10 pop {r4, pc} - b856: b2c9 uxtb r1, r1 - b858: 4718 bx r3 - b85a: bf00 nop - b85c: 0000b769 .word 0x0000b769 - -0000b860 : - virtual size_t write(long n) { return write((uint8_t)n); } - b860: 6803 ldr r3, [r0, #0] - b862: 4a06 ldr r2, [pc, #24] ; (b87c ) - b864: 681b ldr r3, [r3, #0] - b866: 4293 cmp r3, r2 - b868: d105 bne.n b876 - b86a: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - b86c: b2c8 uxtb r0, r1 - b86e: f002 fa9d bl ddac - virtual size_t write(long n) { return write((uint8_t)n); } - b872: 2001 movs r0, #1 - b874: bd10 pop {r4, pc} - b876: b2c9 uxtb r1, r1 - b878: 4718 bx r3 - b87a: bf00 nop - b87c: 0000b769 .word 0x0000b769 - -0000b880 : - virtual size_t write(unsigned int n) { return write((uint8_t)n); } - b880: 6803 ldr r3, [r0, #0] - b882: 4a06 ldr r2, [pc, #24] ; (b89c ) - b884: 681b ldr r3, [r3, #0] - b886: 4293 cmp r3, r2 - b888: d105 bne.n b896 - b88a: b510 push {r4, lr} - virtual size_t write(uint8_t c) { serial3_putchar(c); return 1; } - b88c: b2c8 uxtb r0, r1 - b88e: f002 fa8d bl ddac - virtual size_t write(unsigned int n) { return write((uint8_t)n); } - b892: 2001 movs r0, #1 - b894: bd10 pop {r4, pc} - b896: b2c9 uxtb r1, r1 - b898: 4718 bx r3 - b89a: bf00 nop - b89c: 0000b769 .word 0x0000b769 - -0000b8a0 : - -#include - - -size_t Print::write(const uint8_t *buffer, size_t size) -{ - b8a0: b5f8 push {r3, r4, r5, r6, r7, lr} - if (buffer == nullptr) return 0; - b8a2: 460c mov r4, r1 - b8a4: b171 cbz r1, b8c4 - size_t count = 0; - while (size--) count += write(*buffer++); - b8a6: b182 cbz r2, b8ca - b8a8: 4606 mov r6, r0 - b8aa: 188f adds r7, r1, r2 - size_t count = 0; - b8ac: 2500 movs r5, #0 - while (size--) count += write(*buffer++); - b8ae: 6833 ldr r3, [r6, #0] - b8b0: f814 1b01 ldrb.w r1, [r4], #1 - b8b4: 681b ldr r3, [r3, #0] - b8b6: 4630 mov r0, r6 - b8b8: 4798 blx r3 - b8ba: 42bc cmp r4, r7 - b8bc: 4405 add r5, r0 - b8be: d1f6 bne.n b8ae - return count; -} - b8c0: 4628 mov r0, r5 - b8c2: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (buffer == nullptr) return 0; - b8c4: 460d mov r5, r1 -} - b8c6: 4628 mov r0, r5 - b8c8: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (buffer == nullptr) return 0; - b8ca: 4615 mov r5, r2 - b8cc: e7f8 b.n b8c0 - b8ce: bf00 nop - -0000b8d0 : - return write(p, sizeof(buf) - (p - buf)); -} - -#else - -size_t Print::printNumber(unsigned long n, uint8_t base, uint8_t sign) - b8d0: b570 push {r4, r5, r6, lr} - // almost always a constant. base = 0 (BYTE) should - // inline as a call directly to write() - if (base == 0) { - return write((uint8_t)n); - } else if (base == 1) { - base = 10; - b8d2: 2a01 cmp r2, #1 -size_t Print::printNumber(unsigned long n, uint8_t base, uint8_t sign) - b8d4: b08a sub sp, #40 ; 0x28 - base = 10; - b8d6: bf08 it eq - b8d8: 220a moveq r2, #10 - } - - - if (n == 0) { - b8da: b3a1 cbz r1, b946 - buf[sizeof(buf) - 1] = '0'; - i = sizeof(buf) - 1; - } else { - i = sizeof(buf) - 1; - b8dc: f04f 0e21 mov.w lr, #33 ; 0x21 - b8e0: e002 b.n b8e8 - while (1) { - digit = n % base; - buf[i] = ((digit < 10) ? '0' + digit : 'A' + digit - 10); - n /= base; - if (n == 0) break; - i--; - b8e2: fa5f fe86 uxtb.w lr, r6 - n /= base; - b8e6: 4629 mov r1, r5 - digit = n % base; - b8e8: fbb1 f5f2 udiv r5, r1, r2 - b8ec: fb02 1415 mls r4, r2, r5, r1 - b8f0: fa5f fc84 uxtb.w ip, r4 - buf[i] = ((digit < 10) ? '0' + digit : 'A' + digit - 10); - b8f4: 2c09 cmp r4, #9 - b8f6: f10c 0430 add.w r4, ip, #48 ; 0x30 - b8fa: bf98 it ls - b8fc: fa5f fc84 uxtbls.w ip, r4 - b900: f10e 0428 add.w r4, lr, #40 ; 0x28 - b904: bf88 it hi - b906: f10c 0c37 addhi.w ip, ip, #55 ; 0x37 - b90a: 446c add r4, sp - b90c: bf88 it hi - b90e: fa5f fc8c uxtbhi.w ip, ip - if (n == 0) break; - b912: 4291 cmp r1, r2 - i--; - b914: f10e 36ff add.w r6, lr, #4294967295 ; 0xffffffff - buf[i] = ((digit < 10) ? '0' + digit : 'A' + digit - 10); - b918: f804 cc24 strb.w ip, [r4, #-36] - if (n == 0) break; - b91c: d2e1 bcs.n b8e2 - } - } - if (sign) { - b91e: b14b cbz r3, b934 - i--; - b920: f10e 3eff add.w lr, lr, #4294967295 ; 0xffffffff - b924: fa5f fe8e uxtb.w lr, lr - buf[i] = '-'; - b928: f10e 0328 add.w r3, lr, #40 ; 0x28 - b92c: 446b add r3, sp - b92e: 222d movs r2, #45 ; 0x2d - b930: f803 2c24 strb.w r2, [r3, #-36] - } - return write(buf + i, sizeof(buf) - i); - b934: 6803 ldr r3, [r0, #0] - b936: a901 add r1, sp, #4 - b938: 685b ldr r3, [r3, #4] - b93a: f1ce 0222 rsb r2, lr, #34 ; 0x22 - b93e: 4471 add r1, lr - b940: 4798 blx r3 -} - b942: b00a add sp, #40 ; 0x28 - b944: bd70 pop {r4, r5, r6, pc} - buf[sizeof(buf) - 1] = '0'; - b946: 2230 movs r2, #48 ; 0x30 - b948: f88d 2025 strb.w r2, [sp, #37] ; 0x25 - i = sizeof(buf) - 1; - b94c: f04f 0e21 mov.w lr, #33 ; 0x21 - b950: e7e5 b.n b91e - b952: bf00 nop - -0000b954 : -{ - b954: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - inline unsigned int length(void) const {return len;} - b958: 688c ldr r4, [r1, #8] - b95a: b08a sub sp, #40 ; 0x28 - while (len > 0) { - b95c: b1dc cbz r4, b996 - unsigned int index = 0; - b95e: 2500 movs r5, #0 - b960: 4688 mov r8, r1 - b962: 4606 mov r6, r0 - size_t count = 0; - b964: 462f mov r7, r5 - s.getBytes(buffer, sizeof(buffer), index); - b966: 462b mov r3, r5 - b968: 2221 movs r2, #33 ; 0x21 - b96a: a901 add r1, sp, #4 - b96c: 4640 mov r0, r8 - b96e: f000 fa41 bl bdf4 - count += write(buffer, nbytes); - b972: 6833 ldr r3, [r6, #0] - b974: 2c20 cmp r4, #32 - b976: 4622 mov r2, r4 - b978: 685b ldr r3, [r3, #4] - b97a: bf28 it cs - b97c: 2220 movcs r2, #32 - b97e: a901 add r1, sp, #4 - b980: 4630 mov r0, r6 - index += nbytes; - b982: 4415 add r5, r2 - len -= nbytes; - b984: 1aa4 subs r4, r4, r2 - count += write(buffer, nbytes); - b986: 4798 blx r3 - b988: 4407 add r7, r0 - while (len > 0) { - b98a: 2c00 cmp r4, #0 - b98c: d1eb bne.n b966 -} - b98e: 4638 mov r0, r7 - b990: b00a add sp, #40 ; 0x28 - b992: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - size_t count = 0; - b996: 4627 mov r7, r4 -} - b998: 4638 mov r0, r7 - b99a: b00a add sp, #40 ; 0x28 - b99c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - -0000b9a0 : - if (n < 0) { - b9a0: 2900 cmp r1, #0 - n = -n; - b9a2: bfba itte lt - b9a4: 4249 neglt r1, r1 - sign = '-'; - b9a6: 232d movlt r3, #45 ; 0x2d - uint8_t sign=0; - b9a8: 2300 movge r3, #0 - if (base == 0) { - b9aa: 220a movs r2, #10 - b9ac: f7ff bf90 b.w b8d0 - -0000b9b0 : -{ - b9b0: b500 push {lr} - return write(buf, 2); - b9b2: 6803 ldr r3, [r0, #0] -{ - b9b4: b083 sub sp, #12 - uint8_t buf[2]={'\r', '\n'}; - b9b6: f640 220d movw r2, #2573 ; 0xa0d - b9ba: f8ad 2004 strh.w r2, [sp, #4] - return write(buf, 2); - b9be: 685b ldr r3, [r3, #4] - b9c0: 2202 movs r2, #2 - b9c2: a901 add r1, sp, #4 - b9c4: 4798 blx r3 -} - b9c6: b003 add sp, #12 - b9c8: f85d fb04 ldr.w pc, [sp], #4 - -0000b9cc <_write>: - return ((class Print *)file)->write((uint8_t *)ptr, len); - b9cc: 4b03 ldr r3, [pc, #12] ; (b9dc <_write+0x10>) - b9ce: 2802 cmp r0, #2 - b9d0: bf88 it hi - b9d2: 4603 movhi r3, r0 - b9d4: 4618 mov r0, r3 - b9d6: 681b ldr r3, [r3, #0] - b9d8: 685b ldr r3, [r3, #4] - b9da: 4718 bx r3 - b9dc: 1fff8844 .word 0x1fff8844 - -0000b9e0 : - if (base == 0) { - b9e0: b932 cbnz r2, b9f0 - return write((uint8_t)n); - b9e2: 6803 ldr r3, [r0, #0] -{ - b9e4: b500 push {lr} - return write((uint8_t)n); - b9e6: 681b ldr r3, [r3, #0] -} - b9e8: f85d eb04 ldr.w lr, [sp], #4 - return write((uint8_t)n); - b9ec: b2c9 uxtb r1, r1 - b9ee: 4718 bx r3 - b9f0: f7ff bf6e b.w b8d0 - -0000b9f4 : - - uint8_t year; - uint8_t month, monthLength; - unsigned long days; - - tm.sec = time % 60; - b9f4: 4a52 ldr r2, [pc, #328] ; (bb40 ) -{ - b9f6: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - tm.sec = time % 60; - b9fa: fba2 4300 umull r4, r3, r2, r0 - b9fe: 095b lsrs r3, r3, #5 - time /= 60; // now it is minutes - tm.min = time % 60; - ba00: fba2 4203 umull r4, r2, r2, r3 - tm.sec = time % 60; - ba04: ebc3 1403 rsb r4, r3, r3, lsl #4 - tm.min = time % 60; - ba08: 0952 lsrs r2, r2, #5 - tm.sec = time % 60; - ba0a: eba0 0084 sub.w r0, r0, r4, lsl #2 - time /= 60; // now it is hours - tm.hour = time % 24; - ba0e: 4c4d ldr r4, [pc, #308] ; (bb44 ) - tm.sec = time % 60; - ba10: 7008 strb r0, [r1, #0] - tm.min = time % 60; - ba12: ebc2 1502 rsb r5, r2, r2, lsl #4 - tm.hour = time % 24; - ba16: fba4 4e02 umull r4, lr, r4, r2 - tm.min = time % 60; - ba1a: eba3 0385 sub.w r3, r3, r5, lsl #2 - tm.hour = time % 24; - ba1e: ea4f 1e1e mov.w lr, lr, lsr #4 - tm.min = time % 60; - ba22: 704b strb r3, [r1, #1] - time /= 24; // now it is days - tm.wday = ((time + 4) % 7); // Sunday is day 0 - ba24: 4b48 ldr r3, [pc, #288] ; (bb48 ) - ba26: 4e49 ldr r6, [pc, #292] ; (bb4c ) - - year = 0; - days = 0; - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - ba28: 4f49 ldr r7, [pc, #292] ; (bb50 ) - ba2a: f8df 8128 ldr.w r8, [pc, #296] ; bb54 - tm.wday = ((time + 4) % 7); // Sunday is day 0 - ba2e: f10e 0004 add.w r0, lr, #4 - ba32: fba3 4300 umull r4, r3, r3, r0 - tm.hour = time % 24; - ba36: eb0e 044e add.w r4, lr, lr, lsl #1 - ba3a: eba2 02c4 sub.w r2, r2, r4, lsl #3 - ba3e: 708a strb r2, [r1, #2] - tm.wday = ((time + 4) % 7); // Sunday is day 0 - ba40: 1ac2 subs r2, r0, r3 - ba42: eb03 0352 add.w r3, r3, r2, lsr #1 - ba46: 089b lsrs r3, r3, #2 - ba48: ebc3 03c3 rsb r3, r3, r3, lsl #3 - ba4c: 1ac3 subs r3, r0, r3 - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - ba4e: 2000 movs r0, #0 - tm.wday = ((time + 4) % 7); // Sunday is day 0 - ba50: 70cb strb r3, [r1, #3] - days = 0; - ba52: 4602 mov r2, r0 - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - ba54: f240 196d movw r9, #365 ; 0x16d - ba58: e00d b.n ba76 - ba5a: ebb7 0fb4 cmp.w r7, r4, ror #2 - ba5e: d348 bcc.n baf2 - ba60: ebb8 1f34 cmp.w r8, r4, ror #4 - ba64: bf34 ite cc - ba66: 464c movcc r4, r9 - ba68: f44f 74b7 movcs.w r4, #366 ; 0x16e - ba6c: 4422 add r2, r4 - ba6e: 4596 cmp lr, r2 - ba70: f100 0001 add.w r0, r0, #1 - ba74: d30f bcc.n ba96 - ba76: fa5f fc80 uxtb.w ip, r0 - ba7a: f20c 73b2 addw r3, ip, #1970 ; 0x7b2 - ba7e: f013 0503 ands.w r5, r3, #3 - ba82: fb06 f403 mul.w r4, r6, r3 - ba86: d0e8 beq.n ba5a - ba88: f240 146d movw r4, #365 ; 0x16d - ba8c: 4422 add r2, r4 - ba8e: 4596 cmp lr, r2 - ba90: f100 0001 add.w r0, r0, #1 - ba94: d2ef bcs.n ba76 - year++; - } - tm.year = year + 70; // year is offset from 1970 - - days -= LEAP_YEAR(year) ? 366 : 365; - ba96: 4e30 ldr r6, [pc, #192] ; (bb58 ) - tm.year = year + 70; // year is offset from 1970 - ba98: f10c 0c46 add.w ip, ip, #70 ; 0x46 - days -= LEAP_YEAR(year) ? 366 : 365; - ba9c: fba6 0603 umull r0, r6, r6, r3 - tm.year = year + 70; // year is offset from 1970 - baa0: f881 c006 strb.w ip, [r1, #6] - days -= LEAP_YEAR(year) ? 366 : 365; - baa4: 0977 lsrs r7, r6, #5 - baa6: b395 cbz r5, bb0e - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - baa8: 2064 movs r0, #100 ; 0x64 - baaa: 09f6 lsrs r6, r6, #7 - baac: fb00 3717 mls r7, r0, r7, r3 - bab0: f44f 70c8 mov.w r0, #400 ; 0x190 - bab4: fb00 3616 mls r6, r0, r6, r3 - days -= LEAP_YEAR(year) ? 366 : 365; - bab8: f240 106d movw r0, #365 ; 0x16d - time -= days; // now it is days in this year, starting at 0 - babc: ebae 0e02 sub.w lr, lr, r2 - bac0: 4470 add r0, lr - bac2: 2201 movs r2, #1 - monthLength=29; - } else { - monthLength=28; - } - } else { - monthLength = monthDays[month]; - bac4: f8df e094 ldr.w lr, [pc, #148] ; bb5c - time -= days; // now it is days in this year, starting at 0 - bac8: 2300 movs r3, #0 - baca: e00a b.n bae2 - } - - if (time >= monthLength) { - bacc: f813 400e ldrb.w r4, [r3, lr] - bad0: 4284 cmp r4, r0 - bad2: d811 bhi.n baf8 - for (month=0; month<12; month++) { - bad4: 2a0c cmp r2, #12 - time -= monthLength; - bad6: eba0 0004 sub.w r0, r0, r4 - for (month=0; month<12; month++) { - bada: d00e beq.n bafa - badc: 3201 adds r2, #1 - bade: 3301 adds r3, #1 - bae0: b2d2 uxtb r2, r2 - if (month==1) { // february - bae2: 2b01 cmp r3, #1 - bae4: fa5f fc83 uxtb.w ip, r3 - bae8: d1f0 bne.n bacc - if (LEAP_YEAR(year)) { - baea: b95d cbnz r5, bb04 - baec: b1df cbz r7, bb26 - baee: 241d movs r4, #29 - baf0: e009 b.n bb06 - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - baf2: f44f 74b7 mov.w r4, #366 ; 0x16e - baf6: e7b9 b.n ba6c - baf8: 4662 mov r2, ip - } else { - break; - } - } - tm.mon = month; // jan is month 0 - tm.mday = time + 1; // day of month - bafa: 3001 adds r0, #1 - tm.mon = month; // jan is month 0 - bafc: 714a strb r2, [r1, #5] - tm.mday = time + 1; // day of month - bafe: 7108 strb r0, [r1, #4] -} - bb00: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - bb04: 241c movs r4, #28 - if (time >= monthLength) { - bb06: 42a0 cmp r0, r4 - bb08: d317 bcc.n bb3a - time -= monthLength; - bb0a: 1b00 subs r0, r0, r4 - for (month=0; month<12; month++) { - bb0c: e7e6 b.n badc - days -= LEAP_YEAR(year) ? 366 : 365; - bb0e: 2064 movs r0, #100 ; 0x64 - bb10: fb00 3717 mls r7, r0, r7, r3 - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - bb14: 09f6 lsrs r6, r6, #7 - bb16: f44f 70c8 mov.w r0, #400 ; 0x190 - bb1a: fb00 3616 mls r6, r0, r6, r3 - days -= LEAP_YEAR(year) ? 366 : 365; - bb1e: b13f cbz r7, bb30 - bb20: f44f 70b7 mov.w r0, #366 ; 0x16e - bb24: e7ca b.n babc - if (LEAP_YEAR(year)) { - bb26: 2e00 cmp r6, #0 - bb28: bf14 ite ne - bb2a: 241c movne r4, #28 - bb2c: 241d moveq r4, #29 - bb2e: e7ea b.n bb06 - days -= LEAP_YEAR(year) ? 366 : 365; - bb30: 2e00 cmp r6, #0 - bb32: d1c1 bne.n bab8 - bb34: f44f 70b7 mov.w r0, #366 ; 0x16e - bb38: e7c0 b.n babc - if (time >= monthLength) { - bb3a: 2201 movs r2, #1 - bb3c: e7dd b.n bafa - bb3e: bf00 nop - bb40: 88888889 .word 0x88888889 - bb44: aaaaaaab .word 0xaaaaaaab - bb48: 24924925 .word 0x24924925 - bb4c: c28f5c29 .word 0xc28f5c29 - bb50: 028f5c28 .word 0x028f5c28 - bb54: 00a3d70a .word 0x00a3d70a - bb58: 51eb851f .word 0x51eb851f - bb5c: 00018600 .word 0x00018600 - -0000bb60 : - -/*********************************************/ -/* Constructors */ -/*********************************************/ - -String::String(const char *cstr) - bb60: b5f8 push {r3, r4, r5, r6, r7, lr} -/* Memory Management */ -/*********************************************/ - -inline void String::init(void) -{ - buffer = NULL; - bb62: 2600 movs r6, #0 -String::String(const char *cstr) - bb64: 4604 mov r4, r0 - buffer = NULL; - bb66: 6006 str r6, [r0, #0] - capacity = 0; - bb68: 6046 str r6, [r0, #4] - len = 0; - bb6a: 6086 str r6, [r0, #8] - if (cstr) copy(cstr, strlen(cstr)); - bb6c: b129 cbz r1, bb7a - bb6e: 4608 mov r0, r1 - bb70: 460d mov r5, r1 - bb72: f006 f985 bl 11e80 -/* Copy and Move */ -/*********************************************/ - -String & String::copy(const char *cstr, unsigned int length) -{ - if (length == 0) { - bb76: 4607 mov r7, r0 - bb78: b908 cbnz r0, bb7e -} - bb7a: 4620 mov r0, r4 - bb7c: bdf8 pop {r3, r4, r5, r6, r7, pc} - char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); - bb7e: 3001 adds r0, #1 - bb80: f004 fa96 bl 100b0 - if (newbuffer) { - bb84: 2800 cmp r0, #0 - bb86: d0f8 beq.n bb7a - capacity = maxStrLen; - bb88: e9c4 0700 strd r0, r7, [r4] - if (len == 0) buffer[0] = 0; - bb8c: 7006 strb r6, [r0, #0] - buffer = NULL; - } - len = capacity = 0; - return *this; - } - len = length; - bb8e: 60a7 str r7, [r4, #8] - strcpy(buffer, cstr); - bb90: 4629 mov r1, r5 - bb92: f006 f883 bl 11c9c -} - bb96: 4620 mov r0, r4 - bb98: bdf8 pop {r3, r4, r5, r6, r7, pc} - bb9a: bf00 nop - -0000bb9c : -String::String(const String &value) - bb9c: b5f8 push {r3, r4, r5, r6, r7, lr} - rhs.len = 0; -} - -String & String::operator = (const String &rhs) -{ - if (this == &rhs) return *this; - bb9e: 4288 cmp r0, r1 - buffer = NULL; - bba0: f04f 0500 mov.w r5, #0 -String::String(const String &value) - bba4: 4604 mov r4, r0 - buffer = NULL; - bba6: 6005 str r5, [r0, #0] - capacity = 0; - bba8: 6045 str r5, [r0, #4] - len = 0; - bbaa: 6085 str r5, [r0, #8] - if (this == &rhs) return *this; - bbac: d002 beq.n bbb4 - bbae: 688e ldr r6, [r1, #8] - return copy(rhs.buffer, rhs.len); - bbb0: 680f ldr r7, [r1, #0] - if (length == 0) { - bbb2: b90e cbnz r6, bbb8 -} - bbb4: 4620 mov r0, r4 - bbb6: bdf8 pop {r3, r4, r5, r6, r7, pc} - char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); - bbb8: 1c70 adds r0, r6, #1 - bbba: f004 fa79 bl 100b0 - if (newbuffer) { - bbbe: 2800 cmp r0, #0 - bbc0: d0f8 beq.n bbb4 - capacity = maxStrLen; - bbc2: e9c4 0600 strd r0, r6, [r4] - if (len == 0) buffer[0] = 0; - bbc6: 7005 strb r5, [r0, #0] - len = length; - bbc8: 60a6 str r6, [r4, #8] - strcpy(buffer, cstr); - bbca: 4639 mov r1, r7 - bbcc: f006 f866 bl 11c9c -} - bbd0: 4620 mov r0, r4 - bbd2: bdf8 pop {r3, r4, r5, r6, r7, pc} - -0000bbd4 : -String::~String() - bbd4: b510 push {r4, lr} - bbd6: 4604 mov r4, r0 - free(buffer); - bbd8: 6800 ldr r0, [r0, #0] - bbda: f004 fa71 bl 100c0 -} - bbde: 4620 mov r0, r4 - bbe0: bd10 pop {r4, pc} - bbe2: bf00 nop - -0000bbe4 : -{ - bbe4: b5f8 push {r3, r4, r5, r6, r7, lr} - bbe6: 4604 mov r4, r0 - if (length == 0) { - bbe8: 4615 mov r5, r2 - bbea: b932 cbnz r2, bbfa - if (buffer) buffer[0] = 0; - bbec: 6803 ldr r3, [r0, #0] - bbee: b103 cbz r3, bbf2 - bbf0: 701a strb r2, [r3, #0] - len = 0; - bbf2: 2300 movs r3, #0 - bbf4: 60a3 str r3, [r4, #8] -} - bbf6: 4620 mov r0, r4 - bbf8: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (capacity >= size) return 1; - bbfa: 6843 ldr r3, [r0, #4] - bbfc: 429a cmp r2, r3 - bbfe: 460e mov r6, r1 - bc00: d91c bls.n bc3c - char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); - bc02: 6800 ldr r0, [r0, #0] - bc04: 1c51 adds r1, r2, #1 - bc06: f004 fd1f bl 10648 - if (newbuffer) { - bc0a: 4607 mov r7, r0 - bc0c: b160 cbz r0, bc28 - if (len == 0) buffer[0] = 0; - bc0e: 68a3 ldr r3, [r4, #8] - buffer = newbuffer; - bc10: 6020 str r0, [r4, #0] - capacity = maxStrLen; - bc12: 6065 str r5, [r4, #4] - if (len == 0) buffer[0] = 0; - bc14: b90b cbnz r3, bc1a - bc16: 7003 strb r3, [r0, #0] - strcpy(buffer, cstr); - bc18: 6827 ldr r7, [r4, #0] - len = length; - bc1a: 60a5 str r5, [r4, #8] - strcpy(buffer, cstr); - bc1c: 4631 mov r1, r6 - bc1e: 4638 mov r0, r7 - bc20: f006 f83c bl 11c9c -} - bc24: 4620 mov r0, r4 - bc26: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (buffer) { - bc28: 6820 ldr r0, [r4, #0] - bc2a: b110 cbz r0, bc32 - free(buffer); - bc2c: f004 fa48 bl 100c0 - buffer = NULL; - bc30: 6027 str r7, [r4, #0] - len = capacity = 0; - bc32: 2300 movs r3, #0 - bc34: 6063 str r3, [r4, #4] - bc36: 60a3 str r3, [r4, #8] -} - bc38: 4620 mov r0, r4 - bc3a: bdf8 pop {r3, r4, r5, r6, r7, pc} - if (buffer) buffer[0] = 0; - bc3c: 6807 ldr r7, [r0, #0] - len = length; - bc3e: 60a5 str r5, [r4, #8] - strcpy(buffer, cstr); - bc40: 4631 mov r1, r6 - bc42: 4638 mov r0, r7 - bc44: f006 f82a bl 11c9c - return *this; - bc48: e7ec b.n bc24 - bc4a: bf00 nop - -0000bc4c : -String::String(unsigned char c) - bc4c: b510 push {r4, lr} - buffer = NULL; - bc4e: 2300 movs r3, #0 -String::String(unsigned char c) - bc50: b082 sub sp, #8 - buffer = NULL; - bc52: 6003 str r3, [r0, #0] - capacity = 0; - bc54: 6043 str r3, [r0, #4] - len = 0; - bc56: 6083 str r3, [r0, #8] -String::String(unsigned char c) - bc58: 4604 mov r4, r0 - utoa(c, buf, 10); - bc5a: 220a movs r2, #10 - bc5c: 4608 mov r0, r1 - bc5e: a901 add r1, sp, #4 - bc60: f005 f8d4 bl 10e0c -#endif - -String & String::operator = (const char *cstr) -{ - if (cstr) { - copy(cstr, strlen(cstr)); - bc64: a801 add r0, sp, #4 - bc66: f006 f90b bl 11e80 - bc6a: a901 add r1, sp, #4 - bc6c: 4602 mov r2, r0 - bc6e: 4620 mov r0, r4 - bc70: f7ff ffb8 bl bbe4 -} - bc74: 4620 mov r0, r4 - bc76: b002 add sp, #8 - bc78: bd10 pop {r4, pc} - bc7a: bf00 nop - -0000bc7c : -String::String(const int value, unsigned char base) - bc7c: b510 push {r4, lr} - buffer = NULL; - bc7e: 2300 movs r3, #0 -String::String(const int value, unsigned char base) - bc80: b08a sub sp, #40 ; 0x28 - buffer = NULL; - bc82: 6003 str r3, [r0, #0] - capacity = 0; - bc84: 6043 str r3, [r0, #4] - len = 0; - bc86: 6083 str r3, [r0, #8] -String::String(const int value, unsigned char base) - bc88: 4604 mov r4, r0 - itoa(value, buf, base); - bc8a: 4608 mov r0, r1 - bc8c: a901 add r1, sp, #4 - bc8e: f004 f9f9 bl 10084 - copy(cstr, strlen(cstr)); - bc92: a801 add r0, sp, #4 - bc94: f006 f8f4 bl 11e80 - bc98: a901 add r1, sp, #4 - bc9a: 4602 mov r2, r0 - bc9c: 4620 mov r0, r4 - bc9e: f7ff ffa1 bl bbe4 -} - bca2: 4620 mov r0, r4 - bca4: b00a add sp, #40 ; 0x28 - bca6: bd10 pop {r4, pc} - -0000bca8 : -String::String(long value, unsigned char base) - bca8: b510 push {r4, lr} - buffer = NULL; - bcaa: 2300 movs r3, #0 -String::String(long value, unsigned char base) - bcac: b08a sub sp, #40 ; 0x28 - buffer = NULL; - bcae: 6003 str r3, [r0, #0] - capacity = 0; - bcb0: 6043 str r3, [r0, #4] - len = 0; - bcb2: 6083 str r3, [r0, #8] -String::String(long value, unsigned char base) - bcb4: 4604 mov r4, r0 - ltoa(value, buf, base); - bcb6: 4608 mov r0, r1 - bcb8: a901 add r1, sp, #4 - bcba: f000 fa3f bl c13c - copy(cstr, strlen(cstr)); - bcbe: a801 add r0, sp, #4 - bcc0: f006 f8de bl 11e80 - bcc4: a901 add r1, sp, #4 - bcc6: 4602 mov r2, r0 - bcc8: 4620 mov r0, r4 - bcca: f7ff ff8b bl bbe4 -} - bcce: 4620 mov r0, r4 - bcd0: b00a add sp, #40 ; 0x28 - bcd2: bd10 pop {r4, pc} - -0000bcd4 : -String::String(unsigned long value, unsigned char base) - bcd4: b510 push {r4, lr} - buffer = NULL; - bcd6: 2300 movs r3, #0 -String::String(unsigned long value, unsigned char base) - bcd8: b08a sub sp, #40 ; 0x28 - buffer = NULL; - bcda: 6003 str r3, [r0, #0] - capacity = 0; - bcdc: 6043 str r3, [r0, #4] - len = 0; - bcde: 6083 str r3, [r0, #8] -String::String(unsigned long value, unsigned char base) - bce0: 4604 mov r4, r0 - ultoa(value, buf, base); - bce2: 4608 mov r0, r1 - bce4: a901 add r1, sp, #4 - bce6: f000 f9fb bl c0e0 - copy(cstr, strlen(cstr)); - bcea: a801 add r0, sp, #4 - bcec: f006 f8c8 bl 11e80 - bcf0: a901 add r1, sp, #4 - bcf2: 4602 mov r2, r0 - bcf4: 4620 mov r0, r4 - bcf6: f7ff ff75 bl bbe4 -} - bcfa: 4620 mov r0, r4 - bcfc: b00a add sp, #40 ; 0x28 - bcfe: bd10 pop {r4, pc} - -0000bd00 : -String::String(float num, unsigned char digits) - bd00: b530 push {r4, r5, lr} - bd02: 4604 mov r4, r0 - buffer = NULL; - bd04: 2300 movs r3, #0 -String::String(float num, unsigned char digits) - bd06: b08b sub sp, #44 ; 0x2c - bd08: 4608 mov r0, r1 - buffer = NULL; - bd0a: 6023 str r3, [r4, #0] - capacity = 0; - bd0c: 6063 str r3, [r4, #4] - len = 0; - bd0e: 60a3 str r3, [r4, #8] - *this = dtostrf(num, digits + 2, digits, buf); - bd10: 1c91 adds r1, r2, #2 - bd12: 466b mov r3, sp - bd14: f000 fa20 bl c158 - if (cstr) { - bd18: 4605 mov r5, r0 - bd1a: b148 cbz r0, bd30 - copy(cstr, strlen(cstr)); - bd1c: f006 f8b0 bl 11e80 - bd20: 4629 mov r1, r5 - bd22: 4602 mov r2, r0 - bd24: 4620 mov r0, r4 - bd26: f7ff ff5d bl bbe4 -} - bd2a: 4620 mov r0, r4 - bd2c: b00b add sp, #44 ; 0x2c - bd2e: bd30 pop {r4, r5, pc} - } else { - len = 0; - bd30: 60a0 str r0, [r4, #8] -} - bd32: 4620 mov r0, r4 - bd34: b00b add sp, #44 ; 0x2c - bd36: bd30 pop {r4, r5, pc} - -0000bd38 : - if (this == &rhs) return *this; - bd38: 4281 cmp r1, r0 - bd3a: d003 beq.n bd44 - return copy(rhs.buffer, rhs.len); - bd3c: 688a ldr r2, [r1, #8] - bd3e: 6809 ldr r1, [r1, #0] - bd40: f7ff bf50 b.w bbe4 -} - bd44: 4770 bx lr - bd46: bf00 nop - -0000bd48 : -{ - return append(s.buffer, s.len); -} - -String & String::append(const char *cstr, unsigned int length) -{ - bd48: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - bd4c: 4604 mov r4, r0 - unsigned int newlen = len + length; - bool self = false; - unsigned int buffer_offset; - if ( (cstr >= buffer) && (cstr < (buffer+len) ) ) { - bd4e: 6800 ldr r0, [r0, #0] - unsigned int newlen = len + length; - bd50: 68a3 ldr r3, [r4, #8] - if ( (cstr >= buffer) && (cstr < (buffer+len) ) ) { - bd52: 4288 cmp r0, r1 -{ - bd54: 460d mov r5, r1 - bd56: 4616 mov r6, r2 - if ( (cstr >= buffer) && (cstr < (buffer+len) ) ) { - bd58: d809 bhi.n bd6e - bd5a: 18c2 adds r2, r0, r3 - bd5c: 4291 cmp r1, r2 - bd5e: d206 bcs.n bd6e - self = true; - buffer_offset = (unsigned int)(cstr-buffer); - bd60: 1a0f subs r7, r1, r0 - self = true; - bd62: f04f 0901 mov.w r9, #1 - } - if (length == 0 || !reserve(newlen)) return *this; - bd66: b936 cbnz r6, bd76 - } - else - strcpy(buffer + len, cstr); - len = newlen; - return *this; -} - bd68: 4620 mov r0, r4 - bd6a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - bool self = false; - bd6e: f04f 0900 mov.w r9, #0 - if (length == 0 || !reserve(newlen)) return *this; - bd72: 2e00 cmp r6, #0 - bd74: d0f8 beq.n bd68 - if (capacity >= size) return 1; - bd76: 6862 ldr r2, [r4, #4] - unsigned int newlen = len + length; - bd78: eb03 0806 add.w r8, r3, r6 - if (capacity >= size) return 1; - bd7c: 4590 cmp r8, r2 - bd7e: d90c bls.n bd9a - char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); - bd80: f108 0101 add.w r1, r8, #1 - bd84: f004 fc60 bl 10648 - if (newbuffer) { - bd88: 2800 cmp r0, #0 - bd8a: d0ed beq.n bd68 - buffer = newbuffer; - bd8c: 68a3 ldr r3, [r4, #8] - capacity = maxStrLen; - bd8e: e9c4 0800 strd r0, r8, [r4] - if (len == 0) buffer[0] = 0; - bd92: b913 cbnz r3, bd9a - bd94: 7003 strb r3, [r0, #0] - memcpy(buffer + len, buffer+buffer_offset, length); - bd96: 6820 ldr r0, [r4, #0] - bd98: 68a3 ldr r3, [r4, #8] - if ( self ) { - bd9a: f1b9 0f00 cmp.w r9, #0 - bd9e: d108 bne.n bdb2 - strcpy(buffer + len, cstr); - bda0: 4629 mov r1, r5 - bda2: 4418 add r0, r3 - bda4: f005 ff7a bl 11c9c - len = newlen; - bda8: f8c4 8008 str.w r8, [r4, #8] -} - bdac: 4620 mov r0, r4 - bdae: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - memcpy(buffer + len, buffer+buffer_offset, length); - bdb2: 4632 mov r2, r6 - bdb4: 19c1 adds r1, r0, r7 - bdb6: 4418 add r0, r3 - bdb8: f000 f83e bl be38 - buffer[newlen] = 0; - bdbc: 6823 ldr r3, [r4, #0] - bdbe: 2200 movs r2, #0 - bdc0: f803 2008 strb.w r2, [r3, r8] - bdc4: e7f0 b.n bda8 - bdc6: bf00 nop - -0000bdc8 : -/* Concatenate */ -/*********************************************/ - - -StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs) -{ - bdc8: b510 push {r4, lr} - StringSumHelper &a = const_cast(lhs); - a.append(rhs.buffer, rhs.len); - bdca: 688a ldr r2, [r1, #8] - bdcc: 6809 ldr r1, [r1, #0] -{ - bdce: 4604 mov r4, r0 - a.append(rhs.buffer, rhs.len); - bdd0: f7ff ffba bl bd48 - return a; -} - bdd4: 4620 mov r0, r4 - bdd6: bd10 pop {r4, pc} - -0000bdd8 : - -StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr) -{ - bdd8: b538 push {r3, r4, r5, lr} - bdda: 4605 mov r5, r0 - StringSumHelper &a = const_cast(lhs); - if (cstr) a.append(cstr, strlen(cstr)); - bddc: b141 cbz r1, bdf0 - bdde: 4608 mov r0, r1 - bde0: 460c mov r4, r1 - bde2: f006 f84d bl 11e80 - bde6: 4621 mov r1, r4 - bde8: 4602 mov r2, r0 - bdea: 4628 mov r0, r5 - bdec: f7ff ffac bl bd48 - return a; -} - bdf0: 4628 mov r0, r5 - bdf2: bd38 pop {r3, r4, r5, pc} - -0000bdf4 : - return buffer[index]; -} - -void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const -{ - if (!bufsize || !buf) return; - bdf4: b1ba cbz r2, be26 -{ - bdf6: b538 push {r3, r4, r5, lr} - bdf8: 460c mov r4, r1 - if (!bufsize || !buf) return; - bdfa: b121 cbz r1, be06 - if (index >= len) { - bdfc: 6885 ldr r5, [r0, #8] - bdfe: 429d cmp r5, r3 - be00: d802 bhi.n be08 - buf[0] = 0; - be02: 2300 movs r3, #0 - be04: 700b strb r3, [r1, #0] - } - unsigned int n = bufsize - 1; - if (n > len - index) n = len - index; - strncpy((char *)buf, buffer + index, n); - buf[n] = 0; -} - be06: bd38 pop {r3, r4, r5, pc} - if (n > len - index) n = len - index; - be08: 1aed subs r5, r5, r3 - unsigned int n = bufsize - 1; - be0a: f102 3cff add.w ip, r2, #4294967295 ; 0xffffffff - strncpy((char *)buf, buffer + index, n); - be0e: 6801 ldr r1, [r0, #0] - be10: 4565 cmp r5, ip - be12: bf28 it cs - be14: 4665 movcs r5, ip - be16: 4419 add r1, r3 - be18: 462a mov r2, r5 - be1a: 4620 mov r0, r4 - be1c: f005 faf6 bl 1140c - buf[n] = 0; - be20: 2300 movs r3, #0 - be22: 5563 strb r3, [r4, r5] -} - be24: bd38 pop {r3, r4, r5, pc} - be26: 4770 bx lr - -0000be28
: - */ - -#include - -extern "C" int main(void) -{ - be28: b508 push {r3, lr} - } - - -#else - // Arduino's main() function just calls setup() and loop().... - setup(); - be2a: f7f6 f86d bl 1f08 - while (1) { - loop(); - be2e: f7f7 f9a9 bl 3184 - yield(); - be32: f002 ffdf bl edf4 - while (1) { - be36: e7fa b.n be2e - -0000be38 : -#ifdef __ARM_FEATURE_UNALIGNED - /* In case of UNALIGNED access supported, ip is not used in - function body. */ - mov ip, r0 -#else - push {r0} - be38: b401 push {r0} -#endif - orr r3, r1, r0 - be3a: ea41 0300 orr.w r3, r1, r0 - ands r3, r3, #3 - be3e: f013 0303 ands.w r3, r3, #3 - bne .Lmisaligned_copy - be42: d16f bne.n bf24 - -.Lbig_block: - subs r2, __OPT_BIG_BLOCK_SIZE - be44: 3a40 subs r2, #64 ; 0x40 - blo .Lmid_block - be46: d341 bcc.n becc -.Lbig_block_loop: - BEGIN_UNROLL_BIG_BLOCK -#ifdef __ARM_ARCH_7EM__ - ldr r3, [r1], #4 - str r3, [r0], #4 - END_UNROLL - be48: f851 3b04 ldr.w r3, [r1], #4 - be4c: f840 3b04 str.w r3, [r0], #4 - be50: f851 3b04 ldr.w r3, [r1], #4 - be54: f840 3b04 str.w r3, [r0], #4 - be58: f851 3b04 ldr.w r3, [r1], #4 - be5c: f840 3b04 str.w r3, [r0], #4 - be60: f851 3b04 ldr.w r3, [r1], #4 - be64: f840 3b04 str.w r3, [r0], #4 - be68: f851 3b04 ldr.w r3, [r1], #4 - be6c: f840 3b04 str.w r3, [r0], #4 - be70: f851 3b04 ldr.w r3, [r1], #4 - be74: f840 3b04 str.w r3, [r0], #4 - be78: f851 3b04 ldr.w r3, [r1], #4 - be7c: f840 3b04 str.w r3, [r0], #4 - be80: f851 3b04 ldr.w r3, [r1], #4 - be84: f840 3b04 str.w r3, [r0], #4 - be88: f851 3b04 ldr.w r3, [r1], #4 - be8c: f840 3b04 str.w r3, [r0], #4 - be90: f851 3b04 ldr.w r3, [r1], #4 - be94: f840 3b04 str.w r3, [r0], #4 - be98: f851 3b04 ldr.w r3, [r1], #4 - be9c: f840 3b04 str.w r3, [r0], #4 - bea0: f851 3b04 ldr.w r3, [r1], #4 - bea4: f840 3b04 str.w r3, [r0], #4 - bea8: f851 3b04 ldr.w r3, [r1], #4 - beac: f840 3b04 str.w r3, [r0], #4 - beb0: f851 3b04 ldr.w r3, [r1], #4 - beb4: f840 3b04 str.w r3, [r0], #4 - beb8: f851 3b04 ldr.w r3, [r1], #4 - bebc: f840 3b04 str.w r3, [r0], #4 - bec0: f851 3b04 ldr.w r3, [r1], #4 - bec4: f840 3b04 str.w r3, [r0], #4 - str r3, [r0, \offset] - END_UNROLL - adds r0, __OPT_BIG_BLOCK_SIZE - adds r1, __OPT_BIG_BLOCK_SIZE -#endif - subs r2, __OPT_BIG_BLOCK_SIZE - bec8: 3a40 subs r2, #64 ; 0x40 - bhs .Lbig_block_loop - beca: d2bd bcs.n be48 - -.Lmid_block: - adds r2, __OPT_BIG_BLOCK_SIZE - __OPT_MID_BLOCK_SIZE - becc: 3230 adds r2, #48 ; 0x30 - blo .Lcopy_word_by_word - bece: d311 bcc.n bef4 -.Lmid_block_loop: - BEGIN_UNROLL_MID_BLOCK -#ifdef __ARM_ARCH_7EM__ - ldr r3, [r1], #4 - str r3, [r0], #4 - END_UNROLL - bed0: f851 3b04 ldr.w r3, [r1], #4 - bed4: f840 3b04 str.w r3, [r0], #4 - bed8: f851 3b04 ldr.w r3, [r1], #4 - bedc: f840 3b04 str.w r3, [r0], #4 - bee0: f851 3b04 ldr.w r3, [r1], #4 - bee4: f840 3b04 str.w r3, [r0], #4 - bee8: f851 3b04 ldr.w r3, [r1], #4 - beec: f840 3b04 str.w r3, [r0], #4 - str r3, [r0, \offset] - END_UNROLL - adds r0, __OPT_MID_BLOCK_SIZE - adds r1, __OPT_MID_BLOCK_SIZE -#endif - subs r2, __OPT_MID_BLOCK_SIZE - bef0: 3a10 subs r2, #16 - bhs .Lmid_block_loop - bef2: d2ed bcs.n bed0 - -.Lcopy_word_by_word: - adds r2, __OPT_MID_BLOCK_SIZE - 4 - bef4: 320c adds r2, #12 - blo .Lcopy_less_than_4 - bef6: d305 bcc.n bf04 - - /* Kernel loop for small block copy */ - .align 2 -.Lcopy_word_by_word_loop: - ldr r3, [r1], #4 - bef8: f851 3b04 ldr.w r3, [r1], #4 - str r3, [r0], #4 - befc: f840 3b04 str.w r3, [r0], #4 - subs r2, #4 - bf00: 3a04 subs r2, #4 - bhs .Lcopy_word_by_word_loop - bf02: d2f9 bcs.n bef8 - -.Lcopy_less_than_4: - adds r2, #4 - bf04: 3204 adds r2, #4 - beq .Ldone - bf06: d00a beq.n bf1e - - lsls r2, r2, #31 - bf08: 07d2 lsls r2, r2, #31 - itt ne - bf0a: bf1c itt ne - ldrbne r3, [r1], #1 - bf0c: f811 3b01 ldrbne.w r3, [r1], #1 - strbne r3, [r0], #1 - bf10: f800 3b01 strbne.w r3, [r0], #1 - - bcc .Ldone - bf14: d303 bcc.n bf1e -#ifdef __ARM_FEATURE_UNALIGNED - ldrh r3, [r1] - strh r3, [r0] -#else - ldrb r3, [r1] - bf16: 780b ldrb r3, [r1, #0] - strb r3, [r0] - bf18: 7003 strb r3, [r0, #0] - ldrb r3, [r1, #1] - bf1a: 784b ldrb r3, [r1, #1] - strb r3, [r0, #1] - bf1c: 7043 strb r3, [r0, #1] - -.Ldone: -#ifdef __ARM_FEATURE_UNALIGNED - mov r0, ip -#else - pop {r0} - bf1e: bc01 pop {r0} -#endif - bx lr - bf20: 4770 bx lr - bf22: bf00 nop - beq .Ldst_aligned -#else - /* if len < 12, misalignment adjustment has more overhead than - just byte-to-byte copy. Also, len must >=8 to guarantee code - afterward work correctly. */ - cmp r2, #12 - bf24: 2a0c cmp r2, #12 - blo .Lbyte_copy - bf26: d34a bcc.n bfbe - handling of aligned src and misaligned dst need more overhead than - otherwise. By doing this the worst case is when initial src is aligned, - additional up to 4 byte additional copy will executed, which is - acceptable. */ - - ands r3, r0, #3 - bf28: f010 0303 ands.w r3, r0, #3 - beq .Ldst_aligned - bf2c: d011 beq.n bf52 - - rsb r3, #4 - bf2e: f1c3 0304 rsb r3, r3, #4 - subs r2, r3 - bf32: 1ad2 subs r2, r2, r3 - - lsls r3, r3, #31 - bf34: 07db lsls r3, r3, #31 - itt ne - bf36: bf1c itt ne - ldrbne r3, [r1], #1 - bf38: f811 3b01 ldrbne.w r3, [r1], #1 - strbne r3, [r0], #1 - bf3c: f800 3b01 strbne.w r3, [r0], #1 - - bcc .Ldst_aligned - bf40: d307 bcc.n bf52 -#ifdef __ARM_FEATURE_UNALIGNED - ldrh r3, [r1], #2 - strh r3, [r0], #2 - b .Ldst_aligned -#else - ldrb r3, [r1], #1 - bf42: f811 3b01 ldrb.w r3, [r1], #1 - strb r3, [r0], #1 - bf46: f800 3b01 strb.w r3, [r0], #1 - ldrb r3, [r1], #1 - bf4a: f811 3b01 ldrb.w r3, [r1], #1 - strb r3, [r0], #1 - bf4e: f800 3b01 strb.w r3, [r0], #1 - /* Now that dst is aligned */ -.Ldst_aligned: - /* if r1 is aligned now, it means r0/r1 has the same misalignment, - and they are both aligned now. Go aligned copy. */ - ands r3, r1, #3 - bf52: f011 0303 ands.w r3, r1, #3 - beq .Lbig_block - bf56: f43f af75 beq.w be44 - - /* dst is aligned, but src isn't. Misaligned copy. */ - - push {r4, r5} - bf5a: b430 push {r4, r5} - subs r2, #4 - bf5c: 3a04 subs r2, #4 - - /* Backward r1 by misaligned bytes, to make r1 aligned. - Since we need to restore r1 to unaligned address after the loop, - we need keep the offset bytes to ip and sub it from r1 afterward. */ - subs r1, r3 - bf5e: 1ac9 subs r1, r1, r3 - rsb ip, r3, #4 - bf60: f1c3 0c04 rsb ip, r3, #4 - - /* Pre-load on word */ - ldr r4, [r1], #4 - bf64: f851 4b04 ldr.w r4, [r1], #4 - - cmp r3, #2 - bf68: 2b02 cmp r3, #2 - beq .Lmisaligned_copy_2_2 - bf6a: d019 beq.n bfa0 - cmp r3, #3 - bf6c: 2b03 cmp r3, #3 - beq .Lmisaligned_copy_3_1 - bf6e: d00b beq.n bf88 - subs r2, #4 - bhs 1b - .endm - -.Lmisaligned_copy_1_3: - mis_src_copy shift=8 - bf70: 0a24 lsrs r4, r4, #8 - bf72: f851 3b04 ldr.w r3, [r1], #4 - bf76: 061d lsls r5, r3, #24 - bf78: ea44 0405 orr.w r4, r4, r5 - bf7c: f840 4b04 str.w r4, [r0], #4 - bf80: 461c mov r4, r3 - bf82: 3a04 subs r2, #4 - bf84: d2f4 bcs.n bf70 - b .Lsrc_misaligned_tail - bf86: e016 b.n bfb6 - -.Lmisaligned_copy_3_1: - mis_src_copy shift=24 - bf88: 0e24 lsrs r4, r4, #24 - bf8a: f851 3b04 ldr.w r3, [r1], #4 - bf8e: 021d lsls r5, r3, #8 - bf90: ea44 0405 orr.w r4, r4, r5 - bf94: f840 4b04 str.w r4, [r0], #4 - bf98: 461c mov r4, r3 - bf9a: 3a04 subs r2, #4 - bf9c: d2f4 bcs.n bf88 - b .Lsrc_misaligned_tail - bf9e: e00a b.n bfb6 - -.Lmisaligned_copy_2_2: - /* For 2_2 misalignment, ldr is still faster than 2 x ldrh. */ - mis_src_copy shift=16 - bfa0: 0c24 lsrs r4, r4, #16 - bfa2: f851 3b04 ldr.w r3, [r1], #4 - bfa6: 041d lsls r5, r3, #16 - bfa8: ea44 0405 orr.w r4, r4, r5 - bfac: f840 4b04 str.w r4, [r0], #4 - bfb0: 461c mov r4, r3 - bfb2: 3a04 subs r2, #4 - bfb4: d2f4 bcs.n bfa0 - -.Lsrc_misaligned_tail: - adds r2, #4 - bfb6: 3204 adds r2, #4 - subs r1, ip - bfb8: ebb1 010c subs.w r1, r1, ip - pop {r4, r5} - bfbc: bc30 pop {r4, r5} - -#endif /* __ARM_FEATURE_UNALIGNED */ - -.Lbyte_copy: - subs r2, #4 - bfbe: 3a04 subs r2, #4 - blo .Lcopy_less_than_4 - bfc0: d3a0 bcc.n bf04 - -.Lbyte_copy_loop: - subs r2, #1 - bfc2: 3a01 subs r2, #1 - ldrb r3, [r1], #1 - bfc4: f811 3b01 ldrb.w r3, [r1], #1 - strb r3, [r0], #1 - bfc8: f800 3b01 strb.w r3, [r0], #1 - bhs .Lbyte_copy_loop - bfcc: d2f9 bcs.n bfc2 - - ldrb r3, [r1] - bfce: 780b ldrb r3, [r1, #0] - strb r3, [r0] - bfd0: 7003 strb r3, [r0, #0] - ldrb r3, [r1, #1] - bfd2: 784b ldrb r3, [r1, #1] - strb r3, [r0, #1] - bfd4: 7043 strb r3, [r0, #1] - ldrb r3, [r1, #2] - bfd6: 788b ldrb r3, [r1, #2] - strb r3, [r0, #2] - bfd8: 7083 strb r3, [r0, #2] - -#ifdef __ARM_FEATURE_UNALIGNED - mov r0, ip -#else - pop {r0} - bfda: bc01 pop {r0} -#endif - bx lr - bfdc: 4770 bx lr - bfde: bf00 nop - -0000bfe0 : -{ - bfe0: b508 push {r3, lr} - if (SIM_SCGC4 & SIM_SCGC4_USBOTG) usb_isr(); - bfe2: 4c0f ldr r4, [pc, #60] ; (c020 ) - bfe4: 6b63 ldr r3, [r4, #52] ; 0x34 - bfe6: 0358 lsls r0, r3, #13 - bfe8: d40d bmi.n c006 - if (SIM_SCGC4 & SIM_SCGC4_UART0) uart0_status_isr(); - bfea: 6b63 ldr r3, [r4, #52] ; 0x34 - bfec: 0559 lsls r1, r3, #21 - bfee: d40f bmi.n c010 - if (SIM_SCGC4 & SIM_SCGC4_UART1) uart1_status_isr(); - bff0: 6b63 ldr r3, [r4, #52] ; 0x34 - bff2: 051a lsls r2, r3, #20 - bff4: d411 bmi.n c01a - if (SIM_SCGC4 & SIM_SCGC4_UART2) uart2_status_isr(); - bff6: 6b63 ldr r3, [r4, #52] ; 0x34 - bff8: 04db lsls r3, r3, #19 - bffa: d5f3 bpl.n bfe4 - bffc: f001 ffaa bl df54 - if (SIM_SCGC4 & SIM_SCGC4_USBOTG) usb_isr(); - c000: 6b63 ldr r3, [r4, #52] ; 0x34 - c002: 0358 lsls r0, r3, #13 - c004: d5f1 bpl.n bfea - c006: f002 f927 bl e258 - if (SIM_SCGC4 & SIM_SCGC4_UART0) uart0_status_isr(); - c00a: 6b63 ldr r3, [r4, #52] ; 0x34 - c00c: 0559 lsls r1, r3, #21 - c00e: d5ef bpl.n bff0 - c010: f000 ff44 bl ce9c - if (SIM_SCGC4 & SIM_SCGC4_UART1) uart1_status_isr(); - c014: 6b63 ldr r3, [r4, #52] ; 0x34 - c016: 051a lsls r2, r3, #20 - c018: d5ed bpl.n bff6 - c01a: f001 fbf7 bl d80c - c01e: e7ea b.n bff6 - c020: 40048000 .word 0x40048000 - -0000c024 : -{ - c024: b508 push {r3, lr} - fault_isr(); - c026: f7ff ffdb bl bfe0 - c02a: bf00 nop - -0000c02c : - WDOG_STCTRLH = WDOG_STCTRLH_ALLOWUPDATE; - c02c: 4b01 ldr r3, [pc, #4] ; (c034 ) - c02e: 2210 movs r2, #16 - c030: 801a strh r2, [r3, #0] -} - c032: 4770 bx lr - c034: 40052000 .word 0x40052000 - -0000c038 : -static void startup_default_late_hook(void) {} - c038: 4770 bx lr - c03a: bf00 nop - -0000c03c <_sbrk>: -__attribute__((weak)) -void * _sbrk(int incr) -{ - char *prev, *stack; - - prev = __brkval; - c03c: 4a09 ldr r2, [pc, #36] ; (c064 <_sbrk+0x28>) -{ - c03e: b508 push {r3, lr} - c040: 4603 mov r3, r0 - prev = __brkval; - c042: 6810 ldr r0, [r2, #0] - if (incr != 0) { - c044: b133 cbz r3, c054 <_sbrk+0x18> - __asm__ volatile("mov %0, sp" : "=r" (stack) ::); - c046: 4669 mov r1, sp - if (prev + incr >= stack - STACK_MARGIN) { - c048: 4403 add r3, r0 - c04a: f5a1 5180 sub.w r1, r1, #4096 ; 0x1000 - c04e: 428b cmp r3, r1 - c050: d201 bcs.n c056 <_sbrk+0x1a> - errno = ENOMEM; - return (void *)-1; - } - __brkval = prev + incr; - c052: 6013 str r3, [r2, #0] - } - return prev; -} - c054: bd08 pop {r3, pc} - errno = ENOMEM; - c056: f005 fc9f bl 11998 <__errno> - c05a: 230c movs r3, #12 - c05c: 6003 str r3, [r0, #0] - return (void *)-1; - c05e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - c062: bd08 pop {r3, pc} - c064: 1fff8800 .word 0x1fff8800 - -0000c068 <_read>: - -__attribute__((weak)) -int _read(int file, char *ptr, int len) -{ - return 0; -} - c068: 2000 movs r0, #0 - c06a: 4770 bx lr - -0000c06c <_close>: - -__attribute__((weak)) -int _close(int fd) -{ - return -1; -} - c06c: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - c070: 4770 bx lr - c072: bf00 nop - -0000c074 <_fstat>: -#include - -__attribute__((weak)) -int _fstat(int fd, struct stat *st) -{ - st->st_mode = S_IFCHR; - c074: f44f 5300 mov.w r3, #8192 ; 0x2000 - c078: 604b str r3, [r1, #4] - return 0; -} - c07a: 2000 movs r0, #0 - c07c: 4770 bx lr - c07e: bf00 nop - -0000c080 <_isatty>: - -__attribute__((weak)) -int _isatty(int fd) -{ - return 1; -} - c080: 2001 movs r0, #1 - c082: 4770 bx lr - -0000c084 <_lseek>: - -__attribute__((weak)) -int _lseek(int fd, long long offset, int whence) -{ - return -1; -} - c084: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - c088: 4770 bx lr - c08a: bf00 nop - -0000c08c <__cxa_pure_virtual>: -} - -__attribute__((weak)) -void __cxa_pure_virtual() -{ - while (1); - c08c: e7fe b.n c08c <__cxa_pure_virtual> - c08e: bf00 nop - -0000c090 : -} - -__attribute__((weak)) -void abort(void) -{ - while (1) ; - c090: e7fe b.n c090 - c092: Address 0x000000000000c092 is out of bounds. - - -0000c094 : - uint32_t priority=256; - uint32_t primask, faultmask, basepri, ipsr; - - // full algorithm in ARM DDI0403D, page B1-639 - // this isn't quite complete, but hopefully good enough - __asm__ volatile("mrs %0, faultmask\n" : "=r" (faultmask)::); - c094: f3ef 8313 mrs r3, FAULTMASK - if (faultmask) return -1; - c098: b9cb cbnz r3, c0ce - __asm__ volatile("mrs %0, primask\n" : "=r" (primask)::); - c09a: f3ef 8010 mrs r0, PRIMASK - if (primask) return 0; - c09e: b9a0 cbnz r0, c0ca - __asm__ volatile("mrs %0, ipsr\n" : "=r" (ipsr)::); - c0a0: f3ef 8305 mrs r3, IPSR - if (ipsr) { - c0a4: b943 cbnz r3, c0b8 - uint32_t priority=256; - c0a6: f44f 7080 mov.w r0, #256 ; 0x100 - if (ipsr < 16) priority = 0; // could be non-zero - else priority = NVIC_GET_PRIORITY(ipsr - 16); - } - __asm__ volatile("mrs %0, basepri\n" : "=r" (basepri)::); - c0aa: f3ef 8311 mrs r3, BASEPRI - if (basepri > 0 && basepri < priority) priority = basepri; - c0ae: b15b cbz r3, c0c8 - c0b0: 4298 cmp r0, r3 - c0b2: bf28 it cs - c0b4: 4618 movcs r0, r3 - return priority; - c0b6: 4770 bx lr - if (ipsr < 16) priority = 0; // could be non-zero - c0b8: 2b0f cmp r3, #15 - c0ba: d9f6 bls.n c0aa - else priority = NVIC_GET_PRIORITY(ipsr - 16); - c0bc: 4a05 ldr r2, [pc, #20] ; (c0d4 ) - c0be: 5cd0 ldrb r0, [r2, r3] - __asm__ volatile("mrs %0, basepri\n" : "=r" (basepri)::); - c0c0: f3ef 8311 mrs r3, BASEPRI - if (basepri > 0 && basepri < priority) priority = basepri; - c0c4: 2b00 cmp r3, #0 - c0c6: d1f3 bne.n c0b0 -} - c0c8: 4770 bx lr - if (primask) return 0; - c0ca: 4618 mov r0, r3 -} - c0cc: 4770 bx lr - if (faultmask) return -1; - c0ce: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - c0d2: 4770 bx lr - c0d4: e000e3f0 .word 0xe000e3f0 - -0000c0d8 : - -#include "new.h" - -void * operator new(size_t size) -{ - return malloc(size); - c0d8: f003 bfea b.w 100b0 - -0000c0dc : - free(ptr); -} - -void operator delete(void * ptr, size_t size __attribute__((unused))) -{ - free(ptr); - c0dc: f003 bff0 b.w 100c0 - -0000c0e0 : - - -char * ultoa(unsigned long val, char *buf, int radix) -{ - unsigned digit; - int i=0, j; - c0e0: f101 3cff add.w ip, r1, #4294967295 ; 0xffffffff -{ - c0e4: b570 push {r4, r5, r6, lr} - char t; - - while (1) { - digit = val % radix; - c0e6: 4665 mov r5, ip - int i=0, j; - c0e8: 2400 movs r4, #0 - c0ea: e001 b.n c0f0 - buf[i] = ((digit < 10) ? '0' + digit : 'A' + digit - 10); - val /= radix; - c0ec: 4670 mov r0, lr - if (val == 0) break; - i++; - c0ee: 3401 adds r4, #1 - digit = val % radix; - c0f0: fbb0 fef2 udiv lr, r0, r2 - c0f4: fb02 031e mls r3, r2, lr, r0 - buf[i] = ((digit < 10) ? '0' + digit : 'A' + digit - 10); - c0f8: 2b09 cmp r3, #9 - c0fa: f103 0630 add.w r6, r3, #48 ; 0x30 - c0fe: bf8a itet hi - c100: 3337 addhi r3, #55 ; 0x37 - c102: b2f3 uxtbls r3, r6 - c104: b2db uxtbhi r3, r3 - if (val == 0) break; - c106: 4290 cmp r0, r2 - buf[i] = ((digit < 10) ? '0' + digit : 'A' + digit - 10); - c108: f805 3f01 strb.w r3, [r5, #1]! - if (val == 0) break; - c10c: d2ee bcs.n c0ec - } - buf[i + 1] = 0; - c10e: 1c63 adds r3, r4, #1 - c110: 2200 movs r2, #0 - c112: 54ca strb r2, [r1, r3] - c114: 18c8 adds r0, r1, r3 - for (j=0; j < i; j++, i--) { - c116: b17c cbz r4, c138 - t = buf[j]; - c118: 4662 mov r2, ip - c11a: f81c 5f01 ldrb.w r5, [ip, #1]! - buf[j] = buf[i]; - c11e: f810 ed01 ldrb.w lr, [r0, #-1]! - c122: f88c e000 strb.w lr, [ip] - for (j=0; j < i; j++, i--) { - c126: eba1 030c sub.w r3, r1, ip - c12a: 3202 adds r2, #2 - c12c: 3b01 subs r3, #1 - c12e: 1a52 subs r2, r2, r1 - c130: 4423 add r3, r4 - c132: 429a cmp r2, r3 - buf[i] = t; - c134: 7005 strb r5, [r0, #0] - for (j=0; j < i; j++, i--) { - c136: dbef blt.n c118 - } - return buf; -} - c138: 4608 mov r0, r1 - c13a: bd70 pop {r4, r5, r6, pc} - -0000c13c : - -char * ltoa(long val, char *buf, int radix) -{ - if (val >= 0) { - c13c: 1e03 subs r3, r0, #0 - c13e: db01 blt.n c144 - return ultoa(val, buf, radix); - c140: f7ff bfce b.w c0e0 -{ - c144: b510 push {r4, lr} - } else { - buf[0] = '-'; - c146: 202d movs r0, #45 ; 0x2d - c148: 460c mov r4, r1 - c14a: f801 0b01 strb.w r0, [r1], #1 - ultoa(-val, buf + 1, radix); - c14e: 4258 negs r0, r3 - c150: f7ff ffc6 bl c0e0 - return buf; - } -} - c154: 4620 mov r0, r4 - c156: bd10 pop {r4, pc} - -0000c158 : -char * fcvtf(float, int, int *, int *); -int isnanf (float x); -int isinff (float x); - -char * dtostrf(float val, int width, unsigned int precision, char *buf) -{ - c158: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - c15c: 4689 mov r9, r1 - c15e: b085 sub sp, #20 - int decpt, sign, reqd, pad; - const char *s, *e; - char *p; - - int awidth = abs(width); - if (isnanf(val)) { - c160: 4601 mov r1, r0 -{ - c162: 4604 mov r4, r0 - c164: 4690 mov r8, r2 - c166: 461f mov r7, r3 - if (isnanf(val)) { - c168: f003 ff40 bl ffec <__aeabi_fcmpun> - int awidth = abs(width); - c16c: ea89 76e9 eor.w r6, r9, r9, asr #31 - c170: eba6 76e9 sub.w r6, r6, r9, asr #31 - if (isnanf(val)) { - c174: 2800 cmp r0, #0 - c176: f040 8145 bne.w c404 - awidth--; - } - *buf = 0; - return buf; - } - if (isinff(val)) { - c17a: f024 4500 bic.w r5, r4, #2147483648 ; 0x80000000 - c17e: 49b6 ldr r1, [pc, #728] ; (c458 ) - c180: 4628 mov r0, r5 - c182: f003 ff33 bl ffec <__aeabi_fcmpun> - c186: bb78 cbnz r0, c1e8 - c188: 49b3 ldr r1, [pc, #716] ; (c458 ) - c18a: 4628 mov r0, r5 - c18c: f003 ff10 bl ffb0 <__aeabi_fcmple> - c190: bb50 cbnz r0, c1e8 - int ndigs = (val<0) ? 4 : 3; - c192: 2100 movs r1, #0 - c194: 4620 mov r0, r4 - c196: f003 ff01 bl ff9c <__aeabi_fcmplt> - c19a: 2800 cmp r0, #0 - c19c: f040 80ec bne.w c378 - awidth = (awidth > ndigs) ? awidth - ndigs : 0; - c1a0: 2e03 cmp r6, #3 - c1a2: dd6f ble.n c284 - c1a4: 2503 movs r5, #3 - if (width<0) { - c1a6: f1b9 0f00 cmp.w r9, #0 - awidth = (awidth > ndigs) ? awidth - ndigs : 0; - c1aa: eba6 0505 sub.w r5, r6, r5 - if (width<0) { - c1ae: db62 blt.n c276 - while (awidth) { - *buf++ = ' '; - awidth--; - } - } - if (val<0) *buf++ = '-'; - c1b0: 2100 movs r1, #0 - c1b2: 4620 mov r0, r4 - c1b4: f003 fef2 bl ff9c <__aeabi_fcmplt> - c1b8: 2800 cmp r0, #0 - c1ba: f040 8178 bne.w c4ae - if (DTOA_UPPER) { - *buf++ = 'I'; *buf++ = 'N'; *buf++ = 'F'; - c1be: 234e movs r3, #78 ; 0x4e - c1c0: 2149 movs r1, #73 ; 0x49 - c1c2: 2246 movs r2, #70 ; 0x46 - c1c4: 707b strb r3, [r7, #1] - c1c6: 7039 strb r1, [r7, #0] - c1c8: 1cfb adds r3, r7, #3 - c1ca: 70ba strb r2, [r7, #2] - } else { - *buf++ = 'i'; *buf++ = 'n'; *buf++ = 'f'; - } - while (awidth) { - c1cc: b135 cbz r5, c1dc - *buf++ = ' '; - c1ce: 4618 mov r0, r3 - c1d0: 462a mov r2, r5 - c1d2: 2120 movs r1, #32 - c1d4: f004 ffce bl 11174 - c1d8: 4603 mov r3, r0 - c1da: 442b add r3, r5 - awidth--; - } - *buf = 0; - c1dc: 2200 movs r2, #0 - - //char format[20]; - //sprintf(format, "%%%d.%df", width, precision); - //sprintf(buf, format, val); - return buf; -} - c1de: 4618 mov r0, r3 - *buf = 0; - c1e0: 701a strb r2, [r3, #0] -} - c1e2: b005 add sp, #20 - c1e4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - s = fcvtf(val, precision, &decpt, &sign); - c1e8: ab02 add r3, sp, #8 - c1ea: aa01 add r2, sp, #4 - c1ec: 4641 mov r1, r8 - c1ee: 4620 mov r0, r4 - c1f0: f005 fb9a bl 11928 - if (precision == 0 && decpt == 0) { - c1f4: f8dd b004 ldr.w fp, [sp, #4] - c1f8: ea58 030b orrs.w r3, r8, fp - s = fcvtf(val, precision, &decpt, &sign); - c1fc: 4646 mov r6, r8 - c1fe: 4605 mov r5, r0 - if (precision == 0 && decpt == 0) { - c200: d151 bne.n c2a6 - decpt++; - c202: 2301 movs r3, #1 - s = (*s < '5') ? "0" : "1"; - c204: 7802 ldrb r2, [r0, #0] - c206: 4d95 ldr r5, [pc, #596] ; (c45c ) - decpt++; - c208: 9301 str r3, [sp, #4] - c20a: 469b mov fp, r3 - s = (*s < '5') ? "0" : "1"; - c20c: 4b94 ldr r3, [pc, #592] ; (c460 ) - decpt++; - c20e: 46da mov sl, fp - s = (*s < '5') ? "0" : "1"; - c210: 2a34 cmp r2, #52 ; 0x34 - c212: bf88 it hi - c214: 461d movhi r5, r3 - if (sign) reqd++; - c216: 9b02 ldr r3, [sp, #8] - c218: 2b00 cmp r3, #0 - c21a: d05d beq.n c2d8 - c21c: f10a 0a01 add.w sl, sl, #1 - pad = width - reqd; - c220: eba9 040a sub.w r4, r9, sl - if (pad > 0) { - c224: 2c00 cmp r4, #0 - e = p + reqd; - c226: eb07 060a add.w r6, r7, sl - if (pad > 0) { - c22a: f340 80a1 ble.w c370 - while (pad-- > 0) *p++ = ' '; - c22e: 4622 mov r2, r4 - c230: 2120 movs r1, #32 - c232: 4638 mov r0, r7 - c234: f004 ff9e bl 11174 - e += pad; - c238: 4426 add r6, r4 - while (pad-- > 0) *p++ = ' '; - c23a: eb07 0c04 add.w ip, r7, r4 - if (sign) *p++ = '-'; - c23e: 232d movs r3, #45 ; 0x2d - if (decpt == 0 && precision > 0) { - c240: f1bb 0f00 cmp.w fp, #0 - if (sign) *p++ = '-'; - c244: f80c 3b01 strb.w r3, [ip], #1 - if (decpt == 0 && precision > 0) { - c248: d057 beq.n c2fa - else if (decpt < 0 && precision > 0) { - c24a: da61 bge.n c310 - c24c: f1b8 0f00 cmp.w r8, #0 - c250: d05e beq.n c310 - *p++ = '0'; - c252: 4663 mov r3, ip - c254: 2130 movs r1, #48 ; 0x30 - c256: f803 1b02 strb.w r1, [r3], #2 - *p++ = '0'; - c25a: f1cb 0b00 rsb fp, fp, #0 - *p++ = '.'; - c25e: 222e movs r2, #46 ; 0x2e - c260: f88c 2001 strb.w r2, [ip, #1] - *p++ = '0'; - c264: 4618 mov r0, r3 - c266: 465a mov r2, fp - c268: f004 ff84 bl 11174 - c26c: 2300 movs r3, #0 - c26e: eb00 0c0b add.w ip, r0, fp - c272: 9301 str r3, [sp, #4] - c274: e04c b.n c310 - while (awidth) { - c276: b12d cbz r5, c284 - *buf++ = ' '; - c278: 4638 mov r0, r7 - c27a: 462a mov r2, r5 - c27c: 2120 movs r1, #32 - c27e: f004 ff79 bl 11174 - c282: 442f add r7, r5 - if (val<0) *buf++ = '-'; - c284: 2100 movs r1, #0 - c286: 4620 mov r0, r4 - c288: f003 fe88 bl ff9c <__aeabi_fcmplt> - c28c: 2800 cmp r0, #0 - c28e: f000 80db beq.w c448 - *buf++ = 'I'; *buf++ = 'N'; *buf++ = 'F'; - c292: 234e movs r3, #78 ; 0x4e - if (val<0) *buf++ = '-'; - c294: 202d movs r0, #45 ; 0x2d - *buf++ = 'I'; *buf++ = 'N'; *buf++ = 'F'; - c296: 2149 movs r1, #73 ; 0x49 - c298: 2246 movs r2, #70 ; 0x46 - c29a: 70bb strb r3, [r7, #2] - if (val<0) *buf++ = '-'; - c29c: 7038 strb r0, [r7, #0] - *buf++ = 'I'; *buf++ = 'N'; *buf++ = 'F'; - c29e: 7079 strb r1, [r7, #1] - c2a0: 1d3b adds r3, r7, #4 - c2a2: 70fa strb r2, [r7, #3] - while (awidth) { - c2a4: e79a b.n c1dc - if (-decpt > (int)precision) { - c2a6: f1cb 0300 rsb r3, fp, #0 - c2aa: 4598 cmp r8, r3 - c2ac: f280 80a6 bge.w c3fc - decpt = -precision; - c2b0: f1c8 0b00 rsb fp, r8, #0 - c2b4: f04f 0a01 mov.w sl, #1 - s = "0"; - c2b8: 4d68 ldr r5, [pc, #416] ; (c45c ) - decpt = -precision; - c2ba: f8cd b004 str.w fp, [sp, #4] - c2be: 4650 mov r0, sl - if (reqd > decpt) reqd++; - c2c0: 45d3 cmp fp, sl - c2c2: bfb8 it lt - c2c4: f10a 0a01 addlt.w sl, sl, #1 - if (decpt == 0) reqd++; - c2c8: f1bb 0f00 cmp.w fp, #0 - c2cc: d168 bne.n c3a0 - if (sign) reqd++; - c2ce: 9b02 ldr r3, [sp, #8] - if (decpt == 0) reqd++; - c2d0: f10a 0a01 add.w sl, sl, #1 - if (sign) reqd++; - c2d4: 2b00 cmp r3, #0 - c2d6: d1a1 bne.n c21c - pad = width - reqd; - c2d8: eba9 040a sub.w r4, r9, sl - if (pad > 0) { - c2dc: 2c00 cmp r4, #0 - e = p + reqd; - c2de: eb07 060a add.w r6, r7, sl - if (pad > 0) { - c2e2: dd47 ble.n c374 - while (pad-- > 0) *p++ = ' '; - c2e4: 4622 mov r2, r4 - c2e6: 2120 movs r1, #32 - c2e8: 4638 mov r0, r7 - c2ea: f004 ff43 bl 11174 - e += pad; - c2ee: 4426 add r6, r4 - while (pad-- > 0) *p++ = ' '; - c2f0: eb07 0c04 add.w ip, r7, r4 - if (decpt == 0 && precision > 0) { - c2f4: f1bb 0f00 cmp.w fp, #0 - c2f8: d1a7 bne.n c24a - c2fa: f1b8 0f00 cmp.w r8, #0 - c2fe: d007 beq.n c310 - *p++ = '0'; - c300: 4663 mov r3, ip - c302: 2230 movs r2, #48 ; 0x30 - c304: f803 2b02 strb.w r2, [r3], #2 - *p++ = '.'; - c308: 222e movs r2, #46 ; 0x2e - c30a: f88c 2001 strb.w r2, [ip, #1] - c30e: 469c mov ip, r3 - while (p < e) { - c310: 45b4 cmp ip, r6 - c312: d222 bcs.n c35a - *p++ = *s++; - c314: 4663 mov r3, ip - c316: f815 2b01 ldrb.w r2, [r5], #1 - c31a: f803 2b01 strb.w r2, [r3], #1 - if (p == e) break; - c31e: 42b3 cmp r3, r6 - c320: d01c beq.n c35c - c322: 9a01 ldr r2, [sp, #4] - if (--decpt == 0) *p++ = '.'; - c324: 202e movs r0, #46 ; 0x2e - c326: 3a01 subs r2, #1 - c328: e00e b.n c348 - c32a: f88c 0001 strb.w r0, [ip, #1] - c32e: f10c 0c02 add.w ip, ip, #2 - while (p < e) { - c332: 45b4 cmp ip, r6 - *p++ = *s++; - c334: 4663 mov r3, ip - if (p == e) break; - c336: f102 32ff add.w r2, r2, #4294967295 ; 0xffffffff - while (p < e) { - c33a: d20e bcs.n c35a - *p++ = *s++; - c33c: f815 1b01 ldrb.w r1, [r5], #1 - c340: f803 1b01 strb.w r1, [r3], #1 - if (p == e) break; - c344: 42b3 cmp r3, r6 - c346: d009 beq.n c35c - if (--decpt == 0) *p++ = '.'; - c348: 9201 str r2, [sp, #4] - c34a: 2a00 cmp r2, #0 - c34c: d0ed beq.n c32a - c34e: 469c mov ip, r3 - while (p < e) { - c350: 45b4 cmp ip, r6 - *p++ = *s++; - c352: 4663 mov r3, ip - if (p == e) break; - c354: f102 32ff add.w r2, r2, #4294967295 ; 0xffffffff - while (p < e) { - c358: d3f0 bcc.n c33c - c35a: 4666 mov r6, ip - if (width < 0) { - c35c: f1b9 0f00 cmp.w r9, #0 - c360: db0e blt.n c380 - *p = 0; - c362: 2300 movs r3, #0 - c364: 7033 strb r3, [r6, #0] - return buf; - c366: 463b mov r3, r7 -} - c368: 4618 mov r0, r3 - c36a: b005 add sp, #20 - c36c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (pad > 0) { - c370: 46bc mov ip, r7 - c372: e764 b.n c23e - c374: 46bc mov ip, r7 - c376: e7bd b.n c2f4 - awidth = (awidth > ndigs) ? awidth - ndigs : 0; - c378: 2e04 cmp r6, #4 - c37a: dd8a ble.n c292 - c37c: 2504 movs r5, #4 - c37e: e712 b.n c1a6 - pad = (reqd + width) * -1; - c380: 44ca add sl, r9 - while (pad-- > 0) *p++ = ' '; - c382: f1ba 0f00 cmp.w sl, #0 - c386: ea6f 040a mvn.w r4, sl - c38a: daea bge.n c362 - c38c: ea24 74e4 bic.w r4, r4, r4, asr #31 - c390: 3401 adds r4, #1 - c392: 4630 mov r0, r6 - c394: 4622 mov r2, r4 - c396: 2120 movs r1, #32 - c398: f004 feec bl 11174 - c39c: 4426 add r6, r4 - c39e: e7e0 b.n c362 - if (decpt < 0 && precision > 0) { - c3a0: f6bf af39 bge.w c216 - c3a4: f1b8 0f00 cmp.w r8, #0 - c3a8: f43f af35 beq.w c216 - if (strlen(s) > precision + decpt) { - c3ac: eb0b 0308 add.w r3, fp, r8 - c3b0: 4298 cmp r0, r3 - reqd = precision + 2; - c3b2: f108 0a02 add.w sl, r8, #2 - if (strlen(s) > precision + decpt) { - c3b6: f67f af2e bls.w c216 - while (newPrecision > 0) { - c3ba: f1b8 0f00 cmp.w r8, #0 - c3be: dd07 ble.n c3d0 - val *= 10.0f; - c3c0: 4d28 ldr r5, [pc, #160] ; (c464 ) - c3c2: 4620 mov r0, r4 - c3c4: 4629 mov r1, r5 - c3c6: f003 fc4b bl fc60 <__aeabi_fmul> - while (newPrecision > 0) { - c3ca: 3e01 subs r6, #1 - val *= 10.0f; - c3cc: 4604 mov r4, r0 - while (newPrecision > 0) { - c3ce: d1f8 bne.n c3c2 - s = fcvtf(val, newPrecision, &newDecimalPoint, &sign); - c3d0: ab02 add r3, sp, #8 - c3d2: aa03 add r2, sp, #12 - c3d4: 4631 mov r1, r6 - c3d6: 4620 mov r0, r4 - c3d8: f005 faa6 bl 11928 - if (newDecimalPoint - decpt == precision + 1) decpt++; - c3dc: f8dd b004 ldr.w fp, [sp, #4] - c3e0: 9b03 ldr r3, [sp, #12] - c3e2: f108 0201 add.w r2, r8, #1 - c3e6: eba3 030b sub.w r3, r3, fp - c3ea: 4293 cmp r3, r2 - c3ec: bf08 it eq - c3ee: f10b 0b01 addeq.w fp, fp, #1 - s = fcvtf(val, newPrecision, &newDecimalPoint, &sign); - c3f2: 4605 mov r5, r0 - if (newDecimalPoint - decpt == precision + 1) decpt++; - c3f4: bf08 it eq - c3f6: f8cd b004 streq.w fp, [sp, #4] - c3fa: e70c b.n c216 - reqd = strlen(s); - c3fc: f005 fd40 bl 11e80 - c400: 4682 mov sl, r0 - c402: e75d b.n c2c0 - int ndigs = (val<0) ? 4 : 3; - c404: 2100 movs r1, #0 - c406: 4620 mov r0, r4 - c408: f003 fdc8 bl ff9c <__aeabi_fcmplt> - c40c: 2800 cmp r0, #0 - c40e: bf14 ite ne - c410: 2504 movne r5, #4 - c412: 2503 moveq r5, #3 - awidth = (awidth > ndigs) ? awidth - ndigs : 0; - c414: 42b5 cmp r5, r6 - c416: da2e bge.n c476 - if (width<0) { - c418: f1b9 0f00 cmp.w r9, #0 - awidth = (awidth > ndigs) ? awidth - ndigs : 0; - c41c: eba6 0505 sub.w r5, r6, r5 - if (width<0) { - c420: db22 blt.n c468 - if (copysignf(1.0f, val)<0) *buf++ = '-'; - c422: f04f 537e mov.w r3, #1065353216 ; 0x3f800000 - c426: 4620 mov r0, r4 - c428: f363 001e bfi r0, r3, #0, #31 - c42c: 2100 movs r1, #0 - c42e: f003 fdb5 bl ff9c <__aeabi_fcmplt> - c432: bbc0 cbnz r0, c4a6 - *buf++ = 'N'; *buf++ = 'A'; *buf++ = 'N'; - c434: 224e movs r2, #78 ; 0x4e - c436: 2341 movs r3, #65 ; 0x41 - c438: 707b strb r3, [r7, #1] - c43a: 703a strb r2, [r7, #0] - c43c: 1cfb adds r3, r7, #3 - c43e: 70ba strb r2, [r7, #2] - while (awidth) { - c440: 2d00 cmp r5, #0 - c442: f47f aec4 bne.w c1ce - c446: e6c9 b.n c1dc - *buf++ = 'I'; *buf++ = 'N'; *buf++ = 'F'; - c448: 234e movs r3, #78 ; 0x4e - c44a: 2149 movs r1, #73 ; 0x49 - c44c: 2246 movs r2, #70 ; 0x46 - c44e: 707b strb r3, [r7, #1] - c450: 7039 strb r1, [r7, #0] - c452: 1cfb adds r3, r7, #3 - c454: 70ba strb r2, [r7, #2] - while (awidth) { - c456: e6c1 b.n c1dc - c458: 7f7fffff .word 0x7f7fffff - c45c: 0001860c .word 0x0001860c - c460: 00018610 .word 0x00018610 - c464: 41200000 .word 0x41200000 - while (awidth) { - c468: b12d cbz r5, c476 - *buf++ = ' '; - c46a: 4638 mov r0, r7 - c46c: 462a mov r2, r5 - c46e: 2120 movs r1, #32 - c470: f004 fe80 bl 11174 - c474: 442f add r7, r5 - if (copysignf(1.0f, val)<0) *buf++ = '-'; - c476: f04f 537e mov.w r3, #1065353216 ; 0x3f800000 - c47a: 4620 mov r0, r4 - c47c: f363 001e bfi r0, r3, #0, #31 - c480: 2100 movs r1, #0 - c482: f003 fd8b bl ff9c <__aeabi_fcmplt> - *buf++ = 'N'; *buf++ = 'A'; *buf++ = 'N'; - c486: 224e movs r2, #78 ; 0x4e - if (copysignf(1.0f, val)<0) *buf++ = '-'; - c488: b138 cbz r0, c49a - *buf++ = 'N'; *buf++ = 'A'; *buf++ = 'N'; - c48a: 2341 movs r3, #65 ; 0x41 - if (copysignf(1.0f, val)<0) *buf++ = '-'; - c48c: 212d movs r1, #45 ; 0x2d - *buf++ = 'N'; *buf++ = 'A'; *buf++ = 'N'; - c48e: 70bb strb r3, [r7, #2] - if (copysignf(1.0f, val)<0) *buf++ = '-'; - c490: 7039 strb r1, [r7, #0] - *buf++ = 'N'; *buf++ = 'A'; *buf++ = 'N'; - c492: 707a strb r2, [r7, #1] - c494: 1d3b adds r3, r7, #4 - c496: 70fa strb r2, [r7, #3] - while (awidth) { - c498: e6a0 b.n c1dc - *buf++ = 'N'; *buf++ = 'A'; *buf++ = 'N'; - c49a: 2341 movs r3, #65 ; 0x41 - c49c: 707b strb r3, [r7, #1] - c49e: 703a strb r2, [r7, #0] - c4a0: 1cfb adds r3, r7, #3 - c4a2: 70ba strb r2, [r7, #2] - while (awidth) { - c4a4: e69a b.n c1dc - if (copysignf(1.0f, val)<0) *buf++ = '-'; - c4a6: 232d movs r3, #45 ; 0x2d - c4a8: f807 3b01 strb.w r3, [r7], #1 - c4ac: e7c2 b.n c434 - if (val<0) *buf++ = '-'; - c4ae: 232d movs r3, #45 ; 0x2d - c4b0: f807 3b01 strb.w r3, [r7], #1 - c4b4: e683 b.n c1be - c4b6: bf00 nop - -0000c4b8 : - -#if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) - -unsigned long rtc_get(void) -{ - return RTC_TSR; - c4b8: 4b01 ldr r3, [pc, #4] ; (c4c0 ) - c4ba: 6818 ldr r0, [r3, #0] -} - c4bc: 4770 bx lr - c4be: bf00 nop - c4c0: 4003d000 .word 0x4003d000 - -0000c4c4 : - -void rtc_set(unsigned long t) -{ - RTC_SR = 0; - c4c4: 4b03 ldr r3, [pc, #12] ; (c4d4 ) - c4c6: 2200 movs r2, #0 - RTC_TPR = 0; - RTC_TSR = t; - RTC_SR = RTC_SR_TCE; - c4c8: 2110 movs r1, #16 - RTC_SR = 0; - c4ca: 615a str r2, [r3, #20] - RTC_TPR = 0; - c4cc: 605a str r2, [r3, #4] - RTC_TSR = t; - c4ce: 6018 str r0, [r3, #0] - RTC_SR = RTC_SR_TCE; - c4d0: 6159 str r1, [r3, #20] -} - c4d2: 4770 bx lr - c4d4: 4003d000 .word 0x4003d000 - -0000c4d8 : -} -#endif - -extern void usb_init(void); - -static void startup_default_middle_hook(void) {} - c4d8: 4770 bx lr - c4da: bf00 nop - -0000c4dc <_init_Teensyduino_internal_>: -#endif - -//void init_pins(void) -__attribute__((noinline)) -void _init_Teensyduino_internal_(void) -{ - c4dc: b5f0 push {r4, r5, r6, r7, lr} -#if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) - NVIC_ENABLE_IRQ(IRQ_PORTA); - c4de: f04f 24e0 mov.w r4, #3758153728 ; 0xe000e000 - c4e2: f44f 0500 mov.w r5, #8388608 ; 0x800000 - NVIC_ENABLE_IRQ(IRQ_PORTB); - c4e6: f04f 7c80 mov.w ip, #16777216 ; 0x1000000 - NVIC_ENABLE_IRQ(IRQ_PORTA); - c4ea: f8c4 5108 str.w r5, [r4, #264] ; 0x108 - NVIC_ENABLE_IRQ(IRQ_PORTB); - c4ee: f8c4 c108 str.w ip, [r4, #264] ; 0x108 - NVIC_ENABLE_IRQ(IRQ_PORTC); - c4f2: f04f 7c00 mov.w ip, #33554432 ; 0x2000000 - c4f6: f8c4 c108 str.w ip, [r4, #264] ; 0x108 - NVIC_ENABLE_IRQ(IRQ_PORTA); - NVIC_ENABLE_IRQ(IRQ_PORTCD); -#endif - //SIM_SCGC6 |= SIM_SCGC6_FTM0; // TODO: use bitband for atomic read-mod-write - //SIM_SCGC6 |= SIM_SCGC6_FTM1; - FTM0_CNT = 0; - c4fa: 4a1d ldr r2, [pc, #116] ; (c570 <_init_Teensyduino_internal_+0x94>) - FTM3_C5SC = 0x28; - FTM3_C6SC = 0x28; - FTM3_C7SC = 0x28; -#endif - FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(DEFAULT_FTM_PRESCALE); - FTM1_CNT = 0; - c4fc: 481d ldr r0, [pc, #116] ; (c574 <_init_Teensyduino_internal_+0x98>) - FTM1_MOD = DEFAULT_FTM_MOD; - FTM1_C0SC = 0x28; - FTM1_C1SC = 0x28; - FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(DEFAULT_FTM_PRESCALE); -#if defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) || defined(__MKL26Z64__) - FTM2_CNT = 0; - c4fe: 491e ldr r1, [pc, #120] ; (c578 <_init_Teensyduino_internal_+0x9c>) - NVIC_ENABLE_IRQ(IRQ_PORTD); - c500: f04f 6c80 mov.w ip, #67108864 ; 0x4000000 - c504: f8c4 c108 str.w ip, [r4, #264] ; 0x108 - FTM0_C0SC = 0x28; // MSnB:MSnA = 10, ELSnB:ELSnA = 10 - c508: 2328 movs r3, #40 ; 0x28 - FTM0_CNT = 0; - c50a: 2700 movs r7, #0 - FTM0_MOD = DEFAULT_FTM_MOD; - c50c: f64b 76ff movw r6, #49151 ; 0xbfff - FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(DEFAULT_FTM_PRESCALE); - c510: 2509 movs r5, #9 - NVIC_ENABLE_IRQ(IRQ_PORTE); - c512: f04f 6c00 mov.w ip, #134217728 ; 0x8000000 - c516: f8c4 c108 str.w ip, [r4, #264] ; 0x108 -{ - c51a: b083 sub sp, #12 - FTM0_CNT = 0; - c51c: 6057 str r7, [r2, #4] - FTM0_MOD = DEFAULT_FTM_MOD; - c51e: 6096 str r6, [r2, #8] - FTM0_C0SC = 0x28; // MSnB:MSnA = 10, ELSnB:ELSnA = 10 - c520: 60d3 str r3, [r2, #12] - FTM0_C1SC = 0x28; - c522: 6153 str r3, [r2, #20] - FTM0_C2SC = 0x28; - c524: 61d3 str r3, [r2, #28] - FTM0_C3SC = 0x28; - c526: 6253 str r3, [r2, #36] ; 0x24 - FTM0_C4SC = 0x28; - c528: 62d3 str r3, [r2, #44] ; 0x2c - FTM0_C5SC = 0x28; - c52a: 6353 str r3, [r2, #52] ; 0x34 - FTM0_C6SC = 0x28; - c52c: 63d3 str r3, [r2, #60] ; 0x3c - FTM0_C7SC = 0x28; - c52e: 6453 str r3, [r2, #68] ; 0x44 - FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(DEFAULT_FTM_PRESCALE); - c530: 6015 str r5, [r2, #0] - FTM1_CNT = 0; - c532: 6047 str r7, [r0, #4] - FTM1_MOD = DEFAULT_FTM_MOD; - c534: 6086 str r6, [r0, #8] - FTM1_C0SC = 0x28; - c536: 60c3 str r3, [r0, #12] - FTM1_C1SC = 0x28; - c538: 6143 str r3, [r0, #20] - FTM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(DEFAULT_FTM_PRESCALE); - c53a: 6005 str r5, [r0, #0] - FTM2_CNT = 0; - c53c: 604f str r7, [r1, #4] - FTM2_MOD = DEFAULT_FTM_MOD; - c53e: 608e str r6, [r1, #8] - FTM2_C0SC = 0x28; - c540: 60cb str r3, [r1, #12] - FTM2_C1SC = 0x28; - c542: 614b str r3, [r1, #20] - FTM2_SC = FTM_SC_CLKS(1) | FTM_SC_PS(DEFAULT_FTM_PRESCALE); - c544: 600d str r5, [r1, #0] - TPM1_MOD = 32767; - TPM1_C0SC = 0x28; - TPM1_C1SC = 0x28; - TPM1_SC = FTM_SC_CLKS(1) | FTM_SC_PS(0); -#endif - analog_init(); - c546: f002 fcf5 bl ef34 - - // for background about this startup delay, please see these conversations - // https://forum.pjrc.com/threads/36606-startup-time-(400ms)?p=113980&viewfull=1#post113980 - // https://forum.pjrc.com/threads/31290-Teensey-3-2-Teensey-Loader-1-24-Issues?p=87273&viewfull=1#post87273 - - startup_middle_hook(); - c54a: f7ff ffc5 bl c4d8 - while (millis() < TEENSY_INIT_USB_DELAY_BEFORE) ; // wait - c54e: 4c0b ldr r4, [pc, #44] ; (c57c <_init_Teensyduino_internal_+0xa0>) - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - c550: 6823 ldr r3, [r4, #0] - c552: 9300 str r3, [sp, #0] - return ret; - c554: 9b00 ldr r3, [sp, #0] - c556: 2b13 cmp r3, #19 - c558: d9fa bls.n c550 <_init_Teensyduino_internal_+0x74> - usb_init(); - c55a: f002 fa37 bl e9cc - volatile uint32_t ret = systick_millis_count; // single aligned 32 bit is atomic - c55e: 6823 ldr r3, [r4, #0] - c560: 9301 str r3, [sp, #4] - return ret; - c562: 9b01 ldr r3, [sp, #4] - while (millis() < TEENSY_INIT_USB_DELAY_AFTER + TEENSY_INIT_USB_DELAY_BEFORE) ; // wait - c564: f5b3 7f96 cmp.w r3, #300 ; 0x12c - c568: d3f9 bcc.n c55e <_init_Teensyduino_internal_+0x82> -} - c56a: b003 add sp, #12 - c56c: bdf0 pop {r4, r5, r6, r7, pc} - c56e: bf00 nop - c570: 40038000 .word 0x40038000 - c574: 40039000 .word 0x40039000 - c578: 400b8000 .word 0x400b8000 - c57c: 1fff978c .word 0x1fff978c - -0000c580 : - -// TODO: startup code needs to initialize all pins to GPIO mode, input by default - -void digitalWrite(uint8_t pin, uint8_t val) -{ - if (pin >= CORE_NUM_DIGITAL) return; - c580: 2821 cmp r0, #33 ; 0x21 - c582: d816 bhi.n c5b2 -{ - c584: b410 push {r4} -#ifdef KINETISK - if (*portModeRegister(pin)) { - c586: 4b10 ldr r3, [pc, #64] ; (c5c8 ) - c588: f853 2030 ldr.w r2, [r3, r0, lsl #3] - c58c: f892 4280 ldrb.w r4, [r2, #640] ; 0x280 - c590: b12c cbz r4, c59e - if (val) { - *portSetRegister(pin) = 1; - c592: 2301 movs r3, #1 - if (val) { - c594: b971 cbnz r1, c5b4 - } else { - *portClearRegister(pin) = 1; - c596: f882 3100 strb.w r3, [r2, #256] ; 0x100 - *config &= ~(PORT_PCR_PE); - //*config = PORT_PCR_MUX(1); - } - } - -} - c59a: bc10 pop {r4} - c59c: 4770 bx lr - volatile uint32_t *config = portConfigRegister(pin); - c59e: eb03 03c0 add.w r3, r3, r0, lsl #3 - c5a2: 685b ldr r3, [r3, #4] - *config |= (PORT_PCR_PE | PORT_PCR_PS); - c5a4: 681a ldr r2, [r3, #0] - if (val) { - c5a6: b149 cbz r1, c5bc - *config |= (PORT_PCR_PE | PORT_PCR_PS); - c5a8: f042 0203 orr.w r2, r2, #3 -} - c5ac: bc10 pop {r4} - *config |= (PORT_PCR_PE | PORT_PCR_PS); - c5ae: 601a str r2, [r3, #0] -} - c5b0: 4770 bx lr - c5b2: 4770 bx lr - *portSetRegister(pin) = 1; - c5b4: f882 3080 strb.w r3, [r2, #128] ; 0x80 -} - c5b8: bc10 pop {r4} - c5ba: 4770 bx lr - *config &= ~(PORT_PCR_PE); - c5bc: f022 0202 bic.w r2, r2, #2 -} - c5c0: bc10 pop {r4} - *config &= ~(PORT_PCR_PE); - c5c2: 601a str r2, [r3, #0] -} - c5c4: 4770 bx lr - c5c6: bf00 nop - c5c8: 00018614 .word 0x00018614 - -0000c5cc : -#endif -} - -uint8_t digitalRead(uint8_t pin) -{ - if (pin >= CORE_NUM_DIGITAL) return 0; - c5cc: 2821 cmp r0, #33 ; 0x21 - c5ce: d806 bhi.n c5de -#ifdef KINETISK - return *portInputRegister(pin); - c5d0: 4b04 ldr r3, [pc, #16] ; (c5e4 ) - c5d2: f853 3030 ldr.w r3, [r3, r0, lsl #3] - c5d6: f893 0200 ldrb.w r0, [r3, #512] ; 0x200 - c5da: b2c0 uxtb r0, r0 - c5dc: 4770 bx lr - if (pin >= CORE_NUM_DIGITAL) return 0; - c5de: 2000 movs r0, #0 -#else - return (*portInputRegister(pin) & digitalPinToBitMask(pin)) ? 1 : 0; -#endif -} - c5e0: 4770 bx lr - c5e2: bf00 nop - c5e4: 00018614 .word 0x00018614 - -0000c5e8 : - -void pinMode(uint8_t pin, uint8_t mode) -{ - volatile uint32_t *config; - - if (pin >= CORE_NUM_DIGITAL) return; - c5e8: 2821 cmp r0, #33 ; 0x21 - c5ea: d820 bhi.n c62e - config = portConfigRegister(pin); - c5ec: 4a1b ldr r2, [pc, #108] ; (c65c ) - c5ee: eb02 03c0 add.w r3, r2, r0, lsl #3 - - if (mode == OUTPUT || mode == OUTPUT_OPENDRAIN) { - c5f2: 2901 cmp r1, #1 - config = portConfigRegister(pin); - c5f4: 685b ldr r3, [r3, #4] - if (mode == OUTPUT || mode == OUTPUT_OPENDRAIN) { - c5f6: d00f beq.n c618 - c5f8: 2904 cmp r1, #4 - c5fa: d01d beq.n c638 - } else { - *config &= ~PORT_PCR_ODE; - } - } else { -#ifdef KINETISK - *portModeRegister(pin) = 0; - c5fc: f852 0030 ldr.w r0, [r2, r0, lsl #3] - c600: 2200 movs r2, #0 - c602: f880 2280 strb.w r2, [r0, #640] ; 0x280 -#else - *portModeRegister(pin) &= ~digitalPinToBitMask(pin); -#endif - if (mode == INPUT) { - c606: b199 cbz r1, c630 - *config = PORT_PCR_MUX(1); - } else if (mode == INPUT_PULLUP) { - c608: 2902 cmp r1, #2 - c60a: d022 beq.n c652 - *config = PORT_PCR_MUX(1) | PORT_PCR_PE | PORT_PCR_PS; - } else if (mode == INPUT_PULLDOWN) { - c60c: 2903 cmp r1, #3 - c60e: d10d bne.n c62c - *config = PORT_PCR_MUX(1) | PORT_PCR_PE; - c610: f44f 7281 mov.w r2, #258 ; 0x102 - c614: 601a str r2, [r3, #0] - c616: 4770 bx lr - *portModeRegister(pin) = 1; - c618: f852 0030 ldr.w r0, [r2, r0, lsl #3] - *config = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - c61c: f44f 72a2 mov.w r2, #324 ; 0x144 - *portModeRegister(pin) = 1; - c620: f880 1280 strb.w r1, [r0, #640] ; 0x280 - *config = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - c624: 601a str r2, [r3, #0] - *config &= ~PORT_PCR_ODE; - c626: 681a ldr r2, [r3, #0] - c628: f022 0220 bic.w r2, r2, #32 - c62c: 601a str r2, [r3, #0] - } else { // INPUT_DISABLE - *config = 0; - } - } -} - c62e: 4770 bx lr - *config = PORT_PCR_MUX(1); - c630: f44f 7280 mov.w r2, #256 ; 0x100 - c634: 601a str r2, [r3, #0] - c636: 4770 bx lr - *portModeRegister(pin) = 1; - c638: f852 1030 ldr.w r1, [r2, r0, lsl #3] - *config = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - c63c: f44f 72a2 mov.w r2, #324 ; 0x144 - *portModeRegister(pin) = 1; - c640: 2001 movs r0, #1 - c642: f881 0280 strb.w r0, [r1, #640] ; 0x280 - *config = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - c646: 601a str r2, [r3, #0] - *config |= PORT_PCR_ODE; - c648: 681a ldr r2, [r3, #0] - c64a: f042 0220 orr.w r2, r2, #32 - c64e: 601a str r2, [r3, #0] - c650: 4770 bx lr - *config = PORT_PCR_MUX(1) | PORT_PCR_PE | PORT_PCR_PS; - c652: f240 1203 movw r2, #259 ; 0x103 - c656: 601a str r2, [r3, #0] - c658: 4770 bx lr - c65a: bf00 nop - c65c: 00018614 .word 0x00018614 - -0000c660 : -#endif - return count * 1000 + current / (F_CPU / 1000000); -} - -void delay(uint32_t ms) -{ - c660: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - c664: 4604 mov r4, r0 - __disable_irq(); - c666: b672 cpsid i - count = systick_millis_count; - c668: 4f20 ldr r7, [pc, #128] ; (c6ec ) - current = SYST_CVR; - c66a: f04f 22e0 mov.w r2, #3758153728 ; 0xe000e000 - c66e: 6993 ldr r3, [r2, #24] - count = systick_millis_count; - c670: 683d ldr r5, [r7, #0] - istatus = SCB_ICSR; // bit 26 indicates if systick exception pending - c672: f8d2 2d04 ldr.w r2, [r2, #3332] ; 0xd04 - __enable_irq(); - c676: b662 cpsie i - if ((istatus & SCB_ICSR_PENDSTSET) && current > 50) count++; - c678: 0152 lsls r2, r2, #5 - c67a: d502 bpl.n c682 - c67c: 2b32 cmp r3, #50 ; 0x32 - c67e: bf88 it hi - c680: 3501 addhi r5, #1 - uint32_t start = micros(); - - if (ms > 0) { - c682: b90c cbnz r4, c688 - start += 1000; - } - yield(); - } - } -} - c684: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - current = ((F_CPU / 1000) - 1) - current; - c688: f8df 9064 ldr.w r9, [pc, #100] ; c6f0 - return count * 1000 + current / (F_CPU / 1000000); - c68c: f8df 8064 ldr.w r8, [pc, #100] ; c6f4 - current = ((F_CPU / 1000) - 1) - current; - c690: eba9 0303 sub.w r3, r9, r3 - return count * 1000 + current / (F_CPU / 1000000); - c694: fba8 2303 umull r2, r3, r8, r3 - c698: f44f 727a mov.w r2, #1000 ; 0x3e8 - c69c: fb02 f505 mul.w r5, r2, r5 - c6a0: eb05 1593 add.w r5, r5, r3, lsr #6 - current = SYST_CVR; - c6a4: f04f 26e0 mov.w r6, #3758153728 ; 0xe000e000 - __disable_irq(); - c6a8: b672 cpsid i - current = SYST_CVR; - c6aa: 69b1 ldr r1, [r6, #24] - count = systick_millis_count; - c6ac: 683a ldr r2, [r7, #0] - istatus = SCB_ICSR; // bit 26 indicates if systick exception pending - c6ae: f8d6 cd04 ldr.w ip, [r6, #3332] ; 0xd04 - __enable_irq(); - c6b2: b662 cpsie i - current = ((F_CPU / 1000) - 1) - current; - c6b4: eba9 0301 sub.w r3, r9, r1 - return count * 1000 + current / (F_CPU / 1000000); - c6b8: fba8 0303 umull r0, r3, r8, r3 - if ((istatus & SCB_ICSR_PENDSTSET) && current > 50) count++; - c6bc: f01c 6f80 tst.w ip, #67108864 ; 0x4000000 - while ((micros() - start) >= 1000) { - c6c0: ebc5 1393 rsb r3, r5, r3, lsr #6 - return count * 1000 + current / (F_CPU / 1000000); - c6c4: f44f 707a mov.w r0, #1000 ; 0x3e8 - if ((istatus & SCB_ICSR_PENDSTSET) && current > 50) count++; - c6c8: d002 beq.n c6d0 - c6ca: 2932 cmp r1, #50 ; 0x32 - c6cc: bf88 it hi - c6ce: 3201 addhi r2, #1 - while ((micros() - start) >= 1000) { - c6d0: fb00 3302 mla r3, r0, r2, r3 - c6d4: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 - c6d8: d304 bcc.n c6e4 - if (ms == 0) return; - c6da: 3c01 subs r4, #1 - c6dc: d0d2 beq.n c684 - start += 1000; - c6de: f505 757a add.w r5, r5, #1000 ; 0x3e8 - c6e2: e7e1 b.n c6a8 - yield(); - c6e4: f002 fb86 bl edf4 - while ((micros() - start) >= 1000) { - c6e8: e7de b.n c6a8 - c6ea: bf00 nop - c6ec: 1fff978c .word 0x1fff978c - c6f0: 000176ff .word 0x000176ff - c6f4: aaaaaaab .word 0xaaaaaaab - -0000c6f8 : -#else - return 0; -#endif -} - -void serial_putchar(uint32_t c) - c6f8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -{ - uint32_t head, n; - - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return; - if (transmit_pin) transmit_assert(); - c6fc: 4b31 ldr r3, [pc, #196] ; (c7c4 ) - c6fe: 681b ldr r3, [r3, #0] -void serial_putchar(uint32_t c) - c700: 4607 mov r7, r0 - if (transmit_pin) transmit_assert(); - c702: b10b cbz r3, c708 - c704: 2201 movs r2, #1 - c706: 701a strb r2, [r3, #0] - reg |= UART_C3_TXDIR; - UART0_C3 = reg; - __enable_irq(); - } - #endif - head = tx_buffer_head; - c708: f8df 90bc ldr.w r9, [pc, #188] ; c7c8 - if (++head >= tx_buffer_total_size_) head = 0; - c70c: f8df 80bc ldr.w r8, [pc, #188] ; c7cc - head = tx_buffer_head; - c710: f899 4000 ldrb.w r4, [r9] - if (++head >= tx_buffer_total_size_) head = 0; - c714: f8d8 3000 ldr.w r3, [r8] - while (tx_buffer_tail == head) { - c718: 4d2d ldr r5, [pc, #180] ; (c7d0 ) - if (++head >= tx_buffer_total_size_) head = 0; - c71a: 3401 adds r4, #1 - c71c: 429c cmp r4, r3 - while (tx_buffer_tail == head) { - c71e: 782b ldrb r3, [r5, #0] - if (++head >= tx_buffer_total_size_) head = 0; - c720: d32a bcc.n c778 - while (tx_buffer_tail == head) { - c722: f003 0aff and.w sl, r3, #255 ; 0xff - c726: 2b00 cmp r3, #0 - c728: d13e bne.n c7a8 - if (++head >= tx_buffer_total_size_) head = 0; - c72a: 4654 mov r4, sl - int priority = nvic_execution_priority(); - if (priority <= IRQ_PRIORITY) { - if ((UART0_S1 & UART_S1_TDRE)) { - c72c: 4e29 ldr r6, [pc, #164] ; (c7d4 ) - uint32_t tail = tx_buffer_tail; - if (++tail >= tx_buffer_total_size_) tail = 0; - if (tail < SERIAL1_TX_BUFFER_SIZE) { - n = tx_buffer[tail]; - c72e: f8df b0a8 ldr.w fp, [pc, #168] ; c7d8 - c732: e005 b.n c740 - if ((UART0_S1 & UART_S1_TDRE)) { - c734: 7933 ldrb r3, [r6, #4] - c736: 061b lsls r3, r3, #24 - c738: d423 bmi.n c782 - while (tx_buffer_tail == head) { - c73a: 782b ldrb r3, [r5, #0] - c73c: 42a3 cmp r3, r4 - c73e: d10a bne.n c756 - int priority = nvic_execution_priority(); - c740: f7ff fca8 bl c094 - if (priority <= IRQ_PRIORITY) { - c744: 2840 cmp r0, #64 ; 0x40 - c746: ddf5 ble.n c734 - } - if (use9Bits) UART0_C3 = (UART0_C3 & ~0x40) | ((n & 0x100) >> 2); - UART0_D = n; - tx_buffer_tail = tail; - } - } else if (priority >= 256) { - c748: 28ff cmp r0, #255 ; 0xff - c74a: ddf6 ble.n c73a - yield(); - c74c: f002 fb52 bl edf4 - while (tx_buffer_tail == head) { - c750: 782b ldrb r3, [r5, #0] - c752: 42a3 cmp r3, r4 - c754: d0f4 beq.n c740 - } - } - if (head < SERIAL1_TX_BUFFER_SIZE) { - c756: 2c3f cmp r4, #63 ; 0x3f - c758: d929 bls.n c7ae - tx_buffer[head] = c; - } else { - tx_buffer_storage_[head - SERIAL1_TX_BUFFER_SIZE] = c; - c75a: 4b20 ldr r3, [pc, #128] ; (c7dc ) - c75c: 3c40 subs r4, #64 ; 0x40 - c75e: 681b ldr r3, [r3, #0] - c760: b2ff uxtb r7, r7 - c762: 551f strb r7, [r3, r4] - } - transmitting = 1; - c764: 4a1e ldr r2, [pc, #120] ; (c7e0 ) - tx_buffer_head = head; - UART0_C2 = C2_TX_ACTIVE; - c766: 4b1b ldr r3, [pc, #108] ; (c7d4 ) - transmitting = 1; - c768: 2101 movs r1, #1 - c76a: 7011 strb r1, [r2, #0] - UART0_C2 = C2_TX_ACTIVE; - c76c: 22bc movs r2, #188 ; 0xbc - tx_buffer_head = head; - c76e: f889 a000 strb.w sl, [r9] - UART0_C2 = C2_TX_ACTIVE; - c772: 70da strb r2, [r3, #3] -} - c774: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - while (tx_buffer_tail == head) { - c778: 429c cmp r4, r3 - tx_buffer_head = head; - c77a: fa5f fa84 uxtb.w sl, r4 - while (tx_buffer_tail == head) { - c77e: d0d5 beq.n c72c - c780: e7e9 b.n c756 - uint32_t tail = tx_buffer_tail; - c782: 782b ldrb r3, [r5, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - c784: f8d8 1000 ldr.w r1, [r8] - c788: 1c5a adds r2, r3, #1 - c78a: 428a cmp r2, r1 - uint32_t tail = tx_buffer_tail; - c78c: b2db uxtb r3, r3 - if (++tail >= tx_buffer_total_size_) tail = 0; - c78e: d203 bcs.n c798 - if (tail < SERIAL1_TX_BUFFER_SIZE) { - c790: 2a3f cmp r2, #63 ; 0x3f - c792: d810 bhi.n c7b6 - tx_buffer_tail = tail; - c794: b2d1 uxtb r1, r2 - c796: e001 b.n c79c - c798: 2100 movs r1, #0 - if (++tail >= tx_buffer_total_size_) tail = 0; - c79a: 460a mov r2, r1 - n = tx_buffer[tail]; - c79c: f81b 3002 ldrb.w r3, [fp, r2] - c7a0: b2db uxtb r3, r3 - UART0_D = n; - c7a2: 71f3 strb r3, [r6, #7] - tx_buffer_tail = tail; - c7a4: 7029 strb r1, [r5, #0] - c7a6: e7c8 b.n c73a - while (tx_buffer_tail == head) { - c7a8: f04f 0a00 mov.w sl, #0 - if (++head >= tx_buffer_total_size_) head = 0; - c7ac: 4654 mov r4, sl - tx_buffer[head] = c; - c7ae: 4b0a ldr r3, [pc, #40] ; (c7d8 ) - c7b0: b2ff uxtb r7, r7 - c7b2: 551f strb r7, [r3, r4] - c7b4: e7d6 b.n c764 - tx_buffer_tail = tail; - c7b6: b2d1 uxtb r1, r2 - n = tx_buffer_storage_[tail-SERIAL1_TX_BUFFER_SIZE]; - c7b8: 4a08 ldr r2, [pc, #32] ; (c7dc ) - c7ba: 3b3f subs r3, #63 ; 0x3f - c7bc: 6812 ldr r2, [r2, #0] - c7be: 5cd3 ldrb r3, [r2, r3] - c7c0: b2db uxtb r3, r3 - c7c2: e7ee b.n c7a2 - c7c4: 1fff97e0 .word 0x1fff97e0 - c7c8: 1fff9828 .word 0x1fff9828 - c7cc: 1fff8810 .word 0x1fff8810 - c7d0: 1fff9830 .word 0x1fff9830 - c7d4: 4006a000 .word 0x4006a000 - c7d8: 1fff97e8 .word 0x1fff97e8 - c7dc: 1fff982c .word 0x1fff982c - c7e0: 1fff97e4 .word 0x1fff97e4 - -0000c7e4 : - SIM_SCGC4 |= SIM_SCGC4_UART0; // turn on clock, TODO: use bitband - c7e4: 4a2a ldr r2, [pc, #168] ; (c890 ) - rx_buffer_tail = 0; - c7e6: 492b ldr r1, [pc, #172] ; (c894 ) - SIM_SCGC4 |= SIM_SCGC4_UART0; // turn on clock, TODO: use bitband - c7e8: 6b53 ldr r3, [r2, #52] ; 0x34 -{ - c7ea: b470 push {r4, r5, r6} - SIM_SCGC4 |= SIM_SCGC4_UART0; // turn on clock, TODO: use bitband - c7ec: f443 6380 orr.w r3, r3, #1024 ; 0x400 - rx_buffer_head = 0; - c7f0: 4d29 ldr r5, [pc, #164] ; (c898 ) - SIM_SCGC4 |= SIM_SCGC4_UART0; // turn on clock, TODO: use bitband - c7f2: 6353 str r3, [r2, #52] ; 0x34 - rx_buffer_head = 0; - c7f4: 2300 movs r3, #0 - c7f6: 702b strb r3, [r5, #0] - switch (rx_pin_num) { - c7f8: 4e28 ldr r6, [pc, #160] ; (c89c ) - rx_buffer_tail = 0; - c7fa: 700b strb r3, [r1, #0] - tx_buffer_head = 0; - c7fc: 4c28 ldr r4, [pc, #160] ; (c8a0 ) - tx_buffer_tail = 0; - c7fe: 4929 ldr r1, [pc, #164] ; (c8a4 ) - tx_buffer_head = 0; - c800: 7023 strb r3, [r4, #0] - switch (rx_pin_num) { - c802: 7832 ldrb r2, [r6, #0] - tx_buffer_tail = 0; - c804: 700b strb r3, [r1, #0] - transmitting = 0; - c806: 4928 ldr r1, [pc, #160] ; (c8a8 ) - c808: 700b strb r3, [r1, #0] - switch (rx_pin_num) { - c80a: b39a cbz r2, c874 - c80c: 2a15 cmp r2, #21 - c80e: d103 bne.n c818 - case 21: CORE_PIN21_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - c810: 4b26 ldr r3, [pc, #152] ; (c8ac ) - c812: f240 3213 movw r2, #787 ; 0x313 - c816: 619a str r2, [r3, #24] - switch (tx_pin_num) { - c818: 4b25 ldr r3, [pc, #148] ; (c8b0 ) - c81a: 781b ldrb r3, [r3, #0] - c81c: 2b01 cmp r3, #1 - c81e: d031 beq.n c884 - c820: 2b05 cmp r3, #5 - c822: d103 bne.n c82c - case 5: CORE_PIN5_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); break; - c824: 4b21 ldr r3, [pc, #132] ; (c8ac ) - c826: f44f 7251 mov.w r2, #836 ; 0x344 - c82a: 61da str r2, [r3, #28] - if (divisor < 32) divisor = 32; - c82c: 2820 cmp r0, #32 - UART0_BDH = (divisor >> 13) & 0x1F; - c82e: 4b21 ldr r3, [pc, #132] ; (c8b4 ) - NVIC_SET_PRIORITY(IRQ_UART0_STATUS, IRQ_PRIORITY); - c830: 4c21 ldr r4, [pc, #132] ; (c8b8 ) - c832: bf38 it cc - c834: 2020 movcc r0, #32 - UART0_BDH = (divisor >> 13) & 0x1F; - c836: f3c0 3c44 ubfx ip, r0, #13, #5 - c83a: f883 c000 strb.w ip, [r3] - UART0_BDL = (divisor >> 5) & 0xFF; - c83e: f3c0 1c47 ubfx ip, r0, #5, #8 - UART0_C4 = divisor & 0x1F; - c842: f000 001f and.w r0, r0, #31 - UART0_BDL = (divisor >> 5) & 0xFF; - c846: f883 c001 strb.w ip, [r3, #1] - UART0_C1 = UART_C1_ILT; - c84a: 2204 movs r2, #4 - UART0_C4 = divisor & 0x1F; - c84c: 7298 strb r0, [r3, #10] - UART0_TWFIFO = 2; // tx watermark, causes S1_TDRE to set - c84e: 2002 movs r0, #2 - UART0_C1 = UART_C1_ILT; - c850: 709a strb r2, [r3, #2] - UART0_TWFIFO = 2; // tx watermark, causes S1_TDRE to set - c852: 74d8 strb r0, [r3, #19] - UART0_PFIFO = UART_PFIFO_TXFE | UART_PFIFO_RXFE; - c854: 2088 movs r0, #136 ; 0x88 - UART0_RWFIFO = 4; // rx watermark, causes S1_RDRF to set - c856: 755a strb r2, [r3, #21] - NVIC_ENABLE_IRQ(IRQ_UART0_STATUS); - c858: f04f 21e0 mov.w r1, #3758153728 ; 0xe000e000 - UART0_PFIFO = UART_PFIFO_TXFE | UART_PFIFO_RXFE; - c85c: 7418 strb r0, [r3, #16] - NVIC_SET_PRIORITY(IRQ_UART0_STATUS, IRQ_PRIORITY); - c85e: 2240 movs r2, #64 ; 0x40 - UART0_C2 = C2_TX_INACTIVE; - c860: 203c movs r0, #60 ; 0x3c - c862: 70d8 strb r0, [r3, #3] - NVIC_SET_PRIORITY(IRQ_UART0_STATUS, IRQ_PRIORITY); - c864: f884 202d strb.w r2, [r4, #45] ; 0x2d - NVIC_ENABLE_IRQ(IRQ_UART0_STATUS); - c868: f44f 5300 mov.w r3, #8192 ; 0x2000 -} - c86c: bc70 pop {r4, r5, r6} - NVIC_ENABLE_IRQ(IRQ_UART0_STATUS); - c86e: f8c1 3104 str.w r3, [r1, #260] ; 0x104 -} - c872: 4770 bx lr - case 0: CORE_PIN0_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - c874: 4b11 ldr r3, [pc, #68] ; (c8bc ) - c876: f240 3213 movw r2, #787 ; 0x313 - c87a: 641a str r2, [r3, #64] ; 0x40 - switch (tx_pin_num) { - c87c: 4b0c ldr r3, [pc, #48] ; (c8b0 ) - c87e: 781b ldrb r3, [r3, #0] - c880: 2b01 cmp r3, #1 - c882: d1cd bne.n c820 - case 1: CORE_PIN1_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); break; - c884: 4b0d ldr r3, [pc, #52] ; (c8bc ) - c886: f44f 7251 mov.w r2, #836 ; 0x344 - c88a: 645a str r2, [r3, #68] ; 0x44 - c88c: e7ce b.n c82c - c88e: bf00 nop - c890: 40048000 .word 0x40048000 - c894: 1fff97dc .word 0x1fff97dc - c898: 1fff97d4 .word 0x1fff97d4 - c89c: 1fff97dd .word 0x1fff97dd - c8a0: 1fff9828 .word 0x1fff9828 - c8a4: 1fff9830 .word 0x1fff9830 - c8a8: 1fff97e4 .word 0x1fff97e4 - c8ac: 4004c000 .word 0x4004c000 - c8b0: 1fff8814 .word 0x1fff8814 - c8b4: 4006a000 .word 0x4006a000 - c8b8: e000e400 .word 0xe000e400 - c8bc: 4004a000 .word 0x4004a000 - -0000c8c0 : - c = UART0_C1; - c8c0: 4b29 ldr r3, [pc, #164] ; (c968 ) - UART0_C1 = c; - c8c2: 4929 ldr r1, [pc, #164] ; (c968 ) - c = UART0_C1; - c8c4: 789b ldrb r3, [r3, #2] - c = (c & ~0x13) | (format & 0x03); // configure parity - c8c6: f000 0203 and.w r2, r0, #3 - c8ca: f003 03ec and.w r3, r3, #236 ; 0xec - c8ce: 4313 orrs r3, r2 - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - c8d0: 0742 lsls r2, r0, #29 - if ((format & 0x0F) == 0x04) UART0_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - c8d2: f000 020f and.w r2, r0, #15 - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - c8d6: bf48 it mi - c8d8: f043 0310 orrmi.w r3, r3, #16 - if ((format & 0x0F) == 0x04) UART0_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - c8dc: 2a04 cmp r2, #4 - UART0_C1 = c; - c8de: 708b strb r3, [r1, #2] - if ((format & 0x0F) == 0x04) UART0_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - c8e0: d103 bne.n c8ea - c8e2: 798b ldrb r3, [r1, #6] - c8e4: f043 0340 orr.w r3, r3, #64 ; 0x40 - c8e8: 718b strb r3, [r1, #6] - c = UART0_S2 & ~0x10; - c8ea: 4b1f ldr r3, [pc, #124] ; (c968 ) - c8ec: 795a ldrb r2, [r3, #5] - if (format & 0x10) c |= 0x10; // rx invert - c8ee: 06c3 lsls r3, r0, #27 - c = UART0_S2 & ~0x10; - c8f0: f002 02ef and.w r2, r2, #239 ; 0xef - UART0_S2 = c; - c8f4: 4b1c ldr r3, [pc, #112] ; (c968 ) - if (format & 0x10) c |= 0x10; // rx invert - c8f6: bf48 it mi - c8f8: f042 0210 orrmi.w r2, r2, #16 - UART0_S2 = c; - c8fc: 715a strb r2, [r3, #5] - c = UART0_C3 & ~0x10; - c8fe: 799a ldrb r2, [r3, #6] - if (format & 0x20) c |= 0x10; // tx invert - c900: 0681 lsls r1, r0, #26 - c = UART0_C3 & ~0x10; - c902: f002 02ef and.w r2, r2, #239 ; 0xef - if (format & 0x20) c |= 0x10; // tx invert - c906: d511 bpl.n c92c - c908: f042 0210 orr.w r2, r2, #16 - if ((format & SERIAL_HALF_DUPLEX) != 0) { - c90c: 0581 lsls r1, r0, #22 - UART0_C3 = c; - c90e: 719a strb r2, [r3, #6] - if ((format & SERIAL_HALF_DUPLEX) != 0) { - c910: d50f bpl.n c932 - c = UART0_C1; - c912: 789a ldrb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - c914: 4915 ldr r1, [pc, #84] ; (c96c ) - c |= UART_C1_LOOPS | UART_C1_RSRC; - c916: f042 02a0 orr.w r2, r2, #160 ; 0xa0 - UART0_C1 = c; - c91a: 709a strb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - c91c: 7809 ldrb r1, [r1, #0] - c91e: 4b14 ldr r3, [pc, #80] ; (c970 ) - c920: eb03 03c1 add.w r3, r3, r1, lsl #3 - uint32_t pin_cfg = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3) | PORT_PCR_PE; - c924: f240 3246 movw r2, #838 ; 0x346 - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - c928: 685b ldr r3, [r3, #4] - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - c92a: e014 b.n c956 - UART0_C3 = c; - c92c: 719a strb r2, [r3, #6] - if ((format & SERIAL_HALF_DUPLEX) != 0) { - c92e: 0582 lsls r2, r0, #22 - c930: d405 bmi.n c93e - if (transmit_pin == (uint8_t*)GPIO_BITBAND_PTR(UART0_C3, C3_TXDIR_BIT)) transmit_pin = NULL; - c932: 4b10 ldr r3, [pc, #64] ; (c974 ) - c934: 4a10 ldr r2, [pc, #64] ; (c978 ) - c936: 6819 ldr r1, [r3, #0] - c938: 4291 cmp r1, r2 - c93a: d011 beq.n c960 -} - c93c: 4770 bx lr - c = UART0_C1; - c93e: 789a ldrb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - c940: 490a ldr r1, [pc, #40] ; (c96c ) - c |= UART_C1_LOOPS | UART_C1_RSRC; - c942: f042 02a0 orr.w r2, r2, #160 ; 0xa0 - UART0_C1 = c; - c946: 709a strb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - c948: 7809 ldrb r1, [r1, #0] - c94a: 4b09 ldr r3, [pc, #36] ; (c970 ) - c94c: eb03 03c1 add.w r3, r3, r1, lsl #3 - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - c950: f240 3247 movw r2, #839 ; 0x347 - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - c954: 685b ldr r3, [r3, #4] - transmit_pin = (uint8_t*)GPIO_BITBAND_PTR(UART0_C3, C3_TXDIR_BIT); - c956: 4907 ldr r1, [pc, #28] ; (c974 ) - c958: 4807 ldr r0, [pc, #28] ; (c978 ) - *reg = pin_cfg; - c95a: 601a str r2, [r3, #0] - transmit_pin = (uint8_t*)GPIO_BITBAND_PTR(UART0_C3, C3_TXDIR_BIT); - c95c: 6008 str r0, [r1, #0] - c95e: 4770 bx lr - if (transmit_pin == (uint8_t*)GPIO_BITBAND_PTR(UART0_C3, C3_TXDIR_BIT)) transmit_pin = NULL; - c960: 2200 movs r2, #0 - c962: 601a str r2, [r3, #0] -} - c964: 4770 bx lr - c966: bf00 nop - c968: 4006a000 .word 0x4006a000 - c96c: 1fff8814 .word 0x1fff8814 - c970: 00018614 .word 0x00018614 - c974: 1fff97e0 .word 0x1fff97e0 - c978: 42d400d4 .word 0x42d400d4 - -0000c97c : - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return; - c97c: 4b28 ldr r3, [pc, #160] ; (ca20 ) - c97e: 6b5b ldr r3, [r3, #52] ; 0x34 - c980: 055b lsls r3, r3, #21 - c982: d54c bpl.n ca1e -{ - c984: b510 push {r4, lr} - while (transmitting) yield(); // wait for buffered data to send - c986: 4c27 ldr r4, [pc, #156] ; (ca24 ) - c988: 7823 ldrb r3, [r4, #0] - c98a: b123 cbz r3, c996 - c98c: f002 fa32 bl edf4 - c990: 7823 ldrb r3, [r4, #0] - c992: 2b00 cmp r3, #0 - c994: d1fa bne.n c98c - UART0_C2 = 0; - c996: 4a24 ldr r2, [pc, #144] ; (ca28 ) - switch (rx_pin_num) { - c998: 4b24 ldr r3, [pc, #144] ; (ca2c ) - NVIC_DISABLE_IRQ(IRQ_UART0_STATUS); - c99a: f04f 20e0 mov.w r0, #3758153728 ; 0xe000e000 - c99e: f44f 5400 mov.w r4, #8192 ; 0x2000 - UART0_C2 = 0; - c9a2: 2100 movs r1, #0 - NVIC_DISABLE_IRQ(IRQ_UART0_STATUS); - c9a4: f8c0 4184 str.w r4, [r0, #388] ; 0x184 - UART0_C2 = 0; - c9a8: 70d1 strb r1, [r2, #3] - switch (rx_pin_num) { - c9aa: 781b ldrb r3, [r3, #0] - c9ac: b363 cbz r3, ca08 - c9ae: 2b15 cmp r3, #21 - c9b0: d01b beq.n c9ea - switch (tx_pin_num & 127) { - c9b2: 4b1f ldr r3, [pc, #124] ; (ca30 ) - c9b4: 781b ldrb r3, [r3, #0] - c9b6: f003 037f and.w r3, r3, #127 ; 0x7f - c9ba: 2b01 cmp r3, #1 - c9bc: d01f beq.n c9fe - c9be: 2b05 cmp r3, #5 - c9c0: d00e beq.n c9e0 - if (rts_pin) rts_deassert(); - c9c2: 4b1c ldr r3, [pc, #112] ; (ca34 ) - UART0_S1; - c9c4: 4a18 ldr r2, [pc, #96] ; (ca28 ) - rx_buffer_head = 0; - c9c6: 4c1c ldr r4, [pc, #112] ; (ca38 ) - rx_buffer_tail = 0; - c9c8: 481c ldr r0, [pc, #112] ; (ca3c ) - if (rts_pin) rts_deassert(); - c9ca: 6819 ldr r1, [r3, #0] - UART0_S1; - c9cc: f892 c004 ldrb.w ip, [r2, #4] - UART0_D; // clear leftover error status - c9d0: 79d2 ldrb r2, [r2, #7] - rx_buffer_head = 0; - c9d2: 2300 movs r3, #0 - c9d4: 7023 strb r3, [r4, #0] - rx_buffer_tail = 0; - c9d6: 7003 strb r3, [r0, #0] - if (rts_pin) rts_deassert(); - c9d8: b109 cbz r1, c9de - c9da: 2301 movs r3, #1 - c9dc: 700b strb r3, [r1, #0] -} - c9de: bd10 pop {r4, pc} - case 5: CORE_PIN5_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; - c9e0: 4b17 ldr r3, [pc, #92] ; (ca40 ) - c9e2: f240 1203 movw r2, #259 ; 0x103 - c9e6: 61da str r2, [r3, #28] - c9e8: e7eb b.n c9c2 - case 21: CORE_PIN21_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; - c9ea: 4b15 ldr r3, [pc, #84] ; (ca40 ) - c9ec: f240 1203 movw r2, #259 ; 0x103 - c9f0: 619a str r2, [r3, #24] - switch (tx_pin_num & 127) { - c9f2: 4b0f ldr r3, [pc, #60] ; (ca30 ) - c9f4: 781b ldrb r3, [r3, #0] - c9f6: f003 037f and.w r3, r3, #127 ; 0x7f - c9fa: 2b01 cmp r3, #1 - c9fc: d1df bne.n c9be - case 1: CORE_PIN1_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; - c9fe: 4b11 ldr r3, [pc, #68] ; (ca44 ) - ca00: f240 1203 movw r2, #259 ; 0x103 - ca04: 645a str r2, [r3, #68] ; 0x44 - ca06: e7dc b.n c9c2 - case 0: CORE_PIN0_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; - ca08: 4b0e ldr r3, [pc, #56] ; (ca44 ) - ca0a: f240 1203 movw r2, #259 ; 0x103 - ca0e: 641a str r2, [r3, #64] ; 0x40 - switch (tx_pin_num & 127) { - ca10: 4b07 ldr r3, [pc, #28] ; (ca30 ) - ca12: 781b ldrb r3, [r3, #0] - ca14: f003 037f and.w r3, r3, #127 ; 0x7f - ca18: 2b01 cmp r3, #1 - ca1a: d1d0 bne.n c9be - ca1c: e7ef b.n c9fe - ca1e: 4770 bx lr - ca20: 40048000 .word 0x40048000 - ca24: 1fff97e4 .word 0x1fff97e4 - ca28: 4006a000 .word 0x4006a000 - ca2c: 1fff97dd .word 0x1fff97dd - ca30: 1fff8814 .word 0x1fff8814 - ca34: 1fff9790 .word 0x1fff9790 - ca38: 1fff97d4 .word 0x1fff97d4 - ca3c: 1fff97dc .word 0x1fff97dc - ca40: 4004c000 .word 0x4004c000 - ca44: 4004a000 .word 0x4004a000 - -0000ca48 : - while (transmitting) ; - ca48: 4a0a ldr r2, [pc, #40] ; (ca74 ) -{ - ca4a: b538 push {r3, r4, r5, lr} - ca4c: 4605 mov r5, r0 - while (transmitting) ; - ca4e: 7813 ldrb r3, [r2, #0] - ca50: f003 04ff and.w r4, r3, #255 ; 0xff - ca54: 2b00 cmp r3, #0 - ca56: d1fa bne.n ca4e - pinMode(pin, OUTPUT); - ca58: 2101 movs r1, #1 - ca5a: 4628 mov r0, r5 - ca5c: f7ff fdc4 bl c5e8 - digitalWrite(pin, LOW); - ca60: 4621 mov r1, r4 - ca62: 4628 mov r0, r5 - ca64: f7ff fd8c bl c580 - transmit_pin = portOutputRegister(pin); - ca68: 4a03 ldr r2, [pc, #12] ; (ca78 ) - ca6a: 4b04 ldr r3, [pc, #16] ; (ca7c ) - ca6c: f852 2035 ldr.w r2, [r2, r5, lsl #3] - ca70: 601a str r2, [r3, #0] -} - ca72: bd38 pop {r3, r4, r5, pc} - ca74: 1fff97e4 .word 0x1fff97e4 - ca78: 00018614 .word 0x00018614 - ca7c: 1fff97e0 .word 0x1fff97e0 - -0000ca80 : - if (opendrain) pin |= 128; - ca80: b109 cbz r1, ca86 - ca82: f040 0080 orr.w r0, r0, #128 ; 0x80 - if (pin == tx_pin_num) return; - ca86: 4a19 ldr r2, [pc, #100] ; (caec ) - ca88: 7813 ldrb r3, [r2, #0] - ca8a: 4283 cmp r3, r0 - ca8c: d017 beq.n cabe -{ - ca8e: b410 push {r4} - if ((SIM_SCGC4 & SIM_SCGC4_UART0)) { - ca90: 4c17 ldr r4, [pc, #92] ; (caf0 ) - ca92: 6b64 ldr r4, [r4, #52] ; 0x34 - ca94: 0564 lsls r4, r4, #21 - ca96: d50f bpl.n cab8 - switch (tx_pin_num & 127) { - ca98: f003 037f and.w r3, r3, #127 ; 0x7f - ca9c: 2b01 cmp r3, #1 - ca9e: d021 beq.n cae4 - caa0: 2b05 cmp r3, #5 - caa2: d014 beq.n cace - cfg = PORT_PCR_DSE | PORT_PCR_SRE; - caa4: 2900 cmp r1, #0 - caa6: f000 037f and.w r3, r0, #127 ; 0x7f - caaa: bf14 ite ne - caac: 2160 movne r1, #96 ; 0x60 - caae: 2144 moveq r1, #68 ; 0x44 - switch (pin & 127) { - cab0: 2b01 cmp r3, #1 - cab2: d010 beq.n cad6 - cab4: 2b05 cmp r3, #5 - cab6: d003 beq.n cac0 - tx_pin_num = pin; - cab8: 7010 strb r0, [r2, #0] -} - caba: bc10 pop {r4} - cabc: 4770 bx lr - cabe: 4770 bx lr - case 5: CORE_PIN5_CONFIG = cfg | PORT_PCR_MUX(3); break; - cac0: 4b0c ldr r3, [pc, #48] ; (caf4 ) - cac2: f441 7140 orr.w r1, r1, #768 ; 0x300 - cac6: 61d9 str r1, [r3, #28] - tx_pin_num = pin; - cac8: 7010 strb r0, [r2, #0] -} - caca: bc10 pop {r4} - cacc: 4770 bx lr - case 5: CORE_PIN5_CONFIG = 0; break; // PTD7 - cace: 4b09 ldr r3, [pc, #36] ; (caf4 ) - cad0: 2400 movs r4, #0 - cad2: 61dc str r4, [r3, #28] - cad4: e7e6 b.n caa4 - case 1: CORE_PIN1_CONFIG = cfg | PORT_PCR_MUX(3); break; - cad6: 4b08 ldr r3, [pc, #32] ; (caf8 ) - cad8: f441 7140 orr.w r1, r1, #768 ; 0x300 - cadc: 6459 str r1, [r3, #68] ; 0x44 - tx_pin_num = pin; - cade: 7010 strb r0, [r2, #0] -} - cae0: bc10 pop {r4} - cae2: 4770 bx lr - case 1: CORE_PIN1_CONFIG = 0; break; // PTB17 - cae4: 4b04 ldr r3, [pc, #16] ; (caf8 ) - cae6: 2400 movs r4, #0 - cae8: 645c str r4, [r3, #68] ; 0x44 - caea: e7db b.n caa4 - caec: 1fff8814 .word 0x1fff8814 - caf0: 40048000 .word 0x40048000 - caf4: 4004c000 .word 0x4004c000 - caf8: 4004a000 .word 0x4004a000 - -0000cafc : - if (pin == rx_pin_num) return; - cafc: 4a10 ldr r2, [pc, #64] ; (cb40 ) - cafe: 7813 ldrb r3, [r2, #0] - cb00: 4283 cmp r3, r0 - cb02: d00a beq.n cb1a - if ((SIM_SCGC4 & SIM_SCGC4_UART0)) { - cb04: 490f ldr r1, [pc, #60] ; (cb44 ) - cb06: 6b49 ldr r1, [r1, #52] ; 0x34 - cb08: 0549 lsls r1, r1, #21 - cb0a: d505 bpl.n cb18 - switch (rx_pin_num) { - cb0c: b1ab cbz r3, cb3a - cb0e: 2b15 cmp r3, #21 - cb10: d009 beq.n cb26 - switch (pin) { - cb12: b168 cbz r0, cb30 - cb14: 2815 cmp r0, #21 - cb16: d001 beq.n cb1c - rx_pin_num = pin; - cb18: 7010 strb r0, [r2, #0] -} - cb1a: 4770 bx lr - case 21: CORE_PIN21_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - cb1c: 4b0a ldr r3, [pc, #40] ; (cb48 ) - cb1e: f240 3113 movw r1, #787 ; 0x313 - cb22: 6199 str r1, [r3, #24] - cb24: e7f8 b.n cb18 - case 21: CORE_PIN21_CONFIG = 0; break; // PTD6 - cb26: 4b08 ldr r3, [pc, #32] ; (cb48 ) - cb28: 2100 movs r1, #0 - cb2a: 6199 str r1, [r3, #24] - switch (pin) { - cb2c: 2800 cmp r0, #0 - cb2e: d1f1 bne.n cb14 - case 0: CORE_PIN0_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - cb30: 4b06 ldr r3, [pc, #24] ; (cb4c ) - cb32: f240 3113 movw r1, #787 ; 0x313 - cb36: 6419 str r1, [r3, #64] ; 0x40 - cb38: e7ee b.n cb18 - case 0: CORE_PIN0_CONFIG = 0; break; // PTB16 - cb3a: 4904 ldr r1, [pc, #16] ; (cb4c ) - cb3c: 640b str r3, [r1, #64] ; 0x40 - cb3e: e7e8 b.n cb12 - cb40: 1fff97dd .word 0x1fff97dd - cb44: 40048000 .word 0x40048000 - cb48: 4004c000 .word 0x4004c000 - cb4c: 4004a000 .word 0x4004a000 - -0000cb50 : - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return 0; - cb50: 4b0d ldr r3, [pc, #52] ; (cb88 ) - cb52: 6b5b ldr r3, [r3, #52] ; 0x34 - cb54: f413 6380 ands.w r3, r3, #1024 ; 0x400 - cb58: d013 beq.n cb82 - if (pin < CORE_NUM_DIGITAL) { - cb5a: 2821 cmp r0, #33 ; 0x21 - cb5c: d903 bls.n cb66 - rts_pin = NULL; - cb5e: 4b0b ldr r3, [pc, #44] ; (cb8c ) - cb60: 2000 movs r0, #0 - cb62: 6018 str r0, [r3, #0] - return 0; - cb64: 4770 bx lr - rts_pin = portOutputRegister(pin); - cb66: 4b0a ldr r3, [pc, #40] ; (cb90 ) -{ - cb68: b510 push {r4, lr} - rts_pin = portOutputRegister(pin); - cb6a: 4c08 ldr r4, [pc, #32] ; (cb8c ) - cb6c: f853 3030 ldr.w r3, [r3, r0, lsl #3] - cb70: 6023 str r3, [r4, #0] - pinMode(pin, OUTPUT); - cb72: 2101 movs r1, #1 - cb74: f7ff fd38 bl c5e8 - rts_assert(); - cb78: 6823 ldr r3, [r4, #0] - cb7a: 2200 movs r2, #0 - cb7c: 701a strb r2, [r3, #0] - return 1; - cb7e: 2001 movs r0, #1 -} - cb80: bd10 pop {r4, pc} - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return 0; - cb82: 4618 mov r0, r3 -} - cb84: 4770 bx lr - cb86: bf00 nop - cb88: 40048000 .word 0x40048000 - cb8c: 1fff9790 .word 0x1fff9790 - cb90: 00018614 .word 0x00018614 - -0000cb94 : - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return 0; - cb94: 4b10 ldr r3, [pc, #64] ; (cbd8 ) - cb96: 6b5b ldr r3, [r3, #52] ; 0x34 - cb98: f413 6380 ands.w r3, r3, #1024 ; 0x400 - cb9c: d012 beq.n cbc4 - if (pin == 18) { - cb9e: 2812 cmp r0, #18 - cba0: d00b beq.n cbba - } else if (pin == 20) { - cba2: 2814 cmp r0, #20 - cba4: d110 bne.n cbc8 - CORE_PIN20_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_PE; // weak pulldown - cba6: 4b0d ldr r3, [pc, #52] ; (cbdc ) - cba8: f240 3202 movw r2, #770 ; 0x302 - cbac: 615a str r2, [r3, #20] - UART0_MODEM |= UART_MODEM_TXCTSE; - cbae: 4a0c ldr r2, [pc, #48] ; (cbe0 ) - cbb0: 7b53 ldrb r3, [r2, #13] - return 1; - cbb2: 2001 movs r0, #1 - UART0_MODEM |= UART_MODEM_TXCTSE; - cbb4: 4303 orrs r3, r0 - cbb6: 7353 strb r3, [r2, #13] - return 1; - cbb8: 4770 bx lr - CORE_PIN18_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_PE; // weak pulldown - cbba: 4b0a ldr r3, [pc, #40] ; (cbe4 ) - cbbc: f240 3202 movw r2, #770 ; 0x302 - cbc0: 60da str r2, [r3, #12] - cbc2: e7f4 b.n cbae - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return 0; - cbc4: 4618 mov r0, r3 -} - cbc6: 4770 bx lr - UART0_MODEM &= ~UART_MODEM_TXCTSE; - cbc8: 4a05 ldr r2, [pc, #20] ; (cbe0 ) - cbca: 7b53 ldrb r3, [r2, #13] - cbcc: f003 03fe and.w r3, r3, #254 ; 0xfe - return 0; - cbd0: 2000 movs r0, #0 - UART0_MODEM &= ~UART_MODEM_TXCTSE; - cbd2: 7353 strb r3, [r2, #13] - return 0; - cbd4: 4770 bx lr - cbd6: bf00 nop - cbd8: 40048000 .word 0x40048000 - cbdc: 4004c000 .word 0x4004c000 - cbe0: 4006a000 .word 0x4006a000 - cbe4: 4004a000 .word 0x4004a000 - -0000cbe8 : - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return; - cbe8: 4b03 ldr r3, [pc, #12] ; (cbf8 ) - cbea: 6b5b ldr r3, [r3, #52] ; 0x34 - cbec: 055b lsls r3, r3, #21 - cbee: d501 bpl.n cbf4 - cbf0: f7ff bd82 b.w c6f8 -} - cbf4: 4770 bx lr - cbf6: bf00 nop - cbf8: 40048000 .word 0x40048000 - -0000cbfc : - -#ifdef HAS_KINETISK_UART0_FIFO -void serial_write(const void *buf, unsigned int count) -{ - cbfc: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - const uint8_t *p = (const uint8_t *)buf; - const uint8_t *end = p + count; - uint32_t head, n; - - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return; - cc00: 4b39 ldr r3, [pc, #228] ; (cce8 ) - cc02: 6b5b ldr r3, [r3, #52] ; 0x34 - cc04: 055a lsls r2, r3, #21 - cc06: d53c bpl.n cc82 - if (transmit_pin) transmit_assert(); - cc08: 4b38 ldr r3, [pc, #224] ; (ccec ) - cc0a: 681b ldr r3, [r3, #0] - cc0c: b10b cbz r3, cc12 - cc0e: 2201 movs r2, #1 - cc10: 701a strb r2, [r3, #0] - const uint8_t *end = p + count; - cc12: 1847 adds r7, r0, r1 - while (p < end) { - cc14: 42b8 cmp r0, r7 - cc16: d231 bcs.n cc7c - cc18: 4e35 ldr r6, [pc, #212] ; (ccf0 ) - cc1a: f8df 80d8 ldr.w r8, [pc, #216] ; ccf4 - cc1e: 4c36 ldr r4, [pc, #216] ; (ccf8 ) - head = tx_buffer_head; - if (++head >= tx_buffer_total_size_) head = 0; - if (tx_buffer_tail == head) { - UART0_C2 = C2_TX_ACTIVE; - cc20: f8df 90d8 ldr.w r9, [pc, #216] ; ccfc - cc24: f100 0a01 add.w sl, r0, #1 - cc28: e013 b.n cc52 - if (tx_buffer_tail == head) { - cc2a: f003 0bff and.w fp, r3, #255 ; 0xff - cc2e: b353 cbz r3, cc86 - cc30: f04f 0b00 mov.w fp, #0 - cc34: 465d mov r5, fp - yield(); - } - } while (tx_buffer_tail == head); - } - if (head < SERIAL1_TX_BUFFER_SIZE) { - tx_buffer[head] = *p++; - cc36: 4a32 ldr r2, [pc, #200] ; (cd00 ) - cc38: f81a 3c01 ldrb.w r3, [sl, #-1] - cc3c: 5553 strb r3, [r2, r5] - cc3e: 4652 mov r2, sl - } else { - tx_buffer_storage_[head - SERIAL1_TX_BUFFER_SIZE] = *p++; - } - transmitting = 1; - cc40: 4930 ldr r1, [pc, #192] ; (cd04 ) - cc42: 2301 movs r3, #1 - while (p < end) { - cc44: 42ba cmp r2, r7 - transmitting = 1; - cc46: 700b strb r3, [r1, #0] - while (p < end) { - cc48: f10a 0a01 add.w sl, sl, #1 - tx_buffer_head = head; - cc4c: f886 b000 strb.w fp, [r6] - while (p < end) { - cc50: d214 bcs.n cc7c - head = tx_buffer_head; - cc52: 7835 ldrb r5, [r6, #0] - if (++head >= tx_buffer_total_size_) head = 0; - cc54: f8d8 3000 ldr.w r3, [r8] - cc58: 3501 adds r5, #1 - cc5a: 42ab cmp r3, r5 - if (tx_buffer_tail == head) { - cc5c: 7823 ldrb r3, [r4, #0] - if (++head >= tx_buffer_total_size_) head = 0; - cc5e: d9e4 bls.n cc2a - if (tx_buffer_tail == head) { - cc60: 42ab cmp r3, r5 - tx_buffer_head = head; - cc62: fa5f fb85 uxtb.w fp, r5 - if (tx_buffer_tail == head) { - cc66: d00f beq.n cc88 - if (head < SERIAL1_TX_BUFFER_SIZE) { - cc68: 2d3f cmp r5, #63 ; 0x3f - cc6a: d9e4 bls.n cc36 - tx_buffer_storage_[head - SERIAL1_TX_BUFFER_SIZE] = *p++; - cc6c: 4b26 ldr r3, [pc, #152] ; (cd08 ) - cc6e: f81a 2c01 ldrb.w r2, [sl, #-1] - cc72: 681b ldr r3, [r3, #0] - cc74: 3d40 subs r5, #64 ; 0x40 - cc76: 555a strb r2, [r3, r5] - cc78: 4652 mov r2, sl - cc7a: e7e1 b.n cc40 - } - UART0_C2 = C2_TX_ACTIVE; - cc7c: 4b1f ldr r3, [pc, #124] ; (ccfc ) - cc7e: 22bc movs r2, #188 ; 0xbc - cc80: 70da strb r2, [r3, #3] -} - cc82: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (tx_buffer_tail == head) { - cc86: 465d mov r5, fp - UART0_C2 = C2_TX_ACTIVE; - cc88: f06f 0343 mvn.w r3, #67 ; 0x43 - cc8c: f889 3003 strb.w r3, [r9, #3] - cc90: e006 b.n cca0 - if ((UART0_S1 & UART_S1_TDRE)) { - cc92: f899 3004 ldrb.w r3, [r9, #4] - cc96: 061b lsls r3, r3, #24 - cc98: d40b bmi.n ccb2 - } while (tx_buffer_tail == head); - cc9a: 7823 ldrb r3, [r4, #0] - cc9c: 42ab cmp r3, r5 - cc9e: d1e3 bne.n cc68 - int priority = nvic_execution_priority(); - cca0: f7ff f9f8 bl c094 - if (priority <= IRQ_PRIORITY) { - cca4: 2840 cmp r0, #64 ; 0x40 - cca6: ddf4 ble.n cc92 - } else if (priority >= 256) { - cca8: 28ff cmp r0, #255 ; 0xff - ccaa: ddf6 ble.n cc9a - yield(); - ccac: f002 f8a2 bl edf4 - ccb0: e7f3 b.n cc9a - uint32_t tail = tx_buffer_tail; - ccb2: 7823 ldrb r3, [r4, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - ccb4: f8d8 1000 ldr.w r1, [r8] - ccb8: 1c5a adds r2, r3, #1 - ccba: 4291 cmp r1, r2 - uint32_t tail = tx_buffer_tail; - ccbc: b2db uxtb r3, r3 - if (++tail >= tx_buffer_total_size_) tail = 0; - ccbe: d903 bls.n ccc8 - if (tail < SERIAL1_TX_BUFFER_SIZE) { - ccc0: 2a3f cmp r2, #63 ; 0x3f - ccc2: d80a bhi.n ccda - tx_buffer_tail = tail; - ccc4: b2d1 uxtb r1, r2 - ccc6: e001 b.n cccc - ccc8: 2100 movs r1, #0 - if (++tail >= tx_buffer_total_size_) tail = 0; - ccca: 460a mov r2, r1 - n = tx_buffer[tail]; - cccc: 4b0c ldr r3, [pc, #48] ; (cd00 ) - ccce: 5c9b ldrb r3, [r3, r2] - ccd0: b2db uxtb r3, r3 - UART0_D = n; - ccd2: f889 3007 strb.w r3, [r9, #7] - tx_buffer_tail = tail; - ccd6: 7021 strb r1, [r4, #0] - ccd8: e7df b.n cc9a - ccda: b2d1 uxtb r1, r2 - n = tx_buffer_storage_[tail-SERIAL1_TX_BUFFER_SIZE]; - ccdc: 4a0a ldr r2, [pc, #40] ; (cd08 ) - ccde: 3b3f subs r3, #63 ; 0x3f - cce0: 6812 ldr r2, [r2, #0] - cce2: 5cd3 ldrb r3, [r2, r3] - cce4: b2db uxtb r3, r3 - cce6: e7f4 b.n ccd2 - cce8: 40048000 .word 0x40048000 - ccec: 1fff97e0 .word 0x1fff97e0 - ccf0: 1fff9828 .word 0x1fff9828 - ccf4: 1fff8810 .word 0x1fff8810 - ccf8: 1fff9830 .word 0x1fff9830 - ccfc: 4006a000 .word 0x4006a000 - cd00: 1fff97e8 .word 0x1fff97e8 - cd04: 1fff97e4 .word 0x1fff97e4 - cd08: 1fff982c .word 0x1fff982c - -0000cd0c : - while (count-- > 0) serial_putchar(*p++); -} -#endif - -void serial_flush(void) -{ - cd0c: b510 push {r4, lr} - while (transmitting) yield(); // wait - cd0e: 4c04 ldr r4, [pc, #16] ; (cd20 ) - cd10: 7823 ldrb r3, [r4, #0] - cd12: b123 cbz r3, cd1e - cd14: f002 f86e bl edf4 - cd18: 7823 ldrb r3, [r4, #0] - cd1a: 2b00 cmp r3, #0 - cd1c: d1fa bne.n cd14 -} - cd1e: bd10 pop {r4, pc} - cd20: 1fff97e4 .word 0x1fff97e4 - -0000cd24 : - -int serial_write_buffer_free(void) -{ - uint32_t head, tail; - - head = tx_buffer_head; - cd24: 4a08 ldr r2, [pc, #32] ; (cd48 ) - tail = tx_buffer_tail; - cd26: 4b09 ldr r3, [pc, #36] ; (cd4c ) - head = tx_buffer_head; - cd28: 7811 ldrb r1, [r2, #0] - tail = tx_buffer_tail; - cd2a: 781a ldrb r2, [r3, #0] - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - cd2c: 4291 cmp r1, r2 - head = tx_buffer_head; - cd2e: b2c8 uxtb r0, r1 - tail = tx_buffer_tail; - cd30: b2d3 uxtb r3, r2 - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - cd32: d202 bcs.n cd3a - return tail - head - 1; - cd34: 3b01 subs r3, #1 - cd36: 1a18 subs r0, r3, r0 -} - cd38: 4770 bx lr - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - cd3a: 4a05 ldr r2, [pc, #20] ; (cd50 ) - cd3c: 6812 ldr r2, [r2, #0] - cd3e: 3a01 subs r2, #1 - cd40: 4413 add r3, r2 - cd42: 1a18 subs r0, r3, r0 - cd44: 4770 bx lr - cd46: bf00 nop - cd48: 1fff9828 .word 0x1fff9828 - cd4c: 1fff9830 .word 0x1fff9830 - cd50: 1fff8810 .word 0x1fff8810 - -0000cd54 : - -int serial_available(void) -{ - uint32_t head, tail; - - head = rx_buffer_head; - cd54: 4a06 ldr r2, [pc, #24] ; (cd70 ) - tail = rx_buffer_tail; - cd56: 4b07 ldr r3, [pc, #28] ; (cd74 ) - head = rx_buffer_head; - cd58: 7811 ldrb r1, [r2, #0] - tail = rx_buffer_tail; - cd5a: 781a ldrb r2, [r3, #0] - if (head >= tail) return head - tail; - cd5c: 4291 cmp r1, r2 - tail = rx_buffer_tail; - cd5e: b2d0 uxtb r0, r2 - return rx_buffer_total_size_ + head - tail; - cd60: bf3c itt cc - cd62: 4a05 ldrcc r2, [pc, #20] ; (cd78 ) - cd64: 6812 ldrcc r2, [r2, #0] - head = rx_buffer_head; - cd66: b2cb uxtb r3, r1 - return rx_buffer_total_size_ + head - tail; - cd68: bf38 it cc - cd6a: 189b addcc r3, r3, r2 - cd6c: 1a18 subs r0, r3, r0 -} - cd6e: 4770 bx lr - cd70: 1fff97d4 .word 0x1fff97d4 - cd74: 1fff97dc .word 0x1fff97dc - cd78: 1fff880c .word 0x1fff880c - -0000cd7c : -int serial_getchar(void) -{ - uint32_t head, tail; - int c; - - head = rx_buffer_head; - cd7c: 4b1b ldr r3, [pc, #108] ; (cdec ) - tail = rx_buffer_tail; - cd7e: 491c ldr r1, [pc, #112] ; (cdf0 ) - head = rx_buffer_head; - cd80: 781a ldrb r2, [r3, #0] - tail = rx_buffer_tail; - cd82: 780b ldrb r3, [r1, #0] - if (head == tail) return -1; - cd84: 429a cmp r2, r3 - cd86: d02e beq.n cde6 -{ - cd88: b510 push {r4, lr} - cd8a: fa5f fe82 uxtb.w lr, r2 - if (++tail >= rx_buffer_total_size_) tail = 0; - cd8e: 4a19 ldr r2, [pc, #100] ; (cdf4 ) - cd90: b2d8 uxtb r0, r3 - cd92: 6812 ldr r2, [r2, #0] - cd94: 1c43 adds r3, r0, #1 - cd96: 429a cmp r2, r3 - cd98: d919 bls.n cdce - if (tail < SERIAL1_RX_BUFFER_SIZE) { - cd9a: 2b3f cmp r3, #63 ; 0x3f - cd9c: d81b bhi.n cdd6 - c = rx_buffer[tail]; - } else { - c = rx_buffer_storage_[tail-SERIAL1_RX_BUFFER_SIZE]; - } - rx_buffer_tail = tail; - cd9e: fa5f fc83 uxtb.w ip, r3 - c = rx_buffer[tail]; - cda2: 4815 ldr r0, [pc, #84] ; (cdf8 ) - cda4: 5cc0 ldrb r0, [r0, r3] - cda6: b2c0 uxtb r0, r0 - rx_buffer_tail = tail; - cda8: f881 c000 strb.w ip, [r1] - if (rts_pin) { - cdac: 4913 ldr r1, [pc, #76] ; (cdfc ) - cdae: 6809 ldr r1, [r1, #0] - cdb0: b161 cbz r1, cdcc - int avail; - if (head >= tail) avail = head - tail; - cdb2: 459e cmp lr, r3 - else avail = rx_buffer_total_size_ + head - tail; - cdb4: bf3c itt cc - cdb6: 4472 addcc r2, lr - cdb8: 1ad3 subcc r3, r2, r3 - if (avail <= rts_low_watermark_) rts_assert(); - cdba: 4a11 ldr r2, [pc, #68] ; (ce00 ) - cdbc: 6812 ldr r2, [r2, #0] - if (head >= tail) avail = head - tail; - cdbe: bf28 it cs - cdc0: ebae 0303 subcs.w r3, lr, r3 - if (avail <= rts_low_watermark_) rts_assert(); - cdc4: 429a cmp r2, r3 - cdc6: d301 bcc.n cdcc - cdc8: 2300 movs r3, #0 - cdca: 700b strb r3, [r1, #0] - } - return c; -} - cdcc: bd10 pop {r4, pc} - cdce: f04f 0c00 mov.w ip, #0 - if (++tail >= rx_buffer_total_size_) tail = 0; - cdd2: 4663 mov r3, ip - cdd4: e7e5 b.n cda2 - c = rx_buffer_storage_[tail-SERIAL1_RX_BUFFER_SIZE]; - cdd6: 4c0b ldr r4, [pc, #44] ; (ce04 ) - cdd8: 383f subs r0, #63 ; 0x3f - cdda: 6824 ldr r4, [r4, #0] - cddc: 5c20 ldrb r0, [r4, r0] - rx_buffer_tail = tail; - cdde: fa5f fc83 uxtb.w ip, r3 - c = rx_buffer_storage_[tail-SERIAL1_RX_BUFFER_SIZE]; - cde2: b2c0 uxtb r0, r0 - cde4: e7e0 b.n cda8 - if (head == tail) return -1; - cde6: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - cdea: 4770 bx lr - cdec: 1fff97d4 .word 0x1fff97d4 - cdf0: 1fff97dc .word 0x1fff97dc - cdf4: 1fff880c .word 0x1fff880c - cdf8: 1fff9794 .word 0x1fff9794 - cdfc: 1fff9790 .word 0x1fff9790 - ce00: 1fff8808 .word 0x1fff8808 - ce04: 1fff97d8 .word 0x1fff97d8 - -0000ce08 : - -int serial_peek(void) -{ - uint32_t head, tail; - - head = rx_buffer_head; - ce08: 4a0d ldr r2, [pc, #52] ; (ce40 ) - tail = rx_buffer_tail; - ce0a: 4b0e ldr r3, [pc, #56] ; (ce44 ) - head = rx_buffer_head; - ce0c: 7811 ldrb r1, [r2, #0] - tail = rx_buffer_tail; - ce0e: 781b ldrb r3, [r3, #0] - if (head == tail) return -1; - ce10: 4299 cmp r1, r3 - tail = rx_buffer_tail; - ce12: b2da uxtb r2, r3 - if (head == tail) return -1; - ce14: d011 beq.n ce3a - if (++tail >= rx_buffer_total_size_) tail = 0; - ce16: 490c ldr r1, [pc, #48] ; (ce48 ) - ce18: 6809 ldr r1, [r1, #0] - ce1a: 1c53 adds r3, r2, #1 - ce1c: 4299 cmp r1, r3 - ce1e: d907 bls.n ce30 - if (tail < SERIAL1_RX_BUFFER_SIZE) { - ce20: 2b3f cmp r3, #63 ; 0x3f - ce22: d906 bls.n ce32 - return rx_buffer[tail]; - } - return rx_buffer_storage_[tail-SERIAL1_RX_BUFFER_SIZE]; - ce24: 4b09 ldr r3, [pc, #36] ; (ce4c ) - ce26: 3a3f subs r2, #63 ; 0x3f - ce28: 681b ldr r3, [r3, #0] - ce2a: 5c98 ldrb r0, [r3, r2] - ce2c: b2c0 uxtb r0, r0 - ce2e: 4770 bx lr - if (++tail >= rx_buffer_total_size_) tail = 0; - ce30: 2300 movs r3, #0 - return rx_buffer[tail]; - ce32: 4a07 ldr r2, [pc, #28] ; (ce50 ) - ce34: 5cd0 ldrb r0, [r2, r3] - ce36: b2c0 uxtb r0, r0 - ce38: 4770 bx lr - if (head == tail) return -1; - ce3a: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - ce3e: 4770 bx lr - ce40: 1fff97d4 .word 0x1fff97d4 - ce44: 1fff97dc .word 0x1fff97dc - ce48: 1fff880c .word 0x1fff880c - ce4c: 1fff97d8 .word 0x1fff97d8 - ce50: 1fff9794 .word 0x1fff9794 - -0000ce54 : - -void serial_clear(void) -{ -#ifdef HAS_KINETISK_UART0_FIFO - if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return; - ce54: 4b0c ldr r3, [pc, #48] ; (ce88 ) - ce56: 6b5b ldr r3, [r3, #52] ; 0x34 - ce58: 055b lsls r3, r3, #21 - ce5a: d514 bpl.n ce86 - UART0_C2 &= ~(UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - ce5c: 4b0b ldr r3, [pc, #44] ; (ce8c ) - UART0_CFIFO = UART_CFIFO_RXFLUSH; - UART0_C2 |= (UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); -#endif - rx_buffer_head = rx_buffer_tail; - ce5e: 480c ldr r0, [pc, #48] ; (ce90 ) - UART0_C2 &= ~(UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - ce60: 78da ldrb r2, [r3, #3] - UART0_CFIFO = UART_CFIFO_RXFLUSH; - ce62: 2140 movs r1, #64 ; 0x40 - UART0_C2 &= ~(UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - ce64: f002 02cb and.w r2, r2, #203 ; 0xcb - ce68: 70da strb r2, [r3, #3] - UART0_CFIFO = UART_CFIFO_RXFLUSH; - ce6a: 7459 strb r1, [r3, #17] - UART0_C2 |= (UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - ce6c: 78da ldrb r2, [r3, #3] - rx_buffer_head = rx_buffer_tail; - ce6e: 4909 ldr r1, [pc, #36] ; (ce94 ) - UART0_C2 |= (UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - ce70: f042 0234 orr.w r2, r2, #52 ; 0x34 - ce74: 70da strb r2, [r3, #3] - if (rts_pin) rts_assert(); - ce76: 4a08 ldr r2, [pc, #32] ; (ce98 ) - rx_buffer_head = rx_buffer_tail; - ce78: 7803 ldrb r3, [r0, #0] - if (rts_pin) rts_assert(); - ce7a: 6812 ldr r2, [r2, #0] - rx_buffer_head = rx_buffer_tail; - ce7c: b2db uxtb r3, r3 - ce7e: 700b strb r3, [r1, #0] - if (rts_pin) rts_assert(); - ce80: b10a cbz r2, ce86 - ce82: 2300 movs r3, #0 - ce84: 7013 strb r3, [r2, #0] -} - ce86: 4770 bx lr - ce88: 40048000 .word 0x40048000 - ce8c: 4006a000 .word 0x4006a000 - ce90: 1fff97dc .word 0x1fff97dc - ce94: 1fff97d4 .word 0x1fff97d4 - ce98: 1fff9790 .word 0x1fff9790 - -0000ce9c : -// Receive data above watermark UART_S1_RDRF -// LIN break detect UART_S2_LBKDIF -// RxD pin active edge UART_S2_RXEDGIF - -void uart0_status_isr(void) -{ - ce9c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - uint8_t c; -#ifdef HAS_KINETISK_UART0_FIFO - uint32_t newhead; - uint8_t avail; - - if (UART0_S1 & (UART_S1_RDRF | UART_S1_IDLE)) { - cea0: 4c50 ldr r4, [pc, #320] ; (cfe4 ) - cea2: 7923 ldrb r3, [r4, #4] - cea4: f013 0f30 tst.w r3, #48 ; 0x30 - cea8: d047 beq.n cf3a - __disable_irq(); - ceaa: b672 cpsid i - avail = UART0_RCFIFO; - ceac: 7da3 ldrb r3, [r4, #22] - if (avail == 0) { - ceae: f003 01ff and.w r1, r3, #255 ; 0xff - ceb2: 2b00 cmp r3, #0 - ceb4: d058 beq.n cf68 - // which won't be simple, since we already manage - // which transmit interrupts are enabled. - UART0_CFIFO = UART_CFIFO_RXFLUSH; - __enable_irq(); - } else { - __enable_irq(); - ceb6: b662 cpsie i - head = rx_buffer_head; - ceb8: f8df 812c ldr.w r8, [pc, #300] ; cfe8 - tail = rx_buffer_tail; - cebc: 484b ldr r0, [pc, #300] ; (cfec ) - head = rx_buffer_head; - cebe: f898 3000 ldrb.w r3, [r8] - n = UART0_D | 0x100; - } else { - n = UART0_D; - } - newhead = head + 1; - if (newhead >= rx_buffer_total_size_) newhead = 0; - cec2: 4a4b ldr r2, [pc, #300] ; (cff0 ) - tail = rx_buffer_tail; - cec4: 7805 ldrb r5, [r0, #0] - if (newhead >= rx_buffer_total_size_) newhead = 0; - cec6: 6816 ldr r6, [r2, #0] - if (newhead != tail) { - head = newhead; - if (newhead < SERIAL1_RX_BUFFER_SIZE) { - rx_buffer[head] = n; - cec8: 4f4a ldr r7, [pc, #296] ; (cff4 ) - head = rx_buffer_head; - ceca: fa5f fc83 uxtb.w ip, r3 - } else { - rx_buffer_storage_[head-SERIAL1_RX_BUFFER_SIZE] = n; - cece: 4b4a ldr r3, [pc, #296] ; (cff8 ) - tail = rx_buffer_tail; - ced0: b2ed uxtb r5, r5 - rx_buffer_storage_[head-SERIAL1_RX_BUFFER_SIZE] = n; - ced2: f8d3 e000 ldr.w lr, [r3] - ced6: e008 b.n ceea - if (newhead != tail) { - ced8: b11d cbz r5, cee2 - ceda: f04f 0c00 mov.w ip, #0 - rx_buffer[head] = n; - cede: f807 300c strb.w r3, [r7, ip] - } - } - } while (--avail > 0); - cee2: 1e4a subs r2, r1, #1 - cee4: f012 01ff ands.w r1, r2, #255 ; 0xff - cee8: d012 beq.n cf10 - n = UART0_D; - ceea: 79e3 ldrb r3, [r4, #7] - newhead = head + 1; - ceec: f10c 0201 add.w r2, ip, #1 - if (newhead >= rx_buffer_total_size_) newhead = 0; - cef0: 4296 cmp r6, r2 - n = UART0_D; - cef2: b2db uxtb r3, r3 - if (newhead >= rx_buffer_total_size_) newhead = 0; - cef4: d9f0 bls.n ced8 - if (newhead != tail) { - cef6: 4295 cmp r5, r2 - rx_buffer_storage_[head-SERIAL1_RX_BUFFER_SIZE] = n; - cef8: f1ac 003f sub.w r0, ip, #63 ; 0x3f - if (newhead != tail) { - cefc: d0f1 beq.n cee2 - if (newhead < SERIAL1_RX_BUFFER_SIZE) { - cefe: 2a3f cmp r2, #63 ; 0x3f - cf00: d96d bls.n cfde - rx_buffer_storage_[head-SERIAL1_RX_BUFFER_SIZE] = n; - cf02: 4694 mov ip, r2 - } while (--avail > 0); - cf04: 1e4a subs r2, r1, #1 - cf06: f012 01ff ands.w r1, r2, #255 ; 0xff - rx_buffer_storage_[head-SERIAL1_RX_BUFFER_SIZE] = n; - cf0a: f80e 3000 strb.w r3, [lr, r0] - } while (--avail > 0); - cf0e: d1ec bne.n ceea - rx_buffer_head = head; - cf10: fa5f f38c uxtb.w r3, ip - cf14: f888 3000 strb.w r3, [r8] - if (rts_pin) { - cf18: 4b38 ldr r3, [pc, #224] ; (cffc ) - cf1a: 6819 ldr r1, [r3, #0] - cf1c: b169 cbz r1, cf3a - int avail; - if (head >= tail) avail = head - tail; - cf1e: 45ac cmp ip, r5 - else avail = rx_buffer_total_size_ + head - tail; - cf20: bf3c itt cc - cf22: 1b72 subcc r2, r6, r5 - cf24: eb02 030c addcc.w r3, r2, ip - if (avail >= rts_high_watermark_) rts_deassert(); - cf28: 4a35 ldr r2, [pc, #212] ; (d000 ) - cf2a: 6812 ldr r2, [r2, #0] - if (head >= tail) avail = head - tail; - cf2c: bf28 it cs - cf2e: ebac 0305 subcs.w r3, ip, r5 - if (avail >= rts_high_watermark_) rts_deassert(); - cf32: 429a cmp r2, r3 - cf34: bf9c itt ls - cf36: 2301 movls r3, #1 - cf38: 700b strbls r3, [r1, #0] - } - } - } - c = UART0_C2; - cf3a: 482a ldr r0, [pc, #168] ; (cfe4 ) - cf3c: 78c3 ldrb r3, [r0, #3] - if ((c & UART_C2_TIE) && (UART0_S1 & UART_S1_TDRE)) { - cf3e: 061e lsls r6, r3, #24 - c = UART0_C2; - cf40: b2dd uxtb r5, r3 - if ((c & UART_C2_TIE) && (UART0_S1 & UART_S1_TDRE)) { - cf42: d416 bmi.n cf72 - UART0_D = n; - tx_buffer_tail = tail; - } - } -#endif - if ((c & UART_C2_TCIE) && (UART0_S1 & UART_S1_TC)) { - cf44: 066a lsls r2, r5, #25 - cf46: d50d bpl.n cf64 - cf48: 4b26 ldr r3, [pc, #152] ; (cfe4 ) - cf4a: 791b ldrb r3, [r3, #4] - cf4c: 065b lsls r3, r3, #25 - cf4e: d509 bpl.n cf64 - transmitting = 0; - if (transmit_pin) transmit_deassert(); - cf50: 4b2c ldr r3, [pc, #176] ; (d004 ) - transmitting = 0; - cf52: 492d ldr r1, [pc, #180] ; (d008 ) - if (transmit_pin) transmit_deassert(); - cf54: 681b ldr r3, [r3, #0] - transmitting = 0; - cf56: 2200 movs r2, #0 - cf58: 700a strb r2, [r1, #0] - if (transmit_pin) transmit_deassert(); - cf5a: b103 cbz r3, cf5e - cf5c: 701a strb r2, [r3, #0] - reg &= ~UART_C3_TXDIR; - UART0_C3 = reg; - __enable_irq(); - } - #endif - UART0_C2 = C2_TX_INACTIVE; - cf5e: 4b21 ldr r3, [pc, #132] ; (cfe4 ) - cf60: 223c movs r2, #60 ; 0x3c - cf62: 70da strb r2, [r3, #3] - } -} - cf64: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - UART0_CFIFO = UART_CFIFO_RXFLUSH; - cf68: 2340 movs r3, #64 ; 0x40 - c = UART0_D; - cf6a: 79e2 ldrb r2, [r4, #7] - UART0_CFIFO = UART_CFIFO_RXFLUSH; - cf6c: 7463 strb r3, [r4, #17] - __enable_irq(); - cf6e: b662 cpsie i - cf70: e7e3 b.n cf3a - if ((c & UART_C2_TIE) && (UART0_S1 & UART_S1_TDRE)) { - cf72: 7903 ldrb r3, [r0, #4] - cf74: 061c lsls r4, r3, #24 - cf76: d5e5 bpl.n cf44 - head = tx_buffer_head; - cf78: 4b24 ldr r3, [pc, #144] ; (d00c ) - if (++tail >= tx_buffer_total_size_) tail = 0; - cf7a: 4a25 ldr r2, [pc, #148] ; (d010 ) - tail = tx_buffer_tail; - cf7c: f8df e094 ldr.w lr, [pc, #148] ; d014 - head = tx_buffer_head; - cf80: 781c ldrb r4, [r3, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - cf82: 6816 ldr r6, [r2, #0] - tail = tx_buffer_tail; - cf84: f89e 3000 ldrb.w r3, [lr] - n = tx_buffer_storage_[tail-SERIAL1_TX_BUFFER_SIZE]; - cf88: 4a23 ldr r2, [pc, #140] ; (d018 ) - n = tx_buffer[tail]; - cf8a: 4f24 ldr r7, [pc, #144] ; (d01c ) - n = tx_buffer_storage_[tail-SERIAL1_TX_BUFFER_SIZE]; - cf8c: f8d2 c000 ldr.w ip, [r2] - head = tx_buffer_head; - cf90: b2e4 uxtb r4, r4 - tail = tx_buffer_tail; - cf92: b2db uxtb r3, r3 - cf94: e007 b.n cfa6 - avail = UART0_S1; - cf96: 7903 ldrb r3, [r0, #4] - if (++tail >= tx_buffer_total_size_) tail = 0; - cf98: 2300 movs r3, #0 - n = tx_buffer[tail]; - cf9a: 5cfa ldrb r2, [r7, r3] - cf9c: b2d2 uxtb r2, r2 - UART0_D = n; - cf9e: 71c2 strb r2, [r0, #7] - } while (UART0_TCFIFO < 8); - cfa0: 7d02 ldrb r2, [r0, #20] - cfa2: 2a07 cmp r2, #7 - cfa4: d811 bhi.n cfca - if (tail == head) break; - cfa6: 42a3 cmp r3, r4 - if (++tail >= tx_buffer_total_size_) tail = 0; - cfa8: f103 0101 add.w r1, r3, #1 - if (tail == head) break; - cfac: d00e beq.n cfcc - if (++tail >= tx_buffer_total_size_) tail = 0; - cfae: 428e cmp r6, r1 - cfb0: d9f1 bls.n cf96 - if (tail < SERIAL1_TX_BUFFER_SIZE) { - cfb2: 293f cmp r1, #63 ; 0x3f - avail = UART0_S1; - cfb4: 7902 ldrb r2, [r0, #4] - n = tx_buffer_storage_[tail-SERIAL1_TX_BUFFER_SIZE]; - cfb6: f1a3 033f sub.w r3, r3, #63 ; 0x3f - if (tail < SERIAL1_TX_BUFFER_SIZE) { - cfba: d801 bhi.n cfc0 - cfbc: 460b mov r3, r1 - cfbe: e7ec b.n cf9a - n = tx_buffer_storage_[tail-SERIAL1_TX_BUFFER_SIZE]; - cfc0: f81c 2003 ldrb.w r2, [ip, r3] - cfc4: 460b mov r3, r1 - cfc6: b2d2 uxtb r2, r2 - cfc8: e7e9 b.n cf9e - tx_buffer_tail = tail; - cfca: b2dc uxtb r4, r3 - if (UART0_S1 & UART_S1_TDRE) UART0_C2 = C2_TX_COMPLETING; - cfcc: 4b05 ldr r3, [pc, #20] ; (cfe4 ) - tx_buffer_tail = tail; - cfce: f88e 4000 strb.w r4, [lr] - if (UART0_S1 & UART_S1_TDRE) UART0_C2 = C2_TX_COMPLETING; - cfd2: 791a ldrb r2, [r3, #4] - cfd4: 0611 lsls r1, r2, #24 - cfd6: bf44 itt mi - cfd8: 227c movmi r2, #124 ; 0x7c - cfda: 70da strbmi r2, [r3, #3] - cfdc: e7b2 b.n cf44 - cfde: 4694 mov ip, r2 - cfe0: e77d b.n cede - cfe2: bf00 nop - cfe4: 4006a000 .word 0x4006a000 - cfe8: 1fff97d4 .word 0x1fff97d4 - cfec: 1fff97dc .word 0x1fff97dc - cff0: 1fff880c .word 0x1fff880c - cff4: 1fff9794 .word 0x1fff9794 - cff8: 1fff97d8 .word 0x1fff97d8 - cffc: 1fff9790 .word 0x1fff9790 - d000: 1fff8804 .word 0x1fff8804 - d004: 1fff97e0 .word 0x1fff97e0 - d008: 1fff97e4 .word 0x1fff97e4 - d00c: 1fff9828 .word 0x1fff9828 - d010: 1fff8810 .word 0x1fff8810 - d014: 1fff9830 .word 0x1fff9830 - d018: 1fff982c .word 0x1fff982c - d01c: 1fff97e8 .word 0x1fff97e8 - -0000d020 : - serial_phex(n); -} - -void serial_add_memory_for_read(void *buffer, size_t length) -{ - rx_buffer_storage_ = (BUFTYPE*)buffer; - d020: 4b09 ldr r3, [pc, #36] ; (d048 ) -{ - d022: b410 push {r4} - rx_buffer_storage_ = (BUFTYPE*)buffer; - d024: 6018 str r0, [r3, #0] - if (buffer) { - d026: b160 cbz r0, d042 - rx_buffer_total_size_ = SERIAL1_RX_BUFFER_SIZE + length; - d028: f101 0440 add.w r4, r1, #64 ; 0x40 - } else { - rx_buffer_total_size_ = SERIAL1_RX_BUFFER_SIZE; - } - - rts_low_watermark_ = RTS_LOW_WATERMARK + length; - d02c: 4b07 ldr r3, [pc, #28] ; (d04c ) - d02e: 4808 ldr r0, [pc, #32] ; (d050 ) - d030: f101 021a add.w r2, r1, #26 - d034: 601a str r2, [r3, #0] - rts_high_watermark_ = RTS_HIGH_WATERMARK + length; - d036: 4b07 ldr r3, [pc, #28] ; (d054 ) - d038: 6004 str r4, [r0, #0] - d03a: 3128 adds r1, #40 ; 0x28 -} - d03c: bc10 pop {r4} - rts_high_watermark_ = RTS_HIGH_WATERMARK + length; - d03e: 6019 str r1, [r3, #0] -} - d040: 4770 bx lr - rx_buffer_total_size_ = SERIAL1_RX_BUFFER_SIZE; - d042: 2440 movs r4, #64 ; 0x40 - d044: e7f2 b.n d02c - d046: bf00 nop - d048: 1fff97d8 .word 0x1fff97d8 - d04c: 1fff8808 .word 0x1fff8808 - d050: 1fff880c .word 0x1fff880c - d054: 1fff8804 .word 0x1fff8804 - -0000d058 : - -void serial_add_memory_for_write(void *buffer, size_t length) -{ - tx_buffer_storage_ = (BUFTYPE*)buffer; - d058: 4b05 ldr r3, [pc, #20] ; (d070 ) - d05a: 6018 str r0, [r3, #0] - if (buffer) { - d05c: b118 cbz r0, d066 - tx_buffer_total_size_ = SERIAL1_TX_BUFFER_SIZE + length; - d05e: 4b05 ldr r3, [pc, #20] ; (d074 ) - d060: 3140 adds r1, #64 ; 0x40 - d062: 6019 str r1, [r3, #0] - } else { - tx_buffer_total_size_ = SERIAL1_TX_BUFFER_SIZE; - } -} - d064: 4770 bx lr - d066: 4b03 ldr r3, [pc, #12] ; (d074 ) - tx_buffer_total_size_ = SERIAL1_TX_BUFFER_SIZE; - d068: 2140 movs r1, #64 ; 0x40 - d06a: 6019 str r1, [r3, #0] -} - d06c: 4770 bx lr - d06e: bf00 nop - d070: 1fff982c .word 0x1fff982c - d074: 1fff8810 .word 0x1fff8810 - -0000d078 : -#define GPIO_BITBAND_PTR(reg, bit) ((uint32_t *)GPIO_BITBAND_ADDR((reg), (bit))) -#define C3_TXDIR_BIT 5 - -void serial2_begin(uint32_t divisor) -{ - SIM_SCGC4 |= SIM_SCGC4_UART1; // turn on clock, TODO: use bitband - d078: 4a2a ldr r2, [pc, #168] ; (d124 ) - rx_buffer_head = 0; - rx_buffer_tail = 0; - d07a: 492b ldr r1, [pc, #172] ; (d128 ) - SIM_SCGC4 |= SIM_SCGC4_UART1; // turn on clock, TODO: use bitband - d07c: 6b53 ldr r3, [r2, #52] ; 0x34 -{ - d07e: b470 push {r4, r5, r6} - SIM_SCGC4 |= SIM_SCGC4_UART1; // turn on clock, TODO: use bitband - d080: f443 6300 orr.w r3, r3, #2048 ; 0x800 - rx_buffer_head = 0; - d084: 4d29 ldr r5, [pc, #164] ; (d12c ) - SIM_SCGC4 |= SIM_SCGC4_UART1; // turn on clock, TODO: use bitband - d086: 6353 str r3, [r2, #52] ; 0x34 - tx_buffer_head = 0; - tx_buffer_tail = 0; - transmitting = 0; -#if defined(KINETISK) - switch (rx_pin_num) { - d088: 4e29 ldr r6, [pc, #164] ; (d130 ) - tx_buffer_head = 0; - d08a: 4c2a ldr r4, [pc, #168] ; (d134 ) - switch (rx_pin_num) { - d08c: 7832 ldrb r2, [r6, #0] - rx_buffer_head = 0; - d08e: 2300 movs r3, #0 - d090: 702b strb r3, [r5, #0] - rx_buffer_tail = 0; - d092: 700b strb r3, [r1, #0] - tx_buffer_tail = 0; - d094: 4928 ldr r1, [pc, #160] ; (d138 ) - tx_buffer_head = 0; - d096: 7023 strb r3, [r4, #0] - tx_buffer_tail = 0; - d098: 700b strb r3, [r1, #0] - transmitting = 0; - d09a: 4928 ldr r1, [pc, #160] ; (d13c ) - switch (rx_pin_num) { - d09c: 2a09 cmp r2, #9 - transmitting = 0; - d09e: 700b strb r3, [r1, #0] - switch (rx_pin_num) { - d0a0: d033 beq.n d10a - d0a2: 2a1a cmp r2, #26 - d0a4: d103 bne.n d0ae - case 9: CORE_PIN9_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - #if defined(__MK20DX128__) || defined(__MK20DX256__) // T3.0, T3.1, T3.2 - case 26: CORE_PIN26_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - d0a6: 4b26 ldr r3, [pc, #152] ; (d140 ) - d0a8: f240 3213 movw r2, #787 ; 0x313 - d0ac: 605a str r2, [r3, #4] - #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // T3.5 or T3.6 - case 59: CORE_PIN59_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - #endif - } - switch (tx_pin_num) { - d0ae: 4b25 ldr r3, [pc, #148] ; (d144 ) - d0b0: 781b ldrb r3, [r3, #0] - d0b2: 2b0a cmp r3, #10 - d0b4: d031 beq.n d11a - d0b6: 2b1f cmp r3, #31 - d0b8: d103 bne.n d0c2 - case 10: CORE_PIN10_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); break; - #if defined(__MK20DX128__) || defined(__MK20DX256__) // T3.0, T3.1, T3.2 - case 31: CORE_PIN31_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); break; - d0ba: 4b21 ldr r3, [pc, #132] ; (d140 ) - d0bc: f44f 7251 mov.w r2, #836 ; 0x344 - d0c0: 601a str r2, [r3, #0] -#elif defined(KINETISL) - CORE_PIN9_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); - CORE_PIN10_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); -#endif -#if defined(HAS_KINETISK_UART1) - if (divisor < 32) divisor = 32; - d0c2: 2820 cmp r0, #32 - UART1_BDH = (divisor >> 13) & 0x1F; - d0c4: 4b20 ldr r3, [pc, #128] ; (d148 ) - UART1_BDH = (divisor >> 8) & 0x1F; - UART1_BDL = divisor & 0xFF; - UART1_C1 = 0; -#endif - UART1_C2 = C2_TX_INACTIVE; - NVIC_SET_PRIORITY(IRQ_UART1_STATUS, IRQ_PRIORITY); - d0c6: 4c21 ldr r4, [pc, #132] ; (d14c ) - d0c8: bf38 it cc - d0ca: 2020 movcc r0, #32 - UART1_BDH = (divisor >> 13) & 0x1F; - d0cc: f3c0 3c44 ubfx ip, r0, #13, #5 - d0d0: f883 c000 strb.w ip, [r3] - UART1_BDL = (divisor >> 5) & 0xFF; - d0d4: f3c0 1c47 ubfx ip, r0, #5, #8 - UART1_C4 = divisor & 0x1F; - d0d8: f000 001f and.w r0, r0, #31 - UART1_BDL = (divisor >> 5) & 0xFF; - d0dc: f883 c001 strb.w ip, [r3, #1] - UART1_C1 = UART_C1_ILT; - d0e0: 2204 movs r2, #4 - UART1_C4 = divisor & 0x1F; - d0e2: 7298 strb r0, [r3, #10] - UART1_TWFIFO = 2; // tx watermark, causes S1_TDRE to set - d0e4: 2002 movs r0, #2 - UART1_C1 = UART_C1_ILT; - d0e6: 709a strb r2, [r3, #2] - UART1_TWFIFO = 2; // tx watermark, causes S1_TDRE to set - d0e8: 74d8 strb r0, [r3, #19] - UART1_PFIFO = UART_PFIFO_TXFE | UART_PFIFO_RXFE; - d0ea: 2088 movs r0, #136 ; 0x88 - UART1_RWFIFO = 4; // rx watermark, causes S1_RDRF to set - d0ec: 755a strb r2, [r3, #21] - NVIC_ENABLE_IRQ(IRQ_UART1_STATUS); - d0ee: f04f 21e0 mov.w r1, #3758153728 ; 0xe000e000 - UART1_PFIFO = UART_PFIFO_TXFE | UART_PFIFO_RXFE; - d0f2: 7418 strb r0, [r3, #16] - NVIC_SET_PRIORITY(IRQ_UART1_STATUS, IRQ_PRIORITY); - d0f4: 2240 movs r2, #64 ; 0x40 - UART1_C2 = C2_TX_INACTIVE; - d0f6: 203c movs r0, #60 ; 0x3c - d0f8: 70d8 strb r0, [r3, #3] - NVIC_SET_PRIORITY(IRQ_UART1_STATUS, IRQ_PRIORITY); - d0fa: f884 202f strb.w r2, [r4, #47] ; 0x2f - NVIC_ENABLE_IRQ(IRQ_UART1_STATUS); - d0fe: f44f 4300 mov.w r3, #32768 ; 0x8000 -} - d102: bc70 pop {r4, r5, r6} - NVIC_ENABLE_IRQ(IRQ_UART1_STATUS); - d104: f8c1 3104 str.w r3, [r1, #260] ; 0x104 -} - d108: 4770 bx lr - case 9: CORE_PIN9_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - d10a: 4b11 ldr r3, [pc, #68] ; (d150 ) - d10c: f240 3213 movw r2, #787 ; 0x313 - d110: 60da str r2, [r3, #12] - switch (tx_pin_num) { - d112: 4b0c ldr r3, [pc, #48] ; (d144 ) - d114: 781b ldrb r3, [r3, #0] - d116: 2b0a cmp r3, #10 - d118: d1cd bne.n d0b6 - case 10: CORE_PIN10_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); break; - d11a: 4b0d ldr r3, [pc, #52] ; (d150 ) - d11c: f44f 7251 mov.w r2, #836 ; 0x344 - d120: 611a str r2, [r3, #16] - d122: e7ce b.n d0c2 - d124: 40048000 .word 0x40048000 - d128: 1fff9880 .word 0x1fff9880 - d12c: 1fff9878 .word 0x1fff9878 - d130: 1fff8824 .word 0x1fff8824 - d134: 1fff98b4 .word 0x1fff98b4 - d138: 1fff98bc .word 0x1fff98bc - d13c: 1fff9888 .word 0x1fff9888 - d140: 4004d000 .word 0x4004d000 - d144: 1fff882c .word 0x1fff882c - d148: 4006b000 .word 0x4006b000 - d14c: e000e400 .word 0xe000e400 - d150: 4004b000 .word 0x4004b000 - -0000d154 : - -void serial2_format(uint32_t format) -{ - uint8_t c; - - c = UART1_C1; - d154: 4b29 ldr r3, [pc, #164] ; (d1fc ) - c = (c & ~0x13) | (format & 0x03); // configure parity - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - UART1_C1 = c; - d156: 4929 ldr r1, [pc, #164] ; (d1fc ) - c = UART1_C1; - d158: 789b ldrb r3, [r3, #2] - c = (c & ~0x13) | (format & 0x03); // configure parity - d15a: f000 0203 and.w r2, r0, #3 - d15e: f003 03ec and.w r3, r3, #236 ; 0xec - d162: 4313 orrs r3, r2 - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - d164: 0742 lsls r2, r0, #29 - if ((format & 0x0F) == 0x04) UART1_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - d166: f000 020f and.w r2, r0, #15 - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - d16a: bf48 it mi - d16c: f043 0310 orrmi.w r3, r3, #16 - if ((format & 0x0F) == 0x04) UART1_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - d170: 2a04 cmp r2, #4 - UART1_C1 = c; - d172: 708b strb r3, [r1, #2] - if ((format & 0x0F) == 0x04) UART1_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - d174: d103 bne.n d17e - d176: 798b ldrb r3, [r1, #6] - d178: f043 0340 orr.w r3, r3, #64 ; 0x40 - d17c: 718b strb r3, [r1, #6] - c = UART1_S2 & ~0x10; - d17e: 4b1f ldr r3, [pc, #124] ; (d1fc ) - d180: 795a ldrb r2, [r3, #5] - if (format & 0x10) c |= 0x10; // rx invert - d182: 06c3 lsls r3, r0, #27 - c = UART1_S2 & ~0x10; - d184: f002 02ef and.w r2, r2, #239 ; 0xef - UART1_S2 = c; - d188: 4b1c ldr r3, [pc, #112] ; (d1fc ) - if (format & 0x10) c |= 0x10; // rx invert - d18a: bf48 it mi - d18c: f042 0210 orrmi.w r2, r2, #16 - UART1_S2 = c; - d190: 715a strb r2, [r3, #5] - c = UART1_C3 & ~0x10; - d192: 799a ldrb r2, [r3, #6] - if (format & 0x20) c |= 0x10; // tx invert - d194: 0681 lsls r1, r0, #26 - c = UART1_C3 & ~0x10; - d196: f002 02ef and.w r2, r2, #239 ; 0xef - if (format & 0x20) c |= 0x10; // tx invert - d19a: d511 bpl.n d1c0 - d19c: f042 0210 orr.w r2, r2, #16 - UART1_BDH |= UART_BDH_SBNS; // Turn on 2 stop bits - was turned off by set baud - UART1_BDL = bdl; // Says BDH not acted on until BDL is written - } -#endif - // process request for half duplex. - if ((format & SERIAL_HALF_DUPLEX) != 0) { - d1a0: 0581 lsls r1, r0, #22 - UART1_C3 = c; - d1a2: 719a strb r2, [r3, #6] - if ((format & SERIAL_HALF_DUPLEX) != 0) { - d1a4: d50f bpl.n d1c6 - c = UART1_C1; - d1a6: 789a ldrb r2, [r3, #2] - uint32_t pin_cfg = PORT_PCR_PE | PORT_PCR_PFE | PORT_PCR_MUX(3); - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - CORE_PIN10_CONFIG = pin_cfg; - half_duplex_mode = 1; - #else - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - d1a8: 4915 ldr r1, [pc, #84] ; (d200 ) - c |= UART_C1_LOOPS | UART_C1_RSRC; - d1aa: f042 02a0 orr.w r2, r2, #160 ; 0xa0 - UART1_C1 = c; - d1ae: 709a strb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - d1b0: 7809 ldrb r1, [r1, #0] - d1b2: 4b14 ldr r3, [pc, #80] ; (d204 ) - d1b4: eb03 03c1 add.w r3, r3, r1, lsl #3 - uint32_t pin_cfg = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3) | PORT_PCR_PE; - d1b8: f240 3246 movw r2, #838 ; 0x346 - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - d1bc: 685b ldr r3, [r3, #4] - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - d1be: e014 b.n d1ea - UART1_C3 = c; - d1c0: 719a strb r2, [r3, #6] - if ((format & SERIAL_HALF_DUPLEX) != 0) { - d1c2: 0582 lsls r2, r0, #22 - d1c4: d405 bmi.n d1d2 - - } else { - #if defined(KINETISL) - half_duplex_mode = 0; - #else - if (transmit_pin == (uint8_t*)GPIO_BITBAND_PTR(UART1_C3, C3_TXDIR_BIT)) transmit_pin = NULL; - d1c6: 4b10 ldr r3, [pc, #64] ; (d208 ) - d1c8: 4a10 ldr r2, [pc, #64] ; (d20c ) - d1ca: 6819 ldr r1, [r3, #0] - d1cc: 4291 cmp r1, r2 - d1ce: d011 beq.n d1f4 - #endif - } -} - d1d0: 4770 bx lr - c = UART1_C1; - d1d2: 789a ldrb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - d1d4: 490a ldr r1, [pc, #40] ; (d200 ) - c |= UART_C1_LOOPS | UART_C1_RSRC; - d1d6: f042 02a0 orr.w r2, r2, #160 ; 0xa0 - UART1_C1 = c; - d1da: 709a strb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - d1dc: 7809 ldrb r1, [r1, #0] - d1de: 4b09 ldr r3, [pc, #36] ; (d204 ) - d1e0: eb03 03c1 add.w r3, r3, r1, lsl #3 - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - d1e4: f240 3247 movw r2, #839 ; 0x347 - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - d1e8: 685b ldr r3, [r3, #4] - transmit_pin = (uint8_t*)GPIO_BITBAND_PTR(UART1_C3, C3_TXDIR_BIT); - d1ea: 4907 ldr r1, [pc, #28] ; (d208 ) - d1ec: 4807 ldr r0, [pc, #28] ; (d20c ) - *reg = pin_cfg; - d1ee: 601a str r2, [r3, #0] - transmit_pin = (uint8_t*)GPIO_BITBAND_PTR(UART1_C3, C3_TXDIR_BIT); - d1f0: 6008 str r0, [r1, #0] - d1f2: 4770 bx lr - if (transmit_pin == (uint8_t*)GPIO_BITBAND_PTR(UART1_C3, C3_TXDIR_BIT)) transmit_pin = NULL; - d1f4: 2200 movs r2, #0 - d1f6: 601a str r2, [r3, #0] -} - d1f8: 4770 bx lr - d1fa: bf00 nop - d1fc: 4006b000 .word 0x4006b000 - d200: 1fff882c .word 0x1fff882c - d204: 00018614 .word 0x00018614 - d208: 1fff9884 .word 0x1fff9884 - d20c: 42d600d4 .word 0x42d600d4 - -0000d210 : - -void serial2_end(void) -{ - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return; - d210: 4b29 ldr r3, [pc, #164] ; (d2b8 ) - d212: 6b5b ldr r3, [r3, #52] ; 0x34 - d214: 051b lsls r3, r3, #20 - d216: d54d bpl.n d2b4 -{ - d218: b510 push {r4, lr} - while (transmitting) yield(); // wait for buffered data to send - d21a: 4c28 ldr r4, [pc, #160] ; (d2bc ) - d21c: 7823 ldrb r3, [r4, #0] - d21e: b123 cbz r3, d22a - d220: f001 fde8 bl edf4 - d224: 7823 ldrb r3, [r4, #0] - d226: 2b00 cmp r3, #0 - d228: d1fa bne.n d220 - NVIC_DISABLE_IRQ(IRQ_UART1_STATUS); - UART1_C2 = 0; - d22a: 4a25 ldr r2, [pc, #148] ; (d2c0 ) -#if defined(KINETISK) - switch (rx_pin_num) { - d22c: 4b25 ldr r3, [pc, #148] ; (d2c4 ) - NVIC_DISABLE_IRQ(IRQ_UART1_STATUS); - d22e: f04f 20e0 mov.w r0, #3758153728 ; 0xe000e000 - d232: f44f 4400 mov.w r4, #32768 ; 0x8000 - UART1_C2 = 0; - d236: 2100 movs r1, #0 - NVIC_DISABLE_IRQ(IRQ_UART1_STATUS); - d238: f8c0 4184 str.w r4, [r0, #388] ; 0x184 - UART1_C2 = 0; - d23c: 70d1 strb r1, [r2, #3] - switch (rx_pin_num) { - d23e: 781b ldrb r3, [r3, #0] - d240: 2b09 cmp r3, #9 - d242: d02c beq.n d29e - d244: 2b1a cmp r3, #26 - d246: d01b beq.n d280 - case 26: CORE_PIN26_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; // PTE1 - #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // T3.5, T3.6 - case 59: CORE_PIN59_CONFIG = 0; break; - #endif - } - switch (tx_pin_num & 127) { - d248: 4b1f ldr r3, [pc, #124] ; (d2c8 ) - d24a: 781b ldrb r3, [r3, #0] - d24c: f003 037f and.w r3, r3, #127 ; 0x7f - d250: 2b0a cmp r3, #10 - d252: d01f beq.n d294 - d254: 2b1f cmp r3, #31 - d256: d00e beq.n d276 -#endif - UART1_S1; - UART1_D; // clear leftover error status - rx_buffer_head = 0; - rx_buffer_tail = 0; - if (rts_pin) rts_deassert(); - d258: 4b1c ldr r3, [pc, #112] ; (d2cc ) - UART1_S1; - d25a: 4a19 ldr r2, [pc, #100] ; (d2c0 ) - rx_buffer_head = 0; - d25c: 4c1c ldr r4, [pc, #112] ; (d2d0 ) - rx_buffer_tail = 0; - d25e: 481d ldr r0, [pc, #116] ; (d2d4 ) - if (rts_pin) rts_deassert(); - d260: 6819 ldr r1, [r3, #0] - UART1_S1; - d262: f892 c004 ldrb.w ip, [r2, #4] - UART1_D; // clear leftover error status - d266: 79d2 ldrb r2, [r2, #7] - rx_buffer_head = 0; - d268: 2300 movs r3, #0 - d26a: 7023 strb r3, [r4, #0] - rx_buffer_tail = 0; - d26c: 7003 strb r3, [r0, #0] - if (rts_pin) rts_deassert(); - d26e: b109 cbz r1, d274 - d270: 2301 movs r3, #1 - d272: 700b strb r3, [r1, #0] -} - d274: bd10 pop {r4, pc} - case 31: CORE_PIN31_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; // PTE0 - d276: 4b18 ldr r3, [pc, #96] ; (d2d8 ) - d278: f240 1203 movw r2, #259 ; 0x103 - d27c: 601a str r2, [r3, #0] - d27e: e7eb b.n d258 - case 26: CORE_PIN26_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; // PTE1 - d280: 4b15 ldr r3, [pc, #84] ; (d2d8 ) - d282: f240 1203 movw r2, #259 ; 0x103 - d286: 605a str r2, [r3, #4] - switch (tx_pin_num & 127) { - d288: 4b0f ldr r3, [pc, #60] ; (d2c8 ) - d28a: 781b ldrb r3, [r3, #0] - d28c: f003 037f and.w r3, r3, #127 ; 0x7f - d290: 2b0a cmp r3, #10 - d292: d1df bne.n d254 - case 10: CORE_PIN10_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; // PTC4 - d294: 4b11 ldr r3, [pc, #68] ; (d2dc ) - d296: f240 1203 movw r2, #259 ; 0x103 - d29a: 611a str r2, [r3, #16] - d29c: e7dc b.n d258 - case 9: CORE_PIN9_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); break; // PTC3 - d29e: 4b0f ldr r3, [pc, #60] ; (d2dc ) - d2a0: f240 1203 movw r2, #259 ; 0x103 - d2a4: 60da str r2, [r3, #12] - switch (tx_pin_num & 127) { - d2a6: 4b08 ldr r3, [pc, #32] ; (d2c8 ) - d2a8: 781b ldrb r3, [r3, #0] - d2aa: f003 037f and.w r3, r3, #127 ; 0x7f - d2ae: 2b0a cmp r3, #10 - d2b0: d1d0 bne.n d254 - d2b2: e7ef b.n d294 - d2b4: 4770 bx lr - d2b6: bf00 nop - d2b8: 40048000 .word 0x40048000 - d2bc: 1fff9888 .word 0x1fff9888 - d2c0: 4006b000 .word 0x4006b000 - d2c4: 1fff8824 .word 0x1fff8824 - d2c8: 1fff882c .word 0x1fff882c - d2cc: 1fff9834 .word 0x1fff9834 - d2d0: 1fff9878 .word 0x1fff9878 - d2d4: 1fff9880 .word 0x1fff9880 - d2d8: 4004d000 .word 0x4004d000 - d2dc: 4004b000 .word 0x4004b000 - -0000d2e0 : - -void serial2_set_transmit_pin(uint8_t pin) -{ - while (transmitting) ; - d2e0: 4a0a ldr r2, [pc, #40] ; (d30c ) -{ - d2e2: b538 push {r3, r4, r5, lr} - d2e4: 4605 mov r5, r0 - while (transmitting) ; - d2e6: 7813 ldrb r3, [r2, #0] - d2e8: f003 04ff and.w r4, r3, #255 ; 0xff - d2ec: 2b00 cmp r3, #0 - d2ee: d1fa bne.n d2e6 - pinMode(pin, OUTPUT); - d2f0: 2101 movs r1, #1 - d2f2: 4628 mov r0, r5 - d2f4: f7ff f978 bl c5e8 - digitalWrite(pin, LOW); - d2f8: 4621 mov r1, r4 - d2fa: 4628 mov r0, r5 - d2fc: f7ff f940 bl c580 - transmit_pin = portOutputRegister(pin); - d300: 4a03 ldr r2, [pc, #12] ; (d310 ) - d302: 4b04 ldr r3, [pc, #16] ; (d314 ) - d304: f852 2035 ldr.w r2, [r2, r5, lsl #3] - d308: 601a str r2, [r3, #0] - #if defined(KINETISL) - transmit_mask = digitalPinToBitMask(pin); - #endif -} - d30a: bd38 pop {r3, r4, r5, pc} - d30c: 1fff9888 .word 0x1fff9888 - d310: 00018614 .word 0x00018614 - d314: 1fff9884 .word 0x1fff9884 - -0000d318 : -void serial2_set_tx(uint8_t pin, uint8_t opendrain) -{ - #if defined(KINETISK) - uint32_t cfg; - - if (opendrain) pin |= 128; - d318: b109 cbz r1, d31e - d31a: f040 0080 orr.w r0, r0, #128 ; 0x80 - if (pin == tx_pin_num) return; - d31e: 4a19 ldr r2, [pc, #100] ; (d384 ) - d320: 7813 ldrb r3, [r2, #0] - d322: 4283 cmp r3, r0 - d324: d017 beq.n d356 -{ - d326: b410 push {r4} - if ((SIM_SCGC4 & SIM_SCGC4_UART1)) { - d328: 4c17 ldr r4, [pc, #92] ; (d388 ) - d32a: 6b64 ldr r4, [r4, #52] ; 0x34 - d32c: 0524 lsls r4, r4, #20 - d32e: d50f bpl.n d350 - switch (tx_pin_num & 127) { - d330: f003 037f and.w r3, r3, #127 ; 0x7f - d334: 2b0a cmp r3, #10 - d336: d021 beq.n d37c - d338: 2b1f cmp r3, #31 - d33a: d014 beq.n d366 - #endif - } - if (opendrain) { - cfg = PORT_PCR_DSE | PORT_PCR_ODE; - } else { - cfg = PORT_PCR_DSE | PORT_PCR_SRE; - d33c: 2900 cmp r1, #0 - d33e: f000 037f and.w r3, r0, #127 ; 0x7f - d342: bf14 ite ne - d344: 2160 movne r1, #96 ; 0x60 - d346: 2144 moveq r1, #68 ; 0x44 - } - switch (pin & 127) { - d348: 2b0a cmp r3, #10 - d34a: d010 beq.n d36e - d34c: 2b1f cmp r3, #31 - d34e: d003 beq.n d358 - #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // T3.5, T3.6 - case 58: CORE_PIN58_CONFIG = cfg | PORT_PCR_MUX(3); break; - #endif - } - } - tx_pin_num = pin; - d350: 7010 strb r0, [r2, #0] - #endif -} - d352: bc10 pop {r4} - d354: 4770 bx lr - d356: 4770 bx lr - case 31: CORE_PIN31_CONFIG = cfg | PORT_PCR_MUX(3); break; - d358: 4b0c ldr r3, [pc, #48] ; (d38c ) - d35a: f441 7140 orr.w r1, r1, #768 ; 0x300 - d35e: 6019 str r1, [r3, #0] - tx_pin_num = pin; - d360: 7010 strb r0, [r2, #0] -} - d362: bc10 pop {r4} - d364: 4770 bx lr - case 31: CORE_PIN31_CONFIG = 0; break; // PTE0 - d366: 4b09 ldr r3, [pc, #36] ; (d38c ) - d368: 2400 movs r4, #0 - d36a: 601c str r4, [r3, #0] - d36c: e7e6 b.n d33c - case 10: CORE_PIN10_CONFIG = cfg | PORT_PCR_MUX(3); break; - d36e: 4b08 ldr r3, [pc, #32] ; (d390 ) - d370: f441 7140 orr.w r1, r1, #768 ; 0x300 - d374: 6119 str r1, [r3, #16] - tx_pin_num = pin; - d376: 7010 strb r0, [r2, #0] -} - d378: bc10 pop {r4} - d37a: 4770 bx lr - case 10: CORE_PIN10_CONFIG = 0; break; // PTC4 - d37c: 4b04 ldr r3, [pc, #16] ; (d390 ) - d37e: 2400 movs r4, #0 - d380: 611c str r4, [r3, #16] - d382: e7db b.n d33c - d384: 1fff882c .word 0x1fff882c - d388: 40048000 .word 0x40048000 - d38c: 4004d000 .word 0x4004d000 - d390: 4004b000 .word 0x4004b000 - -0000d394 : - -void serial2_set_rx(uint8_t pin) -{ - #if defined(KINETISK) - if (pin == rx_pin_num) return; - d394: 4b12 ldr r3, [pc, #72] ; (d3e0 ) - d396: 781a ldrb r2, [r3, #0] - d398: 4282 cmp r2, r0 - d39a: d00c beq.n d3b6 - if ((SIM_SCGC4 & SIM_SCGC4_UART1)) { - d39c: 4911 ldr r1, [pc, #68] ; (d3e4 ) - d39e: 6b49 ldr r1, [r1, #52] ; 0x34 - d3a0: 0509 lsls r1, r1, #20 - d3a2: d507 bpl.n d3b4 - switch (rx_pin_num) { - d3a4: 2a09 cmp r2, #9 - d3a6: d016 beq.n d3d6 - d3a8: 2a1a cmp r2, #26 - d3aa: d00a beq.n d3c2 - case 26: CORE_PIN26_CONFIG = 0; break; // PTE1 - #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // T3.5, T3.6 - case 59: CORE_PIN59_CONFIG = 0; break; - #endif - } - switch (pin) { - d3ac: 2809 cmp r0, #9 - d3ae: d00d beq.n d3cc - d3b0: 281a cmp r0, #26 - d3b2: d001 beq.n d3b8 - #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // T3.5, T3.6 - case 59: CORE_PIN59_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - #endif - } - } - rx_pin_num = pin; - d3b4: 7018 strb r0, [r3, #0] - #endif -} - d3b6: 4770 bx lr - case 26: CORE_PIN26_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - d3b8: 4a0b ldr r2, [pc, #44] ; (d3e8 ) - d3ba: f240 3113 movw r1, #787 ; 0x313 - d3be: 6051 str r1, [r2, #4] - d3c0: e7f8 b.n d3b4 - case 26: CORE_PIN26_CONFIG = 0; break; // PTE1 - d3c2: 4a09 ldr r2, [pc, #36] ; (d3e8 ) - d3c4: 2100 movs r1, #0 - switch (pin) { - d3c6: 2809 cmp r0, #9 - case 26: CORE_PIN26_CONFIG = 0; break; // PTE1 - d3c8: 6051 str r1, [r2, #4] - switch (pin) { - d3ca: d1f1 bne.n d3b0 - case 9: CORE_PIN9_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; - d3cc: 4a07 ldr r2, [pc, #28] ; (d3ec ) - d3ce: f240 3113 movw r1, #787 ; 0x313 - d3d2: 60d1 str r1, [r2, #12] - d3d4: e7ee b.n d3b4 - case 9: CORE_PIN9_CONFIG = 0; break; // PTC3 - d3d6: 4a05 ldr r2, [pc, #20] ; (d3ec ) - d3d8: 2100 movs r1, #0 - d3da: 60d1 str r1, [r2, #12] - d3dc: e7e6 b.n d3ac - d3de: bf00 nop - d3e0: 1fff8824 .word 0x1fff8824 - d3e4: 40048000 .word 0x40048000 - d3e8: 4004d000 .word 0x4004d000 - d3ec: 4004b000 .word 0x4004b000 - -0000d3f0 : - -int serial2_set_rts(uint8_t pin) -{ - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return 0; - d3f0: 4b0d ldr r3, [pc, #52] ; (d428 ) - d3f2: 6b5b ldr r3, [r3, #52] ; 0x34 - d3f4: f413 6300 ands.w r3, r3, #2048 ; 0x800 - d3f8: d013 beq.n d422 - if (pin < CORE_NUM_DIGITAL) { - d3fa: 2821 cmp r0, #33 ; 0x21 - d3fc: d903 bls.n d406 - rts_mask = digitalPinToBitMask(pin); - #endif - pinMode(pin, OUTPUT); - rts_assert(); - } else { - rts_pin = NULL; - d3fe: 4b0b ldr r3, [pc, #44] ; (d42c ) - d400: 2000 movs r0, #0 - d402: 6018 str r0, [r3, #0] - return 0; - d404: 4770 bx lr - rts_pin = portOutputRegister(pin); - d406: 4b0a ldr r3, [pc, #40] ; (d430 ) -{ - d408: b510 push {r4, lr} - rts_pin = portOutputRegister(pin); - d40a: 4c08 ldr r4, [pc, #32] ; (d42c ) - d40c: f853 3030 ldr.w r3, [r3, r0, lsl #3] - d410: 6023 str r3, [r4, #0] - pinMode(pin, OUTPUT); - d412: 2101 movs r1, #1 - d414: f7ff f8e8 bl c5e8 - rts_assert(); - d418: 6823 ldr r3, [r4, #0] - d41a: 2200 movs r2, #0 - d41c: 701a strb r2, [r3, #0] - UART1_MODEM &= ~UART_MODEM_RXRTSE; - return 0; - } - UART1_MODEM |= UART_MODEM_RXRTSE; -*/ - return 1; - d41e: 2001 movs r0, #1 -} - d420: bd10 pop {r4, pc} - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return 0; - d422: 4618 mov r0, r3 -} - d424: 4770 bx lr - d426: bf00 nop - d428: 40048000 .word 0x40048000 - d42c: 1fff9834 .word 0x1fff9834 - d430: 00018614 .word 0x00018614 - -0000d434 : - -int serial2_set_cts(uint8_t pin) -{ -#if defined(KINETISK) - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return 0; - d434: 4b0c ldr r3, [pc, #48] ; (d468 ) - d436: 6b5b ldr r3, [r3, #52] ; 0x34 - d438: f413 6300 ands.w r3, r3, #2048 ; 0x800 - d43c: d012 beq.n d464 - if (pin == 23) { - d43e: 2817 cmp r0, #23 - d440: d109 bne.n d456 - CORE_PIN23_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_PE; // weak pulldown - d442: 4b0a ldr r3, [pc, #40] ; (d46c ) - #endif - } else { - UART1_MODEM &= ~UART_MODEM_TXCTSE; - return 0; - } - UART1_MODEM |= UART_MODEM_TXCTSE; - d444: 4a0a ldr r2, [pc, #40] ; (d470 ) - CORE_PIN23_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_PE; // weak pulldown - d446: f240 3102 movw r1, #770 ; 0x302 - d44a: 6099 str r1, [r3, #8] - UART1_MODEM |= UART_MODEM_TXCTSE; - d44c: 7b53 ldrb r3, [r2, #13] - return 1; - d44e: 2001 movs r0, #1 - UART1_MODEM |= UART_MODEM_TXCTSE; - d450: 4303 orrs r3, r0 - d452: 7353 strb r3, [r2, #13] - return 1; - d454: 4770 bx lr - UART1_MODEM &= ~UART_MODEM_TXCTSE; - d456: 4a06 ldr r2, [pc, #24] ; (d470 ) - d458: 7b53 ldrb r3, [r2, #13] - d45a: f003 03fe and.w r3, r3, #254 ; 0xfe - return 0; - d45e: 2000 movs r0, #0 - UART1_MODEM &= ~UART_MODEM_TXCTSE; - d460: 7353 strb r3, [r2, #13] - return 0; - d462: 4770 bx lr - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return 0; - d464: 4618 mov r0, r3 -#else - return 0; -#endif -} - d466: 4770 bx lr - d468: 40048000 .word 0x40048000 - d46c: 4004b000 .word 0x4004b000 - d470: 4006b000 .word 0x4006b000 - -0000d474 : - -void serial2_putchar(uint32_t c) -{ - d474: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - uint32_t head, n; - - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return; - d478: 4b33 ldr r3, [pc, #204] ; (d548 ) - d47a: 6b5b ldr r3, [r3, #52] ; 0x34 - d47c: 051a lsls r2, r3, #20 - d47e: d53a bpl.n d4f6 - if (transmit_pin) transmit_assert(); - d480: 4b32 ldr r3, [pc, #200] ; (d54c ) - d482: 681b ldr r3, [r3, #0] - d484: 4606 mov r6, r0 - d486: b10b cbz r3, d48c - d488: 2201 movs r2, #1 - d48a: 701a strb r2, [r3, #0] - reg |= UART_C3_TXDIR; - UART1_C3 = reg; - __enable_irq(); - } - #endif - head = tx_buffer_head; - d48c: f8df 90c0 ldr.w r9, [pc, #192] ; d550 - if (++head >= tx_buffer_total_size_) head = 0; - d490: f8df 80c0 ldr.w r8, [pc, #192] ; d554 - head = tx_buffer_head; - d494: f899 4000 ldrb.w r4, [r9] - if (++head >= tx_buffer_total_size_) head = 0; - d498: f8d8 3000 ldr.w r3, [r8] - while (tx_buffer_tail == head) { - d49c: 4d2e ldr r5, [pc, #184] ; (d558 ) - if (++head >= tx_buffer_total_size_) head = 0; - d49e: 3401 adds r4, #1 - d4a0: 42a3 cmp r3, r4 - while (tx_buffer_tail == head) { - d4a2: 782b ldrb r3, [r5, #0] - if (++head >= tx_buffer_total_size_) head = 0; - d4a4: d929 bls.n d4fa - while (tx_buffer_tail == head) { - d4a6: 429c cmp r4, r3 - tx_buffer[head] = c; - } else { - tx_buffer_storage_[head - SERIAL2_TX_BUFFER_SIZE] = c; - } - transmitting = 1; - tx_buffer_head = head; - d4a8: fa5f fa84 uxtb.w sl, r4 - while (tx_buffer_tail == head) { - d4ac: d114 bne.n d4d8 - if ((UART1_S1 & UART_S1_TDRE)) { - d4ae: 4f2b ldr r7, [pc, #172] ; (d55c ) - n = tx_buffer[tail]; - d4b0: f8df b0ac ldr.w fp, [pc, #172] ; d560 - d4b4: e005 b.n d4c2 - if ((UART1_S1 & UART_S1_TDRE)) { - d4b6: 793b ldrb r3, [r7, #4] - d4b8: 061b lsls r3, r3, #24 - d4ba: d423 bmi.n d504 - while (tx_buffer_tail == head) { - d4bc: 782b ldrb r3, [r5, #0] - d4be: 42a3 cmp r3, r4 - d4c0: d10a bne.n d4d8 - int priority = nvic_execution_priority(); - d4c2: f7fe fde7 bl c094 - if (priority <= IRQ_PRIORITY) { - d4c6: 2840 cmp r0, #64 ; 0x40 - d4c8: ddf5 ble.n d4b6 - } else if (priority >= 256) { - d4ca: 28ff cmp r0, #255 ; 0xff - d4cc: ddf6 ble.n d4bc - yield(); // wait - d4ce: f001 fc91 bl edf4 - while (tx_buffer_tail == head) { - d4d2: 782b ldrb r3, [r5, #0] - d4d4: 42a3 cmp r3, r4 - d4d6: d0f4 beq.n d4c2 - if (head < SERIAL2_TX_BUFFER_SIZE) { - d4d8: 2c27 cmp r4, #39 ; 0x27 - d4da: d929 bls.n d530 - tx_buffer_storage_[head - SERIAL2_TX_BUFFER_SIZE] = c; - d4dc: 4b21 ldr r3, [pc, #132] ; (d564 ) - d4de: 3c28 subs r4, #40 ; 0x28 - d4e0: 681b ldr r3, [r3, #0] - d4e2: b2f6 uxtb r6, r6 - d4e4: 551e strb r6, [r3, r4] - transmitting = 1; - d4e6: 4a20 ldr r2, [pc, #128] ; (d568 ) - UART1_C2 = C2_TX_ACTIVE; - d4e8: 4b1c ldr r3, [pc, #112] ; (d55c ) - transmitting = 1; - d4ea: 2101 movs r1, #1 - d4ec: 7011 strb r1, [r2, #0] - UART1_C2 = C2_TX_ACTIVE; - d4ee: 22bc movs r2, #188 ; 0xbc - tx_buffer_head = head; - d4f0: f889 a000 strb.w sl, [r9] - UART1_C2 = C2_TX_ACTIVE; - d4f4: 70da strb r2, [r3, #3] -} - d4f6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - while (tx_buffer_tail == head) { - d4fa: f003 0aff and.w sl, r3, #255 ; 0xff - d4fe: b9a3 cbnz r3, d52a - if (++head >= tx_buffer_total_size_) head = 0; - d500: 4654 mov r4, sl - d502: e7d4 b.n d4ae - uint32_t tail = tx_buffer_tail; - d504: 782b ldrb r3, [r5, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - d506: f8d8 1000 ldr.w r1, [r8] - d50a: 1c5a adds r2, r3, #1 - d50c: 4291 cmp r1, r2 - uint32_t tail = tx_buffer_tail; - d50e: b2db uxtb r3, r3 - if (++tail >= tx_buffer_total_size_) tail = 0; - d510: d908 bls.n d524 - if (tail < SERIAL2_TX_BUFFER_SIZE) { - d512: 2a27 cmp r2, #39 ; 0x27 - d514: d810 bhi.n d538 - tx_buffer_tail = tail; - d516: b2d1 uxtb r1, r2 - n = tx_buffer[tail]; - d518: f81b 3002 ldrb.w r3, [fp, r2] - d51c: b2db uxtb r3, r3 - UART1_D = n; - d51e: 71fb strb r3, [r7, #7] - tx_buffer_tail = tail; - d520: 7029 strb r1, [r5, #0] - d522: e7cb b.n d4bc - d524: 2100 movs r1, #0 - if (++tail >= tx_buffer_total_size_) tail = 0; - d526: 460a mov r2, r1 - d528: e7f6 b.n d518 - while (tx_buffer_tail == head) { - d52a: f04f 0a00 mov.w sl, #0 - if (++head >= tx_buffer_total_size_) head = 0; - d52e: 4654 mov r4, sl - tx_buffer[head] = c; - d530: 4b0b ldr r3, [pc, #44] ; (d560 ) - d532: b2f6 uxtb r6, r6 - d534: 551e strb r6, [r3, r4] - d536: e7d6 b.n d4e6 - tx_buffer_tail = tail; - d538: b2d1 uxtb r1, r2 - n = tx_buffer_storage_[tail-SERIAL2_TX_BUFFER_SIZE]; - d53a: 4a0a ldr r2, [pc, #40] ; (d564 ) - d53c: 3b27 subs r3, #39 ; 0x27 - d53e: 6812 ldr r2, [r2, #0] - d540: 5cd3 ldrb r3, [r2, r3] - d542: b2db uxtb r3, r3 - d544: e7eb b.n d51e - d546: bf00 nop - d548: 40048000 .word 0x40048000 - d54c: 1fff9884 .word 0x1fff9884 - d550: 1fff98b4 .word 0x1fff98b4 - d554: 1fff8828 .word 0x1fff8828 - d558: 1fff98bc .word 0x1fff98bc - d55c: 4006b000 .word 0x4006b000 - d560: 1fff988c .word 0x1fff988c - d564: 1fff98b8 .word 0x1fff98b8 - d568: 1fff9888 .word 0x1fff9888 - -0000d56c : - -#ifdef HAS_KINETISK_UART1_FIFO -void serial2_write(const void *buf, unsigned int count) -{ - d56c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - const uint8_t *p = (const uint8_t *)buf; - const uint8_t *end = p + count; - uint32_t head, n; - - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return; - d570: 4b39 ldr r3, [pc, #228] ; (d658 ) - d572: 6b5b ldr r3, [r3, #52] ; 0x34 - d574: 051a lsls r2, r3, #20 - d576: d53c bpl.n d5f2 - if (transmit_pin) transmit_assert(); - d578: 4b38 ldr r3, [pc, #224] ; (d65c ) - d57a: 681b ldr r3, [r3, #0] - d57c: b10b cbz r3, d582 - d57e: 2201 movs r2, #1 - d580: 701a strb r2, [r3, #0] - const uint8_t *end = p + count; - d582: 1847 adds r7, r0, r1 - while (p < end) { - d584: 42b8 cmp r0, r7 - d586: d231 bcs.n d5ec - d588: 4e35 ldr r6, [pc, #212] ; (d660 ) - d58a: f8df 80d8 ldr.w r8, [pc, #216] ; d664 - d58e: 4c36 ldr r4, [pc, #216] ; (d668 ) - head = tx_buffer_head; - if (++head >= tx_buffer_total_size_) head = 0; - if (tx_buffer_tail == head) { - UART1_C2 = C2_TX_ACTIVE; - d590: f8df 90d8 ldr.w r9, [pc, #216] ; d66c - d594: f100 0a01 add.w sl, r0, #1 - d598: e013 b.n d5c2 - if (tx_buffer_tail == head) { - d59a: f003 0bff and.w fp, r3, #255 ; 0xff - d59e: b353 cbz r3, d5f6 - d5a0: f04f 0b00 mov.w fp, #0 - d5a4: 465d mov r5, fp - yield(); - } - } while (tx_buffer_tail == head); - } - if (head < SERIAL2_TX_BUFFER_SIZE) { - tx_buffer[head] = *p++; - d5a6: 4a32 ldr r2, [pc, #200] ; (d670 ) - d5a8: f81a 3c01 ldrb.w r3, [sl, #-1] - d5ac: 5553 strb r3, [r2, r5] - d5ae: 4652 mov r2, sl - } else { - tx_buffer_storage_[head - SERIAL2_TX_BUFFER_SIZE] = *p++; - } - transmitting = 1; - d5b0: 4930 ldr r1, [pc, #192] ; (d674 ) - d5b2: 2301 movs r3, #1 - while (p < end) { - d5b4: 42ba cmp r2, r7 - transmitting = 1; - d5b6: 700b strb r3, [r1, #0] - while (p < end) { - d5b8: f10a 0a01 add.w sl, sl, #1 - tx_buffer_head = head; - d5bc: f886 b000 strb.w fp, [r6] - while (p < end) { - d5c0: d214 bcs.n d5ec - head = tx_buffer_head; - d5c2: 7835 ldrb r5, [r6, #0] - if (++head >= tx_buffer_total_size_) head = 0; - d5c4: f8d8 3000 ldr.w r3, [r8] - d5c8: 3501 adds r5, #1 - d5ca: 42ab cmp r3, r5 - if (tx_buffer_tail == head) { - d5cc: 7823 ldrb r3, [r4, #0] - if (++head >= tx_buffer_total_size_) head = 0; - d5ce: d9e4 bls.n d59a - if (tx_buffer_tail == head) { - d5d0: 42ab cmp r3, r5 - tx_buffer_head = head; - d5d2: fa5f fb85 uxtb.w fp, r5 - if (tx_buffer_tail == head) { - d5d6: d00f beq.n d5f8 - if (head < SERIAL2_TX_BUFFER_SIZE) { - d5d8: 2d27 cmp r5, #39 ; 0x27 - d5da: d9e4 bls.n d5a6 - tx_buffer_storage_[head - SERIAL2_TX_BUFFER_SIZE] = *p++; - d5dc: 4b26 ldr r3, [pc, #152] ; (d678 ) - d5de: f81a 2c01 ldrb.w r2, [sl, #-1] - d5e2: 681b ldr r3, [r3, #0] - d5e4: 3d28 subs r5, #40 ; 0x28 - d5e6: 555a strb r2, [r3, r5] - d5e8: 4652 mov r2, sl - d5ea: e7e1 b.n d5b0 - } - UART1_C2 = C2_TX_ACTIVE; - d5ec: 4b1f ldr r3, [pc, #124] ; (d66c ) - d5ee: 22bc movs r2, #188 ; 0xbc - d5f0: 70da strb r2, [r3, #3] -} - d5f2: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (tx_buffer_tail == head) { - d5f6: 465d mov r5, fp - UART1_C2 = C2_TX_ACTIVE; - d5f8: f06f 0343 mvn.w r3, #67 ; 0x43 - d5fc: f889 3003 strb.w r3, [r9, #3] - d600: e006 b.n d610 - if ((UART1_S1 & UART_S1_TDRE)) { - d602: f899 3004 ldrb.w r3, [r9, #4] - d606: 061b lsls r3, r3, #24 - d608: d40b bmi.n d622 - } while (tx_buffer_tail == head); - d60a: 7823 ldrb r3, [r4, #0] - d60c: 42ab cmp r3, r5 - d60e: d1e3 bne.n d5d8 - int priority = nvic_execution_priority(); - d610: f7fe fd40 bl c094 - if (priority <= IRQ_PRIORITY) { - d614: 2840 cmp r0, #64 ; 0x40 - d616: ddf4 ble.n d602 - } else if (priority >= 256) { - d618: 28ff cmp r0, #255 ; 0xff - d61a: ddf6 ble.n d60a - yield(); - d61c: f001 fbea bl edf4 - d620: e7f3 b.n d60a - uint32_t tail = tx_buffer_tail; - d622: 7823 ldrb r3, [r4, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - d624: f8d8 1000 ldr.w r1, [r8] - d628: 1c5a adds r2, r3, #1 - d62a: 4291 cmp r1, r2 - uint32_t tail = tx_buffer_tail; - d62c: b2db uxtb r3, r3 - if (++tail >= tx_buffer_total_size_) tail = 0; - d62e: d903 bls.n d638 - if (tail < SERIAL2_TX_BUFFER_SIZE) { - d630: 2a27 cmp r2, #39 ; 0x27 - d632: d80a bhi.n d64a - tx_buffer_tail = tail; - d634: b2d1 uxtb r1, r2 - d636: e001 b.n d63c - d638: 2100 movs r1, #0 - if (++tail >= tx_buffer_total_size_) tail = 0; - d63a: 460a mov r2, r1 - n = tx_buffer[tail]; - d63c: 4b0c ldr r3, [pc, #48] ; (d670 ) - d63e: 5c9b ldrb r3, [r3, r2] - d640: b2db uxtb r3, r3 - UART1_D = n; - d642: f889 3007 strb.w r3, [r9, #7] - tx_buffer_tail = tail; - d646: 7021 strb r1, [r4, #0] - d648: e7df b.n d60a - d64a: b2d1 uxtb r1, r2 - n = tx_buffer_storage_[tail-SERIAL2_TX_BUFFER_SIZE]; - d64c: 4a0a ldr r2, [pc, #40] ; (d678 ) - d64e: 3b27 subs r3, #39 ; 0x27 - d650: 6812 ldr r2, [r2, #0] - d652: 5cd3 ldrb r3, [r2, r3] - d654: b2db uxtb r3, r3 - d656: e7f4 b.n d642 - d658: 40048000 .word 0x40048000 - d65c: 1fff9884 .word 0x1fff9884 - d660: 1fff98b4 .word 0x1fff98b4 - d664: 1fff8828 .word 0x1fff8828 - d668: 1fff98bc .word 0x1fff98bc - d66c: 4006b000 .word 0x4006b000 - d670: 1fff988c .word 0x1fff988c - d674: 1fff9888 .word 0x1fff9888 - d678: 1fff98b8 .word 0x1fff98b8 - -0000d67c : - while (count-- > 0) serial2_putchar(*p++); -} -#endif - -void serial2_flush(void) -{ - d67c: b510 push {r4, lr} - while (transmitting) yield(); // wait - d67e: 4c04 ldr r4, [pc, #16] ; (d690 ) - d680: 7823 ldrb r3, [r4, #0] - d682: b123 cbz r3, d68e - d684: f001 fbb6 bl edf4 - d688: 7823 ldrb r3, [r4, #0] - d68a: 2b00 cmp r3, #0 - d68c: d1fa bne.n d684 -} - d68e: bd10 pop {r4, pc} - d690: 1fff9888 .word 0x1fff9888 - -0000d694 : - -int serial2_write_buffer_free(void) -{ - uint32_t head, tail; - - head = tx_buffer_head; - d694: 4a08 ldr r2, [pc, #32] ; (d6b8 ) - tail = tx_buffer_tail; - d696: 4b09 ldr r3, [pc, #36] ; (d6bc ) - head = tx_buffer_head; - d698: 7811 ldrb r1, [r2, #0] - tail = tx_buffer_tail; - d69a: 781a ldrb r2, [r3, #0] - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - d69c: 4291 cmp r1, r2 - head = tx_buffer_head; - d69e: b2c8 uxtb r0, r1 - tail = tx_buffer_tail; - d6a0: b2d3 uxtb r3, r2 - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - d6a2: d202 bcs.n d6aa - return tail - head - 1; - d6a4: 3b01 subs r3, #1 - d6a6: 1a18 subs r0, r3, r0 -} - d6a8: 4770 bx lr - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - d6aa: 4a05 ldr r2, [pc, #20] ; (d6c0 ) - d6ac: 6812 ldr r2, [r2, #0] - d6ae: 3a01 subs r2, #1 - d6b0: 4413 add r3, r2 - d6b2: 1a18 subs r0, r3, r0 - d6b4: 4770 bx lr - d6b6: bf00 nop - d6b8: 1fff98b4 .word 0x1fff98b4 - d6bc: 1fff98bc .word 0x1fff98bc - d6c0: 1fff8828 .word 0x1fff8828 - -0000d6c4 : - -int serial2_available(void) -{ - uint32_t head, tail; - - head = rx_buffer_head; - d6c4: 4a06 ldr r2, [pc, #24] ; (d6e0 ) - tail = rx_buffer_tail; - d6c6: 4b07 ldr r3, [pc, #28] ; (d6e4 ) - head = rx_buffer_head; - d6c8: 7811 ldrb r1, [r2, #0] - tail = rx_buffer_tail; - d6ca: 781a ldrb r2, [r3, #0] - if (head >= tail) return head - tail; - d6cc: 4291 cmp r1, r2 - tail = rx_buffer_tail; - d6ce: b2d0 uxtb r0, r2 - return rx_buffer_total_size_ + head - tail; - d6d0: bf3c itt cc - d6d2: 4a05 ldrcc r2, [pc, #20] ; (d6e8 ) - d6d4: 6812 ldrcc r2, [r2, #0] - head = rx_buffer_head; - d6d6: b2cb uxtb r3, r1 - return rx_buffer_total_size_ + head - tail; - d6d8: bf38 it cc - d6da: 189b addcc r3, r3, r2 - d6dc: 1a18 subs r0, r3, r0 -} - d6de: 4770 bx lr - d6e0: 1fff9878 .word 0x1fff9878 - d6e4: 1fff9880 .word 0x1fff9880 - d6e8: 1fff8820 .word 0x1fff8820 - -0000d6ec : -int serial2_getchar(void) -{ - uint32_t head, tail; - int c; - - head = rx_buffer_head; - d6ec: 4b1b ldr r3, [pc, #108] ; (d75c ) - tail = rx_buffer_tail; - d6ee: 491c ldr r1, [pc, #112] ; (d760 ) - head = rx_buffer_head; - d6f0: 781a ldrb r2, [r3, #0] - tail = rx_buffer_tail; - d6f2: 780b ldrb r3, [r1, #0] - if (head == tail) return -1; - d6f4: 429a cmp r2, r3 - d6f6: d02e beq.n d756 -{ - d6f8: b510 push {r4, lr} - d6fa: fa5f fe82 uxtb.w lr, r2 - if (++tail >= rx_buffer_total_size_) tail = 0; - d6fe: 4a19 ldr r2, [pc, #100] ; (d764 ) - d700: b2d8 uxtb r0, r3 - d702: 6812 ldr r2, [r2, #0] - d704: 1c43 adds r3, r0, #1 - d706: 429a cmp r2, r3 - d708: d919 bls.n d73e - if (tail < SERIAL2_RX_BUFFER_SIZE) { - d70a: 2b3f cmp r3, #63 ; 0x3f - d70c: d81b bhi.n d746 - c = rx_buffer[tail]; - } else { - c = rx_buffer_storage_[tail-SERIAL2_RX_BUFFER_SIZE]; - } - rx_buffer_tail = tail; - d70e: fa5f fc83 uxtb.w ip, r3 - c = rx_buffer[tail]; - d712: 4815 ldr r0, [pc, #84] ; (d768 ) - d714: 5cc0 ldrb r0, [r0, r3] - d716: b2c0 uxtb r0, r0 - rx_buffer_tail = tail; - d718: f881 c000 strb.w ip, [r1] - if (rts_pin) { - d71c: 4913 ldr r1, [pc, #76] ; (d76c ) - d71e: 6809 ldr r1, [r1, #0] - d720: b161 cbz r1, d73c - int avail; - if (head >= tail) avail = head - tail; - d722: 459e cmp lr, r3 - else avail = rx_buffer_total_size_ + head - tail; - d724: bf3c itt cc - d726: 4472 addcc r2, lr - d728: 1ad3 subcc r3, r2, r3 - if (avail <= rts_low_watermark_) rts_assert(); - d72a: 4a11 ldr r2, [pc, #68] ; (d770 ) - d72c: 6812 ldr r2, [r2, #0] - if (head >= tail) avail = head - tail; - d72e: bf28 it cs - d730: ebae 0303 subcs.w r3, lr, r3 - if (avail <= rts_low_watermark_) rts_assert(); - d734: 429a cmp r2, r3 - d736: d301 bcc.n d73c - d738: 2300 movs r3, #0 - d73a: 700b strb r3, [r1, #0] - } - return c; -} - d73c: bd10 pop {r4, pc} - d73e: f04f 0c00 mov.w ip, #0 - if (++tail >= rx_buffer_total_size_) tail = 0; - d742: 4663 mov r3, ip - d744: e7e5 b.n d712 - c = rx_buffer_storage_[tail-SERIAL2_RX_BUFFER_SIZE]; - d746: 4c0b ldr r4, [pc, #44] ; (d774 ) - d748: 383f subs r0, #63 ; 0x3f - d74a: 6824 ldr r4, [r4, #0] - d74c: 5c20 ldrb r0, [r4, r0] - rx_buffer_tail = tail; - d74e: fa5f fc83 uxtb.w ip, r3 - c = rx_buffer_storage_[tail-SERIAL2_RX_BUFFER_SIZE]; - d752: b2c0 uxtb r0, r0 - d754: e7e0 b.n d718 - if (head == tail) return -1; - d756: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - d75a: 4770 bx lr - d75c: 1fff9878 .word 0x1fff9878 - d760: 1fff9880 .word 0x1fff9880 - d764: 1fff8820 .word 0x1fff8820 - d768: 1fff9838 .word 0x1fff9838 - d76c: 1fff9834 .word 0x1fff9834 - d770: 1fff881c .word 0x1fff881c - d774: 1fff987c .word 0x1fff987c - -0000d778 : - -int serial2_peek(void) -{ - uint32_t head, tail; - - head = rx_buffer_head; - d778: 4a0d ldr r2, [pc, #52] ; (d7b0 ) - tail = rx_buffer_tail; - d77a: 4b0e ldr r3, [pc, #56] ; (d7b4 ) - head = rx_buffer_head; - d77c: 7811 ldrb r1, [r2, #0] - tail = rx_buffer_tail; - d77e: 781b ldrb r3, [r3, #0] - if (head == tail) return -1; - d780: 4299 cmp r1, r3 - tail = rx_buffer_tail; - d782: b2da uxtb r2, r3 - if (head == tail) return -1; - d784: d011 beq.n d7aa - if (++tail >= rx_buffer_total_size_) tail = 0; - d786: 490c ldr r1, [pc, #48] ; (d7b8 ) - d788: 6809 ldr r1, [r1, #0] - d78a: 1c53 adds r3, r2, #1 - d78c: 4299 cmp r1, r3 - d78e: d907 bls.n d7a0 - if (tail < SERIAL2_RX_BUFFER_SIZE) { - d790: 2b3f cmp r3, #63 ; 0x3f - d792: d906 bls.n d7a2 - return rx_buffer[tail]; - } - return rx_buffer_storage_[tail-SERIAL2_RX_BUFFER_SIZE]; - d794: 4b09 ldr r3, [pc, #36] ; (d7bc ) - d796: 3a3f subs r2, #63 ; 0x3f - d798: 681b ldr r3, [r3, #0] - d79a: 5c98 ldrb r0, [r3, r2] - d79c: b2c0 uxtb r0, r0 - d79e: 4770 bx lr - if (++tail >= rx_buffer_total_size_) tail = 0; - d7a0: 2300 movs r3, #0 - return rx_buffer[tail]; - d7a2: 4a07 ldr r2, [pc, #28] ; (d7c0 ) - d7a4: 5cd0 ldrb r0, [r2, r3] - d7a6: b2c0 uxtb r0, r0 - d7a8: 4770 bx lr - if (head == tail) return -1; - d7aa: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - d7ae: 4770 bx lr - d7b0: 1fff9878 .word 0x1fff9878 - d7b4: 1fff9880 .word 0x1fff9880 - d7b8: 1fff8820 .word 0x1fff8820 - d7bc: 1fff987c .word 0x1fff987c - d7c0: 1fff9838 .word 0x1fff9838 - -0000d7c4 : - -void serial2_clear(void) -{ -#ifdef HAS_KINETISK_UART1_FIFO - if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return; - d7c4: 4b0c ldr r3, [pc, #48] ; (d7f8 ) - d7c6: 6b5b ldr r3, [r3, #52] ; 0x34 - d7c8: 051b lsls r3, r3, #20 - d7ca: d514 bpl.n d7f6 - UART1_C2 &= ~(UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - d7cc: 4b0b ldr r3, [pc, #44] ; (d7fc ) - UART1_CFIFO = UART_CFIFO_RXFLUSH; - UART1_C2 |= (UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); -#endif - rx_buffer_head = rx_buffer_tail; - d7ce: 480c ldr r0, [pc, #48] ; (d800 ) - UART1_C2 &= ~(UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - d7d0: 78da ldrb r2, [r3, #3] - UART1_CFIFO = UART_CFIFO_RXFLUSH; - d7d2: 2140 movs r1, #64 ; 0x40 - UART1_C2 &= ~(UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - d7d4: f002 02cb and.w r2, r2, #203 ; 0xcb - d7d8: 70da strb r2, [r3, #3] - UART1_CFIFO = UART_CFIFO_RXFLUSH; - d7da: 7459 strb r1, [r3, #17] - UART1_C2 |= (UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - d7dc: 78da ldrb r2, [r3, #3] - rx_buffer_head = rx_buffer_tail; - d7de: 4909 ldr r1, [pc, #36] ; (d804 ) - UART1_C2 |= (UART_C2_RE | UART_C2_RIE | UART_C2_ILIE); - d7e0: f042 0234 orr.w r2, r2, #52 ; 0x34 - d7e4: 70da strb r2, [r3, #3] - if (rts_pin) rts_assert(); - d7e6: 4a08 ldr r2, [pc, #32] ; (d808 ) - rx_buffer_head = rx_buffer_tail; - d7e8: 7803 ldrb r3, [r0, #0] - if (rts_pin) rts_assert(); - d7ea: 6812 ldr r2, [r2, #0] - rx_buffer_head = rx_buffer_tail; - d7ec: b2db uxtb r3, r3 - d7ee: 700b strb r3, [r1, #0] - if (rts_pin) rts_assert(); - d7f0: b10a cbz r2, d7f6 - d7f2: 2300 movs r3, #0 - d7f4: 7013 strb r3, [r2, #0] -} - d7f6: 4770 bx lr - d7f8: 40048000 .word 0x40048000 - d7fc: 4006b000 .word 0x4006b000 - d800: 1fff9880 .word 0x1fff9880 - d804: 1fff9878 .word 0x1fff9878 - d808: 1fff9834 .word 0x1fff9834 - -0000d80c : -// Receive data above watermark UART_S1_RDRF -// LIN break detect UART_S2_LBKDIF -// RxD pin active edge UART_S2_RXEDGIF - -void uart1_status_isr(void) -{ - d80c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - uint8_t c; -#ifdef HAS_KINETISK_UART1_FIFO - uint32_t newhead; - uint8_t avail; - - if (UART1_S1 & (UART_S1_RDRF | UART_S1_IDLE)) { - d810: 4c50 ldr r4, [pc, #320] ; (d954 ) - d812: 7923 ldrb r3, [r4, #4] - d814: f013 0f30 tst.w r3, #48 ; 0x30 - d818: d047 beq.n d8aa - __disable_irq(); - d81a: b672 cpsid i - avail = UART1_RCFIFO; - d81c: 7da3 ldrb r3, [r4, #22] - if (avail == 0) { - d81e: f003 01ff and.w r1, r3, #255 ; 0xff - d822: 2b00 cmp r3, #0 - d824: d058 beq.n d8d8 - // which won't be simple, since we already manage - // which transmit interrupts are enabled. - UART1_CFIFO = UART_CFIFO_RXFLUSH; - __enable_irq(); - } else { - __enable_irq(); - d826: b662 cpsie i - head = rx_buffer_head; - d828: f8df 812c ldr.w r8, [pc, #300] ; d958 - tail = rx_buffer_tail; - d82c: 484b ldr r0, [pc, #300] ; (d95c ) - head = rx_buffer_head; - d82e: f898 3000 ldrb.w r3, [r8] - n = UART1_D | 0x100; - } else { - n = UART1_D; - } - newhead = head + 1; - if (newhead >= rx_buffer_total_size_) newhead = 0; - d832: 4a4b ldr r2, [pc, #300] ; (d960 ) - tail = rx_buffer_tail; - d834: 7805 ldrb r5, [r0, #0] - if (newhead >= rx_buffer_total_size_) newhead = 0; - d836: 6816 ldr r6, [r2, #0] - if (newhead != tail) { - head = newhead; - if (newhead < SERIAL2_RX_BUFFER_SIZE) { - rx_buffer[head] = n; - d838: 4f4a ldr r7, [pc, #296] ; (d964 ) - head = rx_buffer_head; - d83a: fa5f fc83 uxtb.w ip, r3 - } else { - rx_buffer_storage_[head-SERIAL2_RX_BUFFER_SIZE] = n; - d83e: 4b4a ldr r3, [pc, #296] ; (d968 ) - tail = rx_buffer_tail; - d840: b2ed uxtb r5, r5 - rx_buffer_storage_[head-SERIAL2_RX_BUFFER_SIZE] = n; - d842: f8d3 e000 ldr.w lr, [r3] - d846: e008 b.n d85a - if (newhead != tail) { - d848: b11d cbz r5, d852 - d84a: f04f 0c00 mov.w ip, #0 - rx_buffer[head] = n; - d84e: f807 300c strb.w r3, [r7, ip] - } - } - } while (--avail > 0); - d852: 1e4a subs r2, r1, #1 - d854: f012 01ff ands.w r1, r2, #255 ; 0xff - d858: d012 beq.n d880 - n = UART1_D; - d85a: 79e3 ldrb r3, [r4, #7] - newhead = head + 1; - d85c: f10c 0201 add.w r2, ip, #1 - if (newhead >= rx_buffer_total_size_) newhead = 0; - d860: 4296 cmp r6, r2 - n = UART1_D; - d862: b2db uxtb r3, r3 - if (newhead >= rx_buffer_total_size_) newhead = 0; - d864: d9f0 bls.n d848 - if (newhead != tail) { - d866: 4295 cmp r5, r2 - rx_buffer_storage_[head-SERIAL2_RX_BUFFER_SIZE] = n; - d868: f1ac 003f sub.w r0, ip, #63 ; 0x3f - if (newhead != tail) { - d86c: d0f1 beq.n d852 - if (newhead < SERIAL2_RX_BUFFER_SIZE) { - d86e: 2a3f cmp r2, #63 ; 0x3f - d870: d96d bls.n d94e - rx_buffer_storage_[head-SERIAL2_RX_BUFFER_SIZE] = n; - d872: 4694 mov ip, r2 - } while (--avail > 0); - d874: 1e4a subs r2, r1, #1 - d876: f012 01ff ands.w r1, r2, #255 ; 0xff - rx_buffer_storage_[head-SERIAL2_RX_BUFFER_SIZE] = n; - d87a: f80e 3000 strb.w r3, [lr, r0] - } while (--avail > 0); - d87e: d1ec bne.n d85a - rx_buffer_head = head; - d880: fa5f f38c uxtb.w r3, ip - d884: f888 3000 strb.w r3, [r8] - if (rts_pin) { - d888: 4b38 ldr r3, [pc, #224] ; (d96c ) - d88a: 6819 ldr r1, [r3, #0] - d88c: b169 cbz r1, d8aa - int avail; - if (head >= tail) avail = head - tail; - d88e: 45ac cmp ip, r5 - else avail = rx_buffer_total_size_ + head - tail; - d890: bf3c itt cc - d892: 1b72 subcc r2, r6, r5 - d894: eb02 030c addcc.w r3, r2, ip - if (avail >= rts_high_watermark_) rts_deassert(); - d898: 4a35 ldr r2, [pc, #212] ; (d970 ) - d89a: 6812 ldr r2, [r2, #0] - if (head >= tail) avail = head - tail; - d89c: bf28 it cs - d89e: ebac 0305 subcs.w r3, ip, r5 - if (avail >= rts_high_watermark_) rts_deassert(); - d8a2: 429a cmp r2, r3 - d8a4: bf9c itt ls - d8a6: 2301 movls r3, #1 - d8a8: 700b strbls r3, [r1, #0] - } - } - } - c = UART1_C2; - d8aa: 482a ldr r0, [pc, #168] ; (d954 ) - d8ac: 78c3 ldrb r3, [r0, #3] - if ((c & UART_C2_TIE) && (UART1_S1 & UART_S1_TDRE)) { - d8ae: 061e lsls r6, r3, #24 - c = UART1_C2; - d8b0: b2dd uxtb r5, r3 - if ((c & UART_C2_TIE) && (UART1_S1 & UART_S1_TDRE)) { - d8b2: d416 bmi.n d8e2 - UART1_D = n; - tx_buffer_tail = tail; - } - } -#endif - if ((c & UART_C2_TCIE) && (UART1_S1 & UART_S1_TC)) { - d8b4: 066a lsls r2, r5, #25 - d8b6: d50d bpl.n d8d4 - d8b8: 4b26 ldr r3, [pc, #152] ; (d954 ) - d8ba: 791b ldrb r3, [r3, #4] - d8bc: 065b lsls r3, r3, #25 - d8be: d509 bpl.n d8d4 - transmitting = 0; - if (transmit_pin) transmit_deassert(); - d8c0: 4b2c ldr r3, [pc, #176] ; (d974 ) - transmitting = 0; - d8c2: 492d ldr r1, [pc, #180] ; (d978 ) - if (transmit_pin) transmit_deassert(); - d8c4: 681b ldr r3, [r3, #0] - transmitting = 0; - d8c6: 2200 movs r2, #0 - d8c8: 700a strb r2, [r1, #0] - if (transmit_pin) transmit_deassert(); - d8ca: b103 cbz r3, d8ce - d8cc: 701a strb r2, [r3, #0] - reg &= ~UART_C3_TXDIR; - UART1_C3 = reg; - __enable_irq(); - } - #endif - UART1_C2 = C2_TX_INACTIVE; - d8ce: 4b21 ldr r3, [pc, #132] ; (d954 ) - d8d0: 223c movs r2, #60 ; 0x3c - d8d2: 70da strb r2, [r3, #3] - } -} - d8d4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - UART1_CFIFO = UART_CFIFO_RXFLUSH; - d8d8: 2340 movs r3, #64 ; 0x40 - c = UART1_D; - d8da: 79e2 ldrb r2, [r4, #7] - UART1_CFIFO = UART_CFIFO_RXFLUSH; - d8dc: 7463 strb r3, [r4, #17] - __enable_irq(); - d8de: b662 cpsie i - d8e0: e7e3 b.n d8aa - if ((c & UART_C2_TIE) && (UART1_S1 & UART_S1_TDRE)) { - d8e2: 7903 ldrb r3, [r0, #4] - d8e4: 061c lsls r4, r3, #24 - d8e6: d5e5 bpl.n d8b4 - head = tx_buffer_head; - d8e8: 4b24 ldr r3, [pc, #144] ; (d97c ) - if (++tail >= tx_buffer_total_size_) tail = 0; - d8ea: 4a25 ldr r2, [pc, #148] ; (d980 ) - tail = tx_buffer_tail; - d8ec: f8df e094 ldr.w lr, [pc, #148] ; d984 - head = tx_buffer_head; - d8f0: 781c ldrb r4, [r3, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - d8f2: 6816 ldr r6, [r2, #0] - tail = tx_buffer_tail; - d8f4: f89e 3000 ldrb.w r3, [lr] - n = tx_buffer_storage_[tail-SERIAL2_TX_BUFFER_SIZE]; - d8f8: 4a23 ldr r2, [pc, #140] ; (d988 ) - n = tx_buffer[tail]; - d8fa: 4f24 ldr r7, [pc, #144] ; (d98c ) - n = tx_buffer_storage_[tail-SERIAL2_TX_BUFFER_SIZE]; - d8fc: f8d2 c000 ldr.w ip, [r2] - head = tx_buffer_head; - d900: b2e4 uxtb r4, r4 - tail = tx_buffer_tail; - d902: b2db uxtb r3, r3 - d904: e007 b.n d916 - avail = UART1_S1; - d906: 7903 ldrb r3, [r0, #4] - if (++tail >= tx_buffer_total_size_) tail = 0; - d908: 2300 movs r3, #0 - n = tx_buffer[tail]; - d90a: 5cfa ldrb r2, [r7, r3] - d90c: b2d2 uxtb r2, r2 - UART1_D = n; - d90e: 71c2 strb r2, [r0, #7] - } while (UART1_TCFIFO < 8); - d910: 7d02 ldrb r2, [r0, #20] - d912: 2a07 cmp r2, #7 - d914: d811 bhi.n d93a - if (tail == head) break; - d916: 42a3 cmp r3, r4 - if (++tail >= tx_buffer_total_size_) tail = 0; - d918: f103 0101 add.w r1, r3, #1 - if (tail == head) break; - d91c: d00e beq.n d93c - if (++tail >= tx_buffer_total_size_) tail = 0; - d91e: 428e cmp r6, r1 - d920: d9f1 bls.n d906 - if (tail < SERIAL2_TX_BUFFER_SIZE) { - d922: 2927 cmp r1, #39 ; 0x27 - avail = UART1_S1; - d924: 7902 ldrb r2, [r0, #4] - n = tx_buffer_storage_[tail-SERIAL2_TX_BUFFER_SIZE]; - d926: f1a3 0327 sub.w r3, r3, #39 ; 0x27 - if (tail < SERIAL2_TX_BUFFER_SIZE) { - d92a: d801 bhi.n d930 - d92c: 460b mov r3, r1 - d92e: e7ec b.n d90a - n = tx_buffer_storage_[tail-SERIAL2_TX_BUFFER_SIZE]; - d930: f81c 2003 ldrb.w r2, [ip, r3] - d934: 460b mov r3, r1 - d936: b2d2 uxtb r2, r2 - d938: e7e9 b.n d90e - tx_buffer_tail = tail; - d93a: b2dc uxtb r4, r3 - if (UART1_S1 & UART_S1_TDRE) UART1_C2 = C2_TX_COMPLETING; - d93c: 4b05 ldr r3, [pc, #20] ; (d954 ) - tx_buffer_tail = tail; - d93e: f88e 4000 strb.w r4, [lr] - if (UART1_S1 & UART_S1_TDRE) UART1_C2 = C2_TX_COMPLETING; - d942: 791a ldrb r2, [r3, #4] - d944: 0611 lsls r1, r2, #24 - d946: bf44 itt mi - d948: 227c movmi r2, #124 ; 0x7c - d94a: 70da strbmi r2, [r3, #3] - d94c: e7b2 b.n d8b4 - d94e: 4694 mov ip, r2 - d950: e77d b.n d84e - d952: bf00 nop - d954: 4006b000 .word 0x4006b000 - d958: 1fff9878 .word 0x1fff9878 - d95c: 1fff9880 .word 0x1fff9880 - d960: 1fff8820 .word 0x1fff8820 - d964: 1fff9838 .word 0x1fff9838 - d968: 1fff987c .word 0x1fff987c - d96c: 1fff9834 .word 0x1fff9834 - d970: 1fff8818 .word 0x1fff8818 - d974: 1fff9884 .word 0x1fff9884 - d978: 1fff9888 .word 0x1fff9888 - d97c: 1fff98b4 .word 0x1fff98b4 - d980: 1fff8828 .word 0x1fff8828 - d984: 1fff98bc .word 0x1fff98bc - d988: 1fff98b8 .word 0x1fff98b8 - d98c: 1fff988c .word 0x1fff988c - -0000d990 : - -void serial2_add_memory_for_read(void *buffer, size_t length) -{ - rx_buffer_storage_ = (BUFTYPE*)buffer; - d990: 4b09 ldr r3, [pc, #36] ; (d9b8 ) -{ - d992: b410 push {r4} - rx_buffer_storage_ = (BUFTYPE*)buffer; - d994: 6018 str r0, [r3, #0] - if (buffer) { - d996: b160 cbz r0, d9b2 - rx_buffer_total_size_ = SERIAL2_RX_BUFFER_SIZE + length; - d998: f101 0440 add.w r4, r1, #64 ; 0x40 - } else { - rx_buffer_total_size_ = SERIAL2_RX_BUFFER_SIZE; - } - - rts_low_watermark_ = RTS_LOW_WATERMARK + length; - d99c: 4b07 ldr r3, [pc, #28] ; (d9bc ) - d99e: 4808 ldr r0, [pc, #32] ; (d9c0 ) - d9a0: f101 021a add.w r2, r1, #26 - d9a4: 601a str r2, [r3, #0] - rts_high_watermark_ = RTS_HIGH_WATERMARK + length; - d9a6: 4b07 ldr r3, [pc, #28] ; (d9c4 ) - d9a8: 6004 str r4, [r0, #0] - d9aa: 3128 adds r1, #40 ; 0x28 -} - d9ac: bc10 pop {r4} - rts_high_watermark_ = RTS_HIGH_WATERMARK + length; - d9ae: 6019 str r1, [r3, #0] -} - d9b0: 4770 bx lr - rx_buffer_total_size_ = SERIAL2_RX_BUFFER_SIZE; - d9b2: 2440 movs r4, #64 ; 0x40 - d9b4: e7f2 b.n d99c - d9b6: bf00 nop - d9b8: 1fff987c .word 0x1fff987c - d9bc: 1fff881c .word 0x1fff881c - d9c0: 1fff8820 .word 0x1fff8820 - d9c4: 1fff8818 .word 0x1fff8818 - -0000d9c8 : - -void serial2_add_memory_for_write(void *buffer, size_t length) -{ - tx_buffer_storage_ = (BUFTYPE*)buffer; - d9c8: 4b05 ldr r3, [pc, #20] ; (d9e0 ) - d9ca: 6018 str r0, [r3, #0] - if (buffer) { - d9cc: b118 cbz r0, d9d6 - tx_buffer_total_size_ = SERIAL2_TX_BUFFER_SIZE + length; - d9ce: 4b05 ldr r3, [pc, #20] ; (d9e4 ) - d9d0: 3128 adds r1, #40 ; 0x28 - d9d2: 6019 str r1, [r3, #0] - } else { - tx_buffer_total_size_ = SERIAL2_TX_BUFFER_SIZE; - } -} - d9d4: 4770 bx lr - d9d6: 4b03 ldr r3, [pc, #12] ; (d9e4 ) - tx_buffer_total_size_ = SERIAL2_TX_BUFFER_SIZE; - d9d8: 2128 movs r1, #40 ; 0x28 - d9da: 6019 str r1, [r3, #0] -} - d9dc: 4770 bx lr - d9de: bf00 nop - d9e0: 1fff98b8 .word 0x1fff98b8 - d9e4: 1fff8828 .word 0x1fff8828 - -0000d9e8 : -#else - return 0; -#endif -} - -void serial3_putchar(uint32_t c) - d9e8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} -{ - uint32_t head, n; - - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return; - if (transmit_pin) transmit_assert(); - d9ec: 4b31 ldr r3, [pc, #196] ; (dab4 ) - d9ee: 681b ldr r3, [r3, #0] -void serial3_putchar(uint32_t c) - d9f0: 4607 mov r7, r0 - if (transmit_pin) transmit_assert(); - d9f2: b10b cbz r3, d9f8 - d9f4: 2201 movs r2, #1 - d9f6: 701a strb r2, [r3, #0] - reg |= UART_C3_TXDIR; - UART2_C3 = reg; - __enable_irq(); - } - #endif - head = tx_buffer_head; - d9f8: f8df 90bc ldr.w r9, [pc, #188] ; dab8 - if (++head >= tx_buffer_total_size_) head = 0; - d9fc: f8df 80bc ldr.w r8, [pc, #188] ; dabc - head = tx_buffer_head; - da00: f899 4000 ldrb.w r4, [r9] - if (++head >= tx_buffer_total_size_) head = 0; - da04: f8d8 3000 ldr.w r3, [r8] - while (tx_buffer_tail == head) { - da08: 4d2d ldr r5, [pc, #180] ; (dac0 ) - if (++head >= tx_buffer_total_size_) head = 0; - da0a: 3401 adds r4, #1 - da0c: 429c cmp r4, r3 - while (tx_buffer_tail == head) { - da0e: 782b ldrb r3, [r5, #0] - if (++head >= tx_buffer_total_size_) head = 0; - da10: d32a bcc.n da68 - while (tx_buffer_tail == head) { - da12: f003 0aff and.w sl, r3, #255 ; 0xff - da16: 2b00 cmp r3, #0 - da18: d13e bne.n da98 - if (++head >= tx_buffer_total_size_) head = 0; - da1a: 4654 mov r4, sl - int priority = nvic_execution_priority(); - if (priority <= IRQ_PRIORITY) { - if ((UART2_S1 & UART_S1_TDRE)) { - da1c: 4e29 ldr r6, [pc, #164] ; (dac4 ) - uint32_t tail = tx_buffer_tail; - if (++tail >= tx_buffer_total_size_) tail = 0; - if (tail < SERIAL3_TX_BUFFER_SIZE) { - n = tx_buffer[tail]; - da1e: f8df b0a8 ldr.w fp, [pc, #168] ; dac8 - da22: e005 b.n da30 - if ((UART2_S1 & UART_S1_TDRE)) { - da24: 7933 ldrb r3, [r6, #4] - da26: 061b lsls r3, r3, #24 - da28: d423 bmi.n da72 - while (tx_buffer_tail == head) { - da2a: 782b ldrb r3, [r5, #0] - da2c: 42a3 cmp r3, r4 - da2e: d10a bne.n da46 - int priority = nvic_execution_priority(); - da30: f7fe fb30 bl c094 - if (priority <= IRQ_PRIORITY) { - da34: 2840 cmp r0, #64 ; 0x40 - da36: ddf5 ble.n da24 - } - if (use9Bits) UART2_C3 = (UART2_C3 & ~0x40) | ((n & 0x100) >> 2); - UART2_D = n; - tx_buffer_tail = tail; - } - } else if (priority >= 256) { - da38: 28ff cmp r0, #255 ; 0xff - da3a: ddf6 ble.n da2a - yield(); // wait - da3c: f001 f9da bl edf4 - while (tx_buffer_tail == head) { - da40: 782b ldrb r3, [r5, #0] - da42: 42a3 cmp r3, r4 - da44: d0f4 beq.n da30 - } - } - if (head < SERIAL3_TX_BUFFER_SIZE) { - da46: 2c27 cmp r4, #39 ; 0x27 - da48: d929 bls.n da9e - tx_buffer[head] = c; - } else { - tx_buffer_storage_[head - SERIAL3_TX_BUFFER_SIZE] = c; - da4a: 4b20 ldr r3, [pc, #128] ; (dacc ) - da4c: 3c28 subs r4, #40 ; 0x28 - da4e: 681b ldr r3, [r3, #0] - da50: b2ff uxtb r7, r7 - da52: 551f strb r7, [r3, r4] - } - transmitting = 1; - da54: 4a1e ldr r2, [pc, #120] ; (dad0 ) - tx_buffer_head = head; - UART2_C2 = C2_TX_ACTIVE; - da56: 4b1b ldr r3, [pc, #108] ; (dac4 ) - transmitting = 1; - da58: 2101 movs r1, #1 - da5a: 7011 strb r1, [r2, #0] - UART2_C2 = C2_TX_ACTIVE; - da5c: 22ac movs r2, #172 ; 0xac - tx_buffer_head = head; - da5e: f889 a000 strb.w sl, [r9] - UART2_C2 = C2_TX_ACTIVE; - da62: 70da strb r2, [r3, #3] -} - da64: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - while (tx_buffer_tail == head) { - da68: 429c cmp r4, r3 - tx_buffer_head = head; - da6a: fa5f fa84 uxtb.w sl, r4 - while (tx_buffer_tail == head) { - da6e: d0d5 beq.n da1c - da70: e7e9 b.n da46 - uint32_t tail = tx_buffer_tail; - da72: 782b ldrb r3, [r5, #0] - if (++tail >= tx_buffer_total_size_) tail = 0; - da74: f8d8 1000 ldr.w r1, [r8] - da78: 1c5a adds r2, r3, #1 - da7a: 428a cmp r2, r1 - uint32_t tail = tx_buffer_tail; - da7c: b2db uxtb r3, r3 - if (++tail >= tx_buffer_total_size_) tail = 0; - da7e: d203 bcs.n da88 - if (tail < SERIAL3_TX_BUFFER_SIZE) { - da80: 2a27 cmp r2, #39 ; 0x27 - da82: d810 bhi.n daa6 - tx_buffer_tail = tail; - da84: b2d1 uxtb r1, r2 - da86: e001 b.n da8c - da88: 2100 movs r1, #0 - if (++tail >= tx_buffer_total_size_) tail = 0; - da8a: 460a mov r2, r1 - n = tx_buffer[tail]; - da8c: f81b 3002 ldrb.w r3, [fp, r2] - da90: b2db uxtb r3, r3 - UART2_D = n; - da92: 71f3 strb r3, [r6, #7] - tx_buffer_tail = tail; - da94: 7029 strb r1, [r5, #0] - da96: e7c8 b.n da2a - while (tx_buffer_tail == head) { - da98: f04f 0a00 mov.w sl, #0 - if (++head >= tx_buffer_total_size_) head = 0; - da9c: 4654 mov r4, sl - tx_buffer[head] = c; - da9e: 4b0a ldr r3, [pc, #40] ; (dac8 ) - daa0: b2ff uxtb r7, r7 - daa2: 551f strb r7, [r3, r4] - daa4: e7d6 b.n da54 - tx_buffer_tail = tail; - daa6: b2d1 uxtb r1, r2 - n = tx_buffer_storage_[tail-SERIAL3_TX_BUFFER_SIZE]; - daa8: 4a08 ldr r2, [pc, #32] ; (dacc ) - daaa: 3b27 subs r3, #39 ; 0x27 - daac: 6812 ldr r2, [r2, #0] - daae: 5cd3 ldrb r3, [r2, r3] - dab0: b2db uxtb r3, r3 - dab2: e7ee b.n da92 - dab4: 1fff9910 .word 0x1fff9910 - dab8: 1fff9940 .word 0x1fff9940 - dabc: 1fff883c .word 0x1fff883c - dac0: 1fff9948 .word 0x1fff9948 - dac4: 4006c000 .word 0x4006c000 - dac8: 1fff9918 .word 0x1fff9918 - dacc: 1fff9944 .word 0x1fff9944 - dad0: 1fff9914 .word 0x1fff9914 - -0000dad4 : - SIM_SCGC4 |= SIM_SCGC4_UART2; // turn on clock, TODO: use bitband - dad4: 4a1d ldr r2, [pc, #116] ; (db4c ) - CORE_PIN7_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); - dad6: 491e ldr r1, [pc, #120] ; (db50 ) - SIM_SCGC4 |= SIM_SCGC4_UART2; // turn on clock, TODO: use bitband - dad8: 6b53 ldr r3, [r2, #52] ; 0x34 -{ - dada: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - SIM_SCGC4 |= SIM_SCGC4_UART2; // turn on clock, TODO: use bitband - dade: f443 5380 orr.w r3, r3, #4096 ; 0x1000 - transmitting = 0; - dae2: 4d1c ldr r5, [pc, #112] ; (db54 ) - rx_buffer_head = 0; - dae4: f8df 8070 ldr.w r8, [pc, #112] ; db58 - rx_buffer_tail = 0; - dae8: f8df 9070 ldr.w r9, [pc, #112] ; db5c - tx_buffer_head = 0; - daec: 4f1c ldr r7, [pc, #112] ; (db60 ) - tx_buffer_tail = 0; - daee: 4e1d ldr r6, [pc, #116] ; (db64 ) - SIM_SCGC4 |= SIM_SCGC4_UART2; // turn on clock, TODO: use bitband - daf0: 6353 str r3, [r2, #52] ; 0x34 - rx_buffer_head = 0; - daf2: 2300 movs r3, #0 - daf4: f888 3000 strb.w r3, [r8] - rx_buffer_tail = 0; - daf8: 2820 cmp r0, #32 - dafa: f889 3000 strb.w r3, [r9] - tx_buffer_head = 0; - dafe: 703b strb r3, [r7, #0] - tx_buffer_tail = 0; - db00: 7033 strb r3, [r6, #0] - transmitting = 0; - db02: 702b strb r3, [r5, #0] - CORE_PIN7_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); - db04: f240 3513 movw r5, #787 ; 0x313 - db08: 608d str r5, [r1, #8] - UART2_BDH = (divisor >> 13) & 0x1F; - db0a: f502 3210 add.w r2, r2, #147456 ; 0x24000 - db0e: bf38 it cc - db10: 2020 movcc r0, #32 - CORE_PIN8_CONFIG = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); - db12: f44f 7551 mov.w r5, #836 ; 0x344 - db16: 60cd str r5, [r1, #12] - UART2_BDH = (divisor >> 13) & 0x1F; - db18: f3c0 3144 ubfx r1, r0, #13, #5 - db1c: 7011 strb r1, [r2, #0] - UART2_BDL = (divisor >> 5) & 0xFF; - db1e: f3c0 1e47 ubfx lr, r0, #5, #8 - NVIC_SET_PRIORITY(IRQ_UART2_STATUS, IRQ_PRIORITY); - db22: 4c11 ldr r4, [pc, #68] ; (db68 ) - UART2_BDL = (divisor >> 5) & 0xFF; - db24: f882 e001 strb.w lr, [r2, #1] - UART2_C4 = divisor & 0x1F; - db28: f000 001f and.w r0, r0, #31 - UART2_C2 = C2_TX_INACTIVE; - db2c: 212c movs r1, #44 ; 0x2c - UART2_C4 = divisor & 0x1F; - db2e: 7290 strb r0, [r2, #10] - NVIC_ENABLE_IRQ(IRQ_UART2_STATUS); - db30: f04f 2ce0 mov.w ip, #3758153728 ; 0xe000e000 - UART2_C1 = 0; - db34: 7093 strb r3, [r2, #2] - UART2_PFIFO = 0; - db36: 7413 strb r3, [r2, #16] - UART2_C2 = C2_TX_INACTIVE; - db38: 70d1 strb r1, [r2, #3] - NVIC_SET_PRIORITY(IRQ_UART2_STATUS, IRQ_PRIORITY); - db3a: 2240 movs r2, #64 ; 0x40 - NVIC_ENABLE_IRQ(IRQ_UART2_STATUS); - db3c: f44f 3300 mov.w r3, #131072 ; 0x20000 - NVIC_SET_PRIORITY(IRQ_UART2_STATUS, IRQ_PRIORITY); - db40: f884 2031 strb.w r2, [r4, #49] ; 0x31 - NVIC_ENABLE_IRQ(IRQ_UART2_STATUS); - db44: f8cc 3104 str.w r3, [ip, #260] ; 0x104 -} - db48: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - db4c: 40048000 .word 0x40048000 - db50: 4004c000 .word 0x4004c000 - db54: 1fff9914 .word 0x1fff9914 - db58: 1fff9904 .word 0x1fff9904 - db5c: 1fff990c .word 0x1fff990c - db60: 1fff9940 .word 0x1fff9940 - db64: 1fff9948 .word 0x1fff9948 - db68: e000e400 .word 0xe000e400 - -0000db6c : - c = UART2_C1; - db6c: 4b29 ldr r3, [pc, #164] ; (dc14 ) - UART2_C1 = c; - db6e: 4929 ldr r1, [pc, #164] ; (dc14 ) - c = UART2_C1; - db70: 789b ldrb r3, [r3, #2] - c = (c & ~0x13) | (format & 0x03); // configure parity - db72: f000 0203 and.w r2, r0, #3 - db76: f003 03ec and.w r3, r3, #236 ; 0xec - db7a: 4313 orrs r3, r2 - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - db7c: 0742 lsls r2, r0, #29 - if ((format & 0x0F) == 0x04) UART2_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - db7e: f000 020f and.w r2, r0, #15 - if (format & 0x04) c |= 0x10; // 9 bits (might include parity) - db82: bf48 it mi - db84: f043 0310 orrmi.w r3, r3, #16 - if ((format & 0x0F) == 0x04) UART2_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - db88: 2a04 cmp r2, #4 - UART2_C1 = c; - db8a: 708b strb r3, [r1, #2] - if ((format & 0x0F) == 0x04) UART2_C3 |= 0x40; // 8N2 is 9 bit with 9th bit always 1 - db8c: d103 bne.n db96 - db8e: 798b ldrb r3, [r1, #6] - db90: f043 0340 orr.w r3, r3, #64 ; 0x40 - db94: 718b strb r3, [r1, #6] - c = UART2_S2 & ~0x10; - db96: 4b1f ldr r3, [pc, #124] ; (dc14 ) - db98: 795a ldrb r2, [r3, #5] - if (format & 0x10) c |= 0x10; // rx invert - db9a: 06c3 lsls r3, r0, #27 - c = UART2_S2 & ~0x10; - db9c: f002 02ef and.w r2, r2, #239 ; 0xef - UART2_S2 = c; - dba0: 4b1c ldr r3, [pc, #112] ; (dc14 ) - if (format & 0x10) c |= 0x10; // rx invert - dba2: bf48 it mi - dba4: f042 0210 orrmi.w r2, r2, #16 - UART2_S2 = c; - dba8: 715a strb r2, [r3, #5] - c = UART2_C3 & ~0x10; - dbaa: 799a ldrb r2, [r3, #6] - if (format & 0x20) c |= 0x10; // tx invert - dbac: 0681 lsls r1, r0, #26 - c = UART2_C3 & ~0x10; - dbae: f002 02ef and.w r2, r2, #239 ; 0xef - if (format & 0x20) c |= 0x10; // tx invert - dbb2: d511 bpl.n dbd8 - dbb4: f042 0210 orr.w r2, r2, #16 - if ((format & SERIAL_HALF_DUPLEX) != 0) { - dbb8: 0581 lsls r1, r0, #22 - UART2_C3 = c; - dbba: 719a strb r2, [r3, #6] - if ((format & SERIAL_HALF_DUPLEX) != 0) { - dbbc: d50f bpl.n dbde - c = UART2_C1; - dbbe: 789a ldrb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - dbc0: 4915 ldr r1, [pc, #84] ; (dc18 ) - c |= UART_C1_LOOPS | UART_C1_RSRC; - dbc2: f042 02a0 orr.w r2, r2, #160 ; 0xa0 - UART2_C1 = c; - dbc6: 709a strb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - dbc8: 7809 ldrb r1, [r1, #0] - dbca: 4b14 ldr r3, [pc, #80] ; (dc1c ) - dbcc: eb03 03c1 add.w r3, r3, r1, lsl #3 - uint32_t pin_cfg = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3) | PORT_PCR_PE; - dbd0: f240 3246 movw r2, #838 ; 0x346 - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - dbd4: 685b ldr r3, [r3, #4] - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - dbd6: e014 b.n dc02 - UART2_C3 = c; - dbd8: 719a strb r2, [r3, #6] - if ((format & SERIAL_HALF_DUPLEX) != 0) { - dbda: 0582 lsls r2, r0, #22 - dbdc: d405 bmi.n dbea - if (transmit_pin == (uint8_t*)GPIO_BITBAND_PTR(UART2_C3, C3_TXDIR_BIT)) transmit_pin = NULL; - dbde: 4b10 ldr r3, [pc, #64] ; (dc20 ) - dbe0: 4a10 ldr r2, [pc, #64] ; (dc24 ) - dbe2: 6819 ldr r1, [r3, #0] - dbe4: 4291 cmp r1, r2 - dbe6: d011 beq.n dc0c -} - dbe8: 4770 bx lr - c = UART2_C1; - dbea: 789a ldrb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - dbec: 490a ldr r1, [pc, #40] ; (dc18 ) - c |= UART_C1_LOOPS | UART_C1_RSRC; - dbee: f042 02a0 orr.w r2, r2, #160 ; 0xa0 - UART2_C1 = c; - dbf2: 709a strb r2, [r3, #2] - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - dbf4: 7809 ldrb r1, [r1, #0] - dbf6: 4b09 ldr r3, [pc, #36] ; (dc1c ) - dbf8: eb03 03c1 add.w r3, r3, r1, lsl #3 - if ((format & 0x20) == 0) pin_cfg |= PORT_PCR_PS; // if not inverted PU else leve as PD - dbfc: f240 3247 movw r2, #839 ; 0x347 - volatile uint32_t *reg = portConfigRegister(tx_pin_num); - dc00: 685b ldr r3, [r3, #4] - transmit_pin = (uint8_t*)GPIO_BITBAND_PTR(UART2_C3, C3_TXDIR_BIT); - dc02: 4907 ldr r1, [pc, #28] ; (dc20 ) - dc04: 4807 ldr r0, [pc, #28] ; (dc24 ) - *reg = pin_cfg; - dc06: 601a str r2, [r3, #0] - transmit_pin = (uint8_t*)GPIO_BITBAND_PTR(UART2_C3, C3_TXDIR_BIT); - dc08: 6008 str r0, [r1, #0] - dc0a: 4770 bx lr - if (transmit_pin == (uint8_t*)GPIO_BITBAND_PTR(UART2_C3, C3_TXDIR_BIT)) transmit_pin = NULL; - dc0c: 2200 movs r2, #0 - dc0e: 601a str r2, [r3, #0] -} - dc10: 4770 bx lr - dc12: bf00 nop - dc14: 4006c000 .word 0x4006c000 - dc18: 1fff8840 .word 0x1fff8840 - dc1c: 00018614 .word 0x00018614 - dc20: 1fff9910 .word 0x1fff9910 - dc24: 42d800d4 .word 0x42d800d4 - -0000dc28 : -{ - dc28: b538 push {r3, r4, r5, lr} - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return; - dc2a: 4b13 ldr r3, [pc, #76] ; (dc78 ) - dc2c: 6b5b ldr r3, [r3, #52] ; 0x34 - dc2e: 04db lsls r3, r3, #19 - dc30: d520 bpl.n dc74 - while (transmitting) yield(); // wait for buffered data to send - dc32: 4c12 ldr r4, [pc, #72] ; (dc7c ) - dc34: 7823 ldrb r3, [r4, #0] - dc36: b123 cbz r3, dc42 - dc38: f001 f8dc bl edf4 - dc3c: 7823 ldrb r3, [r4, #0] - dc3e: 2b00 cmp r3, #0 - dc40: d1fa bne.n dc38 - UART2_C2 = 0; - dc42: 4a0f ldr r2, [pc, #60] ; (dc80 ) - CORE_PIN7_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); - dc44: 490f ldr r1, [pc, #60] ; (dc84 ) - NVIC_DISABLE_IRQ(IRQ_UART2_STATUS); - dc46: f04f 24e0 mov.w r4, #3758153728 ; 0xe000e000 - UART2_C2 = 0; - dc4a: 2300 movs r3, #0 - CORE_PIN7_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); - dc4c: f240 1003 movw r0, #259 ; 0x103 - NVIC_DISABLE_IRQ(IRQ_UART2_STATUS); - dc50: f44f 3500 mov.w r5, #131072 ; 0x20000 - dc54: f8c4 5184 str.w r5, [r4, #388] ; 0x184 - UART2_C2 = 0; - dc58: 70d3 strb r3, [r2, #3] - CORE_PIN7_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); - dc5a: 6088 str r0, [r1, #8] - CORE_PIN8_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_MUX(1); - dc5c: 60c8 str r0, [r1, #12] - if (rts_pin) rts_deassert(); - dc5e: 490a ldr r1, [pc, #40] ; (dc88 ) - rx_buffer_head = 0; - dc60: 4c0a ldr r4, [pc, #40] ; (dc8c ) - rx_buffer_tail = 0; - dc62: 480b ldr r0, [pc, #44] ; (dc90 ) - if (rts_pin) rts_deassert(); - dc64: 6809 ldr r1, [r1, #0] - UART2_S1; - dc66: 7915 ldrb r5, [r2, #4] - UART2_D; // clear leftover error status - dc68: 79d2 ldrb r2, [r2, #7] - rx_buffer_head = 0; - dc6a: 7023 strb r3, [r4, #0] - rx_buffer_tail = 0; - dc6c: 7003 strb r3, [r0, #0] - if (rts_pin) rts_deassert(); - dc6e: b109 cbz r1, dc74 - dc70: 2301 movs r3, #1 - dc72: 700b strb r3, [r1, #0] -} - dc74: bd38 pop {r3, r4, r5, pc} - dc76: bf00 nop - dc78: 40048000 .word 0x40048000 - dc7c: 1fff9914 .word 0x1fff9914 - dc80: 4006c000 .word 0x4006c000 - dc84: 4004c000 .word 0x4004c000 - dc88: 1fff98c0 .word 0x1fff98c0 - dc8c: 1fff9904 .word 0x1fff9904 - dc90: 1fff990c .word 0x1fff990c - -0000dc94 : - while (transmitting) ; - dc94: 4a0a ldr r2, [pc, #40] ; (dcc0 ) -{ - dc96: b538 push {r3, r4, r5, lr} - dc98: 4605 mov r5, r0 - while (transmitting) ; - dc9a: 7813 ldrb r3, [r2, #0] - dc9c: f003 04ff and.w r4, r3, #255 ; 0xff - dca0: 2b00 cmp r3, #0 - dca2: d1fa bne.n dc9a - pinMode(pin, OUTPUT); - dca4: 2101 movs r1, #1 - dca6: 4628 mov r0, r5 - dca8: f7fe fc9e bl c5e8 - digitalWrite(pin, LOW); - dcac: 4621 mov r1, r4 - dcae: 4628 mov r0, r5 - dcb0: f7fe fc66 bl c580 - transmit_pin = portOutputRegister(pin); - dcb4: 4a03 ldr r2, [pc, #12] ; (dcc4 ) - dcb6: 4b04 ldr r3, [pc, #16] ; (dcc8 ) - dcb8: f852 2035 ldr.w r2, [r2, r5, lsl #3] - dcbc: 601a str r2, [r3, #0] -} - dcbe: bd38 pop {r3, r4, r5, pc} - dcc0: 1fff9914 .word 0x1fff9914 - dcc4: 00018614 .word 0x00018614 - dcc8: 1fff9910 .word 0x1fff9910 - -0000dccc : - if (opendrain) pin |= 128; - dccc: b109 cbz r1, dcd2 - dcce: f040 0080 orr.w r0, r0, #128 ; 0x80 - if (pin == tx_pin_num) return; - dcd2: 4a11 ldr r2, [pc, #68] ; (dd18 ) - dcd4: 7813 ldrb r3, [r2, #0] - dcd6: 4283 cmp r3, r0 - dcd8: d016 beq.n dd08 -{ - dcda: b410 push {r4} - if ((SIM_SCGC4 & SIM_SCGC4_UART2)) { - dcdc: 4c0f ldr r4, [pc, #60] ; (dd1c ) - dcde: 6b64 ldr r4, [r4, #52] ; 0x34 - dce0: 04e4 lsls r4, r4, #19 - dce2: d50e bpl.n dd02 - switch (tx_pin_num & 127) { - dce4: f003 037f and.w r3, r3, #127 ; 0x7f - dce8: 2b08 cmp r3, #8 - dcea: d102 bne.n dcf2 - case 8: CORE_PIN8_CONFIG = 0; break; // PTD3 - dcec: 4b0c ldr r3, [pc, #48] ; (dd20 ) - dcee: 2400 movs r4, #0 - dcf0: 60dc str r4, [r3, #12] - cfg = PORT_PCR_DSE | PORT_PCR_SRE; - dcf2: 2900 cmp r1, #0 - switch (pin & 127) { - dcf4: f000 037f and.w r3, r0, #127 ; 0x7f - cfg = PORT_PCR_DSE | PORT_PCR_SRE; - dcf8: bf14 ite ne - dcfa: 2160 movne r1, #96 ; 0x60 - dcfc: 2144 moveq r1, #68 ; 0x44 - switch (pin & 127) { - dcfe: 2b08 cmp r3, #8 - dd00: d003 beq.n dd0a - tx_pin_num = pin; - dd02: 7010 strb r0, [r2, #0] -} - dd04: bc10 pop {r4} - dd06: 4770 bx lr - dd08: 4770 bx lr - case 8: CORE_PIN8_CONFIG = cfg | PORT_PCR_MUX(3); break; - dd0a: 4b05 ldr r3, [pc, #20] ; (dd20 ) - dd0c: f441 7140 orr.w r1, r1, #768 ; 0x300 - dd10: 60d9 str r1, [r3, #12] - tx_pin_num = pin; - dd12: 7010 strb r0, [r2, #0] -} - dd14: bc10 pop {r4} - dd16: 4770 bx lr - dd18: 1fff8840 .word 0x1fff8840 - dd1c: 40048000 .word 0x40048000 - dd20: 4004c000 .word 0x4004c000 - -0000dd24 : -} - dd24: 4770 bx lr - dd26: bf00 nop - -0000dd28 : - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return 0; - dd28: 4b0d ldr r3, [pc, #52] ; (dd60 ) - dd2a: 6b5b ldr r3, [r3, #52] ; 0x34 - dd2c: f413 5380 ands.w r3, r3, #4096 ; 0x1000 - dd30: d013 beq.n dd5a - if (pin < CORE_NUM_DIGITAL) { - dd32: 2821 cmp r0, #33 ; 0x21 - dd34: d903 bls.n dd3e - rts_pin = NULL; - dd36: 4b0b ldr r3, [pc, #44] ; (dd64 ) - dd38: 2000 movs r0, #0 - dd3a: 6018 str r0, [r3, #0] - return 0; - dd3c: 4770 bx lr - rts_pin = portOutputRegister(pin); - dd3e: 4b0a ldr r3, [pc, #40] ; (dd68 ) -{ - dd40: b510 push {r4, lr} - rts_pin = portOutputRegister(pin); - dd42: 4c08 ldr r4, [pc, #32] ; (dd64 ) - dd44: f853 3030 ldr.w r3, [r3, r0, lsl #3] - dd48: 6023 str r3, [r4, #0] - pinMode(pin, OUTPUT); - dd4a: 2101 movs r1, #1 - dd4c: f7fe fc4c bl c5e8 - rts_assert(); - dd50: 6823 ldr r3, [r4, #0] - dd52: 2200 movs r2, #0 - dd54: 701a strb r2, [r3, #0] - return 1; - dd56: 2001 movs r0, #1 -} - dd58: bd10 pop {r4, pc} - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return 0; - dd5a: 4618 mov r0, r3 -} - dd5c: 4770 bx lr - dd5e: bf00 nop - dd60: 40048000 .word 0x40048000 - dd64: 1fff98c0 .word 0x1fff98c0 - dd68: 00018614 .word 0x00018614 - -0000dd6c : - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return 0; - dd6c: 4b0c ldr r3, [pc, #48] ; (dda0 ) - dd6e: 6b5b ldr r3, [r3, #52] ; 0x34 - dd70: f413 5380 ands.w r3, r3, #4096 ; 0x1000 - dd74: d012 beq.n dd9c - if (pin == 14) { - dd76: 280e cmp r0, #14 - dd78: d109 bne.n dd8e - CORE_PIN14_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_PE; // weak pulldown - dd7a: 4b0a ldr r3, [pc, #40] ; (dda4 ) - UART2_MODEM |= UART_MODEM_TXCTSE; - dd7c: 4a0a ldr r2, [pc, #40] ; (dda8 ) - CORE_PIN14_CONFIG = PORT_PCR_MUX(3) | PORT_PCR_PE; // weak pulldown - dd7e: f240 3102 movw r1, #770 ; 0x302 - dd82: 6059 str r1, [r3, #4] - UART2_MODEM |= UART_MODEM_TXCTSE; - dd84: 7b53 ldrb r3, [r2, #13] - return 1; - dd86: 2001 movs r0, #1 - UART2_MODEM |= UART_MODEM_TXCTSE; - dd88: 4303 orrs r3, r0 - dd8a: 7353 strb r3, [r2, #13] - return 1; - dd8c: 4770 bx lr - UART2_MODEM &= ~UART_MODEM_TXCTSE; - dd8e: 4a06 ldr r2, [pc, #24] ; (dda8 ) - dd90: 7b53 ldrb r3, [r2, #13] - dd92: f003 03fe and.w r3, r3, #254 ; 0xfe - return 0; - dd96: 2000 movs r0, #0 - UART2_MODEM &= ~UART_MODEM_TXCTSE; - dd98: 7353 strb r3, [r2, #13] - return 0; - dd9a: 4770 bx lr - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return 0; - dd9c: 4618 mov r0, r3 -} - dd9e: 4770 bx lr - dda0: 40048000 .word 0x40048000 - dda4: 4004c000 .word 0x4004c000 - dda8: 4006c000 .word 0x4006c000 - -0000ddac : - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return; - ddac: 4b03 ldr r3, [pc, #12] ; (ddbc ) - ddae: 6b5b ldr r3, [r3, #52] ; 0x34 - ddb0: 04db lsls r3, r3, #19 - ddb2: d501 bpl.n ddb8 - ddb4: f7ff be18 b.w d9e8 -} - ddb8: 4770 bx lr - ddba: bf00 nop - ddbc: 40048000 .word 0x40048000 - -0000ddc0 : - -void serial3_write(const void *buf, unsigned int count) -{ - const uint8_t *p = (const uint8_t *)buf; - while (count-- > 0) serial3_putchar(*p++); - ddc0: b179 cbz r1, dde2 -{ - ddc2: b570 push {r4, r5, r6, lr} - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return; - ddc4: 4e07 ldr r6, [pc, #28] ; (dde4 ) - ddc6: 4604 mov r4, r0 - ddc8: 1845 adds r5, r0, r1 - ddca: 6b73 ldr r3, [r6, #52] ; 0x34 - ddcc: 04db lsls r3, r3, #19 - while (count-- > 0) serial3_putchar(*p++); - ddce: f104 0401 add.w r4, r4, #1 - if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return; - ddd2: d503 bpl.n dddc - ddd4: f814 0c01 ldrb.w r0, [r4, #-1] - ddd8: f7ff fe06 bl d9e8 - while (count-- > 0) serial3_putchar(*p++); - dddc: 42ac cmp r4, r5 - ddde: d1f4 bne.n ddca -} - dde0: bd70 pop {r4, r5, r6, pc} - dde2: 4770 bx lr - dde4: 40048000 .word 0x40048000 - -0000dde8 : - -void serial3_flush(void) -{ - dde8: b510 push {r4, lr} - while (transmitting) yield(); // wait - ddea: 4c04 ldr r4, [pc, #16] ; (ddfc ) - ddec: 7823 ldrb r3, [r4, #0] - ddee: b123 cbz r3, ddfa - ddf0: f001 f800 bl edf4 - ddf4: 7823 ldrb r3, [r4, #0] - ddf6: 2b00 cmp r3, #0 - ddf8: d1fa bne.n ddf0 -} - ddfa: bd10 pop {r4, pc} - ddfc: 1fff9914 .word 0x1fff9914 - -0000de00 : - -int serial3_write_buffer_free(void) -{ - uint32_t head, tail; - - head = tx_buffer_head; - de00: 4a08 ldr r2, [pc, #32] ; (de24 ) - tail = tx_buffer_tail; - de02: 4b09 ldr r3, [pc, #36] ; (de28 ) - head = tx_buffer_head; - de04: 7811 ldrb r1, [r2, #0] - tail = tx_buffer_tail; - de06: 781a ldrb r2, [r3, #0] - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - de08: 4291 cmp r1, r2 - head = tx_buffer_head; - de0a: b2c8 uxtb r0, r1 - tail = tx_buffer_tail; - de0c: b2d3 uxtb r3, r2 - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - de0e: d202 bcs.n de16 - return tail - head - 1; - de10: 3b01 subs r3, #1 - de12: 1a18 subs r0, r3, r0 -} - de14: 4770 bx lr - if (head >= tail) return tx_buffer_total_size_ - 1 - head + tail; - de16: 4a05 ldr r2, [pc, #20] ; (de2c ) - de18: 6812 ldr r2, [r2, #0] - de1a: 3a01 subs r2, #1 - de1c: 4413 add r3, r2 - de1e: 1a18 subs r0, r3, r0 - de20: 4770 bx lr - de22: bf00 nop - de24: 1fff9940 .word 0x1fff9940 - de28: 1fff9948 .word 0x1fff9948 - de2c: 1fff883c .word 0x1fff883c - -0000de30 : - -int serial3_available(void) -{ - uint32_t head, tail; - - head = rx_buffer_head; - de30: 4a06 ldr r2, [pc, #24] ; (de4c ) - tail = rx_buffer_tail; - de32: 4b07 ldr r3, [pc, #28] ; (de50 ) - head = rx_buffer_head; - de34: 7811 ldrb r1, [r2, #0] - tail = rx_buffer_tail; - de36: 781a ldrb r2, [r3, #0] - if (head >= tail) return head - tail; - de38: 4291 cmp r1, r2 - tail = rx_buffer_tail; - de3a: b2d0 uxtb r0, r2 - return rx_buffer_total_size_ + head - tail; - de3c: bf3c itt cc - de3e: 4a05 ldrcc r2, [pc, #20] ; (de54 ) - de40: 6812 ldrcc r2, [r2, #0] - head = rx_buffer_head; - de42: b2cb uxtb r3, r1 - return rx_buffer_total_size_ + head - tail; - de44: bf38 it cc - de46: 189b addcc r3, r3, r2 - de48: 1a18 subs r0, r3, r0 -} - de4a: 4770 bx lr - de4c: 1fff9904 .word 0x1fff9904 - de50: 1fff990c .word 0x1fff990c - de54: 1fff8838 .word 0x1fff8838 - -0000de58 : -int serial3_getchar(void) -{ - uint32_t head, tail; - int c; - - head = rx_buffer_head; - de58: 4b1b ldr r3, [pc, #108] ; (dec8 ) - tail = rx_buffer_tail; - de5a: 491c ldr r1, [pc, #112] ; (decc ) - head = rx_buffer_head; - de5c: 781a ldrb r2, [r3, #0] - tail = rx_buffer_tail; - de5e: 780b ldrb r3, [r1, #0] - if (head == tail) return -1; - de60: 429a cmp r2, r3 - de62: d02e beq.n dec2 -{ - de64: b510 push {r4, lr} - de66: fa5f fe82 uxtb.w lr, r2 - if (++tail >= rx_buffer_total_size_) tail = 0; - de6a: 4a19 ldr r2, [pc, #100] ; (ded0 ) - de6c: b2d8 uxtb r0, r3 - de6e: 6812 ldr r2, [r2, #0] - de70: 1c43 adds r3, r0, #1 - de72: 429a cmp r2, r3 - de74: d919 bls.n deaa - if (tail < SERIAL3_RX_BUFFER_SIZE) { - de76: 2b3f cmp r3, #63 ; 0x3f - de78: d81b bhi.n deb2 - c = rx_buffer[tail]; - } else { - c = rx_buffer_storage_[tail-SERIAL3_RX_BUFFER_SIZE]; - } - rx_buffer_tail = tail; - de7a: fa5f fc83 uxtb.w ip, r3 - c = rx_buffer[tail]; - de7e: 4815 ldr r0, [pc, #84] ; (ded4 ) - de80: 5cc0 ldrb r0, [r0, r3] - de82: b2c0 uxtb r0, r0 - rx_buffer_tail = tail; - de84: f881 c000 strb.w ip, [r1] - if (rts_pin) { - de88: 4913 ldr r1, [pc, #76] ; (ded8 ) - de8a: 6809 ldr r1, [r1, #0] - de8c: b161 cbz r1, dea8 - int avail; - if (head >= tail) avail = head - tail; - de8e: 459e cmp lr, r3 - else avail = rx_buffer_total_size_ + head - tail; - de90: bf3c itt cc - de92: 4472 addcc r2, lr - de94: 1ad3 subcc r3, r2, r3 - if (avail <= rts_low_watermark_) rts_assert(); - de96: 4a11 ldr r2, [pc, #68] ; (dedc ) - de98: 6812 ldr r2, [r2, #0] - if (head >= tail) avail = head - tail; - de9a: bf28 it cs - de9c: ebae 0303 subcs.w r3, lr, r3 - if (avail <= rts_low_watermark_) rts_assert(); - dea0: 429a cmp r2, r3 - dea2: d301 bcc.n dea8 - dea4: 2300 movs r3, #0 - dea6: 700b strb r3, [r1, #0] - } - return c; -} - dea8: bd10 pop {r4, pc} - deaa: f04f 0c00 mov.w ip, #0 - if (++tail >= rx_buffer_total_size_) tail = 0; - deae: 4663 mov r3, ip - deb0: e7e5 b.n de7e - c = rx_buffer_storage_[tail-SERIAL3_RX_BUFFER_SIZE]; - deb2: 4c0b ldr r4, [pc, #44] ; (dee0 ) - deb4: 383f subs r0, #63 ; 0x3f - deb6: 6824 ldr r4, [r4, #0] - deb8: 5c20 ldrb r0, [r4, r0] - rx_buffer_tail = tail; - deba: fa5f fc83 uxtb.w ip, r3 - c = rx_buffer_storage_[tail-SERIAL3_RX_BUFFER_SIZE]; - debe: b2c0 uxtb r0, r0 - dec0: e7e0 b.n de84 - if (head == tail) return -1; - dec2: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - dec6: 4770 bx lr - dec8: 1fff9904 .word 0x1fff9904 - decc: 1fff990c .word 0x1fff990c - ded0: 1fff8838 .word 0x1fff8838 - ded4: 1fff98c4 .word 0x1fff98c4 - ded8: 1fff98c0 .word 0x1fff98c0 - dedc: 1fff8834 .word 0x1fff8834 - dee0: 1fff9908 .word 0x1fff9908 - -0000dee4 : - -int serial3_peek(void) -{ - uint32_t head, tail; - - head = rx_buffer_head; - dee4: 4a0d ldr r2, [pc, #52] ; (df1c ) - tail = rx_buffer_tail; - dee6: 4b0e ldr r3, [pc, #56] ; (df20 ) - head = rx_buffer_head; - dee8: 7811 ldrb r1, [r2, #0] - tail = rx_buffer_tail; - deea: 781b ldrb r3, [r3, #0] - if (head == tail) return -1; - deec: 4299 cmp r1, r3 - tail = rx_buffer_tail; - deee: b2da uxtb r2, r3 - if (head == tail) return -1; - def0: d011 beq.n df16 - if (++tail >= rx_buffer_total_size_) tail = 0; - def2: 490c ldr r1, [pc, #48] ; (df24 ) - def4: 6809 ldr r1, [r1, #0] - def6: 1c53 adds r3, r2, #1 - def8: 4299 cmp r1, r3 - defa: d907 bls.n df0c - if (tail < SERIAL3_RX_BUFFER_SIZE) { - defc: 2b3f cmp r3, #63 ; 0x3f - defe: d906 bls.n df0e - return rx_buffer[tail]; - } - return rx_buffer_storage_[tail-SERIAL3_RX_BUFFER_SIZE]; - df00: 4b09 ldr r3, [pc, #36] ; (df28 ) - df02: 3a3f subs r2, #63 ; 0x3f - df04: 681b ldr r3, [r3, #0] - df06: 5c98 ldrb r0, [r3, r2] - df08: b2c0 uxtb r0, r0 - df0a: 4770 bx lr - if (++tail >= rx_buffer_total_size_) tail = 0; - df0c: 2300 movs r3, #0 - return rx_buffer[tail]; - df0e: 4a07 ldr r2, [pc, #28] ; (df2c ) - df10: 5cd0 ldrb r0, [r2, r3] - df12: b2c0 uxtb r0, r0 - df14: 4770 bx lr - if (head == tail) return -1; - df16: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - df1a: 4770 bx lr - df1c: 1fff9904 .word 0x1fff9904 - df20: 1fff990c .word 0x1fff990c - df24: 1fff8838 .word 0x1fff8838 - df28: 1fff9908 .word 0x1fff9908 - df2c: 1fff98c4 .word 0x1fff98c4 - -0000df30 : - -void serial3_clear(void) -{ - rx_buffer_head = rx_buffer_tail; - df30: 4b05 ldr r3, [pc, #20] ; (df48 ) - if (rts_pin) rts_assert(); - df32: 4a06 ldr r2, [pc, #24] ; (df4c ) - rx_buffer_head = rx_buffer_tail; - df34: 781b ldrb r3, [r3, #0] - df36: 4906 ldr r1, [pc, #24] ; (df50 ) - if (rts_pin) rts_assert(); - df38: 6812 ldr r2, [r2, #0] - rx_buffer_head = rx_buffer_tail; - df3a: b2db uxtb r3, r3 - df3c: 700b strb r3, [r1, #0] - if (rts_pin) rts_assert(); - df3e: b10a cbz r2, df44 - df40: 2300 movs r3, #0 - df42: 7013 strb r3, [r2, #0] -} - df44: 4770 bx lr - df46: bf00 nop - df48: 1fff990c .word 0x1fff990c - df4c: 1fff98c0 .word 0x1fff98c0 - df50: 1fff9904 .word 0x1fff9904 - -0000df54 : -// Receive data above watermark UART_S1_RDRF -// LIN break detect UART_S2_LBKDIF -// RxD pin active edge UART_S2_RXEDGIF - -void uart2_status_isr(void) -{ - df54: b430 push {r4, r5} - uint32_t head, tail, n; - uint8_t c; - - if (UART2_S1 & UART_S1_RDRF) { - df56: 4b3a ldr r3, [pc, #232] ; (e040 ) - df58: 791a ldrb r2, [r3, #4] - df5a: 0695 lsls r5, r2, #26 - df5c: d524 bpl.n dfa8 - if (use9Bits && (UART2_C3 & 0x80)) { - n = UART2_D | 0x100; - } else { - n = UART2_D; - } - head = rx_buffer_head + 1; - df5e: 4d39 ldr r5, [pc, #228] ; (e044 ) - if (head >= rx_buffer_total_size_) head = 0; - df60: 4939 ldr r1, [pc, #228] ; (e048 ) - n = UART2_D; - df62: 79db ldrb r3, [r3, #7] - head = rx_buffer_head + 1; - df64: 782a ldrb r2, [r5, #0] - if (head >= rx_buffer_total_size_) head = 0; - df66: 680c ldr r4, [r1, #0] - n = UART2_D; - df68: b2d8 uxtb r0, r3 - head = rx_buffer_head + 1; - df6a: 1c53 adds r3, r2, #1 - if (head >= rx_buffer_total_size_) head = 0; - df6c: 429c cmp r4, r3 - head = rx_buffer_head + 1; - df6e: b2d2 uxtb r2, r2 - if (head >= rx_buffer_total_size_) head = 0; - df70: d831 bhi.n dfd6 - if (head != rx_buffer_tail) { - df72: 4b36 ldr r3, [pc, #216] ; (e04c ) - df74: 781a ldrb r2, [r3, #0] - df76: f002 03ff and.w r3, r2, #255 ; 0xff - df7a: b122 cbz r2, df86 - df7c: 2200 movs r2, #0 - df7e: 4613 mov r3, r2 - if (head < SERIAL3_RX_BUFFER_SIZE) { - rx_buffer[head] = n; - df80: 4933 ldr r1, [pc, #204] ; (e050 ) - df82: 54c8 strb r0, [r1, r3] - } else { - rx_buffer_storage_[head-SERIAL3_RX_BUFFER_SIZE] = n; - } - - rx_buffer_head = head; - df84: 702a strb r2, [r5, #0] - } - if (rts_pin) { - df86: 4933 ldr r1, [pc, #204] ; (e054 ) - df88: 6809 ldr r1, [r1, #0] - df8a: b169 cbz r1, dfa8 - int avail; - tail = tx_buffer_tail; - df8c: 4a32 ldr r2, [pc, #200] ; (e058 ) - df8e: 7810 ldrb r0, [r2, #0] - if (head >= tail) avail = head - tail; - df90: 4298 cmp r0, r3 - tail = tx_buffer_tail; - df92: b2c2 uxtb r2, r0 - else avail = rx_buffer_total_size_ + head - tail; - df94: bf8a itet hi - df96: 1aa2 subhi r2, r4, r2 - if (head >= tail) avail = head - tail; - df98: 1a9b subls r3, r3, r2 - else avail = rx_buffer_total_size_ + head - tail; - df9a: 189b addhi r3, r3, r2 - if (avail >= rts_high_watermark_) rts_deassert(); - df9c: 4a2f ldr r2, [pc, #188] ; (e05c ) - df9e: 6812 ldr r2, [r2, #0] - dfa0: 429a cmp r2, r3 - dfa2: bf9c itt ls - dfa4: 2301 movls r3, #1 - dfa6: 700b strbls r3, [r1, #0] - } - } - c = UART2_C2; - dfa8: 4a25 ldr r2, [pc, #148] ; (e040 ) - dfaa: 78d3 ldrb r3, [r2, #3] - if ((c & UART_C2_TIE) && (UART2_S1 & UART_S1_TDRE)) { - dfac: 061c lsls r4, r3, #24 - c = UART2_C2; - dfae: b2d9 uxtb r1, r3 - if ((c & UART_C2_TIE) && (UART2_S1 & UART_S1_TDRE)) { - dfb0: d41e bmi.n dff0 - if (use9Bits) UART2_C3 = (UART2_C3 & ~0x40) | ((n & 0x100) >> 2); - UART2_D = n; - tx_buffer_tail = tail; - } - } - if ((c & UART_C2_TCIE) && (UART2_S1 & UART_S1_TC)) { - dfb2: 064a lsls r2, r1, #25 - dfb4: d50d bpl.n dfd2 - dfb6: 4b22 ldr r3, [pc, #136] ; (e040 ) - dfb8: 791b ldrb r3, [r3, #4] - dfba: 065b lsls r3, r3, #25 - dfbc: d509 bpl.n dfd2 - transmitting = 0; - if (transmit_pin) transmit_deassert(); - dfbe: 4b28 ldr r3, [pc, #160] ; (e060 ) - transmitting = 0; - dfc0: 4928 ldr r1, [pc, #160] ; (e064 ) - if (transmit_pin) transmit_deassert(); - dfc2: 681b ldr r3, [r3, #0] - transmitting = 0; - dfc4: 2200 movs r2, #0 - dfc6: 700a strb r2, [r1, #0] - if (transmit_pin) transmit_deassert(); - dfc8: b103 cbz r3, dfcc - dfca: 701a strb r2, [r3, #0] - reg &= ~UART_C3_TXDIR; - UART2_C3 = reg; - __enable_irq(); - } - #endif - UART2_C2 = C2_TX_INACTIVE; - dfcc: 4b1c ldr r3, [pc, #112] ; (e040 ) - dfce: 222c movs r2, #44 ; 0x2c - dfd0: 70da strb r2, [r3, #3] - } -} - dfd2: bc30 pop {r4, r5} - dfd4: 4770 bx lr - if (head != rx_buffer_tail) { - dfd6: 491d ldr r1, [pc, #116] ; (e04c ) - dfd8: 7809 ldrb r1, [r1, #0] - dfda: 4299 cmp r1, r3 - dfdc: d0d3 beq.n df86 - if (head < SERIAL3_RX_BUFFER_SIZE) { - dfde: 2b3f cmp r3, #63 ; 0x3f - dfe0: d92c bls.n e03c - rx_buffer_storage_[head-SERIAL3_RX_BUFFER_SIZE] = n; - dfe2: 4921 ldr r1, [pc, #132] ; (e068 ) - dfe4: 3a3f subs r2, #63 ; 0x3f - dfe6: 6809 ldr r1, [r1, #0] - dfe8: 5488 strb r0, [r1, r2] - rx_buffer_head = head; - dfea: b2da uxtb r2, r3 - dfec: 702a strb r2, [r5, #0] - dfee: e7ca b.n df86 - if ((c & UART_C2_TIE) && (UART2_S1 & UART_S1_TDRE)) { - dff0: 7913 ldrb r3, [r2, #4] - dff2: 0618 lsls r0, r3, #24 - dff4: d5dd bpl.n dfb2 - head = tx_buffer_head; - dff6: 4b1d ldr r3, [pc, #116] ; (e06c ) - tail = tx_buffer_tail; - dff8: 4817 ldr r0, [pc, #92] ; (e058 ) - head = tx_buffer_head; - dffa: 781d ldrb r5, [r3, #0] - tail = tx_buffer_tail; - dffc: 7803 ldrb r3, [r0, #0] - if (head == tail) { - dffe: 429d cmp r5, r3 - tail = tx_buffer_tail; - e000: b2dc uxtb r4, r3 - if (head == tail) { - e002: d008 beq.n e016 - if (++tail >= tx_buffer_total_size_) tail = 0; - e004: 4a1a ldr r2, [pc, #104] ; (e070 ) - e006: 6812 ldr r2, [r2, #0] - e008: 1c63 adds r3, r4, #1 - e00a: 429a cmp r2, r3 - e00c: d906 bls.n e01c - if (tail < SERIAL3_TX_BUFFER_SIZE) { - e00e: 2b27 cmp r3, #39 ; 0x27 - e010: d80d bhi.n e02e - tx_buffer_tail = tail; - e012: b2da uxtb r2, r3 - e014: e004 b.n e020 - UART2_C2 = C2_TX_COMPLETING; - e016: 236c movs r3, #108 ; 0x6c - e018: 70d3 strb r3, [r2, #3] - e01a: e7ca b.n dfb2 - e01c: 2200 movs r2, #0 - if (++tail >= tx_buffer_total_size_) tail = 0; - e01e: 4613 mov r3, r2 - n = tx_buffer[tail]; - e020: 4c14 ldr r4, [pc, #80] ; (e074 ) - e022: 5ce3 ldrb r3, [r4, r3] - e024: b2db uxtb r3, r3 - UART2_D = n; - e026: 4c06 ldr r4, [pc, #24] ; (e040 ) - e028: 71e3 strb r3, [r4, #7] - tx_buffer_tail = tail; - e02a: 7002 strb r2, [r0, #0] - e02c: e7c1 b.n dfb2 - n = tx_buffer_storage_[tail-SERIAL3_TX_BUFFER_SIZE]; - e02e: 4a12 ldr r2, [pc, #72] ; (e078 ) - e030: 3c27 subs r4, #39 ; 0x27 - e032: 6815 ldr r5, [r2, #0] - tx_buffer_tail = tail; - e034: b2da uxtb r2, r3 - n = tx_buffer_storage_[tail-SERIAL3_TX_BUFFER_SIZE]; - e036: 5d2b ldrb r3, [r5, r4] - e038: b2db uxtb r3, r3 - e03a: e7f4 b.n e026 - rx_buffer_head = head; - e03c: b2da uxtb r2, r3 - e03e: e79f b.n df80 - e040: 4006c000 .word 0x4006c000 - e044: 1fff9904 .word 0x1fff9904 - e048: 1fff8838 .word 0x1fff8838 - e04c: 1fff990c .word 0x1fff990c - e050: 1fff98c4 .word 0x1fff98c4 - e054: 1fff98c0 .word 0x1fff98c0 - e058: 1fff9948 .word 0x1fff9948 - e05c: 1fff8830 .word 0x1fff8830 - e060: 1fff9910 .word 0x1fff9910 - e064: 1fff9914 .word 0x1fff9914 - e068: 1fff9908 .word 0x1fff9908 - e06c: 1fff9940 .word 0x1fff9940 - e070: 1fff883c .word 0x1fff883c - e074: 1fff9918 .word 0x1fff9918 - e078: 1fff9944 .word 0x1fff9944 - -0000e07c : - -void serial3_add_memory_for_read(void *buffer, size_t length) -{ - rx_buffer_storage_ = (BUFTYPE*)buffer; - e07c: 4b09 ldr r3, [pc, #36] ; (e0a4 ) -{ - e07e: b410 push {r4} - rx_buffer_storage_ = (BUFTYPE*)buffer; - e080: 6018 str r0, [r3, #0] - if (buffer) { - e082: b160 cbz r0, e09e - rx_buffer_total_size_ = SERIAL3_RX_BUFFER_SIZE + length; - e084: f101 0440 add.w r4, r1, #64 ; 0x40 - } else { - rx_buffer_total_size_ = SERIAL3_RX_BUFFER_SIZE; - } - - rts_low_watermark_ = RTS_LOW_WATERMARK + length; - e088: 4b07 ldr r3, [pc, #28] ; (e0a8 ) - e08a: 4808 ldr r0, [pc, #32] ; (e0ac ) - e08c: f101 021a add.w r2, r1, #26 - e090: 601a str r2, [r3, #0] - rts_high_watermark_ = RTS_HIGH_WATERMARK + length; - e092: 4b07 ldr r3, [pc, #28] ; (e0b0 ) - e094: 6004 str r4, [r0, #0] - e096: 3128 adds r1, #40 ; 0x28 -} - e098: bc10 pop {r4} - rts_high_watermark_ = RTS_HIGH_WATERMARK + length; - e09a: 6019 str r1, [r3, #0] -} - e09c: 4770 bx lr - rx_buffer_total_size_ = SERIAL3_RX_BUFFER_SIZE; - e09e: 2440 movs r4, #64 ; 0x40 - e0a0: e7f2 b.n e088 - e0a2: bf00 nop - e0a4: 1fff9908 .word 0x1fff9908 - e0a8: 1fff8834 .word 0x1fff8834 - e0ac: 1fff8838 .word 0x1fff8838 - e0b0: 1fff8830 .word 0x1fff8830 - -0000e0b4 : - -void serial3_add_memory_for_write(void *buffer, size_t length) -{ - tx_buffer_storage_ = (BUFTYPE*)buffer; - e0b4: 4b05 ldr r3, [pc, #20] ; (e0cc ) - e0b6: 6018 str r0, [r3, #0] - if (buffer) { - e0b8: b118 cbz r0, e0c2 - tx_buffer_total_size_ = SERIAL3_TX_BUFFER_SIZE + length; - e0ba: 4b05 ldr r3, [pc, #20] ; (e0d0 ) - e0bc: 3128 adds r1, #40 ; 0x28 - e0be: 6019 str r1, [r3, #0] - } else { - tx_buffer_total_size_ = SERIAL3_TX_BUFFER_SIZE; - } -} - e0c0: 4770 bx lr - e0c2: 4b03 ldr r3, [pc, #12] ; (e0d0 ) - tx_buffer_total_size_ = SERIAL3_TX_BUFFER_SIZE; - e0c4: 2128 movs r1, #40 ; 0x28 - e0c6: 6019 str r1, [r3, #0] -} - e0c8: 4770 bx lr - e0ca: bf00 nop - e0cc: 1fff9944 .word 0x1fff9944 - e0d0: 1fff883c .word 0x1fff883c - -0000e0d4 : - -#include -#include "HardwareSerial.h" -void serialEvent1() __attribute__((weak)); -void serialEvent1() {} // No use calling this so disable if called... - e0d4: 4770 bx lr - e0d6: bf00 nop - -0000e0d8 : - -#include -#include "HardwareSerial.h" -void serialEvent2() __attribute__((weak)); -void serialEvent2() {} // No use calling this so disable if called... - e0d8: 4770 bx lr - e0da: bf00 nop - -0000e0dc : - -#include -#include "HardwareSerial.h" -void serialEvent3() __attribute__((weak)); -void serialEvent3() {} // No use calling this so disable if called... - e0dc: 4770 bx lr - e0de: bf00 nop - -0000e0e0 : - - -usb_packet_t *usb_rx(uint32_t endpoint) -{ - usb_packet_t *ret; - endpoint--; - e0e0: 1e43 subs r3, r0, #1 - if (endpoint >= NUM_ENDPOINTS) return NULL; - e0e2: 2b03 cmp r3, #3 - e0e4: d817 bhi.n e116 - __disable_irq(); - e0e6: b672 cpsid i - ret = rx_first[endpoint]; - e0e8: 490c ldr r1, [pc, #48] ; (e11c ) - e0ea: f851 0023 ldr.w r0, [r1, r3, lsl #2] - if (ret) { - e0ee: b180 cbz r0, e112 -{ - e0f0: b410 push {r4} - rx_first[endpoint] = ret->next; - usb_rx_byte_count_data[endpoint] -= ret->len; - e0f2: 4c0b ldr r4, [pc, #44] ; (e120 ) - e0f4: f8b0 c000 ldrh.w ip, [r0] - e0f8: f834 2013 ldrh.w r2, [r4, r3, lsl #1] - e0fc: eba2 020c sub.w r2, r2, ip - rx_first[endpoint] = ret->next; - e100: f8d0 c004 ldr.w ip, [r0, #4] - e104: f841 c023 str.w ip, [r1, r3, lsl #2] - usb_rx_byte_count_data[endpoint] -= ret->len; - e108: f824 2013 strh.w r2, [r4, r3, lsl #1] - } - __enable_irq(); - e10c: b662 cpsie i - //serial_phex(endpoint); - //serial_print(", packet="); - //serial_phex32(ret); - //serial_print("\n"); - return ret; -} - e10e: bc10 pop {r4} - e110: 4770 bx lr - __enable_irq(); - e112: b662 cpsie i -} - e114: 4770 bx lr - if (endpoint >= NUM_ENDPOINTS) return NULL; - e116: 2000 movs r0, #0 - e118: 4770 bx lr - e11a: bf00 nop - e11c: 1fff99dc .word 0x1fff99dc - e120: 1fff9a2c .word 0x1fff9a2c - -0000e124 : -uint32_t usb_tx_packet_count(uint32_t endpoint) -{ - const usb_packet_t *p; - uint32_t count=0; - - endpoint--; - e124: 3801 subs r0, #1 - if (endpoint >= NUM_ENDPOINTS) return 0; - e126: 2803 cmp r0, #3 - e128: d80b bhi.n e142 - __disable_irq(); - e12a: b672 cpsid i - for (p = tx_first[endpoint]; p; p = p->next) count++; - e12c: 4b07 ldr r3, [pc, #28] ; (e14c ) - e12e: f853 3020 ldr.w r3, [r3, r0, lsl #2] - e132: b143 cbz r3, e146 - uint32_t count=0; - e134: 2000 movs r0, #0 - for (p = tx_first[endpoint]; p; p = p->next) count++; - e136: 685b ldr r3, [r3, #4] - e138: 3001 adds r0, #1 - e13a: 2b00 cmp r3, #0 - e13c: d1fb bne.n e136 - __enable_irq(); - e13e: b662 cpsie i - return count; - e140: 4770 bx lr - if (endpoint >= NUM_ENDPOINTS) return 0; - e142: 2000 movs r0, #0 -} - e144: 4770 bx lr - uint32_t count=0; - e146: 4618 mov r0, r3 - e148: e7f9 b.n e13e - e14a: bf00 nop - e14c: 1fff9a04 .word 0x1fff9a04 - -0000e150 : -// user is creating data very quickly, their consumption could starve reception -// without this prioritization. The packet buffer (input) is assigned to the -// first endpoint needing memory. -// -void usb_rx_memory(usb_packet_t *packet) -{ - e150: b410 push {r4} - unsigned int i; - const uint8_t *cfg; - - cfg = usb_endpoint_config_table; - //serial_print("rx_mem:"); - __disable_irq(); - e152: b672 cpsid i - cfg = usb_endpoint_config_table; - e154: 4a19 ldr r2, [pc, #100] ; (e1bc ) - for (i=1; i <= NUM_ENDPOINTS; i++) { -#ifdef AUDIO_INTERFACE - if (i == AUDIO_RX_ENDPOINT) continue; -#endif - if (*cfg++ & USB_ENDPT_EPRXEN) { - if (table[index(i, RX, EVEN)].desc == 0) { - e156: 4c1a ldr r4, [pc, #104] ; (e1c0 ) - __disable_irq(); - e158: 2304 movs r3, #4 - if (*cfg++ & USB_ENDPT_EPRXEN) { - e15a: f812 1b01 ldrb.w r1, [r2], #1 - e15e: 0709 lsls r1, r1, #28 - __enable_irq(); - //serial_phex(i); - //serial_print(",even\n"); - return; - } - if (table[index(i, RX, ODD)].desc == 0) { - e160: f043 0c01 orr.w ip, r3, #1 - if (*cfg++ & USB_ENDPT_EPRXEN) { - e164: d505 bpl.n e172 - if (table[index(i, RX, EVEN)].desc == 0) { - e166: f854 1033 ldr.w r1, [r4, r3, lsl #3] - e16a: b161 cbz r1, e186 - if (table[index(i, RX, ODD)].desc == 0) { - e16c: f854 103c ldr.w r1, [r4, ip, lsl #3] - e170: b1b9 cbz r1, e1a2 - for (i=1; i <= NUM_ENDPOINTS; i++) { - e172: 3304 adds r3, #4 - e174: 2b14 cmp r3, #20 - e176: d1f0 bne.n e15a - //serial_print(",odd\n"); - return; - } - } - } - __enable_irq(); - e178: b662 cpsie i - // we should never reach this point. If we get here, it means - // usb_rx_memory_needed was set greater than zero, but no memory - // was actually needed. - usb_rx_memory_needed = 0; - e17a: 4b12 ldr r3, [pc, #72] ; (e1c4 ) - e17c: 2200 movs r2, #0 - e17e: 701a strb r2, [r3, #0] - usb_free(packet); - return; -} - e180: bc10 pop {r4} - usb_free(packet); - e182: f000 bc9b b.w eabc - usb_rx_memory_needed--; - e186: 490f ldr r1, [pc, #60] ; (e1c4 ) - table[index(i, RX, EVEN)].addr = packet->buf; - e188: eb04 02c3 add.w r2, r4, r3, lsl #3 - e18c: 3008 adds r0, #8 - e18e: 6050 str r0, [r2, #4] - usb_rx_memory_needed--; - e190: 780a ldrb r2, [r1, #0] - table[index(i, RX, EVEN)].desc = BDT_DESC(64, 0); - e192: 480d ldr r0, [pc, #52] ; (e1c8 ) - e194: f844 0033 str.w r0, [r4, r3, lsl #3] - usb_rx_memory_needed--; - e198: 3a01 subs r2, #1 - e19a: 700a strb r2, [r1, #0] - __enable_irq(); - e19c: b662 cpsie i -} - e19e: bc10 pop {r4} - e1a0: 4770 bx lr - usb_rx_memory_needed--; - e1a2: 4a08 ldr r2, [pc, #32] ; (e1c4 ) - table[index(i, RX, ODD)].desc = BDT_DESC(64, 1); - e1a4: 4909 ldr r1, [pc, #36] ; (e1cc ) - table[index(i, RX, ODD)].addr = packet->buf; - e1a6: eb04 03cc add.w r3, r4, ip, lsl #3 - e1aa: 3008 adds r0, #8 - e1ac: 6058 str r0, [r3, #4] - usb_rx_memory_needed--; - e1ae: 7813 ldrb r3, [r2, #0] - table[index(i, RX, ODD)].desc = BDT_DESC(64, 1); - e1b0: f844 103c str.w r1, [r4, ip, lsl #3] - usb_rx_memory_needed--; - e1b4: 3b01 subs r3, #1 - e1b6: 7013 strb r3, [r2, #0] - __enable_irq(); - e1b8: b662 cpsie i - return; - e1ba: e7f0 b.n e19e - e1bc: 000187a0 .word 0x000187a0 - e1c0: 1fff8000 .word 0x1fff8000 - e1c4: 1fff9a34 .word 0x1fff9a34 - e1c8: 00400088 .word 0x00400088 - e1cc: 004000c8 .word 0x004000c8 - -0000e1d0 : -void usb_tx(uint32_t endpoint, usb_packet_t *packet) -{ - bdt_t *b = &table[index(endpoint, TX, EVEN)]; - uint8_t next; - - endpoint--; - e1d0: 1e42 subs r2, r0, #1 - if (endpoint >= NUM_ENDPOINTS) return; - e1d2: 2a03 cmp r2, #3 - e1d4: d80e bhi.n e1f4 - bdt_t *b = &table[index(endpoint, TX, EVEN)]; - e1d6: 4b1c ldr r3, [pc, #112] ; (e248 ) - e1d8: 0140 lsls r0, r0, #5 - e1da: f040 0010 orr.w r0, r0, #16 -{ - e1de: b410 push {r4} - bdt_t *b = &table[index(endpoint, TX, EVEN)]; - e1e0: 4403 add r3, r0 - __disable_irq(); - e1e2: b672 cpsid i - //serial_print("txstate="); - //serial_phex(tx_state[endpoint]); - //serial_print("\n"); - switch (tx_state[endpoint]) { - e1e4: 4c19 ldr r4, [pc, #100] ; (e24c ) - e1e6: 5ca0 ldrb r0, [r4, r2] - e1e8: 2803 cmp r0, #3 - e1ea: d81c bhi.n e226 - e1ec: e8df f000 tbb [pc, r0] - e1f0: 18031513 .word 0x18031513 - e1f4: 4770 bx lr - e1f6: 2005 movs r0, #5 - } - tx_last[endpoint] = packet; - __enable_irq(); - return; - } - tx_state[endpoint] = next; - e1f8: 54a0 strb r0, [r4, r2] - b->addr = packet->buf; - b->desc = BDT_DESC(packet->len, ((uint32_t)b & 8) ? DATA1 : DATA0); - e1fa: f013 0f08 tst.w r3, #8 - e1fe: 8808 ldrh r0, [r1, #0] - e200: bf14 ite ne - e202: 22c8 movne r2, #200 ; 0xc8 - e204: 2288 moveq r2, #136 ; 0x88 - b->addr = packet->buf; - e206: 3108 adds r1, #8 - b->desc = BDT_DESC(packet->len, ((uint32_t)b & 8) ? DATA1 : DATA0); - e208: ea42 4200 orr.w r2, r2, r0, lsl #16 - b->addr = packet->buf; - e20c: 6059 str r1, [r3, #4] - b->desc = BDT_DESC(packet->len, ((uint32_t)b & 8) ? DATA1 : DATA0); - e20e: 601a str r2, [r3, #0] - __enable_irq(); - e210: b662 cpsie i -} - e212: bc10 pop {r4} - e214: 4770 bx lr - next = TX_STATE_ODD_FREE; - e216: 2003 movs r0, #3 - e218: e7ee b.n e1f8 - b++; - e21a: 3308 adds r3, #8 - next = TX_STATE_EVEN_FREE; - e21c: 2002 movs r0, #2 - break; - e21e: e7eb b.n e1f8 - b++; - e220: 3308 adds r3, #8 - next = TX_STATE_NONE_FREE_EVEN_FIRST; - e222: 2004 movs r0, #4 - break; - e224: e7e8 b.n e1f8 - if (tx_first[endpoint] == NULL) { - e226: 4b0a ldr r3, [pc, #40] ; (e250 ) - e228: f853 0022 ldr.w r0, [r3, r2, lsl #2] - e22c: b138 cbz r0, e23e - tx_last[endpoint]->next = packet; - e22e: 4b09 ldr r3, [pc, #36] ; (e254 ) - e230: f853 0022 ldr.w r0, [r3, r2, lsl #2] - e234: 6041 str r1, [r0, #4] - tx_last[endpoint] = packet; - e236: f843 1022 str.w r1, [r3, r2, lsl #2] - __enable_irq(); - e23a: b662 cpsie i - return; - e23c: e7e9 b.n e212 - tx_first[endpoint] = packet; - e23e: f843 1022 str.w r1, [r3, r2, lsl #2] - e242: 4b04 ldr r3, [pc, #16] ; (e254 ) - e244: e7f7 b.n e236 - e246: bf00 nop - e248: 1fff8000 .word 0x1fff8000 - e24c: 1fff9a24 .word 0x1fff9a24 - e250: 1fff9a04 .word 0x1fff9a04 - e254: 1fff9a14 .word 0x1fff9a14 - -0000e258 : -} - - - -void usb_isr(void) -{ - e258: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - //serial_print("isr"); - //status = USB0_ISTAT; - //serial_phex(status); - //serial_print("\n"); - restart: - status = USB0_ISTAT; - e25c: f8df a2cc ldr.w sl, [pc, #716] ; e52c - //serial_phex(endpoint + 1); - b->desc = 0; - usb_rx_memory_needed++; - } - } else { - b->desc = BDT_DESC(64, ((uint32_t)b & 8) ? DATA1 : DATA0); - e260: f8df b2cc ldr.w fp, [pc, #716] ; e530 -{ - e264: b085 sub sp, #20 - e266: e03d b.n e2e4 - bdt_t *b = stat2bufferdescriptor(stat); - e268: 4db2 ldr r5, [pc, #712] ; (e534 ) - e26a: 089e lsrs r6, r3, #2 - e26c: eb05 07c6 add.w r7, r5, r6, lsl #3 - endpoint--; // endpoint is index to zero-based arrays - e270: 3a01 subs r2, #1 - usb_packet_t *packet = (usb_packet_t *)((uint8_t *)(b->addr) - 8); - e272: 6879 ldr r1, [r7, #4] - if (stat & 0x08) { // transmit - e274: f013 0308 ands.w r3, r3, #8 - endpoint--; // endpoint is index to zero-based arrays - e278: b2d4 uxtb r4, r2 - usb_packet_t *packet = (usb_packet_t *)((uint8_t *)(b->addr) - 8); - e27a: f1a1 0008 sub.w r0, r1, #8 - if (stat & 0x08) { // transmit - e27e: f040 80b8 bne.w e3f2 - packet->len = b->desc >> 16; - e282: f855 2036 ldr.w r2, [r5, r6, lsl #3] - e286: ea4f 4c12 mov.w ip, r2, lsr #16 - if (packet->len > 0) { - e28a: 0c12 lsrs r2, r2, #16 - packet->len = b->desc >> 16; - e28c: f821 cc08 strh.w ip, [r1, #-8] - if (packet->len > 0) { - e290: f000 80a7 beq.w e3e2 - packet->index = 0; - e294: f821 3c06 strh.w r3, [r1, #-6] - packet->next = NULL; - e298: f841 3c04 str.w r3, [r1, #-4] - if (rx_first[endpoint] == NULL) { - e29c: 4ba6 ldr r3, [pc, #664] ; (e538 ) - e29e: f853 2024 ldr.w r2, [r3, r4, lsl #2] - e2a2: 2a00 cmp r2, #0 - e2a4: f000 8201 beq.w e6aa - rx_last[endpoint]->next = packet; - e2a8: 4ba4 ldr r3, [pc, #656] ; (e53c ) - e2aa: f853 2024 ldr.w r2, [r3, r4, lsl #2] - e2ae: 6050 str r0, [r2, #4] - rx_last[endpoint] = packet; - e2b0: f843 0024 str.w r0, [r3, r4, lsl #2] - usb_rx_byte_count_data[endpoint] += packet->len; - e2b4: 4ba2 ldr r3, [pc, #648] ; (e540 ) - e2b6: f833 2014 ldrh.w r2, [r3, r4, lsl #1] - e2ba: 4494 add ip, r2 - e2bc: f823 c014 strh.w ip, [r3, r4, lsl #1] - packet = usb_malloc(); - e2c0: f000 fbdc bl ea7c - if (packet) { - e2c4: 2800 cmp r0, #0 - e2c6: f000 81e9 beq.w e69c - b->desc = BDT_DESC(64, - e2ca: f017 0f08 tst.w r7, #8 - e2ce: 4b9d ldr r3, [pc, #628] ; (e544 ) - b->addr = packet->buf; - e2d0: f100 0008 add.w r0, r0, #8 - b->desc = BDT_DESC(64, - e2d4: bf18 it ne - e2d6: 465b movne r3, fp - b->addr = packet->buf; - e2d8: 6078 str r0, [r7, #4] - b->desc = BDT_DESC(64, - e2da: f845 3036 str.w r3, [r5, r6, lsl #3] - } - } - - } - USB0_ISTAT = USB_ISTAT_TOKDNE; - e2de: 2308 movs r3, #8 - e2e0: f88a 3080 strb.w r3, [sl, #128] ; 0x80 - status = USB0_ISTAT; - e2e4: f89a 3080 ldrb.w r3, [sl, #128] ; 0x80 - if ((status & USB_ISTAT_SOFTOK /* 04 */ )) { - e2e8: 0759 lsls r1, r3, #29 - status = USB0_ISTAT; - e2ea: b2dc uxtb r4, r3 - if ((status & USB_ISTAT_SOFTOK /* 04 */ )) { - e2ec: d51b bpl.n e326 - if (usb_configuration) { - e2ee: 4b96 ldr r3, [pc, #600] ; (e548 ) - e2f0: 781b ldrb r3, [r3, #0] - e2f2: b1ab cbz r3, e320 - t = usb_reboot_timer; - e2f4: 4995 ldr r1, [pc, #596] ; (e54c ) - e2f6: 780a ldrb r2, [r1, #0] - if (t) { - e2f8: f002 03ff and.w r3, r2, #255 ; 0xff - e2fc: b12a cbz r2, e30a - usb_reboot_timer = --t; - e2fe: 3b01 subs r3, #1 - e300: b2db uxtb r3, r3 - e302: 700b strb r3, [r1, #0] - if (!t) _reboot_Teensyduino_(); - e304: 2b00 cmp r3, #0 - e306: f000 8346 beq.w e996 - t = usb_cdc_transmit_flush_timer; - e30a: 4991 ldr r1, [pc, #580] ; (e550 ) - e30c: 780a ldrb r2, [r1, #0] - if (t) { - e30e: f002 03ff and.w r3, r2, #255 ; 0xff - e312: b12a cbz r2, e320 - usb_cdc_transmit_flush_timer = --t; - e314: 3b01 subs r3, #1 - e316: b2db uxtb r3, r3 - e318: 700b strb r3, [r1, #0] - if (t == 0) usb_serial_flush_callback(); - e31a: 2b00 cmp r3, #0 - e31c: f000 81eb beq.w e6f6 - USB0_ISTAT = USB_ISTAT_SOFTOK; - e320: 2304 movs r3, #4 - e322: f88a 3080 strb.w r3, [sl, #128] ; 0x80 - if ((status & USB_ISTAT_TOKDNE /* 08 */ )) { - e326: f014 0208 ands.w r2, r4, #8 - e32a: f000 81cc beq.w e6c6 - stat = USB0_STAT; - e32e: f89a 2090 ldrb.w r2, [sl, #144] ; 0x90 - e332: b2d3 uxtb r3, r2 - if (endpoint == 0) { - e334: 0912 lsrs r2, r2, #4 - e336: d197 bne.n e268 - b = stat2bufferdescriptor(stat); - e338: f8df 91f8 ldr.w r9, [pc, #504] ; e534 - e33c: 089b lsrs r3, r3, #2 - e33e: eb09 04c3 add.w r4, r9, r3, lsl #3 - pid = BDT_PID(b->desc); - e342: f859 0033 ldr.w r0, [r9, r3, lsl #3] - buf = b->addr; - e346: 6864 ldr r4, [r4, #4] - pid = BDT_PID(b->desc); - e348: f3c0 0083 ubfx r0, r0, #2, #4 - switch (pid) { - e34c: 2809 cmp r0, #9 - e34e: d07c beq.n e44a - e350: d80f bhi.n e372 - e352: 3801 subs r0, #1 - e354: 2801 cmp r0, #1 - e356: d808 bhi.n e36a - if (setup.wRequestAndType == 0x2021 /*CDC_SET_LINE_CODING*/) { - e358: 4a7e ldr r2, [pc, #504] ; (e554 ) - e35a: 8815 ldrh r5, [r2, #0] - e35c: f242 0021 movw r0, #8225 ; 0x2021 - e360: 4285 cmp r5, r0 - e362: f000 81fb beq.w e75c - b->desc = BDT_DESC(EP0_SIZE, DATA1); - e366: f849 b033 str.w fp, [r9, r3, lsl #3] - USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit - e36a: 2301 movs r3, #1 - e36c: f88a 3094 strb.w r3, [sl, #148] ; 0x94 -} - e370: e7b5 b.n e2de - switch (pid) { - e372: 280d cmp r0, #13 - e374: d1f9 bne.n e36a - setup.word2 = *(uint32_t *)(buf + 4); - e376: e9d4 0700 ldrd r0, r7, [r4] - ep0_tx_ptr = NULL; - e37a: 4d77 ldr r5, [pc, #476] ; (e558 ) - b->desc = BDT_DESC(EP0_SIZE, DATA1); - e37c: f849 b033 str.w fp, [r9, r3, lsl #3] - setup.word1 = *(uint32_t *)(buf); - e380: 4e74 ldr r6, [pc, #464] ; (e554 ) - ep0_tx_data_toggle = 1; - e382: 4c76 ldr r4, [pc, #472] ; (e55c ) - table[index(0, TX, EVEN)].desc = 0; - e384: f8c9 2010 str.w r2, [r9, #16] - e388: b283 uxth r3, r0 - switch (setup.wRequestAndType) { - e38a: f240 6c81 movw ip, #1665 ; 0x681 - table[index(0, TX, ODD)].desc = 0; - e38e: f8c9 2018 str.w r2, [r9, #24] - ep0_tx_ptr = NULL; - e392: 602a str r2, [r5, #0] - switch (setup.wRequestAndType) { - e394: 4563 cmp r3, ip - ep0_tx_data_toggle = 1; - e396: f04f 0201 mov.w r2, #1 - setup.word2 = *(uint32_t *)(buf + 4); - e39a: e9c6 0700 strd r0, r7, [r6] - ep0_tx_data_toggle = 1; - e39e: 7022 strb r2, [r4, #0] - switch (setup.wRequestAndType) { - e3a0: f200 80ff bhi.w e5a2 - e3a4: f5b3 6fd0 cmp.w r3, #1664 ; 0x680 - e3a8: f080 82cb bcs.w e942 - e3ac: f5b3 7f81 cmp.w r3, #258 ; 0x102 - e3b0: f000 8226 beq.w e800 - e3b4: f240 80de bls.w e574 - e3b8: f240 3202 movw r2, #770 ; 0x302 - e3bc: 4293 cmp r3, r2 - e3be: d17b bne.n e4b8 - i = setup.wIndex & 0x7F; - e3c0: f007 077f and.w r7, r7, #127 ; 0x7f - if (i > NUM_ENDPOINTS || setup.wValue != 0) { - e3c4: 2f04 cmp r7, #4 - e3c6: f200 8108 bhi.w e5da - e3ca: 0c02 lsrs r2, r0, #16 - e3cc: f040 8105 bne.w e5da - (*(uint8_t *)(&USB0_ENDPT0 + i * 4)) |= 0x02; - e3d0: 4963 ldr r1, [pc, #396] ; (e560 ) - e3d2: f811 3027 ldrb.w r3, [r1, r7, lsl #2] - e3d6: f043 0302 orr.w r3, r3, #2 - e3da: f801 3027 strb.w r3, [r1, r7, lsl #2] - const uint8_t *data = NULL; - e3de: 4613 mov r3, r2 - break; - e3e0: e070 b.n e4c4 - b->desc = BDT_DESC(64, ((uint32_t)b & 8) ? DATA1 : DATA0); - e3e2: f017 0f08 tst.w r7, #8 - e3e6: 4b57 ldr r3, [pc, #348] ; (e544 ) - e3e8: bf18 it ne - e3ea: 465b movne r3, fp - e3ec: f845 3036 str.w r3, [r5, r6, lsl #3] - e3f0: e775 b.n e2de - usb_free(packet); - e3f2: f000 fb63 bl eabc - packet = tx_first[endpoint]; - e3f6: 495b ldr r1, [pc, #364] ; (e564 ) - switch (tx_state[endpoint]) { - e3f8: 4a5b ldr r2, [pc, #364] ; (e568 ) - packet = tx_first[endpoint]; - e3fa: f851 3024 ldr.w r3, [r1, r4, lsl #2] - if (packet) { - e3fe: 2b00 cmp r3, #0 - e400: f000 8157 beq.w e6b2 - tx_first[endpoint] = packet->next; - e404: 6858 ldr r0, [r3, #4] - e406: f841 0024 str.w r0, [r1, r4, lsl #2] - switch (tx_state[endpoint]) { - e40a: 5d11 ldrb r1, [r2, r4] - b->addr = packet->buf; - e40c: f103 0008 add.w r0, r3, #8 - e410: 6078 str r0, [r7, #4] - switch (tx_state[endpoint]) { - e412: 2903 cmp r1, #3 - e414: d805 bhi.n e422 - e416: e8df f001 tbb [pc, r1] - e41a: 0f12 .short 0x0f12 - e41c: 0215 .short 0x0215 - tx_state[endpoint] = TX_STATE_NONE_FREE_EVEN_FIRST; - e41e: 2104 movs r1, #4 - e420: 5511 strb r1, [r2, r4] - b->desc = BDT_DESC(packet->len, - e422: 881a ldrh r2, [r3, #0] - e424: f017 0f08 tst.w r7, #8 - e428: bf14 ite ne - e42a: 23c8 movne r3, #200 ; 0xc8 - e42c: 2388 moveq r3, #136 ; 0x88 - e42e: ea43 4302 orr.w r3, r3, r2, lsl #16 - e432: f845 3036 str.w r3, [r5, r6, lsl #3] - e436: e752 b.n e2de - tx_state[endpoint] = TX_STATE_EVEN_FREE; - e438: 2102 movs r1, #2 - e43a: 5511 strb r1, [r2, r4] - break; - e43c: e7f1 b.n e422 - tx_state[endpoint] = TX_STATE_ODD_FREE; - e43e: 2103 movs r1, #3 - e440: 5511 strb r1, [r2, r4] - break; - e442: e7ee b.n e422 - tx_state[endpoint] = TX_STATE_NONE_FREE_ODD_FIRST; - e444: 2105 movs r1, #5 - e446: 5511 strb r1, [r2, r4] - break; - e448: e7eb b.n e422 - data = ep0_tx_ptr; - e44a: 4d43 ldr r5, [pc, #268] ; (e558 ) - e44c: 682a ldr r2, [r5, #0] - if (data) { - e44e: b33a cbz r2, e4a0 - size = ep0_tx_len; - e450: 4946 ldr r1, [pc, #280] ; (e56c ) - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e452: 4c42 ldr r4, [pc, #264] ; (e55c ) - size = ep0_tx_len; - e454: 880f ldrh r7, [r1, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e456: 4846 ldr r0, [pc, #280] ; (e570 ) - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e458: f894 e000 ldrb.w lr, [r4] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e45c: 7806 ldrb r6, [r0, #0] - e45e: 2f40 cmp r7, #64 ; 0x40 - e460: 463b mov r3, r7 - e462: bf28 it cs - e464: 2340 movcs r3, #64 ; 0x40 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e466: f1be 0f00 cmp.w lr, #0 - ep0_tx_data_toggle ^= 1; - e46a: f08e 0e01 eor.w lr, lr, #1 - e46e: f884 e000 strb.w lr, [r4] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e472: f046 0402 orr.w r4, r6, #2 - ep0_tx_bdt_bank ^= 1; - e476: f086 0601 eor.w r6, r6, #1 - e47a: 7006 strb r6, [r0, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e47c: eb09 00c4 add.w r0, r9, r4, lsl #3 - e480: 6042 str r2, [r0, #4] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e482: bf14 ite ne - e484: 20c8 movne r0, #200 ; 0xc8 - e486: 2088 moveq r0, #136 ; 0x88 - e488: ea40 4003 orr.w r0, r0, r3, lsl #16 - data += size; - e48c: 441a add r2, r3 - ep0_tx_len -= size; - e48e: 1afb subs r3, r7, r3 - e490: b29b uxth r3, r3 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e492: f849 0034 str.w r0, [r9, r4, lsl #3] - ep0_tx_len -= size; - e496: 800b strh r3, [r1, #0] - ep0_tx_ptr = (ep0_tx_len > 0 || size == EP0_SIZE) ? data : NULL; - e498: 2b00 cmp r3, #0 - e49a: f000 8136 beq.w e70a - e49e: 602a str r2, [r5, #0] - if (setup.bRequest == 5 && setup.bmRequestType == 0) { - e4a0: 4b2c ldr r3, [pc, #176] ; (e554 ) - e4a2: 881a ldrh r2, [r3, #0] - e4a4: f5b2 6fa0 cmp.w r2, #1280 ; 0x500 - e4a8: f47f af5f bne.w e36a - USB0_ADDR = setup.wValue; - e4ac: 789a ldrb r2, [r3, #2] - e4ae: f88a 2098 strb.w r2, [sl, #152] ; 0x98 - setup.bRequest = 0; - e4b2: 2200 movs r2, #0 - e4b4: 705a strb r2, [r3, #1] - USB0_ADDR = setup.wValue; - e4b6: e758 b.n e36a - switch (setup.wRequestAndType) { - e4b8: f5b3 6fa0 cmp.w r3, #1280 ; 0x500 - e4bc: f040 808d bne.w e5da - uint32_t datalen = 0; - e4c0: 2200 movs r2, #0 - const uint8_t *data = NULL; - e4c2: 4613 mov r3, r2 - if (datalen > setup.wLength) datalen = setup.wLength; - e4c4: f8b6 c006 ldrh.w ip, [r6, #6] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e4c8: 4829 ldr r0, [pc, #164] ; (e570 ) - e4ca: 4594 cmp ip, r2 - e4cc: bf28 it cs - e4ce: 4694 movcs ip, r2 - if (size > EP0_SIZE) size = EP0_SIZE; - e4d0: 4667 mov r7, ip - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e4d2: 7802 ldrb r2, [r0, #0] - e4d4: 2f40 cmp r7, #64 ; 0x40 - e4d6: bf28 it cs - e4d8: 2740 movcs r7, #64 ; 0x40 - e4da: f042 0e02 orr.w lr, r2, #2 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e4de: 043e lsls r6, r7, #16 - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e4e0: eb09 08ce add.w r8, r9, lr, lsl #3 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e4e4: f046 06c8 orr.w r6, r6, #200 ; 0xc8 - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e4e8: f8c8 3004 str.w r3, [r8, #4] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e4ec: f849 603e str.w r6, [r9, lr, lsl #3] - ep0_tx_data_toggle ^= 1; - e4f0: 2600 movs r6, #0 - data += size; - e4f2: 443b add r3, r7 - ep0_tx_data_toggle ^= 1; - e4f4: 7026 strb r6, [r4, #0] - if (datalen == 0 && size < EP0_SIZE) return; - e4f6: ebbc 0707 subs.w r7, ip, r7 - ep0_tx_bdt_bank ^= 1; - e4fa: f082 0601 eor.w r6, r2, #1 - e4fe: 7006 strb r6, [r0, #0] - if (datalen == 0 && size < EP0_SIZE) return; - e500: f040 8111 bne.w e726 - e504: f1bc 0f3f cmp.w ip, #63 ; 0x3f - e508: f04f 0501 mov.w r5, #1 - e50c: d909 bls.n e522 - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e50e: f046 0602 orr.w r6, r6, #2 - ep0_tx_bdt_bank ^= 1; - e512: 7002 strb r2, [r0, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e514: eb09 02c6 add.w r2, r9, r6, lsl #3 - ep0_tx_data_toggle ^= 1; - e518: 7025 strb r5, [r4, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e51a: 6053 str r3, [r2, #4] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e51c: 2388 movs r3, #136 ; 0x88 - e51e: f849 3036 str.w r3, [r9, r6, lsl #3] - USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit - e522: 2301 movs r3, #1 - e524: f88a 3094 strb.w r3, [sl, #148] ; 0x94 - break; - e528: e71f b.n e36a - e52a: bf00 nop - e52c: 40072000 .word 0x40072000 - e530: 004000c8 .word 0x004000c8 - e534: 1fff8000 .word 0x1fff8000 - e538: 1fff99dc .word 0x1fff99dc - e53c: 1fff99ec .word 0x1fff99ec - e540: 1fff9a2c .word 0x1fff9a2c - e544: 00400088 .word 0x00400088 - e548: 1fff9a28 .word 0x1fff9a28 - e54c: 1fff9a29 .word 0x1fff9a29 - e550: 1fff9a54 .word 0x1fff9a54 - e554: 1fff99fc .word 0x1fff99fc - e558: 1fff99d0 .word 0x1fff99d0 - e55c: 1fff99cd .word 0x1fff99cd - e560: 400720c0 .word 0x400720c0 - e564: 1fff9a04 .word 0x1fff9a04 - e568: 1fff9a24 .word 0x1fff9a24 - e56c: 1fff99ce .word 0x1fff99ce - e570: 1fff99cc .word 0x1fff99cc - switch (setup.wRequestAndType) { - e574: 2b80 cmp r3, #128 ; 0x80 - e576: f000 818b beq.w e890 - e57a: 2b82 cmp r3, #130 ; 0x82 - e57c: d12d bne.n e5da - i = setup.wIndex & 0x7F; - e57e: f007 077f and.w r7, r7, #127 ; 0x7f - if (i > NUM_ENDPOINTS) { - e582: 2f04 cmp r7, #4 - e584: d829 bhi.n e5da - reply_buffer[0] = 0; - e586: 4aa7 ldr r2, [pc, #668] ; (e824 ) - e588: 2300 movs r3, #0 - e58a: 8013 strh r3, [r2, #0] - if (*(uint8_t *)(&USB0_ENDPT0 + i * 4) & 0x02) reply_buffer[0] = 1; - e58c: 4ba6 ldr r3, [pc, #664] ; (e828 ) - e58e: f813 3027 ldrb.w r3, [r3, r7, lsl #2] - e592: 079f lsls r7, r3, #30 - e594: f140 81fc bpl.w e990 - e598: 2301 movs r3, #1 - e59a: 7013 strb r3, [r2, #0] - data = reply_buffer; - e59c: 4ba1 ldr r3, [pc, #644] ; (e824 ) - datalen = 2; - e59e: 2202 movs r2, #2 - e5a0: e790 b.n e4c4 - switch (setup.wRequestAndType) { - e5a2: f242 0c21 movw ip, #8225 ; 0x2021 - e5a6: 4563 cmp r3, ip - e5a8: d0bb beq.n e522 - e5aa: d91d bls.n e5e8 - e5ac: f242 2221 movw r2, #8737 ; 0x2221 - e5b0: 4293 cmp r3, r2 - e5b2: d10d bne.n e5d0 - switch (setup.wIndex) { - e5b4: b2bf uxth r7, r7 - e5b6: 2f00 cmp r7, #0 - e5b8: d182 bne.n e4c0 - usb_cdc_line_rtsdtr_millis = systick_millis_count; - e5ba: 4b9c ldr r3, [pc, #624] ; (e82c ) - e5bc: 681a ldr r2, [r3, #0] - e5be: 4b9c ldr r3, [pc, #624] ; (e830 ) - e5c0: 601a str r2, [r3, #0] - usb_cdc_line_rtsdtr = setup.wValue; - e5c2: 4b9c ldr r3, [pc, #624] ; (e834 ) - e5c4: f3c0 4007 ubfx r0, r0, #16, #8 - uint32_t datalen = 0; - e5c8: 2200 movs r2, #0 - usb_cdc_line_rtsdtr = setup.wValue; - e5ca: 7018 strb r0, [r3, #0] - const uint8_t *data = NULL; - e5cc: 4613 mov r3, r2 - break; - e5ce: e779 b.n e4c4 - switch (setup.wRequestAndType) { - e5d0: f242 3221 movw r2, #8993 ; 0x2321 - e5d4: 4293 cmp r3, r2 - e5d6: f43f af73 beq.w e4c0 - USB0_ENDPT0 = USB_ENDPT_EPSTALL | USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; - e5da: 230f movs r3, #15 - e5dc: f88a 30c0 strb.w r3, [sl, #192] ; 0xc0 - USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit - e5e0: 2301 movs r3, #1 - e5e2: f88a 3094 strb.w r3, [sl, #148] ; 0x94 - break; - e5e6: e6c0 b.n e36a - switch (setup.wRequestAndType) { - e5e8: f5b3 6f08 cmp.w r3, #2176 ; 0x880 - e5ec: f000 814a beq.w e884 - e5f0: f5b3 6f10 cmp.w r3, #2304 ; 0x900 - e5f4: d1f1 bne.n e5da - usb_configuration = setup.wValue; - e5f6: 4b90 ldr r3, [pc, #576] ; (e838 ) - e5f8: f3c0 4007 ubfx r0, r0, #16, #8 - for (i=4; i < (NUM_ENDPOINTS+1)*4; i++) { - e5fc: 2504 movs r5, #4 - usb_configuration = setup.wValue; - e5fe: 7018 strb r0, [r3, #0] - if (table[i].desc & BDT_OWN) { - e600: f859 3035 ldr.w r3, [r9, r5, lsl #3] - e604: 061a lsls r2, r3, #24 - e606: d406 bmi.n e616 - for (i=4; i < (NUM_ENDPOINTS+1)*4; i++) { - e608: 3501 adds r5, #1 - e60a: 2d14 cmp r5, #20 - e60c: d00c beq.n e628 - if (table[i].desc & BDT_OWN) { - e60e: f859 3035 ldr.w r3, [r9, r5, lsl #3] - e612: 061a lsls r2, r3, #24 - e614: d5f8 bpl.n e608 - usb_free((usb_packet_t *)((uint8_t *)(table[i].addr) - 8)); - e616: eb09 03c5 add.w r3, r9, r5, lsl #3 - for (i=4; i < (NUM_ENDPOINTS+1)*4; i++) { - e61a: 3501 adds r5, #1 - usb_free((usb_packet_t *)((uint8_t *)(table[i].addr) - 8)); - e61c: 6858 ldr r0, [r3, #4] - e61e: 3808 subs r0, #8 - e620: f000 fa4c bl eabc - for (i=4; i < (NUM_ENDPOINTS+1)*4; i++) { - e624: 2d14 cmp r5, #20 - e626: d1f2 bne.n e60e - e628: 4a84 ldr r2, [pc, #528] ; (e83c ) - e62a: 4b85 ldr r3, [pc, #532] ; (e840 ) - e62c: 9202 str r2, [sp, #8] - e62e: 4a85 ldr r2, [pc, #532] ; (e844 ) - e630: 9201 str r2, [sp, #4] - e632: 4e85 ldr r6, [pc, #532] ; (e848 ) - e634: 4a85 ldr r2, [pc, #532] ; (e84c ) - e636: f8df 8218 ldr.w r8, [pc, #536] ; e850 - tx_state[i] = TX_STATE_BOTH_FREE_ODD_FIRST; - e63a: 9403 str r4, [sp, #12] - e63c: 9200 str r2, [sp, #0] - rx_first[i] = NULL; - e63e: 2500 movs r5, #0 - tx_state[i] = TX_STATE_BOTH_FREE_ODD_FIRST; - e640: 461c mov r4, r3 - p = rx_first[i]; - e642: f856 7b04 ldr.w r7, [r6], #4 - while (p) { - e646: b12f cbz r7, e654 - n = p->next; - e648: 4638 mov r0, r7 - e64a: 687f ldr r7, [r7, #4] - usb_free(p); - e64c: f000 fa36 bl eabc - while (p) { - e650: 2f00 cmp r7, #0 - e652: d1f9 bne.n e648 - rx_last[i] = NULL; - e654: 9b00 ldr r3, [sp, #0] - p = tx_first[i]; - e656: f8d8 7000 ldr.w r7, [r8] - rx_last[i] = NULL; - e65a: f843 5b04 str.w r5, [r3], #4 - rx_first[i] = NULL; - e65e: f846 5c04 str.w r5, [r6, #-4] - rx_last[i] = NULL; - e662: 9300 str r3, [sp, #0] - while (p) { - e664: b12f cbz r7, e672 - n = p->next; - e666: 4638 mov r0, r7 - e668: 687f ldr r7, [r7, #4] - usb_free(p); - e66a: f000 fa27 bl eabc - while (p) { - e66e: 2f00 cmp r7, #0 - e670: d1f9 bne.n e666 - tx_last[i] = NULL; - e672: 9b02 ldr r3, [sp, #8] - tx_first[i] = NULL; - e674: f848 5b04 str.w r5, [r8], #4 - tx_last[i] = NULL; - e678: f843 5b04 str.w r5, [r3], #4 - e67c: 9302 str r3, [sp, #8] - usb_rx_byte_count_data[i] = 0; - e67e: 9b01 ldr r3, [sp, #4] - e680: f823 5b02 strh.w r5, [r3], #2 - e684: 9301 str r3, [sp, #4] - switch (tx_state[i]) { - e686: 7823 ldrb r3, [r4, #0] - e688: 3b02 subs r3, #2 - e68a: 2b03 cmp r3, #3 - e68c: f200 8109 bhi.w e8a2 - e690: e8df f013 tbh [pc, r3, lsl #1] - e694: 0104013f .word 0x0104013f - e698: 0104013f .word 0x0104013f - usb_rx_memory_needed++; - e69c: 4a6d ldr r2, [pc, #436] ; (e854 ) - b->desc = 0; - e69e: f845 0036 str.w r0, [r5, r6, lsl #3] - usb_rx_memory_needed++; - e6a2: 7813 ldrb r3, [r2, #0] - e6a4: 3301 adds r3, #1 - e6a6: 7013 strb r3, [r2, #0] - e6a8: e619 b.n e2de - rx_first[endpoint] = packet; - e6aa: f843 0024 str.w r0, [r3, r4, lsl #2] - e6ae: 4b67 ldr r3, [pc, #412] ; (e84c ) - e6b0: e5fe b.n e2b0 - switch (tx_state[endpoint]) { - e6b2: 5d11 ldrb r1, [r2, r4] - e6b4: 2902 cmp r1, #2 - e6b6: d026 beq.n e706 - e6b8: f67f ae11 bls.w e2de - e6bc: 2903 cmp r1, #3 - e6be: d11d bne.n e6fc - tx_state[endpoint] = TX_STATE_BOTH_FREE_ODD_FIRST; - e6c0: 2301 movs r3, #1 - e6c2: 5513 strb r3, [r2, r4] - break; - e6c4: e60b b.n e2de - goto restart; - } - - - - if (status & USB_ISTAT_USBRST /* 01 */ ) { - e6c6: 07e0 lsls r0, r4, #31 - e6c8: d46e bmi.n e7a8 - USB0_CTL = USB_CTL_USBENSOFEN; - return; - } - - - if ((status & USB_ISTAT_STALL /* 80 */ )) { - e6ca: 0621 lsls r1, r4, #24 - e6cc: d421 bmi.n e712 - //serial_print("stall:\n"); - USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; - USB0_ISTAT = USB_ISTAT_STALL; - } - if ((status & USB_ISTAT_ERROR /* 02 */ )) { - e6ce: 07a2 lsls r2, r4, #30 - e6d0: d508 bpl.n e6e4 - uint8_t err = USB0_ERRSTAT; - e6d2: 4b61 ldr r3, [pc, #388] ; (e858 ) - e6d4: f893 2088 ldrb.w r2, [r3, #136] ; 0x88 - USB0_ERRSTAT = err; - //serial_print("err:"); - //serial_phex(err); - //serial_print("\n"); - USB0_ISTAT = USB_ISTAT_ERROR; - e6d8: 2102 movs r1, #2 - uint8_t err = USB0_ERRSTAT; - e6da: b2d2 uxtb r2, r2 - USB0_ERRSTAT = err; - e6dc: f883 2088 strb.w r2, [r3, #136] ; 0x88 - USB0_ISTAT = USB_ISTAT_ERROR; - e6e0: f883 1080 strb.w r1, [r3, #128] ; 0x80 - } - - if ((status & USB_ISTAT_SLEEP /* 10 */ )) { - e6e4: 06e3 lsls r3, r4, #27 - e6e6: d503 bpl.n e6f0 - //serial_print("sleep\n"); - USB0_ISTAT = USB_ISTAT_SLEEP; - e6e8: 4b5b ldr r3, [pc, #364] ; (e858 ) - e6ea: 2210 movs r2, #16 - e6ec: f883 2080 strb.w r2, [r3, #128] ; 0x80 - } - -} - e6f0: b005 add sp, #20 - e6f2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (t == 0) usb_serial_flush_callback(); - e6f6: f000 fb59 bl edac - e6fa: e611 b.n e320 - tx_state[endpoint] = ((uint32_t)b & 8) ? - e6fc: f017 0f08 tst.w r7, #8 - e700: bf14 ite ne - e702: 2303 movne r3, #3 - e704: 2302 moveq r3, #2 - e706: 5513 strb r3, [r2, r4] - break; - e708: e5e9 b.n e2de - ep0_tx_ptr = (ep0_tx_len > 0 || size == EP0_SIZE) ? data : NULL; - e70a: 2f3f cmp r7, #63 ; 0x3f - e70c: bf98 it ls - e70e: 2200 movls r2, #0 - e710: e6c5 b.n e49e - USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; - e712: 4b51 ldr r3, [pc, #324] ; (e858 ) - USB0_ISTAT = USB_ISTAT_STALL; - e714: 2280 movs r2, #128 ; 0x80 - USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; - e716: 210d movs r1, #13 - e718: f883 10c0 strb.w r1, [r3, #192] ; 0xc0 - USB0_ISTAT = USB_ISTAT_STALL; - e71c: f883 2080 strb.w r2, [r3, #128] ; 0x80 - if ((status & USB_ISTAT_ERROR /* 02 */ )) { - e720: 07a2 lsls r2, r4, #30 - e722: d5df bpl.n e6e4 - e724: e7d5 b.n e6d2 - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e726: f046 0602 orr.w r6, r6, #2 - ep0_tx_bdt_bank ^= 1; - e72a: 7002 strb r2, [r0, #0] - e72c: 2f40 cmp r7, #64 ; 0x40 - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e72e: eb09 00c6 add.w r0, r9, r6, lsl #3 - e732: 463a mov r2, r7 - e734: bf28 it cs - e736: 2240 movcs r2, #64 ; 0x40 - e738: 6043 str r3, [r0, #4] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e73a: 0410 lsls r0, r2, #16 - data += size; - e73c: 4413 add r3, r2 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e73e: f040 0088 orr.w r0, r0, #136 ; 0x88 - ep0_tx_data_toggle ^= 1; - e742: 2101 movs r1, #1 - if (datalen == 0 && size < EP0_SIZE) return; - e744: 1aba subs r2, r7, r2 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e746: f849 0036 str.w r0, [r9, r6, lsl #3] - ep0_tx_data_toggle ^= 1; - e74a: 7021 strb r1, [r4, #0] - if (datalen == 0 && size < EP0_SIZE) return; - e74c: d055 beq.n e7fa - ep0_tx_ptr = data; - e74e: 602b str r3, [r5, #0] - ep0_tx_len = datalen; - e750: 4b42 ldr r3, [pc, #264] ; (e85c ) - e752: 801a strh r2, [r3, #0] - USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit - e754: 2301 movs r3, #1 - e756: f88a 3094 strb.w r3, [sl, #148] ; 0x94 - break; - e75a: e606 b.n e36a - switch (setup.wIndex) { - e75c: 8892 ldrh r2, [r2, #4] - e75e: b95a cbnz r2, e778 - e760: 4a3f ldr r2, [pc, #252] ; (e860 ) - e762: 1de5 adds r5, r4, #7 - *dst++ = *buf++; - e764: f814 1b01 ldrb.w r1, [r4], #1 - e768: f802 1f01 strb.w r1, [r2, #1]! - for (i=0; i<7; i++) { - e76c: 42ac cmp r4, r5 - e76e: d1f9 bne.n e764 - if (line_coding[0] == 134) usb_reboot_timer = 15; - e770: 4a3c ldr r2, [pc, #240] ; (e864 ) - e772: 6812 ldr r2, [r2, #0] - e774: 2a86 cmp r2, #134 ; 0x86 - e776: d03c beq.n e7f2 - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e778: 4c3b ldr r4, [pc, #236] ; (e868 ) - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e77a: 483c ldr r0, [pc, #240] ; (e86c ) - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e77c: 7825 ldrb r5, [r4, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e77e: 7802 ldrb r2, [r0, #0] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e780: 2d00 cmp r5, #0 - ep0_tx_data_toggle ^= 1; - e782: f085 0501 eor.w r5, r5, #1 - e786: 7025 strb r5, [r4, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e788: f042 0402 orr.w r4, r2, #2 - ep0_tx_bdt_bank ^= 1; - e78c: f082 0201 eor.w r2, r2, #1 - e790: 7002 strb r2, [r0, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e792: eb09 02c4 add.w r2, r9, r4, lsl #3 - e796: f04f 0000 mov.w r0, #0 - e79a: 6050 str r0, [r2, #4] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e79c: bf14 ite ne - e79e: 22c8 movne r2, #200 ; 0xc8 - e7a0: 2288 moveq r2, #136 ; 0x88 - e7a2: f849 2034 str.w r2, [r9, r4, lsl #3] -} - e7a6: e5de b.n e366 - USB0_CTL = USB_CTL_ODDRST; - e7a8: 4b2b ldr r3, [pc, #172] ; (e858 ) - ep0_tx_bdt_bank = 0; - e7aa: 4830 ldr r0, [pc, #192] ; (e86c ) - table[index(0, RX, EVEN)].desc = BDT_DESC(EP0_SIZE, 0); - e7ac: 4930 ldr r1, [pc, #192] ; (e870 ) - e7ae: 4c31 ldr r4, [pc, #196] ; (e874 ) - USB0_CTL = USB_CTL_ODDRST; - e7b0: 2502 movs r5, #2 - e7b2: f883 5094 strb.w r5, [r3, #148] ; 0x94 - ep0_tx_bdt_bank = 0; - e7b6: 7002 strb r2, [r0, #0] - table[index(0, RX, EVEN)].addr = ep0_rx0_buf; - e7b8: 482f ldr r0, [pc, #188] ; (e878 ) - table[index(0, RX, EVEN)].desc = BDT_DESC(EP0_SIZE, 0); - e7ba: 600c str r4, [r1, #0] - table[index(0, RX, ODD)].addr = ep0_rx1_buf; - e7bc: 4d2f ldr r5, [pc, #188] ; (e87c ) - table[index(0, RX, EVEN)].addr = ep0_rx0_buf; - e7be: 6048 str r0, [r1, #4] - table[index(0, RX, ODD)].desc = BDT_DESC(EP0_SIZE, 0); - e7c0: 608c str r4, [r1, #8] - USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; - e7c2: 240d movs r4, #13 - table[index(0, RX, ODD)].addr = ep0_rx1_buf; - e7c4: 60cd str r5, [r1, #12] - USB0_ERRSTAT = 0xFF; - e7c6: 20ff movs r0, #255 ; 0xff - table[index(0, TX, EVEN)].desc = 0; - e7c8: 610a str r2, [r1, #16] - table[index(0, TX, ODD)].desc = 0; - e7ca: 618a str r2, [r1, #24] - USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK; - e7cc: f883 40c0 strb.w r4, [r3, #192] ; 0xc0 - USB0_CTL = USB_CTL_USBENSOFEN; - e7d0: 2101 movs r1, #1 - USB0_INTEN = USB_INTEN_TOKDNEEN | - e7d2: 249f movs r4, #159 ; 0x9f - USB0_ERRSTAT = 0xFF; - e7d4: f883 0088 strb.w r0, [r3, #136] ; 0x88 - USB0_ISTAT = 0xFF; - e7d8: f883 0080 strb.w r0, [r3, #128] ; 0x80 - USB0_ADDR = 0; - e7dc: f883 2098 strb.w r2, [r3, #152] ; 0x98 - USB0_ERREN = 0xFF; - e7e0: f883 008c strb.w r0, [r3, #140] ; 0x8c - USB0_INTEN = USB_INTEN_TOKDNEEN | - e7e4: f883 4084 strb.w r4, [r3, #132] ; 0x84 - USB0_CTL = USB_CTL_USBENSOFEN; - e7e8: f883 1094 strb.w r1, [r3, #148] ; 0x94 -} - e7ec: b005 add sp, #20 - e7ee: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - if (line_coding[0] == 134) usb_reboot_timer = 15; - e7f2: 4a23 ldr r2, [pc, #140] ; (e880 ) - e7f4: 200f movs r0, #15 - e7f6: 7010 strb r0, [r2, #0] - e7f8: e7be b.n e778 - if (datalen == 0 && size < EP0_SIZE) return; - e7fa: 2f3f cmp r7, #63 ; 0x3f - e7fc: d8a7 bhi.n e74e - e7fe: e690 b.n e522 - i = setup.wIndex & 0x7F; - e800: f007 077f and.w r7, r7, #127 ; 0x7f - if (i > NUM_ENDPOINTS || setup.wValue != 0) { - e804: 2f04 cmp r7, #4 - e806: f63f aee8 bhi.w e5da - e80a: 0c00 lsrs r0, r0, #16 - e80c: f47f aee5 bne.w e5da - (*(uint8_t *)(&USB0_ENDPT0 + i * 4)) &= ~0x02; - e810: 4a05 ldr r2, [pc, #20] ; (e828 ) - e812: f812 3027 ldrb.w r3, [r2, r7, lsl #2] - e816: f023 0302 bic.w r3, r3, #2 - e81a: f802 3027 strb.w r3, [r2, r7, lsl #2] - uint32_t datalen = 0; - e81e: 2200 movs r2, #0 - const uint8_t *data = NULL; - e820: 4613 mov r3, r2 - break; - e822: e64f b.n e4c4 - e824: 1fff99d4 .word 0x1fff99d4 - e828: 400720c0 .word 0x400720c0 - e82c: 1fff978c .word 0x1fff978c - e830: 1fff9a50 .word 0x1fff9a50 - e834: 1fff9a4c .word 0x1fff9a4c - e838: 1fff9a28 .word 0x1fff9a28 - e83c: 1fff9a14 .word 0x1fff9a14 - e840: 1fff9a24 .word 0x1fff9a24 - e844: 1fff9a2c .word 0x1fff9a2c - e848: 1fff99dc .word 0x1fff99dc - e84c: 1fff99ec .word 0x1fff99ec - e850: 1fff9a04 .word 0x1fff9a04 - e854: 1fff9a34 .word 0x1fff9a34 - e858: 40072000 .word 0x40072000 - e85c: 1fff99ce .word 0x1fff99ce - e860: 1fff9a43 .word 0x1fff9a43 - e864: 1fff9a44 .word 0x1fff9a44 - e868: 1fff99cd .word 0x1fff99cd - e86c: 1fff99cc .word 0x1fff99cc - e870: 1fff8000 .word 0x1fff8000 - e874: 00400088 .word 0x00400088 - e878: 1fff994c .word 0x1fff994c - e87c: 1fff998c .word 0x1fff998c - e880: 1fff9a29 .word 0x1fff9a29 - reply_buffer[0] = usb_configuration; - e884: 4b48 ldr r3, [pc, #288] ; (e9a8 ) - e886: 4949 ldr r1, [pc, #292] ; (e9ac ) - e888: 781b ldrb r3, [r3, #0] - e88a: 700b strb r3, [r1, #0] - data = reply_buffer; - e88c: 460b mov r3, r1 - break; - e88e: e619 b.n e4c4 - reply_buffer[0] = 0; - e890: 4a46 ldr r2, [pc, #280] ; (e9ac ) - e892: 2300 movs r3, #0 - e894: 8013 strh r3, [r2, #0] - data = reply_buffer; - e896: 4b45 ldr r3, [pc, #276] ; (e9ac ) - datalen = 2; - e898: 2202 movs r2, #2 - break; - e89a: e613 b.n e4c4 - tx_state[i] = TX_STATE_BOTH_FREE_ODD_FIRST; - e89c: f04f 0301 mov.w r3, #1 - e8a0: 7023 strb r3, [r4, #0] - for (i=0; i < NUM_ENDPOINTS; i++) { - e8a2: 4b43 ldr r3, [pc, #268] ; (e9b0 ) - e8a4: 42b3 cmp r3, r6 - e8a6: f104 0401 add.w r4, r4, #1 - e8aa: f47f aeca bne.w e642 - usb_rx_memory_needed = 0; - e8ae: 4e41 ldr r6, [pc, #260] ; (e9b4 ) - e8b0: 9c03 ldr r4, [sp, #12] - cfg = usb_endpoint_config_table; - e8b2: f8df 8104 ldr.w r8, [pc, #260] ; e9b8 - table[index(i, RX, EVEN)].desc = BDT_DESC(64, 0); - e8b6: 4f41 ldr r7, [pc, #260] ; (e9bc ) - usb_rx_memory_needed = 0; - e8b8: 2300 movs r3, #0 - e8ba: 7033 strb r3, [r6, #0] - e8bc: 2504 movs r5, #4 - epconf = *cfg++; - e8be: f818 3b01 ldrb.w r3, [r8], #1 - *reg = epconf; - e8c2: 4a3f ldr r2, [pc, #252] ; (e9c0 ) - e8c4: 54ab strb r3, [r5, r2] - if (epconf & USB_ENDPT_EPRXEN) { - e8c6: 071b lsls r3, r3, #28 - e8c8: d425 bmi.n e916 - table[index(i, TX, EVEN)].desc = 0; - e8ca: f045 0102 orr.w r1, r5, #2 - table[index(i, TX, ODD)].desc = 0; - e8ce: f045 0203 orr.w r2, r5, #3 - for (i=1; i <= NUM_ENDPOINTS; i++) { - e8d2: 3504 adds r5, #4 - table[index(i, TX, EVEN)].desc = 0; - e8d4: 2300 movs r3, #0 - for (i=1; i <= NUM_ENDPOINTS; i++) { - e8d6: 2d14 cmp r5, #20 - table[index(i, TX, EVEN)].desc = 0; - e8d8: f849 3031 str.w r3, [r9, r1, lsl #3] - table[index(i, TX, ODD)].desc = 0; - e8dc: f849 3032 str.w r3, [r9, r2, lsl #3] - for (i=1; i <= NUM_ENDPOINTS; i++) { - e8e0: d1ed bne.n e8be - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e8e2: 4f38 ldr r7, [pc, #224] ; (e9c4 ) - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e8e4: 7825 ldrb r5, [r4, #0] - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e8e6: 783a ldrb r2, [r7, #0] - e8e8: f042 0002 orr.w r0, r2, #2 - e8ec: eb09 0cc0 add.w ip, r9, r0, lsl #3 - ep0_tx_data_toggle ^= 1; - e8f0: f085 0601 eor.w r6, r5, #1 - table[index(0, TX, ep0_tx_bdt_bank)].addr = (void *)data; - e8f4: f8cc 3004 str.w r3, [ip, #4] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e8f8: 2d00 cmp r5, #0 - e8fa: d14d bne.n e998 - e8fc: 2388 movs r3, #136 ; 0x88 - ep0_tx_bdt_bank ^= 1; - e8fe: f082 0201 eor.w r2, r2, #1 - ep0_tx_data_toggle ^= 1; - e902: 7026 strb r6, [r4, #0] - ep0_tx_bdt_bank ^= 1; - e904: 703a strb r2, [r7, #0] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e906: f849 3030 str.w r3, [r9, r0, lsl #3] - USB0_CTL = USB_CTL_USBENSOFEN; // clear TXSUSPENDTOKENBUSY bit - e90a: 2301 movs r3, #1 - e90c: f88a 3094 strb.w r3, [sl, #148] ; 0x94 - break; - e910: e52b b.n e36a - tx_state[i] = TX_STATE_BOTH_FREE_EVEN_FIRST; - e912: 7025 strb r5, [r4, #0] - break; - e914: e7c5 b.n e8a2 - p = usb_malloc(); - e916: f000 f8b1 bl ea7c - if (p) { - e91a: 2800 cmp r0, #0 - e91c: d032 beq.n e984 - table[index(i, RX, EVEN)].addr = p->buf; - e91e: eb09 03c5 add.w r3, r9, r5, lsl #3 - e922: 3008 adds r0, #8 - e924: 6058 str r0, [r3, #4] - table[index(i, RX, EVEN)].desc = BDT_DESC(64, 0); - e926: f849 7035 str.w r7, [r9, r5, lsl #3] - p = usb_malloc(); - e92a: f000 f8a7 bl ea7c - if (p) { - e92e: b308 cbz r0, e974 - table[index(i, RX, ODD)].addr = p->buf; - e930: f045 0301 orr.w r3, r5, #1 - e934: eb09 02c3 add.w r2, r9, r3, lsl #3 - e938: 3008 adds r0, #8 - e93a: 6050 str r0, [r2, #4] - table[index(i, RX, ODD)].desc = BDT_DESC(64, 1); - e93c: f849 b033 str.w fp, [r9, r3, lsl #3] - e940: e7c3 b.n e8ca - if (list->addr == NULL) break; - e942: 4a21 ldr r2, [pc, #132] ; (e9c8 ) - e944: 6853 ldr r3, [r2, #4] - e946: 2b00 cmp r3, #0 - e948: f43f ae47 beq.w e5da - e94c: 0c00 lsrs r0, r0, #16 - if (setup.wValue == list->wValue && setup.wIndex == list->wIndex) { - e94e: b2bf uxth r7, r7 - e950: e004 b.n e95c - if (list->addr == NULL) break; - e952: 6913 ldr r3, [r2, #16] - for (list = usb_descriptor_list; 1; list++) { - e954: 320c adds r2, #12 - if (list->addr == NULL) break; - e956: 2b00 cmp r3, #0 - e958: f43f ae3f beq.w e5da - if (setup.wValue == list->wValue && setup.wIndex == list->wIndex) { - e95c: 8811 ldrh r1, [r2, #0] - e95e: 4281 cmp r1, r0 - e960: d1f7 bne.n e952 - e962: 8851 ldrh r1, [r2, #2] - e964: 42b9 cmp r1, r7 - e966: d1f4 bne.n e952 - if ((setup.wValue >> 8) == 3) { - e968: 0a00 lsrs r0, r0, #8 - e96a: 2803 cmp r0, #3 - datalen = *(list->addr); - e96c: bf0c ite eq - e96e: 781a ldrbeq r2, [r3, #0] - datalen = list->length; - e970: 8912 ldrhne r2, [r2, #8] - e972: e5a7 b.n e4c4 - usb_rx_memory_needed++; - e974: 7833 ldrb r3, [r6, #0] - e976: 3301 adds r3, #1 - e978: 7033 strb r3, [r6, #0] - table[index(i, RX, ODD)].desc = 0; - e97a: f045 0301 orr.w r3, r5, #1 - e97e: f849 0033 str.w r0, [r9, r3, lsl #3] - usb_rx_memory_needed++; - e982: e7a2 b.n e8ca - usb_rx_memory_needed++; - e984: 7833 ldrb r3, [r6, #0] - table[index(i, RX, EVEN)].desc = 0; - e986: f849 0035 str.w r0, [r9, r5, lsl #3] - usb_rx_memory_needed++; - e98a: 3301 adds r3, #1 - e98c: 7033 strb r3, [r6, #0] - e98e: e7cc b.n e92a - data = reply_buffer; - e990: 4b06 ldr r3, [pc, #24] ; (e9ac ) - datalen = 2; - e992: 2202 movs r2, #2 - e994: e596 b.n e4c4 - __asm__ volatile("bkpt"); - e996: be00 bkpt 0x0000 - ep0_tx_data_toggle ^= 1; - e998: 7026 strb r6, [r4, #0] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e99a: 23c8 movs r3, #200 ; 0xc8 - ep0_tx_bdt_bank ^= 1; - e99c: f082 0601 eor.w r6, r2, #1 - e9a0: 703e strb r6, [r7, #0] - table[index(0, TX, ep0_tx_bdt_bank)].desc = BDT_DESC(len, ep0_tx_data_toggle); - e9a2: f849 3030 str.w r3, [r9, r0, lsl #3] - if (datalen == 0 && size < EP0_SIZE) return; - e9a6: e5bc b.n e522 - e9a8: 1fff9a28 .word 0x1fff9a28 - e9ac: 1fff99d4 .word 0x1fff99d4 - e9b0: 1fff99ec .word 0x1fff99ec - e9b4: 1fff9a34 .word 0x1fff9a34 - e9b8: 000187a0 .word 0x000187a0 - e9bc: 00400088 .word 0x00400088 - e9c0: 400720c0 .word 0x400720c0 - e9c4: 1fff99cc .word 0x1fff99cc - e9c8: 0001874c .word 0x0001874c - -0000e9cc : - - - -void usb_init(void) -{ - e9cc: b570 push {r4, r5, r6, lr} - int i; - - //serial_begin(BAUD2DIV(115200)); - //serial_print("usb_init\n"); - - usb_init_serialnumber(); - e9ce: f000 fb17 bl f000 - - for (i=0; i < (NUM_ENDPOINTS+1)*4; i++) { - e9d2: 2300 movs r3, #0 - e9d4: 4a1a ldr r2, [pc, #104] ; (ea40 ) - table[i].desc = 0; - e9d6: 4619 mov r1, r3 - e9d8: f842 1033 str.w r1, [r2, r3, lsl #3] - table[i].addr = 0; - e9dc: eb02 00c3 add.w r0, r2, r3, lsl #3 - for (i=0; i < (NUM_ENDPOINTS+1)*4; i++) { - e9e0: 3301 adds r3, #1 - e9e2: 2b14 cmp r3, #20 - table[i].addr = 0; - e9e4: 6041 str r1, [r0, #4] - for (i=0; i < (NUM_ENDPOINTS+1)*4; i++) { - e9e6: d1f7 bne.n e9d8 - // this basically follows the flowchart in the Kinetis - // Quick Reference User Guide, Rev. 1, 03/2012, page 141 - - // assume 48 MHz clock already running - // SIM - enable clock - SIM_SCGC4 |= SIM_SCGC4_USBOTG; - e9e8: 4c16 ldr r4, [pc, #88] ; (ea44 ) - // reset USB module - //USB0_USBTRC0 = USB_USBTRC_USBRESET; - //while ((USB0_USBTRC0 & USB_USBTRC_USBRESET) != 0) ; // wait for reset to end - - // set desc table base addr - USB0_BDTPAGE1 = ((uint32_t)table) >> 8; - e9ea: 4b17 ldr r3, [pc, #92] ; (ea48 ) - SIM_SCGC4 |= SIM_SCGC4_USBOTG; - e9ec: 6b60 ldr r0, [r4, #52] ; 0x34 - - // enable reset interrupt - USB0_INTEN = USB_INTEN_USBRSTEN; - - // enable interrupt in NVIC... - NVIC_SET_PRIORITY(IRQ_USBOTG, 112); - e9ee: 4d17 ldr r5, [pc, #92] ; (ea4c ) - SIM_SCGC4 |= SIM_SCGC4_USBOTG; - e9f0: f440 2080 orr.w r0, r0, #262144 ; 0x40000 - e9f4: 6360 str r0, [r4, #52] ; 0x34 - USB0_BDTPAGE1 = ((uint32_t)table) >> 8; - e9f6: f3c2 2407 ubfx r4, r2, #8, #8 - e9fa: f883 409c strb.w r4, [r3, #156] ; 0x9c - USB0_USBCTRL = 0; - e9fe: 4c14 ldr r4, [pc, #80] ; (ea50 ) - USB0_ISTAT = 0xFF; - ea00: 20ff movs r0, #255 ; 0xff - USB0_CTL = USB_CTL_USBENSOFEN; - ea02: f04f 0c01 mov.w ip, #1 - USB0_BDTPAGE2 = ((uint32_t)table) >> 16; - ea06: f3c2 4607 ubfx r6, r2, #16, #8 - USB0_BDTPAGE3 = ((uint32_t)table) >> 24; - ea0a: 0e12 lsrs r2, r2, #24 - USB0_BDTPAGE2 = ((uint32_t)table) >> 16; - ea0c: f883 60b0 strb.w r6, [r3, #176] ; 0xb0 - NVIC_ENABLE_IRQ(IRQ_USBOTG); - ea10: f04f 2ee0 mov.w lr, #3758153728 ; 0xe000e000 - USB0_BDTPAGE3 = ((uint32_t)table) >> 24; - ea14: f883 20b4 strb.w r2, [r3, #180] ; 0xb4 - USB0_ISTAT = 0xFF; - ea18: f883 0080 strb.w r0, [r3, #128] ; 0x80 - USB0_ERRSTAT = 0xFF; - ea1c: f883 0088 strb.w r0, [r3, #136] ; 0x88 - USB0_OTGISTAT = 0xFF; - ea20: 7418 strb r0, [r3, #16] - USB0_CTL = USB_CTL_USBENSOFEN; - ea22: f883 c094 strb.w ip, [r3, #148] ; 0x94 - USB0_USBCTRL = 0; - ea26: 7021 strb r1, [r4, #0] - USB0_INTEN = USB_INTEN_USBRSTEN; - ea28: f883 c084 strb.w ip, [r3, #132] ; 0x84 - NVIC_SET_PRIORITY(IRQ_USBOTG, 112); - ea2c: 2370 movs r3, #112 ; 0x70 - ea2e: f885 3049 strb.w r3, [r5, #73] ; 0x49 - NVIC_ENABLE_IRQ(IRQ_USBOTG); - ea32: f44f 7200 mov.w r2, #512 ; 0x200 - - // enable d+ pullup - USB0_CONTROL = USB_CONTROL_DPPULLUPNONOTG; - ea36: 2310 movs r3, #16 - NVIC_ENABLE_IRQ(IRQ_USBOTG); - ea38: f8ce 2108 str.w r2, [lr, #264] ; 0x108 - USB0_CONTROL = USB_CONTROL_DPPULLUPNONOTG; - ea3c: 7223 strb r3, [r4, #8] -} - ea3e: bd70 pop {r4, r5, r6, pc} - ea40: 1fff8000 .word 0x1fff8000 - ea44: 40048000 .word 0x40048000 - ea48: 40072000 .word 0x40072000 - ea4c: e000e400 .word 0xe000e400 - ea50: 40072100 .word 0x40072100 - -0000ea54 : - virtual void clear(void) { usb_serial_flush_input(); } - ea54: f000 b8ac b.w ebb0 - -0000ea58 : - virtual int peek() { return usb_serial_peekchar(); } - ea58: f000 b87c b.w eb54 - -0000ea5c : - virtual int read() { return usb_serial_getchar(); } - ea5c: f000 b856 b.w eb0c - -0000ea60 : - virtual int available() { return usb_serial_available(); } - ea60: f000 b890 b.w eb84 - -0000ea64 : - virtual void flush() { usb_serial_flush_output(); } // TODO: actually wait for data to leave USB... - ea64: f000 b976 b.w ed54 - -0000ea68 : - virtual int availableForWrite() { return usb_serial_write_buffer_free(); } - ea68: f000 b950 b.w ed0c - -0000ea6c : - virtual size_t write(const uint8_t *buffer, size_t size) { return usb_serial_write(buffer, size); } - ea6c: 4608 mov r0, r1 - ea6e: 4611 mov r1, r2 - ea70: f000 b8ba b.w ebe8 - -0000ea74 : - virtual size_t write(uint8_t c) { return usb_serial_putchar(c); } - ea74: 4608 mov r0, r1 - ea76: f000 b93b b.w ecf0 - ea7a: bf00 nop - -0000ea7c : -usb_packet_t * usb_malloc(void) -{ - unsigned int n, avail; - uint8_t *p; - - __disable_irq(); - ea7c: b672 cpsid i - avail = usb_buffer_available; - ea7e: 490d ldr r1, [pc, #52] ; (eab4 ) - ea80: 680b ldr r3, [r1, #0] - n = __builtin_clz(avail); // clz = count leading zeros - ea82: fab3 f083 clz r0, r3 - if (n >= NUM_USB_BUFFERS) { - ea86: 280b cmp r0, #11 - ea88: dc10 bgt.n eaac - } - //serial_print("malloc:"); - //serial_phex(n); - //serial_print("\n"); - - usb_buffer_available = avail & ~(0x80000000 >> n); - ea8a: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 - ea8e: 40c2 lsrs r2, r0 - ea90: ea23 0302 bic.w r3, r3, r2 - ea94: 600b str r3, [r1, #0] - __enable_irq(); - ea96: b662 cpsie i - p = usb_buffer_memory + (n * sizeof(usb_packet_t)); - ea98: 4a07 ldr r2, [pc, #28] ; (eab8 ) - ea9a: eb00 00c0 add.w r0, r0, r0, lsl #3 - ea9e: 00c1 lsls r1, r0, #3 - eaa0: eb02 00c0 add.w r0, r2, r0, lsl #3 - //serial_print("malloc:"); - //serial_phex32((int)p); - //serial_print("\n"); - *(uint32_t *)p = 0; - eaa4: 2300 movs r3, #0 - eaa6: 5053 str r3, [r2, r1] - *(uint32_t *)(p + 4) = 0; - eaa8: 6043 str r3, [r0, #4] - return (usb_packet_t *)p; -} - eaaa: 4770 bx lr - __enable_irq(); - eaac: b662 cpsie i - return NULL; - eaae: 2000 movs r0, #0 - eab0: 4770 bx lr - eab2: bf00 nop - eab4: 1fff8854 .word 0x1fff8854 - eab8: 1fff83bc .word 0x1fff83bc - -0000eabc : -void usb_free(usb_packet_t *p) -{ - unsigned int n, mask; - - //serial_print("free:"); - n = ((uint8_t *)p - usb_buffer_memory) / sizeof(usb_packet_t); - eabc: 4b0e ldr r3, [pc, #56] ; (eaf8 ) - eabe: 1ac3 subs r3, r0, r3 - if (n >= NUM_USB_BUFFERS) return; - eac0: f5b3 7f58 cmp.w r3, #864 ; 0x360 - eac4: d210 bcs.n eae8 - //serial_phex(n); - //serial_print("\n"); - - // if any endpoints are starving for memory to receive - // packets, give this memory to them immediately! - if (usb_rx_memory_needed && usb_configuration) { - eac6: 4a0d ldr r2, [pc, #52] ; (eafc ) - eac8: 7812 ldrb r2, [r2, #0] - eaca: b972 cbnz r2, eaea - usb_rx_memory(p); - return; - } - - mask = (0x80000000 >> n); - __disable_irq(); - eacc: b672 cpsid i - n = ((uint8_t *)p - usb_buffer_memory) / sizeof(usb_packet_t); - eace: 4a0c ldr r2, [pc, #48] ; (eb00 ) - usb_buffer_available |= mask; - ead0: 490c ldr r1, [pc, #48] ; (eb04 ) - n = ((uint8_t *)p - usb_buffer_memory) / sizeof(usb_packet_t); - ead2: fba2 2303 umull r2, r3, r2, r3 - usb_buffer_available |= mask; - ead6: 6808 ldr r0, [r1, #0] - mask = (0x80000000 >> n); - ead8: f04f 4200 mov.w r2, #2147483648 ; 0x80000000 - n = ((uint8_t *)p - usb_buffer_memory) / sizeof(usb_packet_t); - eadc: 091b lsrs r3, r3, #4 - mask = (0x80000000 >> n); - eade: fa22 f303 lsr.w r3, r2, r3 - usb_buffer_available |= mask; - eae2: 4303 orrs r3, r0 - eae4: 600b str r3, [r1, #0] - __enable_irq(); - eae6: b662 cpsie i - - //serial_print("free:"); - //serial_phex32((int)p); - //serial_print("\n"); -} - eae8: 4770 bx lr - if (usb_rx_memory_needed && usb_configuration) { - eaea: 4a07 ldr r2, [pc, #28] ; (eb08 ) - eaec: 7812 ldrb r2, [r2, #0] - eaee: 2a00 cmp r2, #0 - eaf0: d0ec beq.n eacc - usb_rx_memory(p); - eaf2: f7ff bb2d b.w e150 - eaf6: bf00 nop - eaf8: 1fff83bc .word 0x1fff83bc - eafc: 1fff9a34 .word 0x1fff9a34 - eb00: 38e38e39 .word 0x38e38e39 - eb04: 1fff8854 .word 0x1fff8854 - eb08: 1fff9a28 .word 0x1fff9a28 - -0000eb0c : - -#define TRANSMIT_FLUSH_TIMEOUT 5 /* in milliseconds */ - -// get the next character, or -1 if nothing received -int usb_serial_getchar(void) -{ - eb0c: b538 push {r3, r4, r5, lr} - unsigned int i; - int c; - - if (!rx_packet) { - eb0e: 4c0f ldr r4, [pc, #60] ; (eb4c ) - eb10: 6820 ldr r0, [r4, #0] - eb12: b178 cbz r0, eb34 - if (!usb_configuration) return -1; - rx_packet = usb_rx(CDC_RX_ENDPOINT); - if (!rx_packet) return -1; - } - i = rx_packet->index; - eb14: 8843 ldrh r3, [r0, #2] - c = rx_packet->buf[i++]; - if (i >= rx_packet->len) { - eb16: 8802 ldrh r2, [r0, #0] - c = rx_packet->buf[i++]; - eb18: 18c1 adds r1, r0, r3 - eb1a: 3301 adds r3, #1 - if (i >= rx_packet->len) { - eb1c: 429a cmp r2, r3 - c = rx_packet->buf[i++]; - eb1e: 7a0d ldrb r5, [r1, #8] - if (i >= rx_packet->len) { - eb20: d902 bls.n eb28 - usb_free(rx_packet); - rx_packet = NULL; - } else { - rx_packet->index = i; - eb22: 8043 strh r3, [r0, #2] - } - return c; -} - eb24: 4628 mov r0, r5 - eb26: bd38 pop {r3, r4, r5, pc} - usb_free(rx_packet); - eb28: f7ff ffc8 bl eabc - rx_packet = NULL; - eb2c: 2300 movs r3, #0 - eb2e: 6023 str r3, [r4, #0] -} - eb30: 4628 mov r0, r5 - eb32: bd38 pop {r3, r4, r5, pc} - if (!usb_configuration) return -1; - eb34: 4b06 ldr r3, [pc, #24] ; (eb50 ) - eb36: 781b ldrb r3, [r3, #0] - eb38: b12b cbz r3, eb46 - rx_packet = usb_rx(CDC_RX_ENDPOINT); - eb3a: 2003 movs r0, #3 - eb3c: f7ff fad0 bl e0e0 - eb40: 6020 str r0, [r4, #0] - if (!rx_packet) return -1; - eb42: 2800 cmp r0, #0 - eb44: d1e6 bne.n eb14 - if (!usb_configuration) return -1; - eb46: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff - eb4a: e7eb b.n eb24 - eb4c: 1fff9a38 .word 0x1fff9a38 - eb50: 1fff9a28 .word 0x1fff9a28 - -0000eb54 : - -// peek at the next character, or -1 if nothing received -int usb_serial_peekchar(void) -{ - eb54: b510 push {r4, lr} - if (!rx_packet) { - eb56: 4c09 ldr r4, [pc, #36] ; (eb7c ) - eb58: 6820 ldr r0, [r4, #0] - eb5a: b118 cbz r0, eb64 - if (!usb_configuration) return -1; - rx_packet = usb_rx(CDC_RX_ENDPOINT); - if (!rx_packet) return -1; - } - if (!rx_packet) return -1; - return rx_packet->buf[rx_packet->index]; - eb5c: 8843 ldrh r3, [r0, #2] - eb5e: 4418 add r0, r3 - eb60: 7a00 ldrb r0, [r0, #8] -} - eb62: bd10 pop {r4, pc} - if (!usb_configuration) return -1; - eb64: 4b06 ldr r3, [pc, #24] ; (eb80 ) - eb66: 781b ldrb r3, [r3, #0] - eb68: b12b cbz r3, eb76 - rx_packet = usb_rx(CDC_RX_ENDPOINT); - eb6a: 2003 movs r0, #3 - eb6c: f7ff fab8 bl e0e0 - eb70: 6020 str r0, [r4, #0] - if (!rx_packet) return -1; - eb72: 2800 cmp r0, #0 - eb74: d1f2 bne.n eb5c - if (!usb_configuration) return -1; - eb76: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff -} - eb7a: bd10 pop {r4, pc} - eb7c: 1fff9a38 .word 0x1fff9a38 - eb80: 1fff9a28 .word 0x1fff9a28 - -0000eb84 : -// number of bytes available in the receive buffer -int usb_serial_available(void) -{ - int count; - count = usb_rx_byte_count(CDC_RX_ENDPOINT); - if (rx_packet) count += rx_packet->len - rx_packet->index; - eb84: 4b08 ldr r3, [pc, #32] ; (eba8 ) -static inline uint32_t usb_rx_byte_count(uint32_t endpoint) __attribute__((always_inline)); -static inline uint32_t usb_rx_byte_count(uint32_t endpoint) -{ - endpoint--; - if (endpoint >= NUM_ENDPOINTS) return 0; - return usb_rx_byte_count_data[endpoint]; - eb86: 4a09 ldr r2, [pc, #36] ; (ebac ) - eb88: 681b ldr r3, [r3, #0] -{ - eb8a: b510 push {r4, lr} - count = usb_rx_byte_count(CDC_RX_ENDPOINT); - eb8c: 8894 ldrh r4, [r2, #4] - if (rx_packet) count += rx_packet->len - rx_packet->index; - eb8e: b11b cbz r3, eb98 - eb90: 881a ldrh r2, [r3, #0] - eb92: 885b ldrh r3, [r3, #2] - eb94: 1ad3 subs r3, r2, r3 - eb96: 441c add r4, r3 - if (count == 0) yield(); - eb98: b10c cbz r4, eb9e - return count; -} - eb9a: 4620 mov r0, r4 - eb9c: bd10 pop {r4, pc} - if (count == 0) yield(); - eb9e: f000 f929 bl edf4 -} - eba2: 4620 mov r0, r4 - eba4: bd10 pop {r4, pc} - eba6: bf00 nop - eba8: 1fff9a38 .word 0x1fff9a38 - ebac: 1fff9a2c .word 0x1fff9a2c - -0000ebb0 : -// discard any buffered input -void usb_serial_flush_input(void) -{ - usb_packet_t *rx; - - if (!usb_configuration) return; - ebb0: 4b0b ldr r3, [pc, #44] ; (ebe0 ) - ebb2: 781b ldrb r3, [r3, #0] - ebb4: b19b cbz r3, ebde -{ - ebb6: b510 push {r4, lr} - if (rx_packet) { - ebb8: 4c0a ldr r4, [pc, #40] ; (ebe4 ) - ebba: 6820 ldr r0, [r4, #0] - ebbc: b148 cbz r0, ebd2 - usb_free(rx_packet); - ebbe: f7ff ff7d bl eabc - rx_packet = NULL; - ebc2: 2300 movs r3, #0 - } - while (1) { - rx = usb_rx(CDC_RX_ENDPOINT); - ebc4: 2003 movs r0, #3 - rx_packet = NULL; - ebc6: 6023 str r3, [r4, #0] - rx = usb_rx(CDC_RX_ENDPOINT); - ebc8: f7ff fa8a bl e0e0 - if (!rx) break; - ebcc: b130 cbz r0, ebdc - usb_free(rx); - ebce: f7ff ff75 bl eabc - rx = usb_rx(CDC_RX_ENDPOINT); - ebd2: 2003 movs r0, #3 - ebd4: f7ff fa84 bl e0e0 - if (!rx) break; - ebd8: 2800 cmp r0, #0 - ebda: d1f8 bne.n ebce - } -} - ebdc: bd10 pop {r4, pc} - ebde: 4770 bx lr - ebe0: 1fff9a28 .word 0x1fff9a28 - ebe4: 1fff9a38 .word 0x1fff9a38 - -0000ebe8 : - return usb_serial_write(&c, 1); -} - - -int usb_serial_write(const void *buffer, uint32_t size) -{ - ebe8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - uint32_t len; - uint32_t wait_count; - const uint8_t *src = (const uint8_t *)buffer; - uint8_t *dest; - - tx_noautoflush = 1; - ebec: f8df 90ec ldr.w r9, [pc, #236] ; ecdc -{ - ebf0: b083 sub sp, #12 - tx_noautoflush = 1; - ebf2: 2201 movs r2, #1 - ebf4: f889 2000 strb.w r2, [r9] - while (size > 0) { - ebf8: 9101 str r1, [sp, #4] - ebfa: b379 cbz r1, ec5c - ebfc: 4f38 ldr r7, [pc, #224] ; (ece0 ) - if (!tx_packet) { - wait_count = 0; - while (1) { - if (!usb_configuration) { - ebfe: f8df 80e4 ldr.w r8, [pc, #228] ; ece4 - while (size > 0) { - ec02: 9d01 ldr r5, [sp, #4] - ec04: 4e38 ldr r6, [pc, #224] ; (ece8 ) - if (tx_packet->index >= CDC_TX_SIZE) { - tx_packet->len = CDC_TX_SIZE; - usb_tx(CDC_TX_ENDPOINT, tx_packet); - tx_packet = NULL; - } - usb_cdc_transmit_flush_timer = TRANSMIT_FLUSH_TIMEOUT; - ec06: f8df a0e4 ldr.w sl, [pc, #228] ; ecec - ec0a: 4683 mov fp, r0 - if (!tx_packet) { - ec0c: 6839 ldr r1, [r7, #0] - ec0e: b3a1 cbz r1, ec7a - len = CDC_TX_SIZE - tx_packet->index; - ec10: f8b1 e002 ldrh.w lr, [r1, #2] - ec14: f1ce 0c40 rsb ip, lr, #64 ; 0x40 - ec18: 45ac cmp ip, r5 - ec1a: bf28 it cs - ec1c: 46ac movcs ip, r5 - tx_packet->index += len; - ec1e: eb0e 040c add.w r4, lr, ip - transmit_previous_timeout = 0; - ec22: 2200 movs r2, #0 - tx_packet->index += len; - ec24: b2a4 uxth r4, r4 - transmit_previous_timeout = 0; - ec26: 7032 strb r2, [r6, #0] - size -= len; - ec28: eba5 050c sub.w r5, r5, ip - tx_packet->index += len; - ec2c: 804c strh r4, [r1, #2] - dest = tx_packet->buf + tx_packet->index; - ec2e: f101 0208 add.w r2, r1, #8 - while (len-- > 0) *dest++ = *src++; - ec32: f1bc 0f00 cmp.w ip, #0 - ec36: d00a beq.n ec4e - ec38: f10e 3eff add.w lr, lr, #4294967295 ; 0xffffffff - ec3c: 4472 add r2, lr - ec3e: 44dc add ip, fp - ec40: f81b 4b01 ldrb.w r4, [fp], #1 - ec44: f802 4f01 strb.w r4, [r2, #1]! - ec48: 45dc cmp ip, fp - ec4a: d1f9 bne.n ec40 - if (tx_packet->index >= CDC_TX_SIZE) { - ec4c: 884c ldrh r4, [r1, #2] - ec4e: 2c3f cmp r4, #63 ; 0x3f - ec50: d80b bhi.n ec6a - usb_cdc_transmit_flush_timer = TRANSMIT_FLUSH_TIMEOUT; - ec52: 2205 movs r2, #5 - ec54: f88a 2000 strb.w r2, [sl] - while (size > 0) { - ec58: 2d00 cmp r5, #0 - ec5a: d1d7 bne.n ec0c - } - tx_noautoflush = 0; - return ret; - ec5c: 9801 ldr r0, [sp, #4] - tx_noautoflush = 0; - ec5e: 2300 movs r3, #0 - ec60: f889 3000 strb.w r3, [r9] -} - ec64: b003 add sp, #12 - ec66: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - tx_packet->len = CDC_TX_SIZE; - ec6a: 2240 movs r2, #64 ; 0x40 - ec6c: 800a strh r2, [r1, #0] - usb_tx(CDC_TX_ENDPOINT, tx_packet); - ec6e: 2004 movs r0, #4 - ec70: f7ff faae bl e1d0 - tx_packet = NULL; - ec74: 2200 movs r2, #0 - ec76: 603a str r2, [r7, #0] - ec78: e7eb b.n ec52 - if (!usb_configuration) { - ec7a: f898 2000 ldrb.w r2, [r8] - ec7e: b32a cbz r2, eccc - ec80: f24a 24f9 movw r4, #41721 ; 0xa2f9 - ec84: e008 b.n ec98 - if (++wait_count > TX_TIMEOUT || transmit_previous_timeout) { - ec86: 3c01 subs r4, #1 - ec88: d019 beq.n ecbe - ec8a: 7832 ldrb r2, [r6, #0] - ec8c: b9ba cbnz r2, ecbe - yield(); - ec8e: f000 f8b1 bl edf4 - if (!usb_configuration) { - ec92: f898 2000 ldrb.w r2, [r8] - ec96: b1ca cbz r2, eccc - if (usb_tx_packet_count(CDC_TX_ENDPOINT) < TX_PACKET_LIMIT) { - ec98: 2004 movs r0, #4 - ec9a: f7ff fa43 bl e124 - ec9e: 2807 cmp r0, #7 - eca0: d8f1 bhi.n ec86 - tx_noautoflush = 1; - eca2: f04f 0301 mov.w r3, #1 - eca6: f889 3000 strb.w r3, [r9] - tx_packet = usb_malloc(); - ecaa: f7ff fee7 bl ea7c - ecae: 4601 mov r1, r0 - ecb0: 6038 str r0, [r7, #0] - if (tx_packet) break; - ecb2: 2800 cmp r0, #0 - ecb4: d1ac bne.n ec10 - if (++wait_count > TX_TIMEOUT || transmit_previous_timeout) { - ecb6: 3c01 subs r4, #1 - tx_noautoflush = 0; - ecb8: f889 0000 strb.w r0, [r9] - if (++wait_count > TX_TIMEOUT || transmit_previous_timeout) { - ecbc: d1e5 bne.n ec8a - transmit_previous_timeout = 1; - ecbe: 2301 movs r3, #1 - return -1; - ecc0: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - transmit_previous_timeout = 1; - ecc4: 7033 strb r3, [r6, #0] -} - ecc6: b003 add sp, #12 - ecc8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - tx_noautoflush = 0; - eccc: 2300 movs r3, #0 - return -1; - ecce: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - tx_noautoflush = 0; - ecd2: f889 3000 strb.w r3, [r9] -} - ecd6: b003 add sp, #12 - ecd8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - ecdc: 1fff9a3d .word 0x1fff9a3d - ece0: 1fff9a40 .word 0x1fff9a40 - ece4: 1fff9a28 .word 0x1fff9a28 - ece8: 1fff9a3c .word 0x1fff9a3c - ecec: 1fff9a54 .word 0x1fff9a54 - -0000ecf0 : -{ - ecf0: b500 push {lr} - ecf2: b083 sub sp, #12 - ecf4: 4603 mov r3, r0 - return usb_serial_write(&c, 1); - ecf6: 2101 movs r1, #1 - ecf8: f10d 0007 add.w r0, sp, #7 -{ - ecfc: f88d 3007 strb.w r3, [sp, #7] - return usb_serial_write(&c, 1); - ed00: f7ff ff72 bl ebe8 -} - ed04: b003 add sp, #12 - ed06: f85d fb04 ldr.w pc, [sp], #4 - ed0a: bf00 nop - -0000ed0c : - -int usb_serial_write_buffer_free(void) -{ - ed0c: b538 push {r3, r4, r5, lr} - uint32_t len; - - tx_noautoflush = 1; - if (!tx_packet) { - ed0e: 4d0e ldr r5, [pc, #56] ; (ed48 ) - tx_noautoflush = 1; - ed10: 4c0e ldr r4, [pc, #56] ; (ed4c ) - if (!tx_packet) { - ed12: 6828 ldr r0, [r5, #0] - tx_noautoflush = 1; - ed14: 2301 movs r3, #1 - ed16: 7023 strb r3, [r4, #0] - if (!tx_packet) { - ed18: b128 cbz r0, ed26 - (tx_packet = usb_malloc()) == NULL) { - tx_noautoflush = 0; - return 0; - } - } - len = CDC_TX_SIZE - tx_packet->index; - ed1a: 8840 ldrh r0, [r0, #2] - // space we just promised the user could write without blocking? - // But does this come with other performance downsides? Could it lead to - // buffer data never actually transmitting in some usage cases? More - // investigation is needed. - // https://github.com/PaulStoffregen/cores/issues/10#issuecomment-61514955 - tx_noautoflush = 0; - ed1c: 2300 movs r3, #0 - len = CDC_TX_SIZE - tx_packet->index; - ed1e: f1c0 0040 rsb r0, r0, #64 ; 0x40 - tx_noautoflush = 0; - ed22: 7023 strb r3, [r4, #0] - return len; -} - ed24: bd38 pop {r3, r4, r5, pc} - if (!usb_configuration || - ed26: 4b0a ldr r3, [pc, #40] ; (ed50 ) - ed28: 781b ldrb r3, [r3, #0] - ed2a: b913 cbnz r3, ed32 - tx_noautoflush = 0; - ed2c: 2000 movs r0, #0 - ed2e: 7020 strb r0, [r4, #0] -} - ed30: bd38 pop {r3, r4, r5, pc} - usb_tx_packet_count(CDC_TX_ENDPOINT) >= TX_PACKET_LIMIT || - ed32: 2004 movs r0, #4 - ed34: f7ff f9f6 bl e124 - if (!usb_configuration || - ed38: 2807 cmp r0, #7 - ed3a: d8f7 bhi.n ed2c - (tx_packet = usb_malloc()) == NULL) { - ed3c: f7ff fe9e bl ea7c - ed40: 6028 str r0, [r5, #0] - usb_tx_packet_count(CDC_TX_ENDPOINT) >= TX_PACKET_LIMIT || - ed42: 2800 cmp r0, #0 - ed44: d1e9 bne.n ed1a - ed46: e7f1 b.n ed2c - ed48: 1fff9a40 .word 0x1fff9a40 - ed4c: 1fff9a3d .word 0x1fff9a3d - ed50: 1fff9a28 .word 0x1fff9a28 - -0000ed54 : - -void usb_serial_flush_output(void) -{ - ed54: b5f8 push {r3, r4, r5, r6, r7, lr} - if (!usb_configuration) return; - ed56: 4b11 ldr r3, [pc, #68] ; (ed9c ) - ed58: 781b ldrb r3, [r3, #0] - ed5a: b18b cbz r3, ed80 - tx_noautoflush = 1; - if (tx_packet) { - ed5c: 4e10 ldr r6, [pc, #64] ; (eda0 ) - tx_noautoflush = 1; - ed5e: 4d11 ldr r5, [pc, #68] ; (eda4 ) - if (tx_packet) { - ed60: 6834 ldr r4, [r6, #0] - tx_noautoflush = 1; - ed62: 2701 movs r7, #1 - ed64: 702f strb r7, [r5, #0] - if (tx_packet) { - ed66: b164 cbz r4, ed82 - usb_cdc_transmit_flush_timer = 0; - ed68: 4b0f ldr r3, [pc, #60] ; (eda8 ) - ed6a: 2700 movs r7, #0 - ed6c: 701f strb r7, [r3, #0] - tx_packet->len = tx_packet->index; - ed6e: 8863 ldrh r3, [r4, #2] - ed70: 8023 strh r3, [r4, #0] - usb_tx(CDC_TX_ENDPOINT, tx_packet); - ed72: 4621 mov r1, r4 - ed74: 2004 movs r0, #4 - ed76: f7ff fa2b bl e1d0 - tx_packet = NULL; - ed7a: 6037 str r7, [r6, #0] - usb_tx(CDC_TX_ENDPOINT, tx); - } else { - usb_cdc_transmit_flush_timer = 1; - } - } - tx_noautoflush = 0; - ed7c: 2300 movs r3, #0 - ed7e: 702b strb r3, [r5, #0] -} - ed80: bdf8 pop {r3, r4, r5, r6, r7, pc} - usb_packet_t *tx = usb_malloc(); - ed82: f7ff fe7b bl ea7c - usb_cdc_transmit_flush_timer = 0; - ed86: 4b08 ldr r3, [pc, #32] ; (eda8 ) - if (tx) { - ed88: 4601 mov r1, r0 - ed8a: b120 cbz r0, ed96 - usb_tx(CDC_TX_ENDPOINT, tx); - ed8c: 2004 movs r0, #4 - usb_cdc_transmit_flush_timer = 0; - ed8e: 701c strb r4, [r3, #0] - usb_tx(CDC_TX_ENDPOINT, tx); - ed90: f7ff fa1e bl e1d0 - ed94: e7f2 b.n ed7c - usb_cdc_transmit_flush_timer = 1; - ed96: 701f strb r7, [r3, #0] - ed98: e7f0 b.n ed7c - ed9a: bf00 nop - ed9c: 1fff9a28 .word 0x1fff9a28 - eda0: 1fff9a40 .word 0x1fff9a40 - eda4: 1fff9a3d .word 0x1fff9a3d - eda8: 1fff9a54 .word 0x1fff9a54 - -0000edac : - -void usb_serial_flush_callback(void) -{ - edac: b538 push {r3, r4, r5, lr} - if (tx_noautoflush) return; - edae: 4b0e ldr r3, [pc, #56] ; (ede8 ) - edb0: 781b ldrb r3, [r3, #0] - edb2: b953 cbnz r3, edca - if (tx_packet) { - edb4: 4c0d ldr r4, [pc, #52] ; (edec ) - edb6: 6821 ldr r1, [r4, #0] - edb8: b141 cbz r1, edcc - edba: f003 05ff and.w r5, r3, #255 ; 0xff - tx_packet->len = tx_packet->index; - edbe: 884b ldrh r3, [r1, #2] - edc0: 800b strh r3, [r1, #0] - usb_tx(CDC_TX_ENDPOINT, tx_packet); - edc2: 2004 movs r0, #4 - edc4: f7ff fa04 bl e1d0 - tx_packet = NULL; - edc8: 6025 str r5, [r4, #0] - usb_tx(CDC_TX_ENDPOINT, tx); - } else { - usb_cdc_transmit_flush_timer = 1; - } - } -} - edca: bd38 pop {r3, r4, r5, pc} - usb_packet_t *tx = usb_malloc(); - edcc: f7ff fe56 bl ea7c - if (tx) { - edd0: 4601 mov r1, r0 - edd2: b120 cbz r0, edde -} - edd4: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - usb_tx(CDC_TX_ENDPOINT, tx); - edd8: 2004 movs r0, #4 - edda: f7ff b9f9 b.w e1d0 - usb_cdc_transmit_flush_timer = 1; - edde: 4b04 ldr r3, [pc, #16] ; (edf0 ) - ede0: 2201 movs r2, #1 - ede2: 701a strb r2, [r3, #0] -} - ede4: bd38 pop {r3, r4, r5, pc} - ede6: bf00 nop - ede8: 1fff9a3d .word 0x1fff9a3d - edec: 1fff9a40 .word 0x1fff9a40 - edf0: 1fff9a54 .word 0x1fff9a54 - -0000edf4 : - -extern const uint8_t _serialEvent_default; - -void yield(void) __attribute__ ((weak)); -void yield(void) -{ - edf4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - static uint8_t running=0; - if (!yield_active_check_flags) return; // nothing to do - edf8: 4e32 ldr r6, [pc, #200] ; (eec4 ) - edfa: 7833 ldrb r3, [r6, #0] - edfc: b163 cbz r3, ee18 - if (running) return; // TODO: does this need to be atomic? - edfe: 4f32 ldr r7, [pc, #200] ; (eec8 ) - ee00: 783a ldrb r2, [r7, #0] - ee02: b94a cbnz r2, ee18 - running = 1; - ee04: 2201 movs r2, #1 - - - // USB Serail - Add hack to minimize impact... - if (yield_active_check_flags & YIELD_CHECK_USB_SERIAL) { - ee06: 07d9 lsls r1, r3, #31 - running = 1; - ee08: 703a strb r2, [r7, #0] - if (yield_active_check_flags & YIELD_CHECK_USB_SERIAL) { - ee0a: d443 bmi.n ee94 - if (yield_active_check_flags & YIELD_CHECK_USB_SERIALUSB2) { - if (SerialUSB2.available()) serialEventUSB2(); - if (_serialEventUSB2_default) yield_active_check_flags &= ~YIELD_CHECK_USB_SERIALUSB2; - } -#endif - if (yield_active_check_flags & YIELD_CHECK_HARDWARE_SERIAL) { - ee0c: 079a lsls r2, r3, #30 - ee0e: d426 bmi.n ee5e - HardwareSerial::processSerialEventsList(); - } - running = 0; - ee10: 2200 movs r2, #0 - if (yield_active_check_flags & YIELD_CHECK_EVENT_RESPONDER) EventResponder::runFromYield(); - ee12: 075b lsls r3, r3, #29 - running = 0; - ee14: 703a strb r2, [r7, #0] - if (yield_active_check_flags & YIELD_CHECK_EVENT_RESPONDER) EventResponder::runFromYield(); - ee16: d401 bmi.n ee1c - -}; - ee18: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - if (!firstYield) return; - ee1c: 4b2b ldr r3, [pc, #172] ; (eecc ) - ee1e: 681a ldr r2, [r3, #0] - ee20: 2a00 cmp r2, #0 - ee22: d0f9 beq.n ee18 - __asm__ volatile("mrs %0, ipsr\n" : "=r" (ipsr)::); - ee24: f3ef 8205 mrs r2, IPSR - if (ipsr != 0) return; - ee28: 2a00 cmp r2, #0 - ee2a: d1f5 bne.n ee18 - __asm__ volatile("mrs %0, primask\n" : "=r" (primask)::); - ee2c: f3ef 8510 mrs r5, PRIMASK - __disable_irq(); - ee30: b672 cpsid i - EventResponder *first = firstYield; - ee32: 6818 ldr r0, [r3, #0] - if (first == nullptr) { - ee34: 2800 cmp r0, #0 - ee36: d03a beq.n eeae - if (runningFromYield) { - ee38: 4c25 ldr r4, [pc, #148] ; (eed0 ) - ee3a: 7821 ldrb r1, [r4, #0] - ee3c: 2900 cmp r1, #0 - ee3e: d136 bne.n eeae - firstYield = first->_next; - ee40: 6942 ldr r2, [r0, #20] - ee42: 601a str r2, [r3, #0] - runningFromYield = true; - ee44: 2301 movs r3, #1 - ee46: 7023 strb r3, [r4, #0] - if (firstYield) { - ee48: 2a00 cmp r2, #0 - ee4a: d037 beq.n eebc - firstYield->_prev = nullptr; - ee4c: 6191 str r1, [r2, #24] - if (doit) __enable_irq(); - ee4e: b905 cbnz r5, ee52 - ee50: b662 cpsie i - first->_triggered = false; - ee52: 2500 movs r5, #0 - (*(first->_function))(*first); - ee54: 6883 ldr r3, [r0, #8] - first->_triggered = false; - ee56: 7745 strb r5, [r0, #29] - (*(first->_function))(*first); - ee58: 4798 blx r3 - runningFromYield = false; - ee5a: 7025 strb r5, [r4, #0] - ee5c: e7dc b.n ee18 - for (uint8_t i = 0; i < s_count_serials_with_serial_events; i++) { - ee5e: f8df 8074 ldr.w r8, [pc, #116] ; eed4 - ee62: f898 2000 ldrb.w r2, [r8] - ee66: 2a00 cmp r2, #0 - ee68: d0d2 beq.n ee10 - ee6a: 2500 movs r5, #0 - ee6c: f8df 9068 ldr.w r9, [pc, #104] ; eed8 - ee70: 462b mov r3, r5 - s_serials_with_serial_events[i]->doYieldCode(); - ee72: f859 4023 ldr.w r4, [r9, r3, lsl #2] - if (available()) (*_serialEvent)(); - ee76: 6823 ldr r3, [r4, #0] - ee78: 4620 mov r0, r4 - ee7a: 691b ldr r3, [r3, #16] - for (uint8_t i = 0; i < s_count_serials_with_serial_events; i++) { - ee7c: 3501 adds r5, #1 - if (available()) (*_serialEvent)(); - ee7e: 4798 blx r3 - ee80: b108 cbz r0, ee86 - ee82: 6923 ldr r3, [r4, #16] - ee84: 4798 blx r3 - for (uint8_t i = 0; i < s_count_serials_with_serial_events; i++) { - ee86: f898 2000 ldrb.w r2, [r8] - ee8a: b2eb uxtb r3, r5 - ee8c: 429a cmp r2, r3 - ee8e: d8f0 bhi.n ee72 - if (yield_active_check_flags & YIELD_CHECK_EVENT_RESPONDER) EventResponder::runFromYield(); - ee90: 7833 ldrb r3, [r6, #0] - ee92: e7bd b.n ee10 - virtual int available() { return usb_serial_available(); } - ee94: f7ff fe76 bl eb84 - if (Serial.available()) serialEvent(); - ee98: b968 cbnz r0, eeb6 - if (_serialEvent_default) yield_active_check_flags &= ~YIELD_CHECK_USB_SERIAL; - ee9a: 4b10 ldr r3, [pc, #64] ; (eedc ) - ee9c: 781b ldrb r3, [r3, #0] - ee9e: b90b cbnz r3, eea4 - eea0: 7833 ldrb r3, [r6, #0] - eea2: e7b3 b.n ee0c - eea4: 7833 ldrb r3, [r6, #0] - eea6: f003 03fe and.w r3, r3, #254 ; 0xfe - eeaa: 7033 strb r3, [r6, #0] - eeac: e7ae b.n ee0c - if (doit) __enable_irq(); - eeae: 2d00 cmp r5, #0 - eeb0: d1b2 bne.n ee18 - eeb2: b662 cpsie i - eeb4: e7b0 b.n ee18 - if (Serial.available()) serialEvent(); - eeb6: f000 f8a1 bl effc - eeba: e7ee b.n ee9a - lastYield = nullptr; - eebc: 4b08 ldr r3, [pc, #32] ; (eee0 ) - eebe: 601a str r2, [r3, #0] - eec0: e7c5 b.n ee4e - eec2: bf00 nop - eec4: 1fff8858 .word 0x1fff8858 - eec8: 1fff9a55 .word 0x1fff9a55 - eecc: 1fff9778 .word 0x1fff9778 - eed0: 1fff9784 .word 0x1fff9784 - eed4: 1fff9a64 .word 0x1fff9a64 - eed8: 1fff9a58 .word 0x1fff9a58 - eedc: 000184c6 .word 0x000184c6 - eee0: 1fff9788 .word 0x1fff9788 - -0000eee4 : -HardwareSerial *HardwareSerial::s_serials_with_serial_events[CNT_HARDWARE_SERIAL]; -uint8_t HardwareSerial::s_count_serials_with_serial_events = 0; - -// simple helper function that add us to the list of Serial ports that have -// their own serialEvent code defined that needs to be called at yield. -void HardwareSerial::addToSerialEventsList() { - eee4: b470 push {r4, r5, r6} - for (uint8_t i = 0; i < s_count_serials_with_serial_events; i++) { - eee6: 4e10 ldr r6, [pc, #64] ; (ef28 ) - eee8: 4d10 ldr r5, [pc, #64] ; (ef2c ) - eeea: 7834 ldrb r4, [r6, #0] - eeec: b1d4 cbz r4, ef24 - eeee: 1e62 subs r2, r4, #1 - eef0: b2d2 uxtb r2, r2 - eef2: 1d29 adds r1, r5, #4 - eef4: 462b mov r3, r5 - eef6: eb01 0182 add.w r1, r1, r2, lsl #2 - eefa: e001 b.n ef00 - eefc: 428b cmp r3, r1 - eefe: d005 beq.n ef0c - if (s_serials_with_serial_events[i] == this) return; // already in the list. - ef00: f853 2b04 ldr.w r2, [r3], #4 - ef04: 4282 cmp r2, r0 - ef06: d1f9 bne.n eefc - } - - s_serials_with_serial_events[s_count_serials_with_serial_events++] = this; - yield_active_check_flags |= YIELD_CHECK_HARDWARE_SERIAL; -} - ef08: bc70 pop {r4, r5, r6} - ef0a: 4770 bx lr - s_serials_with_serial_events[s_count_serials_with_serial_events++] = this; - ef0c: 1c63 adds r3, r4, #1 - ef0e: b2db uxtb r3, r3 - yield_active_check_flags |= YIELD_CHECK_HARDWARE_SERIAL; - ef10: 4a07 ldr r2, [pc, #28] ; (ef30 ) - s_serials_with_serial_events[s_count_serials_with_serial_events++] = this; - ef12: 7033 strb r3, [r6, #0] - yield_active_check_flags |= YIELD_CHECK_HARDWARE_SERIAL; - ef14: 7813 ldrb r3, [r2, #0] - s_serials_with_serial_events[s_count_serials_with_serial_events++] = this; - ef16: f845 0024 str.w r0, [r5, r4, lsl #2] - yield_active_check_flags |= YIELD_CHECK_HARDWARE_SERIAL; - ef1a: f043 0302 orr.w r3, r3, #2 - ef1e: 7013 strb r3, [r2, #0] -} - ef20: bc70 pop {r4, r5, r6} - ef22: 4770 bx lr - for (uint8_t i = 0; i < s_count_serials_with_serial_events; i++) { - ef24: 2301 movs r3, #1 - ef26: e7f3 b.n ef10 - ef28: 1fff9a64 .word 0x1fff9a64 - ef2c: 1fff9a58 .word 0x1fff9a58 - ef30: 1fff8858 .word 0x1fff8858 - -0000ef34 : -void analog_init(void) -{ - uint32_t num; - - #if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) - VREF_TRM = 0x60; - ef34: 4b2a ldr r3, [pc, #168] ; (efe0 ) - VREF_SC = 0xE1; // enable 1.2 volt ref - #endif - - if (analog_config_bits == 8) { - ef36: 4a2b ldr r2, [pc, #172] ; (efe4 ) - VREF_TRM = 0x60; - ef38: 2060 movs r0, #96 ; 0x60 - VREF_SC = 0xE1; // enable 1.2 volt ref - ef3a: 21e1 movs r1, #225 ; 0xe1 - VREF_TRM = 0x60; - ef3c: 7018 strb r0, [r3, #0] - VREF_SC = 0xE1; // enable 1.2 volt ref - ef3e: 7059 strb r1, [r3, #1] - if (analog_config_bits == 8) { - ef40: 7813 ldrb r3, [r2, #0] - ADC0_CFG1 = ADC_CFG1_8BIT + ADC_CFG1_MODE(0); - ef42: 4829 ldr r0, [pc, #164] ; (efe8 ) - if (analog_config_bits == 8) { - ef44: 2b08 cmp r3, #8 - ef46: d034 beq.n efb2 - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - #ifdef HAS_KINETIS_ADC1 - ADC1_CFG1 = ADC_CFG1_8BIT + ADC_CFG1_MODE(0); - ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - #endif - } else if (analog_config_bits == 10) { - ef48: 2b0a cmp r3, #10 - ef4a: d020 beq.n ef8e - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - #ifdef HAS_KINETIS_ADC1 - ADC1_CFG1 = ADC_CFG1_10BIT + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP; - ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - #endif - } else if (analog_config_bits == 12) { - ef4c: 2b0c cmp r3, #12 - ADC0_CFG1 = ADC_CFG1_12BIT + ADC_CFG1_MODE(1) + ADC_CFG1_ADLSMP; - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2); - #ifdef HAS_KINETIS_ADC1 - ADC1_CFG1 = ADC_CFG1_12BIT + ADC_CFG1_MODE(1) + ADC_CFG1_ADLSMP; - ef4e: 4b27 ldr r3, [pc, #156] ; (efec ) - ADC0_CFG1 = ADC_CFG1_12BIT + ADC_CFG1_MODE(1) + ADC_CFG1_ADLSMP; - ef50: bf0c ite eq - ef52: 2135 moveq r1, #53 ; 0x35 - ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2); - #endif - } else { - ADC0_CFG1 = ADC_CFG1_16BIT + ADC_CFG1_MODE(3) + ADC_CFG1_ADLSMP; - ef54: 213d movne r1, #61 ; 0x3d - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2); - ef56: 2212 movs r2, #18 - ADC0_CFG1 = ADC_CFG1_16BIT + ADC_CFG1_MODE(3) + ADC_CFG1_ADLSMP; - ef58: 6081 str r1, [r0, #8] - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2); - ef5a: 60c2 str r2, [r0, #12] - #ifdef HAS_KINETIS_ADC1 - ADC1_CFG1 = ADC_CFG1_16BIT + ADC_CFG1_MODE(3) + ADC_CFG1_ADLSMP; - ef5c: 6099 str r1, [r3, #8] - ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2); - ef5e: 60da str r2, [r3, #12] - ADC0_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref - } else { - ADC0_SC2 = ADC_SC2_REFSEL(0); // vcc/ext ref - } - #elif defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) - if (analog_reference_internal) { - ef60: 4b23 ldr r3, [pc, #140] ; (eff0 ) - ADC0_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref - ef62: 4921 ldr r1, [pc, #132] ; (efe8 ) - if (analog_reference_internal) { - ef64: 781b ldrb r3, [r3, #0] - ADC1_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref - ef66: 4a21 ldr r2, [pc, #132] ; (efec ) - if (analog_reference_internal) { - ef68: b1cb cbz r3, ef9e - ADC0_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref - ef6a: 2301 movs r3, #1 - ef6c: 620b str r3, [r1, #32] - ADC1_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref - ef6e: 6213 str r3, [r2, #32] - } else { - ADC0_SC2 = ADC_SC2_REFSEL(1); // vcc - } - #endif - - num = analog_num_average; - ef70: 4b20 ldr r3, [pc, #128] ; (eff4 ) - if (num <= 1) { - ADC0_SC3 = ADC_SC3_CAL; // begin cal - ef72: 491d ldr r1, [pc, #116] ; (efe8 ) - num = analog_num_average; - ef74: 781b ldrb r3, [r3, #0] - #ifdef HAS_KINETIS_ADC1 - ADC1_SC3 = ADC_SC3_CAL; // begin cal - ef76: 4a1d ldr r2, [pc, #116] ; (efec ) - if (num <= 1) { - ef78: 2b01 cmp r3, #1 - ef7a: d913 bls.n efa4 - #endif - } else if (num <= 4) { - ef7c: 2b04 cmp r3, #4 - ef7e: d81b bhi.n efb8 - ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(0); - ef80: 2384 movs r3, #132 ; 0x84 - ef82: 624b str r3, [r1, #36] ; 0x24 - #ifdef HAS_KINETIS_ADC1 - ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(0); - ef84: 6253 str r3, [r2, #36] ; 0x24 - ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(3); - #ifdef HAS_KINETIS_ADC1 - ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(3); - #endif - } - calibrating = 1; - ef86: 4b1c ldr r3, [pc, #112] ; (eff8 ) - ef88: 2201 movs r2, #1 - ef8a: 701a strb r2, [r3, #0] -} - ef8c: 4770 bx lr - ADC1_CFG1 = ADC_CFG1_10BIT + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP; - ef8e: 4b17 ldr r3, [pc, #92] ; (efec ) - ADC0_CFG1 = ADC_CFG1_10BIT + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP; - ef90: 2139 movs r1, #57 ; 0x39 - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - ef92: 2213 movs r2, #19 - ADC0_CFG1 = ADC_CFG1_10BIT + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP; - ef94: 6081 str r1, [r0, #8] - ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - ef96: 60c2 str r2, [r0, #12] - ADC1_CFG1 = ADC_CFG1_10BIT + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP; - ef98: 6099 str r1, [r3, #8] - ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3); - ef9a: 60da str r2, [r3, #12] - ef9c: e7e0 b.n ef60 - ADC0_SC2 = ADC_SC2_REFSEL(0); // vcc/ext ref - ef9e: 620b str r3, [r1, #32] - ADC1_SC2 = ADC_SC2_REFSEL(0); // vcc/ext ref - efa0: 6213 str r3, [r2, #32] - efa2: e7e5 b.n ef70 - ADC0_SC3 = ADC_SC3_CAL; // begin cal - efa4: 2380 movs r3, #128 ; 0x80 - efa6: 624b str r3, [r1, #36] ; 0x24 - ADC1_SC3 = ADC_SC3_CAL; // begin cal - efa8: 6253 str r3, [r2, #36] ; 0x24 - calibrating = 1; - efaa: 4b13 ldr r3, [pc, #76] ; (eff8 ) - efac: 2201 movs r2, #1 - efae: 701a strb r2, [r3, #0] -} - efb0: 4770 bx lr - ADC1_CFG1 = ADC_CFG1_8BIT + ADC_CFG1_MODE(0); - efb2: 4b0e ldr r3, [pc, #56] ; (efec ) - ADC0_CFG1 = ADC_CFG1_8BIT + ADC_CFG1_MODE(0); - efb4: 2101 movs r1, #1 - efb6: e7ec b.n ef92 - } else if (num <= 8) { - efb8: 2b08 cmp r3, #8 - efba: d806 bhi.n efca - ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(1); - efbc: 2385 movs r3, #133 ; 0x85 - efbe: 624b str r3, [r1, #36] ; 0x24 - ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(1); - efc0: 6253 str r3, [r2, #36] ; 0x24 - calibrating = 1; - efc2: 4b0d ldr r3, [pc, #52] ; (eff8 ) - efc4: 2201 movs r2, #1 - efc6: 701a strb r2, [r3, #0] -} - efc8: 4770 bx lr - } else if (num <= 16) { - efca: 2b10 cmp r3, #16 - ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(2); - efcc: bf94 ite ls - efce: 2386 movls r3, #134 ; 0x86 - ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(3); - efd0: 2387 movhi r3, #135 ; 0x87 - efd2: 624b str r3, [r1, #36] ; 0x24 - ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(3); - efd4: 6253 str r3, [r2, #36] ; 0x24 - calibrating = 1; - efd6: 4b08 ldr r3, [pc, #32] ; (eff8 ) - efd8: 2201 movs r2, #1 - efda: 701a strb r2, [r3, #0] -} - efdc: 4770 bx lr - efde: bf00 nop - efe0: 40074000 .word 0x40074000 - efe4: 1fff8859 .word 0x1fff8859 - efe8: 4003b000 .word 0x4003b000 - efec: 400bb000 .word 0x400bb000 - eff0: 1fff9a65 .word 0x1fff9a65 - eff4: 1fff885a .word 0x1fff885a - eff8: 1fff9a66 .word 0x1fff9a66 - -0000effc : - -#include -void serialEvent() __attribute__((weak)); -void serialEvent() { -} - effc: 4770 bx lr - effe: bf00 nop - -0000f000 : - {'M','T','P'} -}; -#endif - -void usb_init_serialnumber(void) -{ - f000: b510 push {r4, lr} - f002: b084 sub sp, #16 - char buf[11]; - uint32_t i, num; - - __disable_irq(); - f004: b672 cpsid i -#if defined(HAS_KINETIS_FLASH_FTFA) || defined(HAS_KINETIS_FLASH_FTFL) - FTFL_FSTAT = FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL; - f006: 4a17 ldr r2, [pc, #92] ; (f064 ) - f008: 2470 movs r4, #112 ; 0x70 - FTFL_FCCOB0 = 0x41; - f00a: 2041 movs r0, #65 ; 0x41 - FTFL_FCCOB1 = 15; - f00c: 210f movs r1, #15 - FTFL_FSTAT = FTFL_FSTAT_CCIF; - f00e: 2380 movs r3, #128 ; 0x80 - FTFL_FSTAT = FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL; - f010: 7014 strb r4, [r2, #0] - FTFL_FCCOB0 = 0x41; - f012: 71d0 strb r0, [r2, #7] - FTFL_FCCOB1 = 15; - f014: 7191 strb r1, [r2, #6] - FTFL_FSTAT = FTFL_FSTAT_CCIF; - f016: 7013 strb r3, [r2, #0] - while (!(FTFL_FSTAT & FTFL_FSTAT_CCIF)) ; // wait - f018: 7813 ldrb r3, [r2, #0] - f01a: 061b lsls r3, r3, #24 - f01c: d5fc bpl.n f018 - num = *(uint32_t *)&FTFL_FCCOB7; - f01e: 6890 ldr r0, [r2, #8] - FTFL_FSTAT = FTFL_FSTAT_CCIF; - while (!(FTFL_FSTAT & FTFL_FSTAT_CCIF)) ; // wait - num = *(uint32_t *)&FTFL_FCCOBB; - kinetis_hsrun_enable(); -#endif - __enable_irq(); - f020: b662 cpsie i - // add extra zero to work around OS-X CDC-ACM driver bug - if (num < 10000000) num = num * 10; - f022: 4b11 ldr r3, [pc, #68] ; (f068 ) - f024: 4c11 ldr r4, [pc, #68] ; (f06c ) - f026: 4298 cmp r0, r3 - f028: bf38 it cc - f02a: eb00 0080 addcc.w r0, r0, r0, lsl #2 - ultoa(num, buf, 10); - f02e: a901 add r1, sp, #4 - if (num < 10000000) num = num * 10; - f030: bf38 it cc - f032: 0040 lslcc r0, r0, #1 - ultoa(num, buf, 10); - f034: 220a movs r2, #10 - f036: f7fd f853 bl c0e0 - for (i=0; i<10; i++) { - f03a: a901 add r1, sp, #4 - f03c: 4620 mov r0, r4 - f03e: 2300 movs r3, #0 - char c = buf[i]; - f040: f811 2b01 ldrb.w r2, [r1], #1 - for (i=0; i<10; i++) { - f044: 3301 adds r3, #1 - if (!c) break; - f046: b13a cbz r2, f058 - for (i=0; i<10; i++) { - f048: 2b0a cmp r3, #10 - usb_string_serial_number_default.wString[i] = c; - f04a: f820 2f02 strh.w r2, [r0, #2]! - for (i=0; i<10; i++) { - f04e: d1f7 bne.n f040 - f050: 2316 movs r3, #22 - } - usb_string_serial_number_default.bLength = i * 2 + 2; - f052: 7023 strb r3, [r4, #0] -} - f054: b004 add sp, #16 - f056: bd10 pop {r4, pc} - usb_string_serial_number_default.bLength = i * 2 + 2; - f058: 005b lsls r3, r3, #1 - f05a: b2db uxtb r3, r3 - f05c: 7023 strb r3, [r4, #0] -} - f05e: b004 add sp, #16 - f060: bd10 pop {r4, pc} - f062: bf00 nop - f064: 40020000 .word 0x40020000 - f068: 00989680 .word 0x00989680 - f06c: 1fff88e8 .word 0x1fff88e8 - -0000f070 <__aeabi_atexit>: - f070: 4603 mov r3, r0 - f072: 4608 mov r0, r1 - f074: 4619 mov r1, r3 - f076: f002 bc51 b.w 1191c <__cxa_atexit> - f07a: bf00 nop - -0000f07c <__aeabi_drsub>: - f07c: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000 - f080: e002 b.n f088 <__adddf3> - f082: bf00 nop - -0000f084 <__aeabi_dsub>: - f084: f083 4300 eor.w r3, r3, #2147483648 ; 0x80000000 - -0000f088 <__adddf3>: - f088: b530 push {r4, r5, lr} - f08a: ea4f 0441 mov.w r4, r1, lsl #1 - f08e: ea4f 0543 mov.w r5, r3, lsl #1 - f092: ea94 0f05 teq r4, r5 - f096: bf08 it eq - f098: ea90 0f02 teqeq r0, r2 - f09c: bf1f itttt ne - f09e: ea54 0c00 orrsne.w ip, r4, r0 - f0a2: ea55 0c02 orrsne.w ip, r5, r2 - f0a6: ea7f 5c64 mvnsne.w ip, r4, asr #21 - f0aa: ea7f 5c65 mvnsne.w ip, r5, asr #21 - f0ae: f000 80e2 beq.w f276 <__adddf3+0x1ee> - f0b2: ea4f 5454 mov.w r4, r4, lsr #21 - f0b6: ebd4 5555 rsbs r5, r4, r5, lsr #21 - f0ba: bfb8 it lt - f0bc: 426d neglt r5, r5 - f0be: dd0c ble.n f0da <__adddf3+0x52> - f0c0: 442c add r4, r5 - f0c2: ea80 0202 eor.w r2, r0, r2 - f0c6: ea81 0303 eor.w r3, r1, r3 - f0ca: ea82 0000 eor.w r0, r2, r0 - f0ce: ea83 0101 eor.w r1, r3, r1 - f0d2: ea80 0202 eor.w r2, r0, r2 - f0d6: ea81 0303 eor.w r3, r1, r3 - f0da: 2d36 cmp r5, #54 ; 0x36 - f0dc: bf88 it hi - f0de: bd30 pophi {r4, r5, pc} - f0e0: f011 4f00 tst.w r1, #2147483648 ; 0x80000000 - f0e4: ea4f 3101 mov.w r1, r1, lsl #12 - f0e8: f44f 1c80 mov.w ip, #1048576 ; 0x100000 - f0ec: ea4c 3111 orr.w r1, ip, r1, lsr #12 - f0f0: d002 beq.n f0f8 <__adddf3+0x70> - f0f2: 4240 negs r0, r0 - f0f4: eb61 0141 sbc.w r1, r1, r1, lsl #1 - f0f8: f013 4f00 tst.w r3, #2147483648 ; 0x80000000 - f0fc: ea4f 3303 mov.w r3, r3, lsl #12 - f100: ea4c 3313 orr.w r3, ip, r3, lsr #12 - f104: d002 beq.n f10c <__adddf3+0x84> - f106: 4252 negs r2, r2 - f108: eb63 0343 sbc.w r3, r3, r3, lsl #1 - f10c: ea94 0f05 teq r4, r5 - f110: f000 80a7 beq.w f262 <__adddf3+0x1da> - f114: f1a4 0401 sub.w r4, r4, #1 - f118: f1d5 0e20 rsbs lr, r5, #32 - f11c: db0d blt.n f13a <__adddf3+0xb2> - f11e: fa02 fc0e lsl.w ip, r2, lr - f122: fa22 f205 lsr.w r2, r2, r5 - f126: 1880 adds r0, r0, r2 - f128: f141 0100 adc.w r1, r1, #0 - f12c: fa03 f20e lsl.w r2, r3, lr - f130: 1880 adds r0, r0, r2 - f132: fa43 f305 asr.w r3, r3, r5 - f136: 4159 adcs r1, r3 - f138: e00e b.n f158 <__adddf3+0xd0> - f13a: f1a5 0520 sub.w r5, r5, #32 - f13e: f10e 0e20 add.w lr, lr, #32 - f142: 2a01 cmp r2, #1 - f144: fa03 fc0e lsl.w ip, r3, lr - f148: bf28 it cs - f14a: f04c 0c02 orrcs.w ip, ip, #2 - f14e: fa43 f305 asr.w r3, r3, r5 - f152: 18c0 adds r0, r0, r3 - f154: eb51 71e3 adcs.w r1, r1, r3, asr #31 - f158: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 - f15c: d507 bpl.n f16e <__adddf3+0xe6> - f15e: f04f 0e00 mov.w lr, #0 - f162: f1dc 0c00 rsbs ip, ip, #0 - f166: eb7e 0000 sbcs.w r0, lr, r0 - f16a: eb6e 0101 sbc.w r1, lr, r1 - f16e: f5b1 1f80 cmp.w r1, #1048576 ; 0x100000 - f172: d31b bcc.n f1ac <__adddf3+0x124> - f174: f5b1 1f00 cmp.w r1, #2097152 ; 0x200000 - f178: d30c bcc.n f194 <__adddf3+0x10c> - f17a: 0849 lsrs r1, r1, #1 - f17c: ea5f 0030 movs.w r0, r0, rrx - f180: ea4f 0c3c mov.w ip, ip, rrx - f184: f104 0401 add.w r4, r4, #1 - f188: ea4f 5244 mov.w r2, r4, lsl #21 - f18c: f512 0f80 cmn.w r2, #4194304 ; 0x400000 - f190: f080 809a bcs.w f2c8 <__adddf3+0x240> - f194: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000 - f198: bf08 it eq - f19a: ea5f 0c50 movseq.w ip, r0, lsr #1 - f19e: f150 0000 adcs.w r0, r0, #0 - f1a2: eb41 5104 adc.w r1, r1, r4, lsl #20 - f1a6: ea41 0105 orr.w r1, r1, r5 - f1aa: bd30 pop {r4, r5, pc} - f1ac: ea5f 0c4c movs.w ip, ip, lsl #1 - f1b0: 4140 adcs r0, r0 - f1b2: eb41 0101 adc.w r1, r1, r1 - f1b6: 3c01 subs r4, #1 - f1b8: bf28 it cs - f1ba: f5b1 1f80 cmpcs.w r1, #1048576 ; 0x100000 - f1be: d2e9 bcs.n f194 <__adddf3+0x10c> - f1c0: f091 0f00 teq r1, #0 - f1c4: bf04 itt eq - f1c6: 4601 moveq r1, r0 - f1c8: 2000 moveq r0, #0 - f1ca: fab1 f381 clz r3, r1 - f1ce: bf08 it eq - f1d0: 3320 addeq r3, #32 - f1d2: f1a3 030b sub.w r3, r3, #11 - f1d6: f1b3 0220 subs.w r2, r3, #32 - f1da: da0c bge.n f1f6 <__adddf3+0x16e> - f1dc: 320c adds r2, #12 - f1de: dd08 ble.n f1f2 <__adddf3+0x16a> - f1e0: f102 0c14 add.w ip, r2, #20 - f1e4: f1c2 020c rsb r2, r2, #12 - f1e8: fa01 f00c lsl.w r0, r1, ip - f1ec: fa21 f102 lsr.w r1, r1, r2 - f1f0: e00c b.n f20c <__adddf3+0x184> - f1f2: f102 0214 add.w r2, r2, #20 - f1f6: bfd8 it le - f1f8: f1c2 0c20 rsble ip, r2, #32 - f1fc: fa01 f102 lsl.w r1, r1, r2 - f200: fa20 fc0c lsr.w ip, r0, ip - f204: bfdc itt le - f206: ea41 010c orrle.w r1, r1, ip - f20a: 4090 lslle r0, r2 - f20c: 1ae4 subs r4, r4, r3 - f20e: bfa2 ittt ge - f210: eb01 5104 addge.w r1, r1, r4, lsl #20 - f214: 4329 orrge r1, r5 - f216: bd30 popge {r4, r5, pc} - f218: ea6f 0404 mvn.w r4, r4 - f21c: 3c1f subs r4, #31 - f21e: da1c bge.n f25a <__adddf3+0x1d2> - f220: 340c adds r4, #12 - f222: dc0e bgt.n f242 <__adddf3+0x1ba> - f224: f104 0414 add.w r4, r4, #20 - f228: f1c4 0220 rsb r2, r4, #32 - f22c: fa20 f004 lsr.w r0, r0, r4 - f230: fa01 f302 lsl.w r3, r1, r2 - f234: ea40 0003 orr.w r0, r0, r3 - f238: fa21 f304 lsr.w r3, r1, r4 - f23c: ea45 0103 orr.w r1, r5, r3 - f240: bd30 pop {r4, r5, pc} - f242: f1c4 040c rsb r4, r4, #12 - f246: f1c4 0220 rsb r2, r4, #32 - f24a: fa20 f002 lsr.w r0, r0, r2 - f24e: fa01 f304 lsl.w r3, r1, r4 - f252: ea40 0003 orr.w r0, r0, r3 - f256: 4629 mov r1, r5 - f258: bd30 pop {r4, r5, pc} - f25a: fa21 f004 lsr.w r0, r1, r4 - f25e: 4629 mov r1, r5 - f260: bd30 pop {r4, r5, pc} - f262: f094 0f00 teq r4, #0 - f266: f483 1380 eor.w r3, r3, #1048576 ; 0x100000 - f26a: bf06 itte eq - f26c: f481 1180 eoreq.w r1, r1, #1048576 ; 0x100000 - f270: 3401 addeq r4, #1 - f272: 3d01 subne r5, #1 - f274: e74e b.n f114 <__adddf3+0x8c> - f276: ea7f 5c64 mvns.w ip, r4, asr #21 - f27a: bf18 it ne - f27c: ea7f 5c65 mvnsne.w ip, r5, asr #21 - f280: d029 beq.n f2d6 <__adddf3+0x24e> - f282: ea94 0f05 teq r4, r5 - f286: bf08 it eq - f288: ea90 0f02 teqeq r0, r2 - f28c: d005 beq.n f29a <__adddf3+0x212> - f28e: ea54 0c00 orrs.w ip, r4, r0 - f292: bf04 itt eq - f294: 4619 moveq r1, r3 - f296: 4610 moveq r0, r2 - f298: bd30 pop {r4, r5, pc} - f29a: ea91 0f03 teq r1, r3 - f29e: bf1e ittt ne - f2a0: 2100 movne r1, #0 - f2a2: 2000 movne r0, #0 - f2a4: bd30 popne {r4, r5, pc} - f2a6: ea5f 5c54 movs.w ip, r4, lsr #21 - f2aa: d105 bne.n f2b8 <__adddf3+0x230> - f2ac: 0040 lsls r0, r0, #1 - f2ae: 4149 adcs r1, r1 - f2b0: bf28 it cs - f2b2: f041 4100 orrcs.w r1, r1, #2147483648 ; 0x80000000 - f2b6: bd30 pop {r4, r5, pc} - f2b8: f514 0480 adds.w r4, r4, #4194304 ; 0x400000 - f2bc: bf3c itt cc - f2be: f501 1180 addcc.w r1, r1, #1048576 ; 0x100000 - f2c2: bd30 popcc {r4, r5, pc} - f2c4: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 - f2c8: f045 41fe orr.w r1, r5, #2130706432 ; 0x7f000000 - f2cc: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 - f2d0: f04f 0000 mov.w r0, #0 - f2d4: bd30 pop {r4, r5, pc} - f2d6: ea7f 5c64 mvns.w ip, r4, asr #21 - f2da: bf1a itte ne - f2dc: 4619 movne r1, r3 - f2de: 4610 movne r0, r2 - f2e0: ea7f 5c65 mvnseq.w ip, r5, asr #21 - f2e4: bf1c itt ne - f2e6: 460b movne r3, r1 - f2e8: 4602 movne r2, r0 - f2ea: ea50 3401 orrs.w r4, r0, r1, lsl #12 - f2ee: bf06 itte eq - f2f0: ea52 3503 orrseq.w r5, r2, r3, lsl #12 - f2f4: ea91 0f03 teqeq r1, r3 - f2f8: f441 2100 orrne.w r1, r1, #524288 ; 0x80000 - f2fc: bd30 pop {r4, r5, pc} - f2fe: bf00 nop - -0000f300 <__aeabi_ui2d>: - f300: f090 0f00 teq r0, #0 - f304: bf04 itt eq - f306: 2100 moveq r1, #0 - f308: 4770 bxeq lr - f30a: b530 push {r4, r5, lr} - f30c: f44f 6480 mov.w r4, #1024 ; 0x400 - f310: f104 0432 add.w r4, r4, #50 ; 0x32 - f314: f04f 0500 mov.w r5, #0 - f318: f04f 0100 mov.w r1, #0 - f31c: e750 b.n f1c0 <__adddf3+0x138> - f31e: bf00 nop - -0000f320 <__aeabi_i2d>: - f320: f090 0f00 teq r0, #0 - f324: bf04 itt eq - f326: 2100 moveq r1, #0 - f328: 4770 bxeq lr - f32a: b530 push {r4, r5, lr} - f32c: f44f 6480 mov.w r4, #1024 ; 0x400 - f330: f104 0432 add.w r4, r4, #50 ; 0x32 - f334: f010 4500 ands.w r5, r0, #2147483648 ; 0x80000000 - f338: bf48 it mi - f33a: 4240 negmi r0, r0 - f33c: f04f 0100 mov.w r1, #0 - f340: e73e b.n f1c0 <__adddf3+0x138> - f342: bf00 nop - -0000f344 <__aeabi_f2d>: - f344: 0042 lsls r2, r0, #1 - f346: ea4f 01e2 mov.w r1, r2, asr #3 - f34a: ea4f 0131 mov.w r1, r1, rrx - f34e: ea4f 7002 mov.w r0, r2, lsl #28 - f352: bf1f itttt ne - f354: f012 437f andsne.w r3, r2, #4278190080 ; 0xff000000 - f358: f093 4f7f teqne r3, #4278190080 ; 0xff000000 - f35c: f081 5160 eorne.w r1, r1, #939524096 ; 0x38000000 - f360: 4770 bxne lr - f362: f032 427f bics.w r2, r2, #4278190080 ; 0xff000000 - f366: bf08 it eq - f368: 4770 bxeq lr - f36a: f093 4f7f teq r3, #4278190080 ; 0xff000000 - f36e: bf04 itt eq - f370: f441 2100 orreq.w r1, r1, #524288 ; 0x80000 - f374: 4770 bxeq lr - f376: b530 push {r4, r5, lr} - f378: f44f 7460 mov.w r4, #896 ; 0x380 - f37c: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 - f380: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 - f384: e71c b.n f1c0 <__adddf3+0x138> - f386: bf00 nop - -0000f388 <__aeabi_ul2d>: - f388: ea50 0201 orrs.w r2, r0, r1 - f38c: bf08 it eq - f38e: 4770 bxeq lr - f390: b530 push {r4, r5, lr} - f392: f04f 0500 mov.w r5, #0 - f396: e00a b.n f3ae <__aeabi_l2d+0x16> - -0000f398 <__aeabi_l2d>: - f398: ea50 0201 orrs.w r2, r0, r1 - f39c: bf08 it eq - f39e: 4770 bxeq lr - f3a0: b530 push {r4, r5, lr} - f3a2: f011 4500 ands.w r5, r1, #2147483648 ; 0x80000000 - f3a6: d502 bpl.n f3ae <__aeabi_l2d+0x16> - f3a8: 4240 negs r0, r0 - f3aa: eb61 0141 sbc.w r1, r1, r1, lsl #1 - f3ae: f44f 6480 mov.w r4, #1024 ; 0x400 - f3b2: f104 0432 add.w r4, r4, #50 ; 0x32 - f3b6: ea5f 5c91 movs.w ip, r1, lsr #22 - f3ba: f43f aed8 beq.w f16e <__adddf3+0xe6> - f3be: f04f 0203 mov.w r2, #3 - f3c2: ea5f 0cdc movs.w ip, ip, lsr #3 - f3c6: bf18 it ne - f3c8: 3203 addne r2, #3 - f3ca: ea5f 0cdc movs.w ip, ip, lsr #3 - f3ce: bf18 it ne - f3d0: 3203 addne r2, #3 - f3d2: eb02 02dc add.w r2, r2, ip, lsr #3 - f3d6: f1c2 0320 rsb r3, r2, #32 - f3da: fa00 fc03 lsl.w ip, r0, r3 - f3de: fa20 f002 lsr.w r0, r0, r2 - f3e2: fa01 fe03 lsl.w lr, r1, r3 - f3e6: ea40 000e orr.w r0, r0, lr - f3ea: fa21 f102 lsr.w r1, r1, r2 - f3ee: 4414 add r4, r2 - f3f0: e6bd b.n f16e <__adddf3+0xe6> - f3f2: bf00 nop - -0000f3f4 <__aeabi_dmul>: - f3f4: b570 push {r4, r5, r6, lr} - f3f6: f04f 0cff mov.w ip, #255 ; 0xff - f3fa: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700 - f3fe: ea1c 5411 ands.w r4, ip, r1, lsr #20 - f402: bf1d ittte ne - f404: ea1c 5513 andsne.w r5, ip, r3, lsr #20 - f408: ea94 0f0c teqne r4, ip - f40c: ea95 0f0c teqne r5, ip - f410: f000 f8de bleq f5d0 <__aeabi_dmul+0x1dc> - f414: 442c add r4, r5 - f416: ea81 0603 eor.w r6, r1, r3 - f41a: ea21 514c bic.w r1, r1, ip, lsl #21 - f41e: ea23 534c bic.w r3, r3, ip, lsl #21 - f422: ea50 3501 orrs.w r5, r0, r1, lsl #12 - f426: bf18 it ne - f428: ea52 3503 orrsne.w r5, r2, r3, lsl #12 - f42c: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - f430: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 - f434: d038 beq.n f4a8 <__aeabi_dmul+0xb4> - f436: fba0 ce02 umull ip, lr, r0, r2 - f43a: f04f 0500 mov.w r5, #0 - f43e: fbe1 e502 umlal lr, r5, r1, r2 - f442: f006 4200 and.w r2, r6, #2147483648 ; 0x80000000 - f446: fbe0 e503 umlal lr, r5, r0, r3 - f44a: f04f 0600 mov.w r6, #0 - f44e: fbe1 5603 umlal r5, r6, r1, r3 - f452: f09c 0f00 teq ip, #0 - f456: bf18 it ne - f458: f04e 0e01 orrne.w lr, lr, #1 - f45c: f1a4 04ff sub.w r4, r4, #255 ; 0xff - f460: f5b6 7f00 cmp.w r6, #512 ; 0x200 - f464: f564 7440 sbc.w r4, r4, #768 ; 0x300 - f468: d204 bcs.n f474 <__aeabi_dmul+0x80> - f46a: ea5f 0e4e movs.w lr, lr, lsl #1 - f46e: 416d adcs r5, r5 - f470: eb46 0606 adc.w r6, r6, r6 - f474: ea42 21c6 orr.w r1, r2, r6, lsl #11 - f478: ea41 5155 orr.w r1, r1, r5, lsr #21 - f47c: ea4f 20c5 mov.w r0, r5, lsl #11 - f480: ea40 505e orr.w r0, r0, lr, lsr #21 - f484: ea4f 2ece mov.w lr, lr, lsl #11 - f488: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd - f48c: bf88 it hi - f48e: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700 - f492: d81e bhi.n f4d2 <__aeabi_dmul+0xde> - f494: f1be 4f00 cmp.w lr, #2147483648 ; 0x80000000 - f498: bf08 it eq - f49a: ea5f 0e50 movseq.w lr, r0, lsr #1 - f49e: f150 0000 adcs.w r0, r0, #0 - f4a2: eb41 5104 adc.w r1, r1, r4, lsl #20 - f4a6: bd70 pop {r4, r5, r6, pc} - f4a8: f006 4600 and.w r6, r6, #2147483648 ; 0x80000000 - f4ac: ea46 0101 orr.w r1, r6, r1 - f4b0: ea40 0002 orr.w r0, r0, r2 - f4b4: ea81 0103 eor.w r1, r1, r3 - f4b8: ebb4 045c subs.w r4, r4, ip, lsr #1 - f4bc: bfc2 ittt gt - f4be: ebd4 050c rsbsgt r5, r4, ip - f4c2: ea41 5104 orrgt.w r1, r1, r4, lsl #20 - f4c6: bd70 popgt {r4, r5, r6, pc} - f4c8: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - f4cc: f04f 0e00 mov.w lr, #0 - f4d0: 3c01 subs r4, #1 - f4d2: f300 80ab bgt.w f62c <__aeabi_dmul+0x238> - f4d6: f114 0f36 cmn.w r4, #54 ; 0x36 - f4da: bfde ittt le - f4dc: 2000 movle r0, #0 - f4de: f001 4100 andle.w r1, r1, #2147483648 ; 0x80000000 - f4e2: bd70 pople {r4, r5, r6, pc} - f4e4: f1c4 0400 rsb r4, r4, #0 - f4e8: 3c20 subs r4, #32 - f4ea: da35 bge.n f558 <__aeabi_dmul+0x164> - f4ec: 340c adds r4, #12 - f4ee: dc1b bgt.n f528 <__aeabi_dmul+0x134> - f4f0: f104 0414 add.w r4, r4, #20 - f4f4: f1c4 0520 rsb r5, r4, #32 - f4f8: fa00 f305 lsl.w r3, r0, r5 - f4fc: fa20 f004 lsr.w r0, r0, r4 - f500: fa01 f205 lsl.w r2, r1, r5 - f504: ea40 0002 orr.w r0, r0, r2 - f508: f001 4200 and.w r2, r1, #2147483648 ; 0x80000000 - f50c: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 - f510: eb10 70d3 adds.w r0, r0, r3, lsr #31 - f514: fa21 f604 lsr.w r6, r1, r4 - f518: eb42 0106 adc.w r1, r2, r6 - f51c: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - f520: bf08 it eq - f522: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - f526: bd70 pop {r4, r5, r6, pc} - f528: f1c4 040c rsb r4, r4, #12 - f52c: f1c4 0520 rsb r5, r4, #32 - f530: fa00 f304 lsl.w r3, r0, r4 - f534: fa20 f005 lsr.w r0, r0, r5 - f538: fa01 f204 lsl.w r2, r1, r4 - f53c: ea40 0002 orr.w r0, r0, r2 - f540: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - f544: eb10 70d3 adds.w r0, r0, r3, lsr #31 - f548: f141 0100 adc.w r1, r1, #0 - f54c: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - f550: bf08 it eq - f552: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - f556: bd70 pop {r4, r5, r6, pc} - f558: f1c4 0520 rsb r5, r4, #32 - f55c: fa00 f205 lsl.w r2, r0, r5 - f560: ea4e 0e02 orr.w lr, lr, r2 - f564: fa20 f304 lsr.w r3, r0, r4 - f568: fa01 f205 lsl.w r2, r1, r5 - f56c: ea43 0302 orr.w r3, r3, r2 - f570: fa21 f004 lsr.w r0, r1, r4 - f574: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - f578: fa21 f204 lsr.w r2, r1, r4 - f57c: ea20 0002 bic.w r0, r0, r2 - f580: eb00 70d3 add.w r0, r0, r3, lsr #31 - f584: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - f588: bf08 it eq - f58a: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - f58e: bd70 pop {r4, r5, r6, pc} - f590: f094 0f00 teq r4, #0 - f594: d10f bne.n f5b6 <__aeabi_dmul+0x1c2> - f596: f001 4600 and.w r6, r1, #2147483648 ; 0x80000000 - f59a: 0040 lsls r0, r0, #1 - f59c: eb41 0101 adc.w r1, r1, r1 - f5a0: f411 1f80 tst.w r1, #1048576 ; 0x100000 - f5a4: bf08 it eq - f5a6: 3c01 subeq r4, #1 - f5a8: d0f7 beq.n f59a <__aeabi_dmul+0x1a6> - f5aa: ea41 0106 orr.w r1, r1, r6 - f5ae: f095 0f00 teq r5, #0 - f5b2: bf18 it ne - f5b4: 4770 bxne lr - f5b6: f003 4600 and.w r6, r3, #2147483648 ; 0x80000000 - f5ba: 0052 lsls r2, r2, #1 - f5bc: eb43 0303 adc.w r3, r3, r3 - f5c0: f413 1f80 tst.w r3, #1048576 ; 0x100000 - f5c4: bf08 it eq - f5c6: 3d01 subeq r5, #1 - f5c8: d0f7 beq.n f5ba <__aeabi_dmul+0x1c6> - f5ca: ea43 0306 orr.w r3, r3, r6 - f5ce: 4770 bx lr - f5d0: ea94 0f0c teq r4, ip - f5d4: ea0c 5513 and.w r5, ip, r3, lsr #20 - f5d8: bf18 it ne - f5da: ea95 0f0c teqne r5, ip - f5de: d00c beq.n f5fa <__aeabi_dmul+0x206> - f5e0: ea50 0641 orrs.w r6, r0, r1, lsl #1 - f5e4: bf18 it ne - f5e6: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - f5ea: d1d1 bne.n f590 <__aeabi_dmul+0x19c> - f5ec: ea81 0103 eor.w r1, r1, r3 - f5f0: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - f5f4: f04f 0000 mov.w r0, #0 - f5f8: bd70 pop {r4, r5, r6, pc} - f5fa: ea50 0641 orrs.w r6, r0, r1, lsl #1 - f5fe: bf06 itte eq - f600: 4610 moveq r0, r2 - f602: 4619 moveq r1, r3 - f604: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - f608: d019 beq.n f63e <__aeabi_dmul+0x24a> - f60a: ea94 0f0c teq r4, ip - f60e: d102 bne.n f616 <__aeabi_dmul+0x222> - f610: ea50 3601 orrs.w r6, r0, r1, lsl #12 - f614: d113 bne.n f63e <__aeabi_dmul+0x24a> - f616: ea95 0f0c teq r5, ip - f61a: d105 bne.n f628 <__aeabi_dmul+0x234> - f61c: ea52 3603 orrs.w r6, r2, r3, lsl #12 - f620: bf1c itt ne - f622: 4610 movne r0, r2 - f624: 4619 movne r1, r3 - f626: d10a bne.n f63e <__aeabi_dmul+0x24a> - f628: ea81 0103 eor.w r1, r1, r3 - f62c: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 - f630: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000 - f634: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 - f638: f04f 0000 mov.w r0, #0 - f63c: bd70 pop {r4, r5, r6, pc} - f63e: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000 - f642: f441 0178 orr.w r1, r1, #16252928 ; 0xf80000 - f646: bd70 pop {r4, r5, r6, pc} - -0000f648 <__aeabi_ddiv>: - f648: b570 push {r4, r5, r6, lr} - f64a: f04f 0cff mov.w ip, #255 ; 0xff - f64e: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700 - f652: ea1c 5411 ands.w r4, ip, r1, lsr #20 - f656: bf1d ittte ne - f658: ea1c 5513 andsne.w r5, ip, r3, lsr #20 - f65c: ea94 0f0c teqne r4, ip - f660: ea95 0f0c teqne r5, ip - f664: f000 f8a7 bleq f7b6 <__aeabi_ddiv+0x16e> - f668: eba4 0405 sub.w r4, r4, r5 - f66c: ea81 0e03 eor.w lr, r1, r3 - f670: ea52 3503 orrs.w r5, r2, r3, lsl #12 - f674: ea4f 3101 mov.w r1, r1, lsl #12 - f678: f000 8088 beq.w f78c <__aeabi_ddiv+0x144> - f67c: ea4f 3303 mov.w r3, r3, lsl #12 - f680: f04f 5580 mov.w r5, #268435456 ; 0x10000000 - f684: ea45 1313 orr.w r3, r5, r3, lsr #4 - f688: ea43 6312 orr.w r3, r3, r2, lsr #24 - f68c: ea4f 2202 mov.w r2, r2, lsl #8 - f690: ea45 1511 orr.w r5, r5, r1, lsr #4 - f694: ea45 6510 orr.w r5, r5, r0, lsr #24 - f698: ea4f 2600 mov.w r6, r0, lsl #8 - f69c: f00e 4100 and.w r1, lr, #2147483648 ; 0x80000000 - f6a0: 429d cmp r5, r3 - f6a2: bf08 it eq - f6a4: 4296 cmpeq r6, r2 - f6a6: f144 04fd adc.w r4, r4, #253 ; 0xfd - f6aa: f504 7440 add.w r4, r4, #768 ; 0x300 - f6ae: d202 bcs.n f6b6 <__aeabi_ddiv+0x6e> - f6b0: 085b lsrs r3, r3, #1 - f6b2: ea4f 0232 mov.w r2, r2, rrx - f6b6: 1ab6 subs r6, r6, r2 - f6b8: eb65 0503 sbc.w r5, r5, r3 - f6bc: 085b lsrs r3, r3, #1 - f6be: ea4f 0232 mov.w r2, r2, rrx - f6c2: f44f 1080 mov.w r0, #1048576 ; 0x100000 - f6c6: f44f 2c00 mov.w ip, #524288 ; 0x80000 - f6ca: ebb6 0e02 subs.w lr, r6, r2 - f6ce: eb75 0e03 sbcs.w lr, r5, r3 - f6d2: bf22 ittt cs - f6d4: 1ab6 subcs r6, r6, r2 - f6d6: 4675 movcs r5, lr - f6d8: ea40 000c orrcs.w r0, r0, ip - f6dc: 085b lsrs r3, r3, #1 - f6de: ea4f 0232 mov.w r2, r2, rrx - f6e2: ebb6 0e02 subs.w lr, r6, r2 - f6e6: eb75 0e03 sbcs.w lr, r5, r3 - f6ea: bf22 ittt cs - f6ec: 1ab6 subcs r6, r6, r2 - f6ee: 4675 movcs r5, lr - f6f0: ea40 005c orrcs.w r0, r0, ip, lsr #1 - f6f4: 085b lsrs r3, r3, #1 - f6f6: ea4f 0232 mov.w r2, r2, rrx - f6fa: ebb6 0e02 subs.w lr, r6, r2 - f6fe: eb75 0e03 sbcs.w lr, r5, r3 - f702: bf22 ittt cs - f704: 1ab6 subcs r6, r6, r2 - f706: 4675 movcs r5, lr - f708: ea40 009c orrcs.w r0, r0, ip, lsr #2 - f70c: 085b lsrs r3, r3, #1 - f70e: ea4f 0232 mov.w r2, r2, rrx - f712: ebb6 0e02 subs.w lr, r6, r2 - f716: eb75 0e03 sbcs.w lr, r5, r3 - f71a: bf22 ittt cs - f71c: 1ab6 subcs r6, r6, r2 - f71e: 4675 movcs r5, lr - f720: ea40 00dc orrcs.w r0, r0, ip, lsr #3 - f724: ea55 0e06 orrs.w lr, r5, r6 - f728: d018 beq.n f75c <__aeabi_ddiv+0x114> - f72a: ea4f 1505 mov.w r5, r5, lsl #4 - f72e: ea45 7516 orr.w r5, r5, r6, lsr #28 - f732: ea4f 1606 mov.w r6, r6, lsl #4 - f736: ea4f 03c3 mov.w r3, r3, lsl #3 - f73a: ea43 7352 orr.w r3, r3, r2, lsr #29 - f73e: ea4f 02c2 mov.w r2, r2, lsl #3 - f742: ea5f 1c1c movs.w ip, ip, lsr #4 - f746: d1c0 bne.n f6ca <__aeabi_ddiv+0x82> - f748: f411 1f80 tst.w r1, #1048576 ; 0x100000 - f74c: d10b bne.n f766 <__aeabi_ddiv+0x11e> - f74e: ea41 0100 orr.w r1, r1, r0 - f752: f04f 0000 mov.w r0, #0 - f756: f04f 4c00 mov.w ip, #2147483648 ; 0x80000000 - f75a: e7b6 b.n f6ca <__aeabi_ddiv+0x82> - f75c: f411 1f80 tst.w r1, #1048576 ; 0x100000 - f760: bf04 itt eq - f762: 4301 orreq r1, r0 - f764: 2000 moveq r0, #0 - f766: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd - f76a: bf88 it hi - f76c: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700 - f770: f63f aeaf bhi.w f4d2 <__aeabi_dmul+0xde> - f774: ebb5 0c03 subs.w ip, r5, r3 - f778: bf04 itt eq - f77a: ebb6 0c02 subseq.w ip, r6, r2 - f77e: ea5f 0c50 movseq.w ip, r0, lsr #1 - f782: f150 0000 adcs.w r0, r0, #0 - f786: eb41 5104 adc.w r1, r1, r4, lsl #20 - f78a: bd70 pop {r4, r5, r6, pc} - f78c: f00e 4e00 and.w lr, lr, #2147483648 ; 0x80000000 - f790: ea4e 3111 orr.w r1, lr, r1, lsr #12 - f794: eb14 045c adds.w r4, r4, ip, lsr #1 - f798: bfc2 ittt gt - f79a: ebd4 050c rsbsgt r5, r4, ip - f79e: ea41 5104 orrgt.w r1, r1, r4, lsl #20 - f7a2: bd70 popgt {r4, r5, r6, pc} - f7a4: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - f7a8: f04f 0e00 mov.w lr, #0 - f7ac: 3c01 subs r4, #1 - f7ae: e690 b.n f4d2 <__aeabi_dmul+0xde> - f7b0: ea45 0e06 orr.w lr, r5, r6 - f7b4: e68d b.n f4d2 <__aeabi_dmul+0xde> - f7b6: ea0c 5513 and.w r5, ip, r3, lsr #20 - f7ba: ea94 0f0c teq r4, ip - f7be: bf08 it eq - f7c0: ea95 0f0c teqeq r5, ip - f7c4: f43f af3b beq.w f63e <__aeabi_dmul+0x24a> - f7c8: ea94 0f0c teq r4, ip - f7cc: d10a bne.n f7e4 <__aeabi_ddiv+0x19c> - f7ce: ea50 3401 orrs.w r4, r0, r1, lsl #12 - f7d2: f47f af34 bne.w f63e <__aeabi_dmul+0x24a> - f7d6: ea95 0f0c teq r5, ip - f7da: f47f af25 bne.w f628 <__aeabi_dmul+0x234> - f7de: 4610 mov r0, r2 - f7e0: 4619 mov r1, r3 - f7e2: e72c b.n f63e <__aeabi_dmul+0x24a> - f7e4: ea95 0f0c teq r5, ip - f7e8: d106 bne.n f7f8 <__aeabi_ddiv+0x1b0> - f7ea: ea52 3503 orrs.w r5, r2, r3, lsl #12 - f7ee: f43f aefd beq.w f5ec <__aeabi_dmul+0x1f8> - f7f2: 4610 mov r0, r2 - f7f4: 4619 mov r1, r3 - f7f6: e722 b.n f63e <__aeabi_dmul+0x24a> - f7f8: ea50 0641 orrs.w r6, r0, r1, lsl #1 - f7fc: bf18 it ne - f7fe: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - f802: f47f aec5 bne.w f590 <__aeabi_dmul+0x19c> - f806: ea50 0441 orrs.w r4, r0, r1, lsl #1 - f80a: f47f af0d bne.w f628 <__aeabi_dmul+0x234> - f80e: ea52 0543 orrs.w r5, r2, r3, lsl #1 - f812: f47f aeeb bne.w f5ec <__aeabi_dmul+0x1f8> - f816: e712 b.n f63e <__aeabi_dmul+0x24a> - -0000f818 <__gedf2>: - f818: f04f 3cff mov.w ip, #4294967295 ; 0xffffffff - f81c: e006 b.n f82c <__cmpdf2+0x4> - f81e: bf00 nop - -0000f820 <__ledf2>: - f820: f04f 0c01 mov.w ip, #1 - f824: e002 b.n f82c <__cmpdf2+0x4> - f826: bf00 nop - -0000f828 <__cmpdf2>: - f828: f04f 0c01 mov.w ip, #1 - f82c: f84d cd04 str.w ip, [sp, #-4]! - f830: ea4f 0c41 mov.w ip, r1, lsl #1 - f834: ea7f 5c6c mvns.w ip, ip, asr #21 - f838: ea4f 0c43 mov.w ip, r3, lsl #1 - f83c: bf18 it ne - f83e: ea7f 5c6c mvnsne.w ip, ip, asr #21 - f842: d01b beq.n f87c <__cmpdf2+0x54> - f844: b001 add sp, #4 - f846: ea50 0c41 orrs.w ip, r0, r1, lsl #1 - f84a: bf0c ite eq - f84c: ea52 0c43 orrseq.w ip, r2, r3, lsl #1 - f850: ea91 0f03 teqne r1, r3 - f854: bf02 ittt eq - f856: ea90 0f02 teqeq r0, r2 - f85a: 2000 moveq r0, #0 - f85c: 4770 bxeq lr - f85e: f110 0f00 cmn.w r0, #0 - f862: ea91 0f03 teq r1, r3 - f866: bf58 it pl - f868: 4299 cmppl r1, r3 - f86a: bf08 it eq - f86c: 4290 cmpeq r0, r2 - f86e: bf2c ite cs - f870: 17d8 asrcs r0, r3, #31 - f872: ea6f 70e3 mvncc.w r0, r3, asr #31 - f876: f040 0001 orr.w r0, r0, #1 - f87a: 4770 bx lr - f87c: ea4f 0c41 mov.w ip, r1, lsl #1 - f880: ea7f 5c6c mvns.w ip, ip, asr #21 - f884: d102 bne.n f88c <__cmpdf2+0x64> - f886: ea50 3c01 orrs.w ip, r0, r1, lsl #12 - f88a: d107 bne.n f89c <__cmpdf2+0x74> - f88c: ea4f 0c43 mov.w ip, r3, lsl #1 - f890: ea7f 5c6c mvns.w ip, ip, asr #21 - f894: d1d6 bne.n f844 <__cmpdf2+0x1c> - f896: ea52 3c03 orrs.w ip, r2, r3, lsl #12 - f89a: d0d3 beq.n f844 <__cmpdf2+0x1c> - f89c: f85d 0b04 ldr.w r0, [sp], #4 - f8a0: 4770 bx lr - f8a2: bf00 nop - -0000f8a4 <__aeabi_cdrcmple>: - f8a4: 4684 mov ip, r0 - f8a6: 4610 mov r0, r2 - f8a8: 4662 mov r2, ip - f8aa: 468c mov ip, r1 - f8ac: 4619 mov r1, r3 - f8ae: 4663 mov r3, ip - f8b0: e000 b.n f8b4 <__aeabi_cdcmpeq> - f8b2: bf00 nop - -0000f8b4 <__aeabi_cdcmpeq>: - f8b4: b501 push {r0, lr} - f8b6: f7ff ffb7 bl f828 <__cmpdf2> - f8ba: 2800 cmp r0, #0 - f8bc: bf48 it mi - f8be: f110 0f00 cmnmi.w r0, #0 - f8c2: bd01 pop {r0, pc} - -0000f8c4 <__aeabi_dcmpeq>: - f8c4: f84d ed08 str.w lr, [sp, #-8]! - f8c8: f7ff fff4 bl f8b4 <__aeabi_cdcmpeq> - f8cc: bf0c ite eq - f8ce: 2001 moveq r0, #1 - f8d0: 2000 movne r0, #0 - f8d2: f85d fb08 ldr.w pc, [sp], #8 - f8d6: bf00 nop - -0000f8d8 <__aeabi_dcmplt>: - f8d8: f84d ed08 str.w lr, [sp, #-8]! - f8dc: f7ff ffea bl f8b4 <__aeabi_cdcmpeq> - f8e0: bf34 ite cc - f8e2: 2001 movcc r0, #1 - f8e4: 2000 movcs r0, #0 - f8e6: f85d fb08 ldr.w pc, [sp], #8 - f8ea: bf00 nop - -0000f8ec <__aeabi_dcmple>: - f8ec: f84d ed08 str.w lr, [sp, #-8]! - f8f0: f7ff ffe0 bl f8b4 <__aeabi_cdcmpeq> - f8f4: bf94 ite ls - f8f6: 2001 movls r0, #1 - f8f8: 2000 movhi r0, #0 - f8fa: f85d fb08 ldr.w pc, [sp], #8 - f8fe: bf00 nop - -0000f900 <__aeabi_dcmpge>: - f900: f84d ed08 str.w lr, [sp, #-8]! - f904: f7ff ffce bl f8a4 <__aeabi_cdrcmple> - f908: bf94 ite ls - f90a: 2001 movls r0, #1 - f90c: 2000 movhi r0, #0 - f90e: f85d fb08 ldr.w pc, [sp], #8 - f912: bf00 nop - -0000f914 <__aeabi_dcmpgt>: - f914: f84d ed08 str.w lr, [sp, #-8]! - f918: f7ff ffc4 bl f8a4 <__aeabi_cdrcmple> - f91c: bf34 ite cc - f91e: 2001 movcc r0, #1 - f920: 2000 movcs r0, #0 - f922: f85d fb08 ldr.w pc, [sp], #8 - f926: bf00 nop - -0000f928 <__aeabi_dcmpun>: - f928: ea4f 0c41 mov.w ip, r1, lsl #1 - f92c: ea7f 5c6c mvns.w ip, ip, asr #21 - f930: d102 bne.n f938 <__aeabi_dcmpun+0x10> - f932: ea50 3c01 orrs.w ip, r0, r1, lsl #12 - f936: d10a bne.n f94e <__aeabi_dcmpun+0x26> - f938: ea4f 0c43 mov.w ip, r3, lsl #1 - f93c: ea7f 5c6c mvns.w ip, ip, asr #21 - f940: d102 bne.n f948 <__aeabi_dcmpun+0x20> - f942: ea52 3c03 orrs.w ip, r2, r3, lsl #12 - f946: d102 bne.n f94e <__aeabi_dcmpun+0x26> - f948: f04f 0000 mov.w r0, #0 - f94c: 4770 bx lr - f94e: f04f 0001 mov.w r0, #1 - f952: 4770 bx lr - -0000f954 <__aeabi_d2iz>: - f954: ea4f 0241 mov.w r2, r1, lsl #1 - f958: f512 1200 adds.w r2, r2, #2097152 ; 0x200000 - f95c: d215 bcs.n f98a <__aeabi_d2iz+0x36> - f95e: d511 bpl.n f984 <__aeabi_d2iz+0x30> - f960: f46f 7378 mvn.w r3, #992 ; 0x3e0 - f964: ebb3 5262 subs.w r2, r3, r2, asr #21 - f968: d912 bls.n f990 <__aeabi_d2iz+0x3c> - f96a: ea4f 23c1 mov.w r3, r1, lsl #11 - f96e: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 - f972: ea43 5350 orr.w r3, r3, r0, lsr #21 - f976: f011 4f00 tst.w r1, #2147483648 ; 0x80000000 - f97a: fa23 f002 lsr.w r0, r3, r2 - f97e: bf18 it ne - f980: 4240 negne r0, r0 - f982: 4770 bx lr - f984: f04f 0000 mov.w r0, #0 - f988: 4770 bx lr - f98a: ea50 3001 orrs.w r0, r0, r1, lsl #12 - f98e: d105 bne.n f99c <__aeabi_d2iz+0x48> - f990: f011 4000 ands.w r0, r1, #2147483648 ; 0x80000000 - f994: bf08 it eq - f996: f06f 4000 mvneq.w r0, #2147483648 ; 0x80000000 - f99a: 4770 bx lr - f99c: f04f 0000 mov.w r0, #0 - f9a0: 4770 bx lr - f9a2: bf00 nop - -0000f9a4 <__aeabi_d2f>: - f9a4: ea4f 0241 mov.w r2, r1, lsl #1 - f9a8: f1b2 43e0 subs.w r3, r2, #1879048192 ; 0x70000000 - f9ac: bf24 itt cs - f9ae: f5b3 1c00 subscs.w ip, r3, #2097152 ; 0x200000 - f9b2: f1dc 5cfe rsbscs ip, ip, #532676608 ; 0x1fc00000 - f9b6: d90d bls.n f9d4 <__aeabi_d2f+0x30> - f9b8: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000 - f9bc: ea4f 02c0 mov.w r2, r0, lsl #3 - f9c0: ea4c 7050 orr.w r0, ip, r0, lsr #29 - f9c4: f1b2 4f00 cmp.w r2, #2147483648 ; 0x80000000 - f9c8: eb40 0083 adc.w r0, r0, r3, lsl #2 - f9cc: bf08 it eq - f9ce: f020 0001 biceq.w r0, r0, #1 - f9d2: 4770 bx lr - f9d4: f011 4f80 tst.w r1, #1073741824 ; 0x40000000 - f9d8: d121 bne.n fa1e <__aeabi_d2f+0x7a> - f9da: f113 7238 adds.w r2, r3, #48234496 ; 0x2e00000 - f9de: bfbc itt lt - f9e0: f001 4000 andlt.w r0, r1, #2147483648 ; 0x80000000 - f9e4: 4770 bxlt lr - f9e6: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 - f9ea: ea4f 5252 mov.w r2, r2, lsr #21 - f9ee: f1c2 0218 rsb r2, r2, #24 - f9f2: f1c2 0c20 rsb ip, r2, #32 - f9f6: fa10 f30c lsls.w r3, r0, ip - f9fa: fa20 f002 lsr.w r0, r0, r2 - f9fe: bf18 it ne - fa00: f040 0001 orrne.w r0, r0, #1 - fa04: ea4f 23c1 mov.w r3, r1, lsl #11 - fa08: ea4f 23d3 mov.w r3, r3, lsr #11 - fa0c: fa03 fc0c lsl.w ip, r3, ip - fa10: ea40 000c orr.w r0, r0, ip - fa14: fa23 f302 lsr.w r3, r3, r2 - fa18: ea4f 0343 mov.w r3, r3, lsl #1 - fa1c: e7cc b.n f9b8 <__aeabi_d2f+0x14> - fa1e: ea7f 5362 mvns.w r3, r2, asr #21 - fa22: d107 bne.n fa34 <__aeabi_d2f+0x90> - fa24: ea50 3301 orrs.w r3, r0, r1, lsl #12 - fa28: bf1e ittt ne - fa2a: f04f 40fe movne.w r0, #2130706432 ; 0x7f000000 - fa2e: f440 0040 orrne.w r0, r0, #12582912 ; 0xc00000 - fa32: 4770 bxne lr - fa34: f001 4000 and.w r0, r1, #2147483648 ; 0x80000000 - fa38: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000 - fa3c: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 - fa40: 4770 bx lr - fa42: bf00 nop - -0000fa44 <__aeabi_frsub>: - fa44: f080 4000 eor.w r0, r0, #2147483648 ; 0x80000000 - fa48: e002 b.n fa50 <__addsf3> - fa4a: bf00 nop - -0000fa4c <__aeabi_fsub>: - fa4c: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000 - -0000fa50 <__addsf3>: - fa50: 0042 lsls r2, r0, #1 - fa52: bf1f itttt ne - fa54: ea5f 0341 movsne.w r3, r1, lsl #1 - fa58: ea92 0f03 teqne r2, r3 - fa5c: ea7f 6c22 mvnsne.w ip, r2, asr #24 - fa60: ea7f 6c23 mvnsne.w ip, r3, asr #24 - fa64: d06a beq.n fb3c <__addsf3+0xec> - fa66: ea4f 6212 mov.w r2, r2, lsr #24 - fa6a: ebd2 6313 rsbs r3, r2, r3, lsr #24 - fa6e: bfc1 itttt gt - fa70: 18d2 addgt r2, r2, r3 - fa72: 4041 eorgt r1, r0 - fa74: 4048 eorgt r0, r1 - fa76: 4041 eorgt r1, r0 - fa78: bfb8 it lt - fa7a: 425b neglt r3, r3 - fa7c: 2b19 cmp r3, #25 - fa7e: bf88 it hi - fa80: 4770 bxhi lr - fa82: f010 4f00 tst.w r0, #2147483648 ; 0x80000000 - fa86: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 - fa8a: f020 407f bic.w r0, r0, #4278190080 ; 0xff000000 - fa8e: bf18 it ne - fa90: 4240 negne r0, r0 - fa92: f011 4f00 tst.w r1, #2147483648 ; 0x80000000 - fa96: f441 0100 orr.w r1, r1, #8388608 ; 0x800000 - fa9a: f021 417f bic.w r1, r1, #4278190080 ; 0xff000000 - fa9e: bf18 it ne - faa0: 4249 negne r1, r1 - faa2: ea92 0f03 teq r2, r3 - faa6: d03f beq.n fb28 <__addsf3+0xd8> - faa8: f1a2 0201 sub.w r2, r2, #1 - faac: fa41 fc03 asr.w ip, r1, r3 - fab0: eb10 000c adds.w r0, r0, ip - fab4: f1c3 0320 rsb r3, r3, #32 - fab8: fa01 f103 lsl.w r1, r1, r3 - fabc: f000 4300 and.w r3, r0, #2147483648 ; 0x80000000 - fac0: d502 bpl.n fac8 <__addsf3+0x78> - fac2: 4249 negs r1, r1 - fac4: eb60 0040 sbc.w r0, r0, r0, lsl #1 - fac8: f5b0 0f00 cmp.w r0, #8388608 ; 0x800000 - facc: d313 bcc.n faf6 <__addsf3+0xa6> - face: f1b0 7f80 cmp.w r0, #16777216 ; 0x1000000 - fad2: d306 bcc.n fae2 <__addsf3+0x92> - fad4: 0840 lsrs r0, r0, #1 - fad6: ea4f 0131 mov.w r1, r1, rrx - fada: f102 0201 add.w r2, r2, #1 - fade: 2afe cmp r2, #254 ; 0xfe - fae0: d251 bcs.n fb86 <__addsf3+0x136> - fae2: f1b1 4f00 cmp.w r1, #2147483648 ; 0x80000000 - fae6: eb40 50c2 adc.w r0, r0, r2, lsl #23 - faea: bf08 it eq - faec: f020 0001 biceq.w r0, r0, #1 - faf0: ea40 0003 orr.w r0, r0, r3 - faf4: 4770 bx lr - faf6: 0049 lsls r1, r1, #1 - faf8: eb40 0000 adc.w r0, r0, r0 - fafc: 3a01 subs r2, #1 - fafe: bf28 it cs - fb00: f5b0 0f00 cmpcs.w r0, #8388608 ; 0x800000 - fb04: d2ed bcs.n fae2 <__addsf3+0x92> - fb06: fab0 fc80 clz ip, r0 - fb0a: f1ac 0c08 sub.w ip, ip, #8 - fb0e: ebb2 020c subs.w r2, r2, ip - fb12: fa00 f00c lsl.w r0, r0, ip - fb16: bfaa itet ge - fb18: eb00 50c2 addge.w r0, r0, r2, lsl #23 - fb1c: 4252 neglt r2, r2 - fb1e: 4318 orrge r0, r3 - fb20: bfbc itt lt - fb22: 40d0 lsrlt r0, r2 - fb24: 4318 orrlt r0, r3 - fb26: 4770 bx lr - fb28: f092 0f00 teq r2, #0 - fb2c: f481 0100 eor.w r1, r1, #8388608 ; 0x800000 - fb30: bf06 itte eq - fb32: f480 0000 eoreq.w r0, r0, #8388608 ; 0x800000 - fb36: 3201 addeq r2, #1 - fb38: 3b01 subne r3, #1 - fb3a: e7b5 b.n faa8 <__addsf3+0x58> - fb3c: ea4f 0341 mov.w r3, r1, lsl #1 - fb40: ea7f 6c22 mvns.w ip, r2, asr #24 - fb44: bf18 it ne - fb46: ea7f 6c23 mvnsne.w ip, r3, asr #24 - fb4a: d021 beq.n fb90 <__addsf3+0x140> - fb4c: ea92 0f03 teq r2, r3 - fb50: d004 beq.n fb5c <__addsf3+0x10c> - fb52: f092 0f00 teq r2, #0 - fb56: bf08 it eq - fb58: 4608 moveq r0, r1 - fb5a: 4770 bx lr - fb5c: ea90 0f01 teq r0, r1 - fb60: bf1c itt ne - fb62: 2000 movne r0, #0 - fb64: 4770 bxne lr - fb66: f012 4f7f tst.w r2, #4278190080 ; 0xff000000 - fb6a: d104 bne.n fb76 <__addsf3+0x126> - fb6c: 0040 lsls r0, r0, #1 - fb6e: bf28 it cs - fb70: f040 4000 orrcs.w r0, r0, #2147483648 ; 0x80000000 - fb74: 4770 bx lr - fb76: f112 7200 adds.w r2, r2, #33554432 ; 0x2000000 - fb7a: bf3c itt cc - fb7c: f500 0000 addcc.w r0, r0, #8388608 ; 0x800000 - fb80: 4770 bxcc lr - fb82: f000 4300 and.w r3, r0, #2147483648 ; 0x80000000 - fb86: f043 40fe orr.w r0, r3, #2130706432 ; 0x7f000000 - fb8a: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 - fb8e: 4770 bx lr - fb90: ea7f 6222 mvns.w r2, r2, asr #24 - fb94: bf16 itet ne - fb96: 4608 movne r0, r1 - fb98: ea7f 6323 mvnseq.w r3, r3, asr #24 - fb9c: 4601 movne r1, r0 - fb9e: 0242 lsls r2, r0, #9 - fba0: bf06 itte eq - fba2: ea5f 2341 movseq.w r3, r1, lsl #9 - fba6: ea90 0f01 teqeq r0, r1 - fbaa: f440 0080 orrne.w r0, r0, #4194304 ; 0x400000 - fbae: 4770 bx lr - -0000fbb0 <__aeabi_ui2f>: - fbb0: f04f 0300 mov.w r3, #0 - fbb4: e004 b.n fbc0 <__aeabi_i2f+0x8> - fbb6: bf00 nop - -0000fbb8 <__aeabi_i2f>: - fbb8: f010 4300 ands.w r3, r0, #2147483648 ; 0x80000000 - fbbc: bf48 it mi - fbbe: 4240 negmi r0, r0 - fbc0: ea5f 0c00 movs.w ip, r0 - fbc4: bf08 it eq - fbc6: 4770 bxeq lr - fbc8: f043 4396 orr.w r3, r3, #1258291200 ; 0x4b000000 - fbcc: 4601 mov r1, r0 - fbce: f04f 0000 mov.w r0, #0 - fbd2: e01c b.n fc0e <__aeabi_l2f+0x2a> - -0000fbd4 <__aeabi_ul2f>: - fbd4: ea50 0201 orrs.w r2, r0, r1 - fbd8: bf08 it eq - fbda: 4770 bxeq lr - fbdc: f04f 0300 mov.w r3, #0 - fbe0: e00a b.n fbf8 <__aeabi_l2f+0x14> - fbe2: bf00 nop - -0000fbe4 <__aeabi_l2f>: - fbe4: ea50 0201 orrs.w r2, r0, r1 - fbe8: bf08 it eq - fbea: 4770 bxeq lr - fbec: f011 4300 ands.w r3, r1, #2147483648 ; 0x80000000 - fbf0: d502 bpl.n fbf8 <__aeabi_l2f+0x14> - fbf2: 4240 negs r0, r0 - fbf4: eb61 0141 sbc.w r1, r1, r1, lsl #1 - fbf8: ea5f 0c01 movs.w ip, r1 - fbfc: bf02 ittt eq - fbfe: 4684 moveq ip, r0 - fc00: 4601 moveq r1, r0 - fc02: 2000 moveq r0, #0 - fc04: f043 43b6 orr.w r3, r3, #1526726656 ; 0x5b000000 - fc08: bf08 it eq - fc0a: f1a3 5380 subeq.w r3, r3, #268435456 ; 0x10000000 - fc0e: f5a3 0300 sub.w r3, r3, #8388608 ; 0x800000 - fc12: fabc f28c clz r2, ip - fc16: 3a08 subs r2, #8 - fc18: eba3 53c2 sub.w r3, r3, r2, lsl #23 - fc1c: db10 blt.n fc40 <__aeabi_l2f+0x5c> - fc1e: fa01 fc02 lsl.w ip, r1, r2 - fc22: 4463 add r3, ip - fc24: fa00 fc02 lsl.w ip, r0, r2 - fc28: f1c2 0220 rsb r2, r2, #32 - fc2c: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000 - fc30: fa20 f202 lsr.w r2, r0, r2 - fc34: eb43 0002 adc.w r0, r3, r2 - fc38: bf08 it eq - fc3a: f020 0001 biceq.w r0, r0, #1 - fc3e: 4770 bx lr - fc40: f102 0220 add.w r2, r2, #32 - fc44: fa01 fc02 lsl.w ip, r1, r2 - fc48: f1c2 0220 rsb r2, r2, #32 - fc4c: ea50 004c orrs.w r0, r0, ip, lsl #1 - fc50: fa21 f202 lsr.w r2, r1, r2 - fc54: eb43 0002 adc.w r0, r3, r2 - fc58: bf08 it eq - fc5a: ea20 70dc biceq.w r0, r0, ip, lsr #31 - fc5e: 4770 bx lr - -0000fc60 <__aeabi_fmul>: - fc60: f04f 0cff mov.w ip, #255 ; 0xff - fc64: ea1c 52d0 ands.w r2, ip, r0, lsr #23 - fc68: bf1e ittt ne - fc6a: ea1c 53d1 andsne.w r3, ip, r1, lsr #23 - fc6e: ea92 0f0c teqne r2, ip - fc72: ea93 0f0c teqne r3, ip - fc76: d06f beq.n fd58 <__aeabi_fmul+0xf8> - fc78: 441a add r2, r3 - fc7a: ea80 0c01 eor.w ip, r0, r1 - fc7e: 0240 lsls r0, r0, #9 - fc80: bf18 it ne - fc82: ea5f 2141 movsne.w r1, r1, lsl #9 - fc86: d01e beq.n fcc6 <__aeabi_fmul+0x66> - fc88: f04f 6300 mov.w r3, #134217728 ; 0x8000000 - fc8c: ea43 1050 orr.w r0, r3, r0, lsr #5 - fc90: ea43 1151 orr.w r1, r3, r1, lsr #5 - fc94: fba0 3101 umull r3, r1, r0, r1 - fc98: f00c 4000 and.w r0, ip, #2147483648 ; 0x80000000 - fc9c: f5b1 0f00 cmp.w r1, #8388608 ; 0x800000 - fca0: bf3e ittt cc - fca2: 0049 lslcc r1, r1, #1 - fca4: ea41 71d3 orrcc.w r1, r1, r3, lsr #31 - fca8: 005b lslcc r3, r3, #1 - fcaa: ea40 0001 orr.w r0, r0, r1 - fcae: f162 027f sbc.w r2, r2, #127 ; 0x7f - fcb2: 2afd cmp r2, #253 ; 0xfd - fcb4: d81d bhi.n fcf2 <__aeabi_fmul+0x92> - fcb6: f1b3 4f00 cmp.w r3, #2147483648 ; 0x80000000 - fcba: eb40 50c2 adc.w r0, r0, r2, lsl #23 - fcbe: bf08 it eq - fcc0: f020 0001 biceq.w r0, r0, #1 - fcc4: 4770 bx lr - fcc6: f090 0f00 teq r0, #0 - fcca: f00c 4c00 and.w ip, ip, #2147483648 ; 0x80000000 - fcce: bf08 it eq - fcd0: 0249 lsleq r1, r1, #9 - fcd2: ea4c 2050 orr.w r0, ip, r0, lsr #9 - fcd6: ea40 2051 orr.w r0, r0, r1, lsr #9 - fcda: 3a7f subs r2, #127 ; 0x7f - fcdc: bfc2 ittt gt - fcde: f1d2 03ff rsbsgt r3, r2, #255 ; 0xff - fce2: ea40 50c2 orrgt.w r0, r0, r2, lsl #23 - fce6: 4770 bxgt lr - fce8: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 - fcec: f04f 0300 mov.w r3, #0 - fcf0: 3a01 subs r2, #1 - fcf2: dc5d bgt.n fdb0 <__aeabi_fmul+0x150> - fcf4: f112 0f19 cmn.w r2, #25 - fcf8: bfdc itt le - fcfa: f000 4000 andle.w r0, r0, #2147483648 ; 0x80000000 - fcfe: 4770 bxle lr - fd00: f1c2 0200 rsb r2, r2, #0 - fd04: 0041 lsls r1, r0, #1 - fd06: fa21 f102 lsr.w r1, r1, r2 - fd0a: f1c2 0220 rsb r2, r2, #32 - fd0e: fa00 fc02 lsl.w ip, r0, r2 - fd12: ea5f 0031 movs.w r0, r1, rrx - fd16: f140 0000 adc.w r0, r0, #0 - fd1a: ea53 034c orrs.w r3, r3, ip, lsl #1 - fd1e: bf08 it eq - fd20: ea20 70dc biceq.w r0, r0, ip, lsr #31 - fd24: 4770 bx lr - fd26: f092 0f00 teq r2, #0 - fd2a: f000 4c00 and.w ip, r0, #2147483648 ; 0x80000000 - fd2e: bf02 ittt eq - fd30: 0040 lsleq r0, r0, #1 - fd32: f410 0f00 tsteq.w r0, #8388608 ; 0x800000 - fd36: 3a01 subeq r2, #1 - fd38: d0f9 beq.n fd2e <__aeabi_fmul+0xce> - fd3a: ea40 000c orr.w r0, r0, ip - fd3e: f093 0f00 teq r3, #0 - fd42: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000 - fd46: bf02 ittt eq - fd48: 0049 lsleq r1, r1, #1 - fd4a: f411 0f00 tsteq.w r1, #8388608 ; 0x800000 - fd4e: 3b01 subeq r3, #1 - fd50: d0f9 beq.n fd46 <__aeabi_fmul+0xe6> - fd52: ea41 010c orr.w r1, r1, ip - fd56: e78f b.n fc78 <__aeabi_fmul+0x18> - fd58: ea0c 53d1 and.w r3, ip, r1, lsr #23 - fd5c: ea92 0f0c teq r2, ip - fd60: bf18 it ne - fd62: ea93 0f0c teqne r3, ip - fd66: d00a beq.n fd7e <__aeabi_fmul+0x11e> - fd68: f030 4c00 bics.w ip, r0, #2147483648 ; 0x80000000 - fd6c: bf18 it ne - fd6e: f031 4c00 bicsne.w ip, r1, #2147483648 ; 0x80000000 - fd72: d1d8 bne.n fd26 <__aeabi_fmul+0xc6> - fd74: ea80 0001 eor.w r0, r0, r1 - fd78: f000 4000 and.w r0, r0, #2147483648 ; 0x80000000 - fd7c: 4770 bx lr - fd7e: f090 0f00 teq r0, #0 - fd82: bf17 itett ne - fd84: f090 4f00 teqne r0, #2147483648 ; 0x80000000 - fd88: 4608 moveq r0, r1 - fd8a: f091 0f00 teqne r1, #0 - fd8e: f091 4f00 teqne r1, #2147483648 ; 0x80000000 - fd92: d014 beq.n fdbe <__aeabi_fmul+0x15e> - fd94: ea92 0f0c teq r2, ip - fd98: d101 bne.n fd9e <__aeabi_fmul+0x13e> - fd9a: 0242 lsls r2, r0, #9 - fd9c: d10f bne.n fdbe <__aeabi_fmul+0x15e> - fd9e: ea93 0f0c teq r3, ip - fda2: d103 bne.n fdac <__aeabi_fmul+0x14c> - fda4: 024b lsls r3, r1, #9 - fda6: bf18 it ne - fda8: 4608 movne r0, r1 - fdaa: d108 bne.n fdbe <__aeabi_fmul+0x15e> - fdac: ea80 0001 eor.w r0, r0, r1 - fdb0: f000 4000 and.w r0, r0, #2147483648 ; 0x80000000 - fdb4: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000 - fdb8: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 - fdbc: 4770 bx lr - fdbe: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000 - fdc2: f440 0040 orr.w r0, r0, #12582912 ; 0xc00000 - fdc6: 4770 bx lr - -0000fdc8 <__aeabi_fdiv>: - fdc8: f04f 0cff mov.w ip, #255 ; 0xff - fdcc: ea1c 52d0 ands.w r2, ip, r0, lsr #23 - fdd0: bf1e ittt ne - fdd2: ea1c 53d1 andsne.w r3, ip, r1, lsr #23 - fdd6: ea92 0f0c teqne r2, ip - fdda: ea93 0f0c teqne r3, ip - fdde: d069 beq.n feb4 <__aeabi_fdiv+0xec> - fde0: eba2 0203 sub.w r2, r2, r3 - fde4: ea80 0c01 eor.w ip, r0, r1 - fde8: 0249 lsls r1, r1, #9 - fdea: ea4f 2040 mov.w r0, r0, lsl #9 - fdee: d037 beq.n fe60 <__aeabi_fdiv+0x98> - fdf0: f04f 5380 mov.w r3, #268435456 ; 0x10000000 - fdf4: ea43 1111 orr.w r1, r3, r1, lsr #4 - fdf8: ea43 1310 orr.w r3, r3, r0, lsr #4 - fdfc: f00c 4000 and.w r0, ip, #2147483648 ; 0x80000000 - fe00: 428b cmp r3, r1 - fe02: bf38 it cc - fe04: 005b lslcc r3, r3, #1 - fe06: f142 027d adc.w r2, r2, #125 ; 0x7d - fe0a: f44f 0c00 mov.w ip, #8388608 ; 0x800000 - fe0e: 428b cmp r3, r1 - fe10: bf24 itt cs - fe12: 1a5b subcs r3, r3, r1 - fe14: ea40 000c orrcs.w r0, r0, ip - fe18: ebb3 0f51 cmp.w r3, r1, lsr #1 - fe1c: bf24 itt cs - fe1e: eba3 0351 subcs.w r3, r3, r1, lsr #1 - fe22: ea40 005c orrcs.w r0, r0, ip, lsr #1 - fe26: ebb3 0f91 cmp.w r3, r1, lsr #2 - fe2a: bf24 itt cs - fe2c: eba3 0391 subcs.w r3, r3, r1, lsr #2 - fe30: ea40 009c orrcs.w r0, r0, ip, lsr #2 - fe34: ebb3 0fd1 cmp.w r3, r1, lsr #3 - fe38: bf24 itt cs - fe3a: eba3 03d1 subcs.w r3, r3, r1, lsr #3 - fe3e: ea40 00dc orrcs.w r0, r0, ip, lsr #3 - fe42: 011b lsls r3, r3, #4 - fe44: bf18 it ne - fe46: ea5f 1c1c movsne.w ip, ip, lsr #4 - fe4a: d1e0 bne.n fe0e <__aeabi_fdiv+0x46> - fe4c: 2afd cmp r2, #253 ; 0xfd - fe4e: f63f af50 bhi.w fcf2 <__aeabi_fmul+0x92> - fe52: 428b cmp r3, r1 - fe54: eb40 50c2 adc.w r0, r0, r2, lsl #23 - fe58: bf08 it eq - fe5a: f020 0001 biceq.w r0, r0, #1 - fe5e: 4770 bx lr - fe60: f00c 4c00 and.w ip, ip, #2147483648 ; 0x80000000 - fe64: ea4c 2050 orr.w r0, ip, r0, lsr #9 - fe68: 327f adds r2, #127 ; 0x7f - fe6a: bfc2 ittt gt - fe6c: f1d2 03ff rsbsgt r3, r2, #255 ; 0xff - fe70: ea40 50c2 orrgt.w r0, r0, r2, lsl #23 - fe74: 4770 bxgt lr - fe76: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 - fe7a: f04f 0300 mov.w r3, #0 - fe7e: 3a01 subs r2, #1 - fe80: e737 b.n fcf2 <__aeabi_fmul+0x92> - fe82: f092 0f00 teq r2, #0 - fe86: f000 4c00 and.w ip, r0, #2147483648 ; 0x80000000 - fe8a: bf02 ittt eq - fe8c: 0040 lsleq r0, r0, #1 - fe8e: f410 0f00 tsteq.w r0, #8388608 ; 0x800000 - fe92: 3a01 subeq r2, #1 - fe94: d0f9 beq.n fe8a <__aeabi_fdiv+0xc2> - fe96: ea40 000c orr.w r0, r0, ip - fe9a: f093 0f00 teq r3, #0 - fe9e: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000 - fea2: bf02 ittt eq - fea4: 0049 lsleq r1, r1, #1 - fea6: f411 0f00 tsteq.w r1, #8388608 ; 0x800000 - feaa: 3b01 subeq r3, #1 - feac: d0f9 beq.n fea2 <__aeabi_fdiv+0xda> - feae: ea41 010c orr.w r1, r1, ip - feb2: e795 b.n fde0 <__aeabi_fdiv+0x18> - feb4: ea0c 53d1 and.w r3, ip, r1, lsr #23 - feb8: ea92 0f0c teq r2, ip - febc: d108 bne.n fed0 <__aeabi_fdiv+0x108> - febe: 0242 lsls r2, r0, #9 - fec0: f47f af7d bne.w fdbe <__aeabi_fmul+0x15e> - fec4: ea93 0f0c teq r3, ip - fec8: f47f af70 bne.w fdac <__aeabi_fmul+0x14c> - fecc: 4608 mov r0, r1 - fece: e776 b.n fdbe <__aeabi_fmul+0x15e> - fed0: ea93 0f0c teq r3, ip - fed4: d104 bne.n fee0 <__aeabi_fdiv+0x118> - fed6: 024b lsls r3, r1, #9 - fed8: f43f af4c beq.w fd74 <__aeabi_fmul+0x114> - fedc: 4608 mov r0, r1 - fede: e76e b.n fdbe <__aeabi_fmul+0x15e> - fee0: f030 4c00 bics.w ip, r0, #2147483648 ; 0x80000000 - fee4: bf18 it ne - fee6: f031 4c00 bicsne.w ip, r1, #2147483648 ; 0x80000000 - feea: d1ca bne.n fe82 <__aeabi_fdiv+0xba> - feec: f030 4200 bics.w r2, r0, #2147483648 ; 0x80000000 - fef0: f47f af5c bne.w fdac <__aeabi_fmul+0x14c> - fef4: f031 4300 bics.w r3, r1, #2147483648 ; 0x80000000 - fef8: f47f af3c bne.w fd74 <__aeabi_fmul+0x114> - fefc: e75f b.n fdbe <__aeabi_fmul+0x15e> - fefe: bf00 nop - -0000ff00 <__gesf2>: - ff00: f04f 3cff mov.w ip, #4294967295 ; 0xffffffff - ff04: e006 b.n ff14 <__cmpsf2+0x4> - ff06: bf00 nop - -0000ff08 <__lesf2>: - ff08: f04f 0c01 mov.w ip, #1 - ff0c: e002 b.n ff14 <__cmpsf2+0x4> - ff0e: bf00 nop - -0000ff10 <__cmpsf2>: - ff10: f04f 0c01 mov.w ip, #1 - ff14: f84d cd04 str.w ip, [sp, #-4]! - ff18: ea4f 0240 mov.w r2, r0, lsl #1 - ff1c: ea4f 0341 mov.w r3, r1, lsl #1 - ff20: ea7f 6c22 mvns.w ip, r2, asr #24 - ff24: bf18 it ne - ff26: ea7f 6c23 mvnsne.w ip, r3, asr #24 - ff2a: d011 beq.n ff50 <__cmpsf2+0x40> - ff2c: b001 add sp, #4 - ff2e: ea52 0c53 orrs.w ip, r2, r3, lsr #1 - ff32: bf18 it ne - ff34: ea90 0f01 teqne r0, r1 - ff38: bf58 it pl - ff3a: ebb2 0003 subspl.w r0, r2, r3 - ff3e: bf88 it hi - ff40: 17c8 asrhi r0, r1, #31 - ff42: bf38 it cc - ff44: ea6f 70e1 mvncc.w r0, r1, asr #31 - ff48: bf18 it ne - ff4a: f040 0001 orrne.w r0, r0, #1 - ff4e: 4770 bx lr - ff50: ea7f 6c22 mvns.w ip, r2, asr #24 - ff54: d102 bne.n ff5c <__cmpsf2+0x4c> - ff56: ea5f 2c40 movs.w ip, r0, lsl #9 - ff5a: d105 bne.n ff68 <__cmpsf2+0x58> - ff5c: ea7f 6c23 mvns.w ip, r3, asr #24 - ff60: d1e4 bne.n ff2c <__cmpsf2+0x1c> - ff62: ea5f 2c41 movs.w ip, r1, lsl #9 - ff66: d0e1 beq.n ff2c <__cmpsf2+0x1c> - ff68: f85d 0b04 ldr.w r0, [sp], #4 - ff6c: 4770 bx lr - ff6e: bf00 nop - -0000ff70 <__aeabi_cfrcmple>: - ff70: 4684 mov ip, r0 - ff72: 4608 mov r0, r1 - ff74: 4661 mov r1, ip - ff76: e7ff b.n ff78 <__aeabi_cfcmpeq> - -0000ff78 <__aeabi_cfcmpeq>: - ff78: b50f push {r0, r1, r2, r3, lr} - ff7a: f7ff ffc9 bl ff10 <__cmpsf2> - ff7e: 2800 cmp r0, #0 - ff80: bf48 it mi - ff82: f110 0f00 cmnmi.w r0, #0 - ff86: bd0f pop {r0, r1, r2, r3, pc} - -0000ff88 <__aeabi_fcmpeq>: - ff88: f84d ed08 str.w lr, [sp, #-8]! - ff8c: f7ff fff4 bl ff78 <__aeabi_cfcmpeq> - ff90: bf0c ite eq - ff92: 2001 moveq r0, #1 - ff94: 2000 movne r0, #0 - ff96: f85d fb08 ldr.w pc, [sp], #8 - ff9a: bf00 nop - -0000ff9c <__aeabi_fcmplt>: - ff9c: f84d ed08 str.w lr, [sp, #-8]! - ffa0: f7ff ffea bl ff78 <__aeabi_cfcmpeq> - ffa4: bf34 ite cc - ffa6: 2001 movcc r0, #1 - ffa8: 2000 movcs r0, #0 - ffaa: f85d fb08 ldr.w pc, [sp], #8 - ffae: bf00 nop - -0000ffb0 <__aeabi_fcmple>: - ffb0: f84d ed08 str.w lr, [sp, #-8]! - ffb4: f7ff ffe0 bl ff78 <__aeabi_cfcmpeq> - ffb8: bf94 ite ls - ffba: 2001 movls r0, #1 - ffbc: 2000 movhi r0, #0 - ffbe: f85d fb08 ldr.w pc, [sp], #8 - ffc2: bf00 nop - -0000ffc4 <__aeabi_fcmpge>: - ffc4: f84d ed08 str.w lr, [sp, #-8]! - ffc8: f7ff ffd2 bl ff70 <__aeabi_cfrcmple> - ffcc: bf94 ite ls - ffce: 2001 movls r0, #1 - ffd0: 2000 movhi r0, #0 - ffd2: f85d fb08 ldr.w pc, [sp], #8 - ffd6: bf00 nop - -0000ffd8 <__aeabi_fcmpgt>: - ffd8: f84d ed08 str.w lr, [sp, #-8]! - ffdc: f7ff ffc8 bl ff70 <__aeabi_cfrcmple> - ffe0: bf34 ite cc - ffe2: 2001 movcc r0, #1 - ffe4: 2000 movcs r0, #0 - ffe6: f85d fb08 ldr.w pc, [sp], #8 - ffea: bf00 nop - -0000ffec <__aeabi_fcmpun>: - ffec: ea4f 0240 mov.w r2, r0, lsl #1 - fff0: ea4f 0341 mov.w r3, r1, lsl #1 - fff4: ea7f 6c22 mvns.w ip, r2, asr #24 - fff8: d102 bne.n 10000 <__aeabi_fcmpun+0x14> - fffa: ea5f 2c40 movs.w ip, r0, lsl #9 - fffe: d108 bne.n 10012 <__aeabi_fcmpun+0x26> - 10000: ea7f 6c23 mvns.w ip, r3, asr #24 - 10004: d102 bne.n 1000c <__aeabi_fcmpun+0x20> - 10006: ea5f 2c41 movs.w ip, r1, lsl #9 - 1000a: d102 bne.n 10012 <__aeabi_fcmpun+0x26> - 1000c: f04f 0000 mov.w r0, #0 - 10010: 4770 bx lr - 10012: f04f 0001 mov.w r0, #1 - 10016: 4770 bx lr - -00010018 <__aeabi_f2iz>: - 10018: ea4f 0240 mov.w r2, r0, lsl #1 - 1001c: f1b2 4ffe cmp.w r2, #2130706432 ; 0x7f000000 - 10020: d30f bcc.n 10042 <__aeabi_f2iz+0x2a> - 10022: f04f 039e mov.w r3, #158 ; 0x9e - 10026: ebb3 6212 subs.w r2, r3, r2, lsr #24 - 1002a: d90d bls.n 10048 <__aeabi_f2iz+0x30> - 1002c: ea4f 2300 mov.w r3, r0, lsl #8 - 10030: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 - 10034: f010 4f00 tst.w r0, #2147483648 ; 0x80000000 - 10038: fa23 f002 lsr.w r0, r3, r2 - 1003c: bf18 it ne - 1003e: 4240 negne r0, r0 - 10040: 4770 bx lr - 10042: f04f 0000 mov.w r0, #0 - 10046: 4770 bx lr - 10048: f112 0f61 cmn.w r2, #97 ; 0x61 - 1004c: d101 bne.n 10052 <__aeabi_f2iz+0x3a> - 1004e: 0242 lsls r2, r0, #9 - 10050: d105 bne.n 1005e <__aeabi_f2iz+0x46> - 10052: f010 4000 ands.w r0, r0, #2147483648 ; 0x80000000 - 10056: bf08 it eq - 10058: f06f 4000 mvneq.w r0, #2147483648 ; 0x80000000 - 1005c: 4770 bx lr - 1005e: f04f 0000 mov.w r0, #0 - 10062: 4770 bx lr - -00010064 : - 10064: 4b02 ldr r3, [pc, #8] ; (10070 ) - 10066: 4403 add r3, r0 - 10068: 7858 ldrb r0, [r3, #1] - 1006a: f000 0044 and.w r0, r0, #68 ; 0x44 - 1006e: 4770 bx lr - 10070: 00018810 .word 0x00018810 - -00010074 : - 10074: 220a movs r2, #10 - 10076: 2100 movs r1, #0 - 10078: f000 bdc2 b.w 10c00 - -0001007c : - 1007c: 220a movs r2, #10 - 1007e: 2100 movs r1, #0 - 10080: f000 bdbe b.w 10c00 - -00010084 : - 10084: 1e93 subs r3, r2, #2 - 10086: 2b22 cmp r3, #34 ; 0x22 - 10088: b510 push {r4, lr} - 1008a: 460c mov r4, r1 - 1008c: d80c bhi.n 100a8 - 1008e: 2a0a cmp r2, #10 - 10090: d003 beq.n 1009a - 10092: f000 fe6d bl 10d70 <__utoa> - 10096: 4620 mov r0, r4 - 10098: bd10 pop {r4, pc} - 1009a: 2800 cmp r0, #0 - 1009c: daf9 bge.n 10092 - 1009e: 232d movs r3, #45 ; 0x2d - 100a0: f801 3b01 strb.w r3, [r1], #1 - 100a4: 4240 negs r0, r0 - 100a6: e7f4 b.n 10092 - 100a8: 2300 movs r3, #0 - 100aa: 700b strb r3, [r1, #0] - 100ac: 4618 mov r0, r3 - 100ae: bd10 pop {r4, pc} - -000100b0 : - 100b0: 4b02 ldr r3, [pc, #8] ; (100bc ) - 100b2: 4601 mov r1, r0 - 100b4: 6818 ldr r0, [r3, #0] - 100b6: f000 b80b b.w 100d0 <_malloc_r> - 100ba: bf00 nop - 100bc: 1fff8fa8 .word 0x1fff8fa8 - -000100c0 : - 100c0: 4b02 ldr r3, [pc, #8] ; (100cc ) - 100c2: 4601 mov r1, r0 - 100c4: 6818 ldr r0, [r3, #0] - 100c6: f001 bfed b.w 120a4 <_free_r> - 100ca: bf00 nop - 100cc: 1fff8fa8 .word 0x1fff8fa8 - -000100d0 <_malloc_r>: - 100d0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 100d4: f101 060b add.w r6, r1, #11 - 100d8: 2e16 cmp r6, #22 - 100da: b083 sub sp, #12 - 100dc: 4604 mov r4, r0 - 100de: d824 bhi.n 1012a <_malloc_r+0x5a> - 100e0: 2910 cmp r1, #16 - 100e2: f200 80ba bhi.w 1025a <_malloc_r+0x18a> - 100e6: f000 faa3 bl 10630 <__malloc_lock> - 100ea: 2610 movs r6, #16 - 100ec: 2218 movs r2, #24 - 100ee: 2002 movs r0, #2 - 100f0: 4fb5 ldr r7, [pc, #724] ; (103c8 <_malloc_r+0x2f8>) - 100f2: 443a add r2, r7 - 100f4: f1a2 0108 sub.w r1, r2, #8 - 100f8: 6853 ldr r3, [r2, #4] - 100fa: 428b cmp r3, r1 - 100fc: f000 80ba beq.w 10274 <_malloc_r+0x1a4> - 10100: 685a ldr r2, [r3, #4] - 10102: 68d9 ldr r1, [r3, #12] - 10104: f022 0203 bic.w r2, r2, #3 - 10108: 441a add r2, r3 - 1010a: 689d ldr r5, [r3, #8] - 1010c: 60e9 str r1, [r5, #12] - 1010e: 608d str r5, [r1, #8] - 10110: 6851 ldr r1, [r2, #4] - 10112: f041 0101 orr.w r1, r1, #1 - 10116: 4620 mov r0, r4 - 10118: 6051 str r1, [r2, #4] - 1011a: f103 0508 add.w r5, r3, #8 - 1011e: f000 fa8d bl 1063c <__malloc_unlock> - 10122: 4628 mov r0, r5 - 10124: b003 add sp, #12 - 10126: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 1012a: f036 0607 bics.w r6, r6, #7 - 1012e: f100 8094 bmi.w 1025a <_malloc_r+0x18a> - 10132: 42b1 cmp r1, r6 - 10134: f200 8091 bhi.w 1025a <_malloc_r+0x18a> - 10138: f000 fa7a bl 10630 <__malloc_lock> - 1013c: f5b6 7ffc cmp.w r6, #504 ; 0x1f8 - 10140: f0c0 819a bcc.w 10478 <_malloc_r+0x3a8> - 10144: 0a73 lsrs r3, r6, #9 - 10146: f000 808f beq.w 10268 <_malloc_r+0x198> - 1014a: 2b04 cmp r3, #4 - 1014c: f200 816f bhi.w 1042e <_malloc_r+0x35e> - 10150: 09b3 lsrs r3, r6, #6 - 10152: f103 0039 add.w r0, r3, #57 ; 0x39 - 10156: f103 0c38 add.w ip, r3, #56 ; 0x38 - 1015a: 00c3 lsls r3, r0, #3 - 1015c: 4f9a ldr r7, [pc, #616] ; (103c8 <_malloc_r+0x2f8>) - 1015e: 443b add r3, r7 - 10160: f1a3 0508 sub.w r5, r3, #8 - 10164: 685b ldr r3, [r3, #4] - 10166: 429d cmp r5, r3 - 10168: d106 bne.n 10178 <_malloc_r+0xa8> - 1016a: e00c b.n 10186 <_malloc_r+0xb6> - 1016c: 2900 cmp r1, #0 - 1016e: f280 8127 bge.w 103c0 <_malloc_r+0x2f0> - 10172: 68db ldr r3, [r3, #12] - 10174: 429d cmp r5, r3 - 10176: d006 beq.n 10186 <_malloc_r+0xb6> - 10178: 685a ldr r2, [r3, #4] - 1017a: f022 0203 bic.w r2, r2, #3 - 1017e: 1b91 subs r1, r2, r6 - 10180: 290f cmp r1, #15 - 10182: ddf3 ble.n 1016c <_malloc_r+0x9c> - 10184: 4660 mov r0, ip - 10186: 693d ldr r5, [r7, #16] - 10188: f8df c240 ldr.w ip, [pc, #576] ; 103cc <_malloc_r+0x2fc> - 1018c: 4565 cmp r5, ip - 1018e: d07c beq.n 1028a <_malloc_r+0x1ba> - 10190: 686a ldr r2, [r5, #4] - 10192: f022 0203 bic.w r2, r2, #3 - 10196: 1b93 subs r3, r2, r6 - 10198: 2b0f cmp r3, #15 - 1019a: f300 817b bgt.w 10494 <_malloc_r+0x3c4> - 1019e: 2b00 cmp r3, #0 - 101a0: e9c7 cc04 strd ip, ip, [r7, #16] - 101a4: f280 816c bge.w 10480 <_malloc_r+0x3b0> - 101a8: f5b2 7f00 cmp.w r2, #512 ; 0x200 - 101ac: f080 811a bcs.w 103e4 <_malloc_r+0x314> - 101b0: 08d3 lsrs r3, r2, #3 - 101b2: 6879 ldr r1, [r7, #4] - 101b4: 3301 adds r3, #1 - 101b6: ea4f 1e52 mov.w lr, r2, lsr #5 - 101ba: 2201 movs r2, #1 - 101bc: fa02 f20e lsl.w r2, r2, lr - 101c0: 430a orrs r2, r1 - 101c2: f857 e033 ldr.w lr, [r7, r3, lsl #3] - 101c6: f8c5 e008 str.w lr, [r5, #8] - 101ca: eb07 01c3 add.w r1, r7, r3, lsl #3 - 101ce: 3908 subs r1, #8 - 101d0: 60e9 str r1, [r5, #12] - 101d2: 607a str r2, [r7, #4] - 101d4: f847 5033 str.w r5, [r7, r3, lsl #3] - 101d8: f8ce 500c str.w r5, [lr, #12] - 101dc: 1083 asrs r3, r0, #2 - 101de: 2101 movs r1, #1 - 101e0: 4099 lsls r1, r3 - 101e2: 4291 cmp r1, r2 - 101e4: d857 bhi.n 10296 <_malloc_r+0x1c6> - 101e6: 4211 tst r1, r2 - 101e8: d106 bne.n 101f8 <_malloc_r+0x128> - 101ea: f020 0003 bic.w r0, r0, #3 - 101ee: 0049 lsls r1, r1, #1 - 101f0: 4211 tst r1, r2 - 101f2: f100 0004 add.w r0, r0, #4 - 101f6: d0fa beq.n 101ee <_malloc_r+0x11e> - 101f8: eb07 09c0 add.w r9, r7, r0, lsl #3 - 101fc: 464d mov r5, r9 - 101fe: 4686 mov lr, r0 - 10200: f8d5 800c ldr.w r8, [r5, #12] - 10204: 4545 cmp r5, r8 - 10206: d108 bne.n 1021a <_malloc_r+0x14a> - 10208: e11d b.n 10446 <_malloc_r+0x376> - 1020a: 2b00 cmp r3, #0 - 1020c: f280 8124 bge.w 10458 <_malloc_r+0x388> - 10210: f8d8 800c ldr.w r8, [r8, #12] - 10214: 4545 cmp r5, r8 - 10216: f000 8116 beq.w 10446 <_malloc_r+0x376> - 1021a: f8d8 2004 ldr.w r2, [r8, #4] - 1021e: f022 0203 bic.w r2, r2, #3 - 10222: 1b93 subs r3, r2, r6 - 10224: 2b0f cmp r3, #15 - 10226: ddf0 ble.n 1020a <_malloc_r+0x13a> - 10228: 4620 mov r0, r4 - 1022a: e9d8 5402 ldrd r5, r4, [r8, #8] - 1022e: eb08 0106 add.w r1, r8, r6 - 10232: f046 0601 orr.w r6, r6, #1 - 10236: f8c8 6004 str.w r6, [r8, #4] - 1023a: 60ec str r4, [r5, #12] - 1023c: 60a5 str r5, [r4, #8] - 1023e: f043 0401 orr.w r4, r3, #1 - 10242: e9c7 1104 strd r1, r1, [r7, #16] - 10246: e9c1 cc02 strd ip, ip, [r1, #8] - 1024a: 604c str r4, [r1, #4] - 1024c: f848 3002 str.w r3, [r8, r2] - 10250: f000 f9f4 bl 1063c <__malloc_unlock> - 10254: f108 0508 add.w r5, r8, #8 - 10258: e002 b.n 10260 <_malloc_r+0x190> - 1025a: 230c movs r3, #12 - 1025c: 6023 str r3, [r4, #0] - 1025e: 2500 movs r5, #0 - 10260: 4628 mov r0, r5 - 10262: b003 add sp, #12 - 10264: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 10268: f44f 7300 mov.w r3, #512 ; 0x200 - 1026c: 2040 movs r0, #64 ; 0x40 - 1026e: f04f 0c3f mov.w ip, #63 ; 0x3f - 10272: e773 b.n 1015c <_malloc_r+0x8c> - 10274: 68d3 ldr r3, [r2, #12] - 10276: 429a cmp r2, r3 - 10278: bf08 it eq - 1027a: 3002 addeq r0, #2 - 1027c: f47f af40 bne.w 10100 <_malloc_r+0x30> - 10280: 693d ldr r5, [r7, #16] - 10282: f8df c148 ldr.w ip, [pc, #328] ; 103cc <_malloc_r+0x2fc> - 10286: 4565 cmp r5, ip - 10288: d182 bne.n 10190 <_malloc_r+0xc0> - 1028a: 687a ldr r2, [r7, #4] - 1028c: 1083 asrs r3, r0, #2 - 1028e: 2101 movs r1, #1 - 10290: 4099 lsls r1, r3 - 10292: 4291 cmp r1, r2 - 10294: d9a7 bls.n 101e6 <_malloc_r+0x116> - 10296: 68bd ldr r5, [r7, #8] - 10298: 686b ldr r3, [r5, #4] - 1029a: f023 0903 bic.w r9, r3, #3 - 1029e: 454e cmp r6, r9 - 102a0: d803 bhi.n 102aa <_malloc_r+0x1da> - 102a2: eba9 0306 sub.w r3, r9, r6 - 102a6: 2b0f cmp r3, #15 - 102a8: dc7a bgt.n 103a0 <_malloc_r+0x2d0> - 102aa: f8df b124 ldr.w fp, [pc, #292] ; 103d0 <_malloc_r+0x300> - 102ae: 4b49 ldr r3, [pc, #292] ; (103d4 <_malloc_r+0x304>) - 102b0: f8db 2000 ldr.w r2, [fp] - 102b4: 681b ldr r3, [r3, #0] - 102b6: 3201 adds r2, #1 - 102b8: 4433 add r3, r6 - 102ba: eb05 0a09 add.w sl, r5, r9 - 102be: f000 8133 beq.w 10528 <_malloc_r+0x458> - 102c2: f503 5380 add.w r3, r3, #4096 ; 0x1000 - 102c6: 330f adds r3, #15 - 102c8: f423 687f bic.w r8, r3, #4080 ; 0xff0 - 102cc: f028 080f bic.w r8, r8, #15 - 102d0: 4641 mov r1, r8 - 102d2: 4620 mov r0, r4 - 102d4: f001 fb38 bl 11948 <_sbrk_r> - 102d8: 1c41 adds r1, r0, #1 - 102da: 4602 mov r2, r0 - 102dc: f000 80f3 beq.w 104c6 <_malloc_r+0x3f6> - 102e0: 4582 cmp sl, r0 - 102e2: f200 80ee bhi.w 104c2 <_malloc_r+0x3f2> - 102e6: 4b3c ldr r3, [pc, #240] ; (103d8 <_malloc_r+0x308>) - 102e8: 6819 ldr r1, [r3, #0] - 102ea: 4441 add r1, r8 - 102ec: 6019 str r1, [r3, #0] - 102ee: 4608 mov r0, r1 - 102f0: f000 814e beq.w 10590 <_malloc_r+0x4c0> - 102f4: f8db 1000 ldr.w r1, [fp] - 102f8: 9301 str r3, [sp, #4] - 102fa: 3101 adds r1, #1 - 102fc: bf1b ittet ne - 102fe: eba2 010a subne.w r1, r2, sl - 10302: 1809 addne r1, r1, r0 - 10304: f8cb 2000 streq.w r2, [fp] - 10308: 6019 strne r1, [r3, #0] - 1030a: f012 0b07 ands.w fp, r2, #7 - 1030e: f000 8117 beq.w 10540 <_malloc_r+0x470> - 10312: f1cb 0108 rsb r1, fp, #8 - 10316: 440a add r2, r1 - 10318: f5cb 5180 rsb r1, fp, #4096 ; 0x1000 - 1031c: 4490 add r8, r2 - 1031e: 3108 adds r1, #8 - 10320: eba1 0108 sub.w r1, r1, r8 - 10324: f3c1 0a0b ubfx sl, r1, #0, #12 - 10328: 4651 mov r1, sl - 1032a: 4620 mov r0, r4 - 1032c: 9200 str r2, [sp, #0] - 1032e: f001 fb0b bl 11948 <_sbrk_r> - 10332: 1c42 adds r2, r0, #1 - 10334: e9dd 2300 ldrd r2, r3, [sp] - 10338: f000 814f beq.w 105da <_malloc_r+0x50a> - 1033c: 1a80 subs r0, r0, r2 - 1033e: eb00 080a add.w r8, r0, sl - 10342: 6819 ldr r1, [r3, #0] - 10344: 60ba str r2, [r7, #8] - 10346: f048 0001 orr.w r0, r8, #1 - 1034a: 4451 add r1, sl - 1034c: 42bd cmp r5, r7 - 1034e: 6050 str r0, [r2, #4] - 10350: 6019 str r1, [r3, #0] - 10352: f000 8129 beq.w 105a8 <_malloc_r+0x4d8> - 10356: f1b9 0f0f cmp.w r9, #15 - 1035a: f240 8127 bls.w 105ac <_malloc_r+0x4dc> - 1035e: 6868 ldr r0, [r5, #4] - 10360: f1a9 0c0c sub.w ip, r9, #12 - 10364: f02c 0c07 bic.w ip, ip, #7 - 10368: f000 0001 and.w r0, r0, #1 - 1036c: ea40 000c orr.w r0, r0, ip - 10370: 6068 str r0, [r5, #4] - 10372: f04f 0e05 mov.w lr, #5 - 10376: eb05 000c add.w r0, r5, ip - 1037a: f1bc 0f0f cmp.w ip, #15 - 1037e: e9c0 ee01 strd lr, lr, [r0, #4] - 10382: f200 8132 bhi.w 105ea <_malloc_r+0x51a> - 10386: 6850 ldr r0, [r2, #4] - 10388: 4615 mov r5, r2 - 1038a: 4b14 ldr r3, [pc, #80] ; (103dc <_malloc_r+0x30c>) - 1038c: 681a ldr r2, [r3, #0] - 1038e: 428a cmp r2, r1 - 10390: bf38 it cc - 10392: 6019 strcc r1, [r3, #0] - 10394: 4b12 ldr r3, [pc, #72] ; (103e0 <_malloc_r+0x310>) - 10396: 681a ldr r2, [r3, #0] - 10398: 428a cmp r2, r1 - 1039a: bf38 it cc - 1039c: 6019 strcc r1, [r3, #0] - 1039e: e094 b.n 104ca <_malloc_r+0x3fa> - 103a0: 19aa adds r2, r5, r6 - 103a2: f043 0301 orr.w r3, r3, #1 - 103a6: f046 0601 orr.w r6, r6, #1 - 103aa: 606e str r6, [r5, #4] - 103ac: 4620 mov r0, r4 - 103ae: 60ba str r2, [r7, #8] - 103b0: 6053 str r3, [r2, #4] - 103b2: f000 f943 bl 1063c <__malloc_unlock> - 103b6: 3508 adds r5, #8 - 103b8: 4628 mov r0, r5 - 103ba: b003 add sp, #12 - 103bc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 103c0: 68d9 ldr r1, [r3, #12] - 103c2: 441a add r2, r3 - 103c4: e6a1 b.n 1010a <_malloc_r+0x3a> - 103c6: bf00 nop - 103c8: 1fff8900 .word 0x1fff8900 - 103cc: 1fff8908 .word 0x1fff8908 - 103d0: 1fff8d08 .word 0x1fff8d08 - 103d4: 1fff9a98 .word 0x1fff9a98 - 103d8: 1fff9a68 .word 0x1fff9a68 - 103dc: 1fff9a90 .word 0x1fff9a90 - 103e0: 1fff9a94 .word 0x1fff9a94 - 103e4: f5b2 6f20 cmp.w r2, #2560 ; 0xa00 - 103e8: ea4f 2352 mov.w r3, r2, lsr #9 - 103ec: d363 bcc.n 104b6 <_malloc_r+0x3e6> - 103ee: 2b14 cmp r3, #20 - 103f0: f200 80b7 bhi.w 10562 <_malloc_r+0x492> - 103f4: f103 015c add.w r1, r3, #92 ; 0x5c - 103f8: 00c9 lsls r1, r1, #3 - 103fa: 335b adds r3, #91 ; 0x5b - 103fc: eb07 0e01 add.w lr, r7, r1 - 10400: 5879 ldr r1, [r7, r1] - 10402: f1ae 0e08 sub.w lr, lr, #8 - 10406: 458e cmp lr, r1 - 10408: f000 8091 beq.w 1052e <_malloc_r+0x45e> - 1040c: 684b ldr r3, [r1, #4] - 1040e: f023 0303 bic.w r3, r3, #3 - 10412: 4293 cmp r3, r2 - 10414: d902 bls.n 1041c <_malloc_r+0x34c> - 10416: 6889 ldr r1, [r1, #8] - 10418: 458e cmp lr, r1 - 1041a: d1f7 bne.n 1040c <_malloc_r+0x33c> - 1041c: f8d1 e00c ldr.w lr, [r1, #12] - 10420: 687a ldr r2, [r7, #4] - 10422: e9c5 1e02 strd r1, lr, [r5, #8] - 10426: f8ce 5008 str.w r5, [lr, #8] - 1042a: 60cd str r5, [r1, #12] - 1042c: e6d6 b.n 101dc <_malloc_r+0x10c> - 1042e: 2b14 cmp r3, #20 - 10430: d959 bls.n 104e6 <_malloc_r+0x416> - 10432: 2b54 cmp r3, #84 ; 0x54 - 10434: f200 809d bhi.w 10572 <_malloc_r+0x4a2> - 10438: 0b33 lsrs r3, r6, #12 - 1043a: f103 006f add.w r0, r3, #111 ; 0x6f - 1043e: f103 0c6e add.w ip, r3, #110 ; 0x6e - 10442: 00c3 lsls r3, r0, #3 - 10444: e68a b.n 1015c <_malloc_r+0x8c> - 10446: f10e 0e01 add.w lr, lr, #1 - 1044a: f01e 0f03 tst.w lr, #3 - 1044e: f105 0508 add.w r5, r5, #8 - 10452: f47f aed5 bne.w 10200 <_malloc_r+0x130> - 10456: e051 b.n 104fc <_malloc_r+0x42c> - 10458: 4442 add r2, r8 - 1045a: 4645 mov r5, r8 - 1045c: 6853 ldr r3, [r2, #4] - 1045e: f8d8 100c ldr.w r1, [r8, #12] - 10462: f043 0301 orr.w r3, r3, #1 - 10466: 6053 str r3, [r2, #4] - 10468: f855 3f08 ldr.w r3, [r5, #8]! - 1046c: 4620 mov r0, r4 - 1046e: 60d9 str r1, [r3, #12] - 10470: 608b str r3, [r1, #8] - 10472: f000 f8e3 bl 1063c <__malloc_unlock> - 10476: e6f3 b.n 10260 <_malloc_r+0x190> - 10478: 08f0 lsrs r0, r6, #3 - 1047a: f106 0208 add.w r2, r6, #8 - 1047e: e637 b.n 100f0 <_malloc_r+0x20> - 10480: 442a add r2, r5 - 10482: 4620 mov r0, r4 - 10484: 6853 ldr r3, [r2, #4] - 10486: f043 0301 orr.w r3, r3, #1 - 1048a: 6053 str r3, [r2, #4] - 1048c: 3508 adds r5, #8 - 1048e: f000 f8d5 bl 1063c <__malloc_unlock> - 10492: e6e5 b.n 10260 <_malloc_r+0x190> - 10494: 19a9 adds r1, r5, r6 - 10496: 4620 mov r0, r4 - 10498: f046 0601 orr.w r6, r6, #1 - 1049c: f043 0401 orr.w r4, r3, #1 - 104a0: 606e str r6, [r5, #4] - 104a2: e9c7 1104 strd r1, r1, [r7, #16] - 104a6: e9c1 cc02 strd ip, ip, [r1, #8] - 104aa: 604c str r4, [r1, #4] - 104ac: 50ab str r3, [r5, r2] - 104ae: f000 f8c5 bl 1063c <__malloc_unlock> - 104b2: 3508 adds r5, #8 - 104b4: e6d4 b.n 10260 <_malloc_r+0x190> - 104b6: 0993 lsrs r3, r2, #6 - 104b8: f103 0139 add.w r1, r3, #57 ; 0x39 - 104bc: 00c9 lsls r1, r1, #3 - 104be: 3338 adds r3, #56 ; 0x38 - 104c0: e79c b.n 103fc <_malloc_r+0x32c> - 104c2: 42bd cmp r5, r7 - 104c4: d05f beq.n 10586 <_malloc_r+0x4b6> - 104c6: 68bd ldr r5, [r7, #8] - 104c8: 6868 ldr r0, [r5, #4] - 104ca: f020 0803 bic.w r8, r0, #3 - 104ce: 4546 cmp r6, r8 - 104d0: eba8 0306 sub.w r3, r8, r6 - 104d4: d802 bhi.n 104dc <_malloc_r+0x40c> - 104d6: 2b0f cmp r3, #15 - 104d8: f73f af62 bgt.w 103a0 <_malloc_r+0x2d0> - 104dc: 4620 mov r0, r4 - 104de: f000 f8ad bl 1063c <__malloc_unlock> - 104e2: 2500 movs r5, #0 - 104e4: e6bc b.n 10260 <_malloc_r+0x190> - 104e6: f103 005c add.w r0, r3, #92 ; 0x5c - 104ea: f103 0c5b add.w ip, r3, #91 ; 0x5b - 104ee: 00c3 lsls r3, r0, #3 - 104f0: e634 b.n 1015c <_malloc_r+0x8c> - 104f2: f859 3908 ldr.w r3, [r9], #-8 - 104f6: 454b cmp r3, r9 - 104f8: f040 8096 bne.w 10628 <_malloc_r+0x558> - 104fc: f010 0f03 tst.w r0, #3 - 10500: f100 30ff add.w r0, r0, #4294967295 ; 0xffffffff - 10504: d1f5 bne.n 104f2 <_malloc_r+0x422> - 10506: 687b ldr r3, [r7, #4] - 10508: ea23 0301 bic.w r3, r3, r1 - 1050c: 607b str r3, [r7, #4] - 1050e: 0049 lsls r1, r1, #1 - 10510: 4299 cmp r1, r3 - 10512: f63f aec0 bhi.w 10296 <_malloc_r+0x1c6> - 10516: b919 cbnz r1, 10520 <_malloc_r+0x450> - 10518: e6bd b.n 10296 <_malloc_r+0x1c6> - 1051a: 0049 lsls r1, r1, #1 - 1051c: f10e 0e04 add.w lr, lr, #4 - 10520: 4219 tst r1, r3 - 10522: d0fa beq.n 1051a <_malloc_r+0x44a> - 10524: 4670 mov r0, lr - 10526: e667 b.n 101f8 <_malloc_r+0x128> - 10528: f103 0810 add.w r8, r3, #16 - 1052c: e6d0 b.n 102d0 <_malloc_r+0x200> - 1052e: 109a asrs r2, r3, #2 - 10530: f04f 0801 mov.w r8, #1 - 10534: 687b ldr r3, [r7, #4] - 10536: fa08 f202 lsl.w r2, r8, r2 - 1053a: 431a orrs r2, r3 - 1053c: 607a str r2, [r7, #4] - 1053e: e770 b.n 10422 <_malloc_r+0x352> - 10540: eb02 0108 add.w r1, r2, r8 - 10544: 4249 negs r1, r1 - 10546: f3c1 0a0b ubfx sl, r1, #0, #12 - 1054a: 4651 mov r1, sl - 1054c: 4620 mov r0, r4 - 1054e: 9200 str r2, [sp, #0] - 10550: f001 f9fa bl 11948 <_sbrk_r> - 10554: 1c43 adds r3, r0, #1 - 10556: e9dd 2300 ldrd r2, r3, [sp] - 1055a: f47f aeef bne.w 1033c <_malloc_r+0x26c> - 1055e: 46da mov sl, fp - 10560: e6ef b.n 10342 <_malloc_r+0x272> - 10562: 2b54 cmp r3, #84 ; 0x54 - 10564: d825 bhi.n 105b2 <_malloc_r+0x4e2> - 10566: 0b13 lsrs r3, r2, #12 - 10568: f103 016f add.w r1, r3, #111 ; 0x6f - 1056c: 00c9 lsls r1, r1, #3 - 1056e: 336e adds r3, #110 ; 0x6e - 10570: e744 b.n 103fc <_malloc_r+0x32c> - 10572: f5b3 7faa cmp.w r3, #340 ; 0x154 - 10576: d825 bhi.n 105c4 <_malloc_r+0x4f4> - 10578: 0bf3 lsrs r3, r6, #15 - 1057a: f103 0078 add.w r0, r3, #120 ; 0x78 - 1057e: f103 0c77 add.w ip, r3, #119 ; 0x77 - 10582: 00c3 lsls r3, r0, #3 - 10584: e5ea b.n 1015c <_malloc_r+0x8c> - 10586: 4b29 ldr r3, [pc, #164] ; (1062c <_malloc_r+0x55c>) - 10588: 6818 ldr r0, [r3, #0] - 1058a: 4440 add r0, r8 - 1058c: 6018 str r0, [r3, #0] - 1058e: e6b1 b.n 102f4 <_malloc_r+0x224> - 10590: f3ca 0c0b ubfx ip, sl, #0, #12 - 10594: f1bc 0f00 cmp.w ip, #0 - 10598: f47f aeac bne.w 102f4 <_malloc_r+0x224> - 1059c: 68bd ldr r5, [r7, #8] - 1059e: 44c8 add r8, r9 - 105a0: f048 0001 orr.w r0, r8, #1 - 105a4: 6068 str r0, [r5, #4] - 105a6: e6f0 b.n 1038a <_malloc_r+0x2ba> - 105a8: 4615 mov r5, r2 - 105aa: e6ee b.n 1038a <_malloc_r+0x2ba> - 105ac: 2301 movs r3, #1 - 105ae: 6053 str r3, [r2, #4] - 105b0: e794 b.n 104dc <_malloc_r+0x40c> - 105b2: f5b3 7faa cmp.w r3, #340 ; 0x154 - 105b6: d823 bhi.n 10600 <_malloc_r+0x530> - 105b8: 0bd3 lsrs r3, r2, #15 - 105ba: f103 0178 add.w r1, r3, #120 ; 0x78 - 105be: 00c9 lsls r1, r1, #3 - 105c0: 3377 adds r3, #119 ; 0x77 - 105c2: e71b b.n 103fc <_malloc_r+0x32c> - 105c4: f240 5254 movw r2, #1364 ; 0x554 - 105c8: 4293 cmp r3, r2 - 105ca: d823 bhi.n 10614 <_malloc_r+0x544> - 105cc: 0cb3 lsrs r3, r6, #18 - 105ce: f103 007d add.w r0, r3, #125 ; 0x7d - 105d2: f103 0c7c add.w ip, r3, #124 ; 0x7c - 105d6: 00c3 lsls r3, r0, #3 - 105d8: e5c0 b.n 1015c <_malloc_r+0x8c> - 105da: f1ab 0b08 sub.w fp, fp, #8 - 105de: 44d8 add r8, fp - 105e0: eba8 0802 sub.w r8, r8, r2 - 105e4: f04f 0a00 mov.w sl, #0 - 105e8: e6ab b.n 10342 <_malloc_r+0x272> - 105ea: f105 0108 add.w r1, r5, #8 - 105ee: 4620 mov r0, r4 - 105f0: 9300 str r3, [sp, #0] - 105f2: f001 fd57 bl 120a4 <_free_r> - 105f6: 68bd ldr r5, [r7, #8] - 105f8: 9b00 ldr r3, [sp, #0] - 105fa: 6868 ldr r0, [r5, #4] - 105fc: 6819 ldr r1, [r3, #0] - 105fe: e6c4 b.n 1038a <_malloc_r+0x2ba> - 10600: f240 5154 movw r1, #1364 ; 0x554 - 10604: 428b cmp r3, r1 - 10606: d80b bhi.n 10620 <_malloc_r+0x550> - 10608: 0c93 lsrs r3, r2, #18 - 1060a: f103 017d add.w r1, r3, #125 ; 0x7d - 1060e: 00c9 lsls r1, r1, #3 - 10610: 337c adds r3, #124 ; 0x7c - 10612: e6f3 b.n 103fc <_malloc_r+0x32c> - 10614: f44f 737e mov.w r3, #1016 ; 0x3f8 - 10618: 207f movs r0, #127 ; 0x7f - 1061a: f04f 0c7e mov.w ip, #126 ; 0x7e - 1061e: e59d b.n 1015c <_malloc_r+0x8c> - 10620: f44f 717e mov.w r1, #1016 ; 0x3f8 - 10624: 237e movs r3, #126 ; 0x7e - 10626: e6e9 b.n 103fc <_malloc_r+0x32c> - 10628: 687b ldr r3, [r7, #4] - 1062a: e770 b.n 1050e <_malloc_r+0x43e> - 1062c: 1fff9a68 .word 0x1fff9a68 - -00010630 <__malloc_lock>: - 10630: 4801 ldr r0, [pc, #4] ; (10638 <__malloc_lock+0x8>) - 10632: f001 bbb9 b.w 11da8 <__retarget_lock_acquire_recursive> - 10636: bf00 nop - 10638: 1fff9bdc .word 0x1fff9bdc - -0001063c <__malloc_unlock>: - 1063c: 4801 ldr r0, [pc, #4] ; (10644 <__malloc_unlock+0x8>) - 1063e: f001 bbb5 b.w 11dac <__retarget_lock_release_recursive> - 10642: bf00 nop - 10644: 1fff9bdc .word 0x1fff9bdc - -00010648 : - 10648: b410 push {r4} - 1064a: 4c04 ldr r4, [pc, #16] ; (1065c ) - 1064c: 4603 mov r3, r0 - 1064e: 460a mov r2, r1 - 10650: 6820 ldr r0, [r4, #0] - 10652: bc10 pop {r4} - 10654: 4619 mov r1, r3 - 10656: f000 b803 b.w 10660 <_realloc_r> - 1065a: bf00 nop - 1065c: 1fff8fa8 .word 0x1fff8fa8 - -00010660 <_realloc_r>: - 10660: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 10664: 4617 mov r7, r2 - 10666: 2900 cmp r1, #0 - 10668: f000 8098 beq.w 1079c <_realloc_r+0x13c> - 1066c: 460c mov r4, r1 - 1066e: f107 050b add.w r5, r7, #11 - 10672: 4680 mov r8, r0 - 10674: f7ff ffdc bl 10630 <__malloc_lock> - 10678: 2d16 cmp r5, #22 - 1067a: f854 1c04 ldr.w r1, [r4, #-4] - 1067e: d85b bhi.n 10738 <_realloc_r+0xd8> - 10680: 2510 movs r5, #16 - 10682: 462a mov r2, r5 - 10684: 42af cmp r7, r5 - 10686: d85c bhi.n 10742 <_realloc_r+0xe2> - 10688: f021 0603 bic.w r6, r1, #3 - 1068c: 4296 cmp r6, r2 - 1068e: f1a4 0908 sub.w r9, r4, #8 - 10692: da62 bge.n 1075a <_realloc_r+0xfa> - 10694: 4bbc ldr r3, [pc, #752] ; (10988 <_realloc_r+0x328>) - 10696: f8d3 c008 ldr.w ip, [r3, #8] - 1069a: eb09 0006 add.w r0, r9, r6 - 1069e: 4584 cmp ip, r0 - 106a0: f000 8097 beq.w 107d2 <_realloc_r+0x172> - 106a4: f8d0 c004 ldr.w ip, [r0, #4] - 106a8: f02c 0301 bic.w r3, ip, #1 - 106ac: 4403 add r3, r0 - 106ae: 685b ldr r3, [r3, #4] - 106b0: 07db lsls r3, r3, #31 - 106b2: d468 bmi.n 10786 <_realloc_r+0x126> - 106b4: f02c 0c03 bic.w ip, ip, #3 - 106b8: eb06 030c add.w r3, r6, ip - 106bc: 4293 cmp r3, r2 - 106be: da47 bge.n 10750 <_realloc_r+0xf0> - 106c0: 07cb lsls r3, r1, #31 - 106c2: d410 bmi.n 106e6 <_realloc_r+0x86> - 106c4: f854 3c08 ldr.w r3, [r4, #-8] - 106c8: eba9 0a03 sub.w sl, r9, r3 - 106cc: f8da 3004 ldr.w r3, [sl, #4] - 106d0: f023 0103 bic.w r1, r3, #3 - 106d4: 448c add ip, r1 - 106d6: 44b4 add ip, r6 - 106d8: 4594 cmp ip, r2 - 106da: f280 8111 bge.w 10900 <_realloc_r+0x2a0> - 106de: 1873 adds r3, r6, r1 - 106e0: 4293 cmp r3, r2 - 106e2: f280 80e8 bge.w 108b6 <_realloc_r+0x256> - 106e6: 4639 mov r1, r7 - 106e8: 4640 mov r0, r8 - 106ea: f7ff fcf1 bl 100d0 <_malloc_r> - 106ee: 4607 mov r7, r0 - 106f0: b1e0 cbz r0, 1072c <_realloc_r+0xcc> - 106f2: f854 3c04 ldr.w r3, [r4, #-4] - 106f6: f023 0301 bic.w r3, r3, #1 - 106fa: 444b add r3, r9 - 106fc: f1a0 0208 sub.w r2, r0, #8 - 10700: 4293 cmp r3, r2 - 10702: f000 80d2 beq.w 108aa <_realloc_r+0x24a> - 10706: 1f32 subs r2, r6, #4 - 10708: 2a24 cmp r2, #36 ; 0x24 - 1070a: f200 80f5 bhi.w 108f8 <_realloc_r+0x298> - 1070e: 2a13 cmp r2, #19 - 10710: f200 80ac bhi.w 1086c <_realloc_r+0x20c> - 10714: 4603 mov r3, r0 - 10716: 4622 mov r2, r4 - 10718: 6811 ldr r1, [r2, #0] - 1071a: 6019 str r1, [r3, #0] - 1071c: 6851 ldr r1, [r2, #4] - 1071e: 6059 str r1, [r3, #4] - 10720: 6892 ldr r2, [r2, #8] - 10722: 609a str r2, [r3, #8] - 10724: 4621 mov r1, r4 - 10726: 4640 mov r0, r8 - 10728: f001 fcbc bl 120a4 <_free_r> - 1072c: 4640 mov r0, r8 - 1072e: f7ff ff85 bl 1063c <__malloc_unlock> - 10732: 4638 mov r0, r7 - 10734: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 10738: f025 0507 bic.w r5, r5, #7 - 1073c: 2d00 cmp r5, #0 - 1073e: 462a mov r2, r5 - 10740: daa0 bge.n 10684 <_realloc_r+0x24> - 10742: 230c movs r3, #12 - 10744: f8c8 3000 str.w r3, [r8] - 10748: 2700 movs r7, #0 - 1074a: 4638 mov r0, r7 - 1074c: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 10750: 461e mov r6, r3 - 10752: e9d0 2302 ldrd r2, r3, [r0, #8] - 10756: 60d3 str r3, [r2, #12] - 10758: 609a str r2, [r3, #8] - 1075a: 1b73 subs r3, r6, r5 - 1075c: 2b0f cmp r3, #15 - 1075e: d822 bhi.n 107a6 <_realloc_r+0x146> - 10760: f8d9 3004 ldr.w r3, [r9, #4] - 10764: f003 0301 and.w r3, r3, #1 - 10768: 4333 orrs r3, r6 - 1076a: 444e add r6, r9 - 1076c: f8c9 3004 str.w r3, [r9, #4] - 10770: 6873 ldr r3, [r6, #4] - 10772: f043 0301 orr.w r3, r3, #1 - 10776: 6073 str r3, [r6, #4] - 10778: 4640 mov r0, r8 - 1077a: 4627 mov r7, r4 - 1077c: f7ff ff5e bl 1063c <__malloc_unlock> - 10780: 4638 mov r0, r7 - 10782: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 10786: 07c9 lsls r1, r1, #31 - 10788: d4ad bmi.n 106e6 <_realloc_r+0x86> - 1078a: f854 3c08 ldr.w r3, [r4, #-8] - 1078e: eba9 0a03 sub.w sl, r9, r3 - 10792: f8da 1004 ldr.w r1, [sl, #4] - 10796: f021 0103 bic.w r1, r1, #3 - 1079a: e7a0 b.n 106de <_realloc_r+0x7e> - 1079c: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 107a0: 4611 mov r1, r2 - 107a2: f7ff bc95 b.w 100d0 <_malloc_r> - 107a6: f8d9 2004 ldr.w r2, [r9, #4] - 107aa: eb09 0105 add.w r1, r9, r5 - 107ae: f002 0201 and.w r2, r2, #1 - 107b2: 444e add r6, r9 - 107b4: f043 0301 orr.w r3, r3, #1 - 107b8: 432a orrs r2, r5 - 107ba: f8c9 2004 str.w r2, [r9, #4] - 107be: 604b str r3, [r1, #4] - 107c0: 6873 ldr r3, [r6, #4] - 107c2: f043 0301 orr.w r3, r3, #1 - 107c6: 3108 adds r1, #8 - 107c8: 6073 str r3, [r6, #4] - 107ca: 4640 mov r0, r8 - 107cc: f001 fc6a bl 120a4 <_free_r> - 107d0: e7d2 b.n 10778 <_realloc_r+0x118> - 107d2: f8dc 0004 ldr.w r0, [ip, #4] - 107d6: f020 0b03 bic.w fp, r0, #3 - 107da: eb06 0c0b add.w ip, r6, fp - 107de: f105 0010 add.w r0, r5, #16 - 107e2: 4584 cmp ip, r0 - 107e4: da4d bge.n 10882 <_realloc_r+0x222> - 107e6: 07c9 lsls r1, r1, #31 - 107e8: f53f af7d bmi.w 106e6 <_realloc_r+0x86> - 107ec: f854 1c08 ldr.w r1, [r4, #-8] - 107f0: eba9 0a01 sub.w sl, r9, r1 - 107f4: f8da 1004 ldr.w r1, [sl, #4] - 107f8: f021 0103 bic.w r1, r1, #3 - 107fc: 448b add fp, r1 - 107fe: 44b3 add fp, r6 - 10800: 4558 cmp r0, fp - 10802: f73f af6c bgt.w 106de <_realloc_r+0x7e> - 10806: 4657 mov r7, sl - 10808: f8da 100c ldr.w r1, [sl, #12] - 1080c: f857 0f08 ldr.w r0, [r7, #8]! - 10810: 1f32 subs r2, r6, #4 - 10812: 2a24 cmp r2, #36 ; 0x24 - 10814: 60c1 str r1, [r0, #12] - 10816: 6088 str r0, [r1, #8] - 10818: f200 80db bhi.w 109d2 <_realloc_r+0x372> - 1081c: 2a13 cmp r2, #19 - 1081e: f240 80d6 bls.w 109ce <_realloc_r+0x36e> - 10822: 6821 ldr r1, [r4, #0] - 10824: f8ca 1008 str.w r1, [sl, #8] - 10828: 6861 ldr r1, [r4, #4] - 1082a: f8ca 100c str.w r1, [sl, #12] - 1082e: 2a1b cmp r2, #27 - 10830: f200 80df bhi.w 109f2 <_realloc_r+0x392> - 10834: 3408 adds r4, #8 - 10836: f10a 0210 add.w r2, sl, #16 - 1083a: 6821 ldr r1, [r4, #0] - 1083c: 6011 str r1, [r2, #0] - 1083e: 6861 ldr r1, [r4, #4] - 10840: 6051 str r1, [r2, #4] - 10842: 68a1 ldr r1, [r4, #8] - 10844: 6091 str r1, [r2, #8] - 10846: eb0a 0105 add.w r1, sl, r5 - 1084a: ebab 0205 sub.w r2, fp, r5 - 1084e: f042 0201 orr.w r2, r2, #1 - 10852: 6099 str r1, [r3, #8] - 10854: 604a str r2, [r1, #4] - 10856: f8da 3004 ldr.w r3, [sl, #4] - 1085a: f003 0301 and.w r3, r3, #1 - 1085e: 432b orrs r3, r5 - 10860: 4640 mov r0, r8 - 10862: f8ca 3004 str.w r3, [sl, #4] - 10866: f7ff fee9 bl 1063c <__malloc_unlock> - 1086a: e76e b.n 1074a <_realloc_r+0xea> - 1086c: 6823 ldr r3, [r4, #0] - 1086e: 6003 str r3, [r0, #0] - 10870: 6863 ldr r3, [r4, #4] - 10872: 6043 str r3, [r0, #4] - 10874: 2a1b cmp r2, #27 - 10876: d868 bhi.n 1094a <_realloc_r+0x2ea> - 10878: f104 0208 add.w r2, r4, #8 - 1087c: f100 0308 add.w r3, r0, #8 - 10880: e74a b.n 10718 <_realloc_r+0xb8> - 10882: eb09 0205 add.w r2, r9, r5 - 10886: 609a str r2, [r3, #8] - 10888: ebac 0305 sub.w r3, ip, r5 - 1088c: f043 0301 orr.w r3, r3, #1 - 10890: 6053 str r3, [r2, #4] - 10892: f854 3c04 ldr.w r3, [r4, #-4] - 10896: f003 0301 and.w r3, r3, #1 - 1089a: 432b orrs r3, r5 - 1089c: 4640 mov r0, r8 - 1089e: f844 3c04 str.w r3, [r4, #-4] - 108a2: f7ff fecb bl 1063c <__malloc_unlock> - 108a6: 4627 mov r7, r4 - 108a8: e74f b.n 1074a <_realloc_r+0xea> - 108aa: f850 3c04 ldr.w r3, [r0, #-4] - 108ae: f023 0303 bic.w r3, r3, #3 - 108b2: 441e add r6, r3 - 108b4: e751 b.n 1075a <_realloc_r+0xfa> - 108b6: 4657 mov r7, sl - 108b8: f8da 100c ldr.w r1, [sl, #12] - 108bc: f857 0f08 ldr.w r0, [r7, #8]! - 108c0: 1f32 subs r2, r6, #4 - 108c2: 2a24 cmp r2, #36 ; 0x24 - 108c4: 60c1 str r1, [r0, #12] - 108c6: 6088 str r0, [r1, #8] - 108c8: d84c bhi.n 10964 <_realloc_r+0x304> - 108ca: 2a13 cmp r2, #19 - 108cc: d948 bls.n 10960 <_realloc_r+0x300> - 108ce: 6821 ldr r1, [r4, #0] - 108d0: f8ca 1008 str.w r1, [sl, #8] - 108d4: 6861 ldr r1, [r4, #4] - 108d6: f8ca 100c str.w r1, [sl, #12] - 108da: 2a1b cmp r2, #27 - 108dc: d856 bhi.n 1098c <_realloc_r+0x32c> - 108de: 3408 adds r4, #8 - 108e0: f10a 0210 add.w r2, sl, #16 - 108e4: 461e mov r6, r3 - 108e6: 6823 ldr r3, [r4, #0] - 108e8: 6013 str r3, [r2, #0] - 108ea: 6863 ldr r3, [r4, #4] - 108ec: 6053 str r3, [r2, #4] - 108ee: 68a3 ldr r3, [r4, #8] - 108f0: 6093 str r3, [r2, #8] - 108f2: 46d1 mov r9, sl - 108f4: 463c mov r4, r7 - 108f6: e730 b.n 1075a <_realloc_r+0xfa> - 108f8: 4621 mov r1, r4 - 108fa: f000 fbbf bl 1107c - 108fe: e711 b.n 10724 <_realloc_r+0xc4> - 10900: e9d0 1302 ldrd r1, r3, [r0, #8] - 10904: 4657 mov r7, sl - 10906: 60cb str r3, [r1, #12] - 10908: 6099 str r1, [r3, #8] - 1090a: f857 1f08 ldr.w r1, [r7, #8]! - 1090e: f8da 300c ldr.w r3, [sl, #12] - 10912: 60cb str r3, [r1, #12] - 10914: 1f32 subs r2, r6, #4 - 10916: 2a24 cmp r2, #36 ; 0x24 - 10918: 6099 str r1, [r3, #8] - 1091a: d82d bhi.n 10978 <_realloc_r+0x318> - 1091c: 2a13 cmp r2, #19 - 1091e: d929 bls.n 10974 <_realloc_r+0x314> - 10920: 6823 ldr r3, [r4, #0] - 10922: f8ca 3008 str.w r3, [sl, #8] - 10926: 6863 ldr r3, [r4, #4] - 10928: f8ca 300c str.w r3, [sl, #12] - 1092c: 2a1b cmp r2, #27 - 1092e: d842 bhi.n 109b6 <_realloc_r+0x356> - 10930: 3408 adds r4, #8 - 10932: f10a 0310 add.w r3, sl, #16 - 10936: 6822 ldr r2, [r4, #0] - 10938: 601a str r2, [r3, #0] - 1093a: 6862 ldr r2, [r4, #4] - 1093c: 605a str r2, [r3, #4] - 1093e: 68a2 ldr r2, [r4, #8] - 10940: 609a str r2, [r3, #8] - 10942: 4666 mov r6, ip - 10944: 46d1 mov r9, sl - 10946: 463c mov r4, r7 - 10948: e707 b.n 1075a <_realloc_r+0xfa> - 1094a: 68a3 ldr r3, [r4, #8] - 1094c: 6083 str r3, [r0, #8] - 1094e: 68e3 ldr r3, [r4, #12] - 10950: 60c3 str r3, [r0, #12] - 10952: 2a24 cmp r2, #36 ; 0x24 - 10954: d026 beq.n 109a4 <_realloc_r+0x344> - 10956: f104 0210 add.w r2, r4, #16 - 1095a: f100 0310 add.w r3, r0, #16 - 1095e: e6db b.n 10718 <_realloc_r+0xb8> - 10960: 463a mov r2, r7 - 10962: e7bf b.n 108e4 <_realloc_r+0x284> - 10964: 4621 mov r1, r4 - 10966: 4638 mov r0, r7 - 10968: 461e mov r6, r3 - 1096a: 46d1 mov r9, sl - 1096c: f000 fb86 bl 1107c - 10970: 463c mov r4, r7 - 10972: e6f2 b.n 1075a <_realloc_r+0xfa> - 10974: 463b mov r3, r7 - 10976: e7de b.n 10936 <_realloc_r+0x2d6> - 10978: 4621 mov r1, r4 - 1097a: 4638 mov r0, r7 - 1097c: 4666 mov r6, ip - 1097e: 46d1 mov r9, sl - 10980: f000 fb7c bl 1107c - 10984: 463c mov r4, r7 - 10986: e6e8 b.n 1075a <_realloc_r+0xfa> - 10988: 1fff8900 .word 0x1fff8900 - 1098c: 68a1 ldr r1, [r4, #8] - 1098e: f8ca 1010 str.w r1, [sl, #16] - 10992: 68e1 ldr r1, [r4, #12] - 10994: f8ca 1014 str.w r1, [sl, #20] - 10998: 2a24 cmp r2, #36 ; 0x24 - 1099a: d020 beq.n 109de <_realloc_r+0x37e> - 1099c: 3410 adds r4, #16 - 1099e: f10a 0218 add.w r2, sl, #24 - 109a2: e79f b.n 108e4 <_realloc_r+0x284> - 109a4: 6923 ldr r3, [r4, #16] - 109a6: 6103 str r3, [r0, #16] - 109a8: 6961 ldr r1, [r4, #20] - 109aa: 6141 str r1, [r0, #20] - 109ac: f104 0218 add.w r2, r4, #24 - 109b0: f100 0318 add.w r3, r0, #24 - 109b4: e6b0 b.n 10718 <_realloc_r+0xb8> - 109b6: 68a3 ldr r3, [r4, #8] - 109b8: f8ca 3010 str.w r3, [sl, #16] - 109bc: 68e3 ldr r3, [r4, #12] - 109be: f8ca 3014 str.w r3, [sl, #20] - 109c2: 2a24 cmp r2, #36 ; 0x24 - 109c4: d021 beq.n 10a0a <_realloc_r+0x3aa> - 109c6: 3410 adds r4, #16 - 109c8: f10a 0318 add.w r3, sl, #24 - 109cc: e7b3 b.n 10936 <_realloc_r+0x2d6> - 109ce: 463a mov r2, r7 - 109d0: e733 b.n 1083a <_realloc_r+0x1da> - 109d2: 4621 mov r1, r4 - 109d4: 4638 mov r0, r7 - 109d6: f000 fb51 bl 1107c - 109da: 4b16 ldr r3, [pc, #88] ; (10a34 <_realloc_r+0x3d4>) - 109dc: e733 b.n 10846 <_realloc_r+0x1e6> - 109de: 6922 ldr r2, [r4, #16] - 109e0: f8ca 2018 str.w r2, [sl, #24] - 109e4: 6962 ldr r2, [r4, #20] - 109e6: f8ca 201c str.w r2, [sl, #28] - 109ea: 3418 adds r4, #24 - 109ec: f10a 0220 add.w r2, sl, #32 - 109f0: e778 b.n 108e4 <_realloc_r+0x284> - 109f2: 68a1 ldr r1, [r4, #8] - 109f4: f8ca 1010 str.w r1, [sl, #16] - 109f8: 68e1 ldr r1, [r4, #12] - 109fa: f8ca 1014 str.w r1, [sl, #20] - 109fe: 2a24 cmp r2, #36 ; 0x24 - 10a00: d00d beq.n 10a1e <_realloc_r+0x3be> - 10a02: 3410 adds r4, #16 - 10a04: f10a 0218 add.w r2, sl, #24 - 10a08: e717 b.n 1083a <_realloc_r+0x1da> - 10a0a: 6923 ldr r3, [r4, #16] - 10a0c: f8ca 3018 str.w r3, [sl, #24] - 10a10: 6963 ldr r3, [r4, #20] - 10a12: f8ca 301c str.w r3, [sl, #28] - 10a16: 3418 adds r4, #24 - 10a18: f10a 0320 add.w r3, sl, #32 - 10a1c: e78b b.n 10936 <_realloc_r+0x2d6> - 10a1e: 6922 ldr r2, [r4, #16] - 10a20: f8ca 2018 str.w r2, [sl, #24] - 10a24: 6962 ldr r2, [r4, #20] - 10a26: f8ca 201c str.w r2, [sl, #28] - 10a2a: 3418 adds r4, #24 - 10a2c: f10a 0220 add.w r2, sl, #32 - 10a30: e703 b.n 1083a <_realloc_r+0x1da> - 10a32: bf00 nop - 10a34: 1fff8900 .word 0x1fff8900 - -00010a38 : - 10a38: b40c push {r2, r3} - 10a3a: b510 push {r4, lr} - 10a3c: 4b1f ldr r3, [pc, #124] ; (10abc ) - 10a3e: 2900 cmp r1, #0 - 10a40: 681c ldr r4, [r3, #0] - 10a42: b09c sub sp, #112 ; 0x70 - 10a44: db35 blt.n 10ab2 - 10a46: f44f 7302 mov.w r3, #520 ; 0x208 - 10a4a: f8ad 3014 strh.w r3, [sp, #20] - 10a4e: 9002 str r0, [sp, #8] - 10a50: 9006 str r0, [sp, #24] - 10a52: ab1f add r3, sp, #124 ; 0x7c - 10a54: d018 beq.n 10a88 - 10a56: 3901 subs r1, #1 - 10a58: f64f 72ff movw r2, #65535 ; 0xffff - 10a5c: 9104 str r1, [sp, #16] - 10a5e: 9107 str r1, [sp, #28] - 10a60: f8ad 2016 strh.w r2, [sp, #22] - 10a64: a902 add r1, sp, #8 - 10a66: 9a1e ldr r2, [sp, #120] ; 0x78 - 10a68: 9301 str r3, [sp, #4] - 10a6a: 4620 mov r0, r4 - 10a6c: f001 fc36 bl 122dc <_svfprintf_r> - 10a70: 1c42 adds r2, r0, #1 - 10a72: da01 bge.n 10a78 - 10a74: 238b movs r3, #139 ; 0x8b - 10a76: 6023 str r3, [r4, #0] - 10a78: 9b02 ldr r3, [sp, #8] - 10a7a: 2200 movs r2, #0 - 10a7c: 701a strb r2, [r3, #0] - 10a7e: b01c add sp, #112 ; 0x70 - 10a80: e8bd 4010 ldmia.w sp!, {r4, lr} - 10a84: b002 add sp, #8 - 10a86: 4770 bx lr - 10a88: f64f 72ff movw r2, #65535 ; 0xffff - 10a8c: 9104 str r1, [sp, #16] - 10a8e: 9107 str r1, [sp, #28] - 10a90: f8ad 2016 strh.w r2, [sp, #22] - 10a94: a902 add r1, sp, #8 - 10a96: 9a1e ldr r2, [sp, #120] ; 0x78 - 10a98: 9301 str r3, [sp, #4] - 10a9a: 4620 mov r0, r4 - 10a9c: f001 fc1e bl 122dc <_svfprintf_r> - 10aa0: 1c43 adds r3, r0, #1 - 10aa2: da01 bge.n 10aa8 - 10aa4: 238b movs r3, #139 ; 0x8b - 10aa6: 6023 str r3, [r4, #0] - 10aa8: b01c add sp, #112 ; 0x70 - 10aaa: e8bd 4010 ldmia.w sp!, {r4, lr} - 10aae: b002 add sp, #8 - 10ab0: 4770 bx lr - 10ab2: 238b movs r3, #139 ; 0x8b - 10ab4: 6023 str r3, [r4, #0] - 10ab6: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 10aba: e7f5 b.n 10aa8 - 10abc: 1fff8fa8 .word 0x1fff8fa8 - -00010ac0 <_strtol_l.constprop.0>: - 10ac0: 2b01 cmp r3, #1 - 10ac2: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 10ac6: d041 beq.n 10b4c <_strtol_l.constprop.0+0x8c> - 10ac8: 2b24 cmp r3, #36 ; 0x24 - 10aca: 461f mov r7, r3 - 10acc: d83e bhi.n 10b4c <_strtol_l.constprop.0+0x8c> - 10ace: 4680 mov r8, r0 - 10ad0: 484a ldr r0, [pc, #296] ; (10bfc <_strtol_l.constprop.0+0x13c>) - 10ad2: 468e mov lr, r1 - 10ad4: 4675 mov r5, lr - 10ad6: f81e bb01 ldrb.w fp, [lr], #1 - 10ada: f810 400b ldrb.w r4, [r0, fp] - 10ade: f014 0408 ands.w r4, r4, #8 - 10ae2: d1f7 bne.n 10ad4 <_strtol_l.constprop.0+0x14> - 10ae4: f1bb 0f2d cmp.w fp, #45 ; 0x2d - 10ae8: d071 beq.n 10bce <_strtol_l.constprop.0+0x10e> - 10aea: f1bb 0f2b cmp.w fp, #43 ; 0x2b - 10aee: bf08 it eq - 10af0: f89e b000 ldrbeq.w fp, [lr] - 10af4: f06f 4900 mvn.w r9, #2147483648 ; 0x80000000 - 10af8: bf08 it eq - 10afa: f105 0e02 addeq.w lr, r5, #2 - 10afe: 2b00 cmp r3, #0 - 10b00: d042 beq.n 10b88 <_strtol_l.constprop.0+0xc8> - 10b02: 2b10 cmp r3, #16 - 10b04: d055 beq.n 10bb2 <_strtol_l.constprop.0+0xf2> - 10b06: fbb9 f6f7 udiv r6, r9, r7 - 10b0a: 2500 movs r5, #0 - 10b0c: 4628 mov r0, r5 - 10b0e: fb07 9a16 mls sl, r7, r6, r9 - 10b12: e005 b.n 10b20 <_strtol_l.constprop.0+0x60> - 10b14: d033 beq.n 10b7e <_strtol_l.constprop.0+0xbe> - 10b16: fb07 c000 mla r0, r7, r0, ip - 10b1a: 2501 movs r5, #1 - 10b1c: f81e bb01 ldrb.w fp, [lr], #1 - 10b20: f1ab 0c30 sub.w ip, fp, #48 ; 0x30 - 10b24: f1bc 0f09 cmp.w ip, #9 - 10b28: d906 bls.n 10b38 <_strtol_l.constprop.0+0x78> - 10b2a: f1ab 0c41 sub.w ip, fp, #65 ; 0x41 - 10b2e: f1bc 0f19 cmp.w ip, #25 - 10b32: d812 bhi.n 10b5a <_strtol_l.constprop.0+0x9a> - 10b34: f1ab 0c37 sub.w ip, fp, #55 ; 0x37 - 10b38: 4563 cmp r3, ip - 10b3a: dd17 ble.n 10b6c <_strtol_l.constprop.0+0xac> - 10b3c: f1b5 3fff cmp.w r5, #4294967295 ; 0xffffffff - 10b40: d0ec beq.n 10b1c <_strtol_l.constprop.0+0x5c> - 10b42: 4286 cmp r6, r0 - 10b44: d2e6 bcs.n 10b14 <_strtol_l.constprop.0+0x54> - 10b46: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff - 10b4a: e7e7 b.n 10b1c <_strtol_l.constprop.0+0x5c> - 10b4c: f000 ff24 bl 11998 <__errno> - 10b50: 2316 movs r3, #22 - 10b52: 6003 str r3, [r0, #0] - 10b54: 2000 movs r0, #0 - 10b56: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 10b5a: f1ab 0c61 sub.w ip, fp, #97 ; 0x61 - 10b5e: f1bc 0f19 cmp.w ip, #25 - 10b62: d803 bhi.n 10b6c <_strtol_l.constprop.0+0xac> - 10b64: f1ab 0c57 sub.w ip, fp, #87 ; 0x57 - 10b68: 4563 cmp r3, ip - 10b6a: dce7 bgt.n 10b3c <_strtol_l.constprop.0+0x7c> - 10b6c: 1c6b adds r3, r5, #1 - 10b6e: d025 beq.n 10bbc <_strtol_l.constprop.0+0xfc> - 10b70: b984 cbnz r4, 10b94 <_strtol_l.constprop.0+0xd4> - 10b72: 2a00 cmp r2, #0 - 10b74: d0ef beq.n 10b56 <_strtol_l.constprop.0+0x96> - 10b76: bb95 cbnz r5, 10bde <_strtol_l.constprop.0+0x11e> - 10b78: 6011 str r1, [r2, #0] - 10b7a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 10b7e: 45e2 cmp sl, ip - 10b80: dac9 bge.n 10b16 <_strtol_l.constprop.0+0x56> - 10b82: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff - 10b86: e7c9 b.n 10b1c <_strtol_l.constprop.0+0x5c> - 10b88: f1bb 0f30 cmp.w fp, #48 ; 0x30 - 10b8c: d004 beq.n 10b98 <_strtol_l.constprop.0+0xd8> - 10b8e: 270a movs r7, #10 - 10b90: 463b mov r3, r7 - 10b92: e7b8 b.n 10b06 <_strtol_l.constprop.0+0x46> - 10b94: 4240 negs r0, r0 - 10b96: e7ec b.n 10b72 <_strtol_l.constprop.0+0xb2> - 10b98: f89e 3000 ldrb.w r3, [lr] - 10b9c: f003 03df and.w r3, r3, #223 ; 0xdf - 10ba0: 2b58 cmp r3, #88 ; 0x58 - 10ba2: d120 bne.n 10be6 <_strtol_l.constprop.0+0x126> - 10ba4: 2710 movs r7, #16 - 10ba6: f89e b001 ldrb.w fp, [lr, #1] - 10baa: 463b mov r3, r7 - 10bac: f10e 0e02 add.w lr, lr, #2 - 10bb0: e7a9 b.n 10b06 <_strtol_l.constprop.0+0x46> - 10bb2: f1bb 0f30 cmp.w fp, #48 ; 0x30 - 10bb6: d019 beq.n 10bec <_strtol_l.constprop.0+0x12c> - 10bb8: 461f mov r7, r3 - 10bba: e7a4 b.n 10b06 <_strtol_l.constprop.0+0x46> - 10bbc: 2322 movs r3, #34 ; 0x22 - 10bbe: f8c8 3000 str.w r3, [r8] - 10bc2: b172 cbz r2, 10be2 <_strtol_l.constprop.0+0x122> - 10bc4: f10e 31ff add.w r1, lr, #4294967295 ; 0xffffffff - 10bc8: 4648 mov r0, r9 - 10bca: 6011 str r1, [r2, #0] - 10bcc: e7d5 b.n 10b7a <_strtol_l.constprop.0+0xba> - 10bce: f89e b000 ldrb.w fp, [lr] - 10bd2: f04f 4900 mov.w r9, #2147483648 ; 0x80000000 - 10bd6: f105 0e02 add.w lr, r5, #2 - 10bda: 2401 movs r4, #1 - 10bdc: e78f b.n 10afe <_strtol_l.constprop.0+0x3e> - 10bde: 4681 mov r9, r0 - 10be0: e7f0 b.n 10bc4 <_strtol_l.constprop.0+0x104> - 10be2: 4648 mov r0, r9 - 10be4: e7b7 b.n 10b56 <_strtol_l.constprop.0+0x96> - 10be6: 2708 movs r7, #8 - 10be8: 463b mov r3, r7 - 10bea: e78c b.n 10b06 <_strtol_l.constprop.0+0x46> - 10bec: f89e 0000 ldrb.w r0, [lr] - 10bf0: f000 00df and.w r0, r0, #223 ; 0xdf - 10bf4: 2858 cmp r0, #88 ; 0x58 - 10bf6: d0d5 beq.n 10ba4 <_strtol_l.constprop.0+0xe4> - 10bf8: 461f mov r7, r3 - 10bfa: e784 b.n 10b06 <_strtol_l.constprop.0+0x46> - 10bfc: 00018811 .word 0x00018811 - -00010c00 : - 10c00: b410 push {r4} - 10c02: 4c04 ldr r4, [pc, #16] ; (10c14 ) - 10c04: 4684 mov ip, r0 - 10c06: 4613 mov r3, r2 - 10c08: 6820 ldr r0, [r4, #0] - 10c0a: bc10 pop {r4} - 10c0c: 460a mov r2, r1 - 10c0e: 4661 mov r1, ip - 10c10: f7ff bf56 b.w 10ac0 <_strtol_l.constprop.0> - 10c14: 1fff8fa8 .word 0x1fff8fa8 - -00010c18 <_strtoul_l.constprop.0>: - 10c18: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 10c1c: 4607 mov r7, r0 - 10c1e: 484c ldr r0, [pc, #304] ; (10d50 <_strtoul_l.constprop.0+0x138>) - 10c20: 460e mov r6, r1 - 10c22: 4635 mov r5, r6 - 10c24: f816 eb01 ldrb.w lr, [r6], #1 - 10c28: f810 c00e ldrb.w ip, [r0, lr] - 10c2c: f01c 0c08 ands.w ip, ip, #8 - 10c30: d1f7 bne.n 10c22 <_strtoul_l.constprop.0+0xa> - 10c32: f1be 0f2d cmp.w lr, #45 ; 0x2d - 10c36: d05a beq.n 10cee <_strtoul_l.constprop.0+0xd6> - 10c38: f1be 0f2b cmp.w lr, #43 ; 0x2b - 10c3c: bf03 ittte eq - 10c3e: f896 e000 ldrbeq.w lr, [r6] - 10c42: 4664 moveq r4, ip - 10c44: 1cae addeq r6, r5, #2 - 10c46: 4664 movne r4, ip - 10c48: b15b cbz r3, 10c62 <_strtoul_l.constprop.0+0x4a> - 10c4a: 2b10 cmp r3, #16 - 10c4c: d054 beq.n 10cf8 <_strtoul_l.constprop.0+0xe0> - 10c4e: f04f 38ff mov.w r8, #4294967295 ; 0xffffffff - 10c52: fbb8 f8f3 udiv r8, r8, r3 - 10c56: fb03 fa08 mul.w sl, r3, r8 - 10c5a: ea6f 0a0a mvn.w sl, sl - 10c5e: 4699 mov r9, r3 - 10c60: e008 b.n 10c74 <_strtoul_l.constprop.0+0x5c> - 10c62: f1be 0f30 cmp.w lr, #48 ; 0x30 - 10c66: d05a beq.n 10d1e <_strtoul_l.constprop.0+0x106> - 10c68: 230a movs r3, #10 - 10c6a: f8df 80e8 ldr.w r8, [pc, #232] ; 10d54 <_strtoul_l.constprop.0+0x13c> - 10c6e: f04f 0a05 mov.w sl, #5 - 10c72: 4699 mov r9, r3 - 10c74: 2500 movs r5, #0 - 10c76: 4628 mov r0, r5 - 10c78: e005 b.n 10c86 <_strtoul_l.constprop.0+0x6e> - 10c7a: d02c beq.n 10cd6 <_strtoul_l.constprop.0+0xbe> - 10c7c: fb09 c000 mla r0, r9, r0, ip - 10c80: 2501 movs r5, #1 - 10c82: f816 eb01 ldrb.w lr, [r6], #1 - 10c86: f1ae 0c30 sub.w ip, lr, #48 ; 0x30 - 10c8a: f1bc 0f09 cmp.w ip, #9 - 10c8e: d906 bls.n 10c9e <_strtoul_l.constprop.0+0x86> - 10c90: f1ae 0c41 sub.w ip, lr, #65 ; 0x41 - 10c94: f1bc 0f19 cmp.w ip, #25 - 10c98: d80b bhi.n 10cb2 <_strtoul_l.constprop.0+0x9a> - 10c9a: f1ae 0c37 sub.w ip, lr, #55 ; 0x37 - 10c9e: 4563 cmp r3, ip - 10ca0: dd10 ble.n 10cc4 <_strtoul_l.constprop.0+0xac> - 10ca2: f1b5 3fff cmp.w r5, #4294967295 ; 0xffffffff - 10ca6: d0ec beq.n 10c82 <_strtoul_l.constprop.0+0x6a> - 10ca8: 4540 cmp r0, r8 - 10caa: d9e6 bls.n 10c7a <_strtoul_l.constprop.0+0x62> - 10cac: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff - 10cb0: e7e7 b.n 10c82 <_strtoul_l.constprop.0+0x6a> - 10cb2: f1ae 0c61 sub.w ip, lr, #97 ; 0x61 - 10cb6: f1bc 0f19 cmp.w ip, #25 - 10cba: d803 bhi.n 10cc4 <_strtoul_l.constprop.0+0xac> - 10cbc: f1ae 0c57 sub.w ip, lr, #87 ; 0x57 - 10cc0: 4563 cmp r3, ip - 10cc2: dcee bgt.n 10ca2 <_strtoul_l.constprop.0+0x8a> - 10cc4: 1c6b adds r3, r5, #1 - 10cc6: d00b beq.n 10ce0 <_strtoul_l.constprop.0+0xc8> - 10cc8: b104 cbz r4, 10ccc <_strtoul_l.constprop.0+0xb4> - 10cca: 4240 negs r0, r0 - 10ccc: b10a cbz r2, 10cd2 <_strtoul_l.constprop.0+0xba> - 10cce: b965 cbnz r5, 10cea <_strtoul_l.constprop.0+0xd2> - 10cd0: 6011 str r1, [r2, #0] - 10cd2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 10cd6: 45d4 cmp ip, sl - 10cd8: ddd0 ble.n 10c7c <_strtoul_l.constprop.0+0x64> - 10cda: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff - 10cde: e7d0 b.n 10c82 <_strtoul_l.constprop.0+0x6a> - 10ce0: 2322 movs r3, #34 ; 0x22 - 10ce2: 603b str r3, [r7, #0] - 10ce4: 4628 mov r0, r5 - 10ce6: 2a00 cmp r2, #0 - 10ce8: d0f3 beq.n 10cd2 <_strtoul_l.constprop.0+0xba> - 10cea: 1e71 subs r1, r6, #1 - 10cec: e7f0 b.n 10cd0 <_strtoul_l.constprop.0+0xb8> - 10cee: f896 e000 ldrb.w lr, [r6] - 10cf2: 2401 movs r4, #1 - 10cf4: 1cae adds r6, r5, #2 - 10cf6: e7a7 b.n 10c48 <_strtoul_l.constprop.0+0x30> - 10cf8: f1be 0f30 cmp.w lr, #48 ; 0x30 - 10cfc: d121 bne.n 10d42 <_strtoul_l.constprop.0+0x12a> - 10cfe: 7830 ldrb r0, [r6, #0] - 10d00: f000 00df and.w r0, r0, #223 ; 0xdf - 10d04: 2858 cmp r0, #88 ; 0x58 - 10d06: d116 bne.n 10d36 <_strtoul_l.constprop.0+0x11e> - 10d08: f04f 0910 mov.w r9, #16 - 10d0c: f896 e001 ldrb.w lr, [r6, #1] - 10d10: f04f 0a0f mov.w sl, #15 - 10d14: 3602 adds r6, #2 - 10d16: f06f 4870 mvn.w r8, #4026531840 ; 0xf0000000 - 10d1a: 464b mov r3, r9 - 10d1c: e7aa b.n 10c74 <_strtoul_l.constprop.0+0x5c> - 10d1e: 7833 ldrb r3, [r6, #0] - 10d20: f003 03df and.w r3, r3, #223 ; 0xdf - 10d24: 2b58 cmp r3, #88 ; 0x58 - 10d26: d0ef beq.n 10d08 <_strtoul_l.constprop.0+0xf0> - 10d28: 2308 movs r3, #8 - 10d2a: f04f 0a07 mov.w sl, #7 - 10d2e: f06f 4860 mvn.w r8, #3758096384 ; 0xe0000000 - 10d32: 4699 mov r9, r3 - 10d34: e79e b.n 10c74 <_strtoul_l.constprop.0+0x5c> - 10d36: 4699 mov r9, r3 - 10d38: f06f 4870 mvn.w r8, #4026531840 ; 0xf0000000 - 10d3c: f04f 0a0f mov.w sl, #15 - 10d40: e798 b.n 10c74 <_strtoul_l.constprop.0+0x5c> - 10d42: f04f 0a0f mov.w sl, #15 - 10d46: f06f 4870 mvn.w r8, #4026531840 ; 0xf0000000 - 10d4a: 4699 mov r9, r3 - 10d4c: e792 b.n 10c74 <_strtoul_l.constprop.0+0x5c> - 10d4e: bf00 nop - 10d50: 00018811 .word 0x00018811 - 10d54: 19999999 .word 0x19999999 - -00010d58 : - 10d58: b410 push {r4} - 10d5a: 4c04 ldr r4, [pc, #16] ; (10d6c ) - 10d5c: 4684 mov ip, r0 - 10d5e: 4613 mov r3, r2 - 10d60: 6820 ldr r0, [r4, #0] - 10d62: bc10 pop {r4} - 10d64: 460a mov r2, r1 - 10d66: 4661 mov r1, ip - 10d68: f7ff bf56 b.w 10c18 <_strtoul_l.constprop.0> - 10d6c: 1fff8fa8 .word 0x1fff8fa8 - -00010d70 <__utoa>: - 10d70: b5f0 push {r4, r5, r6, r7, lr} - 10d72: 4f25 ldr r7, [pc, #148] ; (10e08 <__utoa+0x98>) - 10d74: f1a2 0e02 sub.w lr, r2, #2 - 10d78: 4616 mov r6, r2 - 10d7a: 4605 mov r5, r0 - 10d7c: 460c mov r4, r1 - 10d7e: cf0f ldmia r7!, {r0, r1, r2, r3} - 10d80: b08b sub sp, #44 ; 0x2c - 10d82: 46ec mov ip, sp - 10d84: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 10d88: cf0f ldmia r7!, {r0, r1, r2, r3} - 10d8a: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} - 10d8e: e897 0003 ldmia.w r7, {r0, r1} - 10d92: f84c 0b04 str.w r0, [ip], #4 - 10d96: f1be 0f22 cmp.w lr, #34 ; 0x22 - 10d9a: f88c 1000 strb.w r1, [ip] - 10d9e: d82e bhi.n 10dfe <__utoa+0x8e> - 10da0: f104 3eff add.w lr, r4, #4294967295 ; 0xffffffff - 10da4: 4670 mov r0, lr - 10da6: f04f 0c00 mov.w ip, #0 - 10daa: fbb5 f2f6 udiv r2, r5, r6 - 10dae: fb06 5312 mls r3, r6, r2, r5 - 10db2: 3328 adds r3, #40 ; 0x28 - 10db4: 446b add r3, sp - 10db6: 4661 mov r1, ip - 10db8: f813 cc28 ldrb.w ip, [r3, #-40] - 10dbc: f800 cf01 strb.w ip, [r0, #1]! - 10dc0: 462b mov r3, r5 - 10dc2: 429e cmp r6, r3 - 10dc4: f101 0c01 add.w ip, r1, #1 - 10dc8: 4615 mov r5, r2 - 10dca: d9ee bls.n 10daa <__utoa+0x3a> - 10dcc: 2300 movs r3, #0 - 10dce: f804 300c strb.w r3, [r4, ip] - 10dd2: b189 cbz r1, 10df8 <__utoa+0x88> - 10dd4: 44a4 add ip, r4 - 10dd6: 4672 mov r2, lr - 10dd8: f81e 0f01 ldrb.w r0, [lr, #1]! - 10ddc: f81c 5d01 ldrb.w r5, [ip, #-1]! - 10de0: f88e 5000 strb.w r5, [lr] - 10de4: eba4 030e sub.w r3, r4, lr - 10de8: 3202 adds r2, #2 - 10dea: 3b01 subs r3, #1 - 10dec: 1b12 subs r2, r2, r4 - 10dee: 440b add r3, r1 - 10df0: 429a cmp r2, r3 - 10df2: f88c 0000 strb.w r0, [ip] - 10df6: dbee blt.n 10dd6 <__utoa+0x66> - 10df8: 4620 mov r0, r4 - 10dfa: b00b add sp, #44 ; 0x2c - 10dfc: bdf0 pop {r4, r5, r6, r7, pc} - 10dfe: 2300 movs r3, #0 - 10e00: 4618 mov r0, r3 - 10e02: 7023 strb r3, [r4, #0] - 10e04: b00b add sp, #44 ; 0x2c - 10e06: bdf0 pop {r4, r5, r6, r7, pc} - 10e08: 000187a4 .word 0x000187a4 - -00010e0c : - 10e0c: f7ff bfb0 b.w 10d70 <__utoa> - -00010e10 : - 10e10: b40e push {r1, r2, r3} - 10e12: b510 push {r4, lr} - 10e14: b09d sub sp, #116 ; 0x74 - 10e16: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000 - 10e1a: ab1f add r3, sp, #124 ; 0x7c - 10e1c: e9cd 0106 strd r0, r1, [sp, #24] - 10e20: 9104 str r1, [sp, #16] - 10e22: 4909 ldr r1, [pc, #36] ; (10e48 ) - 10e24: f853 2b04 ldr.w r2, [r3], #4 - 10e28: 9002 str r0, [sp, #8] - 10e2a: 4c08 ldr r4, [pc, #32] ; (10e4c ) - 10e2c: 6808 ldr r0, [r1, #0] - 10e2e: 9301 str r3, [sp, #4] - 10e30: a902 add r1, sp, #8 - 10e32: 9405 str r4, [sp, #20] - 10e34: f001 fa52 bl 122dc <_svfprintf_r> - 10e38: 9b02 ldr r3, [sp, #8] - 10e3a: 2200 movs r2, #0 - 10e3c: 701a strb r2, [r3, #0] - 10e3e: b01d add sp, #116 ; 0x74 - 10e40: e8bd 4010 ldmia.w sp!, {r4, lr} - 10e44: b003 add sp, #12 - 10e46: 4770 bx lr - 10e48: 1fff8fa8 .word 0x1fff8fa8 - 10e4c: ffff0208 .word 0xffff0208 - -00010e50 : - 10e50: 4a02 ldr r2, [pc, #8] ; (10e5c ) - 10e52: 4903 ldr r1, [pc, #12] ; (10e60 ) - 10e54: 4803 ldr r0, [pc, #12] ; (10e64 ) - 10e56: f000 b8bb b.w 10fd0 <_fwalk_sglue> - 10e5a: bf00 nop - 10e5c: 1fff8d10 .word 0x1fff8d10 - 10e60: 000145dd .word 0x000145dd - 10e64: 1fff8e88 .word 0x1fff8e88 - -00010e68 : - 10e68: 4b0c ldr r3, [pc, #48] ; (10e9c ) - 10e6a: 6841 ldr r1, [r0, #4] - 10e6c: 4299 cmp r1, r3 - 10e6e: b510 push {r4, lr} - 10e70: 4604 mov r4, r0 - 10e72: d001 beq.n 10e78 - 10e74: f003 fbb2 bl 145dc <_fclose_r> - 10e78: 68a1 ldr r1, [r4, #8] - 10e7a: 4b09 ldr r3, [pc, #36] ; (10ea0 ) - 10e7c: 4299 cmp r1, r3 - 10e7e: d002 beq.n 10e86 - 10e80: 4620 mov r0, r4 - 10e82: f003 fbab bl 145dc <_fclose_r> - 10e86: 68e1 ldr r1, [r4, #12] - 10e88: 4b06 ldr r3, [pc, #24] ; (10ea4 ) - 10e8a: 4299 cmp r1, r3 - 10e8c: d004 beq.n 10e98 - 10e8e: 4620 mov r0, r4 - 10e90: e8bd 4010 ldmia.w sp!, {r4, lr} - 10e94: f003 bba2 b.w 145dc <_fclose_r> - 10e98: bd10 pop {r4, pc} - 10e9a: bf00 nop - 10e9c: 1fff9a9c .word 0x1fff9a9c - 10ea0: 1fff9b04 .word 0x1fff9b04 - 10ea4: 1fff9b6c .word 0x1fff9b6c - -00010ea8 : - 10ea8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 10eac: 4c2a ldr r4, [pc, #168] ; (10f58 ) - 10eae: 4b2b ldr r3, [pc, #172] ; (10f5c ) - 10eb0: 482b ldr r0, [pc, #172] ; (10f60 ) - 10eb2: f8df 90b0 ldr.w r9, [pc, #176] ; 10f64 - 10eb6: f8df 80b0 ldr.w r8, [pc, #176] ; 10f68 - 10eba: 4f2c ldr r7, [pc, #176] ; (10f6c ) - 10ebc: 6018 str r0, [r3, #0] - 10ebe: 2500 movs r5, #0 - 10ec0: 2304 movs r3, #4 - 10ec2: 2208 movs r2, #8 - 10ec4: 4629 mov r1, r5 - 10ec6: f104 005c add.w r0, r4, #92 ; 0x5c - 10eca: 4e29 ldr r6, [pc, #164] ; (10f70 ) - 10ecc: 6665 str r5, [r4, #100] ; 0x64 - 10ece: e9c4 5302 strd r5, r3, [r4, #8] - 10ed2: e9c4 5500 strd r5, r5, [r4] - 10ed6: e9c4 5504 strd r5, r5, [r4, #16] - 10eda: 61a5 str r5, [r4, #24] - 10edc: f000 f94a bl 11174 - 10ee0: 4b24 ldr r3, [pc, #144] ; (10f74 ) - 10ee2: 6763 str r3, [r4, #116] ; 0x74 - 10ee4: 2208 movs r2, #8 - 10ee6: 4629 mov r1, r5 - 10ee8: f104 00c4 add.w r0, r4, #196 ; 0xc4 - 10eec: e9c4 4907 strd r4, r9, [r4, #28] - 10ef0: e9c4 8709 strd r8, r7, [r4, #36] ; 0x24 - 10ef4: e9c4 551a strd r5, r5, [r4, #104] ; 0x68 - 10ef8: e9c4 551e strd r5, r5, [r4, #120] ; 0x78 - 10efc: f8c4 50cc str.w r5, [r4, #204] ; 0xcc - 10f00: 6725 str r5, [r4, #112] ; 0x70 - 10f02: f8c4 5080 str.w r5, [r4, #128] ; 0x80 - 10f06: 62e6 str r6, [r4, #44] ; 0x2c - 10f08: f000 f934 bl 11174 - 10f0c: 4b1a ldr r3, [pc, #104] ; (10f78 ) - 10f0e: f8c4 30dc str.w r3, [r4, #220] ; 0xdc - 10f12: 4629 mov r1, r5 - 10f14: f104 0368 add.w r3, r4, #104 ; 0x68 - 10f18: 2208 movs r2, #8 - 10f1a: f504 7096 add.w r0, r4, #300 ; 0x12c - 10f1e: f8c4 3084 str.w r3, [r4, #132] ; 0x84 - 10f22: e9c4 9822 strd r9, r8, [r4, #136] ; 0x88 - 10f26: e9c4 7624 strd r7, r6, [r4, #144] ; 0x90 - 10f2a: e9c4 5534 strd r5, r5, [r4, #208] ; 0xd0 - 10f2e: e9c4 5538 strd r5, r5, [r4, #224] ; 0xe0 - 10f32: f8c4 5134 str.w r5, [r4, #308] ; 0x134 - 10f36: f8c4 50d8 str.w r5, [r4, #216] ; 0xd8 - 10f3a: f8c4 50e8 str.w r5, [r4, #232] ; 0xe8 - 10f3e: f000 f919 bl 11174 - 10f42: f104 03d0 add.w r3, r4, #208 ; 0xd0 - 10f46: e9c4 983c strd r9, r8, [r4, #240] ; 0xf0 - 10f4a: e9c4 763e strd r7, r6, [r4, #248] ; 0xf8 - 10f4e: f8c4 30ec str.w r3, [r4, #236] ; 0xec - 10f52: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 10f56: bf00 nop - 10f58: 1fff9a9c .word 0x1fff9a9c - 10f5c: 1fff9bd4 .word 0x1fff9bd4 - 10f60: 00010e51 .word 0x00010e51 - 10f64: 00014819 .word 0x00014819 - 10f68: 0001483d .word 0x0001483d - 10f6c: 0001487d .word 0x0001487d - 10f70: 0001489d .word 0x0001489d - 10f74: 00010009 .word 0x00010009 - 10f78: 00020012 .word 0x00020012 - -00010f7c <__sinit>: - 10f7c: b510 push {r4, lr} - 10f7e: 4604 mov r4, r0 - 10f80: 480a ldr r0, [pc, #40] ; (10fac <__sinit+0x30>) - 10f82: f000 ff11 bl 11da8 <__retarget_lock_acquire_recursive> - 10f86: 6b63 ldr r3, [r4, #52] ; 0x34 - 10f88: b923 cbnz r3, 10f94 <__sinit+0x18> - 10f8a: 4b09 ldr r3, [pc, #36] ; (10fb0 <__sinit+0x34>) - 10f8c: 4a09 ldr r2, [pc, #36] ; (10fb4 <__sinit+0x38>) - 10f8e: 681b ldr r3, [r3, #0] - 10f90: 6362 str r2, [r4, #52] ; 0x34 - 10f92: b123 cbz r3, 10f9e <__sinit+0x22> - 10f94: e8bd 4010 ldmia.w sp!, {r4, lr} - 10f98: 4804 ldr r0, [pc, #16] ; (10fac <__sinit+0x30>) - 10f9a: f000 bf07 b.w 11dac <__retarget_lock_release_recursive> - 10f9e: f7ff ff83 bl 10ea8 - 10fa2: e8bd 4010 ldmia.w sp!, {r4, lr} - 10fa6: 4801 ldr r0, [pc, #4] ; (10fac <__sinit+0x30>) - 10fa8: f000 bf00 b.w 11dac <__retarget_lock_release_recursive> - 10fac: 1fff9be0 .word 0x1fff9be0 - 10fb0: 1fff9bd4 .word 0x1fff9bd4 - 10fb4: 00010e69 .word 0x00010e69 - -00010fb8 <__sfp_lock_acquire>: - 10fb8: 4801 ldr r0, [pc, #4] ; (10fc0 <__sfp_lock_acquire+0x8>) - 10fba: f000 bef5 b.w 11da8 <__retarget_lock_acquire_recursive> - 10fbe: bf00 nop - 10fc0: 1fff9be0 .word 0x1fff9be0 - -00010fc4 <__sfp_lock_release>: - 10fc4: 4801 ldr r0, [pc, #4] ; (10fcc <__sfp_lock_release+0x8>) - 10fc6: f000 bef1 b.w 11dac <__retarget_lock_release_recursive> - 10fca: bf00 nop - 10fcc: 1fff9be0 .word 0x1fff9be0 - -00010fd0 <_fwalk_sglue>: - 10fd0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 10fd4: 4680 mov r8, r0 - 10fd6: 460f mov r7, r1 - 10fd8: 4616 mov r6, r2 - 10fda: f04f 0900 mov.w r9, #0 - 10fde: e9d6 5401 ldrd r5, r4, [r6, #4] - 10fe2: 3d01 subs r5, #1 - 10fe4: d411 bmi.n 1100a <_fwalk_sglue+0x3a> - 10fe6: 89a3 ldrh r3, [r4, #12] - 10fe8: 2b01 cmp r3, #1 - 10fea: f105 35ff add.w r5, r5, #4294967295 ; 0xffffffff - 10fee: d908 bls.n 11002 <_fwalk_sglue+0x32> - 10ff0: f9b4 300e ldrsh.w r3, [r4, #14] - 10ff4: 3301 adds r3, #1 - 10ff6: 4621 mov r1, r4 - 10ff8: d003 beq.n 11002 <_fwalk_sglue+0x32> - 10ffa: 4640 mov r0, r8 - 10ffc: 47b8 blx r7 - 10ffe: ea49 0900 orr.w r9, r9, r0 - 11002: 1c6b adds r3, r5, #1 - 11004: f104 0468 add.w r4, r4, #104 ; 0x68 - 11008: d1ed bne.n 10fe6 <_fwalk_sglue+0x16> - 1100a: 6836 ldr r6, [r6, #0] - 1100c: 2e00 cmp r6, #0 - 1100e: d1e6 bne.n 10fde <_fwalk_sglue+0xe> - 11010: 4648 mov r0, r9 - 11012: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 11016: bf00 nop - -00011018 : - 11018: 2a03 cmp r2, #3 - 1101a: b510 push {r4, lr} - 1101c: d916 bls.n 1104c - 1101e: ea40 0301 orr.w r3, r0, r1 - 11022: 079b lsls r3, r3, #30 - 11024: d124 bne.n 11070 - 11026: 4604 mov r4, r0 - 11028: 460b mov r3, r1 - 1102a: 4619 mov r1, r3 - 1102c: 4620 mov r0, r4 - 1102e: f8d1 e000 ldr.w lr, [r1] - 11032: f8d0 c000 ldr.w ip, [r0] - 11036: 45f4 cmp ip, lr - 11038: f104 0404 add.w r4, r4, #4 - 1103c: f103 0304 add.w r3, r3, #4 - 11040: d116 bne.n 11070 - 11042: 3a04 subs r2, #4 - 11044: 2a03 cmp r2, #3 - 11046: 4620 mov r0, r4 - 11048: 4619 mov r1, r3 - 1104a: d8ee bhi.n 1102a - 1104c: 1e54 subs r4, r2, #1 - 1104e: b19a cbz r2, 11078 - 11050: 1e42 subs r2, r0, #1 - 11052: 3901 subs r1, #1 - 11054: e001 b.n 1105a - 11056: 18c3 adds r3, r0, r3 - 11058: d00c beq.n 11074 - 1105a: f812 ef01 ldrb.w lr, [r2, #1]! - 1105e: f811 cf01 ldrb.w ip, [r1, #1]! - 11062: 45e6 cmp lr, ip - 11064: eba4 0302 sub.w r3, r4, r2 - 11068: d0f5 beq.n 11056 - 1106a: ebae 000c sub.w r0, lr, ip - 1106e: bd10 pop {r4, pc} - 11070: 1e54 subs r4, r2, #1 - 11072: e7ed b.n 11050 - 11074: 4618 mov r0, r3 - 11076: bd10 pop {r4, pc} - 11078: 4610 mov r0, r2 - 1107a: bd10 pop {r4, pc} - -0001107c : - 1107c: 4288 cmp r0, r1 - 1107e: d90d bls.n 1109c - 11080: 188b adds r3, r1, r2 - 11082: 4283 cmp r3, r0 - 11084: d90a bls.n 1109c - 11086: eb00 0c02 add.w ip, r0, r2 - 1108a: b1ba cbz r2, 110bc - 1108c: 4662 mov r2, ip - 1108e: f813 cd01 ldrb.w ip, [r3, #-1]! - 11092: f802 cd01 strb.w ip, [r2, #-1]! - 11096: 4299 cmp r1, r3 - 11098: d1f9 bne.n 1108e - 1109a: 4770 bx lr - 1109c: 2a0f cmp r2, #15 - 1109e: d80e bhi.n 110be - 110a0: 4603 mov r3, r0 - 110a2: f102 3cff add.w ip, r2, #4294967295 ; 0xffffffff - 110a6: b14a cbz r2, 110bc - 110a8: f10c 0c01 add.w ip, ip, #1 - 110ac: 3b01 subs r3, #1 - 110ae: 448c add ip, r1 - 110b0: f811 2b01 ldrb.w r2, [r1], #1 - 110b4: f803 2f01 strb.w r2, [r3, #1]! - 110b8: 4561 cmp r1, ip - 110ba: d1f9 bne.n 110b0 - 110bc: 4770 bx lr - 110be: ea40 0301 orr.w r3, r0, r1 - 110c2: 079b lsls r3, r3, #30 - 110c4: d150 bne.n 11168 - 110c6: f1a2 0310 sub.w r3, r2, #16 - 110ca: b570 push {r4, r5, r6, lr} - 110cc: f101 0c20 add.w ip, r1, #32 - 110d0: f023 050f bic.w r5, r3, #15 - 110d4: f101 0e10 add.w lr, r1, #16 - 110d8: f100 0410 add.w r4, r0, #16 - 110dc: 44ac add ip, r5 - 110de: 091b lsrs r3, r3, #4 - 110e0: f85e 5c10 ldr.w r5, [lr, #-16] - 110e4: f844 5c10 str.w r5, [r4, #-16] - 110e8: f85e 5c0c ldr.w r5, [lr, #-12] - 110ec: f844 5c0c str.w r5, [r4, #-12] - 110f0: f85e 5c08 ldr.w r5, [lr, #-8] - 110f4: f844 5c08 str.w r5, [r4, #-8] - 110f8: f85e 5c04 ldr.w r5, [lr, #-4] - 110fc: f844 5c04 str.w r5, [r4, #-4] - 11100: f10e 0e10 add.w lr, lr, #16 - 11104: 45e6 cmp lr, ip - 11106: f104 0410 add.w r4, r4, #16 - 1110a: d1e9 bne.n 110e0 - 1110c: 3301 adds r3, #1 - 1110e: f012 0f0c tst.w r2, #12 - 11112: eb01 1103 add.w r1, r1, r3, lsl #4 - 11116: f002 040f and.w r4, r2, #15 - 1111a: eb00 1303 add.w r3, r0, r3, lsl #4 - 1111e: d027 beq.n 11170 - 11120: 3c04 subs r4, #4 - 11122: f024 0603 bic.w r6, r4, #3 - 11126: ea4f 0c94 mov.w ip, r4, lsr #2 - 1112a: 441e add r6, r3 - 1112c: 1f1c subs r4, r3, #4 - 1112e: 468e mov lr, r1 - 11130: f85e 5b04 ldr.w r5, [lr], #4 - 11134: f844 5f04 str.w r5, [r4, #4]! - 11138: 42b4 cmp r4, r6 - 1113a: d1f9 bne.n 11130 - 1113c: f10c 0401 add.w r4, ip, #1 - 11140: f002 0203 and.w r2, r2, #3 - 11144: eb03 0384 add.w r3, r3, r4, lsl #2 - 11148: eb01 0184 add.w r1, r1, r4, lsl #2 - 1114c: f102 3cff add.w ip, r2, #4294967295 ; 0xffffffff - 11150: b14a cbz r2, 11166 - 11152: f10c 0c01 add.w ip, ip, #1 - 11156: 3b01 subs r3, #1 - 11158: 448c add ip, r1 - 1115a: f811 2b01 ldrb.w r2, [r1], #1 - 1115e: f803 2f01 strb.w r2, [r3, #1]! - 11162: 4561 cmp r1, ip - 11164: d1f9 bne.n 1115a - 11166: bd70 pop {r4, r5, r6, pc} - 11168: f102 3cff add.w ip, r2, #4294967295 ; 0xffffffff - 1116c: 4603 mov r3, r0 - 1116e: e79b b.n 110a8 - 11170: 4622 mov r2, r4 - 11172: e7eb b.n 1114c - -00011174 : - 11174: 0783 lsls r3, r0, #30 - 11176: b530 push {r4, r5, lr} - 11178: d048 beq.n 1120c - 1117a: 1e54 subs r4, r2, #1 - 1117c: 2a00 cmp r2, #0 - 1117e: d03f beq.n 11200 - 11180: b2ca uxtb r2, r1 - 11182: 4603 mov r3, r0 - 11184: e001 b.n 1118a - 11186: 3c01 subs r4, #1 - 11188: d33a bcc.n 11200 - 1118a: f803 2b01 strb.w r2, [r3], #1 - 1118e: 079d lsls r5, r3, #30 - 11190: d1f9 bne.n 11186 - 11192: 2c03 cmp r4, #3 - 11194: d92d bls.n 111f2 - 11196: b2cd uxtb r5, r1 - 11198: ea45 2505 orr.w r5, r5, r5, lsl #8 - 1119c: 2c0f cmp r4, #15 - 1119e: ea45 4505 orr.w r5, r5, r5, lsl #16 - 111a2: d936 bls.n 11212 - 111a4: f1a4 0210 sub.w r2, r4, #16 - 111a8: f022 0c0f bic.w ip, r2, #15 - 111ac: f103 0e20 add.w lr, r3, #32 - 111b0: 44e6 add lr, ip - 111b2: ea4f 1c12 mov.w ip, r2, lsr #4 - 111b6: f103 0210 add.w r2, r3, #16 - 111ba: e942 5504 strd r5, r5, [r2, #-16] - 111be: e942 5502 strd r5, r5, [r2, #-8] - 111c2: 3210 adds r2, #16 - 111c4: 4572 cmp r2, lr - 111c6: d1f8 bne.n 111ba - 111c8: f10c 0201 add.w r2, ip, #1 - 111cc: f014 0f0c tst.w r4, #12 - 111d0: eb03 1202 add.w r2, r3, r2, lsl #4 - 111d4: f004 0c0f and.w ip, r4, #15 - 111d8: d013 beq.n 11202 - 111da: f1ac 0304 sub.w r3, ip, #4 - 111de: f023 0303 bic.w r3, r3, #3 - 111e2: 3304 adds r3, #4 - 111e4: 4413 add r3, r2 - 111e6: f842 5b04 str.w r5, [r2], #4 - 111ea: 4293 cmp r3, r2 - 111ec: d1fb bne.n 111e6 - 111ee: f00c 0403 and.w r4, ip, #3 - 111f2: b12c cbz r4, 11200 - 111f4: b2c9 uxtb r1, r1 - 111f6: 441c add r4, r3 - 111f8: f803 1b01 strb.w r1, [r3], #1 - 111fc: 429c cmp r4, r3 - 111fe: d1fb bne.n 111f8 - 11200: bd30 pop {r4, r5, pc} - 11202: 4664 mov r4, ip - 11204: 4613 mov r3, r2 - 11206: 2c00 cmp r4, #0 - 11208: d1f4 bne.n 111f4 - 1120a: e7f9 b.n 11200 - 1120c: 4603 mov r3, r0 - 1120e: 4614 mov r4, r2 - 11210: e7bf b.n 11192 - 11212: 461a mov r2, r3 - 11214: 46a4 mov ip, r4 - 11216: e7e0 b.n 111da - -00011218 : - 11218: 0783 lsls r3, r0, #30 - 1121a: b510 push {r4, lr} - 1121c: 4604 mov r4, r0 - 1121e: d110 bne.n 11242 - 11220: 6802 ldr r2, [r0, #0] - 11222: f1a2 3301 sub.w r3, r2, #16843009 ; 0x1010101 - 11226: ea23 0302 bic.w r3, r3, r2 - 1122a: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 1122e: d108 bne.n 11242 - 11230: f850 2f04 ldr.w r2, [r0, #4]! - 11234: f1a2 3301 sub.w r3, r2, #16843009 ; 0x1010101 - 11238: ea23 0302 bic.w r3, r3, r2 - 1123c: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 11240: d0f6 beq.n 11230 - 11242: 7803 ldrb r3, [r0, #0] - 11244: b11b cbz r3, 1124e - 11246: f810 3f01 ldrb.w r3, [r0, #1]! - 1124a: 2b00 cmp r3, #0 - 1124c: d1fb bne.n 11246 - 1124e: f000 fd25 bl 11c9c - 11252: 4620 mov r0, r4 - 11254: bd10 pop {r4, pc} - 11256: bf00 nop - -00011258 : - 11258: f011 01ff ands.w r1, r1, #255 ; 0xff - 1125c: 4603 mov r3, r0 - 1125e: d044 beq.n 112ea - 11260: 0782 lsls r2, r0, #30 - 11262: d132 bne.n 112ca - 11264: b510 push {r4, lr} - 11266: 6804 ldr r4, [r0, #0] - 11268: ea41 2e01 orr.w lr, r1, r1, lsl #8 - 1126c: ea4e 4e0e orr.w lr, lr, lr, lsl #16 - 11270: ea8e 0204 eor.w r2, lr, r4 - 11274: f1a2 3301 sub.w r3, r2, #16843009 ; 0x1010101 - 11278: ea23 0302 bic.w r3, r3, r2 - 1127c: f1a4 3201 sub.w r2, r4, #16843009 ; 0x1010101 - 11280: ea22 0204 bic.w r2, r2, r4 - 11284: 4313 orrs r3, r2 - 11286: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 1128a: d10f bne.n 112ac - 1128c: f850 4f04 ldr.w r4, [r0, #4]! - 11290: ea84 0c0e eor.w ip, r4, lr - 11294: f1a4 3301 sub.w r3, r4, #16843009 ; 0x1010101 - 11298: f1ac 3201 sub.w r2, ip, #16843009 ; 0x1010101 - 1129c: ea23 0304 bic.w r3, r3, r4 - 112a0: ea22 020c bic.w r2, r2, ip - 112a4: 4313 orrs r3, r2 - 112a6: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 112aa: d0ef beq.n 1128c - 112ac: 7803 ldrb r3, [r0, #0] - 112ae: b923 cbnz r3, 112ba - 112b0: e036 b.n 11320 - 112b2: f810 3f01 ldrb.w r3, [r0, #1]! - 112b6: 2b00 cmp r3, #0 - 112b8: d032 beq.n 11320 - 112ba: 4299 cmp r1, r3 - 112bc: d1f9 bne.n 112b2 - 112be: bd10 pop {r4, pc} - 112c0: 428a cmp r2, r1 - 112c2: d011 beq.n 112e8 - 112c4: 079a lsls r2, r3, #30 - 112c6: 4618 mov r0, r3 - 112c8: d0cc beq.n 11264 - 112ca: 4618 mov r0, r3 - 112cc: f813 2b01 ldrb.w r2, [r3], #1 - 112d0: 2a00 cmp r2, #0 - 112d2: d1f5 bne.n 112c0 - 112d4: 4610 mov r0, r2 - 112d6: 4770 bx lr - 112d8: 0799 lsls r1, r3, #30 - 112da: 4618 mov r0, r3 - 112dc: d007 beq.n 112ee - 112de: 4618 mov r0, r3 - 112e0: 3301 adds r3, #1 - 112e2: 7802 ldrb r2, [r0, #0] - 112e4: 2a00 cmp r2, #0 - 112e6: d1f7 bne.n 112d8 - 112e8: 4770 bx lr - 112ea: 0782 lsls r2, r0, #30 - 112ec: d1f7 bne.n 112de - 112ee: 6802 ldr r2, [r0, #0] - 112f0: f1a2 3301 sub.w r3, r2, #16843009 ; 0x1010101 - 112f4: ea23 0302 bic.w r3, r3, r2 - 112f8: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 112fc: d108 bne.n 11310 - 112fe: f850 2f04 ldr.w r2, [r0, #4]! - 11302: f1a2 3301 sub.w r3, r2, #16843009 ; 0x1010101 - 11306: ea23 0302 bic.w r3, r3, r2 - 1130a: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 1130e: d0f6 beq.n 112fe - 11310: 7803 ldrb r3, [r0, #0] - 11312: 2b00 cmp r3, #0 - 11314: d0e8 beq.n 112e8 - 11316: f810 3f01 ldrb.w r3, [r0, #1]! - 1131a: 2b00 cmp r3, #0 - 1131c: d1fb bne.n 11316 - 1131e: 4770 bx lr - 11320: 4618 mov r0, r3 - 11322: bd10 pop {r4, pc} - -00011324 : - 11324: 0783 lsls r3, r0, #30 - 11326: b430 push {r4, r5} - 11328: d127 bne.n 1137a - 1132a: 6804 ldr r4, [r0, #0] - 1132c: f1a4 3301 sub.w r3, r4, #16843009 ; 0x1010101 - 11330: ea23 0304 bic.w r3, r3, r4 - 11334: f013 3f80 tst.w r3, #2155905152 ; 0x80808080 - 11338: 4603 mov r3, r0 - 1133a: d108 bne.n 1134e - 1133c: f853 5f04 ldr.w r5, [r3, #4]! - 11340: f1a5 3401 sub.w r4, r5, #16843009 ; 0x1010101 - 11344: ea24 0405 bic.w r4, r4, r5 - 11348: f014 3f80 tst.w r4, #2155905152 ; 0x80808080 - 1134c: d0f6 beq.n 1133c - 1134e: 781c ldrb r4, [r3, #0] - 11350: b11c cbz r4, 1135a - 11352: f813 4f01 ldrb.w r4, [r3, #1]! - 11356: 2c00 cmp r4, #0 - 11358: d1fb bne.n 11352 - 1135a: 3901 subs r1, #1 - 1135c: eb03 0c02 add.w ip, r3, r2 - 11360: 459c cmp ip, r3 - 11362: d008 beq.n 11376 - 11364: f811 2f01 ldrb.w r2, [r1, #1]! - 11368: f803 2b01 strb.w r2, [r3], #1 - 1136c: b11a cbz r2, 11376 - 1136e: 4563 cmp r3, ip - 11370: d1f6 bne.n 11360 - 11372: 2200 movs r2, #0 - 11374: 701a strb r2, [r3, #0] - 11376: bc30 pop {r4, r5} - 11378: 4770 bx lr - 1137a: 4603 mov r3, r0 - 1137c: e7e7 b.n 1134e - 1137e: bf00 nop - -00011380 : - 11380: 2a00 cmp r2, #0 - 11382: d03e beq.n 11402 - 11384: ea40 0301 orr.w r3, r0, r1 - 11388: 079b lsls r3, r3, #30 - 1138a: b530 push {r4, r5, lr} - 1138c: 4684 mov ip, r0 - 1138e: d12f bne.n 113f0 - 11390: 2a03 cmp r2, #3 - 11392: d92d bls.n 113f0 - 11394: 460b mov r3, r1 - 11396: e008 b.n 113aa - 11398: 3a04 subs r2, #4 - 1139a: 4684 mov ip, r0 - 1139c: 4619 mov r1, r3 - 1139e: d025 beq.n 113ec - 113a0: f01e 3f80 tst.w lr, #2155905152 ; 0x80808080 - 113a4: d122 bne.n 113ec - 113a6: 2a03 cmp r2, #3 - 113a8: d922 bls.n 113f0 - 113aa: 6804 ldr r4, [r0, #0] - 113ac: 4619 mov r1, r3 - 113ae: f853 5b04 ldr.w r5, [r3], #4 - 113b2: f1a4 3e01 sub.w lr, r4, #16843009 ; 0x1010101 - 113b6: 42ac cmp r4, r5 - 113b8: 4684 mov ip, r0 - 113ba: ea2e 0e04 bic.w lr, lr, r4 - 113be: f100 0004 add.w r0, r0, #4 - 113c2: d0e9 beq.n 11398 - 113c4: f89c 0000 ldrb.w r0, [ip] - 113c8: 780c ldrb r4, [r1, #0] - 113ca: 42a0 cmp r0, r4 - 113cc: d11b bne.n 11406 - 113ce: 46e6 mov lr, ip - 113d0: b168 cbz r0, 113ee - 113d2: f81e 0f01 ldrb.w r0, [lr, #1]! - 113d6: f811 4f01 ldrb.w r4, [r1, #1]! - 113da: eba2 030e sub.w r3, r2, lr - 113de: 42a0 cmp r0, r4 - 113e0: f103 33ff add.w r3, r3, #4294967295 ; 0xffffffff - 113e4: d10f bne.n 11406 - 113e6: eb1c 0303 adds.w r3, ip, r3 - 113ea: d1f1 bne.n 113d0 - 113ec: 2000 movs r0, #0 - 113ee: bd30 pop {r4, r5, pc} - 113f0: f89c 0000 ldrb.w r0, [ip] - 113f4: 780c ldrb r4, [r1, #0] - 113f6: 4284 cmp r4, r0 - 113f8: d105 bne.n 11406 - 113fa: 2a01 cmp r2, #1 - 113fc: d0f6 beq.n 113ec - 113fe: 46e6 mov lr, ip - 11400: e7e6 b.n 113d0 - 11402: 4610 mov r0, r2 - 11404: 4770 bx lr - 11406: 1b00 subs r0, r0, r4 - 11408: bd30 pop {r4, r5, pc} - 1140a: bf00 nop - -0001140c : - 1140c: ea40 0301 orr.w r3, r0, r1 - 11410: 079b lsls r3, r3, #30 - 11412: b530 push {r4, r5, lr} - 11414: d101 bne.n 1141a - 11416: 2a03 cmp r2, #3 - 11418: d80f bhi.n 1143a - 1141a: 4684 mov ip, r0 - 1141c: f101 3eff add.w lr, r1, #4294967295 ; 0xffffffff - 11420: e007 b.n 11432 - 11422: f81e 1f01 ldrb.w r1, [lr, #1]! - 11426: f803 1b01 strb.w r1, [r3], #1 - 1142a: 1e54 subs r4, r2, #1 - 1142c: b1c1 cbz r1, 11460 - 1142e: 469c mov ip, r3 - 11430: 4622 mov r2, r4 - 11432: 4663 mov r3, ip - 11434: 2a00 cmp r2, #0 - 11436: d1f4 bne.n 11422 - 11438: bd30 pop {r4, r5, pc} - 1143a: 460b mov r3, r1 - 1143c: 4684 mov ip, r0 - 1143e: 4619 mov r1, r3 - 11440: f853 5b04 ldr.w r5, [r3], #4 - 11444: f1a5 3401 sub.w r4, r5, #16843009 ; 0x1010101 - 11448: ea24 0405 bic.w r4, r4, r5 - 1144c: f014 3f80 tst.w r4, #2155905152 ; 0x80808080 - 11450: d1e4 bne.n 1141c - 11452: 3a04 subs r2, #4 - 11454: 2a03 cmp r2, #3 - 11456: f84c 5b04 str.w r5, [ip], #4 - 1145a: 4619 mov r1, r3 - 1145c: d8ef bhi.n 1143e - 1145e: e7dd b.n 1141c - 11460: 4494 add ip, r2 - 11462: 2c00 cmp r4, #0 - 11464: d0e8 beq.n 11438 - 11466: f803 1b01 strb.w r1, [r3], #1 - 1146a: 4563 cmp r3, ip - 1146c: d1fb bne.n 11466 - 1146e: bd30 pop {r4, r5, pc} - -00011470 : - 11470: 4a02 ldr r2, [pc, #8] ; (1147c ) - 11472: 6812 ldr r2, [r2, #0] - 11474: 2301 movs r3, #1 - 11476: 3250 adds r2, #80 ; 0x50 - 11478: f000 b802 b.w 11480 <__strtok_r> - 1147c: 1fff8fa8 .word 0x1fff8fa8 - -00011480 <__strtok_r>: - 11480: b4f0 push {r4, r5, r6, r7} - 11482: 4607 mov r7, r0 - 11484: b310 cbz r0, 114cc <__strtok_r+0x4c> - 11486: 463e mov r6, r7 - 11488: 468c mov ip, r1 - 1148a: f816 0b01 ldrb.w r0, [r6], #1 - 1148e: e001 b.n 11494 <__strtok_r+0x14> - 11490: 42a0 cmp r0, r4 - 11492: d016 beq.n 114c2 <__strtok_r+0x42> - 11494: f81c 4b01 ldrb.w r4, [ip], #1 - 11498: 2c00 cmp r4, #0 - 1149a: d1f9 bne.n 11490 <__strtok_r+0x10> - 1149c: b1d8 cbz r0, 114d6 <__strtok_r+0x56> - 1149e: f816 5b01 ldrb.w r5, [r6], #1 - 114a2: 460c mov r4, r1 - 114a4: e001 b.n 114aa <__strtok_r+0x2a> - 114a6: 2b00 cmp r3, #0 - 114a8: d0f9 beq.n 1149e <__strtok_r+0x1e> - 114aa: f814 3b01 ldrb.w r3, [r4], #1 - 114ae: 429d cmp r5, r3 - 114b0: d1f9 bne.n 114a6 <__strtok_r+0x26> - 114b2: b14d cbz r5, 114c8 <__strtok_r+0x48> - 114b4: 2300 movs r3, #0 - 114b6: f806 3c01 strb.w r3, [r6, #-1] - 114ba: 6016 str r6, [r2, #0] - 114bc: 4638 mov r0, r7 - 114be: bcf0 pop {r4, r5, r6, r7} - 114c0: 4770 bx lr - 114c2: b15b cbz r3, 114dc <__strtok_r+0x5c> - 114c4: 4637 mov r7, r6 - 114c6: e7de b.n 11486 <__strtok_r+0x6> - 114c8: 462e mov r6, r5 - 114ca: e7f6 b.n 114ba <__strtok_r+0x3a> - 114cc: 6817 ldr r7, [r2, #0] - 114ce: 2f00 cmp r7, #0 - 114d0: d1d9 bne.n 11486 <__strtok_r+0x6> - 114d2: 4638 mov r0, r7 - 114d4: e7f3 b.n 114be <__strtok_r+0x3e> - 114d6: bcf0 pop {r4, r5, r6, r7} - 114d8: 6010 str r0, [r2, #0] - 114da: 4770 bx lr - 114dc: 6016 str r6, [r2, #0] - 114de: 4638 mov r0, r7 - 114e0: 703b strb r3, [r7, #0] - 114e2: e7ec b.n 114be <__strtok_r+0x3e> - -000114e4 : - 114e4: 2901 cmp r1, #1 - 114e6: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 114ea: d95b bls.n 115a4 - 114ec: f04f 0801 mov.w r8, #1 - 114f0: 46c6 mov lr, r8 - 114f2: 2400 movs r4, #0 - 114f4: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff - 114f8: 4643 mov r3, r8 - 114fa: e008 b.n 1150e - 114fc: eba3 0805 sub.w r8, r3, r5 - 11500: 461c mov r4, r3 - 11502: f04f 0e01 mov.w lr, #1 - 11506: eb04 030e add.w r3, r4, lr - 1150a: 428b cmp r3, r1 - 1150c: d210 bcs.n 11530 - 1150e: eb00 0c0e add.w ip, r0, lr - 11512: 5cc7 ldrb r7, [r0, r3] - 11514: f81c 6005 ldrb.w r6, [ip, r5] - 11518: 42b7 cmp r7, r6 - 1151a: d3ef bcc.n 114fc - 1151c: d032 beq.n 11584 - 1151e: f04f 0801 mov.w r8, #1 - 11522: 4625 mov r5, r4 - 11524: 46c6 mov lr, r8 - 11526: 4444 add r4, r8 - 11528: eb04 030e add.w r3, r4, lr - 1152c: 428b cmp r3, r1 - 1152e: d3ee bcc.n 1150e - 11530: 2701 movs r7, #1 - 11532: f8c2 8000 str.w r8, [r2] - 11536: 46be mov lr, r7 - 11538: 2400 movs r4, #0 - 1153a: f04f 36ff mov.w r6, #4294967295 ; 0xffffffff - 1153e: 463b mov r3, r7 - 11540: e007 b.n 11552 - 11542: 1b9f subs r7, r3, r6 - 11544: 461c mov r4, r3 - 11546: f04f 0e01 mov.w lr, #1 - 1154a: eb04 030e add.w r3, r4, lr - 1154e: 428b cmp r3, r1 - 11550: d210 bcs.n 11574 - 11552: eb00 0c06 add.w ip, r0, r6 - 11556: f810 8003 ldrb.w r8, [r0, r3] - 1155a: f81c c00e ldrb.w ip, [ip, lr] - 1155e: 45e0 cmp r8, ip - 11560: d8ef bhi.n 11542 - 11562: d017 beq.n 11594 - 11564: 2701 movs r7, #1 - 11566: 4626 mov r6, r4 - 11568: 46be mov lr, r7 - 1156a: 443c add r4, r7 - 1156c: eb04 030e add.w r3, r4, lr - 11570: 428b cmp r3, r1 - 11572: d3ee bcc.n 11552 - 11574: 3601 adds r6, #1 - 11576: 1c68 adds r0, r5, #1 - 11578: 4286 cmp r6, r0 - 1157a: d301 bcc.n 11580 - 1157c: 6017 str r7, [r2, #0] - 1157e: 4630 mov r0, r6 - 11580: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 11584: 45c6 cmp lr, r8 - 11586: bf0a itet eq - 11588: 4474 addeq r4, lr - 1158a: f10e 0e01 addne.w lr, lr, #1 - 1158e: f04f 0e01 moveq.w lr, #1 - 11592: e7b8 b.n 11506 - 11594: 45be cmp lr, r7 - 11596: bf0a itet eq - 11598: 4474 addeq r4, lr - 1159a: f10e 0e01 addne.w lr, lr, #1 - 1159e: f04f 0e01 moveq.w lr, #1 - 115a2: e7d2 b.n 1154a - 115a4: 2701 movs r7, #1 - 115a6: 2600 movs r6, #0 - 115a8: e7e8 b.n 1157c - 115aa: bf00 nop - -000115ac : - 115ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 115b0: 4692 mov sl, r2 - 115b2: f2ad 4d1c subw sp, sp, #1052 ; 0x41c - 115b6: aa05 add r2, sp, #20 - 115b8: 4681 mov r9, r0 - 115ba: 460f mov r7, r1 - 115bc: 4650 mov r0, sl - 115be: 4619 mov r1, r3 - 115c0: 461d mov r5, r3 - 115c2: f7ff ff8f bl 114e4 - 115c6: 4613 mov r3, r2 - 115c8: 4683 mov fp, r0 - 115ca: f20d 4214 addw r2, sp, #1044 ; 0x414 - 115ce: f843 5f04 str.w r5, [r3, #4]! - 115d2: 4293 cmp r3, r2 - 115d4: d1fb bne.n 115ce - 115d6: 2d00 cmp r5, #0 - 115d8: f000 80e0 beq.w 1179c - 115dc: 1e6c subs r4, r5, #1 - 115de: ae06 add r6, sp, #24 - 115e0: f10a 32ff add.w r2, sl, #4294967295 ; 0xffffffff - 115e4: eb0a 0004 add.w r0, sl, r4 - 115e8: 9600 str r6, [sp, #0] - 115ea: f812 1f01 ldrb.w r1, [r2, #1]! - 115ee: 1aab subs r3, r5, r2 - 115f0: 3b01 subs r3, #1 - 115f2: 4453 add r3, sl - 115f4: 4282 cmp r2, r0 - 115f6: f846 3021 str.w r3, [r6, r1, lsl #2] - 115fa: d1f6 bne.n 115ea - 115fc: 9905 ldr r1, [sp, #20] - 115fe: 465a mov r2, fp - 11600: 4451 add r1, sl - 11602: 4650 mov r0, sl - 11604: f7ff fd08 bl 11018 - 11608: 2800 cmp r0, #0 - 1160a: d16f bne.n 116ec - 1160c: f10b 33ff add.w r3, fp, #4294967295 ; 0xffffffff - 11610: 9303 str r3, [sp, #12] - 11612: f1cb 0301 rsb r3, fp, #1 - 11616: 4680 mov r8, r0 - 11618: 4606 mov r6, r0 - 1161a: 9301 str r3, [sp, #4] - 1161c: eb09 0e06 add.w lr, r9, r6 - 11620: 9a00 ldr r2, [sp, #0] - 11622: f81e 3004 ldrb.w r3, [lr, r4] - 11626: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 1162a: b1db cbz r3, 11664 - 1162c: f1b8 0f00 cmp.w r8, #0 - 11630: d003 beq.n 1163a - 11632: 9a05 ldr r2, [sp, #20] - 11634: 429a cmp r2, r3 - 11636: d900 bls.n 1163a - 11638: 1aab subs r3, r5, r2 - 1163a: 441e add r6, r3 - 1163c: f04f 0800 mov.w r8, #0 - 11640: 1b7b subs r3, r7, r5 - 11642: 429e cmp r6, r3 - 11644: d9ea bls.n 1161c - 11646: eb09 0007 add.w r0, r9, r7 - 1164a: f445 6100 orr.w r1, r5, #2048 ; 0x800 - 1164e: f003 f937 bl 148c0 - 11652: 4407 add r7, r0 - 11654: 1b7b subs r3, r7, r5 - 11656: 429e cmp r6, r3 - 11658: d9e0 bls.n 1161c - 1165a: 2000 movs r0, #0 - 1165c: f20d 4d1c addw sp, sp, #1052 ; 0x41c - 11660: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 11664: 45c3 cmp fp, r8 - 11666: 465b mov r3, fp - 11668: bf38 it cc - 1166a: 4643 movcc r3, r8 - 1166c: 42a3 cmp r3, r4 - 1166e: d210 bcs.n 11692 - 11670: 1e59 subs r1, r3, #1 - 11672: 18f2 adds r2, r6, r3 - 11674: 4451 add r1, sl - 11676: 444a add r2, r9 - 11678: e002 b.n 11680 - 1167a: 3301 adds r3, #1 - 1167c: 42a3 cmp r3, r4 - 1167e: d208 bcs.n 11692 - 11680: f812 0b01 ldrb.w r0, [r2], #1 - 11684: f811 cf01 ldrb.w ip, [r1, #1]! - 11688: 4584 cmp ip, r0 - 1168a: d0f6 beq.n 1167a - 1168c: 9a01 ldr r2, [sp, #4] - 1168e: 4416 add r6, r2 - 11690: e7d3 b.n 1163a - 11692: 45c3 cmp fp, r8 - 11694: 9b03 ldr r3, [sp, #12] - 11696: d97a bls.n 1178e - 11698: eb06 020b add.w r2, r6, fp - 1169c: 444a add r2, r9 - 1169e: eb0a 010b add.w r1, sl, fp - 116a2: 9602 str r6, [sp, #8] - 116a4: e002 b.n 116ac - 116a6: 4543 cmp r3, r8 - 116a8: d015 beq.n 116d6 - 116aa: 4603 mov r3, r0 - 116ac: f812 0d01 ldrb.w r0, [r2, #-1]! - 116b0: f811 6d01 ldrb.w r6, [r1, #-1]! - 116b4: 4286 cmp r6, r0 - 116b6: f103 0c01 add.w ip, r3, #1 - 116ba: f103 30ff add.w r0, r3, #4294967295 ; 0xffffffff - 116be: d0f2 beq.n 116a6 - 116c0: 9e02 ldr r6, [sp, #8] - 116c2: 4663 mov r3, ip - 116c4: f108 0801 add.w r8, r8, #1 - 116c8: 4598 cmp r8, r3 - 116ca: d80a bhi.n 116e2 - 116cc: 9b05 ldr r3, [sp, #20] - 116ce: 441e add r6, r3 - 116d0: eba5 0803 sub.w r8, r5, r3 - 116d4: e7b4 b.n 11640 - 116d6: 4643 mov r3, r8 - 116d8: f108 0801 add.w r8, r8, #1 - 116dc: 4598 cmp r8, r3 - 116de: 9e02 ldr r6, [sp, #8] - 116e0: d9f4 bls.n 116cc - 116e2: 4670 mov r0, lr - 116e4: f20d 4d1c addw sp, sp, #1052 ; 0x41c - 116e8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 116ec: eba5 030b sub.w r3, r5, fp - 116f0: 455b cmp r3, fp - 116f2: bf38 it cc - 116f4: 465b movcc r3, fp - 116f6: 3301 adds r3, #1 - 116f8: 9305 str r3, [sp, #20] - 116fa: f10b 33ff add.w r3, fp, #4294967295 ; 0xffffffff - 116fe: 9301 str r3, [sp, #4] - 11700: f1cb 0301 rsb r3, fp, #1 - 11704: 2600 movs r6, #0 - 11706: 9302 str r3, [sp, #8] - 11708: f445 6800 orr.w r8, r5, #2048 ; 0x800 - 1170c: eb09 0e06 add.w lr, r9, r6 - 11710: 9a00 ldr r2, [sp, #0] - 11712: f81e 3004 ldrb.w r3, [lr, r4] - 11716: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 1171a: b16b cbz r3, 11738 - 1171c: 441e add r6, r3 - 1171e: 1b7b subs r3, r7, r5 - 11720: 42b3 cmp r3, r6 - 11722: d2f3 bcs.n 1170c - 11724: eb09 0007 add.w r0, r9, r7 - 11728: 4641 mov r1, r8 - 1172a: f003 f8c9 bl 148c0 - 1172e: 4407 add r7, r0 - 11730: 1b7b subs r3, r7, r5 - 11732: 42b3 cmp r3, r6 - 11734: d2ea bcs.n 1170c - 11736: e790 b.n 1165a - 11738: 45a3 cmp fp, r4 - 1173a: d214 bcs.n 11766 - 1173c: 9b01 ldr r3, [sp, #4] - 1173e: eb0b 0206 add.w r2, fp, r6 - 11742: eb0a 0103 add.w r1, sl, r3 - 11746: 444a add r2, r9 - 11748: 465b mov r3, fp - 1174a: e002 b.n 11752 - 1174c: 3301 adds r3, #1 - 1174e: 42a3 cmp r3, r4 - 11750: d209 bcs.n 11766 - 11752: f812 0b01 ldrb.w r0, [r2], #1 - 11756: f811 cf01 ldrb.w ip, [r1, #1]! - 1175a: 4584 cmp ip, r0 - 1175c: d0f6 beq.n 1174c - 1175e: 9a02 ldr r2, [sp, #8] - 11760: 4416 add r6, r2 - 11762: 441e add r6, r3 - 11764: e7db b.n 1171e - 11766: f1bb 0f00 cmp.w fp, #0 - 1176a: d012 beq.n 11792 - 1176c: eb0b 0106 add.w r1, fp, r6 - 11770: 4449 add r1, r9 - 11772: eb0a 020b add.w r2, sl, fp - 11776: e001 b.n 1177c - 11778: 4553 cmp r3, sl - 1177a: d00a beq.n 11792 - 1177c: f812 cd01 ldrb.w ip, [r2, #-1]! - 11780: f811 0d01 ldrb.w r0, [r1, #-1]! - 11784: 4584 cmp ip, r0 - 11786: 4613 mov r3, r2 - 11788: d0f6 beq.n 11778 - 1178a: 9b05 ldr r3, [sp, #20] - 1178c: e7c6 b.n 1171c - 1178e: 465b mov r3, fp - 11790: e798 b.n 116c4 - 11792: 4670 mov r0, lr - 11794: f20d 4d1c addw sp, sp, #1052 ; 0x41c - 11798: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 1179c: ab06 add r3, sp, #24 - 1179e: f04f 34ff mov.w r4, #4294967295 ; 0xffffffff - 117a2: 9300 str r3, [sp, #0] - 117a4: e72a b.n 115fc - 117a6: bf00 nop - -000117a8 : - 117a8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 117ac: 460d mov r5, r1 - 117ae: 7809 ldrb r1, [r1, #0] - 117b0: b090 sub sp, #64 ; 0x40 - 117b2: 4604 mov r4, r0 - 117b4: 2900 cmp r1, #0 - 117b6: d054 beq.n 11862 - 117b8: 786a ldrb r2, [r5, #1] - 117ba: 2a00 cmp r2, #0 - 117bc: f000 8083 beq.w 118c6 - 117c0: 78ab ldrb r3, [r5, #2] - 117c2: 2b00 cmp r3, #0 - 117c4: d051 beq.n 1186a - 117c6: 78e8 ldrb r0, [r5, #3] - 117c8: 682e ldr r6, [r5, #0] - 117ca: 2800 cmp r0, #0 - 117cc: f000 8082 beq.w 118d4 - 117d0: 792b ldrb r3, [r5, #4] - 117d2: 2b00 cmp r3, #0 - 117d4: d057 beq.n 11886 - 117d6: 4628 mov r0, r5 - 117d8: f000 fb52 bl 11e80 - 117dc: 4606 mov r6, r0 - 117de: f440 7100 orr.w r1, r0, #512 ; 0x200 - 117e2: 4620 mov r0, r4 - 117e4: f003 f86c bl 148c0 - 117e8: 4286 cmp r6, r0 - 117ea: d85b bhi.n 118a4 - 117ec: 2efe cmp r6, #254 ; 0xfe - 117ee: f200 8086 bhi.w 118fe - 117f2: 1b80 subs r0, r0, r6 - 117f4: 1827 adds r7, r4, r0 - 117f6: 2240 movs r2, #64 ; 0x40 - 117f8: 1c71 adds r1, r6, #1 - 117fa: 4668 mov r0, sp - 117fc: f7ff fcba bl 11174 - 11800: b17e cbz r6, 11822 - 11802: 1e6a subs r2, r5, #1 - 11804: fa5f fc86 uxtb.w ip, r6 - 11808: 1990 adds r0, r2, r6 - 1180a: f812 3f01 ldrb.w r3, [r2, #1]! - 1180e: f003 033f and.w r3, r3, #63 ; 0x3f - 11812: 3340 adds r3, #64 ; 0x40 - 11814: 446b add r3, sp - 11816: 1aa9 subs r1, r5, r2 - 11818: 4461 add r1, ip - 1181a: 4282 cmp r2, r0 - 1181c: f803 1c40 strb.w r1, [r3, #-64] - 11820: d1f3 bne.n 1180a - 11822: 3c01 subs r4, #1 - 11824: 5da3 ldrb r3, [r4, r6] - 11826: f003 033f and.w r3, r3, #63 ; 0x3f - 1182a: 3340 adds r3, #64 ; 0x40 - 1182c: 446b add r3, sp - 1182e: f813 3c40 ldrb.w r3, [r3, #-64] - 11832: 441c add r4, r3 - 11834: 42a7 cmp r7, r4 - 11836: d203 bcs.n 11840 - 11838: e039 b.n 118ae - 1183a: 4444 add r4, r8 - 1183c: 42a7 cmp r7, r4 - 1183e: d336 bcc.n 118ae - 11840: f814 c006 ldrb.w ip, [r4, r6] - 11844: f00c 0c3f and.w ip, ip, #63 ; 0x3f - 11848: f10c 0340 add.w r3, ip, #64 ; 0x40 - 1184c: eb0d 0c03 add.w ip, sp, r3 - 11850: 4620 mov r0, r4 - 11852: 4632 mov r2, r6 - 11854: 4629 mov r1, r5 - 11856: f81c 8c40 ldrb.w r8, [ip, #-64] - 1185a: f7ff fbdd bl 11018 - 1185e: 2800 cmp r0, #0 - 11860: d1eb bne.n 1183a - 11862: 4620 mov r0, r4 - 11864: b010 add sp, #64 ; 0x40 - 11866: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 1186a: 7800 ldrb r0, [r0, #0] - 1186c: ea42 4201 orr.w r2, r2, r1, lsl #16 - 11870: e000 b.n 11874 - 11872: 460c mov r4, r1 - 11874: ea40 4303 orr.w r3, r0, r3, lsl #16 - 11878: 1c61 adds r1, r4, #1 - 1187a: b198 cbz r0, 118a4 - 1187c: 429a cmp r2, r3 - 1187e: 7860 ldrb r0, [r4, #1] - 11880: d1f7 bne.n 11872 - 11882: 3c01 subs r4, #1 - 11884: e7ed b.n 11862 - 11886: 7822 ldrb r2, [r4, #0] - 11888: b162 cbz r2, 118a4 - 1188a: ba31 rev r1, r6 - 1188c: e001 b.n 11892 - 1188e: 4299 cmp r1, r3 - 11890: d01e beq.n 118d0 - 11892: ea42 2303 orr.w r3, r2, r3, lsl #8 - 11896: 4620 mov r0, r4 - 11898: f814 2f01 ldrb.w r2, [r4, #1]! - 1189c: 2a00 cmp r2, #0 - 1189e: d1f6 bne.n 1188e - 118a0: 4299 cmp r1, r3 - 118a2: d015 beq.n 118d0 - 118a4: 2400 movs r4, #0 - 118a6: 4620 mov r0, r4 - 118a8: b010 add sp, #64 ; 0x40 - 118aa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 118ae: 5dbb ldrb r3, [r7, r6] - 118b0: 19b8 adds r0, r7, r6 - 118b2: 2b00 cmp r3, #0 - 118b4: d0f6 beq.n 118a4 - 118b6: f44f 6100 mov.w r1, #2048 ; 0x800 - 118ba: f003 f801 bl 148c0 - 118be: 4407 add r7, r0 - 118c0: 42bc cmp r4, r7 - 118c2: d9ae bls.n 11822 - 118c4: e7ee b.n 118a4 - 118c6: b010 add sp, #64 ; 0x40 - 118c8: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 118cc: f7ff bcc4 b.w 11258 - 118d0: 1ec4 subs r4, r0, #3 - 118d2: e7c6 b.n 11862 - 118d4: 0412 lsls r2, r2, #16 - 118d6: ea42 6201 orr.w r2, r2, r1, lsl #24 - 118da: ea42 2303 orr.w r3, r2, r3, lsl #8 - 118de: 7821 ldrb r1, [r4, #0] - 118e0: 4602 mov r2, r0 - 118e2: e000 b.n 118e6 - 118e4: 462c mov r4, r5 - 118e6: ea41 0002 orr.w r0, r1, r2 - 118ea: 1c65 adds r5, r4, #1 - 118ec: 0202 lsls r2, r0, #8 - 118ee: 2900 cmp r1, #0 - 118f0: d0d8 beq.n 118a4 - 118f2: ebb3 2f00 cmp.w r3, r0, lsl #8 - 118f6: 7861 ldrb r1, [r4, #1] - 118f8: d1f4 bne.n 118e4 - 118fa: 3c02 subs r4, #2 - 118fc: e7b1 b.n 11862 - 118fe: 4601 mov r1, r0 - 11900: 4633 mov r3, r6 - 11902: 462a mov r2, r5 - 11904: 4620 mov r0, r4 - 11906: b010 add sp, #64 ; 0x40 - 11908: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 1190c: f7ff be4e b.w 115ac - -00011910 <__locale_mb_cur_max>: - 11910: 4b01 ldr r3, [pc, #4] ; (11918 <__locale_mb_cur_max+0x8>) - 11912: f893 0128 ldrb.w r0, [r3, #296] ; 0x128 - 11916: 4770 bx lr - 11918: 1fff8d1c .word 0x1fff8d1c - -0001191c <__cxa_atexit>: - 1191c: 4613 mov r3, r2 - 1191e: 460a mov r2, r1 - 11920: 4601 mov r1, r0 - 11922: 2002 movs r0, #2 - 11924: f000 bb1a b.w 11f5c <__register_exitproc> - -00011928 : - 11928: b570 push {r4, r5, r6, lr} - 1192a: 460c mov r4, r1 - 1192c: b082 sub sp, #8 - 1192e: 4615 mov r5, r2 - 11930: 461e mov r6, r3 - 11932: f7fd fd07 bl f344 <__aeabi_f2d> - 11936: 4622 mov r2, r4 - 11938: 2400 movs r4, #0 - 1193a: 9600 str r6, [sp, #0] - 1193c: 462b mov r3, r5 - 1193e: 9401 str r4, [sp, #4] - 11940: f003 f812 bl 14968 - 11944: b002 add sp, #8 - 11946: bd70 pop {r4, r5, r6, pc} - -00011948 <_sbrk_r>: - 11948: b538 push {r3, r4, r5, lr} - 1194a: 4d07 ldr r5, [pc, #28] ; (11968 <_sbrk_r+0x20>) - 1194c: 2200 movs r2, #0 - 1194e: 4604 mov r4, r0 - 11950: 4608 mov r0, r1 - 11952: 602a str r2, [r5, #0] - 11954: f7fa fb72 bl c03c <_sbrk> - 11958: 1c43 adds r3, r0, #1 - 1195a: d000 beq.n 1195e <_sbrk_r+0x16> - 1195c: bd38 pop {r3, r4, r5, pc} - 1195e: 682b ldr r3, [r5, #0] - 11960: 2b00 cmp r3, #0 - 11962: d0fb beq.n 1195c <_sbrk_r+0x14> - 11964: 6023 str r3, [r4, #0] - 11966: bd38 pop {r3, r4, r5, pc} - 11968: 1fff9d78 .word 0x1fff9d78 - -0001196c <_write_r>: - 1196c: b538 push {r3, r4, r5, lr} - 1196e: 460c mov r4, r1 - 11970: 4d08 ldr r5, [pc, #32] ; (11994 <_write_r+0x28>) - 11972: 4684 mov ip, r0 - 11974: 4611 mov r1, r2 - 11976: 4620 mov r0, r4 - 11978: 461a mov r2, r3 - 1197a: 2300 movs r3, #0 - 1197c: 602b str r3, [r5, #0] - 1197e: 4664 mov r4, ip - 11980: f7fa f824 bl b9cc <_write> - 11984: 1c43 adds r3, r0, #1 - 11986: d000 beq.n 1198a <_write_r+0x1e> - 11988: bd38 pop {r3, r4, r5, pc} - 1198a: 682b ldr r3, [r5, #0] - 1198c: 2b00 cmp r3, #0 - 1198e: d0fb beq.n 11988 <_write_r+0x1c> - 11990: 6023 str r3, [r4, #0] - 11992: bd38 pop {r3, r4, r5, pc} - 11994: 1fff9d78 .word 0x1fff9d78 - -00011998 <__errno>: - 11998: 4b01 ldr r3, [pc, #4] ; (119a0 <__errno+0x8>) - 1199a: 6818 ldr r0, [r3, #0] - 1199c: 4770 bx lr - 1199e: bf00 nop - 119a0: 1fff8fa8 .word 0x1fff8fa8 - 119a4: ffffffff .word 0xffffffff - 119a8: ffffffff .word 0xffffffff - 119ac: ffffffff .word 0xffffffff - 119b0: ffffffff .word 0xffffffff - 119b4: ffffffff .word 0xffffffff - 119b8: ffffffff .word 0xffffffff - 119bc: ffffffff .word 0xffffffff - 119c0: eba2 0003 sub.w r0, r2, r3 - 119c4: 4770 bx lr - 119c6: bf00 nop - -000119c8 : - 119c8: 7802 ldrb r2, [r0, #0] - 119ca: 780b ldrb r3, [r1, #0] - 119cc: 2a01 cmp r2, #1 - 119ce: bf28 it cs - 119d0: 429a cmpcs r2, r3 - 119d2: d1f5 bne.n 119c0 <__errno+0x28> - 119d4: e96d 4504 strd r4, r5, [sp, #-16]! - 119d8: ea40 0401 orr.w r4, r0, r1 - 119dc: e9cd 6702 strd r6, r7, [sp, #8] - 119e0: f06f 0c00 mvn.w ip, #0 - 119e4: ea4f 7244 mov.w r2, r4, lsl #29 - 119e8: b312 cbz r2, 11a30 - 119ea: ea80 0401 eor.w r4, r0, r1 - 119ee: f014 0f07 tst.w r4, #7 - 119f2: d16a bne.n 11aca - 119f4: f000 0407 and.w r4, r0, #7 - 119f8: f020 0007 bic.w r0, r0, #7 - 119fc: f004 0503 and.w r5, r4, #3 - 11a00: f021 0107 bic.w r1, r1, #7 - 11a04: ea4f 05c5 mov.w r5, r5, lsl #3 - 11a08: e8f0 2304 ldrd r2, r3, [r0], #16 - 11a0c: f014 0f04 tst.w r4, #4 - 11a10: e8f1 6704 ldrd r6, r7, [r1], #16 - 11a14: fa0c f405 lsl.w r4, ip, r5 - 11a18: ea62 0204 orn r2, r2, r4 - 11a1c: ea66 0604 orn r6, r6, r4 - 11a20: d00a beq.n 11a38 - 11a22: ea63 0304 orn r3, r3, r4 - 11a26: 4662 mov r2, ip - 11a28: ea67 0704 orn r7, r7, r4 - 11a2c: 4666 mov r6, ip - 11a2e: e003 b.n 11a38 - 11a30: e8f0 2304 ldrd r2, r3, [r0], #16 - 11a34: e8f1 6704 ldrd r6, r7, [r1], #16 - 11a38: fa82 f54c uadd8 r5, r2, ip - 11a3c: ea82 0406 eor.w r4, r2, r6 - 11a40: faa4 f48c sel r4, r4, ip - 11a44: bb6c cbnz r4, 11aa2 - 11a46: fa83 f54c uadd8 r5, r3, ip - 11a4a: ea83 0507 eor.w r5, r3, r7 - 11a4e: faa5 f58c sel r5, r5, ip - 11a52: b995 cbnz r5, 11a7a - 11a54: e950 2302 ldrd r2, r3, [r0, #-8] - 11a58: e951 6702 ldrd r6, r7, [r1, #-8] - 11a5c: fa82 f54c uadd8 r5, r2, ip - 11a60: ea82 0406 eor.w r4, r2, r6 - 11a64: faa4 f48c sel r4, r4, ip - 11a68: fa83 f54c uadd8 r5, r3, ip - 11a6c: ea83 0507 eor.w r5, r3, r7 - 11a70: faa5 f58c sel r5, r5, ip - 11a74: 4325 orrs r5, r4 - 11a76: d0db beq.n 11a30 - 11a78: b99c cbnz r4, 11aa2 - 11a7a: ba2d rev r5, r5 - 11a7c: fab5 f485 clz r4, r5 - 11a80: f024 0407 bic.w r4, r4, #7 - 11a84: fa27 f104 lsr.w r1, r7, r4 - 11a88: e9dd 6702 ldrd r6, r7, [sp, #8] - 11a8c: fa23 f304 lsr.w r3, r3, r4 - 11a90: f003 00ff and.w r0, r3, #255 ; 0xff - 11a94: f001 01ff and.w r1, r1, #255 ; 0xff - 11a98: e8fd 4504 ldrd r4, r5, [sp], #16 - 11a9c: eba0 0001 sub.w r0, r0, r1 - 11aa0: 4770 bx lr - 11aa2: ba24 rev r4, r4 - 11aa4: fab4 f484 clz r4, r4 - 11aa8: f024 0407 bic.w r4, r4, #7 - 11aac: fa26 f104 lsr.w r1, r6, r4 - 11ab0: e9dd 6702 ldrd r6, r7, [sp, #8] - 11ab4: fa22 f204 lsr.w r2, r2, r4 - 11ab8: f002 00ff and.w r0, r2, #255 ; 0xff - 11abc: f001 01ff and.w r1, r1, #255 ; 0xff - 11ac0: e8fd 4504 ldrd r4, r5, [sp], #16 - 11ac4: eba0 0001 sub.w r0, r0, r1 - 11ac8: 4770 bx lr - 11aca: f014 0f03 tst.w r4, #3 - 11ace: d13c bne.n 11b4a - 11ad0: f010 0403 ands.w r4, r0, #3 - 11ad4: d128 bne.n 11b28 - 11ad6: f850 2b08 ldr.w r2, [r0], #8 - 11ada: f851 3b08 ldr.w r3, [r1], #8 - 11ade: fa82 f54c uadd8 r5, r2, ip - 11ae2: ea82 0503 eor.w r5, r2, r3 - 11ae6: faa5 f58c sel r5, r5, ip - 11aea: b95d cbnz r5, 11b04 - 11aec: f850 2c04 ldr.w r2, [r0, #-4] - 11af0: f851 3c04 ldr.w r3, [r1, #-4] - 11af4: fa82 f54c uadd8 r5, r2, ip - 11af8: ea82 0503 eor.w r5, r2, r3 - 11afc: faa5 f58c sel r5, r5, ip - 11b00: 2d00 cmp r5, #0 - 11b02: d0e8 beq.n 11ad6 - 11b04: ba2d rev r5, r5 - 11b06: fab5 f485 clz r4, r5 - 11b0a: f024 0407 bic.w r4, r4, #7 - 11b0e: fa23 f104 lsr.w r1, r3, r4 - 11b12: fa22 f204 lsr.w r2, r2, r4 - 11b16: f002 00ff and.w r0, r2, #255 ; 0xff - 11b1a: f001 01ff and.w r1, r1, #255 ; 0xff - 11b1e: e8fd 4504 ldrd r4, r5, [sp], #16 - 11b22: eba0 0001 sub.w r0, r0, r1 - 11b26: 4770 bx lr - 11b28: ea4f 04c4 mov.w r4, r4, lsl #3 - 11b2c: f020 0003 bic.w r0, r0, #3 - 11b30: f850 2b08 ldr.w r2, [r0], #8 - 11b34: f021 0103 bic.w r1, r1, #3 - 11b38: f851 3b08 ldr.w r3, [r1], #8 - 11b3c: fa0c f404 lsl.w r4, ip, r4 - 11b40: ea62 0204 orn r2, r2, r4 - 11b44: ea63 0304 orn r3, r3, r4 - 11b48: e7c9 b.n 11ade - 11b4a: f010 0403 ands.w r4, r0, #3 - 11b4e: d01a beq.n 11b86 - 11b50: eba1 0104 sub.w r1, r1, r4 - 11b54: f020 0003 bic.w r0, r0, #3 - 11b58: 07e4 lsls r4, r4, #31 - 11b5a: f850 2b04 ldr.w r2, [r0], #4 - 11b5e: d006 beq.n 11b6e - 11b60: d20f bcs.n 11b82 - 11b62: 788b ldrb r3, [r1, #2] - 11b64: fa5f f4a2 uxtb.w r4, r2, ror #16 - 11b68: 1ae4 subs r4, r4, r3 - 11b6a: d106 bne.n 11b7a - 11b6c: b12b cbz r3, 11b7a - 11b6e: 78cb ldrb r3, [r1, #3] - 11b70: fa5f f4b2 uxtb.w r4, r2, ror #24 - 11b74: 1ae4 subs r4, r4, r3 - 11b76: d100 bne.n 11b7a - 11b78: b91b cbnz r3, 11b82 - 11b7a: 4620 mov r0, r4 - 11b7c: f85d 4b10 ldr.w r4, [sp], #16 - 11b80: 4770 bx lr - 11b82: f101 0104 add.w r1, r1, #4 - 11b86: f850 2b04 ldr.w r2, [r0], #4 - 11b8a: 07cc lsls r4, r1, #31 - 11b8c: f021 0103 bic.w r1, r1, #3 - 11b90: f851 3b04 ldr.w r3, [r1], #4 - 11b94: d848 bhi.n 11c28 - 11b96: d224 bcs.n 11be2 - 11b98: f022 447f bic.w r4, r2, #4278190080 ; 0xff000000 - 11b9c: fa82 f54c uadd8 r5, r2, ip - 11ba0: ea94 2513 eors.w r5, r4, r3, lsr #8 - 11ba4: faa5 f58c sel r5, r5, ip - 11ba8: d10a bne.n 11bc0 - 11baa: b965 cbnz r5, 11bc6 - 11bac: f851 3b04 ldr.w r3, [r1], #4 - 11bb0: ea84 0402 eor.w r4, r4, r2 - 11bb4: ebb4 6f03 cmp.w r4, r3, lsl #24 - 11bb8: d10e bne.n 11bd8 - 11bba: f850 2b04 ldr.w r2, [r0], #4 - 11bbe: e7eb b.n 11b98 - 11bc0: ea4f 2313 mov.w r3, r3, lsr #8 - 11bc4: e055 b.n 11c72 - 11bc6: f035 457f bics.w r5, r5, #4278190080 ; 0xff000000 - 11bca: d14d bne.n 11c68 - 11bcc: 7808 ldrb r0, [r1, #0] - 11bce: e8fd 4504 ldrd r4, r5, [sp], #16 - 11bd2: f1c0 0000 rsb r0, r0, #0 - 11bd6: 4770 bx lr - 11bd8: ea4f 6212 mov.w r2, r2, lsr #24 - 11bdc: f003 03ff and.w r3, r3, #255 ; 0xff - 11be0: e047 b.n 11c72 - 11be2: ea02 441c and.w r4, r2, ip, lsr #16 - 11be6: fa82 f54c uadd8 r5, r2, ip - 11bea: ea94 4513 eors.w r5, r4, r3, lsr #16 - 11bee: faa5 f58c sel r5, r5, ip - 11bf2: d10a bne.n 11c0a - 11bf4: b965 cbnz r5, 11c10 - 11bf6: f851 3b04 ldr.w r3, [r1], #4 - 11bfa: ea84 0402 eor.w r4, r4, r2 - 11bfe: ebb4 4f03 cmp.w r4, r3, lsl #16 - 11c02: d10c bne.n 11c1e - 11c04: f850 2b04 ldr.w r2, [r0], #4 - 11c08: e7eb b.n 11be2 - 11c0a: ea4f 4313 mov.w r3, r3, lsr #16 - 11c0e: e030 b.n 11c72 - 11c10: ea15 451c ands.w r5, r5, ip, lsr #16 - 11c14: d128 bne.n 11c68 - 11c16: 880b ldrh r3, [r1, #0] - 11c18: ea4f 4212 mov.w r2, r2, lsr #16 - 11c1c: e029 b.n 11c72 - 11c1e: ea4f 4212 mov.w r2, r2, lsr #16 - 11c22: ea03 431c and.w r3, r3, ip, lsr #16 - 11c26: e024 b.n 11c72 - 11c28: f002 04ff and.w r4, r2, #255 ; 0xff - 11c2c: fa82 f54c uadd8 r5, r2, ip - 11c30: ea94 6513 eors.w r5, r4, r3, lsr #24 - 11c34: faa5 f58c sel r5, r5, ip - 11c38: d10a bne.n 11c50 - 11c3a: b965 cbnz r5, 11c56 - 11c3c: f851 3b04 ldr.w r3, [r1], #4 - 11c40: ea84 0402 eor.w r4, r4, r2 - 11c44: ebb4 2f03 cmp.w r4, r3, lsl #8 - 11c48: d109 bne.n 11c5e - 11c4a: f850 2b04 ldr.w r2, [r0], #4 - 11c4e: e7eb b.n 11c28 - 11c50: ea4f 6313 mov.w r3, r3, lsr #24 - 11c54: e00d b.n 11c72 - 11c56: f015 0fff tst.w r5, #255 ; 0xff - 11c5a: d105 bne.n 11c68 - 11c5c: 680b ldr r3, [r1, #0] - 11c5e: ea4f 2212 mov.w r2, r2, lsr #8 - 11c62: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 - 11c66: e004 b.n 11c72 - 11c68: f04f 0000 mov.w r0, #0 - 11c6c: e8fd 4504 ldrd r4, r5, [sp], #16 - 11c70: 4770 bx lr - 11c72: ba12 rev r2, r2 - 11c74: ba1b rev r3, r3 - 11c76: fa82 f44c uadd8 r4, r2, ip - 11c7a: ea82 0403 eor.w r4, r2, r3 - 11c7e: faa4 f58c sel r5, r4, ip - 11c82: fab5 f485 clz r4, r5 - 11c86: fa02 f204 lsl.w r2, r2, r4 - 11c8a: fa03 f304 lsl.w r3, r3, r4 - 11c8e: ea4f 6012 mov.w r0, r2, lsr #24 - 11c92: e8fd 4504 ldrd r4, r5, [sp], #16 - 11c96: eba0 6013 sub.w r0, r0, r3, lsr #24 - 11c9a: 4770 bx lr - -00011c9c : - 11c9c: ea80 0201 eor.w r2, r0, r1 - 11ca0: 4684 mov ip, r0 - 11ca2: f012 0f03 tst.w r2, #3 - 11ca6: d14f bne.n 11d48 - 11ca8: f011 0f03 tst.w r1, #3 - 11cac: d132 bne.n 11d14 - 11cae: f84d 4d04 str.w r4, [sp, #-4]! - 11cb2: f011 0f04 tst.w r1, #4 - 11cb6: f851 3b04 ldr.w r3, [r1], #4 - 11cba: d00b beq.n 11cd4 - 11cbc: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101 - 11cc0: 439a bics r2, r3 - 11cc2: f012 3f80 tst.w r2, #2155905152 ; 0x80808080 - 11cc6: bf04 itt eq - 11cc8: f84c 3b04 streq.w r3, [ip], #4 - 11ccc: f851 3b04 ldreq.w r3, [r1], #4 - 11cd0: d116 bne.n 11d00 - 11cd2: bf00 nop - 11cd4: f851 4b04 ldr.w r4, [r1], #4 - 11cd8: f1a3 3201 sub.w r2, r3, #16843009 ; 0x1010101 - 11cdc: 439a bics r2, r3 - 11cde: f012 3f80 tst.w r2, #2155905152 ; 0x80808080 - 11ce2: f1a4 3201 sub.w r2, r4, #16843009 ; 0x1010101 - 11ce6: d10b bne.n 11d00 - 11ce8: f84c 3b04 str.w r3, [ip], #4 - 11cec: 43a2 bics r2, r4 - 11cee: f012 3f80 tst.w r2, #2155905152 ; 0x80808080 - 11cf2: bf04 itt eq - 11cf4: f851 3b04 ldreq.w r3, [r1], #4 - 11cf8: f84c 4b04 streq.w r4, [ip], #4 - 11cfc: d0ea beq.n 11cd4 - 11cfe: 4623 mov r3, r4 - 11d00: f80c 3b01 strb.w r3, [ip], #1 - 11d04: f013 0fff tst.w r3, #255 ; 0xff - 11d08: ea4f 2333 mov.w r3, r3, ror #8 - 11d0c: d1f8 bne.n 11d00 - 11d0e: f85d 4b04 ldr.w r4, [sp], #4 - 11d12: 4770 bx lr - 11d14: f011 0f01 tst.w r1, #1 - 11d18: d006 beq.n 11d28 - 11d1a: f811 2b01 ldrb.w r2, [r1], #1 - 11d1e: f80c 2b01 strb.w r2, [ip], #1 - 11d22: 2a00 cmp r2, #0 - 11d24: bf08 it eq - 11d26: 4770 bxeq lr - 11d28: f011 0f02 tst.w r1, #2 - 11d2c: d0bf beq.n 11cae - 11d2e: f831 2b02 ldrh.w r2, [r1], #2 - 11d32: f012 0fff tst.w r2, #255 ; 0xff - 11d36: bf16 itet ne - 11d38: f82c 2b02 strhne.w r2, [ip], #2 - 11d3c: f88c 2000 strbeq.w r2, [ip] - 11d40: f412 4f7f tstne.w r2, #65280 ; 0xff00 - 11d44: d1b3 bne.n 11cae - 11d46: 4770 bx lr - 11d48: f811 2b01 ldrb.w r2, [r1], #1 - 11d4c: f80c 2b01 strb.w r2, [ip], #1 - 11d50: 2a00 cmp r2, #0 - 11d52: d1f9 bne.n 11d48 - 11d54: 4770 bx lr - 11d56: bf00 nop - -00011d58 <__libc_init_array>: - 11d58: b570 push {r4, r5, r6, lr} - 11d5a: 4e0d ldr r6, [pc, #52] ; (11d90 <__libc_init_array+0x38>) - 11d5c: 4d0d ldr r5, [pc, #52] ; (11d94 <__libc_init_array+0x3c>) - 11d5e: 1b76 subs r6, r6, r5 - 11d60: 10b6 asrs r6, r6, #2 - 11d62: d006 beq.n 11d72 <__libc_init_array+0x1a> - 11d64: 2400 movs r4, #0 - 11d66: f855 3b04 ldr.w r3, [r5], #4 - 11d6a: 3401 adds r4, #1 - 11d6c: 4798 blx r3 - 11d6e: 42a6 cmp r6, r4 - 11d70: d1f9 bne.n 11d66 <__libc_init_array+0xe> - 11d72: 4e09 ldr r6, [pc, #36] ; (11d98 <__libc_init_array+0x40>) - 11d74: 4d09 ldr r5, [pc, #36] ; (11d9c <__libc_init_array+0x44>) - 11d76: 1b76 subs r6, r6, r5 - 11d78: f006 ff22 bl 18bc0 <_init> - 11d7c: 10b6 asrs r6, r6, #2 - 11d7e: d006 beq.n 11d8e <__libc_init_array+0x36> - 11d80: 2400 movs r4, #0 - 11d82: f855 3b04 ldr.w r3, [r5], #4 - 11d86: 3401 adds r4, #1 - 11d88: 4798 blx r3 - 11d8a: 42a6 cmp r6, r4 - 11d8c: d1f9 bne.n 11d82 <__libc_init_array+0x2a> - 11d8e: bd70 pop {r4, r5, r6, pc} - 11d90: 00018bcc .word 0x00018bcc - 11d94: 00018bcc .word 0x00018bcc - 11d98: 00018be0 .word 0x00018be0 - 11d9c: 00018bcc .word 0x00018bcc - -00011da0 <__retarget_lock_init_recursive>: - 11da0: 4770 bx lr - 11da2: bf00 nop - -00011da4 <__retarget_lock_close_recursive>: - 11da4: 4770 bx lr - 11da6: bf00 nop - -00011da8 <__retarget_lock_acquire_recursive>: - 11da8: 4770 bx lr - 11daa: bf00 nop - -00011dac <__retarget_lock_release_recursive>: - 11dac: 4770 bx lr - 11dae: bf00 nop - -00011db0 : - 11db0: f001 01ff and.w r1, r1, #255 ; 0xff - 11db4: 2a10 cmp r2, #16 - 11db6: db2b blt.n 11e10 - 11db8: f010 0f07 tst.w r0, #7 - 11dbc: d008 beq.n 11dd0 - 11dbe: f810 3b01 ldrb.w r3, [r0], #1 - 11dc2: 3a01 subs r2, #1 - 11dc4: 428b cmp r3, r1 - 11dc6: d02d beq.n 11e24 - 11dc8: f010 0f07 tst.w r0, #7 - 11dcc: b342 cbz r2, 11e20 - 11dce: d1f6 bne.n 11dbe - 11dd0: b4f0 push {r4, r5, r6, r7} - 11dd2: ea41 2101 orr.w r1, r1, r1, lsl #8 - 11dd6: ea41 4101 orr.w r1, r1, r1, lsl #16 - 11dda: f022 0407 bic.w r4, r2, #7 - 11dde: f07f 0700 mvns.w r7, #0 - 11de2: 2300 movs r3, #0 - 11de4: e8f0 5602 ldrd r5, r6, [r0], #8 - 11de8: 3c08 subs r4, #8 - 11dea: ea85 0501 eor.w r5, r5, r1 - 11dee: ea86 0601 eor.w r6, r6, r1 - 11df2: fa85 f547 uadd8 r5, r5, r7 - 11df6: faa3 f587 sel r5, r3, r7 - 11dfa: fa86 f647 uadd8 r6, r6, r7 - 11dfe: faa5 f687 sel r6, r5, r7 - 11e02: b98e cbnz r6, 11e28 - 11e04: d1ee bne.n 11de4 - 11e06: bcf0 pop {r4, r5, r6, r7} - 11e08: f001 01ff and.w r1, r1, #255 ; 0xff - 11e0c: f002 0207 and.w r2, r2, #7 - 11e10: b132 cbz r2, 11e20 - 11e12: f810 3b01 ldrb.w r3, [r0], #1 - 11e16: 3a01 subs r2, #1 - 11e18: ea83 0301 eor.w r3, r3, r1 - 11e1c: b113 cbz r3, 11e24 - 11e1e: d1f8 bne.n 11e12 - 11e20: 2000 movs r0, #0 - 11e22: 4770 bx lr - 11e24: 3801 subs r0, #1 - 11e26: 4770 bx lr - 11e28: 2d00 cmp r5, #0 - 11e2a: bf06 itte eq - 11e2c: 4635 moveq r5, r6 - 11e2e: 3803 subeq r0, #3 - 11e30: 3807 subne r0, #7 - 11e32: f015 0f01 tst.w r5, #1 - 11e36: d107 bne.n 11e48 - 11e38: 3001 adds r0, #1 - 11e3a: f415 7f80 tst.w r5, #256 ; 0x100 - 11e3e: bf02 ittt eq - 11e40: 3001 addeq r0, #1 - 11e42: f415 3fc0 tsteq.w r5, #98304 ; 0x18000 - 11e46: 3001 addeq r0, #1 - 11e48: bcf0 pop {r4, r5, r6, r7} - 11e4a: 3801 subs r0, #1 - 11e4c: 4770 bx lr - 11e4e: bf00 nop - 11e50: ffff ffff ; instruction: 0xffffffff - 11e54: ffff ffff ; instruction: 0xffffffff - 11e58: ffff ffff ; instruction: 0xffffffff - 11e5c: ffff ffff ; instruction: 0xffffffff - 11e60: ffff ffff ; instruction: 0xffffffff - 11e64: ffff ffff ; instruction: 0xffffffff - 11e68: ffff ffff ; instruction: 0xffffffff - 11e6c: ffff ffff ; instruction: 0xffffffff - 11e70: ffff ffff ; instruction: 0xffffffff - 11e74: ffff ffff ; instruction: 0xffffffff - 11e78: ffff ffff ; instruction: 0xffffffff - 11e7c: ffff ffff ; instruction: 0xffffffff - -00011e80 : - 11e80: f890 f000 pld [r0] - 11e84: e96d 4502 strd r4, r5, [sp, #-8]! - 11e88: f020 0107 bic.w r1, r0, #7 - 11e8c: f06f 0c00 mvn.w ip, #0 - 11e90: f010 0407 ands.w r4, r0, #7 - 11e94: f891 f020 pld [r1, #32] - 11e98: f040 8049 bne.w 11f2e - 11e9c: f04f 0400 mov.w r4, #0 - 11ea0: f06f 0007 mvn.w r0, #7 - 11ea4: e9d1 2300 ldrd r2, r3, [r1] - 11ea8: f891 f040 pld [r1, #64] ; 0x40 - 11eac: f100 0008 add.w r0, r0, #8 - 11eb0: fa82 f24c uadd8 r2, r2, ip - 11eb4: faa4 f28c sel r2, r4, ip - 11eb8: fa83 f34c uadd8 r3, r3, ip - 11ebc: faa2 f38c sel r3, r2, ip - 11ec0: bb4b cbnz r3, 11f16 - 11ec2: e9d1 2302 ldrd r2, r3, [r1, #8] - 11ec6: fa82 f24c uadd8 r2, r2, ip - 11eca: f100 0008 add.w r0, r0, #8 - 11ece: faa4 f28c sel r2, r4, ip - 11ed2: fa83 f34c uadd8 r3, r3, ip - 11ed6: faa2 f38c sel r3, r2, ip - 11eda: b9e3 cbnz r3, 11f16 - 11edc: e9d1 2304 ldrd r2, r3, [r1, #16] - 11ee0: fa82 f24c uadd8 r2, r2, ip - 11ee4: f100 0008 add.w r0, r0, #8 - 11ee8: faa4 f28c sel r2, r4, ip - 11eec: fa83 f34c uadd8 r3, r3, ip - 11ef0: faa2 f38c sel r3, r2, ip - 11ef4: b97b cbnz r3, 11f16 - 11ef6: e9d1 2306 ldrd r2, r3, [r1, #24] - 11efa: f101 0120 add.w r1, r1, #32 - 11efe: fa82 f24c uadd8 r2, r2, ip - 11f02: f100 0008 add.w r0, r0, #8 - 11f06: faa4 f28c sel r2, r4, ip - 11f0a: fa83 f34c uadd8 r3, r3, ip - 11f0e: faa2 f38c sel r3, r2, ip - 11f12: 2b00 cmp r3, #0 - 11f14: d0c6 beq.n 11ea4 - 11f16: 2a00 cmp r2, #0 - 11f18: bf04 itt eq - 11f1a: 3004 addeq r0, #4 - 11f1c: 461a moveq r2, r3 - 11f1e: ba12 rev r2, r2 - 11f20: fab2 f282 clz r2, r2 - 11f24: e8fd 4502 ldrd r4, r5, [sp], #8 - 11f28: eb00 00d2 add.w r0, r0, r2, lsr #3 - 11f2c: 4770 bx lr - 11f2e: e9d1 2300 ldrd r2, r3, [r1] - 11f32: f004 0503 and.w r5, r4, #3 - 11f36: f1c4 0000 rsb r0, r4, #0 - 11f3a: ea4f 05c5 mov.w r5, r5, lsl #3 - 11f3e: f014 0f04 tst.w r4, #4 - 11f42: f891 f040 pld [r1, #64] ; 0x40 - 11f46: fa0c f505 lsl.w r5, ip, r5 - 11f4a: ea62 0205 orn r2, r2, r5 - 11f4e: bf1c itt ne - 11f50: ea63 0305 ornne r3, r3, r5 - 11f54: 4662 movne r2, ip - 11f56: f04f 0400 mov.w r4, #0 - 11f5a: e7a9 b.n 11eb0 - -00011f5c <__register_exitproc>: - 11f5c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 11f60: f8df a074 ldr.w sl, [pc, #116] ; 11fd8 <__register_exitproc+0x7c> - 11f64: 4606 mov r6, r0 - 11f66: f8da 0000 ldr.w r0, [sl] - 11f6a: 4698 mov r8, r3 - 11f6c: 460f mov r7, r1 - 11f6e: 4691 mov r9, r2 - 11f70: f7ff ff1a bl 11da8 <__retarget_lock_acquire_recursive> - 11f74: 4b19 ldr r3, [pc, #100] ; (11fdc <__register_exitproc+0x80>) - 11f76: 681c ldr r4, [r3, #0] - 11f78: b324 cbz r4, 11fc4 <__register_exitproc+0x68> - 11f7a: 6865 ldr r5, [r4, #4] - 11f7c: 2d1f cmp r5, #31 - 11f7e: dc24 bgt.n 11fca <__register_exitproc+0x6e> - 11f80: b95e cbnz r6, 11f9a <__register_exitproc+0x3e> - 11f82: 1c6b adds r3, r5, #1 - 11f84: 3502 adds r5, #2 - 11f86: f8da 0000 ldr.w r0, [sl] - 11f8a: 6063 str r3, [r4, #4] - 11f8c: f844 7025 str.w r7, [r4, r5, lsl #2] - 11f90: f7ff ff0c bl 11dac <__retarget_lock_release_recursive> - 11f94: 2000 movs r0, #0 - 11f96: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 11f9a: eb04 0185 add.w r1, r4, r5, lsl #2 - 11f9e: 2301 movs r3, #1 - 11fa0: f8c1 9088 str.w r9, [r1, #136] ; 0x88 - 11fa4: f8d4 2188 ldr.w r2, [r4, #392] ; 0x188 - 11fa8: 40ab lsls r3, r5 - 11faa: 431a orrs r2, r3 - 11fac: 2e02 cmp r6, #2 - 11fae: f8c4 2188 str.w r2, [r4, #392] ; 0x188 - 11fb2: f8c1 8108 str.w r8, [r1, #264] ; 0x108 - 11fb6: d1e4 bne.n 11f82 <__register_exitproc+0x26> - 11fb8: f8d4 218c ldr.w r2, [r4, #396] ; 0x18c - 11fbc: 431a orrs r2, r3 - 11fbe: f8c4 218c str.w r2, [r4, #396] ; 0x18c - 11fc2: e7de b.n 11f82 <__register_exitproc+0x26> - 11fc4: 4c06 ldr r4, [pc, #24] ; (11fe0 <__register_exitproc+0x84>) - 11fc6: 601c str r4, [r3, #0] - 11fc8: e7d7 b.n 11f7a <__register_exitproc+0x1e> - 11fca: f8da 0000 ldr.w r0, [sl] - 11fce: f7ff feed bl 11dac <__retarget_lock_release_recursive> - 11fd2: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 11fd6: e7de b.n 11f96 <__register_exitproc+0x3a> - 11fd8: 1fff8fac .word 0x1fff8fac - 11fdc: 1fff9d74 .word 0x1fff9d74 - 11fe0: 1fff9be4 .word 0x1fff9be4 - -00011fe4 : - 11fe4: 4b02 ldr r3, [pc, #8] ; (11ff0 ) - 11fe6: b113 cbz r3, 11fee - 11fe8: 4802 ldr r0, [pc, #8] ; (11ff4 ) - 11fea: f000 b805 b.w 11ff8 - 11fee: 4770 bx lr - 11ff0: 00000000 .word 0x00000000 - 11ff4: 00014a0d .word 0x00014a0d - -00011ff8 : - 11ff8: 2300 movs r3, #0 - 11ffa: 4601 mov r1, r0 - 11ffc: 461a mov r2, r3 - 11ffe: 4618 mov r0, r3 - 12000: f7ff bfac b.w 11f5c <__register_exitproc> - -00012004 <_malloc_trim_r>: - 12004: b5f8 push {r3, r4, r5, r6, r7, lr} - 12006: 4f24 ldr r7, [pc, #144] ; (12098 <_malloc_trim_r+0x94>) - 12008: 460c mov r4, r1 - 1200a: 4606 mov r6, r0 - 1200c: f7fe fb10 bl 10630 <__malloc_lock> - 12010: 68bb ldr r3, [r7, #8] - 12012: 685d ldr r5, [r3, #4] - 12014: f5c4 617e rsb r1, r4, #4064 ; 0xfe0 - 12018: 310f adds r1, #15 - 1201a: f025 0503 bic.w r5, r5, #3 - 1201e: 194b adds r3, r1, r5 - 12020: f423 637f bic.w r3, r3, #4080 ; 0xff0 - 12024: f023 030f bic.w r3, r3, #15 - 12028: f5a3 5480 sub.w r4, r3, #4096 ; 0x1000 - 1202c: f5b4 5f80 cmp.w r4, #4096 ; 0x1000 - 12030: db07 blt.n 12042 <_malloc_trim_r+0x3e> - 12032: 2100 movs r1, #0 - 12034: 4630 mov r0, r6 - 12036: f7ff fc87 bl 11948 <_sbrk_r> - 1203a: 68bb ldr r3, [r7, #8] - 1203c: 442b add r3, r5 - 1203e: 4298 cmp r0, r3 - 12040: d004 beq.n 1204c <_malloc_trim_r+0x48> - 12042: 4630 mov r0, r6 - 12044: f7fe fafa bl 1063c <__malloc_unlock> - 12048: 2000 movs r0, #0 - 1204a: bdf8 pop {r3, r4, r5, r6, r7, pc} - 1204c: 4261 negs r1, r4 - 1204e: 4630 mov r0, r6 - 12050: f7ff fc7a bl 11948 <_sbrk_r> - 12054: 3001 adds r0, #1 - 12056: d00d beq.n 12074 <_malloc_trim_r+0x70> - 12058: 4a10 ldr r2, [pc, #64] ; (1209c <_malloc_trim_r+0x98>) - 1205a: 68bb ldr r3, [r7, #8] - 1205c: 1b2d subs r5, r5, r4 - 1205e: f045 0501 orr.w r5, r5, #1 - 12062: 605d str r5, [r3, #4] - 12064: 6813 ldr r3, [r2, #0] - 12066: 4630 mov r0, r6 - 12068: 1b1b subs r3, r3, r4 - 1206a: 6013 str r3, [r2, #0] - 1206c: f7fe fae6 bl 1063c <__malloc_unlock> - 12070: 2001 movs r0, #1 - 12072: bdf8 pop {r3, r4, r5, r6, r7, pc} - 12074: 2100 movs r1, #0 - 12076: 4630 mov r0, r6 - 12078: f7ff fc66 bl 11948 <_sbrk_r> - 1207c: 68ba ldr r2, [r7, #8] - 1207e: 1a83 subs r3, r0, r2 - 12080: 2b0f cmp r3, #15 - 12082: ddde ble.n 12042 <_malloc_trim_r+0x3e> - 12084: f043 0301 orr.w r3, r3, #1 - 12088: 6053 str r3, [r2, #4] - 1208a: 4b05 ldr r3, [pc, #20] ; (120a0 <_malloc_trim_r+0x9c>) - 1208c: 4903 ldr r1, [pc, #12] ; (1209c <_malloc_trim_r+0x98>) - 1208e: 681b ldr r3, [r3, #0] - 12090: 1ac0 subs r0, r0, r3 - 12092: 6008 str r0, [r1, #0] - 12094: e7d5 b.n 12042 <_malloc_trim_r+0x3e> - 12096: bf00 nop - 12098: 1fff8900 .word 0x1fff8900 - 1209c: 1fff9a68 .word 0x1fff9a68 - 120a0: 1fff8d08 .word 0x1fff8d08 - -000120a4 <_free_r>: - 120a4: 2900 cmp r1, #0 - 120a6: d061 beq.n 1216c <_free_r+0xc8> - 120a8: b5f8 push {r3, r4, r5, r6, r7, lr} - 120aa: 460c mov r4, r1 - 120ac: 4606 mov r6, r0 - 120ae: f7fe fabf bl 10630 <__malloc_lock> - 120b2: f854 2c04 ldr.w r2, [r4, #-4] - 120b6: 4f7b ldr r7, [pc, #492] ; (122a4 <_free_r+0x200>) - 120b8: f1a4 0508 sub.w r5, r4, #8 - 120bc: f022 0101 bic.w r1, r2, #1 - 120c0: eb05 0c01 add.w ip, r5, r1 - 120c4: 68b8 ldr r0, [r7, #8] - 120c6: f8dc 3004 ldr.w r3, [ip, #4] - 120ca: 4560 cmp r0, ip - 120cc: f023 0303 bic.w r3, r3, #3 - 120d0: f000 808b beq.w 121ea <_free_r+0x146> - 120d4: 07d2 lsls r2, r2, #31 - 120d6: f8cc 3004 str.w r3, [ip, #4] - 120da: d432 bmi.n 12142 <_free_r+0x9e> - 120dc: f854 2c08 ldr.w r2, [r4, #-8] - 120e0: 1aad subs r5, r5, r2 - 120e2: 4411 add r1, r2 - 120e4: 68aa ldr r2, [r5, #8] - 120e6: f107 0008 add.w r0, r7, #8 - 120ea: 4282 cmp r2, r0 - 120ec: d06a beq.n 121c4 <_free_r+0x120> - 120ee: eb0c 0403 add.w r4, ip, r3 - 120f2: f8d4 e004 ldr.w lr, [r4, #4] - 120f6: 68ec ldr r4, [r5, #12] - 120f8: 60d4 str r4, [r2, #12] - 120fa: f01e 0f01 tst.w lr, #1 - 120fe: 60a2 str r2, [r4, #8] - 12100: f000 8097 beq.w 12232 <_free_r+0x18e> - 12104: f041 0301 orr.w r3, r1, #1 - 12108: 606b str r3, [r5, #4] - 1210a: f8cc 1000 str.w r1, [ip] - 1210e: f5b1 7f00 cmp.w r1, #512 ; 0x200 - 12112: d235 bcs.n 12180 <_free_r+0xdc> - 12114: 6878 ldr r0, [r7, #4] - 12116: 08cb lsrs r3, r1, #3 - 12118: 2201 movs r2, #1 - 1211a: 0949 lsrs r1, r1, #5 - 1211c: 3301 adds r3, #1 - 1211e: 408a lsls r2, r1 - 12120: 4302 orrs r2, r0 - 12122: f857 1033 ldr.w r1, [r7, r3, lsl #3] - 12126: 607a str r2, [r7, #4] - 12128: eb07 02c3 add.w r2, r7, r3, lsl #3 - 1212c: 3a08 subs r2, #8 - 1212e: e9c5 1202 strd r1, r2, [r5, #8] - 12132: f847 5033 str.w r5, [r7, r3, lsl #3] - 12136: 60cd str r5, [r1, #12] - 12138: 4630 mov r0, r6 - 1213a: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - 1213e: f7fe ba7d b.w 1063c <__malloc_unlock> - 12142: eb0c 0203 add.w r2, ip, r3 - 12146: 6852 ldr r2, [r2, #4] - 12148: 07d0 lsls r0, r2, #31 - 1214a: d410 bmi.n 1216e <_free_r+0xca> - 1214c: 4419 add r1, r3 - 1214e: f107 0008 add.w r0, r7, #8 - 12152: f8dc 3008 ldr.w r3, [ip, #8] - 12156: 4283 cmp r3, r0 - 12158: d073 beq.n 12242 <_free_r+0x19e> - 1215a: f8dc 200c ldr.w r2, [ip, #12] - 1215e: 60da str r2, [r3, #12] - 12160: 6093 str r3, [r2, #8] - 12162: f041 0301 orr.w r3, r1, #1 - 12166: 606b str r3, [r5, #4] - 12168: 5069 str r1, [r5, r1] - 1216a: e7d0 b.n 1210e <_free_r+0x6a> - 1216c: 4770 bx lr - 1216e: f041 0301 orr.w r3, r1, #1 - 12172: f5b1 7f00 cmp.w r1, #512 ; 0x200 - 12176: f844 3c04 str.w r3, [r4, #-4] - 1217a: f8cc 1000 str.w r1, [ip] - 1217e: d3c9 bcc.n 12114 <_free_r+0x70> - 12180: f5b1 6f20 cmp.w r1, #2560 ; 0xa00 - 12184: ea4f 2351 mov.w r3, r1, lsr #9 - 12188: d248 bcs.n 1221c <_free_r+0x178> - 1218a: 098b lsrs r3, r1, #6 - 1218c: f103 0039 add.w r0, r3, #57 ; 0x39 - 12190: f103 0238 add.w r2, r3, #56 ; 0x38 - 12194: 00c3 lsls r3, r0, #3 - 12196: 18f8 adds r0, r7, r3 - 12198: 58fb ldr r3, [r7, r3] - 1219a: 3808 subs r0, #8 - 1219c: 4298 cmp r0, r3 - 1219e: d059 beq.n 12254 <_free_r+0x1b0> - 121a0: 685a ldr r2, [r3, #4] - 121a2: f022 0203 bic.w r2, r2, #3 - 121a6: 428a cmp r2, r1 - 121a8: d902 bls.n 121b0 <_free_r+0x10c> - 121aa: 689b ldr r3, [r3, #8] - 121ac: 4298 cmp r0, r3 - 121ae: d1f7 bne.n 121a0 <_free_r+0xfc> - 121b0: 68d8 ldr r0, [r3, #12] - 121b2: e9c5 3002 strd r3, r0, [r5, #8] - 121b6: 6085 str r5, [r0, #8] - 121b8: 60dd str r5, [r3, #12] - 121ba: 4630 mov r0, r6 - 121bc: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - 121c0: f7fe ba3c b.w 1063c <__malloc_unlock> - 121c4: eb0c 0203 add.w r2, ip, r3 - 121c8: 6852 ldr r2, [r2, #4] - 121ca: 07d2 lsls r2, r2, #31 - 121cc: d463 bmi.n 12296 <_free_r+0x1f2> - 121ce: 440b add r3, r1 - 121d0: e9dc 1202 ldrd r1, r2, [ip, #8] - 121d4: 60ca str r2, [r1, #12] - 121d6: 6091 str r1, [r2, #8] - 121d8: f043 0201 orr.w r2, r3, #1 - 121dc: 606a str r2, [r5, #4] - 121de: 4630 mov r0, r6 - 121e0: 50eb str r3, [r5, r3] - 121e2: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - 121e6: f7fe ba29 b.w 1063c <__malloc_unlock> - 121ea: 440b add r3, r1 - 121ec: 07d1 lsls r1, r2, #31 - 121ee: d407 bmi.n 12200 <_free_r+0x15c> - 121f0: f854 2c08 ldr.w r2, [r4, #-8] - 121f4: 1aad subs r5, r5, r2 - 121f6: 4413 add r3, r2 - 121f8: e9d5 1202 ldrd r1, r2, [r5, #8] - 121fc: 60ca str r2, [r1, #12] - 121fe: 6091 str r1, [r2, #8] - 12200: f043 0201 orr.w r2, r3, #1 - 12204: 606a str r2, [r5, #4] - 12206: 4a28 ldr r2, [pc, #160] ; (122a8 <_free_r+0x204>) - 12208: 60bd str r5, [r7, #8] - 1220a: 6812 ldr r2, [r2, #0] - 1220c: 429a cmp r2, r3 - 1220e: d893 bhi.n 12138 <_free_r+0x94> - 12210: 4b26 ldr r3, [pc, #152] ; (122ac <_free_r+0x208>) - 12212: 4630 mov r0, r6 - 12214: 6819 ldr r1, [r3, #0] - 12216: f7ff fef5 bl 12004 <_malloc_trim_r> - 1221a: e78d b.n 12138 <_free_r+0x94> - 1221c: 2b14 cmp r3, #20 - 1221e: d90a bls.n 12236 <_free_r+0x192> - 12220: 2b54 cmp r3, #84 ; 0x54 - 12222: d81f bhi.n 12264 <_free_r+0x1c0> - 12224: 0b0b lsrs r3, r1, #12 - 12226: f103 006f add.w r0, r3, #111 ; 0x6f - 1222a: f103 026e add.w r2, r3, #110 ; 0x6e - 1222e: 00c3 lsls r3, r0, #3 - 12230: e7b1 b.n 12196 <_free_r+0xf2> - 12232: 4419 add r1, r3 - 12234: e78d b.n 12152 <_free_r+0xae> - 12236: f103 005c add.w r0, r3, #92 ; 0x5c - 1223a: f103 025b add.w r2, r3, #91 ; 0x5b - 1223e: 00c3 lsls r3, r0, #3 - 12240: e7a9 b.n 12196 <_free_r+0xf2> - 12242: f041 0301 orr.w r3, r1, #1 - 12246: e9c7 5504 strd r5, r5, [r7, #16] - 1224a: e9c5 0002 strd r0, r0, [r5, #8] - 1224e: 606b str r3, [r5, #4] - 12250: 5069 str r1, [r5, r1] - 12252: e771 b.n 12138 <_free_r+0x94> - 12254: 6879 ldr r1, [r7, #4] - 12256: 1092 asrs r2, r2, #2 - 12258: 2401 movs r4, #1 - 1225a: fa04 f202 lsl.w r2, r4, r2 - 1225e: 430a orrs r2, r1 - 12260: 607a str r2, [r7, #4] - 12262: e7a6 b.n 121b2 <_free_r+0x10e> - 12264: f5b3 7faa cmp.w r3, #340 ; 0x154 - 12268: d806 bhi.n 12278 <_free_r+0x1d4> - 1226a: 0bcb lsrs r3, r1, #15 - 1226c: f103 0078 add.w r0, r3, #120 ; 0x78 - 12270: f103 0277 add.w r2, r3, #119 ; 0x77 - 12274: 00c3 lsls r3, r0, #3 - 12276: e78e b.n 12196 <_free_r+0xf2> - 12278: f240 5254 movw r2, #1364 ; 0x554 - 1227c: 4293 cmp r3, r2 - 1227e: d806 bhi.n 1228e <_free_r+0x1ea> - 12280: 0c8b lsrs r3, r1, #18 - 12282: f103 007d add.w r0, r3, #125 ; 0x7d - 12286: f103 027c add.w r2, r3, #124 ; 0x7c - 1228a: 00c3 lsls r3, r0, #3 - 1228c: e783 b.n 12196 <_free_r+0xf2> - 1228e: f44f 737e mov.w r3, #1016 ; 0x3f8 - 12292: 227e movs r2, #126 ; 0x7e - 12294: e77f b.n 12196 <_free_r+0xf2> - 12296: f041 0301 orr.w r3, r1, #1 - 1229a: 606b str r3, [r5, #4] - 1229c: f8cc 1000 str.w r1, [ip] - 122a0: e74a b.n 12138 <_free_r+0x94> - 122a2: bf00 nop - 122a4: 1fff8900 .word 0x1fff8900 - 122a8: 1fff8d0c .word 0x1fff8d0c - 122ac: 1fff9a98 .word 0x1fff9a98 - -000122b0 <__ascii_mbtowc>: - 122b0: b082 sub sp, #8 - 122b2: b149 cbz r1, 122c8 <__ascii_mbtowc+0x18> - 122b4: b15a cbz r2, 122ce <__ascii_mbtowc+0x1e> - 122b6: b16b cbz r3, 122d4 <__ascii_mbtowc+0x24> - 122b8: 7813 ldrb r3, [r2, #0] - 122ba: 600b str r3, [r1, #0] - 122bc: 7812 ldrb r2, [r2, #0] - 122be: 1e10 subs r0, r2, #0 - 122c0: bf18 it ne - 122c2: 2001 movne r0, #1 - 122c4: b002 add sp, #8 - 122c6: 4770 bx lr - 122c8: a901 add r1, sp, #4 - 122ca: 2a00 cmp r2, #0 - 122cc: d1f3 bne.n 122b6 <__ascii_mbtowc+0x6> - 122ce: 4610 mov r0, r2 - 122d0: b002 add sp, #8 - 122d2: 4770 bx lr - 122d4: f06f 0001 mvn.w r0, #1 - 122d8: e7f4 b.n 122c4 <__ascii_mbtowc+0x14> - 122da: bf00 nop - -000122dc <_svfprintf_r>: - 122dc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 122e0: b0d9 sub sp, #356 ; 0x164 - 122e2: 460c mov r4, r1 - 122e4: 910c str r1, [sp, #48] ; 0x30 - 122e6: 4690 mov r8, r2 - 122e8: 930e str r3, [sp, #56] ; 0x38 - 122ea: 4682 mov sl, r0 - 122ec: f002 fafa bl 148e4 <_localeconv_r> - 122f0: 6803 ldr r3, [r0, #0] - 122f2: 9319 str r3, [sp, #100] ; 0x64 - 122f4: 4618 mov r0, r3 - 122f6: f7ff fdc3 bl 11e80 - 122fa: 2208 movs r2, #8 - 122fc: 9017 str r0, [sp, #92] ; 0x5c - 122fe: 2100 movs r1, #0 - 12300: a828 add r0, sp, #160 ; 0xa0 - 12302: f7fe ff37 bl 11174 - 12306: 89a3 ldrh r3, [r4, #12] - 12308: 061f lsls r7, r3, #24 - 1230a: d503 bpl.n 12314 <_svfprintf_r+0x38> - 1230c: 6923 ldr r3, [r4, #16] - 1230e: 2b00 cmp r3, #0 - 12310: f000 873f beq.w 13192 <_svfprintf_r+0xeb6> - 12314: 2300 movs r3, #0 - 12316: aa2f add r2, sp, #188 ; 0xbc - 12318: 2400 movs r4, #0 - 1231a: e9cd 332d strd r3, r3, [sp, #180] ; 0xb4 - 1231e: e9cd 331a strd r3, r3, [sp, #104] ; 0x68 - 12322: e9cd 331c strd r3, r3, [sp, #112] ; 0x70 - 12326: 9313 str r3, [sp, #76] ; 0x4c - 12328: 9318 str r3, [sp, #96] ; 0x60 - 1232a: 9309 str r3, [sp, #36] ; 0x24 - 1232c: 2300 movs r3, #0 - 1232e: e9cd 3414 strd r3, r4, [sp, #80] ; 0x50 - 12332: 922c str r2, [sp, #176] ; 0xb0 - 12334: 4691 mov r9, r2 - 12336: 4644 mov r4, r8 - 12338: 46a0 mov r8, r4 - 1233a: 4b78 ldr r3, [pc, #480] ; (1251c <_svfprintf_r+0x240>) - 1233c: f8d3 50e4 ldr.w r5, [r3, #228] ; 0xe4 - 12340: f7ff fae6 bl 11910 <__locale_mb_cur_max> - 12344: 4603 mov r3, r0 - 12346: a828 add r0, sp, #160 ; 0xa0 - 12348: 9000 str r0, [sp, #0] - 1234a: 4642 mov r2, r8 - 1234c: a924 add r1, sp, #144 ; 0x90 - 1234e: 4650 mov r0, sl - 12350: 47a8 blx r5 - 12352: 2800 cmp r0, #0 - 12354: f000 80b0 beq.w 124b8 <_svfprintf_r+0x1dc> - 12358: f2c0 80a6 blt.w 124a8 <_svfprintf_r+0x1cc> - 1235c: 9a24 ldr r2, [sp, #144] ; 0x90 - 1235e: 2a25 cmp r2, #37 ; 0x25 - 12360: 4603 mov r3, r0 - 12362: d001 beq.n 12368 <_svfprintf_r+0x8c> - 12364: 4498 add r8, r3 - 12366: e7e8 b.n 1233a <_svfprintf_r+0x5e> - 12368: ebb8 0704 subs.w r7, r8, r4 - 1236c: 4606 mov r6, r0 - 1236e: f040 80a7 bne.w 124c0 <_svfprintf_r+0x1e4> - 12372: 2300 movs r3, #0 - 12374: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 12378: f88d 3087 strb.w r3, [sp, #135] ; 0x87 - 1237c: 469b mov fp, r3 - 1237e: 930b str r3, [sp, #44] ; 0x2c - 12380: f108 0801 add.w r8, r8, #1 - 12384: f898 3000 ldrb.w r3, [r8] - 12388: 9208 str r2, [sp, #32] - 1238a: 252b movs r5, #43 ; 0x2b - 1238c: 2620 movs r6, #32 - 1238e: f108 0801 add.w r8, r8, #1 - 12392: f1a3 0220 sub.w r2, r3, #32 - 12396: 2a5a cmp r2, #90 ; 0x5a - 12398: f200 80c2 bhi.w 12520 <_svfprintf_r+0x244> - 1239c: e8df f012 tbh [pc, r2, lsl #1] - 123a0: 00c002e6 .word 0x00c002e6 - 123a4: 02e100c0 .word 0x02e100c0 - 123a8: 00c000c0 .word 0x00c000c0 - 123ac: 006a00c0 .word 0x006a00c0 - 123b0: 00c000c0 .word 0x00c000c0 - 123b4: 02840208 .word 0x02840208 - 123b8: 021300c0 .word 0x021300c0 - 123bc: 00c002c7 .word 0x00c002c7 - 123c0: 005b02c2 .word 0x005b02c2 - 123c4: 005b005b .word 0x005b005b - 123c8: 005b005b .word 0x005b005b - 123cc: 005b005b .word 0x005b005b - 123d0: 005b005b .word 0x005b005b - 123d4: 00c000c0 .word 0x00c000c0 - 123d8: 00c000c0 .word 0x00c000c0 - 123dc: 00c000c0 .word 0x00c000c0 - 123e0: 014300c0 .word 0x014300c0 - 123e4: 018900c0 .word 0x018900c0 - 123e8: 0143021d .word 0x0143021d - 123ec: 01430143 .word 0x01430143 - 123f0: 00c000c0 .word 0x00c000c0 - 123f4: 00c000c0 .word 0x00c000c0 - 123f8: 00c00218 .word 0x00c00218 - 123fc: 029600c0 .word 0x029600c0 - 12400: 00c000c0 .word 0x00c000c0 - 12404: 01b100c0 .word 0x01b100c0 - 12408: 02a900c0 .word 0x02a900c0 - 1240c: 00c000c0 .word 0x00c000c0 - 12410: 00c006dd .word 0x00c006dd - 12414: 00c000c0 .word 0x00c000c0 - 12418: 00c000c0 .word 0x00c000c0 - 1241c: 00c000c0 .word 0x00c000c0 - 12420: 014300c0 .word 0x014300c0 - 12424: 018900c0 .word 0x018900c0 - 12428: 014301e2 .word 0x014301e2 - 1242c: 01430143 .word 0x01430143 - 12430: 01e20277 .word 0x01e20277 - 12434: 00c0007f .word 0x00c0007f - 12438: 00c00289 .word 0x00c00289 - 1243c: 06da025f .word 0x06da025f - 12440: 007f0232 .word 0x007f0232 - 12444: 01b100c0 .word 0x01b100c0 - 12448: 06b4007c .word 0x06b4007c - 1244c: 00c000c0 .word 0x00c000c0 - 12450: 00c006b8 .word 0x00c006b8 - 12454: 007c .short 0x007c - 12456: f1a3 0230 sub.w r2, r3, #48 ; 0x30 - 1245a: 2100 movs r1, #0 - 1245c: f818 3b01 ldrb.w r3, [r8], #1 - 12460: eb01 0181 add.w r1, r1, r1, lsl #2 - 12464: eb02 0141 add.w r1, r2, r1, lsl #1 - 12468: f1a3 0230 sub.w r2, r3, #48 ; 0x30 - 1246c: 2a09 cmp r2, #9 - 1246e: d9f5 bls.n 1245c <_svfprintf_r+0x180> - 12470: 910b str r1, [sp, #44] ; 0x2c - 12472: e78e b.n 12392 <_svfprintf_r+0xb6> - 12474: 4650 mov r0, sl - 12476: f002 fa35 bl 148e4 <_localeconv_r> - 1247a: 6843 ldr r3, [r0, #4] - 1247c: 931c str r3, [sp, #112] ; 0x70 - 1247e: 4618 mov r0, r3 - 12480: f7ff fcfe bl 11e80 - 12484: 901d str r0, [sp, #116] ; 0x74 - 12486: 4607 mov r7, r0 - 12488: 4650 mov r0, sl - 1248a: f002 fa2b bl 148e4 <_localeconv_r> - 1248e: 6883 ldr r3, [r0, #8] - 12490: 931a str r3, [sp, #104] ; 0x68 - 12492: 2f00 cmp r7, #0 - 12494: f040 85b1 bne.w 12ffa <_svfprintf_r+0xd1e> - 12498: f898 3000 ldrb.w r3, [r8] - 1249c: e777 b.n 1238e <_svfprintf_r+0xb2> - 1249e: f898 3000 ldrb.w r3, [r8] - 124a2: f04b 0b20 orr.w fp, fp, #32 - 124a6: e772 b.n 1238e <_svfprintf_r+0xb2> - 124a8: 2208 movs r2, #8 - 124aa: 2100 movs r1, #0 - 124ac: a828 add r0, sp, #160 ; 0xa0 - 124ae: f7fe fe61 bl 11174 - 124b2: 2301 movs r3, #1 - 124b4: 4498 add r8, r3 - 124b6: e740 b.n 1233a <_svfprintf_r+0x5e> - 124b8: ebb8 0704 subs.w r7, r8, r4 - 124bc: 4606 mov r6, r0 - 124be: d011 beq.n 124e4 <_svfprintf_r+0x208> - 124c0: 9b2e ldr r3, [sp, #184] ; 0xb8 - 124c2: 443b add r3, r7 - 124c4: 932e str r3, [sp, #184] ; 0xb8 - 124c6: 9b2d ldr r3, [sp, #180] ; 0xb4 - 124c8: 3301 adds r3, #1 - 124ca: 2b07 cmp r3, #7 - 124cc: e9c9 4700 strd r4, r7, [r9] - 124d0: 932d str r3, [sp, #180] ; 0xb4 - 124d2: dc19 bgt.n 12508 <_svfprintf_r+0x22c> - 124d4: f109 0908 add.w r9, r9, #8 - 124d8: 9b09 ldr r3, [sp, #36] ; 0x24 - 124da: 443b add r3, r7 - 124dc: 9309 str r3, [sp, #36] ; 0x24 - 124de: 2e00 cmp r6, #0 - 124e0: f47f af47 bne.w 12372 <_svfprintf_r+0x96> - 124e4: 9b2e ldr r3, [sp, #184] ; 0xb8 - 124e6: 2b00 cmp r3, #0 - 124e8: f041 8201 bne.w 138ee <_svfprintf_r+0x1612> - 124ec: 9b0c ldr r3, [sp, #48] ; 0x30 - 124ee: f9b3 300c ldrsh.w r3, [r3, #12] - 124f2: f013 0f40 tst.w r3, #64 ; 0x40 - 124f6: 9b09 ldr r3, [sp, #36] ; 0x24 - 124f8: bf18 it ne - 124fa: f04f 33ff movne.w r3, #4294967295 ; 0xffffffff - 124fe: 9309 str r3, [sp, #36] ; 0x24 - 12500: 9809 ldr r0, [sp, #36] ; 0x24 - 12502: b059 add sp, #356 ; 0x164 - 12504: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 12508: 990c ldr r1, [sp, #48] ; 0x30 - 1250a: aa2c add r2, sp, #176 ; 0xb0 - 1250c: 4650 mov r0, sl - 1250e: f003 fb5f bl 15bd0 <__ssprint_r> - 12512: 2800 cmp r0, #0 - 12514: d1ea bne.n 124ec <_svfprintf_r+0x210> - 12516: f10d 09bc add.w r9, sp, #188 ; 0xbc - 1251a: e7dd b.n 124d8 <_svfprintf_r+0x1fc> - 1251c: 1fff8d1c .word 0x1fff8d1c - 12520: 9310 str r3, [sp, #64] ; 0x40 - 12522: 2b00 cmp r3, #0 - 12524: d0de beq.n 124e4 <_svfprintf_r+0x208> - 12526: 2200 movs r2, #0 - 12528: f88d 30fc strb.w r3, [sp, #252] ; 0xfc - 1252c: 2301 movs r3, #1 - 1252e: f88d 2087 strb.w r2, [sp, #135] ; 0x87 - 12532: 9307 str r3, [sp, #28] - 12534: 920d str r2, [sp, #52] ; 0x34 - 12536: 930a str r3, [sp, #40] ; 0x28 - 12538: 9208 str r2, [sp, #32] - 1253a: 9212 str r2, [sp, #72] ; 0x48 - 1253c: 9216 str r2, [sp, #88] ; 0x58 - 1253e: 9211 str r2, [sp, #68] ; 0x44 - 12540: ac3f add r4, sp, #252 ; 0xfc - 12542: f01b 0302 ands.w r3, fp, #2 - 12546: d002 beq.n 1254e <_svfprintf_r+0x272> - 12548: 9907 ldr r1, [sp, #28] - 1254a: 3102 adds r1, #2 - 1254c: 9107 str r1, [sp, #28] - 1254e: f01b 0184 ands.w r1, fp, #132 ; 0x84 - 12552: 910f str r1, [sp, #60] ; 0x3c - 12554: d105 bne.n 12562 <_svfprintf_r+0x286> - 12556: 990b ldr r1, [sp, #44] ; 0x2c - 12558: 9807 ldr r0, [sp, #28] - 1255a: 1a0f subs r7, r1, r0 - 1255c: 2f00 cmp r7, #0 - 1255e: f300 8382 bgt.w 12c66 <_svfprintf_r+0x98a> - 12562: 9e2e ldr r6, [sp, #184] ; 0xb8 - 12564: b182 cbz r2, 12588 <_svfprintf_r+0x2ac> - 12566: 2201 movs r2, #1 - 12568: f8c9 2004 str.w r2, [r9, #4] - 1256c: 9a2d ldr r2, [sp, #180] ; 0xb4 - 1256e: 3201 adds r2, #1 - 12570: 3601 adds r6, #1 - 12572: f10d 0187 add.w r1, sp, #135 ; 0x87 - 12576: 2a07 cmp r2, #7 - 12578: 962e str r6, [sp, #184] ; 0xb8 - 1257a: 922d str r2, [sp, #180] ; 0xb4 - 1257c: f8c9 1000 str.w r1, [r9] - 12580: f300 83bd bgt.w 12cfe <_svfprintf_r+0xa22> - 12584: f109 0908 add.w r9, r9, #8 - 12588: b183 cbz r3, 125ac <_svfprintf_r+0x2d0> - 1258a: 9b2d ldr r3, [sp, #180] ; 0xb4 - 1258c: aa22 add r2, sp, #136 ; 0x88 - 1258e: 3301 adds r3, #1 - 12590: 3602 adds r6, #2 - 12592: f8c9 2000 str.w r2, [r9] - 12596: 2b07 cmp r3, #7 - 12598: f04f 0202 mov.w r2, #2 - 1259c: 962e str r6, [sp, #184] ; 0xb8 - 1259e: 932d str r3, [sp, #180] ; 0xb4 - 125a0: f8c9 2004 str.w r2, [r9, #4] - 125a4: f300 83c0 bgt.w 12d28 <_svfprintf_r+0xa4c> - 125a8: f109 0908 add.w r9, r9, #8 - 125ac: 9b0f ldr r3, [sp, #60] ; 0x3c - 125ae: 2b80 cmp r3, #128 ; 0x80 - 125b0: f000 8281 beq.w 12ab6 <_svfprintf_r+0x7da> - 125b4: 9b08 ldr r3, [sp, #32] - 125b6: 9a0a ldr r2, [sp, #40] ; 0x28 - 125b8: 1a9f subs r7, r3, r2 - 125ba: 2f00 cmp r7, #0 - 125bc: f300 82bc bgt.w 12b38 <_svfprintf_r+0x85c> - 125c0: f41b 7f80 tst.w fp, #256 ; 0x100 - 125c4: f040 821e bne.w 12a04 <_svfprintf_r+0x728> - 125c8: 9b0a ldr r3, [sp, #40] ; 0x28 - 125ca: f8c9 3004 str.w r3, [r9, #4] - 125ce: 441e add r6, r3 - 125d0: 9b2d ldr r3, [sp, #180] ; 0xb4 - 125d2: f8c9 4000 str.w r4, [r9] - 125d6: 3301 adds r3, #1 - 125d8: 2b07 cmp r3, #7 - 125da: 962e str r6, [sp, #184] ; 0xb8 - 125dc: 932d str r3, [sp, #180] ; 0xb4 - 125de: f300 8337 bgt.w 12c50 <_svfprintf_r+0x974> - 125e2: f109 0908 add.w r9, r9, #8 - 125e6: f01b 0f04 tst.w fp, #4 - 125ea: d005 beq.n 125f8 <_svfprintf_r+0x31c> - 125ec: 9b0b ldr r3, [sp, #44] ; 0x2c - 125ee: 9a07 ldr r2, [sp, #28] - 125f0: 1a9c subs r4, r3, r2 - 125f2: 2c00 cmp r4, #0 - 125f4: f300 83a4 bgt.w 12d40 <_svfprintf_r+0xa64> - 125f8: 9b09 ldr r3, [sp, #36] ; 0x24 - 125fa: 9a0b ldr r2, [sp, #44] ; 0x2c - 125fc: 9907 ldr r1, [sp, #28] - 125fe: 428a cmp r2, r1 - 12600: bfac ite ge - 12602: 189b addge r3, r3, r2 - 12604: 185b addlt r3, r3, r1 - 12606: 9309 str r3, [sp, #36] ; 0x24 - 12608: 2e00 cmp r6, #0 - 1260a: f040 82ca bne.w 12ba2 <_svfprintf_r+0x8c6> - 1260e: 2300 movs r3, #0 - 12610: 932d str r3, [sp, #180] ; 0xb4 - 12612: 9b0d ldr r3, [sp, #52] ; 0x34 - 12614: b11b cbz r3, 1261e <_svfprintf_r+0x342> - 12616: 990d ldr r1, [sp, #52] ; 0x34 - 12618: 4650 mov r0, sl - 1261a: f7ff fd43 bl 120a4 <_free_r> - 1261e: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12622: 4644 mov r4, r8 - 12624: e688 b.n 12338 <_svfprintf_r+0x5c> - 12626: 9310 str r3, [sp, #64] ; 0x40 - 12628: 9b0e ldr r3, [sp, #56] ; 0x38 - 1262a: 3307 adds r3, #7 - 1262c: f023 0107 bic.w r1, r3, #7 - 12630: e8f1 2302 ldrd r2, r3, [r1], #8 - 12634: e9cd 2314 strd r2, r3, [sp, #80] ; 0x50 - 12638: e9dd 2314 ldrd r2, r3, [sp, #80] ; 0x50 - 1263c: f023 4500 bic.w r5, r3, #2147483648 ; 0x80000000 - 12640: 910e str r1, [sp, #56] ; 0x38 - 12642: 4616 mov r6, r2 - 12644: 4610 mov r0, r2 - 12646: 4bb3 ldr r3, [pc, #716] ; (12914 <_svfprintf_r+0x638>) - 12648: 4629 mov r1, r5 - 1264a: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 1264e: f7fd f96b bl f928 <__aeabi_dcmpun> - 12652: 2800 cmp r0, #0 - 12654: f040 84fc bne.w 13050 <_svfprintf_r+0xd74> - 12658: 4bae ldr r3, [pc, #696] ; (12914 <_svfprintf_r+0x638>) - 1265a: 4630 mov r0, r6 - 1265c: 4629 mov r1, r5 - 1265e: f04f 32ff mov.w r2, #4294967295 ; 0xffffffff - 12662: f7fd f943 bl f8ec <__aeabi_dcmple> - 12666: 2800 cmp r0, #0 - 12668: f040 84f2 bne.w 13050 <_svfprintf_r+0xd74> - 1266c: e9dd 0114 ldrd r0, r1, [sp, #80] ; 0x50 - 12670: 2200 movs r2, #0 - 12672: 2300 movs r3, #0 - 12674: f7fd f930 bl f8d8 <__aeabi_dcmplt> - 12678: 2800 cmp r0, #0 - 1267a: f041 8038 bne.w 136ee <_svfprintf_r+0x1412> - 1267e: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 12682: 4ca5 ldr r4, [pc, #660] ; (12918 <_svfprintf_r+0x63c>) - 12684: 4ba5 ldr r3, [pc, #660] ; (1291c <_svfprintf_r+0x640>) - 12686: f02b 0b80 bic.w fp, fp, #128 ; 0x80 - 1268a: 9910 ldr r1, [sp, #64] ; 0x40 - 1268c: 2947 cmp r1, #71 ; 0x47 - 1268e: bfc8 it gt - 12690: 461c movgt r4, r3 - 12692: 2300 movs r3, #0 - 12694: 2103 movs r1, #3 - 12696: 930d str r3, [sp, #52] ; 0x34 - 12698: 9107 str r1, [sp, #28] - 1269a: 910a str r1, [sp, #40] ; 0x28 - 1269c: 9308 str r3, [sp, #32] - 1269e: 9312 str r3, [sp, #72] ; 0x48 - 126a0: 9316 str r3, [sp, #88] ; 0x58 - 126a2: 9311 str r3, [sp, #68] ; 0x44 - 126a4: 2a00 cmp r2, #0 - 126a6: f43f af4c beq.w 12542 <_svfprintf_r+0x266> - 126aa: 9b07 ldr r3, [sp, #28] - 126ac: 3301 adds r3, #1 - 126ae: 9307 str r3, [sp, #28] - 126b0: e747 b.n 12542 <_svfprintf_r+0x266> - 126b2: 2b43 cmp r3, #67 ; 0x43 - 126b4: 9310 str r3, [sp, #64] ; 0x40 - 126b6: d003 beq.n 126c0 <_svfprintf_r+0x3e4> - 126b8: f01b 0f10 tst.w fp, #16 - 126bc: f000 8551 beq.w 13162 <_svfprintf_r+0xe86> - 126c0: 9e0e ldr r6, [sp, #56] ; 0x38 - 126c2: 2208 movs r2, #8 - 126c4: 2100 movs r1, #0 - 126c6: a82a add r0, sp, #168 ; 0xa8 - 126c8: ac3f add r4, sp, #252 ; 0xfc - 126ca: f7fe fd53 bl 11174 - 126ce: ab2a add r3, sp, #168 ; 0xa8 - 126d0: f856 2b04 ldr.w r2, [r6], #4 - 126d4: 4621 mov r1, r4 - 126d6: 4650 mov r0, sl - 126d8: f002 f9ac bl 14a34 <_wcrtomb_r> - 126dc: 4603 mov r3, r0 - 126de: 3301 adds r3, #1 - 126e0: 900a str r0, [sp, #40] ; 0x28 - 126e2: f001 82c3 beq.w 13c6c <_svfprintf_r+0x1990> - 126e6: 9b0a ldr r3, [sp, #40] ; 0x28 - 126e8: 960e str r6, [sp, #56] ; 0x38 - 126ea: ea23 73e3 bic.w r3, r3, r3, asr #31 - 126ee: 9307 str r3, [sp, #28] - 126f0: 2200 movs r2, #0 - 126f2: f88d 2087 strb.w r2, [sp, #135] ; 0x87 - 126f6: 920d str r2, [sp, #52] ; 0x34 - 126f8: 9208 str r2, [sp, #32] - 126fa: 9212 str r2, [sp, #72] ; 0x48 - 126fc: 9216 str r2, [sp, #88] ; 0x58 - 126fe: 9211 str r2, [sp, #68] ; 0x44 - 12700: e71f b.n 12542 <_svfprintf_r+0x266> - 12702: 9f0e ldr r7, [sp, #56] ; 0x38 - 12704: 9310 str r3, [sp, #64] ; 0x40 - 12706: f857 4b04 ldr.w r4, [r7], #4 - 1270a: 2300 movs r3, #0 - 1270c: f88d 3087 strb.w r3, [sp, #135] ; 0x87 - 12710: 2c00 cmp r4, #0 - 12712: f000 854d beq.w 131b0 <_svfprintf_r+0xed4> - 12716: 9b10 ldr r3, [sp, #64] ; 0x40 - 12718: 2b53 cmp r3, #83 ; 0x53 - 1271a: f000 86d4 beq.w 134c6 <_svfprintf_r+0x11ea> - 1271e: f01b 0310 ands.w r3, fp, #16 - 12722: 9311 str r3, [sp, #68] ; 0x44 - 12724: f040 86cf bne.w 134c6 <_svfprintf_r+0x11ea> - 12728: 9b08 ldr r3, [sp, #32] - 1272a: 1c5d adds r5, r3, #1 - 1272c: f001 80cc beq.w 138c8 <_svfprintf_r+0x15ec> - 12730: 9911 ldr r1, [sp, #68] ; 0x44 - 12732: 461a mov r2, r3 - 12734: 4620 mov r0, r4 - 12736: f7ff fb3b bl 11db0 - 1273a: 900d str r0, [sp, #52] ; 0x34 - 1273c: 2800 cmp r0, #0 - 1273e: f001 8351 beq.w 13de4 <_svfprintf_r+0x1b08> - 12742: 9b0d ldr r3, [sp, #52] ; 0x34 - 12744: 9911 ldr r1, [sp, #68] ; 0x44 - 12746: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 1274a: 970e str r7, [sp, #56] ; 0x38 - 1274c: 1b1b subs r3, r3, r4 - 1274e: 930a str r3, [sp, #40] ; 0x28 - 12750: ea23 73e3 bic.w r3, r3, r3, asr #31 - 12754: 9307 str r3, [sp, #28] - 12756: 2373 movs r3, #115 ; 0x73 - 12758: 9108 str r1, [sp, #32] - 1275a: 9112 str r1, [sp, #72] ; 0x48 - 1275c: 9116 str r1, [sp, #88] ; 0x58 - 1275e: 910d str r1, [sp, #52] ; 0x34 - 12760: 9310 str r3, [sp, #64] ; 0x40 - 12762: e79f b.n 126a4 <_svfprintf_r+0x3c8> - 12764: f01b 0f20 tst.w fp, #32 - 12768: 9310 str r3, [sp, #64] ; 0x40 - 1276a: 9b0e ldr r3, [sp, #56] ; 0x38 - 1276c: d03c beq.n 127e8 <_svfprintf_r+0x50c> - 1276e: 3307 adds r3, #7 - 12770: f023 0307 bic.w r3, r3, #7 - 12774: 461a mov r2, r3 - 12776: 4611 mov r1, r2 - 12778: 685b ldr r3, [r3, #4] - 1277a: f851 2b08 ldr.w r2, [r1], #8 - 1277e: 910e str r1, [sp, #56] ; 0x38 - 12780: 4619 mov r1, r3 - 12782: 2b00 cmp r3, #0 - 12784: f2c0 8401 blt.w 12f8a <_svfprintf_r+0xcae> - 12788: 9b08 ldr r3, [sp, #32] - 1278a: 3301 adds r3, #1 - 1278c: f000 82a8 beq.w 12ce0 <_svfprintf_r+0xa04> - 12790: ea52 0301 orrs.w r3, r2, r1 - 12794: f02b 0580 bic.w r5, fp, #128 ; 0x80 - 12798: f040 82a3 bne.w 12ce2 <_svfprintf_r+0xa06> - 1279c: 9b08 ldr r3, [sp, #32] - 1279e: 2b00 cmp r3, #0 - 127a0: f040 82a4 bne.w 12cec <_svfprintf_r+0xa10> - 127a4: 46ab mov fp, r5 - 127a6: 2300 movs r3, #0 - 127a8: 9308 str r3, [sp, #32] - 127aa: 930a str r3, [sp, #40] ; 0x28 - 127ac: ac58 add r4, sp, #352 ; 0x160 - 127ae: e0ff b.n 129b0 <_svfprintf_r+0x6d4> - 127b0: 9b0e ldr r3, [sp, #56] ; 0x38 - 127b2: f853 2b04 ldr.w r2, [r3], #4 - 127b6: 920b str r2, [sp, #44] ; 0x2c - 127b8: 2a00 cmp r2, #0 - 127ba: f280 840c bge.w 12fd6 <_svfprintf_r+0xcfa> - 127be: 9a0b ldr r2, [sp, #44] ; 0x2c - 127c0: 930e str r3, [sp, #56] ; 0x38 - 127c2: 4252 negs r2, r2 - 127c4: 920b str r2, [sp, #44] ; 0x2c - 127c6: f898 3000 ldrb.w r3, [r8] - 127ca: f04b 0b04 orr.w fp, fp, #4 - 127ce: e5de b.n 1238e <_svfprintf_r+0xb2> - 127d0: f898 3000 ldrb.w r3, [r8] - 127d4: f04b 0b08 orr.w fp, fp, #8 - 127d8: e5d9 b.n 1238e <_svfprintf_r+0xb2> - 127da: f04b 0b10 orr.w fp, fp, #16 - 127de: f01b 0f20 tst.w fp, #32 - 127e2: 9310 str r3, [sp, #64] ; 0x40 - 127e4: 9b0e ldr r3, [sp, #56] ; 0x38 - 127e6: d1c2 bne.n 1276e <_svfprintf_r+0x492> - 127e8: f01b 0f10 tst.w fp, #16 - 127ec: f040 83fe bne.w 12fec <_svfprintf_r+0xd10> - 127f0: f01b 0f40 tst.w fp, #64 ; 0x40 - 127f4: f000 83f6 beq.w 12fe4 <_svfprintf_r+0xd08> - 127f8: f933 2b04 ldrsh.w r2, [r3], #4 - 127fc: 930e str r3, [sp, #56] ; 0x38 - 127fe: 17d1 asrs r1, r2, #31 - 12800: 460b mov r3, r1 - 12802: e7be b.n 12782 <_svfprintf_r+0x4a6> - 12804: 9b0e ldr r3, [sp, #56] ; 0x38 - 12806: f853 2b04 ldr.w r2, [r3], #4 - 1280a: 930e str r3, [sp, #56] ; 0x38 - 1280c: f647 0330 movw r3, #30768 ; 0x7830 - 12810: f8ad 3088 strh.w r3, [sp, #136] ; 0x88 - 12814: 2078 movs r0, #120 ; 0x78 - 12816: 4b42 ldr r3, [pc, #264] ; (12920 <_svfprintf_r+0x644>) - 12818: 9318 str r3, [sp, #96] ; 0x60 - 1281a: f04b 0502 orr.w r5, fp, #2 - 1281e: 2100 movs r1, #0 - 12820: 2302 movs r3, #2 - 12822: 9010 str r0, [sp, #64] ; 0x40 - 12824: 2000 movs r0, #0 - 12826: 9c08 ldr r4, [sp, #32] - 12828: f88d 0087 strb.w r0, [sp, #135] ; 0x87 - 1282c: 1c60 adds r0, r4, #1 - 1282e: f000 80a8 beq.w 12982 <_svfprintf_r+0x6a6> - 12832: ea52 0001 orrs.w r0, r2, r1 - 12836: f025 0b80 bic.w fp, r5, #128 ; 0x80 - 1283a: f040 80a1 bne.w 12980 <_svfprintf_r+0x6a4> - 1283e: 2c00 cmp r4, #0 - 12840: f040 8695 bne.w 1356e <_svfprintf_r+0x1292> - 12844: 2b00 cmp r3, #0 - 12846: d1ae bne.n 127a6 <_svfprintf_r+0x4ca> - 12848: f015 0301 ands.w r3, r5, #1 - 1284c: 930a str r3, [sp, #40] ; 0x28 - 1284e: f000 83c7 beq.w 12fe0 <_svfprintf_r+0xd04> - 12852: 2330 movs r3, #48 ; 0x30 - 12854: f88d 315f strb.w r3, [sp, #351] ; 0x15f - 12858: f20d 145f addw r4, sp, #351 ; 0x15f - 1285c: e0a8 b.n 129b0 <_svfprintf_r+0x6d4> - 1285e: f01b 0f20 tst.w fp, #32 - 12862: f040 83e5 bne.w 13030 <_svfprintf_r+0xd54> - 12866: f01b 0f10 tst.w fp, #16 - 1286a: f040 8686 bne.w 1357a <_svfprintf_r+0x129e> - 1286e: f01b 0f40 tst.w fp, #64 ; 0x40 - 12872: f040 877f bne.w 13774 <_svfprintf_r+0x1498> - 12876: f41b 7f00 tst.w fp, #512 ; 0x200 - 1287a: f000 867e beq.w 1357a <_svfprintf_r+0x129e> - 1287e: 9b0e ldr r3, [sp, #56] ; 0x38 - 12880: 9909 ldr r1, [sp, #36] ; 0x24 - 12882: f853 2b04 ldr.w r2, [r3], #4 - 12886: 930e str r3, [sp, #56] ; 0x38 - 12888: 7011 strb r1, [r2, #0] - 1288a: 4644 mov r4, r8 - 1288c: e554 b.n 12338 <_svfprintf_r+0x5c> - 1288e: f898 3000 ldrb.w r3, [r8] - 12892: 2b68 cmp r3, #104 ; 0x68 - 12894: bf03 ittte eq - 12896: f898 3001 ldrbeq.w r3, [r8, #1] - 1289a: f44b 7b00 orreq.w fp, fp, #512 ; 0x200 - 1289e: f108 0801 addeq.w r8, r8, #1 - 128a2: f04b 0b40 orrne.w fp, fp, #64 ; 0x40 - 128a6: e572 b.n 1238e <_svfprintf_r+0xb2> - 128a8: f898 3000 ldrb.w r3, [r8] - 128ac: f88d 5087 strb.w r5, [sp, #135] ; 0x87 - 128b0: e56d b.n 1238e <_svfprintf_r+0xb2> - 128b2: f898 3000 ldrb.w r3, [r8] - 128b6: 2b6c cmp r3, #108 ; 0x6c - 128b8: bf03 ittte eq - 128ba: f898 3001 ldrbeq.w r3, [r8, #1] - 128be: f04b 0b20 orreq.w fp, fp, #32 - 128c2: f108 0801 addeq.w r8, r8, #1 - 128c6: f04b 0b10 orrne.w fp, fp, #16 - 128ca: e560 b.n 1238e <_svfprintf_r+0xb2> - 128cc: 9310 str r3, [sp, #64] ; 0x40 - 128ce: f04b 0b10 orr.w fp, fp, #16 - 128d2: f01b 0120 ands.w r1, fp, #32 - 128d6: f000 834a beq.w 12f6e <_svfprintf_r+0xc92> - 128da: 9b0e ldr r3, [sp, #56] ; 0x38 - 128dc: 3307 adds r3, #7 - 128de: f023 0307 bic.w r3, r3, #7 - 128e2: 6859 ldr r1, [r3, #4] - 128e4: f853 2b08 ldr.w r2, [r3], #8 - 128e8: 930e str r3, [sp, #56] ; 0x38 - 128ea: f42b 6580 bic.w r5, fp, #1024 ; 0x400 - 128ee: 2300 movs r3, #0 - 128f0: e798 b.n 12824 <_svfprintf_r+0x548> - 128f2: 9310 str r3, [sp, #64] ; 0x40 - 128f4: f04b 0510 orr.w r5, fp, #16 - 128f8: f015 0120 ands.w r1, r5, #32 - 128fc: f000 8328 beq.w 12f50 <_svfprintf_r+0xc74> - 12900: 9b0e ldr r3, [sp, #56] ; 0x38 - 12902: 3307 adds r3, #7 - 12904: f023 0307 bic.w r3, r3, #7 - 12908: 6859 ldr r1, [r3, #4] - 1290a: f853 2b08 ldr.w r2, [r3], #8 - 1290e: 930e str r3, [sp, #56] ; 0x38 - 12910: 2301 movs r3, #1 - 12912: e787 b.n 12824 <_svfprintf_r+0x548> - 12914: 7fefffff .word 0x7fefffff - 12918: 00018914 .word 0x00018914 - 1291c: 00018918 .word 0x00018918 - 12920: 00018924 .word 0x00018924 - 12924: f898 3000 ldrb.w r3, [r8] - 12928: f04b 0b80 orr.w fp, fp, #128 ; 0x80 - 1292c: e52f b.n 1238e <_svfprintf_r+0xb2> - 1292e: 4641 mov r1, r8 - 12930: f811 3b01 ldrb.w r3, [r1], #1 - 12934: 2b2a cmp r3, #42 ; 0x2a - 12936: f001 827f beq.w 13e38 <_svfprintf_r+0x1b5c> - 1293a: f1a3 0230 sub.w r2, r3, #48 ; 0x30 - 1293e: 2a09 cmp r2, #9 - 12940: 4688 mov r8, r1 - 12942: bf98 it ls - 12944: 2100 movls r1, #0 - 12946: f201 8176 bhi.w 13c36 <_svfprintf_r+0x195a> - 1294a: f818 3b01 ldrb.w r3, [r8], #1 - 1294e: eb01 0181 add.w r1, r1, r1, lsl #2 - 12952: eb02 0141 add.w r1, r2, r1, lsl #1 - 12956: f1a3 0230 sub.w r2, r3, #48 ; 0x30 - 1295a: 2a09 cmp r2, #9 - 1295c: d9f5 bls.n 1294a <_svfprintf_r+0x66e> - 1295e: 9108 str r1, [sp, #32] - 12960: e517 b.n 12392 <_svfprintf_r+0xb6> - 12962: f898 3000 ldrb.w r3, [r8] - 12966: f04b 0b01 orr.w fp, fp, #1 - 1296a: e510 b.n 1238e <_svfprintf_r+0xb2> - 1296c: f89d 3087 ldrb.w r3, [sp, #135] ; 0x87 - 12970: 2b00 cmp r3, #0 - 12972: f47f ad91 bne.w 12498 <_svfprintf_r+0x1bc> - 12976: f898 3000 ldrb.w r3, [r8] - 1297a: f88d 6087 strb.w r6, [sp, #135] ; 0x87 - 1297e: e506 b.n 1238e <_svfprintf_r+0xb2> - 12980: 465d mov r5, fp - 12982: 2b01 cmp r3, #1 - 12984: f000 81ad beq.w 12ce2 <_svfprintf_r+0xa06> - 12988: 2b02 cmp r3, #2 - 1298a: ac58 add r4, sp, #352 ; 0x160 - 1298c: d11f bne.n 129ce <_svfprintf_r+0x6f2> - 1298e: 9818 ldr r0, [sp, #96] ; 0x60 - 12990: f002 030f and.w r3, r2, #15 - 12994: 0912 lsrs r2, r2, #4 - 12996: 5cc3 ldrb r3, [r0, r3] - 12998: f804 3d01 strb.w r3, [r4, #-1]! - 1299c: ea42 7201 orr.w r2, r2, r1, lsl #28 - 129a0: 0909 lsrs r1, r1, #4 - 129a2: ea52 0301 orrs.w r3, r2, r1 - 129a6: d1f3 bne.n 12990 <_svfprintf_r+0x6b4> - 129a8: ab58 add r3, sp, #352 ; 0x160 - 129aa: 1b1b subs r3, r3, r4 - 129ac: 46ab mov fp, r5 - 129ae: 930a str r3, [sp, #40] ; 0x28 - 129b0: 990a ldr r1, [sp, #40] ; 0x28 - 129b2: 9808 ldr r0, [sp, #32] - 129b4: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 129b8: 4281 cmp r1, r0 - 129ba: f04f 0300 mov.w r3, #0 - 129be: bfb8 it lt - 129c0: 4601 movlt r1, r0 - 129c2: 930d str r3, [sp, #52] ; 0x34 - 129c4: 9107 str r1, [sp, #28] - 129c6: 9312 str r3, [sp, #72] ; 0x48 - 129c8: 9316 str r3, [sp, #88] ; 0x58 - 129ca: 9311 str r3, [sp, #68] ; 0x44 - 129cc: e66a b.n 126a4 <_svfprintf_r+0x3c8> - 129ce: f002 0307 and.w r3, r2, #7 - 129d2: 08d2 lsrs r2, r2, #3 - 129d4: ea42 7241 orr.w r2, r2, r1, lsl #29 - 129d8: 08c9 lsrs r1, r1, #3 - 129da: 3330 adds r3, #48 ; 0x30 - 129dc: ea52 0601 orrs.w r6, r2, r1 - 129e0: 4620 mov r0, r4 - 129e2: f804 3d01 strb.w r3, [r4, #-1]! - 129e6: d1f2 bne.n 129ce <_svfprintf_r+0x6f2> - 129e8: 07e9 lsls r1, r5, #31 - 129ea: d5dd bpl.n 129a8 <_svfprintf_r+0x6cc> - 129ec: 2b30 cmp r3, #48 ; 0x30 - 129ee: d0db beq.n 129a8 <_svfprintf_r+0x6cc> - 129f0: 2330 movs r3, #48 ; 0x30 - 129f2: 3802 subs r0, #2 - 129f4: f804 3c01 strb.w r3, [r4, #-1] - 129f8: ab58 add r3, sp, #352 ; 0x160 - 129fa: 1a1b subs r3, r3, r0 - 129fc: 46ab mov fp, r5 - 129fe: 930a str r3, [sp, #40] ; 0x28 - 12a00: 4604 mov r4, r0 - 12a02: e7d5 b.n 129b0 <_svfprintf_r+0x6d4> - 12a04: 9b10 ldr r3, [sp, #64] ; 0x40 - 12a06: 2b65 cmp r3, #101 ; 0x65 - 12a08: f340 80dc ble.w 12bc4 <_svfprintf_r+0x8e8> - 12a0c: e9dd 0114 ldrd r0, r1, [sp, #80] ; 0x50 - 12a10: 2200 movs r2, #0 - 12a12: 2300 movs r3, #0 - 12a14: f7fc ff56 bl f8c4 <__aeabi_dcmpeq> - 12a18: 2800 cmp r0, #0 - 12a1a: f000 81c8 beq.w 12dae <_svfprintf_r+0xad2> - 12a1e: 2301 movs r3, #1 - 12a20: f8c9 3004 str.w r3, [r9, #4] - 12a24: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12a26: 4abd ldr r2, [pc, #756] ; (12d1c <_svfprintf_r+0xa40>) - 12a28: f8c9 2000 str.w r2, [r9] - 12a2c: 3301 adds r3, #1 - 12a2e: 3601 adds r6, #1 - 12a30: 2b07 cmp r3, #7 - 12a32: 962e str r6, [sp, #184] ; 0xb8 - 12a34: 932d str r3, [sp, #180] ; 0xb4 - 12a36: f300 8539 bgt.w 134ac <_svfprintf_r+0x11d0> - 12a3a: f109 0908 add.w r9, r9, #8 - 12a3e: 9b23 ldr r3, [sp, #140] ; 0x8c - 12a40: 9a13 ldr r2, [sp, #76] ; 0x4c - 12a42: 4293 cmp r3, r2 - 12a44: f280 82c2 bge.w 12fcc <_svfprintf_r+0xcf0> - 12a48: 9b17 ldr r3, [sp, #92] ; 0x5c - 12a4a: 9a19 ldr r2, [sp, #100] ; 0x64 - 12a4c: 441e add r6, r3 - 12a4e: e9c9 2300 strd r2, r3, [r9] - 12a52: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12a54: 962e str r6, [sp, #184] ; 0xb8 - 12a56: 3301 adds r3, #1 - 12a58: 2b07 cmp r3, #7 - 12a5a: 932d str r3, [sp, #180] ; 0xb4 - 12a5c: f300 838d bgt.w 1317a <_svfprintf_r+0xe9e> - 12a60: f109 0908 add.w r9, r9, #8 - 12a64: 9b13 ldr r3, [sp, #76] ; 0x4c - 12a66: 1e5c subs r4, r3, #1 - 12a68: 2c00 cmp r4, #0 - 12a6a: f77f adbc ble.w 125e6 <_svfprintf_r+0x30a> - 12a6e: 2c10 cmp r4, #16 - 12a70: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12a72: 4dab ldr r5, [pc, #684] ; (12d20 <_svfprintf_r+0xa44>) - 12a74: f340 8555 ble.w 13522 <_svfprintf_r+0x1246> - 12a78: 4632 mov r2, r6 - 12a7a: 2710 movs r7, #16 - 12a7c: 9e0c ldr r6, [sp, #48] ; 0x30 - 12a7e: e005 b.n 12a8c <_svfprintf_r+0x7b0> - 12a80: f109 0908 add.w r9, r9, #8 - 12a84: 3c10 subs r4, #16 - 12a86: 2c10 cmp r4, #16 - 12a88: f340 854a ble.w 13520 <_svfprintf_r+0x1244> - 12a8c: 3301 adds r3, #1 - 12a8e: 3210 adds r2, #16 - 12a90: 2b07 cmp r3, #7 - 12a92: e9c9 5700 strd r5, r7, [r9] - 12a96: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 12a9a: ddf1 ble.n 12a80 <_svfprintf_r+0x7a4> - 12a9c: aa2c add r2, sp, #176 ; 0xb0 - 12a9e: 4631 mov r1, r6 - 12aa0: 4650 mov r0, sl - 12aa2: f003 f895 bl 15bd0 <__ssprint_r> - 12aa6: 2800 cmp r0, #0 - 12aa8: f040 8083 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12aac: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 12ab0: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12ab4: e7e6 b.n 12a84 <_svfprintf_r+0x7a8> - 12ab6: 9b0b ldr r3, [sp, #44] ; 0x2c - 12ab8: 9a07 ldr r2, [sp, #28] - 12aba: 1a9f subs r7, r3, r2 - 12abc: 2f00 cmp r7, #0 - 12abe: f77f ad79 ble.w 125b4 <_svfprintf_r+0x2d8> - 12ac2: 2f10 cmp r7, #16 - 12ac4: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12ac6: 4d96 ldr r5, [pc, #600] ; (12d20 <_svfprintf_r+0xa44>) - 12ac8: dd23 ble.n 12b12 <_svfprintf_r+0x836> - 12aca: 4632 mov r2, r6 - 12acc: 4626 mov r6, r4 - 12ace: 9c0c ldr r4, [sp, #48] ; 0x30 - 12ad0: e004 b.n 12adc <_svfprintf_r+0x800> - 12ad2: 3f10 subs r7, #16 - 12ad4: 2f10 cmp r7, #16 - 12ad6: f109 0908 add.w r9, r9, #8 - 12ada: dd18 ble.n 12b0e <_svfprintf_r+0x832> - 12adc: 3301 adds r3, #1 - 12ade: 3210 adds r2, #16 - 12ae0: 2110 movs r1, #16 - 12ae2: 2b07 cmp r3, #7 - 12ae4: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 12ae8: f8c9 5000 str.w r5, [r9] - 12aec: f8c9 1004 str.w r1, [r9, #4] - 12af0: ddef ble.n 12ad2 <_svfprintf_r+0x7f6> - 12af2: aa2c add r2, sp, #176 ; 0xb0 - 12af4: 4621 mov r1, r4 - 12af6: 4650 mov r0, sl - 12af8: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12afc: f003 f868 bl 15bd0 <__ssprint_r> - 12b00: 2800 cmp r0, #0 - 12b02: d156 bne.n 12bb2 <_svfprintf_r+0x8d6> - 12b04: 3f10 subs r7, #16 - 12b06: 2f10 cmp r7, #16 - 12b08: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 12b0c: dce6 bgt.n 12adc <_svfprintf_r+0x800> - 12b0e: 4634 mov r4, r6 - 12b10: 4616 mov r6, r2 - 12b12: 3301 adds r3, #1 - 12b14: 443e add r6, r7 - 12b16: 2b07 cmp r3, #7 - 12b18: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 12b1c: f8c9 5000 str.w r5, [r9] - 12b20: f8c9 7004 str.w r7, [r9, #4] - 12b24: f300 8516 bgt.w 13554 <_svfprintf_r+0x1278> - 12b28: 9b08 ldr r3, [sp, #32] - 12b2a: 9a0a ldr r2, [sp, #40] ; 0x28 - 12b2c: 1a9f subs r7, r3, r2 - 12b2e: 2f00 cmp r7, #0 - 12b30: f109 0908 add.w r9, r9, #8 - 12b34: f77f ad44 ble.w 125c0 <_svfprintf_r+0x2e4> - 12b38: 2f10 cmp r7, #16 - 12b3a: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12b3c: 4d78 ldr r5, [pc, #480] ; (12d20 <_svfprintf_r+0xa44>) - 12b3e: dd22 ble.n 12b86 <_svfprintf_r+0x8aa> - 12b40: 4632 mov r2, r6 - 12b42: 4626 mov r6, r4 - 12b44: 9c0c ldr r4, [sp, #48] ; 0x30 - 12b46: e004 b.n 12b52 <_svfprintf_r+0x876> - 12b48: 3f10 subs r7, #16 - 12b4a: 2f10 cmp r7, #16 - 12b4c: f109 0908 add.w r9, r9, #8 - 12b50: dd17 ble.n 12b82 <_svfprintf_r+0x8a6> - 12b52: 3301 adds r3, #1 - 12b54: 3210 adds r2, #16 - 12b56: 2110 movs r1, #16 - 12b58: 2b07 cmp r3, #7 - 12b5a: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 12b5e: f8c9 5000 str.w r5, [r9] - 12b62: f8c9 1004 str.w r1, [r9, #4] - 12b66: ddef ble.n 12b48 <_svfprintf_r+0x86c> - 12b68: aa2c add r2, sp, #176 ; 0xb0 - 12b6a: 4621 mov r1, r4 - 12b6c: 4650 mov r0, sl - 12b6e: f003 f82f bl 15bd0 <__ssprint_r> - 12b72: b9f0 cbnz r0, 12bb2 <_svfprintf_r+0x8d6> - 12b74: 3f10 subs r7, #16 - 12b76: 2f10 cmp r7, #16 - 12b78: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 12b7c: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12b80: dce7 bgt.n 12b52 <_svfprintf_r+0x876> - 12b82: 4634 mov r4, r6 - 12b84: 4616 mov r6, r2 - 12b86: 3301 adds r3, #1 - 12b88: 443e add r6, r7 - 12b8a: 2b07 cmp r3, #7 - 12b8c: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 12b90: f8c9 5000 str.w r5, [r9] - 12b94: f8c9 7004 str.w r7, [r9, #4] - 12b98: f300 81cd bgt.w 12f36 <_svfprintf_r+0xc5a> - 12b9c: f109 0908 add.w r9, r9, #8 - 12ba0: e50e b.n 125c0 <_svfprintf_r+0x2e4> - 12ba2: 990c ldr r1, [sp, #48] ; 0x30 - 12ba4: aa2c add r2, sp, #176 ; 0xb0 - 12ba6: 4650 mov r0, sl - 12ba8: f003 f812 bl 15bd0 <__ssprint_r> - 12bac: 2800 cmp r0, #0 - 12bae: f43f ad2e beq.w 1260e <_svfprintf_r+0x332> - 12bb2: 9b0d ldr r3, [sp, #52] ; 0x34 - 12bb4: 2b00 cmp r3, #0 - 12bb6: f43f ac99 beq.w 124ec <_svfprintf_r+0x210> - 12bba: 990d ldr r1, [sp, #52] ; 0x34 - 12bbc: 4650 mov r0, sl - 12bbe: f7ff fa71 bl 120a4 <_free_r> - 12bc2: e493 b.n 124ec <_svfprintf_r+0x210> - 12bc4: 9b13 ldr r3, [sp, #76] ; 0x4c - 12bc6: 2b01 cmp r3, #1 - 12bc8: f340 816e ble.w 12ea8 <_svfprintf_r+0xbcc> - 12bcc: 9f2d ldr r7, [sp, #180] ; 0xb4 - 12bce: f8c9 4000 str.w r4, [r9] - 12bd2: 2301 movs r3, #1 - 12bd4: 441f add r7, r3 - 12bd6: 3601 adds r6, #1 - 12bd8: 2f07 cmp r7, #7 - 12bda: f8c9 3004 str.w r3, [r9, #4] - 12bde: 962e str r6, [sp, #184] ; 0xb8 - 12be0: 972d str r7, [sp, #180] ; 0xb4 - 12be2: f300 81d9 bgt.w 12f98 <_svfprintf_r+0xcbc> - 12be6: f109 0908 add.w r9, r9, #8 - 12bea: 9b17 ldr r3, [sp, #92] ; 0x5c - 12bec: 9a19 ldr r2, [sp, #100] ; 0x64 - 12bee: 3701 adds r7, #1 - 12bf0: 441e add r6, r3 - 12bf2: 2f07 cmp r7, #7 - 12bf4: e9c9 2300 strd r2, r3, [r9] - 12bf8: e9cd 762d strd r7, r6, [sp, #180] ; 0xb4 - 12bfc: f300 81d9 bgt.w 12fb2 <_svfprintf_r+0xcd6> - 12c00: f109 0908 add.w r9, r9, #8 - 12c04: e9dd 0114 ldrd r0, r1, [sp, #80] ; 0x50 - 12c08: 2200 movs r2, #0 - 12c0a: 2300 movs r3, #0 - 12c0c: f7fc fe5a bl f8c4 <__aeabi_dcmpeq> - 12c10: 2800 cmp r0, #0 - 12c12: f040 8167 bne.w 12ee4 <_svfprintf_r+0xc08> - 12c16: 9b13 ldr r3, [sp, #76] ; 0x4c - 12c18: 3701 adds r7, #1 - 12c1a: 3b01 subs r3, #1 - 12c1c: 3401 adds r4, #1 - 12c1e: 441e add r6, r3 - 12c20: 2f07 cmp r7, #7 - 12c22: f8c9 4000 str.w r4, [r9] - 12c26: 972d str r7, [sp, #180] ; 0xb4 - 12c28: f8c9 3004 str.w r3, [r9, #4] - 12c2c: 962e str r6, [sp, #184] ; 0xb8 - 12c2e: f300 814c bgt.w 12eca <_svfprintf_r+0xbee> - 12c32: f109 0908 add.w r9, r9, #8 - 12c36: 9b1b ldr r3, [sp, #108] ; 0x6c - 12c38: f8c9 3004 str.w r3, [r9, #4] - 12c3c: 3701 adds r7, #1 - 12c3e: 441e add r6, r3 - 12c40: 2f07 cmp r7, #7 - 12c42: ab26 add r3, sp, #152 ; 0x98 - 12c44: e9cd 762d strd r7, r6, [sp, #180] ; 0xb4 - 12c48: f8c9 3000 str.w r3, [r9] - 12c4c: f77f acc9 ble.w 125e2 <_svfprintf_r+0x306> - 12c50: 990c ldr r1, [sp, #48] ; 0x30 - 12c52: aa2c add r2, sp, #176 ; 0xb0 - 12c54: 4650 mov r0, sl - 12c56: f002 ffbb bl 15bd0 <__ssprint_r> - 12c5a: 2800 cmp r0, #0 - 12c5c: d1a9 bne.n 12bb2 <_svfprintf_r+0x8d6> - 12c5e: 9e2e ldr r6, [sp, #184] ; 0xb8 - 12c60: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12c64: e4bf b.n 125e6 <_svfprintf_r+0x30a> - 12c66: 2f10 cmp r7, #16 - 12c68: e9dd 212d ldrd r2, r1, [sp, #180] ; 0xb4 - 12c6c: 4d2d ldr r5, [pc, #180] ; (12d24 <_svfprintf_r+0xa48>) - 12c6e: dd27 ble.n 12cc0 <_svfprintf_r+0x9e4> - 12c70: e9cd 381e strd r3, r8, [sp, #120] ; 0x78 - 12c74: 2610 movs r6, #16 - 12c76: 46d0 mov r8, sl - 12c78: 46a2 mov sl, r4 - 12c7a: 9c0c ldr r4, [sp, #48] ; 0x30 - 12c7c: e004 b.n 12c88 <_svfprintf_r+0x9ac> - 12c7e: 3f10 subs r7, #16 - 12c80: 2f10 cmp r7, #16 - 12c82: f109 0908 add.w r9, r9, #8 - 12c86: dd16 ble.n 12cb6 <_svfprintf_r+0x9da> - 12c88: 3201 adds r2, #1 - 12c8a: 3110 adds r1, #16 - 12c8c: 2a07 cmp r2, #7 - 12c8e: e9c9 5600 strd r5, r6, [r9] - 12c92: e9cd 212d strd r2, r1, [sp, #180] ; 0xb4 - 12c96: ddf2 ble.n 12c7e <_svfprintf_r+0x9a2> - 12c98: aa2c add r2, sp, #176 ; 0xb0 - 12c9a: 4621 mov r1, r4 - 12c9c: 4640 mov r0, r8 - 12c9e: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12ca2: f002 ff95 bl 15bd0 <__ssprint_r> - 12ca6: 2800 cmp r0, #0 - 12ca8: f040 83f2 bne.w 13490 <_svfprintf_r+0x11b4> - 12cac: 3f10 subs r7, #16 - 12cae: 2f10 cmp r7, #16 - 12cb0: e9dd 212d ldrd r2, r1, [sp, #180] ; 0xb4 - 12cb4: dce8 bgt.n 12c88 <_svfprintf_r+0x9ac> - 12cb6: 4654 mov r4, sl - 12cb8: 9b1e ldr r3, [sp, #120] ; 0x78 - 12cba: 46c2 mov sl, r8 - 12cbc: f8dd 807c ldr.w r8, [sp, #124] ; 0x7c - 12cc0: f8c9 5000 str.w r5, [r9] - 12cc4: 3201 adds r2, #1 - 12cc6: 187e adds r6, r7, r1 - 12cc8: 2a07 cmp r2, #7 - 12cca: e9cd 262d strd r2, r6, [sp, #180] ; 0xb4 - 12cce: f8c9 7004 str.w r7, [r9, #4] - 12cd2: f300 83cc bgt.w 1346e <_svfprintf_r+0x1192> - 12cd6: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 12cda: f109 0908 add.w r9, r9, #8 - 12cde: e441 b.n 12564 <_svfprintf_r+0x288> - 12ce0: 465d mov r5, fp - 12ce2: 2a0a cmp r2, #10 - 12ce4: f171 0300 sbcs.w r3, r1, #0 - 12ce8: f080 8329 bcs.w 1333e <_svfprintf_r+0x1062> - 12cec: 3230 adds r2, #48 ; 0x30 - 12cee: 2301 movs r3, #1 - 12cf0: f88d 215f strb.w r2, [sp, #351] ; 0x15f - 12cf4: 46ab mov fp, r5 - 12cf6: 930a str r3, [sp, #40] ; 0x28 - 12cf8: f20d 145f addw r4, sp, #351 ; 0x15f - 12cfc: e658 b.n 129b0 <_svfprintf_r+0x6d4> - 12cfe: 990c ldr r1, [sp, #48] ; 0x30 - 12d00: 931e str r3, [sp, #120] ; 0x78 - 12d02: aa2c add r2, sp, #176 ; 0xb0 - 12d04: 4650 mov r0, sl - 12d06: f002 ff63 bl 15bd0 <__ssprint_r> - 12d0a: 2800 cmp r0, #0 - 12d0c: f47f af51 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12d10: 9e2e ldr r6, [sp, #184] ; 0xb8 - 12d12: 9b1e ldr r3, [sp, #120] ; 0x78 - 12d14: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12d18: e436 b.n 12588 <_svfprintf_r+0x2ac> - 12d1a: bf00 nop - 12d1c: 0001860c .word 0x0001860c - 12d20: 00018964 .word 0x00018964 - 12d24: 00018954 .word 0x00018954 - 12d28: 990c ldr r1, [sp, #48] ; 0x30 - 12d2a: aa2c add r2, sp, #176 ; 0xb0 - 12d2c: 4650 mov r0, sl - 12d2e: f002 ff4f bl 15bd0 <__ssprint_r> - 12d32: 2800 cmp r0, #0 - 12d34: f47f af3d bne.w 12bb2 <_svfprintf_r+0x8d6> - 12d38: 9e2e ldr r6, [sp, #184] ; 0xb8 - 12d3a: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12d3e: e435 b.n 125ac <_svfprintf_r+0x2d0> - 12d40: 2c10 cmp r4, #16 - 12d42: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12d44: 4db8 ldr r5, [pc, #736] ; (13028 <_svfprintf_r+0xd4c>) - 12d46: dd1f ble.n 12d88 <_svfprintf_r+0xaac> - 12d48: f8dd b030 ldr.w fp, [sp, #48] ; 0x30 - 12d4c: 2710 movs r7, #16 - 12d4e: e004 b.n 12d5a <_svfprintf_r+0xa7e> - 12d50: 3c10 subs r4, #16 - 12d52: 2c10 cmp r4, #16 - 12d54: f109 0908 add.w r9, r9, #8 - 12d58: dd16 ble.n 12d88 <_svfprintf_r+0xaac> - 12d5a: 3301 adds r3, #1 - 12d5c: 3610 adds r6, #16 - 12d5e: 2b07 cmp r3, #7 - 12d60: e9c9 5700 strd r5, r7, [r9] - 12d64: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 12d68: ddf2 ble.n 12d50 <_svfprintf_r+0xa74> - 12d6a: aa2c add r2, sp, #176 ; 0xb0 - 12d6c: 4659 mov r1, fp - 12d6e: 4650 mov r0, sl - 12d70: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12d74: f002 ff2c bl 15bd0 <__ssprint_r> - 12d78: 2800 cmp r0, #0 - 12d7a: f47f af1a bne.w 12bb2 <_svfprintf_r+0x8d6> - 12d7e: 3c10 subs r4, #16 - 12d80: 2c10 cmp r4, #16 - 12d82: e9dd 362d ldrd r3, r6, [sp, #180] ; 0xb4 - 12d86: dce8 bgt.n 12d5a <_svfprintf_r+0xa7e> - 12d88: 3301 adds r3, #1 - 12d8a: 4426 add r6, r4 - 12d8c: 2b07 cmp r3, #7 - 12d8e: e9c9 5400 strd r5, r4, [r9] - 12d92: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 12d96: f77f ac2f ble.w 125f8 <_svfprintf_r+0x31c> - 12d9a: 990c ldr r1, [sp, #48] ; 0x30 - 12d9c: aa2c add r2, sp, #176 ; 0xb0 - 12d9e: 4650 mov r0, sl - 12da0: f002 ff16 bl 15bd0 <__ssprint_r> - 12da4: 2800 cmp r0, #0 - 12da6: f47f af04 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12daa: 9e2e ldr r6, [sp, #184] ; 0xb8 - 12dac: e424 b.n 125f8 <_svfprintf_r+0x31c> - 12dae: 9923 ldr r1, [sp, #140] ; 0x8c - 12db0: 2900 cmp r1, #0 - 12db2: f340 8327 ble.w 13404 <_svfprintf_r+0x1128> - 12db6: 9d11 ldr r5, [sp, #68] ; 0x44 - 12db8: 9b13 ldr r3, [sp, #76] ; 0x4c - 12dba: 429d cmp r5, r3 - 12dbc: bfa8 it ge - 12dbe: 461d movge r5, r3 - 12dc0: 2d00 cmp r5, #0 - 12dc2: dd0b ble.n 12ddc <_svfprintf_r+0xb00> - 12dc4: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12dc6: 3301 adds r3, #1 - 12dc8: 442e add r6, r5 - 12dca: 2b07 cmp r3, #7 - 12dcc: e9c9 4500 strd r4, r5, [r9] - 12dd0: 962e str r6, [sp, #184] ; 0xb8 - 12dd2: 932d str r3, [sp, #180] ; 0xb4 - 12dd4: f300 86dd bgt.w 13b92 <_svfprintf_r+0x18b6> - 12dd8: f109 0908 add.w r9, r9, #8 - 12ddc: 9f11 ldr r7, [sp, #68] ; 0x44 - 12dde: 2d00 cmp r5, #0 - 12de0: bfa8 it ge - 12de2: 1b7f subge r7, r7, r5 - 12de4: 2f00 cmp r7, #0 - 12de6: f300 81f4 bgt.w 131d2 <_svfprintf_r+0xef6> - 12dea: 9b11 ldr r3, [sp, #68] ; 0x44 - 12dec: f41b 6f80 tst.w fp, #1024 ; 0x400 - 12df0: 4423 add r3, r4 - 12df2: 930a str r3, [sp, #40] ; 0x28 - 12df4: f040 8214 bne.w 13220 <_svfprintf_r+0xf44> - 12df8: 9b23 ldr r3, [sp, #140] ; 0x8c - 12dfa: 9a13 ldr r2, [sp, #76] ; 0x4c - 12dfc: 4293 cmp r3, r2 - 12dfe: db03 blt.n 12e08 <_svfprintf_r+0xb2c> - 12e00: f01b 0f01 tst.w fp, #1 - 12e04: f000 84a5 beq.w 13752 <_svfprintf_r+0x1476> - 12e08: 9a17 ldr r2, [sp, #92] ; 0x5c - 12e0a: 9919 ldr r1, [sp, #100] ; 0x64 - 12e0c: 4416 add r6, r2 - 12e0e: e9c9 1200 strd r1, r2, [r9] - 12e12: 9a2d ldr r2, [sp, #180] ; 0xb4 - 12e14: 962e str r6, [sp, #184] ; 0xb8 - 12e16: 3201 adds r2, #1 - 12e18: 2a07 cmp r2, #7 - 12e1a: 922d str r2, [sp, #180] ; 0xb4 - 12e1c: f300 86c6 bgt.w 13bac <_svfprintf_r+0x18d0> - 12e20: f109 0908 add.w r9, r9, #8 - 12e24: 9a13 ldr r2, [sp, #76] ; 0x4c - 12e26: 18a5 adds r5, r4, r2 - 12e28: 1ad4 subs r4, r2, r3 - 12e2a: 9b0a ldr r3, [sp, #40] ; 0x28 - 12e2c: 1aed subs r5, r5, r3 - 12e2e: 42a5 cmp r5, r4 - 12e30: bfa8 it ge - 12e32: 4625 movge r5, r4 - 12e34: 2d00 cmp r5, #0 - 12e36: dd0d ble.n 12e54 <_svfprintf_r+0xb78> - 12e38: f8c9 3000 str.w r3, [r9] - 12e3c: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12e3e: f8c9 5004 str.w r5, [r9, #4] - 12e42: 3301 adds r3, #1 - 12e44: 442e add r6, r5 - 12e46: 2b07 cmp r3, #7 - 12e48: 962e str r6, [sp, #184] ; 0xb8 - 12e4a: 932d str r3, [sp, #180] ; 0xb4 - 12e4c: f300 86be bgt.w 13bcc <_svfprintf_r+0x18f0> - 12e50: f109 0908 add.w r9, r9, #8 - 12e54: 2d00 cmp r5, #0 - 12e56: bfa8 it ge - 12e58: 1b64 subge r4, r4, r5 - 12e5a: 2c00 cmp r4, #0 - 12e5c: f77f abc3 ble.w 125e6 <_svfprintf_r+0x30a> - 12e60: 2c10 cmp r4, #16 - 12e62: 9b2d ldr r3, [sp, #180] ; 0xb4 - 12e64: 4d71 ldr r5, [pc, #452] ; (1302c <_svfprintf_r+0xd50>) - 12e66: f340 835c ble.w 13522 <_svfprintf_r+0x1246> - 12e6a: 4632 mov r2, r6 - 12e6c: 2710 movs r7, #16 - 12e6e: 9e0c ldr r6, [sp, #48] ; 0x30 - 12e70: e005 b.n 12e7e <_svfprintf_r+0xba2> - 12e72: f109 0908 add.w r9, r9, #8 - 12e76: 3c10 subs r4, #16 - 12e78: 2c10 cmp r4, #16 - 12e7a: f340 8351 ble.w 13520 <_svfprintf_r+0x1244> - 12e7e: 3301 adds r3, #1 - 12e80: 3210 adds r2, #16 - 12e82: 2b07 cmp r3, #7 - 12e84: e9c9 5700 strd r5, r7, [r9] - 12e88: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 12e8c: ddf1 ble.n 12e72 <_svfprintf_r+0xb96> - 12e8e: aa2c add r2, sp, #176 ; 0xb0 - 12e90: 4631 mov r1, r6 - 12e92: 4650 mov r0, sl - 12e94: f002 fe9c bl 15bd0 <__ssprint_r> - 12e98: 2800 cmp r0, #0 - 12e9a: f47f ae8a bne.w 12bb2 <_svfprintf_r+0x8d6> - 12e9e: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 12ea2: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12ea6: e7e6 b.n 12e76 <_svfprintf_r+0xb9a> - 12ea8: f01b 0f01 tst.w fp, #1 - 12eac: f47f ae8e bne.w 12bcc <_svfprintf_r+0x8f0> - 12eb0: 9f2d ldr r7, [sp, #180] ; 0xb4 - 12eb2: f8c9 4000 str.w r4, [r9] - 12eb6: 2301 movs r3, #1 - 12eb8: 441f add r7, r3 - 12eba: 3601 adds r6, #1 - 12ebc: 2f07 cmp r7, #7 - 12ebe: f8c9 3004 str.w r3, [r9, #4] - 12ec2: 962e str r6, [sp, #184] ; 0xb8 - 12ec4: 972d str r7, [sp, #180] ; 0xb4 - 12ec6: f77f aeb4 ble.w 12c32 <_svfprintf_r+0x956> - 12eca: 990c ldr r1, [sp, #48] ; 0x30 - 12ecc: aa2c add r2, sp, #176 ; 0xb0 - 12ece: 4650 mov r0, sl - 12ed0: f002 fe7e bl 15bd0 <__ssprint_r> - 12ed4: 2800 cmp r0, #0 - 12ed6: f47f ae6c bne.w 12bb2 <_svfprintf_r+0x8d6> - 12eda: e9dd 762d ldrd r7, r6, [sp, #180] ; 0xb4 - 12ede: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12ee2: e6a8 b.n 12c36 <_svfprintf_r+0x95a> - 12ee4: 9b13 ldr r3, [sp, #76] ; 0x4c - 12ee6: 1e5c subs r4, r3, #1 - 12ee8: 2c00 cmp r4, #0 - 12eea: f77f aea4 ble.w 12c36 <_svfprintf_r+0x95a> - 12eee: 2c10 cmp r4, #16 - 12ef0: 4d4e ldr r5, [pc, #312] ; (1302c <_svfprintf_r+0xd50>) - 12ef2: f340 834c ble.w 1358e <_svfprintf_r+0x12b2> - 12ef6: 4632 mov r2, r6 - 12ef8: 2310 movs r3, #16 - 12efa: 9e0c ldr r6, [sp, #48] ; 0x30 - 12efc: e005 b.n 12f0a <_svfprintf_r+0xc2e> - 12efe: f109 0908 add.w r9, r9, #8 - 12f02: 3c10 subs r4, #16 - 12f04: 2c10 cmp r4, #16 - 12f06: f340 8341 ble.w 1358c <_svfprintf_r+0x12b0> - 12f0a: 3701 adds r7, #1 - 12f0c: 3210 adds r2, #16 - 12f0e: 2f07 cmp r7, #7 - 12f10: e9c9 5300 strd r5, r3, [r9] - 12f14: e9cd 722d strd r7, r2, [sp, #180] ; 0xb4 - 12f18: ddf1 ble.n 12efe <_svfprintf_r+0xc22> - 12f1a: aa2c add r2, sp, #176 ; 0xb0 - 12f1c: 4631 mov r1, r6 - 12f1e: 4650 mov r0, sl - 12f20: f002 fe56 bl 15bd0 <__ssprint_r> - 12f24: 2800 cmp r0, #0 - 12f26: f47f ae44 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12f2a: e9dd 722d ldrd r7, r2, [sp, #180] ; 0xb4 - 12f2e: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12f32: 2310 movs r3, #16 - 12f34: e7e5 b.n 12f02 <_svfprintf_r+0xc26> - 12f36: 990c ldr r1, [sp, #48] ; 0x30 - 12f38: aa2c add r2, sp, #176 ; 0xb0 - 12f3a: 4650 mov r0, sl - 12f3c: f002 fe48 bl 15bd0 <__ssprint_r> - 12f40: 2800 cmp r0, #0 - 12f42: f47f ae36 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12f46: 9e2e ldr r6, [sp, #184] ; 0xb8 - 12f48: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12f4c: f7ff bb38 b.w 125c0 <_svfprintf_r+0x2e4> - 12f50: f015 0310 ands.w r3, r5, #16 - 12f54: d160 bne.n 13018 <_svfprintf_r+0xd3c> - 12f56: f015 0240 ands.w r2, r5, #64 ; 0x40 - 12f5a: f000 8373 beq.w 13644 <_svfprintf_r+0x1368> - 12f5e: 980e ldr r0, [sp, #56] ; 0x38 - 12f60: f850 2b04 ldr.w r2, [r0], #4 - 12f64: 900e str r0, [sp, #56] ; 0x38 - 12f66: 4619 mov r1, r3 - 12f68: b292 uxth r2, r2 - 12f6a: 2301 movs r3, #1 - 12f6c: e45a b.n 12824 <_svfprintf_r+0x548> - 12f6e: f01b 0310 ands.w r3, fp, #16 - 12f72: d168 bne.n 13046 <_svfprintf_r+0xd6a> - 12f74: f01b 0240 ands.w r2, fp, #64 ; 0x40 - 12f78: f000 8356 beq.w 13628 <_svfprintf_r+0x134c> - 12f7c: 980e ldr r0, [sp, #56] ; 0x38 - 12f7e: f850 2b04 ldr.w r2, [r0], #4 - 12f82: 900e str r0, [sp, #56] ; 0x38 - 12f84: 4619 mov r1, r3 - 12f86: b292 uxth r2, r2 - 12f88: e4af b.n 128ea <_svfprintf_r+0x60e> - 12f8a: 4252 negs r2, r2 - 12f8c: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 12f90: 465d mov r5, fp - 12f92: 202d movs r0, #45 ; 0x2d - 12f94: 2301 movs r3, #1 - 12f96: e446 b.n 12826 <_svfprintf_r+0x54a> - 12f98: 990c ldr r1, [sp, #48] ; 0x30 - 12f9a: aa2c add r2, sp, #176 ; 0xb0 - 12f9c: 4650 mov r0, sl - 12f9e: f002 fe17 bl 15bd0 <__ssprint_r> - 12fa2: 2800 cmp r0, #0 - 12fa4: f47f ae05 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12fa8: e9dd 762d ldrd r7, r6, [sp, #180] ; 0xb4 - 12fac: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12fb0: e61b b.n 12bea <_svfprintf_r+0x90e> - 12fb2: 990c ldr r1, [sp, #48] ; 0x30 - 12fb4: aa2c add r2, sp, #176 ; 0xb0 - 12fb6: 4650 mov r0, sl - 12fb8: f002 fe0a bl 15bd0 <__ssprint_r> - 12fbc: 2800 cmp r0, #0 - 12fbe: f47f adf8 bne.w 12bb2 <_svfprintf_r+0x8d6> - 12fc2: e9dd 762d ldrd r7, r6, [sp, #180] ; 0xb4 - 12fc6: f10d 09bc add.w r9, sp, #188 ; 0xbc - 12fca: e61b b.n 12c04 <_svfprintf_r+0x928> - 12fcc: f01b 0f01 tst.w fp, #1 - 12fd0: f43f ab09 beq.w 125e6 <_svfprintf_r+0x30a> - 12fd4: e538 b.n 12a48 <_svfprintf_r+0x76c> - 12fd6: 930e str r3, [sp, #56] ; 0x38 - 12fd8: f898 3000 ldrb.w r3, [r8] - 12fdc: f7ff b9d7 b.w 1238e <_svfprintf_r+0xb2> - 12fe0: ac58 add r4, sp, #352 ; 0x160 - 12fe2: e4e5 b.n 129b0 <_svfprintf_r+0x6d4> - 12fe4: f41b 7f00 tst.w fp, #512 ; 0x200 - 12fe8: f040 83bd bne.w 13766 <_svfprintf_r+0x148a> - 12fec: f853 2b04 ldr.w r2, [r3], #4 - 12ff0: 930e str r3, [sp, #56] ; 0x38 - 12ff2: 17d1 asrs r1, r2, #31 - 12ff4: 460b mov r3, r1 - 12ff6: f7ff bbc4 b.w 12782 <_svfprintf_r+0x4a6> - 12ffa: 9b1a ldr r3, [sp, #104] ; 0x68 - 12ffc: 2b00 cmp r3, #0 - 12ffe: f43f aa4b beq.w 12498 <_svfprintf_r+0x1bc> - 13002: 9b1a ldr r3, [sp, #104] ; 0x68 - 13004: 781b ldrb r3, [r3, #0] - 13006: 2b00 cmp r3, #0 - 13008: f43f aa46 beq.w 12498 <_svfprintf_r+0x1bc> - 1300c: f898 3000 ldrb.w r3, [r8] - 13010: f44b 6b80 orr.w fp, fp, #1024 ; 0x400 - 13014: f7ff b9bb b.w 1238e <_svfprintf_r+0xb2> - 13018: 9b0e ldr r3, [sp, #56] ; 0x38 - 1301a: f853 2b04 ldr.w r2, [r3], #4 - 1301e: 930e str r3, [sp, #56] ; 0x38 - 13020: 2301 movs r3, #1 - 13022: f7ff bbff b.w 12824 <_svfprintf_r+0x548> - 13026: bf00 nop - 13028: 00018954 .word 0x00018954 - 1302c: 00018964 .word 0x00018964 - 13030: 9b0e ldr r3, [sp, #56] ; 0x38 - 13032: 9809 ldr r0, [sp, #36] ; 0x24 - 13034: f853 1b04 ldr.w r1, [r3], #4 - 13038: 930e str r3, [sp, #56] ; 0x38 - 1303a: 17c2 asrs r2, r0, #31 - 1303c: e9c1 0200 strd r0, r2, [r1] - 13040: 4644 mov r4, r8 - 13042: f7ff b979 b.w 12338 <_svfprintf_r+0x5c> - 13046: 9b0e ldr r3, [sp, #56] ; 0x38 - 13048: f853 2b04 ldr.w r2, [r3], #4 - 1304c: 930e str r3, [sp, #56] ; 0x38 - 1304e: e44c b.n 128ea <_svfprintf_r+0x60e> - 13050: e9dd 0114 ldrd r0, r1, [sp, #80] ; 0x50 - 13054: 4602 mov r2, r0 - 13056: 460b mov r3, r1 - 13058: f7fc fc66 bl f928 <__aeabi_dcmpun> - 1305c: 2800 cmp r0, #0 - 1305e: f040 8675 bne.w 13d4c <_svfprintf_r+0x1a70> - 13062: 9b10 ldr r3, [sp, #64] ; 0x40 - 13064: 2b61 cmp r3, #97 ; 0x61 - 13066: f000 855b beq.w 13b20 <_svfprintf_r+0x1844> - 1306a: 2b41 cmp r3, #65 ; 0x41 - 1306c: f000 85ac beq.w 13bc8 <_svfprintf_r+0x18ec> - 13070: 9b08 ldr r3, [sp, #32] - 13072: 3301 adds r3, #1 - 13074: 9b10 ldr r3, [sp, #64] ; 0x40 - 13076: f023 0320 bic.w r3, r3, #32 - 1307a: 9307 str r3, [sp, #28] - 1307c: f000 8463 beq.w 13946 <_svfprintf_r+0x166a> - 13080: 2b47 cmp r3, #71 ; 0x47 - 13082: d104 bne.n 1308e <_svfprintf_r+0xdb2> - 13084: 9b08 ldr r3, [sp, #32] - 13086: 2b00 cmp r3, #0 - 13088: bf08 it eq - 1308a: 2301 moveq r3, #1 - 1308c: 9308 str r3, [sp, #32] - 1308e: e9dd 0114 ldrd r0, r1, [sp, #80] ; 0x50 - 13092: 460a mov r2, r1 - 13094: 2a00 cmp r2, #0 - 13096: f44b 7380 orr.w r3, fp, #256 ; 0x100 - 1309a: f8cd b03c str.w fp, [sp, #60] ; 0x3c - 1309e: f2c0 85e1 blt.w 13c64 <_svfprintf_r+0x1988> - 130a2: 469b mov fp, r3 - 130a4: 2300 movs r3, #0 - 130a6: 4616 mov r6, r2 - 130a8: 931e str r3, [sp, #120] ; 0x78 - 130aa: 4607 mov r7, r0 - 130ac: 930d str r3, [sp, #52] ; 0x34 - 130ae: 9b10 ldr r3, [sp, #64] ; 0x40 - 130b0: 3b41 subs r3, #65 ; 0x41 - 130b2: 2b25 cmp r3, #37 ; 0x25 - 130b4: f200 8367 bhi.w 13786 <_svfprintf_r+0x14aa> - 130b8: e8df f013 tbh [pc, r3, lsl #1] - 130bc: 03650452 .word 0x03650452 - 130c0: 03650365 .word 0x03650365 - 130c4: 044e0449 .word 0x044e0449 - 130c8: 03650365 .word 0x03650365 - 130cc: 03650365 .word 0x03650365 - 130d0: 03650365 .word 0x03650365 - 130d4: 03650365 .word 0x03650365 - 130d8: 03650365 .word 0x03650365 - 130dc: 03650365 .word 0x03650365 - 130e0: 03650365 .word 0x03650365 - 130e4: 03650365 .word 0x03650365 - 130e8: 03650365 .word 0x03650365 - 130ec: 03650365 .word 0x03650365 - 130f0: 03650365 .word 0x03650365 - 130f4: 03650365 .word 0x03650365 - 130f8: 03650365 .word 0x03650365 - 130fc: 03650365 .word 0x03650365 - 13100: 03650365 .word 0x03650365 - 13104: 044e0449 .word 0x044e0449 - 13108: 9310 str r3, [sp, #64] ; 0x40 - 1310a: 465d mov r5, fp - 1310c: f7ff bbf4 b.w 128f8 <_svfprintf_r+0x61c> - 13110: 9310 str r3, [sp, #64] ; 0x40 - 13112: 4bb7 ldr r3, [pc, #732] ; (133f0 <_svfprintf_r+0x1114>) - 13114: 9318 str r3, [sp, #96] ; 0x60 - 13116: f01b 0120 ands.w r1, fp, #32 - 1311a: f000 80fc beq.w 13316 <_svfprintf_r+0x103a> - 1311e: 9b0e ldr r3, [sp, #56] ; 0x38 - 13120: 3307 adds r3, #7 - 13122: f023 0307 bic.w r3, r3, #7 - 13126: 6859 ldr r1, [r3, #4] - 13128: f853 2b08 ldr.w r2, [r3], #8 - 1312c: 930e str r3, [sp, #56] ; 0x38 - 1312e: f01b 0f01 tst.w fp, #1 - 13132: d00a beq.n 1314a <_svfprintf_r+0xe6e> - 13134: ea52 0301 orrs.w r3, r2, r1 - 13138: d007 beq.n 1314a <_svfprintf_r+0xe6e> - 1313a: 9b10 ldr r3, [sp, #64] ; 0x40 - 1313c: f88d 3089 strb.w r3, [sp, #137] ; 0x89 - 13140: 2330 movs r3, #48 ; 0x30 - 13142: f04b 0b02 orr.w fp, fp, #2 - 13146: f88d 3088 strb.w r3, [sp, #136] ; 0x88 - 1314a: f42b 6580 bic.w r5, fp, #1024 ; 0x400 - 1314e: 2302 movs r3, #2 - 13150: f7ff bb68 b.w 12824 <_svfprintf_r+0x548> - 13154: 9310 str r3, [sp, #64] ; 0x40 - 13156: f7ff bbbc b.w 128d2 <_svfprintf_r+0x5f6> - 1315a: 9310 str r3, [sp, #64] ; 0x40 - 1315c: 4ba5 ldr r3, [pc, #660] ; (133f4 <_svfprintf_r+0x1118>) - 1315e: 9318 str r3, [sp, #96] ; 0x60 - 13160: e7d9 b.n 13116 <_svfprintf_r+0xe3a> - 13162: 9b0e ldr r3, [sp, #56] ; 0x38 - 13164: 2101 movs r1, #1 - 13166: f853 2b04 ldr.w r2, [r3], #4 - 1316a: 9107 str r1, [sp, #28] - 1316c: f88d 20fc strb.w r2, [sp, #252] ; 0xfc - 13170: 930e str r3, [sp, #56] ; 0x38 - 13172: 910a str r1, [sp, #40] ; 0x28 - 13174: ac3f add r4, sp, #252 ; 0xfc - 13176: f7ff babb b.w 126f0 <_svfprintf_r+0x414> - 1317a: 990c ldr r1, [sp, #48] ; 0x30 - 1317c: aa2c add r2, sp, #176 ; 0xb0 - 1317e: 4650 mov r0, sl - 13180: f002 fd26 bl 15bd0 <__ssprint_r> - 13184: 2800 cmp r0, #0 - 13186: f47f ad14 bne.w 12bb2 <_svfprintf_r+0x8d6> - 1318a: 9e2e ldr r6, [sp, #184] ; 0xb8 - 1318c: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13190: e468 b.n 12a64 <_svfprintf_r+0x788> - 13192: 2140 movs r1, #64 ; 0x40 - 13194: 4650 mov r0, sl - 13196: f7fc ff9b bl 100d0 <_malloc_r> - 1319a: 9b0c ldr r3, [sp, #48] ; 0x30 - 1319c: 6018 str r0, [r3, #0] - 1319e: 6118 str r0, [r3, #16] - 131a0: 2800 cmp r0, #0 - 131a2: f000 8660 beq.w 13e66 <_svfprintf_r+0x1b8a> - 131a6: 9a0c ldr r2, [sp, #48] ; 0x30 - 131a8: 2340 movs r3, #64 ; 0x40 - 131aa: 6153 str r3, [r2, #20] - 131ac: f7ff b8b2 b.w 12314 <_svfprintf_r+0x38> - 131b0: 9b08 ldr r3, [sp, #32] - 131b2: 940d str r4, [sp, #52] ; 0x34 - 131b4: 2b06 cmp r3, #6 - 131b6: 4621 mov r1, r4 - 131b8: bf28 it cs - 131ba: 2306 movcs r3, #6 - 131bc: 9408 str r4, [sp, #32] - 131be: 4622 mov r2, r4 - 131c0: 9307 str r3, [sp, #28] - 131c2: 4c8d ldr r4, [pc, #564] ; (133f8 <_svfprintf_r+0x111c>) - 131c4: 970e str r7, [sp, #56] ; 0x38 - 131c6: 930a str r3, [sp, #40] ; 0x28 - 131c8: 9112 str r1, [sp, #72] ; 0x48 - 131ca: 9116 str r1, [sp, #88] ; 0x58 - 131cc: 9111 str r1, [sp, #68] ; 0x44 - 131ce: f7ff ba69 b.w 126a4 <_svfprintf_r+0x3c8> - 131d2: 2f10 cmp r7, #16 - 131d4: 9b2d ldr r3, [sp, #180] ; 0xb4 - 131d6: 4d89 ldr r5, [pc, #548] ; (133fc <_svfprintf_r+0x1120>) - 131d8: f340 8245 ble.w 13666 <_svfprintf_r+0x138a> - 131dc: 4632 mov r2, r6 - 131de: 4626 mov r6, r4 - 131e0: 9c0c ldr r4, [sp, #48] ; 0x30 - 131e2: e005 b.n 131f0 <_svfprintf_r+0xf14> - 131e4: f109 0908 add.w r9, r9, #8 - 131e8: 3f10 subs r7, #16 - 131ea: 2f10 cmp r7, #16 - 131ec: f340 8239 ble.w 13662 <_svfprintf_r+0x1386> - 131f0: 3301 adds r3, #1 - 131f2: 3210 adds r2, #16 - 131f4: 2110 movs r1, #16 - 131f6: 2b07 cmp r3, #7 - 131f8: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 131fc: f8c9 5000 str.w r5, [r9] - 13200: f8c9 1004 str.w r1, [r9, #4] - 13204: ddee ble.n 131e4 <_svfprintf_r+0xf08> - 13206: aa2c add r2, sp, #176 ; 0xb0 - 13208: 4621 mov r1, r4 - 1320a: 4650 mov r0, sl - 1320c: f002 fce0 bl 15bd0 <__ssprint_r> - 13210: 2800 cmp r0, #0 - 13212: f47f acce bne.w 12bb2 <_svfprintf_r+0x8d6> - 13216: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 1321a: f10d 09bc add.w r9, sp, #188 ; 0xbc - 1321e: e7e3 b.n 131e8 <_svfprintf_r+0xf0c> - 13220: 9b13 ldr r3, [sp, #76] ; 0x4c - 13222: 9d0a ldr r5, [sp, #40] ; 0x28 - 13224: f8cd 803c str.w r8, [sp, #60] ; 0x3c - 13228: 464a mov r2, r9 - 1322a: f8dd 9058 ldr.w r9, [sp, #88] ; 0x58 - 1322e: f8cd b028 str.w fp, [sp, #40] ; 0x28 - 13232: 18e3 adds r3, r4, r3 - 13234: 9308 str r3, [sp, #32] - 13236: 9f1a ldr r7, [sp, #104] ; 0x68 - 13238: f8dd b074 ldr.w fp, [sp, #116] ; 0x74 - 1323c: f8dd 8030 ldr.w r8, [sp, #48] ; 0x30 - 13240: 9b12 ldr r3, [sp, #72] ; 0x48 - 13242: 9410 str r4, [sp, #64] ; 0x40 - 13244: 4631 mov r1, r6 - 13246: f1b9 0f00 cmp.w r9, #0 - 1324a: d02e beq.n 132aa <_svfprintf_r+0xfce> - 1324c: bb83 cbnz r3, 132b0 <_svfprintf_r+0xfd4> - 1324e: 3f01 subs r7, #1 - 13250: f109 39ff add.w r9, r9, #4294967295 ; 0xffffffff - 13254: 9b1c ldr r3, [sp, #112] ; 0x70 - 13256: e9c2 3b00 strd r3, fp, [r2] - 1325a: 9b2d ldr r3, [sp, #180] ; 0xb4 - 1325c: 3301 adds r3, #1 - 1325e: 4459 add r1, fp - 13260: 2b07 cmp r3, #7 - 13262: 912e str r1, [sp, #184] ; 0xb8 - 13264: 932d str r3, [sp, #180] ; 0xb4 - 13266: dc5f bgt.n 13328 <_svfprintf_r+0x104c> - 13268: 3208 adds r2, #8 - 1326a: 9b08 ldr r3, [sp, #32] - 1326c: 7838 ldrb r0, [r7, #0] - 1326e: 1b5b subs r3, r3, r5 - 13270: 4283 cmp r3, r0 - 13272: bfa8 it ge - 13274: 4603 movge r3, r0 - 13276: 2b00 cmp r3, #0 - 13278: 461e mov r6, r3 - 1327a: dd0b ble.n 13294 <_svfprintf_r+0xfb8> - 1327c: 982d ldr r0, [sp, #180] ; 0xb4 - 1327e: 3001 adds r0, #1 - 13280: 4419 add r1, r3 - 13282: 2807 cmp r0, #7 - 13284: e9c2 5300 strd r5, r3, [r2] - 13288: 912e str r1, [sp, #184] ; 0xb8 - 1328a: 902d str r0, [sp, #180] ; 0xb4 - 1328c: f300 8156 bgt.w 1353c <_svfprintf_r+0x1260> - 13290: 7838 ldrb r0, [r7, #0] - 13292: 3208 adds r2, #8 - 13294: 2e00 cmp r6, #0 - 13296: bfac ite ge - 13298: 1b84 subge r4, r0, r6 - 1329a: 4604 movlt r4, r0 - 1329c: 2c00 cmp r4, #0 - 1329e: dc0b bgt.n 132b8 <_svfprintf_r+0xfdc> - 132a0: 4405 add r5, r0 - 132a2: 9b12 ldr r3, [sp, #72] ; 0x48 - 132a4: f1b9 0f00 cmp.w r9, #0 - 132a8: d1d0 bne.n 1324c <_svfprintf_r+0xf70> - 132aa: 2b00 cmp r3, #0 - 132ac: f000 83d4 beq.w 13a58 <_svfprintf_r+0x177c> - 132b0: 9b12 ldr r3, [sp, #72] ; 0x48 - 132b2: 3b01 subs r3, #1 - 132b4: 9312 str r3, [sp, #72] ; 0x48 - 132b6: e7cd b.n 13254 <_svfprintf_r+0xf78> - 132b8: 2c10 cmp r4, #16 - 132ba: 982d ldr r0, [sp, #180] ; 0xb4 - 132bc: dd1d ble.n 132fa <_svfprintf_r+0x101e> - 132be: 2610 movs r6, #16 - 132c0: e004 b.n 132cc <_svfprintf_r+0xff0> - 132c2: 3c10 subs r4, #16 - 132c4: 2c10 cmp r4, #16 - 132c6: f102 0208 add.w r2, r2, #8 - 132ca: dd16 ble.n 132fa <_svfprintf_r+0x101e> - 132cc: 3001 adds r0, #1 - 132ce: 4b4b ldr r3, [pc, #300] ; (133fc <_svfprintf_r+0x1120>) - 132d0: 3110 adds r1, #16 - 132d2: 2807 cmp r0, #7 - 132d4: e9c2 3600 strd r3, r6, [r2] - 132d8: e9cd 012d strd r0, r1, [sp, #180] ; 0xb4 - 132dc: ddf1 ble.n 132c2 <_svfprintf_r+0xfe6> - 132de: aa2c add r2, sp, #176 ; 0xb0 - 132e0: 4641 mov r1, r8 - 132e2: 4650 mov r0, sl - 132e4: f002 fc74 bl 15bd0 <__ssprint_r> - 132e8: 2800 cmp r0, #0 - 132ea: f47f ac62 bne.w 12bb2 <_svfprintf_r+0x8d6> - 132ee: 3c10 subs r4, #16 - 132f0: 2c10 cmp r4, #16 - 132f2: e9dd 012d ldrd r0, r1, [sp, #180] ; 0xb4 - 132f6: aa2f add r2, sp, #188 ; 0xbc - 132f8: dce8 bgt.n 132cc <_svfprintf_r+0xff0> - 132fa: 3001 adds r0, #1 - 132fc: 4b3f ldr r3, [pc, #252] ; (133fc <_svfprintf_r+0x1120>) - 132fe: 6054 str r4, [r2, #4] - 13300: 4421 add r1, r4 - 13302: 2807 cmp r0, #7 - 13304: e9cd 012d strd r0, r1, [sp, #180] ; 0xb4 - 13308: 6013 str r3, [r2, #0] - 1330a: f300 83fb bgt.w 13b04 <_svfprintf_r+0x1828> - 1330e: 7838 ldrb r0, [r7, #0] - 13310: 3208 adds r2, #8 - 13312: 4405 add r5, r0 - 13314: e7c5 b.n 132a2 <_svfprintf_r+0xfc6> - 13316: f01b 0310 ands.w r3, fp, #16 - 1331a: f000 80bc beq.w 13496 <_svfprintf_r+0x11ba> - 1331e: 9b0e ldr r3, [sp, #56] ; 0x38 - 13320: f853 2b04 ldr.w r2, [r3], #4 - 13324: 930e str r3, [sp, #56] ; 0x38 - 13326: e702 b.n 1312e <_svfprintf_r+0xe52> - 13328: aa2c add r2, sp, #176 ; 0xb0 - 1332a: 4641 mov r1, r8 - 1332c: 4650 mov r0, sl - 1332e: f002 fc4f bl 15bd0 <__ssprint_r> - 13332: 2800 cmp r0, #0 - 13334: f47f ac3d bne.w 12bb2 <_svfprintf_r+0x8d6> - 13338: 992e ldr r1, [sp, #184] ; 0xb8 - 1333a: aa2f add r2, sp, #188 ; 0xbc - 1333c: e795 b.n 1326a <_svfprintf_r+0xf8e> - 1333e: f8cd 9034 str.w r9, [sp, #52] ; 0x34 - 13342: 4b2f ldr r3, [pc, #188] ; (13400 <_svfprintf_r+0x1124>) - 13344: f8dd 9068 ldr.w r9, [sp, #104] ; 0x68 - 13348: f8cd 801c str.w r8, [sp, #28] - 1334c: f405 6780 and.w r7, r5, #1024 ; 0x400 - 13350: f04f 0c00 mov.w ip, #0 - 13354: ac58 add r4, sp, #352 ; 0x160 - 13356: f04f 3bcc mov.w fp, #3435973836 ; 0xcccccccc - 1335a: 950a str r5, [sp, #40] ; 0x28 - 1335c: e005 b.n 1336a <_svfprintf_r+0x108e> - 1335e: 2a0a cmp r2, #10 - 13360: f171 0100 sbcs.w r1, r1, #0 - 13364: d334 bcc.n 133d0 <_svfprintf_r+0x10f4> - 13366: 4642 mov r2, r8 - 13368: 4631 mov r1, r6 - 1336a: 1850 adds r0, r2, r1 - 1336c: f140 0000 adc.w r0, r0, #0 - 13370: fba3 5600 umull r5, r6, r3, r0 - 13374: f026 0503 bic.w r5, r6, #3 - 13378: eb05 0596 add.w r5, r5, r6, lsr #2 - 1337c: 1b40 subs r0, r0, r5 - 1337e: 1a15 subs r5, r2, r0 - 13380: f161 0e00 sbc.w lr, r1, #0 - 13384: fb0b f605 mul.w r6, fp, r5 - 13388: fb03 660e mla r6, r3, lr, r6 - 1338c: fba5 8503 umull r8, r5, r5, r3 - 13390: 442e add r6, r5 - 13392: f008 0e01 and.w lr, r8, #1 - 13396: 2505 movs r5, #5 - 13398: fbae 5e05 umull r5, lr, lr, r5 - 1339c: 182d adds r5, r5, r0 - 1339e: ea4f 0858 mov.w r8, r8, lsr #1 - 133a2: 3530 adds r5, #48 ; 0x30 - 133a4: f804 5c01 strb.w r5, [r4, #-1] - 133a8: ea48 78c6 orr.w r8, r8, r6, lsl #31 - 133ac: f10c 0c01 add.w ip, ip, #1 - 133b0: 3c01 subs r4, #1 - 133b2: 0876 lsrs r6, r6, #1 - 133b4: 2f00 cmp r7, #0 - 133b6: d0d2 beq.n 1335e <_svfprintf_r+0x1082> - 133b8: f899 0000 ldrb.w r0, [r9] - 133bc: 4584 cmp ip, r0 - 133be: d1ce bne.n 1335e <_svfprintf_r+0x1082> - 133c0: f1bc 0fff cmp.w ip, #255 ; 0xff - 133c4: d0cb beq.n 1335e <_svfprintf_r+0x1082> - 133c6: 2a0a cmp r2, #10 - 133c8: f171 0100 sbcs.w r1, r1, #0 - 133cc: f080 8198 bcs.w 13700 <_svfprintf_r+0x1424> - 133d0: 9d0a ldr r5, [sp, #40] ; 0x28 - 133d2: f8cd 9068 str.w r9, [sp, #104] ; 0x68 - 133d6: ab58 add r3, sp, #352 ; 0x160 - 133d8: 1b1b subs r3, r3, r4 - 133da: f8dd 801c ldr.w r8, [sp, #28] - 133de: f8dd 9034 ldr.w r9, [sp, #52] ; 0x34 - 133e2: f8cd c04c str.w ip, [sp, #76] ; 0x4c - 133e6: 46ab mov fp, r5 - 133e8: 930a str r3, [sp, #40] ; 0x28 - 133ea: f7ff bae1 b.w 129b0 <_svfprintf_r+0x6d4> - 133ee: bf00 nop - 133f0: 00018924 .word 0x00018924 - 133f4: 00018938 .word 0x00018938 - 133f8: 0001894c .word 0x0001894c - 133fc: 00018964 .word 0x00018964 - 13400: cccccccd .word 0xcccccccd - 13404: 2301 movs r3, #1 - 13406: f8c9 3004 str.w r3, [r9, #4] - 1340a: 9b2d ldr r3, [sp, #180] ; 0xb4 - 1340c: 4aba ldr r2, [pc, #744] ; (136f8 <_svfprintf_r+0x141c>) - 1340e: f8c9 2000 str.w r2, [r9] - 13412: 3301 adds r3, #1 - 13414: 3601 adds r6, #1 - 13416: 2b07 cmp r3, #7 - 13418: 962e str r6, [sp, #184] ; 0xb8 - 1341a: 932d str r3, [sp, #180] ; 0xb4 - 1341c: f300 818c bgt.w 13738 <_svfprintf_r+0x145c> - 13420: f109 0908 add.w r9, r9, #8 - 13424: 2900 cmp r1, #0 - 13426: f040 80be bne.w 135a6 <_svfprintf_r+0x12ca> - 1342a: 9a13 ldr r2, [sp, #76] ; 0x4c - 1342c: f00b 0301 and.w r3, fp, #1 - 13430: 4313 orrs r3, r2 - 13432: f43f a8d8 beq.w 125e6 <_svfprintf_r+0x30a> - 13436: 9b17 ldr r3, [sp, #92] ; 0x5c - 13438: 9919 ldr r1, [sp, #100] ; 0x64 - 1343a: 199a adds r2, r3, r6 - 1343c: e9c9 1300 strd r1, r3, [r9] - 13440: 9b2d ldr r3, [sp, #180] ; 0xb4 - 13442: 922e str r2, [sp, #184] ; 0xb8 - 13444: 3301 adds r3, #1 - 13446: 2b07 cmp r3, #7 - 13448: 932d str r3, [sp, #180] ; 0xb4 - 1344a: f300 826e bgt.w 1392a <_svfprintf_r+0x164e> - 1344e: f109 0908 add.w r9, r9, #8 - 13452: 9913 ldr r1, [sp, #76] ; 0x4c - 13454: f8c9 4000 str.w r4, [r9] - 13458: 3301 adds r3, #1 - 1345a: 188e adds r6, r1, r2 - 1345c: 2b07 cmp r3, #7 - 1345e: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 13462: f8c9 1004 str.w r1, [r9, #4] - 13466: f77f a8bc ble.w 125e2 <_svfprintf_r+0x306> - 1346a: f7ff bbf1 b.w 12c50 <_svfprintf_r+0x974> - 1346e: 990c ldr r1, [sp, #48] ; 0x30 - 13470: 931e str r3, [sp, #120] ; 0x78 - 13472: aa2c add r2, sp, #176 ; 0xb0 - 13474: 4650 mov r0, sl - 13476: f002 fbab bl 15bd0 <__ssprint_r> - 1347a: 2800 cmp r0, #0 - 1347c: f47f ab99 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13480: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 13484: 9e2e ldr r6, [sp, #184] ; 0xb8 - 13486: 9b1e ldr r3, [sp, #120] ; 0x78 - 13488: f10d 09bc add.w r9, sp, #188 ; 0xbc - 1348c: f7ff b86a b.w 12564 <_svfprintf_r+0x288> - 13490: 46c2 mov sl, r8 - 13492: f7ff bb8e b.w 12bb2 <_svfprintf_r+0x8d6> - 13496: f01b 0240 ands.w r2, fp, #64 ; 0x40 - 1349a: f000 80b8 beq.w 1360e <_svfprintf_r+0x1332> - 1349e: 980e ldr r0, [sp, #56] ; 0x38 - 134a0: f850 2b04 ldr.w r2, [r0], #4 - 134a4: 900e str r0, [sp, #56] ; 0x38 - 134a6: 4619 mov r1, r3 - 134a8: b292 uxth r2, r2 - 134aa: e640 b.n 1312e <_svfprintf_r+0xe52> - 134ac: 990c ldr r1, [sp, #48] ; 0x30 - 134ae: aa2c add r2, sp, #176 ; 0xb0 - 134b0: 4650 mov r0, sl - 134b2: f002 fb8d bl 15bd0 <__ssprint_r> - 134b6: 2800 cmp r0, #0 - 134b8: f47f ab7b bne.w 12bb2 <_svfprintf_r+0x8d6> - 134bc: 9e2e ldr r6, [sp, #184] ; 0xb8 - 134be: f10d 09bc add.w r9, sp, #188 ; 0xbc - 134c2: f7ff babc b.w 12a3e <_svfprintf_r+0x762> - 134c6: ae2a add r6, sp, #168 ; 0xa8 - 134c8: 2208 movs r2, #8 - 134ca: 2100 movs r1, #0 - 134cc: 4630 mov r0, r6 - 134ce: 9425 str r4, [sp, #148] ; 0x94 - 134d0: f7fd fe50 bl 11174 - 134d4: 9b08 ldr r3, [sp, #32] - 134d6: 1c5a adds r2, r3, #1 - 134d8: f000 80d4 beq.w 13684 <_svfprintf_r+0x13a8> - 134dc: 2500 movs r5, #0 - 134de: f8cd 801c str.w r8, [sp, #28] - 134e2: f8cd b034 str.w fp, [sp, #52] ; 0x34 - 134e6: 46a8 mov r8, r5 - 134e8: 469b mov fp, r3 - 134ea: e00c b.n 13506 <_svfprintf_r+0x122a> - 134ec: a93f add r1, sp, #252 ; 0xfc - 134ee: 4650 mov r0, sl - 134f0: f001 faa0 bl 14a34 <_wcrtomb_r> - 134f4: 1c43 adds r3, r0, #1 - 134f6: 4440 add r0, r8 - 134f8: f000 83b8 beq.w 13c6c <_svfprintf_r+0x1990> - 134fc: 4558 cmp r0, fp - 134fe: dc08 bgt.n 13512 <_svfprintf_r+0x1236> - 13500: f000 8435 beq.w 13d6e <_svfprintf_r+0x1a92> - 13504: 4680 mov r8, r0 - 13506: 9a25 ldr r2, [sp, #148] ; 0x94 - 13508: 5952 ldr r2, [r2, r5] - 1350a: 4633 mov r3, r6 - 1350c: 3504 adds r5, #4 - 1350e: 2a00 cmp r2, #0 - 13510: d1ec bne.n 134ec <_svfprintf_r+0x1210> - 13512: f8cd 8028 str.w r8, [sp, #40] ; 0x28 - 13516: f8dd b034 ldr.w fp, [sp, #52] ; 0x34 - 1351a: f8dd 801c ldr.w r8, [sp, #28] - 1351e: e0be b.n 1369e <_svfprintf_r+0x13c2> - 13520: 4616 mov r6, r2 - 13522: 3301 adds r3, #1 - 13524: 4426 add r6, r4 - 13526: 2b07 cmp r3, #7 - 13528: f8c9 5000 str.w r5, [r9] - 1352c: f8c9 4004 str.w r4, [r9, #4] - 13530: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 13534: f77f a855 ble.w 125e2 <_svfprintf_r+0x306> - 13538: f7ff bb8a b.w 12c50 <_svfprintf_r+0x974> - 1353c: aa2c add r2, sp, #176 ; 0xb0 - 1353e: 4641 mov r1, r8 - 13540: 4650 mov r0, sl - 13542: f002 fb45 bl 15bd0 <__ssprint_r> - 13546: 2800 cmp r0, #0 - 13548: f47f ab33 bne.w 12bb2 <_svfprintf_r+0x8d6> - 1354c: 7838 ldrb r0, [r7, #0] - 1354e: 992e ldr r1, [sp, #184] ; 0xb8 - 13550: aa2f add r2, sp, #188 ; 0xbc - 13552: e69f b.n 13294 <_svfprintf_r+0xfb8> - 13554: 990c ldr r1, [sp, #48] ; 0x30 - 13556: aa2c add r2, sp, #176 ; 0xb0 - 13558: 4650 mov r0, sl - 1355a: f002 fb39 bl 15bd0 <__ssprint_r> - 1355e: 2800 cmp r0, #0 - 13560: f47f ab27 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13564: 9e2e ldr r6, [sp, #184] ; 0xb8 - 13566: f10d 09bc add.w r9, sp, #188 ; 0xbc - 1356a: f7ff b823 b.w 125b4 <_svfprintf_r+0x2d8> - 1356e: 2b01 cmp r3, #1 - 13570: 465d mov r5, fp - 13572: f47f aa09 bne.w 12988 <_svfprintf_r+0x6ac> - 13576: f7ff bbb9 b.w 12cec <_svfprintf_r+0xa10> - 1357a: 9b0e ldr r3, [sp, #56] ; 0x38 - 1357c: 9909 ldr r1, [sp, #36] ; 0x24 - 1357e: f853 2b04 ldr.w r2, [r3], #4 - 13582: 4644 mov r4, r8 - 13584: 6011 str r1, [r2, #0] - 13586: 930e str r3, [sp, #56] ; 0x38 - 13588: f7fe bed6 b.w 12338 <_svfprintf_r+0x5c> - 1358c: 4616 mov r6, r2 - 1358e: 3701 adds r7, #1 - 13590: 4426 add r6, r4 - 13592: 2f07 cmp r7, #7 - 13594: e9cd 762d strd r7, r6, [sp, #180] ; 0xb4 - 13598: f8c9 5000 str.w r5, [r9] - 1359c: f8c9 4004 str.w r4, [r9, #4] - 135a0: f77f ab47 ble.w 12c32 <_svfprintf_r+0x956> - 135a4: e491 b.n 12eca <_svfprintf_r+0xbee> - 135a6: 9b17 ldr r3, [sp, #92] ; 0x5c - 135a8: 9819 ldr r0, [sp, #100] ; 0x64 - 135aa: 199a adds r2, r3, r6 - 135ac: e9c9 0300 strd r0, r3, [r9] - 135b0: 9b2d ldr r3, [sp, #180] ; 0xb4 - 135b2: 922e str r2, [sp, #184] ; 0xb8 - 135b4: 3301 adds r3, #1 - 135b6: 2b07 cmp r3, #7 - 135b8: 932d str r3, [sp, #180] ; 0xb4 - 135ba: f300 81b6 bgt.w 1392a <_svfprintf_r+0x164e> - 135be: f109 0908 add.w r9, r9, #8 - 135c2: 2900 cmp r1, #0 - 135c4: f6bf af45 bge.w 13452 <_svfprintf_r+0x1176> - 135c8: 424f negs r7, r1 - 135ca: 3110 adds r1, #16 - 135cc: 4d4b ldr r5, [pc, #300] ; (136fc <_svfprintf_r+0x1420>) - 135ce: f280 8388 bge.w 13ce2 <_svfprintf_r+0x1a06> - 135d2: 4649 mov r1, r9 - 135d4: 2610 movs r6, #16 - 135d6: 46a1 mov r9, r4 - 135d8: 9c0c ldr r4, [sp, #48] ; 0x30 - 135da: e004 b.n 135e6 <_svfprintf_r+0x130a> - 135dc: 3108 adds r1, #8 - 135de: 3f10 subs r7, #16 - 135e0: 2f10 cmp r7, #16 - 135e2: f340 837c ble.w 13cde <_svfprintf_r+0x1a02> - 135e6: 3301 adds r3, #1 - 135e8: 3210 adds r2, #16 - 135ea: 2b07 cmp r3, #7 - 135ec: e9c1 5600 strd r5, r6, [r1] - 135f0: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 135f4: ddf2 ble.n 135dc <_svfprintf_r+0x1300> - 135f6: aa2c add r2, sp, #176 ; 0xb0 - 135f8: 4621 mov r1, r4 - 135fa: 4650 mov r0, sl - 135fc: f002 fae8 bl 15bd0 <__ssprint_r> - 13600: 2800 cmp r0, #0 - 13602: f47f aad6 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13606: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 1360a: a92f add r1, sp, #188 ; 0xbc - 1360c: e7e7 b.n 135de <_svfprintf_r+0x1302> - 1360e: 9b0e ldr r3, [sp, #56] ; 0x38 - 13610: f41b 7100 ands.w r1, fp, #512 ; 0x200 - 13614: bf1a itte ne - 13616: 4611 movne r1, r2 - 13618: f853 2b04 ldrne.w r2, [r3], #4 - 1361c: f853 2b04 ldreq.w r2, [r3], #4 - 13620: 930e str r3, [sp, #56] ; 0x38 - 13622: bf18 it ne - 13624: b2d2 uxtbne r2, r2 - 13626: e582 b.n 1312e <_svfprintf_r+0xe52> - 13628: 9b0e ldr r3, [sp, #56] ; 0x38 - 1362a: f41b 7100 ands.w r1, fp, #512 ; 0x200 - 1362e: bf1a itte ne - 13630: 4611 movne r1, r2 - 13632: f853 2b04 ldrne.w r2, [r3], #4 - 13636: f853 2b04 ldreq.w r2, [r3], #4 - 1363a: 930e str r3, [sp, #56] ; 0x38 - 1363c: bf18 it ne - 1363e: b2d2 uxtbne r2, r2 - 13640: f7ff b953 b.w 128ea <_svfprintf_r+0x60e> - 13644: 9b0e ldr r3, [sp, #56] ; 0x38 - 13646: f415 7100 ands.w r1, r5, #512 ; 0x200 - 1364a: bf1a itte ne - 1364c: 4611 movne r1, r2 - 1364e: f853 2b04 ldrne.w r2, [r3], #4 - 13652: f853 2b04 ldreq.w r2, [r3], #4 - 13656: 930e str r3, [sp, #56] ; 0x38 - 13658: bf18 it ne - 1365a: b2d2 uxtbne r2, r2 - 1365c: 2301 movs r3, #1 - 1365e: f7ff b8e1 b.w 12824 <_svfprintf_r+0x548> - 13662: 4634 mov r4, r6 - 13664: 4616 mov r6, r2 - 13666: 3301 adds r3, #1 - 13668: 443e add r6, r7 - 1366a: 2b07 cmp r3, #7 - 1366c: e9cd 362d strd r3, r6, [sp, #180] ; 0xb4 - 13670: f8c9 5000 str.w r5, [r9] - 13674: f8c9 7004 str.w r7, [r9, #4] - 13678: f300 814a bgt.w 13910 <_svfprintf_r+0x1634> - 1367c: f109 0908 add.w r9, r9, #8 - 13680: f7ff bbb3 b.w 12dea <_svfprintf_r+0xb0e> - 13684: 2300 movs r3, #0 - 13686: 4619 mov r1, r3 - 13688: 9600 str r6, [sp, #0] - 1368a: aa25 add r2, sp, #148 ; 0x94 - 1368c: 4650 mov r0, sl - 1368e: f001 f9f7 bl 14a80 <_wcsrtombs_r> - 13692: 4603 mov r3, r0 - 13694: 3301 adds r3, #1 - 13696: 900a str r0, [sp, #40] ; 0x28 - 13698: f000 82e8 beq.w 13c6c <_svfprintf_r+0x1990> - 1369c: 9425 str r4, [sp, #148] ; 0x94 - 1369e: 9b0a ldr r3, [sp, #40] ; 0x28 - 136a0: 2b00 cmp r3, #0 - 136a2: d03d beq.n 13720 <_svfprintf_r+0x1444> - 136a4: 2b63 cmp r3, #99 ; 0x63 - 136a6: f300 8129 bgt.w 138fc <_svfprintf_r+0x1620> - 136aa: 2300 movs r3, #0 - 136ac: 930d str r3, [sp, #52] ; 0x34 - 136ae: ac3f add r4, sp, #252 ; 0xfc - 136b0: 2208 movs r2, #8 - 136b2: 2100 movs r1, #0 - 136b4: 4630 mov r0, r6 - 136b6: f7fd fd5d bl 11174 - 136ba: 9d0a ldr r5, [sp, #40] ; 0x28 - 136bc: 9600 str r6, [sp, #0] - 136be: 462b mov r3, r5 - 136c0: aa25 add r2, sp, #148 ; 0x94 - 136c2: 4621 mov r1, r4 - 136c4: 4650 mov r0, sl - 136c6: f001 f9db bl 14a80 <_wcsrtombs_r> - 136ca: 4285 cmp r5, r0 - 136cc: f040 83c4 bne.w 13e58 <_svfprintf_r+0x1b7c> - 136d0: 990a ldr r1, [sp, #40] ; 0x28 - 136d2: 970e str r7, [sp, #56] ; 0x38 - 136d4: 2300 movs r3, #0 - 136d6: 5463 strb r3, [r4, r1] - 136d8: ea21 71e1 bic.w r1, r1, r1, asr #31 - 136dc: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 136e0: 9308 str r3, [sp, #32] - 136e2: 9107 str r1, [sp, #28] - 136e4: 9312 str r3, [sp, #72] ; 0x48 - 136e6: 9316 str r3, [sp, #88] ; 0x58 - 136e8: 9311 str r3, [sp, #68] ; 0x44 - 136ea: f7fe bfdb b.w 126a4 <_svfprintf_r+0x3c8> - 136ee: 222d movs r2, #45 ; 0x2d - 136f0: f88d 2087 strb.w r2, [sp, #135] ; 0x87 - 136f4: f7fe bfc5 b.w 12682 <_svfprintf_r+0x3a6> - 136f8: 0001860c .word 0x0001860c - 136fc: 00018964 .word 0x00018964 - 13700: 9b1d ldr r3, [sp, #116] ; 0x74 - 13702: 991c ldr r1, [sp, #112] ; 0x70 - 13704: 1ae4 subs r4, r4, r3 - 13706: 461a mov r2, r3 - 13708: 4620 mov r0, r4 - 1370a: f7fd fe7f bl 1140c - 1370e: f899 2001 ldrb.w r2, [r9, #1] - 13712: 4ba5 ldr r3, [pc, #660] ; (139a8 <_svfprintf_r+0x16cc>) - 13714: b10a cbz r2, 1371a <_svfprintf_r+0x143e> - 13716: f109 0901 add.w r9, r9, #1 - 1371a: f04f 0c00 mov.w ip, #0 - 1371e: e622 b.n 13366 <_svfprintf_r+0x108a> - 13720: 9b0a ldr r3, [sp, #40] ; 0x28 - 13722: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 13726: 970e str r7, [sp, #56] ; 0x38 - 13728: e9cd 3307 strd r3, r3, [sp, #28] - 1372c: 9312 str r3, [sp, #72] ; 0x48 - 1372e: 9316 str r3, [sp, #88] ; 0x58 - 13730: 9311 str r3, [sp, #68] ; 0x44 - 13732: 930d str r3, [sp, #52] ; 0x34 - 13734: f7fe bfb6 b.w 126a4 <_svfprintf_r+0x3c8> - 13738: 990c ldr r1, [sp, #48] ; 0x30 - 1373a: aa2c add r2, sp, #176 ; 0xb0 - 1373c: 4650 mov r0, sl - 1373e: f002 fa47 bl 15bd0 <__ssprint_r> - 13742: 2800 cmp r0, #0 - 13744: f47f aa35 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13748: 9923 ldr r1, [sp, #140] ; 0x8c - 1374a: 9e2e ldr r6, [sp, #184] ; 0xb8 - 1374c: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13750: e668 b.n 13424 <_svfprintf_r+0x1148> - 13752: 9a13 ldr r2, [sp, #76] ; 0x4c - 13754: 990a ldr r1, [sp, #40] ; 0x28 - 13756: 18a5 adds r5, r4, r2 - 13758: 1a6d subs r5, r5, r1 - 1375a: 1ad4 subs r4, r2, r3 - 1375c: 42a5 cmp r5, r4 - 1375e: bfa8 it ge - 13760: 4625 movge r5, r4 - 13762: f7ff bb77 b.w 12e54 <_svfprintf_r+0xb78> - 13766: f913 2b04 ldrsb.w r2, [r3], #4 - 1376a: 930e str r3, [sp, #56] ; 0x38 - 1376c: 17d1 asrs r1, r2, #31 - 1376e: 460b mov r3, r1 - 13770: f7ff b807 b.w 12782 <_svfprintf_r+0x4a6> - 13774: 9b0e ldr r3, [sp, #56] ; 0x38 - 13776: 9909 ldr r1, [sp, #36] ; 0x24 - 13778: f853 2b04 ldr.w r2, [r3], #4 - 1377c: 930e str r3, [sp, #56] ; 0x38 - 1377e: 8011 strh r1, [r2, #0] - 13780: 4644 mov r4, r8 - 13782: f7fe bdd9 b.w 12338 <_svfprintf_r+0x5c> - 13786: 9b08 ldr r3, [sp, #32] - 13788: 930a str r3, [sp, #40] ; 0x28 - 1378a: 2302 movs r3, #2 - 1378c: a92a add r1, sp, #168 ; 0xa8 - 1378e: 9104 str r1, [sp, #16] - 13790: a925 add r1, sp, #148 ; 0x94 - 13792: 9d0a ldr r5, [sp, #40] ; 0x28 - 13794: 9103 str r1, [sp, #12] - 13796: a923 add r1, sp, #140 ; 0x8c - 13798: 9300 str r3, [sp, #0] - 1379a: 463a mov r2, r7 - 1379c: 4633 mov r3, r6 - 1379e: 9501 str r5, [sp, #4] - 137a0: 9102 str r1, [sp, #8] - 137a2: 4650 mov r0, sl - 137a4: f001 faa4 bl 14cf0 <_dtoa_r> - 137a8: 9b07 ldr r3, [sp, #28] - 137aa: 2b47 cmp r3, #71 ; 0x47 - 137ac: 4604 mov r4, r0 - 137ae: f000 81a3 beq.w 13af8 <_svfprintf_r+0x181c> - 137b2: 2b46 cmp r3, #70 ; 0x46 - 137b4: 4405 add r5, r0 - 137b6: d105 bne.n 137c4 <_svfprintf_r+0x14e8> - 137b8: 7803 ldrb r3, [r0, #0] - 137ba: 2b30 cmp r3, #48 ; 0x30 - 137bc: f000 82b8 beq.w 13d30 <_svfprintf_r+0x1a54> - 137c0: 9b23 ldr r3, [sp, #140] ; 0x8c - 137c2: 441d add r5, r3 - 137c4: 4638 mov r0, r7 - 137c6: 4631 mov r1, r6 - 137c8: 2200 movs r2, #0 - 137ca: 2300 movs r3, #0 - 137cc: f7fc f87a bl f8c4 <__aeabi_dcmpeq> - 137d0: 2800 cmp r0, #0 - 137d2: f000 8166 beq.w 13aa2 <_svfprintf_r+0x17c6> - 137d6: 462b mov r3, r5 - 137d8: 1b1b subs r3, r3, r4 - 137da: 9313 str r3, [sp, #76] ; 0x4c - 137dc: 9b07 ldr r3, [sp, #28] - 137de: 2b47 cmp r3, #71 ; 0x47 - 137e0: f000 814a beq.w 13a78 <_svfprintf_r+0x179c> - 137e4: 9b07 ldr r3, [sp, #28] - 137e6: 2b46 cmp r3, #70 ; 0x46 - 137e8: f000 8200 beq.w 13bec <_svfprintf_r+0x1910> - 137ec: 9b23 ldr r3, [sp, #140] ; 0x8c - 137ee: 9311 str r3, [sp, #68] ; 0x44 - 137f0: 9b11 ldr r3, [sp, #68] ; 0x44 - 137f2: 9a07 ldr r2, [sp, #28] - 137f4: 3b01 subs r3, #1 - 137f6: 2a41 cmp r2, #65 ; 0x41 - 137f8: 9323 str r3, [sp, #140] ; 0x8c - 137fa: f000 8223 beq.w 13c44 <_svfprintf_r+0x1968> - 137fe: f89d 2040 ldrb.w r2, [sp, #64] ; 0x40 - 13802: 2100 movs r1, #0 - 13804: 2b00 cmp r3, #0 - 13806: bfb8 it lt - 13808: 9b11 ldrlt r3, [sp, #68] ; 0x44 - 1380a: f88d 2098 strb.w r2, [sp, #152] ; 0x98 - 1380e: bfba itte lt - 13810: f1c3 0301 rsblt r3, r3, #1 - 13814: 222d movlt r2, #45 ; 0x2d - 13816: 222b movge r2, #43 ; 0x2b - 13818: 2b09 cmp r3, #9 - 1381a: f88d 2099 strb.w r2, [sp, #153] ; 0x99 - 1381e: f340 824f ble.w 13cc0 <_svfprintf_r+0x19e4> - 13822: f10d 05af add.w r5, sp, #175 ; 0xaf - 13826: 4e61 ldr r6, [pc, #388] ; (139ac <_svfprintf_r+0x16d0>) - 13828: 462a mov r2, r5 - 1382a: 4610 mov r0, r2 - 1382c: fb86 2103 smull r2, r1, r6, r3 - 13830: 17da asrs r2, r3, #31 - 13832: ebc2 02a1 rsb r2, r2, r1, asr #2 - 13836: eb02 0182 add.w r1, r2, r2, lsl #2 - 1383a: eba3 0141 sub.w r1, r3, r1, lsl #1 - 1383e: 3130 adds r1, #48 ; 0x30 - 13840: f800 1c01 strb.w r1, [r0, #-1] - 13844: 4619 mov r1, r3 - 13846: 2963 cmp r1, #99 ; 0x63 - 13848: 4613 mov r3, r2 - 1384a: f100 32ff add.w r2, r0, #4294967295 ; 0xffffffff - 1384e: dcec bgt.n 1382a <_svfprintf_r+0x154e> - 13850: 3330 adds r3, #48 ; 0x30 - 13852: b2d9 uxtb r1, r3 - 13854: 1e83 subs r3, r0, #2 - 13856: 429d cmp r5, r3 - 13858: f802 1c01 strb.w r1, [r2, #-1] - 1385c: f240 82e9 bls.w 13e32 <_svfprintf_r+0x1b56> - 13860: 4613 mov r3, r2 - 13862: f10d 029a add.w r2, sp, #154 ; 0x9a - 13866: e001 b.n 1386c <_svfprintf_r+0x1590> - 13868: f813 1b01 ldrb.w r1, [r3], #1 - 1386c: f802 1b01 strb.w r1, [r2], #1 - 13870: 429d cmp r5, r3 - 13872: d1f9 bne.n 13868 <_svfprintf_r+0x158c> - 13874: f10d 03b1 add.w r3, sp, #177 ; 0xb1 - 13878: f10d 029a add.w r2, sp, #154 ; 0x9a - 1387c: 1a1b subs r3, r3, r0 - 1387e: 4413 add r3, r2 - 13880: aa26 add r2, sp, #152 ; 0x98 - 13882: 1a9b subs r3, r3, r2 - 13884: 931b str r3, [sp, #108] ; 0x6c - 13886: 9b13 ldr r3, [sp, #76] ; 0x4c - 13888: 9a1b ldr r2, [sp, #108] ; 0x6c - 1388a: 2b01 cmp r3, #1 - 1388c: 441a add r2, r3 - 1388e: 920a str r2, [sp, #40] ; 0x28 - 13890: f340 8249 ble.w 13d26 <_svfprintf_r+0x1a4a> - 13894: 9b0a ldr r3, [sp, #40] ; 0x28 - 13896: 9a17 ldr r2, [sp, #92] ; 0x5c - 13898: 4413 add r3, r2 - 1389a: 930a str r3, [sp, #40] ; 0x28 - 1389c: 9b0f ldr r3, [sp, #60] ; 0x3c - 1389e: 9a0a ldr r2, [sp, #40] ; 0x28 - 138a0: f423 6380 bic.w r3, r3, #1024 ; 0x400 - 138a4: f443 7b80 orr.w fp, r3, #256 ; 0x100 - 138a8: ea22 72e2 bic.w r2, r2, r2, asr #31 - 138ac: 2300 movs r3, #0 - 138ae: 9312 str r3, [sp, #72] ; 0x48 - 138b0: 9207 str r2, [sp, #28] - 138b2: 9316 str r3, [sp, #88] ; 0x58 - 138b4: 9311 str r3, [sp, #68] ; 0x44 - 138b6: 9b1e ldr r3, [sp, #120] ; 0x78 - 138b8: 2b00 cmp r3, #0 - 138ba: f040 80eb bne.w 13a94 <_svfprintf_r+0x17b8> - 138be: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 138c2: 9308 str r3, [sp, #32] - 138c4: f7fe beee b.w 126a4 <_svfprintf_r+0x3c8> - 138c8: 4620 mov r0, r4 - 138ca: 970e str r7, [sp, #56] ; 0x38 - 138cc: f7fe fad8 bl 11e80 - 138d0: 9b11 ldr r3, [sp, #68] ; 0x44 - 138d2: 9308 str r3, [sp, #32] - 138d4: ea20 71e0 bic.w r1, r0, r0, asr #31 - 138d8: 9312 str r3, [sp, #72] ; 0x48 - 138da: 9316 str r3, [sp, #88] ; 0x58 - 138dc: 930d str r3, [sp, #52] ; 0x34 - 138de: 2373 movs r3, #115 ; 0x73 - 138e0: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 138e4: 900a str r0, [sp, #40] ; 0x28 - 138e6: 9107 str r1, [sp, #28] - 138e8: 9310 str r3, [sp, #64] ; 0x40 - 138ea: f7fe bedb b.w 126a4 <_svfprintf_r+0x3c8> - 138ee: 990c ldr r1, [sp, #48] ; 0x30 - 138f0: aa2c add r2, sp, #176 ; 0xb0 - 138f2: 4650 mov r0, sl - 138f4: f002 f96c bl 15bd0 <__ssprint_r> - 138f8: f7fe bdf8 b.w 124ec <_svfprintf_r+0x210> - 138fc: 1c59 adds r1, r3, #1 - 138fe: 4650 mov r0, sl - 13900: f7fc fbe6 bl 100d0 <_malloc_r> - 13904: 4604 mov r4, r0 - 13906: 2800 cmp r0, #0 - 13908: f000 81b0 beq.w 13c6c <_svfprintf_r+0x1990> - 1390c: 900d str r0, [sp, #52] ; 0x34 - 1390e: e6cf b.n 136b0 <_svfprintf_r+0x13d4> - 13910: 990c ldr r1, [sp, #48] ; 0x30 - 13912: aa2c add r2, sp, #176 ; 0xb0 - 13914: 4650 mov r0, sl - 13916: f002 f95b bl 15bd0 <__ssprint_r> - 1391a: 2800 cmp r0, #0 - 1391c: f47f a949 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13920: 9e2e ldr r6, [sp, #184] ; 0xb8 - 13922: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13926: f7ff ba60 b.w 12dea <_svfprintf_r+0xb0e> - 1392a: 990c ldr r1, [sp, #48] ; 0x30 - 1392c: aa2c add r2, sp, #176 ; 0xb0 - 1392e: 4650 mov r0, sl - 13930: f002 f94e bl 15bd0 <__ssprint_r> - 13934: 2800 cmp r0, #0 - 13936: f47f a93c bne.w 12bb2 <_svfprintf_r+0x8d6> - 1393a: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 1393e: 9923 ldr r1, [sp, #140] ; 0x8c - 13940: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13944: e63d b.n 135c2 <_svfprintf_r+0x12e6> - 13946: 2306 movs r3, #6 - 13948: 9308 str r3, [sp, #32] - 1394a: f7ff bba0 b.w 1308e <_svfprintf_r+0xdb2> - 1394e: 9b08 ldr r3, [sp, #32] - 13950: 3301 adds r3, #1 - 13952: 930a str r3, [sp, #40] ; 0x28 - 13954: 2302 movs r3, #2 - 13956: e719 b.n 1378c <_svfprintf_r+0x14b0> - 13958: 9b08 ldr r3, [sp, #32] - 1395a: 930a str r3, [sp, #40] ; 0x28 - 1395c: 2303 movs r3, #3 - 1395e: e715 b.n 1378c <_svfprintf_r+0x14b0> - 13960: 4638 mov r0, r7 - 13962: 4631 mov r1, r6 - 13964: aa23 add r2, sp, #140 ; 0x8c - 13966: f001 f899 bl 14a9c - 1396a: 2200 movs r2, #0 - 1396c: f04f 537f mov.w r3, #1069547520 ; 0x3fc00000 - 13970: f7fb fd40 bl f3f4 <__aeabi_dmul> - 13974: 2200 movs r2, #0 - 13976: 2300 movs r3, #0 - 13978: 4606 mov r6, r0 - 1397a: 460f mov r7, r1 - 1397c: f7fb ffa2 bl f8c4 <__aeabi_dcmpeq> - 13980: b108 cbz r0, 13986 <_svfprintf_r+0x16aa> - 13982: 2301 movs r3, #1 - 13984: 9323 str r3, [sp, #140] ; 0x8c - 13986: 4b0a ldr r3, [pc, #40] ; (139b0 <_svfprintf_r+0x16d4>) - 13988: 930a str r3, [sp, #40] ; 0x28 - 1398a: 9b08 ldr r3, [sp, #32] - 1398c: f8cd 904c str.w r9, [sp, #76] ; 0x4c - 13990: 3b01 subs r3, #1 - 13992: e9cd 8b11 strd r8, fp, [sp, #68] ; 0x44 - 13996: 4625 mov r5, r4 - 13998: f8dd b028 ldr.w fp, [sp, #40] ; 0x28 - 1399c: f8cd a058 str.w sl, [sp, #88] ; 0x58 - 139a0: 4698 mov r8, r3 - 139a2: 941f str r4, [sp, #124] ; 0x7c - 139a4: e00d b.n 139c2 <_svfprintf_r+0x16e6> - 139a6: bf00 nop - 139a8: cccccccd .word 0xcccccccd - 139ac: 66666667 .word 0x66666667 - 139b0: 00018938 .word 0x00018938 - 139b4: 2200 movs r2, #0 - 139b6: 2300 movs r3, #0 - 139b8: f108 38ff add.w r8, r8, #4294967295 ; 0xffffffff - 139bc: f7fb ff82 bl f8c4 <__aeabi_dcmpeq> - 139c0: b9e8 cbnz r0, 139fe <_svfprintf_r+0x1722> - 139c2: 4bae ldr r3, [pc, #696] ; (13c7c <_svfprintf_r+0x19a0>) - 139c4: 2200 movs r2, #0 - 139c6: 4630 mov r0, r6 - 139c8: 4639 mov r1, r7 - 139ca: f7fb fd13 bl f3f4 <__aeabi_dmul> - 139ce: 460f mov r7, r1 - 139d0: 4606 mov r6, r0 - 139d2: f7fb ffbf bl f954 <__aeabi_d2iz> - 139d6: 4604 mov r4, r0 - 139d8: f7fb fca2 bl f320 <__aeabi_i2d> - 139dc: 460b mov r3, r1 - 139de: 4602 mov r2, r0 - 139e0: 4639 mov r1, r7 - 139e2: 4630 mov r0, r6 - 139e4: f7fb fb4e bl f084 <__aeabi_dsub> - 139e8: f81b 3004 ldrb.w r3, [fp, r4] - 139ec: f1b8 3fff cmp.w r8, #4294967295 ; 0xffffffff - 139f0: 46aa mov sl, r5 - 139f2: 46c1 mov r9, r8 - 139f4: f805 3b01 strb.w r3, [r5], #1 - 139f8: 4606 mov r6, r0 - 139fa: 460f mov r7, r1 - 139fc: d1da bne.n 139b4 <_svfprintf_r+0x16d8> - 139fe: 4ba0 ldr r3, [pc, #640] ; (13c80 <_svfprintf_r+0x19a4>) - 13a00: 2200 movs r2, #0 - 13a02: 4630 mov r0, r6 - 13a04: 4639 mov r1, r7 - 13a06: e9dd 8b11 ldrd r8, fp, [sp, #68] ; 0x44 - 13a0a: f8cd 9044 str.w r9, [sp, #68] ; 0x44 - 13a0e: f8dd 904c ldr.w r9, [sp, #76] ; 0x4c - 13a12: e9cd a412 strd sl, r4, [sp, #72] ; 0x48 - 13a16: f8dd a058 ldr.w sl, [sp, #88] ; 0x58 - 13a1a: 9c1f ldr r4, [sp, #124] ; 0x7c - 13a1c: f7fb ff7a bl f914 <__aeabi_dcmpgt> - 13a20: 2800 cmp r0, #0 - 13a22: f040 8131 bne.w 13c88 <_svfprintf_r+0x19ac> - 13a26: 4b96 ldr r3, [pc, #600] ; (13c80 <_svfprintf_r+0x19a4>) - 13a28: 4630 mov r0, r6 - 13a2a: 4639 mov r1, r7 - 13a2c: 2200 movs r2, #0 - 13a2e: f7fb ff49 bl f8c4 <__aeabi_dcmpeq> - 13a32: b118 cbz r0, 13a3c <_svfprintf_r+0x1760> - 13a34: 9b13 ldr r3, [sp, #76] ; 0x4c - 13a36: 07de lsls r6, r3, #31 - 13a38: f100 8126 bmi.w 13c88 <_svfprintf_r+0x19ac> - 13a3c: 9b11 ldr r3, [sp, #68] ; 0x44 - 13a3e: 2b00 cmp r3, #0 - 13a40: db07 blt.n 13a52 <_svfprintf_r+0x1776> - 13a42: 9b11 ldr r3, [sp, #68] ; 0x44 - 13a44: 3301 adds r3, #1 - 13a46: 442b add r3, r5 - 13a48: 2230 movs r2, #48 ; 0x30 - 13a4a: f805 2b01 strb.w r2, [r5], #1 - 13a4e: 42ab cmp r3, r5 - 13a50: d1fb bne.n 13a4a <_svfprintf_r+0x176e> - 13a52: 1b2b subs r3, r5, r4 - 13a54: 9313 str r3, [sp, #76] ; 0x4c - 13a56: e6c1 b.n 137dc <_svfprintf_r+0x1500> - 13a58: 9c10 ldr r4, [sp, #64] ; 0x40 - 13a5a: 9b13 ldr r3, [sp, #76] ; 0x4c - 13a5c: f8dd b028 ldr.w fp, [sp, #40] ; 0x28 - 13a60: f8dd 803c ldr.w r8, [sp, #60] ; 0x3c - 13a64: 971a str r7, [sp, #104] ; 0x68 - 13a66: 18e3 adds r3, r4, r3 - 13a68: 429d cmp r5, r3 - 13a6a: bf28 it cs - 13a6c: 461d movcs r5, r3 - 13a6e: 4691 mov r9, r2 - 13a70: 460e mov r6, r1 - 13a72: 950a str r5, [sp, #40] ; 0x28 - 13a74: f7ff b9c0 b.w 12df8 <_svfprintf_r+0xb1c> - 13a78: 9b23 ldr r3, [sp, #140] ; 0x8c - 13a7a: 9311 str r3, [sp, #68] ; 0x44 - 13a7c: 1cdd adds r5, r3, #3 - 13a7e: db02 blt.n 13a86 <_svfprintf_r+0x17aa> - 13a80: 9a08 ldr r2, [sp, #32] - 13a82: 4293 cmp r3, r2 - 13a84: dd19 ble.n 13aba <_svfprintf_r+0x17de> - 13a86: 9b10 ldr r3, [sp, #64] ; 0x40 - 13a88: 3b02 subs r3, #2 - 13a8a: 9310 str r3, [sp, #64] ; 0x40 - 13a8c: f023 0320 bic.w r3, r3, #32 - 13a90: 9307 str r3, [sp, #28] - 13a92: e6ad b.n 137f0 <_svfprintf_r+0x1514> - 13a94: 222d movs r2, #45 ; 0x2d - 13a96: 2300 movs r3, #0 - 13a98: f88d 2087 strb.w r2, [sp, #135] ; 0x87 - 13a9c: 9308 str r3, [sp, #32] - 13a9e: f7fe be04 b.w 126aa <_svfprintf_r+0x3ce> - 13aa2: 9b2a ldr r3, [sp, #168] ; 0xa8 - 13aa4: 42ab cmp r3, r5 - 13aa6: f4bf ae97 bcs.w 137d8 <_svfprintf_r+0x14fc> - 13aaa: 2130 movs r1, #48 ; 0x30 - 13aac: 1c5a adds r2, r3, #1 - 13aae: 922a str r2, [sp, #168] ; 0xa8 - 13ab0: 7019 strb r1, [r3, #0] - 13ab2: 9b2a ldr r3, [sp, #168] ; 0xa8 - 13ab4: 429d cmp r5, r3 - 13ab6: d8f9 bhi.n 13aac <_svfprintf_r+0x17d0> - 13ab8: e68e b.n 137d8 <_svfprintf_r+0x14fc> - 13aba: 9b11 ldr r3, [sp, #68] ; 0x44 - 13abc: 9a13 ldr r2, [sp, #76] ; 0x4c - 13abe: 4293 cmp r3, r2 - 13ac0: f2c0 80c5 blt.w 13c4e <_svfprintf_r+0x1972> - 13ac4: 9b0f ldr r3, [sp, #60] ; 0x3c - 13ac6: f013 0f01 tst.w r3, #1 - 13aca: 9b11 ldr r3, [sp, #68] ; 0x44 - 13acc: f000 814d beq.w 13d6a <_svfprintf_r+0x1a8e> - 13ad0: 9a17 ldr r2, [sp, #92] ; 0x5c - 13ad2: 4413 add r3, r2 - 13ad4: 930a str r3, [sp, #40] ; 0x28 - 13ad6: 9b0f ldr r3, [sp, #60] ; 0x3c - 13ad8: 0559 lsls r1, r3, #21 - 13ada: d503 bpl.n 13ae4 <_svfprintf_r+0x1808> - 13adc: 9b11 ldr r3, [sp, #68] ; 0x44 - 13ade: 2b00 cmp r3, #0 - 13ae0: f300 8156 bgt.w 13d90 <_svfprintf_r+0x1ab4> - 13ae4: 9b0a ldr r3, [sp, #40] ; 0x28 - 13ae6: ea23 73e3 bic.w r3, r3, r3, asr #31 - 13aea: 9307 str r3, [sp, #28] - 13aec: 2367 movs r3, #103 ; 0x67 - 13aee: 9310 str r3, [sp, #64] ; 0x40 - 13af0: 2300 movs r3, #0 - 13af2: 9312 str r3, [sp, #72] ; 0x48 - 13af4: 9316 str r3, [sp, #88] ; 0x58 - 13af6: e6de b.n 138b6 <_svfprintf_r+0x15da> - 13af8: 9b0f ldr r3, [sp, #60] ; 0x3c - 13afa: 07db lsls r3, r3, #31 - 13afc: f100 809f bmi.w 13c3e <_svfprintf_r+0x1962> - 13b00: 9b2a ldr r3, [sp, #168] ; 0xa8 - 13b02: e669 b.n 137d8 <_svfprintf_r+0x14fc> - 13b04: aa2c add r2, sp, #176 ; 0xb0 - 13b06: 4641 mov r1, r8 - 13b08: 4650 mov r0, sl - 13b0a: f002 f861 bl 15bd0 <__ssprint_r> - 13b0e: 2800 cmp r0, #0 - 13b10: f47f a84f bne.w 12bb2 <_svfprintf_r+0x8d6> - 13b14: 7838 ldrb r0, [r7, #0] - 13b16: 992e ldr r1, [sp, #184] ; 0xb8 - 13b18: aa2f add r2, sp, #188 ; 0xbc - 13b1a: 4405 add r5, r0 - 13b1c: f7ff bbc1 b.w 132a2 <_svfprintf_r+0xfc6> - 13b20: 2378 movs r3, #120 ; 0x78 - 13b22: f88d 3089 strb.w r3, [sp, #137] ; 0x89 - 13b26: 2330 movs r3, #48 ; 0x30 - 13b28: f88d 3088 strb.w r3, [sp, #136] ; 0x88 - 13b2c: f04b 0302 orr.w r3, fp, #2 - 13b30: 930f str r3, [sp, #60] ; 0x3c - 13b32: 9b08 ldr r3, [sp, #32] - 13b34: 2b63 cmp r3, #99 ; 0x63 - 13b36: f300 80ed bgt.w 13d14 <_svfprintf_r+0x1a38> - 13b3a: 2300 movs r3, #0 - 13b3c: 930d str r3, [sp, #52] ; 0x34 - 13b3e: ac3f add r4, sp, #252 ; 0xfc - 13b40: e9dd 1214 ldrd r1, r2, [sp, #80] ; 0x50 - 13b44: 4613 mov r3, r2 - 13b46: 2b00 cmp r3, #0 - 13b48: f44b 7b81 orr.w fp, fp, #258 ; 0x102 - 13b4c: db67 blt.n 13c1e <_svfprintf_r+0x1942> - 13b4e: 461e mov r6, r3 - 13b50: 9b10 ldr r3, [sp, #64] ; 0x40 - 13b52: f023 0320 bic.w r3, r3, #32 - 13b56: 9307 str r3, [sp, #28] - 13b58: 2300 movs r3, #0 - 13b5a: 460f mov r7, r1 - 13b5c: 931e str r3, [sp, #120] ; 0x78 - 13b5e: 9b10 ldr r3, [sp, #64] ; 0x40 - 13b60: 2b61 cmp r3, #97 ; 0x61 - 13b62: f47f aaa4 bne.w 130ae <_svfprintf_r+0xdd2> - 13b66: 4638 mov r0, r7 - 13b68: 4631 mov r1, r6 - 13b6a: aa23 add r2, sp, #140 ; 0x8c - 13b6c: f000 ff96 bl 14a9c - 13b70: 2200 movs r2, #0 - 13b72: f04f 537f mov.w r3, #1069547520 ; 0x3fc00000 - 13b76: f7fb fc3d bl f3f4 <__aeabi_dmul> - 13b7a: 2200 movs r2, #0 - 13b7c: 2300 movs r3, #0 - 13b7e: 4606 mov r6, r0 - 13b80: 460f mov r7, r1 - 13b82: f7fb fe9f bl f8c4 <__aeabi_dcmpeq> - 13b86: b108 cbz r0, 13b8c <_svfprintf_r+0x18b0> - 13b88: 2301 movs r3, #1 - 13b8a: 9323 str r3, [sp, #140] ; 0x8c - 13b8c: 4b3d ldr r3, [pc, #244] ; (13c84 <_svfprintf_r+0x19a8>) - 13b8e: 930a str r3, [sp, #40] ; 0x28 - 13b90: e6fb b.n 1398a <_svfprintf_r+0x16ae> - 13b92: 990c ldr r1, [sp, #48] ; 0x30 - 13b94: aa2c add r2, sp, #176 ; 0xb0 - 13b96: 4650 mov r0, sl - 13b98: f002 f81a bl 15bd0 <__ssprint_r> - 13b9c: 2800 cmp r0, #0 - 13b9e: f47f a808 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13ba2: 9e2e ldr r6, [sp, #184] ; 0xb8 - 13ba4: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13ba8: f7ff b918 b.w 12ddc <_svfprintf_r+0xb00> - 13bac: 990c ldr r1, [sp, #48] ; 0x30 - 13bae: aa2c add r2, sp, #176 ; 0xb0 - 13bb0: 4650 mov r0, sl - 13bb2: f002 f80d bl 15bd0 <__ssprint_r> - 13bb6: 2800 cmp r0, #0 - 13bb8: f47e affb bne.w 12bb2 <_svfprintf_r+0x8d6> - 13bbc: 9b23 ldr r3, [sp, #140] ; 0x8c - 13bbe: 9e2e ldr r6, [sp, #184] ; 0xb8 - 13bc0: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13bc4: f7ff b92e b.w 12e24 <_svfprintf_r+0xb48> - 13bc8: 2358 movs r3, #88 ; 0x58 - 13bca: e7aa b.n 13b22 <_svfprintf_r+0x1846> - 13bcc: 990c ldr r1, [sp, #48] ; 0x30 - 13bce: aa2c add r2, sp, #176 ; 0xb0 - 13bd0: 4650 mov r0, sl - 13bd2: f001 fffd bl 15bd0 <__ssprint_r> - 13bd6: 2800 cmp r0, #0 - 13bd8: f47e afeb bne.w 12bb2 <_svfprintf_r+0x8d6> - 13bdc: 9c23 ldr r4, [sp, #140] ; 0x8c - 13bde: 9b13 ldr r3, [sp, #76] ; 0x4c - 13be0: 9e2e ldr r6, [sp, #184] ; 0xb8 - 13be2: 1b1c subs r4, r3, r4 - 13be4: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13be8: f7ff b934 b.w 12e54 <_svfprintf_r+0xb78> - 13bec: 9a23 ldr r2, [sp, #140] ; 0x8c - 13bee: 9b0f ldr r3, [sp, #60] ; 0x3c - 13bf0: 9211 str r2, [sp, #68] ; 0x44 - 13bf2: 2a00 cmp r2, #0 - 13bf4: f003 0301 and.w r3, r3, #1 - 13bf8: f340 8108 ble.w 13e0c <_svfprintf_r+0x1b30> - 13bfc: 9908 ldr r1, [sp, #32] - 13bfe: 430b orrs r3, r1 - 13c00: f040 80fd bne.w 13dfe <_svfprintf_r+0x1b22> - 13c04: 9b11 ldr r3, [sp, #68] ; 0x44 - 13c06: 930a str r3, [sp, #40] ; 0x28 - 13c08: 2366 movs r3, #102 ; 0x66 - 13c0a: 9310 str r3, [sp, #64] ; 0x40 - 13c0c: 9b0f ldr r3, [sp, #60] ; 0x3c - 13c0e: 055a lsls r2, r3, #21 - 13c10: f100 80c0 bmi.w 13d94 <_svfprintf_r+0x1ab8> - 13c14: 9b0a ldr r3, [sp, #40] ; 0x28 - 13c16: ea23 73e3 bic.w r3, r3, r3, asr #31 - 13c1a: 9307 str r3, [sp, #28] - 13c1c: e768 b.n 13af0 <_svfprintf_r+0x1814> - 13c1e: 9b10 ldr r3, [sp, #64] ; 0x40 - 13c20: f023 0320 bic.w r3, r3, #32 - 13c24: 9307 str r3, [sp, #28] - 13c26: e9dd 2314 ldrd r2, r3, [sp, #80] ; 0x50 - 13c2a: f103 4600 add.w r6, r3, #2147483648 ; 0x80000000 - 13c2e: 232d movs r3, #45 ; 0x2d - 13c30: 4617 mov r7, r2 - 13c32: 931e str r3, [sp, #120] ; 0x78 - 13c34: e793 b.n 13b5e <_svfprintf_r+0x1882> - 13c36: 2200 movs r2, #0 - 13c38: 9208 str r2, [sp, #32] - 13c3a: f7fe bbaa b.w 12392 <_svfprintf_r+0xb6> - 13c3e: 9d0a ldr r5, [sp, #40] ; 0x28 - 13c40: 4425 add r5, r4 - 13c42: e5bf b.n 137c4 <_svfprintf_r+0x14e8> - 13c44: 9a10 ldr r2, [sp, #64] ; 0x40 - 13c46: 320f adds r2, #15 - 13c48: b2d2 uxtb r2, r2 - 13c4a: 2101 movs r1, #1 - 13c4c: e5da b.n 13804 <_svfprintf_r+0x1528> - 13c4e: 9b13 ldr r3, [sp, #76] ; 0x4c - 13c50: 9a17 ldr r2, [sp, #92] ; 0x5c - 13c52: 189a adds r2, r3, r2 - 13c54: 9b11 ldr r3, [sp, #68] ; 0x44 - 13c56: 920a str r2, [sp, #40] ; 0x28 - 13c58: 2b00 cmp r3, #0 - 13c5a: f340 808f ble.w 13d7c <_svfprintf_r+0x1aa0> - 13c5e: 2367 movs r3, #103 ; 0x67 - 13c60: 9310 str r3, [sp, #64] ; 0x40 - 13c62: e7d3 b.n 13c0c <_svfprintf_r+0x1930> - 13c64: 469b mov fp, r3 - 13c66: 2300 movs r3, #0 - 13c68: 930d str r3, [sp, #52] ; 0x34 - 13c6a: e7dc b.n 13c26 <_svfprintf_r+0x194a> - 13c6c: 9a0c ldr r2, [sp, #48] ; 0x30 - 13c6e: f9b2 300c ldrsh.w r3, [r2, #12] - 13c72: f043 0340 orr.w r3, r3, #64 ; 0x40 - 13c76: 8193 strh r3, [r2, #12] - 13c78: f7fe bc3b b.w 124f2 <_svfprintf_r+0x216> - 13c7c: 40300000 .word 0x40300000 - 13c80: 3fe00000 .word 0x3fe00000 - 13c84: 00018924 .word 0x00018924 - 13c88: 9b12 ldr r3, [sp, #72] ; 0x48 - 13c8a: 9a0a ldr r2, [sp, #40] ; 0x28 - 13c8c: 932a str r3, [sp, #168] ; 0xa8 - 13c8e: 7bd1 ldrb r1, [r2, #15] - 13c90: f815 3c01 ldrb.w r3, [r5, #-1] - 13c94: 428b cmp r3, r1 - 13c96: 462a mov r2, r5 - 13c98: d109 bne.n 13cae <_svfprintf_r+0x19d2> - 13c9a: 2030 movs r0, #48 ; 0x30 - 13c9c: f802 0c01 strb.w r0, [r2, #-1] - 13ca0: 9a2a ldr r2, [sp, #168] ; 0xa8 - 13ca2: 1e53 subs r3, r2, #1 - 13ca4: 932a str r3, [sp, #168] ; 0xa8 - 13ca6: f812 3c01 ldrb.w r3, [r2, #-1] - 13caa: 4299 cmp r1, r3 - 13cac: d0f6 beq.n 13c9c <_svfprintf_r+0x19c0> - 13cae: 2b39 cmp r3, #57 ; 0x39 - 13cb0: bf0b itete eq - 13cb2: 9b0a ldreq r3, [sp, #40] ; 0x28 - 13cb4: 3301 addne r3, #1 - 13cb6: 7a9b ldrbeq r3, [r3, #10] - 13cb8: b2db uxtbne r3, r3 - 13cba: f802 3c01 strb.w r3, [r2, #-1] - 13cbe: e6c8 b.n 13a52 <_svfprintf_r+0x1776> - 13cc0: 2900 cmp r1, #0 - 13cc2: f040 808c bne.w 13dde <_svfprintf_r+0x1b02> - 13cc6: 2230 movs r2, #48 ; 0x30 - 13cc8: f88d 209a strb.w r2, [sp, #154] ; 0x9a - 13ccc: f10d 029b add.w r2, sp, #155 ; 0x9b - 13cd0: 3330 adds r3, #48 ; 0x30 - 13cd2: f802 3b01 strb.w r3, [r2], #1 - 13cd6: ab26 add r3, sp, #152 ; 0x98 - 13cd8: 1ad3 subs r3, r2, r3 - 13cda: 931b str r3, [sp, #108] ; 0x6c - 13cdc: e5d3 b.n 13886 <_svfprintf_r+0x15aa> - 13cde: 464c mov r4, r9 - 13ce0: 4689 mov r9, r1 - 13ce2: 3301 adds r3, #1 - 13ce4: 443a add r2, r7 - 13ce6: 2b07 cmp r3, #7 - 13ce8: e9cd 322d strd r3, r2, [sp, #180] ; 0xb4 - 13cec: f8c9 5000 str.w r5, [r9] - 13cf0: f8c9 7004 str.w r7, [r9, #4] - 13cf4: f77f abab ble.w 1344e <_svfprintf_r+0x1172> - 13cf8: 990c ldr r1, [sp, #48] ; 0x30 - 13cfa: aa2c add r2, sp, #176 ; 0xb0 - 13cfc: 4650 mov r0, sl - 13cfe: f001 ff67 bl 15bd0 <__ssprint_r> - 13d02: 2800 cmp r0, #0 - 13d04: f47e af55 bne.w 12bb2 <_svfprintf_r+0x8d6> - 13d08: e9dd 322d ldrd r3, r2, [sp, #180] ; 0xb4 - 13d0c: f10d 09bc add.w r9, sp, #188 ; 0xbc - 13d10: f7ff bb9f b.w 13452 <_svfprintf_r+0x1176> - 13d14: 1c59 adds r1, r3, #1 - 13d16: 4650 mov r0, sl - 13d18: f7fc f9da bl 100d0 <_malloc_r> - 13d1c: 4604 mov r4, r0 - 13d1e: 2800 cmp r0, #0 - 13d20: d0a4 beq.n 13c6c <_svfprintf_r+0x1990> - 13d22: 900d str r0, [sp, #52] ; 0x34 - 13d24: e70c b.n 13b40 <_svfprintf_r+0x1864> - 13d26: 9b0f ldr r3, [sp, #60] ; 0x3c - 13d28: 07d8 lsls r0, r3, #31 - 13d2a: f57f adb7 bpl.w 1389c <_svfprintf_r+0x15c0> - 13d2e: e5b1 b.n 13894 <_svfprintf_r+0x15b8> - 13d30: 4638 mov r0, r7 - 13d32: 4631 mov r1, r6 - 13d34: 2200 movs r2, #0 - 13d36: 2300 movs r3, #0 - 13d38: f7fb fdc4 bl f8c4 <__aeabi_dcmpeq> - 13d3c: 2800 cmp r0, #0 - 13d3e: f47f ad3f bne.w 137c0 <_svfprintf_r+0x14e4> - 13d42: 9b0a ldr r3, [sp, #40] ; 0x28 - 13d44: f1c3 0301 rsb r3, r3, #1 - 13d48: 9323 str r3, [sp, #140] ; 0x8c - 13d4a: e53a b.n 137c2 <_svfprintf_r+0x14e6> - 13d4c: 9b15 ldr r3, [sp, #84] ; 0x54 - 13d4e: 4c4a ldr r4, [pc, #296] ; (13e78 <_svfprintf_r+0x1b9c>) - 13d50: 2b00 cmp r3, #0 - 13d52: bfb4 ite lt - 13d54: 222d movlt r2, #45 ; 0x2d - 13d56: f89d 2087 ldrbge.w r2, [sp, #135] ; 0x87 - 13d5a: 4b48 ldr r3, [pc, #288] ; (13e7c <_svfprintf_r+0x1ba0>) - 13d5c: bfb8 it lt - 13d5e: f88d 2087 strblt.w r2, [sp, #135] ; 0x87 - 13d62: f02b 0b80 bic.w fp, fp, #128 ; 0x80 - 13d66: f7fe bc90 b.w 1268a <_svfprintf_r+0x3ae> - 13d6a: 930a str r3, [sp, #40] ; 0x28 - 13d6c: e6b3 b.n 13ad6 <_svfprintf_r+0x17fa> - 13d6e: 9b08 ldr r3, [sp, #32] - 13d70: f8dd 801c ldr.w r8, [sp, #28] - 13d74: f8dd b034 ldr.w fp, [sp, #52] ; 0x34 - 13d78: 930a str r3, [sp, #40] ; 0x28 - 13d7a: e490 b.n 1369e <_svfprintf_r+0x13c2> - 13d7c: f1c3 0301 rsb r3, r3, #1 - 13d80: 441a add r2, r3 - 13d82: ea22 73e2 bic.w r3, r2, r2, asr #31 - 13d86: 9307 str r3, [sp, #28] - 13d88: 2367 movs r3, #103 ; 0x67 - 13d8a: 920a str r2, [sp, #40] ; 0x28 - 13d8c: 9310 str r3, [sp, #64] ; 0x40 - 13d8e: e6af b.n 13af0 <_svfprintf_r+0x1814> - 13d90: 2367 movs r3, #103 ; 0x67 - 13d92: 9310 str r3, [sp, #64] ; 0x40 - 13d94: 991a ldr r1, [sp, #104] ; 0x68 - 13d96: 780b ldrb r3, [r1, #0] - 13d98: 2bff cmp r3, #255 ; 0xff - 13d9a: d059 beq.n 13e50 <_svfprintf_r+0x1b74> - 13d9c: 2500 movs r5, #0 - 13d9e: 9a11 ldr r2, [sp, #68] ; 0x44 - 13da0: 4628 mov r0, r5 - 13da2: e003 b.n 13dac <_svfprintf_r+0x1ad0> - 13da4: 3001 adds r0, #1 - 13da6: 3101 adds r1, #1 - 13da8: 2bff cmp r3, #255 ; 0xff - 13daa: d008 beq.n 13dbe <_svfprintf_r+0x1ae2> - 13dac: 4293 cmp r3, r2 - 13dae: da06 bge.n 13dbe <_svfprintf_r+0x1ae2> - 13db0: 1ad2 subs r2, r2, r3 - 13db2: 784b ldrb r3, [r1, #1] - 13db4: 2b00 cmp r3, #0 - 13db6: d1f5 bne.n 13da4 <_svfprintf_r+0x1ac8> - 13db8: 780b ldrb r3, [r1, #0] - 13dba: 3501 adds r5, #1 - 13dbc: e7f4 b.n 13da8 <_svfprintf_r+0x1acc> - 13dbe: 9211 str r2, [sp, #68] ; 0x44 - 13dc0: 911a str r1, [sp, #104] ; 0x68 - 13dc2: 9016 str r0, [sp, #88] ; 0x58 - 13dc4: 9512 str r5, [sp, #72] ; 0x48 - 13dc6: 9a12 ldr r2, [sp, #72] ; 0x48 - 13dc8: 9b16 ldr r3, [sp, #88] ; 0x58 - 13dca: 991d ldr r1, [sp, #116] ; 0x74 - 13dcc: 4413 add r3, r2 - 13dce: 9a0a ldr r2, [sp, #40] ; 0x28 - 13dd0: fb01 2303 mla r3, r1, r3, r2 - 13dd4: 930a str r3, [sp, #40] ; 0x28 - 13dd6: ea23 73e3 bic.w r3, r3, r3, asr #31 - 13dda: 9307 str r3, [sp, #28] - 13ddc: e56b b.n 138b6 <_svfprintf_r+0x15da> - 13dde: f10d 029a add.w r2, sp, #154 ; 0x9a - 13de2: e775 b.n 13cd0 <_svfprintf_r+0x19f4> - 13de4: 9b08 ldr r3, [sp, #32] - 13de6: 9307 str r3, [sp, #28] - 13de8: 930a str r3, [sp, #40] ; 0x28 - 13dea: 2373 movs r3, #115 ; 0x73 - 13dec: f89d 2087 ldrb.w r2, [sp, #135] ; 0x87 - 13df0: 970e str r7, [sp, #56] ; 0x38 - 13df2: 9008 str r0, [sp, #32] - 13df4: 9012 str r0, [sp, #72] ; 0x48 - 13df6: 9016 str r0, [sp, #88] ; 0x58 - 13df8: 9310 str r3, [sp, #64] ; 0x40 - 13dfa: f7fe bc53 b.w 126a4 <_svfprintf_r+0x3c8> - 13dfe: 9b17 ldr r3, [sp, #92] ; 0x5c - 13e00: 18d5 adds r5, r2, r3 - 13e02: 4429 add r1, r5 - 13e04: 2366 movs r3, #102 ; 0x66 - 13e06: 910a str r1, [sp, #40] ; 0x28 - 13e08: 9310 str r3, [sp, #64] ; 0x40 - 13e0a: e6ff b.n 13c0c <_svfprintf_r+0x1930> - 13e0c: 9a08 ldr r2, [sp, #32] - 13e0e: 4313 orrs r3, r2 - 13e10: d105 bne.n 13e1e <_svfprintf_r+0x1b42> - 13e12: 2301 movs r3, #1 - 13e14: 2266 movs r2, #102 ; 0x66 - 13e16: 9307 str r3, [sp, #28] - 13e18: 9210 str r2, [sp, #64] ; 0x40 - 13e1a: 930a str r3, [sp, #40] ; 0x28 - 13e1c: e668 b.n 13af0 <_svfprintf_r+0x1814> - 13e1e: 9b17 ldr r3, [sp, #92] ; 0x5c - 13e20: 1c5d adds r5, r3, #1 - 13e22: 442a add r2, r5 - 13e24: ea22 73e2 bic.w r3, r2, r2, asr #31 - 13e28: 9307 str r3, [sp, #28] - 13e2a: 2366 movs r3, #102 ; 0x66 - 13e2c: 920a str r2, [sp, #40] ; 0x28 - 13e2e: 9310 str r3, [sp, #64] ; 0x40 - 13e30: e65e b.n 13af0 <_svfprintf_r+0x1814> - 13e32: 2302 movs r3, #2 - 13e34: 931b str r3, [sp, #108] ; 0x6c - 13e36: e526 b.n 13886 <_svfprintf_r+0x15aa> - 13e38: 9a0e ldr r2, [sp, #56] ; 0x38 - 13e3a: f898 3001 ldrb.w r3, [r8, #1] - 13e3e: 4688 mov r8, r1 - 13e40: f852 1b04 ldr.w r1, [r2], #4 - 13e44: 920e str r2, [sp, #56] ; 0x38 - 13e46: ea41 71e1 orr.w r1, r1, r1, asr #31 - 13e4a: 9108 str r1, [sp, #32] - 13e4c: f7fe ba9f b.w 1238e <_svfprintf_r+0xb2> - 13e50: 2300 movs r3, #0 - 13e52: 9312 str r3, [sp, #72] ; 0x48 - 13e54: 9316 str r3, [sp, #88] ; 0x58 - 13e56: e7b6 b.n 13dc6 <_svfprintf_r+0x1aea> - 13e58: 9a0c ldr r2, [sp, #48] ; 0x30 - 13e5a: 8993 ldrh r3, [r2, #12] - 13e5c: f043 0340 orr.w r3, r3, #64 ; 0x40 - 13e60: 8193 strh r3, [r2, #12] - 13e62: f7fe bea6 b.w 12bb2 <_svfprintf_r+0x8d6> - 13e66: 230c movs r3, #12 - 13e68: f8ca 3000 str.w r3, [sl] - 13e6c: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 13e70: 9309 str r3, [sp, #36] ; 0x24 - 13e72: f7fe bb45 b.w 12500 <_svfprintf_r+0x224> - 13e76: bf00 nop - 13e78: 0001891c .word 0x0001891c - 13e7c: 00018920 .word 0x00018920 - -00013e80 <_Balloc>: - 13e80: 6c43 ldr r3, [r0, #68] ; 0x44 - 13e82: b570 push {r4, r5, r6, lr} - 13e84: 4605 mov r5, r0 - 13e86: 460c mov r4, r1 - 13e88: b14b cbz r3, 13e9e <_Balloc+0x1e> - 13e8a: f853 0024 ldr.w r0, [r3, r4, lsl #2] - 13e8e: b180 cbz r0, 13eb2 <_Balloc+0x32> - 13e90: 6802 ldr r2, [r0, #0] - 13e92: f843 2024 str.w r2, [r3, r4, lsl #2] - 13e96: 2300 movs r3, #0 - 13e98: e9c0 3303 strd r3, r3, [r0, #12] - 13e9c: bd70 pop {r4, r5, r6, pc} - 13e9e: 2221 movs r2, #33 ; 0x21 - 13ea0: 2104 movs r1, #4 - 13ea2: f000 fe53 bl 14b4c <_calloc_r> - 13ea6: 4603 mov r3, r0 - 13ea8: 6468 str r0, [r5, #68] ; 0x44 - 13eaa: 2800 cmp r0, #0 - 13eac: d1ed bne.n 13e8a <_Balloc+0xa> - 13eae: 2000 movs r0, #0 - 13eb0: bd70 pop {r4, r5, r6, pc} - 13eb2: 2101 movs r1, #1 - 13eb4: fa01 f604 lsl.w r6, r1, r4 - 13eb8: 1d72 adds r2, r6, #5 - 13eba: 0092 lsls r2, r2, #2 - 13ebc: 4628 mov r0, r5 - 13ebe: f000 fe45 bl 14b4c <_calloc_r> - 13ec2: 2800 cmp r0, #0 - 13ec4: d0f3 beq.n 13eae <_Balloc+0x2e> - 13ec6: e9c0 4601 strd r4, r6, [r0, #4] - 13eca: e7e4 b.n 13e96 <_Balloc+0x16> - -00013ecc <_Bfree>: - 13ecc: b131 cbz r1, 13edc <_Bfree+0x10> - 13ece: 6c43 ldr r3, [r0, #68] ; 0x44 - 13ed0: 684a ldr r2, [r1, #4] - 13ed2: f853 0022 ldr.w r0, [r3, r2, lsl #2] - 13ed6: 6008 str r0, [r1, #0] - 13ed8: f843 1022 str.w r1, [r3, r2, lsl #2] - 13edc: 4770 bx lr - 13ede: bf00 nop - -00013ee0 <__multadd>: - 13ee0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 13ee4: 690d ldr r5, [r1, #16] - 13ee6: 4607 mov r7, r0 - 13ee8: 460e mov r6, r1 - 13eea: 461c mov r4, r3 - 13eec: f101 0e14 add.w lr, r1, #20 - 13ef0: 2000 movs r0, #0 - 13ef2: f8de 1000 ldr.w r1, [lr] - 13ef6: b28b uxth r3, r1 - 13ef8: fb02 4303 mla r3, r2, r3, r4 - 13efc: ea4f 4c13 mov.w ip, r3, lsr #16 - 13f00: 0c09 lsrs r1, r1, #16 - 13f02: fb02 cc01 mla ip, r2, r1, ip - 13f06: 3001 adds r0, #1 - 13f08: b29b uxth r3, r3 - 13f0a: eb03 430c add.w r3, r3, ip, lsl #16 - 13f0e: 4285 cmp r5, r0 - 13f10: f84e 3b04 str.w r3, [lr], #4 - 13f14: ea4f 441c mov.w r4, ip, lsr #16 - 13f18: dceb bgt.n 13ef2 <__multadd+0x12> - 13f1a: b13c cbz r4, 13f2c <__multadd+0x4c> - 13f1c: 68b3 ldr r3, [r6, #8] - 13f1e: 42ab cmp r3, r5 - 13f20: dd07 ble.n 13f32 <__multadd+0x52> - 13f22: eb06 0385 add.w r3, r6, r5, lsl #2 - 13f26: 3501 adds r5, #1 - 13f28: 615c str r4, [r3, #20] - 13f2a: 6135 str r5, [r6, #16] - 13f2c: 4630 mov r0, r6 - 13f2e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 13f32: 6871 ldr r1, [r6, #4] - 13f34: 4638 mov r0, r7 - 13f36: 3101 adds r1, #1 - 13f38: f7ff ffa2 bl 13e80 <_Balloc> - 13f3c: 4680 mov r8, r0 - 13f3e: b1a8 cbz r0, 13f6c <__multadd+0x8c> - 13f40: 6932 ldr r2, [r6, #16] - 13f42: 3202 adds r2, #2 - 13f44: f106 010c add.w r1, r6, #12 - 13f48: 0092 lsls r2, r2, #2 - 13f4a: 300c adds r0, #12 - 13f4c: f7f7 ff74 bl be38 - 13f50: 6c7b ldr r3, [r7, #68] ; 0x44 - 13f52: 6872 ldr r2, [r6, #4] - 13f54: f853 1022 ldr.w r1, [r3, r2, lsl #2] - 13f58: 6031 str r1, [r6, #0] - 13f5a: f843 6022 str.w r6, [r3, r2, lsl #2] - 13f5e: 4646 mov r6, r8 - 13f60: eb06 0385 add.w r3, r6, r5, lsl #2 - 13f64: 3501 adds r5, #1 - 13f66: 615c str r4, [r3, #20] - 13f68: 6135 str r5, [r6, #16] - 13f6a: e7df b.n 13f2c <__multadd+0x4c> - 13f6c: 4b02 ldr r3, [pc, #8] ; (13f78 <__multadd+0x98>) - 13f6e: 4803 ldr r0, [pc, #12] ; (13f7c <__multadd+0x9c>) - 13f70: 4642 mov r2, r8 - 13f72: 21ba movs r1, #186 ; 0xba - 13f74: f000 fdca bl 14b0c <__assert_func> - 13f78: 00018974 .word 0x00018974 - 13f7c: 00018988 .word 0x00018988 - -00013f80 <__hi0bits>: - 13f80: 0c02 lsrs r2, r0, #16 - 13f82: 0412 lsls r2, r2, #16 - 13f84: 4603 mov r3, r0 - 13f86: b9ca cbnz r2, 13fbc <__hi0bits+0x3c> - 13f88: 0403 lsls r3, r0, #16 - 13f8a: 2010 movs r0, #16 - 13f8c: f013 4f7f tst.w r3, #4278190080 ; 0xff000000 - 13f90: bf04 itt eq - 13f92: 021b lsleq r3, r3, #8 - 13f94: 3008 addeq r0, #8 - 13f96: f013 4f70 tst.w r3, #4026531840 ; 0xf0000000 - 13f9a: bf04 itt eq - 13f9c: 011b lsleq r3, r3, #4 - 13f9e: 3004 addeq r0, #4 - 13fa0: f013 4f40 tst.w r3, #3221225472 ; 0xc0000000 - 13fa4: bf04 itt eq - 13fa6: 009b lsleq r3, r3, #2 - 13fa8: 3002 addeq r0, #2 - 13faa: 2b00 cmp r3, #0 - 13fac: db05 blt.n 13fba <__hi0bits+0x3a> - 13fae: f013 4f80 tst.w r3, #1073741824 ; 0x40000000 - 13fb2: f100 0001 add.w r0, r0, #1 - 13fb6: bf08 it eq - 13fb8: 2020 moveq r0, #32 - 13fba: 4770 bx lr - 13fbc: 2000 movs r0, #0 - 13fbe: e7e5 b.n 13f8c <__hi0bits+0xc> - -00013fc0 <__lo0bits>: - 13fc0: 6803 ldr r3, [r0, #0] - 13fc2: f013 0207 ands.w r2, r3, #7 - 13fc6: 4601 mov r1, r0 - 13fc8: d007 beq.n 13fda <__lo0bits+0x1a> - 13fca: 07da lsls r2, r3, #31 - 13fcc: d41f bmi.n 1400e <__lo0bits+0x4e> - 13fce: 0798 lsls r0, r3, #30 - 13fd0: d521 bpl.n 14016 <__lo0bits+0x56> - 13fd2: 085b lsrs r3, r3, #1 - 13fd4: 600b str r3, [r1, #0] - 13fd6: 2001 movs r0, #1 - 13fd8: 4770 bx lr - 13fda: b298 uxth r0, r3 - 13fdc: b1a0 cbz r0, 14008 <__lo0bits+0x48> - 13fde: 4610 mov r0, r2 - 13fe0: b2da uxtb r2, r3 - 13fe2: b90a cbnz r2, 13fe8 <__lo0bits+0x28> - 13fe4: 3008 adds r0, #8 - 13fe6: 0a1b lsrs r3, r3, #8 - 13fe8: 071a lsls r2, r3, #28 - 13fea: bf04 itt eq - 13fec: 091b lsreq r3, r3, #4 - 13fee: 3004 addeq r0, #4 - 13ff0: 079a lsls r2, r3, #30 - 13ff2: bf04 itt eq - 13ff4: 089b lsreq r3, r3, #2 - 13ff6: 3002 addeq r0, #2 - 13ff8: 07da lsls r2, r3, #31 - 13ffa: d403 bmi.n 14004 <__lo0bits+0x44> - 13ffc: 085b lsrs r3, r3, #1 - 13ffe: f100 0001 add.w r0, r0, #1 - 14002: d006 beq.n 14012 <__lo0bits+0x52> - 14004: 600b str r3, [r1, #0] - 14006: 4770 bx lr - 14008: 0c1b lsrs r3, r3, #16 - 1400a: 2010 movs r0, #16 - 1400c: e7e8 b.n 13fe0 <__lo0bits+0x20> - 1400e: 2000 movs r0, #0 - 14010: 4770 bx lr - 14012: 2020 movs r0, #32 - 14014: 4770 bx lr - 14016: 089b lsrs r3, r3, #2 - 14018: 600b str r3, [r1, #0] - 1401a: 2002 movs r0, #2 - 1401c: 4770 bx lr - 1401e: bf00 nop - -00014020 <__i2b>: - 14020: b538 push {r3, r4, r5, lr} - 14022: 6c43 ldr r3, [r0, #68] ; 0x44 - 14024: 4604 mov r4, r0 - 14026: 460d mov r5, r1 - 14028: b14b cbz r3, 1403e <__i2b+0x1e> - 1402a: 6858 ldr r0, [r3, #4] - 1402c: b1b0 cbz r0, 1405c <__i2b+0x3c> - 1402e: 6802 ldr r2, [r0, #0] - 14030: 605a str r2, [r3, #4] - 14032: 2200 movs r2, #0 - 14034: 2301 movs r3, #1 - 14036: e9c0 3504 strd r3, r5, [r0, #16] - 1403a: 60c2 str r2, [r0, #12] - 1403c: bd38 pop {r3, r4, r5, pc} - 1403e: 2221 movs r2, #33 ; 0x21 - 14040: 2104 movs r1, #4 - 14042: f000 fd83 bl 14b4c <_calloc_r> - 14046: 4603 mov r3, r0 - 14048: 6460 str r0, [r4, #68] ; 0x44 - 1404a: 2800 cmp r0, #0 - 1404c: d1ed bne.n 1402a <__i2b+0xa> - 1404e: 4b09 ldr r3, [pc, #36] ; (14074 <__i2b+0x54>) - 14050: 4809 ldr r0, [pc, #36] ; (14078 <__i2b+0x58>) - 14052: 2200 movs r2, #0 - 14054: f240 1145 movw r1, #325 ; 0x145 - 14058: f000 fd58 bl 14b0c <__assert_func> - 1405c: 221c movs r2, #28 - 1405e: 2101 movs r1, #1 - 14060: 4620 mov r0, r4 - 14062: f000 fd73 bl 14b4c <_calloc_r> - 14066: 2800 cmp r0, #0 - 14068: d0f1 beq.n 1404e <__i2b+0x2e> - 1406a: 2201 movs r2, #1 - 1406c: 2302 movs r3, #2 - 1406e: e9c0 2301 strd r2, r3, [r0, #4] - 14072: e7de b.n 14032 <__i2b+0x12> - 14074: 00018974 .word 0x00018974 - 14078: 00018988 .word 0x00018988 - -0001407c <__multiply>: - 1407c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 14080: 690e ldr r6, [r1, #16] - 14082: 6915 ldr r5, [r2, #16] - 14084: 42ae cmp r6, r5 - 14086: b085 sub sp, #20 - 14088: 4688 mov r8, r1 - 1408a: 4614 mov r4, r2 - 1408c: db05 blt.n 1409a <__multiply+0x1e> - 1408e: 462a mov r2, r5 - 14090: 4623 mov r3, r4 - 14092: 4635 mov r5, r6 - 14094: 460c mov r4, r1 - 14096: 4616 mov r6, r2 - 14098: 4698 mov r8, r3 - 1409a: 68a3 ldr r3, [r4, #8] - 1409c: 6861 ldr r1, [r4, #4] - 1409e: 19af adds r7, r5, r6 - 140a0: 42bb cmp r3, r7 - 140a2: bfb8 it lt - 140a4: 3101 addlt r1, #1 - 140a6: f7ff feeb bl 13e80 <_Balloc> - 140aa: 9001 str r0, [sp, #4] - 140ac: 2800 cmp r0, #0 - 140ae: f000 8087 beq.w 141c0 <__multiply+0x144> - 140b2: 9b01 ldr r3, [sp, #4] - 140b4: f103 0914 add.w r9, r3, #20 - 140b8: eb09 0a87 add.w sl, r9, r7, lsl #2 - 140bc: 45d1 cmp r9, sl - 140be: d205 bcs.n 140cc <__multiply+0x50> - 140c0: 464b mov r3, r9 - 140c2: 2200 movs r2, #0 - 140c4: f843 2b04 str.w r2, [r3], #4 - 140c8: 459a cmp sl, r3 - 140ca: d8fb bhi.n 140c4 <__multiply+0x48> - 140cc: f108 0814 add.w r8, r8, #20 - 140d0: eb08 0b86 add.w fp, r8, r6, lsl #2 - 140d4: f104 0314 add.w r3, r4, #20 - 140d8: 45d8 cmp r8, fp - 140da: 461a mov r2, r3 - 140dc: eb03 0585 add.w r5, r3, r5, lsl #2 - 140e0: d25f bcs.n 141a2 <__multiply+0x126> - 140e2: 1b2b subs r3, r5, r4 - 140e4: 3b15 subs r3, #21 - 140e6: f023 0303 bic.w r3, r3, #3 - 140ea: 3304 adds r3, #4 - 140ec: 3415 adds r4, #21 - 140ee: 42a5 cmp r5, r4 - 140f0: bf38 it cc - 140f2: 2304 movcc r3, #4 - 140f4: e9cd a702 strd sl, r7, [sp, #8] - 140f8: 46ac mov ip, r5 - 140fa: 461f mov r7, r3 - 140fc: 4692 mov sl, r2 - 140fe: e005 b.n 1410c <__multiply+0x90> - 14100: 0c09 lsrs r1, r1, #16 - 14102: d129 bne.n 14158 <__multiply+0xdc> - 14104: 45c3 cmp fp, r8 - 14106: f109 0904 add.w r9, r9, #4 - 1410a: d948 bls.n 1419e <__multiply+0x122> - 1410c: f858 1b04 ldr.w r1, [r8], #4 - 14110: b28d uxth r5, r1 - 14112: 2d00 cmp r5, #0 - 14114: d0f4 beq.n 14100 <__multiply+0x84> - 14116: 4656 mov r6, sl - 14118: 464c mov r4, r9 - 1411a: 2300 movs r3, #0 - 1411c: f856 1b04 ldr.w r1, [r6], #4 - 14120: 6822 ldr r2, [r4, #0] - 14122: fa1f fe81 uxth.w lr, r1 - 14126: b290 uxth r0, r2 - 14128: 0c09 lsrs r1, r1, #16 - 1412a: fb05 000e mla r0, r5, lr, r0 - 1412e: 0c12 lsrs r2, r2, #16 - 14130: 4403 add r3, r0 - 14132: fb05 2201 mla r2, r5, r1, r2 - 14136: eb02 4213 add.w r2, r2, r3, lsr #16 - 1413a: b29b uxth r3, r3 - 1413c: ea43 4302 orr.w r3, r3, r2, lsl #16 - 14140: 45b4 cmp ip, r6 - 14142: f844 3b04 str.w r3, [r4], #4 - 14146: ea4f 4312 mov.w r3, r2, lsr #16 - 1414a: d8e7 bhi.n 1411c <__multiply+0xa0> - 1414c: f849 3007 str.w r3, [r9, r7] - 14150: f858 1c04 ldr.w r1, [r8, #-4] - 14154: 0c09 lsrs r1, r1, #16 - 14156: d0d5 beq.n 14104 <__multiply+0x88> - 14158: f8d9 3000 ldr.w r3, [r9] - 1415c: 4650 mov r0, sl - 1415e: 461a mov r2, r3 - 14160: 464c mov r4, r9 - 14162: 2600 movs r6, #0 - 14164: 8805 ldrh r5, [r0, #0] - 14166: 0c12 lsrs r2, r2, #16 - 14168: fb01 2205 mla r2, r1, r5, r2 - 1416c: 4416 add r6, r2 - 1416e: b29b uxth r3, r3 - 14170: ea43 4306 orr.w r3, r3, r6, lsl #16 - 14174: f844 3b04 str.w r3, [r4], #4 - 14178: f850 5b04 ldr.w r5, [r0], #4 - 1417c: 6822 ldr r2, [r4, #0] - 1417e: 0c2d lsrs r5, r5, #16 - 14180: b293 uxth r3, r2 - 14182: fb01 3305 mla r3, r1, r5, r3 - 14186: eb03 4316 add.w r3, r3, r6, lsr #16 - 1418a: 4584 cmp ip, r0 - 1418c: ea4f 4613 mov.w r6, r3, lsr #16 - 14190: d8e8 bhi.n 14164 <__multiply+0xe8> - 14192: 45c3 cmp fp, r8 - 14194: f849 3007 str.w r3, [r9, r7] - 14198: f109 0904 add.w r9, r9, #4 - 1419c: d8b6 bhi.n 1410c <__multiply+0x90> - 1419e: e9dd a702 ldrd sl, r7, [sp, #8] - 141a2: 2f00 cmp r7, #0 - 141a4: dc02 bgt.n 141ac <__multiply+0x130> - 141a6: e005 b.n 141b4 <__multiply+0x138> - 141a8: 3f01 subs r7, #1 - 141aa: d003 beq.n 141b4 <__multiply+0x138> - 141ac: f85a 3d04 ldr.w r3, [sl, #-4]! - 141b0: 2b00 cmp r3, #0 - 141b2: d0f9 beq.n 141a8 <__multiply+0x12c> - 141b4: 9b01 ldr r3, [sp, #4] - 141b6: 4618 mov r0, r3 - 141b8: 611f str r7, [r3, #16] - 141ba: b005 add sp, #20 - 141bc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 141c0: 4b03 ldr r3, [pc, #12] ; (141d0 <__multiply+0x154>) - 141c2: 4804 ldr r0, [pc, #16] ; (141d4 <__multiply+0x158>) - 141c4: 9a01 ldr r2, [sp, #4] - 141c6: f44f 71b1 mov.w r1, #354 ; 0x162 - 141ca: f000 fc9f bl 14b0c <__assert_func> - 141ce: bf00 nop - 141d0: 00018974 .word 0x00018974 - 141d4: 00018988 .word 0x00018988 - -000141d8 <__pow5mult>: - 141d8: f012 0303 ands.w r3, r2, #3 - 141dc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 141e0: 4614 mov r4, r2 - 141e2: 4606 mov r6, r0 - 141e4: d132 bne.n 1424c <__pow5mult+0x74> - 141e6: 460d mov r5, r1 - 141e8: 10a4 asrs r4, r4, #2 - 141ea: d020 beq.n 1422e <__pow5mult+0x56> - 141ec: f8d6 8040 ldr.w r8, [r6, #64] ; 0x40 - 141f0: f1b8 0f00 cmp.w r8, #0 - 141f4: d033 beq.n 1425e <__pow5mult+0x86> - 141f6: 07e3 lsls r3, r4, #31 - 141f8: f04f 0700 mov.w r7, #0 - 141fc: d407 bmi.n 1420e <__pow5mult+0x36> - 141fe: 1064 asrs r4, r4, #1 - 14200: d015 beq.n 1422e <__pow5mult+0x56> - 14202: f8d8 0000 ldr.w r0, [r8] - 14206: b1a8 cbz r0, 14234 <__pow5mult+0x5c> - 14208: 4680 mov r8, r0 - 1420a: 07e3 lsls r3, r4, #31 - 1420c: d5f7 bpl.n 141fe <__pow5mult+0x26> - 1420e: 4642 mov r2, r8 - 14210: 4629 mov r1, r5 - 14212: 4630 mov r0, r6 - 14214: f7ff ff32 bl 1407c <__multiply> - 14218: b1b5 cbz r5, 14248 <__pow5mult+0x70> - 1421a: 6869 ldr r1, [r5, #4] - 1421c: 6c73 ldr r3, [r6, #68] ; 0x44 - 1421e: 1064 asrs r4, r4, #1 - 14220: f853 2021 ldr.w r2, [r3, r1, lsl #2] - 14224: 602a str r2, [r5, #0] - 14226: f843 5021 str.w r5, [r3, r1, lsl #2] - 1422a: 4605 mov r5, r0 - 1422c: d1e9 bne.n 14202 <__pow5mult+0x2a> - 1422e: 4628 mov r0, r5 - 14230: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 14234: 4642 mov r2, r8 - 14236: 4641 mov r1, r8 - 14238: 4630 mov r0, r6 - 1423a: f7ff ff1f bl 1407c <__multiply> - 1423e: f8c8 0000 str.w r0, [r8] - 14242: 6007 str r7, [r0, #0] - 14244: 4680 mov r8, r0 - 14246: e7e0 b.n 1420a <__pow5mult+0x32> - 14248: 4605 mov r5, r0 - 1424a: e7d8 b.n 141fe <__pow5mult+0x26> - 1424c: 3b01 subs r3, #1 - 1424e: 4a0f ldr r2, [pc, #60] ; (1428c <__pow5mult+0xb4>) - 14250: f852 2023 ldr.w r2, [r2, r3, lsl #2] - 14254: 2300 movs r3, #0 - 14256: f7ff fe43 bl 13ee0 <__multadd> - 1425a: 4605 mov r5, r0 - 1425c: e7c4 b.n 141e8 <__pow5mult+0x10> - 1425e: 2101 movs r1, #1 - 14260: 4630 mov r0, r6 - 14262: f7ff fe0d bl 13e80 <_Balloc> - 14266: 4680 mov r8, r0 - 14268: b140 cbz r0, 1427c <__pow5mult+0xa4> - 1426a: 2301 movs r3, #1 - 1426c: f240 2271 movw r2, #625 ; 0x271 - 14270: e9c0 3204 strd r3, r2, [r0, #16] - 14274: 2300 movs r3, #0 - 14276: 6430 str r0, [r6, #64] ; 0x40 - 14278: 6003 str r3, [r0, #0] - 1427a: e7bc b.n 141f6 <__pow5mult+0x1e> - 1427c: 4b04 ldr r3, [pc, #16] ; (14290 <__pow5mult+0xb8>) - 1427e: 4805 ldr r0, [pc, #20] ; (14294 <__pow5mult+0xbc>) - 14280: 4642 mov r2, r8 - 14282: f240 1145 movw r1, #325 ; 0x145 - 14286: f000 fc41 bl 14b0c <__assert_func> - 1428a: bf00 nop - 1428c: 00018ae0 .word 0x00018ae0 - 14290: 00018974 .word 0x00018974 - 14294: 00018988 .word 0x00018988 - -00014298 <__lshift>: - 14298: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 1429c: 460c mov r4, r1 - 1429e: 4690 mov r8, r2 - 142a0: 6926 ldr r6, [r4, #16] - 142a2: 68a3 ldr r3, [r4, #8] - 142a4: 6849 ldr r1, [r1, #4] - 142a6: eb06 1662 add.w r6, r6, r2, asr #5 - 142aa: 1c75 adds r5, r6, #1 - 142ac: 429d cmp r5, r3 - 142ae: 4607 mov r7, r0 - 142b0: ea4f 1962 mov.w r9, r2, asr #5 - 142b4: dd04 ble.n 142c0 <__lshift+0x28> - 142b6: 005b lsls r3, r3, #1 - 142b8: 429d cmp r5, r3 - 142ba: f101 0101 add.w r1, r1, #1 - 142be: dcfa bgt.n 142b6 <__lshift+0x1e> - 142c0: 4638 mov r0, r7 - 142c2: f7ff fddd bl 13e80 <_Balloc> - 142c6: 4684 mov ip, r0 - 142c8: 2800 cmp r0, #0 - 142ca: d051 beq.n 14370 <__lshift+0xd8> - 142cc: f1b9 0f00 cmp.w r9, #0 - 142d0: f100 0014 add.w r0, r0, #20 - 142d4: dd0e ble.n 142f4 <__lshift+0x5c> - 142d6: f109 0205 add.w r2, r9, #5 - 142da: ea4f 0e82 mov.w lr, r2, lsl #2 - 142de: 4603 mov r3, r0 - 142e0: eb0c 0282 add.w r2, ip, r2, lsl #2 - 142e4: 2100 movs r1, #0 - 142e6: f843 1b04 str.w r1, [r3], #4 - 142ea: 4293 cmp r3, r2 - 142ec: d1fb bne.n 142e6 <__lshift+0x4e> - 142ee: f1ae 0314 sub.w r3, lr, #20 - 142f2: 4418 add r0, r3 - 142f4: 6921 ldr r1, [r4, #16] - 142f6: f104 0314 add.w r3, r4, #20 - 142fa: f018 081f ands.w r8, r8, #31 - 142fe: eb03 0181 add.w r1, r3, r1, lsl #2 - 14302: d02d beq.n 14360 <__lshift+0xc8> - 14304: f1c8 0920 rsb r9, r8, #32 - 14308: 4686 mov lr, r0 - 1430a: f04f 0a00 mov.w sl, #0 - 1430e: 681a ldr r2, [r3, #0] - 14310: fa02 f208 lsl.w r2, r2, r8 - 14314: ea42 020a orr.w r2, r2, sl - 14318: f84e 2b04 str.w r2, [lr], #4 - 1431c: f853 2b04 ldr.w r2, [r3], #4 - 14320: 4299 cmp r1, r3 - 14322: fa22 fa09 lsr.w sl, r2, r9 - 14326: d8f2 bhi.n 1430e <__lshift+0x76> - 14328: 1b0b subs r3, r1, r4 - 1432a: 3b15 subs r3, #21 - 1432c: f023 0303 bic.w r3, r3, #3 - 14330: 3304 adds r3, #4 - 14332: f104 0215 add.w r2, r4, #21 - 14336: 4291 cmp r1, r2 - 14338: bf38 it cc - 1433a: 2304 movcc r3, #4 - 1433c: f1ba 0f00 cmp.w sl, #0 - 14340: bf18 it ne - 14342: 462e movne r6, r5 - 14344: f840 a003 str.w sl, [r0, r3] - 14348: 6c7b ldr r3, [r7, #68] ; 0x44 - 1434a: 6862 ldr r2, [r4, #4] - 1434c: f8cc 6010 str.w r6, [ip, #16] - 14350: f853 1022 ldr.w r1, [r3, r2, lsl #2] - 14354: 6021 str r1, [r4, #0] - 14356: 4660 mov r0, ip - 14358: f843 4022 str.w r4, [r3, r2, lsl #2] - 1435c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 14360: 3804 subs r0, #4 - 14362: f853 2b04 ldr.w r2, [r3], #4 - 14366: f840 2f04 str.w r2, [r0, #4]! - 1436a: 4299 cmp r1, r3 - 1436c: d8f9 bhi.n 14362 <__lshift+0xca> - 1436e: e7eb b.n 14348 <__lshift+0xb0> - 14370: 4b03 ldr r3, [pc, #12] ; (14380 <__lshift+0xe8>) - 14372: 4804 ldr r0, [pc, #16] ; (14384 <__lshift+0xec>) - 14374: 4662 mov r2, ip - 14376: f44f 71ef mov.w r1, #478 ; 0x1de - 1437a: f000 fbc7 bl 14b0c <__assert_func> - 1437e: bf00 nop - 14380: 00018974 .word 0x00018974 - 14384: 00018988 .word 0x00018988 - -00014388 <__mcmp>: - 14388: 690b ldr r3, [r1, #16] - 1438a: 4684 mov ip, r0 - 1438c: 6900 ldr r0, [r0, #16] - 1438e: 1ac0 subs r0, r0, r3 - 14390: d115 bne.n 143be <__mcmp+0x36> - 14392: f10c 0c14 add.w ip, ip, #20 - 14396: 3114 adds r1, #20 - 14398: eb0c 0283 add.w r2, ip, r3, lsl #2 - 1439c: b410 push {r4} - 1439e: eb01 0383 add.w r3, r1, r3, lsl #2 - 143a2: e001 b.n 143a8 <__mcmp+0x20> - 143a4: 4594 cmp ip, r2 - 143a6: d208 bcs.n 143ba <__mcmp+0x32> - 143a8: f852 4d04 ldr.w r4, [r2, #-4]! - 143ac: f853 1d04 ldr.w r1, [r3, #-4]! - 143b0: 428c cmp r4, r1 - 143b2: d0f7 beq.n 143a4 <__mcmp+0x1c> - 143b4: d204 bcs.n 143c0 <__mcmp+0x38> - 143b6: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 143ba: bc10 pop {r4} - 143bc: 4770 bx lr - 143be: 4770 bx lr - 143c0: 2001 movs r0, #1 - 143c2: bc10 pop {r4} - 143c4: 4770 bx lr - 143c6: bf00 nop - -000143c8 <__mdiff>: - 143c8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 143cc: 690f ldr r7, [r1, #16] - 143ce: 6913 ldr r3, [r2, #16] - 143d0: 1aff subs r7, r7, r3 - 143d2: 2f00 cmp r7, #0 - 143d4: 460e mov r6, r1 - 143d6: 4690 mov r8, r2 - 143d8: d17f bne.n 144da <__mdiff+0x112> - 143da: f101 0514 add.w r5, r1, #20 - 143de: 3214 adds r2, #20 - 143e0: eb02 0283 add.w r2, r2, r3, lsl #2 - 143e4: eb05 0383 add.w r3, r5, r3, lsl #2 - 143e8: e001 b.n 143ee <__mdiff+0x26> - 143ea: 429d cmp r5, r3 - 143ec: d278 bcs.n 144e0 <__mdiff+0x118> - 143ee: f853 1d04 ldr.w r1, [r3, #-4]! - 143f2: f852 4d04 ldr.w r4, [r2, #-4]! - 143f6: 42a1 cmp r1, r4 - 143f8: d0f7 beq.n 143ea <__mdiff+0x22> - 143fa: d369 bcc.n 144d0 <__mdiff+0x108> - 143fc: 6871 ldr r1, [r6, #4] - 143fe: f7ff fd3f bl 13e80 <_Balloc> - 14402: 4681 mov r9, r0 - 14404: 2800 cmp r0, #0 - 14406: d077 beq.n 144f8 <__mdiff+0x130> - 14408: 6935 ldr r5, [r6, #16] - 1440a: f8d8 2010 ldr.w r2, [r8, #16] - 1440e: 60c7 str r7, [r0, #12] - 14410: f108 0e14 add.w lr, r8, #20 - 14414: f106 0014 add.w r0, r6, #20 - 14418: f109 0a14 add.w sl, r9, #20 - 1441c: f106 0110 add.w r1, r6, #16 - 14420: eb0e 0282 add.w r2, lr, r2, lsl #2 - 14424: eb00 0785 add.w r7, r0, r5, lsl #2 - 14428: 4656 mov r6, sl - 1442a: f04f 0c00 mov.w ip, #0 - 1442e: f85e 4b04 ldr.w r4, [lr], #4 - 14432: f851 bf04 ldr.w fp, [r1, #4]! - 14436: b2a3 uxth r3, r4 - 14438: fa1c fc8b uxtah ip, ip, fp - 1443c: ebac 0303 sub.w r3, ip, r3 - 14440: ea4f 4c14 mov.w ip, r4, lsr #16 - 14444: ebcc 4c1b rsb ip, ip, fp, lsr #16 - 14448: eb0c 4c23 add.w ip, ip, r3, asr #16 - 1444c: b29b uxth r3, r3 - 1444e: ea43 430c orr.w r3, r3, ip, lsl #16 - 14452: 4572 cmp r2, lr - 14454: f846 3b04 str.w r3, [r6], #4 - 14458: ea4f 4c2c mov.w ip, ip, asr #16 - 1445c: d8e7 bhi.n 1442e <__mdiff+0x66> - 1445e: eba2 0108 sub.w r1, r2, r8 - 14462: 3915 subs r1, #21 - 14464: f108 0815 add.w r8, r8, #21 - 14468: 4542 cmp r2, r8 - 1446a: f021 0403 bic.w r4, r1, #3 - 1446e: f104 0404 add.w r4, r4, #4 - 14472: bf38 it cc - 14474: 2404 movcc r4, #4 - 14476: 4420 add r0, r4 - 14478: f021 0203 bic.w r2, r1, #3 - 1447c: bf38 it cc - 1447e: 2200 movcc r2, #0 - 14480: 4287 cmp r7, r0 - 14482: 4452 add r2, sl - 14484: 4454 add r4, sl - 14486: d918 bls.n 144ba <__mdiff+0xf2> - 14488: 4626 mov r6, r4 - 1448a: 4601 mov r1, r0 - 1448c: f851 3b04 ldr.w r3, [r1], #4 - 14490: fa1c fc83 uxtah ip, ip, r3 - 14494: ea4f 422c mov.w r2, ip, asr #16 - 14498: eb02 4213 add.w r2, r2, r3, lsr #16 - 1449c: fa1f fc8c uxth.w ip, ip - 144a0: ea4c 4302 orr.w r3, ip, r2, lsl #16 - 144a4: 428f cmp r7, r1 - 144a6: f846 3b04 str.w r3, [r6], #4 - 144aa: ea4f 4c22 mov.w ip, r2, asr #16 - 144ae: d8ed bhi.n 1448c <__mdiff+0xc4> - 144b0: 3f01 subs r7, #1 - 144b2: 1a3f subs r7, r7, r0 - 144b4: f027 0703 bic.w r7, r7, #3 - 144b8: 19e2 adds r2, r4, r7 - 144ba: b923 cbnz r3, 144c6 <__mdiff+0xfe> - 144bc: f852 3d04 ldr.w r3, [r2, #-4]! - 144c0: 3d01 subs r5, #1 - 144c2: 2b00 cmp r3, #0 - 144c4: d0fa beq.n 144bc <__mdiff+0xf4> - 144c6: f8c9 5010 str.w r5, [r9, #16] - 144ca: 4648 mov r0, r9 - 144cc: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 144d0: 4633 mov r3, r6 - 144d2: 2701 movs r7, #1 - 144d4: 4646 mov r6, r8 - 144d6: 4698 mov r8, r3 - 144d8: e790 b.n 143fc <__mdiff+0x34> - 144da: dbf9 blt.n 144d0 <__mdiff+0x108> - 144dc: 2700 movs r7, #0 - 144de: e78d b.n 143fc <__mdiff+0x34> - 144e0: 2100 movs r1, #0 - 144e2: f7ff fccd bl 13e80 <_Balloc> - 144e6: 4681 mov r9, r0 - 144e8: b168 cbz r0, 14506 <__mdiff+0x13e> - 144ea: 2201 movs r2, #1 - 144ec: 2300 movs r3, #0 - 144ee: e9c9 2304 strd r2, r3, [r9, #16] - 144f2: 4648 mov r0, r9 - 144f4: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 144f8: 4b06 ldr r3, [pc, #24] ; (14514 <__mdiff+0x14c>) - 144fa: 4807 ldr r0, [pc, #28] ; (14518 <__mdiff+0x150>) - 144fc: 464a mov r2, r9 - 144fe: f240 2145 movw r1, #581 ; 0x245 - 14502: f000 fb03 bl 14b0c <__assert_func> - 14506: 4b03 ldr r3, [pc, #12] ; (14514 <__mdiff+0x14c>) - 14508: 4803 ldr r0, [pc, #12] ; (14518 <__mdiff+0x150>) - 1450a: 464a mov r2, r9 - 1450c: f240 2137 movw r1, #567 ; 0x237 - 14510: f000 fafc bl 14b0c <__assert_func> - 14514: 00018974 .word 0x00018974 - 14518: 00018988 .word 0x00018988 - -0001451c <__d2b>: - 1451c: b570 push {r4, r5, r6, lr} - 1451e: 2101 movs r1, #1 - 14520: b082 sub sp, #8 - 14522: 4616 mov r6, r2 - 14524: 461d mov r5, r3 - 14526: f7ff fcab bl 13e80 <_Balloc> - 1452a: 4604 mov r4, r0 - 1452c: 2800 cmp r0, #0 - 1452e: d04a beq.n 145c6 <__d2b+0xaa> - 14530: 462b mov r3, r5 - 14532: f3c5 550a ubfx r5, r5, #20, #11 - 14536: f3c3 0313 ubfx r3, r3, #0, #20 - 1453a: b10d cbz r5, 14540 <__d2b+0x24> - 1453c: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 - 14540: 2e00 cmp r6, #0 - 14542: 9301 str r3, [sp, #4] - 14544: d114 bne.n 14570 <__d2b+0x54> - 14546: a801 add r0, sp, #4 - 14548: f7ff fd3a bl 13fc0 <__lo0bits> - 1454c: 9b01 ldr r3, [sp, #4] - 1454e: 6163 str r3, [r4, #20] - 14550: 2101 movs r1, #1 - 14552: 3020 adds r0, #32 - 14554: 6121 str r1, [r4, #16] - 14556: b315 cbz r5, 1459e <__d2b+0x82> - 14558: 9b06 ldr r3, [sp, #24] - 1455a: f2a5 4533 subw r5, r5, #1075 ; 0x433 - 1455e: 4405 add r5, r0 - 14560: 601d str r5, [r3, #0] - 14562: 9b07 ldr r3, [sp, #28] - 14564: f1c0 0035 rsb r0, r0, #53 ; 0x35 - 14568: 6018 str r0, [r3, #0] - 1456a: 4620 mov r0, r4 - 1456c: b002 add sp, #8 - 1456e: bd70 pop {r4, r5, r6, pc} - 14570: 4668 mov r0, sp - 14572: 9600 str r6, [sp, #0] - 14574: f7ff fd24 bl 13fc0 <__lo0bits> - 14578: b308 cbz r0, 145be <__d2b+0xa2> - 1457a: 9b01 ldr r3, [sp, #4] - 1457c: 9900 ldr r1, [sp, #0] - 1457e: f1c0 0220 rsb r2, r0, #32 - 14582: fa03 f202 lsl.w r2, r3, r2 - 14586: 430a orrs r2, r1 - 14588: 40c3 lsrs r3, r0 - 1458a: 9301 str r3, [sp, #4] - 1458c: 6162 str r2, [r4, #20] - 1458e: 2b00 cmp r3, #0 - 14590: bf14 ite ne - 14592: 2102 movne r1, #2 - 14594: 2101 moveq r1, #1 - 14596: 61a3 str r3, [r4, #24] - 14598: 6121 str r1, [r4, #16] - 1459a: 2d00 cmp r5, #0 - 1459c: d1dc bne.n 14558 <__d2b+0x3c> - 1459e: eb04 0281 add.w r2, r4, r1, lsl #2 - 145a2: f2a0 4332 subw r3, r0, #1074 ; 0x432 - 145a6: 6910 ldr r0, [r2, #16] - 145a8: 9a06 ldr r2, [sp, #24] - 145aa: 6013 str r3, [r2, #0] - 145ac: f7ff fce8 bl 13f80 <__hi0bits> - 145b0: 9b07 ldr r3, [sp, #28] - 145b2: ebc0 1041 rsb r0, r0, r1, lsl #5 - 145b6: 6018 str r0, [r3, #0] - 145b8: 4620 mov r0, r4 - 145ba: b002 add sp, #8 - 145bc: bd70 pop {r4, r5, r6, pc} - 145be: e9dd 2300 ldrd r2, r3, [sp] - 145c2: 6162 str r2, [r4, #20] - 145c4: e7e3 b.n 1458e <__d2b+0x72> - 145c6: 4b03 ldr r3, [pc, #12] ; (145d4 <__d2b+0xb8>) - 145c8: 4803 ldr r0, [pc, #12] ; (145d8 <__d2b+0xbc>) - 145ca: 4622 mov r2, r4 - 145cc: f240 310f movw r1, #783 ; 0x30f - 145d0: f000 fa9c bl 14b0c <__assert_func> - 145d4: 00018974 .word 0x00018974 - 145d8: 00018988 .word 0x00018988 - -000145dc <_fclose_r>: - 145dc: b570 push {r4, r5, r6, lr} - 145de: 2900 cmp r1, #0 - 145e0: d04b beq.n 1467a <_fclose_r+0x9e> - 145e2: 4606 mov r6, r0 - 145e4: 460c mov r4, r1 - 145e6: b110 cbz r0, 145ee <_fclose_r+0x12> - 145e8: 6b43 ldr r3, [r0, #52] ; 0x34 - 145ea: 2b00 cmp r3, #0 - 145ec: d048 beq.n 14680 <_fclose_r+0xa4> - 145ee: 6e63 ldr r3, [r4, #100] ; 0x64 - 145f0: 07d8 lsls r0, r3, #31 - 145f2: d534 bpl.n 1465e <_fclose_r+0x82> - 145f4: f9b4 300c ldrsh.w r3, [r4, #12] - 145f8: 2b00 cmp r3, #0 - 145fa: d03e beq.n 1467a <_fclose_r+0x9e> - 145fc: 4621 mov r1, r4 - 145fe: 4630 mov r0, r6 - 14600: f000 f850 bl 146a4 <__sflush_r> - 14604: 6ae3 ldr r3, [r4, #44] ; 0x2c - 14606: 4605 mov r5, r0 - 14608: b133 cbz r3, 14618 <_fclose_r+0x3c> - 1460a: 69e1 ldr r1, [r4, #28] - 1460c: 4630 mov r0, r6 - 1460e: 4798 blx r3 - 14610: 2800 cmp r0, #0 - 14612: bfb8 it lt - 14614: f04f 35ff movlt.w r5, #4294967295 ; 0xffffffff - 14618: 89a3 ldrh r3, [r4, #12] - 1461a: 061a lsls r2, r3, #24 - 1461c: d43c bmi.n 14698 <_fclose_r+0xbc> - 1461e: 6b21 ldr r1, [r4, #48] ; 0x30 - 14620: b141 cbz r1, 14634 <_fclose_r+0x58> - 14622: f104 0340 add.w r3, r4, #64 ; 0x40 - 14626: 4299 cmp r1, r3 - 14628: d002 beq.n 14630 <_fclose_r+0x54> - 1462a: 4630 mov r0, r6 - 1462c: f7fd fd3a bl 120a4 <_free_r> - 14630: 2300 movs r3, #0 - 14632: 6323 str r3, [r4, #48] ; 0x30 - 14634: 6c61 ldr r1, [r4, #68] ; 0x44 - 14636: b121 cbz r1, 14642 <_fclose_r+0x66> - 14638: 4630 mov r0, r6 - 1463a: f7fd fd33 bl 120a4 <_free_r> - 1463e: 2300 movs r3, #0 - 14640: 6463 str r3, [r4, #68] ; 0x44 - 14642: f7fc fcb9 bl 10fb8 <__sfp_lock_acquire> - 14646: 6e63 ldr r3, [r4, #100] ; 0x64 - 14648: 2200 movs r2, #0 - 1464a: 07db lsls r3, r3, #31 - 1464c: 81a2 strh r2, [r4, #12] - 1464e: d51f bpl.n 14690 <_fclose_r+0xb4> - 14650: 6da0 ldr r0, [r4, #88] ; 0x58 - 14652: f7fd fba7 bl 11da4 <__retarget_lock_close_recursive> - 14656: f7fc fcb5 bl 10fc4 <__sfp_lock_release> - 1465a: 4628 mov r0, r5 - 1465c: bd70 pop {r4, r5, r6, pc} - 1465e: 89a3 ldrh r3, [r4, #12] - 14660: 0599 lsls r1, r3, #22 - 14662: d4cb bmi.n 145fc <_fclose_r+0x20> - 14664: 6da0 ldr r0, [r4, #88] ; 0x58 - 14666: f7fd fb9f bl 11da8 <__retarget_lock_acquire_recursive> - 1466a: f9b4 300c ldrsh.w r3, [r4, #12] - 1466e: 2b00 cmp r3, #0 - 14670: d1c4 bne.n 145fc <_fclose_r+0x20> - 14672: 6e65 ldr r5, [r4, #100] ; 0x64 - 14674: f015 0501 ands.w r5, r5, #1 - 14678: d005 beq.n 14686 <_fclose_r+0xaa> - 1467a: 2500 movs r5, #0 - 1467c: 4628 mov r0, r5 - 1467e: bd70 pop {r4, r5, r6, pc} - 14680: f7fc fc7c bl 10f7c <__sinit> - 14684: e7b3 b.n 145ee <_fclose_r+0x12> - 14686: 6da0 ldr r0, [r4, #88] ; 0x58 - 14688: f7fd fb90 bl 11dac <__retarget_lock_release_recursive> - 1468c: 4628 mov r0, r5 - 1468e: bd70 pop {r4, r5, r6, pc} - 14690: 6da0 ldr r0, [r4, #88] ; 0x58 - 14692: f7fd fb8b bl 11dac <__retarget_lock_release_recursive> - 14696: e7db b.n 14650 <_fclose_r+0x74> - 14698: 6921 ldr r1, [r4, #16] - 1469a: 4630 mov r0, r6 - 1469c: f7fd fd02 bl 120a4 <_free_r> - 146a0: e7bd b.n 1461e <_fclose_r+0x42> - 146a2: bf00 nop - -000146a4 <__sflush_r>: - 146a4: f9b1 200c ldrsh.w r2, [r1, #12] - 146a8: b5f8 push {r3, r4, r5, r6, r7, lr} - 146aa: 460c mov r4, r1 - 146ac: 0711 lsls r1, r2, #28 - 146ae: 4607 mov r7, r0 - 146b0: d442 bmi.n 14738 <__sflush_r+0x94> - 146b2: 6863 ldr r3, [r4, #4] - 146b4: f442 6200 orr.w r2, r2, #2048 ; 0x800 - 146b8: 2b00 cmp r3, #0 - 146ba: 81a2 strh r2, [r4, #12] - 146bc: dd59 ble.n 14772 <__sflush_r+0xce> - 146be: 6aa5 ldr r5, [r4, #40] ; 0x28 - 146c0: 2d00 cmp r5, #0 - 146c2: d054 beq.n 1476e <__sflush_r+0xca> - 146c4: 2300 movs r3, #0 - 146c6: 683e ldr r6, [r7, #0] - 146c8: 603b str r3, [r7, #0] - 146ca: b293 uxth r3, r2 - 146cc: f412 5280 ands.w r2, r2, #4096 ; 0x1000 - 146d0: d153 bne.n 1477a <__sflush_r+0xd6> - 146d2: 69e1 ldr r1, [r4, #28] - 146d4: 2301 movs r3, #1 - 146d6: 4638 mov r0, r7 - 146d8: 47a8 blx r5 - 146da: 1c42 adds r2, r0, #1 - 146dc: d063 beq.n 147a6 <__sflush_r+0x102> - 146de: 89a3 ldrh r3, [r4, #12] - 146e0: 6aa5 ldr r5, [r4, #40] ; 0x28 - 146e2: 075b lsls r3, r3, #29 - 146e4: d505 bpl.n 146f2 <__sflush_r+0x4e> - 146e6: 6863 ldr r3, [r4, #4] - 146e8: 1ac0 subs r0, r0, r3 - 146ea: 6b23 ldr r3, [r4, #48] ; 0x30 - 146ec: b10b cbz r3, 146f2 <__sflush_r+0x4e> - 146ee: 6be3 ldr r3, [r4, #60] ; 0x3c - 146f0: 1ac0 subs r0, r0, r3 - 146f2: 69e1 ldr r1, [r4, #28] - 146f4: 4602 mov r2, r0 - 146f6: 2300 movs r3, #0 - 146f8: 4638 mov r0, r7 - 146fa: 47a8 blx r5 - 146fc: 1c41 adds r1, r0, #1 - 146fe: d13e bne.n 1477e <__sflush_r+0xda> - 14700: 683b ldr r3, [r7, #0] - 14702: 2b00 cmp r3, #0 - 14704: d03b beq.n 1477e <__sflush_r+0xda> - 14706: 2b1d cmp r3, #29 - 14708: d001 beq.n 1470e <__sflush_r+0x6a> - 1470a: 2b16 cmp r3, #22 - 1470c: d152 bne.n 147b4 <__sflush_r+0x110> - 1470e: 89a3 ldrh r3, [r4, #12] - 14710: 6922 ldr r2, [r4, #16] - 14712: 6022 str r2, [r4, #0] - 14714: f423 6300 bic.w r3, r3, #2048 ; 0x800 - 14718: 2100 movs r1, #0 - 1471a: 6061 str r1, [r4, #4] - 1471c: 81a3 strh r3, [r4, #12] - 1471e: 6b21 ldr r1, [r4, #48] ; 0x30 - 14720: 603e str r6, [r7, #0] - 14722: b321 cbz r1, 1476e <__sflush_r+0xca> - 14724: f104 0340 add.w r3, r4, #64 ; 0x40 - 14728: 4299 cmp r1, r3 - 1472a: d002 beq.n 14732 <__sflush_r+0x8e> - 1472c: 4638 mov r0, r7 - 1472e: f7fd fcb9 bl 120a4 <_free_r> - 14732: 2000 movs r0, #0 - 14734: 6320 str r0, [r4, #48] ; 0x30 - 14736: bdf8 pop {r3, r4, r5, r6, r7, pc} - 14738: 6926 ldr r6, [r4, #16] - 1473a: b1c6 cbz r6, 1476e <__sflush_r+0xca> - 1473c: b293 uxth r3, r2 - 1473e: 6825 ldr r5, [r4, #0] - 14740: 6026 str r6, [r4, #0] - 14742: 079a lsls r2, r3, #30 - 14744: bf0c ite eq - 14746: 6963 ldreq r3, [r4, #20] - 14748: 2300 movne r3, #0 - 1474a: 1bad subs r5, r5, r6 - 1474c: 60a3 str r3, [r4, #8] - 1474e: e00c b.n 1476a <__sflush_r+0xc6> - 14750: f8d4 c024 ldr.w ip, [r4, #36] ; 0x24 - 14754: 69e1 ldr r1, [r4, #28] - 14756: 462b mov r3, r5 - 14758: 4632 mov r2, r6 - 1475a: 4638 mov r0, r7 - 1475c: 47e0 blx ip - 1475e: f1b0 0c00 subs.w ip, r0, #0 - 14762: eba5 050c sub.w r5, r5, ip - 14766: 4466 add r6, ip - 14768: dd16 ble.n 14798 <__sflush_r+0xf4> - 1476a: 2d00 cmp r5, #0 - 1476c: dcf0 bgt.n 14750 <__sflush_r+0xac> - 1476e: 2000 movs r0, #0 - 14770: bdf8 pop {r3, r4, r5, r6, r7, pc} - 14772: 6be3 ldr r3, [r4, #60] ; 0x3c - 14774: 2b00 cmp r3, #0 - 14776: dca2 bgt.n 146be <__sflush_r+0x1a> - 14778: e7f9 b.n 1476e <__sflush_r+0xca> - 1477a: 6d20 ldr r0, [r4, #80] ; 0x50 - 1477c: e7b1 b.n 146e2 <__sflush_r+0x3e> - 1477e: f9b4 300c ldrsh.w r3, [r4, #12] - 14782: 6922 ldr r2, [r4, #16] - 14784: 6022 str r2, [r4, #0] - 14786: f423 6300 bic.w r3, r3, #2048 ; 0x800 - 1478a: 81a3 strh r3, [r4, #12] - 1478c: 2200 movs r2, #0 - 1478e: 04db lsls r3, r3, #19 - 14790: 6062 str r2, [r4, #4] - 14792: d5c4 bpl.n 1471e <__sflush_r+0x7a> - 14794: 6520 str r0, [r4, #80] ; 0x50 - 14796: e7c2 b.n 1471e <__sflush_r+0x7a> - 14798: 89a3 ldrh r3, [r4, #12] - 1479a: f043 0340 orr.w r3, r3, #64 ; 0x40 - 1479e: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 147a2: 81a3 strh r3, [r4, #12] - 147a4: bdf8 pop {r3, r4, r5, r6, r7, pc} - 147a6: 683b ldr r3, [r7, #0] - 147a8: 2b00 cmp r3, #0 - 147aa: d098 beq.n 146de <__sflush_r+0x3a> - 147ac: 2b1d cmp r3, #29 - 147ae: d006 beq.n 147be <__sflush_r+0x11a> - 147b0: 2b16 cmp r3, #22 - 147b2: d004 beq.n 147be <__sflush_r+0x11a> - 147b4: 89a3 ldrh r3, [r4, #12] - 147b6: f043 0340 orr.w r3, r3, #64 ; 0x40 - 147ba: 81a3 strh r3, [r4, #12] - 147bc: bdf8 pop {r3, r4, r5, r6, r7, pc} - 147be: 603e str r6, [r7, #0] - 147c0: e7d5 b.n 1476e <__sflush_r+0xca> - 147c2: bf00 nop - -000147c4 <_fflush_r>: - 147c4: b538 push {r3, r4, r5, lr} - 147c6: 460c mov r4, r1 - 147c8: 4605 mov r5, r0 - 147ca: b108 cbz r0, 147d0 <_fflush_r+0xc> - 147cc: 6b43 ldr r3, [r0, #52] ; 0x34 - 147ce: b303 cbz r3, 14812 <_fflush_r+0x4e> - 147d0: f9b4 000c ldrsh.w r0, [r4, #12] - 147d4: b188 cbz r0, 147fa <_fflush_r+0x36> - 147d6: 6e63 ldr r3, [r4, #100] ; 0x64 - 147d8: 07db lsls r3, r3, #31 - 147da: d401 bmi.n 147e0 <_fflush_r+0x1c> - 147dc: 0581 lsls r1, r0, #22 - 147de: d50f bpl.n 14800 <_fflush_r+0x3c> - 147e0: 4628 mov r0, r5 - 147e2: 4621 mov r1, r4 - 147e4: f7ff ff5e bl 146a4 <__sflush_r> - 147e8: 6e63 ldr r3, [r4, #100] ; 0x64 - 147ea: 07da lsls r2, r3, #31 - 147ec: 4605 mov r5, r0 - 147ee: d402 bmi.n 147f6 <_fflush_r+0x32> - 147f0: 89a3 ldrh r3, [r4, #12] - 147f2: 059b lsls r3, r3, #22 - 147f4: d508 bpl.n 14808 <_fflush_r+0x44> - 147f6: 4628 mov r0, r5 - 147f8: bd38 pop {r3, r4, r5, pc} - 147fa: 4605 mov r5, r0 - 147fc: 4628 mov r0, r5 - 147fe: bd38 pop {r3, r4, r5, pc} - 14800: 6da0 ldr r0, [r4, #88] ; 0x58 - 14802: f7fd fad1 bl 11da8 <__retarget_lock_acquire_recursive> - 14806: e7eb b.n 147e0 <_fflush_r+0x1c> - 14808: 6da0 ldr r0, [r4, #88] ; 0x58 - 1480a: f7fd facf bl 11dac <__retarget_lock_release_recursive> - 1480e: 4628 mov r0, r5 - 14810: bd38 pop {r3, r4, r5, pc} - 14812: f7fc fbb3 bl 10f7c <__sinit> - 14816: e7db b.n 147d0 <_fflush_r+0xc> - -00014818 <__sread>: - 14818: b510 push {r4, lr} - 1481a: 460c mov r4, r1 - 1481c: f9b1 100e ldrsh.w r1, [r1, #14] - 14820: f000 f88c bl 1493c <_read_r> - 14824: 2800 cmp r0, #0 - 14826: db03 blt.n 14830 <__sread+0x18> - 14828: 6d23 ldr r3, [r4, #80] ; 0x50 - 1482a: 4403 add r3, r0 - 1482c: 6523 str r3, [r4, #80] ; 0x50 - 1482e: bd10 pop {r4, pc} - 14830: 89a3 ldrh r3, [r4, #12] - 14832: f423 5380 bic.w r3, r3, #4096 ; 0x1000 - 14836: 81a3 strh r3, [r4, #12] - 14838: bd10 pop {r4, pc} - 1483a: bf00 nop - -0001483c <__swrite>: - 1483c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 14840: 460c mov r4, r1 - 14842: f9b1 100c ldrsh.w r1, [r1, #12] - 14846: 461f mov r7, r3 - 14848: 05cb lsls r3, r1, #23 - 1484a: 4605 mov r5, r0 - 1484c: 4616 mov r6, r2 - 1484e: d40b bmi.n 14868 <__swrite+0x2c> - 14850: f421 5180 bic.w r1, r1, #4096 ; 0x1000 - 14854: 81a1 strh r1, [r4, #12] - 14856: 463b mov r3, r7 - 14858: f9b4 100e ldrsh.w r1, [r4, #14] - 1485c: 4632 mov r2, r6 - 1485e: 4628 mov r0, r5 - 14860: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 14864: f7fd b882 b.w 1196c <_write_r> - 14868: f9b4 100e ldrsh.w r1, [r4, #14] - 1486c: 2302 movs r3, #2 - 1486e: 2200 movs r2, #0 - 14870: f000 f84e bl 14910 <_lseek_r> - 14874: f9b4 100c ldrsh.w r1, [r4, #12] - 14878: e7ea b.n 14850 <__swrite+0x14> - 1487a: bf00 nop - -0001487c <__sseek>: - 1487c: b510 push {r4, lr} - 1487e: 460c mov r4, r1 - 14880: f9b1 100e ldrsh.w r1, [r1, #14] - 14884: f000 f844 bl 14910 <_lseek_r> - 14888: 89a3 ldrh r3, [r4, #12] - 1488a: 1c42 adds r2, r0, #1 - 1488c: bf0e itee eq - 1488e: f423 5380 biceq.w r3, r3, #4096 ; 0x1000 - 14892: f443 5380 orrne.w r3, r3, #4096 ; 0x1000 - 14896: 6520 strne r0, [r4, #80] ; 0x50 - 14898: 81a3 strh r3, [r4, #12] - 1489a: bd10 pop {r4, pc} - -0001489c <__sclose>: - 1489c: f9b1 100e ldrsh.w r1, [r1, #14] - 148a0: f000 b824 b.w 148ec <_close_r> - -000148a4 <__ascii_wctomb>: - 148a4: b149 cbz r1, 148ba <__ascii_wctomb+0x16> - 148a6: 2aff cmp r2, #255 ; 0xff - 148a8: d802 bhi.n 148b0 <__ascii_wctomb+0xc> - 148aa: 700a strb r2, [r1, #0] - 148ac: 2001 movs r0, #1 - 148ae: 4770 bx lr - 148b0: 238a movs r3, #138 ; 0x8a - 148b2: 6003 str r3, [r0, #0] - 148b4: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 148b8: 4770 bx lr - 148ba: 4608 mov r0, r1 - 148bc: 4770 bx lr - 148be: bf00 nop - -000148c0 : - 148c0: b171 cbz r1, 148e0 - 148c2: 4603 mov r3, r0 - 148c4: eb00 0c01 add.w ip, r0, r1 - 148c8: e001 b.n 148ce - 148ca: 4563 cmp r3, ip - 148cc: d006 beq.n 148dc - 148ce: 461a mov r2, r3 - 148d0: 3301 adds r3, #1 - 148d2: 7811 ldrb r1, [r2, #0] - 148d4: 2900 cmp r1, #0 - 148d6: d1f8 bne.n 148ca - 148d8: 1a10 subs r0, r2, r0 - 148da: 4770 bx lr - 148dc: 1a18 subs r0, r3, r0 - 148de: 4770 bx lr - 148e0: 4608 mov r0, r1 - 148e2: 4770 bx lr - -000148e4 <_localeconv_r>: - 148e4: 4800 ldr r0, [pc, #0] ; (148e8 <_localeconv_r+0x4>) - 148e6: 4770 bx lr - 148e8: 1fff8e0c .word 0x1fff8e0c - -000148ec <_close_r>: - 148ec: b538 push {r3, r4, r5, lr} - 148ee: 4d07 ldr r5, [pc, #28] ; (1490c <_close_r+0x20>) - 148f0: 2200 movs r2, #0 - 148f2: 4604 mov r4, r0 - 148f4: 4608 mov r0, r1 - 148f6: 602a str r2, [r5, #0] - 148f8: f7f7 fbb8 bl c06c <_close> - 148fc: 1c43 adds r3, r0, #1 - 148fe: d000 beq.n 14902 <_close_r+0x16> - 14900: bd38 pop {r3, r4, r5, pc} - 14902: 682b ldr r3, [r5, #0] - 14904: 2b00 cmp r3, #0 - 14906: d0fb beq.n 14900 <_close_r+0x14> - 14908: 6023 str r3, [r4, #0] - 1490a: bd38 pop {r3, r4, r5, pc} - 1490c: 1fff9d78 .word 0x1fff9d78 - -00014910 <_lseek_r>: - 14910: b538 push {r3, r4, r5, lr} - 14912: 460c mov r4, r1 - 14914: 4d08 ldr r5, [pc, #32] ; (14938 <_lseek_r+0x28>) - 14916: 4684 mov ip, r0 - 14918: 4611 mov r1, r2 - 1491a: 4620 mov r0, r4 - 1491c: 461a mov r2, r3 - 1491e: 2300 movs r3, #0 - 14920: 602b str r3, [r5, #0] - 14922: 4664 mov r4, ip - 14924: f7f7 fbae bl c084 <_lseek> - 14928: 1c43 adds r3, r0, #1 - 1492a: d000 beq.n 1492e <_lseek_r+0x1e> - 1492c: bd38 pop {r3, r4, r5, pc} - 1492e: 682b ldr r3, [r5, #0] - 14930: 2b00 cmp r3, #0 - 14932: d0fb beq.n 1492c <_lseek_r+0x1c> - 14934: 6023 str r3, [r4, #0] - 14936: bd38 pop {r3, r4, r5, pc} - 14938: 1fff9d78 .word 0x1fff9d78 - -0001493c <_read_r>: - 1493c: b538 push {r3, r4, r5, lr} - 1493e: 460c mov r4, r1 - 14940: 4d08 ldr r5, [pc, #32] ; (14964 <_read_r+0x28>) - 14942: 4684 mov ip, r0 - 14944: 4611 mov r1, r2 - 14946: 4620 mov r0, r4 - 14948: 461a mov r2, r3 - 1494a: 2300 movs r3, #0 - 1494c: 602b str r3, [r5, #0] - 1494e: 4664 mov r4, ip - 14950: f7f7 fb8a bl c068 <_read> - 14954: 1c43 adds r3, r0, #1 - 14956: d000 beq.n 1495a <_read_r+0x1e> - 14958: bd38 pop {r3, r4, r5, pc} - 1495a: 682b ldr r3, [r5, #0] - 1495c: 2b00 cmp r3, #0 - 1495e: d0fb beq.n 14958 <_read_r+0x1c> - 14960: 6023 str r3, [r4, #0] - 14962: bd38 pop {r3, r4, r5, pc} - 14964: 1fff9d78 .word 0x1fff9d78 - -00014968 : - 14968: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 1496c: b088 sub sp, #32 - 1496e: 461e mov r6, r3 - 14970: 9d11 ldr r5, [sp, #68] ; 0x44 - 14972: 4b25 ldr r3, [pc, #148] ; (14a08 ) - 14974: 4680 mov r8, r0 - 14976: 681f ldr r7, [r3, #0] - 14978: 4689 mov r9, r1 - 1497a: 4614 mov r4, r2 - 1497c: b36d cbz r5, 149da - 1497e: 9b10 ldr r3, [sp, #64] ; 0x40 - 14980: 9401 str r4, [sp, #4] - 14982: a907 add r1, sp, #28 - 14984: 9104 str r1, [sp, #16] - 14986: 2103 movs r1, #3 - 14988: e9cd 6302 strd r6, r3, [sp, #8] - 1498c: 9100 str r1, [sp, #0] - 1498e: 464b mov r3, r9 - 14990: 4642 mov r2, r8 - 14992: 4638 mov r0, r7 - 14994: f000 f9ac bl 14cf0 <_dtoa_r> - 14998: 9b07 ldr r3, [sp, #28] - 1499a: 6831 ldr r1, [r6, #0] - 1499c: 4298 cmp r0, r3 - 1499e: f1c1 0100 rsb r1, r1, #0 - 149a2: 462b mov r3, r5 - 149a4: d20a bcs.n 149bc - 149a6: eba1 0c00 sub.w ip, r1, r0 - 149aa: f810 2b01 ldrb.w r2, [r0], #1 - 149ae: f803 2b01 strb.w r2, [r3], #1 - 149b2: 9a07 ldr r2, [sp, #28] - 149b4: 4282 cmp r2, r0 - 149b6: eb0c 0100 add.w r1, ip, r0 - 149ba: d8f6 bhi.n 149aa - 149bc: 428c cmp r4, r1 - 149be: dd20 ble.n 14a02 - 149c0: 1a62 subs r2, r4, r1 - 149c2: 441a add r2, r3 - 149c4: 2130 movs r1, #48 ; 0x30 - 149c6: f803 1b01 strb.w r1, [r3], #1 - 149ca: 4293 cmp r3, r2 - 149cc: d1fb bne.n 149c6 - 149ce: 2300 movs r3, #0 - 149d0: 7013 strb r3, [r2, #0] - 149d2: 4628 mov r0, r5 - 149d4: b008 add sp, #32 - 149d6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 149da: 6cba ldr r2, [r7, #72] ; 0x48 - 149dc: f104 0323 add.w r3, r4, #35 ; 0x23 - 149e0: 429a cmp r2, r3 - 149e2: dd01 ble.n 149e8 - 149e4: 6cfd ldr r5, [r7, #76] ; 0x4c - 149e6: e7ca b.n 1497e - 149e8: f104 0a24 add.w sl, r4, #36 ; 0x24 - 149ec: 6cf9 ldr r1, [r7, #76] ; 0x4c - 149ee: 4652 mov r2, sl - 149f0: 4638 mov r0, r7 - 149f2: f7fb fe35 bl 10660 <_realloc_r> - 149f6: 4605 mov r5, r0 - 149f8: 2800 cmp r0, #0 - 149fa: d0ea beq.n 149d2 - 149fc: e9c7 a012 strd sl, r0, [r7, #72] ; 0x48 - 14a00: e7bd b.n 1497e - 14a02: 461a mov r2, r3 - 14a04: e7e3 b.n 149ce - 14a06: bf00 nop - 14a08: 1fff8fa8 .word 0x1fff8fa8 - -00014a0c <__libc_fini_array>: - 14a0c: b538 push {r3, r4, r5, lr} - 14a0e: 4d07 ldr r5, [pc, #28] ; (14a2c <__libc_fini_array+0x20>) - 14a10: 4c07 ldr r4, [pc, #28] ; (14a30 <__libc_fini_array+0x24>) - 14a12: 1b2c subs r4, r5, r4 - 14a14: 10a4 asrs r4, r4, #2 - 14a16: d005 beq.n 14a24 <__libc_fini_array+0x18> - 14a18: 3c01 subs r4, #1 - 14a1a: f855 3d04 ldr.w r3, [r5, #-4]! - 14a1e: 4798 blx r3 - 14a20: 2c00 cmp r4, #0 - 14a22: d1f9 bne.n 14a18 <__libc_fini_array+0xc> - 14a24: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 14a28: f004 b8da b.w 18be0 <__init_array_end> - ... - -00014a34 <_wcrtomb_r>: - 14a34: b570 push {r4, r5, r6, lr} - 14a36: 4605 mov r5, r0 - 14a38: b084 sub sp, #16 - 14a3a: b15b cbz r3, 14a54 <_wcrtomb_r+0x20> - 14a3c: 461c mov r4, r3 - 14a3e: b169 cbz r1, 14a5c <_wcrtomb_r+0x28> - 14a40: 4b0e ldr r3, [pc, #56] ; (14a7c <_wcrtomb_r+0x48>) - 14a42: 4628 mov r0, r5 - 14a44: f8d3 60e0 ldr.w r6, [r3, #224] ; 0xe0 - 14a48: 4623 mov r3, r4 - 14a4a: 47b0 blx r6 - 14a4c: 1c43 adds r3, r0, #1 - 14a4e: d00f beq.n 14a70 <_wcrtomb_r+0x3c> - 14a50: b004 add sp, #16 - 14a52: bd70 pop {r4, r5, r6, pc} - 14a54: f500 7482 add.w r4, r0, #260 ; 0x104 - 14a58: 2900 cmp r1, #0 - 14a5a: d1f1 bne.n 14a40 <_wcrtomb_r+0xc> - 14a5c: 4a07 ldr r2, [pc, #28] ; (14a7c <_wcrtomb_r+0x48>) - 14a5e: 4623 mov r3, r4 - 14a60: f8d2 60e0 ldr.w r6, [r2, #224] ; 0xe0 - 14a64: 4628 mov r0, r5 - 14a66: 460a mov r2, r1 - 14a68: a901 add r1, sp, #4 - 14a6a: 47b0 blx r6 - 14a6c: 1c43 adds r3, r0, #1 - 14a6e: d1ef bne.n 14a50 <_wcrtomb_r+0x1c> - 14a70: 2200 movs r2, #0 - 14a72: 238a movs r3, #138 ; 0x8a - 14a74: 6022 str r2, [r4, #0] - 14a76: 602b str r3, [r5, #0] - 14a78: b004 add sp, #16 - 14a7a: bd70 pop {r4, r5, r6, pc} - 14a7c: 1fff8d1c .word 0x1fff8d1c - -00014a80 <_wcsrtombs_r>: - 14a80: b500 push {lr} - 14a82: b083 sub sp, #12 - 14a84: f8dd c010 ldr.w ip, [sp, #16] - 14a88: e9cd 3c00 strd r3, ip, [sp] - 14a8c: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 14a90: f002 fc3c bl 1730c <_wcsnrtombs_r> - 14a94: b003 add sp, #12 - 14a96: f85d fb04 ldr.w pc, [sp], #4 - 14a9a: bf00 nop - -00014a9c : - 14a9c: f8df c060 ldr.w ip, [pc, #96] ; 14b00 - 14aa0: b5f8 push {r3, r4, r5, r6, r7, lr} - 14aa2: f021 4300 bic.w r3, r1, #2147483648 ; 0x80000000 - 14aa6: 2700 movs r7, #0 - 14aa8: 4563 cmp r3, ip - 14aaa: 4604 mov r4, r0 - 14aac: 460d mov r5, r1 - 14aae: 4616 mov r6, r2 - 14ab0: 6017 str r7, [r2, #0] - 14ab2: dc22 bgt.n 14afa - 14ab4: 4684 mov ip, r0 - 14ab6: ea53 0c0c orrs.w ip, r3, ip - 14aba: d01e beq.n 14afa - 14abc: f8df c044 ldr.w ip, [pc, #68] ; 14b04 - 14ac0: ea01 0c0c and.w ip, r1, ip - 14ac4: 460a mov r2, r1 - 14ac6: f1bc 0f00 cmp.w ip, #0 - 14aca: d109 bne.n 14ae0 - 14acc: 4b0e ldr r3, [pc, #56] ; (14b08 ) - 14ace: 2200 movs r2, #0 - 14ad0: f7fa fc90 bl f3f4 <__aeabi_dmul> - 14ad4: f06f 0735 mvn.w r7, #53 ; 0x35 - 14ad8: 4604 mov r4, r0 - 14ada: 460a mov r2, r1 - 14adc: f021 4300 bic.w r3, r1, #2147483648 ; 0x80000000 - 14ae0: f022 42ff bic.w r2, r2, #2139095040 ; 0x7f800000 - 14ae4: 151b asrs r3, r3, #20 - 14ae6: f422 02e0 bic.w r2, r2, #7340032 ; 0x700000 - 14aea: f2a3 33fe subw r3, r3, #1022 ; 0x3fe - 14aee: f042 557f orr.w r5, r2, #1069547520 ; 0x3fc00000 - 14af2: 443b add r3, r7 - 14af4: f445 1500 orr.w r5, r5, #2097152 ; 0x200000 - 14af8: 6033 str r3, [r6, #0] - 14afa: 4620 mov r0, r4 - 14afc: 4629 mov r1, r5 - 14afe: bdf8 pop {r3, r4, r5, r6, r7, pc} - 14b00: 7fefffff .word 0x7fefffff - 14b04: 7ff00000 .word 0x7ff00000 - 14b08: 43500000 .word 0x43500000 - -00014b0c <__assert_func>: - 14b0c: b500 push {lr} - 14b0e: 4c0b ldr r4, [pc, #44] ; (14b3c <__assert_func+0x30>) - 14b10: 6825 ldr r5, [r4, #0] - 14b12: 4614 mov r4, r2 - 14b14: 68ee ldr r6, [r5, #12] - 14b16: 461a mov r2, r3 - 14b18: b085 sub sp, #20 - 14b1a: 4603 mov r3, r0 - 14b1c: 460d mov r5, r1 - 14b1e: b14c cbz r4, 14b34 <__assert_func+0x28> - 14b20: 4907 ldr r1, [pc, #28] ; (14b40 <__assert_func+0x34>) - 14b22: 9500 str r5, [sp, #0] - 14b24: e9cd 1401 strd r1, r4, [sp, #4] - 14b28: 4630 mov r0, r6 - 14b2a: 4906 ldr r1, [pc, #24] ; (14b44 <__assert_func+0x38>) - 14b2c: f001 f83c bl 15ba8 - 14b30: f7f7 faae bl c090 - 14b34: 4904 ldr r1, [pc, #16] ; (14b48 <__assert_func+0x3c>) - 14b36: 460c mov r4, r1 - 14b38: e7f3 b.n 14b22 <__assert_func+0x16> - 14b3a: bf00 nop - 14b3c: 1fff8fa8 .word 0x1fff8fa8 - 14b40: 00018aec .word 0x00018aec - 14b44: 00018afc .word 0x00018afc - 14b48: 00017eac .word 0x00017eac - -00014b4c <_calloc_r>: - 14b4c: b538 push {r3, r4, r5, lr} - 14b4e: fba1 1402 umull r1, r4, r1, r2 - 14b52: bb8c cbnz r4, 14bb8 <_calloc_r+0x6c> - 14b54: f7fb fabc bl 100d0 <_malloc_r> - 14b58: 4605 mov r5, r0 - 14b5a: b1e0 cbz r0, 14b96 <_calloc_r+0x4a> - 14b5c: f850 2c04 ldr.w r2, [r0, #-4] - 14b60: f022 0203 bic.w r2, r2, #3 - 14b64: 3a04 subs r2, #4 - 14b66: 2a24 cmp r2, #36 ; 0x24 - 14b68: d817 bhi.n 14b9a <_calloc_r+0x4e> - 14b6a: 2a13 cmp r2, #19 - 14b6c: d91a bls.n 14ba4 <_calloc_r+0x58> - 14b6e: 2a1b cmp r2, #27 - 14b70: e9c0 4400 strd r4, r4, [r0] - 14b74: d91d bls.n 14bb2 <_calloc_r+0x66> - 14b76: 2a24 cmp r2, #36 ; 0x24 - 14b78: bf14 ite ne - 14b7a: f100 0210 addne.w r2, r0, #16 - 14b7e: f100 0218 addeq.w r2, r0, #24 - 14b82: f04f 0300 mov.w r3, #0 - 14b86: e9c0 4402 strd r4, r4, [r0, #8] - 14b8a: bf04 itt eq - 14b8c: 6104 streq r4, [r0, #16] - 14b8e: 6144 streq r4, [r0, #20] - 14b90: e9c2 3300 strd r3, r3, [r2] - 14b94: 6093 str r3, [r2, #8] - 14b96: 4628 mov r0, r5 - 14b98: bd38 pop {r3, r4, r5, pc} - 14b9a: 4621 mov r1, r4 - 14b9c: f7fc faea bl 11174 - 14ba0: 4628 mov r0, r5 - 14ba2: bd38 pop {r3, r4, r5, pc} - 14ba4: 4602 mov r2, r0 - 14ba6: 2300 movs r3, #0 - 14ba8: e9c2 3300 strd r3, r3, [r2] - 14bac: 6093 str r3, [r2, #8] - 14bae: 4628 mov r0, r5 - 14bb0: bd38 pop {r3, r4, r5, pc} - 14bb2: f100 0208 add.w r2, r0, #8 - 14bb6: e7f6 b.n 14ba6 <_calloc_r+0x5a> - 14bb8: f7fc feee bl 11998 <__errno> - 14bbc: 230c movs r3, #12 - 14bbe: 2500 movs r5, #0 - 14bc0: 6003 str r3, [r0, #0] - 14bc2: e7e8 b.n 14b96 <_calloc_r+0x4a> - -00014bc4 : - 14bc4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 14bc8: 6903 ldr r3, [r0, #16] - 14bca: 690c ldr r4, [r1, #16] - 14bcc: 42a3 cmp r3, r4 - 14bce: b083 sub sp, #12 - 14bd0: f2c0 8088 blt.w 14ce4 - 14bd4: 3c01 subs r4, #1 - 14bd6: f101 0514 add.w r5, r1, #20 - 14bda: 00a3 lsls r3, r4, #2 - 14bdc: f100 0814 add.w r8, r0, #20 - 14be0: 9300 str r3, [sp, #0] - 14be2: f855 3024 ldr.w r3, [r5, r4, lsl #2] - 14be6: f858 2024 ldr.w r2, [r8, r4, lsl #2] - 14bea: 3301 adds r3, #1 - 14bec: 468a mov sl, r1 - 14bee: 429a cmp r2, r3 - 14bf0: eb08 0184 add.w r1, r8, r4, lsl #2 - 14bf4: 4681 mov r9, r0 - 14bf6: eb05 0784 add.w r7, r5, r4, lsl #2 - 14bfa: 9101 str r1, [sp, #4] - 14bfc: fbb2 f6f3 udiv r6, r2, r3 - 14c00: d33a bcc.n 14c78 - 14c02: f04f 0c00 mov.w ip, #0 - 14c06: 46ae mov lr, r5 - 14c08: 4640 mov r0, r8 - 14c0a: 4662 mov r2, ip - 14c0c: 4663 mov r3, ip - 14c0e: f85e bb04 ldr.w fp, [lr], #4 - 14c12: 6801 ldr r1, [r0, #0] - 14c14: fa1f fc8b uxth.w ip, fp - 14c18: fb06 330c mla r3, r6, ip, r3 - 14c1c: ea4f 4c13 mov.w ip, r3, lsr #16 - 14c20: ea4f 4b1b mov.w fp, fp, lsr #16 - 14c24: fb06 cc0b mla ip, r6, fp, ip - 14c28: b29b uxth r3, r3 - 14c2a: 1ad3 subs r3, r2, r3 - 14c2c: fa1f f28c uxth.w r2, ip - 14c30: fa13 f381 uxtah r3, r3, r1 - 14c34: ebc2 4211 rsb r2, r2, r1, lsr #16 - 14c38: eb02 4223 add.w r2, r2, r3, asr #16 - 14c3c: b29b uxth r3, r3 - 14c3e: ea43 4302 orr.w r3, r3, r2, lsl #16 - 14c42: 4577 cmp r7, lr - 14c44: f840 3b04 str.w r3, [r0], #4 - 14c48: ea4f 4222 mov.w r2, r2, asr #16 - 14c4c: ea4f 431c mov.w r3, ip, lsr #16 - 14c50: d2dd bcs.n 14c0e - 14c52: 9b00 ldr r3, [sp, #0] - 14c54: f858 3003 ldr.w r3, [r8, r3] - 14c58: b973 cbnz r3, 14c78 - 14c5a: 9b01 ldr r3, [sp, #4] - 14c5c: 3b04 subs r3, #4 - 14c5e: 4598 cmp r8, r3 - 14c60: d304 bcc.n 14c6c - 14c62: e007 b.n 14c74 - 14c64: 4598 cmp r8, r3 - 14c66: f104 34ff add.w r4, r4, #4294967295 ; 0xffffffff - 14c6a: d203 bcs.n 14c74 - 14c6c: f853 2904 ldr.w r2, [r3], #-4 - 14c70: 2a00 cmp r2, #0 - 14c72: d0f7 beq.n 14c64 - 14c74: f8c9 4010 str.w r4, [r9, #16] - 14c78: 4651 mov r1, sl - 14c7a: 4648 mov r0, r9 - 14c7c: f7ff fb84 bl 14388 <__mcmp> - 14c80: 2800 cmp r0, #0 - 14c82: db2b blt.n 14cdc - 14c84: 3601 adds r6, #1 - 14c86: 4641 mov r1, r8 - 14c88: 2300 movs r3, #0 - 14c8a: f855 0b04 ldr.w r0, [r5], #4 - 14c8e: f8d1 c000 ldr.w ip, [r1] - 14c92: b282 uxth r2, r0 - 14c94: 1a9a subs r2, r3, r2 - 14c96: 0c03 lsrs r3, r0, #16 - 14c98: fa12 f28c uxtah r2, r2, ip - 14c9c: ebc3 431c rsb r3, r3, ip, lsr #16 - 14ca0: eb03 4322 add.w r3, r3, r2, asr #16 - 14ca4: b292 uxth r2, r2 - 14ca6: ea42 4203 orr.w r2, r2, r3, lsl #16 - 14caa: 42af cmp r7, r5 - 14cac: f841 2b04 str.w r2, [r1], #4 - 14cb0: ea4f 4323 mov.w r3, r3, asr #16 - 14cb4: d2e9 bcs.n 14c8a - 14cb6: f858 2024 ldr.w r2, [r8, r4, lsl #2] - 14cba: eb08 0384 add.w r3, r8, r4, lsl #2 - 14cbe: b96a cbnz r2, 14cdc - 14cc0: 3b04 subs r3, #4 - 14cc2: 4598 cmp r8, r3 - 14cc4: d304 bcc.n 14cd0 - 14cc6: e007 b.n 14cd8 - 14cc8: 4598 cmp r8, r3 - 14cca: f104 34ff add.w r4, r4, #4294967295 ; 0xffffffff - 14cce: d203 bcs.n 14cd8 - 14cd0: f853 2904 ldr.w r2, [r3], #-4 - 14cd4: 2a00 cmp r2, #0 - 14cd6: d0f7 beq.n 14cc8 - 14cd8: f8c9 4010 str.w r4, [r9, #16] - 14cdc: 4630 mov r0, r6 - 14cde: b003 add sp, #12 - 14ce0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 14ce4: 2000 movs r0, #0 - 14ce6: b003 add sp, #12 - 14ce8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 14cec: ffff ffff ; instruction: 0xffffffff - -00014cf0 <_dtoa_r>: - 14cf0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 14cf4: 6b81 ldr r1, [r0, #56] ; 0x38 - 14cf6: b099 sub sp, #100 ; 0x64 - 14cf8: 4690 mov r8, r2 - 14cfa: 4699 mov r9, r3 - 14cfc: e9cd 8904 strd r8, r9, [sp, #16] - 14d00: 9d25 ldr r5, [sp, #148] ; 0x94 - 14d02: 4604 mov r4, r0 - 14d04: b141 cbz r1, 14d18 <_dtoa_r+0x28> - 14d06: 6bc2 ldr r2, [r0, #60] ; 0x3c - 14d08: 604a str r2, [r1, #4] - 14d0a: 2301 movs r3, #1 - 14d0c: 4093 lsls r3, r2 - 14d0e: 608b str r3, [r1, #8] - 14d10: f7ff f8dc bl 13ecc <_Bfree> - 14d14: 2300 movs r3, #0 - 14d16: 63a3 str r3, [r4, #56] ; 0x38 - 14d18: f1b9 0a00 subs.w sl, r9, #0 - 14d1c: bfb4 ite lt - 14d1e: 2301 movlt r3, #1 - 14d20: 2300 movge r3, #0 - 14d22: 602b str r3, [r5, #0] - 14d24: 4b76 ldr r3, [pc, #472] ; (14f00 <_dtoa_r+0x210>) - 14d26: bfbc itt lt - 14d28: f02a 4a00 biclt.w sl, sl, #2147483648 ; 0x80000000 - 14d2c: f8cd a014 strlt.w sl, [sp, #20] - 14d30: ea33 030a bics.w r3, r3, sl - 14d34: f000 80ab beq.w 14e8e <_dtoa_r+0x19e> - 14d38: e9dd 2304 ldrd r2, r3, [sp, #16] - 14d3c: 4610 mov r0, r2 - 14d3e: 4619 mov r1, r3 - 14d40: 2200 movs r2, #0 - 14d42: 2300 movs r3, #0 - 14d44: e9cd 010a strd r0, r1, [sp, #40] ; 0x28 - 14d48: f7fa fdbc bl f8c4 <__aeabi_dcmpeq> - 14d4c: 4607 mov r7, r0 - 14d4e: b178 cbz r0, 14d70 <_dtoa_r+0x80> - 14d50: 9a24 ldr r2, [sp, #144] ; 0x90 - 14d52: 2301 movs r3, #1 - 14d54: 6013 str r3, [r2, #0] - 14d56: 9b26 ldr r3, [sp, #152] ; 0x98 - 14d58: 2b00 cmp r3, #0 - 14d5a: f000 83ae beq.w 154ba <_dtoa_r+0x7ca> - 14d5e: 4b69 ldr r3, [pc, #420] ; (14f04 <_dtoa_r+0x214>) - 14d60: 9a26 ldr r2, [sp, #152] ; 0x98 - 14d62: 6013 str r3, [r2, #0] - 14d64: 3b01 subs r3, #1 - 14d66: 9303 str r3, [sp, #12] - 14d68: 9803 ldr r0, [sp, #12] - 14d6a: b019 add sp, #100 ; 0x64 - 14d6c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 14d70: ab16 add r3, sp, #88 ; 0x58 - 14d72: 9301 str r3, [sp, #4] - 14d74: ab17 add r3, sp, #92 ; 0x5c - 14d76: 9300 str r3, [sp, #0] - 14d78: 4620 mov r0, r4 - 14d7a: e9dd 230a ldrd r2, r3, [sp, #40] ; 0x28 - 14d7e: f7ff fbcd bl 1451c <__d2b> - 14d82: ea5f 561a movs.w r6, sl, lsr #20 - 14d86: 4605 mov r5, r0 - 14d88: f040 8097 bne.w 14eba <_dtoa_r+0x1ca> - 14d8c: e9dd 7616 ldrd r7, r6, [sp, #88] ; 0x58 - 14d90: 443e add r6, r7 - 14d92: f206 4332 addw r3, r6, #1074 ; 0x432 - 14d96: 2b20 cmp r3, #32 - 14d98: f340 83a6 ble.w 154e8 <_dtoa_r+0x7f8> - 14d9c: f1c3 0340 rsb r3, r3, #64 ; 0x40 - 14da0: fa0a fa03 lsl.w sl, sl, r3 - 14da4: f206 4312 addw r3, r6, #1042 ; 0x412 - 14da8: fa28 f003 lsr.w r0, r8, r3 - 14dac: ea4a 0000 orr.w r0, sl, r0 - 14db0: f7fa faa6 bl f300 <__aeabi_ui2d> - 14db4: 2301 movs r3, #1 - 14db6: 3e01 subs r6, #1 - 14db8: f1a1 71f8 sub.w r1, r1, #32505856 ; 0x1f00000 - 14dbc: 930f str r3, [sp, #60] ; 0x3c - 14dbe: 4b52 ldr r3, [pc, #328] ; (14f08 <_dtoa_r+0x218>) - 14dc0: 2200 movs r2, #0 - 14dc2: f7fa f95f bl f084 <__aeabi_dsub> - 14dc6: a348 add r3, pc, #288 ; (adr r3, 14ee8 <_dtoa_r+0x1f8>) - 14dc8: e9d3 2300 ldrd r2, r3, [r3] - 14dcc: f7fa fb12 bl f3f4 <__aeabi_dmul> - 14dd0: a347 add r3, pc, #284 ; (adr r3, 14ef0 <_dtoa_r+0x200>) - 14dd2: e9d3 2300 ldrd r2, r3, [r3] - 14dd6: f7fa f957 bl f088 <__adddf3> - 14dda: 4680 mov r8, r0 - 14ddc: 4630 mov r0, r6 - 14dde: 4689 mov r9, r1 - 14de0: f7fa fa9e bl f320 <__aeabi_i2d> - 14de4: a344 add r3, pc, #272 ; (adr r3, 14ef8 <_dtoa_r+0x208>) - 14de6: e9d3 2300 ldrd r2, r3, [r3] - 14dea: f7fa fb03 bl f3f4 <__aeabi_dmul> - 14dee: 4602 mov r2, r0 - 14df0: 460b mov r3, r1 - 14df2: 4640 mov r0, r8 - 14df4: 4649 mov r1, r9 - 14df6: f7fa f947 bl f088 <__adddf3> - 14dfa: 4680 mov r8, r0 - 14dfc: 4689 mov r9, r1 - 14dfe: f7fa fda9 bl f954 <__aeabi_d2iz> - 14e02: 2200 movs r2, #0 - 14e04: 4683 mov fp, r0 - 14e06: 2300 movs r3, #0 - 14e08: 4640 mov r0, r8 - 14e0a: 4649 mov r1, r9 - 14e0c: f7fa fd64 bl f8d8 <__aeabi_dcmplt> - 14e10: 2800 cmp r0, #0 - 14e12: f040 8345 bne.w 154a0 <_dtoa_r+0x7b0> - 14e16: f1bb 0f16 cmp.w fp, #22 - 14e1a: f200 8334 bhi.w 15486 <_dtoa_r+0x796> - 14e1e: 4b3b ldr r3, [pc, #236] ; (14f0c <_dtoa_r+0x21c>) - 14e20: eb03 03cb add.w r3, r3, fp, lsl #3 - 14e24: e9d3 2300 ldrd r2, r3, [r3] - 14e28: e9dd 010a ldrd r0, r1, [sp, #40] ; 0x28 - 14e2c: f7fa fd54 bl f8d8 <__aeabi_dcmplt> - 14e30: 2800 cmp r0, #0 - 14e32: d071 beq.n 14f18 <_dtoa_r+0x228> - 14e34: 2300 movs r3, #0 - 14e36: 1bbf subs r7, r7, r6 - 14e38: 930e str r3, [sp, #56] ; 0x38 - 14e3a: 1e7b subs r3, r7, #1 - 14e3c: f10b 3bff add.w fp, fp, #4294967295 ; 0xffffffff - 14e40: 9306 str r3, [sp, #24] - 14e42: f100 8327 bmi.w 15494 <_dtoa_r+0x7a4> - 14e46: 2300 movs r3, #0 - 14e48: 9309 str r3, [sp, #36] ; 0x24 - 14e4a: f1bb 0f00 cmp.w fp, #0 - 14e4e: da6a bge.n 14f26 <_dtoa_r+0x236> - 14e50: 9b09 ldr r3, [sp, #36] ; 0x24 - 14e52: f8cd b01c str.w fp, [sp, #28] - 14e56: eba3 030b sub.w r3, r3, fp - 14e5a: 9309 str r3, [sp, #36] ; 0x24 - 14e5c: f1cb 0300 rsb r3, fp, #0 - 14e60: 930d str r3, [sp, #52] ; 0x34 - 14e62: 9b22 ldr r3, [sp, #136] ; 0x88 - 14e64: 2b09 cmp r3, #9 - 14e66: f04f 0b00 mov.w fp, #0 - 14e6a: d865 bhi.n 14f38 <_dtoa_r+0x248> - 14e6c: 2b05 cmp r3, #5 - 14e6e: f340 8339 ble.w 154e4 <_dtoa_r+0x7f4> - 14e72: 3b04 subs r3, #4 - 14e74: 9322 str r3, [sp, #136] ; 0x88 - 14e76: 2600 movs r6, #0 - 14e78: 9b22 ldr r3, [sp, #136] ; 0x88 - 14e7a: 3b02 subs r3, #2 - 14e7c: 2b03 cmp r3, #3 - 14e7e: f200 8667 bhi.w 15b50 <_dtoa_r+0xe60> - 14e82: e8df f013 tbh [pc, r3, lsl #1] - 14e86: 044e .short 0x044e - 14e88: 0442044b .word 0x0442044b - 14e8c: 0425 .short 0x0425 - 14e8e: 9a24 ldr r2, [sp, #144] ; 0x90 - 14e90: f3ca 0a13 ubfx sl, sl, #0, #20 - 14e94: f242 730f movw r3, #9999 ; 0x270f - 14e98: ea5a 0a08 orrs.w sl, sl, r8 - 14e9c: 6013 str r3, [r2, #0] - 14e9e: d11a bne.n 14ed6 <_dtoa_r+0x1e6> - 14ea0: 9b26 ldr r3, [sp, #152] ; 0x98 - 14ea2: 2b00 cmp r3, #0 - 14ea4: f000 8663 beq.w 15b6e <_dtoa_r+0xe7e> - 14ea8: 4b19 ldr r3, [pc, #100] ; (14f10 <_dtoa_r+0x220>) - 14eaa: 9303 str r3, [sp, #12] - 14eac: 3308 adds r3, #8 - 14eae: 9a26 ldr r2, [sp, #152] ; 0x98 - 14eb0: 9803 ldr r0, [sp, #12] - 14eb2: 6013 str r3, [r2, #0] - 14eb4: b019 add sp, #100 ; 0x64 - 14eb6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 14eba: e9dd 120a ldrd r1, r2, [sp, #40] ; 0x28 - 14ebe: f3c2 0313 ubfx r3, r2, #0, #20 - 14ec2: 4608 mov r0, r1 - 14ec4: f043 517f orr.w r1, r3, #1069547520 ; 0x3fc00000 - 14ec8: 970f str r7, [sp, #60] ; 0x3c - 14eca: f2a6 36ff subw r6, r6, #1023 ; 0x3ff - 14ece: 9f16 ldr r7, [sp, #88] ; 0x58 - 14ed0: f441 1140 orr.w r1, r1, #3145728 ; 0x300000 - 14ed4: e773 b.n 14dbe <_dtoa_r+0xce> - 14ed6: 9b26 ldr r3, [sp, #152] ; 0x98 - 14ed8: 2b00 cmp r3, #0 - 14eda: f040 83db bne.w 15694 <_dtoa_r+0x9a4> - 14ede: 4b0d ldr r3, [pc, #52] ; (14f14 <_dtoa_r+0x224>) - 14ee0: 9303 str r3, [sp, #12] - 14ee2: e741 b.n 14d68 <_dtoa_r+0x78> - 14ee4: f3af 8000 nop.w - 14ee8: 636f4361 .word 0x636f4361 - 14eec: 3fd287a7 .word 0x3fd287a7 - 14ef0: 8b60c8b3 .word 0x8b60c8b3 - 14ef4: 3fc68a28 .word 0x3fc68a28 - 14ef8: 509f79fb .word 0x509f79fb - 14efc: 3fd34413 .word 0x3fd34413 - 14f00: 7ff00000 .word 0x7ff00000 - 14f04: 0001860d .word 0x0001860d - 14f08: 3ff80000 .word 0x3ff80000 - 14f0c: 00018a18 .word 0x00018a18 - 14f10: 00018b2c .word 0x00018b2c - 14f14: 00018b38 .word 0x00018b38 - 14f18: 1bbf subs r7, r7, r6 - 14f1a: 1e7b subs r3, r7, #1 - 14f1c: 9306 str r3, [sp, #24] - 14f1e: f100 847e bmi.w 1581e <_dtoa_r+0xb2e> - 14f22: 900e str r0, [sp, #56] ; 0x38 - 14f24: 9009 str r0, [sp, #36] ; 0x24 - 14f26: 9b06 ldr r3, [sp, #24] - 14f28: 445b add r3, fp - 14f2a: e9cd 3b06 strd r3, fp, [sp, #24] - 14f2e: 2300 movs r3, #0 - 14f30: 930d str r3, [sp, #52] ; 0x34 - 14f32: 9b22 ldr r3, [sp, #136] ; 0x88 - 14f34: 2b09 cmp r3, #9 - 14f36: d999 bls.n 14e6c <_dtoa_r+0x17c> - 14f38: 2300 movs r3, #0 - 14f3a: e9cd 3322 strd r3, r3, [sp, #136] ; 0x88 - 14f3e: 2601 movs r6, #1 - 14f40: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 14f44: 960c str r6, [sp, #48] ; 0x30 - 14f46: 9308 str r3, [sp, #32] - 14f48: 9b08 ldr r3, [sp, #32] - 14f4a: 9312 str r3, [sp, #72] ; 0x48 - 14f4c: 2100 movs r1, #0 - 14f4e: 63e1 str r1, [r4, #60] ; 0x3c - 14f50: 4620 mov r0, r4 - 14f52: f7fe ff95 bl 13e80 <_Balloc> - 14f56: 9003 str r0, [sp, #12] - 14f58: 2800 cmp r0, #0 - 14f5a: f000 8601 beq.w 15b60 <_dtoa_r+0xe70> - 14f5e: 9b03 ldr r3, [sp, #12] - 14f60: 63a3 str r3, [r4, #56] ; 0x38 - 14f62: 9b08 ldr r3, [sp, #32] - 14f64: 2b0e cmp r3, #14 - 14f66: f200 8113 bhi.w 15190 <_dtoa_r+0x4a0> - 14f6a: 2e00 cmp r6, #0 - 14f6c: f000 8110 beq.w 15190 <_dtoa_r+0x4a0> - 14f70: 9907 ldr r1, [sp, #28] - 14f72: 2900 cmp r1, #0 - 14f74: f340 8455 ble.w 15822 <_dtoa_r+0xb32> - 14f78: 4bae ldr r3, [pc, #696] ; (15234 <_dtoa_r+0x544>) - 14f7a: f001 020f and.w r2, r1, #15 - 14f7e: eb03 03c2 add.w r3, r3, r2, lsl #3 - 14f82: ea4f 1821 mov.w r8, r1, asr #4 - 14f86: 05c9 lsls r1, r1, #23 - 14f88: e9d3 6700 ldrd r6, r7, [r3] - 14f8c: f140 8411 bpl.w 157b2 <_dtoa_r+0xac2> - 14f90: 4ba9 ldr r3, [pc, #676] ; (15238 <_dtoa_r+0x548>) - 14f92: e9dd 010a ldrd r0, r1, [sp, #40] ; 0x28 - 14f96: e9d3 2308 ldrd r2, r3, [r3, #32] - 14f9a: f7fa fb55 bl f648 <__aeabi_ddiv> - 14f9e: e9cd 0110 strd r0, r1, [sp, #64] ; 0x40 - 14fa2: f008 080f and.w r8, r8, #15 - 14fa6: f04f 0a03 mov.w sl, #3 - 14faa: f1b8 0f00 cmp.w r8, #0 - 14fae: d013 beq.n 14fd8 <_dtoa_r+0x2e8> - 14fb0: f8df 9284 ldr.w r9, [pc, #644] ; 15238 <_dtoa_r+0x548> - 14fb4: f018 0f01 tst.w r8, #1 - 14fb8: d009 beq.n 14fce <_dtoa_r+0x2de> - 14fba: 4630 mov r0, r6 - 14fbc: 4639 mov r1, r7 - 14fbe: e9d9 2300 ldrd r2, r3, [r9] - 14fc2: f7fa fa17 bl f3f4 <__aeabi_dmul> - 14fc6: f10a 0a01 add.w sl, sl, #1 - 14fca: 4606 mov r6, r0 - 14fcc: 460f mov r7, r1 - 14fce: ea5f 0868 movs.w r8, r8, asr #1 - 14fd2: f109 0908 add.w r9, r9, #8 - 14fd6: d1ed bne.n 14fb4 <_dtoa_r+0x2c4> - 14fd8: e9dd 0110 ldrd r0, r1, [sp, #64] ; 0x40 - 14fdc: 4632 mov r2, r6 - 14fde: 463b mov r3, r7 - 14fe0: f7fa fb32 bl f648 <__aeabi_ddiv> - 14fe4: 4680 mov r8, r0 - 14fe6: 4689 mov r9, r1 - 14fe8: 9b0e ldr r3, [sp, #56] ; 0x38 - 14fea: b143 cbz r3, 14ffe <_dtoa_r+0x30e> - 14fec: 4b93 ldr r3, [pc, #588] ; (1523c <_dtoa_r+0x54c>) - 14fee: 2200 movs r2, #0 - 14ff0: 4640 mov r0, r8 - 14ff2: 4649 mov r1, r9 - 14ff4: f7fa fc70 bl f8d8 <__aeabi_dcmplt> - 14ff8: 2800 cmp r0, #0 - 14ffa: f040 852a bne.w 15a52 <_dtoa_r+0xd62> - 14ffe: 4650 mov r0, sl - 15000: f7fa f98e bl f320 <__aeabi_i2d> - 15004: 4642 mov r2, r8 - 15006: 464b mov r3, r9 - 15008: f7fa f9f4 bl f3f4 <__aeabi_dmul> - 1500c: 4b8c ldr r3, [pc, #560] ; (15240 <_dtoa_r+0x550>) - 1500e: 2200 movs r2, #0 - 15010: f7fa f83a bl f088 <__adddf3> - 15014: f1a1 7350 sub.w r3, r1, #54525952 ; 0x3400000 - 15018: e9cd 0110 strd r0, r1, [sp, #64] ; 0x40 - 1501c: 9311 str r3, [sp, #68] ; 0x44 - 1501e: 9b08 ldr r3, [sp, #32] - 15020: 2b00 cmp r3, #0 - 15022: f000 8099 beq.w 15158 <_dtoa_r+0x468> - 15026: 9b07 ldr r3, [sp, #28] - 15028: 9314 str r3, [sp, #80] ; 0x50 - 1502a: 9b08 ldr r3, [sp, #32] - 1502c: 9313 str r3, [sp, #76] ; 0x4c - 1502e: 9b0c ldr r3, [sp, #48] ; 0x30 - 15030: 2b00 cmp r3, #0 - 15032: f000 84a5 beq.w 15980 <_dtoa_r+0xc90> - 15036: 9a13 ldr r2, [sp, #76] ; 0x4c - 15038: 4b7e ldr r3, [pc, #504] ; (15234 <_dtoa_r+0x544>) - 1503a: 4982 ldr r1, [pc, #520] ; (15244 <_dtoa_r+0x554>) - 1503c: 9e03 ldr r6, [sp, #12] - 1503e: eb03 03c2 add.w r3, r3, r2, lsl #3 - 15042: e953 2302 ldrd r2, r3, [r3, #-8] - 15046: 2000 movs r0, #0 - 15048: f7fa fafe bl f648 <__aeabi_ddiv> - 1504c: e9dd 2310 ldrd r2, r3, [sp, #64] ; 0x40 - 15050: f7fa f818 bl f084 <__aeabi_dsub> - 15054: e9cd 0110 strd r0, r1, [sp, #64] ; 0x40 - 15058: 4649 mov r1, r9 - 1505a: 4640 mov r0, r8 - 1505c: f7fa fc7a bl f954 <__aeabi_d2iz> - 15060: 4607 mov r7, r0 - 15062: f7fa f95d bl f320 <__aeabi_i2d> - 15066: 4602 mov r2, r0 - 15068: 460b mov r3, r1 - 1506a: 4640 mov r0, r8 - 1506c: 4649 mov r1, r9 - 1506e: f7fa f809 bl f084 <__aeabi_dsub> - 15072: 3730 adds r7, #48 ; 0x30 - 15074: 4680 mov r8, r0 - 15076: 4689 mov r9, r1 - 15078: 4602 mov r2, r0 - 1507a: 460b mov r3, r1 - 1507c: f806 7b01 strb.w r7, [r6], #1 - 15080: e9dd 0110 ldrd r0, r1, [sp, #64] ; 0x40 - 15084: f7fa fc46 bl f914 <__aeabi_dcmpgt> - 15088: 2800 cmp r0, #0 - 1508a: f040 8527 bne.w 15adc <_dtoa_r+0xdec> - 1508e: f8cd b054 str.w fp, [sp, #84] ; 0x54 - 15092: 2700 movs r7, #0 - 15094: e9dd ab10 ldrd sl, fp, [sp, #64] ; 0x40 - 15098: 9510 str r5, [sp, #64] ; 0x40 - 1509a: 9d13 ldr r5, [sp, #76] ; 0x4c - 1509c: 9413 str r4, [sp, #76] ; 0x4c - 1509e: e02a b.n 150f6 <_dtoa_r+0x406> - 150a0: 3701 adds r7, #1 - 150a2: 42af cmp r7, r5 - 150a4: f280 852a bge.w 15afc <_dtoa_r+0xe0c> - 150a8: 4b67 ldr r3, [pc, #412] ; (15248 <_dtoa_r+0x558>) - 150aa: 4650 mov r0, sl - 150ac: 4659 mov r1, fp - 150ae: 2200 movs r2, #0 - 150b0: f7fa f9a0 bl f3f4 <__aeabi_dmul> - 150b4: 4b64 ldr r3, [pc, #400] ; (15248 <_dtoa_r+0x558>) - 150b6: 2200 movs r2, #0 - 150b8: 4682 mov sl, r0 - 150ba: 468b mov fp, r1 - 150bc: 4640 mov r0, r8 - 150be: 4649 mov r1, r9 - 150c0: f7fa f998 bl f3f4 <__aeabi_dmul> - 150c4: 4689 mov r9, r1 - 150c6: 4680 mov r8, r0 - 150c8: f7fa fc44 bl f954 <__aeabi_d2iz> - 150cc: 4604 mov r4, r0 - 150ce: f7fa f927 bl f320 <__aeabi_i2d> - 150d2: 4602 mov r2, r0 - 150d4: 460b mov r3, r1 - 150d6: 4640 mov r0, r8 - 150d8: 4649 mov r1, r9 - 150da: f7f9 ffd3 bl f084 <__aeabi_dsub> - 150de: 3430 adds r4, #48 ; 0x30 - 150e0: f806 4b01 strb.w r4, [r6], #1 - 150e4: 4652 mov r2, sl - 150e6: 465b mov r3, fp - 150e8: 4680 mov r8, r0 - 150ea: 4689 mov r9, r1 - 150ec: f7fa fbf4 bl f8d8 <__aeabi_dcmplt> - 150f0: 2800 cmp r0, #0 - 150f2: f040 84f1 bne.w 15ad8 <_dtoa_r+0xde8> - 150f6: 4642 mov r2, r8 - 150f8: 464b mov r3, r9 - 150fa: 4950 ldr r1, [pc, #320] ; (1523c <_dtoa_r+0x54c>) - 150fc: 2000 movs r0, #0 - 150fe: f7f9 ffc1 bl f084 <__aeabi_dsub> - 15102: 4652 mov r2, sl - 15104: 465b mov r3, fp - 15106: f7fa fbe7 bl f8d8 <__aeabi_dcmplt> - 1510a: 2800 cmp r0, #0 - 1510c: d0c8 beq.n 150a0 <_dtoa_r+0x3b0> - 1510e: e9dd 4313 ldrd r4, r3, [sp, #76] ; 0x4c - 15112: 9d10 ldr r5, [sp, #64] ; 0x40 - 15114: 9a03 ldr r2, [sp, #12] - 15116: 9307 str r3, [sp, #28] - 15118: e002 b.n 15120 <_dtoa_r+0x430> - 1511a: 42b2 cmp r2, r6 - 1511c: f000 84c6 beq.w 15aac <_dtoa_r+0xdbc> - 15120: 46b1 mov r9, r6 - 15122: f816 3d01 ldrb.w r3, [r6, #-1]! - 15126: 2b39 cmp r3, #57 ; 0x39 - 15128: d0f7 beq.n 1511a <_dtoa_r+0x42a> - 1512a: 3301 adds r3, #1 - 1512c: b2db uxtb r3, r3 - 1512e: 7033 strb r3, [r6, #0] - 15130: 9b07 ldr r3, [sp, #28] - 15132: 3301 adds r3, #1 - 15134: 9307 str r3, [sp, #28] - 15136: e192 b.n 1545e <_dtoa_r+0x76e> - 15138: 4650 mov r0, sl - 1513a: f7fa f8f1 bl f320 <__aeabi_i2d> - 1513e: 4642 mov r2, r8 - 15140: 464b mov r3, r9 - 15142: f7fa f957 bl f3f4 <__aeabi_dmul> - 15146: 4b3e ldr r3, [pc, #248] ; (15240 <_dtoa_r+0x550>) - 15148: 2200 movs r2, #0 - 1514a: f7f9 ff9d bl f088 <__adddf3> - 1514e: f1a1 7350 sub.w r3, r1, #54525952 ; 0x3400000 - 15152: e9cd 0110 strd r0, r1, [sp, #64] ; 0x40 - 15156: 9311 str r3, [sp, #68] ; 0x44 - 15158: 4b3c ldr r3, [pc, #240] ; (1524c <_dtoa_r+0x55c>) - 1515a: 4640 mov r0, r8 - 1515c: 4649 mov r1, r9 - 1515e: 2200 movs r2, #0 - 15160: f7f9 ff90 bl f084 <__aeabi_dsub> - 15164: e9dd 8910 ldrd r8, r9, [sp, #64] ; 0x40 - 15168: 4642 mov r2, r8 - 1516a: 464b mov r3, r9 - 1516c: 4606 mov r6, r0 - 1516e: 460f mov r7, r1 - 15170: f7fa fbd0 bl f914 <__aeabi_dcmpgt> - 15174: 4682 mov sl, r0 - 15176: 2800 cmp r0, #0 - 15178: f040 84a8 bne.w 15acc <_dtoa_r+0xddc> - 1517c: 4642 mov r2, r8 - 1517e: f109 4300 add.w r3, r9, #2147483648 ; 0x80000000 - 15182: 4630 mov r0, r6 - 15184: 4639 mov r1, r7 - 15186: f7fa fba7 bl f8d8 <__aeabi_dcmplt> - 1518a: 2800 cmp r0, #0 - 1518c: f040 8345 bne.w 1581a <_dtoa_r+0xb2a> - 15190: 9b17 ldr r3, [sp, #92] ; 0x5c - 15192: 2b00 cmp r3, #0 - 15194: f2c0 808c blt.w 152b0 <_dtoa_r+0x5c0> - 15198: 9a07 ldr r2, [sp, #28] - 1519a: 2a0e cmp r2, #14 - 1519c: f300 8088 bgt.w 152b0 <_dtoa_r+0x5c0> - 151a0: 4b24 ldr r3, [pc, #144] ; (15234 <_dtoa_r+0x544>) - 151a2: eb03 03c2 add.w r3, r3, r2, lsl #3 - 151a6: e9d3 ab00 ldrd sl, fp, [r3] - 151aa: 9b23 ldr r3, [sp, #140] ; 0x8c - 151ac: 2b00 cmp r3, #0 - 151ae: da1b bge.n 151e8 <_dtoa_r+0x4f8> - 151b0: 9b08 ldr r3, [sp, #32] - 151b2: 2b00 cmp r3, #0 - 151b4: dc18 bgt.n 151e8 <_dtoa_r+0x4f8> - 151b6: f040 832e bne.w 15816 <_dtoa_r+0xb26> - 151ba: 4b24 ldr r3, [pc, #144] ; (1524c <_dtoa_r+0x55c>) - 151bc: 4650 mov r0, sl - 151be: 2200 movs r2, #0 - 151c0: 4659 mov r1, fp - 151c2: f7fa f917 bl f3f4 <__aeabi_dmul> - 151c6: 4602 mov r2, r0 - 151c8: 460b mov r3, r1 - 151ca: e9dd 010a ldrd r0, r1, [sp, #40] ; 0x28 - 151ce: f7fa fb8d bl f8ec <__aeabi_dcmple> - 151d2: f8dd a020 ldr.w sl, [sp, #32] - 151d6: 4656 mov r6, sl - 151d8: 2800 cmp r0, #0 - 151da: f000 82b9 beq.w 15750 <_dtoa_r+0xa60> - 151de: 9b23 ldr r3, [sp, #140] ; 0x8c - 151e0: f8dd 800c ldr.w r8, [sp, #12] - 151e4: 43df mvns r7, r3 - 151e6: e2bb b.n 15760 <_dtoa_r+0xa70> - 151e8: e9dd 780a ldrd r7, r8, [sp, #40] ; 0x28 - 151ec: 4652 mov r2, sl - 151ee: 465b mov r3, fp - 151f0: 4638 mov r0, r7 - 151f2: 4641 mov r1, r8 - 151f4: f7fa fa28 bl f648 <__aeabi_ddiv> - 151f8: f7fa fbac bl f954 <__aeabi_d2iz> - 151fc: 4681 mov r9, r0 - 151fe: 9009 str r0, [sp, #36] ; 0x24 - 15200: f7fa f88e bl f320 <__aeabi_i2d> - 15204: 4652 mov r2, sl - 15206: 465b mov r3, fp - 15208: f7fa f8f4 bl f3f4 <__aeabi_dmul> - 1520c: 9e03 ldr r6, [sp, #12] - 1520e: 460b mov r3, r1 - 15210: 4602 mov r2, r0 - 15212: 4641 mov r1, r8 - 15214: 4638 mov r0, r7 - 15216: f7f9 ff35 bl f084 <__aeabi_dsub> - 1521a: f109 0330 add.w r3, r9, #48 ; 0x30 - 1521e: f806 3b01 strb.w r3, [r6], #1 - 15222: 9b08 ldr r3, [sp, #32] - 15224: 2b01 cmp r3, #1 - 15226: f000 835c beq.w 158e2 <_dtoa_r+0xbf2> - 1522a: 9406 str r4, [sp, #24] - 1522c: 2701 movs r7, #1 - 1522e: 9504 str r5, [sp, #16] - 15230: 461c mov r4, r3 - 15232: e02a b.n 1528a <_dtoa_r+0x59a> - 15234: 00018a18 .word 0x00018a18 - 15238: 000189f0 .word 0x000189f0 - 1523c: 3ff00000 .word 0x3ff00000 - 15240: 401c0000 .word 0x401c0000 - 15244: 3fe00000 .word 0x3fe00000 - 15248: 40240000 .word 0x40240000 - 1524c: 40140000 .word 0x40140000 - 15250: 4652 mov r2, sl - 15252: 465b mov r3, fp - 15254: 4640 mov r0, r8 - 15256: 4649 mov r1, r9 - 15258: f7fa f9f6 bl f648 <__aeabi_ddiv> - 1525c: f7fa fb7a bl f954 <__aeabi_d2iz> - 15260: 4605 mov r5, r0 - 15262: f7fa f85d bl f320 <__aeabi_i2d> - 15266: 4652 mov r2, sl - 15268: 465b mov r3, fp - 1526a: f7fa f8c3 bl f3f4 <__aeabi_dmul> - 1526e: 3701 adds r7, #1 - 15270: 460b mov r3, r1 - 15272: 4602 mov r2, r0 - 15274: 4649 mov r1, r9 - 15276: 4640 mov r0, r8 - 15278: f7f9 ff04 bl f084 <__aeabi_dsub> - 1527c: f105 0330 add.w r3, r5, #48 ; 0x30 - 15280: 42a7 cmp r7, r4 - 15282: f806 3b01 strb.w r3, [r6], #1 - 15286: f000 8329 beq.w 158dc <_dtoa_r+0xbec> - 1528a: 4ba5 ldr r3, [pc, #660] ; (15520 <_dtoa_r+0x830>) - 1528c: 2200 movs r2, #0 - 1528e: f7fa f8b1 bl f3f4 <__aeabi_dmul> - 15292: 2200 movs r2, #0 - 15294: 2300 movs r3, #0 - 15296: 4680 mov r8, r0 - 15298: 4689 mov r9, r1 - 1529a: f7fa fb13 bl f8c4 <__aeabi_dcmpeq> - 1529e: 2800 cmp r0, #0 - 152a0: d0d6 beq.n 15250 <_dtoa_r+0x560> - 152a2: 9d04 ldr r5, [sp, #16] - 152a4: 9c06 ldr r4, [sp, #24] - 152a6: 9b07 ldr r3, [sp, #28] - 152a8: 3301 adds r3, #1 - 152aa: 9307 str r3, [sp, #28] - 152ac: 46b1 mov r9, r6 - 152ae: e0d6 b.n 1545e <_dtoa_r+0x76e> - 152b0: 9a0c ldr r2, [sp, #48] ; 0x30 - 152b2: 2a00 cmp r2, #0 - 152b4: f000 8107 beq.w 154c6 <_dtoa_r+0x7d6> - 152b8: 9a22 ldr r2, [sp, #136] ; 0x88 - 152ba: 2a01 cmp r2, #1 - 152bc: f340 8294 ble.w 157e8 <_dtoa_r+0xaf8> - 152c0: 9b08 ldr r3, [sp, #32] - 152c2: f103 38ff add.w r8, r3, #4294967295 ; 0xffffffff - 152c6: 9b0d ldr r3, [sp, #52] ; 0x34 - 152c8: 4543 cmp r3, r8 - 152ca: f280 825e bge.w 1578a <_dtoa_r+0xa9a> - 152ce: 9b0d ldr r3, [sp, #52] ; 0x34 - 152d0: f8cd 8034 str.w r8, [sp, #52] ; 0x34 - 152d4: eba8 0303 sub.w r3, r8, r3 - 152d8: 449b add fp, r3 - 152da: f04f 0800 mov.w r8, #0 - 152de: 9b08 ldr r3, [sp, #32] - 152e0: 2b00 cmp r3, #0 - 152e2: f2c0 832f blt.w 15944 <_dtoa_r+0xc54> - 152e6: 9a06 ldr r2, [sp, #24] - 152e8: 441a add r2, r3 - 152ea: 9206 str r2, [sp, #24] - 152ec: 9a09 ldr r2, [sp, #36] ; 0x24 - 152ee: 4617 mov r7, r2 - 152f0: 441a add r2, r3 - 152f2: 9209 str r2, [sp, #36] ; 0x24 - 152f4: 2101 movs r1, #1 - 152f6: 4620 mov r0, r4 - 152f8: f7fe fe92 bl 14020 <__i2b> - 152fc: 4606 mov r6, r0 - 152fe: b167 cbz r7, 1531a <_dtoa_r+0x62a> - 15300: 9906 ldr r1, [sp, #24] - 15302: 2900 cmp r1, #0 - 15304: 460b mov r3, r1 - 15306: dd08 ble.n 1531a <_dtoa_r+0x62a> - 15308: 9a09 ldr r2, [sp, #36] ; 0x24 - 1530a: 42b9 cmp r1, r7 - 1530c: bfa8 it ge - 1530e: 463b movge r3, r7 - 15310: 1ad2 subs r2, r2, r3 - 15312: 1aff subs r7, r7, r3 - 15314: 1acb subs r3, r1, r3 - 15316: 9209 str r2, [sp, #36] ; 0x24 - 15318: 9306 str r3, [sp, #24] - 1531a: 9b0d ldr r3, [sp, #52] ; 0x34 - 1531c: b163 cbz r3, 15338 <_dtoa_r+0x648> - 1531e: 9b0c ldr r3, [sp, #48] ; 0x30 - 15320: 2b00 cmp r3, #0 - 15322: f000 82b6 beq.w 15892 <_dtoa_r+0xba2> - 15326: f1b8 0f00 cmp.w r8, #0 - 1532a: f300 8231 bgt.w 15790 <_dtoa_r+0xaa0> - 1532e: 9b0d ldr r3, [sp, #52] ; 0x34 - 15330: ebb3 0208 subs.w r2, r3, r8 - 15334: f040 8316 bne.w 15964 <_dtoa_r+0xc74> - 15338: 2101 movs r1, #1 - 1533a: 4620 mov r0, r4 - 1533c: f7fe fe70 bl 14020 <__i2b> - 15340: f1bb 0f00 cmp.w fp, #0 - 15344: 4682 mov sl, r0 - 15346: f300 80d4 bgt.w 154f2 <_dtoa_r+0x802> - 1534a: 9b22 ldr r3, [sp, #136] ; 0x88 - 1534c: 2b01 cmp r3, #1 - 1534e: f340 81a7 ble.w 156a0 <_dtoa_r+0x9b0> - 15352: f04f 0900 mov.w r9, #0 - 15356: 2001 movs r0, #1 - 15358: f1bb 0f00 cmp.w fp, #0 - 1535c: f040 80d5 bne.w 1550a <_dtoa_r+0x81a> - 15360: 9b06 ldr r3, [sp, #24] - 15362: 4418 add r0, r3 - 15364: f010 001f ands.w r0, r0, #31 - 15368: f000 8198 beq.w 1569c <_dtoa_r+0x9ac> - 1536c: f1c0 0320 rsb r3, r0, #32 - 15370: 2b04 cmp r3, #4 - 15372: f300 80ad bgt.w 154d0 <_dtoa_r+0x7e0> - 15376: f040 8224 bne.w 157c2 <_dtoa_r+0xad2> - 1537a: 9b09 ldr r3, [sp, #36] ; 0x24 - 1537c: 2b00 cmp r3, #0 - 1537e: dd05 ble.n 1538c <_dtoa_r+0x69c> - 15380: 4629 mov r1, r5 - 15382: 461a mov r2, r3 - 15384: 4620 mov r0, r4 - 15386: f7fe ff87 bl 14298 <__lshift> - 1538a: 4605 mov r5, r0 - 1538c: 9b06 ldr r3, [sp, #24] - 1538e: 2b00 cmp r3, #0 - 15390: dd05 ble.n 1539e <_dtoa_r+0x6ae> - 15392: 4651 mov r1, sl - 15394: 461a mov r2, r3 - 15396: 4620 mov r0, r4 - 15398: f7fe ff7e bl 14298 <__lshift> - 1539c: 4682 mov sl, r0 - 1539e: 9b0e ldr r3, [sp, #56] ; 0x38 - 153a0: 2b00 cmp r3, #0 - 153a2: f040 815c bne.w 1565e <_dtoa_r+0x96e> - 153a6: 9b08 ldr r3, [sp, #32] - 153a8: 2b00 cmp r3, #0 - 153aa: f340 8143 ble.w 15634 <_dtoa_r+0x944> - 153ae: 9b0c ldr r3, [sp, #48] ; 0x30 - 153b0: 2b00 cmp r3, #0 - 153b2: f040 80c6 bne.w 15542 <_dtoa_r+0x852> - 153b6: 9b07 ldr r3, [sp, #28] - 153b8: 3301 adds r3, #1 - 153ba: 9307 str r3, [sp, #28] - 153bc: f8dd 800c ldr.w r8, [sp, #12] - 153c0: f8dd 9020 ldr.w r9, [sp, #32] - 153c4: 2701 movs r7, #1 - 153c6: e007 b.n 153d8 <_dtoa_r+0x6e8> - 153c8: 4629 mov r1, r5 - 153ca: 2300 movs r3, #0 - 153cc: 220a movs r2, #10 - 153ce: 4620 mov r0, r4 - 153d0: f7fe fd86 bl 13ee0 <__multadd> - 153d4: 3701 adds r7, #1 - 153d6: 4605 mov r5, r0 - 153d8: 4651 mov r1, sl - 153da: 4628 mov r0, r5 - 153dc: f7ff fbf2 bl 14bc4 - 153e0: 45b9 cmp r9, r7 - 153e2: f100 0330 add.w r3, r0, #48 ; 0x30 - 153e6: f808 3b01 strb.w r3, [r8], #1 - 153ea: dced bgt.n 153c8 <_dtoa_r+0x6d8> - 153ec: 9a08 ldr r2, [sp, #32] - 153ee: 2a00 cmp r2, #0 - 153f0: bfc8 it gt - 153f2: 4693 movgt fp, r2 - 153f4: 9a03 ldr r2, [sp, #12] - 153f6: bfd8 it le - 153f8: f04f 0b01 movle.w fp, #1 - 153fc: 4493 add fp, r2 - 153fe: 2700 movs r7, #0 - 15400: 4629 mov r1, r5 - 15402: 2201 movs r2, #1 - 15404: 4620 mov r0, r4 - 15406: 9304 str r3, [sp, #16] - 15408: f7fe ff46 bl 14298 <__lshift> - 1540c: 4651 mov r1, sl - 1540e: 4605 mov r5, r0 - 15410: f7fe ffba bl 14388 <__mcmp> - 15414: 2800 cmp r0, #0 - 15416: f340 81dc ble.w 157d2 <_dtoa_r+0xae2> - 1541a: f81b 3c01 ldrb.w r3, [fp, #-1] - 1541e: 9a03 ldr r2, [sp, #12] - 15420: f10b 3bff add.w fp, fp, #4294967295 ; 0xffffffff - 15424: e004 b.n 15430 <_dtoa_r+0x740> - 15426: 455a cmp r2, fp - 15428: f000 81ee beq.w 15808 <_dtoa_r+0xb18> - 1542c: f81b 3d01 ldrb.w r3, [fp, #-1]! - 15430: 2b39 cmp r3, #57 ; 0x39 - 15432: f10b 0901 add.w r9, fp, #1 - 15436: d0f6 beq.n 15426 <_dtoa_r+0x736> - 15438: 3301 adds r3, #1 - 1543a: f88b 3000 strb.w r3, [fp] - 1543e: 4651 mov r1, sl - 15440: 4620 mov r0, r4 - 15442: f7fe fd43 bl 13ecc <_Bfree> - 15446: b156 cbz r6, 1545e <_dtoa_r+0x76e> - 15448: b12f cbz r7, 15456 <_dtoa_r+0x766> - 1544a: 42b7 cmp r7, r6 - 1544c: d003 beq.n 15456 <_dtoa_r+0x766> - 1544e: 4639 mov r1, r7 - 15450: 4620 mov r0, r4 - 15452: f7fe fd3b bl 13ecc <_Bfree> - 15456: 4631 mov r1, r6 - 15458: 4620 mov r0, r4 - 1545a: f7fe fd37 bl 13ecc <_Bfree> - 1545e: 4629 mov r1, r5 - 15460: 4620 mov r0, r4 - 15462: f7fe fd33 bl 13ecc <_Bfree> - 15466: 2300 movs r3, #0 - 15468: f889 3000 strb.w r3, [r9] - 1546c: 9b24 ldr r3, [sp, #144] ; 0x90 - 1546e: 9a07 ldr r2, [sp, #28] - 15470: 601a str r2, [r3, #0] - 15472: 9b26 ldr r3, [sp, #152] ; 0x98 - 15474: 2b00 cmp r3, #0 - 15476: f43f ac77 beq.w 14d68 <_dtoa_r+0x78> - 1547a: 9803 ldr r0, [sp, #12] - 1547c: f8c3 9000 str.w r9, [r3] - 15480: b019 add sp, #100 ; 0x64 - 15482: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 15486: 2301 movs r3, #1 - 15488: 1bbf subs r7, r7, r6 - 1548a: 930e str r3, [sp, #56] ; 0x38 - 1548c: 1e7b subs r3, r7, #1 - 1548e: 9306 str r3, [sp, #24] - 15490: f57f acd9 bpl.w 14e46 <_dtoa_r+0x156> - 15494: f1c7 0301 rsb r3, r7, #1 - 15498: 9309 str r3, [sp, #36] ; 0x24 - 1549a: 2300 movs r3, #0 - 1549c: 9306 str r3, [sp, #24] - 1549e: e4d4 b.n 14e4a <_dtoa_r+0x15a> - 154a0: 4658 mov r0, fp - 154a2: f7f9 ff3d bl f320 <__aeabi_i2d> - 154a6: 4642 mov r2, r8 - 154a8: 464b mov r3, r9 - 154aa: f7fa fa0b bl f8c4 <__aeabi_dcmpeq> - 154ae: 2800 cmp r0, #0 - 154b0: f47f acb1 bne.w 14e16 <_dtoa_r+0x126> - 154b4: f10b 3bff add.w fp, fp, #4294967295 ; 0xffffffff - 154b8: e4ad b.n 14e16 <_dtoa_r+0x126> - 154ba: 4b1a ldr r3, [pc, #104] ; (15524 <_dtoa_r+0x834>) - 154bc: 9303 str r3, [sp, #12] - 154be: 9803 ldr r0, [sp, #12] - 154c0: b019 add sp, #100 ; 0x64 - 154c2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 154c6: f8dd 8034 ldr.w r8, [sp, #52] ; 0x34 - 154ca: 9f09 ldr r7, [sp, #36] ; 0x24 - 154cc: 9e0c ldr r6, [sp, #48] ; 0x30 - 154ce: e716 b.n 152fe <_dtoa_r+0x60e> - 154d0: f1c0 001c rsb r0, r0, #28 - 154d4: 9b09 ldr r3, [sp, #36] ; 0x24 - 154d6: 4403 add r3, r0 - 154d8: 9309 str r3, [sp, #36] ; 0x24 - 154da: 9b06 ldr r3, [sp, #24] - 154dc: 4403 add r3, r0 - 154de: 4407 add r7, r0 - 154e0: 9306 str r3, [sp, #24] - 154e2: e74a b.n 1537a <_dtoa_r+0x68a> - 154e4: 2601 movs r6, #1 - 154e6: e4c7 b.n 14e78 <_dtoa_r+0x188> - 154e8: f1c3 0320 rsb r3, r3, #32 - 154ec: fa08 f003 lsl.w r0, r8, r3 - 154f0: e45e b.n 14db0 <_dtoa_r+0xc0> - 154f2: 4601 mov r1, r0 - 154f4: 465a mov r2, fp - 154f6: 4620 mov r0, r4 - 154f8: f7fe fe6e bl 141d8 <__pow5mult> - 154fc: 9b22 ldr r3, [sp, #136] ; 0x88 - 154fe: 2b01 cmp r3, #1 - 15500: 4682 mov sl, r0 - 15502: f340 81ba ble.w 1587a <_dtoa_r+0xb8a> - 15506: f04f 0900 mov.w r9, #0 - 1550a: f8da 3010 ldr.w r3, [sl, #16] - 1550e: eb0a 0383 add.w r3, sl, r3, lsl #2 - 15512: 6918 ldr r0, [r3, #16] - 15514: f7fe fd34 bl 13f80 <__hi0bits> - 15518: f1c0 0020 rsb r0, r0, #32 - 1551c: e720 b.n 15360 <_dtoa_r+0x670> - 1551e: bf00 nop - 15520: 40240000 .word 0x40240000 - 15524: 0001860c .word 0x0001860c - 15528: 4631 mov r1, r6 - 1552a: 2300 movs r3, #0 - 1552c: 220a movs r2, #10 - 1552e: 4620 mov r0, r4 - 15530: f7fe fcd6 bl 13ee0 <__multadd> - 15534: 9b12 ldr r3, [sp, #72] ; 0x48 - 15536: 2b00 cmp r3, #0 - 15538: 4606 mov r6, r0 - 1553a: f340 82f3 ble.w 15b24 <_dtoa_r+0xe34> - 1553e: e9cd 8307 strd r8, r3, [sp, #28] - 15542: 2f00 cmp r7, #0 - 15544: f300 811a bgt.w 1577c <_dtoa_r+0xa8c> - 15548: f1b9 0f00 cmp.w r9, #0 - 1554c: f040 81e3 bne.w 15916 <_dtoa_r+0xc26> - 15550: 46b0 mov r8, r6 - 15552: 9b04 ldr r3, [sp, #16] - 15554: 9f03 ldr r7, [sp, #12] - 15556: 9908 ldr r1, [sp, #32] - 15558: f003 0201 and.w r2, r3, #1 - 1555c: 1e7b subs r3, r7, #1 - 1555e: 4419 add r1, r3 - 15560: 9b22 ldr r3, [sp, #136] ; 0x88 - 15562: 920c str r2, [sp, #48] ; 0x30 - 15564: 4313 orrs r3, r2 - 15566: 9109 str r1, [sp, #36] ; 0x24 - 15568: 930a str r3, [sp, #40] ; 0x28 - 1556a: 4651 mov r1, sl - 1556c: 4628 mov r0, r5 - 1556e: f7ff fb29 bl 14bc4 - 15572: 4631 mov r1, r6 - 15574: 4683 mov fp, r0 - 15576: 4628 mov r0, r5 - 15578: f7fe ff06 bl 14388 <__mcmp> - 1557c: 4642 mov r2, r8 - 1557e: 4651 mov r1, sl - 15580: 4681 mov r9, r0 - 15582: 4620 mov r0, r4 - 15584: f7fe ff20 bl 143c8 <__mdiff> - 15588: 68c2 ldr r2, [r0, #12] - 1558a: 4601 mov r1, r0 - 1558c: f10b 0330 add.w r3, fp, #48 ; 0x30 - 15590: 2a00 cmp r2, #0 - 15592: d142 bne.n 1561a <_dtoa_r+0x92a> - 15594: 9006 str r0, [sp, #24] - 15596: 4628 mov r0, r5 - 15598: 9308 str r3, [sp, #32] - 1559a: f7fe fef5 bl 14388 <__mcmp> - 1559e: 9906 ldr r1, [sp, #24] - 155a0: 9004 str r0, [sp, #16] - 155a2: 4620 mov r0, r4 - 155a4: f7fe fc92 bl 13ecc <_Bfree> - 155a8: 9a04 ldr r2, [sp, #16] - 155aa: 9b08 ldr r3, [sp, #32] - 155ac: b91a cbnz r2, 155b6 <_dtoa_r+0x8c6> - 155ae: 990a ldr r1, [sp, #40] ; 0x28 - 155b0: 2900 cmp r1, #0 - 155b2: f000 82a9 beq.w 15b08 <_dtoa_r+0xe18> - 155b6: f1b9 0f00 cmp.w r9, #0 - 155ba: f2c0 8171 blt.w 158a0 <_dtoa_r+0xbb0> - 155be: 9922 ldr r1, [sp, #136] ; 0x88 - 155c0: ea49 0901 orr.w r9, r9, r1 - 155c4: 990c ldr r1, [sp, #48] ; 0x30 - 155c6: ea51 0909 orrs.w r9, r1, r9 - 155ca: f000 8169 beq.w 158a0 <_dtoa_r+0xbb0> - 155ce: 2a00 cmp r2, #0 - 155d0: f300 81bc bgt.w 1594c <_dtoa_r+0xc5c> - 155d4: 9a09 ldr r2, [sp, #36] ; 0x24 - 155d6: 703b strb r3, [r7, #0] - 155d8: f107 0901 add.w r9, r7, #1 - 155dc: 4297 cmp r7, r2 - 155de: 46cb mov fp, r9 - 155e0: f000 81ba beq.w 15958 <_dtoa_r+0xc68> - 155e4: 4629 mov r1, r5 - 155e6: 2300 movs r3, #0 - 155e8: 220a movs r2, #10 - 155ea: 4620 mov r0, r4 - 155ec: f7fe fc78 bl 13ee0 <__multadd> - 155f0: 4546 cmp r6, r8 - 155f2: 4605 mov r5, r0 - 155f4: 4631 mov r1, r6 - 155f6: f04f 0300 mov.w r3, #0 - 155fa: f04f 020a mov.w r2, #10 - 155fe: 4620 mov r0, r4 - 15600: d012 beq.n 15628 <_dtoa_r+0x938> - 15602: f7fe fc6d bl 13ee0 <__multadd> - 15606: 4641 mov r1, r8 - 15608: 4606 mov r6, r0 - 1560a: 2300 movs r3, #0 - 1560c: 220a movs r2, #10 - 1560e: 4620 mov r0, r4 - 15610: f7fe fc66 bl 13ee0 <__multadd> - 15614: 464f mov r7, r9 - 15616: 4680 mov r8, r0 - 15618: e7a7 b.n 1556a <_dtoa_r+0x87a> - 1561a: 4620 mov r0, r4 - 1561c: 9304 str r3, [sp, #16] - 1561e: f7fe fc55 bl 13ecc <_Bfree> - 15622: 9b04 ldr r3, [sp, #16] - 15624: 2201 movs r2, #1 - 15626: e7c6 b.n 155b6 <_dtoa_r+0x8c6> - 15628: f7fe fc5a bl 13ee0 <__multadd> - 1562c: 464f mov r7, r9 - 1562e: 4606 mov r6, r0 - 15630: 4680 mov r8, r0 - 15632: e79a b.n 1556a <_dtoa_r+0x87a> - 15634: 9b22 ldr r3, [sp, #136] ; 0x88 - 15636: 2b02 cmp r3, #2 - 15638: dc79 bgt.n 1572e <_dtoa_r+0xa3e> - 1563a: 9b0c ldr r3, [sp, #48] ; 0x30 - 1563c: 2b00 cmp r3, #0 - 1563e: d180 bne.n 15542 <_dtoa_r+0x852> - 15640: 9b07 ldr r3, [sp, #28] - 15642: 4651 mov r1, sl - 15644: 3301 adds r3, #1 - 15646: 4628 mov r0, r5 - 15648: 9307 str r3, [sp, #28] - 1564a: f7ff fabb bl 14bc4 - 1564e: f8dd b00c ldr.w fp, [sp, #12] - 15652: f100 0330 add.w r3, r0, #48 ; 0x30 - 15656: f80b 3b01 strb.w r3, [fp], #1 - 1565a: 2700 movs r7, #0 - 1565c: e6d0 b.n 15400 <_dtoa_r+0x710> - 1565e: 4651 mov r1, sl - 15660: 4628 mov r0, r5 - 15662: f7fe fe91 bl 14388 <__mcmp> - 15666: 2800 cmp r0, #0 - 15668: f6bf ae9d bge.w 153a6 <_dtoa_r+0x6b6> - 1566c: 4629 mov r1, r5 - 1566e: 2300 movs r3, #0 - 15670: 220a movs r2, #10 - 15672: 4620 mov r0, r4 - 15674: f7fe fc34 bl 13ee0 <__multadd> - 15678: 9b07 ldr r3, [sp, #28] - 1567a: f103 38ff add.w r8, r3, #4294967295 ; 0xffffffff - 1567e: 9b0c ldr r3, [sp, #48] ; 0x30 - 15680: 4605 mov r5, r0 - 15682: 2b00 cmp r3, #0 - 15684: f47f af50 bne.w 15528 <_dtoa_r+0x838> - 15688: 9b12 ldr r3, [sp, #72] ; 0x48 - 1568a: 2b00 cmp r3, #0 - 1568c: f340 8243 ble.w 15b16 <_dtoa_r+0xe26> - 15690: 9308 str r3, [sp, #32] - 15692: e693 b.n 153bc <_dtoa_r+0x6cc> - 15694: 4bb6 ldr r3, [pc, #728] ; (15970 <_dtoa_r+0xc80>) - 15696: 9303 str r3, [sp, #12] - 15698: 3303 adds r3, #3 - 1569a: e408 b.n 14eae <_dtoa_r+0x1be> - 1569c: 201c movs r0, #28 - 1569e: e719 b.n 154d4 <_dtoa_r+0x7e4> - 156a0: e9dd 1204 ldrd r1, r2, [sp, #16] - 156a4: 2900 cmp r1, #0 - 156a6: f47f ae54 bne.w 15352 <_dtoa_r+0x662> - 156aa: f3c2 0313 ubfx r3, r2, #0, #20 - 156ae: 2b00 cmp r3, #0 - 156b0: f47f ae4f bne.w 15352 <_dtoa_r+0x662> - 156b4: 4baf ldr r3, [pc, #700] ; (15974 <_dtoa_r+0xc84>) - 156b6: 4013 ands r3, r2 - 156b8: 2b00 cmp r3, #0 - 156ba: f000 820b beq.w 15ad4 <_dtoa_r+0xde4> - 156be: 9b09 ldr r3, [sp, #36] ; 0x24 - 156c0: 3301 adds r3, #1 - 156c2: 9309 str r3, [sp, #36] ; 0x24 - 156c4: 9b06 ldr r3, [sp, #24] - 156c6: 3301 adds r3, #1 - 156c8: 9306 str r3, [sp, #24] - 156ca: f04f 0901 mov.w r9, #1 - 156ce: e642 b.n 15356 <_dtoa_r+0x666> - 156d0: 2301 movs r3, #1 - 156d2: 930c str r3, [sp, #48] ; 0x30 - 156d4: 9b23 ldr r3, [sp, #140] ; 0x8c - 156d6: 9a07 ldr r2, [sp, #28] - 156d8: 4413 add r3, r2 - 156da: 9312 str r3, [sp, #72] ; 0x48 - 156dc: 3301 adds r3, #1 - 156de: 2b01 cmp r3, #1 - 156e0: 461f mov r7, r3 - 156e2: 9308 str r3, [sp, #32] - 156e4: bfb8 it lt - 156e6: 2701 movlt r7, #1 - 156e8: 2100 movs r1, #0 - 156ea: 2f17 cmp r7, #23 - 156ec: 63e1 str r1, [r4, #60] ; 0x3c - 156ee: f77f ac2f ble.w 14f50 <_dtoa_r+0x260> - 156f2: 2201 movs r2, #1 - 156f4: 2304 movs r3, #4 - 156f6: 005b lsls r3, r3, #1 - 156f8: f103 0014 add.w r0, r3, #20 - 156fc: 42b8 cmp r0, r7 - 156fe: 4611 mov r1, r2 - 15700: f102 0201 add.w r2, r2, #1 - 15704: d9f7 bls.n 156f6 <_dtoa_r+0xa06> - 15706: 63e1 str r1, [r4, #60] ; 0x3c - 15708: e422 b.n 14f50 <_dtoa_r+0x260> - 1570a: 2301 movs r3, #1 - 1570c: 930c str r3, [sp, #48] ; 0x30 - 1570e: 9b23 ldr r3, [sp, #140] ; 0x8c - 15710: 2b00 cmp r3, #0 - 15712: dd59 ble.n 157c8 <_dtoa_r+0xad8> - 15714: 9312 str r3, [sp, #72] ; 0x48 - 15716: 9308 str r3, [sp, #32] - 15718: 461f mov r7, r3 - 1571a: e7e5 b.n 156e8 <_dtoa_r+0x9f8> - 1571c: 2300 movs r3, #0 - 1571e: 930c str r3, [sp, #48] ; 0x30 - 15720: e7d8 b.n 156d4 <_dtoa_r+0x9e4> - 15722: 2300 movs r3, #0 - 15724: 930c str r3, [sp, #48] ; 0x30 - 15726: e7f2 b.n 1570e <_dtoa_r+0xa1e> - 15728: 9b12 ldr r3, [sp, #72] ; 0x48 - 1572a: e9cd 8307 strd r8, r3, [sp, #28] - 1572e: 9b08 ldr r3, [sp, #32] - 15730: 2b00 cmp r3, #0 - 15732: f47f ad54 bne.w 151de <_dtoa_r+0x4ee> - 15736: 4651 mov r1, sl - 15738: 2205 movs r2, #5 - 1573a: 4620 mov r0, r4 - 1573c: f7fe fbd0 bl 13ee0 <__multadd> - 15740: 4601 mov r1, r0 - 15742: 4682 mov sl, r0 - 15744: 4628 mov r0, r5 - 15746: f7fe fe1f bl 14388 <__mcmp> - 1574a: 2800 cmp r0, #0 - 1574c: f77f ad47 ble.w 151de <_dtoa_r+0x4ee> - 15750: 9b03 ldr r3, [sp, #12] - 15752: 9f07 ldr r7, [sp, #28] - 15754: 2231 movs r2, #49 ; 0x31 - 15756: 4698 mov r8, r3 - 15758: f803 2b01 strb.w r2, [r3], #1 - 1575c: 3701 adds r7, #1 - 1575e: 9303 str r3, [sp, #12] - 15760: 4651 mov r1, sl - 15762: 4620 mov r0, r4 - 15764: f7fe fbb2 bl 13ecc <_Bfree> - 15768: 1c7b adds r3, r7, #1 - 1576a: f8dd 900c ldr.w r9, [sp, #12] - 1576e: 9307 str r3, [sp, #28] - 15770: f8cd 800c str.w r8, [sp, #12] - 15774: 2e00 cmp r6, #0 - 15776: f47f ae6e bne.w 15456 <_dtoa_r+0x766> - 1577a: e670 b.n 1545e <_dtoa_r+0x76e> - 1577c: 4631 mov r1, r6 - 1577e: 463a mov r2, r7 - 15780: 4620 mov r0, r4 - 15782: f7fe fd89 bl 14298 <__lshift> - 15786: 4606 mov r6, r0 - 15788: e6de b.n 15548 <_dtoa_r+0x858> - 1578a: eba3 0808 sub.w r8, r3, r8 - 1578e: e5a6 b.n 152de <_dtoa_r+0x5ee> - 15790: 4631 mov r1, r6 - 15792: 4642 mov r2, r8 - 15794: 4620 mov r0, r4 - 15796: f7fe fd1f bl 141d8 <__pow5mult> - 1579a: 462a mov r2, r5 - 1579c: 4601 mov r1, r0 - 1579e: 4606 mov r6, r0 - 157a0: 4620 mov r0, r4 - 157a2: f7fe fc6b bl 1407c <__multiply> - 157a6: 4629 mov r1, r5 - 157a8: 4605 mov r5, r0 - 157aa: 4620 mov r0, r4 - 157ac: f7fe fb8e bl 13ecc <_Bfree> - 157b0: e5bd b.n 1532e <_dtoa_r+0x63e> - 157b2: e9dd 230a ldrd r2, r3, [sp, #40] ; 0x28 - 157b6: f04f 0a02 mov.w sl, #2 - 157ba: e9cd 2310 strd r2, r3, [sp, #64] ; 0x40 - 157be: f7ff bbf4 b.w 14faa <_dtoa_r+0x2ba> - 157c2: f1c0 003c rsb r0, r0, #60 ; 0x3c - 157c6: e685 b.n 154d4 <_dtoa_r+0x7e4> - 157c8: 2301 movs r3, #1 - 157ca: 9323 str r3, [sp, #140] ; 0x8c - 157cc: 9308 str r3, [sp, #32] - 157ce: f7ff bbbb b.w 14f48 <_dtoa_r+0x258> - 157d2: d103 bne.n 157dc <_dtoa_r+0xaec> - 157d4: 9b04 ldr r3, [sp, #16] - 157d6: 07db lsls r3, r3, #31 - 157d8: f53f ae1f bmi.w 1541a <_dtoa_r+0x72a> - 157dc: 46d9 mov r9, fp - 157de: f81b 3d01 ldrb.w r3, [fp, #-1]! - 157e2: 2b30 cmp r3, #48 ; 0x30 - 157e4: d0fa beq.n 157dc <_dtoa_r+0xaec> - 157e6: e62a b.n 1543e <_dtoa_r+0x74e> - 157e8: 9a0f ldr r2, [sp, #60] ; 0x3c - 157ea: 2a00 cmp r2, #0 - 157ec: f000 812d beq.w 15a4a <_dtoa_r+0xd5a> - 157f0: f203 4333 addw r3, r3, #1075 ; 0x433 - 157f4: 9a06 ldr r2, [sp, #24] - 157f6: f8dd 8034 ldr.w r8, [sp, #52] ; 0x34 - 157fa: 441a add r2, r3 - 157fc: 9206 str r2, [sp, #24] - 157fe: 9a09 ldr r2, [sp, #36] ; 0x24 - 15800: 4617 mov r7, r2 - 15802: 441a add r2, r3 - 15804: 9209 str r2, [sp, #36] ; 0x24 - 15806: e575 b.n 152f4 <_dtoa_r+0x604> - 15808: 9b07 ldr r3, [sp, #28] - 1580a: 9a03 ldr r2, [sp, #12] - 1580c: 3301 adds r3, #1 - 1580e: 9307 str r3, [sp, #28] - 15810: 2331 movs r3, #49 ; 0x31 - 15812: 7013 strb r3, [r2, #0] - 15814: e613 b.n 1543e <_dtoa_r+0x74e> - 15816: f04f 0a00 mov.w sl, #0 - 1581a: 4656 mov r6, sl - 1581c: e4df b.n 151de <_dtoa_r+0x4ee> - 1581e: 900e str r0, [sp, #56] ; 0x38 - 15820: e638 b.n 15494 <_dtoa_r+0x7a4> - 15822: f000 813d beq.w 15aa0 <_dtoa_r+0xdb0> - 15826: 9a07 ldr r2, [sp, #28] - 15828: 4b53 ldr r3, [pc, #332] ; (15978 <_dtoa_r+0xc88>) - 1582a: 4256 negs r6, r2 - 1582c: f006 020f and.w r2, r6, #15 - 15830: eb03 03c2 add.w r3, r3, r2, lsl #3 - 15834: e9d3 2300 ldrd r2, r3, [r3] - 15838: e9dd 010a ldrd r0, r1, [sp, #40] ; 0x28 - 1583c: f7f9 fdda bl f3f4 <__aeabi_dmul> - 15840: 1136 asrs r6, r6, #4 - 15842: 4680 mov r8, r0 - 15844: 4689 mov r9, r1 - 15846: f000 8178 beq.w 15b3a <_dtoa_r+0xe4a> - 1584a: 4f4c ldr r7, [pc, #304] ; (1597c <_dtoa_r+0xc8c>) - 1584c: 2300 movs r3, #0 - 1584e: f04f 0a02 mov.w sl, #2 - 15852: 07f2 lsls r2, r6, #31 - 15854: d506 bpl.n 15864 <_dtoa_r+0xb74> - 15856: e9d7 2300 ldrd r2, r3, [r7] - 1585a: f7f9 fdcb bl f3f4 <__aeabi_dmul> - 1585e: f10a 0a01 add.w sl, sl, #1 - 15862: 2301 movs r3, #1 - 15864: 1076 asrs r6, r6, #1 - 15866: f107 0708 add.w r7, r7, #8 - 1586a: d1f2 bne.n 15852 <_dtoa_r+0xb62> - 1586c: 2b00 cmp r3, #0 - 1586e: f43f abbb beq.w 14fe8 <_dtoa_r+0x2f8> - 15872: 4680 mov r8, r0 - 15874: 4689 mov r9, r1 - 15876: f7ff bbb7 b.w 14fe8 <_dtoa_r+0x2f8> - 1587a: 9b04 ldr r3, [sp, #16] - 1587c: 2b00 cmp r3, #0 - 1587e: f47f ae42 bne.w 15506 <_dtoa_r+0x816> - 15882: e9dd 1204 ldrd r1, r2, [sp, #16] - 15886: f3c2 0313 ubfx r3, r2, #0, #20 - 1588a: 2b00 cmp r3, #0 - 1588c: f43f af12 beq.w 156b4 <_dtoa_r+0x9c4> - 15890: e639 b.n 15506 <_dtoa_r+0x816> - 15892: 4629 mov r1, r5 - 15894: 9a0d ldr r2, [sp, #52] ; 0x34 - 15896: 4620 mov r0, r4 - 15898: f7fe fc9e bl 141d8 <__pow5mult> - 1589c: 4605 mov r5, r0 - 1589e: e54b b.n 15338 <_dtoa_r+0x648> - 158a0: 2a00 cmp r2, #0 - 158a2: dd12 ble.n 158ca <_dtoa_r+0xbda> - 158a4: 4629 mov r1, r5 - 158a6: 2201 movs r2, #1 - 158a8: 4620 mov r0, r4 - 158aa: 9304 str r3, [sp, #16] - 158ac: f7fe fcf4 bl 14298 <__lshift> - 158b0: 4651 mov r1, sl - 158b2: 4605 mov r5, r0 - 158b4: f7fe fd68 bl 14388 <__mcmp> - 158b8: 2800 cmp r0, #0 - 158ba: 9b04 ldr r3, [sp, #16] - 158bc: f340 8118 ble.w 15af0 <_dtoa_r+0xe00> - 158c0: 2b39 cmp r3, #57 ; 0x39 - 158c2: f000 80f9 beq.w 15ab8 <_dtoa_r+0xdc8> - 158c6: f10b 0331 add.w r3, fp, #49 ; 0x31 - 158ca: 46b9 mov r9, r7 - 158cc: f809 3b01 strb.w r3, [r9], #1 - 158d0: 9b07 ldr r3, [sp, #28] - 158d2: 3301 adds r3, #1 - 158d4: 4637 mov r7, r6 - 158d6: 9307 str r3, [sp, #28] - 158d8: 4646 mov r6, r8 - 158da: e5b0 b.n 1543e <_dtoa_r+0x74e> - 158dc: 9509 str r5, [sp, #36] ; 0x24 - 158de: 9c06 ldr r4, [sp, #24] - 158e0: 9d04 ldr r5, [sp, #16] - 158e2: 4602 mov r2, r0 - 158e4: 460b mov r3, r1 - 158e6: f7f9 fbcf bl f088 <__adddf3> - 158ea: 4652 mov r2, sl - 158ec: 465b mov r3, fp - 158ee: 4680 mov r8, r0 - 158f0: 4689 mov r9, r1 - 158f2: f7fa f80f bl f914 <__aeabi_dcmpgt> - 158f6: b960 cbnz r0, 15912 <_dtoa_r+0xc22> - 158f8: 4652 mov r2, sl - 158fa: 465b mov r3, fp - 158fc: 4640 mov r0, r8 - 158fe: 4649 mov r1, r9 - 15900: f7f9 ffe0 bl f8c4 <__aeabi_dcmpeq> - 15904: 2800 cmp r0, #0 - 15906: f43f acce beq.w 152a6 <_dtoa_r+0x5b6> - 1590a: 9b09 ldr r3, [sp, #36] ; 0x24 - 1590c: 07d9 lsls r1, r3, #31 - 1590e: f57f acca bpl.w 152a6 <_dtoa_r+0x5b6> - 15912: 9a03 ldr r2, [sp, #12] - 15914: e404 b.n 15120 <_dtoa_r+0x430> - 15916: 6871 ldr r1, [r6, #4] - 15918: 4620 mov r0, r4 - 1591a: f7fe fab1 bl 13e80 <_Balloc> - 1591e: 4607 mov r7, r0 - 15920: 2800 cmp r0, #0 - 15922: f000 810e beq.w 15b42 <_dtoa_r+0xe52> - 15926: 6933 ldr r3, [r6, #16] - 15928: 3302 adds r3, #2 - 1592a: 009a lsls r2, r3, #2 - 1592c: f106 010c add.w r1, r6, #12 - 15930: 300c adds r0, #12 - 15932: f7f6 fa81 bl be38 - 15936: 4639 mov r1, r7 - 15938: 2201 movs r2, #1 - 1593a: 4620 mov r0, r4 - 1593c: f7fe fcac bl 14298 <__lshift> - 15940: 4680 mov r8, r0 - 15942: e606 b.n 15552 <_dtoa_r+0x862> - 15944: e9dd 2308 ldrd r2, r3, [sp, #32] - 15948: 1a9f subs r7, r3, r2 - 1594a: e4d3 b.n 152f4 <_dtoa_r+0x604> - 1594c: 2b39 cmp r3, #57 ; 0x39 - 1594e: f000 80b3 beq.w 15ab8 <_dtoa_r+0xdc8> - 15952: 46b9 mov r9, r7 - 15954: 3301 adds r3, #1 - 15956: e7b9 b.n 158cc <_dtoa_r+0xbdc> - 15958: 9a07 ldr r2, [sp, #28] - 1595a: 3201 adds r2, #1 - 1595c: 4637 mov r7, r6 - 1595e: 9207 str r2, [sp, #28] - 15960: 4646 mov r6, r8 - 15962: e54d b.n 15400 <_dtoa_r+0x710> - 15964: 4629 mov r1, r5 - 15966: 4620 mov r0, r4 - 15968: f7fe fc36 bl 141d8 <__pow5mult> - 1596c: 4605 mov r5, r0 - 1596e: e4e3 b.n 15338 <_dtoa_r+0x648> - 15970: 00018b38 .word 0x00018b38 - 15974: 7ff00000 .word 0x7ff00000 - 15978: 00018a18 .word 0x00018a18 - 1597c: 000189f0 .word 0x000189f0 - 15980: f8dd a04c ldr.w sl, [sp, #76] ; 0x4c - 15984: 4981 ldr r1, [pc, #516] ; (15b8c <_dtoa_r+0xe9c>) - 15986: eb01 01ca add.w r1, r1, sl, lsl #3 - 1598a: e9dd 2310 ldrd r2, r3, [sp, #64] ; 0x40 - 1598e: e951 0102 ldrd r0, r1, [r1, #-8] - 15992: f7f9 fd2f bl f3f4 <__aeabi_dmul> - 15996: e9cd 0110 strd r0, r1, [sp, #64] ; 0x40 - 1599a: 4649 mov r1, r9 - 1599c: 4640 mov r0, r8 - 1599e: f7f9 ffd9 bl f954 <__aeabi_d2iz> - 159a2: 4606 mov r6, r0 - 159a4: f7f9 fcbc bl f320 <__aeabi_i2d> - 159a8: 460b mov r3, r1 - 159aa: 4602 mov r2, r0 - 159ac: 4649 mov r1, r9 - 159ae: 4640 mov r0, r8 - 159b0: f7f9 fb68 bl f084 <__aeabi_dsub> - 159b4: 9f03 ldr r7, [sp, #12] - 159b6: 4653 mov r3, sl - 159b8: 3630 adds r6, #48 ; 0x30 - 159ba: 2b01 cmp r3, #1 - 159bc: f807 6b01 strb.w r6, [r7], #1 - 159c0: 4680 mov r8, r0 - 159c2: 4689 mov r9, r1 - 159c4: f000 80b7 beq.w 15b36 <_dtoa_r+0xe46> - 159c8: 9e13 ldr r6, [sp, #76] ; 0x4c - 159ca: 9b03 ldr r3, [sp, #12] - 159cc: 441e add r6, r3 - 159ce: 4b70 ldr r3, [pc, #448] ; (15b90 <_dtoa_r+0xea0>) - 159d0: 2200 movs r2, #0 - 159d2: 4640 mov r0, r8 - 159d4: 4649 mov r1, r9 - 159d6: f7f9 fd0d bl f3f4 <__aeabi_dmul> - 159da: 4689 mov r9, r1 - 159dc: 4680 mov r8, r0 - 159de: f7f9 ffb9 bl f954 <__aeabi_d2iz> - 159e2: 4682 mov sl, r0 - 159e4: f7f9 fc9c bl f320 <__aeabi_i2d> - 159e8: f10a 0a30 add.w sl, sl, #48 ; 0x30 - 159ec: 4602 mov r2, r0 - 159ee: 460b mov r3, r1 - 159f0: 4640 mov r0, r8 - 159f2: 4649 mov r1, r9 - 159f4: f7f9 fb46 bl f084 <__aeabi_dsub> - 159f8: f807 ab01 strb.w sl, [r7], #1 - 159fc: 42be cmp r6, r7 - 159fe: 4680 mov r8, r0 - 15a00: 4689 mov r9, r1 - 15a02: d1e4 bne.n 159ce <_dtoa_r+0xcde> - 15a04: 4b63 ldr r3, [pc, #396] ; (15b94 <_dtoa_r+0xea4>) - 15a06: 2200 movs r2, #0 - 15a08: e9dd 0110 ldrd r0, r1, [sp, #64] ; 0x40 - 15a0c: f7f9 fb3c bl f088 <__adddf3> - 15a10: 4642 mov r2, r8 - 15a12: 464b mov r3, r9 - 15a14: f7f9 ff60 bl f8d8 <__aeabi_dcmplt> - 15a18: 2800 cmp r0, #0 - 15a1a: d164 bne.n 15ae6 <_dtoa_r+0xdf6> - 15a1c: e9dd 2310 ldrd r2, r3, [sp, #64] ; 0x40 - 15a20: 495c ldr r1, [pc, #368] ; (15b94 <_dtoa_r+0xea4>) - 15a22: 2000 movs r0, #0 - 15a24: f7f9 fb2e bl f084 <__aeabi_dsub> - 15a28: 4642 mov r2, r8 - 15a2a: 464b mov r3, r9 - 15a2c: f7f9 ff72 bl f914 <__aeabi_dcmpgt> - 15a30: 2800 cmp r0, #0 - 15a32: f43f abad beq.w 15190 <_dtoa_r+0x4a0> - 15a36: 46b1 mov r9, r6 - 15a38: 3e01 subs r6, #1 - 15a3a: f819 3c01 ldrb.w r3, [r9, #-1] - 15a3e: 2b30 cmp r3, #48 ; 0x30 - 15a40: d0f9 beq.n 15a36 <_dtoa_r+0xd46> - 15a42: 9b14 ldr r3, [sp, #80] ; 0x50 - 15a44: 3301 adds r3, #1 - 15a46: 9307 str r3, [sp, #28] - 15a48: e509 b.n 1545e <_dtoa_r+0x76e> - 15a4a: 9b16 ldr r3, [sp, #88] ; 0x58 - 15a4c: f1c3 0336 rsb r3, r3, #54 ; 0x36 - 15a50: e6d0 b.n 157f4 <_dtoa_r+0xb04> - 15a52: 9b08 ldr r3, [sp, #32] - 15a54: 2b00 cmp r3, #0 - 15a56: f43f ab6f beq.w 15138 <_dtoa_r+0x448> - 15a5a: 9b12 ldr r3, [sp, #72] ; 0x48 - 15a5c: 2b00 cmp r3, #0 - 15a5e: f77f ab97 ble.w 15190 <_dtoa_r+0x4a0> - 15a62: 9a07 ldr r2, [sp, #28] - 15a64: 3a01 subs r2, #1 - 15a66: e9cd 3213 strd r3, r2, [sp, #76] ; 0x4c - 15a6a: 4640 mov r0, r8 - 15a6c: 4b48 ldr r3, [pc, #288] ; (15b90 <_dtoa_r+0xea0>) - 15a6e: 2200 movs r2, #0 - 15a70: 4649 mov r1, r9 - 15a72: f7f9 fcbf bl f3f4 <__aeabi_dmul> - 15a76: 4680 mov r8, r0 - 15a78: 4689 mov r9, r1 - 15a7a: f10a 0001 add.w r0, sl, #1 - 15a7e: f7f9 fc4f bl f320 <__aeabi_i2d> - 15a82: 4642 mov r2, r8 - 15a84: 464b mov r3, r9 - 15a86: f7f9 fcb5 bl f3f4 <__aeabi_dmul> - 15a8a: 4b43 ldr r3, [pc, #268] ; (15b98 <_dtoa_r+0xea8>) - 15a8c: 2200 movs r2, #0 - 15a8e: f7f9 fafb bl f088 <__adddf3> - 15a92: f1a1 7350 sub.w r3, r1, #54525952 ; 0x3400000 - 15a96: e9cd 0110 strd r0, r1, [sp, #64] ; 0x40 - 15a9a: 9311 str r3, [sp, #68] ; 0x44 - 15a9c: f7ff bac7 b.w 1502e <_dtoa_r+0x33e> - 15aa0: e9dd 890a ldrd r8, r9, [sp, #40] ; 0x28 - 15aa4: f04f 0a02 mov.w sl, #2 - 15aa8: f7ff ba9e b.w 14fe8 <_dtoa_r+0x2f8> - 15aac: 9b07 ldr r3, [sp, #28] - 15aae: 3301 adds r3, #1 - 15ab0: 9307 str r3, [sp, #28] - 15ab2: 2331 movs r3, #49 ; 0x31 - 15ab4: f7ff bb3b b.w 1512e <_dtoa_r+0x43e> - 15ab8: 9b07 ldr r3, [sp, #28] - 15aba: 46bb mov fp, r7 - 15abc: 3301 adds r3, #1 - 15abe: 9307 str r3, [sp, #28] - 15ac0: 2339 movs r3, #57 ; 0x39 - 15ac2: 4637 mov r7, r6 - 15ac4: f80b 3b01 strb.w r3, [fp], #1 - 15ac8: 4646 mov r6, r8 - 15aca: e4a8 b.n 1541e <_dtoa_r+0x72e> - 15acc: f04f 0a00 mov.w sl, #0 - 15ad0: 4656 mov r6, sl - 15ad2: e63d b.n 15750 <_dtoa_r+0xa60> - 15ad4: 4699 mov r9, r3 - 15ad6: e43e b.n 15356 <_dtoa_r+0x666> - 15ad8: 9d10 ldr r5, [sp, #64] ; 0x40 - 15ada: 9c13 ldr r4, [sp, #76] ; 0x4c - 15adc: 9b14 ldr r3, [sp, #80] ; 0x50 - 15ade: 3301 adds r3, #1 - 15ae0: 9307 str r3, [sp, #28] - 15ae2: 46b1 mov r9, r6 - 15ae4: e4bb b.n 1545e <_dtoa_r+0x76e> - 15ae6: 9b14 ldr r3, [sp, #80] ; 0x50 - 15ae8: 9a03 ldr r2, [sp, #12] - 15aea: 9307 str r3, [sp, #28] - 15aec: f7ff bb18 b.w 15120 <_dtoa_r+0x430> - 15af0: f47f aeeb bne.w 158ca <_dtoa_r+0xbda> - 15af4: 07da lsls r2, r3, #31 - 15af6: f57f aee8 bpl.w 158ca <_dtoa_r+0xbda> - 15afa: e6e1 b.n 158c0 <_dtoa_r+0xbd0> - 15afc: f8dd b054 ldr.w fp, [sp, #84] ; 0x54 - 15b00: 9d10 ldr r5, [sp, #64] ; 0x40 - 15b02: 9c13 ldr r4, [sp, #76] ; 0x4c - 15b04: f7ff bb44 b.w 15190 <_dtoa_r+0x4a0> - 15b08: 2b39 cmp r3, #57 ; 0x39 - 15b0a: d0d5 beq.n 15ab8 <_dtoa_r+0xdc8> - 15b0c: f1b9 0f00 cmp.w r9, #0 - 15b10: f73f aed9 bgt.w 158c6 <_dtoa_r+0xbd6> - 15b14: e6d9 b.n 158ca <_dtoa_r+0xbda> - 15b16: 9b22 ldr r3, [sp, #136] ; 0x88 - 15b18: 2b02 cmp r3, #2 - 15b1a: f73f ae05 bgt.w 15728 <_dtoa_r+0xa38> - 15b1e: f8cd 801c str.w r8, [sp, #28] - 15b22: e58d b.n 15640 <_dtoa_r+0x950> - 15b24: 9b22 ldr r3, [sp, #136] ; 0x88 - 15b26: 2b02 cmp r3, #2 - 15b28: f73f adfe bgt.w 15728 <_dtoa_r+0xa38> - 15b2c: 9b12 ldr r3, [sp, #72] ; 0x48 - 15b2e: f8cd 801c str.w r8, [sp, #28] - 15b32: 9308 str r3, [sp, #32] - 15b34: e505 b.n 15542 <_dtoa_r+0x852> - 15b36: 463e mov r6, r7 - 15b38: e764 b.n 15a04 <_dtoa_r+0xd14> - 15b3a: f04f 0a02 mov.w sl, #2 - 15b3e: f7ff ba53 b.w 14fe8 <_dtoa_r+0x2f8> - 15b42: 4b16 ldr r3, [pc, #88] ; (15b9c <_dtoa_r+0xeac>) - 15b44: 4816 ldr r0, [pc, #88] ; (15ba0 <_dtoa_r+0xeb0>) - 15b46: 463a mov r2, r7 - 15b48: f240 21ef movw r1, #751 ; 0x2ef - 15b4c: f7fe ffde bl 14b0c <__assert_func> - 15b50: 2600 movs r6, #0 - 15b52: 63e6 str r6, [r4, #60] ; 0x3c - 15b54: 4631 mov r1, r6 - 15b56: 4620 mov r0, r4 - 15b58: f7fe f992 bl 13e80 <_Balloc> - 15b5c: 9003 str r0, [sp, #12] - 15b5e: b950 cbnz r0, 15b76 <_dtoa_r+0xe86> - 15b60: 4b0e ldr r3, [pc, #56] ; (15b9c <_dtoa_r+0xeac>) - 15b62: 480f ldr r0, [pc, #60] ; (15ba0 <_dtoa_r+0xeb0>) - 15b64: 2200 movs r2, #0 - 15b66: f240 11af movw r1, #431 ; 0x1af - 15b6a: f7fe ffcf bl 14b0c <__assert_func> - 15b6e: 4b0d ldr r3, [pc, #52] ; (15ba4 <_dtoa_r+0xeb4>) - 15b70: 9303 str r3, [sp, #12] - 15b72: f7ff b8f9 b.w 14d68 <_dtoa_r+0x78> - 15b76: 9b03 ldr r3, [sp, #12] - 15b78: 63a3 str r3, [r4, #56] ; 0x38 - 15b7a: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 15b7e: 9312 str r3, [sp, #72] ; 0x48 - 15b80: 9308 str r3, [sp, #32] - 15b82: 2301 movs r3, #1 - 15b84: 9623 str r6, [sp, #140] ; 0x8c - 15b86: 930c str r3, [sp, #48] ; 0x30 - 15b88: f7ff bb02 b.w 15190 <_dtoa_r+0x4a0> - 15b8c: 00018a18 .word 0x00018a18 - 15b90: 40240000 .word 0x40240000 - 15b94: 3fe00000 .word 0x3fe00000 - 15b98: 401c0000 .word 0x401c0000 - 15b9c: 00018974 .word 0x00018974 - 15ba0: 00018b3c .word 0x00018b3c - 15ba4: 00018b2c .word 0x00018b2c - -00015ba8 : - 15ba8: b40e push {r1, r2, r3} - 15baa: b510 push {r4, lr} - 15bac: b083 sub sp, #12 - 15bae: ab05 add r3, sp, #20 - 15bb0: 4c06 ldr r4, [pc, #24] ; (15bcc ) - 15bb2: f853 2b04 ldr.w r2, [r3], #4 - 15bb6: 9301 str r3, [sp, #4] - 15bb8: 4601 mov r1, r0 - 15bba: 6820 ldr r0, [r4, #0] - 15bbc: f000 f8c4 bl 15d48 <_vfiprintf_r> - 15bc0: b003 add sp, #12 - 15bc2: e8bd 4010 ldmia.w sp!, {r4, lr} - 15bc6: b003 add sp, #12 - 15bc8: 4770 bx lr - 15bca: bf00 nop - 15bcc: 1fff8fa8 .word 0x1fff8fa8 - -00015bd0 <__ssprint_r>: - 15bd0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 15bd4: 6893 ldr r3, [r2, #8] - 15bd6: 6817 ldr r7, [r2, #0] - 15bd8: b083 sub sp, #12 - 15bda: 4692 mov sl, r2 - 15bdc: 2b00 cmp r3, #0 - 15bde: d070 beq.n 15cc2 <__ssprint_r+0xf2> - 15be0: 4681 mov r9, r0 - 15be2: 688a ldr r2, [r1, #8] - 15be4: 6808 ldr r0, [r1, #0] - 15be6: 460c mov r4, r1 - 15be8: 3708 adds r7, #8 - 15bea: e043 b.n 15c74 <__ssprint_r+0xa4> - 15bec: 89a3 ldrh r3, [r4, #12] - 15bee: f413 6f90 tst.w r3, #1152 ; 0x480 - 15bf2: d02e beq.n 15c52 <__ssprint_r+0x82> - 15bf4: e9d4 1604 ldrd r1, r6, [r4, #16] - 15bf8: eba0 0801 sub.w r8, r0, r1 - 15bfc: eb06 0646 add.w r6, r6, r6, lsl #1 - 15c00: eb06 76d6 add.w r6, r6, r6, lsr #31 - 15c04: f108 0001 add.w r0, r8, #1 - 15c08: 1076 asrs r6, r6, #1 - 15c0a: 4428 add r0, r5 - 15c0c: 42b0 cmp r0, r6 - 15c0e: 4632 mov r2, r6 - 15c10: bf84 itt hi - 15c12: 4606 movhi r6, r0 - 15c14: 4632 movhi r2, r6 - 15c16: 055b lsls r3, r3, #21 - 15c18: d537 bpl.n 15c8a <__ssprint_r+0xba> - 15c1a: 4611 mov r1, r2 - 15c1c: 4648 mov r0, r9 - 15c1e: f7fa fa57 bl 100d0 <_malloc_r> - 15c22: 9001 str r0, [sp, #4] - 15c24: 2800 cmp r0, #0 - 15c26: d03a beq.n 15c9e <__ssprint_r+0xce> - 15c28: 4642 mov r2, r8 - 15c2a: 6921 ldr r1, [r4, #16] - 15c2c: f7f6 f904 bl be38 - 15c30: 89a2 ldrh r2, [r4, #12] - 15c32: 9b01 ldr r3, [sp, #4] - 15c34: f422 6290 bic.w r2, r2, #1152 ; 0x480 - 15c38: f042 0280 orr.w r2, r2, #128 ; 0x80 - 15c3c: 81a2 strh r2, [r4, #12] - 15c3e: eba6 0208 sub.w r2, r6, r8 - 15c42: eb03 0008 add.w r0, r3, r8 - 15c46: 6166 str r6, [r4, #20] - 15c48: 60a2 str r2, [r4, #8] - 15c4a: 6123 str r3, [r4, #16] - 15c4c: 6020 str r0, [r4, #0] - 15c4e: 462e mov r6, r5 - 15c50: 46a8 mov r8, r5 - 15c52: 4642 mov r2, r8 - 15c54: 4659 mov r1, fp - 15c56: f7fb fa11 bl 1107c - 15c5a: f8da 3008 ldr.w r3, [sl, #8] - 15c5e: 68a2 ldr r2, [r4, #8] - 15c60: 6820 ldr r0, [r4, #0] - 15c62: 1b92 subs r2, r2, r6 - 15c64: 4440 add r0, r8 - 15c66: 1b5b subs r3, r3, r5 - 15c68: 60a2 str r2, [r4, #8] - 15c6a: 6020 str r0, [r4, #0] - 15c6c: f8ca 3008 str.w r3, [sl, #8] - 15c70: b33b cbz r3, 15cc2 <__ssprint_r+0xf2> - 15c72: 3708 adds r7, #8 - 15c74: e957 b502 ldrd fp, r5, [r7, #-8] - 15c78: 2d00 cmp r5, #0 - 15c7a: d0fa beq.n 15c72 <__ssprint_r+0xa2> - 15c7c: 42aa cmp r2, r5 - 15c7e: 4616 mov r6, r2 - 15c80: 4690 mov r8, r2 - 15c82: d9b3 bls.n 15bec <__ssprint_r+0x1c> - 15c84: 462e mov r6, r5 - 15c86: 46a8 mov r8, r5 - 15c88: e7e3 b.n 15c52 <__ssprint_r+0x82> - 15c8a: 4648 mov r0, r9 - 15c8c: f7fa fce8 bl 10660 <_realloc_r> - 15c90: 4603 mov r3, r0 - 15c92: 2800 cmp r0, #0 - 15c94: d1d3 bne.n 15c3e <__ssprint_r+0x6e> - 15c96: 6921 ldr r1, [r4, #16] - 15c98: 4648 mov r0, r9 - 15c9a: f7fc fa03 bl 120a4 <_free_r> - 15c9e: 89a3 ldrh r3, [r4, #12] - 15ca0: 220c movs r2, #12 - 15ca2: f043 0340 orr.w r3, r3, #64 ; 0x40 - 15ca6: f8c9 2000 str.w r2, [r9] - 15caa: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 15cae: 81a3 strh r3, [r4, #12] - 15cb0: 2200 movs r2, #0 - 15cb2: 2300 movs r3, #0 - 15cb4: f8ca 2008 str.w r2, [sl, #8] - 15cb8: f8ca 3004 str.w r3, [sl, #4] - 15cbc: b003 add sp, #12 - 15cbe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 15cc2: 2000 movs r0, #0 - 15cc4: 2300 movs r3, #0 - 15cc6: f8ca 3004 str.w r3, [sl, #4] - 15cca: b003 add sp, #12 - 15ccc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -00015cd0 <__sprint_r.part.0>: - 15cd0: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 15cd4: 6e4b ldr r3, [r1, #100] ; 0x64 - 15cd6: 049c lsls r4, r3, #18 - 15cd8: 4690 mov r8, r2 - 15cda: d52d bpl.n 15d38 <__sprint_r.part.0+0x68> - 15cdc: 6893 ldr r3, [r2, #8] - 15cde: 6812 ldr r2, [r2, #0] - 15ce0: b343 cbz r3, 15d34 <__sprint_r.part.0+0x64> - 15ce2: 468b mov fp, r1 - 15ce4: 4606 mov r6, r0 - 15ce6: f102 0908 add.w r9, r2, #8 - 15cea: e959 5a02 ldrd r5, sl, [r9, #-8] - 15cee: ea5f 079a movs.w r7, sl, lsr #2 - 15cf2: d015 beq.n 15d20 <__sprint_r.part.0+0x50> - 15cf4: 3d04 subs r5, #4 - 15cf6: 2400 movs r4, #0 - 15cf8: e001 b.n 15cfe <__sprint_r.part.0+0x2e> - 15cfa: 42a7 cmp r7, r4 - 15cfc: d00e beq.n 15d1c <__sprint_r.part.0+0x4c> - 15cfe: f855 1f04 ldr.w r1, [r5, #4]! - 15d02: 465a mov r2, fp - 15d04: 4630 mov r0, r6 - 15d06: f001 fa51 bl 171ac <_fputwc_r> - 15d0a: 1c43 adds r3, r0, #1 - 15d0c: f104 0401 add.w r4, r4, #1 - 15d10: d1f3 bne.n 15cfa <__sprint_r.part.0+0x2a> - 15d12: 2300 movs r3, #0 - 15d14: e9c8 3301 strd r3, r3, [r8, #4] - 15d18: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 15d1c: f8d8 3008 ldr.w r3, [r8, #8] - 15d20: f02a 0a03 bic.w sl, sl, #3 - 15d24: eba3 030a sub.w r3, r3, sl - 15d28: f8c8 3008 str.w r3, [r8, #8] - 15d2c: f109 0908 add.w r9, r9, #8 - 15d30: 2b00 cmp r3, #0 - 15d32: d1da bne.n 15cea <__sprint_r.part.0+0x1a> - 15d34: 2000 movs r0, #0 - 15d36: e7ec b.n 15d12 <__sprint_r.part.0+0x42> - 15d38: f001 f808 bl 16d4c <__sfvwrite_r> - 15d3c: 2300 movs r3, #0 - 15d3e: e9c8 3301 strd r3, r3, [r8, #4] - 15d42: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} - 15d46: bf00 nop - -00015d48 <_vfiprintf_r>: - 15d48: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 15d4c: b0c5 sub sp, #276 ; 0x114 - 15d4e: f10d 0a50 add.w sl, sp, #80 ; 0x50 - 15d52: 4683 mov fp, r0 - 15d54: 9103 str r1, [sp, #12] - 15d56: 4616 mov r6, r2 - 15d58: 2100 movs r1, #0 - 15d5a: 2208 movs r2, #8 - 15d5c: 4650 mov r0, sl - 15d5e: 461c mov r4, r3 - 15d60: 9307 str r3, [sp, #28] - 15d62: f7fb fa07 bl 11174 - 15d66: f1bb 0f00 cmp.w fp, #0 - 15d6a: d004 beq.n 15d76 <_vfiprintf_r+0x2e> - 15d6c: f8db 3034 ldr.w r3, [fp, #52] ; 0x34 - 15d70: 2b00 cmp r3, #0 - 15d72: f000 86a1 beq.w 16ab8 <_vfiprintf_r+0xd70> - 15d76: 9a03 ldr r2, [sp, #12] - 15d78: 6e53 ldr r3, [r2, #100] ; 0x64 - 15d7a: 07db lsls r3, r3, #31 - 15d7c: f140 851c bpl.w 167b8 <_vfiprintf_r+0xa70> - 15d80: f9b2 100c ldrsh.w r1, [r2, #12] - 15d84: b28a uxth r2, r1 - 15d86: 0495 lsls r5, r2, #18 - 15d88: d409 bmi.n 15d9e <_vfiprintf_r+0x56> - 15d8a: 9b03 ldr r3, [sp, #12] - 15d8c: f441 5100 orr.w r1, r1, #8192 ; 0x2000 - 15d90: 8199 strh r1, [r3, #12] - 15d92: b28a uxth r2, r1 - 15d94: 4619 mov r1, r3 - 15d96: 6e5b ldr r3, [r3, #100] ; 0x64 - 15d98: f423 5300 bic.w r3, r3, #8192 ; 0x2000 - 15d9c: 664b str r3, [r1, #100] ; 0x64 - 15d9e: 0710 lsls r0, r2, #28 - 15da0: f140 8104 bpl.w 15fac <_vfiprintf_r+0x264> - 15da4: 9b03 ldr r3, [sp, #12] - 15da6: 691b ldr r3, [r3, #16] - 15da8: 2b00 cmp r3, #0 - 15daa: f000 80ff beq.w 15fac <_vfiprintf_r+0x264> - 15dae: f002 031a and.w r3, r2, #26 - 15db2: 2b0a cmp r3, #10 - 15db4: f000 8108 beq.w 15fc8 <_vfiprintf_r+0x280> - 15db8: 2300 movs r3, #0 - 15dba: e9cd 3319 strd r3, r3, [sp, #100] ; 0x64 - 15dbe: e9cd 330d strd r3, r3, [sp, #52] ; 0x34 - 15dc2: aa1b add r2, sp, #108 ; 0x6c - 15dc4: 930b str r3, [sp, #44] ; 0x2c - 15dc6: 9218 str r2, [sp, #96] ; 0x60 - 15dc8: 4691 mov r9, r2 - 15dca: 930c str r3, [sp, #48] ; 0x30 - 15dcc: 9305 str r3, [sp, #20] - 15dce: 46b0 mov r8, r6 - 15dd0: 4644 mov r4, r8 - 15dd2: 4ba6 ldr r3, [pc, #664] ; (1606c <_vfiprintf_r+0x324>) - 15dd4: f8d3 50e4 ldr.w r5, [r3, #228] ; 0xe4 - 15dd8: f7fb fd9a bl 11910 <__locale_mb_cur_max> - 15ddc: 4622 mov r2, r4 - 15dde: 4603 mov r3, r0 - 15de0: a912 add r1, sp, #72 ; 0x48 - 15de2: f8cd a000 str.w sl, [sp] - 15de6: 4658 mov r0, fp - 15de8: 47a8 blx r5 - 15dea: 2800 cmp r0, #0 - 15dec: f000 8140 beq.w 16070 <_vfiprintf_r+0x328> - 15df0: f2c0 8133 blt.w 1605a <_vfiprintf_r+0x312> - 15df4: 9a12 ldr r2, [sp, #72] ; 0x48 - 15df6: 2a25 cmp r2, #37 ; 0x25 - 15df8: 4603 mov r3, r0 - 15dfa: d001 beq.n 15e00 <_vfiprintf_r+0xb8> - 15dfc: 441c add r4, r3 - 15dfe: e7e8 b.n 15dd2 <_vfiprintf_r+0x8a> - 15e00: ebb4 0608 subs.w r6, r4, r8 - 15e04: 4605 mov r5, r0 - 15e06: f040 8137 bne.w 16078 <_vfiprintf_r+0x330> - 15e0a: 2300 movs r3, #0 - 15e0c: 7861 ldrb r1, [r4, #1] - 15e0e: f88d 3043 strb.w r3, [sp, #67] ; 0x43 - 15e12: f104 0801 add.w r8, r4, #1 - 15e16: 9306 str r3, [sp, #24] - 15e18: f04f 37ff mov.w r7, #4294967295 ; 0xffffffff - 15e1c: 461e mov r6, r3 - 15e1e: 242b movs r4, #43 ; 0x2b - 15e20: f108 0801 add.w r8, r8, #1 - 15e24: f1a1 0320 sub.w r3, r1, #32 - 15e28: 2b5a cmp r3, #90 ; 0x5a - 15e2a: f200 8165 bhi.w 160f8 <_vfiprintf_r+0x3b0> - 15e2e: e8df f013 tbh [pc, r3, lsl #1] - 15e32: 029f .short 0x029f - 15e34: 01630163 .word 0x01630163 - 15e38: 0163029a .word 0x0163029a - 15e3c: 01630163 .word 0x01630163 - 15e40: 0163006a .word 0x0163006a - 15e44: 02670163 .word 0x02670163 - 15e48: 01630277 .word 0x01630277 - 15e4c: 02810272 .word 0x02810272 - 15e50: 027c0163 .word 0x027c0163 - 15e54: 005b005b .word 0x005b005b - 15e58: 005b005b .word 0x005b005b - 15e5c: 005b005b .word 0x005b005b - 15e60: 005b005b .word 0x005b005b - 15e64: 0163005b .word 0x0163005b - 15e68: 01630163 .word 0x01630163 - 15e6c: 01630163 .word 0x01630163 - 15e70: 01630163 .word 0x01630163 - 15e74: 01630163 .word 0x01630163 - 15e78: 00840246 .word 0x00840246 - 15e7c: 01630163 .word 0x01630163 - 15e80: 01630163 .word 0x01630163 - 15e84: 01630163 .word 0x01630163 - 15e88: 01630163 .word 0x01630163 - 15e8c: 01630163 .word 0x01630163 - 15e90: 016300e2 .word 0x016300e2 - 15e94: 01630163 .word 0x01630163 - 15e98: 0163021d .word 0x0163021d - 15e9c: 016302c4 .word 0x016302c4 - 15ea0: 05940163 .word 0x05940163 - 15ea4: 01630163 .word 0x01630163 - 15ea8: 01630163 .word 0x01630163 - 15eac: 01630163 .word 0x01630163 - 15eb0: 01630163 .word 0x01630163 - 15eb4: 01630163 .word 0x01630163 - 15eb8: 00860246 .word 0x00860246 - 15ebc: 01630163 .word 0x01630163 - 15ec0: 02b70163 .word 0x02b70163 - 15ec4: 007f0086 .word 0x007f0086 - 15ec8: 02aa0163 .word 0x02aa0163 - 15ecc: 02e70163 .word 0x02e70163 - 15ed0: 02d700e4 .word 0x02d700e4 - 15ed4: 0163007f .word 0x0163007f - 15ed8: 007c021d .word 0x007c021d - 15edc: 01630572 .word 0x01630572 - 15ee0: 05740163 .word 0x05740163 - 15ee4: 007c0163 .word 0x007c0163 - 15ee8: f1a1 0330 sub.w r3, r1, #48 ; 0x30 - 15eec: 2200 movs r2, #0 - 15eee: f818 1b01 ldrb.w r1, [r8], #1 - 15ef2: eb02 0282 add.w r2, r2, r2, lsl #2 - 15ef6: eb03 0242 add.w r2, r3, r2, lsl #1 - 15efa: f1a1 0330 sub.w r3, r1, #48 ; 0x30 - 15efe: 2b09 cmp r3, #9 - 15f00: d9f5 bls.n 15eee <_vfiprintf_r+0x1a6> - 15f02: 9206 str r2, [sp, #24] - 15f04: e78e b.n 15e24 <_vfiprintf_r+0xdc> - 15f06: 4658 mov r0, fp - 15f08: f7fe fcec bl 148e4 <_localeconv_r> - 15f0c: 6843 ldr r3, [r0, #4] - 15f0e: 930d str r3, [sp, #52] ; 0x34 - 15f10: 4618 mov r0, r3 - 15f12: f7fb ffb5 bl 11e80 - 15f16: 900e str r0, [sp, #56] ; 0x38 - 15f18: 4605 mov r5, r0 - 15f1a: 4658 mov r0, fp - 15f1c: f7fe fce2 bl 148e4 <_localeconv_r> - 15f20: 6883 ldr r3, [r0, #8] - 15f22: 930c str r3, [sp, #48] ; 0x30 - 15f24: 2d00 cmp r5, #0 - 15f26: f040 84df bne.w 168e8 <_vfiprintf_r+0xba0> - 15f2a: f898 1000 ldrb.w r1, [r8] - 15f2e: e777 b.n 15e20 <_vfiprintf_r+0xd8> - 15f30: f898 1000 ldrb.w r1, [r8] - 15f34: f046 0620 orr.w r6, r6, #32 - 15f38: e772 b.n 15e20 <_vfiprintf_r+0xd8> - 15f3a: f046 0610 orr.w r6, r6, #16 - 15f3e: 06b4 lsls r4, r6, #26 - 15f40: f140 8178 bpl.w 16234 <_vfiprintf_r+0x4ec> - 15f44: 9b07 ldr r3, [sp, #28] - 15f46: 3307 adds r3, #7 - 15f48: f023 0307 bic.w r3, r3, #7 - 15f4c: 461a mov r2, r3 - 15f4e: 6859 ldr r1, [r3, #4] - 15f50: f852 3b08 ldr.w r3, [r2], #8 - 15f54: 9207 str r2, [sp, #28] - 15f56: 460a mov r2, r1 - 15f58: 2900 cmp r1, #0 - 15f5a: f2c0 847a blt.w 16852 <_vfiprintf_r+0xb0a> - 15f5e: 1c79 adds r1, r7, #1 - 15f60: f000 85a7 beq.w 16ab2 <_vfiprintf_r+0xd6a> - 15f64: f026 0180 bic.w r1, r6, #128 ; 0x80 - 15f68: 9102 str r1, [sp, #8] - 15f6a: ea53 0102 orrs.w r1, r3, r2 - 15f6e: f000 8448 beq.w 16802 <_vfiprintf_r+0xaba> - 15f72: 2b0a cmp r3, #10 - 15f74: f172 0100 sbcs.w r1, r2, #0 - 15f78: f080 8549 bcs.w 16a0e <_vfiprintf_r+0xcc6> - 15f7c: 3330 adds r3, #48 ; 0x30 - 15f7e: f88d 310f strb.w r3, [sp, #271] ; 0x10f - 15f82: 9e02 ldr r6, [sp, #8] - 15f84: 2301 movs r3, #1 - 15f86: 9304 str r3, [sp, #16] - 15f88: f20d 140f addw r4, sp, #271 ; 0x10f - 15f8c: 9b04 ldr r3, [sp, #16] - 15f8e: 42bb cmp r3, r7 - 15f90: bfb8 it lt - 15f92: 463b movlt r3, r7 - 15f94: 9302 str r3, [sp, #8] - 15f96: 2300 movs r3, #0 - 15f98: 9308 str r3, [sp, #32] - 15f9a: f89d 3043 ldrb.w r3, [sp, #67] ; 0x43 - 15f9e: 2b00 cmp r3, #0 - 15fa0: f000 80b8 beq.w 16114 <_vfiprintf_r+0x3cc> - 15fa4: 9b02 ldr r3, [sp, #8] - 15fa6: 3301 adds r3, #1 - 15fa8: 9302 str r3, [sp, #8] - 15faa: e0b3 b.n 16114 <_vfiprintf_r+0x3cc> - 15fac: 9d03 ldr r5, [sp, #12] - 15fae: 4658 mov r0, fp - 15fb0: 4629 mov r1, r5 - 15fb2: f001 f83f bl 17034 <__swsetup_r> - 15fb6: 2800 cmp r0, #0 - 15fb8: f040 8656 bne.w 16c68 <_vfiprintf_r+0xf20> - 15fbc: 89aa ldrh r2, [r5, #12] - 15fbe: f002 031a and.w r3, r2, #26 - 15fc2: 2b0a cmp r3, #10 - 15fc4: f47f aef8 bne.w 15db8 <_vfiprintf_r+0x70> - 15fc8: 9903 ldr r1, [sp, #12] - 15fca: f9b1 300e ldrsh.w r3, [r1, #14] - 15fce: 2b00 cmp r3, #0 - 15fd0: f6ff aef2 blt.w 15db8 <_vfiprintf_r+0x70> - 15fd4: 6e4b ldr r3, [r1, #100] ; 0x64 - 15fd6: 07db lsls r3, r3, #31 - 15fd8: d402 bmi.n 15fe0 <_vfiprintf_r+0x298> - 15fda: 0597 lsls r7, r2, #22 - 15fdc: f140 8618 bpl.w 16c10 <_vfiprintf_r+0xec8> - 15fe0: 9903 ldr r1, [sp, #12] - 15fe2: 4623 mov r3, r4 - 15fe4: 4632 mov r2, r6 - 15fe6: 4658 mov r0, fp - 15fe8: f000 fe70 bl 16ccc <__sbprintf> - 15fec: 9005 str r0, [sp, #20] - 15fee: 9805 ldr r0, [sp, #20] - 15ff0: b045 add sp, #276 ; 0x114 - 15ff2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 15ff6: f046 0610 orr.w r6, r6, #16 - 15ffa: f016 0220 ands.w r2, r6, #32 - 15ffe: f000 8126 beq.w 1624e <_vfiprintf_r+0x506> - 16002: 9b07 ldr r3, [sp, #28] - 16004: 3307 adds r3, #7 - 16006: f023 0307 bic.w r3, r3, #7 - 1600a: 4619 mov r1, r3 - 1600c: 685a ldr r2, [r3, #4] - 1600e: f851 3b08 ldr.w r3, [r1], #8 - 16012: 9107 str r1, [sp, #28] - 16014: f426 6180 bic.w r1, r6, #1024 ; 0x400 - 16018: 9102 str r1, [sp, #8] - 1601a: 2100 movs r1, #0 - 1601c: 2000 movs r0, #0 - 1601e: f88d 0043 strb.w r0, [sp, #67] ; 0x43 - 16022: 1c78 adds r0, r7, #1 - 16024: f000 8200 beq.w 16428 <_vfiprintf_r+0x6e0> - 16028: 9802 ldr r0, [sp, #8] - 1602a: f020 0680 bic.w r6, r0, #128 ; 0x80 - 1602e: ea53 0002 orrs.w r0, r3, r2 - 16032: f040 81f8 bne.w 16426 <_vfiprintf_r+0x6de> - 16036: 2f00 cmp r7, #0 - 16038: f040 8543 bne.w 16ac2 <_vfiprintf_r+0xd7a> - 1603c: 2900 cmp r1, #0 - 1603e: f040 83e4 bne.w 1680a <_vfiprintf_r+0xac2> - 16042: 9b02 ldr r3, [sp, #8] - 16044: f013 0301 ands.w r3, r3, #1 - 16048: 9304 str r3, [sp, #16] - 1604a: f000 8420 beq.w 1688e <_vfiprintf_r+0xb46> - 1604e: 2330 movs r3, #48 ; 0x30 - 16050: f88d 310f strb.w r3, [sp, #271] ; 0x10f - 16054: f20d 140f addw r4, sp, #271 ; 0x10f - 16058: e798 b.n 15f8c <_vfiprintf_r+0x244> - 1605a: 2208 movs r2, #8 - 1605c: 2100 movs r1, #0 - 1605e: 4650 mov r0, sl - 16060: f7fb f888 bl 11174 - 16064: 2301 movs r3, #1 - 16066: 441c add r4, r3 - 16068: e6b3 b.n 15dd2 <_vfiprintf_r+0x8a> - 1606a: bf00 nop - 1606c: 1fff8d1c .word 0x1fff8d1c - 16070: ebb4 0608 subs.w r6, r4, r8 - 16074: 4605 mov r5, r0 - 16076: d01a beq.n 160ae <_vfiprintf_r+0x366> - 16078: 9b19 ldr r3, [sp, #100] ; 0x64 - 1607a: 9a1a ldr r2, [sp, #104] ; 0x68 - 1607c: 3301 adds r3, #1 - 1607e: 4432 add r2, r6 - 16080: 2b07 cmp r3, #7 - 16082: e9c9 8600 strd r8, r6, [r9] - 16086: 921a str r2, [sp, #104] ; 0x68 - 16088: 9319 str r3, [sp, #100] ; 0x64 - 1608a: dd1a ble.n 160c2 <_vfiprintf_r+0x37a> - 1608c: 2a00 cmp r2, #0 - 1608e: f000 83b4 beq.w 167fa <_vfiprintf_r+0xab2> - 16092: 9903 ldr r1, [sp, #12] - 16094: aa18 add r2, sp, #96 ; 0x60 - 16096: 4658 mov r0, fp - 16098: f7ff fe1a bl 15cd0 <__sprint_r.part.0> - 1609c: b9d8 cbnz r0, 160d6 <_vfiprintf_r+0x38e> - 1609e: f10d 096c add.w r9, sp, #108 ; 0x6c - 160a2: 9b05 ldr r3, [sp, #20] - 160a4: 4433 add r3, r6 - 160a6: 9305 str r3, [sp, #20] - 160a8: 2d00 cmp r5, #0 - 160aa: f47f aeae bne.w 15e0a <_vfiprintf_r+0xc2> - 160ae: 9b1a ldr r3, [sp, #104] ; 0x68 - 160b0: 2b00 cmp r3, #0 - 160b2: f040 85ca bne.w 16c4a <_vfiprintf_r+0xf02> - 160b6: 9b03 ldr r3, [sp, #12] - 160b8: 2200 movs r2, #0 - 160ba: f9b3 300c ldrsh.w r3, [r3, #12] - 160be: 9219 str r2, [sp, #100] ; 0x64 - 160c0: e00c b.n 160dc <_vfiprintf_r+0x394> - 160c2: f109 0908 add.w r9, r9, #8 - 160c6: e7ec b.n 160a2 <_vfiprintf_r+0x35a> - 160c8: 46b3 mov fp, r6 - 160ca: 9b08 ldr r3, [sp, #32] - 160cc: b11b cbz r3, 160d6 <_vfiprintf_r+0x38e> - 160ce: 9908 ldr r1, [sp, #32] - 160d0: 4658 mov r0, fp - 160d2: f7fb ffe7 bl 120a4 <_free_r> - 160d6: 9b03 ldr r3, [sp, #12] - 160d8: f9b3 300c ldrsh.w r3, [r3, #12] - 160dc: 9a03 ldr r2, [sp, #12] - 160de: 6e52 ldr r2, [r2, #100] ; 0x64 - 160e0: f012 0f01 tst.w r2, #1 - 160e4: b29a uxth r2, r3 - 160e6: f000 809c beq.w 16222 <_vfiprintf_r+0x4da> - 160ea: 0650 lsls r0, r2, #25 - 160ec: f100 85c8 bmi.w 16c80 <_vfiprintf_r+0xf38> - 160f0: 9805 ldr r0, [sp, #20] - 160f2: b045 add sp, #276 ; 0x114 - 160f4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 160f8: 2900 cmp r1, #0 - 160fa: d0d8 beq.n 160ae <_vfiprintf_r+0x366> - 160fc: 2300 movs r3, #0 - 160fe: f88d 3043 strb.w r3, [sp, #67] ; 0x43 - 16102: 2301 movs r3, #1 - 16104: f88d 10ac strb.w r1, [sp, #172] ; 0xac - 16108: 9302 str r3, [sp, #8] - 1610a: 9304 str r3, [sp, #16] - 1610c: ac2b add r4, sp, #172 ; 0xac - 1610e: 2300 movs r3, #0 - 16110: 9308 str r3, [sp, #32] - 16112: 461f mov r7, r3 - 16114: f016 0302 ands.w r3, r6, #2 - 16118: 9309 str r3, [sp, #36] ; 0x24 - 1611a: d002 beq.n 16122 <_vfiprintf_r+0x3da> - 1611c: 9b02 ldr r3, [sp, #8] - 1611e: 3302 adds r3, #2 - 16120: 9302 str r3, [sp, #8] - 16122: f016 0384 ands.w r3, r6, #132 ; 0x84 - 16126: 930a str r3, [sp, #40] ; 0x28 - 16128: d105 bne.n 16136 <_vfiprintf_r+0x3ee> - 1612a: 9b06 ldr r3, [sp, #24] - 1612c: 9a02 ldr r2, [sp, #8] - 1612e: 1a9d subs r5, r3, r2 - 16130: 2d00 cmp r5, #0 - 16132: f300 8294 bgt.w 1665e <_vfiprintf_r+0x916> - 16136: e9dd 0319 ldrd r0, r3, [sp, #100] ; 0x64 - 1613a: 1c41 adds r1, r0, #1 - 1613c: f89d 2043 ldrb.w r2, [sp, #67] ; 0x43 - 16140: b182 cbz r2, 16164 <_vfiprintf_r+0x41c> - 16142: 2201 movs r2, #1 - 16144: 3301 adds r3, #1 - 16146: f8c9 2004 str.w r2, [r9, #4] - 1614a: 2907 cmp r1, #7 - 1614c: f10d 0243 add.w r2, sp, #67 ; 0x43 - 16150: e9cd 1319 strd r1, r3, [sp, #100] ; 0x64 - 16154: f8c9 2000 str.w r2, [r9] - 16158: f300 8264 bgt.w 16624 <_vfiprintf_r+0x8dc> - 1615c: 4608 mov r0, r1 - 1615e: f109 0908 add.w r9, r9, #8 - 16162: 3101 adds r1, #1 - 16164: 9a09 ldr r2, [sp, #36] ; 0x24 - 16166: b1da cbz r2, 161a0 <_vfiprintf_r+0x458> - 16168: aa11 add r2, sp, #68 ; 0x44 - 1616a: 3302 adds r3, #2 - 1616c: f8c9 2000 str.w r2, [r9] - 16170: 2907 cmp r1, #7 - 16172: f04f 0202 mov.w r2, #2 - 16176: e9cd 1319 strd r1, r3, [sp, #100] ; 0x64 - 1617a: f8c9 2004 str.w r2, [r9, #4] - 1617e: f340 8269 ble.w 16654 <_vfiprintf_r+0x90c> - 16182: 2b00 cmp r3, #0 - 16184: f000 8358 beq.w 16838 <_vfiprintf_r+0xaf0> - 16188: 9903 ldr r1, [sp, #12] - 1618a: aa18 add r2, sp, #96 ; 0x60 - 1618c: 4658 mov r0, fp - 1618e: f7ff fd9f bl 15cd0 <__sprint_r.part.0> - 16192: 2800 cmp r0, #0 - 16194: d199 bne.n 160ca <_vfiprintf_r+0x382> - 16196: e9dd 0319 ldrd r0, r3, [sp, #100] ; 0x64 - 1619a: f10d 096c add.w r9, sp, #108 ; 0x6c - 1619e: 1c41 adds r1, r0, #1 - 161a0: 9a0a ldr r2, [sp, #40] ; 0x28 - 161a2: 2a80 cmp r2, #128 ; 0x80 - 161a4: f000 8182 beq.w 164ac <_vfiprintf_r+0x764> - 161a8: 9a04 ldr r2, [sp, #16] - 161aa: 1abd subs r5, r7, r2 - 161ac: 2d00 cmp r5, #0 - 161ae: f300 81e0 bgt.w 16572 <_vfiprintf_r+0x82a> - 161b2: 9a04 ldr r2, [sp, #16] - 161b4: f8c9 4000 str.w r4, [r9] - 161b8: 4413 add r3, r2 - 161ba: 2907 cmp r1, #7 - 161bc: e9cd 1319 strd r1, r3, [sp, #100] ; 0x64 - 161c0: f8c9 2004 str.w r2, [r9, #4] - 161c4: f340 816c ble.w 164a0 <_vfiprintf_r+0x758> - 161c8: 2b00 cmp r3, #0 - 161ca: f000 829e beq.w 1670a <_vfiprintf_r+0x9c2> - 161ce: 9903 ldr r1, [sp, #12] - 161d0: aa18 add r2, sp, #96 ; 0x60 - 161d2: 4658 mov r0, fp - 161d4: f7ff fd7c bl 15cd0 <__sprint_r.part.0> - 161d8: 2800 cmp r0, #0 - 161da: f47f af76 bne.w 160ca <_vfiprintf_r+0x382> - 161de: 9b1a ldr r3, [sp, #104] ; 0x68 - 161e0: f10d 096c add.w r9, sp, #108 ; 0x6c - 161e4: 0775 lsls r5, r6, #29 - 161e6: d505 bpl.n 161f4 <_vfiprintf_r+0x4ac> - 161e8: 9a06 ldr r2, [sp, #24] - 161ea: 9902 ldr r1, [sp, #8] - 161ec: 1a54 subs r4, r2, r1 - 161ee: 2c00 cmp r4, #0 - 161f0: f300 8295 bgt.w 1671e <_vfiprintf_r+0x9d6> - 161f4: e9dd 2105 ldrd r2, r1, [sp, #20] - 161f8: 9802 ldr r0, [sp, #8] - 161fa: 4281 cmp r1, r0 - 161fc: bfac ite ge - 161fe: 1852 addge r2, r2, r1 - 16200: 1812 addlt r2, r2, r0 - 16202: 9205 str r2, [sp, #20] - 16204: 2b00 cmp r3, #0 - 16206: f040 81fe bne.w 16606 <_vfiprintf_r+0x8be> - 1620a: 9908 ldr r1, [sp, #32] - 1620c: 2300 movs r3, #0 - 1620e: 9319 str r3, [sp, #100] ; 0x64 - 16210: 2900 cmp r1, #0 - 16212: f000 8148 beq.w 164a6 <_vfiprintf_r+0x75e> - 16216: 4658 mov r0, fp - 16218: f7fb ff44 bl 120a4 <_free_r> - 1621c: f10d 096c add.w r9, sp, #108 ; 0x6c - 16220: e5d6 b.n 15dd0 <_vfiprintf_r+0x88> - 16222: 059c lsls r4, r3, #22 - 16224: f53f af61 bmi.w 160ea <_vfiprintf_r+0x3a2> - 16228: 9c03 ldr r4, [sp, #12] - 1622a: 6da0 ldr r0, [r4, #88] ; 0x58 - 1622c: f7fb fdbe bl 11dac <__retarget_lock_release_recursive> - 16230: 89a2 ldrh r2, [r4, #12] - 16232: e75a b.n 160ea <_vfiprintf_r+0x3a2> - 16234: 06f0 lsls r0, r6, #27 - 16236: 9a07 ldr r2, [sp, #28] - 16238: f100 833e bmi.w 168b8 <_vfiprintf_r+0xb70> - 1623c: 0671 lsls r1, r6, #25 - 1623e: f140 8338 bpl.w 168b2 <_vfiprintf_r+0xb6a> - 16242: f932 3b04 ldrsh.w r3, [r2], #4 - 16246: 9207 str r2, [sp, #28] - 16248: 17da asrs r2, r3, #31 - 1624a: 4611 mov r1, r2 - 1624c: e684 b.n 15f58 <_vfiprintf_r+0x210> - 1624e: f016 0310 ands.w r3, r6, #16 - 16252: 9907 ldr r1, [sp, #28] - 16254: f040 8328 bne.w 168a8 <_vfiprintf_r+0xb60> - 16258: f016 0040 ands.w r0, r6, #64 ; 0x40 - 1625c: f000 8320 beq.w 168a0 <_vfiprintf_r+0xb58> - 16260: 461a mov r2, r3 - 16262: f851 3b04 ldr.w r3, [r1], #4 - 16266: 9107 str r1, [sp, #28] - 16268: b29b uxth r3, r3 - 1626a: e6d3 b.n 16014 <_vfiprintf_r+0x2cc> - 1626c: 9b07 ldr r3, [sp, #28] - 1626e: 461a mov r2, r3 - 16270: 2300 movs r3, #0 - 16272: f88d 3043 strb.w r3, [sp, #67] ; 0x43 - 16276: 4613 mov r3, r2 - 16278: f853 4b04 ldr.w r4, [r3], #4 - 1627c: 9302 str r3, [sp, #8] - 1627e: 2c00 cmp r4, #0 - 16280: f000 842d beq.w 16ade <_vfiprintf_r+0xd96> - 16284: 2953 cmp r1, #83 ; 0x53 - 16286: f000 838a beq.w 1699e <_vfiprintf_r+0xc56> - 1628a: f016 0510 ands.w r5, r6, #16 - 1628e: f040 8386 bne.w 1699e <_vfiprintf_r+0xc56> - 16292: 1c7b adds r3, r7, #1 - 16294: f000 84cc beq.w 16c30 <_vfiprintf_r+0xee8> - 16298: 463a mov r2, r7 - 1629a: 4629 mov r1, r5 - 1629c: 4620 mov r0, r4 - 1629e: f7fb fd87 bl 11db0 - 162a2: 9008 str r0, [sp, #32] - 162a4: 2800 cmp r0, #0 - 162a6: f000 84b8 beq.w 16c1a <_vfiprintf_r+0xed2> - 162aa: 1b03 subs r3, r0, r4 - 162ac: 9a02 ldr r2, [sp, #8] - 162ae: 9304 str r3, [sp, #16] - 162b0: ea23 73e3 bic.w r3, r3, r3, asr #31 - 162b4: 462f mov r7, r5 - 162b6: 9207 str r2, [sp, #28] - 162b8: 9302 str r3, [sp, #8] - 162ba: 9508 str r5, [sp, #32] - 162bc: e66d b.n 15f9a <_vfiprintf_r+0x252> - 162be: 2943 cmp r1, #67 ; 0x43 - 162c0: d002 beq.n 162c8 <_vfiprintf_r+0x580> - 162c2: 06f5 lsls r5, r6, #27 - 162c4: f140 8352 bpl.w 1696c <_vfiprintf_r+0xc24> - 162c8: 9d07 ldr r5, [sp, #28] - 162ca: 2208 movs r2, #8 - 162cc: 2100 movs r1, #0 - 162ce: a816 add r0, sp, #88 ; 0x58 - 162d0: ac2b add r4, sp, #172 ; 0xac - 162d2: f7fa ff4f bl 11174 - 162d6: ab16 add r3, sp, #88 ; 0x58 - 162d8: f855 2b04 ldr.w r2, [r5], #4 - 162dc: 4621 mov r1, r4 - 162de: 4658 mov r0, fp - 162e0: f7fe fba8 bl 14a34 <_wcrtomb_r> - 162e4: 4603 mov r3, r0 - 162e6: 3301 adds r3, #1 - 162e8: 9004 str r0, [sp, #16] - 162ea: f000 84ce beq.w 16c8a <_vfiprintf_r+0xf42> - 162ee: 9b04 ldr r3, [sp, #16] - 162f0: 9507 str r5, [sp, #28] - 162f2: ea23 73e3 bic.w r3, r3, r3, asr #31 - 162f6: 9302 str r3, [sp, #8] - 162f8: 2300 movs r3, #0 - 162fa: f88d 3043 strb.w r3, [sp, #67] ; 0x43 - 162fe: e706 b.n 1610e <_vfiprintf_r+0x3c6> - 16300: 9b07 ldr r3, [sp, #28] - 16302: f853 2b04 ldr.w r2, [r3], #4 - 16306: 9206 str r2, [sp, #24] - 16308: 2a00 cmp r2, #0 - 1630a: f280 82bb bge.w 16884 <_vfiprintf_r+0xb3c> - 1630e: 9a06 ldr r2, [sp, #24] - 16310: 4252 negs r2, r2 - 16312: e9cd 2306 strd r2, r3, [sp, #24] - 16316: f898 1000 ldrb.w r1, [r8] - 1631a: f046 0604 orr.w r6, r6, #4 - 1631e: e57f b.n 15e20 <_vfiprintf_r+0xd8> - 16320: f898 1000 ldrb.w r1, [r8] - 16324: f88d 4043 strb.w r4, [sp, #67] ; 0x43 - 16328: e57a b.n 15e20 <_vfiprintf_r+0xd8> - 1632a: f898 1000 ldrb.w r1, [r8] - 1632e: f046 0680 orr.w r6, r6, #128 ; 0x80 - 16332: e575 b.n 15e20 <_vfiprintf_r+0xd8> - 16334: 4642 mov r2, r8 - 16336: f812 1b01 ldrb.w r1, [r2], #1 - 1633a: 292a cmp r1, #42 ; 0x2a - 1633c: f000 84b0 beq.w 16ca0 <_vfiprintf_r+0xf58> - 16340: f1a1 0330 sub.w r3, r1, #48 ; 0x30 - 16344: 2b09 cmp r3, #9 - 16346: 4690 mov r8, r2 - 16348: f04f 0700 mov.w r7, #0 - 1634c: f63f ad6a bhi.w 15e24 <_vfiprintf_r+0xdc> - 16350: f818 1b01 ldrb.w r1, [r8], #1 - 16354: eb07 0787 add.w r7, r7, r7, lsl #2 - 16358: eb03 0747 add.w r7, r3, r7, lsl #1 - 1635c: f1a1 0330 sub.w r3, r1, #48 ; 0x30 - 16360: 2b09 cmp r3, #9 - 16362: d9f5 bls.n 16350 <_vfiprintf_r+0x608> - 16364: e55e b.n 15e24 <_vfiprintf_r+0xdc> - 16366: f898 1000 ldrb.w r1, [r8] - 1636a: f046 0601 orr.w r6, r6, #1 - 1636e: e557 b.n 15e20 <_vfiprintf_r+0xd8> - 16370: f89d 3043 ldrb.w r3, [sp, #67] ; 0x43 - 16374: 2b00 cmp r3, #0 - 16376: f47f add8 bne.w 15f2a <_vfiprintf_r+0x1e2> - 1637a: 2320 movs r3, #32 - 1637c: f898 1000 ldrb.w r1, [r8] - 16380: f88d 3043 strb.w r3, [sp, #67] ; 0x43 - 16384: e54c b.n 15e20 <_vfiprintf_r+0xd8> - 16386: f898 1000 ldrb.w r1, [r8] - 1638a: 296c cmp r1, #108 ; 0x6c - 1638c: bf03 ittte eq - 1638e: f898 1001 ldrbeq.w r1, [r8, #1] - 16392: f046 0620 orreq.w r6, r6, #32 - 16396: f108 0801 addeq.w r8, r8, #1 - 1639a: f046 0610 orrne.w r6, r6, #16 - 1639e: e53f b.n 15e20 <_vfiprintf_r+0xd8> - 163a0: f898 1000 ldrb.w r1, [r8] - 163a4: 2968 cmp r1, #104 ; 0x68 - 163a6: bf03 ittte eq - 163a8: f898 1001 ldrbeq.w r1, [r8, #1] - 163ac: f446 7600 orreq.w r6, r6, #512 ; 0x200 - 163b0: f108 0801 addeq.w r8, r8, #1 - 163b4: f046 0640 orrne.w r6, r6, #64 ; 0x40 - 163b8: e532 b.n 15e20 <_vfiprintf_r+0xd8> - 163ba: f046 0310 orr.w r3, r6, #16 - 163be: 9302 str r3, [sp, #8] - 163c0: 9b02 ldr r3, [sp, #8] - 163c2: f013 0220 ands.w r2, r3, #32 - 163c6: f000 8225 beq.w 16814 <_vfiprintf_r+0xacc> - 163ca: 9b07 ldr r3, [sp, #28] - 163cc: 3307 adds r3, #7 - 163ce: f023 0307 bic.w r3, r3, #7 - 163d2: 4619 mov r1, r3 - 163d4: 685a ldr r2, [r3, #4] - 163d6: f851 3b08 ldr.w r3, [r1], #8 - 163da: 9107 str r1, [sp, #28] - 163dc: 2101 movs r1, #1 - 163de: e61d b.n 1601c <_vfiprintf_r+0x2d4> - 163e0: 9a07 ldr r2, [sp, #28] - 163e2: f046 0302 orr.w r3, r6, #2 - 163e6: 9302 str r3, [sp, #8] - 163e8: f852 3b04 ldr.w r3, [r2], #4 - 163ec: 9207 str r2, [sp, #28] - 163ee: f647 0230 movw r2, #30768 ; 0x7830 - 163f2: f8ad 2044 strh.w r2, [sp, #68] ; 0x44 - 163f6: 4aa1 ldr r2, [pc, #644] ; (1667c <_vfiprintf_r+0x934>) - 163f8: 920b str r2, [sp, #44] ; 0x2c - 163fa: 2102 movs r1, #2 - 163fc: 2200 movs r2, #0 - 163fe: e60d b.n 1601c <_vfiprintf_r+0x2d4> - 16400: 06b7 lsls r7, r6, #26 - 16402: f100 8267 bmi.w 168d4 <_vfiprintf_r+0xb8c> - 16406: 06f5 lsls r5, r6, #27 - 16408: f100 8361 bmi.w 16ace <_vfiprintf_r+0xd86> - 1640c: 0674 lsls r4, r6, #25 - 1640e: f100 83ee bmi.w 16bee <_vfiprintf_r+0xea6> - 16412: 05b0 lsls r0, r6, #22 - 16414: f140 835b bpl.w 16ace <_vfiprintf_r+0xd86> - 16418: 9b07 ldr r3, [sp, #28] - 1641a: 9905 ldr r1, [sp, #20] - 1641c: f853 2b04 ldr.w r2, [r3], #4 - 16420: 9307 str r3, [sp, #28] - 16422: 7011 strb r1, [r2, #0] - 16424: e4d4 b.n 15dd0 <_vfiprintf_r+0x88> - 16426: 9602 str r6, [sp, #8] - 16428: 2901 cmp r1, #1 - 1642a: f43f ada2 beq.w 15f72 <_vfiprintf_r+0x22a> - 1642e: 2902 cmp r1, #2 - 16430: ac44 add r4, sp, #272 ; 0x110 - 16432: d111 bne.n 16458 <_vfiprintf_r+0x710> - 16434: 980b ldr r0, [sp, #44] ; 0x2c - 16436: f003 010f and.w r1, r3, #15 - 1643a: 091b lsrs r3, r3, #4 - 1643c: 5c41 ldrb r1, [r0, r1] - 1643e: f804 1d01 strb.w r1, [r4, #-1]! - 16442: ea43 7302 orr.w r3, r3, r2, lsl #28 - 16446: 0912 lsrs r2, r2, #4 - 16448: ea53 0102 orrs.w r1, r3, r2 - 1644c: d1f3 bne.n 16436 <_vfiprintf_r+0x6ee> - 1644e: 9e02 ldr r6, [sp, #8] - 16450: ab44 add r3, sp, #272 ; 0x110 - 16452: 1b1b subs r3, r3, r4 - 16454: 9304 str r3, [sp, #16] - 16456: e599 b.n 15f8c <_vfiprintf_r+0x244> - 16458: f003 0107 and.w r1, r3, #7 - 1645c: 08db lsrs r3, r3, #3 - 1645e: ea43 7342 orr.w r3, r3, r2, lsl #29 - 16462: 08d2 lsrs r2, r2, #3 - 16464: 3130 adds r1, #48 ; 0x30 - 16466: ea53 0502 orrs.w r5, r3, r2 - 1646a: 4620 mov r0, r4 - 1646c: f804 1d01 strb.w r1, [r4, #-1]! - 16470: d1f2 bne.n 16458 <_vfiprintf_r+0x710> - 16472: 9e02 ldr r6, [sp, #8] - 16474: 07f3 lsls r3, r6, #31 - 16476: d5eb bpl.n 16450 <_vfiprintf_r+0x708> - 16478: 2930 cmp r1, #48 ; 0x30 - 1647a: d0e8 beq.n 1644e <_vfiprintf_r+0x706> - 1647c: 2330 movs r3, #48 ; 0x30 - 1647e: 3802 subs r0, #2 - 16480: f804 3c01 strb.w r3, [r4, #-1] - 16484: ab44 add r3, sp, #272 ; 0x110 - 16486: 1a1b subs r3, r3, r0 - 16488: 9e02 ldr r6, [sp, #8] - 1648a: 9304 str r3, [sp, #16] - 1648c: 4604 mov r4, r0 - 1648e: e57d b.n 15f8c <_vfiprintf_r+0x244> - 16490: 9b04 ldr r3, [sp, #16] - 16492: 941b str r4, [sp, #108] ; 0x6c - 16494: 2201 movs r2, #1 - 16496: 931c str r3, [sp, #112] ; 0x70 - 16498: 931a str r3, [sp, #104] ; 0x68 - 1649a: 9219 str r2, [sp, #100] ; 0x64 - 1649c: f10d 096c add.w r9, sp, #108 ; 0x6c - 164a0: f109 0908 add.w r9, r9, #8 - 164a4: e69e b.n 161e4 <_vfiprintf_r+0x49c> - 164a6: f10d 096c add.w r9, sp, #108 ; 0x6c - 164aa: e491 b.n 15dd0 <_vfiprintf_r+0x88> - 164ac: 9a06 ldr r2, [sp, #24] - 164ae: 9d02 ldr r5, [sp, #8] - 164b0: 1b55 subs r5, r2, r5 - 164b2: 2d00 cmp r5, #0 - 164b4: f77f ae78 ble.w 161a8 <_vfiprintf_r+0x460> - 164b8: 2d10 cmp r5, #16 - 164ba: f340 83d3 ble.w 16c64 <_vfiprintf_r+0xf1c> - 164be: 4619 mov r1, r3 - 164c0: 4643 mov r3, r8 - 164c2: 9409 str r4, [sp, #36] ; 0x24 - 164c4: 46b8 mov r8, r7 - 164c6: 9c03 ldr r4, [sp, #12] - 164c8: 4637 mov r7, r6 - 164ca: 465e mov r6, fp - 164cc: 469b mov fp, r3 - 164ce: e007 b.n 164e0 <_vfiprintf_r+0x798> - 164d0: f100 0c02 add.w ip, r0, #2 - 164d4: f109 0908 add.w r9, r9, #8 - 164d8: 4610 mov r0, r2 - 164da: 3d10 subs r5, #16 - 164dc: 2d10 cmp r5, #16 - 164de: dd1f ble.n 16520 <_vfiprintf_r+0x7d8> - 164e0: 4b67 ldr r3, [pc, #412] ; (16680 <_vfiprintf_r+0x938>) - 164e2: f8c9 3000 str.w r3, [r9] - 164e6: 1c42 adds r2, r0, #1 - 164e8: 3110 adds r1, #16 - 164ea: 2310 movs r3, #16 - 164ec: 2a07 cmp r2, #7 - 164ee: e9cd 2119 strd r2, r1, [sp, #100] ; 0x64 - 164f2: f8c9 3004 str.w r3, [r9, #4] - 164f6: ddeb ble.n 164d0 <_vfiprintf_r+0x788> - 164f8: aa18 add r2, sp, #96 ; 0x60 - 164fa: 2900 cmp r1, #0 - 164fc: f000 808c beq.w 16618 <_vfiprintf_r+0x8d0> - 16500: 4621 mov r1, r4 - 16502: 4630 mov r0, r6 - 16504: f10d 096c add.w r9, sp, #108 ; 0x6c - 16508: f7ff fbe2 bl 15cd0 <__sprint_r.part.0> - 1650c: 2800 cmp r0, #0 - 1650e: f47f addb bne.w 160c8 <_vfiprintf_r+0x380> - 16512: e9dd 0119 ldrd r0, r1, [sp, #100] ; 0x64 - 16516: 3d10 subs r5, #16 - 16518: 2d10 cmp r5, #16 - 1651a: f100 0c01 add.w ip, r0, #1 - 1651e: dcdf bgt.n 164e0 <_vfiprintf_r+0x798> - 16520: 465a mov r2, fp - 16522: 9c09 ldr r4, [sp, #36] ; 0x24 - 16524: 46b3 mov fp, r6 - 16526: 460b mov r3, r1 - 16528: 463e mov r6, r7 - 1652a: 4647 mov r7, r8 - 1652c: 4690 mov r8, r2 - 1652e: 4a54 ldr r2, [pc, #336] ; (16680 <_vfiprintf_r+0x938>) - 16530: f8c9 5004 str.w r5, [r9, #4] - 16534: 442b add r3, r5 - 16536: f1bc 0f07 cmp.w ip, #7 - 1653a: e9cd c319 strd ip, r3, [sp, #100] ; 0x64 - 1653e: f8c9 2000 str.w r2, [r9] - 16542: f340 81a7 ble.w 16894 <_vfiprintf_r+0xb4c> - 16546: 2b00 cmp r3, #0 - 16548: f000 832c beq.w 16ba4 <_vfiprintf_r+0xe5c> - 1654c: 9903 ldr r1, [sp, #12] - 1654e: aa18 add r2, sp, #96 ; 0x60 - 16550: 4658 mov r0, fp - 16552: f7ff fbbd bl 15cd0 <__sprint_r.part.0> - 16556: 2800 cmp r0, #0 - 16558: f47f adb7 bne.w 160ca <_vfiprintf_r+0x382> - 1655c: 9a04 ldr r2, [sp, #16] - 1655e: e9dd 0319 ldrd r0, r3, [sp, #100] ; 0x64 - 16562: 1abd subs r5, r7, r2 - 16564: 2d00 cmp r5, #0 - 16566: f100 0101 add.w r1, r0, #1 - 1656a: f10d 096c add.w r9, sp, #108 ; 0x6c - 1656e: f77f ae20 ble.w 161b2 <_vfiprintf_r+0x46a> - 16572: 2d10 cmp r5, #16 - 16574: dd32 ble.n 165dc <_vfiprintf_r+0x894> - 16576: 4619 mov r1, r3 - 16578: 4643 mov r3, r8 - 1657a: 9409 str r4, [sp, #36] ; 0x24 - 1657c: 46b0 mov r8, r6 - 1657e: 9c03 ldr r4, [sp, #12] - 16580: 465e mov r6, fp - 16582: 2710 movs r7, #16 - 16584: 469b mov fp, r3 - 16586: e007 b.n 16598 <_vfiprintf_r+0x850> - 16588: f100 0c02 add.w ip, r0, #2 - 1658c: f109 0908 add.w r9, r9, #8 - 16590: 4610 mov r0, r2 - 16592: 3d10 subs r5, #16 - 16594: 2d10 cmp r5, #16 - 16596: dd1a ble.n 165ce <_vfiprintf_r+0x886> - 16598: 1c42 adds r2, r0, #1 - 1659a: 4b39 ldr r3, [pc, #228] ; (16680 <_vfiprintf_r+0x938>) - 1659c: 3110 adds r1, #16 - 1659e: 2a07 cmp r2, #7 - 165a0: e9c9 3700 strd r3, r7, [r9] - 165a4: e9cd 2119 strd r2, r1, [sp, #100] ; 0x64 - 165a8: ddee ble.n 16588 <_vfiprintf_r+0x840> - 165aa: aa18 add r2, sp, #96 ; 0x60 - 165ac: b329 cbz r1, 165fa <_vfiprintf_r+0x8b2> - 165ae: 4621 mov r1, r4 - 165b0: 4630 mov r0, r6 - 165b2: f10d 096c add.w r9, sp, #108 ; 0x6c - 165b6: f7ff fb8b bl 15cd0 <__sprint_r.part.0> - 165ba: 2800 cmp r0, #0 - 165bc: f47f ad84 bne.w 160c8 <_vfiprintf_r+0x380> - 165c0: e9dd 0119 ldrd r0, r1, [sp, #100] ; 0x64 - 165c4: 3d10 subs r5, #16 - 165c6: 2d10 cmp r5, #16 - 165c8: f100 0c01 add.w ip, r0, #1 - 165cc: dce4 bgt.n 16598 <_vfiprintf_r+0x850> - 165ce: 465a mov r2, fp - 165d0: 9c09 ldr r4, [sp, #36] ; 0x24 - 165d2: 460b mov r3, r1 - 165d4: 46b3 mov fp, r6 - 165d6: 4661 mov r1, ip - 165d8: 4646 mov r6, r8 - 165da: 4690 mov r8, r2 - 165dc: 4a28 ldr r2, [pc, #160] ; (16680 <_vfiprintf_r+0x938>) - 165de: f8c9 5004 str.w r5, [r9, #4] - 165e2: 442b add r3, r5 - 165e4: 2907 cmp r1, #7 - 165e6: e9cd 1319 strd r1, r3, [sp, #100] ; 0x64 - 165ea: f8c9 2000 str.w r2, [r9] - 165ee: f300 80f3 bgt.w 167d8 <_vfiprintf_r+0xa90> - 165f2: f109 0908 add.w r9, r9, #8 - 165f6: 3101 adds r1, #1 - 165f8: e5db b.n 161b2 <_vfiprintf_r+0x46a> - 165fa: f04f 0c01 mov.w ip, #1 - 165fe: 4608 mov r0, r1 - 16600: f10d 096c add.w r9, sp, #108 ; 0x6c - 16604: e7c5 b.n 16592 <_vfiprintf_r+0x84a> - 16606: 9903 ldr r1, [sp, #12] - 16608: aa18 add r2, sp, #96 ; 0x60 - 1660a: 4658 mov r0, fp - 1660c: f7ff fb60 bl 15cd0 <__sprint_r.part.0> - 16610: 2800 cmp r0, #0 - 16612: f43f adfa beq.w 1620a <_vfiprintf_r+0x4c2> - 16616: e558 b.n 160ca <_vfiprintf_r+0x382> - 16618: f04f 0c01 mov.w ip, #1 - 1661c: 4608 mov r0, r1 - 1661e: f10d 096c add.w r9, sp, #108 ; 0x6c - 16622: e75a b.n 164da <_vfiprintf_r+0x792> - 16624: 2b00 cmp r3, #0 - 16626: f000 810c beq.w 16842 <_vfiprintf_r+0xafa> - 1662a: 9903 ldr r1, [sp, #12] - 1662c: aa18 add r2, sp, #96 ; 0x60 - 1662e: 4658 mov r0, fp - 16630: f7ff fb4e bl 15cd0 <__sprint_r.part.0> - 16634: 2800 cmp r0, #0 - 16636: f47f ad48 bne.w 160ca <_vfiprintf_r+0x382> - 1663a: e9dd 0319 ldrd r0, r3, [sp, #100] ; 0x64 - 1663e: f10d 096c add.w r9, sp, #108 ; 0x6c - 16642: 1c41 adds r1, r0, #1 - 16644: e58e b.n 16164 <_vfiprintf_r+0x41c> - 16646: 2302 movs r3, #2 - 16648: aa11 add r2, sp, #68 ; 0x44 - 1664a: 931c str r3, [sp, #112] ; 0x70 - 1664c: 921b str r2, [sp, #108] ; 0x6c - 1664e: 2101 movs r1, #1 - 16650: f10d 096c add.w r9, sp, #108 ; 0x6c - 16654: 4608 mov r0, r1 - 16656: f109 0908 add.w r9, r9, #8 - 1665a: 1c41 adds r1, r0, #1 - 1665c: e5a0 b.n 161a0 <_vfiprintf_r+0x458> - 1665e: 2d10 cmp r5, #16 - 16660: f340 82e2 ble.w 16c28 <_vfiprintf_r+0xee0> - 16664: e9dd 1319 ldrd r1, r3, [sp, #100] ; 0x64 - 16668: 4618 mov r0, r3 - 1666a: 4643 mov r3, r8 - 1666c: 940f str r4, [sp, #60] ; 0x3c - 1666e: 46b8 mov r8, r7 - 16670: 9c03 ldr r4, [sp, #12] - 16672: 4637 mov r7, r6 - 16674: 465e mov r6, fp - 16676: 469b mov fp, r3 - 16678: e00c b.n 16694 <_vfiprintf_r+0x94c> - 1667a: bf00 nop - 1667c: 00018924 .word 0x00018924 - 16680: 00018bb0 .word 0x00018bb0 - 16684: f101 0c02 add.w ip, r1, #2 - 16688: f109 0908 add.w r9, r9, #8 - 1668c: 4611 mov r1, r2 - 1668e: 3d10 subs r5, #16 - 16690: 2d10 cmp r5, #16 - 16692: dd1d ble.n 166d0 <_vfiprintf_r+0x988> - 16694: 4bb2 ldr r3, [pc, #712] ; (16960 <_vfiprintf_r+0xc18>) - 16696: f8c9 3000 str.w r3, [r9] - 1669a: 1c4a adds r2, r1, #1 - 1669c: 3010 adds r0, #16 - 1669e: 2310 movs r3, #16 - 166a0: 2a07 cmp r2, #7 - 166a2: e9cd 2019 strd r2, r0, [sp, #100] ; 0x64 - 166a6: f8c9 3004 str.w r3, [r9, #4] - 166aa: ddeb ble.n 16684 <_vfiprintf_r+0x93c> - 166ac: aa18 add r2, sp, #96 ; 0x60 - 166ae: b330 cbz r0, 166fe <_vfiprintf_r+0x9b6> - 166b0: 4621 mov r1, r4 - 166b2: 4630 mov r0, r6 - 166b4: f10d 096c add.w r9, sp, #108 ; 0x6c - 166b8: f7ff fb0a bl 15cd0 <__sprint_r.part.0> - 166bc: 2800 cmp r0, #0 - 166be: f47f ad03 bne.w 160c8 <_vfiprintf_r+0x380> - 166c2: e9dd 1019 ldrd r1, r0, [sp, #100] ; 0x64 - 166c6: 3d10 subs r5, #16 - 166c8: 2d10 cmp r5, #16 - 166ca: f101 0c01 add.w ip, r1, #1 - 166ce: dce1 bgt.n 16694 <_vfiprintf_r+0x94c> - 166d0: 465a mov r2, fp - 166d2: 9c0f ldr r4, [sp, #60] ; 0x3c - 166d4: 4603 mov r3, r0 - 166d6: 46b3 mov fp, r6 - 166d8: 4660 mov r0, ip - 166da: 463e mov r6, r7 - 166dc: 4647 mov r7, r8 - 166de: 4690 mov r8, r2 - 166e0: 4a9f ldr r2, [pc, #636] ; (16960 <_vfiprintf_r+0xc18>) - 166e2: f8c9 5004 str.w r5, [r9, #4] - 166e6: 442b add r3, r5 - 166e8: 2807 cmp r0, #7 - 166ea: e9cd 0319 strd r0, r3, [sp, #100] ; 0x64 - 166ee: f8c9 2000 str.w r2, [r9] - 166f2: f300 80b6 bgt.w 16862 <_vfiprintf_r+0xb1a> - 166f6: f109 0908 add.w r9, r9, #8 - 166fa: 1c41 adds r1, r0, #1 - 166fc: e51e b.n 1613c <_vfiprintf_r+0x3f4> - 166fe: 4601 mov r1, r0 - 16700: f04f 0c01 mov.w ip, #1 - 16704: f10d 096c add.w r9, sp, #108 ; 0x6c - 16708: e7c1 b.n 1668e <_vfiprintf_r+0x946> - 1670a: 0776 lsls r6, r6, #29 - 1670c: 9319 str r3, [sp, #100] ; 0x64 - 1670e: d54a bpl.n 167a6 <_vfiprintf_r+0xa5e> - 16710: 9a06 ldr r2, [sp, #24] - 16712: 9902 ldr r1, [sp, #8] - 16714: 1a54 subs r4, r2, r1 - 16716: 2c00 cmp r4, #0 - 16718: dd45 ble.n 167a6 <_vfiprintf_r+0xa5e> - 1671a: f10d 096c add.w r9, sp, #108 ; 0x6c - 1671e: 2c10 cmp r4, #16 - 16720: f340 829d ble.w 16c5e <_vfiprintf_r+0xf16> - 16724: 9919 ldr r1, [sp, #100] ; 0x64 - 16726: 9e03 ldr r6, [sp, #12] - 16728: 2510 movs r5, #16 - 1672a: e006 b.n 1673a <_vfiprintf_r+0x9f2> - 1672c: 1c88 adds r0, r1, #2 - 1672e: f109 0908 add.w r9, r9, #8 - 16732: 4611 mov r1, r2 - 16734: 3c10 subs r4, #16 - 16736: 2c10 cmp r4, #16 - 16738: dd1a ble.n 16770 <_vfiprintf_r+0xa28> - 1673a: 1c4a adds r2, r1, #1 - 1673c: 4888 ldr r0, [pc, #544] ; (16960 <_vfiprintf_r+0xc18>) - 1673e: 3310 adds r3, #16 - 16740: 2a07 cmp r2, #7 - 16742: e9c9 0500 strd r0, r5, [r9] - 16746: e9cd 2319 strd r2, r3, [sp, #100] ; 0x64 - 1674a: ddef ble.n 1672c <_vfiprintf_r+0x9e4> - 1674c: aa18 add r2, sp, #96 ; 0x60 - 1674e: b32b cbz r3, 1679c <_vfiprintf_r+0xa54> - 16750: 4631 mov r1, r6 - 16752: 4658 mov r0, fp - 16754: f7ff fabc bl 15cd0 <__sprint_r.part.0> - 16758: 2800 cmp r0, #0 - 1675a: f47f acb6 bne.w 160ca <_vfiprintf_r+0x382> - 1675e: e9dd 1319 ldrd r1, r3, [sp, #100] ; 0x64 - 16762: 3c10 subs r4, #16 - 16764: 2c10 cmp r4, #16 - 16766: f101 0001 add.w r0, r1, #1 - 1676a: f10d 096c add.w r9, sp, #108 ; 0x6c - 1676e: dce4 bgt.n 1673a <_vfiprintf_r+0x9f2> - 16770: 4a7b ldr r2, [pc, #492] ; (16960 <_vfiprintf_r+0xc18>) - 16772: f8c9 4004 str.w r4, [r9, #4] - 16776: 4423 add r3, r4 - 16778: 2807 cmp r0, #7 - 1677a: e9cd 0319 strd r0, r3, [sp, #100] ; 0x64 - 1677e: f8c9 2000 str.w r2, [r9] - 16782: f77f ad37 ble.w 161f4 <_vfiprintf_r+0x4ac> - 16786: b173 cbz r3, 167a6 <_vfiprintf_r+0xa5e> - 16788: 9903 ldr r1, [sp, #12] - 1678a: aa18 add r2, sp, #96 ; 0x60 - 1678c: 4658 mov r0, fp - 1678e: f7ff fa9f bl 15cd0 <__sprint_r.part.0> - 16792: 2800 cmp r0, #0 - 16794: f47f ac99 bne.w 160ca <_vfiprintf_r+0x382> - 16798: 9b1a ldr r3, [sp, #104] ; 0x68 - 1679a: e52b b.n 161f4 <_vfiprintf_r+0x4ac> - 1679c: 2001 movs r0, #1 - 1679e: 4619 mov r1, r3 - 167a0: f10d 096c add.w r9, sp, #108 ; 0x6c - 167a4: e7c6 b.n 16734 <_vfiprintf_r+0x9ec> - 167a6: e9dd 3205 ldrd r3, r2, [sp, #20] - 167aa: 9902 ldr r1, [sp, #8] - 167ac: 428a cmp r2, r1 - 167ae: bfac ite ge - 167b0: 189b addge r3, r3, r2 - 167b2: 185b addlt r3, r3, r1 - 167b4: 9305 str r3, [sp, #20] - 167b6: e528 b.n 1620a <_vfiprintf_r+0x4c2> - 167b8: 9b03 ldr r3, [sp, #12] - 167ba: f9b3 100c ldrsh.w r1, [r3, #12] - 167be: 058f lsls r7, r1, #22 - 167c0: b28a uxth r2, r1 - 167c2: f53f aae0 bmi.w 15d86 <_vfiprintf_r+0x3e> - 167c6: 461d mov r5, r3 - 167c8: 6d98 ldr r0, [r3, #88] ; 0x58 - 167ca: f7fb faed bl 11da8 <__retarget_lock_acquire_recursive> - 167ce: f9b5 100c ldrsh.w r1, [r5, #12] - 167d2: b28a uxth r2, r1 - 167d4: f7ff bad7 b.w 15d86 <_vfiprintf_r+0x3e> - 167d8: 2b00 cmp r3, #0 - 167da: f43f ae59 beq.w 16490 <_vfiprintf_r+0x748> - 167de: 9903 ldr r1, [sp, #12] - 167e0: aa18 add r2, sp, #96 ; 0x60 - 167e2: 4658 mov r0, fp - 167e4: f7ff fa74 bl 15cd0 <__sprint_r.part.0> - 167e8: 2800 cmp r0, #0 - 167ea: f47f ac6e bne.w 160ca <_vfiprintf_r+0x382> - 167ee: 9919 ldr r1, [sp, #100] ; 0x64 - 167f0: 9b1a ldr r3, [sp, #104] ; 0x68 - 167f2: 3101 adds r1, #1 - 167f4: f10d 096c add.w r9, sp, #108 ; 0x6c - 167f8: e4db b.n 161b2 <_vfiprintf_r+0x46a> - 167fa: 9219 str r2, [sp, #100] ; 0x64 - 167fc: f10d 096c add.w r9, sp, #108 ; 0x6c - 16800: e44f b.n 160a2 <_vfiprintf_r+0x35a> - 16802: 2f00 cmp r7, #0 - 16804: f47f abba bne.w 15f7c <_vfiprintf_r+0x234> - 16808: 9e02 ldr r6, [sp, #8] - 1680a: 2700 movs r7, #0 - 1680c: 9704 str r7, [sp, #16] - 1680e: ac44 add r4, sp, #272 ; 0x110 - 16810: f7ff bbbc b.w 15f8c <_vfiprintf_r+0x244> - 16814: 9b02 ldr r3, [sp, #8] - 16816: f013 0310 ands.w r3, r3, #16 - 1681a: d154 bne.n 168c6 <_vfiprintf_r+0xb7e> - 1681c: 9a02 ldr r2, [sp, #8] - 1681e: f012 0040 ands.w r0, r2, #64 ; 0x40 - 16822: f000 8167 beq.w 16af4 <_vfiprintf_r+0xdac> - 16826: 9907 ldr r1, [sp, #28] - 16828: 461a mov r2, r3 - 1682a: f851 3b04 ldr.w r3, [r1], #4 - 1682e: 9107 str r1, [sp, #28] - 16830: b29b uxth r3, r3 - 16832: 2101 movs r1, #1 - 16834: f7ff bbf2 b.w 1601c <_vfiprintf_r+0x2d4> - 16838: 2101 movs r1, #1 - 1683a: 4618 mov r0, r3 - 1683c: f10d 096c add.w r9, sp, #108 ; 0x6c - 16840: e4ae b.n 161a0 <_vfiprintf_r+0x458> - 16842: 9a09 ldr r2, [sp, #36] ; 0x24 - 16844: 2a00 cmp r2, #0 - 16846: d15e bne.n 16906 <_vfiprintf_r+0xbbe> - 16848: 4618 mov r0, r3 - 1684a: 2101 movs r1, #1 - 1684c: f10d 096c add.w r9, sp, #108 ; 0x6c - 16850: e4a6 b.n 161a0 <_vfiprintf_r+0x458> - 16852: 425b negs r3, r3 - 16854: eb62 0242 sbc.w r2, r2, r2, lsl #1 - 16858: 9602 str r6, [sp, #8] - 1685a: 202d movs r0, #45 ; 0x2d - 1685c: 2101 movs r1, #1 - 1685e: f7ff bbde b.w 1601e <_vfiprintf_r+0x2d6> - 16862: 2b00 cmp r3, #0 - 16864: f000 808d beq.w 16982 <_vfiprintf_r+0xc3a> - 16868: 9903 ldr r1, [sp, #12] - 1686a: aa18 add r2, sp, #96 ; 0x60 - 1686c: 4658 mov r0, fp - 1686e: f7ff fa2f bl 15cd0 <__sprint_r.part.0> - 16872: 2800 cmp r0, #0 - 16874: f47f ac29 bne.w 160ca <_vfiprintf_r+0x382> - 16878: e9dd 0319 ldrd r0, r3, [sp, #100] ; 0x64 - 1687c: f10d 096c add.w r9, sp, #108 ; 0x6c - 16880: 1c41 adds r1, r0, #1 - 16882: e45b b.n 1613c <_vfiprintf_r+0x3f4> - 16884: f898 1000 ldrb.w r1, [r8] - 16888: 9307 str r3, [sp, #28] - 1688a: f7ff bac9 b.w 15e20 <_vfiprintf_r+0xd8> - 1688e: ac44 add r4, sp, #272 ; 0x110 - 16890: f7ff bb7c b.w 15f8c <_vfiprintf_r+0x244> - 16894: f109 0908 add.w r9, r9, #8 - 16898: f10c 0101 add.w r1, ip, #1 - 1689c: 4660 mov r0, ip - 1689e: e483 b.n 161a8 <_vfiprintf_r+0x460> - 168a0: f416 7200 ands.w r2, r6, #512 ; 0x200 - 168a4: f040 8191 bne.w 16bca <_vfiprintf_r+0xe82> - 168a8: f851 3b04 ldr.w r3, [r1], #4 - 168ac: 9107 str r1, [sp, #28] - 168ae: f7ff bbb1 b.w 16014 <_vfiprintf_r+0x2cc> - 168b2: 05b3 lsls r3, r6, #22 - 168b4: f100 8182 bmi.w 16bbc <_vfiprintf_r+0xe74> - 168b8: f852 3b04 ldr.w r3, [r2], #4 - 168bc: 9207 str r2, [sp, #28] - 168be: 17da asrs r2, r3, #31 - 168c0: 4611 mov r1, r2 - 168c2: f7ff bb49 b.w 15f58 <_vfiprintf_r+0x210> - 168c6: 9907 ldr r1, [sp, #28] - 168c8: f851 3b04 ldr.w r3, [r1], #4 - 168cc: 9107 str r1, [sp, #28] - 168ce: 2101 movs r1, #1 - 168d0: f7ff bba4 b.w 1601c <_vfiprintf_r+0x2d4> - 168d4: 9b07 ldr r3, [sp, #28] - 168d6: 9805 ldr r0, [sp, #20] - 168d8: f853 1b04 ldr.w r1, [r3], #4 - 168dc: 9307 str r3, [sp, #28] - 168de: 17c2 asrs r2, r0, #31 - 168e0: e9c1 0200 strd r0, r2, [r1] - 168e4: f7ff ba74 b.w 15dd0 <_vfiprintf_r+0x88> - 168e8: 9b0c ldr r3, [sp, #48] ; 0x30 - 168ea: 2b00 cmp r3, #0 - 168ec: f43f ab1d beq.w 15f2a <_vfiprintf_r+0x1e2> - 168f0: 9b0c ldr r3, [sp, #48] ; 0x30 - 168f2: 781b ldrb r3, [r3, #0] - 168f4: 2b00 cmp r3, #0 - 168f6: f43f ab18 beq.w 15f2a <_vfiprintf_r+0x1e2> - 168fa: f898 1000 ldrb.w r1, [r8] - 168fe: f446 6680 orr.w r6, r6, #1024 ; 0x400 - 16902: f7ff ba8d b.w 15e20 <_vfiprintf_r+0xd8> - 16906: 2302 movs r3, #2 - 16908: aa11 add r2, sp, #68 ; 0x44 - 1690a: 931c str r3, [sp, #112] ; 0x70 - 1690c: 921b str r2, [sp, #108] ; 0x6c - 1690e: 2001 movs r0, #1 - 16910: f10d 096c add.w r9, sp, #108 ; 0x6c - 16914: e69f b.n 16656 <_vfiprintf_r+0x90e> - 16916: 9602 str r6, [sp, #8] - 16918: e552 b.n 163c0 <_vfiprintf_r+0x678> - 1691a: 4b12 ldr r3, [pc, #72] ; (16964 <_vfiprintf_r+0xc1c>) - 1691c: 930b str r3, [sp, #44] ; 0x2c - 1691e: f016 0220 ands.w r2, r6, #32 - 16922: d05f beq.n 169e4 <_vfiprintf_r+0xc9c> - 16924: 9b07 ldr r3, [sp, #28] - 16926: 3307 adds r3, #7 - 16928: f023 0307 bic.w r3, r3, #7 - 1692c: 4618 mov r0, r3 - 1692e: 685a ldr r2, [r3, #4] - 16930: f850 3b08 ldr.w r3, [r0], #8 - 16934: 9007 str r0, [sp, #28] - 16936: 07f4 lsls r4, r6, #31 - 16938: d509 bpl.n 1694e <_vfiprintf_r+0xc06> - 1693a: ea53 0002 orrs.w r0, r3, r2 - 1693e: d006 beq.n 1694e <_vfiprintf_r+0xc06> - 16940: f88d 1045 strb.w r1, [sp, #69] ; 0x45 - 16944: 2130 movs r1, #48 ; 0x30 - 16946: f046 0602 orr.w r6, r6, #2 - 1694a: f88d 1044 strb.w r1, [sp, #68] ; 0x44 - 1694e: f426 6180 bic.w r1, r6, #1024 ; 0x400 - 16952: 9102 str r1, [sp, #8] - 16954: 2102 movs r1, #2 - 16956: f7ff bb61 b.w 1601c <_vfiprintf_r+0x2d4> - 1695a: 4b03 ldr r3, [pc, #12] ; (16968 <_vfiprintf_r+0xc20>) - 1695c: 930b str r3, [sp, #44] ; 0x2c - 1695e: e7de b.n 1691e <_vfiprintf_r+0xbd6> - 16960: 00018ba0 .word 0x00018ba0 - 16964: 00018924 .word 0x00018924 - 16968: 00018938 .word 0x00018938 - 1696c: 9b07 ldr r3, [sp, #28] - 1696e: 2101 movs r1, #1 - 16970: f853 2b04 ldr.w r2, [r3], #4 - 16974: 9102 str r1, [sp, #8] - 16976: f88d 20ac strb.w r2, [sp, #172] ; 0xac - 1697a: 9307 str r3, [sp, #28] - 1697c: 9104 str r1, [sp, #16] - 1697e: ac2b add r4, sp, #172 ; 0xac - 16980: e4ba b.n 162f8 <_vfiprintf_r+0x5b0> - 16982: f89d 2043 ldrb.w r2, [sp, #67] ; 0x43 - 16986: 2a00 cmp r2, #0 - 16988: f040 8126 bne.w 16bd8 <_vfiprintf_r+0xe90> - 1698c: 9a09 ldr r2, [sp, #36] ; 0x24 - 1698e: 2a00 cmp r2, #0 - 16990: f47f ae59 bne.w 16646 <_vfiprintf_r+0x8fe> - 16994: 4618 mov r0, r3 - 16996: 2101 movs r1, #1 - 16998: f10d 096c add.w r9, sp, #108 ; 0x6c - 1699c: e404 b.n 161a8 <_vfiprintf_r+0x460> - 1699e: 2100 movs r1, #0 - 169a0: 2208 movs r2, #8 - 169a2: a816 add r0, sp, #88 ; 0x58 - 169a4: 9413 str r4, [sp, #76] ; 0x4c - 169a6: f7fa fbe5 bl 11174 - 169aa: 1c79 adds r1, r7, #1 - 169ac: f000 80b2 beq.w 16b14 <_vfiprintf_r+0xdcc> - 169b0: 2500 movs r5, #0 - 169b2: 9407 str r4, [sp, #28] - 169b4: 462c mov r4, r5 - 169b6: e00c b.n 169d2 <_vfiprintf_r+0xc8a> - 169b8: a92b add r1, sp, #172 ; 0xac - 169ba: 4658 mov r0, fp - 169bc: f7fe f83a bl 14a34 <_wcrtomb_r> - 169c0: 1c42 adds r2, r0, #1 - 169c2: 4420 add r0, r4 - 169c4: f000 8161 beq.w 16c8a <_vfiprintf_r+0xf42> - 169c8: 42b8 cmp r0, r7 - 169ca: dc08 bgt.n 169de <_vfiprintf_r+0xc96> - 169cc: f000 8165 beq.w 16c9a <_vfiprintf_r+0xf52> - 169d0: 4604 mov r4, r0 - 169d2: 9a13 ldr r2, [sp, #76] ; 0x4c - 169d4: 5952 ldr r2, [r2, r5] - 169d6: ab16 add r3, sp, #88 ; 0x58 - 169d8: 3504 adds r5, #4 - 169da: 2a00 cmp r2, #0 - 169dc: d1ec bne.n 169b8 <_vfiprintf_r+0xc70> - 169de: 9404 str r4, [sp, #16] - 169e0: 9c07 ldr r4, [sp, #28] - 169e2: e0a5 b.n 16b30 <_vfiprintf_r+0xde8> - 169e4: f016 0310 ands.w r3, r6, #16 - 169e8: 9807 ldr r0, [sp, #28] - 169ea: d10c bne.n 16a06 <_vfiprintf_r+0xcbe> - 169ec: f016 0440 ands.w r4, r6, #64 ; 0x40 - 169f0: d005 beq.n 169fe <_vfiprintf_r+0xcb6> - 169f2: 461a mov r2, r3 - 169f4: f850 3b04 ldr.w r3, [r0], #4 - 169f8: 9007 str r0, [sp, #28] - 169fa: b29b uxth r3, r3 - 169fc: e79b b.n 16936 <_vfiprintf_r+0xbee> - 169fe: f416 7200 ands.w r2, r6, #512 ; 0x200 - 16a02: f040 80d5 bne.w 16bb0 <_vfiprintf_r+0xe68> - 16a06: f850 3b04 ldr.w r3, [r0], #4 - 16a0a: 9007 str r0, [sp, #28] - 16a0c: e793 b.n 16936 <_vfiprintf_r+0xbee> - 16a0e: 9902 ldr r1, [sp, #8] - 16a10: f8cd 8020 str.w r8, [sp, #32] - 16a14: f401 6680 and.w r6, r1, #1024 ; 0x400 - 16a18: f8dd 8030 ldr.w r8, [sp, #48] ; 0x30 - 16a1c: 9704 str r7, [sp, #16] - 16a1e: f04f 0c00 mov.w ip, #0 - 16a22: ac44 add r4, sp, #272 ; 0x110 - 16a24: e005 b.n 16a32 <_vfiprintf_r+0xcea> - 16a26: 2b0a cmp r3, #10 - 16a28: f172 0200 sbcs.w r2, r2, #0 - 16a2c: d336 bcc.n 16a9c <_vfiprintf_r+0xd54> - 16a2e: 463b mov r3, r7 - 16a30: 462a mov r2, r5 - 16a32: f8df e290 ldr.w lr, [pc, #656] ; 16cc4 <_vfiprintf_r+0xf7c> - 16a36: 1899 adds r1, r3, r2 - 16a38: f141 0100 adc.w r1, r1, #0 - 16a3c: fbae 0501 umull r0, r5, lr, r1 - 16a40: f025 0003 bic.w r0, r5, #3 - 16a44: eb00 0095 add.w r0, r0, r5, lsr #2 - 16a48: 1a09 subs r1, r1, r0 - 16a4a: 1a58 subs r0, r3, r1 - 16a4c: f04f 35cc mov.w r5, #3435973836 ; 0xcccccccc - 16a50: f162 0700 sbc.w r7, r2, #0 - 16a54: fb05 f500 mul.w r5, r5, r0 - 16a58: fb0e 5507 mla r5, lr, r7, r5 - 16a5c: fba0 700e umull r7, r0, r0, lr - 16a60: 4405 add r5, r0 - 16a62: f007 0e01 and.w lr, r7, #1 - 16a66: 2005 movs r0, #5 - 16a68: fbae 0e00 umull r0, lr, lr, r0 - 16a6c: 1840 adds r0, r0, r1 - 16a6e: 087f lsrs r7, r7, #1 - 16a70: 3030 adds r0, #48 ; 0x30 - 16a72: f804 0c01 strb.w r0, [r4, #-1] - 16a76: ea47 77c5 orr.w r7, r7, r5, lsl #31 - 16a7a: f10c 0c01 add.w ip, ip, #1 - 16a7e: 3c01 subs r4, #1 - 16a80: 086d lsrs r5, r5, #1 - 16a82: 2e00 cmp r6, #0 - 16a84: d0cf beq.n 16a26 <_vfiprintf_r+0xcde> - 16a86: f898 1000 ldrb.w r1, [r8] - 16a8a: 4561 cmp r1, ip - 16a8c: d1cb bne.n 16a26 <_vfiprintf_r+0xcde> - 16a8e: f1bc 0fff cmp.w ip, #255 ; 0xff - 16a92: d0c8 beq.n 16a26 <_vfiprintf_r+0xcde> - 16a94: 2b0a cmp r3, #10 - 16a96: f172 0200 sbcs.w r2, r2, #0 - 16a9a: d26c bcs.n 16b76 <_vfiprintf_r+0xe2e> - 16a9c: ab44 add r3, sp, #272 ; 0x110 - 16a9e: 1b1b subs r3, r3, r4 - 16aa0: 9f04 ldr r7, [sp, #16] - 16aa2: f8cd 8030 str.w r8, [sp, #48] ; 0x30 - 16aa6: 9e02 ldr r6, [sp, #8] - 16aa8: f8dd 8020 ldr.w r8, [sp, #32] - 16aac: 9304 str r3, [sp, #16] - 16aae: f7ff ba6d b.w 15f8c <_vfiprintf_r+0x244> - 16ab2: 9602 str r6, [sp, #8] - 16ab4: f7ff ba5d b.w 15f72 <_vfiprintf_r+0x22a> - 16ab8: 4658 mov r0, fp - 16aba: f7fa fa5f bl 10f7c <__sinit> - 16abe: f7ff b95a b.w 15d76 <_vfiprintf_r+0x2e> - 16ac2: 2901 cmp r1, #1 - 16ac4: 9602 str r6, [sp, #8] - 16ac6: f47f acb2 bne.w 1642e <_vfiprintf_r+0x6e6> - 16aca: f7ff ba57 b.w 15f7c <_vfiprintf_r+0x234> - 16ace: 9b07 ldr r3, [sp, #28] - 16ad0: 9905 ldr r1, [sp, #20] - 16ad2: f853 2b04 ldr.w r2, [r3], #4 - 16ad6: 6011 str r1, [r2, #0] - 16ad8: 9307 str r3, [sp, #28] - 16ada: f7ff b979 b.w 15dd0 <_vfiprintf_r+0x88> - 16ade: 2f06 cmp r7, #6 - 16ae0: 463b mov r3, r7 - 16ae2: 9a02 ldr r2, [sp, #8] - 16ae4: 4c78 ldr r4, [pc, #480] ; (16cc8 <_vfiprintf_r+0xf80>) - 16ae6: 9207 str r2, [sp, #28] - 16ae8: bf28 it cs - 16aea: 2306 movcs r3, #6 - 16aec: 9304 str r3, [sp, #16] - 16aee: 9302 str r3, [sp, #8] - 16af0: f7ff bb0d b.w 1610e <_vfiprintf_r+0x3c6> - 16af4: 9b02 ldr r3, [sp, #8] - 16af6: 9907 ldr r1, [sp, #28] - 16af8: f413 7200 ands.w r2, r3, #512 ; 0x200 - 16afc: bf14 ite ne - 16afe: f851 3b04 ldrne.w r3, [r1], #4 - 16b02: f851 3b04 ldreq.w r3, [r1], #4 - 16b06: 9107 str r1, [sp, #28] - 16b08: bf1c itt ne - 16b0a: 4602 movne r2, r0 - 16b0c: b2db uxtbne r3, r3 - 16b0e: 2101 movs r1, #1 - 16b10: f7ff ba84 b.w 1601c <_vfiprintf_r+0x2d4> - 16b14: ab16 add r3, sp, #88 ; 0x58 - 16b16: 9300 str r3, [sp, #0] - 16b18: 2300 movs r3, #0 - 16b1a: 4619 mov r1, r3 - 16b1c: aa13 add r2, sp, #76 ; 0x4c - 16b1e: 4658 mov r0, fp - 16b20: f7fd ffae bl 14a80 <_wcsrtombs_r> - 16b24: 4603 mov r3, r0 - 16b26: 3301 adds r3, #1 - 16b28: 9004 str r0, [sp, #16] - 16b2a: f000 80ae beq.w 16c8a <_vfiprintf_r+0xf42> - 16b2e: 9413 str r4, [sp, #76] ; 0x4c - 16b30: 9b04 ldr r3, [sp, #16] - 16b32: b37b cbz r3, 16b94 <_vfiprintf_r+0xe4c> - 16b34: 2b63 cmp r3, #99 ; 0x63 - 16b36: dc62 bgt.n 16bfe <_vfiprintf_r+0xeb6> - 16b38: 2300 movs r3, #0 - 16b3a: 9308 str r3, [sp, #32] - 16b3c: ac2b add r4, sp, #172 ; 0xac - 16b3e: 2208 movs r2, #8 - 16b40: 2100 movs r1, #0 - 16b42: a816 add r0, sp, #88 ; 0x58 - 16b44: f7fa fb16 bl 11174 - 16b48: 9d04 ldr r5, [sp, #16] - 16b4a: ab16 add r3, sp, #88 ; 0x58 - 16b4c: 9300 str r3, [sp, #0] - 16b4e: aa13 add r2, sp, #76 ; 0x4c - 16b50: 462b mov r3, r5 - 16b52: 4621 mov r1, r4 - 16b54: 4658 mov r0, fp - 16b56: f7fd ff93 bl 14a80 <_wcsrtombs_r> - 16b5a: 4285 cmp r5, r0 - 16b5c: f040 80ab bne.w 16cb6 <_vfiprintf_r+0xf6e> - 16b60: 9b02 ldr r3, [sp, #8] - 16b62: 9a04 ldr r2, [sp, #16] - 16b64: 9307 str r3, [sp, #28] - 16b66: 2300 movs r3, #0 - 16b68: 54a3 strb r3, [r4, r2] - 16b6a: 461f mov r7, r3 - 16b6c: ea22 73e2 bic.w r3, r2, r2, asr #31 - 16b70: 9302 str r3, [sp, #8] - 16b72: f7ff ba12 b.w 15f9a <_vfiprintf_r+0x252> - 16b76: 9b0e ldr r3, [sp, #56] ; 0x38 - 16b78: 990d ldr r1, [sp, #52] ; 0x34 - 16b7a: 1ae4 subs r4, r4, r3 - 16b7c: 461a mov r2, r3 - 16b7e: 4620 mov r0, r4 - 16b80: f7fa fc44 bl 1140c - 16b84: f898 3001 ldrb.w r3, [r8, #1] - 16b88: b10b cbz r3, 16b8e <_vfiprintf_r+0xe46> - 16b8a: f108 0801 add.w r8, r8, #1 - 16b8e: f04f 0c00 mov.w ip, #0 - 16b92: e74c b.n 16a2e <_vfiprintf_r+0xce6> - 16b94: 9b02 ldr r3, [sp, #8] - 16b96: 9307 str r3, [sp, #28] - 16b98: 9b04 ldr r3, [sp, #16] - 16b9a: 9302 str r3, [sp, #8] - 16b9c: 461f mov r7, r3 - 16b9e: 9308 str r3, [sp, #32] - 16ba0: f7ff b9fb b.w 15f9a <_vfiprintf_r+0x252> - 16ba4: 2101 movs r1, #1 - 16ba6: 4618 mov r0, r3 - 16ba8: f10d 096c add.w r9, sp, #108 ; 0x6c - 16bac: f7ff bafc b.w 161a8 <_vfiprintf_r+0x460> - 16bb0: f850 3b04 ldr.w r3, [r0], #4 - 16bb4: 9007 str r0, [sp, #28] - 16bb6: 4622 mov r2, r4 - 16bb8: b2db uxtb r3, r3 - 16bba: e6bc b.n 16936 <_vfiprintf_r+0xbee> - 16bbc: f912 3b04 ldrsb.w r3, [r2], #4 - 16bc0: 9207 str r2, [sp, #28] - 16bc2: 17da asrs r2, r3, #31 - 16bc4: 4611 mov r1, r2 - 16bc6: f7ff b9c7 b.w 15f58 <_vfiprintf_r+0x210> - 16bca: f851 3b04 ldr.w r3, [r1], #4 - 16bce: 9107 str r1, [sp, #28] - 16bd0: 4602 mov r2, r0 - 16bd2: b2db uxtb r3, r3 - 16bd4: f7ff ba1e b.w 16014 <_vfiprintf_r+0x2cc> - 16bd8: 2301 movs r3, #1 - 16bda: 931c str r3, [sp, #112] ; 0x70 - 16bdc: 2101 movs r1, #1 - 16bde: f10d 0343 add.w r3, sp, #67 ; 0x43 - 16be2: 931b str r3, [sp, #108] ; 0x6c - 16be4: f10d 096c add.w r9, sp, #108 ; 0x6c - 16be8: 460b mov r3, r1 - 16bea: f7ff bab7 b.w 1615c <_vfiprintf_r+0x414> - 16bee: 9b07 ldr r3, [sp, #28] - 16bf0: 9905 ldr r1, [sp, #20] - 16bf2: f853 2b04 ldr.w r2, [r3], #4 - 16bf6: 9307 str r3, [sp, #28] - 16bf8: 8011 strh r1, [r2, #0] - 16bfa: f7ff b8e9 b.w 15dd0 <_vfiprintf_r+0x88> - 16bfe: 1c59 adds r1, r3, #1 - 16c00: 4658 mov r0, fp - 16c02: f7f9 fa65 bl 100d0 <_malloc_r> - 16c06: 4604 mov r4, r0 - 16c08: 2800 cmp r0, #0 - 16c0a: d03e beq.n 16c8a <_vfiprintf_r+0xf42> - 16c0c: 9008 str r0, [sp, #32] - 16c0e: e796 b.n 16b3e <_vfiprintf_r+0xdf6> - 16c10: 6d88 ldr r0, [r1, #88] ; 0x58 - 16c12: f7fb f8cb bl 11dac <__retarget_lock_release_recursive> - 16c16: f7ff b9e3 b.w 15fe0 <_vfiprintf_r+0x298> - 16c1a: 9b02 ldr r3, [sp, #8] - 16c1c: 9704 str r7, [sp, #16] - 16c1e: 9702 str r7, [sp, #8] - 16c20: 9307 str r3, [sp, #28] - 16c22: 9f08 ldr r7, [sp, #32] - 16c24: f7ff b9b9 b.w 15f9a <_vfiprintf_r+0x252> - 16c28: 9819 ldr r0, [sp, #100] ; 0x64 - 16c2a: 9b1a ldr r3, [sp, #104] ; 0x68 - 16c2c: 3001 adds r0, #1 - 16c2e: e557 b.n 166e0 <_vfiprintf_r+0x998> - 16c30: 9b02 ldr r3, [sp, #8] - 16c32: 9307 str r3, [sp, #28] - 16c34: 4620 mov r0, r4 - 16c36: f7fb f923 bl 11e80 - 16c3a: ea20 73e0 bic.w r3, r0, r0, asr #31 - 16c3e: 462f mov r7, r5 - 16c40: 9004 str r0, [sp, #16] - 16c42: 9302 str r3, [sp, #8] - 16c44: 9508 str r5, [sp, #32] - 16c46: f7ff b9a8 b.w 15f9a <_vfiprintf_r+0x252> - 16c4a: 9903 ldr r1, [sp, #12] - 16c4c: aa18 add r2, sp, #96 ; 0x60 - 16c4e: 4658 mov r0, fp - 16c50: f7ff f83e bl 15cd0 <__sprint_r.part.0> - 16c54: 2800 cmp r0, #0 - 16c56: f43f aa2e beq.w 160b6 <_vfiprintf_r+0x36e> - 16c5a: f7ff ba3c b.w 160d6 <_vfiprintf_r+0x38e> - 16c5e: 9819 ldr r0, [sp, #100] ; 0x64 - 16c60: 3001 adds r0, #1 - 16c62: e585 b.n 16770 <_vfiprintf_r+0xa28> - 16c64: 468c mov ip, r1 - 16c66: e462 b.n 1652e <_vfiprintf_r+0x7e6> - 16c68: 9b03 ldr r3, [sp, #12] - 16c6a: 6e5b ldr r3, [r3, #100] ; 0x64 - 16c6c: 07d9 lsls r1, r3, #31 - 16c6e: d407 bmi.n 16c80 <_vfiprintf_r+0xf38> - 16c70: 9b03 ldr r3, [sp, #12] - 16c72: 899b ldrh r3, [r3, #12] - 16c74: 059a lsls r2, r3, #22 - 16c76: d403 bmi.n 16c80 <_vfiprintf_r+0xf38> - 16c78: 9b03 ldr r3, [sp, #12] - 16c7a: 6d98 ldr r0, [r3, #88] ; 0x58 - 16c7c: f7fb f896 bl 11dac <__retarget_lock_release_recursive> - 16c80: f04f 33ff mov.w r3, #4294967295 ; 0xffffffff - 16c84: 9305 str r3, [sp, #20] - 16c86: f7ff ba33 b.w 160f0 <_vfiprintf_r+0x3a8> - 16c8a: 9a03 ldr r2, [sp, #12] - 16c8c: f9b2 300c ldrsh.w r3, [r2, #12] - 16c90: f043 0340 orr.w r3, r3, #64 ; 0x40 - 16c94: 8193 strh r3, [r2, #12] - 16c96: f7ff ba21 b.w 160dc <_vfiprintf_r+0x394> - 16c9a: 9c07 ldr r4, [sp, #28] - 16c9c: 9704 str r7, [sp, #16] - 16c9e: e747 b.n 16b30 <_vfiprintf_r+0xde8> - 16ca0: 9b07 ldr r3, [sp, #28] - 16ca2: f898 1001 ldrb.w r1, [r8, #1] - 16ca6: f853 7b04 ldr.w r7, [r3], #4 - 16caa: 9307 str r3, [sp, #28] - 16cac: 4690 mov r8, r2 - 16cae: ea47 77e7 orr.w r7, r7, r7, asr #31 - 16cb2: f7ff b8b5 b.w 15e20 <_vfiprintf_r+0xd8> - 16cb6: 9a03 ldr r2, [sp, #12] - 16cb8: 8993 ldrh r3, [r2, #12] - 16cba: f043 0340 orr.w r3, r3, #64 ; 0x40 - 16cbe: 8193 strh r3, [r2, #12] - 16cc0: f7ff ba03 b.w 160ca <_vfiprintf_r+0x382> - 16cc4: cccccccd .word 0xcccccccd - 16cc8: 0001894c .word 0x0001894c - -00016ccc <__sbprintf>: - 16ccc: b5f0 push {r4, r5, r6, r7, lr} - 16cce: 461f mov r7, r3 - 16cd0: 898b ldrh r3, [r1, #12] - 16cd2: f2ad 4d6c subw sp, sp, #1132 ; 0x46c - 16cd6: f023 0302 bic.w r3, r3, #2 - 16cda: f8ad 300c strh.w r3, [sp, #12] - 16cde: 6e4b ldr r3, [r1, #100] ; 0x64 - 16ce0: 9319 str r3, [sp, #100] ; 0x64 - 16ce2: 89cb ldrh r3, [r1, #14] - 16ce4: f8ad 300e strh.w r3, [sp, #14] - 16ce8: 69cb ldr r3, [r1, #28] - 16cea: 9307 str r3, [sp, #28] - 16cec: 6a4b ldr r3, [r1, #36] ; 0x24 - 16cee: 9309 str r3, [sp, #36] ; 0x24 - 16cf0: ab1a add r3, sp, #104 ; 0x68 - 16cf2: 9300 str r3, [sp, #0] - 16cf4: 9304 str r3, [sp, #16] - 16cf6: f44f 6380 mov.w r3, #1024 ; 0x400 - 16cfa: 4615 mov r5, r2 - 16cfc: 4606 mov r6, r0 - 16cfe: 9302 str r3, [sp, #8] - 16d00: 9305 str r3, [sp, #20] - 16d02: a816 add r0, sp, #88 ; 0x58 - 16d04: 2300 movs r3, #0 - 16d06: 460c mov r4, r1 - 16d08: 9306 str r3, [sp, #24] - 16d0a: f7fb f849 bl 11da0 <__retarget_lock_init_recursive> - 16d0e: 462a mov r2, r5 - 16d10: 463b mov r3, r7 - 16d12: 4669 mov r1, sp - 16d14: 4630 mov r0, r6 - 16d16: f7ff f817 bl 15d48 <_vfiprintf_r> - 16d1a: 1e05 subs r5, r0, #0 - 16d1c: db07 blt.n 16d2e <__sbprintf+0x62> - 16d1e: 4669 mov r1, sp - 16d20: 4630 mov r0, r6 - 16d22: f7fd fd4f bl 147c4 <_fflush_r> - 16d26: 2800 cmp r0, #0 - 16d28: bf18 it ne - 16d2a: f04f 35ff movne.w r5, #4294967295 ; 0xffffffff - 16d2e: f8bd 300c ldrh.w r3, [sp, #12] - 16d32: 065b lsls r3, r3, #25 - 16d34: d503 bpl.n 16d3e <__sbprintf+0x72> - 16d36: 89a3 ldrh r3, [r4, #12] - 16d38: f043 0340 orr.w r3, r3, #64 ; 0x40 - 16d3c: 81a3 strh r3, [r4, #12] - 16d3e: 9816 ldr r0, [sp, #88] ; 0x58 - 16d40: f7fb f830 bl 11da4 <__retarget_lock_close_recursive> - 16d44: 4628 mov r0, r5 - 16d46: f20d 4d6c addw sp, sp, #1132 ; 0x46c - 16d4a: bdf0 pop {r4, r5, r6, r7, pc} - -00016d4c <__sfvwrite_r>: - 16d4c: 6893 ldr r3, [r2, #8] - 16d4e: 2b00 cmp r3, #0 - 16d50: f000 8081 beq.w 16e56 <__sfvwrite_r+0x10a> - 16d54: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 16d58: f9b1 300c ldrsh.w r3, [r1, #12] - 16d5c: 460c mov r4, r1 - 16d5e: 0719 lsls r1, r3, #28 - 16d60: 4680 mov r8, r0 - 16d62: b083 sub sp, #12 - 16d64: 4617 mov r7, r2 - 16d66: b298 uxth r0, r3 - 16d68: d523 bpl.n 16db2 <__sfvwrite_r+0x66> - 16d6a: 6923 ldr r3, [r4, #16] - 16d6c: b30b cbz r3, 16db2 <__sfvwrite_r+0x66> - 16d6e: f010 0302 ands.w r3, r0, #2 - 16d72: 683d ldr r5, [r7, #0] - 16d74: d02b beq.n 16dce <__sfvwrite_r+0x82> - 16d76: f04f 0a00 mov.w sl, #0 - 16d7a: f8df b2b4 ldr.w fp, [pc, #692] ; 17030 <__sfvwrite_r+0x2e4> - 16d7e: 4656 mov r6, sl - 16d80: 455e cmp r6, fp - 16d82: 4633 mov r3, r6 - 16d84: 4652 mov r2, sl - 16d86: bf28 it cs - 16d88: 465b movcs r3, fp - 16d8a: 4640 mov r0, r8 - 16d8c: 2e00 cmp r6, #0 - 16d8e: d04f beq.n 16e30 <__sfvwrite_r+0xe4> - 16d90: 69e1 ldr r1, [r4, #28] - 16d92: f8d4 c024 ldr.w ip, [r4, #36] ; 0x24 - 16d96: 47e0 blx ip - 16d98: 2800 cmp r0, #0 - 16d9a: dd52 ble.n 16e42 <__sfvwrite_r+0xf6> - 16d9c: 68bb ldr r3, [r7, #8] - 16d9e: 1a1b subs r3, r3, r0 - 16da0: 4482 add sl, r0 - 16da2: 1a36 subs r6, r6, r0 - 16da4: 60bb str r3, [r7, #8] - 16da6: 2b00 cmp r3, #0 - 16da8: d1ea bne.n 16d80 <__sfvwrite_r+0x34> - 16daa: 2000 movs r0, #0 - 16dac: b003 add sp, #12 - 16dae: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 16db2: 4621 mov r1, r4 - 16db4: 4640 mov r0, r8 - 16db6: f000 f93d bl 17034 <__swsetup_r> - 16dba: 2800 cmp r0, #0 - 16dbc: f040 8134 bne.w 17028 <__sfvwrite_r+0x2dc> - 16dc0: f9b4 300c ldrsh.w r3, [r4, #12] - 16dc4: 683d ldr r5, [r7, #0] - 16dc6: b298 uxth r0, r3 - 16dc8: f010 0302 ands.w r3, r0, #2 - 16dcc: d1d3 bne.n 16d76 <__sfvwrite_r+0x2a> - 16dce: f010 0901 ands.w r9, r0, #1 - 16dd2: d142 bne.n 16e5a <__sfvwrite_r+0x10e> - 16dd4: 464e mov r6, r9 - 16dd6: b33e cbz r6, 16e28 <__sfvwrite_r+0xdc> - 16dd8: 0582 lsls r2, r0, #22 - 16dda: f8d4 b008 ldr.w fp, [r4, #8] - 16dde: f140 8081 bpl.w 16ee4 <__sfvwrite_r+0x198> - 16de2: 45b3 cmp fp, r6 - 16de4: 465a mov r2, fp - 16de6: f200 80b1 bhi.w 16f4c <__sfvwrite_r+0x200> - 16dea: f410 6f90 tst.w r0, #1152 ; 0x480 - 16dee: f040 80be bne.w 16f6e <__sfvwrite_r+0x222> - 16df2: 6820 ldr r0, [r4, #0] - 16df4: 9201 str r2, [sp, #4] - 16df6: 4649 mov r1, r9 - 16df8: f7fa f940 bl 1107c - 16dfc: 68a3 ldr r3, [r4, #8] - 16dfe: 9a01 ldr r2, [sp, #4] - 16e00: eba3 010b sub.w r1, r3, fp - 16e04: 6823 ldr r3, [r4, #0] - 16e06: 60a1 str r1, [r4, #8] - 16e08: 4413 add r3, r2 - 16e0a: 46b2 mov sl, r6 - 16e0c: 6023 str r3, [r4, #0] - 16e0e: 2600 movs r6, #0 - 16e10: 68bb ldr r3, [r7, #8] - 16e12: eba3 030a sub.w r3, r3, sl - 16e16: 44d1 add r9, sl - 16e18: 60bb str r3, [r7, #8] - 16e1a: 2b00 cmp r3, #0 - 16e1c: d0c5 beq.n 16daa <__sfvwrite_r+0x5e> - 16e1e: f9b4 000c ldrsh.w r0, [r4, #12] - 16e22: b280 uxth r0, r0 - 16e24: 2e00 cmp r6, #0 - 16e26: d1d7 bne.n 16dd8 <__sfvwrite_r+0x8c> - 16e28: e9d5 9600 ldrd r9, r6, [r5] - 16e2c: 3508 adds r5, #8 - 16e2e: e7d2 b.n 16dd6 <__sfvwrite_r+0x8a> - 16e30: e9d5 a600 ldrd sl, r6, [r5] - 16e34: 3508 adds r5, #8 - 16e36: e7a3 b.n 16d80 <__sfvwrite_r+0x34> - 16e38: 4621 mov r1, r4 - 16e3a: 4640 mov r0, r8 - 16e3c: f7fd fcc2 bl 147c4 <_fflush_r> - 16e40: b380 cbz r0, 16ea4 <__sfvwrite_r+0x158> - 16e42: f9b4 300c ldrsh.w r3, [r4, #12] - 16e46: f043 0340 orr.w r3, r3, #64 ; 0x40 - 16e4a: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 16e4e: 81a3 strh r3, [r4, #12] - 16e50: b003 add sp, #12 - 16e52: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 16e56: 2000 movs r0, #0 - 16e58: 4770 bx lr - 16e5a: 461e mov r6, r3 - 16e5c: 46ba mov sl, r7 - 16e5e: 4699 mov r9, r3 - 16e60: 4618 mov r0, r3 - 16e62: 461f mov r7, r3 - 16e64: b366 cbz r6, 16ec0 <__sfvwrite_r+0x174> - 16e66: b388 cbz r0, 16ecc <__sfvwrite_r+0x180> - 16e68: 464a mov r2, r9 - 16e6a: e9d4 c304 ldrd ip, r3, [r4, #16] - 16e6e: 6820 ldr r0, [r4, #0] - 16e70: 68a1 ldr r1, [r4, #8] - 16e72: 42b2 cmp r2, r6 - 16e74: bf28 it cs - 16e76: 4632 movcs r2, r6 - 16e78: 4560 cmp r0, ip - 16e7a: d904 bls.n 16e86 <__sfvwrite_r+0x13a> - 16e7c: eb01 0b03 add.w fp, r1, r3 - 16e80: 455a cmp r2, fp - 16e82: f300 80a7 bgt.w 16fd4 <__sfvwrite_r+0x288> - 16e86: 4293 cmp r3, r2 - 16e88: dc64 bgt.n 16f54 <__sfvwrite_r+0x208> - 16e8a: 69e1 ldr r1, [r4, #28] - 16e8c: f8d4 c024 ldr.w ip, [r4, #36] ; 0x24 - 16e90: 463a mov r2, r7 - 16e92: 4640 mov r0, r8 - 16e94: 47e0 blx ip - 16e96: f1b0 0b00 subs.w fp, r0, #0 - 16e9a: ddd2 ble.n 16e42 <__sfvwrite_r+0xf6> - 16e9c: ebb9 090b subs.w r9, r9, fp - 16ea0: d0ca beq.n 16e38 <__sfvwrite_r+0xec> - 16ea2: 2001 movs r0, #1 - 16ea4: f8da 3008 ldr.w r3, [sl, #8] - 16ea8: eba3 030b sub.w r3, r3, fp - 16eac: 445f add r7, fp - 16eae: eba6 060b sub.w r6, r6, fp - 16eb2: f8ca 3008 str.w r3, [sl, #8] - 16eb6: 2b00 cmp r3, #0 - 16eb8: f43f af77 beq.w 16daa <__sfvwrite_r+0x5e> - 16ebc: 2e00 cmp r6, #0 - 16ebe: d1d2 bne.n 16e66 <__sfvwrite_r+0x11a> - 16ec0: 686e ldr r6, [r5, #4] - 16ec2: 462b mov r3, r5 - 16ec4: 3508 adds r5, #8 - 16ec6: 2e00 cmp r6, #0 - 16ec8: d0fa beq.n 16ec0 <__sfvwrite_r+0x174> - 16eca: 681f ldr r7, [r3, #0] - 16ecc: 4632 mov r2, r6 - 16ece: 210a movs r1, #10 - 16ed0: 4638 mov r0, r7 - 16ed2: f7fa ff6d bl 11db0 - 16ed6: 2800 cmp r0, #0 - 16ed8: f000 809d beq.w 17016 <__sfvwrite_r+0x2ca> - 16edc: 3001 adds r0, #1 - 16ede: eba0 0907 sub.w r9, r0, r7 - 16ee2: e7c1 b.n 16e68 <__sfvwrite_r+0x11c> - 16ee4: 6820 ldr r0, [r4, #0] - 16ee6: 6923 ldr r3, [r4, #16] - 16ee8: 4298 cmp r0, r3 - 16eea: d817 bhi.n 16f1c <__sfvwrite_r+0x1d0> - 16eec: 6962 ldr r2, [r4, #20] - 16eee: 42b2 cmp r2, r6 - 16ef0: d814 bhi.n 16f1c <__sfvwrite_r+0x1d0> - 16ef2: f06f 4300 mvn.w r3, #2147483648 ; 0x80000000 - 16ef6: 42b3 cmp r3, r6 - 16ef8: bf28 it cs - 16efa: 4633 movcs r3, r6 - 16efc: 69e1 ldr r1, [r4, #28] - 16efe: fb93 f3f2 sdiv r3, r3, r2 - 16f02: f8d4 c024 ldr.w ip, [r4, #36] ; 0x24 - 16f06: fb02 f303 mul.w r3, r2, r3 - 16f0a: 4640 mov r0, r8 - 16f0c: 464a mov r2, r9 - 16f0e: 47e0 blx ip - 16f10: f1b0 0a00 subs.w sl, r0, #0 - 16f14: dd95 ble.n 16e42 <__sfvwrite_r+0xf6> - 16f16: eba6 060a sub.w r6, r6, sl - 16f1a: e779 b.n 16e10 <__sfvwrite_r+0xc4> - 16f1c: 45b3 cmp fp, r6 - 16f1e: 46da mov sl, fp - 16f20: bf28 it cs - 16f22: 46b2 movcs sl, r6 - 16f24: 4652 mov r2, sl - 16f26: 4649 mov r1, r9 - 16f28: f7fa f8a8 bl 1107c - 16f2c: 68a3 ldr r3, [r4, #8] - 16f2e: 6822 ldr r2, [r4, #0] - 16f30: eba3 030a sub.w r3, r3, sl - 16f34: 4452 add r2, sl - 16f36: 60a3 str r3, [r4, #8] - 16f38: 6022 str r2, [r4, #0] - 16f3a: 2b00 cmp r3, #0 - 16f3c: d1eb bne.n 16f16 <__sfvwrite_r+0x1ca> - 16f3e: 4621 mov r1, r4 - 16f40: 4640 mov r0, r8 - 16f42: f7fd fc3f bl 147c4 <_fflush_r> - 16f46: 2800 cmp r0, #0 - 16f48: d0e5 beq.n 16f16 <__sfvwrite_r+0x1ca> - 16f4a: e77a b.n 16e42 <__sfvwrite_r+0xf6> - 16f4c: 6820 ldr r0, [r4, #0] - 16f4e: 46b3 mov fp, r6 - 16f50: 4632 mov r2, r6 - 16f52: e74f b.n 16df4 <__sfvwrite_r+0xa8> - 16f54: 4639 mov r1, r7 - 16f56: 9201 str r2, [sp, #4] - 16f58: f7fa f890 bl 1107c - 16f5c: 9a01 ldr r2, [sp, #4] - 16f5e: 68a3 ldr r3, [r4, #8] - 16f60: 1a9b subs r3, r3, r2 - 16f62: 60a3 str r3, [r4, #8] - 16f64: 6823 ldr r3, [r4, #0] - 16f66: 4413 add r3, r2 - 16f68: 6023 str r3, [r4, #0] - 16f6a: 4693 mov fp, r2 - 16f6c: e796 b.n 16e9c <__sfvwrite_r+0x150> - 16f6e: 6823 ldr r3, [r4, #0] - 16f70: 6921 ldr r1, [r4, #16] - 16f72: eba3 0b01 sub.w fp, r3, r1 - 16f76: 6963 ldr r3, [r4, #20] - 16f78: eb03 0a43 add.w sl, r3, r3, lsl #1 - 16f7c: eb0a 7ada add.w sl, sl, sl, lsr #31 - 16f80: f10b 0301 add.w r3, fp, #1 - 16f84: ea4f 0a6a mov.w sl, sl, asr #1 - 16f88: 4433 add r3, r6 - 16f8a: 4553 cmp r3, sl - 16f8c: 4652 mov r2, sl - 16f8e: bf84 itt hi - 16f90: 469a movhi sl, r3 - 16f92: 4652 movhi r2, sl - 16f94: 0543 lsls r3, r0, #21 - 16f96: d52c bpl.n 16ff2 <__sfvwrite_r+0x2a6> - 16f98: 4611 mov r1, r2 - 16f9a: 4640 mov r0, r8 - 16f9c: f7f9 f898 bl 100d0 <_malloc_r> - 16fa0: 2800 cmp r0, #0 - 16fa2: d03b beq.n 1701c <__sfvwrite_r+0x2d0> - 16fa4: 465a mov r2, fp - 16fa6: 6921 ldr r1, [r4, #16] - 16fa8: 9001 str r0, [sp, #4] - 16faa: f7f4 ff45 bl be38 - 16fae: 89a2 ldrh r2, [r4, #12] - 16fb0: 9b01 ldr r3, [sp, #4] - 16fb2: f422 6290 bic.w r2, r2, #1152 ; 0x480 - 16fb6: f042 0280 orr.w r2, r2, #128 ; 0x80 - 16fba: 81a2 strh r2, [r4, #12] - 16fbc: eb03 000b add.w r0, r3, fp - 16fc0: 6123 str r3, [r4, #16] - 16fc2: ebaa 030b sub.w r3, sl, fp - 16fc6: f8c4 a014 str.w sl, [r4, #20] - 16fca: 60a3 str r3, [r4, #8] - 16fcc: 6020 str r0, [r4, #0] - 16fce: 46b3 mov fp, r6 - 16fd0: 4632 mov r2, r6 - 16fd2: e70f b.n 16df4 <__sfvwrite_r+0xa8> - 16fd4: 4639 mov r1, r7 - 16fd6: 465a mov r2, fp - 16fd8: f7fa f850 bl 1107c - 16fdc: 6823 ldr r3, [r4, #0] - 16fde: 445b add r3, fp - 16fe0: 6023 str r3, [r4, #0] - 16fe2: 4621 mov r1, r4 - 16fe4: 4640 mov r0, r8 - 16fe6: f7fd fbed bl 147c4 <_fflush_r> - 16fea: 2800 cmp r0, #0 - 16fec: f43f af56 beq.w 16e9c <__sfvwrite_r+0x150> - 16ff0: e727 b.n 16e42 <__sfvwrite_r+0xf6> - 16ff2: 4640 mov r0, r8 - 16ff4: f7f9 fb34 bl 10660 <_realloc_r> - 16ff8: 4603 mov r3, r0 - 16ffa: 2800 cmp r0, #0 - 16ffc: d1de bne.n 16fbc <__sfvwrite_r+0x270> - 16ffe: 6921 ldr r1, [r4, #16] - 17000: 4640 mov r0, r8 - 17002: f7fb f84f bl 120a4 <_free_r> - 17006: f9b4 300c ldrsh.w r3, [r4, #12] - 1700a: 220c movs r2, #12 - 1700c: f023 0380 bic.w r3, r3, #128 ; 0x80 - 17010: f8c8 2000 str.w r2, [r8] - 17014: e717 b.n 16e46 <__sfvwrite_r+0xfa> - 17016: 1c72 adds r2, r6, #1 - 17018: 4691 mov r9, r2 - 1701a: e726 b.n 16e6a <__sfvwrite_r+0x11e> - 1701c: 220c movs r2, #12 - 1701e: f9b4 300c ldrsh.w r3, [r4, #12] - 17022: f8c8 2000 str.w r2, [r8] - 17026: e70e b.n 16e46 <__sfvwrite_r+0xfa> - 17028: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 1702c: e6be b.n 16dac <__sfvwrite_r+0x60> - 1702e: bf00 nop - 17030: 7ffffc00 .word 0x7ffffc00 - -00017034 <__swsetup_r>: - 17034: b538 push {r3, r4, r5, lr} - 17036: 4b31 ldr r3, [pc, #196] ; (170fc <__swsetup_r+0xc8>) - 17038: 681b ldr r3, [r3, #0] - 1703a: 4605 mov r5, r0 - 1703c: 460c mov r4, r1 - 1703e: b113 cbz r3, 17046 <__swsetup_r+0x12> - 17040: 6b5a ldr r2, [r3, #52] ; 0x34 - 17042: 2a00 cmp r2, #0 - 17044: d04e beq.n 170e4 <__swsetup_r+0xb0> - 17046: f9b4 300c ldrsh.w r3, [r4, #12] - 1704a: 0718 lsls r0, r3, #28 - 1704c: b29a uxth r2, r3 - 1704e: d51c bpl.n 1708a <__swsetup_r+0x56> - 17050: 6921 ldr r1, [r4, #16] - 17052: b329 cbz r1, 170a0 <__swsetup_r+0x6c> - 17054: f012 0001 ands.w r0, r2, #1 - 17058: d007 beq.n 1706a <__swsetup_r+0x36> - 1705a: 2000 movs r0, #0 - 1705c: 60a0 str r0, [r4, #8] - 1705e: 6960 ldr r0, [r4, #20] - 17060: 4240 negs r0, r0 - 17062: 61a0 str r0, [r4, #24] - 17064: b139 cbz r1, 17076 <__swsetup_r+0x42> - 17066: 2000 movs r0, #0 - 17068: bd38 pop {r3, r4, r5, pc} - 1706a: 0795 lsls r5, r2, #30 - 1706c: bf58 it pl - 1706e: 6960 ldrpl r0, [r4, #20] - 17070: 60a0 str r0, [r4, #8] - 17072: 2900 cmp r1, #0 - 17074: d1f7 bne.n 17066 <__swsetup_r+0x32> - 17076: 0612 lsls r2, r2, #24 - 17078: bf58 it pl - 1707a: 4608 movpl r0, r1 - 1707c: d5f4 bpl.n 17068 <__swsetup_r+0x34> - 1707e: f043 0340 orr.w r3, r3, #64 ; 0x40 - 17082: 81a3 strh r3, [r4, #12] - 17084: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 17088: bd38 pop {r3, r4, r5, pc} - 1708a: 06d1 lsls r1, r2, #27 - 1708c: d52e bpl.n 170ec <__swsetup_r+0xb8> - 1708e: 0752 lsls r2, r2, #29 - 17090: d414 bmi.n 170bc <__swsetup_r+0x88> - 17092: 6921 ldr r1, [r4, #16] - 17094: f043 0308 orr.w r3, r3, #8 - 17098: 81a3 strh r3, [r4, #12] - 1709a: b29a uxth r2, r3 - 1709c: 2900 cmp r1, #0 - 1709e: d1d9 bne.n 17054 <__swsetup_r+0x20> - 170a0: f402 7020 and.w r0, r2, #640 ; 0x280 - 170a4: f5b0 7f00 cmp.w r0, #512 ; 0x200 - 170a8: d0d4 beq.n 17054 <__swsetup_r+0x20> - 170aa: 4621 mov r1, r4 - 170ac: 4628 mov r0, r5 - 170ae: f000 f93f bl 17330 <__smakebuf_r> - 170b2: f9b4 300c ldrsh.w r3, [r4, #12] - 170b6: 6921 ldr r1, [r4, #16] - 170b8: b29a uxth r2, r3 - 170ba: e7cb b.n 17054 <__swsetup_r+0x20> - 170bc: 6b21 ldr r1, [r4, #48] ; 0x30 - 170be: b151 cbz r1, 170d6 <__swsetup_r+0xa2> - 170c0: f104 0240 add.w r2, r4, #64 ; 0x40 - 170c4: 4291 cmp r1, r2 - 170c6: d004 beq.n 170d2 <__swsetup_r+0x9e> - 170c8: 4628 mov r0, r5 - 170ca: f7fa ffeb bl 120a4 <_free_r> - 170ce: f9b4 300c ldrsh.w r3, [r4, #12] - 170d2: 2200 movs r2, #0 - 170d4: 6322 str r2, [r4, #48] ; 0x30 - 170d6: 6921 ldr r1, [r4, #16] - 170d8: 2200 movs r2, #0 - 170da: e9c4 1200 strd r1, r2, [r4] - 170de: f023 0324 bic.w r3, r3, #36 ; 0x24 - 170e2: e7d7 b.n 17094 <__swsetup_r+0x60> - 170e4: 4618 mov r0, r3 - 170e6: f7f9 ff49 bl 10f7c <__sinit> - 170ea: e7ac b.n 17046 <__swsetup_r+0x12> - 170ec: 2209 movs r2, #9 - 170ee: f043 0340 orr.w r3, r3, #64 ; 0x40 - 170f2: 602a str r2, [r5, #0] - 170f4: f04f 30ff mov.w r0, #4294967295 ; 0xffffffff - 170f8: 81a3 strh r3, [r4, #12] - 170fa: bd38 pop {r3, r4, r5, pc} - 170fc: 1fff8fa8 .word 0x1fff8fa8 - -00017100 <__fputwc>: - 17100: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - 17104: b083 sub sp, #12 - 17106: 4607 mov r7, r0 - 17108: 4688 mov r8, r1 - 1710a: 4614 mov r4, r2 - 1710c: f7fa fc00 bl 11910 <__locale_mb_cur_max> - 17110: 2801 cmp r0, #1 - 17112: d103 bne.n 1711c <__fputwc+0x1c> - 17114: f108 33ff add.w r3, r8, #4294967295 ; 0xffffffff - 17118: 2bfe cmp r3, #254 ; 0xfe - 1711a: d937 bls.n 1718c <__fputwc+0x8c> - 1711c: f10d 0904 add.w r9, sp, #4 - 17120: 4642 mov r2, r8 - 17122: f104 035c add.w r3, r4, #92 ; 0x5c - 17126: 4649 mov r1, r9 - 17128: 4638 mov r0, r7 - 1712a: f7fd fc83 bl 14a34 <_wcrtomb_r> - 1712e: 1c42 adds r2, r0, #1 - 17130: 4606 mov r6, r0 - 17132: d033 beq.n 1719c <__fputwc+0x9c> - 17134: b328 cbz r0, 17182 <__fputwc+0x82> - 17136: f89d c004 ldrb.w ip, [sp, #4] - 1713a: 2500 movs r5, #0 - 1713c: e009 b.n 17152 <__fputwc+0x52> - 1713e: 6823 ldr r3, [r4, #0] - 17140: 1c5a adds r2, r3, #1 - 17142: 6022 str r2, [r4, #0] - 17144: f883 c000 strb.w ip, [r3] - 17148: 3501 adds r5, #1 - 1714a: 42b5 cmp r5, r6 - 1714c: d219 bcs.n 17182 <__fputwc+0x82> - 1714e: f819 cf01 ldrb.w ip, [r9, #1]! - 17152: 68a3 ldr r3, [r4, #8] - 17154: 3b01 subs r3, #1 - 17156: 2b00 cmp r3, #0 - 17158: 60a3 str r3, [r4, #8] - 1715a: daf0 bge.n 1713e <__fputwc+0x3e> - 1715c: f8d4 e018 ldr.w lr, [r4, #24] - 17160: 4573 cmp r3, lr - 17162: 4661 mov r1, ip - 17164: 4622 mov r2, r4 - 17166: 4638 mov r0, r7 - 17168: db02 blt.n 17170 <__fputwc+0x70> - 1716a: f1bc 0f0a cmp.w ip, #10 - 1716e: d1e6 bne.n 1713e <__fputwc+0x3e> - 17170: f000 f94a bl 17408 <__swbuf_r> - 17174: 1c43 adds r3, r0, #1 - 17176: d1e7 bne.n 17148 <__fputwc+0x48> - 17178: 4606 mov r6, r0 - 1717a: 4630 mov r0, r6 - 1717c: b003 add sp, #12 - 1717e: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 17182: 4646 mov r6, r8 - 17184: 4630 mov r0, r6 - 17186: b003 add sp, #12 - 17188: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 1718c: fa5f fc88 uxtb.w ip, r8 - 17190: f88d c004 strb.w ip, [sp, #4] - 17194: 4606 mov r6, r0 - 17196: f10d 0904 add.w r9, sp, #4 - 1719a: e7ce b.n 1713a <__fputwc+0x3a> - 1719c: 89a3 ldrh r3, [r4, #12] - 1719e: 4630 mov r0, r6 - 171a0: f043 0340 orr.w r3, r3, #64 ; 0x40 - 171a4: 81a3 strh r3, [r4, #12] - 171a6: b003 add sp, #12 - 171a8: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - -000171ac <_fputwc_r>: - 171ac: b530 push {r4, r5, lr} - 171ae: 6e53 ldr r3, [r2, #100] ; 0x64 - 171b0: f013 0f01 tst.w r3, #1 - 171b4: f9b2 300c ldrsh.w r3, [r2, #12] - 171b8: 4614 mov r4, r2 - 171ba: b083 sub sp, #12 - 171bc: 4605 mov r5, r0 - 171be: b29a uxth r2, r3 - 171c0: d101 bne.n 171c6 <_fputwc_r+0x1a> - 171c2: 0598 lsls r0, r3, #22 - 171c4: d51c bpl.n 17200 <_fputwc_r+0x54> - 171c6: 0490 lsls r0, r2, #18 - 171c8: d406 bmi.n 171d8 <_fputwc_r+0x2c> - 171ca: 6e62 ldr r2, [r4, #100] ; 0x64 - 171cc: f443 5300 orr.w r3, r3, #8192 ; 0x2000 - 171d0: f442 5200 orr.w r2, r2, #8192 ; 0x2000 - 171d4: 81a3 strh r3, [r4, #12] - 171d6: 6662 str r2, [r4, #100] ; 0x64 - 171d8: 4622 mov r2, r4 - 171da: 4628 mov r0, r5 - 171dc: f7ff ff90 bl 17100 <__fputwc> - 171e0: 6e63 ldr r3, [r4, #100] ; 0x64 - 171e2: 07da lsls r2, r3, #31 - 171e4: 4605 mov r5, r0 - 171e6: d402 bmi.n 171ee <_fputwc_r+0x42> - 171e8: 89a3 ldrh r3, [r4, #12] - 171ea: 059b lsls r3, r3, #22 - 171ec: d502 bpl.n 171f4 <_fputwc_r+0x48> - 171ee: 4628 mov r0, r5 - 171f0: b003 add sp, #12 - 171f2: bd30 pop {r4, r5, pc} - 171f4: 6da0 ldr r0, [r4, #88] ; 0x58 - 171f6: f7fa fdd9 bl 11dac <__retarget_lock_release_recursive> - 171fa: 4628 mov r0, r5 - 171fc: b003 add sp, #12 - 171fe: bd30 pop {r4, r5, pc} - 17200: 6da0 ldr r0, [r4, #88] ; 0x58 - 17202: 9101 str r1, [sp, #4] - 17204: f7fa fdd0 bl 11da8 <__retarget_lock_acquire_recursive> - 17208: f9b4 300c ldrsh.w r3, [r4, #12] - 1720c: 9901 ldr r1, [sp, #4] - 1720e: b29a uxth r2, r3 - 17210: e7d9 b.n 171c6 <_fputwc_r+0x1a> - 17212: bf00 nop - -00017214 <_wcsnrtombs_l>: - 17214: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 17218: b089 sub sp, #36 ; 0x24 - 1721a: e9dd 8a13 ldrd r8, sl, [sp, #76] ; 0x4c - 1721e: 9f12 ldr r7, [sp, #72] ; 0x48 - 17220: 9101 str r1, [sp, #4] - 17222: 4681 mov r9, r0 - 17224: 9203 str r2, [sp, #12] - 17226: 461e mov r6, r3 - 17228: f1b8 0f00 cmp.w r8, #0 - 1722c: d055 beq.n 172da <_wcsnrtombs_l+0xc6> - 1722e: 9b01 ldr r3, [sp, #4] - 17230: 2b00 cmp r3, #0 - 17232: d057 beq.n 172e4 <_wcsnrtombs_l+0xd0> - 17234: 9b03 ldr r3, [sp, #12] - 17236: 681d ldr r5, [r3, #0] - 17238: 2f00 cmp r7, #0 - 1723a: d063 beq.n 17304 <_wcsnrtombs_l+0xf0> - 1723c: 1e74 subs r4, r6, #1 - 1723e: b32e cbz r6, 1728c <_wcsnrtombs_l+0x78> - 17240: 9b01 ldr r3, [sp, #4] - 17242: 9302 str r3, [sp, #8] - 17244: 3d04 subs r5, #4 - 17246: 2600 movs r6, #0 - 17248: e00a b.n 17260 <_wcsnrtombs_l+0x4c> - 1724a: 9b01 ldr r3, [sp, #4] - 1724c: bb13 cbnz r3, 17294 <_wcsnrtombs_l+0x80> - 1724e: 682a ldr r2, [r5, #0] - 17250: 2a00 cmp r2, #0 - 17252: d035 beq.n 172c0 <_wcsnrtombs_l+0xac> - 17254: 45bc cmp ip, r7 - 17256: d257 bcs.n 17308 <_wcsnrtombs_l+0xf4> - 17258: 3c01 subs r4, #1 - 1725a: 1c63 adds r3, r4, #1 - 1725c: 4666 mov r6, ip - 1725e: d015 beq.n 1728c <_wcsnrtombs_l+0x78> - 17260: f8d8 3000 ldr.w r3, [r8] - 17264: f855 2f04 ldr.w r2, [r5, #4]! - 17268: 9300 str r3, [sp, #0] - 1726a: f8da c0e0 ldr.w ip, [sl, #224] ; 0xe0 - 1726e: f8d8 b004 ldr.w fp, [r8, #4] - 17272: 4643 mov r3, r8 - 17274: a905 add r1, sp, #20 - 17276: 4648 mov r0, r9 - 17278: 47e0 blx ip - 1727a: 1c42 adds r2, r0, #1 - 1727c: d037 beq.n 172ee <_wcsnrtombs_l+0xda> - 1727e: eb00 0c06 add.w ip, r0, r6 - 17282: 45bc cmp ip, r7 - 17284: d9e1 bls.n 1724a <_wcsnrtombs_l+0x36> - 17286: 9b00 ldr r3, [sp, #0] - 17288: e9c8 3b00 strd r3, fp, [r8] - 1728c: 4630 mov r0, r6 - 1728e: b009 add sp, #36 ; 0x24 - 17290: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 17294: 2800 cmp r0, #0 - 17296: dd0c ble.n 172b2 <_wcsnrtombs_l+0x9e> - 17298: 9b02 ldr r3, [sp, #8] - 1729a: 4418 add r0, r3 - 1729c: 1e5a subs r2, r3, #1 - 1729e: a905 add r1, sp, #20 - 172a0: f100 3eff add.w lr, r0, #4294967295 ; 0xffffffff - 172a4: f811 3b01 ldrb.w r3, [r1], #1 - 172a8: f802 3f01 strb.w r3, [r2, #1]! - 172ac: 4572 cmp r2, lr - 172ae: d1f9 bne.n 172a4 <_wcsnrtombs_l+0x90> - 172b0: 9002 str r0, [sp, #8] - 172b2: 9b03 ldr r3, [sp, #12] - 172b4: 681a ldr r2, [r3, #0] - 172b6: 3204 adds r2, #4 - 172b8: 601a str r2, [r3, #0] - 172ba: 682a ldr r2, [r5, #0] - 172bc: 2a00 cmp r2, #0 - 172be: d1c9 bne.n 17254 <_wcsnrtombs_l+0x40> - 172c0: 9b01 ldr r3, [sp, #4] - 172c2: b10b cbz r3, 172c8 <_wcsnrtombs_l+0xb4> - 172c4: 9b03 ldr r3, [sp, #12] - 172c6: 601a str r2, [r3, #0] - 172c8: f10c 36ff add.w r6, ip, #4294967295 ; 0xffffffff - 172cc: 2200 movs r2, #0 - 172ce: 4630 mov r0, r6 - 172d0: f8c8 2000 str.w r2, [r8] - 172d4: b009 add sp, #36 ; 0x24 - 172d6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 172da: 9b01 ldr r3, [sp, #4] - 172dc: f500 7886 add.w r8, r0, #268 ; 0x10c - 172e0: 2b00 cmp r3, #0 - 172e2: d1a7 bne.n 17234 <_wcsnrtombs_l+0x20> - 172e4: 9b03 ldr r3, [sp, #12] - 172e6: f04f 37ff mov.w r7, #4294967295 ; 0xffffffff - 172ea: 681d ldr r5, [r3, #0] - 172ec: e7a6 b.n 1723c <_wcsnrtombs_l+0x28> - 172ee: 4606 mov r6, r0 - 172f0: 218a movs r1, #138 ; 0x8a - 172f2: 2200 movs r2, #0 - 172f4: 4630 mov r0, r6 - 172f6: f8c9 1000 str.w r1, [r9] - 172fa: f8c8 2000 str.w r2, [r8] - 172fe: b009 add sp, #36 ; 0x24 - 17300: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 17304: 463e mov r6, r7 - 17306: e7c1 b.n 1728c <_wcsnrtombs_l+0x78> - 17308: 4666 mov r6, ip - 1730a: e7bf b.n 1728c <_wcsnrtombs_l+0x78> - -0001730c <_wcsnrtombs_r>: - 1730c: b510 push {r4, lr} - 1730e: b084 sub sp, #16 - 17310: 4c05 ldr r4, [pc, #20] ; (17328 <_wcsnrtombs_r+0x1c>) - 17312: 9806 ldr r0, [sp, #24] - 17314: 9000 str r0, [sp, #0] - 17316: 9807 ldr r0, [sp, #28] - 17318: 9001 str r0, [sp, #4] - 1731a: 4804 ldr r0, [pc, #16] ; (1732c <_wcsnrtombs_r+0x20>) - 1731c: 6800 ldr r0, [r0, #0] - 1731e: 9402 str r4, [sp, #8] - 17320: f7ff ff78 bl 17214 <_wcsnrtombs_l> - 17324: b004 add sp, #16 - 17326: bd10 pop {r4, pc} - 17328: 1fff8d1c .word 0x1fff8d1c - 1732c: 1fff8fa8 .word 0x1fff8fa8 - -00017330 <__smakebuf_r>: - 17330: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 17334: 898b ldrh r3, [r1, #12] - 17336: 460c mov r4, r1 - 17338: 0799 lsls r1, r3, #30 - 1733a: b096 sub sp, #88 ; 0x58 - 1733c: d508 bpl.n 17350 <__smakebuf_r+0x20> - 1733e: f104 0343 add.w r3, r4, #67 ; 0x43 - 17342: 2201 movs r2, #1 - 17344: e9c4 3204 strd r3, r2, [r4, #16] - 17348: 6023 str r3, [r4, #0] - 1734a: b016 add sp, #88 ; 0x58 - 1734c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 17350: f9b4 100e ldrsh.w r1, [r4, #14] - 17354: 2900 cmp r1, #0 - 17356: 4606 mov r6, r0 - 17358: db25 blt.n 173a6 <__smakebuf_r+0x76> - 1735a: 466a mov r2, sp - 1735c: f000 f8ac bl 174b8 <_fstat_r> - 17360: 2800 cmp r0, #0 - 17362: db1f blt.n 173a4 <__smakebuf_r+0x74> - 17364: 9d01 ldr r5, [sp, #4] - 17366: f405 4570 and.w r5, r5, #61440 ; 0xf000 - 1736a: f5a5 5500 sub.w r5, r5, #8192 ; 0x2000 - 1736e: fab5 f585 clz r5, r5 - 17372: f44f 6880 mov.w r8, #1024 ; 0x400 - 17376: 096d lsrs r5, r5, #5 - 17378: f44f 6700 mov.w r7, #2048 ; 0x800 - 1737c: 4641 mov r1, r8 - 1737e: 4630 mov r0, r6 - 17380: f7f8 fea6 bl 100d0 <_malloc_r> - 17384: b1e0 cbz r0, 173c0 <__smakebuf_r+0x90> - 17386: f9b4 300c ldrsh.w r3, [r4, #12] - 1738a: f8c4 8014 str.w r8, [r4, #20] - 1738e: f043 0380 orr.w r3, r3, #128 ; 0x80 - 17392: 6020 str r0, [r4, #0] - 17394: 6120 str r0, [r4, #16] - 17396: 81a3 strh r3, [r4, #12] - 17398: bb35 cbnz r5, 173e8 <__smakebuf_r+0xb8> - 1739a: 433b orrs r3, r7 - 1739c: 81a3 strh r3, [r4, #12] - 1739e: b016 add sp, #88 ; 0x58 - 173a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 173a4: 89a3 ldrh r3, [r4, #12] - 173a6: f013 0580 ands.w r5, r3, #128 ; 0x80 - 173aa: d019 beq.n 173e0 <__smakebuf_r+0xb0> - 173ac: f04f 0840 mov.w r8, #64 ; 0x40 - 173b0: 2500 movs r5, #0 - 173b2: 4641 mov r1, r8 - 173b4: 4630 mov r0, r6 - 173b6: 462f mov r7, r5 - 173b8: f7f8 fe8a bl 100d0 <_malloc_r> - 173bc: 2800 cmp r0, #0 - 173be: d1e2 bne.n 17386 <__smakebuf_r+0x56> - 173c0: f9b4 300c ldrsh.w r3, [r4, #12] - 173c4: 059a lsls r2, r3, #22 - 173c6: d4c0 bmi.n 1734a <__smakebuf_r+0x1a> - 173c8: f023 0303 bic.w r3, r3, #3 - 173cc: f104 0243 add.w r2, r4, #67 ; 0x43 - 173d0: f043 0302 orr.w r3, r3, #2 - 173d4: 2101 movs r1, #1 - 173d6: e9c4 2104 strd r2, r1, [r4, #16] - 173da: 81a3 strh r3, [r4, #12] - 173dc: 6022 str r2, [r4, #0] - 173de: e7b4 b.n 1734a <__smakebuf_r+0x1a> - 173e0: f44f 6880 mov.w r8, #1024 ; 0x400 - 173e4: 462f mov r7, r5 - 173e6: e7c9 b.n 1737c <__smakebuf_r+0x4c> - 173e8: f9b4 100e ldrsh.w r1, [r4, #14] - 173ec: 4630 mov r0, r6 - 173ee: f000 f879 bl 174e4 <_isatty_r> - 173f2: b910 cbnz r0, 173fa <__smakebuf_r+0xca> - 173f4: f9b4 300c ldrsh.w r3, [r4, #12] - 173f8: e7cf b.n 1739a <__smakebuf_r+0x6a> - 173fa: 89a3 ldrh r3, [r4, #12] - 173fc: f023 0303 bic.w r3, r3, #3 - 17400: f043 0301 orr.w r3, r3, #1 - 17404: b21b sxth r3, r3 - 17406: e7c8 b.n 1739a <__smakebuf_r+0x6a> - -00017408 <__swbuf_r>: - 17408: b5f8 push {r3, r4, r5, r6, r7, lr} - 1740a: 460d mov r5, r1 - 1740c: 4614 mov r4, r2 - 1740e: 4606 mov r6, r0 - 17410: b110 cbz r0, 17418 <__swbuf_r+0x10> - 17412: 6b43 ldr r3, [r0, #52] ; 0x34 - 17414: 2b00 cmp r3, #0 - 17416: d04c beq.n 174b2 <__swbuf_r+0xaa> - 17418: f9b4 200c ldrsh.w r2, [r4, #12] - 1741c: 69a3 ldr r3, [r4, #24] - 1741e: 60a3 str r3, [r4, #8] - 17420: 0717 lsls r7, r2, #28 - 17422: b290 uxth r0, r2 - 17424: d51b bpl.n 1745e <__swbuf_r+0x56> - 17426: 6923 ldr r3, [r4, #16] - 17428: b1cb cbz r3, 1745e <__swbuf_r+0x56> - 1742a: b2ed uxtb r5, r5 - 1742c: 0481 lsls r1, r0, #18 - 1742e: 462f mov r7, r5 - 17430: d522 bpl.n 17478 <__swbuf_r+0x70> - 17432: 6822 ldr r2, [r4, #0] - 17434: 6961 ldr r1, [r4, #20] - 17436: 1ad3 subs r3, r2, r3 - 17438: 4299 cmp r1, r3 - 1743a: dd29 ble.n 17490 <__swbuf_r+0x88> - 1743c: 3301 adds r3, #1 - 1743e: 68a1 ldr r1, [r4, #8] - 17440: 3901 subs r1, #1 - 17442: 60a1 str r1, [r4, #8] - 17444: 1c51 adds r1, r2, #1 - 17446: 6021 str r1, [r4, #0] - 17448: 7015 strb r5, [r2, #0] - 1744a: 6962 ldr r2, [r4, #20] - 1744c: 429a cmp r2, r3 - 1744e: d027 beq.n 174a0 <__swbuf_r+0x98> - 17450: 89a3 ldrh r3, [r4, #12] - 17452: 07db lsls r3, r3, #31 - 17454: d501 bpl.n 1745a <__swbuf_r+0x52> - 17456: 2d0a cmp r5, #10 - 17458: d022 beq.n 174a0 <__swbuf_r+0x98> - 1745a: 4638 mov r0, r7 - 1745c: bdf8 pop {r3, r4, r5, r6, r7, pc} - 1745e: 4621 mov r1, r4 - 17460: 4630 mov r0, r6 - 17462: f7ff fde7 bl 17034 <__swsetup_r> - 17466: bb08 cbnz r0, 174ac <__swbuf_r+0xa4> - 17468: f9b4 200c ldrsh.w r2, [r4, #12] - 1746c: 6923 ldr r3, [r4, #16] - 1746e: b290 uxth r0, r2 - 17470: b2ed uxtb r5, r5 - 17472: 0481 lsls r1, r0, #18 - 17474: 462f mov r7, r5 - 17476: d4dc bmi.n 17432 <__swbuf_r+0x2a> - 17478: f442 5200 orr.w r2, r2, #8192 ; 0x2000 - 1747c: 81a2 strh r2, [r4, #12] - 1747e: 6e62 ldr r2, [r4, #100] ; 0x64 - 17480: 6961 ldr r1, [r4, #20] - 17482: f422 5200 bic.w r2, r2, #8192 ; 0x2000 - 17486: 6662 str r2, [r4, #100] ; 0x64 - 17488: 6822 ldr r2, [r4, #0] - 1748a: 1ad3 subs r3, r2, r3 - 1748c: 4299 cmp r1, r3 - 1748e: dcd5 bgt.n 1743c <__swbuf_r+0x34> - 17490: 4621 mov r1, r4 - 17492: 4630 mov r0, r6 - 17494: f7fd f996 bl 147c4 <_fflush_r> - 17498: b940 cbnz r0, 174ac <__swbuf_r+0xa4> - 1749a: 6822 ldr r2, [r4, #0] - 1749c: 2301 movs r3, #1 - 1749e: e7ce b.n 1743e <__swbuf_r+0x36> - 174a0: 4621 mov r1, r4 - 174a2: 4630 mov r0, r6 - 174a4: f7fd f98e bl 147c4 <_fflush_r> - 174a8: 2800 cmp r0, #0 - 174aa: d0d6 beq.n 1745a <__swbuf_r+0x52> - 174ac: f04f 37ff mov.w r7, #4294967295 ; 0xffffffff - 174b0: e7d3 b.n 1745a <__swbuf_r+0x52> - 174b2: f7f9 fd63 bl 10f7c <__sinit> - 174b6: e7af b.n 17418 <__swbuf_r+0x10> - -000174b8 <_fstat_r>: - 174b8: b570 push {r4, r5, r6, lr} - 174ba: 460c mov r4, r1 - 174bc: 4d08 ldr r5, [pc, #32] ; (174e0 <_fstat_r+0x28>) - 174be: 4603 mov r3, r0 - 174c0: 2600 movs r6, #0 - 174c2: 4620 mov r0, r4 - 174c4: 4611 mov r1, r2 - 174c6: 461c mov r4, r3 - 174c8: 602e str r6, [r5, #0] - 174ca: f7f4 fdd3 bl c074 <_fstat> - 174ce: 1c43 adds r3, r0, #1 - 174d0: d000 beq.n 174d4 <_fstat_r+0x1c> - 174d2: bd70 pop {r4, r5, r6, pc} - 174d4: 682b ldr r3, [r5, #0] - 174d6: 2b00 cmp r3, #0 - 174d8: d0fb beq.n 174d2 <_fstat_r+0x1a> - 174da: 6023 str r3, [r4, #0] - 174dc: bd70 pop {r4, r5, r6, pc} - 174de: bf00 nop - 174e0: 1fff9d78 .word 0x1fff9d78 - -000174e4 <_isatty_r>: - 174e4: b538 push {r3, r4, r5, lr} - 174e6: 4d07 ldr r5, [pc, #28] ; (17504 <_isatty_r+0x20>) - 174e8: 2200 movs r2, #0 - 174ea: 4604 mov r4, r0 - 174ec: 4608 mov r0, r1 - 174ee: 602a str r2, [r5, #0] - 174f0: f7f4 fdc6 bl c080 <_isatty> - 174f4: 1c43 adds r3, r0, #1 - 174f6: d000 beq.n 174fa <_isatty_r+0x16> - 174f8: bd38 pop {r3, r4, r5, pc} - 174fa: 682b ldr r3, [r5, #0] - 174fc: 2b00 cmp r3, #0 - 174fe: d0fb beq.n 174f8 <_isatty_r+0x14> - 17500: 6023 str r3, [r4, #0] - 17502: bd38 pop {r3, r4, r5, pc} - 17504: 1fff9d78 .word 0x1fff9d78 - 17508: 00006425 .word 0x00006425 - 1750c: 253a7325 .word 0x253a7325 - 17510: 73253a73 .word 0x73253a73 - 17514: 00000000 .word 0x00000000 - 17518: 64363025 .word 0x64363025 - 1751c: 2e34252c .word 0x2e34252c - 17520: 252c6635 .word 0x252c6635 - 17524: 66352e34 .word 0x66352e34 - 17528: 0075252c .word 0x0075252c - 1752c: 646f6f47 .word 0x646f6f47 - 17530: 00007854 .word 0x00007854 - 17534: 61467854 .word 0x61467854 - 17538: 00006c69 .word 0x00006c69 - 1753c: 456b6350 .word 0x456b6350 - 17540: ff007272 .word 0xff007272 - 17544: 47636552 .word 0x47636552 - 17548: 6e756f72 .word 0x6e756f72 - 1754c: 00000064 .word 0x00000064 - 17550: 676e6970 .word 0x676e6970 - 17554: 00000000 .word 0x00000000 - 17558: 756f7267 .word 0x756f7267 - 1755c: 6950646e .word 0x6950646e - 17560: 6f50676e .word 0x6f50676e - 17564: 0000676e .word 0x0000676e - 17568: 676e6f70 .word 0x676e6f70 - 1756c: 00000000 .word 0x00000000 - 17570: 00004754 .word 0x00004754 - 17574: 6e674754 .word 0x6e674754 - 17578: 00000064 .word 0x00000064 - 1757c: 6e674754 .word 0x6e674754 - 17580: 71655264 .word 0x71655264 - 17584: 00000000 .word 0x00000000 - 17588: 44444e47 .word 0x44444e47 - 1758c: 416e776f .word 0x416e776f - 17590: 6e657070 .word 0x6e657070 - 17594: ffff0064 .word 0xffff0064 - 17598: 42636552 .word 0x42636552 - 1759c: 0065756c .word 0x0065756c - 175a0: 425f4754 .word 0x425f4754 - 175a4: 0065756c .word 0x0065756c - 175a8: 65756c42 .word 0x65756c42 - 175ac: 6e776f44 .word 0x6e776f44 - 175b0: 65707041 .word 0x65707041 - 175b4: 0000646e .word 0x0000646e - 175b8: 65756c42 .word 0x65756c42 - 175bc: 676e6950 .word 0x676e6950 - 175c0: 676e6f50 .word 0x676e6f50 - 175c4: ffffff00 .word 0xffffff00 - 175c8: 57636552 .word 0x57636552 - 175cc: 00657269 .word 0x00657269 - 175d0: 575f4754 .word 0x575f4754 - 175d4: 00657269 .word 0x00657269 - 175d8: 65726957 .word 0x65726957 - 175dc: 6e776f44 .word 0x6e776f44 - 175e0: 65707041 .word 0x65707041 - 175e4: 0000646e .word 0x0000646e - 175e8: 65726957 .word 0x65726957 - 175ec: 676e6950 .word 0x676e6950 - 175f0: 676e6f50 .word 0x676e6f50 - 175f4: ffffff00 .word 0xffffff00 - 175f8: 47636552 .word 0x47636552 - 175fc: 4c554f48 .word 0x4c554f48 - 17600: 00000000 .word 0x00000000 - 17604: 006b6341 .word 0x006b6341 - 17608: 5f6b6341 .word 0x5f6b6341 - 1760c: 554f4847 .word 0x554f4847 - 17610: 0000004c .word 0x0000004c - 17614: 554f4847 .word 0x554f4847 - 17618: 776f444c .word 0x776f444c - 1761c: 7070416e .word 0x7070416e - 17620: 00646e65 .word 0x00646e65 - 17624: 50636e49 .word 0x50636e49 - 17628: 72466b63 .word 0x72466b63 - 1762c: 00206d6f .word 0x00206d6f - 17630: 7265764f .word 0x7265764f - 17634: 657a6973 .word 0x657a6973 - 17638: 654d2064 .word 0x654d2064 - 1763c: 67617373 .word 0x67617373 - 17640: 00203a65 .word 0x00203a65 - 17644: 0000002c .word 0x0000002c - 17648: 00727265 .word 0x00727265 - 1764c: 6d76616e .word 0x6d76616e - 17650: 5f65646f .word 0x5f65646f - 17654: 666e6f63 .word 0x666e6f63 - 17658: 6961665f .word 0x6961665f - 1765c: 0000006c .word 0x0000006c - 17660: 6f777469 .word 0x6f777469 - 17664: 64656b72 .word 0x64656b72 - 17668: ffffff00 .word 0xffffff00 - 1766c: 53544942 .word 0x53544942 - 17670: 34766572 .word 0x34766572 - 17674: 00000000 .word 0x00000000 - 17678: 54494e49 .word 0x54494e49 - 1767c: 5350475f .word 0x5350475f - 17680: 474f4c5f .word 0x474f4c5f - 17684: 00000000 .word 0x00000000 - 17688: 54494e49 .word 0x54494e49 - 1768c: 5f58525f .word 0x5f58525f - 17690: 00474f4c .word 0x00474f4c - 17694: 54494e49 .word 0x54494e49 - 17698: 5f58545f .word 0x5f58545f - 1769c: 00474f4c .word 0x00474f4c - 176a0: 6564614d .word 0x6564614d - 176a4: 73676f4c .word 0x73676f4c - 176a8: 00000000 .word 0x00000000 - 176ac: 54494e49 .word 0x54494e49 - 176b0: 474f4c5f .word 0x474f4c5f - 176b4: 474f4c5f .word 0x474f4c5f - 176b8: 00000000 .word 0x00000000 - 176bc: 74696e49 .word 0x74696e49 - 176c0: 00000000 .word 0x00000000 - 176c4: 72617453 .word 0x72617453 - 176c8: 676e6974 .word 0x676e6974 - 176cc: 646f6d20 .word 0x646f6d20 - 176d0: 2e2e6d65 .word 0x2e2e6d65 - 176d4: 0000002e .word 0x0000002e - 176d8: 69676542 .word 0x69676542 - 176dc: 6166206e .word 0x6166206e - 176e0: 64656c69 .word 0x64656c69 - 176e4: 7265203a .word 0x7265203a - 176e8: 20726f72 .word 0x20726f72 - 176ec: 00000000 .word 0x00000000 - 176f0: 6d206f4e .word 0x6d206f4e - 176f4: 6d65646f .word 0x6d65646f - 176f8: 74656420 .word 0x74656420 - 176fc: 65746365 .word 0x65746365 - 17700: 63203a64 .word 0x63203a64 - 17704: 6b636568 .word 0x6b636568 - 17708: 72697720 .word 0x72697720 - 1770c: 2e676e69 .word 0x2e676e69 - 17710: 00000000 .word 0x00000000 - 17714: 65646f4d .word 0x65646f4d - 17718: 7473206d .word 0x7473206d - 1771c: 65747261 .word 0x65747261 - 17720: 00000064 .word 0x00000064 - 17724: 65646f4d .word 0x65646f4d - 17728: 6174536d .word 0x6174536d - 1772c: 64657472 .word 0x64657472 - 17730: 00000000 .word 0x00000000 - 17734: 6e676953 .word 0x6e676953 - 17738: 75516c61 .word 0x75516c61 - 1773c: 74696c61 .word 0x74696c61 - 17740: 61662079 .word 0x61662079 - 17744: 64656c69 .word 0x64656c69 - 17748: 7265203a .word 0x7265203a - 1774c: 20726f72 .word 0x20726f72 - 17750: 00000000 .word 0x00000000 - 17754: 6d6f7246 .word 0x6d6f7246 - 17758: 74203020 .word 0x74203020 - 1775c: 2c35206f .word 0x2c35206f - 17760: 67697320 .word 0x67697320 - 17764: 206c616e .word 0x206c616e - 17768: 6c617571 .word 0x6c617571 - 1776c: 3a736920 .word 0x3a736920 - 17770: 00000020 .word 0x00000020 - 17774: 65646f4d .word 0x65646f4d - 17778: 5153436d .word 0x5153436d - 1777c: 0000003a .word 0x0000003a - 17780: 5f535047 .word 0x5f535047 - 17784: 75716341 .word 0x75716341 - 17788: 74697369 .word 0x74697369 - 1778c: 5f6e6f69 .word 0x5f6e6f69 - 17790: 73616850 .word 0x73616850 - 17794: 00000065 .word 0x00000065 - 17798: 69797254 .word 0x69797254 - 1779c: 5047676e .word 0x5047676e - 177a0: 00000053 .word 0x00000053 - 177a4: 4c746f47 .word 0x4c746f47 - 177a8: 006b636f .word 0x006b636f - 177ac: 50737067 .word 0x50737067 - 177b0: 656b6361 .word 0x656b6361 - 177b4: 00202074 .word 0x00202074 - 177b8: 4c746f67 .word 0x4c746f67 - 177bc: 006b636f .word 0x006b636f - 177c0: 69797254 .word 0x69797254 - 177c4: 7420676e .word 0x7420676e - 177c8: 6573206f .word 0x6573206f - 177cc: 7420646e .word 0x7420646e - 177d0: 6d206568 .word 0x6d206568 - 177d4: 61737365 .word 0x61737365 - 177d8: 202e6567 .word 0x202e6567 - 177dc: 69685420 .word 0x69685420 - 177e0: 696d2073 .word 0x696d2073 - 177e4: 20746867 .word 0x20746867 - 177e8: 656b6174 .word 0x656b6174 - 177ec: 76657320 .word 0x76657320 - 177f0: 6c617265 .word 0x6c617265 - 177f4: 6e696d20 .word 0x6e696d20 - 177f8: 73657475 .word 0x73657475 - 177fc: 000a0d2e .word 0x000a0d2e - 17800: 646e6573 .word 0x646e6573 - 17804: 54444253 .word 0x54444253 - 17808: 20747865 .word 0x20747865 - 1780c: 6c696166 .word 0x6c696166 - 17810: 203a6465 .word 0x203a6465 - 17814: 6f727265 .word 0x6f727265 - 17818: 00002072 .word 0x00002072 - 1781c: 20797254 .word 0x20797254 - 17820: 69616761 .word 0x69616761 - 17824: 6977206e .word 0x6977206e - 17828: 61206874 .word 0x61206874 - 1782c: 74656220 .word 0x74656220 - 17830: 20726574 .word 0x20726574 - 17834: 77656976 .word 0x77656976 - 17838: 20666f20 .word 0x20666f20 - 1783c: 20656874 .word 0x20656874 - 17840: 2e796b73 .word 0x2e796b73 - 17844: 00000000 .word 0x00000000 - 17848: 63637553 .word 0x63637553 - 1784c: 2c737365 .word 0x2c737365 - 17850: 6e657320 .word 0x6e657320 - 17854: 203d2074 .word 0x203d2074 - 17858: 00000000 .word 0x00000000 - 1785c: 65746e45 .word 0x65746e45 - 17860: 676e6972 .word 0x676e6972 - 17864: 706f6f4c .word 0x706f6f4c - 17868: ffffff00 .word 0xffffff00 - 1786c: 61736964 .word 0x61736964 - 17870: 00006d72 .word 0x00006d72 - 17874: 6c796150 .word 0x6c796150 - 17878: 2064616f .word 0x2064616f - 1787c: 61736944 .word 0x61736944 - 17880: 64656d72 .word 0x64656d72 - 17884: 00000000 .word 0x00000000 - 17888: 45464153 .word 0x45464153 - 1788c: 00000044 .word 0x00000044 - 17890: 006d7261 .word 0x006d7261 - 17894: 6c796150 .word 0x6c796150 - 17898: 2064616f .word 0x2064616f - 1789c: 656d7241 .word 0x656d7241 - 178a0: 00000064 .word 0x00000064 - 178a4: 706f7264 .word 0x706f7264 - 178a8: 00000000 .word 0x00000000 - 178ac: 6e65706f .word 0x6e65706f - 178b0: 00000000 .word 0x00000000 - 178b4: 504f5244 .word 0x504f5244 - 178b8: 00000000 .word 0x00000000 - 178bc: 52414e55 .word 0x52414e55 - 178c0: 5f44454d .word 0x5f44454d - 178c4: 504f5244 .word 0x504f5244 - 178c8: 5454415f .word 0x5454415f - 178cc: 54504d45 .word 0x54504d45 - 178d0: 00000000 .word 0x00000000 - 178d4: 5f544f4e .word 0x5f544f4e - 178d8: 454d5241 .word 0x454d5241 - 178dc: 00000044 .word 0x00000044 - 178e0: 72746573 .word 0x72746573 - 178e4: 00657461 .word 0x00657461 - 178e8: 74736166 .word 0x74736166 - 178ec: 00000000 .word 0x00000000 - 178f0: 5f544553 .word 0x5f544553 - 178f4: 45544152 .word 0x45544152 - 178f8: 5341465f .word 0x5341465f - 178fc: 00000054 .word 0x00000054 - 17900: 0046722c .word 0x0046722c - 17904: 6d726f6e .word 0x6d726f6e - 17908: 00000000 .word 0x00000000 - 1790c: 5f544553 .word 0x5f544553 - 17910: 45544152 .word 0x45544152 - 17914: 524f4e5f .word 0x524f4e5f - 17918: 0000004d .word 0x0000004d - 1791c: 004e722c .word 0x004e722c - 17920: 776f6c73 .word 0x776f6c73 - 17924: 00000000 .word 0x00000000 - 17928: 5f544553 .word 0x5f544553 - 1792c: 45544152 .word 0x45544152 - 17930: 4f4c535f .word 0x4f4c535f - 17934: 00000057 .word 0x00000057 - 17938: 0053722c .word 0x0053722c - 1793c: 646e616c .word 0x646e616c - 17940: 00000000 .word 0x00000000 - 17944: 5f544553 .word 0x5f544553 - 17948: 45544152 .word 0x45544152 - 1794c: 4e414c5f .word 0x4e414c5f - 17950: 00444544 .word 0x00444544 - 17954: 004c722c .word 0x004c722c - 17958: 5f737067 .word 0x5f737067 - 1795c: 65736572 .word 0x65736572 - 17960: 00000074 .word 0x00000074 - 17964: 54534554 .word 0x54534554 - 17968: 4355535f .word 0x4355535f - 1796c: 53534543 .word 0x53534543 - 17970: 00000000 .word 0x00000000 - 17974: 54534554 .word 0x54534554 - 17978: 5341505f .word 0x5341505f - 1797c: 00000053 .word 0x00000053 - 17980: 5f646e67 .word 0x5f646e67 - 17984: 74736574 .word 0x74736574 - 17988: 00000000 .word 0x00000000 - 1798c: 5f646e67 .word 0x5f646e67 - 17990: 63656863 .word 0x63656863 - 17994: 0000006b .word 0x0000006b - 17998: 65756c62 .word 0x65756c62 - 1799c: 7365745f .word 0x7365745f - 179a0: 00000074 .word 0x00000074 - 179a4: 65756c62 .word 0x65756c62 - 179a8: 6568635f .word 0x6568635f - 179ac: 00006b63 .word 0x00006b63 - 179b0: 45554c42 .word 0x45554c42 - 179b4: 53534150 .word 0x53534150 - 179b8: 00000000 .word 0x00000000 - 179bc: 65756c42 .word 0x65756c42 - 179c0: 73736150 .word 0x73736150 - 179c4: 00000000 .word 0x00000000 - 179c8: 65756c42 .word 0x65756c42 - 179cc: 73736150 .word 0x73736150 - 179d0: 6c696146 .word 0x6c696146 - 179d4: 00000000 .word 0x00000000 - 179d8: 756c422c .word 0x756c422c - 179dc: 73615065 .word 0x73615065 - 179e0: 00000073 .word 0x00000073 - 179e4: 50444e47 .word 0x50444e47 - 179e8: 00535341 .word 0x00535341 - 179ec: 50444e47 .word 0x50444e47 - 179f0: 46535341 .word 0x46535341 - 179f4: 006c6961 .word 0x006c6961 - 179f8: 4c494146 .word 0x4c494146 - 179fc: 00000000 .word 0x00000000 - 17a00: 45524957 .word 0x45524957 - 17a04: 53534150 .word 0x53534150 - 17a08: 00000000 .word 0x00000000 - 17a0c: 45524957 .word 0x45524957 - 17a10: 53534150 .word 0x53534150 - 17a14: 4941465f .word 0x4941465f - 17a18: 0000004c .word 0x0000004c - 17a1c: 554f4847 .word 0x554f4847 - 17a20: 5341504c .word 0x5341504c - 17a24: 00000053 .word 0x00000053 - 17a28: 554f4847 .word 0x554f4847 - 17a2c: 5341504c .word 0x5341504c - 17a30: 41465f53 .word 0x41465f53 - 17a34: ff004c49 .word 0xff004c49 - 17a38: 20515343 .word 0x20515343 - 17a3c: 6f727265 .word 0x6f727265 - 17a40: 6f632072 .word 0x6f632072 - 17a44: 3d206564 .word 0x3d206564 - 17a48: 00000020 .word 0x00000020 - 17a4c: 64363025 .word 0x64363025 - 17a50: 2e34252c .word 0x2e34252c - 17a54: 252c6634 .word 0x252c6634 - 17a58: 66342e34 .word 0x66342e34 - 17a5c: 0075252c .word 0x0075252c - 17a60: 6e776f44 .word 0x6e776f44 - 17a64: 65747441 .word 0x65747441 - 17a68: 3a74706d .word 0x3a74706d - 17a6c: 00000020 .word 0x00000020 - 17a70: 706f6f4c .word 0x706f6f4c - 17a74: 6e655320 .word 0x6e655320 - 17a78: 676e6964 .word 0x676e6964 - 17a7c: 00000000 .word 0x00000000 - 17a80: 20444253 .word 0x20444253 - 17a84: 646e6573 .word 0x646e6573 - 17a88: 63657220 .word 0x63657220 - 17a8c: 65766965 .word 0x65766965 - 17a90: 6d6f6320 .word 0x6d6f6320 - 17a94: 74656c70 .word 0x74656c70 - 17a98: 77206465 .word 0x77206465 - 17a9c: 20687469 .word 0x20687469 - 17aa0: 75746572 .word 0x75746572 - 17aa4: 63206e72 .word 0x63206e72 - 17aa8: 3a65646f .word 0x3a65646f - 17aac: 00000020 .word 0x00000020 - 17ab0: 646e6553 .word 0x646e6553 - 17ab4: 72724520 .word 0x72724520 - 17ab8: 203a726f .word 0x203a726f - 17abc: 00000020 .word 0x00000020 - 17ac0: ffff0009 .word 0xffff0009 - -00017ac4 : - ... - 17acc: 0000c08d 0000b8a1 00000459 0000045d ........Y...]... - 17adc: 0000c08d 0000c08d 0000c08d ............ - -00017ae8 >: - ... - 17af0: 000009c1 00000999 00000459 00000985 ........Y....... - 17b00: 00000a45 00000939 000008c9 E...9....... - -00017b0c : - ... - 17b14: 000009c1 00000999 00000459 00000985 ........Y....... - 17b24: 00000a45 00000939 000008c9 E...9....... - -00017b30 : - ... - 17b38: 00000add 000006a1 00000459 00000769 ........Y...i... - 17b48: 000006dd 00000791 0000073d 00000d85 ........=....... - 17b58: 00000e2d -... - -00017b5c : - ... - 17b64: 00000b31 00000b71 00000921 000009ad 1...q...!....... - 17b74: 00000a91 000008e1 00000971 000004ed ........q....... - 17b84: 00000bdd 000007e9 00000805 00000475 ............u... - 17b94: 00000461 0000049d 000008f9 00000821 a...........!... - 17ba4: 00000579 00000631 000005c1 00000529 y...1.......)... - 17bb4: 000009f5 4c2e5854 0000474f 4c2e5852 ....TX.LOG..RX.L - 17bc4: 0000474f 4e455645 4f4c2e54 00000047 OG..EVENT.LOG... - 17bd4: 2e535047 00474f4c 010662b5 04f00008 GPS.LOG..b...... - 17be4: 00000000 3f030000 010662b5 01f00008 .......?.b...... - 17bf4: 00000000 2a000000 010662b5 02f00008 .......*.b...... - 17c04: 00000000 31010000 010662b5 03f00008 .......1.b...... - 17c14: 00000000 38020000 010662b5 05f00008 .......8.b...... - 17c24: 00000000 46040000 010662b5 00f00008 .......F.b...... - 17c34: 00000100 28000000 080662b5 03e80006 .......(.b...... - 17c44: 00010001 00003901 080662b5 00c80006 .....9...b...... - 17c54: 00010001 00006ade 080662b5 00640006 .....j...b....d. - 17c64: 00010001 0000127a 000662b5 00010014 ....z....b...... - 17c74: 08d00000 25800000 00070000 00000003 .......%........ - 17c84: b5a20000 000662b5 00010014 08d00000 .....b.......... - 17c94: c2000000 00070001 00000003 7ec00000 ...............~ - 17ca4: 000662b5 00010014 08d00000 10000000 .b.............. - 17cb4: 0007000e 00000003 5a1b0000 240662b5 ...........Z.b.$ - 17cc4: ffff0024 00000306 27100000 00050000 $..........'.... - 17cd4: 00fa00fa 012c0064 00000000 00000000 ....d.,......... - 17ce4: 00000000 dc160000 240662b5 842a0000 .........b.$..*. - 17cf4: 090662b5 0000000d ffff0000 00000000 .b.............. - 17d04: 1d030000 000000ab 444e472c 00000000 ........,GND.... - ... - 17d1c: 7269572c 00000065 00000000 00000000 ,Wire........... - 17d2c: 4f48472c 00004c55 00000000 ff000000 ,GHOUL.......... - -00017d3c : - ... - 17d44: 00003529 00003579 )5..y5.. - -00017d4c : - ... - 17d54: 00003581 00003525 65776f50 676e6972 .5..%5..Powering - 17d64: 206e6f20 65646f6d 2e2e2e6d 00000a0d on modem....... - 17d74: 65776f50 676e6972 66666f20 646f6d20 Powering off mod - 17d84: 2e2e6d65 000a0d2e 00203e3e ff007525 em......>> .%u.. - 17d94: 52444253 20474e49 72656c61 65732074 SBDRING alert se - 17da4: 0d216e65 ffff000a 74696157 20676e69 en!.....Waiting - 17db4: 20726f66 70736572 65736e6f 00000020 for response ... - 17dc4: 00203c3c 4d2d5441 4d545353 0000000d << .AT-MSSTM.... - 17dd4: 53534d2d 203a4d54 00000000 0a0d4b4f -MSSTM: ....OK.. - 17de4: ffffff00 432b5441 0d524d47 00000000 ....AT+CGMR..... - 17df4: 6c6c6143 6f725020 73736563 5620726f Call Processor V - 17e04: 69737265 203a6e6f ffffff00 432b5441 ersion: ....AT+C - 17e14: 000d5153 5153432b ffff003a 532b5441 SQ..+CSQ:...AT+S - 17e24: 58494442 0000000d 4442532b 203a5849 BDIX....+SBDIX: - 17e34: 00000000 ff00202c 6e69425b 20797261 ...., ..[Binary - 17e44: 657a6973 0000003a 7573635b 00003a6d size:...[csum:.. - 17e54: 532b5441 42524442 ffff000d 65746e69 AT+SBDRB....inte - 17e64: 6c616e72 646e6553 65636552 0d657669 rnalSendReceive. - 17e74: 0000000a 74796220 005d7365 63656843 .... bytes].Chec - 17e84: 6d75736b 0000003a 49444253 4f4d2058 ksum:...SBDIX MO - 17e94: 646f6320 00203a65 49444253 75732058 code: .SBDIX su - 17ea4: 73656363 0a0d2173 00000000 6f636e49 ccess!......Inco - 17eb4: 676e696d 73656d20 65676173 000a0d21 ming message!... - 17ec4: 49444253 61662058 216c6174 00000a0d SBDIX fatal!.... - 17ed4: 74696157 20676e69 20726f66 49444253 Waiting for SBDI - 17ee4: 65722058 2e797274 0a0d2e2e 00000000 X retry......... - 17ef4: 74696157 20676e69 20726f66 5453534d Waiting for MSST - 17f04: 6572204d 2e797274 0a0d2e2e 00000000 M retry......... - 17f14: 49444253 69742058 756f656d 0a0d2174 SBDIX timeout!.. - 17f24: 00000000 532b5441 42574442 0000003d ....AT+SBDWB=... - 17f34: 44414552 000a0d59 0d0a0d30 0d4b4f0a READY...0....OK. - 17f44: 0000000a 532b5441 54574442 00000d3d ....AT+SBDWT=... - 17f54: 532b5441 54574442 ffff000d 6d206f4e AT+SBDWT....No m - 17f64: 6d65646f 74656420 65746365 0a0d2e64 odem detected... - 17f74: 00000000 676e6952 656c6120 20737472 ....Ring alerts - 17f84: 00657261 544f4e20 00000000 616e6520 are. NOT.... ena - 17f94: 64656c62 000a0d2e 532b5441 544d4442 bled....AT+SBDMT - 17fa4: 0d313d41 00000000 532b5441 544d4442 A=1.....AT+SBDMT - 17fb4: 0d303d41 00000000 6e6b6e55 206e776f A=0.....Unknown - 17fc4: 76205746 69737265 0a0d6e6f 00000000 FW version...... - 17fd4: 6d726946 65726177 72657620 6e6f6973 Firmware version - 17fe4: 20736920 00000000 5453534d 6f77204d is ....MSSTM wo - 17ff4: 72616b72 646e756f 00736920 666e6520 rkaround is. enf - 18004: 6563726f 0a0d2e64 00000000 65746e49 orced.......Inte - 18014: 6c616e72 69676542 73203a6e 65636375 rnalBegin: succe - 18024: 0d217373 0000000a 000d5441 6c6c6143 ss!.....AT..Call - 18034: 20676e69 65746e69 6c616e72 69676542 ing internalBegi - 18044: 000a0d6e 31455441 0000000d 44265441 n...ATE1....AT&D - 18054: 00000d30 4b265441 ff000d30 00018048 0...AT&K0...H... - 18064: 00018050 00018058 P...X... - -0001806c : - 1806c: 52444253 0d474e49 ffff000a SBDRING..... - -00018078 : - ... - 18080: 00004ad5 00004cd9 00004c9d 00004be5 .J...L...L...K.. - 18090: 00004c49 00004b91 00004d11 00004e89 IL...K...M...N.. - 180a0: 00004dcd 00004ec5 69766544 69206563 .M...N..Device i - 180b0: 6f742073 6d73206f 0d6c6c61 0000000a s too small..... - 180c0: 74697257 20676e69 20544146 00000000 Writing FAT .... - 180d0: 74697257 20676e69 61637075 74206573 Writing upcase t - 180e0: 656c6261 00000a0d 74697257 20676e69 able....Writing - 180f0: 746f6f72 00000a0d 6d726f46 64207461 root....Format d - 18100: 0d656e6f 0000000a 6d726f46 66207461 one.....Format f - 18110: 656c6961 000a0d64 41465845 ffff0054 ailed...EXFAT... - 18120: 20646142 73756c63 20726574 6e756f63 Bad cluster coun - 18130: 000a0d74 64726143 20736920 206f6f74 t...Card is too - 18140: 6c616d73 0a0d2e6c 00000000 6d726f46 small.......Form - 18150: 44207461 0d656e6f 0000000a 6d726f46 at Done.....Form - 18160: 46207461 656c6961 000a0d64 at Failed... - -0001816c : - ... - 18174: 00009759 00009765 0000975d 00009775 Y...e...]...u... - 18184: 00009fa9 00009e69 00009efd 00009cf1 ....i........... - 18194: 00009ddd 0000a255 0000a045 0000a139 ....U...E...9... - -000181a4 : - 181a4: 017800ff 02430180 01870188 018b018c ..x...C......... - 181b4: 01910192 01f60195 01980199 023d019a ..............=. - 181c4: 0220019e 01a701a8 01ac01ad 01af01b0 .. ............. - 181d4: 01b801b9 01bc01bd 01f701bf 01c401c6 ................ - 181e4: 01c701c9 01ca01cc 018e01dd 01f101f3 ................ - 181f4: 01f401f5 2c65023a 023b023c 2c66023e ....:.e,<.;.>.f, - 18204: 02410242 01810253 01860254 01890256 B.A.S...T...V... - 18214: 018a0257 018f0259 0190025b 01930260 W...Y...[...`... - 18224: 01940263 01970268 01960269 2c62026b c...h...i...k.b, - 18234: 019c026f 019d0272 019f0275 2c64027d o...r...u...}.d, - 18244: 01a60280 01a90283 01ae0288 02440289 ..............D. - 18254: 01b1028a 01b2028b 0245028c 01b70292 ..........E..... - 18264: 03fd037b 03fe037c 03ff037d 038603ac {...|...}....... - 18274: 03a303c2 038c03cc 038e03cd 038f03ce ................ - 18284: 03f903f2 03f703f8 03fa03fb 04c004cf ................ - 18294: 2c631d7d 1f591f51 1f5b1f53 1f5d1f55 }.c,Q.Y.S.[.U.]. - 182a4: 1f5f1f57 1ff81f78 1ff91f79 1fbc1fb3 W._.x...y....... - 182b4: 1fc31fcc 1fec1fe5 1ff31ffc 2132214e ............N!2! - 182c4: 21832184 2c602c61 2c752c76 .!.!a,`,v,u, - -000182d0 : - 182d0: 1ae00061 17e000e0 07e000f8 30010100 a..............0 - 182e0: 06010132 10010139 2e01014a 06010179 2...9...J...y... - 182f0: 04010182 060101a0 040101b3 100101cd ................ - 18300: 120101de 280101f8 12010222 0a010246 .......("...F... - 18310: 03db03ad 11e003b1 09e003c3 180103d8 ................ - 18320: 20e00430 10b00450 22010460 3601048a 0.. P...`.."...6 - 18330: 0e0104c1 440104d0 26d00561 96011e00 .......Da..&.... - 18340: 5a011ea0 08081f00 06081f10 08081f20 ...Z........ ... - 18350: 08081f30 06081f40 08081f60 024a1f70 0...@...`...p.J. - 18360: 04561f72 02641f76 02701f7a 027e1f7c r.V.v.d.z.p.|.~. - 18370: 08081f80 08081f90 08081fa0 02081fb0 ................ - 18380: 02081fd0 02081fe0 10f02170 1ae624d0 ........p!...$.. - 18390: 2fd02c30 06012c67 64012c80 26002d00 0,./g,...,.d.-.& - 183a0: 1ae0ff41 A... - -000183a4 : - 183a4: 00030002 00050004 00080006 000c000a ................ - 183b4: 00140010 00200018 00380028 00600040 ...... .(.8.@.`. - 183c4: 00c00080 01800100 02800200 ffff0300 ................ - -000183d4 : - 183d4: 80000000 80010000 00000000 80020000 ................ - 183e4: 00010000 00001001 00020000 00011001 ................ - 183f4: 00002003 00020001 00012003 00003004 . ....... ...0.. - 18404: 00022003 00032003 00004005 00014005 . ... ...@...@.. - 18414: 00005006 00015006 00006007 00016007 .P...P...`...`.. - 18424: 00007008 00026007 00017008 .p...`...p.. - -00018430 : - 18430: 4004803c 00001000 00001a04 00007fff <..@............ - 18440: 00001011 0000acf5 0000080c 00000200 ................ - 18450: 00000200 0000070b 00000240 00000200 ........@....... - 18460: 00000e0d 00000240 00000200 0609020a ....@........... - 18470: 16151714 0000000f 00000200 00000200 ................ - 18480: 00000200 00000200 00000200 00000200 ................ - 18490: 00000200 00000200 00000200 02020101 ................ - 184a0: 08080404 00000010 4d525047 00000043 ........GPRMC... - 184b0: 4d524e47 00000043 47475047 00000041 GNRMC...GPGGA... - 184c0: 47474e47 GNGGA. - -000184c6 <_serialEvent_default>: - 184c6: .. - -000184c8 : - ... - 184d0: 0000b509 0000b52d 0000b5bd 0000b5b9 ....-........... - 184e0: 0000b5b5 0000b5b1 0000b5ad 0000b4d1 ................ - 184f0: 0000b58d 0000b589 0000b581 0000b579 ............y... - 18500: 0000b571 0000b561 0000b551 0000b54d q...a...Q...M... - 18510: 0000b545 0000b53d 0000b4b1 0000b4b9 E...=........... - 18520: 0000b4c1 0000b4c9 0000b515 0000b4fd ................ - -00018530 : - ... - 18538: 0000b5f9 0000b61d 0000b6ad 0000b6a9 ................ - 18548: 0000b6a5 0000b6a1 0000b69d 0000b5c1 ................ - 18558: 0000b67d 0000b679 0000b671 0000b669 }...y...q...i... - 18568: 0000b661 0000b651 0000b641 0000b63d a...Q...A...=... - 18578: 0000b635 0000b62d 0000b6d1 0000b6f1 5...-........... - 18588: 0000b711 0000b6b1 0000b605 0000b5ed ................ - -00018598 : - ... - 185a0: 0000b769 0000b78d 0000b81d 0000b819 i............... - 185b0: 0000b815 0000b811 0000b80d 0000b731 ............1... - 185c0: 0000b7ed 0000b7e9 0000b7e1 0000b7d9 ................ - 185d0: 0000b7d1 0000b7c1 0000b7b1 0000b7ad ................ - 185e0: 0000b7a5 0000b79d 0000b841 0000b861 ........A...a... - 185f0: 0000b881 0000b821 0000b775 0000b75d ....!...u...]... - -00018600 : - 18600: 1e1f1c1f 1f1f1e1f 1f1e1f1e 00000030 ............0... - 18610: ffff0031 1... - -00018614 : - 18614: 43fe0840 4004a040 43fe0844 4004a044 @..C@..@D..CD..@ - 18624: 43fe1800 4004c000 43fe0030 40049030 ...C...@0..C0..@ - 18634: 43fe0034 40049034 43fe181c 4004c01c 4..C4..@...C...@ - 18644: 43fe1810 4004c010 43fe1808 4004c008 ...C...@...C...@ - 18654: 43fe180c 4004c00c 43fe100c 4004b00c ...C...@...C...@ - 18664: 43fe1010 4004b010 43fe1018 4004b018 ...C...@...C...@ - 18674: 43fe101c 4004b01c 43fe1014 4004b014 ...C...@...C...@ - 18684: 43fe1804 4004c004 43fe1000 4004b000 ...C...@...C...@ - 18694: 43fe0800 4004a000 43fe0804 4004a004 ...C...@...C...@ - 186a4: 43fe080c 4004a00c 43fe0808 4004a008 ...C...@...C...@ - 186b4: 43fe1814 4004c014 43fe1818 4004c018 ...C...@...C...@ - 186c4: 43fe1004 4004b004 43fe1008 4004b008 ...C...@...C...@ - 186d4: 43fe0014 40049014 43fe084c 4004a04c ...C...@L..CL..@ - 186e4: 43fe2004 4004d004 43fe1024 4004b024 . .C...@$..C$..@ - 186f4: 43fe1020 4004b020 43fe1028 4004b028 ..C ..@(..C(..@ - 18704: 43fe102c 4004b02c 43fe2000 4004d000 ,..C,..@. .C...@ - 18714: 43fe0848 4004a048 43fe0010 40049010 H..CH..@...C...@ - -00018724 : - ... - 1872c: 0000ea75 0000ea6d 0000ea69 0000ea65 u...m...i...e... - 1873c: 0000ea61 0000ea5d 0000ea59 0000ea55 a...]...Y...U... - -0001874c : - 1874c: 00000100 1fff88a0 00000012 00000200 ................ - 1875c: 1fff885c 00000043 00000300 1fff88b4 \...C........... - 1876c: 00000000 04090301 1fff88b8 00000000 ................ - 1877c: 04090302 1fff88d0 00000000 04090303 ................ - 1878c: 1fff88e8 00000000 00000000 00000000 ................ - 1879c: 00000000 .... - -000187a0 : - 187a0: 15191500 33323130 37363534 62613938 ....0123456789ab - 187b0: 66656463 6a696867 6e6d6c6b 7271706f cdefghijklmnopqr - 187c0: 76757473 7a797877 ffffff00 435f434c stuvwxyz....LC_C - 187d0: 414c4c4f 00004554 435f434c 45505954 OLLATE..LC_CTYPE - 187e0: 00000000 4d5f434c 54454e4f 00595241 ....LC_MONETARY. - 187f0: 4e5f434c 52454d55 00004349 545f434c LC_NUMERIC..LC_T - 18800: 00454d49 4d5f434c 41535345 00534547 IME.LC_MESSAGES. - -00018810 <_ctype_>: - 18810: 20202000 20202020 28282020 20282828 . ((((( - 18820: 20202020 20202020 20202020 20202020 - 18830: 10108820 10101010 10101010 10101010 ............... - 18840: 04040410 04040404 10040404 10101010 ................ - 18850: 41411010 41414141 01010101 01010101 ..AAAAAA........ - 18860: 01010101 01010101 01010101 10101010 ................ - 18870: 42421010 42424242 02020202 02020202 ..BBBBBB........ - 18880: 02020202 02020202 02020202 10101010 ................ - 18890: 00000020 00000000 00000000 00000000 ............... - ... - 18910: ffffff00 00464e49 00666e69 004e414e ....INF.inf.NAN. - 18920: 006e616e 33323130 37363534 62613938 nan.0123456789ab - 18930: 66656463 00000000 33323130 37363534 cdef....01234567 - 18940: 42413938 46454443 00000000 6c756e28 89ABCDEF....(nul - 18950: ff00296c 20202020 20202020 20202020 l).. - 18960: 20202020 30303030 30303030 30303030 000000000000 - 18970: 30303030 6c6c6142 7320636f 65636375 0000Balloc succe - 18980: 64656465 00000000 6c6f562f 73656d75 eded..../Volumes - 18990: 7461642f 656a2f61 6e696b6e 6f772f73 /data/jenkins/wo - 189a0: 70736b72 2f656361 2d554e47 6c6f6f74 rkspace/GNU-tool - 189b0: 69616863 72612f6e 31312d6d 6372732f chain/arm-11/src - 189c0: 77656e2f 2d62696c 77677963 6e2f6e69 /newlib-cygwin/n - 189d0: 696c7765 696c2f62 732f6362 696c6474 ewlib/libc/stdli - 189e0: 706d2f62 2e636572 ffff0063 ffffffff b/mprec.c....... - -000189f0 <__mprec_bigtens>: - 189f0: 37e08000 4341c379 b5056e17 4693b8b5 ...7y.AC.n.....F - 18a00: e93ff9f5 4d384f03 f9301d32 5a827748 ..?..O8M2.0.Hw.Z - 18a10: 7f73bf3c 75154fdd <.s..O.u - -00018a18 <__mprec_tens>: - 18a18: 00000000 3ff00000 00000000 40240000 .......?......$@ - 18a28: 00000000 40590000 00000000 408f4000 ......Y@.....@.@ - 18a38: 00000000 40c38800 00000000 40f86a00 .......@.....j.@ - 18a48: 00000000 412e8480 00000000 416312d0 .......A......cA - 18a58: 00000000 4197d784 00000000 41cdcd65 .......A....e..A - 18a68: 20000000 4202a05f e8000000 42374876 ... _..B....vH7B - 18a78: a2000000 426d1a94 e5400000 42a2309c ......mB..@..0.B - 18a88: 1e900000 42d6bcc4 26340000 430c6bf5 .......B..4&.k.C - 18a98: 37e08000 4341c379 85d8a000 43763457 ...7y.AC....W4vC - 18aa8: 674ec800 43abc16d 60913d00 43e158e4 ..Ngm..C.=.`.X.C - 18ab8: 78b58c40 4415af1d d6e2ef50 444b1ae4 @..x...DP.....KD - 18ac8: 064dd592 4480f0cf c7e14af6 44b52d02 ..M....D.J...-.D - 18ad8: 79d99db4 44ea7843 00000005 00000019 ...yCx.D........ - 18ae8: 0000007d 7566202c 6974636e 203a6e6f }..., function: - 18af8: 00000000 65737361 6f697472 2522206e ....assertion "% - 18b08: 66202273 656c6961 66203a64 20656c69 s" failed: file - 18b18: 22732522 696c202c 2520656e 25732564 "%s", line %d%s% - 18b28: ff000a73 69666e49 7974696e 00000000 s...Infinity.... - 18b38: 004e614e 6c6f562f 73656d75 7461642f NaN./Volumes/dat - 18b48: 656a2f61 6e696b6e 6f772f73 70736b72 a/jenkins/worksp - 18b58: 2f656361 2d554e47 6c6f6f74 69616863 ace/GNU-toolchai - 18b68: 72612f6e 31312d6d 6372732f 77656e2f n/arm-11/src/new - 18b78: 2d62696c 77677963 6e2f6e69 696c7765 lib-cygwin/newli - 18b88: 696c2f62 732f6362 696c6474 74642f62 b/libc/stdlib/dt - 18b98: 632e616f ffffff00 20202020 20202020 oa.c.... - 18ba8: 20202020 20202020 30303030 30303030 00000000 - 18bb8: 30303030 30303030 00000000 - -00018bc0 <_init>: - 18bc0: b5f8 push {r3, r4, r5, r6, r7, lr} - 18bc2: bf00 nop - 18bc4: bcf8 pop {r3, r4, r5, r6, r7} - 18bc6: bc08 pop {r3} - 18bc8: 469e mov lr, r3 - 18bca: 4770 bx lr - -00018bcc <__init_array_start>: - 18bcc: 00011fe5 .word 0x00011fe5 - -00018bd0 <__frame_dummy_init_array_entry>: - 18bd0: 00000435 00001d21 0000392d 00004fed 5...!...-9...O.. - -Disassembly of section .fini: - -00018be0 <_fini>: - 18be0: b5f8 push {r3, r4, r5, r6, r7, lr} - 18be2: bf00 nop diff --git a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.sym b/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.sym deleted file mode 100644 index 4699eac3..00000000 --- a/Code/BITS/BITSv4/build/teensy.avr.teensy31/BITSv4.ino.sym +++ /dev/null @@ -1,1215 +0,0 @@ - -/Users/michaelshipman/Library/Caches/arduino/sketches/18A565F5B3539745F387FBAB06991CCA/BITSv4.ino.elf: file format elf32-littlearm - -SYMBOL TABLE: -00000000 l d .text 00000000 .text -00018be0 l d .fini 00000000 .fini -00018be4 l d .ARM.exidx 00000000 .ARM.exidx -1fff8000 l d .usbdescriptortable 00000000 .usbdescriptortable -1fff8200 l d .dmabuffers 00000000 .dmabuffers -1fff83bc l d .usbbuffers 00000000 .usbbuffers -1fff8720 l d .data 00000000 .data -1fff8fb0 l d .bss 00000000 .bss -00000000 l d .ARM.attributes 00000000 .ARM.attributes -00000000 l d .comment 00000000 .comment -00000000 l d .debug_info 00000000 .debug_info -00000000 l d .debug_abbrev 00000000 .debug_abbrev -00000000 l d .debug_loclists 00000000 .debug_loclists -00000000 l d .debug_aranges 00000000 .debug_aranges -00000000 l d .debug_rnglists 00000000 .debug_rnglists -00000000 l d .debug_line 00000000 .debug_line -00000000 l d .debug_str 00000000 .debug_str -00000000 l d .debug_frame 00000000 .debug_frame -00000000 l d .debug_line_str 00000000 .debug_line_str -00000000 l df *ABS* 00000000 mk20dx128.c -0000c02c l F .text 0000000c startup_default_early_hook -0000c038 l F .text 00000002 startup_default_late_hook -00000000 l df *ABS* 00000000 crtstuff.c -00000410 l F .text 00000000 register_tm_clones -00000434 l F .text 00000000 frame_dummy -1fff8fb0 l O .bss 00000000 object.0 -00018bd0 l O .text 00000000 __frame_dummy_init_array_entry -00000000 l df *ABS* 00000000 BITSv4.ino.cpp -00000bb8 l F .text 00000024 Print::println(char const*) [clone .isra.0] -00000c6c l F .text 00000118 LogPacket() [clone .part.0] -00000edc l F .text 00000180 logprint(String) -0000105c l F .text 00000188 logprintln(String) -000011e4 l F .text 00000188 logprintln(int) -00001d20 l F .text 000000b4 _GLOBAL__sub_I_xbee -00000000 l df *ABS* 00000000 XBee.cpp -0000392c l F .text 00000014 _GLOBAL__sub_I__ZN12XBeeResponseC2Ev -00000000 l df *ABS* 00000000 IridiumSBD.cpp -00003d8c l F .text 0000007c IridiumSBD::internalGetSignalQuality(int&) [clone .part.0] -000046bc l F .text 00000334 IridiumSBD::internalBegin() [clone .part.0] -00000000 l df *ABS* 00000000 SD.cpp -00004fec l F .text 0000006c _GLOBAL__sub_I_SD -00000000 l df *ABS* 00000000 ExFatFile.cpp -00000000 l df *ABS* 00000000 ExFatFileWrite.cpp -00000000 l df *ABS* 00000000 ExFatFormatter.cpp -00006340 l F .text 00000020 Print::write(char const*) [clone .isra.0] -00000000 l df *ABS* 00000000 ExFatName.cpp -00000000 l df *ABS* 00000000 ExFatPartition.cpp -00000000 l df *ABS* 00000000 FatFile.cpp -0000705c l F .text 000000b4 FatFile::sync() [clone .part.0] -00000000 l df *ABS* 00000000 FatFileLFN.cpp -00000000 l df *ABS* 00000000 FatFormatter.cpp -000087ec l F .text 00000030 initFatDirCallback(unsigned long, void*) -00000000 l df *ABS* 00000000 FatName.cpp -00000000 l df *ABS* 00000000 FatPartition.cpp -00008ff4 l F .text 00000078 FatPartition::fatGet(unsigned long, unsigned long*) [clone .part.0] -0000906c l F .text 00000068 FatPartition::fatPut(unsigned long, unsigned long) [clone .part.0] -00000000 l df *ABS* 00000000 FsFile.cpp -00000000 l df *ABS* 00000000 FsNew.cpp -00000000 l df *ABS* 00000000 FsVolume.cpp -00000000 l df *ABS* 00000000 SdSpiCard.cpp -00000000 l df *ABS* 00000000 SdSpiChipSelect.cpp -00000000 l df *ABS* 00000000 SdSpiTeensy3.cpp -00000000 l df *ABS* 00000000 FsCache.cpp -00000000 l df *ABS* 00000000 FsDateTime.cpp -0000a5d0 l F .text 00000014 dateTimeMs10(unsigned short*, unsigned short*, unsigned char*) -00000000 l df *ABS* 00000000 FsName.cpp -00000000 l df *ABS* 00000000 FsStructs.cpp -00000000 l df *ABS* 00000000 FsUtf.cpp -00000000 l df *ABS* 00000000 upcase.cpp -000181a4 l O .text 0000012c lookupTable -000182d0 l O .text 000000d4 mapTable -00000000 l df *ABS* 00000000 SPI.cpp -0000a8dc l F .text 00000204 SPIClass::transfer(void const*, void*, unsigned int) [clone .part.0] -00000000 l df *ABS* 00000000 TinyGPS++.cpp -00000000 l df *ABS* 00000000 EventResponder.cpp -00000000 l df *ABS* 00000000 HardwareSerial1.cpp -00000000 l df *ABS* 00000000 HardwareSerial2.cpp -00000000 l df *ABS* 00000000 HardwareSerial3.cpp -00000000 l df *ABS* 00000000 Print.cpp -0000b8d0 l F .text 00000082 Print::printNumber(unsigned long, unsigned char, unsigned char) [clone .part.0] -00000000 l df *ABS* 00000000 Time.cpp -00018600 l O .text 0000000c monthDays -00000000 l df *ABS* 00000000 WString.cpp -00000000 l df *ABS* 00000000 main.cpp -00000000 l df *ABS* 00000000 memcpy-armv7m.S.o -00000000 l df *ABS* 00000000 new.cpp -00000000 l df *ABS* 00000000 nonstd.c -00000000 l df *ABS* 00000000 pins_teensy.c -0000c4d8 l F .text 00000002 startup_default_middle_hook -00000000 l df *ABS* 00000000 serial1.c -0000c6f8 l F .text 000000ec serial_putchar.part.0 -1fff9790 l O .bss 00000004 rts_pin -1fff9794 l O .bss 00000040 rx_buffer -1fff97d4 l O .bss 00000001 rx_buffer_head -1fff97d8 l O .bss 00000004 rx_buffer_storage_ -1fff97dc l O .bss 00000001 rx_buffer_tail -1fff97dd l O .bss 00000001 rx_pin_num -1fff97e0 l O .bss 00000004 transmit_pin -1fff97e4 l O .bss 00000001 transmitting -1fff97e8 l O .bss 00000040 tx_buffer -1fff9828 l O .bss 00000001 tx_buffer_head -1fff982c l O .bss 00000004 tx_buffer_storage_ -1fff9830 l O .bss 00000001 tx_buffer_tail -1fff8804 l O .data 00000004 rts_high_watermark_ -1fff8808 l O .data 00000004 rts_low_watermark_ -1fff880c l O .data 00000004 rx_buffer_total_size_ -1fff8810 l O .data 00000004 tx_buffer_total_size_ -1fff8814 l O .data 00000001 tx_pin_num -00000000 l df *ABS* 00000000 serial2.c -1fff9834 l O .bss 00000004 rts_pin -1fff9838 l O .bss 00000040 rx_buffer -1fff9878 l O .bss 00000001 rx_buffer_head -1fff987c l O .bss 00000004 rx_buffer_storage_ -1fff9880 l O .bss 00000001 rx_buffer_tail -1fff9884 l O .bss 00000004 transmit_pin -1fff9888 l O .bss 00000001 transmitting -1fff988c l O .bss 00000028 tx_buffer -1fff98b4 l O .bss 00000001 tx_buffer_head -1fff98b8 l O .bss 00000004 tx_buffer_storage_ -1fff98bc l O .bss 00000001 tx_buffer_tail -1fff8818 l O .data 00000004 rts_high_watermark_ -1fff881c l O .data 00000004 rts_low_watermark_ -1fff8820 l O .data 00000004 rx_buffer_total_size_ -1fff8824 l O .data 00000001 rx_pin_num -1fff8828 l O .data 00000004 tx_buffer_total_size_ -1fff882c l O .data 00000001 tx_pin_num -00000000 l df *ABS* 00000000 serial3.c -0000d9e8 l F .text 000000ec serial3_putchar.part.0 -1fff98c0 l O .bss 00000004 rts_pin -1fff98c4 l O .bss 00000040 rx_buffer -1fff9904 l O .bss 00000001 rx_buffer_head -1fff9908 l O .bss 00000004 rx_buffer_storage_ -1fff990c l O .bss 00000001 rx_buffer_tail -1fff9910 l O .bss 00000004 transmit_pin -1fff9914 l O .bss 00000001 transmitting -1fff9918 l O .bss 00000028 tx_buffer -1fff9940 l O .bss 00000001 tx_buffer_head -1fff9944 l O .bss 00000004 tx_buffer_storage_ -1fff9948 l O .bss 00000001 tx_buffer_tail -1fff8830 l O .data 00000004 rts_high_watermark_ -1fff8834 l O .data 00000004 rts_low_watermark_ -1fff8838 l O .data 00000004 rx_buffer_total_size_ -1fff883c l O .data 00000004 tx_buffer_total_size_ -1fff8840 l O .data 00000001 tx_pin_num -00000000 l df *ABS* 00000000 serialEvent1.cpp -00000000 l df *ABS* 00000000 serialEvent2.cpp -00000000 l df *ABS* 00000000 serialEvent3.cpp -00000000 l df *ABS* 00000000 usb_dev.c -1fff994c l O .bss 00000040 ep0_rx0_buf -1fff998c l O .bss 00000040 ep0_rx1_buf -1fff99cc l O .bss 00000001 ep0_tx_bdt_bank -1fff99cd l O .bss 00000001 ep0_tx_data_toggle -1fff99ce l O .bss 00000002 ep0_tx_len -1fff99d0 l O .bss 00000004 ep0_tx_ptr -1fff99d4 l O .bss 00000008 reply_buffer -1fff99dc l O .bss 00000010 rx_first -1fff99ec l O .bss 00000010 rx_last -1fff99fc l O .bss 00000008 setup -1fff9a04 l O .bss 00000010 tx_first -1fff9a14 l O .bss 00000010 tx_last -1fff9a24 l O .bss 00000004 tx_state -1fff8000 l O .usbdescriptortable 000000a0 table -00000000 l df *ABS* 00000000 usb_inst.cpp -00000000 l df *ABS* 00000000 usb_mem.c -1fff8854 l O .data 00000004 usb_buffer_available -00000000 l df *ABS* 00000000 usb_serial.c -1fff9a38 l O .bss 00000004 rx_packet -1fff9a3c l O .bss 00000001 transmit_previous_timeout -1fff9a3d l O .bss 00000001 tx_noautoflush -1fff9a40 l O .bss 00000004 tx_packet -00000000 l df *ABS* 00000000 yield.cpp -1fff9a55 l O .bss 00000001 yield::running -00000000 l df *ABS* 00000000 HardwareSerial.cpp -00000000 l df *ABS* 00000000 analog.c -1fff9a65 l O .bss 00000001 analog_reference_internal -1fff9a66 l O .bss 00000001 calibrating -1fff8859 l O .data 00000001 analog_config_bits -1fff885a l O .data 00000001 analog_num_average -00000000 l df *ABS* 00000000 serialEvent.cpp -00000000 l df *ABS* 00000000 usb_desc.c -1fff885c l O .data 00000043 config_descriptor -1fff88a0 l O .data 00000012 device_descriptor -00000000 l df *ABS* 00000000 atexit_arm.o -00000000 l df *ABS* 00000000 _arm_addsubdf3.o -00000000 l df *ABS* 00000000 _arm_muldivdf3.o -00000000 l df *ABS* 00000000 _arm_cmpdf2.o -00000000 l df *ABS* 00000000 _arm_unorddf2.o -00000000 l df *ABS* 00000000 _arm_fixdfsi.o -00000000 l df *ABS* 00000000 _arm_truncdfsf2.o -00000000 l df *ABS* 00000000 _arm_addsubsf3.o -00000000 l df *ABS* 00000000 _arm_muldivsf3.o -00000000 l df *ABS* 00000000 _arm_cmpsf2.o -00000000 l df *ABS* 00000000 _arm_unordsf2.o -00000000 l df *ABS* 00000000 _arm_fixsfsi.o -00000000 l df *ABS* 00000000 libc_a-isxdigit.o -00000000 l df *ABS* 00000000 libc_a-atoi.o -00000000 l df *ABS* 00000000 libc_a-atol.o -00000000 l df *ABS* 00000000 libc_a-itoa.o -00000000 l df *ABS* 00000000 libc_a-malloc.o -00000000 l df *ABS* 00000000 libc_a-mallocr.o -00000000 l df *ABS* 00000000 libc_a-mlock.o -00000000 l df *ABS* 00000000 libc_a-realloc.o -00000000 l df *ABS* 00000000 libc_a-reallocr.o -00000000 l df *ABS* 00000000 libc_a-snprintf.o -00000000 l df *ABS* 00000000 libc_a-strtol.o -00010ac0 l F .text 00000140 _strtol_l.constprop.0 -00000000 l df *ABS* 00000000 libc_a-strtoul.o -00010c18 l F .text 00000140 _strtoul_l.constprop.0 -00000000 l df *ABS* 00000000 libc_a-utoa.o -00000000 l df *ABS* 00000000 libc_a-sprintf.o -00000000 l df *ABS* 00000000 libc_a-findfp.o -00010e50 l F .text 00000018 stdio_exit_handler -00010e68 l F .text 00000040 cleanup_stdio -00010ea8 l F .text 000000d4 global_stdio_init.part.0 -00000000 l df *ABS* 00000000 libc_a-fwalk.o -00000000 l df *ABS* 00000000 libc_a-memcmp.o -00000000 l df *ABS* 00000000 libc_a-memmove.o -00000000 l df *ABS* 00000000 libc_a-memset.o -00000000 l df *ABS* 00000000 libc_a-strcat.o -00000000 l df *ABS* 00000000 libc_a-strchr.o -00000000 l df *ABS* 00000000 libc_a-strncat.o -00000000 l df *ABS* 00000000 libc_a-strncmp.o -00000000 l df *ABS* 00000000 libc_a-strncpy.o -00000000 l df *ABS* 00000000 libc_a-strtok.o -00000000 l df *ABS* 00000000 libc_a-strtok_r.o -00000000 l df *ABS* 00000000 libc_a-strstr.o -000114e4 l F .text 000000c6 critical_factorization -000115ac l F .text 000001fa two_way_long_needle -00000000 l df *ABS* 00000000 libc_a-locale.o -00000000 l df *ABS* 00000000 libc_a-cxa_atexit.o -00000000 l df *ABS* 00000000 libc_a-efgcvt.o -00000000 l df *ABS* 00000000 libc_a-sbrkr.o -00000000 l df *ABS* 00000000 libc_a-writer.o -00000000 l df *ABS* 00000000 libc_a-errno.o -00000000 l df *ABS* 00000000 libc_a-strcmp.o -00000000 l df *ABS* 00000000 libc_a-strcpy.o -00000000 l df *ABS* 00000000 libc_a-init.o -00000000 l df *ABS* 00000000 libc_a-lock.o -00000000 l df *ABS* 00000000 libc_a-memchr.o -00000000 l df *ABS* 00000000 libc_a-strlen.o -00000000 l df *ABS* 00000000 libc_a-__atexit.o -00000000 l df *ABS* 00000000 libc_a-__call_atexit.o -00011fe4 l F .text 00000014 register_fini -00000000 l df *ABS* 00000000 libc_a-atexit.o -00000000 l df *ABS* 00000000 libc_a-freer.o -00000000 l df *ABS* 00000000 libc_a-mbtowc_r.o -00000000 l df *ABS* 00000000 libc_a-svfprintf.o -00000000 l df *ABS* 00000000 libc_a-mprec.o -00000000 l df *ABS* 00000000 libc_a-fclose.o -00000000 l df *ABS* 00000000 libc_a-fflush.o -00000000 l df *ABS* 00000000 libc_a-stdio.o -00000000 l df *ABS* 00000000 libc_a-wctomb_r.o -00000000 l df *ABS* 00000000 libc_a-strnlen.o -00000000 l df *ABS* 00000000 libc_a-localeconv.o -00000000 l df *ABS* 00000000 libc_a-closer.o -00000000 l df *ABS* 00000000 libc_a-lseekr.o -00000000 l df *ABS* 00000000 libc_a-readr.o -00000000 l df *ABS* 00000000 libc_a-ecvtbuf.o -00000000 l df *ABS* 00000000 libc_a-fini.o -00000000 l df *ABS* 00000000 libc_a-wcrtomb.o -00000000 l df *ABS* 00000000 libc_a-wcsrtombs.o -00000000 l df *ABS* 00000000 libm_a-s_frexp.o -00000000 l df *ABS* 00000000 libc_a-assert.o -00000000 l df *ABS* 00000000 libc_a-callocr.o -00000000 l df *ABS* 00000000 libc_a-dtoa.o -00014bc4 l F .text 00000128 quorem -00000000 l df *ABS* 00000000 libc_a-fiprintf.o -00000000 l df *ABS* 00000000 libc_a-svfiprintf.o -00000000 l df *ABS* 00000000 libc_a-vfiprintf.o -00015cd0 l F .text 00000076 __sprint_r.part.0 -00016ccc l F .text 00000080 __sbprintf -00000000 l df *ABS* 00000000 libc_a-fvwrite.o -00000000 l df *ABS* 00000000 libc_a-wsetup.o -00000000 l df *ABS* 00000000 libc_a-fputwc.o -00000000 l df *ABS* 00000000 libc_a-wcsnrtombs.o -00000000 l df *ABS* 00000000 libc_a-makebuf.o -00000000 l df *ABS* 00000000 libc_a-wbuf.o -00000000 l df *ABS* 00000000 libc_a-fstatr.o -00000000 l df *ABS* 00000000 libc_a-isattyr.o -00000000 l df *ABS* 00000000 libc_a-ctype_.o -00000000 l df *ABS* 00000000 crti.o -00000000 l df *ABS* 00000000 crtn.o -00000000 l df *ABS* 00000000 libc_a-impure.o -00000000 l df *ABS* 00000000 ExFatVolume.cpp -00000000 l df *ABS* 00000000 FatVolume.cpp -000039ac g F .text 00000090 IridiumSBD::power(bool) -0000c024 w F .text 00000006 adc0_isr -000005c0 w F .text 0000006e SDFile::getModifyTime(DateTimeFields&) -0000a810 g F .text 000000b4 toUpcase(unsigned short) -00001ccc g F .text 00000054 startBlinks() -0000f928 g F .text 0000002c .hidden __aeabi_dcmpun -0000eb84 g F .text 0000002c usb_serial_available -0000bd00 g F .text 00000038 String::String(float, unsigned char) -000174e4 g F .text 00000024 _isatty_r -0000f8ec g F .text 00000012 .hidden __aeabi_dcmple -00011c9c g F .text 000000ba strcpy -0000bc7c g F .text 0000002c String::String(int, unsigned char) -0000b514 w F .text 00000018 HardwareSerial::write(char const*) -00008f90 g F .text 00000032 FatPartition::freeClusterCount_cb_fat16(unsigned long, unsigned char*, void*) -0000f828 g F .text 0000007a .hidden __cmpdf2 -00014910 g F .text 0000002c _lseek_r -0000edf4 w F .text 000000f0 yield -00009764 w F .text 0000000e DedicatedSpiCard::~DedicatedSpiCard() -1fff9030 g O .bss 000000d8 gps -000035a8 g F .text 00000002 XBeeResponse::XBeeResponse() -00007da8 g F .text 000001cc FatFile::write(void const*, unsigned int) -00003674 g F .text 00000004 XBeeResponse::getPacketLength() -0000b768 w F .text 0000000c HardwareSerial3::write(unsigned char) -0000f828 g F .text 0000007a .hidden __eqdf2 -1fff88b8 g O .data 00000018 usb_string_manufacturer_name_default -0000cd54 g F .text 00000028 serial_available -00007d34 g F .text 00000074 FatFile::truncate() -0000b580 w F .text 00000006 HardwareSerial::transmitterEnable(unsigned char) -000087b0 w F .text 0000003a FsBlockDeviceInterface::writeSectorsCallback(unsigned long, unsigned int, unsigned char const* (*)(unsigned long, void*), void*) -1fff9114 g O .bss 00000034 modem -0000f398 g F .text 0000005a .hidden __floatdidf -0000814c g F .text 00000148 FatFile::makeSFN(FatLfn_t*) -0000bfe0 w F .text 00000044 hard_fault_isr -0000b730 g F .text 0000002c HardwareSerial3::begin(unsigned long) -0000c024 w F .text 00000006 dma_ch6_isr -0000b550 w F .text 00000010 HardwareSerial::attachCts(unsigned char) -00009378 g F .text 00000122 FatPartition::init(FsBlockDeviceInterface*, unsigned char) -00003580 g F .text 00000028 ZBRxResponse::getDataLength() -1fff9770 g O .bss 00000004 FsDateTime::callback -000035c4 g F .text 00000002 AtCommandResponse::AtCommandResponse() -1fff9bd8 g O .bss 00000001 __lock___atexit_recursive_mutex -0000abb8 w F .text 0000013c SPIClass::dma_rxisr() -00003a3c g F .text 0000006c IridiumSBD::send(__FlashStringHelper const*, bool, bool) -00014a34 g F .text 0000004c _wcrtomb_r -0000ddac g F .text 00000014 serial3_putchar -00008294 g F .text 000000bc FatFile::makeUniqueSfn(FatLfn_t*) -0000893c g F .text 00000052 FatFormatter::initPbs() -0000b9b0 g F .text 0000001c Print::println() -0000a340 g F .text 00000026 DedicatedSpiCard::begin(SdSpiConfig) -0001816c g O .text 00000038 vtable for DedicatedSpiCard -0000d6c4 g F .text 00000028 serial2_available -000029fc g F .text 00000788 uplink() -0001487c g F .text 00000020 __sseek -00010f7c g F .text 0000003c __sinit -0000c024 w F .text 00000006 uart0_lon_isr -00005398 g F .text 000000de ExFatFile::seekSet(unsigned long long) -00014968 g F .text 000000a4 fcvtbuf -0000e150 g F .text 00000080 usb_rx_memory -00017408 g F .text 000000b0 __swbuf_r -000035a8 g F .text 00000002 XBeeResponse::XBeeResponse() -00000768 w F .text 00000028 File::flush() -0000b660 w F .text 00000008 HardwareSerial2::setTX(unsigned char, bool) -000035c4 g F .text 00000002 TxStatusResponse::TxStatusResponse() -00000630 w F .text 0000006e SDFile::getCreateTime(DateTimeFields&) -1fff9154 g O .bss 0000000c response -0000c024 w F .text 00000006 dma_ch8_isr -0001063c g F .text 0000000c __malloc_unlock -00000820 w F .text 000000a8 SDFile::openNextFile(unsigned char) -0000b820 w F .text 00000020 HardwareSerial3::write(int) -1fff976c g O .bss 00000004 FsVolume::m_cwv -000037bc g F .text 00000038 XBee::readPacket(int) -00007454 g F .text 000000fa FatFile::open(FatFile*, char const*, int) -0000d210 g F .text 000000d0 serial2_end -0000ef34 g F .text 000000c8 analog_init -0000e1d0 g F .text 00000088 usb_tx -0000fdc8 g F .text 00000136 .hidden __divsf3 -0000c024 w F .text 00000006 portcd_isr -000017c0 g F .text 000000bc processGHOULMessage() -00007234 g F .text 00000020 FatFile::getCreateDateTime(unsigned short*, unsigned short*) -00003670 g F .text 00000002 ModemStatusResponse::ModemStatusResponse() -00003670 g F .text 00000002 ModemStatusResponse::ModemStatusResponse() -0000b7ac w F .text 00000004 HardwareSerial3::clear() -00017b5c w O .text 0000005c vtable for SDFile -0000ca80 g F .text 0000007c serial_set_tx -0001107c g F .text 000000f8 memmove -0000b5ac w F .text 00000004 HardwareSerial::peek() -00010a38 g F .text 00000088 snprintf -00013e80 g F .text 0000004c _Balloc -0000c024 w F .text 00000006 can1_rx_warn_isr -00018bec g .ARM.exidx 00000000 __exidx_end -00011480 g F .text 00000064 __strtok_r -00010018 g F .text 0000004c .hidden __fixsfsi -0000c024 w F .text 00000006 dma_error_isr -00003e08 g F .text 00000026 IridiumSBD::getSignalQuality(int&) -000091a8 g F .text 00000056 FatPartition::freeChain(unsigned long) -1fff9784 g O .bss 00000001 EventResponder::runningFromYield -0000a488 g F .text 0000001a SdSpiArduinoDriver::receive() -0000c024 w F .text 00000006 i2c0_isr -00009648 g F .text 000000e8 FsVolume::begin(FsBlockDeviceInterface*, bool, unsigned char) -0000b8a0 g F .text 0000002e Print::write(unsigned char const*, unsigned int) -0000f818 g F .text 0000008a .hidden __gtdf2 -1fff8fac g O .data 00000004 __atexit_recursive_mutex -0001007c g F .text 00000008 atol -00011998 g F .text 0000000c __errno -000008f8 w F .text 00000026 SDFile::isDirectory() -0000b774 w F .text 00000018 HardwareSerial3::write(char const*) -00005e7c g F .text 00000160 ExFatFile::timestamp(unsigned char, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char) -000006a0 w F .text 0000003c File::write(unsigned char const*, unsigned int) -0000c024 w F .text 00000006 portd_isr -0000bd00 g F .text 00000038 String::String(float, unsigned char) -0000c024 w F .text 00000006 enet_error_isr -00003ea8 g F .text 000000d0 IridiumSBD::doSBDIX(unsigned short&, unsigned short&, unsigned short&, unsigned short&, unsigned short&, unsigned short&) -00000d84 w F .text 000000a8 File::~File() -1fff9780 g O .bss 00000004 EventResponder::firstInterrupt -0000ce54 g F .text 00000048 serial_clear -000063c4 g F .text 0000004a ExFatFormatter::writeUpcaseUnicode(unsigned short) -0000b678 w F .text 00000004 HardwareSerial2::end() -1fff9bd4 g O .bss 00000004 __stdio_exit_handler -0000b668 w F .text 00000006 HardwareSerial2::setRX(unsigned char) -0000949c g F .text 0000005a FsBaseFile::FsBaseFile(FsBaseFile const&) -1fff87c4 g O .data 00000014 Serial1 -0000c024 w F .text 00000006 tpm1_isr -00007044 g F .text 00000018 ExFatPartition::rootLength() -0000bb9c g F .text 00000038 String::String(String const&) -00000528 w F .text 00000050 SDFile::setCreateTime(DateTimeFields const&) -0000ea6c w F .text 00000008 usb_serial_class::write(unsigned char const*, unsigned int) -000174b8 g F .text 0000002c _fstat_r -00018614 g O .text 00000110 digital_pin_to_info_PGM -00001e34 g F .text 000000d4 gps_init() -1fff9d78 g O .bss 00000004 errno -0000a4a4 g F .text 00000020 SdSpiArduinoDriver::receive(unsigned char*, unsigned int) -00006dbc g F .text 00000040 ExFatPartition::fatGet(unsigned long, unsigned long*) -00018bec g .ARM.exidx 00000000 _etext -0000acf4 g F .text 00000010 _spi_dma_rxISR0() -000085d4 g F .text 000000cc FatFile::parsePathName(char const*, FatLfn_t*, char const**) -1fff8fb0 g .bss 00000000 _sbss -1fff9274 g O .bss 00000022 xbeeSendBuf -00008990 g F .text 0000005c FatFormatter::writeMbr() -0000a3a8 g F .text 00000006 sdCsInit(unsigned char) -00004ec4 g F .text 000000b0 SDClass::mediaPresent() -0000f8b4 g F .text 00000010 .hidden __aeabi_cdcmple -0000b4b0 w F .text 00000008 HardwareSerial::write(unsigned long) -0000fa50 g F .text 00000160 .hidden __aeabi_fadd -000035f4 g F .text 00000014 ZBRxResponse::ZBRxResponse() -0000b5b4 w F .text 00000004 HardwareSerial::available() -00006f64 g F .text 000000e0 ExFatPartition::init(FsBlockDeviceInterface*, unsigned char) -00003800 g F .text 00000034 ZBTxRequest::ZBTxRequest(XBeeAddress64&, unsigned char*, unsigned char) -0000fa4c g F .text 00000164 .hidden __subsf3 -000064c0 g F .text 00000500 ExFatFormatter::format(FsBlockDeviceInterface*, unsigned char*, Print*) -0000c5cc g F .text 0000001c digitalRead -00003834 g F .text 00000046 XBee::sendByte(unsigned char, bool) -0000c024 w F .text 00000006 porte_isr -00003184 g F .text 000003a0 loop -0000c024 w F .text 00000006 portb_isr -0000c024 w F .text 00000006 spi1_isr -0000c024 w F .text 00000006 uart3_status_isr -0000e0d4 w F .text 00000002 serialEvent1() -00005118 g F .text 000000a8 ExFatFile::parsePathName(char const*, ExName_t*, char const**) -0000c024 w F .text 00000006 mcm_isr -0000b6b0 w F .text 00000020 HardwareSerial2::write(int) -0000b81c w F .text 00000004 HardwareSerial3::availableForWrite() -0000ad04 g F .text 0000007e TinyGPSPlus::TinyGPSPlus() -0000b508 w F .text 0000000c HardwareSerial::write(unsigned char) -0000ad04 g F .text 0000007e TinyGPSPlus::TinyGPSPlus() -1fff977c g O .bss 00000004 EventResponder::lastInterrupt -0000d80c g F .text 00000184 uart1_status_isr -0000d318 g F .text 0000007c serial2_set_tx -0000387c g F .text 000000b0 XBee::send(XBeeRequest&) -000094f8 g F .text 00000028 FsBaseFile::close() -0000ab5c g F .text 00000054 SPIClass::end() -0000be38 g F .text 000001a6 memcpy -0000c024 w F .text 00000006 randnum_isr -0000d7c4 g F .text 00000048 serial2_clear -0000f8a4 g F .text 00000020 .hidden __aeabi_cdrcmple -000006dc w F .text 00000060 File::available() -000098f0 g F .text 000000a4 SharedSpiCard::writeStop() -0000a6e8 g F .text 00000098 FsUtf::cpToMb(unsigned long, char*, char*) -1fff8fb0 g O .data 00000000 .hidden __TMC_END__ -00006e3c g F .text 000000bc ExFatPartition::freeChain(unsigned long) -0000778c g F .text 0000002a FatFile::peek() -0000ffd8 g F .text 00000012 .hidden __aeabi_fcmpgt -000122dc g F .text 00001ba4 _svfprintf_r -0000f320 g F .text 00000022 .hidden __floatsidf -1fff8fcc g O .bss 00000064 downlinkMessage2 -1fff8fc8 w O .bss 00000001 SDFile::name()::zeroterm -000035c4 g F .text 00000002 AtCommandResponse::AtCommandResponse() -1fff978c g O .bss 00000004 systick_millis_count -0000f820 g F .text 00000082 .hidden __ltdf2 -00005cfc g F .text 0000007c ExFatFile::rename(ExFatFile*, char const*) -0000bfe0 w F .text 00000044 bus_fault_isr -000004ec w F .text 0000003c SDFile::truncate(unsigned long long) -0000b7d0 w F .text 00000008 HardwareSerial3::setTX(unsigned char, bool) -0000c024 w F .text 00000006 watchdog_isr -0000c094 g F .text 00000044 nvic_execution_priority -0000c024 w F .text 00000006 i2c1_isr -1fff9a28 g O .bss 00000001 usb_configuration -0000c024 w F .text 00000006 dma_ch11_isr -0000b5ec w F .text 0000000c HardwareSerial2::write9bit(unsigned long) -0000b710 w F .text 00000020 HardwareSerial2::write(unsigned int) -00000a44 w F .text 0000004c StreamFile::available() -000077b8 g F .text 00000044 FatFile::readDirCache(bool) -0000e0d8 w F .text 00000002 serialEvent2() -0000c024 w F .text 00000006 i2c2_isr -00009cf0 g F .text 00000088 SharedSpiCard::sectorCount() -1fff88b8 w O .data 00000018 usb_string_manufacturer_name -1fff9a2c g O .bss 00000008 usb_rx_byte_count_data -0000c024 w F .text 00000006 pit1_isr -000100b0 g F .text 00000010 malloc -0000c024 w F .text 00000006 dma_ch4_isr -0000c024 w F .text 00000006 software_isr -00004dcc g F .text 000000bc SDClass::format(int, char, Print&) -0000d2e0 g F .text 00000038 serial2_set_transmit_pin -00017b0c w O .text 00000024 vtable for FsFile -0000c074 w F .text 0000000a _fstat -0000c024 w F .text 00000006 dma_ch7_isr -00014b0c g F .text 00000040 __assert_func -0000a8c4 w F .text 00000016 EventResponder::triggerEvent(int, void*) -0000fbb8 g F .text 0000001c .hidden __aeabi_i2f -00018a18 g O .text 000000c8 __mprec_tens -0000e9cc g F .text 00000088 usb_init -0000bc7c g F .text 0000002c String::String(int, unsigned char) -0000ff08 g F .text 00000066 .hidden __lesf2 -0000b578 w F .text 00000006 HardwareSerial::setRX(unsigned char) -0000dc28 g F .text 0000006c serial3_end -00001c60 w F .text 0000006c ISBDCallback() -0000c024 w F .text 00000006 lptmr_isr -00000bdc w F .text 0000008e SDFile::seek(unsigned long long, int) -1fff9a98 g O .bss 00000004 __malloc_top_pad -0000c4c4 g F .text 00000014 rtc_set -0000b7e0 w F .text 00000006 HardwareSerial3::transmitterEnable(unsigned char) -1fff8fb0 g .bss 00000000 __bss_start__ -00010d58 g F .text 00000018 strtoul -00005fdc g F .text 000000e8 ExFatFile::truncate() -1fff8720 g O .data 00000000 .hidden __dso_handle -0000bca8 g F .text 0000002c String::String(long, unsigned char) -00010084 g F .text 0000002c itoa -0000f300 g F .text 0000001e .hidden __aeabi_ui2d -000148e4 g F .text 00000008 _localeconv_r -0000d154 g F .text 000000bc serial2_format -0000a44c g F .text 00000032 SdSpiArduinoDriver::deactivate() -00016d4c g F .text 000002e8 __sfvwrite_r -00014020 g F .text 0000005c __i2b -00018530 g O .text 00000068 vtable for HardwareSerial2 -0000de58 g F .text 0000008c serial3_getchar -0000b4b8 w F .text 00000008 HardwareSerial::write(long) -1fff8720 g .data 00000000 _sdata -00008b00 g F .text 000001c8 FatFormatter::makeFat32() -0000f07c g F .text 00000000 .hidden __aeabi_drsub -0000a480 g F .text 00000006 SdSpiArduinoDriver::end() -00007110 g F .text 00000034 FatFile::addCluster() -00011948 g F .text 00000024 _sbrk_r -0000cd0c g F .text 00000018 serial_flush -0000b7c0 w F .text 00000010 HardwareSerial3::attachRts(unsigned char) -000001bc g F .text 000001c8 ResetHandler -0000d9c8 g F .text 00000020 serial2_add_memory_for_write -0000eb0c g F .text 00000048 usb_serial_getchar -0000c024 w F .text 00000006 can1_bus_off_isr -0000c024 w F .text 00000006 ftm2_isr -0000049c w F .text 00000050 SDFile::name() -1fff9a44 g O .bss 00000008 usb_cdc_line_coding -0000c580 g F .text 0000004c digitalWrite -0000c024 w F .text 00000006 uart5_status_isr -0000c024 w F .text 00000006 lpuart0_status_isr -1fff9788 g O .bss 00000004 EventResponder::lastYield -000050f0 g F .text 00000028 ExFatFile::openRoot(ExFatVolume*) -0001493c g F .text 0000002c _read_r -000187a0 g O .text 00000004 usb_endpoint_config_table -0000c024 w F .text 00000006 dma_ch9_isr -0000b4d0 g F .text 0000002c HardwareSerial::begin(unsigned long) -00000938 w F .text 00000038 StreamFile::read() -0000c024 w F .text 00000006 pit2_isr -00009758 w F .text 00000002 DedicatedSpiCard::~DedicatedSpiCard() -00006360 g F .text 00000028 ExFatFormatter::syncUpcase() -0000d078 g F .text 000000dc serial2_begin -000009f4 w F .text 00000050 SDFile::setModifyTime(DateTimeFields const&) -0000f8d8 g F .text 00000012 .hidden __aeabi_dcmplt -0000de30 g F .text 00000028 serial3_available -000145dc g F .text 000000c6 _fclose_r -000183d4 g O .text 0000005c SPISettings::ctar_clock_table -0000394c g F .text 00000060 IridiumSBD::noBlockWait(int) -1fff9a90 g O .bss 00000004 __malloc_max_sbrked_mem -0000b63c w F .text 00000004 HardwareSerial2::clear() -00009e68 g F .text 00000092 DedicatedSpiCard::readSectors(unsigned long, unsigned char*, unsigned int) -000007e8 w F .text 0000001a SDFile::position() -0000c5e8 g F .text 00000078 pinMode -0001806c g O .text 0000000a IridiumSBD::SBDRING -0000bdf4 g F .text 00000034 String::getBytes(unsigned char*, unsigned int, unsigned int) const -0000eabc g F .text 00000050 usb_free -0000c024 w F .text 00000006 i2c3_isr -0000f344 g F .text 00000042 .hidden __extendsfdf2 -0000f648 g F .text 000001d0 .hidden __aeabi_ddiv -0000f088 g F .text 00000276 .hidden __adddf3 -0000ff10 g F .text 0000005e .hidden __nesf2 -0000d474 g F .text 000000f8 serial2_putchar -1fff8770 g O .data 00000004 rxLogName -0000073c w F .text 0000002c File::peek() -0000b6a4 w F .text 00000004 HardwareSerial2::available() -00009200 g F .text 00000178 FatPartition::freeClusterCount() -0000d6ec g F .text 0000008c serial2_getchar -00004ad4 w F .text 000000bc SDClass::open(char const*, unsigned char) -00018be4 g .ARM.exidx 00000000 __exidx_start -0000b28c g F .text 000000c6 TinyGPSPlus::encode(char) -0000f3f4 g F .text 00000254 .hidden __aeabi_dmul -0000c024 w F .text 00000006 pit0_isr -0000b78c w F .text 00000010 HardwareSerial3::write(unsigned char const*, unsigned int) -0000c080 w F .text 00000004 _isatty -0000b570 w F .text 00000008 HardwareSerial::setTX(unsigned char, bool) -1fff9778 g O .bss 00000004 EventResponder::firstYield -0000b840 w F .text 00000020 HardwareSerial3::write(unsigned long) -0000c024 w F .text 00000006 can1_error_isr -0000a780 g F .text 00000090 FsUtf::mbToCp(char const*, char const*, unsigned long*) -000009c0 w F .text 00000034 StreamFile::write(unsigned char) -00010660 g F .text 000003d8 _realloc_r -00000920 w F .text 00000018 SDFile::read(void*, unsigned int) -00011d58 g F .text 00000048 __libc_init_array -1fff9d7c g .bss 00000000 __bss_end -0000c158 g F .text 0000035e dtostrf -00000578 w F .text 00000046 SDFile::rewindDirectory() -0000c024 w F .text 00000006 can0_wakeup_isr -000058dc g F .text 0000000e ExFatFile::open(ExFatVolume*, char const*, int) -00004a50 g F .text 00000084 SDClass::dateTime(unsigned short*, unsigned short*) -00005c4c g F .text 000000ae ExFatFile::addDirCluster() -000035b4 g F .text 0000000a XBeeResponse::isError() -0000b604 w F .text 00000018 HardwareSerial2::write(char const*) -0000c024 w F .text 00000006 flash_cmd_isr -0000b61c w F .text 00000010 HardwareSerial2::write(unsigned char const*, unsigned int) -0000dad4 g F .text 00000098 serial3_begin -000171ac g F .text 00000066 _fputwc_r -000189f0 g O .text 00000028 __mprec_bigtens -0000c090 w F .text 00000002 abort -1fff9160 g O .bss 00000018 rx -0000ea54 w F .text 00000004 usb_serial_class::clear() -0000f300 g F .text 0000001e .hidden __floatunsidf -00004694 g F .text 00000026 IridiumSBD::sendReceiveSBDText(char const*, unsigned char*, unsigned int&) -0000df54 g F .text 00000128 uart2_status_isr -0000c03c w F .text 0000002c _sbrk -00014388 g F .text 0000003e __mcmp -000035c4 g F .text 00000002 TxStatusResponse::TxStatusResponse() -00018078 g O .text 00000030 vtable for SDClass -1fff8800 g O .data 00000004 __brkval -1fff9a4c g O .bss 00000001 usb_cdc_line_rtsdtr -00010064 g F .text 00000010 isxdigit -0000edac g F .text 00000048 usb_serial_flush_callback -000037f4 g F .text 00000006 XBeeAddress64::XBeeAddress64(unsigned long, unsigned long) -0000b67c w F .text 00000020 HardwareSerial2::begin(unsigned long, unsigned long) -00018bc0 g F .text 00000000 _init -000071bc g F .text 0000001e FatFile::cacheDirEntry(unsigned char) -0000bbd4 g F .text 0000000e String::~String() -00003e30 g F .text 00000078 IridiumSBD::internalMSSTMWorkaround(bool&) -00010c00 g F .text 00000018 strtol -0000ddc0 g F .text 00000028 serial3_write -0000b79c w F .text 00000008 HardwareSerial3::addMemoryForWrite(void*, unsigned int) -0000c024 w F .text 00000006 svcall_isr -00004c48 w F .text 00000054 SDClass::remove(char const*) -00000474 w F .text 00000028 SDFile::close() -0000c024 w F .text 00000006 dma_ch15_isr -000148c0 g F .text 00000024 strnlen -0000bb9c g F .text 00000038 String::String(String const&) -00000b30 w F .text 00000040 SDFile::~SDFile() -0000c7e4 g F .text 000000dc serial_begin -0000f9a4 g F .text 0000009e .hidden __aeabi_d2f -0000b58c w F .text 00000020 HardwareSerial::begin(unsigned long, unsigned long) -0000bdc8 g F .text 00000010 operator+(StringSumHelper const&, String const&) -0000fa4c g F .text 00000164 .hidden __aeabi_fsub -0000c024 w F .text 00000006 uart1_error_isr -00014a0c g F .text 00000028 __libc_fini_array -0000c024 w F .text 00000006 usbhs_phy_isr -0000a42c g F .text 00000020 SdSpiArduinoDriver::begin(SdSpiConfig) -1fff9d7c g .bss 00000000 _ebss -1fff87ec g O .data 00000014 Serial3 -0000b7e8 w F .text 00000004 HardwareSerial3::end() -0000cd24 g F .text 00000030 serial_write_buffer_free -00000984 w F .text 00000014 StreamFile::flush() -0000ffec g F .text 0000002c .hidden __aeabi_fcmpun -000036a8 g F .text 00000112 XBee::readPacket() -0000b5bc w F .text 00000004 HardwareSerial::availableForWrite() -0000bd48 g F .text 0000007e String::append(char const*, unsigned int) -00013f80 g F .text 00000040 __hi0bits -00005058 g F .text 0000003c ExFatFile::dirCache(unsigned char, unsigned char) -00003944 g F .text 00000006 IridiumSBD::useMSSTMWorkaround(bool) -0000ffc4 g F .text 00000012 .hidden __aeabi_fcmpge -00010e0c g F .text 00000004 utoa -00004f74 g F .text 00000078 SDClass::begin(unsigned char) -0000f954 g F .text 0000004e .hidden __fixdfsi -0000b634 w F .text 00000008 HardwareSerial2::addMemoryForRead(void*, unsigned int) -00005d78 g F .text 0000005e ExFatFile::mkdir(ExFatFile*, ExName_t*) -0000c024 g F .text 00000006 unused_isr -0000b7b0 w F .text 00000010 HardwareSerial3::attachCts(unsigned char) -0000c024 w F .text 00000006 spi0_isr -0000e07c g F .text 00000038 serial3_add_memory_for_read -1fff9bdc g O .bss 00000001 __lock___malloc_recursive_mutex -0000b810 w F .text 00000004 HardwareSerial3::read() -0000fbe4 g F .text 0000007c .hidden __floatdisf -0000c024 w F .text 00000006 dma_ch3_isr -1fff9240 g O .bss 00000031 xbeeRecBuf -00004a4c w F .text 00000002 SDClass::~SDClass() -000035b0 g F .text 00000004 XBeeResponse::isAvailable() -0000bbe4 g F .text 00000066 String::copy(char const*, unsigned int) -1fff9a9c g O .bss 00000138 __sf -000035ac g F .text 00000004 XBeeResponse::getApiId() -00009994 g F .text 000000f8 SharedSpiCard::cardCommand(unsigned char, unsigned long) -00000d84 w F .text 000000a8 File::~File() -0000b560 w F .text 00000010 HardwareSerial::attachRts(unsigned char) -0000b4fc w F .text 0000000c HardwareSerial::write9bit(unsigned long) -0000ff00 g F .text 0000006e .hidden __gtsf2 -00008d7c g F .text 00000028 FatFile::getLfnChar(DirLfn_t*, unsigned char) -0000a580 g F .text 0000004e FsCache::prepare(unsigned long, unsigned char) -0000c0dc g F .text 00000004 operator delete(void*, unsigned int) -0000c024 w F .text 00000006 flash_error_isr -0000b54c w F .text 00000004 HardwareSerial::clear() -0000f088 g F .text 00000276 .hidden __aeabi_dadd -0000f820 g F .text 00000082 .hidden __ledf2 -0000b5b8 w F .text 00000004 HardwareSerial::flush() -0000cbe8 g F .text 00000014 serial_putchar -00011218 g F .text 0000003e strcat -0000ffb0 g F .text 00000012 .hidden __aeabi_fcmple -0000c024 w F .text 00000006 uart5_error_isr -0000bbd4 g F .text 0000000e String::~String() -0000c024 w F .text 00000006 rtc_seconds_isr -00018430 g O .text 00000078 SPIClass::spi0_hardware -0000c024 w F .text 00000006 pdb_isr -000141d8 g F .text 000000c0 __pow5mult -00007974 g F .text 00000090 FatFile::rmdir() -000035c8 g F .text 00000006 ZBTxStatusResponse::getDeliveryStatus() -0000f388 g F .text 0000006a .hidden __aeabi_ul2d -0000bfe0 w F .text 00000044 usage_fault_isr -0000c024 w F .text 00000006 dac1_isr -00000000 g O .text 000001bc _VectorsFlash -000090d4 g F .text 00000098 FatPartition::allocateCluster(unsigned long, unsigned long*) -0000c024 w F .text 00000006 dma_ch14_isr -00004cd8 w F .text 00000036 SDClass::exists(char const*) -1fff9a50 g O .bss 00000004 usb_cdc_line_rtsdtr_millis -0000eee4 g F .text 00000050 HardwareSerial::addToSerialEventsList() -0000b4a0 g F .text 00000010 systick_isr -0000dde8 g F .text 00000018 serial3_flush -0000c024 w F .text 00000006 rtc_alarm_isr -00011dac g F .text 00000002 __retarget_lock_release_recursive -0000bcd4 g F .text 0000002c String::String(unsigned long, unsigned char) -00017d3c g O .text 00000010 vtable for ZBTxRequest -0000b650 w F .text 00000010 HardwareSerial2::attachRts(unsigned char) -0000c024 w F .text 00000006 dma_ch2_isr -1fff8844 g O .data 00000010 Serial -0000c024 w F .text 00000006 ftm1_isr -0000bd38 g F .text 0000000e String::operator=(String const&) -000184c8 g O .text 00000068 vtable for HardwareSerial -0000ea74 w F .text 00000006 usb_serial_class::write(unsigned char) -0000dc94 g F .text 00000038 serial3_set_transmit_pin -000095d0 g F .text 00000072 FsBaseFile::openNext(FsBaseFile*, int) -0000c02c w F .text 0000000c startup_early_hook -0000c024 w F .text 00000006 dma_ch13_isr -00005910 g F .text 00000092 ExFatFile::addCluster() -1fff9774 g O .bss 00000004 FsDateTime::callback2 -00017b30 w O .text 0000002c vtable for File -0000b6a8 w F .text 00000004 HardwareSerial2::flush() -000097f4 g F .text 00000098 SharedSpiCard::readData(unsigned char*, unsigned int) -0000c024 w F .text 00000006 uart2_error_isr -00004d10 w F .text 000000bc SDClass::usedSize() -0000eb54 g F .text 00000030 usb_serial_peekchar -0000f914 g F .text 00000012 .hidden __aeabi_dcmpgt -0000e0b4 g F .text 00000020 serial3_add_memory_for_write -1fff9178 g O .bss 00000031 rxBuf -00010fb8 g F .text 0000000c __sfp_lock_acquire -00011db0 g F .text 00000000 memchr -0000918c g F .text 0000001c FatPartition::fatPut(unsigned long, unsigned long) -0000dd24 g F .text 00000002 serial3_set_rx -1fff9d7c g .bss 00000000 __bss_end__ -1fff88e8 g O .data 00000016 usb_string_serial_number_default -0000bfe0 g F .text 00000044 fault_isr -000120a4 g F .text 0000020c _free_r -0000988c g F .text 00000064 SharedSpiCard::writeData(unsigned char, unsigned char const*) -00011910 g F .text 0000000c __locale_mb_cur_max -00001448 g F .text 00000130 processGroundMessage() -00014a80 g F .text 0000001a _wcsrtombs_r -0000f900 g F .text 00000012 .hidden __aeabi_dcmpge -0000c024 w F .text 00000006 usb_charge_isr -1fff9be4 g O .bss 00000190 __atexit0 -0000ea64 w F .text 00000004 usb_serial_class::flush() -0000b394 g F .text 00000040 TinyGPSLocation::lng() -00006410 g F .text 000000ae ExFatFormatter::writeUpcase(unsigned long) -0000c024 w F .text 00000006 cmt_isr -0000f084 g F .text 0000027a .hidden __aeabi_dsub -0000c024 w F .text 00000006 usbhs_isr -1fff8d08 g O .data 00000004 __malloc_sbrk_base -0000ea5c w F .text 00000004 usb_serial_class::read() -0000c024 w F .text 00000006 ftm3_isr -000117a8 g F .text 00000168 strstr -0000c024 w F .text 00000006 tsi0_isr -000086a0 g F .text 00000110 FatFile::remove() -0000b588 w F .text 00000004 HardwareSerial::end() -0000f388 g F .text 0000006a .hidden __floatundidf -000035c0 g F .text 00000004 XBeeResponse::getErrorCode() -0000bc4c g F .text 0000002e String::String(unsigned char) -0000c084 w F .text 00000006 _lseek -0000c08c w F .text 00000002 __cxa_pure_virtual -1fff8758 g O .data 00000004 messageTimeInterval -00014298 g F .text 000000f0 __lshift -1fff910c g O .bss 00000004 lastMillisOfMessage -0000736c g F .text 000000e6 FatFile::mkdir(FatFile*, char const*, bool) -0000c024 w F .text 00000006 spi2_isr -0000fbb8 g F .text 0000001c .hidden __floatsisf -00015bd0 g F .text 00000100 __ssprint_r -00008030 g F .text 0000011c FatFile::createLFN(unsigned short, FatLfn_t*, unsigned char) -0000ade0 g F .text 0000008c TinyGPSPlus::parseDegrees(char const*, RawDegrees&) -0000effc w F .text 00000002 serialEvent() -1fff9a29 g O .bss 00000001 usb_reboot_timer -00003aa8 g F .text 00000060 IridiumSBD::send(char const*) -00011f5c g F .text 00000088 __register_exitproc -0000a138 g F .text 0000011c DedicatedSpiCard::writeSectorsCallback(unsigned long, unsigned int, unsigned char const* (*)(unsigned long, void*), void*) -0000580c g F .text 000000d0 ExFatFile::open(ExFatFile*, char const*, int) -00011380 g F .text 0000008a strncmp -00001dd4 g F .text 00000060 gps_baud_init() -00001be8 g F .text 00000078 getGPS() -00007f74 g F .text 000000bc FatFile::cmpName(unsigned short, FatLfn_t*, unsigned char) -00005dd8 g F .text 000000a4 ExFatFile::mkdir(ExFatFile*, char const*, bool) -000089ec g F .text 00000114 FatFormatter::makeFat16() -0000bdd8 g F .text 0000001c operator+(StringSumHelper const&, char const*) -0000ebb0 g F .text 00000038 usb_serial_flush_input -00006ef8 g F .text 0000006c ExFatPartition::freeClusterCount() -0001407c g F .text 0000015c __multiply -1fff9148 g O .bss 0000000c msr -0000ecf0 g F .text 0000001a usb_serial_putchar -00000021 g *ABS* 00000000 _teensy_model_identifier -00009a8c g F .text 000001f8 SharedSpiCard::begin(SdSpiConfig) -1fff91b0 g O .bss 0000000c txStatus -00010018 g F .text 0000004c .hidden __aeabi_f2iz -0001140c g F .text 00000064 strncpy -1fff9a68 g O .bss 00000028 __malloc_current_mallinfo -0000ff10 g F .text 0000005e .hidden __eqsf2 -0001451c g F .text 000000c0 __d2b -1fff9a58 g O .bss 0000000c HardwareSerial::s_serials_with_serial_events -0000c024 w F .text 00000006 can0_bus_off_isr -0000d56c g F .text 00000110 serial2_write -0000b5f8 w F .text 0000000c HardwareSerial2::write(unsigned char) -0000b6d0 w F .text 00000020 HardwareSerial2::write(unsigned long) -00010648 g F .text 00000018 realloc -0000a044 g F .text 000000f4 DedicatedSpiCard::writeSectors(unsigned long, unsigned char const*, unsigned int) -00009c84 g F .text 0000006a SharedSpiCard::readRegister(unsigned char, void*) -0000d694 g F .text 00000030 serial2_write_buffer_free -0000136c g F .text 000000dc xbeeSend(unsigned long, unsigned char*) -1fff9a34 g O .bss 00000001 usb_rx_memory_needed -0000e258 g F .text 00000774 usb_isr -0001191c g F .text 0000000c __cxa_atexit -000051c0 g F .text 000001a8 ExFatFile::read(void*, unsigned int) -00003528 g F .text 00000050 ZBTxRequest::getFrameData(unsigned char) -0000fdc8 g F .text 00000136 .hidden __aeabi_fdiv -000148ec g F .text 00000024 _close_r -00008f4c w F .text 00000042 FsBlockDeviceInterface::readSectorsCallback(unsigned long, unsigned char*, unsigned int, void (*)(unsigned long, unsigned char*, void*), void*) -0000f320 g F .text 00000022 .hidden __aeabi_i2d -00009d78 g F .text 00000064 SharedSpiCard::readStop() -000008e0 w F .text 00000018 SDFile::peek() -0000a530 g F .text 0000004e FsCache::sync() -00011470 g F .text 00000010 strtok -1fff878c g O .data 00000038 SPI -00003800 g F .text 00000034 ZBTxRequest::ZBTxRequest(XBeeAddress64&, unsigned char*, unsigned char) -1fff8843 g O .data 00000001 _serialEvent3_default -00011018 g F .text 00000064 memcmp -00018724 w O .text 00000028 vtable for usb_serial_class -0000a4c4 g F .text 00000016 SdSpiArduinoDriver::send(unsigned char) -0000c024 w F .text 00000006 uart3_error_isr -0000bb60 g F .text 0000003a String::String(char const*) -00011da4 g F .text 00000002 __retarget_lock_close_recursive -0000fbd4 g F .text 0000008c .hidden __floatundisf -0000a3b0 g F .text 00000004 sdCsWrite(unsigned char, bool) -0000c8c0 g F .text 000000bc serial_format -00017034 g F .text 000000cc __swsetup_r -00005a58 g F .text 0000005e ExFatFile::rmdir() -0000c024 w F .text 00000006 porta_isr -0000f648 g F .text 000001d0 .hidden __divdf3 -1fff8841 g O .data 00000001 _serialEvent1_default -00011324 g F .text 0000005a strncat -1fff83bc g O .usbbuffers 00000360 usb_buffer_memory -0000c024 w F .text 00000006 low_voltage_isr -1fff8900 g O .data 00000408 __malloc_av_ -0000fbb0 g F .text 00000024 .hidden __aeabi_ui2f -1fff9d74 g O .bss 00000004 __atexit -0000c024 w F .text 00000006 can0_error_isr -0000cbfc g F .text 00000110 serial_write -0000c4dc g F .text 000000a4 _init_Teensyduino_internal_ -00000970 w F .text 00000014 SDFile::flush() -0000f3f4 g F .text 00000254 .hidden __muldf3 -1fff8774 g O .data 00000014 txLogFile -00014818 g F .text 00000022 __sread -1fff8788 g O .data 00000004 txLogName -0000df30 g F .text 00000024 serial3_clear -1fff9108 g O .bss 00000004 lastLog -0000ed54 g F .text 00000058 usb_serial_flush_output -0000c024 w F .text 00000006 dma_ch12_isr -00010630 g F .text 0000000c __malloc_lock -00006a0c g F .text 000000c8 ExFatFile::getName8(char*, unsigned int) -0000a5e4 g F .text 00000018 FsDateTime::setCallback(void (*)(unsigned short*, unsigned short*)) -0000c024 w F .text 00000006 can1_wakeup_isr -1fff8200 g O .dmabuffers 000001bc _VectorsRam -0000a4dc g F .text 00000052 SdSpiArduinoDriver::send(unsigned char const*, unsigned int) -0000cafc g F .text 00000054 serial_set_rx -0000881c g F .text 00000120 FatFormatter::initFatDir(unsigned char, unsigned long) -000147c4 g F .text 00000054 _fflush_r -00014b4c g F .text 00000078 _calloc_r -0000169c g F .text 00000124 processWireMessage() -0000b5c0 g F .text 0000002c HardwareSerial2::begin(unsigned long) -0000c024 w F .text 00000006 pit3_isr -00003f78 g F .text 00000294 IridiumSBD::doSBDRB(unsigned char*, unsigned int*) -0000aae0 g F .text 0000007c SPIClass::begin() -00010d70 g F .text 0000009c __utoa -0000ff10 g F .text 0000005e .hidden __cmpsf2 -00008350 g F .text 00000284 FatFile::open(FatFile*, FatLfn_t*, int) -1fff8858 g O .data 00000001 yield_active_check_flags -0000c024 w F .text 00000006 enet_rx_isr -00005bec g F .text 0000005e ExFatFile::sync() -00011da8 g F .text 00000002 __retarget_lock_acquire_recursive -000077fc g F .text 00000178 FatFile::rename(FatFile*, char const*) -0000c024 w F .text 00000006 portc_isr -1fff91ac g O .bss 00000004 sbd_csq -00011174 g F .text 000000a4 memset -0000be28 g F .text 00000010 main -1fff9a94 g O .bss 00000004 __malloc_max_total_mem -00006b40 g F .text 000000c0 ExFatPartition::bitmapFind(unsigned long, unsigned long) -00011da0 g F .text 00000002 __retarget_lock_init_recursive -0000d778 g F .text 0000004c serial2_peek -0000fbe4 g F .text 0000007c .hidden __aeabi_l2f -0000d3f0 g F .text 00000044 serial2_set_rts -00009df4 g F .text 00000074 SharedSpiCard::writeSector(unsigned long, unsigned char const*) -000060c4 g F .text 0000027c ExFatFile::write(void const*, unsigned int) -0000ff08 g F .text 00000066 .hidden __ltsf2 -0000bfe0 w F .text 00000044 memmanage_fault_isr -0000a648 g F .text 0000009e lbaToMbrChs(unsigned char*, unsigned long, unsigned long) -000071fc g F .text 00000038 FatFile::dirEntry(DirFat_t*) -00000a90 w F .text 0000004c SDFile::available() -0000dd6c g F .text 00000040 serial3_set_cts -0001489c g F .text 00000008 __sclose -0000f000 g F .text 00000070 usb_init_serialnumber -0000f9a4 g F .text 0000009e .hidden __truncdfsf2 -00018be0 g .text 00000000 __init_array_end -00017d4c g O .text 00000010 vtable for ZBRxResponse -00014cf0 g F .text 00000eb8 _dtoa_r -000100d0 g F .text 00000560 _malloc_r -0000b544 w F .text 00000008 HardwareSerial::addMemoryForRead(void*, unsigned int) -00009fa8 g F .text 0000009c DedicatedSpiCard::readSector(unsigned long, unsigned char*) -1fff9a64 g O .bss 00000001 HardwareSerial::s_count_serials_with_serial_events -0000c024 w F .text 00000006 debugmonitor_isr -000148a4 g F .text 0000001a __ascii_wctomb -00000460 w F .text 00000012 SDFile::isOpen() -0000949c g F .text 0000005a FsBaseFile::FsBaseFile(FsBaseFile const&) -0000f398 g F .text 0000005a .hidden __aeabi_l2d -1fff9768 g O .bss 00000004 FatVolume::m_cwv -0000d434 g F .text 00000040 serial2_set_cts -0000b3d4 g F .text 00000084 EventResponder::triggerEventNotImmediate() -0000b75c w F .text 0000000c HardwareSerial3::write9bit(unsigned long) -0000abb0 g F .text 00000008 SPIClass::transfer(void const*, void*, unsigned int) -692736ad g *ABS* 00000000 __rtc_localtime -0000fbd4 g F .text 0000008c .hidden __aeabi_ul2f -0000c024 w F .text 00000006 cmp1_isr -0000c024 w F .text 00000006 ftm0_isr -0000b640 w F .text 00000010 HardwareSerial2::attachCts(unsigned char) -00005ab8 g F .text 00000134 ExFatFile::syncDir() -0000ff78 g F .text 00000010 .hidden __aeabi_cfcmple -00012004 g F .text 000000a0 _malloc_trim_r -00017214 g F .text 000000f8 _wcsnrtombs_l -1fff88b4 g O .data 00000004 string0 -0000ebe8 g F .text 00000108 usb_serial_write -0000fc60 g F .text 00000168 .hidden __mulsf3 -0000c038 w F .text 00000002 startup_late_hook -0000b80c w F .text 00000004 HardwareSerial3::peek() -0000a254 g F .text 000000ec DedicatedSpiCard::writeSector(unsigned long, unsigned char const*) -0000ea60 w F .text 00000004 usb_serial_class::available() -000119c8 g F .text 000002dc strcmp -0000466c g F .text 00000026 IridiumSBD::sendSBDText(char const*) -0000360c g F .text 00000052 XBeeResponse::getZBRxResponse(XBeeResponse&) -0000b880 w F .text 00000020 HardwareSerial3::write(unsigned int) -000184c6 w O .text 00000001 _serialEvent_default -1fff9110 g O .bss 00000004 lastSignalCheck -00007c50 g F .text 0000000c FatFile::sync() -0000de00 g F .text 00000030 serial3_write_buffer_free -000037f4 g F .text 00000006 XBeeAddress64::XBeeAddress64(unsigned long, unsigned long) -00008cc8 g F .text 000000b4 FatFormatter::format(FsBlockDeviceInterface*, unsigned char*, Print*) -0000b7ec w F .text 00000020 HardwareSerial3::begin(unsigned long, unsigned long) -00004c9c w F .text 0000003a SDClass::mkdir(char const*) -0000b860 w F .text 00000020 HardwareSerial3::write(long) -1fff9298 g O .bss 00000008 RemoteAtCommandRequest::broadcastAddress64 -1fff88d0 w O .data 00000016 usb_string_product_name -0000cb50 g F .text 00000044 serial_set_rts -000049f0 g F .text 0000005c IridiumSBD::begin() -0000c97c g F .text 000000cc serial_end -0000c660 g F .text 00000098 delay -0000f828 g F .text 0000007a .hidden __nedf2 -0000c024 w F .text 00000006 tpm0_isr -000050cc g F .text 00000022 ExFatFile::getModifyDateTime(unsigned short*, unsigned short*) -00018be0 g F .fini 00000000 _fini -0000b4c0 w F .text 00000008 HardwareSerial::write(unsigned int) -00003608 g F .text 00000004 ZBRxResponse::getRemoteAddress64() -00009774 g F .text 0000007e SharedSpiCard::isBusy() -000183a4 g O .text 0000002e SPISettings::ctar_div_table -0000d058 g F .text 00000020 serial_add_memory_for_write -000058ec g F .text 00000024 ExFatFile::openNext(ExFatFile*, int) -00010e10 g F .text 00000040 sprintf -0000c024 w F .text 00000006 i2s0_rx_isr -0000c024 w F .text 00000006 uart4_error_isr -000035c4 g F .text 00000002 ZBTxStatusResponse::ZBTxStatusResponse() -0000b9a0 g F .text 00000010 Print::print(long) -000071dc g F .text 0000001e FatFile::close() -00003940 g F .text 00000004 IridiumSBD::adjustSendReceiveTimeout(int) -00000b70 w F .text 00000048 SDFile::~SDFile() -1fff875c g O .data 00000014 rxLogFile -00011ff8 g F .text 0000000c atexit -0000ff00 g F .text 0000006e .hidden __gesf2 -00007274 g F .text 000000f8 FatFile::mkdir(FatFile*, FatLfn_t*) -0001730c g F .text 00000024 _wcsnrtombs_r -000008c8 w F .text 00000018 StreamFile::peek() -00000adc w F .text 00000054 File::write(unsigned char) -0001196c g F .text 0000002c _write_r -0000bc4c g F .text 0000002e String::String(unsigned char) -0000c13c g F .text 0000001c ltoa -0000b53c w F .text 00000008 HardwareSerial::addMemoryForWrite(void*, unsigned int) -1fff92a0 g O .bss 000004c4 SD -0000ae6c g F .text 00000420 TinyGPSPlus::endOfTermHandler() -0000fa44 g F .text 0000016c .hidden __aeabi_frsub -0000bb60 g F .text 0000003a String::String(char const*) -0000c024 w F .text 00000006 can0_message_isr -1fff8fa8 g O .data 00000004 _impure_ptr -00017ac4 w O .text 00000024 vtable for Stream -0000ff88 g F .text 00000012 .hidden __aeabi_fcmpeq -0000c024 w F .text 00000006 can1_message_isr -00005368 g F .text 0000002e ExFatFile::peek() -000146a4 g F .text 0000011e __sflush_r -00017ae8 w O .text 00000024 vtable for StreamFile -0000c024 w F .text 00000006 nmi_isr -0000b69c w F .text 00000004 HardwareSerial2::peek() -000009ac w F .text 00000014 SDFile::write(void const*, unsigned int) -0000fc60 g F .text 00000168 .hidden __aeabi_fmul -00009730 g F .text 00000028 FsVolume::open(char const*, int) -00010fd0 g F .text 00000046 _fwalk_sglue -00007550 g F .text 0000000e FatFile::open(FatVolume*, char const*, int) -00000998 w F .text 00000014 StreamFile::write(unsigned char const*, unsigned int) -00018bcc g .text 00000000 __preinit_array_end -00003b08 g F .text 000000b4 IridiumSBD::filterSBDRING() -0000ff70 g F .text 00000018 .hidden __aeabi_cfrcmple -0000b62c w F .text 00000008 HardwareSerial2::addMemoryForWrite(void*, unsigned int) -0000c024 w F .text 00000006 sdhc_isr -00018598 g O .text 00000068 vtable for HardwareSerial3 -0000b818 w F .text 00000004 HardwareSerial3::flush() -00006d00 g F .text 00000036 ExFatPartition::dirCache(DirPos_t*, unsigned char) -000122b0 g F .text 0000002a __ascii_mbtowc -00003660 g F .text 0000000e RxDataResponse::getData() -00001f08 g F .text 00000af4 setup -0001874c g O .text 00000054 usb_descriptor_list -0000e0e0 g F .text 00000044 usb_rx -0000c024 w F .text 00000006 dma_ch10_isr -0000b4c8 w F .text 00000008 HardwareSerial::write(int) -00007254 g F .text 00000020 FatFile::getModifyDateTime(unsigned short*, unsigned short*) -0000045c w F .text 00000002 Print::flush() -0000c024 w F .text 00000006 uart0_error_isr -00004b90 w F .text 00000052 SDClass::rmdir(char const*) -0000ea7c g F .text 00000040 usb_malloc -0000ad84 g F .text 0000005c TinyGPSPlus::parseDecimal(char const*) -000075f0 g F .text 0000019a FatFile::read(void*, unsigned int) -1fff8724 g O .data 00000004 arm_status -0000ff9c g F .text 00000012 .hidden __aeabi_fcmplt -0000c024 w F .text 00000006 i2s0_isr -000075b8 g F .text 00000036 FatFile::openRoot(FatVolume*) -1fff9764 g O .bss 00000004 ExFatVolume::m_cwv -1fff872c g O .data 00000014 gpsInfo -20008000 g .bss 00000000 _estack -00009644 g F .text 00000004 operator new(unsigned int, unsigned long*) -00000790 w F .text 00000058 File::read() -00003524 g F .text 00000004 ZBRxResponse::getDataOffset() -0000ed0c g F .text 00000048 usb_serial_write_buffer_free -0000c024 w F .text 00000006 enet_timer_isr -0000f8c4 g F .text 00000012 .hidden __aeabi_dcmpeq -00003578 g F .text 00000008 ZBTxRequest::getFrameDataLength() -1fff8d10 g O .data 0000000c __sglue -00000e2c w F .text 000000b0 File::~File() -0000b9cc w F .text 00000014 _write -1fff8fb0 g .data 00000000 _edata -00006dfc g F .text 00000040 ExFatPartition::fatPut(unsigned long, unsigned long) -00003678 g F .text 00000024 XBee::XBee() -0000c024 w F .text 00000006 i2s0_tx_isr -0000c024 w F .text 00000006 adc1_isr -0000ffec g F .text 0000002c .hidden __unordsf2 -0000a5fc g F .text 0000004c FsName::get16() -00009758 w F .text 00000002 DedicatedSpiCard::~DedicatedSpiCard() -00009efc g F .text 000000aa DedicatedSpiCard::readSectorsCallback(unsigned long, unsigned char*, unsigned int, void (*)(unsigned long, unsigned char*, void*), void*) -00006ad4 g F .text 0000006a ExFatFile::hashName(ExName_t*) -0000a368 g F .text 00000040 DedicatedSpiCard::setDedicatedSpi(bool) -00007144 g F .text 00000078 FatFile::addDirCluster() -00017100 g F .text 000000ac __fputwc -0000ea68 w F .text 00000004 usb_serial_class::availableForWrite() -0000c024 w F .text 00000006 cmp0_isr -00008fc4 g F .text 00000030 FatPartition::freeClusterCount_cb_fat32(unsigned long, unsigned char*, void*) -0000c0e0 g F .text 0000005c ultoa -000037fc g F .text 00000004 XBeeAddress64::getLsb() -00004a4c w F .text 00000002 SDClass::~SDClass() -00009520 g F .text 000000ae FsBaseFile::open(FsVolume*, char const*, int) -0000d394 g F .text 0000005c serial2_set_rx -0001483c g F .text 0000003e __swrite -0000c0d8 g F .text 00000004 operator new(unsigned int) -0000b458 g F .text 00000044 EventResponder::runFromInterrupt() -1fff8d0c g O .data 00000004 __malloc_trim_threshold -0000ea58 w F .text 00000004 usb_serial_class::peek() -00011928 g F .text 00000020 fcvtf -00015ba8 g F .text 00000028 fiprintf -00015d48 g F .text 00000f84 _vfiprintf_r -0000fbb0 g F .text 00000024 .hidden __floatunsisf -000143c8 g F .text 00000154 __mdiff -000035f4 g F .text 00000014 ZBRxResponse::ZBRxResponse() -1fff91bc g O .bss 00000084 xbee -0000f954 g F .text 0000004e .hidden __aeabi_d2iz -0000b5b0 w F .text 00000004 HardwareSerial::read() -0000b6a0 w F .text 00000004 HardwareSerial2::read() -00006d38 g F .text 00000082 ExFatPartition::dirSeek(DirPos_t*, unsigned long) -1fff9a54 g O .bss 00000001 usb_cdc_transmit_flush_timer -00008e38 g F .text 00000110 FatFile::getName8(char*, unsigned int) -1fff8e88 g O .data 00000120 _impure_data -0000ff78 g F .text 00000010 .hidden __aeabi_cfcmpeq -000035c4 g F .text 00000002 ZBTxStatusResponse::ZBTxStatusResponse() -00005478 g F .text 00000394 ExFatFile::openPrivate(ExFatFile*, ExName_t*, int) -0000dd28 g F .text 00000044 serial3_set_rts -0000c024 w F .text 00000006 pit_isr -0000187c g F .text 000002a0 xbeeRead() -00010fc4 g F .text 0000000c __sfp_lock_release -1fff8842 g O .data 00000001 _serialEvent2_default -0000bcd4 g F .text 0000002c String::String(unsigned long, unsigned char) -00010074 g F .text 00000008 atoi -1fff8740 g O .data 00000014 gpsLogFile -00005094 g F .text 00000014 ExFatFile::close() -00018810 g O .text 00000101 _ctype_ -0000c024 w F .text 00000006 dac0_isr -0000d67c g F .text 00000018 serial2_flush -0000c068 w F .text 00000004 _read -00018bcc g .text 00000000 __init_array_start -0000c024 w F .text 00000006 can1_tx_warn_isr -1fff8728 g O .data 00000004 eventLogName -0000f928 g F .text 0000002c .hidden __unorddf2 -0000369c g F .text 00000006 XBee::setSerial(Stream&) -00006388 g F .text 0000003c ExFatFormatter::writeUpcaseByte(unsigned char) -0000b670 w F .text 00000006 HardwareSerial2::transmitterEnable(unsigned char) -00004be4 w F .text 00000064 SDClass::rename(char const*, char const*) -0000ce9c g F .text 00000184 uart0_status_isr -00003678 g F .text 00000024 XBee::XBee() -0000c024 w F .text 00000006 mcg_isr -0000dee4 g F .text 0000004c serial3_peek -0000d990 g F .text 00000038 serial2_add_memory_for_read -00000400 g O .text 00000010 flashconfigbytes -00017330 g F .text 000000d8 __smakebuf_r -0000975c w F .text 00000006 SharedSpiCard::end() -000035d0 g F .text 00000022 XBeeResponse::getZBTxStatusResponse(XBeeResponse&) -00011e80 g F .text 000000dc strlen -00007560 g F .text 00000058 FatFile::openCluster(FatFile*) -000036a4 g F .text 00000002 XBee::getResponse() -0000f8b4 g F .text 00000010 .hidden __aeabi_cdcmpeq -0000f818 g F .text 0000008a .hidden __gedf2 -00001578 g F .text 00000124 processBlueMessage() -00007a04 g F .text 000000b0 FatFile::seekSet(unsigned long) -1fff88d0 g O .data 00000016 usb_string_product_name_default -1fff8754 g O .data 00000004 gpsLogName -0000b52c w F .text 00000010 HardwareSerial::write(unsigned char const*, unsigned int) -0000c024 w F .text 00000006 dma_ch1_isr -0000e124 g F .text 0000002c usb_tx_packet_count -0000b6f0 w F .text 00000020 HardwareSerial2::write(long) -00007b94 g F .text 000000ba FatFile::openNext(FatFile*, int) -00011258 g F .text 000000cc strchr -0000c4d8 w F .text 00000002 startup_middle_hook -0000b954 g F .text 0000004c Print::print(String const&) -0000f344 g F .text 00000042 .hidden __aeabi_f2d -0000c024 w F .text 00000006 dma_ch5_isr -00008f48 g F .text 00000004 FatFile::getName(char*, unsigned int) -0000c024 w F .text 00000006 can0_rx_warn_isr -0000cd7c g F .text 0000008c serial_getchar -0000b9f4 g F .text 0000016c breakTime(unsigned long, DateTimeFields&) -0000b814 w F .text 00000004 HardwareSerial3::available() -0000c024 w F .text 00000006 can0_tx_warn_isr -0000c024 w F .text 00000006 uart4_status_isr -00003bbc g F .text 000001d0 IridiumSBD::waitForATResponse(char*, int, char const*, char const*) -0000bca8 g F .text 0000002c String::String(long, unsigned char) -0000a3b4 g F .text 00000078 SdSpiArduinoDriver::activate() -0000f084 g F .text 0000027a .hidden __subdf3 -0000b354 g F .text 00000040 TinyGPSLocation::lat() -00018bcc g .text 00000000 __preinit_array_start -00006c00 g F .text 000000ae ExFatPartition::bitmapModify(unsigned long, unsigned long, bool) -0000cb94 g F .text 00000054 serial_set_cts -00013fc0 g F .text 0000005e __lo0bits -0000b7a4 w F .text 00000008 HardwareSerial3::addMemoryForRead(void*, unsigned int) -00006cb0 g F .text 0000004e ExFatPartition::chainSize(unsigned long) -0000ce08 g F .text 0000004c serial_peek -00007ab4 g F .text 000000de FatFile::openCachedEntry(FatFile*, unsigned short, int, unsigned char) -0000420c g F .text 00000460 IridiumSBD::internalSendReceiveSBD(char const*, unsigned char const*, unsigned int, unsigned char*, unsigned int*) -00007c5c g F .text 000000d6 FatFile::timestamp(unsigned char, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char) -00009ddc g F .text 00000016 SharedSpiCard::syncDevice() -0000dccc g F .text 00000058 serial3_set_tx -0000e0dc w F .text 00000002 serialEvent3() -0000f070 g F .text 0000000a __aeabi_atexit -0000c4b8 g F .text 0000000c rtc_get -1fff8fc9 g O .bss 00000001 downlinkData -0000ca48 g F .text 00000038 serial_set_transmit_pin -000059a4 g F .text 000000b4 ExFatFile::remove() -00014a9c g F .text 00000070 frexp -0000c024 w F .text 00000006 cmp2_isr -0000fa50 g F .text 00000160 .hidden __addsf3 -0000b49c g F .text 00000004 pendablesrvreq_isr -00004e88 w F .text 0000003c SDClass::totalSize() -0000b6ac w F .text 00000004 HardwareSerial2::availableForWrite() -00000458 w F .text 00000004 Print::availableForWrite() -1fff8d1c g O .data 0000016c __global_locale -0000c024 w F .text 00000006 wakeup_isr -0000b7d8 w F .text 00000006 HardwareSerial3::setRX(unsigned char) -00001b1c g F .text 000000cc gps_set_navmode_one_g() -000050a8 g F .text 00000022 ExFatFile::getCreateDateTime(unsigned short*, unsigned short*) -1fff9be0 g O .bss 00000001 __lock___sfp_recursive_mutex -0000c024 w F .text 00000006 cmp3_isr -0000d020 g F .text 00000038 serial_add_memory_for_read -0000b9e0 g F .text 00000014 Print::printNumber(unsigned long, unsigned char, unsigned char) -0000db6c g F .text 000000bc serial3_format -0000c06c w F .text 00000006 _close -0000916c g F .text 00000020 FatPartition::fatGet(unsigned long, unsigned long*) -000100c0 g F .text 00000010 free -0000c024 w F .text 00000006 tpm2_isr -000069c0 g F .text 0000004c ExFatFile::cmpName(DirName_t const*, ExName_t*) -00013ee0 g F .text 000000a0 __multadd -00013ecc g F .text 00000012 _Bfree -1fff87d8 g O .data 00000014 Serial2 -00000804 w F .text 0000001a SDFile::size() -00008da4 g F .text 00000092 FatFile::getSFN(char*, unsigned int) -0000c024 w F .text 00000006 dma_ch0_isr -00000b30 w F .text 00000040 SDFile::~SDFile() -1fff88e8 w O .data 00000016 usb_string_serial_number -0000c024 w F .text 00000006 enet_tx_isr - - diff --git a/Code/BITS/BITSv4/sketch.yaml b/Code/BITS/BITSv4/sketch.yaml new file mode 100644 index 00000000..f38e84c2 --- /dev/null +++ b/Code/BITS/BITSv4/sketch.yaml @@ -0,0 +1,13 @@ +profiles: + bitsv4: + fqbn: teensy:avr:teensy31 + platforms: + - platform: teensy:avr (1.59.0) + platform_index_url: https://www.pjrc.com/teensy/package_teensy_index.json + libraries: + - SD (1.3.0) + - Iridium SBD (2.0.0) + - XBee-Arduino library (0.6.0) + - TinyGPSPlus (1.0.3) + +default_profile: bitsv4