diff --git a/.gitignore b/.gitignore index ae82c28..74af85d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ ######################################## *.o *.swp +*.bin +*.bak +*.smc # ignore shared files that have been copied to host-firmware dirs firmware/source/shared_*.h diff --git a/firmware/build_avr/avr_kazzo.elf b/firmware/build_avr/avr_kazzo.elf index 87471ad..64a6b4e 100644 Binary files a/firmware/build_avr/avr_kazzo.elf and b/firmware/build_avr/avr_kazzo.elf differ diff --git a/firmware/build_avr/avr_kazzo.hex b/firmware/build_avr/avr_kazzo.hex index 986f761..a5747e5 100644 --- a/firmware/build_avr/avr_kazzo.hex +++ b/firmware/build_avr/avr_kazzo.hex @@ -1,4 +1,4 @@ -:100000000C9476000C94F40A0C9493000C949300D6 +:100000000C9476000C94560C0C9493000C94930072 :100010000C9493000C9493000C9493000C94930014 :100020000C9493000C9493000C9493000C94930004 :100030000C9493000C9493000C9493000C949300F4 @@ -13,31 +13,31 @@ :1000C00049006E00660069006E00690074006500FA :1000D0004E00650073004C006900760065007300F7 :1000E0002E0063006F006D000403090411241FBE7D -:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0E4E699 -:10010000F8E102C005900D92A630B107D9F723E0BF -:10011000A6E0B1E001C01D92AA3AB207E1F70E9441 -:10012000080C0C94300C0C9400000F931F93CF9389 -:10013000DF93EC01FB01D9010091490110914A01C3 +:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0E8E299 +:10010000FBE102C005900D92A630B107D9F723E0BC +:10011000A6E0B1E001C01D92A83AB207E1F70E9443 +:100120006A0D0C94920D0C9400000F931F93CF93C3 +:10013000DF93EC01FB01D9010091470110914801C7 :10014000888187FF09C08E818C93442399F00481B4 :10015000158180E883831DC08FEF8C938E818093FF -:100160003401442309F44BC0709366036093650324 -:1001700080E9F0CFE0912201F09123018381883D55 -:10018000A1F50481158180E88383E0912201F0913B -:1001900023011782E0912201F091230183818039AC -:1001A000F1F48A81813711F08034C9F4E09165035C -:1001B000F09166030480F581E02D8C818083E091CD -:1001C0006503F09166030480F581E02D8D818183C4 -:1001D000E0916503F091660387818E5F8783C80194 +:100160003201442309F44BC070936403609363032A +:1001700080E9F0CFE0912001F09121018381883D59 +:10018000A1F50481158180E88383E0912001F0913D +:1001900021011782E0912001F091210183818039B2 +:1001A000F1F48A81813711F08034C9F4E09163035E +:1001B000F09164030480F581E02D8C818083E091CF +:1001C0006303F09164030480F581E02D8D818183C8 +:1001D000E0916303F091640387818E5F8783C80198 :1001E000DF91CF911F910F910895803D11F41C92E2 -:1001F000CCCF8FEF8C9380E10E947B06C6CFE0913D -:100200002201F09123018381811106C0F0936603DE -:10021000E093650380E9B8CF883969F7E8CFE5E571 -:10022000F1E08FEF819391E0E536F907D9F78093FC -:100230004801809327018093470180932601809392 -:10024000380180931501809337018093140181E078 -:100250000C947B06CF93DF93FC0150E0CA01820F20 +:1001F000CCCF8FEF8C9380E10E943F07C6CFE09178 +:100200002001F09121018381811106C0F0936403E4 +:10021000E093630380E9B8CF883969F7E8CFE3E575 +:10022000F1E08FEF819391E0E336F907D9F78093FE +:10023000460180932501809345018093240180939A +:10024000360180931301809335018093120181E080 +:100250000C943F07CF93DF93FC0150E0CA01820F5B :10026000911D4197E4F52223E1F183818F3FD9F578 -:1002700082818F3FD1F5DA01AB5ABE4FED0180E0AC +:1002700082818F3FD1F5DA01AD5ABE4FED0180E0AA :1002800099919F3FA1F58F5F2813FACF6283138264 :10029000982F9295990F907E915096831782108691 :1002A0001182108211861286138614861586168690 @@ -48,10 +48,10 @@ :1002F000F3CFCF93DF93DC01EB019A0112969C912F :10030000129780ED890F803318F513968C9113970F :10031000813041F0E8F08230A9F08330B1F085EB14 -:10032000888346C0E4E2F1E0913509F476C048F5EF +:10032000888346C0E2E2F1E0913509F476C048F5F1 :10033000913309F449C078F49923B9F19033E1F18C -:1003400084EBEECFE5E3F1E0EFCFE2E1F1E0ECCFDB -:10035000E5E4F1E0E9CF933309F446C0E8F19035E4 +:1003400084EBEECFE3E3F1E0EFCFE0E1F1E0ECCFDF +:10035000E3E4F1E0E9CF933309F446C0E8F19035E6 :1003600079F7188286E0898386818A8383818B83EB :1003700087818C8380858D8382818E8387858F831F :1003800017C0903808F05FC0903708F055C090361D @@ -61,333 +61,377 @@ :1003C0009C9191878287F3CF14968C911497159600 :1003D0009C9193878487EBCF14968C9114971596F4 :1003E0009C9195878687E3CF14968C918787DFCF82 -:1003F000188281E089831496ED91FC911597EB5A50 +:1003F000188281E089831496ED91FC911597ED5A4E :10040000FE4F80818A83D4CF188281E08983E09176 -:100410002201F09123018381F5CF188286E0898340 +:100410002001F09121018381F5CF188286E0898344 :1004200081858A8382858B8383858C8384858D8374 :1004300085858E838685A3CF40E0BF01CD01DF9106 :10044000CF910C949500892F8770813049F0F8F096 -:10045000823001F1833009F062CFE2E1F1E002C0C5 -:10046000E4E2F1E0903808F4A3CF9838B0F0905966 +:10045000823001F1833009F062CFE0E1F1E002C0C7 +:10046000E2E2F1E0903808F4A3CF9838B0F0905968 :10047000983008F09DCF188213968C91139780873F -:1004800014968D919C9115979183808391CFE5E48B -:10049000F1E0E8CFE5E3F1E0E5CF14964C91149755 +:1004800014968D919C9115979183808391CFE3E48D +:10049000F1E0E8CFE3E3F1E0E5CF14964C91149757 :1004A00015966C91159713962C91CF010E942A01F5 -:1004B00037CF90914801809127018F3F79F481E0F7 -:1004C0009F3F09F480E0909138019F3F09F083E05D -:1004D000909115019F3F09F084E0089582E0F3CFE9 -:1004E000623059F421E08534920749F121E08432E9 -:1004F000920789F485E491E00EC0633069F421E04D -:1005000085349207E1F021E084329207D9F021E0AE -:100510008533920779F308956430E9F721E0853453 -:10052000920769F021E08432920761F021E085337F -:10053000920759F021E08231920769F7DBCF84E21C -:1005400091E0089585E391E0089582E191E00895B6 -:100550001F93CF93DF930E948106823D09F071C003 -:100560000E9459028093060185E491E09093230153 -:10057000809322010E948106823DA1F4D091060160 -:100580008091220190912301C1E0CD1708F45FC052 -:10059000909323018093220120E8FC01238380EDC6 -:1005A0000E947B060E948106823F41F480EF0E94F8 -:1005B0007B06E0912201F091230113820E948106C3 -:1005C000C82F803DE1F48091220190912301FC012C +:1004B00037CF90914601809125018F3F79F481E0FB +:1004C0009F3F09F480E0909136019F3F09F083E05F +:1004D000909113019F3F09F084E0089582E0F3CFEB +:1004E000623059F421E08334920749F121E08232ED +:1004F000920789F483E491E00EC0633069F421E04F +:1005000083349207E1F021E082329207D9F021E0B2 +:100510008333920779F308956430E9F721E0833457 +:10052000920769F021E08232920761F021E0833383 +:10053000920759F021E08031920769F7DBCF82E220 +:1005400091E0089583E391E0089580E191E00895BA +:100550001F93CF93DF930E944507823D09F071C03E +:100560000E9459028093060183E491E09093210157 +:10057000809320010E944507823DA1F4D09106019D +:100580008091200190912101C1E0CD1708F45FC056 +:10059000909321018093200120E8FC01238380EDCA +:1005A0000E943F070E944507823F41F480EF0E946E +:1005B0003F07E0912001F091210113820E9445073D +:1005C000C82F803DE1F48091200190912101FC0130 :1005D00023812038A1F4609106010E94700290935B -:1005E000230180932201FC011782C3830E944003F0 -:1005F000E0912201F0912301882371F183830E940D -:100600008106182F803FC9F4C0912201D0912301A7 +:1005E000210180932001FC011782C3830E944003F4 +:1005F000E0912001F0912101882371F183830E9411 +:100600004507182F803FC9F4C0912001D0912101E6 :100610008B81883991F460910601CE010E947002AD -:100620009093230180932201FC0113821B83CE014E -:100630000E9422048823D1F08B83DF91CF911F91F8 -:1006400008950E948106823F09F094CF89CF6D2FD3 +:100620009093210180932001FC0113821B83CE0152 +:100630000E94D2048823D1F08B83DF91CF911F9148 +:1006400008950E944507823F09F094CF89CF6D2F0E :100650000E947002CF5F99CF88ED838320858081CF :100660009181820F911D91838083C9CF84EF8B8309 :10067000288588819981820F911D99838883DDCF98 -:100680000F93CF93DF93EC0168818985823101F16B -:1006900030F4803159F0813191F083EC03C0853121 -:1006A000E0F780E0DF91CF910F91089560680FEF40 -:1006B0002E814A818C819D810E94EA0507C00FEF3F -:1006C0002E814A818C819D810E9422068F83E9CFF1 -:1006D0006066EDCF7F928F929F92AF92BF92CF9242 -:1006E000DF92EF92FF920F931F93CF93DF936A01F4 -:1006F0005901DA011796CC91D0E0E62EF12CFE2CB0 -:10070000EE24D60116968C91169790E08C179D07D3 -:1007100088F41796CC9380E0DF91CF911F910F91D1 -:10072000FF90EF90DF90CF90BF90AF909F908F9011 -:100730007F9008956AEA85E595E5F501099565E5F7 -:100740008AEA9AE2F501099560EA85E595E5F50101 -:100750000995CE0199274C018E289F28D601149621 -:10076000ED91FC911597E80FF91F6081C401F50127 -:1007700009950E94D509C401F8010995782EC40194 -:10078000F80109957812F5CF2196BBCF7F928F9211 -:100790009F92AF92BF92CF92DF92EF92FF920F9310 -:1007A0001F93CF93DF936A015901DA011796CC9119 -:1007B000D0E0E62EF12CFE2CEE24D60116968C917C -:1007C000169790E08C179D0788F41796CC9380E0DD -:1007D000DF91CF911F910F91FF90EF90DF90CF901D -:1007E000BF90AF909F908F907F9008956AEA85E5C3 -:1007F00095E1F501099565E58AEA9AE0F501099523 -:1008000060EA85E595E1F5010995CE0199274C014E -:100810008E289F28D6011496ED91FC911597E80F2C -:10082000F91F6081C401F50109950E94D509C40131 -:10083000F8010995782EC401F80109957812F5CFD1 -:100840002196BBCF0F931F93AC01FC016081818582 -:100850008131A1F020F4803141F083EC03C0853177 -:10086000E0F780E01F910F91089560680EEF14E0AB -:1008700023EE34E080E00E946A03F3CF0CE315E03E -:1008800020E535E080E00E94C603EBCF3F9A479811 -:100890008FEF81B911B882B914B885B914B885B988 -:1008A0003898409A3998419A3A98429A3C98449A92 -:1008B0003D98459A3E98469A53985B9A55985D9A0A -:1008C0003F98479A57985F9A3B98439A5098589800 -:1008D0005198599A08950E944604399A419A389A33 -:1008E00040983A9A429A3C9A449A3D9A459A14B84A -:1008F0008FEF85B914B885B93F9A479881B912B876 -:1009000084B915B80E94980614B808955898509A5A -:10091000000089B15098589880FD22C05098589A8C -:1009200059B149B1000039B10000000029B10000FF -:100930000000000099B1000000000000000089B133 -:100940005098589850FD0EC040FD0EC030FD0EC0AE -:1009500020FD0EC090FD0EC080FD0EC080EE0895FB -:1009600080EF089580E0089581E0089583E0089580 -:1009700086E008958AE008958FE008950F931F930D -:10098000CF93DF931F92CDB7DEB78901813079F025 -:1009900020F0803881F086E904C089830E944604F3 -:1009A00089810F90DF91CF911F910F9108950E943F -:1009B0006B0480E0F6CF81E0F90180830E94860419 -:1009C000F8018183F6CF1F93CF93DF931F92CDB7AA -:1009D000DEB782B91FEF14B995B969830E949806F2 -:1009E00014B814B9698165B9509A58985098589AB2 -:1009F00014B80F90DF91CF911F910895CF93DF939B -:100A0000EC0182B98FEF84B9D5B90E94980614B869 -:100A1000409AD7FD4198000000000000000083B11B -:100A20004098419ADF91CF910895EF92FF921F93E2 -:100A3000CF93DF931F92CDB7DEB77C0150985898C3 -:100A400082B91FEF14B9F5B869830E94980614B8EB -:100A5000429814B9698165B9409AF7FC4198000041 -:100A600000004098419A429A14B80F90DF91CF91BC -:100A70001F91FF90EF900895811520E2920708F4EE -:100A8000906882B98FEF84B995B90E94980614B81E -:100A90004498000000000000000083B1449A0895CB -:100AA0001F93CF93DF931F92CDB7DEB7811520E25E -:100AB000920708F4906882B91FEF14B995B9698359 -:100AC0000E94980614B814B9698165B90000459868 -:100AD0000000459A14B80F90DF91CF911F910895AF -:100AE0001F93CF93DF931FEF14B984E085B90E9461 -:100AF000980614B8C9B1C072D0E014B988E085B9BD -:100B00000E94980614B889B1807290E031E0209775 -:100B100009F030E051E0009709F050E0332311F084 -:100B2000511119C041E0CD2B09F440E021E0892B9F -:100B300009F420E0442311F021110FC0552311F0D6 -:100B400041110DC0332311F021110BC08FEFDF9144 -:100B5000CF911F91089580E1FACF81E1F8CF82E132 -:100B6000F6CF83E1F4CF0F931F93CF93C82FCA0121 -:100B70008901C23001F130F4CC2391F0C130B9F0D9 -:100B8000C0EA10C0C238D1F0C338F1F0C138C1F7A3 -:100B900021E0F80120830E94FE04F801818309C04E -:100BA0000E94E3048C2FCF911F910F9108950E9412 -:100BB0005005C0E0F7CF0E941505FBCF21E0F801FA -:100BC00020830E943C05E9CF81E0F90180830E94E7 -:100BD0007005E3CFDF92EF92FF920F931F93CF93B5 -:100BE000DF931F92CDB7DEB77C01142FD22E8FEF8B -:100BF00084B965B969830E94980614B8409A6981DE -:100C000067FD419812B980E0011117C00000000093 -:100C100093B1F701E80FF11D90831F5F12B98F5F49 -:100C2000D81690F74098419A0F90DF91CF911F917D -:100C30000F91FF90EF90DF90089589830E94D5096E -:100C40008981E6CFDF92EF92FF920F931F93CF93AC -:100C5000DF931F92CDB7DEB77C01142FD22E603206 -:100C600008F460688FEF84B965B90E94980614B8DB -:100C7000449812B980E0011116C00000000093B141 -:100C8000F701E80FF11D90831F5F12B98F5FD8162F -:100C900090F7449A0F90DF91CF911F910F91FF90A1 -:100CA000EF90DF90089589830E94D5098981E7CF6D -:100CB000CF93DF93FB01DC0112962C91222329F0C4 -:100CC000203479F082ED808308C01082A091020167 -:100CD000B0910301EC018C818C93CF01DF91CF9116 -:100CE0000895108281E08183A0910201B0910301F7 -:100CF0008C918283F2CFE0910201F0910301808315 -:100D00000895E0910201F09103018081089585B179 -:100D10008093070192B12091080125B92FEF21B9E5 -:100D200082B93F9A4798479A479885B992B90895EA -:100D300085B18093080182B19FEF91B9909107012D -:100D400092B9479A479882B908950F931F93D90192 -:100D5000082F10E00531110508F09BC2F801ED5491 -:100D6000F94F0C942A0CEA06C80623077C07C6072D -:100D700010085A08FC080109060909090D0910099B -:100D800018091E0922092509290932093B094109C7 -:100D90004631510508F07FC2FA01EF52F94F0C9429 -:100DA0002A0CE706ED06F1064B09F506F906FD06E5 -:100DB0000107050709070D071107150719074B0953 -:100DC0004B094B094B094B094B094B091F07389835 -:100DD000409A80E01F910F9108953998419A80E0E0 -:100DE000F9CF3A98429A80E0F5CF3C98449A80E057 -:100DF000F1CF3D98459A80E0EDCF3E98469A80E04D -:100E0000E9CF3F98479A80E0E5CF5098589A80E024 -:100E1000E1CF5198599A80E0DDCF53985B9A80E0FA -:100E2000D9CF55985D9A80E0D5CF56985E9A80E0EC -:100E3000D1CF57985F9A3B98439A80E0CBCF509898 -:100E4000589A80E0C7CF4631510508F026C2FA0112 -:100E5000E45DF84F0C942A0C420746074A074D09F7 -:100E60004E07520756075A075E07620766076A076A -:100E70006E0772074D094D094D094D094D094D0980 -:100E80004D0978073898409880E0A4CF3998419868 -:100E900080E0A0CF3A98429880E09CCF3C9844985C -:100EA00080E098CF3D98459880E094CF3E98469852 -:100EB00080E090CF3F98479880E08CCF509858982A -:100EC00080E088CF5198599880E084CF53985B9800 -:100ED00080E080CF55985D9880E07CCF56985E98F2 -:100EE00080E078CF57985F983B98439880E072CF26 -:100EF0005098589880E06ECF4631510508F0CFC128 -:100F0000FA01EB57F84F0C942A0C9B079E07A10798 -:100F10004F09A407A707AA07AD07B007B307B6078D -:100F2000B907BC07BF074F094F094F094F094F09C0 -:100F30004F094F09C307389A80E04CCF399A80E0B7 -:100F400049CF3A9A80E046CF3C9A80E043CF3D9A21 -:100F500080E040CF3E9A80E03DCF3F9A80E03ACF9C -:100F6000509A80E037CF519A80E034CF539A80E096 -:100F700031CF559A80E02ECF569A80E02BCF579AEA -:100F80003B9A80E027CF509A80E024CF463151052C -:100F900008F087C1FA01E153F84F0C942A0CE507D9 -:100FA000E807EB075109EE07F107F407F707FA071F -:100FB000FD070008030806080908510951095109ED -:100FC00051095109510951090D08409880E002CF9B -:100FD000419880E0FFCE429880E0FCCE449880E0CB -:100FE000F9CE459880E0F6CE469880E0F3CE47985B -:100FF00080E0F0CE589880E0EDCE599880E0EACEBF -:101000005B9880E0E7CE5D9880E0E4CE5E9880E07B -:10101000E1CE5F98439880E0DDCE589880E0DACE4C -:101020004631510508F03FC1FA01E75EF74F0C94D5 -:101030002A0C2F0832083508530938083B083E08A7 -:101040004108440847084A084D0850085308530906 -:101050005309530953095309530953095708409A2F -:1010600080E0B8CE419A80E0B5CE429A80E0B2CE20 -:10107000449A80E0AFCE459A80E0ACCE469A80E0BC -:10108000A9CE479A80E0A6CE589A80E0A3CE599A7E -:1010900080E0A0CE5B9A80E09DCE5D9A80E09ACE03 -:1010A0005E9A80E097CE5F9A439A80E093CE589AFA -:1010B00080E090CE82E08C934631510508F099C0D3 -:1010C000FA01EB59F74F0C942A0C7B0884088D0821 -:1010D000F90896089F08A808B108BA08C308CC0800 -:1010E000D508DE08E708F908F908F908F908F90849 -:1010F000F908F908F00886B1817011968C93119760 -:1011000012961C9280E066CE86B1827090E01296B4 -:101110009C938E93119780E05DCE86B1847090E0B1 -:1011200012969C938E93119780E054CE86B1807175 -:1011300090E012969C938E93119780E04BCE86B1EF -:10114000807290E012969C938E93119780E042CE2D -:1011500086B1807490E012969C938E93119780E0F4 -:1011600039CE86B1807890E012969C938E93119739 -:1011700080E030CE89B1817011968C9311971296D0 -:101180001C9280E027CE89B1827090E012969C93E9 -:101190008E93119780E01ECE89B1887090E01296F0 -:1011A0009C938E93119780E015CE89B1807290E068 -:1011B00012969C938E93119780E00CCE89B1807427 -:1011C00090E012969C938E93119780E003CE89B1A4 -:1011D000807890E012969C938E93119780E0FACDE0 -:1011E00089B1817011968C93119712961C9280E0B0 -:1011F000F1CD1C928DE8EECD14B88FEF85B980E06B -:10120000E9CD14B88FEF85B980E0E4CD14B880E063 -:10121000E1CD8FEF84B980E0DDCD45B980E0DACD56 -:1012200083B111968C93119781E08C9380E0D2CD9D -:101230003F9A47988FEF81B980E0CCCD8FEF82B98C -:1012400080E0C8CD11B880E0C5CD8FEF81B980E0D6 -:10125000C1CD42B98FEF84B955B90E94980614B830 -:1012600080E0B8CD14B88FEF85B9579A5F983B9A54 -:10127000439880E0AFCD57985F9A3B98439A80E0BF -:10128000A9CD8FEF84B945B90E94870614B880E0D4 -:10129000A1CD8CE89FCD8DE89DCD8DE89BCD8DE8CF -:1012A00099CD8DE897CD8DE895CDCF93DF931F92A3 -:1012B000CDB7DEB7FC018FEF8093090110920A01D0 -:1012C00089E091E090938F0380938E0386818983D8 -:1012D0008181833041F130F4813089F08230D1F066 -:1012E00080E815C0853041F18730D1F7AE014F5FFE -:1012F0005F4F69E071E0CF010E94580625C044812C -:1013000055812AE031E0638182810E94A5068093A5 -:1013100009011EC0448155812AE031E06381828148 -:101320000E94BE04F4CF448155812AE031E06381FC -:1013300082810E94B305EBCFAE014F5F5F4F69E042 -:1013400071E0CF010E94790190938F0380938E0307 -:1013500089810F90DF91CF910895E0916503F0911D -:101360006603278144815581322F360F231312C023 -:10137000E0916503F09166038781860F87838091F2 -:101380003401861B8093340181110DC088E9838369 -:1013900081E00895FC017191CF01FA01E20FF11D86 -:1013A00070832F5FE3CF80E00895CF93DF93609148 -:1013B0009003635067FD91C080918D03CCE0D0E035 -:1013C000C81BD109CC56DC4F80918C038D3209F0BB -:1013D000CFC0683009F07FC083EC809380038AE53A -:1013E00080930501109211018881807679F0CE01F9 -:1013F0000E9455098F3F09F466C09F81911169C011 -:101400009E81981708F065C0892F63C02A811092C9 -:101410008903998191110AC010928A0329E833E067 -:1014200082E030938F0320938E03E7CF953029F429 -:101430002093910329E833E0F4CF963099F59B810E -:10144000913059F48EE890E090938F0380938E034F -:1014500082E190E490931101D0CF923019F48CE79F -:1014600090E0F2CF9330A9F7211108C088EE90E008 -:1014700090938F0380938E0384E0EBCF213041F46F -:101480008EEB90E090938F0380938E038AE2E1CFFE -:101490002230F9F680EA90E090938F0380938E03D8 -:1014A0008EE1D7CF983059F0993019F420939303F7 -:1014B000C1CF81E09A3009F4BDCF80E0BBCF23E9F2 -:1014C00033E081E0AECF988197FD8E8190E89093D4 -:1014D000110180930401109290038091050184FF13 -:1014E0003AC0809104018F3FB1F1C82F893008F0D4 -:1014F000C8E08C1B809304018091800398E88927C1 -:1015000080938003CC23D1F080918E0390918F0340 -:101510002091110126FF3FC0A1E8B3E0FC012C2F70 -:1015200034913D9331962150D9F701962FEF2C0F2E -:10153000820F911D90938F0380938E036C2F81E80F -:1015400093E00E94F00ACC5FCC3019F08FEF8093CB -:101550000401C093050184E199B1947131F4815083 -:10156000D9F71092910310928B03DF91CF910895D8 -:101570008091110187FFAFCFCE010E94AD098F3F4F -:1015800021F48EE180930501A6CF882309F4A3CF2F -:1015900010920401A0CFE1E8F3E0DC012C2F3D9193 -:1015A00031932150E1F7C1CFE9E6F0E0808182601C -:1015B0008083E89A0895A82FB92F80E090E041E059 -:1015C00050EA609530E009C02D9182279795879564 -:1015D00010F084279527305EC8F36F5FA8F3089555 -:1015E000EADF8D939D930895CF93CFB7CF93DF9389 -:1015F000C3954C9BE9F74C9B0BC04C9B09C04C9B83 -:1016000007C04C9B05C04C9B03C04C9B01C089C0CC -:101610006F93C0918D03DD27CC56DC4F2F9365E58A -:101620004C9B03C02F916F91E6CF0F931F934F9365 -:1016300020E040E15F9309B1047104FB27F93F9377 -:1016400050E03BE039C0147140642F77012F5F5F99 -:101650001EC0406819B114712F7752501FC04064EA -:1016600009B12F770471D1F15F5F00C023C04062E0 -:1016700019B12F77147191F15F5F00C025C004711B -:101680001027515012F45D5F0000115027952C3F38 -:1016900019B1C8F614710127015027952C3FC8F6DF -:1016A0004227499309B1047110274F7311502795B0 -:1016B0002C3FA8F64695469519B1147179F001278B -:1016C000015027952C3F98F66B5A60F3315009B1C1 -:1016D000B0F600C011E01CBB002717C03B5031958D -:1016E000C31BD04011E01CBB0881033CF9F00B3454 -:1016F000E9F020918B031981110F1213EDCF0936F8 -:1017000051F10D3211F0013E39F7009392033F91F0 -:101710005F914F911F910F912F916F91CCB3C0FDAD -:1017200067CFDF91CF91CFBFCF91189520919203D2 -:10173000222369F310919003112339F534303AF1E3 -:101740003093900320938C0310918D033BE0311B69 -:1017500030938D031CC0009190030130B4F40AE56E -:101760003091050134FD14C000930501C0E8D3E0B9 -:1017700013C0052710E000C000000BB91AC00527F0 -:1017800010E0221F1DC010E021C04AE502C032ED6A -:10179000432FC4E1D0E032E01AB114615C9A0BB17E -:1017A0001AB954E120E865E320FF05270BB9279516 -:1017B00017951C3FF0F66695B8F7B1F720FF05279F -:1017C0000BB9279517951C3FD0F62795179517FF4E -:1017D000052700001C3F0BB9B0F629913A9519F77F -:1017E0000B7E10919103110FC651D0400BB911F02F -:1017F00010938B0311E01CBB00611AB11B7E402FBC -:101800004B7E54E05A95F1F70BB91AB94BB97FCF1B -:101810009EE088E10FB6F894A895809360000FBE13 -:10182000909360000E94D40A549A80E0815051F451 -:10183000549878940E944604A8950E94D5090E9465 -:10184000A802FACFA895EFE9FFE03197F1F700C0C1 -:101850000000ECCFEE0FFF1F0590F491E02D0994EE -:04186000F894FFCF2A -:0618640065016703FF5A55 +:100680000F93CF93DF93EC01688179818985823163 +:1006900011F130F4803169F08131A1F083EC05C0B3 +:1006A0008331D9F08431D1F780E0DF91CF910F9180 +:1006B000089560680FEF2E814A818C819D810E9490 +:1006C000AE0607C00FEF2E814A818C819D810E946A +:1006D000E5068F83E9CF6066EDCF8FEF84B9CB015C +:1006E000880F892F881F990B919585B95F9A5F981C +:1006F00014B860680FEF2E814A818C819D810E9421 +:10070000720AE7CF7F928F929F92AF92BF92CF9261 +:10071000DF92EF92FF920F931F93CF93DF936A01C3 +:100720005901DA011796CC91D0E0E62EF12CFE2C7F +:10073000EE24D60116968C91169790E08C179D07A3 +:1007400088F41796CC9380E0DF91CF911F910F91A1 +:10075000FF90EF90DF90CF90BF90AF909F908F90E1 +:100760007F9008956AEA85E595E5F501099565E5C7 +:100770008AEA9AE2F501099560EA85E595E5F501D1 +:100780000995CE0199274C018E289F28D6011496F1 +:10079000ED91FC911597E80FF91F6081C401F501F7 +:1007A00009950E94370BC401F8010995782EC40100 +:1007B000F80109957812F5CF2196BBCF7F928F92E1 +:1007C0009F92AF92BF92CF92DF92EF92FF920F93E0 +:1007D0001F93CF93DF936A015901DA011796CC91E9 +:1007E000D0E0E62EF12CFE2CEE24D60116968C914C +:1007F000169790E08C179D0788F41796CC9380E0AD +:10080000DF91CF911F910F91FF90EF90DF90CF90EC +:10081000BF90AF909F908F907F9008956AEA85E592 +:1008200095E1F501099565E58AEA9AE0F5010995F2 +:1008300060EA85E595E1F5010995CE0199274C011E +:100840008E289F28D6011496ED91FC911597E80FFC +:10085000F91F6081C401F50109950E94370BC4019D +:10086000F8010995782EC401F80109957812F5CFA1 +:100870002196BBCF4F925F927F928F929F92AF92C1 +:10088000BF92CF92DF92EF92FF920F931F93CF937D +:10089000DF93A62E6A01E901DA011796EC90F12C9C +:1008A000A89558986AEA8AEA9AE0F901099565E5F7 +:1008B00085E595E0FE01099560E28AEA9AE0FE018D +:1008C0000995B12CBA2CAA24D60116968C911697AC +:1008D00090E08E159F0518F51796EC9260E980E080 +:1008E00090E0FE01099560E080E090E0FE0109954E +:1008F00060EF80E090E0FE010995589A80E0DF917A +:10090000CF911F910F91FF90EF90DF90CF90BF900C +:10091000AF909F908F907F905F904F90089580EA66 +:100920000E94650A2701552442018A289B28D60186 +:100930001496ED91FC911597E40DF51D6081C401AD +:10094000FE010995589AA8950E94370BC401F80139 +:100950000995782E5898D6011496ED91FC9115972B +:10096000E40DF51D8081781639F0589AC401F8011C +:1009700009955898781204C0FFEFEF1AFF0AA4CF28 +:100980000000000000000000000000000000000067 +:100990000000000000000000589AC401F801099509 +:1009A000782EE4CF0F931F93AC01FC01608171811D +:1009B0009185923159F030F4903161F0913199F094 +:1009C00083EC05C09331B9F09431D1F780E01F91E9 +:1009D0000F910895606809EE15E02AED35E080E09A +:1009E0000E948203F3CF01E116E025E236E080E0C9 +:1009F0000E94DE03EBCF8FEF84B9CB01880F892FE4 +:100A0000881F990B919585B95F9A5F9814B86068B3 +:100A100002E21AE023E33AE080E00E943A04D6CFF3 +:100A200014B88FEF85B93F9A479881B911B882B948 +:100A300014B885B914B885B93898409A3998419A4C +:100A40003A98429A3C98449A3D98459A3E98469ADC +:100A500053985B9A55985D9A3B98439A3F98479A6A +:100A600057985F9A509858985198599A08950E94AB +:100A70001005399A419A389A40983A9A429A3C9A83 +:100A8000449A3D9A459A14B88FEF85B914B885B940 +:100A900014B885B93F9A479881B912B884B915B886 +:100AA000479A479814B808950E941005399A419AB8 +:100AB0003C9A449A3D9A459A509A589A14B88FEFA6 +:100AC00085B914B885B914B885B93F9A479881B9E2 +:100AD00012B884B915B8479A479814B814B885B9AC +:100AE000579A5F9884B915B85F9A5F9814B80895BB +:100AF0005898509A000089B15098589880FD22C0AB +:100B00005098589A59B149B1000039B1000000001D +:100B100029B100000000000099B1000000000000B1 +:100B2000000089B15098589850FD0EC040FD0EC08D +:100B300030FD0EC020FD0EC090FD0EC080FD0EC029 +:100B400080EE089580EF089580E0089581E0089593 +:100B500083E0089586E008958AE008958FE008957F +:100B60000F931F93CF93DF931F92CDB7DEB7890109 +:100B7000813089F030F0823091F0803899F086E948 +:100B800004C089830E94100589810F90DF91CF9165 +:100B90001F910F9108950E94370580E0F6CF0E94C3 +:100BA0005405FBCF81E0F90180830E947805F801AC +:100BB0008183F3CF82B98FEF84B995B9479A47986B +:100BC00014B884B965B9509A58985098589A14B87E +:100BD000089582B92FEF24B995B9479A479814B868 +:100BE000409A97FD4198000000000000000083B18A +:100BF0004098419A08955098589882B92FEF24B997 +:100C000095B9479A479814B8429824B965B9409A5B +:100C100097FD4198000000004098419A429A14B80C +:100C20000895811520E2920708F4906882B98FEF49 +:100C300084B995B9479A479814B8449800000000C1 +:100C40000000000083B1449A0895811520E29207C4 +:100C500008F4906882B98FEF84B995B9479A47989C +:100C600014B884B965B9000045980000459A14B8D5 +:100C700008958FEF84B994E095B9479A479814B8CE +:100C800029B1207230E084B988E085B9479A479845 +:100C900014B889B1807290E041E02115310509F066 +:100CA00040E061E0009709F060E0442311F0611139 +:100CB00016C051E0232B09F450E021E0892B09F400 +:100CC00020E0552311F021110CC0662311F05111C1 +:100CD0000AC0442311F0211108C08FEF089580E16C +:100CE000089581E1089582E1089583E108950F93C5 +:100CF0001F93CF93C82FCA018901C23001F130F48C +:100D0000CC2391F0C130B9F0C0EA10C0C238D1F0A4 +:100D1000C338F1F0C138C1F721E0F80120830E9407 +:100D2000E905F801818309C00E94DA058C2FCF9173 +:100D30001F910F9108950E942506C0E0F7CF0E94F1 +:100D4000FB05FBCF21E0F80120830E941106E9CFCB +:100D500081E0F90180830E943906E3CFEF92FF9290 +:100D60000F93CF93DF9300D01F92CDB7DEB77C01F6 +:100D70008FEF84B965B9479A479814B8409A67FDD0 +:100D8000419842B980E0011117C00000000093B102 +:100D9000F701E80FF11D90834F5F42B98F5F28176D +:100DA00090F74098419A0F900F900F90DF91CF915C +:100DB0000F91FF90EF9008952B834A8389830E94BF +:100DC000370B89814A812B81E2CFEF92FF920F93FB +:100DD000CF93DF9300D01F92CDB7DEB77C01603296 +:100DE00008F460688FEF84B965B9479A479814B8DA +:100DF000449842B980E0011116C00000000093B190 +:100E0000F701E80FF11D90834F5F42B98F5F2817FC +:100E100090F7449A0F900F900F90DF91CF910F9120 +:100E2000FF90EF9008952B834A8389830E94370BAC +:100E300089814A812B81E3CFCF93DF93FB01DC01D2 +:100E400012962C91222329F0203479F082ED8083B0 +:100E500008C01082A0910201B0910301EC018C81C5 +:100E60008C93CF01DF91CF910895108281E081832F +:100E7000A0910201B09103018C918283F2CFE091A5 +:100E80000201F091030180830895E0910201F09145 +:100E90000301808108950F931F93D901082F10E05B +:100EA0000831110508F0C2C2F801E75AF84F0C9456 +:100EB0008C0D93077107CE0729087508C1080D0925 +:100EC000B809BD09C209C509C909CC09D409DC0999 +:100ED000E009E309E709F009F709FB09030A0A0A2F +:100EE0000E0A4631510508F0A3C2FA01E658F84F40 +:100EF0000C948C0D900796079A079E07A207A607E9 +:100F0000AA07AE07B207B607BA07BE07C207C607E9 +:100F1000180A180A180A180A180A180A180ACA0712 +:100F20003898409A80E01F910F9108953998419A1E +:100F300080E0F9CF3A98429A80E0F5CF3B98439A07 +:100F400080E0F1CF3C98449A80E0EDCF3D98459AFF +:100F500080E0E9CF3E98469A80E0E5CF3F98479AF7 +:100F600080E0E1CF5098589A80E0DDCF5198599AAF +:100F700080E0D9CF53985B9A80E0D5CF55985D9AA1 +:100F800080E0D1CF56985E9A80E0CDCF57985F9A97 +:100F900080E0C9CF5098589A80E0C5CF46315105BE +:100FA00008F048C2FA01E952F84F0C948C0DED0795 +:100FB000F107F507F907FD070108050809080D08FD +:100FC0001108150819081D0821081A0A1A0A1A0A10 +:100FD0001A0A1A0A1A0A1A0A25083898409880E04C +:100FE000A2CF3998419880E09ECF3A98429880E00D +:100FF0009ACF3B98439880E096CF3C98449880E005 +:1010000092CF3D98459880E08ECF3E98469880E0FC +:101010008ACF3F98479880E086CF5098589880E0D4 +:1010200082CF5198599880E07ECF53985B9880E0AA +:101030007ACF55985D9880E076CF56985E9880E09C +:1010400072CF57985F9880E06ECF5098589880E0A4 +:101050006ACF4631510508F0EFC1FA01EE5CF74F57 +:101060000C948C0D48084B084E085108540857083A +:101070005A085D0860086308660869086C086F080C +:101080001C0A1C0A1C0A1C0A1C0A1C0A1C0A7208DC +:10109000389A80E048CF399A80E045CF3A9A80E08C +:1010A00042CF3B9A80E03FCF3C9A80E03CCF3D9AD4 +:1010B00080E039CF3E9A80E036CF3F9A80E033CF50 +:1010C000509A80E030CF519A80E02DCF539A80E043 +:1010D0002ACF559A80E027CF569A80E024CF579A9E +:1010E00080E021CF509A80E01ECF4631510508F0B4 +:1010F000A5C1FA01E258F74F0C948C0D940897089B +:101100009A089D08A008A308A608A908AC08AF087B +:10111000B208B508B808BB081E0A1E0A1E0A1E0A35 +:101120001E0A1E0A1E0ABE08409880E0FCCE4198A6 +:1011300080E0F9CE429880E0F6CE439880E0F3CE8E +:10114000449880E0F0CE459880E0EDCE469880E06F +:10115000EACE479880E0E7CE589880E0E4CE5998F0 +:1011600080E0E1CE5B9880E0DECE5D9880E0DBCE73 +:101170005E9880E0D8CE5F9880E0D5CE589880E029 +:10118000D2CE4631510508F05BC1FA01E653F74F64 +:101190000C948C0DE008E308E608E908EC08EF0879 +:1011A000F208F508F808FB08FE0801090409070918 +:1011B000200A200A200A200A200A200A200A0A09F6 +:1011C000409A80E0B0CE419A80E0ADCE429A80E075 +:1011D000AACE439A80E0A7CE449A80E0A4CE459A56 +:1011E00080E0A1CE469A80E09ECE479A80E09BCEDA +:1011F000589A80E098CE599A80E095CE5B9A80E02C +:1012000092CE5D9A80E08FCE5E9A80E08CCE5F9A1F +:1012100080E089CE589A80E086CE82E08C93463179 +:10122000510508F0A2C0FA01E85EF64F0C948C0D4F +:101230002E0937094009490952095B0964096D09FA +:1012400076097F09880991099A09A309B509B509A1 +:10125000B509B509B509B509B509AC0986B18170FB +:1012600011968C93119712961C9280E05CCE86B1F9 +:10127000827090E012969C938E93119780E053CEEB +:1012800086B1847090E012969C938E93119780E0C3 +:101290004ACE86B1887090E012969C938E931197F7 +:1012A00080E041CE86B1807190E012969C938E933F +:1012B000119780E038CE86B1807290E012969C93B0 +:1012C0008E93119780E02FCE86B1807490E01296B5 +:1012D0009C938E93119780E026CE86B1807890E023 +:1012E00012969C938E93119780E01DCE89B18170E8 +:1012F00011968C93119712961C9280E014CE89B1AE +:10130000827090E012969C938E93119780E00BCEA2 +:1013100089B1887090E012969C938E93119780E02B +:1013200002CE89B1807290E012969C938E931197B1 +:1013300080E0F9CD89B1807490E012969C938E93F1 +:10134000119780E0F0CD89B1807890E012969C935F +:101350008E93119780E0E7CD89B1817011968C93BF +:10136000119712961C9280E0DECD1C928DE8DBCDA9 +:1013700014B88FEF85B980E0D6CD14B88FEF85B95A +:1013800080E0D1CD14B880E0CECD8FEF84B980E07D +:10139000CACD45B980E0C7CD83B111968C93119722 +:1013A00081E08C9380E0BFCD14B88FEF85B93F9A70 +:1013B000479881B980E0B7CD8FEF82B980E0B3CD97 +:1013C00011B880E0B0CD8FEF81B980E0ACCD42B9EB +:1013D0008FEF84B955B9479A479814B880E0A3CDE8 +:1013E00014B88FEF85B9579A5F9880E09CCD5798D5 +:1013F0005F9A80E098CD8FEF84B945B95F9A5F9886 +:1014000014B880E090CD14B88FEF85B9579A5F98E3 +:1014100080E089CD57985F9A80E085CD8FEF84B9C1 +:1014200045B95F9A5F9814B880E07DCD8CE87BCD9C +:101430008DE879CD8DE877CD8DE875CD8DE873CDCC +:101440008DE871CD82B98FEF84B995B9479A4798E5 +:1014500014B841984498000000000000000083B1D7 +:10146000449A419A089582B98FEF84B995B9479A01 +:10147000479814B884B965B94598419800000000B0 +:1014800000000000459A419A14B80895CF93DF9365 +:10149000952FE901813099F020F0823059F08AEAE5 +:1014A00006C09FEF94B945B95F9A5F9814B8DF9171 +:1014B000CF910895842F0E94330A80E0F8CF88836B +:1014C000842F0E94220A8983F8CF9FEF94B985B9AF +:1014D000459841980000000000000000459A419A9C +:1014E00014B80895EF92FF920F93CF93DF9300D03B +:1014F0001F92CDB7DEB77C018FEF84B965B9479AEB +:10150000479814B84498419842B980E0011119C035 +:10151000000000000000000093B1F701E80FF11D8A +:1015200090834F5F42B98F5F281780F7449A419AA2 +:101530000F900F900F90DF91CF910F91FF90EF9050 +:1015400008952B834A8389830E94370B0000000093 +:10155000000089814A812B81DFCFCF93DF931F92D7 +:10156000CDB7DEB7FC018FEF809307011092080121 +:1015700087E091E090938D0380938C03868189832B +:101580008181833049F130F4813091F08230D9F09B +:1015900080E816C0853091F140F18730C9F7AE017F +:1015A0004F5F5F4F67E071E0CF010E941C072EC0C4 +:1015B0004481558128E031E0638182810E944B079C +:1015C0008093070127C04481558128E031E0638181 +:1015D00082810E94B005F4CF4481558128E031E03A +:1015E000638182810E947706EBCF4481558128E098 +:1015F00031E0638182810E94460AE2CFAE014F5FF3 +:101600005F4F67E071E0CF010E94790190938D03F5 +:1016100080938C0389810F90DF91CF910895E091A1 +:101620006303F0916403278144815581322F360F83 +:10163000231312C0E0916303F09164038781860F46 +:10164000878380913201861B8093320181110DC006 +:1016500088E9838381E00895FC017191CF01FA014B +:10166000E20FF11D70832F5FE3CF80E00895CF93E9 +:10167000DF9360918E03635067FD91C080918B036F +:10168000CCE0D0E0C81BD109CE56DC4F80918A0354 +:101690008D3209F0CFC0683009F07FC083EC8093B1 +:1016A0007E038AE58093050110920F018881807680 +:1016B00079F0CE010E94AD0A8F3F09F466C09F8188 +:1016C000911169C09E81981708F065C0892F63C089 +:1016D0002A8110928703998191110AC01092880380 +:1016E00027E833E082E030938D0320938C03E7CF2B +:1016F000953029F420938F0327E833E0F4CF963018 +:1017000099F59B81913059F48EE890E090938D0388 +:1017100080938C0382E190E490930F01D0CF9230BC +:1017200019F48CE790E0F2CF9330A9F7211108C0AB +:1017300088EE90E090938D0380938C0384E0EBCF50 +:10174000213041F48EEB90E090938D0380938C03D5 +:101750008AE2E1CF2230F9F680EA90E090938D039F +:1017600080938C038EE1D7CF983059F0993019F4DB +:1017700020939103C1CF81E09A3009F4BDCF80E07E +:10178000BBCF21E933E081E0AECF988197FD8E8118 +:1017900090E890930F018093040110928E03809142 +:1017A000050184FF3AC0809104018F3FB1F1C82F39 +:1017B000893008F0C8E08C1B8093040180917E037F +:1017C00098E8892780937E03CC23D1F080918C0305 +:1017D00090918D0320910F0126FF3FC0AFE7B3E04A +:1017E000FC012C2F34913D9331962150D9F701966D +:1017F0002FEF2C0F820F911D90938D0380938C03FC +:101800006C2F8FE793E00E94520CCC5FCC3019F024 +:101810008FEF80930401C093050184E199B1947125 +:1018200031F48150D9F710928F0310928903DF9120 +:10183000CF91089580910F0187FFAFCFCE010E9415 +:101840000F0B8F3F21F48EE180930501A6CF8823F3 +:1018500009F4A3CF10920401A0CFEFE7F3E0DC017D +:101860002C2F3D9131932150E1F7C1CFE9E6F0E013 +:10187000808182608083E89A0895A82FB92F80E044 +:1018800090E041E050EA609530E009C02D91822758 +:101890009795879510F084279527305EC8F36F5F82 +:1018A000A8F30895EADF8D939D930895CF93CFB762 +:1018B000CF93DF93C3954C9BE9F74C9B0BC04C9B9C +:1018C00009C04C9B07C04C9B05C04C9B03C04C9B64 +:1018D00001C089C06F93C0918B03DD27CE56DC4FCA +:1018E0002F9365E54C9B03C02F916F91E6CF0F932B +:1018F0001F934F9320E040E15F9309B1047104FB13 +:1019000027F93F9350E03BE039C0147140642F77D2 +:10191000012F5F5F1EC0406819B114712F775250BC +:101920001FC0406409B12F770471D1F15F5F00C01F +:1019300023C0406219B12F77147191F15F5F00C02D +:1019400025C004711027515012F45D5F0000115042 +:1019500027952C3F19B1C8F614710127015027951E +:101960002C3FC8F64227499309B1047110274F73E1 +:10197000115027952C3FA8F64695469519B114713C +:1019800079F00127015027952C3F98F66B5A60F3A8 +:10199000315009B1B0F600C011E01CBB002717C0E0 +:1019A0003B503195C31BD04011E01CBB0881033C68 +:1019B000F9F00B34E9F0209189031981110F12130A +:1019C000EDCF093651F10D3211F0013E39F7009398 +:1019D00090033F915F914F911F910F912F916F91C4 +:1019E000CCB3C0FD67CFDF91CF91CFBFCF9118951A +:1019F00020919003222369F310918E03112339F56E +:101A000034303AF130938E0320938A0310918B0384 +:101A10003BE0311B30938B031CC000918E030130DF +:101A2000B4F40AE53091050134FD14C000930501BA +:101A3000CEE7D3E013C0052710E000C000000BB9CB +:101A40001AC0052710E0221F1DC010E021C04AE582 +:101A500002C032ED432FC4E1D0E032E01AB114618C +:101A60005C9A0BB11AB954E120E865E320FF052721 +:101A70000BB9279517951C3FF0F66695B8F7B1F7A7 +:101A800020FF05270BB9279517951C3FD0F6279502 +:101A9000179517FF052700001C3F0BB9B0F62991D9 +:101AA0003A9519F70B7E10918F03110FC651D04054 +:101AB0000BB911F01093890311E01CBB00611AB13E +:101AC0001B7E402F4B7E54E05A95F1F70BB91AB9A3 +:101AD0004BB97FCF9EE088E10FB6F894A89580932C +:101AE00060000FBE909360000E94360C549A80E014 +:101AF000815051F4549878940E941005A8950E9442 +:101B0000370B0E94A802FACFA895EFE9FFE03197C2 +:101B1000F1F700C00000ECCFEE0FFF1F0590F4912D +:081B2000E02D0994F894FFCFB9 +:061B280063016503FF5A92 :00000001FF diff --git a/firmware/build_stm/inlretro_stm.bin b/firmware/build_stm/inlretro_stm.bin index 21ace2f..04864f9 100644 Binary files a/firmware/build_stm/inlretro_stm.bin and b/firmware/build_stm/inlretro_stm.bin differ diff --git a/firmware/build_stm/inlretro_stm.elf b/firmware/build_stm/inlretro_stm.elf index 7f3af3e..edbdb0a 100644 Binary files a/firmware/build_stm/inlretro_stm.elf and b/firmware/build_stm/inlretro_stm.elf differ diff --git a/firmware/build_stm/inlretro_stm.hex b/firmware/build_stm/inlretro_stm.hex index fa8fb78..cc0682a 100644 --- a/firmware/build_stm/inlretro_stm.hex +++ b/firmware/build_stm/inlretro_stm.hex @@ -1,5 +1,5 @@ :020000040800F2 -:1000000000180020C1000008FD00000801170008CA +:1000000000180020C1000008FD000008D1180008F9 :1000100000000000000000000000000000000000E0 :10002000000000000000000000000000FD000008CB :100030000000000000000000FD000008FD000008B6 @@ -13,475 +13,517 @@ :1000B000FD000008FD000008FD0000080101000827 :1000C00009490A4A0A4B9B1A03DD043BC858D05021 :1000D000FBDC0849084A0020521A02DD043A885025 -:1000E000FCDC01F0DFFB0000381E000800000020EF +:1000E000FCDC01F09BFC0000D82000080000002090 :1000F0000000002000000020AC020020FEE7C04607 -:10010000F0B5C64A87B0138801921BB2002B01DB01 -:1001100001F0F9F81388C24A1A4080231343019A68 -:100120001380019B1A8880231B011340BD4A01D113 -:1001300001F0B7F8BC49BD4D0B68BD4801330B60F9 -:100140002B787F211C008C43BA49BB4E0C70E98888 -:10015000018000203080602633401370B74A14704D -:10016000834201D100F042FDFF23B54CCAB2237097 -:10017000B44B60701C60029268780138062801D97F -:1001800001F01FF801F0EEFD0700200509061D082B -:10019000E4061D080808A878AA888C2314281FD80C -:1001A0008023DB0001F0DEFD15001F00F000DC0104 -:1001B0007402F8026E03FE030F041B0423042B04D5 -:1001C00034043D045804670475048404AB04CA0471 -:1001D000D604E0239C4A1B0351690B43536100235F -:1001E000237000F0FFFC152A01D900F0C9FC1000B3 -:1001F00001F0B8FD160021002E003B00480055001C -:100200005F006C00760081008D009A00C604A70094 -:10021000C604C604C604C604B200C604C604BF00B1 -:1002200090214023C9050A689A430A60CA681343AB -:10023000CB600023D4E79022D205136883490B409A -:1002400013608023D1685B000B43D3600023C7E7B2 -:100250009022D20513687E490B4013608023D16839 -:10026000DB000B43D3600023BAE79022D20513686A -:1002700078490B4013608023D1685B010B43D36046 -:100280000023ADE79022D205136873490B40136039 -:100290008023D168DB010B43D3600023A0E7012357 -:1002A0006E490A689A430A60CA681343CB60002308 -:1002B00096E79022D205136869490B4013608023AA -:1002C000D1685B030B43D360002389E704236349B0 -:1002D0000A689A430A60CA681343CB6000237FE729 -:1002E00090210123C9050A689A430A60CA6813432A -:1002F000CB60002374E75B4A5B4913680B401360D3 -:100300008023D168DB040B43D360002368E790228D -:10031000D205136855490B4013608023D168DB0573 -:100320000B43D36000235BE79022D20513684E494C -:100330000B4013608023D168DB040B43D3600023A0 -:100340004EE790211023C9050A689A430A60CA68DB -:100350001343CB60002343E79022D205136844493E -:100360000B4013608023D1685B050B43D3600023EF -:1003700036E790210123C9050A689A430A60CA68D2 -:100380001343CB6000232BE7152A01D900F010FCA2 -:10039000100001F0E7FC160021002C0037006F0070 -:1003A0007A0084008F009900A400AE00B9000D040B -:1003B000C4000D040D040D040D04CF000D040D0444 -:1003C000DA0090234021DB051A688A431A60DA6854 -:1003D0008A43DA60002303E79023DB0519681B4892 -:1003E00001401960DA680240DA600023F8E69023E1 -:1003F000DB051968164801401960DA680240DA60C6 -:100400000023EDE69023DB051968124801401960CE -:10041000DA680240DA600023E2E6C046005C004091 -:100420008F0F00009A0200205C000020486000400E -:10043000620000209802002066000020990200203F -:100440009C020020A402002000100240FFFEFFFFDB -:10045000FFFBFFFFFFEFFFFFFFBFFFFF00040048B0 -:10046000FFFFEFFF00080048FFFFFFFBFFFFFFBF9C -:10047000FFFFFFEF9023DB051968C04801401960BA -:10048000DA680240DA600023AAE60121BC4B1A6850 -:100490008A431A60DA688A43DA600023A0E6902370 -:1004A000DB051968B74801401960DA680240DA6074 -:1004B000002395E60421B24B1A688A431A60DA6871 -:1004C0008A43DA6000238BE690230121DB051A685A -:1004D0008A431A60DA688A43DA60002380E6AA4B0E -:1004E000AA48196801401960DA680240DA600023FE -:1004F00076E69023DB051968A54801401960DA68A3 -:100500000240DA6000236BE69023DB0519689F4800 -:1005100001401960DA680240DA60002360E6902347 -:100520001021DB051A688A431A60DA688A43DA60A8 -:10053000002355E69023DB051968964801401960B1 -:10054000DA680240DA6000234AE690230121DB05E5 -:100550001A688A431A60DA688A43DA6000233FE641 -:10056000152A00D927E3100001F0FCFB16001E003D -:1005700027002E00370040004700500057005F0062 -:100580006700700025037900250325032503250353 -:100590008100250325038A0090224023D20511689B -:1005A0000B43136000231BE690228023D2051168C1 -:1005B0005B000B431360002312E69021C9050A6813 -:1005C00013430B6000230BE690228023D2051168B1 -:1005D0005B010B431360002302E690228023D205C7 -:1005E0001168DB010B4313600023F9E50123644A22 -:1005F00011680B4313600023F2E590228023D2059B -:1006000011685B030B4313600023E9E504235C4A94 -:1006100011680B4313600023E2E590220123D20509 -:1006200011680B4313600023DAE58023564ADB048C -:1006300011680B4313600023D2E590228023D2057A -:100640001168DB050B4313600023C9E5902280236A -:10065000D2051168DB040B4313600023C0E5902230 -:100660001023D20511680B4313600023B8E59022D4 -:100670008023D20511685B050B4313600023AFE5AF -:1006800090220123D20511680B4313600023A7E5D4 -:10069000152A00D992E2100001F064FB16001C003C -:1006A000220028002E00340039003E00430049009B -:1006B0004F00560090025D0090029002900290025E -:1006C0006300900290026A0090230822DB059A6280 -:1006D000002385E590231022DB059A6200237FE545 -:1006E00090232022DB059A62002379E590234022A3 -:1006F000DB059A62002373E590238022DB059A6272 -:1007000000236DE501221E4B9A62002368E59022CA -:10071000D2059362002363E50222194B9A620023FB -:100720005EE590230122DB059A62002358E58022D2 -:10073000154B92019A62002352E580229023120207 -:10074000DB059A6200234BE5802290239201DB05B2 -:100750009A62002344E590230422DB059A62002379 -:100760003EE580229023D201DB059A62002337E523 -:1007700090230122DB059A62002331E5FFBFFFFFD2 -:1007800000040048FFFFEFFF00080048FFFFFFFBE9 -:10079000FFFFFFBFFFFFFFEF152A00D911E2100096 -:1007A00001F0E0FA16001C00220028002E003400A0 -:1007B00039003E00430049004F0056000F025D0023 -:1007C0000F020F020F020F0263000F020F026A00F6 -:1007D00090230822DB059A61002301E59023102273 -:1007E000DB059A610023FBE490232022DB059A615C -:1007F0000023F5E490234022DB059A610023EFE417 -:1008000090238022DB059A610023E9E40122DE4B7C -:100810009A610023E4E49022D20593610023DFE48F -:100820000222D94B9A610023DAE490230122DB05EE -:100830009A610023D4E48022D44B92019A61002370 -:10084000CEE4802290231202DB059A610023C7E4E4 -:10085000802290239201DB059A610023C0E490235B -:100860000422DB059A610023BAE480229023D2019E -:10087000DB059A610023B3E490230122DB059A6132 -:100880000023ADE402236370152A00D986E010002E -:1008900001F05EFA0B131B232B333A434A525A6280 -:1008A000846B848484847384847C90230822DB0595 -:1008B0001B6913406380002392E490231022DB0520 -:1008C0001B691340638000238AE490232022DB0508 -:1008D0001B6913406380002382E490234022DB05E0 -:1008E0001B691340638000237AE490238022DB0598 -:1008F0001B6913406380002372E40122A24B1B6931 -:100900001340638000236BE490238022DB051B6986 -:10091000D20013406380002362E402229A4B1B69D9 -:100920001340638000235BE490230122DB051B69F5 -:1009300013406380002353E48022944B92011B698F -:100940001340638000234BE49023DB051B69DB0B22 -:10095000DB036380002343E490238022DB051B69D3 -:1009600092011340638000233AE490230422DB05C4 -:100970001B6913406380002332E490238022DB054F -:100980001B69D20113406380002329E490230122D4 -:10099000DB051B6913406380002321E4002363709F -:1009A0008D331DE480237A4ADB0251690B43536186 -:1009B000754A784913680B401360D168764B0B4336 -:1009C000D36000230CE4704A724913680B40136033 -:1009D000D168714B0B43D3600023FFF701FC6A4AD7 -:1009E0006C4913680B4013600023FFF7F9FB664A5C -:1009F000694B11680B4313600023FFF7F1FB624959 -:100A000012024B69DBB21A434A610023FFF7E8FB8D -:100A10005D4B1B691B0AA370012363700023FFF762 -:100A2000DFFBC0235A4ADB0251690B4353610422A6 -:100A3000554B19680A431A60022290219A62A0223B -:100A4000C9050868D20202430A601968534A0A437A -:100A50001A600023FFF7C4FB9022A023D205D168BF -:100A6000DB020B43D360484A4C4BD1680B43D36045 -:100A70000023FFF7B5FB9022D205136848490B40CD -:100A80001360414A474913680B4013600023FFF786 -:100A9000A7FB9022A023D2051168DB020B43136051 -:100AA000394A3E4B11680B4313600023FFF798FB54 -:100AB0009021C90548693C4B96000340C020800046 -:100AC000304003434B61304B38495869120A0140AA -:100AD000FF2006400E435E611E682F49120231431B -:100AE0001960596901400A435A6102229A619A6267 -:100AF0001A6828490A401A600023FFF771FB802218 -:100B0000234BD202596923480A435A611E4A11688D -:100B100001401160D06820490143D160E022596949 -:100B200012030A435A6190231022DB0519680A4315 -:100B30001A6004229A620023FFF752FB90211023CF -:100B4000C9050A689A430A60CA681343CB60002348 -:100B5000FFF746FB0C4B104918681202014319605D -:100B60005969C9B20A435A6190220421D2059161A0 -:100B700091621A6807490A401A600023FFF730FBA8 -:100B80008D23FFF72DFBC0460004004800080048F5 -:100B900000100240FFFFAAAA000055555055000062 -:100BA000FFFFFAFFAFAAFFFFFFFC000003FF0000FA -:100BB0008D23FFF715FB8D23FFF712FB8D23FFF726 -:100BC0000FFB8D23FFF70CFBAE78012E39D0002EE2 -:100BD00004D0802E00D194E0962601E000F092FD32 -:100BE000CF4B1E706A46CF4B12891A802B78602239 -:100BF00059B2002900DB25E3134013D16A78062A95 -:100C00000CD16A88110A022900D1DDE2032900D142 -:100C1000DFE2C54A012900D1D7E203936A46C14BFE -:100C200092891A80019B1A88C04B1343C04A1A400C -:100C3000C0239B015340019A9BB2138000F002FD38 -:100C400021E300F05FFD90228023D20511685B0054 -:100C50000B43136010239361116830330B4313600F -:100C60000823936280231168DB000B431360202369 -:100C7000936180231168DB010B4313608023936130 -:100C8000AC4BAD4819683143196080219E614469BD -:100C9000C902214341611968A84C21401960DE68EE -:100CA000A7490E43DE601E6826401E60DE680E43C4 -:100CB000DE60C0264769F6023E43466104201E6896 -:100CC000304318600220A02698621768F6023E435F -:100CD00016601F689B4E3E431E6056699A4F3E4009 -:100CE00056615A69994E32405A611A681143196027 -:100CF0005A69D2B25A61986198621A6814401C60AD -:100D00006BE090230122DB0562709A62196811433F -:100D10001960C04618691968104091431960D96874 -:100D20009143D960F021002834D1196891431960AA -:100D3000D9681143D9601F6919690491C0461969BE -:100D40000591C046C04619698C46C046C046C0469B -:100D50001E69C046C046C046C0461C69196891431A -:100D60001960D9689143D9600100174212D1049BE0 -:100D7000110013420ED1059B023113400AD1634684 -:100D80000331134206D10431164203D10531144216 -:100D900000D1D131624B99701FE0EB780493AE78AB -:100DA000A888022E1BD005D8002E0FD0012E11D0FE -:100DB000A02615E7822E5BD0832E5ED0812EF7D140 -:100DC0000123637000F08AFBA07006E0049900F034 -:100DD000C9FB05E7049900F0F7FA002600E7902226 -:100DE0000121D205136887008B431360D3688B43BE -:100DF000D3605169544B0B40C021890039400B43EB -:100E000053614C4B51495C690C40FF210F40274313 -:100E10005F611C684A4F3C431C605C69A446040A3D -:100E20002402270064460C4027435F619E619E6256 -:100E30001E68424C424F26401E60202696621E6865 -:100E400000B237431F605E693140049E3602314371 -:100E5000596108219161002801DA49189162C04660 -:100E6000C04608219162491891611031916144E7AF -:100E70000123637000F0F0FAA6E7012363702D4BA5 -:100E80002F491A68FF270A431A6080225969D20045 -:100E900039400A4302215A61996199621A68274EC2 -:100EA000274C32401A609022D2051269186892B21B -:100EB0002043186058691400074080200001074350 -:100EC0005F6199619962196880200E401E609023CD -:100ED000DB051B6980019BB21C431021044200D139 -:100EE00058E70240034014001800611E8C41411E67 -:100EF0008841E4B2C0B2002C03D01121002800D0F8 -:100F000048E7002B03D11221002C00D042E7002A31 -:100F100003D11321002800D03CE7FF213AE7C04667 -:100F20009C02002064000020921D00088081FFFFC9 -:100F30008FBFFFFF0004004800100240FFFFAAAA75 -:100F40000000555550550000FFFC000003FF000055 -:100F5000AA781300303B2F2B18D8E878032800D943 -:100F6000CCE000F0F5FE13020F11A54B512A76D00C -:100F700024D8312A53D00BD8002A33D0302A49D074 -:100F8000B42345E09F4BF1E79F4BEFE79F4BEDE725 -:100F9000332A4ED048D3502AF2D100222270063292 -:100FA00062701A7AA270DA78E2705A7A22719A7AAA -:100FB00062719A78A2715B7CE37145E07F2A00D967 -:100FC00082E0702A5BD2602A36D0612A3FD0522A52 -:100FD000D6D100221B882270A37002321B0A6270D5 -:100FE000E37031E0FF238A4953540132102AFBD1C8 -:100FF000834A8649D3709370834ACB70D3709370C1 -:1010000001228B707F49CB708B70824B1A7000234A -:10101000237019E0AA88110AD9721A73F7E7AA880F -:10102000110A59739A73F2E7AA88110AD9731A74CC -:10103000EDE7AA885A74EAE700232370013363704E -:10104000AB88734AD35CA370734B1C60CAE5002362 -:10105000237001336370714B1B68DB78F3E7002268 -:10106000227006326270DA7AA2701A7BE2705A7BC2 -:1010700022719A7B6271DA7BA2711B7C9CE7634BC5 -:1010800066495C682B787F2B00D959E16846644B30 -:10109000007A18700868C378002B0ED000200290E8 -:1010A000982B05D154E100200290D02B00D14FE1C4 -:1010B000584B10301870FF2304E05A4B18609023EF -:1010C000C3706F33029343E107201040032815D803 -:1010D00000F03EFE16021812494B802AB4D3872A2C -:1010E00012D97032D2B2072AAED800222270EA7822 -:1010F0009A72AA881A80A7E7434BEEE7B52387E7E1 -:10110000424BEAE73F4BE8E7AA8804926A46E9784F -:10111000167CBE228F19102F33DC0432002930D008 -:10112000DF78033AFF2F2CD19F780132FF2F28D18F -:10113000374F0022BC46D7B2B94224D8049A4F0197 -:10114000120A04926A46013F127C1F72770138002E -:101150009A700022344FDA703F185A729A721A80CD -:10116000DA721A735A739A73DA731A745A745F6064 -:1011700066446B461B7CB3540132D3B29942F8D813 -:101180000022227060E760460132B718013FC75D58 -:10119000FF2FD0D0C122F4E7AA78002A04D0402A39 -:1011A00007D0D222227050E72270A988194A117004 -:1011B0004BE70022227001326270164A1278A27048 -:1011C00043E78023FFF70CF8184A134B1A601223E9 -:1011D00023E5D2B2012A0ED0002A07D0022A00D07D -:1011E0001BE50D4B124A1A60124B16E50A4B124AC8 -:1011F0001A60042311E5084B104A1A60104B0CE5E5 -:1012000014000020280000203C00002000000020E6 -:101210008800002068000020A40200205000002068 -:10122000580000205400002098000020801D000875 -:10123000FC1D00081E030000A41D0008A81D0008D6 -:101240002A030000134208D16B78052B05D16B8867 -:101250004B4A13704B4ADBB21380019B4A4A1B88EE -:1012600001991340494A13439BB20B800021484B1C -:101270001980019B1B881A43464B1A40464B5A4023 -:10128000019B92B21A80454BDA8F520507D5802117 -:10129000434A11800022DA87424B019A138007B03B -:1012A000F0BD1278402AEED13F4A1278002AEAD1E6 -:1012B0003E4A11883E4AC9B21268557A5668D8B279 -:1012C0002C18E4B2814218D8537A3A48CB1853729A -:1012D00003785B1ADBB20370002B01D19833D37013 -:1012E000019B1A88294B1343334A1A40C0239B01A0 -:1012F0005340019A9BB21380C5E730481818007814 -:1013000001333055DBE7019B1B881B06BBD5019BD6 -:101310002B4A1B881340802212021343019A138028 -:10132000284B1B78802B00D188E4154A1378002BBA -:10133000A9D080210B431A490B8000231370A2E728 -:101340000868C378D82B00D0ADE680234468C3700A -:101350000B6800215972DB78902B00D074E6712A5B -:1013600000D071E6124BAA881B6859680A70AA88D7 -:101370005968120A4A705A7A02325A7264E6C046B2 -:1013800060000020506000408F8EFFFF8080FFFFD4 -:1013900002600040BFBFFFFF30300000065C00402D -:1013A0004C5C0040203200009902002006600040A2 -:1013B00054000020580000208FBFFFFF486000400D -:1013C0000F8FFFFF980200201D4B30B5984202D8C6 -:1013D00080231B0218439025ED056B69194C820090 -:1013E0002340C024A400144023436B61164B174DC7 -:1013F0005C69000A2C40FF252A4014435C611C688C -:10140000134A000214431C605C6909022C4020430B -:1014100058610220986198621C680E4804401C6064 -:101420001C6822431A605A692A4011435961C04618 -:1014300001229A62C0469A611A6802401A6030BD61 -:10144000FF1F0000FFFC00000004004803FF000035 -:1014500000005555FFFFAAAA1A4B30B5984202D892 -:1014600080231B0218439021C9054B69164A84004A -:101470001340C0229200224013434B61134B144D82 -:101480005A69000A2A40FF252C4022435A611C68F1 -:10149000104A000222431A605A691540022228436A -:1014A00058619A619A621A680B4802401A60802259 -:1014B0008A62C046C046C046C0461869000AC0B22B -:1014C0008A6130BDFF1F0000FFFC000000040048DF -:1014D00003FF000000005555FFFFAAAA70B5902435 -:1014E000E40563691A4AFF261340C0228500920072 -:1014F0002A4013436361174B174A5969354011401D -:10150000294359611968154A0A431A605969020A40 -:101510000E40120232435A6102229A619A621A689C -:101520000F4900B20A401A600822A261002801DABD -:101530009218A262C046C046C046C04618699023B1 -:101540000822DB059A62000A9218C0B29A6170BD47 -:10155000FFFC00000004004803FF00000000555598 -:10156000FFFFAAAA9022D205536970B51B4C8600D2 -:101570002340C024A400344023435361184B194D29 -:101580005C69000A2C40FF252E4034435C611E68D4 -:10159000154C000226431E605E6909022E4030434E -:1015A00058610220986198621E68104806401E60CB -:1015B0001E6834431C605C69254029435961012140 -:1015C00014680C431460916214688C431460D468EE -:1015D0002143D1601A681040186070BDFFFC000004 -:1015E0000004004803FF000000005555FFFFAAAAB1 -:1015F000022907D10F4B104A984218D0904209D1C6 -:10160000180007E0032906D10A4B0B490B4A984200 -:101610000BD1080070470429FCD1064B064A9842BA -:1016200005D006499042F4D0054A8842E6D1100020 -:10163000F0E7C04600000020140000202800002031 -:101640003C000020224B10B51968224B224C1A880E -:1016500052085200505A214A10801A88023292B21F -:101660001A8052085200505A1D4A10801A880232BD -:1016700092B21A8052085200505A1A4A10801A88A0 -:101680001948023292B21A8052085200515A174A2F -:1016900011801A882188023292B21A808A4210D9A7 -:1016A00008318A1A92B2028022881A801049114B9E -:1016B0000A881343104A1A40302353409BB20B80D0 -:1016C00010BD0E4C21888A42EAD808230380EDE73A -:1016D000A40200206600002064000020406000405A -:1016E00042600040446000400260004046600040AC -:1016F000005C00408080FFFFBF8FFFFF6200002082 -:10170000FEE70000BC235749DB038A6AF0B51343A8 -:101710008B628B6A544A042013408B62C0234A694F -:10172000DB021343514A4B611368A0250343136046 -:10173000022393629023DB051C68ED022C431C609E -:1017400016684B4C4B4F264316601E683E401E6089 -:101750001668494F3E401660DE68484F3543DD60ED -:10176000D5682C43D46080244D69E4022C434C613D -:1017700014683C401460D668414C2643D660156816 -:101780003D401560D5683F4F2C43D460E0244D693F -:1017900024032C434C6140211C683B4D8C431C604E -:1017A000DC682143D9601968384C214019608021D8 -:1017B000DC6849002143D9601968354C2140196023 -:1017C0008021DC68C9002143D9601968314C21406F -:1017D00019608021DC68C90121430124D9601168A6 -:1017E000A1431160D1682143D16019682940196073 -:1017F0008021DD6849032943D9601968264D2940B5 -:1018000019608021DD68C9052943D9601968234D15 -:10181000294019608021DE68C9040E43DE601E681D -:101820003E401E608026DF6876013E43DE6016681B -:1018300086431660D6683043D06010221868904303 -:101840001860D8680243DA601A68A2431A60DA683E -:10185000A243DA60124B1A6815401D60DA68114322 -:10186000D960F0BD00100240FFFFA1FF0004004856 -:1018700050550000FFFFFAFFAFAAFFFFFFFFAAAA23 -:1018800000005555FFEFFFFFFFFFEFFFFFFEFFFFDB -:10189000FFFBFFFFFFBFFFFFFFFFFFBFFFFFFFFBE0 -:1018A000000800489022D84B12031968F0B50A438B -:1018B0001A60802287B0920219681142FCD001227E -:1018C00059680A435A608022596852020A435A6092 -:1018D00080225968D2020A435A6080221968520451 -:1018E0000A431A608022920419681142FCD08021B8 -:1018F0001A6B0A431A638022D86912040243DA6120 -:1019000062B602240120C14B4026DA8FC04DA243AB -:10191000DA87DA8F8243DA870022BE48C2872A80BC -:10192000BD4D2E80BD4D08362E808026BC4D7601E3 -:101930002E80BC4D2980C287BB49BC4A11808021C2 -:10194000BB4A090611608022D98FD2000A43DA8788 -:10195000B84AB94B1A80FFF7D5FE0094B74E202144 -:10196000327813008B43D22B2ED1B549B548C978B4 -:10197000C378009CFF2904D1FF3B1C00631E9C41DF -:10198000E4B2B14BDB78FF2B00D00324AF4BDB7804 -:10199000FF2B00D00424AE4BAE4F1C703860D22A0F -:1019A00012D10023012505E02100FFF721FE0123CC -:1019B0000135EDB2A542F7D3002B00D0386080226C -:1019C0003B68DA70D02333703378F22B05D10022D4 -:1019D000023B33709F4B1B68DA703578D02D00D0F6 -:1019E000F0E09C4E3068C378802B00D0EAE0984B42 -:1019F0001978FFF7FDFD0023306004004372C570C5 -:101A00000178C07A1038042800D9D9E000F0A0F994 -:101A1000030C766767008020237AA2780143606810 -:101A200000F02CF960725AE063688B4A0293A37845 -:101A30008A480193237A0393894B1D682A431A60CD -:101A40001F2955D880225D6911430902EDB20D436B -:101A50005D61009A80219A61009A824D9A621A68AB -:101A6000C02610409022D2051860916201985169F9 -:101A700080002940AC460500B60035402943FF25CB -:101A800051615969784F2840394008430021586115 -:101A900005970495C0461869029D000A685401988C -:101AA00067460130C0B201909020019DC005406999 -:101AB000AD0038402F00374038439027FF0578614C -:101AC0005869059F01313840049FC9B23D40054324 -:101AD00003985D618842DDD2802393616172D822D0 -:101AE0005C4B1B681988DA709A7A52181A8069E080 -:101AF0005A690902D2B211435961AAE7237AA2783E -:101B000060208BE7802313431B021BB2657A01938D -:101B1000237AEFB2AB4207D26772F4232288E370D4 -:101B2000A37A9B18238019E7AA215048FFF71AFDD2 -:101B300055214F48FFF716FDA0214C48FFF712FD35 -:101B4000019BEEB21E436368B6B2D95D3000FFF769 -:101B500009FDC0463000FFF7C1FC07003000FFF769 -:101B6000BDFC8742F5D10135ADB2D1E7120213B207 -:101B7000657A0193237AEFB2AB42CDD3AA213D48D7 -:101B8000FFF722FC55213C48FFF71EFCA0213948F5 -:101B9000FFF71AFC019BEEB21E436368B6B2D95D33 -:101BA0003000FFF711FCC0463000FFF755FC07007E -:101BB0003000FFF751FC8742F5D10135ADB2D9E7CE -:101BC000C323E3701D4B1D78F02D00D0C6E6214ED7 -:101BD0003468E378982B00D0C0E61D4B20001978BC -:101BE000FFF706FD00233060C370E07AE57010381F -:101BF0002278042804D800F0A1F885B990909000CC -:101C0000C323E370AAE6C04600100240025C004015 -:101C1000505C0040065C00400060004004600040F2 -:101C2000066000404C5C004020320000005C004038 -:101C300000E100E00080FFFF585C004068000020E9 -:101C40001400002000000020280000203C0000209C -:101C5000A80200205000002000005555FFFFAAAA4E -:101C600000040048FFFC000003FF00005555000081 -:101C7000AA2A000055150000AA0A0000F0B585B098 -:101C80000193294B00901C6828482043186058692C -:101C90000C02C0B220435861022098619862186813 -:101CA000234C49B22040902418600820E405A0612C -:101CB000002901DA1021A16265691E499000C02740 -:101CC0000D408C460100BF0039400D436561FF2483 -:101CD0005969194D204029400843586103959025C2 -:101CE0000020ED050294C04666461969009C090A69 -:101CF000215401326969D2B29400314026003E403D -:101D000031436961039E596901303140029EC0B27E -:101D100034400C4301995C618842E4D90823AB62EA -:101D2000DB18AB6105B0F0BD00040048000055555C -:101D3000FFFFAAAAFFFC000003FF000002B47146E7 -:101D400049084900095649008E4402BC7047C04604 -:101D500002B4714649084900095C49008E4402BC3E -:101D60007047C04603B47146490840004900095A0B -:101D700049008E4403BC7047F8B5C046F8B5C0466C -:101D80000902120001010080320904000000000075 -:101D9000000012010002FF000008C016DC0500026E -:101DA00001020001040309042A0349006E006600D1 -:101DB00069006E006900740065004E0065007300E4 -:101DC0004C0069007600650073002E0063006F0010 -:101DD0006D00000000000000000000000000000096 -:101DE00000000000000000000000000000000000F3 -:101DF0000000000000000000000000001E03490079 -:101E00004E004C00200052006500740072006F000C -:101E10002D00500072006F006700000000000000FD -:101E200000000000000000000000000000000000B2 -:081E30000000000000000000AA +:10010000F0B5CC4E89B0338801961BB2002B01DBD1 +:1001100001F0FFF93388C84A1A4080231343338023 +:10012000019B1A8880231B011340C44A01D101F0AE +:10013000BEF9C349C34D0B68C34801330B602B782C +:100140007F211C008C43C149C14F0C70E98801809C +:100150000020388060273B401370BE4A14708342F1 +:1001600043D0FF23BC4CCAB22370BC4B60701C60F0 +:10017000029268780138062801D901F046F901F0A9 +:1001800041FF070021063E07C807F20744092F096F +:10019000A878AB888C22172822D88022D20001F0C0 +:1001A00031FF18005400810161021103B3034304BD +:1001B000FF041B0527052F05370541054A0558058E +:1001C000600568057005750589059F05C005D5059D +:1001D000EC05B023A24A5B0351690B435361002233 +:1001E00022706A469F4B12891A802B78602259B27E +:1001F000002901DB01F02CF9134016D16A78062A98 +:100200000FD16A88110A022901D101F000F90329EE +:1002100001D101F002F9944A012901D101F0F8F865 +:1002200003936A468F4B92891A80019B1A888F4BE1 +:1002300013438F4A1A40C0239B015340019A9BB23B +:10024000138001F0E7FA01F024F9152B01D900F031 +:10025000AAFD18008023DB0001F0D4FE1600230065 +:100260002E00A505390044004F00A5055C0069007B +:1002700073008000A505A5058D009A00A500B200B9 +:10028000BF00CC00D600E0009022D2051368794967 +:100290000B4013608023D1685B020B43D3600022C4 +:1002A0009EE790210123C9050A689A430A60CA683B +:1002B0001343CB60002293E790210423C9050A6809 +:1002C0009A430A60CA681343CB60002288E79021F2 +:1002D0001023C9050A689A430A60CA681343CB60B1 +:1002E00000227DE790214023C9050A689A430A60ED +:1002F000CA681343CB60002272E79022D2051368CC +:100300005D490B4013608023D1685B030B43D360CE +:10031000002265E79022D205136858490B4013600C +:100320008023D1685B010B43D360002258E704238C +:1003300053490A689A430A60CA681343CB60002293 +:100340004EE79022D20513684E490B40136080237C +:10035000D168DB050B43D360002241E79022D20530 +:10036000136849490B4013608023D168DB020B43BB +:10037000D360002234E79022D205136843490B4032 +:1003800013608023D1685B000B43D360002227E712 +:100390009022D20511683E4801401160D1680B439C +:1003A000D36000221CE79022D205136839490B4024 +:1003B00013608023D168DB010B43D36000220FE779 +:1003C0009022D205136834490B4013608023D16812 +:1003D000DB040B43D360002202E79022D2051368AE +:1003E0002E490B4013608023D1685B050B43D3601B +:1003F0000022F5E6012322490A689A430A60CA6886 +:100400001343CB600022EBE6102325490A689A4388 +:100410000A60CA681343CB600022E1E69021C90557 +:100420000A681B4802400A60CA681343CB60002276 +:10043000D6E6C046005C00408F0F00009A02002004 +:100440005C0000204860004062000020980200200C +:1004500066000020990200209C020020A4020020D7 +:100460000010024064000020322000088081FFFF5D +:100470008FBFFFFFFFFFFEFFFFFFEFFFFFEFFFFF5D +:1004800000040048FFFFFFBFFFFFFBFFFFFEFFFF71 +:10049000FFFBFFFFFFBFFFFFFFFFFFFBFFFFFFEFC4 +:1004A000000C0048152B01D900F080FC180001F069 +:1004B000A9FD160021002C007D04370042004D00EC +:1004C0007D04580063006D0078007D047D04830086 +:1004D0008E009900A400AF00BA00C400CE009023A3 +:1004E000DB051968CF4801401960DA680240DA601C +:1004F000002275E690230121DB051A688A431A6001 +:10050000DA688A43DA6000226AE690230421DB0578 +:100510001A688A431A60DA688A43DA6000225FE662 +:1005200090231021DB051A688A431A60DA688A432F +:10053000DA60002254E690234021DB051A688A43E2 +:100540001A60DA688A43DA60002249E69023DB0504 +:100550001968B54801401960DA680240DA60002283 +:100560003EE69023DB051968B04801401960DA685F +:100570000240DA60002233E60421AD4B1A688A4358 +:100580001A60DA688A43DA60002229E69023DB05E4 +:100590001968A84801401960DA680240DA60002250 +:1005A0001EE69023DB051968A34801401960DA684C +:1005B0000240DA60002213E69023DB0519689F48A9 +:1005C00001401960DA680240DA60002208E69023F0 +:1005D000DB0519689A4801401960DA680240DA6060 +:1005E0000022FDE59023DB0519689648014019605B +:1005F000DA680240DA600022F2E59023DB05196830 +:10060000914801401960DA680240DA600022E7E5AB +:100610009023DB0519688D4801401960DA680240B3 +:10062000DA600022DCE50121814B1A688A431A60F6 +:10063000DA688A43DA600022D2E51021844B1A6816 +:100640008A431A60DA688A43DA600022C8E5902398 +:10065000DB0519687A4801401960DA680240DA60FF +:100660000022BDE5152B00D9A3E3180001F0CAFC58 +:1006700016001F002700A1032F0037003F00A10331 +:100680004800510058006100A103A1036A007300F3 +:100690007A0083008C0095009C00A30090228023A8 +:1006A000D20511685B020B431360002298E590228B +:1006B0000123D20511680B431360002290E59022BC +:1006C0000423D20511680B431360002288E59022B1 +:1006D0001023D20511680B431360002280E590229D +:1006E0004023D20511680B431360002278E5902265 +:1006F0008023D20511685B030B43136000226FE572 +:1007000090228023D20511685B010B431360002205 +:1007100066E50423464A11680B43136000225FE537 +:1007200090228023D2051168DB050B431360002261 +:1007300056E590228023D2051168DB020B4313603B +:1007400000224DE590228023D20511685B000B4307 +:100750001360002244E59021C9050B681A430A6022 +:1007600000223DE590228023D2051168DB010B4376 +:100770001360002234E590228023D2051168DB0447 +:100780000B43136000222BE590228023D2051168D1 +:100790005B050B431360002222E50123244A116804 +:1007A0000B43136000221BE51023294A11680B43F9 +:1007B0001360002214E59021C9050B681A430A60F2 +:1007C00000220DE5152B00D9F6E2180001F01AFC05 +:1007D00016001D002300F402420048004E00F402FF +:1007E000530059005E006500F402F4026C007200D0 +:1007F00078007E0085008C00910096008022902376 +:100800005200DB059A620022EAE490230122DB0514 +:100810009A620022E4E490230222DB059A6200221D +:10082000DEE4C046FFFFFEFFFFFFEFFFFFEFFFFF2D +:1008300000040048FFFFFFBFFFFFFBFFFFFEFFFFBD +:10084000FFFBFFFFFFBFFFFFFFFFFFFBFFFFFFEF10 +:10085000000C004890230422DB059A620022BFE4CA +:1008600090230822DB059A620022B9E49023DB057D +:100870009A620022B4E490234022DB059A620022AF +:10088000AEE40222CF4B9A620022A9E48022902398 +:100890001202DB059A620022A2E4802290239200D9 +:1008A000DB059A6200229BE490231022DB059A620A +:1008B000002295E490232022DB059A6200228FE437 +:1008C00090238022DB059A62002289E48022902313 +:1008D0009201DB059A62002282E480229023D201F9 +:1008E000DB059A6200227BE40122B64B9A62002269 +:1008F00076E40422B44B9A62002271E49023202211 +:10090000DB059A6200226BE4152B00D957E2180030 +:1009100001F078FB16001D002300550229002F006E +:10092000350055023A00400045004C005502550282 +:1009300053005900600067006F0077007D0083005E +:10094000802290235200DB059A61002248E4902324 +:100950000122DB059A61002242E490230222DB059A +:100960009A6100223CE490230422DB059A61002274 +:1009700036E490230822DB059A61002230E49023BC +:10098000DB059A6100222BE490234022DB059A616B +:10099000002225E402228B4B9A61002220E480226F +:1009A00090231202DB059A61002219E48022902331 +:1009B0009200DB059A61002212E490231022DB05ED +:1009C0009A6100220CE490232022DB059A61002228 +:1009D000FFF706FC90238022DB059A610022FFF7D7 +:1009E000FFFB802290239201DB059A610022FFF732 +:1009F000F7FB80229023D201DB059A610022FFF7EA +:100A0000EFFB01226F4B9A610022FFF7E9FB042202 +:100A10006D4B9A610022FFF7E3FB90232022DB0558 +:100A20009A610022FFF7DCFB02226270152B00D9CD +:100A3000B1E0180001F0D2FA0B151EAF273039AF24 +:100A4000434C545DAFAF677079828C969EA690231D +:100A50008022DB051B695200134063800022FFF7F0 +:100A6000BFFB90230122DB051B691340638000223A +:100A7000FFF7B6FB90230222DB051B69134063805E +:100A80000022FFF7ADFB90230422DB051B69134016 +:100A900063800022FFF7A4FB90230822DB051B697B +:100AA000134063800022FFF79BFB90238022DB052D +:100AB0001B69D200134063800022FFF791FB902353 +:100AC0004022DB051B69134063800022FFF788FB8F +:100AD00002223C4B1B69134063800022FFF780FB1E +:100AE0009023DB051B690022DB0BDB036380FFF730 +:100AF00077FB90238022DB051B6992001340638003 +:100B00000022FFF76DFB90231022DB051B691340C9 +:100B100063800022FFF764FB90232022DB051B6922 +:100B2000134063800022FFF75BFB90238022DB05EC +:100B30001B69134063800022FFF752FB9023802241 +:100B4000DB051B699201134063800022FFF748FB1D +:100B500090238022DB051B69D201134063800022B1 +:100B6000FFF73EFB0122174B1B69134063800022F5 +:100B7000FFF736FB0422144B1B69134063800022ED +:100B8000FFF72EFB90232022DB051B6913406380B7 +:100B90000022FFF725FB00238D226370FFF720FB67 +:100BA00080230A4ADB0251690B435361054A084915 +:100BB00013680B401360D168064B0B43D3600022CF +:100BC000FFF70EFB00040048000C00480010024034 +:100BD000AFAAFAFF50550500CE4ACF4913680B4023 +:100BE0001360D168CD4B0B43D3600022FFF7F8FAB6 +:100BF000C84AC94913680B4013600022FFF7F0FA96 +:100C0000C44AC64B11680B4313600022FFF7E8FA91 +:100C1000C049C3484A699B00024013434B6100220C +:100C2000FFF7DEFABB4B00221B699B08A370012370 +:100C30006370FFF7D5FA8023BA4A1B0351690B434F +:100C40005361B94AB94B11680B4313600022FFF797 +:100C5000C7FAB54AB54BD1680B43D3600022FFF702 +:100C6000BFFAB14AB24913680B4013600022FFF784 +:100C7000B7FAAD4AAD4B11680B4313600022FFF782 +:100C8000AFFAA94A53610022FFF7AAFA8023A54AC6 +:100C90001B0351690B4353619E4AA64B11680B43DA +:100CA00013609022D2051168A34B0B4313600022FE +:100CB000FFF796FA974A9F4BD1680B43D360902376 +:100CC000DB05D8689C490143D96011689B48014005 +:100CD00011601A689A490A401A600022FFF780FAE8 +:100CE000F82280268B4F98027969D2011040360293 +:100CF0005A02324089051043890D084390217861DA +:100D000010205F08C90538404A698E4FDB013A4020 +:100D100002438020C001034013434B610022FFF7D0 +:100D20005FFAC0237F4ADB0251690B435361794A62 +:100D3000804B11680B4313609022A023D2051168E9 +:100D40005B020B4313600022FFF74AFA714A794BAA +:100D5000D1680B43D3609023A021DB05D8684902FA +:100D60000143D96011687548014011601A687649DD +:100D70000A401A600022FFF733FA66489A06416972 +:100D8000120C8905890D0A4342619022C020D205C8 +:100D9000C000DB00516903406C4801400B435361C4 +:100DA0000022FFF71DFA8D22FFF71AFA8D22FFF7B6 +:100DB00017FA8D22FFF714FA8D22FFF711FA8D2210 +:100DC000FFF70EFAAF78012F0ED0002F06D0022FBA +:100DD0004DD0802F00D1BDE0962701E000F07AFDD4 +:100DE0005B4B1F70FFF7FDF900F074FD9023DB05EE +:100DF0001A68494C3A431A6080229F61196852026E +:100E00000A431A608022042152009A621A6800275D +:100E10000A431A6002229A6118680E3202431A606D +:100E20004022996119680A431A6008229A61802356 +:100E30003C49DB024A6913434B61364B1A68224036 +:100E40001A60D868354A1043D86018682040186086 +:100E5000D8680243DA6080234A691B0313434B615D +:100E6000314B324A19680A431A605F61B8E700F0F3 +:100E700031FD90230121DB051A68274F0A431A60D0 +:100E80001022996119680A431A60042240219A616C +:100E90001A680A431A6008229A618022186852016F +:100EA00002431A60802299611E49D20248690243B6 +:100EB0004A61184A106838401060D46817480443E3 +:100EC000D46014683C401460D4682043D060802013 +:100ED0004C690003204348611348144C07683C43A5 +:100EE000002704604761C0204C69C002204348616C +:100EF0001068104901431160A0211868490201439C +:100F0000196051698905890D51615A690F490A4073 +:100F10005A6165E700040048AFAAFAFF5055050082 +:100F200003FC0000001002400008004855555555CC +:100F3000AAAAAAAA0000505500010010FFFFAFAAFC +:100F4000FFFEFFEFEFBF0000FFBFFEFFFFF9000055 +:100F50009C020020012363709C469023402180273F +:100F6000DB0599621A687F013A431A60C046B948A6 +:100F70001C691A680C4002401A60DA680240DA60A4 +:100F8000F022002C37D11A6802401A60DA68174341 +:100F9000DF601A6916001A690492C0461A69059240 +:100FA000C046C0461A690692C046C046C0461A6985 +:100FB0000792C046C046C046C0461F691A68024034 +:100FC0001A60DA681040D86022000E4213D1049BE8 +:100FD00062460B420FD1059B02320B420BD1069B9E +:100FE00003320B4207D1079B04320B4203D1053277 +:100FF0007B0600D4D132984B00279A70F0E6AF7888 +:10100000E978A888022F1BD005D8002F0FD0012F18 +:1010100012D0A0270DE0822F3DD0832F40D0812F0A +:10102000F7D10123637000F07BFBA07006E000F0B5 +:1010300097FB2770FFF7D5F800F02AFB0027F8E7A9 +:101040009023DB051A68834E890032401A60DA6803 +:101050003240DA60814A5061814A9F621668814F4E +:1010600000B23743176056697F4F374039435161AB +:10107000802149009961002801DA01209862C04668 +:10108000C0469962012199614918996113687749AD +:101090000B401360D2E70123637000F025FBC4E727 +:1010A0000123FF276370802390206C4ADB00516985 +:1010B000C00539400B435361036951699BB20F402E +:1010C000802109013943516102698021180092B2DF +:1010D000104389001027084219D00B4018000A401D +:1010E000411E884111004F1EB941C0B2C9B200284B +:1010F00002D0112700290AD1002A02D11227002884 +:1011000005D1002B02D11327002900D1FF27A7709A +:1011100094E7AB78A888012B20D0002B03D0022BBA +:1011200017D0AA2312E04E4F82067969120C890566 +:10113000890D0A437A619021C027C905C000FF00CC +:101140004A6907404A4802403A434A612370FFF720 +:1011500048F8E97800F05CFA0023F7E7637000F0E4 +:101160007FFAA070F8E7AA781300303B2F2B19D82C +:10117000E878032800D9ECE000F030FF14021012E8 +:101180003C4B512A00D195E024D8312A54D00BD8B9 +:10119000002A34D0302A4AD0B42346E0364BF0E758 +:1011A000364BEEE7364BECE7332A4FD049D3502A83 +:1011B000F2D100222270063262701A7AA270DA78B6 +:1011C000E2705A7A22719A7A62719A78A2715B7C83 +:1011D000E37163E07F2A00D9A1E0702A00D379E0AF +:1011E000602A53D0612A5DD0522AD5D100221B88B3 +:1011F0002270A37002321B0A6270E3704EE0FF237C +:10120000204953540132102AFBD11A4A1C49D37089 +:1012100093701A4ACB70D370937001228B70164969 +:10122000CB708B70184B1A700023237036E0AA889D +:10123000110AD9721A73F7E7AA88110A59739A73B7 +:10124000F2E7AA88110AD9731A74EDE7AA885A74CA +:10125000EAE7C046FFEFFFFF9C02002000080048BD +:10126000000400485055050003FC0000AFAAFAFF37 +:10127000FFF9000014000020280000203C0000209E +:101280000000002088000020680000200023237058 +:1012900001336370AB88BD4AD35CA370BC4B1C6048 +:1012A000FEF79FFF0023237001336370B94B1B6867 +:1012B000DB78F2E70022227006326270DA7AA270DE +:1012C0001A7BE2705A7B22719A7B6271DA7BA2717F +:1012D0001B7C7DE7B04BAF495C682B787F2B00D936 +:1012E00035E16846AD4B007A18700868C378002B6A +:1012F0000ED000200290982B05D130E10020029002 +:10130000D02B00D12BE1A64B10301870FF2304E046 +:10131000A44B18609023C3706F3302931FE1072022 +:101320001040032815D800F059FE160218129E4BE3 +:10133000802AB3D3872A12D97032D2B2072AADD805 +:1013400000222270EA789A72AA881A80A6E7974B40 +:10135000EEE7B52369E7904BEAE7954BE8E7A88805 +:10136000E978C2B28F189446BE22102F2CDC0432CA +:10137000002929D0DF78033AFF2F25D19F78013249 +:10138000FF2F21D10022D7B2B9421FD866460022D2 +:101390004F01013F1F72874F7601000ABF199870F5 +:1013A000DA705A729A721A80DA721A735A739A73CE +:1013B000DA731A745A745F60744B63449854013240 +:1013C000D7B2B942FAD80022227067E766460132E6 +:1013D000B7186E4E013FF75DFF2FD4D0C122F3E75F +:1013E000AA78002A04D0402A07D0D222227056E7D9 +:1013F0002270A9886A4A117051E7002222700132D6 +:101400006270674A1278A27049E780239EE66A4AB2 +:101410005F4B1A601223FEF703FFD2B2012A11D0EC +:10142000002A09D0022A01D0FEF7FAFE584B634A7F +:101430001A60634BFEF7F4FE554B624A1A600423B0 +:10144000FEF7EEFE524B604A1A60604BFEF7E8FE74 +:10145000134208D16B78052B05D16B885C4A137059 +:101460005C4ADBB21380019B5B4A1B8801991340E5 +:101470005A4A13439BB20B800021594B1980019BA0 +:101480001B881A43574B1A40574B5A40019B92B244 +:101490001A80564BDA8F520507D58021544A1180A5 +:1014A0000022DA87534B019A138009B0F0BD1278FD +:1014B000402AEED1504A1278002AEAD14F4A1088C9 +:1014C000384AC0B211684D7A4F68DAB2AC18E4B24B +:1014D000904218D84A7A82184A72304A13781B1AF6 +:1014E000DBB21370002B01D19833CB70019B1A88AB +:1014F0003A4B1343424A1A40C0239B015340019A7E +:101500009BB21380C5E73F4A9A18127801333A55C7 +:10151000DBE7019B1B881B06BBD5019B3A4A1B8856 +:101520001340802212021343019A1380374B1B7819 +:10153000802B01D1FEF785FE254A1378002BA8D019 +:1015400080210B432A490B8000231370A1E7086810 +:10155000C378D82B00D0D1E680234468C3700B68D1 +:1015600000215972DB78902B00D097E6712A00D0C9 +:1015700094E60C4BAA881B6859680A70AA885968B7 +:10158000120A4A705A7A02325A7287E6880000209C +:10159000A40200205000002000000020580000207D +:1015A0006800002054000020140000203C000020AF +:1015B0002800002098000020202000089C2000081F +:1015C0001E03000044200008482000082A030000F1 +:1015D00060000020506000408F8EFFFF8080FFFF82 +:1015E00002600040BFBFFFFF30300000065C0040DB +:1015F0004C5C004020320000990200200660004050 +:101600008FBFFFFF486000400F8FFFFF9802002050 +:101610000E4B0F4A58610F4B8900186802431A603D +:101620005A690D4802401143902259610820012156 +:10163000D20590629162C046C046C046C0469061E5 +:1016400091611A6805490A401A607047000800480D +:10165000505505000004004803FC0000AFAAFAFF43 +:10166000094B0122586190230421DB059A6299629B +:10167000C046C046C046C04604480069996180081B +:10168000C0B29A617047C046000800480004004894 +:101690000F4B984202D880231B0218430D4B0E4A71 +:1016A00058610E4B8900186802431A605A690C4849 +:1016B000024011435961C04690220821D20591622F +:1016C000C04691611A6807490A401A607047C046CF +:1016D000FF1F0000000800485055050000040048A6 +:1016E00003FC0000AFAAFAFF0A4B984202D88023FD +:1016F0001B021843084B042258619023DB059A62B1 +:10170000C046C046C046C046044908699A61800880 +:10171000C0B27047FF1F00000008004800040048E6 +:101720000D4B8022586190235200DB0500B29A6174 +:10173000002801DAFF3A9A62C046C046C046C04659 +:10174000064B8022186990235200DB059A628008BC +:10175000FF3AC0B29A617047000800480004004890 +:10176000114B124A10B558611068114B89000343A0 +:10177000136053690F48104C034019439023516183 +:101780008021DB05186849010843186040209862F1 +:10179000186820401860D8680143D9601368074969 +:1017A0000B40136010BDC04600080048000400480C +:1017B0005055050003FC0000FFEFFFFFAFAAFAFF42 +:1017C000022907D10F4B104A984218D0904209D1F4 +:1017D000180007E0032906D10A4B0B490B4A98422F +:1017E0000BD1080070470429FCD1064B064A9842E9 +:1017F00005D006499042F4D0054A8842E6D110004F +:10180000F0E7C0460000002014000020280000205F +:101810003C000020224B10B51968224B224C1A883C +:1018200052085200505A214A10801A88023292B24D +:101830001A8052085200505A1D4A10801A880232EB +:1018400092B21A8052085200505A1A4A10801A88CE +:101850001948023292B21A8052085200515A174A5D +:1018600011801A882188023292B21A808A4210D9D5 +:1018700008318A1A92B2028022881A801049114BCC +:101880000A881343104A1A40302353409BB20B80FE +:1018900010BD0E4C21888A42EAD808230380EDE768 +:1018A000A402002066000020640000204060004088 +:1018B00042600040446000400260004046600040DA +:1018C000005C00408080FFFFBF8FFFFF62000020B0 +:1018D000FEE70000BC22444BD203996A70B50A436C +:1018E0009A629A6A4149424C0A409A628022596936 +:1018F00012030A435A613F4A3F4910683F4E08436A +:1019000010601068204080241060D068E402014319 +:10191000D1605A6922435A61394A116831401160D5 +:10192000D56838490D43D560106830401060D068E4 +:101930000143D160B02158694903014359619023A3 +:10194000DB0519683048014019608021D8684902D8 +:1019500001430120D960196881431960D9680143A6 +:10196000D96004211D688D431D60DD680D43DD6075 +:1019700010251E68AE431E60DE683543DD604025DD +:101980001E68AE431E60DE683543DD601D681F4E75 +:1019900035401D608025DE686D033543DD601D68C0 +:1019A0001B4E35401D608025DE68ED053543DD604A +:1019B0001D68184E35401D60DD682C43DC601468DE +:1019C000154D84431460D4682043D0601C682C40BB +:1019D0001C60D8682840D86013688B431360D368B4 +:1019E0001943D16070BDC04600100240FFFFA1FF47 +:1019F000AAAAAAAA0008004855555555AFAAFAFF49 +:101A00000004004850550500FFFFFEFFFFFFEFFFF9 +:101A1000FFFFFFBFFFFFFBFFFFEFFFFF9022D24B57 +:101A200012031968F0B50A431A60802287B0920247 +:101A300019681142FCD0012259680A435A60802279 +:101A4000596852020A435A6080225968D2020A43F6 +:101A50005A608022196852040A431A608022920454 +:101A600019681142FCD080211A6B0A431A63802244 +:101A7000D86912040243DA6162B60220BB4B4025EA +:101A8000DA8FBB4C8243DA87DA8F01388243DA87F8 +:101A90000022B848C2872280B74C2580B74C083551 +:101AA00025808025B64C6D012580B64C2180C287EB +:101AB000B549B64A11808021B54A090611608022D5 +:101AC000D98FD2000A43DA87B24AB34B1A80FFF7A4 +:101AD00001FFB24E2023327811009943D2292ED132 +:101AE000AF49B048C978C3780224FF2904D1FF3B2D +:101AF0001C00631E9C41E4B2AB4BDB78FF2B00D093 +:101B00000324AA4BDB78FF2B00D00424A84BA94F59 +:101B10001C703860D22A12D10023012505E0210073 +:101B2000FFF74EFE01230135EDB2A542F7D3002B9E +:101B300000D0386080223B68DA70D023337033786D +:101B4000F22B05D10022023B33709A4B1B68DA70EE +:101B50003578D02D00D0D5E1964E3068C378802BF3 +:101B600000D0CFE1924B1978FFF72AFE00233060B6 +:101B7000437204000388C570C07AD9B210380428B3 +:101B800000D9BDE100F02AFA030C464A3A00802051 +:101B9000237AA2780143606800F0ECF960722DE0CE +:101BA000854B6668A078257A5A691F292FD8802727 +:101BB00039430902D2B21143902259610421FF270F +:101BC000D20591625A693F023A407C4902435A6108 +:101BD0008C460022C0466146096901308908B1542B +:101BE0005969C0B2394001320143D2B259619542BC +:101BF000F0D290230421DB0599616272D8226D4BEB +:101C00001B681988DA709A7A52181A807AE1D2B26F +:101C10000902D0E7237AA2786020BBE76748DB0996 +:101C200045699A06AD05AD0D120C2A43C0269025D4 +:101C30004261ED05F600DB006A693340604E67687B +:101C4000324013436B61237AA27801935A4B5E6949 +:101C50000296802631436E46367A09023143596135 +:101C60000421FF26A9620339A9625969360231406D +:101C7000114359610021C046C046C046C0460569AF +:101C80000132AD087D545D69D2B2354015435D61C6 +:101C90000131019DC9B28D42EDD290230422DB05B2 +:101CA0009A61033A9A616172A8E78024264336025A +:101CB00033B27D7A01933B7AECB2AB4207D27C72AD +:101CC000F4233A88FB70BB7A9B183B8001E7AA217A +:101CD0003C48FFF745FD55213B48FFF741FDA0215A +:101CE0003848FFF73DFD019BEEB21E437B68B6B25C +:101CF000195D3000FFF734FDC0463000FFF710FDDE +:101D000004003000FFF70CFD8442F5D10135ADB27F +:101D1000D1E7360233B27D7A01933B7AECB2AB4223 +:101D2000CDD3AA212948FFF7B3FC55212848FFF756 +:101D3000AFFCA0212548FFF7ABFC019BEEB21E4390 +:101D40007B68B6B2195D3000FFF7A2FCC0463000D8 +:101D5000FFF7CAFC04003000FFF7C6FC8442F5D14F +:101D60000135ADB2D9E7C04600100240025C004028 +:101D7000505C0040065C0040006000400460004091 +:101D8000066000404C5C004020320000005C0040D7 +:101D900000E100E00080FFFF585C00406800002088 +:101DA0001400002000000020280000203C0000203B +:101DB000A80200205000002000080048000400484D +:101DC000FFF9000055550000AA2A00005515000033 +:101DD000AA0A00005D4DDB0969699A068905890D2B +:101DE000120C0A439024C0216A61E405C900DB009B +:101DF00062690B40564957480A40134363617B7A36 +:101E0000AA2101934023A362FFF702FC5521524807 +:101E1000FFF7FEFB20214F48FFF7FAFB80231E430C +:101E2000360233B205936B461B79019A03933B7AD2 +:101E3000934213D26B461B7B90217B720020FFF7ED +:101E4000E7FB00210800FFF7E3FBF0210020FFF78C +:101E5000DFFB90234022DB059A6131E72A683F4B84 +:101E600013432B606B693E4A1340A0229200134338 +:101E70006B6108220123A262A362C046C046C0462D +:101E8000C046A261A3612B68364A402613402B60EE +:101E90006B46059A1B7913439BB20293039A7B68A6 +:101EA0000298995CFFF7B4FBA661C0460298FFF761 +:101EB000D7FB039A7B680490A6629B5C049A9342CA +:101EC00007D0A6610298FFF7CBFB049BA66298425D +:101ED00004D1019B01339BB20193A4E7C046C046E5 +:101EE000C046C046C046C046C046C046C046C046C2 +:101EF000C046C046A6610298FFF7B2FB0490E1E736 +:101F0000C323E370184B1C78F02C00D0E1E5174D8B +:101F10002F68FB78982B00D0DBE5154B380019783B +:101F2000FFF74EFC00232860C370F87A3B88103816 +:101F3000FC70DEB2042806D800F05AF8B7FEEBFEBB +:101F4000C2FE4CFFC2FEC323FB70C2E50004004882 +:101F5000FFF90000AA0A00005505000050550500D1 +:101F600003FC0000AFAAFAFF680000205000002028 +:101F7000A8020020F0B5174C050060690E02C0B23F +:101F800030436061802690207600C00549B28661AA +:101F9000002901DA01218162FF26002061693602F1 +:101FA000314011430C4F6161C046396901328908E3 +:101FB00029546169D2B2314001301143C0B261612C +:101FC0009842F1D990238022DB0552009A62FF3AB1 +:101FD0009A61F0BD000800480004004802B4714650 +:101FE00049084900095C49008E4402BC7047C0465C +:101FF00003B47146490840004900095E49008E4417 +:1020000003BC704703B47146490840004900095AAF +:1020100049008E4403BC7047F8B5C046F8B5C046C9 +:1020200009021200010100803209040000000000D2 +:10203000000012010002FF000008C016DC050002CB +:1020400001020001040309042A0349006E0066002E +:1020500069006E006900740065004E006500730041 +:102060004C0069007600650073002E0063006F006D +:102070006D000000000000000000000000000000F3 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000001E034900D6 +:1020A0004E004C00200052006500740072006F006A +:1020B0002D00500072006F0067000000000000005B +:1020C0000000000000000000000000000000000010 +:0820D000000000000000000008 :04000005080000C12E :00000001FF diff --git a/firmware/build_stm/inlretro_stm.map b/firmware/build_stm/inlretro_stm.map index 7d22b00..956fe3c 100644 --- a/firmware/build_stm/inlretro_stm.map +++ b/firmware/build_stm/inlretro_stm.map @@ -18,12 +18,12 @@ c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-atexit.o) (__register_exitproc) c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o) c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o) (_exit) -c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_sqi.o) - C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o (__gnu_thumb1_case_sqi) c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) - C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o (__gnu_thumb1_case_uqi) + C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o (__gnu_thumb1_case_uqi) +c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) + C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o (__gnu_thumb1_case_shi) c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) - C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o (__gnu_thumb1_case_uhi) + C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o (__gnu_thumb1_case_uhi) Allocating common symbols Common symbol size file @@ -55,20 +55,20 @@ Discarded input sections .ARM.exidx 0x00000000 0x8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o .ARM.attributes 0x00000000 0x1b c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o .text 0x00000000 0x0 source/buffer.o (symbol from plugin) - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .rodata.oper_info - 0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o + 0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o .text 0x00000000 0x0 source/dump.o (symbol from plugin) .text 0x00000000 0x0 source/flash.o (symbol from plugin) .text 0x00000000 0x0 source/io.o (symbol from plugin) @@ -76,6 +76,7 @@ Discarded input sections .text 0x00000000 0x0 source/nes.o (symbol from plugin) .text 0x00000000 0x0 source/operation.o (symbol from plugin) .text 0x00000000 0x0 source/pinport.o (symbol from plugin) + .text 0x00000000 0x0 source/snes.o (symbol from plugin) .text 0x00000000 0x0 source/usb.o (symbol from plugin) .text 0x00000000 0x0 source_stm_only/stm_init.o (symbol from plugin) .text 0x00000000 0x0 source_stm_only/usbstm.o (symbol from plugin) @@ -168,10 +169,10 @@ Discarded input sections .fini 0x00000000 0x8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtn.o .ARM.attributes 0x00000000 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtn.o - .data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_sqi.o) - .bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_sqi.o) .data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) .bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) + .data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) + .bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) .data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) .bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) @@ -187,11 +188,11 @@ Linker script and memory map LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o LOAD source/buffer.o -LOAD C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o -LOAD C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o -LOAD C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o LOAD source/dump.o LOAD source/flash.o LOAD source/io.o @@ -199,6 +200,7 @@ LOAD source/main.o LOAD source/nes.o LOAD source/operation.o LOAD source/pinport.o +LOAD source/snes.o LOAD source/usb.o LOAD source_stm_only/stm_init.o LOAD source_stm_only/usbstm.o @@ -215,12 +217,12 @@ END GROUP LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtend.o LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtn.o -.text 0x08000000 0x1e38 +.text 0x08000000 0x20d8 *(.isr_vector) - .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o 0x08000000 __isr_vector *(.text*) - .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o 0x080000c0 Reset_Handler 0x080000fc TSC_IRQHandler 0x080000fc ADC1_COMP_IRQHandler @@ -260,50 +262,56 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x080000fc USART1_IRQHandler 0x080000fc TIM1_BRK_UP_TRG_COM_IRQHandler .text.USB_IRQHandler - 0x08000100 0x12c8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x08000100 0x1510 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x08000100 USB_IRQHandler + .text.snes_rom_wr + 0x08001610 0x50 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001610 snes_rom_wr + .text.snes_rom_rd + 0x08001660 0x30 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001660 snes_rom_rd .text.nes_ppu_wr - 0x080013c8 0x90 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x080013c8 nes_ppu_wr + 0x08001690 0x58 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001690 nes_ppu_wr .text.nes_ppu_rd - 0x08001458 0x84 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x08001458 nes_ppu_rd + 0x080016e8 0x38 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x080016e8 nes_ppu_rd .text.nes_cpu_rd - 0x080014dc 0x88 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x080014dc nes_cpu_rd + 0x08001720 0x40 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001720 nes_cpu_rd .text.discrete_exp0_prgrom_wr - 0x08001564 0x8c C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x08001564 discrete_exp0_prgrom_wr + 0x08001760 0x60 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001760 discrete_exp0_prgrom_wr .text.get_next_buff - 0x080015f0 0x54 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .text.control_xfr_in.lto_priv.20 - 0x08001644 0xbc C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x08001644 control_xfr_in.lto_priv.20 + 0x080017c0 0x54 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .text.control_xfr_in.lto_priv.24 + 0x08001814 0xbc C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001814 control_xfr_in.lto_priv.24 .text.HardFault_Handler - 0x08001700 0x2 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x08001700 HardFault_Handler - *fill* 0x08001702 0x2 + 0x080018d0 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x080018d0 HardFault_Handler + *fill* 0x080018d2 0x2 .text.io_reset - 0x08001704 0x1a0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x08001704 io_reset + 0x080018d4 0x148 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x080018d4 io_reset .text.startup.main - 0x080018a4 0x3d8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x080018a4 main - .text.nes_cpu_page_rd_poll.constprop.14 - 0x08001c7c 0xc0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o - 0x08001c7c nes_cpu_page_rd_poll.constprop.14 - .text 0x08001d3c 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_sqi.o) - 0x08001d3c __gnu_thumb1_case_sqi - .text 0x08001d50 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) - 0x08001d50 __gnu_thumb1_case_uqi - .text 0x08001d64 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) - 0x08001d64 __gnu_thumb1_case_uhi + 0x08001a1c 0x558 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x08001a1c main + .text.nes_cpu_page_rd_poll.constprop.15 + 0x08001f74 0x68 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o + 0x08001f74 nes_cpu_page_rd_poll.constprop.15 + .text 0x08001fdc 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) + 0x08001fdc __gnu_thumb1_case_uqi + .text 0x08001ff0 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) + 0x08001ff0 __gnu_thumb1_case_shi + .text 0x08002004 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) + 0x08002004 __gnu_thumb1_case_uhi *(.init) - .init 0x08001d78 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o - 0x08001d78 _init + .init 0x08002018 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o + 0x08002018 _init *(.fini) - .fini 0x08001d7c 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o - 0x08001d7c _fini + .fini 0x0800201c 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o + 0x0800201c _fini *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors) @@ -316,45 +324,45 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm *(.dtors) *(.rodata*) .rodata.config_desc - 0x08001d80 0x12 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x08002020 0x12 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .rodata.device_desc - 0x08001d92 0x12 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x08002032 0x12 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .rodata.string0_desc - 0x08001da4 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x08002044 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .rodata.string1_desc - 0x08001da8 0x54 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x08002048 0x54 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .rodata.string2_desc - 0x08001dfc 0x3c C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x0800209c 0x3c C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o *(.eh_frame*) -.glue_7 0x08001e38 0x0 - .glue_7 0x08001e38 0x0 linker stubs +.glue_7 0x080020d8 0x0 + .glue_7 0x080020d8 0x0 linker stubs -.glue_7t 0x08001e38 0x0 - .glue_7t 0x08001e38 0x0 linker stubs +.glue_7t 0x080020d8 0x0 + .glue_7t 0x080020d8 0x0 linker stubs -.vfp11_veneer 0x08001e38 0x0 - .vfp11_veneer 0x08001e38 0x0 linker stubs +.vfp11_veneer 0x080020d8 0x0 + .vfp11_veneer 0x080020d8 0x0 linker stubs -.v4_bx 0x08001e38 0x0 - .v4_bx 0x08001e38 0x0 linker stubs +.v4_bx 0x080020d8 0x0 + .v4_bx 0x080020d8 0x0 linker stubs -.iplt 0x08001e38 0x0 - .iplt 0x08001e38 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o +.iplt 0x080020d8 0x0 + .iplt 0x080020d8 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o -.rel.dyn 0x08001e38 0x0 - .rel.iplt 0x08001e38 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o +.rel.dyn 0x080020d8 0x0 + .rel.iplt 0x080020d8 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o .ARM.extab *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x08001e38 __exidx_start = . + 0x080020d8 __exidx_start = . .ARM.exidx *(.ARM.exidx* .gnu.linkonce.armexidx.*) - 0x08001e38 __exidx_end = . - 0x08001e38 __etext = ALIGN (0x4) + 0x080020d8 __exidx_end = . + 0x080020d8 __etext = ALIGN (0x4) -.data 0x20000000 0x0 load address 0x08001e38 +.data 0x20000000 0x0 load address 0x080020d8 0x20000000 __data_start__ = . *(vtable) *(.data*) @@ -383,52 +391,52 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x20000000 . = ALIGN (0x4) 0x20000000 __bss_start__ = . *(.bss*) - .bss.buff0 0x20000000 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.buff0 0x20000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x20000000 buff0 - .bss.buff1 0x20000014 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.buff1 0x20000014 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x20000014 buff1 - .bss.buff2 0x20000028 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.buff2 0x20000028 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x20000028 buff2 - .bss.buff3 0x2000003c 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.buff3 0x2000003c 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x2000003c buff3 - .bss.cur_buff 0x20000050 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.cur_buff 0x20000050 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x20000050 cur_buff .bss.cur_usb_load_buff - 0x20000054 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000054 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .bss.incoming_bytes_remain - 0x20000058 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000058 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o *fill* 0x20000059 0x3 - .bss.log 0x2000005c 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.log 0x2000005c 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .bss.new_address - 0x20000060 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000060 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o *fill* 0x20000061 0x1 - .bss.num_bytes_req.lto_priv.23 - 0x20000062 0x2 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - 0x20000062 num_bytes_req.lto_priv.23 - .bss.num_bytes_sending.lto_priv.22 - 0x20000064 0x2 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - 0x20000064 num_bytes_sending.lto_priv.22 - .bss.num_bytes_xfrd.lto_priv.21 - 0x20000066 0x2 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - 0x20000066 num_bytes_xfrd.lto_priv.21 + .bss.num_bytes_req.lto_priv.27 + 0x20000062 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + 0x20000062 num_bytes_req.lto_priv.27 + .bss.num_bytes_sending.lto_priv.26 + 0x20000064 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + 0x20000064 num_bytes_sending.lto_priv.26 + .bss.num_bytes_xfrd.lto_priv.25 + 0x20000066 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + 0x20000066 num_bytes_xfrd.lto_priv.25 .bss.oper_info_struct - 0x20000068 0x20 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000068 0x20 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x20000068 oper_info_struct .bss.raw_bank_status - 0x20000088 0x10 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000088 0x10 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .bss.raw_buffer16 - 0x20000098 0x200 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .bss.req_dir 0x20000298 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .bss.reqdir 0x20000299 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .bss.reqtype 0x2000029a 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000098 0x200 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .bss.req_dir 0x20000298 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .bss.reqdir 0x20000299 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .bss.reqtype 0x2000029a 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o *fill* 0x2000029b 0x1 - .bss.rv16.4797 - 0x2000029c 0x8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.rv16.4816 + 0x2000029c 0x8 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .bss.usbMsgPtr - 0x200002a4 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x200002a4 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x200002a4 usbMsgPtr - .bss.num_buff.4877 - 0x200002a8 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + .bss.num_buff.4896 + 0x200002a8 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o *(COMMON) 0x200002ac . = ALIGN (0x4) *fill* 0x200002a9 0x3 @@ -438,12 +446,12 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x200002b0 __end__ = . [!provide] PROVIDE (end, .) *(.heap*) - .heap 0x200002b0 0x0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + .heap 0x200002b0 0x0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o 0x200002b0 __HeapLimit = . .stack_dummy 0x200002b0 0xc00 *(.stack*) - .stack 0x200002b0 0xc00 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + .stack 0x200002b0 0xc00 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o 0x20001800 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x20000c00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x20001800 PROVIDE (__stack, __StackTop) @@ -455,73 +463,73 @@ OUTPUT(build_stm/inlretro_stm.elf elf32-littlearm) .ARM.attributes 0x00000000 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o .ARM.attributes - 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o .ARM.attributes - 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .ARM.attributes - 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o .ARM.attributes - 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o + 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o .ARM.attributes - 0x000000c6 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_sqi.o) + 0x000000c6 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) .ARM.attributes - 0x000000e4 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o) + 0x000000e4 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o) .ARM.attributes 0x00000102 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o) .comment 0x00000000 0x6e - .comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o 0x6f (size before relaxing) - .comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o + .comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_line 0x00000000 0xe28 - .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o - .debug_line 0x0000006f 0x7e1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .debug_line 0x00000850 0x497 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .debug_line 0x00000ce7 0x141 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_line 0x00000000 0x1003 + .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o + .debug_line 0x0000006f 0x8cd C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .debug_line 0x0000093c 0x593 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .debug_line 0x00000ecf 0x134 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_info 0x00000000 0x1a15 - .debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o - .debug_info 0x00000083 0xf8f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .debug_info 0x00001012 0x90d C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .debug_info 0x0000191f 0xf6 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_info 0x00000000 0x1e03 + .debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o + .debug_info 0x00000083 0x1080 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .debug_info 0x00001103 0xc0a C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .debug_info 0x00001d0d 0xf6 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_abbrev 0x00000000 0x7ba - .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o - .debug_abbrev 0x00000014 0x330 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .debug_abbrev 0x00000344 0x3da C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .debug_abbrev 0x0000071e 0x9c C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_abbrev 0x00000000 0x7a3 + .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o + .debug_abbrev 0x00000014 0x319 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .debug_abbrev 0x0000032d 0x3da C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .debug_abbrev 0x00000707 0x9c C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_aranges 0x00000000 0xc0 +.debug_aranges 0x00000000 0xd0 .debug_aranges - 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o .debug_aranges - 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o .debug_aranges - 0x00000040 0x60 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x00000040 0x70 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o .debug_aranges - 0x000000a0 0x20 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o + 0x000000b0 0x20 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_loc 0x00000000 0x21de - .debug_loc 0x00000000 0x1ac6 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .debug_loc 0x00001ac6 0x663 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .debug_loc 0x00002129 0xb5 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_loc 0x00000000 0x288f + .debug_loc 0x00000000 0x1ec9 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .debug_loc 0x00001ec9 0x91c C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .debug_loc 0x000027e5 0xaa C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_ranges 0x00000000 0x1138 - .debug_ranges 0x00000000 0xfa8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .debug_ranges 0x00000fa8 0x180 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .debug_ranges 0x00001128 0x10 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_ranges 0x00000000 0x13a0 + .debug_ranges 0x00000000 0x1190 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .debug_ranges 0x00001190 0x200 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .debug_ranges 0x00001390 0x10 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o -.debug_str 0x00000000 0x8dd - .debug_str 0x00000000 0x72f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - 0x76f (size before relaxing) - .debug_str 0x0000072f 0x177 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - 0x3fb (size before relaxing) - .debug_str 0x000008a6 0x37 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_str 0x00000000 0x92e + .debug_str 0x00000000 0x72d C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + 0x794 (size before relaxing) + .debug_str 0x0000072d 0x1ca C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + 0x44e (size before relaxing) + .debug_str 0x000008f7 0x37 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o 0x1d1 (size before relaxing) -.debug_frame 0x00000000 0x158 - .debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o - .debug_frame 0x00000030 0xf8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o - .debug_frame 0x00000128 0x30 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o +.debug_frame 0x00000000 0x14c + .debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o + .debug_frame 0x00000030 0xec C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o + .debug_frame 0x0000011c 0x30 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o diff --git a/firmware/source/flash.c b/firmware/source/flash.c index 02cb88e..990adbe 100644 --- a/firmware/source/flash.c +++ b/firmware/source/flash.c @@ -105,6 +105,138 @@ uint8_t write_page_chr( uint8_t bank, uint8_t addrH, buffer *buff, write_funcptr } +uint8_t write_page_snes( uint8_t bank, uint8_t addrH, buffer *buff, write_funcptr wr_func, read_funcptr rd_func ) +{ + uint16_t cur = buff->cur_byte; + uint8_t n = buff->cur_byte; + uint8_t read; +// extern operation_info *oper_info; +// uint8_t cur_data = buff->data[n]; + +#ifdef AVR_CORE + wdt_reset(); +#endif + + + //set to program mode for first entry + EXP0_LO(); + + //enter unlock bypass mode + wr_func( 0x0AAA, 0xAA ); + wr_func( 0x0555, 0x55 ); + wr_func( 0x0AAA, 0x20 ); + + + while ( cur <= buff->last_idx ) { + //write unlock sequence + //need to make address and unlock data variable + //best for host to communcate these values + //actual value is part mapper dependent and part flash dependent + //mapper controlled address bits dictate where split is + //32KB banking A14-0 NES ctl, A15+ mapper ctl "bank" NROM, BNROM, ANROM + //addrH_dmask = 0b0111 1111 directly addressable addrH bits + //page2bankshft = A14->A8 = 7 shifts (equal to number of set bits in addrH_mask + //16KB banking A13-0 NES ctl, A14+ mapper ctl "bank" UxROM, MMC1 + //addrH_dmask = 0b0011 1111 + //page2bankshft = A13->A8 = 6 shifts + // 8KB banking A12-0 NES ctl, A13+ mapper ctl "bank" MMC3, FME7 + //addrH_dmask = 0b0001 1111 + //page2bankshft = A12->A8 = 5 shifts + // 4KB banking A11-0 NES ctl, A12+ mapper ctl "bank" ezNSF + //addrH_dmask = 0b0000 1111 + //page2bankshft = A11->A8 = 4 shifts + // + + //unlocked wr_func( 0x0AAA, 0xAA ); + //unlocked wr_func( 0x0555, 0x55 ); + + //wr_func( 0x0000, 0xA0 ); + snes_rom_wr_cur_addr( 0xA0 ); //gained ~3KBps (59.13KBps) inl6 with v3.0 proto + + wr_func( ((addrH<<8)| n), buff->data[n] ); + //wr_func( ((addrH<<8)| n), cur_data ); //didn't actually speed up + + //Targetting 2MByte 16mbit flash which doesn't have buffered writes + //currently have average flash speed of 21.05KBps going to start removing some of these NOPs + //and optimizing flash routine to get time down. + + //exit program mode + EXP0_HI(); + //pre-fetch next byte of data + //cur_data = buff->data[n+1]; +#ifdef AVR_CORE + wdt_reset(); +#endif + + //wait for byte to flash + // do { + // usbPoll(); + // read = rd_func((addrH<<8)|n); + // + // //} while( read != rd_func((addrH<<8)|n) ); + // } while( read != buff->data[n] ); + //this can cause things to hang on failed programs.. + //need a smarter flash polling algo, kind of a pain because we don't have + //a good way to toggle /OE or /CE quickly on v3 SNES boards + + + usbPoll(); + read = rd_func((addrH<<8)|n); + //prepare for upcoming write cycle, or allow for a polling read + EXP0_LO(); + //First check if already outputting final data + if (read != buff->data[n] ) { + //if not, lets see if toggle is occuring + EXP0_HI(); + while( read != rd_func((addrH<<8)|n) ){ + EXP0_LO(); + NOP(); NOP(); NOP(); NOP(); + NOP(); NOP(); NOP(); NOP(); + NOP(); NOP(); NOP(); NOP(); + EXP0_HI(); + read = rd_func((addrH<<8)|n); + } + //prepare for upcoming write cycle + EXP0_LO(); + } + +// //IDK why, but AVR will exit early sometimes +// //without this second check, ~20 errors per 32KByte on SNES v3.0 +// //All error bytes are 0xFF instead of true data +// //may need a smarter flash polling routine.. +// //Tried to add extra delay to read algo, and didn't change anything +// //Also have decent trust in read routine as it's comparable to page read +// //which works flawlessly for dumps. So think it has to do with flashing specifically... +// //Hmm maybe the avr is missing a read.. flash /CE, /OE, and /WE never toggle +// //so why would flash polling output different data between polls..? +// //Ahh this is the issue, adding the code below only adds delay which gives flash +// //enough time to complete write. + + + //retry if write failed + //this helped but still seeing similar fails to dumps + // if (read == buff->data[n]) { + n++; + cur++; + // } + + } + + buff->cur_byte = n; + + //exit unlock bypass mode + wr_func( 0x0000, 0x90 ); + wr_func( 0x0000, 0x00 ); + //reset the flash chip, supposed to exit too + wr_func( 0x0000, 0xF0 ); + + //exit program mode + EXP0_HI(); + + return SUCCESS; + +} + /* Desc:Flash buffer contents on to cartridge memory * Pre: buffer elements must be updated to designate how/where to flash * buffer's cur_byte must be cleared or set to where to start flashing @@ -141,6 +273,13 @@ uint8_t flash_buff( buffer *buff ) { // buff->last_idx, ~FALSE ); break; case SNESROM: + addrH |= 0x80; //$8000 LOROM space + //need to split page_num + //A14-8 page_num[7-0] + //A15 high (LOROM) + //A23-16 page_num[14-8] + HADDR_SET( (buff->page_num)>>7 ); + write_page_snes( 0, addrH, buff, snes_rom_wr, snes_rom_rd ); case SNESRAM: //warn addrX = ((buff->page_num)>>8); break; diff --git a/firmware/source/pinport_al.h b/firmware/source/pinport_al.h index 75d3d5b..79ebf87 100644 --- a/firmware/source/pinport_al.h +++ b/firmware/source/pinport_al.h @@ -8,6 +8,7 @@ #ifdef AVR_CORE #include "avr_gpio.h" + #include #elif STM_CORE #include #endif diff --git a/firmware/source/snes.c b/firmware/source/snes.c index bb8bc16..10a3448 100644 --- a/firmware/source/snes.c +++ b/firmware/source/snes.c @@ -89,7 +89,7 @@ uint8_t snes_rom_rd( uint16_t addr ) /* Desc:SNES ROM Write * /ROMSEL always set low * EXP0/RESET unaffected - * read value from currently selected bank + * write value to currently selected bank * Pre: snes_init() setup of io pins * Post:data latched by anything listening on the bus * address left on bus @@ -104,22 +104,75 @@ void snes_rom_wr( uint16_t addr, uint8_t data ) DATA_OP(); DATA_SET(data); - //PRG R/W LO - ROMSEL_LO(); + //set /WR low first as this sets direction of + //level shifter on v3.0 boards CSWR_LO(); + //Then set romsel as this enables output of level shifter + ROMSEL_LO(); + //Doing the other order creates bus conflict between ROMSEL low -> WR low //give some time NOP(); NOP(); + NOP(); //3x total NOPs fails ~2Bytes per 2MByte on v3.0 proto and inl6 + //swaping /WR /ROMSEL order above helped greatly + //but still had 2 byte fails adding NOPS + NOP(); //4x total NOPs passed all bytes v3.0 SNES and inl6 + //NOP(); + //NOP(); //6x total NOPs passed all bytes + //latch data to cart memory/mapper - ROMSEL_HI(); CSWR_HI(); + ROMSEL_HI(); //Free data bus DATA_IP(); } +/* Desc:SNES ROM Write to current address + * /ROMSEL always set low + * EXP0/RESET unaffected + * write value to currently selected bank, and current address + * Mostly used when address is don't care + * Pre: snes_init() setup of io pins + * Post:data latched by anything listening on the bus + * address left on bus + * Rtn: None + */ +void snes_rom_wr_cur_addr( uint8_t data ) +{ + +// ADDR_SET(addr); + + //put data on bus + DATA_OP(); + DATA_SET(data); + + //set /WR low first as this sets direction of + //level shifter on v3.0 boards + CSWR_LO(); + //Then set romsel as this enables output of level shifter + ROMSEL_LO(); + //Doing the other order creates bus conflict between ROMSEL low -> WR low + + //give some time + NOP(); + NOP(); + NOP(); //3x total NOPs fails ~2Bytes per 2MByte on v3.0 proto and inl6 + //swaping /WR /ROMSEL order above helped greatly + //but still had 2 byte fails adding NOPS + NOP(); //4x total NOPs passed all bytes v3.0 SNES and inl6 + //NOP(); + //NOP(); //6x total NOPs passed all bytes + + //latch data to cart memory/mapper + CSWR_HI(); + ROMSEL_HI(); + + //Free data bus + DATA_IP(); +} /* Desc:SNES ROM Page Read with optional USB polling * /ROMSEL always low, EXP0/RESET unaffected * if poll is true calls usbdrv.h usbPoll fuction diff --git a/firmware/source/snes.h b/firmware/source/snes.h index ebe2188..91f6476 100644 --- a/firmware/source/snes.h +++ b/firmware/source/snes.h @@ -9,6 +9,7 @@ uint8_t snes_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata ); uint8_t snes_rom_rd( uint16_t addr ); void snes_rom_wr( uint16_t addr, uint8_t data ); +void snes_rom_wr_cur_addr( uint8_t data ); uint8_t snes_rom_page_rd_poll( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t len, uint8_t poll ); diff --git a/host/scripts/app/buffers.lua b/host/scripts/app/buffers.lua index 2f6737e..6ab40bc 100644 --- a/host/scripts/app/buffers.lua +++ b/host/scripts/app/buffers.lua @@ -93,24 +93,24 @@ end -- pass in table buffer numbers would like to wait on -- pass in table of status waiting on for all buffers -local function status_wait( buff_nums, end_status ) +local function status_wait( buff_nums, end_status, debug ) local rv = nil for key_buff, buff in pairs(buff_nums) do rv = nil - print("buffer wait:", key_buff, buff) + if debug then print("buffer wait:", key_buff, buff) end while rv ~= "EXIT" do for key_stat, stat in pairs(end_status) do rv = (dict.buffer("GET_PRI_ELEMENTS", nil, buff, nil, true )) --status is the second byte of return data rv = string.unpack("B", rv, 2) if rv == op_buffer[stat] then - print("buffer", buff, rv, "matched", stat) + if debug then print("buffer", buff, rv, "matched", stat) end rv = "EXIT" break else - print("buffer", buff, "is", rv, "not", stat) + if debug then print("buffer", buff, "is", rv, "not", stat) end end end end diff --git a/host/scripts/app/cart.lua b/host/scripts/app/cart.lua index be0d8c2..b31b31f 100644 --- a/host/scripts/app/cart.lua +++ b/host/scripts/app/cart.lua @@ -60,6 +60,9 @@ local function detect_console( debug ) --bank 0 and bank 1 would have same reset vector on a NES cart --these probably differ on a SNES if there's more than 32/64KB of ROM. + --fake cart detection of erased board for now + cart_console = "SNES" + if bank0vect ~= bank1vect then if (bank0vect >= 0x8000) and (bank0vect < 0xFFFA) then if debug then print("valid SNES reset vector found that differs between bank0 & bank1") end diff --git a/host/scripts/app/dump.lua b/host/scripts/app/dump.lua index f768f06..56d7e60 100644 --- a/host/scripts/app/dump.lua +++ b/host/scripts/app/dump.lua @@ -190,7 +190,7 @@ local function dump_nes( file, debug ) -- check(! set_operation( transfer, STARTDUMP ), "Unable to set buffer operation"); dict.operation("SET_OPERATION", op_buffer["STARTDUMP"] ) -- --- tstop = clock(); +-- tstop = os.clock(); -- float timediff = ( (float)(tstop-tstart) / CLOCKS_PER_SEC); -- printf("total time: %fsec, speed: %fKBps", timediff, (512/timediff)); -- //TODO flush file from time to time..? @@ -280,34 +280,59 @@ local function dump_snes( file, mapping, debug ) -- //tell buffers what function to use for dumping -- //TODO when start implementing other mappers - --debugging print out buffer elements - --print("\nget operation:") - --dict.operation("GET_OPERATION" ) - --print("\n\ngetting cur_buff status") - --dict.buffer("GET_CUR_BUFF_STATUS" ) - --print("\n\ngetting elements") - --dict.buffer("GET_PRI_ELEMENTS", nil, buff0 ) - --dict.buffer("GET_PRI_ELEMENTS", nil, buff1 ) - --dict.buffer("GET_SEC_ELEMENTS", nil, buff0 ) - --dict.buffer("GET_SEC_ELEMENTS", nil, buff1 ) - --dict.buffer("GET_PAGE_NUM", nil, buff0 ) - --dict.buffer("GET_PAGE_NUM", nil, buff1 ) - print("\n\nsetting operation STARTDUMP"); --inform buffer manager to start dumping operation now that buffers are initialized dict.operation("SET_OPERATION", op_buffer["STARTDUMP"] ) --need these calls to delay things a bit to let first buffer dump complete.. --wait for first buffer to finish dumping before calling payload - buffers.status_wait({buff0}, {"DUMPED"}) + --buffers.status_wait({buff0}, {"DUMPED"}) + + local tstart = os.clock(); + local tlast = tstart print("starting first payload"); --now just need to call series of payload IN transfers to retrieve data - for i=1, (2048*1024/buff_size) do + for i=1, (2048*1024/buff_size) do --dump next buff + --for i=1, (1024*1024/buff_size) do --dump buff0 then buff1 + --for i=1, (32*1024/buff_size) do --dump buff0 then buff1 + --stm adapter had trouble dumping + --same buffer was getting sent twice, so I think + --buffer mangager wasn't getting enough time to update + --to point to next buffer and last buffer was redumped + --that doesn't quite make sense, but something like that is going on + --need to setup buffer manager to nak anytime something like this happens + --the following setup slows down everything due to status waits.. +-- buffers.status_wait({buff0}, {"DUMPED"}) +-- file:write( dict.buffer_payload_in( buff_size )) +-- buffers.status_wait({buff1}, {"DUMPED"}) + + --stm adapter having issues with race situation.. + --can't dump as fast as host is requesting + --and driver doesn't nak until ready to send data + cur_buff_status = dict.buffer("GET_CUR_BUFF_STATUS") + while (cur_buff_status ~= op_buffer["DUMPED"]) do + -- nak = nak +1 + --print(nak, "cur_buff->status: ", cur_buff_status) + cur_buff_status = dict.buffer("GET_CUR_BUFF_STATUS") + end file:write( dict.buffer_payload_in( buff_size )) + -- print("dumped page:", i) + + if ( (i % (1024*1024/buff_size/16)) == 0) then + local tdelta = os.clock() - tlast + print("time delta:", tdelta, "seconds, speed:", (1024/16/tdelta), "KBps"); + print("dumped part:", i/1024, "of 16 \n") + tlast = os.clock(); + end end - print("payload done"); + print("DUMPING DONE") + + tstop = os.clock() + timediff = ( tstop-tstart) + print("total time:", timediff, "seconds, average speed:", (2048/timediff), "KBps") + --buffer manager updates from USB_UNLOADING -> DUMPING -> DUMPED --while one buffer is unloading, it sends next buffer off to dump --payout opcode updates from DUMPED -> USB_LOADING diff --git a/host/scripts/app/erase.lua b/host/scripts/app/erase.lua index 80b3d4a..362e8b6 100644 --- a/host/scripts/app/erase.lua +++ b/host/scripts/app/erase.lua @@ -54,6 +54,55 @@ local function erase_nes() end +-- local functions +local function erase_snes(debug) + + local rv = nil + + print("erasing SNES takes about 30sec"); + + dict.io("IO_RESET") + dict.io("SNES_INIT") + + --WR $AAA:AA $555:55 $AAA:AA + dict.snes("SNES_SET_BANK", 0x00) + + --put cart in program mode + dict.pinport("CTL_SET_LO", "SNES_RST") + + dict.snes("SNES_ROM_WR", 0x0AAA, 0xAA) + dict.snes("SNES_ROM_WR", 0x0555, 0x55) + dict.snes("SNES_ROM_WR", 0x0AAA, 0x80) + dict.snes("SNES_ROM_WR", 0x0AAA, 0xAA) + dict.snes("SNES_ROM_WR", 0x0555, 0x55) + dict.snes("SNES_ROM_WR", 0x0AAA, 0x10) + + --exit program mode + dict.pinport("CTL_SET_HI", "SNES_RST") + + rv = dict.snes("SNES_ROM_RD", 0x0000) + + local i = 0 + + while ( rv ~= 0xFF ) do + rv = dict.snes("SNES_ROM_RD", 0x0000) + i = i + 1 + if debug then print(" ", i,":", string.format("%x",rv)) end + end + print(i, " done erasing snes.\n"); + + --put cart in program mode + dict.pinport("CTL_SET_LO", "SNES_RST") + + --reset flash + dict.snes("SNES_ROM_WR", 0x0000, 0xF0) + + --return to PLAY mode + dict.pinport("CTL_SET_HI", "SNES_RST") + +end + + -- global variables so other modules can use them @@ -62,6 +111,7 @@ end -- functions other modules are able to call erase.erase_nes = erase_nes +erase.erase_snes = erase_snes -- return the module's table return erase diff --git a/host/scripts/app/flash.lua b/host/scripts/app/flash.lua index 23463b0..4308415 100644 --- a/host/scripts/app/flash.lua +++ b/host/scripts/app/flash.lua @@ -210,6 +210,7 @@ local function flash_nes( file, debug ) print("\n\nsetting operation STARTFLASH"); -- //inform buffer manager to start dumping operation now that buffers are initialized dict.operation("SET_OPERATION", op_buffer["STARTFLASH"] ) + print("set operation STARTFLASH"); -- clock_t tstart, tstop; -- tstart = clock(); @@ -364,6 +365,128 @@ local function flash_nes( file, debug ) end +local function flash_snes( file, debug ) +-- //make some checks to ensure rom is compatible with cart +-- +-- //first do some checks like ensuring proper areas or sectors are blank +-- +-- //erase sectors or chip as needed +-- +-- //reset, allocate, and initialize device buffers +-- +-- //initialize mapper registers as needed for memory being programmed +-- +-- //set device operation to STARTFLASH +-- +-- //send payload data +-- +-- //run checksums to verify successful flash operation +-- + local buff0 = 0 + local buff1 = 1 + local cur_buff_status = 0 + local data = nil --lua stores data in strings + + if debug then print("flashing cart") end + +-- //start with reset and init + dict.io("IO_RESET") + dict.io("SNES_INIT") + +-- //start operation at reset + dict.operation("SET_OPERATION", op_buffer["RESET"] ) + +-- //setup buffers and manager +-- //reset buffers first + dict.buffer("RAW_BUFFER_RESET") +-- //need to allocate some buffers for flashing +-- //2x 256Byte buffers + local num_buffers = 2 + local buff_size = 256 + print("allocating buffers") + assert(buffers.allocate( num_buffers, buff_size ), "fail to allocate buffers") + +-- //set mem_type and part_num to designate how to get/write data + print("setting map n part") + dict.buffer("SET_MEM_N_PART", (op_buffer["SNESROM"]<<8 | op_buffer["MASKROM"]), buff0 ) + dict.buffer("SET_MEM_N_PART", (op_buffer["SNESROM"]<<8 | op_buffer["MASKROM"]), buff1 ) +-- //set multiple and add_mult only when flashing +-- //TODO +-- //set mapper, map_var, and function to designate read/write algo +-- +-- //just dump visible NROM memory to start + print("setting map n mapvar") + dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["LOROM"]<<8 | op_buffer["NOVAR"]), buff0 ) + dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["LOROM"]<<8 | op_buffer["NOVAR"]), buff1 ) + + --set cart in program mode + dict.pinport("CTL_SET_LO", "SNES_RST") + + print("\n\nsetting operation STARTFLASH"); +-- //inform buffer manager to start dumping operation now that buffers are initialized + dict.operation("SET_OPERATION", op_buffer["STARTFLASH"] ) + print("set operation STARTFLASH"); --this prints fine not getting stuck above here + + cur_buff_status = dict.buffer("GET_CUR_BUFF_STATUS") + print("got status") + dict.operation("GET_OPERATION") + print("got operation") + + --think the not responding bug is related to payload out before device is ready..? + + local tstart = os.clock(); + local tlast = tstart + + local i = 1 + local nak = 0 + for bytes in file:lines(buff_size) do + dict.buffer_payload_out( buff_size, bytes ) + + cur_buff_status = dict.buffer("GET_CUR_BUFF_STATUS") + while (cur_buff_status ~= op_buffer["EMPTY"]) do + nak = nak +1 + --print(nak, "cur_buff->status: ", cur_buff_status) + cur_buff_status = dict.buffer("GET_CUR_BUFF_STATUS") + end + if ( i == 2048*1024/buff_size) then break end +-- if ( i == 32*1024/buff_size) then break end + i = i + 1 + if ( (i % (2048*1024/buff_size/16)) == 0) then + local tdelta = os.clock() - tlast + print("time delta:", tdelta, "seconds, speed:", (2048/16/tdelta), "KBps"); + print("flashed part:", i/512, "of 16 \n") + tlast = os.clock(); + end + end + print("FLASHING DONE") + print("number of naks", nak) + tstop = os.clock() + timediff = ( tstop-tstart) + print("total time:", timediff, "seconds, average speed:", (2048/timediff), "KBps") +-- //TODO flush file from time to time..? +-- +-- //The device doesn't have a good way to respond if the last buffer is flashing +-- //and the current one is full. We can only send a payload if the current buffer +-- //is empty. + + -- wait till all buffers are done + --while flashing buffer manager updates from USB_FULL -> FLASHING -> FLASHED + --then next time a USB_FULL buffer comes it it updates the last buffer (above) to EMPTY + --the next payload opcode updates from EMPTY -> USB_LOADING + --so when complete, buff0 should be EMPTY, and buff1 should be FLASHED + --just pass the possible status to exit wait, and buffer numbers we're waiting on + buffers.status_wait({buff0, buff1}, {"EMPTY","FLASHED"}) + + dict.operation("SET_OPERATION", op_buffer["RESET"] ) + + --set cart in play mode + dict.pinport("CTL_SET_HI", "SNES_RST") + + dict.buffer("RAW_BUFFER_RESET") + dict.io("IO_RESET") + +end + -- global variables so other modules can use them @@ -372,6 +495,7 @@ end -- functions other modules are able to call flash.flash_nes = flash_nes +flash.flash_snes = flash_snes -- return the module's table return flash diff --git a/host/scripts/app/snes.lua b/host/scripts/app/snes.lua index 81c8a34..5f77daf 100644 --- a/host/scripts/app/snes.lua +++ b/host/scripts/app/snes.lua @@ -54,6 +54,10 @@ local function read_flashID( debug ) dict.snes("SNES_ROM_WR", 0x0AAA, 0xAA) dict.snes("SNES_ROM_WR", 0x0555, 0x55) dict.snes("SNES_ROM_WR", 0x0AAA, 0x90) + + --exit program mode + dict.pinport("CTL_SET_HI", "SNES_RST") + --read manf ID rv = dict.snes("SNES_ROM_RD", 0x0000) if debug then print("attempted read SNES ROM manf ID:", string.format("%X", rv)) end @@ -79,13 +83,15 @@ local function read_flashID( debug ) -- flash->wr_opcode = NES_PPU_WR; -- } -- + --put cart in program mode + dict.pinport("CTL_SET_LO", "SNES_RST") + --exit software --- dict.nes("NES_PPU_WR", 0x0000, 0xF0) dict.snes("SNES_ROM_WR", 0x0000, 0xF0) --- - + --exit program mode dict.pinport("CTL_SET_HI", "SNES_RST") + --return true diff --git a/host/scripts/inlretro.lua b/host/scripts/inlretro.lua index 8c4b9c7..cc3feca 100644 --- a/host/scripts/inlretro.lua +++ b/host/scripts/inlretro.lua @@ -8,6 +8,7 @@ function main () local dict = require "scripts.app.dict" local cart = require "scripts.app.cart" local nes = require "scripts.app.nes" + local snes = require "scripts.app.snes" local dump = require "scripts.app.dump" local erase = require "scripts.app.erase" local flash = require "scripts.app.flash" @@ -29,12 +30,12 @@ function main () print(string.format("%X", rv)) end - print(dict.io("EXP0_PULLUP_TEST")) +-- print(dict.io("EXP0_PULLUP_TEST")) -- debug = true -- rv = cart.detect(debug) - if cart.detect_console() then + if cart.detect_console(true) then if cart_console == "NES" or cart_console == "Famicom" then dict.io("IO_RESET") dict.io("NES_INIT") @@ -91,6 +92,47 @@ function main () dict.io("IO_RESET") elseif cart_console == "SNES" then + dict.io("IO_RESET") + dict.io("SNES_INIT") + + --SNES detect HiROM or LoROM + --nes.detect_mapper_mirroring(true) + local snes_mapping = "LOROM" + --SNES detect if there's save ram and size + + --SNES detect if able to read flash ID's + snes.read_flashID(true) + + + + --FLASHING: + --erase cart + -- erase.erase_snes( false ) + --open file + local file + file = assert(io.open("flash.bin", "rb")) + --determine if auto-doubling, deinterleaving, etc, + --needs done to make board compatible with rom + --flash cart + flash.flash_snes( file, true ) + --close file + assert(file:close()) + + --DUMPING: + --create new file + local file + file = assert(io.open("snesdump.bin", "wb")) + --dump cart into file + dump.dump_snes( file, snes_mapping, true ) + + --close file + assert(file:close()) + + + --trick to do this at end while debugging so don't have to wait for it before starting + erase.erase_snes( false ) + + dict.io("IO_RESET") elseif cart_console == "SegaGen" then