diff --git a/firmware/main_v1_2b-v1_4.hex b/firmware/main_v1_2b-v1_4.hex index e9de92c..d318cfb 100644 --- a/firmware/main_v1_2b-v1_4.hex +++ b/firmware/main_v1_2b-v1_4.hex @@ -1,25 +1,25 @@ -:100000000C94E8000C945A080C9405010C9405011A +:100000000C94E8000C9477090C9405010C940501FC :100010000C9405010C9405010C9405010C94050148 :100020000C9405010C9405010C9405010C94050138 :100030000C9405010C9405010C9405010C94050128 :100040000C9405010C9405010C9405010C94050118 :100050000C9405010C9405010C9405010C94050108 :100060000C9405010C9405010C9405010C940501F8 -:100070000C9405010C9405010C940501AE04B00428 -:10008000B304B504B804BA04BD04BF04C204C40474 -:10009000C604C904CB04CD04CF04D104D304D504D1 -:1000A000D7044A054A054A054A05D904DB04DD049C -:1000B000DF044A054A054A054A05E104E304E5046C -:1000C000E704E904EB04ED04EF04F104F304F504A0 -:1000D000F704F904FB04FD04FF044A054A054A0538 -:1000E0004A05010503054805050507050B050E052D -:1000F000120515051B051805140517051A051D051C -:100100001F05210523052505270529052B052D0597 -:100110002F05310533053505370539053B053D0507 -:100120003F054A054A054A054A0544054105430578 -:10013000470557055B0559055D0563056A056C05AF -:100140006E0570057A057D05D105D305D505D70562 -:10015000D905DB05DD05DF05E105E305E505E90575 +:100070000C9405010C9405010C940501CB05CD05EC +:10008000D005D205D505D705DA05DC05DF05E10584 +:10009000E305E605E805EA05EC05EE05F005F205E1 +:1000A000F4056706670667066706F605F805FA05AC +:1000B000FC056706670667066706FE05000602067A +:1000C0000406060608060A060C060E0610061206A8 +:1000D0001406160618061A061C0667066706670643 +:1000E00067061E06200665062206240628062B063D +:1000F0002F063206380635063106340637063A062C +:100100003C063E06400642064406460648064A06A7 +:100110004C064E06500652065406560658065A0617 +:100120005C06670667066706670661065E06600688 +:1001300064067406780676067A06800687068906BF +:100140008B068D0697069A06EE06F006F206F40672 +:10015000F606F806FA06FC06FE0600070207060782 :10016000090212000101008096090400000000004D :10017000000012011001FF000008C016DC0500029B :10018000010200011E0349004E004C0020005200F5 @@ -28,283 +28,318 @@ :1001B000740065004E00650073004C006900760015 :1001C000650073002E0063006F006D0004030904D6 :1001D00011241FBECFEFD4E0DEBFCDBF11E0A0E001 -:1001E000B1E0E2E3F3E102C005900D92A230B10765 -:1001F000D9F713E0A2E0B1E001C01D92A938B10720 -:10020000E1F70E946E090C9497090C940000CF92BC +:1001E000B1E0ECE6F5E102C005900D92A230B10756 +:1001F000D9F713E0A2E0B1E001C01D92AD38B1071C +:10020000E1F70E948B0A0C94B40A0C940000CF9280 :10021000DF92EF92FF92CF93DF93DB01F701E601CC -:10022000813549F18036F1F0803509F044C01296ED -:100230008C911297808313968C91139781831496D7 -:100240008C911497828315968C91159783831696BB -:100250008C911697848317968C911797858318969F -:100260008C9123C0A22FB0E0AE5FBE4F8C918083F3 -:1002700088818F5F1DC019968C91199780831A967B -:100280008C911A9781831B968C911B9782831C9665 -:100290008C911C9783831D968C911D9784831E9649 -:1002A0008C911E9785831F968C9186838881895FA8 -:1002B000888380E001C084EBDF91CF91FF90EF90C5 -:1002C000DF90CF900895FC01809142039091430309 -:1002D00040814078403851F48681D9018C938091D7 -:1002E000420390914303409345030FC04FEFD90160 -:1002F0004C93268120935C0322E433E030935E0329 -:1003000020935D0320E92093450310924603228148 -:10031000213711F02034D1F4A0915D03B0915E0338 -:100320000D90BC91A02D25812C93A0915D03B091DF -:100330005E030D90BC91A02D248111962C93E09129 -:100340005D03F0915E0324812E5F24830895E2E033 -:10035000F1E09FEF8FEF919321E0E231F207D1F7C7 -:10036000809345038093350380934803809338033B -:1003700080932503809315038093280380931803AB -:100380000895FB01813389F038F4882359F08033D4 -:1003900099F4418722870EC0823351F0833361F490 -:1003A000278708C00E94A70105C04387248702C091 -:1003B0004587268780E0089584EB0895CF93DF93E7 -:1003C000FC0150E0CA01820F911D41970CF046C01C -:1003D000222309F445C083818F3F09F043C0868101 -:1003E0008F3F09F041C080E090E0EA01CE5FDE4F30 -:1003F000821750F40196DE01A80FB91F11973C91A6 -:100400003F3FB1F381EC31C066831382822F829526 -:10041000880F807E81508283148215821086178215 -:10042000118612861386148615861786CA0135E052 -:10043000880F991F3A95E1F78E5E9E4F91838083D6 -:1004400080E090E04E5F5E4F821730F4FA01E80FD3 -:10045000F91F60830196F8CF80E007C08EEB05C0DE -:1004600082EC03C08FEB01C080ECDF91CF91089547 -:100470000F93FB01642F422F202F803888F088389B -:1004800058F08059883060F40583242F30E0362BF3 -:100490003087278380E005C0CF010F910C94DE01E7 -:1004A00086EB0F910895CF92DF92EF92FF920F9318 -:1004B000CF93DF93FC01EB016A0182819FEC980FDF -:1004C0009E3270F49381913071F050F0923029F0A7 -:1004D0009330C1F562E173E008C062E273E005C0E9 -:1004E00062E473E002C062E373E0803768F4803551 -:1004F00080F4803408F047C00381248145810E9444 -:10050000C101888381E03CC0803868F4960140E0F6 -:100510003CC07E019FEFE91AF90A038124814581DD -:100520000E9407013DC0982F97709130A1F080F094 -:10053000923029F0933031F462E173E00EC062E250 -:1005400073E00BC086E8888381E0D6018C9329C0D4 -:1005500062E473E002C062E373E0803F50F4803CE9 -:1005600058F48038E0F00381248145810E943802EC -:1005700017C0883F40F013C0DB01CD91DC9186812C -:10058000F60180830EC096014FEFCF01DF91CF912E -:100590000F91FF90EF90DF90CF900C94630185E86E -:1005A0008883CE01DF91CF910F91FF90EF90DF9084 -:1005B000CF90089580915103803D59F410924603E5 -:1005C00082E493E00E940303811103C088ED8093CD -:1005D0004503E0915D03F0915E039281848198135D -:1005E00002C088E9838380915103803F59F41092BF -:1005F000460382E493E00E942F03811103C088ED3B -:10060000809345030895EF92FF920F931F93CF932A -:10061000DF931F92CDB7DEB77C01FC019781906814 -:10062000F70164818281681788F4F70100811181E4 -:10063000060F111D892F99830E942C04F8018083D5 -:10064000F70184818F5F84839981EACF80E00F90E6 -:10065000DF91CF911F910F91FF90EF9008950F932D -:100660001F93CF93DF93EC011F8110689C818A81D7 -:10067000981790F54AEA65E585E50E94040445E58A -:100680006AEA8AE20E94040440EA65E585E50E9480 -:1006900004046C81E881F981E60FF11D4081812F0E -:1006A0000E9404046C81812F0E942C04082F6C810D -:1006B000812F0E942C040813F5CF8C81E881F981E9 -:1006C000E80FF11D9081091304C08F5F8C83599846 -:1006D000CDCF519A599ACACF80E0DF91CF911F9127 -:1006E0000F91089511B88FEF82B914B885B917B872 -:1006F00088B98AB184718AB98BB18B6E8BB95098E5 -:1007000058985198599A08950E947203399A419ABB -:10071000389A40983A9A429A3C9A449A3D9A459A15 -:100720003F9A479A47988FEF84B915B8479A4798E8 -:1007300014B812B881B914B885B95998519A089566 -:100740000E947203399A419A3C9A449A3D9A459A7A -:10075000509A589A3F9A479A4798579A5F9A5F9843 -:100760008FEF84B915B8479A479814B884B915B86B -:100770005F9A5F9814B812B881B914B885B95998BE -:10078000519A0895813049F028F0823051F40E9446 -:10079000A00305C00E94720302C00E94840380E08F -:1007A000089586E90895FC0181E080835898509A65 -:1007B000000089B181835098589890818181892364 -:1007C000891308C08AEA86838483828385E58583CA -:1007D000838308955098589A89B1818389B182831F -:1007E00089B1838389B1848389B1858389B1868303 -:1007F000509858980895803829F4CB010E94D3036B -:1008000080E0089587E908959FEF94B985B9479AE4 -:10081000479862B945B95898509A5098589A14B860 -:100820000895509858984098419A429A62B99FEF1B -:1008300094B985B9479A479814B800000000409AC7 -:1008400087FD41980000000000000000000000004B -:1008500083B14098419A089562B99FEF94B985B9E0 -:10086000479A479814B8409A87FD419800000000C5 -:100870000000000083B14098419A0895509858981C -:100880009FEF94B962B985B9479A4798429845B99C -:10089000409A87FD4198000000004098419A429A92 -:1008A00014B808959FEF94B9803208F4806885B930 -:1008B000479A479814B862B94498000000000000B5 -:1008C000000083B1449A0895CF93DF93982F862F29 -:1008D000642FE901913839F0923851F0903859F489 -:1008E0000E94110402C00E942C04888380E004C08E -:1008F0000E945204FACF81EADF91CF9108959FEFD1 -:1009000094B9803208F4806885B9479A479862B9EB -:1009100045B9000045980000459A14B80895982FED -:10092000862F642F422F913049F028F0923051F4F5 -:100930000E943E0405C00E94040402C00E947F047D -:1009400080E0089580EA089590E08B35910508F0E5 -:10095000A1C0FC01E25CFF4F0C94910911B895C055 -:100960008FEF81B992C012B890C08FEF82B98DC05D -:1009700014B88BC08FEF84B988C015B886C08FEFCC -:1009800085B983C017B881C018B87FC08FEF88B908 -:100990007CC038987AC0389A78C0409876C0409A1F -:1009A00074C0399872C0399A70C041986EC0419A2B -:1009B0006CC03A986AC03A9A68C0429866C0429A37 -:1009C00064C03B9862C03B9A60C043985EC0439A43 -:1009D0005CC03C985AC03C9A58C0449856C0449A4F -:1009E00054C03D9852C03D9A50C045984EC0459A5B -:1009F0004CC03E984AC03E9A48C0469846C0469A67 -:100A000044C03F9842C03F9A40C0479A3EC08AB116 -:100A100084718AB93AC08BB1847102C08BB18B6E7C -:100A20008BB933C0509831C05898509A2EC0509806 -:100A3000589A2BC05098589828C0519826C0519A5F -:100A400024C0599822C0599A20C053981EC0539A66 -:100A50001CC05B981AC05B9A18C0559816C0559A6E -:100A600014C05D9812C05D9A10C056980EC0569A78 -:100A70000CC05E980AC05E9A08C0579806C0579A84 -:100A800004C05F9A02C05F9A5F9880E00895479A19 -:100A90004798FBCF8CE8089590E0FC01E058F109FD -:100AA000EB30F105A0F5E756FF4F0C94910962B9C0 -:100AB00022C08FEF84B965B91EC08FEF84B965B9C4 -:100AC000479A479805C08FEF84B965B95F9A5F98D8 -:100AD00014B811C061B90FC064B90DC067B90BC0BB -:100AE0009AB1862F846189238AB98AB16B7E682B7B -:100AF0006AB901C068B980E008959BB1862F84610E -:100B000089238BB98BB16B7E682B6BB9F4CF8DE8E1 -:100B10000895813A61F0823AB9F0803A11F58FEF89 -:100B200084B965B9479A479814B842B916C08FEF8F -:100B300084B965B9479A479814B842B967FF02C0AB -:100B400041980BC0419A09C042B98FEF84B9603215 -:100B500030F415B8479A479814B880E0089565B9FD -:100B6000F9CF8EE80895803B61F422B98FEF84B904 -:100B700045B9479A479865B95F9A5F9814B880E07D -:100B800008958FE80895CF93DF93EB0190E0805CA8 -:100B900091098C309105F8F48C559F4FFC010C9411 -:100BA000910980B113C083B111C086B10FC089B162 -:100BB0000DC082B10BC085B109C088B107C08BB12F -:100BC00005C081B103C084B101C087B1888380E0D2 -:100BD00003C08AB1FBCF80E9DF91CF9108950F93D5 -:100BE000811102C0589A01C058988FEF84B922B978 -:100BF00045B9479A479805B9459800000000459ABD -:100C0000419A14B858980F9108950F93022F81308C -:100C100061F030F0823089F4242F462F60E008C064 -:100C2000242F462F6FEF81E004C0242F462F6FEF53 -:100C300080E00E94EF0580E001C08AEA0F910895EC -:100C40000F93811102C0589A01C058988FEF84B950 -:100C500002B925B9479A479845B95F9A5F9814B881 -:100C60004498000000000000000083B1449A419ABB -:100C700058980F9108950F931F93CF93DF93E80136 -:100C8000813851F0823891F08038A9F4022F242F56 -:100C9000462F6FEF81E005C0022F242F462F6FEF04 -:100CA00080E00E942006888380E006C0022F242F67 -:100CB000462F60E0F5CF8BEADF91CF911F910F9126 -:100CC00008950F931F93CF93DF931F92CDB7DEB795 -:100CD000FC0182E593E090936E0380936D0319828B -:100CE000808187FF02C081E089838181833009F49C -:100CF0004BC028F48130D1F08230C1F179C0853009 -:100D000009F467C008F454C0863009F071C010922D -:100D1000520380915A0380935303E0915D03F09155 -:100D20005E0382818093540383E060C08281803BB4 -:100D300038F4803A88F4803858F40E94A40459C0EA -:100D4000803C78F42481458163810E94B30551C0C1 -:100D500064810E944C054DC0448165810E948905D3 -:100D600048C063E573E00E94C3051DC082818038DE -:100D700018F40E94C2033DC063E573E00E94FB03C8 -:100D80008093520388E032C08281803830F423811E -:100D9000448165810E948F042CC023E533E04481A7 -:100DA00065810E9464048093520389818F5F1EC015 -:100DB0008281803830F42381448165810E94050658 -:100DC00018C003E513E02481458163810E943B063E -:100DD000EACFAE014F5F5F4F62E573E0CF010E9443 -:100DE000530290936E0380936D0305C0898303C003 -:100DF00080E88093520389810F90DF91CF911F91FA -:100E00000F910895E0915D03F0915E03448120818C -:100E10003181582FFC01742F781B972F9E0F8E2F36 -:100E2000851B861730F48191D901A90FB11D8C93D0 -:100E3000F4CFE0915D03F0915E038481860F84839B -:100E400090915C03961B90935C0310925A03640F7D -:100E50008281861302C088E9838381E0911180E05A -:100E60000895CF93DF9360916F03635067FDA4C033 -:100E700080916C03CCE0D0E0C81BD109CD58DC4F89 -:100E800080916B038D3209F085C0683009F092C003 -:100E900083EC80935F038AE58093010110925B03EA -:100EA0008881807621F0CE010E94610660C08A812F -:100EB000109268039981911106C01092690328E687 -:100EC00033E082E050C0953019F4809370033DC048 -:100ED0009630A9F59B81913019F482E791E004C026 -:100EE000923041F480E691E090936E0380936D031D -:100EF00082E121C09330F1F4811108C08CEC91E0C3 -:100F000090936E0380936D0384E015C0813041F4AB -:100F100082EA91E090936E0380936D038AE20BC0A6 -:100F2000823041F484E891E090936E0380936D03E6 -:100F30008EE101C080E090E490935B0318C098308C -:100F400079F0993031F48093720328E633E080E041 -:100F50000AC081E09A3009F080E028E633E003C05F -:100F600022E733E081E030936E0320936D038F3FDF -:100F700039F4988197FD8E8190E890935B0307C0C8 -:100F80009F81911104C09E81981708F4892F809346 -:100F9000000110C080915B0387FF0CC0CE010E944E -:100FA00002078F3F21F48EE18093010103C081117C -:100FB0001092000110926F038091010184FF4DC0D7 -:100FC000809100018F3F09F448C0C82F893008F094 -:100FD000C8E08C1B8093000180915F0398E889270B -:100FE00080935F03CC2361F180916D0390916E0338 -:100FF00020915B0326FF12C0A0E6B3E02FE533E0AB -:1010000020953095280F391F4C2F4A0FF901EA0F10 -:10101000FB1FE491ED934A13F9CF09C0E0E6F3E03A -:10102000DC012C2F2E0F3D9131932E13FCCF019616 -:101030002FEF2C0F820F911D90936E0380936D0301 -:101040006C2F80E693E00E945608CC5FCC3019F0FC -:101050008FEF80930001C093010184E199B19471F5 -:1010600031F48150D9F71092700310926A03DF9126 -:10107000CF910895E9E6F0E0808182608083E89A6C -:101080000895A82FB92F80E090E041E050EA6095E4 -:1010900030E009C02D9182279795879510F084271D -:1010A0009527305EC8F36F5FA8F30895EADF8D934C -:1010B0009D930895CF93CFB7CF93DF93C3954C9B68 -:1010C000E9F74C9B0BC04C9B09C04C9B07C04C9B49 -:1010D00005C04C9B03C04C9B01C089C06F93C0915D -:1010E0006C03DD27CD58DC4F2F9365E54C9B03C087 -:1010F0002F916F91E6CF0F931F934F9320E040E124 -:101100005F9309B1047104FB27F93F9350E03BE082 -:1011100039C0147140642F77012F5F5F1EC0406893 -:1011200019B114712F7752501FC0406409B12F7745 -:101130000471D1F15F5F00C023C0406219B12F7705 -:10114000147191F15F5F00C025C0047110275150E8 -:1011500012F45D5F0000115027952C3F19B1C8F6BD -:1011600014710127015027952C3FC8F64227499357 -:1011700009B1047110274F73115027952C3FA8F621 -:101180004695469519B1147179F0012701502795BC -:101190002C3F98F66B5A60F3315009B1B0F600C09D -:1011A00011E01CBB002717C03B503195C31BD0403A -:1011B00011E01CBB0881033CF9F00B34E9F02091ED -:1011C0006A031981110F1213EDCF093651F10D3257 -:1011D00011F0013E39F7009371033F915F914F91F8 -:1011E0001F910F912F916F91CCB3C0FD67CFDF910D -:1011F000CF91CFBFCF91189520917103222369F32E -:1012000010916F03112339F534303AF130936F03A5 -:1012100020936B0310916C033BE0311B30936C0304 -:101220001CC000916F030130B4F40AE53091010154 -:1012300034FD14C000930101CFE5D3E013C00527AE -:1012400010E000C000000BB91AC0052710E0221FF3 -:101250001DC010E021C04AE502C032ED432FC4E1B9 -:10126000D0E032E01AB114615C9A0BB11AB954E1C2 -:1012700020E865E320FF05270BB9279517951C3F4C -:10128000F0F66695B8F7B1F720FF05270BB927955B -:1012900017951C3FD0F62795179517FF05270000D7 -:1012A0001C3F0BB9B0F629913A9519F70B7E1091B6 -:1012B0007003110FC651D0400BB911F010936A039F -:1012C00011E01CBB00611AB11B7E402F4B7E54E025 -:1012D0005A95F1F70BB91AB94BB97FCF2EE088E1D7 -:1012E00090E00FB6F894A895809360000FBE20930D -:1012F00060000E943A08549A80E0815041F0A8951D -:10130000EFE9FFE03197F1F700C00000F6CF549805 -:101310000E9472037894A8950E9431070E94DA0215 -:10132000FACFEE0FFF1F0590F491E02D0994F89489 -:02133000FFCFED -:02133200FF5A60 +:10022000813579F1F0F4803509F04BC012968C914C +:100230001297808313968C911397818314968C91D7 +:100240001497828315968C911597838316968C91BB +:100250001697848317968C911797858318968C919F +:100260002AC0803629F0813661F58091300105C0C1 +:10027000A22FB0E0AF5ABE4F8C91808388818F5FF0 +:100280001DC019968C91199780831A968C911A9794 +:1002900081831B968C911B9782831C968C911C9753 +:1002A00083831D968C911D9784831E968C911E9737 +:1002B00085831F968C9186838881895F888380E0FF +:1002C00001C084EBDF91CF91FF90EF90DF90CF9052 +:1002D0000895CF93DF93FC01DB01E9018091410197 +:1002E0009091420120812078203849F4368138836A +:1002F000442309F445C08D919C9111970CC02FEFB8 +:100300002883268120932F01442351F170936203A7 +:100310006093610320E913962C93139714961C9213 +:100320002281213711F02034F1F5A0916103B091C1 +:1003300062030D90BC91A02D25812C93A0916103A7 +:10034000B09162030D90BC91A02D248111962C9345 +:10035000E0916103F091620324812E5F248323C026 +:10036000A0911D01B0911E01B0936203A09361039F +:1003700020E913962C93A0911D01B0911E01CECFC0 +:10038000A0911D01B0911E0113963C911397383D29 +:1003900021F48D919C911197ECCF2FEF288320E1D0 +:1003A00020933001E8CFDF91CF910895E1E5F1E0AE +:1003B0009FEF8FEF919321E0E136F207D1F7809321 +:1003C000440180932201809347018093250180930B +:1003D000340180931001809337018093130181E0F1 +:1003E000809330010895FB01803391F038F4882325 +:1003F00061F08130B9F42093300112C0823371F082 +:1004000050F0833379F427870BC00E94D60108C0CF +:100410004187228705C04387248702C045872687F6 +:1004200080E0089584EB0895CF93DF93FC0150E0C2 +:10043000CA01820F911D41970CF047C0222309F495 +:1004400046C083818F3F09F044C086818F3F09F009 +:1004500042C080E090E0EA01CF5ADE4F821750F4AC +:100460000196DE01A80FB91F11973C913F3FB1F3F0 +:1004700081EC32C066831382822F8295880F807E42 +:10048000815082831482158210861782118612860B +:1004900013861486158616861786CA0135E0880FDE +:1004A000991F3A95E1F78F599E4F9183808380E0A1 +:1004B00090E04F5A5E4F821730F4FA01E80FF91FAF +:1004C00060830196F8CF80E007C08EEB05C082EC18 +:1004D00003C08FEB01C080ECDF91CF9108950F93A3 +:1004E000FB01642F422F202F803888F0883858F085 +:1004F0008059883060F40583242F30E0362B308714 +:10050000278380E005C0CF010F910C94140286EB85 +:100510000F910895CF92DF92EF92FF920F93CF93B6 +:10052000DF93FC01EB016A01828190ED980F90331B +:1005300070F49381913071F050F0923029F0933043 +:10054000C1F56DE071E008C061E371E005C061E4F0 +:1005500071E002C06FE171E0803768F4803580F4AB +:10056000803408F047C00381248145810E94F30153 +:10057000888381E03CC0803868F4960140E03CC04C +:100580007E019FEFE91AF90A0381248145810E94C7 +:1005900007013DC0982F97709130A1F080F0923004 +:1005A00029F0933031F46DE071E00EC061E371E049 +:1005B0000BC086E8888381E0D6018C9329C061E472 +:1005C00071E002C06FE171E0803F50F4803C58F46C +:1005D0008038E0F00381248145810E946F0217C0BA +:1005E000883F40F013C0DB01CD91DC918681F6019C +:1005F00080830EC096014FEFCF01DF91CF910F9115 +:10060000FF90EF90DF90CF900C94690185E888838C +:10061000CE01DF91CF910F91FF90EF90DF90CF90BF +:10062000089590914401809122018F3F29F481E047 +:100630009F3F19F480E001C082E0909134019F3F18 +:1006400009F083E0909110019F3F09F084E0089544 +:10065000623049F421E08134920739F121E08F3191 +:10066000920761F10895633069F421E081349207C3 +:10067000E1F021E08F319207D9F021E08133920738 +:10068000E9F008956430E1F421E08134920769F0E3 +:1006900021E08F31920761F021E08133920759F018 +:1006A00021E08D30920751F008958FE191E0089597 +:1006B00081E391E008958DE091E0089581E491E077 +:1006C0000895CF93DF93D09130018D2F8F7D823DA0 +:1006D00001F50E941103C82F8093020121E431E04B +:1006E00030931E0120931D01D23D99F4C901D1E040 +:1006F000DC1728F46C2F0E942803DF5FF9CF90935A +:100700001E0180931D0120E8FC01238380ED80936E +:10071000300180913001823F19F480EF80933001E5 +:10072000C0913001C03D31F580911D0190911E01B5 +:10073000FC0123812038F1F4609102010E9428031A +:1007400090931E0180931D01FC011482C3830E94BB +:10075000BD03E0911D01F0911E01882311F08383F8 +:1007600009C088ED8383258187819085820F911D43 +:1007700090878783DF91CF9108950F93CF93DF9375 +:10078000EC016F8189858C3061F028F48A3039F072 +:100790008B3081F002C08F3068F083EC0CC0606851 +:1007A00001C060660FEF2A814E81888199810E9485 +:1007B0008A058C8380E0DF91CF910F9108950F938C +:1007C0001F93CF93DF93EC011F8110689C818A8176 +:1007D000981790F54AEA65E585E50E94B00445E57D +:1007E0006AEA8AE20E94B00440EA65E585E50E9473 +:1007F000B0046C81E881F981E60FF11D4081812F01 +:100800000E94B0046C81812F0E94D804082F6C8153 +:10081000812F0E94D8040813F5CF8C81E881F981DB +:10082000E80FF11D9081091304C08F5F8C835998E4 +:10083000CDCF519A599ACACF80E0DF91CF911F91C5 +:100840000F91089511B88FEF82B914B885B917B810 +:1008500088B98AB184718AB98BB18B6E8BB9509883 +:1008600058985198599A08950E942204399A419AA9 +:10087000389A40983A9A429A3C9A449A3D9A459AB4 +:100880003F9A479A47988FEF84B915B8479A479887 +:1008900014B812B881B914B885B908950E94220419 +:1008A000399A419A3C9A449A3D9A459A509A589A54 +:1008B0003F9A479A4798579A5F9A5F988FEF84B903 +:1008C00015B8479A479814B884B915B85F9A5F98D5 +:1008D00014B812B881B914B885B90895813049F0B7 +:1008E00028F0823051F40E944E0405C00E94220478 +:1008F00002C00E94340480E0089586E90895FC0156 +:1009000081E080835898509A000089B18183509883 +:100910005898908181818923891308C08AEA868347 +:100920008483828385E58583838308955098589ACC +:1009300089B1818389B1828389B1838389B18483B9 +:1009400089B1858389B186835098589808958038F5 +:1009500029F4CB010E947F0480E0089587E908957F +:100960009FEF94B985B9479A479862B945B95898A5 +:10097000509A5098589A14B808955098589840989A +:10098000419A429A62B99FEF94B985B9479A4798BC +:1009900014B800000000409A87FD41980000000054 +:1009A000000000000000000083B14098419A0895C3 +:1009B00062B99FEF94B985B9479A479814B8409A9D +:1009C00087FD4198000000000000000083B14098BE +:1009D000419A0895509858989FEF94B962B985B993 +:1009E000479A4798429845B9409A87FD4198000038 +:1009F00000004098419A429A14B808959FEF94B924 +:100A0000803208F4806885B9479A479814B862B96B +:100A10004498000000000000000083B1449A08954B +:100A20009FEF94B9803208F4806885B9479A479857 +:100A300062B945B9000045980000459A14B8089578 +:100A4000982F862F642F422F913049F028F0923052 +:100A500051F40E94EA0405C00E94B00402C00E9442 +:100A6000100580E0089580EA08958FEF84B984E04E +:100A700085B9479A479829B188E085B9479A479838 +:100A800089B1807214B891E0422F407225FD90E048 +:100A900031E0882311F030E002C0911114C021E050 +:100AA000411101C020E0811103C0222381F003C065 +:100AB000222329F00AC0332351F082E108959923BB +:100AC00031F083E1089580E1089581E108958FEF89 +:100AD0000895CF93DF93982F862F642FE9019138E3 +:100AE00069F028F4903891F40E94BD040CC092384B +:100AF00041F0933859F40E94350505C00E94D8048E +:100B000002C00E94FE04888380E001C081EADF9178 +:100B1000CF910895EF92FF920F93CF93DF9300D080 +:100B20001F92CDB7DEB77C018FEF84B965B9479AC4 +:100B3000479814B8409A67FD419842B980E0011186 +:100B400003C00000000008C02B834A8389830E94F1 +:100B50004E0889814A812B8193B1F701E80FF11D7D +:100B600090834F5F42B98F5F281748F74098419AAA +:100B70000F900F900F90DF91CF910F91FF90EF901A +:100B8000089590E08B35910508F0A1C0FC01E25C6E +:100B9000FF4F0C94AE0A11B895C08FEF81B992C087 +:100BA00012B890C08FEF82B98DC014B88BC08FEF90 +:100BB00084B988C015B886C08FEF85B983C017B8CF +:100BC00081C018B87FC08FEF88B97CC038987AC0D0 +:100BD000389A78C0409876C0409A74C0399872C0EC +:100BE000399A70C041986EC0419A6CC03A986AC0F8 +:100BF0003A9A68C0429866C0429A64C03B9862C004 +:100C00003B9A60C043985EC0439A5CC03C985AC00F +:100C10003C9A58C0449856C0449A54C03D9852C01B +:100C20003D9A50C045984EC0459A4CC03E984AC027 +:100C30003E9A48C0469846C0469A44C03F9842C033 +:100C40003F9A40C0479A3EC08AB184718AB93AC07F +:100C50008BB1847102C08BB18B6E8BB933C050984D +:100C600031C05898509A2EC05098589A2BC050981E +:100C7000589828C0519826C0519A24C0599822C02B +:100C8000599A20C053981EC0539A1CC05B981AC032 +:100C90005B9A18C0559816C0559A14C05D9812C03A +:100CA0005D9A10C056980EC0569A0CC05E980AC045 +:100CB0005E9A08C0579806C0579A04C05F9A02C04F +:100CC0005F9A5F9880E00895479A4798FBCF8CE839 +:100CD000089590E0FC01E058F109EB30F105A0F532 +:100CE000E756FF4F0C94AE0A62B922C08FEF84B969 +:100CF00065B91EC08FEF84B965B9479A479805C09A +:100D00008FEF84B965B95F9A5F9814B811C061B963 +:100D10000FC064B90DC067B90BC09AB1862F84614A +:100D200089238AB98AB16B7E682B6AB901C068B918 +:100D300080E008959BB1862F846189238BB98BB1A4 +:100D40006B7E682B6BB9F4CF8DE80895813A61F022 +:100D5000823AB9F0803A11F58FEF84B965B9479AB4 +:100D6000479814B842B916C08FEF84B965B9479A4D +:100D7000479814B842B967FF02C041980BC0419A26 +:100D800009C042B98FEF84B9603230F415B8479A80 +:100D9000479814B880E0089565B9F9CF8EE80895B2 +:100DA000803B61F422B98FEF84B945B9479A4798DF +:100DB00065B95F9A5F9814B880E008958FE8089548 +:100DC000CF93DF93EB0190E0805C91098C3091052B +:100DD000F8F48C559F4FFC010C94AE0A80B113C0FF +:100DE00083B111C086B10FC089B10DC082B10BC0F3 +:100DF00085B109C088B107C08BB105C081B103C0FE +:100E000084B101C087B1888380E003C08AB1FBCF81 +:100E100080E9DF91CF9108950F93811102C0589A14 +:100E200001C058988FEF84B922B945B9479A4798BD +:100E300005B9459800000000459A419A14B85898A1 +:100E40000F9108950F93022F813061F030F08230BE +:100E500089F4242F462F60E008C0242F462F6FEF1F +:100E600081E004C0242F462F6FEF80E00E940C0722 +:100E700080E001C08AEA0F9108950F93811102C0AA +:100E8000589A01C058988FEF84B902B925B9479A8A +:100E9000479845B95F9A5F9814B8449800000000DD +:100EA0000000000083B1449A419A58980F91089528 +:100EB0000F931F93CF93DF93E801813851F082386D +:100EC00091F08038A9F4022F242F462F6FEF81E094 +:100ED00005C0022F242F462F6FEF80E00E943D07B0 +:100EE000888380E006C0022F242F462F60E0F5CFD4 +:100EF0008BEADF91CF911F910F9108950F931F936C +:100F0000CF93DF931F92CDB7DEB7FC0183E091E072 +:100F100090937203809371031982808187FF02C0CE +:100F200081E089838181833009F44BC028F48130CA +:100F3000D1F08230C1F179C0853009F467C008F47E +:100F400054C0863009F071C01092030180910B01EA +:100F500080930401E0916103F091620382818093A8 +:100F6000050183E060C08281803B38F4803A88F4D8 +:100F7000803858F40E94C10559C0803C78F424811F +:100F8000458163810E94D00651C064810E94690638 +:100F90004DC0448165810E94A60648C064E071E0AE +:100FA0000E94E0061DC08281803818F40E946E0401 +:100FB0003DC064E071E00E94A7048093030188E0D3 +:100FC00032C08281803830F42381448165810E945F +:100FD00020052CC024E031E0448165810E94690530 +:100FE0008093030189818F5F1EC08281803830F435 +:100FF0002381448165810E94220718C004E011E02A +:101000002481458163810E945807EACFAE014F5F7A +:101010005F4F63E071E0CF010E948A0290937203F8 +:101020008093710305C0898303C080E88093030126 +:1010300089810F90DF91CF911F910F910895E091D9 +:101040006103F0916203448120813181582FFC01BA +:10105000742F781B972F9E0F8E2F851B861730F4C9 +:101060008191D901A90FB11D8C93F4CFE091610357 +:10107000F09162038481860F848390912F01961BE7 +:1010800090932F0110920B01640F8281861302C08E +:1010900088E9838381E0911180E00895CF93DF9305 +:1010A00060917303635067FDA4C080917003CCE02E +:1010B000D0E0C81BD109C958DC4F80916F038D3235 +:1010C00009F085C0683009F092C083EC8093630317 +:1010D0008AE58093010110920C018881807621F0CD +:1010E000CE010E947E0760C08A8110926C039981B4 +:1010F000911106C010926D032CE633E082E050C0DF +:10110000953019F4809374033DC09630A9F59B8106 +:10111000913019F482E791E004C0923041F480E606 +:1011200091E0909372038093710382E121C0933028 +:10113000F1F4811108C08CEC91E0909372038093DC +:10114000710384E015C0813041F482EA91E090930C +:101150007203809371038AE20BC0823041F484E809 +:1011600091E090937203809371038EE101C080E05F +:1011700090E490930C0118C0983079F0993031F4D4 +:10118000809376032CE633E080E00AC081E09A3059 +:1011900009F080E02CE633E003C026E733E081E08D +:1011A00030937203209371038F3F39F4988197FD38 +:1011B0008E8190E890930C0107C09F81911104C02B +:1011C0009E81981708F4892F8093000110C08091A8 +:1011D0000C0187FF0CC0CE010E941F088F3F21F435 +:1011E0008EE18093010103C08111109200011092E1 +:1011F00073038091010184FF4DC0809100018F3FF6 +:1012000009F448C0C82F893008F0C8E08C1B8093CF +:1012100000018091630398E8892780936303CC23BE +:1012200061F1809171039091720320910C0126FF6E +:1012300012C0A4E6B3E023E633E020953095280FF2 +:10124000391F4C2F4A0FF901EA0FFB1FE491ED9370 +:101250004A13F9CF09C0E4E6F3E0DC012C2F2E0F8E +:101260003D9131932E13FCCF01962FEF2C0F820F5F +:10127000911D90937203809371036C2F84E693E029 +:101280000E947309CC5FCC3019F08FEF809300017E +:10129000C093010184E199B1947131F48150D9F77F +:1012A0001092740310926E03DF91CF910895E9E6D6 +:1012B000F0E0808182608083E89A0895A82FB92F9A +:1012C00080E090E041E050EA609530E009C02D9167 +:1012D00082279795879510F084279527305EC8F36D +:1012E0006F5FA8F30895EADF8D939D930895CF93E0 +:1012F000CFB7CF93DF93C3954C9BE9F74C9B0BC0C3 +:101300004C9B09C04C9B07C04C9B05C04C9B03C029 +:101310004C9B01C089C06F93C0917003DD27C958F1 +:10132000DC4F2F9365E54C9B03C02F916F91E6CF67 +:101330000F931F934F9320E040E15F9309B1047135 +:1013400004FB27F93F9350E03BE039C0147140643F +:101350002F77012F5F5F1EC0406819B114712F777E +:1013600052501FC0406409B12F770471D1F15F5F03 +:1013700000C023C0406219B12F77147191F15F5FF3 +:1013800000C025C004711027515012F45D5F0000A9 +:10139000115027952C3F19B1C8F61471012701503F +:1013A00027952C3FC8F64227499309B104711027AD +:1013B0004F73115027952C3FA8F64695469519B1C5 +:1013C000147179F00127015027952C3F98F66B5A3C +:1013D00060F3315009B1B0F600C011E01CBB00272A +:1013E00017C03B503195C31BD04011E01CBB088196 +:1013F000033CF9F00B34E9F020916E031981110FD1 +:101400001213EDCF093651F10D3211F0013E39F7CB +:10141000009375033F915F914F911F910F912F9111 +:101420006F91CCB3C0FD67CFDF91CF91CFBFCF918C +:10143000189520917503222369F3109173031123EA +:1014400039F534303AF13093730320936F031091E0 +:1014500070033BE0311B309370031CC00091730399 +:101460000130B4F40AE53091010134FD14C0009359 +:101470000101C3E6D3E013C0052710E000C000005F +:101480000BB91AC0052710E0221F1DC010E021C0B3 +:101490004AE502C032ED432FC4E1D0E032E01AB198 +:1014A00014615C9A0BB11AB954E120E865E320FF9E +:1014B00005270BB9279517951C3FF0F66695B8F7E9 +:1014C000B1F720FF05270BB9279517951C3FD0F6DC +:1014D0002795179517FF052700001C3F0BB9B0F69D +:1014E00029913A9519F70B7E10917403110FC6518B +:1014F000D0400BB911F010936E0311E01CBB0061DA +:101500001AB11B7E402F4B7E54E05A95F1F70BB970 +:101510001AB94BB97FCF2EE088E190E00FB6F8946E +:10152000A895809360000FBE209360000E94570929 +:10153000549A80E0815041F0A895EFE9FFE031979F +:10154000F1F700C00000F6CF54980E94220478946E +:10155000A8950E944E080E946103FACFEE0FFF1F6C +:0C1560000590F491E02D0994F894FFCF61 +:02156C00FF5A24 :00000001FF diff --git a/firmware/source/buffer.c b/firmware/source/buffer.c index c6a2169..209c536 100644 --- a/firmware/source/buffer.c +++ b/firmware/source/buffer.c @@ -54,11 +54,11 @@ uint8_t raw_bank_status[NUM_RAW_BANKS]; //uint8_t * buffer_usb_call( setup_packet *spacket, uint8_t *rv, uint16_t *rlen) uint8_t * buffer_usb_call( setup_packet *spacket, uint8_t *rv, uint8_t *rlen) { - buffer *called_buff; //= &buff0; //used to point to buffer that was called based on opcode + buffer *called_buff = &buff0; //used to point to buffer that was called based on opcode init no warn uint8_t *rptr = rv; //used for return pointer set to small rv buffer by default //some opcodes place buffer number in misc/data - if ( (spacket->opcode > BUFFN_INMISC_MIN) && (spacket->opcode < BUFFN_INMISC_MAX) ) { + if ( (spacket->opcode >= BUFFN_INMISC_MIN) && (spacket->opcode <= BUFFN_INMISC_MAX) ) { // called_buff = &buff1; switch ( spacket->miscdata ) { //2 buffers minimum support @@ -653,7 +653,7 @@ void update_buffers() } - +//usbPoll(); //this will get entered on first and all successive calls if ( operation == DUMPING ) { //buffer_payload will pass cur_buff to usb driver on next IN transfer @@ -671,7 +671,7 @@ void update_buffers() //send buffer off to dump result = dump_page( cur_buff ); if (result != SUCCESS) { - cur_buff->status = PROBLEM; + cur_buff->status = result; } else { cur_buff->status = DUMPED; //increment page_num so everything is ready for next dump @@ -679,6 +679,7 @@ void update_buffers() cur_buff->page_num += cur_buff->reload; } } + } diff --git a/firmware/source/buffer.h b/firmware/source/buffer.h index 871ad00..f58dfd2 100644 --- a/firmware/source/buffer.h +++ b/firmware/source/buffer.h @@ -2,6 +2,7 @@ #define _buffer_h #include +#include "usbdrv.h" #include "types.h" #include "logic.h" #include "usb.h" diff --git a/firmware/source/dump.c b/firmware/source/dump.c index 83b8f7f..b30140b 100644 --- a/firmware/source/dump.c +++ b/firmware/source/dump.c @@ -9,7 +9,7 @@ uint8_t dump_page( buffer *buff ) { uint8_t addrH = buff->page_num; //A15:8 while accessing page - uint8_t addrX; //A23:16 while accessing page +//warn uint8_t addrX; //A23:16 while accessing page //TODO use mapper to set mapper controlled address bits @@ -18,10 +18,10 @@ uint8_t dump_page( buffer *buff ) { switch ( buff->mem_type ) { case PRGROM: addrH |= 0x80; //$8000 - //uint8_t nes_cpu_page_rd( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t last ) - buff->cur_byte = nes_cpu_page_rd( buff->data, addrH, buff->id, + //uint8_t nes_cpu_page_rd( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t last, uint8_t poll ) + buff->cur_byte = nes_cpu_page_rd_poll( buff->data, addrH, buff->id, //id contains MSb of page when <256B buffer - (buff->last_idx | buff->id) ); + buff->last_idx, ~FALSE ); break; case CHRROM: //$0000 //buff->cur_byte = nes_ppu_page_rd( buff->data, addrH, buff->id, @@ -29,12 +29,12 @@ uint8_t dump_page( buffer *buff ) { break; case PRGRAM: addrH |= 0x60; //$6000 - buff->cur_byte = nes_cpu_page_rd( buff->data, addrH, buff->id, - (buff->last_idx | buff->id) ); + buff->cur_byte = nes_cpu_page_rd_poll( buff->data, addrH, buff->id, + buff->last_idx, ~FALSE ); break; case SNESROM: case SNESRAM: - addrX = ((buff->page_num)>>8); +//warn addrX = ((buff->page_num)>>8); break; default: return ERR_BUFF_UNSUP_MEM_TYPE; diff --git a/firmware/source/dump.h b/firmware/source/dump.h index 4b33d9f..703d0f5 100644 --- a/firmware/source/dump.h +++ b/firmware/source/dump.h @@ -2,6 +2,7 @@ #define _dump_h #include +#include "usbdrv.h" #include "types.h" #include "logic.h" #include "usb.h" diff --git a/firmware/source/nes.c b/firmware/source/nes.c index 091eafc..c468f2e 100644 --- a/firmware/source/nes.c +++ b/firmware/source/nes.c @@ -391,10 +391,12 @@ uint8_t ciram_a10_mirroring( void ) return UNKNOWN; } -/* Desc:NES CPU Page Read +/* Desc:NES CPU Page Read with optional USB polling * decode A15 from addrH to set /ROMSEL as expected * float EXP0 * toggle M2 as NES would + * if poll is true calls usbdrv.h usbPoll fuction + * this is needed to keep from timing out when double buffering usb data * Pre: nes_init() setup of io pins * num_bytes can't exceed 256B page boundary * Post:address left on bus @@ -403,7 +405,7 @@ uint8_t ciram_a10_mirroring( void ) * data buffer filled starting at first to last * Rtn: Index of last byte read */ -uint8_t nes_cpu_page_rd( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t last ) +uint8_t nes_cpu_page_rd_poll( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t len, uint8_t poll ) { uint8_t i; @@ -416,19 +418,20 @@ uint8_t nes_cpu_page_rd( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t la _ROMSEL_LO(); //romsel trails M2 during CPU operations } + //set lower address bits ADDR_OUT = first; //doing this prior to entry and right after latching //gives longest delay between address out and latching data - for( i=0; i<=last; i++ ) { - //set lower address bits + for( i=0; i<=len; i++ ) { //couple more NOP's waiting for data - //zero nop's returned previous databus value - NOP(); //one nop got most of the bits right - NOP(); //two nop got all the bits right - NOP(); //add third nop for some extra - //might need to wait longer for some carts... - + if ( poll == FALSE ) { + NOP(); //one prob good enough considering the if/else + NOP(); + } else { + usbPoll(); + } //latch data data[i] = DATA_IN; + //set lower address bits ADDR_OUT = ++first; } diff --git a/firmware/source/nes.h b/firmware/source/nes.h index d35abd3..077f1fa 100644 --- a/firmware/source/nes.h +++ b/firmware/source/nes.h @@ -2,6 +2,7 @@ #define _nes_h #include +#include "usbdrv.h" #include "pinport.h" #include "shared_dictionaries.h" #include "shared_errors.h" @@ -17,6 +18,6 @@ void nes_cpu_wr( uint8_t addrH, uint8_t addrL, uint8_t data ); uint8_t nes_ppu_rd( uint8_t addrH, uint8_t addrL ); void nes_ppu_wr( uint8_t addrH, uint8_t addrL, uint8_t data ); uint8_t ciram_a10_mirroring( void ); -uint8_t nes_cpu_page_rd( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t last ); +uint8_t nes_cpu_page_rd_poll( uint8_t *data, uint8_t addrH, uint8_t first, uint8_t last, uint8_t poll ); #endif diff --git a/host/source/buffer.c b/host/source/buffer.c index 32b240f..a5414b8 100644 --- a/host/source/buffer.c +++ b/host/source/buffer.c @@ -92,9 +92,7 @@ error: int set_mem_n_part( USBtransfer *transfer, int buff_num, int mem_type, int part_num ) { return dictionary_call( transfer, DICT_BUFFER, SET_MEM_N_PART, - //( (mem_type<<8) | (part_num) ), buff_num, USB_IN, NULL, 1); - ( (mem_type<<8) | (part_num) ), 1, USB_IN, NULL, 1); - // 0xAABB, buff_num, USB_IN, NULL, 1); + ( (mem_type<<8) | (part_num) ), buff_num, USB_IN, NULL, 1); } /* Desc:Set buffer mapper and map_var @@ -106,7 +104,6 @@ int set_map_n_mapvar( USBtransfer *transfer, int buff_num, int mapper, int map_v { return dictionary_call( transfer, DICT_BUFFER, SET_MAP_N_MAPVAR, ( (mapper<<8) | (map_var) ), buff_num, USB_IN, NULL, 1); - // 0xCCDD, buff_num, USB_IN, NULL, 1); } /* Desc:Set buffer manager operation diff --git a/host/source/dump.c b/host/source/dump.c index a197df7..a4fee29 100644 --- a/host/source/dump.c +++ b/host/source/dump.c @@ -50,63 +50,64 @@ int dump_cart( USBtransfer* transfer, rom_image *rom, cartridge *cart ) //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, MASKROM, PRGROM ), "Unable to set mem_type and part"); - //check(! set_mem_n_part( transfer, buff1, MASKROM, PRGROM ), "Unable to set mem_type and part"); - check(! set_mem_n_part( transfer, buff0, 0x12, 0x34 ), "Unable to set mem_type and part"); - check(! set_mem_n_part( transfer, buff1, 0x56, 0x78 ), "Unable to set mem_type and part"); + check(! set_mem_n_part( transfer, buff0, PRGROM, MASKROM ), "Unable to set mem_type and part"); + check(! set_mem_n_part( transfer, buff1, PRGROM, MASKROM ), "Unable to set mem_type and part"); //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 - //check(! set_map_n_mapvar( transfer, buff0, NROM, NILL ), "Unable to set mapper and map_var"); - //check(! set_map_n_mapvar( transfer, buff1, NROM, NILL ), "Unable to set mapper and map_var"); - check(! set_map_n_mapvar( transfer, buff0, 0x89, 0xAB ), "Unable to set mapper and map_var"); - check(! set_map_n_mapvar( transfer, buff1, 0xCD, 0XEF ), "Unable to set mapper and map_var"); + check(! set_map_n_mapvar( transfer, buff0, NROM, NILL ), "Unable to set mapper and map_var"); + check(! set_map_n_mapvar( transfer, buff1, NROM, NILL ), "Unable to set mapper and map_var"); //tell buffers what function to use for dumping //TODO when start implementing other mappers + dictionary_call_debug( transfer, DICT_NES, NES_CPU_RD, 0x8000, NILL, + USB_IN, NULL, RV_DATA0_IDX+1); //debugging print out buffer elements - get_buff_operation( transfer ); - get_buff_elements( transfer, buff0 ); - get_buff_elements( transfer, buff1 ); + //get_buff_operation( transfer ); + //get_buff_elements( transfer, buff0 ); + //get_buff_elements( transfer, buff1 ); - debug("setting operation STARTDUMP"); + debug("\n\nsetting operation STARTDUMP"); //inform buffer manager to start dumping operation now that buffers are initialized check(! set_buff_operation( transfer, STARTDUMP ), "Unable to set buffer operation"); - get_buff_operation( transfer ); - get_buff_elements( transfer, buff0 ); - get_buff_elements( transfer, buff1 ); +// get_buff_operation( transfer ); +// get_buff_elements( transfer, buff0 ); +// get_buff_elements( transfer, 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 //buffer updates it's elements and goes off to dump next page - debug("first payload"); - check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); - check(! append_to_file( rom, data, buff_size ), "Error with file append"); - - get_buff_operation( transfer ); - get_buff_elements( transfer, buff0 ); - get_buff_elements( transfer, buff1 ); - - debug("second payload"); - check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); - check(! append_to_file( rom, data, buff_size ), "Error with file append"); - - get_buff_operation( transfer ); - get_buff_elements( transfer, buff0 ); - get_buff_elements( transfer, buff1 ); +// debug("first payload"); +// check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); +// check(! append_to_file( rom, data, buff_size ), "Error with file append"); +// +// debug("first payload done"); +// get_buff_operation( transfer ); +// get_buff_elements( transfer, buff0 ); +// get_buff_elements( transfer, buff1 ); +// +// debug("second payload"); +// check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); +// check(! append_to_file( rom, data, buff_size ), "Error with file append"); +// +// get_buff_operation( transfer ); +// get_buff_elements( transfer, buff0 ); +// get_buff_elements( transfer, buff1 ); //now just need to call series of payload IN transfers to retrieve data - //for( i=0; i<(32*KByte/buff_size); i++) { -// for( i=0; i<(8*KByte/buff_size); i++) { -// //payload transfer in and append to file -// if ( i % 32 == 0 ) debug("payload in #%d", i); -// check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); -// check(! append_to_file( rom, data, buff_size ), "Error with file append"); -// } + //for( i=0; i<(256*KByte/buff_size); i++) { + for( i=0; i<(32*KByte/buff_size); i++) { + //for( i=0; i<(8*KByte/buff_size); i++) { + //payload transfer in and append to file + if ( i % 256 == 0 ) debug("payload in #%d", i); + check(! payload_in( transfer, data, buff_size ), "Error with payload IN"); + if (i==0) printf("first byte: %x\n", data[0]); + check(! append_to_file( rom, data, buff_size ), "Error with file append"); + } debug("payload done"); //TODO flush file from time to time..? diff --git a/host/source/test.c b/host/source/test.c index a22c9e7..d3a81fd 100644 --- a/host/source/test.c +++ b/host/source/test.c @@ -2,9 +2,126 @@ int test_function( USBtransfer *transfer ) { - debug("testing"); + dictionary_call_debug( transfer, DICT_IO, IO_RESET, 0, 0, USB_IN, + NULL, 1); + dictionary_call_debug( transfer, DICT_IO, NES_INIT, 0, 0, USB_IN, + NULL, 1); + debug("\nreset"); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BUFFER_RESET, 0, 0, USB_IN, + NULL, 1); + debug("\nallocate 0"); // id:base, numbanks + dictionary_call_debug( transfer, DICT_BUFFER, ALLOCATE_BUFFER0, 0x0E00, 4, USB_IN, + NULL, 1); + debug("\nallocate 1"); // id:base, numbanks + dictionary_call_debug( transfer, DICT_BUFFER, ALLOCATE_BUFFER1, 0x8104, 4, USB_IN, + NULL, 1); + debug("\nallocate 2"); // id:base, numbanks + dictionary_call_debug( transfer, DICT_BUFFER, ALLOCATE_BUFFER2, 0x2208, 6, USB_IN, + NULL, 1); + debug("\nallocate 3"); // id:base, numbanks + dictionary_call_debug( transfer, DICT_BUFFER, ALLOCATE_BUFFER3, 0x330E, 2, USB_IN, + NULL, 1); + debug("\nmapvar 2: 21,22"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MAP_N_MAPVAR, 0x2122, 2, USB_IN, + NULL, 1); + debug("\nmapvar 0: e1,1e"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MAP_N_MAPVAR, 0xe11e, 0, USB_IN, + NULL, 1); + debug("\nmapvar 1: 11,12"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MAP_N_MAPVAR, 0x1112, 1, USB_IN, + NULL, 1); + debug("\nmapvar 3: 31,33"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MAP_N_MAPVAR, 0x3133, 3, USB_IN, + NULL, 1); + + + debug("\npri elements"); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 0, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 1, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 2, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 3, USB_IN, + NULL, 8); + debug("\nsec elements"); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 0, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 1, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 2, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 3, USB_IN, + NULL, 8); + +/////////////////////////////// + debug("\nmem_part 0: ea,eb"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MEM_N_PART, 0xeaeb, 0, USB_IN, + NULL, 1); + debug("\nmem_part 1: 1a,1b"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MEM_N_PART, 0x1a1b, 1, USB_IN, + NULL, 1); + debug("\nmem_part 2: 2a,2b"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MEM_N_PART, 0x2a2b, 2, USB_IN, + NULL, 1); + debug("\nmem_part 3: 3a,3b"); + dictionary_call_debug( transfer, DICT_BUFFER, SET_MEM_N_PART, 0x3a3b, 3, USB_IN, + NULL, 1); +/////////////////////////////// + + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 0, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 1, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 2, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_PRI_ELEMENTS, 0, 3, USB_IN, + NULL, 8); + debug("\nsec elements"); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 0, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 1, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 2, USB_IN, + NULL, 8); + dictionary_call_debug( transfer, DICT_BUFFER, GET_SEC_ELEMENTS, 0, 3, USB_IN, + NULL, 8); + /*debug("\nraw bank status"); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 0, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 1, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 2, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 3, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 4, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 5, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 6, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 7, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 8, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 9, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 10, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 11, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 12, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 13, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 14, 0, USB_IN, + NULL, 2); + dictionary_call_debug( transfer, DICT_BUFFER, RAW_BANK_STATUS, 15, 0, USB_IN, + NULL, 2); +*/ //debug("uninit"); //get_buff_elements( transfer, 0 ); //get_buff_elements( transfer, 1 ); @@ -327,7 +444,7 @@ int test_function( USBtransfer *transfer ) return 0; -error: - return -1; +//error: +// return -1; } diff --git a/shared/shared_enums.h b/shared/shared_enums.h index ea7f2a7..970bb29 100644 --- a/shared/shared_enums.h +++ b/shared/shared_enums.h @@ -94,6 +94,7 @@ enum buff_mem_type { #define STARTFLASH 0xF2 #define FLASHED 0xF4 #define FLASH_WAIT 0xF8 +#define STOPPED 0xFE #define UNALLOC 0xFF #endif