Bootloaders

This commit is contained in:
Richard Wackerbarth 2015-06-08 20:46:22 -05:00
parent bf629cf7b1
commit 1fd335b702
12 changed files with 3077 additions and 0 deletions

View file

@ -0,0 +1,139 @@
:020000021000EC
:10F000004BC0000077C0000075C0000073C0000056
:10F0100071C000006FC000006DC000006BC0000038
:10F0200069C0000067C0000028C2000063C0000083
:10F0300061C000005FC000005DC000005BC0000058
:10F0400059C0000057C0000055C0000053C0000068
:10F0500051C000004FC000004DC000004BC0000078
:10F0600049C0000047C0000045C0000043C0000088
:10F0700041C000003FC000003DC000003BC0000098
:10F0800039C0000037C0000035C0000033C00000A8
:10F0900031C000002FC0000011241FBECFEFD0E20E
:10F0A000DEBFCDBF04B603FE0EC080915401909127
:10F0B000550182349C4D39F410925501109254013F
:10F0C000E0E0F0E0099511E0A0E0B1E0E8E2F8EF5F
:10F0D00001E00BBF02C007900D92AA34B107D9F727
:10F0E00021E0AAE4B1E001C01D92A435B207E1F726
:10F0F00002D098C385CF84B7877F84BF88E10FB6DD
:10F10000F89480936000109260000FBE81E085BF8C
:10F1100082E085BF97D1789480910001882311F017
:10F1200066D3FACF8091E00081608093E00082E4B2
:10F130009CED90935501809354012CE088E190E080
:10F140000FB6F894A895809360000FBE20936000DE
:10F15000FFCF42E361EC81E002C1CF92DF92EF92F8
:10F16000FF921F93CF93DF9380914C018F77813271
:10F1700009F075C080914D01893009F070C080910F
:10F18000E800877F8093E8008091E80082FFFCCF51
:10F190009091F1008091F100492F582F60E070E0CC
:10F1A000B62FA52F942F88274F3F5F4F19F4109249
:10F1B00000013EC023E0FC01A0935B0020935700B8
:10F1C000E89507B600FCFDCF20E030E011E040916B
:10F1D000F2005091F300452B09F437C05091F10033
:10F1E0004091F100C52FD42FA901440F551F6C0188
:10F1F0007D01C40ED51EE11CF11C0E01F601E0924A
:10F200005B0010935700E89511242F5F3F4F203883
:10F210003105E9F625E0FC01A0935B00209357003F
:10F22000E89507B600FCFDCF81E180935700E89593
:10F230008091E8008B778093E800DF91CF911F9158
:10F24000FF90EF90DF90CF909EC04091E8004B7709
:10F250004093E8004091E80042FFFCCFBFCFDF9130
:10F26000CF911F91FF90EF90DF90CF900895913054
:10F2700049F0923061F0913279F489E090E023E135
:10F2800031E00EC082E190E023E231E009C082E289
:10F2900090E021E031E004C085E190E025E331E039
:10F2A000FA01318320830895209152013091530156
:10F2B0002617370748F06115710539F42091E800E9
:10F2C0002E772093E80001C0B901FC0120E0611510
:10F2D000710591F18EB38823E1F18530E1F18091E0
:10F2E000E80083FD3AC08091E80082FF06C080916B
:10F2F000E80082FF24C080E008958091E80080FF4C
:10F30000E6CF8091F2009091F3006115710551F004
:10F310008830910538F421912093F10061507109F2
:10F320000196F3CF21E0089709F020E08091E800F2
:10F330008E778093E800CBCF2111CCCFD8CF8EB37E
:10F34000882339F0853039F08091E80083FFCFCFF2
:10F3500004C082E0089583E0089581E008958F70ED
:10F360008093E900EBEEF0E0808181608083EDEE38
:10F37000F0E010826093EC0040838091EE00881FE3
:10F380008827881F089580914C0187FD05C08091D2
:10F39000E80080FF0DC010C08091E80082FD04C02D
:10F3A0008EB38111F9CF08958091E8008B7707C063
:10F3B0008EB38111ECCF08958091E8008E77809311
:10F3C000E80008950F931F93CF93DF9349D050D057
:10F3D000C8EDD0E088818F778883888180688883B2
:10F3E00088818F7D8883E7EDF0E08081806880836D
:10F3F00019BC1EBA10924A0100EE10E0F80180819B
:10F400008B7F808388818160888342E060E080E038
:10F41000A6DFE1EEF0E080818E7F8083E2EEF0E017
:10F42000808181608083808188608083F801808111
:10F430008E7F8083888180618883DF91CF911F9147
:10F440000F910895E8EDF0E080818F7E8083E7EDF5
:10F45000F0E080818160808381E080934B01B2CFB6
:10F46000E8EDF0E080818C7F80831092E2000895C7
:10F470001092DA001092E10008951F920F920FB6D9
:10F480000F9211240BB60F922F933F934F935F93DC
:10F490006F937F938F939F93AF93BF93EF93FF935C
:10F4A0008091DA0080FF1BC08091D80080FF17C0D8
:10F4B0008091DA008E7F8093DA008091D90080FFFE
:10F4C0000BC084E189BD86E189BD09B400FEFDCF92
:10F4D00081E08EBB8BD103C019BC1EBA87D180914D
:10F4E000E10080FF17C08091E20080FF13C080918F
:10F4F000E2008E7F8093E2008091E2008061809341
:10F50000E2008091D80080628093D80019BC85E029
:10F510008EBB6CD18091E10084FF2EC08091E2000F
:10F5200084FF2AC084E189BD86E189BD09B400FE5B
:10F53000FDCF8091D8008F7D8093D8008091E1002D
:10F540008F7E8093E1008091E2008F7E8093E200C5
:10F550008091E20081608093E20080914A018823DB
:10F5600011F084E007C08091E30087FF02C083E0D0
:10F5700001C081E08EBB3AD18091E10083FF21C0C0
:10F580008091E20083FF1DC08091E100877F80931E
:10F59000E10082E08EBB10924A018091E1008E7FF3
:10F5A0008093E1008091E2008E7F8093E200809161
:10F5B000E20080618093E20042E060E080E0CFDE24
:10F5C00015D1FF91EF91BF91AF919F918F917F9155
:10F5D0006F915F914F913F912F910F900BBE0F90C4
:10F5E0000FBE0F901F9018951F93CF93DF9300D0FD
:10F5F000CDB7DEB7ECE4F1E08091F100819381E0DA
:10F60000E435F807C9F7A9DD8091E80083FFDAC087
:10F6100090914C0180914D01853009F465C030F422
:10F62000813059F168F0833041F1CCC0883009F461
:10F630009CC0893009F4ABC0863009F0C3C075C0E6
:10F64000903881F0923809F0BDC0809150018F70E0
:10F650008093E9009091EB0095FB992790F9109227
:10F66000E90001C090E08091E800877F8093E80086
:10F670009093F1001092F10083C0292F2D7F09F0A3
:10F68000A1C0923009F09EC090914E01911126C008
:10F69000209150012F7009F495C02093E9009091BA
:10F6A000EB0090FF1BC0833021F48091EB0080625F
:10F6B00013C08091EB0080618093EB0081E090E0CB
:10F6C000022E01C0880F0A94EAF78093EA00109294
:10F6D000EA008091EB0088608093EB001092E900D3
:10F6E0008091E800877F4FC091116CC010914E014E
:10F6F0001F778091E3008078812B8093E3008091D5
:10F70000E800877F8093E8003EDE8091E80080FF7C
:10F71000FCCF8091E30080688093E300112311F017
:10F7200083E001C082E08EBB4DC09058923008F05B
:10F7300049C0AE014F5F5F4F6091500180914E0113
:10F7400090914F0194DD009709F43CC02091E800AE
:10F75000277F2093E800BC0189819A81A5DD8091F3
:10F76000E8008B778093E8002DC0903859F58091A0
:10F77000E800877F8093E80080914A018093F10040
:10F780008091E8008E778093E800FDDD1BC0911129
:10F7900019C090914E019230A8F48091E800877FC3
:10F7A0008093E80090934A01EEDD80914A01811137
:10F7B00004C08091E30087FF02C084E001C081E0C3
:10F7C0008EBBC7DC8091E80083FF0AC08091E8000F
:10F7D000877F8093E8008091EB0080628093EB004C
:10F7E0000F900F90DF91CF911F9108950895CF93BF
:10F7F0008EB38823A9F08091E9008F709091EC007E
:10F8000090FF02C090E801C090E0C92FC82B109271
:10F81000E9008091E80083FDE7DECF70C093E90046
:08F82000CF910895F894FFCF89
:10F8280001090222000101008032090400000103DD
:10F8380000000009211101000122150007058103BC
:10F848004000051201100100000008EB03672001C9
:10F85800000000000106DCFF09FBA10109021500F8
:0AF8680025FF75089602019102C009
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,247 @@
:020000021000EC
:10F000004BC0000066C0000064C0000062C0000089
:10F0100060C000005EC000005CC000005AC000007C
:10F0200058C0000056C00000ACC4000052C0000030
:10F0300050C000004EC000004CC000004AC000009C
:10F0400048C0000046C0000044C0000042C00000AC
:10F0500040C000003EC000003CC000003AC00000BC
:10F0600038C0000036C0000034C0000032C00000CC
:10F0700030C000002EC000002CC000002AC00000DC
:10F0800028C0000026C0000024C0000022C00000EC
:10F0900020C000001EC0000011241FBECFEFD0E230
:10F0A000DEBFCDBF11E0A0E0B1E0E4EAFEEF01E099
:10F0B0000BBF02C007900D92AC38B107D9F711E031
:10F0C000ACE8B1E001C01D92AD39B107E1F72FD333
:10F0D000E7C696CF84E08093E9000DC08091E800F8
:10F0E0008B778093E80003C08EB3882359F080911A
:10F0F000E80082FFF9CF8091E80085FFEFCF809193
:10F10000F100089580E0089593E09093E9009091D4
:10F11000E80095FD0DC09091E8009E779093E8007F
:10F1200003C09EB3992331F09091E80090FFF9CF8E
:10F130008093F100089584B7877F84BF88E10FB67C
:10F14000F89480936000109260000FBE90E080E819
:10F150000FB6F89480936100909361000FBE81E038
:10F1600085BF82E085BFF7C382E061EC42E079D3DE
:10F1700083E061E842E175D384E060E842E171C375
:10F18000809196018032B1F0813239F580919501FC
:10F19000813A19F58091E800877F8093E80088E044
:10F1A00091E067E070E0BAD58091E8008B778093BA
:10F1B000E800089580919501813279F48091E8000A
:10F1C000877F8093E80088E091E067E070E001D6F7
:10F1D0008091E8008E778093E80008952F923F9207
:10F1E0005F926F927F928F929F92AF92BF92CF92D7
:10F1F000DF92EF92FF920F931F93DF93CF930F92C3
:10F20000CDB7DEB784E08093E9008091E80082FF0B
:10F210007BC210928C015EDF182F8C3409F421C25E
:10F22000803509F41EC2843529F0853429F4109202
:10F230000F0117C24FDF15C2843711F484E448C0B0
:10F24000813611F489E536C28134F1F443DF382F79
:10F25000330F20E079010027F7FC0095102FE09292
:10F260008F01F0929001009391011093920132DF8F
:10F2700090E0880F991FAA2797FDA095BA2F8E2995
:10F280009F29A02BB12BE5C1803711F483E512C271
:10F29000833559F400E011E0D8018D918D0134DF00
:10F2A000B1E007301B07C1F706C2863521F481E3C0
:10F2B0002BDF80E3FFC1833731F482E825DF87E964
:10F2C00023DF8EE1F7C1823631F489E51DDF81E06D
:10F2D0001BDF80E0EFC1853621F580E090E0DC01A6
:10F2E00033E025E0FC01A0935B0030935700E895E4
:10F2F00007B600FCFDCFFC01A0935B0020935700F4
:10F30000E89507B600FCFDCF8F5F9E4FAF4FBF4F14
:10F310008F3EE0EF9E07E1E0AE07E0E0BE0711F7A9
:10F32000A0C18C3651F4D6DE809599E0E1E0F0E0A2
:10F33000082E90935700E89594C1823719F4E1E0C4
:10F34000F0E00EC0863419F4E0E0F0E009C08E343D
:10F3500019F4E3E0F0E004C0813539F4E2E0F0E0D4
:10F3600089E0809357008491A5C18334A1F4E09093
:10F370008F01F09090010091910110919201AADE0D
:10F3800090E021E00C01F70100935B00209357000F
:10F39000E895112466C18336E1F4E0908F01F09086
:10F3A0009001009191011091920181E090E0A0E024
:10F3B000B0E0E82AF92A0A2B1B2B8CDE90E021E032
:10F3C0000C01F70100935B0020935700E89511248E
:10F3D00035C18D3699F480918F0190919001A09163
:10F3E0009101B091920125E0FC01A0935B00209374
:10F3F0005700E89507B600FCFDCF33C1823419F001
:10F40000873609F0F7C066DEE82E64DE082F62DE7C
:10F41000982E8554823008F04CC13E2D20E0202EDD
:10F420003324222A332A173609F058C081E1809309
:10F430005700E89510E001E04CC020918F01309119
:10F4400090014091910150919201992D963419F5B6
:10F45000812F90E0A0E0B0E0822B932BA42BB52B62
:10F46000ABBFFC01879150DE112399F080918F0191
:10F4700090919001A0919101B09192010296A11DED
:10F48000B11D80938F0190939001A0939101B0934F
:10F49000920110271BC0DA01C901B695A79597956F
:10F4A0008795E8D431DE80918F0190919001A091F1
:10F4B0009101B09192010296A11DB11D80938F011F
:10F4C00090939001A0939101B09392010894210828
:10F4D00031082114310409F0B0CFEDC0A0908F01A4
:10F4E000B0909001C0909101D0909201A92DA634C6
:10F4F00009F069C083E0F501C0925B00809357007A
:10F50000E89507B600FCFDCF5EC0B92DB63491F585
:10F51000222361F1E0908F01F09090010091910120
:10F5200010919201D7DD782E6624282D30E026290F
:10F5300037290901F70100935B0050925700E895C5
:10F54000112480918F0190919001A0919101B0912F
:10F5500092010296A11DB11D80938F01909390019D
:10F56000A0939101B093920120E029C0B3DD882ED1
:10F5700021E025C0E0908F01F09090010091910171
:10F580001091920116950795F794E7942983A2DDCF
:10F59000682FC70177D480918F0190919001A0913D
:10F5A0009101B09192010296A11DB11D80938F012E
:10F5B00090939001A0939101B093920129810894B6
:10F5C0002108310804C0882420E0552453942114D4
:10F5D000310409F09ACFE92DE63409F042C085E004
:10F5E000F501C0925B0080935700E89507B600FCD8
:10F5F000FDCF37C0823581F480918F0190919001C9
:10F60000A0919101B0919201ABBFFC0107911691BD
:10F61000812F7ADD802F4EC0843429F5E0908F0150
:10F62000F09090010091910110919201169507952B
:10F63000F794E7944FDD682FC70124D480918F01A0
:10F6400090919001A0919101B09192010296A11D1B
:10F65000B11D80938F0190939001A0939101B0937D
:10F6600092018DE027C0843611F580918F01909131
:10F670009001A0919101B0919201B695A7959795AF
:10F680008795F8D341DD80918F0190919001A091F1
:10F690009101B09192010296A11DB11D80938F013D
:10F6A00090939001A0939101B093920104C08B318B
:10F6B00011F08FE329DD83E08093E9009091E80069
:10F6C0008091E8008E778093E80095FF04C010C019
:10F6D0008EB38823C9F08091E80080FFF9CF809134
:10F6E000E8008E778093E80003C08EB3882361F032
:10F6F0008091E80080FFF9CF84E08093E900809159
:10F70000E8008B778093E8000F90CF91DF911F91F5
:10F710000F91FF90EF90DF90CF90BF90AF909F90B0
:10F720008F907F906F905F903F902F900895EF9211
:10F73000FF920F931F93DF93CF930F92CDB7DEB756
:10F7400084B714BE9091600098619093600010920D
:10F75000600010928C0190E0FC01E270F07081FD7D
:10F760000BC0859194912FEF8F3F920729F0E09184
:10F770008D01F0918E010995209A289A6F9A779AB7
:10F780006D9A759A3B9A439AD6DC6F9A779A7894D9
:10F7900081E010E000E0E0E0F0E0E590F49025C0CA
:10F7A00089831CDD55D30F5F8981002311F4180F65
:10F7B000779A011709F477981F3F59F0112351F4F4
:10F7C000813041F080918C018F5F80938C0181E0CA
:10F7D00001C08FEF90918C01923338F09FEFE916C2
:10F7E0009FEFF90611F010920F0190910F019923EC
:10F7F000B9F68091E00081608093E0002CE088E120
:10F8000090E00FB6F894A895809360000FBE209307
:10F810006000FFCF923049F0933061F09130C1F039
:10F8200020E030E080E090E017C02EE330E082E29C
:10F8300091E012C0882331F42091600130E080E62D
:10F8400091E00AC02091640130E084E691E004C0B8
:10F8500022E130E080E191E0FA0191838083C901E7
:10F8600008958093E900EBEEF0E080818160808371
:10F87000EDEEF0E010826093EC0040838091EE00AA
:10F88000881F8827881F08958091950187FF11C0E0
:10F8900003C08EB38823B1F08091E80082FFF9CFD6
:10F8A0008091E8008B778093E80008958EB38823D9
:10F8B00049F08091E80080FFF9CF8091E8008E77D1
:10F8C0008093E800089550D057D08091D800982FA9
:10F8D0009F779093D80080688093D80084E189BD99
:10F8E00089B5826089BD09B400FEFDCF8091D80042
:10F8F0008F7D8093D8008091D70080688093D70057
:10F900001EBA109293018091E0008B7F8093E000FB
:10F910008091D80081608093D80080E060E042E070
:10F92000A0DF8091E1008E7F8093E1008091E20072
:10F9300081608093E2008091E20088608093E20021
:10F940008091E0008E7F8093E0008091D8008061FC
:10F950008093D8000895E7EDF0E080818160808396
:10F9600081E080939401AFCFE8EDF0E080818C7F5F
:10F9700080831092E20008951092DA001092E10064
:10F9800008951F920F920FB60F920BB60F9211248B
:10F990002F933F934F935F936F937F938F939F9397
:10F9A000AF93BF93EF93FF938091DA0080FF13C072
:10F9B0008091D80080FF0FC08091DA008E7F809305
:10F9C000DA008091D90080FF04C081E08EBBA5D110
:10F9D00002C01EBAA2D18091E10080FF1CC08091BC
:10F9E000E20080FF18C08091E1008E7F8093E100EB
:10F9F0008091E2008E7F8093E2008091E20080613E
:10FA00008093E2008091D80080628093D80019BC76
:10FA100085E08EBB82D18091E10084FF2DC0809172
:10FA2000E20084FF29C084E189BD89B5826089BD77
:10FA300009B400FEFDCF8091D8008F7D8093D8005F
:10FA40008091E1008F7E8093E1008091E2008F7EC3
:10FA50008093E2008091E20081608093E2008091D7
:10FA60009301882321F48091E30087FF02C084E0A2
:10FA700001C081E08EBB51D18091E10083FF21C0A4
:10FA80008091E20083FF1DC08091E100877F809319
:10FA9000E10082E08EBB109293018091E1008E7FA5
:10FAA0008093E1008091E2008E7F8093E20080915C
:10FAB000E20080618093E20080E060E042E0D1DE1D
:10FAC0002CD18091E10082FF0AC08091E20082FF88
:10FAD00006C08091E1008B7F8093E1001ED1FF91F1
:10FAE000EF91BF91AF919F918F917F916F915F91B6
:10FAF0004F913F912F910F900BBE0F900FBE0F9023
:10FB00001F9018950F931F93DF93CF9300D0CDB71D
:10FB1000DEB7E5E9F1E08091F100819381E0ED3914
:10FB2000F807C9F78091950190919601953009F4F5
:10FB30006BC0963040F4913061F1913070F09330A9
:10FB400009F0D5C026C0983009F4A3C0993009F453
:10FB5000B2C0963009F0CBC07CC0803809F4C8C070
:10FB6000823809F0C4C08091990187708093E900C0
:10FB70009091EB001092E9008091E800877F8093DC
:10FB8000E80081E095FF80E08093F1001092F100A1
:10FB90008BC0882319F0823009F0A9C08F718230A0
:10FBA00009F0A6C080919701882341F52091990121
:10FBB000277009F49DC02093E9008091EB0080FF3D
:10FBC0001DC080919601833021F48091EB0080620A
:10FBD00013C08091EB0080618093EB0081E090E0A6
:10FBE00002C0880F991F2A95E2F78093EA001092CD
:10FBF000EA008091EB0088608093EB001092E900AE
:10FC00008091E800877F53C0882309F070C010916D
:10FC100097011F770FB7F8948091E800877F809352
:10FC2000E80032DE8091E80080FFFCCF112311F064
:10FC300083E001C082E08EBB8091E3008078812B5D
:10FC40008093E3008091E30080688093E3000FBF1E
:10FC50004FC08058823008F04AC08091970190913F
:10FC6000980160919901AE014F5F5F4FD3DDBC01F8
:10FC7000009709F43DC08091E800877F8093E800F9
:10FC800089819A814BD08091E8008B778093E8003E
:10FC90002FC0803861F58091E800877F8093E8006D
:10FCA000809193018093F1008091E8008E7780939A
:10FCB000E800EADD1DC08823D1F4909197019230CD
:10FCC000B8F48091E800877F8093E80090939301D7
:10FCD000DBDD80919301882321F48091E30087FF8D
:10FCE00002C084E001C081E08EBB3EDA01C048DA88
:10FCF0008091E80083FF0AC08091EB0080628093CE
:10FD0000EB008091E800877F8093E8000F900F90D0
:10FD1000CF91DF911F910F9108950895282F392FCA
:10FD2000F90180919B0190919C018617970718F427
:10FD3000BC0120E035C061157105D9F78091E8005C
:10FD40008E778093E800F5CF8EB38823F1F185306C
:10FD5000C1F18091E80083FD36C08091E80082FD0A
:10FD60002AC08091E80080FF1BC08091F200909132
:10FD7000F30006C021912093F1006150704001967C
:10FD80006115710519F088309105A0F321E08830E4
:10FD9000910509F020E08091E8008E778093E800DB
:10FDA0006115710589F6222379F605C08EB3882383
:10FDB00061F0853061F08091E80082FFF7CF80E04C
:10FDC000089583E0089581E0089582E0089583E036
:10FDD00008956115710529F51FC02EB32223A1F1E5
:10FDE000253071F12091E80023FD2CC02091E8001E
:10FDF00022FFF3CFE82FF92F07C08091F100819304
:10FE0000CF016150704041F0CF012091F20030915C
:10FE1000F3002115310589F72091E8002B77209315
:10FE2000E80061157105C9F605C08EB3882361F03D
:10FE3000853061F08091E80080FFF7CF80E0089581
:10FE400083E0089581E0089582E0089583E00895B5
:10FE50001F938EB3882361F01091E9001770109200
:10FE6000E9008091E80083FF01C04CDE1093E900B7
:10FE70001F910895F999FECF92BD81BDF89A9927F7
:10FE800080B50895262FF999FECF1FBA92BD81BD86
:10FE900020BD0FB6F894FA9AF99A0FBE019608950C
:04FEA000F894FFCF04
:10FEA4004C55464143444300000000000000080153
:10FEB40012011001020000089A2301000100000150
:10FEC400000109023E000201008032090400000121
:10FED4000202010005240010010424020405240682
:10FEE40000010705820308000209040100020A0058
:10FEF400000007050402100000070583021000003B
:10FF04000403090426034100560052002000430064
:10FF140044004300200042006F006F0074006C0036
:0CFF24006F0061006400650072000000C6
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,249 @@
:020000021000EC
:10F000004BC0000066C0000064C0000062C0000089
:10F0100060C000005EC000005CC000005AC000007C
:10F0200058C0000056C00000B9C4000052C0000023
:10F0300050C000004EC000004CC000004AC000009C
:10F0400048C0000046C0000044C0000042C00000AC
:10F0500041C000003EC000003CC000003AC00000BB
:10F0600038C0000036C0000034C0000032C00000CC
:10F0700030C000002EC000002CC000002AC00000DC
:10F0800028C0000026C0000024C0000022C00000EC
:10F0900020C000001EC0000011241FBECFEFD0E230
:10F0A000DEBFCDBF11E0A0E0B1E0EEEAFEEF01E08F
:10F0B0000BBF02C007900D92AC38B107D9F711E031
:10F0C000ACE8B1E001C01D92AA39B107E1F778D0F0
:10F0D000ECC696CF1F920F920FB60F9211240F908D
:10F0E0000FBE0F901F90189584E08093E9000DC02B
:10F0F0008091E8008B778093E80003C08EB388236B
:10F1000051F08091E80082FFF9CF8091E80085FFFF
:10F11000EFCF8091F1000895982F83E08093E9006C
:10F120008091E80085FD0DC08091E8008E77809386
:10F13000E80003C08EB3882331F08091E80080FF9F
:10F14000F9CF9093F100089590919201892F8F77D4
:10F15000813249F5809193018032A1F0813219F515
:10F16000913A09F58091E800877F8093E80088E074
:10F1700091E067E070E0C7D48091E8008B778093DE
:10F18000E8000895913279F48091E800877F8093B8
:10F19000E80088E091E067E070E011D58091E80038
:10F1A0008E778093E800089582E061EC42E06AD3B4
:10F1B00083E061E842E166D384E060E842E162C353
:10F1C0002F923F924F925F926F927F928F929F9277
:10F1D000AF92BF92CF92DF92EF92FF920F931F9365
:10F1E000DF93CF9300D000D0CDB7DEB784B7877F51
:10F1F00084BF88E10FB6F89480936000109260009D
:10F200000FBE80E090E020E80FB6F89420936100F4
:10F21000809361000FBE11E015BF82E085BFA8D3C7
:10F2200010936F0083E080938100789479E0672EDB
:10F230008FC224E02093E9008091E80082FF87C21A
:10F2400053DF182F853419F410920F0103C0843551
:10F2500019F44ADF8DE051C28C34E1F38035D1F3EB
:10F26000843711F484E49AC0813611F489E545C2EB
:10F270008134F1F439DF382E330C22247101002758
:10F28000F7FC0095102FE0928C01F0928D01009315
:10F290008E0110938F0128DF90E0880F991FAA2715
:10F2A00097FDA095BA2F8E299F29A02BB12BF6C1CF
:10F2B000803711F483E521C2833559F400E011E071
:10F2C000D8018D918D0128DFB1E007301B07C1F710
:10F2D00015C2863521F481E31FDF80E30EC2833738
:10F2E00031F482E819DF87E917DF8EE106C285363F
:10F2F00029F580E090E0A0E0B0E023E0FC01A093DD
:10F300005B0020935700E89507B600FCFDCF35E081
:10F31000FC01A0935B0030935700E89507B600FC12
:10F32000FDCF80509F4FAF4FBF4F803060EF9607AB
:10F3300061E0A60760E0B60701F78CCF8C3649F490
:10F34000D3DE8095E1E0F0E0082E60925700E8956A
:10F3500081CF823731F4E1E0F0E060925700849190
:10F36000CCC1863431F4E0E0F0E060925700849143
:10F37000C4C18E3431F4E3E0F0E060925700849130
:10F38000BCC1813531F4E2E0F0E060925700849135
:10F39000B4C1823631F489E5BFDE81E0BDDE80E0B4
:10F3A000ACC1823419F0873609F0F5C09DDE082F14
:10F3B0009BDEF82E99DE882E8554823008F09CC1A1
:10F3C0000A8319822F2D30E089819A81282B392BCD
:10F3D0003C832B83173609F055C091E19093570079
:10F3E000E895DD2449C0E0908C01F0908D010091FA
:10F3F0008E0110918F01A6E48A1609F58D2D90E0FB
:10F40000A0E0B0E08E299F29A02BB12BABBFFC015F
:10F41000879182DEDD2081F082E090E0A0E0B0E024
:10F42000E80EF91E0A1F1B1FE0928C01F0928D015D
:10F4300000938E0110938F0191E0D92618C0D80156
:10F44000C701B695A7959795879519D565DE82E092
:10F4500090E0A0E0B0E0E80EF91E0A1F1B1FE0924A
:10F460008C01F0928D0100938E0110938F01AB817E
:10F47000BC811197BC83AB83EB81FC81EF2B09F03E
:10F48000B2CF3CC1A0908C01B0908D01C0908E0194
:10F49000D0908F01F6E48F1609F067C023E0F501E4
:10F4A000C0925B0020935700E89507B600FCFDCFA3
:10F4B0005CC036E4831681F5992049F1E0908C0117
:10F4C000F0908D0100918E0110918F010DDE582E6C
:10F4D0004424872D90E08429952961E00C01F701EF
:10F4E00000935B0060935700E895112482E090E060
:10F4F000A0E0B0E0E80EF91E0A1F1B1FE0928C018D
:10F50000F0928D0100938E0110938F0102C0ECDD0B
:10F51000782E91E0992623C0E0908C01F0908D0127
:10F5200000918E0110918F0116950795F794E7943D
:10F53000DBDD682FC701ABD480918C0190918D01E8
:10F54000A0918E01B0918F010296A11DB11D8093F3
:10F550008C0190938D01A0938E01B0938F01AB81AC
:10F56000BC811197BC83AB8302C077249924EB81C3
:10F57000FC81EF2B09F09DCFF6E48F1609F06ACEDF
:10F5800025E0F501C0925B0020935700E89507B68F
:10F5900000FCFDCF5FCE8334A1F4E0908C01F090AD
:10F5A0008D0100918E0110918F019EDD90E031E080
:10F5B0000C01F70100935B0030935700E89511248C
:10F5C00049CE833639F5E0908C01F0908D010091A1
:10F5D0008E0110918F0188DDA8019701216090E0D4
:10F5E00061E00C01F90140935B0060935700E895DE
:10F5F000112482E090E0A0E0B0E0E80EF91E0A1FBE
:10F600001B1FE0928C01F0928D0100938E011093EC
:10F610008F0120CE8D3699F480918C0190918D01CF
:10F62000A0918E01B0918F0125E0FC01A0935B00B9
:10F6300020935700E89507B600FCFDCF0BCE82352E
:10F6400081F4E0908C01F0908D0100918E01109179
:10F650008F010BBFF701E790F6908F2D5DDD8E2DAA
:10F660004CC0843421F5E0908C01F0908D01009124
:10F670008E0110918F0116950795F794E79434DD6C
:10F68000682FC70104D480918C0190918D01A091C5
:10F690008E01B0918F010296A11DB11D80938C0146
:10F6A00090938D01A0938E01B0938F01D3CD8436BA
:10F6B00009F5E0908C01F0908D0100918E01109180
:10F6C0008F01D801C701B695A79597958795D7D390
:10F6D00023DD82E090E0A0E0B0E0E80EF91E0A1F12
:10F6E0001B1FE0928C01F0928D0100938E0110930C
:10F6F0008F0104C08B3111F08FE30EDD93E0909306
:10F70000E9009091E8008091E8008E778093E8000E
:10F7100095FF04C010C08EB38823C9F08091E80023
:10F7200080FFF9CF8091E8008E778093E80003C0D6
:10F730008EB3882361F08091E80080FFF9CFA4E0C8
:10F74000A093E9008091E8008B778093E80085D34F
:10F7500080910F01882309F06CCD8091E0008160D9
:10F760008093E0002CE088E190E00FB6F894A89533
:10F77000809360000FBE20936000FFCF9B01AC011F
:10F7800007B600FCFDCFF999FECF83E0F901409365
:10F790005B0080935700E89581E180935700E895DE
:10F7A00008959B01AC0107B600FCFDCFF999FECF8F
:10F7B00085E0F90140935B0080935700E89581E173
:10F7C00080935700E89508950F931F938B019C0138
:10F7D00007B600FCFDCFF999FECF81E00A01F801E0
:10F7E00020935B0080935700E89511241F910F919F
:10F7F000089521E2FC01209357002491822F08955F
:10F8000029E0FC01209357002491822F0895E1E024
:10F81000F0E089E08093570084910895982F07B60F
:10F8200000FCFDCFF999FECF909589E0E1E0F0E092
:10F83000092E80935700E8950895FA01923071F0EF
:10F84000933089F0913029F480E191E022E130E0B9
:10F8500015C080E090E020E030E010C082E291E04E
:10F860002EE330E00BC0882329F480E691E024E009
:10F8700030E004C084E691E026E230E091838083AA
:10F88000C90108958093E9008091EB008160809325
:10F89000EB001092ED006093EC004093ED0080913E
:10F8A000EE00881F8827881F089580919201882381
:10F8B0008CF403C08EB38823B1F08091E80082FFFE
:10F8C000F9CF8091E8008B778093E80008958EB39C
:10F8D000882349F08091E80080FFF9CF8091E8000B
:10F8E0008E778093E8000895EF92FF920F931F9315
:10F8F00048D04FD008ED10E0F80180818F778083E9
:10F9000080818068808380818F7D8083E7EDF0E057
:10F9100080818068808319BC1EBA1092900180EEAD
:10F92000E82EF12CF70180818B7F8083F8018081A4
:10F930008160808380E060E042E0A4DFE1EEF0E0FF
:10F9400080818E7F8083E2EEF0E080818160808321
:10F95000808188608083F70180818E7F8083F801B9
:10F960008081806180831F910F91FF90EF900895B7
:10F97000E7EDF0E080818160808381E080939101F8
:10F98000B3CFE8EDF0E080818C7F80831092E200BD
:10F9900008951092DA001092E10008951F920F92DC
:10F9A0000FB60F920BB60F9211242F933F934F93E4
:10F9B0005F936F937F938F939F93AF93BF93EF93D7
:10F9C000FF938091DA0080FF1BC08091D80080FFF8
:10F9D00017C08091DA008E7F8093DA008091D90081
:10F9E00080FF0BC084E189BD86E189BD09B400FEBA
:10F9F000FDCF81E08EBB30D203C019BC1EBA2CD221
:10FA00008091E10080FF17C08091E20080FF13C069
:10FA10008091E2008E7F8093E2008091E20080611D
:10FA20008093E2008091D80080628093D80019BC56
:10FA300085E08EBB11D28091E10084FF2CC08091C3
:10FA4000E20084FF28C084E189BD86E189BD09B454
:10FA500000FEFDCF8091D8008F7D8093D8008091EB
:10FA6000E1008F7E8093E1008091E2008F7E8093A1
:10FA7000E2008091E20081608093E2008091900139
:10FA8000882331F48091E30087FD02C081E001C04A
:10FA900084E08EBBE1D18091E10083FF21C08091A1
:10FAA000E20083FF1DC08091E100877F8093E10029
:10FAB00082E08EBB109290018091E1008E7F809356
:10FAC000E1008091E2008E7F8093E2008091E2006D
:10FAD00080618093E20080E060E042E0D3DEBCD150
:10FAE000FF91EF91BF91AF919F918F917F916F9116
:10FAF0005F914F913F912F910F900BBE0F900FBED2
:10FB00000F901F9018959C01409198015091990178
:10FB10004617570718F4F90190E03CC061157105CC
:10FB200011F0AB01F8CF8091E8008E778093E80068
:10FB300040E050E0F0CF8EB38823E9F18530E9F161
:10FB40008091E80083FF02C081E008958091E80081
:10FB500082FD2BC08091E80080FF1CC02091F20044
:10FB60003091F30007C081918093F10041505040E3
:10FB70002F5F3F4F4115510519F02830310598F39B
:10FB800090E02830310509F491E08091E8008E770B
:10FB90008093E8004115510571F6992361F605C07F
:10FBA0008EB3882341F0853041F08091E80082FFD8
:10FBB000F7CF80E0089582E0089583E008959C01E6
:10FBC0006115710529F48091E8008B778093E80036
:10FBD000F90121C08EB3882369F1853069F18091E4
:10FBE000E80083FF02C081E008958091E80082FF71
:10FBF000F1CF06C08091F10081936150704031F0E7
:10FC00008091F2009091F300892BA1F78091E80098
:10FC10008B778093E80061157105E1F605C08EB31E
:10FC2000882341F0853041F08091E80080FFF7CFD4
:10FC300080E0089582E0089583E008950F931F9374
:10FC4000DF93CF9300D0CDB7DEB7E2E9F1E080914A
:10FC5000F100819381E0EA39F807C9F775DA8091FC
:10FC6000E80083FFE4C08091920190919301953068
:10FC700009F46DC0963040F4913081F1913070F00C
:10FC8000933009F0D4C02AC0983009F4A3C0993049
:10FC900009F4B2C0963009F0CAC07CC0803809F4BB
:10FCA000C6C0823809F0C3C0809196018F708093DE
:10FCB000E9008091EB001092E9002091E800277F95
:10FCC0002093E80090E025E0969587952A95E1F746
:10FCD00081708093F1001092F10087C0882319F0A1
:10FCE000823009F0A4C08F71823009F0A0C08091E9
:10FCF0009401882331F5209196012F7009F497C063
:10FD00002093E9008091EB0080FF1BC0933021F429
:10FD10008091EB00806213C08091EB008061809342
:10FD2000EB0081E090E002C0880F991F2A95E2F76E
:10FD30008093EA001092EA008091EB008860809343
:10FD4000EB001092E9008091E800877F51C0882382
:10FD500009F06DC0109194011F770FB7F89480914E
:10FD6000E800877F8093E800A0DD8091E80080FFB5
:10FD7000FCCF8091E3008078812B8093E300806842
:10FD80008093E300112311F482E001C083E08EBB75
:10FD90000FBF4DC08058823008F049C08091940157
:10FDA0009091950160919601AE014F5F5F4F45DDE7
:10FDB000BC01009709F43BC08091E800877F8093E5
:10FDC000E80089819A819FDE8091E8008B7780939B
:10FDD000E8002DC0803859F58091E800877F809336
:10FDE000E800809190018093F1008091E8008E7787
:10FDF0008093E8005ADD1BC08823C9F490919401D8
:10FE00009230A8F48091E800877F8093E800909377
:10FE100090014BDD80919001882331F48091E300C3
:10FE200087FD02C081E001C084E08EBBBDD9809116
:10FE3000E80083FF0AC08091EB0080628093EB00B2
:10FE40008091E800877F8093E8000F900F90CF911A
:10FE5000DF911F910F91089508951F938EB388230A
:10FE600061F01091E9001092E9008091E80083FFB1
:10FE700001C0E4DE1F701093E9001F910895F99905
:10FE8000FECF92BD81BDF89A992780B50895262F9F
:10FE9000F999FECF1FBA92BD81BD20BD0FB6F8946F
:0EFEA000FA9AF99A0FBE01960895F894FFCFD2
:10FEAE004C55464143444300000000000000080149
:10FEBE001201100102000008EB034A2000010001AC
:10FECE00000109023E000201008032090400000117
:10FEDE000202010005240010010424020605240676
:10FEEE000001070582030800FF09040100020A0051
:10FEFE00000007050402100001070583021000012F
:10FF0E00040309042603410056005200200043005A
:10FF1E0044004300200042006F006F0074006C002C
:0CFF2E006F0061006400650072000000BC
:10FFE000CDCBDFCBF1CB05CC0BCC11CC17CC0000AB
:10FFF0000000000000000000000000000000FBDC2A
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,139 @@
:020000021000EC
:10F000004BC0000077C0000075C0000073C0000056
:10F0100071C000006FC000006DC000006BC0000038
:10F0200069C0000067C0000028C2000063C0000083
:10F0300061C000005FC000005DC000005BC0000058
:10F0400059C0000057C0000055C0000053C0000068
:10F0500051C000004FC000004DC000004BC0000078
:10F0600049C0000047C0000045C0000043C0000088
:10F0700041C000003FC000003DC000003BC0000098
:10F0800039C0000037C0000035C0000033C00000A8
:10F0900031C000002FC0000011241FBECFEFD0E20E
:10F0A000DEBFCDBF04B603FE0EC080915401909127
:10F0B000550182349C4D39F410925501109254013F
:10F0C000E0E0F0E0099511E0A0E0B1E0E8E2F8EF5F
:10F0D00001E00BBF02C007900D92AA34B107D9F727
:10F0E00021E0AAE4B1E001C01D92A435B207E1F726
:10F0F00002D098C385CF84B7877F84BF88E10FB6DD
:10F10000F89480936000109260000FBE81E085BF8C
:10F1100082E085BF97D1789480910001882311F017
:10F1200066D3FACF8091E00081608093E00082E4B2
:10F130009CED90935501809354012CE088E190E080
:10F140000FB6F894A895809360000FBE20936000DE
:10F15000FFCF42E361EC81E002C1CF92DF92EF92F8
:10F16000FF921F93CF93DF9380914C018F77813271
:10F1700009F075C080914D01893009F070C080910F
:10F18000E800877F8093E8008091E80082FFFCCF51
:10F190009091F1008091F100492F582F60E070E0CC
:10F1A000B62FA52F942F88274F3F5F4F19F4109249
:10F1B00000013EC023E0FC01A0935B0020935700B8
:10F1C000E89507B600FCFDCF20E030E011E040916B
:10F1D000F2005091F300452B09F437C05091F10033
:10F1E0004091F100C52FD42FA901440F551F6C0188
:10F1F0007D01C40ED51EE11CF11C0E01F601E0924A
:10F200005B0010935700E89511242F5F3F4F203883
:10F210003105E9F625E0FC01A0935B00209357003F
:10F22000E89507B600FCFDCF81E180935700E89593
:10F230008091E8008B778093E800DF91CF911F9158
:10F24000FF90EF90DF90CF909EC04091E8004B7709
:10F250004093E8004091E80042FFFCCFBFCFDF9130
:10F26000CF911F91FF90EF90DF90CF900895913054
:10F2700049F0923061F0913279F489E090E023E135
:10F2800031E00EC082E190E023E231E009C082E289
:10F2900090E021E031E004C085E190E025E331E039
:10F2A000FA01318320830895209152013091530156
:10F2B0002617370748F06115710539F42091E800E9
:10F2C0002E772093E80001C0B901FC0120E0611510
:10F2D000710591F18EB38823E1F18530E1F18091E0
:10F2E000E80083FD3AC08091E80082FF06C080916B
:10F2F000E80082FF24C080E008958091E80080FF4C
:10F30000E6CF8091F2009091F3006115710551F004
:10F310008830910538F421912093F10061507109F2
:10F320000196F3CF21E0089709F020E08091E800F2
:10F330008E778093E800CBCF2111CCCFD8CF8EB37E
:10F34000882339F0853039F08091E80083FFCFCFF2
:10F3500004C082E0089583E0089581E008958F70ED
:10F360008093E900EBEEF0E0808181608083EDEE38
:10F37000F0E010826093EC0040838091EE00881FE3
:10F380008827881F089580914C0187FD05C08091D2
:10F39000E80080FF0DC010C08091E80082FD04C02D
:10F3A0008EB38111F9CF08958091E8008B7707C063
:10F3B0008EB38111ECCF08958091E8008E77809311
:10F3C000E80008950F931F93CF93DF9349D050D057
:10F3D000C8EDD0E088818F778883888180688883B2
:10F3E00088818F7D8883E7EDF0E08081806880836D
:10F3F00019BC1EBA10924A0100EE10E0F80180819B
:10F400008B7F808388818160888342E060E080E038
:10F41000A6DFE1EEF0E080818E7F8083E2EEF0E017
:10F42000808181608083808188608083F801808111
:10F430008E7F8083888180618883DF91CF911F9147
:10F440000F910895E8EDF0E080818F7E8083E7EDF5
:10F45000F0E080818160808381E080934B01B2CFB6
:10F46000E8EDF0E080818C7F80831092E2000895C7
:10F470001092DA001092E10008951F920F920FB6D9
:10F480000F9211240BB60F922F933F934F935F93DC
:10F490006F937F938F939F93AF93BF93EF93FF935C
:10F4A0008091DA0080FF1BC08091D80080FF17C0D8
:10F4B0008091DA008E7F8093DA008091D90080FFFE
:10F4C0000BC084E189BD86E189BD09B400FEFDCF92
:10F4D00081E08EBB8BD103C019BC1EBA87D180914D
:10F4E000E10080FF17C08091E20080FF13C080918F
:10F4F000E2008E7F8093E2008091E2008061809341
:10F50000E2008091D80080628093D80019BC85E029
:10F510008EBB6CD18091E10084FF2EC08091E2000F
:10F5200084FF2AC084E189BD86E189BD09B400FE5B
:10F53000FDCF8091D8008F7D8093D8008091E1002D
:10F540008F7E8093E1008091E2008F7E8093E200C5
:10F550008091E20081608093E20080914A018823DB
:10F5600011F084E007C08091E30087FF02C083E0D0
:10F5700001C081E08EBB3AD18091E10083FF21C0C0
:10F580008091E20083FF1DC08091E100877F80931E
:10F59000E10082E08EBB10924A018091E1008E7FF3
:10F5A0008093E1008091E2008E7F8093E200809161
:10F5B000E20080618093E20042E060E080E0CFDE24
:10F5C00015D1FF91EF91BF91AF919F918F917F9155
:10F5D0006F915F914F913F912F910F900BBE0F90C4
:10F5E0000FBE0F901F9018951F93CF93DF9300D0FD
:10F5F000CDB7DEB7ECE4F1E08091F100819381E0DA
:10F60000E435F807C9F7A9DD8091E80083FFDAC087
:10F6100090914C0180914D01853009F465C030F422
:10F62000813059F168F0833041F1CCC0883009F461
:10F630009CC0893009F4ABC0863009F0C3C075C0E6
:10F64000903881F0923809F0BDC0809150018F70E0
:10F650008093E9009091EB0095FB992790F9109227
:10F66000E90001C090E08091E800877F8093E80086
:10F670009093F1001092F10083C0292F2D7F09F0A3
:10F68000A1C0923009F09EC090914E01911126C008
:10F69000209150012F7009F495C02093E9009091BA
:10F6A000EB0090FF1BC0833021F48091EB0080625F
:10F6B00013C08091EB0080618093EB0081E090E0CB
:10F6C000022E01C0880F0A94EAF78093EA00109294
:10F6D000EA008091EB0088608093EB001092E900D3
:10F6E0008091E800877F4FC091116CC010914E014E
:10F6F0001F778091E3008078812B8093E3008091D5
:10F70000E800877F8093E8003EDE8091E80080FF7C
:10F71000FCCF8091E30080688093E300112311F017
:10F7200083E001C082E08EBB4DC09058923008F05B
:10F7300049C0AE014F5F5F4F6091500180914E0113
:10F7400090914F0194DD009709F43CC02091E800AE
:10F75000277F2093E800BC0189819A81A5DD8091F3
:10F76000E8008B778093E8002DC0903859F58091A0
:10F77000E800877F8093E80080914A018093F10040
:10F780008091E8008E778093E800FDDD1BC0911129
:10F7900019C090914E019230A8F48091E800877FC3
:10F7A0008093E80090934A01EEDD80914A01811137
:10F7B00004C08091E30087FF02C084E001C081E0C3
:10F7C0008EBBC7DC8091E80083FF0AC08091E8000F
:10F7D000877F8093E8008091EB0080628093EB004C
:10F7E0000F900F90DF91CF911F9108950895CF93BF
:10F7F0008EB38823A9F08091E9008F709091EC007E
:10F8000090FF02C090E801C090E0C92FC82B109271
:10F81000E9008091E80083FDE7DECF70C093E90046
:08F82000CF910895F894FFCF89
:10F8280001090222000101008032090400000103DD
:10F8380000000009211101000122150007058103BC
:10F848004000051201100100000008EB03672001C9
:10F85800000000000106DCFF09FBA10109021500F8
:0AF8680025FF75089602019102C009
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,239 @@
:020000021000EC
:10F000004BC0000064C0000062C0000060C000008F
:10F010005EC000005CC000005AC0000058C0000084
:10F0200056C0000054C000006FC4000050C0000073
:10F030004EC000004CC000004AC0000048C00000A4
:10F0400046C0000044C0000042C0000040C00000B4
:10F050003EC000003CC000003AC0000038C00000C4
:10F0600036C0000034C0000032C0000030C00000D4
:10F070002EC000002CC000002AC0000028C00000E4
:10F0800026C0000024C0000022C0000020C00000F4
:10F090001EC000001CC0000011241FBECFEFD0E135
:10F0A000DEBFCDBF11E0A0E0B1E0E2E2FEEF02C0C2
:10F0B00005900D92AC38B107D9F711E0ACE8B1E09A
:10F0C00001C01D92AD39B107E1F7FCD2A8C698CFB7
:10F0D00084E08093E9000DC08091E8008B778093F5
:10F0E000E80003C08EB3882359F08091E80082FFC6
:10F0F000F9CF8091E80085FFEFCF8091F10008956E
:10F1000080E0089593E09093E9009091E80095FDE8
:10F110000DC09091E8009E779093E80003C09EB3E5
:10F12000992331F09091E80090FFF9CF8093F1009E
:10F13000089584B7877F84BF88E10FB6F8948093E1
:10F140006000109260000FBE90E080E80FB6F89467
:10F1500080936100909361000FBE81E085BF82E0E3
:10F1600085BFBCC382E061EC42E03ED383E061E84E
:10F1700042E13AD384E060E842E136C380919601EF
:10F180008032B1F0813239F580919501813A19F5DB
:10F190008091E800877F8093E80088E091E067E055
:10F1A00070E07BD58091E8008B778093E80008952C
:10F1B00080919501813279F48091E800877F809376
:10F1C000E80088E091E067E070E0C2D58091E80057
:10F1D0008E778093E80008952F923F924F925F922E
:10F1E0006F927F929F92AF92BF92CF92DF92EF92F7
:10F1F000FF920F931F93DF93CF930F92CDB7DEB79C
:10F2000084E08093E9008091E80082FF48C2109278
:10F210008C015EDF182F8C3409F4EEC1803509F4BF
:10F22000EBC1843529F0853429F410920F01E4C133
:10F230004FDFE2C1843711F484E448C0813611F411
:10F2400089E503C28134F1F443DF382F330F20E026
:10F2500079010027F7FC0095102FE0928F01F092C2
:10F260009001009391011093920132DF90E0880F9A
:10F27000991FAA2797FDA095BA2F8E299F29A02B09
:10F28000B12BB2C1803711F483E5DFC1833559F466
:10F2900000E011E0F80181918F0134DFF1E00730E7
:10F2A0001F07C1F7D3C1863521F481E32BDF80E34B
:10F2B000CCC1833731F482E825DF86E923DF8EE194
:10F2C000C4C1823631F489E51DDF81E01BDF80E0B7
:10F2D000BCC18536F9F480E090E0DC0133E025E044
:10F2E000FC0130935700E89507B600FCFDCF209352
:10F2F0005700E89507B600FCFDCF8F5F9E4FAF4FDC
:10F30000BF4F8F3E40EF940741E0A40740E0B407B1
:10F3100039F772C18C3651F4DBDE809599E0E1E07B
:10F32000F0E0082E90935700E89566C1823719F4F3
:10F33000E1E0F0E00EC0863419F4E0E0F0E009C04E
:10F340008E3419F4E3E0F0E004C0813539F4E2E0F2
:10F35000F0E089E080935700849177C1833471F4A1
:10F3600000918F0110919001B3DE90E021E0F8014F
:10F370000C0120935700E89511243EC1833679F49F
:10F3800000918F01109190010160A2DE90E021E0D8
:10F39000F8010C0120935700E89511241AC18D360D
:10F3A00061F4E0918F01F091900185E08093570026
:10F3B000E89507B600FCFDCF1FC1823419F08736EF
:10F3C00009F0E9C085DEE82E83DE082F81DEB82E45
:10F3D0008554823008F038C13E2D20E0202E3324A1
:10F3E000222A332A173609F054C081E1809357004E
:10F3F000E89510E001E048C0FB2DF63409F5E12F57
:10F40000F0E080918F0190919001E82BF92B84918D
:10F4100079DE112399F080918F0190919001A09154
:10F420009101B09192010296A11DB11D80938F01AF
:10F4300090939001A0939101B0939201102721C065
:10F4400080918F0190919001A0919101B0919201D2
:10F45000B695A79597958795CCD454DE80918F016A
:10F4600090919001A0919101B09192010296A11DFD
:10F47000B11D80938F0190939001A0939101B0935F
:10F4800092010894210831082114310409F0B4CF05
:10F49000DDC040908F01509090016090910170907C
:10F4A00092012B2D263409F061C083E0F201809394
:10F4B0005700E89507B600FCFDCF58C0FB2DF63489
:10F4C00061F5222331F1E0908F01F090900100DE90
:10F4D000D82ECC248A2D90E08C299D29F7010C018F
:10F4E00090925700E895112480918F01909190019E
:10F4F000A0919101B09192010296A11DB11D80933E
:10F500008F0190939001A0939101B093920120E01C
:10F5100029C0DEDDA82E21E025C0E0908F01F0900B
:10F520009001009191011091920116950795F79421
:10F53000E7942983CDDD682FC70163D480918F01C3
:10F5400090919001A0919101B09192010296A11D1C
:10F55000B11D80938F0190939001A0939101B0937E
:10F560009201298108942108310804C0AA2420E0CE
:10F57000992493942114310409F0A0CFFB2DF63483
:10F5800009F03AC085E0F20180935700E89507B68C
:10F5900000FCFDCF31C0823551F4E0918F01F09134
:10F5A000900105911491812FADDD802F4EC08434E0
:10F5B00029F5E0908F01F090900100919101109158
:10F5C000920116950795F794E79482DD682FC7019D
:10F5D00018D480918F0190919001A0919101B091E8
:10F5E00092010296A11DB11D80938F01909390010D
:10F5F000A0939101B09392018DE027C0843611F55C
:10F6000080918F0190919001A0919101B091920110
:10F61000B695A79597958795ECD374DD80918F016A
:10F6200090919001A0919101B09192010296A11D3B
:10F63000B11D80938F0190939001A0939101B0939D
:10F64000920104C08B3111F08FE35CDD83E0809385
:10F65000E9009091E8008091E8008E778093E800BF
:10F6600095FF04C010C08EB38823C9F08091E800D4
:10F6700080FFF9CF8091E8008E778093E80003C087
:10F680008EB3882361F08091E80080FFF9CF84E099
:10F690008093E9008091E8008B778093E8000F90D9
:10F6A000CF91DF911F910F91FF90EF90DF90CF905E
:10F6B000BF90AF909F907F906F905F904F903F90E2
:10F6C0002F900895EF92FF920F931F93DF93CF93A4
:10F6D0000F92CDB7DEB784B714BE909160009861E9
:10F6E000909360001092600010928C0190E0FC01F9
:10F6F000E270F07081FD0BC0859194912FEF8F3FE8
:10F70000920729F0E0918D01F0918E01099511DDAC
:10F710006F9A779A789481E010E000E0E0E0F0E002
:10F72000E590F49025C0898357DD51D30F5F89811F
:10F73000002311F4180F779A011709F477981F3FE7
:10F7400059F0112351F4813041F080918C018F5F89
:10F7500080938C0181E001C08FEF90918C019530F6
:10F7600038F09FEFE9169FEFF90611F010920F01A4
:10F7700090910F019923B9F68091E0008160809308
:10F78000E0002CE088E190E00FB6F894A895809313
:10F7900060000FBE20936000FFCF923049F093309D
:10F7A00061F09130C1F020E030E080E090E017C0DF
:10F7B0002EE330E082E291E012C0882331F4209100
:10F7C000600130E080E691E00AC02091640130E001
:10F7D00084E691E004C022E130E080E191E0FA01AA
:10F7E00091838083C90108958093E900EBEEF0E0F6
:10F7F000808181608083EDEEF0E010826093EC0008
:10F8000040838091EE00881F8827881F089580918B
:10F81000950187FF11C003C08EB38823B1F080919A
:10F82000E80082FFF9CF8091E8008B778093E800B1
:10F8300008958EB3882349F08091E80080FFF9CFC6
:10F840008091E8008E778093E800089550D057D0DB
:10F850008091D800982F9F779093D80080688093EC
:10F86000D80088E189BD89B5826089BD09B400FEF0
:10F87000FDCF8091D8008F7D8093D8008091D700F4
:10F8800080688093D7001EBA109293018091E000A7
:10F890008B7F8093E0008091D80081608093D800B6
:10F8A00080E060E042E0A0DF8091E1008E7F809305
:10F8B000E1008091E20081608093E2008091E200AB
:10F8C00088608093E2008091E0008E7F8093E0006A
:10F8D0008091D80080618093D8000895E7EDF0E032
:10F8E00080818160808381E080939401AFCFE8EDD7
:10F8F000F0E080818C7F80831092E2000895109266
:10F90000DA001092E10008951F920F920FB60F9245
:10F9100011242F933F934F935F936F937F938F9314
:10F920009F93AF93BF93EF93FF938091DA0080FF93
:10F9300013C08091D80080FF0FC08091DA008E7FC5
:10F940008093DA008091D90080FF04C081E08EBBF3
:10F95000A3D102C01EBAA0D18091E10080FF1CC0DB
:10F960008091E20080FF18C08091E1008E7F80933B
:10F97000E1008091E2008E7F8093E2008091E200BE
:10F9800080618093E2008091D80080628093D800EB
:10F9900019BC85E08EBB80D18091E10084FF2DC031
:10F9A0008091E20084FF29C088E189BD89B5826029
:10F9B00089BD09B400FEFDCF8091D8008F7D809372
:10F9C000D8008091E1008F7E8093E1008091E20079
:10F9D0008F7E8093E2008091E20081608093E2005C
:10F9E00080919301882321F48091E30087FF02C076
:10F9F00084E001C081E08EBB4FD18091E10083FFA4
:10FA000021C08091E20083FF1DC08091E100877FCB
:10FA10008093E10082E08EBB109293018091E1001F
:10FA20008E7F8093E1008091E2008E7F8093E200E0
:10FA30008091E20080618093E20080E060E042E03B
:10FA4000D3DE2AD18091E10082FF0AC08091E200DA
:10FA500082FF06C08091E1008B7F8093E1001CD182
:10FA6000FF91EF91BF91AF919F918F917F916F9196
:10FA70005F914F913F912F910F900FBE0F901F906C
:10FA800018950F931F93DF93CF9300D0CDB7DEB7B8
:10FA9000E5E9F1E08091F100819381E0ED39F8072B
:10FAA000C9F78091950190919601953009F46BC04A
:10FAB000963040F4913061F1913070F0933009F05C
:10FAC000D5C026C0983009F4A3C0993009F4B2C05B
:10FAD000963009F0CBC07CC0803809F4C8C08238A9
:10FAE00009F0C4C08091990187708093E9009091DA
:10FAF000EB001092E9008091E800877F8093E80096
:10FB000081E095FF80E08093F1001092F1008BC0BE
:10FB1000882319F0823009F0A9C08F71823009F072
:10FB2000A6C080919701882341F520919901277003
:10FB300009F49DC02093E9008091EB0080FF1DC077
:10FB400080919601833021F48091EB00806213C094
:10FB50008091EB0080618093EB0081E090E002C037
:10FB6000880F991F2A95E2F78093EA001092EA0025
:10FB70008091EB0088608093EB001092E900809107
:10FB8000E800877F53C0882309F070C01091970167
:10FB90001F770FB7F8948091E800877F8093E80083
:10FBA00036DE8091E80080FFFCCF112311F083E066
:10FBB00001C082E08EBB8091E3008078812B80932E
:10FBC000E3008091E30080688093E3000FBF4FC0A3
:10FBD0008058823008F04AC0809197019091980136
:10FBE00060919901AE014F5F5F4FD7DDBC01009777
:10FBF00009F43DC08091E800877F8093E800898107
:10FC00009A814BD08091E8008B778093E8002FC0D9
:10FC1000803861F58091E800877F8093E8008091CB
:10FC200093018093F1008091E8008E778093E80043
:10FC3000EEDD1DC08823D1F4909197019230B8F485
:10FC40008091E800877F8093E80090939301DFDD47
:10FC500080919301882321F48091E30087FF02C003
:10FC600084E001C081E08EBB7DDA01C087DA80913B
:10FC7000E80083FF0AC08091EB0080628093EB0074
:10FC80008091E800877F8093E8000F900F90CF91DC
:10FC9000DF911F910F9108950895282F392FF901B1
:10FCA00080919B0190919C018617970718F4BC01E5
:10FCB00020E035C061157105D9F78091E8008E7795
:10FCC0008093E800F5CF8EB38823F1F18530C1F140
:10FCD0008091E80083FD36C08091E80082FD2AC053
:10FCE0008091E80080FF1BC08091F2009091F300AA
:10FCF00006C021912093F10061507040019661157A
:10FD0000710519F088309105A0F321E08830910544
:10FD100009F020E08091E8008E778093E80061157B
:10FD2000710589F6222379F605C08EB3882361F028
:10FD3000853061F08091E80082FFF7CF80E0089580
:10FD400083E0089581E0089582E0089583E00895B6
:10FD50006115710529F51FC02EB32223A1F12530AD
:10FD600071F12091E80023FD2CC02091E80022FFD2
:10FD7000F3CFE82FF92F07C08091F1008193CF01D5
:10FD80006150704041F0CF012091F2003091F300BA
:10FD90002115310589F72091E8002B772093E800A1
:10FDA00061157105C9F605C08EB3882361F08530F1
:10FDB00061F08091E80080FFF7CF80E0089583E054
:10FDC000089581E0089582E0089583E008951F93E7
:10FDD0008EB3882361F01091E90017701092E9004A
:10FDE0008091E80083FF01C04CDE1093E9001F9171
:10FDF0000895F999FECF92BD81BDF89A992780B5F3
:10FE00000895262FF999FECF1FBA92BD81BD20BD5E
:10FE10000FB6F894FA9AF99A0FBE01960895F894DD
:02FE2000FFCF12
:10FE22004C554641434443000000000000000801D5
:10FE320012011001020000089A23010001000001D2
:10FE4200000109023E0002010080320904000001A3
:10FE52000202010005240010010424020405240604
:10FE620000010705820308000209040100020A00DA
:10FE720000000705040210000007058302100000BD
:10FE820004030904260341005600520020004300E7
:10FE920044004300200042006F006F0074006C00B9
:0CFEA2006F006100640065007200000049
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,247 @@
:020000021000EC
:10F000004BC0000066C0000064C0000062C0000089
:10F0100060C000005EC000005CC000005AC000007C
:10F0200058C0000056C00000ACC4000052C0000030
:10F0300050C000004EC000004CC000004AC000009C
:10F0400048C0000046C0000044C0000042C00000AC
:10F0500040C000003EC000003CC000003AC00000BC
:10F0600038C0000036C0000034C0000032C00000CC
:10F0700030C000002EC000002CC000002AC00000DC
:10F0800028C0000026C0000024C0000022C00000EC
:10F0900020C000001EC0000011241FBECFEFD0E230
:10F0A000DEBFCDBF11E0A0E0B1E0E4EAFEEF01E099
:10F0B0000BBF02C007900D92AC38B107D9F711E031
:10F0C000ACE8B1E001C01D92AD39B107E1F72FD333
:10F0D000E7C696CF84E08093E9000DC08091E800F8
:10F0E0008B778093E80003C08EB3882359F080911A
:10F0F000E80082FFF9CF8091E80085FFEFCF809193
:10F10000F100089580E0089593E09093E9009091D4
:10F11000E80095FD0DC09091E8009E779093E8007F
:10F1200003C09EB3992331F09091E80090FFF9CF8E
:10F130008093F100089584B7877F84BF88E10FB67C
:10F14000F89480936000109260000FBE90E080E819
:10F150000FB6F89480936100909361000FBE81E038
:10F1600085BF82E085BFF7C382E061EC42E079D3DE
:10F1700083E061E842E175D384E060E842E171C375
:10F18000809196018032B1F0813239F580919501FC
:10F19000813A19F58091E800877F8093E80088E044
:10F1A00091E067E070E0BAD58091E8008B778093BA
:10F1B000E800089580919501813279F48091E8000A
:10F1C000877F8093E80088E091E067E070E001D6F7
:10F1D0008091E8008E778093E80008952F923F9207
:10F1E0005F926F927F928F929F92AF92BF92CF92D7
:10F1F000DF92EF92FF920F931F93DF93CF930F92C3
:10F20000CDB7DEB784E08093E9008091E80082FF0B
:10F210007BC210928C015EDF182F8C3409F421C25E
:10F22000803509F41EC2843529F0853429F4109202
:10F230000F0117C24FDF15C2843711F484E448C0B0
:10F24000813611F489E536C28134F1F443DF382F79
:10F25000330F20E079010027F7FC0095102FE09292
:10F260008F01F0929001009391011093920132DF8F
:10F2700090E0880F991FAA2797FDA095BA2F8E2995
:10F280009F29A02BB12BE5C1803711F483E512C271
:10F29000833559F400E011E0D8018D918D0134DF00
:10F2A000B1E007301B07C1F706C2863521F481E3C0
:10F2B0002BDF80E3FFC1833731F482E825DF87E964
:10F2C00023DF8EE1F7C1823631F489E51DDF81E06D
:10F2D0001BDF80E0EFC1853621F580E090E0DC01A6
:10F2E00033E025E0FC01A0935B0030935700E895E4
:10F2F00007B600FCFDCFFC01A0935B0020935700F4
:10F30000E89507B600FCFDCF8F5F9E4FAF4FBF4F14
:10F310008F3EE0EF9E07E1E0AE07E0E0BE0711F7A9
:10F32000A0C18C3651F4D6DE809599E0E1E0F0E0A2
:10F33000082E90935700E89594C1823719F4E1E0C4
:10F34000F0E00EC0863419F4E0E0F0E009C08E343D
:10F3500019F4E3E0F0E004C0813539F4E2E0F0E0D4
:10F3600089E0809357008491A5C18334A1F4E09093
:10F370008F01F09090010091910110919201AADE0D
:10F3800090E021E00C01F70100935B00209357000F
:10F39000E895112466C18336E1F4E0908F01F09086
:10F3A0009001009191011091920181E090E0A0E024
:10F3B000B0E0E82AF92A0A2B1B2B8CDE90E021E032
:10F3C0000C01F70100935B0020935700E89511248E
:10F3D00035C18D3699F480918F0190919001A09163
:10F3E0009101B091920125E0FC01A0935B00209374
:10F3F0005700E89507B600FCFDCF33C1823419F001
:10F40000873609F0F7C066DEE82E64DE082F62DE7C
:10F41000982E8554823008F04CC13E2D20E0202EDD
:10F420003324222A332A173609F058C081E1809309
:10F430005700E89510E001E04CC020918F01309119
:10F4400090014091910150919201992D963419F5B6
:10F45000812F90E0A0E0B0E0822B932BA42BB52B62
:10F46000ABBFFC01879150DE112399F080918F0191
:10F4700090919001A0919101B09192010296A11DED
:10F48000B11D80938F0190939001A0939101B0934F
:10F49000920110271BC0DA01C901B695A79597956F
:10F4A0008795E8D431DE80918F0190919001A091F1
:10F4B0009101B09192010296A11DB11D80938F011F
:10F4C00090939001A0939101B09392010894210828
:10F4D00031082114310409F0B0CFEDC0A0908F01A4
:10F4E000B0909001C0909101D0909201A92DA634C6
:10F4F00009F069C083E0F501C0925B00809357007A
:10F50000E89507B600FCFDCF5EC0B92DB63491F585
:10F51000222361F1E0908F01F09090010091910120
:10F5200010919201D7DD782E6624282D30E026290F
:10F5300037290901F70100935B0050925700E895C5
:10F54000112480918F0190919001A0919101B0912F
:10F5500092010296A11DB11D80938F01909390019D
:10F56000A0939101B093920120E029C0B3DD882ED1
:10F5700021E025C0E0908F01F09090010091910171
:10F580001091920116950795F794E7942983A2DDCF
:10F59000682FC70177D480918F0190919001A0913D
:10F5A0009101B09192010296A11DB11D80938F012E
:10F5B00090939001A0939101B093920129810894B6
:10F5C0002108310804C0882420E0552453942114D4
:10F5D000310409F09ACFE92DE63409F042C085E004
:10F5E000F501C0925B0080935700E89507B600FCD8
:10F5F000FDCF37C0823581F480918F0190919001C9
:10F60000A0919101B0919201ABBFFC0107911691BD
:10F61000812F7ADD802F4EC0843429F5E0908F0150
:10F62000F09090010091910110919201169507952B
:10F63000F794E7944FDD682FC70124D480918F01A0
:10F6400090919001A0919101B09192010296A11D1B
:10F65000B11D80938F0190939001A0939101B0937D
:10F6600092018DE027C0843611F580918F01909131
:10F670009001A0919101B0919201B695A7959795AF
:10F680008795F8D341DD80918F0190919001A091F1
:10F690009101B09192010296A11DB11D80938F013D
:10F6A00090939001A0939101B093920104C08B318B
:10F6B00011F08FE329DD83E08093E9009091E80069
:10F6C0008091E8008E778093E80095FF04C010C019
:10F6D0008EB38823C9F08091E80080FFF9CF809134
:10F6E000E8008E778093E80003C08EB3882361F032
:10F6F0008091E80080FFF9CF84E08093E900809159
:10F70000E8008B778093E8000F90CF91DF911F91F5
:10F710000F91FF90EF90DF90CF90BF90AF909F90B0
:10F720008F907F906F905F903F902F900895EF9211
:10F73000FF920F931F93DF93CF930F92CDB7DEB756
:10F7400084B714BE9091600098619093600010920D
:10F75000600010928C0190E0FC01E270F07081FD7D
:10F760000BC0859194912FEF8F3F920729F0E09184
:10F770008D01F0918E010995209A289A6F9A779AB7
:10F780006D9A759A3B9A439AD6DC6F9A779A7894D9
:10F7900081E010E000E0E0E0F0E0E590F49025C0CA
:10F7A00089831CDD55D30F5F8981002311F4180F65
:10F7B000779A011709F477981F3F59F0112351F4F4
:10F7C000813041F080918C018F5F80938C0181E0CA
:10F7D00001C08FEF90918C01923338F09FEFE916C2
:10F7E0009FEFF90611F010920F0190910F019923EC
:10F7F000B9F68091E00081608093E0002CE088E120
:10F8000090E00FB6F894A895809360000FBE209307
:10F810006000FFCF923049F0933061F09130C1F039
:10F8200020E030E080E090E017C02EE330E082E29C
:10F8300091E012C0882331F42091600130E080E62D
:10F8400091E00AC02091640130E084E691E004C0B8
:10F8500022E130E080E191E0FA0191838083C901E7
:10F8600008958093E900EBEEF0E080818160808371
:10F87000EDEEF0E010826093EC0040838091EE00AA
:10F88000881F8827881F08958091950187FF11C0E0
:10F8900003C08EB38823B1F08091E80082FFF9CFD6
:10F8A0008091E8008B778093E80008958EB38823D9
:10F8B00049F08091E80080FFF9CF8091E8008E77D1
:10F8C0008093E800089550D057D08091D800982FA9
:10F8D0009F779093D80080688093D80084E189BD99
:10F8E00089B5826089BD09B400FEFDCF8091D80042
:10F8F0008F7D8093D8008091D70080688093D70057
:10F900001EBA109293018091E0008B7F8093E000FB
:10F910008091D80081608093D80080E060E042E070
:10F92000A0DF8091E1008E7F8093E1008091E20072
:10F9300081608093E2008091E20088608093E20021
:10F940008091E0008E7F8093E0008091D8008061FC
:10F950008093D8000895E7EDF0E080818160808396
:10F9600081E080939401AFCFE8EDF0E080818C7F5F
:10F9700080831092E20008951092DA001092E10064
:10F9800008951F920F920FB60F920BB60F9211248B
:10F990002F933F934F935F936F937F938F939F9397
:10F9A000AF93BF93EF93FF938091DA0080FF13C072
:10F9B0008091D80080FF0FC08091DA008E7F809305
:10F9C000DA008091D90080FF04C081E08EBBA5D110
:10F9D00002C01EBAA2D18091E10080FF1CC08091BC
:10F9E000E20080FF18C08091E1008E7F8093E100EB
:10F9F0008091E2008E7F8093E2008091E20080613E
:10FA00008093E2008091D80080628093D80019BC76
:10FA100085E08EBB82D18091E10084FF2DC0809172
:10FA2000E20084FF29C084E189BD89B5826089BD77
:10FA300009B400FEFDCF8091D8008F7D8093D8005F
:10FA40008091E1008F7E8093E1008091E2008F7EC3
:10FA50008093E2008091E20081608093E2008091D7
:10FA60009301882321F48091E30087FF02C084E0A2
:10FA700001C081E08EBB51D18091E10083FF21C0A4
:10FA80008091E20083FF1DC08091E100877F809319
:10FA9000E10082E08EBB109293018091E1008E7FA5
:10FAA0008093E1008091E2008E7F8093E20080915C
:10FAB000E20080618093E20080E060E042E0D1DE1D
:10FAC0002CD18091E10082FF0AC08091E20082FF88
:10FAD00006C08091E1008B7F8093E1001ED1FF91F1
:10FAE000EF91BF91AF919F918F917F916F915F91B6
:10FAF0004F913F912F910F900BBE0F900FBE0F9023
:10FB00001F9018950F931F93DF93CF9300D0CDB71D
:10FB1000DEB7E5E9F1E08091F100819381E0ED3914
:10FB2000F807C9F78091950190919601953009F4F5
:10FB30006BC0963040F4913061F1913070F09330A9
:10FB400009F0D5C026C0983009F4A3C0993009F453
:10FB5000B2C0963009F0CBC07CC0803809F4C8C070
:10FB6000823809F0C4C08091990187708093E900C0
:10FB70009091EB001092E9008091E800877F8093DC
:10FB8000E80081E095FF80E08093F1001092F100A1
:10FB90008BC0882319F0823009F0A9C08F718230A0
:10FBA00009F0A6C080919701882341F52091990121
:10FBB000277009F49DC02093E9008091EB0080FF3D
:10FBC0001DC080919601833021F48091EB0080620A
:10FBD00013C08091EB0080618093EB0081E090E0A6
:10FBE00002C0880F991F2A95E2F78093EA001092CD
:10FBF000EA008091EB0088608093EB001092E900AE
:10FC00008091E800877F53C0882309F070C010916D
:10FC100097011F770FB7F8948091E800877F809352
:10FC2000E80032DE8091E80080FFFCCF112311F064
:10FC300083E001C082E08EBB8091E3008078812B5D
:10FC40008093E3008091E30080688093E3000FBF1E
:10FC50004FC08058823008F04AC08091970190913F
:10FC6000980160919901AE014F5F5F4FD3DDBC01F8
:10FC7000009709F43DC08091E800877F8093E800F9
:10FC800089819A814BD08091E8008B778093E8003E
:10FC90002FC0803861F58091E800877F8093E8006D
:10FCA000809193018093F1008091E8008E7780939A
:10FCB000E800EADD1DC08823D1F4909197019230CD
:10FCC000B8F48091E800877F8093E80090939301D7
:10FCD000DBDD80919301882321F48091E30087FF8D
:10FCE00002C084E001C081E08EBB3EDA01C048DA88
:10FCF0008091E80083FF0AC08091EB0080628093CE
:10FD0000EB008091E800877F8093E8000F900F90D0
:10FD1000CF91DF911F910F9108950895282F392FCA
:10FD2000F90180919B0190919C018617970718F427
:10FD3000BC0120E035C061157105D9F78091E8005C
:10FD40008E778093E800F5CF8EB38823F1F185306C
:10FD5000C1F18091E80083FD36C08091E80082FD0A
:10FD60002AC08091E80080FF1BC08091F200909132
:10FD7000F30006C021912093F1006150704001967C
:10FD80006115710519F088309105A0F321E08830E4
:10FD9000910509F020E08091E8008E778093E800DB
:10FDA0006115710589F6222379F605C08EB3882383
:10FDB00061F0853061F08091E80082FFF7CF80E04C
:10FDC000089583E0089581E0089582E0089583E036
:10FDD00008956115710529F51FC02EB32223A1F1E5
:10FDE000253071F12091E80023FD2CC02091E8001E
:10FDF00022FFF3CFE82FF92F07C08091F100819304
:10FE0000CF016150704041F0CF012091F20030915C
:10FE1000F3002115310589F72091E8002B77209315
:10FE2000E80061157105C9F605C08EB3882361F03D
:10FE3000853061F08091E80080FFF7CF80E0089581
:10FE400083E0089581E0089582E0089583E00895B5
:10FE50001F938EB3882361F01091E9001770109200
:10FE6000E9008091E80083FF01C04CDE1093E900B7
:10FE70001F910895F999FECF92BD81BDF89A9927F7
:10FE800080B50895262FF999FECF1FBA92BD81BD86
:10FE900020BD0FB6F894FA9AF99A0FBE019608950C
:04FEA000F894FFCF04
:10FEA4004C55464143444300000000000000080153
:10FEB40012011001020000089A2301000100000150
:10FEC400000109023E000201008032090400000121
:10FED4000202010005240010010424020405240682
:10FEE40000010705820308000209040100020A0058
:10FEF400000007050402100000070583021000003B
:10FF04000403090426034100560052002000430064
:10FF140044004300200042006F006F0074006C0036
:0CFF24006F0061006400650072000000C6
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,1071 @@
/**********************************************************/
/* Serial Bootloader for Atmel megaAVR Controllers */
/* */
/* tested with ATmega8, ATmega128 and ATmega168 */
/* should work with other mega's, see code for details */
/* */
/* ATmegaBOOT.c */
/* */
/* */
/* 20090308: integrated Mega changes into main bootloader */
/* source by D. Mellis */
/* 20080930: hacked for Arduino Mega (with the 1280 */
/* processor, backwards compatible) */
/* by D. Cuartielles */
/* 20070626: hacked for Arduino Diecimila (which auto- */
/* resets when a USB connection is made to it) */
/* by D. Mellis */
/* 20060802: hacked for Arduino by D. Cuartielles */
/* based on a previous hack by D. Mellis */
/* and D. Cuartielles */
/* */
/* Monitor and debug functions were added to the original */
/* code by Dr. Erik Lins, chip45.com. (See below) */
/* */
/* Thanks to Karl Pitrich for fixing a bootloader pin */
/* problem and more informative LED blinking! */
/* */
/* For the latest version see: */
/* http://www.chip45.com/ */
/* */
/* ------------------------------------------------------ */
/* */
/* based on stk500boot.c */
/* Copyright (c) 2003, Jason P. Kyle */
/* All rights reserved. */
/* see avr1.org for original file and information */
/* */
/* This program is free software; you can redistribute it */
/* and/or modify it under the terms of the GNU General */
/* Public License as published by the Free Software */
/* Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will */
/* be useful, but WITHOUT ANY WARRANTY; without even the */
/* implied warranty of MERCHANTABILITY or FITNESS FOR A */
/* PARTICULAR PURPOSE. See the GNU General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU General */
/* Public License along with this program; if not, write */
/* to the Free Software Foundation, Inc., */
/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* */
/* Licence can be viewed at */
/* http://www.fsf.org/licenses/gpl.txt */
/* */
/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */
/* m8515,m8535. ATmega161 has a very small boot block so */
/* isn't supported. */
/* */
/* Tested with m168 */
/**********************************************************/
/* $Id$ */
/* some includes */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <util/delay.h>
/* the current avr-libc eeprom functions do not support the ATmega168 */
/* own eeprom write/read functions are used instead */
#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__)
#include <avr/eeprom.h>
#endif
/* Use the F_CPU defined in Makefile */
/* 20060803: hacked by DojoCorp */
/* 20070626: hacked by David A. Mellis to decrease waiting time for auto-reset */
/* set the waiting time for the bootloader */
/* get this from the Makefile instead */
/* #define MAX_TIME_COUNT (F_CPU>>4) */
/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */
#define MAX_ERROR_COUNT 5
/* set the UART baud rate */
/* 20060803: hacked by DojoCorp */
//#define BAUD_RATE 115200
#ifndef BAUD_RATE
#define BAUD_RATE 19200
#endif
/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */
/* never allow AVR Studio to do an update !!!! */
#define HW_VER 0x02
#define SW_MAJOR 0x01
#define SW_MINOR 0x10
/* Adjust to suit whatever pin your hardware uses to enter the bootloader */
/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */
/* ATmega1280 has four UARTS, but for Arduino Mega, we will only use RXD0 to get code */
/* BL0... means UART0, BL1... means UART1 */
#ifdef __AVR_ATmega128__
#define BL_DDR DDRF
#define BL_PORT PORTF
#define BL_PIN PINF
#define BL0 PINF7
#define BL1 PINF6
#elif defined __AVR_ATmega1280__
/* we just don't do anything for the MEGA and enter bootloader on reset anyway*/
#elif defined __AVR_ATmega1284P_ || defined __AVR_ATmega644P__
#else
/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */
#define BL_DDR DDRD
#define BL_PORT PORTD
#define BL_PIN PIND
#define BL PIND6
#endif
/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */
/* if monitor functions are included, LED goes on after monitor was entered */
#if defined __AVR_ATmega128__ || defined __AVR_ATmega1280__
/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128, Arduino Mega) */
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED PINB7
#elif defined __AVR_ATmega1284P__ || defined __AVR_ATmega644P__
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED PINB0
#else
/* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duomilanuove */
/* other boards like e.g. Crumb8, Crumb168 are using PB2 */
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED PINB5
#endif
/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__)
#define MONITOR 1
#endif
/* define various device id's */
/* manufacturer byte is always the same */
#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :(
#if defined __AVR_ATmega1280__
#define SIG2 0x97
#define SIG3 0x03
#define PAGE_SIZE 0x80U //128 words
#elif defined __AVR_ATmega1284P__
#define SIG2 0x97
#define SIG3 0x05
#define PAGE_SIZE 0x080U //128 words
#elif defined __AVR_ATmega1281__
#define SIG2 0x97
#define SIG3 0x04
#define PAGE_SIZE 0x80U //128 words
#elif defined __AVR_ATmega644P__
#define SIG2 0x96
#define SIG3 0x0A
#define PAGE_SIZE 0x080U //128 words
#elif defined __AVR_ATmega128__
#define SIG2 0x97
#define SIG3 0x02
#define PAGE_SIZE 0x80U //128 words
#elif defined __AVR_ATmega64__
#define SIG2 0x96
#define SIG3 0x02
#define PAGE_SIZE 0x80U //128 words
#elif defined __AVR_ATmega32__
#define SIG2 0x95
#define SIG3 0x02
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega16__
#define SIG2 0x94
#define SIG3 0x03
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega8__
#define SIG2 0x93
#define SIG3 0x07
#define PAGE_SIZE 0x20U //32 words
#elif defined __AVR_ATmega88__
#define SIG2 0x93
#define SIG3 0x0a
#define PAGE_SIZE 0x20U //32 words
#elif defined __AVR_ATmega168__
#define SIG2 0x94
#define SIG3 0x06
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega328P__
#define SIG2 0x95
#define SIG3 0x0F
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega162__
#define SIG2 0x94
#define SIG3 0x04
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega163__
#define SIG2 0x94
#define SIG3 0x02
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega169__
#define SIG2 0x94
#define SIG3 0x05
#define PAGE_SIZE 0x40U //64 words
#elif defined __AVR_ATmega8515__
#define SIG2 0x93
#define SIG3 0x06
#define PAGE_SIZE 0x20U //32 words
#elif defined __AVR_ATmega8535__
#define SIG2 0x93
#define SIG3 0x08
#define PAGE_SIZE 0x20U //32 words
#endif
/* function prototypes */
void putch(char);
char getch(void);
void getNch(uint8_t);
void byte_response(uint8_t);
void nothing_response(void);
char gethex(void);
void puthex(char);
void flash_led(uint8_t);
/* some variables */
union address_union {
uint16_t word;
uint8_t byte[2];
} address;
union length_union {
uint16_t word;
uint8_t byte[2];
} length;
struct flags_struct {
unsigned eeprom : 1;
unsigned rampz : 1;
} flags;
uint8_t buff[256];
uint8_t address_high;
uint8_t pagesz=0x80;
uint8_t i;
uint8_t bootuart = 0;
uint8_t error_count = 0;
void (*app_start)(void) = 0x0000;
/* main program starts here */
int main(void)
{
uint8_t ch,ch2;
uint16_t w;
#ifdef WATCHDOG_MODS
ch = MCUSR;
MCUSR = 0;
WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;
// Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot.
if (! (ch & _BV(EXTRF))) // if it's a not an external reset...
app_start(); // skip bootloader
#else
asm volatile("nop\n\t");
#endif
/* set pin direction for bootloader pin and enable pullup */
/* for ATmega128, two pins need to be initialized */
#ifdef __AVR_ATmega128__
BL_DDR &= ~_BV(BL0);
BL_DDR &= ~_BV(BL1);
BL_PORT |= _BV(BL0);
BL_PORT |= _BV(BL1);
#else
/* We run the bootloader regardless of the state of this pin. Thus, don't
put it in a different state than the other pins. --DAM, 070709
This also applies to Arduino Mega -- DC, 080930
BL_DDR &= ~_BV(BL);
BL_PORT |= _BV(BL);
*/
#endif
#ifdef __AVR_ATmega128__
/* check which UART should be used for booting */
if(bit_is_clear(BL_PIN, BL0)) {
bootuart = 1;
}
else if(bit_is_clear(BL_PIN, BL1)) {
bootuart = 2;
}
#endif
#if defined __AVR_ATmega1280__ || defined __AVR_ATmega1284P__ || defined __AVR_ATmega644P__
/* the mega1280 chip has four serial ports ... we could eventually use any of them, or not? */
/* however, we don't wanna confuse people, to avoid making a mess, we will stick to RXD0, TXD0 */
bootuart = 1;
#endif
/* check if flash is programmed already, if not start bootloader anyway */
if(pgm_read_byte_near(0x0000) != 0xFF) {
#ifdef __AVR_ATmega128__
/* no UART was selected, start application */
if(!bootuart) {
app_start();
}
#else
/* check if bootloader pin is set low */
/* we don't start this part neither for the m8, nor m168 */
//if(bit_is_set(BL_PIN, BL)) {
// app_start();
// }
#endif
}
#ifdef __AVR_ATmega128__
/* no bootuart was selected, default to uart 0 */
if(!bootuart) {
bootuart = 1;
}
#endif
/* initialize UART(s) depending on CPU defined */
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
if(bootuart == 1) {
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSR0A = 0x00;
UCSR0C = 0x06;
UCSR0B = _BV(TXEN0)|_BV(RXEN0);
}
if(bootuart == 2) {
UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSR1A = 0x00;
UCSR1C = 0x06;
UCSR1B = _BV(TXEN1)|_BV(RXEN1);
}
#elif defined __AVR_ATmega163__
UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSRA = 0x00;
UCSRB = _BV(TXEN)|_BV(RXEN);
#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
#ifdef DOUBLE_SPEED
UCSR0A = (1<<U2X0); //Double speed mode USART0
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*8L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*8L)-1) >> 8;
#else
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
#endif
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
/* Enable internal pull-up resistor on pin D0 (RX), in order
to supress line noise that prevents the bootloader from
timing out (DAM: 20070509) */
DDRD &= ~_BV(PIND0);
PORTD |= _BV(PIND0);
#elif defined __AVR_ATmega8__
/* m8 */
UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; // set baud rate
UBRRL = (((F_CPU/BAUD_RATE)/16)-1);
UCSRB = (1<<RXEN)|(1<<TXEN); // enable Rx & Tx
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // config USART; 8N1
#else
/* m16,m32,m169,m8515,m8535 */
UBRRL = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRRH = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSRA = 0x00;
UCSRC = 0x06;
UCSRB = _BV(TXEN)|_BV(RXEN);
#endif
#if defined __AVR_ATmega1280__
/* Enable internal pull-up resistor on pin D0 (RX), in order
to supress line noise that prevents the bootloader from
timing out (DAM: 20070509) */
/* feature added to the Arduino Mega --DC: 080930 */
DDRE &= ~_BV(PINE0);
PORTE |= _BV(PINE0);
#endif
/* set LED pin as output */
LED_DDR |= _BV(LED);
/* flash onboard LED to signal entering of bootloader */
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
// 4x for UART0, 5x for UART1
flash_led(NUM_LED_FLASHES + bootuart);
#else
flash_led(NUM_LED_FLASHES);
#endif
/* 20050803: by DojoCorp, this is one of the parts provoking the
system to stop listening, cancelled from the original */
//putch('\0');
/* forever loop */
for (;;) {
/* get character from UART */
ch = getch();
/* A bunch of if...else if... gives smaller code than switch...case ! */
/* Hello is anyone home ? */
if(ch=='0') {
nothing_response();
}
/* Request programmer ID */
/* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */
/* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */
else if(ch=='1') {
if (getch() == ' ') {
putch(0x14);
putch('A');
putch('V');
putch('R');
putch(' ');
putch('I');
putch('S');
putch('P');
putch(0x10);
} else {
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */
else if(ch=='@') {
ch2 = getch();
if (ch2>0x85) getch();
nothing_response();
}
/* AVR ISP/STK500 board requests */
else if(ch=='A') {
ch2 = getch();
if(ch2==0x80) byte_response(HW_VER); // Hardware version
else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version
else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version
else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56
else byte_response(0x00); // Covers various unnecessary responses we don't care about
}
/* Device Parameters DON'T CARE, DEVICE IS FIXED */
else if(ch=='B') {
getNch(20);
nothing_response();
}
/* Parallel programming stuff DON'T CARE */
else if(ch=='E') {
getNch(5);
nothing_response();
}
/* P: Enter programming mode */
/* R: Erase device, don't care as we will erase one page at a time anyway. */
else if(ch=='P' || ch=='R') {
nothing_response();
}
/* Leave programming mode */
else if(ch=='Q') {
nothing_response();
#ifdef WATCHDOG_MODS
// autoreset via watchdog (sneaky!)
WDTCSR = _BV(WDE);
while (1); // 16 ms
#endif
}
/* Set address, little endian. EEPROM in bytes, FLASH in words */
/* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */
/* This might explain why little endian was used here, big endian used everywhere else. */
else if(ch=='U') {
address.byte[0] = getch();
address.byte[1] = getch();
nothing_response();
}
/* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */
else if(ch=='V') {
if (getch() == 0x30) {
getch();
ch = getch();
getch();
if (ch == 0) {
byte_response(SIG1);
} else if (ch == 1) {
byte_response(SIG2);
} else {
byte_response(SIG3);
}
} else {
getNch(3);
byte_response(0x00);
}
}
/* Write memory, length is big endian and is in bytes */
else if(ch=='d') {
length.byte[1] = getch();
length.byte[0] = getch();
flags.eeprom = 0;
if (getch() == 'E') flags.eeprom = 1;
for (w=0;w<length.word;w++) {
buff[w] = getch(); // Store data in buffer, can't keep up with serial data stream whilst programming pages
}
if (getch() == ' ') {
if (flags.eeprom) { //Write to EEPROM one byte at a time
address.word <<= 1;
for(w=0;w<length.word;w++) {
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EEDR = buff[w];
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
#else
eeprom_write_byte((void *)address.word,buff[w]);
#endif
address.word++;
}
}
else { //Write to FLASH one page at a time
if (address.byte[1]>127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME
else address_high = 0x00;
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega1284P__)
RAMPZ = address_high;
#endif
address.word = address.word << 1; //address * 2 -> byte location
/* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */
if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes
cli(); //Disable interrupts, just to be sure
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete
#else
while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete
#endif
asm volatile(
"clr r17 \n\t" //page_word_count
"lds r30,address \n\t" //Address of FLASH location (in bytes)
"lds r31,address+1 \n\t"
"ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM
"ldi r29,hi8(buff) \n\t"
"lds r24,length \n\t" //Length of data to be written (in bytes)
"lds r25,length+1 \n\t"
"length_loop: \n\t" //Main loop, repeat for number of words in block
"cpi r17,0x00 \n\t" //If page_word_count=0 then erase page
"brne no_page_erase \n\t"
"wait_spm1: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm1 \n\t"
"ldi r16,0x03 \n\t" //Erase page pointed to by Z
"sts %0,r16 \n\t"
"spm \n\t"
#ifdef __AVR_ATmega163__
".word 0xFFFF \n\t"
"nop \n\t"
#endif
"wait_spm2: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm2 \n\t"
"ldi r16,0x11 \n\t" //Re-enable RWW section
"sts %0,r16 \n\t"
"spm \n\t"
#ifdef __AVR_ATmega163__
".word 0xFFFF \n\t"
"nop \n\t"
#endif
"no_page_erase: \n\t"
"ld r0,Y+ \n\t" //Write 2 bytes into page buffer
"ld r1,Y+ \n\t"
"wait_spm3: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm3 \n\t"
"ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer
"sts %0,r16 \n\t"
"spm \n\t"
"inc r17 \n\t" //page_word_count++
"cpi r17,%1 \n\t"
"brlo same_page \n\t" //Still same page in FLASH
"write_page: \n\t"
"clr r17 \n\t" //New page, write current one first
"wait_spm4: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm4 \n\t"
#ifdef __AVR_ATmega163__
"andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write
#endif
"ldi r16,0x05 \n\t" //Write page pointed to by Z
"sts %0,r16 \n\t"
"spm \n\t"
#ifdef __AVR_ATmega163__
".word 0xFFFF \n\t"
"nop \n\t"
"ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write)
#endif
"wait_spm5: \n\t"
"lds r16,%0 \n\t" //Wait for previous spm to complete
"andi r16,1 \n\t"
"cpi r16,1 \n\t"
"breq wait_spm5 \n\t"
"ldi r16,0x11 \n\t" //Re-enable RWW section
"sts %0,r16 \n\t"
"spm \n\t"
#ifdef __AVR_ATmega163__
".word 0xFFFF \n\t"
"nop \n\t"
#endif
"same_page: \n\t"
"adiw r30,2 \n\t" //Next word in FLASH
"sbiw r24,2 \n\t" //length-2
"breq final_write \n\t" //Finished
"rjmp length_loop \n\t"
"final_write: \n\t"
"cpi r17,0 \n\t"
"breq block_done \n\t"
"adiw r24,2 \n\t" //length+2, fool above check on length after short page write
"rjmp write_page \n\t"
"block_done: \n\t"
"clr __zero_reg__ \n\t" //restore zero register
#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ || __AVR_ATmega128__ || __AVR_ATmega1280__ || __AVR_ATmega1281__ || __AVR_ATmega1284P__ || __AVR_ATmega644P__
: "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"
#else
: "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"
#endif
);
/* Should really add a wait for RWW section to be enabled, don't actually need it since we never */
/* exit the bootloader without a power cycle anyhow */
}
putch(0x14);
putch(0x10);
} else {
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* Read memory block mode, length is big endian. */
else if(ch=='t') {
length.byte[1] = getch();
length.byte[0] = getch();
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME
else flags.rampz = 0;
#endif
address.word = address.word << 1; // address * 2 -> byte location
if (getch() == 'E') flags.eeprom = 1;
else flags.eeprom = 0;
if (getch() == ' ') { // Command terminator
putch(0x14);
for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay
if (flags.eeprom) { // Byte access EEPROM read
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EECR |= (1<<EERE);
putch(EEDR);
#else
putch(eeprom_read_byte((void *)address.word));
#endif
address.word++;
}
else {
if (!flags.rampz) putch(pgm_read_byte_near(address.word));
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__)
else putch(pgm_read_byte_far(address.word + 0x10000));
// Hmmmm, yuck FIXME when m256 arrvies
#endif
address.word++;
}
}
putch(0x10);
}
}
/* Get device signature bytes */
else if(ch=='u') {
if (getch() == ' ') {
putch(0x14);
putch(SIG1);
putch(SIG2);
putch(SIG3);
putch(0x10);
} else {
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
/* Read oscillator calibration byte */
else if(ch=='v') {
byte_response(0x00);
}
#if defined MONITOR
/* here come the extended monitor commands by Erik Lins */
/* check for three times exclamation mark pressed */
else if(ch=='!') {
ch = getch();
if(ch=='!') {
ch = getch();
if(ch=='!') {
PGM_P welcome = "";
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__)
uint16_t extaddr;
#endif
uint8_t addrl, addrh;
#ifdef CRUMB128
welcome = "ATmegaBOOT / Crumb128 - (C) J.P.Kyle, E.Lins - 050815\n\r";
#elif defined PROBOMEGA128
welcome = "ATmegaBOOT / PROBOmega128 - (C) J.P.Kyle, E.Lins - 050815\n\r";
#elif defined SAVVY128
welcome = "ATmegaBOOT / Savvy128 - (C) J.P.Kyle, E.Lins - 050815\n\r";
#elif defined __AVR_ATmega1280__
welcome = "ATmegaBOOT / Arduino Mega - (C) Arduino LLC - 090930\n\r";
#endif
/* turn on LED */
LED_DDR |= _BV(LED);
LED_PORT &= ~_BV(LED);
/* print a welcome message and command overview */
for(i=0; welcome[i] != '\0'; ++i) {
putch(welcome[i]);
}
/* test for valid commands */
for(;;) {
putch('\n');
putch('\r');
putch(':');
putch(' ');
ch = getch();
putch(ch);
/* toggle LED */
if(ch == 't') {
if(bit_is_set(LED_PIN,LED)) {
LED_PORT &= ~_BV(LED);
putch('1');
} else {
LED_PORT |= _BV(LED);
putch('0');
}
}
/* read byte from address */
else if(ch == 'r') {
ch = getch(); putch(ch);
addrh = gethex();
addrl = gethex();
putch('=');
ch = *(uint8_t *)((addrh << 8) + addrl);
puthex(ch);
}
/* write a byte to address */
else if(ch == 'w') {
ch = getch(); putch(ch);
addrh = gethex();
addrl = gethex();
ch = getch(); putch(ch);
ch = gethex();
*(uint8_t *)((addrh << 8) + addrl) = ch;
}
/* read from uart and echo back */
else if(ch == 'u') {
for(;;) {
putch(getch());
}
}
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__)
/* external bus loop */
else if(ch == 'b') {
putch('b');
putch('u');
putch('s');
MCUCR = 0x80;
XMCRA = 0;
XMCRB = 0;
extaddr = 0x1100;
for(;;) {
ch = *(volatile uint8_t *)extaddr;
if(++extaddr == 0) {
extaddr = 0x1100;
}
}
}
#endif
else if(ch == 'j') {
app_start();
}
} /* end of monitor functions */
}
}
}
/* end of monitor */
#endif
else if (++error_count == MAX_ERROR_COUNT) {
app_start();
}
} /* end of forever loop */
}
char gethexnib(void) {
char a;
a = getch(); putch(a);
if(a >= 'a') {
return (a - 'a' + 0x0a);
} else if(a >= '0') {
return(a - '0');
}
return a;
}
char gethex(void) {
return (gethexnib() << 4) + gethexnib();
}
void puthex(char ch) {
char ah;
ah = ch >> 4;
if(ah >= 0x0a) {
ah = ah - 0x0a + 'a';
} else {
ah += '0';
}
ch &= 0x0f;
if(ch >= 0x0a) {
ch = ch - 0x0a + 'a';
} else {
ch += '0';
}
putch(ah);
putch(ch);
}
void putch(char ch)
{
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
if(bootuart == 1) {
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
}
else if (bootuart == 2) {
while (!(UCSR1A & _BV(UDRE1)));
UDR1 = ch;
}
#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
#else
/* m8,16,32,169,8515,8535,163 */
while (!(UCSRA & _BV(UDRE)));
UDR = ch;
#endif
}
char getch(void)
{
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
uint32_t count = 0;
if(bootuart == 1) {
while(!(UCSR0A & _BV(RXC0))) {
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
return UDR0;
}
else if(bootuart == 2) {
while(!(UCSR1A & _BV(RXC1))) {
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
return UDR1;
}
return 0;
#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
uint32_t count = 0;
while(!(UCSR0A & _BV(RXC0))){
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
return UDR0;
#else
/* m8,16,32,169,8515,8535,163 */
uint32_t count = 0;
while(!(UCSRA & _BV(RXC))){
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
/* HACKME:: here is a good place to count times*/
count++;
if (count > MAX_TIME_COUNT)
app_start();
}
return UDR;
#endif
}
void getNch(uint8_t count)
{
while(count--) {
#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
if(bootuart == 1) {
while(!(UCSR0A & _BV(RXC0)));
UDR0;
}
else if(bootuart == 2) {
while(!(UCSR1A & _BV(RXC1)));
UDR1;
}
#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
getch();
#else
/* m8,16,32,169,8515,8535,163 */
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
//while(!(UCSRA & _BV(RXC)));
//UDR;
getch(); // need to handle time out
#endif
}
}
void byte_response(uint8_t val)
{
if (getch() == ' ') {
putch(0x14);
putch(val);
putch(0x10);
} else {
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
void nothing_response(void)
{
if (getch() == ' ') {
putch(0x14);
putch(0x10);
} else {
if (++error_count == MAX_ERROR_COUNT)
app_start();
}
}
void flash_led(uint8_t count)
{
while (count--) {
LED_PORT |= _BV(LED);
_delay_ms(100);
LED_PORT &= ~_BV(LED);
_delay_ms(100);
}
}
/* end of file ATmegaBOOT.c */

View file

@ -0,0 +1,130 @@
:020000021000EC
:10F000000C9446F80C9465F80C9465F80C9465F82B
:10F010000C9465F80C9465F80C9465F80C9465F8FC
:10F020000C9465F80C9465F80C9465F80C9465F8EC
:10F030000C9465F80C9465F80C9465F80C9465F8DC
:10F040000C9465F80C9465F80C9465F80C9465F8CC
:10F050000C9465F80C9465F80C9465F80C9465F8BC
:10F060000C9465F80C9465F80C9465F80C9465F8AC
:10F070000C9465F80C9465F80C9465F80C9465F89C
:10F080000C9465F80C9465F80C9465F811241FBE77
:10F09000CFEFD0E4DEBFCDBF11E0A0E0B1E0E8EDFE
:10F0A000F7EF01E00BBF02C007900D92A230B1074D
:10F0B000D9F712E0A2E0B1E001C01D92AD30B10776
:10F0C000E1F70E947EF90C94EAFB0C9400F8909111
:10F0D0000201913019F0923041F008959091C000F2
:10F0E00095FFFCCF8093C60008959091C80095FFCE
:10F0F000FCCF8093CE0008951F93982F95959595FA
:10F1000095959595905D182F1F701A304CF4105DF1
:10F11000892F0E9467F8812F0E9467F81F91089538
:10F12000195A892F0E9467F8812F0E9467F81F9152
:10F130000895EF92FF920F931F9380910201813007
:10F1400069F1823031F080E01F910F91FF90EF90D4
:10F150000895EE24FF2487018091C80087FD17C021
:10F160000894E11CF11C011D111D81E4E81682E4E4
:10F17000F8068FE0080780E0180770F3E0910401BB
:10F18000F091050109958091C80087FFE9CF809132
:10F19000CE001F910F91FF90EF900895EE24FF2471
:10F1A00087018091C00087FD17C00894E11CF11C05
:10F1B000011D111D81E4E81682E4F8068FE00807BE
:10F1C00080E0180770F3E0910401F09105010995C2
:10F1D0008091C00087FFE9CF8091C6001F910F91F9
:10F1E000FF90EF9008951F930E9499F8182F0E94A6
:10F1F00067F8113634F410330CF01053812F1F913F
:10F2000008951755812F1F9108951F930E94F3F8B9
:10F21000182F0E94F3F81295107F810F1F91089507
:10F2200020910201882339F0213031F0223061F041
:10F2300081508823C9F708959091C00097FFFCCFB3
:10F240009091C6008150F5CF9091C80097FFFCCFF8
:10F250009091CE008150EDCF1F93182F0E9499F806
:10F26000803281F0809103018F5F809303018530AC
:10F2700011F01F910895E0910401F09105010995A5
:10F280001F91089584E10E9467F8812F0E9467F81A
:10F2900080E10E9467F8EDCF0E9499F8803271F00A
:10F2A000809103018F5F80930301853009F00895F9
:10F2B000E0910401F09105010995089584E10E940F
:10F2C00067F880E10E9467F8089515C0289A2FEF2B
:10F2D00031EE44E0215030404040E1F700C00000F2
:10F2E00028982FEF31EE44E0215030404040E1F7C4
:10F2F00000C000008150882349F70895EF92FF92E3
:10F300000F931F93CF93DF93000081E0809302015E
:10F3100080E18093C4001092C5001092C00086E086
:10F320008093C20088E18093C100209A81E00E940E
:10F3300065F90E9499F88033B1F18133B9F18034D5
:10F3400009F454C0813409F45AC0823409F469C004
:10F35000853409F46CC0803531F1823521F1813575
:10F3600011F1853509F469C0863509F471C0843618
:10F3700009F47AC0843709F4E1C0853709F43FC144
:10F38000863709F44AC0809103018F5F809303019F
:10F39000853079F6E0910401F091050109950E940C
:10F3A00099F8803351F60E944CF9C3CF0E9499F826
:10F3B000803249F784E10E9467F881E40E9467F88F
:10F3C00086E50E9467F882E50E9467F880E20E9465
:10F3D00067F889E40E9467F883E50E9467F880E592
:10F3E0000E9467F880E10E9467F8A3CF0E9499F815
:10F3F0008638C8F20E9499F80E944CF99ACF0E9470
:10F4000099F8803809F414C1813809F415C182389B
:10F4100009F416C1883909F407C180E00E942CF96B
:10F4200088CF84E10E9410F90E944CF982CF85E0D8
:10F430000E9410F90E944CF97CCF0E9499F88093A9
:10F4400006010E9499F8809307010E944CF971CF40
:10F450000E9499F8803309F405C183E00E9410F9F5
:10F4600080E00E942CF965CF0E9499F880930902F0
:10F470000E9499F88093080280910C028E7F8093FD
:10F480000C020E9499F8853409F4FDC080910802AD
:10F49000909109020097A1F068E0E62E61E0F62E57
:10F4A00000E010E00E9499F8F70181937F010F5F5F
:10F4B0001F4F80910802909109020817190790F3D5
:10F4C0000E9499F8803209F05ECF80910C0280FF93
:10F4D000ECC08091060190910701880F991F9093CD
:10F4E000070180930601209108023091090221153D
:10F4F0003105E9F048E0E42E41E0F42E00E010E0B0
:10F50000F70161917F010E94DCFB809106019091DF
:10F510000701019690930701809306010F5F1F4F2B
:10F5200020910802309109020217130748F384E181
:10F530000E9467F880E10E9467F8FBCE0E9499F86C
:10F54000809309020E9499F8809308028091060135
:10F550009091070197FDA3C020910C022D7F20936D
:10F560000C02880F991F90930701809306010E9457
:10F5700099F8853409F48DC080910C028E7F8093B8
:10F580000C020E9499F8803209F0D3CE84E10E94E7
:10F5900067F88091080290910902009709F440C031
:10F5A00000E010E0809106019091070116C0FC0177
:10F5B00084910E9467F8809106019091070101965D
:10F5C00090930701809306010F5F1F4F209108025F
:10F5D000309109020217130718F520910C0220FD43
:10F5E00033C021FFE4CFA0E0B0E080509040AF4FA7
:10F5F000BF4FABBFFC0187910E9467F8DCCF0E9430
:10F6000099F8803209F0BFCE84E10E9467F88EE15C
:10F610000E9467F887E90E9467F885E00E9467F812
:10F6200080E10E9467F885CE83E00E942CF981CEAC
:10F6300082E00E942CF97DCE81E00E942CF979CEE7
:10F6400080E10E942CF975CE0E94D4FB0E9467F8DD
:10F650008091060190910701019690930701809394
:10F660000601B2CF0E9499F80E9499F8082F0E94D3
:10F6700099F8002309F48BC0013009F48CC085E0AF
:10F680000E942CF956CE80910C02816080930C026E
:10F69000FDCE80910C02816080930C0272CF20918C
:10F6A0000C02226020930C025CCF8091070187FD41
:10F6B00076C010920B0280E08BBF80910601909182
:10F6C0000701880F991F909307018093060180918D
:10F6D000080280FF09C080910802909109020196FA
:10F6E0009093090280930802F894F999FECF1127AC
:10F6F000E0910601F0910701C8E0D1E08091080295
:10F7000090910902103091F400915700017001307E
:10F71000D9F303E000935700E8950091570001707A
:10F720000130D9F301E100935700E8950990199051
:10F730000091570001700130D9F301E000935700A8
:10F74000E8951395103898F0112700915700017033
:10F750000130D9F305E000935700E8950091570078
:10F7600001700130D9F301E100935700E89532961A
:10F77000029709F0C7CF103011F00296E5CF11249F
:10F7800084E10E9467F880E10E9467F8D2CD8EE1A3
:10F790000E942CF9CECD87E90E942CF9CACDF1E068
:10F7A000F0930B0281E088CFF999FECF92BD81BD25
:10F7B000F89A992780B50895262FF999FECF1FBA98
:10F7C00092BD81BD20BD0FB6F894FA9AF99A0FBE8A
:08F7D00001960895F894FFCFA3
:02F7D8008000AF
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,130 @@
:020000021000EC
:10F000000C9446F80C9465F80C9465F80C9465F82B
:10F010000C9465F80C9465F80C9465F80C9465F8FC
:10F020000C9465F80C9465F80C9465F80C9465F8EC
:10F030000C9465F80C9465F80C9465F80C9465F8DC
:10F040000C9465F80C9465F80C9465F80C9465F8CC
:10F050000C9465F80C9465F80C9465F80C9465F8BC
:10F060000C9465F80C9465F80C9465F80C9465F8AC
:10F070000C9465F80C9465F80C9465F80C9465F89C
:10F080000C9465F80C9465F80C9465F811241FBE77
:10F09000CFEFD0E4DEBFCDBF11E0A0E0B1E0E8EDFE
:10F0A000F7EF01E00BBF02C007900D92A230B1074D
:10F0B000D9F712E0A2E0B1E001C01D92AD30B10776
:10F0C000E1F70E947EF90C94EAFB0C9400F8909111
:10F0D0000201913019F0923041F008959091C000F2
:10F0E00095FFFCCF8093C60008959091C80095FFCE
:10F0F000FCCF8093CE0008951F93982F95959595FA
:10F1000095959595905D182F1F701A304CF4105DF1
:10F11000892F0E9467F8812F0E9467F81F91089538
:10F12000195A892F0E9467F8812F0E9467F81F9152
:10F130000895EF92FF920F931F9380910201813007
:10F1400069F1823031F080E01F910F91FF90EF90D4
:10F150000895EE24FF2487018091C80087FD17C021
:10F160000894E11CF11C011D111D81E2E81681EAE1
:10F17000F80687E0080780E0180770F3E0910401C3
:10F18000F091050109958091C80087FFE9CF809132
:10F19000CE001F910F91FF90EF900895EE24FF2471
:10F1A00087018091C00087FD17C00894E11CF11C05
:10F1B000011D111D81E2E81681EAF80687E00807C3
:10F1C00080E0180770F3E0910401F09105010995C2
:10F1D0008091C00087FFE9CF8091C6001F910F91F9
:10F1E000FF90EF9008951F930E9499F8182F0E94A6
:10F1F00067F8113634F410330CF01053812F1F913F
:10F2000008951755812F1F9108951F930E94F3F8B9
:10F21000182F0E94F3F81295107F810F1F91089507
:10F2200020910201882339F0213031F0223061F041
:10F2300081508823C9F708959091C00097FFFCCFB3
:10F240009091C6008150F5CF9091C80097FFFCCFF8
:10F250009091CE008150EDCF1F93182F0E9499F806
:10F26000803281F0809103018F5F809303018530AC
:10F2700011F01F910895E0910401F09105010995A5
:10F280001F91089584E10E9467F8812F0E9467F81A
:10F2900080E10E9467F8EDCF0E9499F8803271F00A
:10F2A000809103018F5F80930301853009F00895F9
:10F2B000E0910401F09105010995089584E10E940F
:10F2C00067F880E10E9467F8089515C0289A2FEF2B
:10F2D00030E742E0215030404040E1F700C00000FC
:10F2E00028982FEF30E742E0215030404040E1F7CE
:10F2F00000C000008150882349F70895EF92FF92E3
:10F300000F931F93CF93DF93000081E0809302015E
:10F3100089E18093C4001092C5001092C00086E07D
:10F320008093C20088E18093C100209A81E00E940E
:10F3300065F90E9499F88033B1F18133B9F18034D5
:10F3400009F454C0813409F45AC0823409F469C004
:10F35000853409F46CC0803531F1823521F1813575
:10F3600011F1853509F469C0863509F471C0843618
:10F3700009F47AC0843709F4E1C0853709F43FC144
:10F38000863709F44AC0809103018F5F809303019F
:10F39000853079F6E0910401F091050109950E940C
:10F3A00099F8803351F60E944CF9C3CF0E9499F826
:10F3B000803249F784E10E9467F881E40E9467F88F
:10F3C00086E50E9467F882E50E9467F880E20E9465
:10F3D00067F889E40E9467F883E50E9467F880E592
:10F3E0000E9467F880E10E9467F8A3CF0E9499F815
:10F3F0008638C8F20E9499F80E944CF99ACF0E9470
:10F4000099F8803809F414C1813809F415C182389B
:10F4100009F416C1883909F407C180E00E942CF96B
:10F4200088CF84E10E9410F90E944CF982CF85E0D8
:10F430000E9410F90E944CF97CCF0E9499F88093A9
:10F4400006010E9499F8809307010E944CF971CF40
:10F450000E9499F8803309F405C183E00E9410F9F5
:10F4600080E00E942CF965CF0E9499F880930902F0
:10F470000E9499F88093080280910C028E7F8093FD
:10F480000C020E9499F8853409F4FDC080910802AD
:10F49000909109020097A1F068E0E62E61E0F62E57
:10F4A00000E010E00E9499F8F70181937F010F5F5F
:10F4B0001F4F80910802909109020817190790F3D5
:10F4C0000E9499F8803209F05ECF80910C0280FF93
:10F4D000ECC08091060190910701880F991F9093CD
:10F4E000070180930601209108023091090221153D
:10F4F0003105E9F048E0E42E41E0F42E00E010E0B0
:10F50000F70161917F010E94DCFB809106019091DF
:10F510000701019690930701809306010F5F1F4F2B
:10F5200020910802309109020217130748F384E181
:10F530000E9467F880E10E9467F8FBCE0E9499F86C
:10F54000809309020E9499F8809308028091060135
:10F550009091070197FDA3C020910C022D7F20936D
:10F560000C02880F991F90930701809306010E9457
:10F5700099F8853409F48DC080910C028E7F8093B8
:10F580000C020E9499F8803209F0D3CE84E10E94E7
:10F5900067F88091080290910902009709F440C031
:10F5A00000E010E0809106019091070116C0FC0177
:10F5B00084910E9467F8809106019091070101965D
:10F5C00090930701809306010F5F1F4F209108025F
:10F5D000309109020217130718F520910C0220FD43
:10F5E00033C021FFE4CFA0E0B0E080509040AF4FA7
:10F5F000BF4FABBFFC0187910E9467F8DCCF0E9430
:10F6000099F8803209F0BFCE84E10E9467F88EE15C
:10F610000E9467F887E90E9467F885E00E9467F812
:10F6200080E10E9467F885CE83E00E942CF981CEAC
:10F6300082E00E942CF97DCE81E00E942CF979CEE7
:10F6400080E10E942CF975CE0E94D4FB0E9467F8DD
:10F650008091060190910701019690930701809394
:10F660000601B2CF0E9499F80E9499F8082F0E94D3
:10F6700099F8002309F48BC0013009F48CC085E0AF
:10F680000E942CF956CE80910C02816080930C026E
:10F69000FDCE80910C02816080930C0272CF20918C
:10F6A0000C02226020930C025CCF8091070187FD41
:10F6B00076C010920B0280E08BBF80910601909182
:10F6C0000701880F991F909307018093060180918D
:10F6D000080280FF09C080910802909109020196FA
:10F6E0009093090280930802F894F999FECF1127AC
:10F6F000E0910601F0910701C8E0D1E08091080295
:10F7000090910902103091F400915700017001307E
:10F71000D9F303E000935700E8950091570001707A
:10F720000130D9F301E100935700E8950990199051
:10F730000091570001700130D9F301E000935700A8
:10F74000E8951395103898F0112700915700017033
:10F750000130D9F305E000935700E8950091570078
:10F7600001700130D9F301E100935700E89532961A
:10F77000029709F0C7CF103011F00296E5CF11249F
:10F7800084E10E9467F880E10E9467F8D2CD8EE1A3
:10F790000E942CF9CECD87E90E942CF9CACDF1E068
:10F7A000F0930B0281E088CFF999FECF92BD81BD25
:10F7B000F89A992780B50895262FF999FECF1FBA98
:10F7C00092BD81BD20BD0FB6F894FA9AF99A0FBE8A
:08F7D00001960895F894FFCFA3
:02F7D8008000AF
:040000031000F000F9
:00000001FF

View file

@ -0,0 +1,126 @@
:10F800000C943E7C0C945B7C0C945B7C0C945B7C39
:10F810000C945B7C0C945B7C0C945B7C0C945B7C0C
:10F820000C945B7C0C945B7C0C945B7C0C945B7CFC
:10F830000C945B7C0C945B7C0C945B7C0C945B7CEC
:10F840000C945B7C0C945B7C0C945B7C0C945B7CDC
:10F850000C945B7C0C945B7C0C945B7C0C945B7CCC
:10F860000C945B7C0C945B7C0C945B7C0C945B7CBC
:10F870000C945B7C0C945B7C0C945B7C11241FBE11
:10F88000CFEFD0E1DEBFCDBF11E0A0E0B1E0EAEA0A
:10F89000FFEF02C005900D92A230B107D9F712E038
:10F8A000A2E0B1E001C01D92AD30B107E1F70E94C6
:10F8B000747D0C94D37F0C94007C90910201913064
:10F8C00019F0923041F008959091C00095FFFCCF5F
:10F8D0008093C60008959091C80095FFFCCF809357
:10F8E000CE0008951F93982F95959595959595958C
:10F8F000905D182F1F701A304CF4105D892F0E94F4
:10F900005D7C812F0E945D7C1F910895195A892F7B
:10F910000E945D7C812F0E945D7C1F910895EF9273
:10F92000FF920F931F9380910201813069F1823021
:10F9300031F080E01F910F91FF90EF900895EE2439
:10F94000FF2487018091C80087FD17C00894E11C3F
:10F95000F11C011D111D81E4E81682E4F8068FE018
:10F96000080780E0180770F3E0910401F0910501A9
:10F9700009958091C80087FFE9CF8091CE001F9143
:10F980000F91FF90EF900895EE24FF24870180915E
:10F99000C00087FD17C00894E11CF11C011D111D5A
:10F9A00081E4E81682E4F8068FE0080780E0180793
:10F9B00070F3E0910401F091050109958091C00078
:10F9C00087FFE9CF8091C6001F910F91FF90EF90C4
:10F9D00008951F930E948F7C182F0E945D7C113622
:10F9E00034F410330CF01053812F1F9108951755E4
:10F9F000812F1F9108951F930E94E97C182F0E9468
:10FA0000E97C1295107F810F1F91089520910201CA
:10FA1000882339F0213031F0223061F08150882381
:10FA2000C9F708959091C00097FFFCCF9091C60050
:10FA30008150F5CF9091C80097FFFCCF9091CE00F8
:10FA40008150EDCF1F93182F0E948F7C803281F060
:10FA5000809103018F5F80930301853011F01F9126
:10FA60000895E0910401F091050109951F91089511
:10FA700084E10E945D7C812F0E945D7C80E10E9478
:10FA80005D7CEDCF0E948F7C803271F0809103010C
:10FA90008F5F80930301853009F00895E0910401A0
:10FAA000F09105010995089584E10E945D7C80E153
:10FAB0000E945D7C089515C0289A2FEF31EE44E036
:10FAC000215030404040E1F700C0000028982FEF5F
:10FAD00031EE44E0215030404040E1F700C00000EA
:10FAE0008150882349F70895EF92FF920F931F9357
:10FAF000CF93DF93000081E08093020180E1809347
:10FB0000C4001092C5001092C00086E08093C2002D
:10FB100088E18093C100209A81E00E945B7D0E9471
:10FB20008F7C8033B1F18133B9F1803409F454C052
:10FB3000813409F45AC0823409F469C0853409F467
:10FB40006CC0803531F1823521F1813511F1853577
:10FB500009F469C0863509F471C0843609F47AC0A5
:10FB6000843709F4E1C0853709F439C1863709F4CF
:10FB70004AC0809103018F5F80930301853079F63D
:10FB8000E0910401F091050109950E948F7C80337A
:10FB900051F60E94427DC3CF0E948F7C803249F78C
:10FBA00084E10E945D7C81E40E945D7C86E50E9488
:10FBB0005D7C82E50E945D7C80E20E945D7C89E440
:10FBC0000E945D7C83E50E945D7C80E50E945D7CF7
:10FBD00080E10E945D7CA3CF0E948F7C8638C8F2B2
:10FBE0000E948F7C0E94427D9ACF0E948F7C803839
:10FBF00009F40EC1813809F40FC1823809F410C12B
:10FC0000883909F401C180E00E94227D88CF84E117
:10FC10000E94067D0E94427D82CF85E00E94067D83
:10FC20000E94427D7CCF0E948F7C809306010E94BF
:10FC30008F7C809307010E94427D71CF0E948F7C50
:10FC4000803309F4F1C083E00E94067D80E00E94C9
:10FC5000227D65CF0E948F7C809309020E948F7C59
:10FC60008093080280910C028E7F80930C020E9488
:10FC70008F7C853409F4E9C08091080290910902D3
:10FC80000097A1F068E0E62E61E0F62E00E010E0BB
:10FC90000E948F7CF70181937F010F5F1F4F80913E
:10FCA0000802909109020817190790F30E948F7CAF
:10FCB000803209F05ECF80910C0280FFE5C0809118
:10FCC000060190910701880F991F90930701809377
:10FCD0000601209108023091090221153105E9F051
:10FCE00048E0E42E41E0F42E00E010E0F7016191DD
:10FCF0007F010E94C57F80910601909107010196C6
:10FD000090930701809306010F5F1F4F2091080217
:10FD1000309109020217130748F384E10E945D7CC9
:10FD200080E10E945D7CFBCE0E948F7C8093090263
:10FD30000E948F7C809308028091060190910701B8
:10FD400097FD9CC020910C022D7F20930C02880F00
:10FD5000991F90930701809306010E948F7C853440
:10FD600009F486C080910C028E7F80930C020E9461
:10FD70008F7C803209F0D3CE84E10E945D7C20919B
:10FD800008023091090221153105D1F100E010E09F
:10FD900080910601909107010CC041FF5CC0019663
:10FDA00090930701809306010F5F1F4F02171307FF
:10FDB00038F540910C0240FFF0CF0E94BD7F0E94B9
:10FDC0005D7C809106019091070101969093070157
:10FDD000809306012091080230910902E5CF0E942C
:10FDE0008F7C803209F0C5CE84E10E945D7C8EE17B
:10FDF0000E945D7C86E90E945D7C8AE00E945D7CB9
:10FE000080E10E945D7C8BCE83E00E94227D87CEC4
:10FE100082E00E94227D83CE81E00E94227D7FCEFF
:10FE200080E10E94227D7BCE0E948F7C0E948F7C8D
:10FE3000082F0E948F7C002309F497C0013009F439
:10FE400098C08AE00E94227D6ACE80910C02816077
:10FE500080930C0211CFFC0184910E945D7C209163
:10FE6000080230910902809106019091070197CF15
:10FE700080910C02816080930C0279CF20910C025A
:10FE8000226020930C0263CF80910701880F880BBA
:10FE9000817080930B028091060190910701880F79
:10FEA000991F90930701809306018091080280FFBB
:10FEB00009C080910802909109020196909309026D
:10FEC00080930802F894F999FECF1127E09106017A
:10FED000F0910701C8E0D1E08091080290910902F9
:10FEE000103091F40091570001700130D9F303E014
:10FEF00000935700E8950091570001700130D9F345
:10FF000001E100935700E89509901990009157007E
:10FF100001700130D9F301E000935700E895139583
:10FF2000103898F011270091570001700130D9F373
:10FF300005E000935700E8950091570001700130EB
:10FF4000D9F301E100935700E8953296029709F042
:10FF5000C7CF103011F00296E5CF112484E10E9442
:10FF60005D7C80E10E945D7CDACD8EE10E94227D85
:10FF7000D6CD86E90E94227DD2CDF999FECF92BDE1
:10FF800081BDF89A992780B50895262FF999FECF5B
:10FF90001FBA92BD81BD20BD0FB6F894FA9AF99AA6
:0AFFA0000FBE01960895F894FFCFFC
:02FFAA008000D5
:040000030000F80001
:00000001FF

View file

@ -0,0 +1,254 @@
# Makefile for ATmegaBOOT
# E.Lins, 18.7.2005
# $Id$
#
# Instructions
#
# To make bootloader .hex file:
# make diecimila
# make lilypad
# make ng
# etc...
#
# To burn bootloader .hex file:
# make diecimila_isp
# make lilypad_isp
# make ng_isp
# etc...
# program name should not be changed...
PROGRAM = ATmegaBOOT_168
# enter the parameters for the avrdude isp tool
ISPTOOL = stk500v2
ISPPORT = usb
ISPSPEED = -b 115200
MCU_TARGET = atmega168
LDSECTION = --section-start=.text=0x3800
# the efuse should really be 0xf8; since, however, only the lower
# three bits of that byte are used on the atmega168, avrdude gets
# confused if you specify 1's for the higher bits, see:
# http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/
#
# similarly, the lock bits should be 0xff instead of 0x3f (to
# unlock the bootloader section) and 0xcf instead of 0x0f (to
# lock it), but since the high two bits of the lock byte are
# unused, avrdude would get confused.
ISPFUSES = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \
-e -u -U lock:w:0x3f:m -U efuse:w:0x$(EFUSE):m -U hfuse:w:0x$(HFUSE):m -U lfuse:w:0x$(LFUSE):m
ISPFLASH = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \
-U flash:w:$(PROGRAM)_$(TARGET).hex -U lock:w:0x0f:m
STK500 = "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe"
STK500-1 = $(STK500) -e -d$(MCU_TARGET) -pf -vf -if$(PROGRAM)_$(TARGET).hex \
-lFF -LFF -f$(HFUSE)$(LFUSE) -EF8 -ms -q -cUSB -I200kHz -s -wt
STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt
OBJ = $(PROGRAM).o
OPTIMIZE = -O2
DEFS =
LIBS =
CC = avr-gcc
# Override is only needed by avr-lib build system.
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS)
override LDFLAGS = -Wl,$(LDSECTION)
#override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION)
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
all:
lilypad: TARGET = lilypad
lilypad: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3'
lilypad: AVR_FREQ = 8000000L
lilypad: $(PROGRAM)_lilypad.hex
lilypad_isp: lilypad
lilypad_isp: TARGET = lilypad
lilypad_isp: HFUSE = DD
lilypad_isp: LFUSE = E2
lilypad_isp: EFUSE = 00
lilypad_isp: isp
lilypad_resonator: TARGET = lilypad_resonator
lilypad_resonator: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=3'
lilypad_resonator: AVR_FREQ = 8000000L
lilypad_resonator: $(PROGRAM)_lilypad_resonator.hex
lilypad_resonator_isp: lilypad_resonator
lilypad_resonator_isp: TARGET = lilypad_resonator
lilypad_resonator_isp: HFUSE = DD
lilypad_resonator_isp: LFUSE = C6
lilypad_resonator_isp: EFUSE = 00
lilypad_resonator_isp: isp
pro8: TARGET = pro_8MHz
pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS'
pro8: AVR_FREQ = 8000000L
pro8: $(PROGRAM)_pro_8MHz.hex
pro8_isp: pro8
pro8_isp: TARGET = pro_8MHz
pro8_isp: HFUSE = DD
pro8_isp: LFUSE = C6
pro8_isp: EFUSE = 00
pro8_isp: isp
pro16: TARGET = pro_16MHz
pro16: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS'
pro16: AVR_FREQ = 16000000L
pro16: $(PROGRAM)_pro_16MHz.hex
pro16_isp: pro16
pro16_isp: TARGET = pro_16MHz
pro16_isp: HFUSE = DD
pro16_isp: LFUSE = C6
pro16_isp: EFUSE = 00
pro16_isp: isp
pro20: TARGET = pro_20mhz
pro20: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS'
pro20: AVR_FREQ = 20000000L
pro20: $(PROGRAM)_pro_20mhz.hex
pro20_isp: pro20
pro20_isp: TARGET = pro_20mhz
pro20_isp: HFUSE = DD
pro20_isp: LFUSE = C6
pro20_isp: EFUSE = 00
pro20_isp: isp
diecimila: TARGET = diecimila
diecimila: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1'
diecimila: AVR_FREQ = 16000000L
diecimila: $(PROGRAM)_diecimila.hex
diecimila_isp: diecimila
diecimila_isp: TARGET = diecimila
diecimila_isp: HFUSE = DD
diecimila_isp: LFUSE = FF
diecimila_isp: EFUSE = 00
diecimila_isp: isp
ng: TARGET = ng
ng: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3'
ng: AVR_FREQ = 16000000L
ng: $(PROGRAM)_ng.hex
ng_isp: ng
ng_isp: TARGET = ng
ng_isp: HFUSE = DD
ng_isp: LFUSE = FF
ng_isp: EFUSE = 00
ng_isp: isp
atmega328: TARGET = atmega328
atmega328: MCU_TARGET = atmega328p
atmega328: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600
atmega328: AVR_FREQ = 16000000L
atmega328: LDSECTION = --section-start=.text=0x7800
atmega328: $(PROGRAM)_atmega328.hex
atmega328_isp: atmega328
atmega328_isp: TARGET = atmega328
atmega328_isp: MCU_TARGET = atmega328p
atmega328_isp: HFUSE = DA
atmega328_isp: LFUSE = FF
atmega328_isp: EFUSE = 05
atmega328_isp: isp
atmega328_pro8: TARGET = atmega328_pro_8MHz
atmega328_pro8: MCU_TARGET = atmega328p
atmega328_pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -DDOUBLE_SPEED
atmega328_pro8: AVR_FREQ = 8000000L
atmega328_pro8: LDSECTION = --section-start=.text=0x7800
atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.hex
atmega328_pro8_isp: atmega328_pro8
atmega328_pro8_isp: TARGET = atmega328_pro_8MHz
atmega328_pro8_isp: MCU_TARGET = atmega328p
atmega328_pro8_isp: HFUSE = DA
atmega328_pro8_isp: LFUSE = FF
atmega328_pro8_isp: EFUSE = 05
atmega328_pro8_isp: isp
mega: TARGET = atmega1280
mega: MCU_TARGET = atmega1280
mega: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=57600
mega: AVR_FREQ = 16000000L
mega: LDSECTION = --section-start=.text=0x1F000
mega: $(PROGRAM)_atmega1280.hex
mega_isp: mega
mega_isp: TARGET = atmega1280
mega_isp: MCU_TARGET = atmega1280
mega_isp: HFUSE = DA
mega_isp: LFUSE = FF
mega_isp: EFUSE = F5
mega_isp: isp
atmega1284p: TARGET = atmega1284p
atmega1284p: MCU_TARGET = atmega1284p
atmega1284p: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' '-DBAUD_RATE=57600'
atmega1284p: AVR_FREQ = 16000000L
atmega1284p: LDSECTION = --section-start=.text=0x1F000
atmega1284p: $(PROGRAM)_atmega1284p.hex
atmega1284p_8m: TARGET = atmega1284p
atmega1284p_8m: MCU_TARGET = atmega1284p
atmega1284p_8m: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' '-DBAUD_RATE=19200'
atmega1284p_8m: AVR_FREQ = 8000000L
atmega1284p_8m: LDSECTION = --section-start=.text=0x1F000
atmega1284p_8m: $(PROGRAM)_atmega1284p_8m.hex
atmega644p: TARGET = atmega644p
atmega644p: MCU_TARGET = atmega644p
atmega644p: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' '-DBAUD_RATE=57600'
atmega644p: AVR_FREQ = 16000000L
atmega644p: LDSECTION = --section-start=.text=0xF800
atmega644p: $(PROGRAM)_atmega644p.hex
atmega1284p_isp: atmega1284p
atmega1284p_isp: TARGET = atmega1284p
atmega1284p_isp: MCU_TARGET = atmega1284p
atmega1284p_isp: HFUSE = DC
atmega1284p_isp: LFUSE = FF
atmega1284p_isp: EFUSE = FD
atmega1284p_isp: isp
isp: $(TARGET)
$(ISPFUSES)
$(ISPFLASH)
isp-stk500: $(PROGRAM)_$(TARGET).hex
$(STK500-1)
$(STK500-2)
%.elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@

View file

@ -0,0 +1,106 @@
;************************************************************
; Windows USB CDC ACM Setup File
; Copyright (c) 2000 Microsoft Corporation
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
LayoutFile=layout.inf
CatalogFile=%MFGFILENAME%.cat
DriverVer=11/15/2007,5.1.2600.0
[Manufacturer]
%MFGNAME%=DeviceList, NTamd64
[DestinationDirs]
DefaultDestDir=12
;------------------------------------------------------------------------------
; Windows 2000/XP/Vista-32bit Sections
;------------------------------------------------------------------------------
[DriverInstall.nt]
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.nt
AddReg=DriverInstall.nt.AddReg
[DriverCopyFiles.nt]
usbser.sys,,,0x20
[DriverInstall.nt.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[DriverInstall.nt.Services]
AddService=usbser, 0x00000002, DriverService.nt
[DriverService.nt]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\%DRIVERFILENAME%.sys
;------------------------------------------------------------------------------
; Vista-64bit Sections
;------------------------------------------------------------------------------
[DriverInstall.NTamd64]
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.NTamd64
AddReg=DriverInstall.NTamd64.AddReg
[DriverCopyFiles.NTamd64]
%DRIVERFILENAME%.sys,,,0x20
[DriverInstall.NTamd64.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[DriverInstall.NTamd64.Services]
AddService=usbser, 0x00000002, DriverService.NTamd64
[DriverService.NTamd64]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\%DRIVERFILENAME%.sys
;------------------------------------------------------------------------------
; Vendor and Product ID Definitions
;------------------------------------------------------------------------------
; When developing your USB device, the VID and PID used in the PC side
; application program and the firmware on the microcontroller must match.
; Modify the below line to use your VID and PID. Use the format as shown below.
; Note: One INF file can be used for multiple devices with different VID and PIDs.
; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.
;------------------------------------------------------------------------------
[SourceDisksFiles]
[SourceDisksNames]
[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_16D0&PID_076B
[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall, USB\VID_16D0&PID_204A
;------------------------------------------------------------------------------
; String Definitions
;------------------------------------------------------------------------------
;Modify these strings to customize your device
;------------------------------------------------------------------------------
[Strings]
MFGFILENAME="CDC_vista"
DRIVERFILENAME ="usbser"
MFGNAME="Metrix Create Space"
INSTDISK="Brainwave Driver Installer"
DESCRIPTION="Communications Port"
SERVICE="USB RS-232 Emulation Driver"