diff --git a/firmware/build_avr/avr_kazzo.elf b/firmware/build_avr/avr_kazzo.elf index 0d8da16..87471ad 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 ca083ee..986f761 100644 --- a/firmware/build_avr/avr_kazzo.hex +++ b/firmware/build_avr/avr_kazzo.hex @@ -1,4 +1,4 @@ -:100000000C9476000C94B8010C9493000C9493001B +:100000000C9476000C94F40A0C9493000C949300D6 :100010000C9493000C9493000C9493000C94930014 :100020000C9493000C9493000C9493000C94930004 :100030000C9493000C9493000C9493000C949300F4 @@ -13,84 +13,381 @@ :1000C00049006E00660069006E00690074006500FA :1000D0004E00650073004C006900760065007300F7 :1000E0002E0063006F006D000403090411241FBE7D -:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0ECED8A -:10010000F5E002C005900D92A230B107D9F721E0C9 -:10011000A2E0B1E001C01D92AD32B207E1F70E944A -:10012000CC020C94EC020C94000080E0089580E076 -:100130000895CF93DF9360911301635067FD91C0E1 -:1001400080911001CCE0D0E0C81BD109C95EDE4F20 -:1001500080910F018D3209F0CFC0683009F07FC067 -:1001600083EC809303018AE58093010110920201E0 -:100170008881807679F0CE010E9495008F3F09F446 -:1001800066C09F81911169C09E81981708F065C073 -:10019000892F63C02A8110920C01998191110AC0A4 -:1001A00010920D012CE031E082E030931201209397 -:1001B0001101E7CF953029F4209314012CE031E0B0 -:1001C000F4CF963099F59B81913059F48EE890E008 -:1001D000909312018093110182E190E490930201C7 -:1001E000D0CF923019F48CE790E0F2CF9330A9F79A -:1001F000211108C088EE90E09093120180931101C4 -:1002000084E0EBCF213041F48EEB90E0909312012B -:10021000809311018AE2E1CF2230F9F680EA90E082 -:1002200090931201809311018EE1D7CF983059F04D -:10023000993019F420931601C1CF81E09A3009F466 -:10024000BDCF80E0BBCF26E131E081E0AECF988129 -:1002500097FD8E8190E890930201809300011092A7 -:1002600013018091010184FF3AC0809100018F3F0A -:10027000B1F1C82F893008F0C8E08C1B80930001D1 -:100280008091030198E8892780930301CC23D1F062 -:1002900080911101909112012091020126FF3FC02F -:1002A000A4E0B1E0FC012C2F34913D933196215014 -:1002B000D9F701962FEF2C0F820F911D9093120109 -:1002C000809311016C2F84E091E00E94B401CC5F17 -:1002D000CC3019F08FEF80930001C093010184E1CD -:1002E00099B1947131F48150D9F7109214011092A0 -:1002F0000E01DF91CF9108958091020187FFAFCF6A -:10030000CE010E9497008F3F21F48EE1809301017E -:10031000A6CF882309F4A3CF10920001A0CFE4E078 -:10032000F1E0DC012C2F3D9131932150E1F7C1CF59 -:10033000E9E6F0E0808182608083E89A0895A82F42 -:10034000B92F80E090E041E050EA609530E009C0CC -:100350002D9182279795879510F084279527305EF9 -:10036000C8F36F5FA8F30895EADF8D939D93089516 -:10037000CF93CFB7CF93DF93C3954C9BE9F74C9BBB -:100380000BC04C9B09C04C9B07C04C9B05C04C9BB1 -:1003900003C04C9B01C089C06F93C0911001DD2741 -:1003A000C95EDE4F2F9365E54C9B03C02F916F9183 -:1003B000E6CF0F931F934F9320E040E15F9309B185 -:1003C000047104FB27F93F9350E03BE039C01471FE -:1003D00040642F77012F5F5F1EC0406819B1147110 -:1003E0002F7752501FC0406409B12F770471D1F1AB -:1003F0005F5F00C023C0406219B12F77147191F183 -:100400005F5F00C025C004711027515012F45D5F7A -:100410000000115027952C3F19B1C8F6147101271F -:10042000015027952C3FC8F64227499309B1047122 -:1004300010274F73115027952C3FA8F646954695E7 -:1004400019B1147179F00127015027952C3F98F6C6 -:100450006B5A60F3315009B1B0F600C011E01CBB1B -:10046000002717C03B503195C31BD04011E01CBB87 -:100470000881033CF9F00B34E9F020910E01198159 -:10048000110F1213EDCF093651F10D3211F0013E6B -:1004900039F7009315013F915F914F911F910F9193 -:1004A0002F916F91CCB3C0FD67CFDF91CF91CFBFBC -:1004B000CF91189520911501222369F31091130112 -:1004C000112339F534303AF13093130120930F01A1 -:1004D000109110013BE0311B309310011CC00091C2 -:1004E00013010130B4F40AE53091010134FD14C068 -:1004F00000930101C3E0D1E013C0052710E000C064 -:1005000000000BB91AC0052710E0221F1DC010E023 -:1005100021C04AE502C032ED432FC4E1D0E032E011 -:100520001AB114615C9A0BB11AB954E120E865E381 -:1005300020FF05270BB9279517951C3FF0F6669508 -:10054000B8F7B1F720FF05270BB9279517951C3F82 -:10055000D0F62795179517FF052700001C3F0BB90C -:10056000B0F629913A9519F70B7E10911401110FED -:10057000C651D0400BB911F010930E0111E01CBB15 -:1005800000611AB11B7E402F4B7E54E05A95F1F763 -:100590000BB91AB94BB97FCF9EE088E10FB6F8943A -:1005A000A895809360000FBE909360000E94980110 -:1005B000549A80E0815041F4549878945198599A13 -:1005C000A8950E949900FCCFA895EFE9FFE031972C -:0C05D000F1F700C00000EECFF894FFCF60 -:0205DC00FF5AC4 +:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0E4E699 +:10010000F8E102C005900D92A630B107D9F723E0BF +:10011000A6E0B1E001C01D92AA3AB207E1F70E9441 +:10012000080C0C94300C0C9400000F931F93CF9389 +:10013000DF93EC01FB01D9010091490110914A01C3 +:10014000888187FF09C08E818C93442399F00481B4 +:10015000158180E883831DC08FEF8C938E818093FF +:100160003401442309F44BC0709366036093650324 +:1001700080E9F0CFE0912201F09123018381883D55 +:10018000A1F50481158180E88383E0912201F0913B +:1001900023011782E0912201F091230183818039AC +:1001A000F1F48A81813711F08034C9F4E09165035C +:1001B000F09166030480F581E02D8C818083E091CD +:1001C0006503F09166030480F581E02D8D818183C4 +:1001D000E0916503F091660387818E5F8783C80194 +:1001E000DF91CF911F910F910895803D11F41C92E2 +:1001F000CCCF8FEF8C9380E10E947B06C6CFE0913D +:100200002201F09123018381811106C0F0936603DE +:10021000E093650380E9B8CF883969F7E8CFE5E571 +:10022000F1E08FEF819391E0E536F907D9F78093FC +:100230004801809327018093470180932601809392 +:10024000380180931501809337018093140181E078 +:100250000C947B06CF93DF93FC0150E0CA01820F20 +:10026000911D4197E4F52223E1F183818F3FD9F578 +:1002700082818F3FD1F5DA01AB5ABE4FED0180E0AC +:1002800099919F3FA1F58F5F2813FACF6283138264 +:10029000982F9295990F907E915096831782108691 +:1002A0001182108211861286138614861586168690 +:1002B000178695E0440F551F9A95E1F720910001AC +:1002C00030910101420F531F5583448390E06D9399 +:1002D0009F5F8913FCCF80E0DF91CF9108958EEB73 +:1002E000FBCF82ECF9CF8FEBF7CF80ECF5CF81EC31 +:1002F000F3CFCF93DF93DC01EB019A0112969C912F +:10030000129780ED890F803318F513968C9113970F +:10031000813041F0E8F08230A9F08330B1F085EB14 +:10032000888346C0E4E2F1E0913509F476C048F5EF +:10033000913309F449C078F49923B9F19033E1F18C +:1003400084EBEECFE5E3F1E0EFCFE2E1F1E0ECCFDB +:10035000E5E4F1E0E9CF933309F446C0E8F19035E4 +:1003600079F7188286E0898386818A8383818B83EB +:1003700087818C8380858D8382818E8387858F831F +:1003800017C0903808F05FC0903708F055C090361D +:1003900079F19136C9F1923599F6188282E0898314 +:1003A00080818A8381818B8303C00E940F01188220 +:1003B000CE01DF91CF91089514968C9114971596E4 +:1003C0009C9191878287F3CF14968C911497159600 +:1003D0009C9193878487EBCF14968C9114971596F4 +:1003E0009C9195878687E3CF14968C918787DFCF82 +:1003F000188281E089831496ED91FC911597EB5A50 +:10040000FE4F80818A83D4CF188281E08983E09176 +:100410002201F09123018381F5CF188286E0898340 +:1004200081858A8382858B8383858C8384858D8374 +:1004300085858E838685A3CF40E0BF01CD01DF9106 +:10044000CF910C949500892F8770813049F0F8F096 +:10045000823001F1833009F062CFE2E1F1E002C0C5 +:10046000E4E2F1E0903808F4A3CF9838B0F0905966 +:10047000983008F09DCF188213968C91139780873F +:1004800014968D919C9115979183808391CFE5E48B +:10049000F1E0E8CFE5E3F1E0E5CF14964C91149755 +:1004A00015966C91159713962C91CF010E942A01F5 +:1004B00037CF90914801809127018F3F79F481E0F7 +:1004C0009F3F09F480E0909138019F3F09F083E05D +:1004D000909115019F3F09F084E0089582E0F3CFE9 +:1004E000623059F421E08534920749F121E08432E9 +:1004F000920789F485E491E00EC0633069F421E04D +:1005000085349207E1F021E084329207D9F021E0AE +:100510008533920779F308956430E9F721E0853453 +:10052000920769F021E08432920761F021E085337F +:10053000920759F021E08231920769F7DBCF84E21C +:1005400091E0089585E391E0089582E191E00895B6 +:100550001F93CF93DF930E948106823D09F071C003 +:100560000E9459028093060185E491E09093230153 +:10057000809322010E948106823DA1F4D091060160 +:100580008091220190912301C1E0CD1708F45FC052 +:10059000909323018093220120E8FC01238380EDC6 +:1005A0000E947B060E948106823F41F480EF0E94F8 +:1005B0007B06E0912201F091230113820E948106C3 +:1005C000C82F803DE1F48091220190912301FC012C +:1005D00023812038A1F4609106010E94700290935B +:1005E000230180932201FC011782C3830E944003F0 +:1005F000E0912201F0912301882371F183830E940D +:100600008106182F803FC9F4C0912201D0912301A7 +:100610008B81883991F460910601CE010E947002AD +:100620009093230180932201FC0113821B83CE014E +:100630000E9422048823D1F08B83DF91CF911F91F8 +:1006400008950E948106823F09F094CF89CF6D2FD3 +: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 :00000001FF diff --git a/firmware/build_stm/inlretro_stm.bin b/firmware/build_stm/inlretro_stm.bin index a198145..21ace2f 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 3eef63e..7f3af3e 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 17bc170..fa8fb78 100644 --- a/firmware/build_stm/inlretro_stm.hex +++ b/firmware/build_stm/inlretro_stm.hex @@ -1,5 +1,5 @@ :020000040800F2 -:1000000000180020C1000008FD0000088903000856 +:1000000000180020C1000008FD00000801170008CA :1000100000000000000000000000000000000000E0 :10002000000000000000000000000000FD000008CB :100030000000000000000000FD000008FD000008B6 @@ -10,80 +10,478 @@ :10008000FD000008FD000008FD000008FD0000085C :10009000FD000008FD000008FD000008FD0000084C :1000A000FD000008FD000008FD000008FD0000083C -:1000B000FD000008FD000008FD000008BD0100086B +:1000B000FD000008FD000008FD0000080101000827 :1000C00009490A4A0A4B9B1A03DD043BC858D05021 :1000D000FBDC0849084A0020521A02DD043A885025 -:1000E000FCDC00F053F90000580500080000002077 -:1000F000000000200000002014000020FEE7C046A1 -:10010000224B10B51968224B224C1A885208520013 -:10011000505A214A10801A88023292B21A8052082C -:100120005200505A1D4A10801A88023292B21A8028 -:1001300052085200505A1A4A10801A88194802323E -:1001400092B21A8052085200515A174A11801A88E6 -:100150002188023292B21A808A4210D908318A1A52 -:1001600092B2028022881A801049114B0A881343E8 -:10017000104A1A40302353409BB20B8010BD0E4CE6 -:1001800021888A42EAD808230380EDE71000002086 -:100190000A0000200800002040600040426000404B -:1001A000446000400260004046600040005C004047 -:1001B0008080FFFFBF8FFFFF0600002070B5544C0A -:1001C00023881BB2002B00DB89E02388514A1A40A8 -:1001D00080231343238023881B0500D47CE04E4AF0 -:1001E0007F211368013313604C4B1A7815008D433F -:1001F0004B490D70DD884B490D8000254A490D8023 -:1002000060211140A94201D0484E358052B2002AE7 -:1002100039DA002910D15A78062A0BD15B881A0ADC -:10022000022A16D0032A16D0012A1BD1404A1220D6 -:10023000404B1A603D4B188022883F4B13433F4A86 -:100240001A40C0239B0153409BB22380FFF758FF05 -:1002500036E03B4AEBE7DBB2012B0AD0002B03D0A0 -:10026000022B0BD00800E5E7364A324B04201A6017 -:10027000E0E7354A2F4B35481A60DBE7344A2D4B0F -:1002800034481A60D6E7002908D15A78052A05D1E2 -:100290005B88314A1370314ADBB213800021238816 -:1002A0002F4A13402F4A13439BB223802E4B1980B1 -:1002B00023881A432D4B1A402D4B5A4092B222806C -:1002C0002C4BDA8F520506D580212B4A1180002253 -:1002D000DA872A4B238070BD294B1B88F0E72388DF -:1002E0001B06EDD52388274A1340802212021343B0 -:1002F00023800B4B1B78802BA8D0174A1378002B38 -:10030000DED080210B431C490B8000231370D7E7FC -:10031000005C00408F0F000000000020486000409B -:100320000C000020060000200A0000200800002029 -:10033000B2040008100000208081FFFF8FBFFFFF84 -:10034000A0040008C4040008C80400082A03000030 -:100350001C0500081E03000004000020506000403F -:100360008F8EFFFF8080FFFF02600040BFBFFFFF56 -:1003700030300000065C00404C5C00402032000041 -:10038000066000400F8FFFFFFEE700009022334B16 -:100390001203196870B50A431A6080229202196824 -:1003A0001142FCD0012259680A435A6080225968E0 -:1003B00052020A435A6080225968D2020A435A60A4 -:1003C0008022196852040A431A6080229204196834 -:1003D0001142FCD080201A6B02431A638022D96933 -:1003E00012040A43DA6162B602241D4A4026D18F04 -:1003F0001C4DA143D187D18F013CA143D18700215E -:10040000194CE1872980194D2E80194D08362E8010 -:100410008026184D76012E80174D2880E1871748D9 -:100420001749088080201749000608608021D08F76 -:10043000C9000143D1871449144A118080225969A7 -:1004400012030A435A61124B12491A680A401A6091 -:100450008022D968D2040A43DA60FEE70010024025 -:10046000025C0040505C0040065C004000600040C0 -:1004700004600040066000404C5C004020320000F8 -:10048000005C004000E100E00080FFFF585C00409D -:1004900000080048FFFFFFFBF8B5C046F8B5C046AE -:1004A000090212000101008032090400000000006E -:1004B000000012010002FF000008C016DC05000267 -:1004C00001020001040309042A0349006E006600CA -:1004D00069006E006900740065004E0065007300DD -:1004E0004C0069007600650073002E0063006F0009 -:1004F0006D0000000000000000000000000000008F -:1005000000000000000000000000000000000000EB -:100510000000000000000000000000001E03490071 -:100520004E004C00200052006500740072006F0005 -:100530002D00500072006F006700000000000000F6 -:1005400000000000000000000000000000000000AB -:080550000000000000000000A3 +:1000E000FCDC01F0DFFB0000381E000800000020EF +: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 :04000005080000C12E :00000001FF diff --git a/firmware/build_stm/inlretro_stm.map b/firmware/build_stm/inlretro_stm.map index 99091e0..7d22b00 100644 --- a/firmware/build_stm/inlretro_stm.map +++ b/firmware/build_stm/inlretro_stm.map @@ -18,11 +18,21 @@ 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:/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) Allocating common symbols Common symbol size file -usbMsgPtr 0x4 source_stm_only/usbstm.o (symbol from plugin) +incoming_bytes_remain + 0x1 source/buffer.o (symbol from plugin) +raw_bank_status 0x10 source/buffer.o (symbol from plugin) +raw_buffer16 0x200 source/buffer.o (symbol from plugin) +cur_usb_load_buff 0x4 source/buffer.o (symbol from plugin) Discarded input sections @@ -45,12 +55,27 @@ 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\cc6oNvuz.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.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 + .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 + .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) .text 0x00000000 0x0 source/main.o (symbol from plugin) - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + .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/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) @@ -143,6 +168,12 @@ 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_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) Memory Configuration @@ -156,9 +187,18 @@ 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\cc6oNvuz.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.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 source/dump.o +LOAD source/flash.o +LOAD source/io.o LOAD source/main.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o +LOAD source/nes.o +LOAD source/operation.o +LOAD source/pinport.o LOAD source/usb.o LOAD source_stm_only/stm_init.o LOAD source_stm_only/usbstm.o @@ -175,12 +215,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 0x558 +.text 0x08000000 0x1e38 *(.isr_vector) - .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o 0x08000000 __isr_vector *(.text*) - .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o 0x080000c0 Reset_Handler 0x080000fc TSC_IRQHandler 0x080000fc ADC1_COMP_IRQHandler @@ -219,24 +259,51 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x080000fc FLASH_IRQHandler 0x080000fc USART1_IRQHandler 0x080000fc TIM1_BRK_UP_TRG_COM_IRQHandler - .text.control_xfr_in - 0x08000100 0xbc C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .text.USB_IRQHandler - 0x080001bc 0x1cc C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - 0x080001bc USB_IRQHandler + 0x08000100 0x12c8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x08000100 USB_IRQHandler + .text.nes_ppu_wr + 0x080013c8 0x90 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x080013c8 nes_ppu_wr + .text.nes_ppu_rd + 0x08001458 0x84 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x08001458 nes_ppu_rd + .text.nes_cpu_rd + 0x080014dc 0x88 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x080014dc 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 + .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 .text.HardFault_Handler - 0x08000388 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - 0x08000388 HardFault_Handler - *fill* 0x0800038a 0x2 + 0x08001700 0x2 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x08001700 HardFault_Handler + *fill* 0x08001702 0x2 + .text.io_reset + 0x08001704 0x1a0 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + 0x08001704 io_reset .text.startup.main - 0x0800038c 0x10c C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - 0x0800038c 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 *(.init) - .init 0x08000498 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 - 0x08000498 _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 *(.fini) - .fini 0x0800049c 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 - 0x0800049c _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 *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors) @@ -249,45 +316,45 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm *(.dtors) *(.rodata*) .rodata.config_desc - 0x080004a0 0x12 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x08001d80 0x12 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o .rodata.device_desc - 0x080004b2 0x12 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x08001d92 0x12 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o .rodata.string0_desc - 0x080004c4 0x4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x08001da4 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o .rodata.string1_desc - 0x080004c8 0x54 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x08001da8 0x54 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o .rodata.string2_desc - 0x0800051c 0x3c C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x08001dfc 0x3c C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o *(.eh_frame*) -.glue_7 0x08000558 0x0 - .glue_7 0x08000558 0x0 linker stubs +.glue_7 0x08001e38 0x0 + .glue_7 0x08001e38 0x0 linker stubs -.glue_7t 0x08000558 0x0 - .glue_7t 0x08000558 0x0 linker stubs +.glue_7t 0x08001e38 0x0 + .glue_7t 0x08001e38 0x0 linker stubs -.vfp11_veneer 0x08000558 0x0 - .vfp11_veneer 0x08000558 0x0 linker stubs +.vfp11_veneer 0x08001e38 0x0 + .vfp11_veneer 0x08001e38 0x0 linker stubs -.v4_bx 0x08000558 0x0 - .v4_bx 0x08000558 0x0 linker stubs +.v4_bx 0x08001e38 0x0 + .v4_bx 0x08001e38 0x0 linker stubs -.iplt 0x08000558 0x0 - .iplt 0x08000558 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 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 -.rel.dyn 0x08000558 0x0 - .rel.iplt 0x08000558 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 .ARM.extab *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x08000558 __exidx_start = . + 0x08001e38 __exidx_start = . .ARM.exidx *(.ARM.exidx* .gnu.linkonce.armexidx.*) - 0x08000558 __exidx_end = . - 0x08000558 __etext = ALIGN (0x4) + 0x08001e38 __exidx_end = . + 0x08001e38 __etext = ALIGN (0x4) -.data 0x20000000 0x0 load address 0x08000558 +.data 0x20000000 0x0 load address 0x08001e38 0x20000000 __data_start__ = . *(vtable) *(.data*) @@ -312,38 +379,71 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm .igot.plt 0x20000000 0x0 .igot.plt 0x20000000 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 -.bss 0x20000000 0x14 +.bss 0x20000000 0x2ac 0x20000000 . = ALIGN (0x4) 0x20000000 __bss_start__ = . *(.bss*) - .bss.log 0x20000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + .bss.buff0 0x20000000 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000000 buff0 + .bss.buff1 0x20000014 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000014 buff1 + .bss.buff2 0x20000028 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000028 buff2 + .bss.buff3 0x2000003c 0x14 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x2000003c buff3 + .bss.cur_buff 0x20000050 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000050 cur_buff + .bss.cur_usb_load_buff + 0x20000054 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .bss.incoming_bytes_remain + 0x20000058 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + *fill* 0x20000059 0x3 + .bss.log 0x2000005c 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o .bss.new_address - 0x20000004 0x1 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - *fill* 0x20000005 0x1 - .bss.num_bytes_req - 0x20000006 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - .bss.num_bytes_sending - 0x20000008 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - .bss.num_bytes_xfrd - 0x2000000a 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - .bss.req_dir 0x2000000c 0x1 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - *fill* 0x2000000d 0x3 + 0x20000060 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.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.oper_info_struct + 0x20000068 0x20 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x20000068 oper_info_struct + .bss.raw_bank_status + 0x20000088 0x10 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.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 + *fill* 0x2000029b 0x1 + .bss.rv16.4797 + 0x2000029c 0x8 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o .bss.usbMsgPtr - 0x20000010 0x4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x200002a4 0x4 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + 0x200002a4 usbMsgPtr + .bss.num_buff.4877 + 0x200002a8 0x1 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o *(COMMON) - 0x20000014 . = ALIGN (0x4) - 0x20000014 __bss_end__ = . + 0x200002ac . = ALIGN (0x4) + *fill* 0x200002a9 0x3 + 0x200002ac __bss_end__ = . -.heap 0x20000018 0x0 - 0x20000018 __end__ = . +.heap 0x200002b0 0x0 + 0x200002b0 __end__ = . [!provide] PROVIDE (end, .) *(.heap*) - .heap 0x20000018 0x0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o - 0x20000018 __HeapLimit = . + .heap 0x200002b0 0x0 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o + 0x200002b0 __HeapLimit = . -.stack_dummy 0x20000018 0xc00 +.stack_dummy 0x200002b0 0xc00 *(.stack*) - .stack 0x20000018 0xc00 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .stack 0x200002b0 0xc00 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o 0x20001800 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x20000c00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x20001800 PROVIDE (__stack, __StackTop) @@ -355,41 +455,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\cc6oNvuz.o + 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o .ARM.attributes - 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .ARM.attributes + 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + .ARM.attributes + 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.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) + .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) + .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\ccxBHZ68.ltrans0.ltrans.o + .comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.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 -.debug_line 0x00000000 0x324 - .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o - .debug_line 0x0000006f 0x2b5 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.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_info 0x00000000 0x501 - .debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o - .debug_info 0x00000083 0x47e C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.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_abbrev 0x00000000 0x277 - .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o - .debug_abbrev 0x00000014 0x263 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.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_aranges 0x00000000 0x58 +.debug_aranges 0x00000000 0xc0 .debug_aranges - 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\ccU2RJ15.o .debug_aranges - 0x00000020 0x38 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans0.ltrans.o + .debug_aranges + 0x00000040 0x60 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans1.ltrans.o + .debug_aranges + 0x000000a0 0x20 C:\Users\Paul\AppData\Local\Temp\cc1DOxdP.ltrans2.ltrans.o -.debug_loc 0x00000000 0xa4 - .debug_loc 0x00000000 0xa4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.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_ranges 0x00000000 0xc0 - .debug_ranges 0x00000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.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_str 0x00000000 0x360 - .debug_str 0x00000000 0x360 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o - 0x38a (size before relaxing) +.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 + 0x1d1 (size before relaxing) -.debug_frame 0x00000000 0x70 - .debug_frame 0x00000000 0x70 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o +.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 diff --git a/firmware/source/buffer.c b/firmware/source/buffer.c index d177240..81ea9b6 100644 --- a/firmware/source/buffer.c +++ b/firmware/source/buffer.c @@ -584,6 +584,16 @@ void update_buffers() cur_buff = &buff0; //now we can get_next_buff by passing cur_buff + //also need to reset buffer status' incase they're now outdated + //from previous operation + //for ( result=0; resultstatus = EMPTY; + // cur_buff = get_next_buff( cur_buff, num_buff ); + //} + + //go back to buff0 + //cur_buff = &buff0; + } if (get_operation() == STARTDUMP) { //prepare both buffers to dump diff --git a/firmware/source/flash.c b/firmware/source/flash.c index 9b86c41..02cb88e 100644 --- a/firmware/source/flash.c +++ b/firmware/source/flash.c @@ -52,6 +52,59 @@ uint8_t write_page( uint8_t bank, uint8_t addrH, buffer *buff, write_funcptr wr_ } +uint8_t write_page_chr( 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; + + 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 + wr_func( 0x1555, 0xAA ); +// wr_func( oper_info->unlock1_AH, oper_info->unlock1_AL, oper_info->unlock1_data ); + wr_func( 0x0AAA, 0x55 ); +// wr_func( oper_info->unlock2_AH, oper_info->unlock2_AL, oper_info->unlock2_data ); + wr_func( 0x1555, 0xA0 ); +// wr_func( oper_info->command_AH, oper_info->command_AL, oper_info->command1_data ); + wr_func( ((addrH<<8)| n), buff->data[n] ); + //wr_func( ((addrH<<8)| n), buff->page_num ); + //wr_func( ((addrH<<8)| n), addrH); + + do { + usbPoll(); + read = rd_func((addrH<<8)|n); + + } while( read != rd_func((addrH<<8)|n) ); + //TODO verify byte is value that was trying to be flashed + //move on to next byte + n++; + cur++; + + } + + buff->cur_byte = n; + + 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 @@ -80,7 +133,7 @@ uint8_t flash_buff( buffer *buff ) { write_page( 0, (0x80 | addrH), buff, discrete_exp0_prgrom_wr, nes_cpu_rd ); break; case CHRROM: //$0000 - //TODO write_page( 0, addrH, buff, nes_ppu_wr, nes_ppu_rd ); + write_page_chr( 0, addrH, buff, nes_ppu_wr, nes_ppu_rd ); break; case PRGRAM: //addrH |= 0x60; //$6000 diff --git a/firmware/source_stm_only/usbstm.c b/firmware/source_stm_only/usbstm.c index c89ad4c..d648408 100644 --- a/firmware/source_stm_only/usbstm.c +++ b/firmware/source_stm_only/usbstm.c @@ -586,6 +586,8 @@ static void control_xfr_in(){ //flag and value, since can't change address until after STATUS stage, must use this value //to denote that the USB device address needs updated after the status stage. static uint8_t new_address = 0; +static uint8_t reqtype = 0; +static uint8_t reqdir = 0; //return number of bytes expected @@ -724,6 +726,10 @@ static void control_xfr_init( usbRequest_t *spacket ) { * of this function for more information. If you just want to ignore the data * sent by the host, return 0 in 'usbFunctionSetup()'. */ + //set request type so it can be keyed from for subsequent IN/OUT data transfers + reqtype = (spacket->bmRequestType & REQ_TYPE); + reqdir = (spacket->bmRequestType & REQ_DIR); + //setup packets not handled by standard requests sent to usbFunctionSetup (just like Vusb) if ((spacket->bmRequestType & REQ_TYPE) != REQ_TYPE_STD) { //function must set usbMsgPtr to point to return data for IN transfers @@ -891,10 +897,14 @@ void USB_IRQHandler(void) control_xfr_init( setup_packet ); } else { //OUT packet + if ((reqtype == REQ_TYPE_VEND) & (reqdir == REQ_DIR_OUT)) { + //have to key off of reqdir so OUT status packets don't call usbFunctionWrite // if ( log >= LOG_COUNT) { DEBUG_HI(); DEBUG_LO(); } //number of bytes received is denoted in USB_COUNTn_RX buffer table //control_xfr_out(); usbFunctionWrite((uint8_t*) &usb_buff[EP0_RX_BASE], (usb_buff[USB_COUNT0_RX] & RX_COUNT_MSK)); + USB_EP0R_RX_VALID(); + } } diff --git a/host/scripts/app/buffers.lua b/host/scripts/app/buffers.lua index de6bcf4..2f6737e 100644 --- a/host/scripts/app/buffers.lua +++ b/host/scripts/app/buffers.lua @@ -91,6 +91,32 @@ local function allocate( num_buffers, buff_size ) 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 rv = nil + for key_buff, buff in pairs(buff_nums) do + rv = nil + print("buffer wait:", key_buff, buff) + 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) + rv = "EXIT" + break + else + print("buffer", buff, "is", rv, "not", stat) + end + end + end + + end +end -- global variables so other modules can use them @@ -100,6 +126,7 @@ end -- functions other modules are able to call buffers.allocate = allocate +buffers.status_wait = status_wait -- return the module's table return buffers diff --git a/host/scripts/app/dict.lua b/host/scripts/app/dict.lua index ee5d5f9..d420138 100644 --- a/host/scripts/app/dict.lua +++ b/host/scripts/app/dict.lua @@ -382,7 +382,7 @@ local function buffer_payload_out( num_bytes, data, buff_num ) end -- external call for buffer dictionary -local function buffer( opcode, operand, misc, data ) +local function buffer( opcode, operand, misc, data, stringout ) if not op_buffer[opcode] then print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_buffer.h") @@ -426,7 +426,9 @@ local function buffer( opcode, operand, misc, data ) end --process the return data string and return it to calling function - if data_len then + if stringout then + return data:sub(RETURN_DATA, data_len+RETURN_DATA) + elseif data_len then return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len) else return nil diff --git a/host/scripts/app/dump.lua b/host/scripts/app/dump.lua index dc678a8..4428344 100644 --- a/host/scripts/app/dump.lua +++ b/host/scripts/app/dump.lua @@ -44,6 +44,7 @@ local function dump_nes( file, debug ) -- //Run some CRC's to determine size of memories -- -- //setup buffers and manager + dict.operation("SET_OPERATION", op_buffer["RESET"] ) -- //reset buffers first dict.buffer("RAW_BUFFER_RESET") @@ -76,17 +77,17 @@ local function dump_nes( file, debug ) -- -- //debugging print out buffer elements -- //get_operation( transfer ); - 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("\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 @@ -94,9 +95,9 @@ local function dump_nes( file, debug ) dict.operation("SET_OPERATION", op_buffer["STARTDUMP"] ) -- --need these calls to delay things a bit to let first buffer dump complete.. - dict.operation("GET_OPERATION" ) - dict.buffer("GET_PRI_ELEMENTS", nil, buff0 ) - dict.buffer("GET_PRI_ELEMENTS", nil, buff1 ) +-- dict.operation("GET_OPERATION" ) +-- dict.buffer("GET_PRI_ELEMENTS", nil, buff0 ) +-- dict.buffer("GET_PRI_ELEMENTS", nil, buff1 ) -- //manager updates buffer status' so they'll start dumping -- //once they're full manager prepares them to be read back on USB payloads -- //once the next payload request happens manager knows last buffer can start dumping again @@ -114,6 +115,8 @@ local function dump_nes( file, debug ) -- clock_t tstart, tstop; -- tstart = clock(); -- + --wait for first buffer to finish dumping before calling payload + buffers.status_wait({buff0}, {"DUMPED"}) -- //now just need to call series of payload IN transfers to retrieve data --for i=1, (1024*1024/buff_size) do for i=1, (32*1024/buff_size) do @@ -140,6 +143,52 @@ local function dump_nes( file, debug ) end -- } print("payload done"); + --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 + --so end result is buff0 will get sent off to dump extra data that's not needed + --but we never call payload on it, so buff1 never moves from USB_UNLOADING + --but it has to be done unloading if we sent a subsequent setup packet + --buffers.status_wait({buff0, buff1}, {"DUMPED","USB_UNLOADING"}) + --in reality I don't think this wait is needed. Because we've already gotten our data if + --we're at this point.. + --what we really need to do is set the buffer's status' to a reset state + --that way we can give them new instructions before restarting DUMP of CHR portion + --best way can think of doing this is a operation "RESET" which updates buffer status, + --without deallocating them. In reality should be able to do this by setting operation to reset. + --and having STARTDUMP/FLASH initialize buffer status' as well. + dict.operation("SET_OPERATION", op_buffer["RESET"] ) + dict.buffer("RAW_BUFFER_RESET") + +-- //need to allocate some buffers for dumping +-- //2x 128Byte buffers + num_buffers = 2 + buff_size = 128 + print("allocating buffers") + assert(buffers.allocate( num_buffers, buff_size ), "fail to allocate buffers") + +-- //set buffer elements as needed +-- //set reload which gets added to page_num after each buffer read +-- //set reload to 256 = 1 when translated to page_num (done in allocate buffers funct) +-- //set page_num to non-zero if offset arg sent +-- //set mem_type and part_num to designate how to get/write data +-- check(! set_mem_n_part( transfer, buff0, PRGROM, MASKROM ), "Unable to set mem_type and part"); + print("setting map n part") + dict.buffer("SET_MEM_N_PART", (op_buffer["CHRROM"]<<8 | op_buffer["MASKROM"]), buff0 ) + dict.buffer("SET_MEM_N_PART", (op_buffer["CHRROM"]<<8 | op_buffer["MASKROM"]), buff1 ) +-- //set multiple and add_mult only when flashing +-- //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["NROM"]<<8 | op_buffer["NOVAR"]), buff0 ) + dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["NROM"]<<8 | op_buffer["NOVAR"]), buff1 ) +-- +-- + print("\n\nsetting operation STARTDUMP"); +-- //inform buffer manager to start dumping operation now that buffers are initialized +-- check(! set_operation( transfer, STARTDUMP ), "Unable to set buffer operation"); + dict.operation("SET_OPERATION", op_buffer["STARTDUMP"] ) -- -- tstop = clock(); -- float timediff = ( (float)(tstop-tstart) / CLOCKS_PER_SEC); @@ -152,17 +201,12 @@ local function dump_nes( file, debug ) -- //reset buffers and setup to dump CHR-ROM --Can't get things to work without resetting all the buffers for some reason.. --Think the issue is need to get the buffer status needs reset - dict.buffer("RAW_BUFFER_RESET") - print("reallocate buffers") - assert(buffers.allocate( num_buffers, buff_size ), "fail to allocate buffers") - dict.buffer("SET_MEM_N_PART", (op_buffer["CHRROM"]<<8 | op_buffer["MASKROM"]), buff0 ) - dict.buffer("SET_MEM_N_PART", (op_buffer["CHRROM"]<<8 | op_buffer["MASKROM"]), buff1 ) - dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["NROM"]<<8 | op_buffer["NOVAR"]), buff0 ) - dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["NROM"]<<8 | op_buffer["NOVAR"]), buff1 ) - dict.operation("SET_OPERATION", op_buffer["STARTDUMP"] ) - --dict.operation("GET_OPERATION" ) - --dict.buffer("GET_PRI_ELEMENTS", nil, buff0 ) - --dict.buffer("GET_PRI_ELEMENTS", nil, buff1 ) +-- dict.buffer("RAW_BUFFER_RESET") +-- print("reallocate buffers") +-- assert(buffers.allocate( num_buffers, buff_size ), "fail to allocate buffers") + + --wait for first buffer to finish dumping prior to calling payload + buffers.status_wait({buff0}, {"DUMPED"}) for i=1, (8*1024/buff_size) do --cur_buff_status = dict.buffer("GET_CUR_BUFF_STATUS") @@ -180,7 +224,9 @@ local function dump_nes( file, debug ) -- //close file in main -- -- //reset io at end + dict.operation("SET_OPERATION", op_buffer["RESET"] ) dict.buffer("RAW_BUFFER_RESET") + dict.io("IO_RESET") return true end diff --git a/host/scripts/app/flash.lua b/host/scripts/app/flash.lua index b7b54e1..23463b0 100644 --- a/host/scripts/app/flash.lua +++ b/host/scripts/app/flash.lua @@ -53,6 +53,7 @@ local function flash_nes( file, debug ) -- -- //start operation at reset -- check(! set_operation( transfer, RESET ), "Unable to set buffer operation"); + dict.operation("SET_OPERATION", op_buffer["RESET"] ) -- -- //setup buffers and manager -- //reset buffers first @@ -90,21 +91,22 @@ local function flash_nes( file, debug ) dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["NROM"]<<8 | op_buffer["NOVAR"]), buff1 ) -- -- //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") - print(dict.buffer("GET_PRI_ELEMENTS", nil, buff0 )) - print(dict.buffer("GET_PRI_ELEMENTS", nil, buff1 )) - print(dict.buffer("GET_SEC_ELEMENTS", nil, buff0 )) - print(dict.buffer("GET_SEC_ELEMENTS", nil, buff1 )) - print(dict.buffer("GET_PAGE_NUM", nil, buff0 ) ) - print(dict.buffer("GET_PAGE_NUM", nil, buff1 ) ) + --print("\nget operation:") + --dict.operation("GET_OPERATION" ) + --print("\n\ngetting cur_buff status") + --dict.buffer("GET_CUR_BUFF_STATUS" ) + --print("\n\ngetting elements") + --print(dict.buffer("GET_PRI_ELEMENTS", nil, buff0 )) + --print(dict.buffer("GET_PRI_ELEMENTS", nil, buff1 )) + --print(dict.buffer("GET_SEC_ELEMENTS", nil, buff0 )) + --print(dict.buffer("GET_SEC_ELEMENTS", nil, buff1 )) + --print(dict.buffer("GET_PAGE_NUM", nil, buff0 ) ) + --print(dict.buffer("GET_PAGE_NUM", nil, buff1 ) ) 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(); @@ -144,13 +146,117 @@ local function flash_nes( file, debug ) -- //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. --- waste some time for now.. - print(dict.buffer("GET_PRI_ELEMENTS", nil, buff0 )) - print(dict.buffer("GET_PRI_ELEMENTS", nil, buff1 )) - print(dict.buffer("GET_SEC_ELEMENTS", nil, buff0 )) - print(dict.buffer("GET_SEC_ELEMENTS", nil, buff1 )) - print(dict.buffer("GET_PAGE_NUM", nil, buff0 ) ) - print(dict.buffer("GET_PAGE_NUM", nil, buff1 ) ) + + -- 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"}) + +-- //start operation at reset +-- check(! set_operation( transfer, RESET ), "Unable to set buffer operation"); + 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 + num_buffers = 2 + buff_size = 256 + print("allocating buffers") + assert(buffers.allocate( num_buffers, buff_size ), "fail to allocate buffers") +-- +-- //tell buffers what function to use for flashing +-- //load operation elements into buff0 and then copy buff0 to oper_info +-- load_oper_info_elements( transfer, cart ); +-- get_oper_info_elements( transfer ); +-- +-- //setup buffers and manager +-- //reset buffers first +-- check(! reset_buffers( transfer ), "Unable to reset device buffers"); +-- //need to allocate some buffers for flashing +-- //2x 256Byte buffers +-- check(! allocate_buffers( transfer, num_buffers, buff_size ), "Unable 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["CHRROM"]<<8 | op_buffer["MASKROM"]), buff0 ) + dict.buffer("SET_MEM_N_PART", (op_buffer["CHRROM"]<<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["NROM"]<<8 | op_buffer["NOVAR"]), buff0 ) + dict.buffer("SET_MAP_N_MAPVAR", (op_buffer["NROM"]<<8 | op_buffer["NOVAR"]), buff1 ) +-- +-- //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") + --print(dict.buffer("GET_PRI_ELEMENTS", nil, buff0 )) + --print(dict.buffer("GET_PRI_ELEMENTS", nil, buff1 )) + --print(dict.buffer("GET_SEC_ELEMENTS", nil, buff0 )) + --print(dict.buffer("GET_SEC_ELEMENTS", nil, buff1 )) + --print(dict.buffer("GET_PAGE_NUM", nil, buff0 ) ) + --print(dict.buffer("GET_PAGE_NUM", nil, buff1 ) ) + + print("\n\nsetting operation STARTFLASH"); +-- //inform buffer manager to start dumping operation now that buffers are initialized + dict.operation("SET_OPERATION", op_buffer["STARTFLASH"] ) + +-- clock_t tstart, tstop; +-- tstart = clock(); +-- +-- //now just need to call series of payload IN transfers to retrieve data +-- +-- for( i=0; i<(32*KByte/buff_size); i++) { + local i = 1 + local nak = 0 + for bytes in file:lines(buff_size) do + dict.buffer_payload_out( buff_size, bytes ) + --for i = 1, #bytes do + -- local b = string.unpack("B", bytes, i) + -- io.write(string.format("%02X ", b)) + --end +-- io.write(string.rep(" ", blocksize - #bytes)) +-- bytes = string.gsub(bytes, "%c", ".") +-- io.write(" ", bytes, "\n") +-- break +-- while (cur_buff_status != EMPTY ) { +-- //debug("cur_buff->status: %x ", cur_buff_status); +-- check(! get_cur_buff_status( transfer, &cur_buff_status ), "Error retrieving cur_buff->status"); +-- } + 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") +-- check(! get_cur_buff_status( transfer, &cur_buff_status ), "Error retrieving cur_buff->status"); +-- } + end + if ( i == 8*1024/buff_size) then break end + i = i + 1 + end + print("number of naks", nak) +-- +-- //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"}) -- -- //Read next chunk from file -- check(! read_from_file( rom, data, buff_size ), "Error with file read"); @@ -251,6 +357,9 @@ local function flash_nes( file, debug ) -- io_reset( transfer ); -- -- return SUCCESS; + dict.operation("SET_OPERATION", op_buffer["RESET"] ) + dict.buffer("RAW_BUFFER_RESET") + dict.io("IO_RESET") end diff --git a/host/source/usb_operations.c b/host/source/usb_operations.c index b6b5b3b..c42ac52 100644 --- a/host/source/usb_operations.c +++ b/host/source/usb_operations.c @@ -358,17 +358,17 @@ typedef struct USBtransfer { usb_xfr.data = data_buff; -// printf("\nep %d, req %d", usb_xfr.endpoint, usb_xfr.request); -// printf("wValue %d, wIndex %d", usb_xfr.wValue, usb_xfr.wIndex); -// printf("wLength %d \n", usb_xfr.wLength); + //printf("\nep %d, req %d", usb_xfr.endpoint, usb_xfr.request); + //printf("wValue %d, wIndex %d", usb_xfr.wValue, usb_xfr.wIndex); + //printf("wLength %d \n", usb_xfr.wLength); //printf("predata: %d, %d, %d, %d, %d, %d, %d, %d \n", usb_xfr.data[0], usb_xfr.data[1],usb_xfr.data[2],usb_xfr.data[3],usb_xfr.data[4],usb_xfr.data[5], usb_xfr.data[6], usb_xfr.data[7]); check( lua_usb_handle != NULL, "usb device handle pointer not initialized.\n") xfr_count = usb_vendor_transfer( &usb_xfr); -// printf("postdata: %d, %d, %d, %d, %d, %d, %d, %d \n", usb_xfr.data[0], usb_xfr.data[1],usb_xfr.data[2],usb_xfr.data[3],usb_xfr.data[4],usb_xfr.data[5], usb_xfr.data[6], usb_xfr.data[7]); -// printf("bytes xfrd: %d\n", xfr_count); + //printf("postdata: %d, %d, %d, %d, %d, %d, %d, %d \n", usb_xfr.data[0], usb_xfr.data[1],usb_xfr.data[2],usb_xfr.data[3],usb_xfr.data[4],usb_xfr.data[5], usb_xfr.data[6], usb_xfr.data[7]); + //printf("bytes xfrd: %d\n", xfr_count); lua_pushnumber(L, xfr_count); /* push first result */ rv++;